From 567029039ebdb39c01e54da6ae22637cec21ecdb Mon Sep 17 00:00:00 2001 From: Mostafa Zeinivand Date: Tue, 31 Oct 2023 08:34:24 +0000 Subject: [PATCH 01/15] GITBOOK-6: change request with no subject merged in GitBook --- docs/SUMMARY.md | 1 - docs/advanced-usage/attachment/media-styles.md | 6 +++--- docs/getting-started/laravel-nova-integration-1.md | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) delete mode 100644 docs/getting-started/laravel-nova-integration-1.md diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index f885680..1c9956b 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -7,7 +7,6 @@ * [Laravel Nova integration](getting-started/laravel-nova-integration.md) * [Support Us](getting-started/support-us.md) * [License](getting-started/license.md) -* [Laravel Nova Integration](getting-started/laravel-nova-integration-1.md) ## 🚀 Basic Usage diff --git a/docs/advanced-usage/attachment/media-styles.md b/docs/advanced-usage/attachment/media-styles.md index e08cdb6..4ffaf26 100644 --- a/docs/advanced-usage/attachment/media-styles.md +++ b/docs/advanced-usage/attachment/media-styles.md @@ -14,7 +14,7 @@ On the other hand, if you want to manipulate images or videos, you should use th ### Image Style -
IndexNameTypeRequiredDefaultDescription
1namestringtrue–style name. examples: thumbnail, small, ...
2width?intfalsenullwidth of the manipulated image
3height?intfalsenullheight of the manipulated image
4modeLaruploadMediaStylefalseAUTOthis argument specifies how Larupload should manipulate the uploaded image and can take on any of the following values: FIT, AUTO, SCALE_WIDTH, SCALE_HEIGHT, CROP
+
IndexNameTypeRequiredDefaultDescription
1namestringtrue–style name. examples: thumbnail, small, ...
2width?intfalsenullwidth of the manipulated image
3height?intfalsenullheight of the manipulated image
4modeLaruploadMediaStylefalseAUTOthis argument specifies how Larupload should manipulate the uploaded image and can take on any of the following values: FIT, AUTO, SCALE_WIDTH, SCALE_HEIGHT, CROP
```php IndexNameTypeRequiredDefaultDescription1namestringtrue–style name. examples: thumbnail, small, ...2width?intfalsenullwidth of the manipulated video3height?intfalsenullheight of the manipulated video4modeLaruploadMediaStylefalseSCALE_HEIGHTthis argument specifies how Larupload should manipulate the uploaded video and can take on any of the following values: FIT, AUTO, SCALE_WIDTH, SCALE_HEIGHT, CROP5formatX264falsenew X264by default, the encoding format for video is X264. However, users can specify additional options for this format, including adjusting the kilobitrate for both audio and video. This allows for more precise configuration and optimization of the user's encoding preferences.6paddingboolfalsefalseIf set to true, padding will be applied to the video using a black color in order to fit the given dimensions. +
IndexNameTypeRequiredDefaultDescription
1namestringtrue–style name. examples: thumbnail, small, ...
2width?intfalsenullwidth of the manipulated video
3height?intfalsenullheight of the manipulated video
4modeLaruploadMediaStylefalseSCALE_HEIGHTthis argument specifies how Larupload should manipulate the uploaded video and can take on any of the following values: FIT, AUTO, SCALE_WIDTH, SCALE_HEIGHT, CROP
5formatX264falsenew X264by default, the encoding format for video is X264. However, users can specify additional options for this format, including adjusting the kilobitrate for both audio and video. This allows for more precise configuration and optimization of the user's encoding preferences.
6paddingboolfalsefalseIf set to true, padding will be applied to the video using a black color in order to fit the given dimensions.
```php IndexNameTypeRequiredDefaultDescription1namestringtrue–label for stream quality. highly recommended to use string labels like 720p2widthinttrue–3heightinttrue–4formatX264true–by default, the encoding format for video is X264. However, users can specify additional options for this format, including adjusting the kilobitrate for both audio and video. This allows for more precise configuration and optimization of the user's encoding preferences.5paddingboolfalsefalseIf set to true, padding will be applied to the video using a black color in order to fit the given dimensions. +
IndexNameTypeRequiredDefaultDescription
1namestringtrue–label for stream quality. highly recommended to use string labels like 720p
2widthinttrue–
3heightinttrue–
4formatX264true–by default, the encoding format for video is X264. However, users can specify additional options for this format, including adjusting the kilobitrate for both audio and video. This allows for more precise configuration and optimization of the user's encoding preferences.
5paddingboolfalsefalseIf set to true, padding will be applied to the video using a black color in order to fit the given dimensions.
```php Date: Tue, 28 Nov 2023 12:50:21 +0000 Subject: [PATCH 02/15] GITBOOK-7: change request with no subject merged in GitBook --- docs/README.md | 8 ++++++-- docs/getting-started/support-us.md | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 21b8337..8148dc2 100755 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ # Introduction -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/mostafaznv/larupload/run-tests.yml?branch=master\&label=Build\&style=flat-square\&logo=github)](https://github.com/mostafaznv/larupload/actions) [![Codecov branch](https://img.shields.io/codecov/c/github/mostafaznv/larupload/master.svg?style=flat-square\&logo=codecov)](https://app.codecov.io/gh/mostafaznv/larupload) [![Quality Score](https://img.shields.io/scrutinizer/g/mostafaznv/larupload.svg?style=flat-square)](https://scrutinizer-ci.com/g/mostafaznv/larupload) ![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square) [![Latest Version on Packagist](https://img.shields.io/packagist/v/mostafaznv/larupload.svg?style=flat-square)](https://packagist.org/packages/mostafaznv/larupload) [![Total Downloads](https://img.shields.io/packagist/dt/mostafaznv/larupload.svg?style=flat-square)](https://packagist.org/packages/mostafaznv/larupload) +[GitHub Workflow Status](https://github.com/mostafaznv/larupload/actions) [Codecov branch](https://app.codecov.io/gh/mostafaznv/larupload) [Quality Score](https://scrutinizer-ci.com/g/mostafaznv/larupload) Software License [Latest Version on Packagist](https://packagist.org/packages/mostafaznv/larupload) [Total Downloads](https://packagist.org/packages/mostafaznv/larupload) @@ -14,7 +14,11 @@ It offers many useful features, including the ability to resize, crop, and optim Moreover, Larupload can calculate the dominant colors of videos and images, as well as extract their width, height, and duration for videos and audio files -[![Donate](https://mostafaznv.github.io/donate/donate.svg)](getting-started/support-us.md) +
+ +
+ +
diff --git a/docs/getting-started/support-us.md b/docs/getting-started/support-us.md index a0c0cfc..9dd6b88 100644 --- a/docs/getting-started/support-us.md +++ b/docs/getting-started/support-us.md @@ -8,7 +8,11 @@ Your contribution, no matter how small, is deeply appreciated. Thank you for your support! -[![Donate](https://mostafaznv.github.io/donate/donate.svg)](https://mostafaznv.github.io/donate) +
+ +
+ +
From 002b06f88877120b8ad0eed64963dbedd8d72b34 Mon Sep 17 00:00:00 2001 From: Mostafa Zeinivand Date: Tue, 28 Nov 2023 16:31:51 +0000 Subject: [PATCH 03/15] GITBOOK-8: change request with no subject merged in GitBook From 6638ec036d16b014e24df4807c87d7996c4c7bb1 Mon Sep 17 00:00:00 2001 From: Mostafa Zeinivand Date: Tue, 28 Nov 2023 16:33:18 +0000 Subject: [PATCH 04/15] GITBOOK-8: No subject From 39a1d05caac2c33ce3984a2ec682486b7a69cdd7 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 01:32:30 +0330 Subject: [PATCH 05/15] refactor: upgrade to intervention/image v3.* --- composer.json | 2 +- src/Storage/Image.php | 33 ++++++++++++++++----------------- tests/Support/Data/image.gif | Bin 15860 -> 22643 bytes 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/composer.json b/composer.json index 05614be..2969a7f 100755 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ "ext-json": "*", "ext-pdo": "*", "imagine/imagine": "^1.3", - "intervention/image": "^2.7", + "intervention/image": "^3.1.0", "ksubileau/color-thief-php": "^2.0", "laravel/framework": "^10.4.1", "php-ffmpeg/php-ffmpeg": "^1.1", diff --git a/src/Storage/Image.php b/src/Storage/Image.php index 771e8df..fafc949 100755 --- a/src/Storage/Image.php +++ b/src/Storage/Image.php @@ -5,7 +5,7 @@ use ColorThief\ColorThief; use Exception; use Illuminate\Http\UploadedFile; -use Intervention\Image\Image as InterventionImage; +use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\ImageManager; use JetBrains\PhpStorm\ArrayShape; use Mostafaznv\Larupload\DTOs\Style\ImageStyle; @@ -19,7 +19,7 @@ class Image { protected readonly UploadedFile $file; - protected readonly InterventionImage $image; + protected readonly ImageInterface $image; protected readonly string $disk; @@ -37,11 +37,12 @@ public function __construct(UploadedFile $file, string $disk, LaruploadImageLibr $path = $file->getRealPath(); - $imageManager = new ImageManager([ - 'driver' => $library === LaruploadImageLibrary::GD ? 'gd' : 'imagick', - ]); + $imageManager = $library === LaruploadImageLibrary::GD + ? ImageManager::gd() + : ImageManager::imagick(); - $this->image = $imageManager->make($path); + + $this->image = $imageManager->read($path); } @@ -76,7 +77,7 @@ public function resize(string $saveTo, ImageStyle $style): bool if ($this->driverIsLocal) { - $this->image->save($saveTo); + $this->image->encode()->save($saveTo); } else { list($path, $name) = split_larupload_path($saveTo); @@ -85,7 +86,7 @@ public function resize(string $saveTo, ImageStyle $style): bool $tempName = time() . '-' . $name; $temp = "$tempDir/$tempName"; - $this->image->save($temp); + $this->image->encode()->save($temp); Storage::disk($this->disk)->putFileAs($path, new File($temp), $name); @@ -189,9 +190,7 @@ private function resizeAuto(int $width = null, int $height = null): void */ private function resizeCrop(int $width, int $height): void { - $this->image->fit($width, $height, function($constraint) { - $constraint->upsize(); - }); + $this->image->crop($width, $height); } /** @@ -200,9 +199,9 @@ private function resizeCrop(int $width, int $height): void */ private function resizeLandscape(int $width): void { - $this->image->widen($width, function($constraint) { - $constraint->upsize(); - }); + $this->image->scale( + width: $width + ); } /** @@ -211,9 +210,9 @@ private function resizeLandscape(int $width): void */ private function resizePortrait(int $height): void { - $this->image->heighten($height, function($constraint) { - $constraint->upsize(); - }); + $this->image->scale( + height: $height + ); } /** diff --git a/tests/Support/Data/image.gif b/tests/Support/Data/image.gif index 8bae66a37f5f3b697444e29ffa6d1a84a3f7036c..68f48c2a06f52eae111e43df52d96db621cd5f8f 100644 GIT binary patch literal 22643 zcmdSAS5#Bo*YLY{Dv$t4AapSF4hg-8hTf6hq=b$%Lq|nT=v6~UY@rH>5~^S$^df3N zL=@CeRICr!#lq+F|K9Vy-#O!4oZGW6_8$9cud&8jbI$eq&24LMV`Lms4cr300smfn zC=>vII6(n^yZ|06D2T^kMR9mBytt&erW8g@Sxiz>Qqn|{pM+6Yl-R2+wPz1uk0L?Z zNLJ8x67}^BjEzmq^i>n_I6DQ<$5_nSSk*^CWRLkC zNhb+0Pf>nH0W~iX-Y8z=F$7O04^Ik@&@n;jaA|yuh~P<#Xojdnx`c2z#vn>W#!gY* zN>SBZRmE9F)}uOv$v&jEIOhbSNe+fqIxqO-V^Ta`aeyT6kb+Km$MO0WWeF1m7YNG;^@j4$QaX zt#Jm+oO$R@qGev9`5|f`4FpR;o&qFT1M-w1#V_&;(lB^BUZ_+^JV#velq9ZNNW50u zpjA>nTS4)Zl4_Q!T8Wx^t-5K!UWa1gw8DLqTz&fnrGu^74&6#_b&`kY1X9_iNqLEv zPO07R)S`Vx)$GD|-@|v;d3IlkeB;QLGVJJ0mSs)Ojm@4z13^tSp7*CipFB+7coMd| z8~bA`W_S1KpP$L^xrqWv=TDxbUGTW@?Zmgm_(eGD7rN>JVth9@H?O3$9X?b z>Y9reFP7DwzIc&&>C&aP_RF1}tiHa!>({SeVAc-}v3IL>CnhFlW@hf+=RAJ=_`!pP z=g+w>U%q_*{{25&TVKC^+uhxL&VBx$mG%FFo9r&i#oE)u(%jWrM~esr{|;I92Miwm z_o?yk@c-Q=0M9M}@<`dSn8VpTLTUl6TRy}*jJ(4+yRL@uVp!mC`}k9OFWdKMU{9yW7snkoW;1x3GEG1k2!Oq4jWE#vjHv7Lm^iHf|0B@L z!rtRE0byh9ltHzDZR^mXxT?BPU@;`DM{X-=)>tn5U}=kI0oxp<(V2fbi8TUuYV+xd zd%E`JZ4K*QX?9f-4g`@}JsI`4OVUI{)xFM9ImDwhI**^hx`5N{VkIaMjg`MAtw{vJ5cKJJOciy5t@jQg%y1=si$hy?U^ z)XMnw27E16cbSC{kj+a42Z@)bzdNc*FhtBxMf-*1GR{|Z6M(VJ5o@>vO;$=Yv3|TL z(AB`Zf!Oc6DycpML|enJi6x^TS99zGMer<(Gk{Ce5kI0=G}F;BWcsy;CIW^r$4gmp zl+uTsx`s79c!=<$Suyz8?CaqZGbe{sUX1}fFuykM-e`NYwnVgSSo%#W27vgF?dr#P z`=suy73wBn*c#qc=30l#_8^!&(9m3rXx{3k<0~PKl|+A*-@A}&nQnow1{2dtVvvUM zl~c=IxM7VaAFXCZ*H0`mGs zq1~XCcfvygD`muhku2&+jr76s;{svA==1yBOWtZqQ0R#h!oS_E;YmjV-f7}J=ZMpo zZJk_1ar@0~1bS4XOiPN&y?FQe$9J&XCi3Bqa5OYfTib;bpl2~Q>rTfXRl9O^8qfHt zXFgVm8x|e)yOKZ*sGje*2k+78S{hH2ri;i&m3+~N?RjdTX(wbxyf3w|8+UEeDeBhh zjf?~4@17e}NP}WgP{$H=&TxSd=k&FX^yU%fvfWYz^tj`LC*V(%2-a?8@agc_^&hQH zhZ!GVr|tjn?2h`AtWT?~-Qy^vrKSC>`Um?9H)e*ma3w=mMtd8UDT0D}&#;8waLpm# zrM6Cai#Y1jdnZvg@Lu)^{IFe3(jD!|mkO&S@22J7pNjYt(Auo%F7wY)1lMuyd3ZK_ z<{ytbVhgJ_Yxb~6v)v;7yHyY1uc?+;E=1bgFhsV$3&6X|RMI9DP-_liyde@`a_suUS<>w`shKN!*g9txmz^!aTF zMTI{c6p`DD-T=ZHgPlr6u5)rVDIh{)r8AR4W&`aM)Q986PLZA!!|!rvJPTWS&tF&Z zZd;em@va}(9?TV?ri*!t&G7Em^}Z7~Y@GO8 zL-(wL4N=GX260*g2ppUR2U+yJiMC>EANe)sAk}^aFDcQo^Ow(U6}9tINek!vNs4wT zexnfQs{^^3nA%*crzD_SRzSO*rWvRbRkv@!n#jTLO2@1zpyt-IG-V*wqg@(NY#d^! zm&=G=Era^1WsAQF`c)_?ySuDrUP<$?0>-uoHNKsC;Pxpv&m1k{|-sTOzXy)PZqt>ppH+>~D z`HrUg)t)KgmsH27TCuT}51768d8qX<%JUkx&48HU`7d!aXs~nqI~(3>_jXl;O`@ybZ)_>)OxDI7yDlv=g;o~3 z?L{28v@Yo}nZ#L<6HS{=E*^ijv+^M1icP3EWj?fb3k#ye zCdlg8pqB5$pN2DX`w|NR*Rz`vMXXg9V=&rjx?V*g2I)?t>mHZ4a{W@=Z5_q$0EgjL zK?4nDcrn08Quw0H)1?HH1wbRnjZd?nWjCS|BS4EW5=r#J=&+bk@NSxQ?H^>_xw9w@ z1gC3-u9)Sy1Mjr?BsV%}elu$@Z}B{J zG)7g%R5%p<&>(1^IKLth&_*NC_&`xHhIsVsz$?qAB!Plk4`SCaZRtqxfb%2{-DGZb z)O+jj&jrMyDm5g~>jf%tCKTRGsWrVJ^W@~$T%~|vNLfnH`{|hI;y2Ui%*!Txw`eNb z-r*C2>`#I@ZOiJ)pY`|klgaSgnDGx%&876dD+=&#(~Hxe@@K3b4QKie2S>9}%Wg&L z7kCxM75lDwlQ-%+R-`Yov+_Rd#=KVvoRD_@N7Z{f?(4+x&YQuE5a_+%sw9^LuMe3x zgQm-XXzMjKZQqCsOECdKIji~ykvAZF&HRvU-QL7TKt;psB=BCTV^ zRXIQ+t0tj--_v6 zZGCaL5T1AFvGJTT=?+TEjlTd$)$PZ;e1m?;IbO4>z9jhRLA<37C*p2a+1XIj#EY#O zQbvyvE@4~K;q@hm&aAiW^@dPncCbf=&OyVi_|zjQ(E0~O@3ew7f-*s)(XRqm4PMF| zoiO#~91`4Pgc|w|8CmW{nsnW7tFJ$}jQCd*oT10KMHXTHoU&)2lxw(m`ena#1~ zApr5hfH#F!;uZIN_aiEp=sGT^wKOiYuTo>v5>-!ZsxP+ZLiz|83f>6_2M17IY^#%t&$w)Jrf2}`7W?xfloAAMU=a{af|wpCbSt%M}!xD(WCrWa(WmR8Qi zTXiLe9y!ivARO7?yN)r42w}{?P!cRKme+e~RXb5nyoxXxsE?bv*wH6*T47ohHj>AGio zSA7c_iHehCrXDg^hT5SdX?l8|zNS8)6cH5^V*SQf!}<^)t|+v3w94R6MYjt!gI?$VZPIDa7z`M^)BA{E|NSM@!u5JEjy(v;2n-Kw^;VlonT0EiHuL{iQodEJ1 zT~wmp`p4YECVSl)301xrsU4N{x{$rPT1e8V^dFa?{Z$)^m|hxiZ#TSERwSaT)$-Rj z^YJjrQ*X$vS!P2-Li~@a>s-F~3zA>IG}r7H7Mr-25`m^E@0+v?{X>A=D7<+Kj-XUG z*O|V{0`|dzN19NbL@ORjg*UAZ^$k^&dU*mVvx-H}`g@#c{`+b>wR#xcX4huiir_G( zW~ATMOKl&jd$$S0K1_&B7WSq{OLCk7$Q>O9WYXZ3J)hy$;qkov`CeUM=!VT(6E|~2 zIh4)k8A`WoZ$-G~Z#^M&a2WhTRy|wr25d)simhQ+0X|XnpQEgS5xQhs{m2-qm&;eW z1*g#Jps|<^BH&xlC5}Qs0fgc*)&UH@t{4SXLi_E~fTMj`Dyad=a!y^1aA@nnvvpNE zU9B>Y4X!cZ#p4E=+o3oERG*sA*`nkJa=w+|ftpI2PKrvCzvq~dCTGlXckSx)LhP$h z;OFBAyDaI#hkXTeJdccUp((w)^}-l;?RBGSA8(DTL_oC$ci3Hay}DP6R9m`sX#J&r z@Q#wOTGc=U${Ob3`bOHHQUxXICssFIW433@O8owY+IeK-PxAvfaehQi0}^oFA-N8` zBL8DgziVveDr|3&x=6mJpKHbKVK|Fcj?2;k%*(o2dYc7WM?-ZWEF%$r5hFwU*W-M*)^Jd+6sjXq4MZTeOrF$cL0KZb z8JM8t(kmlMEg9vXe;SMvMU`VOld@Ds%d)&E6<0CGT~RFLww=FcZ4cFQYDwq0Tbc_6 z;Gw~Lw$2aUC^~Nu3b2$8TjNh1^!%(h^zx|K6ligA1nhkz-Qw%!hrJO*QPvthF4}>S zcf&<2-j*F^lqWzr^5b96I@k$cqX75lMeQosmS{03??lNQ zF3a)g*B{=+*8^*Y?FPe(;&w@xVV3Bh!i!^FjDnZKZ@2j#J!x(mQFEaIt9FV%E}y+g z8tNpU8-yPll}$#F_DB!`DUNe~S*pQ&T!;No;ruiN6fITLJ-0XEmyuu3R%es)Slc^3 zDe7PlqwbJfo`D=%l6sw7Xb2Qwnq6grG3qqq1ov#shshd)wU#_v*R=PdK5t0+v*8HV zl)MERl$Rf}J;fJ-lDigl`Hr+~#^C!o#r*n1-u`I~t2VESB{$dhJls}|ZO3pN%%h?|J>jri@b1%C0=;bJ3Ws@s<8njK-N2qAk zyR+XehfHjTiK;=V?^tmGhOWiuF-aLD^_dFT{ax zOx=^dJK>vbNNTY~_`KeGZd-gUxs@9d^#}uK?0;4=muNpLTetYsN#X+zaD>+c-K|-3 zUu4bo9%-lO#V!X#K{1kNwGS!6frWSRAJeI0nO+CHZU^+b6+qH;@=g8wk{fFqd&bOa zO~2Cl$OU|R4&1)^1^q)1p*w(wM$ime_oJFC`}%OEoWUqk6%lO~`L2Bo41O z5dkbc=aL|HX{)ifo*z#w0uq+xc$TwBT!%m6qc*?|A>LmDx~ZL`aDyTRx^Yjzf~bHZ z&vx4gVziZ7!mtrr9p9KvOVOB^#n1)XJcg^`feLx&o9OX8=IBe~AF}q*M!O1G%2N17 zN&g|u$5SxK&0}YGt2^ZE5HJ%_Ct^rbZi?7xq=VT0hxcH4;zpxhaTq#wfE1nM%DeJ3 zEngrr*T)sHn;2z_QX7~&7jCiFkU=@&WaNeA(PT*+QF>QRPucg>Ejt$`Qg9Hvtr=k% zq&8tR8f(trsloK{3!CF4T)dvep{(+j{SkQVdc4IFAafY8$$Va>wnJsWT-sZ+1dFS} z!vb<1bF&%O+87FycJsos3AG`;&1cH(?Ku#W@Qe*<@?L#9Cbs;N#p!F0L#+7uoiMPA zkxyi;{2lE%gtKah#5u@5jmZ{i?M=p5MTx~B+Y2Q!wG;;!07kY5NDRxMbIRM_w4bSd zv}WZTx;yixqj%BaGGCSE^c>{#<2P?R*)oUn1uuGAd9)8JU5>k=#`492*_!I_dx!Y8 z&s!m^Y~S~k-EJ+=aJS2i0z3f)RUe$NqC`AFnJoD`@p? z=dEshQ*?0^iFhNJ%nEZ9NO~S@q{!fvk>%;I6=<3h} zL2R=l;d%__uqa-k5?hB1df^%>(^&cE%b&yXT3t-SqeaVgXx(F;MPUL0i4PwT%We9KbfjB;rL|6DH*L&16hfko?jX^|5 zP3nrx(u?|RlJB!;0HxMWWq_4&m`X3xF!=`si^v98hs6A{j0exD8N%*Uoua{B~6wfd)YPeP`0#ALmQwSdBl3g55pN&*=TH>Gsw=pU-kYXOf?O5qS~_l>NQ zN=M8^)$-tOo4~fNVII{`n)(x2-mvfjxFk~{X`%_7AG9f;S zXC@FxhAI#pa!m9H{}V4UKnRcysQ=&NB^E>e?|2!Fp_j_pU|d)JMfj!SB};UVjmGH; z6+;9t4-t^Un>fjB%E~t1JqyFuioKq{2g~OX(VHb$$=_>K#tOTw&cBeZM`H;jtXC6% zK0fA|9!0p#oY%b0pmeUU;k2oZ*b_1P{*Y2J{TZ8FBaqj#6RJFhS=O`n6mnXY2w;7C z;gx62U7AZ2m4)mvSDMnSU3DozXMhACDgW?;a-_V*`^U`Cr4}0rp#Z{IGoO5|qyZ~T zIj<020WMIE+S-0-+DFOwlSwtlw2UP$a$i6BHryBb&-d^AG^&RfDMim01A*$ON^4@h{&UlO{eQk@BBzEQguWMcb0(64P1AWumS`g3k#OdM+gKfabQpws z;xw3+QKSFvZy^Qx1z%F7jcWw|1jRBzSuZ;DfPM6rGX4+eH_I{l=UlBEwVn)fshVR* zGS2X&Xih$?YBMxjjfWI!%d<&XVXS?bYAU>C%%$a7eqF3(95@<@#POOKgj7@Vew0@z z^;5FKI|`>C#lA4_1y09IsJ<#p<1t@7r~Ssr6CJ+x`qjmxC!|12TsRlWEKqW|#HY5j z#AGf!W;Hcby7MhVP~jY!fcDbs=mSUjJ};fGs@{n@j)Xs?@tecuEYS8-yUiXKTNe3R zr0ZMW1e)8=$Gq)yYM*rLWQ#~Dqsb0>m%C<*{H$sa=8xX>9#}IegXMZTp6y(KNMsiY z{@^xAcitvGAS^B$XNuM8dET&D)*_F$UbPEA_L_NQchJi6rKC67T->M(e`d zETO!RVeKB1P4@f3^o3qBzqW9+9D4uV8*eRf3kN%-`NLWDzC=!R1K+-mmTWB4hbO_^ z#wqjdbY?RiIC0@Fv!>WwIOiZjDg0&&OZD!g0?ko=bx#=yB!c&-O=Q4Ld4heh6(ua) z6FQjGOPf)D?v}&9dj5MIKUm4Rw8vkZ-Q%kb1AxWTdFNdbCIjF6mlq}NP0#VA-(++q zczzRxd3p%hKO_^5zN{f<2#S8O1T`p7+}HD;N4U{HTxB4S1(1(o!i!(z$KZ~A9U$)) z{08Z@+YVSp>4y`1-i|)*GU~i|ti_@gC$@d@0_v!eZzK|Hmd*PFblKtB z=!KMPUOY0f>xOYFx;2qCg znRyKM%E4Dh^$XaO(pS<#dA8+YdD2%%9ReEfkXOBB#W52%--RXQO{#skNm~M@LfF(u z9vKZ+i}K0VuvmS!Rc_9s?%xdkXjorRL4qcOCWwrw(w3a>0h%+@o*>Dn{3`k46 zclmdIkYZ8y$045!x)=>?PfE*f0xEm9-*`kC!a4 z*vux+1DcD`jYrZHx+E;Gwq>lJCf{a-S%{BurOe6`1Wbvbaz6y0)^q4 z6JL3w?d+udqA#9+70p2`G}KgMN^gID)Koi?n12%gqDr;A=+AVM1cP>ao`@#Dys z!<3vh*}Pr8CO*|Bjs-fsl^J_Xk+{*8oX+Dm3TZBCg(M{Hlz||EK%hhU7ce=PJ$&^s z2-c1WG+6(5&p zmTJL!v^vMPPN;VIT%v0PRhyC?ZZMorGfr!iK3CLB+e73DvGC&4BzLvY1!B(e`esG(o49^XQze7cUQGv{`z^!1oHi;l>wL?TaQ_RMYTd@{mXMN@JjQmCX- zQ%W;@FK79;IIJyhQKXlBLj8X6-%z<(>MM906;95z;6}MZSx;A?7W%Exsph&*3>6^! zwOb=-3vU7Tivm2UDM|R~1qOKdyiY`t*EPMvFJw;jxh^$IT*!%N>u<6=M^*T+V}(+P ztAJVOC}mjidv9U~y+KfaygodpZ|*SGhe@ZM5+|MBf40oI8?=6`(qO*KGwBKLp$ z_V99b@f^JC`Ay^eaYt102&MH3p%}YwdS@nn~&bJb!K_^>wZm zPvmXKSib-~vijA2nK&7Tu8n(Yd2VuYy+i1>rc`jW-RtVXn@4|37`#i4xIXUh+{R!+ z#SRVySRzKpXDS7x^aPDu>+ftl$}HV((4j%Kp7NI3YcJk$00ah^@;(JH=x7KdF8 zL@{)Ja9LHdNB;(DHg_UAb%5;t`JC*VAiH-2$VLWHH{HC?+khulu4! zNXj^q=Fr#8&=g%VluhzVICs&h@Mv*P7!pr-IjE+?SQ2aR_ zK$JdgcP6_+9Euhb^(9)#WPIjUlV2R)ln=zKO^%mpZOGb6CH|Tlh2H`=j*zasX97e; z+4Hr4$S?YfxrvVEe@+U^mnpu%mG3d95a1 zC3rOOQLU9mWLUBSG-@w9O{A33&_lP?vM{rabSA_o!=bCBCfAT&nic#6#7?mNA9{l46`g#c(KIN*aq z{IeL4d_DnwMQr)%uu0APq-(q>Av(jV70cbr?su@7c*pf!(_T2OxAfcG2?~|28S|j< z4xInH?02rmHwK_yI2!Gwf#-6O8|T6b|JG2xbB5;;&z~AU%K$#UOdb?Swuac&o-lcq z^qp?mTy^-{9bu6G)1UvuXWfHy&>u%Y#3`uY-dTsA(N0=;3a0O4!aBXFYH9J$%VR>f zV-3Ib?ipq~k4VrJs&k(|IX%PFAKDKA7#1%{v zUl;A&gdn5C=ultT^n#<(cVI?FhS(MY@}{-AKgneDof@dkB)lpIl;%~{bL6aQe-a)- zQB*;jL0><>WAl=^0%)H#ItptgUi&=Nid3(J%IyB4q+ujt1j=Nbk=NFm}0nmN~sbyZ8i6@sT7M=&S2yy zNY%r>+?>|=`PuQ|xVrDp&q4$>w$Ah_H*;>s9GZ{=wUdwquNFaP#nLp6D>9Ksrbgdu zO#{aSR(WWf!>T6>b2i0S9r#B5hJ2|sg*AHp#tf9b_eH+!FOSmQjaH}Qi#HvATSSER zUfA=8rJ4MK9_;g31^0(`WrRd7NuOXR{`OJo%I4emzpvk;x6mC z%v%&OI_JxOQ5K3-cZr0)y`wbfg(5nXBGlh^BM>661zpNQ3-Y&;)5KB+H^Gqs#s~-| z%+r3gVKBNp(XYxY0be^e^`Tl^0v1sqg_e!dn_Ya>FeMvcwZOx1?tFYt_1er*@7a&= zi_g?tyGIw|Z~pMQ@aOwt&Cm}mw(ze=%G-IAi9heKs;Bh1MF?8pGqVmO!hB@YR8=Vv`82SbLf@q>!_d!>fq;?8VEKk?@{QFr^(!$n0Tf+upS7V60Z)%2`r z;G--}Jp4&d8ajpxTY;b{JeC?6Ws;9_h9UYk-F#IyS4Ml`yb%lCcm6Opq)r!tXN5k! z{^Pn}H2-2(gyr$+pZQd9xF|yG{7m;blsM7BK+#Xc?$d=Rq_tzAqR7UEI05#)n|Q-n zK!Za6^2Bb!XSyC{?pEwRm3LtO1`VX|tDE|KQ4L|9_@VOF z?~4*l>`muDvp;$uElti5Kt`7pdw<`6bnJDPG>fA5=D_o`qaRAS2!bO(kNB-tt zCIF)2kan&jfD1!u5zZEB)td8Cq(z#gI-IrsC`%N7ZHxYW)cGjpP1#e}ef&p>)bv|E zp*q&^PXh(hKi)tVv~J8h-J9vuk%mB5^7Hq=fICc+OB)|b73E93Z^fC_j9gd4g)QLR zN_OvT!Uu>Os)w#Qi%rqrWgKZNd?W##Dt^@2|Cq*pzk~e9$CP4VXrr>3DkrBE)HCKJ z&JJG<&KS_#cQ_vwT9yYx!y-jp%L#=sjj}bP`w*1(J$g|>0Eoc zi>a$Sil&-mbm(o?DO~kEn4CCp>Q+N*_1aGDyM&)PnW~wob$|TV+1GYI9~)YLqN$V= zpV&1aZOsQq`V6eJX_iANrhyz6=a9Y829|D72MpaaH^aQdwtP>{10n!9_tm~%kAMNu zR9%*?Sr~ZF?Ib+gxX#1Dm`Poq`s?H zDLGhj0RbTEyF%g#A0KrU{kPT>7ZQ5SI)?o+`a+M7VfT^iO(s2F!rvZcXZOcm%`@!x z0K0%}p^&||5qYsH4$SpH(=z=%Y5B|6Hh1z4Foj}IfT%O;xhHBh+aGvjrUpgqRviWN zHMT;J7Z#Y9aX=P_FN6X|rO5MhtbW>B8CtpC!oefa7L`aFh8vz12O)%kTt|n> zQ;>)5^r@U@BO#{d){Xd3nQQKNBK!(dqBt3_N(#|Su}bre?UB>?@yVzRQsVrQAdw25 zGe-@|Vs0^=`fxF-IRV#2PCeF1G1T98?Mp!XI#R@yU`0aT;-C_D*CdJ`nED!)?S&q6 z6$Vnj`P{D7+^Mk^&js(L8=}S&qHR%z-O(d!(HTtS=a0tzTMJK$Nz{D^c)QJm8$@y+r*5OF|C8A{C6GWlXn zH@0`_GKIMY#LD?pS0Qy+wi>B0dHHjU5mz+EVM_Jv;%<}Hq3R>D_&`fVbxyj#* ztKSuXFgAQ)Q?&S1D$D)oM)t+~`r2-ffE?vS`6ZnMxrP&KXLH4os`_TyRnDHD%zQQg zMW)62H~ptmm>s#=$DbYJD@!{KD%(CC7--U+D|b%7WwI=s%vhT8Jq;NgU!xZ`dj592 zVhFn>>{VT${I!lQ>F_3cdeG*>VRf$ov(&>EA9%cQH%&z7^jiW2%0iaO zfTJDBj+U6gj>JlSG)&E)DibEMTV+8UU+)qwj)e=Kn}S^_myj zdic3WIA>HaM&>@rQUgh4@td{@X3868}?>WSBD5IEHe4E zX}ta|YtL{ljOKB!!bA(Gc#@%o(%)D402_Ph($Mve(=8q_W-cDP2fuaxfy0&73I`io ztmzZ=eXp+!H5#s07^sZGVa(GnW5RMh>Lqy59#r7m&Q;7;V;GCVx2h*m)EOFS$4dnv zs$ykx>QDJt?61yvwj2ViYHVZ0cpLF@SjUnxwIs{vxK^*Xj_Br|B+)2g&Bsngf*C0Fo#rN`bQoGJ>YS3H#o=4Tb_V zuOA?#{^tmtZ@uZZ;9qf&^g1aIj0$uSlR;rtkFm0lDxMCoS zRWy&qrj4A>z8sIF!lClgLljg9L!6f=rGq#bz-We*sT?XFoUC#f$4QTGp$0Ihx~adZ zBAi78YSk^g9L+B30{0z+9O{qpd_`KSJ6v0jJTV7%P7Rni)}g5wrBZxdv_3Sj=!_BT zhR1sP zagU@#sen$b-+tQJ3B&70?6pt0g3b=4!(;BP`9w=1a9s=+oOFw^=7uE0dx>a6Xkg9^ zq{t3%BtQTsZEc#(c6pbFG5}Iz9FANYg783zMKUCugMaJ;rT+0bl#&}-lm?CX?78{& z0<;#0-$EEh1n3X}ZvZ@fB>QnWGrEyns-U5@RdBi-1_caMuqYVe+=CQTC|7R4!W#EP zLqYGl-ytTF07>8?6mCv1vtUprEP(|R+^XGP?$;s%6^_y+iQs6+0V5*x$uxvUgo*4D z#Mkc_X?mFE7sYtfP~u@IC}9$z7U#-4R_zTzvSEi9hZPD=k#DJF`}9u$4^rX%+$cUktnfmb8Z2T7B!7uTG1YB!A5%tgsvNkF}=ti3s#go7|{U#_Iw&?V?GZaEC z4H^{(9GUkW7{JWi1+Bn+`(r=~Sy+oKJ??=b!%w|FSVZRf?0Il7&3eI;{3)C1K|aotUSjTBtsGL`H* zQ$q~X8LJ|gtDZ4Ro`Cgi@aN~7Wb?g`F3E0m5KQ0?obhbvM4nb5buN56WLWKceWQ?%PNGv7u)^W>sMBkkZ&U8iZ?pi_f7;op>w$z+7nC+F)9em%5Fof1e%+ zK6%&)l+76p0Q^su8zuei^9h>B%L*cRp2#~ZuxY5H9MYsz*5|EtdEPkN z=0HjSYZ?dVq0kAz6UN9r2IMUs_n`BBqS{E9>oDF$ikfpS>5X|-vLg?<>OzRP?m@8; zj#W-g&cvYYc}FP*xwIr`+)=%Xe{@*jn5V-g!4Sq^i{V?BRDDmC?=th-a^|rGa8My} zRG4sEt&-$J#PD2cL5u)`69TVeJtztUXjktH`3?50)(zpm7|TMnx9U&Vq>Pm(t+>xT z$ize@2n0WOee7Kw~ zkQo>MRmRklt-1sdN_rk^eloX$P`=;nm?4bv8%i(u@0Rrrn;*nXEgu#AozEZCIC}@K z@XI`7)oqtS_D4K&9~L-CzWSpklTgOSpG+?z-Z?9J+m_(*?Zsu1p90nDadVB!bt|9dPu5bG$WiBL#q$k~`QnS}@|NNsf@9Cc~`e1tWR=&)G2VL*qeczW+zhuXd zIX;)E>na2_5i|c?bMl?Z&0yRO;ODm}`9x6rS`O)KwaFAq7ix%&MvGoOCiTlAGKbHT z9~d2gi_=#bj|<-*$u%6*Y%(M6Z!ItvgAI;tbZYw%zG}+bAQp!xUu5@KrSXkEONUze{&MT$XU5n zK(vc){s)oCwZ!d=oq;XUcC(_Pry9TOVHDWapDN++F&g(DA(1Ft5kJk>GN32_(r*Nv%vki@9uBf^GYR$}CKjXcIFp$2v|6la`x7zds^MgVyotda6Wa>hSvaHIw&`!s(j z#+Ep27CSO)4hp4y)bZZWi!b0~cqEw`?dfBXvy^Tp2-?`OJ96y0Wwb5_@8@L8#H8CJ zxD`CMJXV6P_O184xComq+-Tg_PP`Pkkci)d`%Ea1WV{iy8lYF(VO&qoSAw%|7l`Bn z*pl-~Q4=D$;|8FJ>BWrsb`j|Rv~YS`m;TdxJQsL;H~#4?5N=BgxvT(KuSqC)2> z*8|wJGxy8|O{mSGyov=+%J`3a#jWlUDO@P(D$8lE!3+^yuBz`w@IvBN&AD!iZ>nSS~#7?S``a@Lq?a%gpd*VQVd`J+a$r1-)3_J>ut+=u^ZW%2?Hr}qk zw&N5|x@Bni`dLNRx9c=`fT)$c9xmBDytZY8oYd0#O4Os^aP#M_cMV6ccDQ-!?T9h; z`){y4j~P|VL|&K=Tqb)NJRt&bL#+K;m;9E7o@&RS)t?Y_A( z)BWM?w{NGK^+hX+*Uba4UZNRa{F5eu9~SB@AD_0V>knOpz9V10?c=$h4e*Ji_oN+% zC@G&ajJh_7Jo&e)&eO9mIXKpBZ>+cFkx2l2crc*n=IARvff6KWT0k-T4I> zCZ^L1jWl=LYe)#8wpy^EK_+zlul@PYBFy$0#a@sELCbjOadl-@-uNCui zmk!Ga<5qO@OKWvAIZzMc-!lxK51V}Oh1CxqivnNVZ@D992aKb8RG=jEZ48P+hF|d% zO8<)c-JNiy)tHo<0S`fUPoZvday*J3w3JyG?w$8KG}>|-#mkAdY(my~DuCIz;at54rW-)SgZ2 z(=n8ovQQ@j-8Smzu=pVlJIOvp9Zm%!|Ipo+4uQDDPu9*~H%@TMok0rZv^V7E)Kqhn??i>1`S%$PMBQ*ij!@zhjcMX8QXgZcNR>cBOR85(49YkK8)QeG)8 zl$QjL_`2y=wa7uIfB2hzu|DNj9&ZPS?Yep=hWcnWA$6FxTGl!Xhg1c|f%>NNqlM1z zMj~qs-K*u!G$*Nx4y46LX(tN--n1wkx4pb}hyPM~Z7#%$bs{AlW}PnYC;9g%k)u3B3pyLXjdEiU=YYLVyH92!tj@KzdOF1O^0^5;{mP zA|>>WC|yKDkt!GgMFo^1b#w*`)^YqY_?=m2=A5(6THo(k`{%pfU(dCkz4x>4`;Liw zpA-C9LzERl;tJgr;MT?f&eY^1LGbqSID1d9qj8A#66dt>kqA>xow#_$kVZjlWp2D> zb-Oi7kTNfKRB%v(wgf0J(7_>qae-j-PT@S5SZ15VQwWeFjyuMi>lmrd)0CL@D)(kV z&#@ZaCg(K^C}*pxL_9984AM3FkN-ZB)c%%p{rx*!wUq~u`tOj+P6e` zw;peh2hQz`R{d_I2gX2{z5<3Jz*@&qyjxJDo3}7iE+jmM3r#i!>gxfo{wJnpge6&5Y*VpjW$~qMMg5D`i{{J?)%#Q4Jpn$*fS|ul@u( zrhe1_50HLS0O2sCK1z=FOqC=uPVCJ|FblM}85@JCw7ZZ#G)-O^3>1qA%XQ3uDWOkm zrGSA1k^YJuLhb9K6U@~rS0jEa<-_I?*T>_cp#>Vw7~n3r)g??v(f`;01~Tq-om&sX zGy?Y5Ac%vZ{N_H7N2o||L>tcq@d+Oql62S`;i`L0X5M=%2l%Rtz$j!Y&3koKWOB;z zI(|P^ou`4T9rRZ>cRg^Np!2p&uEsdp3>b^QsSiIHWyF>)0yh!B7(U-&?HtJ;;*Ln+ zyVkBv*M=c^gLcy{LT_?2%W~77kO5p#sfJ0XZtCr#X8- z1Zj)*=^_KE^&Q#~;QdrkJ$n#VC7)I2&)*%!*C8pz;;=zLeIqsO5IOW-tRB_G&fLo# zfI1_ogNEl!Se(9jc6u0K*_J*s}-pOFX)Cvt;C$EtSw4JA)n1QUu&~Y-GOY)Ia;`n1S;- z8IUHhe5Sl!?dzx8R+`$YU!7J1z+iN%e2i@Rng%))1m4Nz$)Rq=f*WGn9*pJ4$a4D- zGF65EO13}~22d7j;7McP zJXWE|*^UYyCToJ$>s6SlF>ZiurV>i>kSf*WEoWPn62L+B*Zk5wB)|<}LIgXtIC2DPskP zVoHpJxH~8Sq*mHSu3*6$I~JcGi~@1Bg4u&G6jG7ndlX={1SReOTyCK0JhjcCTL3yY zJ&0qdJVp-aE9JxUP3W-&_L-;aEnzR!TOH_O&9vIkLq(BAEw?YG!pgNE1 zH`bv6Oz1g)dqueuD|2Fa;p&K^Uf=c%R>D+scUE2w`zBvJtIRK;m|} z=#m;`sq&un=$*6)VrEBg7>JKL6##HvoR^*EiiDuyLn^#?qTyZ9@DjQ}Fx`wC*nTP+ zeyGwr#KBgWaU7u4IfhPj7f*N`u4oGbP}Hd;Uc)>aVE0%;gsFhtGTeQZk&eq!HbWc@ zDU^yn$I0LAJ9Z4p1PAW0x_^W6eb2o6^z$^|B$N-4tD+BqxPcVCl{HNnx^LiI7)c6~ zN4W_>VGX!d*j{Hp?2y$1=cY8iv4~4o{TzsAGiP|BTg-Ms%tF!Zxg5VuSNJg>V5^~L#GcT;Qk9vtnsjKAu_>qdI$Dq{S%P~AtT4g z0C8z5bP{UDc(`p_!odVID@ zwWu2lXPSs$08#2=aT|^zsTa^Yb2~0`W=syZ8R@G+@IhHqGwPBMX)&-BEWJ`A_M0+%$P%3;>B< z_dLDseQDj-U>(7{X8#;PVOmk8H-Zf|LiVR#`nR{oge~nlybr(vzJT>#1el$`HI+JyF0Jk&N`Hsj<-DNo%E#wbdHAqQ;*{ z`q%K%MGSJ3g?;bySX3BIpt;-Im5Htg8Q5>=dku4$&87Z*PgfhCCJ(o8O9iy?CZF_K zHF)2ef7Xf@_i|g`AtuhD(=+Uqlrx%O*XwN{Cv#scx|GZ3RcQp!rM@gE`|6U8`_(tn zsDmg${dX~=rBi923!^dKXT>!T#A1`hPkh+V?&y;&X2QE{ER z-ScjPRcT&E>btf3^OLrK7gK$`AAemMO#S}D+p{^-==$JJ-`9^js}sKx6Caexn*P3{ z^n2-ke*S~tPcdA$Cg8YTP) z4`Xl%j#-Ad#Fq~Zu`Yo<_fQf0nL2jjVmnq9`xO0s2h&!rh8MbcA~~wUFGnYdf&0o$ zM_@+&yBwg`uOAv^coV}1hLDCFd$xWgIQio3e9FS%$=sFIw{ zs;WiN3mtg3VU_iC(>kt%?4*mhrPvE1;bcXpik6R{{Ifx~PV@3a`{z`@=2stRHp&b0 zOvNc?$`qcUHAqXT{)Qgl@{B@b`Hmb;eJ*`@6rIF-8Gr3GW=}Y{2bMN)g1vnI0v5NR z#Cxy%g#&C?6w28>HdaWteR{8gflkwGN9m>K=N*$6HoMGw^q3p&p!^C)N`H5=~ zdoo$R&4-|Lm&zmM8=GrcR>gcGIUc<6uvDu+<8@se=lxpw8~76CHyO4~njOI|J%doo zR;!VgS2AncR@Tk4E$wcDn-tqKYZqw!tAUoc5A3!$8)8!$vKsJSu*2cHh=56-_y47fMJv>ZE>r8Yo?CUczW_y$Io-E9uuV&y`2m9BR?=NNuJ`#5LDT0 zJsmW#gU=z8xGgObWASAQd6hLG1HV`m9U@;3huPW23D-8pJyM0mFdYaXX9*xf?n!A+6Q-L@OnI{i-dK3AS7-5AG4HzN z1j(??7JumZ#4U)PppkH=9-LkFId=6$;edfv+QYt?7T)B$oSCsD%6yeBYTLFROSF%CP z)esMN_w!W~r{n}?n~d-#2#*?-*7Pl{W>^;@k^*Q|O9Q;>uXODGTcxD{dB6jR|68S% zariY6HTPkWACXM)N5T-+Ril|=?xIF1l78yYefTVE6Gttm+*kpc(1MAv_A<-o_t;+O zp(dcNX~W*E^vpa_J>{V+w@errLNSy@`%x0_LX^~J|HX77dzSevGaV&Mbl%XH@%;R zgcP~GOkh9r(c0Yx{2zTQWO*4#)W6IoYHz*FA)6?z<=WW!t>rm**RSO}hi$DD zxFsm97kcLVtzY%6sb4P&?A%(vMrHdsifJUVD&EJ2pRvJo1Qx^>qwY8DOJ6{YW~&r~ z^HBT}pGT6@dVE*;Z%yVeXNaAs6G$-2X84(DIr~?polz?EOr|kd%T%JaancpNup8@D zGzCU=j)xf?8BldbQTeKWqQCCfGZj>0tWnF{ z7syZPa7*h=eQ@ zmAct&8)G4{nksL%fB|K^%D#iVC4TC55quLi-O< z_q!BjPVuA@E6qyGIvO4|I<)yOj(0T9U3VKykuvXWdfMhY)8I1E**xDxT^%nm?>hIS z)@*HBH)xqKeCtqWlGZ)sb*JMZxGQPdXVlKz>lK^XccL4;*e6-46@6Uzy3GU1N5@Sj zzz7CqoRE+Bg@?B#`4)0Ov9C@%kOI;AUc#0`;N%9k&hwE!k zwNv27zC5gu>WyR1f1-chu)Fldz4m|WS15aus{JhFkX#{)M`^T9*s`wp3=d31q`{lAC<&M@pI=u_il{c4-7tIe+|7AAk%Fd(EVu-u) zoQK1YC%k?CE}uF;0M7oce2-5R?wN39rnf@4AC?=0qWl*|gO+f(LM<=l*+de%e0+~} za|t$emc_hYM1r7~lu;>m>o=Pu%gHjy^TE@fZ?cFCyi`j&csr+#NWY>`((smCPRy^c zUTkR1u&;OiKg!p#*c<+CdvT)c`ir~KAh>i?!4<*)uuZgeI(bULq3uPT~C_{gsuZ)rq|( z^!3xbpIa|A zj)KXTdm}!TNh@RW$$+>VD$B}G{8j1>{{hpDCgnN zxi#31#8{-q67u*a^OGY6n?sAU%h7&op@dF_6#2;;@m1NDyYp zif1E!x)EuX-R@^++QtDao`39{$j2JeA$ z6u1g-uopXJ4zT#~;UA*@A?iOO3bIGkAC{T_B8mgNhuS|x{X^7$MAQ#(wAcv~M*$?e zN8$erJq24Lo&R)9?}eU_P&$~F;-jJ7@9x5yzKAM|(tbf@WH3rfO55ApOG`^abRn5|jDnTI zuW{(Td-s&Ql=y^DBJm>6o~_C2%PYnzDp8b7O$ky4vNFM#yLVZ7dU`U77%MC5rluw| zFHdi8@A>nz($Z2*O`N#Ccy%?CgOii*JW7lrCgv&D-rnKq>8U_hh>MGJb|wiV@=06E z9>C!cAqaf5c2IC|ULGSOBjbP<&P*1>Ex>d9IQbNnsvV$1K28pQ#K9MUqS*=LlT@oAx`Ap1>7a$ZaI>VOXG?6Df@5LE0b{Y=l+Z z1ec+Zn+Q14fCB(Pk#_PFYo(t*g73j$76!`P^d9^X0e(N;!+IhuNVtKHB9}53;>@)W zZq76=j&O4^d23z|6M4srDuz0edJ!noQVf?b?NAoR+gf2dZ2C!;&}f5v|E=_9HOq8 zqP@DkrJSUVsDQ2rr>2b?KheCs)lJZl`-qE58C^NVFeH(f7?ERWsfs;}<|YgBVLf=y zqS4xR+Rs=0ICb;`<8+^`J)@meEp#kgyD8gUBL9}nAK)QTTS>AbNWNzw;z(F)T`30v zZs!9yYi;cyA;HsUj9nr%u6ef`C~-Pk<5WznJnSrQ``s2+<8<|LG>Vq>v=f`YhN(;z ztH{vnuFy`4l%XD%&N?mMm@P3{C)SXobgfX?&qL`B6T9)`h^L~GvP%%V-~B`#e*6wu zEa1##Cet^-!`ut!ZmCC((9SsPPJvc$Z)jXZrq>X0s9!$s{= ze#-G7SS}4bkCL2#u^w7QYxcfRcvMJ#w;%9-U$Q@-umIpUAiKxqWa;i^P9$04HE|Ho z{&V%ee)CtF0LVSy7l))x2a}zG6j1eTo?^q&QSx?`Hl4L2InZc9_E=}#y*vz$G_rG@ zFjlDI*7|0fOoZ{NotUT`$BocHR+LvOhO^e0qRNuHl6G^OX#z${IGjs&i(8haaJ<2; zTpwewx1M1V~#r zW^-f(Km?HcRr@}SKzMzNkS^@ubpR{uK%F#{3lQ-$!+Gt>W^%M=@jL;t@5ADO30wl{_LEV)&ApCk>HoBpDQKm*QAEc|LEr_+XX?ikZH%yfbc99^uyJA z61+1~nbkgr!WUQhAOrWxQeUQZuAMiH8L3INE8dj};uba7h;fgYS_~Afg_UxtH6luo zrG|_lI2QO$<-%?7E-vMx=#NIOSL@om)A6%GE3KrlJ{4RUI>g;OZE!g2>Jh z%#abOv|~)4qq|H*`ODpE$V3Eg5Fog=79+i-acmCa@X{(&rWr>-MP}_?n)j%@8DE>L z+sqi`l4(|Hb4y%ctzD%gP|Y|5=5`0`@AA(RP+|Ouq8z5~y@cimyz?})on6IdtdTmy ztj9!ZH>K}sY#gmvfnh%j@>3^S-24EOsJVreLZu9}&Qxr|<2Nd1dbqZx+V7SsN+h>~ zv2AAu z2M^e9u@N%gJ-d31Pf<@jME0{-gQl~_Y`C_-g((mgw`+FUw&@5SvT5Wv1yWSs9in

}N#^VN(lGyKfz#ar7S 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 From 5b8ba88ed2386154a4d5562e86a49903424a76ea Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 02:47:11 +0330 Subject: [PATCH 06/15] wip --- .github/workflows/run-tests.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index bf7bcda..808e153 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -42,7 +42,7 @@ jobs: sudo npm install -g svgo - name: Setup PHP - uses: shivammathur/setup-php@v2 + uses: c@v2 with: php-version: ${{ matrix.php }} extensions: dom, curl, libxml, mbstring, zip, pcntl, sqlite3, pdo_sqlite, bcmath, fileinfo, gd, imagick, xdebug @@ -50,6 +50,9 @@ jobs: ini-values: xdebug.mode="coverage" coverage: xdebug + - name: Check Imagick Version + run: magick --version + - name: Fix Imagick Policy run: sudo sed -i 's/none/read|write/g' /etc/ImageMagick-6/policy.xml From f92929241f85e21b05ab7f64b343c74d5a276006 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 02:48:02 +0330 Subject: [PATCH 07/15] wip --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 808e153..16f974a 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -42,7 +42,7 @@ jobs: sudo npm install -g svgo - name: Setup PHP - uses: c@v2 + uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} extensions: dom, curl, libxml, mbstring, zip, pcntl, sqlite3, pdo_sqlite, bcmath, fileinfo, gd, imagick, xdebug From 108b335564b6fc450182180b0d2e70079b7f8b4a Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 02:52:20 +0330 Subject: [PATCH 08/15] wip --- .github/workflows/run-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 16f974a..8b5506a 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -50,8 +50,8 @@ jobs: ini-values: xdebug.mode="coverage" coverage: xdebug - - name: Check Imagick Version - run: magick --version + - name: Check PHP Modules + run: php -m - name: Fix Imagick Policy run: sudo sed -i 's/none/read|write/g' /etc/ImageMagick-6/policy.xml From 4244f58e51c7e15fcc8901f451c7d609bd56d256 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 02:55:54 +0330 Subject: [PATCH 09/15] wip --- .github/workflows/run-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 8b5506a..ee3eab5 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -41,6 +41,9 @@ jobs: sudo apt-get install -y jpegoptim pngquant gifsicle optipng libjpeg-progs webp sudo npm install -g svgo + - name: Install librsvg + run: sudo apt-get install -y librsvg2-2 librsvg2-bin + - name: Setup PHP uses: shivammathur/setup-php@v2 with: @@ -50,9 +53,6 @@ jobs: ini-values: xdebug.mode="coverage" coverage: xdebug - - name: Check PHP Modules - run: php -m - - name: Fix Imagick Policy run: sudo sed -i 's/none/read|write/g' /etc/ImageMagick-6/policy.xml From 42c71d58000e8f04df9fb4b6abb34e7da7a40340 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 03:03:48 +0330 Subject: [PATCH 10/15] wip --- .github/workflows/run-tests.yml | 3 --- src/Storage/Image.php | 9 +++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index ee3eab5..bf7bcda 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -41,9 +41,6 @@ jobs: sudo apt-get install -y jpegoptim pngquant gifsicle optipng libjpeg-progs webp sudo npm install -g svgo - - name: Install librsvg - run: sudo apt-get install -y librsvg2-2 librsvg2-bin - - name: Setup PHP uses: shivammathur/setup-php@v2 with: diff --git a/src/Storage/Image.php b/src/Storage/Image.php index fafc949..7571f7b 100755 --- a/src/Storage/Image.php +++ b/src/Storage/Image.php @@ -75,9 +75,12 @@ public function resize(string $saveTo, ImageStyle $style): bool $this->resizeAuto($style->width, $style->height); } + $isSvg = $this->file->getExtension() === 'svg'; if ($this->driverIsLocal) { - $this->image->encode()->save($saveTo); + $isSvg + ? $this->image->toPng()->save($saveTo) + : $this->image->encode()->save($saveTo); } else { list($path, $name) = split_larupload_path($saveTo); @@ -86,7 +89,9 @@ public function resize(string $saveTo, ImageStyle $style): bool $tempName = time() . '-' . $name; $temp = "$tempDir/$tempName"; - $this->image->encode()->save($temp); + $isSvg + ? $this->image->toPng()->save($temp) + : $this->image->encode()->save($temp); Storage::disk($this->disk)->putFileAs($path, new File($temp), $name); From e62812478dbd9e6c8957357b86f4abbffe2c9aa6 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 09:34:29 +0330 Subject: [PATCH 11/15] fix: add center position to image crop process --- src/Storage/Image.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Storage/Image.php b/src/Storage/Image.php index 7571f7b..5aa6cb0 100755 --- a/src/Storage/Image.php +++ b/src/Storage/Image.php @@ -195,7 +195,11 @@ private function resizeAuto(int $width = null, int $height = null): void */ private function resizeCrop(int $width, int $height): void { - $this->image->crop($width, $height); + $this->image->crop( + width: $width, + height: $height, + position: 'center' + ); } /** From a50b946dce2e197c2728e583faa83c6592ecd433 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Wed, 20 Dec 2023 10:01:32 +0330 Subject: [PATCH 12/15] fix: use cover method to create cropped version of images --- src/Storage/Image.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Storage/Image.php b/src/Storage/Image.php index 5aa6cb0..36c0994 100755 --- a/src/Storage/Image.php +++ b/src/Storage/Image.php @@ -195,11 +195,7 @@ private function resizeAuto(int $width = null, int $height = null): void */ private function resizeCrop(int $width, int $height): void { - $this->image->crop( - width: $width, - height: $height, - position: 'center' - ); + $this->image->cover($width, $height); } /** From ea1217f2ea85720833acefb65f4e2f5ba331e766 Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Thu, 21 Dec 2023 16:28:17 +0330 Subject: [PATCH 13/15] fix: optimize gif image --- tests/Support/Data/image.gif | Bin 22643 -> 15713 bytes tests/Support/LaruploadTestConsts.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Support/Data/image.gif b/tests/Support/Data/image.gif index 68f48c2a06f52eae111e43df52d96db621cd5f8f..378a75570c1b7765ccb57e3622f3478ab9b055ce 100644 GIT binary patch literal 15713 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 literal 22643 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 150, 'height' => 189, 'mime_type' => 'image/gif', - 'color' => '#0a660b', + 'color' => '#086e09', 'name' => [ 'hash' => '710bf7618c3a942d5c3279ff0bb282c1.gif', ] From dec274582033b00664e0be55c02c1485ffeff58c Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Fri, 22 Dec 2023 00:08:55 +0330 Subject: [PATCH 14/15] refactor: guess svg extension based on getExtension and getClientOriginalExtension --- src/Storage/Image.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Storage/Image.php b/src/Storage/Image.php index 36c0994..dd3727b 100755 --- a/src/Storage/Image.php +++ b/src/Storage/Image.php @@ -75,7 +75,7 @@ public function resize(string $saveTo, ImageStyle $style): bool $this->resizeAuto($style->width, $style->height); } - $isSvg = $this->file->getExtension() === 'svg'; + $isSvg = $this->file->getExtension() === 'svg' || $this->file->getClientOriginalExtension() === 'svg'; if ($this->driverIsLocal) { $isSvg From ab1f14ebd906df5766fcfe0748d7a7d684429f8b Mon Sep 17 00:00:00 2001 From: mostafaznv Date: Fri, 22 Dec 2023 01:27:10 +0330 Subject: [PATCH 15/15] refactor: move save logic to save method --- src/Storage/Image.php | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Storage/Image.php b/src/Storage/Image.php index dd3727b..f8fcc13 100755 --- a/src/Storage/Image.php +++ b/src/Storage/Image.php @@ -75,12 +75,9 @@ public function resize(string $saveTo, ImageStyle $style): bool $this->resizeAuto($style->width, $style->height); } - $isSvg = $this->file->getExtension() === 'svg' || $this->file->getClientOriginalExtension() === 'svg'; if ($this->driverIsLocal) { - $isSvg - ? $this->image->toPng()->save($saveTo) - : $this->image->encode()->save($saveTo); + $this->save($saveTo); } else { list($path, $name) = split_larupload_path($saveTo); @@ -89,9 +86,7 @@ public function resize(string $saveTo, ImageStyle $style): bool $tempName = time() . '-' . $name; $temp = "$tempDir/$tempName"; - $isSvg - ? $this->image->toPng()->save($temp) - : $this->image->encode()->save($temp); + $this->save($temp); Storage::disk($this->disk)->putFileAs($path, new File($temp), $name); @@ -228,4 +223,19 @@ private function resizeExact(int $width, int $height): void { $this->image->resize($width, $height); } + + /** + * Save image file + * + * @param string $path + * @return void + */ + private function save(string $path): void + { + $isSvg = $this->file->getExtension() === 'svg' || $this->file->getClientOriginalExtension() === 'svg'; + + $isSvg + ? $this->image->toPng()->save($path) + : $this->image->encode()->save($path); + } }