Entity
gets a movement bonus on pavement
*/
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
return false;
}
@@ -6459,7 +6459,7 @@ public void newRound(int roundNumber) {
movedBackwards = false;
isPowerReverse = false;
wigeLiftoffHover = false;
- gotPavementBonus = false;
+ gotPavementOrRoadBonus = false;
wigeBonus = 0;
inReverse = false;
hitBySwarmsEntity.clear();
@@ -7677,7 +7677,7 @@ public PilotingRollData checkMovedTooFast(MoveStep step,
case MOVE_SPRINT:
case MOVE_VTOL_SPRINT:
maxSafeMP = getSprintMP(MPCalculationSetting.SAFE_MOVE) + wigeBonus;
- if (isEligibleForPavementBonus() && gotPavementBonus) {
+ if (isEligibleForPavementOrRoadBonus() && gotPavementOrRoadBonus) {
maxSafeMP++;
}
break;
@@ -7685,7 +7685,7 @@ public PilotingRollData checkMovedTooFast(MoveStep step,
// Max safe MP is based on whatever is the current maximum.
// http://bg.battletech.com/forums/index.php?topic=6681.msg154097#msg154097
maxSafeMP = getRunMP(MPCalculationSetting.SAFE_MOVE) + wigeBonus;
- if (isEligibleForPavementBonus() && gotPavementBonus) {
+ if (isEligibleForPavementOrRoadBonus() && gotPavementOrRoadBonus) {
maxSafeMP++;
}
break;
diff --git a/megamek/src/megamek/common/Hex.java b/megamek/src/megamek/common/Hex.java
index db5ad9ff80c..86b13e60980 100644
--- a/megamek/src/megamek/common/Hex.java
+++ b/megamek/src/megamek/common/Hex.java
@@ -414,9 +414,22 @@ public boolean containsAllTerrainsOf(int... types) {
}
/**
- * @return True if there is pavement, a road or a bridge in the hex.
+ * @return True if there is pavement, a paved road or a bridge in the hex.
*/
public boolean hasPavement() {
+ if(containsAnyTerrainOf(Terrains.PAVEMENT, Terrains.BRIDGE)){
+ return true;
+ }
+ else if(containsTerrain(Terrains.ROAD)){
+ return !Arrays.asList(Terrains.ROAD_LVL_DIRT, Terrains.ROAD_LVL_GRAVEL).contains(terrainLevel(Terrains.ROAD)); //Return false if the road is dirt or gravel
+ }
+ return false;
+ }
+
+ /**
+ * @return True if there is pavement, a road or a bridge in the hex.
+ */
+ public boolean hasPavementOrRoad() {
return containsAnyTerrainOf(Terrains.PAVEMENT, Terrains.ROAD, Terrains.BRIDGE);
}
diff --git a/megamek/src/megamek/common/Infantry.java b/megamek/src/megamek/common/Infantry.java
index fef22d75d86..0419bfbd5b6 100644
--- a/megamek/src/megamek/common/Infantry.java
+++ b/megamek/src/megamek/common/Infantry.java
@@ -1621,7 +1621,7 @@ public boolean isSquad() {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
if ((game != null)
&& game.getOptions().booleanOption(OptionsConstants.ADVANCED_TACOPS_INF_PAVE_BONUS)) {
return movementMode == EntityMovementMode.TRACKED || movementMode == EntityMovementMode.WHEELED
diff --git a/megamek/src/megamek/common/Mek.java b/megamek/src/megamek/common/Mek.java
index 2f70958e8e2..1d98c2ce031 100644
--- a/megamek/src/megamek/common/Mek.java
+++ b/megamek/src/megamek/common/Mek.java
@@ -1350,7 +1350,7 @@ && locationIsTorso(mounted.getLocation())) {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
// eligible if using Mek tracks
return movementMode == EntityMovementMode.TRACKED;
}
diff --git a/megamek/src/megamek/common/MoveStep.java b/megamek/src/megamek/common/MoveStep.java
index 937837f7b15..3dc3c237916 100644
--- a/megamek/src/megamek/common/MoveStep.java
+++ b/megamek/src/megamek/common/MoveStep.java
@@ -111,7 +111,7 @@ public class MoveStep implements Serializable {
private boolean prevStepOnPavement; // prev
private boolean hasJustStood;
private boolean thisStepBackwards;
- private boolean onlyPavement; // additive
+ private boolean onlyPavementOrRoad; // additive
private boolean isPavementStep;
private boolean isRunProhibited = false;
private boolean isStackingViolation = false;
@@ -542,7 +542,7 @@ private void compileMove(final Game game, final Entity entity,
setPavementStep(true);
} else {
setPavementStep(false);
- setOnlyPavement(false);
+ setOnlyPavementOrRoad(false);
}
setHasJustStood(false);
@@ -837,7 +837,7 @@ protected void compile(final Game game, final Entity entity, MoveStep prev, Cach
setPavementStep(true);
} else {
setPavementStep(false);
- setOnlyPavement(false);
+ setOnlyPavementOrRoad(false);
}
// Infantry can turn for free, except for field artillery
@@ -1235,7 +1235,7 @@ public void copy(final Game game, MoveStep prev) {
mpUsed = prev.mpUsed;
totalHeat = prev.totalHeat;
isPavementStep = prev.isPavementStep;
- onlyPavement = prev.onlyPavement;
+ onlyPavementOrRoad = prev.onlyPavementOrRoad;
wigeBonus = prev.wigeBonus;
nWigeDescent = prev.nWigeDescent;
thisStepBackwards = prev.thisStepBackwards;
@@ -1343,15 +1343,27 @@ public void setFromEntity(Entity entity, Game game) {
// check pavement & water
if (position != null) {
Hex curHex = game.getBoard().getHex(position);
- if (curHex.hasPavement()) {
- onlyPavement = true;
- isPavementStep = true;
+ if (curHex.hasPavementOrRoad()) {
+ if (curHex.hasPavement()) {
+ isPavementStep = true;
+ onlyPavementOrRoad = true;
+ }
+ else if (curHex.containsTerrain(Terrains.ROAD, Terrains.ROAD_LVL_DIRT)){
+ if(entity.getMovementMode().isHover()){
+ onlyPavementOrRoad = true;
+ }
+ }
+ else if (curHex.containsTerrain(Terrains.ROAD, Terrains.ROAD_LVL_GRAVEL)){
+ if(entity.getMovementMode().isHover() || entity.getMovementMode().isTracked()){
+ onlyPavementOrRoad=true;
+ }
+ }
// if we previously moved, and didn't get a pavement bonus, we
// shouldn't now get one, either (this can happen when skidding
// onto a pavement hex
- if (!entity.gotPavementBonus
+ if (!entity.gotPavementOrRoadBonus
&& (entity.delta_distance > 0)) {
- onlyPavement = false;
+ onlyPavementOrRoad = false;
}
}
// if entity already moved into water it can't run now
@@ -1688,8 +1700,8 @@ public int getMpUsed() {
return mpUsed;
}
- public boolean isOnlyPavement() {
- return onlyPavement;
+ public boolean isOnlyPavementOrRoad() {
+ return onlyPavementOrRoad;
}
public int getWiGEBonus() {
@@ -1823,8 +1835,8 @@ protected void setSelfDestructing(boolean b) {
isSelfDestructing = b;
}
- protected void setOnlyPavement(boolean b) {
- onlyPavement = b;
+ protected void setOnlyPavementOrRoad(boolean b) {
+ onlyPavementOrRoad = b;
}
protected void setWiGEBonus(int i) {
@@ -2297,10 +2309,10 @@ && isFirstStep()) {
int bonus = wigeBonus;
entity.wigeBonus = wigeBonus;
- if (entity.isEligibleForPavementBonus()
- && isOnlyPavement()) {
+ if (entity.isEligibleForPavementOrRoadBonus()
+ && isOnlyPavementOrRoad()) {
bonus++;
- entity.gotPavementBonus = true;
+ entity.gotPavementOrRoadBonus = true;
}
int tmpWalkMP = cachedEntityState.getWalkMP() + bonus;
diff --git a/megamek/src/megamek/common/QuadVee.java b/megamek/src/megamek/common/QuadVee.java
index 2a037881267..f27211a6df2 100644
--- a/megamek/src/megamek/common/QuadVee.java
+++ b/megamek/src/megamek/common/QuadVee.java
@@ -367,7 +367,7 @@ public void setConversionMode(int mode) {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
// Since pavement bonus only applies if driving on pavement the entire turn,
// there is no pavement bonus unless it spends the entire turn in vehicle mode.
return getConversionMode() == CONV_MODE_VEHICLE && !convertingNow;
diff --git a/megamek/src/megamek/common/Tank.java b/megamek/src/megamek/common/Tank.java
index 6aa3a0a4efd..198f75689ee 100644
--- a/megamek/src/megamek/common/Tank.java
+++ b/megamek/src/megamek/common/Tank.java
@@ -374,7 +374,7 @@ public int getWalkMP(MPCalculationSetting mpCalculationSetting) {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
return movementMode == EntityMovementMode.TRACKED || movementMode == EntityMovementMode.WHEELED
|| movementMode == EntityMovementMode.HOVER;
}
diff --git a/megamek/src/megamek/common/Terrains.java b/megamek/src/megamek/common/Terrains.java
index f8fc10ae0ec..4e96a9bc69f 100644
--- a/megamek/src/megamek/common/Terrains.java
+++ b/megamek/src/megamek/common/Terrains.java
@@ -42,7 +42,11 @@ public class Terrains implements Serializable {
// Terrain modifications
public static final int PAVEMENT = 12;
- public static final int ROAD = 13;
+ public static final int ROAD = 13; // 1: normal 2: alley 3: dirt 4: gravel
+
+ public static final int ROAD_LVL_DIRT = 3;
+ public static final int ROAD_LVL_GRAVEL =4;
+
public static final int SWAMP = 14; // 1: normal 2: just became quicksand 3:
// quicksand
public static final int MUD = 15;
diff --git a/megamek/src/megamek/server/totalwarfare/TWGameManager.java b/megamek/src/megamek/server/totalwarfare/TWGameManager.java
index 9cad65ee4da..744387b3964 100644
--- a/megamek/src/megamek/server/totalwarfare/TWGameManager.java
+++ b/megamek/src/megamek/server/totalwarfare/TWGameManager.java
@@ -16769,8 +16769,8 @@ private VectorEntity
gets a movement bonus on pavement
*/
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
return false;
}
@@ -6459,7 +6459,7 @@ public void newRound(int roundNumber) {
movedBackwards = false;
isPowerReverse = false;
wigeLiftoffHover = false;
- gotPavementBonus = false;
+ gotPavementOrRoadBonus = false;
wigeBonus = 0;
inReverse = false;
hitBySwarmsEntity.clear();
@@ -7677,7 +7677,7 @@ public PilotingRollData checkMovedTooFast(MoveStep step,
case MOVE_SPRINT:
case MOVE_VTOL_SPRINT:
maxSafeMP = getSprintMP(MPCalculationSetting.SAFE_MOVE) + wigeBonus;
- if (isEligibleForPavementBonus() && gotPavementBonus) {
+ if (isEligibleForPavementOrRoadBonus() && gotPavementOrRoadBonus) {
maxSafeMP++;
}
break;
@@ -7685,7 +7685,7 @@ public PilotingRollData checkMovedTooFast(MoveStep step,
// Max safe MP is based on whatever is the current maximum.
// http://bg.battletech.com/forums/index.php?topic=6681.msg154097#msg154097
maxSafeMP = getRunMP(MPCalculationSetting.SAFE_MOVE) + wigeBonus;
- if (isEligibleForPavementBonus() && gotPavementBonus) {
+ if (isEligibleForPavementOrRoadBonus() && gotPavementOrRoadBonus) {
maxSafeMP++;
}
break;
diff --git a/megamek/src/megamek/common/Hex.java b/megamek/src/megamek/common/Hex.java
index db5ad9ff80c..1d2a1b66b76 100644
--- a/megamek/src/megamek/common/Hex.java
+++ b/megamek/src/megamek/common/Hex.java
@@ -414,9 +414,22 @@ public boolean containsAllTerrainsOf(int... types) {
}
/**
- * @return True if there is pavement, a road or a bridge in the hex.
+ * @return True if there is pavement, a paved road or a bridge in the hex.
*/
public boolean hasPavement() {
+ if (containsAnyTerrainOf(Terrains.PAVEMENT, Terrains.BRIDGE)){
+ return true;
+ }
+ else if (containsTerrain(Terrains.ROAD)){
+ return !Arrays.asList(Terrains.ROAD_LVL_DIRT, Terrains.ROAD_LVL_GRAVEL).contains(terrainLevel(Terrains.ROAD)); //Return false if the road is dirt or gravel
+ }
+ return false;
+ }
+
+ /**
+ * @return True if there is pavement, a road or a bridge in the hex.
+ */
+ public boolean hasPavementOrRoad() {
return containsAnyTerrainOf(Terrains.PAVEMENT, Terrains.ROAD, Terrains.BRIDGE);
}
diff --git a/megamek/src/megamek/common/Infantry.java b/megamek/src/megamek/common/Infantry.java
index fef22d75d86..0419bfbd5b6 100644
--- a/megamek/src/megamek/common/Infantry.java
+++ b/megamek/src/megamek/common/Infantry.java
@@ -1621,7 +1621,7 @@ public boolean isSquad() {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
if ((game != null)
&& game.getOptions().booleanOption(OptionsConstants.ADVANCED_TACOPS_INF_PAVE_BONUS)) {
return movementMode == EntityMovementMode.TRACKED || movementMode == EntityMovementMode.WHEELED
diff --git a/megamek/src/megamek/common/Mek.java b/megamek/src/megamek/common/Mek.java
index 2f70958e8e2..1d98c2ce031 100644
--- a/megamek/src/megamek/common/Mek.java
+++ b/megamek/src/megamek/common/Mek.java
@@ -1350,7 +1350,7 @@ && locationIsTorso(mounted.getLocation())) {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
// eligible if using Mek tracks
return movementMode == EntityMovementMode.TRACKED;
}
diff --git a/megamek/src/megamek/common/MoveStep.java b/megamek/src/megamek/common/MoveStep.java
index 937837f7b15..db65b5ff9e1 100644
--- a/megamek/src/megamek/common/MoveStep.java
+++ b/megamek/src/megamek/common/MoveStep.java
@@ -111,7 +111,7 @@ public class MoveStep implements Serializable {
private boolean prevStepOnPavement; // prev
private boolean hasJustStood;
private boolean thisStepBackwards;
- private boolean onlyPavement; // additive
+ private boolean onlyPavementOrRoad; // additive
private boolean isPavementStep;
private boolean isRunProhibited = false;
private boolean isStackingViolation = false;
@@ -542,7 +542,7 @@ private void compileMove(final Game game, final Entity entity,
setPavementStep(true);
} else {
setPavementStep(false);
- setOnlyPavement(false);
+ setOnlyPavementOrRoad(false);
}
setHasJustStood(false);
@@ -837,7 +837,7 @@ protected void compile(final Game game, final Entity entity, MoveStep prev, Cach
setPavementStep(true);
} else {
setPavementStep(false);
- setOnlyPavement(false);
+ setOnlyPavementOrRoad(false);
}
// Infantry can turn for free, except for field artillery
@@ -1235,7 +1235,7 @@ public void copy(final Game game, MoveStep prev) {
mpUsed = prev.mpUsed;
totalHeat = prev.totalHeat;
isPavementStep = prev.isPavementStep;
- onlyPavement = prev.onlyPavement;
+ onlyPavementOrRoad = prev.onlyPavementOrRoad;
wigeBonus = prev.wigeBonus;
nWigeDescent = prev.nWigeDescent;
thisStepBackwards = prev.thisStepBackwards;
@@ -1343,15 +1343,27 @@ public void setFromEntity(Entity entity, Game game) {
// check pavement & water
if (position != null) {
Hex curHex = game.getBoard().getHex(position);
- if (curHex.hasPavement()) {
- onlyPavement = true;
- isPavementStep = true;
+ if (curHex.hasPavementOrRoad()) {
+ if (curHex.hasPavement()) {
+ isPavementStep = true;
+ onlyPavementOrRoad = true;
+ }
+ else if (curHex.containsTerrain(Terrains.ROAD, Terrains.ROAD_LVL_DIRT)){
+ if (entity.getMovementMode().isHover()){
+ onlyPavementOrRoad = true;
+ }
+ }
+ else if (curHex.containsTerrain(Terrains.ROAD, Terrains.ROAD_LVL_GRAVEL)){
+ if (entity.getMovementMode().isHover() || entity.getMovementMode().isTracked()){
+ onlyPavementOrRoad=true;
+ }
+ }
// if we previously moved, and didn't get a pavement bonus, we
// shouldn't now get one, either (this can happen when skidding
// onto a pavement hex
- if (!entity.gotPavementBonus
+ if (!entity.gotPavementOrRoadBonus
&& (entity.delta_distance > 0)) {
- onlyPavement = false;
+ onlyPavementOrRoad = false;
}
}
// if entity already moved into water it can't run now
@@ -1688,8 +1700,8 @@ public int getMpUsed() {
return mpUsed;
}
- public boolean isOnlyPavement() {
- return onlyPavement;
+ public boolean isOnlyPavementOrRoad() {
+ return onlyPavementOrRoad;
}
public int getWiGEBonus() {
@@ -1823,8 +1835,8 @@ protected void setSelfDestructing(boolean b) {
isSelfDestructing = b;
}
- protected void setOnlyPavement(boolean b) {
- onlyPavement = b;
+ protected void setOnlyPavementOrRoad(boolean b) {
+ onlyPavementOrRoad = b;
}
protected void setWiGEBonus(int i) {
@@ -2297,10 +2309,10 @@ && isFirstStep()) {
int bonus = wigeBonus;
entity.wigeBonus = wigeBonus;
- if (entity.isEligibleForPavementBonus()
- && isOnlyPavement()) {
+ if (entity.isEligibleForPavementOrRoadBonus()
+ && isOnlyPavementOrRoad()) {
bonus++;
- entity.gotPavementBonus = true;
+ entity.gotPavementOrRoadBonus = true;
}
int tmpWalkMP = cachedEntityState.getWalkMP() + bonus;
diff --git a/megamek/src/megamek/common/QuadVee.java b/megamek/src/megamek/common/QuadVee.java
index 2a037881267..f27211a6df2 100644
--- a/megamek/src/megamek/common/QuadVee.java
+++ b/megamek/src/megamek/common/QuadVee.java
@@ -367,7 +367,7 @@ public void setConversionMode(int mode) {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
// Since pavement bonus only applies if driving on pavement the entire turn,
// there is no pavement bonus unless it spends the entire turn in vehicle mode.
return getConversionMode() == CONV_MODE_VEHICLE && !convertingNow;
diff --git a/megamek/src/megamek/common/Tank.java b/megamek/src/megamek/common/Tank.java
index 6aa3a0a4efd..198f75689ee 100644
--- a/megamek/src/megamek/common/Tank.java
+++ b/megamek/src/megamek/common/Tank.java
@@ -374,7 +374,7 @@ public int getWalkMP(MPCalculationSetting mpCalculationSetting) {
}
@Override
- public boolean isEligibleForPavementBonus() {
+ public boolean isEligibleForPavementOrRoadBonus() {
return movementMode == EntityMovementMode.TRACKED || movementMode == EntityMovementMode.WHEELED
|| movementMode == EntityMovementMode.HOVER;
}
diff --git a/megamek/src/megamek/common/Terrains.java b/megamek/src/megamek/common/Terrains.java
index f8fc10ae0ec..13e6a705df4 100644
--- a/megamek/src/megamek/common/Terrains.java
+++ b/megamek/src/megamek/common/Terrains.java
@@ -42,7 +42,11 @@ public class Terrains implements Serializable {
// Terrain modifications
public static final int PAVEMENT = 12;
- public static final int ROAD = 13;
+ public static final int ROAD = 13; // 1: normal 2: alley 3: dirt 4: gravel
+
+ public static final int ROAD_LVL_DIRT = 3;
+ public static final int ROAD_LVL_GRAVEL = 4;
+
public static final int SWAMP = 14; // 1: normal 2: just became quicksand 3:
// quicksand
public static final int MUD = 15;
@@ -146,7 +150,7 @@ public class Terrains implements Serializable {
// This is for low atmosphere maps to indicate that an empty hex is to be drawn as sky, not grassland
public static final int SKY = 56;
-
+
public static final int DEPLOYMENT_ZONE = 57;
/**
diff --git a/megamek/src/megamek/server/totalwarfare/TWGameManager.java b/megamek/src/megamek/server/totalwarfare/TWGameManager.java
index 9cad65ee4da..744387b3964 100644
--- a/megamek/src/megamek/server/totalwarfare/TWGameManager.java
+++ b/megamek/src/megamek/server/totalwarfare/TWGameManager.java
@@ -16769,8 +16769,8 @@ private Vector$wHV+wgRb=Jlq(qTW!`n~^8@s!)g@uJt4NiAn$R`Qm zP}td}Hn=s#vv3D?NEQ99x^BM5tY4oD6c`BzBDpW_V}5nKI;<1{SJCX@#jUNL!A$9g z0xplR>`!-qPOW!=(1A3CJ5^+ea=2=12;}YwEv+Br{Ps$LqrJT*Aqfe6h3#Rdt5Ch# zGLVIt510hAl{Hl_0ZU3Fo@f~X)$x(lyfGH(HRG@<|C*CSFQL3V@GZb*vJz9YF&|&e z_05}^
LD Y$&Wg8IuUW7xoQ7M&JwN0;IT29&@)
zl`=7TQm9vF1bjNqNNqjdhgHbSM{I3**?^POH2r5j{Z3QKmJw%SOQUjT%P|=b$8&qa
z5@y)4H(-7Jhb5eeFDW5v0)(*keL`1`a;EJfhjPncQ}of16ZkgcweB2XM;f(%N#tzmZTrm^^!}}ubGvWLf|k@uTUBfwRhlK^9K+JR{H;_hD*^v37JpO_okwy
zU12TQxOG(XpnsKQme&e%k!c|WPl5e3cg5v>Ve=OBr!0bf=eC`0(TI*73B-B4NWtz?
z&&a_M3w2IeUA^nCa^^T$9Wjpv&!b0=U_MY$DuOfu%+sbOQ5kiP5)*ZUkBll|%=2ld;oLUfNisxP~Uh@Y#U-_74qiATfjogK83(>{8p
z#Ig!SGqbP%l?3`aI+$Ij8+{of9@hKuJnT>-1vYGry^DjnBu;~7Q(kt@gKKngadDlM
zAfyp93rk61^4WfEEjJ(^N7LW^0q2uOAy8Ic&eKcsh@aW>uw;4t^6|LDJKw45|7njX
ZBafrDO$-YU;H3ueR_>i_wX|vY{{V$Nz`pv$h<K*Pk#%)kALZrGj{fo_(4)2*#ILWfLr-RpC3v{G8(?N;W{sSC96G@~fByo(4Gp}%
zopVE2(rc`j*o`~M85kJ$XDf(;gAgt*5$CFmp{J+LY}6SF$m=W6v)wVWhNh<8?ry+1
z@UG
X`tk+`iBDT+A}gv!M@NIRpZ6KO-_6MY5lh!ZslZS?1-Oy~Xezvzbvm)B
zEZS1W##Cki+e~IA=`kk<3kw3uK5V&l+Neq`ZYS@Lp3UT%XR^+?v(fq#_14x9_xka1
zMA?f!niv$6&fKlTnxb0US>|@13*^bk$%Tv-d`3n_*^eLLA@D9PF2iGEJDFKolb|%D
zrM+TG{m9G9>uzh;j8d|CpM)JReBNWxGs@{ctRfQlNQ_M>0*uz*-tFZz9$&-Opz`S)
zTMC~1BBG*+85yWxVgK}kZT5trSdWaOjQ7C77XV0a(K%hWWm8g8E~mcDdh$Z89LyJA
zAHnw61*LNe_U~dP_BBJl8us_oT#RT2E8^D
z0l|A!RNzCUPTgjw!K&E({^TW|vGH04Dys0Mf}-LV0<;Jf+QbQ<7*Wz$ol$vkhb7%f
zouEUEM$AYItd2=g^F{FSlZC*^Q7GPwMbmcnC?$m;uCue#$4Py9_smR29aFPrF_ZMb
z
QL}Q!cD)RMfg%?&quZHyhzJ8Q#AdSFjHC?%
z6lv9?L-A#ff`bF=+0KM#Itf|cKg8Y5tU$$4gQC`tJn{O_mh-afY@^+Qc&d}j%k7?z
zXymw2QCK$-D78f_C0Q+21Qg<@dQMJ<@7@z~*xJ}ED`$yA{KOys6f}o)HCgT5(Jt(a
z<-FeO>MY@e-Aifd8nWGz