From 45f0a9f971b948171f2f3817364d881bb5809967 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Tue, 14 Jan 2025 20:44:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BD=BD=E5=85=B7=E8=A2=AB?= =?UTF-8?q?=E5=87=BB=E6=AF=81=E4=BC=A4=E5=AE=B3=E7=B1=BB=E5=9E=8B=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=82=AE=E7=9A=84=E8=A2=AB=E7=86=8F=E9=BB=91?= =?UTF-8?q?=E5=9B=BE=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/layer/Mk42DamageLayer.java | 30 -------------- .../client/layer/Mle1934DamageLayer.java | 30 -------------- .../client/renderer/entity/Mk42Renderer.java | 2 - .../renderer/entity/Mle1934Renderer.java | 2 - .../projectile/SmallCannonShellEntity.java | 2 +- .../entity/vehicle/Ah6Entity.java | 24 ++++++++++- .../entity/vehicle/AnnihilatorEntity.java | 31 +++++++++++--- .../entity/vehicle/Lav150Entity.java | 38 ++++++++++++++---- .../entity/vehicle/Mk42Entity.java | 32 +++++++++++++-- .../entity/vehicle/Mle1934Entity.java | 28 +++++++++++-- .../entity/vehicle/SpeedboatEntity.java | 37 +++++++++++++---- .../entity/vehicle/VehicleEntity.java | 18 ++++----- .../entity/vehicle/WheelChairEntity.java | 32 +++++++-------- .../event/LivingEventHandler.java | 6 ++- .../superbwarfare/init/ModDamageTypes.java | 5 +++ .../assets/superbwarfare/lang/en_us.json | 3 ++ .../assets/superbwarfare/lang/zh_cn.json | 5 ++- .../textures/entity/mle1934_damage.png | Bin 35387 -> 0 bytes .../textures/entity/sherman_damage.png | Bin 6534 -> 0 bytes .../tags/damage_type/bypasses_armor.json | 1 + .../tags/damage_type/bypasses_effects.json | 1 + .../damage_type/bypasses_enchantments.json | 1 + .../tags/damage_type/bypasses_resistance.json | 1 + .../damage_type/vehicle_explosion.json | 5 +++ 24 files changed, 213 insertions(+), 121 deletions(-) delete mode 100644 src/main/java/com/atsuishio/superbwarfare/client/layer/Mk42DamageLayer.java delete mode 100644 src/main/java/com/atsuishio/superbwarfare/client/layer/Mle1934DamageLayer.java delete mode 100644 src/main/resources/assets/superbwarfare/textures/entity/mle1934_damage.png delete mode 100644 src/main/resources/assets/superbwarfare/textures/entity/sherman_damage.png create mode 100644 src/main/resources/data/superbwarfare/damage_type/vehicle_explosion.json diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/Mk42DamageLayer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/Mk42DamageLayer.java deleted file mode 100644 index 649d3994f..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/client/layer/Mk42DamageLayer.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.atsuishio.superbwarfare.client.layer; - -import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.entity.vehicle.Mk42Entity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import software.bernie.geckolib.cache.object.BakedGeoModel; -import software.bernie.geckolib.renderer.GeoRenderer; -import software.bernie.geckolib.renderer.layer.GeoRenderLayer; - -public class Mk42DamageLayer extends GeoRenderLayer { - - private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/sherman_damage.png"); - - public Mk42DamageLayer(GeoRenderer entityRenderer) { - super(entityRenderer); - } - - @Override - public void render(PoseStack poseStack, Mk42Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - RenderType glowRenderType = RenderType.entityTranslucent(LAYER); - float heal = Mth.clamp((0.3f * animatable.getMaxHealth() - animatable.getHealth()) * 0.00001f * animatable.getMaxHealth(), 0, 1); - getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, heal); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/Mle1934DamageLayer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/Mle1934DamageLayer.java deleted file mode 100644 index cb57091a4..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/client/layer/Mle1934DamageLayer.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.atsuishio.superbwarfare.client.layer; - -import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.entity.vehicle.Mle1934Entity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import software.bernie.geckolib.cache.object.BakedGeoModel; -import software.bernie.geckolib.renderer.GeoRenderer; -import software.bernie.geckolib.renderer.layer.GeoRenderLayer; - -public class Mle1934DamageLayer extends GeoRenderLayer { - - private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/mle1934_damage.png"); - - public Mle1934DamageLayer(GeoRenderer entityRenderer) { - super(entityRenderer); - } - - @Override - public void render(PoseStack poseStack, Mle1934Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - RenderType glowRenderType = RenderType.entityTranslucent(LAYER); - float heal = Mth.clamp((0.3f * animatable.getMaxHealth() - animatable.getHealth()) * 0.00001f * animatable.getMaxHealth(), 0, 1); - getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, heal); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mk42Renderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mk42Renderer.java index 82e64622d..03d5dc0d4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mk42Renderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mk42Renderer.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.client.renderer.entity; -import com.atsuishio.superbwarfare.client.layer.Mk42DamageLayer; import com.atsuishio.superbwarfare.client.layer.Mk42Layer; import com.atsuishio.superbwarfare.client.model.entity.Mk42Model; import com.atsuishio.superbwarfare.entity.vehicle.Mk42Entity; @@ -21,7 +20,6 @@ public class Mk42Renderer extends GeoEntityRenderer { super(renderManager, new Mk42Model()); this.shadowRadius = 2f; this.addRenderLayer(new Mk42Layer(this)); - this.addRenderLayer(new Mk42DamageLayer(this)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mle1934Renderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mle1934Renderer.java index 54ce70f77..0095dd0d2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mle1934Renderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Mle1934Renderer.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.client.renderer.entity; -import com.atsuishio.superbwarfare.client.layer.Mle1934DamageLayer; import com.atsuishio.superbwarfare.client.layer.Mle1934Layer; import com.atsuishio.superbwarfare.client.model.entity.Mle1934Model; import com.atsuishio.superbwarfare.entity.vehicle.Mle1934Entity; @@ -21,7 +20,6 @@ public class Mle1934Renderer extends GeoEntityRenderer { super(renderManager, new Mle1934Model()); this.shadowRadius = 2f; this.addRenderLayer(new Mle1934Layer(this)); - this.addRenderLayer(new Mle1934DamageLayer(this)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java index a515d81bb..82836155f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/SmallCannonShellEntity.java @@ -84,7 +84,7 @@ public class SmallCannonShellEntity extends ThrowableItemProjectile implements G } } - entity.hurt(ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), damage); + entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), damage); if (entity instanceof LivingEntity) { entity.invulnerableTime = 0; diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java index 009d34ef0..0ab2d49f1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -418,10 +418,31 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); living.invulnerableTime = 0; living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); } } } + List passengers = this.getPassengers(); + for (var entity : passengers) { + if (entity instanceof LivingEntity living) { + var tempAttacker = living == attacker ? null : attacker; + + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + } + } + if (level() instanceof ServerLevel) { CustomExplosion explosion = new CustomExplosion(this.level(), this, ModDamageTypes.causeCustomExplosionDamage(this.level().registryAccess(), this, attacker), 300.0f, @@ -430,8 +451,9 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli ForgeEventFactory.onExplosionStart(this.level(), explosion); explosion.finalizeExplosion(false); ParticleTool.spawnHugeExplosionParticles(this.level(), this.position()); - this.discard(); } + + this.discard(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java index bb570e1cf..d03b21741 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -50,6 +50,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.Comparator; +import java.util.List; public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, ICannonEntity { @@ -305,17 +306,37 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, @Override public void destroy() { + Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); + if (level() instanceof ServerLevel) { - Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); CustomExplosion explosion = new CustomExplosion(this.level(), this, - ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 200f, - this.getX(), this.getY(), this.getZ(), 10f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 600f, + this.getX(), this.getY(), this.getZ(), 15f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); explosion.finalizeExplosion(false); - ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); - this.discard(); + ParticleTool.spawnHugeExplosionParticles(this.level(), this.position()); } + + + List passengers = this.getPassengers(); + for (var entity : passengers) { + if (entity instanceof LivingEntity living) { + var tempAttacker = living == attacker ? null : attacker; + + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + } + } + + this.discard(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java index a5ad05851..aaf66fb50 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -28,6 +28,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Explosion; @@ -55,6 +56,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.Comparator; +import java.util.List; import static com.atsuishio.superbwarfare.tools.ParticleTool.sendParticle; @@ -489,13 +491,35 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC @Override public void destroy() { Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); - CustomExplosion explosion = new CustomExplosion(this.level(), this, - ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 75f, - this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); - explosion.explode(); - net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); - explosion.finalizeExplosion(false); - ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); + + if (level() instanceof ServerLevel) { + CustomExplosion explosion = new CustomExplosion(this.level(), this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 80f, + this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); + } + + + List passengers = this.getPassengers(); + for (var entity : passengers) { + if (entity instanceof LivingEntity living) { + var tempAttacker = living == attacker ? null : attacker; + + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + } + } + this.discard(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java index 2e20b5b88..b232f1f21 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -44,6 +44,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.Comparator; +import java.util.List; public class Mk42Entity extends VehicleEntity implements GeoEntity, ICannonEntity { public static final EntityDataAccessor COOL_DOWN = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.INT); @@ -136,22 +137,45 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, ICannonEntit this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.04, 0.0)); } + lowHealthWarning(); + this.refreshDimensions(); } @Override public void destroy() { + Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); + if (level() instanceof ServerLevel) { - Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); CustomExplosion explosion = new CustomExplosion(this.level(), this, - ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 150f, - this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 100f, + this.getX(), this.getY(), this.getZ(), 7f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); explosion.finalizeExplosion(false); ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); - this.discard(); } + + + List passengers = this.getPassengers(); + for (var entity : passengers) { + if (entity instanceof LivingEntity living) { + var tempAttacker = living == attacker ? null : attacker; + + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + } + } + + this.discard(); + } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java index 26c3b96e3..d6bb5e328 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -45,6 +45,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.Comparator; +import java.util.List; public class Mle1934Entity extends VehicleEntity implements GeoEntity, ICannonEntity { @@ -158,17 +159,36 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, ICannonEn @Override public void destroy() { + Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); + if (level() instanceof ServerLevel) { - Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); CustomExplosion explosion = new CustomExplosion(this.level(), this, - ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 150f, - this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 120f, + this.getX(), this.getY(), this.getZ(), 6f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); explosion.finalizeExplosion(false); ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); - this.discard(); } + + List passengers = this.getPassengers(); + for (var entity : passengers) { + if (entity instanceof LivingEntity living) { + var tempAttacker = living == attacker ? null : attacker; + + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + } + } + + this.discard(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index ce73e4266..dd6d47b8b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -27,6 +27,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Explosion; @@ -51,6 +52,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.Comparator; +import java.util.List; import static com.atsuishio.superbwarfare.tools.ParticleTool.sendParticle; @@ -405,13 +407,34 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity, @Override public void destroy() { Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); - CustomExplosion explosion = new CustomExplosion(this.level(), this, - ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 75f, - this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); - explosion.explode(); - net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); - explosion.finalizeExplosion(false); - ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); + + List passengers = this.getPassengers(); + for (var entity : passengers) { + if (entity instanceof LivingEntity living) { + var tempAttacker = living == attacker ? null : attacker; + + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + living.invulnerableTime = 0; + living.hurt(ModDamageTypes.causeVehicleExplosionDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE); + } + } + + if (level() instanceof ServerLevel) { + CustomExplosion explosion = new CustomExplosion(this.level(), this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 80f, + this.getX(), this.getY(), this.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); + } + this.discard(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java index 918e9ab27..f712721d8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java @@ -270,30 +270,30 @@ public class VehicleEntity extends Entity { public void lowHealthWarning() { if (this.getHealth() <= 0.4 * this.getMaxHealth()) { if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); } } if (this.getHealth() <= 0.25 * this.getMaxHealth()) { if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); + ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); } } if (this.getHealth() <= 0.15 * this.getMaxHealth()) { if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); + ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); } } if (this.getHealth() <= 0.1 * this.getMaxHealth()) { if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY() + 0.85f * getBbHeight(), this.getZ(), 4, 0.35 * this.getBbWidth(), 0.12 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.05, false); - ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 0.85f * getBbHeight(), this.getZ(), 4, 0.1 * this.getBbWidth(), 0.05 * this.getBbHeight(), 0.1 * this.getBbWidth(), 0.4, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); + ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, true); + ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY() + 0.85f * getBbHeight(), this.getZ(), 4, 0.35 * this.getBbWidth(), 0.12 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.05, true); + ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 0.85f * getBbHeight(), this.getZ(), 4, 0.1 * this.getBbWidth(), 0.05 * this.getBbHeight(), 0.1 * this.getBbWidth(), 0.4, true); } if (this.tickCount % 15 == 0) { this.level().playSound(null, this.getOnPos(), SoundEvents.FIRE_AMBIENT, SoundSource.PLAYERS, 1, 1); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java index 58feb5294..35fda5311 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java @@ -1,13 +1,14 @@ package com.atsuishio.superbwarfare.entity.vehicle; +import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig; import com.atsuishio.superbwarfare.entity.MortarEntity; +import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModEntities; import com.atsuishio.superbwarfare.init.ModSounds; -import com.atsuishio.superbwarfare.item.ContainerBlockItem; +import com.atsuishio.superbwarfare.tools.CustomExplosion; +import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; import net.minecraft.client.Minecraft; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -20,9 +21,8 @@ import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.*; import net.minecraft.world.entity.animal.WaterAnimal; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; @@ -262,19 +262,19 @@ public class WheelChairEntity extends MobileVehicleEntity implements GeoEntity { @Override public void destroy() { + Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); + if (level() instanceof ServerLevel) { - ParticleTool.sendParticle((ServerLevel) this.level(), ParticleTypes.EXPLOSION, this.getX(), this.getY() + 1, this.getZ(), 10, 0.5, 0.5, 0.5, 1, false); - this.level().playSound(null, BlockPos.containing(this.position()), SoundEvents.GENERIC_EXPLODE, SoundSource.BLOCKS, 2.0F, (1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F) * 0.7F); - this.setHealth(this.getMaxHealth()); - ItemStack container = ContainerBlockItem.createInstance(this); - if (this.level() instanceof ServerLevel level) { - ItemEntity itemEntity = new ItemEntity(level, this.getX(), this.getY(), this.getZ(), container); - itemEntity.setPickUpDelay(10); - level.addFreshEntity(itemEntity); - } - this.remove(RemovalReason.DISCARDED); - this.discard(); + CustomExplosion explosion = new CustomExplosion(this.level(), this, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), attacker, attacker), 10f, + this.getX(), this.getY(), this.getZ(), 2f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnSmallExplosionParticles(this.level(), this.position()); } + + this.discard(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index df9adc28b..4d0a0096d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -57,7 +57,7 @@ public class LivingEventHandler { @SubscribeEvent public static void onEntityAttacked(LivingAttackEvent event) { - if (event.getEntity().getVehicle() instanceof ICannonEntity || event.getEntity().getVehicle() instanceof Lav150Entity) { + if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION) && (event.getEntity().getVehicle() instanceof ICannonEntity || event.getEntity().getVehicle() instanceof Lav150Entity)) { event.setCanceled(true); } } @@ -97,7 +97,9 @@ public class LivingEventHandler { var vehicle = event.getEntity().getVehicle(); if (vehicle != null) { if (vehicle instanceof ICannonEntity || vehicle instanceof Lav150Entity) { - event.setCanceled(true); + if (!event.getSource().is(ModDamageTypes.VEHICLE_EXPLOSION)) { + event.setCanceled(true); + } } else if (vehicle instanceof IArmedVehicleEntity) { event.setAmount(0.3f * event.getAmount()); } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java b/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java index c46fd2aa4..38ec98115 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java @@ -33,6 +33,7 @@ public class ModDamageTypes { public static final ResourceKey VEHICLE_STRIKE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("vehicle_strike")); public static final ResourceKey AIR_CRASH = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("air_crash")); public static final ResourceKey LUNGE_MINE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("lunge_mine")); + public static final ResourceKey VEHICLE_EXPLOSION = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("vehicle_explosion")); public static DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE), directEntity, attacker); @@ -98,6 +99,10 @@ public class ModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LUNGE_MINE), directEntity, attacker); } + public static DamageSource causeVehicleExplosionDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(VEHICLE_EXPLOSION), directEntity, attacker); + } + private static class DamageMessages extends DamageSource { public DamageMessages(Holder.Reference typeReference) { diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index c190b92c1..508b29550 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -366,6 +366,9 @@ "death.attack.lunge_mine": "%1$s被突刺爆雷戳到了屁股", "death.attack.lunge_mine.entity": "%1$s被%2$s用突刺爆雷戳到了屁股", "death.attack.lunge_mine.item": "%1$s被%2$s用%3$s型突刺爆雷戳到了屁股", + "death.attack.vehicle_explosion": "%1$s的载具被击毁了", + "death.attack.vehicle_explosion.entity": "%1$s的载具被%2$s击毁了", + "death.attack.vehicle_explosion.item": "%1$s的载具被%2$s用%3$s击毁了", "entity.superbwarfare.projectile": "Bullet", "entity.superbwarfare.projectile_mortar_shell": "Mortar Shell", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 3e8a2fb30..ab0b9bb42 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -357,13 +357,16 @@ "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", "death.attack.vehicle_strike": "%1$s被创死了", "death.attack.vehicle_strike.entity": "%1$s被%2$s创死了", - "death.attack.vehicle_strike.item": "%1$s的被%2$s用%3$s创死了", + "death.attack.vehicle_strike.item": "%1$s被%2$s用%3$s创死了", "death.attack.air_crash": "%1$s坠机了", "death.attack.air_crash.entity": "%1$s坠机了,凶手是%2$s", "death.attack.air_crash.item": "%1$s坠机了,凶手是%2$s", "death.attack.lunge_mine": "%1$s被突刺爆雷戳到了屁股", "death.attack.lunge_mine.entity": "%1$s被%2$s用突刺爆雷戳到了屁股", "death.attack.lunge_mine.item": "%1$s被%2$s用%3$s型突刺爆雷戳到了屁股", + "death.attack.vehicle_explosion": "%1$s的载具被击毁了", + "death.attack.vehicle_explosion.entity": "%1$s的载具被%2$s击毁了", + "death.attack.vehicle_explosion.item": "%1$s的载具被%2$s用%3$s击毁了", "entity.superbwarfare.projectile": "子弹", "entity.superbwarfare.projectile_mortar_shell": "迫击炮弹", diff --git a/src/main/resources/assets/superbwarfare/textures/entity/mle1934_damage.png b/src/main/resources/assets/superbwarfare/textures/entity/mle1934_damage.png deleted file mode 100644 index 43af4aeb553351c97fa5b955d6fb9a4bbd6d35a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35387 zcmV)$K#sqOP)PyA07*naRCt{1z1emoN0u$NkD0qi0GUa$rmj}&QEN&6{|S=5L-$E{sr%OLE>EQRt{z(oVO>|h z7Xu)jBNale6{S>^TCuG+klp@7q)5CNqWlv@3owN7|>eu6E9 zU66?Uo@I0!6?}G z9n(Ao-_q-v)b89-xCqlz!eIia160y7u*{cx2NU7tDg@E>y0&4#3@#nL0aQe~+1ko- z$mR#L5)nYmXs!AE<%T^mHzDSpn5Sq3P%VkUAZ3c|#NU~9QS4qaN7A(i$6Ly4xb7QH z^WqGuC}SjhtIkY2Iv0>K47m@X6T8+T%#XnZz7D3baAz=e5EIagFxAegQ2@10U}m(| z!L8$J+TMM9_c6(<)y<^ZzDYPE9vh6ewJ=Tx+J{M(8XTeMJi4wgp|k2!eh;7&LMhPW zWld@&v~JqheZ0q*Obv8ZOuvu~kwq+g!`RQ$`4QL4ix7M=4g6e!a(;Fj9VXboC?ItG z_jsR>h`RY4Q$TFP#GHsl9Y)ePIz+71ftTHm=ci$g9W;pAI6034FmxLj9O>KVuX=!(jsggVa5al zb-j)miWb1%a$36%ppa;1u9g#Uyx4n_s%@ zx9*ySsr6YR+crL4zSfF;--B@=fCy%j8H{WQup> zYQNzlra9pi5f3Ine56ZASl25~r*kr2;&r%&2NF|`0Vd@foxnw~oKg#Ti@9CC{Feg1 zvJXD|^e@g#0LDDe0#ugbb8EWJy&q?LAKzMe)PpqtU8d1#_S z5PV=VQ1!4I>dwGCFId-GNc~rLH7Q3)qfkvl)muZ|PH8-5*{8Oad~;s=Z)v--B5P9=fn8{m&-+gRkNd2HRcl7LMecn4}rOh7np2xtcFbElh{R=8fMeQD?KwnXhRoiTMTgVkTSn^GquOca-@9K!k_$ z2~@(n6F!!V&wOm5|e%(|=vBFK)mD zo@P6~H~*~nj`R5p?u_-eV_i3_+a8an4wBXrp}PriV8(74a4^-*iFY&R8 z@;&Tw@n2d-Fo5UhXC!uVFbsxL+@b^kwXtslGf3LMOD=Y)7Q4qV3s!`k z)!r@{Wd~tjH_Xf8Kx0=t;(R{ia=FNS3CIn9LVt)UdrZb~V` zn#Mz^8PpktfaP?;?RrHwFqQ=EuhSF^l1QboFu#4@{k^a=2l(1CfNkF}Pjh-Z8EZ*O zKo<21hVI*jX`Vy>&nk$&*mMEvc>3}pF&!-HnSK4G*u4dhc>eM?l|3SKmQR1i`E+t2 z)O#1ag$nNDea7S(TxReJ^Ef_`2yL3Du$y6kP$Eut3o!|=k&=5C0x`AGHl=Nb<#fXB zc5}iBH5(=#d@S>Vbz5Nuh${{yHZ^n7mBn|5ecP}si!dOYLKjNsgMIH?-2GTdX7)Te zJ->(_8?}JJI6pk1^NTPgWlRyJ#)k5`zPWa93SqOO`kb; zM`8}IE^{!o#u0BDczJ#XnFgt@-gVsoX9DDbK93LQ#E;kjB01l*(R~M>7g?+Oc$ZO- zRIo6s6Y;wm2h8*AYG~&OY6;u(V2ipmG8}+itqqhq)JBtHs}q0Pr^lVAlUq0O5oZMa z^+@Vx+SS{(`tJ-Do7|5~49o&;l-kedQ~2w9_kg32!iILsF)vR~YU2kgAFeSAcIr5t zmO;5T>?9PftQE0J=b-3PC?Jfi8!Cjd3gy-#bd8n zqXtO{Tf79}$+1gNT%Q!*A>$8}w72{C-lLfPk0gD<4ny9Kf`f6|#0uinS_i_*>Tb62 zvfXJu@)3{bA;fpQyJ?#v80H5ZrPGlYcx;2aEx-(AHh#!>?_}!4Y6P?Dy$23};8Ml} zTJPvBZ13Kk%ZWD8MbdY}A(VOsRX$1fj6)bhXnVuqNr%5YVln^kU$7Es`sj!WAeii+ z4yEI-*K07$G+QuZnhK_=V4f?MdB(CVI4!}rD7KvIH~_G1n*xM)>HnUiAV+%TkPEXr zRrO_tAoNCnWHz@Ro&!%f6I_zNori1p-jqR@wAqpxoQINbA03qYw#6ZQ*zBg5YH&*s zRLs|=a=l&wW?Wxhf<-a=`Ed@=Tf@uCGdg$l*3nH9NWnX%8K4JK?G|d?h0r^9wBAz= zhRo@tc@uWOOtF;cmXF*jtt;i{gvCy%hvJQ(nz$0Zx?jA36nK@6x~jG|Y7oIBkLx#_ zJXjnA6xmqU>jea$Dt=Py9Rql;F@5;>K{m3gvIg*pbPH*QEcq3z;}oM0tcdr^S!fP^ zZ~ww~9f69W^P%!FIPW(fCJ?r5f3=ZV!rk-HLzsZsnyjj+--8L4%N6^!3NB#QwqgP9 z^9QL)Y=9W0z3=+PfQ$V6U;l-N#|KfH~uI5c_>z z7PQuMDKktOV_jFAPUlxkVt@GbhcmMY#<;C3&Zo1)I_UA{vdx;AU@pa@LDzjth`uEK zfCwKRPU-b2&cl+VR7$~z50ALsR(Vf%6X4xOv6q9S#ATZ^+-gG9W&*6Y73(d>Xoq1K z#6GI>t{fym)B5h82MMvO=-^CNKyUqE#~!4=4PzARHrNA4u+y%)ZNk8A>l#se$p|uL z*b{-eZjpW{)xHIlQ)1_PV@M4ucb0+e*t({c*ws8ViQZ-Hm{^dhl|jrf=?(B0R|FJFSX z7=)rhLpFz)1|^Lp@rt}O>5Hr_Q99S=Zy=m8JyzTQ2oA=38211Gtk)Z+X-bSbeb4Hq zL{8lv=fkQY*jyfe`irL%_tx>{%NI=U_JsKVNn^n8<6VaE^b+~_l*QPq4VG-;gMD|q z-4X$g@Ku&10EO>5nF6NLB1Z+-{RiMFeV1=QafF!|7N3x9^bz19?0dtO;uuVluG=bU ztSb45^RuU$6GE~l&~UJSO+&EwghV_&FUQf?$!D!EWZ&8}^rIN(N;12nbW=L1}j6jNjg9iP{my_mly@TqN4B_2%<8 z=DMUnuKW1DqllZvBm}ucWE!RAYhcd48MN1=ZktMKM}~VRJ_*8YdmD7zd^ZtXVKJ6k zgYc4c9ZiU2dkiiy`O#ZLZ+qfS7?Vb-?xCLFRx69&o~ z%tC(LwjJxXW8GHVZZ}-7D=wE6&{zlpX)Z4z~K_#bDT~m zzb7CWann4jvJ+pPt}^HS|dcu9*c~z$bCBzmSslqVlG81EEV53&zB2o zso3|1T7#ieAvvzpQJcAs?>b5;5v4^cJ#z2`C1P+*AO-RCp3DVLVNJ&(FaR$Jc9iN# z0=B&k_`oYE__iYQ-A1uCvV4^_biB5_Wpl{$Ak?BSIiWNrVx$wvP+;Y7xW4fM;1!d|e2a z%ZqCP(|4~=cJ~6j+bHIivHt^uyiaC}DckFPP~eQ|vb zt=e6NQ5W!Ay3s2U{J@&Bd*Z{)kF1f&N)2^wC4JW%d)-NW_>6mzSc>O&W zuQr2h-57}y;d*&-$$r$4jNz`gTQCLtPnrI{wKKhii4|r-SQ3eAAyem}-Oh&*?M2WpJBXneQMxnK<+JN)|oR&@zapXKua!C0dqV=aqHP8gi2Ds*Cq_O~UsbS=zD zNoCi&WOrp~LIhS5ZO}@HqFPe|ZtdAi(f}m!GF)$xkK^PB2DEZ=3^OzA9p;Kfe$4O= z^xj8FO@z}ttA|M#`t5qfX`X^9k!T2eYbc#jE2E|~?-c)dAMY>vdvE8 zdV*KyMIvM?DUdSy4pA}Rw|l)VSYlHdKz3BZzi)`4(SFpuLV+xIPkR~UmI{H+nE z|MP4>?A?9{KTWw3mg7&P^DD0QuItSSCI!_c=9xY)zGsY$0pcEH5!CCk2$Fjc{`UYS zdvIhn$!*LkCtUG}r!YzImSc<&Qb|-a_X1xb{&=sgwdgyby#b0cg3~OnJ#G!tR58yL zr@6XzMI7$u-Wgl#&hTp$4e;&-e7`Zl>`pE5wXLf(ozUPbSBXmjrRqPW6v^mgU~ju{ zX%pB<9hKubej1~B<=QekSI^OnxNRHec|n=#8=qgl@-BfllrUEiG!K4jJC=F&DmQL(>*<{T zO#w5%#uGqC0{$(-T~+K_$|%WAZ3(-2-y?PPt(6GXI2hd#t&Ak7NJMgcq$D5~<`qnZ zOc0C4=%A`S0Q56A3lOm$a(r<4QVNEU`vC;X+Dm@MIAPybOv?fy#?_(@L6{YAv`EuZ z3Me2!HwCu6p%zB(1?RJD%ibBa;-HP)$M+m=TzObYAy7XOS=gr5?#prm_#h&NO1()7OMJf_uUsp`$hgTTDTcF?Xl@&vNy)wSsE=-tO*Q6Wva#d~L zr9g*D&;ey1m=-Hjq|vlEF1HfAM8R2~0(BMk5jf-l7}apw5{;Z9+Ay$zZCxekDis$k zWEq77>^){iDX(DQTXJ2AINY#po478KmnL~K%+@G2FV@OIlKLy{*NWeyScjH-Ake#w zVhc_XF90;&dt28Oxl(lhl$35O8@p=TrhVTX49rM2G`2juax8ldNseS-$vzEFFsfLvlPsPm@ zcEW=aIE+YHxvKg7k$^e_GP5?o2PTyg8(qRWhdIv&*LDE_ZM1;0CZH_vH z38s~d{6#pUvgR(y{mY2@iTWVDHOxzO$-nI#g@Bf|fI^M|u$q-~ouxZam0FQp1YD$2 zzs|Am<9Cm#?fan!=9t)Ff3BP4$y;Iz0PL+fNYuTqeR3%I-iW}WZCeLB+xItHdAZCz z;O->*J&#{Q{OK}ZJ3>NE2MuH_0+OQ;b6D*-nfOc?72$MR{2V}umE&1GBHrWeQ&_L5 zMN~lEJT%O9i!p#QokAr^S~bTmn||Kn94(p>+Ewu&BRBhp1r8OycaCRJCeZdhOr88J z`pGg?j{_LIMZ?+x&!7K>r{P`asBK)ua_HUqSOz>_3yw@np=?t=TSA_QGAQj+w zs=2`h$3OnEy_~nxy-Ih>b4_aEK>RqUlgC(jk5PYH6y&I7`*p0dKYll!_?kK7@Y`1b zFRE^{r5ke;(lXbZ{p|@lWZz{m50 zW_;f30le3cT!2DD&`SJ2M({_67&IGT(?Zs& zM37IBb6RT&L^aHeQnViju*X)6HRf2XcQ*2q=dx6e%NMIx+m<;aN&RyBzuIEWL$ zX2zGrBr)*u<0lU{&c1Y{+ImCW7Jv^QK1f_Yvw(#P)Dji!`{vI>P?Wt`*=`w|*6<@D zOv|hUE&tn_qytTs5?X_0@0lXAZVlVEVcj;Yw+-vMYT32JdqWgU`S*YSceJK^&FfU& z$9s&amV)P}&!g;jyPXC!-sLvOMvgLGu`7D-sHLQjvujMw6u+}c?{NK?B#kp)YXiZB z_(0t{Uw(tI4}0iqzGZXoZt2I|JE%_JT??vG!EIfo`>_UYNidOW3c-P5?QG38Q*f%)H7jY>nQHQxG$%q= zcdvvJkG8+Pi}iNH>GY6Hln4i%S(x{$NfnDILC} zhy5#GC5ayrz<2Q=<$a6j_q`cNb+~9wSmlE-tdrfcETMKa9 zQ>QaXn8CiN>TA!lu4^>uP8tZSRJX1<;sG#KK3sc6C4K>UJpq7(wewuKd0 z$uh)cP?SvXcMRa&Mv)3F7P}4M=o)F}FX#xQWpEI1sczsHv_BqPmCv_4#OY-WAm1b$ zg98T&#_*7SI@+3W??nwxaL#+X+jUs&)aIXsdZex0S`Xa8P($QEX&7}VA+z*m-gqyu63IsR7 zdZOxf@d+FHJP>Qz3qv+sY8ee^j=>a}VA*ppsOY~@MRcI+8{dUNk@ME#DKm3&GFHDl z9p*RiF_NmrbE3IF7g5#puF-|9?Vxf3b)axVnI_z>mv~Ra z-pR?5pJYFj_AK`?h17?)3oPYfNIp74*W=v%U)v&hsp(tw|;49*Dbbc=lLv z%ONl(P@1g|&n8@4XsLKDI*l{bep;vYk#1M7^=s8*Kih3xl+WXm{qT*xjIoP%Y>d#mu4$NM&QV79p|q70gm!ftfMS zizW#HwN6^=Pr5j5+bUQ z3uM4zZc=+6-+xSn3VLZEE-1YVCniE?MxAD~ee=vf2ceRGJvvHT23vxGh_JU^!-Yfb zq)enq<+dogQp!-}w)d{tX5Z4?W4P<@cLkAz*5dSdl=_1`fWRaM(LP?X?QIAQYMM!D z*AF*a23S|2!5aiTtH0Rt%VFTz2;z}f+&M^eKsWHWiTQ{M z{8PkF#VZd1Zv+&j7>4L;V4saxi4lRhMh&$ZODcY^9)a z3pXCs^lk(j*tR`pq&Bv<5n~JiHdC$GZ|b5u%mV=CX%0<>(!AX$32bJX7q6tut)cA= ztugNuUZZKqao~of7!8c=L z3>gL@niMw4#l0Uq2T@4G7)@{c09rYt_=Sy-@x6a`%al@HojWwmbl@&K`*L`&5Jqnu zt@UwTI5xWjj22s9ZaPlxG%Gna;0gLZv{rzH6B7X+KmH)5L2DlGUzI3F_i7MqohD3E z#bz}DB}P#Mf|VmPrlpyYnIwB}C}2tUmxkPzmTY1WI-L!QJ0T8bun+krw-F#t20H`s3|pg$QMywX$!x0pXo& z(!|t`ZCWNcd&Dv#9ukr~9zYgFY;4k4`&tOyg8*bri~ioYyL+wo)K1MZ1kFS%#ln|d zh0o^15tCsCrg>4E0b^VSpa7nj2)kB0j;;jC;u;r38vfwb8&z$2SMLRDkG zdD2im-iCo}2i4sGtY1C&>z99P&>Mfb&7Xo;@-y4SyaF;L{B~0UahG9&2ap(?YY+o^ zE}3|RBCC&_D2fobC(slR2ez)eq}a`71wcwkKJ+n;g1~~!l)xP#?f}XC)3I-xNO;f2 zOtBAoA8CD_yd|M*_>Xy+v1m7AllbuV=%E30?kS@59tZHAV-hz~ktUS@8d;a1rW>Jv zsAIjnge0@l-MKxLZsexzwoHXL)OnyX25#5u+Y_3_)|?cL5A68YCxv8a;SGi2?Q@ht z>`fDVbW^+K!F@Om0IJ)?af^95rT74nO3T`_k6@*;vUlO&=VwCahFY{(6LUO}0eYQX zo9G(MgF<+@yx_E)L}Svfx|GV0_oQl1bwan+;q&Zu9=!??3IGkm&GR#+H2iDdi6&Gn z)SDuOIWx}Fa>BgKxV&6k+bq)w;4UTAiSY9L43sK0YwlivcN-Ixg365Mwkd>skMk7S}D%Bw;6jm)aRE7IU?;+xa}dn|CdIZ?qCZ1l35@;PgLMK z&8qFBYx#~(fiDU9&p3nws;Pj7f6mZS*|A=PFsY<%`s~c2r2?H?%zl=vLN4;oxHGPo z3;31mOhanr23Y0=ojVE)b=LwX`o5$Ih!lY5-jkbitlRi%9hKNyYpB{UVBbd#(AEL~ z9v&Y&-{Z>{Y56uylZO{uUx+&f@P1<|RU{pC3-c^M6$wDC<8r;o%j*=i>MT~>ZDI-d zFaT`;`pm>jNdLEnNyhFQK3sXf$qYbH`#~H1=Dnq)RZ{hhS=I8!(Oz2Tpx}_UU8aE{ z409M_;zK7OuLUG=7iB8o*4<24<{3?^0#ng<(V=Q`fU)NK8=|CH&bNRoXwL^I3zGT{ zJ=X1w<>tivMjoU3gMKd{pcMHuQ^(B^i#F{Hl&*CEA5coc>2$*L^ON92ok3NZ)P20m zn2N@pbLoQEGJ$s4hF9w$2Lct2?zajol|wSj5DI4FpuYW*Z@yY!jMWU#jkX?|SJ*h6 z&#wsE6MA$*-L6-kn%%l+41Q(~4m28Gai~lbzo(=cG8AO^R=!H#C)gjRU>iv|Gu2~@ z5(lfR%_=S#W=2GyDxe{|hE%YwR}Ic7-jk3MTbWNMZ?^?)ZwB>19K9^A;5!asU$Fm3 z{fx#vpp2mP7ABzSIi}e$u(Q@t^coY=YW(BJPpEam^Yx}B(C-?+dyVP8|M&kFox5;Z z1!MMY$Mt%7Ei(!D@c8H+0``~PhhBJj)M{{p|rJ0B)LZ53GS9OkIA3~gr0BUp#{9y1q$F;fG`Sb6>ap~i z(Z`)pwWW5aj?Utt;g%Sxhi!L{L(oFvg7POu=9!qx*!Pa9*2IM5Vy#&mfjtu|n0NBE zysfKiZSc4SII`b%3kQ$vQY%&pmZB-sJPDx}?a8FBz)FPMw&Q$P0N!m(K#t}E+LjA% zjw?UptY_Ww8xs8p!m&%mw@2ia=WET;J{WIPMK{+5GES^e^FftO+$zPJG7R_HSwcta;<1 zc3S|Afry9nUXyY(&YliH9S@*g3i>hkVBB$Bvk~!fNuCivkDen_qf_Xx+6SZv{k$wF z3hG%`Vgbn%BO#KGLQ3rWwxUdv`}cFI?cOp@F!Jzi*XAy1t;5`xXI)OG@lEI>olYky zD68usCWU-&ZM{k@2W%ybrd>mm_v;sY`1D5<^#HZra5|sGoVky88Iy$HZc0R|cD_Y$ ziE=~9OA6u<2>T~pH@V?vYYjcczQ0cT88HR-)yJgVr6rk(6Cxp>oyY^8N-&(wgBi;_ zd+fT;gA*|yVgo|@M`*PNGigr0&5bnKM;Cr@`Q@S@<_Q4^+?$upDhzyies<8#^0oXK znNg>rA;7s@dv1XqrC;o|H811N2RCkJg8tB0G`rDFLBmnhi_kR(!p^EwmBJ;u;$0KR zO#NqTqI&E-aUb7xlwDIjDGRHwXaKL3@v&m=@XZ?mJ-=r3*08tc@dS2bPdByBSm~TG zUO$ppA`;Ie)9ys=Pnk0MP*Qz9qrOtKC6}V>c7Cp($Ci6vys(F-?0Inyx!jk3e0J^O z^XJc6kI^PVnh29wD+7=SKddOas3p0n#uE9!KPGTZiXV%x{W%wQ5WhY$s)<&={6 z<1BG7vR`D;gdbxPwHDMus72g;Qh%bPyN2PyU_3uR>9%PC_u)F{eN1L7y9dMkfWB?FSoTIoozyoIC!B)z^x@rLi4%+&;gT*rC zAQ^Vg&tC>LA0&-f=6OM#SiK3Ra!0I(N%g@^2x&l?+k6v%<+LOS5BUVZdn3g0j}MPh zmk^r0n9L%(#x&JnqQ*ZMc>M5yqP+kF0KIDf?>Wj)uN|QZ1ld~AkAr*-@rvHtSEc>8 zAiMzh4$)@dyuU`^@p#2_VOH!6NrS(Ym*9f<{FO&y0Y)v-rTGS ziEj1z();n-T3B!VJ!?s^S}SU;m}E}|Nj4d zWe45I?;R2fTnN+)P=-29fWDuSxO>w^n7Mq@KQl5yo?XzPNbo^AAr5$xrKoGtl(z^dy)0I zKrC?@B*8x~FE4Sb=|mdE*jhua$*q={M>Yh4*T%Yf@e#v=dhlsR*W|CB%6;kAh9~HR z=0&iR43LJ|loSI>%%peiYLpPny9V%XV=^Es2s`5MGYyTyUi`0T0L54c^g5xDC%N)!$Yy$H#!2atUk zl)=X!9uF(#Ft-7T^7GQ$1H;S_`Q{yf6D}+5+Oe(ya3+4ehE_UiUiefBc(6C^(1Iui09l+)x7G;2Tm2_W+7| zVDAw0qbAeQeQH|4U{Ak3FEpX}u4|~Z@q@135Ch@}jF*=uH_1wkW}Fsj2k0|qO66cM znfQIxlNmQnlOXfvPV8Yon3_JA79NC!L8V)_2qxNFN86jYBL@!(jccc8JYTMZyYN1~ z|0sifnxxe$@^s`YIJAHMjWNP#<2kEsKz25 z0ens4>oM6Bnr@hehmO zZ>9xwm-IGricHWO~J-fmd05*Kg% z2H7bZ2@V{GMcH}IB8_X`d&*@@?}~knq6u&o$1Lf?{*c29M=G2U%;)&tnHi_$jCq+c zFAL7+^Wh@K*zZQbdyR>-0uZ~2nzw#P3HYZ50`g%ey*+G0ef6-zmr{qm2GI1zyZ`3( zbd(xI=r!s|LRPoUdg(>74E2s;%`4Q^md%O*-*ds8%4ad8S%>BrSP^4cKMnNJH7hF1 ziLK^J_u`vO5|jm&?6|@m9h&#A=NqctIfHIV>&br|Ot++nNam*@`)r@&1f{X-GWih& zl-Fhe5ef4&t2R&RdK$T?m+cz=-?cmOR4Y0&o?l)-0RH-~|B6~GuD1=B=jU&~?ECnq z$0S813J7gfR2i&Z0MdOTWA1)wG*JIGs+o-mGVx z0*|Gd2^z&q99RrFTx<00^V6LX(4b{RfD!v=O8V|~X#0**CrDw&?kTrcXw}@7492Ei ze1=ufLZC*RHdnLDlb$oMbto|Em3T4EHPrj?dN?en8HsN#ytfET<_-v$mdC-ZY`G^M z&}5aSE$+hGzvJr~;C=k=F=e&i{(DsiZrpEf1-rfaD@R}jUuPIr{33w7(UtbCy&$Hi zF${&|IHW(2gq!~!CeNVKJGrF59_J9i>3q_*T8E1s=yTMXOuMk=q4IYjpinsFItrM2 zGN)CY@HX6`1~skCm>^M|byR8Y$?fJE85p;mW}BD*V8KsEQ!v=cwr@in0y}J8Bm%G~ zu$bp6*9|vwU^c-7{`kkA1`Y6D4CH-BcmcE^g=C$Tq)WaAngU7sW$EvgUWdAFzhE{X z2q_5cE62W3qpp;Mq-V(A-FA>7owk2_^dz+0bXY!us;|t_HZ00hB?z0yyX5%OX$$X= zaOrSu*$qg2Kgl$V&cG!FH5DpgBCJ|?BXk*=$G&YTrXl!G>s@Q~w^0jVlk~xS4Z#4QoR+Oa z&2iC##k+9yW*^@!2omF$@dCSn7li!kLBD(*)(~bBWMLAJ*P!o8rxG$71wJWtz7+{< zn>8v8b+zHmPN2jLO<`ez_S%C+Sn5QIM*0zSFt0Yiz9RH=C1 zca&OF6`xr5;DG}6idL|{PPOGopvvdl1*a-?2DWV*7=NuP07;tvx*;K0jO#(eWpjwM zyEzqDtd{-R@1el&If~cyGxt}LGZ=)gY`oT*NR}u9AFZXoG2CbVi^q{~rT``L7&k*` z#7cans)Q*{?B)Z{S}hStc{7SH%--x>ies`O-yOmjyJ|9~7@bb1gO+q8z3`_~D#U5b zf@JYT3-DIpTI0W3#UjFXyA29{z85FNep|Q0G#K+dW1447(~MfBeOOOSA`>znf78l6 z(>!TuH)#%1YLyy=rJ|-nu*_1BK;kYaMGHzsp{YO-Q5l*<+gp0)7HQb;nSk#+3Tp+P zQlwA(wyn~a-d$5TV!b|UDS~|e5^888z07ZA4( zS&hxJYa6nrjG3qcrAjtoI^%2c81bEgoztYX{G7{x0j$?s3I?+_Ivp_(b8$w%yNPV*@mJqkh#Gcmw}( zAW%NS8*g}o9s-p$?) z9Akr92QJkZS~}0Zyl28by7{iod&6~r3-(y-^G##6Fz+Ugh4+?NIhs` zOoX#q)!LjAP0py?N_Sg6F#&1vC(S>cEl^tfg7qeVS*ZlgSayRf1AI0&i9F2+eBag|lG{$7!Rq}}-u!GP z4ZDO zig>guiMy;v{NJJH!oICqm?NGiV>dP|mO)y*@zB_n(z|Elpee5*_g1ht2V@s+YW7LS zIElgBFfV5<5mvG94UZ3Jlq%hd>onoN{_{WYO+nsyL>vGNl_vDGL;R)t2kCDkyraqR zjT;Us>{q@wB)TTo+Se~g{&P&WrSu(CB9)QwQVzR6oT}-W;aQCYm#(k|7o$c)B=P*5 zh%huC(+~m#4CWg|y{#L1>o`9?pc0|wcHzn6BE+A-&9_WtmWsRcG-+z^8$n*m=}W46 z$VUbRVB4(kL-LU1d?_By9m?hdn`=*+$xyNSjvW?F%)O)a4x$~c5kL)p`qQ8Ba$Rw` zy!_%exQ~BscrJif!A)B8*AUpO?%6P#?(0B54L|2)!Llrvmj&}Izb_g@l1*?!#lJca z9m_lqjW>yc3FKTy*2Jft>JkvF@TAG~5cAVK2hnMvPg0+KKcLhaeuJO?{&xVt&p-d{ z68S&>=l}F$;0(%L0^Tc#lo)^h&%bN1O{_06W3>0C2YBtk!;*7nTyNLJh-|XL?CPXQ zK4_&#HTW|jG7V#2(f!B0{K!~r`0Aem|k%?xIWUk>HRA5Mnoq<7Q4@G8(T&V+)3PLd1IyGX`u zT|tE~Pp2r#L80P@+0`9k4;>@!nWtjDd-Bi7-|b=c{;Z_&5*}#u+PZo3#q8THJTnAP zIXRC0=?Im+$3jUIiI9=d;3=SWmcPi zTg6tpSJmJcv&-M|AVeb1U@;F8jxyn96TqeB>v(m$-{bi)(Yi(G+dYhUcw`6%YbX1y zkHgED6$*)|sy-3ndcA=F{Ov#ghClu3&)N!2K)vhbidqZyZNt3Go(_y!r4^W$60q8O z>;*+@om}O%nMZ}7reVVpykow0X9n3DK!jO|m2YPEN3ZWfG(;fAzDS_2trO*UC>YFS ziC5NIZtqxJ(;`sUu1Ed1g`3~UZyOVpg3>!qj}O>eMcDcr9 zFu=;}SR_Ufx$dE9a8lI`dkdyShbOf^3rSPfS}I;%E+CR5p;{+w>+0zKJkQ_~jYt^; zR_RCFyTb6W5Ri9U;k>JD93t2ccfab=tm(R8BXxJ9^5z2R1o&F6&hY;3CrBHJS(rNEn;1 zuK|?Z+H(zntqdvYHa6$TEZ=}%H`2U9kR^d-rY`p@wMJ4^FTwDvO!%|_rAT5Ev-@gu z`885turmR@DOmW8dJy;VyGJP~L2yPqBI-d_bI(CO^6l$|ICI2cBK{!?&(yjxf5yWC zasbYJS|rRg71Ru^;n2WyK-;5~RMa;l@2TesYLA2yqvfyrBjVZ-D}gvE#lPDFM21{I z-Fl=nY6(N0bZ`3j~}e#k0f4Q)(zL|8gUk_$C};8 zyNoHS0jKcVLZGfyX__SFG^(PhG9 zefm<}I)%=y8lMl(K(u+e$dz*nfW{r!$Xu2a*7fS@yu=l-r0r?n1XqhwZ@W;J;d5sI z*Xsr6^TVOINr5bIm{p~dDm(U_Ty@*UjYmq@+wF#VSu|Qso_CrQC(!K0=FjcRD$#(mP7EWGLYA!y}3|4|)3h*)f66 zgwokT(EE6wA*OOk(m~r;jdXXBCgiY^S2GY-L zB7h{dH{HGWE)6t0yQ@hUM*Qw=w^HO8n~B4ji76vu_Nm6RSiMj3s=tnFloBR^ez>jT zizB}_}2YOWXH-wq&NohJkxM>M0o z%RCai7zIm`HZUz`$4i(2-mjRZf@Q8Lin4=y7j3LbOR`Tt{)C_Y@JD4j5``#Q&Yc0g z*N}PuW(L?$!ZSutN~pmwOWKNwngq9=0;RYbPKmgyNwK8+XYH9l-iX8F60!-9>*ggN zxT&$Eb}#oxMolz>&tE<(XeRXiKmPVNmwc}ZY5FxWFrmRLFl4=twew&K2}Le~&CwX# zwyjQ&(y%n{Vd{RZ#qYnZn?%fM`K&rszmJW!Z=U;~8KebMWwR)gu;2l1{VTAW;wC(I zz_5VqD#WOXIT|upAI=!M621_2v^=*=LT(McHT?9`AMmF?{RMye%fCcU#eKZXD7hFY zlo1dJ*))iZtsrV=0wp$^adoJw*ERBMp5{a5Uc~1E!AwBWkV7PDNyI-!`q_Da5Ps|0 z(Z-J$8Jdjj&NFZ_Nf$lr=}ALy)y?zo>M=**HjZA?nm#280tW-`Zc`#M&W zat;8^0?c_5gRc~^&Xz@~=svfO-jpGuvS(s1!UsJxeonXD|%Lm!~f&>4>u|cTK~oQNJVo+Z~w)0Lzf|;413GO5v_W^Aw0!u{oEWo~=hUb!l5G29JmpA7L3(f*7)$tnO)W2By})J^s8QuU_^(YLna>E(hi zPcNz|hzWN-pYIsJJB}%Ds6qveL?vWRfAxwqRwAn~xVxjuRX0L}g#roOOTu{Dtzd;# zqn(4Zy9(@|jEOhRD)}aWJtPu2WxlRfoMgO7BTx3RY&8WitpW|j38DE@+}x0G&s!2# zU8vG<{DVxR@U;n7A2c>$+jl%rLE|O_-vJZ`bv13wzPCoC=u$|eOIWZ+0(wx7O#$&<$ux%SA?V!YiYM&B-Y$;s(i2R29{ut2e$8oF~5XC$wozX}uQB5-*mIbAf zRs~XRK`R&C$NP*a06%F?QJR)&hPA9pw!D|b603RFhNAB4p~L25%7QrkF2`AUYb#F; zBHVBV_pZq&MsyaaB1t*LHlXcLcY`Gg%$mJ#@*crURtLQw`rc;_V~iz*H&FI9DBe(% zNV6LhuqZ(Igff-^(lX*oAh-2~({e&X1L;QF%K!i%07*naR0^T$y}O1*_qK~GaJ^w! z7H59FTirpMeD~)lhpbMs+3j~z0J}g$zlb>5?)$c3nkJkd9#FIr(Y9@AF*B2<%p$bc zQB*@71cI9&P_K%a8}b~j?dYvx#*B{UaK$|m@O{VR_BCl-dg&+~Xc_!+Z9vrNbz9$1 z%OW@=+ot0Ysa!Q3lubvvwK%CI>!jFym-2a|+14%EhKq9{E{-ZS82E+!)pLVWtM22z zD}MxjgR2lMYmyY;qh#kJT|?W9jh-=3ZcxgC>|1E=w45Xsf?4wBy;njDYky{FuIHCwb+VXiBXnI{q9cD?%3&(jn*k3GGvecLz3Kf>WLVlcj>$#dhY z$z3`n5OBM#xUL%>AI>g#Bopvn8Th@%WHx3Ya-#R@H$-@Oevzy<+eqBAoRN_!nPUTb zet9}B6`0X2X`mMAhBB?dc2tC|+MEoRFn1B$^_6SdhstSgJ@-QB1iJUt(Bo2QFlS2j zblt=V^njvbEh$L~8I0Z%Yp5D7HFD_(ox`@?q+*W#B&sOX(b1K73QCa#pmn`rnNR4{ z!dudFABB`{7?kOw_nw|9jPXI0T zWwySR*Dk$8h2MOCkIFQx0v?L(I+bZrM*M)f6U7{`f+A7;CA1=Pbw0go%d=3R)k>Vt z)2zRXtFzPsDixQP7u`3~|A4dxB6neWT|?3D<9)_ti5tbrZxxLiD`uyW*QfI^Q}Qi< zbzLQS#MyvIo>Hr#?8+F72D1y1@JcedbTCO0C;Inh!xNcGA@lnD`3rvd^vOSadisLL z$HyV3m{Y+ESCc8sfM^*m((d``v;Rft>Dm2?x_&@ofO|_)G6yfI{hVSOq9}@m2LrdO z*!ZT_uh*;R=UWCHY2Sw1?TXXsgbv1TrMj6>r>aua`U)_nlmKKz>rdi+%*HOlfS7yB zJSS$6Q3dU(P!wy>e~#FKX<4mXzJ>&46$Tz2A5f@D(vVgM`uvZdJ^zIJUHyO0F_ltL zD`Q6o^`huA)UMN)t7x>)zE^~NMV!VQraC#Hh4dYC0FNj%@G1muNM0LRAWIVu^7?u- z9Ll~C-L2=rLhKDdV14z>gcy9-;ldi_j@jdew3`V+c>4SqA3l8q5lc>gnipBCD}9Ep z4^)a>D`E+{x)iNfgClF56pULj&5OK)E)06rc44->Roi{-TT=pJ?>lJkXkcMFhiRVN z6Ow^K0HNf{;M?@y9<%c?IiT1uSwe0(Su_+8B}?*|zV?aITCYpI&|5 zi>3l6p=k%lhEo@o6QLa7KdtHy00;WyVsPp2b>|KKbKieR^oTT+lf9{@-p6YF3yxy( z5puq}vQmii)0Zcemc|e)@n;NoUbh&~8ao@WozF<>$m@+3m?_&9J9Ag2SS62Vw&#Z-&@KNZYV@pZOqTO3F4 zT_ZS~2XwV2@d16`!EHyq2Lip@n2F=|2vjLh$m#_kz`B%8 z=!SGU2Y^cjv++3rMNyn1dDYl(D;`3V{XlDNo%gC9LoVS|+I73nG0c@*kM*iN7*lYw zmO_ehgGNGY`{s!_MC8R*B-J&*NwNiODN3@FYa&L}Aj0i-Jw!#yeWi8)Jls~a0@8Ya zqBV4Vy6m#FXR)q4VRBQDt#$+wGo%mSkEn;e2m6r%i6{VKsSl`^DFp1mWxb+M!KY6j z^xTHl?wJ7ZIZ|`b5(OQEbU{Us+A+Yzvf{^RK@^h4kjzlem51(GL|s&rfvf%5V>r)C z0BvMs5%zXhd(#Fd_fsCy!6*Lq`1Ch=9=Pl8jsAt%+Vw)9L%+P&Ma~=!b+n9}!N}Jd z>I{<1N&rvKPd=~5hX+85gHH1-4TG(7Gg2ldB_>3A{4%5MTWDl}=MDJ1y9L&$CS_HF zUn8}_DAL&X4RxCJUFxZnnzDM-QM_CVZV+qUIyz}&U@73rI4=`Qsm_Q%K>rEwx1a*<%`qu!unHp@@*WXLhBq(zz#Xqtto#o&2%M%_RKBQzAc2&mK zX6m`@)L4AsJ=1)FI)=Tf9%kpY5j+wMT%JC5?- z{@efK_IW7<|M4IHq4@w}OaA@uKdbvju!863r-(-{K@JZO4*(JNeaF6S*mo=C6o45O z+4%8k*yhVwB;SyW;6Q*8UqbNpT$2{9ci(WFzISuNxJKHv5&9o!vk5ZG9JCYH+bxhP zm%O7IE_9$7jd`BMq6x*F+PP^1kR0Qnzj^9`MEw;-$1OWj+-JqJGc7N}=+In+2J;(J zk$wPyGrW~#<@S;@BgE%$z5{5H6YqOQdw{W) zvVAuK-fc*&Dh(U$j#j670H)p&gBA2EM7XZ2+tIx@tm_)aHboKt=m z1X2ux6828kzt{gZUok@@#u&9108@k~YjBSdJSEBO>c83dq<(1c2;z=STNClsn+C(7 z(Ky;~fCD*?U@8Jcn&9TR-nw2>hu@5KSdkT3Yc|cyR!1v2_wdN-x!Hx8u!AOL+^l68 z0hpIlxIR@gfEE{7*Hy0qoaWgXiH&W&p|_5$iR*D%&i01H6L7ow^8>)VJPw_dV~)NP z0&mbjGVY8{_vWDQJ*K|z`26`ZdfT-}V8`>*lemx+OnSMzr0y^sw{;!*zs>XFR&Kn? zAY7!z5_X+!+c2LN-_WGW0S|&g^9_2(uIaEA8E9C+yv(@Wu8v~cB=WX#mXgwd?ILWb zBQyvlo##YtvM!kbR#(r#O=4UwFF2i4lQCwRY-(GZ(VJp(lmqvD!@QiFR&MJJ%W?t% z*c&7g(_4mVjy`d8&`}09O%-LDz^#quJrPdJ8NIUxd^Oj4mK4tsF4k1lIL+1=cP+(( zg|=<;rInWJqss40U??UVT9g5V-J(sCnRXxVGp1L5_aS;LRM+7FEgv zBaF@ZI(H|8;pwu(ECAfR*2b5uywmjNq+;9MgOr>;ls~X6-B3_G~^8=Bc`wBMD%P z{dV#92oTD0#%+}r>8H~oE!j1?@;=^gOdu&oo!xV_7Ddrn&4Z%Fv^tWtsfTBI&kq7ZAH95Zwb#_};bYlNVrFB1`Z2?i); z#0ejl84{RQP^OA6|M-ke)4=cJeMW(ot;#-ZIsj9-K48v~x1)0*s8L+lu}AbbknFf; z%)_q6zDWmy)*s7qQi4nOw5UEmoX3Kgi97X#7t~V18!@;G<(JcPa>8~D5C>YYBqd{7 zR<7HL%YXp2<28T?>G|BEpkNmMod<2jyV$)9nwDtm*2ggB)YdE7egpcBZGDLsL$;2K z27JL;0BMbc0r$)cIG9mV)4i=>ARI@obF?2uLN&Y4l7UP;2akw*R?PDT&YHuroV5C^af+mGTNtma z_>6g;q;7z#mqs2Og**<)DM<6MsJ3M}NfAzU5zfnuecO|_o;*Ila0Sv}mAGWgx3z|; zR@FZ8x*4Gk+){p&0&3Bz*QQ)bk?1%--rh-ZBgPwksO0Y)YB*aRKr0?n#7rq1Ou9Et zfkk2Ghlxi+C*%NF^Y2Lu)MNI2*AVByfWUfviQS{%2C1gP1f0$v(3-RelS)B5pluC$ zzheOJIVO1@Su!Pn$`NZ=PaOWVp(Q@ftSk_%d)61 zT8L*kodDf*w{^v`ERIeCjGzASM|5Ufo=u|JH*m&sxm-r=+N06zPucWsx2!<&*m!HP zm8E$pgtiC9A(B$Q-}hY#pJsyf;-G15_2z=^N4H{E>pf7YyE^Y~I}f{M=a+2ie+EzW z8A~CoYs2}&kJ5d&HD_#1t2mub4<5(wDcGr*xtU39oZZK0KAHcrw~lF!w(AFbaG0ZM ze4SZJfTQCyPpYv=NO0Tt!194Zze_N}q*>5J4(bq9z>x_fe1MX-ILAViL7T za))%bEfEak02>FYp48uKY7v1az8hUU}0z|EvZ^F88I$0CUqcug29p+*wmP-+F5AgSp?PE&nx&0TR$SLwr z=h~W-7JGSq1}p>7wJfUz5c9|;O(gsboO8?)bkLNCb++f0(CNc941dx8ZT(x949vX= z!CO(#T}_JX&6xguyvHasY%+U8QH>YLB*-}frKHqW;R>j=Y8F=&PzXS&a!e!^$)BoVntw1Urn4JgxxF!*E3IZ}loT@Zu#tW&X z=LV8ecqtOg5W-tm@(m3;KB7ePR%j(J8xMY094QQ1PKGn5*uB=2!uSJ%vZzWN?d4`-jb6Do&lZ$If+ zK0Pd>;mHq^P=9_x12~@)@6Dz>O*5vc23XknD;~JjFj#XByxVLLb~Y<;AbJNPYl(8+ zfIAHHHnsaN=d&IG-_(x}kNTI{!fCT-aFKyeKm3r?-dH$NwYu%QOIb6OSnK$28ZBv| z)0SGzx-NwXfBDN_^-UNfjtb3IX57syAazeNO`t@AlxY*LW(PAdtR|Zw?yBQ>&zTYA zI{%biu6F&yW-_*&Js+FJ9!Y3Lo#&(9u# z)qBVFdP(?rw(FpusWj#EB}t%)F^wTnC~eeke;b;l9F%thIMhVk)HoRW`ZB z6u@wpLTFr23nH(-REalWZQuE(gA24f_a%EMuLHd42Y)qE z%$%uvL5QY2d(#Rt!X26(Rd7I>c^Hb#8gtJe6z=e{A_;&Z1apXcs3*b@aj+AV{o6XD zZJR$2>!ua^f5GG9hp+^lF_JeBD1V%=>SSc??sz_h?a7@UU52~mBDDx5oB3tlf$&uc@}q@yPCf0s%~m+K9sRKbVJ zgsB$1+*Z$WypQicCYaxt0BS-sb*doszmnCjH^Q*Z{i^Y&sfk%=r_G%{0Tt=?lah%p zmzU8dL<*hteZ|r!qBm^YhFwclSru8k1B3DK@StwPU}YaZd{n=(9JgDPS&x7qn{n@B zV@%e1e_nnZaIJudq$VGe=j{^_I$7~lLa9LSY9esQc3bg8U-04655qDRD(Ho^&`Fnj z)r#Jl1Fy`Q4`B&O+}%xUaRkH~(aBQNVcS+I)pn@!&uPsv@$-@JO#`&d!faLn!I-Uu zgC_QnHfyzVX%SyCp1-xtv6{YjP~Fj~3WK`G0leFopz5eqjDc=KDGu5lJ@!N!wSQfu zH??2YV_y&cUu8{kVXS2fXn3t4-aQ4aG`boI(IGCZR?=tC^0`h zeICF@Dg^2kQ|V|*M3p-T6}>l5so>V3UCFfgiREAv$!IJ^>LMtiSy<7&?|684h`IQ6tj?43c>h!jYf~Mk*4*0O_5j`ccABiWQY%DWXb*#*EsVmy-9W!ffW; z$9EqSvz!h$j72U9;3?az`byXEld@%+=NC7QIZpC5=WXD#LSn#UlsX3|3Lpq>J z)>;a#?hj)R6W+DW*ii9CCDiG3*5HxQ9n701OeI=_4JpMgmKgIiOLUrF*CcK-9poGR zDf7KtE?7=yk86ONJ6g@CmjFAdNWf20pI%aRAY1QcIiplj>93ay&gT<=>g~vicUoqz z)^s{mkE6H1pgN7&j`q71-WY*D9=$F0Hza)Wm{(zC;NZbtk=x-Wg;pfy4it(q=%m;0 zY`6x@m-tF6ypQiYCIX?XpkO%POJ^`|+!_`Gf+@VUA zA#7KqZ5!!|4Y*4m_UKG|dU#CPfT4`IE{{kpJ)KTo^@cf_0|3tFv-Hi|Nn}&4>14%0OEN^w5~$YO)xV#o1*;P4 zayo&$m!VZ@VoYU1YrEhFx)#$U?|55R0R$DcIGrA3jY|pR4M^iMIGF-w z?+5-6uMuF?ig>IGpzm1b*cC7(oX;mv7Y(SlcBlV$9F75a5e=2P4UB4jW^Get9sp7o z78i^5vsB$GFS|!Isgf$&B4yi(K#vb((-bZE5rYsi7Fq~I_0XiSnuM{9sOWTtohc~yAX($Y6fr? z0`)dLm=y@IwV_%-y`|1e@+{WmXWv)v5m40Qz$E<~sRO9Wh)WSvpfyzO_G4Pkx=R1Q zknTtTZAyqjWb`FvDnf^cSPaXA%a9|0nK`0znCjn?)5^y!C)7-ZmwPd|j$!5ED_Va{^^4t)T^wzW+* z&6DORL}eOiKR!7h?g1epj|0fwN(OMXJOo`2i+Cg=eERW65EV&C%Dn`=U%LkTAg zh4r`V^&+L$^*z*DhVtt~glU?ju&bXb?`7LoJUl!MDu31fgV3r=JTL)-iD1t;tlvRX zSBBM6DY9C%T-xaP$G8G^?T&x^kK>*?5m*dB?xy?CeP~}WG2*@e3 zJX3WKVG*~qwk9Pd*n@Bu&OOAKum-)B$eQG<)fM1BUS8i=wz@S=1=J=TViLoaYOFz} z$2KMIG^gkqCqciVZgRDm%fIiNRSM?$!8@u<>TLk(UaWb^v*S%N>7$>wB*gZ8$1voW z{o+QYJ1Z%@yuM-pVQ-wMOH@VXi~ATX0SZDIGTOEqpTNF^T`rajD`jUL2Y^F_MwliQ z>R?5nDtZN6M)PV+lU{&jS8dXznLpoYr(wCmaS#z z!^JV^vZ!95vI?2N;)1=th_5ei_MkQLxHohO!MXf6RwTl(kfbqmlG33J`m{QIB0Hxh zJ@Css+p%)aEOaS}$x?QHxHVZQi*Val8JZcAd}0KyFE7}(U6gj*6~5ozaeaB^hdB|b zNo%jL10%Q$=nE^6C(|@U)BXr`yVX6Pmj|Zl!kz^hrpt?aK!;KqG3lqWj91RdcJ`dJ zHR8DE9}Pk54wP4-HX*rj^iNYtGI1p%4xvr5;iQChW8?60osd(;V_xv-^JmQS{L>%& z4n~5;=_JiKAhXOVDBMO9AGHD8)%G8v$Gt2w=6S|ro_YSDbP>M3yyE)y#x844Lbh`k zcH4H#jK|JIAmP*78`sZGCQO{$CN=%)6#!d^O*b{x6>v6S!*sd0TN_w!rIz6SdMvyN z(MbJVEs5T4cMQXT^Z9IzP1*}^zuhEmcLnBzgn4<`l_Y8K8An&fK_F^9@3fk`h>LrE zJnUx;!Nzg4-)rqzgP^fYm$n)=A^QYEl;v35=QkHW!jpwKJTHx`ni~?%{Qh}fuxuL^ zWlZMeDoo8w(;Xj!M54c*a^~GtcHShG8Gso9<&rlWndOE+<8Ni88oyj)W&n@JjJ*`> z8w-)zE@17*97PA{KNO+O#U*imb)?msr z_F!9J+n)X|L5-$BqE- z{^c7doU~uwq_#!8qH;^<^?Jp!EUr8#J4D?}Sm4@^PM&-MpUY`HVObVjuUC;Thlyic zrYmYIwttmUtlN>l6N^+nyP-_WJ)`W!TXGxk^jAq*QX*s`AXU45w{Kr@zFauN4GxRE zA||nM21YtzTNgIUDk}~Thd6YpY5a>ot=tdR)u6w>)z>5i% zRm8fiEJR`^On)NeVX&=Dd-?B=yYIeo4FDhN@wnY^zuiFK>mJ=)l1zR|y6eX_YH7FD zP$^~peeuTBu+|oeZyL_*MY`}tmI6bQ_2~07-%@xt znx=_&Qu8^*<<1%Nyh>;w4Nmkla8#05<7s3by{v?Jo-s`ma?UI(CSQsGR^tJ1xnAuU zO|%p8z}kkl`%S`_YM+&n&=Q9<=V{^$zmcgLtSZKnR3uSID76If%x1grvMdMIp01@D zuLU`kzcs>RzN72~=hMk5FUm9wvrvS_;i2A;2fJrwFM;E6%oVA_1}TeXDKn4bU?#RT zW*ZD9&DQY|7;M3V(Aw^0K&?BshBRbQO`H_dWL?hkOf_@Kd0I_FOBJaBZ=XJMys4dg zNlHOEJ&{c$(_I_(vLWT<;YLbQx{u2L%9LZG%{(tSjU%>w1Bm1Ay%Z@U$?e#4PEfZ7Okf;C7L?Y9##MVAOJ~3K~ykBl>-ot+oEATE^M6(Fik=UuW(PK z<3lh&h&58UcFN-Wlm~wAGwdKI+T`_ z5lBi2_6NtK2_@!)_*Hh3T6R3j&NXeQfCVufHYL^qES}M?wc+jU4ZBtg8Vh@<7oZr& z6V`3D#NqsS;542v$PNzTD#vu5(1>gAE->ont$Bggm=asmOHuL?ThG^-A#S>eu#F^hM- zw*r4G22D=omeHCd{e}$e1Yk$0JO26mKbR&e?VI<<-F8l8kdfTn`{X70 znKfU}iW*kPWCU6q=Y69km3WPA1VP0liWHnSlNX`iaTrOAEUO3j^o-+0tzBh~i z`L*EotI;)8CV7)IH9aBVAR2isBx;%{;8fDm zyb0z51bln{YH8!Q&!6OXxPnlHFF?e}I?cROBT&|OQ?lE&$=`W*En*zB>4k_;x9Y=3 znmfKJC+zzUBH;DYXCn$V0NcJF9{gb(v282n`EigK*OusI=62tl2U}EVTxmF+*)<=> z5w%w2A+yV^GYyGwe>`x#zJ!u!vc(T@LsA~{QC}gXUVWF8C|m_tE#e?EOjSA-C(-^l z(WA-cOxm2Jf1jOVCBd8FoJlUk)jA6P0oiwsqqwfn?=5iV*^j{$2wfx0^8{HQT4< zJ|tDpaW*DBN5R@L*|^&9xZRBPr(a%;!8nZARahmc`P5q6oqrmI7KL5B3@9&!#Hszd zA10LdbT81-YYk(=s+VNdD{Kvy^N7pkY=R|!`(J;RYQ=w^L+JSLV;D{&(oWbYVX0Mw z8n_&m#dOyotf?xxo;2jwskzt#z&m>-t_CzA25A}0OFh8t{TnCdI5zP90m+C%>iA74 zs+5n~h5Np;LXFgy>&`S;qka@o0JU~MRUDHb@?gKp7k1s{HWysAT84@ zjB>VyDIQ|#-^muMzk+Z(^%eX6+KCx_kq~b2yH)4$AmJ_#4(l>7XQ4I%31z#IOfSyx z2|?PC*i>bxR{}l?LrxjU4MS_d`GkFwn^bs4o6V||2YkqbjKxk?x@(lUBwe{Nrc@pQ zoosh#-mn8rYWe&DNJ6e!X-`6dm;{v1)LsRExJ*Z!Y}_}F|4ZEuyCLr&4dXasT^DTY zhP~|A))i?OfCd%{Z57Mo5n^K=NtVbLqG_H6ucT=aBh17DfNkADCkl(sw6)EZ4C82Bi{HET zPd{mn$0XoNfzS5Qp=RTcZ(G zQdYfwc4bNGx7H9O;X%#=clF6`v+Wyano|N1$Mi|Mx`tsu*>;TM3FCOe`7~k}M$1+w z<+MvRpp+tV*UkzYQo@k3u;TdqxLlcd2Enob#EYX<=J@YM(ji=5Ud5Gc7*3;gyQ%DV z18_M{Le$Y{H}=5GKn!(PWf1B(@;t+B^^sK+la{tCH__tPHw7=k`~fa4&hw0ASwhf} z#E>>&{KceUn4Tn`tKOL^{6>LPDfkNyp>daIaJ{WcqaHzM_?f0KI3!rN1CPQ9eIb|O z(rud1)$wdvc&ungFQiprCThzv|5Rdrq2s4xNGT&FzL_Z{algwh(QC1fI`lk9NSv&h@NNlDG8+<-(~H~HWI4VPEh_0`?X zDKq`{c2}Z2APY@1{b(>%+#)n#i%zTW%&u@5<5_lc$MM8E`dZQ=P9PHLG~VDMLWk7ESr0@LJ%Cv#%Yc4oLYmH!2k>jN?>oj}5Y58SimmFzat@Ej9hd9%5T5Au zC$k`u>8HaCgp&G^!W0+O1yZGVv>9CB@z>9J(A(2R7menTo1AaZ0W$aC?83 zfuV!34YdVWCj_g?jJF1-U9W|JYPPMN^5!QX_@bytfGWk3dhEB-s(Q?`zE3! z>bh2&c-wRsD4yL-4+oT*+VngQ1u|chS}Q+|C;K-Yk5x*+Fbo)n(GqTvVdqOJWaHQ$ z#g;$U4s*TiK0meW6KD}fryC;OTLoZoF?=5JWKB`zLy3mEL_oUfQN6MrHs`B zw|(5@sjo{Ypd_u<4rSWf-Tx28kTN0FjG8JaRS5?w8d#Vi5#j5XFDN_D15_@(-mLkd zBp6Zr2{Y&++W4&Yn?Ol3?G<(1B+-{ZlA*Sev^-w7_iwVxd#Bq$Pp$#mwqqQ4Y}Vt! zBc-xv^fU90&-pY>SRS+WEa?7S#T{-0?As>YeXwvq%W3?euRKn?sUcwheUyO~Llm{t zutLL?#_!jiaF7IKN-D>Fs1#b3T|J@JfMs4VU9YmpnrSAe;He6wMzIq0b~O2T%=9;} z9)yM=kmmEfcdze9Q$5I#%IVAJ^l$6k?c0zMAI-~RenKz55# z3QDOcWtYr&z-WRnzXAPf$+ksxGlqB~l)2o?M9Hfd-UTWV{zo6-vWkdivDJ2tV7p0wM*b zZO{!~sc^b|3fX*SvUyoh$uC)4aq=}~ak?%$;_klIf=8j}&4~j0F17+1*7?C>yo62* z($-os?Y~isnCdAI2-Ee#Isujg@z^|uJ2o)%;Ab5Z@v2|=JRHgwI3W)w;~flnaL+(I zIFL>Z<{U;!nI{4lAT>!7QUgl;Zf<19&%;1O*mu@xL*n{u?9sP=nFbM`2(sO>(C2x^ zIn>1=i{EUw@Y%J$n_Fd-fFkwhq^dxg@JdKoL_&pG)+*1(Yaon5%NneVm+Olx23cgKTJKSlwY-T)h}NxYts=OoD?t;B+NYrLxRk(%ux*=V&1)%=tq+$( zT=PVL70xs7Vkx=7%cp68cOp`b<4NW;4A!k%r-f zamX0P5s6hbouSr(79Tmw*OX+!5TJ*s>jFA$*9Uk!9uLbnvm&kTG9i$)q*lY_@?u6q z>A>^-fn}MEeb;1%27vi~GxAJI?1C%1tVuHJ{&<(>qw0F}Eec$Eog2bdg9QQMeJv~u zzzo53ne6;oUM+h}EXO4+n^7=!vg#A*l$@}1MEFBB^$>S$CGJQ9k*Hahp}O@|s}`ES zh*dr{H1KA#5fKZ$B{eNGWXY?h5@J3gdua1FzU|}5)w(4Ke4(HD+en$fmd}= zX=6x89`Ryep-ffFdCYgrkGmx(Ev{@0)A@}1os)pWI3Oj$w!5xf%7d}&#&NW#o(G}G z1xSe(CIzD;kK8bfhh6M^J|F7a`rR7{^JB)cJWMc64^m1+sj6|uJMrUwmstTyh)U*V zlv0fw5e)?n;SEg6>wdo-cnIq<%VEV#iIze&quYYqI6RAQ3d{PQn3OnX`AuCZcwBb> z>^y_(W7Hvdh@<(4r|JMv!XWqOmp}ZGuR&k`ABG_%nJPo9$6sqgO5B`*L`Vf9U(K<4 zg0t%QNgz}dG3J$L+RC(QqGr1D>$+e%PsrnFwcVKQHRW4*=pXkRdl1P-W$A;4##4K$ z<_3`DGnkx{1CL>zXA#q|PqLjUrQlvR-_0$SCqhk1!)-=)R=3BKXI>0n*M(j2)5*$x z&AR6_+0}5n-Mk_a3VPtnZp}_=P*O?~T4br0>t}PLlgfN)!m`=~CEc~#(HL6@5G2Ec zcN5;}UPN%`N#dKm(>$+lF7Zx6oYr(6>ORie#%L8)|lJzO@hnA`XM$=)p)k?y6I!nAAD)>*T zJTY;qmwOn7@SQ`Lpr5WGK=1@(UQo~1lb|pP_%drEw_zOE+ni1(3lkxJiuY12$xRh#NJy=i*yQ!)g?9!`=mBBd<*By^ z792djRgU}P@o=|W^zib?<+R70d&X70XWw_}#LIzy?};T|gvr{LqXlR}K7!;ASeX}C z);Z)yG=ZhDI6`3_mMlYSOnef8l$GTIg;y`dx-KZfhqvj=QfV;0U-AjRWC6J!gwSN7 zlepGeTPLzXqQ2|v0!C14!ttcs%pJ>$T4_ua)+hg@;h`Tx8;z34poMd@SrGo=DJ2X8 z_d6uY=oaAPFk~XsoIq{ohprT+_*N;^NWXdlp~(2_X}Tb_iYkpIkJ}9m4d1?g!6;+F zw8fSqhbr;AK7jHd)Qow)`Rnp*Wr>gTFxs(}nFn5wJ|MDNpaPEvFMg67K^5^)F4XY? ziQIj4hZ_pC=71RWwx^H-D!0X=C4*3xb$3z^nVRpe>%4??7nxCuvAQU za|qs&2%->xCIejuY0HM?Ry_Zpe}>$@8$J2dN}{!(k-v@OqL{9e^OE1Ac(J@(%9QA1 zt91-DWVn;vi@L8I0?0v6(}lZ8gRCN+OkBs$#Q>q*Cdwdi&2^p^jHiKjpIzhngheQ~ zM%4_`Tcx;Arrt5ujOQI`o)-+KQF3kV;7;lypri~pRlz09x4SvCIz31iP6OdF>*5cx z*hLq#?mmQZJYm~bR^SO0fFeB*@qs&?PBNe1nEh8HrOh}hlV0}SMKjS{DOdMceW0}r zMj-(fGJAGSq)f5Q4}b{Q>&qb-slQ~UN+E3#HN3rjW^X90o(3LIUK8hKD1MiAOxM{L zrtrF@3BvaZF%gBts)lncW-4JoYZlHG>7Qr~NW+QeD&)-CffA-DX9TTrQnZ_Z55tg% zcXkl)?dvy`vNI9rYeUY-);aEK~& zNUrtz6PNxtbIwL4?mBQCQB)=905;|d(nY8VM(Z*I0tHygb}7ql9y?p~Ut4hR{T$Ts zZDFEN)w$^An)Bz@S~%fI1as^~JCBSI;~tQwJ;=hFZQnVucrY&E{}cxFk#e(S;nX;x zhs%nm^BLy_jScNi2`X6LOOc^^~R7+_h^}Z*!2AB4FQGaDzz4LwmNIQf9sW zT9E+kwYZGelZ!YEgPcNCQh7+&HvNYX zE5}*(fY5;_DRb!PZY8?-gkk7U@^9<5;dDNG`4GOLy7!>R3F}-I23KAH%6Rr55M>$}>}9SE3we97joF zHlu@x--d>U{7g6O_^C*&(&7Usl?DqTf+*iyU1Z%M*3Dz;*1RK5O~StIaVxN6Y}+c* z<2sMfXW#AHj$JeM(EOlQ@_oTH0FQa`&j*RC2#b~V_jUJb0G9*B7*%Qh(L4n-KKFwj zg4mEo#5&L4#la+61%3=V*038(dq+`BotUc~kz^~M{P*EI}%|IWHq`6=h zp3vN|KY04k>YYi+A51(wBpT~-roIMph#Qhk9(-<9Wse~y>010j-BxL`DYeKDPL1!I z{jA19yBQ-R@aS>6B_SYqFIt*(_M`r+-&f7SvaCje@z00kD##2$tP}vv7QHQSEA@$2 zVB#Ngrb#@qaO&I{sL_UN{aNy^kuVwEczNjJ=X;s1;oj(VX?87|lw1#pMzI}VCOZZh znXK+bKo?4y%x6A8hFY!^MU_QXSor8dE#RaIX1 z*JM>Cez5j^lj*ic#O!mH#+qvFy8OR`!Kk5OL~{s7|Ja|~#)6%J`+|hydf(R7+t4FD z_R0NSSNB5v7-60Pg{L|s&F1-mWm&Lq8_K@9(M*vC;Ij{j2-9UUu7w(pb)Lm&vEh42 zDRl}eM@C4J>vpIV*mes$Ce#~w&N0aM{?8h7o)>ui!D#Q}d+de>X64a^I5G=5el`*h zpoDYKjoc$ycX433lX`hukA`j<3M>$7DCx}>0E;^_wZn_E1i4-4{%ug zif!F645J-G(ctlB&e<0qu^O&E%=(%S0@eMI>-N6cc}Ria=BhWt#z?CeS-ShwjsAYY zgccw)X~weQpK2(D6qIbSzoV25Wm{0nV)tR0AJ~@d@M&y+`1iMMH3P$MQG>+y=z6)h zafm*Aa>L?@(Pvihv5JA`1s=RVrzbso4^7ItlO#;rVK{6b4fe4}>he32OT7Sh<#oZZ zf{#G{Z4>G%m!!hhp$X`+qn6#KzjA{~GnU{XxVImV{qg2e#H5rc_df1-_E17d;?r-) z7VPsnByDba-lQZ6w=Odq51l|P6OA=t=O@P3V%^pdzb0SiaYqwNr%5glSw&*oHkoax z_n}#?AklFNaVv2;805UIoz z2P1=I>QoBkq6Xk^fB&rq0w09r3O(wE!W(bY{R=LlHL2*XqBY+n>vcJyf7V8(z$g4is@;aM7AaK3y3@(IW+K%z}Xd)cw=JJxN- zS1IM{xUs_p)$@@Y&a!S;)?LPTbAE-?IO%z}`1`(ao3Ral9H*=MuL@BNH~NrK*0|4A zfqdoeQohr3@O}e5QnTablu=7LcnSw2@Pp4@=EZvvbgoq}0^F!a$U|m1FX1>)JgWSm zq9Q4{(c>^+7zf)(qw?`6LpeA*cM;Aus@KHy0Alvam>p(qC)kh1weMc+9w5 zF1G8BLq^#X_EJ6bKz@=s@#p2`ireijx=EhgI=a!}kEe3izAik{dpd){qCQkCf@en1 zNx<#N1Ch^&JFtHJb>@l=dt_)`JJL0r3{6D zW&9(`Ud-D-TmXQ(^76a;=5e%sVy(?G{|#Xcgf-%xLpawE#FEflo4hG!9r@+I(;6_( zk3&Kame@`3c7$bKKDeEu+*v!<^YJAF%|8c zC>}jPbn{tBdvtT*5@_%!jSpN+tdqXaC=1DDIyV|nh5utjk^2POqU7d=>8 z!NQiN3l2~5GX@LY3Tp#ekZ`=3XAE=N>(r_f}NG@qf zU6xfAoqvwG(Xz8&uP-4hPPQo22okOaj)o*&MbRw0dmQWXaC$Il5?J#i-rcA7Qm>&O&l{njtZPtFi;r;U4ZGjUlt|RxyF|1^3&{!UZ;3RsNLUkq~Q{ zXDP=vP#SHMhp{us#5Zd#czJunGSAj3ZC}gmr5mI~Nz|7;QE8<>JR3Y+_^vv1=zKin zE22Sl@5jPSkTXv0do(L|c6=NL*h8JXHZ9F0>h7hSQTFX=9qEG{7U^NNaa;*?DNV;7 zUTz~#3Fr}c_@zBD&;ztuzk7f+q|k*KcdA21IRQEAC@tS?iDCyFg>z9t4I99H-*Fm8 z+#h$mzP{q+?G?B8cMe%B(MX5t0va>&=KCFqxEY9J_zRzR^PQ0YOVTgT-(?h8Gxg5S zr<47Bna-FW4*(U@c{-FHRf5|+Ivfo1G@XoHrwgtXXJhJTuFGuKo}xEovggv5<9lq-!RtCqmmzS%ZJ3Sx!iF|c%_l>jRbnA6pFil*g*tQL2 z-!WY-{`Et@K_WNWwgW$VGVC+)-a7 zhyh3>OdLe|~`1l!oGV|jh z^Ax!wQfEeD(r*9&3B^f7K~yU8?~>^;CSk=T%Hh~4R2dScX)+oepgG?a^%OpOysg7pv*!Rg@Jwg+kR<7dTZC=$=?<_9n1P&Vx$z=tBmoy9~z^}*0) z6x+W7t1ax-FiS$;8H`x+f+X(trw%h)wD#}?YO=+JF^{C5>E{JKuOrp{m=wd47ZCq^ z`aaP>#LC6}_RezSN?FzG7DkyPWk80PA|5_?1NYkvSr>mw`25Qse6C{nlPGhEmXZmw zrsO>X>$=&7!7z&2HlbD{M4_}Z zZapF-L8QVyw(+J4*YsypdV}t%rm&$_OO#Qyk)mqLQRb^EzteXL;tuKdk)2@|i0R=gXkYrJQPv8g&{wp8XB z+;_r@x$v~M3y1Btskg{rFK}m$64LzcX}r@M5GB^*yt5Ho7FhAPM8{1z(!;P)Jqeok z4SbMT8jkJ+CjlGizlQviy$6`viNjh;MB(O)%D|B4QR~i^>KlY(GBQ329+A9A@g`8c z9ORth^PIknpQ&Z(^h5S`jvf5k6iQcq@#*&&-o}Dh{4PypeXF0EFFo7L*3-q=o+wvL zz*>=1U?go#<(MOd$KC6EcC-1WQ6#?H54yL@WINX=QUuTkB@Dk%~_eKz6 zUMWhO)^H=xvb|enEO1J*lc2jSD##rsa5^iHidq3@a&-6lx0bx^vpwEZkWzBu^pz{n zJlwKuf9u@|AN{bxWCf$_T9IlqSe;@?6(~kKZ{o5tDWs3~Ydjoqb1=d^!u*^Z&)-S| zR&=RcsNXgrLA7F_?pOzLZ8A?4a{jZaWP9u`L#;kcHY#20MwsA6VcUi0Y@nfbzgnsh z(x&L@H<3A);QoOJ2r}7}+?)~ltd9)Ryg_W5I~`-S6b(?xoJFDHdn@?+_xHECs9
MRZgosWp=U0zm{5GX%-y9PA@Vau9m(Ic*q8VRQ z6#^o5PZj0on9s9QEG-J^on$D5xp|%Jqd7DMo)>$2*Wlz+t&>lQalN$;70tLz9PSp@ zJ(TR#G;|KJFfHCRTCin*WJDw=M-R4LeV`CNI}a=LEAQAhW`m9tod{!0T)Cp_vkJ5@TwHS z(CyM!r#T-Jf87?`0XwoYIR9rRv zA;2-~-&tFVNnhR3azV6Tb}iJg|J<183pWDdF<76oCW@889_f z#aE(Pcff{+5rot(PUtjDO;2w0I-Cjhu&W^Plz`tkEL5^AZt|hqz}mH1ft{@})OxIQ zJZ9l`+>|JBJg0ZFGs)PL!DUI{Wu{|k{^olRPH9~X$f>?I z+!LKW{~*OUamry_=0R)jr5>z>Z9qHSK0Wj%xos>`BXE#m{T}m$uWfL`Mn9<9RjSdy zbMwrtrB~`+G*lK+gZhRv?pKYb#<99*K>1-5?mmau^ixV;U|`ca+3Xw^ zORB~rxd5niQZ50ZISc*L^78C}uO)fvA=&e7llJkVM{Sa--1#l14b~w3WTDj9+@{Xh&my{=qTy+KkEIvjYxA zH&K^OBB09Dy<>%?>DwQ#=3w diff --git a/src/main/resources/assets/superbwarfare/textures/entity/sherman_damage.png b/src/main/resources/assets/superbwarfare/textures/entity/sherman_damage.png deleted file mode 100644 index 2b5e6806ff0d3a18d17f6a5cf3951f9afbb2a75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6534 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 diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json index 1714584b5..919981b91 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -8,6 +8,7 @@ "superbwarfare:laser", "superbwarfare:laser_headshot", "superbwarfare:vehicle_strike", + "superbwarfare:vehicle_explosion", "superbwarfare:air_crash" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json index 1714584b5..95a94ab48 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json @@ -9,5 +9,6 @@ "superbwarfare:laser_headshot", "superbwarfare:vehicle_strike", "superbwarfare:air_crash" + "superbwarfare:vehicle_explosion", ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json index 1714584b5..95a94ab48 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json @@ -9,5 +9,6 @@ "superbwarfare:laser_headshot", "superbwarfare:vehicle_strike", "superbwarfare:air_crash" + "superbwarfare:vehicle_explosion", ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json index 1714584b5..95a94ab48 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json @@ -9,5 +9,6 @@ "superbwarfare:laser_headshot", "superbwarfare:vehicle_strike", "superbwarfare:air_crash" + "superbwarfare:vehicle_explosion", ] } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/damage_type/vehicle_explosion.json b/src/main/resources/data/superbwarfare/damage_type/vehicle_explosion.json new file mode 100644 index 000000000..fe579be8b --- /dev/null +++ b/src/main/resources/data/superbwarfare/damage_type/vehicle_explosion.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0, + "message_id": "vehicle_explosion", + "scaling": "never" +} \ No newline at end of file