From fcf10ee0a9a94f45dff62195bfa99c508aaad6d7 Mon Sep 17 00:00:00 2001 From: Arnaud Roques Date: Sun, 25 Apr 2021 22:59:17 +0200 Subject: [PATCH] Import version 1.2021.5 --- build.xml | 2 +- pom.xml | 17 +- skin/plantuml.skin | 4 + .../com/at/gadermaier/argon2/Argon2.java | 271 ++++ .../at/gadermaier/argon2/Argon2Factory.java | 12 + .../com/at/gadermaier/argon2/Constants.java | 102 ++ .../com/at/gadermaier/argon2/Util.java | 67 + .../com/at/gadermaier/argon2/Validation.java | 63 + .../argon2/algorithm/FillBlock.java | 55 + .../argon2/algorithm/FillMemory.java | 80 + .../argon2/algorithm/FillSegment.java | 170 +++ .../gadermaier/argon2/algorithm/Finalize.java | 34 + .../argon2/algorithm/Functions.java | 172 +++ .../argon2/algorithm/Initialize.java | 75 + .../at/gadermaier/argon2/blake2/Blake2b.java | 1288 +++++++++++++++++ .../argon2/exception/Argon2Exception.java | 13 + .../Argon2InvalidParameterException.java | 12 + .../gadermaier/argon2/model/Argon2Type.java | 10 + .../com/at/gadermaier/argon2/model/Block.java | 81 ++ .../at/gadermaier/argon2/model/Instance.java | 88 ++ .../at/gadermaier/argon2/model/Position.java | 22 + src/net/sourceforge/plantuml/dedication/0.png | Bin 5643 -> 0 bytes src/net/sourceforge/plantuml/dedication/1.png | Bin 34884 -> 0 bytes src/net/sourceforge/plantuml/dedication/2.png | Bin 24111 -> 0 bytes ...deb822194ff63e3bdc3cf707a01f17770d5a6a.png | Bin 0 -> 34884 bytes ...071d05751aa6a0e01da78662ceafd0161f3f5e.png | Bin 0 -> 24111 bytes .../dedication/DecoderInputStream.java | 104 -- .../plantuml/dedication/Dedication.java | 57 +- .../dedication/DedicationCrypted.java | 119 ++ ...InputStream.java => DedicationSimple.java} | 55 +- .../plantuml/dedication/Dedications.java | 89 +- .../plantuml/dedication/Noise.java | 74 + .../dedication/PSystemDedication.java | 16 +- .../dedication/PSystemDedicationFactory.java | 6 +- .../plantuml/dedication/arkban.png | Bin 3591 -> 3591 bytes .../sourceforge/plantuml/dedication/ben.png | Bin 33345 -> 33345 bytes .../plantuml/dedication/boundaries.png | Bin 51300 -> 51300 bytes .../plantuml/dedication/dedication.png | Bin 15903 -> 15903 bytes .../plantuml/dedication/dr_chet.png | Bin 23598 -> 23598 bytes .../plantuml/dedication/linux_china.png | Bin 4104 -> 4104 bytes .../plantuml/project/GanttDiagram.java | 17 +- .../plantuml/project/draw/TimeHeader.java | 23 +- .../project/draw/TimeHeaderCalendar.java | 8 +- .../project/draw/TimeHeaderDaily.java | 10 +- .../project/draw/TimeHeaderMonthly.java | 6 +- .../project/draw/TimeHeaderQuarterly.java | 14 +- .../project/draw/TimeHeaderSimple.java | 6 +- .../project/draw/TimeHeaderWeekly.java | 8 +- .../project/draw/TimeHeaderYearly.java | 7 +- src/net/sourceforge/plantuml/style/SName.java | 1 + .../EntityImageLollipopInterfaceEye1.java | 2 +- .../plantuml/svek/image/EntityImageNote.java | 2 +- .../plantuml/svek/image/EntityImageState.java | 67 +- .../svek/image/EntityImageState2.java | 11 +- .../svek/image/EntityImageStateCommon.java | 115 ++ .../EntityImageStateEmptyDescription.java | 57 +- .../plantuml/version/PSystemVersion.java | 8 +- .../sourceforge/plantuml/version/Version.java | 6 +- svg/default.css | 3 - svg/default.js | 110 -- 60 files changed, 3099 insertions(+), 540 deletions(-) create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/Argon2.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/Argon2Factory.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/Constants.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/Util.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/Validation.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillBlock.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillMemory.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillSegment.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Finalize.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Functions.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Initialize.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/blake2/Blake2b.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2Exception.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2InvalidParameterException.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/model/Argon2Type.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/model/Block.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/model/Instance.java create mode 100644 src/ext/plantuml/com/at/gadermaier/argon2/model/Position.java delete mode 100644 src/net/sourceforge/plantuml/dedication/0.png delete mode 100644 src/net/sourceforge/plantuml/dedication/1.png delete mode 100644 src/net/sourceforge/plantuml/dedication/2.png create mode 100644 src/net/sourceforge/plantuml/dedication/514816d583044efbd336882227deb822194ff63e3bdc3cf707a01f17770d5a6a.png create mode 100644 src/net/sourceforge/plantuml/dedication/835ff5d643b58cd35a20db6480071d05751aa6a0e01da78662ceafd0161f3f5e.png delete mode 100644 src/net/sourceforge/plantuml/dedication/DecoderInputStream.java create mode 100644 src/net/sourceforge/plantuml/dedication/DedicationCrypted.java rename src/net/sourceforge/plantuml/dedication/{NoisyInputStream.java => DedicationSimple.java} (58%) create mode 100644 src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java delete mode 100644 svg/default.css delete mode 100644 svg/default.js diff --git a/build.xml b/build.xml index c58311eb7..634b27de3 100644 --- a/build.xml +++ b/build.xml @@ -91,7 +91,7 @@ - + diff --git a/pom.xml b/pom.xml index 298d521d5..a1b463032 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ net.sourceforge.plantuml plantuml - 1.2021.5-SNAPSHOT + 1.2021.6-SNAPSHOT jar PlantUML @@ -94,21 +94,6 @@ 1.0.7 test - - org.eclipse.elk - org.eclipse.elk.core - 0.7.1 - - - org.eclipse.elk - org.eclipse.elk.alg.layered - 0.7.1 - - - org.eclipse.elk - org.eclipse.elk.alg.mrtree - 0.7.1 - diff --git a/skin/plantuml.skin b/skin/plantuml.skin index ae4a21a2b..55b28739f 100644 --- a/skin/plantuml.skin +++ b/skin/plantuml.skin @@ -290,6 +290,10 @@ ganttDiagram { timeline { BackgroundColor transparent } + closed { + BackGroundColor #E0E8E8 + FontColor #909898 + } task { RoundCorner 0 Margin 2 2 2 2 diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/Argon2.java b/src/ext/plantuml/com/at/gadermaier/argon2/Argon2.java new file mode 100644 index 000000000..b4110ed28 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/Argon2.java @@ -0,0 +1,271 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Defaults.LANES_DEF; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Defaults.LOG_M_COST_DEF; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Defaults.OUTLEN_DEF; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Defaults.TYPE_DEF; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Defaults.T_COST_DEF; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Defaults.VERSION_DEF; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.util.Arrays; + +import ext.plantuml.com.at.gadermaier.argon2.algorithm.FillMemory; +import ext.plantuml.com.at.gadermaier.argon2.algorithm.Finalize; +import ext.plantuml.com.at.gadermaier.argon2.algorithm.Initialize; +import ext.plantuml.com.at.gadermaier.argon2.model.Argon2Type; +import ext.plantuml.com.at.gadermaier.argon2.model.Instance; + +public class Argon2 { + + private byte[] output; + private int outputLength; // -l N + private double duration; + + private byte[] password; + private byte[] salt; + private byte[] secret; + private byte[] additional; + + private int iterations; // -t N + private int memory; // -m N + private int lanes; // -p N + + private int version; // -v (10/13) + private Argon2Type type; + + private boolean clearMemory = true; + private Charset charset = Charset.forName("UTF-8"); + + private boolean encodedOnly = false; + private boolean rawOnly = false; + + Argon2() { + this.lanes = LANES_DEF; + this.outputLength = OUTLEN_DEF; + this.memory = 1 << LOG_M_COST_DEF; + this.iterations = T_COST_DEF; + this.version = VERSION_DEF; + this.type = TYPE_DEF; + } + + private static byte[] toByteArray(char[] chars, Charset charset) { + assert chars != null; + + CharBuffer charBuffer = CharBuffer.wrap(chars); + ByteBuffer byteBuffer = charset.encode(charBuffer); + byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit()); + Arrays.fill(byteBuffer.array(), (byte) 0); + return bytes; + } + + public void hashNow() { + try { + Validation.validateInput(this); + + long start = System.nanoTime(); + + Instance instance = new Instance(this); + + Initialize.initialize(instance, this); + FillMemory.fillMemoryBlocks(instance); + Finalize.finalize(instance, this); + + duration = (System.nanoTime() - start) / 1000000000.0; + } finally { + clear(); + } + } + + public void clear() { + if (password != null) + Arrays.fill(password, 0, password.length - 1, (byte) 0); + + if (salt != null) + Arrays.fill(salt, 0, salt.length - 1, (byte) 0); + + if (secret != null) + Arrays.fill(secret, 0, secret.length - 1, (byte) 0); + + if (additional != null) + Arrays.fill(additional, 0, additional.length - 1, (byte) 0); + } + + void printSummary() { + if (encodedOnly) + System.out.println(getEncoded()); + else if (rawOnly) + System.out.println(getOutputString()); + else { + System.out.println("Type:\t\t" + type); + System.out.println("Iterations:\t" + iterations); + System.out.println("Memory:\t\t" + memory + " KiB"); + System.out.println("Parallelism:\t" + lanes); + System.out.println("Hash:\t\t" + getOutputString()); + System.out.println("Encoded:\t " + getEncoded()); + System.out.println(duration + " seconds"); + } + } + + public Argon2 setMemoryInKiB(int memory) { + this.memory = memory; + return this; + } + + public Argon2 setParallelism(int parallelism) { + this.lanes = parallelism; + return this; + } + + public Argon2 setPassword(char[] password) { + return setPassword(toByteArray(password, charset)); + } + + public Argon2 setSalt(String salt) { + return setSalt(salt.getBytes(charset)); + } + + public byte[] getOutput() { + return output; + } + + public void setOutput(byte[] finalResult) { + this.output = finalResult; + } + + public String getOutputString() { + return Util.bytesToHexString(output); + } + + public int getOutputLength() { + return outputLength; + } + + public Argon2 setOutputLength(int outputLength) { + this.outputLength = outputLength; + return this; + } + + public byte[] getPassword() { + return password; + } + + public Argon2 setPassword(byte[] password) { + this.password = password; + return this; + } + + public int getPasswordLength() { + return password.length; + } + + public byte[] getSalt() { + return salt; + } + + public Argon2 setSalt(byte[] salt) { + this.salt = salt; + return this; + } + + public int getSaltLength() { + return salt.length; + } + + public byte[] getSecret() { + return secret; + } + + public Argon2 setSecret(byte[] secret) { + this.secret = secret; + return this; + } + + public int getSecretLength() { + return secret != null ? secret.length : 0; + } + + public byte[] getAdditional() { + return additional; + } + + public Argon2 setAdditional(byte[] additional) { + this.additional = additional; + return this; + } + + public int getAdditionalLength() { + return additional != null ? additional.length : 0; + } + + public int getIterations() { + return iterations; + } + + public Argon2 setIterations(int iterations) { + this.iterations = iterations; + return this; + } + + public int getMemory() { + return memory; + } + + public Argon2 setMemory(int memory) { + this.memory = 1 << memory; + return this; + } + + public int getLanes() { + return lanes; + } + + public int getVersion() { + return version; + } + + public Argon2 setVersion(int version) { + this.version = version; + return this; + } + + public Argon2Type getType() { + return type; + } + + public Argon2 setType(Argon2Type type) { + this.type = type; + return this; + } + + public boolean isClearMemory() { + return clearMemory; + } + + public void setClearMemory(boolean clearMemory) { + this.clearMemory = clearMemory; + } + + public Charset getCharset() { + return charset; + } + + public void setEncodedOnly(boolean encodedOnly) { + this.encodedOnly = encodedOnly; + } + + public void setRawOnly(boolean rawOnly) { + this.rawOnly = rawOnly; + } + + public String getEncoded() { + return ""; // TODO + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/Argon2Factory.java b/src/ext/plantuml/com/at/gadermaier/argon2/Argon2Factory.java new file mode 100644 index 000000000..35ee5aa84 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/Argon2Factory.java @@ -0,0 +1,12 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2; + +public class Argon2Factory { + public static Argon2 create(){ + return new Argon2(); + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/Constants.java b/src/ext/plantuml/com/at/gadermaier/argon2/Constants.java new file mode 100644 index 000000000..55feec121 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/Constants.java @@ -0,0 +1,102 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2; + +import ext.plantuml.com.at.gadermaier.argon2.model.Argon2Type; + +public class Constants { + + /* Memory block size in bytes */ + public static final int ARGON2_BLOCK_SIZE = 1024; + public static final int ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8; + /* Number of pseudo-random values generated by one call to Blake in Argon2i + to + generate reference block positions + */ + public static final int ARGON2_ADDRESSES_IN_BLOCK = 128; + /* Pre-hashing digest length and its extension*/ + public static final int ARGON2_PREHASH_DIGEST_LENGTH = 64; + public static final int ARGON2_PREHASH_SEED_LENGTH = 72; + /* Number of synchronization points between lanes per pass */ + public static final int ARGON2_SYNC_POINTS = 4; + /* Flags to determine which fields are securely wiped (default = no wipe). */ + public static final int ARGON2_DEFAULT_FLAGS = 0; + public static final int ARGON2_VERSION_10 = 0x10; + public static final int ARGON2_VERSION_13 = 0x13; + + public static class Defaults { + + public static final int OUTLEN_DEF = 32; + public static final int T_COST_DEF = 3; + public static final int LOG_M_COST_DEF = 12; + public static final int LANES_DEF = 1; + public static final Argon2Type TYPE_DEF = Argon2Type.Argon2i; + public static final int VERSION_DEF = ARGON2_VERSION_13; + public static final int ARGON2_VERSION_NUMBER = ARGON2_VERSION_13; + public static final boolean ENCODED_ONLY = false; + public static final boolean RAW_ONLY = false; + } + //public static int ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0) + //public static int ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1) + + /* + * Argon2 input parameter restrictions + */ + public static class Constraints { + + public static final int MAX_PASSWORD_LEN = 128; + + /* Minimum and maximum number of lanes (degree of parallelism) */ + public static final int MIN_PARALLELISM = 1; + public static final int MAX_PARALLELISM = 16777216; + + /* Minimum and maximum digest size in bytes */ + public static final int MIN_OUTLEN = 4; + public static final int MAX_OUTLEN = Integer.MAX_VALUE; + + /* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */ + public static final int MIN_MEMORY = (2 * ARGON2_SYNC_POINTS); /* 2 blocks per slice */ + + /* Minimum and maximum number of passes */ + public static final int MIN_ITERATIONS = 1; + public static final int MAX_ITERATIONS = Integer.MAX_VALUE; + + /* Minimum and maximum password length in bytes */ + public static final int MIN_PWD_LENGTH = 0; + public static final int MAX_PWD_LENGTH = Integer.MAX_VALUE; + + /* Minimum and maximum salt length in bytes */ + public static final int MIN_SALT_LENGTH = 0; + public static final int MAX_SALT_LENGTH = Integer.MAX_VALUE; + + /* Minimum and maximum key length in bytes */ + public static final int MAX_SECRET_LENGTH = Integer.MAX_VALUE; + + /* Minimum and maximum associated model length in bytes */ + public static final int MAX_AD_LENGTH = Integer.MAX_VALUE; + } + + public static class Messages { + public static final String P_MIN_MSG = "degree of parallelism cannot be smaller than one"; + public static final String P_MAX_MSG = "parallelism cannot be greater than 16777216"; + + public static final String M_MIN_MSG = "memory too small"; + + public static final String T_MIN_MSG = "number of iterations cannot be less than one"; + public static final String T_MAX_MSG = "number of iterations too high"; + + public static final String PWD_MIN_MSG = "password too short"; + public static final String PWD_MAX_MSG = "password too long"; + + public static final String SALT_MIN_MSG = "salt too short"; + public static final String SALT_MAX_MSG = "salt too long"; + + public static final String SECRET_MAX_MSG = "secret too long"; + public static final String ADDITIONAL_MAX_MSG = "additional data too long"; + + } + +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/Util.java b/src/ext/plantuml/com/at/gadermaier/argon2/Util.java new file mode 100644 index 000000000..257c0338c --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/Util.java @@ -0,0 +1,67 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2; + +public class Util { + + public static String bytesToHexString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b & 0xff)); + } + return sb.toString(); + } + + public static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i+1), 16)); + } + return data; + } + + public static long littleEndianBytesToLong(byte[] b) { + long result = 0; + for (int i = 7; i >= 0; i--) { + result <<= 8; + result |= (b[i] & 0xFF); + } + return result; + } + + public static byte[] intToLittleEndianBytes(int a) { + byte[] result = new byte[4]; + result[0] = (byte) (a & 0xFF); + result[1] = (byte) ((a >> 8) & 0xFF); + result[2] = (byte) ((a >> 16) & 0xFF); + result[3] = (byte) ((a >> 24) & 0xFF); + return result; + } + + public static byte[] longToLittleEndianBytes(long a) { + byte[] result = new byte[8]; + result[0] = (byte) (a & 0xFF); + result[1] = (byte) ((a >> 8) & 0xFF); + result[2] = (byte) ((a >> 16) & 0xFF); + result[3] = (byte) ((a >> 24) & 0xFF); + result[4] = (byte) ((a >> 32) & 0xFF); + result[5] = (byte) ((a >> 40) & 0xFF); + result[6] = (byte) ((a >> 48) & 0xFF); + result[7] = (byte) ((a >> 56) & 0xFF); + return result; + } + + public static long intToLong(int x){ + byte[] intBytes = intToLittleEndianBytes(x); + byte[] bytes = new byte[8]; + System.arraycopy(intBytes, 0, bytes, 0, 4); + return littleEndianBytesToLong(bytes); + } + +} + diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/Validation.java b/src/ext/plantuml/com/at/gadermaier/argon2/Validation.java new file mode 100644 index 000000000..199bf2415 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/Validation.java @@ -0,0 +1,63 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MAX_AD_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MAX_ITERATIONS; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MAX_PARALLELISM; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MAX_PWD_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MAX_SALT_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MAX_SECRET_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MIN_ITERATIONS; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MIN_PARALLELISM; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MIN_PWD_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Constraints.MIN_SALT_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.ADDITIONAL_MAX_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.M_MIN_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.PWD_MAX_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.PWD_MIN_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.P_MAX_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.P_MIN_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.SALT_MAX_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.SALT_MIN_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.SECRET_MAX_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.T_MAX_MSG; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.Messages.T_MIN_MSG; + +import ext.plantuml.com.at.gadermaier.argon2.exception.Argon2InvalidParameterException; + +class Validation { + + static void validateInput(Argon2 argon2){ + String message = null; + + if (argon2.getLanes() < MIN_PARALLELISM) + message = P_MIN_MSG; + else if (argon2.getLanes() > MAX_PARALLELISM) + message = P_MAX_MSG; + else if(argon2.getMemory() < 2 * argon2.getLanes()) + message = M_MIN_MSG; + else if(argon2.getIterations() < MIN_ITERATIONS) + message = T_MIN_MSG; + else if(argon2.getIterations() > MAX_ITERATIONS) + message = T_MAX_MSG; + else if(argon2.getPasswordLength() < MIN_PWD_LENGTH) + message = PWD_MIN_MSG; + else if(argon2.getPasswordLength() > MAX_PWD_LENGTH) + message = PWD_MAX_MSG; + else if(argon2.getSaltLength() < MIN_SALT_LENGTH) + message = SALT_MIN_MSG; + else if(argon2.getSaltLength() > MAX_SALT_LENGTH) + message = SALT_MAX_MSG; + else if(argon2.getSecretLength() > MAX_SECRET_LENGTH) + message = SECRET_MAX_MSG; + else if(argon2.getAdditionalLength() > MAX_AD_LENGTH) + message = ADDITIONAL_MAX_MSG; + + if(message != null) + throw new Argon2InvalidParameterException(message); + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillBlock.java b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillBlock.java new file mode 100644 index 000000000..a3024a9f0 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillBlock.java @@ -0,0 +1,55 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.algorithm; + +import ext.plantuml.com.at.gadermaier.argon2.model.Block; + +class FillBlock { + + static void fillBlock(Block X, Block Y, Block currentBlock, boolean withXor) { + + Block R = new Block(); + Block Z = new Block(); + + R.xor(X, Y); + Z.copyBlock(R); + + /* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then + (16,17,..31)... finally (112,113,...127) */ + for (int i = 0; i < 8; i++) { + + Functions.roundFunction(Z, + 16 * i, 16 * i + 1, 16 * i + 2, + 16 * i + 3, 16 * i + 4, 16 * i + 5, + 16 * i + 6, 16 * i + 7, 16 * i + 8, + 16 * i + 9, 16 * i + 10, 16 * i + 11, + 16 * i + 12, 16 * i + 13, 16 * i + 14, + 16 * i + 15 + ); + } + + /* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then + (2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */ + for (int i = 0; i < 8; i++) { + + Functions.roundFunction(Z, + 2 * i, 2 * i + 1, 2 * i + 16, + 2 * i + 17, 2 * i + 32, 2 * i + 33, + 2 * i + 48, 2 * i + 49, 2 * i + 64, + 2 * i + 65, 2 * i + 80, 2 * i + 81, + 2 * i + 96, 2 * i + 97, 2 * i + 112, + 2 * i + 113 + ); + + } + + if (withXor) { + currentBlock.xor(R, Z, currentBlock); + } else { + currentBlock.xor(R, Z); + } + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillMemory.java b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillMemory.java new file mode 100644 index 000000000..21f92095c --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillMemory.java @@ -0,0 +1,80 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.algorithm; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_SYNC_POINTS; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import ext.plantuml.com.at.gadermaier.argon2.model.Instance; +import ext.plantuml.com.at.gadermaier.argon2.model.Position; + +public class FillMemory { + + public static void fillMemoryBlocks(Instance instance) { + if (instance.getLanes() == 1) { + fillMemoryBlockSingleThreaded(instance); + } else { + fillMemoryBlockMultiThreaded(instance); + } + } + + private static void fillMemoryBlockSingleThreaded(Instance instance) { + for (int i = 0; i < instance.getIterations(); i++) { + for (int j = 0; j < ARGON2_SYNC_POINTS; j++) { + Position position = new Position(i, 0, j, 0); + FillSegment.fillSegment(instance, position); + } + } + } + + private static void fillMemoryBlockMultiThreaded(final Instance instance) { + + ExecutorService service = Executors.newFixedThreadPool(instance.getLanes()); + List> futures = new ArrayList>(); + + for (int i = 0; i < instance.getIterations(); i++) { + for (int j = 0; j < ARGON2_SYNC_POINTS; j++) { + for (int k = 0; k < instance.getLanes(); k++) { + + final Position position = new Position(i, k, j, 0); + + Future future = service.submit(new Runnable() { + @Override + public void run() { + FillSegment.fillSegment(instance, position); + } + }); + + futures.add(future); + } + + joinThreads(instance, futures); + } + } + + service.shutdownNow(); + } + + private static void joinThreads(Instance instance, List> futures) { + try { + for (Future f : futures) { + f.get(); + } + } catch (InterruptedException e) { + instance.clear(); + throw new RuntimeException(e); + } catch (ExecutionException e) { + instance.clear(); + throw new RuntimeException(e); + } + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillSegment.java b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillSegment.java new file mode 100644 index 000000000..c11485526 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillSegment.java @@ -0,0 +1,170 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.algorithm; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_ADDRESSES_IN_BLOCK; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_VERSION_10; + +import ext.plantuml.com.at.gadermaier.argon2.Constants; +import ext.plantuml.com.at.gadermaier.argon2.Util; +import ext.plantuml.com.at.gadermaier.argon2.model.Argon2Type; +import ext.plantuml.com.at.gadermaier.argon2.model.Block; +import ext.plantuml.com.at.gadermaier.argon2.model.Instance; +import ext.plantuml.com.at.gadermaier.argon2.model.Position; + + +class FillSegment { + + static void fillSegment(Instance instance, Position position) { + + Block addressBlock = null, inputBlock = null, zeroBlock = null; + + boolean dataIndependentAddressing = isDataIndependentAddressing(instance, position); + int startingIndex = getStartingIndex(position); + int currentOffset = position.lane * instance.getLaneLength() + position.slice * instance.getSegmentLength() + startingIndex; + int prevOffset = getPrevOffset(instance, currentOffset); + + if (dataIndependentAddressing) { + addressBlock = new Block(); + zeroBlock = new Block(); + inputBlock = new Block(); + + initAddressBlocks(instance, position, zeroBlock, inputBlock, addressBlock); + } + + for (position.index = startingIndex; position.index < instance.getSegmentLength(); position.index++, currentOffset++, prevOffset++) { + prevOffset = rotatePrevOffset(instance, currentOffset, prevOffset); + + long pseudoRandom = getPseudoRandom(instance, position, addressBlock, inputBlock, zeroBlock, prevOffset, dataIndependentAddressing); + int refLane = getRefLane(instance, position, pseudoRandom); + int refColumn = getRefColumn(instance, position, pseudoRandom, refLane == position.lane); + + /* 2 Creating a new block */ + Block prevBlock = instance.memory[prevOffset]; + Block refBlock = instance.memory[((instance.getLaneLength()) * refLane + refColumn)]; + Block currentBlock = instance.memory[currentOffset]; + + boolean withXor = isWithXor(instance, position); + FillBlock.fillBlock(prevBlock, refBlock, currentBlock, withXor); + } + } + + private static boolean isDataIndependentAddressing(Instance instance, Position position) { + return (instance.getType() == Argon2Type.Argon2i) || + (instance.getType() == Argon2Type.Argon2id + && (position.pass == 0) + && (position.slice < Constants.ARGON2_SYNC_POINTS / 2) + ); + } + + private static void initAddressBlocks(Instance instance, Position position, Block zeroBlock, Block inputBlock, Block addressBlock) { + inputBlock.v[0] = Util.intToLong(position.pass); + inputBlock.v[1] = Util.intToLong(position.lane); + inputBlock.v[2] = Util.intToLong(position.slice); + inputBlock.v[3] = Util.intToLong(instance.memory.length); + inputBlock.v[4] = Util.intToLong(instance.getIterations()); + inputBlock.v[5] = Util.intToLong(instance.getType().ordinal()); + + if ((position.pass == 0) && (position.slice == 0)) { + /* Don't forget to generate the first block of addresses: */ + nextAddresses(zeroBlock, inputBlock, addressBlock); + } + } + + private static boolean isWithXor(Instance instance, Position position) { + return !(position.pass == 0 || instance.getVersion() == ARGON2_VERSION_10); + } + + private static int getPrevOffset(Instance instance, int currentOffset) { + if (currentOffset % instance.getLaneLength() == 0) { + /* Last block in this lane */ + return currentOffset + instance.getLaneLength() - 1; + } else { + /* Previous block */ + return currentOffset - 1; + } + } + + private static int rotatePrevOffset(Instance instance, int currentOffset, int prevOffset) { + if (currentOffset % instance.getLaneLength() == 1) { + prevOffset = currentOffset - 1; + } + return prevOffset; + } + + private static int getStartingIndex(Position position) { + if ((position.pass == 0) && (position.slice == 0)) { + return 2; /* we have already generated the first two blocks */ + } else { + return 0; + } + } + + private static void nextAddresses(Block zeroBlock, Block inputBlock, Block addressBlock) { + inputBlock.v[6]++; + FillBlock.fillBlock(zeroBlock, inputBlock, addressBlock, false); + FillBlock.fillBlock(zeroBlock, addressBlock, addressBlock, false); + } + + /* 1.2 Computing the index of the reference block */ + /* 1.2.1 Taking pseudo-random value from the previous block */ + private static long getPseudoRandom(Instance instance, Position position, Block addressBlock, Block inputBlock, Block zeroBlock, int prevOffset, boolean dataIndependentAddressing) { + if (dataIndependentAddressing) { + if (position.index % ARGON2_ADDRESSES_IN_BLOCK == 0) { + nextAddresses(zeroBlock, inputBlock, addressBlock); + } + return addressBlock.v[position.index % ARGON2_ADDRESSES_IN_BLOCK]; + } else { + return instance.memory[prevOffset].v[0]; + } + } + + private static int getRefLane(Instance instance, Position position, long pseudoRandom) { + int refLane = (int) (((pseudoRandom >>> 32)) % instance.getLanes()); + + if ((position.pass == 0) && (position.slice == 0)) { + /* Can not reference other lanes yet */ + refLane = position.lane; + } + return refLane; + } + + private static int getRefColumn(Instance instance, Position position, long pseudoRandom, + boolean sameLane) { + + int referenceAreaSize; + int startPosition; + + if (position.pass == 0) { + startPosition = 0; + + if (sameLane) { + /* The same lane => add current segment */ + referenceAreaSize = position.slice * instance.getSegmentLength() + position.index - 1; + } else { + /* pass == 0 && !sameLane => position.slice > 0*/ + referenceAreaSize = position.slice * instance.getSegmentLength() + ((position.index == 0) ? (-1) : 0); + } + + } else { + startPosition = ((position.slice + 1) * instance.getSegmentLength()) % instance.getLaneLength(); + + if (sameLane) { + referenceAreaSize = instance.getLaneLength() - instance.getSegmentLength() + position.index - 1; + } else { + referenceAreaSize = instance.getLaneLength() - instance.getSegmentLength() + ((position.index == 0) ? (-1) : 0); + } + } + + long relativePosition = pseudoRandom & 0xFFFFFFFFL; +// long relativePosition = pseudoRandom << 32 >>> 32; + relativePosition = (relativePosition * relativePosition) >>> 32; + relativePosition = referenceAreaSize - 1 - (referenceAreaSize * relativePosition >>> 32); + + return (int) (startPosition + relativePosition) % instance.getLaneLength(); + } + +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Finalize.java b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Finalize.java new file mode 100644 index 000000000..af8e6b8a7 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Finalize.java @@ -0,0 +1,34 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.algorithm; + +import ext.plantuml.com.at.gadermaier.argon2.Argon2; +import ext.plantuml.com.at.gadermaier.argon2.model.Block; +import ext.plantuml.com.at.gadermaier.argon2.model.Instance; + +public class Finalize { + + public static void finalize(Instance instance, Argon2 argon2) { + + Block finalBlock = instance.memory[instance.getLaneLength() - 1]; + + /* XOR the last blocks */ + for (int i = 1; i < instance.getLanes(); i++) { + int lastBlockInLane = i * instance.getLaneLength() + (instance.getLaneLength() - 1); + finalBlock.xorWith(instance.memory[lastBlockInLane]); + } + + byte[] finalBlockBytes = finalBlock.toBytes(); + byte[] finalResult = Functions.blake2bLong(finalBlockBytes, argon2.getOutputLength()); + + argon2.setOutput(finalResult); + + if (argon2.isClearMemory()) { + instance.clear(); + argon2.clear(); + } + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Functions.java b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Functions.java new file mode 100644 index 000000000..5b407982a --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Functions.java @@ -0,0 +1,172 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.algorithm; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_BLOCK_SIZE; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_PREHASH_DIGEST_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_PREHASH_SEED_LENGTH; + +import ext.plantuml.com.at.gadermaier.argon2.Util; +import ext.plantuml.com.at.gadermaier.argon2.blake2.Blake2b; +import ext.plantuml.com.at.gadermaier.argon2.model.Block; + +class Functions { + + + /** + * H0 = H64(p, τ, m, t, v, y, |P|, P, |S|, S, |L|, K, |X|, X) + * -> 64 byte (ARGON2_PREHASH_DIGEST_LENGTH) + */ + static byte[] initialHash(byte[] lanes, byte[] outputLength, + byte[] memory, byte[] iterations, + byte[] version, byte[] type, + byte[] passwordLength, byte[] password, + byte[] saltLength, byte[] salt, + byte[] secretLength, byte[] secret, + byte[] additionalLength, byte[] additional) { + + + Blake2b.Param params = new Blake2b.Param() + .setDigestLength(ARGON2_PREHASH_DIGEST_LENGTH); + + final Blake2b blake2b = Blake2b.Digest.newInstance(params); + + blake2b.update(lanes); + blake2b.update(outputLength); + blake2b.update(memory); + blake2b.update(iterations); + blake2b.update(version); + blake2b.update(type); + + blake2b.update(passwordLength); + if (password != null) { + blake2b.update(password); + } + + blake2b.update(saltLength); + if (salt != null) { + blake2b.update(salt); + } + + blake2b.update(secretLength); + if (secret != null) { + blake2b.update(secret); + } + + blake2b.update(additionalLength); + if (additional != null) { + blake2b.update(additional); + } + + byte[] blake2hash = blake2b.digest(); + assert (blake2hash.length == 64); + + return blake2hash; + } + + + /** + * H' - blake2bLong - variable length hash function + */ + static byte[] blake2bLong(byte[] input, int outputLength) { + + assert (input.length == ARGON2_PREHASH_SEED_LENGTH || input.length == ARGON2_BLOCK_SIZE); + + byte[] result = new byte[outputLength]; + byte[] outlenBytes = Util.intToLittleEndianBytes(outputLength); + + int blake2bLength = 64; + + if (outputLength <= blake2bLength) { + result = blake2b(input, outlenBytes, outputLength); + } else { + byte[] outBuffer; + + /* V1 */ + outBuffer = blake2b(input, outlenBytes, blake2bLength); + System.arraycopy(outBuffer, 0, result, 0, blake2bLength / 2); + + int r = (outputLength / 32) + (outputLength % 32 == 0 ? 0 : 1) - 2; + + int position = blake2bLength / 2; + for (int i = 2; i <= r; i++, position += blake2bLength / 2) { + /* V2 to Vr */ + outBuffer = blake2b(outBuffer, null, blake2bLength); + System.arraycopy(outBuffer, 0, result, position, blake2bLength / 2); + } + + int lastLength = outputLength - 32 * r; + + /* Vr+1 */ + outBuffer = blake2b(outBuffer, null, lastLength); + System.arraycopy(outBuffer, 0, result, position, lastLength); + } + + assert (result.length == outputLength); + return result; + } + + private static byte[] blake2b(byte[] input, byte[] outlenBytes, int outputLength) { + Blake2b.Param params = new Blake2b.Param() + .setDigestLength(outputLength); + + final Blake2b blake2b = Blake2b.Digest.newInstance(params); + + if (outlenBytes != null) + blake2b.update(outlenBytes); + + blake2b.update(input); + + return blake2b.digest(); + } + + static void roundFunction(Block block, + int v0, int v1, int v2, int v3, + int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, + int v12, int v13, int v14, int v15) { + + F(block, v0, v4, v8, v12); + F(block, v1, v5, v9, v13); + F(block, v2, v6, v10, v14); + F(block, v3, v7, v11, v15); + + F(block, v0, v5, v10, v15); + F(block, v1, v6, v11, v12); + F(block, v2, v7, v8, v13); + F(block, v3, v4, v9, v14); + } + + private static void F(Block block, int a, int b, int c, int d) { + fBlaMka(block, a, b); + rotr64(block, d, a, 32); + + fBlaMka(block, c, d); + rotr64(block, b, c, 24); + + fBlaMka(block, a, b); + rotr64(block, d, a, 16); + + fBlaMka(block, c, d); + rotr64(block, b, c, 63); + } + + /*designed by the Lyra PHC team */ + /* a <- a + b + 2*aL*bL + * + == addition modulo 2^64 + * aL = least 32 bit */ + private static void fBlaMka(Block block, int x, int y) { + final long m = 0xFFFFFFFFL; + final long xy = (block.v[x] & m) * (block.v[y] & m); + + block.v[x] = block.v[x] + block.v[y] + 2 * xy; + } + + private static void rotr64(Block block, int v, int w, long c) { + final long temp = block.v[v] ^ block.v[w]; + block.v[v] = (temp >>> c) | (temp << (64 - c)); + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Initialize.java b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Initialize.java new file mode 100644 index 000000000..e7940ccce --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/Initialize.java @@ -0,0 +1,75 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.algorithm; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_BLOCK_SIZE; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_PREHASH_DIGEST_LENGTH; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_PREHASH_SEED_LENGTH; + +import ext.plantuml.com.at.gadermaier.argon2.Argon2; +import ext.plantuml.com.at.gadermaier.argon2.Util; +import ext.plantuml.com.at.gadermaier.argon2.model.Instance; + +public class Initialize { + + + public static void initialize(Instance instance, Argon2 argon2) { + byte[] initialHash = Functions.initialHash( + Util.intToLittleEndianBytes(argon2.getLanes()), + Util.intToLittleEndianBytes(argon2.getOutputLength()), + Util.intToLittleEndianBytes(argon2.getMemory()), + Util.intToLittleEndianBytes(argon2.getIterations()), + Util.intToLittleEndianBytes(argon2.getVersion()), + Util.intToLittleEndianBytes(argon2.getType().ordinal()), + Util.intToLittleEndianBytes(argon2.getPasswordLength()), + argon2.getPassword(), + Util.intToLittleEndianBytes(argon2.getSaltLength()), + argon2.getSalt(), + Util.intToLittleEndianBytes(argon2.getSecretLength()), + argon2.getSecret(), + Util.intToLittleEndianBytes(argon2.getAdditionalLength()), + argon2.getAdditional() + ); + fillFirstBlocks(instance, initialHash); + } + + /** + * (H0 || 0 || i) 72 byte -> 1024 byte + * (H0 || 1 || i) 72 byte -> 1024 byte + */ + private static void fillFirstBlocks(Instance instance, byte[] initialHash) { + + final byte[] zeroBytes = {0, 0, 0, 0}; + final byte[] oneBytes = {1, 0, 0, 0}; + + byte[] initialHashWithZeros = getInitialHashLong(initialHash, zeroBytes); + byte[] initialHashWithOnes = getInitialHashLong(initialHash, oneBytes); + + for (int i = 0; i < instance.getLanes(); i++) { + + byte[] iBytes = Util.intToLittleEndianBytes(i); + + System.arraycopy(iBytes, 0, initialHashWithZeros, ARGON2_PREHASH_DIGEST_LENGTH + 4, 4); + System.arraycopy(iBytes, 0, initialHashWithOnes, ARGON2_PREHASH_DIGEST_LENGTH + 4, 4); + + byte[] blockhashBytes = Functions.blake2bLong(initialHashWithZeros, ARGON2_BLOCK_SIZE); + instance.memory[i * instance.getLaneLength() + 0].fromBytes(blockhashBytes); + + blockhashBytes = Functions.blake2bLong(initialHashWithOnes, ARGON2_BLOCK_SIZE); + instance.memory[i * instance.getLaneLength() + 1].fromBytes(blockhashBytes); + } + } + + private static byte[] getInitialHashLong(byte[] initialHash, byte[] appendix) { + byte[] initialHashLong = new byte[ARGON2_PREHASH_SEED_LENGTH]; + + System.arraycopy(initialHash, 0, initialHashLong, 0, ARGON2_PREHASH_DIGEST_LENGTH); + System.arraycopy(appendix, 0, initialHashLong, ARGON2_PREHASH_DIGEST_LENGTH, 4); + + return initialHashLong; + } + +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/blake2/Blake2b.java b/src/ext/plantuml/com/at/gadermaier/argon2/blake2/Blake2b.java new file mode 100644 index 000000000..5a42e8ac8 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/blake2/Blake2b.java @@ -0,0 +1,1288 @@ + + +/* This file is taken from + https://github.com/alphazero/Blake2b/ + + Original Author: Andreas Gadermaier + because the repository artifact was not uploaded to maven central repository + + */ +/* + A Java implementation of BLAKE2B cryptographic digest algorithm. + + Joubin Mohammad Houshyar + bushwick, nyc + 02-14-2014 + + -- + + To the extent possible under law, the author(s) have dedicated all copyright + and related and neighboring rights to this software to the public domain + worldwide. This software is distributed without any warranty. + + You should have received a copy of the CC0 Public Domain Dedication along with + this software. If not, see . +*/ + +package ext.plantuml.com.at.gadermaier.argon2.blake2; + + +import static ext.plantuml.com.at.gadermaier.argon2.blake2.Blake2b.Engine.Assert.*; +import static ext.plantuml.com.at.gadermaier.argon2.blake2.Blake2b.Engine.LittleEndian.*; + +import java.io.PrintStream; +import java.security.Key; +import java.security.spec.AlgorithmParameterSpec; +import java.util.Arrays; + + +/** */ +public interface Blake2b { + /** */ + void update(byte[] input); + + // --------------------------------------------------------------------- + // API + // --------------------------------------------------------------------- + // TODO add ByteBuffer variants + + /** */ + void update(byte input); + + /** */ + void update(byte[] input, int offset, int len); + + /** */ + byte[] digest(); + + /** */ + byte[] digest(byte[] input); + + /** */ + void digest(byte[] output, int offset, int len); + + /** */ + void reset(); + + // --------------------------------------------------------------------- + // Specification + // --------------------------------------------------------------------- + public interface Spec { + /** pblock size of blake2b */ + int param_bytes = 64; + + /** pblock size of blake2b */ + int block_bytes = 128; + + /** maximum digest size */ + int max_digest_bytes = 64; + + /** maximum key sie */ + int max_key_bytes = 64; + + /** maximum salt size */ + int max_salt_bytes = 16; + + /** maximum personalization string size */ + int max_personalization_bytes = 16; + + /** length of h space vector array */ + int state_space_len = 8; + + /** max tree fanout value */ + int max_tree_fantout = 0xFF; + + /** max tree depth value */ + int max_tree_depth = 0xFF; + + /** max tree leaf length value.Note that this has uint32 semantics + and thus 0xFFFFFFFF is used as max value limit. */ + int max_tree_leaf_length = 0xFFFFFFFF; + + /** max node offset value. Note that this has uint64 semantics + and thus 0xFFFFFFFFFFFFFFFFL is used as max value limit. */ + long max_node_offset = 0xFFFFFFFFFFFFFFFFL; + + /** max tree inner length value */ + int max_tree_inner_length = 0xFF; + + /** initialization values map ref-Spec IV[i] -> slice iv[i*8:i*8+7] */ + long[] IV = { + 0x6a09e667f3bcc908L, + 0xbb67ae8584caa73bL, + 0x3c6ef372fe94f82bL, + 0xa54ff53a5f1d36f1L, + 0x510e527fade682d1L, + 0x9b05688c2b3e6c1fL, + 0x1f83d9abfb41bd6bL, + 0x5be0cd19137e2179L + }; + + /** sigma per spec used in compress func generation - for reference only */ + static byte[][] sigma = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } + }; + } + + // --------------------------------------------------------------------- + // Blake2b Message Digest + // --------------------------------------------------------------------- + + /** Generalized Blake2b digest. */ + public static class Digest extends Engine implements Blake2b { + private Digest (final Param p) { super (p); } + private Digest () { super (); } + + public static Digest newInstance () { + return new Digest (); + } + public static Digest newInstance (final int digestLength) { + return new Digest (new Param().setDigestLength(digestLength)); + } + public static Digest newInstance (Param p) { + return new Digest (p); + } + } + + // --------------------------------------------------------------------- + // Blake2b Message Authentication Code + // --------------------------------------------------------------------- + + /** Message Authentication Code (MAC) digest. */ + public static class Mac extends Engine implements Blake2b { + private Mac (final Param p) { super (p); } + private Mac () { super (); } + + /** Blake2b.MAC 512 - using default Blake2b.Spec settings with given key */ + public static Mac newInstance (final byte[] key) { + return new Mac (new Param().setKey(key)); + } + /** Blake2b.MAC - using default Blake2b.Spec settings with given key, with given digest length */ + public static Mac newInstance (final byte[] key, final int digestLength) { + return new Mac (new Param().setKey(key).setDigestLength(digestLength)); + } + /** Blake2b.MAC - using default Blake2b.Spec settings with given java.security.Key, with given digest length */ + public static Mac newInstance (final Key key, final int digestLength) { + return new Mac (new Param().setKey(key).setDigestLength(digestLength)); + } + /** Blake2b.MAC - using the specified Parameters. + * @param p asserted valid configured Param with key */ + public static Mac newInstance (Param p) { + assert p != null : "Param (p) is null"; + assert p.hasKey() : "Param (p) not configured with a key"; + return new Mac (p); + } + } + + // --------------------------------------------------------------------- + // Blake2b Incremental Message Digest (Tree) + // --------------------------------------------------------------------- + + /** + * Note that Tree is just a convenience class; incremental hash (tree) + * can be done directly with the Digest class. + *
+ * Further node, that tree does NOT accumulate the leaf hashes -- + * you need to do that + */ + public static class Tree { + + final int depth; + final int fanout; + final int leaf_length; + final int inner_length; + final int digest_length; + + /** + * + * @param fanout + * @param depth + * @param leaf_length size of data input for leaf nodes. + * @param inner_length note this is used also as digest-length for non-root nodes. + * @param digest_length final hash out digest-length for the tree + */ + public Tree ( + final int depth, + final int fanout, + final int leaf_length, + final int inner_length, + final int digest_length + ) { + this.fanout = fanout; + this.depth = depth; + this.leaf_length = leaf_length; + this.inner_length = inner_length; + this.digest_length = digest_length; + } + private Param treeParam() { + return new Param(). + setDepth(depth).setFanout(fanout).setLeafLength(leaf_length).setInnerLength(inner_length); + } + /** returns the Digest for tree node @ (depth, offset) */ + public final Digest getNode (final int depth, final int offset) { + final Param nodeParam = treeParam().setNodeDepth(depth).setNodeOffset(offset).setDigestLength(inner_length); + return Digest.newInstance(nodeParam); + } + /** returns the Digest for root node */ + public final Digest getRoot () { + final int depth = this.depth - 1; + final Param rootParam = treeParam().setNodeDepth(depth).setNodeOffset(0L).setDigestLength(digest_length); + return Digest.newInstance(rootParam); + } + } + + // --------------------------------------------------------------------- + // Engine + // --------------------------------------------------------------------- + static class Engine implements Blake2b { + + /* G0 sigmas */ + static final int[] sig_g00 = { 0, 14, 11, 7, 9, 2, 12, 13, 6, 10, 0, 14, }; + static final int[] sig_g01 = { 1, 10, 8, 9, 0, 12, 5, 11, 15, 2, 1, 10, }; + + /* G1 sigmas */ + static final int[] sig_g10 = { 2, 4, 12, 3, 5, 6, 1, 7, 14, 8, 2, 4, }; + static final int[] sig_g11 = { 3, 8, 0, 1, 7, 10, 15, 14, 9, 4, 3, 8, }; + + /* G2 sigmas */ + static final int[] sig_g20 = { 4, 9, 5, 13, 2, 0, 14, 12, 11, 7, 4, 9, }; + static final int[] sig_g21 = { 5, 15, 2, 12, 4, 11, 13, 1, 3, 6, 5, 15, }; + + /* G3 sigmas */ + static final int[] sig_g30 = { 6, 13, 15, 11, 10, 8, 4, 3, 0, 1, 6, 13, }; + static final int[] sig_g31 = { 7, 6, 13, 14, 15, 3, 10, 9, 8, 5, 7, 6, }; + + /* G4 sigmas */ + static final int[] sig_g40 = { 8, 1, 10, 2, 14, 4, 0, 5, 12, 15, 8, 1, }; + static final int[] sig_g41 = { 9, 12, 14, 6, 1, 13, 7, 0, 2, 11, 9, 12, }; + + /* G5 sigmas */ + static final int[] sig_g50 = { 10, 0, 3, 5, 11, 7, 6, 15, 13, 9, 10, 0, }; + static final int[] sig_g51 = { 11, 2, 6, 10, 12, 5, 3, 4, 7, 14, 11, 2, }; + + /* G6 sigmas */ + static final int[] sig_g60 = { 12, 11, 7, 4, 6, 15, 9, 8, 1, 3, 12, 11, }; + static final int[] sig_g61 = { 13, 7, 1, 0, 8, 14, 2, 6, 4, 12, 13, 7, }; + + /* G7 sigmas */ + static final int[] sig_g70 = { 14, 5, 9, 15, 3, 1, 8, 2, 10, 13, 14, 5, }; + static final int[] sig_g71 = { 15, 3, 4, 8, 13, 9, 11, 10, 5, 0, 15, 3, }; + + // --------------------------------------------------------------------- + // Blake2b State(+) per reference implementation + // --------------------------------------------------------------------- + // REVU: address last_node TODO part of the Tree/incremental + /** + * read only + */ + private static byte[] zeropad = new byte[Spec.block_bytes]; + /** + * per spec + */ + private final long[] h = new long [ 8 ]; + /** per spec */ + private final long[] t = new long [ 2 ]; + /** per spec */ + private final long[] f = new long [ 2 ]; + /** pulled up 2b optimal */ + private final long[] m = new long [16]; + /** pulled up 2b optimal */ + private final long[] v = new long [16]; + + /** compressor cache buffer */ + private final byte[] buffer; + /** configuration params */ + private final Param param; + /** digest length from init param - copied here on init */ + private final int outlen; + /** + * per spec (tree) + */ + private boolean last_node = false; + /** + * compressor cache buffer offset/cached data length + */ + private int buflen; + /** to support update(byte) */ + private byte[] oneByte; + + /** Basic use constructor pending (TODO) JCA/JCE compliance */ + Engine() { + this(new Param()); + } + + // --------------------------------------------------------------------- + // Ctor & Initialization + // --------------------------------------------------------------------- + + /** User provided Param for custom configurations */ + Engine(final Param param) { + assert param != null : "param is null"; + this.param = param; + this.buffer = new byte[Spec.block_bytes]; + this.oneByte = new byte[1]; + this.outlen = param.getDigestLength(); + + if (param.getDepth() > Param.Default.depth) { + final int ndepth = param.getNodeDepth(); + final long nxoff = param.getNodeOffset(); + if (ndepth == param.getDepth() - 1) { + last_node = true; + assert param.getNodeOffset() == 0 : "root must have offset of zero"; + } else if (param.getNodeOffset() == param.getFanout() - 1) { + this.last_node = true; + } + } + + initialize(); + +// Debug.dumpBuffer(System.out, "param bytes at init", param.getBytes()); + + } + + public static void main(String... args) { + Blake2b mac = Blake2b.Mac.newInstance("LOVE".getBytes()); + final byte[] hash = mac.digest("Salaam!".getBytes()); +// Debug.dumpBuffer(System.out, "-- mac hash --", hash); + } + + private void initialize () { + // state vector h - copy values to address reset() requests + System.arraycopy( param.initialized_H(), 0, this.h, 0, Spec.state_space_len); + +// Debug.dumpArray("init H", this.h); + // if we have a key update initial block + // Note param has zero padded key_bytes to Spec.max_key_bytes + if(param.hasKey){ + this.update (param.key_bytes, 0, Spec.block_bytes); + } + } + + /** + * {@inheritDoc} + */ + @Override + final public void reset() { + // reset cache + this.buflen = 0; + for (int i = 0; i < buffer.length; i++) { + buffer[i] = (byte) 0; + } + + // reset flags + this.f[0] = 0L; + this.f[1] = 0L; + + // reset counters + this.t[0] = 0L; + this.t[1] = 0L; + + // reset state vector + // NOTE: keep as last stmt as init calls update0 for MACs. + initialize(); + } + + // --------------------------------------------------------------------- + // interface: Blake2b API + // --------------------------------------------------------------------- + + /** {@inheritDoc} */ + @Override final public void update (final byte[] b, int off, int len) { + if (b == null) { + throw new IllegalArgumentException("input buffer (b) is null"); + } + /* zero or more calls to compress */ + // REVU: possibly the double buffering of c-ref is more sensible .. + // regardless, the hotspot is in the compress, as expected. + while (len > 0) { + if ( buflen == 0) { + /* try compressing direct from input ? */ + while ( len > Spec.block_bytes ) { + this.t[0] += Spec.block_bytes; + this.t[1] += this.t[0] == 0 ? 1 : 0; + compress( b, off); + len -= Spec.block_bytes; + off += Spec.block_bytes; + } + } else if ( buflen == Spec.block_bytes ) { + /* flush */ + this.t[0] += Spec.block_bytes; + this.t[1] += this.t[0] == 0 ? 1 : 0; + compress( buffer, 0 ); + buflen = 0; + continue; + } + + // "are we there yet?" + if( len == 0 ) return; + + final int cap = Spec.block_bytes - buflen; + final int fill = len > cap ? cap : len; + System.arraycopy( b, off, buffer, buflen, fill ); + buflen += fill; + len -= fill; + off += fill; + } + } + + /** {@inheritDoc} */ + @Override final public void update (byte b) { + oneByte[0] = b; + update (oneByte, 0, 1); + } + + /** {@inheritDoc} */ + @Override final public void update(byte[] input) { + update (input, 0, input.length); + } + + /** {@inheritDoc} */ + @Override final public void digest(byte[] output, int off, int len) { + // zero pad last block; set last block flags; and compress + System.arraycopy( zeropad, 0, buffer, buflen, Spec.block_bytes - buflen); + if(buflen > 0) { + this.t[0] += buflen; + this.t[1] += this.t[0] == 0 ? 1 : 0; + } + + this.f[ flag.last_block ] = 0xFFFFFFFFFFFFFFFFL; + this.f[ flag.last_node ] = this.last_node ? 0xFFFFFFFFFFFFFFFFL : 0x0L; + + // compres and write final out (truncated to len) to output + compress( buffer, 0 ); + hashout( output, off, len ); + + reset(); + } + + /** {@inheritDoc} */ + @Override final public byte[] digest () throws IllegalArgumentException { + final byte[] out = new byte [outlen]; + digest ( out, 0, outlen ); + return out; + } + + /** {@inheritDoc} */ + @Override final public byte[] digest (byte[] input) { + update(input, 0, input.length); + return digest(); + } + + /** + * write out the digest output from the 'h' registers. + * truncate full output if necessary. + */ + private void hashout (final byte[] out, final int offset, final int hashlen) { + // write max number of whole longs + final int lcnt = hashlen >>> 3; + long v = 0; + int i = offset; + for (int w = 0; w < lcnt; w++) { + v = h [ w ]; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; v >>>= 8; + out [ i++ ] = (byte) v; + } + + // basta? + if( hashlen == Spec.max_digest_bytes) return; + + // write the remaining bytes of a partial long value + v = h[lcnt]; + i = lcnt << 3; + while (i < hashlen) { + out[offset + i] = (byte) v; + v >>>= 8; + ++i; + } + } + + // --------------------------------------------------------------------- + // Internal Ops + // --------------------------------------------------------------------- + + /** compress Spec.block_bytes data from b, from offset */ + private void compress(final byte[] b, final int offset) { + + // set m registers + // REVU: some small gains still possible here. + m[0] = ((long) b[offset] & 0xFF); + m[0] |= ((long) b[offset + 1] & 0xFF) << 8; + m[0] |= ((long) b[offset + 2] & 0xFF) << 16; + m[0] |= ((long) b[offset + 3] & 0xFF) << 24; + m[0] |= ((long) b[offset + 4] & 0xFF) << 32; + m[0] |= ((long) b[offset + 5] & 0xFF) << 40; + m[0] |= ((long) b[offset + 6] & 0xFF) << 48; + m[0] |= ((long) b[offset + 7]) << 56; + + m[1] = ((long) b[offset + 8] & 0xFF); + m[1] |= ((long) b[offset + 9] & 0xFF) << 8; + m[1] |= ((long) b[offset + 10] & 0xFF) << 16; + m[1] |= ((long) b[offset + 11] & 0xFF) << 24; + m[1] |= ((long) b[offset + 12] & 0xFF) << 32; + m[1] |= ((long) b[offset + 13] & 0xFF) << 40; + m[1] |= ((long) b[offset + 14] & 0xFF) << 48; + m[1] |= ((long) b[offset + 15]) << 56; + + m[2] = ((long) b[offset + 16] & 0xFF); + m[2] |= ((long) b[offset + 17] & 0xFF) << 8; + m[2] |= ((long) b[offset + 18] & 0xFF) << 16; + m[2] |= ((long) b[offset + 19] & 0xFF) << 24; + m[2] |= ((long) b[offset + 20] & 0xFF) << 32; + m[2] |= ((long) b[offset + 21] & 0xFF) << 40; + m[2] |= ((long) b[offset + 22] & 0xFF) << 48; + m[2] |= ((long) b[offset + 23]) << 56; + + m[3] = ((long) b[offset + 24] & 0xFF); + m[3] |= ((long) b[offset + 25] & 0xFF) << 8; + m[3] |= ((long) b[offset + 26] & 0xFF) << 16; + m[3] |= ((long) b[offset + 27] & 0xFF) << 24; + m[3] |= ((long) b[offset + 28] & 0xFF) << 32; + m[3] |= ((long) b[offset + 29] & 0xFF) << 40; + m[3] |= ((long) b[offset + 30] & 0xFF) << 48; + m[3] |= ((long) b[offset + 31]) << 56; + + m[4] = ((long) b[offset + 32] & 0xFF); + m[4] |= ((long) b[offset + 33] & 0xFF) << 8; + m[4] |= ((long) b[offset + 34] & 0xFF) << 16; + m[4] |= ((long) b[offset + 35] & 0xFF) << 24; + m[4] |= ((long) b[offset + 36] & 0xFF) << 32; + m[4] |= ((long) b[offset + 37] & 0xFF) << 40; + m[4] |= ((long) b[offset + 38] & 0xFF) << 48; + m[4] |= ((long) b[offset + 39]) << 56; + + m[5] = ((long) b[offset + 40] & 0xFF); + m[5] |= ((long) b[offset + 41] & 0xFF) << 8; + m[5] |= ((long) b[offset + 42] & 0xFF) << 16; + m[5] |= ((long) b[offset + 43] & 0xFF) << 24; + m[5] |= ((long) b[offset + 44] & 0xFF) << 32; + m[5] |= ((long) b[offset + 45] & 0xFF) << 40; + m[5] |= ((long) b[offset + 46] & 0xFF) << 48; + m[5] |= ((long) b[offset + 47]) << 56; + + m[6] = ((long) b[offset + 48] & 0xFF); + m[6] |= ((long) b[offset + 49] & 0xFF) << 8; + m[6] |= ((long) b[offset + 50] & 0xFF) << 16; + m[6] |= ((long) b[offset + 51] & 0xFF) << 24; + m[6] |= ((long) b[offset + 52] & 0xFF) << 32; + m[6] |= ((long) b[offset + 53] & 0xFF) << 40; + m[6] |= ((long) b[offset + 54] & 0xFF) << 48; + m[6] |= ((long) b[offset + 55]) << 56; + + m[7] = ((long) b[offset + 56] & 0xFF); + m[7] |= ((long) b[offset + 57] & 0xFF) << 8; + m[7] |= ((long) b[offset + 58] & 0xFF) << 16; + m[7] |= ((long) b[offset + 59] & 0xFF) << 24; + m[7] |= ((long) b[offset + 60] & 0xFF) << 32; + m[7] |= ((long) b[offset + 61] & 0xFF) << 40; + m[7] |= ((long) b[offset + 62] & 0xFF) << 48; + m[7] |= ((long) b[offset + 63]) << 56; + + m[8] = ((long) b[offset + 64] & 0xFF); + m[8] |= ((long) b[offset + 65] & 0xFF) << 8; + m[8] |= ((long) b[offset + 66] & 0xFF) << 16; + m[8] |= ((long) b[offset + 67] & 0xFF) << 24; + m[8] |= ((long) b[offset + 68] & 0xFF) << 32; + m[8] |= ((long) b[offset + 69] & 0xFF) << 40; + m[8] |= ((long) b[offset + 70] & 0xFF) << 48; + m[8] |= ((long) b[offset + 71]) << 56; + + m[9] = ((long) b[offset + 72] & 0xFF); + m[9] |= ((long) b[offset + 73] & 0xFF) << 8; + m[9] |= ((long) b[offset + 74] & 0xFF) << 16; + m[9] |= ((long) b[offset + 75] & 0xFF) << 24; + m[9] |= ((long) b[offset + 76] & 0xFF) << 32; + m[9] |= ((long) b[offset + 77] & 0xFF) << 40; + m[9] |= ((long) b[offset + 78] & 0xFF) << 48; + m[9] |= ((long) b[offset + 79]) << 56; + + m[10] = ((long) b[offset + 80] & 0xFF); + m[10] |= ((long) b[offset + 81] & 0xFF) << 8; + m[10] |= ((long) b[offset + 82] & 0xFF) << 16; + m[10] |= ((long) b[offset + 83] & 0xFF) << 24; + m[10] |= ((long) b[offset + 84] & 0xFF) << 32; + m[10] |= ((long) b[offset + 85] & 0xFF) << 40; + m[10] |= ((long) b[offset + 86] & 0xFF) << 48; + m[10] |= ((long) b[offset + 87]) << 56; + + m[11] = ((long) b[offset + 88] & 0xFF); + m[11] |= ((long) b[offset + 89] & 0xFF) << 8; + m[11] |= ((long) b[offset + 90] & 0xFF) << 16; + m[11] |= ((long) b[offset + 91] & 0xFF) << 24; + m[11] |= ((long) b[offset + 92] & 0xFF) << 32; + m[11] |= ((long) b[offset + 93] & 0xFF) << 40; + m[11] |= ((long) b[offset + 94] & 0xFF) << 48; + m[11] |= ((long) b[offset + 95]) << 56; + + m[12] = ((long) b[offset + 96] & 0xFF); + m[12] |= ((long) b[offset + 97] & 0xFF) << 8; + m[12] |= ((long) b[offset + 98] & 0xFF) << 16; + m[12] |= ((long) b[offset + 99] & 0xFF) << 24; + m[12] |= ((long) b[offset + 100] & 0xFF) << 32; + m[12] |= ((long) b[offset + 101] & 0xFF) << 40; + m[12] |= ((long) b[offset + 102] & 0xFF) << 48; + m[12] |= ((long) b[offset + 103]) << 56; + + m[13] = ((long) b[offset + 104] & 0xFF); + m[13] |= ((long) b[offset + 105] & 0xFF) << 8; + m[13] |= ((long) b[offset + 106] & 0xFF) << 16; + m[13] |= ((long) b[offset + 107] & 0xFF) << 24; + m[13] |= ((long) b[offset + 108] & 0xFF) << 32; + m[13] |= ((long) b[offset + 109] & 0xFF) << 40; + m[13] |= ((long) b[offset + 110] & 0xFF) << 48; + m[13] |= ((long) b[offset + 111]) << 56; + + m[14] = ((long) b[offset + 112] & 0xFF); + m[14] |= ((long) b[offset + 113] & 0xFF) << 8; + m[14] |= ((long) b[offset + 114] & 0xFF) << 16; + m[14] |= ((long) b[offset + 115] & 0xFF) << 24; + m[14] |= ((long) b[offset + 116] & 0xFF) << 32; + m[14] |= ((long) b[offset + 117] & 0xFF) << 40; + m[14] |= ((long) b[offset + 118] & 0xFF) << 48; + m[14] |= ((long) b[offset + 119]) << 56; + + m[15] = ((long) b[offset + 120] & 0xFF); + m[15] |= ((long) b[offset + 121] & 0xFF) << 8; + m[15] |= ((long) b[offset + 122] & 0xFF) << 16; + m[15] |= ((long) b[offset + 123] & 0xFF) << 24; + m[15] |= ((long) b[offset + 124] & 0xFF) << 32; + m[15] |= ((long) b[offset + 125] & 0xFF) << 40; + m[15] |= ((long) b[offset + 126] & 0xFF) << 48; + m[15] |= ((long) b[offset + 127 ] ) << 56; +// Debug.dumpArray("m @ compress", m); +// +// Debug.dumpArray("h @ compress", h); +// Debug.dumpArray("t @ compress", t); +// Debug.dumpArray("f @ compress", f); + + // set v registers + v[0] = h[0]; + v[1] = h[1]; + v[2] = h[2]; + v[3] = h[3]; + v[4] = h[4]; + v[5] = h[5]; + v[6] = h[6]; + v[7] = h[7]; + v[8] = 0x6a09e667f3bcc908L; + v[9] = 0xbb67ae8584caa73bL; + v[10] = 0x3c6ef372fe94f82bL; + v[11] = 0xa54ff53a5f1d36f1L; + v[12] = t[0] ^ 0x510e527fade682d1L; + v[13] = t[1] ^ 0x9b05688c2b3e6c1fL; + v[14] = f[0] ^ 0x1f83d9abfb41bd6bL; + v[15] = f[1] ^ 0x5be0cd19137e2179L; + +// Debug.dumpArray("v @ compress", v); + // the rounds + // REVU: let's try unrolling this again TODO do & bench + for (int r = 0; r < 12; r++) { + + /** G (r, 0, 0, 4, 8, 12); */ + + v[0] = v[0] + v[4] + m[sig_g00[r]]; + v[12] ^= v[0]; + v[12] = (v[12] << 32) | (v[12] >>> 32); + v[8] = v[8] + v[12]; + v[4] ^= v[8]; + v[4] = (v[4] >>> 24) | (v[4] << 40); + v[0] = v[0] + v[4] + m[sig_g01[r]]; + v[12] ^= v[0]; + v[12] = (v[12] >>> 16) | (v[12] << 48); + v[8] = v[8] + v[12]; + v[4] ^= v[8]; + v[4] = (v[4] << 1) | (v[4] >>> 63); + + /** G (r, 1, 1, 5, 9, 13); */ + + v[1] = v[1] + v[5] + m[sig_g10[r]]; + v[13] ^= v[1]; + v[13] = (v[13] << 32) | (v[13] >>> 32); + v[9] = v[9] + v[13]; + v[5] ^= v[9]; + v[5] = (v[5] >>> 24) | (v[5] << 40); + v[1] = v[1] + v[5] + m[sig_g11[r]]; + v[13] ^= v[1]; + v[13] = (v[13] >>> 16) | (v[13] << 48); + v[9] = v[9] + v[13]; + v[5] ^= v[9]; + v[5] = (v[5] << 1) | (v[5] >>> 63); + + /** G (r, 2, 2, 6, 10, 14); */ + + v[2] = v[2] + v[6] + m[sig_g20[r]]; + v[14] ^= v[2]; + v[14] = (v[14] << 32) | (v[14] >>> 32); + v[10] = v[10] + v[14]; + v[6] ^= v[10]; + v[6] = (v[6] >>> 24) | (v[6] << 40); + v[2] = v[2] + v[6] + m[sig_g21[r]]; + v[14] ^= v[2]; + v[14] = (v[14] >>> 16) | (v[14] << 48); + v[10] = v[10] + v[14]; + v[6] ^= v[10]; + v[6] = (v[6] << 1) | (v[6] >>> 63); + + /** G (r, 3, 3, 7, 11, 15); */ + + v[3] = v[3] + v[7] + m[sig_g30[r]]; + v[15] ^= v[3]; + v[15] = (v[15] << 32) | (v[15] >>> 32); + v[11] = v[11] + v[15]; + v[7] ^= v[11]; + v[7] = (v[7] >>> 24) | (v[7] << 40); + v[3] = v[3] + v[7] + m[sig_g31[r]]; + v[15] ^= v[3]; + v[15] = (v[15] >>> 16) | (v[15] << 48); + v[11] = v[11] + v[15]; + v[7] ^= v[11]; + v[7] = (v[7] << 1) | (v[7] >>> 63); + + /** G (r, 4, 0, 5, 10, 15); */ + + v[0] = v[0] + v[5] + m[sig_g40[r]]; + v[15] ^= v[0]; + v[15] = (v[15] << 32) | (v[15] >>> 32); + v[10] = v[10] + v[15]; + v[5] ^= v[10]; + v[5] = (v[5] >>> 24) | (v[5] << 40); + v[0] = v[0] + v[5] + m[sig_g41[r]]; + v[15] ^= v[0]; + v[15] = (v[15] >>> 16) | (v[15] << 48); + v[10] = v[10] + v[15]; + v[5] ^= v[10]; + v[5] = (v[5] << 1) | (v[5] >>> 63); + + /** G (r, 5, 1, 6, 11, 12); */ + + v[1] = v[1] + v[6] + m[sig_g50[r]]; + v[12] ^= v[1]; + v[12] = (v[12] << 32) | (v[12] >>> 32); + v[11] = v[11] + v[12]; + v[6] ^= v[11]; + v[6] = (v[6] >>> 24) | (v[6] << 40); + v[1] = v[1] + v[6] + +m[sig_g51[r]]; + v[12] ^= v[1]; + v[12] = (v[12] >>> 16) | (v[12] << 48); + v[11] = v[11] + v[12]; + v[6] ^= v[11]; + v[6] = (v[6] << 1) | (v[6] >>> 63); + + /** G (r, 6, 2, 7, 8, 13); */ + + v[2] = v[2] + v[7] + m[sig_g60[r]]; + v[13] ^= v[2]; + v[13] = (v[13] << 32) | (v[13] >>> 32); + v[8] = v[8] + v[13]; + v[7] ^= v[8]; + v[7] = (v[7] >>> 24) | (v[7] << 40); + v[2] = v[2] + v[7] + m[sig_g61[r]]; + v[13] ^= v[2]; + v[13] = (v[13] >>> 16) | (v[13] << 48); + v[8] = v[8] + v[13]; + v[7] ^= v[8]; + v[7] = (v[7] << 1) | (v[7] >>> 63); + + /** G (r, 7, 3, 4, 9, 14); */ + + v[3] = v[3] + v[4] + m[sig_g70[r]]; + v[14] ^= v[3]; + v[14] = (v[14] << 32) | (v[14] >>> 32); + v[9] = v[9] + v[14]; + v[4] ^= v[9]; + v[4] = (v[4] >>> 24) | (v[4] << 40); + v[3] = v[3] + v[4] + m[sig_g71[r]]; + v[14] ^= v[3]; + v[14] = (v[14] >>> 16) | (v[14] << 48); + v[9] = v[9] + v[14]; + v[4] ^= v[9]; + v[4] = (v[4] << 1) | (v[4] >>> 63); + } + + // Update state vector h + h[0] ^= v[0] ^ v[8]; + h[1] ^= v[1] ^ v[9]; + h[2] ^= v[2] ^ v[10]; + h[3] ^= v[3] ^ v[11]; + h[4] ^= v[4] ^ v[12]; + h[5] ^= v[5] ^ v[13]; + h[6] ^= v[6] ^ v[14]; + h[ 7] ^= v[7] ^ v[15]; + +// Debug.dumpArray("v @ compress end", v); +// Debug.dumpArray("h @ compress end", h); + /* kaamil */ + } + + //////////////////////////////////////////////////////////////////////// + /// Compression Kernel /////////////////////////////////////////// BEGIN + //////////////////////////////////////////////////////////////////////// + + /** + * a little bit of semantics + */ + interface flag { + int last_block = 0; + int last_node = 1; + } + + //////////////////////////////////////////////////////////////////////// + /// Compression Kernel //////////////////////////////////////////// FINI + //////////////////////////////////////////////////////////////////////// + + /* TEMP - remove at will */ + public static class Debug { + public static void dumpState (Blake2b.Engine e, final String mark) { + System.out.format("-- MARK == @ %s @ ===========\n", mark); + dumpArray("register t", e.t); + dumpArray("register h", e.h); + dumpArray("register f", e.f); + dumpArray("register offset", new long[]{e.buflen}); + System.out.format("-- END MARK =================\n"); + } + public static void dumpArray (final String label, final long[] b) { + System.out.format ( "-- %s -- :\n{\n", label ); + for( int j = 0; j < b.length ; ++j ) { + System.out.format ( " [%2d] : %016X\n", j, b[j]); + } + System.out.format ( "}\n" ); + } + public static void dumpBuffer (final PrintStream out, final String label, final byte[] b) { + dumpBuffer(out, label, b, 0, b.length); + } + public static void dumpBuffer (final PrintStream out, final byte[] b) { + dumpBuffer(out, null, b, 0, b.length); + } + public static void dumpBuffer (final PrintStream out, final byte[] b, final int offset, final int len) { + dumpBuffer(out, null, b, offset, len); + } + public static void dumpBuffer (final PrintStream out, final String label, final byte[] b, final int offset, final int len) { + if(label != null) + out.format ( "-- %s -- :\n", label ); + out.format("{\n ", label); + for( int j = 0; j < len ; ++j ) { + out.format ("%02X", b[j + offset]); + if(j+1 < len) { + if ((j+1)%8==0) out.print("\n "); + else out.print(' '); + } + } + out.format("\n}\n"); + } + } + /* TEMP - remove at will */ + + // --------------------------------------------------------------------- + // Helper for assert error messages + // --------------------------------------------------------------------- + public static final class Assert { + public final static String exclusiveUpperBound = "'%s' %d is >= %d"; + public final static String inclusiveUpperBound = "'%s' %d is > %d"; + public final static String exclusiveLowerBound = "'%s' %d is <= %d"; + public final static String inclusiveLowerBound = "'%s' %d is < %d"; + static String assertFail(final String name, final T v, final String err, final T spec) { + new Exception().printStackTrace(); + return String.format(err, name, v, spec); + } + } + // --------------------------------------------------------------------- + // Little Endian Codecs (inlined in the compressor) + /* + * impl note: these are not library funcs and used in hot loops, so no + * null or bounds checks are performed. For our purposes, this is OK. + */ + // --------------------------------------------------------------------- + + public static class LittleEndian { + private static final byte[] hex_digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + private static final byte[] HEX_digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + /** @return hex rep of byte (lower case). */ + static public String toHexStr (final byte[] b) { + return toHexStr (b, false); // because String class is slower. + } + static public String toHexStr (final byte[] b, boolean upperCase) { + final int len = b.length; + final byte[] digits = new byte[ len * 2 ]; + final byte[] hex_rep = upperCase ? HEX_digits : hex_digits ; + for (int i = 0; i < len; i++) { + digits [ i*2 ] = hex_rep [ (byte) (b[i] >> 4 & 0x0F) ]; + digits [ i*2+1 ] = hex_rep [ (byte) (b[i] & 0x0F) ]; + } + return new String(digits); + } + public static int readInt (final byte[] b, int off) { + int v0 + = ((int)b [ off++ ] & 0xFF ); + v0 |= ((int)b [ off++ ] & 0xFF ) << 8; + v0 |= ((int)b [ off++ ] & 0xFF ) << 16; + v0 |= ((int)b [ off ] ) << 24; + return v0; + } + /** Little endian - byte[] to long */ + public static long readLong (final byte[] b, int off) { + long v0 + = ((long)b [ off++ ] & 0xFF ); + v0 |= ((long)b [ off++ ] & 0xFF ) << 8; + v0 |= ((long)b [ off++ ] & 0xFF ) << 16; + v0 |= ((long)b [ off++ ] & 0xFF ) << 24; + v0 |= ((long)b [ off++ ] & 0xFF ) << 32; + v0 |= ((long)b [ off++ ] & 0xFF ) << 40; + v0 |= ((long)b [ off++ ] & 0xFF ) << 48; + v0 |= ((long)b [ off ] ) << 56; + return v0; + } + /** */ + /** Little endian - long to byte[] */ + public static void writeLong (long v, final byte[] b, final int off) { + b [ off ] = (byte) v; v >>>= 8; + b [ off + 1 ] = (byte) v; v >>>= 8; + b [ off + 2 ] = (byte) v; v >>>= 8; + b [ off + 3 ] = (byte) v; v >>>= 8; + b [ off + 4 ] = (byte) v; v >>>= 8; + b [ off + 5 ] = (byte) v; v >>>= 8; + b [ off + 6 ] = (byte) v; v >>>= 8; + b [ off + 7 ] = (byte) v; + } + /** Little endian - int to byte[] */ + public static void writeInt (int v, final byte[] b, final int off) { + b [ off ] = (byte) v; v >>>= 8; + b [ off + 1 ] = (byte) v; v >>>= 8; + b [ off + 2 ] = (byte) v; v >>>= 8; + b [ off + 3 ] = (byte) v; + } + } + } + // --------------------------------------------------------------------- + // digest parameter (block) + // --------------------------------------------------------------------- + /** Blake2b configuration parameters block per spec */ + // REVU: need to review a revert back to non-lazy impl TODO: do & bench + public static class Param implements AlgorithmParameterSpec { + /** + * default bytes of Blake2b parameter block + */ + final static byte[] default_bytes = new byte[Spec.param_bytes]; + /** + * default Blake2b h vector + */ + final static long[] default_h = new long[Spec.state_space_len ]; + + /** initialize default_bytes */ + static { + default_bytes [ Xoff.digest_length ] = Default.digest_length; + default_bytes [ Xoff.key_length ] = Default.key_length; + default_bytes [ Xoff.fanout ] = Default.fanout; + default_bytes [ Xoff.depth ] = Default.depth; + /* def. leaf_length is 0 fill and already set by new byte[] */ + /* def. node_offset is 0 fill and already set by new byte[] */ + default_bytes [ Xoff.node_depth ] = Default.node_depth; + default_bytes [ Xoff.inner_length] = Default.inner_length; + /* def. salt is 0 fill and already set by new byte[] */ + /* def. personal is 0 fill and already set by new byte[] */ + } + + static { + default_h [0] = readLong( default_bytes, 0 ); + default_h [1] = readLong( default_bytes, 8 ); + default_h [2] = readLong( default_bytes, 16 ); + default_h [3] = readLong( default_bytes, 24 ); + default_h [4] = readLong( default_bytes, 32 ); + default_h [5] = readLong( default_bytes, 40 ); + default_h [6] = readLong( default_bytes, 48 ); + default_h [7] = readLong( default_bytes, 56 ); + + default_h[0] ^= Spec.IV[0]; + default_h[1] ^= Spec.IV[1]; + default_h[2] ^= Spec.IV[2]; + default_h[3] ^= Spec.IV[3]; + default_h[4] ^= Spec.IV[4]; + default_h[5] ^= Spec.IV[5]; + default_h[6] ^= Spec.IV[6]; + default_h[7] ^= Spec.IV[7]; + } + + /** */ + private final long[] h = new long [ Spec.state_space_len ]; + /** */ + private boolean hasKey = false; + /** not sure how to make this secure - TODO */ + private byte[] key_bytes = null; + /** */ + private byte[] bytes = null; + /** */ + public Param() { + System.arraycopy( default_h, 0, h, 0, Spec.state_space_len ); + } + + /** */ + public long[] initialized_H () { + return h; + } + + /** package only - copy returned - do not use in functional loops */ + public byte[] getBytes() { + lazyInitBytes(); + byte[] copy = new byte[ bytes.length ]; + System.arraycopy( bytes, 0, copy, 0, bytes.length ); + return copy; + } + + final byte getByteParam (final int xoffset) { + byte[] _bytes = bytes; + if(_bytes == null) _bytes = Param.default_bytes; + return _bytes[ xoffset]; + } + + final int getIntParam (final int xoffset) { + byte[] _bytes = bytes; + if(_bytes == null) _bytes = Param.default_bytes; + return readInt ( _bytes, xoffset); + } + + final long getLongParam (final int xoffset) { + byte[] _bytes = bytes; + if(_bytes == null) _bytes = Param.default_bytes; + return readLong ( _bytes, xoffset); + } + + // TODO same for tree params depth, fanout, inner, node-depth, node-offset + public final int getDigestLength() { + return (int) getByteParam ( Xoff.digest_length ); + } + + /* 0-7 inclusive */ + public final Param setDigestLength(int len) { + assert len > 0 : assertFail("len", len, exclusiveLowerBound, 0); + assert len <= Spec.max_digest_bytes : assertFail("len", len, inclusiveUpperBound, Spec.max_digest_bytes); + + lazyInitBytes(); + bytes[Xoff.digest_length] = (byte) len; + h[0] = readLong(bytes, 0); + h[0] ^= Spec.IV[0]; + return this; + } + + public final int getKeyLength() { + return (int) getByteParam(Xoff.key_length); + } + + public final int getFanout() { + return (int) getByteParam(Xoff.fanout); + } + + public final Param setFanout(int fanout) { + assert fanout > 0 : assertFail("fanout", fanout, exclusiveLowerBound, 0); + + lazyInitBytes(); + bytes[Xoff.fanout] = (byte) fanout; + h[0] = readLong(bytes, 0); + h[0] ^= Spec.IV[0]; + return this; + } + + public final int getDepth() { + return (int) getByteParam(Xoff.depth); + } + + public final Param setDepth(int depth) { + assert depth > 0 : assertFail("depth", depth, exclusiveLowerBound, 0); + + lazyInitBytes(); + bytes[Xoff.depth] = (byte) depth; + h[0] = readLong(bytes, 0); + h[0] ^= Spec.IV[0]; + return this; + } + + public final int getLeafLength() { + return getIntParam(Xoff.leaf_length); + } + + public final Param setLeafLength(int leaf_length) { + assert leaf_length >= 0 : assertFail("leaf_length", leaf_length, inclusiveLowerBound, 0); + + lazyInitBytes(); + writeInt(leaf_length, bytes, Xoff.leaf_length); + h[0] = readLong(bytes, 0); + h[0] ^= Spec.IV[0]; + return this; + } + + public final long getNodeOffset() { + return getLongParam ( Xoff.node_offset); + } + + /* 8-15 inclusive */ + public final Param setNodeOffset(long node_offset) { + assert node_offset >= 0 : assertFail("node_offset", node_offset, inclusiveLowerBound, 0); + + lazyInitBytes(); + writeLong(node_offset, bytes, Xoff.node_offset); + h[1] = readLong(bytes, Xoff.node_offset); + h[1] ^= Spec.IV[1]; + return this; + } + + public final int getNodeDepth() { + return (int) getByteParam(Xoff.node_depth); + } + + /* 16-23 inclusive */ + public final Param setNodeDepth(int node_depth) { + assert node_depth >= 0 : assertFail("node_depth", node_depth, inclusiveLowerBound, 0); + + lazyInitBytes(); + bytes[Xoff.node_depth] = (byte) node_depth; + h[2] = readLong(bytes, Xoff.node_depth); + h[2] ^= Spec.IV[2]; + h[3] = readLong(bytes, Xoff.node_depth + 8); + h[3] ^= Spec.IV[3]; + return this; + } + + public final int getInnerLength() { + return (int) getByteParam(Xoff.inner_length ); + } + + public final Param setInnerLength(int inner_length) { + assert inner_length >= 0 : assertFail("inner_length", inner_length, inclusiveLowerBound, 0); + + lazyInitBytes(); + bytes[Xoff.inner_length] = (byte) inner_length; + h[2] = readLong(bytes, Xoff.node_depth); + h[2] ^= Spec.IV[2]; + h[3] = readLong(bytes, Xoff.node_depth + 8); + h[3] ^= Spec.IV[3]; + return this; + } + + public final boolean hasKey() { + return this.hasKey; + } + + @Override + public Param clone() { + final Param clone = new Param(); + System.arraycopy(this.h, 0, clone.h, 0, h.length); + clone.lazyInitBytes(); + System.arraycopy(this.bytes, 0, clone.bytes, 0, this.bytes.length); + + if (this.hasKey) { + clone.hasKey = this.hasKey; + clone.key_bytes = new byte[Spec.max_key_bytes * 2]; + System.arraycopy(this.key_bytes, 0, clone.key_bytes, 0, this.key_bytes.length); + } + return clone; + } + + //////////////////////////////////////////////////////////////////////// + /// lazy setters - write directly to the bytes image of param block //// + //////////////////////////////////////////////////////////////////////// + final void lazyInitBytes() { + if (bytes == null) { + bytes = new byte[Spec.param_bytes]; + System.arraycopy(Param.default_bytes, 0, bytes, 0, Spec.param_bytes); + } + } + + public final Param setKey(final Key key) { + assert key != null : "key is null"; + final byte[] keybytes = key.getEncoded(); + assert keybytes != null : "key.encoded() is null"; + + return this.setKey(keybytes); + } + + public final Param setKey(final byte[] key) { + assert key != null : "key is null"; + assert key.length >= 0 : assertFail("key.length", key.length, inclusiveUpperBound, 0); + assert key.length <= Spec.max_key_bytes : assertFail("key.length", key.length, inclusiveUpperBound, Spec.max_key_bytes); + + // zeropad keybytes + this.key_bytes = new byte[Spec.max_key_bytes * 2]; + System.arraycopy(key, 0, this.key_bytes, 0, key.length); + lazyInitBytes(); + bytes[Xoff.key_length] = (byte) key.length; // checked c ref; this is correct + h[0] = readLong(bytes, 0); + h[0] ^= Spec.IV[0]; + this.hasKey = true; + return this; + } + + /* 32-47 inclusive */ + public final Param setSalt(final byte[] salt) { + assert salt != null : "salt is null"; + assert salt.length <= Spec.max_salt_bytes : assertFail("salt.length", salt.length, inclusiveUpperBound, Spec.max_salt_bytes); + + lazyInitBytes(); + Arrays.fill ( bytes, Xoff.salt, Xoff.salt + Spec.max_salt_bytes, (byte)0); + System.arraycopy( salt, 0, bytes, Xoff.salt, salt.length ); + h[ 4 ] = readLong( bytes, Xoff.salt ); + h[ 4 ] ^= Spec.IV [ 4 ]; + h[ 5 ] = readLong( bytes, Xoff.salt + 8 ); + h[ 5 ] ^= Spec.IV [ 5 ]; + return this; + } + + /* 48-63 inclusive */ + public final Param setPersonal(byte[] personal) { + assert personal != null : "personal is null"; + assert personal.length <= Spec.max_personalization_bytes : assertFail("personal.length", personal.length, inclusiveUpperBound, Spec.max_personalization_bytes); + + lazyInitBytes(); + Arrays.fill(bytes, Xoff.personal, Xoff.personal + Spec.max_personalization_bytes, (byte) 0); + System.arraycopy(personal, 0, bytes, Xoff.personal, personal.length); + h[6] = readLong(bytes, Xoff.personal); + h[6] ^= Spec.IV[6]; + h[7] = readLong(bytes, Xoff.personal + 8); + h[7] ^= Spec.IV[7]; + return this; + } + + /* 24-31 masked by reserved and remain unchanged */ + + interface Xoff { + int digest_length = 0; + int key_length = 1; + int fanout = 2; + int depth = 3; + int leaf_length = 4; + int node_offset = 8; + int node_depth = 16; + int inner_length = 17; + int reserved = 18; + int salt = 32; + int personal = 48; + } + + public interface Default { + byte digest_length = Spec.max_digest_bytes; + byte key_length = 0; + byte fanout = 1; + byte depth = 1; + int leaf_length = 0; + long node_offset = 0; + byte node_depth = 0; + byte inner_length = 0; + } + //////////////////////////////////////////////////////////////////////// + /// lazy setters /////////////////////////////////////////////////// END + //////////////////////////////////////////////////////////////////////// + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2Exception.java b/src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2Exception.java new file mode 100644 index 000000000..6e1b677d5 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2Exception.java @@ -0,0 +1,13 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.exception; + +/* dislike checked exceptions */ +class Argon2Exception extends RuntimeException { + Argon2Exception(String message) { + super(message); + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2InvalidParameterException.java b/src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2InvalidParameterException.java new file mode 100644 index 000000000..6a6678972 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/exception/Argon2InvalidParameterException.java @@ -0,0 +1,12 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.exception; + +public class Argon2InvalidParameterException extends Argon2Exception{ + public Argon2InvalidParameterException(String message) { + super(message); + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/model/Argon2Type.java b/src/ext/plantuml/com/at/gadermaier/argon2/model/Argon2Type.java new file mode 100644 index 000000000..546051a16 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/model/Argon2Type.java @@ -0,0 +1,10 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.model; + +public enum Argon2Type { + Argon2d, Argon2i, Argon2id; +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/model/Block.java b/src/ext/plantuml/com/at/gadermaier/argon2/model/Block.java new file mode 100644 index 000000000..a7418dd9d --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/model/Block.java @@ -0,0 +1,81 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.model; + + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_BLOCK_SIZE; +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_QWORDS_IN_BLOCK; + +import java.util.Arrays; + +import ext.plantuml.com.at.gadermaier.argon2.Util; + +public class Block { + + /* 128 * 8 Byte QWords */ + public long[] v; + + public Block() { + v = new long[ARGON2_QWORDS_IN_BLOCK]; + } + + public void fromBytes(byte[] input) { + assert (input.length == ARGON2_BLOCK_SIZE); + + for (int i = 0; i < v.length; i++) { + byte[] slice = Arrays.copyOfRange(input, i * 8, (i + 1) * 8); + v[i] = Util.littleEndianBytesToLong(slice); + } + } + + public byte[] toBytes() { + byte[] result = new byte[ARGON2_BLOCK_SIZE]; + + for (int i = 0; i < v.length; i++) { + byte[] bytes = Util.longToLittleEndianBytes(v[i]); + System.arraycopy(bytes, 0, result, i * bytes.length, bytes.length); + } + + return result; + } + + public void copyBlock(Block other) { + System.arraycopy(other.v, 0, v, 0, v.length); + } + + public void xor(Block b1, Block b2) { + for (int i = 0; i < v.length; i++) { + v[i] = b1.v[i] ^ b2.v[i]; + } + } + + public void xor(Block b1, Block b2, Block b3) { + for (int i = 0; i < v.length; i++) { + v[i] = b1.v[i] ^ b2.v[i] ^ b3.v[i]; + } + } + + public void xorWith(Block other) { + for (int i = 0; i < v.length; i++) { + v[i] = v[i] ^ other.v[i]; + } + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + for (long value : v) { + result.append(Util.bytesToHexString(Util.longToLittleEndianBytes(value))); + } + + return result.toString(); + } + + void clear() { + Arrays.fill(v, 0); + } +} + diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/model/Instance.java b/src/ext/plantuml/com/at/gadermaier/argon2/model/Instance.java new file mode 100644 index 000000000..807654466 --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/model/Instance.java @@ -0,0 +1,88 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.model; + +import static ext.plantuml.com.at.gadermaier.argon2.Constants.ARGON2_SYNC_POINTS; + +import ext.plantuml.com.at.gadermaier.argon2.Argon2; + +public class Instance { + + public Block[] memory; + private int version; + private int iterations; + private int segmentLength; + private int laneLength; + private int lanes; + + private Argon2Type type; + + public Instance(Argon2 argon2) { + this.version = argon2.getVersion(); + this.iterations = argon2.getIterations(); + this.lanes = argon2.getLanes(); + this.type = argon2.getType(); + + /* 2. Align memory size */ + /* Minimum memoryBlocks = 8L blocks, where L is the number of lanes */ + int memoryBlocks = argon2.getMemory(); + + if (memoryBlocks < 2 * ARGON2_SYNC_POINTS * argon2.getLanes()) { + memoryBlocks = 2 * ARGON2_SYNC_POINTS * argon2.getLanes(); + } + + this.segmentLength = memoryBlocks / (argon2.getLanes() * ARGON2_SYNC_POINTS); + this.laneLength = segmentLength * ARGON2_SYNC_POINTS; + /* Ensure that all segments have equal length */ + memoryBlocks = segmentLength * (argon2.getLanes() * ARGON2_SYNC_POINTS); + + initMemory(memoryBlocks); + } + + private void initMemory(int memoryBlocks) { + this.memory = new Block[memoryBlocks]; + + for (int i = 0; i < memory.length; i++) { + memory[i] = new Block(); + } + } + + public void clear() { + for (Block b : memory) { + b.clear(); + } + + memory = null; + } + + public Block[] getMemory() { + return memory; + } + + public int getVersion() { + return version; + } + + public int getIterations() { + return iterations; + } + + public int getSegmentLength() { + return segmentLength; + } + + public int getLaneLength() { + return laneLength; + } + + public int getLanes() { + return lanes; + } + + public Argon2Type getType() { + return type; + } +} diff --git a/src/ext/plantuml/com/at/gadermaier/argon2/model/Position.java b/src/ext/plantuml/com/at/gadermaier/argon2/model/Position.java new file mode 100644 index 000000000..bf052ba3e --- /dev/null +++ b/src/ext/plantuml/com/at/gadermaier/argon2/model/Position.java @@ -0,0 +1,22 @@ +/* This file is taken from + https://github.com/andreas1327250/argon2-java + + Original Author: Andreas Gadermaier + */ +package ext.plantuml.com.at.gadermaier.argon2.model; + +public class Position { + + public int pass; + public int lane; + public int slice; + public int index; + + public Position(int pass, int lane, int slice, int index) { + this.pass = pass; + this.lane = lane; + this.slice = slice; + this.index = index; + } +} + diff --git a/src/net/sourceforge/plantuml/dedication/0.png b/src/net/sourceforge/plantuml/dedication/0.png deleted file mode 100644 index a03ee156b2fa5b5c6f765d7c9b9f52aeced79156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5643 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 diff --git a/src/net/sourceforge/plantuml/dedication/1.png b/src/net/sourceforge/plantuml/dedication/1.png deleted file mode 100644 index 91edd9a89b35de11702ad1832eb9afc75e1e86f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34884 zcmV(lK=i*Z>^O|LT;EVNUp~8wUWcQVepRuM01&A5rtJ`i_M-nmxhnKaJ6n{E(fh(T!{qu~x-xo&>W>*YvPBWc`f!y3ra^2RRhsmca#zm#?lA4fH65 z2qzql$Acdc4~X$ZWb8Abm88AnMhN4Jrgrd{cw*#=PEIStD}5y)_iBC5sw=q&4aTR` z{Y`SLgT@;9N`IHH;e6YOTMivMQ*kNdx2R52x)o<8%>~VCyaL_lEzyO{_M;U=4Zfrd z!AVG{kCOvu5@7j{?UC8K3&%N;d3lY)8?xg&Oi1`CV?)2jESi`e1_(=5TXEV7IQg{rc>1H?UB6)S$;p3mU!4p1a-ewYx%tB z_^N)N3LVOab8~Dkk^Dz{K2gx~GN?WI%%~<~cEUEqtQ}=H!%UJUpz0&jM7VAramsIe z$>k&)quvCWPO6%cP|mSYJ5?^qeY};KouXFOJ*w1W0>|4iv-ze?z7^-u0rBwYj5K!~UjEh+z3 zcwb72B+BY!ZlD-bb4RFIB4SV{Am3K_=sCXD35^i}L94{X5j%L<`m1rzp*_x&e0#l4 z?cW_MgD6gZsY|an^Nb#&@$_I`DOw*5AB52M1Ew6;;qAwNPS( zyRwL#WOuUL(%j->5=n5ohvT&xeqt%I0^>Ck74sln?KCV-BSV`Z49qkTF(s-gy9AMP zL^Wc0vb)Wvx{0#oL4#uUD)hfbr~3M{cn;CWCUuaKab(JSDH*L8gSS~M_m`M$fD(92osmJ#ex7kGI!YE6FrV~smb^?^MpVVv$?mA}7uNWWL5f|1@B zz;CaYn*V~1nIS~ppen+8NR2TO@RY9*$d}$6o)H$LPcPx#@Wfr+6fu<~mPAYdzd7}k zmz-Kmo}oB9!N*x07!OBxLE470L>+qfki#A-u2C_6V%KrBTQ}pXxMVzHOIjuU+p-Y2 zop+0X&Z#b^-0PfPyeXIh%OjjB8RejnBLK_Lyv#H-nj_Emq$c~BV92R&+~<09qUp2l zd5Nae8t*NV+{r&91%9vRERE721yV&4^S+H?5_~+0Gmh_16?tM)Df6q8>bx#pux4=!W&WnQeU*pT zb&T2H;$+DMl3b%CtelOAUa>2sO>c5B;m^|m60nHLYct@XQ-z&I-~zlrDzNE%p1Q@k zdwa9d(ZhW;O2-+|g(&C(7r|M}7h>X8AitK#`MXCzgA`@WXMD8Heb@Uf|IbG~6%z=+ zUfmFAT!AP1GT0Y5oN*JK@IC;hGlQx-MVvA?`jkXs_^`fojxy@Zd!ju(GLzGKK;iUS z(wXQi!qcN0IyQYaN>P_NBM)Rp8{HP&gZ7D3_jq`GYM@9vGT-O;o{fqm9W!JG4p0#U z?d*n<6VY9dj3?cpBvDwEhNT4LoXysZ?9mn>Nw=2E#(Af$Qe9{R97f->YYT9U)Nv>W zk4Wa;TCe+?v|5UF?A#DAxBBU>M=70M?J)-@aEs>?j%bvat_C<=WYBk&z&6j8!I=EL zkYF`O0~hDh6ld(p6X6PU?I_2S^<9jQ-BY{}Kq|&`PCFw7P*PVo21Ok4ihREX>u+Ie zn1c^sGYRhJ7+qMKhw#=Gfe=3n&t+WxNY)G$io&P{T`UPXql2>R^X;x~`SYEGO50eH6z~6wE>!Sw@$uuX2|DWq?-8RRo zIdZtzpGN0C!Tln9NNe$Fi)ooc&n%^G%A5@x9jhP+@DamT{v@Dyyf+&`9nwNIm(D>N zTHBTs(7pPqoePZQCq$&M35_iSUp{F2to557v6eWmHRsc(lhjnGEdWL6!#8Ni=kpNG zAfudnqN~1M^OVOo=Jjke;VRw<5@~l@6JD+DPMro1{I2y-wpy3t&VO|2%9yPP^zBL5 zTubAF5i!YbOCp3$?W5iN7u&2OpW|Kh!y=d!KfQPrPm8>D90<7fN}zcYx*(rO;WZ>P zc0#}ma>%?GUp>xj{WSHOO|&Syu}xNpU_(fq75%`7li`_Y>WUJSB6S5;^u?PMZ#!Ae zA++oii9JQz&)HOW?Do-mJ3gdF3EQUlTiH+=Z*(EC?UeMm;CCh{2vtv`;2i;9N9*NY!-~r$Wr0a>A1i63~4&|_A~W?gsE@`@?XZK zEfO(M89!TSP^52hCp)?{n69Gy4II;Xxrdogps=Xm6;Xdo7r{kcu7H;o;{DN)4JtLe z`&gPOS52)+#+cVmaqn>A0POnhC+z4R4;d2s*th*oHZDT!mMHZp=%OP?{iV)n5mG!u zu2>S#{29{O(g_ZIQob!27ja`?h-(tPBl>R47DAw@zAhPgct|{N>?hIv!vY_Bz4mOS zIVvdAhqz2ME@N_7bR@t_a;FEePs(Ivy|IC6u;adpWz3G@m&VU_Pw?-N0)RUY7P zK{`P;X>mG*&5gpTnR9hMdiB_-^o?F=b;j+v<}mBcQzx+0*`6FH%dks`0$ z6Q5bWgLA*ccfN^uLwZz%R(8%e*anCBsE2tm*Xj_1VQj}=hlMeWPI}%wq#iW{QQi_w zCI2o<8V;F4$+~*acw(<`AXZ#stgrt1Z^~pOdwV=Sq1`GGFkK41OyZC-;pR>*4r6~& zm$<}7av)&U$u(dx-(K}sygj@*^jV3xzn9uBvx9%M;}RHrArmGdwicM|ckh_Y_1*OC zd!o(_oPB>sSSiE;p3gi5$?={N$qqB;5#45Lh_uJux%7-D9Lt4lp{s9KL(MG*mB1_# zZf^>#Ib4f{6OrBOPu0BCtwf?w2wXY_8F02#OauEmpTK<`-)?_^ z0rdHI%>~iL`eUFE)D8!W4AU7vD2S9{VifJnzn+7UC-((}6T*>|vt_;;2wxjKCCsc$ znum2uf>1++D}1yMY$lwJVYj3Go6t@BU5A`Sg~VG|-yRXt=|UI;>XPXA0ahUi`Stl* zH!V`5_AJx?V7S_}N=R2A$%FjZNvHhfX?oVtA)wjjov(GF*|bgr%#Q4jc(TJmr4_;& z!rPdjF4?keMTHX5#yi_&zV;IyyScg|x_pUYDx=^iThX1f`txVHCQ}+OJn8Ud?!HLp zGm@l&*7zZxpLJ4sn&Me0@@QDDPTZl8!M|}-Ygc#0kZ9IygD!7>R*WuO)S{HNmhOP0 z)dA+M1b13J+4Hu_A1yX($1x7Y<@L16z}9~_AThs`)swPH7=F$W*Q?@T{O&c)SIWdi zt?n=Rs!4WZ)!PH22o@E=-V@}=K>XQ69SvP|ZG$qJeBqT6P`yLIMoNTNC}s_Yod7*> zflKGyq)gcLvRrNNOs4s?mjYuU8pHE|SD~r7aK`PtA@oTLjrS+3Ox0Pd43DcxYm)uD z!h0bUSwBNx?;J`(? zVUr1ESdWF|@yHtpwR;69S5RkmFMYLkON4W%S3{yw?im6a1mGbs^=C2SB3|AC=M`#6 z_q>KN-l-U$%wf-n-8}3=Kc-ozO}NggA_H?#k*7G%pC3>TIqc9Ugo|6OA>fj$vNr2d zh~A{dW*!P!2JYXT7FmOQ>;y(-|GqJ3=C3nOcaS4Q1)9408zS2N-=qEkwu5#uEe~NC z-(zSm1|y0K#|Cin3!IDm>qB!6LerIrv*B8x_fCb;BfOFjzZ6KQG~#ZCQaC@kP~d5< zj+4!2s5!Xu=%EEL8@VYYKf|mgQ)X3d(0zN`2{Zj~ zTR8m@)4F{k)*k$7qF@z5Q*=pmTqh5G_iHVr52yG0D~myq2N%ijzD520SLy{3$}Giz ze>lL%-PH5&e$C2_sUJ52X|A7E z+Ujp+P@CtsdIjPoj=xovok*cCkG;yW7To30#yT0+q`5j)TN_Kgl2g`aS-MEM!kzH= z#@!@%wqCOT$mDay@98K^NTjoYvmZFsqRr~R28OzT$xvn8QWFXUP)@X#M!(qfT8Jzg z0vP30_g}vcO5A&ZRnJ&Frc(Bi=URh{{8ArN!8VzA5pc{iF~4cs;d#j;5*Hnt))fZ? z*<%WWUjG%uQQfak8=LsCc;p$gx<(Q?XMwDnjOMklY!M43DR}Jpuh%|$lF`aOZJ4cMJv3xd%>*+PryS&7 z;tNneIY*SVdCvkfV)6I7A{_nL0G>pe)I2)kY)W*b(8meMMyQFJVNM~NeYyqVXt{YI zx~aG_;f)5c)DN>o7VVGwV#t zImARu2Dj09GX6lIBVi{(0zmRdzg6gp$Q;`}tln_QWv^ z3sBL-qrL&KbG@jBVDQGih{q9>EuYh3G$LXX3C-~JkAOIp&NtWRruC^5e*F!$3+tka zk=LRxp&PnGsMh(#^k1L4$cCh@ zC#j^o-9r{IH$lyGQ$vhP(?C!@T2KTAdxc34>Wf9>(GDRcFA4Ifbz-srd@4t%x zPZ3o{gCqL@s&)lLB+Ldp706AOeW(&6u!c>8{9X;|X5WshFT;{f;ygFIF{l(8XY+AnTpE2mS%{aP*+v=%Aj#1%B-x_isvzDFbGKLhpD;Q+K)?*gdR{7Yda(a?#B`~5 z(D+7p%_b+34u)#jEdo_^t%E{)#5djqIK)%1dp8h(R6Ua%#9kjf7ftJs_io_loDmb< z4PFJQ;w0P7UwE+}pl2S%OiCt@zh|I-alc?}mR`;_<}VWd>1zX{{Lt{mAw_sBbJJ{P zvgcWl$pR&e%_k&Gr13h@8()!em^3xUKA2@vdC7q!iH}7u4BlMFCI6{Dtd~S?c-0MM z{ISkf98*8vVFG}Yd&s81Hm1`aXGOVOi`O)y4i?#Ta=jX4TVOdv*!^`_N7F<+)k5-t zlO&<*IVtt!KxKjowiioRye`ndidqZ4*V}a4T=<17()BqL5>8+SUL`>+&%dq!_G6V1 z2vPTh`WVKQASw>Gda(?TmhWBYW4rdyY=M1N;@FTqqB@F;vjNna%2V*hAKhkSPDM0y zL+20V1o^w8&8t$JGcCp|rvugK`>iYB`08{*V=Sx+J&n)8j-hp}?&FqYjx16kc5==U>U1l{veyuS>uTSBAKaVP zDDGXh)z>9IG?!EyiPnhuM{Zln=|!EC;NP=$H$Bcaf4UScINT7H(_whtzr;He73g^x z36-!5W7wPTp}AHWFx`^h3n+n>(;}tf=mB!U;WI~Hjb2!)(tzNroZIk>QoGyt?Qzz! z@(!c5r;%Hk>w{{dOa(#4k`fZ(hay~w2AHun``Rk;d|p}k9vxrXDJejx#^8K=zu0*p zoWhB^r@Oa$lU?JRL)a890&L8?sZ6O>clsK;%al?MNRahr9RJFB<)bM*-C_4Vjp-Mi zy$zZU;TXY4Ii;i=ge@#@F#u_pj_x$ypbE+soTKgRjuNQC15Ix3J3isz{MkIm*fi#g zLCEcPGL;)GHfb^Z-6z`ob%`uT-;W~jvcR%jl7b~Hg+Nzn@tT9hmj(RO0)^*Yx=6-u z7Y>zb1DFm(tMV6P;KOmqvk9>QWKQEsoltN@fMTAkMKCj&$gUKJlzoH^n|5wrH&%-Z zhB;2yp~l%+jF$yvq0m&@k7oz6`;hk|)CxnmN%6NVyA`dJ+C~`o{kP(IN@lBL1$Rk= z#jeXGMtD__c9XPl?TSYD%0&Y%#4jsw?wmkSr}tsieeQRUx}qZ1r%g0Dh}^t1$`sG$ z3F2z)w}3y$P87|KDuAQrm7xSH1@2}72UIvp()+qCbF=6i8m zKlVvT>2!t-ITm@Tsl;!mA$gNZkXyywONdZILYkv}HT6(koKnX%vrks0Uq$Ciio)pl z5R_PaSBIDIZsYzKr6iX==7tXp8y#h`{1v(12ZxJG>GivjO+h~IRJRw{0A0n8-*h0+ zhSl~U5U&)otrK~ImhE>S)E-JY&%VTp>O zv*8Msx8pkkC)sgqf6^jlvoAOtX|SiZlqGUuevfaD0|$3PJAE~?d$sMUD6nnC*=&&Y ztfZ`Ee&|gS6s}%@fqXLjU+DNc-dIM_mznQQ?uM`@6~AYksM1YG2x}&4OvNL4Cy5)K z&dbVTT>IZ_LY;I#J~iVgny5=$+}B_a@KlnKLK4MNh1=0!H_n_1yz`nNi;{={m?cL` z8n`NAS@0#yI^WU1h%ae*_;6+1>kN8(lhOtE61Q8!2Az=)=Sy8 zX(Cn!bvuH{EAc94MfyTHFSCZdE{?Ld$;B0x!1A7iR2`q6++|rPtbKUz70tz2$6pJW zNyWsWB$`Nrq7G~#g_Eo_|L|Tm-Ua%rdgN*6f>&4oQXIV))AT!$ic!(56Rt4c?L1gg zFi7%)`9_T6zlkt#FloO6xzJ2-o>DYDjTxNY6$e;|mv0Xc96^)!@a9%4AOAU$M3QC` zABzBs8Zlhh^C?p<3J?9Q7K*h_J>&JbuLcO7aA$`X=v+PX=|&jKkc}bOf9;g2J~CR` zR|G(omV>O#z%K<4*nnui)PkiB3S>j~%VR;FF~JqCClZmG70n3`j=T|PFfH%i6=g+c zwWcr-GDo{R6L`N$N3$s;=2T%aO_^^Bd)4+A`&xI9M2;-%m<(M!G>ec+UT3s z6J&OEdIttw6A4@Ne*9%6hMNL=4c0_i4ROd*D0I>D%5x_q9Zj#7a50%sWInpWwWJMl zy|F}&B7$YxJ49@HK@J*~5I%JOcUZ~$tD&=8s*rv78R~9_4^9&Nr)A7VX~DNoT5QFp z)~-9PIxvb%@EqP%0^^AQ)7c+GSP=zx&yMbjx@a0b;?=i-t(s0LNU#wSm}IQ}is-bz z)*+xi`|J@m-9>-lPUO|yo~PM$Jz?H`@FpjGNwRV@sUuGw&h);V+?qU=bnZZg9R8X- zIlpzNQxhS7)p^d08}?xV+nP>gtm}~x^A4&<6uyD8$=`FL!@yR_PGxvu!_=oUS?qN< z?QVd3jr2ZQbIwvqOh30yk%wwR6VHOgfzy=u9Q2DHD%q2C^BZFK%eA-dtt}VFL&KpR z{b~OhqaUyrK_&3Mi2sK(k|WoAxL>0fmB>KivMzP4$$byttJVy{LL{xY)QA#U?@w9n zfD2x)q~Z{7rHL=kF0-iTJ=d>MMJq@F6am4Al(OOrMN>HQYyHfpy;$tjO}Km;fL7#k z7&T+?nLtu`cbIM)ot>&0Lo>h=bE(jr7&{pCDieYy4lafh;V=rJEe7~h!9t&UOss?f zHx@RK>Mh9vl81>O(Zs5PVSa);!YAU-t+cc?ka=#lpgdHA_@dBoMx*I*-P(fOOHz^< zz+`GdGjSw6b8Vq+219DRx}bz#I8+UO9ASkn^$Ut8VjIAv+;?rbFz+epZ_Y>B96V2o zG~)i;%JDY%#8xY7n#E&D%z5qvdE!(2`c9m2%(LdOX`x~UZgS0;f0tr*MhwRrLhBaj zP~A&WS7d$CB9tZZ&YI|4jK@WWL(>Il?Dlec5cp)(6@)%XXfpa$&S6MscSWfj=?Xbt zw((X?$dp5lg^rP%+CdoiCK$(EkRUo>z4;t8@p?V*ItA?;MZ zfwwx!;IQSbMLMK*sH^rYzPJuZ_``kTP-ENAbBRxSg*6u^%mTt@4I(3fFakd z_Mmgu>%|mrx0-QA>VaMY%$bKef3nwhP+b(6bTt2>%W`4;wlly8)Hw7+i1JMs7d0zN z_@O2T$#AZkQZYexo1%b{x6gI#3|j+i-*`~lDwJzjI)}PTxyMTMe(3`WA|H>yWpXr* zwEmh1*6`5i{Zk;vUpV3x05A6RZ6plbEIIF?DRk(m!JQb!f;qZ!d{4K)zoXt2`|hdp z>=DV@q@m8|T4l2PI2P6*YwGf91;uy~G?fWwIy@E^fdtWzHu)DJ;lB&oup<+T9;k*{ ztg`dc?`IK3vEC6!zj5{(f5m5dnatGDY`|v;?uwQz8-Fa?x(D*OBg2ABKC`$P{{K*V ze5^vq&ZM3O!ua7};t8W#!t0o)b7MsdCF9Hpa?w+o09 zVcJ*qdlwSPWqT3I*q;!a)$;wIWkkr`QZ+;vFpXNwT0nSoQgVAOD&kErJRtUPev}n1 z=xKAD3Ol46EEr6!p9to}0+ZA=u}^p7YV+Oc^p`OVqd`_VL=3DiPxh%5q0&Wy&%!VP zcB7%p$XEV;F8z62B64c%L3e+bO}4isLyXrDlPCjJ-qZ(Z0FR>3G-C>bAsM6gunI$a zO}KK3cVx|t+q=cXa^o6kZsEqFf+xLHQO|w}w)*a#Id1vaX0@$Y1eGoJ?etMMt;HI9BuY^D0q^I&Ur+z$Xf;s5CzEKCb7Bf)AQJ9@mO_GN1R{n zvb%P%hw0kBk)Kxvl*FlQGx48k&GSKAS(|_lb@&hVV?{s^YQS%+rmY4A^=gwF0zjUC zecgr^Z5#XyYuvAkh`UYtFR^Y(3X};o$O7xUySD^)%G)8WBuc4 zRIiURT`EtRZai}Ry;Hm%(reF<$#rd5qk>oY+Ni2WdJ64kLLvF~e>%3!3g>UX#Kl(1 z(!EWca-NhLu>jiNbgeUdIQ}$)x}4g9%@&p8id`JWGn{2mm$-)oA&DlNyegVrHN#A3 zvH0*v*5IG;Xv0c0>69cz!kyh2EoMl5=g}`}Fdh;^pC{W5qpmMX`#qXUtrs$|U{q&; zB%m$@Is)w4ntwu?)Tc7D*`v_|R`OY8*$-%<;^KpU@;$9;@7810kIJ7&FRzpf!(6aK zo+A@Cb&n0ndYhLy44g>6ALQ%F;`W5(EhCZ#G7F=%!=9WGsofx^L5#cS=;qEyTILG9 zEwX=|O48$q&VUZ1wng$hdsn$hV+Ikkl9OnlWPSLTIV)Vq{G^nSv}Bx#BG-E5e@lz1 zKKme%O;5?vD~u-u8_HJ2;PX8^%4rx`)PSl*q$gWh`_uicbs!sd|#)4y@ zmdoPT2;xvlK7QM?u5zu|PTe0d;H5NFbZ8-UHBL`iLQ3-6w5NC&k=DDjX5X@g{X+1h zct6#^^FhQ$^L3JC1TL3YoF;fjFO=VuGD2Tn*J-|HI+@fHysM@1%=c9v2#l4D%2)E8 zROsA=6+~?jMmNX#!>+sIOwAVf#=YsMz>ozQ5pJkJqm zkq8SFR!v};y?CE-=H94%mCLTW6x^(71LKoL<_ygO6Fb{n9RLDpauiT1mV~K3gt*WV zGUW^nf7|B+_~xY%kON(1+6oSsy*SUeY9@%#XBo{8qI$Q7@%1BaAw6wooqS?dgjQT! zps(olZsUX0K}v#%ho}{ubyG!q|7+K7k5_=|#!S1K^5rBFJU*&~m&lJJ^fVg^DF`qq zXmtn(T;6nwDV7EU5H3AlHNP)CeX(-{Bpi6dR8K}Wf27OrlUuZLK)NM47-7{x5YkU{ zBXtCufj~z6H9P4)1B)Ux_1C4}NiHP@w;oS=RP^xu=jH|H!9qAC<&cmATp!WaE128v zP#oWBRB{(>9$hsvPN60km4f$M2V7}2KdNaV0wt>k^TxlL2}rWn7GBjs5>&r>;B1$g zJn)?W?Z@`D1-Hvk#iX@5`rq?8$QQ|*IZfg0r)j^3HCb9 z4g7t+ZIC}h8G1?l5B{)cSU-zpo1hY);&`O~-$L7n`R(N>{}(q1(9_UIaf*{DvFt;` z0zi|h$J!`;P(4-3vY-vq+Qen420p+An5t?F1d90hiftt1yHr5 zS4Pn}Sciu0k?<0HNNo9)F(hP0O1>KWhg1)|^U1|GiMa4-;)8r=lY+>Cg0!b5o_}#U zcIAq0xQpKIcT+w{%mHR;=13 zyp;XKG(6Hru{w%}9Z1I3OX{g!B%1?Dsrve^ZJ}R$Q3$mp@ZDyLp&T;f3oZ`8VfGS> zK(ROPZqCGJ%g5P$tWNS>JAUi3@|X%=B)mD{U!ZPZye)cl?&{OH#LtdiL=E7Fq}~Ta zte0^StR#zbcFKkmEv5>~u#l4PG%z6+!Z=5Z83aZQBkj!ZcAWGnvXqEPUb{ zF87;GbjLWbheQKSReZ7%o5z>%XT=DTlI~UFR<@1TdYNizo(80aUKN(t-4&!bCaY z%atH@@trU=pK*BJ$cd|3$jG=ig7!gQB`%`vf()gn5>tBq%yc+t*LD9h95CUAu2D8z zAA^8E+tB0Zay_t3wQOw)Tf_Fm5zoh7;IADn`f9<4h$L|HjhqEIVNRX7 zn2k+{iMq@@IYW@#G~y)zX9yyU3fa92xX7f4`AuexaYuc0E_Lse5ev(=-v7i6{vAdQ z;x?nhh5T4SDk=6$l-ujn5P6i=NsIg8sc*jvc{3l9w8$1{y#=>c|HGffJvF67S+`8) zX&d;QZJArzm%;+N`PIjYXRt3H2)b&LPf2f~f#%KbsUkLH$EpZ*j>5TWmDM4!`4`Q? z`J>Y6)U^*U4Y{GY%7r7NPW7tve?&dr{S$S}mJWH_4EytT|U0K48IQRT#QGWp;Iu&l{EggqBG`%PO zJnMFCwO^9(!!y31aK=17TrY^8em>uYwNNN+2oA#}suE9mrGKzln;439=I_}+0sM?< zP&=fYQ&b6H!S}F&N#kD55y&$HTs$ZKuR41vHWp1w9$DlziwF4p)1qkz^;Qmc3jq=x z+G(ZW)?Js{zf#C3IO-qwaJ4cD5ye}59hu2eP{~P)kQ7*j#@eZz?-k#py!M!YAlHp3 zq}z&)5*G6U?0gB6gSY&u1aXLaat*EOiQzxNScAI`Uaf04Z`T3?oTZ(FQy}qYT{Cgj zO_qOyp#rU*9SJ%)w&QmVFxB1)SS(&1c%w`)mU?M*9ixeXRMbiM`hd)$8x3Phr4@pE zil!h1r|Et_+2FiHIt~Y)uV%KchZ8cO5qj88_l1)#-bwlN(WHhiJi_;^2BM4j<-fVT zhpWzu?&Wnjrg>e4?}Ird7MZ)lNtuJd)M(OIk z%)LD&p@9riLo*0^s@L;q;<+UqZ~^m`Jk=}Kf-o$a%EG5g%$otkZdt$EI~sH}B-Hwm zri`cDYH;T3B3Xk6b4-kRmsZaIu=);xGT>w~AgzX#kLy7U`wywiB-W^Xv1$^+Evj9Y z4Na}Y__-QLWcH3D#o>J8jzPJYXobTzv&m&+bXH!Tcl9K~IREm)Y)nFm8GBb7GV&q&OpQxZrdl$R`7&AXgVzbU8&E8D)PHjkh>Qy^G>6QO^_GZKff% zx=^U#C^|SH*ziupa$ccJg%)Cxm5|M^pqWJpiPHUVm`&i*YV~5m&F<`H;l&gniDRQf z&A7GqGKoxpt27aX+_--66bSLpvKZ1E6?QK-JHJSq5)nwMKMoA9(e{Iyh7K z@@mw6bU3VN#iuT17jjte%iS-*u=CH5D##v?e-cIRP~itbLR3^yx2%haT-dN--Z_#1 zdI~a8qJcOCK$f_q3g0xvDV^b#|B>Y2?e0%Scp=tyT)ESm8avmqn?6Xl_EPsApIICf zjbA|&msTRgnLO{S)Pku)YVsk8V$g5F8&lMc2n1O&MSu{IUp3IA9Z-0dAB7M|mg3s- zB^OzM2@`7M+%|nunh|{v1{^1=Vfk1!pA?(<=An04Lo{S(2gY#;9U*1VH z#i>ILA7G-%FktI$C(r2sqf0Z7?8I5cph!UesSoMdgKEFKg21J$>0zPVW|HJa@F);1 z=R!?s<@>u?T_v{0uI{|$&z}ANppTY4PfI^X+|OU<8x*za@2~kFG`BJP87CpYRc!#= zKfu~mKJmG(C?kXIBTes!b4?3u5gCq11|lN374$e(r25M{A|@8D!m z2-n6I%qIL{N+`ox$VHHqA!qNV6bKHzXK-=fD-%4z)qyvI;xQ)zxG=Ds^pD?vo4r5; zWl1PDcC481zz$OCQj2*bPJ~+7%wH`DjtBZ1p1+o7LozsF$4C~md6h`AUx7+tJe+FZ9`G2K+{%6Sb+}moOTS*JA*Zh&q zbP)YU#wGEY05=b>`eeMaGs|)F16V6rP;Q_mn$S!XEm1+H2=M1?R96<_wZ83JYKM?J zk7^jEnjF|tYZQB*)~=C1Bw=fXO`!W28X9N!Jq=k+N=se{j|6gvqxM=DLiWucA3Wk= zakhTLkTG^Cy0}w_6SP#W7Tm@iD#@=XMp|~twlyp$NRXG1fBl<`f%n8D30+!wfuA^? zq-&9R!~N!;8_pC1>{TH@(shmwsT&b(UJ%mLPkprD9EMq_qiGb&q^It^Mn0#W(Sp{; z2?=wjq9e&<*JCT@TO-~Sab>L z1c8zbf9)bIsvv+5z<;Mt=_QRMKa{aZIpkO`Ch_oQ1jS1P2ZgTpTv48*ogS7M^sDt7 zv*UOX#@txgj1~wqX6q=6pkhx&=d*i*@`^Lwi!EN--4wl|_QRF70dHC41eHUL6c57r zNO&c2X6kUaSI89}>1ng48^Y6V+AU^iTtYmAKL(FTOUleAl-5%MQAas$VQu}6%h!|) z63HzjAn%?+-q7ec$KZz3KNSt0Lv$kFyTsHJWLfG zP6DVOdwZJNg#)9^0aV$C`Kbmg3x_tGoT1rY7b5s4V2(apO*Ko%$Y9kB;BiTOYaTZL zSdlZGY~hDJM#U_IHo1)s+{Aa<^IFTd6ovgb!TA#sgKownSYeaNG{vmc`e1&oiD}kh zP%QcGSksJWvZO8~+szPt@T~nliK>3Yg`cmehI1O1i@m-6` zd7{SU&z*lBzyc_;`ZM=m&`(N>EXjQ$Vf+Ck?b@G7anR5-W`1lqA*4SPZOxbzBY`G; zZ<%QoZyb9nqYl9^B=uy@hJUiTVGKj)eNdJ1?R7MS&3=0n!{NvlF3TQ{BILNtjPNtz zbwYv~+6X!;GA|55Sd&{%g6os^_WyaZFi$JFevvyv+G*uA@ z1r%xfMl@a8;qld2%CY3ZSKTCAJkpptcu6xklnx*LCgb(#|Ma(h3YONZw|oY{O6}v( zh_q>9uAQ;29)82J%ONe*C96d1q`Y7&+hi<=Fa1jG{q?0oCvCX%zj8glwnkX?89xVvFYxAi^7h#frK=w6 zC*kE;ZAP(S4e0V8!T#M9l^(&s#L#x}O?cWTVzNjy67){J;*pnhlUrvgt_}l{{9!@e zU;i$qUqW2QS5;vjt92GQPt*t;fJ1d5`a%1m^p`(IWGtW|_ZfjNZ}=gMaH*tuIY`lx zQzZ5^r*|P7_=6*r`DlkYq#cf1b<4S+0;Eg_SY;P&6jCyP+_%DV#+-$^0Ars-n{2*` zbY2p@w|bkw*X&fZpHn~$Osa=SW}g?I)3Fc4*l&uKddygg3(~&;@AzRQH;^HUpCk+b zJRD1MT76@TUBM!-A-8vdX~Lj)Gf6X^h>@L`8OylCE-9CxWY;5!YUvm=WHrd5xOPN7 z%>co4psX)q-ZNRe%WofYn`f353kQi5yL=Zs*;Nl-x(RsWy_YUWwx3|{zDj3Lth!m( zG2&9h5s@lt`~C4sKe7aS`6HF|G65o6M`nr$@>|ST30E zo1K2PnNDA~$JL!XZj{@6p^tlIJiRUh92i@b2fY{MK#~BM0N~YAiC?wyB9E^EH2t+O z814~0lr)`uQLla!rk`epsfSg>XS1pRM)jCf#Dd(*4pBBy$d!8|2w>+susiE#sulc# z_)exSiwsn^sguquNyG+p@MN;SX$=TJSPylr^a7DY%;Mjvwzm)$XTKjZxI~n5{rU|v z!fp=5$=o&Jdu?NE;A3KGDHEWd4C54+YsGC4h?{3>$%lmOtxMp+fLvG}+}Ih|x~!9{ zmZSmtTpcqwR_qZcFlY*bGKfSj>WX2AH&hASatzU%s-z&N&QPm}l={_JuSISvjf z+kMb3zBI2L)eeA5FEg(AtIu24;cxLS*79Z2sP|KXL4X+Lq!M_oBpHnS1Qrd;g=(If zvHr8`$YmO7tGds8Oc*UeR88mi1E(M}x&(RYHcxqtZ}^mXz$U=`7{xg6l@X@rk)Hqh znVR{3Z*5=$x6o_Wv&5Xb>IX-hW7(W_5u)#Rqup0;Hh{ots`hMPSaWa4ON$T`SB5tJ zb+-qXevb~>$0<8WWkygRj1M9tO?{tLTEit10JkkHMR!fUYxTq;Mv0+Jm0gx~YM5q{ zTEhLM>v$|H5qXK5A!REJ&I2)jCG}(?z~okqnUEvZD=VEZj=Yyij3q(*^O7s;UEC_9 z1enYcn%_Qhpk~%X=yKqs@suM^%kkzE>L;Q5 z_RJ^I^v@Mt9lW52I|{fNI=2OxPpfznB$JV6zgG!f`ovYJO4@7fn6}!|9k#UggJQmdltW;c)*SrT06+ zUSE{7F${it^&8AlHA8^gGfqs%=7Q%jv1L-mH_WYDZ^#TD^+lNjVben0F1(FGX4e}$ zM9(2Il?s4fr-sz!T6ZFG+I-^1)r79$9BQ9YE3gt$&LdZ~Ya1-C027kmV4=WL%^?X| zkxdol>jSyAWTP*i7wJWz^iDe=vylikNOt|<({}d#(V{+-&--L?JR$x$_q=d7p4ONIk?}bC_3SLQ{Mh~GM;5OM>5+{V9GITUdZQxpDB?UH*((wTYGxG? zwb#GOC=B9jI8e->nWjK~E(;w9gA|-*i{$bi5`*)Ckz)}^}AUo4}725DVA(IiINTS)D=Bi zcPZ;>8X@L~$MuFedB=vX3hg)Q0;Um8lTg3Qhd_&f0Ty>+% z@xtO#br!^6K^?%%_~^Eg5_(N8A(HcOo0p2dSSiwkujv>6!@npGoumQFS9EX`!&w%$ zr#)Htnh=ptG=>a~Gf3ohnu~}(MLia02b{;^t2OSB%-Uaf)-CY%Hbs=dw z7NgcaZJ(kVJpWD*GaX88kQ=r>>s{yNef?H+-}RR)9bK?@Ja13GzKEnwxUW|(tfoZV zz9_OA+Lmb+HLu5_&BJBTE!_?I6C`5fB$&&>;=VxILvC>ULg$PD#Y3>f*pBAJ1n_-G zu+}Dp4SZ1yLOyv7<9beDvaQr?h_eqfh`~$Gf#%ZdU*Z#8Wdi+bgfrBH?AEF0)vlg` zJqV>AW9s^~?M5B*$aOYFmA>C2^P-u(%m(zCx_MFA*Yi}CQLy@#NL0F#13qz8>ddE& zQgkcuT!{<#Q*%`(RcNb~C(-tj1Mg;;TTXR*)Z&4GzRX1MX7xyV`3zUP7t#Q?&Ty6+ zg;Yw6O#@0K`}hHcI}c}xfB;n8xZ-uiln;WIB?Vg_(1AypXbx->H`sLVN&q)_=i3 zm(Luk+tPb`agTb(;yNU6mw<1qat_#lkb_QpuD(!^!^pGuPMYZ!p)2VUm=vzO!r;sk zjV*x3(DWh=hThf9D2&QV(p4<;Aym`=22J2CFw)l&t*$QmakbSG&?8D@$+wp7Dm)OO zVK{%vUSCLw5xVd{a*sC-Q#|dKV#%N)WAO^8GHd$@>K%Z*w2ixj|Gxx;Y!vuO)8pC&|9)7gOQNpMQl{ zq7a%H+TTq&{vW?gBnm}`F6MbW9+?0+K*qlie~UBjhnlKy`>a;a28&Z-bz^wjKIBTx zV5?f_D5z#1`Ag6h`16@it`F7!&NQK44+31`J#a-Zo6jVmp9I5|V;dPtP%)-V8>3W~WNhadj?UlEi#mb*m& z=IlU2AMW~xj)m1&_isL3mdQO!Sxl!`W?r{Ayx=^zvx{z4DEqswt;g`CV?+s8h)lE~ zcLC)n{&KrV1T@8T5I4;4Z4*KZrp~XAVD4KnqrH700OkG}s2et_Z`L$@mIt$7MTyDNbd~^+kf!(hz6s^Tknoi9h(<7`cEze zGf=vtxW^$}UHcURS_M4DP~Nw2BSQa{0Ueaj7P2?pQeGHuN}N!sU!Rn_w=K@(T3;n~ z8x)yjOtQEpA{y{Sys<_P;^+te$IUI736}rZ-20=-M@3N}zs1pVEY>~7bxHKIyjuU> z8sm6xMd{&;esC8$QvIxx1?@>5ykJ`p1+y3oR>cQHu;vkxV+)qL)P-)ou0f`f+(gX>7i@JWH>@;!F8J z&pI|@xoW?ggpoIQrgddWEb2-wr>kfz8y8aUVrW<0YyB?W8`u03ul%Iu8AdncYXye+ z%ZEFG*CPV4Wx;)HE%5@@Lneg)1vS$t0s^%RD@H+r1A}&FK=fL?E4=AD@iuro(_)$lzj?C=|=NRXQ03}GG(rso37TG-GZ_OdN zvmLZw71*Xkw@0o5#p)Gy4fBL3@3+}8jY7iWaN!FSeI1E((4?B;6h+Ri)Q3y5iN}uJ z8ioh)4%NskrT(=awp_bgZ`5F!QC4o^2w~XdEr(XxY*KTdkd%Q-Q6W8HnzJ$-qZYj7 zVFe&}&n|1gdUi`7c+A9Y!+oO^K zWYA^BsK}3Ck&$;3#O)9c2-l7hzGZh_6m!1Zh6SS(7n2Db5L0i4s21{PU++xaKx39E zaW-^WMY7Om-E51M@OnXVUHq#-Q9)I|VSP~7Fc3b}D{H%Lyu^JCV1WUP6nKgcc-wl{ zhQI?uCEN69E1?!M%KzYT^BWl!F!rm%y42ENW42FQVuY!Pf+@76(-4_tbzV`MLknt- zXpjavvA)9-I38xhy4E}`p+VL|n8wd3qZ|cnJg#VA*dayy5jR&Q=*g%MF!O+EERNc^V~!VMaPr@ zQ+tC=EPO$CB-Tqyn2e~Q5J!%w_Hn3kNBSboln80S*fMe?9Lb0B z+C!UZSib{h(Q+#PNBf%VCfNdSXxqf-p#2iGE+p-lOhv*Gjp;VxkaZ>GlY?2D9tw9- zlQXYSL!GkHIy7~0Od_1*NU-8>j%-iyk2p5DbT#}cweLeyirXa(uai-qg{M3|Fl0eX zn#QAT7z^Fx8j?jE&^h&f_%Fhv$KddSwKu*W3kJPG^N(mPwf+j~!n1p~k%)^#26*jc zMMl^M!>fLmQC+0bVfN!aJ<2Zl|8T7pIpSIMtznd0@`MBcq0f=EMbPe{l*$Ql&Elxb0e%xML(TKwFzU@X9inzW%)esa{kC@%U)?+b~(x6wEt+<=Z6CI3aCL zv)Mgl`s0?0xB!(LJN!NnKJ6~Q=rPMP(q%e4Zkj6`;yVr%dY>T9`Xv`+Ch4xa5uRG% z`VsGi{1Cu&*|?^5rS@eXm6#aY-3qCj5lcB1QCp@T1i)Zu3(?6*h`su zABLcY6XOe^1h$!Jfz4$;=lwR8RLRRUTo1(2g{q>ubaYTbhT#^YBU*Dh^9)92&3}-S zZN~O(Yj|4_mO-zcZ3F-RPiW6!1dft_w-K)VK$dTd4{3-Etd-bKj`BDy3Fm)4e~xLw zl)oHx|H)+ZR5A{T&_PUjMKh({iL-@DL*imd}bHB5%L+bztW zr-evO8+iTmU9`E(*I$^V?#(K?_cmms^zkKRGvxrtPgknhMvZy6+gj(YB%M!L?@gLq z7MryLhP}b1nEHl@${W-~(dWW|b0y*{nm2H~jFkII_y>RVpH8-PSrJs7TR z$}s}fGkl4_OYm;r0LPjkN};`HhchFaRL9zT4n`T9Ulf;RO=rHil@lVz>ResoLeh74 zj{bXZY%#F?k_L`lmyp>u!BNFW8m+4An33g(ZU(gr+BMHcmO8JKVy@X6+#s_u=rm5v z9&*o~Kj;=n`yUMHeLZB=cKs-*Qk-8j^1>Z(B+_FO&Jb4(Q-M`^%Dx4fC$eCBU$s^XXT)|C$&5cc>(bgIGtG-#3iyJE5 zTYN%)9fC^exq7qzJ4ngwNYRig<4Lb*g&OgZbKLgvxQxL#bmz)YFqf7 zYsFD$ZgIBXOVaXmf7l!1d+YPt6GRt8;ryDu(%tiEzCHFkpbjCIcoqKD^B4T&cVham zP|0yd&!)<%MASkAD#3umz^<1H6!X+Fpkrt{TuDb+n;8#+B=oDiKtn5%(QybI=E>GQ zm5OggrTCQXVzD{8#5i$o?L?f2Q`F;I*^~py9-7ts52B6X&&M^15DdNZ$c68znY(_8 zft~DJyZ4}(zQG?3JR#d(j-dzHKb+lzL1xTPW51Vi457h;IkXUrBBHQmM_VS(b+@+* zWW1XD+QdbT*KP&8kM=%$_wGf2b(~e*u>#S2ykf9-vi|$>c`a!6gXnBMNU8z!czpEm zWNt}_6JJTuKA#bE-dig z97yL=+$KBz-yB>t%|2rF7}`GWOG4~7Q`5~{ z;o#nDnXEPp@H_+H#=QdSR`so69TP%fuy{m+b2g-~}jJcoq~k&AjKUVZ*pLkP!#i z0VDo?4_k%s;9nI^L!9j?RTeqktpGHiJi**(7n7c6Uug(o80mS1M|!200w)798k;oB zut~vl#{msPY%XPaVE6?LCp7SVr`u#+8Ao_Y6sqa1;wfg(`tM?wlbCU3yTr+CRa${G zkpeB4*Qz)}>-`|3JtL)$d51r#?h8q6IPSS20g-*AnxjpdZ{}6`i*n8tE#zxYb|>3GIiX@zeWU9+H$!g+-QNs-Jo&@h>%> zdXQ*_t6}-qHt>6l{L%(o0h^URU~wyc*cu;zNmRvp#BUVlWgNUpLZHh;$?|xXy}{r^ zGwH-u6xRbK7O!zK!SN^_vhBC5d-V9VDHtMF)J3Ipjd^v!vFaPNUju7wapF#c!(?Rf zZ$bhv0t&OlJl(EysS{kprsU^k_K6!e85&7p{vyjMbwQbS6Zc3$;IC$z>4=c5?-c;C zXnWRkGjHo2x8}DOdFDRd;f>ku>xV4(%+s|ux5g5al-t@rt#M+JwQ)9I( zEV8l#5epw~I6BbTT5k`-u+b+P7Ux1WKq*$e>Z*WnZWhWRoKC}bvOQ>AEvqwT1zlMH z74$94GQR`C^{b(g5snBrTtTxW{|!4qfsD^y*&RI!&6^fTm2w3U5+*+e-)C+qRz9CF zafTwsNHZNJ5e}a|_Tz%h z&PWllmt+94jSbhAtRy$zPBOdVd+@e(Jag!-OI^qVu>9$zljsrsY*4FBqrm6LaD(o0AI*hH%jf|s-25VnL%l}f z81#g!(p){#^qcyWusGJEg<2iTb$Hl<2cx|9uE}qFBAn3WGo;d`cknH(>wH7sN3Wzc zx<7%y^syM`f882+ot?-U*JY^jkdDHcU%_6OSc+ruE4-iSeqge<7eg}M?QF|(=`SE0 z0gaW96h|6;7U&8@q0~8izb0sujb#3q_VCdsZ-J*npO?MLwpN}pMrEj7ys#|Wp86I8?S^dN^!1R==mhyOyu6>-vC8`Z#akV^O(XLb zd8AuZ0v}k1`z~;->KlGlSjC!;B4|AKCXbeM$Bfpi1+`c5jO6N=<_)*sbKIOsYkv#a zVbr7pudLCxuSP`kfL2@=$*gd^m!B7YqC_4;THHJMv~i!r%h7}^@Q4O;y(Z!o08NV< zQJ-o9UwJ>{<{H2r6}lzB*I>R`e)x!Ryo94BC45D`lEK8+ySat16U%P_UjyJcAtcw#I#$tHN4nF1`y-X8QxEkq zM_(O7$zwU>Is?BEwXKbR#YYGBT_a(xD^^}x$1PLJka+b4dyrjT1#W+n0cOq1Heezl z%U|y2+#O)Ypp5Rh#0a*S-~xb)ET2L1YUYJ{mM*J0@x;D5LT^u=@tR|N%}vFhQN^0* zLDN6HEy`q@4N~WjNk6S@lgn#)(DAdM#L;k>3F!+d*|(JG-!my!x1H}A`H`2@WZQ z%^b`$(F*`uv-8mK$BlSqMusX&D(ioT1U5J`IKGHbAeL1s{xSm;%J6P%&isE z0tL#WmYg)%n(MXSOPz6AXk5nt_`NeH#2?r|C->^9j>RdOZjzZ}LGdXyz6W(7aBgYN?Z^FJwlDC^|E%iBH=!JW+^b4Pt=7hDmoHrGHiS%1i{OV0Pm;nl2md40u z^?KL3?G(~P0Zv#XbxoHvs(tdbg=KQ*=(93!xDE2APF5aB@E0~~a&CAiY)bNtQa7xY zHi#`q&oZukSD3;gQd1D?jw~uWMDOwFNCc_ikDniDxt_p7C?7dVTPHpBQr2l2$&-yI z=ViYBU9A7A4H495qQ)PjwbEdE_aIH+Vr=VGD(2rXDJF{;zyB|3oZn{eA|9insBMpq zU{F(6ivv){{X(PBNVFf)w$JV70gp8=M>O;;Kl4Wn!*u`&_>Z#pZL^Jlzxfs(0>_lQVHw1;%p`tAf@Dg zPeMQj@Ys2dy<8!QR!TtWT)t?Jn6YP%pO2|q6kCw`8 z`JJarL+1$=Uh!#E0sYju;*MqJ5HrcD<$&zhlB(@L>hTwh4z1>hC3Py8;?}<{Wt_#=K99}ODrGSPs32CSUZ?(4pa22G z(Ddf_^u1f*TsUMUKbSuY!l&%{Mzn~Pq=g>1wHv@p-X|Agd+ee^*(^DPXpVoj={$S1 zd(;zrr{>c-ER>X;HKN8)%O6o(oi=GrH z^T+m2$8Or_134?Ir^T{81cu|R%7J652P>79X+@dcC0D14!(-0yIYafVI^iQ40yLJxpvr-?-!X2V31h z4#2mzk5p+D9ZIbhX>8*fQIQ!NdG>hpvo}VCMp&3LcEcURi-0DozUD4EE!QKvIObo2 zD(NY#ta8z#s7X4;iGE$s6ZZd8V!IfwvS=Y#`2ivQ&6Cr>p{Z6ctADyey9^b5j~f^& ze<>H=ZX?cxrfwO>0d7ry0V~(9lQG+2Xe9)$?L%jpY8GCQFHkoe6 zOr6N8sP(K{1LA*BFGU>e;cF=T^a2~Ef@5skuB6An^Do;<3QZg&y(6P&KGcPWQK9$wu zbKyl4g3hXOjWvXG67#%Q+hQ`#70% z@^aG2nHIz@&h7w$*%v@(X@m>P3xXG*AaSZKU1M2%R>y@G#d)=Z?R%?ci8Fx#W(IrS zk5d~m&Jj}#30pu_q0sd5v$EJ3RCd%Ofzbq7@WJislxa4pw*eZdE&`DIO-JqArs(fS zE0T*1+k_iIsWy4>NG|##JspH42Z8B{`S=lW^!*Z#spae|koA($Jo@ssvifNjO(Do7 zdg+&sgE6uz%Pu|W)pV!p6k}NI;}nj>W9&dpdEc;aJRh?J%TDm@gU|Yty>6Ih?mVD5qf$F;VQe zeQK%YvV4s+f_Eff@4xvmISqK^~gX(vYhzj0ok{yNC{XHm}sK~TTfg9a7Nkw^`dqjm+SLrwM4bC5HIfj9JY(lVL z|4x8a?+{Zb2S-C^<2XPzxovd#`iJ5HE*2qd-_Gu1YaEHEENxzfRLo=;KX1yni=B3_ zbhY%24y9%*!3FVA@eM8HsAG)BrjwkN$%Eo)kZY(DY?cNY@q^Gs!Ave^v0O!#l>_{W zTihaatE1Y0fClbxv8U_$)Yf%}-Iu0QbBz7>zPe75kF)g%D@zJgqc|j} zhG*E|)#mL|OZEOc_Wba+-+i3KLJlOWpf{lPPo2d1^pN>C)1FXL;q`%(`fY>prCl&E z?A8XgEJ&Mydo>I0nr#R2WdR`a(h%J>IdgQ|P6@+^ERHn`%B3VEJ|#*guljO>|3_IZ zG2b&V0W{fJgHX&JU}nwl3Hu6CfVmatSyo;)V_%L|Ock>5Rs9<{UEASnreJYU%`YU( zD3I@>Jnf)-%*=#l6gnf6tvM%@5WPV98MN}NQy$79Thor)muf|%=R*K)Hc6$3|GFVY z4Op$9u{LRZMh39kEQYTHqlndLJ)lOrV$BVr6|`xjk}%Wo)X+j`Nn_`sCfA`t1A|<1 z%oGd8f!r-Zf(~T{2lPavw0-!z>v^P3eHs}23z=W8!lal^=Nl6qtXO4V=C8;=nd@Iw zL(iqAwN6sPC;j(V{lMuxH(+YiURmIQy;CTRvUR{r<9Av-@t9V(X~*L@dI@SDcVyIM>{ z2YO$O9zv&Ef|S2y95?E9^vdjRr1c_mHl_*y;|a+*M?8hd97#NmY^w52)kPfjRxBZ% z%12G^0fa}#h55hjF8epS#t-0&{Fy1e$CW`!kx3}c92ZLsp4pux9!DCX9P6yDX)<7CEG%42%2}_l-J4Vt4KGrk zRaUR=)Zbp-JA8I3zjRXC4F*BpO|3-YLK{?(jGmJI!IAA=KOYB!je~*8uKjV@h1MDR z*x5E#$@B#Wmgl zU&}s!Iy3Y=F1HV`nwU6=19LjzYEEoogT~}ztj^cDe7=)~@#D>Zzd^uF-5q*e2^X%l zjQFo`J|3v#o$uqXuu+y=JcOKj42mc$c1TnkPpO2yRJXjO_ql*(G#fFzP|55|Nc|88 zrfSJtDjc57@IQOr4<|TP7hBl0{inRw^oJw+m`GX*+?dGQdZ4qzq`eLdVB#6Ipy7_Q9a;RluDirWj=ftd;(C9IdW?m;@AqMP0TW z-NXnF!eOkd4sp3fpY78*iAYfvsUe7C&=Sgz5R%`CCTj<**B^1MJI|j_fmXqo1uZ$b zP@!b%GyA2a-g%g79Om~o8V@O}?!`c4{Ge!IZqzJ-2CnUFz+ZAe)rp(GfX}XO+d}q~ z|M!+jBk7Inm%uf%x4zRn)oNI5zgm>sZ&7v-Kzv?=P#|5BJpr;$0x-5A<2!y{tf3dC zM}Ie)(ZP?1h<(!*N+1v+d}V89*XDWhtwmBxHKV6IK!u)cp7niU8XFkX`RNOOgcy6+ zdBdejYp&joxDKrpC(zI~cu<6^Kn-rnoKsGQ_PkAmqyv;MZ-~@(3)&SZ+O+e1iR!2_ zjZ)zQreQ`%8MoS6@_d{^;}cl?m+mTV`+2W2HnF>h4M{&ILQtoa=oc02MtV$zxAd>A z3)$+m;rm3$q8U;+eN!dp1czZMO)bG+o%;6pFtu}h0+K>#sMs@T)Q|jNVuK9f_=}dS zt?B_P(OuX%^y&c8SR9brxngLz&@-2Kg*&_?dM`m{3+YTyp17)lK+D_x+iWtv%23z4 zupJQPAT)L}=-v3@+iBq;_xEx}r?9-UBc1L~d--yRv)E*1meFfL^9S0R-cRcv@%$I~9Y z&p|o#JkL=F>7=Pz-0)17Z$yTSy@H0YVAK%UTwTlYBgc2*=*cA@()h>(lm^l^jjr_{ z;<-A%JM_Z|Fv^N%GZ}Bk0i5`O@Q|#QrysaUGWbEm5x8`MUoS5I@GHW|1>P#;_Wl6h zt9Kjtcp?{x7{cyc9_2el%duCydln|$LXBONG~f)P6Iga7CxPxqWbW-JHW!BW4#~pQ ztQ{LOfmznH0`QVc5Pr`LJXn`6=3GExL{_!k$6{GsQq{y%c6Moju#>-wwrO7 zvos!8_QMqrcdUxMZe))b)8MqE53lHOV$@V|Fp4gC-m_#{)8>)=>d2!w&}^s3)gsj% zLl1K{g29&f%YVxHnjU;ta0>+{#rwyQ%A>K~0cul>JoKzRQ>(o>@O@irQ92O8l8T14 z-d!78hJ~VXND^-$6OYP{@S&lCtAwgYf$nOU{9ycLeHhnnh%Mxej<> z)Zmh$!Xw$LQ2wdDTr_0U!3X+Vg*j_t{dEB)W-mKL2T|GjmdGmg1;) zkyH1)HpXQaiV5z5U;M;2xbUc}ymr``wBs?1MsF<3L7xu7>W~XiIiNqeRP8`8WIetU z3+u*R`taX#zA=Q8;g7}IzK#>tzlKoBH5f&*&ief4G6wrNBey9H@b3erGCkoyvDu2Q z#jg#@Mt1k_fBAjFmw&JHYQIdfu-6aQG!ry|1jA*}A;lnx{wGET*wW{ogD6`3z>BO8 ze*Qiyikm0z{rLTjUi6W&-hxw>ti;%36zQsGN1RQb0dZn8!M6B@kKZ;0mn>fA%uufs z^3O&xPml>&2;RxIirYU7u1s2FmPhSSOawtWUys7dUf{1x6%&t@=2Uo@;!C((+wJpg zh9};V3?3q|85(kZ&9)RqV3`ZNxq{hl19ylvX=%#NWE|){1M!e9TdtjppkE5< z4?|8+g|n+{-wQ`}uKTe}RQSw!j#3LtK#K^9?)ZUKQsr$!xBFnU8Mn6 zRXiT7H<%(q6JJh)^Q;jxs+ob7_)&XUex382nTI~{G*+r9pA zyp{>b!W8GqBJW)ZIrgLHvYM}1?~^HJoQr(()^14|`^(pvIWtG?S-U zK4>*%qRM=XWPREsRqyuvfGdo1sSja3QkU7jUrnR1t?#+BszXM#b7!@Fnb;~6Z3VE# zK9{`sWtIF2ZkKZtX8Ym&yoiSZpo9DtWBBN$*4#e`pXEf#qYvw&5rP~S_SeSN?Vy9v zIMwxgiGT9RRC=07nYZ*%H8G4oN!W_GRYWuc0FhIyhS9V;FqCNSYnkqRxu(3vN_>Ffp2-p}={JT5w zAZiGqDp|9CM)AL%aw1+EJL`S0pcr2F3YOx|#&G_Nkxj=IlMaWSjnhr#Otn}Z#-JaR zwGy5894r34pIwb_&?!skHC*g2AEAP4*{9YkBKMi0`d)H0dKqq=?yMZSN1$wmCI2Em zg%1&cph@s2?%QR~&EU2l&QP%@8|^YRce;jnmLo;}#~Y9~y2p6lh}f{RzYVZ+xyxyi z1QwOYP43v#OVaV#SAkONmw+0?^8aF|0Zwa$3GtB@>At*T6H5Ww*DcC=>tXLjen)_E znyt2MFY$ylvZ^kA2EGMOZE+sg$Y#03yAZnRdUD(<^@j8u*TG8=%c6CfwBL}5q(OrYT&&ITIgx8lXzWN9OHrclqw$s_O2H3q|6T* znMLdV+hB8))hg!6jxPtUb78IA?-*&FN$#L`E+o)V|1l?)j0m37Dm}+)p+alb^-p6{DwpuJ$MJ?uEJpE<{BZXzuoF^>u(CY?{ok zc^^$0sO`&*m>UI3RrG=31MS?fZs9FIkNLHjnU{5%bPwJaUP)zv^O-}hVqgBGiDm8^i{0#IDqc3V(+8L;mV)_O9I(%EE@`6w^)HCA2{8%ZcVu$i z3%Cp?GU4%$9x_bvM#H*gtRotW}PmJn`aEyX9)9myLtYIP*VM&+sSdcd`ZEFNq>Cdw}x<40fA z&%QQtYRZSLV3Qb#@wTV42okX=h}!XO#TW=FjLuzJh#gt{^b8R1$ykaArOP*l@iRkw>C_Yl;%LG1JkemoI-{!C?E%jFPjp`PW9AyC0zOLe+#Ro^h^q zq2IaniZmuy+B^4*7K^fIWKKb_RZGSpMhFKahOZjo9b-2xjvxx0U{;Se)(JpG`&dZX zupm3VEJ9|`(oGz%O7NQ_`=F<}plF!D!lpnLkXT;1FzA|2pi;9OiKjouO0Z#<<_A{1 z`Ci3)SRc8kTR_rL+6Nfq0$WFDB#iiKnRklIWi>yn{!Jt@Jr%wdl^X~MezIyvMIGO> zd26mb3&`Db`UsqP&R49$58GY)ixTKt!cjqRce>TINffBXJ(3 ze{HNSlA2P3VT_q>sw?~6{0n7b2X#Sz+BK#_%)-gr#ts8SMXl{+2O5JdP6MNT^zWzy zt|09Jm)9W@2D1r&eeQ0}vES?+hD2(#ONBjK@X#8b(#*q&?jb==FArsxu=CenH|`)+ zZMTzXK;SDB-Lh4s7|!c=`a=8(dYXEfh5@(SqUuWQ>JbQ!n9e5m4rxPv2#a(f4%Ia1vub+I&v!Aqalekx1$UU1^O^gilOkQ7sYlX>o(5--b8l&InGIh!-_4mV=w z^k3Hv8RB)p_cq+D!%6X2gw50ucT|L{+2KZVx1`)Ib?PHuu zcueB{C5s3{Aw!f6acJIP1zo`$2UUv35DQZP6I&;9zOXE!^_ES~=N)f-r-)is_|B+W zIR-XxOmyClU`B}jUUo~czH?cwp2URzGA7l%hwk&{Y5{-r~!13KiF#^>?62~tVT97Zm)!!zwuYf z@=(>@D`N4KDc_#B=~FR-0vL*+Sh|>i*S?4EjX(gd@`oB-TBNv-T{;}qQZvswGL)T> zH%rZh638T%oFZ(CljlOX6PVJ0ObM>ctXFmZePQXlO$RE#o@@08CLu49RAFL5Z9CmY z^seUeNIf!l6uxY*+}G{IOF2qQy<%uSLp_FBy1cw*M?L0eQ$O7W$BF$~u2_S@kO^Jf ztME$EH1;;rB4GWVtxV_quod3GSHd`=LSRga<;qPxmD+@3`6<1@)ZGZZ%ZwZK@iWZAw#^U9 z_e`&?WX`X`PR%&IuLFBgvGwS5t z`@vYS_95(n{j5AMDqOQyR*{17BQ+L{uIIIkf{R(h{P`jgIMQqTkSlkgf%8Pz^=uFg^$D#s2>>B9-?j(u9Mtr1X+ae)-2IRLI^s>+uULx^aF(=z9$2XU7P|hcn zoV%83d2+nfkTY^YU_A*R7IaqZtTjp8nH~S*uk@BlZ6v!7*ckat_;KxN5d)CGJJ+h} z*{AG?qKMuaS8ZdU>3fct3Hjba@N>+Da3qa#v4Nj>n^0EcBzh`1QoqZQrbq#aw^=f( zhJB}_p&?A{FJd_@t1Dbx6Dh7@lr=0cH(jl^6?9eZ?45KWE@0^uJiMaZe^2>{K)R}k zMEDE|jI+S{`PynURjEC(U#@qscEPrAiP$zChkD8gU&2h``cLUn!aJJKFD$WreTN`m z?unJW*1hakc=raon+!whA;gfZfhadGGf3^?vXXBp25nA#736KD`G-#gh*kR^Nx8El z(;us;v&v_g_ysOCf7J9oEbi^$@JRcDm4hAb!gAouM3rEsLB*=7av+h?D;%oQj|B(hX7#>=-V(IP69raM*2}5!Q3ep? zR>`CN>2QAcfxE0Q6y;+qN~k_14r(AB=&+@KRZGQaS(lL6gn|}L=pjM&B5(~wLvFjR z4+emoL`lvE3~R;b8X@BTzj2;#-?qQDO^SIAYsc{>ApLy~SE^83Nc?+J?|27ot>xQ$ zp^MgpaIAYc`hKysGYb?rhynVEXOO`M(1A!QHkBxP3VdYcK)9-B`!%Sc>>nBa8wH~f zcFc)(p5z$8di_8H@cXRp5ApvK_zblmtac$?HkkVm^Hj1eM#jcrqiX6!MxE zz_z*?R|x@IzZkY|jN5Z2LG{edKKy^WSiTqJF)?8k4^e^RbM&j&L9Iffq+fNA2~<~& z3?~dGkT>gIJe;%<1{sDzIa_{8@2v)UN(!y#x-cnC~ALp+ae z-^V4-kjirJW2og&zbUQ1kBSQUDQtam5c@AQX{|q@m z5w2wb7hI%rbWX3`y-;RK!ne(k&`LZ@v)>%cxdh_+_h}zC$ z!yT{zo63RKRJ-P3(d2xYd6&qjL$>Q_<9LOTN{tsW>NjFAI26csv{mXjHokWtW?&QC zCc`lfR9bn)7^;?yi37c}x{{)vC#!zR%Lj)x6{YgVX|7WFCH~TrY>`t`+qqNk%2${V zW*>SY$y{96-fGi@eHq$}cv`)w&F8Y17lvG>^8;@{g zVSVbCXix!O&#lU&D1ol<-*EE-K1Rx0lwGA+hm|zn5b%mwxL4zo!5J?AU&W?$17kqa z49sf~SV!8mK!WNRL`;!E-hnU?W|K%PKV$}Y5Rb+oy|CXPg6EU5Y6e~f2qu&So;z$K z`0&M8CspfAZDrQ%Bv(?WF>VM2ebW;dF8gQsANgQZ;n{L9*odeugWzJ;WX3;R3-5#` zsIJK-pUqWBP1V={e^4yf|3qO?SW^WOS_cJ^V_M$WYAd3~R5j})?_}7K87mK|OHo`$ z8*zeh(@H;V{*p$Yyf9opq0Lg>k6P0UVEgQ+Z~RF>r=3vxZm7QWQ|n%Qn0!@vq$$n~o8(tsqoNnqfH6Legyo8H;!osu zho34|Bq*?W7=~n<)`fVY*YqzoL9)R!Jh>$`GezYtMw3RoNlJxWEW)By3gHYRh@1H+ z#ny>HY#17Nktm}qr%OT}Oy709Is;o>_Q7C_|6K@2k1ZzOHwyq_L*_a|Jb}?*Ck2*3 zH=xelB;Vz*Nip?)Iv>kmS~;J&kH)X`Dph_^M=uFK)0#j=3?}h1^7MosSlwXLDcU}g z6B+}i52pi8!(z0dCZm&*jfo5 zq|72Ma?6h?iC+$HbZc=QyYX#6Fp!-re0(GdAs<;mFUtWF(QcW5;YB0zeC|MJL*;ek zU38xXkjE8Y;wOsWcWK|)of9(9po}G(f=-%!s>W2x5!H1CW(k|V%fS#oPA8W$8xLZU za|REPncbA4SsmJh91tN^1ywSWU;NZ={9=>6I{FP^XRQnU{46kr6niL@T@Xt21aY7E zPWebXu%EwBq9esl-%XYZWyZWDn)sOWy*>IJ=77^E`1uQXw^_)(ZE1);V&{z2;w0%T zQiLMpmP%V_igTSV%Y;I<6H^Lyr95&U26wkMp6F3*oi&9(UqnjzV+1suFim86q)+Fe zRJ&7^E2{-$asDSi800P+kAEPujm6f~f~A<^4q?aN^lUc10RRa9_etQ4Z{Pkz6|_Hx z6FhtPgbZ4Cz6ND5B4XXreLYy8E3n&j0B36xvGl}cv^Vp1;L9gd8C-Pq|?~_Eq>VREP(Elv#u9}qi*&}{x^=TYOd`&yY|*|hmXY9a zM2Yh@Lt=&9$4e%;c3U6CE|K`Wkt@t#5f#`v$Jn|#utRBQnY03Mg8$=S#z zs_a|<@;i4T{~tGEU~=IbQ-s?`HN&%3%*vUJ2~sqSMB)lm8&oc8)wdNYU&-3fGPC#i z=xM zIZ6o<6gQWs#LoqqbF-!Z3Eit4loiD`qWJ3(bX=E$AA_}RyNnfV-->ujarFU=I+!{5 zZsm3g1Q%9jsNh7W2(I%FjT6-rN`NfXqxrK(jjJ*7zILA zZTS{YO6BAC!b=(gR=2TTSOF5dOTLdZ8qBDa>=u(sAZ z7dPRDl^x!JHWZDW#k5pn%>?aHtq#C}d<@%zNqDpq`F~>XR0Vr5yPKBfF|yMsEUeM+ zr%&7=z4ikrYWe&K%`xded)x3ISJd!|t483+R*+qRX!b!5Igx&?(p>saS6v9aiHkzK z)>Y*VCaRJ;_=#;ZPI=sfy~>xROn5_|U}d+$m=vUot0Wn8y;a{(Zp|nailLOTNU9B) zp(IJnEqf9vs z#`J`d%}6I_(mKq-=qXhiD)i-)Y$ku{<9P2ME50$gvzIlW62$v`zkfH!g!gsUWX;k5 zAZ?MoYYIt&NB@ z%}{@WO3y1ED%!Q-OW+0{au7)X-)3=orLSU33X-aIxT`t9rk+R&w%jjm1Pk7ZF5UrD zX4M;mIIO-JG+-tO>sun%1mAO-fAM_<(Ms*7)fMv*Z+IiQ9L5J-*8(RgKi+jo?%Ipz z6;u3W1a1$VMEk)HXPI7@Oh67t)kjTOY$@2`ou}EH&o5gD>Wj&8B?S9+TQ) zR-@RZFzb~`aCZ{5y|>=AC=7U9%LqTr&I@`?uB{ESkFYVk2dcK_eMUV^o-$1p-l*oJ zBt?EB-q#vsjHI~(ZccWJcbS;MMgKF|gr?Yrp1n_8|hJ`EF!C z^ci%TYz&l`=QXB@wx@rhv&l>x{N#5gpamrupH1A-e5JCES>U4+mPw(IDA+5s3dY1_ zKH=~Q*v`tCpN2yy7r+FRF036#(J}=j$?VpNI#9dP2&jA0^3FX8HuE~}Q>V8B9MmWt5i2-L- za`eYAOXZ^}HVb+z!VuP9+fTVkS`%0eCkj+u7SD|-`Vso-(kJ(KYM4MfMc5n$-tqqD zR?_nqPuQ422OrY8V1Kgc=*#h%%@)hAViuiY+AqCw!!v~}+#Ca@k(1*mI6mzmV+*8( zevQR^`(?#DUUE_piYm8S7B6J5ll6$mDUk*)0k2-jgqmO*Pn}5kO4qKzLgcXF&+yhl zOAzNPo)pHB#S0#EK}EI#r9=h8#rQxa%{p0KH7S|XR3AM#`CTz>pyTxd-9N6D#VUKv MAdKM7eCC&xviMzLfdBvi diff --git a/src/net/sourceforge/plantuml/dedication/2.png b/src/net/sourceforge/plantuml/dedication/2.png deleted file mode 100644 index c37934ee8b8ac0f1c360b38cbb100ce9337223e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24111 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�#XcRxztou4YwLWBes%2u2ir3`r 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 diff --git a/src/net/sourceforge/plantuml/dedication/514816d583044efbd336882227deb822194ff63e3bdc3cf707a01f17770d5a6a.png b/src/net/sourceforge/plantuml/dedication/514816d583044efbd336882227deb822194ff63e3bdc3cf707a01f17770d5a6a.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf20e266d0189c616c2f9f9b418df16f29b2a26 GIT binary patch literal 34884 zcmV(pK=8l4dy#>G6V(B`u^k-EW<|~02~Ouhl(oI?2iMy1PEU`C*qu#MW&%r$n3oP$ z@F*l=$Y4G!pr(M0>9BY;-o!!N3L;koRT!PlU^ONvzKFvK-GRe`gcAH*kOQjlO_K3x z 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 MaKmc6ohPLEy1OVPRR910 literal 0 HcmV?d00001 diff --git a/src/net/sourceforge/plantuml/dedication/835ff5d643b58cd35a20db6480071d05751aa6a0e01da78662ceafd0161f3f5e.png b/src/net/sourceforge/plantuml/dedication/835ff5d643b58cd35a20db6480071d05751aa6a0e01da78662ceafd0161f3f5e.png new file mode 100644 index 0000000000000000000000000000000000000000..85c96fb5b157efe5233d78e71452b87db60711e2 GIT binary patch literal 24111 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 C&=(>uqM!Km3JvLAgS-8MYn(-X2Av7W8Co~7`~ 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 clVP8Decoder = Class.forName("net.sourceforge.plantuml.webp.VP8Decoder"); - final Object vp8Decoder = clVP8Decoder.newInstance(); - // final VP8Decoder vp8Decoder = new VP8Decoder(); - final Method decodeFrame = clVP8Decoder.getMethod("decodeFrame", ImageInputStream.class); - final ImageInputStream iis = ImageIO.createImageInputStream(is); - decodeFrame.invoke(vp8Decoder, iis); - // vp8Decoder.decodeFrame(iis); - iis.close(); - final Object frame = clVP8Decoder.getMethod("getFrame").invoke(vp8Decoder); - return (BufferedImage) frame.getClass().getMethod("getBufferedImage").invoke(frame); - // final VP8Frame frame = vp8Decoder.getFrame(); - // return frame.getBufferedImage(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public BufferedImage getBufferedImage(String keepLetter) { - try { - final InputStream is = getInputStream(keepLetter); - return getBufferedImage(is); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } + public BufferedImage getImage(String sentence); } diff --git a/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java b/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java new file mode 100644 index 000000000..9681d410e --- /dev/null +++ b/src/net/sourceforge/plantuml/dedication/DedicationCrypted.java @@ -0,0 +1,119 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * If you like this project or if you find it useful, you can support us at: + * + * http://plantuml.com/patreon (only 1$ per month!) + * http://plantuml.com/paypal + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * + * Original Author: Arnaud Roques + * + * + */ +package net.sourceforge.plantuml.dedication; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.math.BigInteger; + +import net.sourceforge.plantuml.utils.MTRandom; + +public class DedicationCrypted implements Dedication { + + private final String argon2; + private final BigInteger pq; + private final byte crypted[]; + private final int tinyHash; + private String solution; + + private long next = 0L; + + public DedicationCrypted(byte crypted[], int tinyHash, String argon2, BigInteger pq) { + this.crypted = crypted; + this.pq = pq; + this.argon2 = argon2; + this.tinyHash = tinyHash; + } + + public synchronized BufferedImage getImage(final String sentence) { + if (sentence.length() < 40) { + return null; + } + + try { + if (solution == null || sentence.equals(this.solution) == false) { + if (System.currentTimeMillis() < next) { + return null; + } + final int tinyHash = Noise.shortHash(sentence.getBytes("UTF-8"), N.toByteArray()); + if (this.tinyHash != tinyHash) { + return null; + } + this.next = System.currentTimeMillis() + 5000L; + } + + final byte[] hash1 = Noise.computeArgon2bytes(sentence.getBytes("UTF-8"), + (pq.toString(35) + sentence).getBytes("UTF-8")); + final byte[] hash2 = Noise.computeArgon2bytes(sentence.getBytes("UTF-8"), + (pq.toString(36) + sentence).getBytes("UTF-8")); + + final BlumBlumShub rndBBS = new BlumBlumShub(pq, hash1); + final MTRandom rndMT = new MTRandom(hash2); + + byte[] current = crypted.clone(); + Noise.shuffle(current, rndMT); + Noise.xor(current, rndBBS); + Noise.xor(current, sentence.getBytes("UTF-8")); + + Noise.shuffle(current, rndMT); + + final RBlocks init = RBlocks.readFrom(current, 513); + final RBlocks decoded = init.change(E, N); + + current = decoded.toByteArray(512); + + Noise.shuffle(current, rndMT); + Noise.xor(current, rndBBS); + + final String argon = Noise.computeArgon2String(current, (pq.toString(34) + sentence).getBytes("UTF-8")); + + if (this.argon2.equals(argon) == false) { + return null; + } + Noise.shuffle(current, rndMT); + current = Noise.reverse(current, rndMT.nextInt()); + + final BufferedImage img = PSystemDedication.getBufferedImage(new ByteArrayInputStream(current)); + this.solution = sentence; + return img; + } catch (Throwable t) { + t.printStackTrace(); + return null; + } + + } + +} diff --git a/src/net/sourceforge/plantuml/dedication/NoisyInputStream.java b/src/net/sourceforge/plantuml/dedication/DedicationSimple.java similarity index 58% rename from src/net/sourceforge/plantuml/dedication/NoisyInputStream.java rename to src/net/sourceforge/plantuml/dedication/DedicationSimple.java index d99a894eb..3b0056d03 100644 --- a/src/net/sourceforge/plantuml/dedication/NoisyInputStream.java +++ b/src/net/sourceforge/plantuml/dedication/DedicationSimple.java @@ -35,38 +35,41 @@ */ package net.sourceforge.plantuml.dedication; -import java.io.IOException; -import java.io.InputStream; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; -import net.sourceforge.plantuml.utils.MTRandom; +public class DedicationSimple implements Dedication { -public class NoisyInputStream extends InputStream { + private final byte crypted[]; + private final String sentence; - private final MTRandom rnd; - private final InputStream source; - - public NoisyInputStream(InputStream source, byte[] pass) { - this.source = source; - this.rnd = new MTRandom(pass); + public DedicationSimple(byte crypted[], String sentence) { + this.crypted = crypted; + this.sentence = sentence; } - private byte getNextByte() { - return (byte) rnd.nextInt(); - } - - @Override - public void close() throws IOException { - source.close(); - } - - @Override - public int read() throws IOException { - int b = source.read(); - if (b == -1) { - return -1; + public synchronized BufferedImage getImage(String sentence) { + if (same(this.sentence, sentence) == false) { + return null; } - b = (b ^ getNextByte()) & 0xFF; - return b; + + try { + byte[] current = crypted.clone(); + + final RBlocks init = RBlocks.readFrom(current, 513); + final RBlocks decoded = init.change(E, N); + current = decoded.toByteArray(512); + return PSystemDedication.getBufferedImage(new ByteArrayInputStream(current)); + } catch (Throwable t) { + t.printStackTrace(); + return null; + } + } + + private boolean same(String s1, String s2) { + s1 = s1.replaceAll("[^\\p{L}0-9]+", ""); + s2 = s2.replaceAll("[^\\p{L}0-9]+", ""); + return s1.equalsIgnoreCase(s2); } } diff --git a/src/net/sourceforge/plantuml/dedication/Dedications.java b/src/net/sourceforge/plantuml/dedication/Dedications.java index ee78ca4e5..d44ecffa9 100644 --- a/src/net/sourceforge/plantuml/dedication/Dedications.java +++ b/src/net/sourceforge/plantuml/dedication/Dedications.java @@ -35,79 +35,60 @@ */ package net.sourceforge.plantuml.dedication; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; -import net.sourceforge.plantuml.SignatureUtils; +import net.sourceforge.plantuml.FileUtils; public class Dedications { - private static final Map normal = new HashMap(); - private static final Map crypted = new HashMap(); + private static final List all = new ArrayList(); static { - addNormal("Write your own dedication!", "dedication"); - addNormal("linux_china", "linux_china"); - addNormal("ARKBAN", "arkban"); - addNormal("Boundaries allow discipline to create true strength", "boundaries"); - addNormal("Thank you, Dr. Chet. I wouldn't be where I am without you", "dr_chet"); - addNormal("Ben and Jen 2020", "ben"); - addCrypted("0", "pOhci6rKgPXw32AeYXhOpSY0suoauHq5VUSwFqHLHsLYgSO6WaJ7BW5vtHBAoU6ePbcW7d8Flx99MWjPSKQTDm00"); - addCrypted("1", "LTxN3hdnhSJ515qcA7IQ841axt4GXfUd3n2wgNirYCdLnyX2360Gv1OEOnJ1-gwFzRW5B3HAqLBkR6Ge0WW_Z000"); - addCrypted("2", "lZqLduj4j1yRqSfAvkhbqVpqK8diklatiFeenDUXSdna9bKYQTzdS264YfUBScUVDYCp2Vcq04updoN98RwxE000"); + + try { + all.add(new DedicationSimple(load("dedication"), "Write your own dedication!")); + all.add(new DedicationSimple(load("linux_china"), "linux_china")); + all.add(new DedicationSimple(load("arkban"), "arkban")); + all.add(new DedicationSimple(load("boundaries"), "Boundaries allow discipline to create true strength")); + all.add(new DedicationSimple(load("dr_chet"), "Thank you, Dr. Chet. I wouldn't be where I am without you")); + all.add(new DedicationSimple(load("ben"), "Ben and Jen 2020")); + all.add(secret(5, "835ff5d643b58cd35a20db6480071d05751aa6a0e01da78662ceafd0161f3f5e", new BigInteger( + "1182423723677118831606503500858825217076578422970565964857326298418401529955036896808663335300684244453386039908536275400945824932191521017102701344437753036730900076162922741167523337650578479960119614237031234925702200473053235777"))); + all.add(secret(3, "514816d583044efbd336882227deb822194ff63e3bdc3cf707a01f17770d5a6a", new BigInteger( + "538955952645999836068094511687012232127213955837942782605199622268460518023083462090291844640318324475656060087513198129259364840841077651829017347845508167869708224054456044836844382437974410757740941102771969965334031780041648873"))); + } catch (IOException e) { + e.printStackTrace(); + } } - private static void addNormal(String sentence, String name) { - normal.put(keepLetter(sentence), new Dedication(name)); + private static DedicationCrypted secret(int tiny, String sig, BigInteger pq) throws IOException { + return new DedicationCrypted(load(sig), tiny, sig, pq); } - private static void addCrypted(String name, String contentKey) { - crypted.put(contentKey, new Dedication(name)); + private static byte[] load(String name) throws IOException { + final InputStream tmp = PSystemDedication.class.getResourceAsStream(name + ".png"); + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + FileUtils.copyInternal(tmp, baos, true); + return baos.toByteArray(); } private Dedications() { } - public static Dedication get(String line) { - final String keepLetter = keepLetter(line); - final Dedication result = normal.get(keepLetter); - if (result != null) { - return result; - } - for (Map.Entry ent : crypted.entrySet()) { - final Dedication dedication = ent.getValue(); - InputStream is = null; - try { - is = dedication.getInputStream(keepLetter); - final String signature = SignatureUtils.getSignatureSha512(is); - if (signature.equals(ent.getKey())) { - return dedication; - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (Exception e) { - e.printStackTrace(); - } + public synchronized static BufferedImage get(String line) { + for (Dedication dedication : all) { + final BufferedImage image = dedication.getImage(line); + if (image != null) { + return image; } - } return null; } - public static String keepLetter(String s) { - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < s.length(); i++) { - final char c = s.charAt(i); - if (Character.isLetterOrDigit(c)) { - sb.append(c); - } - } - return sb.toString(); - } - } diff --git a/src/net/sourceforge/plantuml/dedication/Noise.java b/src/net/sourceforge/plantuml/dedication/Noise.java index b6bae6cf6..9ec2dfc41 100644 --- a/src/net/sourceforge/plantuml/dedication/Noise.java +++ b/src/net/sourceforge/plantuml/dedication/Noise.java @@ -35,6 +35,80 @@ */ package net.sourceforge.plantuml.dedication; +import ext.plantuml.com.at.gadermaier.argon2.Argon2; +import ext.plantuml.com.at.gadermaier.argon2.Argon2Factory; +import ext.plantuml.com.at.gadermaier.argon2.model.Argon2Type; +import net.sourceforge.plantuml.utils.MTRandom; + public class Noise { + private static Argon2 argon2(byte[] buffer, byte[] salt) { + final Argon2 argon = Argon2Factory.create() // + .setType(Argon2Type.Argon2id) // + .setMemory(8) // + .setSalt(salt.clone()) // + .setIterations(50) // + .setPassword(buffer.clone()); + argon.hashNow(); + return argon; + } + + public static String computeArgon2String(byte[] buffer, byte[] salt) { + return argon2(buffer, salt).getOutputString(); + } + + public static byte[] computeArgon2bytes(byte[] buffer, byte[] salt) { + return argon2(buffer, salt).getOutput(); + } + + public static int shortHash(byte[] buffer, byte[] salt) { + final byte hash[] = argon2(buffer, salt).getOutput(); + int result = 0; + for (byte b : hash) { + final int b1 = b & 0x0F; + final int b2 = (b & 0xF0) >> 4; + result ^= b1 ^ b2; + } + return result; + } + + public static void shuffle(byte[] buffer, MTRandom rnd) { + for (int i = 0; i < buffer.length; i++) { + final int r1 = rnd.nextInt(); + final int r2 = rnd.nextInt(); + final int a = Math.abs(r1) % buffer.length; + final int b = Math.abs(r2) % buffer.length; + final byte tmp = buffer[a]; + buffer[a] = buffer[b]; + buffer[b] = tmp; + } + } + + public static void xor(byte[] buffer, byte[] xor) { + for (int i = 0; i < buffer.length; i++) { + buffer[i] ^= xor[i % xor.length]; + } + } + + public static void xor(byte[] buffer, BlumBlumShub rnd) { + for (int i = 0; i < buffer.length; i++) { + final byte mask = (byte) (rnd.nextRnd(8) & 0xFF); + buffer[i] = (byte) (buffer[i] ^ mask); + } + } + + public static byte[] reverse(byte[] buffer, int delta) { + delta = Math.abs(delta) % buffer.length; + final byte result[] = new byte[buffer.length]; + for (int i = 0; i < buffer.length; i++) + result[i] = buffer[(buffer.length - 1 - i + delta) % buffer.length]; + return result; + } + + + + + + + } diff --git a/src/net/sourceforge/plantuml/dedication/PSystemDedication.java b/src/net/sourceforge/plantuml/dedication/PSystemDedication.java index 82bf01fc3..17906d799 100644 --- a/src/net/sourceforge/plantuml/dedication/PSystemDedication.java +++ b/src/net/sourceforge/plantuml/dedication/PSystemDedication.java @@ -53,22 +53,20 @@ import net.sourceforge.plantuml.ugraphic.UImage; public class PSystemDedication extends PlainDiagram { - private final Dedication dedication; - private final String keepLetter; + private final BufferedImage img; - public PSystemDedication(Dedication dedication, String keepLetter) { - this.dedication = dedication; - this.keepLetter = keepLetter; + public PSystemDedication(BufferedImage img) { + this.img = img; + if (img == null) { + throw new IllegalArgumentException(); + } } @Override protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { return new UDrawable() { public void drawU(UGraphic ug) { - final BufferedImage bufferedImage = dedication.getBufferedImage(keepLetter); - if (bufferedImage != null) { - ug.draw(new UImage(new PixelImage(bufferedImage, AffineTransformType.TYPE_BILINEAR))); - } + ug.draw(new UImage(new PixelImage(img, AffineTransformType.TYPE_BILINEAR))); } }; } diff --git a/src/net/sourceforge/plantuml/dedication/PSystemDedicationFactory.java b/src/net/sourceforge/plantuml/dedication/PSystemDedicationFactory.java index 987a7c3e7..43e16f6e3 100644 --- a/src/net/sourceforge/plantuml/dedication/PSystemDedicationFactory.java +++ b/src/net/sourceforge/plantuml/dedication/PSystemDedicationFactory.java @@ -35,6 +35,8 @@ */ package net.sourceforge.plantuml.dedication; +import java.awt.image.BufferedImage; + import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.command.PSystemSingleLineFactory; @@ -42,9 +44,9 @@ public class PSystemDedicationFactory extends PSystemSingleLineFactory { @Override protected AbstractPSystem executeLine(String line) { - final Dedication dedication = Dedications.get(line); + final BufferedImage dedication = Dedications.get(line); if (dedication != null) { - return new PSystemDedication(dedication, Dedications.keepLetter(line)); + return new PSystemDedication(dedication); } return null; } diff --git a/src/net/sourceforge/plantuml/dedication/arkban.png b/src/net/sourceforge/plantuml/dedication/arkban.png index 7ddc8131df03c2a8ad138de0e2be3846d837b6d8..ab073d54187c1d44a33609efd83d4568f1c029e2 100644 GIT binary patch literal 3591 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 NdLZBV0ACgXiHMQ<{6qi% literal 3591 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 N#M9&Uany1)Cm$}n?RWqH diff --git a/src/net/sourceforge/plantuml/dedication/ben.png b/src/net/sourceforge/plantuml/dedication/ben.png index e7756fb6e18805b3daca8dd21ade769bcece7cb4..ed0177f8f1694781cd1045fac241b3d6689937aa 100644 GIT binary patch literal 33345 zcmV(nK=Qu^YGQj07>o%M|Cw`W!4dQz}jdR!CUwfU@Qc1sqP|9uCTn2J^dm z0_RBIr-hNiXT(3>Mv`CLJX2-Q|EnFpZ(Fc^A?0mbXhF!!O`jn4Q{F%Ins z;4UI59u(g7PHX}q{Zh(tM;qp~;7m$aaw?`uC6;Od1#YcmR~y-XG%aEW-2B(*!QIJu zw29-*D3R1bJCHG}+`L98d!A5+&*SEZrI*`@&=%xD`Fk7j(LdihmIzZSmp8I6aAewE za;6YW207nmv#$#h`dkS0`D54|f!NOmGf zho}Sq@_}`VNAl^bsDpTOW?9)U&3OcG<1vYtp1|s{le3Bfy}e%bWS))#T3-tQWk7tz zzW$h3m3u-HCr?{WK(8z|j)!%i_u~?kPHrsSl#Jhu#*y0$WyPMhm0!W#tZt1W67uFs zA*1Xv-y&yq|Nl<{u0#~ewoUql46b66PicV3d$bmo_N{PnH_w4K!yi&iM$p~E0GS+T zc!|M(=FR8iEwVF#6nwcW$v|lgQ#TymOQRJ39AVGCPO3^`N`f=7q(^rx`(iXHo7lqT z!*ehz#L$eV188%hnY1lVf1v<)Ht>;G^JQ+Fvh>-I$&*8OI=3qj%p0T@>|za1v#XPr26I+*aDYp>O;q@rd$@qqJ<<)1M)2)80>h7(w8o%a)hjX6 z#767esT7FyRX9rV6HZd+DiZW@o=JuZ3uW8(7cXpAS441~-I^iJHf$-|H}Ax?(|j$Q z{aQN>ez&rb!9n?6?RP5o;fLw4)I9HpEj)Oiy&Z#9V_2n16(hIZF2yyZ!b5Oo4wmQc zL|UwLxCCciQiJzYUtThWqFihC=hOl5FP*sQuVT^Z1J7C7RgS+G-=cbh1bbA1nd346$w? zg-Y2}PrTS{0=%py`-iPPNGJ? zp2_~D>=8PwxeWDx^h+=?Hg|RCGt^C-O0-;}09QQi&LjX!l(k~leq~(PMB~(3y3RKb zm_Ol|t|-+Q_Ako1>#O&ZDTuB@Onfy*&Qni72`c(Lk&hvuq;nkOzAA(hQ06gVXv&&B z@o(RR<$96{Vf16SdSDP$p20Q5ak@YJw9QeHsW3haG`*)>1p`?KrF;>EcJTT1Px)7_ zv&!LuP`MZ2)%mY3l7sI13vXb}ZLVFp(QRXTpGo8KpMpikQQ8=l4O}5n5=RM4E1}o) zkcihP%BY6snhQ0@@Ngh-FC$WSZb}t3UOcUm=swVHn>)^n24Y_8&`@3VD7wp6~Wt?@ED~DX+mV8|H~_X%hVbzAZXDpIu&dOIX}v4)BE+sI1U1 zCuuXYDUwp`R6;-_F`_tewf};}%9q#EHGuW2q9`hzAvSHcl}R6-y4d4KIgOLD0hswo zP}cXxrkZ@C#(NUB+}M!>Zf9bj7|!qVQxd~fh#lYYA!G+bVYwGuob>46Uzu-$##+-; zPu;&onl)^Ns|6c%e>dZ(6?(k5sq5`xQb8f~C= zLIVT-zbg=jGvpH&hbmJ&4YfYmMXIFptQ5|(Y@L;HYzy&bM!`;Ijk_y1tZb~ozA5iH z(wCb(0r~o_6}@)b>j=Dx6yv<*)*n0NYxDa&Mb0K+Gm@-dpGqYPd**?gcFbMzxt`*L*%6%Csb z$mFh^$cf;l1bEFj)$unYYGMwa;SC2!c_gQ5Z0frt=RyUjHBavU;tzVAG>w|7j1Nri z=|hBPlu14uWeMg^h)P?DXtghZ5E<+M356U`j^{WDem#?0#Yd&4+l-|;S1%`m9vp8n zSV}WbN56``hH;mKaXp`t<`HE+bkyEAW#2Q!SI$uiz){SW zorPiQUKC-y`g8$Phe@3@f{@UEd))Gqb8Hb0IoY7Y zzc)T*mdb6cP#a0&lR&PN3xSBRd75F>BH>$LM&=qX4^gsJ*KzgX3B;&Q$4mYtn%%X_ zzhFPeIYQ}RX&{j2tTC!9)?ux+!<_Z523~QsF5Vpe;IM!LbRF!3dwAS@jo%>fnOYTP zWxE%1Vs>jZR~%a+m<(4Sz*v8_#2iWD`fH9E+5otPB8s+Z*`BxvD-3;i3OD>U|4o}e z6s0j-dU)>)9f@pQ5q)rxoc10!59i?&<9YcNNc=%&a5H!;{80Tvm?ty$*B?|*wd5qW z22jHurKVi4S;V3E8QHt|+hexnMR6s4QffcYpD2F&MLO8lj4;e)9D1~{n(?nT8YB>$ z#_OBz!Cn*Gj1e}&m%~-hG@@KB(AMf8J8q+QvAaZq8>hH1VKGhWVLC!{=uv`4#Qv*Y zq<)>$rT=AzqVwwGMvN7?qoUIzw1~n)J)8GZfu11^<18ZS@B4wi(?og60VzCOO<$_^ zQ0YJ)%w&3w5Mga-bHegPfDE~B5_c4+IB$Owr=H0b0#Sd)&`%H&6Dl1&n_uu$&7mG- zIlZl{LKt8}xFUE#Sb7d#uLs%8;;9J?*pXB8x`47B>ZIcOHf|4Zp)oG+y& zsu<}%?0I4Z`DC9ToNmu~U6| zW|py#9kYhdPC4;H>a?dfr}pA5Vb-qjx?Cys*V0RNypV zA^j@)f$gkbRR6BL!zM;oxP)MNP#li5=H~0~0t;QpDNX>Xv!J6g$vfi}6~Xdok-Zx$eF!_omj~YTGXah9HzuL0~h=FnMF5+ycc?MaU zf1tuGXw&pgd}U~hSTkR7XyZlC1UB2a6(^borc{QBz0<7Z5Srt|U%^Z8#Rkl3ll*BI ztsa*h?e5m9K7AdL2bIIAbUjgR_pJ*Js~pIVcWACVgKWHUKSW6eH(Vui+A*_!htkOC zX7U&&@C$i=m(vay=h!ZibJt72kys=D=bp{j%AYnM(lodQ0G;K_r7NF*WW_nx!3UFB zrdW~sX%6p4?QnXHDRoa``gejrGBTcs7<sY`cuu`%lO2K9aE^6=D7N}Grr-rzUYiY zMX8N*h2WUh^_a-)cn6beBiP$L=SF0DP1N2AakQ*3^>nuC9%}=yqo&zU&Ds-<79m{F zMs5e~?*)y{Zl+D`m&`ft#{Y`O#f0W^duOopep@^b#lj>&^*3cy9W+*3C<7i-OaePf$cqR}M8N$VhPsEgKB2KcUu)WlNwyhQEicehAu8*=Hql z5f~rrCN@9hf{MTadTgz;;M?w|1*0B1H{F=~5X@Gzn0aiYFH3IeGgd6fp|0%7`~kme zkBMBmzfx#Gb~GV%F2-sZpko51PleAY*Kp0@duVa542J*Z{5dBCvcn+?PVf2DS=j1N zMDn9e&z24|aj#weA|q$m=ntOFMM#Rshmb2%<$|;teFc^Hd0}BU^-^CLdP6=tpcIvd zaJJBQP~qXTS882wDFBnlyhVB!C9PBKXnFp^xAGl=2I>oX_2!6j(TgWF8Z25 zNCHPL=#|w?bxB!h|B&9YhMM6#)cBZWo+8ZgaHCm+;geQ#cS@h67)R{8mnwmt4Kv$t z=|`#cG)lOHLgK#S`D0(ktgFW^@BVM)A0=u?n3H^R4EtSiMH`V4=D(@MGNag806LL43rlPIw(&cD|enfgyWop z8Mj;yM$Q(RO2&V`t}h$hMoVMm|(xTz1|Sp&@acRTOWiM2|YNIQ#X)~!Uu_OQ&X5K@_TjZ zM)=^tO7D}=sj-?zG_h)GeCAcs&uYV}><1o%+=4ICc9^0hL$f{%BF{<%KiwtPntolP z_{w0>_R9lw0z(Ma5BRZ)g>d|u?;Vd>+TqzNl(DNXr~cZW#Xp7j9Ds=5P*f74nw<5q zC-k4K;OhoKlosAzLa9-$NQ-bni9RE?&r2ymX=VgjIIP(&O)~70YWHszCE2x$Uy@`I zmIKArMg$~^gV?nn@jN5n8#>i#5h)B;S2^6S^F%SMCgZZY$G#_=NP-)63%L)D6OOdT z!2?aT9bA+k8o>whTd=A*m>D-nyR}m`#IX77ld=q$5A>R0FKFIzG>Tf-4TN2CmU4f9 zX?=iMiv^z+2Jq0ME}iiJiLAt^k(VPPtSGfo_`Sgn4cR!0SPFH*220Bz#mqJypA4xf zUseTEuR)01zqOwcF)z0_gOr!pt=<%rbCe_esg_7-u*>v54*Ln!W0S4x`)FMuX+4xu zN|?sRDAP1qL@b8$QV}Ofu41yHE*cT6jUYG$1?O?*&&}_#7_B2&*9iOv!a_sVIUMr< zwS__Ojz%AxHspSdW!@tHYRi>xQCD+hS zcQG8X+&Cp60Uyc@6YD7KbCSv^cQjv>wEMUY#LUtp9$=k-9(;+Z6(_ZFx9avDZffrm za~*;y8ePnxqrCYys5T+{gv<)S?IMOO6z>-li{j5tuiX%qVQhs>ln>A=Yl#rs!LWXZ z#f_1T*^8%Ho*1SB9=BdH*{1!}q>a9#MbaUXEA$p=R7BSq9w&&G$PcT;SQ2B~S{lH0 zdOkwrZX6#qTS~kvUigDB(O&7wIrv4NSDD(lkC2>xqVoeW*$$J{>^g7;7}Is_PuQb3 zj2yD^TWh!T;Rb%~;tFsAhn2g6h6x)JeJ0j!KdM-Bde)q?_>as(Iih!&hRk+0>B2v} z)d}Xl@AYa^N2TJV?+o-Ms_GY9Efj!+TvquMnWZ9aQRo{2i}hYoXWwIA{tA{Pfo(ww zooRnx)c?#9EPwQkiic>4U=RA$g4w_=-)Y)XZIf=HzsPepS-6tf!|>u+HeC(r2r>oM zKZsQn%x~$jVi&&XbePs;B?s@@VS8`(41Xl&k^8{qe#v6nHL=!t0hu>NKHMaHgX$%(|f=?EvTZyuGbR?N4mVai#0^K#~MT{5AL-G4f8!n-`6 z^0ftWZG9>%-Sck#C0OsuTKCT~XcF8y!3Bm<`{bb4DC$II-Bhsc2~+n|f`Huvu|Y=} z$+Lqgi*nZ%a^*_s7EAMIVDJQj_p{?2^pQN$)a6~wJx7EsVK#2O3D3XtZs3troM20O zz-!NlwyNB|T&n=Ug*5Zm)OY%qFGv~*h~k|WLywXPq=rJb z6`ZR~-lKlGLSjXzaf3I{PPM;v%3e?Js@gB6Q7gwP0-g79|J>Z?E9-N&zCU176}D9# zo+2FTwc>8?pN>JEiUG!E8C2feFaq{_rVYrH$Dz#LM`q-tmZCAv;!Ms53eahE0FPes z4#0e$pstJ3+XHgUaT_Ut>^2&#l?-cF>F~}!$poS7cP~Y>Tm=hP$U*@7zD@egh>6mY zIGwijapV5ArvoK1(ln$Gxa60tjWGx$pGgk>5g{sIFxIOwlIrOJi40l_{gGydasSpS zu5G#ZZNq!Mx(OVTNB-x!!;ETZ)eGAhKNllMCC^djyVh;0+#TB<*)M>jh2b&@Y!2fe z%lo0JHC*f_vhq(7g`voTejDo^F}|ghGm9RcsO@Ubuo}C(OqGnq-nNDhklg5g0kPeq zrK|(PvWd)s@3nhe^Nu=rVh}a{xNKB6Qfgp9+#RX{zp&5UI!lTARQwOX?9SfxUxcVk zahPG^Jg3{L(2J+_Yna4&XtEsH#JM*fr@BDQ&FR#J0@Clm^f zfDbbFP8!;Sl5EKg@ro812mBI4ppL)Mm$4>No^Pzmo1r+9ONZ8eHeust)F(Bm2n+wP zl%$hX1S$Zi7wX1Jv0b+0rP6@k)#w6;Sd%A7A`ia~*{sL+okkQBMlakM%|=OTW3M`W z)#W@sbQMLa)+$2pupWJ%`TBDRHMj$4bdB@{XhW~QitNzyhiskw%64(RAsP)aHTZm* zN^sW4{nryhQF_nv-u&_53%87|>P(xRhwtmshFp%W#4foUjt+PWfnFox`Yqc%BDhBK z(T+T}kiuOPlPyWw1af66Y||p-394NyDprGj=vpDtBm>OrvyP^2WDR;rLT0Bgm>AdH z(}<}_7|Jqu;5`j&InSL@dR+k_k>%+B@~XUi?WzU0oETnMPo_Tjtlj8)<0G4;ndx~C zj18zs=7=RIQ$&q6?UL+1j`aJ4Cqdiyw%e?)bm<_wSUH-_M>qx}c)_kg4x&V~=B6Qc zb{vO^O2SdfSv>^A-i5g7ih&W355~KPLDK9&5-cx(CN?v6^wW8p6KCzCTt#tE_bTq4nx*Y~&l-_Xx(c!T zr0oB(=t*w#BZ9>s&mdVzskcI_yyf32r0aq^a9VO!%IitH;?iAf&ZHn?seY~hudOkN zlaO?|;DT+@FiR7q@gAU%O+Lmz@Ar1%CS60(nyrOyI_07?i$Y<}>oP#F+do}aU94$p zGeI7FRYyFkl_D>5AJ(h=Lkrpw)9@mZog4?;6KD5!0OY^Z+S$ ze~7V*e1B+NBu^rfqUhu!(GwP`K0FD8_?&UVsQ<=?pe-|hF=@~6%Dxwm72Qk0A==Kq zTTyZ0CV`s!O>{c{_?;$?JHL827Q$6VR!8LvBqR1 z@vG!ecvi|pIp)k3k-?p@H0^{fe~Z{eSxbW*wI2{KV*S{e-SoHFCATFM zqx|!e=m@xdWRgrU($OQ{i$%Alk%4c0=n_)5x-Hi3^6=%YcC&~h(TR7C`&RklM~l4- zzHPhoFJ@=z+dGad*lE9MrI+svE?b>9IJd4@5u~^jw0yT@&*|n(olX^Rr7A*+9Qms+ zVYB3`!IdO!yy7n>H^-^gl+4&?MaQ#XG6+*j>Af==MJH(dd)6N6FhIGiThtHI$WZ}; zaxB@xh4)3x4JZFnsRJAA7ZV^%(%o5PgebBi>P+*}W9^woHgAB^9mBV|t6WlyZzkb5 zk%OxOqh6D5m?@5i&Su43rle}>Xgs=I_+0QN5U>chBgbZK>!tbfM5 zOD_b}_SI4XFVL}0j^qi_+rj|
V=H$E@(jQ`JjY-U^JntH^V*^LBj{LtXo!q8l~ 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%0A{3hMaFq_|{OV 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 h=+a>PD({g{0Nx4Y3}#G^c2Q8`jZNiV#6b<|F_B literal 33345 zcmV(zK<2*`&FTT@%JuLxo)3;L=xG3u>0gQ;5CIX}f-~f`6c3ZuV*D4^20Bj~3d67y=Pv*VQQ$l`PLB*$a? zNxsPhnyCi$FdS+L4dsR+-ty}L7|U@5wxZWf#j{j5z&j;P-9LVx*L5lbY~nDjVN{%v zJ$tylV3kK!nXV_ERU16h0f;`kmW8~WgPtIg0lBXa?%3la1T}FVqVOXbxkE}3UWVuqa`G*B znW{q+5fbNR58Hc+!LS+}auN1IzOv!_!hn64W$nNY=(hK@#EHEJIXzg?%Hii1b0pWh zrYqd2639?C!MC2iJ(?pwy<~j7mYIZuqB?8y49?Fa+c44kwX_&=)xw!l8U5*t{|~QY z{gfp%y*49N0xHCvzL-cZEehk3PG>WD8w`lc!Oo-q@+A2bF-J1Oau@K$a5H+cEH-IR z9I-0eM#H{Jf%!hnvsz_Bpg;K1XrPAe^s zE8)q$F^ebl3ul0L?f!`W?7>yD;yDZ`Gq{*d$2t8B#CW*LW!VU#f%CYxChIXAbNIrv zEY}b2q_3w5uRI46b&VDdFU-6A$sRX3}+GtQPCVAYf0O|_7YGX zPP3RPoEl7Ewl~#41;}jh;o0{)n<8; z8b{t!&xdAem*_jp^#e3PR8}D-=p=2WMC(~9CU%fyeHTQNe=dVw?7R7ww7Mp&yVadZ zzA24l5?5|)f*U&xMSMpbG#?RU)t}KZjx5)Kyf&~eK@Xq!XtTx08}DMLD`|viuJn!S z>sleQoCZhh`x^jGeqj|8mY86m77vk`HpNg~Kg5yX_BSRU+gl zX_*(he6%J)nk1hS^3G+(k&RU+t6Tg{*LG9yy`jfObW*+RmWtSpR~Rh-JWnI4klj5U zNQ?MTVgVd!rr~Q(%mTj}?nZZkY7=#r=`pdCO)ornB@I{(7CILe zm`?P=4b#1#gd4LcL?mIF*VE^dqv{U{Mu>&uolN_@ag08<2SNjB3`Y2iIx+w0EeIVy zxe81BJJ(6jVE}ER^`EuT{{TlAGTeoo!7rnBs-RWDlT}OV1mv5{-X%NLd_F(R0^^Mh z=5iBt@F5{q%@=!zEm{y>scfbga?6Hnr(JG&stf@En+Sf}lUEFj9K|VOw#bWYQm|lC zHek+6MQn)WpD_}H(0J*hk?3`fLaK<(gSJ0un8Y%$f%Y#{tg)hS3MX#r8Zk?{^9|^y zpZuEHFYtyrN62P>l_+SDkt(HoN`C2v(sOc2kq2_cKWcFz;<0b~VJAB`Pj7rA)1f(2Mum|+U`N(FuDx@ujF436~p>gfZIp+q$szZ|+HL=)x>zSuyR28CT9 zgRKpPmUGD|0NFlscLC4YOMq#}RvRnlDfUCBG#~bV6nxRj9Y`!p(c)Ndk6v^i>lF5- zJqA%TlK1S~sJF8*0Gc$EUKr0Ueg5(LP_V@d*C>U5*Gp8PwS{k!MIeG%=}yjJx6ksr zqX235M?GbR8ERJ}h31X2DP16tEL&niv|ABM58M4i6`SsnJegdmEb~~@YS9<5|G+|7z80n!Bo8OsB&nYsMD^EM|-nV(n27iDx04cN@ zhv;?CLR`q+%|eo-$b6+qRX^xEBz5#?VC=v@D1!I3zyEfkaJz9g*|~J%K+iJFM?Gll zt+-}w&O6FaRXfaC0kG3MY=WZiiN0sx!!5|<=>G}e{ZE&7^)@%m1&O4FHZcF^)*4Xr zY|Q+M=S-LKBZTnf`KFmgB@3US+xzf^8T6pc0O%tmjd@b{$EntvKi~*v^bGdflz&dX zA5`dg#=hwS^`aDAH1}4gL_OdT4q_ycn5e5Gn(6K+xtC|p=P)YcILIk5Knoye3k9QF zirZQch}#=S6$b9zZ^&`jq~$svU1U|eE?D!38DK>7tB1EB6ZkAD%*ZNlK=B*atZW{N zqg7?A$}EH(ynv=nsej2LfijbBOC~EPmW?q?oQyMLH0F0k;1$v0SOzcL%76jVvLKR=xhXv-HQC0mmXFxBIT0E*d8)wqOjV_TfP zsySx0CN;?VK^3*abIPo$JLMOfHa06pauZgbTJq9eRpIl72H%zkTUBU1OySUeA4d3x zK1bRyp>eu79(b+YzZ)9QC}vDIgwxBbgay-oYmo*)xQ4_9Lh?E1sQq;XxCpWpTpkT5 zUPlk4Q-`+(PR90=tOI;Dhg z;osl4k5t-Tcxc*Y#i4{IFDzN@AgkfcDSnq2*T_+OXKLMkyUIR!LRRAza&>9h_33+@ zI{5u&^TbuztbpR_E`GHJ-D5m?<7f(P^9nIXfGm8>H2N&;0(6)pBck!3B_k`3gpmU z1K}NwuG-9<3~$AXIyD#}972Saq56dgQ^mmvSdgx#_Yk@x!|T72Fz*V$@LkC~>cAi8 zhPUE#QcB*`T#ftqRo#8wh|m-?0J})*EuIRteP!w8LR#*qSCrcrzc+5d@>qUQFT+Gi zLT1rl*5hE$VQ=qUHtIzIdO9syyqym|1UKv5gUeXKynwVzR<$;)Oeo$}_>|)G2o8zf z-ua%PqaxRtMoakY7u#k{6$Y}%8k@QlkHSqe$WkJSje&@cJAeiFE2shRn@&%4-3#@* zJomy$Hq#%{4};!NKp@!Rjl?E{`+n&b50@z(aGqm*{Y{^*zpK0Ib{3jZ*oEU)EoM!6 zxi;ZtKGt8+T7p@5t(k_y6wh%LSwp%)P1Gt#_R%2zAF>#)r1b)FLk&==%c5DM#06Uj z@0Vn$b5zI+DD@&LNa5Y=7D=m}#cUd5>p*6pXnDI@7fb}H$SRV9Sp`E_U_1X0z81VF ze4T*?5m}Z6__zjI@S>r1vV#3mK;5}joYz_J$;?-&PNt3n6Km1%1>xk105-}RUB^^$ z4sS*SThMImImCy9}$|TbxaQ?dt^b?F+gN_RuHgSO~mIBvmK8?^pYq@~X1bl;Z zlVoGX#j~R7w(K`h!#-kIv_s$l`FSO6X&F0q8MGk{{e{~rmg-D$(_0ov$82qjG7%)k ziz1mN_X*dUc4kJvn*fV0H8@ubN#7$Xx5`ne=@c2p$QaTa7G99` zK4@7`!4+utFgZi)o>sS`A~>4LX)$o2ZTefD??o^Am5K_Pvhdw%wTEh%MYm0Q_}FP? zLd#Zur5$gX*3w|hyK_Mf8fuAK(%7?cArcr}i|SWQL%v|G+K|x4ehppp4CwudGXyQC zM@lL%Kttk6^jI2hdKmS06n`W;@~0yckr4Avb5Yp|)uSb?D{GP=lbuqtyT@)khd~>- zAxfaY4x2l)=pipnd~|rrS?3oJi5JOgcMQCMiuaui5*c55_auIlo~*ojtBhW`P$j7k zuFYf_b9GT|1}cDMJA~IM*c^vNb-_|UXh(xS=w7B-{$#mnJrrn}Ss7z{hd#OT2vH!# zv4@S$J$e1{=hnq~^g!T8-2Ha}O9f?R3WlkJi_pC#5vTVB>XuH#eBpZ2k8x<-fPkI| z{t+}=OTFeG98{7QwHDk{BDa*R#C2XV{`VOV_pu(M(IHj&mpB&?9D2P)y>oxe^Uf=T z0@SqPF>+3V;_PHL1Ol~cpih;fFKygW>CNY6Bd0=WZ=DGgmftFH(nYOAJ<~-tZ5~dv zNVLw*2;3~mRz9`6b_yBY5lh7pq4xj}GS^%8NBYv<|F~8nf}$zT_;C9$s3PJ(Wk3?@ z?>8HrL@_;4EQ#X&_hGNJE2ke7Wb+UFMGMOzXt9u;I|>x4lvtIlq!(j17$(0<_j14l zrI=LMxwhv<&LtzFQ`-cxaE{Ay(VUtd?CDP^e*|ZYIh(?`%KTc9WVsCvZ-S4N6|ZZ;lN>CPtd^%Lgj`0p99ch5`+W-co9}DwGr@wK|n7 zxfF^{uDM+a#fCM*&x0kxE4&Fl1!}Pgbcti=7bQE(;*`hB$snrN0FhJxLS1zj^v-h@ z=m8Fsi9ozg5xZ%p4bgK^T7Dh^-Hl9z7n-ibBTQ6OhO0N{H(e!o+mgVh4zLDfUg<&% zAud^#qsi>|t(tgLaMArq0<~K#D=rruO{U;jv3#yufjl)}=01^Ttj^*g`=)YS@$8+7 zW+U$4>oN6lVcX5TvH@Li_BDb(t(<0;*;gk` z==*=&)Ilxjh_$DY>$PwxyxECb)4hSUU8L~iZPl%KrPqnaIm}tSe8|J-_b?Ml{EwI^<3-Ry8PEhzRKL*Bjto$tCB?)+^jdzT~)2+|| zD=8VJsm6ccAOJ4gOJ@zrqNl9y3LO&y zGdUbYGuci+g8kH1I4I)@Kt;_Eri{Z@aO5WQodB9 z$+h&zfo(^nPkaf_kmOLB%QT}^rA%tNIg90NEECr7`F)&BjuO9yyOl4nXf>m)){`{l ztcC{l#dan>*#tl&7Mx(krnv&0#u!Av`HoYZLS0rD;T2;{LftH_Ux%lK?-d=J1xhqmqQL!9 zZrVmNdMxmq2o@MmiF`ySc_*6gKv98)mB}^acy#vTHDtBj{iFqmI~Md)CM(8ZfRsEL z-wEHG64hLbgV#X&g%DbNqO99E zKgo%~u45a?un~7ceLLmo2fpHAoE{Lc=&|w1I6X+PeSRdK#62H>fEs|_G94f5j9j@# zAZL?(njx=5Im8trkciZ7OJSHC1Z!|>8mi0=D{j!tD=~-=)Lck&iHZf;;AqKfdUp(S zXCRF@dUb2YcLL0l7p5MTWBJ+aZXZpTtmrsdhsx;qZ7-HWX%b~BWRL36y?)b0ET%gz z&M=R7E!m*vjvrwM_l%YZC5?2}RGwWd(10|c_rpatju_)i&|lt>7nWRZap`d<?Uj^bX%1u83*H<91{jguFgf1r}F*f~Cg~CBwZn@II)X=aKe2j|tU>Grf{! zNt~I=DD5CIe2sA4<`iolE^z)HjZHR;^dNT6>^hw;6!1r`vzh%%dsLSvPmXoAow)=+ zRma)pf}ZPaiAyM{q!}?0z~{A`emJm!F$wGDwJHJGra)v<1g-kUGUm{)DM#-XcNE`| zI09+2;=h^fulH_2J-n~Ds@ym{o@+`@rKsAK-`GX9dtaJ0)$rv@c|`pyrI8N=>qSQu zv)UDchdv`h?Sgz*>hR7ox&w)%`cW~2REEwMbPpA0J_6HGq3`SG3zXs$q@f-VIg;oX zq3eaOLYCDl&Gl(@%bOq@X##zGQgIvf)tj6%FzFQ?er zk3NF(kUz)}kwg7)^TUDnZOu}dgi$``33-Lp+8WFVgme1=z-_ds=6R!te`u< ztgJbh0QRQ7Pa?Lg67Td~pt>u`n@rH&b8O^T^_DKJ#(}9LBfs;ZMq0cq`(yqYg`_v5 zFrxQEG7+MFM3fT$BvpY%bJ6Sb+^+wRrSLf`r(o532sDk~ff`{`c~z?DNmou1^wI-< zYGlv(#a>Izs5I6FV5^nXv$n?=QqUhskOsa!SC#}8R!s(Ze`5IoPNmK#HVHDG1{~DW zwP(KGNaDZDB6-7TKo0p(*9*2UhNthE;LvCtLo!(22;ul!mcpExSS|H=JaMNTps%8Em{$8!*U?-5;`6ezji#B{~ zbDw6oJr!#`R#F%n?Lz^R(w9RaVmbLY^7hdzrT$qB*WibhCWe9Qk?lU1gLm`e>7T<}8wHTzZsIASIdz2R4ZX zM$5)cENW7MtIa(}np{lKZ>0^5f-IuAmMz*`WqCZk9^U|KnnZ8Rp?%NN@-u!q>!)qf zgQ3XDiYE6)&FbVL3f66qUHc*6f?OZDjuXXkBNA-MpeyeJc>gdhxdKdByjQbhkM2xx z$VE>?^*VaGScxiIRL1hsTXz0r`^}9EYGfWS);SwqP5-cucskgTti11^ zJ(9_=b6J8F|G$4o-20#1f}o{+_Sw99LZ=*woJ@IoM8KIlW)9Q{kA40n39H;s*0L)l z0BJ_IQlz*dICR0U(dZ%Eb2oh(iWh+(SRIy6i|bqiuDW*m!-Kq+8;+LWzz~Q|LvJ@a z`IR1QSr)h~se`oX^8Ze{#a}qn@ua%St@7k>Q>zlI72XDY%$n&uT(lyf3MeJe2j7M7 zzv-krn!_){H>mUD3RC9ZXopT+if5lm4Dzg|HM8M0pyvGo!qC{ZYML+C<;)FA~yW!nF^Y+k_J(Gmo-3!_~S@_7`hU()Io*yTAo)-u>T{|3C%+K>e9I5XB zh&Rr;#X?(M-l&r{nhKR>pE%W3w3H{NsZ0wl`vlUJ#4|9$=zLf?i^Feec8GF1jB{3{ z1>rg&_!AI8=OQHwl3GI zvqe}&1%M#5$!r-c()4s)nR7!;t`P2@C6OdX&{%e{EK{`$0GltI0uVypvUh@)*Ft)y zHO26}`YY=6F0Q{U*%H`qI4VD^*8f_n-u#HjrDt5_>-JrI-hxsCTNs*(GE^C@)E;iI zfTlzS)#o^FVs#!#WEsI=bYIJ7#JCI>BrrILc6QMANCAqn-;sm^LbxEPGYBv$56S4| zdJ!k*-8+|+vR~w(SB7XT%h<~O;<;{vk!jVGKw_yJ3lW+H1<^mq*u8tih|1Ji`4dEM zFpqh7N&OyY^f#oMq81ybI#*iYht(w&T7in!z9PBa9tqU4~tfA z8?fWSDW!eye{$ys^u2d+edoW#)6g||(130A&G9Q)9(nZE!ZW%qfaOg7jD7fO0ingYuA>b=WG7BusmkicZD{&FCcXt(SH0B*L0}_S#$t`{04k3T~;Bu zw=Rgx*3}zJ+|h-9&J%iPznfcmLn6;UAizhBiNLzRYPBX&bUcINzLx1u`eAb@5z?WR zktKIZ=&oN7S)HvjuI3ZRGt_wa2HJ<0LJulh@EtgvR>)=wzZZ2NM1B2L@70WuE;s0_ z6@mKHnW%*WoxA`aTH4r9M-=Cm%z?B%p<%dx$(cpxwy7mm_Z@P~lWsmTlj#ij2FYulrG zK*!c6F*O;)bQxEQD@%HBrmU}qwinS%C&wsdf$_wMhfPU%=J{^h0G`+ebv0fUZJPHM zhG!w3YQfALHRKN&U4M0vm80&=>BMh3aX3YcL)__$68Iogmb{Ub{*F=pMl4cuACEfv zysk&RUXA+DcFn+-8b_8Vg;I+-tA9UH?EX(8Bpz1;Mn{qzpn)cZ^Gl@%{e`-O*wzoy(7{a1>Z>OFo$* zuSVpfdsuno8<;c2XU>9<=KyY-3dhI(vd{d0(A-`}YV_vo2afE3Ke^4&3+w_K=WK}?mDj?A~Z8)lG@_~c_weSo_Wh0}m!wukv_qW6K9;Kl4( zcE-8%&oux^OZLx?Pzyn?QpT*{h!;+oOxAoNTiEY_cJ;Av_m13Sw%R%f8^nRd#^+?p zDM1hw5}37Q^WjmRvXC6U(hAKjMG+sS|a`P=o3?&|r*&@y%c(lnEq&y;BO}0O$Pf?hx$ZmkG(@0oUBSCod09e9>hyOvG^1XSI0Z0$ zecPNI>#Z*seMS3y{eIRsj<#_D^X*59rv1b7sMO4^ItKk0+XvbO-qM&AVd`SY>L6V{ zNsDx&p?Yq`*26=Qg1x>HF-+`U5=tCC=|J-iRWbj$#`rs~CJZod?X|(DqrQ%J^X<`=u4YfZT_^AYS>RC1+0P;For z$sJY!U5}-sOsf?c%Dw3}Ot(t8D7O#5{5_91BgLKG%Og&Uk3pwJ?@0DfUQw1^&Jk>p zgvRe>N)IhctRP1nMW^DOV=$qkxRWsyVuxU9^GGDyJ{#jHt_$B(9l0nH1?F0<$(fk@ioVqxWy zPllk!=%3x_$wNMQZFr=Qs$ta8f{i^=ky@!GtS z!6Gs2c6mh)aDf#mIqcyIgH-Pfxap%a$#In~m;Xy8$oc;cXmr}RZj-wPF%CS0+tUyv zqe}kw?L|VvPWPD_lxRcn*6vybiV^~xLfWQ-=HSmf%avKc=T_CRs`moN2j#}vt$7En zw|&tJKTke(TRV(M%CIcJ>1 z0vlsrN1y~@t9fW}vt8YGF2I;iiPRe6(gMFEz{?XfeWuFhx>f{c^iXv~sFrD^CH@y8 zLQ@CSHb13G9|UZES;xHAlb`iN4W_92HO@i~3o@V6p=oxQ zZBIf1V_a*Mb4k;C35vFl{3pcyO|@^KO&J=b38COufCT3haZItoglBt8-gnj&TdWMM z5h?W}Uv=8`xB#KW3H+D(sBaY&{>;+b2B)8-WtOj1e4P z2!O0Rg|2-&igWtIih#a{J5`yf+}5*E^)EUe4+03H-AT42@^Zk^_##}C>#a@I06#HN z4^<8!hTkwjOXbis1zm=p-C_|sIzvJQ7JoiwcN(1edJYDnFCf#<(m+-E3Pw{W6s{}D zsb|?`7}GAILF3(??6} zFICZNT+P+*shS9{)v=iI{9pIj>FQO#fI0CG11Qr&aZ7jcdsbP%p;{0D-HX4|`Sv47#yT36AT3hZH(- z_|XQs#81yyDdM3D0x;qai5|y(YobqKQ`zp=zxI!SyoiSL{9aT@z?O^B6fXg?nlB{2 zR;q&A0HXp8|_Ja(*e**dlv~*_N-|Ipv9uwbPNiFt% z1w;YxWh?<~IeL3K&lhR~ncw5DZK(K2>P%X+OT&upGZN(%s@koc3K8S(t&zk)SAQD* zR4JJVlvt4fI5W<7QWaaAT|X5l9{@RF%*=nK_}hGY**YcrKfqXXQ06R-6SJ2VRXzI; z#W+IZ7>37qhPNaC8hV+Zc`pC4tRG(aI0uoev#V*O@Bil#U-P6h!r5=pPhmSG(Eu26 zY3bLI(=s}~148PE<)s-~e7YME6oIF`nBn+5z^Z6)n}$WEOQVx9RhHgr_$n`S5R{WAQ4Le)^syR_}S{4=1{Cq>XBQL8l3S2etWPZ~TdsYL?NsgbtC zV7(L*E^;ppEmj+#B7jS{;HeO$%4}G^qrx#iNN#Ws>O}wqc5-88@b1}|v~^3TZXlB< zf0>34?}Iu*W+?R>B(L5XAE|9kgwZQSiD{1t072B~yQoc}4PcYIhy3JMOjTZxE-8K}ZjE19lVqgMDKPAU-DuokMgU2l@2jn(CT%)DhZ+mF2)JKn|D1^tT5sYzvH(D`0t&y4TaLl_ zmB_A2%*Kv!JgmdJ5(omh6rFbtJu~Y~Kn4$VD~s(`6C;O}CdcRuX+H7ZzkHf82+ z=Xi@9J!gLdHegke%1IIam{PRvcnZpB+Zcd$59W`WFrq`$PohiEBoD&3I9C;O_)Qp(ul2GsrHF~fQ-tuQ#A)!Fjs{3n=- z>7tQpNH))MMdT@WWH4J|6I<<9dgpo|CJwyM8@bkYnGlb(dj~eg>(XC(DCovA4QB?z ztX+I|A!x-J#j%{!(6=7y&@GtMAz*L{r8BsAnxmA4xD0M!-LMn~+}p+IOeY9b#Hc4S zWz;#Q)As#Xok1DaWsZ=6P}ZWh>UCs*yky?=Epp8%>s%3TH4+X1-K7)oG(gwSsVjfmC^$9%Q0;zAoiP;-s-P|7v4-g= zN2cJRqp^5hPlr&FYMA3Iq!-`gW3S63R0*FpQ--SR0!TON3MVVS^0@e}bL|4Of38?Y zegrfZ^Z(vKFe^#<{uwXC3g{ScsDOKF!urZdv-cV}%{4+oK1JI{hs~}f#~9hmL_773 zIuH1RWPxu%Fi{Nx%oVLEW%O(`SbnY-z*Urvh({L|&I$oH<1y}QyDw6*8HgvS2{W+) z0aT9yaMOd6EwUche>luO5rP(5;~{(hpNt5U29Q^<##4Rxl#L~e4NsJ{-6~?CkWbZt zOOD8CR8Oo**!ds2)L!mT2?!qv~@mqz6CtdMFOK z2S!!zS;kVUbV^4&I2bOhzso^_sK-BsMsz-=f~l){GQs+bVff zxl7zgF(W<|*QiUu{^TvKNgm03^3E8sl}@v|e2^&k4c_12LHa)w49FfF&2n@m-2So^ zb}7d@(U`7WgU<0W3)7Qz6KVppM~JB-RQ{o(CJu8O{fED%HY^+X*0DZ29Zn%$)M>lF zAc{|EGZ{NL*|oSCt_#N+a37yK;a4At@Jxaoa6b*p^4FOu>_iNBxS^Cw_3R`|8bW?sCoBr&ITD?@ZbjJp_lhqO_x z6TT5!*3`To8Gu70QDfJFae7Ihd}f#|!Y5^Sq-u77ur3 z)XVvW8id<;*TOOHq7+Y_xTf9K-9C-b)9y?fgwnz!!i*(XaiUn?IW|vEf~;{-pr96N zO=Gj}qx~^_jvtF)fm2u7>|iMy>r7>2H@L#(z`83(R43@R+brWqmtclJZdVMXah#vMn}PRdihVFZF*r#V5VLs1<1RQZ9?|Xc zB3W4TmVUOPOqx74+vn1ZWI!=YgiWx`-!A2D{Z7IhNw@(O@+0#Liut$=Ca3&sSpeW_ zpKd;rt5Me~F2-ZSF&IVj-TRl0>GPliN6kmws!cW%Q-Xtt2b5-%-&g8n*A`8ldB}7U zs)b^?UnSwrRGyRiPu{2~eR_mH-d@ZTm_5OOC~J4Kg28a9y8cWH0=6Kt9b1h1)ba6f zO66}%2x84`=BgCjLra6`+#J(rRXR2u_Esi*5Ek%bnBej+=@}gfYTEN} zT+H=ze*r-d|8XKJy3b_l^B~shlO+fzNJni2CAGuRzQxsZHf@i`nl+F9>ng{yws&tA z<-~%@fQo4ikC~#z@UBA1OwbZaRPrpiY=?1jh;aCHk4jflS%QiQsQ^9 z2@c}-aX^LY6ZXYywyjtp+QpS3I$;704TlE_Bpu&EylXu(@woBwRV44QHF?t{&deoe z<;PgCeuc-ddzDR&TF`@=JN1M>VHwD(sHe1bWM~fWYI|tL2-^!mI$MAFfz<{jZRs-S zO-~klg=_WdVa`Ul6;@7Gj zYD}9!H-_n7iPkMob)(`YvZuU$c0s&+VVJK6ktlfd5XW!v7lS1hD?a8$B@ieVChM`?X}qu zXY>V(4(I(k8$Tm?tLw1al9+KjjG~TN-7PG|#EPOy=0E}aA^anIKj-P`mAc9sQsArF z1eNZA6+qzTY@5q0X^m{&g4Eqf_JHmJZ7k5sJ?2I_jAekGlRDQbY3mX(L@l!D9vRaZNQ8R&O8@87q|R?_nW+3q@rGeCYOdTNM*yZ*Y)VMd3rVoeuK z>f>;GvS?d!$A6gP6!r0PFH3IhTJ?A|+i8s2uWwPYuWS!r zlP1cgfxCgA&bhNHZ-^0rGW+nt$Kee64UMEajOb2O&H`4cm1HG}%p{9?+WGKpgU3O# zUW{+6>ra)l-<83JDj;!K$fGepJG6A+BU7Qn_Ur$FJ%?mFExHXGcV9^1cQ`m z?qz!STO;EEiuU8DqPsDaZT@)zDKM78XQLB}kEa73c4)LB4Zty?_(&O4=#ukg7kdl}Tl-_VpUGa`bH#vdyTMDk zG>DCTfFkDHG^XZVo*o2k$6KR(E~M9gZ{TX^Fe6rU+~Ja3DvzqKy4Xr!rUPin4RC?e zwEG<^&Bb{P=d`QxCFsmYoDg+4 zRroQ`{JL31C6Q4)Dql07rCMz}Bv-#U^hdiucVxo3|9u&8)oI#-w2^W+hqjxyNJQ@)F zgJhi^cTpGiD4a!ugW^lbb167nGmx*~;-;>s)5wZOtlV0=b@HWJ0%WJtHwux8oU`Xiax@-4feDcg2H3fIWuj5t)*Jmg{K!yDzYo~@-BwE z1_{|sazhqYYD(!CQdM+Al%FbDoqa5mSfdu|3 zL;00qTiXh=On0q62q_V@6NZ#g<$S+j-bYpgX3^@lKOA&USyCv>MRE0B*2tz+xRzIt zvmIB7pV2(x^bb3`PCA`rOrCY;+X}J=%~y4zyx>bEdr}JzE`Bjlg--p@KZ-h&NwFrn z8y&85gu$%h)NZmj42MlnL7WouV3Jje8@J-SsO%d&XIF{E#S?Gr29*Ou3e!*+9I75y z?=!2u;>}AST#58uU3bU?QZ)EsV!Z6)_HgtNs9ffkHt~OIurW;9n@WDP3Qgz$svf&$8F&)bmhuSfx(Xz}YS`bnrwdGD#9+peJfKFj@wzC*T@qtD z!T|pFv$5#sg^)t?tLkJq0!PhCLCv~ZBHYDDOS-^PUzl}z!aiaLw#_bleh^g|VtzXH zfFFO}*yO>i>D^V!G|3m`uuF@KObQ|;=-LBzfF&N3GBdj{N2z_S?WNSwQj>bTtf^Ew z0o^iD9kZIZ?o*JfUG$w3u1sIHv#kotZlK02Ri#e->ZX<`RhXt2$@um1Cy(5Em$Ll% z&>D&=B`(}6&tu^gS`;Yab{Ov@!ZuB2;i-#LV{RxWQj^7uH6PJ&X+RT>TcdB7h%i#x zz256rfX%oh9PVfeGXsT@Ld#UuASmsv;D=uD0-(uh104n~E)VrcQyDO|?A4&uOB>)LC>{R0jeD8UNXMuw${&!3w-)0c ze@ehPR7!Ks!nEuOoE0Uj8cHyk+%yzJ%#W+f3(Y4MmIWG`THp{{>gf+gmQdG$?>X_{ zW20b*^+edt7@4j#LHMM@Xc5unCf&gwz?iTojDYqNiUDyEwANQQOUx_y10R~DknODK zI}p!+7WhGDDD-&=Z>Jfds?cj_WjC-qnJWcx~HgB(+=5++y!k+k*aav7> z#{6ru31|=-VFLa3=}QMoJarfFkv-OyPf}b~@T~X(FShQTl2Qb!+#m+G z6WH2;Ghg23P26AiuNX->m9km?ei1>scUF-us33#kP%n180H296eVAH{uxd<1=dN_b;qpYsq*;5lL{@fc(ceQ-yjuItBpfnDJOyp3-9Ak z0_v^y4XaQg+)_!CiAcF2yVq;+^&l%qXCQ3?w;C5dgW8Sh*vl%a)3^SmcdxOU__1_} z6q8J{_a!1J9I0g7EMdZS@iZO)qi5-<%f{j?{{GNp0fi1mDhcr$`i z%`Wct`2iDZ&dk5Nz6q#;*g$7+h)f6a8BIq)p^M1jFpQ;^uoIk4P*hqd9Yw&@0@!)3 zO}=;DzIWqIw!Li;Y0DD9a(RMtNV-9uE8hqihc*FI%? z02KvZedhAc0L-{!p2btQpo%RXj-4i_o{J)ea?Iv5L|s5rCs104+e$zbs0MM=>%H`yZa> zgCS(6cv6Zfs3y_3Sfp(;b53lYd>NTcqrMAjpTW>P(XUczsttEMG)1zA)cL1(SG?nb zU@jt{{zH$TXP6YN?ZSJbgQmj_%hQdk?=#Z~t;6IX$wZYJ{yS~TtV1aGxAyO(u`OpG z$M9m_dU5(rpb4Z{r`FAb1*u!#hCp~O6RH@u8d+h4hu&h|s4g9Ez~ZH!f?MobE#~d@ z1$VnU)e7~UY*785yHvrb2EAQeR7R{80(CL5Hq!OqO(_^=0o= zo>^njo;BgypF(sn2PDJ=Lim{8b~LzgjXOIJNMwvX#Sfl(60>0-cAnWVM=kpHF|d?k*S& z<}El4*)&M7_Bv(1ufE%Y0eu7?jrqd&gsr#fTYW{H*QI;F7vs_H1@NM6V`gp7;^0w{U$lMki@146YlbS6L;P13`x&MHtq-)g_cgo__XT?ZX`f(-^@3)a zd9GLZyjz_%20VVrxc1eU7tOOC*2&{;7t$*q7?0-Fc?ljh=mO=}ToaWuJ`M&u1fBW_ z#rU0RI0d+v-A%r!w6N&*Nj6&*s-kzYh_i^}vthPXUwU80`>!=ey1XkfZziq>obK8S zlF-@e1>sM;o_DXSUN;=TB)6oRqJ(k2=j9Vws>pp-sIcLjez-)&;W`6QSR53{kg!9j z!w=QogT7s+#owJ6m<=vyI$9SAS1sdgu?r1gz<6{+jbXqMiUI{mFjjxb>Wk|GE9;#2kZ6kjgR64@61= z!pD5qUw+k$UXHC83-{tI!$$QxRj&S)6Ydoz;4IMlj(qMO$#&@;cUi4(6!~;iFNG>+ zsdyz>{Cug6;3I-wtkqk`l7m~llz4zJ-w6?%cF36|wNsTh&I}8dRB|l|{)LHJ<&_@o zwMZJ1^y+*LI?mc{P%b5G-LN|!TcILXhC@xrkM)ngki`1qICw^;nu1?;n`q~ieZ7C6 zU=X0=Ds_ZlzRgRMlRg->j`P31 z2(6I{eKq3tEZ%%U@$6I`?h<0O^^H70v8f-#I#aMXSN?iYI3UiKIh!|0YZbC`RAh+e zW&%wN@K$y6MovmJwoKw0LnrhxQ5zyBHc~(NO7yH>F6*GA=D69yLK$d;qn*k_zQBaR z(Xz^cg+`zPxj$&|wz(E81U%}G!0!utaJ0HenTa60@&`R7SX<+TD?{gNl}V+v&0_FO zEl_$~U6}6HfPm3LSoh~^ou2^LR2GjmUZ`@mI0)vTY3##bcj#yAPCkV#5LY6=xJUdmNC(&MCett_S^Grnq6g}*}yTD5ru zh;;nj`uqB`rLMiEO!WawIkc1(?Okq2BMmPQRZ*VR%y%1&Vgi{FE|WxQxc7o8i(2wq zXh5~^W19n)GAmQ>=jT~dZE8b?0sj)0iAaOBu8XahCSTLkL=*O2j3e;@RcgRjxrH{% z_a>PUx&NVP8~=Mh{1y?9_PWs%Ie2R12?002@Rgk9o((6o&RGzQSFx)@+id)R;WKnI zB)-)7k(m2?pcns_dHYjG7%WSIvlGRSI@+G5*zBz41qth(b_|niDPQ5PcHWcrIuvx! z@x4WFOmj2y${Xb<)tP@U?$fELhXTCt?1Ew;pQ6A(eOvT76>I8bm~uvC9qRI7`_A9F zqm8|-vivu?SDrrw8XFi_NGT2!^w4E**f@Ygx~WHq+|8g{kkA#(({<09#E_%>%$!=a z&60-yCz=n9F!L@Hd)wpzSW1Z_(xkftByzLRY<}%>&a=6w8nny*N#bQ(leN-|(uyzV z2Nf5st_?!5PHYM0tcO4(X4Ig$w=tX>t(($d3_+F8mi8#n)-KXV{?KE=VD>A|RhBgw z-_YLL3OM(%uMe8$0zfggZxqzs!w7r7W-71;_EMmo61)~&50ox;4C7$Endj=LAz7Te z{`((Uotz6)nO9A2j$l zCwGzM~`)!B|Skf;0`lo4m$!<9Yzr=v~3vc7_a_jFf~cE&(FEs-XO)h_do? zHHDw6|M4UfwHg|v2ZnD{@(e3HQ}W1rK9@_|DCri43Q+oin8UVwPHwbkVp=)<_|B~1f>miy#8@kOq@?R2nhKi;{iDnM*pEBdH|Ju2%#LLWzetUyqR~T@%U9x#2Hap zePrAC%P6KUdWu32A!qNDaJ68Npm@~*EC|co?A0k{$5Mf!c_F#Dd7!)OqwgJuesIm7 z5s=Gs<0$}1jG}*a+MWc8ESK&SUbxS9+vrt`6p`gvYU8@f(5rq_ms{KyvLgpukgnA& zke>OGoas3&(M^b>B$1NiYJ)ic>j)|6!rD+JNeb@zI&<}MO2wYq`KLoT6eFs?tVLqZ zOxI|DTE{URlcaHP`KyYe*hOh$5twb}oV4waKr(VG%KSkdixYSEHASg`=>~%=j2dAn zI5F9wjrdx6>=^xTRoD!G`S_03zcB{t%b2sCU_?c^-Lge@{x5iJG_fCMF`ELJFLHdZ zjVfGaam(R? zYFvN}G6@L8$*Jc9DQH?izvB;g156PM+&02ICO!vR!(EsF=K%~1Nd72@t<>3CvE-5d zx5vGfKRB*4!*fuYA--{;+WoEuILythPKeDevJuL!AXZeq)rQS?U~~wQ<4raLgb}(Y zpy%*{B-R~Ua6))p^l>02prhQskcWnu|3*tO_1#Pk47lq%-lO<_FI0*l_QmWDk;39^ z4m{522(=^iqce#Eor(@7K%HU`0Y=ry{5J@6hG~18tUf6ryX1K}B6ypl)(o#6-)=B* z8y^sDW918iW~^%^4HBUi&})ZBDK6LezQW!@3Fenl3y;}e-1JZtKQ7cg+CbKeKhP_- z8-WX@N+0FUMG1Lkj}L5m)k;ERq$aync+SW1dys>#RsedOie=5P6Uh$rd#yd!Y3 z)MzaCAEF83k1w;ZLgGz%lZmq+ROy#`(>?510B}li5{GO*i#wZA=*u&QqPZtT0-u|2 zl5k(|^-xAQKGzU`{*a9RMqxO6G8IorOQPRHf?mll_Wh#8S+(NmcQ58Y0d_i86+T(L z=ZdFlo!^xW$Ykzwa{kHT4}v=2EU**KUEfj5B3as!ZgOgrz&3$_7c5i^Tvp~m;Ik9u zBcAV4+}nHOWqN;BW11#+@_b~2jlVPSU<;Vj8?Tm(fHv)%68Xx^HFC&xeFTM%FAaJM z>Np?MPY?cc&?sUyLbKXH-JR6~(mm3q;Jwx70j!vwi6`NMXaJB7I8z4)hHdWkgIWYFK8O0$6wv+hj9!J=U5pP}v#V{|m`E z*#=?bI*Rlg84(?wt)BvVTk?JZ$o{aniN3EUc2tIVmZS}(*jj;M#|Lr= zwC9BkOFoWL=kVocEb~^$t2`10tHbZ_&TPs)P$YSl&;`&&bx!$QM?Q2QmeWn=U@g^J z>KGk)ji;q%0${t~7$FAl@CO`aq)>+p*o5B#LApd-La|=G_Iw)>`rlW&@;VMBv!dF9vW`1$6l{5(cG|=+uSU9s!Zh<9bI-$H&2$- z>xGJrXjXm9&fOo;K!tq3y+NU!%p4SwC|(#m8hq}p=OJ(B5oS@UXr!!R&lH7T*iR1K^8DdX5- z-ltm)0NuUzl~Ubmk*~&Hf+#^cIfVT*2@+%C3Z-cCrUw1&w7oJB&mF$^Dtl(e<(aNK z^1NLD5BP3b2f$x;&R$MO(w8P#&HS|*1PSnMnZ%1Zvf$#}^%s{N+W9=7?P}1L2xDuS zry)H%sXmEmNb&ZGh2X@0L)yrbH~NcD3RWOhZ0=LzhF;8VTuw(Z;1HX*OBnjCsZ$T5 z3_GC^n*ZV-C)(7_sjcEW+TTbV&VU6|+zxlfreDP`dHCzt5tkNtwNo@@EdM$DI)z(~ zuePEj@HgbNg_r>PW_W|RJp?mcsrSlEE4-6_7z^}ivd-qgma{%^v$|Gv7$zL$(W7IR z*rr4#Hk@=Ne+RXSN7-6vp8f!X{V5(5DB!_AT6?^+_?s!fzr$K#_{XeFNOmJMs<}4j zErB;Q(;EBq0kTyvt~}K=YlZC4*|CkAv!VIl2qT>`7lY4crMtbeekjL2Onh3s50Z@< zJT~y!1*nQ#A>@eXf8GS6O!;^>6U?=KV}fWgu|9Ty zs_w}9_wQE2PcBmVlsx*=5BC7Fz-Z6QCujXxm1_INZ$CstN7NSrZo;I#Mip?{F`f#N zw1eg+4|m-_V9oB>=TQ49@u1ff=X%#yQ-QIeKvX@K{XfPj4Og&`HDD5Kg6&cE5r849 z+umJHy}<$c)?*pAH$i%ly4ZVZ%;)I;U@0dVW{TsqFb#ru>(g+hN#Frx9ZQM|)=SA? z>dS4P7)y}58>D5gzTD2gJLg%LXx^7tESY{)D<;34^#0kCF^a}78^vAGVDV?qmW@+U zU!}R7CYK>Wom807Pneq-){3Ffh*^D`2qNQ$W_iu4G>A2)+AMGNQnxjaY*QR@FB-P} z5m}Oqxd8U~1`eA_mo>2pyXi%|@2QgF`f#1k<5rq+eZLSyRuu(gm=u@X$k0s&yDLC` z(bDxQ>jbDDZ-q|`c1qQH9k3-~g_IsW*Mc#k&$Fh-l$_^>o`*<7LH?tONyl6HL3XfdPbbiV#aU4PoApmg2-FeL2FaTcffHMogb~v(|5-ube_L2cBh!e{~}io z%kiTV^rEkF;^&;=<-YMdYcGO-1OFCK0%aea3j=MPN)Tlx{r6P$0g@P zzu@E}3Bxp_XV5}~+VJ1vaJ&x`?h0*&CvTFg1o6Zc zjhMB94w3wWo7}PFi%155HV8S9`tH~+gZ98Ug-}a#@}DnmEO!k@c7g7M-k<;seX~6~ z45G`bcZ0E8`d#p}jXL1<>v33xJ@120bs9ETj~T)}-Ou#dwLP!A6#PV&D_e-ei8 z6aoPI2>We);%!{d>sKa;>sv#3s;r`s%kuwr(vnt%S8*04kP=o4#QLKV_@r40PrsC& zMF30s-kTT@Qr3`cSU}$>?-g4u-FX`7d7(N`L!vo~-{Y)Uk2_ zHdGgQoZX?w4Y}{9w@^Fp-;dc}L9g>WReCn=yXOU?*#JKx-H`L9XI_g@0y-)^E`g&d z*^mu91csx^GYc8E@0xtPOq2h+1MRUItRM9N(+UW49}RZC0ztRA)n#;p^i=s|WP3}G z!JY>kx}JZ0`An^W6fL5pmkpsUaGz`j#dz#A@&Owm0w5}AKfcDpz zLfK=Un#c_yFZ?_%_a^4kmwZeCB|!89p1w-L#w#5Ps&IF#ScUqhU1}h0N7SN!qK;ms zJbx^hRk(u(!}f6swk`2IrdCow2II>Ai^YNX6Zxq~yj%8>Ay=X10A~+qDwXi@FEk%0 z@{nN>l1GY+U@7Gh5K|maJz3G-9Gtwd^{LzOavOCXe zHsSRk9qoYwJggr|*KXt0=$-MXGR~Xb{qaEflg@q!i|$^$?>V`XLMwA4WX1=Jt#!rk zd<`<+1ft}~1s2Cn1^geNqKqAsCAX@UQz&SFR;^J;e;L|<(Jl+A=D!9s$1WF5|EQeR zRA-Z`k1y{NCbN+=skBa^gD1ypQPCB+4n;gqC+u?ov%wcO6(;KSS%GW5WV%>53{v-- zq*hOxo_ZWnPuIvS0PO~tzXoK}>Ejl@=~N5y0$0i|&O`8eZpKqb!ivSJ$|t zoz#jFeCl2K-80S}^}7HpUPGQtVm?T>t$tX4N_LBKvB%&YD^Y5>?+;}AGo@T|)^FLveQ978xTQhsZ-RD<0=kte+ z_DR{`PWitBG(-*`P%X}tVys)$vvS$_TA2@q>b_wK5(^z&Skb{A-A+W( zH&AH55qZd;!`wiza04E!?_spBD{q2*;;pncGb6q(!gja+$+YY-Gy{%K?p;aZ)0Zhw? z+8wFfmMgWa6w0^@ru?R_NU$^y_dv`|HI)@aFSN>CftQV<(|Ue`bepnK;ROWZ0fTGw2W-l5 zD#j0DH-)>0VX(rkSwW9~WQEcyR$V+&rQF8w8>zpfBTpRt-9Xsl9K&1xbLgQh2VF

%A^v8VR@j_#F` z0%ZXL&xamNESDUsdBhcuj+fTvckZSJL<<)3cvJ+R!VY+7Hax<}z-ok;L3hAVDmEqW4|q#)+`gd!<|&5kA2Y z!cYq{c{0s$?LwW7RnaV2?MN^{bP107JAduZkJ!ihFDp%-pfQLGB@;g;9qySLR$v~6;3{lg;u?&`-%>d^)> z5gPvbu&7nC`aRhh#tvPuYE!`4U;h~qzEgyC%i$>}fWHd+rPlxf>7in z0~5m`a-ZJ3EB)VpeFE|wN&3P{B5tGt-X0AkNmufnIs0*}EgikXV^78jw+jieU;TbM z71pnu9UMA#ryzp7EMIfC^?HPi)D0)TNtuPdKv`X)rjl(nMo}{3^CPE5UN>Pp7zRQW z5LB%!ct9Ha<>@{cbU!g2?s$vd`GN2SQg4hp(P2b=++pT4$f5ie|5yHuUH23IN)NCqEsBuLZ z`J%hHbnmW?W8flOGd96p+5VOf+Ghxr-Yp42cPOeoB0XMHD!KfN=K@s;t^lzMyA=d?;;V5A%W-xp>#2?~@vT45@kv^0kM3m87&R`(b9i&qj=10tINIphSFBBL%7zgB!9`mJf{hNfcg z@Z1EckfE5#(N+o4h1*nlA5O<3dHLbMtMRgB^~`K6rP9vF5s=2S+6|B|2T_2?Ac><9 z1p!$u@#WMm^Y{C8bB}{l1m8?i6MKpI7lC*I`3^De41|=i3_&mv&#hRTR@9;(YH*Np z=V%t>(&DLygNSXn(^!7nijmbsPmjdwy?-@&uvHGsNfoxS%^E2xsP;&5t%JFb_+9eC zE(p1ilZ6)FJL~`W19^g{7NtydmH|Z_nWS=U*UTg z9*uGBMr0L!wT~NlJ_X|Fu33I@r_l!)r1D9UNo1dW^un_e!P#VuH6C4EKB9MNOZZWL zOQYWxJ^TS7ewb0ci{>D{`Jn~l(I|U(9Sr5SuA$HJUm->iSEZ5V#H>WU59pa=Z$i$7 z=^Z4jc}!NRpcj*L_6^HYlWI+S7OM;^QP>afL=Z;pGNL6&7Ym14>BB5oL1?3aCuIL> zx1cNfssvxML8%2%Cb1MT%=0G80I%^<(XBS-Hq6qtx&}R2uiRP?d^RtKXp4ws^6+0R zIfcqtQl$7Eq&hFGl`Q_VOKM|Ot-isc_(ZSI}o9A_^#iCKgGelhL}Og(g33GFlsH<)4+le4^Nh{z;k5a$lA zEJ|*r1uCkbTHq4Mv~f0!y*n!f#L7h0nY~P9+By9}+7r5AkG5&wnD{y2vHd(T?dmmn zv|X6WXia6ephGIZLS6Sts|D-8&9JCpljBp0zMG zBFgmTi)-u6pw1+A2J=}4ITdIsC62;UU=UEq_j|EPx?9E}a7%ero~rI#wjNO>O&}Io z8B^7yV4h+KVu|AXUonradM?5wc`RyKE(@-8nkXW&HKm%;4aFi4rpo@Zn#I zjTiOf41GcGLzVc!PdGQ_g#Fv8jF9vYi#w1Lu|zqQ5`gV)>;MGJ3qx5f=KHM@30_cD z?_DvbF8_U;w)vkIw!D`2{nk1g=tdxZ2YCx0W(%r|3ph=>uFyfZuCLy zaPIO#GIykefFm^m6FiK7`#@8x9Q8!sCxRxCKR~#0>{jWY6p2WPp*Y?o;%K~7F%wfV zrYXKHR&>DGB?B_pdLGPIp-xr(WGs z-)>d`%PD7$&NHQlw>j`k;}869@Al~-Be_bqGy(}eM(jCBF1$IVDJOHwA1rg=)7Ai8 z0J#$V&t9U*dZA*tru%);ZiJuLne}~f4wWm*+?a`{_3!(>P6z-v!&;5W)cKjMVulb- zigTra*T`r}p0^pkm~=UIErBy4Tr;HUp8P>%?_TPsneTEZdJw$g0#oSxK#UxYZ5-a3 ze;?=uNDd%9G9g&mg+%^qAX3%!nvlFjS==47c`#XNaIvQzezdj41M@%bwSc{=gAspj^sb#?Fs9w}#E&H?mk_`*1ar z!s%Jff|J?)tEH6+NEn&Z-JZ)l;HrP#occJ=eg3ErM$G1IsQFtuOIF$0dO$UUD@&N6 zt#X1iAWQcJo{Q4F=Iudb;t54^YCStmf*kQfPPJ4~?PQPp2Jj$uN*!+9(3lw3W6P&$ z!RfaWKx_9BXYDnHmfLd7U$Y33pki5INzw$K9iiAqjN~%Aclnq|bH6{78FyjwMPgR9 z9h_{^q5*AZY@E?Kyg@L!QdBAnULV5_bs3M#E`0sD=QqFGZ|BeFYa6(N_1gl~xN(j$yl^4-w(9`&O7>hg+Hc&y zNYJaK*@1EZImH2fesDNSU#jl28@(v%fH4i@-a#l#?;|JTkytOVFEhWhMxKJ-N*zn{=9e_dDhOKb401C#Z(InN$8 zncKZvCs&lIDIGfaYBz`7@U0XG?u3W&{ye;M1k^{>_gg3{&6Tpx?`4PmW)RboavQL7 zs&m*R?0!)uut=5H2oh`rrNx4_6uNUMCi~_`fz5I3+uvch2q5Qu7xCz_dEPdAhjaZ+ znV!$Wyye77ru=2T*D+&>9>qQuH^}FuUI{V($3h20FQ_Uuu7`~?bt_VKTWkzH8E+H+ zKX>$L=)#L6IEx*ERuB575?<6huT(<8oMhc!I-{GtBPyy-j%llPTq=brWDxC?s79H2 zDpY@95z~)9rhX-la2tSv2)4;06yYZXCu>^@3d*+p@3aw4eRbL=gv$(S_VTP5%p_l~ zAYIGQr3QW=5~hzuO69Ds3EY`rfHP(hUUX8ni)N|)tLZczh4{}9*CjB)&O-!^y+F#b zHwcb+w|9_1jUrpLstz}{kFfcYlOikVbC?&X2n?S}Hz`Sptbl%fIBO|GQo;FzPC2do znwg~(p39)HBXO)8h(7Lh{(@O{3!!A@{>FQ;PAVpQj4ZJog}?!`bqtX_Tu(8fi2;Qo zUR4Zpt2RmwOK5Y{bn*=q#PBoV{mAv)GWx^(3&g)Jh%qginds3;tcfr4&0}CW$)g$^ zzp>{yv_5fjn`&j#jk>G5tOf!kNG!(2OmhHSjh%RzP*V&-Lvy~wLT1#XixT%FU3|l$ zpzIbuH4c4r-$caA>Svu>n(9nrV~rmC*mZ35kerdwV?DY=*und~?+ZU$&G=RVv*M7c zr@F!7?d8w$?%G); zkEnCJsMA&6hetWH?5LPRSdvkNMk~^a5cew}uyE1?0G-<|548b+BG|Fbq&xuJ=%`VQ z$ccwK#NyXSyIJ9-Bq01u9fF~mZ?7(m?6=Hlm`NdYbQcPS23mTD{*5rfmD@LN6`FST zCtUPfCj5-tA^3Eat!RvBZWV{4uOtKfX)g_b&-Hz z1QqXvLZjc>y(hi3V-_^)y;}I&OuI_lf11eAVl;GcwVHJGx|GF>YG>$-?I=e+r6esU z9k7ChG{C`Us4fEd$|BWBb97*m2VHFILzXO)o(!4^B|WO$IaD9kMGDK{pH~OPPEp*K zxur-PI}xO03>R9NgTkKVM&h3F6LTO5bj67@O)8~23i#9&YGx=@*20+;&{ZBf4Q#-_ zCaJGeC3|Ssl?dvKhUn*dZmlcgWLBE=$%;~y(<4yzn|KXCEviSnY5nw|zAdg4@7oY| zgI?f_4gG6AgeuSNO&NXHz*J_CtgGRam`)7(tS6}v5OW(8i`Ki_x zB(|{=sK^A}h5!n5THPqx<2wW*Dmd-60fJ>gZ;RsY{~tuqw|zr4x^hxR+x`SBK0u06gk!{+3;I80UmT=4S+ZnzT)QdNFfAC$L(ba~f=iOJA zybv+(YfF8Y{cA^8OG7;IY8M)tM7PiX_*QVr{9lJb-l@9Vt0iCNX{!z`fi)|a&Ur(p zfkZ$yAsm41`iwlv00`xDB%sG@vVgc8Pg&**oRpkEqU_JbMZ?sFuT_7D_ZKCH+@?#Hj2q*{=n#2&mZ2VrnO$dUz5# z^7LY~ijA=AM%V0P*~$e>pVK&Ig~r4j8e%5`ePYGP>=rn?6T4E&4Z3%BtFogJN(K7K zDB0ZCMnFVRkh4Yc zk@}VQN=kL|Zc0cdF7w#MPzVkK^0+Tw*FZm_pTgnoXkwUoctb%}R2>}$j3^H$k7;V= zyCvNcf1c6&lU{fgnalDwRbU`{=!!0a#uMO*2~Sp&iX_h9M27o(;m{$v%eMG^ZITHB zdtUpU=^f9pJE0`s%N3y}#W-#uxBp#3Zzy4kW!3hb_JZ-NjUWGlrY@{GvzWx+t1hUk zB{ zH?5CmG!X#~we(Q&lW&6&cG+)~k`bdCbN|aRrHUlejIsmsxbk^e@8@U}{Z0*Apa`xO z9m5Dq zl$nwbq77%^H$dUYSZwbzCX1_$kQ$0(IBy>U&bu~V@P&T7gzsOjm%V$MUGfeCCH&I9 z2ymRdLD3$?=nVpEv>U_f-^5znR+Bq%2LN8cMbUw9Vx*IAwM|9+z6B;cncN))hTsz% zs|X-88&apslv^Sng$14#c zOT)VIw*h&%-v$Of-vJ<#Z5v@8F0ej+8as?IJ4y{rb6$72qnK%MIXVGE3E;cOXW_PN zWkWGU;|?a4W41+GMwTX!tV+T1{xXYax5&1q%{85eKwvWgosF^DF@L6-F0AG&{bsIK zV3Q(43NlMJVlZ=2W%+B6BA5E1aKpR%dt@EKlj~>Vs{3vwh3-ybsXXXR7tV^5?B?nz z)Khexr)~gW=K#VWX(7eyktoL>g#zGXIRNg}S+4EAqCsE{700ndBM;M9?tBu$mDvg* z1Ae8!kY)xM?k@GDyTTJ<7U&Q!S7L7XA9t`(@Tp2YWd32QBsAMAyk$bsV_ZKTuLk-Y zY7EM%EwSGz#cS~3L!FZNSND60-GeT^|E?qeTJuk>4@s>1#!iBr4UpN9yw;G~Qq9m! zq1}fiTYS@*uE42%54UM9y25K5Ge$quVlkQ0Al_b2%;Hx+i-#f|3ntQs7(9d-b|`Dt zy?wq-veybm$Kgn-V_|w)K-|cs`oLbWH{r~?K#v|4X?l=}YCu4bCab_Eojf(XYTt;gg z=jEdDbt%jBE1&4gybUX3(T z^#M?oYu`_air!)U{kxst(rrAKE#oyOI~3pxO?ou?T0ZE=X!6*#xgJ~{^VLk5uG8tN z^+aPE*X1q!7fC!>>1v-!T0$2wHO&H90X<*Kz-@yw+d_&gC;)=xAKhJ%Y+=3PFjVw8 zY?6&?2XeI&K}g8_gCPTBTbDRsrl{ulgN*}Dr(qdef!(oQ;5JIiM6%>m2`m+My)9C+ z=n?0|6|J}`wIh;#s@ejW@bpdxGU4%FZB&9)`YvA(%^UJlX+_89WD?nx8oyy&#~#Ky zoN4HC_n%ta6jXguft)Gh5=cK_622!w~U9dS- zS&VhUU;cS4?oGBIvbXaRUOXYK!cEFBN5dyq;v6h%9NN|^`CR3J;O>}AK~fK-;8W~t zn+A@%Sp&EHet|OGycbT4C)RWBfo)!;aYPkzzM}#=o~|U+xfe1IL+T&%ZZpuzg8*{5 zZoo`42f$0cUb|`60bywRF3PnyyAySd(@;<_3WbHNa?B>lIMD`Mkl!vr zkZe3rSpBgs!~EQ|w1a@xyusj&d(I--oqLYfUDYn9oquz&p959k{>e!h`lm-rGJ^=S zJA0I7zur57w}B(a6~5AE?qeUk(0=HN8{yA?bgs;-$(&rWOS^ z9#ndpC$nK}C$P(T8i7(sj_7b?2QW#U`q@aVwf0Q1V)a9YEJkkha={~XhCVA``fKa$ zD60aghhAwIv@2%r@uHu`@k*C{s8e%huONfrqb#kVjUIrMBC-es(Lg_T%EnGruq+a} zby(NJYdm4D_5_v(mB{NA*uUWVR{iw}p~{Ez!^BrCH3#OQ&}-qsGrGXCvAqrXF{4`9 zrIItAZmzD0j2+mb$%?w~_Kei@*<~GfZ&SaNTzA@_7o&Q? z{ugaPtZN^tNc#%sR|Lo{MeOMvJcf>@t%^SM|2;$?^~cS2ZMC_egKY_di`wuiB;llp zm?d4boWmpWkUBKYxusM{07Jw%Yo=9iYN)Pko26Me*5^-h`pqPF#L2BTtEWj+9i26n zaJhZ?XB;RCN=LXL3)C5|&uO~wN zH(!fSc_4g7fPOM*ZlR0FNfU-|WIwCn1p3Gy635#cg{@oeb1VYJFrESGg_^$)!dK-P8bH9tozO5r;?2rtDjt(O2NSmx9@TTG3N?@^Q!vT}#oX(keZ z8${D+KzpGal{-l;i2PSHDweAh|Fk%4m_nn*r+| zg0_`r#6DK$(A9Z}_lx4jlskQDlkH`WIN_aG3=8Olb3jqORnE_m@8D-f8=E!IyE@^$ zeT9VT$$P_fo_wpEgNyJoyiPt~x#tVsEW}diu-42a556)5Ka{pX@77 z=pX{!KFjCU&!;5sC%$_!9=ws-5KR^96Fkz^3sX7IQlX$`sTOyX56^|lpx0JmTgc^u z(nQ!)B4e6I&NAC;IpE{+XQ1XD)v29Dw6eb%X{;h~V@*)c#-l*-E^zer-`h^zEpZv5t@g!aWsW75ImhVGr?%jBUS&1Ou#(kxN5`#MbvFQ`80&gw(d?rfs)@Y>Bzje)jNOeG;rmfJKrW^+1q zA=>V}a0EeWwAdTSgt0prA6KYL! z$)7pbDtn%Mg`{B97a2QhX<;q3g7LM zi?ZL>z}4n)e;agYS1?gVqH0TrvjxgMffy)&c3g2oJ&YgT8SZXzQp zaKQ$*dN-gDUBr_vtttmR(>N3|7p`cJgkd4K9Y5FdQAdQg$BeH81;L+%Jen4@T>tek zzRpR+#KNB+e|p~h{9b97rfw~NFf!QW{ch-sJGyWlGDwG5l+ltpT8>KpNN+XanV}Bn zi*Ik)c}OHA*{G1e7jz)OwTi1k{O5O&4LkgFG;Ujv94F?eH9y#M*}Yxr44wIWQzTzT z%ma0{vZ@njnOVU~iAML(Jc)nK1>kAnV1dseE-&+ycQ1Vu6tfi4oS$I8lv^Jw9Q7-0@X=w{<-rF6 z)a*JRKt`u#)ZAhu(J_K6cBlb`*-9r|24+PZ#)zEp2%XJ0lh}xjK^BK2V7cco&LKM@y2Jo7i=fOo| zavmstm@HEx?we;5vbqv40;9f=Ft8m<+a|X3#LQ+i1?`zI6V6zT~ps0D|_dTx* zJ9B07Fmm!aDo=2@9BX_Jdhb(E({y2D)XaW_OjFgn{M1YnNu6MrDw*;A%8SU?_mDfx zM(Uo__46}%0|$sPt9i?jS|Qm7q-(yE#MB43JuFgl<*tCmw=};>GrmG#&@|5)ga{_Dw_PRWL0mdr1R_8Hymre;ah3{!5YZmE=G7tG4r6b`x4= zq(S-8Qgg4TEBp>wakD(ZlkzJz{4HR{wQlUs`y_9SQUsh3VEw6fUQD|Sb0?dQM;Qh> zs)u4Efsjsp-TA2e8eKvR^7fa}X{*bH*p72NvIrB$+wIYvlTg z3Zh8H*{O~&$anMYJMk2G+du12y8BOlg8*<)bwl~i_P3ePG&oCoKgnUg zuUpm9%L|p&mgP4If_Vp$005VCOw3m)x5HYz+C4U=Nv~#(FVr2(+ST_@7K--%4QBr* zP|WwIdmJGVSoxc=O8~?anhxDCCv-ohc%>b3kA1PoR)Y9dJH>E~=(KZuqEpQK0axbM zhaXoZtB=%si`jm*?{ire-82FeRN%(eI2xKN;tXWLZQ8$OMhiB7R({NjsHelsQKfMnmyXSgk_rbnEj8@2* zrRQj;(pHArwGIj8e55p=GBQNe5MBzy!P@YlC)L(D7!^>AyH%m@%e&VI*D@y7o-6tr?X^E@jy)e4Jq@pd zh`%qTRVGG2#Y1OMrY2o;cu?%`>wlkAleq`$4RT-uVVz{0p(1&`-r$IP&h-?iI z642(xFP_lY_(V4`OE$%RXe{2n>lxkdbA|=(ea46K$Dn9`i`v9gUlJUyg&~3RTb~I? zG4M!HM@l2qYQRPEW@E+wDXZAw3#x`rFKY7&ZvDCw00ze#XxZS=y1|EvMG>vDmUiu_ z4Xkj})lNRA-&OrY#u=xd6ji^(cGsUbGdw$aicZJ)!hj7sT{W*;*NVqaYP`#}E_b;9HQOip+? z=XF`yR^e$fBqBYiY9x(jZ%^`mbtoelB-W=@c3(z^FiE-6-|JTRbY@aiXa8mpf7h%K zzMDY;<;4aGY0#fDe7K{mZ1-4&{34uvAfxVowHv5Y3oB~@wv*t|DKST`V*H1H{i}kb zs!Zeu|DJZ@AIZiUC`1|Al;be?3fbbHSjyN92j`XD6#5Fp*(?3w{DvQ1yid_7k!+ue zW@L;bMiK3_)*j2ZJY-MpHw9>i=DVQVq4$wvaMi9o4}UiXJT&IPdz$!~gN9t{l)I7EzU5u*DXp;lLW7gxtt|pjs*3!XEi_AD0URf~ZK#1sE*M^ns zY}ne@t6QZ!WO4Ezlm#$+)mXtq8am*vf5o3`A28&NMOuDm`F@5&d-begs0Fv@u77sU zx)5-hJ|d&i(9`c<&C8e~m9UX$%N0Yr^j;a+vC;%pux>PHG~@yM0R;X`r(Z+ttyAmw zO#8pfZ5hbz-PprakC10n$|)QV?>q9xb_mWu@(Gaz3yYUa0vA!eyp8P;&Luf!%4nuU z$d}7&eCVnw-THf#Avm7+MZEH>+g$r+=XtG57pC!}sA-57UVej->!9gGg`WN}%5Evt zO>iAl(3_g9d{DUUl|wVQME;FLwp1>4dY-Lfm_HxxCOCf0Bm-g%HuiL)?mK4tClCGG z`(|HwYn#z+(AP)S#M+2>Ww$99>|QRz4gWz~BljfrOS&jq?^;JyY+$vW?H(@)G_{9W z>SkNhn)=A8rN6rHGA-ju{}V9r3Xux^hu8{BQOI*nvY2VoyWUqmA;l)z6yvZA(9gcO zZLRB_kZfFLr$kl1JxwI+CKemcMC>u8K?mU$QiP7*3aY-azSu1-if66t@wRs_cGBwB z^V#G2sXo2pOpnSZkc}@7lhEo9sY5+264HQT=`r=2Q3A8|BD+xjwCB;yHWPj*q?d_@ z9&-6G`;jd6k$|(&4JNTzW=RjU<3&%*_%jWuow7!hS|?#%mq)Xq1!1OtIyt diff --git a/src/net/sourceforge/plantuml/dedication/boundaries.png b/src/net/sourceforge/plantuml/dedication/boundaries.png index b989556e6ac921c6ea34df2a7ef4d3225fdd3854..ae7fbd32d0d2ac2903cd1d62c6d414079788b33d 100644 GIT binary patch literal 51300 zcmV(rK<>XBIBHC^$u^z^?tljH1a7$?Bgh>miEQgrUb6S){_|u!tP=?XB190AxzZUJ zX!efFY@YIAFNt1=GLHFaRy^zdL0KzIYaqx**`J%)@CnjpEa2R3XaX)h`M z(bhy3Zy%AXX~VrNJ|fH(;P&e?Me4do+H$YAE~!GT>v)puy-wyG@hi8nqtc5oZH)w{ z$pev5L3;hzUczs^wjfTD3)pBv$GURd&*yx+NZ#G4?j#Z3U#kj6ndPNm4RvqMnGoI| z%C~8v#waaiW*B459_&u*K>Sd!EDKM70QT{s7vU|fJz`xWihNZ0Yw9Z=%u{cA%kPPn zQC;Z8ei{{^5WkB17tPCkjgNX{18Vk!+~|_>PZfY>UU_OndLdo24oAf5 z2tQ;wuViL9 zE|@RT$NHd=axphw)ygZIbf$fDy=`kCe5poZlf7jZl*JKq%+Wo95<7%tf$!9 z!sXg{-X#%}(7tyqW=Ywl zIvm-&dG8?##pyx3Jb2XJg!gTpq_}mhmgPSgQUhjWS33V5#*6a~1mBz1W6F%^vbsu) zgaIUlMT5C)6N}VBEWGh&SN)Kzb6$~S#YzA`FY{nhgET2CXCpN^tuxgNQUG4mE|z!y zS92KJWpHwCHIKqov+~M&cdRjd<3Pfj70&*xRHu)$lMbJG0+^ z97ISW88gE;fYJ!r;(qhv1amjVx08mLg^NPO;hHx!5pPEOj}ba0=iKp%;Bf;25ZGYA zN-YuDA$Uc*_Tp~O5sF6F(Ye7p_@)6iFDa@JuF!l>-8z(TEFIs--Vmq9^j+yA7y=#T z!Iiig{nXEOp~*AHG(1$-FTx*!jTE{H40+Fa<-SqzYVkhyUCIk*A1znX8#>u~p+!6s zq49jx?A$Uk4F=4nzbNu2R#(A;#%gBedAM$o+!bWmI!72nNK+bd>epOc_Of$b{-YI7 z({_PERP&4O8N)4G^=~~D_i8^w6SA-{{^F?JFyquOOjZdXk4u(@-{Hwa;x|d?Xu*n` zz~WRZ0C7IEEsMye4YDm@^f9-XPS`qH%xT&O?zJtVRB*xG#t0}QLvyJ+HY)XtcD=Ob zPZSbE6HK)j6)CZp_Y{vV0<>@>k8AKS^hIjw!MLhTra&|ArJ z0@eo(ek*l)o)M@bl)x^kGJE;H(bTN(4?Vgs7N;Wq+Cf-~PXI&gb6YKgouq+aWU}b4 zstHW+%(2h-pKK5|<9-1m<`|h%sjE^W$t$M_)Ps4BR31scc=cT9;N?kn)2XL#Ursj- z)CewP-pQhLjVs`}_b$V{^%e`rkXn3AS&RD&qfSFmx=Az)R#&K%Z7%&H$2UC(gn`sh zS1LE7lHK+iJ?)PSMq!nTvlimd4@9Nr=V+-3pQ-g^H=MmAW=3PBYwvi`lVc~~emTO- z{_dB%x?h zkp?b~Tsd1~FwmM4%nc!$&P5bZ$erx!rv^zl2oAv#dG3jT9vQ35Y2VhSnUAl^l+1k+ zFrttWI?JVL*!IIZ;lHVhXYOeX(pdlmg%x%l=U(Y2kmOo1Hh}fe(^nK^L(zuINRZ?E zXiANJ>6+!2e{IQpvI!|r^QwJB%Je2axXgEWnQ~MI-a&*znvw|U-_kV^s+jRGG^#X)q2Dl7|REhtFpNYjnGe*WBprj(rNyK?dt#1;x$<#!KzohnX}x~LLU_}8T)aT`D_4TPQ5%e+i7E;l3-!+*rde1dSn0w;XS z64!KQ1(wA*{8}dsq~#v^Kal`U&$shGQ*VJSvN4x}ra#>5>_8@7D?PfdsOs zVRx*pT~Tk#)|{uA-2egKs}qMGDuu!kNBC7dQ2#H+>0L6s`)XV`)14F0WY}G6$e)&m zIQEW*4_9#EDsq5V75V=%o2d13f}K2VhKFExgn*$nuq}lKppZ=t8Sp8*eTPDjj4DH= znWh(L?_luDgEU*?4{wTUSTQdvesW2#!KCkHC#uAg z-*Iu;VX!cx-f?g7&`+P28aA_UqP1MuD(Avg8rmN6P+K%aO^)X!KRw>r#K~%)-CD=_ zKbXK!ky7)~YUjzT)_6)_<4yrp)v)HSGg^SqxkIZZI)IuygtR~Ve!Y-=QsUY(Rt^`- zS3bXpSC{;(`qwyF^|&0Pi;(BnT&@0Njd}oQhsLeBkf&+lpxxriA(!i(A9!$Chymv=XKp`#P^5yr9Sx zIj*4=OK?-+FLCORF?fa^l|sPoKr6iClUS;uY0g-9=iBS)+Zb4orqEx1X~-eUL--@^ z3m7NXznzrdG2)KTZYE~#6x4xnGZ2ZR6kzvig_x2Wqu~D;&f#>WMFYwU@yr4SD;IWw{tmmiTAH8M?sno$mX{ z)H{inG1Jr2c|kkLN}#j3&v-_1EB4*JP>qUg#CSP-z5mi_$68@r>!Btu8-FKDMCIgb za;OlXtj$2&-=ZrDw2a}IVTXbqLV~D+^Lok*8g9d0pU@p9Y;7P(P478}2eZdip|pI* z(}}+2K8}FEp2>9f&mFyK#rV-@HDINqj%)Nb&UD2YLgH#w9>p^zJ!=^S9+ItZ0t__X zWnNc)a0~w$z!_c>&O#&1@wVQvKVTNYp2&6sPhZ0Nd9Fc$_jSr?GyYa ze~snLspu?~G4BQprjJx8NS4vtQe2+~RHR4~Y`EZRQJy*?bNjahU5`hzjcB2mNCyPA zinujY5R%q3W_3 zka4@+;Buzl;P;h%DV`a8d$nZgTuh%xc6qqf48RX1Ar|}T3E^dNA7nBn!{0awE9*IH zj-@CFSUp-(r^G@?hB#Ecg@3-e8$`@v!QOiasPF5rC+gLKO`-EVN3?Ih% z7SoS`pbjglr3HM(@$v}@{NOrVw1muytQ(4;f{Z^*R zHls%T>E-1$x8VBRNv99%@qy5vPrpuAA|Qp-R`BsKRsImE(z5^S+1~@m_JW@h%e2enW=3FZW7TfK3XA z%gb?H_eY6PWhj_wPyPHFsoYm7zlrdD56+`D3POpT`&4#LtARMjZf{|{iuhcJpO+mL z&e&G{E-zp%g+2U>=RYex_(aek{ba`)YwCgCW9G%B!~DVw7E+7!;QYVf2;Rw-mA{42 zrZ&qbZg)h%FV5GxU!FUmFN<;{RFV9;2WiXO;r3o5hr@^!>D<)JYntd&-z46|_)xD!WnBaQ3wQ2; z%CUdw5-DKR(JGI{bLdh>G9mq4{W2h3f@vZ>pT_-aG)F)>%j0ZIj?|`xpw()1O-j-i*aN|Ale31Wc%IiD&2gMotn0?1m~f%&i%n04g3n zyY*!HdsS;PVGo%SN%~=k{H-Wq~5EwL#d&i}h3Ps*y2e~Ab+jY*I1Wap)DX96Sq#~;& zm_2eNY(u6#?v9w|tT;`baG_~w) zP1-HfUA?#vnQ$fiK)3u(Flkrni@G+9zJK?og1QhIpIkAc;wc~Nkm9IXE>yg7 z!M}!4GYoy*K{jKBBU2cv&7RDA9WClGw+ zJ*#dxpd$xR4r#`}(eRq)rZhIXTg?fV*O&ncR2%tM)KA92V=R4JL91Y=Yg+!Y6qAO= z^Bg`UM)kaF-l1YDl7rYTi$W2#W*010jEVz&iAcSdv%Aq7G4GNWOUv~on8=jIUP=>t z*99T6;}Ctl@oVb@<%;G{D|-KwEGs@1<#igh{fpZ36m|C>s1M26vZ# z$iHWoB@XOHZZWhij$tZem}kSmO#_Nd-BjD%37rS|?%C=xu>$}%fd=BfNCAor#T}A= zVp~tD096J((eZz6@(`A%cx-sIE3r19;#b~j&?vfh9v^eEi&i7wy=4d<%)b2Q*)P$y zHX+B_@Wjcls^nL0>ERNHRr(OwH0x_Cv#yh>uCs}#pXAct!}!vXCpF+osk+cYR67Kk!vcxU{) zrs2k2W zqtkk_TyJfFm+z(T>w)9H>;xmu4ajjS=)V5J#@iNG*x*~XyN5OCbstP!tVvMmAd?a; z4VO|y@Djv1ACfr96s)B1I5um1#2fZP$vv73rP9y-jX+32Jq}66%0lvpURO1OEtREn z_`8Wa32wU9y!cE8QkRqEZ$boo&gqaU9#pcXR9SZ`Q)XCk5~Be8vb1orA#FW_2f57? z?6)G9|7x9Lm~P66q1e65tf*-Sb4{j8V>^z+0VR+YD#ckDkf2--gTMK#IG^X)tJ;z` z%peGJQ6TDo(awd_0f{V&$FWxPV?&FD8)U^qea5`{*fsFDK}X_VRPC8@rQe3$UneG% z3?remuql%ag-{(KH0{vAWUh{kmRf9d;%B*uR=$w{N+acSsQ=b|2$MDb1etCOK z74zf}wPANxLO(kLKFw;=roY9Z*0UV-IEZVlznr&uFaY{5wPwPyVET!U-6BDm?+w6+ zfhMWSEBg`k5eS1@12kv=ZW8ddaQOEZ3X)0O`ku^`{2&KE#9;9=@x9ScEVg$w_LEF= zk~O80$uSvEvAl21<^O?V=kq;zdUJgtv{R8rNXnOsy4EpLMsVD)GSnr4fg&`0Q|y#Q8gStLbF-5ij(mgQ5=LOB02EAF!8ZR{ zZY=$nDY0>~0B>SV>%h+t8@?6k(GyY~j*N~w;^ZMwN?y#*(>QvVr(k)K9^5ADS2qFS1BJR< zfnFRbuUZXIZZprC!Jg2PdzIRF+lPulI;7&OUnO?Tjx(dAiFjxGPWgsy!k#^u?gWB- zt>gpxaELU4fzPrEYlwwAjE#jhl@I$^vFD35#4^twrrJfDHS*!!g8KhHH->_XUTNoY zpDEj|*pOE7|0QZIyJmcqw<0em?fk~3XEVIUE6Z+jetfu?D@GP|`s0qGKJ*u!i#NVT z&|>a_ZxjPk177&b|1tU@cO7W8y28lx8~Q=ziXjosQT)@DgTUESpeR3H#OeNuI0rKO zj2PS!h7kPxeJ+5?%^@&b&iNFCzN)EPRfOvgFH7L(tPUuYm6=>BHaM4vdHorAQf10T zTERyADpg&^fgiiLy*Wewn%S@DgwMvLyv2;;O=ERUL(7gZYmP1VZp z4bh5|Q7vYCJsREGtfHOQlVRB+#~9tNhwWs_B4PWV@1*vMhnG}352MQ8^_uhDK@oNz zF~ZF%>LI+XLuggINZ2AvJrDsaTkC3gBAqbUY>VjsKC!Ov=96P!+Qsu7^tb`jm6LV@ z(Qeo=jiE;xhbw55ClHh)f!DBm`JMB|rUQ%ae~nV+4{CaTs2GCuu+amP|1R(^{fV0OTDkPN8*b*eXb1T#7Zpa(sSoeKQRc0Vly%XifwkbIRbf{=-Vk8ihOCqeag5dC7hJpXae>~_4ZWCiTF#ycl&SF#2T%Q+S@{rff&tM-JWW+*W2> zg0IObAg=d~IfdFKCA18(ZbVUFxSX5ai=!l?MfwUL#GB}lq4}JQsp`4vFGSI23Frca z>97%D+`XP?ua4-w#;~mB6U@vCxIow-lEym{q81QpPfNrpAHOX}rFB*TMj1$lTfSno z+S!abSawaS(iJzkme+cgmUiu*XnxYN#lAk7_e!D{D&NcEmWh(9x*!UAit<88>Yo>ta%TR<>RmxNx7b}%Q=R$;!u!Id{NJ8x0u9?&%Q?#SEz zgCT_R6qaG{)X75m5c69}eLzbG;F;STQZQKj{6UPNCg+r*S|sJC+csJ5MBud%FalaV z{(=4VVh%eA6%x{IO?9S+a!+D<8l721-OTX;)i6CE)V`vw2`o_1wR|5MHkfqbj(1{7 zULJ6xEpxKkdhTvci*Z6S^3Ph)H#5yr2{z%O41va9#H)Cpbz^Mi`0AOs;Iqb|I<4Qe zcdCxNMLa2Y95_lMD~tH7731@$_7hxqrItdK2aXMTNfI$xg5L2EyHu|2g8-1-m~mZA z>f7oZ@^6=FqsEFV7AL&VMr4J9w(bBsvv0G;PH)o*t=vDAANN<4fashZY@jf4`G?gg z(W8Pp2u+7q*l1PtDdWl8n=N3|7bA72<s+8!0pX#jKT@hGt)i1)jUj9BV!f9de^m6ZC^px4&TGu=op5 zy}N0CAWk)Ozn|nH@!@m#CPOXxC)!q!KF%Zns5AW7-w7m!9cxiY;9HW~&9Vl+P>aYGsta#IYw~0Pt zBVn5F6H4Wt^y9hhnxAi(i3C z9F+)b)gOGG@a&Y)Q;Hd#;hNawv##Bj7N(lx?Z9W0o-t6ovPwPL0P#IV_p~L0dk4}t z{C8i9nA!am;e<#D|46n4z4LVx{*-WK#2dU`)o~|j27do~i8y2K*3mq{YV-KZVv>=O zM579tfOS>7Q?f&%Y_z+Tus|fZLECe>rRMXX>;+mO&SFd>@@8+C%XKXM%=c}rA zU;pJ)+0r;w%a8x%AEL+%gvNFHRULBwk#Z$hN^f#3aTr)F)E^55*+H6V^gLS!Jt%CX z3HPK9B8takD}v_YnSn~(I_2y_K16J$1mO;sgK0GnhzDD_QZSQT_G&E7-O!2p==9M) zSLB1|=q}`IFSwpA?CL(fl8()AYI^VW-u!@XK!Cd1cgC!MCNvpE0g?FE7Y^>o3BD!tcz% z^+zqQeeb@N#;dD>$c|}iL3cwB%LP~v9HIS6AQ_Ys@PLoEJfvb8pO5#?`y9+z3~8kg zV)c9A@VxkE1{xRB(i{Yf60eK<*&DH$cU$^W^Efv96ex0^9@Vpe)2gvh5m2jxhoZX( zxDm`t9cju>QC7A%i+3_IrFXk`R1L1{k%ELK=h6^{_Vod~L)%58CNPEgwx*;rCn5w( zBq~@hLun2|RJ3V6?o)+5dt|^ZSEX3G>#t%*1KZ>&pZ-K&eka5h${y&a{vUYn>H#!` z(279ST14AP285c}XbnSr_{|95P9aMhRa>Tv%{aIvyz^DNA*o~$7dI<4wQvr&ItY;( zw#rZ>BNN(qEb8&BBj{ohxuDMy2eB_pTipP6nFGG&?9w$Z`G&Z{#x#f?#f4+}K}&t} zs_3;W7;TGhV7ir+atBu~P!#J1y6Z;+&4Gde&|9`C;`reo zAO@SArU(`3G3mqNDSIW_w&y%z=kRNt&sZ-&!rVwYBNahHvqB;clwiRInC|}1m-7<8 zH%Vig%}FoGWzwT9``DG}iyOlz#s!^N#;=F!r9A0Jjzz5%3A^SoEUKQT^FRg{Fi;p$ z2~Piw1f@;SEni)WEI2Oyg0LOkP1GAh!So3b<%Q;UgZerL%Q0w5FF0>^_Qdvwe!;2C zYF`o1_mNeKdrgduKNFmfuk=O%6PMb#0K2sNB5#vX zzwSjM845rDlaOdJEPzo$LI5F^QdOur#n&h8VAp30X>9@<0cC99wv2n(N@mr9Kt?;( zcpqHCHpZ0HxMZ&!H-g^D-Dz?|ccheTIP<9tHbK=0%r0-qqNW64gsgL@&b*>@?w|Fl z-x|uTY6~$DO;~xmg+g#+u={($DL{H{>#=JC6U^tDgdB;|kv|W;eq7s5R%_2zu7B(F zXh%*zx!;IQW`YmLm1NGgkSvR>i{z%^faDt!p4M#@GKO9@N2uns*p zbzmvyEI#+nzt#JOmC-+aCY^=leo?sUmgBte@B^A>Akm~wDncX16g zCJt*ls?9xCJt~B&=aeMN)ln_dwsaxW%WlN*=f6LucDU!WD^P%;Un-cmSg7Rv0vxGy zgU+E#;}1eZK@{Q&R_>?ZsrFoB)^+Glx8JI`(RlN$GXq=gMZQcceU2JbHfef%>Z3ku z{MxiJ6Yw}C=jDX`xqn@YR{`3k@ZAgyKFfVmNjCT-#=nMwJ&17c#c9N@zb5q{(@74| z@H5&Sa^95!)l9S3(A{t`C|2$5`NY&dubJv)_YS@7N?s{@r3rYtI##TFpB9-LsFSUK z$4l~TZ~`_#XaBSfqo`7mKnMdP;qM0!Dq55kdy;S3efK-K6(=Cr+FTQ^uHG{cj~v#H z4BNlONe2A2FZ-(f*Eu1Yh6M4!c)i4$QL_BVLCP1U}!AwDE z_kcQFPz8)tG*9Zl6BPcG-{Z1XXpA5$m4UNuMopuFa-mf!rtbnm4P-wtsMI><4%hLS zNY?@^WrNbf(NKPR9RRHo%`4U<=moYia_kW-MfD%RW^+tzkef67BmEXZ$q1|cNqtzr zqPIggn}ft@!wvP~OTLo@!9R42TzCYw#Z7j@K;Qz0DD-8>oYc+HQa4}32KqrahS#F2 zKU0<9Yoe`epMoKS$QaM~1FXT)Wf`W}V`W7s@MAJowc>@ke$FW;{VXu+T8@Ai*C<5lM8pDLf+LT@5TL5ayk3^breKUXgIE3_*O!! ze%rQZim4slYP_kKeR}W}yVo({r2z1q+M#+v$cI+;K;?WwYfM-QOdV@%T#hLICHEHx zuKJ&GAk!1K>z$o#s_pSMk{A`kkGbVpM#wF=r4KRb18^X5>}Dul^L4!wq9K;_VZz~6 zZ$$|l*S2j}eh2WaxY?4Y|LMVei+XfklBgxk3nPjT4~=jlQ7G1Fbte9N(YrM#??w|Y z^c?zE;*J(0HkqLGsc85qg@ovm6eJ+Km?Dpu!0Y7jyXQl;)X0J^(M~tUrc5V=DGsTD zo#m)5q|_xME*^k89VPgzsV_j4h}~g4d?qsm2(cHua+&GZe_rS-kDloU7|CAUKi>%_ zkfC%ZKz{sVYrNWETlf*zwz-*xAO%20(4YaOsyIB5%2}UUi{fWNGuJn-!oFohkJt;n z0=rKz61lh=9?W|pkN_;d_mO;4XjzO6OM0SfspvdYd4WR+@)E@e8KcP++{=bdKkbX& z9z~_kZ8E9&4>OYny^NPD6-JnF$;g5S-H#-eS7NVeB!<=)*d^iuL5Z0O{@!c{#l98B zz?_ofPT~E!XYOWrqy@$PepEBnIqLBzw4^+9*_Wa)y=T;Ag&OK>54}K@Ob`BR-4Y(0 zi@c-#*s$ya>UL5R=Y=ezDd5NHb}Z4jEuz~ro();(y&H1dW12V`8Oz`0>YCHrpb1xX zfj$xSGMy4t(vPlavCu3@IXHSe7 zf`5+WcyF^`-JOOT>Fz(s!EwzBYSOV&ZFir1(UJvf z12<_nI94T9pR|}lH6t49ZiDTpudb-b*GUO}j$9j_0>j_Pw6N{n;l~#Tf4FrB&N)g4 z%Ttms-B~MLY^uM{!)qcn7%%~~2vb;t;f6gkASh1)+f58m)5E$r{i!Nr6^&wSO#@7w zI%G~BjB#0-O83}FJ?Pd%ZX?@eR^Yzx>~6k#BJGC`G-K$H@_5o~e78A)=3K*8De;u8 zxBq=HDL9%D*3|KMPm2qi31D^eQ+XCQCVsV~R7`osjP>KbqfGtNU|6!+KNrH+Y7YL+ ziIfgAY_tNd1;7&Np>!;^5*ZkoDJd(Pw7oKaq+zw_gN#7g!6X|uE6 zg(}u#&-&EuzGUYXB0vk70?lt^*MaS6;q?U@$|(jqAu?<3Lcd7^d*wC%Dk#VNin4O} z(@LV#(Evg@uNL;VViikT3aYL+=>Yl10S2%5mC4VZxYY_tJtV{)72&-4ChCA-;*@q- z_tX?OM5TtnoQHbEb|+wukCJ8Jy$LG0!o*xpV%+A7m|`l77e zW%wtIMIw7Nz2O9%vasWfae!*?sFcQuvr0W&OApnG`H1e;iZd#OO9JZ&bt zePh&M2A1>i0K0PGf{7;6rrC zO}QpR&uJsSbJNj`vkx?9tp2CozmvNqnV8v+8!aw>y&o- z_6Uw?Wt3QbTRQ#ouWOXB3V;oWkRy&S74>H`EuSZNiz~M!gG=H(#ZjJektCi6K`zbn zD+QU%m&i9Rw|xdt!f!S5Ee5UTtfM0??6%#a|3ja%{j%BPZ3W>J-(w<_;IS7pJ9%P( zIAJ|Ur-*ul_&~`#V-~8h#lFv#OVNs zb83_|u=4#4ppmN^<-@fDA-PhMnkcqmTF?J9DkHU$rfFOpUc+9qN+DYHO08j3K6xH$z?s-I2PMH02&akAGum6M$eI0A&ot{ce?= z<-{t;=bCi~>Z1o(;OS8Sf1qJsFkS6$g^{I&Lg2L80b37L9O+%bvrG8FsFNj443H)p zHXoA|HH{MmPl(rf`CR+RMlytQ%o(>OemFfnTTMcasabHqeW4h{3YhN)=BWud=$ac= zY$xQBSIHpd8?NcZ1qXoOCAu~sxA<9Zpt!BU9h!Kcc>ur{{Y zgZY4YXvY7O+FG3q{AQt@(jeF6Lr-A~u;$^!JJ#C7T!fBNAO89V2<1{=9lf9fG4dDF zCYUcWS91_2iZ;?BRTb(4X^hI%z||XE3n;$Ryd@wD zLU4cTmbO!|DkrVnphn%4w=c5e)kzLK1j+M3>*2U;Jb(1fCtqPT8;(4Hyl|M8*ZOn{l4IfVzxz(4FW$wm5yyYYl#2Qnvn zHv-9qj4Na+oa>{<8eI7)Q zet<$Tf`H5f;!4GD$P}|Um8nxuQD^v=zrY>-}FKi1`h_la`Mr_G23A!be?yUaQ< zG^sIHb$|SPy(CatZ)!|Y1#YEMY!ZNXmUR)Qf%@%%TNIT7N@~nM4{rxaS-V|I&kTL; zXp(AAZ^+1Sgrk2oJ&1dd=lFF|a<6qr;N0zZ?lZjZQkv6$lb)@Ji@rIz6yz@hIv*No zLU)O9T@kr@9`*BaL9060$UzAo6ntV-GOXWZKrab{Y%|l7m@URGoG9c2)s@Qvc3$uM zV4n`7QVM!JUV7-dbspwop$p)7a;}VZubJy?Ea+Cupzv`js)(Xh!PWK;B`FMJtvSm+ zb+QFg3d}avzbATJDk_`PoTn|nUWkTA_e0?%A0+`z8iaS`L=>A>{dVG^3|!A8U;RhpNo1d9ywc#H_vE1=cl{g_o{#_X#+60_JQOM{4Y8 zFrRM*ZW1H%cabsZ_25dUF78zw7`+ey^t+;*F3>N%+|VJt1B8!{Pj=aZ%cfx+@8;aG z)UBn{sJXmZuF0oNU-12jC)as>t(MVexQ3AmGhOE}Vr*8zrjI<{J7vF*v|ZZ4Me`iX z!cH`N4@WAyh_&+eHRFmqd2i;O8r+QYxp!QRJ5@Uc<4*w!F%?Pf^cG~I5^4C)@VxNH zVo=vlIAw0`dsab(TlSYyy)#Nu_qCrgJaGi>@%U?%f5lH>twJ67UJQZsI4~PNxPczY zsV~>p|ETDYQo;yhoDe~on74~XV$63Yxg~9h^dY6_Q6SGgtU1Wms{Lql;i^FM3zt>G zV$PZ9?`#vd2;m2U3gU)crZ7$a7LPQ|`ZtN}yE0&}UmwluEz%(qw72JWE|0k4nD6hz znVssW%IDuBdNZDrBp}$q0q+pu=3zgaW`);%<;DlgTZVJ(Ny2neTf8up-YSc!n`+?C zps7~zk&l{0&A~7G14E9!SZqQ~TES5M1kw7Y`G9SL`VfqW#`mE zNy2MgH9Tr=+3|PbJfpggVa3SDxWFuDhN-w_z6_?vJM|EKm}#g9B$?a03VNYS3Km4; ze)#i}3S};J?4LZa71agQ0D*)-r}$%ay>M`@ZGcHEb$W?li1s|H{O`sD=e%~gwn3is z?88=NGM?v%Q$1EF!Up(7``sx}H>DxySuz&{2t`>WJ~6tdS)3=LL0F>VWtpp{sG*J3 zF?KJW{xpWNbL(h|vGZr(0?|aoPVJ+e#w7gnCP$)^Dqy^^t)n>NaYza5@hDH&eH^yw z9<*PT?czsP{YTb3AOt7o{>6@LS%x|J9F1W|BC_t;6O^CJVEVy9ZEicHWjHXlQ9;4= zH(c%udoXu5O)^qc()xfwLB>(W&kzQO0?FtG~&!B3o!2VV#3`aR+@ zxGeCC)R1eBz|0FSH60TRUr~KBP@^Z~`^E}kF6Sx)WnIkuUtnwiARSR6rl!m(wN?eL zoe7U9JGwm-gP_{BuiGB*g4K zl{EYe^?V#R@_Q9q&UJD@J>xHSR(8_9=n+>BZTk!%rLwm2bW_q*-4-?9=G&@=^p$Y`8rB5uOTF$_SjRB$-rHf>b-+sa=Z zsIhMf9pH1=Uz_>NAd;}#diQh8z(z`mY)79z1ksdz-5I`N9Zi^vF3nyN&1V`B}cHs=7Mm z2*d1ze*u-iZQk1UKdNIQ9a`#y7>o3iF&*8OFBp_)$|W-UJ{HL^L8)aw^o8=3 z&Gx9xP?FM9;Q=6{UNogMo(Zc;*`KQ?6#5Jw{y zTFy;+7(F3H*pi=$0XNa{2C=>2fV_B{$-tYThqCt9u9r>zq#(V#HX9 z&FYsv;T}W$iz91UT;HMv`J}k-QU)%D7YR45Em*H1-6_`Aoa$cr4P5AgL&-d*ulee8 zAVF`#A22Ghj0`>~zuP)jj2gi4qRbr*2=$JYI&fS`y|S2@Rc743hZ$m6!4w0Lis~nI zDMbyzOQ$2Tqrx4WL9!Sv@%hikufu|xLO*Si?4Dxwly*PR%#4r8^MSA?llzti<5D)Y zr<4t+nmg9gZybYdNa9T7&gv&x9d+aAZD~b(9lwSl{|3H$=BJktmFRE>%>=$+#2mfN zkB9GXZ34Exq1j>)CIKJ>9}5f_lKpvF~ zogh4yE!(ahRJ6jiLRDI>9QUHnaqhkzl#>Y5^qG~S@c_GO(?*nvA&ehi<*QWS+FF0E z;iy1_Z7u0tpZ~%_2XptSuD(XlKvf=9?lfxsx-MKJ(6ncOXNJf8m-$>baIN-7D>46X ztAYQy-CnH_Vc)2;5inM;23$?FG`WI~*%kHK{jflNXhU85;qrLIo{M zn2I~}jR$$JG!p%dQV=njI3|YrHRwrm$;`<-c&n~4GX!wv1 zF>qXkm|k=oZDGpz6KKeESmNR#poAg4sd2b26L4ESvGh~kKrlg=(rv2Od1m_=Cj9ls ze45gsNwb#&j>WqAR^tB%(Xfcw``t_X^Y(TWSFsKCkJ*Qun~UK=()YvG2`w2bFZRHs zL1>xn;TAH5lmDfswqW5v^EMq$P}6L|58O~JVfMu>@}<0h_}7?slVM*?J^CUK^*2ec zKpQ`j0ryKny;z z(5wQ;@St)E8G&eL#!ggW96(_pBP++z>|=IG4@d(1KON$(aj2au!Qqy__o%lS25^E` zc*Zvn6N&-@X9aX5uKfEG1q3UuU#XEq@z*?tD%=m*4NeL*TWFXi6JL`l3U#CfsaMla z#bgA6Y%fHG9O9Jiugr&jnTyPDt46Vxm<<5u#@wKP7oO9XYW`~6D8hWlAYfn6mV{vc zDbsxgQnf3Enjo5f`5#^1d#p@A>qSuvQ~`+QCEbog$rcagquPV*8vGiu4O_Fcc?g_5 z=;-}N(#wRxgRC_-ePa*1HD||IBp*?rn{quFPG*RukzR(BnUA66WQTpmjK0r;h=*b_ zWy1?TK5MS(vFxaM#I-)ogK!+jW^uFmT6wB4cs?fnQ|<1g9$tLfBVD?Bscq@$%5E9U z>bY#7ueh4Im&3$n5nKXK>^H2+j~6JD`ih6 z1z)+hCUWU}LNbYSn3Gay=9e5c!s0uVZ2XL-EaDB|O%8p)`QKX&GhXgos`q=U8$8|D zrcETO(8TWKxF*B$A(A7J1%82AFhhJVYyUH6Vl^GLPAQP*bb_rtkELx;m&i7;YYfke z!SdGaqkQz$NW{`26{0x+g)fJ+Yjyn`OWI3|$LCTf0sK&Vl>iUc(tRKG&Md~)(xHuG z;itoN>I8i7S(RSdpOOvMkQ(grSRH>N-yQTey}w?V@&ikNU=IxdSo=ZxM95JB?>N33 zMj#UrN^GMvs0;H>o(*I-VlWxZuXh1RQc|p9(W{<9hV=2zx8<}-s{JNU91O}7N&7P#4z9@Q zK8=Bdx(acqnd=hDV;HC+t_3=P|04qS$ztI&i?}fq;_P9MUYf0)L2Zh<> zm#QSEo6A$?y(M~}@y(#r-5-wW`HE3b+;Vr&{>VsPh&%$K2jI>O*pepU*Dc15d(JF( z2ak=Xf!K`*7COta5+r^UMHuATQ70i~7yKwyeJd{+?1xF4G9*P^5N$@h!|8vrcozgw za>J6IJ7Ou2%fyMP2+yaN7zS+dueKEB+bKa=cxFR}T#=Pyh9!nKd;jysduFQbh?D5k zh|A>TX#@o0qA4{KM{0+)7Emifk+vs~84~n7NubSqS9uN5iRG24mc<>NE=BA6@P8fF zvPnc$~)fpk&>+k2!ZAtP8el>N;NXkBqLZ1zR zK%0z7U?CcQ_#Oj}ka8Eyj$|kiP_4-LpjL5Lzu0ASoIX%4?zr~}-bY-Ci_v5y=6{*$ zS^bi%Nk8}utVqUrjuiw82y_4x1%(~vV;DR>)EM(0dY|1=RsT{X6e&5w$>eJ}r>hp6 zkH!V>jJ%6B*$%{_S(fX?R6F>2SDl;lOr~*fc+KY1MM@$B^05pP0}2kzJS{Efg`k?i z?ic)B(V!THC&)8T=on=`C=D_t@F;XU&U=;6PF-n6?Z9M44zu7R)e}mws{?SiIO%ld zk*`DAoV}bo1Vms(f~gTq&Hm~~EMI4sVCVM$fnEj&P1vKQOw(Z%)`mrwP5Rznh-hcB zWVYYNdw0M!Xh-}!AH4EB?1XJ@Jdv@w6TAU;A)y#(f$jn1I1B_?WKT6h-lC?!#qw6K zh$y}su7`Z7TQXmy=s&2^G%lR-kE8)T)8EQNFyU*f^|ds%l8+6I6GHa=e~XsvEf6dI zG`}S;oY!f(p`tZRXp^=(T8{7h^QlPlB`_TB_-aNqv~8=*wD#{QFQ<8lbW^7!>WqXF zVPp_MXND#bqrSN7CcRvL-}dDKy9Kkmx|RZpT`V&T9GlWmCF?;OFt%l$S)xD&TM_+)$zf0jbp%K`vp=R%Rs_J-u`JfdHrg!~HZ>0Nn<*47}3Q9&w_9z$S zSK7*MmcvM)k6-;MFgP!4+2(-&C7S_HRr%LCtvHFKT=vn~t1kG>8C?c`99bn-O(Zu|T6kShDd36b*)X50vj61I%xy?^tSKo!uC8wavM$@5su!6&Fa!3O-~gUtj4R;{WVc%~I z;R^K&qT!kk2c9&s@cfF-B2Nhm{``P8qF&#+e)9FpiyIKDz+h3WoO z-!oDhn$ynDHRI{1(Ir~0&IxA#bVVy9mt~8y(!)*iZ zfVr)<69uXa@HOY1Mj>0c^#3~Akc3PDU*>m<&5Kw^R;@&%ETED$JX)0JGsh=8El7%B zMYB0Ke2FgQX6Rid3$o*rWwRJqIKVk2*|<`6s*w7?cWo^1CYc_E!L!2RbgGp78}@-$ z1I7skq_UWGH&%&2m^|Y{XJ#lR^r?`}g&u^0&NKQowl|-kyysddkSC}q5)9`jDVQq? z{xIK=A=7s9Vh;)ciqVTy8@emnWr^DWCgC7Wy;j2kXa*?k-T{!m8Tr&kL7> zn!11H3a82Gn#wE7O84!9_hgRyBWSDYxu(TFJE7_82M`rjWpe$qrb~ZJ=Zki11tXtp z-Q%%1>ObLgeEH=6f|Pe=^q3T|1HTV|?o{8&qJh2m3-XVt1V#68Ow})LevU=2M433PIr5|2u_wSB!dM+L<(a`FBM)6 zL?Ii>;swn253$CG2%lkx@oiw83?!?Q*aPk*PGeq3MHQUn3bDS{tjvMRKQpYxQ~<32p57e2r?69u+aO|JS3Fzwv}kh%Oge?ks>;{ac61&$&Ggp>JkWn zh*mti`GetM)c>?gYrv%Wm7ZC$xvOXrx9WUB9`M=2&`~_d@AbohmY<}Ug-NIE->H|5 zc@nbW_yPkkTD8s^rQCY#TVM~~9U+C>5$9#eYC;bHHj_{zyS8WJ^JPn}fHd%4XBePV+JxEfiru5z{{HsX7O9)8sLL0wO_rP3 za2`jfW^8uccK?LeUmO|RZ?|4TV;%9&LNM6S0h;(epT_B{A@+?$jY%3!$P@$&(0dmQk zq0Gh+pKLO8Db^1^`G?z_U%|7Lc~*-?u8XOEpOXaV-$PGY!X;wz1p&5?X(b~a5c<)g zn#Ni$VpLaKo zf07^*@jE%AL_)3ybb@}vnyfeA79|^)_jVChWUbXzH2H6n*F8hxSkKwR?2wr5E3rOf zM*&LiVPF}|J!hIKq?gQy5ltdpn~GR6Z5Q-dI!?sIV5S&H z+e-vT|M76ycoMq)psU6)I6g;npF}oXz?nWeVK;=T5ao0U!*~;{v8m5S(ss0BrA*(O zWFv~1Oj&N}>q(KreP+ly{I=#Guxc!pxak}$D2&b|8B#=0(?2H91Vd9O2$O3T*P7oI z)zi_Xm_DR}InGSDojS305C6Fi^a+5Sf;HUd@%gv5)(8jfItG(#dt=u(4O}oieJtpQ`GJut> zR`tyYu<+*u#lC{CDYHD`I=_`bJN!@OSU!S3C=b`$Nbj?JJ}Fx^p*yLHU^SF=GNw@8 z?9Q_XJMZ6amMnDhf4Esr=+olwe1eG}quf3eQBz=Kqr9U?=9 z{zdBvf9N^B>X0G-jQKVo^mTe-@UklW0LHw{po%@K;Z2x3Ge~7mmH7!NH*`+q3P3i+ zRvxRt(vjw3;XNgZgo7jHMs?-TM4**ScT;PBzMM)Vy>5_=gbzMf7s)gFlGtJbpfruL#9hA9n)Ev54JZN9L{$PfCV*l7dkKvFmiMpq_R zX{*o^OwXHr8c9i=w|{5F1qMj9N{1-b$hCfeGzJT6re3Y;ebJ^=DbS{~xs5n;lj_-e zK%%aPk0 z(Dr#9m6 z4R}9qQ856#Y^bet%<+ettH(O+F{?qk*hS-u!cpODP{AT74d}M?E7vnKvKlO!X+V^S zvpQLoQLAoZ8sUPi;_4eZ_J(8%X4jib3wr*+0HbdztGyC1{4+|n1IiHNszEZ2eEZNm z#ku>4Zfj`KaAAilq^-ekur|qb%zQfSD9$8L*G5CV-|Z8Js}d>NeKLhWA#7SwG=O{Wq#*t5M^Q-{z6tOb#b| z`$5Wa(gNnr$!vwCpVgvnW|YGG`?9Mt9po*MLithux2;;1e=W1B!`jjwB`k>5hS3kg zhhSAgKGg5EyilY>^Oh0chh-SK~WNkc^8Vl+$&MmaDq)dl#K^$`22q#F_|-fT*N z%fRn+t3elUUCBJInZKt_WOzO3war`daj{u?w>9!`d6+(j+xk0KJ zSEeH?9MK&@2>aK++}PRrH5AvZit#nd@_cy){nXeJmAlYs)ztV-!$ICS5=t_LQXB3a z(LHd9y+f%*F?NS4wZ2vJnjgxUa#g}aYhAqjFD~0_4Xg6OFg%{aB-%^AzMjIsR7@5E zzz99g#rG`kQlQ~2ZJPt6Q6jZ}k04gkV2lYH=4b0Awwuw1+q7@o+ap$-F}O5beVSz= z7TS=)r1*~!sEEiiJk^ymaMdxm93;hXgGoGa6kvR1JPNe|9qMyLmqFAdpz3kKA~Y5M zwvs^DQ0O-n;(t>G$kTDal&g%@x3kcu@kDp3Jbwc*jM24*6+8%obw`E1#jfOO;JyVw zalaFDgD{9>1A_bM4(Fb*I6Y4uNy;Ow3&*{>FmW6GTW}Q(^#KK5)-}7jXm^>t;xa=C zHXZkj7V1;ze`nX!-mSAYa^pS-I>ib!1G&+R^j%0k+wppZq{TLz@{Bgs#0A5UB5{-_ zjPb*H2uO7WC0g!>=MSY$#@to6^k;L5R^+_2@ntk|S@j>-!P7s>XE|=*te{+GsvtW4 zhr1bC@6b-wdrtGOG$P!vYEv8g#a%IF9m4a@*VM2Ugr8c#Gvzxif9hh^-VC+iE+LI$ zN1%q9R--tAv^qSBT3Kas%uOw~Fd8t5j>*QeTNQDqWij++@(YA_TN*@@zkugLuYKos`Jupqmkegn-Tjpd8&>V)*QXLN`LF7>g_xsh|Jv zn86STauhiLli>?m&PxWqbnQ?=j}hNXg`#)dXfp%nFWyzXM2`k{r$Mb-h824AyY3Ne zaw^R{!=#V=T$R^r+mOwLPmHxV#SuQA|E-qOapRh%4C?_Y?F4;aA9XY|HBy-f(Y}T6 z|3D9G=92-}0x?dN=aTtjjZmNU5R>Sgav|m`UH` z@Uv8wCp3g`9zQAK)1?GGL>fS3CU)ui&8r*l0_;S6L9jYoR&Yi<+d#@ivYLY&1uHcaX;!qtfiPk_g5^&u@|+A!*m zzw39pG1G{_$8FAdeTn6iUhcQ&NVZ#is{$y#^;G1u9<$&ohSW zSMzTu;ahArt>>o(FOYwQ7DrV#a;DOj^Md@uq|P2(JHAzR|Ax9%XaPG=f~1t+?^LEz zEUzsG7#vkFl|Qx9_mo0d63(wf^j-_2*0mjIQC%y({m?-9I|A)d zxATL84wZ=0kh4?9=bYD3^}cJ|O3_v2G}bf#eHmoq(vAHU1G^8@i$TflzMnK&S5m6) zUL6yiT?JJ=q{E8ZmLuu31+DhKRJK!fY&KnC#r!1kOb3hu8a`aJZ3|1nDJSm}N(G~e z&B`|uedWWM&Ob(0JOIKc-FxbXDtXJYK3qq^C^f2@P+kz&JLFa&&Q^Lb2Xo>#Lp8;& zF*e)0+xu3M4+;z3NriYMhGbm;WM^V6gm+;0va>mpnB^xjqIagkKCHkTv3dyuDqjI> zi+M++Jn=?KHO8lvBt}OoX@A8{U)0%aKJn(E!5;xE_K@LuR3RaNOZc!H-VORmK2t#T zJ(Mcd3L>fF(Z3ukpMum2+_7aljYBPM=yxkdY)S8!n1-Ikk`aZY|w zAu#ebv%nb}{3~SuiC-e>`JwHh(_GQN4A!Y@+hrYammLqr<(%p18l0*8g6YwzUyc@w zVUUTK%ArcV7t4BuhSW82=9IVKU@3y~51!ZSQ;LSoq3?^eml24(4*0{zCPch^h=sew za0pRg*(;6?52hsiwm$bzeUExKaAg_xwHH9=C=O_sNgwJ@Ca)4cn{2Hy2+|HOHl7o< z+$(TO_8YVG@b%>aj=2Lu-S~iSBIr7)#f53ThUn*J?h_astIy)Y#hl0|06-pBmy_2(kb;B2G)gNKmK8D?D8hrUD?|dS6 z-8bV1R?+$3XeD)qn7Kk*w)Wz?@!r3LQI2N8d&Lp3cU02zyf`FlX5CwzbHJZ@sos<= zHt9#)_bl~#y~fdsnP>HJMrtDaM>-dD2VU(hu4D=hECSm?+a~U#0pPsyz;T=v%a@Eu zF}#;A^Ke)X#Xk}-L9@X$M8t9t0mqUAYsjj2jh7V$a^8hI-0IHULRjsJL7$NCqW@(J z{v7oaM{NZIH-GGDBqtdNBbvbMWP@$wNhs9fQ zcuW)09sn|QRuC`4b%z2Cp~A9VCT==Li7_W146Gf z5B8Ho=$(28*H_FzTR6X5lF~C(8J$`H*XFmcw9Ccy?@#!(=iS2ZX0Vt?Cbfpb0_L&A zbhq;pn#LRQbj3AuP5p-F1MTf!zZfqr^eh8?Mab}h&Dq7ln|;c)fi^aEqsaispBRK+ z{gEs^rYxr#`%Mm2qM>(`xh@`@m3tldZkaOeAT;*mpMNfsf31&uk3t0tWlC`2e0T)( ziJSbpw;(|3PD5@kVf?zB-Q*}l5ZukAc zq5fc&{2wD{IkTCcVAi#A4tP~+9NCt&9>;ROGVy134+r)rpove~*OBU~_+`1JlOh+y z5wX$pDpT{TA}9|CD9_}C3bozRc-A|wLdYJO2Irht=I#sVJ;mLzZPyR0&d{p zNe$5O+0=aY(qkkU51vUVMvtVa9Y9d#160GLv|{kM9@(^?gJ#QVgaEM%V5Rf1UHnZ< z6}5u?rZO&n@-d`V0ul5V_obMx+6Pf4gV}ew- z!Upab9xGR|ntSXR#JlR`QSC?Zqb2oL+j@?NWMfE4SfASI#@Wz;FPS`DZ=P&Z?G_z^ z0!8gJpj;HAp0jZ{pSN~wkr5~;y3f?1kJ0HSLnectA?^hgQbQ{1ZG;O%&t&-filM;t zpvLT}9TndITr1G`4RZ_M1dy^SmD={xRXR;dHG@6+E^l6PYPQ!$e(Q?fk z+WdL7M##O^8|)s-ZZryqf%kQ9C5!61kKFNJif&0$)*ooa%iN`5H~5lO06(tL;o{#j zWKQ5B)zhlWNSGM(+&L2ZyvLGXDyVU@A-@FmAt$-j&}SX+9y_P6c^krabtzuOo4u^z z_!U+qK>P_+kJCWkEQ~aYPbvRTvuBVwhUNO_9rh)~L-~_T&M|Ggbq{+q69y29*f``_ zhYR>SqzqON4Es+CtP&&f!#^uO_eJe=a6U6VjHuo{Yw zUNDwH`Q;JL!p^hicH|D;B(`z zWs+-8Do{9AM5es_i>}jpd>9Ep2c3Ao**)t8(;d3J_PDVr4kLz99^Mj=Xg{ zOJQ7YkwH}e8~UMCTz4d7optd>N^P4k7dK_ek|ONfWa@Wnuh2Oj?exK^r2gg}GAD2da0Wl)Qz?IbT} zRqm=e4>oqWwSK`V^^OLnoUQ?#2yL9Ejs73h)Ypa88F_hvB9y__A=p(9)wO z*KLK0vyG5YH4;Ud=fG2?9y~-AY$E`P%K>wk=39c5om0qV5bN}=^iVX(l;1R|VD<~Q z`snpnpY+MN!*qUN&Mi(f4bpiDe*ipMxTGEns#@!9iQnlx@}HBw8+6iFh>Js9Y#0bmlwoahaYStE~hWu6NSA4cs$T35;sQj?kcEuB*Q)4s*4urx(oxs=O>=hZAnEP`khg|DiVxR>9bx3GohT z3v~j$Y&gnekPXx$=bXsJ$zYS?+sS`_lCD9k8or9>`DW@tX|UvF6JK+hb|foE)z)RW ztBM*ol(BK^`7{PIDQ!=rR1(ikpFhdB2aj1Tt=ucFNziB&V8AMVr8PxvGthIpv?DK& zu{nqckPbc2d~VjTjy?Gv2U~9W#Ufaoe^e3$RY&?a$@;WgyA}Tsaf_2Id-lQwc;|3| zeNW@$7KAU8kACIowc?;oK0k<$`|yVUgI|N^*g5Mma1MC` zJ3Dd+jIQ8##Yk4LM&gZ;MJ?kjh@r7=h+i(r1`{%T1EJvM_HI$`^*e<0E>A5S$=5b{ zVoL$Fj9uPUx{X8r{c?sJrLrqb9hWb$u08 zfuTe`%a;F!kw66iiu9(+1~cu>C@*`QgWDxdx^;tY`@5nG|B-rGH)UbhLR_nus~nYg zKa#5>>M-FPjfX$Oy>tKRg>+G7{3(fuL~1tKrqz9Tvlxs=8h|WGHr*~w^+)(SXd*Jq z^37At^&SJz_}vjo3Z<*ygX0+7_M{Hd*R%Q+F}A2@{P@zd`1-pNL^U7;O(N8RY4v5D zo@wB_gEkPA!TGiN`gDz*Yf}VY&cM*Tyng2jHBl~H)YTv(Hd8l8%}Ni`LStL1a*L>AWzqjO!e zD|_&$bSDh}tw)iU9EGZvaQ2B@al|Asz{EO{mM7fS5JTEY_bBR!4O9b2%MH@qvXt*~ zrf;*7DUhK~zb8lfK0^|fSu559Q^;npk~Py_=>e3#lr~h)r0MkwQ!gulHU%kxN#!h3 zK(+IhXKYktd3o2LIZo4*e0Nh%R!-edCk}q+x0WM9R10B&NTxcA9197-LvGRH}l!})qO#W$|{T{slojO zr7c_0j>FIjqXM^`%57?j#1p2KE2!NSG)ClzJG64M z)n-_i6RlLf(R)Y!vsm*>$*lD-S(SxzK0w$zzp*qcIXM)9*S{CMEya6^3iLcratz|) z_$+;d*%JTt!;0vNVk7Zcn~>1&g3OHwn8vfir~%8Vt?UtALQy9 zcJ)B}kH+vJnTz-*L6Rq6psTT>hjOtKo1vQbF6(|xGW^;A;Ddo!l*~ z^{zyAm@&OfuSWlu&N-rn5!EJ9GMy+5hSfq_4-cY#KOju0W-rC+wNsoF2|^Lt=yO82 ztUN8q{8|u$xb4vI&dp+BtOW}8pUHLZw74p!{I<+z1m)S*3+Rj>s{$s#L&T%Ebx&J( z(hXV4-g}rWe~m%R>gNmmHnrt z{DzR3)gpin3_&!|2vai0+?%qf2n;clVXi!vI1?FvY`Cw69`X6S=gjTM6)j82;>ijk zHD;H$+{rS4K^L#$QMuty>B{R}ZGE?o3+$vNG#cYf8;3Qjz6_uHHIv#!NGtZDCK}ZH zHy>hPgdj%|uWpXB zk>yZ_xV;@2ie}~9!6i0W)zYyk0GwiQ zq`E@YGj>=?7eFk7Sb<+ze;K;G`m}?&yNNh`32XG=7ln9lb_YNUZ=p^K zcgJIU8NgDa3ljoTM0Gv}{VCfEk|zzlba=<~D1M;k@J;NKq5!?^-0_|rcj@GY%Q4~m z!F#(`*D)nC6$fgG%K=SdB(#Jh;D6=znmo_TQ*zg!81!LcSBJ;dIhAu}oN%fUFj^5@TS-%OJJw!v z1L`WYB{Y=dO$crZ{(d@UQ^L{vdY`gZo{nW!^D^JfXBr32q)^(edlPOi80YRQ%0oS~ zV6B@hVc5gYkvV#i`GW|9pz}uKZ4!#uQrD1zmn-?~mzgjHLEVDt-SpOml;Do8S^KUH z4X&-e%gEam+nL$rJ2D6PMIMg6SswSDd%x~}+TDi5SO3v$1EXS15FDQ%(v`5hy@9kL zo;06`shik zw9*t+N~8Px*+J+He3X>j+0p?#R#B0$=DBO0&+lsN)qDACo_)bBpeQyKW6p5322oB= zJ40M@p85uClJL5W_W-Rj!1Gc1wjO~%{3r)_Ji*C5PCNPu_8?PY&hRoBakJCO`G!Qw z&?-=d(@fn-F_L3}@=#Ub7%DdQ=REMS=&QND^0f>uaM*5Immi1CEc)IygLUuC0Kcn@z z&CPOCS+^vaG*lCG&{^S7_zm?_349lwZ&Y&tIs-RdF|m( z=6;R_-%L#SKvTdX6Nqwe)Tx+WMOj41Tn=P9X$h$abTUf|wl%i&oj*^^{p*MJ;syXd za_PRO81SG4Wu+^E%gpoJoqxgOWCxm<^GCQggozB|c7t~mNx>^&1E(~a#(er^ZK+Fg z7K4DOxUJNS;#-x-p~CFNs#RX@d+|nTfdGIrbHL8!%dQ}qD`5rula0UWN9Vf1SgWeQ zG8Fr1*CEHRgWs_dFKE?#-T0c2ki~?&Vq@GDfy`UIl}a`O`39a;3ym_j8eVB$2<5hgzBg4~$mfP#nJOQg z=G|{fZ&MFp=q9(Ajn}92#6S4&(zGQ1K392N5|tCohdjWKE0-0MswDr3q5^c{QNRi@~-KQ;-mHC_x$d? zbqaaMA|QwJi~*LLyYfOU3FXE|gE{CyhH@yp{*HFKOFLamXHA?w;gvsasNJi9W_4E6mnVm2mWxyvrGf zb4uejW>2>ADS1sR-K154=?Q};b+3H$e4-nR3wjCj z$6d!;hw3jeKeIGyOXFDBgit!3_e>a9k6}J5Vdd`_Og&U7=D!02!4u@pzCk#!^$0cX zM14mL32yYV$HP?sOF+?_rxi#JAEkC$G@*y^m^Wagn)xdUh7QuwWMr%W&y^MDwVG}; z8$_wJ6k8aNTJeOk94<=NuUYr@o2tvF`(+lr7tp5Mg_TTB0~+%!x%J zj^}+Lor|r@z~P?H+JR7fZe?jd%6kcr*8+v(kgFX#C@r(|PM>xa5eNlASI1bNo6XK5 zHi)SkSyTgbnloi(tUzyD#9cDAFDIbT&G|u$~XFXv^ca(xE5bJ z|1=YGY{cn;B{>8KsT)CBiUoSfZ)iQG*pS&vS|(^=pJytE1;n(WazXPYrVO6SesEP5 zO#Cp2NK22p##$ecMb1--KaLF8TT%5hcvj2p843Qg14eKF&{?Xp%>&sYEuPhPi+CjF zO(uH7G%0L5-6*InfQyeTd#KvMXa84ciduw5`o8L$xHAoR_(-H6S|yuzZkrHRV&RQz zXM=nPlcz7CpxVsiZ=Ku^RA%ktK+ z6LRMK(&b)00d|7wJr&at#HUr~c6c+TR^YYX(Cv)m@#E!@&>GiFJ+7rb8Gp!U_4*1e z3DFuY|PFBCuz@;1omMSr@Om;VMwbPSlQr#Y|(OWQRQI49qP& zCg>@qr(J7)&NougI$fPHnq7W&t!J5FWsh*f_z~UG3fGmF!ZK?f48gi?B;{%-K#V0&42Kg<$?qR zhDfVvmeKBN@;_i&#KXlEXxnZ+sgBV|>q9!p4n8YG6--K|yGT}Ut)CaWirDZIg;*5{ z=5@!?8tw2Mh}ss9+FdFSjj>4;uAMpVg4zQ6t^POw{kp03LUVZI;U3KA)w-W#YG>uM z^(cJECm^(l)915nu7_L@^(MF9@hY=B_y4?|5VerT1{5f46NqUCyFw=#j@`oOC{U7Fk2RF`;f?m})O#(3#lV@$ql3JoQ$|&4 zN|DceBY%13a7EIOXc}ZgF&xjzf>zxUQsDW1b&|I_vRN?v7^yK`-?I?GRaLCbaB~Q* zw>OIAg1=;ppUL1!dbS4@U#3^af{GNHhvhMmS?>#w0O8PiZqt2OhH7A$rNRdg_~GZm zAyCF+p)G(UcGg_v6Ke<Mg2PVbjoH^Wa9QIo;k3g zIXD~gq;*eryy5D*C104-ytMDmuW_KqI$|2f?_$bE+;@6z$2EtRU4Jh)Sl?k5cf44S z=TNgq@gYZHK+^QV-u*qu^*WWDzFxeFCk3ncWpn54D!0J*D-^k*uau!9*`gme>ox!~ zN|6yJZ0F?6FppL1Kv8Y*f09~YI4+K0Rj8sDn#ziON_Uq6;jiT zkSrQWH*>zwjIB{r$k}^9p!F6Or@6r+n#$R*P<{VG3s3+8rJZ1+-w}XLN&U_1p`RpB zEfuFOHctzooXjxg&5+pa?MIY9WP`+}L~vRO;~u-7Us@M_YZ~gg)pB^{{ZLY$1<}YC zAp%)yCIP7LZv-6DwP7=+Q$kIzY1r_p%Ay3_Wu^MEa!>dsd^Y1z;ZM2VldCEGKU9!AWp}$hIRhpEt9j3C_i{$Is9}YWKhWqpE+u#sg?d#kR z><1o6d0kWkgGVBE;?JjzQazQn>IK|K8|qLf!3luw5ycv||In&PjAlF+$*jbV)=))~ zMi1q|0kBJ6phwjn;xAM&c2prdC^6(N?Jys;4@i1|ND@zp`WGwE3B<<_htkjJzJZB^ zSu_+<(24w6NrH~W$7M19QH7^f<QQSW z;VO=$!EtwK@)4G0C3HhF43LbEX?+NNl^R`=-XlNm$(cghCjF>PDRHm!=)I!m_)CY` zoQ-HIFwsUHH9k(@mi>Yk9Ts1?v6(m&TtMkp4$g(!pU+TtU%cw|`b;`icI3f5RQ+&- zMyLAxx+kF{u;J1~xki3<x{CIHKAc^W;%HN-_vh_BswwF zne(H~Q-7k5p^sM@Re<(-07jv-Pa-!_2}zDfL>TR?Le=h^EK+)FDT7yo*xSxHuVeGIk`sn-$K%Om;TZdXIAoT)j2U|yx%%&H|0CFU zuTM3*J8NiC|1Ri9S1rd(BFB&AE!v`#tTA(6TL0oZ?qu9xf^#GIjVKmT{9;~@$Ft;+;+qhQPuj~79B$1~}x*K>-w zzClerIE9CJim9b!HfbqoUjP{{o8N9+l_P6QquPLz3Hy0E(6)KWIC)V~DJTcAs)@2= z{yX7C7N8U_i+vJ(kG&#vb@vuEWkx)AgB5i+I!6LtPIO*)MHC}b6i$=5EXqjT>z^%_ zfD{}kG(e;U3ux3D)cIz>+_o+tFu*_5E=WLdn&yvPJogvN6Ho51tqd|U=)-W`2Q7?W zyO@43;7Ll5b~$ib#F<(>+Bg8tp|_*{%@5oG zw2^pOi`3FO2r8+c-!L|*6jn|o33Rt6NR|~}Gr%L~-IG>Xod<(O{h_xtqelkT-9>8+ zy`*tYt;C807X0jzkHz8x4M(NGcnnptAtg>}Ie&VQJF|)~qDC-(3BRC4l_d&~WNse#1F#Ro~SHmeqeV10yLgOdMk5LScEf%dZ0b#4+ z_V->&`AInf+9z##Y#30^3o&ThvX_+1E5S+0!RR#hr2tPn?W$c4Nt^zXENS3;DLXbq zV>y9qFm`1R+a9sd*a-53PmuPzTFK@rUlD_M==;K@du2bsGVL^hNPPs{uZ}smyx zMvr(uXBl{;0}2{EdlIccl3Go$=PwD991$D9y%h~uSA5ScF8dKH=Zh(DzRxg&ca+pK z+`p4J3?8OE9BQD2)g`xIxsencp|#{&)33S?kXL%;#Q6aCJz5PxW%0o3fE+<-@8I?S zgPg(sC-Bfi<)U_YfuV-xHRBx`A=jh;-g0h#w$T&Ce_^(-W87oT?!z4%BxpwiUq|q4 zOAu>yCkDh?hu8uWNs+U~jgx^Z``ZkkPIJxh@DG@ z{6!tinE5~H{`LWem}}S6>1G@7JHPPR0T$rH5xZ3hL^q~o7vDLhNjJ11IP4qPs2VtU zpeEi&{NnIQ?&XS?fwTSQEDi48z?ld1u{z)hc$4qS4jLssS_|c1?Dl6(g*whqc)y%fODMseGnG1a4d1 zOu=-%cKa?}nY7SgBR2yqPp2m<`SmxKHkDPg06##$zr0l%*%i^wpKtXlr+;aZ297$` zB|eM7DEXJ6m7cPKzlv?E_#Ps6Gvn|+uaWca#Pm+3H3zP)M`!91D~D37fh{cogOYcD#D~=w$1;oQ~9Qld`nkDR2zMVru)fkNM&*xl}29zD~Dane=j0}p#Z{O({7VK9v& z@J;TO8!*w{ujBLM?jCj+6r_!VYl*0&jc-lM)(Ld~-!Rtu094RbGqEYkakr zxtT0E!05*QySv&nfD?EAhfreehWmg1bo%E2Jo!o&%BkDhQ?0Bi(KItT*D^^On;V zGI&KAPD0HU7@WBrt%$uMcDE{9>zh1=-rFFVODKy}a_~OPZI(_6e^>#E1&K#gU~viL zDEqwID-tDc$cuB82Tu^Q%DER)Qs>c}y1J~Rb&RckSETx(xQI~8Ig*fpmwB0l(A38{ znY#9z=QJfRs^DXW@%=w8IK!A0gK=o+%w-k)dfSaISE=YqYu z!UOa7B&9Xk<5t9u1)z*7bMRt^e;Au@#Tp{y4SmcpYYi zsFsVI7ZJ_hAwrkWD%H{V^}`;;a}scjIxjnYJKt&}2HJ~Xk-lubGT)Whn+KxFQPJ`B+|G}^jI8F;~)eJR6nzN{% zDL@~v2HfFm@Qq};ezt+fHLgS#_Q;c%9D#yju5Kmk%s*llZK|Zx6$v8E%0zSJ*_!@! z__rHe<26kUXBNylBE4ju0u~=~>E1m%PUHB2|Kh+(C!aN3GL|TI9oo36@EQoGuS#5m zqHi@|D=!GSIH5{N21m|3a~>3WV`Ac+(&KIvqU(LivM8NW47(xclk36Zs}J3KTqSU4 zqkUG{PcDe$ISqN)<(Sk+7*vRY?(g%qoqA=Pn4~#2ype{sfS1*;07M1=38&#u)D^Mt z)aO1~o~f@FOc^>q%03$_HmLO9mTy)xRoO(@b;qwnqWI&KqJp1^snlrAgFa$xhO z=RXjr(pg;}k^s=B9_1`{@vOOf2vg7Mp2IsiFT|)VDQAyuH#v=>l4q~)LVJk&#$l$z zVWI-d7;jWfiO4B+JyN;SGj|fNBq)vlHi2PMfDA;nb zoN<>yi4Ea~yac6!JxOb~ge$tS< z;EN|_A2BIPrg34&pwM3cST4dU-hGwAVLX}=zEf1-RWZe_VB(@wPOi#6i zP11?e-rC}qPAn&fc*i<&6tA~u1O#eHO1wMeKEtn5ofzKtHs2JL+(kIb^{0Ud@*~=OGSrgy*X#V)R!<)wa@BWUk9A5$AK;u)<5XX2y$T1u}+SPl! zsv^{DO!qYJS87!?5#*TwE%<6cL+i=-t300NDuSi{&&B*g9kPq{$$Q%@8g>?fM3hos z`TLiX86dU~I9-w$#)$o5@dU);l&BNU@~~&tPlrPpD{Egmc+8n(MbU`#e#29ohfRT= zAqXt=Q!#oN16HR-(j*bz&o-yKTkZQ;v;thIpfrFWb?Cr9v(QL#baU&zOQff5h@|U4 z*(}0P-+b{MV``v9E*o0fh)k`vb}u*nK|P^{^k5pkd}9&W%f(roZZYH=gkkX!Uej4P ztba;~W|+O|-d#2rOyGIByWU#A^($L`LvnpEQRdKx=-ifFVdi`4iVFUVe_DXTY)Rem z9nQiUGUNe;pGnjfcNbStCX_zXbNQ(RJRX`pW!9x6dOJC3VTV%^WarCv95d2{V*u+~ z)5^~>FRYKVbPd9j)QhIr?32T}$3a0)i;yz(RA0b;1k37{M+@)+annO#?8?@FviQKa z`_>=&uhuz=l(FK>^LAiq{Syzm#OBL)ky=4N>OcFjL1P}0NsUl&6HNw4I?4%S)G9Dm zr4*5eSiS#-^$&4eV!6qg;+7N=E=3!w2()3f-s}@&rzNl<>d#BhDdy-z&vZx{M9X_z z9|XV&oX7_lOcelCLXwIvr^fa zXj<6AvI(MUr@@++fO!So?lkhesr&t5dd)E0w&M00Jy$pQ*4T50%_oYIG?DZn-g_Y@ zknOtH25NB%zwozYW3oxFMajx4a|O>|4exkBjg^dz=5*zEO>zryH=ALom8&-?nsg=r zzpWs|d8Ymjd0VDG%~naDM$fvM_rcWm@`&w8jw%TdM(I+>?9?n_F`~FctNGQ|U^|ol zhLd%eW`coHU}$2mhi5@?nSP`zySWnfL!Mp5AbVp@u8tb&FQ4`0U*!Gc;URE(K3nma zH!&mG=XpQT{U5Ev;XCtpkpVaf3N)~7fjW#nD$}h47Wgkt2P^w+H-fqH?!*(sbJ=ue z5BbTZC&qj+_?69!wWJ>4NkPEhH(uC+)V3s;CZkDCY5@@p zBmtWaN1ieH>5>~~d?)?=hkE=!jSu`?8dalZ z7|N|J5(iVjQRi=qXmVz3AT!ZVIvx4PZz2SQa1yJT{_Yr-LegSxxw2rePii&(j13t4a%|p@>YOt%NlMEi3s`cZi3>w6v z-U?XO+lbSta|Pc$?buwW(y_Ib@+m1h>34Pcn}riKyphfb$&r)5cK!sa!ClxeFF~cn zyuIXR9&JZ6v+}oO_eG6{>Y@~v7{LyY6SgF>c2O%W!FW_FrD6}2$i|?TGF9ps(9w#I zZ|X1fFipbRZIOz9J?Yb$??SBChL<7kmGB5z|h+xn+RhWh< z^iG|aK>35To2%iM2{*85AkPsqnm0vF=@Vv*_o)p=cDf5n;2Z8iDQ$Yp@prg^FgO}5 z16VFml-Vbk1Hf&qY+y_KbaWBuGQx5syt)*ev>SO~0mqy}u1o!T@wkmQgQFkVn-Q1Au#Ds*V@jLhwWG?*$!*P_tp^{aotJJP`L^ z3;@*O%J{<;HWpj-F1;esadF*=V~Rfus57Qh)^c>;APVQ$U>-2qIKlugr7FM<#u^%rA$ES|$pF~f>_AiR+aV$PVoG3t>#7y3?2?-N{G2=T=cyLc z7cN9ZoElI0C}QppEB7+sy4ZVjje>Uz-Ho%~nz1t#A7-DO^uws2GY`i$pG#T5k!k<@ znt7<8+})~_H?2JN)y7}k6NKS2&(5C;Y>G*6$V*DUL9eH_+y?P2@ul5P@2s1t>G54^ z|F!&bi%K_ak6n(0M7l=(*mfi=u`NkxUQfJOOp8ZEFpi{s1Mz7Nq1Qd8Be0*hOc}9% zn|Dw%{s`9xy=8B7N04!xJ(D<)JJ~Nn6uiTiuNE-v0XCOJAW&N*^bA7bl-{V(Wn`LW zQ|q*~_{NCJOOCRAU}&uJNjbv@cXidD27NrGu4ftlUX?QQo&KWy#Hz{ zbNxvD{@X$Uupd&`K+BP+13XtAUWG@N>nKXt=}!PiyJ4?~zxeRdmjCJ*JqbtT>44_P#1o-A z&?IEsTQ)-}Z?BEFNWJPuhwB84WHn6W47Pa#3Yq-5U7BPEfmE zNqR1Kh4RM(L9CpD(dw>yG=@`IE=@$HHp`fb$l4F0|0=vw*5%(00M&;L1!sPA>Zq)o z%WAJ?9?T{XRnB)?`RHOUq;2rYMo_z6N5qAPO+^USnI{l6bK5gSW=V+MX-7 zU;I{8o90RUue68CdV+hA=?v$5Z?a>L62DXkvh9Mh(*rB_NhR|Np(blNCIGaw_89NN21sC3zpDTzs{Zjf z;q{8}>vtimVW{7TR7-B?J#Mnm&im?$hZe>|N?|k3UJCe$9SE(vX#K^q2ks8u=CJq; zraMx1C-~2H1-+{-pBu6JPvmD&aq>$sR?^@uZ1OImJ7RT6HIBZ{-DMR0o-u^Xw^x3Y zo_Q*#4(iTp=v|QXIZUe#ywrDEcxIorYc{939@r_Pm3Fzf><(P$M3{Fi*3n)s_d5J( zqKbYL6n;;61mCfZP&~B1%2H5ti@EN^$C-#kwp?0TYsy2hEzq63zCJiBZwEz{Tyl0p z0(a~jzR?Ka;FnL3+{nT8dYc>Mk;hI7Mwb>_VN}L8^gSPhdx5-2j>94Y*-&hxqGRIQ zd@(47=)eL=9@&x`(om9S2KYHbbrFtkwRMH>iSPbI>Te$z%FhJ^K!xKi%A*7J~f&mYYQb!8kKA9ESlRTs!D{dowC|1pIiAV-E z$qNxT<{r((YoDU05wln=5<`2r7iLF516m7|Tl@)-?sq;Zz_ z@&d5%hfMds_8#atF3yxld59B3?i{=S6Rw<2a{9&`GJ{~HvcScjSadc zyIkZ-S&u%>7B+}HK=_p7h>XLu??%T&Jp1|ag>>>1eC=~Y$hKh@F$!(0_{$Ey=Mxhw zgm#S3!Mi_pMHo4z`a%&?m>ELLtKiGu&5-4P|E^)Nr-sUv*-sci-XVE3Y_P2|qJMu>u?-^ZO8>CGR$L-{$zWN2{UYa4YQenoV7ptL(7#1;n^a) z`0!Q@;92cSGDZ6EKxCGpWGs2MGFC_(9zrdoa?{5`j_Ol}ntWa&DoHiM(?I8C(@92y z%ISm@*NGJoCJ48i5YMAh+`$+XMwj4|A-UwYz{jJpP(F4?CC2kHKLNlA_~RxVLcbAt zU2|ZBf`;d2X&RA%wk5f8%1~HCb=8wZU05tWL8K*4Ok1n*KRWLzVi~5iYY$=H4xp!= zaE4Bt>)?u&?uttioKiQ3PwxnY#F1?HYYhlKd4t@?hv%A~FXZxYhJfYLFl-QwT|pQx zmJ@Z3XGno1ltoo80g5*RJ-%sS!zJ~=azIWoIz+O_4n116V|E|*7EfEqRerV^TD|Q? zvR22ZdKy1^w6qixnwEv~)X|?^mqtcS5^3(ckmz;G*|Y7kAqIZhV%6CNabErRCF8=i zjgfKO{6b;B>+L~bN78M`-@7IC!-s^+!*_a|3E@283U_pOg;?<|4<=K_C=vcbWgL== z?-2a9aKtaq#*Wb5N*4!5iM)E+p#yGOXHxOXR z4s!$-R1eQJi^HUVs&Ph+z|h9b95oIC`2XY{Ak0Us<02@ci(_|x)fmHQwtSwxfz!hi+ z;QBE)M>VdnN+=fHdtn~O0QtlA*4S#in~aMgR_g+(D|BdF0-(@zOr=>3ez#0T^E%&w z2}PMZUho+PLa6)WH#>TP$&1mow@B-8OQwWypID%Ti?pBhABaAWaiCu4xWh`DNB z_LA4nUW0ahF%INx1#1x<-rBYfN?${R^m5u5v-9!f25hxvnJhOZHZS_jL=Z&M5{OAP zi6q6jIt`G(+{5Mpy2;xL7{j7QF6`!8?ph1Z^G>>fx}uHxH17hUiDeDKs$ClFH3c3= z#)nqH6!o&(i-V~&(SweMu{mdjUK_Va-7~ z`xj~`wE>g32?F@y?i10G_s{!+*e} z>e?db^!7(WH7Mbr@OEL4>L7)W9)gb2A8d`je-KxoK*U%nFiSr$sC*A7r;^1msX?XO z1O$e16r=P@&~Pkcjhc9KkOZt3e>f3#0i&%=h08Vm_dP70NqN^4z%N9~;b6Z0cO3m3 z;d0j6HwS8hO%R!y3z=R4d~aA;6DEvktM)T@^$XUP$S|hJ<783lRC4DV(jBhH=v01X zJ$nBfhEKN@WiR$-1Nz5V{h05_SypcIbF%O1fBYacfI1#-eEmqk^Jafym(({UqoT8W4{?+;oT};a6HWiLpW*T}j!cTq)s-t-*SHXWA<<07}()AH&TDL@K$XR%@q& zt&N}{jRJduK(!|Dv4cFVub0=#PxNbmy4pid74ggxE?rah!!}d!MvCaMHX`Ed57sBL zlR9OLe*&)HA!&m$<|qa%uwyV->y^cx1tR7BkBlx9@fKxidW+^i9*`dtMYtI}Np zkr&K=Bu3lmVXu~7n^fb-u9tpRe#raUG)vycBJpb-gzaj~t_%pS?Fp(jIoJ|tGcGCa zu0x~PRP`*l`zJ>ZCA`yZa!Or^Bsm3~dWRvujL{e^jn_3Pz0+9yKHM}_yAQZpE>Zmf`nCfP>;v;rbR{aT@Mx6P9U$7~VXc8}G(4dmTY>yg=cunht7ql&-*xUQ8%a*=vp8UJ`NKaYr zE^{*~oOnYSMPt)w(FE`+j}`2bVtO1`0Vjb~^m}%ZT{IAi{Nyai{M`rBLX#JKOk9iF zXkwt$X$#n<(7%s791YQ4YO2eFQ0&hI33eFA#}11RiPoH0C0WM?1{u$44R$t65#x2C z=LuiB`n3A(q=`i?MA)%)#pLt+@)wnZtr(Q(XE%!!=^0HxDXK%vQGA0Ku|$R!C1jWa zop6>)=|_FSqcegbrbAC+rJe6}2Y)*dO<9Db73ECRrNtO+*9CEN*9LDDimq{I8Hm^3 zW=-z?K;({lyC;r5jhViDTPV}X_z)EX48ZbtuGU#YrD83<7=2?f=YKHw zn}DgO=Ca_o#0qttZRq_*WAc?q%&1qvD~Z`d)iqnd&0M@FYU+gBa=|R#ds}2cKyjMlxYvcT+U}LCt}8%m$-IF-YC{(1 zRY3&p7{$vqp#s`_H=6=~vdZAnI_1%KyOEpC3}SS&J#T72Df8XKNI|@1k{(6^u&>c) z{KtiZz*&IaC5CK1nHW^A;mo$*QVC_# z=F=1VI$Vf-E1f`;zn7{v8|VNr>#pQ;kbvCVG$*clc)AGRs`9#KY%K4I(*k1r{xfJY ziysh3JO`RKpVE3 z-a9JDo=I#*mOtf=Pvf z54|Shfc@OBUlWR1ong8#CqDm}q=m6{MPKul9x8iIbv3pA>UXH9k>lbxc4Qu=(eD(? zW?wF%*jBffXRM-&SxBlqojP@_^ch15JTfE*FV&)=kHr0hcA5PND z7JRyaz4+*h`V%4M3j3Mti0;t#v!LM;txHM zS<6?2{qBRqYKKJUt!m!$$F1(+34D?x6BoDM6&y_2hQ)E!0Xz9K^)DleO|b;#C|)Z{ zr=o}#WYB~L>FsE^ltS9G5bpvq;0kNMc--h;OmjhtxYcDf2oPGA{1lWIZf|2QAj7ge2n-rx&GCUR7#>p=uL|phA@2CnPzhCNQcnZBJ(~ z32;Jev|Lu)OMcH<3uffg?cnOZ!*7ZZKy}(V=X0F-d9!tmlR*MYq-MV*pvHG_r4S}{ zE8-tLPh!&^7pTq7C4dwZv&vK|DkE&pgX;1>4I!`1BIgV3jq*X0wHwa`NrqbfVO!gW zO5qMPB{Td!UGg|)s_J4{J&MRF%$w#PL)^{k+1N%ZqmCLkAty}$Z4pH>;Dug}@=UOc z$9w9sZ>U`}@b$W0);NtRoI!y)9l{l0zReFy?*4N>yZK5^%hTVuQ4$Qt(iJfI4&Xz$ z(bpI;{YKmWSyK#{-?Qm4>P@-1rxX{Ef&W=J&7pbJVHIdGltPDl(w2my2S7!KhN?N( z+$nh*a85wNR6pdCW_Dh7a11=d=NL;&KKS_XqYa|)R`8HD#XE+JVCjQ$yO+8{{ySVJ zK5TTAMYfmQbGO>10EzK7zErq-s`~?UAIB#!YZhh*0yg*&(0Rz|2CAQmls+j4AN*2H z+WY7LeAcn@Fq0tXb(t2fVla{U5(<+i1sHooLPt5FJ_=Gk6VO6itF`A_@nJ3Lpl-$b zICb^oWFE*C7wE6M%3Oj|a$kD-&&BCwL2O73YD=%%#Ay(JFU-Vj1tbGK3jC8Mu68+m zgZck;?>uYMF-P-2i3oy6$vO7AScbd0KiJ2{a@LcM`ZKHmd{MdhN`&8e0!qPwK)=?X zg|%T4rPQ>+o!nuX==<0SD{}A_)Rb$Cd-kJrm@#b|ejzH^KCgv-hGLpq?!o~$iICa) zv9UWRQT5gX1IzT7;Acc1oX3)>^7a8ebN*pp<&=F!?so#D6g_GGVZz{WNKdOLN7i*p zZT;m%Es}p}KrI426*O}(tqm3A2vibCT0P&k6D~cZk5^vz_Oypu62*$i?M4z1WF?*h zX6X_CMins-V!89)yr7LU%9$6d;zZLYN$>@z-Glam4OiLN@SPtr{vh%rzcoFQ_<7{K zf6OF3d(AqSKvhww2I_NmwlFp{*Zp*6@V0F3ls>KW`vuif(ws|VDNB`ga=)S5A@a#T z#21MRP5_xw*YA{p%eas)3`<_wJ-%-{OzDIZ7w@2G1^c~`Nw&(U=VcF_i?#__VWl(% za5oz~S5F0WWaIU)Qv_xOKnpuAoae6i$-N(16|&O9Yhj7-c2vT1s8^dHqM;d&HAtMj%8e~0OG>~aNt_1|w z9`wFNl)6kEcg1ij48#w0ibW*QiP+dhy+xAEwBOFIx7w*fsDAJJ8j&=e4wDuU1fc?&Zx4>6@NX|{JPf8tvroLN2y z2j@-z)+KAT_A+VwwIol9dnHL3oxbaQ_;eIs+yN!Tgh&X&FNbITiUCLrCfHp`FGr8e zgg(3HSDN93n#>!gIUoAu6LHh<$Hp#{+i{Hn_3!2s&D?0Fu@OCl}*3yckn0BR8#77kX0t{;~Z#6kFNTT5ym zM0kkC*et7_1&Bb4Q`pKmro(Q71N;<<5VMSFcm|YDc=__m^UCVdmchYZ`vNRh*gMt( z6FHR5)Yl-4Lapg_ij`#H9V|JJpJE}zXymXC-a+Pwz#Kj zQYHR(D&)igK`PkA${qiw{&S`6b4c67Sm^n?@lo4&fI?r%(p-g|A;0(WsM-6>TUs3U!U$SC z1Ux3yovS|T=u zqfUWrqT72S!mEjTZBk!&^pOwdNc}a3iA1Ku8L=@#Fizau8jYPr6iCYcC0mL5T7ieh z@2Qoyr~I*pI7lxK@LQCvTAy8|ffzHfVC7G{k=MS&^Z$caT1(~VMzuOvtF=o1Fn};( zK$*6x%AVtvEgcFCasoc~5-~Ud#Z zA;YHJNA`c*}oq1;nOBE2$cr?B+?qU^Uxs@d8 zGe2(SaNiEEHRy~e-NobqK{L|bc;=b!Lr`4M)w$+(tY|OD93{F1ALmD+;ZQCdb8Cxh zFj;40upWUXF92`2WP0}dAxqs~*uVjKAO*|S4yr*WABSioij=noqJ1EL>``8o^0dRF zCM97=g+`pbbnUW~YAv(zwV>Iqx+OldMo%^9T2n9;n@WyM9>vswGO`{rsR+D=6Y>qN zQ_MMXa#h&s`rN@?%67%ax8*HEQID=F@L?Sp>!5@2Z+e8Rk0voVxGh|2I;bSKngSwH zt*jrja%j}6tB>Bm`te)P*xpxTd`Pb`egAi z^5B_N6*Dem2#B9H;k?m4A0%^D2}Y6-3^~W0Fk2RmQGF|N272^swFXRl(_T`48il#L zmcpmkUS3f>rHES90g%rF+!!)$d~4_t4@%msG0n6!4?T($_j?XT>-g-nG+D+L@59M`7I8XZ{Z+^ z^z7n8AEvSgdEXPHmf) zc%Vn^O~!AKHev0Z4WIWOWi7BHMkFtvvBV;*HlQ?UsxY#Ot5*$>Ghl42p2O_Q{gmt~ zy4!qwH0h08oX)l$a3ote?06ilJZeozHNDCJzvh~bSu3T!gI*3a%FcGprz?ovdyzQ) z&X!Q0l58c32ZUZO0qko5K-H3^0bSomio@s2N9zhYZka1(^7~TO*7?iSz7Ex%)v#w) zTEff5B2&85BQ=C`msni7sbO_B3?DlYGv(&S1TRQFmO5Z=hdhDf{~myrS~-A%>`Fe2 zhJUDKbt9-=SUR|VtVx_khzep!pT94qC5WTy(5Uq2j~i(bt3yJ@;nKKLXEL9rTb+>nQ0L% zCD+4Fzv^T)5W$;#3qM#=l#20IaMB40d43M1u}uqi$IrB5Hg*DM1$fO7B|joIeh~Q* z474(x;BND*<|um4-1?mXr@V^HkL(-O{Ai4=y{ZXtM0w>NJBGJI+C|n`rgZxf9w|)R zaqlX>+lM%Ze_b+B%r2#h#`k)K)bSY{7^wiR^>H>P4}3tbZhK$#B$pf6Lf`SZVG04X z5kj*SNukX8%Tg>ssgVZUmcxEW2$YfY|bIoX+#_;~43&xmUmn92lLlil(_K@Hg4Q~J@Q#Lnn zysG*R^IU1#Oa_Kq?z32grFy=6!sZ zrsa~^8r=_iL+8{_0?RbqJ>X6SgEUw5&erBf=5?DdLVL%Y_(g0ku=xIM1zF;dC=i#; z+|oY$Q9eiI+5YD_gbu-q^wf3oau+5)&?++I&kM~_Xc7FxiE6+~L~GYxuj1EPakH8x zTia8mCU2}nGJhen&Fmm&BpaJiH0028C)@MNZixVURP1DNrrPf6yR_fV_M`*giM4y5 zcLdh8BH5d_E=qd%X1u+IUKXGLW8W>%UXa<-V^SI3xlsGuLkzw!A~zf<^;1nIr-te@ z?;)9b;Te2(gan|9DjH{br!hYca4$Wa4iq3=u#*Vsh;e2)yw_GQUKBg%p5BH%j7UG1 z&SwtXJ&q2Ah=F~0|Mcui9fF^=s^}Eu_Wzff!j zor#-#CRjc>Ut9$9foVHj)c@6iRKn`>$T78rVc;3miPrJv(GI+F-Ip0q;x{*y0J{}P zM<`p&OHrlLV%*%}3gI>~msf@>JoJ9QJh-CD9e7E_d-7-ieur9sk1H?h&p@Rd9__v8?mpg(1CJ^0)eEUt~G??1QaV z|JT9;2K!j(kOo3bn3+D)x=z9oPwn0KssyzWm$7AB-C!X3SxT^ZD5zz$iow?2+qk_`}HQ#v2;H zKHyb-#I0>+YQt2PittOh(oZTxe0d~Eg?f7q`9vLNPxTk!FX!V(s_Ec|phkLoEOz8o zwZHyaU=G#Zwell5jBrgZ6Be(J^_`F`rnXl(d@3N!q`M323D?>Jg+X~!q{l3Ir30*B zE&EtwyW}+dtMF{)0J!^Y#vypic&f4LNbGNX>r*sBs{j#s%(5HkuRyF3>{m{jCn(0x zruC(ZoFNYdbY{7v3gINv^up%BILY13!Llk?x;l!J{itZOmepByJXJH1!7gDsBdZpZab5B=gL zR=$wDAOH>sl8|Ygs+U>>esoWjw7p)_1THxe)Bay9*jZ;V`}RErPzipkZP9ede9$4h z>TejbuU?QIFN6A#^?eJ2a1W;!JMaVlesw3m>3|-e+BykbJW(%0 zO^!}K5hSHHE87#0ITmm@#;WNcV352LeEO^&ZRg3*%#Xj)tNMCF+fq;lZN7T5ZiFVE zP(=+u$qxvyhB-tGNL=LwK;JPf_4M#%R^5|zo0gRi(GGNX9@pJ`i?jGPCzq8M6RnfC zHF`A6G^>io?@%5Q<391snUzdDtyjOU-xcNF&PJR^gE&L7i)hf>enL0sM@gTh2YlW+ zMes{$8j<>9b#7A#j^H|;O*|!GJAMNt?SxzvAlkC^M=e>$PSgnS(Kh8##p0CYRu7LM z*Okc_H$NN}O83s7$wreoKAaAyTDIBQWh$+R*Admp0#wZzg_(G{!=UbZ54qL55@!I3 zOC`bqj=VUN5wo30CBoBJ(_x^YqDWLgNbYN5ODClR^KQ*LsAo;sh2rF{cQ>piiQ9$w zqYwc<5SX|sg$J?!tbN0`8dSrlN{z>ksE4$=5b`s7k;|${plfa2`Eqt(`A%dvNNEQ^ zoq`AF!PR^r>hQKNdK3l~n$5DLB`DpJBs_{iqZt_NC~m>DnEmHAAYU9gJutLzY@p?X zT{x?F$CicY0U>2H04t#GY7FhTuK(kCtM7|L){A4*wB zP(@-YT0jMy$DDH?0^ysCS~C$$do)-m2Mbp7WYL7*9*xf8S}!>TMb=BIe!?6{?RwN# z-TMgiRlO!T23QiN&1p(cJwR!}e=4O$OvS;2+K<~g5Ti=S`Q^-eSGk`zVv0`OIF8(Y zz~ZhH*;Xtfo^w#3B4;G&N9K(AXWArzfpl_LmbOISW36U=I89%lP5gW=$%W3 zMaEv-PHJjf>1!^Pn(a|uUb0aeW09S3NPT^V=@dS^5oDmWS=OUjftLPfbCeVSI%`-E zN1tB|->dVEe>q<=)rkRR*qAZJ|I<6`YXq}s-H__V{#im1j;sR8pB^=mhA7HS`U(s8 z)6qJ`=fwAX{V+LuW`82IC@cV1#g_Etla6uf6L*%j1qfu`0ibZh465)DL+o+R@aG6( z116%<1ezdVW#SMm!QcRpO7Ei|CuyHYWe*vZ{34j7lve8vr`zMwOIuqmvncBnq*apvx|2$6R z9T~a1$;wHx*BUs^+6m8rtuKD+KI}-Og(^nk2qIO9ysjuMsJw18MNwsamg@wJ_v}*R z11pYJG8(L@F-l;h0)M_gLbzeuU-Whw^+46|vGkSudDNARbln;0;m2Oq)*P7rI=8W8 zOFWs%+GMsrmU`W;+ik|naHh>(;|#&R!NS@W@EBWCc@FFLmeGw%T5aGRQghEMVRAMS zh85Mp^OIg^H z#Wn_xUsgt`A0;W$Miu%FUeQ)vasW6;<4o@205oM8(19vD9zjK_JnxrOH6}Dhye1a> zvg)GbZ6PnWiQlD{Ou>rbK}^Jf-vh5rP>n=2539Pb$HF9yDoX2%W!oP zvMllBAGo=>*dU0rqaWy8>(&ljn9iv`mxo)FpRoakzQ2NX92q^tiZS9Dx)x6|Zt+Lq zI>dErJo=8FFdj2p~bDv+h;v3<;mDUBrf z1Z|VRfmfc{F9iXc%}ejf-w4_4I%1ksSbPsphlmdti$tlC;{psCme&wcfW^)EZdi?E zYPHXzQwpLKlS(e@SV>;=;&$B*B{Y@6#@y8SJOFt57M)5g{7zO{esl1!nrN-c1~Uc% z0!UY0dXV)Kdc|bd-0xlF3?KV18#MO?qVTu;$!i>vK~`}T91kXj1geMh+uEFU*nWOM zZb5Tz&~L`kKfi{km5`ZW<+S9wB}erUZ0%ds$5ZdmE(_pyVRJ9x-|YH2HXqdhdDpX( zjTfPP>^S4$`3IOAG2lEdKk4dnVnNloCKx?Ncl$y_<)L~7RuGmp;(P^-OVb;TJb(qF zVAvksX`YO!7dK_^Sj(ry;(&qFY}FwTM}rAK2!|~#_ZZw#DcIHUdSM7QD`(ISZheYs zmVePfc>!(Nulxq2P>3?qst4SvNK)XPbK+t&_f0T0i5e&j&=CHO_YQvP)H7Ku`3Uxb zhESvA*xW51ZdI9l++lZ^pY)G4caUXq8f0Bdh_2P3&It$6m)R33PU|SC7MTZHVjLG3 z?bz+A_PEK3c0`N3U>r{G9@wWBWqM$De7sUf2hTN}0zldv)?dujU?1f-UQF|Rc5%Ti z?JCjaqdSzmpr5P5gp14F`?XA6LXm6jp??8-f73dD90fls-J6Js4mHZHGx+4U{!I^RGto zPd>O{i7U}Ez#q9W-2+(Z=NJ;`fKRNc)q+fH&b4S!$j>wS*i##fe(1AFV|777q$3gN z18tt{mi}G4T-1D&jpg2iyM#*Nxm;!n+;~)lD@M&tO@hf=XXl<(fcyO zoP`J$O^^i*v<^3cz2<9+Wno{IJrZ9>=vedA!>F+JqAXq{iez za_(@ON#%Xa$76g~0qqJd)CNY3aN=Hv(olwhJ+{ampc1ud`K0s+m%C&QT*A)Di*K^V z#=EOfSbpMJ0_6+jQ53IZEh=!Dk0j@?ENoQ;Ci1~_2p5ssH8cNL=(e(_RDu<80qF-8 z_-_7@y2*t&bK+#_(@7J}apd0K{?u59Nm}+;zO&?r%Ne6N#dmL65V_+i1 z#kKs|grM}lm+*u%kl#e3$w0uY>A!;9XfB;qC61!9 za-eH$2oZo-uY`LxdQ`||QOyr+sfF<`=Tt#uTC-~|Z~s_LH+>P=ty{u?Lx>fLqIM%% zaM(ESW4|=0944;@Jz>Z&@kB;cX}~)rQdC4j!oF8lFDkJXlekjSDp%80%aSM?rX7DX zTJam`-iK3iwVpKcN<`_su?6%0(b~beMUZ%^Du~0_cWkHJkVodU)jK*3%!%R#I8MCk z-N}R+1uaszKxo|gdq=2!!?6sNM+3wdeOnS4WyBd@##Guq`0M`H%5q8{EdPm3{H6Fd zRZ(+mP}9*K1rWXN$A^5SLE-UndK_Z#$#N7xkGRV1l3hTNv)dwqjOnhH-ly9Y0x`w; z0Jr*)Avkn4kLh_9#{S@EDIm2gpkL+CQ}|UZJDqi$Iza+w6FZtEnzm2onpMLu5gye~ zPH3%s*1dGkxIyU2LrORP^ufvk{k zg36j!7NmXt_KPggc8{gY_j{xp?Prn%Ska%OPJ4;>M8cOg?qKKzd7-eQ1}3q>7=i zXwsy@>+Dk#SHvz_fG%>hZVXW#Ax`Xoa2oougOj$2&XmLT1SJ98?= zJa|_i?B<1uW$k>nbnNHc0{Fc2rwmW%(O+l<84Rkw+|e;JwSxxti0-;tD~O&YWzON+ z$=IMIiszLZR&0)@r%^2FS&vmI*P;iDscoMDs{PL!CI@HcuGDqp{ubM^0hV4t8rZZz z7aR2L#FwC@A=hcqZE!XzRNNh-XORoYd4lD)bjr)nmWz1lJD{7NB9kN#wcNTn;aQ>Z z>y9=s@{rW%DB`ll*Zxc)$3LBEzqbM`A(GE~tWl4;-l8}L>*sLG5)%$3Xkk8Q_Ps9x z(Dy>)R)|aY27qsXLF&8Y-=7f}M0-aMq#fWA4o9b0x>=9Z1|{4VLg zOiD@{bWCA2QV^Lu6mN^jDZP!Ke+}t!$Gm2Sci9Yi0lz&vN$Wgw;bU*A$VN3g`ifC7 z%UQlz2VuNY3;tnUbA5=1q%7&(l$@m})aXH7sI7uiCO0z+THdA3-ZU~ZE<=0{DQt%v zWoJN=tmh_6pOy>d{r1pVVAX3B=+>DipM`gP8Sdnf!QNLL+Ep^5wSc-3vZ@<3cVOOs zj$dm$zHliPFwJUT88(QSy8aRhg7D8E96R9UaRKE==dJF>^I`4F#H3mFtlMST2YFhH z_R9P`UUr=siH@!B>1R#FKZJM5J=HB2+u3@-5=`ntkA&d}H{EnINMp!CEt5>)4(ola z6*s2tOjf#s?^_e`Z~yj`9D+yg=p2<81TjEMX#plnU9lD!RczF(b-JN0RHT?Q7GM1l zTMto;#Q(QDp8mHSX%H;*Jd;_EC{}_O(cATqqhlLqAK;mA$%~FrriD`eD zr?&+XIVY@^d|ZN~aT!}E!!3#V2H|d}9Xu>j#RI-0k8%sPb%%RUunyE*w*WEP{A!l~UT4rm> zj+^|uw`O63ev#rWLu#FFUrc`W6rqEwJbWrK0b)_9@8{&OBGS~A?k)m*=ZDz8G7`ZH zz3k||*&IF}uYS^^k-OZ&4UiJX2}Su1h>Is#NctpPyV>#)EPQiM@xTq;wYr5(9^snM zx{-ohYde?zD7nW*dzi7m%zinm4FAxX6i5I0lS%LXJPmA+#oLSa_R>1c!6N>MVsnD@ zrlYAk|8mAu4N|KV^&jq{5po|}O)GS{l6Lrm@n!zqWkl2HH+)v|3%ERemkj$|cq_9})Xl#HsrAJA6 zXWLiggLJ zIk32~Y`ep~>5(kfD+3z?LU;LQE8Fzrz3}@wSlAZL{a2Z*9-o&r7!s91f$L`2fBiU+ ze8uy#U%d9AgWLlFb03gH&V~ujIfVKG$6E|={{AAHDp(q}38^x}>kh0DLXWS=j*Xiq zRd*y=LDF1CKz{y+Nj%A3qkn&u(Wq^0EJ3_Ya!g%4#x+RCMLz9$N&Wq7dKujj9bd#V z-t>cs~w`rHvVFNfhk0rsLfr5fVVj zDOTyqDIGkAOUht$NqRJhQ2&#Vc2>&Vvmd|wy51sMB*x?o2j_r6Q^MDCE)>o_9}V2^ B4gCNB literal 51300 zcmV(rK<>Y!BPd}yplMXIs@^);l!=9>W-Z6x2pdRI_JIZsFTI*LH9@x%V)8@+v+CMQ z5Fm)$E8kFw`x~x0%kz)0266(t$!9`(I0B%V-+Ttau^!%s%)bq&m6-lYPAa*Jq`4G! z3wHB^_=#;qsVo7g3a&xFiJKSV>gIZ;UfvrN(4Wbn@s&+?eQ*h<77=#STNsuYV$JL?E+4}=OPJHQ{{KQ-Ym$im zNa9uUy|j)6Iq^>sOx*RxUXG;?L`RT7gp>_c`HfpW3?6;r#%e4(R%4mptpr$<3#*rh z8JN(vNvBsF6cvR{$HTcL`A1kE>c*FPdjm%IQg{DQMOF^xYko)dwO7i{<^sG~0z%EhUyX)~ zkxVYzq`3I0`JgqT$N2y;HxzYg{Y*ou{ge@vIGo$!hYeKEVwlLccXqLbyvtxvrWh4&*{{yR z%2Q;_{8ZGx7;uv!Lz;n*7o(x}*^{bw4+_>h7HbCqr1d#2*5CYG%oQkb3BA5>vwmLO zAsOomxAyjLY2Dv$2l(Df3NZ?V|FA)QXN3GYvN@fA`A3=8OC0!W`b9b3gDf8Ct(k~u zJN+RSb+g>ePoF&RnV(zgVTSTHQ_NEjskFGQ+~WH$3u`5O&jRb0ZNd^m9&lW!)v_QZ+_;QTEQNrJY3Ry1j8`m zqaCl*#(z|bE&8~g1}p5c;3W(1T;ST_=7bDE^?A>#O{yLggDqn6E)#)p#1aCJHP&NF zV5QUThH9l@N<4L$P4o1$kT+5w0DOpiv3 zvx39xNk_a;&L)Q^gXY_-;M6sM^k27DI>O|gJ z^<3s+6f!ZN*mln5J$D8l^bCg6qreAjm7o9ihuyZc{;6A#Ye%E4G!KL3m&IR(>GZ9p zd%RqHs!9j~^T4||i-dhHqxy`4Pnh)b#?o@E0uYc{p~$2SUN=}-jv05}IqEjdx7weI zf0w*}$7~R4GTc^W#DWXlH*hHWscJD7XXhxU&t4lu(sVqN!`n0T1c3xJw+;YV2SMpG zDdtRIPh8%WzUQq$IkiX?K!@*smp;j5RM!{2A}Zs=cU~t|EcHAJy+^TV zaOw{44NJ>Hx2dGkKE(6Ius4GZ+n{!M-QX)lIMx75!EGBQ!=@SeV5@p|^lh~4wMBYX zMqrS~y>|H707UR-YEYHq=J}U|a{9|j0xAN8zVK=#b7D}=23Tw;ev4Rd1#<&#d?<6&<40h>sYYK{i%e6@!G!{vTbBa$$$;rGnr8o}1g{}!Dy z`cQovN_s@+c#q0S1wchD)zC5A8Feu?G&rJjSrw%Fb>w5xJJR8O?Ov`sZ1Ek7o20cY zWk&v2)WWoDg_%d8J!UCc%b;~$>_@EO;C!wUs5~ZtHGOXRUc;an{Xw!eW~%G5qEPHG zLIe(k^Y~l4*KL@whUq!FCrlDMjjpWxKizi92+Z)22EAm2efzCnTg+N6l2IY%ix-b0 zPw~@00GpaV*FE_{&LzXdCy!bT7ueL_>crEUpCiBC6i3jrt(a0@?ML>GS{BhVb;?Ts z24jQ0SS>ig)zMo0>&WC_M9tk02zF?fkd@mgF* z&A#MgTGLZVFLm|*Ukg?NJOd^FGT2AJ?#k=@xc%sDcM_hxq;O+60LlrJS!Cvr5r~2B zdpWeN?O#rIKVOd!{3eZPJl_*O2)NYk&Tc1X#E`crt00oPONY_gX^jVcqk7Ha#crFWyMp1;aBPRy63fzyxLTrU~4?R>& zV(5zLW*f;7crVnXSeyeHH9Y`DqEUjyz695Z6k7{I_}N;eC1=uyoolsB*R?8&+3?MW6=CM7K5H1Fsi?~hh+DTkD7OzltjEYDFQ8d(o*z|^?U;w>- zo*_3($t_Nj(#{$WhlXz4!i^;lMnID?RV}S)9ns#a0`NGARTT^(K4xK>v>UH99fFxt z%lk?KEloE&stJ{U5H#mATsYKyotCq72hdG?g^KqNi7??~=DpPCGxWyjJLvj)k@u+N zRnui_P{^WXN?6>ta?~<5dSt;BucnaW_H{(HYMCws;3<`xj!j~?g(ZxONQ!_mi0fOsX-y=O2 zA`}FQQvEypVhQ}Ok7!4ESqhC{Tj^F?B+h+wv5)_Eq}JGC&6MbHzIT48?O= z4D9o4`(^o|LtDjO<|0B#LL$kS7)E1pJh%eKUW*_S0w zJ?!T%$Xlr*r`ha{QP=*=D^b}X0|C3{gcuP=7EK`&Gb|nLxB7ZDaGH=Zbs9HN442PC zsNg=E?gqUJgaECBW9Z5)qW}9!>#X)uk&D>CGyf z_s)v)+tt>Q4Eg=+KPrOLa;y%0W+0$zDe}Dey^ifkG~$PG)4AV4Ye03%-;iqkWp;ea z&{eyO$n7f2p%;podc9RwE%AV(iRYv(bcW4FlH9bo2B2&#YVxEvvBb4(<}6Sa(q0t? z1N9BYI9NNEk(178rT#G|9*VNE$l6OGBn=CPJv7h4GHQ*|#yqwJnYBC!(pmYnvQ1e3 z!&rCOIOCUTCtcQ)bR$eZ~DfRBIme`qv8ya0$WLXDdkl0CMyLLPi25*G{b`>tUQ(Gh3YN>T$A5&@_X(?0^o@mKy(KYL z#2zS}*ZZ8*6OBu8?Qoe3HiF^je?$*sJDdv%R!fX324HU+7r_>*gz0BBil{WUH;0u8 zb7OMoPqu?*=Y;DeAbHx@2|q0-YwD^r_NEfE5es8@E#!(Uu>2z$5_HZ=a%Zgrs8O?c z&c^Oj%Q`oi)yC8J4NF4$R7iy{-HN^sQ&*HksbEEjvLMOrUEmu~`3J*oQV3Kg55Ikw zVoMW4Dc4nke{-RsR$X?Xx}gF;&P%mTKwvgqUI;00`H`-D8ra!^BwROhtyq&0ZqivqIi<0orN*)s)BxN)_Sbe4Dv({fQyKVe!CbGEFO-C7! zW})zx?IgE~n@AghyH4wy*ip5S{n@Q4{KKd$F-c?^Uk8ut3`qH(#5 zm^D3fhy#che=+y774wsYU-nFe$Wn@2dJ!~3=hVL&Ms7+;y;MYu=D^#(UGzoY@vWt% zicipmCyKvA@h*GLFW>3rRdOh4pKD4e{6)2OCDMtzz$X49?tg5LxflalVU%M~?qa%*}EdhjtK@Xy-)=>#mHxR?J;` zXP$$+LSm5n>XGkkeypoTho&$RRt^dYw3G2cs}r-K^%W>va%v-njKykuZhJb~_zVE z#Ml0X1=lH`{qNEe%zm2Yz7TcFKCjsLym{wAb1}#3!F=PrKSA0 z-vGdQlxypf&V!^N65$Lv(OCPe*G%YzzGi7?&!4`O`^MmCChj!(0~0GZoy9}jSrl5K z!s-B!^QM6_M7}0oMdE_r|`i72#Z)jTzR*akL_tHO(4ji z7cupXU^LLn|2rydnHVNWiF1m0uWxp4*D64aPYQKAO5(@fiPv^pvrEhZ`<_&n>%&^u za4#Kmh|46}r)m;hb2j=cCZy^E=3|?$yg{XLItunX!A{r=Tn!282{t!r4@660ByYzn z$h)X5nFqTr@$0}Yj2=`xyyZhK6`ncsNi;lYX(PFEBKU4Asr7PMwlq)K4ph_FLYq$EPBOqzeG&bF@*)XCNm35f~df9Mgvo(rL zoamh9OFhu!Lz0spzh((r&RzY=LsSL;bU)Cm`bIc_{4Z> z)j4kx99!nxSiw;#kU=ZWM4%ey#`2gwE84i5*-E>$f*yC~6c4Yuke|or8geZ6Hi<8_-cYi?q$07UgS|~3b<4C7&LopMBoV)vVa>5IW98CkS$%CP zn{=a{JhvV-tE34-FgWW~il$06`A_TWHX2D)P$siSo1R$lOGWw26wUR(-kfysrr_ud zn5NL|18Hf!dVLN2!SZysg08suKUwz3aF<{IUnsPmsf?Ie(Qy~JrCNn;m~sg|rKUZy z&V!3K4Mwl_o)jLeKN>@1NsK?tUH)9ciP7f9FTN~TKl@I*^$hm}%rd!!k3#g6)xG1< z{RK(Lg3~PBl-znWsN|a>B=>x#?TSU~MrIN;-a^}MLx}k{eS+g2 zzMBFqaI`9g-WPK2Wb&+=#C;dAU=8l8TyOK|D3Wn67xV9IRa^WS{;1xX<;2MZ_v7Ti ztORQqBzIQA53dV!DLfuA8U_GbOn#}%vkFL1Aoh@p>v;IuTNE31p4QTu%7*DBY_^yt zuce0G<+g_A?^+(n#RntnS0$l#+Zo%#fZP= z#XJkcLSnGvy7cuqprI9oxvgmj6IOE8X70sf3Bg*V8WQ#8U0%p-A1YQ&W?X%K7 z_p|w(frb5F&o9?^ni{UpF!>(*(KsL9t*idLWE99P_v}>VK5Ur+JuT7?@8hvQUm;`Q1?kx`Z?~D7%<4%|F zXq&mY(l5=HNkbo9GgyXrcCmF+BD~V%#=Rh<{EO<_fC(^r9hDJVx*zo=moyOWN!;zQ zw?ToCB{I|5|G?{4%Ps7P(|{^??gUJ)MUm#sBSI9QLpU`8=wU0w{V+7_-qMS-8U&@Y zj1e~LH8xM-%l+H78|tCO^#+mG(BQ0jIpd3Pw`BRr{`VQRl$Q=82vk^wWEs>8eZ}`}h0@_9WATS3K*Sg_^>2a}5;A@I=9g!=f zt+eF&rKPe?1*Wr~@vQjelb?UO#CBrBmcpFP2WlMfb#4^m$m~`3L6>NojC#P}E)y{a zw-gIWljk~@&>(pw?uo8Zn#CLOSao;t`*|$*dO6krAgI4wh+gt}NBP9zteptaddNm{ zv2;8^!oe^8k?qHS(HNF=@ye3Q6D#`1N^s>1g{N++JGt;h8~6drUCd&f7oBi+lJZoR zPuUqI63lImA(BKQI0`;65A|V@|}XGFsFm{82MFjGiM4Xj$lfYi2$G#oV{$c)nhO- zvFuHG#fI%?k&J2UYqQ(RJ$v{$(T#~GDxm5xID)STvbt|8ud3t zH%W55nhQ8J%p9)>eGuwCkFOT(9{Fth+K;?9GO}Mciq@&b&%m+VE@TD%kn?*Kh)PFp z&E5ciEQ4kz(6x9Fau+CL`b19H`73NO6z7Em!z#5?dlDsiGgvcH?v=)IOqs}77|F<1 zno=U-uZsvzaW-gD)=+R~I1caaju9Y&O&tJSDv|4+1_ezK)w{caCJTt-)fxQU=tYc< z^Wj39Tl*@8M&WrXXKS+2s**w!=yoVPh%8k`>C1G;xvyDJa3D{6IB=L8V|8(>% zpHRAkf$E5)V08E|^(7qv@xl?zKUm8O-B$E|-vscRvF@(;Ie(xu;VJaf$7#=N!bk|W zBy!t5?A|hj`jzico68h?^*~9(J*l}*mlF7GIuByO6vPNjr+_N!+aB`7La1`^2Jvc> z9?2g6n3FuP8~S(O)uKzB8s+GyytqvaF5ZHMegqd)n}7SM5;h?tQ*jbsAU%+^*V(i{u$H7f4miglaz{JlMRl>_Jl~0h z0-1#*#O`&)X|x3?%;7WV-pJ5N{l}9R1w)_ z@m+P5-{>cEih#Y0B9*8n@BD!eZ_@)Ov@)oEY8Ei;f?_|LZi;OfZs9u>r4H#>5cu;D zCv^Rwc*numPISNa1?N_eY9KjhnFtm6WvESs%-(I-Fk5$Lx-UwR2;G#a7}X-@o#YvSmZFGIa@P-OBWJU*ry=>@6t zQp3KX=>CgyVb|hmvp4X4q5%_z!(W!j9Uhw%8{-k+FN0AqoH27fUwMj zZ=al<4|=HmEeItzjFTB-9sL7S(-eZ&mgX2Oj|${X2vS<+<=j{p|Su|(cbrvQtS@iZ|zuLEZL z4yw#@21VZghdL|Lg-+=y?r1j7pzyb}Z+5u*w-$7QWS|NaN38VN_F15rtI+VD%G5*k z9-Hg<(npn^*P*c)D?B`DJ^e3~a#MD*^qCxQIcjENobA{Yet7YFii-3Ob=TUx_6=t1 z=O40edtk?PhBQ8;y~8&RNV#DojLd{?q*Ciyf@Qtwacc_EqZuu1jm{(JPh%l%0~6_f zI>#e4I5a&=^Pf#nvyzFpOA=$EtM*L&>@xv}J1CV8ijX|ONrzT)ur{FTl6?Jc+4m}u znywJ!Hm44u_W7f&ufiPB0wkB9zyIeHoq^^EZqZH{Ubs-M*rl_7zS;V<8N4jG_&fJX zzBTS}jjj-tLcuV+Md8JPD`7RhwQ}NYcudIwD}dG~7!q1NOrc^OGV*R39fM>BJ+&E% zgwX?OKlfC>4=?XT^?2Lp%A`Y{VZ~LWWQFI;hk#eJh|-o8eSwWZpxjUb9Sjg^N5DJjua%o1fFjYZ*?XTUHZhs&gSk=ijYS zS|1?*YM?E-VZAEj%A%6vir#rGU6=O$w?-6&gS3(SLfAxtxE6H^d*F@de=c=$)jc_s zU9c^ah%XF(-h-Q?KaClAe56rVB;%|Ss(SW+$iAp(ypq4ng$ZUQZ+Mr~(>5aAGCQD) z_Eukg(cC~6%g)Hn>-L*atur(S@{U_7cIpSVd}%ZmqfwQ4xs}!RU24jcFOx)JP^_{Q z=8LD8?@dCJYgcx{zTsk zCDVQ1r5W3t+rF{y1Z58ct5}tasfRK9PzMR9pgv8FH+b^SgoXtgT_#R1#46cBxTqX6 z{Arsb5%*&Y4S_!fhaQ){G@wXyMI&Pjw8)y@19KBjt!Z3FBYeB0Q^`{50|e>$7{3G- zHyU3YW{gxNArI#cTfP5ssleZ^2l3nf5&m-udp-W-fUdcHV#3cE$DE&k0~g>q-~rd2 ze2O%CWSLpsXjP6%Bx;DorLhlIbi9G{ZYUs4G9R~x#A_ooJ2KL_G5+PFVX-aF(YK({ z9rnzV;a+1}`f5y7^=VWv9cHMVDmBwISu8s~#%;uv@2SR9)=A|U4K44R#^+++-YndA zLC%Ext1vIJMBA^wEe(uXu)CNbT?rk2p|8f6%==Ut)x{?z6^K-!#bvDE$OgXWLLdKv z$t<>RA`KGVB^lR0qLwLqNj5f%>N(of6=Rjb^n| z(g~O7ZzPks)=B+lu`{mYS>%!^0eQS;&M&%P-aNGkc0GC(&we?JMWU;@3)9Ra#&dQ5 z43Q-QJG*qNJ)eAEGO^A0emhJ*C2U`P#&xYNuqUUVCHTVc)7ZzpCAI1pHN19{9tx1* zT1Y0x!tv&}OqMF4>6dy5ObNvlnt3%(7|8z#xOmKa4RgwmD&?Ri$)h;CQc;_UG8RAz@$jsw}5FLrQzodKhWTYoL>WqQI>F36c z676vDi(PPo-EG&@`4xrm<4c?@1G;#&fN zVC3|MHrh2G5|aT#k#`ReDq8SL5GKJ`E@QOa*(7r`e-2u$70y)>y3KQHo~JU@Vh$(w z`;N;-ooro9md~*P%o>wNj6*SW`xP6=aBJok6jF)(nB?_zQhLht6-E%?;wPgtO8y81 z!VD=^w%eQyaOJyb4$7#iKPEk=kyj#8Y9RXW|5LnF>mbYM--iEbjSWDk+Kwj53!Zf;!6ih$$ zJEq}0%7Q%b7_BXzuhSr?eP3A(x*R1+K@vbIook9d8u+)#dyK1>bFby9WClhM&=RbLr{y9-h@)aAfgjpGo&mu17K}*_Z?DwPqv9*>EIhCuv@x= zfI<*~MzIU^`Zt9oBOsbt`5r*L?VkoFFH^x4x!&Jh<^Rtk+jA*NeC^7UKl zDOO^wypRVxjG!$= zN|q9J$W+{&U2T3kis^RuLl7I}7V;2iU9R8Hwyt1$R=2to*n*98i5V&9bK{F|`jz=< zL#vqnUr|w;;kLx|^O^L=F;j=WNtGr@PP1V6((0#Q9 zAw)_VG3Falyg*8Ay_0K_}6ru8)4^22&%?xuhDcxa$ zx$xladLahDxa)R;R=i@Jv(eula5-5a+g$IirdCcKqKnNLDhoY*RNPXf>ra4%%zJ}5 zEW#bMvVcG3b+iQS=zoh!&+JH5U&gcNk$lnex2fmmZ178Rtb5>*P*YcCX5#z9OhsP{ zd0=-IN+MCf{VoC-{x)wHRDv#Dr9QW|+WA~kOCbf?gw@jj% zf=r(i@BwhT}P7J4?U7{Jil;Q9ZTfw z1?g3K&61eQrj*@AH-eOp5jYx8ECQexkF$N`BCyg@DG=F0RL$k@O&O?&<>hvy;Xu;&QMJ!d-3tk8@C z!riIKEmEY4o@G8w+YJ@24qEP?q`uN5IIXXB%(^08iJGA+Jmqn7<_QI<2d^tfLjbUk zgYzH*EAD-n4?PHlZ5xk#PF{w86TKR{5+G1NFPTggW&6-o{X-$GM4&RA_>0mb+KL}X zP{t5h=>`WMw887fP|z@#2#!sD8NcFApJeyZfvP8SmD2$Bk*Dygh7PaP${Bn(1q2EKw>SEQ z>NK20dt0v(vhGJVsIQ3kb}xk}Ah`v+Vb!N?4cl-#O*vDL9a1%Y3>fLB*1B3eCT83q z5CXrf9izsUw-Ai*(>_LOglFZEsLN**wO10=7kE~ z_~y-9Io!w7+(;+ILn(SkNfU< zQmm7Z1O#_2NrQW|p<36xRRA=LMfnfmAEu6E5mK|iVwD6U3Nlw!P*0qC`OcIS?XdB& zgFfSeK7xB9dX2ZJ9q9f}Co&&@JQ%t@-81kmi6s&x|gh|^$gV(m@k-6S1nkDXjsPDCq0-2cKuSS3`6-7iX__{nFa8<(W;uNCT@TKKszu|L znk+WtRVB!)V~TuKk6C8qrBHe_k&O>qybu-zWx@Q(A^B?2Rp8eQRoM1JQh|#nMSSna zb3^VDMAL;jc0^(|4Y2?{nUj(j)>7DYan|wL(iU=jJbU)f2;5)DtBrX#4AtWGk`K$n z(@}CH=QJy1+URR0Fv~#2ChrVQQr~1XlWVihj=jPCatKykdVjxxsO ziEV#zv&=%`%BtF&-7S#%Y0t5vMhf70pc`-;;OTSNYznh<#0_FO(RA{((|*2{i-YfI zX5*}ge__rLaOm8HBn(6%??vlQWCpr1>q?4+6_T@H{KT@D&p6(S0>smMkMjLfP&PFU z9jZTv5@yGL7uqWb{5xX{Z4z4QQt~ISB1?JNRl0;yFJ z{K7Bz-*N(#p$325pGmJxZv2aiHv|Y@(`aL7mb{em@L=_Mo9iLnKY%4IGvC3A)o5RW zZ$V9Mj!~VFdjC!pyv=ZzJo`(oYU7{fK9haNHT3fd}m_xH>KaStSXm}HeTmAMgV|X@<;1eO$aI47+sYnr*3kh2aERu*x zw&8o}(6K#9<>74zeDPhaDoC)Yd5Y66G1`>WHAh%bY%OKoYlLD&pLMxz!W>({aJ{gB z=S-BsJX!;~edsThbY4qx^vZE&DBt>?J<)K=6G1AJ`pgx21H=eorKyl=2Qoz%7r{o`NYrTX_lW2mAm~qtf1>Wf zN|$E&rZN#}GmlLA8rS!@N$q9kFWphF<60kG5(7GEaKXA~ry>B@MyL(jULE8BLtmQuM< z(&kmjd<35iK;L3eP2vkf^im21zAR0pUW^E~ohnV8NnfQle-9@*P}S`hBwMAZIK&Uv zFa;d>G5q{Mc9))>Gtp~zk%g%MA!>GS-b?3-I+W;+UYv^O;+qYtI-p z;3#xG2qw7AvlyU(7MSbLgtw0m&;VaC0P{{d-Hzet?<99-Kk(`)PL#v3JQ~DU zM#VFgnwzGGPkeimy@U%M( z*%>gw<&uYTOIg^y11<&an(04oY>*!G#n7Yxqco#4gONQ95W~pn6cKOFXh)LSl|qO| z;sVMr+0F+%3_-cf7U}2ujIn4#!3S8(g!oL~-!}=ZlljNOU2~{i^8&1e8Bgs1_+*JR z#0KkWG^XJGASW3j>uUlfV^e2I4=#bq-q{66wWp+K(Yv4`Z7pw^50mlJnAJ=8BHD zdy}Z*-gPd*@tECSKJ^@BTVic=2GRk=B8kfK4=MPrlDNYa#?4HO`Qol|5D3oY>)lmc zdBXf9?ot6$fO_DP0t_RKY5#|;5a>=`N(gx*E`MJIgd6eGRb%9GA=!2gOYr)a#FAWo z#iCYz0P{9bsR@sQ=eN~Jo^RZPlrph^_>I?@G_6a1B5JD*QM)5JJ3w19#XLFR&Pa@X zJg@*HA0V2h@m{;x_Yg=e*VdjD5UEF^3X(~@SY(0wPgTbh?K2nQFkuLM+X)Dv7)Gm* zB=EgAiA_46u<>=8urDMo%3VfgV9-Vm=<|V5F6!luGY&1+4o@^^41BN4Wmz>if?fjS zjf=ysnlgbmoT`unl1>t9$QfYs*ARhZK+;&RP*Kenecvst83(^302%n&)% z`O(2FiT`|UHhSmX6B_LhHM&0YCY|h36SkrO8iSsSBD_6^V4)qh#eD@QvarAd#7|Qe zy(?4!g8J0P*eRAP^f;F8Qx+V}Nv=BT_pZ5*T;UP=>EYuFDzjx?>z)90{DrlWxQ>z}Dct=#dP?zzwbE^H*@mzeuvH% zt*fWKbH1~4aIm0oH9nn4%x!s=5Wt@Mw5_!r>^ zp17zXT5mGc;k+B>rWG(*HN5+`1^k0lTPEs#ZrQp?ioXTPF6s8qk>8G)LcFRul8<`c z>0bTLLa8)dVfsXkPBAZJ^uGVPEsKNY{Rc;nU(T!RX@vN7XSK_6v?v{s+p)COYtf{x zsC%E&cN9ppg|_=au7kp;e z9b(AspXcjbeGDpvI6ui6g`b~1OM?rki(~kg=ef{4Kh&hSMoxQ}DN+Ts#=lbbcl$^rQqK$VN0R~a#Ru$lx5aYN3x+Q;I_Bh zAjr`s3VTZw)Ncu-nEve41W^l_jVf*?`lXP@DBdFYv@@BSMR8|+WmEeVFd3`%uPF~G zF6DQ}BE!il-B1wwz3mdN&Ha>J<MzOCal$t@%|d|)W^MeMbg)AxZdN|{gDxW&3k?L$D%RkRy|D`M z1K^AvCS%sdqmZr40rUhoeEjelgINh>m%|8~*=84AOcm&c?76%!-`nXQKx${O(@}*! zBc#`m8zC`F^cOk|KHUqd{|UVH&)Yk}C!BS024ukKY4CZbjmc)+sWltwqY1_9Fw-3a z>!rI<*{ANXUXF3;w^uvK{WfMrB8B_$vvPebJ+hwKyC%khYy%;G=CP1= z{E?9n7fTBuVgHN|7A@{CM-}`&g4(uUv{8wPo@=&xait>sD>chug3VogVbHi-RGs-w zwT?# zt;YAyF@-QHI?hhghUGW(albu1XY?W>VLvs2MpER*w@V2#d6XPr>?8||cjM+=B%cN+ zC;8|W?GL@Xkv%!7mlkiy$C!V;KcXo^Z6}pN^cYF@d6d62*hh~Cu2UV-2loQpfNH7=0MU5B&awGNUF`8Z&UxS^++xdkq>-$|2D}M+d3u{dz$3wy146& z+Kb;=_;uKu?O_@#W-`Pn5n;Tt)a4U0p&XIU{)|$#n%ac5oWAMSH*=FO7qfII#TZ#J z?+sIXn;!VCFQVo(<$*Q%g{7U2iaPR)+X%M>R>NS;K)jOqUwA73LK-!j;}may#~@Wl zYXMh--Op2!<9BBK(i*f<38%w4;s8qa^GX4}SLXM#>KvLp@6(WhpQe06 zb0B5fpRGR%h?%-9eK#XnuZIeFLY3^hp|@JI_(Tb6f00~$O!rs2iX%EqSJD$~X<>^C z{makW=qB{BWp$b!l>UxOWFMg_7rnD@#+}|0Q!nysig*WG+-;TUPtjgTwD2DY(=HXH z%Irwap_Zn<6OFkYd6ZE$i2GCp)H%nyVPiYuMuxw=mXw}M>^E!xxyI~`$(NQSyqpCNe;9wu?+ai|GZG>5OaG^H@(B{n%-o!+&jcLg zf!&|vQc67587$_E?G@@g9GirxU<%7YKMg_XA|h%-=z07~$Gs&KGDM`53?CQKpYoYx z0GYqch3oSj?I%{@4#pme7MQU8^D}@eT@nqmaZx|r4SM=W*xhf|pC|2N47#X71HMhR zS9DgrTR~{+=^QPyMPT^11dM$Lcd<3|uF_IF#$+M1L?xMs5d%=0_7WFf-C6zd0oP}X z=IG*0R)skxOA^2~>;aOvkzeF zfC|dXw}qn~c|M^Fs_KC5Vadn`+>^+9v~!V@=+x`)o=@s6c4xnej2fsYoDP@W@;6ec z_{k{xWlsQnzgLUhpxY){`ur$!fJgK3B)Gnm3vf}7VQvds?c*TTK|flY;#uF%JXRZ& zqX0l?`#_4I1x-3*K+j)ya5JvO za!TYQ=Z?mVhjSZbpx)2YMAJfV(zI0jK{Y0>s=0P18r0KEBnU*zp?*;>kNZI5K26r) zN#TdeqJ)Hpzl>l6_n3T%zbhD*xoRrHmuk{Ab6Og(diYz7&r@=Ov}%85s4Yrb{!A-+ zVX$G!5pY#(jZYL62Uqfbg7lT*&jY~RCi!R2E)~JkjpR~>Ar+Lx2M=x5C1Aun;uGga z9tdEt0;A3dhU;tCMCP&cbo&6;~r{iizOv+YW65nU#s|GB$8+;e?9|V+2dji7$roW~tuuT)I;5k6pG$awlc($Q+pqcq}4q>3jhMeGx z_4||XKt-w{FM*b)VM?_jc0~)6D8xE$%BJs5@o(Ixs>%+yNKGu1|Jr(!HcI)u&%qlRW6G-vId)PiBIQMe8)L9@cP7HGb=VUeBvGq zy^JqrHHIM+Pbk|mC0E|R0^mTBE_glU2`oi>`$j$g7Gn`*Th${%m7D7qL4X7| z>jnA09#&cvh0zO`PxpKwz0NZIc3Rj|$bN;SKk3+#Rgt1QichrzokQJ8VSlj65UEi? zCjiEliRlqErqKYX$$MR^IbW6bGiWImdX(L}z=;Fka6x*n|b_`Kj+Stfa5%DBW#4yqRSy5 z^q}Y*zLdOc1DBAjTV?=Ur>?xbU5+945G%|Rix3ux4;sN=3_{`C9sL}*Goi(hae%Jd zC-6qjPfa~fT4!XzqB(CJZ zGcRE&kh;VRL`}C&(HLR1vR4dI>qO(j@Mq`?3g2I2v!7oQT{PV!uwt~R8xL*4m1;4q z5)98sC-%!fpd0(3NLF~@$3CDsQCnl%xId$+t&C-2@79~WQR<^V;2j>w6&o@YzcIqv z_|`iSTT9nmWT`UY)LOF=N=WX<-Wwr}lc4ua9P)D+Eq#2AtMR5Fx)!78zkmI>#Gw9B zed!R7SVP0|ee#Q(cI(GLVSthUBJI8d=&eQW+4s0z)7Hhx z!dmOm9qr8ZE=-;@klAbRIFK#E+pqWs4@qGxP6XN3X8d$%=J0zLtW!Y1C=ZOx%?YrY z`Bvpr>-!ID)`gj}s7OROoUN~aPh?x=jERYE>BNt{Ck~&4K>d2qmq-YL8NBd%bmBxr z;sLiyQ`P?&rwSN@c|0x{+78DVACbfBHA?=-JjzJ;TN_}Qs8Fa=pIEuxwq*PL36@c} zW>1%dD_k3RD1+M8J$Wb}vV^Pu1zn`pS`rf1U8?5-EcWvS_qV}8Ru&}YntYvzLE9xw zSR(^ptiq;%K5JB4{xW-*`vd- zE7qg}+R$RJPRzUJf;r=3n&w~h{qa(ez23<;j{6l@jyCJ9aZlFs&TdRDLIS={uRtHI z3m2Dwa1xJ+hb@?d9lb;gP05d%<{f^X3FdESP4P4;^?`zT$@C#+f;UNEI<La8*V*5_*quK649_A*1tc(?XR>E2ayJPYN*#FTu@I>#|k$%{c5{@#wFmRs@WG-w$(2#n?E zr^X!3Cs0XOB&PjRDmDmjY%;E0B9C}XtR=yo05L$$zvz-k%*kIDNytz`%4;~>(8~3a z>hfJ${0Aco$LXeVqlgP;F7?zj1#Nne;Sla0zf~f)RgoNu`zaUI{4DEL=S(HFg7%*W zp8Wg$Qs546u10ScrG7s51~Wz3xUlFVd1wr)8t#`~1<`_5wHJ2|dV0|yG%&ssDlfl? z8k%{_dnLyKye7>Z-=3qv-eh->a%$TkYYXsPoy1dFDmA|oeyFn`ZBSf;~;ImU#i&@%u6^wGa*nr`0QZAVc?qV-)FnR+L*nUpo4m~` zb@3zMOZWNjoL3gH!@I6`TS*)8BgS$Z@+g0s3gbZafh#ygk$t3cj1(#wBiNi4c>0Fg zN3d11ySK$ly4SKb(4u@hNX@O5vUiK3kUxUYS0 zixF-6l#C6z(3dARu21BS-OTSd0jeFV!+r2Cnb}A&B{z~%h%?oTv6^>B>7rBF!Mg^{ zj26a0khxp4cHJggJouqUD=Ca#d4n6*J{PjtHbbEaO^5jx(YVTJuQC&m4{U+=2k+|( z>44<4hwcTOuI-xVl|_Cft-<`?OfBzXIUPZN>cVAIr^yszaH z$(ifDrk+d`D8k4c^#P1PYbUia&Mbdg5&SGj=?8b71cPv;FCTDBj}WC-vYzp)?37_j z5haAvqr$`ty`;>HvFGD`i=s&TX56P~`(wp$9A)8r6tpK|622Zhj4V}{n;!8hB#S4% zEU8%q2PwY+bd!t6;0w;N?zBKXnCl72Mp$-e;Ew@+xLTgYldz^gwPhv%i~76J@yRv) z9y{fbPSVE3h!NePy{4pR=USflXPEhpTM_@;Uv=-1ku zGh1Djrd_zx`1N1FQ(zEhCTfaJ7!R^`aRbo7c0UNPg58aG7&u3%fs6QNbfnjcTK>l^ zD;MKfhFN)&`BUTo&N4b{5Xs-LpCXO_?ljTioR-V-!>iW>LMP4c3!r%fwV(qjkb2cz z7#XUU7BZJeGfoq0{zEf|bx0wBv8hT-k#{{$cP1i)Y;k^t0F-}R60*0GkvHHoKaE}t z;X}^*McA-rdKW}kRo4v$1PK(23=xer=f1YMOyAr^;XNxvmXpi`V0|n&P5(R2>|uXW zid~GbLf3XF0nA@Yu^n=AAI|?2TGB-6P1Ap_P{8w+*)Q905@(1h^*cWJxX+6_yZy#+p`9B zk(h|=ZfI_?cV|M(dHi_Dq3$_toYLFF2F2Kx;6Ou(bO!FYJC}hOJh5dSPa82(T6tx~ zn=LS1&I3~-$I(57aa517^w03z^e!)&Hy@>{6Qz%ZM>h#G5O>*q(p>CM(Mf(AU$>V5NfZm9xb*3I%Ag3aA$)SdLz` zh^^QLLkMI!x^vNq3kwhgV5uqrd@Bu>ad0w(LN0gl$=rk~Kfn!dlM`A=kt2?Pcr%do zC%e#H|9%T-O92$$P5biwDB4=rJWR4Qc(~TFn^hmZ&?A-fYsnk5^bm8l?y?j2YUrW{ zG~b@fSK9}zNtJSQi&lPxX}OL1)y)P)hrfmffI(;z4qnGHJc&6pr*wJ>Knzlisx=VG z6r2+5ZFgoLJxBw`lPkBxB6$*7;k!M;cgKb3Y{ne}M>d_5LuH`jCRHv)OefkEp0f+Y zpgTFmE>Q|L!2~U>e0RWN>W&LI$1mp9Wd38esZ8&%Td+abE|ordFC0%A=+&TpIQ{<5jAViO^ISPJhNygqN3;08=+_ zz`Xz1_4F1^k#K8cB$; z6%>moxDPPE`64fqZI-=~UNj^EAbX0^U1!;duB(|g|2QSL*&pdG4Ye1^{ToMhm z9}>3GmTv5kU_*G2tdtm1=)NzK`#BBLqz4%sfgXf-dj_8D~m6||i$T#cW0$l2sBj7wnZGqN-LhOF#3W!gmH${}6-JifNQREU>i z9U_)nrom#Xc59+1S6v;o$1<4~nVg^Ni8avQ6zr70_1Urr7VH&0l*+kIA`~Re?L}r_ zT9*EmdQ^>}3S8eyeQ(;rVQC@KiHyTO;tFZoQ6nfA$5q5g5S~v67aWR zss@DE5b@-?ZK6?~eX9K9G#eRPs`vs7i6F>QF-}AbzGfWI@`g}HHCQSyz=<0nXXQ#w>t}Y`Zow9cKHw#Sb zhiVaK)KiXoa6~DR6t`GfDW5_q5me69hkbBYjFd_KzH;#<7{<-)cFU-235AhOxtl<; zCG(ICqw{W!6dvy;te;d`-SyEXt}k!0>Qm|X9Ql@P5f(3O1E^P#+vIQS)iuIDVZsGA z4x$)Lr>3IA@6R_ul~^TkBeP%c)hNU96IydD@wCF19Uh)+=WVolvKzwO_GKHA0#79( z$g-_=6%h!fYyomN^+>xr?jm}GL@-DIaS)UJL0_AA_`QdPRO58H;XF}dW!<EHq~)QR&T`2xSG~c&Wp&!E%T>^MsYy%39&+;`p5j>s)A<-OatdJn1+N4a&g=QU7ZmM&-uGoEr`p0{EYs^|?ozxMLhyXa zugCETs)FGKm+BVi`&nKluEV1EQ8QZ=Gs}GKY5Nd|YJ?;!82QfRDRHnCkO^JXyWo<0 zAu?YE<{qHW5A1=74@mM-#K^k!Q2smcgat;w)47(C%Pv*;C`?7^d>IC7|7vmJ$V`|G z^%xzYWh`qQ&vN>Qmu|%rLE%tys_bYI_Vgr!O%}={fM}^xwbYX{$O;y^f`K| z6yy6!SZXUX55h0G(Rbad4&CJTYTr}i<0;jctUV^I_h2^ESyhih$Sn_Y*h}D0V4irW z{GNBpu@DVX3i!&4QX!ibEAwmf(MH2Neew%Xmd)M&HSyetl`^pM1`uTy1UEgYpS+cE z{R)4`Lt}KmTu;(}b%kPe8Nmz9dPV32|CEI({(2)JV3Un91SOX1&ClU^z7k5`Y_73k ztUM*xO5Ea-K?=W)4qRamAUH2aUq!g{F$)iLGu??EGA>jcws%3e-hblvNR_oAnmzkIv_cnGG7BP}!t}Xb?%n}fimZqcD!h<= zd*C7skpJPMly0)S9fy?&HEYa|Gv3rkNokUvV{AsO3I|xalA-`L$@d7WqO18?s#dkD zJeTHanz|pR=$h-1u|}z&?Q}g#{!G?&wu1ZiCK}XI?{x8t(B7PDkL#Bl{WQ zNG#0tMxny`ufDR$H8EZo9e#!U#j{8F!bUg6e;Fn<7m8QMl#X1kPYTQ3CFZdE1Rh$T zq6j&8XZJS0)ePl;bB`xf*{EB#QA3{MvF7d6!?2j0$QJ&huvk^=ZV2wIUS$T9&$+@W zmqcSU8btUn{IY>&&8QA|l4TKz-Uy}>eanDF>TEcb!nJ08JG7$^V6Xfr`~Tfs2cTZ+ zUClp4P(^W8ARf{zi(4jn&ex1!HU6>n#4-Pqn;;u-W&Kt3z9&yx2zV@_W9trOkY=71b2LTTu;Zo+8hmetrx6Khl%~O4-zjEt*9aL;1=h#KRHhuQmJAT(se~YA zn$6XsplpQ9RRy;EOdgrhTRA-t`WZh0z5o%YTmC-pKn1C=uJtDl)>Vj+NWe={&sqk6 zvnHirY3LdQ0<`t#hqU(#hHl<*UR%_5VA)~ydsPjz3Voyzm-?VswdZuD8;zhikPdbH zY7!^deWviaq73hb%%L$mL_E!L)DMWs>sb5V#G!tccND%5lhtxHcKv5+HOid>@b!!^ zCsmtoD(IXBuuSq3v59PN9JN5$L#FvzlO*SV4ISf3<-iyp={P=5Pu%S=E~wi^)4+tQ zJMumd%7u-x{bxB%Ds0(@Z6+J&q9Ipmc=z-p0vxn!k#Utm_n#-Upi#YcjI#x*NE%?P z@~80jMvO2|mq$|2!}M=8oD|{1A4W1<)D_Rg7;Kn83pi0V{=yxHQ1Pnrb{4Ay=g#Bs zan5m(1%akgi;HD#@}Y9PzhZ0UIan86TsR;%w?Tz|;yu!lL$#igD#xk6bC=g-3M(f4 zr&ko@ajER)(0BO%m*peq?*RlVuPemk6bRO;EL=VI+AG+r*~xx7M}!gzj${8_*YI>( zH$15bg~<@lm6%pY2OURb=5nSQHo#@uQ zTSqhB{_`lqMa**{h?8+;XKTUkuPl<#<&@TW(!_2@7Nq_c*wd-%gu6^7Y zM40>p(pwg=46DcaespowQyVDcFd*ZvuUECV+m@F7@_yWj)_D0~Skf(pO zU72dTfOqR_l(gi}$5n{jeqBvhDVvBvYkc&r;7R+EtZV!GVp;y66I70DH_@&7+^Od6 zpKd%K?42|f8=tZKZ;!C+#exTS>fO|F_McWSAuvoxmf2L)duX>1b(N$-@lcPxHKjH7 zycxMA`dJb7hkS58C$FA&JVLK2ar@7oF#6nC7voj=o=42({+NzEw`iWdRq)UA|1p-9 z<-7U_6ZZ$oaK+3#UTu&3^?i4l=gB~RgKefkc98}820y*y=FNx)uXs)-IO{Zbr*X-F z6Kp_kWGBrHo`VkL8ensrJg9K2!GYfT&E_m|o^G$jJF6IJRLguD-;i?jVCZs^^^iMu zLS8(>D)#}@l=j6TUmyuL_Kfoic1zSEi_%a11u>Ac-a_AbOD{~910KF?ObzD&S4+(#B~W%XzJZlrZ( zMGBpL%%**tCk&ak;K5)HgBs?VC*(AARYFs6yusM^14fq8Wf*K~ze#^=hE{O{G zxM%4pDgY(qI^mu@Nr(28s?HPAg0kGnd%yh~fKiix#SRaI{)`XjDZ((-^mpUw&wsn4yzsN1Ui{O5jBq%}ZjmvU zeAMo;^FKoJfi%=kj`|^9YKQW@hxua(RnWxd*e9`a63Cd3j-|($>~-73Mmf2U3?4vN zyT&o}d^*8Md3}L(o|VTSaw1;wPVFy$Y&!~t?iYj<*oJ46Q?V_PN6q3f49T1r-Eo#> zUZRztHhcz7xoYf&%js&e`)VTvHc0}8sxbE3xzeY0fm}$@r=91ReO6V&YbU83%vSNt z{`%w;(o`~2IS|(*0MPEW#fev38vS#H;Ea8TY{hk4qrfW5oL+Gd07+tF8tMkBB_}B; zFY(_L(K!L^l#=>^mn&&?#6C@)*x!}|-*eujd1^U7>KgA$NH)kob<8dabvV%PGKrew z!usjNW*<+EX(hBZ`KfvoOkXPQ*;hB}nZpwSMfHw4xp7n;e$3tS5Cn~K%7;q1gh!2( zWuBZ+HTu$*;{&fK8tws+KMta(@`r1m;dt#5XA_Xd@T9F+b1T4Ing<(#eLHmvKA^a(=6^M63qgl211LBfhEf*jk0`JYTh-onzk!rTepsj%-E#9C ztXYx&;m@Xn%SuAy%b83+kLm&F|DHgNUT=wGg9c62$6vyz4Rm;^Ntm@Li+)nC?E3zl znb4ILX+~vN=e0#@N*#rWVA=;rnaFVN^;qcv!rc{Svnk2|LakCPxD_6{YF}gVq_zKu zD56U|)v$LlD1Tb--@!Q$aqYKzL-1?98%D2B?2b!wk!(R2`JS^R<2h_S)rK7Nv_h*TC)nT8j5ZYuj z$O%a3{58a&S33 zdyS#;H)&j9keM{KbNwQy)eHQZ_XY|Cd9LN~yY?Glt0FpFS!kf@y>-5XB~FR=Ev1jA z(w71?T)Bo)0b*)p+X+J5H=%nuU&#hCCC3isIEqSLQhJjUll6@5iMlgV=?hI9z2oI|qW-rgB(7sZ-z!l9c(&G%d%F_70ktV0MA8jo zna_IxOSYH1$hAps#wrK&J81gGF5Sw;^U{N-&DKrfg`^_`PpxL<#kjf0+t>G6*Q&*_ z)XknEdcg6KK~TgY=)zZw#Sz<+fu9??pyg)BBqMS}wvSQM5pJ089WJ4}g@O=vJu=3WrzE1nD=(a|NRav!$A>jr!F+3QqqnZRXxt^RP6x zO8f(vG%+Rb+kz$*=STeGBWs9Oo_$m8_uTX!4RJIu+nXE{%k98OzA!gmL0RJVCE-sCJ;wi@$;3tpW@iz4&% zDFLq4;Bx;t^2+^El9Jt7B{>2f1c}RzdKm>6ceIQGztBK3Nta=<@Kn&A$*5+lKF*Vw zIH|~0;pItU8X(7>PcQ-+*n~)KMT=X!?Bm;DgA>6XgE?lA$+d!~ac%-aa$!5w5s4|G z&e}(2KB7P9of>jS#y7uCeeol{|AH9ok~P#*g#!be;qJuqn+0d_@9fxs-d?!+K2h;9 zz^o1kKJ@4Ntry%KZNq+!8AWkb?eu!63CV9KXfiDe{qD>N%1?zm-@fXHfkq~gwc&@o zl(tjm&b{9b4|nDkP%akstzk9WGz)A6ZG`WRS5Z8lK#m2Y<>_m?g4OQ^oW}Z zEcLJ@6cc}cqSrzip~CS<^u+)Y;YGG;Yb(wGQ$*QOF_hxgp(4svx$~cn&s^Wdq$)m?muCu6f{~#NWxD39x>Ki znHE+!9pY2Q&ipui#uPo$GjpCxEqgNH0eFwlT@fdb z;=V6Vmy-byCDEims@<*m>l%mgZ!S_ise;(teK8USE*aq(!MM_c9y znt;`gUXWgy-1Fr%=%d}L7J6CIkNjih$0;-N$98E7=H)Ma_Q>;OcXIwXNTB-BRZuOp zycNEm>(^n?z|1RZfP;v0ziT;*)Fr(+LFuKgz8iHqnOzEg+xvnu$^qn?qGQK;OxPj% z#y$6h7r7vQ%acJ9*AH2Un;)@0p1f;}`{A;lwJMiaTRhJpl za4L8f?G676`?3)f%~-oA7CJ{?wFexdyPD233QU`1Iq?f9%36tOVh)Tf%b+?)n&cjS z#XivdvAO`VxJ~Fcq=3{Pw|8GI?#C0dIGagfn$EDTUO{wTJ_qY`O)?=TSOIY_LH1l%gj_fY(jyV=*Ya ztEj=*XI~dwAYM=e=71d}tGQ@Zforu-#**w%`xReWN3w7=*L5QtN)R}kZhLJw5{rc7 z#G+Q({td1TYg9Iq0Z6CS)aW775%%)-sV2g`y;?31i;%p|KT&@D{>0;@AU#RO*yOvI zK?eWeDOI1pWwFRMCu51E!UY=kEEv{_bB4xS5;CZanTFqA4_Fy55{uhpZ;6JRT?Ws|S<#(4;@2xAz_6sK@bZ!#PeuNN%5#${upMFDG^ z&mkX)c^~@E%9@WarP$?Ej+H31Cq-WF`huIzSsQNpIy~A1N+(m3`mai+;<6&D*4E$2 z+a9aq{BB_R(Wx8}6yXX*uj>N*#R@$(agdSb6GL zdqd#JaC~7`#ot?>kmQ0U^4R{o8ye*Czcgu}$(kLTp4pkiX9GH<)$F1Wr+Vtdw<)B)J zuWHORC8zmO^@>*R zc}$S|Jy^*+i>@%R`}fv{#&3mM&!;DMuW&G!NGR0g+JT9N3w0Ca5;b_4#Bq9-EU)T1 zx$#?&zA4T9fyB{Jgj;@6$aI6I-VNPnC=Rtiv_lAP_7ycU0LNZgtQe#GA2h zDsyYi{Vv{Dx&;4jtp;u+JuD0@MckqeqkswvT8tWgO+cL=|HnjDf5o~MONd`0O^`3eLr77W)E|=+-&WbAp&E5drX$AT~Uw^TegFi9eKI>iB6rxvStLYLraA1<-)s3@H|&zZGv2Z>UW-aE=oXvo;fe!+4nsdwLxe z;fY+Xx>2w(2Mfp&Jwh-+psyz}o>y1G)+bl{P5qOYL>eW1@un6Aumwc%(bPmnRj8G- zb8jqeahO>TW&5u;2c=-z0Oh)GrTpSbR}Q0C1nrW*vyKI0m~`TYnVL5fHLzg7z}N#I zsY3_J%#*ayU}wig=3C9b2X4^$@by3)@pSwSdpD!lG_-8q5@roL;kEr zqu4XRaIK~1(Zw7N;NsKDt|T{a#jI!$sa;cls%FC*NvrF)%0a!Dmb`Ak?@hoXN*Ge- z6N}PITEh)v);m8B8I#g7(WT(7LhY}69<=GJ9py*Ps@z3gl|E0ydnQ^ycVyIT|FH;= zenqXkPK@kw^=q#tB!8=?$D8BT+5$;lDx0;|yKW}B1}iyfOX|s@;T2&zSWOjblExe= z$O;9*9$cPE!C49k!&EjE(b=veY-=FBe1>kD z6LK{>*R{GWbtB!fpPJ<`SzF)3h0(r9Ai}=s5}ba4nv{m00C6?MS?~SB;&w!qi>BWp zaGH3RPuJ8lyjqs+S#<2$gQ!G#K9852FR1EYOs z5!pNb z8S_4j3(F9Qx%(5v0#YUtcbs{0AAEv^Z{-ili>m#?;phEzs4p3zKa$ZmF{EX)VLcbo z6kj9!s(!wqr78IBk7)%VCmaQl-v#J2jhFM)>MY9;y+8LQ@pCDco|)_o?1o3F*gqzC zp=LP<{P6J50jxngmU%ht%{M0Upgufgh!H_m6#a#*^^P4QY69r{J;;i|(Ksj+e;qbX zvsalsBF^2nY*E7HBZe7)tV30NufV>uEM=w()=DJ4!Z$=9OIJ1>qQvKAORcW!K2=q5 zk;cJ-Rcg>1PK&bwe{;-;^sBlgV0&>P*n4MR@oICX2)`L(GS6{>2Y*&;;%+ji_`Fql zNV4{3$AOBQNQg%W+l|6#BBDM#p6iqrnSH%RacOEWp6%DVS#j}tL9|?BrrO;%cHe~M z7Q!|=iAUda;15=tmVx&7S!{{V{8X_RHl9wjz0FbQ_IX$1;ETYa(Hg0Fnx1{t{36b` z=yXmJdKlUh>A&tvmbCRnt&w|a9nq0yQqQ9ax#4}nIGDP`p9w;TyjwN3^|>TzsA?s$ zZP510XJ*cO^3XVp)j ztyy1_@C%v%tzIr&v=@vh_m!u_X+9(@nqJr?^m(&TM(98eN1^5TGzU7`g$ORHgzb&&PB&v^ws#!`AZMZU2`5RGmz`^Kp zmO8CdBFpQg*UqhW^P-8=`lWf%N*L;oQe%oovMXk#OHQ1^f3^XMNbmib1%vNlc$>O~ z$-2xJyB!rlM8T!*(28gzG}a;X5rx~ZxdpB1Lc-O@(wjXLo39Iu2EZAoJag+uSVFg< zWQM82PP<^Yg6!tGAmiN)3|XD4*Bm2c)!4lVrFTf~6RnFPM>c)HBeAL8KLQI_{>g`0 z#9UKZZ8>^R?m|^AuxFeBl+#UaBl`pk&r{B2jQsBytyD+LNnmuY-L1Iu;I-RtbIEm_ zCASmS#!$4^=}?|QZ2~%l?<~dEn5pEqAq>!)*C)$L4>nMm0Seprr^Z!}A zDJgCI$LZ*Jf^4K}L|vG)G^tfM=V$*;VZ8m6Hz$@r0W%F7as}NyW5Y<)4phxbKoFD; zv)>*jfNxE#ZCr-H5Y+GyuI;5$(~B4f8Hn>1(ztNlAK7gV#-)w4gyo`>2ojqTF~lPh zA+MHX6G0!|AM=>IW{A`6Kc{*O4SkhB3FzNcc*?%}a>VRhbVh@KL9@L>j1pAz$EI|- z{y?z!H6zOeXqFLlYzr;G7O2{Ssr8qC2U--g_qCb)H#?{dbVfTrhAEQ!;{pWxf38oO zbAM@(8Oe%u)wgpHTRj|eJw=t>YXz|jpXktNCYn&#YsTGl*?xGPQ~tw7(T2Y=W=X-s z>zckSGgDL;5`Pyj>YM_T;i7|S;W*1{yjcQwwfStHJ`(b5j5DFRsC_>CzyjH+)MLDL zq?qWx*dHCU2A#V8gK^HFwPuxuibSloVR1CWAso=z+yqA*wT4CIEAjN&qjDPU$JavP zVQ!JhLjAV)%yU>T|!HM|160UCZ(kqt~?DSqF%X&l6H1J+qEjz0eVcI zHM?hHzxW^zuy;ErqWr;YK|L5yjKr6JQV>`5DEwp}2LvN)tpapKTlf_v8qvue6;v`jqEPfJR>SGgY@h}3D$#$aR~TovaT#=VtAB8A4gH0L zbshw21`MJ?a8CM)GFFfeI2yzMPj3|6ao_-rc;HaiWzeDJT?ci;uSh6cB1780zR2H$ zdJn=QjR=E!&)k;(V`tLWDfhCzJ`qjOnKkpB=jr$Ms;Fi_bBE2WGGo;aoe$O+qLS!1 zcrJ<^0@bp7gQWArg$vZw55iVB8R7N=(aNMkuEU?Iv13kOf$U1`kz2fOs2sH~MwW=wk-n(Ob~bVHk*b#@aTh3)0L(=XvB`*a z7e4~=A@rmV)Gn`^k!-@x)!$^k;k*_>K@jD`CGO{Y0MPmb=lWcNLm!EMpGbV z>Zx*#x1mV|KRK*TErEW~`a8MrCjRhy*qq4GVfkn6e;x=HWF;nhbFgPZ^UqpXx1=;H zw39mtf~DE!%A;Oc_Ez}y_x{$fjz_zC=GcEC{2Kyh6ksk}tPT>+LjyvFKW$wd!!6I3 zp73KFNqwiNS1P-AuDsJL%G9#*n1iYr;o|%l7k{703R+Xj(Q>K=vwXccIdxG@>epei zr0AI}M{&-Sg#~*^qnqXxsZmdn!Dj2(WQ_TBr)hiuiboc1c$?7Imqtbs&F!e7jBvxhnJ0$vL|rg5 zCvQhVd9zQeMW>BNz2T#e9A!;}({+tvi~AU5G=X0pSV84Y38%}Cz+hqo*Q_lbBHD;@8Us+J=76E^CVKu1);KMI zj2K5{=~XC8oa}BYmY(48vIFcz9&u%cRRR~CjpnF6JL<;)Y8sV0I5@T&u(}iBN-X!D z+UFYrE=T2zbk8L|leqAd2)Or$obPQ9r#|ZYJi?jxeag$c&&=X6E8pud=GBo@uZ)!! zu@!{~MLu#dOS#=^uRy~%dYY+qwqc3-2uC60sv2#RX&7}@gZgTS)WspP;Y%XfC#-%1 z=a?iDw=;0ybJw$b1RM=iT5zDw481*Si=m?Kw1KXVr@q>v$10n%b)J;j_@d|drVvFt^lCe|gSbvbZ2zlnGI*RPNK3>rOR+-BYDaVo zBnlkJ7*1fycT(_9**B|OK19~IM*)k~s#jQKYj4dPw&>*w%rBtDgz-ps%|s6&*PYg7 zR4*Hi(!(n4M^SY#>oTSNkSP#DVm*!ph9&{{2Y;LvEf5}P?X%VQPH-V4aHqUf9h??| zys|-X8y(1cRLj?bcDv7c7xntS8*qt#7ej%}o1yV&%?blX#=OVSN+my&HdO4|pOe!r zcmuj-zpm@VF0sBJf5Ou&NFp?pTu*Q!>OzIf4h`}Gc)7@9RHqixb4uHOVD~#d>w*~Z z;8G2UsnOaNC?jcfKA^9ZM$Z|6&CP^hSE&9piOT_ug@>(ARE5g*jy!}mdVbIM--#?8 zG%P`nIeBj)h#Rovmj41_NjFag;&E2zWLCww9|dR-t9uqY1o*aVjNKU#WFjlBMps{1 zPNKw>C!K}-Z54B_1sQ}wK~)^MVcAr+%F4?oY2RG9FIIi_iO6#Bxks3$KnHM#2S3%S zz)P!hGMvcWY_c4;0>f!Q$L0<0#TdHixD3PSyYjH+-LJ0j+y@G+5Wu!qDO#*FG#vKF zw?S(Tmj@ZIBNg+7sLv zt~o7qe^8q)d|RW65#U~{ERALQSfrYa3|XfIlNkE~Z7!?+O`|(mTb^lFY8vRID)zM_ zJD$vHx31=3oh3Mm<`(-}JBTayC|gc9_ICbZMHxQn^c1Ys5!gZY%x{|S(nB;|E>syi z(LKb8=o1;5)F&Fkt^fChhjbmkc-D6y>P}>l`lCbA{OlkP^(@{SY*0Kea)%_73nlvRejBHil zG1d~lr^VF#$c@8N95dnjjXL;N^R7D(RfJz^_|aA@8H?q90e?FB`g;p{B5}RDs+;2# zc;a|;mIqQ8k^%c0UX#Ni9X4E(Tp(y!Q5L+($FtAOqNy=HO|jN7AP`i?QKM&duET>o z+c--XG4FwgXllurjF=W_hm#sksfaH=`_x0&rgpSU@Vi9TOWx_Ay>IP&WLaFi)pzoT(nM(zUW;UWsJu2s_HD3nh8h-mkSXM+V2Z4Y)m0 z3YMXla(t%X0FB09^t21d$@61+5ZEej>rR~xzvA#6*T?WRXcH+}YIY7;SjXa83&5yD zaZ_LCPU|S3o4p3bro3)C2jE60@tz6gnA%*Ks(!`s1k>NtiO?QcY!>1Uurz|yDb(uM z?K~q>nW^AJSEgc`d)1E;=k-M%T%$_)gzV#Tr|zIYYsrEqtZPW)0@Ry1rF^OTJ%sbf zB`A}`LIS60g;isS$iC90b58}MBc`B@#Mcfk)zjR`j1zZtPHVa0cCBwF^@Hqf2u44Y z?sOy_a)(~m90QUzwF5L$WPb8Xxg_If+n9AjjpD5mbTs!a006k`3%YR)00^+sFSlvcpdIt*n4kC) zixuC}6I@8Okj}mefP3W!mm*&!rK>}YGX!|`uA`0*TA!J7jWxqBwi4$C6yW_aikoVX z78?potr8Qdz&_`Eh7JmL17++>DEp&g!fG3>G(HAe5t4p{5zBJq{DW^fMA6+sxcOKR zjbRr|tG+rPT|ch!b6e=tzj(0Kwhj%`~(^GPz!|{eHvCE z68n@OX|YE=RdXUfc+h(Gm?-(FKil$~RDd@YJ@w?|eWDyUDf1t6pb_1w7NZa#3-*a{ zU9vf>Qk~Vqdx69T!cD+?ozbvPOE25ImeY$Pl>QGNM@-#$x8vUVy}#0&+Fm9+O^Y@x z+eD1oBbo6xC1MG=0Cz;rt?wKv6j3${C(+#CH^I+8kI6r*{`Ito2&BT;vlh`fYi6>_ ziwb^~Xv{N{NNBcTpX`7FrC#S0_Rmz{dp@1&M^p?xW^ow3qqG;;7=%a#`-B_Dfp(3S z`Z^T@6+ui=%JSsysDl>MS{nFXc!)L=6aFSs5822@NGh!d#m@r|gQDV`f_Z-gCOt7G z;lFE}#~zgb{o8BK`BvF0jV~Z|<04+ZEAi1C-^r#-^PMZaCp1!Cb01hOJg#W)dD%+AvR7T+E7K}3HnnRF7eAAonW z+Nm%mPT?_A6&#dJzo9Ey9$>k~DUyDImcrHAG+w{~owHdfL1vWHA6Pm=XlzEw8<2&% zlkoq?dQ?KClm}_rEJ2u-aNo5kmxdf8=yLATb1>~T#&8C^;0+%1O{O~K=4NGZ^=kuY zNUp>)7QjdhY4C>!X581D0mtoGx;&m%2r#{QxXHYdT)0fQ9}6P|%kiZbd51K65hCy{H@1SD+zxLpB=e0=5{fMk!P z6htgzL+dl&NN{L-RFUc zI-Ty^XgiXAM{LHq{Fq<5lQ5g{=`8Mx@g|Z)Y9o9B)Od3(TWkM&-?x2>@dHtX3yDpT zgKUvLG*L>_VjNTV3C!4#)h&Q0<2yp2?_SkI~MiY3zmX%cU%ev~q;Csxc|}W&)P!pLs#4Kq|Q5ES0e7 zMa~V+2xstH;TZkDSpoylOET3QkHJKs`l4E;QhdM+{|3EwQE&0gWLF-=BH_Ov(jU@(;1^dXH0IjK4SXTq%An5 z^`FRR3=)B1l~!7npjAmpA%2gRA)5WkC;H*wA@*dE>`*}(|D=t1M-?%W1Tzr?6*q+f$~oU+fUpJElvjZlL^wdVIcY^KFmoVX=w&K=1wB?mv&I$rO!u1HtQCKJIQq zLxe1LURW5i9lTXN>@q#gHFqiIWS_v5uZoBMRqwS`Iy<@HSf`&Vj9yhI&sE9dO2bw! z+|=r3N>Xni()1U85VN4oD32+sDQ`HQhCeurxEu_DAYFpSNgxjY-~1}w{=dLXWA(&H zrJ=JObp-(8K?dEMhX3lJJGiP`wFoV-rthk*wFn2mjTH0BhcG!Ww}5e#68R2uP9V&a zFnaz!B%{gLBNhK5b{TF@(a223m#n8{ZAL`%#~`g7cwF2iZ;lo%{M;{O_)&Q@?9t&U zE+{d_sUc~-IK~o&$XK-W znRk}^q3VEQYHh!Ys_{A{{aZQzmU-g-3g>wwhLrfc7eg_{-Xck_z@CLo_f4qCAGnK? z{=6?b89E^-VztEUp?}Sk?r7L1U>anuhI1g+c2Iq?il_02Ch*_Xkt|vG6P*4b#je83 zmmn|N)ojGnz}3Tz2lfuk^|Q@H2Yd|gI4U0uXGwOpLpj*sO}5?l_n9sXxqO85q9tyDfdAHu;TfcN)Iek%xYY z$wYPgZy^cB+aX&6B1;bNL%XRcT^DXF31VW}BuZ6wUS3q~#mk! zG0Rh40Ad98_h>`Dpkf;AFh2_d5jAJfrV12gnWp-zM0;}5YYk|Dk>|BbivE# zMNRKh@_#2Y4cCB&1pSkUZa^R zk!}Dr#{?EZgC0rcAV4);#6sbohf?Tkc)~H;AOQil^X2ZsYY+p@F#^^AEiC_fX-oo_ zJsiJ!w&+P0sbwuxOlB-ex)I)>bh5GF@hCzKQ+$tK;BfQ3bQYgJH-4cNfKzAH`B1Fp zh(DNQQNB1upi#Gc2f|yc(|IH_#Wwuu>RDZNOOd1w)s?T1l>&-K2T7onFVgpivc@Qy_yBD~J?F^7 zfG1x~+sb;}Y?lXq@MrIw!AM!5U;39~UKu2Ii#P?pbHfZ(7mu>47?c^5r^JqN?P5Xp zVg(2qk=vNHiH?(ZV`@ZSPYJ}%O^Ug<9Eda1kS?l7QqUvL+WK~C_tHi_r z(mqth)OtzB+6N>9+J4>^4#vDiVb%ztC0Ik$N&<;zTt*t$z$w^jq+C80@J0u36JfN; z_zjxCXx8Q5`?Bvsd3l+*bzazpsEGQcw-=U+=%gJk2^J3$Bp^At%v2&3F>cyNuw_Y^ z?HvqktCFD?dL`@D4r>P2S<$xz=W*mCkiqI;^;C~+h@Hm~sbb33l+4I!8lRy>Ax#2gP4qL1l?ZVqth-}$-!i=A8;O^2jwlCfzqphL&BluqQ=VuwAJvL*bz(2Xq8 zgKC{+SJtrw^W!iNv~%l%&o^m8TlP}1p1q#gCLLPt-$QXhSj=>9mp zu)S_|eHEw=1HeUZGQXA^dd&2rxn1v*72>n)Q;&RBKc9Fsg=F-2!6XWN@jqFPiNnbm z2~)dI=qk?2T|XY9UiWSv!2ltarNj{Hn7A`UYkmdW*S;-F5ve4?$3if*WB3eT)b`}h z-*y!xW`&}W;bm9V8Ai2wwj)8s8H`xsy^nhMk)NVIJF7IHQ z{|CQT{B6cZ7E&BdX}IAd+4+P)^p5A%%>yl}BI|gEv*JKn`nPdvlC!Sk@i$mhzHditj_h8^dZ(83^d8VB? zN&bhDF0@~>o$tHFWags}Sl>y4cdzM5?UXS(oW>RnafUU$Dpg0b_a z5u%J>q}I;6UJ#e!&0VqeN0h;Sn!)T$ns8Zfw3fPbRo@A@>(tFqZdaIr4RDz<-q*)7 zCZ&|m#E!Fg?uI}~bc_14G%xX|z%h`ae;I9;XI}=KS<2`phbtv`{8E)a!)zp%d)3T? zp#uIVF$Xa*vqPiHJV|O01f=HbPY^rc9`j52N9Qc4dhue2=7L$Sk`RV&zWloL>@pyB zYd{w~SYSdNP&GgiO~%ZHdDZX+i?A&w_isC)OmFlISNiB7+iPq|dLaS3HH*z_4?A&* z6?lt<{;#>;un!BhA7@q!kU$=%l=bDRt3}jR5(VV*+ zJpMB%>C0GncUs$OR>Fa`CQ4(34miUqwm ztiU;*rqbTt(^mAU`Y?@bZct@>_)R6of|#Ur#4!9ULpM246aaqu6PUw25%m992lmNw z_&{$KJyfJ;{YEoYh}lfj_`5zBU3}U<8OQDed_sMyCbSwlU37ZSg{O9ozA2;wPqqhv{-}~I9CV}>BK2e07CCxR> zhlN?;0A+Xu{_*INUy>e{U04;PNpq}hIH^g)VB;{VL_P>NK6z6y6}V#QCez% zdPdqvV0mpH)Gh0Bw;R!9=f`*Xz@zNW?p(#tl(FV=)yzGh8>b;VfOaW9kSX$78t)&o zin2A0rT_4gTEdGRXz1ccct$n~+ll(`L0?sDNo?|ZZ?bCA`m-M(*ntM=LIn9Nr;v-w zmuieq&Y6{;Hdd45P>@o&|8XdGn+c=y_lj&Mq#sWdR>2>v?qVtCR(-lrIqkE+5!zJf z^qKtO^CI~e4ewM?g2;DuChMrTOP+Jp>m@j3!LTEdnmz$x`ResjZkYHhh+qDC%mNrs z$p7d#m~=GF6uZNMU{sJFjvy-MEx0}8RFL+tQr2XJGxiPA4g$kA()16UW_~y3%ez!Lj zfAnkT#`=OTnP$Xu^Abg7X*M`g*4e?0TQvF7clZH2LM#uskkUr5Z78MMcN>Jc2P-X;vzz%0?i%&tZ-uQR)X+G*d>r3&;(eDkGsJFxRXirBpy zbMiMmVTat_Py>i?x_vslMQf3_0#>KQIHcC$9P&#Yz)f6I(Xb>hTDqXQN-lt+Zd@LY zbFCR>B~FVirPY(VYCQu;#i9~$7qeP2)QBr?d50+j8j!`US^lVwo5R^e_LWqkFeGh( z>s97oo|A4O8hI|$g;DqmRc81>i{qzNcqtn_gr;b$iZ0Kv){xF`kzmN2D%m-qq)PTq z-e@vn;jW3Tbb1~9w69IYL>6lG_^>8!bOOLx+ttd3iWnhBq$fCWTTm%f3h1{!vQo;5 z=wm>(g7!Gcz=XTzeKIjZbHXPB04VMH{6DkdUvIW{w?*?atKz(AuzZGY;37d5d zFvWcF##Fo3V*+BC!$Ilq-j7|{kRb0<;nOEw2ZV4qk3a>c4-7dv4D24=*R{zC*M79J zS_!17ow;ponqF2pZLTO&Z+sumEI!}iqz@+Hd6&zA)j32MZerGl%-hv;r&>QiSyKvB z{au||$Z(MYJ4!H*2H6i32iX}erYX}HnW~4U>4U@bzoTSWQ*I!$oj0vJ;NVmfViKec zvm#^}Bhw(IOfwblQ{4GtB=1uJ?%1i zKEsHbWU@M3o-gyLwm?*l(Mdif{No;eYU+xvfaL+A{ zu!lO3^&aCyJkG8`09~|*OzLCo=ti`fR(SJbuvd>uW|Pcp02MV`!=E~XjA(< z`B3NXU$MK;d`%?9q5ygZvGsF1&)4Et!2WK z(By?`$%ERu;OMuZMN$eGd5`CQFH?WFTgHR2{@ZP3R~mzm>PYVKw%qhrO^pi2mKRH` z{`}=2dn)5s(m0^fo+f1^)3#9ja}G;J1m3YZHw=B&vYDd_8?`_WH<2So0?Y4K%3s;m z)ul6nK*w743L5QP}4&(O3>8M;|{Ix4$sI0fmaomL< zrl~C|1{wus0_P^U0^ab7I&%+uFSe9*J@+P^+>?+Zn$`dPjZ25uPv7oz6>1T z3R19AIvn@`4j85tFv%ef>o&H9Tpg0?8uro*iUJtWwKE8*94}-904xP*cC&l!=z*qm z*ay#!?VXqokE)K)K)@iy2rSFsDeRph0fW$=ybt&U19BZS-}I5C(3Hwu2`Vyq`ZQ&G zlB(6yJDxG{q;*3CTZRmq3VhoHPrJ-PEdlu^tP-r>yz~lc7a-e|;fk|T-z5#h4c*1? zx5BIl&<_EuTKfS0OI_0|;fIK#K7iLW=Oi!`*bH+Nsa7P*jPYq6hW7X+ijh-!GhmKV z7y~{VvAnp1YU1Av4XgM1zNVJ4DcFHUO{(#_zy|Mgljwm0=l#v9?E=(;+y6Ic8qO=!)j%Z-YHyE-E@EqeGDEc0A&5QRv2Ky-Lyc zE_(|Y)B}+x`@$lwaAEeXcf&)0g^FOhi3f-^R`bC#vsb~HBRftj<-V5~;$?4oQ`7dA z6opu(<0?xr4NSR^XAmJ1>Xo|AvB^qIB;vWnW8;1Vnq)h*yzrQ$ou<)mvMAurHV(}6 zu~y$7Ug1dO<~7wOBoIG|w*XCiyWk!|+(*r-PCcyL-mUIMIf!aP>Jp6{O~bis=KvOr z)l}hES#g1=O!^8*G}qnG)}c>EnD6-g<@*e)2+G%hbPpgasT?nP1~%&4wyf)jduIKs zV`Z$eJxWkB^)5D-PmINucq)4DP@}CgE>T&CuIL#@g5MHuoQ(k1*pZhvoVqNCFzGTP zm@R&1efKE!T5n?b7kbib|n7_gLau=nI59c`S=1J*(&SP-(m=@ zbrfD{)`0>zX{L2jZRDoK4gz5yN#j*=Y)-Bf3~nS9EOc76U>D%=lgu=ilyEr(1uB0_ zSzysd8|Nv%Pv0O|f5BaM`L}rgL>Flt^}i$;I==W6V%-svK7j*G=oMMU&CA6K{6ip* zNoNM#MW-A%aY4u_uv6{*bSAfE#}CX2!M+ml(RVLph8*NjbJ!xIul@dc>jXNjH4^h! z?2Wgmjq6kF+tRfDe@7l_208{}T>u=I(d~Nn`)5 zWMscV`oTRmy(m{1oV>v`W2aiTx+XtK3DPR3Q@DHiNV$ApyA#Xy-ojvcNOE8_N5$sC zm8@mDXNPgA_2g3~I@-X#aKDJ8J09(il*eUaXR*=ri(P-Z>jTt0D<@V(S6O4uMXCOB zNjHFSNnKW&V6NNqCZMR)(<5zP!-bvPIKkYetzitTzYW@@CdH@Se%Dbu z-`gvBD^>IM+?PHC>6k}c=7KoEM>I=pAQmoRm z!`HoGJ)JKu@RP{yvkBtg5FzoRkyvS1b~&;#LC73t;(g~9_S_vSEDWj<8mL4;>*10~ zm@hH6Rs>XfrZMfef?r?6UmIa2Pb!9;8TA#PEMLg}t}kH&b7hx>&AWbe3!>{c>}urx z!sdeg0%f2rj}%^w^)Tm*)2xrjX6t=$n1QZjeIxw9LbtC|LdLAzR0KWQr~??(A~rTI zB5*wwI0iOMp+C>A={#L)Zou&Db$$SkwEo?heLkb*l(7hOq*Vmag^KNII`zNRn-UIs zzs5P9GLIVa`t&Cf36;IsPPAR8Wb+*T!|%ii*g2MvbxCC>KYWfX4X&v`H23}{20&vq zRdX;#FQd%d5uM9P3#HeKU{b^QboC`dvSrGOI`);0eKs^qGv=nIK~C`Y5Ef6v=ll#0 zeJ>CRhP9RKovg$WYg0O38_R`nsGTomFufBz8L&C2g(?HII)jWxIN-E%z5TR`kQ7UM zF*xmhVh1aAiQ8=TT(h(wPb49y88eU+H>dB5CQD%87HrR?#@u@Ev&@2NXwjO9m=f-6 z?yuH_!veGq7LHc`9baKy6x*VD*|--%T@p(D$bbO}OVlCpP8yO5uDBF4p zp$NQ5N6Uy~fp^4f)oGBo-d7`^d}6AKZ312Gjxot6qIOY7zP<3Q zPVAk6PZ{A`(%N{3{s04ceKY^8!R{tdwe|OrBqrBE43`pR%ag!)1vfT0&&14wc8QfB zE6z7PO);$9L|Y+~mk7(pb?t3;jY9onqx6 zK}`g^z`oYrK_P7les?nr<6_N5pYbbimL2CXVWsbPO*5&bCwT?^HZUed)%v0nm-CXG zZh9zwk5LqKRsO7P~-Snu*S0mu)y zRA}g2MEj^nD;DrQVl{IXn(P3-`LOj>#k0UG9Nl|8Pohb=Kr@6g7IV@+4CRigE7^v{ zw3V}xHt=AMBL@9*@^hrAiYK0x}4W z;Rqm_h^WSzgLHfmiY))g5*hU$E_pK>qL6XCaJK204HXnmLwz(-@|oMs%;TdN*y%v< z>xBaG=&{U@yh6EIx&`!x=zct;6+*0(H$q58;EbK0U-E#@<$^xT1 ztZy2%XT|;*xoH>6n$mXS;%5m7lmCevYpZu85+2NN!MM!&$s?TR1_|&9D3jNw?3n^P zkxTuX=y!OVJk3YH8X8Q`$S61d48bI_&^OTT(l3)+BOUgTId8NS=R*Nxw&Q4{YOOje-I`gyaB6}!5VYvq zbrt7(Y@XH(MxzwiEImtbZ;z#i=_=jDx=5}@xN!*UvKZ3b;Q|_2785-p*72f!I4>9H z#|acyxanlBS17Y*l6y&XvG!v$!)9=T(e1k0Zpv<_{%0PbgQZX(Z_EAo(K)BL;c{2VIp%suN~BUm0y7m9 zRkyJoq*w8zmb=akA6~@obUgN?8XF83BuW~F$q|=Fk=)#O5)kDLg1dA(0DG}zT6BBo zr^Fx6@>(rNJ1X>-8?^cD;(=l=x7?HUlPsK6q7EIOx7M_4kMw8!N&q0_khH3HQdCFU zm>>IknKc|_MjmA_SlxW@RoUS)VkTYLs;OFpnxZ{l_j_S~p`2VTcE`QX>HmrolS)r;2%-GG*KrH$ zX;piQ9c0}!1}`y-BR2UcGg8Gi>fvC9V3I+r3v|dUC!x+jx*x-nhUq!HSa}8!1COQE z{XRjsLYBE~Og)f2PKlLNsat!EQn8ifp^QdbKW8GIVGTS#MQImwFRsT{uDG@bAAL{I z#zLe|?~oiZk+G?R@i8n9;b}Ac8&&WYQocj!)QY64L@G~I$LNTQYtE`HHq9&L92fj# zU?YaHN)lmiPuT3ErCF`lJ7 z6K?`l*J7~OGA`_0`!qc145t;s1R~P9+KW1sG??opt%c?|MVlBAO6WLP#%u9mXz~$H ze50yy4jS$k_Oox32sR}Sm$udlAAY4mx36UU@vR+wV}OlhhmVFmBtcyQ zoW#l1x>R&Xmhqq5fFNxmubT?{29pWAS!s60lNYO_v^cObmIjOi7eEY0t?)^Z4(6i0JZctR^lzVVWKSOcI-N_AB$j=R(nbk^t%KWUuk>e)5 z*_s@2O$P3~{Cvn&qd7Myy*e~!KS-Kj6_%$wq%+ZIZppe zx&z%)ufH7EQ!ud%?VD5YB}J4m@Jl2->X_EfApoi@?ngZ;aJj%?{6=Z=^rO$6ecrrk zhwHei>Um2A%DBI?U3beW&jt`+?sN`IMU(v)x0Y8TFusysQ@bly+;f?*<4Lilcv1kw*7aYrBBU_+DfH^<)H~gB^4y4w$%5 z2)3Hv?8}y%Oci5kZyEn@L_&g?RJc|*FLLLuC&BzI1+5&N1-b7{KY{tWhQ(Nl4aC_j zuhYFwJKM~B1y6gfsFX_bc;H*f@`TluaM3h+HH>qdT8&&9=SgL4H22`EI*JqC|2n_@ zhv5wfA9|C2Nd7w7A7;cLe9fd zq8K9C(sSAgzX3KsseoQ_@A^)5C6f1*x7qu@^Voa?z!MN!)DiuXd;CYQ)`5|3%)JT1 zJCw@SSk!uqU{2k9N>B}>1w;W6A`0aA)@7TVDM$K@3rVwg2u(X*CRgSA@>dQe1D&LwaGzcX$MxlVe0#Yp~D1w0SpaW9h5@{Wj3388` z|D$MLt3YC?^=8osQw17m$~p;ocJ)Y;a?V*AHlX;&yD-#6g(1bv#;D}GmJb|VHU>uR zjCV!9v(fiIc=lVs%gWD~|2`<1i;Q43_w+~=7eYLbnxl}04 zP|;g%64fJx>HpV49JICwzGJfAwae}>t+G(`x~kJ{P@3d~ke6`Lt&|8P28ci*)}A25 zUm&;lMES24wvw=jO3Evm3*DIJjcAm_4+^pS7HXTl?y;sJ zN*Co@FA$buq#ud(PUU@?q$ zmWT-!rapGe?r2UeXRaorgAo{(T%WeEZn}FkbDXL!l-v>~yxC2mj`ThM=B*Wrgd8)j z-m*9vJ+dgMEgImsO{e2XEDm+CtjgG;&yJz zXrtg0Vj)ItRL#4tG#u>L5zK)@J1}AGqhg`3H)IZHAiljLm%{+|fO!s91jcXMl6`Ne zje+4+E4wE(Pf4iVq@!KsjfdYXMI%*c%qEdL!lK?rM85E=P8=)zN7_=qJi6DJfne@P zFG&{r;4H9*2ME)0c1+Q^8lOfae#DZ$L{N0Zd*PU%kvzIeoJ1ndCt+V2z6&C6#0~CF zn7TT!OMqmFjH=kAgUPbop5X?dElfy^|4+ywxw@+;+pC{M3(!BT9D}9*ErG*7H28^@ zv1JKx@M#v_vb)q5sDBu<`tC)NBrzNcOBH~bi;Q^3(C3+|j!TdqM(2(so6hX==NHoo z4-8P7N~~!K_eGBr43J^!#znx*DI{$vJCq3AIo>znuFsK-b+a#d3a&Su@A0#6tCyHG zsCM~x-C1YlWafP{OYPDBbTQG=;>CI|hObZLfOHWIPyKhF@ zK?He8qm)QnXrVFp!8z~OJuH%b|g;X+i8otKv4dVzjv+?%_Lkn`YRG4TQp?c4DgO=6B3?Yn~pqKSM znV9UZBmPN9B+mdl8?$C8QGQHC#DZI(z27_yOvmMDGa>B$?l^(sVtB}<+nIK0^o1kf z4sx?_QPq-J!}O?428@MQSy_17%>~Jj>1wk9KHmcJGHn=}!IjwAC|FL{H8q}sP0exw z_jLG&fGmTi^#;$*H5(lS{YyKvFzL#7>npBZkq7{IK1^zBBpd^wS8Un`t;-gjD`~D= z!?s76ZFw2S(5zyBgoR}5>G!Mc|Nc0(D=ww-cy5N8lwpIG8;wqz4-5USA`^~>xTUP} zD&^ZI|2l|dyrB;TLK2tmcSSt2hXPhZu`xvS|8ilN8D(!`ml)_l;)aXaEFl~He8%su^l91Y^m76_GrELMmW7+3dObrkP4@`mn_wx zA)Osz-YtSI@X_-kpr|#qGUXK3v7hp*ttT%%jX0^YDU!ZecW#nNj4q$u+3dj7cJv&0 zhMo1UEh@cbIE~ea7@z<~h-WiqeyS6uxaB^{B0_z2RK2=JQdnqVd4fYPw&)Zvpg~dV zVLJ*f>3B(%s_~4%n}ll9y$B9T+du#}1A&kszwP3#n{b7#%v2c9@L=QsS&I19{c#4W z7^2x*F-pq+sSU(u`0>#wuPE9MfY-Uc`8SXz8*_>Iza*Mcdn!VQ{+h!Kw``6oU*aU-?K4SnC( z8G&7D%*LqjXLf%8T%^>F3gQkU$zR%*eh694Q?51gIqY&He zd3dIu)eF+txy}*%Z^p75byCQYFH8jnq!;m@VrXx*Lp9N=6I5&CecZ{=ivI`CN*a!4 z>@AtA5|~1`8H;*@0}6xJRzSc#1=!lCNpga*c#J|_HGmZVACiK~IMvnXc@`aFzVF%D z1Y>a-Lb4gAf{0Vv$YSV0;{#u0D%<+dfhmemj}G+&>3>|!V4$naVar#;mcUqS-Kq*@ ztZ%?2Da3<{8WZ<6}IaPEp!5@S9^Ii18%2*#3p0zih;1RZU+d$qqvNJ$nTMFBU+zZ5ER;Co)R@X5S7Wi9iRwx zdY){hiq6$Q8a{Z}W#mAKGzUNEFqj2@*K5TsnR7WE*JFTqI$Q6YAYk7jz#bccQ)$*Q zOj5lV#J_NoA`e5|U&%mwV^v0bN5Vu91SFzk1UM!m!pKO|GQwKt$|Jq`ZmUC$;DcnN zMA%xO+Tc_%h^4-$#jc-4b0GEFqKDd>_rP&HkYl`g2&moCD25a~J=hzV!!0nCoo1z| z{!+hQ6Er=VkG29 z*X%Nv=*Vnrg~w3f&XNZlMUi?RzHN%MjzNH*G1g}z?(x%>fLqx>4G(nSi&fKZS9tSX zEC5UKRFvYAZb=Dk4!pPA_=ODIu4nZLr)Y(zwj+c^eFxTHw5&UZJeVcmwH3Kfl)*(M zv5{mvK)H$sKp|%<$sJ5hcDxqa3QPAP!#-aIqjT8c8YbL9Pe#i+9v$~VsozYtp{F5NiouzX}d6YFzto{p6?gY3k7vx)5dcxZ*3)yK1tsUB}~Sc0c} z)2au9`H!8>s;pj;2v_<4tPv};z*}|((v`?#6pTR$Oww`TD(>DKEJ|1@#r=RknSgkT zH1NaAEgn>xZz~Xw%M0fUtoHe-}%>MEu5mk4AuW7x1(>U#fD-lt!6?vX|RH~ z(wY;Q0c<7*>Y0HODKXrH?;WUD(br8q>0YjW6f5s>K{9j|9XGwD&Ef8FnHh+cE?r4! z*LN&y0Z(nF%2cKqm4CfsDMHFELAtkuQ@2u^ z(%vxo4snw=s=*ihqzpct(a+5sG>!#hAC|bw>A2TbhDg>NexI zGae{@yaXjN58yw!9J)h+R%WpT_g?VXJ8MXOz|LV+Vkc6)wLJ8#^JU=C_ZKC-57mvZhCI}; z5NWj}=j!viEve}=eB|QjSUD?dAa;63x}x_aX^cgapA(NsBkCTq^os^iZL1K)Okyh1 z@PcF&pTfm2^}1U^#d@wSK$O70{F>G|mf=Po^jPWG;dJ9IlfovA#*`$V(b^;$3B8V; zO)mViV>(&DwE?3(!nnwOvRpny65i_FWev?~y`hgL^`YrKXZb_R_$woumOpYhMuj`? z#+{yY6*3(tn-2{5+-%O2v6`xoA&W}Y`?3Ezw=>0Ku>Q<-=*q8pf#UJI1{1s)N?s2e z@FP;vGx+MW&l$#bNrAaP?miviF2QOX&!W@=76+Kr_p@dc&Y4lppQ;|>*`r&;)n(#V z70MJ1#vz|{>9_ds2y9$Ce?Og(DMa{nr9pTcYQajLecegu`Oqxbs_{Al9ij{)_ey$ za>WCz79R<>kO&^rb<8D-oN(Qb2&cSQVlmF86{$BhEQ~Q!qD7?X)~$lXE1Y*;#&Drx zVMQ=Cl+cm|H!PWY=^gs~b^Fsjr^Wv6gZ1x9LohRL-4uDn5a7s6@MdQQUO$HIAck_QR=X z5>WLUzCV?8I|R0JFIhXIKz4>_k*xqLZTFiMY&DsX7q7A)P6)In{qtB$^s>J!<|taK zWR<&xkiV@7(T-=kfATk)--Phbi37m&39r#@tRC_-aVnqY31n#gZtbQw@14DY?D(wl z%8#dju#k-gY2WD37j#jiHxwz|VoTmk&`SeMsahEYm3>yClg#=p+d*Jbqh~}Ox$DKK zlq>HCN)P-M4-mE&d)ZKixDOSZ(=)>=$`;Yw-)DG|K{vwM5g0mqFy&ChC%(pexfq4* zU26_ZI0!}6<#6|+QDk?4-P6AmEeER21~KZ_-76lX&>|t_^eaL>_So0;aAF32WIQh7 zdgJAGJ#-h^ zFbfrL32ETmwR;`n?9RM%2I2kX3{xFU(YS5C03Wu2;*X&^+Ze4X4+b^+aNrdhXJ6R8dY}2PfjV69R4bYeM+q@o%zFCf92B8 zvJXDJ&aUvcRoTacgtAbmiN&n|{*&7$1t+g@s&Z?IpOHWiAG9k!Kvdw_x$X#dJSqzsO)ESc?WafpI9$XFdL*$%p#}rDBt>=|SmppMRIDY^{z0DK^ zg#Goml!%(%SRv8&WaR;Xm*0t7d9ZqP^r`%tNR+(Ja79kH#7@Xi6=@0;bTS(;%?q-C zzwyujktfcczzGy$%bS`(?2*}_dEM~Zkzq$$J?G45Ash6&zztFQdZ6zj=DM;1+d z^Q&e{ISy-M7dkevO5eu;}NTesBCcc?MU<`4d|LVgp!}I{0R& z@iYmUxwXjP!;*c@5t!LS$!M1z8Wy#gOB<9Yxca5GY1<$-#uShA-L0R9^u)_AQZnX+>8qgrW#iC-HWtdE)0I zbdYANkn4vGua|8hhIU0btgL({FGoG^+1_*ICBX5CU21N97Y!vCwg3iO&@WzpE`De z19nc;+|4bWX?-|lK3h6y)54+;f#&&AZnq)!9xfbbqf8swcV+2Jhfm#PE&%P5eu-Y3 zNlf(t7a?3PLUvH&YD29~`%w3sgr`hIt{ZJ#mj?+py8~fK)l97!hq<~?z50ceHOJ`y z^R%tL5xB|VHdkb84wEfQJgtJa+^+6P2I4u_G|h&76bGM-${S#kjLc=i>0d6UcLiu8 zSI*E&9T;%IpSt$N>D}sjkRi%iQacbD*-P8DSl;i};-1x$VA$TqU6uDnnMnl&h5k<`Q9~LvF0KWp?Y4o0&x$<^?-jl9SjN(QI?J5Ar|F&96*HMo zp{_Qb9w)VOdP0T`rEr=ppSKz+qEI*s(o}Ofl%jmOw>J)W*28O%%51ED@o$eJasnA^ zN)H1lx&ot)r+Bk8uL%hvc;1*KCw5dAmNXWW7_W%DtW^29iUx6)$73?9J~9Dd#z>&@ zxVI$d=RitFeDNrt?B`HAH8tMrJ3{zqpoa?knWsr9*w|oD;gpnJ((D9=>ayt}Sfa>? zS7@Aec2<%Kt&%q~Yq3RAdm$%1G@-wLHQc5na!Y6~?nzCG|Me2-)fDHq2yiW(8vqBH zwfX~+^4nN;46F1?!L+`Oc;_3>^%q!0*Y^oj_sZw&UJT;<(BTq}R8RtVtQ+c3?Y-8q z+Ykp93tZOCZ1i*=@)}VGMy-DT{eXKu3nvh>xc2iV`G@zYEBA3KXKSta-ynZ z7F`G<3rN&;D_TxjLA-o|zm1|h|1#t2;Py%+bG`t})IIR>mITl-CL8S>&-mJv>oeSh z66U6)+JOwUwza~LaWMj_Jq8IR9TR##^>w8*Z3Zuc1bjiIH7vWu^pljeHir2?|3!d7 zZ9b@_z?g%Z-Bms_9jKmKwk47ngzq#R$sCHsXaHb5dTF#xu~ef2E41`7Fb&dRhLWs@ zMK7}^9;g5|)Za%k!EAAg^Eb@<@`pNgdfLRYVWUc?k^1nzSp{ix%O*kkohI8TG@~~n z7jb7BO$2~5OT^HRG{(w#PZszSOEEq9PWJxCb2Qyx6uT7lADfgbMJPy;mqosvt8zIu z{)E3tw(2!AOor))Qs6bep;-4mcv-_H3K*SOVZ}nrgiahL?AHs4>K^SkQ6|m_pF3_m z{CF%k(TUfBNcB^P+|MFculJ__x0UR~X<$tPPfjR(=J!V5J3|6KmsELC;*}ToL)<)Y zq3He*h4nXo6E=ol3e7N(e=UE{;Mu~DAfabNO)Q~w^=Z$*8e56t#PM@ois3u_CG%R#of4`w*I@~=|lEGlLzJh z=w(%x%nzq*$wNB|cHwBv95GtaRq{BCc7d6`x491QH{n+Y&G{tByUKkJHo3B@%`N?; zdwJ_(wTKJP@DW9syY68xCA}^-=Bg+~-aCpd+0xhG{{&uS#sXn-hAUbm5)VY%T{Zh&;sgt=QHP3xA&>O-7Fn!72Ok|-x;oQ<6 z-dQcouiv4Hk5!HoTt5O71?C+}z)NjDv@}|QxoXq3+>Tf5$RBe+L68+|5l$uF0vWSR z8f=DTug|}X@a->V7W7fRj-kDH3+`PM;8Ly~8t%a^uzV@F1+dE&o~FfKd^V-?{z+`R z?_Y4dN`Q5>+h*IAH68mouZ}FTLIl$dL+%k{q4*3w_H=!=a^5ZsHrU8(n(r6U5-FEm z=t}>IB!&V9hi(7?4~Xb0S7m+=;OQT7?6Fk`t?wo#qXF4U=SF^VFe_k9Qx|gj`*Ql~ zFhp%jGbfo*nnoyOv%NmSE;7!Q$(5j>IhAQEI#eT?&cINygwo)2 zI)H}VFdg_rRpf%>JE|*-T2ewJE9Nt9rPGbymo11isL>qE%Kp|DCKU=2w-Gfr5Jw4M zc`qnWa}k5(^Y*lrFl(Q36(Co7O6605J0IFq7I1D*A98St^L-DFhrnZE$lPzqJydj$ z4q4)A>8G$Qt8=N|e=NO=A_Hj?qqb@o1)VK@1>cH|60*||!MnF|WKpD-(*j^JA{Gp!!G;pVn8QjSS-HVepl^e(10gJ(C@4oM z)|91b8sxQIw{PVu$aBgrN39U;RucsaSxW%>A8efH!Gi*y=7|4CUg`CbX8H_7T`97i z%lg)~zwa`!kHhcA{uFD0X`@4tH6b=I44GJ(a52gUrg?AFETr+qnI_mLIUFG2-2(b> z{~N*HLgT>H(3x_jsIqnYptD=zmdA$AIX^q?xEYJ;0^89js?G@fjxd zm->iw6#yvCw(UAWo3uX%9-@caB}44?qNJDfj&b>u>qrCjt!qj)l#|Bv(xRSVO=%?u z&h66$cT*K6NcEmN6+tbpcjBy>aR(j>^X^6-XiI8r90$sGIQCc60b=!+D1aHDv;I>h zh&Z#W_0eMhDEslE z2&q78e3tuG%}4r*x9<`T{y1#fR7mHt&LC4qvBK=4uNom0LlBwHt?G~v+qw~A3bLB( z5U)|=BH*RsyZ?;i809R3sav5i)0T#oi8uG6r-FlmGgLG-idX~yehjT2&dv(POjXoulX|wUqO=z`bLP7=pI&&1 zcGO!p;xXwO{V@BH7}GWYbBd@`5(FTUjaZJ;yMq zs1;@pu7tIxGN5CnFAqKOuJ zft&D*w650d(W$FI!1}49>#^q0vA8F@F3mK=Vg~iyZS(zWL5_i#+BRP~deBLgsm9{> zX+@}^+i$X&7Vv;jS7n}G%RH!jpIAn(g%gOy&%ihn(qS4uQjd-1k!ZpBF4a5H6ZznH zWlttMCX5FcN%sHJD3+2=l`?SeL}IC^XTBE#CKIEHc%5QNEq3VSmU)1?E-BQq488%{ zFHQeP?=O;oPb3C-Qk~NMl!$Wkw|I zhE#irhHph2p06OZ>cw*m-ldDZ?PEOgaw0cm$p(=7NmHCeGIlr;2tSzKkXDgW{%irx z@A-{wVSjW^PZ71d%p##2p+Q=Cu(_q6Z^57z%^TM^zxaBH#0prl_Aj~jHN#Svftw0F z{)1hpTA`}GpRrxZN|?2zYj#Wkb=+8ZfmD+vg-VWF4-?F8%82fop~u*j{)yu+25Uy zRqn-&It#bsTG@ghOhJWJ8C$(+B1{i4Pd8Dr$1xXeC%Wrrnxw^+Fn1K=U=9A_PA_k9 zULKOyd>$KS z5vuz!*bOiY_S)Nrfr9b_h{zzSjX!W?$&SMx;xIhW2DE(aydWMr<0MhXUJnXhSuuv` z0MdKgf{KiX3yYaErEZH6VImcbG4_IN4ewT8=%im@h**UcCQlugxnSPIIrE>= z&AjMEmn^wwdQJ~+y}c0%j0oT`$9+RorxZAv^fCjU3}A-8d&WZT0j@2Txf+ zg-YZH&!MOgRvM(Y49a0Cg#5&ZZ~ZI6=gWJ!9Oyeo@BU+N{ z0pE12G9>=UXMW{I>fufhc?g0nH5(b<{Tw!xfZeP&F=j5tP-Cm~n9C7lVG|APO#eqP z(X}zeg@;@(5=BZR)dlvmR>juW8{M3yRVXLW$6YuT=)WEE`XELtRs*4W(RH-B^%2Zp zaXhijbRF^8WveqZYFG&w#Fkus#WWA<+M3i^n0#HJZ5K3_AX|&*s>r8?0Ky;4W>Mba{Zqz+ALR+|!B+&kxDVZnIvMHonR4~%Vs{>Ic zAqo_Zq0I5-6j9QTRxq(FV>G)pZ6rR5rdkT3d0ZKpIk+#^qt8vn3$n;D9$I8Zr|P-{^QU$eM~h`!l~x zwn$6(nDeB2kQ0&vubIe43`F1@0uURKCQXQ=XUzy&kzts3HbY2&H*_}xqX2f8ZK64H zs|Ee8I|p?f&#hl55C?Lt(9}Ymh;aYyg7ioB`0bA_lsg7puL(F@^1`h--;JIY9eDa` zU3SA#noE)NeEta>jf>VCWwGcJEoc$KAO&$nG$$96nb1Um@g{sgXhD?}<N?5MF{iBx5@rUeli3j2cT zfOw{@7lu((1s`6#4frWSG{ip{ri%giTtTsi5@e)A={Mb$!@Gufh4#=i1XBV8pvD2;PL|EFU(nh>mI z4Hq^53bOu5VFH6)Y>~JeNE8%5_`Ep+^2_^w!2Q2|e38TzN2 zeU^o0tBs2iq5JsX&OopjIt^kwt!ImdO3{1C=LQyQ0%=RdN-L2Py@yjH6*@hbDKo%c zc)P)wn=i8^;V}Bp2*G?P&M#&~s1eA6*>KP4{@awUGHa}qke)Yd<|)z`oc?t#C0~L5 zu=}fVw}#d}Gt>vgl_-h8+-|4o=V;>x`3$VAb1GR+}vLi_-W$#O&ngE6g?rxBPAY%Pf@U%F@= z#aUWZHlcm;_P2LfKZGAD&XskL^N^+gN1y0`_HekTJ}k@pU)c*Hf?Exg$1DZnF1X%@ z+sgNI#Osdrn%O&+D%$E1+vFGC1ZcrV(LLEg73XtwTBfBg)ZZBSVsAX4pY{iX4!5_P z(J3jWOGXMzs~UIsrG>n$~-DH zfSRrws=MAP=N9+S7P<<^LeRF;JQ#uWTtdQ73e&wJadeT16*1*Z|0cdcLu@s_&%pxWO0q{}Cz)UaZWI4NNVQjA6)&dnNJEP+D~=FvK#XbA>$ zT3ayKFP`1g-gbh`dQ+28kS8|dpY);NZ)=G{%l#LwuskRy`f(}vn~nOp5MP5d2{4Q} zrwP7z27aqCNs}BpjrDZA7V_gi{iLfCCjI2;RerNTG5DO1!mw@5Ie1MX zk>H$W49af0MNT#V**^c~gF1kQCOUI!+`q86w26CT|&(|G6Goy*br>SMr(b&DQ@?|{~+1<0iS zu5f`J$$QIse=8+4rTEAh(_+?#nKacrj+&67FgsTokJ!4b32G<}{7z5;ppb3$`))5S?>6wii-PDrmMuPC>m7%MQL}SI9!i5_ zwo1h@MAZ_7wU>C7(|NFr&gHJ zLtKYJ$EuWDIVCo{zXR1XtfSm*icnJETym!5=`cGe_b0hA9Mn zP;H0mFF_7nZmJsfO=_IYUwzJqdBs(J7l_~v6?hZd<-Foz;8eR)gPJ9ob{j-AO=@Fn zJ|P3WSpB9C{ND!OCUel^^A7r7H)q(7sl4$Vneaw$hQu^|dU>b3uMACP(~oA>2j za^godO>DSvp3dV(hGwAV2^&VM%%4n}n10$<`x1~A+wc2V??jF9=l?KTI6=XdFR`jS z_fa1cx&wl}S$i^qPV#92TXY=VOnc_#;dpJz`>&9Yga6kSgvbPjrp#|^k@bJMwLY-$ zCOP0JN_}|aMwEz=^w0JsIbuR`xJy~r)+e4C;>``M$oBPh`{z(Y#ybkCX@wkDK~Js? zS84By#i-I4>*GnsZ5CSFKdP_0aPX?~Dz20hz^+Vud3BRH?j zP}}qY>e0&jylmIaFv9GjEl|f^K#Uzra*4UTfLg}w>@gRueeS3R_6|&Yw{NSsJxA|! zT`-oq##pQ_-F&TIik?z#MZyQPsVm&v$%uX|&9(zNDi)^QF3R^YPJ?(Oo;fwosFYF- ziJvw8wMp;BiL>hrODbZ4 zB+*qaNppxGK`zFXInvdk<900Ub~Nc&wA?%7No(ncQ^&O+u4PlI-Evaa~z zo{!t7gq5h#6&G%P-1VX>l8{g$mo&DN?B3oCH=t$q2A=!TD4CY+o#IDl*<5jE0q1HJ z4DadSmn1SZ6~g6(qFpS+G$uZc{}P8|kB zMWV1-5f_xO?IrWU?+Z88(XPhCeGz1>Agt~FUQ%c|-`tLq`Q?cK)|!#ki$a;zw6ohq z$@95w>N_tqlL|aTQd6M`(OHf)j`}50RzDjODrDiv5dN;zA%KVzK1Cz`KlV2AjE>8OJFhG(RU4Hy zD5(K84~d+m`v$notYWiK3?wRu#ZFFVW6W^EzBrNR3MGGR=qc-tTApJJ1YX`FoXgf0 z7|u;}n7_KC5U@!vh`GUjB5pfqjd&^rImc5ea9Vq|?=j zo+j4;Vj70bJ?TEQ2mPixc+l=R)pP}O^s%BlRlK(ERe7S=NI4=(Qj{{!M1dzL;)N}e zygXm2H-89UFLxm&CF?dyq3zVH@9CFI%xAjR5*2h0sD7{4j(IQ*xXmV2!X5+f0jz;7 z_~WmaiSHg0;0%8lVCGA`Ry>!-EAMvEtXpVMt*Gb%ac<(WUc3Np0}*dKY^MxIo*2+S z-otCvweDG><(eHt;fT}15lmnk4eK^U=4Vt#>%B`f1liTvZpvX5u9i?~pJ0N@jiK;| zbBt?i%b{axq(?#vwhxEoDX?%oYkAC0oPnCvnC6L^CDmjx2nixHv`@I#SVk5u%a^bAompGZ*MTO5p$GM!nq7od+AtKkGpzPFKpG zOVBeoirJzgA71hJp+3Bw7~uL2ZZx82;P}5u4aPLM@V$z{_Ex>;)0#{gm0QI@@|VU+ za6pbwoYBJ|PufMV9>xx16;+dZN_R8~4n+NaT~a>GF3b`lgbcxn6{7orN^iBd+He(e zl|?0#w%N|)=c2F~vj>)+yD2KR&#s&pO!MRm#as(ZX3$%jB^$-Q)52g(#~)yiD}%Y#XVr@X|5!muNvnA`suk zz`p~jj|A5 z3SNO0ttD8)!HSVhjT$p_h*I-5n;(eyuI%I{Q+zXe0G{-lxb@2UD>t^ezZ=HpRTwEc zPyP$5i6QV7>-Vo9su=3Ci%jnpFBAY!dr4 zOk>lNJwiQ(DG;_LvYHLqR*=!%-z+60t69NHD3fBO9(ilO*DFvlo{4>l&4GQ^kZ`(KcLEZb#Gdn(_W8^*o}|52jJQ z+dyg`hGMn%36tJuC|i^&TJ&k!)Jmkmao#oXg9KFgi}#Ygd9gg;6%6E(TT@hyxzXva z8Y-BLb!%PxI!N@+t-GS8476^u7^-PtL~?*<-W>Modb47Ym=^g_siTSvvU{06=t;9QK-kkRwAV9=hw3630hn`h z;`9cR%@)8=Bhv>%SCVnUmhhQ#Y?S1tSuU_k;r+|W6p0w=g{93U2FL*vKn;*QYl(C* zUHB#+;8#P8f^;6xU_EepqrDu8m)XOnh^X0C(;Cv30N@KPcsmJzn)LZfe<}Fj~Ug55}eF8_WXQB^Jes<~G-V{V$A1DQR$LVqsEntJO+1raKlxZG%MqN}kofkMO!=FI0 ztPWyoliZ<3s<*Q{7~0A&`G$sP1lyp9Hp|`7k7eYCE}G}ku14XmV*$DJ0x!mjn?o}V zwiQhM973i#RUI)g+*QnO@!lAdMe_%JB&c4ToWC@;QX&d`-0bd=8F^-Gxo zNt{1}sg$(|09px?C#Qx2;IdDD&XWvxqSW^E<8=KHxK+v4#V9Abv5ig28Mcx7s9`iw zA*((cG~|3C1ZDGK08iERo0s{}lgZ#b>opqaFy-hNy7rTtvLJuM!fV9ho$9axB%5A7zNkO~>5#`yc_2F~Az^?>R!2S}M;EfF- z=fmP>L(z_d70~Gr5~LZOr_wQA`)SZGA`!>Es6^ZVvoHt1@9sJ(*D(6}DHYMi^-QMd z;eFvo0P8n0ka7zul?y`d&6BuD@~^AS!RI7HN27{FyIP>q`?!+@=QWHrKKS*KDWY2|=@QAu_#yPnyi zB;7H%(ZKam0=JG^WUnJeBiy3_v)yEz(O>-&J815o*<_=Ky!maW$71l7NCEhS3Ure^ z0FVg8E7nQ)^1g6SYG*z&`J6&8n`!{j4My3tXsou^{E8^;yHt3JreFZRo(2$Fgj@Mo zSsnlKY^3<%^Q82!lr-U?hLu_FdT=7(put1#gv!=bZQq*T<+39QU?j7TiUgYT)W1jytAn*%(+wVm0A)qvead)V@e)HL1&N7HCyI5(8ZEPD60OBQL`&>aunnN&*|ZpDS48!moVP3SpTo z<1Q<&5iKytT=yH7>hDX;F+F`u59`Z2T$65gug!=R54yw;kM`|PO);U3DZ-;My{*&J zznm8<;rSB#0eq+MHcikjZ(8pZvVXI5qsxNqVPDLSN+@*!_MJG^ozqP{xk=|PX_`%A zRd|YqTw!2#nfm+o}DfvMRIN)wdx6rkCM{&)I*TKi_N>_PqLl1zcxA7|IX>2S8 zQo+EwD*ezMfHg1ANte}XZr7CQJ|v1*zq^HJ)K1BFrw~TFdHauwcop&K0M)gpPY;f! zJvQw`Wt>Lf{KvWX9tdYl7j@IfjM&#a8M#^lW@{poAlumL&y?u`0cxZ}hw>&7Vdsgf z%&HQHPJ`aGJFVUW%71dYr9N_GPhRTO0)U)VT%D14Q;~V+DLF8*h40KZ@ey#IgKRrG zPHi^2P+{tDutG}g3bu_OHq2hx+=)aG^Za48cl^|7Q-(m1DJ;3sCK$@@hyJhcn6*~1 zOc&HvjB~h5`fVudJ;v#pNcf;USDsECtCt4m05?DKvt1Ow~t&)^f?-n z+5W&0i@BLNA1w#BhiAFz_Fb<#Kf#vn(}<%;55H9qFX4)V7$Q-v!Ylx|y%R7#J|Wet z&}>Ui0V46Mynt2NG*Rd7y=8EQ(bCN1kLQjn6mwQ|=yluD3@F=)-rH?fbdP}<3e|8s z9%_A3?ZT|w?X|hbD#7XoDNTm6U70OWwc34dCMltE0p1$z?1)#Ja4M5YKU@WS09&K~ z@ZJ?=G~TRiA!tA+!7%6x{Fc|-VHq^m;%mt2eTDoRZP7JKD>G_*po32F3~!1NCj|vf zaBUE4QGV7!7m3Sel*#|iV62*~&NZ@l*s6_##&&_Ov*nv{L!m*Q^4XIyfolu4>pL{% z_aD(nARdql2#u={wx-4v1Q}~dk64-69pXq0^IF37iMDx94O^x|rl-R@B08syOCD}X zW}^EFc>R4k2wSj&rB73w1QcP}US5d=nQ};UMV#%d@fGs(I8tzy$ba_5sxvIW8@r>} z7kKw|PRFU$>kRd4=b}JCi*LY%@A@NHX2KRF`IWyD`fk$0Cql_C-36K$q{I0m!EJ5@ z3zyZ53e0pg#g=>EB%Dfi3C3!Au7p$WlYk1JXT8<|yQ>{YudDkGiAjP)U0By^|=@uN)g)Cwy=C_&g9;s?Ckw0S7BTUZw2BKCNMi8`m z2=!~RA?5&{$A0h^ya*u3;;s->7ia0E_MbXM$aEBkvP}-dNYpa) z^t^2we6%pJ>3k!3(iiC$KaiEh=@P4RM-MHhj3q~4=^{?vBs0=^H#Lrsz1jD$6U6l+ zHYD1m>U6H!@!fjF`Mt8HPkTqvZ(nS?4JKh1I%@bX@=-!|FWX!He7-Vb3y7bD*6=Ki z5O;$kri9gOEIu15YQK5-KpDhrTBYq(Y;k*4WZJfSdmQZ%dMnA?J1yk`xs7K;T*<#k zjoEzv@$d>HGOgaC#GIrInJe}6BMluC`UPGm`Tvv`AI%)3vg#{wi3@10Og)*#K?+% zRihzCJj7wiYoF{?k)a|pgD9glG~*p2Jn`ec`7JzaL-L@1e~jV2>0#dk2f|irQd2&z z-|<`1w3iwg;?x<%ek?Jlx-OI^6zO%!^}B)kXGK6|`Z!#GjW9HDf(?1k9FsZ-)2Mqk zw(&+=sv0@#oYZeDFOs{x`DRA2#9vvkTIcnMpWCjSilp0;&SLJ|^LNcCw!RPd2|K3Y z2u{7DoK+w3m{QZB?*P5yx!%OI!b;yqxDZ!`^q0J$^Z_CFn zb2xc+o@m<-D15|-diERCu_>h_D7Rk|E2N|aayBtA-2e!8UVkc35b{7artw%Mxy-Aj z<7Nf}%$9wzS!7USc+l%;-h31{b@e#mY=bQPL#^1JFGoUnacd!}5o$9-Gg}`}achef z{yrL|Vk|unhHU6p$#*dBNO|Bvfa;zLg+Jjt8^EK^==AzmPWez)FX*Me{H`ly+0?xv zj>Dfuuhfkj9mD`>H|Casi{4B>x?8ucVHZsXJ_U{{7FWOlUNUyR{x>ITw$zEw3+bJV ztsfn7JDY!)0wJr0*!})BjvC?ZFfDo!0xe}QJ@z_cyELe;jM>ix$9`^Q#j8$isl0M% z%4Nbng}lh*nKDk3pBTLq5sxFl_F0XM^op}rdvC8*o!K*w5gUj1)|Jz(+_Ri?dypw~dr%MsAWKcLbuX%IDi@jhKsy5PPN_t`rAB z{AgI1k+v)9x)4IKe#)v<=uAcf9_zb)^1Nk$*XLjDv%+#m(+5m;(&>}({t$drwfk1Y z_J7N0(`eX$ofBZ-4^~NU()04s~2m=;%I=qD`VAn^QrV?U=`@RJHJ0 zL?T)V5oTOB=#6)Co&Ab9R z<-^;_RrvU1NGpi;@Y`K1)P#FY#PUr#mTIitZ^%z?iR&Ot1-@X<6-9}tQ_x?(0L8G0 zDf+3rkitu%h_d(-b87UvXNp^kx@0ONkk4JQ?8ssWk9)3)X@a}#VBQA+?>u24i>0m6 zZm}3Uq&CN6xfvP}M@ofC%}3Y_YNPhsRUH$I^Hv_{(2=)=`#w_LznMFoc4c#$+4dQz zeKL*$dFaewyOwY5?%eSevZzIe7MJA~{3(t)4%lsDA!$*+5^y-^eH!0xXC>Zc-HH`Q z^tk*kfzL&p16Ab9mV0W;iRe*Q*lvrj3Z5=hgfRA3R*1KSco{O#6o{i;O6Q4`iv z*W6}z^mzQIhIox{#1+v_e}ST}UTX+<-h|@{GSdhVV$<)1Rrx@BbF4+!UJGAQY3?Xs zh3&a=7takj->*(8$c5ol{xere++%4IK+n;X$^w9G7Hqc6B;ES9?)*j|Zl*`e<)6p2 zYCSYi83*d7{TQ6>bazc@_Vr>cGSZFk-;(~;Ut;kf$6TrHT}5%8LSnHL;vXd16=EQ!btcJHB_FeAj+#j0rrn zUmKBMDFf{=V!?or>=n5GDq>pD+i4k;N&;Rn_Zrd_5gVM-nG}}PT})0)7+N%A-1nXi zEKS)u!YFhYn$^(@1rcIYUtA-$SoKZs!M7ocO=487p~sD%hd0sscFp=Qz#T|sATWfY z*g!wJ$iB|HMUQm))$yPQ73$ca081} z`G+f)mM=|6YOrF*jc5 z*8CyQ{>Fs_sAKEJPwLd71+PQ3svr|kgMJ`Tivyy&q>tsIN{(z7&60dD8*0#?V?5yM zv%DI{k>BeZkHlO$Lh<~(@u`;7h4GP$9H*g`Ro<`Wyo({3KKOSUsOubYIoV1F(Upz_ z7u)~+8tKCG5p8RkiANADD?gO~JnIj+3&&uR#J+wH!>!G2d$5$+&LrdHzUG5wVh1Dk zIX|dRdpEJGQcD#ItY5?vHXzDCjwI7YkPpE7IwMX=nzaKJyAlKpX-HM1($SzQ!9rc? zURFoIl02?M97gN8XRcu+T=^9X31CB1+B2a#QG9x_b5M?;i`x8bH@g6kis{9RHZCn} zBpotwY#KKfuH#x`7TLC|P#o;a0`_-HCp}&fV$yRa)@Mw=rOyHCIcXtShshnK^Zz{k zYbDzD%Pl6t7>tlQ>lpOkFnNy(4z1~aGU4L!{R}oSdqJLSBw~D0xsq9qLYXlY<0ycF z(8aRsKqr98)v_9B!6I&e_>0^#-4BAE?uG_HeVW9X5I(k!(Si8k0tbH9F|MNt84{PE z#)8H)J$^~0Vg?-)XdUb|X_xI-E&hHLhgn@a@T^1AQH0#E>kif*V$+(yo(H660E|W- z0`man9c{gXcPEKjycIrO(S;r+hRlAvd{Wq)i=GDsjVxN-D%aa8VGM$}wEvA0!#YI+ zWTKm;5xE@|HM+zn#J?&#}^B8Y-?pD+)n4fN}$5M2}l z81^Aq7Iwhc+|mWyZ;_}LD%Jn^*|sM*o?8* z2nLHKf3(kz?t#C^?unAg6c4`Cfm{VOs=rXUURwyuc#Noa@nGI%kGMoSUcmUx05n2* z2k7&;6{w|~ARWSL2BIOyTYi`})ATHuKh=9+OpS)zEQzq>Ra ziuD#ut4a`EKsY}7N$qNv^8@ILzA4SBEzvj0e(vCbCZQ>2WAED_Cl&vvGlX*|yw)0s zo?fB`WUF#Jk*1>~_d{ielQ)fpi^u6a#5}%^_=( z6#vTbls%c#QU-2ENo1<*U%~T(L1D^Tl11HZFu@q2pkAx=iB~^K$P|1q`veDqRD-4X zOX*<4K{YnV&}pyc6ghAoDVUheqVKhsI!D0i50hdDYVcWNOXd}dD1;`Dmh5~y|2j)iF= zrKZ)KKlgx>>UMc4Dr-xasj{{c!!~J}9r}hyv`ZrCQzz~I?@}5fGkn@NP3le}&YK8y zgZE;aywe8P0$&(rR(7nPpWWB$GOy^?Tf)M@reHC@S@DTc&E+4gX@hcBX#`XGllbMZ zfo55WL-PicMhG9CN2!zC?eRJdX~`ZbFJm^5H&Yb*7;%-`P4-GWA5l}rX3tXDVXZ(r zTkn%Y6!fEF#JWLW9JxnJp-=*#W{^!uckDT62%vkt>?2BX9fe7G9C+xSJxbR?XW#JA zYYz*(FR$6P7FvpbLj0mp&p{|8*Q>`UCDuxJm;M18{$=D>hoQ->f4p z{+;EE#4=0xNfzpalh$i}tT>Wqvjk*FvW7jSb|-18*52&01@_JSn5=o>5d%b>6`bYA zHPHMHiha#?VLeFRc4(HiJ|7uCV<4mkvyz(XWnWylgQPK%ZcO+NrCoebm{(22ys=D= z3|GBbsKS;}y47Z|MiA;XdOEm%6xg`>4Fp$h4@)P*f|z^pCz*_e+8Pu^_(;XPVVX7F z^zEAr0#^xS=Q!jLP)z~$gSAK=f~xP~_DMG?ldn9kBZBU*C`h$)V<-5+y?fLPe(z2!5>w26j1O1`jnXmLK{Ihjy;6&h3ilpauSyXtCLnh1TOrkq(maaVPOyoujizDJw!dfnPJAeHfVz%1Q zUEB_0#t6We2q($Y8~mExSQi(jTl(5aHv5#Ihpupp)s3<&#aeaS6pB-lpUJkzbTqNo zS*(pq&0I*$o7Ow0@4T_sYTWxE?*t2voCvRBWMHUNWbxw3xoX{yx#c!lmaK1UlNK=~hBDKC#b%i9+$nJ;A7!5GF^0 z6rJ!%nl4Ln=Imw59F<2xwA21RV#RkTH0J01YDSSP0V4o+;&x6_e?}GoOjS`oE@G$V z?Qq&J)9vu+hn-zrJ;P<#6`J*v)#j)jNKlks*0>fDiBI@3583c5^5D=NGUl5m0>E?hE z5Q->I<3E7DsmfM3vCp!$J5IPeU-k0${Zbi&OPYT4g4cvSjS$+Is@N;j6BVwh-H*u< zzCD>SqURjgtk^5BC)T~cq{nA$PMF!tU&Y^>{bd+fRjnH!>bvGPT(jCrgVDvd^_Tg} z;t;rKv7ilPjQE`7h!Ps5@4cW+G5m=s2_3O>LLdt5(a{kP9OecrG2jmKt zE)z)$)Ta0teQA&qhmztKZY~vpSb@A^rGDhFdDx03PL1JB zXTvAcSX&Z_h2wYB8FTQ9hp63aymj=>QK1n=u^Vpr_aig-{uo?jvu4igM_`D<5v~R# zzFNMM)q7v*;IOKFc%!fAEC9nwFfmcBnO&3F1HNHodx|+a@PqZ8M)@d0#xHA3wB8># zf+O2z#Nk7!-0ot$mW**33fZ|q&kO=k2w~6ASC49B`SEUQGWM9eYfZgR?I@y?0^DY|hGZR6C zS5l6Pq12voEL_lKbqmiORyt!rDJlg&Q+Mi{G_p!?24cTi+8Z9zKEBqG!)M#T>4ZrC5^0hQC4S1m z=>y$UNt7lCvef&eKFFaG?T~0nf0bu3Q`_~>YW%BzS)mqryb`O95oGBa%JrURe1;sf z)0Ye2&`Oa?`4i}hgE(JPD&6N;rTK{9TRhfV08|`ymjbw(DpkC{mPmY1$J!7#h#mw(GjfzR#v;Ic++ zRj#E~G73l0`;Q#t)-}%o|0xu_L3aapYt~8EzRQ;)e!9kUI91{)hSeB3`#d56Tgrx{t3+V*!|3RHr2{3a(jt^W{%8{veIv#lQ7vF8|^swEkH^J zLl($kL?!@N^D7FUTF%vTrk?>OXJ}(xoYWxVdeo5K5TYSP@F-o-PcZoq3g@0j^|a3j zqH;h)B?LI+yIzi0$Wvv7!-n#~C9&_GFDiOI`yn*&Y;_djQkHj2>Dt(x6FmHnaW@yS zw{qZJR4;SaUx?1Ai_t8V_SL7eODszR>*oJgX6#zB=O?dXe!x1l002aEG?>%=CWfoE zc@fz2T7yR)cNvF&(MC3Ue`+s@4JHT3Pa|h2-kND5$Y%9S^4@{II}cT#Vn+U5F|^ZN zL6_&KHq^eZ>`=xb=#9Jc#PVz2#a#4Za6RYLI@_>F3}(5)hL2*7NU{?B{J09DTJEsb zC$d03<)IY}SP=oYsUwyJW!d@MYh6g|9=^k_6!Jm&PceJ26nIn%5k+eg(ER@W0MRpP zSr*c01Y(^k8%qAVzE6tWt36B5Qg~Mz2r*j0XM|GxSED(u=)uI8Uc&k zKJ^g6P2>XwLLDzpW42DbsQrW8`Z~>;NM!#|5sG;CkydM79*+f+$(OKB<0|1_=_LPD zkZRhH+&_*^x z=%5n{z`}1|jlx%B^QfSV@oNC=G9ic$PEStZ#YGlck>VvS*8lm5Wo%fbPU~wUn>V*s zhB_8dJh z0wzcUho8iH0}}gW2%dP}^lD-U-+~1ptHUGBi6bt?lj_P2|lshc3h9!g*unMK(4tuw-k!e%DDQsLlyc5^?0G6jzg2!iY)9UAu-_ z=aOE;(XJLmlTLSz=R2Pi$T48>vvvP<8;nsu+(V61O?FXMC6BVp=&ic2=dk&OFR6*4 z`f{$)GjZ58feW?~eo9n!g|tW>-k4k((zM0_mP+mjfPY0d9IQtPaBIPw0cYAPE6i#d zA#MTT2SxbO#t~(rXt}S9t%Z`kTt;wD))&$s=) zo6>XK`YIuADt(BDMn~f={xHOmGkhw0mITuxBDdkqv zjxU^j?u2|+d8#La6@rnH=(Sy%15_zN_Z{{L#>Bg zh6w9J|A~r}<9sWW6ukbr5kdDKfY29}xo9f+w`Sovz8=aE(Uk;tJ;N{NwA*iOIF`}t z9FDf{c%!sh-}l9V0mzN^>0x%}@+YfqTNn_Yk6)p_h+l+8#Oq@fD|XlFE!%-WCDXcW zq9_8KA6t)@pBT3~ZDKYk?PMYW&`18f+$+tE?P=?H?JX>C2<+oBOYrR+ElNXdYj=Uh zDTB31gsq1kFjvD5!<$TlgafRXl?Fh8Rx`O6CHZLx|40>7K=STOt`q&pa}6y&oFwkQ zu7Rc6O-{;aXSZwkDsxH3c)XLz7_esd7vSEL;uR+7F5M7G1(0+6@vAc4Hrvbpb*)qZ zt9rsUKVLsTAR>xegnxaIcb)gS;0tSaa3_g;)5rawc1uL4V744-`w5c3HtUDhbZ>Zp z@i7t*eS(^3d6t^#r#Ay3UEgYzaSC}jaM4*}0+13E{&SUZ0m&3V!Zc(}r$`fxzGPwF zBvW5#0SH9nU9Uj$@gq_mUfOPb-e5Us!2|BpNNI30$=Uoos#w7(07+G=b(BPN(LUh`t@?_i9F+m(J71I zphQu|kgLK%K?dKhid15}T%DJsoHA3`HtT-sFhYVNlDh+Ea~X3IeG^ zSSuqNLZ3DR8*H$hu%tyHVuju~sTE!t_Kjy4mfq6!x5_>p0D7nipyI9Klh6n@$UcF+ zk*DBs6;$Ts?goDAbV2;^e?Gy5Ve8r|RKxup?PZy~0o`QNMXn1%jAz{Io9~(*{_((P ze#1gcYJs;Pxgo7=6D8_bUdY^IXeSPodxA;|)4Rrw+0kyQ#WmCqM-N-b&~SU7XN>hR zevoVH7tRRU@PcW}S-GqOH1Ldi#W~s&m5#q7;HMa;D1Da+o6P32q})jT*~YTC>FKXT zEx;`2O%PqJ&hk4gu;-C|fi@Z1ShpN$^lDc^3u+<)-_|Zdy8dxT=wA;1xyj?!S)06% zDPrpJlmvFvFKsr5)Rn#)1*p~$Y;;ib)XhE)%6?r6MfhZX&Dbrhw(u32)9X_bU-|4;+HtXn!{^%)W`L&JqZ*MHt;8}em;nL; zp})mZBe)JS#5<49Uy@{%=?2g%L>K$BwHn-`rFzqSWwTH+z*(o1t4uOOLf^GMgf>D2 z)(0x-L*&3j0EtJf$9>YEj)1WXGD|w&sqH(d+R%`+$ggRs=Vfcy4*23bA%>iaWiow)#c)?z)epZjY#KJWvJ;WT z!{C<}5i-B!WC>SX@?zQ3+GZp*vSVbc4it%a(=gg`7Rh{X``B@h!#l0(8WLi23fH3R zX(g=~xFqp=>3I{hFYz#ZBBZcImDeZs5ivm>S*yYuOlYAnGyag`1<>*}7^<}tQDqe&NGz%bW5QUb6N4R;F=1SLj-PI%ZjG>M zfeEhXlmlAMsK)5Ow=u3~QD>zgOvQJ31qty2{Ls`J z`VFRA1Y)s_f$IAqC}!uU z9N2W9bQr&Lk}g*t`#4rXXfMOOh!$7a4hXeUKK~=d_0RCt<4`ZSaGB3A1V=Lyl8+oI zeqEacPjw`IM0A=QckgN8S=mb5vKXu;352CuXzkXyX=IM*PQk}=-%}@B9#hF>?IT@? zuO#+#SF!9AXdP!E5f;NpW?sTB8TO}*Ec9gN8E<3_cfjodA4{%fgp#8>A35e2y~XZVy8J*B6E+n(jeXB+FF&2tee!p+uQ z)A|LwG~uMzm9+aqTu8(s5PA-x_bvu53w1UbU(m_$zK!Pu2nk$!?j7N1n2T)K+A2*U z@Ywuiyu9(SFR;Caf1U}sp48QH+Buzm_*w-f2tr~x_wP`cpRJ}T*1M7!cGv+Vl%S1^MxqE7DF30=OYT7f@UbRfsgvB zGjwX8lcP3la)?XVa|(Quq1_0x!!%6vQ-$so7YL_-oHFl4$&usIyApJ81{u{ye+j=f zbdSa*PefQ9(Q!;Ygc?CUTRZ&CP)N0i0CBC_Zi6YP-@mF#d^C_1UcP#Ugpmtw8IJk5o(lp2tVWj?iLyt+BrR zpeJRGmsTE}VvZ%IiVAprnd*}N3`on>C&8X1G|vL_(}xF`t|){{Ku{$Gv}r-mIt760 zpy763OK%kRWebt?O~TZMu|^sIv}KE)8G^qsPwKkdEMtV$Y_D1?v(s86G0CeEbLlp**{J50Tal!^VQ>!PvjSJ=S7}3kN1Sv5Cmp@Q-%OgOAgvpummO}#E@}UjF+YOd0X0!mhHn2 z-S6%f0E~v9VZn<_??gHn=?ItQql{9pG!$W{qW%&IL?PccNhA=zBL`|A9_9<^)d;B@V_M}1~sKqDI|=A{J_trS>?2}8k7{|H zkukx^B-Uh*fZ7L~e>WfKx0c&_8|PMqJ@Dq>u6ZVjd{ziRdck#ir=$?8Df#c^TGOR? zNHd1Kri{)biPRSD;^8ZGqAFXsEhnjFB(Xpct;vDPd?pm-cI)hAl$|8U@u6X zFfbww>3&MFK**73*wT2vc}7QhnAz2XAS>A-GRAUHoBLOYtB(?2lV*YKyv*`@j4~GmkKKc$NW-Owu(!&;j6(!5% zMvjQe;@Fwlcy023%7P9earJ`lF*_uLFJgpY^`Iol+*F zp;UYxr~y%rClM+`gKv!vW~;y*#OHswA+$riUevYHnR7lQ(A=hO+xu5__q^%7&jtM} zL2syn__a7PP;4239SLK)%eLCGvl_y<(##p-U?JSNKz2{k@4~{HBnxM~WFA(QQ4%zh zP>Hj{g0@d9UQQPEs?=8ibvaGS2`A{iL}M}wKswua(;^4BY8>&x{_yb6Kg&zP7CFsn zY-m616~~D4h<927$L0|LBa8dF=Q@X?u0LtzC)fhIT*>P{(*K7mxXce!$YCDb_`6!$ z@g-JOhkZ0L)L@7IdZaka|F$C2zUaFTijjTH7wPTq1jm&0&`gd)mw%}RC252WidVu&2JUl&rlwCyD>6;%w+MlwwvG`^j^Tj=ePIFyp($I8#`g|2@(G^!f)TXH!~-e-yj%j^~iv+&EvmUqTT%c za4DAyHi`{0Gl|Dkp6uAssj6-}Ha*tZwm;K8O1sA1zpdO7++!C!oE?60LGsr5Y>c?r z0$j9t1=`n$*M;XJ-H6W@uv|fGtJoevrfFFV;-i+Ta24xe%NL7K=nZANf2eix=wqpJ zl+TpnWyGS|9q>ADRkQM=wjkc`-yG{>B=kY$YqglC<(V`doQ{l7PAAH_{Wu`)jkV6V*C}26~=JW=lKHa3qu=zGD|Z?N!%1OwJbt7&~+ZdL0m0@tCG4Kusok zt8>n60E3zN`tBj>snK()+J4yg=T*K>GZlgJ27!-(jcTW{C$WT)p?qR48zm|_=e}I) zDPsIfrkF{m!*ovSrrh_Dt|p-bpUpf!;=eTiCg=+VbvNy}b}Kp~?O$S&Be52I&q;{` z@G!MiHT~$Z<}6_nb6On2%B%qiSZCV`hj zp!vAR|32b)F8`x1wL0!)Tzok%!5Qcsy8$?8pOH(&(Uydo?G(Kz+6~k-hl_8WeFAuxY>{AfKNUM4HxuVhrm;qvnXqL zhlheJg#=d9@BrWsb#Ndv5#?CY?{E4rsKL5=MZ(4DOVqV5M_DFev%f#IIaG|)HT3Y> z*qgY=p*VmzTb8G-)CbHiiT|fLxlY+-fG&qONz;C|R21pFz&wp5s_E?5_9H@*l|ukz zs5V0^G%k?A-j5g;5Lq@n*4yCr;emUz1Q_S$gT}%$NwJbDV#jz3Q6HAwo={97E9EfF zNOzT)YSdGq>THApp%MEr2J&+aKK)MaJbs!wZ(q8g!^mVkLq#L?c^mOeqi3^K6JG=z zltK^SG1Em2BDNvn3;J?kkbf;CB#2FYPDK=hPCOOhbp4l2V2d2;t%wjqVf&JwALJo$a3tei42g>%$#d3iL5SFw4M`W4_UEI}h)pEEc;a zbq5C?FI89CnB36CcVM8Mo=^J;th)pV1wgli@Nsr1A{ZE!ckKIUq(Uc7`lFLDL#Emq zCT>;k0cde?oHkwXD#+iCtBwk)1X`!{@Ld)MP^i97rHUSqU57?+LUth<&{vQ+uE{KO zY4@NE+A8$MHFkIqooW5N)Pct-_5XpDGtsf8w|M}k=ZCNhL$y>vsiY5OD3`M>=kLG2 zz5ueGc~A$UXoYz)L$CC4_s4Sv1!KeN=LmjK4YJP%uWXQ$Zp`VH??bfG##4s6nowawHC< z7W@tL{Cx`d$Z#)rR&Ya_UPUlWR)?^tysMMC8z@?t(Bzlj)kR2|K}WS;9$(G@zbJw$ zcCo&}RLpZW2pvQ8a!7)IljwfidBt(AVr2$OaeA$MH@YrKv@)TZ=`;r52*C#>y9O5L zRfjJXy~cZsMWN71JxuqaA{?JQ?ZYD9d~mT`jTFY|9h=-QlQGLYb`OS z&+ii&^Qc}zRX0V-${qvgM^M-57t$QbQU(YjsR3}Y2J52-&U#?mguNBq^=W86zN8so9V@JRy%U!R} zZ{~Xt%|h-*f6w&t+#&x|n0^zSV3hie>TTrjP6SkOvIR18ty^41BqLqC5s#*fPHoN> z9c!Eu{2%Y^Pl9j=vg9)qF2VD0euA0BRXNfP0`|wW@iqq>bO#h-g?zKug{U!=F&{SU zy3!XZJA?Z}CR6UB-M}(M2D*s?WX5Gdr?Qe2;KyC}FV3AA)%QD(Y$2l7BkpqU%=jUt zAb%~D0Xp&6Chtg zqSZ&{8w-iQQ$>6e{lQ)E)A>^uKsg+5vzkx4Q!zM6f<^_Ibvtkt?s|(nwbvX^lY9vw zB!|;blvarN5dz{QH|^^B{lNvvlof(KpSUOtCgeZ!!-Gx<4SckWzo;NRMvE}7Le1}j zU;ZKBqtQvRLCk=$u?Xl2;3i^aDqAz$M^8Z;?ZSUml?x2LNL@(?uU5Kn@no2O+Zhbg;uDK zeK6!&he$D7aIJUzt6iAbt!ctUgDk3Gp(C@?9Mc=+VJQScOZ|2I1eGgH!k#pBU77tZ zRQu-LOz95ZHN**8`naA*ou{t@Z=U!w0|=3lyQ8uj_|FkfLEcqkqyO=+Tv~TE&1H~Z z@rBO80_>WCa%T&O$ByT#!Fxb6(4vWq@>jI%e_b9lZaN-|U27c&_SJ@Z?^ucw0qW;? zR+Z{rqvucYBck)kDlj;&&j}$8Nd8Z5FDxoySLk;uXs5JGlEU1ku9Z^h-pW>FwrQ-6 zd8+PAbne4kvc~Lh$!jF-3OuTJ>0erbA%aXyG+?M+E|To+u zkB&OM2N({r{GF3g=sf11sR7}*ieq}-lpk1Mr?%MS`j71Hv=F5}R3_t_R?n5*8k;1F zw2o#G8p*46Cr8Y_Zi8H#<>a#1Hx+Nhn}eHiCz`3WeWc4(-k_$4LGhXeaMRJY|-TQOm&O zN_J$wHNFjMrl{`av07Bdb=akj9pP+$MmMBQ=|_r+O#(U@dVe^gya-29AwK$eAGehS zcexV0^b#&_+)oK^Lpa#TOW4B-E)H35E8yR$kzGiW+pb}{T29XL-x&V7QXjQ4R3%6| z?#nranyM1_`vdNjW4+5s(&w@(06>Xc&Te>{7=-nxvbO$Nq3EPnHrWr?4dx5Vm)5=k zelc6qiAbUL==iq^E%Xhy6C^DUKiO-KyF>AIRSmoZyigzuM957V6OB#l* z^X1{!!ck}}l9P@i`4LojE!|GK00Ej>1>%R!vQk8u;g-5AfHe$b;e)J|!%y+Y_mP-y zDicw!D_AAsz#>@+c>$$Qr94O~i=;7Phdp_rwzU+1d6z(v3&VW!bBNL66EL_ z#4s&qshw_1BI<^lZts|wui6Tuq=v!I-rHeJ7!q5eNn`*wV$JT<#S_y2eOH+l3-m6I z&y9^}Vd;pBm)pQr@H})$o1)^73DQ809ZC>8+3Ss94)h(y2?d?m#=kZU(dT+0h{WePpKJiI~>1_AY z>n^WBDL`(0gIh`Ua#Pf+OeGzBgoQ4XBt+k|olu$l^K+7hpPGp;4G@NK^r#N|hN4XJ zb7Hz%D|EO(Nbx0bE$U%qUl~ivXhb@!2k;Vd0jp$YK$A7o|9?CRa(9sO0OSBggw7myk_wuzRl0Ay1>)heKiRAJL2)>&Iw~X3_<&pTzrT-34hRVD2bI zlaIdu3@>-P6e#iB(Ct&i>~cnl)kK8sw#NmeMc!fQ`;*k9@hyH|6oPL`(sFM=6q3g8 zq0VCP!F1{oZQ=i)N7JR|UJ2(-Gsa%AEpy99CI+3z)6ZpnrXBH*4_%u_!;2&MS>Xdb z+Uu6CRT9r^SMTAK{pJ8y)x}+xquZGm-s{Xutw&sbU7)l;c^HRF&*im)%%-zE!z-in zW~J=LA|toRcyc>2D%i-sS3{!aa!$5C&To0PIj0iZuYJG8U7wYdO=l{UzztA%mxnI= zQCI-B0(z$4t;y9VaH-@lr~RRVTn2luhZD>2Oh4dQetEP_&=LiOvalQ7VgUoHYk>l` z;?J;|5(uD4)bwj;nOfE_i(0|0>#ri5LV|he2HD>JE2p#|-2~9(M=+`@pK8PJgH?BC zZs%w4AfnZANZ33Q#a(eYN17oldtBf3glB!Kcz5wA$wM@j|x8=*R%&y^KK zf^_e{nwPVcF?rs86+`qc2tOIX_E&sKj~(|sbW;~ zijls=3^Zc;c}MI~UG6LEocjYDe%}qN>t$dIp(d`%=3nnxm`cs*96eA8tJiek%jLa? zUDultFd8zV?Qq zqmn|cIM%~uzv{dM-<_+f4ysk>Z|jj23vQ`*I}@YrHxHC~f;_39 z7%w0Uh0E<*Q<||z`%`b9^>gAlR!CtduqDsAC*M~R_Qj85JHg=#odZJoC8WF0>-(k? zk6q|aFOVU|6^q^Q!uFdaRe0WWu&8KAXyg%tCl9zeWUzBs<*HH?D6sW+yyoiS>xs*7 z;-_V)qsKGPMq56rj)bR<-Gv`MwAZuA835Iqg5*H_DvnQy$OpiLtwt1Y!FL`5eyko< ze_78tE$eQTFE@{MAy$pWN>JlQu7O215C<+UzQsl)wp9)U{y*Y>p#>#^Z!R5{i zCpTCP?Y*x&5XSs&r3$S-OOw8s569b-HmKNb;^GS!iNQ3OVq=ede|{mqS8Lm{O0R-C zN>)?6)2(e>!JE7_QDNX@m)}-3@-oi>c!ERKc!pIxJwtg();;N2LIo>1>c8_10?qH? zK1K+6WMZoJe5c^namk+ssLCI7mhk$pTh?J9dnPqno~#)#d!?Vkd<1|ZlChOK`4FC` zD~#SA1)~5lJSi`zbJxI=3!{ov?-wKQsMR0=r-J(oo}E0~;t(j!$(OG+k60*Xv&5@1 zfb}GmxtU)AD54P<-RwydZ4587_TyDeByJp)9WRC;oqm=!j|`CccuwF#^%m!0V$K*Um2-y_hDVY#I2Yz45QK`gD>HR&v4Lf zX~QTc7{k%L3Hk&S>Z&l;-%`F_L~zGq%2D(nc-oT=o}}DnRckEhJSrA^Zu-mBxr+nf zue@OKD5Hx>DYML7iw)fy6u~FX^6O|wdq>g;2MIfiC%yOaKHU3t(2=TO0@>PAb#gAK zRt(6UJOp5m7l9uSO3d@_q~}1Bq&tA*>DH1CVucpYLN^S(>5BO>%BH1~du((%Kv{w! zW70vz@CGPcB+65hfJxk9Qd`jC0eRnwt{@&J^&iJN0t5#jsF{SO1*`0Y(`>GR<(DRZ zMRVDi!W*Hq+L{RKjK6SH(-K{yJeFl%!PNFltt`N<9e`KFn@(r`-|QeL5 z{d18=?DM2B+QN+Fh?%Er`|U);O_c-N&%bWRNS?a4DyBpwLnK|Z%4jM!R(N%@^XTu* zC(fHyF(xs@5gEVqB_9E)GG{nAujq|T8vgU6c~l5*t2v(walg3ru_Q=dcq!*DVY@2! z6yXc_#oAU@pJZ*LW_NezFAEm%O%YT0&&1($vR4gJGWfs-Nf#VzP`gj+n}uLKJJIRP zg1ezZmt+;nD2@FEF{|(GoJM1g^WI$%Zi{Qjh0_aq*P1W{3A40=CK^MU;_oj4OJ!a7 z>$0eQQ9SbYf@Ty1qA=!wgL=6w7|$VBgD02UY8_jV_MRiO(^tQl9^Wrg)wEW-Hzx4Y z#uX{$AJh*(HhE1dd47^q*EUHBaczX#=7)=RxRLJ12hf(>o})iW`bdR69Eo)yLD7-q z9#Gy$m{{6Om4Bh65@8j_RIYsDcKIR=S^K2sux{e5>qf$%{+%D$&uSCko;0*8IO);( zs9)0pD`=GNYs%3a(w?upOyRXBcAH$coVXpYYl+Q{2lqpe){&~-@eW_OMFaR=(lLin zeyeq&poWS2znZe8!46VcWX{D#hJ%+ts~_N*u>}^Wx!SP3LXfBRu47aU0@2M0Nw&oU z($jtry(J5!I)Y02my>oj%}#oA(TSq5tyvFcB@9B^10-G`F>>mMB>d0z0B@0lwIK{z^O5GAgC4XeE#HI@Nv6meS^JbIkjcy8>yevZgd zVbxI*Ve1Oc4Acnt`***;=Jo~+@*HzQ;P2ZkTRfx%YR~bNL%;VpdB|dLUr7-YhdIOF09d77INF+)@E z@;9Wpq^7bf$|a(mk`JSL)?NI{PtOa$pla^`lL$S7v>T>%DV(<`O)GM3u81(fa<1dk zgLipyK1wGtjQ?Qz+jeQU!9G)C1J1;0grsaQxUP8VZwt_ieTKv~7@~~Caf^STGX5(eE(;arO-~oHaF|Hp)d0>s;#Ju|KThU%QZ_2;AirZ@v zK%~=C&$4Ro`}_2Vy{(oq`F@_fk(VRWe}$hb9lpc0l23E z))(UDez<7aX-;L_j@NN==2E^KEvy@l;JtW=!;$&&7Yzg}-;c@%3t6%oi`$qJ7;)GE z!6H8bXsVU$>#9wLY5Ic#UGEfC_@tIO4w*z1Gb^>MKQ0bwznJSr1RySz%>0yK0RC~; zr5Mr=l&%2?zN^*&DCqm{k={IFW2U$EWSK{8TT45M<}aC?6$Mj677h$sVnh|=dxSqE zwfz2E+i~CdfHG?BP-=0~yxy*_XDVtQ{U)7!Do5C73`Rl6)>dfGC4RvxwPr%9Il=p1 z+>~Kc1R2vu@l}+{%!Kz$2gXJu``HTYW?~?_9k%uAG0&Pa%T?N~78Mx~Yau>>4iY3g zcsE4=Ki2Ef525w`rh%$NaSH_jEedu#kYO#(h0_qik7{(!`Em2QXvJWH2A-Pi3Qhoy zWur>}@8={xEzXcIO=QA=7TGv-2vzWVs9TQ1K@C*mp&IOHS|_-lYoZo1b(7Cun@*(% zOZqgF&z?uv>YWj753xqx1+rj?hJ?|7KtqO(MTd?jn#+Ne$&g;Z_BI`Uc-zW&n@*%~;LuL&g-?Y3;@S{R?ypsxYfT2tvR)n(kM8Lh zKFJ-&d-6A?bon+O>!=bm;3Ky5?PhH-V;|-MA{PwN8@@T?&p0Zl$Ra-kUn`Krk5`2B z)47I{n`w7?2|1OOUoN+7o#G;8S7`1~&IBjcUe6mG#JMC{9MV0;fU%0Bu_t&A+$Hi* zWNJ7hxl&c07}40EAglv8bGEGBFipy);#^~BoDMelx)SMBL;H6nrLV;b4>$&`33^eQ zbb}C3yvOI?jXLaNNYUi<`gOTY5YxTgcaFZNGlCy_!WC~*qo+IU&X7Br>4v<99@UN_ zoU7DSdgg7$m8_~hQi0rO9-8r-U#RA6G+A^jDV00DU?HknVMQam{z*C$a))g1{E9T| zofsqZjNJUBLa+6^T7^RpD>Pc{Hc}H;lrKz_KTq#{4JcFw ze2&9#YSeC*_5yl$Ps#PcZ2PDF?<@69={yyqtbz;7QrRPM9kem&3%+U~20sJ~tjFv# zrV2VSlClyoEe3hUd5$U)F7n5RSPUF`>AP8U3g%nL**p3d&CeqGUvEn$l32|ph9k0- zln88J=}5nV8t_9m*lWSTe4#arAJhL4GD4*~UaHpFQ)6#Pa5dq*tVZ$&SjPfE2~RoM zHlS7#*W1Mos{t{(0nVl0I^CeUzM>!vc1-wNU^Do#1Q@<=E}cAPr=o-y_XJ5Y)L`x0(C& z!EW6J%VK|DpdEvD*|b5Wm{f!ma-IJ6lFqnMz##FW!TQZ6mE#P=iGa(C^)du6V7;)| z1qoYLAE*$0jGL&Q4+V3AYt{mPtpJcMCqJ})xh|OFg{ryNXUS>!Ju4m0I6YBC&|h$@pA^ zOCRWCc!+YSl&mbz0gOY2s=tWg+nVaPImw{}>GHM)4nDQ>&QL6U^LZjc>XC6nqDw&O z7xU^7z3iZt%)%&c&{V)100bC(>pZVVzIhthULDd3u7Gvk9U*7`!_oT!YF#s|HIda5 z2eCnetXc5fv$2LF>~rje48j5JZyf0yrh!8aQ7Q^sDKm#Icw+TEttf=8%%jt>joAKJ5eG|jF07^=uZgq#9cc^aYZM}qQs_q&&ZJH35Jc{Jq6vVG7r3O4E|1U9 z*+~i?AOJ&is6~iycRW$b{WL1-q48UcDpoo5e-IcXCU@34dYq}$k2n^CjM?}myKx^zjzhE?b)v0!#(Mw!T zh%A|UZy3ZpPp9DX*13bHAE2&5-zws?KMM^I38x^t#=LpEC|zbAm7f=zY57o6b#$iMKf zx}Lj%&P7k@omd_@`D4#}mxm@{KkK0CRzKjdkugtf@EVZ<56eh850*x2m2fDavRXft zeWw-JV7c<0`{7}JhPfto+xQ?B)b_5{GK>`h3BPUR`^wVRf%ob*S1Pcg{D3l_r?DL8 z>?>qaLJ`Ippo~2rA*xk;nfS9;xYB2ZEI_MMjFV##jSxf^|L<4vm}jUM?Gw>ZD;#Ze zEZ&EBnapEw=#+xm9msim{IlihALy+kqH64_yP+g+=<)*R0s=xLPJc!#AqG&GxSifm z5_D8GZ5Y5SuUp_#kW@!h=+i@|^Hjg~?xv-hG(DCQx*V1tUr)Gx)vX5C_UQG1U$d${ zPx;%*mO5&6CEp&sTY9p)17hxo{q|CS?J?QU@2xW}V3xGIR55yFJhLpHYH~w?=3!zu+w+KB)sM!lhT|L;f^37A zEsLZhjS@AJ@+d|T=I8z#x9~uJC>^>{9Pz{LUYmnNV+V0QO`)QrcjLMnJiNQ|x!(3! zjT?XEOHOMzxtm(}&NR(OYw)m*He)mm0S!EjEDxtnw|s8%Q0ar`FcXbaBSjV^C{cLU zMVcrRoApkiB@H)g+jv!V{1|Ds)K-$Uc{S`ZbM;^qkjX;7Fz6$J7SmWBXOv}-Jz7G!TR}5INJ<+ILwQ}-PoCJh; zy%+Ivgu<(T04Y_XZKX!F-yzY9DOa<~)0($prnwFV2|y1|mUISz4J?!*S0i|R46Re; zw>@80ZC{OcNN5jralz2JTei>oGyyQ(w-QyJsQ~PhFIInS#w86#A3ce__b*JyA7adXD1d>;f^+Ul(P9L+f@dIK+pvrkd?4dvp8 zM;4Cto#VUW@dRRw*tp$9yFuVs1qlW!7!S>QlkE$OD$z{m`J{AYIL9NOy7AWH6vOlG zMdt}8SK*7|20mrkdKgA~Ejq=iU>T8zv+X)CE$J}z2SB&))r5!W!3Yq!FcI+RyN7Ro zmR~Eq;7MnA59xzB{KTVDcW-4DU(3Q#7n%{uos1Dw)g~b8lkFoNo!$tT1n88tZsJ~Y zrme7F%LE7AJm!yrteZqZD)?|8yxeZKb79gepFON%JOa4AkV21_byZ4~Yq7#e>bV1)RvU$y z=i#fXz_38a7;+qIkt(9ka#2K_XeQ#JHeVlQICACrJ3p`GMc5{5e7zI|@?Se_!eky( zNSoU9V&EB^Crom2czI92jtF?Xrn|f2<6KHB9@I*Y(p$BD@MaWvX^oFOwz&d!K6_6{ z!l3S6zAB|*4`+GM<@e|VB*747VQ)3}tzuX_S7O!3oZVnU=&7Y3THBds z&0eP81?`xGdY(`5>v?9i_9|Fyq#m$KgGIDhh*%mi#kG`j((Y)@w2*)y zbw)uV^z>_CX8aHrVXF$exTM^=zwFhnb&{rxQeVJ$841}_sWktTJ+SSi_A6LkxKjk6_O%f*P?CH; z{7c;03`K;D`sR@L&8Ttz3_>S{q@39XE()y;Eg1)7N(RS4A(^*MsV2}{%dm!EJip+d zAVNBx9x$$XyAi3=4TaR&aad{E@5oZR4N@2yV%GdnLhm;a(^rbsG>}@*D5g_*USssS zYBB7!du_w6$@?Bb;M~azs~~kDoKre$dg2gUn78->R8B%dTVk%o7o4}nK4 zJP^v-e;JPZNwhKdr4rC{Lv4bZry=Wjq;7p*bi-BO1i(2EQ9x+?l z@aUKd?FM#gEHG=J5uQCu{?Wt6d$+xIECXFkuMo^Omv*kAtH$Jv>m^KCT@*2<0Gp<( zk6f!Y06XQjNrJ0j$0nJUrs!P?UdA_oS`tj}D1`xT3krf&g78YNHj`XYSaPQyJ-X4I zP0u45%SKQeSd!VA0(2Sk3ZZ9Mq3_##hv*ooHt=~CNBA{&#(|3Pq(3dD zadGTUy*(2!E?aLH@U-_)3sJ`j_ix)2BpWML4X!J-R2!5soc^mO2V-F znGQ0%2||&1E**A8(Ctzzdrk4klmdX6HY&@M3sKp7U}oRWJ1j|(w}^SPC6FNpRYkc2 z*cpcGJzulullKxLx-i}G-*`hhe)}nvf*DBC7>JT#wMUTB;cp1)51$FGQTWb^Q9){7 z`V`&wN6?DAxKT9OSQ)5>dz)sH*G5hNQ>haI6ARahSLI$S8W>#H28*)OQ19TjCm7ek z%1&te-+7Rer4GYdtwCHuo2wJ2&)^Eb89Bz13*m`=O|#iC{ZeZqjw|$SjMQ9hb=Q)c z4JidH+%@ZNip_>-ew@9^BY5q}b!Y}PR?6Z@uhT;e#wmo3s3glYM2HO6R4IbBF;(8hf#(<^XeB%LQTcv(kH`lbyVb#O~ExScR5Ya1F~6M zL?)!2Qe=>9?GCzi>tPwW@IalO+KOL@&rV=laTGB-^j)a$j|f_Q=6SGILR+t*k;oIO ztU|=T;ap$8D=rW9z7!>B0cac5E~46~nG9TkVg}SIOM^g(h_OAaa9J4juC@zStkS|( z?jcsed}w1DUb@fhp|8F{7<13u9&IsdZU-s6+2wIzvyd~S#W2@)@*Hm`tKWu?Os|T|5%teHzIVc(U*~+d-xs8lZ%0tz$$+)% z5=c>*$O7((K6hIkUu!@O|H##rb*A#59`xT}vBa`5yzC?ol5vp?fRuy;Rd|>l3CE!G z|DSaj-1ERaH{MYSSL3Ylsx|vtLA0wNPid0;J(c$0_LF&M}tGTX&hdi1d{woPMf)y|6?k#og)>=z;$tMXIQb+aM%+N^igciZN#IoCz&^ zQ$VH*7n`STkT|m5en|}2T(kn+1Wc+|mZ@lL9|%pN)!YL?ogs9V&?xP|=0aBgOU*^zl)=s9hm z{17TNm!HcJKg=QCR}W;xhqTaLK6J!V2D-hCUF%V3!6tg1Q-_f|9&NmlJ17l<$4*V6 znS|_-D(Cu}@t+Mu|B_E;ylF)IsULEvbyf&Ndnq3zsS{zTEQ|R@OYt+mEYIQ}?K>&) zpLW6cHC2=i&R834ArzI<)p9z$$Qc32b{QPoND0YwZ~e?ngpwp%i``&08bV>xOAx@- z0y}l0RG>_^5K|kdNYhs@`&L$Z%7Ad413{YW?3ahvK4wbHX!4lxQ25vTz;J%*|C=vm zYU!r6dL!lb+slj<*1X)cv?j7|cGKXb_|vyT75z`G*6=?lD*`31QuuDD5X~urMSVl? z&NIZf=zES=kVBr3ut)Q=?4FUzy%txv%wn|9JtO$f&WTtr{!uL)l5#+PLWoJ-ERfD0Py; z+KBHnxLj%4Z$7N<-JJ?xB@wgI;lhXWfy#%9Fu9Sd;i7=kCl_+eau=yfaaC;Nb@}; z0DRawC|B1oGL)BtPK1PNdtCQ?EY3jr>evBydG3B9nxX<#*$Xtyx9c7-9JgdlJ|N5K#B~^WSqMSf+SY6I?)SW2WX$B0 zDEU{h{$?9{kmI`V=}}g5U8|HM9Wn0iP?9~`p+26YC|Wv%=@RCr^~jQyum&6Q8HP(^}{@T~V5 zfhZXnBIq)>G!{{rIF3LBqwVaa2He1_0ux(tBv0YMJX9ZDauh|mDs~`>^IMt;^FT%+ z?yuOJx9wEsAq|0oUHJLJEKiX@@A9N&bUX}06w^qG@|mP#@D}AXQI?Z@Ob^+_RJsl( zW6N8x4!&O+ggs3PfYV(1;i73cvXhr`tdSVIWJAA}YqgNn_N5$@c)nmT0>5zQ{bF0n zre`MIzjYahuj3}DzDaY;>b2XJZky5)7B<-y~%jnE{Ja z>bqMj($pmg92=4f0!{Ci$2`_wfo2yR1o$jMAYOE=HYdQ$DtyiFlWG$8Qe zh#fL`;n!QFc+r`crEU)SNKM4z>7C8>(BdPzMp#+=J-~HY+F1XUN0SP)*e9rz%@lr( zlJuPT=c@ylC$hRMuLlN|e=&Gy;qAQD(S7gF5DB z+nW&fzh_yKF~=}_PX`wu_(-6=N$yQ>2ohNo)a^=b^lICjM1UqS5a3yk)fe6Bjwmui zw{DYB4`cI?Pe@+ISt;yVzu3cL?7e%2`QQgnTG}m07)XH1-=YcY(#=zHU>`W_?gwcB zFb8?uQKWqSm%tl94c7Au`Jh+*Q!uzjEh#cWA5@m8U$O(F_TQcpe}~LQ#G5WXrn|4j z1rDk5h(+brl>5t4tNU`Yc3@tBpq%4Y$s7y*4ys(I!?-~HI1&Esd1~;RejS29kT|54Vh{s`_Iezg51M!w&w?tV4_3 zJQvB`5)H#=#}j82w)^ z?$zy>Rj#TQ3sE#qn8{PJDfBEaqAT(Tuoes^k^hZM_j3Z0LiW@hT*{@EUlBqz9?Pw@ zh~6h6R})Re7?{eqrob9oQDdYXCCG?b(yk|G@mFFOIRJbbF=F`GV#%B}?XGumIBqB4 z7%@SE8NU~XM*h_QUK!{&K~!4pL}+(3beslQ3=oAtv^d!XT{*nPN@83N7F6EWrM66< zCz0s>L)cn7fwFHuN$7dm4x;{)>qO(c#Wb#~hAFgHU$M!PEf;s8ew&v!fiDO)>FR>u zuaNl#W{%!dR|!w>W?mmyR2Bf6r+X%Wr{wl0o*v4+-+O}&s=ZfcYXKD51vpdJ@j7s2 zm1sbcW10`vs44cI`uPVRWGOm89HGKJO^wo2jDUc26H5^dO%wnHjh9x( z8Jwh!lO^CqNm;+|1;qGFQJ&ythx=cv3n*q*idT;32+kgozjN9@zFp%M>VIgM#WTd8 zI$;b1?;Hdd;`klhbf@1hBgx-c%qfn=UcU2ZodK-?vLtj^0zjsF7BQnd!>hZwaz{RU zWDcBLe8mBquSRQ)=a{sjiaWdJrfhCKusGzz79MJn+L;|J50zSOs3FL_eh|AL@O5P8 z6v+#}pz{3**GmjnJ$yk6@%{NvmU;)upMA86ahr0cq;TMpb^EQ zK(PtVW4|9PN+C&D8RlzTtoOTS*{%%B0uVJoyXa!Ob$WUwxS?bQ{lyYdJ_J3CNcu-7 zPi}%yVK)Gf8yOGHwsxIqQM`sfbjYWO-Af6`Bd&U>B&_%1fT3U#f0wz=<${_#g`Z)P zmUQZG#T#2s_MFM1Vm9023wWT(F~E)pPG+NFkhv#G`o|i;$u)0?noIR+et(~J8hukc z-a>hnam!a^!8uxk`Mh8G=Bc9XDa9A2pivCR1;F0YUGetfSyl*TF%4jx(&nyzntD1T zeBCo2;J`s`^3ii8Ykf-N@1v_Iud#R31`^{l=HbM`%0RKjJU`P|7lvcVnnKNJFYi@* zeT2oAM)2IoGpT9f1L|i41umugBh;GA=ZGcB1din*jQzzeLJxP;A|a$#Os4!uxk&)n zW_eqRNrkpPOcgW0786rc-uJ;B6>w?@CKsV*t>Kx(LCf-={nFD>4M{ekD7UHL9Bukv zDCTz$(VZ|;?^%6*r1T_22ovt35hRE&=z_b0nAciSk=+u&6ttLKu}IdMK76%tJzh{R zp3o#6eH&kW?)Ul6HR~P5E*3VE((vM770z<8)29*8fr$(eD<{?wHa=>IKPrNR#}}2P z9)ODE4yCKb;--8#r=_V!6P2YAA97K7;;^-{FY%Y{i9Ws1{|o}R)}YEp_)I=xR^2dG zgMkRa0%Jzp;g)6ow*p&(V1#=o(CEh1RxVHI0!AU~5PkO>eL&afD%8q~L5!s-X=&pa zi(%XGo~T3?I22W2nadpVb~$DY=RdHv8v)Gyjnp16{iGO@IGQ{^I9_dD$LKq3FsnF7R^FFu9k&kdmz0hG&s2A z38LRViljLj1uz-2OriV>)rS1u74->MFL49Ox6X?OYcHqcc!|xfR17)eKfcrzncJ&Z z?x7KCvND7;8GX1FmDwiOxK@XEzyPQhqbQ!0*ICR;e!*rYA`n~2eIg@64W7`BD{AIo zveCVdK3bGTEuSE3`Pyfi47@`Gesv}E2gg0)d8P=fgGy7urBZ=X&jq=a&l0{fX7k5m{p`kS)yt}!_Ug@U@ zBKX`1@@DYEEr5tZ2;V(xSEl<9hga8WSq*J>4)|pgOK!cT{zwtfj_M;2juK_gPGMz9 zu*KY#vkoo)AF?KtY1%;+g>jT-FY_Pxs!G%GNwf)BN*p~vq|rodFmeSFIe{GV!K<7)YkZq0 z1pX~}?6mvFstC)a1ifd|!^m&I{Js2y)Q8O}pkhP+FR*O)lgcz{TFzb>y(!%cjI;t% z6cgfjcI2WU8gRlE@cb^{a4z?#9Bde9I)vAm(F=zS&#Xr^8|wr=tTeg7e~_W>Ol9a9 zGJU*_Mtu9X;t#C(k15@eH`nY#tgS+_hBCL;Q|U!$%Lg4IPafN8<1yO7`Tn>r7yHS2 zS2(?#xiK)u2dT|-V=QEAjgE&X>x?PWfetCKgn|?eh-7mJ3YeyofvTW~M&>tuoEGC7 z(>M|%r>YZ>1=lflR5j+LRtis^(XBdq=(vJekZ{<~L2xf8dEk74i>8pB$ef#UUZQ7s zw2SZCwATIBd(B$iAORs(+xv<_|PEm)lM6<`x{wlNn88ALz%*=e451dLq;O$nsWxGtTcNuiG3Ux)yI z0`OLh6D{R5hFPF^8(jLnFEVzPdSOpnJw*4Beg;g@wNt2n{5&KQI&5oRc*0xnHHa9B zD#!~s{kb|nwA@8#qQYH+YPtbY#?l@mt9%aEGAh#W2Va7?UbZU+(Z`A5+AfhMqZ(D={pNveqYL04_TgX!9A5t1zmG&IP*K+|3jkW7GuRskM+0un~@$#=A>lX}f z+BOg_Zxz3oV{04B0@Vlnr0S=izWDU!f`?%*pOU}!v+kO09;Elv?_}uMF=sg>)X}7$ zrNj00EvrF80zb`zpv#+kkWn!!s~$^$M%>M|Q8d7G=Ex1a!U6EHG6w$JqWWx`iUDEu ze7O`9;0gC$xlvhwswngmIt9Y3Ctcl(GArz;QALghcWmOHp;vK@R-~^$31#J3uY)c3 zRD^p}AVQD8%U@>?!oAs5;(_`2p{&9rV`MmuSyXNj^;to*UrC7nq}Islk5jtoL4>1v zjD(a2uf41#1ISoWkOTbG5_Z3OakjGCe}mJX*Ip$2v5RWi=06YCrzAE3PzHBB!soME za3G^(DtR_tYpX@ap9R2RP5uIzK@kK_aGr_gBIo~1E&GMadhK3iO~NDW?0aPBoTWi$ zq|_6>HO)bghU*`gn*hN##kBp=^a+9y7*jd7U56yc^LEQn!MF&;pO87W3NxB1Vbjuw zBODEwnfAg3IqiB;tWbbs1{+5Rq|EFo-X0tI-eS62QFOFU%aYl`b8U?>2RFT4{8S}O zq7Tq)#3X#{sJt)rlRC<0ppdY?T|Ug1%B+z+QFw=!(!!kuhTG}g(d zX(ICS0r$p^T$Q+iSj?1wi3%9rI4mPb3lt~Kop7EQVJS2R@X^GysPvi?MrNAmL)1$S zkaO8@wTNs{voez-hcHM>S08+z0!5YUpevA_z$s1pS_hkCX~*o!E28}8Rcts6CdbuS zhvQkUE;C?+-kqp(zlIcgz<8Z>3z{jfIw6H2Is|y6+#9L!ZWWwoQ(YNd!^`DhJJ(ga z&?!D&`x9@qHdk~(n3!U=*8&?_m|D>8@112Tyk97xgY~%z%~Pz+1egntYb^PMB=z=p zs3SD(R~c~aZ2;Ir6hZ1`Epl1)>o%4y_%ezHkP;CEv41NJ#1QN<&=H15^fO{wZr84G$1FkCPz_%xNU&ieV@C@i@xzdc^N+%=Wz|ZJU{0v5q*uNXAqTl_$ z-T@cSE2kj7Ciwk&aP+xs#_g*6#`h3M%Bks_-=_dIgJUWNq|}LwR?3Q@t76#t9Mh?* z8+d+Kh)+B|S(&K06BM&ubzXqvX&k1$*On(D;*k3>r*QB#T%35K8w0qjo5X>YL<7FywF`ylWi zoFr`FrTtiz(gjFvZIEEoRKFH*S-r_OEW6&gwdkPm;m2D-4yL+bB~ZX{j(AHl{7%Lj zz{7L6cjwgJ5Lay(2)HMT8(T$2ird6pS<-6? z_Mn|zVaT{2`iPYi0PX&;^D)L`uB6-Hr$}Mi$;&St!I4W6X6p4a2Y()7TWYf)Ycc&J zp+xd4;qNpH>2Fpn+Qo@2a)a$ausOAJmTPWayxRZoz^lX_*Gv9~GTMlk&cpSz!eUWK z2jrIn23sK`);9csDmUeIT$ z>!b+2@V`86T`M!ff22X0xPrjKIGma;%GN|E8V|!@wMBFHh1g9jn1f=r*<*Z|-(&B> zG@sBRrTbxtMMk*j$bKs-LYoZC)9o-Gg{B$?YLYCtKzJdI^Q_F?c-Yjquu?XP50u@! z+GmH@+_5+1Hht|DerF%M07>;hWHUAZ&G|zXB`jvhhE9H>BIZ=$UdDNupZoroB$)30 zms=X5V(b`?CTSFQ@WR2`sf8PsowEhkC|CELKE#9}$I#z5G6h_W0MH5Tci9v!2@M!) zg9pBZ$z9iq*xfqBI~(*yvgFYw*K!*G^2M3Q#nAH8^Tr*c&-2rXkTC*^FBK^oRRWjB zKWyr|qWg4)t8{1qA8PSJ)hoPw*jV>^)QAxI&x-g zXub_qzNc|I196xQ^q@S)W?0JCXa3q<@m_N^u{o;qe=Nnb`ph|+54hB?SW{#2CiG4P zwCPn_ihSjdyv36mEQv@C-=p-J#2Ggfp+xnmW3VPw*F_#S{h{V` zfiA;{mH2)O;g;CtAA@*Zb9xBLke*#AGIZ9vLEb>c)0;Ndcw)=JAGOH=U&S{5EMxnr z261KsGDe9k&=@F)J5T`;;1QezbX0#wt#0usOfKaa2$CkcMgep5zrEp~kkNPoa^KCR zsU5Gkk?o(jHtrKFL8G{ySDw)pX;%77oN71qnT-3}pu1;D7(DXG)yvASGntk**9`mL zcp#+(_gV{qt^RV^fs@zMRE?OKE^I=`IbB(st9^;{#Uq5T3zboN`Rd`-JL0V+#Bdjb zed3ofqeTbD8l>@|O!0VX&iuY&IfNJrme-W(W+Fl3nc2w#BZPBLM~pc`&MBT{o%aB(C?)|-8%Wrcckr63tqRc98G8B>88jyuJy7EZ7NJy z&-Z5w%>9!da^hGf9!$)U znE+Q@+8N9lCr82kjLajt=l{``Kp`L?;HxSFuil`5q3_MzUt(T@28x{0WvcUDgo;=+ z#PwbzFF?FSU<^-2Z=q%=qzsSdVS11Yc4yso?tGJ#T6jX- zqq5c1C%2)_$@Y4GghVt;EG^B?g<5=~>F!HB1in6=Z!}r+A?4x~H%yb|r?k%iK0&GV zxZH9_sbnpkHKl4Rn3&C|*2sE5qK5-qiVFRQ%oWywtk1Ig+Q^R`0er*Itl$YM^7AJi zpJ(CeWzL6(LB`_5qpL4oaOtFU6a!&31J+*4u&f~EG1VNQqa+dynkI{`!RMd1^yOaM zGrAzLL6B?WB;c<2(+HQNJO|ui0J#BB$|OZ$LCZd)h2ym zGrk_#NZ&uB7mV(j;K&`~rIb-zMp^zhK`Po=eaXQ|kVr5-LJbWKZI02p0{4Jx6@(kxs6Vo>lF)a8#T&l(B~} zTyTq&%8qgqbPO|zC1R1yJG?so6=_{6P!r&>6UM}SLj^jhv?;8md8d%DB*XmUayn&- zP}xEsj?d)7!L;_S@o!zw5ETFsKpNWgoK1<2{kzyBth{xOLT=G$nI&htlSw;Y0ch#4 zUJksl&Siw_(o;<3vM1VfkgiVa#o8EJnQo`K8Nal5-52~!c%)D+Hpvu?AgV)^(X*$2 z8jFJ?nneL*5+V>711HE=Pgx;Y(p0V|hq3=dSVv*s;`ztAa9W{6!Ir=Q%x`rK{Zk*$ zpAilqzwJ`H3Cvv*##)Fd6myi;tLIM~PUWWr-Rdlh1@W(?RaJ72#gB5$S{$JmAC>?L zHQXc@Q2={C`81Cc>QO%wc zz|21vyV?w1PTepzYQl!8>{=AfeMRrG!T&mHnzSrc6TS@4HnbVY7%p1P(=%+a%3%8Dut9?w^hcI`HDY*Yoc9mwm*SO_?bM6`uba zA<~TXg5q3}?>~w~7|3}YN6Ig9BeKy>kwAl#cB0&!t84^Ee3bU?j8Q zT(5MX`5YTW-e#DUBcvycH$^o3*Vvvu*lFXuCUdvF^ngEjERMzPND~Dwij^MQac5#3 z1$e0Lq45Cupd7VPaEd*YXqVAy#@C(gQr}QX4|%X8L z#~&TBHLDT;5ZSOT)GM3KJ0()C?|MsGnKnTaZQ_hJHW0DmHgR?ey8!Sp;SZrf8gjA0 zC*4`~#CE?ims-_HYE9*Ei2pPP$3>ap@lC_^bXu(r!Wiekgh=TeoJU4L+u#zSOEHlu z06-3MI{~zBjE~$}Ild3He@WQ6^2SoJqENgq+$AqYMA~LrN2(Y`8&{w5|MVM@=ve&6 zXP+J<2~stD!^A_zJNME#&pd_C{!V9$ll94x>(@%qAbnYB0ThRxMMePXb|={BO132& z?+~wOL1=QCt=P6l_Hiw$3bx(!Cs7{fl0**Mua62DImea9dTtnJv zhP&AwHExoQ&o*&cKFNI~cM$=6Zo*$KNG;~b#4$gRA2jv&OiyFfU~(qw1jO{AoK?eC zgD)>fA%PH_&lI^(Xjn|*+)?MqaOs~Uy@&!dL-x)iRa08*(%~~mCK^D))f|MEyC8&h`XVJZd@f*QndQHIZjqyejP|-?lpG8H-3;le)2FN zN;oRmU}fDBV-DNLPM7h_tshc%eKw|_9M#nWHuIjBLAV0-ae`8EbreaH`lc$=_I1#4 z$q=9JtJVP$7B=f{SkDwx@qC=2OKcOPjI=7Ey8V_`_Z``Ld)_lae}7fXRU*331DsrD zOD^6MEpvKSFd0~m0cC(I7NlIrPc_4?PccTs8U< z^glVd*4noOq2kW@v~G9L8E8db?bzp>g(S=?2Z_ zaPW!uCF5kOfNcVf@mO;bMxNr=d&tn)*E{i2R*y!$`9ohen0$$#q+^-2^qYgl3iruw z&r2XuI5*r{dEsODOdzjL0EeZlr|yJZRp%3k5hTA`g6lnLM;s!YSgYqWyZ_4%?eK2pxhJ^=sjYAR6bMH0X;wn z8nO5lF$xeiC-v4rXZk8Do!Qw#H%XD;}zij7of!oCC@Gq*=)D8HO`&arTYQzu8e zC@sVjwixrlydRNQ>v{o8h}T?CMU-o{Ip^D$(GEmw#F4-T&>Tn!A*g5hFWbDzrla2p zjYfB<|6jmEx6HjsqyD?>dPhgU6cmcD&;V__A|*z5#RlI`zZWI9ju zvlZgU#DinGM7OQ)U&Vo)Sy=E-AYTU*do|`C2;0v1YD#RO&Si6?wb)LbhPZ_cC2FP~ zeQq2U3mKlfEHjtg%%Fde2fC80jOHU)Hn7^aJU~>X7?yOE$$C-n{XpyIbLy-_lWU9orx}^!w4! zB$GRJqr!8D1a?!v3%UYsrLR-6Rchf}@j&Zb_u7w5&SHNQqY5+w{1`W02s6Pq3EWgw zPY5A{cjUD}Kcb0!f^c^7&*3YfZF<@P=P#k3&NM^ozAY^dX{dlCN?TqYl9ieq%e+pd zFoPLohtft?t#n`_J5>wx0fAWS$p1LN#(~jIdEL<#03wg7?b__RO2by!i?21#qKyC> zdJ-9BzI~9MAy5E9Th*rT>CxRfD{kB!-rnlvPzn_2*(1D5Qmh7vQ!?8lIk}fM*Ebt6 zrdLT_^QG!n{Gplm^HvNL1yP}n4ccy{n9~E<-e!UjRcRBVunNtvo~-0Atyt-2RG@ny zryQA1$ZgF$L|T2PSj zOdqrsrR=;i4p{Y$fCo%k5%b(tV3nLBiv*}TIWE}2C^?8E54yv5$G#geL##(q^?~q; zuc>if6^by0+8|R`)^mEa&VVx1NnB_JGLGw)>O7r-SZxsr#;^^oW9gds9drV0xLE}p(jqu5o}po#6VB*8?IXa_Q;?FMMUXoF9rYOOqm%*ZKP=Cm(?rsOJ76{zR`YYo`rh%oAZkp_B- zHQND)rhDj33@tfqWE0q0UqpWLhBLk&#}k$dR6)#ss zn*6e?vAkw^`}j_WvwJEDc>xjGa^m(DTLDS0in@TynK$$g0BB?*$g!e>Mf>xtDR|@C z&RDwhrz8nTF+(##MGcMJbDIiQuz8KSX!Y&9kefps9qiOQ=vghW41%O4urr~q>ynkx z<`7samoM*Fi@-zLwuBar&2mVTIpMFhSJ`0{LGSCMGLZ20Tf{gyCiv>#cj@KtSEzV! zFU;R3lg)Sk(8Ao%Qu(4qK=uk?W<3&UJ!7!eb;2gL_+)}@7Qg*F1qW&*Qd$EEQBRku05d+CrqW zldP3ys6OYk#D(+?(@pMYZ?$eY5>#rObt84w5C;6~dK zCX^yW_1M~e)(CGrUQ<`tdtL+Pk(G=` z34ZyVA;j|4OgE|)hE^`L&W#>XK#XNu5AUMfRLdWrh?wA6+Nmt<*Q3zq5&it(C5>2& zDldiBkhhr4k-DNopv&43ilVs{Y(@KJu+K2+*m5Jn*0+hkn3_9){((=Temcuqv(qcoC6q9D6d0gk!}4M^_e0&x^Ka{xgz z;igE(T-|rkFPMmcf>t+?>H$EKP3n3&zCVdvx&d3Ea>V9zSc%;sFGnL(#Y|8Wd0x(x zlV7rWQDh{K(W243Gh0rA?pg{?9^}+a1zgbC_N}JzL??hFoHr;-hyaDbflpydu$1ETXK6`4 zbZGvscQ9?Rv|q6?f_CtHX-Y1mf_Y+u(1lyt7&2ZlqL{eGUzy*KAGTh+J4%GI14%xb zAVa7?0qGQToz4jO4KUac9R0ws8C0b1DP_4tz5_FJO!(%M*>s)$*Zi;B0DckxZOk(7 z9J8gF+ukvcP6)NMWLV!q-*(hCb*Jg*wH1$(kga+9^Q5NVy3W8@$5&PFN{y zf4#CAtf3^cW3c#u$uBjLM2P?W^M(J|;QtO5&pe-h#!+DZZukf73hHFIm5Cold2Fwcfw)Pyv3@}Ec7d0hQ2wuCCDi9R$HRb zkh=H0R^qdgp-E}=Pwo)eWJmE#kuuwx?j1Pm{mNFM^}Z!^Yc+#SG+nLy@5R%XZT~+0 z%!6$p?KhuJ@imy4P%OOdt}88E?I34VrIEOcJ-$PFmQnOO%WAH z@S2`O$PD zslxJb7b&1Pklx~#e;aYl#*CLf#!8azysTTFi+)+~5E*r9K8NE!jl`hV1YL*Q=fryj z{AlCTA5Z?bdvX~RzWr@s0|)qb69I~-W++|OLE=LJ;E-6>i8Ffua3YjG02+Nkt37V- zBZ=#{SgKGuFi5tQzMG3zNM@=GvlQ#Mqdz7|Yue@JV?z;By3r(pk^TB?oxNGJ`bpdG z9#a&w$tr6X03WLNL$*D}S>rn@g4sC$ffBHILfN1`NENcOCE7!5MA2< zuYR|L%=WH?Fo__2@NWvT3Zz_;Hh#Wnge@w@t+lBjl6AN&^ED7h9rh+rfIQgq?<=)U z^B%}<9-nT=-#9t6<Tjm7MtWm=>B09=A zULQ=;ki4M4#sDVhw~-e#6m2RFW)(KcQR&rC?u0kj_9%u$PT-Vv ziq#~DcS@A8$)Fj7x!pUnZJMU@glWp=B4uVzng#JA;Fpybory$82e0}9w`VEE?9kIc zZ6r88>!_L}tn(^yvNh0H9nsmEvr0r@lXlDMv)RKr5A^RO?Hz|=2SljQ4@m4_gIN$& zl;Coo8>tQ`v(Wa*49W`S`P28RSX@EP6-Wb=UC3LS0#sX@PG(i^Vjqx~4&FqqWwSXh zRvSu5Y&RjZtTTOGF4^^y7s0%pnG$Anleh%HdhM0KaVV-zF`4H$3P5|Bew;bz<7~?1 z*dI8#)%N>QX<-bZ#7;xE1A-ZV)(lB>OKwPV>;E`4xRdRXx$Lk54QqyM{ZR?Rt;qkl zL%yUOit{p_X7;jZhSV*q@OIgdX%j@H!#8{aGkfqoK)Eiq+0}g*DSfv-W*C@@<6~p4 z<$UW_Hg6P-i_#k%GF&M25`7S%QbiV(H~Pfk^$l2UB>!KQG{^^X1K?JN@s4ywuZej~ zEUyG14uf+@PVl0D)xx`Uf|bKzXc57~{&@8L$I07{o3qJQ@%fCmKpc%TH)2EeT>_aE zCHRjzrS~eipwu0vp07K9aWt99Qj7r5dGFD10(3y1T7A_^k1tii(e`J1R7e~)ax3(D zvo)hHZ~XN{ua)U8nm8OqhVs(`b|S2T7!I5kn3wkhdzHd6IVTK1Y^6aGoJxdE>)`OC z)8&a&0*@Ns5@=w=^yil4Yx!WN7OwNx<;C``J0$;pJwdU1eZavgx7W4XtiQgIvJ98A zg3hO`>W_B-M(S4{kCsS4<+1=T>9lR`mTci$F{Vv30fOrXV&?QvRimby!gLF^;tt1| zyg`T@KBXGPfDRzz6-#b92oxK{YOdyP#!O|WF?mh;yR_8yrE*oa5AfrB%6i%SW7Ij& z(w0aTDm70Dm66uv_b%-eg5h0Y(73`C$Z8U8`f8(w|y~ zsQ;9@Hsm+G+sR_JABu28$$#ub_FZ&y@8a`&0k&sVop?#lig{3=7(M9h_9#lFM%3F^ z0)^5puY3{90zEk|a4gMVq7Ud21o}h;Z7kmXcZOR)2uEBvr|sISSZDEMm`zPg^WgsK zN}SpcNJ$!pP-Z8CEP6XE*;h}s0@+9Skjr~U`zaNOeJyXH$7Fq_=AG{>OOkalC#B0b z;i0JjV^FH`Cc{!SDlx}i1+a4r@>fz6sn}31!SjqsubBf^Wh#-D58Nf?WRgbY{e3>> zka-q5*)YtZs&Aean&7biVV&Wy6_Bg6z~JJY;0CA;bH?k2+TvjWr5%oAXy8(JBA-b9 z_QA9CcIjy(^}rXiL-Ac*Nu}SpT*`W5ETXXx+X1d$Rc^*MIX@uiLxb?p#+U1wF~m&h z{|A)irycO?ulVjq-naN;I1{WzXv9@ybk~zCy*H0hvWotZQ<{!NuxnH(+F$UHzYQ{5 zAl>N_xeWdSkMDGOScLOUvOL-^Y=^U|Y;@O2A37%`97&j5=pjt*t+q-f(L@*)-{K5G zC)k4t=rH|Z<;frt0o}y|Q<%IDOFCZ1L>SJrCFMYcvI~avupyUEcTaK%)+ua zr#Mz^FdQeG-wN_cOWoXjG-D1kk}0r8!&lX?Cbc!^0|fX&en83LQg@97D7(?!hiGSA zuZWw@^E8F>$)H4%yi7|83KmH~+ z3qFa1lm*%4i^bNfAQ+2@7|cpB9wj-Y1lC0EW$U+QI_U`Z;fiK2?Kz&q64gem!)=~! zeI3nnGAHrum~kNhcBcAwYn>XuCX3iOsMRBo17s;WxK$7SiV7*PDcdL_?38@Vd9`1) zW#9SN&v^ojS-lxG=4(?T2Dssi+hOCF=Gz9&8@TN?(RcZpg{VT|9Dwf{TQ9~v_ZN{A z(oQ4U>eAUch`Yy$Q(1E!cvW&~?DbLKH~9L{nRK#cKZ)&B%AMDS0H}&BDo{Eqg%p*L zO@_)Yyv5&Xyg+O#6C?sFbB8Bu1jDC~sC!^Q%AF8s1SZt&ME2ZC;1T;Q6^`m(yay0~ z0X*OGIV=SaU@G)=w{bpxD~LX}#>>6C>hmhQXjnN>{h)vowHT326;oSj2%16|mmxF= zyM;;3OO=bD&F!(s!t-s37I7p`s~CN2%@~AYSml;cHy8H4bYh4emSRDbhax3rqO&qDSf z_2P|3fi^$%Ln1}SjZoyoJ}Y_*jm!cUCMY&(Vz`SzO_`BX*Y=iDs6tCJ8nD+^ zr5qisl+jTHo-I6COI{(-5bQ1L4yMQ{x?07laJs!9ulemad?G4s$uk}9E@RC>K#L0H zvg&(be-I;AIWOZdPu-Sr5hm`6gZ*Zl4DzIA-zC}>7ADjO+a`Lkh>nj?l%+;9D-ufB3SPn zFMgg46R5(qPa+Vz?cN*azd*O1Gc)Ey#*fjekf!?*>dLS(Q<@~%NFnZ~^D$EdGG}(U zMTPoVsubeg5(2b%5DI!Kxl-e&Fcq==nc3z6HV5~+R|DIT z04==6f#*HML54Qj9w472re7s-ZfMzvY$i5u1>W#E--~DBlOlXQ=o&wt=`%bvHS@Qh zjkbl@*Q_*MN5xqgb}7K%cuabAuI|e6*E^*%9X2 zag1V{X4Dwv{V3Ck;`&<2n_-63z6F!;{M3rHE?`z>_8q4xNY6W*VT0t`hv5?ZDD{vU z4IKdlHtlvyf_=i={DeSG6UMy4!Tu1iCz+yIJRj>2DWq6+ArJqN*re-QV|?w#K@~6% zo=x<#=v1du=C)(PU8WD|E1%u$VNN(Juh<0DXCp!(4~wJ;716kYjimi`Ict&MPB~aW zkTgMb;UR`WS#QvSt5q7VYApBK;iHymB&}R8VmYquq?Td_(*^%qy_&M&#s?COiBwXX zw{4-;&aOA1JX-+4GEy|)R9Y#n{~NM>uq{g;eW&U$Nfcwh_^Pp+x%)Zv?~0xOwy1Zr zgLma8KRj}shCP;D)i(XQD0}m&ja4KoK;NU;!I$%CVV^Qs9n=k?|A;ox_I=-%eDkRy|PheB>9@Kkl8?nN(AMDQe4N5(tyo?<9XS*Ern_IQT> zbwQLaMsk8Go|L5&oLJmqiLbl~GY8;Pcc8SzH2O+pFvJYgbt~Uw5_Y$GaAv9kEx%T?7J>$^7t+-d6BB+Y0V0y{$0%l-mo1;ffB&9R&PdK zOjOR4wCq~~-%SKjG$SUi;hhvfHKwJ_PNw_W=_dPAn=D>oj|B_ zJX#<1T(1y{-@fD(W97W2io1F>Jg zSKz8N&kvAeFVxfY6aLk8UYO!YzX#{P@YVvC6O$}h)L@O#lY3YpSoFL8YmE^c!WxmP z?}q&$Fgg){UzM=gDi4T!t^6qD0Fxy59^r7CIn6Yk3SF~-)1=ypO!5QNsmop9oApt8 z(03gB_0LMo-ONgXadm35ZF8gb&(r5?M3^WX)><2!Y^62LPFyHM4<2Zo% z6C14630;5N(n1yq&xV7K#mRZ&9_ zRayWC9_mudj*9f`pR_EX)i9;7xx^SHlJ$o3A^8EY!VaTn-UG)gK>fv#8^E+Hv-RPC#nm{kdm3R1%*tKKK#0F|NcliX>n5_X1qA>q7$+8B)Uog5bI%a z(no9bVhtlOYA~Y2YC%lnJ&3%c6aaX{;2ix(<6oqodk4}aeVOgtn%0!W2Vr}fxP^=~ z73DwD6WZpjCd}Bbs}>DsS#|XU&Jt>Dp}}d;d8;2|iF8~=Xq%`kj3lRg*)JP$t=^#Q-jOb93w^1C zfi*5?H)wG5ZLJorUjR@QZeUQBirGeyJ5y|;Rw$swM~dWwr#Xr=ZltN|bu6V83qHJj^Elf=w9JW|?DfPkM~v5S^RVt-iQ zmlA_(GL|o!V$iQVdCnlXUdfB!W-!ecQ6tplT@|+Sd-_DEq>tqJs*^=k+kM-tWtp33 zSU=2l^C_mF35cq-lDwv&BS(J}VnC7Xmgx*3a^FVU z4sVNB0g=nwYBQnjoA+K2=&CR}vv|vzBe7Q?o`&#k25b-63YPdQ!hsn4P=J58(+ep?vv_>=^f>jIO4W4Wg%n*zDvLUa}`_TW9%pnZgKAT`8jrg;>gHDmZ|CzoxiU#aT$DR2(;)mvw&N1Qf-RZLc?XMa`nW zVDnA7%Q(*P@?>mpnNmV=_&?o&zP+abO%#TmJ)h0XiD3r1fIA_SP(P|vJ-h*=x2vW~ z(g_XiCCV}?o9l<87<4)V#xRpG@7FV0H6UZ?@OWS#&PKv`p0N9X`4s2Yb#hZ@Bf`Kw z18fd&Lm7gyEFcx^gt{! zj)1mfn#31Qu=gg8W|D!Y_Nz4hX%nEPWKF^1d0)XswtW8a zg;;c$qbsxK8&35y3fQ@$fEQLI!8JSgu5MAO+s2O&l2H(Z**ChT@y+5iY!CLC5>WYKyF#1ry-GPUGZ4MkI@*<+I1 z?p`zga(HGmea2kI0VWw$D{sJdF|Yw)j_hv5EPm!!;BjWW&CoS0z!VHW!LSnnFcqYc z{K=z71YCm#_yjU6!f7I!bvUzV!tZzA>mS7n{}pv|ty;V8Cifn>>6ti*N3H>WLY1j; zui476PSwBB!h4LO>M>toP1}83UuX;1!z*t+4@3V3xyXTWP16&@TK`m%Y7?YKXJxf$ z22z%l=y4{bBa4@b1Cc2E*xy3zqxU7)`Urn&`!%doObB|a`a)?`pVOY|$_WT!vvWng;D-=m!DVE3e_o(6$p`)E4}kjTMeDh z(7Ts)oRc~iBNsNGWROUGXU%-3(i0WlOT*)SQ|7vxB$;$S{uI#84g1iu)lH00_xK+| z%uS^zxV6?q=E_d-n|$Yu1?bMCD{LsgXh&VTPx4E5=o+oL=JgF0tVfMn67)6p8*E_Z z!MF&k9DM5Bj*}v`3RHx!azWreO|?%usT!yQgU6_oLQCBYOY!!j7N})J9vHn?(LE2Q zw5#0u1Zgg?p9~xh76w|Ol^ZYsCX(iX5%!{s!&E!U?|Bc=6X%^>+Y)Qs4}-|f`!=x! z@i<+NRG4_GoXpOT>CT>YNoqdf!wbH3bV=ysj<{LIxhMK4GaXlFUuj~f?sX3Cc1?XT zzOeDFqIp6=hQ;F`>?jzig*J$o4HX9RX6bQ+SDDxZbiKVKbo@g;i-|ZzEF1cakCGpY zeHt8pYH&Oz`gVGaQ;`lWp{U&mbyX-z*XgV6rc>=PK<_lwmYc-#LtcZ<5^+LST;73e&gGtN zXC%gEE_w^42@%X79Necpn;TxW`s0IF=B2?qw?$Br$QHf_W3XSk)qm4aGy3Vrn6?&stO?tWog6AZ<&06x3}K>Rbo#Ed=YK~47<+oYD{ z3?D3U83Ys^`hc(4vr2z@U!rd#pQ6JuviA^T>k!r4W3re^X>k&85m}v`;U?2JzuXQd zcYZKK6DB!5G2sn0x!Z2jLusrT!8Yrxt}zc=Y<}s4NGh-pYX+dJmH|{&$FC^DXEwP= zu`H8w=T9S3+s1$NCa(55rT4~at?nP-({Vtp!8KPzs>72KMGyCm5aT+Ept^0&>$S*Q z*8XQ?y7a&|das<2LHhIJEeLF$iyK}qo^}M*HfC)FdH}U3A@>PVLp*Wye#GJu>AgDM z{v`J5BUoLsq|10EN3Wj|=&u9xOjf-ttBh>jRd@BG3AYCY!&i4%lXvS-4sCvR>Eg>p z=p+;*16~+sDYzDgc26>yeRLGa?;#ts^XyuDgjes`@@c#C!8Oc zv?h0kiLqN;$>BntCYL>H1mvU@%XZonetu=ep1YC#l@J1^=yxmXR~1%g%@WbhWTarI z&g>X1XSOO|o2tH)7KxPm^dUJQZtibs|B39Egrl3YzRXVqw?|b;^^bU>cG=sW1fr>5 zFxB)o`k`4te!rQo%>fD?V_eo`Aofaw5YW$f(|w8B@lHK0dhmII!5j7>Qgf9Aj?QYT zR5aDhziWup(aEJL=7#CSmRW1NnT{v|m$fKlE@aH_m|b$+#-6a#1o3X!&-rqq`I!mQ zBm=VjKA2WCp8U4QS@;Q5N}?~DiLoz|lR+4~P@~hbWqe5=qkh6TmJdmk(WNZR9gy>v z>$D_Dr0RBEMB}2-nmrLP@BFf}I5o>!y3Ra$#$!QO1nf#oTUHb^e8f zg(|byuSV~0O%I5p>1ps23d+fN%yLz->PIJkzXrMM1r1&=*2qUm0LdnPKyc-Xda!By zr?RfbL9J$^V5=pnK zi`1Y0lU&HI^u(4~r=R#_Ch(%bJ0MaHYPpXvzJCpYDElVFs*d5Ss<{A-ED6|>2$U_F zHao^YfZE%~gi}P~1Pe%sk8J4%=tZ?vd3Rw0Zt1V6+rHL#<%#g>KA9~M{MH(Yfx{AF z8t!cLV_=7c29Y(L*xKm0_Yh)~Ldgz)1+7CO_)W!WK4}n5NS$%jmkE`MuK>F}x{GBO zST^>r=U5FJZ$&M2)>Zyoe%-8cZlZ%YVH*_dS^c~ zCE`yT+zU_qkNNkrup}bKREgzHAF}dNNYwkY{5W+@~UE6spJjUGSy@Z&-kz5pUvIf(=dK}rbP9GCd!L7yL>J|eIM zQEc7zlk3(B<`1Q|HNIWsB;X=@8fm4krb5es8A@?=3KipZa~cYJkAV30lpT7Vi^u-z1`~xO=0acm;mgJQnU$T^jH|rsXiNB-s@tB=HRV^-P1md!ieU*_ZjUY-+Q- z%L|r*7WtTk(Im80` zPPxP@kZ=T7$Xm)qIh&uD35I=d(a^ef(6^qS( z7}Kffw0W#9;H)<00MRGs+b9z%tK*JEk!(tPZuJ7*v;H)}j}JP)j;e*nD?#nkW*KEG z>V7A(y0>e@%m%JIJB!Ek2he^T2B`FbRW_lDhgB8cGlwCXW!-~Xyzkyb?D%|&uYG2J z*+cKkWI+0J2UV9%pv#KUf5*@geOBD?HPNSG5c9IM{MZFh2B9JgVsMV-i&6|an9uh6-JQigvWY;3Wn1>LVn#xhKReEOF#X|cGdsT00U0_<>CpU!`Vmml; z&MoBSU$k>l6MH*v*tA~ia~^nG2wa0VRZ1VTFq;Li|En3*+8qNB8RDe#M_v(2ct7Nl z=4?@kTmf-gh_mW4iW9EZWT{3Kx=`4pINDq;yR80_ZkI@+;5SeXySi$C@NMc`+|y2V z?O}Z0Pf{mzKLV6IOTo?9wRXBR@WFIX(Pc++?DJvHWq?o{^RrG)XN{@y1vX~nAMk(8(mOBj2EMa%#^29UR zD-Q0kO~Aj6^Ut_E9AEqyb~w0@JJ?;p{Ge%!?u-=9#!M3bI4^N&899QVbl=z_ik>qn#7ENa~{`s z3reX|Z-tU8#$eRQ0kn(0!cNEBzzz+VA}zJkfs*($ntmB46kE^Pxrkck622WJjUe}% zYEwlTlcYBPRIcm&946+t0{km&y&;~gy-#2D zha^Eu!hcD*fqzp+UxdGg4PUS_BsZ&s7v|@uGxJS+nzGsEPS(ouKBrN{H~o|%Xh>-7 FYUND*%?tnl literal 23598 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£#}Pk`)--zDb_QtPvFcU@je zwSsS*xo9KooB4TIdt`Ahc==*4|I7ZU1G=pcLKRKV@dm`AwYbJ;C#7BF<#jboLZvP z^b{#_g-5Lt9|-)qf(>`)Pdx4GHt=Vqt<3vz&~p{!Z4aP z;HG1MZ;se;pNWgAXG=R?k0gr`C?%v>3%2`@oU9wBbzXKIzT@4W9EVw$4x^2BWGE)$ zza+)v6I%X@txa)i*wVAW=Vyup`%6Ma^zam;XZ;rPx?YK+y9rk36RlUQY3H_{JHIvA6A4GHIjWu4b+JpgH$NoT+uZqMyQ zA0r4KW23h%ACBY-uIO7|oXvmN zRMoN(#!l*HVB+$!Zt%7W4-s;Tn49C`yz|?;SCqCzzjlsAv3+OpvOw}-eVJKi_q0iC z6fI(N7#dS2&($zU-{k2ydvPZf9&sL?8p@P^H zy&lLcU%4Q9S^B&!Sf0G0Jo5WPVPjt|vT*ch^&4L<%t}<*pNbi+``26I%-dw?|jcq^|zNpA7xYR10slgD76{ngxZ>7nNW8 z|1OPEA!=g%sh3tGCTMFyL89yYpwnq8Mf9pWn+f%qqdTdpUGh|H!7~@pM^Feju9Up zzN*`pd;%5_unI$U$jfHNQLs$~tBQ{DND9oR*FBgHv#9NOzF_GUfujhnwg3>ahxr!~_j{V!W+=ZM_D4JkiP zQT-urvHboT=G$(jVKU@o=D4;ZRJ7H!YC>vl*gxRN-929m<-&vYMT1=n_!&R!UcoEW zprBqQQ}AD4#JMAcVDOl!J_-1r1?{y*vS^T0f(#jQ^f^G{JHeWG2~;;YdXYDj#|DI! zf-!CCcde8Tx)hGu0Yi}ntUT-vAWGE>xG(S;m$SOI+X3N0<`%h_tj;D78#@`ml-9UT z9Knu_KW4qe=E-`hj1-FE5g5Q4N>$qTP)l8v(9+jGjTMuC-#2RggS5EJ=~?Zni9^u_ zMlYZ*fxC#Cf1H3o3>r0ZX-4h1blkr^Y6&tH&T`naK&o1q1iTH$>tmWZ)ZZWcS)utH zUu+KKhGY;xs(?e4k@WyC#bFumUDmuGx7aqa50qvC|0y%VR!jL35k(5<0_y_*nq&5* zjHSj?vqUy+TUhjg9)9aFydJTlX=hp_4YeS&xc=k(?8SQ>>LqB4j7|mq0Qa>TM1X!y6yM_+o))G(=x>Rp< FCAFVj*u?+< diff --git a/src/net/sourceforge/plantuml/dedication/linux_china.png b/src/net/sourceforge/plantuml/dedication/linux_china.png index 3000b159803fbba8511d1b8889dc1f1d9b46fd2d..e30928d7a5612a6eacd5085cfa8fed1f343e447d 100644 GIT binary patch literal 4104 zcmV+j5clsZ98%>ElrgW6e1lqwDm?pdwi6(aB{_kxgN+hcwjo~0JVTPIQW5A;u?7>O zm%0RiV22eEu8Ocg{()EC6I*?e`AR>N?X-Z$FT1H~Tne zBI`koSn>(<0_p@Ub^msB${>{bi|;7~^(kovY42GHK{B?6R$J6KTeu^xpFw1B1!@HZ zB*E+J>L9>gI?Rk5_R-F4TWWFFYppoY@`v9<3_-(<0ivV-z!Xw;M#teX0$x4x8`E~e zH{K1!eWMuKw~++AMM9tHrfm!S=4ZrE^D8C{@~jpk#TT=WFNZEONHyr_Xm-w3%^gDi zscV9e?ZERej4a+HS{{2WqciwBm7 z@}D3`Vy4q4w@xVBEOZoDyOthN)wWaWP47jo*?S)CkDfQV)mT1)?wV-->_I?Xf)vUV z{?bTw9Bzh^Sm|s3G*DU_()?sW@SG*7tHc`iF@2NhEkRj+5dPbn;8@$Ob1F#WFt)JH za@oGK_Xh4}>?UTq0~0J;mv!gLx#q+Fxc3WshE|3S4;`~+d?dd)bpp=CJ7$I42MWgZ z{1;`7eXXpBO*GgmWlhCi zhx!+HCCR$mGMy^t@BXPh22=bG}y|g?pgFBfkE`a~&3_tFZhwmk(_{VCcu+prW zuxlMF+W2G_+1zPnFN@@C{*f)-$a|gRpN};*gJBpDz9q5pso@rO6sPHFSimnEwcnTT#=Aq4Z^vCAPO;vxdiF

VfcmV5g?^ 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 diff --git a/src/net/sourceforge/plantuml/project/GanttDiagram.java b/src/net/sourceforge/plantuml/project/GanttDiagram.java index ad9d011b9..cdd223f73 100644 --- a/src/net/sourceforge/plantuml/project/GanttDiagram.java +++ b/src/net/sourceforge/plantuml/project/GanttDiagram.java @@ -271,25 +271,30 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit private TimeHeader getTimeHeader() { if (openClose.getCalendar() == null) { - return new TimeHeaderSimple(min, max); + return new TimeHeaderSimple(min, max, getClosedStyle(), getIHtmlColorSet()); } else if (printScale == PrintScale.WEEKLY) { return new TimeHeaderWeekly(getFactorScale(), openClose.getCalendar(), min, max, openClose, colorDays, - colorDaysOfWeek, weekNumberStrategy); + colorDaysOfWeek, weekNumberStrategy, getClosedStyle(), getIHtmlColorSet()); } else if (printScale == PrintScale.MONTHLY) { return new TimeHeaderMonthly(getFactorScale(), openClose.getCalendar(), min, max, openClose, colorDays, - colorDaysOfWeek); + colorDaysOfWeek, getClosedStyle(), getIHtmlColorSet()); } else if (printScale == PrintScale.QUARTERLY) { return new TimeHeaderQuarterly(getFactorScale(), openClose.getCalendar(), min, max, openClose, colorDays, - colorDaysOfWeek); + colorDaysOfWeek, getClosedStyle(), getIHtmlColorSet()); } else if (printScale == PrintScale.YEARLY) { return new TimeHeaderYearly(getFactorScale(), openClose.getCalendar(), min, max, openClose, colorDays, - colorDaysOfWeek); + colorDaysOfWeek, getClosedStyle(), getIHtmlColorSet()); } else { return new TimeHeaderDaily(openClose.getCalendar(), min, max, openClose, colorDays, colorDaysOfWeek, - nameDays, printStart, printEnd); + nameDays, printStart, printEnd, getClosedStyle(), getIHtmlColorSet()); } } + private Style getClosedStyle() { + return StyleSignature.of(SName.root, SName.element, SName.ganttDiagram, SName.closed) + .getMergedStyle(getCurrentStyleBuilder()); + } + private double getTotalHeight(TimeHeader timeHeader) { if (showFootbox) { return totalHeightWithoutFooter + timeHeader.getTimeFooterHeight(); diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeader.java b/src/net/sourceforge/plantuml/project/draw/TimeHeader.java index bb8c123f9..0fc1f7948 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeader.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeader.java @@ -42,6 +42,8 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.timescale.TimeScale; +import net.sourceforge.plantuml.style.PName; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -62,17 +64,30 @@ public abstract class TimeHeader { return 28; } - protected final HColor veryLightGray = HColorSet.instance().getColorOrWhite("#E0E8E8"); - protected final HColor lightGray = HColorSet.instance().getColorOrWhite("#909898"); - private final TimeScale timeScale; + private final Style style; + private final HColorSet colorSet; + protected final Day min; protected final Day max; - public TimeHeader(Day min, Day max, TimeScale timeScale) { + public TimeHeader(Day min, Day max, TimeScale timeScale, Style style, HColorSet colorSet) { + if (style == null) { + throw new IllegalArgumentException(); + } this.timeScale = timeScale; this.min = min; this.max = max; + this.style = style; + this.colorSet = colorSet; + } + + protected final HColor closedBackgroundColor() { + return style.value(PName.BackGroundColor).asColor(colorSet); + } + + protected final HColor closedFontColor() { + return style.value(PName.FontColor).asColor(colorSet); } public abstract double getTimeHeaderHeight(); diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderCalendar.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderCalendar.java index 636063ceb..a68c9b9e8 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderCalendar.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderCalendar.java @@ -41,8 +41,10 @@ import net.sourceforge.plantuml.project.LoadPlanable; import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.time.DayOfWeek; import net.sourceforge.plantuml.project.timescale.TimeScale; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; public abstract class TimeHeaderCalendar extends TimeHeader { @@ -51,8 +53,8 @@ public abstract class TimeHeaderCalendar extends TimeHeader { protected final Map colorDaysOfWeek; public TimeHeaderCalendar(Day calendar, Day min, Day max, LoadPlanable defaultPlan, Map colorDays, - Map colorDaysOfWeek, TimeScale timeScale) { - super(min, max, timeScale); + Map colorDaysOfWeek, TimeScale timeScale, Style style, HColorSet colorSet) { + super(min, max, timeScale, style, colorSet); this.defaultPlan = defaultPlan; this.colorDays = colorDays; this.colorDaysOfWeek = colorDaysOfWeek; @@ -89,7 +91,7 @@ public abstract class TimeHeaderCalendar extends TimeHeader { back = backDoW; } if (back == null && defaultPlan.getLoadAt(wink) == 0) { - back = veryLightGray; + back = closedBackgroundColor(); } if (back == null) { if (pending != null) diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java index 0591796bd..afb53f974 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java @@ -43,10 +43,12 @@ import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.time.DayOfWeek; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.timescale.TimeScaleDaily; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class TimeHeaderDaily extends TimeHeaderCalendar { @@ -63,8 +65,10 @@ public class TimeHeaderDaily extends TimeHeaderCalendar { private final Map nameDays; public TimeHeaderDaily(Day calendar, Day min, Day max, LoadPlanable defaultPlan, Map colorDays, - Map colorDaysOfWeek, Map nameDays, Day printStart, Day printEnd) { - super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleDaily(calendar, printStart)); + Map colorDaysOfWeek, Map nameDays, Day printStart, Day printEnd, + Style style, HColorSet colorSet) { + super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleDaily(calendar, printStart), + style, colorSet); this.nameDays = nameDays; } @@ -111,7 +115,7 @@ public class TimeHeaderDaily extends TimeHeaderCalendar { private HColor getTextBackColor(Day wink) { if (defaultPlan.getLoadAt(wink) <= 0) { - return lightGray; + return closedFontColor(); } return HColorUtils.BLACK; } diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java index 67c5142c8..4fbc4f51e 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java @@ -43,10 +43,12 @@ import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.time.DayOfWeek; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.timescale.TimeScaleCompressed; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class TimeHeaderMonthly extends TimeHeaderCalendar { @@ -60,9 +62,9 @@ public class TimeHeaderMonthly extends TimeHeaderCalendar { } public TimeHeaderMonthly(double scale, Day calendar, Day min, Day max, LoadPlanable defaultPlan, Map colorDays, - Map colorDaysOfWeek) { + Map colorDaysOfWeek, Style style, HColorSet colorSet) { super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, - new TimeScaleCompressed(calendar, scale)); + new TimeScaleCompressed(calendar, scale), style, colorSet); } @Override diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderQuarterly.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderQuarterly.java index 45f7502d3..df2d4a68a 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderQuarterly.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderQuarterly.java @@ -43,10 +43,12 @@ import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.time.DayOfWeek; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.timescale.TimeScaleCompressed; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class TimeHeaderQuarterly extends TimeHeaderCalendar { @@ -59,10 +61,10 @@ public class TimeHeaderQuarterly extends TimeHeaderCalendar { return 16 + 13 - 1; } - public TimeHeaderQuarterly(double scale, Day calendar, Day min, Day max, LoadPlanable defaultPlan, Map colorDays, - Map colorDaysOfWeek) { - super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, - new TimeScaleCompressed(calendar, scale)); + public TimeHeaderQuarterly(double scale, Day calendar, Day min, Day max, LoadPlanable defaultPlan, + Map colorDays, Map colorDaysOfWeek, Style style, HColorSet colorSet) { + super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleCompressed(calendar, scale), + style, colorSet); } @Override @@ -126,9 +128,9 @@ public class TimeHeaderQuarterly extends TimeHeaderCalendar { } drawVbar(ug, getTimeScale().getEndingPosition(max), 0, 12); } - + private String quarter(Day day) { - return "Q" + (( day.month().ordinal() + 3 ) / 3); + return "Q" + ((day.month().ordinal() + 3) / 3); } private void printYear(UGraphic ug, MonthYear monthYear, double start, double end) { diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java index 2c120c967..5d4f1442c 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java @@ -42,9 +42,11 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.timescale.TimeScale; import net.sourceforge.plantuml.project.timescale.TimeScaleWink; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class TimeHeaderSimple extends TimeHeader { @@ -66,8 +68,8 @@ public class TimeHeaderSimple extends TimeHeader { return 0; } - public TimeHeaderSimple(Day min, Day max) { - super(min, max, new TimeScaleWink()); + public TimeHeaderSimple(Day min, Day max, Style style, HColorSet colorSet) { + super(min, max, new TimeScaleWink(), style, colorSet); } private void drawSmallVlinesDay(UGraphic ug, TimeScale timeScale, double totalHeightWithoutFooter) { diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java index 091f8c157..5a3909568 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java @@ -44,10 +44,12 @@ import net.sourceforge.plantuml.project.time.DayOfWeek; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.time.WeekNumberStrategy; import net.sourceforge.plantuml.project.timescale.TimeScaleCompressed; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class TimeHeaderWeekly extends TimeHeaderCalendar { @@ -63,8 +65,10 @@ public class TimeHeaderWeekly extends TimeHeaderCalendar { } public TimeHeaderWeekly(double scale, Day calendar, Day min, Day max, LoadPlanable defaultPlan, - Map colorDays, Map colorDaysOfWeek, WeekNumberStrategy weekNumberStrategy) { - super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleCompressed(calendar, scale)); + Map colorDays, Map colorDaysOfWeek, WeekNumberStrategy weekNumberStrategy, + Style style, HColorSet colorSet) { + super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleCompressed(calendar, scale), + style, colorSet); this.weekNumberStrategy = weekNumberStrategy; } diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderYearly.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderYearly.java index 1b9e2f44e..c2583dcb2 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderYearly.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderYearly.java @@ -43,10 +43,12 @@ import net.sourceforge.plantuml.project.time.Day; import net.sourceforge.plantuml.project.time.DayOfWeek; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.timescale.TimeScaleCompressed; +import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class TimeHeaderYearly extends TimeHeaderCalendar { @@ -60,8 +62,9 @@ public class TimeHeaderYearly extends TimeHeaderCalendar { } public TimeHeaderYearly(double scale, Day calendar, Day min, Day max, LoadPlanable defaultPlan, - Map colorDays, Map colorDaysOfWeek) { - super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleCompressed(calendar, scale)); + Map colorDays, Map colorDaysOfWeek, Style style, HColorSet colorSet) { + super(calendar, min, max, defaultPlan, colorDays, colorDaysOfWeek, new TimeScaleCompressed(calendar, scale), + style, colorSet); } @Override diff --git a/src/net/sourceforge/plantuml/style/SName.java b/src/net/sourceforge/plantuml/style/SName.java index 4e0284e7f..5ea3a1d9b 100644 --- a/src/net/sourceforge/plantuml/style/SName.java +++ b/src/net/sourceforge/plantuml/style/SName.java @@ -54,6 +54,7 @@ public enum SName { class_, // clickable, // cloud, // + closed, // collection, // collections, // component, // diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java index 1c625eae4..875bad9c3 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java @@ -53,8 +53,8 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.Bibliotekon; -import net.sourceforge.plantuml.svek.SvekLine; import net.sourceforge.plantuml.svek.ShapeType; +import net.sourceforge.plantuml.svek.SvekLine; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java index 79ad6eddc..c910e7728 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java @@ -71,8 +71,8 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.AbstractEntityImage; -import net.sourceforge.plantuml.svek.SvekLine; import net.sourceforge.plantuml.svek.ShapeType; +import net.sourceforge.plantuml.svek.SvekLine; import net.sourceforge.plantuml.svek.SvekNode; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphicStencil; diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java index 8672656fe..51ebd158f 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java @@ -37,13 +37,9 @@ package net.sourceforge.plantuml.svek.image; import java.awt.geom.Dimension2D; -import net.sourceforge.plantuml.ColorParam; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.ISkinParam; -import net.sourceforge.plantuml.LineConfigurable; -import net.sourceforge.plantuml.SkinParamUtils; -import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.creole.CreoleMode; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.cucadiagram.IEntity; @@ -52,24 +48,16 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.graphic.color.ColorType; -import net.sourceforge.plantuml.svek.AbstractEntityImage; -import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.Shadowable; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGroupType; import net.sourceforge.plantuml.ugraphic.ULine; -import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class EntityImageState extends AbstractEntityImage { +public class EntityImageState extends EntityImageStateCommon { - final private TextBlock desc; final private TextBlock fields; - final private Url url; final private static int MIN_WIDTH = 50; final private static int MIN_HEIGHT = 50; @@ -81,25 +69,13 @@ public class EntityImageState extends AbstractEntityImage { final static private double smallMarginX = 7; final static private double smallMarginY = 4; - final private LineConfigurable lineConfig; - public EntityImageState(IEntity entity, ISkinParam skinParam) { super(entity, skinParam); - this.lineConfig = entity; + final Stereotype stereotype = entity.getStereotype(); + this.withSymbol = stereotype != null && stereotype.isWithOOSymbol(); - - this.desc = entity.getDisplay().create8(new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype), - HorizontalAlignment.CENTER, skinParam, CreoleMode.FULL, skinParam.wrapWidth()); - -// Display list = Display.empty(); -// for (Member att : entity.getBodier().getFieldsToDisplay()) { -// list = list.addAll(Display.getWithNewlines(att.getDisplay(true))); -// } final Display list = Display.create(entity.getBodier().getRawBody()); - - this.url = entity.getUrl99(); - this.fields = list.create8(new FontConfiguration(getSkinParam(), FontParam.STATE_ATTRIBUTE, stereotype), HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL, skinParam.wrapWidth()); @@ -125,28 +101,11 @@ public class EntityImageState extends AbstractEntityImage { final Dimension2D dimTotal = calculateDimension(stringBounder); final Dimension2D dimDesc = desc.calculateDimension(stringBounder); - final double widthTotal = dimTotal.getWidth(); - final double heightTotal = dimTotal.getHeight(); - final Shadowable rect = new URectangle(widthTotal, heightTotal).rounded(CORNER); - if (getSkinParam().shadowing(getEntity().getStereotype())) { - rect.setDeltaShadow(4); - } - - HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE); - if (classBorder == null) { - classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder); - } - ug = ug.apply(getStroke()).apply(classBorder); - HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); - if (backcolor == null) { - backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground); - } - ug = ug.apply(backcolor.bg()); - - ug.draw(rect); + ug = applyColor(ug); + ug.draw(getShape(dimTotal)); final double yLine = MARGIN + dimDesc.getHeight() + MARGIN_LINE; - ug.apply(UTranslate.dy(yLine)).draw(ULine.hline(widthTotal)); + ug.apply(UTranslate.dy(yLine)).draw(ULine.hline(dimTotal.getWidth())); ug = ug.apply(new UStroke()); @@ -156,7 +115,7 @@ public class EntityImageState extends AbstractEntityImage { drawSymbol(ug, xSymbol, ySymbol); } - final double xDesc = (widthTotal - dimDesc.getWidth()) / 2; + final double xDesc = (dimTotal.getWidth() - dimDesc.getWidth()) / 2; final double yDesc = MARGIN; desc.drawU(ug.apply(new UTranslate(xDesc, yDesc))); @@ -170,14 +129,6 @@ public class EntityImageState extends AbstractEntityImage { ug.closeGroup(); } - private UStroke getStroke() { - UStroke stroke = lineConfig.getColors(getSkinParam()).getSpecificLineStroke(); - if (stroke == null) { - stroke = new UStroke(1.5); - } - return stroke; - } - public static void drawSymbol(UGraphic ug, double xSymbol, double ySymbol) { xSymbol -= 4 * smallRadius + smallLine + smallMarginX; ySymbol -= 2 * smallRadius + smallMarginY; @@ -187,8 +138,4 @@ public class EntityImageState extends AbstractEntityImage { ug.apply(new UTranslate(xSymbol + 2 * smallRadius, ySymbol + smallLine)).draw(ULine.hline(smallLine)); } - public ShapeType getShapeType() { - return ShapeType.ROUND_RECTANGLE; - } - } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java index adf31d6c4..203a16f2f 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java @@ -63,22 +63,15 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; public class EntityImageState2 extends AbstractEntityImage { final private Url url; - - final private LineConfigurable lineConfig; + // final private LineConfigurable lineConfig; private final TextBlock asSmall; public EntityImageState2(ILeaf entity, ISkinParam skinParam) { super(entity, skinParam); - this.lineConfig = entity; + // this.lineConfig = entity; final Stereotype stereotype = entity.getStereotype(); -// Display list = Display.empty(); -// for (Member att : entity.getBodier().getFieldsToDisplay()) { -// list = list.addAll(Display.getWithNewlines(att.getDisplay(true))); -// } - // final Display list = Display.create(entity.getBodier().getRawBody()); - final USymbol symbol = USymbol.FRAME; HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java new file mode 100644 index 000000000..1b5e3c048 --- /dev/null +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateCommon.java @@ -0,0 +1,115 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * If you like this project or if you find it useful, you can support us at: + * + * http://plantuml.com/patreon (only 1$ per month!) + * http://plantuml.com/paypal + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + * + * + * Original Author: Arnaud Roques + * + * + */ +package net.sourceforge.plantuml.svek.image; + +import java.awt.geom.Dimension2D; + +import net.sourceforge.plantuml.ColorParam; +import net.sourceforge.plantuml.FontParam; +import net.sourceforge.plantuml.ISkinParam; +import net.sourceforge.plantuml.LineConfigurable; +import net.sourceforge.plantuml.SkinParamUtils; +import net.sourceforge.plantuml.Url; +import net.sourceforge.plantuml.creole.CreoleMode; +import net.sourceforge.plantuml.cucadiagram.IEntity; +import net.sourceforge.plantuml.cucadiagram.Stereotype; +import net.sourceforge.plantuml.graphic.FontConfiguration; +import net.sourceforge.plantuml.graphic.HorizontalAlignment; +import net.sourceforge.plantuml.graphic.TextBlock; +import net.sourceforge.plantuml.graphic.color.ColorType; +import net.sourceforge.plantuml.svek.AbstractEntityImage; +import net.sourceforge.plantuml.svek.ShapeType; +import net.sourceforge.plantuml.ugraphic.UGraphic; +import net.sourceforge.plantuml.ugraphic.URectangle; +import net.sourceforge.plantuml.ugraphic.UStroke; +import net.sourceforge.plantuml.ugraphic.color.HColor; + +public abstract class EntityImageStateCommon extends AbstractEntityImage { + + final protected TextBlock desc; + final protected Url url; + + final protected LineConfigurable lineConfig; + + public EntityImageStateCommon(IEntity entity, ISkinParam skinParam) { + super(entity, skinParam); + + this.lineConfig = entity; + final Stereotype stereotype = entity.getStereotype(); + + this.desc = entity.getDisplay().create8(new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype), + HorizontalAlignment.CENTER, skinParam, CreoleMode.FULL, skinParam.wrapWidth()); + this.url = entity.getUrl99(); + + } + + final protected UStroke getStroke() { + UStroke stroke = lineConfig.getColors(getSkinParam()).getSpecificLineStroke(); + if (stroke == null) { + stroke = new UStroke(1.5); + } + return stroke; + } + + final public ShapeType getShapeType() { + return ShapeType.ROUND_RECTANGLE; + } + + final protected URectangle getShape(final Dimension2D dimTotal) { + final URectangle rect = new URectangle(dimTotal).rounded(CORNER); + if (getSkinParam().shadowing(getEntity().getStereotype())) { + rect.setDeltaShadow(4); + } + return rect; + } + + final protected UGraphic applyColor(UGraphic ug) { + + HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE); + if (classBorder == null) { + classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder); + } + ug = ug.apply(getStroke()).apply(classBorder); + HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); + if (backcolor == null) { + backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground); + } + ug = ug.apply(backcolor.bg()); + + return ug; + } + +} diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java index 23e1e758d..aa025fa49 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java @@ -37,51 +37,20 @@ package net.sourceforge.plantuml.svek.image; import java.awt.geom.Dimension2D; -import net.sourceforge.plantuml.ColorParam; import net.sourceforge.plantuml.Dimension2DDouble; -import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.ISkinParam; -import net.sourceforge.plantuml.SkinParamUtils; -import net.sourceforge.plantuml.Url; -import net.sourceforge.plantuml.creole.CreoleMode; import net.sourceforge.plantuml.cucadiagram.IEntity; -import net.sourceforge.plantuml.cucadiagram.Stereotype; -import net.sourceforge.plantuml.graphic.FontConfiguration; -import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.graphic.color.ColorType; -import net.sourceforge.plantuml.svek.AbstractEntityImage; -import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.Shadowable; import net.sourceforge.plantuml.ugraphic.UGraphic; -import net.sourceforge.plantuml.ugraphic.URectangle; -import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class EntityImageStateEmptyDescription extends AbstractEntityImage { - - final private TextBlock desc; - final private Url url; +public class EntityImageStateEmptyDescription extends EntityImageStateCommon { final private static int MIN_WIDTH = 50; final private static int MIN_HEIGHT = 40; public EntityImageStateEmptyDescription(IEntity entity, ISkinParam skinParam) { super(entity, skinParam); - final Stereotype stereotype = entity.getStereotype(); - - this.desc = entity.getDisplay().create8(new FontConfiguration(getSkinParam(), FontParam.STATE, stereotype), - HorizontalAlignment.CENTER, skinParam, CreoleMode.FULL, skinParam.wrapWidth()); - -// Display list = Display.empty(); -// for (Member att : entity.getBodier().getFieldsToDisplay()) { -// list = list.addAll(Display.getWithNewlines(att.getDisplay(true))); -// } -// final Display list = Display.create(entity.getBodier().getRawBody()); - - this.url = entity.getUrl99(); } @@ -99,23 +68,11 @@ public class EntityImageStateEmptyDescription extends AbstractEntityImage { final Dimension2D dimTotal = calculateDimension(stringBounder); final Dimension2D dimDesc = desc.calculateDimension(stringBounder); - final double widthTotal = dimTotal.getWidth(); - final double heightTotal = dimTotal.getHeight(); - final Shadowable rect = new URectangle(widthTotal, heightTotal).rounded(CORNER); - if (getSkinParam().shadowing(getEntity().getStereotype())) { - rect.setDeltaShadow(4); - } + ug = applyColor(ug); + ug.draw(getShape(dimTotal)); - ug = ug.apply(new UStroke(1.5)) - .apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder)); - HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); - if (backcolor == null) { - backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground); - } - ug = ug.apply(backcolor.bg()); - ug.draw(rect); - final double xDesc = (widthTotal - dimDesc.getWidth()) / 2; - final double yDesc = (heightTotal - dimDesc.getHeight()) / 2; + final double xDesc = (dimTotal.getWidth() - dimDesc.getWidth()) / 2; + final double yDesc = (dimTotal.getHeight() - dimDesc.getHeight()) / 2; desc.drawU(ug.apply(new UTranslate(xDesc, yDesc))); if (url != null) { @@ -123,8 +80,4 @@ public class EntityImageStateEmptyDescription extends AbstractEntityImage { } } - public ShapeType getShapeType() { - return ShapeType.ROUND_RECTANGLE; - } - } diff --git a/src/net/sourceforge/plantuml/version/PSystemVersion.java b/src/net/sourceforge/plantuml/version/PSystemVersion.java index 8f57cca90..fdf0066e3 100644 --- a/src/net/sourceforge/plantuml/version/PSystemVersion.java +++ b/src/net/sourceforge/plantuml/version/PSystemVersion.java @@ -34,6 +34,8 @@ */ package net.sourceforge.plantuml.version; +import static net.sourceforge.plantuml.graphic.GraphicPosition.BACKGROUND_CORNER_BOTTOM_RIGHT; + import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; @@ -47,7 +49,7 @@ import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.Run; import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils; -import net.sourceforge.plantuml.dedication.Dedication; +import net.sourceforge.plantuml.dedication.PSystemDedication; import net.sourceforge.plantuml.preproc.ImportedFiles; import net.sourceforge.plantuml.preproc.Stdlib; import net.sourceforge.plantuml.preproc2.PreprocessorUtils; @@ -57,8 +59,6 @@ import net.sourceforge.plantuml.security.SecurityProfile; import net.sourceforge.plantuml.security.SecurityUtils; import net.sourceforge.plantuml.svek.GraphvizCrash; -import static net.sourceforge.plantuml.graphic.GraphicPosition.BACKGROUND_CORNER_BOTTOM_RIGHT; - public class PSystemVersion extends PlainStringsDiagram { PSystemVersion(boolean withImage, List args) { @@ -126,7 +126,7 @@ public class PSystemVersion extends PlainStringsDiagram { private static BufferedImage getImageWebp(final String name) { try { final InputStream is = PSystemVersion.class.getResourceAsStream(name); - final BufferedImage image = Dedication.getBufferedImage(is); + final BufferedImage image = PSystemDedication.getBufferedImage(is); is.close(); return image; } catch (IOException e) { diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index 237c51db7..0f2f87632 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -44,7 +44,7 @@ public class Version { private static final int MAJOR_SEPARATOR = 1000000; public static int version() { - return 1202104; + return 1202105; } public static int versionPatched() { @@ -80,7 +80,7 @@ public class Version { } public static int beta() { - final int beta = 5; + final int beta = 0; return beta; } @@ -93,7 +93,7 @@ public class Version { } public static long compileTime() { - return 1617526179012L; + return 1619349628741L; } public static String compileTimeString() { diff --git a/svg/default.css b/svg/default.css deleted file mode 100644 index aecd589ec..000000000 --- a/svg/default.css +++ /dev/null @@ -1,3 +0,0 @@ -.elem {cursor: pointer;} -.elem, .link {opacity: 0.3;} -.elem.selected, .link.selected {opacity: 1;} \ No newline at end of file diff --git a/svg/default.js b/svg/default.js deleted file mode 100644 index 27da2a695..000000000 --- a/svg/default.js +++ /dev/null @@ -1,110 +0,0 @@ -function addItemToMapOfLists(mapOfLists, name, item) { - // mapOfLists = { - // 'key1': [item1, item2, ...], - // 'key2': [item3, item4, ...], - // } - if (mapOfLists[name].length > 0) { - if (!mapOfLists[name].includes(item)) { - mapOfLists[name].push(item); - } - } else { - mapOfLists[name] = [item]; - } -} - -function main() { - let elems = Array.from(document.getElementsByClassName('elem')); - let links = Array.from(document.getElementsByClassName('link')); - - let elemsMap = {}; - let linkedElems = {}; - let linkedLinks = {}; - - elems.forEach(elem => { - let name = elem.classList[1]; - elemsMap[name] = elem; - linkedElems[name] = []; - linkedLinks[name] = []; - }); - - links.forEach(link => { - let name1 = link.classList[1]; - let name2 = link.classList[2]; - - if (elemsMap[name1]) { - if (elemsMap[name2]) { - let elem1 = elemsMap[name1]; - let elem2 = elemsMap[name2]; - - addItemToMapOfLists(linkedElems, name1, elem2); - addItemToMapOfLists(linkedElems, name2, elem1); - - addItemToMapOfLists(linkedLinks, name1, link); - addItemToMapOfLists(linkedLinks, name2, link); - } - } - }); - - let selectedElems = []; - let selectedLinks = []; - let selectedElemName = null; - - function clearSelected() { - selectedElems.forEach(item => { - item.classList.remove('selected'); - }); - selectedElems = []; - - selectedLinks.forEach(item => { - item.classList.remove('selected'); - }); - selectedLinks = []; - } - - function selectAll() { - selectedElemName = null; - - selectedElems = Array.from(elems); - selectedElems.forEach(item => { - item.classList.add('selected'); - }); - - selectedLinks = Array.from(links); - selectedLinks.forEach(item => { - item.classList.add('selected'); - }); - } - - function selectElem(elemName) { - if (elemName === selectedElemName) { - selectAll(); - - } else { - clearSelected(); - selectedElemName = elemName; - - elemsMap[elemName].classList.add('selected'); - selectedElems.push(elemsMap[elemName]); - - linkedElems[elemName].forEach(linkedElem => { - selectedElems.push(linkedElem); - linkedElem.classList.add('selected'); - }); - - linkedLinks[elemName].forEach(linkedLink => { - selectedLinks.push(linkedLink); - linkedLink.classList.add('selected'); - }); - } - } - - Object.keys(elemsMap).forEach(name => { - elemsMap[name].onclick = () => { selectElem(name); }; - }); - - selectAll(); -} - -document.addEventListener('DOMContentLoaded', (event) => { - main(); -});