From 521a220728d62a9af21376ff400480bb93aa4741 Mon Sep 17 00:00:00 2001 From: kimvde Date: Thu, 22 Oct 2020 18:14:08 +0100 Subject: [PATCH] Avoid throwing for still photo metadata retrieval PiperOrigin-RevId: 338497163 --- .../exoplayer2/MetadataRetrieverTest.java | 27 ++++- .../extractor/mp4/Mp4Extractor.java | 104 +++++++++++------- .../exoplayer2/extractor/mp4/Sniffer.java | 10 +- .../assets/media/mp4/sample_still_photo.heic | Bin 0 -> 42283 bytes 4 files changed, 95 insertions(+), 46 deletions(-) create mode 100644 testdata/src/test/assets/media/mp4/sample_still_photo.heic diff --git a/library/core/src/test/java/com/google/android/exoplayer2/MetadataRetrieverTest.java b/library/core/src/test/java/com/google/android/exoplayer2/MetadataRetrieverTest.java index 235639f678..c8fd43677d 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/MetadataRetrieverTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/MetadataRetrieverTest.java @@ -30,6 +30,7 @@ import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.util.MimeTypes; import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.ExecutionException; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,9 +38,15 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class MetadataRetrieverTest { + private Context context; + + @Before + public void setUp() throws Exception { + context = ApplicationProvider.getApplicationContext(); + } + @Test public void retrieveMetadata_singleMediaItem_outputsExpectedMetadata() throws Exception { - Context context = ApplicationProvider.getApplicationContext(); MediaItem mediaItem = MediaItem.fromUri(Uri.parse("asset://android_asset/media/mp4/sample.mp4")); @@ -57,7 +64,6 @@ public class MetadataRetrieverTest { @Test public void retrieveMetadata_multipleMediaItems_outputsExpectedMetadata() throws Exception { - Context context = ApplicationProvider.getApplicationContext(); MediaItem mediaItem1 = MediaItem.fromUri(Uri.parse("asset://android_asset/media/mp4/sample.mp4")); MediaItem mediaItem2 = @@ -85,8 +91,7 @@ public class MetadataRetrieverTest { } @Test - public void retrieveMetadata_motionPhoto_outputsExpectedMetadata() throws Exception { - Context context = ApplicationProvider.getApplicationContext(); + public void retrieveMetadata_heicMotionPhoto_outputsExpectedMetadata() throws Exception { MediaItem mediaItem = MediaItem.fromUri(Uri.parse("asset://android_asset/media/mp4/sample_MP.heic")); MotionPhoto expectedMotionPhoto = @@ -105,9 +110,21 @@ public class MetadataRetrieverTest { assertThat(trackGroups.get(0).getFormat(0).metadata.get(0)).isEqualTo(expectedMotionPhoto); } + @Test + public void retrieveMetadata_heicStillPhoto_outputsEmptyMetadata() throws Exception { + MediaItem mediaItem = + MediaItem.fromUri(Uri.parse("asset://android_asset/media/mp4/sample_still_photo.heic")); + + ListenableFuture trackGroupsFuture = retrieveMetadata(context, mediaItem); + TrackGroupArray trackGroups = waitAndGetTrackGroups(trackGroupsFuture); + + assertThat(trackGroups.length).isEqualTo(1); + assertThat(trackGroups.get(0).length).isEqualTo(1); + assertThat(trackGroups.get(0).getFormat(0).metadata).isNull(); + } + @Test public void retrieveMetadata_invalidMediaItem_throwsError() { - Context context = ApplicationProvider.getApplicationContext(); MediaItem mediaItem = MediaItem.fromUri(Uri.parse("asset://android_asset/media/does_not_exist")); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java index d478eb2b4b..313f1cebe7 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java @@ -16,6 +16,8 @@ package com.google.android.exoplayer2.extractor.mp4; import static com.google.android.exoplayer2.extractor.mp4.AtomParsers.parseTraks; +import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_HEIC; +import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_QUICKTIME; import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Util.castNonNull; import static java.lang.Math.max; @@ -94,8 +96,15 @@ public final class Mp4Extractor implements Extractor, SeekMap { private static final int STATE_READING_ATOM_PAYLOAD = 1; private static final int STATE_READING_SAMPLE = 2; - /** Brand stored in the ftyp atom for QuickTime media. */ - private static final int BRAND_QUICKTIME = 0x71742020; + /** Supported file types. */ + @Documented + @Retention(RetentionPolicy.SOURCE) + @IntDef({FILE_TYPE_MP4, FILE_TYPE_QUICKTIME, FILE_TYPE_HEIC}) + private @interface FileType {} + + private static final int FILE_TYPE_MP4 = 0; + private static final int FILE_TYPE_QUICKTIME = 1; + private static final int FILE_TYPE_HEIC = 2; /** * When seeking within the source, if the offset is greater than or equal to this value (or the @@ -133,10 +142,12 @@ public final class Mp4Extractor implements Extractor, SeekMap { // Extractor outputs. private @MonotonicNonNull ExtractorOutput extractorOutput; private Mp4Track @MonotonicNonNull [] tracks; + private long @MonotonicNonNull [][] accumulatedSampleSizes; private int firstVideoTrackIndex; private long durationUs; - private boolean isQuickTime; + @FileType private int fileType; + @Nullable private MotionPhoto motionPhoto; /** * Creates a new extractor for unfragmented MP4 streams. @@ -290,6 +301,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { if (atomHeaderBytesRead == 0) { // Read the standard length atom header. if (!input.readFully(atomHeader.getData(), 0, Atom.HEADER_SIZE, true)) { + processEndOfStreamReadingAtomHeader(); return false; } atomHeaderBytesRead = Atom.HEADER_SIZE; @@ -345,14 +357,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { this.atomData = atomData; parserState = STATE_READING_ATOM_PAYLOAD; } else { - if (atomType == Atom.TYPE_mpvd && (flags & FLAG_READ_MOTION_PHOTO_METADATA) != 0) { - // There is no need to parse the mpvd atom payload. All the necessary information is in the - // header. - processMpvdBox( - /* atomStartPosition= */ input.getPosition() - atomHeaderBytesRead, - /* atomHeaderSize= */ atomHeaderBytesRead, - atomSize); - } + processUnparsedAtom(input.getPosition() - atomHeaderBytesRead); atomData = null; parserState = STATE_READING_ATOM_PAYLOAD; } @@ -374,7 +379,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { if (atomData != null) { input.readFully(atomData.getData(), atomHeaderBytesRead, (int) atomPayloadSize); if (atomType == Atom.TYPE_ftyp) { - isQuickTime = processFtypAtom(atomData); + fileType = processFtypAtom(atomData); } else if (!containerAtoms.isEmpty()) { containerAtoms.peek().add(new Atom.LeafAtom(atomType, atomData)); } @@ -418,6 +423,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { // Process metadata. @Nullable Metadata udtaMetadata = null; + boolean isQuickTime = fileType == FILE_TYPE_QUICKTIME; GaplessInfoHolder gaplessInfoHolder = new GaplessInfoHolder(); @Nullable Atom.LeafAtom udta = moov.getLeafAtomOfType(Atom.TYPE_udta); if (udta != null) { @@ -655,6 +661,19 @@ public final class Mp4Extractor implements Extractor, SeekMap { } } + /** Processes the end of stream in case there is not atom left to read. */ + private void processEndOfStreamReadingAtomHeader() { + if (fileType == FILE_TYPE_HEIC && (flags & FLAG_READ_MOTION_PHOTO_METADATA) != 0) { + // Add image track and prepare media. + ExtractorOutput extractorOutput = checkNotNull(this.extractorOutput); + TrackOutput trackOutput = extractorOutput.track(/* id= */ 0, C.TRACK_TYPE_IMAGE); + @Nullable Metadata metadata = motionPhoto == null ? null : new Metadata(motionPhoto); + trackOutput.format(new Format.Builder().setMetadata(metadata).build()); + extractorOutput.endTracks(); + extractorOutput.seekMap(new SeekMap.Unseekable(/* durationUs= */ C.TIME_UNSET)); + } + } + /** * Possibly skips the version and flags fields (1+3 byte) of a full meta atom of the {@code * input}. @@ -680,24 +699,18 @@ public final class Mp4Extractor implements Extractor, SeekMap { } } - /** - * Processes the Motion Photo Video Data of an HEIC motion photo following the Google Photos - * Motion Photo File Format V1.1. This consists in adding a track with the motion photo metadata - * and ending playback preparation. - */ - private void processMpvdBox(long atomStartPosition, int atomHeaderSize, long atomSize) { - ExtractorOutput extractorOutput = checkNotNull(this.extractorOutput); - extractorOutput.seekMap(new SeekMap.Unseekable(/* durationUs= */ C.TIME_UNSET)); - - TrackOutput trackOutput = extractorOutput.track(/* id= */ 0, C.TRACK_TYPE_IMAGE); - MotionPhoto motionPhoto = - new MotionPhoto( - /* photoStartPosition= */ 0, - /* photoSize= */ atomStartPosition, - /* videoStartPosition= */ atomStartPosition + atomHeaderSize, - /* videoSize= */ atomSize - atomHeaderSize); - trackOutput.format(new Format.Builder().setMetadata(new Metadata(motionPhoto)).build()); - extractorOutput.endTracks(); + /** Processes an atom whose payload does not need to be parsed. */ + private void processUnparsedAtom(long atomStartPosition) { + if (atomType == Atom.TYPE_mpvd) { + // The input is an HEIC motion photo following the Google Photos Motion Photo File Format + // V1.1. + motionPhoto = + new MotionPhoto( + /* photoStartPosition= */ 0, + /* photoSize= */ atomStartPosition, + /* videoStartPosition= */ atomStartPosition + atomHeaderBytesRead, + /* videoSize= */ atomSize - atomHeaderBytesRead); + } } /** @@ -779,24 +792,39 @@ public final class Mp4Extractor implements Extractor, SeekMap { } /** - * Process an ftyp atom to determine whether the media is QuickTime. + * Process an ftyp atom to determine the corresponding {@link FileType}. * * @param atomData The ftyp atom data. - * @return Whether the media is QuickTime. + * @return The {@link FileType}. */ - private static boolean processFtypAtom(ParsableByteArray atomData) { + @FileType + private static int processFtypAtom(ParsableByteArray atomData) { atomData.setPosition(Atom.HEADER_SIZE); int majorBrand = atomData.readInt(); - if (majorBrand == BRAND_QUICKTIME) { - return true; + @FileType int fileType = brandToFileType(majorBrand); + if (fileType != FILE_TYPE_MP4) { + return fileType; } atomData.skipBytes(4); // minor_version while (atomData.bytesLeft() > 0) { - if (atomData.readInt() == BRAND_QUICKTIME) { - return true; + fileType = brandToFileType(atomData.readInt()); + if (fileType != FILE_TYPE_MP4) { + return fileType; } } - return false; + return FILE_TYPE_MP4; + } + + @FileType + private static int brandToFileType(int brand) { + switch (brand) { + case BRAND_QUICKTIME: + return FILE_TYPE_QUICKTIME; + case BRAND_HEIC: + return FILE_TYPE_HEIC; + default: + return FILE_TYPE_MP4; + } } /** Returns whether the extractor should decode a leaf atom with type {@code atom}. */ diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java index f830c86edb..409931b1de 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java @@ -26,6 +26,11 @@ import java.io.IOException; */ /* package */ final class Sniffer { + /** Brand stored in the ftyp atom for QuickTime media. */ + public static final int BRAND_QUICKTIME = 0x71742020; + /** Brand stored in the ftyp atom for HEIC media. */ + public static final int BRAND_HEIC = 0x68656963; + /** The maximum number of bytes to peek when sniffing. */ private static final int SEARCH_LENGTH = 4 * 1024; @@ -54,7 +59,7 @@ import java.io.IOException; 0x66347620, // f4v[space] 0x6b646469, // kddi 0x4d345650, // M4VP - 0x71742020, // qt[space][space], Apple QuickTime + BRAND_QUICKTIME, // qt[space][space] 0x4d534e56, // MSNV, Sony PSP 0x64627931, // dby1, Dolby Vision 0x69736d6c, // isml @@ -203,8 +208,7 @@ import java.io.IOException; if (brand >>> 8 == 0x00336770) { // Brand starts with '3gp'. return true; - } else if (brand == 0x68656963 && acceptHeic) { - // Brand is `heic` and HEIC is supported by the extractor. + } else if (brand == BRAND_HEIC && acceptHeic) { return true; } for (int compatibleBrand : COMPATIBLE_BRANDS) { diff --git a/testdata/src/test/assets/media/mp4/sample_still_photo.heic b/testdata/src/test/assets/media/mp4/sample_still_photo.heic new file mode 100644 index 0000000000000000000000000000000000000000..0a673803b7b8e6d9e698cef697da5e44928e1d1b GIT binary patch literal 42283 zcmYg$W0WYd((Tx`dB(QR*tTukwr$(CZQHhO&%AT*UEf--R(Dd_wUbIGKRQVT0002P z#L3;x%-Gxz;GbBVn=t%O2duF+cGCY3_D>|tjI12~rvd=jnHxI&pZ=fR%G}^z6%zt- z23ihU1_}Z?0yjoh76LJ06+r@H8$(+oV+R6qdRlsl|B&JA%$=Qx#fP&3`*gq*M|33sE;9rs5+}y_GKlp#GsQ(Ja|E2wF&&JO)cwmBmoxtD&gaQ2h{SN^cAnrfOzsIcuh>!4}kx~Hgzg7P~OCAu8A0BAR zg*Zix6~uqI|4aCY{?WmO0Q(*44EX*zLNRx=Gyb1L5Ox3naKC>#nz^0z|BXH%03fh` zz&~dISmqAK|NHiTBWY;lX!x(^|EvH2g~rxK`u}F7V3i!O78xG8`Z1$oMUzCgF1w)$ zwZK=N(pZ{qxw#$HV|ax#RmMWtvBG&|L{-AnZ4R^-?wit}0}~q^SbR~)*%4Md?mkL^%bJt4CgsLik1YDlp>*XiXMcqPEVS)z6t4P{#6!ga^5NHsQ)Tx@em*>~ zzmj(TBhgy&!ypt;JD#B3a)gWmr80hb?!d>thKQ?NU;#iAzM%vL(KBqp2d9Ss*oXgt zky_i?Sqwi|&<-3sthImZt~(XkO`O--e{PFm!EEYKZL%Hr*NAwz;+y>Gj>ZVnvhnsO zxdTo{J0kGmm0Lhb=w&G#v*-z-*w;j-0F$5<(p?{3M7bv2M9-y3fg0ghO8<~n;&V4o z^$S0W8;dS-AhDZ;-glt8^p}%$gy`AZ4s&9V9JOH=^qfY<&k0TGP34O^LRM;x*D{a8 z%p)l96LOHv#+3FP$@?_h0##iqMNpIn;t{W&tDYtnPw`-^p>UdEb0_DyV3NADwi;!B zuF;O6%)JC(Y&l$qXMIu>8SGa%d?UIIco*AWtzhY>@&4e+`qdEY0;8vk@o?1hYD%lo z4lhvh+7-00G$gkjRZJlz>baNEScfmo zt;+oXAWsra=)BHhmRC7-ztJuUoOK_Vs!M$#7E z_?_WuGfmwNP^twp(a{N8NVYomU(+kmO1lue|d(h{`>@KBKMz7OKw++@~y8zvv5kj?+KO!iLhw}%L&TY_Qy0IA%dgOQdamN zZNs_*Su02yTG4fX_cVhLj1MFv?8l0=)7I-ck~o5@va=r6b~kC`g_-15<*^lK(ECl% zgwSbmpLq`Ae(oN@Vh=@T`=V`o#j31r=36|ldP)|*kWARY&0vZ_SW8D)Txpng!gF$ql zdbHy%Rp#*xlvB}XHH=B_bsFi`2ILhxhTr5F!fC1pr$M+tgn_+g7@_bhP#Ie+-AaKu zEV!y+Bq}fj>cU^8cEbId=~+uL7ne+6gg=S3@VAh!w-}Yzbr-fIlJp{+H1UT}Vbdkx zi+p8S1?@)+NIJ*L_nCP0+YOe#id)hwrU+%Ju`)Yo;6Eeh`tXXWzycowqq1H(Sz&)w z$`d>+D0?BYo?5A=aO>qWXx2z_k#eb@0}WE^isyor1-vurPx&of_DKSAPrND#=GrEJ zdi%fC@dh3D^a~s_G8xW4cQbUIU7)^R=!gXS5I9qsE3n*B(-59VXeRU`Q_7^56A`%i zvfnf229+wt3ODuUm|dZFnol>(vFoCwn%9MkBn3R>ow1088mAjRV*XkxQJFFJdNd6< z?xlzQDp){86N@jvSJ1i2cG~Hf=~qD5r68kx?Pt$mw@f0!Dzag-CW9}SCk7)m`aIyX z2Zgn_ne<=dr6J}<9KRhe8-`OV%!kJ&8Xh$9;@LGz{Gf7;O@(Wt1AWdJgX-)-?D%A9 zQkI1^+M&+{N)F1*Uz7v+O<|`a1}2Xb=^Yxi_GB^2l{8<$_37jiw;YzD2-la%o&HrPV= z`fx{sqn1#I-nL4YKpDw8W*`Wx{$0#V`T@(TYUjmB^#eU=YrXJiu^Rs@Pm;mkko91F zmp$@vNFQg64cL)h=G0ps^`r8&FBP1Ik}QYe(?+{%vj=LC&q__n$MsN$2Bv}JbQy&% zhEW$c#UecgFHUqbIMYFsGr__r6Wxzi0VI6C8}XNKne1DI(o!hkwDeSNT3$kNY*}6G zLQ28#0kBG#mPNIEB8ED53TLD!G?Y|j*4_b<{uGUv=8JBA^+ppjqp4GLe{wh_y4c7W}&(mEbB(PznwaVOsG z*&&uAo-lR%aVAWH8|x`O7-ZL4-#hpMd@PCDFzwX^vGeyB?m`*IbH37|PSXgIvq$;T z2d8)2dhh%PbgqKj`(^M-#{{wdB07V#boroYYZLMz*lZI<3%9Q#G!l-oe;&| zFrFuF_CqL8pXcEomSEhWqOJbk)MEGRK)1F9*#hrBwiR zJQNne&{m%zcKe~|_?lu@m-*vdVlXk?PcEIo9nK??XWqaRvBiIB{F_kCNyG8^M^srE zPAEGhXXeffnMgD_Y?f?KDaZhzWH4Sv@JvQwH%E7o#eFkwW|aXF&CU|OM$~I+ZiM3Vq7#y2KJMx&ch zf>4fTk**9w|J6n~YAa?^WYy%D5JE8}^VfxwVKJatS;Yh|Gie~NGnh-SOlrDOE1(|D zWJNboR!~Ea0|AUnIfJ#_Un-r08l?Do4{cQE0_{j;(?c_WvdtkXGgV2-c?U8E;kr?W<|DvdO{3gBJhZ$t)3rzN~xE~hZxd&hm^ zrQL|b9Pvij`Mue@2Y&~ZoCwQ?-iwQXqFrUbxp_%;({3~5u+_7jwWXq;<6L)bW<$XG zmEHh}Ve|BwwO20u3PU5(kQq{LKPBf+V@`51MI?&*+4s}*-(DsTUS+pJU&(RK*iexR zqc<@znq1MVz41?XvScapdN0uB7z0@Die;?t^`lg(6c2h@teH$+i& z>!P`1sqtz{Shu_+h({=^$XILA8IoTRTJ$F&ebR{Scy>(QP!PI@2DYCsj@lm+mvwUW zS3hHX+}s=U?4}yLJpWCMV7u#}kylH8%TDWt=jqLl6#ky0CW)2uze2A0+9Vj@IJEvJ zW~`l_smzK==xpW`q3@biFm{5?r~+cR5>tQ@R?vJ-oY`6xeFuX&x>}>d^WT#qi6r|o z@%Z6xNtj=Em33d76w|vRy-uCG*r4miZNE9n$&8VB7E;hJz7a-cE1L-_PVB4Q1N3q7 zUD#u~#EA8RXZ&)Uex4G}uPXIhD_lF5P`*%g&WyVa3 zbqU19lSFq+dqPOAjnJ&JU;`@IhwcrG(j$M#ytgRRqwflBQP;1H@>dE0acEd&8&*`S#4w7DM+%Fj5dRsqN>CcUqB4-fDcSI!h><}IBDVz6&1F)}RA z^1wYLesLMm;hd&=o!-O5T2p|bkqbjUJEobkZyyoX|6uuCYY)Hqo!FeG-qfMcNQb7= zmjxvCRF!cEmm}ZH$90^F>GkhL-ehIFZ)b?Qs&b3KW;bMw*6k9%H``_L15cqK*Z?DZ zg11UyDY|w;e`vTNd(#f|=XUT{nxZY4>drT?%+`!#1GSk$=Jnlutpw*@Uq6>i*bGN= z$)=?>hy&oColLtSiDz(cLD4UyyLQ0RLfaAR%tk9ME^BMtr3qx+`j(=p3(d0lCe?YX zsBYJNT`yaGh*eKgRnX{)`{R=lmnh&BU&XHjt8<|V%^VWJvw zi%LC}aXrXgb+90GOHK*8Z?OaXxfIlmPt-WW8{8yT9X)ga{YFscjpb0m_fkDDK;1#f%C*JAxsYl1mriIR0t&Nb=oF6pE)a9 z(l(z+XLb;?YMsdfe5OEFtz5ioF86Sx&HJ~0;g0O!1SqdObIniV$fAoku<%@k0_J2s z3egHj#-w%F#R;1B+zOajalCv1mQ&pR`hJMKxf>~2Q#`zPzzI`sa}|`^bEMi8zEa1& zl|9Ttw+F{}`jYx}#I-}{$pb{-v)LWopEREHy@c)~QVmjLC(@$e#{d2#-@XXuF49#gZxI|);-Ca+CH&xMd zS_Bo@*Tgp2jp2w=1#pp#t5hHD_MxI?NP9dd9_XD7%drYFk+pFJJGAHU{y-c>3PIOD znISwPB3SHX6#RFfI{of9T)yu%XSUWMCJbes^o)&H$3$dh@YvVVCFU?FX9|7Rp%%2l zGNiF2?Cwob(3t5}^!rp${q}twZyX}`+5o^8)0A5Q*}ZTRiVYk+)w?k^)Vh9ql<7*A z(yY)ilPSs0-KeMV0iaknsivaF_3^|PvuvhoO;Q~!2K`Z3KcYfnOyzI7*F!40 zm%&QPiJ03t)D6H>MMVu8?3T9m<$6^bi%tR8lDEHc=MAl!LF9hs&Qst#*rFfgE`8Cw zdR{>V+DoJSvpNP-kF-Rl7o)yzoec*aI{6{`^Y>I$H^Mc^XFYLLC?o?_dZJ&Zcfemc zPcOY$&Ge!lKE;)_&IAj(a~OFL^X`L&g6(oCVC)ORsRbb;b3FdT5i}^q)%XfILUs5xX21ty$1 zst!aVn@&F+{h)-Nbg=fEECm*2nO}K9TXw=Zu6yRs`Y~GCpx2s)J{zc0S~Sg@D*aG7 z-GQ+sFM`|KR8_NRhQk{`wJ%3@%OfpF3fO--j+(~TMQA=zSyLW|L+gC0S^iuqG_{h8 z(|jLEsCgk??MemO^TF>-KdbWHWm%cYQqRUoZvq8~IQ*;@f=jkX9EvTyG;Am$@ZUr_ z%D9KFBSa!J;GgZe%+#f#QX>9=p#9mq*Lx549Gl1!83c)E8UEdc{YW*h&KY=;Fh{=F}5K4xk5{pd<5ravYC{RDd(>)yc<l*SaP|ZPR1Z8bJsk@3F zicx>mIjw00-7xZja|}hQwqPYep?rBP-v6OA6mFI;qXlg}(4SfZ)pD+< zDkl8P^s7|HO`tL&Hy!R&TlTw#*JpMIXndYvwz};KM@T?^7Cs+qbvVmFPC40Ua7ToZ z;fKTncTQ2eU&9PgCw*uq6n9%NX-h@l+Dznbh=TdNPuq4n2C-7<@Gcht%{;{!bT6DY zcB5XNKH=qO@me{qUmo)EB@`yel*(5UFm1t_{gREwMMJ9;pm-?%dXmf4D9_)Xf#AoT zVD6f{YAi?DGgxHfbyr)r(_>AFXW{(Sut%~AxjisI)F(JklAzm3l@~8Y0;)@E>#76y zYUaAj1)-7h2Get#{W{Mbk0&=TIH{RjRLfIs{8;it{2Qa`v!}w#13DJ~eS+P_MGwsb z0MbREuyvutET{Id7X5<57-i`YOVbtUlFB`il`TXJ7Y$_gw~?tQ9ol+A_?d@^A1`EW zn4sA<3Z;vKlkukfSRWX&#M$S_#XGEx1gPoQ+MDN-QJ5+0&z!0rUDHhn9$7HE36*Y2 zEtF}})~9n_`FldXn-o6l%R=w? zevjFI9X3nv=*l@7>Eeg^U0|@2a@6k-cdE=8@ZeXD(|jZeAB`&;2&=m(QjD%R*d*k> z95M9M{A>)vLgDL~Vc82|Sml9O-KG1xJ1Y;ltO@^y;rP#_Gcm8ngWZ%$i_+&mOaXhdzt(KhS01}AYUJq0GzU>V zKe}1^4KkruDD*djBk7yI}N-la*mHlqS7Gg&%+|?oGk@;ANx;J;7LJEX= zJbSI|E7pgB&`C(~V@Lzpfu>_b8tug%p>t~5r|j#B-1=H+;y`3rXg!4FlH<3-g;HRo z+!kBH7z3I=T~}K?qJIc?P>9Tfff;K~fT)*~9m9s`fg0(1hK{?;6P+G`shqzzwZ0Lw z%#YDEbogUR|Db zddf2`BDM48){|DO%FKL}Olul*e}7qbedO(I$X9#ZoXia@2zg3=_R*xi7q>wb2NEN9 zZpx%>u_?D&zy$s*$T9~EOR1QTwR?_u6;$_1^r`#%s~*U|wDK`H*BX9+ggk;h&!*`b zBVgR(g5>MBT$)VNp{48eKvpmda!IKuIqCrod}uo^qNuSWhZ6vL@0-or68xp z)~uq_MOH47`T11A2mzx?Vq{tABc!&tq*cFAVcE$Ev)pP!aSwL}96_pAulK}lr2meL zmI69Or+ILwep%u1i)aZa{Yp7%ecB^OZCfaa_G;L&dgw7Q(n#JMovHSFir|E~tzfpg zsIoKj5nJLDk6PpOPys;5fP>&&CK=@ZvE}vZ$?9+@hJZv;i+YW|6W=v66eG2&(-1D| zGD?t78kJ#X^$U#_tu<;v@Cf41^MYBJP95vG2~!>0fSj6q<`MJ_ePP;d98xnjrwckS z-1s#5_h9W)pndRoC0@VvKoIh&BDJVJtG95rR69o@L>xWP1nD(E>8}`lADzs?&_e5w zheGjlvqlKp6*zb|$%3jk*7x~MXja!S5Fe&ZlpfAEo3(i!9_9mhGO-?%Pk;bXWY!U3 zVd`J45U%=LH*;&s@_-g zWDzl3`^9zNKbY#M8yQH?H`d|C%!Aq+@{VXPZAosMyd2O5F@D_Cbf?;wh-Hw$}5>P$Ju?oEiGyml#;{*r&-kL?t3+T0tdNpFJNJagWDR|MiM z>8qRBq@ZIQY3#N)4YT16I^M3?PBR zzxs8*3GG%*d2DBK*y}~S)O;pRVzMdrx>Tt}+6s8iBO4nDxvWFSyzOJBoB%nhjyi-*eQn!{+0fszhBt)+$V0oj=i0YR{w~&soo0Zd`7%baI~+~Mq+Ln; zL8d`-2r+8PUX$aRgm5JiL){S7={nYO$Cl+iEyvg@+@7t~4aex(aGFqA8_Ka`tfnCnXt=LOL#T?{Va6 zgq#B7x2B2V=1evN2mDO4DM}aAm+F}?cQS2!M#gd3?HpJ%_LnYAF%r;iQ%RoUr_s=v zb|VsYZ^cxiw6T=v&Bt>xjXIahrfaCa*t!wDKt*Y76O7Lz?!daaokLy{QJ5b70nnu? z6%gTe;CS?nk5#S7RU}!R9(VP4LOq5v09G4?rZ58WitaWZeS4l|5&=1U^!_ob6|GE| zd%XI03L7*@66ZX0=GvyW_Bth!2b2Ea@{`X}Ht_2wh zrkFM}x}*2#(uP~f(Z7Ho4GvT6;d#}=q%J6nGT;74&991&zn;oOv&7Xm;Atl*TgJSU z@M?uBf=ntamGt%3u_vvJ6X5GF+Ts${Nu!kf%|$SV;a1#scO4S|R^}JPi*q9t8bS!0 z=1~dGREh{&w!=g{xyyJ-vB2eCobz#d>u9dC`Teje2(|C+4UfZn0>_+pgzU%xF7hjh z;Mt=!2SQ8;@FXW&vsA{XgNC#4-)L$8YCya9LO%-xexE|aV{qL4aE`Hp5-t$#Dw~7T zVOn3Cd}{3~iiCYM9eRLSuGxK`bz^A5kb`y z$m<}GV7z!u0@B^k?(Gf%iox|X@*Z_rnhDlRV@hSDC^?zUeWhA8Cww^#0YJId?V36L zNCSIUN-;-7=JuGE#70F>|LB2^vR!{c!1$qH6FfWCRRYk=T3MCVNwSpVi5AEn%$yr| z&mtiWUj1T(gM5Xj!lD+;;=E)l!J*o@8(%qX6Plw8F=0M^DGY?Y^W29U!9>Yr`G(>N zMYzAzAPJ8Vp<+td&r%g`l}yNJNAdLw zJ!|FTCo)#TYTtQX>G1w`k=X!`P$1b5h%_ltlYsvEczJXaWPIjBzPKkdz&kQp)dlDP z5nhVT#amFr5TaWo-~U3&Jibe#six{!%*k@nCJf`P$Np z-&nc#-Z>=4r_j$5y(pl5K8!&_*>sUjROp7sqQi&{3RUn}Vek1V>y-Qp)g?|4R@Ln+ zx%?!a3BIw(4t_ANbx#EouUn8O$vHRF=Trd4WG&JV)sj3ZIP`;M7v(SxD}y0?%af?% znCz+1x_8W#9ib7Idj*p0V!52y>owOy+b0Y|;wWxES zB21NAzl@n(TvCIEV^&{Gn0JO6DfFDyvT@C!#t$72hn=!u?>6tR8faV1#RQswA73&! zYyYc=-#iD~>22y)`)@mVA@lSdq>`w>n0j9p8jgIXf1m3K9m$$xU>NE+B2tO(pDt|+ zR8@E`j?-$+DGDkrj5a5?dbTdGDM7XCYD^DV=uSnAW~}#posb_bOoAPmla%1TYtIp$ z+c4;Tu;Q(1s}ztIprqxNRVdM?jwKtc^9s1)$b@O3zCe(pFjK;E%K{lovgK`8Az|_> z51gZPg*YGs8HFmkV7=Wv=tI**-m9#eUSeBBc6KKOMi|kA(U&1hJvpzYP_}kEb;96+ z7JQShq^5%WEI&nbeYHl%mrFs%ZP({}tbkP~svmX;J;NC6>^x3sKGces8~p=c&uN<9 z3UXB*rhyGmR^uP zn?>3`$meqx&7Cg_zV|@woo}g2N4~Dm)3N>IOc~%A%K-kkBZj4156+<25i3cGc{{>C zuNn-@>Y6+8%-;Q6*opTr1w^g!UO#OHB5kjg=Mj*;jvq~h#a7mrfujQ{__Q>67C1aOVYDHD-|iC>Sm! zPj^gZ6H+2&%n&PL)Z-Kv+Mqd!uY-YdR8FItAxNzd^Dr4{^tP<@WWA0>08qqyr!P1IhTMLZc9O0LCc z-R@*UNVdi)>)J_Po-d+Z2pHWZF$#CBcd)|p!~~OoJKWypT*l+`LKIACnIXUV7{7LE za6wt@or{XR@0__w8PP(!LvyK;1w>VVznez4`Wv3YJ~J+z1}Ktgpl8s9-pBqYhjP;F ze0Q&fn0xajQ{YcN=8BohFshQ53lMAOF`$c2k-;UjnTXub-(j#xgSUG&S>rvI#pO~> z!s|{L;i;H~C~2$*35*B21Ws^J@_~lqO!!LRumQDH7>#3**%tl7a~MBHd$ zTZrNo__>l=eH{=0=sA}S^T?gu%h0FEl5!u2oJdy+e&{nsr`RnQq;U;Q+@||6jy|A; z@ISQZOer7IWiCkB^E*GU-1INrFie&*S6*jN*OA7z3gSX{MNrPrBC2*^hc?T4ap`Uc z%=1eiMAF&}j{z`PdnV#8#qgBVDhG{aBIEQ_G5_L!_Hr-*v90T`{Z+Coz!V1;d?~s> zLh{m29G7$%#!DL@59+WrVabR3OnY2V=Ui3-cn1*8JGY7D(CcQcPpNOPK=i}GoTfL= z8bS@EM27WQBL`aZWM&RIvlq1w3g}^MC9>){7XT0_U(&{geRUJ}rH3$0LJZDHeKr%b zy9SA8l>EL~F~rHvFfX|0PIzEFeptj zQ{>6^OAIOWQl23T!3{a^@~#@63=xCMuzo$hUf3#afb#}L{X@9@c3g^|tC1{XW5UV% z8xLx#XGCMHpik4^&=}ljcjNmCN|hDY!>1Y8`1LMZ>+WmK%uyPmJn_cQQPZJzTT>d&n&_q33=Rpquqgt%GsSmsYM8hGcB}hY38|f-?-=kI zGsfmC8^u9x`q;xd>Iu5N&goVE{M%ogQ|$93CkMs#AZfq}NF+Cm$EMkIusqzWORh!uK$_<_QJEEM3b=07Tre_SLA8LuWR}zc@9LT&zlDc|2p@MHLYpSUBsp3;7 zRyzt0o}`AZ7Ia1TUuM3VD}`x=CWc(%`XU?qM5W)%yz!>MGJ@S%-hcK4F;I8qX$ao6 zKWg14Cj)X6#Y=BDr4x&-9Z7L*+$s<3ExkS;)QVQ8`Z@f&fv3b5bWy=CfALitCJviZ zB}Al`b2>15VWI z(IQipzy5K<&aiw`ps49WG^cvF%6g4J55BXLb{_eFiltGYij}fRmNCz4ud8HX8&j=p zKN4^Nx^8fIXoMr#UY*J^DW;ZWV*PhDuSjtNI8mNeKZjR?b4n7AL&lh5OCLqgI5Z8= z*5cn$v8jpYkx9qCH0|jwCk>=G09t$<$AqqNI12U$#f7*)xO!D{V=zxD8w$b@73SNC&@!v&=eEQ1HAnKhYdw3VJ>luW*S$N=Ki z%;eb0|#4yQxv2(o@t_%=8EtpKd%Zmk{l8OzN#rU`(@ zzm3Hm8?bWcwn4-;!cABFiGxnbX|P+*B=+J`F}9$$IbaOH%xDk$9`;P(`YU0s#P1euAN2lwNPPOY<5sf|w! z7)Q$Ibi0NK=`}s^Bue=6zq`@s0wqONR6$5>_i<3OXi; z1j<71)Tuf_EL@&GM2KJC?KXfmW*CEj@Cu?RUa7!MDHi-fYoMvT%3K==@+3=F77YVx zvlf*kT>PnyzUwh0>jMq*8%ltXBnNyRWDU!GBYQb4>L}+`kTo}i0M758J8&u1C0bw&a;f)3~#Cs~uw$#dF ztyj(Y;I+3oR|tj|OS2EFwNZ}(^m0M-%n+FkTHIEV(|RDuj9fvnqpZ6oP}Zz3Cbp<2 zEPFv&%8)R9=RvikF}T$C^%1F2OKxhLW`PHTdIco`^RdK|876M|@7W}xn3sjEY zDwh==)Xcg|%J&R1@PFXDT%B)=7`O1md99>X6yzadxA+~~u(QcQIT7v<3G67R!9-~;B z+dr8pLuHRLt3ZyIOT9^h16e`Ecc*!Hj%Il3iz*K41wX|cQ}=-dc-wS3E}7FzIL10$ zkZvf@sg4)PZ*kfvV0~-fh)>pO&M14iT@Q#6F^5#0K~ykqfNC7GCpi>&D>NewLANH> z6dsqDWmplsS*1R2%b0EP8EDwfc?q=?0=i7*JE!nk$hQDg!Vx)E45R6{l$;$HHAo*+ z_ia(T=4|ld)Dj%ReOgvO1<4-{9jyB{hZOjhc`o$Qc;wi#lQgmKG|kv;y{Q$#`dX$ZV zG$h6DcvdDsf%B~Y@>$LH_mi%au)~hG;c@xMywtCz|0gTKqJ3#8kW<%=PCU2qq9e9w z(|^WvQGo)JG;CKxK%-+^4!=Cd8geJEv;+gn<_ExottDZ%xoN$gC49jG?saCvC|(Yc zblS~$^Aw~71$=&HP)|D76VKdQ&SNccHEfh>mMKYQiLG%w|0|eACFLbpjjD5pSdNpL zcA?^I%xI^X#!BoH4uY5yv3vFXnO&j^H}r6h!Aqw}p})qE_z4F7Ag3v!;sAKwCP$1C z+lpFVb7WO(9(}EQVyhvgMf7b^)d%EK5Cqexc0d`^NOwpZ&I~4rHi?Aj5oX6Z%e>T3 ziNYR9o|rh--dV~C4m8NmDBe>+y<{iLmr(xKi=#2)JUYn> z#|Fyq8s?1R65vl&aMtg{t($AN`7D4X>`l~k?iiyNt`y_}!9~0ycsC6dYww}t)oBMN z{ZnZbTX4Q5TI5aT%}ypr2Tx>ttD%c~OgyyiEFe`m(*3%(AxXv{rPcrqQ^ZKcJY*Lu zSm~FaLH^oZNK1z#%JqKda@$NgLx-Ar(=1;NZh?&}tDIeTOFE7i;3BNeueel!-8R`> zM0b^WJ0p3RuocOer|BxUN~FMsDBPzRh^d2vt0r=aJ>nTr!(SKy(uJSlp2uvPx7zxd ztp`~S@m-j`+4pdF<0<4?Q6Tk%%(mDt46(A7qfx}ACRO0e2`WsvQc?m=^Vf-8S}8PJ zCO>6KO6w$&{(7!<=;rydpuDNyxpR6u0@YRE(ppKT{a0Mm^w>)91qBo8Wyi>h4hrUk{N1br1y&qbg54$K5J2xnehGq zvk@AlpxEhU`3Q7;?6&SphOWwXtR^HX1g!#bsHv5o?=xVlfd?#*WtY7sq|Jr84oC;8 z@kK5){RZfWKIvCm9dSrtvMil8I>ptELA|Ko3v%t%=mz=T(zWlF(LQ_Pw7qDtSiDVUCO{HWEDfozb z>0|G>Qvrjb>a+3aW|q6E4_il|_tH?p5Z;*xyCJr^)RphFk4kMulB^M4&~{ysFP&Z_*^}+^eATw)-bbwaeA0r z@d+iB9+VEH&6_f`D%vTj=jC``a>&tG)p(0q9=R1@n=2CdL30N!3v17fQ@Yn&d z7^SE-b^S4;qSUAED?jNvkpd{UYFC-A^t`(u9nHz0a&rLjxuY`xt^`xms{Q7SUX- zC%8j786(W;eJTY6cP%m5V-^xi==;CJ=LIsMq3)aHs0}N6g~8(Jy_DL|7B;%+nhtz= zbTTxiqBWN#dw3jLy6q3D?Jq!GzBOj9eg{Q9Ig?PaYY#?@Kd$oN`hldEqac7v4nb&B zq6+|qU@rDovfAS7;8H@Kic2{ZXFrS8W#}*~O>XrVXaWi~d6$JVgPkJDbwTG=#Yi#k z?TrNw>P#*s-4$sv0PS;)Z@g+jd{wU!FJ?ei(_B6Vq310c2>PD_YkXPp(sBz#_q%yy zCU0bq-DQZY*!ZLBmt;$LI+nQ}`VDS%wsEsG33&WPT3CS+Vq{8!Yuyahzyvb+q)U4* z%_Yv-h7ys-d}X1krG2-lTJZ{Q5w`EuAUVk0XAdJO;&j;qR->NCvbt{HZ%fv#lvxEl z@*PfVaQr@!ZL&4GU?_y{5W z%u=MdbQA>)c8zw4sDk3*bMzYGIMn*I)Ec z{JagodfZ*n-z9Mhc33BTC9MeNpe67$arP$W$q`AfNxi5) zOz)2WLRWns?Zd=mu+XI|j?5e#%cVx%1n;9VvuEk6HDc574Z?*QMxR%JM2!s@R^|#Q zRPy^ZMz)TkvO`j8@^4i$Fl@6gu!GDGa-0~a5OB`YIn7U0WW>F3M`!c6b$?g(JPUg+ zvaGf{dUh`|8@m!=vZR{jQUL3bxZRrm^8FjEChYdX;6hS$-a#5C{40wzHN8W*k9QPw zQgoz=1Ji$)H7oZf7*fZA_GjTKGIVA@_}M)o3~&AvCr)$hCBYT+cLU!JsykAl8$<~H z4Cr#FE_ho%itCUV>qJ1)nxIzGYv7K23K^u*L;kkA+oe1?7}i(}Q5={+|N4@%aSVzfel(F&b1)W8<#^)7 zQg1W6eQ70JdS^oC^v%BD*?{GVr<(-=@Dv{AxRtm-68OAaUUB zSQ-k0TM>LEnnssnTngvAdq%a|$An*=&Alori&I@l$6e50YL))? z30$^4+3|L2422tP^gVmun1)nBTM~K4ZwZcg5MWREuicP7Y!HZ2g&y~c>#BPargA8l zg#kyfh~wxS>MSg20HMGAm%FoIjFo@X!BjuWm|(#LeS0l$J&^bHogL0W)^&+ z>l0cS=fC21)4pqZ1r)%ml8Zspy7#}hZ_xA9_l-$a?=i4FBm5ZqybTEoz0>bcT5NO% z;A|`L_*YBVQ#K%+In?9#1UIsjs0Gv$1P-tckY7uli zt;eF0bcjA|dp^%$41^g>ibEJ?NlEf?BXG#cRMx>NVc4BrYvJ`I@d@ zihs45&&_xtwqwMR&8MMiq*GLjkQ@t0*&) z0tDY<^V+HjJuDZdh%t71X3Ji>)jW}n`hh*Mm*tymK#dLNmr7bT-=SmVniA)W`POLd z*Zo)`O_au(!@83*0W$vDj2M`Nm-UVTw>9AtJtgAkX&=Tnle$NjE-xLz^K$=W021vT za92$$<5(YE!4I}^Um;&1dOEgYEd>%JrzAC^pM6dNGj-T-(CuYU9PB6m%;Ni!h!nNZ zk@0tMwIX;wWZzS~(1&3IlLWgxbWX35;FLL+pv~9N`sk(P`UqRo;0#(ngEITNX1?4c zBsFww|0C?zn0;PTE|V`?)78`(9zJf}yRuQeV)CAIEncH;A>as9;QDtog{=`|!*R~8 zfi`VLduj36Jw$_4mGh>*OD%|!bI3kY$|k{0sVsOU=ZlP3XxIG8;#ZS4b6o9aOJ1TP z^%r}}!aZO^BaX0&#U5$4Ix~;E|N3Mp>QO=M1olBQY_X?R4K{jCR=>^4qkYBWKKJj0 z_IpaS(V|1OAc^;a?}BZW?~g!V?krORa_<0Y2$U+uCiSEQ>6|b0ez;We-kp&kROZe0 zMLk;%DI#^~-ilLLJ*o({*Xzd_`lbk6Z3ZN@x0$hT%MyW0EopxJ7%K-dm2j#^OuD>i zBt`z#{=lKwAANWN-=*3jrea?PMyclB6d*IUi^)3{N*+GeBuBUrgVSws;%j+(mSN!no-pe^G zTRq`v>UJ&R+;gJ9KLNk)qaTp;PK#4@lY z5QM`Q)FjU)sg*~etNidRiN3c@%K78(BPy}bpb&cpb0(tS9q_1f4s-a%VBCy;H(l<8 z!GnabmmbEcjJsq~G3oV~p1x?MTJY;GfM3sgNNY+UnB9Ro?@RB#!{!cndTM zQ<-9=9d!)(o8)P^wv|4Yd3?h877wxTir^w>#waN6mc$r6|MBQ}I15padLiOx)Hms% z#OK)+lTq7@G+ftrHVEl3W)N8CU-~0etHs`_Lxbk+V=Y)P{)~)KP?~{BPJS}iXt&T~qr2^B{ zF!0fOE>v@!R_!Kj+eU7|iCJu8U|EYV(KY_eYGV8?T147E;_SJsLW5J7AM*bIFF?@0 zG=;H)N~JZM7?%mViH^2y5yTl81b4Fxky>C&dTbjuQ`=ygW8V}GZa>2^#GHi} zzY|GL6oDS2G-a2hamxj*_1*@v!lQ9x}3l_1bt(y<9jq)1vU9NqC1}sVW~BLj5un+`{~x$*J2?_(@OxjQ=|wrbQ3$_U=DXE+m{i&cGPVbJoDbx#98h^yfC^Y?E4 zG@mB+p`>gitOURtMEj89L`HiBozEMWs{qmx;3g>|7` zkItet${EB=y(Ils(cMXSmB#VtWiODOPl&?`ffl@(gpClT9!zonClH=iL{#3v(!O73 zLJgL})w=*6!=NW!pS#+onFzm7E#Y>kwMsYCEyEmH2 zVn(%_w3a$?&-X%itK9zdz{4b;(*m*ZN zD=4FYYuS2sO(O0zTf;Oh-%v9sE`1!N7eoN4&OS?*AFk)LJ5=Gk<<8#FklBZ*49B{a zg5P`1vtb+=-|yRyO6SWgv_D#{Hnud5zQ)kkhXGPCTpu|Jzi|Q6%FEjytDy)m;Zw@RSf5%$jbPt3aQWAHIo+&f zo&F&f{4Ch?+EBmKi*>;?s6zpNCDe_Re{G4VfbBs(cY$b7hu*Z{rJG3GNwZcr3i}bt z*-SrhX0kXTmscR(>|vHaUnHSF9EV}aTA(D?{wmQS&_5fCYYQpkh-y8Fok3O6-){+^ zI9wQc@)#@T;5ZjKqx&3sz?GKTZw9nJ_q>IqQju0=jz*QNOdq!%^=MG=wMWB>>>f#` z+y0fH&_viEeo{R(FaYpz3MU4+bJYcf+%x%oBT zzom?3AQT4;mpfk~D3mi#5(V#b88C9T!+{89^~WJ0uZAP)4-dQ)?tV}jUmNHQ$n5V9 zJsstzo+adHD>A+@K_G3`aGdtxiD{3q8yT4=;>sUI+VRAFpqYDqN8&&>%Jx{z7%kK= zMx)7d$RmU0y@~R)r9D37VbQdIkyyw6(T9Rv$?8A{xj!A3euR3(Sy2_nnI#m|FcRr4 znAT_hL6hjW8(XA>zYuuFyp5Zn=Ekm1A?;h^DNTjZL zll$m8Bd(!stTSWLV%0!+$jpvzPv;$&uwtXr@>lVQUK7t64Wqu84+6D z+44pAe3MHyXEtn(y!edN2Ey!T@zKlocSFE8`*k-j>kY)t!)73Wqw!$zWt_n#AmRNb`J!-#3qysqz$NK;d9$VZ!x)Xpmj8ErP1oH$MLjlAGV!>F!H)+7YMm7$B1YMb~`aIRX z4{Xt56JNZtR^L0?jMwSI_j>G-R3~C8vAkTxksd5#i;1VXn#2nzG7>PNd6UYVi+x0` z)0kZ^KdMIfymc8nGa4PO3chf+g$1|AUZQLiyTbN;NB|`G8{t~PKLo}YlJw(mQ`kf=JQOX(aXWtUlJe?$XxJJ28Ng~TRr}sS9_Eu z!5OO&m?$Iwr%$t};o`>Ox{11|>f$)UAHGFDPj^<3iC+(Gl))Y%%XB6XJcIRw4U8@5 zsz*4u;7?IQ;=O3pwl4H3MrJUuwAJ_RcfeI7aa$076X87FVoZ>uZl;!_?&N-X5Lbcx zO!)XEw0K=&-Oe$(&4Bf^yf%}Zcw@U&unVybOh%CE4Fi*Q;$+nTJO(^x-}@v{X_jx- zqHRE6ZcCx8GbQ-iyMz}^9FEt()BKhN_YxFe*hDbMvr!cBnQVPNfODF>I)*!(c*prj z#C{p9%i%iX)e>XX9$l|G^(|ie+SrEf1}I++HjnBf9dn8n)}3Q1$ol! zXJWUF&#T^cBD%(nFX8?)6*3PM(C+6zOIM9Yl$AgbziSB^=yv z!-EPG9U00Q_84ArP@eKv+v1sQrxd7vb{a~cn(eWjvS!jYh1enz-P5k}FfVE}R|5Ez z9geH*)ni<2t9Zt$myYvD!{4^^rSw{Fr2BwTGCd=xo8#4lj|~k!riD@2M`%5+=UP_c9VX;niDu>7?%Md~nJC z$P{WNCn+_dRYB!*cmY?7J*Mlzg2T!Y!V1Qgz9SA=k#?ZOW11;*0heDVEW&!a#0=oD z&$bmaZ#Px_Rm&Ptf>&pMSTU>A^1P3T66Fh`0EzHMCDF^Hlf6^F_)>(!YhY{OY zuEJD}ZIw}My0l8mS?4TGFvQHU{5?EOr+1izz#q{iX8825v+Dko9&rm{YvxwG{Z$5j z-#8;EeaYvsd!WvDHen;+g=7{%m$65!!u~Tn%!u;>2+-;*w?4h|__fz)Rt14F8$gOG zl``UiXQASx*GYfXWbrP+OadA9pow!Ot(`?~C})n2>|2SQgue@+zDjG6#$Ps{4Or~t zEY*FUsv1oVtr`9G^jf^Jz_HUzO9ss{R85{ey%PvEHm;i~Qy3Zw^1s9tX}Di2xBk2~RiQr3yIRGNFJ7L^90l42CQ2p7WmR zeXDqKF1naNAlN(xhFIUPmo(>6g#2JKrt+SoE!Hj! zr(Ego8OQ{aXpiI^ple8O`3JhoAir3_y;t)->;PUjWdXKsjzta)UA?0V; zZ9GtY51wk2GnKryCVY0yxP6NN-j**KCzobi2n27n_Nqmk_08c22NPwna|;k_>OJ zy_Pt3D!tM(kWM10dXUHh+cU=9)jIoi#WD#ZQbWQO4>x$UNVg{~j(}^CN|zr+&VgJ%Ps5+wAxjb3i6y?q zIjz&qfQcIy0M}1G#|8XXPPk7Q z_#&3DOEPJkk&5lDmY`lv(P41(?};QEs|U@{bl**D!g0d`r_EjBQcEU`lGpG0oJb+9 z7?sVL`U-q0H{qnF$cTXM@p;I9L@=MId0ZP0%8+G+K6ep8j})&_zXbqCiQcl@lyM2f z6($lfPda01Uq!EdszG2MVLF>(F%)Sd2mKTfXG>)Z6d*UoY;<`Nm&)DG1nYZZF>FS_ zk#r9v^zT2YmVH^nY#DVjeM-230gk#ueh{&97Gl2w2J<0vdB!qA?y$D4TXUQ163**{ z%C0|w-=){NF=`7eVK?#HG|W~27RD!0jks91tK0}KTODRyQ=t`uvQG0&`dAC{ zFxW_(0*tv!HN9q)OYq9Q7PvOBS>2UsTE+(48j02}4428uT(Ik#syCaU<`OtQM?9** zI6aQ@`d2>1%#*AWsX1bmmi5;tLU)JZJ6T4GX_PI8HVoCLJBw0wJ$)sZnjan$^kqV< zW^K-gHos8H5Z5H0^8rRuhE*HoCNWS^_X!Pia6 z8m)FucHAivtMl?O!X_OSgGyB^J2w~(;%d2%A5WjeM~-R@S4EIc!G3Mx9W1^5T$RVS zV*;ph*`=nw1lPI`5i3F1Rihzw-h)|y9pPi*NWxG-)}1VCeqb9^#m?>3j5 zgb&Rj3+WpYN#I&uXb|Y&AOojw*ctA$5i2hFE`wZj37Y9r#w@AG!)*T3RmM@{9p*H? z1k2sD)1xnAanTL!!y6npLq_jmrL-jxO|IxQEp7r32uW6J%VE5$0H<@uk32?g;b{9e z>s#4Ug&HWNmoP~8pNi!FPWfH{PDeP=Zavf9$Yz1{;t8Q%-zNHE{L=?=0T65Vaw+U~ z&j&T}Va^!A3Rl`sYi5D*rT_)R!uO!kLz`%YV^emCnp2*d!6U%Ta}8RxPdK&{Gl+f7>vg$2NnIQktlc#0yIS#_>pj^i`qsz#|dV`Bq|?Q zW}|TC+518MQethQJmZeumBMLi7+Ovp#31}gu7g1FhZC7)CSDa-x)LGTm(C)CgJ*1d zN6ugEa9iiD63C$!KvBmlc3(-fC`Gf+Dc%vI4-T%=-Z?K#X;3ciYVqK(zt4dyu(-ZB z)e1&jD$iZc^wd$C>VA1S9*FGQ?q~!iQ9|pDPSZ>H0A9j)8k>=yp}2R}6M82${|7uc zn&Nk&)q>6JWy`0vsyzcxMfm7{&8rwIaO&m`VnNA&ggyI3RKuN!?RKrHjL$Q1Y)sf8 zBV-xRczif^&6L&n>+4((lrggO**xv&D|0)bPo39HO_+^lOCFRje8KW9M|*$R;Yv3m1> z2xH5mEcnC!@+kW&p4?7mZy z5yBN-zD%pwWynmTRmz7PZK}z4p|c11QiccJ2;Nt6Sr8ekiJB!WVaO2OWX6-c*x&e6 zQ8X;^RV#C;bd)I_;?D-xk*#)HlKr8?NL!1|x!HAW$p8PgZdTcBWF^Q&*)8B_Nwh<6e+>B^PuF_#;h9AbB>y)o2sffH=g+Ee z4o|vz*z^)qDOCCjcDLL*qQLQhzLc@qm2v$)@Lgq4h!M5e9%jK;{5K-g9mshCg#4LY zuj3&Lcyi@AMH(ac+s|BwQ%xTqsTnA6SQS@S>T3V*_m`VmlZdSs3IGzO@&J`@_`oFB zdX)vpb%`Z5lGhn(wRsl__(Ef3T_UR(tqQ@!O9TCc`nrG3(F1gVJDTO>+3oMVuVr$! zZdPCPx+^ZiNI|qd?0d%rB!`D=muozh{KW#D>~}uWk2gq#u8BAL;SM^W3q6(Yfc5>D z&Z>2XE57<30>+i>mtyo7U2h!$In2e=s4#! z4ZRp^hTl~55m<;uuig$QIY}$PYwEAFzwu1dfl1kwO&3_ zH!v2d#An*J<6Xx7NlU#&bR4dDDy{V95bM9D`&Vh!R?*90J&0GR4mAfU|L!D@I1p@H z3$G(w{EK7+sM#+&fh?(t4uSj4Fqq0r2hkimNMKvZ$Zp{XMj(l$TgD4yql%x4$u%^= z3(sN+8?<(eZ6(FbNYLlAj+IJPIyI%F17goRqpfhJg}TgS}nZ@6po)BihkwOmjzU zurbRA>D_vXLjAfu%Q+n-WVBIHi&3%V=k&K0)%?fHmPQe=4KOYu8mdf4*5=lF_%Drn ziKUx1`89j~MWDnYOixiBFfuI5Qk$FBp-hj4)s2)|?SW1ef1b9CIfJb{%$rzC1*FJ5 zQt1=HYdLBgjN}(+ftS*;8SzbySVb11_)YC1{Ut+_>Ej%Lj?Mvl(ib_MrUR zzaAMQ9SMF^>|=m2pDKn^_ahs=#~_35$S3H{UVwi2Jn-wa0H5vL0QRZ%mB2c10wgpt z?{}kL?z^t2y~W#@4>6t+vck|a__jAT;TU{dR7m<_k~Q{@JYlpF!_oPq)Q(E`h0k~Z zJMZa84$*x{i_dyaI@+-hUtLH!5^qo~>e#exPjFkHM{%lo#N^rR*K}jzmeMhDyb+n^)H*Dm&Ov<`8D7_Eb*Iw zXUW0lmQYTtwOJmojdN{Fi&ZZJFPbC~hrRJ2b7;(c0_ki1Mvc82A%yb9Wg7jgl}RJ= zOQD&*Uxv^ykWFO(Vd)Aoaj?5v|3tiLT92-Een2B<{}@->DYp*5hKZ4D+(z zfc-%20qQ#D+=MiB1j7UG)`lcN!6UwUh*zP0O-FOJ)&x$ziZFe(LS( zoR24R6y+)w2ilckKxK~zmnS7KRRH!WQWt)kmgO#zGRm%>FxU!m)6OioJJQtEG;pj8 z#60ity$x*yuXP*_Y?FPdWtY|Fjgc*w9K^?u%s-bAe6Rm^C#ON;ax?ZCRzC1uRG{4k zkCllAMG5JY=L$7o;MfeQ62h7cEXEM&7~u9i;lp#W{Ebm+13LlUBURJ zkK{X83f)iaz!q$?K)3q29`=vN$5{b)<_YJTvR@^PlTM(=4#VG)!!oBGon1H5=}O7T z#+mdr9y|ZUb|?9_uH>F&(H;<(4q;Rl8ayGG{(`? z=b0$2wf0Qi(6yd5lImeWZ)9nZB5F-9}_8k=ZE3L6Rw`pv^|vbR#kv#>Vfw7$5He$ zRW^GWge&p%Sn$_hK?l>qt`{$oQeCG(lTDK#TY#6K8m)Lsf2Y~#=PdqMz*a zNA!to5sMG)D~0?MM}|%pXA#jnX~c=KAM~e5Nzq&I+|NIJsajl2*an#M$&(`k9i@owRdis(Z{Z<(8r4J=#-5-?WIkQJ^ zsO8{}j$z~E_1=mq;4;Gwk+h~YFa%Y-9qczCSqj? z2>Ogt(9lXj_04Y%#bE17Y_5hhFq^;m_x6HE<)nu|gJ(Mdcc^4l?OShMxR}nEMp3*-iP=bFa0Rka%uE$IPNr)=pMGW>W7~;CHc4N{i+zPtIwaEF zK~mxH!RA~MB+^9QnM(>fjSVdK0wSm)roA4$7&=>VO94dae?SaUZ^Neq?bIy#o*5Wk zyvMR~>5J|GOtaJMZ zO|%#AC_7uTHLb9vBVHWX23`U3mlDA^htaD2D^5AC6{587nPOPrP*=FCEw+L9b$4+y5H;X#8n_17znkjV`~EOB4wjZj)51EkfLh8cGRKaJtbcG>%h6H1Bh|F z`};lSai~uX3)EyfAO>@N_j~H)BjH^GPrBkB9HY zepsi9m&7A{Kc^*7m;F3EB;MNg#}?^| zo^k5PPUFm4_MAD#jnZ;&a4WYdB;tiX+77St;?0BQkt8cJH@l$`khDYeWp?hIGQcf} zhcYy(^;;LDqgpNr_2S4h-O~$4(~?-pxP#&eijP)V+(79Pk+A+jaMN5%%*>8C32&ox(h@g_A=JwZ>!{? zk~AaMZ4(}6{lP<>t4PD%_6Y%m6Jqil;1p2L+kB~()i+a*OY#qAh?em$O&o1%SpB#7 zWh#Was>%qU30MuXo&hOTkeY}V6~F^@{HPx}a!#mycSK<))5t@Rpi{{)VUEnb5@Q3% z+urIFKUVjm#Y1^WDZw23w+bf@Xs8k!LNfvkdYbz~>YkA?b4n{j0jLyZW(srh*vjob z;>Q>AK238sD>?*A_`EhMlmGKdS07AZ@d>jwel47@;EOYKU~S{oSfc4t?t*0}M5~AQ zZj0w~LEE^{G%E(iB|X!hVkbt(6q?%ySZOc~G(Hg)ZC8pOVyu_@$HCueCm>GdJp@4V zj+mf&t_v+DYY~^>I5!G_Xp08dVx&4^)z`tU?Dn+=ZfQ2W?KTGLzEteRWBykCMy=az zn37jV9l|YG=EM>k>Cc}f6Jm*!d_3;0Gbeqg=WM(T)@}B{GIEp;mnH0i&mD)@0MWXV z8dPs{apO2VStc&or7S?EHe!t@BiM<3&?MsfN_W$HC zzRv7WOwkTUVfc`+pFVw)U(4}k;Waf>(5iQ$qMX+C(uk61o;N=7f`Fib#n8d?&fAAg z2u7>CqOj(OW&8S7y@AnL>l+gpvCPn&;&&_;0xn2#pNKk>wC+xYC!0D=4BU;m-{Mbn z(Hno>?}8TWWrbZHvp;Of7#U2p&@!_zBW}CYrsW7?M5c~2Rx%QwOj7jtJ42aZnOGH- zVq>sQ-~&|7F88chV35|PE+=1mX36h{15TS|4?@4qG$O`(n1mwspT6W3 zWtedLd=HrKvvz8d zTy<;%>O^H7WZ$*8G)S_}!Ff>=t<%LSWaAm+GJn1?REKDa4JeeDO%hq8`F115LCODr zg1^T2Z3^xp9sJ2IN2^FfQa3h%HP`FhwFLK(z$Q5}`d`kX<(P>a8X}4%&#s`*^)l>o zk*TL!q8~+W`WU&tCL=_p4u2hGS6hN*rQHj)ph)?>slz;U|6OcqGk<`hE4*kVk}C*e z1u^|9807=<=rsnQ@W9xb%(1L}MWF>cE6u*g!o5s|{?0su=Jo+JO>^ZJ8V}KlA*y&u zO(W5KdU9Y1mP8`Hp4`@=p=1IJ84HA_)^S!i(K(j)bfaF1#w0)OK7-)$&*{&6M2>_K z{P)V9*xWw4&_I`wx)Xb*&@2aLd-4BfXrCiruR2UZwD7Qx&|#EH3d(Q~Fs{CaAyap_?#z@qnX$A`!-vv}|Kf&V4QwE6eL8@6HA$@YH~u9Z zz@7&^ei`g2E0P{Ua|UZ6^?d!rS%_Tt0Roh$GWkSh2UTkQU=ufYX|p6JVrk&@pNm9E z@ubJAC-5eX4YOK?X@43z=7d858*DBNdMcfB#7qp?s`Inn^U~%_%xGqWak;+sJ|Ko^ zsAYEqL=+~-p6Q|(e*koEw*;0keSk*&Q?32IAuDZcL$cmO$bh?%-ya>IYVY$>U-`7w zIp|JzERf0TB(a|6u#dc4)AbMW*q-#HJrPgMyjb3il?lVT#C>Z}vKgrU@TN&*!|Z_V z(|6duEeu}X_D}0J;y3%DmeSn{+8+2__t4&o05VfSR2(L0`nTcIGLT7?4(Gr(G5am` zoKbc+!n!<;8UtjFIK{hh*zNYsRnIlO;m@$JVvdj}Z~wEuUBh;ExH1TC<(=MtR1it>02;9~`Hw&4I77rz8d3$|^sD+m;WtbNvZ8S=*EOu|J3K z3`{e(tuFHZ``0aOu^oL!h%MVBH*tnmz1~$RNS*(tFLdcl`fR;AXoIek37-!~S8(_ZKk+o+hCilS?9P8CAe~O$YH?{jbc`@iCAZVsiWI3%TNVSH z*v-ooln1ZR9?>j5Df?#u{afa>FcW}g)+fK~oF{}w+zwticGZs?ht6~0VDd1T??TFC zE(r@?gn7D)Lu>@tZt?bd*YWW|TRb2+;CSLOHb?y9i%~D85$&eZUAgmAt>7bCFvU2- z%>-1_!2EFSZ|d_3Qa43{_QynUmkSplW^WN=8%Uvx52$#`ILgj@vNt5;LbuTj%xi_; z(Q_zAtRY+fX|i+zf1A&c$+RfR)5n0#;d~_pizC!Q1J$5lgNmjE6^xGTP)`Ll-5jul zZ9k%<^iCHXUN3-*vY7+^-|)%F?XSm+dgvS5D}#0;JfE2qBMBpn5J|If+Jy5Y^di-J z;<=}6j67VC)>)z%fauUV8N8hEhjpX4@)~_a;XcLsEQo)%RcO_P2h+pJW$sq|5K6^P z19OC>e!e?YL;_m_H~oPYkh=j%kx?w%M3IrA8ccOjR(v$({bTWNL zNY=ZE1$~VoPo)+W@AA(qlidrN(gM6ZKEg zM%Qttpd_YLXE-R6w9q+e_hz=y3)@3eAp9A@6keZEiI^GTpGVYU_jSXEs5fZ>^LuK@ z?)C9ikG)ISUHBS6?&i|ZfgVPDC+TZPp&o&=Uc_)zn2CZP7+CCw^4xuQIYV^JI*m`H z&E22fIIe(jZ@BQCdw10?K?X+)dFC1{MlR0kzeUL=c2=8XhiMeSBDW-N9$8&*2&8}} z`hNsG@Bq2!l4Y8nUGlTUk*Q}L;P z!L*jawPSpSW{prOt$-Q`+ni@~Xi2Kot#@DmT6HQhWl&{WD%vOV<*7(#3bT&N5 zc`nfL3K({}LJ^CiP}nB$VE=d$1>L~*-vUB6RO^R6orGZII7Q>YVr}t}p6WtLax`Js zsYy2cDy=WRBhIZ%1$v-WvC(vcR?vjEbRmZm74!>WNUmX^X%w{o&D|7RxNsu}NU)>0 zFynrY>gn@*dd4N5vA!zu!FX-}owI|Yero7H%Gq;X7+3VXqDm%9t{JDGm&x1=;4=_h zn3(2$M!RB28m&sB%O&lL(6Ff4wsf$^##0G}VZMc~H{pKdNE7f$R2lGROm@jpUAdg;T5)s*x{$wZiu$ z&x%7hvC6$(0tX(QA+d&2!G1`%Ki?cfaPJbqK%b#l0^Ba$%GDn#uj%V^ac|Q4m~b2RIPyKcMz3FXPlQ?n`??fqv9_8UM^zui&Xt>p+8aKUoY9^+?x&A z!iT`1W-*nh-5$nrNo>(eBPAaF!FR{D?NyPaZE|v01`*D|KcOv%hFCr!@g&uI-)JG}fwuc>RUWQL`|1Z9P{|8vj+3KouE-U{`Z7{UQ@ zH6o_kGF-3w7QN)if&$Bivb<<@E;g?Fd@}wc8t|YbkF`qh#|QNPZA=T9-;32(2C-lR zhuP99FfUTE@G#qcW-&{zORMNg5jAR5@??kiuQ*bWIM`Ni%wl)fP(|gUikS!B?E8``XCr(g5S)M^v}j0_E8yw7JcsoL0Sp-{8t53x%txCDXAKe0m-he))^Bq4t8nIt&39CW}%^}Al5&L3Io zw#yQ!C4>6iFc8e^7E?CZCs6W%#28X8;eTq(*Oc?)CO@p8&rs_wirZWq49k;T`vf3BS}CGQRucNqxvoxR9WmY};VC z2A}xm26-XT?&Yo8W2mQ4g(02YOg$^n`nE|hR*t*7VeNO=3qgmI(GednAerMAelX>H*T^SSZHY-(Z+ar6e3>}AS&Fi`Mgez8p0*HajrLUY> z$fcO*cm%~r*!t;KuNsfMhvs(P=PG*3P=9(1EMcExfo8{|+Ys5_P@x~>HILLL7+f=r z6U9@%dWl4nmighGBkUk`4rpxmg51{V6FE7I1s3tOW_lfSHj2=+UYXv45By5i$czCP zC&jOKBVI=C6k&=6rKL+{U`F!p$w)jvwIuLCkumyadx{fYhhnC+feySa;K-N0#IZe- zdXD=Yzpl3qg;CfK(Lp2=pxH~O4*;3+?a!2la&#gbo1%bSQjqMD%MAO1g%BO&OU~B% zw+jtt(j5J$rv6sPzoI@ z6vfeW>-pl@^~hsgCLsSU(h*OKWf91rfGH+uAxuWS8_B0}4%vTnyU$J?B7CkQGhaIE z|9n?;sAuM3+2SEYF`e00$KMhWa~_4|@oFMHM(oes#{_e+DP7|XpzF2Lx5_Jci@cjF z3;@78_;6%eae}>^ZsS54N#tY9T{_V_Ri5V)AZ940YX>`;OQUo(#g)-6dfsR-6v5Nb z0DKxMSYAdo48HUkcKz@%(DfqIyST7i+ynzbiCiuH2Cr(K*)Ul*^$f4!mI9R!cSrvA zU-KoEv`Phu3hGNx1j~9^cc|BT$#}qnY#r~U?R#JAhQ!2Pd0uFxSry}RP6-SUlzT?Q zt0%4EFCTLT4_L82V~saoK!P_)SVBrEH$-ABA!Bca^HA7qwcF-MU7BYn9de29WoOlL zf>^s(rj!e}P;KD*fIhr~&@J0|6Jx|z?oNdexUjVl;+uJdn%Z!>w?8`3#tOlNS440H zd%5cqJcga{L1QyGogyOes(jAgg8(?eo|3Q}6jal|Ss^PAWkFDNm6s!|+}|J9WK6N< z_c;n7$HQf|P)44NGs}AB`pKP}<74VM4Vq&@1f7kn_28jowN9}~yC~^P_6M%JFNqpbPw|n78239}KlzK!uZxYx zn@kWBxUO8hke@A}6f3srjexfr(^=`9@wa>>9c(u1iFbAIGK;|aVQkMPPq|<4%BnQ` zU8W^9iA}QfFUh9M54&72T|@Wz2KmJTR3V()lCOC~D0)6=r(c?VA;7r)sG9Y{(v=dF z=~il~HgaWuvrP#HkIqUw8W?=*Kl%{DS@Z6q{Y`QD9N3UiQ9y=V2jWg>k<@CXehPP?&h5zs18?N`aqH7Pjsj)h}y9Xd!1QU2J1>mrhx~(c~T8+)>rpyz4pH4L`1x~BVc2}2}~r?-VxKW?ci;^aeRwAq{(Hw zX2QR!4V3Ihuoxclzu*qOeoh1}C_->js5s{!&S8_6ZHbht zY&?B*ml)XMEP&xkSybWfN34&m2CbBMv&MU~pyC1%_KD;27svhe_9O+Zk>ySolE7Cg z1VAB%Jb0wAC^tL$dMd+Tg0Nzv1p}y)B0D>XF@nzAEv;3(ILC(TwqbM|m0+j6EnVqf z)Dl6dgE8+aK*CO>3W%Tw0M5tP*8vg0R^&kYKx|&kmIK)c(|`)K>Q_)Polf4qICA%b z3%*AdtUqQ)u~@H8RwGTb1dJ(YQz>J7b(i_ayEsx+*Cmw*Xl5qMce4X2`n->23Lwd# z`JTLxhR`rGv5NF7r9X0sQjX%Y6y96`T08X5ox1F0iMYpA4dPy&BPHTpBAm}e$kj^h zmQ2bdQMef~5WnEpK!A7x!8{tt$D0Ii@naP6H)?)1U=7_WA!Y?78_XC_s9!!_>8mYru&;3ef^NP-uI#du1p1j&|8TPGSL;t5p=xy0*N9pIgfd zso^eDkfNAn_>4Wt^Yyq?LcWY#YRW;-Fi&3d=CeV=IefZtN)+kc3jEZ; zU2SiKC)?l+vM&wOo+i&w(_B<@XL39(R5G3o{{ZDtCXE{5OgbU_l$TrSEKdubiyxRc z@4QO{1_yaJFz`v3tfcH}QHqMwn1j1vEE&@t*RZqGGX=XXHj+m|gLJ2ec0PwgP5P_Ww0{?Z-pv*Hv5yGzN}NEGGHt z=>2;p4%~mws!nz2gY1se9i&S%F&R%46)<%r)W0~=UCnf!GI`BH4WLI^M(}f^w-on* zNo)<#i9@M*w@64d(>R4%I$iBz_D&lr6Pk(d@%>%qV_;(MApn^Au3i&Zp=@#07W)tD z?LNs2b6G;IJG-N{Al~I9Ttq|wlarLxVX|_y4WbT75Bf%%C+q4*xwY}Tcj$;PdR!hL z({}hKY)D6bTo1V0NoDaGA+oj)MdF9qS)`uEX?HiGblDN|UdMgiWKpQdKLn7Ry*>aE z<7VF?ggc;O;zFy`bN?{rG)vD(D1o$EHw#6HUa?#0YJ!3sJDa~pm>od{^^S^->4`c4 z1&_{hr=)>ZVnYdOHx(7Rx+$@r_`Gz`m-ddMJ5ZnLAsD$XXL?O!Fk8WaPZ}5Y9ei3T z$s895*m_pW`smcoJIMJK=)@PQJ z(g^<^(|8Ti%m+*qkEB1oF_~MI|3cR#-~KminSE5d4w8 zbeV)XBArFTRmRjoCb6DQ?h>&Tw1iLuW+hN6;2~z$OnT>D*Zw{yrdmERFfd8z$~7Gz zt-wAzTzfZ%E^!W)$@O+mJPSDPm$2mK`!k;Dt83-?0|!2gqf)jMAp7B zPT)6{@f?dt3m(v;FyD%w+Qj$n-PNC`{wx(wFFP1N;8 zeCt17`6nq!5G&UlTpw=lcU*X>AE)e>%SQ|a?h@3YF-Gp88$tnwNR8nMNEJq{74Y)4 zSsT7VK)KCsjXX*j(!z?OTVsGjHQo6R{+-&M=@3%^BbolMZkeGVhFblikU(=ncEsEA z;#D%%bP19q-z=kWtKSsI6|^w8px^ui6f;ceKZu=5NTkd{Q9oe!l+hoo3ar(}Jo>-4{!3qCEH;BiJ3$2DYlHh@O zY}aGn+Pyq+li%Lxj0|4YQU zk>bhd0WgJNv=3@QPPO`;xm~L5vUmRL9Gm0;;uAzho3LB;o9!sGBsFA!c`$$y#%FOJ zsz)bt3FtRppxeqdzwr{L^0OBid+={#mrmhQyfCHl`sC}xVu|O?PWv+fi6{tFq#s~x z9(HwC{=nd{ZQ5u0cH-Wbb$mZc%e!Qvu^hsFmr+=$x!33+Y8k?i!R<7E|4;j=t?1hc zkG$ODDUxj|qW=5^TQGz{c)okc7N=Tg-uYW-E9RhDdh4bvpt%C!{N*olWE^X*HxWD8 z1J5$ypTQkB0N@4&umc|hLF#jLyM0-}y@@M<79E!N{y^V4^Tte$^lh6%4w$B<^zvx? zr#g2o{##AcJ)95dINM(o{s4z5&qn_!qlu3U3rS$!dgF{t^E@R>W%3lmOvb;Igp#@Tu6Vsm^UOG4tgeJrlqW2aU))F-18m< z)qvqIKuMlUSkg~+aTN`fu_QdP*|k+*JRH*NC`$Vx5M)F3RS?izNhrkVDa9X68+0np z%PK|;3I^tlaCs25%hWWEaa4t@q!D7IECM8!9~A*~$7e>@d1kn0=mu4PS6ucLpsUs>$Tw3@m& znK5S-xJJ#mge^oBT$C{nMPXduiv_ZA9wuk~!n}DU!lxWh)mfmIh{N8JlyEX|?X?!w!FYTwa0j z>kIHQ<_qw$#TLa61fJ_6#~qSV{C0z~Bhzva1iQ%D_fo`WsI*atAFf7vuK=!U-NB7I zOLL`@exWK;_3qoZW3Rwv8pr${@l8rfi(YLPC@n#goS{+vAh0~#gg8--Da^fZkd-BZd;g5p~ zBxACIT3H%gfbo*qOim6gh6<1TKEuH9gR-ct4pwwWUlD=A+c48TpJ~*Lh5>OP=zxF$ zF(l60kNq~DG(qRdw-d&Kky5AOnIY7_`0lL@yiX^Orh#g`G;n! zZ~AJuC>i;pnS`fn4P$+2@$?i2;LcUv*;AQ@>lf>_KHmVRrQ8|#eq7`D8+YIK#5@8W zA*MZ}3;&;yv{e40eq8Pij1(Brr1AyO-!%&A{hQ0rFIRZ|i${78|D~;wXD@uMqyIm? z%H-P&nVGv~BRpBUVI?6+9?$SX%P)Q&*CGixh0Y3{u*pmj}2hrg+ zi1{m9hW|FC*308xxPI?y#1UN>onJ3U*h1yHC$!13RiEJJHMmk3dfK4WoyvUXtXtwF z;Zz)h&UGjjZ#u&gwVulq&U!kdUy952_QmJll*%yoku=DY&P*gHB+#t4J^pb8BlJ;$ zhF1NQA%=vzi5voprT{@_2sX&olqoTyH|z0(x`s4HH?oeQrT@X^PqP$iO4iZjFS3cl zOGg_Co|REs$5rnRtHd9hB=hld8}hh{(`-{)g1l*!0HNDQR3&PK-opC^cCu%ru4zaJ z&EwTS01ZCqK52K#pQfzc|KI#PDi;oc1WWA0E8&p_?4=yIp0 zomd$R+Soy8a*6lWB1?7OD8HGpy*>Naouv#fP5z{lUY~JiyWs0$tNE|KQ7Zof20W(1 z5FJJIGzNb>*Ht?avd(bP%uC^TcBwqVEPgb9oI6)efzwhAPGFq(+d#Gh%s#d5@}%Xb zoKAeQQ8vp(ssg|z{6d1ea2?yle@%0nuaKj18lYH4_x)=Q@iRyJPDZ`^|fCQ>di~!fCRm&iu&~aX=Y7gHevPJ(-WSV8nle}(BXRbvTq!agcJKq> zt1Xvy!e(}!;raL$pPhp`V&H9u34p-9I27v(0X%qyv^z~sQT`Bhoei)~+_T`$Ef^Tc zC=YM3SA9kT^dXZSAnW(hh2u93Naj=l8|N*TJ|cID7`TGV<^3ASViQ05>OqI(ITJdL z5>r2k&Z(++%(}Bx`4m|P!kyTu-8o|Bbm6Reux|HI+GI7 zLQVe{r;3sb2zxY^p<-KZxC5+mt&~?%GxN)8kg~To%^K=AZulx%&`PLbRrFZQ!}Cce z4?@yurF4&mvtf+|lXg`K6IQfkN_hAq)c@~fQIMaZ+oKh!8mSpnadOi(wiBFGin(uD zO*Te^zmNQzCOjob(|w&0OvvTzEVOEXGLsqhG-U%8Ho2)Iurc}mbdK7#Vm%F8SG@oT zsNn`X1e_m!6Z%T&vJ}A500O4=p6{SK;Jr4U-mO$kcKC0hUdOr9A}i?=fD70m3iF(t z(#&57QY?OhCyLLoSRybU0aQ2KpHa!i130{VMG$#O>!4XM66u~NHqOG}&o-I#i^9ms zrS@iDZMtx%T#s;Os@_cKDiKd~H@z_QwI!=|TQD`ILia!N{YNvG_B zDBvmP(f;lzFvnQm`;`#6a0eYA0>EEmoe z%x3rlVy7(`(}SjmPsbm9Wkz&&d>L5)QVh2wC+$oHK5Rtg14?4|xB}xlnj}Ayq2?1o zU@)KLj0IEW#h|-9GS0oL{q%Rn#?~cP1wpa(wVN_ieX`d|&ro%@zB{3Pi!48biujQr zQ8;Q5Q&xf~Lii@dl>oI2NgtY|H=aZHM}z<)9moMzzUrj+k;8z4gK5oz*O8;u`ZQos}B z^vs!RScsPLa><^d)imq3`zQfRC)fVOwDaQyrfqcO@I(FD{c&2gGvSPHY(%23A(uCn zo_Uk={0^n71Q^?YTcMX&wAKj~a|BPcwMZucgCn3MKRUP68=LRkOMr+63Q)fnJ-7D+ zy@z((mM;!y5r9AO9#-9Co#S#uNhcVWR@O}6d7i3L)n&cX4Al~8gZWcdL*r3F)M8m+ z-_V&6R{+uSVH`=37^?b6IxD;Keg7-b*8#5I)&LR8@TyXjN+K@fkwq9;x z@FvP+`gE4sOisBA3veNAf9RbI-!Ts`{Jhru1=$-|~wXH&2cRwrz^j|FqzpU;9Z0YNL+lVMmDaeen6A%=_ z<9-Zubn;vy)mdZJwWRij;nIjqu-Iz-^EK{hmtm!+L@>qxs8QGVDI-Iw?I!kB+mH=ljWttgjwNqitd|4iJZh~ z|2{O4u!qXu%P-rRZ569?zo~mD$T{n)~h- zNfh4Ca8P^xd1e5#i)x@K&3r269T!OX44h+_=SJuCj_biYtC?dSw%{ira2(Vx=6X

7x({L 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 QIx;aJF)}(bHaaml07ZMcT>t<8 literal 0 HcmV?d00001