From c475e9bfcfa8e0f7e8ac1022477968cacfd84fce Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 25 Oct 2026 12:36:13 +1100 Subject: [PATCH] [Feature] Changelog / Edit History (#13069) * Initial app scaffolding * Skeleton for AuditLogTable * Add UI table * Add audit history panel to admin center * Add auditing for models in the 'company' app * Gate API access of user staff status * Display item history in UI * Track 'attachment' history * Track 'parameter' changes * Audit support for "common" models * Track changed for "build" models * Track history for "order" models: - PurchaseOrder - SalesOrder - SalesOrderShipment - ReturnOrder Also track changes against LineItem and ExtraLineItem objects * Register custom admin class * Support Part history * BomItem changes * Fix for BulkCreateMixin * Tweak unit tests * Use Viewset * Adjust error code behavior * Setting to keep summary entries * Refactor helper for middlewares * Tweak unit tests * Fixes for ModelInformationDict * Track pricing changes * Add model type filter for auditlog table * Specify filter field type * Hide HistoryPanel if auding is disabled * add docs * Add "--summary" option to export_records task * Playwright tests * Track task responsible for data changes * Updated unit tests * record changes to global settings * Update docs * Ensure values are stringified * Fix for globalsetting * Patch unit test * Tweak playwright tests * playwright test fix * use main branch for demo data * Update CHANGELOG --- CHANGELOG.md | 4 + docs/docs/api/metadata.md | 1 + .../images/concepts/audit_admin_center.png | Bin 0 -> 208397 bytes .../images/concepts/audit_admin_settings.png | Bin 0 -> 106347 bytes .../assets/images/concepts/audit_filter.png | Bin 0 -> 193698 bytes .../images/concepts/audit_part_history.png | Bin 0 -> 205626 bytes .../images/concepts/audit_po_history.png | Bin 0 -> 171789 bytes .../images/concepts/audit_user_setting.png | Bin 0 -> 9228 bytes docs/docs/concepts/audit.md | 112 ++ docs/docs/settings/error_codes.md | 7 + docs/main.py | 29 + docs/mkdocs.yml | 1 + src/backend/InvenTree/InvenTree/api.py | 8 +- .../InvenTree/InvenTree/api_version.py | 8 +- src/backend/InvenTree/InvenTree/config.py | 35 + .../commands/export_audited_models.py | 83 ++ src/backend/InvenTree/InvenTree/metadata.py | 66 + src/backend/InvenTree/InvenTree/models.py | 104 +- src/backend/InvenTree/InvenTree/settings.py | 34 +- src/backend/InvenTree/InvenTree/tasks.py | 7 +- src/backend/InvenTree/InvenTree/urls.py | 2 + src/backend/InvenTree/audit/__init__.py | 5 + src/backend/InvenTree/audit/admin.py | 29 + src/backend/InvenTree/audit/api.py | 217 +++ src/backend/InvenTree/audit/apps.py | 21 + src/backend/InvenTree/audit/context.py | 165 +++ src/backend/InvenTree/audit/helpers.py | 256 ++++ src/backend/InvenTree/audit/middleware.py | 48 + .../audit/migrations/0001_initial.py | 171 +++ .../audit/migrations/0002_actor_username.py | 52 + .../InvenTree/audit/migrations/__init__.py | 0 src/backend/InvenTree/audit/models.py | 337 +++++ src/backend/InvenTree/audit/permissions.py | 73 + src/backend/InvenTree/audit/registry.py | 105 ++ src/backend/InvenTree/audit/serializers.py | 306 ++++ src/backend/InvenTree/audit/signals.py | 115 ++ src/backend/InvenTree/audit/tasks.py | 65 + src/backend/InvenTree/audit/tests.py | 1261 +++++++++++++++++ src/backend/InvenTree/build/models.py | 1 + src/backend/InvenTree/build/test_api.py | 2 +- src/backend/InvenTree/build/test_audit.py | 154 ++ src/backend/InvenTree/common/filters.py | 4 +- src/backend/InvenTree/common/models.py | 122 +- .../InvenTree/common/setting/system.py | 31 + src/backend/InvenTree/common/setting/user.py | 8 + src/backend/InvenTree/common/test_audit.py | 822 +++++++++++ src/backend/InvenTree/company/models.py | 61 +- src/backend/InvenTree/company/test_audit.py | 526 +++++++ src/backend/InvenTree/importer/models.py | 5 +- src/backend/InvenTree/importer/tests.py | 30 + src/backend/InvenTree/order/models.py | 98 +- src/backend/InvenTree/order/test_api.py | 6 +- src/backend/InvenTree/order/test_audit.py | 568 ++++++++ .../InvenTree/order/test_sales_order.py | 2 +- src/backend/InvenTree/part/models.py | 65 +- src/backend/InvenTree/part/test_audit.py | 350 +++++ src/backend/InvenTree/pricing/models.py | 33 +- src/backend/InvenTree/pricing/test_audit.py | 161 +++ src/backend/InvenTree/users/ruleset.py | 2 + src/backend/requirements-3.14.txt | 8 + src/backend/requirements.in | 1 + src/backend/requirements.txt | 6 + src/frontend/lib/enums/ApiEndpoints.tsx | 1 + src/frontend/lib/enums/ModelInformation.tsx | 7 - .../src/components/panels/HistoryPanel.tsx | 60 + src/frontend/src/hooks/UseFilter.tsx | 4 +- .../AdminCenter/AuditLogManagementPanel.tsx | 51 + .../Index/Settings/AdminCenter/Index.tsx | 12 + .../src/pages/Index/Settings/UserSettings.tsx | 1 + src/frontend/src/pages/build/BuildDetail.tsx | 13 +- .../src/pages/company/CompanyDetail.tsx | 12 +- .../pages/company/ManufacturerPartDetail.tsx | 12 +- .../src/pages/company/SupplierPartDetail.tsx | 12 +- .../src/pages/part/CategoryDetail.tsx | 15 +- src/frontend/src/pages/part/PartDetail.tsx | 13 +- .../pages/purchasing/PurchaseOrderDetail.tsx | 12 +- .../src/pages/sales/ReturnOrderDetail.tsx | 12 +- .../src/pages/sales/SalesOrderDetail.tsx | 12 +- .../pages/sales/SalesOrderShipmentDetail.tsx | 12 +- .../src/pages/stock/TransferOrderDetail.tsx | 12 +- .../src/tables/general/AuditLogTable.tsx | 569 ++++++++ src/frontend/tests/helpers.ts | 12 + src/frontend/tests/pages/pui_build.spec.ts | 8 +- src/frontend/tests/pages/pui_part.spec.ts | 5 +- .../tests/pages/pui_purchasing.spec.ts | 17 +- src/frontend/tests/pui_audit.spec.ts | 100 ++ src/frontend/tests/pui_permissions.spec.ts | 6 + src/frontend/tests/pui_plugins.spec.ts | 7 +- src/frontend/tests/pui_printing.spec.ts | 5 +- src/frontend/tests/pui_settings.spec.ts | 20 +- tasks.py | 40 + 91 files changed, 7753 insertions(+), 102 deletions(-) create mode 100644 docs/docs/assets/images/concepts/audit_admin_center.png create mode 100644 docs/docs/assets/images/concepts/audit_admin_settings.png create mode 100644 docs/docs/assets/images/concepts/audit_filter.png create mode 100644 docs/docs/assets/images/concepts/audit_part_history.png create mode 100644 docs/docs/assets/images/concepts/audit_po_history.png create mode 100644 docs/docs/assets/images/concepts/audit_user_setting.png create mode 100644 docs/docs/concepts/audit.md create mode 100644 src/backend/InvenTree/InvenTree/management/commands/export_audited_models.py create mode 100644 src/backend/InvenTree/audit/__init__.py create mode 100644 src/backend/InvenTree/audit/admin.py create mode 100644 src/backend/InvenTree/audit/api.py create mode 100644 src/backend/InvenTree/audit/apps.py create mode 100644 src/backend/InvenTree/audit/context.py create mode 100644 src/backend/InvenTree/audit/helpers.py create mode 100644 src/backend/InvenTree/audit/middleware.py create mode 100644 src/backend/InvenTree/audit/migrations/0001_initial.py create mode 100644 src/backend/InvenTree/audit/migrations/0002_actor_username.py create mode 100644 src/backend/InvenTree/audit/migrations/__init__.py create mode 100644 src/backend/InvenTree/audit/models.py create mode 100644 src/backend/InvenTree/audit/permissions.py create mode 100644 src/backend/InvenTree/audit/registry.py create mode 100644 src/backend/InvenTree/audit/serializers.py create mode 100644 src/backend/InvenTree/audit/signals.py create mode 100644 src/backend/InvenTree/audit/tasks.py create mode 100644 src/backend/InvenTree/audit/tests.py create mode 100644 src/backend/InvenTree/build/test_audit.py create mode 100644 src/backend/InvenTree/common/test_audit.py create mode 100644 src/backend/InvenTree/company/test_audit.py create mode 100644 src/backend/InvenTree/order/test_audit.py create mode 100644 src/backend/InvenTree/part/test_audit.py create mode 100644 src/backend/InvenTree/pricing/test_audit.py create mode 100644 src/frontend/src/components/panels/HistoryPanel.tsx create mode 100644 src/frontend/src/pages/Index/Settings/AdminCenter/AuditLogManagementPanel.tsx create mode 100644 src/frontend/src/tables/general/AuditLogTable.tsx create mode 100644 src/frontend/tests/pui_audit.spec.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 17d0b40e45..8db8b4469e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes +- [#13034](https://github.com/inventree/InvenTree/pull/13034) moves pricing models into a new dedicated "pricing" model, and provides new API endpoints for managing pricing separately from other models. + ### Added +- [#13069](https://github.com/inventree/InvenTree/pull/13069) Adds an audit log which tracks changes made to internal data and exposes read-only API endpoints (/api/audit/) for accessing the audit log. + ### Changed ### Removed diff --git a/docs/docs/api/metadata.md b/docs/docs/api/metadata.md index 792bc547e7..e7abcf9717 100644 --- a/docs/docs/api/metadata.md +++ b/docs/docs/api/metadata.md @@ -28,6 +28,7 @@ The `OPTIONS` endpoint provides the following information: | name | The human-readable name of the API endpoint | | description | Descriptive detail for the endpoint, extracted from the python docstring | | actions | Contains the available HTTP actions and field information (see below) | +| filters | For list endpoints, the available choices for any choice-based query filters (e.g. `model_type` for the audit log). Only filters with a fixed set of choices are listed - filters on related models are not | Specific details are provided on the available attributes of each field: diff --git a/docs/docs/assets/images/concepts/audit_admin_center.png b/docs/docs/assets/images/concepts/audit_admin_center.png new file mode 100644 index 0000000000000000000000000000000000000000..17410d98608b7a7ae058a9923e7db32d89f82629 GIT binary patch literal 208397 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%0A|?x05i#_8^ZITjPmSP>P;6vczjp4JW{+}E z{9d-&jFY|xfd9_85jS`D{oUP`hRJ$A%=SWGI@Bhup;!n&&C1Hk*$WqeaFEPvB(t|M zGcyTw`RiA%q-@K{%X`g4s~eI6q5@@V&$aLOf4?%VZfzqD8-a@V2PlzN!Q+7V%EnB4n$bv!*`mz; z&MHWl?gONBvcS&y04G3AUu`YfamyW<9otoQ<{-K#GBb>pS#nGFmQw3#Ab|Ht|wdcW74(N(2%nBWCZSg`5 zpF!A4^k8dHkC=i>)TArHWx`9HmWi3U{UH=)jVhrh3OdO~DxI?2KQ z8`J_Ap;`+%Vo9P0P{e?T6m#2{rt{vt|B@2Fy)%UKQ*ji2l+wewJ1~k75=57MLr*)p z(6S0QZa&JuEY9Zp+p<5ye9Xij4t)EG>nr=zhqL4mI6&x}8cUszRBdn`C&0DB&vV%R z28GaPb!TjBY=U3PWibBLUtwowxA+=`LPZ!r1MI|+B8VyRcU}7HuMD;9n0O4^8>Mn6 z`GGi?pmT=qp|i&9>?{-hwr1}7M=HA2(X#HgHkq&5C>`f2=}0C}H!qHk_$*?}h7H58 z*`v4q35a-qcYkzZZ&~E5S7}#XffK^_mak=h%$2zaW6mm+w|d7}#7DlIuM9s=ZJ^HQ z0X!_oBs@LhS+s3JNxxtzw+|&6?ZBVOni14HjU%?mF!h zMo}O|*eaxdzHk#EZC=uApz1suE7;-njPBIrMLjk+^J-2EZ`vEmk|&i%W(G58M9Ypa zAtL86y)l{{5E24mV?u;M(FF>M*l2e3c!7APuXiLxLgxMY5ZoqxS+(_fDVcNm#^?M@ z$bZ)U%t^c#yZwcNYfN)6jYVhv3DF7l5MAdR~I%2nh{6(Vhqm4IKduFg0kYK0nLGrrwJ6pwxy+|uJ_&y z6tsh>1;v5#8BtQZ*()ogCkfUl?6NWjN-p(&q_Sh8puYj)6RTqtDlaQWoEYR+I63ZK z${HTguvk<>VN5xkZ^*PFjO&%e1n^ao^6J5qi(_g$z4}(U)yENo0j!K@8qH~$C-IXb z`td$osZZ5)Q3+E6!`H@ia#C|W&HSv2+2!|Ar@dTM_hNfc*`?SK4-N!VmO96s)vBy) zpWH*4Wc{MtrOC`b3f(HN0>4{lxtZG@O6xTXO$=!7$<_#~VHry>%#B3RzlJY#bomJ9 zZEb7_yKSVFm4Ot&CB`&PwXFVa+-PD#0yJ6`KT;4-6Ybn%EM03lJittUe>o$8GHmwz(iPmvK#FYz(7#&Zt}=4|i8fd2dy zrqPiS=3BRrKKDjRAF{sTsjer8;n3{p!D42EDP+kV%c8fItVzi){Abf%P`brr=Kwuz zcclr6z;U|y9esU2wO(0bb$RcIAN1GluAQh3D`;tGRO^4JTRso`<-Z2n`X&lSaPhhP z>?6WL8VpP(IN^B2@I=#4pVF7_dFFq?oB3WO?k@k?}JF<%F)-4Q`xA9y)YvI zdFBMf#PVhm>2EVsFAegX29$Rs_CzZYoIfj}(gga1-1ns9HAFwt?92SM-}AYToJoAg z{ULtvws4ITJCCN1Q2{je@D;CY_K!JS%vtH0AK87)!5`^VfbMG@?)f1uoo&Xi)hQwS zeY}3cZN*CjTOR$n%gL!wz{c{y z%x1rf5DAfQc^Nj?dAZry0ev_$eUp` zTIv$ZamIdSIlANhQ&=II_#weOv$rCb=#8a5uS8}Rl7+7b$0N~MwND=WVM2_mw0O9j z_(vHiZBiALKcxm`vb)XCCjmeXDb9Ch_Z#HA5eM?FED zMqJO5HiYuFfbR6OTjJWyRh(#q_4Q%%p4vjI)?3G}GwR$X4nMS;YOk2FnhASo1&5{s znTUyB$K|`B`9r^)f30Kux>IRM<@!wWeL__@HTy?K``AQzf6fp0%X?gTKj17U(~~zE z_pHU%smUU0A;=#$F5Q(#xL~*Q7ljU zpZAO``M1Wkp)pOT*YZELt})#F7p@x_Q?k*U-t{F$8n&B1dSzbP+-;O`?JqU=x~%33TMOP+aofpe-)}CH z)OSj(4AtWt&w8mfp)jugK&6x}XwN|H-B^Fc2Aa)CXPib`TSu{qNjG9Lsp6gOrsG)M zj$+HQa^nrE0mliCyU3k7i^S6l?WW$}gFhrDPnf@|hYwR01zftVG&;A_ef`Ovtq4aj z+2xj8Tv@a<%M`L@V-)4hejAG!J=AvECk|f7Zu@+wbMQf$lYk=qfvjM2a!rEn=W?gw zk&vxy;SN1&W--2?YepEhl1h;+tBK_$qvs!mJlS{{<+W17I>mMnxi;B+2gwTAeEo{w zu-1Dbd(l|xL*v%D_$HfSY8qQs9x+L+k0k~*=I2KQHtv!nph|n?4pP64&3qi)ek^Se zZQpgaYX7KmExyv*fbdrY{mx%RV&zC3nR`Nw{qp7hA03iPPu`8iu5CRHGq4F3bKt#` z_n~SFdS!ma{?lpG(}uuoB@Rp=d2iszxz-_k`MQKz7b;_D)7WWDZ*|VZ#KLaPaJkiC zoj1EYKk`?4z$d9qELz+aV;hApf87zSWo?b6Q){W8Rkn@zq(Ved4CiTmHi4#mI@~p{SR4ZH<=^e*trcC>B**tbK zdoD5WM({g{*^q@>F)UvE5BZ6T50O>?uETsXLH%ZECC$#Fnaw_M=T$iaj-*iiRuQ@ zHB~_Tsfp*V{^O=!e*8>};@*|Pqe9_|sQfgZY_*CC(+iIFyVlM>dWsjE*hV?V!gzhG zHd^j?p*dwMDWlcOKNz7yNH~{9vJy#?TX&tL^`E#R{$LKQRI`+-o;Q4co#kM-#FaQ$ zx%g9OLbSBamXkHI-FT;PlV3!IOS?0QM6FE&eekc!bMC+t6Tb0ddWC)T?o&r>n}A*| zP9J%Z{vO9tGf?vKO7n39;={85UZ?9-}F3#WXGI&X8 zZ)231`gy68_6g0-=XSj-qFFJ;NA^+=<~up!uDLS)Op&&Ws5#oIX~uI4$v$CQ$O34Z zUH;ovjukzIIz`An zueTw6wR=W6#VN)Eu4Ty*cEzR2wv2ZVIXt2qNu|{tD4iV?Owas;#ZEirJAU~I&Bx~PT(vM5Ev=-KyB+e zBBr;Z!i$Gamf~?Ibxq>3761F4bZPt;rnPoF#%9|tqKmAW#C`nvRIRGNCMNCctzvPX z`n0D`)aoX1waj!UR|elmr86EaeQA~NOaixH6Y~OXfd{c*swt{1<0IF3EQco%((_J( z&}|jXD)vW-@553LCvKY1DF%MkCC5>X=n{6y$Pbn!*S_m1sFY7^6VP2DKPxOGck~U@ z$3L<7=PyXim1;(k=XH>r7c#3#(J*UouAbMsZ0B2>^7=+Wxt%Nod&@IH3i7zSJ}$Ys z<5K_Xv_4-_D-8GZC0?Auj#~7w5Gbbm{PY;XEX7g!ggQq*8*E&!ZL~{EM<+*PCk%YV zh~^`QzZY<9eQapx^2r}-eM;BT#Au2WC8xNqZlZe-X{@%HD6T8@?U|`7Cnl`f$w%l*~?HpV-A_5y7t2*+)k~t zQNbR492`*t;Nj_(bAEmQKOr-c+Do&aSdlIEtNxoui8qQmN8BFjEqyRPPi-LU8PRo5 zRe)Z4ZpzHeAa`h(jdO8`Kl?Crv8<@8s*G{Z5>+&i7>})89PDJt-LTP47IEyQY4HM04NJ2* zG7h8;xKD?Zr!;$EyVgpB+!m)VG9^G8XkT$QKuoC2l zEf7@O6Ko9Bke-hB_9$-4HN^#MA%}mQB@e&hwlI4Y_10=Z9|3xT2o^I=_NTu+So21D zgLxTZ`*F9iTwJm%7fXt}5Vf@Gt2`5#ADMluDS8ftyCN>p{+jF&5fLb-?4d5rI0gr; z!NJgsXwl7AbW<`{QRai+6v(wp=otm>0xp+cLPTUf*mHL{CjEUQokhgVWW@&v z1T`Cpwa9<=Fr&3dKM!O)Q~5ZZ`14y;;^FLJrrt66F+$H|xF(r`QE0>>Xv$$#dfQ>U zZTeOE)|9VTO)j`t;_`&`FS1u9@7%sm|NIvXAdHXE(<|yAOu{Z#D#dfJG_WC_di!&y zc1%>%C(c(Ax;UZ#TcPV)}&bqYJ~XFL`O_-c%FesG|4`?qLLYyMd$3IdVNvm}o<#`2}E?ph z0ltt7)z{Y(T)h6>>gJV=J97@d9_qWMe%f^Q<=avmz|cud6133;=<};DvBN!zU(cGv z2%-kD^?CmdzFNhA-3dBMA}%XYSX02NM1$VGZJE@*`G1F}U+hUMD3lf#7Z_@JhHa?A$<%9D_~n^=gttR$q? z0g9-WR1OSkG%)6N68H_8E)KIVz|Q^WXE(oXt_Sts{G@;w8@`N-) zEhxj`(OvO#t~>u}3h4Q=gUShT2Y^G)cGcqz@5W=|F z5-1>w09_Adp$-DKF4k9m@D8CYle) zRqg#1(%%D047eJ68x;)v00~@UBcsgX2M-unffp_~Uh>Ng|g zIic`#X_tH9ol%d31uX_FLC8{u>twtJh$sWl#oWgYLhev>U!hwDYeWQ`ChRJUAdA!lMsl)mv>{mWSxC3`c09*0Kw^ zzDz~BIzm4H6b%j`TZiM$7@4b_7EmIq#NLw&WAh{=&`?RB6|!$Ae+EX0A@mPbQBlz< zG39~w7}%lms;Y@%;avB7KqN+c#H99usxYf|d4Zh8U8+`%v`2|flV8sdvrj2Q-vODf zpn3oNAGqhwpM$yb=4mVBFFQk*;^8)*AD;B|alaF`l$9g&?@P-T^ULUFDi|6Y&w6I! z3rk8=*{{Eok(PdXlvi`dasC^>#lVwxsH3ne>HkCmqGizaEHL%yPMwlxcb9WrJ*xx=ccu^tDuqr2g}4FD&r|ntKq7G z@oGi?p{s|-M7iBM~WZ` z+6AiataDJ30(Lgaen!T{We3JA(ev~3YbC?fm5E|o9QfC3^*8nVF2T$p2N2-v<+6zM z;J+{6gmxabf)nasTq>qMx>}YjH2nLlD*jW8$*V~RIXfg0DRa}}`E&aFi_pjflDvdI z$GcOZ0Ng_Fik4OQ%?&WH44`;JZEpHwNAA-UDHvx_U0n^>uaQ3ow1;xypo;-n>6n?? z)YMZOF%52Qe?|TY3HwqM%Rp;uCTI)7q`V?k4Gj&D$PDs=@o1s6Vr+J6*ud^YkuoTx z0G;!W6?Cf1sq1-dO@&Idky}|>Zm(cL64;>8_GuCLvRasXgBvYFn|OeWfRY%^jT;OW z2=!|~lXWnfSSd?}rd1dgP<}nfYX^Vz(d~5Po?U8*KS<<}qal2mBsx zyR9WrSLXOEV#<{10&@L$Ba|Hz-;azrtcOc5B@?%?sej$TyWIHY%|#_QtQ>J-Zl~^? z?EM=*zwS7`bfu3E+6?Al`5ObS!Kl7F&`Ah>7ts9_m}UX3JMV;{RieJFl!02O%sP=F z3&uRga+aF)N%3f}bHL<{PQi(bL`0RY>pz<5d^r3U;e@P?H$cTv*LBhtTq`Fp?*`Z- zSuqGs3TX{g*iA{1l7>RZh_My|Q42t*HMY{oBKEu5wh24|S&}#OFzQ_gYsW#GYxGU6 zPt$mmEJDP%;~mVGdO{)~F0MOp^GjYsAL&qc!m`Bnjc(Oqq#I^gC_GbCpgvnMy`t}C zp9`&#F)NxwL91%%h`Kj!>@<1#PN~mjmpfeyWy-MfffD^3(I~07G*L3p%LUK4y*hCW zudqB+I0cq#X=MfeIgdo?L6Py^in-6U&?4l9N`*AQ)xS1yCh8 zxkb>J2a##-9j0-gV=qmdmQ9UX!L$3rYJ|d!+nocCi&QoJ?LOp%zfL79Xd5U-LE%)u z^xLzegFW8ER_5f6cz)SSYTV#c%=(!8Rp`EP_24?<_To~TbhbyhX=o%gKa z@$nQx8rFkXrRZtspJc;q_z;stS`lXcocjjaox6fJ5Q@&cB)MYVTzri30#3)BrWZAH zrB0)oIzFkCcDvnFj5+u>nj0I_JA=^kqg!IyBW40zdfD7{BEu_JKcOp;gnD$0-3b*5 zTa&4(grgHH1|nwniUC?)}JF(Z$|#2lamqm&}3hgY29Hg zv_jTH*t}eX>usTn=+^6G(;5TYUBw$$Q|2CeJsOGrmXmQW(J%0`>*e;BiB^H`*gbdS z#_i2Z_}(e9Xtp#?4^*)xn%UrRe6uZ$6HT>}aq4MB6QS(Q^ic+0?pkqpLV~4=I$F| z=)0LW3!c>adur+up4VF|iQH2qyN~Vp<&kc0nc%k=bGZOYQ#q-T7!Lh~8LmrI)YNH6 z&FoL(JMMnw7u&~u9C2x3IfAt^;~t_aMI%4N$)B!Q9y0TdA0g;AvS%&i*3bpG=uYb6n;g*9K`U`3_JRA`%Xz|fbK_jk?oM}|twR4QO{ zjp~bo4;Z$pOO57Bh@vRbQg5~Pu+9;kW?nyM6wjelgHphDo-c+7C2X`ldohkhcj(8` zg~4MdwcmM{daYqa(7bH(-?{M ztXDpbjCgR{5zQfeXqTD-tSGC6eH}Lay)9dU;j|iN-r9Z6M|+QFPo+NA?rNgFy;jF- z26HrT_t6MDYLwf4oGxusY0;J%l;Ir(N03l1OgPt7uCKx^{(h zx-bv)NNJJBT)t7OH7ds>CBH12Wrd3>E+!`M3o?$q>MCt!v}vhP;%HTWK|CsSIpR%r z?0*i&i}YTIY4Mv2#V{ji3Y1&gaqPX^XBx>b;*XT>;XWi>^(n4OM{4=uiXA#Hx z!+9#P&3xIhRXVi@2mDt(rpCYTn)96Vl2y%7;0*e}l+MNt0uc=o8=8Fy{daQR z*3z0B-?VHeSwA$z9IkJd|1=8n9#KNwpG6`w){DC8x4PJfDzsidGNt_09hW2w&2rQ{ z`VA2F2QykMVY18MhK0`E&uM8jyFUWkR2sE^AnV3bO<3@X#?oz+ zB)G(#NzHM-_|)uLUyh5z*|Ug}0mDE|bMd7)gYYPO{J!bus?=3E*3;Z`?JCth+wWqd z+1FVVsU0$Ph~K>zYc6ImXPYJvdoG8%%2lNU@W~NG~YM< zX`DPFcp%%7(II%sXq3MszEIVJ@$OPu4{KVW8G|1uF1zAtPTvttvw432kqczq&iY)>rL&T*J4P0C{_1ITNw8-OR4ag2XIRKY2 zGG+@QA%7(@p{s^}BY@_Tzf}2==0H<_K|jWh5a}b)9ynOU;&;05Vd(3&8~%j9u>c+7 zvHIG`IGE-Y@Q1vG@v%&bnY^sDx=P=c*YxxDN`z$9@YVI+dqU=(#F{}K^9uX=5mNBN=k})D}=SGC5F243(`8;Tgnqd7LPOqN;Nqxj`jDcien!XkwvcZ zf8SbNdUq(+gow1NwpzbMt}^aos)T8)Z~TGOK+wC$N5&&mBplaRUGazG6>*(`G|Qf% z`~w42>dc+^S2xBIwx+E3r%|Ubu_xnjtfy^~{_EDeakWnLobT&aFSz5*htBy(Fr2?& zgtB^eh@kWMmBCgp2nh{$b#;Bcm7ZeE`sU2RTn93)a_(VFV9Lf}RY(lE%)_8<`wSR` z3GnPMAZdftj&m)!??e37V&Z~e%3T|;=;@U#Lc(sD?*6OW{UsL9a!()U<}vUAkA;j5 zInb`{Psv7!2TSH&6%n~1@8%c}7YFAiayI_%b-w~1si#`|+Gvj~D)aQ&?r;m`+Wp1} zT2y{3Bc6Fi{y%t#|NkHy4mYBpjgm{V$PfroJIlins9_wWpnCBeeb^=a1{lQ+XN)-tW(bjxkjSin3znGV>xd3GMkkGg+^gePPEGe`c zE&^!`7$H_B2O`xr5COt8W?tM)Exj6dC&*#1zW9xC&ElR0>s~GpFgwx+L{eHAmk0^>&1HL=}jbXe`<& z;S2CN36YU1#m1di`EEDgvdb05raUJ7k6FGrezUn5Bs-Xwo@T=Gg0dJ@$c0niwe$XY zi7(2=&PwXd(e3W8E-o!RfCex?@JifufMs@8u<|CE+_j*`HWSVPIwSC`@B?YHJ9PQW znLuQXgB(iSVOH+r1784!?mho{4(1e@!CVIlekyrbVoSg)F%7XqVgO4t&z<6x;1QK641xUe=kNd41fRCh2R@P$^uvr zMHw0zf~}B+y#5E|3n;i>TUuJ+ibbzCQ3I_?WhWiFSGCHlqZ46@@7v;H2OxLC9%twM z#~@y$`x>I40k5+19_tIrz+lB{N1W98;~zvx^m~XZguKpbh(&V{rNj6?OhuhVD3ls4 ze_k{T;!{0@63HSi3K7kqe{|hMx`1WR48&T1=qLcqm;mwA{Ol50`I}o5LvBo0p)gB!`(yN^A+TMm)Wl4uW0=XHiYwf1qR6en{FM3#b3YkSRAejL1 zOu?9A99W)bHw=&swiUL>7#;$g0wXb3=zI<)mzG8$MTKRN?v9GOT9GW~QEG@9cFu(3 z^f;7Or_?g;_17W^GIQt>hRzeJ82s_!st?(%_Hl2RIv!DxuUUMW4Smmyh)KGSApXgm zuiW%P;)MDK>3hZ)!TIw>7Tg*I-w(;38pt?(@!NvT%hlD@6MBpx{fED~e%Cb2F6J&G zQ+Wo^C?^*e8}L6T=^+5H{6(r4DH!pvR?xC66U9Q`It#K*m>Yb|3@A`&x{pA_>?{31 z`uk(-s)QU5cGqE|j9kLKLfsm7U0vOxZ2Mi94;rHhP)h8RO&9|j`Bym@0We7;`qgw~ zu*V?NaH7xxC?^cIE;j6h1y`PHYHE@}uunRHp9Q=Dk)uJcS+J}DrsA_ZNf5`rzIoQ! z47gvgW{Cn;NJxfe487sxsAVIf`z)4W5|SUd0U;3)aMH!v74`%qH%{gnocv7x0}cW3 zRK&$$z0z&LaaYO2>mtsUrJ5%wEFKtGtfYz&0P$F4)k{2rrwl3vFt4w|!DNbbo3T({ zUS7=Z$LswQ5g9U>tUhaNYkRtD*V3jtp!fbN4NY!{XbsSK!*4(CZ+FJxV1jnMkFp?J zYbJCGp35{BG>a8eZ=cewuy6eO^#QMnQw&2XFg+JH!N*eHHT@3L$;6{_D!_p+qOht> z_Cx_6AHHh%25j5#=&JJaCxJX!wdsK0wK&TspN|s<%zXW0VNkyQJp&<$)3gfiB5im< zbDfb1pJSc$J}j0CKu+TkE-WApA4M1W^Y!)h`#F?nR#x&9U|<0jNJ=L%3<;_=`*DQ@ zFKTLPHZnxT#AaB?xwJE`n{S-Riopu*ENcRt4tHGQzGZGkN=)3|(E)Ri`B%ol?_j(l zZw|G$w>vV@($X%z=0G_uA^O$?@7(!zZyRy_tf_Qb73dLoz;r9}VI_C>$_<-aw{96$ zeV#F8jO5qZn@Zq0-J0)cjtMUQfl4O}X~OOVp<-BLIK%N>_KuF#RmYIa!2BQ83VWli z2O6ZZw;FeMU8f{lg)xNE4~!5X!(WV(1apZVTkDnO28&>4WtILhNCC1x-q?hMgcUdK z69thdH-NW42O|*sCh}x+0LS+^Pu)Xk$_#+ylqn<+X-!4ps_I?azG(5gS9=R|HoG-3r? zb-dBeUGx$7-je|Po9mp%3>6v}1(My{UK-@SdGi@WL=aR&92TNbUUfu_hZhM6HH(dd z4KsHvc6N4R>m0v*xPKzF1gK{4wd?kIpqK#o)yinu>WO|6v<84j2?FJu*^W3!xaWro zQ$V{7FgUnyR+g6!MlA9vEe1ob^XP--4Vi5yTt>IB0QsL(MItC0Vkac7vt=~DZ$0hkVrSiRgrb0@hls?=n$+sjNdwhH;(1j z^9Jh&?T9c3Mx1&0If&|*E}Te3G-!(5Qdb{@OWDoU^+`X338N5U$aGf~BO8_e(%6^) zTWXiCb^H05VI*Qr0iu@OwMpI`kY^i%x{u))Oh5T7o2yl(AizAA1;2)P7ko8u=V^h_ zwbaPStPD3U;WD{#CB6HNHmR(%eB^t%8xmd!Dwky;7MiPd2dSUUeD?UJ8(kDobdIWj z%2%Mg*IP1dxDQYQqQU}_Zld{K_6Tdz(FjQr=lzQ?N9M5zW%4^S?P;^rR_C;Qf-sgl zr?jwEHK^5vy;b?M6V3*NC>hY5(xeIEaiE(t2n`d!1s1R#Gd@$L3)(5m74L_49 zvbU(+r{9-Nhz2^@f6Tr`tobY#B7feeTazrbL#Lc$+4!}bI*0n_9G})t;`@^&AD;_$ z>s8;dUHK#j+E$n5G0`{9DAt|T&CUWJprK*vO{+Iqw?0%D$^E!-Ok~~Bu9OO|u&~ds z9sM|s#FU@rjK#>U(L~<4k$sx|r8_8_*}Z{(BuE9967mlsSGldnuc+l$E~WO&(2nsj zs^JIT6{mMI3gpfm;rxuQ@`e2e-;4c8`uc$5%?D@}7>1w?P6kJzCEQT>ZCp0V!|1mT zfVqM<0pAM|H0)2_MoBoseuMuNuz_8;ws(X6!!-U*Suj_3xz!xH+mn6rP|2%_>=RL( zIuER)*`u^j&t)}sb884f1@iQ?{@8er+;W=x@@@w$%zXuwO+F7e3#$Zy9-WAr>xzAE z*Q*|CXQ}b>I060T3c(9kslRb5<}n}F+o+c<`zsR!%b30o&&2De`gBpy@ucpy)}511 zcn1DY{^g637rxnR4uPX zZ-{&DLL!yil!JhnbuuMXoQlu51C-cKQ>wKnVl*YaP>!7AQh(RoY<{*$_07HQ+^dpV z9_+Vdc=(vRb;lg$U;led3*?mVC^8iZ?uneFD)5E&X*cv1ma076+p=%}S37Vkygp!b z7%BIj+H==1A%cK}HZ&T)pr^WP&ure{iWJ@*zk#BMePT(?Q}`u zIf$?GW(Mr{gph2C%npQxl*DcoOz#w)KHGU}a={ zM5c9`0*fA=^y2Se*wk5&LwIj5kN`lYeLC71X}*|v9IcQp;nt)sGDyRK0cN$Ca!L@8;MPHBr00cj+qTN(r<1*B7Hk?uxH zkZx(|?(Y27z2o`b=RN0-bH-rou?GV8FRp7{Yt1>=T&&d!^=jpkwEd#M5{P~rr4D1YHFp;)LQvSz+ zw=%~$zlLRuY7TcsLkb3FB{#l%sIFvon-JM%X#R~KY`^jg9=uBW(^5VCq1wsCiSd-$ zx9}PEc%a`Qn`&o%#^u8?WOH-D2~9RlECnOu(y{RCBtI=A!6(nDqUu%t%gH{itJ{Ya z$4&3|qEmI}m|2)V5g%r~)Y3-UcXn)AssAMD_JdXXmifzapZM&KljkZQ#4He&h?lRj zUo|(Yc^J_9fA|d3AMOi^r7E01KaG5#`l8`ct`u#wp3!U&4hstx&hmI!=F+e12KpNW zFnAPq*q(=&zjq~KSeVbHM+|if`+a`+8|d%?^Z2SSdL{lKy=^4F?rDB3t89t&y{tC4po?gW3u7Ia*HF;_KcFd8$$`~Bx+ zZv0R+5t-Yu#Cr!(91B?Eu)B8u-?=dJPm;Y7RPubj@Vb?~+Cd$}<%O>4aTk))=s0vn7XfvD z?c$O#b-X?mFLByJAv~*O>xorv?jg0@cUv>z>0b%(!*4lP{Q5^EclqbJFi>D>tD!M649+|niu z91g-!?DcgAPg%l7CMQI_#uiMuR|vmp<*xRhXsg7;L=9~dac%OTzNqSTkJF4F{^*5!!n$u6!o!zQ5L`6M=o^N}8E|!bV%8n~F8?D*+R^$ z$&$PQ&#A5L0e%|vYt!J6u&RfD8#EzYSU-8*zob39xU3T$5>v9Y?Y}lt-v8*~+$;eS z8;bW-0ONXYzKi;gw=;WSbs@F(p)6_oHfr$KsK`HKBTwYoob35E>%E!qx6;2EjMo^} zr3feUSoll?MojR!FKX!91@1V@AIoK`Xi^QcYLO(wrPpXDn&k&U%!q7BO>g{Nm$Ch6 zM$E`puK9tJ;c#*coIOlExc_R_<|Cw1SEh>B^4w5y?(pG3rZQgCm8)9%vbQv3Ic7xU zQf)`Khc%e4RClYg%%?Q_nZ#{J>Se24)i$kLyaI#S3g9y$oR|BuLEAyuVfi>VhdI}` z+O&pT3Buox8vTBQ-`y8QkPhh%GDS`}9M9(=wVXdcPyJ$1cyIE-gG@MNpUCwvyy~sd z>T1Wh3|Hgcj}aE35xnO%_G9|Uhq%rtF%c_yl}7}X<&UFc8&>l<4-*qki=AA8n|WJR zyzxr8-f~=|Mud@6tJL~bz5eXuPc_fW)q0X~QD$*~ap4gI{C%vFt zpQS2vM2sc4O4=?Qll-5a17bcMyT4n1>cv5A#!~Lm9pi~= z>`4ckwxBM)+FV|LA)j%>M26<4@1&)F1O86b^aqb^8Nia|ayAm8UsGx8t;%CHNy_AR z|MW{$TG`2kWB!a}EC=_=k{0 z>kYtv0pR@30qiOV{eQHUWT`Nmi*G&aUxp?^<0Xu%2h`Oph=@s95Mar=Ze)pnJ6rzw z#69rA_z#~CHMj{Uc_q)p_1{sbJ;;Rr=_V~fBjnX5yQ0p0tYpoMHR5f>Lnu-+^HN=Ewr=Z}0+Z7Tg!Zs{>! ziL*FAKaivP$i51YOAsQG3%fd6Sy>h8{vs?cf7_SBsFd}jJxAFS7X&K|DtY4o?)aJR z#i<$oqfqVf`Tp&Tp?h;FG|VBm2aZpi+>82~sR$VvCRyGo``x?K08b)%%b~9mnB$`v zU#hIpO;9SH15*7=jUViH!HxhrK1In}K2wQ+i9R5NT;^kT2#BkGA7QBr_&d!FXt#6( zNJ9AXSnu}j+r~JUn0NT?GR#tdi3W}%)YvUxU|;~i2N&R~@$m495)e`}Kop^m%d7(c zyM4^oxO|ODUDueHm}9^no_@(4G!d|0<+K>*Wn;@ny)z83*aE}l`Cbn|fe9iWlVCUw z^Q^ZQjKW3_#EDvF#Nc7PW9R~{YDY2Yn`}M zGWCix56EMq6H86uF86?+i7$&_QCB9neR%YSmWC!rv-%LQiaT5;5!KbzC28NkA8k#E zFf*?s)J8G=!^7oJ6o!SgGpnnsKNW*F#{!C>&9tUc zgfoVoK z*9EVkEek>7_`e?{diH|}-5A<7;X($1>;tp};5p4P+LGMYg|mp&XFb~lV%Ome1wBC8 zfU!};Y*aH)2J;4hzkJQk*yzvWEo)-|qy-oPoL~{=tABu{pvZ8UZ9-SAoUa6QCfv7( z1^o@J4YXUjZ(EyB{-^}x`XLhyP1@^1T?8EUr!03pmuA4Gbv2!~B+?g{9fi*L(_c@t zT!Y%mQ>VFfupOZxdURV3>Dr?vX@c!ntu5syKs$i^ZiQ`&idjT@Sok_Tg(-^y0At(4 zfst7q$b?~9{70}d!`z7TZ;iD03^+zZ`c=*&=!E2usYKFn6Yx<$ z2*EO!;~Rlj9Ov;*Yw9&Yz1>H7nnn6g!AP5vZa&#sFz2IxGs2eS`E%P3zN0@ko(K8E zG6qei08oMDg@s^`YDw6*Jiw}1)k+MCW3cgx1yajgRYgU`{vI>)ixYuyPLL>u=4!GO zTfsJ8Ubc8WQ2ehh;B9GOPH0n3b7|Wmu(3hXJZ`6Uzh9y|gbS*qi~v*iWYf&jG9P;} z@}QNjXz;MB&AN?zbFvAD2SkKiDW3l+EG!IkU*y|=s%B80E-Za(25Jr98mHgHP7Fby zQH)+08F@`x{#02VZVY6_9s2+fQczITooxy*F=8^ ze`bm=Ln)FSEe9?Sl(S|#v%mh0;q-k$(i>p618#*mfP(o*0G4dt*;sza^Z0TvEFGR68ZrC^`c3*TMT1qrx{TncD&}9 z-VC^j6BQFv(I^3=02~1)Fu#G(XM~f6MjrrG;N1WhtFT*n*_R^uZDBLAqN?gY8ciAE zDd0ok=+ZYzyMS#BTCbX%L%^NlgxyZTS3zF{j>zTtc{mTJKcM0~!#w>PdJP| z>Iu8PeyFON2HZ8^be&}ia&kRjk^=Z+3y8@hgW9_-M~l8e7zX5(5=b{)QcQ$o40y{{ zYO{%|gWU2-3>Z~T$h*{HunOlILU{}P4d`+gtZ3%Vf2Rli!$C}=xA*9x;lN0k;_BN} zWnyAFI!PR8h;t3>glR=sv}=C|Ml2(!9SBzc7}p*F?T651s?E;MZc?tDf=n}lNo5nx zxib+Lqw6G+1U@@3@akq-HRfZE5Zr=->W0lt<#jN^+1!-9Ng!z^dGlN7X7yP@^{+kQ z_Qsp8S0e5m;C0?cV5<+Oud13_H^e}=kZq$bipOTT z0R6*zUhGMPBg5VEaeXrgxC?=?fOCiS?%n#)QL+>hSP-^`lRzo8w_}Kzz-xr_<@0Y? z%t4w@YRs->WCLON_?4)rXvIhPwOz*_H#DPfE*C#R9+j7u&wv;T>k=Mv7w%2b|M9hh zI#WQ0rhnb$4V)zb0T_FqbfVkBx*y9Xo;MO)@p?9-C`~iVV8v=<>0VOw;Y*@9qhcWK z6QX(D^)r(ne2gnW{V{;fivj=qS0WPS>qPV|4)IIo1glxCc-!BYP6t+8=1gqIe#Bpyb;95-WRoh;nD>A?&0c@!>ty;D)+q*vfjUj)-*j^Y-y*wqM3_LF?PP_bQ!R4e-c& z2AY~Aq!d{|E*{5iPQJD|R=NgqU1)uX(e2uD!2pY${%m<5g$OZt;hIIy_sphhYt%|j zPESv(s;YqWZ^_dqLx(3Nf>VNBqDD(aP+XwMlc!zRjkv?h$2?d0dprwjUJR?PZEcXf zhiM9_ zOvj)fL0B&FxWalb$(aK23;?Z!mX(J%g2?D_qlSpL<&gk~SF#VBuB-|v5|DViy1Ewp z0S?y(@kssdbtkUtTuMI4qxGYbR#H0nTl5kT5CC&yLLc8H6?EJN7R72Ab`G5H#f62Q z_`aJBzBp9Vst_80n)*r2##RTc7;l-y#OnO~$J(1^Q<2X8UO>NVbqp$qYH5jz)<$KE zKQkfU%O0)s5JAiXZ$5+ssoxh7AwWS2-6UWL1*8^murqk-s;V=+@VrNR*uMo)Pj@w( zDW<<5gP|ml%Rv5Ku;b|DMBNF?12QGUH*Y+}9T#F!8mSyHuGNW-)1LQ2CQVoQt@5%K zPScTVaL$3%Er_>e<>aUy83uZKih{&NOkAAI>n>Uf!-qEm5Q9O2qzUd)kh}GofW;7d zMKE;@s6`6iu+O@KycN>uwUw3RT}jDnJ%NFNpb@{DR#nB{JV(1XF%oc}fdMTpzqZyL z2q0*28WD#AK$=Axs5*#~NgVHW;9>cQ+`A*<{sTzjRXa|U1i`jbwLM6QfWfP0V9Rph zB<$1Bhquv`#KsQNAVTbAk(4i?graazfZB(Hn_KGSca4ifS+Ub%CmA8{GTr{h9};s- zpSzc|moHHF^2KdfM9**BtrOdXLF>}y0Yf6L&`nfiI?Reznqdd~|5G}j;Mu`ii+iaM z9NtgLVW~lrNO@7w?pUcQYz{#|!QKWPKW*QduQKRdL_@iG=_Zy&UFRluhf{Vw%BsPM z4Eanz0_7UcU_NmAuq5)dYWO*o1+9OeFZY!i|3;C9?jiwj;Wty5!JYgV5fK4JnCLr+ zVhCt@+bXYK={KdY5K7tF+Jg27%8bVX;d-+o&E+TykQY7RQ z$Ax+=+-4)VJ-1jiIbD+{5gT4Y!G|lshcOBK$Z~L+hZUstba435*1}_BVOe<$Wc4a3 z$iRtvI|1YsAkq?E#p4B)2CQRG6R#6B>!dg-^Bc5Bzy(1ohqv70$Ja~<1`sVD85JB- zt$yA*X32xBuM4hS;s%2@3|W&`71QL-N9ll!AvUcaPYB%6y+W?d*aK4tJtyGfFT@`S z{8F%=A1;PB6q?fCuhl%?r^BWc^wae{QDc2Wh>HTgHHwNc0Atq_+>bR5#u=%K=#A$^Bw}u4jiVx~T>) z(>yf<-uB+z59sRbOn(u3BN4il*efq;N6!4uwpLdBJ&8H}p#KOoCAMG$)w&E7=3n6^ z<%N#U-7*+K)}J6HCDmUIJP)arq|&Fc>s&Vk2m@x6FpuqFNkHg#*qW47x`YabPA0B^ z2=ycWKsOGRu$`SY2! zNtus|y*BUTaxyd9AQ1bBHl!pcd)lC=^YHNO-?g*1N6Zp{6B80&@Y^9_(@HWWBPVZ< zdd|VY!5d)6E{-cv_`z@(zlqJ~A^}^*DMN(zS;S+d)6)af~y84+J^^lonVqaXW1*jScr<9#6r(Iu|eglxw~KkzvG z>C0_FJW$}gC16lkCg`c$ z;Yty41GYihAijjP_g_x~NygO-g0ey%x8Un)Yr6n%EX;nRZCf7C zt7oa$hQ)O1{lf9i+;TGTc!kwP`=sAQw?gd;E~JbJ2?>k%&{SL3j=ZVp_6`h-sPg)Q zXyJw_3y5(bJEPuM+1Lnr7De$5slB~DN4#qL2sEF2dw)PBP+55bP?Bo61pY`!hOnbx zLP?!I2^Ny^6?DuL#<6|M%zU7R9P+l$vBKl(682x8Fef*+``KY`+9)I^98xkeL3p<_ zA`kVAbfDw(O|{7&Bj$WkftVAwYQf#a{c&!2(H z1p=J1ii%}#QUg>X;o;%XVJbhT+ZoQ~N=Jx6>p6-dG`2Hh^7bt>4;FLdKFPZ%6?8e_ z7UnRW#JJO=RjcPt0mgq9`zr)ebw=*rAQbxh`}d;8=Ho;wZSO1#2?~;Po1xK03-PFb z4n7$xcRk*wu3np)`(O@{HYTOV(hY+zbX@(^4G+?bcu?4po2)}MM0?8>R%AZZ$FRXp zat8g$@9d&VgoElNbyjC-@EOmf4Jev^y5_EVHhsY!&|)Zn6C}e8mq`6rDt3EkXOoo~ z7~hqf|2YIn5avcIb%Xl{N!SA|t*vOO!po#7J+0s%WQ#f>MMM+{VuF+s(d3!g*&-+q z0+&0#3PfYovnt*pAz5OTQc;Oc=4RRH+4B{M@wgRciay)&^x3m4wseT?kad6PfnS$* zE8@rVkxE|1y2BfiYcT2*4H;6PBXto7ac6PIA&w%Fot^|C4wE>K{PzqD8mvdn6TT}e zWX3CGR#ugF7Kg2;>#s|lGkkYN)|>8BxrGkm;AY%Yh*f=SYyIDDQ5Hr;5%XKFPxCch zfTrh3i!!KsOX?{F9oZkhfD@f`XIJ+{-%`0Svhm0v6M2OrF_nmW+7yW>Zc`olz{^)j zA=;*cS>94=AVPxUo1Bbn6bct|E|YnCViR*cy*ZF8!AG)c*M6Zeg)9eUt(7S7mu@xW z43K7|Y(~A74T+9!VSRYbfcQg2hyjT5J{`_LsRncLpxMM0o&+T7$S5dc>2K8iZ;BGS z^wJ~R?Q*|cjPmzaa30rY?J5(T&B$HvAG)eL|!AOsLCEQ6DL zxsoAuIi7u%YU#5*`xPqo!TTBS1=g{C?2xK7ZZ;XNF47 zYdkJ%GqZKrqa6_skP;!Wc`PDEpsk=#2wUfEeyVPiYpV1)etTr;L#}=tbgY)d*wE|m zVzp5v9=GQAN8uWti-rD+1tgV=1tCDxF?CXr79?*p1diiZEN{kRKK79vi=1NX`ibT=xM(jG726`X6dchov40Kq4}_cy-d&u+W7$!uSUDqYH0R11 zBUxs4Ms;WTyNJ>jo5>{a<@-4zh_W?GRs`X?x%C1vYVGzXGh+>WS7kQ5c}mz zPFfnx*)Dg<04dZ?U*eFN8~mrP3n3%&*O&&`EEdJ|PLMni;Ny2EifjQHV`|#*SE08P z|KO0~#Y3OR|CW6U>{+ieivWp9OG|^~`Q37FLw~;wqz*+ranz80qItF6iqm}lpC8w8 z_IvZ!x9_??;5`4&_x~;<6&UVTMj=Xw|NE69{}>X{e}Db2|B*<3Kd<&be+EhpvFmN6 z|EnbQz5x;Bzkdt^8J75e{}>?#lqvuB;}Ad3Kp3L&|G2OaJ-Cyg`e}Ke3s43{bPRjuDfTw!1D~G{;zw2 zKl1-}A%v`YXdqo~K7^Edbo{@s9QRkkPugKE$Qo66{?`L4Tw=Q|&I{u?gMzS@m~xC{ zc^LW_Y#L8A_}1Mm*|USe+80OkxAbDNAz^d}$+rjRDDu@PcGYLEOzMN^aFjHzNy&70LISq^LrzXR(Dea8??Z_( z2vdu_umGpZOG+w$V~Seb=dle1Lez~0purW0upyxl@2`P`8cJ~LV`1QyAV5Ny`KI<+ zBh>x9M&IFZf-3amo2GDA>sg4WKs5l6{J9?3g;tTh-Q8VCpCMGir|}Uzg|?0lU5qc+ zA>@M2SG(4A6iPRshd7XDAj<@RU}$)_g$qIxl>^c#m&;oSpb&8Yb0z(WNzRE@v&cCi1L(^D=AvPt zo+_>=KK{1dlB>l}hem?GUv|?L9W!(1Pr;7OSRWss*jQDt+*bT9BQDN!MZjY|K2jt7 zS-Yr291gu7m9~BH$Gf!YQbBRQ)8&fG%G!vV^IT8h9-q7e;-$)Xk9hGj?*7b&QhQb7 zM6BBq!+<)$##Z2Euq!t8V1cPu!%dHA;DtZ<_yqcupl~aazPPyPWB2OEcp7b9U#O^@ zti#XCTcF0WJd}I8+n{Ooq3MDSn5)2_x3RZ3K>FcvHTmlovKmYEpR}jpW}`X=%2I-4 z#0^<0`K)|5k6>q!k%dUyU?EZ;+H8Pj8KR_Yh79$iKE{oQwmY+u%ReeyHONcU9KohQ zPaRrlz+>BPb-)-h!M6u$s;WxhIFT41qT=|^-al>}->Hp{i@IFgs0R77u*c4La)8jE zrmj!GV`I{y)T=}mf#5+Jtzgn3X!=yS&(**NzD2R^dAt7Vesnuz? zac6gL4^qX*pr9^TOAxNU-8KR*ha8$XtYrDtIQjSLN=izzI7F{?aY&X|R}BRe6cxkm zC8VTQS5}^C^Wuxy1Y$BUF)i&&^!GnPel37gR1BL0i0S?HQ3C#ld7A*dg^7a$F&_Xl z&z?PlE;URn1U1pBw$immH&2uR$31CCTwGRK#`gA%_+N!1f6`ZtV&z=Os8a0t-~1q1 zJDL5pm#4|Et`-x`ree{&zalTF&}y0y{g^;STHUnq^Z>0G=Bb_@tgf!Ca+(gkDk^J& z(R55ISv1e9Xt|zu$Me)hRaZk?hW&7bOGcQiBz<+iu4FVy!tzdn(`9u2?K?nJPQBZqr)C*H~~qe%Cc&Ek>O z%=rm;J3T@+0y%w%!?&x+8n=$WE*Qy<$p`zkJE+>7ts?FQT+C(f8PRx}BkWkcwOF}|LNx8W^T>(Wei2S?1KJxvl_yVy8B&d^dyYdW>$IYI2 zBwQis#GFQtu**K@kJZuS;BO%H%jWI2sBNZoRy`0B5ZN+mQ6T({$6=bKO6j z53;~xCZ|;OkPZkj)IKri;GiHOhs`_l>(Gq%Br$%2&Xq?H3f#nbzy%K0z)P#IEMLPI zVpq;mL|Zs24kf4c&yUKWo5*?%<;-A?hlGSg{7^0y)_%49hF3Bjt)zEPqR4Qz`cm`3 zTCRGj7yWI_g?C-#g9mo@V`avT#F3A))95f7%`!isG}=7Mx-au}Y}0f&XJtH7Z{baiYZ;30wR(nSdTy-L$c_` zkN^u4XoOC%=kmq64LwS}oBUouAPEPW7f4M=9y^GOYifjK5i}$G6@YnQ6z@1Bz_SrR zf)=cWEtF<4-;~K{1_}x?%;10kuRDRB&d1Q9B}yT6rLC!11L+tfY|OxVbW5TaDU@4i z()h~OdVBwRe;ui}NWaMxo4tqwnh_aVD~RNMttD}_V7MmASMm+X<=ob5cmlThO(5_j?wY-S^}MR z#P(I|M>tXm@MpmZ?E8zaU@lL?J-@)D0{mAn#q#)K)W2AONUiO#1vfNXbF;p#SkAn9 zL|FVgUG|Moi(HJ3kx?`Y(vI~`9|uQ>GBxU}{Ka=0tAk%+CGY{))vVQBxIo3(Kft;> z@NT95pncFZSFN0Kiz^uG{YKw?>BEgFkE@18NUuswmntnTPOF7$c}tvOdIc<&5G*)d z3=9nP2ne2JkRqA(CS7k=LQ8M-{oG3CI6lH5EbPEzHV#ADsfZ~X&T&Z{O-GVMp?`)brz0MyD?dbe`d5&6 z^FF-mo~Uqv;c>BB>t1*Sn|8v5mliQp86>#4^@PGnH|7{$6UE^DQ36~PmGH$-`}LhO zG)&^$enVrE)^iiw;{Vi`jLQNcF>Oy5Y!#2ca0=5a4uu`C-ET37s1T#2yu4{*QxVFrcQC_mXsWpx8q)ZnzG2PG zv_9SrMZvoL)Ap>)90_Ir3U|M+zP`R`LOV~FSva+Y>}UTW&^A18Y=#BQgnTOQNXqVTF_sphJckfhd`JG{p0l}w>s?k89sZcTmODO1UxD)1dQ9prrYaI)HR3fg0{_yr^-TQV{;M^*AT%|^Bp zYMeQA?=P~bmu=TL)P7aQXE4U|ZJ%(V3Dl#~g ze7DVO`S(*=+7+Cmy(PAuyswZ`8jp6K00ncOU6H}*csseK<^r7fK6rV7^-vk)g`nU9 zHJJ~9N*^$<6GYIEgfWvuHp{d#KU8CBCG>k`sDC@Qg;u|npR2Cmei4rCLV$j3KH2Z@ zbxz@fkA{bNLT)O)d}qQjrh2q*RtZim$Ufju_ZtlZGX{^Eo^u z#A1u@Jg))T@=F?4&WNCX2wNQeWw{Ne7#gWUKMKfzc$^U^J=&K7<%nV&i&}IPc z@q@kD=Qn6LgbdmTK*tEPlE5VI6Eh90(1|oi4WN!HbNWr!mO*{_I$qEhhl1bZQt%Ex zKR*ep)(by5tIXB$Y@;5CF?kv%_vtL;o!n0EsNKyat^lWp^J9Nl_+zi5HOuVUc8Qqa zo0Z$G}x4G+xXJyh4u9!gSU)0jRtWTk}e4>C_Qf9z?$e9eN={FYQb7s6 z1KxOlMn*Qf3STZzrHVHCNcDApqq^Mr&>dow#tzx@2R(jhfj@0Ye$nVpq zKQPZns8FdYi&Y8MiXs3i>AWv13>7p9!hg%)dWV49!$A6?VR~5^cdAq{jI}qoNECFM z)yhuK3w{T=MVaLvI`l2@2q==giWxrz}F{W zL3B;`5%)t0Ola}slj{_*5l-BCIY>5fGuG4?TTOmcm#?S@A^|XQNT|X%AIG}V0r58>n$xYU*6pbTkibgqS(oX_sauC zI`B6@!Gq|2bXns9l3D;R|3bWGNeXorvJAW8A4yQ_twuZ`UNlS;Ubr;=>R*WGyxb|b zx0fjhkfF__;V8AnJW(T%5u~FbLTQ1IpJr(1Z+_gFtEt(V#(60|CxvC89h&`Clxm%z z>GOO1WT)bE;OU}SwI_=V);^#fNe2<;+TGkJGWfK3usZCqcQ^qCq*B3mtoMB0PWS+- zkaVYE`twxy_qiWG413~A?K_B%@B7dN-5$(SM4f2~Ci^st;-%0%pZ+4@hwJD=gn>uT zkNz;)#BERhoRlo*v%{~D{6I6Z-ulRTu_TC3P;kh3-I@a(wvgh>-+GoLxi)w#hfuf9 zUtXYEvD)Q8J#QeeQymJhz$!3Az~0yfXjm5>oQg=;nkixomy?{#aam}T;mATyw`?Mx z%iQU~!*9=>oJ$V2_syWr6XpPkH>Q1^=7|lL$*Zm3-`VyCxqtR1H^ScI)!&|W?fxoa zNr|FaWgWDCd+&5yo7(I3iGIRyFCngz#C*oYi^P4bt~%&PlfwWxUcsl zZjBcrwP!XxTZF@Fc5b%JeCqlN0d3}dcGPvG)4A{EZyK8cjLgw4KOEW+cu{LMRhFv` zD_X78&c;p`=ozPP;K#xt5A2a_#Fk*fTbt!m`!#N}*H?Me=~ zsQ3I3f@Pi?X4LZ)?1EA5Ml|hv zS1Q<@7}SJ(CMoTlvrFq!k7=a5+W6Gh35tT*lp?S3B2W7=t!)v<3!=5m@0l9eVX8-` z@2q&@T|XWSD6154{ob6&NJ%csqA7DabF~!2vQQf|d7I5RvQakuLSp?&InHGMt!j-| z+q`*sn$TBsOrv-C+%^+~Bvg6@+3C!dnfZN%vXzVm`!QQ@^5QZ(&pMDIJq&^-02{R5 z=%=Ngifn=nuHf6azO^vz3Q{g!CGq%_W7TkD&sM}K#Qj>bWnZ{=(#(b}=M=EW7k2I+m zk^#vDu9T~4ySbTed01UdHCMfQXv<$)!%XAx)Gz8YHWpTC3A>2XZp8Yc+qU8b1x6S%4Lv>7JZ-g|L|q8& z+4a?>sN6qxb$KI{$CowU-;nPYIg?E#AK`B2_WMiVCF%FXqP)6z!kCgy5;g%xGRg-zG!hJ4N_L^ zthVMdACzSUQ47XbM!D~@>NZs|p+6wY@lf-rUs^D7;@jLXqIUIMUUadyiXE<|8&I#1 zF17zyEz?zGHZ5y!R@iZQ@K&eAdDS#ar`!dpx?;Y>U)@p|EAZR``%}ZLanU2I>G!N( z1(H#Ib^HKq9+Zk4f1yHfJg<=oo4p<_8v0Cm27B9NYf?zwcm}=C1W+G>X1Q$-x|hqr z?xj{i7Q@LOQ2&&eyUZ=-%6=8VBIgBzfP-Uy0w}qp9S^gm(aome_o=Uu3K(Lhz41A| zJ>4euY2f$o;*t{GE_A>~Gg2UedVi@b_OiciKB#pKw`N9RvWy+uQr8 zu6O}cG+Vw}&FR>|Z4l)36JtUxe*4Zj-YBp0dd!zE;{d!tc5>y=hr)50qyN< zebE-C7U-yn`!3r4Z4`4Gp)^9^n22mY1BJW%!-pxOIe2k#Qy90*%~@7#LXdw^H46f$ zkK*w9?MMR>>X^gw_UuA7t7f&cv!7Hf9IdpuKX%)8!9bYkpNzPo zcu}^}%UcE#^TD2Ot!p1+=I9SqMIlX1PUU~8wPSm;(JJ#}KRf`|a}>)h;Dv8Z?0GN2 zY*7$IATmW6nJ!R}#>d7!{|RD*Q2_q2jp&UsERkN!K9Twt3qZmA_y?LrX=xWgpfY-| zytLGOBm?gbaa5Gy;$ofthDJ)#Gzau&#av(yHvZnLzq|-M{xI-`MaAD{*8F^Y;^*F}u9dsVZ<6snugYi(HobQ;*CJ$-WTb%l87pBb!^F7hu&~XsmArgN6ULJFk74O{CYH1I$PwG` zvaw-u!k$n9L+^~jI%H49rqQgU_oOF6?z@M&mm7Aead9a`5kZhyqLKXC%QS-MS3hF^W5V|*lI5-_iY2z9e z0&YT@`vag*`5HxsKOiP94!u1zZvYdaw_aP;ce|IFl$4Z`aswU5f{%~S$;pYKZ1f(Y z)~$#njI=?ydwC7YBj=0L$cL2gQ^fKUgdqGzhlb)&P^2a&x1qd$mYp2Rm1qcvWiYl9 zZjnoQ-i{rs_=W1T2D)~dXit38u6Yc%?)aPgL@YZu)6SJ^vuyJU| zP{k45B3h_#5C@w&aK*pFq04*c4Cf9r<*t})K)>$8n+hW%g>Gj+y>gq4Gn|Z24eC1{ zms>Lu#^JAR(Mh&M$ajCAIsK%f0Iiw@8lHlYwz%6_Ot!xL#wPUorFg(4CxX>sT==!%cAFk zkbLj&Z^!VN4go*km$*yL!^+ERitl4b<;l>${-^wCwR8>azSb?y-faN2Yh-RtL6yjL z3-uwtY3q&I#o8K|e9bzLoBIPM3gEz=L)z~1jH#sSmv;j}c#5oR0Uu!N;~x~XFv=S!-PpHoF)3C>>?`Y?Lyqx9#|H#~v8x*clq7sPd`zbC3EYtHuHIBbpAJ~BVG;}*k` zk)fxjulP(QV5p;`V`|FermGd2C}@4d;K&mRm4=#w@_2R7)V7dp>YndCxtQ2k?cdK7 zWjO9}n^tD+zYsl+rYYZ@QnvUyKB}bjG@)Z=B+itn)%wxN6@m1WTk!KIZ49Q26&YC2c!agBXu1h2nGg9Xd;P=Hwrk^<_cVZ94b+v$gd8K&`H5Tt6k$UpeQ)&Q+0aZ zTM5?(nN(H>a;t4yu#u6GrSvnly+MIeGPb{Ow_Jw*2f2~$-8hV5VhK9-t z%M{p>^D;8vCfkb zU%`RAbg-uKr`-I=V=*x*E;yDyP)&k5Oi?Wx*<45vCM5t-3UE!a$zXf+DD&Rl-oQY@+$Vi$PZgh-K`nC%GBBWX3Gizzivk(GtWOk|E3FOn z+kT7ZHhl-319ok2681x>Z(@<>|J2_{O6rDZlFXm75HwIcjwHLC)n1&Q3c3Ff`!P0> zFXMe;3>64IG4W8UOF7EHT8-Ng0@(|RSsS+0F@6)AP)if@^{Xb)8RKAfC70!7XM5Hw zXql<9-(aM$nYu&@u{Nz9&Qkp2wiEUZT6SJEc)r?@|Ax^NUeL?DR%N9#+}CjZA*qBP#cECtFA@VPc0?aT#!> z+b>?c0Eu$NyMwICN{}3~5HoAEV&}}4)x;0YkwpCjLN*R3&ro_h7T@TdR zM-_>Rjwd%;Vb4|JPZMnOtv?ToO>n+oBxcEu^tl?kb%~l^Hztx~xf`wQ*I(k$$Nf^-(hU@W#;!n8%|Eo9dNXtj<$1<#lSbfg%Qt>zRB-oxpGf|8C$xlLo zx0xIOPf$sOG7TurN~i6{%p$WsD?}sDQ&Ld2vCrE*Hm+alE$CM!&Y!CBI6hVdzeqLo zL4K}@XC`mQJ|OUZ8>1_Z@o8VhbLFI_WyFNU*lq6GzoU5XT$*)zc`c#Rk&Bkg{3=vYhJ0Yr zigz^FM_NL&!dYB8dp>&PxO+nlQIa-MQ6r>E<2hOvr_f^->L}*%!}_ARPp@T{&-!;7qEPSXWII$ngQ|H;Ci1WQF6m+C#w?8WZ3d@~UCnK>C)#iO1#Pc&AxD z_VXv*0A`JZWn-AKqg6Abne9Bd`BiY>m698kALfiL-Ze~u#BFv}m`&r?b@DaSVNfBAb7*}bVR+=xvzF8-bIaFv>p zZ}<``y7$kqLCs1H3*WM?KAcXch{lB`dKz-_WrtleMDq!*2k~+mh$^FmTtR{cWT3uw zynqL=L}NAThzV9&)$cAkM{R?HgCV#4NWX`=bFc#xtiWFMaqQUxT(rO-OrxH-UxXp8 z8Ke*gje4%ir(e9X3(O1V{_9y-gU?}vZE1q*`6vFrl(FZ8aTqtAmtqoCrtna3-LANK zYY;Q2uI9%GPIy?H^U-B$U?ApwaiqX}?B&53mQ^WJcM?#?+d9?#Us!O+XJ* zCIeGjM;qDlN>dAc!FA?NiFcM*cJ|b}Q3JixI~Dw6wBcdlcy~`bNPM5Y<25n1NKZ=I z=3^EMv(u9HzLD(qYqy`N93lAh@Bt`E_6s|-`%o_>gK*+-V=R{RwrVuXBfyH9nwns4 z9o7MUFR^_|DR++cXZCm=a~r#i8?pIiF1c&Nd4==%&sSp!LfYrvJRG)6zT~hpN1QUaQtF)8G?vuaxOf zhOpZh=Q!$+2Ut%iT zur3k#hIq2+aBjSahn6UjdSIP$8B=sZ=ngBp-$7ezYhchPX-OO&awH=*%|AbEui|6` zNHw2id@7sou6++wLzVPL9{YdpoWl>0@BTJgv{v8G6+dh_L2x{yx94+k z_vg>O$@_J=)i^(|eh$WW4oh+oEi9;_p4u$skH4<7=ed!DL#Jx5m_UCTjB+FU$GFOE zk~@9>hqbo=%5v}CMwJpN36YdWLTN!j5a})fX^?IZL{cefDe00fN$C<03F+2w~6J zewfsD$6484=JGmXPa+Ry!ONb+Y8IXPb?E7UJ#j_;O=o5<1h!`k?LKHoKmdF^Rb3i> z0!FSCa&mGn7x8(9o;A?9LBCV)Iw~%&+dG(URe_(H>gKREb<^2t|D+qt;z#mzx=;N4 z{0_GUvuzsci)O#HTqg0?2)sQhb9;v(9nJjO)>cwh+D`{V-2uwf`#UV#?spU_WX2D+ z_>d9$S3%MH_DVUJm_Pe@yRdhfNt3J87B-TDrP{SIMLOUN-r)G_!7DUwX-)Cdki+SZ zwGINeP-FSbaH+ZY`@g6U9&A0P_?=k&3ih6$X6Uy(j9}n~74}4_qm3Z`WKJxLFN%vp z#fV$4&gUn3I3M`P>q>#1ts!Y#b;$1 zgVja?rwtbQ(Z>3^PMt&dNCoK>zsrGErS%rS?kohTNv&jyb;p~?B{QhhJe-0mrB&B!&_xJ1UxAnPtVS(Qh$3e2b+bHZ; zPa-TPW~`<4r7)x-sjw&O?kU(u4Gl|+h>32PMm68x-q}xxj2v3NyCGC3I@f{UnOx@- z+`A$!BKE`dhs)2v1)S%I+8_72Ft`h6cWiCTSWK8|4B*((t#>BCB{tSSbG(Ch#h<h`2h`7TUV#6wI(I}KdXmGM7)8xL+PAPxu0^? z;u82>sN!izaELO~(~-p$UiyCuz{wj%z^A4Cg8!zTg8iO`uBztt#we@p_I5n+I+V85 zc^p-nX(NI7M%}g*R^}KP5|HmdO>tO7U8k?7c$OnVh3NXgxp16?$xbydkd+M($NoYPIH;W0*VMjmgQJg|IEx2 za2b9oAYDMlrf+z8f%p?VoOg!WQ-%F3r^@0!DktnZP)-8P0YmRP6iMxCTdB|2U0-Frwrf zSZ8kgvF&{L(4U`_fG;VN|GxA&OcTz|)v4z$tnh6jZO5cs&|KZ(%7Wit56wN{IUgQU zKDD=E8D|=75U;pqoYjix;t;+0oStsI6LWnqY8oiGKh2}}DNUMqIn~8)at=Eb#2df= zUTTCF@OV;@|L)cWKkuK;b~YVK4~I!NFwv~%QUvouAygIaRzt&#!opRO_bV((u(67Z zgY*4D%Pu-I6Tg;^Kzi=@^oE-uPydN_&V|`fc8i3~o z8poda=T)}nyc>YIAR^AfbCCs|_tD_U0ARr0~Q_M4J=JK~MEAduU!lPDES&Au|bqfd{9KyFCB$>l}Oej@F&Gm>v2V`*t@oCRQ;kiNe0J#wjsu9r&B25&DeIrE)7 zhyu#O(JO_5Kcf#^B9ZM3Fg#k?+Jr{0_a`9og19~&B(RNKS$X8xlSszz+R@orx_-qr zIy&4O-tB9A2mU0I^74LV6F}eyC4cvF4<>#9U(T%qu}z%$bbjgZJAz*Q_U%1Db74`$ ztX1||ebAUY-eNHf83d1&PW?i_|IP6Rq0ZV!xrN5Wr6qAyO|_Y+sZ7#C243Eiy)~sr zHikqxql};S7h2Gf=TSZgzwEu^AklNiRz55CM|aq zS5mgC0R&zx(LjrCZEpT-jhYUg&4IzedCJ8?fWZRij>oZ3!U1S@>jE#H;=7(ghXrPE zmKSHpyURVC9Gr2GzY-XAUpnT_xZVDCb*)|#iuyCi{J5eagH&H7-G%d!DgpPGR%a%) zDr~=_>VisRNycTZXr)c((}Mt?qbv?d`TVutv^-*b)m^ZT$z zff>UzC+2f8^JInWB-G7aD5 zq5xxxQu!f{$cJlxfer)|95(EPJfah=)banXD#^vzZ`YH1q1WAmiwuJ2Gti41fhY}p ztD$29sjjla53Ij8%)kE>jTE9Btp}zXAohLcnf$%}o=x4|RsftYFE9TKH~;7iWg6h44;$+%E!{H=QZV0vC3S9Pr6WkH!E5Z>f9}kGe$j2+i=9mk)Doy| z(J?U~*qMh>IWw4S2zL;8c93=;8^@jrfHANP#*F^MhWd{Th$4{M{guPkl@1|@sOiV{ zm%2JoKqTaOYB;$#J5Pgdy%8cyAk+tDt?X<%xN?NR5D*Z!NwIL( z`%>TK<=uY+Y8$|1KrO`$J60NT1Pg|su?xgn5>nDBu($+|HrP18PXYl+@de=S&?CY`K%=ak0bs4uY9FN}P01qA zU3lPD`t3bAIEWVlr{HT~Q~@vmF-c8Lh~ba^IX(V!i_QNi0&&KY23S&#%j+Qu7vANu zquCv#XJq{2mk5%-VBqgt)6!0td?`)<0qi{!PHg^!Nh=%e{nk}4x|%uadoB6 z@bdZw3`;6%YWT(4AmLLF7k08#r{shoAMP12V07MFRebhr0B%Oeo`H&mC@}y`J|HaL zXa+eKkg#jvTL6uV0@6Jry))E>OZgDP8FV?Ck8q-huH7T;?0F zmiBFn>77@^*tQY=^;FLz=}KVx0W+5vbj#if{UX@SEQ>6i<)Gk+IKR!s>Y5fb1^!6c z1!_)G`Aap`)q+e>q+UO7wnV&!2cpjH{3Jho1N_!(X82&c;-9;D|wgaU@1HS_YTa~-}piC2vP%5 zKBt!;?-Ph7N4@fE0Y}mtt!j3MN0wvPK0czRez!RBOCR8P>`PY9#?(Emv)8K(R}as4 zO0FlUxl!?DkrZjZ%11F!opBnVB6wcLozwk;1$f{{$CV_1TiGoJADPJW+wcTg@O-YQ zh(>zp;1G?)Qg?;P1K29%06sOX{wj)+UB{;7`7&LgQ62z_G4wxV0&a=?XsLJD+46?j z7Z@traJ^OA*KkiO;Q9cQB>$!ldFL&CW{^w3NnqTQ=zMx$HRX`g3SG~C)h(Z(2Cmu) zxO+jk2fHh4(D_sdJ2PP&Kz+0vS5IT#na*r|$jO=M$ocT0nmAZ#2nl)ZDS{JBm@1|7@slM$@1$s)lP0%2k>VKfb|T5oa~Q!uP6M1s)yvTW;I}XlQ8A`b|K11AI8p z+GnMwbHJAk`W}w|DhupaWnp+9x@3^6@+?ijFIaNvfQOIpQ(Sff{^}R_9GhMS5Bg+^ zhet4a$1W}aJvjz+o$qW$%6u245)1$Wh?b0P6Cf zE}DDybb7Dfw|9#H*E8KOPPWjxflDv8rXL2;00^s0vt%0AMvIcu(+$AzN4=?*S}aIH zPEO3*)6+9diB2|N8LBxvM#Y}cM#5cE4cuSgT*8l^i-gioKrc`wJqA9ltB^hgT{Ey) z$e}R8Sp%6v0>)j0w6wIV76149>E5W&L)a5hWVD0n$4srG{0Vj~MQj=1jJ>e?$H&Kq z`z!>HD9#!BoGsF!B3<3+D@Tdb)qZMNkG6HRfxd{2MtRw9?j<)|`TfJgE9WZe3Xb=& z0C7S{eLr|-n2tbJ_vg=_Um(7!p1L9ds+Tmw;|z|UkmW@WN?y;McX*W8!gIb8=td5} z_JTH8kOqXXVEY5`8T(`HnE#v*e-BiDA!Kp-+Z}|;6xbPAS-CkmtPNPJ;jlvX#sWi< zD+aFcr>;2qjCS~{vokZVNM~(flrqIAxj(`8(T>=k!j6_zt?Wrc<|oSCJi)F8YK=5h z!T)206ZL91Qj(REd;aWM2ZQT!i>{`55b{6}0fJJ4 z?^w{w11bah$HTQjzrW5D|9$}atTUtPJ5Rl>z*Pi}e@GCbRu7UUhP-*$^AQpe{X?7k zwQXKauA%#H;|CP5b8%3A?PE4Rxo^933AJqll8&~|Fm%bwj2KLq0kMLL=p(= z(_a0YGsxs-z1vDxwD)Xac+nv-?2BDuc;>dQCh67e^XIi7|IGid(*-^KxpAhqm{CF8 zC;DEsxR;v4(T;h|25)gA;$*)MBscsJZ$T^P!!KekHgZ7GdF@SZ4qBnP>MEF8$!+&`;P~+;cbgLAw}{QK%?h?3s-|U{?F;Z(@p- zl)SK!to~iy`i*=G*XzX}5#FU-S=#PjP2~Arvi+FhxEOK^OvuiqXMDMAEopSVVk2$j z-8B)=fsJ;qvwN7>>0u(_{c>PknM8WVm!ab>3B%^&WZM(td(%ie*Lu zox2JDUJL@^(knj^e|@idu59sFKKJY6X5^1EWvUZGva+*oj>0u5SIQ!xar}~KTC=hIse?D3^z60ygN7wFmz8@v z+W|t3;ye;fs9K$#jshNsRAICESyOSEM8k}`xs&gWHytc#+_&78qg>;d%-c2U?%m^< zkw4n?yD!>|S}1VDb!p$6HWZKb#l!}gTo@T`r)!KXP`t!ad$ykF_aU8(PPU#t-8*7k~fKQ>_~)ibt{8yuON z;}V*jb`graPd|q*wad%-L3~l69VhGfQ2*&y>si2VD9R4Q{+qeGrNdvU&p11>BI>vpgyWwcvL{iQm{I2 zI%mXEGA)Fwcpuz%h$S%X@i!{U1I{`BhDi86?uY z=-b^=FDaEhSaB~)mbIF{wqcZM^D~8%^HjPRRlk3>EB|2_eI~Anm$5K8Kj zH+lV;XXUHtj%&AkevGn@RTpCG{5smcAG6ebH|?S8=Yfg{qA-urB?SsY=2JtVyw?>! zGEGo_A^+ZOpfat>l}c36>3A>BC}^tVPCs4ES7d_j41!F2P`~f)m46+Vv)*_5FjTu@ z>7tzfLc=}NhdS~@FX!ptZlL->*uPDID8V1JaNELP-Xxqu)SZDyCM%2qx6PIapGQnx zu1rPsMIbK@+c%C%jvu%_!;FGzhG{>%H@no$g7&#P0%g=9`<_bgg-PYO;k}a1d0F3# zzPQAb+cEns?>%C3GkW>MdLQpFVjSw>1cuwD4O8LrVhlk8HvP4D6jq#eh&qv_R9W_D# ziJT4@l389%F>Wt9$zZxxOFMFCGydMGPGhkZ;zY!9twpKqJumPIx*z8;m6|GKm#a{j zLI0+dc!wl3V+p@>lk#c-_2(6MWrqc2`oS8)J$fCQp*uY6$W&20I((9F?^W}rDcZA(F4<-Hyj-?CSe>~bqYih08x6Y@M9@6<;Wy&I#RU!&^R zk&$fpaAf@3e2VWGnI;WRrh}ZhZN=L|j#0ZBNyIU2pDjw3r2NEo;64sjiwwNaWYUtS z=G)n>SA1=vxcTm}Xw|O$N#3oqBbt8eC&uPR|I3qTPkCk1w2{`b-t{ez2yI+aw6XHd|m7|(4OO`ip>_A2-_5li~Z z-!_kK3&+9>_kl7<7Ah%ma!|o`1#wDv$_<`(#`dZOhx8#>E0JV zkBllTD0JuZ&b8{Fa=R)`+!b(R^82+>ZsT>lZZ30*qF%xvVz^brzMXq+Mmt>nk=R{H z8BTcBS@%*NlG}`|ebJIdJ}DSCUDdwZ5WG1TTsE4OX)8xV!$`iA&2F6*mf#lp<|F1p zswvHU(Gj!IGZ`PPR2YSgfBy`ZrTMOb>{CAX-pk{wx+KsJLoqAo(DuK^JD2-*4Xc7mv$)S8Z)|7eu1shE-a_BZDM=an&fb`P4g>R957(CY9tI8OaA=BChRh)NQ5grXv1 zAB0CCBN+FNV{jVXV^*X|nsNSixW5wm>l3|IM5?t)wLjr}sx%RI%L>Eg#Ccci@M1%P zw?f;~xE5q7JO74|;3WZZwB$NGHA1^oiyMCLaqGyx-a2{UVumDS-0C}oNWeb#bKV(4g zYycmGhMnT3`V~2!je_HMjJ3ms^-eYAxDJhx(GvK?FW7lMyBE=yVG=4;$VOr+eKi#| zHeMgKHZvOs-8{f)M(FPz`_`TV6yq>DI2aK@0*V!5|AjU%^#LokZtTlzFe`z9fM-Yu z7SeTPG)n>E%;qG1*Vx&cG(7-y2|e<-0zL;U zF-4iw(B3mER=b-8z_5%Wr`{OR2Wk>58SB0sCyIcMgRcdJ~nD* z+K1uiM;}-m^mD%hYV7FzC75F66oU^dxD7v52N$3{fc+ZD*@p1m{RTZ7IaraA@U{${9N^n$@b5}VN55HKV!G`n z8VaGXX#fvZG07<2qp#;4d)juBdEJ0d3B%)e&6|9?rIIg9-v?^tViWS~P8Q$VOq?JUilY#$1?%sLlp2l@T7Ui3`fRux>xP zQg_4^{|s>`yr1RJ9?J)WJ7IrK=2w%HyH_4vy%?e1DJVC8nQIoYzH?!N+;2Opo8Q$R zZDQ59_2_;ku<1X_X%bAx~W~(Erpu%*jX#7oe{jXkHq(f z98TPr$?NC7H=`$v9O>TKFXxWxuuEki*|0q+dmh`s^tyRrXm=*gI?4$gn~oM!`Yz8+Q{D=H)~TSod(8Km+CYe<#qPP5Av?$S zDfMw-Xe_Sn&Gu0UK01Qpw)zR&*KnEeh5zpU;3Z&g zjlEeA7w1hrzA*qUTNf|_hff2KE3r*3mXY46PvPlKubR%HyYLvn&8Gw&Aq_9*zX7l# z6;c5X+>ekZzfgTwxE{a#dVL6dOdt1LK`Qa*0DOcaeU+^Oq!8|R9FP4tP}Fm>t+Jb1 zSm>Tg0jfio#$5t_W@$5YREF0l=xe^N?xg<~aM&b#1EjNN|IRMhBXBfC095!w`30CQ z5i)>9!7v;HCS9@DFF`W~QuvkEcNjU_2*5c;yyuEC8xbEH%j!<@oZXkI5g!DxHBPThEblwp%fX^ep= zb(&u6|20!8O23)c4iFyM;tI2Xi{v~Ocr+-knP^CTJ_3h)T1lcFwT+H+C zkH?!GS}XS}oK6l!{U61wH6MdXnetRwJ}2)8 zgKB0FSpno4skL&q@~GRy`2idqR&CdC@83>KOt{rEt|$hg&G(`4Tw&!a)> zhv&up4<1G)?KxU9a$_2H@&yW>2IH|d;> z1lo=(ZBDPdtCl%WTKknD~6C!EiY*bq{de0#V^cH#8EkrxpWfhHoQf?@~Y_+o~W z(^F7kN$z-L5qmW%4fOk1qxV8Vhx`non*E&}FE>92Fyb4=W}0mNmcl*YxC*YkFqk{Pr?0^8chP^?Y*Sk#+C47P{z{|^6)6T^z z%JGnBaI%888X$0rU%KA=buxx8Fu=HcaaadO%NW)gUKK?(69y=6phB-caE?e-3^ z*|1@nrE8=hx>?m((%@~RyLS)e9rpF>*9kG6ieuogi%?z*MKpSHN~*}0w%{KU(&|KZ z(vo9KF`dTOjDGE$?TOAqTVvQXU|(m&_DLtK)@$~4QJ53HTVsEdsAGPFzgGL({iHc}8{~scse2o+F6n2oDLsajzKtJJ1Jr0!T4+*LuJA zQ9+k#5coin{q5%@x`@ZMJ!>k68e6F(MIloi&usE02)~uaS*+3hq7uum4G#;C68kSb zFqzB$gC00+cwux@xzYL%#lg1S46kzL4e`-=eV@Dz#TDpy8@G?es9EuaTlnp5}DF3FZRW<{Vc5eNTVd zlq8)g_%TWxHv_{O_+wxwz5%=(nT)@g^EUTjbIN`D-DTOcG|GtLAHqEDbA9^?4?d zuplLED8ozecDJYIp8#_cEGV{h zj80eYWMX3#XxHAkProR}f}<#yEP7W1Q0BJp{-nGQP$m`R=lQ*xgHlnyxVACsG8IsX*pb0kz?L;so zf6z2Uy#5kjLi@l*_gb^*nHV^f1!1J$A!9d0W%g4^dryAl``zosh~0wsSo$Fqm5__& zjV4(hm=NeZY-t?M@Wd4n($ak7Vd0}$Zoa?Rjwi-tD0#o=O~*pA0DTGUK49EcxF~tX zF7;;3=DVGkPLU3OE;b;ll^$SVW|6 zt)+=~`vQ%ZtaZ6xQT*Zqn?zc8Ci>W|q*yPHB#x7@RX=LCHD@(kSVdAW&C|R5C=sDo zUqjY5-Gg-|L6@&cC+O?(C-A7bh`>3E0X3#Xy2;c>?oz;1RCw##+oos+?%6s@$P4#k z_oAaR@HU;9oSa<2yGBgftlLH|Q3%cWxEQ*>K8lOEQym*4qE8`I;j!-L?2G$|K%~Q5 z}g?J=|{2j)R*X$oU^kAaViy)83z|EawsxXzR^^x5O&3gixpR}A9tZSGAK4akN zOJuw4ze7&#)psMsjeVg8gE}PV!Edam2BMbqkNQr*x|!RRS58q`S%eUlv6gj~ZH=hD zsZ!qJ+Ji7E!-h=q##2dftJQ?HXOK16c1g&XnIO{A%ED5NP7?Q z5Y4cJTZ6$a_3;hcFq~UFr5CFoq$YDj2?#Jr)+Dg!;Oz};$Wk+kJ!mSyO-;?tj=c=uf#Bn-Ma;kgi0uI9CSvdKpyE0gQlQN16_87Km^>kB1HdYA z41#7fo>(v6whP#t!_>3vYsOR*T!^PMFF2At5 z`(v9Cg*3u#N(}`|gyJ7=W)>&oc1m145;+llrl{!o^Q)Uo^!=(ufM&iz=Zx9*6C8`c zPzI70fdrHPFsL6P(dWIFQzLc@jzn45%x^J4H___|iWu=9?LEG@%@GQ$PFDVcDK+&| zDna`MUwfWC!lwAb1OI}jN(2G3XnP6{3fNSL5q^*U!2+&{X!5DAwbZ6)q-}#Q^tpzPI;pfA;-pwuSh#`~U9lwHNkuJsej)y@FD|v;UQWsI>SL+<`Do|e2Wg}i zyAh)z%rwEJ8MC}Y`eV6yd8M_424ise0X>Fof!kqIO&Ob8^jVCasbGmiroA=#i6XMH zPeZxZ3i)znTR9}2T%r;-iB$U*EZ(OZ3bBl9@!FBt*&+#~j0`fh(uH}f+j<1g%62XD zHAE-8OA~jw{ZNyMSysnPuZn?MIHOEb!A?^15B{ml(J@ zcBD<6T>^+TtOKt#{dm;#WC+djoQFR55RnNEa){Wyd1k)cG^!W;G2clmM3d*oe}5 z9i+(b!l7c3IS-HoZ0RRqUbNU{RE>XR!)#WPCYTTwM!^FX!4Dof_G5K9NYfI0v+j>` zeEr&ouLcHFKuOq+9=BMrK{EAD?{% zOSizvOsL0=j!E%1RhUg7JRQfxm;s zep7UGCF+(hBlh@cSy)Jx!o7p`^~d(f z`CmI+lVFOwyI+DdLb^;tjPC$qj;Pyz!UkHsz5Gmd zM?I6WsH`KJsWYjQxgf#f$?kS9`4IW@=g)!NtMAzV!f4d6>&}DGHcIAF4lKfAr(hf* zv&mXftfgPU4raLwV$Ju8fBqGhBNo^UoGtbg?z)U>^<|Ho;9x$KHq?z-n_j8%jtnZv zqLN;pxt=`0j`Y25mMi|{(L&QL$xlRwx=W7|>8)x=G6Sc!RIX2x(XDxkr>SteWNGqxm4xNS)-5wR)Z zTv!IE2(fO3jWnFnXnHtzRUttJV6c)TaD=~!g(bE~*b82#;WC|3NM9+Bq@QQWN=cnu zuYI;ESL&DrY_9PP$%F9mbVBZCI5@fYi(niOprLTAND zYj=$oDiT_G&8_kRtmnG38;Nt#^3Qnx$mYr35RM;_ejFB;>YSrqwvhMwZuKQ8GP=LW zEb~{A^dCyJ;uk>+@GQSF;V>|u^m)p#F_;}{f9;`iN?);6!Ro5%Y5>fRKJGAV_er+S zJrucujRY$qVq!*zhkb?+d_>tJ{E@?H%f3KbH^d(iOuw)%b=_b0!QzUSUnMyN+E7Ur zRN4tqAR9d;Ah;mx6=QKcJKC1GT@qs0Plz!rEOZxw4hBTYNv5x6lTtry$sSr0_i!+6 z6}qJ#OgV?!=iNm6BV=o=_}$j}$}JkRy}VSrWpWI8y(_E6$%^g+Oear|Fwe)wh#Cc( zIeB@)Y>k-ikQPOqRN_I0KE42cMo#zFM+y>lBLOxjhb90<_^V_k=<~>UA3DDb!Bp1{lyNfypRyvz8} zU+8^a-UftYD-b{ZURF^d))<0|-z4hv(}_qej~l9+c=nZKD$G>T;`8pF`fmBACDU((uyHlN^DG040Wkg!=REe3fMt*GH$0*ywcGlwPj5^0L)!r{ z8nh;SIm==E-ZldnH<`WfI)@trDVBbmwdUG3flvW3jl~Ln52U?$#~K_%Zo(#T-CXDF zA!|ioa?@+Jmwc`V7%q;5M9k|7j)@d*-r$D@k5=J(!T=LcZ-j*Oz(U~U@K=LjJ8n>@ z-dQ4N%Ue)|26;$6Kx11db}_92g96mhV*9cg)>vOJ!bwZBRAd(QtU163P5Z$#E$y|x zm{p-!d$>Ht`=u!Nc4m#0@SRAjNa_NB?hUjEe4Jq5>SurIxB!c&{8Tp7Dnd44^<>qw zd-v|O(GY)v%#_wK3ii->qrVS9y6NY`*RpE!tx)TK9jC>NsyRk#0A-~5KZ)#dIGX7@N zSnV;_5H3L)@74MXBAE5P741YzBO&I3Qy=@u*b)-W3xDEiGk?=C`&7OKQ&8B=g<5me zd{j_P{hZSD#iW-^%yQShGn#4DFC8(!x|#;pK8P)YAKK;&pmE~dij09pNC}=Ys2f6$ zDA)DMNb0QpOSPC)1qH8vbU(Qc;sndor zX6&rTFJS?JO9I>No3xxmvcZ@ZDvpZJpLNllg>xo=e5xo_$Lo(rZZElMMlcya@m-07 z_sY->sHa>|3!Yg+lr|43mT#lsUT@U@Q2IKbD#@81+y+;GP>*LLS|6RyeHh&C+u1h9 zJomO-!dRb1?l88KS{D|$OwaDUwLYyPdi-4==WJ=}!1?#8+0!2`fxUfGM-(3Z3MyN#X$?*~eG-t6{U zr^|jkQBl#;z$Il?Ee|YgD+qy?3x^R49Q(^7r`S+&NL)7>FeD236I|ha+-}OpH`g@38Rph<6 z+N$eH!LkA*$k3U~{-GxN3kmDopS`_?Z@c3eO-v1fD_i?0BE0eirSKi@AoZL5qWIcX zU-*(yVw#SBvt=kwYbfyOHlV-RKCy~%D43`)wFg6hzR##gP9#UELOdI6!Y8KYIRXa+ z>ZV@LEzB*)Dm7g}LmVbMzk9NET6H9nIM$vHvO~{1iII_SR-4CL_orN6Zx0QR)Vy4Z zwoju>{x&o`q*f5^^Zmy}G}HOoE5fNT7cdL(yR~|q=cu{5v)rP};n$d$wlVe^YE;e?LA4?mDOI980rWR{!rlF)`oqbQs!V`*9J!QwAg(=L(#nQ)f zPS?LydSud%=61)pb^B((OArqDii_1b?LVi#J(Bx;xT|^9>P1*;ebNVR6jhVcN52Fl zvIz;2Q*z^{>m5KNShi_ z;m=3vx2t3rFz*HT(ipJ@EHq$TSE31nosEWybN_R2^mzJ0z1HXvbW*XFzd`(G7HXa^YO`!luN!*Q^KKGVmNyVf1 zM?7pV7l}*vRQ`V1SO09e^(So24KwWVcD9QDNY#nzix}dFgL%8^Z$%bgGu=OaXABN3 zk%CAO@P7`BMlB!6$jJK0=UQ!XIs%pupm2F^Gt+VsQ(W?u9BHJ9u7^4mmv$&+-lf9) z+oEsvr+(0Oexsto+$-6nMD_W$QZ&Omu6pL~7CFdKvJ>}#L1^()=u_wRf3SeGMER~i zcf!@16DeMVJT(6xRFcPE67uQzgt&X9oBFz5ao;?#>QdiEGq7iF{$B{fimRAyyWfkL{%8XT$ywm&X-U6qz+U z>^gtGbK#vZlGZdXr9-Dk6%!LJnknO;`=~TwzqE&uSZ)`w~Q+Eok{3( z{p1rZ`ZH#hHXN~%`C?*Y!8>I%#R1b&^O4od^)q~0(UzdDE-)o2X&Fqjtw z!^q_Dq1gKFgdvCNwYL?%?*~)yR?4K!Cp2Q7D?az)4a#d1F#hN6MNK!xqmT9p6uHmO#;ITa8ZWL$Tsn+dB%7Emwc_}jYyLk!OUM|lNK3QElE+ee3o~W-o2S)B z^UPSU2yAl4<8RwL__>Ks>O+ssHW_)bh0nLFlof9O?9Qifuyt&tRGE0=c`B)Z2&dJ1IdoZ%o=Sj4)Te3?bNf;&_7X0Pp)= z@YX5qJtews$L9P$_u3$O5mv-B7JNt*ymUIUsv-ILsYC# z<@xhQT~9e2G#|RqEwiohkJFrNF?ClgF;H|t&keXRQau=U+3y=Iz zRDRYUXQN^uz$+)`<$r4;eBlnZ9{+6ExLKTkIz1UvnvK=l)wVkAUKRvuOFC^nNBgM^ z9~JHC%yWyXN4&Q7j}|o?7%iSXL)ZWZDtz2C&(|agYFfPRLA@)xPH9o~KTq9erwW21 z%Pa6ukzkFkYHM%s_UGx;1EuGN*BblU_Bvx$`+6H+zBt@&svY;%{DuW z!iBjzd-Gf2$awphL1V1J@h+S2)E{{`;AJtL6Yl-=;HKkYE2Tf*+vX?#Wr3|%UiKRN z7p0{3>Rh!azUM~Dc25N74(B{F*aWNkO^svaGhLlDtGiFw-v*Xo+AM|dM7)2 zw3W?lZoC3T+np%!Q=RMbC-1LBACTIKER`2nH2qj`bo)u_WdR~Y5ai^Xq-mhuHh7mw8y zSRYCaZwX*=R-+;Q&DFJ37>4|BO7FmXUi7$g*?(*VF(JAUu1S?vVbHu0=3xT;CtAk- zpT~>(q!qRt@|M|7`<0c7e$UYz!Cyw%uvq&o*gO;~O~zCE*}qwL6!?1CUv?8QDoSOY z%k+=a*T2mQ(zea-m|)5(l_J;WMb93x@{(iK*RN+kpDWwh4HRsw2>2kakq~}w75nZM z@N;3U{H#;fnLF6&w#7tbu^7Y}<;xq25SC3i+USD6*G^x1Eh&~CgTt7LJ@>2ekE|E&R1S_|LcE4 z_44`uA=-Dl7j~zT;A8x^+N6d3G3NXGO|*D_{>%!7+wHn*&z@`7+Pi`6ZBJNXp|$Jb zmI)drO#5IOAbyd_&p%ONHC#fg)b_&0uGCmIlOIB_XR=;f{2iT=egEfu2I4z@`IVKG z364rzlkOh91Wrz6vd~T55fc~x-rXI{@DPG1Kbfn&nhphR7`Qu$p8%d_N;A(#q?qRq`BkhWH!SrN%>RBqgD9>C@e0nSH|dGa?c?ThTj z2)He}mRW5qu3mFAG^8P!1UPejG%qhZZ!lkd@XEa`>1X*>NJAAQGh~O{wY7(=rtl$x z2eG=@6^}{%4co#ROAHA+Hi7lZtW$N(5o}hgiVaM<_^E;!7*z}#u z%^49ukQhqF*)iVUKh;(CDm&zn&D0Atte8&iTI=a6k?PapkF0u-`i&RXo9G8wsp^$- zR@!&1z_mX`ybb0Z0q5ZXHrSEZrSy-X`_UEZDb`>wmF6@lDxVu=ET7~Cx&u51oi6Xal#17`) ztIVCQyguZ|f+Wt2{!;tX8b)DG8Bz9IM4g*a`RSuS(R-$F--O`Clh{p+{NSCiqrLDe zLQOO9X?2llsIVJZPD?D}Y4Z~x@#r*?*^6C2m>MZ}Cfzo=>D`sY;f43;D8glT)2d`a zFxh3-_M*<@+oH0b`l}v)IXhx=D)*ep&VwCYcWnAL4!Nc3^NHV83miMuuLnL+<8lax z)FKu|Bd%!s_gRQC;~F~O?+Nm>3peRV%WnCk96eZ!Bd^W5LiB&J_SR8ZuJ59*BB-;tv2UDf{`NY1oORCmWk6B&AOG_>bDF7#ci+#F5UC$5N#&gk46_JpVbXN+UOWkh>TaA0j zRuT9^ujWBTEsYU=*X5owsVfP3+2RIm5|UHsh>XBdQ^Xz6=`NVp1t zwGM=VjN*-P#{?exT2L|*kC$oG7!L(RvoL5>7DK!2#Th0Z0RjD2zB-o|y&M)ZvoD(* z7q(|9-b8_aE0NdMxV`}ia7W8Nu72r~2_PJ1Ap*EZW>!=PMV7RFa&HhG*W8Xy9aoV- zY;5e&#t7!6NbcLk4tU_bJUu0%xs7(eiGt^B3>eLQt60gviawNIEJ%2>2 zJ%-1{MPj|-rn$%TF>$zBY&eeg2obe(2RC>jhR|=Y3|;uR@%b)I#9~54cVf*`>x(Cj z@&)`d?J+OD2WK25gmfLB`b$Pd&9mmUONi<$nf45h=yP7xbu=m-V8s!@PFX@Y*TozGIHui*YsRheYi>4fI2uL*+4P-!IjBB~%4q2|f7 zc$A+iZh+RG$vtT-`}jr7ed>HcnL)Q&B?afi9bK0M z6uZPlCfQqJ|KUSJQ<->7)t|lXg>h(TbyznZ?{0#Xh0rz`Y+_^+jFD+r% z4HL|rij$8dEonWtj8f{TAxvm2*~AP{EaF83Dep+?uv8Bp1Z+e;_}SpI$No;!q+LtH zDFqMwyp4;Uk;?CspL4w^;!W7#Ci}dEHdbQ7VVDP`ET}~Q)NTMuOa{=92{SIU88Ssn z(Z3ADBIwbNJbbaCO?2<{fR>O@WgR553VG_pL3SGx!Nf0?K*$NAmODsDJV4w7tm5|8 zXaR(^;3?y@TClwO=+X;?`J-G+=gpbAU~bh)=T|Z^_qh_e^^8IA`Dg@u%c!1$v{`Sr zp<%J*iL;9fgIe|1?jlI8S}%1$o%_#UR^6>-llS?~&0-viP>-&Hxen1F_<5K|mivaG z^4^sPs{%#SMfR9~w>?C%7j?~e?%X97*Ymb~{_fne3Sr7wyp_>R(Y zt$F9{HB7&A@@o`t%N4n&q<8=63o*&=o!rCKyHzpn6g2aVz+R9+z2=8%tJP%WW;OmT z2lmLg2-ovr7SJjZMCc#V89bN8%l7RC{h z3`(+kYZe-D&#xwiRW0HXx#MfiUY)AxqNQe2V|9%2Avp#mOGds(kGtbJUcp@^p|;tG ziy%OfI8d6~So2Y1n`TAvqfyn;BiFG_i{7%<;(#itR~+bLpU}o_ty)&T<2&3LV16mQ zV=j`d{@b?Uji(}N%wwWyDa0c79Vf}opKG`TPd$>jYy>DL3+AM}Ex2(G;}7T_RL8{z z?Len8mCB5#$`tQfyZeDK^Ul|Yfg#=>)(mN5;-7yHRz<&KZuMh@zL|=d?T2Nu;@m~1 zR_}Y7UPp?L{^q}h&meMPn3bCTaKJTRyn|f3kPoSP zRxQS7$?J@_bMdC$uBX3OXT-^sH9RrT%1BTfQ=&Wc>So-V9mF3Hny*!Ii?ndnHMU%6 z%{HgoxBPb4U)cfhet1O0m=GmpT17(2<6#50YOpNk zVyr1h%ZZ3Sz^?&}fI38X%_tAGr_ zn{HT@`Wxf0&-F|b`^+-O7R#CFhL`Mf3>e~OT`Yd&? z-VG@jq|8U76&Ak+nD$F;N~(xniCOD` zd>$x)Hnqs~u|X(r-$qlUE-;?}2Y~!lz?mzXS3K1|@5^!r#ib1TY81U%;=>(WqKYok zm3CT_o|=Pqj248h5xD80ghzwjUHR0>Zk!J+Tm|$@a+}lz1lqe6wwpf;`t#ooIz+$X zkdb@ynWbDUQi>pep2yC~S~Ru^^(_$-tRvDHM93W>^PPwu#m1qm7i z_+m%WMl52!f9UF#=z+4E(mQZas~nkM^1F$OsbEKNfi6*n3LUFvNBV|Ket@H!XTCVE z@TarSrptCeVBY>c+oo4z^qbf1)*p-7NaG5P&MIjf>rNS(wx@>Q8>7RaUe(Ism47p)_y;fH_i7MCh)h;EX{TF0Cq-7HN<$5Xb!j`PK zDhP6I?Au=1cGD6D9LLYtky~3jO-u9}HXV_&Hx)ZwI!B>QBGllu8#Q?7hL&E^NN1#X z+nAhoU*3}OcvoeoW>he&^!7~_;NMjru?mqj6?KlUzRxZb@0nWNAo9o20&s?)bsL4?HD_6vwDkUy2;;SneH;+dj z@8csZS^E)rD5qtFKGnoRBD&ix%@E-z_;^wLB!xkYpWj35;OTj+Dk}O~J!*aVCik$o zS&7&ruG`o$qu`rUqV~A*1fy@AnYtHsRhIq2(s?w!nbmDYO6a+Hb-%}N2~?d{Gwa87 z);7>fyn27i{b1kpg1w$>V!V(n>I}HW2=1X63n|@eU|RtTcpCZA3L;$ZXsrTQf>XNji^7!uNlbA$FTwws7EmFx2*2S^6y~ z7r`}9s<4-$E{_pRTR7owpI01h*ub36JooYLS##=Ri_f0Yj4xPm)Gn7rWEK=!m?K1@ zTo6MwJaUZvC7V>5c$Fftj8k@QD3Obb>XgRgI1Db+Jk{mHx&OG@Qc;(0Ql|GJgAM*00(6=SUwQs3Az=6pCa zSwW_cOs19IojZ4yMs~nV4TFwVm6Z)H^QQ;Z?n4<$vTszJdN-#400g=$gO5ni<^vK> zAh)ryVABOe0@(={7aAFGh>6kh2gk>6yYe_4&}3%1y#(|YfbISzJ09Q6c^FPDqrH?p zHeb_%PQ>bSz{J5(x3)oty#0?o{+~m3G+7Z69Mbq+sXpi6j-b-?;|__vg}rzXaZG^n z>e4v;!PSwcuz2-7zZ~7~j|j6S^>FX_%Gly|Y&3L2`_a|9xZ@flX{rin9bF4|qb(4|+)&+xqKXD`Hku;3 z3M3@;hDjFgc(btF);-}b>C&g=XLfm~%!q_ORVZ$^gyK!>_iFn}@zdjkhY{9x-*gM* z)XReIPw=k{iY#D9HE}~gUjBv8`jK$qZ+Uf*PO|{RLdNtuZ|dIr{S5+pMIBe^9st}}PE#mDTm-nT1+ z3cI-<;(w|u6maM$TYRR;LxUF_k*cxB3iPIKkH-yZ
DOn&3eQg(vE|t-=^m`qki+W_#2%xy&Q{R^;6`z4|g1Qv&A{NNHucrFGU36x(RMkxy#QNmZ{x0 z@Nh6=svhN0_SuzgjaI1%TZzL=7DW3lKJ!z9RS;tyol9t`BR^;+%rfWa1yO|Kg0xSX@CW7^1ZaVGUdZ?J6O+@`?a`!WsIvLP43Ky*n((*k@<4l1daink z(J%cj%-My7g}=bc3>au4#3z)B;}oFA0frPxrnB!!q0yecy!=oshqikcc-lOYU(Sx`% z|5s7#FGWf+CkBdIZ7+Qp1=GiMcd^6pb!sf06VP6W9CA523r(eA{pcG26$4)&v z=?7<$dqU)8HK){^A0-$IzqE-lJZAT(bdVda_;7W_UH3t+=X(_qcjywE>xI+!!gWoMV>$+7WEh_BMQE(1_#pZ#vHQP~|mI!_7yZT(GCFPcPa9PsA^&<_#wViF4|z)Oek=g0pwq)YX6E|FCMGP#3vG~D7`_6$ zBP7CBR}B?&<&4fs&BCsGiRn~|`$m4{tgaVdXVtjpV9FIG}h6 z=DnXcHO)rfKNv4H!hR6ZY5c$r<_)s6@?Ax!uTY<+=-&P6qy242?B^>zoW+w86{)*P zS`lAj1XbReO0g_u{l>zHsiH|sdbC?sHfv|vq~nmwr(vEBM$mTD$qqTO;`w zJ!-CQTP#|E9Y`5c$(f?VYy`uh_B*-1|Ey&n$FG-jR_?K0nGA$21{Wgm_p9Xd{Oa&P zy(yV8%;TuLDR9FEw76Y#LnVTM=G9Du`g7eKye0Zsaw^kDzM905cZsB}c zw#~GI)am%ND4Pm(2#@^oa!)DxCw4LG98vYx5-fs*r-b5V3uV^!iL>)L>d(dC??5oI z&b7mB%lJ1Jus`LrBcN#(ny5;MO%+!Jc^%XWQ)Rlx2Z;AS7oYe$lW1Iy-NnH6dW~F` zxZo7f{c|RsssVfCB7MmpttfuYm}9cfZ58$qfI{kT+0kV9&{zT*R+F?@*^RHjE{TE-`bVI zAS^iQeFFSGZg0zgEdjWFAMdaD*sh%}e_ThD$pEF{!P-zf=e9Eh*)I9@Y83(LFn!y!rC= z>nNn8w|%xvZ$F02ffcl{-nxTv%7-c~BLe_Zl^(R#mX8$vQaYD$ zDzr6kkx`{^l|Fs7HGwLUadXSF^GKK10qCfXhoD>v0V90 zAyD(9qA77>SoCwil=G9qyw$e_nnx&pb|U55P3V{QLV^P3O8)l8R-0sbQ@F>+1{b=R zs`u11CCd<5TzabRX;r@4^w@0gQEs*-t$OxlXjt}FGzY2Y2W4_s*;_rGN90m%sRrh_ zNpg%F_k4eo-A}P5t-a@rc2QqSi8v;(;n1457fLalZlR)X_=Lqulrr}@S@e$6(^2QR zy0vFB^3Hq7=^Evl;`lG1;3!GQZfy+2^jEs$+V#sW=B;FoQNoOqt&ye?1DuFxm+?Ghj z4*c~5SXg1*d(dM}{K6)`lwPGWTz-T;K2N;@q4(3L8-#==OHu{;-K)T!XXNw#A3fVK z_YrpMY7XGiif!Ri{ z$4l`q>_pDsNz-fa@Lfj>M?%F_Qc|vVK51xav1<=&uCm+Qb=pN#wiFi+fCxVT_w7s3 zS?gU5mF$tZJ!OjUhe!4X_II+&GqN9*nQF%8;GScuyEcDVHKG~$p*vhtOFY?4Nvg$D zG8AFjUF^j1!!YAw!)fZju?A@Sqr9db#`*e4gi7Xyrs^G_P<|;y z)Nl^adTH{yU1in8CR;XF44;QmBdl35y^EIMR>YNxf=Dn+MR44AnL}ZgBsz-|^~(^X zXnXX?vCp54CUB<8H*nbu6ecfuzMLEzj5JO_6oo>5RAA!FLq}rbs4z~K9K>=Y zk#9Li)8=)r!?BWr3*qJ+tL;9FYDk!)+THy%5WTAq7o<&#troLAOfo0+E+RS%MJ;&w z%8ManBVFfP=bwJ}GF`mnV94=6&P z-p)%P@2n_HoG!SpD6jMlSGd{l<0qCo?a?d!&viV+#lfT3oeYQ)yRH7uP{TV$52sO! zA@gH)IX%>?D+8u#?fd!4bm58g%U)Ji)~^~(K(Y}IATrX{Cf^u?N7`m1icSMGkq+xC z{iS9T3*WhMtax3pp7z6(xqf>1!TOlVQUE^bXI{Y|O+R9yv2=7eZGavMV5we@Q0}yUj%SXRVEdL=SOc1SWPr1QOz6W79>8!w_)pgU%=(hhu7$W60$V<;vbk zSq4rjm;$z2e?!#hXX+#oPjfM=!VWa(&4m>Y#`W9)qs160{0k+qjLZaXM-+VhCW2hI zT6O-P)}li7xy~m>ztWvPe9(r`$1ha3?x6em`~MpG1sZ@R0K3*Y`x*^bpSUBT4h;_O zR)#dRFK=g@&$xZHF~5www;N?bWp5|15WeSx`+lV*D*=6Dd^q1rRb{9p-&5t!NMbEf z&52*?M^ zXXn0)AtiQ-;`o4O#!J}aO>FB^#U8s~Y2DX|TND%mW?f4$E9S&rQf3=NSiNCK`7=}` z3_KAa_-dM(a$7HD-$o})gTnUFE(|Y{xT6zrd$4`hG1lg`8q7f2Tb7Dpb%fpmc6N4b zDhcDk45nB_b!5<$k$x81-!DvC2gr7zsgg-GS3Dr)`wAK>OH6jc#ADfscXaxgI5{0E z99%?vRj{tAj@c-yiU#3*6U_>)?LgE}KhEJR#Hpcz@c+M)J(pfbTy`1NZ;_qCK!a!ys0#b{+zklN4q!oYt5N$=)bCF3LWbB)(}9l z{&x*pkQR?EYxwL~|CGL6FTs1!KUCE-`Iof}yy@TfUJRCcrq4{=Jr4gbmpL6)eU3!Q zZ}wl^h56>Wc|mH2n96i(0MBhSw~l(-d1q)yT7J~!kj=)=^#USB@|CPT$~MFNaia4>%tH*oavGME9X-4$?3g?Kq-ag;)uMlG~fDYorLfG z+-$1wwEbp&BD?uSo z*mZCYo~c<&P0w5Y(;pe15@oV##a#i!p^S_SSP{j3RZsD~5f?|p=_(%`1=^if*_&m_ zsY=^A=f%|@LndIEMUTfx=tE~^Wg|J`ar?##@Mt%FMuS6Bn|3m3lIPC49SfpcGrpAV zyAIVp+diOB@&Ft zdPUv!6oGj7-3zCZJ4gx=O1#wECT7`dQhck%)b^HTZp#Ph^<7d)Db$KRs#MhEmsMog z%zpAn{aF#Jf`0j(-vXiunc2h`Kl8ZS1(rMYB7R;nNHbu(m>4J){-?o-obS5YDQdDa zM*$oPFcHRc>#ZJcDAB%xF2~@#U3VdMb&~i(Tn3GwF01>Q^lFvE88SkOiuU^}{T1|E zrY0s6`7)0=pFN}N?&`jUkdRteq1U-2icJNCp9bvqYYI(kD^=nkFcrDA8ea17@BpvK z>-fTSy4ZIkhY+72?wY#QE_;uN5AilAIYCkIOk$bG+id;!zdt~7n|d9Tzw+xMsI4OLcc8(qKiV8ixBp{?($+bSGLSt zRH7RijTo6fXM^m5@N~V}(HcTzgoDGDZk6&k;_p44M?=;R6lgBc7(~c!ZaSRJwU(M^ z@w10d&o?MYfT^RBg@px3?am`-o1Xr-6lwDN2m5m0#CXt*yu3V9uw3>zP4;~+Y$z0W z#nyf&3*qCF`+JaQC@KG&3xF9s$3+&`D`!T=doG;!u(1Q}K0i?tN6>T zkdTm)&g5&|`lD$vQ!VpWp@-I1L@mr>!I$q-lih{`L!MNk;G^tDVv_qZg$rfhHGq6s z*W}E^Q5NDLsMzd;MM{eM@F7aOJXYb=r|jN$Y_+w56%C7423>LOK2#xQllfX*D>5)v z9>V*^*l5Rro1LGMk0lXrH@L28BsI)|{4u$js;aeDfRE2l+8=4B-EA}<2?}GGZ$v66 zOxUmMUf#^068#^P>mOAzf3+^>`kN?_u{jNAe=_LZbZ~m(Dj*FWKbTt;vtv5`Lqk8< z5ph;q7_F#0aMDhjcyhdqsf>l!?70%)#{Ak8;ZLJCzpAIrS73)eQ>oPL9=BaTo`@aE zD|n^Xh{J&6*wE!nHEMi4@2=ndRI(Sx!&TIZ*5Vo0^NOOZA7R{4jRkBY3L!!{hkSpI z{vCKvSsi=vTUOcYclnXZd4cd&9f~cjLAYY&K&eUhL7`&Se}>)h@ag}V(13@2F5OKW z3=P=3f2`TBI4q_Y2-F|l6O%g7WMfl$TR(g>ePOC#h)KfzRdE#{VrV-Yc*~3O^||M8 zf`u;JgM)o-ojMVW=BAfxfBac(d<~%E8c-d%xg@NokRN)uvUde~VE_b`8j>k*5;8o% znFbsre@w>eTo_9}#0CqpS2*|D2oks`sI*W|r zfg&kX&*XIY3?~hSow@Q|ug9Hdul{3FXNfI|DkUKSeiWpkfSsyTV!Wtkv2{p1-Wlo1 z{VR+j(eb2Huvfk2A-(d-)>d$6LFnVxNs|T!f#YZ9=!hm=E6%i3Oqc#q`DK3%lr0bDKaF_K4i6>!%X`A zoz1z)2eKD1(9(wG<;3cOF)!TDkTE)mSky1&dyPQE_gpc4)kRh~ot zKq6mn?GxXyFf0!_BhqRtSxTu2n;r71Yrl!pk@M7#ip3aOYwJDS-d752N$u0MF0=+W zXlb)JUx* zL(a_s>tW2nuTQtCf-o>b-bZV=FV#k;mLY3SDiQ|z$n1Gyb z4FZ4ft(t>l=wZ#4HFvy^*?8Tl`7@pO{SM4{*suft@r{5}z=hrF)( zk{id1&F5$Phik1U!spk9^9&l#jwh#Jts}y#sIlD97Ia3)El})DkceSbtFV&ig=EOd z=7MZ6!SKdp&Wwk1bWQ7-o@Lih{RrZYm1S4It79 z6lik?cu!H$-il1BJFheUkumIF(Bs!hsAx707O{W*NRS3A1WCARjD>i z&dX!?VEnIZPFYz%mg*7>gqBypnxJjloN(0ya8AjT$x!A-twa0UyGZxM0V8oia#m3( zr>Z0CU6lO&gkgQFc*EjE4=Ue#pz&;2`Mw7rp;NnLuJzW47b8-SR zeRr~>S<1FXpEC7+4TQPr=H_Pkyrtnh3*bbo6;G{E+`++t_3gHf z+q?b6MqDa{*gB6fF?#`+D~7Q#Swc7<46k&&%)&rpOx>=t$mwXkdE#ueckA-AH!g!( z3n@`B$=NK2)y67Y+Gu_I+R_r@7Rt9BjTf(S;nVxwezVUs|NE%U z2m{K0&&4pKj7ZV(9oa9+b0m-2%5%v$+V$ehe~TCCdac#?FY8$$js%dMbzTQoI_{+b z_qNJuqhfFA=~FN)ITXB!>Y2SCYWkH-=(d5rey&Cx83l#jc9I*gKHZk#9F9w`%n5Xl zQZt_FmOxbW3$%KZ@xe?$=W>Ey-bs5=EaG)A{xA7wJ(BUvi-Uh;MSXn%1oeedO1};} zio({Nx@&)R?D3N)h%{#GS08NG-c3O2x=0~X0-vl z3dKcs8Be}wWv1U`pp7iky6*be`o~xwGNa52m;cY&AN5+R62OF@37luytd52@Y8|dm zQKh=(;*eDwGW5o~EBKpTD$`}iXFV((s~v>Sk>e`t#-bF=~eJf`OPS)aOzXzQY#pdx>zOn4)UHV&Fts!5(bR3ph&LXf|tZRr$1QHBo z1>!NCcSdDL=n@hC$oFPt8>Cgp=&O)zJ=&UPa*Z?L*rHb}I-2nXQpyitbf@$;L-IEZ)$ej!~kXQYDs1D6vmje_cE-%vk4tG4BQe?^PK)d7qItfLy?kHEOy_T;2^r6gLQ zzOhQd#;Ra8sotKe>YzIqHCpbsXr@Y3hyN+ED_259{JH(fa~0;1Ecq#Z4GwPd)rKL$ z=gJf?^KNfGLSxXfu;9S1_on6};V~I?)4(Jv&GV(SqYICwmyV8HPqg&3D2YF(rF{@H z9>08?9>bcEqb?YD-B|yT;3{1zn22k#G{-w&_Se9`>tK?h0@?ILjVCpFoeB@uUnVMe z2*0%17;uC<$x_qt5BuCbQGxjA*2V35 z>AW^fhk+pvvk#lo+D!SeV!g z=~eV$-U7lX7VeQ13cq}&B`%^AErz&x(;n-LXBW3xJs)3oHWghWUv=W$C4(c zQEK{BmY+N|Wh#!Caqg~fgJ)c;S#cT|B>kLW>}vU_IBoW?zLtq*kJJRzGhb*!UOiD+K9;BK>Y{6bg_zU4uR0(!Fi7 z#%GBTr!7Gf+8LBPNs%oi&uYte!y=7trNBv!dt*3Vo(o3o8t;#1L2;9XXTOV<^Y)NU zHIuR)F<^R2j19>2E0HF~#Ktgc%NCthj?dojACvSAmh!pWZB7m&o{U`5hmbt6@nwxf zGQXil0r%jvD)!voN#1nr72bJ!hoG)VnZ%x#JTXn9mcI7akdQX7c0RCf-kmd88O{8X znfWJftf=Tjr!6Nw-Mg@GpymuSh~&j4Y~^4*fZD0^mT$no%U7-Yq>R72qJKef5X)k) z=^vE`nZUtH+bjSk&Sv=gn?RTrts(sG-6#NIluJw_6hA=jy`hV=-WSE)Utx)VqGfm7TCfcA?ud;=a z6hjK%6})~;gLe+PS!w9X947mxYLC2RW^eHvT|Tah$(47qIUF1w;Qp}dOyKhJFCvav z+9!Za_3XK2{MsfaBY5Y4UxbFw{BrzPOUn{8r`y@tt#1M#3JA@IpgIH_7Sy!_T5Pc} zKMT#qgGUPpJ(QAh$B^WOsFY5%e7i4M2(s?zn3&ge9=YFOz5|dXo+uHQl`gmsf!8%K zJiIxW`3n??j@%^VKvVmv1bNu{uND6Oop9CwmN!M{H3F&YD-*Oo(#WQDfrx9o1ly%J zwi^#&e-YGi(AExsXQ-xEgLN&NuO|jD(f~K_o3pXCRXD|b_-`)Y+5{O`dcR3S*sYVA z`fgLCf?u-0gdpmIVVoAp2dUf zEMKv{$TG8>bdH!s95=NzudN!AS>}qWR@-5_2E4nn%~5Wi?84jpne_WbE#{+psE7!@ zys?UC5H&XSK6$vD#p z=*od+|1oZ|amhHwo8E_8d_UXx9dyIJyeg~XR9{tD**k9*=>(EjD5#(YRUMHCe$SDX zEbgdQt0=@w6B6d+;DNRc)ZgE93cVy6m(cVUY=;F_Cs>n-`J^bYqwrtAmzK zr|T3y1a*X9qW?O?aDLiTYO*y|b*F$W-4!Smw3vY921#NnP^I8L_Y_3o!Px}qWk#;F zg^srNqXfv4@v*Z%BsT>{D{KHR*UDFm8EC)G1!o^j*6hwHDfj8ZFrEywngQo@{y}#{MSS^Yz zxB_DToFUtj_jwTZW+vkDBj$zkmP>Y)3dC);=Eyul-S+sUh4p@M}O`F1(N;`A7D* zj3mZ#3l5`RpA17vObCH|NwSNjUG;v7mh&0^S*A`;-8q^q@oy_wJpyy*QypKF9pPdVo72D2JS-^K0knx;_OmB$5fR}7EX?>j*}AeikB0$v&cgImDeK#9FPhouf-N7L^TIqI ziR*UtD`roTTmTs#!a9|#T)1akwDB+;B!wv(diwg2QeOe;zjtyDIb)qcf+{%4H{qSZ zR`e)en}drBAEWsDZ!b+0`F&XH@2Nw^F|-V#2C+FKfbKypW_D#bX99}zz-78yp&%eI z3lF}JlCWt+9n{N3+JGqt$yCz?xLI_12|%?7=OB=KLY7KMG%f_|(L8)#Iow93UG|%k zZuDps4{xpit0Prno$QYJ@UuA#8VsB2Zi|hp*l)GB?};h-pdom@dg&?rdf3uh(D7^d z6J^|2uausy%o~Uv_xbpYj)L1Z5CrE01iA-9x72Hy`+l8Z5fYN%o9QMcevKoK_kd># zBCMbOBa3F8Y3T;4l^?SN;$y@G__rck=ZzxX5!W|FC%E0S*qZFd$D5%#v_@( zk_3dxe#qZOBWgNC#o>?TgZ!e*Fll=z=soACwyfuxc7Wj517iAxHkkk`{#-Ve&~ctm zxynC0I=|q4?9$DKiMNf_ z4}{GhmI5nLH{xmC4dndPHKiSZ*Fxq$UzzTwh!ezg)76fRNYpCqF20uFmPJKHH7uFb z*IhWul>fdsOhoCZ?TCvG8SX!=6|LMJ#XK$e~`>1pv2{2~3&Tz(jbj69r|3YSeR9d)2GQ%3Zc% zBwkpYPFsxsoN5{sQF-&L9SG|6I>I%*g!uTD76?u%YguKRo0G0j=y{W^D)xU&wEg`3 zQ)Wwus;5$(zBM;Bh2OvBK%>^NY-`(BC%q>+Hag?Sg88>!U4x^8O}eeMkM9J>Gxv=M z2_H56@!!1(oTF@1rQE4%+9#}We`9Y_XenVa=uTj6rsd_GGA{=uGh*NN_WtQ%#0)Ju zI{E}D?oDe;>Hu?uvOiZlI;*5bpo49n^T@Zy5sTUf4q0OHGcob9gQqvAUM>nifH40`m&p}=c}Flxp%(Ac$}Y1SIcRl z@Vl60>_dG@mr7fY&upW2;2`m$_*APlEZXK-0kFsrd#S@U3uyu_S__x4_dh&+K6Prb&N zLR%lV_qWKKH&uYN1q&>_YWZ*LKfApyPW|cjTbaMo7R9n8uu)QVv`5EE_*GQ0GEy7k zoq~a$7J4Uu7uW*44!cBKt; zq3oPzf(_(Bj)`W|<-C*s07kYbujuLN@zgFM;q--Yl=3m_7%gAJ>Ekbusd^m;A~TD@ zjQ&qIZ!H9}{2ft((|Ua&?4qo@N*uba(6jqWxHX(!z7Xccp`;x5!k*+Dj6$cFc+$D1 zV=yws29(mvb0k<&N=gb6Sl`e2MZA6WK+D->%XBo~?L_ZKh5V4T;;%vJt$|n1&FvRf z?wb>|9>1T@M{V@jv^C~)JzPKb{j$6EZP9Prr)_7RYGE}5;A6IIY&<+_J?Y|^SobUg z_0|G1e`K&)s4{H-T3%c$HJ`C>YG}w7{ro(jE1@bhnK%8Z^`14;xl*1&$(s@LTp(hl zZC%{nWE0JTTkp|bil_OdCIZlg4v9D}IJTZ3wO$v)z()n%=;1t#x|hCKfDpb0XdCo= zgwO=GHn1vbSs}k3SMo0o=(^#anmTAD3*A`Ib=+}P7d=&=Bb+;D1MG&Op`n3+h6kE1 z4ULUVck@zHKMP!f2iaz8nmBX>0wQ44LMn{EvLhQ08s7gB6p--11-=kYYKn_Pw@QSY z_|pt(RwP^>Sm)g!lh+gs4(4C!_Fj_pEB!j#I^iun)9PeY_>)}buOd46X@ zRf++?hVaKCp*4LJ;Rps-|Nmc(B^R0h>Q|O!B5Y@AZo&Ei4hn+ddE^E|% zM1QaF=-xV5b0#aSLpWjnI^YHnNk93a{DHnR3W&}LILzaGeMKQ&`l@OLta?}lnm)II zxVi#B%?@xBWu~S!gtZuo1yIx2f*eXtPR?wqZd{)+9QSzN&%HFPZQF)75K0JYF!h|# z3mY>y*Wnesf|CzZ5Tr|uVdeAq`{-t8zALqP-Am@;#Q1Nb6};yLZ9*;gAPyuC6)CSM zMv3LSvp)v;c`6DD_^oE3T!&LLplaPSI_SF~7CD4?DZolGO97oGCpGnP*suP6xO8*Z zzH_+!ArFY$jjK$<4NPUsng;~5;d6a`(uUzNDL|lBZukZI>L_C`ckk^3bcfIHS`_ZOx&Q?(hSk=kXWNwPz zf^+=;Ozr&VD^h;SghUaXVOrYScAFgH|NDLa{D8J}`0hj8k$eBgPo>rj*--w^kNEqE z5BJS~MtJ|;zyDk*M})s@xc~k$cM<=YYX9GtQeXl3FS74HFBv{*!_I(=cdtLC$ zUnYF|-yDyBUf}=Ff5G4BmH+-rL#ZBJ>ofoR+eR+M|CcTN-@fes>4oiN;n1rdgO#Cc zW(l|GJ(L&Tyy*yNoa zx4(Zjx$FG$@-oQaH#d9Ear!tMtpJw5ZrJx5(raA|w_XMN!y16YpzgfT28N5!E>{sq z(>q4L2ZH2M?>0bEfy=<`_?6E_0|y1G6BzklHFQAe2OV9O;8q8aNA$@Qx8v?NXrBW_ z2^>ekuN1?q2ia)jL+@;jI^Nd*Jj~~;|J)HLUxDy^?Uw_0SQkSQR7Fnsr1K!fHw8+H zYX@Fk7bFTs4I!uc5MCH8)sW9(xgvwCUKP0xoEchLS`;s(V2O(6yCwIAl$4axV$XZi zA9%eHq$dYT?f2fk38%i<3TI@H&~%(DARr(}kIQIZH8TI33t$8w`x&^JNO(S&g4!Ew z;$uW0P;fVS^`EPB&h^jDy31r_WCWWkSRl0(ZbEo740fR5zz|rbVIgd%6oh!2I##bE zoXc_diT$NI{P6Dw~0a>^G;=q3Os1_D~Md4W!Zi5VQ-Ia?Tlon`r=|>)zIaB#qCRe5H+1d1GVam?kW*f+^BN zgzTmOpKhR%%)t@=zM9%jJ7#tiNs^^7zou%LvZH+~O^u1fnsHe6*2q$5B z0blf(U;kC*RCbP*gm!P)hl)XVC{C808wbc8;Mf8~rkQKPtTCE`@k4zh|#u zCSwfEK-~vp@sEfxI)^tOu?Wm~9HP9!q*(@Re9|jsuAAMGPq3JnFK~7zL8M5wEbvSS z?cN9ggn(~TInVs)v!FC828Mq4jptF))E+Anylry)j(3d zgcmefS@lR?p{EsgujF3(clnR9tUbt|xvC#Kt@M$3xVa-M6~X-}GS%02ubNv^x~0HT1i_7uad4_S3}bzi<uG3 z;mP3oJU6taeNzuVA+mVL&$!ZG-ZP3y92tsSyPlhk(b_DqMKyt+W zLCq?l+deW9b#MhCKUDo5bSq1p` z_|`qM(V8E|_JxC!2!S{{p0u05+w(bc<`Il>13g>>05*XjOUZdxkn;KSEx9(hB0|Qx zg|B97bqQ`g8Q{aeBPDy3ZNOo&P zIy%<#7sM*dkcGXM2AQRDVY~;L_KU0P*#ET$?-2f@b&m28)1Q7RN;R}(Z;8SgnxUKa zyC0q%K~EG%N5>r1innTNJUXAge#JXkOip5ig)aqsN&#Kv>2Ncap<2zt?Kg|r-`C$C z%0m=tz&3&vMs5FW@HH_p@!{j6kdS+Ad6Sc(KA)sTlJ)gnu-@LPg4ABNijdG}dHsm4 z*RK=!T&L3{2;r=$i>5ReK=Mf6$;oM0t=w`JV#apTh@qi2oW`Kj3 zq)gg~Upk%sCcfaUYqIdT-b#HEshFdY{R~jL;^gA)N>Ua6d|KLfki_w4b+zyioteB& zP!7@@AoO8|IC66o?i$erXapdxq7`;3(QFGLGc87a`0UeYrOTP!aE3{m?zw*A1vj5l zc)J$@96QV*6PEfq5I`(mPawY;VMM~*64yN>jioMWhs?}uwa^A{yTw%HgTKkr1$(e+ zX2Yw6(&Ymb&#o&5TvpW+qK*lN#kSR2UF^@yBV6-ub>QKUyPIk$wJ0HU&bs^F>i*KI zz5se6qZY#83HVktv&o-5TOZkC`>(L%TwPmR8}{5u$rjjwp(o%gLI<>n$i96G0*b*R z11VU1b?_}Uu@j0{7(-i6&QDlQw*e3jB{ylil+;wED=7OU;iX<_R6D%icdED^rG!om zCPqeTP>Pm$p*@bBR{&9vi^~OUq$JO6sIwNTYia@m0$}H-+=`Z0?pR=Iw}+OHP$LW}Lvoo>iAB5VZU#$sSi{YBmc!!< ze2dgY(*SiQX$7c2V%Gk-VkXg_b8%(`S!kJD{Yf zILrcB^sGBKy^H#T2sv`C7CRhP-szzSCqOX&zi4~Qs4UmFZ%~nt?gkN1K)OM?Ly(Y0 zx=WCh?vidv36T!z?gl9Zl@RF$DJcQx;QzeO`_6}1vu55kv({dF?JryKzOU;%kK>nS zYP=-sgK)M>^X_(MB=V@kc&I4KZFJHd28_q!Ye>Cia6+1PP zT)nDH|Fty!iB1-6qQWig4MlHLu4H6nXepQg!hyS#toCuvkLo89?8)QQFUHl6#@26N zd{*KLmX=oXoiuArE>@m?C8GXU8aMA5@3A6jRnk3rWY&C=#>t1y_5sk?k-xCdP9BU- zx6y@PAqXPfz`FH%Wo8_mX+4YIktV}f2+mogA3SoTf#>uA2`T{I0F|(i6tIt>PVn~8 zzaKQ8G5ypkq~DQH_Q9d?>Q_4@DWnW&Cn?fuz97-J#89G#`VrzdC#A)Gl}=!0nO zr(My@F*d}0qD+svqs4p?!iPG@%e4JZbL8OxFN4ME2;I{BHv9Z=Im~w;LJh>$A?>`T z{TMDsw6wI)Xy*#mE9ZQ#W?kU4z3s@13JKFCWkQ6ZHRPr*=9?IsznhT5f)GZtm_=Ww z47|oR-^$*`lMk9%c|XMH9SuUkwxHTjHVcZMImSds?=cN0!anjheq>kO@{n1gOX`a| z1w9Q)reo5B?$1gFCxKK>J5GVXd+&osk(&%Xg$FqZk0OBDH>YSb4Jzr)&7_2=qX z1|PeoV;^0~;pv$kL&D;Khg;eko74A#hP3#rrr@e&bt@OR3IEv}pyz(ta5dP2;vh*V zRJh+5(kb`urybvM?+;8Zs1#jku(FpijpQ$XUOp(r% zqFkTC;bcigAHi^0QTFx@Kuj>}FX9Mgz@ZPz4sAMrR9X4Fo=iNAbcuSg$*Wgc$sduh zn3$Mc{5dYWd7tE<-jZZ6OTzBay?I|s%*_h%>3o$b3bOm{1_WC4-4EAq?e1XUit|eU z#VCAxKq4N{jP{h=KC_^uMezL^9B!SK=LbtiC>E|ftK#o-A1w!>hjf>XacC{B!?;HL zhUg-|^F9aV7it0?rWI) z?gjEI+5GrqJgjGlmBdhM1F@SyrFTQJ;-}*jS*<5>?y|PT$KOsfal);fuv6+6zj(Zg z`9{<~VSe`|n{MqUfY5+)O7Yz(!Bk58V`<6X?F={X z(-I56c#07*cRc*eIDL#b+h`XaqO;0Tdx?r^bu}H{2}-BEu2P5AX7y=xEsrDW-HAFr zVe;ns@}>FDJ929#DJ=7u3%(a_Czs?R*$o~pruxq{C^8c0_SydiYco&2(3%k}Zt@@Z zA|**nr)$1gKHh4flC3K@vdJ+ot0X;TnY5k5#D4QG0c&fxy}jPkSixtoPPJ-?c2@J8 zLg}gg#D8M}xEnqj*M*-N!4a42#BN^Q_bh{B+U$n4$p`N?n+_p1p%NK`-pkz`L{1cv zSfE)Ea}J3omF#@T$4l*|4yOi;CsuEBgSdRJ+#MVoxSet`O)z@k^yu%mfT1o<&yk?H z&Z;CgzGra#k9wIl2QP2R%SKKX7R(+JmCA)lqYQ7z%4=m^HFGGG0Vmf}}Ek-bYU1 zZnVfLKUQDIz?fpCk@q4vA%Sfj;~$xou8NI2K6x%4Qh2)uHASMAHC|hMBS3 zb%0<4ywcnY6APv+I=Ow}LPlm-7nbC;PqCuR5zBjFmf@@>c`vKcUtybWz3rZU zFy*p2VGJ&5tqMJ3;@QVH6o3Z>J!5i+KqGtti3^iq>*47v92~f=N8z}%Dw4}TC*k#i zxm7Gc`gsf^8KEo0)Rv3_Oie>#&)}jhb9#s$F_8Jx8AnuRQBO}##UiJ$NCW|#rKh!8Pdln#Xxf*g&;a$svm{>Ep>;uuaz6LrN@sBnEcecQc>Wr2n`%&jf<>C ze50*Ra-!C%aYz&y8!LoKUbVyb`k`Vaq?e43V{ZiJ-A_xtj>CNq;fdx+ z>#$!pYPzFV8}4=m$Rht1%&#!R@T&@Xn-NK#d$pR}!P}B@9jM%uXD-7p=qQT0ZwS+u zLNa3r^*nG1#sqxWzTboBevV_Z;d|VjdIpSv5qV=#Nsfh63)I|k`J$lc6SAqhZN1v< zYa#lHdY&`xU;h_QEz&g=y7IE4;wZm@;NW2PYQlxJuhP@lDBI7KO8XelFCW2ZXU5lL zoC`+D8PE)ePkfOS09|^s6)@CU`pAT^(tzyo@d(p-dx&_apJXjsk!j92GS2Z zgFeTLoaW0}n-(8~wbY&~&Ra+z@F8dQt2tg5@yTqdLXN*WMfh}zVt#kGw}DiA*lOZJ zA)Ex7=4z^(y{ChJ{epqb;a9u# zKqFjV;bHMCsO|@g;wP$vWgo-@E&h)4qv2M2O;$=$J;38qCuFD@yrYCUBe{ZU!N zmUM4u9W+h+xN;3D&aWR{p5pjT-ZODRFx`GxZznF|h@=E~+TT+MnZs~V=HAGW`jCdE zLwbp2>ofQDEBJ%|l+4x@;hBycZiNT3cEx);&* z_U#Z%niKThlF@i0W`|Kde!#7`%c#7^rr`Hq!pCT1C=&W1B~%pudJ#YYcK-l-$}5h* zBS_ZR^#rNNHVsDSC!Z=sHCb0g4L%_u3gzc;zmqJBB32Tr*OM5S&`XGOgP4k5X7}Ox za$TU{*q~y7u@u@HA}?ys<;Q{XLbqN*iTHu%!MekPC5|pbs!Vw#MyY6jo)%7Xa_$(r zQ`0E5CTrK_0u;JST&rTLDujbNg&LJ@o~*&@i?MD#ADI_krI^GGknCW!oe)Ww*cNoP zB&ODow zK0^0L@hhWh9-`%1m*&n)Car=f>89wQmq|Y2M)-sKEvYYj=?}lJ>ZUXp zwu^_cn3bK+1|gJwC?+FG7pZsoGefWDGpbY<*>${K^KhMb;)T`|drLf$lp6TU{c;Sv zMPUwq;p5^0-ps)e6}5{#0T8vtG`Z9qhJO3)e95FWHZ?_%rHJwLLqpVqUKq1*?s&?= zna8A2(mSirXSn+!9P!orTdZc+h%cU^dESZ=PIYu2Qwpp;GnjEVH=T^<=jUO(&o$aW z!($OZA|a^Ms(f(SmYG`usp0jiDApvHyqfXxDEeZ}l+N>b>45-VN9?XHb2f27XPup;f`0 zAf@25r)b`Za{7ch8Oo`xkxpCsatKFi;f@B{BbH4oP!4K<|75ejoFHq93yTBmQWvOp z)%S;~W|v#gRoQnK%vt?M8ka>%Tj)NCcoz;F3kwUt+%XO} zjH59TrfM5UHh+KEmhnLvB>U}uNjxctCE=!{(hr}(&~{rT}_;CG>A^BYJ9^eFE3ASZr0oY zd)3VStEabgX={xZNCHRCC4=rb=H+|_y$akPitnklsP5u=gu(5!{PS%Gti47)D$~`+ z$~rW(v`yF(?5%(j_`_-n1{aX*hy0N`)^GpT6Soco{mdJdoy6iNbGu(9uKQTU$5;fC zII?H{THdn_!L)Xy#ApOQezj+Jt^qsZ7#=9Xm|F-S)Q_Cos`Dz*Nd4sk+UvrnTehCs zq&u~xOPL%(fdvKfe^XG0y2BhK$+Vc67mw#7h@1Z$jePpHrh(L2hL;XoiEo*gOH0I` zkvVe=T7q@E!*YMtPx64H6L?Rs!LQFCNPzj%84zr%lus#`1Y&Av5~!BmRM#@(eq>W`9X;mc*-b@ainP;7OjgMzA;rUQKk?& zgV(}t7qf)EKcn61UR7FJT2a9|%P{|gfY#QxT&D&(ngqjAoDD>k8Qwc)u%dxt+e$2F zXmGaE#FsnNe-gPC$?>63E}Qef@=z}Wnwba%de@F}rIW(yeX?Ig#;S6wbxH&zZWj(j zyK9Wa@bfufZ_u-59s*)DJykaa?2eP|5*n?l5#6p{QOQIt6w zjj_n?h3w-Y9KRqSFfY!}KV{qJY_R@I508p6`+Jm0ABvrOUtBv(1~l+$`*aeX!yMEM z`T%=b{$x;hmjyf*<%?87z@g`IyX@Q8*m06O`d++ZFq0z>r80|YKIO^>#9_d2L9y669LYL zXJT1;z=_*(Jo8|$j>cV&x*6%xnY?1F!1aA`|_KScbnAB6D+Qa!9*z;0&rh9%){E}H2L$;W}BcY&HA%UEmZ zqgWJP7f0s&ulIL*Cg2;oT`B$mw>ee*lDKKPJ&xwaYeHL=Cv2{(La!@;CM@(Qij+&` zy=v5??;cEFSB{dnBpGPm4A{*s4_9Q9&N4jH{bkPh%G}r@vbwR zG*oh;&d73h`H98z1j)oTM#IhesNKCUA7rtoCXYsaS|2TTrcx)04ylfoZQ9`yWz}vj zws}=b^1k;($f~uU`OOmxL%R-r&6k)08^&KdOW~>c1HXG>etPm*&;6006L?iB|9k9@ zr8rFA|J9L<$Wod253dXXv6rc5XZD=5asYC!Z+e=r?K$_@BAc44x(u@U zL91Gf^?&QkKeh>M1TSaH>J(dbz+-?h0NwB4diYpb8Jmvp%2ql8nW%>_453XfM+Y_Q zE}%#wP>+MD*IvZq2(hvrFigvICYNzs`sFZ;tMBj_zx%xa9rMRS10-UD0 zdM!rWM<}m=pLr`x!}8ccle=x74h;>Bdy|V*!$i2qFxW_fB2$AbK~5H9wPutfDWZxo zD2X7+h0f8~*!U1bM(IcFaHW1rD4rpxx}r{Loi;tu40G`RJuYez0UYA*SmHe%Tt-=f z?*KdIJdzw8z+};?pr9=^fJ;*~rLnV2bQrsv>ZudrG|e{i$zv6dC;1_lNy3PP%b(M@ zmW(=%hyMo%dsPJ_!u26T?qXK}E6UZO-mPu~R_8(F?Lz>nYnCQIs%mq5FiQN8K2s6u z95y@lTf{G;ZR2z&rzl`_*er9Wr1R%@LwftB_J7+uPD<o16->$Cp~fpy+Qw!E|^OXmZlZy!H*`b!+PiNPnZPqZv>V}a8{l*~cp-i7zA zn()o;kNC;gERoI40x|`YW3vBJGT2P)>^_rG1y8&+VCt2!V%0Gx512$hI6Dh_5OI|Q zv21j#=g%`t{LJm?3a$5;JReRy@!8&pRRp7%zLlEomtv zwP_%ZpDOI-#=DeDD26G9jgI~B(z8r@i^90Y4u>gcAXnl?ovjuOO4L%T@Sb$s?NKT! z)e$F3zvKB$#hN-FxMBo{yHnenj;8F`Y!B7nfP~J}Eb+eTUkwn(fC$DN{WXyh|6*)~ zK=0i#6jgDXxoUItBu$9T}K z=;&h|?TH|)&<5%ky>lfX_8>W5bz2$@#8}Jmjohk`A4UB^dk%p50td zAbl<9Jbc%(0yKL_R3Fw{o>IVSB@~pets%Kmu=%>pQZf>7>#?`8-}(pcq2wuwl|h}D zn~?aCZ9g#~vsKPuHCB|7WZ%2&=E#Ch`1Mp>w8<%ssN|Psj5OFO2=VZ`XI?;7rSYil zP*8wNcz2nHihs&S@Q1@Y2{28_CD}N=nUxR;NTY@sKI6h$;#1A258ma>@;fm|oSc|o z$eY=ve+K*lotE{J#BsZ$aSlZp89#1>^%0c=DtgH-e9BNo{O!j_UoVMkuhTZ)jDmF2UUy5D5(G+wzmNa4CY)uplg?eoyKCZ5!T zC4iuTzmhda7{buiI4#{;oB{jV)61Kv&)UbpTP87&PZ(1li>us1bBsk)+KF{d&$7-X z!B!^ei{C)Uz;N9nKedF$cHc^5ms2mUn_t;2{~5LJ#kefpkjni=?5M=NP=W&#u ze#lDe|NSJ$_07(===hn_&m`C+Y(au?Ux{#TXA#By0J6|#eevA>K|O#vbLKdau-+d9 z(!KY<&^OUey`cP*jVm6vw!Up^Yik-zMt)8`qB~t`Wg{oON%=Phd~(=(--9AIE=u_d z#|-x;nu|YNpE+m3v zS!S!%k9zn#TSR}!sqAIL*w9chu-j;13=W(@byIJtJ)yWQ3Sb`A?ZQuEV*RObt*~_5 zVLJYYKj33d|48CM*!!GarYAEii!192dIbIMAwE}lMaRE!_`w@liIL5!ZkVg+jh2t_ z&&Km$@;CeXt)7X5+76c@?kBtEP*A>GhVBy?bJ*l&3kBuxAMB}Xd}I@8B^L3)s;^Vx zdvZ@lQ%hDb<59)WlgIz96+L$_Dy)L3NnBbQ$;S^kJ5KXqcEm&Mub_5|LU*-T$^JFu zTsZZ~xCboib#Mcz?sG^nC!ax|>yX?}xnmtZvLFKgM+QPIyt z-pmYl?~Z)OdC*h3q&UW#WdP`L*mKppal;!4#uUG5fgvFX%-HFw6Ho|;G>s5o1dJwdK+Vn@ zN-(;DmJ7&~^kQ-F9^aTo@sL>3%E%@U{az%<#5^w592xBIT=2OMcAC(?$M0~2DJeBe z&2jIavr1>RBZhs-kVc#9@HmU-K{?qT^|FiT(@C$hQfU#$h9I}%I`B^~;agHt?s~df z8;+EJfzE5(dj>CXEJu=Dw&vOrD=NmK1+ixvY?iks_qWhH&d(9}{-pnxZtq-KyWWm8 zJ)MJt10FbFLA$IkkI`4p!~hnQqIb zaz0Anz6Wv!px@kJR^Sj}BrfZ_2E#FEhJAtZ!jYs#sUfS7d-Q_NBD@?Re~1t(1wntw zBt!s@WcZDtv9VRcJMgpB1Ha@DE+{s=MwRMSY$h!6FFq%m@l{ohAY0ApM@B@<1iSsh z!UKe=hK4g(1=v4@5;z(_8s6qa?mbChe8r;2`M0_HFi6Q~rqrjeYRZtRBQRd>$Z^H0 z4az=!XStX1^EjnEqre(4g41%2`9(@vr4{c zwUSg4oG4vz=jG@+8D6(EHlANxNJ~j!B*h=b0RXsC+0FU->6aHWnqGfL7I~XOz7wRB zkGr`3_2lI2A7Tj}s1`$Rm{AJtranU7+uGR~Ps+tXUOs|X08ZB<#%+YHak(Js8&mDM zx+=%R*zC6Xs^5eD2KwL(#K$KbjUS+YWM%E!A>5Z0+3I~gRuE^d=PksoX^t16EJuJQ zJ-=+R_|hdRt(e1-8P$Q?Ui@|Id~ZTv0}kc?P>=z_ZF!MVZ#x3I-i|44;NL+JHV?AR z-B;h;elKL*%G1NCCcjP>Ym{>m{D{5D-nA=h9oI)gMQ>nNXbAJCZqRaA&|-cWG3Vmu zbkO9s6Y}e&CB5w9#EEZT)V0*ec^Vs9Ev?+)9saLZ9RA($R_J7D2V|S@E@rju&4MN< z3goi?`B50bA+mIZ`P!)&+uNIB(ZcS#Ctm+Lr)p~_K85?pwtoE*{82B`F+f9I9S-aZ z5%=ZogrLWW0TE&}Jz|FA6Dt2^6t)T<6c<|$jO!`lqupLn|Kp!?pR3WCI#N<0_t(H{ zV8h7*L_1KZ-=zG(n;aA*31bvImJTK+-M7DLFokWyu0?+2TU6%J=X2b)_f-iqSjfJ& zIBs+uekBGLzNYAd?K*IXp zws`#iV37Eqj~kdo{vUcz)WM_5*(18i^nYVCu}&9o{BJDaKc*8?bNg<%ExK}X)sb%m zT!?SKeWcCXuHXm3C3Jy<#EYutN2q2P;O+fij|NQF|L^P`{~Lds{|hJ0{}&%~xM)nn znLLV@;5TCj%M1>&Um|S~e=~L^;%4{DAlLip|8V>x{VxX)0S*M8LT=%Y?A!p~=~4+iXW%I*NGXsp z67!cp-kx@)61E{oWYH*X-uu~*JtPbdya7Rt;D5?$*d8@x z`su7$r>5ZOJygp$d~N3W&#`bp`rnW0jR>l|VoR0vUBk!ELVtPd)xK^CA5zHdV0pl4 zI0)b2;+W=|OqnRztPEUm9Mim#q#yKK#m;Fi7$? zgk!~O^!J3ngGKL1YIK>z*iRbI6WvUXtEjt-k10MLD(Wzu9KS0|%Q3Ofl&{rs+{-na z_BH;xef6FN>FB0WuWKpc9=bY`6Y=gk{?L(d_fQ*>dE}aXFCX^{&U0DnN(WmoqI(P3 zd2ghh@3I^g;#eDhs#(=w8FEm6?kO--{CWDX$+zp5gC&D&?natV#jBzs%nME~d|PI| z2-?O)L`t$gi#cL2JV#wV%PTDW4xi*e?1PK8)1CskM`XM%avFRMiS%t68XvJ$uaPl5 zPY%iq%4eZ#7@Jb*-PQKDa<9e300ZC!GN2v{z>9LV0b$dtpI#?W)3&!dWFTbV>9J7f ztOc$r(19su9WAt4A7=?RL=rsVbop@rK?cKAn|nS^n{m{41F{zvKKWiB5ss{^EbG?V zJrOPBF~uNe)3aJ=C3UkdDi!uV`7tzP9r5nn*^}R!(59|cS>-ar2^*XYoqQ}M*ClLj z$&6Y6!0{3rgVDGgO$WxO&>z-gcLck(02Wo}x zP~X`*J4^OGjPSLn?>W2AWi8w=wl+4?CHfGecL?~O;{Hsld8F*dSR*{VF~idV&`pre z?PvmtR*-%{=%x>X$Nm#*7{Me%TikYdZKkaDm2lyNmoiwdbWMa;x%tiS7@|AM);J_# zi~nUIyopUgc3zpprlI3qD(;+>r14c^YYR3*T`lQ}RBy@-)Erqhcq>|0iFTIpMXR`K zd}~KKTk?_c%Ok$$s(TYE2TPIerxx+r36XIRqQ8E9Wsq1|JocLOQ$vEqk!|CutABng z`oFx&>aSc+UFvdrBG%Lq)_W}FT{2CChZtB0g|!I_q0^^$`KYaqSbg%82sd3>&pu^L+N^_d*L7jA)39hZ!37HHn~>&teZvj_jYJWu^iQms!HL4n0?wsjHt4&?A4 zNHM?WioUyil<-l38il?vKLr}rpkiD3y$CeAo@EKPTdZ3^`cuekMtb^eU8F2Le7{ozV978H(3&d(U+(xggU@!h%Czvi!@^ja z;G2tT^MM$7XF=z63}K(^j0Stdlf%iWiA;81p<}gLyBV9`?LG#H^lUHdxwTN-P7nN* zgdsZ`=^u!&QdrXYtY=St{>28XpH7oW-@bm!f1N(qS9LRWKoRjnc1i^nsC8hRvkKh( z^^Ys%{p}owAU{OYN*>!6U0P`C2OU~9Z%p2Giw>6YJy4LKN#m6M+LNEpNlS!IuD(`R zL7QdN_%D;hWbMl&BdWa6tILfZ?@EBsBO~@L_3n}Lhmdr#qveEDdWYWm%o$tkUg^CH zW#7!t=;ifN#_MYXieuNi&kvUr@-$X7sFMchIVFknU9FjmwAP?T8IM$NE~+NIJ`1Oh zUVduY-QnJ&IF}Y~++aU^Q6G9#EYsQVD||(a(Z=&m#&y-LT2!eyDsR&x%%rrE6SbtX zds3&=hdQws$J{!&HMVVo%{HDKX58U8QpsbF&H9s8TzI7#dnH8}dHix(DLW_PWl(nU z-Q!MWA-__WKsUIMB4wW?pM2%(YvhmTz?+|_cz*sd>!W2-dcWNnk+Ay{dBqg|x#PbL zqsArHG1B{E&WBBN%Vz<2T+kB7BEE-q74_6OiSDZqeIe(|n8*c0IoB)BF`;oH1X^M1 zOg2$DUP{7H5QUU`xRY@8r}!*kM<X%rd~@ia8gfJbG+!o{6Jt}8{8wTZj+SUA6rvjwdiUsaoT?4 z3U>arc`#XREp4F=prj$Ztnl^-=`QW7105|*1oW3r?Ab`Ce)@>-xL%S%naP2b{$C>1wNz#_zhla+1Xj`zn7N<1^K~Y zVai#&qn({OP?R~E&KGv_`2jT3S;|;zmg(u#D{i&>cou&A7@hd!6Re!&>P=4B?LJE~ zpOycL{H*ek-TC%PLP9c5rnOg#H}jx=t2zp|aR;xiaq zp!XP}R-n^+eS3R&?`MZ!HhAM|EgGQ#W@Bm6e0)LpXY(7&+aZx={P_E9HS7#MzaTP8 zF3AG^$oYWb35Xw1wA@-R`IsOKQgu*%1(||_5S+Vdp>HE1(m70J06)gS#6%}#R0l~R zkg!lS%hhq`9V?8FcX3azEm2Q++>X~xt88)GWBT9BFi@kW=X_FTYL9p*9Mw$5Rn)e) zh~%gqwF;;1xrS;7F9MGS9fvgDJBG9-`5)#lW(OZz#~S{tPkSqKDYTgy#v0zExxMH68dvRx_N@jLCU4Z()Dsryei@xMHe~d3xO*ou)iW@z*sPg$l z{ZK1jomm7bn)>U-c<&3-Poq#v>1G_S*6GH@(Wv6Gmtu!|Dn2LY*K$8`YMw+L9Deg& z-X>{{?ZL+vH57i=##VH#q}LiUZn$>B)X(BZhot@H2eddpwHdAP6W$Yk|J}y;=Wt+1 zkH-8n^!f+?G*-%6lp^bRNbaXQBcrQpkcR)%@fcPcj5^zGJ70+Wt(K5WC@^=-*m%&w zvnEL{+$u-t=aU^7dmiq|y-}H6rdx{Ox4^4<&bM_}P&x9dLr&%m@k7*m`a_wcG(&8P zJkb%!WixCxyZyiTrR$6d@3I~ZjN^r5GElwL^bmP%fOz-K3%0J^u9A3;&;31LY-tEM zBHy58QJ#~xs%K2EO0JHQ81qV#Sqi@?9h8gJ;Zm*hc-|EuOhdrsmcKM9@lS>6O5mj~=U48<- z4(eM`pZ+KSuEgEU@@XFzN7-SONf-r)Raxvz6(6(CC@TJorOFoe`j#g>Qiit;?Tg^B zffTOAg%(R?OKfaNm_6Z#J`U}+^o;ivF`><~AP-f0p~fkE1&&Dg3G2LYEsO~`MNva- z3omcIaS!r*o((wdAR!q2=5l&|o(8^x0nb z<;!0%aV;zu47s2Np2xl=K1z_jdW6d+-HX4T80)QZ9))a}N8PDh_920-Loqb2uy{zF zv8%($aCuU@WKz%Xk-e_u>$8iq1^y{XOD|s!;+sEVzl0TtmNXc<=3Epr6X=R{BLvo+bN_7w>*QV@x(m3eL)0HBe=D^B_B63%62Uh^XUs zSK_2?wd)S|9=)qN5Q-q@pwq`yn`m_MA~y>OyM(n?E2K?cUQv%mZ7O9$^Vz{w+iG~M zwnoVJ)`F8g2iq>w=LG_DT(WFj&utIP?H}ZKF20t>)!}7KStK2_!xPXxT*iC!*sP{7 za+Z_6;@YMuIwsjFU zECtm}|85k9fcF$kcpmRd&TxT8m&PNfp`1~y7SDzw_T%}u+vt%uR~qVi&%53j-qwQZ ztz)_670dNy{fgMy`v1lPRR3@?7Ra>n-7ItVo%>Re%C#+g&+oo2#M%06z9DKF@NUpB ziB+wj)sE=Zo`5SEx7DU*-LQW^(C+T;((&ryN_w5m5X#NLQX8o9%gZTgzut(oUH(y1 zdjXbH*OmT1aP19|E34$hw6xUKjRsu*6?EBk2O#*En6=w^BZd-vecZ6Y*9Z6{uwvvk zTO>{^mKU#++$&XBXnWHE3iYEKxWGn!ZV>9M(0mnWx+syWdY(}a>ajMa#-T3C`?+GKL`9(nEo~I>Wp)c* z1E)8kj?z!2!@@G${$BJG*LDf`kT!44a)Mx!=8R7=9WcTH@fcjP|!EFKefHDA(VY?vul$ zaz?+NN#&~K%4kW^h`%9w(zP^UqhphjXb?a!Bg`Y8O*R-T!|8zVXs^FuXib)^Eco7U z*E?z@49ABx?k^m=#?MSl2t%hP=`E4}Y6j(oY+MzZe!`J#Ynj9B*j2IH(YE_GjTa{nVWq2^hrz^Y!8zgPO^Q@7eTK8-kmhUG|zBAq_|MtOoW5#*?Dp(U8 z!bL5|(uIw$8Uuomt3(=qL&lqo+p9Ht&Re%VY}0IKBVd1w;l<4V0bXiWoocD2uaE5D zrX^{?xzmM{df@}eey*x32wcHZ2VxxPzd8q-4S@Wzg7-#aAffU#IzkR6A1tY`;OFA1 z!1xD(R>$~NtE7kA+ys7;N%3bC!k*menwgrnf;6efL2B(-5)O$+32t%Q-z#H-K~@l` zc$?Ak${gaGKUK56+Xu^pot@neJII>UDpI-og`J!wJ^$9`NDWfX+k_Q}-p(^Q4&tS9 zYievXDr*-HLWVaOCf9QvlNT2^hb0%Pr5bk%{qeiD*e}qwc4<&oMcd^bd0dD)?dA5C zb7$k*N|{*fiK}kNq>ZBzMm#EEd{L~B8M1cgrL%#VBHazzj)-{virdrKXY|`nqCpr; zU&Yc&v_d-UYPXl;8ME7;J!nl(cS@eUYvgytXwx63NF>!S_r8tr?|B5Z^%9?TG7i1( z)&jOBLiMwdczsD;8@Xt{2XCoUsLOSos%fPT@U?pH&7nJGraU52U@MkGRlxYR{zdsb zO-QWCAqNQ#Iy@*D(*-mE8{>&NvDN1-@&gk%01H@q4) z+})O|*$DqF_b35ygJ?>w*`Z=Na5FE}*v%Ye@Yy$hFZMZFeLFZf2x?Bv3U!dpDm!nC zYVd#i5IK-5iK3?V6R^S6DqT5o5S;fn3&IPHx){yq=PMQ zmi!=Lna!~IR!0TWWfq-kepXiAza+4Y!TT^N{5CpT+9{HlMM@U6unDNW{h!U$LP=IG zXsvY0{WDntYd+VruB_!iD`$!LL|o_yyg9v(b;AioAuf+`Ji<=*;AIKB(H+2|Okqtv zU5Sf^pCevl;Ts{+<^{Xh-bSr%3RE8@y>|Wi$yc~#rdVwQUNwln5Q3Eo2`P z{}+xM&@s;vCWadC0?}PjcKt;e8FP>^HlzRA$QfL$uW9cDn)6(rZWzf<<(h&Ahjh6( zJzW=sxR#^ob->qx_!PD~M=ou8#njhuo5HU~CE#*v4*@u=Ij)PrSJSAG{6iyjPw2oH z2=gx2tdl4Bf}rXEJQfc~Nbc*Lf*>s}bjc4e7cw3jAlS*nAgmZAn%e#H?_XMMG)r7U zLLT^~A)?f{64E&f3oW&^N!-M54600!+hCU3R$Ilx6m(Dzh&s6yj>opC3*5*~g4^GZ$jHBi9LX)d`Cf{*CmGG&8z0*V* z&4JcG>Q2igR-KtAI>EMB5j*Mx>P#bst`GI2=Daj9)*=Ok`1MR|;^duno0aF4(>_)_ zxO~e;aUp(G(~v-RqWCOj(~9FXMdnvgZH|o_MhWvylJR^s{ zd=t*+2?b}4emE@XJUExnS&A{FHe*|9&>qTU$s_b490iRZbC#umL(y>498DwPse#|4 z85&E=Q)lfhNB~j@g2FA@k6+yR|!!E~P8kC{xC@$=Kgw47y6h^y@KUcm&7&Z2P9hxYKj;CK7Y@dP^9@>Aor3Ciapad8(sd9$3BkbOx5S*OJU_0 zcqP*(rybe$WYU$uU)`HQxUXIe>ayDVyVicu=UYm*?!rq^3y7dG zp;agvheE*p0P_1jj|YAga=rXqSE?1s|FquW`)!jK5Ry>!+~W4z<7!iNl18aop+3DtiWbr!NuQIlPG`>TE7I?29D^d#4s87w@KhqO} z$iNLM8SLul_yo))`CoukW$nDWIG&X0y&xkcovzULf|nTrd`$jmK9*Nh1nZF=G#=vi zfVmDb!yfW+RUbNY=duslSy+Tx9ljGpTv?dNnw(`)FPebl82AQ5zF|nNCV)&A0+i>* zzV-Kg{81E7%V9r$DGHdnTX}i`UBCIWcMI*W$cZ1UHJL{ety>f%Gim76tpDXRc`-TP z7L!&i4?!kSrI4xN1fl|ouioE2ryaf5`S?*$q~_?ICHOSghEq5=cuRCX2%If0%9HZH zz7r$C*I6U`CaE(Dr8$M6t6VC8s-+#J6ZKoA7BOjsO8a~oS7DmBQhF+?0;~V8`Q`jC zN4W@l2CA<&il=-_BQs~7xn(`x*DB|(G=J4~IrOF2LyIb$dfm;g^UUhe{d1ai&6!ze zO_#F}e!BNFZ^>${&7$ALJ#%2GBQNa^6fKF z4ZB3pJ9hhX{+j7?)%5q2%(llOz8VA>50mZ3f8z0!T^5p2ql_v1&I%NKBvE}D$8a-1 zrojAid;3%DeJs5pONWp3I$VE}MA1ASr{j;DqWO6D8OP(vrD^R)#u^a4V`IfEsO*ts zlz;MqvPPWnCd(49C{9J_Uf^T3Z>W+V9tpj7N!VH%F%k9KV&7l$T9y_JDVA6-40smV z9VHQnP_tDuC1Mw4C$4sp$)H@|@oh5U{cMZ!7p99&<*TQe^7zjZnU)5>t60`&B`tgt z9Pg{-WOAAz*vfNjm9S`iMIWLH+ef^IZ>Y(>K>+qg_i<8)y(s=XL(}^2nQnd5i3dXj zUv_xb-p8(pnPaLpqC!+>_F081bTJJ@CHXZdG^lK_pTpWqM)$Wk1`ws`4yo+qcuck$2%&3J2dqIWv%f zo$QYyjZD41hd^pgl`k!}NY8ta(-jmikGSy3cm)Us9R&oPKBz49KHY8l(RdCjnxfKD zHtoiPX(rL#*(ztP$-FVUV9-Uhu6Pj-7__;yIdu5OW(%2L$376O7vR&if!PuVwZVo| zERWcSH6%ng-AyKre}ubjDdW_v5_;a%&_x zFLl4Gu^fP1NaPp~^8Ff)+mno;*OpGsmzDYO28sO+s<82LFe)VRbUSpPA3`5a($#Q8 zn@4IZ=iOYncp4D*m=(^%yz3gIo9@PMNzFz=+e*gZ7Zh~9%WtX-x^z3<#^+Y2yXpB5 zaCdlg)Xf?o=D(i?0yKAb{tw)@*?ZpS2QWB8^e-AUi9HHR7_6o>UXFn(N>3BrRqWz7 zA>lT4zLRWdd5ngJ24RhG<@hMup2vPZ)fpHUBXC%f*ukss;_dAX2=fGuS@^s^(|oIr zTKEdFk9WPDzuR|)|HcAlE*HD5RcU3}IsX9Fw*F`PyB~Z!P%b1BL*aNm%OfN3@``dh zeprK1)Z@}_{`|1Ua&)%Y9GzC*i@sQXMaFghC$8^qYE_Xv?7&GJO-~FAM&7YF$L%PX zC8ls*d>%G@K=7w42pR5yl^)rD>zj{jt;Q-mgXJoSq9?zi&mZ~r#=h5KWh{)H`?dY-@tfteAa%}J zqwA+=X-EBT#J%+FJ6MsP&y`=kQRzKMZIaX&jrI_wOjtX#<;bs)u@{Y^NF_adMzo~g z%w*yuUydfU8ES9t^i$}^8_lwcVeSe#;ZNo)0ou%e;;~g`(?oL%7x$gz|IJtru%iF1 zC7LQdf|FyQBD}GwG*eK(fH8{huYwGYVF52?z##*n+M?nJjIsd53soe;JVS17_Ym&M!v%(Tu|VH77tk2?{Dg_4+8IJe4+WS>Hjy9 z{bvT+u)uN397A?y8Tn@z+d8 zxX07C6+Q^*3{gbG_In8O>>=| zfdK+S*a2D!!fTMGGE-1cWW8W2DFLfzC=|qG%qnnOd7=6U3iZUSEULTTL8u2|UdG2s z{GQk8OVI8;JUrZ8f!g)njLMP$^5!3a}*6Vy>U4Fe3Ugq*gYLD!F- zAoJpdEfGvo>HymX=P_syAvFT-0V(I^D_aXh`#7G2|EQZQnK?QsZxk-R-}$xlR1ID> zSlv^h*U;d0AXWQe%NxPAxY-Yl2=@_Inbp|?i4=GWnvHGlUtm_3{ZvH6Z)O zV$wI9{n96*^Cu3Sl7Oh$t5?N_oeSE}-|{-2VrP9R$aLPiylqXR2dpOJS&%slmtNVK z_n=-se|M~fQgf<{q(zYx$09EsPFd1;`b39A>;<1B|NWtUC5LCDTkAUYS{N*pRO{uw z3EoXS^6|g^B6}~{{?SD(zEzfSKieM}>7TC+5ox?#tNvRG2X06)(MhZ>_LS1C!V(7! zu4oCEdno4|IfkNo_s+sDZ#HpcM1poU*D8@6G#2#q85V4A7pKF`Gn8c*E&lB% z!~ChlG{O)Ve@Eaq!@b2CF2r#8R0HTg9;s3eUy4C`^$vgm@mY)kvJz3@L}AlKERKnZ zi9KR4JU9sXI}aWMV+4?(9IUMGw{xFeL1WaVyXa=W3IyrS1c{5Z9vz^{ixB_1wr>5x z#G-uhZV6@OBgvcFO1%u4RV5l!+gHc^GtEyzL33RT!%uIZ3`A&?7Qu{R_vv&P5nplF z*>qha4y}siXeGnlB3kAAxea&b!9}2QbssC4#Qd|pe^Py_t5UGbdl?i%+u(F^YdpN; z6|a@m#gO_^AfW}#3R4$`*+;icV9IA z#v8@mTUBt7Eh6}7j;8Huw-}HZD4C1~M%Mby z?Jh+=-=O~__Ai~G^Bw*s)#+MCuUe%vrycykEIX6}8?~mHw#>K?2a^57>dgV{r%x?I zA3d*B=^-ejkb)MK;qNY-0*y*~m2T(d(0wHCB&Iv;+Zlma7@zHP6m~xz1zbH$3C4p! zLyOVI3+tM|OyCA8)2f}=^}H3Y4gUQc34*%7{;mE zg|Z*4VBe-^p}^?NyygB`?7$qvFSdCa2uLJt>;;-+ErD1Wel0cQ6_&M-kCm-hrvjZW zVwGoCDcZrkm#`CPmYas&hHeK1W*|B;9VK|tsO)cB|GZeGlHQir6bVvr^N?zAp_aC=;J2?6cYkpA9S zQ4@rojLQ%arD%0l0KYZ=W%}JmNd8St{Ff8s<4mQ$5e5bZ%&&+5uL#+mz~N+Sx*OI` zr&axIk*C*RQ;nFL+XZ%Er`0*=Ba%n|0g}Ly#qfHO&(S6r3_(QKiwPM^EYFU0)FD+h z)lUJj$zqf-+6zci&4jybi*sJL37l!I!i&h4yK85R-t!KRfzmzwpJ?DO+3wKIfzB1ca-syCh8apSg6$t&J9<5m2+? z`rUqda;#P7g0l&{g874QPvYbxu`d-aR?KY_8Uvh*{3wQp?-cnAjJ7`OAAN7KJke%+ zl#dY=?y}%`>iVZp*H$VwTaggYiO>0Ig_U+oZ*_iDd}hgmsa|$5+sTC0Qm>8f16Y^H znqOuG9h7gfC#t^I;>#{G1@dXZESayu2vOjeE-&Tju%U^1Qiy12Obi%QmVvXXEf2m3C& zEo|uMH$D)u+|}msJAO3R3qY{m?(Xj9)Ms_4DE22a4KAs5?hqdU79Pi*hf^}q{$OpJ zt#_Er4Ic(&82-3>z4Nc7Q`AS+(~TD}=71h^63ti`HzzAgwM1Vu+KK%DTGViv$b}SzpOp{e zKVAD#;Nmg&+WXxw)C1tb5k&k3(S1}r_o3yFgob9aOh9%Ubd{>iEAW_~fG!_8Zk&&E zY=6Yg=frV4m}ki*LxBO<6lk8{F6O2VD7GUZ$a_|p&bR@bAFQ_~?$vqNUD3>3X;+9CA11ed`^qb7-jpS{u&oddFn$>n!=7SXC0ECzhiXKUfP&jik!jA?uSO z(am_PuS4YO{*LrP9lYMvKcXGwJ?bUdh%_*>mM3>9co%aGv0DwpmBFB`8dj`YDT;!~&R0DA(NSjJ*cv8&VOwd29h20ZXYx0 zb3Q&pdu-U`^VI3QqRsGgfG}M>WKsZIB!*`ZjC1Q=9|mB)GMu9*-mIvs979*f<^39| zBL^f!V%p>I-~a^)4nh1NTJ{)q^!rl$tv@T6!}0HXr_#GPId!M-r{LrgztRIe-#{kN z9@~F;MTUff7H14N-bJ9cU^g3Bgg!8Y!%AQ?(}{KW8s*Ktev!b6B=-s)?z8BADBj@I zc6D)qN)!meF0QTsar)WQgIaOpNer+X0A}Vz@}@6zW0FcHp<3^kSiQA6k)2)e&!1a3 zx`u|>9I6B{{oy1&TT_j8mo2{fZCV50664LxJgel8L!QK>Cnpo$)mA4O%23bzq^xld zjZjKDijk?e2e~h*b?zG$<4 ztc4(kTCTx)YQOe7RM~q@?jTL48!{JYxg_&9EUT+7V-uutZ9`tl* zr+!JA!rEj8Hx~Hkwo`>+T+u%yZ^9uXBeUF_=}!#;kuWhU21l*R08W zCY3WJFnSg4uBwbMNr-(x65IyM4`UQtfNk=91W$>oU3O&l4ta^H*!zt4$zN^KZ##uO z;;;rc^|~=^@5CV`$~@oyKnhwndXryYTQC;ohbE6-*EmnEK4cs^0qSLTclRx&ldBs; z>*{4XjZUxE4y{gTGJy{>TWLjC6{tr&qLqK{%1u`)CC$gL{+s2|)z*$`w$pO2l~ULG zQbA(X7nzjaC)qZy-o4hY4kLQ*$At9ZcNbB>n>x#tNH&Ynl3$ivGmS7%RnU$l!HgC zU!O8FmuglOqT9J1tR^$Pu(!AG`}7HqQHNe*2*2TyR5odS$O3==uIj33yXmlIWm@_%@Fc&cMUqnoFu>Y*3T8BP-Y z3WCkhheisuAK~Kq3D$$1`RytgRXwmkYxT_!O|#ar#(QME+>Ax(@k14%3#X;-mD^`W za6$HoD4?%$+(>|3h1TtIwo?1Kr{@)rvqeNj^_(_(HzuL>Q({C>|ME|3x;U(5Q@tvLn2_ zyx^7%YcU^Ai-+ibBEj1%Cf$fYD_HM`2^t91dE?xI@ABVcD@!XARkI&RgCe!z!MM{Z zlKnufQInj#Lj?!TnxV=>Keh(LGCoGs{;~U5iRKoiRh>?UNR}1b%5=>oy@al2h&H#S zbx{I=x%ZmXq%dOW2NOaXGtySK-)29nLsYR822R-+l7E$OeIow1eWq(0BIluijvx~U zv9ckZY}q9!DM?aOwVpYmnvn9}64l{8lj_wHfa!A|mX$LyROrc$)# zU>v%;1?)gMt1Z}_^;`z6iOEI+TllSq^Ct2udj>AFSFxQ<{1D=(Xzl)=tZ zWi^@b@uS}}Er}ej2b!9uC}Sx2^AKPG78XFoF6%UEaRpG3T%|N2-eaeWeu{=4OJfUR zJ0mSE`XIxX$E1+D9pM3TP;@JNAtb1!u9GUy+i)H+>5IT|)=*#naDfBjSVG`_xxc>- z;H$Q$q@-Y0{k0!o7VGAg^ccle=2N}n^eNbcnM=`d^$iSy@!rngQq9pqx&-4XqUZS- z({h@qd?)M|E#ozDLK@&sHA1Vgy*y9iDw}_WXWRWB+6J8aW7TGRA65o2_#+Sb91;rl zO}dlJlsk}5+T(1mBU)q=zxy2>G<=i2!NJ7DWd8gN|%T&xag6j!q`md8>5qiK1Gnd~u6-oLf{^)FeCg#{Ft| z^mkG>-eF!rDr11m3-^7Ja#=G?$CctYqTS}v<%b6-e#eQ*AkKh`xnM^edriHV`uh0#hBYdJ1~bB3`lvKpC1@D`l;&OS_vER ze@5TSIFtePoin_ynibXz{HnEPWya7x3Jnh4+f5iKH3~MjR{n*xz)+Cis{cB%(h6MF z;AZ?LOZfb7WAv!=S38{wH5(I?YR=G#nAlK+6Lu5Q4JqJ~(vT z9TC*l*8UO0pxTh22^}nCJV$yce~+xE7lk(`J#R2uCr?yNtqtka8`2n}Qy$Gtk=)_; z*j>Ez@yBC4ox9hb-Y!S%s9WRaOJloDE|o~t+5?tai0soxB(<3%A}3UOU3_wJD2GuN z(j)f35_cLJq$Bh{euN_*N1@DuMNN!#IEVA=8i;&+=*DkgIPgEB+h}XK;Sz_)j z1!Kq`AZv!NflLx>4h;9wad;{xW0xtAAM$dSwtM`LbkO5IdW&{-kE=eMY_(3kqc z23^BSpkAsu(FYk}LPtFN)4dNQi}VS>Z9hgcH9fy4_CXM1fxffra|=qU?M>H}quvUq zm)Cx^4pr>?HSFBn6D?Eg^XcsrQqgmF@J?=kLkp&QVNdv98uR+NwL(D%(JR-whLl8& z7#yM0Vm+Tz5LC>4ET@3}1c4-J0DlM=Yj~cNnQZYjQD&s6XEsJj)t%TPd^uWPU6&DPU=u1|YwX zp`By;m_V9@9fj6EFqEy4ll1N>;w6E1PZbg0=5x0-#*S7(!gGcFOGdRNrp$ zzuD<3DB~M#X(5$OYV5df1R+FdR&9}IWh^Wcp^p{m!g2G_a=bpilSM!$Up?<*WhMJw ztc0W_KCjD=C;h1PY-P{)?_Xe`-c9ticc#%HksV?P^gWOjv3|jH>{$&J52=*4_C{MC zkxETqzz3oC*LvTbGe|!HleW+93*TXUeNdV9S}gA zgf*<;)ghSUCmx)f9^}EtJK~$46pV|{r0?{mbU*PvVr;s2NUlkdRQw5a&d?cagey1%dW_`1 zyjYFdkC7WGRQJ&iNHrUz%r^)1T0v^zA$XG51zuRb_<_sN4IhwduG7Y$k5R zKVQu@CN*7jJDCRv>dMtVt_du`VE*tdk;5uizVWeamh6UxW#!W(ej8H=rj6?mi;Rwb zF9Y2)7SyDknjdAL9)&)7nRSu`SUGF74;?E(1~4yxS&i+RPmj^LZ#Fm<)n-J*;g}yR z&7}415VCF%5Sm%|_@0c~u6<;X4fP$(S4T~O9s&pr9$DR>JhGfAH3C65)S^ajB-KO= z@kbYO%*=?+Z>y)2v+CKu$oGxkuLII>GeoNvjhEZ~I&6q7oRy0Djp|RYTXk?Si8guk zSf|0PJ;yG#8prE=#$(K3?oTf2B-#`H3pUmd*S_sb<-h*cV`Zh24+S5Ki)9ls{Se<| znP29pM<^SP2?@W4SfJgPy)2Q@Np8!R>E-3DbkZm|I59UHYBkj3zRgYykg_v=LN&0o zRO%S`8^3zVwC#u zYI@CaW#Oikl84O~{JU6`vLG+)Ss7yCVpCQgt~=UfDV6;E*En-J1VV^#2qCsJ2?KUC zaQ-r_8z5fC1@Gw>x_*c^92p)i__g`TY%af7oA1&5{5&NuP!K{ z9}8d2&HcM~gx!pRawU1tr2E|&41-}N*7V0tQd@f(ihhf(A?OM-=#-L!j1u|Pd`sx| z7Of92ZWn~74R#xrLtiAi>Ij+yZ?`5kfG`G?4dTx#U4D^9&smQm8pY!AdS|=m@uCyC z%DFJ4U<3Kjq6MOUWoh|Pe?N3VP!OY$?STKj%ayN_?gG=Tc>!`*7_}Z78Zo)bh5@ z%fejW(%8Jzti2J`OuW3)+W`_-WWub{o4iimB#Q*rG3c0=vJV`+1XJ=cnu4e`z_CS12e9MuNJ1re>?ZF|#Csao4uqGV+Xwf2M8K~muGwL&K&_SWhaX} z&@E~OWU0c*o8KCM%Y`FFDuzy&$uJ|u=%H}7k&k+uW^u~=y*tMomSf@1rvT^9mp?g0 zs;#9s8XihWNksu#V+)WLR+w8eKu8SGa>h%4GfRCG4aPMh1lI5fJNvrZ@P55fgr4iY zdtzLr+-x=E=im?i#AZjiY+z*-;(K@KKfQpa0?mre{`5KtKj4h?8?=`pC9Tx_$ih6> zNGu6Niei97#IogXd~U<-d0~G@R@EwWI{{^|kacKCh!y1Hxrih5w zhDzk=cL0?Ye=1D4)Gf0pA)&^pK~T%B@Tk>y!;*;C9SMV-o~Na?6_HO+w^4;!GYBO= zC-tUtY=n$?C5>U5%NHbH$axp@J2kES+F&q?adI4^E06?_6hb{AP!q}!R?@Ua{6_?z z@A*Di%H!DDRwa2C6eK{OCi(OFi2n%vS}rcG<`NK;UTZYLrF`M|L?04iJC~m}V$=DIaQ92$#T9mQ>P0lg(t#lFJl@Cq`r{Kfw*=2r2p~%cp88+&_;dl zy(-J#K1Ews4CB1}rourk&Ns4jE$yU;km}<*WVhWJx2yg<4L71_r;NX->%H zf}QXSknq?o0`kU$G&D4+sU%Zw!s^ud&}219?!2#D0BLxLzvC{H=U02Tit?c>E#TuH+%IbMyaL2#na;&2Ti@Kc1#XDJGUb`F%o4Q*-ZN z@+jP>=Y@=I&7E6~$5$r+k`dJPwkjwX7(9~lOx$e5_hz$rlF||{ zt{-`T=fl5sU%)wXN*@thbyy2knt-@?om^EYgn(PlmP$sn915Sgsxaz)fe)gG0HOs< zEzBPL8As5&wlJp&q-SM8KkgLf`w%;fm@^EjZrktj+u zt2Wh*=72sYlgO%9KrP_l+iUTZWt+Ay9wHv`gjACkerKkpzDzfku~t>VzY91_SOi>A zSn;0{a&lG6q(`pjmbuYa_~|BeUsD9smTcxY(uD_5;@LC_24Qsa7+#?cd2e@6W5rMQe&^;SU$?VGB&#Sv zFR`1|8@bNR`}f{{U1f`SWrCVo8}uT>WmIP;=UzVkLqke%7^>7Lh~CsKww)(+f*{ME zQ!VvS$P%oYgF}C&+Ki>{#YafafOzOf0R5{~{vj6f2o0YZ`x6LhcXkt)UoYIDYHy(e z_Nv3_{k#q1Ab)=KeL%lfwho$2V^AiK5seyYbQW7ul=mQqv7+*Iw zK?|!rSY^-FEplPwP-atx>6Vs%OK7NOrL}gsQ-p6#d_=030C60r8Rjjy|0i`X^IkPF z#Ae=zs8-JVzWC|i;pgb4?RpsD7EN+X3@`Jkm5irMmE!~bP91U~?KOY0)b-#C;Z9&6 z;Uw!fV>OWsh(0&rC4&Q&?pPx(ekf0QW1u22k7KiX#kI-HRmM71>H20!^gb)&HPJgS zLDtvh<>e27bbfr#y-oMtBk85LK5+%zG7lGsC^=cZyT0oBZ(c_!r+)Q3F$e24mwiY0 zyRUNhcb=<3vk|HkP}BFFnOWg5dD!TF zDk3h<(u9*LKUS8te13vbs=gNj`z!G-2JK&C==J}6XNRmOvFd9Wi3bsMxm{0IarWu} z_W_3#?O!ti0z!iJzeCrr|2q8o|B=(&JgaVQIS@2f*Qcmn6~WgOP#_hrpUbdjnw!Vu z8E|_!lKqJ+wXT-KJhi*8c0-m23L(7tgrv;{to^4Rjf-x6&a2PZ1Z-%UeZq4+KF?#V_x0)m- zojCcZMKX%M6=_LXiKr4bzTmgvB`vixC>XsoL(};ZkH4c?W1&Ku!){|YHTjMeOIR@M zqsGtbaeHC1Hk7Kih8?`z>}S1)v{+|<@c-=2@mpEZU*fz~;&rB=A=S_tk~Ok5A-ps8 zhV}JUyvUvGNvbs6=Nq9RtpAxw{PQ{Q-gOo&MED(?x4N=@%O~>-Qseu;CCd*5+ArNj zIHnhsI&<Fs&Eft!CEryobZ$dTJTfV$Kyk;#f|luhcVxwP|nZ2t^v61-^ed z?U0JH#Tj30s;R|=r%dMF7-rMOxYa5fQn4+(=qgKveBAvtbb=Gvdds5om&>Y(y)v&0 zjoIM*9Vg`DfuVCgWU9gdGj(x;&WAp4Q{D$yjTavG^V*MPK=Fc$9TS>mmcIc?2zG#*d!YT{K2@*Y6^}J*6#wO z#>6WN*)oHuu2ua~GErKt;iaAt7{Z3q|L=kDizGF;0?zjz#CBDDr1W-Byq_ABi(pLVWL?$ImL-bW z#ZtyxZjAv0^*!YAEIMo^iM;nw`)LlQ*$(G#b`x)qU>4}ePWOworG~$gp`aE)L~tf1 zi?Mh*EA2>^K2n@u&up2(J`rvjKWDF4^Sl8o;%9g-cX%X;uxsUzMlD^V2^|C3c&jEI z%gyI9)v)q>mZQS$Onb&G73KC?Hn0OGwz)hgXcz^V9fCdurtXKA@H*7V2Gs66%Tz%y z>!`l7qb8@Vt={`cSy8u~myau^|JWe728Rbwt@sN>-+^Wp;N7Sogrn%!!nUb#*UGk438CSgus zle0`;ksuLfCKX-(c1i+F5^IgUIxDR|9dbHZk93?4ND7=8P-m_VmP;AUIS;KqhYu$Z zS`8=;MTr_&U0%spJ)MdU`5i*&BxPSJPK{lia20`U|ZD z-#vRYnErEw{QbjtRMp}{G4;#W<1M=4ZW)fZ#q5W3{^Z_8+MU@O3Z&C#@spD^qGSvc zd}nt109iB7G@Hq1S;QnoB;B0gte3n21^YXt1ZE^T8(nr*S3!M@K`nuK{fF0#Gf$R} zn5;fzS-%!n=Czvf6GmFLk;G$_e(^D&?Zd~@BjNk@gTo5s1S!|_KQN<2=|rZAo-LI#h~)s zWw25hCB)MBZD;SNqjROSlY4w+6yqpgI;KQ>&huOPY*{qIYDM z{ij5CA_Ip>K8fUP!M}m6D+dg4E^8%9;xlfnB;1FtGsL*MH7RfYc-z+$n*af}C`7xM zjZvn9S}yCm1`SPj+Q#cFQF)&-#V*WN}V!xQsgwm%)g_0Cq?=@HN2eE)x( z)qUHe#-n~B0qqPSUbkK77JIuWh9`yw%b!WchMiRo$^zA(nck2xTT`^b%3UTqMTgFy z{b-~>RkXoF`5<{F5M4PoWH4n+{B3(+>x^QPGIi?GupFMoMvK*JUP{kNruJuf89g5| z*zdeRMOZZtsw|al4A24dTjnv?xS~7`-aX?g{AFu=~KHX(rkhuxt~^ zGO$c0l=N#Lc_+6tPbW8f^}Cs$Yah8|3U+4Jx3>&w+?82{3AE`vwG;IPW%rMgWFI&2 zaC7<6=%^X>K695Id`#|C#cUqyrkqs}BC5ixY0mVolIve9a1qrBQ?hsDwi-;;-n=RO zh>PS_bA#60G`gdgd0L=3N#-@0PR0{WJ&-rtzWQ8ry!OhV^V}MJFD2k(hqyd`2g=XC zl4I=8s<#0EiJqH)NUFPyM>Gr(R{%)h(^V(CS57~i^7~I_>m^GgVPhON4%v(+=DkV|NS+1f6Lh@r^H)o`MbtTrbtwO%n?F~uf|+>!#V{O|Hnxla6eq@%w&EijwHEa z$KZc|z2VQLz8^^bmX-hW;}?vokTp^SN_JNrT(m&jLnWgCImD-h*M} zKX2r?;2dMJ;!;repZ8p9G@UvGXh2mW2ZSqe`du2~k+8zV~{w zKGKuMjjd5(X?Sw7F>5e$p=mLBABX%|S#ekyxHc$UGsxZN;y|$o-dD)1eD1Ky3bD+5 zy4;>dP^HVumQ;bX05C`3y(QuS4=!@W5hz*_r}EXyKz0S`uhirvZYR4Tk2w5%eL+`f z4(&QH1Z@M+?EtLow{G8-j;6lJTMkJ9+x1{wzcpL;whvg}pzPMsx$d+lfUE{|)HPUU z3|iH;0Ljo&DZAN8$mhn%!{Y`s4De23&6b-f!VqUpMW_4%^rB!-ymjkVz9EF(8v)Z* z{@eJEzo`$cHuGWj2w)?CB<;PQUvCJalQP+@znM4?Pn&yI^65cebI@#BrTI#lXTji@ zo|e8sP#RTAdy-mV+c~OZitKY+5-VHr3Nh=ekH?c~AI)>+TNZD=>6R2ICWm4&wffx& z!eO%X#!rEYkUF@sw1xo#L95Zt8QPNTl#k)PLywb?bqY*F5G@Or;nu!B8;I}$o*|^e z4S^nkWc07GBAyv8$>7>thmP9kOxf_84a$7Gpoi`T6)MQ4!CDc}J~+4skm~LC0W~lS z2md7`h7|!&3j7L;3K@upLO7yxpFe+wMw`%LGAt7S06^!W{#Em>)}^JTFPWJ`KW=5c zYYMl3@MbCqQf$_usRW{rt*vcwS(yPxo>C6xUm_u6q*Nz>Qfb%asf-=jlRb{O2{~bEmW8)tRBRL>D+6k%)-$u6C}a`O z@V1cYVzG~pk+0ZlD#P&^PjzcI`6CTv3whALWJ-F77PfsB6~a{PzKp%23;oS&1Aray z`3ry(l>dk}7xd(xKEawe(5SQoDl$quj(NTaX-R46K!1M@WNou!>_VRedSWmPNq}gM zp-ylSuv(0~5Gs=@_Jfv*rK7GrZqE0sJ)Ezq~XV?5Ao>L`&O5eCozmWz4 z;2M%y+Nybdr0lIQ%3S1Iye8hS2K$GqMFJ}+pKj-IvMLOe*GeVU2I1kqHUBoR#P8W( zr6$RRCpgP)F6P4D$_|G~d>UuP{_U#d7p|AG<@V)%%*!7AsvY>k9Znn=n0QeUft3fe zdG+VSV&#^!eY1gC`7$$X;?kMCA zjDud3ogT=N?-H@GRe%6VxZ#>I09q#)1Igzq(Jb*(f%!3=N{&4nTmnC+Z{GTqOY0O# zap$^HJ#P4!7z4j|vmS+-y^n7w6hsBLZ*Q3@R}MyoJTkaC$6EbbP4T@3oiHpqXQpn2O;0cIkWcwoT3P z*Q;|Yy`EiKvD5lU(PQ~p=DTW@&oj-jl`I~k>$-kM2Ly#vF z$7`YhRpa2P1^wexq>wi~9&KZ}F}PE%JMJ3}vnDO8MhH@$p1)Q4@)j!*CkW-U!)9XE zaJktd2L=ZRBbn@Cn6D#@fm+KrOm%6oTQ)y8NZ4TNp_AhP^qNpFonBBnkSwr*nd7h1S zB#(AZJMPYnT6@?#t}&gEv%#Bq$|uncl$kWk@lu%5IKF+G!sEOPFs9FAkdWBuaY0Z@ zf9JZ%FG(H=j=B;r$a}!J>$*0a2WmBT#2lNMdchl5SXiB59TpW`-&Rw>8F2|J1UMf^ zaD@qG>fS!xOBsYic!gg97A5>w2+%wLU3FLMD?L4uq7yMOu?3q{A>Y5CP+|`vRvcJF z3rFaQUF67_O&P3|He=o0_&9v&nJuQd5?8A^OeYcZ+C!C(r3ouI#|2_lTOxEbGo&h* zZ|w*Bk}fsV^=HhihFkAgD2qFsd>XP`Xr2!iGoR3ubRCkh$ad0|b3J*vZb~*h0jMTx z8D%h|D@@*M6e?<5ZClU0{8_*)_u~E6Ap5dDL-vTgoZVX1h~DvhP08Q;sPhF>EepO) zvq+}-sMAVxvC*_X3>JA)9<=*4bn8u}8z5clfWWr{brPW$5B;Mf)w#*0t$Ncr&h2^K_3>Mnwrw%{-Y?v?!QJzGb zn!P8qqptIPak9<^y8sFQ&1QYqJffv2NAv8vUc*E31do&sLd3Cq(1Z_WoM{=z74-GG zf%139U)o$%{^iotZ?euEYtr2`N4J3Wbygj0KMyO=*(co;-Qdt@|5hCV;4TmsW7DU;yk}zt}b(V)I%VAEKiY%H(((86|k|Iez3ydMF3Z_G;5C^fwRBVzRcc(&~cV={Z!{ zltd1(8m~?emDhj%nPk*%Norz+QmhuYO`7g0e=1ByAvcpjSbOZQPcOoKawA+&byGT4 z5sh(ZAR6n4xK_}{p)zU-74vYyr+b5n)KQlDt&VnLb|F{zn**;K1f=hU#4Y%GBRYE= zZWA>HgdJy`cw%IAly;84x;R+-h$>I}dVvg=f^4}B1w{&H-o$`-OhA@hSy4|x0moml zrAgB9laxCav3EBz>oAVNGmZtElHbDoR+_2@O9m3FZX+5(q05YNp>Lxiat_b>vJOlO zk&W27VqVi-_~f6n3FYS<@ET7Mmb~{0xR0OEc|Suf)#+4J?4dN4S>986DTR{OBRU&{ zUbK)?J$*~|n`)wo5d;_Sco-g566Z+K2)1F;QuBEJ&|nob3=<*s5~*`LdGjaZCq7h& z4_@LZkYSI(#}3e{S5XlK57|NL2+%E|5??-)62J!NA?kuynA4V1Y5MiA?{}=0TW$mPh#yfoQ^RGx z=3<(8kCml!ILE)3h^Y}Pl>WOHAZYkL@{CPrz|Dzt*{)fY`st|m15_o=5f%4CS^Kp> z(~J2bz2spjoQS*fm$mMvwDDCGZRvrlaZgs!*GCAYe8<{1Pp=mYx>!};kQ)|pQd(m^cZk!fb48aFD2$8Ot1lU{p|58=PO@=m1lqBUH(7Z-B`V zu(0LHF;NLvvw`6I!E$#6?p3Li3GwkYb#=n?$`Y9n-NI?x8i0Y$hyi7{t6CqdEC8*u zKYLcJRr3aqQR^LYcgF}tBEKh}KJc`yhq5u4zjoZ2g}=-F{JAIOo4#RK)HYh20Dl(| zpIe+mUapiy49NN3t_=8gqPp?%D=JoUT?fc7jt>tjtEyH(`3+D6qyJhCdm@x9DZk=x z-4>*%6@`mKFLZt*{_|Gd;a+Ok+1nfqeabYk+Ao) zpORBZ-|Bmwn$WwHPY>)iys}lCaVR-PH?+eM?>SnAGYX!b1lJsMd7MJIvn(GNgWuQY z6{d?Mepz2Y!_P3fQ0f^RV{h~2J7e47YC84cE4Ck!8zgRsn7=}cRVCx?VyW8eIy+d8 zax?F6q#zR213~b!lh{Yf^J)=F?og(mG1hnQ1gEByeoQEn+Oacr3E~vrS`!NUo-4sh zz3<9?OSm;g+tUER84eZx_DK1%!atIbg4;&VA)cGPI*K|yp+0u&S!N!+Cpgj>y^ zj9Ya7#P8Y5P1z-nXk%vP47@E$O|cI7?Z>3T&1ISQ5&D2%0^Y5X&DYEiDLC!_pzj_1 z936#tU~0G(L)km1C@yXSjg785-(O+27`zW83GnoT?g=;#Pfkx;v|%UlxH#2Y52p$E zsbFwtC&~?sUN++PNT9X^G660jVb3XSAFVw-GIDZ7Aeqvvw485A7lI((Krb)Q02zTa zyYnPHMIH`3RyVjsCd&Mpgnu9u6e{t5L4I!5-h%``Fo3C3(BcMzNinD~WD*J@bNZPOoE&-iZFvWGMAP1 zZn8<*u?Tptz4pu+`$Uzca|ICSwn)e9xEWZbb~mGr*EjZs5cTk+Huv5tNHWq(z4`UJ zmOU$rA%;?MFs{|mc%vCRAh3TYsKLD>7%H6yTH%a{-zN-`>)5!Ik;op7i#))vI*MmC zwGBY+uZ_7B#Iw+nIT*p}uka`RlM(*By+{H%P^pV?cU;qqB6vG51~>ZkQd!dyo3ib~ zvW;gSV;Vu@vz5+AE1*0#nz<8@y7~LCcEx3|IKKoIMqlFr7|Sn&P`-Ew6lVDm*{EJRrVQEJtt`jiBa2e)Y}$ z8`eCyvTE_&y_8}vPY6i-qPzc@AQP1WHSU9tK&!3^mn24n98*y4AsAO>@Bw}56-0W{M)6^fcBqmvAmt{T5WwW% z!UnbZb^81@_ln4yf|8Qmdg@^v^m57#J29Q0Gl6pn$DA;)cQX-nMz-3u1p$LZtg>8` z7ax&dujM^Jo4-Xc)dXTuL9aSl9$eEn+AD?ZHM>=7=|`c)$}hsD4$hA;n9I8yQ)YZ^%Q+O z-t2;nUdGwA@5^Ca0;junP)gHSUYJYB8wCUlTX8n*nai@sFGX@6M-#=~D*6*}8k_B& zThTbs;$EC}&(Is!Y1(SUq>Ymc zV~UC=$%qxN<;4$4Pct>FnrRS#=_6 zZf-p)_ECI9ht9x&=n27Uy~b~4=3YL(zWtj75(t646VVC-l0TcY9qocFK4RIMeuitt zYB7Q&x;fRMiV5#?4uwfK`iewV(yq>YK>}p`x1l!$8oFqYd!{1?%nkLM;w6W>vZ=?$ z{|-wQk{Rza31m1O7%uX`IJ)(EV>6NLd&=2*3ttMHKF9GL^ne z2h^Le+Z0I609?m~^9DM8=o}ykbYJcz9LktdWq@6;Ilbx{Zdd2nyayDP7nQ_@aIQmH zpaI(+G}DUzL8HyjKpO6l&i&47l^bB*@UhxnP3$fAVSvha0~F@riRxES?Npf$)BY;O zgr?(Eqx*B!Uj}n|z;)q#Oar~gob2q+%neXhK#ODi#!svM`mZ$4oFgCq5J(Gm#!J?| z-+-IKGBB(*)x=)M^{Nd)hAqbE_H@-JPmgW$Q}2G`y9pIilZV+`$ZuJS$nvvFKKTU~ zyxtPaqz|d68C%+@bKOvvAMEn=ucYjI>C|{}jjd7Sc z*{Js68Mdzsp^Wl9yNlkPXf|3x1+{=7sEeA zZEbB8*3$%$!C*{u2>@o;hoB%K343xfGO~U%WMt&sot>S%y+pvDpZa~cCTkQoHeP~O ziQnTKf;+xKXPl{Zb`Cx`$OMIEP@ZDe1M7Qhfr$Z|WuPv_R@h&F`U#N&yBYksUW`0b z)Hk5C|L*R2e#~S)0I}wrTwD&26YT}D<%!-7ZzvQ6bN)*HO$2 znw47Rru|THhu;aJNZf?!2AI@dE`myZ`OhEISFhe#Lf0w1o&?E$8KWRJRu#JaKi44i zuzePab}0QEdy}}rAIS4zV0xzFrwOn_5(+FaEeTNlfHWT_JK1+2iv&=Nyh^IakWC4U zQ(QFP$XGm+X~?vPH4P~Zudp7_(a{CqfJ^R_#MiHQldZumDi@DO5fKcN>8mk1*Gm?HRwYKo#aG(kv_ z@UW0S=o_ukr#~-#;sXfL=JYx%;Yr;1SNTo!Ie;`=&lHSD$aln>lQ+Pn6CaPiI102R zmQtN(N-q&NO^WZm@)xkN(UN7#G}lmXNdD}{x9afI;zXO`&Q`&LAsHU zmhKP`P#Os-X^`&jMnxo~1VIcyT0*)*Lb@B2lJ1Usn0eoOf9w8z|G2Ye&2l+_U!Ug_ z=j^@D-ax$w?!XRql#Z0C@CFlPi6jiVP?=i+Ul97>w4nw$9N?MI7^0!0FPKOd!%+aq zkXNvpBJtK(Dli$=;6&>{aaF&6qfIs_HoDFG6M9g(DTJU~7~5db0~*zjBT{sdw<3!H zzH0xzM;ogb#Wf!lgF%mwQ!Pleh9naem4Rl7*!tq4t)&?ZTUPNEA1-osm*1zmFWlee zl@esk5V?f)aM5muqqUesM1hx$O|ibD(MY46yVmq4j(pli?%nYkn5)3W#Xb2r2@8qv z`FND`{dg^{(+k3WLCLRC)l}cX{mOV6t3_r9xG>?0+;A{`K``2go-xy$^gdk6EU9;1 z!k7k6HwYS&baZ?W@9^@Pk8fyX_KWYG{pZ*Uxq0Z%Q6GIzXFPkqv!P!zzLCyng0HSJ zt(+n3H^wQ*pgH_48dEf*7B@r%UF1)RvPELMu%pNnNt2z;dwb)VUVYrujiO@nYPzCA zmPU(xmgsKOk&!X2sm*v7L=H9d_d_d@bp0=42VFoNK%5n2PS7!*S0X6|<&4}Rir20#PKFvNf;%t+r2 z0JhXga2F{aUSm5LwZ(k|YY{kCz|zIo0lfL{R-bldH+LK;eL;Bm1B~w@^}+pkdU|?v zREt*m9am(7BODD~+k<0caDd&|K|P`ySnQ0SnV!C@482G1s-$*lH*XKD1;&VA?YP(X(jwl9qJu zYvq*ET$)u2h>O?5Y}c1@d@oWgflOsM0q?L-j>@rJ4YYsK-$We2M||<%XsY?YSO6el z6420~e4LL5>B0C~1cmpn(OE`3@Eij=QVtV)IAV zpH)>V^dLh9Nh!@jQvrZ9xw#l^TC~nbQ;tOPL8ORy*SCR|_S|2__Fk%N18RG!)KUeg za5FP{dtvfh72)U2ZoqH!linF@X$e^$lU6pT+_5xQZEa_tz9jfo99z8Wn5DE3e!)V` zG{&VZUkDu@Fy}zp354HX{*^*NO#Jf#EvX;I-f8A&ufbpj8}J=gLl#01>Yg# zTWWo?Odwk0JQ{};Z<)|HhfIde&(DvcAPZ0x?yG$`JbA*mNAiee2X_Ji7$Xh<3*O`a zlwoVps)P{Xo?Uxh$SUDW%8zoJ9C7R=p?dgq=u6RNsM$hG1?|X_yZAd^_HCFm{-+E| z?>_YGf|DDa#gWIZu~C+BC@Ha87hB7JOKQEVrIpc{`|BRI?Zl<2DDmn!-J*9AWUs3=aLz}!Qj zT6!5By#=g2WbwwjwxdJxFx#JkrB zz@XftfZwez0eR%%-X+@tdz=TSL`sB=98;&+D8g&T1L*l8n)h)o6X&&lpLZ2JH^{ZN z$uW^1ZtH!f6vla>7IcY6L6G!LYgkqo4c(8QLCN>x$me3b?s(4EjWzx2;O4@X`XH^} z{n=hc6=MhI+*Ku2jaVt!D14@WGz0J+T8s8q2kt>xa?m~ABjT}jmxX?ltZ~2n&9)74 z1B?Ks2VyHwZqBb=)Kq8f|bf06qqN=bKnk7FQ>yfsv7$A+L+B367JxZx_Na z=@h)TzO;laL_#_Wc!;*PoZ)kNd~_rPj%P+jA3>!K1mk>oeeA!!1f!Bap>Y*)UA;9y ze2)kg!_(xwuk^qH0n~wMBCo7$VYVNskiaqm0oPC#WHrW)C6R?7Ah#XCd38U!>VxSN zm}hLgc9scN!a^<x(4RAiRgrs1USJn9Dw%}EpGYmjS*pqmJ za)KgDr1q@lmFt{h)mmb9-MfT@uLbp~ApKLz8^f zZ#^?JLz*I_>t1FD9@*2+s9p6=KGwr<6)MX*z`O9nN9N`lpvZy@Ad+CyJ$9ko6v7Ye z&7b0lC~G~o-8$Nzs(g$eWj~)GO315wtix0~7@gH`Ez}p8{N?9%OZ1GlfYsEY6r-?R z-sA1bL(7L}lhzx9#x6cU&=BZrPf|%anu)HpDkx2t_06E|99^_Sx9{|;-X z@yArHX>M-r#|`%8gWDSs5z)4}0c^lx#sL`Eg%y5NMYk{8mPB==ZcLWv!3*7U`3gpJ z3!9s7I8H%-lgewQ{@tYQD#2Upu%I>vst>-Ox8G5u;S zWbct1_@I4`Nrs{*@`Se5x#>wFn+~{+!==n;J=`%caAyn7r0xh&=S4I#{hTtuXbr)H z-m-#LTQXNx3QwgHz1Go);1#=>epX{s{Qb*1R(t+3+EY@O23jv2+HPK47>!qb)}yMY zN8T2#MkacTB-Lb0FDfdk6%T3gflLWppHV1rJSKK_*r%Pdv*~JN9p#?0zJ7jHDl^wS zH?C>cZR|0}Z^4kj@5z7cHhaZy0;T@+_F2}%#6g=d0%#&@noVD?;Dp%5*l22e z`F#T;(@>k1!c)%4Qp@D=N`Us!6@!2z$pFhrYPV2<)6Wnk!dIb~Zz#{Ox89tO>EvHq zO@VVJ0fGM0`u8!a^j6Dmp>FHzIY}xZ!nqKM01wn6>P<5Al=mgR0Yi4K_C|a`MohOr-uOGRS`y zf*w!cULDmm_k8RA&wuioFKqhrf@mT|<)bwTG$yl@QUOJMuB2qw^^O^uC)=T{Hy=LC zKtBdpBl6eZ@JvDO0`iu}N=gPW0tGeDK+R3<5e>i160IaJe{GM;CFvEo5!U+-Tv)5M z(W0IMC--yw76`B8j!Pkl;>M^!wHF#D%miG9wEfnsyu5Wl`FCjU6LcEdK9ZCe=PVnnQ7kARjiUP&3hSJoX`IWC+o_xbcn=<7U0)p&3(X;a_iTEFolou{ z?!puQUXzvZM}@I7fOW0|#G4s+}aB_-D z%#DMK+48dhZRP@};kDi$J$N88(He#NDVN+TRAsX~-p;M9tsjx2+lBs_gK4F{CnPlS z>lfSShGumOiz;n_;a9du&DZz+VrGjCU2T@(HFdxw)?z@ScI++XZ-Wfer;QBPs1i zHrr5%gOP7qf>WqI5J%Ac4fKjYvJFVpAP}l&3*rq?7Ihcd1qDgeK&Xc&zN4+3k7CY`+UR?~52y-N+ceN3X((qjekn{h+ul zhTIe;PEO8KHn)xOJJE3PKEw=Xtby7I-Ze5N5e*5QvDwfYxZvyDY-6&G;NBTma1^Caj`T)FOK$zA2>kh#Hjh=}K z9NDSue;i&>)5OY?@!LX9gf~b%BO}qu_TlTQ!J?EgDYDIkho_WQI$SYBTuk667vNiF zV_yG|wsdb}N2Hccy>IW^c1V}nw6wHjj+98T1R|zlD9~OK4UdfI#3T5MU&F$Sc}hEM zQv5;l5zmK_^QCU$jx0P)WQ5yNAcmo<==!2r?RvJio{tnoQrVN7Oj3q0(F1WfP7!yZ zAdzBM_dP$dQ&-35K&Z%rHw6}hByN@h`+M9_9>l8FE5XdZVXb5HD9-by4z7ja7@L9k6 z{P{BsL*5j9!NJc04!BXUNE#QBgvBG>fdx}d$W!^+uJsky`Kx@omQmrse=R$fbZX3xYt7fS^5?FuOeIq- z-jwn3&3l1~$Kljb<(&PmomE%qu;CW^{ zUHKiV&R-5o&>6z!O5wG_zejEXL3)n?-5ECkyN0div?J;nS5_9%*nZbQC?g;pS6UK6zic%EFU0ChP6x0ljEW7CuZQ4 zfqOe6y}^5^RKaJp)KS!L;pfePb&Ue?7nJ=s_)(KDY$>?ZKEH;#vQ7hK-=@rND)I8b z4g`a6!B&F^CpDG42D6Jzm=g>&Eo-m<8jdjW0puR(DUW5HM2*P!0UMa!w;ed3~+HB-U+B<3%ipk;fqj)WV+{9UUEd=pWy|Kb#7SWnb*- z)i!T>;hrT&OLFBb1gLb7e)okI#E*4WfoXl=w{JQ*s+n|;UfqZW442&>HuLlFm}aBg z#U=207nm4L$nmYj~o&Rzf!pa4E|SFJ#e4M4DN*^Agc3m2Ypnx8CV9fbc} zf-?1V4(xnKQ%%o=QR;L&o;@3f-V4O!;L+JgMsXi*WoVf0G(v{lW+t2z#z^A#@8^L3 zZN3sp+2#Y9w@N^?Ma8J3@?!@xQ^1+uY0a|L2SvX?RJG{=`M?%9#DLadjXMjRQjMB| zK{%Jhs*Us4e!Td$@pyO=!V3|)6}ao2-QAb5p1>QuNUbDd-COt3onSiR|IDUvP|k3&mQ>GWr(0!%Hss7DmTYx`i6zzMQ)TsPX5Z=yHm9>V?*_rHiFPd(ha!A=q29QG-*27};?C*C%X_F62V(;RiDSke zB91iCJ{Eixs%>EU$5Kll>IAJ4v&XzM)MDQB4RIv**2!ROxO6Kt6p3LB4`teR;@!J< zaM6QBt$k8hSQvOF1MwtObyKpfnwtp^(Xn#qR|byOL#_x+8KfBA(q*safltp^ka)wp z?cMWIE35;wc3%WU393i8A&Yq+F#dRgHpI;#rm1?WV?G!PltnnMNbk9Nc&wnTKuqQ$ z>KbiZmxFsOZNLT`&B?!Buu3;QrF90el0Vo%{4>;X^9o2`IP@iRA=+83mhN3a1r7oQ zdU|a)w?mN7nd@VZ4-en9w$;#h*F0Dc3nv&~7dAJHRnYXp-S4z-N861<^1ujS^i^gk z{k-74z&TatvVs%5IZ-MHG6(oE6D#~29QH6y0Bh##QGpg4(edU~QkgFN>A@Wh7v@vt zjEsyYK43$+5%OK@Xrd7|=D+_64Z@lM`w6$LX`Lpp7B7THRs>Yv*Cz>pu^VYVcyT3h zw1rUk^7t*{2|LLQI|CZNNgxgXM>>*mqfg^AGp~YXf?j?Y{}lWzIr%=#eGIfG*@J9X zbDNI6-jkr9m=p&;WK=%Q=W=p+|EmL+^v|F)C6 zW>F4qNQ?Lm)0Gc#8c;I%gYcx#GT%$a`sOeSs_20OG82>Bg%BbNmLRb5iwTey{P@D{ zqlAEY*IkOHd5Asv+UQ`4Xz*JlMCh8h^pP7{J*qY01uIP`9=>`AHFnGJm)KM0aU z%git?BFq%dM7h?4a&dv4BTYS_*dH4=ycis;nVD}SQeARUgQKJ2JR|Th8LngjO+}JI zqYZ_Rbn~Cp4DA-D0$89x`=kH&H*fyW*~&<}-kbk?ood0}!QZC{|9nG(c1s1B^#Az@ zXtXlTl|=vf!he3MHFA{Ao&WJ?wJ(6@ku-ho0|y5#V_JYN=l%L`C&hzE^Says*nwi zy`9b-*eks$h;N1mMuX|OczB*p3&ZqEor@(g!Jo59-S-C7mF#-ecZ21xN^SXlTEY(> z1UxHDu?q3`J3rf;?Fj(UK|A~?%HHXjJVYAf2wyS@iW}h8w8K|q%?J*QH_$6{C#V1s` zobxxR>OajCOQ)hb^FB06?MvfAoRm&%sloj5HY?n_G)oEh^!&AcKh)Q@cJG@KZRZL% z;f%lD2&T8X_3vWI;cvNF_Np`d{>`ED^QjjZjW%PfMROk?BKn*A`CT$U&59cWvm5-} zl+;uLU!E_OU*26zR9xS>8y*oMT|5PPn~t1{r&-E3NFMyXJI)|1bF##%6!LB66=^1b zx15KY2vSMF^i2l}LK>pbJ*YbYApjDUk&gR`va?LyQEiW$CLXMnfo}Zhm8{8cjr;NKR5G9fyR_FKR$sQQ~L+0hu z65n0jt*zM)oo0LM6e8}!EiHeVPxlQQ{FjJ()A@KrSl5p>MMg(QYc4OgW~*x2$F$?z zA~ptrIO%YA2oI$YbiC9>HztgsuGe@!zTJvjb{MO4wKZ z&>dh1dMFzhU~^Br;_U3}yAkH|AqnmZp%AxGe7 zV_~+ljp3-}CpS*6=i}#w4<7~@8p_HN4eG^mMntiRh>*vLXYRp%0{{Vg|0w(~vMLv~Xy67~IQ9 z#4OlS_T!A0>+`h1CukWg3F*j10rmaMW6_Kcvv>0=E5ui8n$Q;kW976t$@fCqMKASh zcOn-FR#Q?Vi{c0Fk&&Lwj)j)sCA!qE7!&;(qLVE@Te0+0OrqXY5zDP=?*brs_CC-A;^v}0ou142Q`;v!`5BR&g-kYE^ zS#>>w&~ju<;Lbd`b_tVj1R+S}7x{^EQD^P#Nt_0BS4i^8(0Yj59NGG7VSf4g759vq zu2k1?`M?T@XZZ-9!!5tXj<=OSAX6Z;N098LLzQ*lCQ(FsW&eDY_4&bS6p0q zRTBV+7zYf(S2oteQ}@T4VQgk;edN<4XJ==a`_jS1R4!key@FqaH8NG^0>b815;tRTC6L48NVh!VmDEH^6ah!WmW2( z4^KK&g}8Z7j9L44i4-Mh8$RJ!-Nb9q7|m38%t7EyGzB~L@jRqI;LUe+bpgHxXpDWr zub&eW6LWI`tNq41I_?{*1Au|)=m{t*D1>EeXlR~}0Om3{G!*)roS4`W=77NHNMrU_ z`!aOHNSr@yXQ!1{b>>x|;$$U{{6mQ6hWsF%by-&YRg+8r zsN$WW0O)4Cx5fR8Or}QJU0}>AiX>~n0m%+b%tZ?Fzoez6%E?RWKQ;eiuA!-M5@x-& zR@-GoN(vbaWWfmwWo7-MnKC+$PJh~Hj=&7d)$sqg8WQss@@%A~q~?!7kRV7HLkJzq z>gp<*93vEGBUT>DhzvWzy1m;Y57 z^SAZ{ug#NQByKtIm<3~d%{=W257#tq^EG%vW1jjXzo{*9Wqw`yJgg^?rG#Kb80P_U>YY%^P^KK8t^n2_0Tq16^@`TpT{x z8!e}FUY0j(#Ck!pONJ|X;0!1DgYzPp_l4?dHD)5_jC%ejD6pZ&wdnuYgtVRe3{94H zk}*SFT^$3fmWVjxV^-D?h;g9DwwL<0T(>>=JxtJTxOy>^Ghf| zz4cS;ih@;l@jFsCTf26ZZCleKt{LKAw53Q zS*z_PLFVHXh?sl%GJ}o10Bv?`q^jcO+Q3s4mF<4oYjgspSE)>8W}DS+JJRB=?#`hq zVw9Bj`pF+Yv|ZN+Xlebh7c*dDT1hHu?!=dO0|&T2fBvxc@^ElON9kuGT(jtAV%Xa+ zN%Kmkv+{a>OUucBI$cdpLejWBR@7pgfUXuzCDv@ljeT%>DuKkgxw*~Y z9VyJ`((dZ8y+Ais_d5-jTDZ)p=|ars*nN9TIg#yoEgJr~G6zSfCvq4F3NYA+F!$`k z%XoEe$}DIlPV^*y-V?irSmG&#@cT-!*xC#={9R9K_{i|+C~Z;vk~ZVdO+uu{PRj1R zZ^xF+*4IYQpJK*+x&3cnFrwz=8WEG+l|pC|o$kiV40j5ixI z(f=5!Yaay-h6EPJFC?lPB%`u<;G7yzCH~luo!>?{XqN@f3g4Im9%(5A69$b0CD5(i z-P1C?px(pik{um|Qy-4pW$lo^@M^(dPlKD4r!-tk)G>Gmmeg!Z_#S8W8^3ERe{#|h z7!!H~#+|2}L6QY~m?RKD&SA(wEz3_Ueg)WF!Bm-=x_U`jneW9amky4Sl6)k%Zxq1I zGUA~+J5lapZM_B{DzfFxfed|mWsM8Luig&^pvu6fJ|2?K-x)Xs5&{hEBG>TrJ(`?B zF$vM2eD(Fg)E@y3hwK$(ROEzr@6yCvEdG|5UnqD0({Y;|TkG^s1ny_q==lHx6c_@( zOU4NYo%2lCB!Tn(GFZQY?c~os>!u}zBq(^5o+FDwUV@Luc5`cXC{h#g=ukmYaxxmN z8;~5wTNCl=>GkH_%b-N)?&@mxF`6F#4pIsx`g>b_W|o#2X=!OYVvhq(R@K1Nn|Ap} zX+?vfg~l5Mf7@U@Y|mYuYD@9VDar1FP9Z}Cl^A|>66sqSySgdc}+RF2ns%2 ze*wJ1rJk;)rasDacsDJ#FLE{W@(T*6(J4ALqznxu7FO;_q8k8V*xLt=2$9$685wh+ zA3-~~Mu@lsV{Be--r};dWG+A9gW*o+NY6BiDI4n?0h`H#m2?_#?qfGnc1dZsGULyS_5*OFN5B?r~1CiHy z_fvb0bn5k$wU!~n;-VSI4GjO?>E>qrMH|*$3Od3j;^w{u>4?bc{3xX_#6yt{IQbfs zl!OoQHuk~i7X@cE06=3fxdmRO<2h|!nD5hOA+V-s!trg7`U@49H{9M3fKV5K8<8_G z+k2%Y-%Qrx7q`f#1* zSD2{NS(z0$OD-DfbXr|1y|JQFp1q@G*6oot+K5^1Zk+44v8}^ zo!hM|t4FVc%kdOnoPj9mU7Q3A>bbc(2cv&JJ49ZWB!{5{6oU0p2PnX_z#3z(VToGA zT~zGeXM-tz7|u)<^TDCzidBL+^qIP!&<@fnMr8YH7ac7>Y6O;*lbIu2k~+Gw&;V1^ zZ*90gvjy$BBBbc@Iv+j!F%O2!P^FG*ly)uOfDX9mBtnt zG6MIkWRaqrUYLW+y` z$8I+VSt~u`vO(L}t28hB=TyIPb1FlxCyi%kWegJaWv*=s^9Wn(+JEGPM|7RuQ~n?h zVjI7(K4+dGl%1*0&eO9uG*sm6n@(T8(nm)qB2t9kAt% z?Z4;|tL=wxj!rh87aJ{rCiSI6HY8C9NZVVjuS$Aizufypt*rVodFJWGlH^rp@BYwi zwA4kQ%M#*e;es%Ly`vA*aZ%v3y?TjS{8qQjlk0--^Jmj^u>darW~A7n;L;b1>QF?} zOa#3IWA+m8Chtdl@jNax zFcUygrr(&U2!PZ@Rn%D)?Lri8k|>FC8mA?+OB*PR2Jv4pCKB zL+y=?jYHXeGBUEAotMe!z;h2f{wNC=xE1UV5c)Glv3zu#2;^2GZ7_UmjqB10?su zBNczbWB4Xe5>|Td(oy&|8Pk911m2+U`HN8{9ZM;=Wf%xVFpzcH zG1}VH2gT|~hGJp=T7^QIaK`N^6eIC~olm)wY~sww{^aBrr{5WkdJoI^SiZ%?#&S7q zrNMa}s~t)y=I#2X$YFS@0+I#8#a|2`Zx<_m5MHu*o_?L#(*HM9j8a09RKT9CHU;Pz zpNkWxhMAfz2~T;AwU~zMe&ZIP@T?px8$3JlOH`*z=&hKVYHEaQhmJOO0Upv)Rds9& zYwoPb>5!Mt0<4hJupS|WTW7Z1CW&fGto;o&r$zuQTe-Is*a4Ti)4wtex0d)8pPJyS z5z}XzYh6*@H&GKO)JU|79(R;hQnP4z#v*!Fh3u~ zvI+Lk4DpA1m?H^hY}g}m)qDe*Nh^Il$7bVo0*_}X6d8|8!Xl){P_kC8TqiqwdMoWr zFCSeUBV+14TRp?F;qg1(Ty3@W%%Nd5&o2-y4oN6TAyOl}=at1)5Z<7zzGS$Nfsla^ zj&deokA#jb(~X+_xIK#ML-IjY+?3*F*v+r;atU%TUPQiqZ8JOVKKP|m9O3&PD6kf$$=@la@>8B20U`W5 z!+~mzPe!|fN~l>dH2o&ILrfMEH3Ei|;yUHbv$`CtfENWhtlp;#7S67=R*nr07L;Ai@b;|Fmz4c$@=3sZul>O_?zB zISy~mh72r&C_bK@ZqiaWSEcR#VTvLXo9yaxzPdn$ad$`wO|v!8r>-_5B1)9ugJfB! zosSPe2xNG$Z^xAP!tO;*bhNvyti?~9-c#f-M^;!302(4Q8Y(nh=Yp!d(1KIow$7jD z=hx{#|C;SasS(%q`lH;Jq9O^CMR`G1tT0Co3Ttui19>g2-hs|L&4SX>(y?Jkx!u7b z!3agjK!~CBKCQdPOQ_3*xw-j;h+SkV z;-WH0hkOqA%%^^Ajusgj&W%@^p!*&H1P03IBGrIDSv`1)4;#yUCrT;?9RBiF+qvkS zmSUjWPGiHbRa=lgwdg1SwCzrcI|f>9wyeujr{mK=_E1Oz0Uuz&_K zp60@oW*tlmgAN`tdBA{MIvfif10&dZPdy6=JD3j!)bkRW;vN4m>8Hv25^*D=Z1NHS zBdr9ukm6vik&iKXa(S(b&XP++JCWtSBnD6&CTiK6H~|Q zQ^ew_dgD_~+2tK=UbxiHcN=v7Jtah9RJF7iTSMNucUZF~2ArQAwsjNtDn~n-4VKE` zUVTh~aV#=W1v2nlpKY>+G$o6A#l>bmG__d=z!cAow6(m|;Tdn`Nba3YnmjR|?U}0c zCAlaZqH5Lgx`e;$Z~qRt&z)&$$R;Me`<~HCuQ2cpmrkM-P))b3z{L7{Q_|j;Lp*1b zO|BV7OJm%)Yewj}oz&aCqh^^uUQvirj7|s_6`M6R^$YBhYW~;}(8jxTay03KD)Q4K z%*++`y>n^~jt_){giK0lw^np>MJCS!Hm_4g@TVU-r;7PsATfF$F5)~yB<+DagG`6d zd-pekMLF8#AeGK;lcLY^;!aJLM>Q1^Z;U0I9JR?$DNz0({hzgWy^o8 z$J>uO1rR+nH4C8=$>0Bk;~s}!xpx#y73O3-c*Q_jyJ9lDb4i7gb z)=yp%*o>ZNt&>dwM=oId;`w7_r#h`z@FW(Ja+@4xemXCKjG!avFX8n2goIfeXdCx~gAlIq(*hX1NF`2D1EcZT4>`7htBL1uCr)5=K$zDjr zTl?_Pj;;;&!C5oLL z`kZZeEmcVUjyKc!J$Wj!w^yH){T0TUME~xu+>^ucSfAZI-6sZ|*3Oe9fL2D{y=T+= zcny2oTF{j39y^cwwBRRu7PG6-zZ~mlWGoniKe8s1r~@J&cQIn}y)#cuwQ6~5hgk5f z#@^8TuE>{r#|NIzT%8{?cXxjs7)VuHpdL&W7`8WStvkCi#qhYV=z_?1&yFEkzK=O{ z?tz^ti|=lJ*z!{L?Wgj&gs0kAuBz=83H^Sm zs#*zI9H8mgct2IBU$sWvfB~{!yWX^_9ch}-D=tWo1S*EG;m-K4cG==>1GSo?O~fJ; z{s(+ve*yjndHVk4xyK@Mu49xWPW()+xx#8oc6K)AOu~1%zN<^nvAS(<88BI{09#iF z<@-h0You)i8~~xbmHH>1YMnaC>MLoogQE-kn<+$%JAx=d_Qu}TGAo<&FIFwWx>dc8 zHma;gx?s#L?bQFlb!zLO?xR9wh9$HSD^#2_VDqKHzS8vP*33+XI5vTRY<$Oim{tyd zU`)U5&e!ed3nOPxVapH!bMz@J1aX28KJpaskpQ4g*LY+Mm+@k1YDQL|%{uBWmdFr& zs>W2Fuk$_ay2d;HJ>*YCm96rDu7R2Ei^^QRe~pJyvLF{DV|7kWaYAE{)uY~r`M*K&?E>uGB~LjLsJoMCBaXAC9^0lYo0^_rGH){>7@eYrUAxdL5H z2r72kgPEO4n{Ws z8v#H7jWa=>*x&KPE?}CIJPTRmeVpOmo2z?{)-SpiJL~Ih-U~P=C&p~!i8tk$2vPKc zAReMuocQM{HeP)E^0D|2uE!+W|Ny#i(@{Rm$GeV~<7Ij~OaH4dr`6fDiV7+X;je$CB&Z^ReN05q*;%(YYX-Pw%v z^mG`e6oL-)7b(wtZFB3(cwzT7dW}yxIr8%Pz#yXs{52|AE)D+24;RYzegr;W{xPVH2qZ0YN+{Y#U=A z&>ttf9l5nl6>B;c$EcWGY&*e?5;6d%YLjzQQjCMvI1MQ&Y5#YEX@lm`z^7+)hGAFN zIR6{2ZWdB0kZD5;voq`5QCP zUYv$u@eGc^8qFwsxqsI?Nxxhe$S;5|@*u389JV>O)u8 z%9b5-OUvD#4Z-%A_F^yFmqU2Aq?l$nL04h%X1h7;buOQ;-O~R#=?u1K+dL1}S4vIV zfM=ogO%}0KR#zW%7`=3Kh~xSY71xUjJdvT`E< z4h{99=VBd2`0?VH?A>2oEKh<0ySr`B((+PyEbZIyrMP46QSV9Iy+f*|uCKV$o5}yf zenV`!X79GwT8=KS`zBn@HyXT#xVwz=3qaDmlvsn`0`C9b{wU1Q1BM7lKrn@Z2$!0x z6g4R+`b-U6+)xh3YwKM1COLtu0Vy`^$B!eJ(nsosu01phCPhDXBQxC(&0VPUDM#8E zgR0r*cvh?lYq)oIYvHrpMFe0N_NSLN$gJA=k*}gcEs-70`?Hj$cC?F5ZsrgnGE8Mh z_Srp6=TDEPOMd+#iz{Mi$YLt_(7+}k5deZ2V7q9jnyAvF zXDdFHgriIkCA|Gq|L)y)PVuvOehHeBM^X=+CQ3b+6WFvJHzt=Yn#UH1l1gS7%v1k< zyVFn?4Dg96`|y8wiVT-m&>l4HX4i;RaMH7~KGo9g3SbcuN=XYWGdWo00*EUvHWuAy zFZ9H2bFxDFskVgw#xqY(!KxRXFW32imxaIe=kw#8Ch3So_JxBgkdgn9d)wIzqQ=lr z&s8)0kz<<*vb?y;=Xo6?-@Z^}R)a~GqhJgG-6*8up+u`?n?H znNt{^$quG*5}KUdgFEEs>GOWl#J%k|ijaeEPk&>mQ6lR|$Y2EDBX?aNRhphFgWHoS zI^$%IL1#x{>i4pdkr9Xq5l^B5#C(RD01{ON{=~5+xypoyBL1hY| zvoJX*#>N(PebN5cqQ?xn~ae#?yN_-NrW_AC-uH`Z>tp2fjqGinP`r4gMa}wVBwDj?52`b94 zT#b4?o-_4K_*8uSVyjq@rCI-@i%{l9i$)8{UT|cqq=;I*&6tC_|0AdCe<+J-A?v#y z^l}QA-2geoM7TR@!BoYb53Q8L^%CortFOL(W7RDop{id|U0c7tef^q{_@2?#D$IyB zOo|ko&Epteg9@cd;x?|3v(dcfCl=%bwS?iIp?ff zZZ=O|VMIU^{@s~Dl%WLaXs5971IVt+tSk_#M(1gz=R<>zi!(nM2>YF!H2IwDykZD# zwb9nnI${yMnAj(75|9R-;dwmO*tbU^w30~(B^@`qYE^|D`#NM1Ol*R# z!L9#d0od5T1tdT9H8_!OG{Br?<`BvyN=eHwNFYF0D2WU-7w~ohR)a{1$?x8o85`eL zh`_k1)}5V$BOIgsfPuV`0R#T22wHf#>93VYoMrfAHALg%0J> z(V3?Hx^5YQro$5KeV}c7VCh-pS_nVLBsmdL&~%looP32 z6fnSz&@5htU6JM{qT+7-^t%w8_9400!ITJi9PVKY@O?a^@_4m5=3;V<`+01|OH4r@ zB4sOGoy*F?A22Yh(wv@~lOyRT_-V(Wj;vP(hORoNr=?!#02%B4!dOKa6%`py$HC@i z?u$bkPrX}!NBD_ zp4Hbk9E((6;~CmDO+O0hte`#IE#lsb_l2IqckLbyTD!X1w8mV_JD-2mAW!5JDw%z;GQ?Cc^jCE8 zc+uG4^Q@-*?13~|0Br>!guGRJUYN!c!Y&oAi}4Xs(Y0T=K+GJ((v3fR&sts1GoZ=n z?}H39RpzACWjJ=ObuPTF55fsPmfC2JV2>dd(1cL(bFgvP6|l5>;kXgAZotHfo*y$s zJpRCA$>Hj7v^j%GS{8} z(<%2&Hnv|2Jy;Ve@Exi z^T6a*@)a^RjP70cuO83p``KOLl8aYTMe4d{%67RFJg0+EC zF_QS5&?oe8b)p4j!s%s{31*r020 z6i4l%EemUKW#G$$fzI2O=ABla(vAKYpZY+q5I@IE~NMsA*`@n7f1i((Vyquhlwl;GxwOI5g>ZNKt0BQv+ z9S~>U!@i20`$|_Nj)RW=cl`UkDzxNl@KZIuDwYKbhUV(_?&E2kuit}Y?zw1s0I?CU zu5mkeJ#L7bH2}9UXeQg&8~uEn;-%sHE-rPW(UW7&+zVE`>2$fhQtdmWDJeU*Gd~xM z3{N(Xcf_1vfBT!F9b*4xZ;kqhP87!e3gY7zi^NDBnHj*`mrau}fpHWHJbt3wQoFuP zW5jb7R!vh$zu@CLwdThUopqI!we+5r+9`-Ay~#x_$AiGxmgkq}8Wq@}ZXlQ68)!tm zw39}>Bo_#t6cNVfyFHiy6OLdM{P20kZqduAC{gE=o$AAN^w2B!kx4#UjX%kX%RvzN zn=VG+yw0yC*ZA#W2lCqtL1yDB`JJLOLwfnR`)q8XX6if74-)d+oHn<|@?UpUy4N?} z(v-(18T)h{O>e-_VNJ02H(>5L`q7U=!sNknqX$TjuP}UYKD@voEzm(E`#`jR^`|bv z*fbnFR5JcV^P(~_M?BJoTu(<=kI#%-hx#`@#NW=%6ny?3D-$B39UWyO=Y1Fvb*Sgx z^v9CZdB5K4XzfUW=SGgK5uqtS@OS%fN?cs6-8m>-l&-Lit|b6cgNzH|fY}QmZ(Aj- z03(1Y<3i8ZI`Kud}RP$)p|6aR80=pEQDS^?<-#+M}{T3k<7{;;VS#q zFJ3f0c5ucDeUc01&Fg$cno!k(+d(iE$Xb^ydtqSo)mmDM6 zG(mruTa{qSMw!E*B;av;}#VX`p_1Xbhooh-ox2GFE_u|Z#y$r>U??ZPmCn4|16G_?`Gg{i+k#7=nsFa&wTA7a_ygZ$*yu)PapXMW%=YQ*cTv;bj-m*^~vEH7v|2_bscJ- zlm3iXUBdQ^`BQYD#_({ZztPTSWvC1q2l`eIsYaV-xJo=H^S3Sg58*hgpJ_OccXnM$ zRG+-s8Ys<^>*G*Kuj?Y>!@6Fw5ukOZ{5?_gMtZ+{%)wcZ0wZDXP_Mo)`iSOjdP4cz zJ=1}(N00unyY$)dsH$e2-*#+e zl@y|QI};h%=$~Glj|_AxG4B)a+#wwLS=SwNRX4~}YGU%|Wd9T|X@_eezD7^(m-QW~ z04^Bf4!Md@9~!*Q&|!a8?(OFE_;2_d@_*)1GOcq#GFf3eLC3&Ac=zr*wZDGa5c2|K zIY5&sTzpkm_cvD!2vxQF*lg52G{M|z&~P z#Yc~jQKu|MwXoYXM+XMXlSP>p+4z>5^TH-K`>W-*+zVIgA5b5d zFD>#qSYr>h%Z6j2+!NxX#D9*HY6`2j@_+I6mQhu%U)#6RAtj-dbazN8El5a*gp`zY z3rcsxl9pbCA|N10$0C)G5JW(bl2R!NX?Q1l-}nEy$2*=eo-fb)?hkux_rS%q);h22 zoada!@jEcz8I%*j0!nU^k$8}1@G|Q~ENf4o%IN5q@?mPWjvCQ}2%#4)b9N4PzwA9+ z$n54?`r5i)a}ND&|2(!7mXuUrJ6y3OjAG#*j`0}z{FUa1NkFIJeN}Y*$oUVwDJ?CP z$i!T@fjK8R|J#&uyCUL;5iM;FSR!HF=%&kd+p&M-wkB10V9yY%-CK}0{^GX|a@k$D zjys;|zOB%&6@^YRyq-5ss_w@MKHcB36ZLdcy7kgh(^%O+s;sJ_+G{618{c_VJ`+yn zjC)C^os6u>J*dGOy@MyEZ;)823cQSm>g=b)EvNOVp>JOxXAfA;by4{xN{U7*CCooP zc3$P29I?#p;KS$`^Ebj08eeI2B;+1DGs_DtpKl$)&4O*PxiNAdH!leipfed!?$_y68X7quM@{Ppme$kN9L}`pm1IJ+!ID*$aGeuy1T{6w&w+_o(Vw&4*~^ zKFXJd;43-p@E+(_IoelM>2K3W>GjjFi&Y)qN=ZxU@9V?iku%j-%gZ|b92E`H;wrLFj*v^+Dk*tFE!0)p$~tsbeBdfK{A#zuK1{xXGCaiUG2#b(Q| z6~4xZ6msq+&LC`}?dRKC`ohY&a`qit<5Bjv%NzDzw^KaIrdt92`+^25)a~MrP83gH zBM^mQT6 zdmL+P7IO09lC=YV6C)#vn|{r4earz_?_S8-KUZ|#yi~UT(0}6iC`8%6>kGhA${l?~ zc$kFt7RFReb6>n9h_0zy(eR!p6OSxke}q$sYs!Ag@kc1OM-rUI>{X@^d+UFgv3-P} z@FDcS#q>C)Cb7hFB^61jFE*DZ|LS#58++5Gr3%#6-fs5V%tuyWX}qMOroH1KE3Y>A zrF-qi>wDD!{_cLFTU?Ib(mIlpE$!mRhNX=b#t!Tw znq3MC-ssw+lQMA}(;cp*q^Emqd^wjh=kM-rf+KR)Z5t(J*&i-pGvRfzj58I*{yh(& zQ8@ZUn3jjYdm@3j5zlm$i;vCNjS%+rCJOfh6UXehIL|VQ!7b_MrIoJ-7G^8r(8nKT zPj{9QP=6u1U#0NxH-j_^LBn>uu5Vp41ws)RuVBd4%KKeEDB%AuYu&`ySNaiYZgC#c zIrQ6`!{_9=tHJr<@`yH{eL!)SzbEIj@c%sh2I*8+3oTFw@Zt-^!D~IqyN6IFE6~5oWJ6~-oZZ$ z3~6-r$N%R)5Ufrgc28M-fO!N(Fo#}y^_(2m2X03q7POVZnpwj}=)%APS3pUbYLD1RAzHIPw1Tj{bkS{Qu)8g#54wUAZeT z)rh&`gA@Kg4Ujlz$@bh8CUuTeFw4hKoo66R8XFoKA`_VB_~%P1dFp#}h)NiRD6ume z72njsuh|v5{?*L8#Oimn_Toix)8M~e$hFG*Z1zgJx@4y-t^s>P3^6SDmmWymctfp} z+(Gd=6?NIo`wOi%$_ehP9DAlv&C17^WxVL3Y_9J8{^zwEgKT2P9rX(`-6Niq@v#CN z9s!o!kCEwhR6QR;R>pIX%)|aT;t%z2eY9;6MxiZfcBPTM&Ed4P?vzx(BbiMdsn+0d z%n+%#?=%)S`!;87__5n<$yG9nRGf#ew4+pw8?vtC?id-A6v>EJ>88msFk|x&;ac)i zv22WFeBk?Z)c2t}5?T8@OlpJx)vTJ`}#QC_Q* z4y!+tf(YD0!naW)NKF5rGO|B(z32Vnw7P#eBT`=ud>+rwpc=vQN(~7V{rCPrqDNMH?%lf>_aBaokJr}J7&p3GLjqlteaM75M5lonxjT?vN(#b3HY_YGNJvP) zUJSN<_z}U|w^>RdMx+jAVlebz0LQBtBb)q;|IqsE`A0UYyD4SF%+8Wpa&Lcev0y6D z;OH?Jy>0n6vZ;NGcP1*Pk1-czozr4k_d~ZYxoKw!JN6qI z9sY{&NI`P_-!pHk;~o)q*WTM#ZV11)c$&xKPdOMuFguf!o6_IrS?~DL?A;urVK4U9 zUE8!&w{zV`sv$+wGf^i`PxWyc@9vH)YujNJM_Tf1q>e{nPRHtza}=KNbI03NS{kxd zr1O3s{8lTI78Crhf%SO$Y#AFXEiDbqTZ}&Gf7-yS4c=x#LP8LBUJBr9SA@Xm@~bUu z3;L|k19*OM-r8#mtOEXLJ4?`B2VoqV+yWRpvH`0F&=?q_SJ&0C!qY;p_>H(4f5n-R zOc=`Yw*9t_u&11E$Pz)N=M+7jRj>9pluYB51ilt#u4&cka*UVSIT^LtGgzc7Y8Sjb z(r}dsT%zcXau=Ti>5FDpp*a%@JC}^Gm0T(cok# z{qH6{=7No%U~@7$t^0V5s4A(>6k+^NQb|hGGdoVJT7L;8ud3Cy*c7!l`mCc5w}fyB z-R2+v?78!RJ#6G}QRO2$%6AuX9Kx@vGSCGUi>_YdncdH=>hR9yj6d#8vLSw|zvp)A znq42SczD#z+uM@o_$PhTtdtXN0mFY$kMO2t)n1~NO`(JiN~iA(8)*7iDIC$+ET3QZ zvhMdG!g5S@37=Uz)xo0%7}dAYlkHidk=*$EDvz&EHc_RR4oPP+R^(JA+;C1OPj{y; zzo^y1<(;!MCEywOw0!f4POGod)b{zr{8=MgzOY1Y>TW9fmSV5zcnW)}a3UX1)-Fp< zjcZC=utYsAtXu@FQ#-n%j-J0nVpU$Kk zAKd(Rv-?&0?wteIL$~#BX4KXCva%h~*rwpx{Q}}vxdpH&McD%t>{37;ZH9(h-tbym zM+eNmqwwg4<5V1tcr`SmK#>=4xXrLs2j%hQ%2d80H#y1t)LrpezvmWajk0`ZNPBG_ zLV8p3pT4(Pc#$CYfW9_)5G=W zu^;&%h!fHmi9nb0DSfL>ITdSRtKi|H5m`>rPh`q@cKA{wo))9ZS;5Ko~(Ac>eocP zA5XT@S5NtadX$Fv4s+ zR;x`8A!oSLGU`!K3c9C=S=SMZ$moESqhJK59#C5k{Q%Z z`NFf)xj*X`x4*ms3e?#VBb)|{T#v|surPt)nWdp%MHV?TezxZ-U0KAl!Ld&%?o53q zI_i}z>$TvemsNkTj6jcWiMH-ArhV+-zT)!3@YF;6-;!j!fvUObYk&WxdnF~0FCtiO z5d|EvOT-1Z0Q|ZU^0y)GyO6ATq5 z7n+6e`*_Z69y7Q2B^bHscS&?QSnNY0L<5Y~JBpdY0;VRk3lM#09GpxUUP~3?o}3K# z*{puf%&A-};0;M65jVu^Hb#8AwlNfswRP9>uV>Qpz2p16wHI=4ig5?qNC)QWLU%K){Kwyt@-E)KOfQCVVb+ zsCR9^zjTfI!TwKnJ%b01l7^k)vIbOR^wPhUWYUw5-e!hW%yo`OvQL@+ z_-U4w`7EDJ8j-W{vp!Ft`Tas0=aQXamW^jeB90H<^#vBooAtRdL&OTsda|jG7Lgxj z($Go$Iqx-nZTVdYPwC+~-o#z{G3Ltd_e(urM|73eQkHPx8T8ufX{;h@-%!Mh|3`cH zC?$1_9vMeGRlCs$@=WgGx}2czF0RMtC!6DK+r&v7!Mpf#AKoD;s|-bk%wD9&}A`|9GyulQ=u4hxb)$DMY0o$IWH^H_-sS zDO=X(v1q~z|LqI05jFcDE_Af#YO{I^-=~#33`rMHh#ASV*l>o*xvAMa*4%$qu_$0k zq`b0u|F_O_#}o6E+*#Us=qBUa*9yUOIDUrZJG8u~S)w98zKYX+624uO^pLCGUhV|J z?Da#-(ASu9vhK6njI3ONRF&@?Rg?MFTB%}Jm4W%%+C4n1e~R`!qSAK_PXUmO;D@JZ zuo<8W3B#B6=qQ`(7^9?s-@gX!=&{k!87^T8KGPY1I$bt^)xN=?2s+b%p@I2nOG^th zMnMdTv8oBcBM6uT@EXXPD9Fe@fei}ap3vEkEZKt*Kcw0~l@@YESWvJUBq~?0Ugf`7 zTwH|beGJXD1sFMjh_nLS^_q>49T!NInVy?_sadeJ`~enth^EB|dHC?*#OSED0Zn&5 z;`u6&A;9 zlwe#pW?~7^5@m`_;90w)o-X$&E4xGafwla|heQVkwdRYMM(-DnJrCn|5w~hvh!=Y$ zWBXn5g~xt>lzHovIof7LCeLeUPoLdP+h~L(eHuv+Uy_VM-`XdQLA2F(cz>wMXU^1MdrkoYE+tS zc)UD687!>j+&0+r3f^-&*I~Z=Rx-=DbItfs;Bapb9oMOvGx zxj)Z5MbgBF7>8V9oaG7i)ZiOZ0fQ|xMo(E%rrLvk-7&=4nGMiw%dE}MX!mur;B_vC^zAGvTi;A)~e5v`mHpRr> z9}MSaVl+dr+Q9OGwQw0CcC?I0lgq>c9X0}vJ6q6hLw7%-L=p)r?^ ztb!6u@d>)`E@#WJa5+pSJ>SE?)q*JP1)O-c>Y?xl&1gpQNQ! z_>P7Tp)Q_<#e-UYn+I#dlRiaDo|=?lRq{>B`-=)?h%-IYWa1y^suWflzlqYzrB4gD zzq5%vQ{@`1ekW+%qDpe~jGfLA`%nwd)pT?oK8M=Qmjkap;|b=*Sv%vD}0c?x(VrCxUym zjY5s*RqLt}zQ@FNnHfSXj31Ylm8u3gXAOwXI~k{yiNlx=wn8ZIOn7<3q_(ziY5Pm4 z;NEuc+k6~*{6#O>iolB_(X3`Z?_JVLGzPNK!J&!E#b=I^IyO(S`p{A|){!AEhurC> z!NT;CY#n}J`9ZX>q!XvEh-iU=zm-CO)op>Us(+A2C4@mG1dNq17HJn=vID-j7I0|J z6$6h%QLsuB3H?=zwSfx@W}{|cPM~@yJ zl^iD<464h{2m{%4YWzAlmNYd%FB6(TC!L#_i6`I;k64_rk;;Bf)}-^8@-z%Cw6bKq z2VcaAMZBKK68ZPFT*TlSa-!}Egx`6!agOg5oO$cNdjZAJ@>p0s=lXhNY~7WfM)b33 z*~jj6n)XK4m?$lm#*2hUJk96ZAFW3bh0!fU85LNfi156t721fIw|5>fD*Js{A+E}g zGN?1J;fb^BX$f~I)sFkEweUKZwRk6U5ks0cl-sKZgYsMh-QRwDm?`gwGx`kSoUHDMDii~8iu3l!(ls(nl4-^>`rzVLN_ zjcEE(kd*h8P=qQQH)sZ7mXv|^IyCw@m1eT9H+MDhtFlk|gK;HG#!vcXer8u@TLv#r z6#pvGxvmrV=>iT>D&`>_^oM3gY(DkBO08B(Tcn+Bcu#zp2H3i5bxgvO_V+(tOV%!H zRUOlRy&ZXmxvlZh%FULrOyvEY!T?FUmS89%I9+n{ZMDjCUI$V!bQmOZvUSm(+&sr~ zm74dke->)FI2C*lj{25g*wK1Gbzvdm{l#+go{-146ODDzEyMT+4M*kA{C`c0J@ura z#;#Df2n6@IYZ#h|e~9;8xmjvMVwwcGa3DD@)`RLkI`Gl<9rM7|U%$ZUs<^1p9B|fD zTk8e5jNlOz_PKmt<@9;S#q+Rp0I&^w{_F;vB_bcFNXJ2#PWYO_SK z-^gc~iK|@zqHK1HgyiZfE@(n6?#s^-XcU2zs@>NeoXR2Li)k#%cW`I7KaPlRLR?Hk zc<0YB7S*(oC&E7W|KKl}FduG)jGz|rEjU2V`}NBgVPWBH2`|odJr);NTJ3(;q>B#& zV;03Kzs=D$7U}or$w_A&^wBIe<+?qr%V;iM=McQrxX*F1JQGX;)t6kpP(v(Px3XKF zVLgh-!S_(*=MT~H7Qe+O=2IVs9qUE(X1D{sYT8BBAO0xQN4w6&8D72V>Ndh;V?=@7 z$-QZk6f$6BFc#3rN~arp+PgWe6?5%sU!L>E+Ci?6YN@zpP!0-r~39 zHtD)0AEJmx67T6G3&y;Lx11$S#)lI!Xw4f|c2ZlD(mUuUof|u8IO@B0Z`|ZZi<@JS z7TedAZfRhr%8Gn174XJq=hAdYgLr)rQ z$kB=tlxBJOmk;lyyNBwxKkb4_HkPDQr&+1d4z^{i!Z?x(gMZ&5#K?77$+T6`sE+uv zy|ys%ZSdXx&b(Eq!od{Z^!;(hwt0SGM}|*j_93iA&v6&yr@cF0=y$&sGIgVN)%n)e zBLh1-N(;*lTFsk7gV`-wctUXrwl2~p+5$A*Zu#=seupZQMenP=ryY}b^4}XNJ6^bG4H3H1T4=@^WM)Z4A*s7*b|! zehcX`ei(gMXcBi(X(r#rzhD8t^%Az0n5ZF0^Z>Y8aV-UZwsb7NkAX!HmY{kS#w|Gp z@eS~!lE`m=o8*+$=>6FYzdq^5cnn74^;3#ZybMI)bEm5MN8{%D-T@;1$DSEN%$gyx z8O-16U5H3-J^L*r3q8D0F`{Gns)oHi&yLsm;Y)p@N}Ga0LYR4AX((-Zu~f4pgGbD} z1!Tj~CJ=%UmmK&0#-~4wkp2pQ4uFP9K-6uBs4M@T*a8R6B9zTav#f;u@M$o_J3;1< zqsQc*4r6}^O3)qSo{Y6lAjnA#R@VA49i@yHb8!^+RAzlF%_!pToE;N(Rt#)o6y&yl# zzbj3iy;7*vSXlkbUR(VUA8lQc>(u7;-m5p_lbme_20z}ZFOW}@uz$vor53l=7gXZ5 zflPu!CX^Qx2}umt7zQHh5$bHOD!8anr8pwyEP-!g=))sPaeou0%2W}$uw{&gJ}gJZ z;zRF-_DlGJ-Sd732Dh$u0eo zs@?8ytv+HZTF}KSzj3c=G4mrfpBcZl1S+WJOt)_yGkjV-g_!Jd*EPePz4l(yYdZ43 zTHY#@5s^(BeqK;x`Esk*>Y-ZFv$Nc0%Jg;4h(MNecE+y+Pqr)Vo%+9*+9-Yrvl0=H zKbLYnReY*D@9GThP-ugMR`6*#jQsRmtAO&D^g?H?$9D5!va zg=fOfBrZnG%_ydN1tmE_PM zFMQiJ)K6up1`fLXLPDYRxN^cFH$vqEFH@39R)JbeAEx?UOG!+IxD6LCIVthCFtq z$8cfu;p+6gIqTwjtFyN^>JjmKutDLbnOcWBBy!H7hd*Gf8zmKH5}DD|NtxpR8to_M z>`=uW+V;#ZGE|ntb~7yx((qn*IogYT>Y;ko%qMZ5qLi!8fT}dn)1jd3{0IBc|He2@ zfy+Dezc-HG+dN{!G~}>!S`MZycN}~lRhsd})kR9b283sTSUsN5J^Fm5)qAZ;{{FY2 zp#(D=6OuKeE<>x30|nu=$*y-;Ma6KWizL%lRDAXRy(bh^uFt7W30seGNm<)vKSCHw z{)II7VnB6nZDaFyYmV;ux21i$k-+I1n4~z!5YZgZx{74Z#~VTLAbkd|E-yQKkTcN{ z?JMX?f`*>zSZRb=%uveaQ^w59BRxI6wI_zg#`0Sg5Fc@{H5Vx*ot+hF-GLcAKz@4?e3i5u~4B-6X zN_A`0$sl{=!BCzw(KI$;{`_IcOy@{p==rU?m^sR8S33pLd!3ZFBjQ38TAuIsx3^zO zcxT}&w*W?E3nrN|$OKWJpUyi2)vvBF10a7&5|P4|6n0GOe3$x!=qMMm}dHYiAxC)`H*STt5>B-StsP~rYs7W ztAF1h}Dw+WF5u7e{#PrBu!Vg<#|JWM++M5YCV$vo&Ik?$<8Ys&A! z*vh!XS#o2pdRa_hnNUu?(F$n$h@H~T8o>;iaJP=xiF@SO;##C=X8VbKWo>b0r(ir1 zx`{Rw8azj=3rMBf$DDX)%xehQ&S{8pSaX!U!2Mf9{JOK5qCj#Dzp1gYL#L_%c566G z?rlupcn)1-ieq~`JUrqB*->m?kI9~0K8%W@7yQN$DzH{6cYyPiY_SG>a-=24^k
8M6w zU)I~vWs&oC7f+Rf=9)igo|ZL!pvS-JX>`JSFF);6Qpt#vB9T{fD8&k|<&f?e#lwP< zdwmQ~)U7#Gq_c=;vH>^6UfXq2Qb>|m=%qM5a+Og^umz^II5=MR_rulCAz38<&b`08 z$jh9`g`h?F_Xr1-pcM{Hi_C*-t!}-V=K8A7%p>FmLp`<;3vzjQ&(B95Mur-9*eZzJ zY-ex=do*rzhd@Goy(rDw_N#xv1A~0#8YL@2y>jj2lB+ISBrfrf&W`XA2aEW5M26g( zb?7A5Gu*33Sj)!{V6#?P(>p}Gy}w<-7ZLa7GJBH_!RPJiN%rh&Fta&nj-)R|-L+3< zI}h0-{WJd43$V7bcd(zF5{~vcN$6Wjm_ZAy1Q8Oglk@P=^WN`?fAVOiCF1A=?%g;3 zaXOx#bbT}9o4EKhw?EPG)Gsw|E*Dq4dcMVQP#T*wI?D8#PbTh;&E%DO^#m<}cSK#L z#5iZyp5g=B7ooi|+j_G0xsV+DZAA+!&F8K_iqjii@0d@w!N$*bYFM)Vo9mc$As$yZKuCAxJtML0SmiPOY&krFb#E5J%YS-0n##G z2oJy*nzmPuakD4FL>aP!!iesONh+HbSN7?)!L5{T8z|~gKH91)` z#N0uMRC0Ry4c$;j{Gl+JB2_F?I0#ognarzO4VG}Fif?f!V^jDch zoG%BuH3tO}>^(s`v_0Rq&xp{}cEzwdG{}KzMlamr*mfB747NX(p!dk;T!9`xU(HWnq4@v#k}KAt~}`%zILy?{Nq<_ zzA-(bRuy_8pgd)TjHu=&BlN5`5N|OtmHk3U-a#pfioZl& z88!XF<9Bk-#~O>sTo&yX9@P(tTuO{~e#XehqYxUo$wTeghd587(#Lfj5)Zhakl$U-zN6EJS&CrSbj)W$ z06$_@;5-wj2~V>9isZxgcgbL|q8ah3udiPXG$9-6NN#l&izhgvSvzfa$?yQ70~r}v zJ~a{1!nIaSe54Rjj?5Yra4oJ$7=_FUl1-S0cDLq?XHs7(@Wu2t+>RrTN|6>D=CK_sA-d`1d`wK}%corG`2-+O z3A4&y9tglPd4l7#`spS5)!;B8<>B7ZQC%0!IZdNX63RhIZ$d+!d!G;sEBQ(wA2?BE=5GPX!GHTou-{--^7F;Y9b;j zMeMB3#l=%))@+G`WpCnP-*bJ8^_ToKPzKkb(}Ia+r|S*vp_yqda9*y?Z?FLs=z{k2 zp`664t{T9V?X+<);%j|R&B{_W-Bj7`)Da73t$#HO6+6ju<-UJcAMo}roFTY}j; zeMU$FE+eK={k^pIii{RBvKFref@@lQev42z{DK&^D(~>*^s4+zo6>wTS*Nwqhj~e& z1@s4?BDwWg08nUSbDrddi{>~SB1 zWF&ck@4cRfO-9zjNipm0@U=WRh4lEis*s_Q}NMIeqg6g~)jTr(ECaO_1ss z_^n{NXw+BTTRBYJqJCF8`|aeA8LL>5D2)-I{Q#7jbr*wCi=FIgxE6U|onE!uuk21~ zw?98m_{0%izy4@Hltr|2_Nw@+3^38n`X`sX;l9(}x7Zna;62BD+oeS9lvCWUDfPvN z>F#n)hsE*QOPwKal;+VGNEI(bjZo-hbaX_x+~OHm=*T(^cM%8#lyzP2uFyowj9z`o z)N!Zz6RMfdigHO3E5FVB015~+l|!#yTz8Tx?x-h76vhTbp(R2jOLrSN>WQPXv$}fk zzyQ!g5th4urdg{yP_9{mYsd~QK+TELsHdm7^O5mzaFE!GOt~Wmd~s(@BzsTzAIdF> zJWx^!lIs|7@8hFK3-C_I$dZ7?{CptQtV{KJQzSNBOUvUQJ>y}n`o^m0uQnX1P=2K2 z7K|Zpq#%;M5Tt6cGz7}x(l{e91;w1e)VM!B~?|@ zV=`jH9pFWGSa+OwvLkV9So&i%q_vId9~YVq%9@Lq!*#xJowk2?c7B{E!yz(oMQz4hC~THHS1&~ zt4j#>8)p{kRkJIvBQXwq(DhU2A{ug=|oWj1t({{RBmgTs^kB%gM<} zviwU~BF#ts$mFS1;f5yjpAhx&4Hbxj1SzmY#!~Qf=o0~w#9n@rzax(PQc7~syt3l{z9ZUvyhs%@9Pj$B@bM6j^2 z?eYl)D|SlhnwYdE#p~SY)Ax!(7SQM98q27s3r^XIV@lXd7aT!JeU#vcdYV!=_kM^o zW>l{7EF=5iZAm%u>H+bh)|d1o!M{EC>1I~2F;GhE?7Y5zE2_t$Lo6pmL`kKnxOuHx zRr^K8$`;WmmGy~Xz*<`C=;)a31Le~Zq@_i1^tqFgl8U|gG%N)tjNX$+9kP~BpVozk z_kfxZ!mO_O*TGYmq-DVJs6IR52qC{K&x?CM?$o*!kn4mL-L)7ih?EozS_UGbM2MGy z1I0Sz1j~6Hin8!>a0GiyyYgmVq%>e%psj@ic7&YJp1y2wU?ACV=_-(?v8E%lSy4|_ zOlf4cMexNL+^IY3u0J9!r+tQ>88g33{NUo7wLi+W>>XG{2)y*%-H1_OvGV)N$tZN^ zzHzc|BYM0dY253%z^L@}^iXC|Np#cwLeidAsq}|=>VOJfoq!)0N+ zXzh$BZ#z_9{~C7jYHjUFKrI+Q0YV+aMRpW;f72cq@M*jz&zE{hc2qZEyZtX4{QW7A zMWn_>Ua=*$pyTz)<8|{0B4SnA?%lF?nX1NAXVc{l_U87(K*Wa5T+!A&#DLV%JK3sC zK4!=u=6lM@Zyw_^{P}j||F9 z!Ol~AV$!ak&9E`a4_{IDdu#A6gyy5+<#|r;)yuyt5nT4|ArfV6hOZ!KwGgj=s_Z5Qyaq$#1vq2d+=PgPs@YPUJ2K9+QZ@^JZgvG^2H=8AhnaNlSoh`dILW_V@lER;N~>JT1Ij5n^n7~`Ac z#X4sM7j=?tEyk9VWoF9>7h>Hpv%5PWtRbysI78WAzSo0P+9TQR@Qi(3fyDOJ4Da#A$Q$S`*Woyp^k#2w4}f+)$?ej7-T2#8 zMz_K0j&lbAw9*cFG4Xe>y&k@%xNNK>4B8z09K$BOYZ20Ni?CYcpXV!m0JO9!=bu&H zl6>BN|C*nXUitdU3YHsN%T?y=E=cu+Ta<-|$A5cX*2lI}hf#H&pKj-B1|T?j{30M; zk1S2lXWLvX7>|;k8J%1eCwhWV3cIkN0EBb?>Da8$`%+a^1)HtHsn@o?CC*vQ$jC?{ zopdKQgMy5W4eMSN3|=VViMpBzjT+e7r6!e0TK<^Lr?C1R{^3eq-u{WdkE8?Lk^f{R zCKgub5j)a4JTfwwuhH!X*4{mf5E_wt|5EU%L$O{VEeZ1atr|x%u(sc5q;*NX1FkZ^ zfb)!4h$yEpcL^|{UANoK`SS^ueC&Z@v^Y2WWp0k{cnvzdi0QwZ-+ciedR?S}@QvW$ z`oz%8Sl`{h9z*><5+5g3fBavD?_Hv>+$L&EhtgK(xa2tD4F`*#1BrG+Y6N}8kyDv= zwGQPM%o3EHW^O{_Zg;3`NzUg&ff1JyB2V#@`{@2|M3Wc+p z)@231&{btndNsi8`b3|=%=eE$kxmIi*88;E-Rjh@T@yEXbA@Hp@Rt#_q)l? zV`Jz!cv3m-R)n4;WEXrc@t-ll4GX}!xCg6MR6yWGa&lCMnqp zBkSC|&qm?EoiINiM}pDJh_7%y*D+0AAS~u)ZDoZq2Du_3I+~a5L|f4K#I%IO5X}-n z`kU2SWo6|Yd>3dyNR5VY^_+F#Jig24Xxa*nN>H+ZL#6}}ubEZLRX(#pdS>J6! zaMv<+-07+Zr5p?ir<4gEky*)$UpyYhbmfDx*S6?Z>Cxet&zL-)DT|yhuyI`spenXSo7lydO zXtZ-jFK`AVee{khN=ox{lLW{n%tSh^?`XdJFwm4U;Pc_ENDC#6ca=a~q$Y3t z>M6A{WTl-x{q3_)CWmu|H#tDXL9*o$h1yDZL^fMGj^s0Ya8vxAq4K+`l0)z*9+io* z#_c5~zg=W@vNuxH{p9;^u9))3&pjy6U;^=1I>y1@-yen)35MWsI13a8bVN}RGd+D! z$sHiUaqQemUF`oYaryVwZuE`dm^@=_3_2WWSLrAn7bpH)=U{zts@J{B$3dVLZ~0g{ zLNXAHccmrlbB*%8x5<~;hP#9WYeoeH_dUHxr2{$G*{?Ntwwev|{^KAjg_O!Kkgx_y zM4;8>92T0_0U6}k-*rj|d|SI%gw=Gv~AhW(E&Jo`i|_aD4QKy0h>N*I^3lhbd?PYM5D4GUI{!MV=e)80$(Uqwh*)&9pBrE6^Q&nv~svQV*; zvTzsV$5DUl)G(xN{6^7fsARWX+<+?nJ%0tK$OJoqq@^st^S$t~r#BOJh5zaL^6%cY z?3qdozIQARDnd8^*Nevf^P+)R-8tKZtn&F6LXhSV!a_%SooTj>T51w~$1o#kChb4| zv0rHaeBozKf`T=-zvwcQS-&$Np6GNz;(1E6K4yUT`;TN*_s6ew`f&II;^tQh8?atR zYUJMWXSlSAB4(wYA8S{I1W4vUyTqOB(z5o?-zxdrUUnH$H?F74>2<#MhkO8Ri)?W; zoqjq-(LtX^8ZPu-M`EGKbQD_AvQ0c6o)};FI2;eGVxug%Q!rS!_Ps)rQxmQhq!O+Z>G3fVT!&py0V*T3v;Y=RfZWiTZ99 zQ1%XV5n|%vpMPEwE+A`ua&|TVs22e00oemnKx$iCfSerKpSiU;l=SptDGHH&J>hbhx8xUm8af>R(TPyy;F#+Z^ z(@=QBX|XqHw$(S0>URH!4>mn9LQIUEgQM2@JK%78ARFeo6(pMYe4U)k$SXNM zKEBM3*3xa(iWJu0uF;7|qlE6b_K(lCnM!3phQ578_{Too5=Z4uAOgF;CJr z?Gb(nR->!CyP#F=<@fPWRz(FbK)w&6z!@B^`EP=+FucVJw7xJ|;N;@U0((+VI5_3L zba!LySW8QzAO*bRr0Qx^+zoC6a~m71il)*jLv(aBA_hW&uA`QK_5uq5hE`ukMs5mPDJdyM zWo2b)(ysZwHEE`Jtcep2r$OYO%MuVq*3vfNJ5YNS9=YVRm)_IwF|Fg2&6o$%%mHGU3Bf_`kfM5~}x&V_PJUBCyJE z2-^&yXorAQuP}O_v*SEPpWVIf$p$xctwNwkIXPtx=80-lUH*3HnKKfFT;7JvOO>tT zH^te5M=(p1e*aIAETM8)^ktxeTG%g{8ADy&%gQQ185&v;c1e%ULI+=GO17q+UichP z;!Y!7+gdMyJ?;$R1UNWK%F4lqD|g=Cc>eXU2a za|WYQ5S}1sZ~|mVyA7+7HU6eR=f{uOi*_Pe8%s;~hOqy=clS;ph{E^&efVA%rSpr6 zYoCvoLUloML8(Tt56PSQzgezfb-4`Bf=%h3qGA#YH-*DaQ8Zk<^XCH0%VmKq{bKM4 zU$zKJ&-uyPrIPAyx`MJYd{kiLmf(MBFRAW;_A(>2tjs}OJwY=EeC&(9WU64MV`?Lk z#kaDy#{4b+F&q&W6VnfnA;__Pfk5!XYQ3bN`u=@TqVD741MA(qFgz@b|K$V0+zOm( zqr>kYD?NW2ahuTxeP7OZa}GsB1fe+eo)P0@G+!^1Fmv=Z@9kxoq#-){_?Fa|FBXpm zq{pvi9L_JalJ?9fb$_NVu7|u`_kQd1z%9PGIcuV-Q>dpJ2}*nR zPeVg#FKn_Uee2YI>mwXHYfe=~l|lfEHtaXj9tbNvrP{JyP|S_;cp~ zgKzkI;Y%u^4)QoNGjrRR|3mmD)hXaj7y^_b)N(`wBCa69nfw6^WmHOb;Cy3F3-zOm zot<*w=iVV}1uG_ymjtfbS~UVf6P|AiwIkm>Jv^XmIs=|c9O&gaFg_M1ZgLVIVzz(R z)0{EV`@Y=l0amPPG&NBm%kPv_hP1d>4rMw~b69;_31j8a4jJexscHsYkG!My?>14X zQEkb(OdS#l7pmlGN2Lp--u~1dCgFQCM+WC?1CXzK>r-Q0_Y)vB#Ovp`K_G|5_FONY z|55Wu+3={N>%OSGoRziJ>R^s>-%N?_FW{9!r{%`(roS{%B10&4#{xQ8r;hKzA+3bp z;c}VlZN2d~I=4-Gki-0CY|OaY z^G(>CPw3s}J^gw_w`Ne!_hUwMAdm_4oKrEWT+)7V)Pmh*w!^pRq`I$6B$n%86wqWj^nnlZG7!ZO)__pd|fRSf(a5AH2s)$3F{fVG+`NY4)xJz@f}CX!-#^ zh>mymcisPV=}$2F$z_qbMyGG-#`7$~&~@D?U?ES?eW@4zfoO6Z3ey%Jx6Ux!r6>9$ z1f1O5R)PaWTSs$Wufk62d-9j3<0RrUjLP9p)VFT&3I~d14Vv@Ap4iLR2r#}ckx~?Y zRQ>$?pj!kjOE!a>FjGQt%~BJT%AWLX(u(;VR`ouE(Ig^8v6WJYBp7-@fL)!}V)Su}PEmzjXoZ>atF)CXZFH*jR(dW|E%o z_VInF{p_}mc#XO~F74r|-gPN+ViXm`bfm&fbV> zFU-s5tIOn-Myq9^_3>tJP~QOX6}lE!A4yIJygnvSyV!gkX>T{5ImAUMfw}Ub-v(IA z@?W=FbSbV)!UEtnYFQd#2t2R3m3vDQ&QTSWl_>KLIpsy8wI-P8bHTv-B$r7!FDQu%gLLWA3gJ-5kk7+@x`KoU8Ni zOX?y0ka(~@mq#Nzbdi4nAj(JIXFzcNA&z#sNiB<%EkS-Q`^5`nc>$UO!AB0TJOeeE z@$xYqXu#9@erf1ntLK!^#bpa_cF4%!XJ!4+(}O8t3oLxpWs{0r#BrXm-Nnht1kway z$A%^*7?CbNiPH%=wccl7pqps&`VBuWpEA|xVY_&8SOXG-O*E4VjxUHmKr8nk(Lyc4o{_WtH$Tpx!=l59J;WT`{aTUl9HKvXn7GXrGc5BxxU zJO`k44u~XR!ZlJKniLZsCjKc;n(n!D)gqK7Fz2y`3dVe6{@wwIUg(P=_^G~Ko0bJo zvn#tPJX1(_@T1vCX!3C1$I<*fO9#FDvMuAPqeb02WXqWnbFte^&!P7WdjsBvd1KL| z+Cx4XO`v=?JL3o!dltIS8$5_8cyFgjIU286OuXt+qyFfEB#yI>6gwSSeGWc}rj{(l z?z*WQLr+rzXzi*{2dM6TzQx`?&Ff=gKc~Wsxl}aRjCvGjuUU%PDS6esUPrax`V!u9 zGq&L%#ABVxVQz6}c(FFpz`nnGZT5Z2gP|8?j!#mBL($$8*xGV_q6yI|8FP6$74dU# zT4M^cCwsl}UgwR33wMqe4h#+cE$QxNdZ=4qbxGYted6R@aD1uuP=_;6ZB_q^+I_>5 zAt7VY)Pk`F>Xsay+rQ9P9j?AEiW7QI{r1g~hHdz37w+HY8erole<;M2Si=@XOH0J1 zK53wNfB%)T>e-iw*Duz)9!@!BYNOLt`F$88c+U}8QI&h&4KG%FW&e%kiFWN5_Q=Yr zUWOZTX77lir^FKHst&R(J8D9NZZvu#Swu!YB5oj?Fc`mqzVvo|Eer)SVY*TCIJ|vv5#nTzh!(c5sxZHF z($|00(4*%ahn7B+v(SK^(92jjyJPIN|10$}aa_U`r^}pQzryJDv(fIL8rx>ipO2?O z+VPY4a>tZj=euB~FRB2hIXnW5n>_7+`%z;vc)43cXI5NX+@}s!Z$JRR__rdm$qJ_B zBMCd~YakZn|{|%`mx^Pw9|C z@(mqws?x#10iv5Z9v1~S3;#xCWesosbaH+!f>MWSYtkg%7tMNG?UowOzB#wvJ!U^{ zf)&J0hPpco7UR@KZ`Klgy}ftOlaP})x=fTlX%0WaOZOHt7!3(wSyvJE?Fvb5!qont ztM0c`ckY>=EoJ&f(sabzd2>Ce3NNrqB;l=^OcH&^efs04_`me~$X@sz9>}nq&xwsr zW>3q1`)LyMg-GGa@2F3gEi-nJ=_!)y^OC=YJ|GJ2TD%}+b-O(@8tSr^5Yw$`_xD64 zj$P-Qvvbkkqc{w>cRxu>TkW2m+%q}T-{{aS8bGpRtt(v zYkiC_UE-kkESt>d_>wphs_m$czp;pHf8tW{l?wNvuFE%F&d7{>ITV!F);vwTRWgS? zVx!*QN06f1oQJ;*t!wI`Na|3KKO8&G+=`Q;{Pc;Z`ZS*O-8$P~IOT`D6Xy6B5!0^y zqGXNS-=*ZT4_D;QL*>@8a44Mza>~0NMKP6$B2cJg4s&rfxUFv2ITQO>|B!Yc2 zic8nEJ<-~D_Rv)208Gf37#RCRY~%G3LBFOPkb6aUXIdAm@F@yjz7c@QDzWh~T0|IO zmVRzdzzx1$m#*B70cONGkF6qiV?*KQXbRHr1R05&oBDZy=2N#b^pseJ{JdAMU#qI9 zbodqBhYWO;y@d&&odLmnd)^Bvs_^9v>OA9ij)YF|{ASF(&e0+oHhJS#=|QScWW7G=}qX|9_f|%`CS(=2Pu$pH!%UXyA4f%q=(XW<*hSeiiR+{ zrRA@rB=W1~^k)}-%1)x3B{=e}gw6+8$jP(HZPcLwYgohBcK5<$mr7}|*hMg?r5A_8 zjHE`!33wWrmQcDU5~jB0Fv^CSjKC7fS!>w??Ogl;?u?O4+Y!wyD)-XyEHM#w)ON&9 zmz4&j@HgR? zXqcO(3R_Nlxq*mcs{Z@5KCjcxhvFz0LVI7~FcK@Tv8UK6Z~S7B3lNXUSKL+)tm71u zjo}L`b~AmnDLLS8WtknC=R@9Uj!Mh8sOxH$!u(QKK8&wNSWE3xq$9Oc$TnXFUZa1! zHHj(hz%@Ruxv?P*R_U2s25TBJqur~w_(V&Ki*$KcV+gO3=y5Bax)#j1cO`7fQZk1> z9P-<)FJs_Mcztw0gM?kc79OC@>*0R~?9)2Cx;#G*PERAa`vwst=cJH4d}w82(q4!~ zeBK~*dkF7YzE%Yh_uIc(%Gn0loT{r0eLOu8_J4n$-HgJ#)>2Xmjf_OqaoC>+b7=z% zmXMZOvFL;Z0gpNk0Z_X4^z^i}h(cVJZ68d9M;jxQSKh#d#USNG54`)nth_Vy?C49f z>IEtwUOKgQlsT9slR~$V3SO3P;FnB(`us)qj$dOyP{7d8m|qo-fI#2ya9&sd+C^4w zb|M<`H*f`o$s-R|!}RpIaATu>UG%vD>o&scl+3hP^VOz*T^&E4CP`#YXKYq79!@WJ zO6)id6?$K^+GZBq!)Ypc&-L5Gq0DEC%4#%))MA-5wBa5Lk}nj2X4#FS#2vL=gdNI5 zRfpYSaQe>uAmO&@TrBN-UTb613GWZTgZde6Gj@e>Eyom=JP$^qH8Z6Rzdl^Y!)`PE z`B|zjQv_{e;cHKwD^a5*?$NvCZGrBDQXkW?kFPWn%`E8_KGDdQlMO}W`2^FMZ*#ZS zoO_-lzDbg&V17ay7c}4Y_c1GHO5ABPw!i(Nv2G7n%h>SEid6BW5AFy5) z-QlE+iC=MDe*UrU6&adVy9eHP=j1B2?_Vgb);*;~kwL&b>Ewfl7<)u)rVFC@`1s)1535IP zLPDqgVbhc|@h>FRhUFa_?JPJ!!$iAUC-yW(}pDQ<4K`pn-Rl9X-6%217 zxJSV4_iz_>5Go+!mqRzcXbrBXfXN8Do_u5e2TMB(`h4RUcwIiNWM;0bsBhx+_RmS6)@g%<*V%;Jo-);;dxliA+zXLcJYFKXUQzLs-jZ->Yu7o3l!h%rlg-Y-alAcM zczL;?>{&~h{*d3^^(ZIeUat(rV*vVQuWl;{0M{X^P}kmmz2#ML&HGk%-iC zv1Ne$4y1|;6}c=d(L(Y#TftXu)0^15nMMyx|E-E&Q?2DUQ9h-{eQ%~J?yQ)4qX*K|ZY3YO|iD=YT)c3&IyZ`~k6s(+b? zU_N}d%f3Y`!&mm6fX6mGCFRi`7dU=YkYRpM_ZOzA`((}XSajRW{KgtlC4Go zfCTbi*?8#aq~zs2z!-X_*)Qy<8K#~>t)r#RMPPAZl5&0)e4}n?_;@(zs2uSbb@P&vc4;Y^rt6aR%lTb? zW8^Nrwh1rxKWwDQUG|Cy%`Dw)$wCHqi!iRO22#^64SEWluilM5e8unHY-*xx7kxJW zRQtt;wXx!hpcAGK&1BId%ztO6bkw)wH0%6gk9A(W-<^L?Y*+OvN;BA&)A9sqhN)&FJO%p^f86bAx@X?&o{zROaMa0SZzW%3 z8e#|*_`FrqJI^H0+5e*a6Ks9VN{7qd+afrV!wJn!Gfox%5(qZaDjoVP6;_uvXbYe^ z+RKc15K*9eFONGB!qA_&9%>YcYHC(jrMW)WzVa?8uxf4X?C98~{|gBTsmU*5ckVs| zAqPZ8?2-j0vfOh2NW@{%_wodO6A~FNkX7F~?A#K(BYa&42fB-%1}Ffkpq#}v0w`!sn$2!9$!Dt76 z3|QsFQBVMf#P#Z8;`91YQe9C|kqPFp91~M9nZS*v?Cj7KfIgv9Kg?pC>6i0M^8Z8@ z`=B4r-P&FzX7MY~nI=c^IV&~kP2h5{0$--qRv} zb%!$pvBg;kdUn3vm0qP`z8St%>P;meuc9Dw-<_L>|5#XLr#GRu{#uu5XVgiomFn#s z;j7`JJiN#F1J|CcSab`zueDXUtVErHj>|6_NV8>$lsd?W(abh8!h=~NA2X|mKiNmC z)^ju|^&b+laMD~bzs2>;jikvPuQg^}EEUytn{Pt#sVz5*sB={EloQF!<4laX7@IsK z3w`e@O8I?eg-`b0CubPirYvxa^M)7RZCQQ4EvzS6ilbbGV}Vh8Mov$DC)8xSd$w-% zxwq6?B>SXqDNd{@qUIE*XHsvHh$ARk>yNeOZrg8jEf}G@bXu+aT-^$(r>cppmRdQY z6|ZSYc(+x?fDtA}QrE(Zt1{t1aM;CLo`yJWEYbe1!^UEa%ph{V?UVOMPOik;Q);?$ zgQ^AFgEwnsZ?n-+%c6_qC&^~)yUHlV%&4tl%KgSZp$(ELuV|hB6+1V3C z6s*oY;~aH`rA^hOPEI~z0eH=2xp7kvUVCwgS>f;=8X?d18?)@`siC7SC}_jto#I7SB$9u$dr)e=6rOvp5gS57r?e;NKfst@bRCp+sFr~EUV`IZSJx5c6o6&*4-WhP*p02KafYKn`j-9AC%l$H0#INa5lCZ87 zQ`x*V@1|-?ii*2+@qJ>eEZQy$f=y8Yl1dJZNTJzh4b4qSAD=qRhWKdFl?2M(^Q+cq zet#^s+97O5MJO$D6k;X&eq{Od-2p$L{f?{>7gAVfy~X_ekMa-e)q+0uR`zX{#GB0f zjm#S3--X9aG~(84ttFn=Hr^`uUx~Nb!ZVYdgE=9~BOj;w$1N?Z2vd^!^4|p5vz6}W zSk>k8lqcVJ8PuYV4_*5uLp&6<;_`R71!kB~=5u{6r(Z#}EhIX$>B+*H+@bDEbemhf zY<5PUOiW^5ALPvT7rq*w(BrYn_c$vXQA%a!Or1u3ElVf~kLHwPIIY;KZpmZ`>s=+W zj*ljo>0j%bz!wP}L4wh)YxqOmd7P$_wSWPpwo-*FiB4#FG=DhL{23E5y`srqT2=OR zmp`a}&v!FiOHV(4DIdUQeW$l?Kj`b34ohgmF^S7>yo{7*t&`zwDJHnAyFaYhG5pF; zxpULPhdR7@+vCJBBBqM(+D*}piq4kYmQEKfC^4ts*kLBU*`H(~azOCk^K$gK-Ujze zA`*;5UOU^B9?cey#UO^eGlKJldI2t+jQk?g%F_ak(2ukV;EK1KWcXcJgPq!OtFYpHLQl4hqP%eo00RRZOeWs+GC2v~;${=xI}} z4)a_Tq>)GlGGgKVZt0t8(3@>I-tiN*s)e}a5WPD%JY65Ej9v`N&8@G$P?1WM$SQ)p z;V$ulRnqmEuxjXIQklxGb%3;+9Q`WLlhW}c8v z)&+AoyV-M|(m?H70?Te~*X(|z2Pc?fqISW>1&K^`Ee6|yBhwt$s|+Kd&c^v44d1Ru z@0ah7Igt3_J(=`aJ}*|~icWfwOkTAFZ^<4j9;>kd`$N3*ib8D17mv`JmzQ<{ zyZn=r6V})5yAm@Z*CrHP))iJm8Hs*=<|g>=!Dqm7HdW5d%E{)awCuayFw>tKf$)0Q z-tM8HA-!7r{9^ykZJpZhdVZ_RD@`Hpplm|KB!q3i{7Kb`PXOLM;Oyf^V&A{dYH-1g zO!7V98IXX`@R*(zU4Mhw@#oKz^G=ZapM?I$EH4z{+%Wu$l%vVY9U+Pc={J z>U&!oLP&~iqz>zhXE%MNXh0Fr8q4lv3#&~~V>~roxRWdXMWCh4ce;jgVw6fnwK{d6 zwXJPqZ7mpQS6fUq;)HnqKC*Blnt+4D*7){fsps5E^g11#pgrEkhFOsx_Mb4-6RfY# zoKR&lGtv@x+-k1>z6DDZUq>gW!^Q0i0aP{GX`0oBx-3?ODVBRj*Oz5u4ICiR`zFs>d*dN2WB197o=(kXg%O z=;y}Uujs+hSTGXUK8!J^c3{Kv&|?k+%siQG2v&xkxz8(|RZN#qiI6dLyf zLRu2?&~2tBo|>E;{&HbHyh>{FqW(+<><-txK`QQO&odbOJ>OB&^YQWu-(_(bW#B%f zRFM64~h0a#>V=4dwqmY%)g%-w0??s`=}@ZqWLya zW@h)AE|J__enWpqLr1sY0R>NY=kf;8PnhYYMpNVe(a_LxWbD(3+SOPY6IW7uQz6Aow zYwla&+miP`Ysv%gn7G{+9&ZgKK@jOT@EvMy7J-o3uJCNRzP?oi1W?1@(R^|W;p*a4 z()iU3amKQpV@#TLRiXA*nGgVb`*tC4`UKh8hs`^%Xb7JHU6 zTvlHX24Vy4LEm4mX=-WJ)KoW#y1jlaLYbOH^V!_|uZtMn2G!qbP%L+eYC1?ZH=^Z2dF2?PfLNA-CPO* zkH|U^RHsUREuj}ZKt?6vGPN+VW(JrDG%@=6P zLyCnZ8#|3Avp>GKt1Fhp-~w!U3>JphpB5>>$BrcOd~J+W;QgB>&r_G*+fss%yD!-G1Wc=ZzNUtR+>d`xC9N+{XSKc% zX}7X9QNp$z9k;Qu0kO<_VPRpL|8k-ew}$|a*!J#fOW&JgI2{(Tt#IGWZ!xXjzYS`QoxT20MvYA8aX=&uexUoDW#QT{>X-0Hv&##egne;b!T+69txIW{R zmF*pAXm}f6ke4SM`CKYD@8#7|J5-z|8)q2IWx`nLE59Ev-47&LUS39?q0$U~e6g>z zwA3|(7#$R!N8&*QdkrT#nv1M9Yz-2U0Z^JO&oy~HHR<{LP5A;jaaUa>RTa>&0k49U zwBpN`=+=r&yr%2xOXP@;IXI5uw@6Z&m@!^Kc4nNnynl<}UpEh_BBX^Ltn}Wi_n7U; zqiFomH)GZ0dH3JY%{#*|_@_LgBolBJ)m4`^8_LLUycW6=;l4MLLsi)@w^{~34b}KV zDEB+lRW@#eE&j~94UYsVI`}!hh@&AR|6S0zvBSlCjzx@?&8`^rVu)MD*a&|-hek4U z6)$)wUB+HZPH0oy`N9O^HmR5?#nKfRz6=w-rwcn$=00QP+0j#BcJR4akAvjj2m32)zn1oP_1{4|Q1Li|ayGcuQa0{2ZR6%%WPoir#UmKrs>$mR#D zpI!h1$I0p52Ns8xk0H350ODYfZIikl7&rT_WM^j^XWYA!I5Ile)!RES2(*^L!GeXh zv4!VyZXMSOqK2X`Y*?R#M~0YM{2X_w;$nz8*_?CGfi4yZjB#vsT^YUF-fTZ$Y1YG`M_H}T2H8cm1Vwze#|>wljNq+Z=V zlODZO+#Q@-9{du*(Tb;NA) zIZla|yMeLpKrZGw{=+t=UCfaog|#W)b9FSgur!ALUDAn%?rK4An46P)q@Fz#wpA10 zQB-R4 z?OtAKZG+`igNp66J)(}#d>7J4?_mrQv$OcDPgPnq?NIt*J|#f+bkU1>16dLsW}rTy zs9X-x*)@sUKmU_IS{pm(_HOL^wD1eX7g}0S(@=Hd6jX1O9S z-3^P0p{1n6ar||bAAG}wf(viDe5xOG9dm95^PopkQ;WRlVkFhVs;fm2xr7+JXfAfI zuUoAFQ9Zqk-jPRVN9OxfO+rFY`n~;)Wveyg{){J%QhJ3Cc^ZDz*E)3WLra0yU=QS4 zL!K?m+V?hIHxxMxB5o{dUi-Jcs6eb^xhKRZlL(S&fB;!;)dv#`HC6Le_w~tLp1XW^ zD!n|%d|n+^`ZVt+C?6Snh^=PIY`RA+b#-+`b<~zyGcPA&TzF&J-TO41E)->yexGdj z#>SbdUxgM$ho2$|%m4gR%rT_IEjWjJLC|X811UH-l%-B*&-+_E+@z!m60~ zD$;vTDLmBT9cAz`mhrwfGp;7W^isHM)!uk_VkeLMpK>dSyAn+$S|n zO)5$+m)kekk5G#};FZ8k1;=gIbG0Ks`=v>3`SCcM2~6RT-_|gbT6E-eJe;)!;XvVPr)`>Gy_Z%87j5+**R* zZ`0;BSu8KC5u{CwftK9eU6X#jJG1B?$f6xj=}5kB^HuI(d61$?EXlan6&gBoU$kdnHsY-yGVmuASC z^u?-c)-jJHKhKZ2)%G{MZFj`gCsg$^hK@1*^s3- zSS6F*u4l6j_vjw~_%}8WC8$%cF3=I@{sD)eo|xtfdG%U1b0kEOPar8cdvT!SDJ<#g}LV8c=a)@DjHEqgdms2K3GFP-GLT2YM z(rD2`Qp@2qEXQ{Kz0q45Wj$GG$!gUySHbv8X>gEP7wsl%;IbL^aeeNMU3s?PT^7UT zAw-2cH`jGNCzLV@nFMO8Vlj0Ff6am#O@=u7qKUZsf)>b&5h2FU+%GhW6ttzELXhx{ z{vju|w$`Ozx1Nf*aC7ZOhohI?rr)etc=&3PjDRo;FG&%Zkub7E<*R1g;9yB6^LH1! zcOyf~foRj;#w8mQtUxTo8Q1%&RAl>EM^BgWyYV((-(Ol&$~56$&jZ;jO-Z7HqZ9Rh zv^6pPek}~*YB90X?E+H6wDigy{^4Q37bu@T;VOJV84zhd-IO%z@!4gM4!961LW&I{ z=c74YUHy9XA9!1-(%+)@2ZwGSGy>Y7aJlwv z<)JQmZ+<7pPfVVt6vry}0=zG!H2@N1ed|ud zhJqT};NVko7OGOM&@%SsifoPuse5h@#M71P5Dy7|WVWAIom8?G?=n2Dcw5DtrPohA z8d)h!##8Z*fHz70g-vJsiRiv2Ep3fNf5Aik+GkF`>G-&!It^zUjysC;n~Q`lA1p05 zC-{YpgbF;VwR^KO(ijA+m$)nkyp@b%vW3njAAuIC;h~YXJXo%p-R7R)eAo6F@3+0U zFCq**==BcrS>NF(`a0kH;Gaay70Y4iywKvW%kRQzI_(GsaFAHV<>duM7c_(ZpV=wt z=yKB14EwewA|vr?cqboTo(ajJGWYcN`Y0d2>i$GQVCLZ+#Zzp#?;*Da1-sx##|VJ?n4q1*UjIgAF0Lq z{N{`@fSRk*Xh2z(maGY#-$Q_%NB<$1hK4Fd(BEAp1@b2p%_%@^3Uup16}kw?wIWV{ z1#y_Ws^@Ewk{(#ieG>w<_1XS1S~x6pbHEWm0lComAI7Nv#^yxnn19$4e8!g=KU?tn zY(TJJv-}Cy@b#Uh>FrreaQPXI`zZO-x#ou?x3ttBc?8T($jO2}LR19koI3#@J?8(e zC=dJ0keVfVs4DE^BgQs3xKx&xCnGM7$HOSL=)P;ioR;o!twz1vuEVu#*j4z+Nb;%F zCu#kK_3qt{%AI!y4d2T^SG8}FzBa2TWl&mOSk7*ab#RqhoNO={Wf+C=>(8_QTuX~+ zYhG4{2s}41=d;sn4GiYvtEZXIrC+=Nu=W`*wbrg?H0GVJCjE%x6BA9%Adx2`S`&2I z2Na3VHqbBAFC;{f>cDiY!EJ8jx$TzEDH`6^WI4`vH8eEotBa$fBT!aIN@hR~fpUfn z07te;N`o~=#Nfn~{NukVm-?_;D2`&%W?g&et}qy!Z;^u6OT?4jbC zzDH1$>9BYRJi7^@eqoG|7`jWWWDRN|r+2F){PywJ4=nmYHnBC;m^l46h`QN+jJdqM zZh#)==HOo*{FCKor^-*dja&FaPw9lpN36BUVLK{+H-;KUKvYEd}gf& zwg)S)kfqNCw6UkLN>xidBP&aCS5wk`ei>52jnW8rQ*%--VD7^#E?z1 zwE&bB0$sG~$4$hW@hA6!Paz|Vh?w}GeM?&Mqu%_Y2q&hym5(<#WqfGT&wE*J2C4$+ zX#`!@6huY6y$|}kx*lj^u;wl`)4p}of7Lr_2fT1(4Acd|2=Ex6Y8f2-m@ot<48(J?Qp?+jO<^jjyds_+MbovNx4RqGFl zeywqK3V7>BFpj=_v7W6y-`45L57tJ*>oF;vfVl6_W_%TVLOx%9w^0BRnrzu>^K28| z8TWts^l7rxq43L>dv#z|7I4B3=K-`GkqBd}!f0Gplk7GNkCS8JY9`~epKeCNWYVjC z=Cq$yfBqYjfF-Hx)Zy3UJ@-4(Ogc4do3)b;y|L>#V~`nma$~ zYs%X%Rx#y_6)&7hubSdQbe zxOvxeNC61}y<2ZDBehJtBlDrVp`oFp<4Iw!6y(SX3Ef)x#{A(yv|yxM1nkYgAvIbp zUrVTm==T!J9vKTK=LgZ~YZd{fg0iv)0;qznA0r|nel0DOSWf*0$?aD(Wb*&TF47tV zyPSE$4Hy8DSnpW70EfJZ^KoKtXXj~rxS_>ouSQC^|6e-VfjT#t_p@APrMV@hpzyNN zd*{kNQg75JpZ6a<`HX&4hkhPBR6sg;Kp#EKRc1Q)@fr(zN>TUn6tlO@8Ljt5%6VZb zcK0sjZ8uXyubW4Lk3qA9`w5@P?A7J|{ywaX6|+@t-}djD*)x6f20lv2hy`Uzhc;K9 zo{5>+WQte-@Tx7QYVJPLM_ElRD7e}m>7H*vmQ=jmclWtcOiT!c#yp5~Bmzki*iB0w zI}qcTo7&pncE<{{3Tx+9t0CpDQcB>s$~6YX{4z`MI4NAPE1@ z*+9N5us*#juUBU^Iv#rS{h813?chsyzwtZ3 zy{?hWg|6>^b^$cu)*D;ikgHBiw8k7Q=&@O0nUP^keUFHQ+wtwC?-B2$mRSxRJCP*} z0is7nhQ_^L`GQXP1LfqvG7Ua!3Nj#><=Aa7rPJZZtmDp0>7+m~;X)m)We$&((YmF>2KGGj@C67I>=(oll z#&bQ$jHtv?Vjs;mU^d`PR)zQkC~HIa_rn84FzLQ!5Wz|{lX*+&Jto`U|7TX$&bNeBuACyMvBykSMn?QI zL9s!z?~T>2eA69J)&dys7@e5t0X{M*XP~p=f`t)KKtO)R!^;bD&6VZl`{jc$^wK=& zg6qq>3*?6umX^7$)sS0~NBXB}`vZ+Y`G_-PD*%}__=zmN*VLQ7MI?hx%>!Lwm39#M!ORTWL|{l`k_lLVqTqEqM)U!22tVqj7ZxVMJuoa#R1K6N z5xKER@&ANLqmoXa+<^uO24Ps<1E|?^3KZwwNB( zTs7D=->(}W1|zMT6dOrDkSCj4TGm5;iK^-doI8*a({po2X9@6r#VBSrY=@=c>(UAE zBPAAeubbnaNTTxm!az&A4hl;!ZiLSiwGd_vbMPR>#>NI@6GbI^sZ0jpa%z`ffp|{u z7U=e|F5W!)XQYv^)0! zK1{%;QD*Mu!};jz@5j#xi;DyBauRqW)wQ+F&F+_HO}SvtTxz>4Re}&MB8Q5D#dRa+ z>hJIG>%(|>;~T6ic9GN5BlFR%bJMfl5!!;5*1~^;s87>s;5+s5TdKk;GGZyn4~1d{ zFv{Kw+LMP_HYe)vfIhw>NCeaEzm+H=i_*-3#k;QV*~w2>ee5TDdELI~1Lu7!QkxDT z6mAlXJ!yz>hiw@9n;%JF>;Yn05HPX>(Ju?*adL22h51;Z9)hgTiqJDD0k}bEd6IL$ z{0waGPB0BdJ_Q8$>kWcF>xuwlDV~0U8b~Zf)AuRGVc+~bw#T>>gv;Tujr*@B`KER# zFe-zrtmWgb3(PRAtgK*%^8v;2jhUI&Pu_*K4O@9jNV)Srp@O4a<9tMyRxIL+{z0?4 zre(|2HT2x)8q6XYWFUy+?lI0&(}!T#m} zDhP-@|FigyuyNSuvU*0fdCnG6g5B>itS0f9UJ~HoEG{evrw%~KkNaZVJxN9gVE79c zwDO=ngqOl<)D;er7b}QLxz@@;;n{(4A4n^g;E^fG1Mr%RE13u0pzf0=Ph4EiK_^|P zQ(FPL1JH#-OfFR4pr9bkrR0`E&ru9AfjVHwLj2*-@G!imKg&#UEIydEmcwJt#PpEU zg5dE$FtbX{f!t3>&)bj z{mY+UN~dLHpw8TG2Js_!TY~3oXuko(E`X%zQBHPI(c9~*%SVY_-Q9642Ey?8FD);F z>lXO6C4`0w4|{`>AI*vcxa=S&G&D92?H8u$@%SX33P7EZa%oA)2{R@p=95Gp+-&ZH zuF7XUt}rSIf4LtoZ)L?~;WRD)g|sLi@g5P>I?;<+Qf_-=Fk6zL4$upYiTG9P7~RbEo)Bjka*${UIyw#hem<`5@ z^6Y*}?-ab%(6Q*x2+ za<6k~6`dV|H%0@`35gCrRxiHK)(^YD>)J3?L`E@Owee*gs0F?pzz<-t7-ymJj(V;Z9Ut$y zzw{!y8E*5H{>1Bz5&A3^=fgFqHzDt4N{rBYo`Ay^_&!3v;uj-QA<4uFE((*Av9rF= zMG14z43CXHktVP7xfxynvk-X?1#BAd7ubwK(LywyN)o!Abuia-TSE=pCPB%{_kQhL zqBcC;?B~!A!+;2vil3;exHw|hJVn_}Yw6uWfR0$k!^(Oe@6I~7`{6pn?OOo-1$gf+ z3Famx%`Gj3M@FhG_xM!QfhKbK$bi!0@(i~kw4#DjlMM_H#}#0r^kzi=LXmS57YIud z=;A?o7fs5$ZDx7u$`=2=k=a|@4?rsRY`PVc%Olpns2GFl{)R7`n2>8DJcjS7z>A|`xqHmfBhlyLLJJpLO=3x3+D zNdB2#U=iV!`1Qbu@pHEMg|q;*4YL3v%_HgpTGRl2`!_;~TrX?nk+KW##^bt3ZwoMA z`!24}m1KtGQN2z(W)2B6R!}3Oq3#|#!N(zaHHM&xEZ#g@8mPzY^?gC<)n38EN@N)& z{gU{x!B(RJ(N*9}R3s(ol3Pnb-kOZFzJzSMIo;YzctMc{rT#|l&?>*8AIgFxvz)xL zaa17Qe+WqT_)QoJ8Dz}xLw>MoWY)p_GtYL;{V|Nb!k*lCVC~SB&$5!rm4}Ep?6xW$AkAHi z-<3lfv6`tf`D5%XYKvESa8x`{j%>7?(kO=8B^LW76;m_tsl`Vh7ygxlk#G!-@D&WCReX_ReOx;^LL(8 zG~es}$&~0j_Cvmq@Y6T&ZE%enPvp~J15a-)l9$xH?kV3}_xTDQwwhR#1^=WE|6&0_ z6Fz7XFZ3F;5q+dkTheX~=17IRmsU}tJND6%Oau&cpJvKCeRQr&pmDqKr4`FOe4FM{ zB`H)yd=ye|nt`rK@hI|M$l-vh?I&Bo^4?;eOU(zH)A?+U{tBh-c{Cf#3?t=?4nli+ z+P5-|a3+^-4WiF%G5UyE`F8#z|Uh|x4>~T(*^?0)I|^l2%0i+(E$2ndLZ8UrT?3YX=^o8$(tnkNCTQ5iUgZh+(i0na=7 zs3U|j`1g&{^Av1~p_9~m@d$-y3yzqWz}-R^eP@A=ZedxC|GGf4R9sq`o}K+cXct(y zfcrfVTs5p<(*Y?)$hdH=ox$k&(IGuO-2j*Tz{iB*4Yi|sCiaMmni}GZHCTY_UqR`@ zrGKtc1BRZCk>ckOJLW3W`%j(jY<6_o2wFq<09Yvh0Ar?Pp6J-voZMV#ZnG93xR8Iu zr}O@Sch#`_;Lbv5kGBg&eogG>viFo|;EyqLxHafM*ILdP%jM($LqcAAa)Q0I!h0Q@ z1?Ba8+o>KCZH!6x_gKBMyhXtr&c)8r@a~$m^fO^pXhLiPk3oyR?Pj^9sl(ZK)tjYX zDEc3uY;EUO@{r<4lerJUXU-LJ`Aw^3wyEB>4_Ch~)LqxPxtl<#=sm2Lj&U?GdLr=^a0w zYW!vB-@s|t|El`MZ2~Mjy_)6+TFQSFuY?w}O|5ig(I}CtMMgg2>|Zc0G#TwgF)AnD zzl}C(GmFjB@jM7Ivi{5K=HLFZh6fU1j#zzV3Smf?T7%fRUf55GKymtRx z*K^ZGv63SGRSPD2OU81eNOaL$7lbb6hfIuKe@B-af9l!aW7}=_oW?^X`zJ#^Z^EPc zr61n=#CobFVG45$x2E_tT7J7=_Oy+5gl;I*B$~8H9zSr#qy-<(r#B)eCyq}|g>lt+ z`a|;##y635gE$0W|Bi!#g5vpl_=Y&z+KSS5ht3-m=R04^!43ipU_^LSyyBzsZrdzD zsub;mfz@B+!Hi5ycw-&I!^03#L!Z0P{4+NvM|g_-tBjl+P#ApkB4=4_5fZ>dBs3(1 zVrmg?&csB$pR8{W_V+uYfH4CZ&A?6rT<0LshdZLN;Rjgw`+%8^e;jVw)I}FyCWZ!7 z+U|pCFC6adwtw@P)0lqLftEtm)MyZkWlN$f%(hObx#Uy!yF&KWj0b=VmuHNPX=N(v z(odfp)62xg5gpKXcU=V4m;ROeYJG9{dvdMx^ZQsrLPAQnYVWp~J2-5r79UNz>mE5X zZZXwS<54Sd(%2^vyq6+dIR9E&m4N1ngj08Y%!Anvl*pc~gyuHB(x=`BHy9vF90QG`)lfv0O>}FZ4J3?5ZJPOtiJjp*=i#R_Fi(o!6 zJczkqb~WFXprq=gk!0Oh@@%BTeTZK$ct7#w5?Od+q~dVaLrgjr+We2dc<7}#NKu?L zsX2=!XzATuzp1GOOTJ)+9z-GhI$BpOnw+Pe=EyDNljJL0DwGzM?@d_P%Ab7g zB29-rqM-CARNpP;Oh?WcHmCcR*C zH{bRl2 zR-m2Zk=Y*S$#O5zqwbG>VI1fDEn?8k!m0h=*l?T5#q0|UX|GX3j^ z%U$mBPf8|YtcYyA(tf;a_6Qd{#N$d!V4?VpW|)a3Q^y@OQgLl%*I3u_=6OmG-9iu557eF0MsO=oju;qSi# zBaJ!Sern$j(IVQgEh+g?$ecP$uB$BaRXRR2*4RK7hbRhG^Zkr7*(aim21Jfi)CF=( z820Ewa8Oi82Fu~N=t=8R9MI{Io8^+6`XF@2Gi_}lzt-0A3CZ^47qm}UT5R@BPmeC< zHL6EBON%+gN2(^~TK$C-*;nmazZ)*3r;CJ)R4KV`}r=(FT z?2hg>jR`ScMw<6&yOsn6?dt|rBAydf1pNxA^zrLINS(o3L3O|wjHLDPH7nK(4#9h` z#z;0GWOr2dI8^EG`E9$}Ylg-|zr)lhpWV!921}B0bNhBbhe*N(mUCyr53hBKXFjPa z(=o{bH&WF%Mb($bR$}tk(+P+P@Ac(aWXg>yl)dBYN}_ z*RoGd_^v8QptfnMFA{&25W;FH^oGF`7|o}qDG1Ix^Ln`Ew>QcvYx#zTiR*>`s2iyi2N+_{+oj0?f8S3@aCk5*ngqjF8;xZJ1sN@R%FE+H<)=?XSBqv1$IlAS zbgVX?Idw>ginl*toC!78^Q*M4x$qxB-I^1`Lr#_jPBpzmm5Jh)w1zM z^1Uf-eG{|%oR6T91pQ>@%QBp}H;#X2maPq2HXhUCE!1HiGrS!dLhQ0iNd56mX~P29 zV>o4N%tkd$gii=70w{ORO*L1itBJsuyt=xAIgbR)9^ZJv9s=+^d(fB^r2s$;ni<&9 zKUjdr8iKV8z$dxh_0$$9H0lK}LqJpymy)y*Zq6HO*kkbW^4idZEb0Z-F{0W zynFQkrrZ+!CIow2wrZDSrUTgts8oPYjyGWyLD$pY#h3?_H8`J!9ELR=V zjE{nXf}A`Fa8Kms`K}Jv&P_o8tsw8D;iLesrR_-;4SlC8LEG4Ol9`t*^#r-*d+I{E zSCje3-pWIRm;E|9MrJ9=1$c?kY3ZlM-Il^ip@9|8$6^VH#RXhLV`vE!1Rm`VWRRZQ z9_&LIMfSwP{HMyuDPbJ&dYu}H_qGJ;JA~%M7W=s5TT}SUTjIPR45?OnX_0nOxF0rj zO||cO-Rad?p5N=$<0DyroadM|kyiG|HAy+-g)?>Yy;Y*qyl>C7g~dXO+2{Ek_x5rd zu2cSE{aj?dvpyG8ab@Y69O(Qa%Jda^r~88?0Y#64jZlkA*?Uw}f);0ob{{@r59LR& zPgx%t40D}C)JvZ@(#(aIdmpt7ye*!;>$B=7{(#+dmyi}+2Q9I72VHMPM3`jv0yFi9 zIzy!==2df5+9NA%M!P0{l!ovu2cHzXK4uQ0w^j-Ib7-!#Ux;_{K8HRXjY9vDb#{;X zj?l$hka6_I^W1)CW?_MzjmkI$SmMAP@M6TeQL2g}Ff%jfLCP2(@CiYcQA!Mo2BN&Q(vip7dR|B0ExxsL*w}Dg<=|D?Z-c-_uLsE&kd+{yWu!WaGl|1zPK_#+f0u)b zDzhYYc5-TRnCgE-FQrH8X5%K@4Fw=& zn?-04Cm|iw7EyxFX5r4mzrbFJl1Nicb72?<$mK=AKEGKb<^BNkGyt0y4W1v$K948c zYw^?`zqnw#l;q)A6d&#DD~K1)#d7lLsYPEIyUiDIEKRT`K$=E@Bf-=q;7%oY#Q*L< zsHv>cmPxmtY(~uYm&oL#*oOXJ*Qasc!w*w9&i9ElP}{Ud6hewhm+}RpqvF-PRbAu{ zLeTxcS~{NI72}iJeOemxqxP=4HGY|;$`*q|e20jP7Gi0)Ua)qY_+XEEY938U2vt#= zk55m6vMZGnHKPavVNM1^aM6owG1_&iAxh(8+N*O0YH|j$jcSAXg|o`{k!=Q@o%Eiq zOoH!7D(~wU1?rxixIa-@_gY2p5AHSz)H|Jii=J+Kz#osa_o*u$V}%dR&;QMoBrkW} zTvtAV#$;BdkFvT+J9Wf#NUp>Fp6V+R@5Ru7SJ-Gr%12U0R zo~?reI1~9!*20<+rp9VVD=cjwEdf9_w}RAV2kwC{5vsJ_Ou+6GdhpVn9dk3Y8}bJi z7k*qg4L%C&%p#(q{A$Uk>lj~F1rs;@r3yxo;7RnL~y8 zfEaVc1wb^|Jau$PPRp01Qn7sha33I+R#yxHlL74}>^X9ocy2{@#N%MVjA6Oac1yFu zf{>03AAfa|U+`tizgWO#z*ok4CmxBbu$WY~={rVS1;rBClF0Ur0POT&wv0?Pn77-f zuzrarI*}nTurz97`u|#c>!7Ol_gmb9w1PAO0s;b}l!$aFp@M<}g3=w*4U!Vl0@9rl z5}WSs4wdeZ?rylxKIeQs_dCD2fBfdoopH{b*&?v_`xVc#)_T?gaoEA;n8j+jrd%to z$#_aZ*tTAZ|NE+;o{16Ea{cEH+M?GrKNO13KTq}Er{s3}YlGdGZ7>P6paMG!aY4*g8PXa05=c$jDa(ti(>EuiFmCa?*H z9VY(rV6kJc`t07>F8)EPlWmR;=7$zRaP1r89mmObLj;t7_m&$8Xoa} zrB1p|NhV+J=Snx*wdS>~>4ml7ITPNHVST-!>aP{-2}NF=Tvqpo!s3-*Rt+unOa}8C zKjUKE4Lu{NvldQE%<;VU*h!O1p<-maIu>g`JBPE#pm<`#8?D`N?Pv8PL7nceXjkOU zW3TK?m~gcD%}o`W=iTY&{{&dqHSlB|MhN(mhlpOaA0~v!e`pR^XNdhK&pE%G`&kt^Ss4` z#U9tjo|jr}`OXYe=r>i)mA*Kvt|H1c?6w2KEf=fmrmpD>f%ty2DTtV@I)=zHHtzCwZ@kVldLOgxH8j74AC==v}`o zV`f3Q6z&a_Xm=cMC`}fF)nfOz?%?u^x_RgAaEpG9-xR@CD8D7QXp#oRX@OAsrpN6K^o0XZl zyQ4$qZPH1kZ>Pw>+U@fvkACUbK54HwHwI)eNr6T}(E^#G0i=9=2hecHFj~y~4(Lt5 z^`{heDrA+wb#s1kG;MqiMD|Wz85q@p0|rfDoE7H{SzxD=0K^Oo421b9ZMv=pui_kN zt6i^LMy6nEprN9wRNEI=C-ZboSJ~bA2qG`(L?N8XfR_g9U~sOpwz$~3v{z9PE+`-X zGnu8p+wWSr9IVPi)q#vlP`%Vi4)^Z6L@(Tp&iJvgz`pIO&l$FG$(@5$#p86q`-$vF zI9-g1pySreLYwjTz!;}_ht>3(r(1&c{sT&FR9DyIHNs#TUpHjWuF z+I-mQw>PT>goU0c7ngG#G9ZS$9+#;Sf3?oZ6|PfH#ad$%3XpD138^mjMHmJFw7JOF zy~O^W@U_sP)yaC!K$TjHucN^59sU4&c0&CN}nU7h3^-j(7q zA{-B6d91vg=kN#b!-pVbeg%?nhx6kC2p?N%?nipUFh8pA)pv^kK`6-KiVW@*uLJW~ zAgQ1*1SAolY_OHV9~+DV4U%d zxJ`H^zw@=Lqr=zM>ml{3>MJ~Tly%tn{1wvaNX3sFF`aQT_$%W_-n0#mKWu1e`C?Ua zE$A;}2LqMwJG;9u2;$Ku0L(0-f0IP@zN?L*uCLsi&k7}P)QEY2R@GE}CB|hsG1AzW zVy*QDJ@$MwZZ>Szu&1XdI_r&Ii`p4$N4Fa54UEc$L8{8#MSvQvqV&6e_p}E8Q*RngvY?%n80tJMEm{~ zUNbj_;SX?qx97~3No@t^Su0CaGpPnn*j7+aQQVS4p7lip6n#s3;5nKH;WEI!f(mDR zbQJEMAbhf$4Q*}uBl()3)ot(sDZqq*BPgEmtf0OC3?4ZQe{pKVn+6ecU|ni=d42)| zn!z47cdpC4eOqq_0V>Ub0++xb@w~7tl`stuqYA=k>gs*}2~yRYfyMkv$v@Q5fi=t| zuu{|!jBMNAV#7sv6BDzZ%{%^fD4MWuW@aWF1|k-7{!|<~?eJTTJ~GiT0}*jjcJ|uL zO#Nb=@hHc+zz9wSd!#E+xZsf_z!v)%XTGvS+G8|D{Dy%R7xi}C)dfVaBS&~3P7;68 z;+&{p-c$sL!=`tr=UF>PFdVl|OHnWVsE+o#5nMjc9EZW{pOi(()7;6adbtCI@mXAe z1y455oVRUuD>6EePn^M-U&-%~rhwguwevJOqCgN8mt?qct%AJ?w zDECUtOW6O#>-g1}Qa!%Y7)ea!+aK>5=j3)XAQ0K^;)il_btAD|l6(2fv&NN%I#w{N zGPxu?{W4Zuj{5=wvr3uW-o=(Gk!(^b0%CQc$GBTdF*P*>Fd~$Q&Dt_LV4d*sHy$+J zSZ}<=qvQ;#AR7fhJ{lJ|z|3vIf)hHg5ipd`G4kEy{~#s=%}|S%xfM9?YgB1Mu}+A6 zGaCv+G#oJ1Y^jyG==cRAuK-MgY={c78;z`g{1Cav$S7Kf)XhXkYvS|S0JsjP0#u`) z$utD{ng6=SRI8W+S^@(QWZh51Y@l?gJ!BT>p`UOAIp`JW2VNDxky`Bj=(VGpCnPD z)J=iPWCo+!en(5@@AkrH1@7-gF=!LW_*;CWKq0yPmOOULuAm!|B^Mj)1MF|e@U@RtL*01g3*k$2aWt%aO-xzMOeWAr+@ zsBY$jRPSe(bK36gP8yiVpKMAQ(g7Jd-2FZYoMhxx*W}Na+S1deO0Ll2OzasI9_GX` zXWVT=!VmCg+859>(T@$O@}LD99R-iwSSG%Q5B;6ZLn9(uo5+n+Y365!CnhILN=l$B z4vC8T!1o5Ej)x{M;Y!uHf#ts>1%w?O-Qcu*m!JiCD06Za$NieFapVRgRZ2=qNJ{rQ zzBC3B-dSmQV4%4yV96P?Ei>~zkDS3@_wq|iTl=n+QfdnD&(n~*TLM6gSAI-(zSk!V z+-vh96jN)^#F2~|gSJ(sm%H3*NgB!3Ujrw+KSAi%xTu7A&kvIr@O;%pcn4X9U30YB zr2p*lI_%%)awBccBYFgS7h}nFw6I6~J|+MWK(_~1LxT@a7BZCY4o16Cxzge1a}KX$ zRAEOA5%$ijA!TAmp&`BF*uoSypiHi+i`Mmx!;5>`P zrIGYwV043U{?*-&RO(6dkF9pi1bt1`-i9(V{p`)Uko_2J$M_i0v#_!B@rxzMqK1Mqw4ew7%# z=OVb}n;3T$Oj#>u-2|})5cmdu1HKF}c!cGopqQpjtimFCejnr!t%0iipLTVey71O8 z=l!+S_w?O5q@<-0GO6gKSb2WaFz-rk{a4t-NRUo_Gfq0Uzy)~(D3#hFFD@6tDB#M4 zGyZL2dt%#s0oKgJ&W_~s^9pMA$T#3m-sFYzDnrLLWrUIyy-pNVNzaW{R8_lNvyUU) ztXZBp(ZEgHM8?I;oC9pH%J+wdnc{y< zG(H6}hf^tvZaBSCV&Uq^yqlPpirxzqEw`%XA7rF7>4vmyE!AvgS3hDxjGYV_D0;it z0$z0(f5;#&v(;lG73cjZfrZtz8p9zQa)NdhlG-<&R@1jQ%t4@%Ai7!Cvp`CP^U3R0 z)nV&=l$Qd!ZuodnbXtkTjzPzo`!z>_>ulz zSlm;0iZ4Z|U%q@vQ5F1ED5a zbpocq?kV(JeRC3`Mv!Px1`4sW=ZoZBiDDxab5LvsY?IybI)ZBGEn&)7q^P8%pW_#9 zsBNuLq7=BEfr15;=ZaravNG8z!1wGgZokw(yqC(0{`MdZ0wLDsR81FdZ2$@89Y65U za<+7d&+6?XyQz7)y1(c_Sn;Nd#@9KW(Tpc5I=1bch%fNfm+a-|GzvSOCxwg05GO^zq}z zU9LwH_4S|EL@;}lT(oe@1x!~TM1aP3wjettjZpX+kQNdmQJ`7^$TApz%y#*ut*piI zTL{=ig{<9cY+&^<26`5#-V4;G+S-;tqfB4;rNQ$h@z;hoC``cDcCmVSdwYNR0t!r* zLIrz~7YXgu(j;o-)+lmva)%hUfTCEc)MaEa+G5nA2v>t*5waZozH)PMK|#Ycfkrpb zz@BStXK7I%G&(j$zUz55{PdbX4@ZA_H(T2qiYkRSuPjH!DAf0`a#F~+ z$R9SVX=7};N5oBTZOWvc7r`ltr{(c@81$OZrm)bU^osHDqNAe5@!R#bw;Mov3l9Zq zYHiPqVKB;oPlojoMP7Qk*FJO>tsn81m_cF}S1lR#Wsj)}OWFrHR#D&C>4%@-Bdi#~ zbI|+%Jl|}cl#6oMlC^ z=~c!CguIZ7s4%s$WFfUiRwU;=8ogGoNZ}>ugmI#*z~IOxB*w756jYOJtfOK`Lh}B? zN={zpFzC{Bf=EZb$m8F=`^?7!vW-JSe*<3+B4XdRY|zF5Gn5p!4{?8xG4A~GCFTG{ z!T}hFw%qsBq#lLr02FGBd8Dog>F%(&s8DP@*TxR{sscdXR?w?70AL zLzCGwLB_7}6a+5*l4O-otvqEbHX6q5u(q-B?|f?yKjLV6`>Aj6 zbr5Ak7S*D{Gs+|s0OKGLhw!G?FQGhy|v89+;vn~xLM9j>&BD>{oHgB{t|z4x^1%yyztp7DZ>i-Z=ShX;%4?>m z-5{5L9k3s5hGTh2HA*1w1C3|@*dFJXj+67-`SJw3RN9EkJ;v1US7LB&rJ!1Wg#QxI z_WodEV9I#)#npwvUk=yW%dzX2b_URZ3R9=xcI3Nq zNYJG>;EOGvig`I@X+P|zHMT-a8=z3WztUsb3)z9ZBi#Xna zVzZWd?i_u_F!4Kk-Bf@I&)|?O>Fx2v-leopnzO$KTS)a(PONQ;Csgkk4Y6xI=si%z zH`AW0=68x5-9}7e->N%eXSt}U%<_|Ya?y(D-L+g$=pln~USmTmM(8P_Vy+ijo z%j?-af37|`bzbqWiG2a;F-rHtXk`T$81t4zKJ-$j%HtyXbKWaE{7gSGn?n_xK)l#p z%8@cNW?MVTSe%e~aFn={k^6vZ{DYDt?W##bi&4e=*?mXuNOkt->=(V8E#&4UDK^1# z5;}UMCc+WC1$nz}3o)e;zq-n5-bfP$MB`mX)tS07h;0OZAwRUyS|uCSv5f zSRXFZJ!%MFD_vZ2b-H!`5!0ug&I9>Plw$CjfI=3e>Ci%0YO|3L6GIBx4=B%|B?jDL z{iS+<`SWSx zojHq#Ve_E2hdUyh@C|^11=nFHn5LhxApd1;oL(@KkiEgtRn8QJ;cX*@S)`3Wx5p0$`mD07}34pzJ6A}K6O$7CmE;Q zuM*5r+>$MW3SJv&$|U7!D}!pufze@pA!5Tr*dLtEWrLe4g6}j3Z2s`m1lVu-U$MTU)n5T3#Fm^(R#B*oRben`x`neI3m=xkb_UrODJQk;h7N z4{?2o6;1Qe@mQ|>S{Y)x5@Sb&!8bzhe09OvSmhAdr|}vK=&BV}NUK z?SloP4_s>}zJ!cGzfw1YHFLh)fmR*>|MBth&I_HynF#0xVFbeqzjwUJ^lX1c&WRFa z-%Vq`bf0xqR#u7}`9BA@ROrEa7y3qHzkPGFgb4-7{b;Z^9}A`ty*!=|g2ql?e+hV1 z*P$^&)ED4Lv{MD6w}tun^+9`}H|p%%pCaB#Oa~zx5VEAO(Dr`cYwEH?>%m|wOgy9` zBt5PzD+^KNOSV6ZZO=GY8cZu5@XyZ3qsKDq@_i5XrceFamJK9p{Yi@{>YQTD=s2`* zQ@9);>>pk?ahuX@P6|}CVCZbzUm&W`eI9Ao$uLd{|DAqbibJQU7_+c$8Y|5)u) z@KMcwt3Qx^e9RhB&5>smLO=i#53s&2mzNu6>`SE*`ZQE!)HW?J?m1OXNk|cd+LxlH zq^$UwO7Me}{6eo_!|$1vY|ZC```-H-LrH3rpSw^5PydYi7w_LR9w{mU7zp8cAt}Med{VK^zLzf$z|XfcQd> zTcy-kaYa#ANJ2!GgO!67x3p}_C5}^ol}1K6+rBhq9RKJiSB2A8HYIE`FVZ)(t``c; z38HQNw<}uh+SF_LMG(_^^Jse>-YV*4x<{P{%0UU(5R0Yr0QVh3U_BHi4|R-BoP?|y zsakeSq@y`nAajv`WCx-lAM15zs@DnCh6!Jt6Y^0BJ$&@206H4is|)UZ1$bL9LWxg8 z(u#@5h-P0jUxO;@SZ}=eqlc(!C9~5RKvkduVUzjG$qpA6ci|le1ba;n!+_h)fp07L zqUl0|dyJmECG+W}j)VhuXeK5gjAC?RN=jo8oMfS=4R<2j&TrP+{drvsS%uU`=p2&R z1lo>Fvussdyt&&A{!YD1bA+)UqQXuKp2#YSRX=E#_^wZ)w?MSBcSW3+b#J8V&;DF) zdAG2CTsNbvo(^%!T~isUF9=W$5z*0gL}hW543g2&yKROc_%blwK}-LR;2l-f+b@P{ zG3#-0N%^t%IUG3(iw0u$ub*)Ci_ZKECABdehReDC=dU<+t)$unT-xlFwLt_p{<4S_ z_N7c#k8@iWizazllrR>!01@Ngn4;r&+kyAj_aq$Q;nmUeoijP9ZvMs2vsEA&pNAzNQ90#Z^89ByzI z0AjqMPvi<%mAh(^lB>`Q24|F+-5B@-GaO)oik|>zBH)O(lXaTaLE#-W4bvK+38LmB z&Ym$GwHpW7)-C$?E-N7CLTbFtnX(z+QUl#ciNF7i-Ye*?;$cLC;{~kON%!>q-CeD` z8z2-qH&$dWu)rEqA}{5#AqbV7!iv3zCf>%lYG_1bzSS`Q>RIxTjbRY^KwHNY*Np7j zeG0d5cr(w)pU5vfbFSna8>}L5Vqtv0jXgh0s80|Y!vCpwbF$@zl&^uhPA%r0R^QP{o2{ChJd!--d@mGLY=OChDHbIv^kZR#jH3kW|(wT_x#H{xy$)TyoCkt-32*Ftd4|M@7dY)AcNt!+mE6 z8^+U|)<+7+pBQQsK&J(Ti|7o%C~w_B3e-S`l>M_;03!SWk`LwZySuw*zI5eb-RREA z%iDs(ZImkhK4vQyXr~cF@;*E*SbV<>4cj|9hkls2%=fD1m9pGUM%WnNy?>wmPi0Y! z$wg%Z=5V(1+3ChMC@p?oBTI}jmMi1B$2Mma9j#JH9@E$7icd&Qk;r4I!AA9F``yB- zvFl8`#B+gsBbXin!to=&>!s66L(}JukD_7r3P8uZ^3;M3p5itKLBAE6{2D#{8N4XI z{6$JBLGprFy|}vi9PpeS9FFNkn3>Vg~Kq%Jw#x(<(?MQ>I96uQ(Is;Rl_V+PW_du1}a#!Ei!}J3kg7!)tlPYqWm%nd=zAeyVSk=u zp8v^o$KHim^_KbMHbw@E6os($xQY3U-lLVp+_WDF-@ct3Evgzb>q^F9i!jfg4}GksGTV{ z!Up!?_#@F{P|;FB-SgZFqQ6J~#L~3>Im3Sh!0296_2TBB|5b6=c~Q5Zca89i$z`(; zhgOrVrk9)U0$Z%8uZ4zq8`<{J5%nXj=G}#^jg5_pm-m%0K{@&v1{gIgAY%-K6rii1 zYXoou7>s}spCXzpZ|6IF)|pjR{3JkqW#r`rHN(lKhuj8pR`0M?Z&b&2CEn~-EZw*` z6z1$VAFs(3d1|n^yRqe1_MZ7ZGv6orCF7U9r_rmYWA0t-h?em{q!9++X!|Blgs=W? z1S^Uvf4{QD>1y$Xe&KjkhiZ95)dF=xxAtOd;>ZhaXSb#rbC$MVNw4^c^`d&r#9LjH zc1ppYmM5#%j$RHU*;v_uck&$O;qARL!IAzB2kF)*H}+y0G`Tm{l$REEj!xp2|Lpkc zXA~D(Q@xRu6UCVYjck98{eGp(8EZl|1-GTU#^A4aq2IoFRn`zV;q<a~4x!ewLRAJG!AE3g{=L*jrR|7aBB=dKk4 zd@#-WfO!B9Gg1A?3MSA&iUpiPh5Y&roNkPZHbr66JF;e%; zcTW$T0q^h7#Zj&q>A86$Y^?CDds~RV$JDYSwEnlI7cEj;>T8gyoSf`$b4AbAmIa9` z(RnQur<4eGoN5!o_l%?%{ONPnc(ml#HT@;(O2B14V%PEi)d4Cj*3t?e{N!hxWw!qUXT@0Rcor zei&jRJq7K!UtS~kcw$=NveE>u)MlQ5p3G|CyyEp5;xJ zL2G;VYW_DmlMeOJip$55R}O@(tRy(bhx{pSsI!KkVI- z*HWeHLOyK+N_q_Rt)XadGoe#*H5-eL4>bZE3!nv2w?xk@z^G(p)xd15f?97VUE1Wf ze4TcN;CKm-EAPnG@k&6zYk}D^!&R@ksSV|L9;?5C8qUwp(-FP&yF13?bB4=3sh3N~ zjkT{bKTL1NOWriN#x%3IZoWM7QOf4Ys~e9$=m{XS**g3FJ{m&7%>W5?Wd-6Fx28Qy zh>%Xr&i1bZM~Pg;A_f$&5HuDb0b&YZJP7k6o2`~_cMJ8HyLN>A3Q%e_3&WI*42%+Q zd+A}Y#c2l~zL`^DA^2N#cxY_)k!HlJVyTq0{Mr&?gi$w!AP#pAt|=ZxkDKjE%E`3|ZBZU=VgdpEK~WJ6 z17jG$VsI7!0%boxODikUV=&Tyh75Vf$!C*9b^wDJ97Q?ij=zr^p_k_LgywY%zLn_h z6ZmZ*H~z*ftPv=d>PI+WaiG$m3%?j4wQ1Z=PCWf4X6=w*U1p=wsy}je(RdF!}Mnr_-Fr5)+a2J zR}=KbbcUJP;zCX-X(u~74``TtDVv9yN46EjbUYkvG%e|9sZ}eg#osi?7$)1EW7niK(*CoukX#pMwV+cpU=Q z{jcp^knxz$nAKgNe>5^PyE@ydn{T6A>~BIoahY)azpe@d{5q+Hgl!fO0a4A3UEG#O z31B!;pDpth+0i1u?Abd*K%62H5^(1~YH2|&5eaj*F#P@zoDS$i8kWH+DL)}B-Zfyu z>l2WkWMpI?gq4+*L093}j;W6DzLNts`w4=Ml7E2pWuQUzG9Ad20nSFpn~x=f0kCfl zNIvg&205TR+70-&5T9b^?0f+bD-cz!x=*E_b~qeXR=?KrA5tu@72?FXk9G(dfAI(oi_6MpSuWKwGm`7-))`l;8>A?$ zu_vCa%07zhvG=9JqE@AOeh!-Coi5jrJ*f_Qx8bBzsM~6meCyuFv&KXM9#ZO7xN?%Vs<1l1a_gN&FA> z*omXgt9LZZ+;7Q}%-mpu+;6y5#aX{;vo&=Qx+f1mB<%C15>|>NQjG+2`27Zqe2?@_ z-U*J6RHO+Ab@wIN&?!3otpJCAeAk87>n2%9LP9Ob3Ew2Ik-E z1G!4N3w66fLPLQZ2EZpbHMI#x{ng*AXNNA??gR_DSCM~i+t?g@{(KFI`a)5XAyQ-X z-@p3j3m%|>*yTT8{hybnb=f^Lhadet{_^)X{bymy;Me*ikg7S%xie9m>;L^-;D4I) zP;tDT{*SLkE_bH8AiDaWU-kd{rDImPulUVu*Lt*{_nRegJe@{Cem|5-PGn`9EJp}Z z2RzWr?|i&zU2=O)xVx%c>=ftRdRZCyJ|&++|5ROZn&rDE}{ixBu%m z^?&$>&;!71ODWuVpmZmoH83!Mn}>mo?G_doGJsA4iX+e_{&#u&^L%{N;}g@3K&({< z?Gq^Kezt>)46?m|V*+^?IDwiSkfggNp&=nre!pQ@dt?gR1R@5pjP4K-y-UsoP?_=J zLuFb^03Qi-`!n89FIMezbpC%H)yc`n%0tK!Ja$~@45!7144u{CJZb`hUr@T0k3H7! z{qW&~fWv+!z|%mHzYb4%;`tP5IsR5LuKnbX%41@;*?0MPV17<~^Yl z5QsAC0gYU>fS^TA+#Sjx#6_$>NI3K2O`KVzaO}8;0q@`tj!0DIL++Aul?N^Fw57fP z|B3Szm@P$RWznCFBM{ZtI09LYOYqsl@Gt~bY1N{EYzVYe1_PPjzyT1PrGPaM8wT_r zSg%27dx)&fo!=W7C+_&5lqwMOP-~c1Ty8Da?W?+{5mH~SOyQT;> zb?8oTKYjfL`bn8gaN#U59MtPe=wVO>v;~3K1RNKb+;6@$HOOeJ=4q)r5}r`Y($di2 zQ&Fi&I|CU69$N-5agRVufeID4$H)KfUzrLlT&$js9>>%56F*{CA^YPbw|EoZXCsoq zU?D_JJzYPQaDsh~dor7T8k+q);LfK_mCwr=av9T6*uTK-K>(k9It(0nfbksb7-bTe z+YI|5M|!@~HpHTgM@>S)W%$RZVsBB<6@OuNWo2Py2aSz?P6iRQ!jL-Uh&OYQo($djca00ODX6E+q2Jw*$f_?8e z-+FnOv43#joGztH2jH&5;j-q3p8AxC6M)<-!GjdMP>G21vkIyx_-{8Rx*`llQz`;W z6})jbDiHC9IP11f_N?WuSG93DuYq@cKNL4w1iGGlt(GgpcigP1p@6+4F{Ds~L7KpN z=8r6R$No|tg}~l>JryNg0(F7Z~f9tGsr-cMwT% z-*Os_p}I*=O~Lq{me30=7x62dYu9cVN{BssrzJb>a*_Tf(M@!J+$_F^&$ilDwVz&h zZHQ&E($1R+L`@eLM@(?!dE-*)Jn;Gc{ZHk=S|qcgij4M|lq4fOX`ifDY5gVZK8Tb@ zIR&|3zyz}moV1C3FHm46A6hbzNe=ZMIGmE1LC-M>LHDo(!50ZmC37R?62lVf6w7)fLmHpP=K6tuq^_&d;rG*%Oo7z z8!hSR=l~TgAh4?=1#~g}p9H4hXbvV=e5b4&Tb0-pzW^nn(O?!tGX>rR!>wBpmA*`_ z+$}$Dt+NZ50Z7yzg7l`y)VY5B`aicXEMH7$YqeVgL6vo{Y9!Z)REni%Cb&Po%2v4C z)fG}?VQil)+THFLfvPrHX>xY*`I-P4^VPJU+*rX_3cS6FZ0b{c;0&l}A?-_SVy62{ zH$S)D*uu}l_k1cy=RsiP`!+$xBZYwxm+W820wTq4_qR36rr+(^szY6RjThqi#l@Zl zlpH!fQ0W^p(cQuLd}26N>&y?+TUJ(9?QbXQK}b90yoKtq9vmGVcc z{mIuUf^vfcLNkbI;jG6c;?4JG|8AbQo`ia>ikXeA&nsDrMyCR2)_nAlt0Fifj(!GD zFJIpdP_9J#t*7%GxK*fCST1DBq@G_~Jm%nlA@Km{Apfm%GWnvSqth}n>cDOUNCIdt z&Ze&v-hpPaqvPXZ&ggiV*~4!mJ(H7H-(BHg0b>*A^fzsk2ce8XpaWP9W1??G=w>WL zEzSclQUSY4uQ#ezW0qD*N{Y+*g_#*l&kNuoxg4l!-yXZi-|y{ZeVLS-J6WP!*6iu| zFp`aK7d9Ex!R*zTN6^YRpW(h1A1N^+O{i`Sz^^vAO+k^JmEM{A>+P^lkUuG7C|vXn z-F_~clQkfUM>P8RHjze3Bk$}wbYZDsE~BBFt{~-tfW|IKkF#60FNff25S1H( z1`Slt>Q@{>N*NYyc%-Cd&^k{rCbN*c%X0oTkZ%wr9|ulzCnqOx2@z0_z|jTWOcZuV zY^;9@fU{i-+B!O(_N)(k2MeFJM1+SM2!h2d=sN!Spmz=qRErH{%+1*ao|sb4n*8@O zmYt!Zay|L<2?jEor3yjKwf0)M#MtfZPo#`Yif{4@a3M6(Hu;MB+{?W{%gSmmDlc_^ zq-0%C_`%`PSP7)qWa?`EgwBMu=En~vir|otUohCm!TL?}Nz>djW2k#;YHE%)roF+* z#|29LfuBD$A7CaB0hNxeTdlt(RQeu=3R`lY3G%M+7_&iz{_7h7fqO>pzO_YL;>FzG zYj$qAq405^)H~ZLpompGX;gg`bh16E?N5eT;_d)C!$Rh+-7rAmp$Vls;mI0 zR&0k&GXjs|nwpmfNlxH!maxgV&d7cIIVxX!*u|3g9y~is@Cx4jqh{A6_vVDmPsj_z zF=gNZnf?CCrgPeLCaK{yT0lcdPat*0@um4%}OXK``+D| zIN3RIVoiju7pyX!8aVS{g53D-V2AZ$TQ z3{~{sl2smcqKQoY8J%+#k0D%tcHKgc-cN6-KmdhtH1Z z5~6YH9u7_(bOAeg`-#IqvZ%|-$Bz_4c}sKf>^jjs%^F)GHZ5uVVymjW(iamZ!JV=R zb{EuyGeN?eFP@`&dzvFiM#lL)y}Zo*8=f^lP}%Dix9p9)$tr^(66qTeDZCPum?p3|CNw?3JMiWMa2 z6h~^1_abr(JUeK{z@L-Q?sqGu8XaFXj5EK}fE@%y%EnMG1>K#RhTp&8@=AbV`5CiuW%xc0JB?fUiSF(qDdxt-V-XQF zH12AYFzjzna$hwrqLgI7(9*JyM=rD=2?a-0C5F?aa&fB!-a8CJ5mUHAGMbOHfOU5a zFJalfDXpAQ*mJOv;NC`3+Q0n@3ppq%%%+80uR;?asNe^qI*$w>=FM8H?Y4zzaUWuSN% zhteCAu>;^D0GH7!o)9+!LptyoP{$JqUx9>@>w+6TVevK2^*``2!;;?G+CrLJ0$r7A zz)V6!r19{6FO*5ED=Xl~Y}XkEb|?qhR{WNKFem7>m|0lf#PI+^;Rj92W8w^%)aM4p zK>-29g@sV3g@I$H>5CEklI9oe+Ur^Jnb&b;G&E-1u472v%y`>tsv zG+dr~VndT#(|$)4Y=3CWU^>SdW<~#7UcOHCVzn&f7*mRwqU4`LTsBL%LeXG5=;q7b7e=Z%w zY62V73F({{l|ABc{!cK&wt6{dIhWx`#+zx)CU5_`4tU;B^g?)bODNMMR{ zl*)hbKs?koSXa;;E5s=n(H6XFl_pp(@HUgapqCZrr#*C?_kacH_of z!5cSj*W9}W{D;O1|JRKhk8a3GzSrbHQ%=t0&9J$-x#q@G zpE)Fb(5ckdS&3CW$Cc&NRkfY6J97cXQaCGjXu&T)0FgXhZN4aGX)<3nnM zY+5fc#J{h1x+|Q2zrJxJ>*k}0Kga*;vcA&}|NHfg8_#b#v;On$lk_`-2midwdi?+T zwneVIcW=m~g7D>Xy`u&+gQf)^{xkZGCSsXa0~Yei9$J<@F0;J_e0Vw5L?MrDbmL35 zOsp-Tby_)w!`H%2O6EpBLbd;iRKU+3vYxAduJ_Bb%3fU)Py7xNAj!+hzCR`7Kt20UNo3 zK(~Of!?vxa9rxm)*MCj2@I1GUSCIB{pySH@^(Kc41sH2`RiE9`c)?T z$8w|dFbvNF?*?f6{l?E}ZOxQvBU$cZ7cNhq{XLgYrn2(g7nqjcjnSOe4Mv24&bN2_ z6|0|pDj(=-hr84Z^U!l_9z%gXv`0Yc?o;;;>Ey*9kR?Y zvTbQ~eI1)7vTy$S?a=tLb5TI-_vF-HlXXZtTYKA|Yc3T34C$HLywf3-Ns6?80E(T8 zP5;+ml6lD#6d=b8GMRZKGUtOScVpj(R0dC2yWZoKvKX&ZWm zcmx=dDD(WIOZ}K6h=tKGAt^2{uD7aK<^9A^``DPy&b(AZ;_T>22m9;Y;=hne@`!^eP4GR#S*%tnlmK(xL@nX zgh%y+<3isoEQk7b=G+nMoWYAMP)RD*)Zg_nJHIKF!oHCJoY`Ltm}e5JFen`DG6a`^*Pq`1Z5IGADIP;Z%cH*((N zZLq4ASQ78Fsxip<0vquLwM@u9HGL0?ogzY+w8b&VDe5dQ4=*o<1hGBUDzmy?Y4PiI zdH7E5EVrRTJRqT_j7TXr-*VO`E+a{sUf(h=1Nr1OT{w4)iCe;GN9z6i_rpA6$`Bbf zDy@D-x3QRlz)G=rmd25tX&yUC+Q-NDYaHg}ePd-`Ik7+I^ioM=OHUr8=irF(aXCA9 znU97UHOsrxqq=7Msx89TFHU#O5IUU6_A9}JR6-sfojoew^4SeHO`RQz-MM?0gZ}5j zLT1@WBqd+c;K2Mq0ugwBzWLT}S2PXuw8mlPZQcs@WV_nckZO0P)`=@qfx>9RR1J48 zCzD`}%J+2haJ8Exe|3m)W>&y8>3i1sM63Zn#DDSAHL^q#3d+WwY!Oj$Ch5&LB1a2A zs4+i3zkeCuC(mbGbf5ZdXS|XJQrF$Q(uJ;uB)2>B$Lfw{cP5hq6qywO!*tcOt{sj> zg)msxoGB=@uQzjS*}Tb~V!g--uc|huFIcb8-95`btzs0a&}HQqS{Z)BGlK3E8Lob= zZp#UBip?#HJUMUBFPVkCY+?od zGT$JO_U1q)@e4w=sDCl(=RVq?ypJ^is<76mSAuUWK8vqE!Mb2kPvaaWkn@g-W0 z)74XLZGi#AZfCzAix_s$e3F!uHfq>ZI&>2kza$omz-6W1xg)$gS5lkVBBq|dK8On! zFEeWPQA#~+IeOX?g19$VY2kX|v73Q^hv3dFLey#(2RFCy4+vzg!5v9SOeI`cUOpI? zBK3egKQDhz>|>UE{Oi7unIHbm```r#&JgonUsp%xQq(RXFz`0?rv}Y?m-@@lh1gg| zkPnZe+x2J9W}lO1gwXSe+x_He(g=^Kk>K#!IcO=Xt+x+Pv&vlC7+UqBk-S~g3T-B2(-RnqPK zq#i2*4>QuEHIiN%T0w%{HCUCfXTefoVZbg?3C6yQriMpi-Ku?jnR(`YzWMJvV=Erq zZ}XYr%==?yY<<;TZ1_v}j|IX;kcx3Tmu;>gEarX4lFeQ1T*u7RYFh%j_^n#Xo*RBC z-$U&}6B4p)`x%PlDju_6_LuI!-5>Ikj;)(B&`Y8=pKF!RsD)>B?e-TSt=6Bwz8Em> zidZ3mO%px_(=In&5Jeymq-%DvjAF{EybeS!CUG0akVCI?V=+rhOKLIy*(z1K3Z1^V zsJgnz&d6p#kDYeExVyw+>!0=Y^aj$-A3&$Z#6G9++VOr|%mR!CXV{o;)XW+YJbbxb zk88c&LY8C-K?2&Aez4xYOX%WR?tg{l`3q|t4Bs*~cM{8e_FKTJIM#PfJh*yoXX`cieL@aEb3+x z>P4Ex-&h7)(3OoPQ#H7F`$sG@-uI-TIMyobU)ap!Utv58@D$a-(CIy+iqYv;PS;9} zmg)$1@AWD#>L<(VT0A=zb#OS(F-0Ubj~d7rGF7?Opi6 zeB*IjNKjC4<*rM;U;h@;D3Ve)DV4`=dNq2gDo>5M@oVo|XJ=;=1=n;%ngksvS|Ws~ z_;hgNklnap3}&azq7csOpeN>c)_~|njTWSM@$m9-!PN3No7-1bRy4yC*bGN1%vPmjDk=?k` z{bglkP{-};dGM?Nh8q(-*4@50}5g5Kj65NiA*|~hXvc9$P(>x(>Tbq z;)XJ#PKjlt^GfGPkcDXY=4Rn7Z!lnp87=qnN>6u{)n)~J&`jDB@@^hz)5&JvT3Z%9 zNp?!B0s^%8)j=C(3slncD+n@L^7ZqF^(yO;TxR!`X=F)p0tutCj-IZj2dvcAd*b-% zvuE$Dl**UN3>)|-XNK+Kjn2_VSyE#VyT%Bkh3qUVyufU!FrW z%e5kncAI@qe9*G0`OOj`r_}@Ftoqijwz>#Eie_q!Z5e54HKAs(wa@0apKfqezrtY0 z;Y!yS&I@w(BfHvqH-!f+o>QW9q0xN7l$&wgf*WRVo2_?UA5w^_2@4N5>-iiS8X8i- z*zBC-X{?r##fJ#58tqTzL(%-m%m-N|BETpey<4meKCJrOwY61wiHD(bq`nvJpm$N%QGsTs9w2$uHx}8~s;C{Uvha6@}GfGBdOZDJA z)ie+daLrvj5lUXSd(G+TujBR?%4xzF|MX~nbVQk&m(&yW@!r|GtR+#6CKv0L+|H|h z!s@nlvzNGW*joOxrPPE&X^PH>Hyx0=@lxAAViVSAI3U#7kHg+KB3US#?C@&k!x*FtsQcNEh=7`t+$_o}BG1jcFV9q`scUuYfI5?UyraZ?-rxqB?ghS4XI;N7yKo zaFNwnDV3)R4ksi~^CKt4E_eLMmSBaw(JnO*@SM-&sHgzkxViR)=kByrIGI1L?d(&l zm04%hOtTfH(&C(sBS`#Zo+_~Ma|m!qqIRq*ov~H<&48O#mRIvtRv?0)wzjql%zl@& zVIrH+&J;-I4M6 z26qJy<a2t{Ve(+v@#Y8d1m#$peK9^CaiSs*UJe>p z+fRjkFFoEEs9+i8a>491FF-O+2A4ZtzI-{?=x&ke{M5(aYA^*3?urt0-+G%D{r!y( zxW;b6e;?6Y+!=V6$ZdOCiNRN7;L30?k<2)p+N$r&`|Rry==Lq(Ov*f7DpF?*=cjGH zu_=x$)pfl*yU#tG^*+#ZH|>pXr5EZueOoZ`Otp7aeUNu!jl-t#XY~SQKF3+F$%Cb8 z?_sl7%&Ab%pVzl95?S@vmzH$1C`HkT2KVFN!)EA+ArKSzR)2kt(p2(h0p}~FaeMcU!%k06!C17VSW(z9Vzh5tF4Mo(aW3awf~YDN zCjk*X6JS=VqRP0Z%cvGFFPUR#fd_^ltX*gtI28_A;lt^2e6Qpk%50B2&57OLEvwL=uq4q&_r+jX+ z;2qR?!RGUkU`FouzqtU%FIMaa7JIXk3VhOW+5#zwx{p(t#Sl~O=Fp_OJHrUgX@JLuJ#iYgVE z7sZj--2d`|Ub?Eju1-b#J;~Y&s&d1Yy`7z$ygaW=%ID9~oAV;{^d0T(?Ohwv{V8xP zW*@YB8~@>f_2gSFmhibW|9}GXTp*Nl8~*GL{S_WUOkHg=lVC|lN6Tgm_=7wqn5l`) zaI=2x_C&d_w>RJ(Yb{E&)bkbdP8-~}2h#a!AuaxK&xcB?%(|jT!!*j$j1OaJTON=P z;10Lu-^YQ9I+L9yf6Vvw+0SP})SOazoJ742zSZtCop|5D69Eun8yq;-SG#;QK}S8^ zu?#{9?4VIMX5|ci=e^l_Etr0l0wpgxN!Yt*=Az#HI6os}K3Yr}S{hOr|D4ATdw$N5 z+3`yX_v|@^!)#r^vaC-70DpM>f88MG(14ahQ8{*KE2on@`afnCKB7c z4%8w(Zbz%3EZXI&(sJQxX=%*2v>>-f>2s`Yu0P}L&Uk(hg;I<7DrayzcZ9{G)v_m! zler2Y*z*k$+rZD^{)oa_0Q(k%0w}pZooi!YSBOSqZP8Gu05tftH&Gq5Nnu4gtl!ud z5%If_$)n%Y=X7T(xoTsR*({Fc>sI*pCnTsDff}Q(Pd9Hf*F$TIqoM{7&AuqfNz4&@ z%cal0<5ZK~CS8V+ED)^8LM0`Fn_7xhZEd%{+$WjTRvu0q=X*}b3KOP?eeMGvA{q`_W&xXxsPr!`NCp7e?~8o^ zyk{H(Ik;y_D4W00=VS}gp9#Wg3{zWPAN67uA}_o<9};-b(b367Qn&eAy-Tcyv|M|8 zdo!ip24dC$(zhtW&M@6Q+$a(j&}!M3XZ}m&E_I?S#@WZVA@?g%F|vAV;_WlO-x*JTc?8pS6-R0ZzCGeRP) zk+k7qYy&@kzJJQH-nGoZ!LiaAl~-7-mM6bZ@-*+^JumD8aHP<=B_%R1*`>(P7sFFr zR{mI20RY)(ME%Z&p&nUs}=g zn5w-6NFuATbW4B-3hU#h=X_dT?0zs)-ojAuijv~F2pG%F&F$7V$+6SQk0c-;$TY5Z zS!?$7OixeOueO$JN$RQJ8x0#hGx?qUR)Qn> zoUj_DI?lh^<-ixGc?*@1kq>Rau3V#Qz1l;f6J@#*0U$3gFJ!SMD{-$R3=}FR3BPEbhZvv~4FvO@ti*B#3rdcu@ErkRbYqN3Gb3HREQLwSB_YxjFVKW{(m!PX( zWHM_#@l$+rGn?urUdm1xsK@squrs2z8SM9>M8fL{!tp%|1b< z==}bar&cpQCr8G5QpSQOGmR9K6pZw1kQe6{7m?36W{bqV1qH$F96hGD6e|`ypL>a* zc6q^AP;{oS0OV&Q?$b@Q@k6LgWHr2k=;6Z;+FldPB~Tm!HCYt9)uOyPi?S8=M}NJB zc6H<}PjZ-DU%Ji%RERkzg&~uKgv7rnB7}!{0PU+7MES29+UE=3(ncO?^eI;Rr|K+C zc0Mnj@gDxNC4+P^54`9*e5x1;Px{W=6b(y9QXZBBM)LBIS)sHgE_XylY^OBeTr>Fj zcJ$N-cqW5tz!x<@cu@Z_l&>`7pkG@w4M`K^VPw3>*uO&Bjh9_`!ivEo?V<6n>*pZ{ z-<}K_HeN&B;#IG=NU5(md00<2E6ip*cXBsfNAn{uh+ousZ=Wu;g=j!<#o{g3_Hzw+ zxKGz^Lp!B!?HA`@lV^6ZV{#y z^8c*%p1>TibE6Nl&-&HqSaY66y%6d2OL=nU_Bhmqi>s1TE!Nyy*CiRf`*gF`$HquY zT3%e<#a3CF`MRQ2<{pH?(XQm|oi32c0a?HcPV>V3tGl$$djPSax&4raWBFi-PC$Ux zXRlW%VSB8|OkO_Bwn&A^oRPqf&IJ8>?t>A1J(^0~k|B?Pf)rXvrYb5P4bX2bBk7#p zK*}hyF=+hg`RRA8%A%H-w6t_FYAlXaLL%_i1ul(URUJZPsx+k z%f+f+fDVhC9XzBx%q7+0dw8VL$JI!1QMuGlha*ZB^ZaMF;cxKR@iB#(!+A%?-!{=> zYE2ePcMlH_?-TfpSKDxX1_|s;Dg@u`YpqT)pTtX~(jKLIWZ#cDFDevDrB@USqVty(EM7;!7ed@;)?u(1> z)zxFKudoOa1iXEik&3=*i&dC9dcF-^gpu9d`}oH7!SSs%c6Bv%dwWvnme3-(Yz&#% zFyl0^SmbY#AZte!>s8xx1%m)+$qe~ofIi)uE2zchfV>f7YhMY@Wh%a=r!uwVoefRE zWYKas^z&!WhFbV2lFJwPR6!so0LsRZ zkM;`D3LAh?GA;W(2R4E=nRn=BEEAiVWn)bM6A5J(FGe4(SO_k&M?Jp4GkR?Vg78rv?pDC! z?!tAA)69IWlh|o={oRKzyq4QTCD+(}0E}21$k~%ER*WK^Zi$bF+v@2T!u+Ej=|O<( zL-`p_0{GophdJz@<$$*yr{|iE0xt&6k2fg!j<~sptemvj23YyUx!=60c3GRi=y|%k z=Ox^_I9G9Etf9|9a%Mi8aN&>0;BQW=uP|U6MGo%`Oot=?E)I0=x=zgx-ouV?r%fhm~k(n>V&+oQdTxgk;kRh!aWXs&lp)uO% zv1=M)1u(Hu&jegn3stvjO(En2H%W|x$gg``zCDdAx9_=d!p>^IJa(sfq?40|Chk#C zP*~=lXTAsE31buuWMTlN4-mS0C61>4hV>*$-^w1U^z|uD>Gs?W_h$SFH#uf()@9R57NOcLq( z%-5znTj`_=U8sG%4Q%t65b?LyFNxEw6H=BdlPWD8}X()tg zZ$UYFNAiA(FyrPPT?a{prOYd;-z69kcKCH+ZRrK*@z}iIH{RXyNBOJwUTZ+RnueN9 zcXj{f0>u5vA89#BiaFJ8h-yE)N5ZdZCE9=LFvC=Cj(arp&Y1n>OOuVLiI#~Ue7h=` z9o-N6M$OaJHm;bAa@n*C=lEyL_XXUyR*N-RrdD{5&{+!28)B7P8=X>25$;s{~Jx@5-D6?Pu#Mkj2dNdNGf~%AJ8cS>$8uCoU`Hg8cjp z5!c}Pm#{GBa6UV`ZR)wkxjN^Sj^mB+Yu(k=oxX(9tCNWZCfZzWv0aDW^?r2*knLy< zt3@5@&$`CO(V0)<1rKW>IDatqG*4rBH#H-cdd^qH3)Jj$ezdlxkjU#a-)vShk z(CPBa{Ro#!9@ggqE_Xx<0CF>p(?VX-OEOQsY^zJJ*%FrU?yX1Pv-RVg@{R`geS~XQ z6u?E0>7d^aCKBLHF)%Rb*VvPVcf^fHQVJ!&nA9%QDJdxjlLTT#b%3A(VqZkzE;4H| zcr_2Xo7MN`ntg#VgPkZWPSrOunxBT-F%c9XwaSh9{ZjVk8fk=l;^up+kHv6lU1TqZ z?{qZfD#j%48O|2h4_g#yGhB@}+E0ya3`*?m?$XgcrE$zWL$H)=+c-L2_m;N|V6Qx} zrTO9Sob<7rAKu}v89^D(guU+liL@@RFuJ}T``4bkdRXq$!$S&D`%U5n2xuX#qq8&e zxq#_<1O?hg5x04LISN9{Uk^?9{ArvA^pzE)QB;M`T=_gTC!2pg(I>El=wBMJSz$dZ za^jQKV&lGJHj0NFp)@6q8+p{~#d_9wdXZX|^3y=^^)ZLj!^qq}%dbzHQI%Xxz`gR0I7Wi5=a1M z#h?Y#D8aU-f2WO?XZ8ZpUmIk@N!U{s$ffgh{fR@vz4Ljyi86rDHbm8;s;jHT_friK zenDAT6AQF=?%dH(p`^QH-u#@_@-cvR`p1w8Hv4`G_+s6RX4kCJ+)(7|Xiw=g^+Eg8 zOKCv^392Z`gftQl%z70gPt)|X)D*#KeVr7F-)k<0hEzWLU!`(V$(5(Jjl!iG<=JXN z#9Ca4PKjwm*nU8!yMIXm#j@E|y&~FX244Hw$tGR(nkc!c97Xf(8ixn#gH9?f)Zh{c zs_?J~?DfU|_C!geujfxEscC>FpX@D>!R)!N59DD?T-1)@m}8kCMLHE~$7KBzWmk#J zV07*dK+^zINfQP8oD^#g4~Ic~o0^)G(}bn!H3O8DGp|R7p((v} z+OKFx$a;Ss?7DtwV&W)`S`rIS97>hq8E@nlYH`KPM^JDX8X5vTMT0#`&F5zc+u2Zd z8})3<0^BZ;cpt{xs!4Gz97{$X2vQfWtp!%$73Y`*fr{#0Nm%QdTl zgMxyrpwhkCrKAKwXykM-A*EG677Xx0=#JC^E2w(G;1K!!zi9W{_#SYCj}Xrvuk5y( z7RMu%QoWPvG)H=SW5s-9+}E_W>g~dOg3-Orn8-Lshd1&o)W)UpGqh~jCLD+>cJye# zNNFJUw-tyj`H_4O>+_NZ7zI=@q>Xmr-bZ9&S(0Wbvkl(ql+7v>{jmF#UbA;*L%W!Y z^Q0*ICayjIxgu&vEx(Mys+Qs;P3K=E{WA;el6fZb4f71`FR8Z*Z2K6q7K}H^lY#P2 ziC$9*w{DF+MMqJbg37z|iOUuy4@G(T9Gz#+k zX?mk)@oSvu<`aE{3be=H{(pMk6tKTaWBRZ_6tq8?zDU?3QJx&ub5% z<-J19a0Yc-1derRUstOtn1SwM`uAGjI+!ETDNn-{sn1o*sV=x$pR*~~|7v(J(npz- z`ltk(Bfc^n2ZQ9&7X6nkWva3?n@~;vV7l5W;YS&2UnUcxh>gYPy#A z{{4I+r}-wSG?t9F{+C}uNeYxM7JxD+pVKrNP<|+-@!J3ua7y0Nf_OV*F^}CT%?=Hs z)^$GFy>cpm#tgB}nh zw!)Ye)E3;I(VVD$A}EnGU1wHaawf)=u)p*}Om6AbfxYUrgV6h<91k7}Mw#CbRl45}e^a4DNAa8kkJ1#g z?F_Hh!RJKrccL^`Ic<#EtC|k7N)>$D-(%_<@EO{0Lrz>tH_y!J$tEgCMn^}Me?c?n z2nd_lH>?G;VP@(T3EB05F%|d!MG625!fBMT{~ zFEs$o^sDQ@UWOsXyI;rGk^TEV;EyP2;-6ma-xuMh|N875-5+Ime}8gg=-yYm|9q4C z*0SC|AKi%j-)}oeW>;}Dpaqs8>!&@e@89CqPsCq_|67h7K=)+hzogqL<8K@O^IZSe zWB*@1^8a+37%N@)e`fxvvNNW4?Z1T0aXh3F|5=LvgJt@k#{3^v_y6Z@&!10Fx1>!u z+MCaCJf7I!cuT|bQfkE3{Nr}a&j)-R|FxYdk%MuFApKGHg~z=V0wHZXdLJC^53VDU z+CHv^;a1*e2A4Fk0IT>{kHBf$kaIF&b+a?kqaXuitX**|f-Ra^fH))H zVG>iRCnfP;{R0b8YSDIJ>h<-nt1p5Ni|LxySr9(P25EH(m3m?J3g#L+1rMSh4_@%m z@@dBi@D)2O>h=!x>98=pxj5^{JzJe+e6L%j9ei~h%cbtZHYY#w&GqiTC*bb=q(~=? z<)Zqr<&6W@MHhbY?04Zf6R5C)NLjO=w&G7SR_*t__|w{8srM$|zv_ero=|q>Mc1*) za5@S<%CqPxuD9kXDQH`JO{-sTkgsReir&oSwz;yM7K`Mb@nY(jFfL^=x79>ajP^>> z#yg3Kv*xsqH8nUkEMT~JI8_XS+DYYbHYU}XLPD37{Eye}_1I@3agpzoen zhGB<*Sg`0vhU?kL+`4vQ5kuw3p6V2fj-&JND4#C&xg#~U#PSSH9zKxAf&I>k6)G5e zDebN(ed6)R+L=aFDU*L9n)TKaP1+I?Ck+q7x7(Fih)K7mm+2r6>b8)ymTKFR;z+T-s&^Jt+3;JchrWG5uX#)*GZGV67p>U^3&4z?#={ zb-c_<>y+QRep3wU{Yoj*!wSy!y*SSkT7GFb&%d|cMsYD{!HhrFvsOzT?j%CyJvL-H z$x&0jY3-V}(1W3R}Lq6hyxZzg$)c53#1*hekRD=j#A z_BU|{WuuJCq4PMNMv_U*&&FYij^W7BCEgOJvs30*uQuk62XkSH5odJ12-TE#+97l6ordb*>bdaslp6{KOVc?IRK3=iZoM0+aS>9}mi$Xuqbh5ZvM&fl45 zNXEz%SjnDdriHWd0B$@Y5C$SC<3!^vaN1#qDktz<{}Vjd+&~3 z8vdSm4=wu~NePBaK*?jrg%_@$>Ws^<_4rtHGM3$m0Cj{}98GvquDt%NHE^6*ucw!W zBb$yyIsCFrnTgKB{}RS`X@c3-c>p$KgF&`cwOmr-yyHiTtrCQ#o)rI{*m%wNtKZydu^?=;k8v1@L~81i=O1z-iSR5d&j=*sp-Yl_=rL; zIjtx^KOs69eO7F}3;RV%x#=r=zwhm1UlSn^E~&=`Cs$0TV0ndDKh?RO=tzGqESsmnCn{%emG?|5O^i*4bxhQYH>DXfT__s0lOcm~7lzP9 z@z(pZ7uno)m3Gb#gV}2EUV9r@{N1Us_#h_kyQQUR`#XwkdsSoY5L^JgR`xw+8wxkg z`q^j-X8kZ{2d@Zjeglr9(W?A!4n^vkS>;{becz2wo|Y_6pT%AN&~46wK?yUJ7&Te# zPi?JRE4ce1DE>qeNqX5e7hNft_x|C5iz(%_kxGMVJF&51!rH7D4aFWCv9hPtQ~08p zE7mLr#EM|O$4z_WJ>_c@$I|drxw3MM(u51we_~Ns zfSOdOWX=o1u)3P|)m8Hccf>_4ylFBf6HE6XDwEYP3hjB8scNCI1tuOH)UcAp^NVUXIj4grQz)__(q#l^S6ai`}&WD>GFje zw{9ky$lNS3weSx330D;Vo`fx!tTKM>D}Ho&{JrZ{n6X1HzYtv@Ci>Rj+jrxG9J7nK z>iU!T#Kf)@RlN(2VLO`+IGWU0m8?uNIPArm_0U9gQF3MDwJEV@N1?ui2wUn0%k?II zU6o+{4{or}l}9_NtPj;cK8>l`3 z%-H5FW6nbQF?C!UEx;^QiTcolbC?q#BERRDU+E(ytn>XrCjU*1|h+{g5 zPFYKdoe+$Z8rr7~{het!4$4|lXbTOZW5*XnmH(jVPwbk&!fN{+ACI3#1|eCFO0>sZ z$_u5U-HWY}#ibo4{G!CJuI*v`l^Lm@V9!2o=?y@w>NzQnnV2RpMLN2pi?BynSVc9S z{xc%=57j%AaJzVgg=zZKNknfQB0*4`4d%LOFyh2Qt86G&f6VWS3H_2u9x~^fQ&*)6 zEB0Z1{`z$%pz-gCLK-4iIbZ5J;|&;s97WIGAHO7~7V9-PniygA`f*IH@MniRlQ@=!e?~HGyvJHaOX}mngozS>?KlbQK zDN0vmyvEO(VIp?-Xzr}9$tP`NI$$EzRHfc?DcjWbaU_YaF1)>8Lzz^1-E50JS50|k zRPSoRsq{G)`vvh8m!KBN4GrQQ{GOO5r*YcfG_@B4&P8PTdMy!E#?{P%tm^*9?>qZL zDD3BpWs?QcQZ&))%5LTp_6A))w1vWNTRox1wC{KOcSO|bU~P6=UPzwZ(Vrd*sLi|AsM`ft!Ram02YI6t4q%5KXugKp?PJ$0HkfGpJK=av>?fr~9r>}^#z={0Gx`v5NZ{)MJqCQ?a=l+- z{%?!cX+Okv33qQ>#~&l&Vja{J%mn&UgC5P7-7k5iJ&!73qUJf_8*sHnnXE1snpw85 z*f~4E?hwuqT1K+hZbH`F-HnVpY49i6&Zp|7BuMCP8>!hE-S%vwFzb!nwY$K|o>O_# zsk6PE^%zmB#^B=OM$4rztU+Hhe>K<2{DqM7)*%TlDM`o7j7~^s z#!~4yU#W3rMUV9+O#h50EiEmc-Ys7teax1lp^)e0*Tyqa{=@G_k3m1(GgC{(9nYM$ z@u@+FwJ3`d(joZMP)P=9eDUmqW|o57TpeBAwY4?E=iJs^QB*-?63(#5NF|sad~cy; zkaQ4GIndJ4wOs580i0z1WDUSmo3sUg`}RmM2vAxOz2N`&``b%{y{?DKbG1&!3qZ?6 z)7j;BW~oP~oCf+b+WPvbShK?Ni}y1LfGPaFT4(m_{l=u!k9CW36jH}oNuE5}pKHM# z49DU@^b*-O4$71q7fv)YPrzrtf6WjX(ValqME7Bi;jzS?hKPadpTO#E83S%rHB9i~=A&qF- z`8z=E4(KD8mH35()PMVKkHa32v!#jndH^I~Ux<+R(JLs&f10D?0{SBQMD7xac%1>? zZ#0$K7@(S|l5kX4AFZ)pIOqODmLai0yM)(e^AGUtt40jX8>5CwiNv#yQE8OSxq%-{ChKhH0)ieumBw?FshcH)B*Lq~ZMGu${o=pH7A4^y~N@D@_2KLjHBCi?p(*ke1`=i2;fFPJk#I(?WP0Zt{51=#6R#tk1 z1bI*GC-XHQtd9!&FN2~#tVH7O$Y;&9E6umiGB9z!WcfGKuZZ$Bf z2El#OuiZy}Ea$ac{lPL(MkC~{$Mh)bg=k%v9sS83xLy5V1=J!fB{Mn_&?XJ2cU&>o zfi#DtUd9L?^kir?I>N`@PCq4;M$pG^8Dl0Q@;t6ny>+?;B9^}12Pm@@lU>l8!#8i^ z|JVft5rAe%2y)#N7}y3BSTwfPA5H^OyG+RS)bOzL;c^EX8ynCi`86~&na55`R`xfb z?%}oUdnT>>a0!qK-@JJayzB#c?39B&>MFRmQMg$_s#%a@R3(jra#tZ=~ob7 zWR0Ht^FYfgdu%A(-&{Z`3`WkXx4O2b2?#;%5>pQ;1C>F5>6bBlZR)DGwD>a+O$#(m zaH|W-=Xw0o(NF4df{mOgyHL5M@R)H8jC*64oRT2@e#RKWj=(Ld&hWBM*E)bVGWNsZ zVdh%l1@~@(X@q^wIX{o^om^SpztbQn8250#0UW~WGX+<_xW5oxq&F3x?|E6fF_!E~ z8cRq$$rhT&0CGpd-Vh*rl747VQp`3@90?LIzeq~jw{5q7jZRW_B>rnIIkNy@;f_I zYj<-;O++IBQ7*KU`dezM3<-~&My4PtB%wcrUr75$O$`B|Z*p2r9T?nNm9>+Wma>Or zT4bxHbV~EO5@aqaa@}B;mz8}XoWk??0*!oTpF+KJCSjvJ2mwpYPk+_311vR z+A(x?#;B_5*X+F+YL50I(5to2hryUchhVNU1lwZE%=eHBinho}Rk(Kql&i zfd6G(XlQpbmzDL*eG&$h%jXmnawLGb4lnAL;|NrSIN;p}Yirr;gZ&nq(Fdv?50vxj z?-+Y61vDB>L?sxPlq9R`04!RG77Wm~F#l0z+#=e602JTqyUA)3t*!6EqM2i{ji6PvY*hV(9K$$*Kg11i%duXR5caFU$a4+1YIq1Cb)DmA0utvqi*R+y z3sa6aWZ^kNzvbZ=h?Q+(H_Udk86h^KSX&%b()XM_IXSUi^}bqnkf%=NJ}q4`f|*Js z9?vH#_A6eTZmIrA>{;>H87lK0?c7lrU;OsS*8BORZz&1NR7Oo7G7=KT%S0}s(uF0u z$yo`Ayx&J>5K?NmITvfeZObzZ9ZF%zAg&*f%od!ke0Bk*qnB+!d29*)WLxXw8<}uD zZifcDeMBS1Z>GlaTtz@JDYELpE+8~*4S+j?dWQ| zmIzw550y;#jh8Mwqa<%}T;r@a;B_10_xa2O%RfM?XMFZ>(4!LZ4|AEB7im;2XS#Pi zRM5JyPUTaoIeJwYUqpa(KHH& z7vo4pMMXnH0|s9mZw%JjjIL`gJWVfHJX!6IRaI4u8v)uC4z8~*0AXQRR8;-}2Iyo2 zJc{43+tXCV3}Nqs#h*Zbulx3RGvJZ}GE@@eqX8GC<&7s#{V`c%V%*pn|s2y^4R`}JcFF>R9Y+cX;@{#(>qh5ADQ3!CBrR)K1RujO{ z=X1aOhxlf?4Y$=SVEQ;#cmLGGgOG9zW>}RURPSwIAk5kT-f(RB>8WYg$=F^+@-#i2 zz#Lx6V3a}HH&^E_BqFj>k=e2zD04ydB7=WP$d{6`NFxPk*>O6!2XCh5q$%|CmU_EY z7$L*ORrRccrlnvA8t#hMV{7wke(z+Vc%n>mWk6(M;W|mC+c40_{rOmlot;^)-*b6O zT(a2y@|qn*GHUR%c+?A__hNA+r~9KNHYCv^7sRvwi@CQ9t8)9=N7=fOEoIQ4p!6c8 zI|Kpg?vhw^NH++INK1FK=#W@+DZS|KknZmCOx|~kzxT`kI_F&1xz6jity_Ga`HVT| z827lxeb@dHd@{y=kg=&)X_ch!NX9P1RBm@zk#y8t@t%cw;%7-fL@8W8IbNR@MUw~0 z-&OYQTk0w`4^QAzwPWq5?}}d&r9!Qg^OjCWd)b%H(Hv`7lkbVT2rw|jOaXp%{LUb( z3*4C0RnJ(Aq@<+KVJTp6(4JF632yd%YE4<*aj>_yx1)oajO=5nM!W-{4OX$UvBCQd zMsnmo5(C|rb#U1rGpY`pV!7R1aq)%7>uXXos_+$-%Q`+9#@G;4Pze9{QFxyNwDhkTd| z@(L|1Erf)1X-*)I8#dpwvyX0l&?*I6pjk{dk!P1rzvG4IIn~KxTaZ$rsg)VR{RRE< zTLlDdwN{90Ee%@)4T?i)Je#S7mC?oCegq)>fHYvkV;#}tSW8%*xD~-UYb+B(NNCtbkb#{rq;^Mxq&RCwsg6^mt`tI}1w`;*|Wv zUIE1l8KE@93dDJYNgX19d~edu=Im$Nll^+=JV$>-r&OU9oW*MKC)t&pm@FJzpxU7p(CwND|x%^kZyr_C)1?S8= z+0jXaPZG5FWT;7yK3Qdej05f1U)Gx@?CM*#VBGmZb~$G(CX#!@F%Pi5B?!`qJcK`M3x;Rlr^wpPJ-H!<@L8vqEw6>zQ(NX3c5; z?7zDJ&iiD;-BwA}tE(&XD%H?{fUHj;lL;Kh3x_WB@oZeX9;P6f1y^uCQ^3f|^*${< zn@Y$YpW}j(nTBh9O@M%m*EzHMSh7c=|I zzEN|tTebAR&dQ?nya{mRsg=Eubm!63G$6}Jod?}|Dlm>cS=i~MO&XC>478eW4(5Fu=22`@4Bpfv$e^|NiF|GK{(C}+` ze2wSOXqGf#jH(LPS!#CEP{vKzA{7LJyZq%7w@{c`riRjj>|Yabb38rc=CHC$)`BTySV1+QEsAXQBM>xTfbHsR9|%ok{c|SF!KhAh4ac@%gE2r*`pCTl!-NT08>n6ao&@ir9CwP8%PzW8vQVSE?$4HrC{kq~MABRcVDyg-ZO+0YaCJAg&I9ArCtA7K zBwl7q6U(04+DjF1augd^_98@EtD3~I8j6($T(&Qyy%^3`*Y*{OF^G<~W_{0DLDe11 z;9D5nqdj*yY%JDpEBxRjgGAYwa5NvtK=Bfe8t>wUB4?b z-bIovWis9I@%%l>DK;3io|x`Fs_83?jU5L$BZ7-F=ox#g&(^mu|E!|om?;&vQA=<{ zA{6Hr7Y`R&(IkXMy6OO_mU{DL|6(b$i`#zf>({S>X{(?vz=y_mMP>m4+&~(*5w5SV zAw{rEXE2lwDgvWO5!?FudO&Ix=3<7nQ^_Qz;#aQKUjqg{4z0>`jf467_j_U%I;EU> zuFrlK(sJcT-TES?b3Wxq<-^0Q?Y04WY2cKftUqn)e|L=)L+FsHC&l`5z!eD9+CMp7Y@hi>D4V?8Zc<|^}3ed=^--4F%V!5duym~_yQZ1 zfchmEW`sM~!{P91t)jGs9Tdwz{eONx!JZz-@`u+Ozr0xpYeq?ki`A)eR+p5__pGn! zHWu@1@Hi!g!a==o?pUhv6!*k-rGRV2D69Fwqs+RIK7rIk@XASi_jNh{G#&T!&fI5@ zaw9k_CTlzwRpN0_edj_6^o-1YxI5w%YkBOGb|VnB9jQ0nl`WmQS8HL-CtG}HeWg*X z=BB3mGgb0i^<(papZ`2!tFQh)u%BS+rb$eg>C@mIr1kOp{5v5iB&1+Dz~#VvE^tUk zUhZ(%=3uVEs1HBZbmAGGD7T&o8hCZ%{k>gAHM1muJ5la7ajVd4tcjX`coP3+cwk;a{Ts&7_+Y^F-d9 zW7~aiDc8=|R-32%L+pqlr#nlN@O(NP*SNMMk5&hSCpM8$n zS=0FS;T?bIT)9oNaC;wlc2*pr7oYOmCEN3fKvjowILhf}T1JxYWQGx(2G=M{)ng}; z(Rg)7rFxC8rKL4LYumDL-S2MKf3Q|tZ-dL;OIEgL(Cw_QYe?QPXlybHCd$F3Ag6rJ zvzU|^zVgm^rb>@b)Mct>Rqy8|X3DeiT5~QpO-Fc6Y}K|K=JC$t_ts9PS7+zVRI&yO zPph6WSdL70HNT1bHS4iAzFJ{DhFRFB+mIX|ZDnXOuihvFr->Tp``h=EPJ<0C8~sP0 z;Rj&R9USzgbU*p();ZF0QTURo#-N65Yp^Z9KiExj`gwrytLX(jePLb^PEQYNW44}P z|6%6Ru#Wa*eyK*Z@%3cr_5EFe6XV6n)_nHC*9MDE)AjW!p5_{G)nXPVtZ%GY%-O|i znD}P*34O*`!+AnbsDti(Pq*v6G&WOFH6Q?cpz zJqdF($fG1qpK*U*-EYU(olEy$ZO!LbpWqtaSz3F6{m;FRx;dknU!pYtGsIK-U^f z*i4oI5NiW#^C7q}EvkEHGPmqLb%vDpDKY>0J7X5lqkb7nO$90Uiyu%&>r-Ohw5v*W zgV3;#7i;V5S`D7H{bhl{vh#;7*rIqQ*%5_nO35<3vZQJ13^ALR9igOSHq9s}TZ17X zZljlk@JH)oGn0cprHcfL4P_;za&yfvbHG`18&CId&$MYya2~A%F$~+R#I9Y~$A?C0 z<-3lMh(5|HzX;hStKlDh>o?_fgq?I2n|3`}VG$l4EhEo)x0G_|w$+K=;fIj1GHkK2 zS+6B)lhoa{cVa{Enf#KeSfJxINj$$Oi{Tv()3HR@58WHDyy@C&f2B zx=vqQfUqA|+of>#zji@kQN^PQQ=@z8Z+dZ2=w?LOW~u2sV2>>3#u(~qTvyC~Y>}Fs z?Y8^VAp2n1Oi3{)xKOn#=^`;K?)+o|mYFHvhsI|^Mt0w|yQ71ZjVbHlhRbnY5$o$! zoorD!QKbi@a0OB}R=ND8#c4<2AV)RdR>U~oAzur^OL{R7@j*qJsD!qPGb(#4fih1y z*M7NeyJJmFgN2tS-f_H2PrF7=^z#FDmFWG4{=Zv5O)*W~OPjeV=M?FJ;HS`VFsf2U zkX2s4v1bCQy`W_3<;L!rfD)t)e&hWb&=sNC(m@!Oh4dts0tSFkIn3%>UQ%HgqYU7n%q(ENVrxrv1Oh`&!-xGi3b2`aOWn?u3frCT&eV-IXEh79QEnV4| zLIbz<(}Cs9%E=0o1*O^V;~jf0Yh4~{QRA{kL`R$t({10sp4}5e#v6)YQ^I0VF3I|8R>C!q&fH{y*AXvsI z9e4d_-(P$q&S(UI1Fixuf+ta5W2a#rv=w2bO2Qs|Bi!JQ2pGb$Qylt|gFjMms!Vc` z{()HRhDBKbDm7_s+U#2QRUm85IEH7w5~z9)@_d~ZWjL1Lq}BHcWS zDy&NBJ@!B4G^)0vqqsZ#&b(wSo7x7>|6auNizfRn8t%^@Af?*78)EpT^PN13lz=L0 z)8d*GD|E*FXfN1$1`Z_RP`9lk-?tK?SP?SGwV67lP2YPzGY^%`s`f}r)AjU>i%QxJ zefyHr9~0&;4iS@0sw|f)&u++DyI_ze9LcUaIV0GeU)2M5LiOTh$FQ2sW$}s*@n5fB zR(g=Ed}$emeQfVb=3Jx?qyAj1Fnvx+ceMadnBYoxdz73bR=H7rb_FgGBSWa=Wc9C= znalEDex84c$s{$}E;@oceN7CW^)}IMetdl?a=1U{Nu-LZZBf%I?GB5mx|x&~FIy?{ zV>Rx{N#bL(nTFF>Yc3{6DktY%W9#~(h0677Lzz`4{rhF$BrYwpTMO4|bm(gte+&pr z|Nd%<@#SzkvB=6ys(0=g@A#%ee|m2_i?Xe9hdJ6xolBU zql%&;$5vHe(WbXS?Q?6>4r!>KZIZ>f*vUQlyVCX&hrKq*|pjbElc zx=vR3mYqjPmgh+{`!%qht^5BInN z>oY=P@fm~25x3wV^j(32+Bab~j+okipA6f+Aw@Nu$x~wXh-&6{-YU+{mYm?wh81jC zr0|@syDFqxT0&pTABY9P???_Gm|I>y{HXx9?=eFC0&Z;M-|LKo6re=Y`uNX(&I|v6 z29W?KmiqIbKTCb`zm>uIe_)gD#XX{m==_scBRO+0oPI><@>J83d|jx;klp;A^V!`( zAt9j(bLD|ShiAthg{B^LIZfPuk^hGyOnomQLm~CzwWf!l7N{#tc1f6g{^gT_Wt!I% zmZw3^BT>>g`55@})t`lvLnk53(a)i~`&VyN&`1p8C0%me{c1Iv~pq!_aHu3u71CU^TGY@!^USiO$@CXAP9ZarS%{BD= zc^daB=0Nknh>=nW#**OB(CiOU3u8dfXRgjgks7lx;xw3(i25VN!maY$-~1VH_7!@2M_>T>=xr+jqvEyfb7LSfK7nd-KW1WD&E^| zz-qZ{xtf1=I5C#9vr~8O(ql7noo{l9_U1JH17$uh!g@$4dKDrqJqP#Wk4SEzS~Wwf zGG-sq|GlL13Gzl6=Ja%Q;}4aUy~oGLUkZO#)6}$!H1VN--NYa*DQQ3jTDGzJ`3f)u zj05l|B;dnyb3pH<#zLiwT3C;RqY_ND=c?o=(+beBFfpaw$f@MVLl+G|Q;0uBR*zvy zX2xnT^I^i0PaEP%mo;CnvJo7e&vg!=C-GEl|BxmniFvrq&0KkxUU|FVZ;P(xrUH7u z1zBBbh(4a}GQ%*l?(b(kql}zb(~yuMSP7Q*0|L9VwNAxm>5(oLBK?c?v5AT6cCAXjz51O zyVlt*OGHpgk3W>q0I*M-f`Oi18sSuzgp3Rrm10)3C`S<%ZU(c{c^r9EKT^FJ<`mJh z3zgOT5yGc=#cS$nI?e@|iN~A9+j^;I*%bTOahSVC!^QP4r<|{B+w!zKZL7B`cMIyw zRzo`)oO$ea*CWT@0A)Xw`#@WG!~uew<)GxhJ!n}%Rh&6EhCcPnQAVma;o?;CqSt$H zJp20uz2CXA&8Yfug5A%0I#Cr#U7aoNCmzd=3Kr>{jH*_qS<5P&^M2mT$M!CH4$P(G zXg3(B&dD!hI?Yr$2u3reC-V0-AAKI!dGu>j&x+LW_va8aFp>M#5smk*Ok=RzRM8c* zj|?S(6B4Gt&}54~6Av#tK;q}-yoPh+Tjzw2H#SdC5`SX>BVg_pjE90|@OU)Xbby2N zfK^!`ertA!H{L`^GCM0@P&Xzfj=tWW%Gd<&{_zNQ?xtqzKamEty4g7#Bu0I6kNf0@ z8NLcU#N~VVl+S}fpF?Hp5t(YSHf^7^{^_sYABgj95sHfPDczU{+NaX;#DYvDgcJ{h zyFK?U&vD*&8yU=MA19B~eOq*4RvbRT;iF3FHC*^3@XPe-lWOcu_B`0! zElnI3|rT=YNA@G+xKLiZ7eCt^bM=+HNT)jQ+&Ctn=GJqm-Dc8jA=m~e%)MK zbFf=Yt6h6SS5{WgqEHLig~Zt|6T;0-fNHn0v|aUdi3GYy-5$QFTvbr=jVRlpdBvy= z*2bnSOBqbnqjiK9Rmq%&7Qapz!@E>N{ic7S$`CTO@b20*|DfU?LKJGtrTA(!s;Jhdt$Y{ zyOygsH>k+{Ijcf{m-io5Ad3TVi@32{S;Trmw`Qi{PrkDD>hcd?GfmnbCwF7cQI-GV zPdof{)@{+6^u1^fPdu}DYzdqDfy#}my`}5t$R0yLAS^aaZTAox%+u+KJ~VnbEmViF zo2yo^uZz_-v&ezX78Q3HhxUdPNyB6i1Ri`1uA%5h&gg%btHDZbHkN>qL9ndds`L;~ zEI1DaS~RTR`R}^))DlVh3!0fn_*YlMpaKij>AEFI1FiX|1bHz>A0jMQ_3f+S z)e>`>p;>oRf}>;$VDSGgCP%Q zZDR{8a$RRW4x>9_kyrfQdxY6RfiLMaD}ve=lLWl@U%pKHG6F=bCxO7KW9PjO3vL%e zPh&E3KJ}OQhp0Y>PUoUC9g-jDs=^fBxQ?hU$qUPqfA9FvrQ#(0)`M@JeGQsy+hp#E zFg5yNu=^7C=}pa=WfPi>_W*p$bJj#ptQQd=A$e%`(}}90hMU(;@wL9~P8r@rwF|Si z%FQVQn1!JZH>#n5xU_`T6H99$Y0cLIu zkR;}!+^P{_h0`ZGLR7UJI_Gd2G~x#<=e*dfUzWLrLV~$uH9MXxBdqzJQrJgo#P01} z_!IyA1!rP2-zHDyL}PU23Y_=5iUZX|anhUX(B%#p?M^wPD%%l0#8O_%$wY}D5~U<89s1i zopye;J(ARd&mYQC>erb<^fXgpC8bdOmxXj@+h5Ov9h0PBoGPR}p{gUBRNoT2Oxwwq zphjIavj4ENtn6xT95`A}*wnf_HQKns3pl^}8atDH6=Sok=@O5=W^ql*ygIlYnbfYo z=BF+3%g%`{k-Lt!HpNkz4$^##*1P8s&TfAptg)pfQz`#^h^V3SfOOa4t`dUYv!Qp# z+5tr0Ky0jF^M|uKlQ~)Mdy=J4Ulq?{DQZd5H`fyFIVWm{+UaA#9HXzq?*}gj5Cuc> z5COV40wxNoV{&sF^XEs|eRg1g$xKDIFXQu0QG{u^QF2~7ou;qKO-;l0*;5`Qh&mgw+4I_*d0sy&-elTk^q? z5hxO?u*n;AK9%?1^iszuyZ7C&zZ&V~IlOo9xO;sGMMuYqiVF4^&1pS5d~LM75m)@L z4enE2nZwh7W!y-zmP5ZZ>lt}L{VEAJ%BlaZq84lhWz?BjwMu_RdpUaN0GiD#M?^vQ z-!Ffv2PKxk2hWQd$?g&+!UwI7=g~m_YB!2LJh>|J{idFo+M8%muF_KjgY;NmeYp9 z_{_S~JMHO;-8w%Pgz|Np%&A$SVn#Ub-D)Dqi6V^bw_AA@Xir)AAY!K_Iq`aQt6_kwQ3KYE6VQ6Mvat8p>qjy zZ!%2AuV1oOdOCbhX5p%pF_I-R`nE2oq7^cjCZ!m8_mkmGW#r_1IeL(vwA;G=4c zY2*l$b-SqhzFxXXz00p0rvIJ_F_OlA*I!;VKY2ZkrE2T*gS_0wjiPXX@7R*Qx}$H2IGN@BM~#TBNq{Zf(PQw#04BYO zI;S&S&_KFSNAguH)SZ|N5#=`bwCA~Xm34`FFhT>Y)0d!#!SoM!;RIbn)NV7Up%X_> z9$<$n)F5_V2lhP-4hPd-$-LvKpYv6e>W=!3*C{`1#Xld?6krlzchcrARLRa8t$X;H zwZyIg0)=mQyp@Rv{zW??7+MBR?wr(>EAlbvA{#X@Fs#Kj=!c3bv>s|4IX?RsG z2hl45lZsj4Ubb-l?3ze&vA+2a*Q#|uuE*uR1&aCX+08{cGjefr%|`O^6Zvk06;1^8 z^&(1h8~pFK2hWJ?W+&&QvM?0U%Pcn`TT?O|YcO&?Nu4(!L+=dhjE&1cr^;8Y)2MoYvQ&t_U@_Jn0W`#8O zP#qzDmTL^D>Y8XGbqS3en0A-qJ97!Gdh+3Qsu|jlakgPMV;e1vvUD=t%aL(i7BUfL zB4RSAF@%!c8E)snC-Nd8`sEP&qJo+Gp1X`i`fyp+H%FX81P&q#aYxffa<4|bP%eKZ z{{|Lm(NO=E+z8xME0o3Uu)I?F^!y(2zVPK02x{vNf0D4k##CP0(#B@P?9#k%A_ht+ z<)gu3Rq1z@z4eFWPHhMFS#NU*O7D?*VH{UM*3WtHP&s|Aj)(qfw&PE~ziQVz``E5p z%KXvKqn{7{tchSr)N3ts{f?5#g&F5qo~kk{ZxPiUh}rYuTpBrerg5jTFqEZqiG79F z8#jaAP-A$^N@X_~NU`))hKih9NUIk1_8jb9;KYy{%(jnzkhJ;ciUw`L9Mur9roet> zkA3m*VT@KCS=RLEz~{NjB+UOfHF%+lx^PLB?fIB+GCYxuV95G`WqT>LL!sia1N+6A zIx$ZeS+rQIq$NF0oCPvZgAz^l$T-QVga$69mgJC7F9ofbRn9M0-mN$y(iIQH)IP+v zr$>MeD}^pFBxc}A;P@xorH`w2&gy;=}G?q54NhXQ>eI=5AJ)!SK6u? zy))4%MBI~563!rxbVe+97wn=}7u%}FkK2;d(rS)2X;*EV;L=-er{T*>x~$1c4$+Js zPO%MUVVov+iuZh_PqLzOHvgv}g6~&eacl_G>c@-=X@b#xVG0}Z!GnrATlRpZvCE1a zN9EVb*<)jAx;#mT93p7!Fj@R}f-{=69Fnqr8H6dC)Eld#855N$)NN=yYKO(sSeF8Q zm!^LQyfpdR{{{clAa$c6T{^z6T%Lq{92YI1}y}-C3kKA#6lRv|*R8JbW?t{{CydWmM7A z!7kiR<6`m3vL(0$_11(26|LCKX222HfaPY?nR`xPTcg^=$Z#lF>YKI9Fpt@{?-%T@ zWPLeYDq21-YvdRnS;4m9j$G|cu_!l@Y+Gs^$|35-yjpL@xil68$U4zo^rfD0+E&-a z<|7ON7Y0a-ce&%D^sW|6#W;9=fQLi_L6N5T#Tg?l7&&>e;N zwomYXTRY=_g3JIg1tvNG^lZ`a|1U?aKX27Q>7FGe4d~E-6Ss8)%4=IYJD_!_*bTdT z5+vOSW@2r(fAJ<@@DXGBV`{4QO!7Z}3Y51d8WUG6r9YFUwiBWv!4K zsg3>Q$pBCf1_%=oQ33$EsVFH+w*lkR0npC&_jADng670L5Jto*W0We1Cs&Kn)=V{Px)subcC14Y=8Z z2M>U>6|iYg*cD8>rZf6=_ia+kqtvy)0G43@WN~3(T%BK+saG}XCvJTA;D0~<*O7eH zz7zp3p!fP;W-FJww`!h$SGBE(J&;0n24gx_>Pfw&=k;DjCW*znkC{FWQPO@^tuP;v(FKaKC}aW z%Dv)YT5Q1Qftfkn^|#kV6GDm&sQ{+EU+IcR9NMn(N-icMqPZ@w{*~Eq4j9{z>jGXm)QO<^ zU@0Mi3Rhec7iSWa78FEc%X3VpdA$jsvdv9Rz{dq9UPA`pajoYXt{r8;KQ0!QBS%fw zpBxqC0491^jC*r1S&e%W0rC%YOFwQu;ERuq#U9UFI{|Z*c_(d{Wx+u~?y3TT6JB@E zd4`Ul0}3eT2OuKRSQUmla-gNwRAnGrVi+AA9T*q@kB<&(2Ya}r40{0VD^7sy1L!fb z6ZnpOCIl@CFqrAME)6VNAV<`ZwnZ9n8h-v85anP+`P@#h{of#uRy%HMr1_eIv$L5R z!e1d%MI|x_M4#QuT?yLb)$&FsW zPPV7;CTGFfcK`l;fTbhiC$uTZ$@>*HrfM&Mg!1|9jquw~SF6h|=za`rho|K9cqo{M zrYn}+ZjY(+mE$fqsp;dd4LoKSUzipmcpam)YN&c}J9*d{uC}@Cly}Nr#hJV8=q@7P zWe)Bl2n&15G%(W#&L)8XX#)d;O3NuDD74kx2lNlY-gnpT&GSbs$`CGtv z4`}C9gWC!?{D4JK?A8Ebc~5T~Vw$dTS;KDV|Y0{c=huUd`*s*GfY^xJPg?M`k`rr|m=?M`RF zA9pZ9rHbZZdU2fi24TTX$7QE|)4RQF7Wz9v_HYIwtD+AkK#NRHD_@5x+9)>+mx)9~ zQ}YrLMGLxgIyLsDppgguB{FPOM(vswObLqrRs=uLLilkNmt&)*Uc0@>vT+Aw2DaNkyjafyp=c@N86ar~{;&Km zp19e+<~SuxtuH#MiP%`uJEE(P)hK^0B`Q^;gqU%Zwf%#6MW%#N=z&e%^JFM()&oC; zIsbZ?sp0nuq}p&E==;es$4LQp^u`7=ELFGB)9rMJ-d-MzNKX(JBO!khrQRu0`Tl*S z-aNqWFgA4Im(a;2;X~hTfuoh;S;n-=uIb%#+~lm z$ei<2ROqm|M4*`BtPOTYRljD0Mm?+cl6E#``gCSEae_72PpxiSGd=uu(WLqLc$l&A ze$7;Su|)4&c$P8KNMaSA=3(zlWO6OU21u)(%XIvHUH8LJ_vo|84UNI%o4H+e>vOhz zNQOD1R+V6=YLQl0el@rkGU~AK?#qc<@ntPVmcZxP^V{K-^MkDLoZ=?=QSo=fqOx|8 zb3QpM5S$rDsi#jEBf4V8-%QkDgtxE~h!w{EC1#mv=|WWG3t@Zz_r13Ir+uS&-;3H~i5hcw^y&2CjjK%lX5DuvhOM>NrOsfmP^WasUeXuuri9sw_E zI1EaC&{Ko>2d=}$APvM-QvPo2HD5mPaVbock7kw=E$v)C06ik5GFM&??N(Qe85j1I zfcjjq3~S5^DC)F(!Ha5r!JS&ODTPy?AJE}Kqhpr<*IL9Cop?p$m5U=RX9#BwIjH@*#QK>&NH8wf z3>i(4l6^ne{iN`FMPj-&Tb9~INZL0hf7=QHm8@ccQ0yT@9!7a&J9H6Rojb6}rxtIU zBZ+_Kb*`HTQo_y6O^2P~{r;b1KNGoe0_r+NUbq)c2?NVd|u!ah1%)56V_#jRTiX??aEHaGrkB2#Cgq-|G^GAa1pi z9%_)W|6I<@Y{V2>43FGj-=yc<@GrdTNeIR9DXiZM8GxTeBP_WRKVct}Nlds`B(hP_ zQvJFy+0d4F8=ZmuyWnxJrcUIuKYKgJUk_7Q|4Ak`p;w_x3MMgpYtO&}_1hAvwTr5<(9aHCPN}3=?_Dwd8R}-=^5Ls^StbDhKDVu`F<^?UOEK4$qeI ztEwglb1@Q)+0N#q>~YgA+u z5>Uiq3y~Y`@JGp~Z^(blKmfLnVpkkdx3-sy6){=Aex2ES5@bZF$U%wS;Z^}>r>T?& z$E>zjTwax+`J>)wvc!Js2`4X!#AmTVQq^UAhrB*v^?6^L^k`}7^o_+a5`jRPY!|SW zt|qH(Jf>7$$}2TyT;|L6N2Mbe2%alp@_Ogi@C!{M7&>=N!C>5j5g08_9+b@B^xp4^ z#dPuelsh>i-Dd(0*{!7}>AtVkk&B-{b;)7=E_xbFfOitJZWZJ1iV0H6_d=@DXzsd=k=2;&uQT84*AY{$fbil*1!@(i}OH@cWYj^8Uoc#N_0pmX%H5Gf=RB zVd-;#(q@osf{wuxe@siGU|CLB>V@51_5zf`o7^T77%+ zwl3Fou(#LJ($c83;%_cnBR{Z9Qf}tgXJzj zZNYVRprPF}in40<`zDTojr$D`I z){3zKSg6RYXr>PI_J%+d@1tOX5}>C)P1v+XER>iu?91eo0AjU z3yZzMkb}++Oa$buUr1P2;-xe+cmmi1A47Om$cCN=(Cn=5wgZxcVjPZeM^{&d7_dRR zw+&QEathvH0pl)Y6yTS4D1Wj$rwfWTV7USEZ2$%3F@jPd-Ota@+uJ)ZunW92u)Ch( zH|b9WF)=nH^G*h4`_`*8zB}H z2!}>YpFr>eQln~)oOjLA`uaKGx8z<3YYwym_o|OD7_6-95U9YYTrK>G?YUbP<;3vu zcGc~Kd0(VSdJ}1yT!*`b*5>Le$GavZ)Muckgt%nNDZ|&mAoVR^FkQ6|>XTb9T@Y7b z2Ym}XbHBM&4w%kt17A>{_+rLsPM!z$6~rM}8d7K&034LICF(r@zmv7ZX;)_iD1?N9 zEl>d>^89fm9&qw<1+_Cky|OJLNf!YP%&f1cXM4K33|NK&pNd~#L=-?g6x`hLGvqux z2|n5-YVIJuP-RWifi*F6Tu}XI?26uawm=0_ZoJ8d+X9r7M&RLqiAg4TOzF(onX?89 z6_p<`fRy6Dew9m=1iq$+$H%wsd%i!0Nl@Vv=o&!LiWo@J{{mkoz!fO#Tmf7$iPOgC zPdMsRmsO3<&L$IsDiy7~%zz86wJmb%Gsy;6Xf_rW&2R6#OG<1&#SUn1SsI`(zq12W zmsr`@EJq6_fDlT9Uh@O?Qo~3N3e7U3;EW6dQ1eqy)OlR8Cm7(Oz@h;>p%Od-tBTgw z2bc}^6sRMC{M0v#iBj+bH8eC7RM(GG3)Ef*Vv_Jng{=Xoj`|+JJ~j@PyC4qGO8v`5 zu(JVbqMWM$1>qCPM#AG5qz&k`66*B6V?YoH*h+PTkwqdawgc7va>LH28WQ{VPqex1 zR)Q)kPr)QSkWm-GI}8=L0pcDHv~@;Mf$7T@@EG;>eht16jcSqm<|zH2Jr~z+x&gm7QzC>D{&wmUr*q$28i$E_&Bg(VymsGDLr*GU^D3# zWV;4-SOIC%NJjsC!`& z5VHpsS9%iAhS{N0;-SQR!&9bk3?lYdByN5Ak&)Q!frfGM@ugV$CATQmtxQ8=Wc_7a z-nS1SA()3H-90_)bl`WJsm%{uot>2c8?c`(Un$piT^g{JvjL)q53&htROK0fRz9EN zK=q-gryp_BH!^CI=~tPZo!$6pEhzZGY>QqVxj$0EX>&B#)d4{N+;Ub{42S&S4zkx$ zuIZs>Q9n-dLg3s%vuDx!am<5Yrds0R_0<&+>=^{6sK+8;ajc8MQGNp^w!!xXxNOk* zdu&Knc6PoIWYds}`XNjNgdIaa3LYL_7I_dpQ#wHYfc6u1BPJp1nsz=Q)Z)47;Ns#& zGL!JRD%FSesq&gfa^h9##hX2&wG?qnU^9=tP(Xyt%?iM3?BPK3sbwdEo(#88{ zCARO>73W@@-mE=a%ZZtxG5gI+G2ZXwm(oHVj_V7w9xMn zNwfsaVtpJm2J&zLCP~Z4C>s?Gph^WZQ)A=y$WOrEr9Zb2Tv_0I0kwX8{>QCDk<1_r z@@R}T=$ki*oHnGKoK;^OQKkGah=8?oBiIDm%HC;b8s#Pf01X6EU_hpe0|GGx=Na&8 z0Z>Gm2uME$$Hs2Wfk8tDl7GEZy9;Ff01%f5tjPXyGBKfcSd7v2OuK#~B2r)P74R{) zl8D19$lqVR&e`Ve+b{L?eDHo!OG`^2wE&JUtp<1X>j`k>XoDi$WEE@xRCILE-&qB; z>$NX`aw_-u(jfC{tsU^%$45s%{2sYz=G$H6@@Uep_2XM&%XdEyNufcgjM^FFg87G+051f68jF66JU7xOI zDb%v(Su<0J^! zUhU2`S{oUO%3Fggtog?e6KU@KN+%hvv)gy+Nf5(}Ti61)oD=XO11}m6mY)9ld^H6! znH7}qL-)84z{etf8Rp83p4T981Ww=sY(c5XBft2bbgV_S7i=E&<33k^|-IWN570*x~5t9Re%%*TLmjkzPp7{LO|(P;vR@m3D*zC2`M8o22w(SU2{wzmWf zUSkw&Uk0dyN@U*9=rKjH>)AhOr0Z8%GKQF9r^%j)`*&`D( zvwnjhI4JA~Ji+gP#PO9J>VJ$tu}=7f6paA*69)$e4!~Y;0S`P3dd6kDHC~c8W&Bqi z#-H}CNhu=_;Dx>Tlfer{c(}mL|6wdW$EOBb#OA%HuD@fq zi32pGo7}X#Ug(v9ZhrNRoI*+BhjZ3)5-zgUIxD#pBXWh6xoc8I;howA4bh^LGxbj* zl3wa@N%4@ySI?k*T(9F4BueUcmwGN=huTh^?s)S-3_gz86lzF%YUOj1-LWqA=!Lb= z()m>@esAJ)doAa-c=cP zr<7i4MI$&_4I1AJ+#b%wn4XDNX_Re@I8DL(#eH%8(S1F$RD>BzSjQU|{L8{ozYn~qcc6piet@#k2<=R#z|ATDCOsigC021b9*iO~O!@d%_nIs^gB)|DW zPNkMvRe5^816F6p?*fTCAdEWGPS|(R5*f}5(Dc$yx?YP5Dh%EmI@rqYgJQ3>k-ti! zG-53*JZ{vRM83?#U+sbbBC=Mg#o?3vz_+Ff@zdR36=y>@$^-jn4;KTd z+Gc#mDwF1qj_ZavZ1ZdPR%PkP-7tcq<-CZb^YK@HV*yo%Zsi>U?eRr`ZfUQ`Vi=uO zd`fVnP_rFN&8!n0MaF2{^L$#oRt4Hh)h*jqdL?v_(yg2Qb%ZK>Qm%^$svm`vg3B>Z>H zSw}%tR;^_PM1|rQN3&Ia{(V+6gc}tsuUU zT{t-R$0u0$T@o+@n->jj39uqwTzdplzf^9Mr!{JlCoX$d$g=lVm zH0BU&rW$r~p^N6LEuu%{kt5NSKPh2d*8GTs@>iGYYMy7 zmo*z?mP-~oxqBE`G{MODJs9e5UdYmPSzE{@&5bHHJt$q0{|c~Wh;`JsrcJ`|C@N~q z&A#<$#5;sb9O{XdISX-8hFnLXyuWI1yz2K5a}j#m^L$*Z8<$Sql$dDdr=gOO@G@;^=JsJt;;k`a#hc4%};||=$$H`lMedK_S zh9%5^+~8&1JL#d(^6yeMjje&2={67TPrEPuN|z2WFr2C4f~rsCB%bJh+~7qR@R{v3 z_buyqydW6SPOV8G(Hx4Vf4`R}QuNj$%7u=Nr0T1fBF>icA(hGIrmYokB;7cv3Zqe~ zPP?N8eAxojiDm;%SDm$43`8*e;%H0B7BhblKW0qI zlGNs2OOi}tu5Fv21d3uXV>-DUDaN|@99r))_-Pn!&?Ads z(DK-AiqB?x*Ax<=Qky4NkPA~rq%VUC)Q$T6jlGQP20$m5hfAPBtq_uOw=TLz;Szc6l?DggHldB<%^4{O{<5RN&8!-I#=CVb0RjApf{pjVLZ;1 zX%=N>iGr#$Wl^{T%n52Aw8e~!t-o;5MicA2?K)P=rUh)zuif2LVW#g$szM5rWZ%Dj7VZiNh|`Aw6u7Z?S|_nO3E*VT`-=Bii8wJiuR@#nP5xx z(%(kY*#q6aC(HsVH%UZL*X-KS=o;*0XF&9QOqS6x6KaI~*6+AU*)U1pv{84ipkxEU zM@&DGNC9P68>W)^VU0tcpznACs#l&d?+PyYTj#xHI~edy_w-Ams)=6x%S$!1)F=Uk zNx51yqaqc>%!KcJCB{3lw9c$LrTNqCvhCAMMRQvk5<{>>vX#sBk2Clz4_Kmp;G0|F zZ$^Y1FCPy^$RAGAQ6cIBCi7GSUl7ztRDJ{pUw)9JEL2;5Z9bvY=-vqJff!%VAvuni`=y5nz!gfBZgN z0{T^NyYs&Js%2VrNJMt1`lc&?eC0|Y+OW~Q8UCI|y+)}nEH_p*kkpk0L8&g#{2ZyX zOp*8LLQm5jYx^8xCndeLiPQf2*ylpUf0ReVyLL?33geUtD!S;GXXT~@h1;{1It!LM zZQl@$If~fM$yw;t?h2-cH7l-%hCDCG(Kl?Jt*utrHA?M!JG@XKG)i^+)ipXgzv`)3NI2M3jd%B+Q;nKg5G~aE<>>n0hWdZ*`CY+n zeFT_VnXOeNvp zn6qBv;1H>mL=ta_l25Qz?&&>rL6=8pMABUfsUDH*V#zae*?=-oO{i0$sc&$;9Vc!@ z3fmDPrzrk;gTzF!h%_>%om-x1ej``%>+4^gj@pC3irC33WOKVS(Xo&;SX`5o_siha z7S7Ck|NB*5W`O0EVkE&WF^t=xlS$*-SX6V(Vc8xM>Xci5rumlBQCb`P#t@E2h> zQCZjPV`7=BWS0-6=5Zx?P9k1JGNE^#zPjfnQ00r4$G{b@(_-Z`vhrE3lwLwDLhaQF z6|%dXEJlafdkEl~+9(#v4D546S&c&~fnQcNXiS>FTUu{CBF4 zdD*FHJp;$tyTjazbCiAuEIoCpaSr=@r#{#=KC0tSli9S27}K}?f%QoRQzOIa&##OH zV$E7|?+dHD8Ko)^>+Y6DPiyWt4A+N@9P<}{r&!ulRi%BPf%JtsV)nLhI});405Y4d z^HT0)+~+V_?OGDAytS`^IcdUb0;u$Ptci7&Be=#Q9=3C<64eigP#LRlG;^5VE5#6h zoLjY;IY;ToNUi)kU?nfb=ruHGMQ3|<@I;P|dW2v<((Ec<=qr2kY|N6LoLP)<^m5Yrel%UGFRh#bytp`}18KtXlJ)Uvbe7_Z*lB?PEB71qP{)<7> zcKKvD&yv%~?--mNEg|u|?kY)>9p#?yC2uk1?TyJE4e`Fx?HHWt2tckJ^jeO3WQ7@S zKE<$HnwK%sM`9bh_I6dXch`7o`TRqN6AP6IqNlGl3Jdkl z9fzUyVGf=r7DD9nnUxlesJ=$(d7ddI)3us4<-Zrz%DLV1O_`>@KA0%Svc>Wbx&G#u zUQ?dLsd#R+t^@i7nkbK<35f#L?eN*g+tk!rnl~bbYd9o(|5k^Rts&TU&kvusUrBhc z8GQnsvQzHwSIu8DqRUCC=_N)+KJp|rJlJXdQcg-juQ1WZPj7YYMf%@m{gUK=L=Bg= zcT=%6-&#gD#P9F1Uq}qk|A&|op(HWHU@>pNR}Y-ia1J&UFx*PH?u^w(g7K81(^b~+ z3M5T@0HxIPZ-a5}r(zZwp)O4yp2_n|3B*2o9#m8|SGF^xQ;#3da{F7sfNFbNUteO0 zw|_=SaKCD)Iq9pv7j&&&0u;R3^cehyM%R<%#LPZwb%H8i$pHUA?DR$6ZAcUU_@Qm` zSxZ=9p>fIFQr0& zpIF)1vCz|Js+RnL2Ifr9f4}lw0cye#ICRPBLp8%3^5x4Vf(0KWKY8@K@#Y_KOUMu) zL%-w$4mYR6hJ}QL;sG{Sb8&Swj`*KX@e^t(gTwWBF->rAbo9+gE)M5U81!mrxBwRO zAl!_kRu1fU1PPIygF{AGblwf#Pxo=;z}IneM_mb+YV^Y z*tiISWDP1;bN|DUP#!b0vRaJhKfaw}b^^{5ppbHLaakTMxBw!hH~wLw~tjK%+V@AQj&fc%2rKMHzW{S47 z0#LzA7lGUegj*j#kt;LP-D_ZAa0w>@atl&Udyy4vS1p*nkg}6p8rj>`-ku3mAEe&8 z*d6oRAeseP=-2PxzYh-XR7|;j7E8OrBw*^4kUq}n`PMf=!0nf5!o1{kts>kq{r&v` zcLVUp7GNV#I}Y(xQR&AqFfhQp2M~9W&qsyj6#HbzP^6NE6_3K}bq7W8P_c+HXf;6) zQc+lF)SoPz1I>k`1ttes7jFvaUjb3{VWB(v63>GH0gyV%EvvP> z{g3^I{JKPk8NiNlt%a|f#{}VZrlTi4iJJKhl*l>!r(WyG@GowCEdlj1qspiH+#x_5 zlAlkzvm$P$TO@+I&HVkFiIekGE{v87=hLU`*GzQr2zXq7+xTEt9w0o2DBqE zr~}sWC9QjMumK`tzX{4xI~$uAU@w3i2ITm1*8o7izu5m#_JL`dAe4*h#d@Oe&j)W` z%CtcR31C0di-f6MRVEHv!J^fdKjDG~dMW$N#|nvh28t*=(%Oe7CaM>AINZ-&E-_VE z;QnBl_r|ghmYb_D(>xur?OaWwEKO5&aBvVR@%)d*0PpI&y!LYEKM_0UV&1jC)7o~; zP$o?*TwDy6T$opSYU)sdcEW&!{Sqt`inG#^l37c(Fk{Bf+2 zOWy&8-P+r8t=TE{0&wuwojY1p)}9~KkhB1#hSiUSg7Q-Q&15AnbtZ=>>gJ^&F$H6% z79_5Vuuek=D8GV4cNJm`j5O!rP$efP@9Fz*J7PT}EPDbr%S7O@U1z^?pJ ztjwZ?e({%_>IOuxmtYX}z<`{qzOSmHb4oL!C*SZmFw|0Y3Qa#K`qC)&0jmz}!(PbKn(69ZzANAItDgO9*AD#;CB~!S)<6(G zq;3>}3k9U$U{+R^glI}`IYbuec&;SlH*el>bJxM;Zyovi$r$aaVBs~@Kh{=LQNb|E z2#X*9pw}4PekfZE%+gJ$|C)u+>7OJ@(MC2nZZ!cv+}mFI*wcwC{_#cIS$1 z_2s-P7b}%s{sFQ4n?Fto*xmoZBm2hz>X66T;X0Ne=usROgPCP8Zla^$$rjSfthQj) z$QISq)Nsm3++ST^ml80;;JqDEOW1w3Fy-!`ip_id?AJHLjnzw|=H710go~JQCRnQQ zvy^bGi<(+JM$GEt@V+x(3z#qhn zse#~IxEJ2Os@3F8<}3h@!7{_r#^!U}Lx?ivg@wRQ3WF&S=;mPu(gtWkq*O1uzdZxY zFgBG!`@r@ENj|YG=C|l@Pe<&h`ghwfiJD=~b(;W;9SI?i=XB^DA6FH5RFnkhIz%%? z_Xa)Kc1e02q4xInM(zu}ai|mdswF~)>PcXNoeT=&;m4!V-hY1vsE~PqHW(T1m%>gm z|6&AEs|ST5xX)i&3EUX2cRO?96M~KoASfU{@DLHPf-R9okxnacj+d$$zi9z+LR&Mt8Xj@;eSf#b2V+jNa)_8*NIKg=YPA!M!Aw)dE*&uxOnf3L0 zxLXi{BO*R*R?1Q8X>Pt*V+n&|fVr%5+`2(oczp7-3mSw#^$E}O9wK7n`jfdlsBt$d z_;Lwxa9VRC{yu=khwp;#%09e7NW?ADlVPf8V`U{98$E=I2G>n@yYcPz9HnM8^R_%h zT^GS!c7yIHnEi1%nMMhqZfLWpb7J}9@#zy5ot8#^Jb0pjiBPUal{Ii$V6hH_93K@` zudq3gN+3@uEi2mt!S~(!kKP^4Sl&fYhh7yJqr#=%i2;5=OW*cD=K=IDA;@yzslaFn z)a;RbP4%KnbMM}m=X4*2@-=H-IPc%jS?Eh3)JEO&y&aqn{R!BLw{P8gg$-dRJuNLf z^(^#BLaWmE`R+^CoS?Gko_ws{2S1|5?zmq{Bbmxj`skXnb*99eKR} zjsm|wCMxP{IJQzzwpdiHKN7X~$ZE!)Tc5w*dh@=d*O)RDe~T;VPi5KFC%B`SOY&-K zUmScZgZbs66BZ_I9kA;7_zzeL(4+-_+;dPae3{Rwh81XdW|?-iCv5VP`ZYb*M@mLDv=A|Ex$*l`;CB=)vic zO=-4DNRyS7Rg*LhqoYjgcJGXBL#H6BsokbGq|UF zyky=0HiW8(cOiQo;|y~ zERv71pO7%Akc?F{G$tcxVruMG;)y=?kI=+?CLG;gpM5F?Ck|{zwX5flJU9IcL7-t0 zn#3dmm}0r!CX3E~I?CO_pf=%oeadFc_5qG^yOoKmTAOhVrExr#T=(N$N@KytkK^9G zyY{RnhTH+}tz9L2gy+qAY;jM|de*%qJKzO%EH=SE|-`dylw4iK{x z)jTBWqIjf_mxnVdOv|Wdn0?=tT7+{N22Qa2{C-Wc$Nj>{`y)|eg7hXw0!opj{QxjB*Kr`97Uiz=Jc>A$_Mdk#ViK3 zRYp+gYt%R?ZYk=H7HED(QYe^KD$sJ()t&tmfD6g#;`Y3FRMuq&mGMreVvc&L*^*Mp zpOy}JP{pBW_~yXUzmLm^L1YF|bkuxP=yesvKD=w_3t0un%91}cpofwX9W>}!=#9=B zt1T=ntaEb)kx(B$lU}9_H0>h5FV`VU3y2KZS zDzWfiuC)@9lHw6mEKc2H;@EV)+~wvgO1o(LPsOqP8u>pNbc722`^N6U9u&jzL>dS3 zo$i3n{rwHO_i}0Y01Dca{QmvQ>iE~s8chy|V#+AOt$f9OvnX^74ASst%K5cyum3T~ z+nJowwoifWB9!bKtDNq_P8tuxbF6!QRNMJQL@3oABexXvsF!kCogO~C8@qSl{;4nY zsko0ebmn$(u-~Jc>y7&{@QZi6Sn3droL*~a;O~QP-M|2`^62u_PV3ixSAa_*hQs4B z9993mex@6wCuL^+x#FW1pUI><5*l8@WTrp<2F1672gC*q4E{i_5vqB-ZhmT+zqdRT zk+TooHgFh(#FeyuBWGr2HjR)dW^!dUUmbOS7hD-EO?1f2$`E1vF*+CxcIxqb7q+~- zym4SfRHfF%3Pr3xm8m)*NfOQm|0y)K}sqhf(TVB z85x;Ka2mS~nmIH;nwjOMqd06~0=t1MvrqP04vpv)Fu$o-U{sT>ck#Z(AdB zPu}+PZ<_M4qLDQ@K0RU@5M{{m48W_KN77((uQ$k3i$Zw#5VRXwXLpeGBcU+C&cVZd zB=T_I?GOb68{3Osq5M&HPiSkh=E(zGT-*T(SMD?9l~L__+pN-*6qwzjq7qfQ2rI|w zc&qQmLI--n4ec8HGKulxDDS|)ddu@z4Xo2aB<%7A%jw$Pz18T!!%}LEM*%JNgp&<) zG#oC6!7u+F6UN;|)E^GCh=}DxR1w_0da);lur%;J8c^T?hoSDXtnMz!TQh}l0mjeU zswP6NUGD;obYE~;Cd)0xFWY*7=dX1-lGDg8DB!X0UhGTY&r!-@HQYB#O#|Uvgyv(_ zwcw;?nYOX9mX7hGp{&n?8IpEZSzPv$j#>8y)Q2W3MbXD|v4RKG7J4AGV@V|9aJssN zEG!$Df|ikqnR$qq=+cD@go6X6S@Nj;N?B@lGaiUy2gGmcT@D41F{u!vRmV@gKb=8 z-HJ5c=<@eCq@ZDQ5>+V^7fHW=htC!JaSYd&5%$u};S0s?j|)XLQUac?=n*GK45087 zo_^DO8M3%s4ilyFzF0GX==Q~}99-_i*Udr?y||+o%$H|8@8yhUzHsi<*g#&%kci)f zj2CL+=%^@(Smvro!ypUI8VnjGv!3cb9eS#+66KAi{rw!J+{IscIWUwGZsiU#0kQh; z!y;V}iQ26U%TGF;9V4>>gCQvq^TK9s^L3hdxVOLm>OfhJ^PmAF5SU%hR7xGce?31t zb`lg2DBUvhb9X-5Zy(k*HxI~k7--p=?~I(9&Y6?8lRvmf?Is{FU!c?QP&pckF1d%@ zogk}IofU2T@e{JJ|07DQMV?o`PaHN1N5@OlS?%9URN0KKE7!mb7Nox`DC|z{35DYZ zdT3Typ3(+ZHIC$kYi+Ja0M_}iEhndLmP>E( z*7{qH;4{wrnt0!i3n2gtP_Bsz@G9KUjc^gxQKyfjFD^;Uq9jcyH#pshVv$eHPkq@L zlDc-jzK@D}_B}hCnyN-YqsT>7=KD#jAJ+OrS&0?8!_`*|yvv~b95ZY{k5a34_FK5L zPJIy<2PsIa<;{9QQzMEuMbFaGIQ8P$NfQ4Z00pqMO-Hg>EPp@w@4qL1&&Q}}H`Hsi zz3~X)ZlADrHTq|o&qA{%90RBR>9~qwrW-GC0(vmppPq6br@$q%02%)++?<~K@ri+M`28Is>nPuGxRw3 zIk?~w6E}VTE_0~Q%si7|j}=48DVZAfe_L5siE-+XUqzF*AfJSPFn*d@nN!909wRCq zW^+rU$y&(}<&AGf#)zMtkd!+7K0TfI@&U?@^gkPJPAp*EDEdQkKEw2~vsG6&W$U3; z`V4d8Bcyv*pDYlTZLN>4HiQz2_}(n2V~X{$clG%bvN^wZ?onTryIY7czLLpNhfkyY-nW1WI@ry!0L}a&`X#q6tvJO5w zwwrzv3X%kndio7QG{b{VhoB(ok=(7IP$ox7UdSo=ly#fHJhVGA#AczJfX%2dnC$KT za@<%lRDv!S1WR*s&r(afB57wLI%b}Bc{KdW#-w)ITPKO9F&3UM`+HGoR;t~esBs?8 zd7I9zO;7Js-aW@9m8 zvIJ%lb6t@IpuYr9hW2pk$jwoDdir1vUKgo6iD*VhhENwrVT`AJo>ued!9^cifm)T$ z+5`(6=ks04kDj}INKZEq5NLVl=6Z0rMro$(`1^Mw;J-(Zy9YOZ1kohk9E0rB1`0aEwf6hEpWXjSQT-oDU7T(84CzBMqsTaAt zyeyf(YPS^nREa%L$p4XI&#)c5&`kT@$+sXg<`==nA}}y9`2%r`k;-~2*^`104{xyG z;u^+}de<1pD?w5CO*$&-sh^;F5Gxd;6NPS?ctIc%IgWebtTicMH=6BQdkh7*@I>Zh z^`)$^+}2oSY!rqu)2UW#P<^`NkIQfhqNlQzp*U98PXi-5e;`|Uus#(uEFNJU^+K1- zf~nMWMK5?h{ITFT=GXu9Svi*UjAF)6bbRO zXV1RB*Wm`)^4k3PY}W!^R6K{P5a2YalDR7N_mLg471QaDWNyW=E{^%}r5 zKhu#~*;z6bD#?Xj{oyjx3P5$ZoOUz$y#l>8uxT_b0kO$!Z+F<30nl zpD*bhtO*+J#u>cx5QnO)GtGJ)wb@Iv%9@>wEM2{VfJUvn57~xt3mToaAkISR==ITWyAt(-y!d~z=w#+*M)A`Ist33?o~mafe|l%B!Vnhyjjw6(Iotd+D(vn1W=HfRzH&dOXTe*R#PsJDPLk@beBqv2X!#CY`xe) z5?x$Tak0CEUJnKbw+6?H^;gDdlGmE8}p$%V1gZtWQOAsrH&e|A5Q~9 z5#!2=NsE7xa-Jd__)M+Ra@3-sSvZjB?(VO`>o6`k-b2@Q?KprSKK^I5t&o@}1rj-V zXX0EwblkMujr(%mcPh@ow))fkH$dg+Z9!A+zrXK4=7fHi`Eu{g3U{7@e%&?#9;;49 zXZyKS>)TrO_XTpG0{@vJ+&5lg&`Hauz+u$>{c(Lwu&$Hy8%t~Je8n266;^_FlY_ON zD=Rh4Z#LXYsi>%&wo^sxrp=XpM!IESg$0oO8kXwQ{D~Ta43o z)f+>dHAnFKc!~4#xvm9T4VUvt_oL!8G4)FTyv$VT&Gxwe8Vp}H?OWH3@@d%|$&2}g z=PDKd!ue!mjVVJKfPMRo5xefFBH=&+_r2wL*le;w#ur^{WoBNl!b=uhtar%XZ^)*=7pIC>h0+`bfpq z{N7Gr)K}ZXWx)ul@l7Eie$m8MT!Koi}sOU`;^hQs8PdQoC%@`$UpOyoO(3Id;dPJp3d&bxkhl&pwj=)I*m z*znMuQUN_Wb4emJQw{EPSoT&{{lmkso6|Bf$caaRcg4@av@; z4K1wnX@G-)Dh*)dcG`WJ%VqON0`qcT@WjMP^1^X%Kqk~P8B?i{?{9XG34)8~F8aYu zOB7CrwQ7eAg6_$ch0!eWQ8>6pv*Zt^XEWFa_t*DKf8=vx5v}ISSFFQ5dK@xyRlA-% z@ct#0z^<93BZyDtQQLzSzZI5NP~g7Nm=c;M_SzV(Si2S>nEIXM0U?q`-9Wuh0&M?9wc_~U|blCT)h#1rw~QTS1;p95AYzB`(lIV6S6OPUS5AJ=}A zBW?BVuM3(4<(*n;vI7=oXGx)%6?(7wMv~qE0e5(Lxk{1FbBkZBeNp{D)jDpW!AXpw z>|mAUzjAL{vysm;_%X@#(^K|R>+tNcMemT5mZFd0`whNzp8$Z7A-GHIetrYG=7h~# zeX)f}<5a|@;@SEuMNen*1${A42{8nFAT3)T%PK)}*Um;Vsj*jl`;dZreHs5TJNWFk zWZ3OdZs^0oGUU6=~mg+XI?GAiQZqK z{lXnJ!Pa87UumhbI~L@@n8wbJQ_g#%z&Z=9cd$AB*;HK2>@D=U|yn;{SfJmyr&SDOn3 zPNQjgCiupS7cU^dMzNZ!0k<6DMqCk2<8Kl&OsoI__yX2`AOW|pUWtGY8iJJ!(-&wT z3ng3^adbR{t`(HVC#LJeIinENT2LK}EI>FIT$;?v(1saG3{MrPaRDTa1~=DIlr@3f zXD{en;2R*?=r|P0w}%0VL0qA29k4i(y3K`tun(gOV;(; zFMeq4i<0j5{9*8En}Bc^?e?!qM9k{v777hoKLN|@q(wSL(KDeMOa*LiqNPP4)@UrV zzc;RaY#cV~P{EW;oZbAb+euMN57qIoutp#XF(7MK=~V4HG`BBaxT0w@lHI9b2AuK2 zIMqj`WZ+!6X!KQL!No<^p)!WSVaBO%`Mf%LmzjQ7tzhzJV{FD=zx>H~}i?}+9^E$9Ruwo{>X z0}r)y@pC0P4M8VX0AQi->bCiQ$qB>h=5iEgy!TD0@GY{54$y zGSj;c2?Rc^tgW3vT3q{f2a85cL6DqO>HLlE>yR=Sd(`ZOjM+e38xQHEj>gs${uw&m z6&7&h7fH`#I%1}ieg~UQ=G0?C#Of~lK zBDpWgsPAFL(|Ze><2%@?ZGEvUcs|Pu?jx;BRKqEO&#cVv6)Jozm=+cDl@Zv9!DsLecoX5cuqR{`R&Bc+gqvt^NeEGVQV_ZF^^jpLq}(62Tq| zlr`ScKgmWAeZnv9?JfUY=w16E9E9I!3n)}bn(ugYUwQ!OEHKb+xJu~GG#%|+_85(f z|)yhDkNmJ z_0BQ1(@-k*bF0ipAlgV1#|Al&<@No&&4IBC`$PxK2QIPw~UehNtzb>KL3f&9}Xr; zWlp_+c}7kJ*@DFu=@Zz=6=h|D4~V&~sZTE=n|y=n)%TdcG*A4V7(jMc(cE}4SA*S3zM?Ed`YPIyyrcv zT?l$L_Hh6RjO5QN)vAOj(`kdn4S&%m_#1amV%_kX*ft4Pu*O4$z zw3oE*Ez3@X0t1BtqcAqO9C}wL?3R6n4Try!0fLhS^7<7e8edF0T8Dzxo;-uDKRw{N zmN!#LZElz|k~f;G6`)(Ew?#a6oBhbz{G0WRMO32QVEz)wFzeA z*U0zW+|I89mu)1<6+hm2$ZMEP%KG?pD$t4$RvmWR_N;sSZ1{)s_iEX;5Ex1sYij>A4vb8u~GkldVW;tD)=r$FAj8{FzH zD=Z*zi3d{(ck8vX!rnUqVU6`|$aKkGY*VVsNkZ#9;NMU(hW>$WOL+5P)XJCLRA406 zlz|~LvjWnA%Yri43N(iZ_&`%+Wn_2>!b8!7zyZluh(;*uQ2by7*XP*$2^s8Emw(l9q7A@+DIaMBTD8(l zP-e`ehwuATR6yr;9?ZjTy>3`ULrt9n0!lw|O%07g5)rk2@yv$*NK|H$K?|8&L%`$a zFG;cH(b9RZA=LfV>Bo){b{fwxlK6#wQG}FpEjV^~CEji{l8hhtr`?8|@A%xcy!Yc^ z=IN>{oJI>K2zHCVgXI+dbi6K6GC_P|5_#`^KQygdS{&68-EpGuoqpW*D!j)4|a1QXC3yvMm#{fBt;BHUV-+ zV8Pnu3uj=Vgt+O*LRUOA%C}a;{;YGxJ~Gph{@G~)lcM%BL9>F8j=Bef$TUQdY;QO{ z;{KRh1wnSks6>bS$(Uf7w+=ra-~Pr_(AR3vSQW2y+BH4w8YH}fJ$h)R%QaCh&Z%lX zD}>x4OZI?}WAV4l@tby&zt3Xv;f_~>$tpN!gP_W;wtsTFP0O2-{z;`7$Z63eR^whap#6^m#mWbf$jME{Nm_pSY17NCEI=eT|0}Vgs6!|0y-CCk${kW^CSIqiPglAek+NMzv=3i_ zVPsfZWF-5m*RM#2fvLvaEx`qE` zxc(mmP5-ho#vjUqSz#9)9vwj!{tCu=D|Mqa2weK5*f98TP5FrpEM?1Oo73^{d7Y-rfjy zBbuc~Az);@+11k83J6d>?0u-C+vB-wU;-Lw|3S@|c7sN}JXbL%VgMNEXG`<*;VM0l zGJQJ-gKMEfRk<@Ll6e)uMpstT4N3|MEHpIY(;GVTzF>ghsrPkj7+9XGhdUH}EIkUa zY$_OT!e#R7tV~b8HZ@hRw0zwSw9qg9S@>G^fMmM7-O{rAQgHAJ`>a06Bo; zukwK2uor(W6-0S_Vqe2SX&Vk9p46CT^5`q~Lk%%-4`|wh?tbt(qLG%C9rW3GfIhm2#ulE;Y>v zSm3k5XuBxGpnc9BM9A|3XeWq8GC!cWgj$!5^yZA3#-Eu|HheJ?N{Ge)><0@NF&*0`VYs*VZ&Bh9+A)g4# zXVY!F@9gXh`X@LE;7F8<1!vW2mm_PJRvf$8He?o4c)dTHJnw3_Pe6GT))QK`<@$D?En7A+-Q(LOv5PNaea2(|dqY z*V)lAacUEQt+#w~Ph!Booxb{k@+9~ugRrdi2tK&w52Hc1O1;ZlW@k8etRE+nfy8x} z-2U6d1TObfI*f4t(LV&&o-AIX*Fj8rpZ2}rq80|cpvcKr2(a>OtgZP-fK3En7ff_? zl3wA<9I1&6-fMrVDEevt75}}s@!7-*MgW>Y`vsiDpB7sh8+q-f2hzlYa9OChxbTTY zKuD0t+9LW5^9ehq8^ib-lnWy{%5T6126QK4aJ1IJ%Z z9X5&CRl(vTIJIH15EV8Hz^1msY|s1f&Uy^|i9g-v#r1;@T;~Hg9jX67e)uTIVRZ~O zLk5~#hI5f|jBIV0L&aLlUz4p9#`3sp*^_|@soe@Vs7-?F7+AG~`p_L%kO578reJ5^ zl#!Vo&@#iaM{^U1I~ESa_aUH=Nxa7T{wMa(rv_4Q(@QXyBV<@Ah85YS<+48JW3B~d zDy))K5Ew(EQF%r}`dCi6?h$-1!JALdkXZL8__x4{1(a2#+)S01+qyye!hEh=y~f@gxNOkZ{;IS} z0W`3QZhxlro?S81F)|7#bdM;AI8u+oL5>>ayOE~`o-(k!P#;61%S$T%?gz%YkX1vP z9#8;&HEh$UoYgfoU5YtU=9{3OcJaO0)Y%coSrNQBmbEG|srJ$o6~$1R9{P^0o)`;y z2U&gb;V&aL?EXytut}_?;DgxmXo3O}5s`@0mhufN`g*XpodZ2G*lL4qaue|FDDN(( z5TwuYqw4xl{@hfKJayC;6M~0(gYQsNZh>zOG~2nr-O< z?7FXRc2d%N9@NTv!&Nqh%y3dIr!UXntk2DPu(t=HID=Dbdv~{l%ibxx zbyQ?LJiG;a)%ql!NO|wzhA1;-0sZ!2l zQn3_dR#8~GFV5RJFu~Q@ho|G)+snEoJ%^7^O)XOA2shtQ^7=VYhBsG}$n!61By zy0;=tW&0CSJJ5hW>1h-^19hBUqK*NL*6h1$3bjOGk9c@^sus5NXRT992bj-gNLiCT zAt%yNx`z<5GMqzh_X6z)oSKuZjnn+aQ(%G(fjUV7jF_;V?yQ;rJ;TEY(k2GWbTmvs zc5zOn^ZJ(JOrO_hMD{Pin_Vk#Lf?Nxe{B!~0Nj`WLACC;2P7mZ;3!9|5)Hm)ppHPj zL$oE(0V^93k;lIN?T&$r%=Zts@3jc;yCKYbx)T^N&Ncl+uejp_a`StT)o{;#!?2DrZK1t=U$L|Ym$p#3UE<}`irJ)bj}A7bux&UH>tTcm z9xkrfHwyTnrR{~Lp?qsQ6LhqAO)w+GS%3LkzI#Qma-j%{X25Ye)Ardgtz0!5+%&mv zg5%x+^xb%J`w^a(L01)9oSq>(B#a6an4%rb#wSnsbXXhU4t}Lv0qagBX2CSFLWm9t5gaFVeRmFXEG*;+Bo^bOXbsS!obd ztiYINZ4;h{YL;8iIW#sl^86$?Z$GYRWC(53XtUzA$3a1P_g(T7r#>=r6tXEGqAxpD z+N}W=0;q_OFOpoEAnQ&TK9fN=*m7DuyczviDh9e?6mpc1y(B~sY{2y2BNJ5>VyqAJ z$yh-uJ@hHG9Vz4?@vT@^b6mM|C=)s`^T8aEHX7a@{5nR!(yzLj844r_Gi=WKUJ6*# zZeIbvfd{#?zOI!jf{Fp-h3_S+Grs`Ia;|XPaVs~pAnoq#pub_IzN&{R8JiUM#3&8Wr0iC(V*ctd*CMk|ltiScnDhfuZ>J(h$SUOhppyz;v z3FjkkPqx>`m!BbYDFV+7**jn|a0yjxijeSnk5xk=-yRl{l+q(IhMC~{w@ww4uXjPd z*rZg59U1yg&%yv0J22;{GYQhZd~>+RN2aTNWL4hpcy4(iS$!z#*Nz-ZpU7!z8QO#E z^7U&OJ)!7r0G;uZow+4CPZ`9J=))$4ki#F#khNx4Rd?~g%6p87398GN##x8r_En=e z9S_>6Phu=2Vq#**Gq`7ha={7meHikzBkZD<-!XER4ouYKnb6L>yENE8%vJ|ZY^`bS zgH|^TJHxV|H;Tn%=yEm=tbUBaVNj_PsSEFa0c(?3cBp&8`7YbEp0x9idDSZROn7); zFM>ThkAnDVqhfIU8m#ASmp9|LB<% z-r|a?s#;X^qt_tlK);}WUjUsNL^y>$nW?9}=Y5Gu=d+z6icrPhN0uiWfURc(z!xe# zx67dnEeGn<58B8vx0C&zkrCD>PhJ7g2`!?shUfs|QUqCwEe(MAAO?lZwP^2MgA4#- ziFqy^aSt)CBMqcM%H7F&2xuULHgf=(2BcG&Oe`EgZG|A(7sp9nZ)egS#Q>qE!EPmD z5?EhbTVMq}Pz<3GYR~rYARHoz;(t4rw_LFRTV)`pEtOE!&(9KNZ*MOWP8dZGXlABA z57AqRjo|AP9p8x^xH0+TYnsQZ%Bko zd}Sptk&u#+qiY-@y7g0mhX`tsqNvpvN4KCM zZVCBn5FjoyRVYkbI*mxT9}8qQNjE-z2QTtxy{kIDhr%A+ct}|v>=-~$f-AQt53Zah9bG|td&A1JQ)B%5S0e7k=gt>f@+ywE$euAq8`7U%d<;)Y zXt?9$hMHklT9*5aCUu*_U(qAMQ}Pu*UvXMwBTA{Kf~U~{bo9dt0K{Y)R@~-hVM$3z zMMV(wzec`-%@5cxGXsMvK*!+J_-_{}lM}~4w`KHolayp#NG{-eF#Vny z+PM2D1e#taGK0Dnd_Jv!JcC-68q3nkYHNQVs@a;WW)1;?EV1LF`c=HIdcuMzXhJ7p z>7S31>G!_fIb=%ReuYpB<^|3`{>dZS+S3u>A3grx_bPjwmT_`1 zt;pk!9CWtvIkB39!&;RFDKRP-E#^f0f6-byoW+%;#TMbreg+0!LVg8oq3amvZV`dy zn)ZRAq0)9ER++Y*D=dIa%FEr)5f1|&9X&_oK2s6GZ4bS|b~Cbr%5}nx z4X22xD_qSxR8(1+JSAGxvfYqqT2hB@s`mLm2U(*_w~xR7F#!%HoMX8YbUkuNG2e&# zQO_Cwr>T;{7@7}_OpILaAK^nwkIKG0qZU~@0*fKzbC%9mPflIgpq0}ape)nVX6XJ0 zdISZU{jRo(h&BF%uNHFgB@MAf8$sj`AG{ zB-Fr$0sr#C?eq{RHaNpIs%^8tZq`?PzPt?BI7n-fCZO=R>>Rd9myG$dv_wf8o(^)q zjpb!ENYkN?f!OibrUm$k^0Ycy1b$3+H|6n(uoqlNdWM|uxLApdr8bs;t zP*MdXrKCZ+8>Ca|knWaAcXypJ_Y(L2JSQJs`dMqj{KY-$y1oN=#gT6Iz(1hbz0G-v z(X1=(V@*xXMrUskhKt`1LD*ybc0$!)3${{H0wPkW+ba zdCEclRSw(rNPyv>bn`sS_bD`q6Ce!*0>7xShV+}Goke}dBRRu5=pw-WGVjFcg$2*X zxMlO_Qqk;>A-95n(OPT^8Nd*2M<`^QURIEJblqm(Q6iXqtk)bsUh3SCjO;)&GvCC( zfPTx{)vN4MUF3f%T)M9AfhQer!l}M0cdX#U;M4`7k+XuYL>hAM9Pi8&-dWk#a6jw& z79n8}9SHD*Z-+7U8yLAsPnw+|(elt=gyvAQ6vPZOZEa@FdX)Pjo-?>%tpony=}=O` zL{9j!XR{PjXplP!_N8H1k%w$6>56Xalq8qpQ?Oq3fp`uz@qNu|sGHu*!Q%$xkPn3f zi+BY>lI`awyVB*Uw5|p)8v`XNw9&4R6GeW5)H7JH(IWuk@Lnq=%GV{n%bw3~-4b^8 z@Wfn1ilG9A$$KEMa@F=e)Hr*Ji}7R<%7$1@8#GD&6v8`q((EVkmPMWhlu%?xaoS`c zpAmPr8!|Hg+z=W=|Hb!BlodL8o>|h|oI}ceuDURoWQD_|ph+daq&pwJRl^eW|Ac<0 zA-J)yKidT?Uou8-|AEDKLq%B`7}gjKjeev)SL}eZ03n~;7I#~dM1+KIri|Su=^ZY( z1x*bNy*){$D%eF9>B5E%DP_59}Mpvr=NlLkj=rR=!%t{)xR^BIN8NLlLyTzVJ6@D_pm0iK(QVCAu`zWEifU# zdh7GF`ycIsA&tTtH!jC>6aAi^cICoR^2QLs_g_TL&j}B_zrKa;^PdNzJGUNAvsq;o z6$)d1Y&Y{%_@bT(5E7Al)7Hl5Lih?5q1%PjBbGzgl$MZYyI8Pa0^)g~1cgX%SJ!j> zG|erLiFt^+#5dskBlG#k%i#bT8izR%vNywi^DqT0AaID_-e3|nmI}NM zD=XhJs;VM^GHu!N-*qKt?0OVe`rv~a0`>9}%E}Hwk^1G!7m(6Jyyhn~CUwzeGs-R6T1lezf4pG|(#40}lY z5pwp@{*_uXCV9N+aImRmZvF`Su?4l}!v^`_we;W|iVPewm0+qONw?qFglrTN`FFK* z|1)Lx^nwMmpPnlmsaL+b%MrJO$K@%E=CxkYbL8%pBqc4j#A)y_KuaM_`Vt4_7I>|a zQh8(^aB`}&qshoNyr;O&&6+uMMfTQ^h}$B6t>-N`Xf>%ob1&@qaF92H?%AyKyR$T& zYHT_!p~q@OmYJeo>f?XT@e2sx?F)@4mql7+liP-=&^lahu0?%7s$(D$uuD1Bur!3W zCgwSa#gqmEMF6;y!la_H-TCQTg@ls}38f}$oo zX+hB6cZ1Yg4A`15M*!_9UTYy(wqSXTLwsQ!`w zv|*GXSVPwu4jt3cVn%A}IT*FTd>~X+s3E3RCVw2TDZ@iUo>wX<)R5MjtuCl~0dG%Y zg+{>STlr$|P#iYbz%bH>%d<*A1Tw~#DjB8g;>+h=w%37wlFqJl)sKZ=xWBU}BS-Q; zW}R;Jl3OuCpcHNu6O5vjT42Oj&-e5*2C4T~a!5>|?%Lno#lyba6vJ!~6u_RG8tuJJ z^B7QXIMcfKV*pUMl=bPAB1zh%W7$G|nUy$1_5EU|HJ=AaWlnP!49jF-P>|dp9>(;g z@)!=pG&#rgZvo~-n$-c1Fzca$X}I$0(NCa_g80)dci}6tLPmWI{`TqHWc3$aq!f*< zjH290H~(1oH2seYVM|<;JS8Jf6-CjL9xM6aF?^0g%fFWbog6HCXiUMdEDL2fDOyzY zT{u?RTbN5@y(DLbtHiBKaohf2BmUbrQrV{s$=Ghn(5m4p0yr29K#j)BccHBWMhG6$ zG4{R>{edNLj9^nie&YF0TW9C(O;af6v^^vP#zV)dl~hzTmtj-|=aOh?y?HT2KlnWY zk)P|)ZlR!|1*s$N7vBMLEdZqQbm~hGjH-mMXJlu8(S#+?l)}E@@J->N4tz-w1*Ksa zqrW!JEPR9m)Xi5Nd+uO(tyXBB@^*Jn2zdw7%cGHoLuQ7|2#LJt`Ax_z=wP3N5XHA)+C)mOG@%$Sr1RpOMQ)^Lj1z zXA-;=t&dy4S@By5ZxfGy$-E0611ZcvPfsK`tu&7l`e4=pp-^TEg6j~)k+eZRJnM?- zvey);dS)QOg$!Cu6y;O*mvGnQg=FaQ0t4WxiD^$#3+SDQ*i0YXCn<$Ugiv`0nJx^2 zA?LaOXC!tiPQ-g+W`KH@NHqL~c_j|*(t3D*&w7`g%869={;$(bj&z>g&h46E@DK!K zk!#@4viyo-yPf}#!r`OyM+lR!OGYWUw8jdmO)YlHC9cQWpJ>%L7zO_I|uL$5P# znBZl>08>;H1+jwMHI$_!bMI&xawdRG0I|p#>rag*d!-2wIYr1c9o{bpCO?n>Cc}X& zI?Pk$%Bm_j0M`(RprJdZe+E%CBM%90PPH(6TwwbRkeNR}Nq#l<|7G$}P>9n5xaRMV z!R6@-y$c1!|E6F^mI4CEpMe8K0xv(Ow>`8O@OI8t3%y)BqB(cS7rr56>uw5rNIffP zHiSQ0I5IL4a6|BDkBp={e!Ngt$UGs>6zYTR(+o*B(xZhXNv4bJ_UGzDKYKWtbeGnq ztfoc`^_aP4DM(022nbArqPH|0T>97k2z4mLV=;I2;e=UUrrh{h7%-P?sphb@gXL&% z#rG zcSo&|_|fXv{rgc)GB-M_6B`yKm&0xn4_&}Y;0lSO8nET8_PQ8XpRg8KRl9qjirKwc zXLY(#$8)7oo!#z4h<_`Jq(Pj0Z{e9*bhX2A%f-#>`7vLknq|ypf_P(LUo)xTXhR=pa`2-g_7ktD zPURp|!S{g%!3zAGC^n|aasw**GQ0iHaR5=vbv-W1UC~yr46x`u>Zq_g8BJmc>tHrh zs($r$+mv)^veY)-WZQ6Bcn|w;?_*(o!^6LW@Sye_afq`^R17M42)?s>jG6t)%iXSA zr`)Ov8EV_Vy>8eL72cVdjaSlbPpM08du49cjU`i{K85%+VsCA1zCY0K-ewnFj;oZD zV01o_Efve|c?kNXan8QpLAD{Q1ziuO(^N^4oh6+QDb$m;0Ic};XQu?55F;i$4BK-I zGryJY_O7*aQB+k~Pxaj%94UP374bghl0a&BcqB(iW>0g~w*dZ^q`c;9zq-3|2u6m( zp3gcR`4<&2d~Sc+onPm`FTit)>?w_dpPHWz0|p5z%kM*+i%uVawTMReIp4l{LwjEa z7*nPi>$=(Ho*LPfb9BpU@BMSxYNh)bs!`qqk*hdi2t1dF(ZUbTr$(5!b|@!SLlz*@1>@hjW=%0(Ut|?#3|u*} z9(p|~QfI;g$GPCQ2Q=-KcKb)3`Bu9-yYg9gh_>kTn2Z)P)0KtE-LJabYz-cUWKbYd zOVjY|>@>>l%XMPHsAhb)zqqt4_tL)jdi!~MpB<8az0eQRnmor&O-#(rO#H^gKUzpU z*a&hob&f&3x*o-cS1grgO{co6OgtvUGTxTtmbhxY&;2-^%mHwrZ_f-#ISMmvt8~3* zYeXDzXkN7cs&PJi&@K`{pA_I5QQ&y8@!GayzDo*U`8zslS@w!Bl0bJk`7?5da5F6* zwLHzAb0fi;{v{@y90rDuawJ1TB=lZ>dn6t0d^GdZO~wgudz`kbxpPbKJb3J_-(hxC zA*3M~KEzWSvt1qfP^#b<%<^Exhn<)Gpso$p6=z%bXwPMFC`jQXq9uWRgIGYutAUb%td5%c#j z>W+o$`Rl01Su@IZv;-6ij>XF}Hb<8Ccpg^`J4761t`C=Oj+SgJu@JYk=gMSmMtr^D z%6na>Gp4QYmt$KBULbg#o!{9FeehHMu0zmP+Hbl=zMvj!DydO*lig)+XwEH^wl#$2 zJbO8eDVob~1UKxnyHnM>Gq;tRxP3DQ1zQHi_>m#3nEmx}!RxE=%j#~FG*o5EX6IB_ z|BPOwoUC$kTCAme(Tvgjyaq=k`>zDGE-CB>&1z$j+3OpK?+&?dhaY5b(6!6-=8zIc zw<@+rQ)P}h))yU&l{r<#RG-z(a!piYJTNutNl^~r+*O?^X2K*Uc1`Y>&BP#nw%ju9 zz@)S7OVnfXtKL1FFx6Zzig`IMKEAsp5uZY_;X1dIV@;8R&aewO((6xVm-kro$8=XV zV!kZ1Uw1jmv))~kO>RTobR`dGRGISmGLWNNW7=Q&lTr@`4q~}nlouf+fj352ExJ5c zj{h?0e@J=M7>xv zmz*C2XDKOj%_fgemvsKAMdW|QFWOmPlBPI%iQY6HQ^w0f(@z6>c*p7s1?m9UpP0au`C2&s%DH@iTT9pRb$Oh&`B0?I*d~Xi`5-ncb+h5)(?hETk2qeKbH9D7 zp~{*wH2A$Cn>cKJqMFrS-|otlx{Uti|AIbt>_lf3zi@=*mO~U(kfd*Ee>go;VBH=A z9sgb$j7odL02WohfB=8;Se{~AyWzZDHw5Mlmk&1yeerY0I7&4t8f{3x?Sn<#sYZ1x zRpR2*6LhJBUcZNbL}Gff&0gQzvJx8uBO}Uc5+2>+d%y7KuU5JEWbG|}y#eRvWchI= zg!zr8{D&%r>w%+xj~T4f5Lu3#cFjPO0Y@_y2?)`{Dav^NJ?<8yf?F+2g0wq=Y|is5 z{`H!r-lFr5zly}B)v(ZZY+ zS(yVCX%1VF6U8jiw~p$?)?$K!Zk)>rr~g3*#?LWj0<989e=nph%$+$AT$qwXY`7Pp z2Ky&8V;X=Gxwbnh2fL|ORZGxX6cPkm$OSySdNUPr7W%(?1Q4O&6~MblcHSr%u2iYr zLfD%c!YFrya7X7y3mj(|RzLe@jE;wbg7Q}cE~{!!R1r%11;mG`A3sjzO;JXbv+eEg zmlPM{2gL`wUODsXWiuPYloh+4coUEQI$QRij&d* zg)k_71$5;y-ouD#Ie^9)=H$H3$}TY-e$Zayyc(HqaotheiiA}B%UursXy=0sK44{( zWfhbdcAqSTFc3wa*U%>iURoN=tk7*=g3)q95cJ9>zpjxy!q-Gv6k@8lxJ%ioa-gtDr z*`@M!lExb!A*X+psY0mZO~CL(dm|3ew+-rFiEonUH;&@d=Q$3`=JHhejEpMJcl0M) zrGg$d&6JgsFzPvRB(rIFC#O_?!X7{ne0+SkV0UcQw_9j&8O0_lKJN4F-{c1JnTwaz zif@ik%gd%cuMS}d^(W#Wxnb1Tj8$f(EGGHs+V;Fod(a{j%$m1uEe#6od*9&X=2p8% zWo54*`C^-(lhSsPjAH5S>9Mpkqfd^=AYV5c=o^1N`5Q5tNeNv@Hq(_+HnW-5m658Z z;j(BCkp1SZMhjF91xxFC5`yV9KpjmUFt|`gES@-QL=l znN6YJ=*+6^hS2oThLH$#d^Q0F_RWukr%-ctiMYfxj85+Q<7C8-%bpp;ENNh5wVq!) zJw(U9%V}-C5b!g@jxoQ{H792czLV8_i`CZ7@G6(1R4gZl-rj?LlY#DmpYv&0b{DYqi zxG%7z4L{{oYcuOKJ=g1mH^%dyKHxws6&gT06Hk^O>LUJM)u%^;S@LZ|L#2GKpI5o8 z)v65TA^Z7wdW^~PGJ=x@dH^s!A>%SV`JO8E_0@Z*iBC^s-y&dQ>q$u?^-W=<`!N6y zA5S;J6h#YMgO;;;osj@E<~2PL-1a35)B<^k_G)B5AK$u5!lvfOXax?a2lY%%Ul+Ve zUt$@{QLCm%yF>*dKz}r1RztPCH}N2WZ^1hN^Je5onZ%%OyDH4Ciu8vIfaoIXoqSo; zTklu2e0q>Xw`PNR<=*Np&OCAo0&8J!5wp}5sl@5XX)byx+d9D43C%p01pw^mvm2`vqcfBwADH^SIt^^CXXMFjL<(Z%93QyKiOm@gu(L8FYVBog5W z@Z)*QSyQzdCPf%SS+N-PH_C1r9irhuFf^SkXS`pvi5LW4g1FDG7m~crC$wqtuhLy^ zG_pKpL&v}fWdQA~R{g9gi;=h$Ot9?0Xq=Wt+dvdqTCqM>BuCQ!Hh1za4$fC-!@fOI zeRmMqpV`I{(h^DaHQnNKnblmS%l=b zaCG|)t?4z?IpNrIZjr3)(^%dIu=!AT4xajwG`W(Tl@sV9po*DQZZPPG53QZJ`($Nj zUvuAUZi#xR(IT6?w>}CRc{jh(yfhv^J0~~2P0IbDBVD#A<6yTxGwko9XzwhhmYK*X zD14ldnd%D5w} zfMIJ3O)w>yU$0lu2#^ov$II7}=dJRMz^li5Pc2J7A0D%G7Ya&B4N$Ij&Qlj{*5(GY znY|`?AaLbMdO8`;)rN)!uwBqGg2thaG0Mr<*aU?BviX`+t|($KzL%epF!E;$&BV`|J6R2t$qwT zEqI#V?=8GFFrW)fpHje)c>{EtT(xT7tm4?Pu%3LQ?YTCvJoJOEHi5Mv`K?CX%UB+& zDKPgd#^#_a9`5TG!e@rN86nT?_xifJ%rlkSe*AcYaI-)vE*3y|2$0B7)~-Eln-RM5Wn|jPLTA8cUWe2@5xB zHGUb*H&HdNrBKcueK%I>JYHpy$T(U|Ngkql1hXE_BE!}WFcjW89LqB(Sg#NCH#Vl|wyV%z zj}@wG4Q6!MtaT@RsweR@?13te=D{O^FmIR!ECQ+aOZIA2g&q3L_iF3eiw;e&ZgeST zfsKarkGA#Uf(3K5CO1vT{mxJB zy%XJ!mT!wd5AFd-A)@brHww7+Y6EJPl9}s3fTk}0*TI`#8@mc=o-XR6Q|Pl&xSQy; z$GDPQ81oWpeoQ@$O<_ds>%j$l{<}kJ3VO~Qlj*E%V%=Ns@Vadl62q0q?J!OWaw#!M zI>^3GQrAo&ZsppM97qqh{OaLX%!=0}>~$=|c6zhDFf1j9e}iIawU^u@fK}h9k=G|B z{ZQgMu{7w|fNnS&eofHj8=&?FEHi;f!{&G(D#@4)YnKtMFCZDY5G);WRXP(WCrN*P z+5TV^jcCGtqv+gCujKA$t?J3{H`+zdMzzhPDYuKbG+x*EGe7ntJ6$(=cavwiLYH3c zk$|QR&(1lk-K@mb>O)K7V5>(V>V@;oO^JE}G1Uj5EZCxB*x-4Yvt+l zU&4LPG?v#k?%6z)jc&YY(?4KGVCIa0?!&h|W~4)BVD{jI1!DUtGFz%-Gg<4-Hqr?@ zATR_27o%FC64A>)00YmncP7MoctqzeYE4o5wHpRuyk|1Qs{1vDhG;^oPgb}O_*6ye z%90F(zaN}Ddcb`a)_g2=-9G{+E;F$^&R%zaL|L1`*UyibrI(leetFuLz=-s{VyE-! zgt@cnjrT^cXY+g3$9X(D*W%olHS{`?)5t~RJqKQU+aKl1?!P2$+-i{Nag7Xkh&wbYFM8+Q8o!zz>L+&+ z&wT$f_N2rRGj`&-hw$>E;U4k%g9lR>k)zE86&x6>pw>HT!%N+0UTM+!3dvK`Zd$MRY{VWKe(Y`rWMm zmY6-4eSAkeHCb3#Y)Q}F9m%512|D_p;$x{MCLA6Ovxc-rI{EvK+dSg2SskjiT*6$I z++I2QC?i_o`r8!ThriC z)6WoTV1PEC>(scDtg3NqhoylWw>9|D*$zj!%wWa0>%5%i6bIXbpcI-~hbr@;;#@F$ z)iCV1S^r7&jg}??KgY)<(SdsVU|va;C9gSDs6_eO!4$@XlV|5!bY>&G7 zV!EHLBNM2d`txGSmK56Df^EnB?4F76I4_(_9vJ-(P1{k0ZxnG?T-$gX+qB0$5R(Z$ zBEli|Skx@uG{Z)Jw@VsJ_G$WxvVcH#DSP~UTGOqHiCg0D-1hQaP9$0ibk92fxrQHs zsNr!SBzJZ?c%Y`Tvte*z{Y9J*>%h>Enwyq*|6Hh_L0eF^()QSaoQKPg4E53|8ip4W zypQX)9HCNl3xSV*tbMzo;a+ncITQKwb5t>t-^1&~VLg*Ie`vW#c~?kuNv-wj_OfDU z;kn=jgdg!CV$zp)*5WLc<=o23zAr707f z;83bNI?+Tq88u@;VV46orp3&!RD#@{-0?5BU&mf`M1O}D$mLOOC5EF#x%!oWN9Rc| zlQR2R{P;tS#L+#MHxWW5FriRa|8gvaNPHcPdq$+9)#xkpU0+R2&Dy%quS0{m;32Rr zVyAP>t>m=GXFccN8%JNX+jmmw4UK}kUmVw^rV->;N8K?}v|(KzBiT$#DNBDDU-?;a z-LcB{Si%;4oQKr%mAS9WLXkCSvl+jHnNb9m=zi}a?c&gjz@{$1Gc+_Dnqza^*cm~t_4_>|l;NR>4&Z81njlvVN;AMjD9OZ;7l!Bm#CYIrYN z_B-suFoxDje0==#VAg{hjkhy2zxB$BavxTx!3o-mcCGSJ_bH<L& zkB#By1@8YxK zOJN!X?*bKLC&Kmn6AnY$dBTSlREn zRp(je)~{q1VPVQ1Ai7afobZ=Rn8>^b!0+m@r95JG z)jxfZBg!O8wPUc%IV!-2(k5R#1QDxr0{PYRV1+~Dkv;&4AKfAX44`tf>(~G=%*qy_ z#a{i|sg*0tWGw9`s2=N+5l{VNo|Qu(oa0m2T$ll{JBwnB1&M1vPjBQ(fs zZkYgn7K2KnFH6R$zZEY$Ky|jK!KYt6bHF@%pj^l2x0{g(a8-xUsx_Tmk8Dn3pK-aI zjR8KLElYz9dQ-^~_=zU+nWeta*0L{Wee%Sz>&GQ|dc}-a`6nq~h#NwE@9^AQH5({w z32ynCC(?sIn5#NirAlBybnI#C-3x7@Z`|+s8z=*Uz@u%9KHJ@~v0*rU{Bom!mYxAWZ7$lax1hg@HNJxm@PBcyj|d4pB(LG0xw-LS8a7Dz6#M(?-!N@ z^=Q1gyX8xE&V|gUdM_WUmhbend?n>7lvDq1Y}Tew3T>|7dfo@O(Ci=XO(c2Ybd6GZ z6MW+}Gu1r4gN60+rNESmDN8^n+Ih6%P*+56Dv)$Nfx2h(wLH~Z4?{OWjO(l=F?sRi zeKxY~m8#H=Xz(^3FDO%2y>0yxT5>Q!Xb8How_fKrg!_vZu=k7iT1gSbcTMuzY+0|} zzRP}Z^k%eB>D4?}fQf?bcAm;O*0a z6nTkP6V>XYnTk0V^=^$ieN$1*Pq7(lQZA5v^wrm2&0hx}L2}={Tc8Mst!O#V7jJDn z(U>F!+^&sP=KF=NpJ{1n_2Q;Gd(I~d-ClBfK=!kmI(a`Vq}AjP6Z6R;2dTXkabaV= zo%G~nn}gy5)iE#qn}Ngio6~!1ym>mKwv(h>GZT+IlXBmGPw7qR(wP|G3!S(A`D@YPmN;Ve;UH(~W>H%-PKPfL?#*L2;_-7KE zUK(!=KhfP0HQs^u2SvVQeW>hx8>@-QDnr;q33tHnzGIm}n!|YS5J#zrzw3fNkOQ0z zY>!#7`aWQqbc`L|xJ_COeVw^>9`Swt;!!XSavSapsXLrxWo5x^?9ui@Af*pJli#F2B+IRa1uJ4% zWX`4VaQOwG{4YS$NhDsD%Yy#?{h8(|f%El3Vz!gLHH|#;%^5MAyU*;?b}$pIK!4%+ zI(ur4y5Dy@PtIcxge;?Wzu$mt0XDzf-`xvJZj+D2Yc4q6-{#lyi)Gh|c*eCR{3=^v z^@1^5yNopG*NJ?&!}Bk#w((1BoF>_yv7z%fX52xA95q7aD?B02ryQV`fR#Ud3Cz%O z06kYIle#_FTfqAYx@xSR`vB4CPL!LP-w1vIh)&R;J*ZWH-An{wtx&{CWX(WZXQ@Be z->L_Yh}pW5d?pV2M@1$C=h4)r+U`}jNx!NDOJ)$^ zYs0-bKQ+MTkLltU(h<~f83)!Ut>eC)RIIP|6j zg$q>IK>N6Phdm88V#rQ$zuyuR7NW4?2Co$~2H}JRq#gYAK$+h9WKYCw>>0(t%36G- zk#_f@7ckUxyuU_OOppLOavTp&t`XN-1N>U^d6~mLQ&Q)`YZ9Lh^$O74i_o8M&9(tl z!)^ul{J!pNtGx6a^awJ-GI(A$c;i)AY!|<8^aa^ZgHITIBln(f;>H!;RoThOq=bY; zy1N<3QVTF30!=Rwj+-x;gY;`<1NcSe@<;_p6_3t224pCFv zP%c!;2e+q+s%m0jF@H?hzz@$d=lB8t&Lb!fek*}oh>|CY8ez8h_tL8Ic?1^;9mx=d- z2;O9Klg`kLP3wrcEQ$<|;Z>#eW{>;!yaX5L2<$|0ULBeBA;4llUwX`Pdd@=;0`xrQ z{3^_AH*Q2lMtJu&Prs0yPUXFN?aN&jezj!SpL7Y#`m0~}*LhveqFcsZso75-?SA+$ z|DW6ZAH(==(RVt}Ee6F0VPArDsEXAaCRkx*tN8*Z|F0*>641)>8{0UK>IfEF3WY5N z$;Y0QRNu%mPU~aPcsZ@KL9FfFaP#R&g*UVQ=RVODbPRn>k0F4MRuA*>A;|I1IL1n^ z{^x#u5JD$l4`X!AwqEIaO~RA#Hc^<%?g)_vCV)8S)6e14RTemV$W{&TNjEcsL3=+XzNSMxid6P~%I7tm`r_}!QLR-*wGK6lux3jD-0^y`9I#fmr6%d5^H*!E3g^&DH#VHJOueAe~+?~_A`gGPp?{j zDQ`}HQOH&>8Na^XtJm?3$H^Yp+6A-FLvopIodt~|j0Y-TE%pFKrP6*k!>Y{E&=dn} zl@})#E=q#^L-WVZXQ@(PF{9qQtq{SZmGbKBq`_tKB$NYPsd-?a)T?4CIm3T&jN`jS z)nwH{-UE5h)dhMqGswOU33)f@bU)nzRNJ$nTn`Df5!Z6+h;|H+@rq`t( zFvMgXoDskJ29EY`B59y$A{H8b+%nzzSrjjQJVyDanA`)Jl>uX8F($|H?f_*;qe?fs zv{0>V%OXD?&f^A2cOaB%`oSSoC*mvUQoP<3FH?6!FU&&zZ-I9tbT*S}1YYA;0Lp7P zgaaP5+icVmH7*+Q{MSxOPC?xokP8qAd4Tpf9!L23VO&OcO9e78iV3XNlm-R+)hsx2 zVE<=Bv^zS1cf$q;SYClCbmRJU-~-z)^`#pPHtJmp3=D*S2h*P<2qRgIhdwwKBh}%Z z9~)X}UW9)*8JwIXlQDyco}_^$0nK(cfZza(FK!MbjXP`O4$A`vldI0>XI0RN^}Kv~ zastC8eN)qkG#N^~?whBE)zw_!3l`_7fZYYRN{Cchk7s^`Y(vW(apgnm%NX1+1b%JI zctzkQdFM0h4c=TC*puPo=NIZ^6_y1bnX8V&i$<>?cq=4R0o+T#gl*z+L^*=nLxmZZ6|K6;?(3QMFe%TP zBAjy-Mxb;y2zP!)YjubAVAs7ECrAlUR$Da#exh3+RLtsulqr-j#xL>mW2 zwvU*7&llIA4lU5@^vlD$#83^Jp|vPnYT3QOJsJT9QGhT8uFk=@!=!@#=?s-@&=Z~3 zH=y^p;*cwu$0dSrgYV&t12F{R1XT2`pmjEbl$`j;uqY% zD(j9mGr3mr9XRHes)Ua%`(R~LhJ5x3?DGT^u(}$;!^U)=@_kW;yzdij{lV%hFK-TS zff-6U-_mCNbqqB%HP$4>XMd6irDKM&S8GG@r#>G(B%l$y!>9~djE%N~2dp@27>QBR z>wIjw68@5utMdJ+%H(sG=wDF<{}9MXOG`uVUjZusWX$q=w-htLb~s>el_~$dv1G#x z#BLy|u9d{abNI+?vXD2m_Jw$ufUYNwj}n?NebQy(@?+Q16-$cU-LK_<8e6d?r@*j% zWTMI*fvIm`)Ssh%Ls62>Lssf8udOw$&0?#313a(<){C$sIjp0a%Qnsm^yaLFGbl8A zdIsrBks*8kASCqWx6~`F`Trq0*_>{bH>y88+?qEVikpDrSj3+&isd7M2ZNL+0oF0V z_Qp*;le16mi1wuV`!-S`fP%HD;12yH`mnK&PT)`=5vp8k}OH*R1>=S=f zmRU7eDQRf9)HinvT)!=-d3@BLscbdZT2<};Z+BsVtxI~IH&5u`;RNt(9uL3BZ#UBa zEobbyRH{&%#2Lf=UN-LerTa+`C|_i~0C!)Y_g(glbt`R9GuQwY>z{JNe)_C~!)?9I zmY-nqf2dqA1AaZt$AZb=Gk}?GANbN>F7!zWU*5|nU;`F4&%=Mle^L>@$ArWOXRAUs zi652#>qW|&<gsC1(|GzZeyO$%I>|L5uQo@#?`hcGX=@SZq zCE(XW;dN1H(6V-6J^#UWPH``P=w;o6CRw(_m4?rJb=kzzf(_?`F$XL@;Dyk1#BRQEW-K4%+1Xebk=iZ7=f%|t3q=6 z8~Q@}b>Pi}v;(%${m1%xZR9gDK_EGQXu(6o0dA4L_e*_rkU)Xqu?3^!xr>)?#FJYj z?4_^;005iNd#gO!!|@b-1{ko`w-GEGLiZk${Cm~J*!H4}X$p zwwjwkI};ykoR1!ife) zW#G+Cf@@ zJ7aDEmrp~3jEm|*`i>=Izt`la&HzYJ;jTky&_Tr52Z0PXw#K$C)iMBAo@a4LoOr~>Ky?Xi)K}#7TiJpA4sak zlRYaix_7($?&${!d4IPb9F`DPzI^$MucUSQ|4T{j6{neg{UnDfC^h0Y&1{tqCt|1KqJ7KjQwe5I`RCzd=TYN#YF+8M=#Jz~9eEMg`m}9S$+^-%h*C zQEGaG>0K2aV7K1pGlAWzOj_^){~d$%Je}c&75B~WdxZ4ckmOS@f=3r;5V$!$gm2&5 z!0NdID$8>$Vq%|6HqvM0QWswGoii@IND18SBSUYDG5Uw8M0Qj2LIl~Uc8 z(br#qmjoJNWd^;}JvLy1q0;g<^$wuIa)GVZj+gss`u_4`y99e z|8C9}?*voLF6d4m<%1x*_V)5Gy5Jwf!)0)?z*~Mg zY^ggyHwU;bf&_N@K>ZCm7Ccyy{`VS`$Zjt}8%c4#H6#;gYRIDwdROL`U;Jj!)x<(W z5nNON*YO4jndCN&pqRMa`)|n(b=3xNC&RsdA#L;Fuzn8zYZs`Cpg;`;?j=ykTUx}3 zem=K-z-MMoJj|bjgv;%2Tliy2{t1|%bj0#b z{^>EC0x}-A!sVPtfdfcvaJI_e?Gcm&*G~X(HXTY`C{dG+^dO%AzoC_tmGvN4gCW*7 z9Kvt_7*LyFC6lg$y-CvKXQg6BNEFSO+r|9rK4m{*1Ws=NmQO)gL7Ja2wxD%ohWf|? z^gj@7JU)L;_y>Xak=6<9sMI_S%=mP#;n{^9570*{LfTs|6KcRn%EzY-R^mwifI1eH zjv8>ci1~SsSGXD=ZyZb%x!oY645T7+GcDi;dlKbqLLmYX)B{s4|CW-sU@2rap!|Wv z^wl;#O2S)Q;TMO{Brm+0pQ0H7cT~$iAQRjhRErSh91H(Sg95!usj;|8LxM}o2N?7}Xn1$ZH^7I~c(1AKyvjBIBKiganbvoo;l)ejC5 zSRpy$_;vG;-9WzN*LV*d0{A9efP4hp#l(b!>o@P*Q}ASd-K4u-p5+@ zAP}BI?bcva#aNJqgkM9ayL$Y|7cX5OL>AJAK=nYnN!#CIQS`y3c@f3R2$Zzuu>4~$ zdE^`e*lg;R@31UrY{??l;l>3zW%mBFqYAx@4ZG{4ssQtWw_+*=vsg7+x zkdPA`n*#7;+~s(W(GNwT1?~l4vY^{?KjbGp><17qg2QGEz_-K3q#O^=s^hUCyDTIO zG=1^Hw-m*Kk>5P|?ZraW({{L&ryz~xfj3s3z{k@QGYH9&5>5BUXEfB*{3NIg4=hZE z`H8d)47@(02FCy=QF)pSECNVI9nfI;RV|RiRzUt(#5Lr?PAFk-``K2!275TcSTyTB zfu?e=O+cQ2NezswvgJbBMF<$_bMWYRJir9q-+KoKINcOZB7t;wKd8X<_We2N?k9_f zV3R$$HpYh~+YDzXGYd<@fs)%II56KJ-~|LiNrS9~Gjx)%GXZF(t;MJ|4lnH4)+{=< z{7f4h1q3j}qVjcy^Mv@a#^N#zfRZ&4O8B+B<35xWP7RZon^HKnlkhq5N$l*%3><4k zoCWl_;=Qn-0|f&EKb8^$1?5M4m>>FuWAHxM7zV(L3dYlWhR8-I;8z1Mr{QZt(N_dn zS=}IzUeH>);1q5VMlJ|hB0iP%<4G-d;UpY zu{Wxl8~F$5TzZWIQs;C^rQnqMZ20i)WAZ5(<%TEl-B1vLLok>j;(B7(M>{-4os@VR zl4{ewv_OCV+nNh-5^!*EfP4HR7j$uxu+zHx%-`wg$)4C7DWX+EpD*?Rnwm=Q(N#dXY8N5P@Fa>3K2Bdwp!z=s<_$!1RD;jV zxYWrSur(ct_+$=J0Q3NyhvE;>1P(ltVNM;Yehn)|jS8N32#doIBS5S3&-=`f5ZELI zPFn~s{@>Ljaq#fmVQpiMIy|yp8GLxp`gyf7fkGtrd#ob|5%Y!$1jk z$twbPzR&R|}{*v{k&?I7@1A-4;TicqV_h^OP!zTzJxcF$m5=VL5wXXOp<qPg-<>a#dLdOQE=pa{>qoB>RCddDLYyV=(_&)$wu`|F;wmJdHk9ZCBqogu^y zRz(v)BLx5-fc~3(@!|!rusu;7zd^GK{(LN((~UzuJj`9tQ_Hp*3c*rhs7scIzo*7+ z-P(dYp(EnyJluH_Qc@U=xxgZy2b^$_!h!HDI=X%fxRKB4^^A?x3iZ1ol8W!%Q$rHm zp_T-JF&2FhaN+k9mjIhW3tJTsc@PGW8B8=C*PYAQ&{ki1BlJtK`aw1ndn14!2kA(b z&pUm%ikFk+*&R{DK$L88cJkf=<0T$RD{Lk#JE4R}j2&l20as+H8Gy3~yMP4pG;)vq zq+||{ID{hWz$sWGJ2wZ7+UvMK@CfeSWx6H$DM?9%4dfDV(1u)Bk=H9#Wr-)#)Y7uh z5wnth4>Xv^fdJu!!M()x{_1FI;b)lV;?v0rI?{wc&@M&b{G{Jw&=C?Ac0Sw^;#AVV zV`+{zYcY(d|1pUljdvhH@u&7kwt}tM`;kO}uM(M&*z@0m0m&tY7sJZQ}O6NlGrMBq9`bMwHARyV3CkLxFUvUNIqkC^y)hp$ht!rJ(>E@$Mr0 zHUPN$6D)zxnT6b@hjH%6^*kowxFi~|83Fl2E5E`^T=j$I35Bev-_7g%ZIPVQ<;&Tz zZ#@6AAzQF$n^i~?j(eJr=@GadZD+5L&lHL|sJ-1!W?`)G77{aNk~l?AjRknp&+ zx3^=hQ;-V(qQ8H$&F2om<6b0mfD))kcVt%Jh1Oy7R$GCh0Of%IOF7%>NI zbQA(3mwXAy&Z6gq=F0(&rFc|8`_$bl1)>(uZ%5O3{(h>{>gK8hI|=G{V5HFsbaMRJ z_9%j3CRy&W+dstCR#(5^q`*KJ%q!~Ob#Dbp&cqzh-|vRx8*{nM?>YlNy>}<%UqHga zC%|Qm2b2m-Y@w<0rusmTQK7!fetqIuVIHI$h{P;}$rWXYgg;E7p)awQuH*&VvS-h+ zHR_6>-3Jly_m+jVHE4>iyj+KJ=`ByWPEV59LLs~)h#lc8Zi2$T4Tm*4ZTML}%p{V~ zRfFN}^`l#>KV|WbLlEZaK(zn;q-mBH)+UVA{+ztA!=Y)KJiFYN?ppJX1ocm;+f%_t zrm490;j7W!AL(gDcxkQDPlY}iN#Z@<<)oCtoH2kDe77rg*9 zgQCLbj*c9eL}56IpVK-nbdfXvv#10I05sR!YGPnF6GKLpl?oaijZUYPtOjfeV8T(O zL<~Y}4AxR$xRBJxW1rn@w!%uBHj7M|)8IVA_%~}gy`-r%eZBKE=GSA)fM0&gIjIRh z!l@>6C;an^2BLdZrR3xUL|JFN;WVf@=WY2~4sO=|JC~K|O7Jv1-2@9jBvzoag436+ zI@r*V41G-$rG76XtPhB%`Fdl0_qhtPR}?pe_Mp%J-tiAbl4o*@0Tl?9xw$!hg!J|I zIejz*3;=>Lh6@TI2^MODs>l?Q8(fd|`{Fe@ud9}T^?i&F_&NxGNT3*G-@tL-5MhV$ zBjh`}9noIPVHe)&WF!CA^;AzY+uz)KSJWe~o??eS9wS#hzVF{KXS|j4TrKJ~DBqUX z*B?q!8sNW5i9opKXy%i(29RGVPzMa!W39$!cS>Z?1khb(X66|EQVkyul=uf~0IP=) zGwwW%FiG|nBv2Vf!t_w+=nqFA{3t)K2mFTc4>ula6(qeczywv$#SN;1ELg+>T}mYT zSn+BRyx!+pLG6&qgES7&8R$KK`bYoLOo}!!w6IG2ry9P=P}Z2Af{FZ-S8Zd0+sprx1A3DE&z2hyQeL2S1(e z5YGhe{R`nPKS?y7ss$}e#tqsZD$rnnt|eX#)OS$wo567n_i=RWf|Qk)KVNB!Ev!08MGcm&)6!NN-ozY${JN>NRb1eD zwI($_s#rJBkl{qdAmbUUtJ8wi72H}`Fe`$m1lsQRs+|^6C-3=Z*#eSR^ffF|K89RP z@CS5!a3_6}K1D*Rl1zp#`zLUs*;|4^Ih`aZX7f1M?NVUDL+BYLQUUC|1v$L>l2&yUD zq3TDdTrGkt>3I*rIU^VEqetej-w%2PZSZ-YuOfb23-=P@$A%JyQbLFV_P8%V1ff8M ziT@E~sgTOK%~bK-eY*@N3n*DaVABcIF0c{H4$ewmHKTe@ETGZxSk2v(ord%Qj@vZR zK#GEEn2SKJX9P6`3=sv0j-lTU*9OAWjZ2&G`Ow>%f|rI-vj+C>j20Tm{cQ{`uz7p? z;RJ~&&QC6SHlIH@+I#jg=RY??zrG>8q7I-Df6hlVJ|?d|fXXhwQ+;5lr)S6e5%6$5 zTet6W=fTRwe9-xz34Z!bcIOZ^C#>EZISv0m*n7{YEVFJ~P%SO9C?X0dh>{VIpn!@fA~{D%B1lHE zf)dRFlA{O$A~{Nqf+9JH$AbW!8!;+2t6LP5w&zIK2k|!cfSby!|__N0h_8OKUA(N1lglqa& z`bXMZ2fpq-$~p$xVUvo1c`bE{qUEo~RsDCy0gaWn4)SXxhX42x_gq@DOjW0eE8usg zRa^F=He(tV++^GYAYRc^qx#=TTFwkdcu8AoOya0%J}>v>@KO|2f2q`;3ri%`vvU$o zRd462YFpQ^FfsDb5ciWfp1;`-@N>a#?LyY1oAXbd{kNF?(waxQ1-ReE+0RfMC+9Yk zA81}??@%ocd9;+vB2Skr$#%On`Yp)Z&3_oit9>=nHTb%Z6nYDAob(!J|E=b5^hEHb z*DbvLy_bHhGyVAVt4)JGqPVd1=tnv^rUXgh|HR44HZ2k!}|Lg zL+Nj_eNS24?*3kebXP4E4_fw5RFSGA*COWcD3Fnp$)@(dF3<2&>PrA7Z$`w_L**GjxL{`;%)1F|2HW2`8cacv+ zdOvp#%;fG$Gbpb7cz5Ye+gZZ5)OZSGfJY$cm6VhOj9^7~DA+rM@*fsNn{>y^r0TGx;6WU153d-;MQyjUXI$;_Yqn4GlkM%o90H82*aZT#rT9-?#vr zmS*F|o_n3Vi;+J-hzOxelT(ZE8)t?sZ%k9ETr8q%8u!>2KbN&q$_q09)MSu zmYKr8aaTl`#8O>+rcqXdt2^TG`+5*WAW0UGIHx7_2yC;^B=LNFrwBvDsZ6e! zAbAN`k{Oo0@sDjQgQw{sV)lC@3U~4_NyvbA#QVp0LEeCQaNgrfCvMRb+|Qt$2E{9EM}Xh zG_3NdlL^^>nW1N+9ZDUREV5l-__Dte{oH@&fbcp@1=BhO99@H;#4V-;gV4Vc|>&LLS%;C)xmpDlYfGYIA8$UYg$oS+6=UC+ljl6bCMgbF&>gO z3ps|hD87uOj7(nydfTX-_brs()xt9pWX_Q~wOme>;d2a~e?3m)H$9667;u&(jB?wL z%4&}*Tw*m~S)&W*Ce$VJPm5|OUkEf0j6$(ooA!@MZV4@&Bg$0c4N=t~ecy`#E%#Gh zXs_1HVi#Lbo^DXO^m%J5qsIWg(hpxJv__xcJm)}%0%nao*cXULB4r%z|Bm={NOd{07*af zqfD&Boq-sm6S(Uw!BuW`J7EmjBHM4=B_~5EICPxv6x&VpT`du<*oMgTV*S0aiO6A) za-NC$c;A?WMj{Ts1=Qb}viAGqtq~taguoQ@mtFaLQ+Wpj4Qh~M9=d?=CuGeiw@>hI z0yMkaWyU#>usG9Ve2#sDM&p~i%+7YgjCx6JRC%|kHIu9WoIvPRuitVYg z1Ls8O4}GKl+vj4SptFoco(B~_WqU|}`zabr>$f|RmU!)X`vVgsD%SkeCVoN&EM}*c z#mAFkE<}B=^a%BH$+i}N2=k`**Guntuibvhlk<}yQlrAdKlGcc{xdK0j?)W*ea=A) zZXydW^mkaYD|pN}m%+33l#Nojm6xS9cYPGkhf-S@uzL0GUgx{+J^GDw+o?;#@qq~{ zG7nC?W&S$e)`BBCeI%O-ov`ok4aD^4i4jF@4<=|@0Q3O1>`}y*fP|Uq5J-N&+4}ok zPQ`gVe2^2ryHCgb;cs2LE5lUWcXqsS!ocZS{sUy>(HU=C%Xb`ojWWbG?c>^pR{W{S zcUch{J23NS;px+-L+>oEQu7~4Ko8>eW8mnd5+84Kb^7Uda}Aq(I4bG>^S?%fv-|vH zE)iW%v-55Xa=CaaXU|tlodur93=jFU8cfa-ZmLsanz*fLkFH%KHzZ%PqY&L{sRm8O zc9RMdZ(3^YYosShjUk?yIZBg@nFS&(Q@tzTssWp5NKpYjy3X!dv!fAVJN5nhk54~* z_@MsUWnUDe1hJoLY7!w7>6b`s17U~rxDsfO%uDyzWr@?`0$LE!OG{(mg$-TSUf|e9 zG&^@ZFM|ssEs``$GmlkIJ}YnmgRpiHi3s4XSVoo1ka1~i?MH$mammmXT@2;jskQ&S zAAzoa+we=*(r+T}!a#abED`9Ox`4lEHD^J@j~Ad%5z~t*ob{EV|V0 zJ_hrzbVz}6hefN*6>E=v*(={ulkjBU5 z7-=lCXsoSW^v`iz94OEhO7!dE4ZC3`Uf#dqMoa-6Fb!Y0s~Cq)MfhC}b=y~-lHt!P zuISoH2lT5@e@Vf}oXaQ-bLf9@J1Lz-E7s|v=WL@%kVsAMytprM`|>l>azW%#QITq?dd;ogXO5>pkV^g8zh(8?Gf$Z#;`J1$3zkqZ&r+@( zbQ$7Z5*stG@r_>oYm*DWoM;wn^;%Aqtet*q7S}jsIM*(niW9tOae%(%ONqzJ#4t7G zu5(;xkR9~Dt93S>ju9HBBVN81bN@GUw`S=}u2jzBy!ndTjw~~ajn$MWnI8!ssy}~R z{SG^b*_@HX`BZ3S+i_4pEw?z9)Zz(`dqGW8lfu$8+x8thv^>;L)8Z1je)GBCR!M;s z>IL(t5kAG8+9wrQlbmh8o;N%&;@3eZz%zpskmj;B8-@rfj?o?wzM3d(itY1J2!EO2 zN&HkEVU8p$ONoS(^!XwkOf7C$pv0%G!zK{n{&3&!LsF55^AWe}HFCB-w3i%K#oR8y zTIOi)E7W;MFx28YeG{ashM9}z$=gf4gs6M`JyIIdX;ahp>L>C%TH6O4M@((=g}$Y; zA=Qi0(vOxht)ztz0FV)~?~F6hj`78|k*W@zPZQ=%H4!b>7*?S+*(OS+T?p2@k7(P0 zQ*xZ`+7(*U3tJzN6Pr(Om5w@>Q0Sraw((#~b@KA(y;N#P>1DP|M|I^jG`o+x26|r5 zPrF0Ju=<@&EnPvv@Z#Z%td*L|BXS`uJXheShf6lVZbilVu-N)n#(%=k^eM@)eSse& zh&wf9we_R#A1oz@?kCD{csoH=fmyuI0EG8kIsQBcqZD5PHykE*Ec3WK2H8M^$S&73 zoyy1dEK<)gcX%YJkAKd)*QHTTz%^$a`Li4??n1xr66B&$*LSIJpF3&oeLiy0N)-Yp zoOFvNaPzMM-0!B!Mjo+r_d_(uMKp3gSsx0&S!Yh~%Oa)Z9) zjv5~DIS@D4Q2206_8^rZT%3hJp*+vNpV(+j3WSh;Et`U3Hqe~WdTk)692*&(gDSnQNydPlh+qnX!tkUV^`Tr%qi?tZNW z-^MQkiOe*|!+|Bgd0Y?T&>axaaT(#iYw0fAg>$MfN0#j2w`BLnnexwRlu5jiiWCQO z0cQ)AwFJsT6lpYuG~2JEEy~%Zl)Du=6Ju1&`MWUdC<<1{k9KW&TSpL25VT{2F_Pl< z3yJGHQEH5ux$*SuUNYKfLSK@@vNiR$QbEhqH-yPfCwMJs7#Mav@?OkhR@t>isKFh$ zoo6{HHui4zOuW}ww}(9D^xBt8ZA80st#;Z`)2!H|R5sNAbvwbNxsf!I9)yU?c$}c7 zrlzUHU!riknXg4H}wDoDkAQQYF8v-YFW9n#!K#Oy|<6cu5Wj zC0uT%ZqIRNf(Sz3AeB|XNiyMe=b{v0gO~RX+r5^<>PPrK6Fd<0`m1tJPfwfX@mb_l zeL{W>oGSPJB1G=mw$mX2nDBaK>)mIs#|7!%1rAV>NPfu^DE_eLV`W&|yUb$GwXdt@ zPDj|}n)P$`G~A4J()&kKC7Tz`a!^(bSr${jDpKlcLI#DTfId1~3}vAm>&;jheT<%4 zpFHDMqmV0ptgK{2@&@B|aDojtBAivd&V_3+c-|7R z|8=nt&iTZ$jF!nI=Lh=w9-6$BDmjdz5~h+q8k4)TgJofA>dMRvFcUUYHR}l;^OOB& zQKxO{g~C0zH|F$Af=2%NQ%wjXHt5Ab4DKKGf6ptJfk`n}6wcFXTBM!V3cG{!p} z_fly2H9+B{tk@Mf3K^Hd!7s-R4UwaMJ<@L);RF_r z9kPRx7JX&;W7wvlzPB zsHw*VUZGEz_eM=~!epMD3 zh&oNnw=;e=QHCW>e@C9Ibs-?m<9l6G&`AZn(Zo1C!TY=T>IuS`Qmzh8P|BsR6*Yxp zzX6Bv9B;T-tHbzVs`=>~T$1ckvLP8f{XFdN*0@Q7PR0mEHQr9=>5IeOG@io4~#S9Xi@-Rpa zX5bnl-AsYvU9V8vAa&ed@)dNzWK&!tTdk4k3CQ9EN!kzwA2mdR1L z`d?}5Az9-8WWRAr?C^i0)l3B zyuL^{+WH>NSO1|Not3iZA$mId(1OMLQtkHPLGlgD{8Oiz8>&Ti;af(OM82#3cbe7O zzBp2m4-U&M;GvK~kQ-goN_>1|qao*?uO}7Hr!hJ>n2A~jO%frZVA}`_2`w!yZt6y` zd`aRCz&{4Ym!qV`Mu3RaGM($}pT()++y>y-4_%Ut#1-LfJvh1DH?*06}s7P6dii4IEH8U^c}Z zxGQ*7J)_}(`-q?0THGDmtd zVzy~LhLY6v-8K5>mM@c&tODR2b`o zx;z*u+*X&Mnn7_A$`MHk2}0WxhKHu=+_-TA_Jq~`%utPt4Gd&pE_|F1)d8_7bc@(S zU0U^J40;7*36Y8O(6_~s`k#J3KQrU%;_^uX3Ev&Um_365z$9pR-GiV*(jH?rAq-l? ztxFPYVq`Re`^Ml#;ykW+RDM1);c_EKr41^48UMCWfXOpynVILfxk0BaAu?>bLm_20 zAxMY91w}4EwNCxbMOI&b2voH5OU#jk&aZ@PPxuXO&)zjW&4+f-z0$;L)S> z%6*^{fF&8gC|tR+MY|pO1~qxv3IY@SINt)++=xQr1j+wL2`49~jH{+>kDok2|KV8( zK+YrqbD>&~-bc^t&P9+UzPt|h2V)V)*|oRpX>SX|wR?4&hvNJ1A_-tj9KRLs_)jGe zMOZXUvwUq5JZp>9p{J+Uah{)_ZzR68O_TlbOPMQkeOWHKgvrSXWnNxlJD^N?>D*XV zwTE#CfZRLb0uRqXbzln49wEo8cEg0FZ;Yh5xw-pKTp-y|GNo_=gS5prom$_i%#j#13-VqntVDr@UNbME}cEeuG90kO-tVD*|(1UK_t`By~m08%% zOTT|Vd-0;~^*Qm!w+zvoGCSHT{eg*%p)yV)AyiD8nFwh_|NL`HLDj|BpFewEm&|*U3uwo8 z%))U6QR7=CZWiAx&wno98HARO55aYQyN}%K3};Dsc{W6Zr%q|(H2K^S+qY!d%W7qA zehj<@MCvfGz_pr>!D#S`p{Jv(s=-azIJt5U;_*+o?yBksRC)wZx@2HvteldBXl&Nx z!BU{6BihFo*On)NsFf|%cKrF04^x8}$>rf@>TqNm3)Gx@Fc&Rd&;4nIk>@}XvXu4$ zJ`@db-kvW%7#|oaeD>IjRc@ojBwC`HomiutMJTbt0@i3OZ7)YT<8*g~QO8($G}5cRll zY|oof;bnXBuVF}HGunU>o*kgcJHc(Ljx&N5Ilr1q+0cYoLN2B+s$8_TGzxt#6lSm| z#xD7VAc|0k9`Zz01shb(h{r}2eqYvv(g2dbhBRGqvLf?u0;@ySD09LIIGrF4|NOi% z1Ao9LjG)D5PROA6Xb zyI<29)|M6fgEj6dbjU}VjHLluCztP{dA$AjYa};bUTErjSFi`wbHaZ05AmfaTAf$h!A6W0U{ca( zw%|_0TcGd3+0%ODF%v3+ymI*e#Xr`N+&(rv z_xYW^ZbV^uU=}4s7Lu>3 zVzm)swz!oTBORUC@BSZDS*a|qdIw5=>yVvR&fn*0 zpB+*fxUNqX_Nwsbi?)~4jIE|oITwS^&t;jal#j%DibyINDP*+SoJqaMXY4SvcH3pr zPK{z>#9_oLYCVQ;+Bmz!eL|mqvh$Uijl4#P#Km)&aSNeQwt?ywDE(&3=SX(i`Hmbp zvz+lo*Z%=6ql(IuhQ!B8K`YKTFz635ALx3)UsH2>l3CevCoS9b%iZ~JUU#+(bkC4J z$!~kD^J6IK@7~F_wjbIeGiF0RzlPWiRm$^Jd0#SCQ)(QLw6^3L?TyY>?ogSqS^-PTkb^ZTohX5YAYPP#dbw1Ho5?emX9CF7VMEE-K?3I3k_#2oWS z>1mk$q8Fy6k71*jDbzg7AV4R}kPFJ8gBiD6G)$}x7SsP9wW%)Tqt!#OZF!7O;0iXH8 z+q=&(sdCL$we9PSxyR~a;IHN>KA5~lD@8eLA*|-&L;HN9zF4p2^{Y@8lNlY;0-Oki zZo012)LNp8-*pFl&Q%+Z+P35$pcji};iFh6=XaH);_T?DWd9yeXWMa)jP$`zLG5uS zveQ(h(GD%2zpz>jx)+?$PjnL%kxRVUS>Cm=msYNKxEj~i-eqJY`xHm>O1O?ra#>pY zXRY6WU%B$>ca39KL3+7^raB!XnjEgwT`z45^jppq4f}G&#PA=`aY#^^;Cszrku*DY zF`zBQg!Qu)o4qMnUHLQ9=3@#;5y7wg3N18OD)&}qPsT*+Jx|Rwxi@mntXJH4WVN>= z$LDld-eS&F@$ZDnS|hdLwVE(y|1>WNcI(rM9gM<8^ahT6M8RC!d z4s6cu>`ze_e{d|Ak|JzEqm-kvuUd`GKH2}-L?v&L>hGTd<}+U@t)pJP?i^}h={cCs zdG`AgJ&WDLhK8>0gHC1^@9jbYs;=GcZz$@fWOLdV)9~U;!20q@tHzj1%9aD-ZyE0` zcX5sttoIFbZY;)Ep8chn`mFTAUDBg7jza3pyoRO3KWgnMowy`4P0qjUqhMTk*C;fX z&a6=~R_7h}`*>LPqo$;XhO##D>)&07v>Orvv)`vS(9*_?rs)03RXI*1Hqulgr1|KZ z>A?4V9m~UShyxdUe>ZES7NfeKrZA$AJ`-mYr29ZDYcPwGaagM*p?Uqz!4~@Bjc?R* z27vne;l?5rs_(aA)nlh)ir;?+0I!VW=SE*~tQV;0G=UW}vrn&K*I&HyQ6cn@mMU!@cDpFKO-Q6nVK<3$mdw6j-} zmsi>|;JkOep?n~Jm2amYou5re=7q9Lzm(ZDyX-4(l+Shc=eav)WS?VHt6518wI=-` zHs3zju&N*NJuk^Zv*v-9SF9ha_W1`grh)cs&V9zXv+YXk#~!~(YocViL$bNL;o{Ox z7IRw^32y5GkKOlg)jS~LN`5FvwQbPi(c?;Ss#Q|I*juh;n*7{~SYi=XE@mI%P zUcO9EOXFa#H1+=LviO|sY6f?5?;=A{_cXqD@3=G3rJz{Sq0N_kCSxWpHCwT~3{N%u zlDmX;<+73#b0EiLGgIIO`q?5Ker#LMEs|@0KH*`2?7j_rxur*>By;0)!*~CuA5#Y9 zZyR0T{7P5mKLq3iNb|$v*y-4xKmM`vsrIh_?r;95U-G}}M2w(&L=>CalKBk8B)r9>%Xb@#|a2yY>u zT~>L(y752-=iH9B5*(^LKta}#%S4KJ1H^+1cv3>T`S_BfVdNKK=RuS8>C-1R?>1=f zr8NImrt@wD!$M0#!;n%7I%Gfv;xNUHUwiTeMx>#OPSpeR-F=$Hu6dw$UC}ZY-9^is z1a1Y%Dn{xMhNTLAY|m}2t!3fjQh0DJgx{$!`>T)ZCKmwWZv#X<EU~N zP`s7YXv_+efD_j5{+DcoiXI;bHD^yxr!{v%0T3F+nI90;Kizm6eUj1LIcQ?YLQiJJ z%wTE}frJ4)Q;1FuB-BlznvTDtK#?QkIinCOgF@^z0fETI-d-f4#SK$aQwFWcZ+wDC zh{!lfs;jHfxq#LcD5M>}rRz*zctbGf0L5|7+}r?NzbJD+ReS?Rekf%@gAaBx_B3b) z7;n_a$S%=Wggl8!5WLd)Bb`XyHUl0Ko&r zPIL%~*pZDFY<9A?G!ta}e9+Ct>{1$ffAe{QU{CMSj!Gfg&l)-A-!LN=joaYXSXWVL zLc_S%^T=%Qv0eo2FzR3pskeoBP0*Y7{G85A5`ExWA+t@r4F0-r??ZvA7& z0Zxm9mlr;$ZX+h2!%k(;p~hI zzwhXThEd5_$h;X?Ktu6&m0=)`9UHx2qsqYCxW+&MS!s9aC;J zzY_GXAO)K8q4<1DWW5nS3Wm8d@}bGk_i2v58t?Tyq$l4-`a$y<7M5n8Z4dx~>-6DK ze60FLDkeHYy1Us9=4>vKvfM&I#aV&bMoWZk1? zj5iB%wr9?ippl}yyu8{oyhs5|0_YJmq+R1nQc8NgxrI&MzRj@)`9WMi@|PrZ|GXMS zjvr>?QEjhnZdN1*4|M#}eRHsUu!#Z70+H)#)3i?z8rB80)m0$PcXOMao|a83@95~5 zYAP=7kNb?~xmnD%zQ`+fCV{T_xtasCG4GCTuX=8?@#yy(4P%c9fGVNc2fjT;b;~!1 z3eY_=jBddhu^oT^je)s_Slx!6Ok-sXJIASrx|!#=x+HJreU_Vt=SIT-$c%VCv{QpD zt4csys(%zqII(Ta0R;Cn%D_0&CI>0T$*w|QExmCN=6N2rH`+|^j~1x9(T^RG^QCPHlhb+H+&Nb}>ra2Pw$poZzZ!*YsJIG z6Mp~>knpc2SolHg3W^#oSI1zGggP=>yAvCSLqk5Hx}#JGNf@Fp!{!&fLeBI&JaDz@ zJ=I7vj`Mb314wD^!43(Ful0Ahyr$92(SD& z)j1=?>nNxOoY0y@MC1uiZx~C=#&L2PHk5RB=7aGe#LVsa|DI=eRz5zy;A`Och>3}z zk@iy-?q+!X=A4ex07ZFesV>gGP9hsMh&vC;3D%9j7S0D#T*$`h=-OE5wf{sfJ^8~;`2Q0vAoeMook z|I0rf<4s19(;7!V9o*l ziTZe4h|p;Fw70A9`IjIBMxZ-^H|QFpVtmu%9ee$1ObVPC<@VceI(S;`gEIW7U61>SK8YaJg2aA8eP{cMLP4I^MfJLC~ z1rzSq2&o-fFKz*Hi5;jM-%rlvWf#S=HG^xw0?Ha0js)78Fn-Mr;^MW%@1E!~A>0GD z%J|D@YnyJA=709=nJ8T+TGUaW6)S>}?>M1P0pzt=;cq=u1Mt&GcYbyaq1|y~hkOhc zdRcl9g%1DLI279m9r!|Mjs_t=GCUmD5|D|>1DMjOpy2oJ-R%H1I*C^&f5)koXQ5dY zjjREel+#*czN`<71J|t#_)7cL%%tJ-Z)O@P+S?aIe#Y~jQ*Yi$Wq;Bg%OdV`5zY>< zOc_IWM;UJD_o$8nt2slBSxE!!u)<_K>@qL6ZQg-Gji#8mSKiRT!N@2|{s&%+Ae5sD zPsL{&dD9(epTq0};5ULdZ6_K!q{PL2DR(~zJGbr|Mh*ku*bZ|mt6-pCcuV>C`r^$p zZ%uWS0Lwo&j%x?8xbhk>f{r(Cy(UecEUgMPVAai+qjvRL>A?v&Ou@nfRh!rt;@~Pn zyo>)1Y0w@45P@I#f;_Mbp(rQNl8(zC*D9Ie;_o#22M-?nUSR{^U2R6OUxXx~aTv%- z>we(3)=E@9{A#EM0IQ(23;eVsPE7ma#S8wq&FsXC3;YVMdvYH0a7X$$u7SIR!VmM2 zW5@0fH_&FDpFnjDO*RdugdMK?TgFdD+1+sYv1dt*ie&z3?>)6TC6n@&e02SKFm>Dkl=Sr{bgl zyiiaq566V%<>zM`HH%3B#?cZtYeJs;2Zq$3if&72K@IdU#<@J1I*GCq!J`Tg_&A@f zf)nG(lUI5#qtSh!7-b;b_mbk`gxqSa0g)71hIgBxWz-=wFiu@-z32zsY0Mw$;dKC|AF}$V%1S(!gEhA}iedaIEU@{HSjw08!h^0$eD#kA2FE&E1_zA`R^$*C6asVQ%#PqvsdYw zDDwKhpR0UPxW2Y5Z7ueN;^4u9ux~VOWzE!wUl+6}>oe7CgN&9Pf54CEi|^mRLo36k z+^j`tdPb~9a}J=;>7YqOs1F4Np-X8TpMip~=h6VC;1u#NR%6J6K=;l8ET_1L$ote( z*_$WkPOG-7T$>jzbfI}g$z|{rm)Ma3L6I9}%B`2W){PR0{=ATa1OLLGBvIpmj!dJZ zC#ch2c4~vjb?(VVl8OVWbBhL~o!&wu#Fk+$q+;n>5ofi1Jspnf`@*7&vu`LMk z*6R5Y2AOcgD>OmN_sD(w_H7fTIh{Yc2U0~2jA*!F+> zkCtl+Vw+sR{}aB?7K6w2{i-nB1pXh{R}puYX=4GVJasa1tl=U9#R=5=GW`WFp;@cKSQluT~TrT0e&+8?hIb zNc_0AeXJnHgG5mFrYA-tN?-m>;2(N=3IXJ?QP#eD^81A(048)LZ2ZRioF4{p4FKq@ zN#K+$gC9Y+P>;hxH?jam-dRL2v5@!zKP2c82#6Y(1@-p51O;hS502h!b3viq*~ejgo$|9}}!PkA~0^0JX4oS^{pUTg7S z-jX6h>o7)BuQAh0@g3F}LvDPmFz$?EN$ zop#vMRs2FCH*${ib!lvHj#unxM*r}J6Ui#?#*PLnzYElUc3$wAMKu<-R zen0t=g1|Qb7lJiW(JZu|I`ea-r9$7jAwR)H03WWy80+ zg5#e6+5jy^CDHurE9tW$GM$h;AUUf@|MBHbur8mb(`x3^K1j{J>SqdUo5tloBHs%B z4S3h~{{4!0nldy>zHuBtSR1&999xIXM~q@EiQm}U=eg6bTJFih<>WJRdK7%Nca4nV zH}Z`uf1!Abp0gfok@qoZ+H8o+3QN=oZcNIQrmct7c^`o3X%j2}uh>oWrz(n`ZKf5a zBlLcOdLfX-OLtdoXK44LFEs1DY>41<<&<*nU6{S-)xH*WBxL7k1j>K| z8L?WB(*`x8d<+7ofOd@kWC=0^%uJuH_Mwqg?1V1w5=ba%{#BaYcObXPzdM|U(aFPs z3@ViRCMFKZs-brAgs3oJwfH(rCNz6wm57fYzjW*4mfcPej%-H$uUj}vMLP84)>wT4 zaOZ;n%iXRP`Cpp zQ-R~%&D_Yc95KBUyCM5K%9@5hjrcwWWiY@whU>7fo8p?^%pu5cW#qKf)ull9^gPpe zP~n0qbp)YT>LZ`%|>0Kq^!DURWwhKFO=^pJ=h(MB!j>pQc%ke(Q3oYLoSzy<(hK>r6qRmQRyF##fQkV!_o8Xq8l48f-(0tS?$ zJ)nHbCs8Kp9Q5TBANAPeI@c?tA=|UR186Dv>B3bb9PL0AirS@qSc+7 zeIq0bjTh8q7^&q@2Vv&SP~GInh!IaB9*)?DU^_7+4gAO;8}U>Hzw3Mi9XzLu?;qO|%YscHCRT+L)4YcG3)SiJ zvzNHMlid8C7j(R!azqDX5wPZ_6pZW2yG&zHNnvaI+Iv-lPs8w+_`MWB5CS_0V4n4E%^-h5yhD%4uov7%6EM z42#IZ2Hye@g&`dPkp-X4Z0sRiKjKeSVWiE;NigtNQB_47ya;RMcZ3KBw3(r67`?D7^aLr5VFD4CSjo%m?+a zAY^S|@P|$`P#8iQ7{JsCx&U?ITCC=qo*)ODa~*R-E5B@paNNf)3M1viW;n8*VaaP0_^Rio3Nc2ZUB zNl=JGqoYqs(OMpkKBz389F-5Y2Pum`(%@91t_mRftzG>@RUay+_${Vw2nQ1f0T+z5+rWAh6L!^~MeK_no4q z{)B!3V88aDp-fidKOgqdSUaOT6TexBW3-uo-uxlV$G9|=u;zHkPKSqvxXt^n7(#tq z{pr(Hr(sBJ)7${Vn1Zg~qa6a8Ma_L2y@Bj#eu8pY)Qg~lRmNDQS(gzAxp9g?S)yMd z7vTb;SkWPXF`amjLgtKDtFC^wJoO6_dlmhHdib`a-rK-I828+@flMD-RHjue}!*N9VrU zdw>`bKX4JIynTIr;7{PZWs2N&qoS8UO-&6NO{Q1ixhN~4k)hHEs?X#?^qc1%kJ5*_ zmpBUxKq%zRw4ko}AB8;W%Nbxy;DF_A{{Srlz#3dD2ZFsS?r&g0N0nCt#R!u7iHO$0 zZ{hMAotPlFha;F?$`z@!9xT)P{2atvrPbigOn!FuR3H;$KO`qa&(idU|>@ z7~Lj-fUF?DR)Tqzk1Ht@;13vK8UiRzU>-AYpuqaN(-$qw!AuaBHQuY({%3>t29j|r zNx$Y2J#lgsDA!vE4BdH*Dy6;ydSW00)?AjYzC`|B3t%7oI$!J~^YQXJX_1BPOOrHN z@av236WVPARWG8mudiLkNmTDqcH}}qX_F%Aok&`3dZp@jvik4lF|Y?cSZSbekSTeDw1!bG65Bwf zOr(p9ib@kxkQ}6eGEuT&Ba5|#liH5VZ)gE6NB%ZUs07k_In3nxg#4?uPXIP;n4g-0 zH&56M7j9LYB>1)^NX4XQX9uD(@@;e-5cMdh)QPJ6VGmeyMxPq>?VQC~yB>k!;g(M17v={UdRrRrC}ESY!O zPDO#gThQX8T~M8E59B+QS8{{0_yODDy#%31$tMy$0zDef?$SazD|ly zz|9=$^ zadH3fhZkb@h}!2A8sAV&Z61p{_>@`sHiMk<*n8CpzYzgf0G=?dL1DWZCQj)(lft~ zGAq>-7oWlg?6m?dM+V@D{2XIF(4Nl>0s4DR%uex;cBGJeUb$3TL#a#!uDMx$2&7X+ zdU|?l>hy1Us0hRYSxt|p2C3gikk1s{Cm z0Y!;*QGCDhJAExN@&iH}dda|d&Jrr?@FXh%^@R`vD0FK#pMN0Q1`dke0 zNnY50Vjo8a2cvZKQb1S|f=Fa0*vy8TuuMW?f>y?hyrVl%o%nuv@(EcDpnb_D2+!hTqXd0QNrDH3#_TopwDX&0NlBn%jya?Ir% zEwTR^n*3+SJC$u|V*MMjJw$I^a9Ufzg(_}v5&3f63PSXJ|GlYv{DP4AtmD@BIjbLKE?lg;IPVo z)7q~vSd_tCTg{X}UPfv9w8N9CLYjv0eaR={Ie0Azmu(_!x2rKq)D<4cOVHy3o0UOD zne1@#%iZsVeZ+RN?k|S}nvRnu%Nn&nF~{Y|AKxY-HsVFc;iE_Y=@Ibh)<}oWUkwF* zTF!{(Mw<-?@{!-`4;HnvwI!eTV~`cN&^+&(Y22>5S^FE;%h2BSQB#+4xjsqMQzGc`qUxggFWlV6QkDrrt<76><+H)5WWqd908G#< zPOQEi0C961K{)m-!Z;lphkQ%V&HutiziDb}!il1#qboFzOiCID8G_E5BYo2UOHJMc zeTmyjTq?F#tcnRLv(RHqf`G|d zlleexVBpksUx;Q<@&S{RHjC+dnV{y`3c5>6ulGo8Jm!=hhn{-y>(>_`=*fgcssK0@ zTvG;4l#wUbfWifNIk~1#K)5OvF)5t4R+O1)YQ|o&6{7J-5jh;{!1SCLD)%qwb)B!M z8$>k8I+wo*YwNUYa;$NeBf1!=k>gIW&t14~JnC`78I>9}x}c~XVx{<>pbcBvd?IeZ4H z%TyHBgnlNpcmeM>gq|}F0Q<7m0FT$Z7rFsMquzvuvhq$67*{hhO+X;%psKA_S64To zEJ8v|&$<7GyKI1&^Nt{+KdLi-VRYMp-TO??lRz&d@pE+44o&TYQHZWlSPoD%zAvg2 zkWBDDn2EF%WqCd|aEdTI!7wv8I2d+yU_4ON1vd|);J?L@y<)~2_U z{W=aN4W+bp-&G{VihtD(y@Fy-Fzm_S`_UCgdG^*v1ZB9_4*#k3=8_W=r=i$O%Xv9K z%V#f~JjByF064@wXYr}bLCqAnUdc#EbhNbUF+>1&D~7LKX=uiM1Ej#jR$5adF{8BG z38NCMmu3wQANIw~MRA}atpbH=?8izC!d0=@_FwR(JG-iSf+LABtW=|eBB^7DU4GoH zNmnm&)R3zO?qy`7J$W)5TM@Z{wWZ|<%-g`*&R)MahnxN^$U$IRQHDGE`mKoESbt2h zwIOd!48wodZAq${T^ow@9y|&ZE$3Kuj9=kZuS`e@sW+PxN!wwhS{GY%i zHVbq0GMJ6Qz)j7mfg6G;&I+#*cxpaES~GYb1+Wm02c(${k1q4p#^F)N0h58SAb;_V z%tX60n8rE|As?AaQ3BgI=^a%yLqn-34I|m`^U%i)BI{ybjVmBXa%bcSd`8N*@GmPN zy^&y*XS%SWlCREQ<@kxNc}y~aMsX7#lpSM9_CF@;LCA8UzC^b;ULOjlyeEF0K^4NX z0JQ#$9Qqa0!5WF)25>(mk731UnV6WWU*Yy;a{4 z14cskJt5xyc27gnnxvX37Ss3!9Nb1M4QJPLoh}F)PVsyY0BARcG!+j9=!Kzjg#a`- zoj~r?af8a54zz#4U?w;uompxS8%?|cn^G^4+& zB5DV^mcTL~+eU_l6?uyjL@>&PViHa#G(?Iw0}=@&AecBq#1rg$jH=^-C(iF3mL#p@ ztQ^$TZ$Z`h2#WWg+3Opa3F&uY_6B0Oa@s8`e}0lWZWM_ZICR9Bi{^bFk*C0_T|_&< z(RdWt3>D*gDA#B!SBut{`Okfpl$7*;H;_(j3&@%QIWL@1yi4$vf*N2!;thZ*=D9sn zOi%YYB0W4Z2}S}yuwl?e=!ZE(uk0XZ#|EkcyE=*WLyScA4hqz-IN9vNzQfx|>H>?6PWf4d1S;s;>2}2HZ=u%Xq&TC_jq09d6yDPwy+8 z*B&>%STdU)=xg&goqAyahn0cp8>!zE8RYg(pG1TM?a7v3cD7`*$~SEWlr7(JB^c|z zT~;1mr;9wttU_{+I~ctlK5YT_hcZ(}=09Y-U>{y;WSvY;*#M^xy~$XT9eniPx|Mdh zi70;Wa9%cSRKAo);-jq>EmHSSJ0Mx7X;J5)B1hvcv=&u6xw_|ssh$lp99l3LDKw6g zA~xqRY>sY2|Hyo)sy1rn&@QrN{qh%9My5CReJ56|nMC=QlKgnWsF)=94$IGv9L8Q3E zbKL1wP_}^RFZ77!9r9)h^w>e``DXpS^%3zRl?UbfGx!&TXWsMHj|}|K%kv73TlSzk zFk#dhpF9`o)G0pH!T5kC;hg%Dpg7j^mmLP9+ps(-{eg;w)@RPk|plDMXMh55+7YVDBtio@vgU9QYOWM{vGWT zzq~)B`?|bH7}n<-FE)*#yx<*sfiALW%a;AKqJmcyJftNRUoWd3wPeq%i=t@z)Y2iB zz1-?1zW$px%iiJ_>tttJ$4{Nm!f{KD{o)@EhD7unab&x_9N2PkY3YI)_5n zno0zxz^-5boyds)gCU8^+N{(YI&{^kBV2jV-fex8g*M-TUJtHz9ZPj%+sUv-D6Gj0e?;7#S)F&F*g3iv)|oKDxc)F_NyV+WugXXx}Wqlmx(Q$ zJmsTnWsO|mb zmgOjMS3*c8m^(XehN-RNmB^_?eut^Ek{kEaLuKK^YJw-m?((U&jq$y{KQETnAz#uw zt93_pQ0@ouaJ0m zvGPDdz%2TwG*Ot;zwCQ+eO1vvP>jagJIP;T;s@VUWSC`_^Sg=mKH!;dQ|VXTc#$bSO8saD zAnW)nRot!^%vsp08z{aI=HiiSB3bzASD!CgJvy9oi)oR#Cm0A4Q*)X z0?R#8;jEe9e@>ID~J)E`kRdp?-g@y__Z%W6s{7r;Bq@&@$1`evr(Pge1wAD?Rb#Q*%OtKNN$ zkJWhnd*x!6ZI|#*e|f*<|DlcRf3}Bl+5KmqSJCgeKaW1wnS;b)`2?;W+&2ZQGIgkC z{4NmhN$E)mPY%huetsEI(sk=Pnv$QS$z(v-eS;JpXmCf{pHeP~HE51OH+tUa7T|)4 z1Ycj@PyQYbweb1p(fJzlXunURlwzgIaN8@%+498CUgyF)PHrc@fXjdi;Kfj8L_&wE zZaRn1n+4yQ;8Y41{h=FpDP!p|GzL-EnFP)x>kMp9Inhz$;>9&y_I};JzCSP!ck7wP z^WlT;3(VIYg4{#MluKMG$hgpB!Q@zV>2%Di3`<`2g(UcnPBv5o#hIO*eeyMx*>u73 z2z&$F9#=T)0%JUpbLBVan+Td4?*BfW2ck0q$3ZQLh&J2KuB>S?ts_v;j}3;p`g*zs zMsQkfYB7Xlk1yGAf1@>R77iOK-|dpahug8=5%#WZt~*ER3pk2HZ`gEfWw8sj!I(Xs z^9>#-mr|I}z^`MIQviOwItb#{YLh58|E3f?Hm;)JgEi|a^%;N$P9M?zidqe$hG9ANeg5V-uI(Baa5@yb)G{ zY$26-EM6ZvgDIt`4+0wLDCPdjKnNv#zZWU5{dn z3BN<)-;fL*WN3kC@J@E50QK+~DcaSuc6F6713N!MZu?5WddE1U{F^$mAO+VX*&sn0 z7pQ-vm#T$}@m#6)Bz++DefdZV((1lb*-HgigYsH?lj1)!BV*O7O4Cn~P=p?#=n91U zhu@xRp-7>-4gpsmj07NQ6R4n>(R)S8k~G5suLQ&%m$Jr%!lXc?u91}oXGDEbAZcUnWS^V8dDv6?h{~KkOhiu`C9QCY0ShL3;knOqkNjRwRON> zP>3+;1T5_K;$3Q`P~$GKn>w|f{3rLB)A5Yt`>K{t%4n)9)J}$^n-pq%OT4bKb2OB} zGX8M|$Bze;%V^7Um|uIW$Ou&y$riJknRvjH3 zfqxo(P+*2xGx5s^n60PK|I12Ry1O@z7(?#Whv)g7xn9`1y@*w&pG+JS;p%yx%trMO zc}{OGNrE78I3H>`+?sx|B`ZfkdK=?{T4F)}y(?DzrYj-xx#q28lfrAkNi6)0)vKO?72 zsTGHD#>)g)uP0fG^2B41jSS|P(#_9xe@YiX2D7=5wj#0wNx-63w;$kqJUGkq9ETMe zOqb3G&lQB{`*S641lCCQ=qqdS7Gow5Hg4HH(qF0AnMRy|sp=3NwqqLuACO{>BSrR= z+S(Aix7@IGlK)P(0~pk8^}yl>lz>S^a{0-ckcZD|d8InOEew*-Kb2OubaW(gZVN$5 z$Q|ea=gIziHUV3`+_GVI+Z=qYYeD*+)d~c3^w!je%|nC6jmRb&I6W}?@q0yZ{U?{H zcXBAClB&-v+XvUv5omSh22e?)dH?x1*Wske!!JN27zAW(<<;Nu(z)v}t)JtBfHSuB z5at!DySZqfza%~XL2wFdWkhyr`*cY?qKjBVI|Tt=@nE@d6Ij=gFdSo}qco!Oarse% zbk6blmOaY5^7$hDtHn8~o$S zwpUz=s<(G?ast}8e0fE(cCNiW=buwTDa{$5ov$OKC|8M$h~$5GP+;x31qe;H>;yhp zZh8}>!4!m_vY9({OaHsQ0J^KKaVJr~7=DRiQY`3NbMqo~41v|OIf$C+opl0XMrl>Y vSl$#()u!22R%Y`iO~++c=S89Zd%-HS?qcxHRW{p%_3~dH#f=Io2q;yA(2G(91e9v1(ggxY@4a^mf=Ca&BOO9ON)kFEz1Pq} z=)HFcEqCeOzkALY-*?71=iK}L0gI6JuC?AW=QE%A%oXxhS&sNN)olU-0%GtRX*B|Z zTOtGmH;{i{2R@Y7{aGwAy{aV8_brXB*JcBdN>c1kIi2?%+?h=~VPWhmwm?**VXdgW==HzlGqRybZ zJj%9PH)ZFR8Q(!q4_|*VQ{=Kxzj!vj%OsKwxHbU+gn=&70;j+O{FQlr`1=kC2(-Vp z%UvTNNRWp8`4jl@iNJ~L-{Ze-&g=er`1kD=#J`94AAYp~PWj!Qu-+g0{aiqM_4Y~0 z&3_I*WWIvj`R9<}^~WlTe-A%h|L;5Y&b?IyDT&V`L}6&@9>a%EI=KHmV^+lFONB;$ z^V|=FAX;-3!o{m+Qb-&L=1uG&{QUagdmw;Jk%!t~xwUOVTL*{USB!i~Ir?VMYe5^o zJ{&Y)`B|8Kgy#G3#>0R6d?i<+2(hWq)l0F4Aepn<$n6DL=~Q67+k2jpN^Q?#nii1b zRJy67%L8A>@2eMNss4K&!4||Gvf<>jzEMQeE5Kaeo_WMd6`oV61dpIdP+W%ydL*i5 zqpg*^QQZ>*@6ZK&?QJd0)|Jx8f6sTMgF8Rg<&6Io6C8fL{;Xba<<5I9F60oQo~L9M zTMrEt1w{;0*F-Z}*Y=xSG2Xx_b*_M^bm0|n|7)@0TQmY{^6QXrGm~`*P0EQ^zpBMvpET4H3cY8f<U#z?Sw`ps1%|_*ZV{A^r z{cP2SqK)LI;Z*g?D&@npf`@3 zoSd42h`VW?y{Z=UdYQgZU41iOMQCKK+k;C`P>`9~yrm;rRaLdi3fz^x=-DPXnwKdC%C}Hzxgi zQXBq65yFzf<2fHz=kMh-;)im-u(+se-_OaC+lkQgwh0@eg=?MsDy2R6tFnED-OKMp zrP(C=u8^4LtJ`$7LPsBErX@1W#i~>&B>WvFZ=muEg7?>N)NP*;7C%lNf<+(yMn&5g_ORVFC+&8Kg?QPT`g44XPb7Mm>eJX+?{P=l#2w0 zpN}mh^w>T{BA~&*Au43qT*1m}Er^&}7d|@I9P9yup4HSKY{vZ8rhVcJ+;)F{ygWZS z*_jC#DHwbZ{Xi)^9D2>K+!|ef!acZN`Ff~B!Q|Pa+xrKYR)pG9hT0*M@_Tf#BRU9=kL>G>@8B;AuZoke0On3sAwpu$EKz@ck*L78xEAKKjsh+e6WcUIv=rQx`AeG(4MJ8 zwQQ{oEfkv3&YY!f%?{DIV6~j|U{hPVp6)vhR!YI=BF?|cFSh2t2!Vdv<(m0#xq`ZI zK@sj&dpkS(;ycfS*W6^;T&ro+GRLS*$c8HALx*5YS@K||y?zoZe$S(I6+wqd*D-yM zHE-Vf8g38>L@gDze)#kCXQnH0=Tk?Ig~|1GYtY||OH22t1%10l*sh>~fi3;wdU~4r zAXWb;{{5kx{QQ-b6_r%a&$5`~_N?YPR!+{?sO}|aHnD63LUVm*I6u-E%)Lc?kC>QN z)V-K=>N=hXxP>^w)GO!_k+vG;izs=K>81aLl8 zvX@t)EB40{m$hdmxa03P!W!|)2?t7sQEf_lt>a;sAP= ztG+%3TNG`nte9;_6buK3!;~M3j5aq*wbz9)Ggr zQuok13x1KM?X2OoXTfq-+*@?!_wEP;E2qEoLKkVWD5pLWu?6<0u*))F4m342hh}4A zW1SY-qB_(Ph`&0?MwUreX6=3M3s`~ETc)?)yc?NC7 ztL(w}xOh4d*Q)aJr-Iz}`#GIXdv*+xgGqe1NN5URuoy+@Pw)_-sV8LXSdSGaYYGo*8G;&A6DJE#fU^2v^9#yEqxhQYe9$_LWM#VE2Uf&xV`BqSdHmATaWsmdYohC`gRa1mEDN)^L%V zz^sz=RMi3OwD-L^7;U1WD4+by-?w0*_^>XXqB`4gI`I)v2$8~0qapJmW~3yV6tHy- z^~J?K)`+gbPL;l&A8(-Hrh~_J7@zY@UN8wssm0`rxQ(@6`c@khjEy%^$AaSjt>f z>0d8ezbF3Ashu|TQjWoSC@61 zr;ypysS~su*xGStgk28v^P)SkGf!|7FHZ-g*3Ww5mxZQ1{jM%>`^WZEKblT_lG$gT z;zp%qrOzblO1b6Vyy@udw6eF4523bC%(*%Szp3}=Pan=#u|d>ayTJ>JFs%1Jx;&A1 zf~R8D)_?QnEB`BhO4BoAhr)}6C>Kr^(eqiQ3X7eoGO6hTa14vv>1d%|ryZZy#^Ow6 zP!J)}28&8Msqt-9-$uWEhfrTbQxBq$kZif|<6G^tSJO91g6^m8(2gn1 zD9Y2XT6gpoe>YRU5Ow4l!uV8C)H!NyP&C{4DTXlb;KU8DIwF1fIW&to zQZNH{aKSN*)}xk~9)All5~AY2912sBfTlhg8@yRA>$kR9c_~!XptvYsyY)&dGM4Fqp`miG17sD59y%L>(9Zz6R; z+wrLMbfJ4} z#-N168H~DO3r*T1XvMr0O-&cI>3kH82a?yRh`iO*)wXLk>~#PSS!LF(wN$i_{{HM7Fs6Z63_&iNb~t>1>I9ZFzb5cD+Yu zUp2|x z)rl#<^JDzL+-wi@{9j*<6slvwEuMyUaj>&JJ=Z7ti-M=&!tPkaP&Cj>cjLp^r#tMKr2A^zus}8X6ipngZ4% z1v(Y>&{@5!IjAJAFrI#7IX?aYqg-FI0LM$t&5HifBD|X0(h2vA85P`^N-`6Ev8%Cw zq&6Enq)Z|lm9v=PyB~6KG37Bc^my2!qZZ||qTEU;rBF?C>MINYuITsrf*!(YK*Uw0 zJJQH9sjqO=zY*R&;~)}m(f?)$RarB(ZF$*Of#w=THrk^55OD$}cmsps_fDPkf3w`# zk~mjD7xKBc8m6p3*3Zt`-TJTK`=?eLl}>Y)e3HksHaL_ar2xO%;e$$-OH-aRj|dT{ z)cbSvaffnySOZqW18h=viKU%s2^51+{JzsBgS*feP+g5pvDI_LP zlKEFNqkZE7NfP>uS1x<-$@e1ZKIiY;(chTltXaA~ekNoFfkgTYP~DpKOpHVgD{L~- zvhtn`dve}ECptpCy}h9n*pg%3m^U)k96UTK%HZk707G5xvkuklhdaUBWX#H`RrXjB zFfr4w4NQJNVBf>UMdvM~q)fozJzyP<=vXB(sjs^#+edVoCVMtZv&9a00idz|DCsij z>?}1EB3xOv&{haqXp5v5b~g14M46P=kz4eovT<`COW@_8(In^ByHjkRJ(3Nl;?hxh z=b2bHhj2r5X+F2wH~l=An3BTilrw0lsH8+IZY=FAr}B=Sn?3&TP2`t5=#nqaIbXhf zWXQw)hYR>3EG+EoDj*=>oO2ay(|Hdn{SyvfAtYeq;YhHw8p;7b_T#=BJ0d;Y$*A@_ z7px{?kYL|GfIuMp=9`Ii>iHKOu2+}PFik&yeRK2WE5CCN4)$7suBKM@1jAIu;Cqpe z`OHUF2g_L*#q>$RxH#3Z&8O9a&Kq{9PKN?T6f!lTWukZ#0MLaCZg**3SPtifLlJ9- zXBTxZh3_AE==d9hGPS+G$gy#8MQ7aiqF+onanVL$ww&>@mz`@D@R$IKJe7F}z3ox{CCVc*WSO)l$vN|E(v zA5R#~41F?ppnCQ61ZRVI(FQY>EgzdM`g#_rje6Xc-Ac*k8NIl$=XT{^^~&m6R#=Y~ z(X3w*{u0kYgXffe=Qi?@sg?yL6>J0_4E7fn4C8IqPsC5(aQB$$_F8krFV9@9Tlk%u zvL?)hikrif^IdT1ADAr~p!4(an>P^%#6CAnVJS=hSLVn_r5y$dz!(NGMn*0HP2-85 zRK~`WbenX>hi$T2DVk|<4}aoAW&{6n2pk(3VReF!lrD3!BTU}=`PH`|l=Jz7SWv~q z8qTb4mV-ZjJi{k{yccF|Z5tLEsvTq2N-4{#Jq9bi5_5E49r&IthoIF^a0v~3LON9- zTs7a#eQAUA*^J9D1vz)XwEU(T1Mso2BZ=dWIt^oClGkZFn*gW-d9r`7M18m?N8gFs zImYY^q)EJyOylX4R~AWFWCpP$#Czh0idavUjYAq7D!+zCHaaaUww@o%UY>&+zSnx} z#B12JXwoCI3>*ESufWBe4x4MAKKmFa$*O)BtCc=l=Wglx1-CLO5+ zOCxlk>txm2PHQt{K(f*1+u;%^ILn&@dha<`QW4IIFI)~}bz#e*wP z0r${xIDL5w1iRe9U#yv#Bf7{#Z1j~;!`qJI~L+5h)4|&7)f9*293U`X-dD6 zXbJtIC1wFYe((Ad^_SlD%D)~oPavyP`v7*}4aOYns&10W>@i3sf2PS?m=+8zN@Mp^NSD_eaR*+9 z)Ej9#VM+0|Sjyz4={jbQYSAIp3;7O;?C$TUfARj+>`?!u|C(#U)g26Y$@&w8ab0l+ z=I6{;_r;m6J9n1o*-#iRhQdbaEpIP$hYDh`V!iUBPgX|GZM=^JhaX(MfQz2=tNtW^ zt)$dDiLePKrWUu_Uo7Zgt*$vuarkPK+ui8Vg!3<2q)YT=n`Y4I5(I1m5WQ3%EW0^( z_&e8;`qGa#8a7<-UZNdcue?La4Gp-pm~jaZBR&#c&z$CGKfI>`sN|cJ5k;u2%&izM zE*z+Dk}x4TzDqmrg}nGHI*`VrZDNf;N7<+^rRkMPzFO_PaG!f(xUwkw2vj-O86@$&T@Vb@Zu4PNq?wN94z*208#3I$gMOoHY5(`f=WiesP9`Q0aIxZiLw zt5zKasa{u4x;nt0_b!Efob{-lD;(ag2dVpHh?Ik|w$Q)7 zKd%p{!)#ewS~`x?$U6oi$(P87(g#iI?(K1MbAwg-cMYRp{rEiv1(gJzYNUkvJI~pl zAK`k)z9iB7gRU+2+JH&(17!s@tKG6RR0n3Rd-2Zxw{PEao?rEUN7+a{>Ga;b)+}&# zKA@86 z8#CUm;Ass*ZF*|T4W23@&sdzb z&%x!Pr$q66W8Ryx$NSUXwNV-3aNlVL7}MwYUVv2`K{+)3bVl6pED&}L^H^OUB#(=0 zcX2`4W2rbSs!w73>-+=+ZzsKr(iNVb&{p90WpGto3YivXs^oxfo(mqDot@)v3sl%s#j5bF1Zbx@vP;Ciq+|^uHAw2q(Qk`CFTR0Oe z(x)p)YgkZZ>qe+rm@J%hz%r%TZgg#=?1`k(ikQ{%TIt(#AruaJ! zLrui7-1at*8u3<#jvQH<*THw?!kjE`6@nBbVsF;`}@407cYFlm3UTp1$hyo zv>R~=3AL#um52Poi{gIg@|Bl+?ev}4kgpx~cg?+t>wb$Xb*LI^FB?sN$fh0QM3uVo${tHssP zJ`RKGdQaI4xW-&)SJO~|o<7au&IAArOo&u+rRFrAUEhD>dZ&=2KLNi*yE4(m%7$^H zhrIUT^tly6XU6YDKSaI#)ErR6;;t3a65@nx(B}RIC;h zQuun>0+-v@-(L!YgMggXtc!m1M;pzp5;xQ)3T#eAUV=jf*J*3QwNyU0Vz0c%vma`w zZzybRXm5bS_|ok#)gmzqcdaERaO#XhF~nUf!lf&lGP)b$_;G<1m0R2j5kl+@SJgr@ zk20c%npR?b{et7}WY`K?xrX_&$>X8lMk!}r)Z6A}7MWM(F%rk1AP$}NeqiLHRs z9sE?K+qr~6fSz-hgT&FI88cFMNzD>sA2|%NkOQ$zE?O6tkHiX~$2#2{zIKlDFbc9M zQ&Q%JhK_*RtJc}l6viu zi?_Up$9(o0pP}Q4@4&;Rs#1QJ@mzYwCiU5adYrxc$q63T*cvw(85#GK`l^CAB^Sd( zL*gDD(5({O;qbTp{k*oe&l3|5qNAC}_D*S!3ww#p0%9??fM>Yut$0r9ex5 z`ZUJ?z6(bm;g5`4eQY*(hG@baIs!ut>XCXy5hfcMV{5tawEMFe z9Nkk5H+(L$%MCAZBN$jW#=7k+swBzkXG+Dj2My374&J z%hW!kgH?1Is2Wlyq}ua;kq!j7r7-8Np^YQw2xnpaIFLmTp~_dS!S(vc>Pk_4cM!jb z_{95X?Ai)`ewRg>)8F})e(7;9^YQWq-KC|XqbuR274lDQHcBAiXJ=>UbNM-7BxUB_ zo2+8dm+ZFClLUlWahsaPJYWqF$s=KBjg@ogj=Y*0w7Aau$T~?`Q8882qQtvKSxKS( zpidO^`i18%7m+2?YibGqC5`~df4G3Unz&7yu@Zd_t>P%V_AokHS~A9_UI{!d(q|i| zR(qBU1;;QiEz<=Y^a?Sl#8UWIIxmse#rbvq`qgaSo9qVA7$-9UhQ_N&d=~Q3<$$+8 znelOmsJpQe>*hkWw6q~@7FVB}P)zwAlx54I9A>oi^r$H*g&eLfau$*4$nrO8rwi>a zplHSZjwnYhm#a)|XOr1HoeHfINRkVuod3^QSU~{3Cp9${03hy5*fW3J+F=aQhJEl|fWbXjRub9D#Ug5; zz&0!5J|5Lq#P{@+9Ua{QwypExkEx6()L}~q8IUVU&{s@{`&=+uoplgTl4xX zgbQtBYfpCPq?{MH*uYn>s}NWz=4%A6RBRHoBOcpc*yh8LgO?+v8)1a4+q+YIJez6# z$r9Mam){MqQ9F*1-^w@iDBy7AJGWkoTh+D_{N zih<(KlsngZ1$;;ZWCJ&Df75l?X@a;4kc4m&Oaa6lbz`O zHSzL3If1vFo)%{EY^L!{2k&o3@9Md~$0JG;fwmbFP3_z9J5NcNYS%i5Yo}A^)~v`a ztK0Q7&UuZkO?|6dOcF{uDKTqO{pDu96uC{{gy-?d5?iUAQr9DzzFeLUuMVjDVnW;of7j`O@wLj)e6!3$E&$5e%0{{o=GvNXeyM6+OYt zGM!|sN$?~38f@{fl|Np-`6J}~)ToUW`)hdf}%&_%1Q<3D054v-3Hr^3wK(SZBPX!*!o^#SOkjF-`3qeky*$dLF=2 zPP>Ui3=!5QZcfz#ybz%urC!U#&t39b3K6|^0r_>}4NN8zv@7DH)hCXZGt*omzICss zzr_aL5BcDboa(qy%tR+ZNKijN*N)F^_`W9*aJ<79L`=k)z&Bgbe`$7^#}z47zF8tl z!Je>KKCkP*IF&xR?rfo++nH%8K(~XHN43unJYt+j=!Rp}ECj7bqDQcFt=1=&QYOY^ zP=VJ2X~aJ%d!w6!fuy&D(|n8n<@w6WQs?1p(`Oc?^x|3QuK#s{5AG!zfS%`7lwO&$ zra9g}TlQ|PV>D*V|KxLI&^=mS+m823(BI-1kZ>^~H}`v&i4DIc1lrOiT+?KHz&e@8 zT5%>!QmX)a9`r@FB}KCLwg;Zz@OEUmMgKOVTttN&%Cirz#YZNp8+|^=^B8 z3m{28Y$(;1Y5jX9rv!S<^}%2niAxoh1`9DXLI`<1v~BeBXvJtGC~ zK`glG{_mRy+W$(a^>h4>tm{LG@hs4*_rv=C6KR)R_@676+@+HyB=~9e^dAA(Vfm*l z-kZQYsN%z7?ct>;%sfWb$`UKW^G)+|j<8{d{lA9@r*7 zk8<06#zgexW#E{EL~EumoQ1A#W*m`1CiRfK`&)K=j1DP}1-#!BID2)$wx~S>78en* zn!;2m`t~R}NlcM$`$wAYh#SNtE991TnaLtP_UXAlMv8u4^e3e(poEw__yT0VNrGli zO7Ul3$H#ZlMq=;SYHUrWmwNoH=?MBX=PoK~QT=?)!J6)^Fqt3=F*IgL3rX`xgUJ_kbPyS3O;%jRLIhxrJ|~ zAeXA4mYt0y^l+Hg-hKvla%v^#h3MYiZIQKBCv|HWyffl-cd{6RHm;~8Gd?s43S6WZ zFWQ*$P9vp+Qzt*3-|JXbn}_adXgv~tCQa+mWbIOlv5F2kWcobWbo@$L0h}uZ)3i@} z;FdRHpljw}>6|2m@KcvM%X!4({xn}|he$vH!fFSkwGyTP@_~pgLjvzBLGi#O1$w^%uYeBwI8iHA>feI%$dOI4T zx#upA1{-rQWH*DZmH0T$9L!HnU6=DOlS(ToaO>1oOD)mYB<-7g`E7Vf*mX)vb@=$A zEYBP@kz;4=p2p^YsjD1f*ifVy+*`dRl6C^wa_6|&ip=)X5+JevQALtw8GWWsCi=z} zbO0}Md80*bJVLS-V1V$hH{blRTSJ&HjpBt<&UL*q&ZhtIjMIL(suE5hi~|oq?>b?j2Rbb z32qW3lgko(Mgq4({DQ{wnN6dgHvchJRY5P(`T&ZsM?%zcAd}lZF(ZSg6u-MiN%8Pu z0T}?S8DKXFAROL;C0wP)<_OYg=5}j@F6g}IEtSzMn9PEf}^Yk-0(D@~X|F$>eo0w>AO zFK;udNRbSqy_-KvD>0^RVpQli)bV5W4Yp8H&!Eg>@gtwvG0DOt1q@UBrJao4WMFM_ zjIEZ0cw9b9PXN}dc#l?`Rq@yO4PhnF5_0MyzLF^>;KMDe=E7g`4?Z{N{>Ykif0nOG zy7+5obnf%hd6O_yKUlW{A#XhY(;tB#CIR~Bc^3JIhD~5cLYK#Bt4v+V3jDp{L^gZ5 z78D2fQ|~PVGpm19{_V3q*vJ8?e;~!>TnI=aN*w$TQm!V7i;F+sy2swY-~^0n$pf+T zg6A`D{!Xr9g%47u=e79UXwib@Blo5jM7v@7+%pjKn%AQv8*ztBe)4t6E67MWvtEWI z2IlO%fEtFEBN)$o^~X_0cZF=!Ne}l18{quOS{t~?Tj;-(y)Ah8BuR~r2D zbl7<7G$hMT(~3#y>f)s6XUc{5Mt>Loxgc~j2>ek)&A{%Ct(00_nW1h0{}Zu^*he<8 zPrSuLkQ24Kaov?V=lCjR49AY*m+ z6rvUCdKA6vEG-k4Vxpp+RJ_!?OW?@0-ZYJfrvUgaY6j+3l-ogAD_9KzlfIv z+$RA3mgEka&4O>~rx+|nq1T55oyKugARyYWRU9qW*8b?9^*#+^X71Y9@js~r9K$U- z&-Z|P1l%Iv3L1orTfUYCTy7{NaK}w)T_c#)9scYDKZ|-!^dK_bxl8+f#^Ap7$$+BF zMmOUYNn~=t`i)8BXRfKxb+?bh)4Q6Ze5tfTS^-V(Z%$Wg{u=zyqp2i$V{Bw?M3 zbarwEJLQf)bpbjBXKflhJ!jv)!-#Q4CX`GryA!`1LGU7--L#^E^YViscQGF$*{1nTlBuW&G#fOj!})5``tWVB!f%; z;Q|0yZpb?&NAITrJP6guXD7QPhgn?#>BIUns5*U!C2So6E}Lc=N$EMet{HqVg`B>N zx{-XGyG7rQ9&J9Hy1?n!wZD{Su?Y;eLSsipMD@8|yZ(4IDWppVa$o5;2>yv+5D}SNSli`&i@Qhf zc4i^I?y99Vy4;&`2?JbnJz%W2kZF7teXT_|37)(-(opHCk@X05c!L&as{u3Kjgh7D zEo}>7oD?rIG(eB)piK|OK?;2t;qfk5ZE7kWUjEm$Ui~;3DuF^`nj)=i-|fQcVNF+E zCF?AY+3R3)mpi%`uHHU7ZuW{T3G2dQw+`EaPK?R;++iy9SthpRqSNi188SfVrE>kM z=vfNWnpVMqm6fsktkUiPNA)omMyQQ8xDAE6{W+rfyZnNOKA7Pt=+xlvgTiAh=@}sIYNl+qHuVv*eb>fspMO^Egrgkk0s|$*cewGnB^e&hz zWQE(cH~E?TUPA-~v&m>iCpcz-mgx1u7Fkhcx3!E~s`9)pN)N!4xh!kHdXujT&pxSX z!;~i6TJlZ_3${{>Sy}ho8HvBr3sAb|X@-if7EUT9e;6ZqBPinj?wz}RD0Z%}z^P+w z0z_x1Ws~^gDI`rLLde`aaG4S@IwCr{QylsCFj}Zn)spa-D6aT;N?gS9zzY;Tcebq6 zX)OjrX{3Zr;)WMu$Rr65pRc4@6_&UZV^qnFM#qG_Ql9^C7@sKC!lfF~{__X~f1&6? zY+%+{<$NJMrHC>8Dt+`&|Eq9gIg+l(W z9;n)aJpEr7)eksfDRx#`#Kbcf+ZD)JccEJTiM*n%Ac0)>ByW>(Gel@oG6t#UGf zzk@y=s^sJ)^TmOWezgel&kTPq>ka6BS$?~8i^UOlB6=Ez|6c>3{~FE!50*Kw;AHpO zXz*imdy%!Zs3F(NX<^p98t8NcE%fF*P1zz?0f?Br%+Q^6!xM7O5sRr&pY3eRS+UwW z`YyY>&;Ou2M@>_6^9I07Q0h$%3}g;kM$m}?0l@6=z&MkkeE-Ho)##El*w>1eYGa)$ zb|a#7$d~`b)J;j>)YP+4e2onp;w;iH>X-MUAcrGGTXQU3T)kL1I7upobpDTDc$E*R zvB;^YbPWyZ-<=*~9J-grRRYe`b6G%4OqSg5`Kic(Fs7ua#vBK8xID^m=nfoeK9pA} zf}Ko9DT2Z5teoW&TMT1kR>cLCilxKERO5i5f>w=Ns++m#$e2lczOz+yT}eSzBG2-h zd(3|;9DtU=!ptnYKhaJfFlD$us^Ue$S}Bu~puedslIu{?`~$>f@#f{w4N9e;l|FjUveNKRcfWLiNE%YXz^ z#9jj2X>8`HvSYYXeBH1Gq1kbaq#I&6ew57X=8d!Ckg&U@4wl7*a2qRxe06bDGBjto zQ4@_=iqpJ2%b`q&$85Q04@Si%-lwL`9UT}L*U&XELWwFeFoY28Js*s=uHIDW%DpC% z#?AipC8HR61_>S7pFAUkYf+QYn(=;d^|W+53fD>zt8fUCfN6qQ+QvrFn&^>2r>*bV z)geSqTwJ5e@f4BmWOQ_+EL<|BV;LQyT%c)h68dhcL@O(MZZ6m(KIcT;kiQxbZp8Z@ zADS{FBfe>zZ*_^ryYL3QY7{5eM8n})2rnx(uwC%5Wwdk1hur;VE|$9T<+gvwm7i`F z({)~@jaM}iC2%-gA7PCKboUn=wv&}>auR2%?(XigvTeUTDR#$So4b&Pq`mQKqw)88 zgC2JULevU5Ft$kgi`m}}_qD!0He6`>G+*Kpj9hnY1k~HwELVGx0sKNj{mB9fc|anR z?7;(7EiDQli7vT5u zRFa-KZL%iCEpDNOX7K9?2|>w<^8Kq#P4}4`;uk^=a^p!kM@Q4ni@*Jqkbk?+Qee_Z z=LX1)iw))|qOV5x_(93AH7Ne5lxz&5aoj0<&-%Mjkf)8AcFmJ9q^9(OJ zCunN`+2+UMrjF8{r%73AN9p;w)u6^7tUb2d7#5{Z3&S$4q!sK958pY@?f!VC)94_Z zERC}0i%8{|b1+k~vvwYedVPb*jGF_txx1Eel%N}NRMUBPr=;og9D}Ejd-5eY+>%~WMce|mP$nqjBW3w42 z??xR`Ps-t@A=w`N;WDn>BU3Xu31=zaFQQk8By>&j=^i5T}pzJX5 z2?_aqfWlw&4h84eZ`K>->bkn#Km^FCTe;ek#20YdOz)3BpK09h;!wM~IOs3kjkfdH zo??R)ZYccl0R$L;WZz__!4C`udrUb6L(1H%xu!SY^;)1ORK#&i{QRzfxQFzv!I3t;NBt^2lW@>n5oxuq$r?1uw}W*-iK9 z=$ME1oSu{9S9A^)a~HuJq9zVUOoiWvWPyxaYar`cs|6iFAF7bw%bvH5sR*`M_E3#C zs(2R_-=`)^OMEnDj5tH>v!>^?c!roAdFvbdruG0imL>8y^aCTKY4}sdm>5#hd1L(s zr7jMbqHH$*tI>p5K4CW1tzPy}z~V9qM1+Qqu2mB4m3{wCds2d!*c>_~p)8c51ZNia z$#>^Asikbbp?W(rFw)uiF5*r3WJ}-+Va2pkye&jgLusozNAJ2ZTdYjkpz8i{k-jSz z7Z;Sa`x;d^q1D9)f4@cS+uzeMTf_LgfT`kS+GhtCA3$D&7&FkTaV-qE$wtp_Il$Nd zl8ly?OK1J_J@M0ZSgAa&D~^NSbN1ufa6VuIe^*`D9}%mtXj||!oX)HG@5h9Yu^a;! zb{?yqul&2TM{g@y{|)tsPRQrn=OQ!t&vJj2`X9lD!t@;K-A0Rb%2)S2ZV^;<-Szg% z_;7FOPLcp5+sRJf&(Bs7v!xWm*(@n_No#B8UR#&k`+dEb3F&QziMkGznM~`WFdUz> zMoex-Ji`AVREj6dzg-@=Nb|zC_~#g6)Ju?*+{mI`CF-xy+Kw@O?V+9@Ki=X+p#AcW zn_Ld|0KIgWpb*7Q@dfEMSn!%%W4p_RMuT+yeqQ0@%0C?N7#op+p+C+nsiVKY zzpu}r&a*6F5E!lCd-U5Gv?8tr#f)SCrFDbw?%O*+etmwS-VXvK7pbVJE&9{p;z9uP zDEr&d$!()>ds(U?Felseqco z!zqG?H4SvQ46h`?q*gpbTH^RIwe9+*nTZR%-j_Rmc1KVf z+{|eqdIx24@@4Sqy9wf&K!Jcl8cN+1=8GahL48mplQo$dB zUSf{3KY`tQy_=efDwZ2i2h0GbW5#nK94NN}#!xAVSB6Wwl(@EBl;G6>lx9cTpy@~P z$17-dHB0c_t`U7EzB*qqbS)CuFm20Ayg4(57sxcEN3~~1AlA1i*4=NG>^Rq44nLpX zyPy1UM*Y`?%H0@WEoaPW)g!lpYXJ_!%9fzX5laZS_N^sdC5WQy`-4Re-j@)nJXL=C zvFf%LJmU~@z)l1+ash_a&qV#5WdVNY!%xD3Ved{T!0?KLBxzzIxVsF0oW;mKpHSWw%IYFUI@SgQ)Wy#Mg+U7~@`yXEv^e&qPJt@5QBbR4T(XG49WY-h@<;&tz~8szw*GfuX#j zeGY#T1rQZF-`ys_{x<`DaO2n!n$KZc^aw! zMfCpuKK<2h@cR3|0hZpz@O<(&XOJf9A#V$ikEPuDH6!K~Y*^QRv6DA{b4)nRverOJ z@ax)*ML;E<^>2~X`4-Bs5POZFB>9=k>Su-RDWp%vUkE*qZES-@W6xQz=N6F|?;}Yi z{d&y8UZn5_B`vKEM2#6|u3?&^r4G3DAr?kW(l)-<+>a)VZ#=C>HbUjQm~4r~M0afp z*m4Yb-z!uE&gVXp{SOzA17JC|=^^X5_amma*K$B?ogujV{*DNyme@EBm<_L5OfKYl zZ`~)!380J^Fol{LnhG!gCyrSQ0056%Qy_PVJY;Xr?TGl}pxqNI_nENDPrtIJVsL;< z8PdofMw^z62=KSb%C!>G)OIg*@o>s3D3^?rr(Kxo2zmO*^8lF3)G2 zyScWy)Ya9sOARgo5_i@@;#{ZE|MF@<;!0|3?`$zf1yI=d4ra-a1TO$|h@HDT@@%i& z@M=H79`$=CP=uNtZ%&Y2OHs_*mMxf@n}d$0i?{(=xNbw%b7+g!q?KR_eg=OY0I2C2 z#a|Q`^mQF6vOy z7}5ohSKJ$oEVWKC^%ydn4JxLWM-mqBs>-^eJV6i}gYfg$TuwC*(xWadsAOA?21)TfAfW;(Evj7|ez`nbTQLJAXLI z?6NAcl4P^$Ckvhww0@5uS*>%!*$Af0LG{Pk+4QjE;_e{P;2H7}aSQBf)I>gMVH(;TZC(xmk46 z^#Z8PVkaPQrFXLHrxJdt@DIsD@PT^(`1DWv@Z|sKT@?Q{!B^k&(Ad_}TI+Ylt)q~O zsU_1j#^BF&GPQ|U6WrHb!Bn7f`<4idYA0XAl0vKDY+j0M>z9=Y&vd zmJZ+w{fv*opNad zZMg0d&p)x%La)$FYGNXg72f^w`ak`7VBNGmJx>9!sn4CDn+o0SYMy}EznHrhaC%f4Aol(zK@uRGyfZl2#_DNlF<&d`G+hVK zO1~eS-{Ii@!`xekMcsbyqSk8z3L;7=N=PdyARtPo)X<=G$Ixwnh={iaw2{o8w=bDjOynd|kvE(7?)^Q>pB`@Yw`gqF(lGcqg=5BBx4 zRu2!B4%sd@k@);N-nVh>a7zj*7(%)TPwKkl-@EsQibz^sUKfsXBwsOB4!WNWTv1EI$n_tXSsv^`j4A zuf_^Eruud-xXd{T!Uet;|D!{=|40)mgz`$L%%B%XACgkP%*#O%P=M6d23+%TgS6hV zs{dSBy`+>>6DEr}=h;Js^H*-)kAF9LlRT!`G*A1;{o8+^-3fn?FM<=n^!8MuMhmeC z6)kN71TQVE?S8AAeRv~}u5lGYa_FK&6$>|C4z$gP*Y;#oqW6ZD?{-p%2+MX>1e-zS z9+T*H1C;lgj~=~;^RxD^;NtUGc6M}hH0e+#L)BIt=lPRgs`i?ytl_~g^y7fo zMa}aH2?^O_2-yLwyD0Ho!qf0w#~944dqg!cOp>l+p)YN3YgtKjf34DcS7c}UChtEd zk6bsmNN^hqN+%D7G_<`x47YhN# z@bt&xLU32O0sRz`&Im?h#M%G)yJM##ixGx>SjZ6TpunsVyZsrbYu0bay1vrS6ixUAX@@h#eTHLKO-aKEaB^}pH}N; z5p}P`C3k>I!oEUUp>1z$?n7YiQ2(vd5Z?2(>ByoIdw<9K=Oao79XpeCbm5XGddAgZ z+f$dlEe25Y+~IJAbbeH;KSh(Jx}{-L`f0+qw)bYuSRn{yu-r(?GCz{HYo<&6E&1B& zN}IXBTlE&&=%}ls5t!hhpxC<(h7TS*kC>X6m>;R~g@$NYg0|My^8-ao$ui+9tE(Y2 zLfvpOfi4)9jlZAYw-}BntKE$SD3_3TmzS3zPk_LnM))+)o{P>D z+4^x@Mz3lug|mSJ8o!|cGsbC~ge4d8#V$Z5?l{#_u~0Yw^%^uKg+oRjt^euqGr#;i z>1<;t)Sz1wB$zE7DRSW`l*qxBkww~b&g4|n9;w(_(SA+eHMIeynNc$KYc^ToIX@Bq zDv_Krdpvq%Z)bjuLA~~|4bajOLxi8{Glt#jI^tc_!3!o6gzCC35;VfS#9mnKUdW_WuDkn)cWOdF&1b+J_9SuF9?xT;0%kJMIGrjV{qg!MlWRp$YJ&KglJJMYCxemyIBQ4OC&dYNQW}CrvyxA)3@?sM8~wfdj(FW!*VZjFZ@=MAG`~{{o$=-6_YSlC3ZeDTscZ;@1(u2;^#?CR>OMpYMRxLkx!u^O_s`txNcLA`)ZAJRLX_Y$J?J(xc|S_ln#&!Cmv z8P%OyJJ*=02c03Tlszo*t~u-&;L>gAoyzqHnRX z>XaZ&WMl$6jP{J!wi>LRoC-Qj7{g^qNB=o@`NU-x%poVXvV&#m_UYyJ(gJ#D!dzFd zl?xIY^ja)Ks4n$8r>oa=WchqOdQ}ql=~I`(T10b_+gFlv3UBRp>zK2hCdm7=vl71D zwlRc$7R1t=&fGFnc7RgBrO3XNAE`27h*-~hF=t&P1-%!mNx`@~VLKM%9IS()TD>X= z3!B{1L0bkMaVjd4D@mbxXA4Ik=0TBHse*P@g<-ko@Ls4pDvk*%6uvGt{u5R3y(NI4Pnq0Bv zVC>wrsiR`wEH~Bg?uk2S>YVV}?)N=+;}SYpdVW++1oCTS#N-An;NN`dlFnCYv38?V&4 zy%*TYmm$q^RhZuCbHOW_q-KT7J^xr)?7iswDltdV^7_mj58oNX8zzE^4Q@ic;AbqYEQ?SFu61(>^J*VNQ7 ztER5abV|W3WFuu%u2N*5yW_Fi7~y7DKYJMj4xfkGXDJv9Z5V7j08ibt%Mfe17 z^3GI`jtBi5(bPpa{P?ykv1+S^jb!zCbmVC(zHNG+$5G7~cqI=3EV`h}5*LX^ZwF*8 zgzi+|`RZ3^!lEwq;88@9yW;kWL~7-!7tAp$mOa39R-0pKg4yQ;qCN^z+sLgSC7I*e zN?1;rDd5hQq`?)g7Wj_JuKkMztgY6lHCW=$BrTV}>U-bgQM7&wVfP5r>lNHJ*J@B- zeV=fU7QY04F*0|52@^E*tVt%(aozBGeE24LOLJ0|l|APy3BT0K032(pfYxo}`&FNh z@AO-5G>l8RIIte6=FQG5{fXz-053TcgVLLHB8oFI71TYcDJheali9i@9R@37L7as; z^#(UsS*uNMVFdZdo=sWbz$~vvqmA=3yU~}@UglWFWjLHVQK%S|W}|-1ZhA(}l%~az zwU5SZj^x`zUbCB{h5H_*w@IH%&3G~7%k=n!i13x^2!DDsa#r#M;<;Yh>T~By5_EYG zORI4+)nS9LGy9*s;0`AnqhxPpI``UTzB$2leB!oaI#PnBl{G@XQ12JZlibdk*TI3P zna~SH4_@W6>HtJzfx;h*FOZnZN1Nvln2dd3aILG8WED=08t;d_V9paWHfD&y_cvI6 z`0!z7W(INs#8Wx-o@v`$cgHpn=ADQwM;gT;Ta!)Y*yK19yp2Ql^1OjAVxZ(5t}?@B z?KqlQ9P{?bz+;C~i(@tW9xY3D7#Hli$Q*_Y*!8#5>y)tYEggAz1cz)xHmq}g^q&l% zB*8r7@q1}L=S`01y=(Zf`~{cX5xtRVdZ2aTZsqd&#iG4;QawfAGh0}AS+8YuO3dB> zC9U_GxRwb3s;`6IQVUs{Yfif-wwL#wZD!BjC7J5(=6%=v;o+%uB_$c%DrY5cqfYF8 zKsecWs^XPwTMn^>04u(R+Mn^es;II37j#>5c17yy3PYoDswieqZtZicLqye#YLU7rUVxn#KYV19-8_brhc-SfS!(uh#jSI4E^_H^@qV+>r*HF`w z1n9enR+U1>>?`~H?+M>U9ZQR?hl7Vl4+IB=j=V3^*48;(?mpF-CjaiPOT<{S@mfyh z_JKxKIZr|T%cIki#og9?tqH<9M?Lf{(EY1w;bB?9=Y{ONo^F}zDO8kw?4P8brWvfZ z?r6kxrl@t_&GtT@dO<-wTMqFH>%mtQe7f^x3=j0|Imcs)2g6Y2_JYC^CN8*BwvQ=i z<(ym5(*?sfo+r%Et|?!W$B1OrD%X$u{WFZr-R_b2p2jQT&~*>E_?4`JUDq!C3n>{Y#-GPmI|9 zK*EOCbgxXqeWqZltA;#329)~@Is1VBu?0S zEFjUAQq)6J8~NPVu|nTYQ%Lx`;^M52dIQIbP}iLY5?2WaV@UTtY-SjvjN$ySl7~C)1rW_osftK4cWV_o)LU<>Z(j{97^;~ z5l<}&MF`o9O}BbSaTL1#bEHk- z-p0@ax>Lw(+7Og?O{90tfUp;IR1oZIdW?#KQ}@jaK`&y8(KGDk9iWt_>n~Bg!D*fC zY78mn!F~ZFrh}{`KFyEk><)4 zRyHq^GP^6Em<5+^PHcrDm&U(A*n4V)^7|0*HeR#JCd4n(A-6pvaCs&}X7*!eor&t# zkTfX!)3bUYfw9|S6;{jrOQZX32Gci!J+WFGee0sT$+DqGfE#JnuJIK`#z z*L2|3@UK7_77bL`D7pM-g!0x`cfbM-yjrYnLomsuOYJgU;7lb2-8B5vPOPtFj zhL0=1-7cG94m3gIQ4I)KyyCHusB||`KPzG6y&P<1`{FO3NX48^W)N*do5@XV9mNBc zxQ(9{UxV0*?pWGJ`wTz5=@HMx(|O(CnSW7>`C;+XVsky+HFsZ&Ar~X@AM@WnGj5+{ zyW?+OPr}U_A0w248CPejrJTfslhcROa9!7}+ylXloXtypDFUkU)C#SLQIL5Z#aZ^H z#9?<>H7)2RQA@;1Y^vg`K#?UfYvKTI`;8j%vq4P}31JZzVAH%i*Tft1_VALDl0tuh zQDW013o}Mu@lBLbL`}9QF`(wMv^3;b^>q=shmWvGhXjs!!uwZDoBMApl=H$t9|NG1 zSXJKjjo>m%4Z92xr}Bo$m4iuymXSvN7k~?H!3(IyeeD=5^7E%&xic$%gnqNS)fTu z*d&@ag%3qTTGP(ByPqI`Wjb?=LIVvoZQc z&yxf@^a<~>k=0K2%Ieu1Ld}mq949oG7NpZ-jTtV$xJ-Q(WIl5aPjc9-(~grV3m5+8?}-e(Kt`pyvNbKg}aX}-0@Sk z36XJbvrb_{qtY^Kv|;T(_QNX+vC8^QESa$}I?11(ea5(63AkXS9=y4<_Y+|yqh&G> zrr$Aq^aurt>M;pNiQ~YcH))scP>Jhq!akR0?h_mAX@EtsIv(++JAUs#VBBcwshXc( z_Y-x5U*u~jUQ{>7jQ-EQ;Gt|T2ux!5*esy@DQ)sy`}>gBrxWkl8q1>i2dR0jL#N)E zZ9con5hcXI=dn_(ESTNBAQ;u_Qv5tZDgL&{;b@!^|NQM(g`@x?Ma5U)HDdeRZ)sau zFh8c&RW8(hpTcl=JS{>&b{U#F3_R>z``R*Y=%71 zwrE2RZ?-NsYuYBioU_4DgrlvuOiwLssaOrw>o%xrVvHTR-ErmamFH@nTgeak+Rf45ZZCu$*wEPF8 z{24efLuBMw8j(ji8~?c6CATm$$sSnz6`95~vy(jiyCn`*!gQYg)>hR(HV@82g;Y?Q zTh-el%Q$0&Wf{|y9ieuYiI~47-tcvBH|;kEo+1w^u1q_pB|*cG;EtAfYszqw&}l@6 zIu68VoxNj#XarLmzX|GY+}U-Ur#l(^ow$id)26YKdMRf4PJiIdH(Yl-RbCn6p4oir z6V@T=J?~-CT^o9J{6PVwiBzH9LI5kehtFe{axh$q%1q&x%TW=hk2Y1O92eGuX=Q>< zSTpv1F-zIp{4zn1I1{e@rT#0ciZG0nveX+JsWf$H(Y3Ur(i>HhP&5M-&7hKj+Gt+YFDU+)zq~*f; zr;MkmVg_Bz%$kMNCs03wX$*P%&5c*vAD%~XCNf(Md>vhT)50ZNB0xxetqR<9E7b}M zKgVCnQFw!Y`O^I4CSHlki07)O&wWChBjM8%rhn!9=Y{2;nF(0oU);0vM)d`h3|+|< z%j?)|E2m8b;hvQ(^XwC4M37Ute94Ft9FNGUw#nve?Ney6NidlI z-r)L{+F1G(?>mKMEW%LZme%x@LVD=5qupG&t zvg8i-5}RTz?(0de2@@y(+~^POE+Kcrs!K!d_oil4G^)BB!!XTQYECCv6xFp0J>A`9 z;o}wgiczj@16?QV7^$wNuDe}2w6ra9E$?r8d-98OaYS3FW4=V?2Rk7O+EjKHSJ`-N zgY|5_koh7dS+nEqf^o7ACHYF3`VR)a*=Kv$7=#J>2^-_QdUGK6;$(!q%y~pzmjlU zwn!#%IqVgD8SP^FI;(g|(AdHQ#Xn3FlQH7{jrL+{gLHS(OLqyy*oV=A{cfYVQZFqa z`r(~zRbTxy{-A0)M^)i%ee-*aeZDI{1DeC)zWhW9`zh0DS(dm{$c39HDd%Db>sP2f zDoF3DE&3=;#kpXqAeDa=Q4n zZ+tgR3RAiTp#L?OGF4m2uM$!&Rv3LDis9QGx5O-!OIXvYXPn%nsHS5-E+wY&pL`id zX)t0mEzDwV{#e;lDP;KjfDx3YiqNSIN9m=C=AM(=nR8Yr|2*#PUGM zr&u{>ZeEkV75$|_WU<$$jidS1+08|1O-t|^LBqckZmRpbtb zHc+WM$TLjEi$w8%)*i$py8k#bpSxPW|L#=b^)KW5tM2}PbOis$Km5yj{kOAqI?T+S zS4;cfP<`KZO9$rTYgi<94KYHDn>tyu2{b{ABHi@mvD3@X9Q;tUz1xP%0|=BM|WnX>E!nrxuo zA<(E?TwDiR^`f#3gx|cSU+e3Yz}x|Z!eMyJ3Qaob$`1V7 zmA&A;zuv>m&CT$vVt29Z5c+Von-V={Gr%GXJb$aU#)5ngRul0L%7%PE_Ny2#xDN2? z$lg!>M9)P59QZyp&CTL54Bx$fJUa!37u!vsSK+VPR`BsT$TMlW%%Q8PqH=@v-paR| zK@^;kHIq$Ib|aN~mX-hGMTCW}jRsspc;(K3cZ5>hUAj)tz*KAw@3y#Bb^Igy`V7EZ}Isw;e;JvOM z=wUJdCi(C*!TCPNph`b;;nO2nYX3?quy;H+7n@sJe13gCWg#g%^}xA0*&r89h%kmgz(ry{yz3#cVKRzbHLE>V+;nXnLCEpFmS$0J*$#k_(E=o z_?-G|=;@mA<$IfhjtNI#gG8;QCHj;mCr@Au_A_g1$(R(q7H~Zrh||z|-ti{~)fKYl z8vrxDt8L7(3@SeHWBvrjqS6SOc%?OvN@BSdG;EK_jk6wcfE?hZs%t})11Gc?fL ze*API|3E5KA(oGwg=Kbk?)tx zjI`umH8B+I+G}Ma`-&aI$;ruP3GP3k8@dS|5B)aCx(+#X>S}BK{QYN~1RK1B*wo+& zS;sIXxP1)5c-*5ENOX2PwSsEU>Nd@9xT>70fz`F(il+6L{=mWU4?zq zOYtq7lN0R$o)!*&J9uZ+H6Q^5&v+|n8~{Hj4J?+3itn9#Dxki)#kZK4%$g$EVX{Ce zn0fyj4-KR%?zvFKu^7*f7SfTREGkPyyWw?G~7 zmjQjsnXJF4XT=u_vR!Wrxg2(oHz6?azx5gkpk|;;8Kj)M&>_MWXoEmR{vjrh{0K_x z8S95IqgUoaPC-#rSlDPSEBks!I`?$4d(Wi-s6qJ+_c`Q)1#f{|1iEm*5PIve8 z)YsO6>!rfG+hR1gdkk}}he~lDKR&?VVQUV->jOHm5twfm(8Uv!F(Z}20s`)h5zNTb zeSLj|DFrNAjzARC@F^j}*MlX;{ezN^wzs$E@o;mmLTFzY>xZY+basWKL5IE>7_qr> zT}r|iq^71q00A5M^H;fQN1hT7^wn+rn>Jfi@Lj2SOC!`(pd1gTW6LJRRD9NMcqv9> zK6^4PExs@!G%LXY3lusL@{ThdDG*zu(%0HPJXBe95)|G0^)RZ*8KQ;UD>kxgzI(Yl zp{ntUQ}%Z^7Kem@pX*C5E%g8r90UjkI~`G}3bEZ_WA48ClX#OMBi*=}h6Cl~-1c6K zi!KMmz|c*8Akim6S~Bd^senSrA=w42nI=&pOJHyG{oNgS?Nq#$5yp+%+uJHWxh^gh z`+tvG5AB?FEP6{tpW!?ab&LAPULcE|wNY9{1Hxu4)V?_bK=U^+Ftn**LqQa=wdLlk z784OcFP1&#`728N3xpZOZgk7LJL907XJuoX@5xF0-oN0|V7a?CleBfr;Kk?b%juFy zXU?4q@3*wF;v5V+QAtit4y?4gpvN`PE%hfMRtA6lvX`;L^O~>*hSYI+Ta{7JdaADR?~$$RUC~_zJB_*W&V^&=_OD_o z+Y9AP@n{HjNPk#0@Z+*|iWEPN!oq{M2@^J$bF#7`rn^NMpNgl$GJpkgKtx7Hh7auO zQahv0ARal0c-|5k8cKYPF_rk|b!YuzX%}|pY+nOZuB0Mc|HE%(IP8J9dvVP!@!K=S7S|6rNM4dY19WgfqNLZv>K9Ch2p8xyqLb6I*p z6vIKuW&BD!7rg5SK0SFcHaEypk|rJr?-EES&^#Fac=_xm_g29B;K0C=IcyoQhR{XJ zT#}Ytns3^?5>VnpdRFdsX6FotwY-?vv+}}$sChjU!a0P3*mb~t8^S^tR+o6naADqX z_upsrPsQaPm#xRSAf<+E2FzprHg0YL8{rw(rqQJhe zgJ1&x0at`N7jjKh#Qx#BvJu7W;NW;jIEeTMA3^5|m~io0b+hS}7U*%YE@K4miwQy0 zK=t^aqd0k47Rh4wycS1F&03jD(Qo6Ni^Ta8+E>7>-+vMwmPY@7JgnlvhtR;^Zq5UW zl@%7|S%~cDrqGxekCllA$OAw>ffJ`8LL6&^wOGf0;h8)T@6sYdPScMtc#pj;hq@^1 zpHov!KMyiz=jH}X-m^43iC0YH!9TvewlL6R&Li7B*wI0H@#3g~6jI&dMRGcYt;9##{C z%P%R}b{q&f8Du6^DA#`LwNx~hHU&9WnWJ^ssAX1A$?J`2&Fv-59|=hhR8+LF$*$tZ)Z!qf#6gUlNPxAC!pqt-PlB;f#C1p)vy-GkT*`*H;$vgW+?L1A zJ^T(EI793s-e-S@myb{OJBzYi86LXG0YY%wGGw3?cyv0$O9#&~ z=rI7RGJ_jEaQXp-4q_B4+hVZ?c;Y4oB#o%g9^`B${|J2S=upvOVrN$%{$;pu&v~|M zs_@z*o|YGb?pdL1ovg+?huThxy-Ije{lj%dm7>Z@PvJ5j5|=w;2(181Vao&j(#@Yk|Fhb zVzM0#VOb{+n&45YRTDK*A+$rq z4oO*UMKE$IKitJ7W&c)=gB%~Fp_;Wz%E$hA{3h~RTMvhA{N25BgD){K6Af>1Wx### z-0vXp)GCsoz@8q&9`U$U((7;7LvnC-+gn`no0F;LBw`2X>qgV+f*AYX`Wh_^(q*E=xcvQ!r+$>)W&97`Aqxleh zZ}wx=n`}O%MGKAaIwKq_V-o4b)T@IU6qh})eI3ak&qfV>0K1lx#?!AGha@Jky|)&K zZeDpzSgjNc8vc4(e;a|Fq)ZgN4RxUfsCs>pRMGx3Y4art3f4-dz?9_Vt#eS=K$)PW zqVn-bMRE<;n`)+`BGcJ#Ip}CtjMITdXuMPQ&$i zfmyED7F(xh-);w=$jU~9Aks1uZT|}ks1-M_`A)O`VZVGB7ks%Dds8t=uH6!SIzKg| zuG7$21Mg{j1sfHrfw-&6p@3}k(@zV_av!;q);Gc4(_uvM`|Z5f_(u)~MP-o~uA zYG)(p%qDU7xO>Z8kLZSbPImz2R$^+t}+PLi>tL4Plnr_4;Yf7ZqAlfth8!0w~POW zfx{rYz%sniYVed}{85EJn9Kd8;z8xRIhSNip);yfpIG-FULxAEF9Rfece<&JJq(0j zM@VnG&$&}1ur7b|r3|ju7+YYOs~{U)h_m{Yl7rfg@qR&C5F|O^T)4n?cVSK0sH6NP zqt;J=gy2dZyvcKokKoZP54fpdnd^}l`_oP(kEcOg<m)| z4ACRr*E`z!<5&5vKThsh_3SAXp7Q9~iL|`b>hEnP9PesYF)@sr%DHrRT%Zb3+W9A& zJQ4r+>iMIm`P7|l0|dWjFbmQmB-lsZ+F zNkyfOS!dKSPi-%;Ovc;x__!uByte=~g`HMfh1I$T106zDeU2IHl*VA0B13vDO3h6w zA2`xkr`KNo(deI-6=Y0w!ZYWF4(|O~rAI1W6aYOm+oC*1o zvb^qb7gp_T6lqQdcJ;2_@D+ZxuGnD4ua+hmqWj;ayMIoU#j+(Rc*ci~4of|g@Mk8v zTt{}L_@w;H?b3R|xP*nimUpL{+vN3jzizW&?N+jeyG1(D=-pKFQ=9EzBEY~qT-<6%WN?k(qhw{a zw0y98qElx~S=TnDT(bL72Py91juk^X?{vlSi}KXibG+_GN>OF(&(V8MkFRA5s3oD*y9md^1r9y^V z!H<5NKHc2h*|J+V6P1bPJhV3U9cnw6vf;Y@kk#OzFYLJU%48xTuJ_YFi03NJH~8L= zBy!k;K=tK56x6Y~|I+3D{ctZMPB*VF{e*?t^9D|v);NJxFvilW^eU z#ZMDQP|hBOm`{68^XQT4fMHxUMayz0R$(_zC@-GYKuQnO+}S%%bB1p4yXbFGQzSr0 ztWb&rgyafslKcL4(BN&B=`mFKzaeGcMUJyLr*}lUpH;)1tua zpu@Kr7pw1#3^xOP3BGvt&FMKgzH`|{m8U%H(J^Ree%+ESs z=cFxoZw^Jp#0Y}95{UHcD@R+)6%$1&%-acL2f>Ziduue{UO9qGQ2EvuY7eGfmFmkW~=!&6{5e27ymhCN= zqjC^cwI@+C2{YxSanR-%RRf5I1AHfyFQ6rcbiwQQy-nLU6Wu(|yi6H2u=|ZGNvxA! zUC2E`EDgNjfZ(p1%c)9;juv=Q<5vbP0{}h5YHuYTZYKho(h7aNs?gYemp!QRU_Hmo z!~|wVt%2m;cO9?6a1Z^ULDR&s!JYt@b*U=JB$OG|6XP-g4I167I^16#uV?5bXz|nC zPH}WzzI<6$zT6U@Nzfl_RPEpi{dIVLg;#rwzLFibu9Ben=mp=tQmZ*ZS zb#=nvAO;g-yOn!*=ezFVZEc-(;xiN> zgt3v7KVV9Pa^wNrZ)h!I#Q;a!X8{dspuJ}h!$Q@R0sz2Nk}E+n2o624ordS<=fPm$ zQ7VkF0O)V4<{YO}Wdo#b3~rE3ft(RQo@>xTd`~4P47f~Z_Lt8U({yjrwm3-Ak@@&`1o2t9W`#m7fVP{r4T(bii!v(dB*Va!oorp z0BxWC&$t@poBtbEqtFrM=XV8-KXiPoLd(@X+E(bWTWB5fSHn1k3od?scKp=6qqOc5 z7h(Hw{B6k4mHQ7s?TZ$n&%)6$->;Bjz!*AMpcWt5ZgGVS`DXsXQA>bO0WE~0q^l3m z4xLOD4s|Hepm7K8exHGq409C*`|64R>1!#DEI-(p1Mn6=rNyj#knZPO_i?R1GdgqT z43v8?!^XB~KopGdRRN!R^ymk&1iTy$SOo>OO-&{N5Po}=`)9OSLRcFjuitk&%D3H; zbDv8~dmWeKy#UbTI;;YQ6mMA2Q5<@iZ%gg(K(9;31Kgb>M{fOr$e&s@v4ZjNXqKQy z*2sT=Vjlu%`zt(M0j24jSyPfrCb;>UnwmnVii|Y@@NKY%k*v3l&Osy3O^b{y=s?-~ zNkHyky`h_a5wKsF_!apRGCeO?Yk)<*6jWKL+k=ar+pOHIAoRP#ni2Vnjx|<@31DW{ z?{wxjo1IgB0j`++LZKbye#I(nbP6PF(|z(GybtU-16_*euWDW) zC+CHz1&6||$}AVa5rTt*$wdN)X;2R;^a-Zd;OGv^{rAV-dj?kwaIHa}cDy15#G;EA z!`{7n2h~|*WGY~VVJvqC3+`6dZZl z+0Z0BGSwX0Q|0SBnFj&U2_gW&gc2zOoiI9&9@#(HhGT%@>eURVJ_xC-OQV34p=m!s z^onhEfm7t)i}H}nsl%bF8|R>7EFm=1KG&JPwE35^87oX|$kJ5S)5|{bthBTgFjzHG z_2|flSD<|KpVXtEp%M1pS#$9>&DWYyhq$k#q;&0`+b4NB>;kgnUwBeD6%fOpKTX|< z&YhdvVYKwhu?ixPmV>8+eH%$>6iPYTDYRKnH-WqKqE^SKKCzmz?Ec zz;RELpLi}*f9Q9bjEo8~m#$rdiB3KlvIw{3ItoHqolAc~cOsJHnuu;;>G)eAcoAI{ z()&x$L7ms=a50;3i$H{6HA{hsaMT^Z%om6a|r68cDWjHQOY zni_rQLGcDqG^D4}Qc{?Q=)xRKOeV|SS8v?70sIQR0zuSotgVgnSfBm%>lau8XgpU7 zGyt5SOCe5i3i|6{yAV**rULPXJiMOk5Q96mJb<)NHkGZObu>%u#=0DebsJYMdk&h` z^Nkx&ZEbBiUX!fArzG-PMG9Vd@Sd;`pZ9OCPDx2h%7#xgN31ivh%Azelr0x>nb(x@ zgXHbzQpvo;iUT1s!KZqvouxvY=Hv&6|9U0;X9^z9HV#pWe&%FilCn$y9On1jJEAw& zVcg>taEW(cnSf4yEqZrb_z=crsv#R-Ae}S|%b6JhgCKxDQV=8rZWx3S&U@Q=ejoBi zszp8}%AqEoKYtE?COgd>mR?{$dL1 zrR}=>iC_mX-862p48v5YA z?{9S13HpJopidO}2K88*?Q(-Y@CQSqF@V6%{y6TF*C|EoE{;+SbUp5wCfkHhD}cf^ z2l>ddq(F5=7xIOUIa81>V-1KsLD*XGswE{P z^on!N$?WypR;lPbo}?hQ|9g$^S)s`c$dITvd06ZsY?%Z7#7tr`l{3Py9*m5P@TZzDpT4Ft(?#1V}Q3si0tU;IA zG%skTGnRmP?}8w9$BaQyK}O~(m=Kg@a%5E{CyUP#*ca_7eg2T^QL_~&R zOnj$GbY#~`hvc`4(BuxJIfT^g^z?U-Z+0lafOz77he#V=S{57C5mtd40&y^N+xgy! zGnMqX~~C2+E_24*Lh<^>{UxVX7Zq*Oxc44K*40dimG zjDax`kQFm1qv!KrB|}FeA-=`C=zmB~gnt0-jTYwS)8$@(b;DT!=xCMTnoW`P1jNk| zKwe=DHwcA>hvysCorOqKB%RY^H&~pTm#31aEmN^?bV-^Rcpn)4#L|c5F#_d3s|I$B zWa)x*o(6N2YZ7#t05z1CH_^3nnYq%Z9(6h@BI4Ts`PNVav^C1f0aygCNdM^Pn=07Y z*pyxToq@lX3I^tX{H6v6luKpM%6BMtnYJ}f% zjdSv^@et9-ryY-P>&^@4>Cv4T2Rnp`xP9nSmZ8KDUz%HX0|%LWu$JX$poXq1b{RT` zwKy2)H$_~{VqqaG+X#Yz)zwuY&Zu(rnh{0G2h-ryxeBLSG0c#$(0}se1GRsQNs|F7 zTuy$u=d~T_TWr1$)1~Nx7Atpc!yD+EHF1_`ze4B@KTTcQqogtq$I=o2)WgPs1cr;w zcTF0ZyQG(}9SDN^F~=K|nq4fk02AqFvbn-(lKP z4m~Hu;XK@}I%Fk-?qOO1 z`5TZmk&xVW4fE->e-VC zLIZ}^AOZ-}L@fH+_I~=%3!Et8tVug0Avtwf2$cCY*(j{_@%j*gsUzHU!gZNxs3CtW z-N=VdT7o(8v#3y&gU-Z*g3?lL4sJYZYikS81er`s%TM@BPU>x4LEmQ#pMg>9ua}

T@X=P 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

XtrQ#Fvl$zJ~R;Eig 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

}u~j!8pA*pgMblb6RQ&t;=H^$S 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 literal 0 HcmV?d00001 diff --git a/docs/docs/assets/images/concepts/audit_part_history.png b/docs/docs/assets/images/concepts/audit_part_history.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce5d67d91ccdb91088d8c6dbca1bc48522164b0 GIT binary patch literal 205626 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 z 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℘9!4f-7Fp^e_Y6HVvs@i!KLWv*N;`T(g)kXbNa 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

e~Ae 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%0DqCrCsZ*9xc_b#BL1>UU05A`X$km*P!P7 zTDhYhSs$n4G83#sD?NnSHZ3VEN9nw2kT=G)@N}OsaE#6_3xIkJXgumgi0}t z@bz6{^2wG%nxbNM@7xL!N}jXf+A0xC?x)L=B3raYTA(DW6?ID4m)l%qnjpEc(77v9yJyGW2-p-Su99=zXCVq^k#`>3AJwRv&GI>i#iKr!G zN%Nf6m@3Uk(-VuAmSJL5`65%tzfG%AKo$*a>xX5!+f+@OQRe4*1h;OEiym2FNsX)I zf}bJ6N;LV^^CO!(Zr!WX%S!z@forD|V|5sNQD5S$Fgd!dJF63ehA*Ba@2#H1se4(z z+`VGOgIm%Irb4DuAkz-!$_m*mbn3A>oY~*8?w4d5R~R|=e>M&|F@Rlq1}lp_C0`id zFjI@d*_m+DpykM0PD?XeP@lTEO~{J1l{tN6S5!3NC#}?5GR_81%Z-4<46-;{KM`$e z8~q#-mEwf=dS-LgEWpo*IDKk78$*m-;ot*Y3=Wi>3Lv_C&__O@){jxa)rBPbab3fvNvmQZZPfgTOb zR*zS_`e`^4ZjeJ|Vze^1w68t1R~}%gF|H2t=Jz~6jAtYf_|vzkxRh&fR>Wq6YBLb6HZx>U^$%B1wpB?3de6O;;j&?Mvy?J> z`-dNiqDjk;bs5T~QuxVi4-$CX#Tv~y)8DFqHpsp_!hHZGwA(YNLiS#LF) zvOY)jXY-ys5Sp@=$T$xB@$hV_|^YvS3dDS?zz@(TUSK z9&*c_jHA`PTBU}${NU%1Z;Pirmp-PAn4!AHa%0kgRL;qL+ry-;`yJ(bV+Rpo$4~D1 zbifLh=^s1{-R2EFr4u2JO)@z4Q|YblL5Ll|HOrW(xfE)2-7$w$=xDPwL?;nm<-Qo4 z91?9?J@wKL{5dEW`531J-n7u}H6k9{joSC{P$NFvU?$gsO(?PxxD@rYrUtxC%u&Ga zFdE~oW0=UudqKmnV%kX2K9*YXUU<=JgX}<2TkCr&SmMvj}Z8_@hIp0T`N|z?Wk#;|y8>%g zH^HNnbTcbn!DF1@VMESOuItr5;+V@b)^b-rW%hhSIF02T2Bpp?TAj8~)9s!_TxwOm z$J<(f8<+EzN7$7{YgJP?*l(xvwLizwfmAv3Y_ZT&4Q1cUx>7)F=DCU%ZihGWN?BJm z(9rS716Wn? z|I^c6p5?4|pONK`8^iV`<476-n%Z<|rBjh9NuEv5E66BGWWnAbDkE5aw{`B6^0b2{` znl4%Ib}?5EY>q3AZy$4!hicp`s}QTKB-eOuJ*|fdajyTa+xVHi`%^*NmG>7_QYu}! za=Ng1gdE*60B<+zqEF3)NsAG08l+}TXd%+7MXpiQZFuEzuvm%cqxNBS@#i-;SH}Y` z5Gq2*R?Vr?)I=@O3EzB9j&JPj%d$jj+O<=avI?UXV`^mo9BBDaN~@@zU0! zO+9^ij|pYr<#2EHDJKS_w2R`mb>lhKl1bf5VTe5rJ~FY*fi!k^1Y|Absmi&zWB0su3pC;7V$}lbJK?H$vS%qVU6YNhL)Ah9@}5>sj0> z)ij;@9iHP}`LrYyTyR-kLxZRQeN^8E5ad!h*Z3OR317YttZBuDD%SS>lP_K!L(t|v zl^3(jOYMHQKNsVmdP71Mln&#hSa7{V#`Z|RPs(HC#A-FyiMQ$tEf^#?kV0mAywhPT z6{OJ!_S!f^pZ}=2J}VL}PYF709X$3uBd*@t!4F;=r23|*c3MQpkD*~eu=|-R&-mWx zZmfhU_x_FoQ}r?Y%TwqXYKQCnDAn4T9t2rI@l@qi5nPHL$8Bh&e?WA?X`?RAKyhZe zLt4D_il~#7e7)fr3+J|M`Lz^2A&Dd0P)AWFd~g17U{_QrpKH4E?PB2-#e(S`m#3t8 zv(&??{4NRZ$k%rfnL0xUhgCmgt{>8*e~Ir4l$L?GU&7?fKM9S9rSd)&((2F4SMP)C zE9QJU`q0K|Q%+?!AYp>)scnHjM#zWdcq&6fUV_t6-97*OPMS`6tkn5rk~a>lZ8+kV zqw&HI6A33fhrIT2^kYybb}TMg=Ei>=jdm@K=z*#2uMnSUmW#) zk~ci(gl7%a*Cc{I^eZq}jab9MJoeyg2M957c- zNE7Qxa_M8V>}huaL}|9&&Jgdp_osoz+U5BxC(Zc{3@4c*JsLWQg@@Ke1Ryl!hO>rE z?%Fx_C|25fj`p!K6KQbULlsANCisZ&nPjY;Sf^NhRK=y0`{{q++;Ne}M|(1EJ;hs= zW=w+~@0b3T$}=~2rp*%B&a{o(L@WwAei^8bygenblY5_>aOCWsfveM3s=|;gcD$lE zR@v@MLl#6hIU|WY1`d5jR6io1wJ~Z%qmGIcLek6RAcSR^9{$~1zp)LIR>~O~_<&RL zj!HuSoj|xvBK$EzXWKoV@hMH**Hzmn`XSt`L&#)4|eA}J9=M{;0 z9@kurx-c$sWvSSLE^5rS~rLXW8!{>PBnJD>8E_n0+p4G=<9|jX_j)bb7}6Lv+=r`)nqZ3 z+PjC+--DBJ1~zJ%p=pyd?uNct`;LYem>nAxYqQPQCE!8b&>h2>TZs^l;>0H!Y&yH> zdI*jOy~SsB&eXzrp85rQshj}MRW_qn2G_s*l4qHRj5}^J)z2dD#Ik#S$7F0RXN@T4 zEgpfjl|XwydfCxXXkp=^>K?Ppg^JNM!@FM3rw5nPeprC zPN!=d;~iur`BqB?INM=x>~*}WD!LZgr0zl2MYnQ}#E3HpDlaYqdtz|>!4FaO z;G4bcJMdGMnUC>O2@H}CP*oqDlJt##A|Osp(=0NkT_|GUPSx3eh;HckkqAe7OoM9C zb`fH?9--0%pqQ`D40xtoqZz zI^5+v>lq+#J{O-Xk6v2W+I@{NcA0VK%*k(nRcVR8u}4_P)1EagwxQHt_;Y>HJt_C) z<(D4BDMXb#^U5k6t73R7YpfKnOAHeoWNDnEv2jPB!Tl4>i|T6kjih(f;Uq5^CT?X7A7F^NfmcFr-Z-n+nP8Uq4Y4ulUSp=ekI3! zKxSFST#_$`d^qA$Z>#yTKGj@V#7jzA`cCJzXw(`C%3{fInqn?!a@2+{<5%A_5!JR< zw(*(d*u8!QWk`MuWtdK|TO3JfO_pr9I!^TWcp=(7HUaJVPN|{LADvNl$iw!`VG;8b z1qgT3mBb~jx!$=^-a2aW%NTuCgJ{ga95So^SD~z&hHy;YVRlu)YiFf4$sbPHhY_FE zFbc=tl|Rb%Cs4vbWYTsc#@tfPbOJ~1OBOsi`(3uzq)?rkZgmHzTF|)qe-<&8^F8z=hVF9OcA=)M6<5vtQ;LHjt03dT6%lgAj&QW7zNH6h zlaF!y6hW(DeudbZ#T|b7(iz{beWHVXo98_Q+d4??X>sPM*EKu~6^O-ZOVq=K;awku6HadhOEe!ynpP zXX9HI?K`KFSkLr73$gNR25cyo;*E9%^1S<}`0+C;dov?}zQVL)q!U5V>ITi`exPEH z@W3X!Ue`t4&$pbGy;_lTlDhCr=Uts@3M5kEg|5dBkm7Rx<^pof$z$`B4mhr@Q?{#M z{`AEj#zeS`hLsJSyPwQ`MhTyd5-S7wnUoQGK| zd2tUHV!GDkghv_H@0mRaYyR5>o`fGQEO`AW{Y*8zG)zk^^1cE7~V;Pr(#C)N7l9=seq zRe%5SHQj;%e5WNF{_UJpzsb)`jrYilNHD`aCSHTLc5PnYMf*CQMx{1%Q{V!TO*|Ex z;J_=HLi3(j0}zOcSXbj-h`n6pviS1`YL#@a6a$1dIa4B%H$?oUUSU)R{rZg>Okyq9 z6^HbU3@$#cBRW3bKDN64#=-hVIzC}cOfp*s9J&5=)jld7v1BKchB z(0;y|r6*sf>oXjbrO#6>(Ty_;Yme&-*^1zM!>aA9aWi%(q+mV9JI#b~@PJF^dmh#L zH^|f2q2(ZU>eT?hQ`rx(l_g(a)0^qaI)4A!v0&q3=X7kgBX=t{8uswMRL0kmZ_ehn zJ*pkr22$4zOZAUdwlZ7mA-R9Lg-=tjp>UFFXvzVCTdhE7}9dZEX{)KR7IrY1uu#4ZkN zNA&#C9W##O?<6Up_!BsWj!w~{UVfcz$D#8pgA@cM&f!c+dTgm9Vx0G=Iyxlj`r`ec zMsQojei4DGH-uSZe+?{4(Zr$|-FM38Q`qCh1N*mazSP9_Fdfc66J92@bs_cq|Gk^vn_;< zZM$Jau2(K!QvAI*ygF1&wpysJ+)24t6W!-vc2YzG3^;-Don?k}5U!DS!JzO4rjSka zvx$S({QPB_-3uQE13FVIN5BaK7&u`NQmHq}%j-&i+Cwx4-&uN98u2JM8a;DyK|LfP zy}etd__G$0$TnYDxu=6pF||8_2IW>hhRoXckqhUE(&m9SL!HzA>x=g=R-DNzK@H7c_2)nQvJ^i&CPoT3ZN>I+wv-M{- zJx1s6-m2eketbxCHtf%$gS=O4X)NLd=djTEZ(|OLwBZ?)(MVc0HlRHv{2rJkR3~38 z-Wj3zBfD?(?e1yS$abbwIF0a5Nt$wlK`VANJ}jUEv_}|JT@lR5-{kM(Dv||#Xjpnb zD1<>F{Lg3k(DM`}3|q0EUK7)vd-o_l?9GFsMFVF@38dMrCcuf*EIB-Nv?M}#sJR5u zfy>Quw@34tg2Y~zDDSR#HY{plR9I<3)P!Q5PgahDHiziN#bI68KBNC7X@oV4pI=)y z)@KEh%A~~GAD!*9n3q%A`GYMIvh})D&+Fc5pbC){M+YZ=LI0xaOm?;@E-C-skkHIJ zI%94ZAJN`2M!`frvMxLJOPV)p?^sVGvGP&5l50DMpKaFF)J?;2-W}arQ zOy%cNT1FO#Y(B8wvHpXLg_Xw;MJqEhJXOL3D&-vZbPB#MPkrSqh0rc%$w3H0p&Zf- zyB=vZ!2kGRZjTEBqu`cYTOvuqnraQmQ6Twq0qH~VrqLHoSCouTW$Msku68IM(!7Lw ze~2flrlS#IpQAB=lt!HT40uf5Eb;2pH{;qLS{^R?cz7@2_UnQ#3*$b)MTDCub^;Ve zRJh7A70+Yy#l^#8qj#zDyFxOTuA@(1H7xBnYDULrWyQ>8vf&H(q`qUbgV^3rO@0{B z(ifB;*b_owt7MY^f)zMZNj=i7Yi8ChE3VRx4P_NzB-#Be6Y)6cby1Sf9oK zt*cR!*X*^(r_RYw&xjcmskBQo2s!-TVM+}xY&aWd4>~qr;#W>cgtb3o&RUAklRCMm z{4Rl*+MI_KSsd4678?u?^Kq&cLh_e)xx?0sI))fj+yo+1>stSFPwv;+W&!~nHV~*4 z)b>pa^)haS$lFm7+<9wC_w_|3E2PqBGibH-u54G1f!l=_GIR2%Z>>`(Ea7XJb*@CA z1=i2AGEn$Xvr9Qe1VoaAwz5CKRD-ybe2^qZm4HMjwHf4KhauC`GFe#Qx1Ep{UJB*v z^u`8|@R;8#58T&U48LF>c{v7JTH$y;IoOMfnV8Y-jd27|=yK#c7N?O?3_gm70^T0?MPKk+SPt|8=DIC)=vh zoGuulmu#;val`XgcR}DCAWaxzINnX`V9hAeM&`hx*Bf6hbvzl%d50)4 zWy4SS*096^^)6KMzX)X|;&Kz@4ebpuhZs$1Wd-f0Cs^d33I<;N{Qy+b2`W|JuyGX6 zOoW{wcieuR2KW1*^U8N_JB@^PF5Y5x#74cqkN`ao&F^97H-km17vWi{sY?%6x_Dpe z7QKXi^cBk*eDBoxIg<{}mcgf?k(>&r9iVo0PUf81xqaywMvY-8xPAW5zp!+Pz)o-$ zU3=V@-Vgy#=JVoMmQtv=>6MKAd3UH~yK`26rhMj}s-xu*LUSj&b zrCYWs7d6)zbol*H;53!}|B|0oqA!pcc5!wFm#|rO+JPJg5K(UY^Ez&%S2GLaG|JiU zwF}{J^Qnr%xdxv@gsG{i4p6vAOic9km4HFQffoTb7FL7G<>m3r8BShao(9~6*=m|E zP)s=IzE{1l&*L@TF}Nuf!ufO$R`cZyXjD>HUI6VGphGFw4~fmxsl6(*Uda5CHx3*b z4habeVqJZJhza;#3ttZ@FYmcOW6j%I4}N|xP9!dSYCczaSw+Rs#>n>WLd%&474mXD zr(iWYCOW#Wn3zfTXIm&`G^f+fEVzOWRKmL4-Q77YCo>r{ri@%ORSTw(6Q#D#rN*7d z^A)n_el+N}1of%c)zzJa0RIYKkrW^ghvPw&E)`whwgQA>YcKZD_$#L>9e+D{fvdB( zz=fKpjM}+<&Or5#JODeP|5muMkwKYH4&fF4p2r*mrY~{hinYz5ny80=bQYJ zoGb*I9)gz#13))B^9N9RG477*I|ibiYTy&^uk@@im=2^rq6ad(Fm(h}US1vuT)-Y3 zZqFpn_jx}exO?}m0`lj_+tfc{=Bl-%$h+iG;OQOv*i`iPwzg)|Rn8>5=~hx0G|E{+ z&~<5;g8Zt4DPyX?B2d&8tzdPMu}TetApp$0&YyGqUHF_AZrxi)BhGR`R$ z`8pW<00?tqXFc4g=aooj&~ELO01LNDRXoydU`o23`U^q|BG3q@PlTfN1Veru^q3 z^?UbxfEo+hom(YX9AxS6T`-IX-$Ew+aA*~DA%&)5V%~{~&ktoQBUjW0bJc7&M+?L3 zSt{PuT8%T0-=n0Y^fSx)lK0EYNPybZ0!XX^#RQYy0p)C;`SvQo-3dQmMZjjJRAO7 ztUW68yOnBo{rNE=d4~BH_p6K3zSK7>-Ox5*Z9omYMdssq9f58Vul>46hs8vR`_U%e zd8!9Z#`N8XxbK%c@f>Qf*k1YKVXF^IJ7;kg4uxUu47J+qKuz0|TK#%I&XAJ@*84fNVYi0m0=3x(hIxQBhGj^BMGxABx8$$0vZ?A z*49$iO4&-LX9sH_HiEga+@fs4o|BWSlF5;ZW+8Wc*W`zDd3pK!M#_yFpMA=X4!yFe z*3K7#1v#vyH4#u{h$>9MbdEMACZ;G91|q3l{g(&(%U!9s-}BaclW+67(|Z*I<)5@} z5RG4V3?e~P9P>3>vf)mR)gzTH!d*a}-J#pe`Er`cl4j#9`9Y<6sFbPSOyi5JW z4Fv4#tIHWUsaF(``qPi3PPDhPixY4^`-(wEm1I6qf&}3hOeT<2ya0M43b*~tf(g0% ztDN^68yi8kkoWcRxi>Xa=_ot%fR>6%oC>?5vT{SRJ(7{}$^DCqi)lEeGsO#!fuKTi zY%>>ES5`35;WWy63rei4#kbz{0iL6!sVN+c84yyHP2hWnCM_kE*#jiT-C5g(LBBN) zY!HFr$N`pcCaYesVkX^-&}uJ_G?bJE!6X7(wKtUzALe5kD;{hR9^<&INr~q8+U!5J z-20tTe=@zZqhDBC8H3mOL*xIk}tw9iPnv>|B&1;plYWMbr{eVmZab z%4!Qn+tSi2)PFjm~KTX>@%67qN2<+_w%E(lfAr5PQMRm zrr%s!#KCWlt!RM!JSnULwmuv>L<3WZcGaRut^(>*-ax3tX84lzxQRxK8H%(TO$eFL8Jzf$L!F-lch+Vpyz@$Ak6~susu;)01}_Gdb>dpa5A|B>ke${ z<$c8M2zoj?kVr&6k}Z{(6SO}E#$6y}CNYu#k-jp!HB1EG``H^XKlp=og@*e2rwp2{ z*m$sf>_;0b74&W`sJr_;f-TL>4y(O$z?p4qZ0z;x*Jw}aqQK%#5%q7>vrcFRa|Dc| zij8|@Bqe!)YZCBo@p(khygI)L^5W)9ZDKpMV>;2VgssRnIQLA)joEr$gyR$mlrRAp z@qUQ6H(Xc<(~jzY0Kta!H^YAH$n(F-}13$J>tC^$S-FJQgA?-2jWQ#p)NYx1f;16YdIYfV+g#cY9AO$=R(lM1mDKObN-kOpuz@EsPj@0pxK%jcf z?=5wd>-;A1K#*#pK7%Jf5x}@m;akgxkI8HfU_XPjZ3wyVRTW03_@cvY-T|c6_jC0C zWc?voZak0s&!xrkjFrCKM+Y0W zcj{L7Rto$orbduhDz%H5pNTThza=}SzYtxhS6I`dsr{8wcs1w8i*;+?^0&q7ulE;L zrngf0>x=*Xlf(aiSc9BM?E--M2gKaCF&)rBf22D$--N&(gtFm}KlEvM_xn|D+(>#6 zmYS_Z(=P9iGyaru#*p*FzwUJ>JuwgZ&oI!4Y38WpWF0%=*8RP{y>soIqJ*mC&yFxJ zq!iZu*E8??5oGFR(*60){}(DNH>wi9eZ{RfwzL164QKgv?f#DX|Ngu9zki)wKp$6$ zW(bG|Th7$DgMD1-xUC?Or;f-5Mjaq|0rgXx@~`24Hp?t)OP>jwsCl+Z4oo4du#j1? zU%SR_tUyPw9g3D~(VJ8U!Y#0Y#$ysE!CJeg2RM8~7>A&UrXj4PiFI zP-Pv@WAAacMhOME?q>@6Jqls(hoD%_5`USZ=>)}&*iA(wQF~63iE&@1}rX0 zfdN#OVg~pSXD27Q06tUEdh9km13BB>tQY{phqz21{>;+{*{6x8;=tIzR z01%J!Bwo)Yc!2Q$&~|KzS-<%q0f+g2F-i`&B0ERh?@?kp;O!hcUG4feD(z68o1~f* z=+w#_15iLe-}neS4_GX!p5gfG)qO$%wlX8e2s&O~UWmtY0Bh&!QC!N5y6{z1M}QLH z5YRMi52IGXeDdU{SPn>(875rETM{q@h&u3*F#|<7U=m_Et%{aTd8y-Gy?9$<9-Wm% zjZCiD0jan^DGT#Z>Sq2`1(fjd3K%mg9;0wwMN_>C=o9b-Js{q~szN1%HSD@6-(B_fgjDz&fa~54>a*& z;w3p{DWxz*M@Qu<&NjzbkLEz41rxOkl-@-}M5MqX0Z{+?Vjn%+*w}c0zbW^@g9q?m zubk+4RSs|m*a%>TFcHb|bOy9w)u&52gMtDeTGO#2a^wWC1CEjv(eo=h{F*dO_W79w z-JG+>pU?Ji;7yPjz+6!o09Y>*KK6-6CqXYM^pG-}0~i}$Cd_2MyJZDZZ*Vk-2$Kk;4A`%!wLDEnCR&=feAVdHu(&&Ui~x$AS&>% z`zQX;7+`@KdJ}9+up3rSi&V{1SDM_ES{Nk9-SMWjIx;~*@3FdI5e-l|Jub`$&&wId*enhHoQyxcst7L^! zD>7hz=8l{o9)nkvCIb){U*8mlm;>w6u_dr1cTX<>m|t@>=?9h)k`Xx8Vp{x#Z|TAz zrs&jgm|RrKTX&p8Q10@034J#P%R*=g2yp|0OaR1N%f3m&O$U|%#=4J=zTKNF3{*1B z1~cp2%nKg7-F%QM=BRYY7@dc6ec)Xr#T;K1Qh|J>SsUcQP8xr=~=#2!=-P!UunmSFsnG$;b3|6ReP+O&4CC?g(2W}0z&4%zLNaB#4)`(y!AQO*YMw5Ky3s9 zVXvpBw-u6>_R`%4)ZzEgi95AAR%#b+cDA;1y`Oyre85H%)_w)1rS@?Bt8?tVTzf!c z;ISHk!S;5?#lVnX6$5;}&juf0Du8zSFNg`M$}bPFqJn)>`^1V+D6+8^ZP?c1`VhX< z?KcNVGjr|T2TU7mA2)S~k9|j5yIB{qddI8q>%tl-RAD05LKtn`swKIx>$+LqRsDKf z-?uWD;$Xvsvm)5xJzT6|Qvly{P6g@~qDi63J$m1*TB?S4R!^@}zmngM!=o)-?op~5 z_rUS^R9I*vR(m;tMhu#acE3z)rHjK7L}1xmGFo%WdXYU#YHi7=!cd<6PbNuPbn7gO z*ct(h9$?Xc?LzIZA{uZhFwdy?c3t0eGy-fD}tdhy@X5F#^^piqneNq8hM` zr>fSDj;b`_$J;Z;rSsd{&j|=RRFv~Ix%v6yfdLmKWywo6w!z`y2xm&LGW~;tjSD1~ zmzE5TjEv09Cv(+UFJ%B?1I2+u^X&*thKz5jg5!}k2JJzhbe@L$0ux=H4}v#@06 z0&k;0;FHYqJeDDc-YEoCtYLWhA>42@q9A1oT+|Em>Wfwbx){6fpNchgSn+qKXuJ(G zm(p)ol6taT)9E=O#Qm$zR zxxLcBimPNy!e-~0?02Yi}ag+#`7o@~(W8E3nrCMPxe^fM0cxVL`H%tJ+vuIR@s^ zfL;FZ;lqVS+NGe|2@}5#RI10{W*uOtqqPB_(^a@{_HushMSkt(P}3~iW~=Ju{V~-? z-1uD^9iikIS#WYF1+(bVdMnNj_vgwnc(#?Lep@NifcG|cs)Oy}D+eNpBvO55<7F;K zG*;w;ncC3Hg=f*==vG2a3}1FIEAP(;X>Z!|DCy^iXJegrd8MS#FmiBg#eY~?XsXkB^w}ET<~7hhlyB~F2JOEP6waEF zch{_0-8=Jr38QfduFX)&x@Tu|W%J>DiZTmpg+G}niaXh@OS8)KRW}Z2SAgj8^5|;ppXFRg;q7clOKiNt-@~L zv5EIF)5g@9VBdAb=e5dUE8z~JH<5RQPF>X}Ib>lGlX$l_ww+leSgDcV+L zqobaTSP=#9I$YAFq0y5rbj}BwXD?puu|OC?b4rP%vK9@Mrc|F@L04pZSFyC;Xprz8 z3yDSW92+V0hY@P69C5Rf{J>%~DbtimAcD>eZuKJX*)M}cf6B;)%?5ZbMN=Ui}7ez1fSs# zlynYJD5gZvvOUU)?G1cqPJ9nSdHqz>;+8hVc3z#sNqNPfs##2v0L?=od)`@`BaaGu z(e8+g$=_mb{bj#ZOat|cFL^ps?R6^HiBze*M-sYs*`Y&E244II8n3dLzLrHSW$Xh2 zpLOT7A0?HLV#E!_rNZCO+IG2csC4E1!Dow%OXA}lX9pxiEcEWgxcV*|zF0_}k*e*F zA?*`Ms@bB?2A@d{Xb|2R1T+%}*kQW6b@bRe(r5n7fnCz-(FqLu`o#l;xk5*Mol546 z!q&TTm%%p^%?=ajB1m4mHwa6^0Gde7-lBiDKCkv_C+P~rd(~ydNFpXtdG^~GxY(H5y=%RjHbMMqWe5X zf^KV*1*u&f;%i>9YrMfPxA@}3iJ%3h&F^W>ab*eDLtJ~fPTyRt+dk-9oa^q& zBqA-1Sr6`U-|W*E!5!HQu{?sYzsVOS{7fDPoIe1ZETB9ezGC>z3%I3Yqe{>CqK7Ep zJTiNG#nR;Sr#PX)_Z1<1>R&#YqFqLuYIYMf^gC?)%u2~7#xJ6Fb-wfW+}{YpZ$#X% z8nkS5&yvcEwT@gHoSg2N2>bgWcA#~LT1R3jlX90m*W2#e-1sj-z5TK5>1?2kd2aKc z=ebdd#xMLCJ}{3s|AV>vUzZI2|HZ2%o@T~yTFD#(8zbXLKu*g!or6wFVc?u1HYP^H zpRvT{lU1c$)<0>rw#Zrs75v+`qaao8sd963OGh!yop09~Lxeyv4}Tue;g8sj81#sPZB;6w#*up!{KdCC4aKFr!4c;b(&Ke+R0ad8pU z-||ZMn3(;bgOM!k)7;XcI0PWcIEeq5@~OZe5707%ybk7|?({l70>xNY6m!GGghpzg zR20)|((i1RlW!?P!3YP3=%^>nD(9(elvaY`6?{kW1+eG{1igPnsM~U9^yT@nVjJk= zW{!ccvVIl*fGtSA;N;?R8qAdclR|H}1qs+_PH4WV?Q|w^U%(VeUI%3w=$M#USnzvX zoNR8Iqe^65faW-GdT0l{T~-yyO@e@`_|=nnS^9PK2q0HmTicwsh4Y}B0XnIfwWN3! zjsRO}Yiomw6-?&!+eIe$`%8j_ag3Z$bs6CLy(EAn z-Ql%BMTDpteWk9Uq3H2u7z${#1JVx7u+bccyhI`E0OWSj?IZ9mfTcSyme+d@T7#hR zd<96!v%5n%sv}k-eSP0;-dzG^gO`_Lpk-PJx?RB8Ozt+S?cYA^38DL9*-=%HhuS{J zSu=S@Yb%wkuM~y9zke*dS%imfK~4^B_?tIxSVf;=Vc8ySj!mY11}7&nfBZ!HiKJZc zpPZgfRlAmgM*}#T;i{uE1E{LM3v-8io>lG%s%&0vE`XPVpffhP1ja>lyRo}FAB-em zlRC9b%*;Bl@4?^zmRx|;))UWL3K}X2{H}LVP<)&8e&=K$D9`xSY$g-TH>%gCJ(Z(m zO$PKwkLVTCrTSbmm9qN55tSGYi|j;sk{2(M-hSK$-g%&*3?>tF-a!9c&(u_+x~Z|z z$;IVgZ_xR)b0xp4v$JYPr?9Y4RMQbO2Lbl@bp}8|Q4!QMJb<|b)r+Eu#)*1ZvzUko zAz0u{Oz%O-gz0MlxIq#Ul7k(e=N=}YI8su=Ry6oERb#~~ps9(4g=IBeRjyn2sXd&Q zEay*W>4Xl9dP#YZNA#~z&z`+I{hJFA#eVXn_o7xNflsZ`9&nFNfLQ^Pc5-$G`03&4 zX%A4_qjWRHYJgKFpfKn!w>5^Eo0>XrPxFH#Hw;=8phDtcV>EP&S6g9W`MZ5N^fQUcQF1&xJc{bil z#Dpo08H!4^jP(4v#=5?H$XV ze>TmBW71ICZ$qEvQj4+me?EHtKVIzrDw~xJ{^_0Fa1&_mbUOPfnEEznFw>yMD1lM` z#=m+(KUY%A)ac8PU&b>({QKr0T1rxzsTnFWOrIw)fTU0^`kBZ$hQ)Mn#HlEH-4g^Nd&geRqtFp)CE6=GQ5*X3AyG2FHZKkMZ z{-xUnViA5?UjO4w`m5(nUme#nTR(trs@7#xIjTLQM7|$yjVfFDSSOo^qFw9G$VO`O zer8LP0aN4T1PlZ?pF>4bZ7pcuy{C%`wH-+}rs>g^OrJQL`ff|%JXG+mtt#gt6n&8) z8JRzd-yG4Yj?d=twK7ndxqt31JH4!qL`*fC(^w~}S7~QNHf4{y7#iaLVC*f!vfQ5c zZ!A<$lvGlsBm`+`M5Vi>rMtTY1*H*gy1PTVQBu0QrKP*!KYV|?j_1|mtG$oy=H|Yx zwPwwn^Eqc_E75uV+p>9WP+>WTrc*-R%&*E(Y->l8{PN}If>2poEjC&#D<&qs+y3Gt zJP}5uC-@wzt4-0A{f{{Hte@%TAD}Hv_^ZY??rkZW4>d)%KBpz;Z)qj(a$vD77@r~P z5~X}!NWa$+O6qTVeB}AgQ<~8&3+}g$XRV*pc#TZf#fVdTq*K`)9i^k4+1$PN;7;4l zHq(WHGg~v=jMM+FRD^Z)Q5qdT{59JPn!V)-T08mdrIn4o5*KRz@ITGZN$HUn6WwM) zl^;Alx@^!bnRZ>Mu(WN`-Om}#36rJJW6=G$dQmc%9&qr`w>-NP8ZZ&f2#@GPnHAS{ z=V=}r#%EY|)TQzsp;pfRO%p}K!Amb5&=!a(d07tFNl;{`(m4(isLNo!jlB1t$CX)r zx^;I_A$x80_u5e!3y~?U+*xtmaBaHLnLM8VqJ!jeWP2G}T)Fw##9(&WlV&ncc#(A$o`$bhUlc|Hl;w8z& z+>%eR`JPIB@cl#w!;pR~k~E&X-oMgx5qF}aaeMCF{Lk{|)09R@jy+5;p6wh#_HLyV zMW1lnS<|scl%*S0E#5bj+g~te9p2>Z2-b$*#&Eo@*QRRnNXhPd{`LLUwdHjUQH|Aa zMR!FlUW`5l*DG;q0p8@h+k13w__pMu^gKs_vAC~MZKez~M-6Lr>s+&A@6K+Le2>2L zZd2v!rY7e9GpkvA5H5@yI>-=F^>;>_fFMmbbn984*H^G-6mU}J=a{DprSvHOti4%i zxS%s1G^+*mOa9svfrsQ4Augd2UA~ zW<6VWpz9hQcJvnO)1IbQZq^rtLX&v%VT;|L-n=DFTClveE>R-P{l@*EO&sg?wA0xO zb{6*rjq3KwQ-qDyOp$zYu)~Ik>$ZK&8@w_TL;S~h7f+vRy;gXh_G=H5P@kzof#>8A zYwyo_bRsB1=2PD(ZS-{5o=Ms*#xmubahdonC6zpLyTGQ;Ib6Lf^oF>2+B_$6(@00d ze1+nlSocx-=bV9FgKYNnj*+R)yZu8m9bHWVJR%c46CDlHw!DS)NX$g;od=>~-5JWs zg@P3K?l?QZMWHNWt5V04E!PHW<(a4F5ye%3*BglwB^2#wza-02=~(iO>)t=&RI`^| z+YQ&S$yQ*XXQ@48oms4T?!PLZZX+YzFB(gz{3`cRe1!AqPZM}1L*RY>h0#fAc1>Z3`BG;OlOBkO!(r+dzINkO!Ld_{GeMskZ`(JMn0_8Rb zer2G)Tf0P)mi2vtb>m3l48_6Wj)9|z!SR-EDWX#*26l0EY&_h#RhgmYw)%m_4E_b5 zU}FOhQx;?tb8361JGZXGtFI(Woxi7xphmbZv`aa*FYVS7YpKK%=zkftQH@y}WpU=N z%Zd*aq%gO!g}J%68Ikhso$z2t4+uNdLrP=}y+8HtL1p&WIV0@(DR#ZR=j-jj^L7U; zmM=eIPXkw`dS_{@$P4@$iG9@N3~ij>?6hwQ3L8J+bm=WOwMmprkk8Jaa*e36;7@Dp zYNn#0nQLkkw+hqrAzxDE?dfy=wV64xf}@5mzXu>1j`uAC@PT>8%^O zLOec<=M2#n8Kp9nN>is8!@9pUDkv&Xnl7aFSo9 z_?=tMj51oO(mJF#78NlAd!jDbw@UmDEcI516F>e|!klCsO+oBkcVb~-Y5RpJXqS#W zYb}~76R$vxC$mkveqi{)j6t`#AI{iiGdL8xtK-S=-v+7+reFqKT?ZL?sr8?DB?6xx zL$F>%I$Cu=nAUT^Xa4nFuo&;3-GqmZ<)_mmR3%XjbQj&9GCGx=80m5Jv~^W0&Yx1T zsO3qfrRpKy^lEH=&c`i^L*@Tm5tncSHhC*!l{K*a{zsZ`a z7$S+?x*^(p>$RY_@Gi!Ohbkf}-mCrq69_ip^PLcwH*hD{Xh1V{gOR-A5x~(wP+s?>bmU z+HQ@Fu0Y~dhze}I5#@$4Im)E__UM+%za>VqJtGZj@Iqq=iY-jA)y@3t7KhHCQ-zK- zj}@xDz$kzg#7&orZ0XS75gWI%)#ECn z5RsvbmzJHvi+;SndlabuVJj>QI+d@*XZ(Lyl8cvbsrYWub^SyMffkFm6YuJ) z>$<{Q2YrXX5OES-I)>iZkI>8-U-xotdgA(k(~8WylY+9`Wb&8pl&Avnp?k_-jbK%7NMkx9>LM^qj{Z~L{OwEGmiNP z^N_&5#+f5k%c_dpCKsk7e`^~!j89Xq3wJyct$vpkOQj+CU}^o5pK;S<=gtG7@CG&K zoVSeQ+ixc$G32s+j(2Br7VjG?F`t=Ju5&P!mk&)(yIo<{1(plK>gxZF3%B~xh;y%P zO-L=T>-T;YvDR-L{EL7T4}%OAWiy z5%hSHD$#Lq+<=Pv(JRFfMdd=YaQAf)f_ zEYpIMI)CY&*r8elhy?WMnwpyzDFGx@D%S4>GV$lf#QKT93_)9Nc@(?uI8tGxPD?zu zJ>OjWtweF3%s%f8I=0=$SW+pqoUN@bI3auj11}e&&46lPVuxK$`Gb(vJmJ%)8-Mo% zwkjCuS@4)so)jv5yi`U;A0{U^)JrqBwe7-Ww6fNB4_5iNw45o@eP}@=k|}$!-SPyR zO7;l4i$L~C!DXYVBH^{&?7fEQ4|aUB+4$r?k(YDQH1KcuW2Y zyoCQXPd+!QqM{-&Py+gx3UEm=A}HA9@7x41IBR6<%zFa|Bw6~I0CxItWrtE*_l%g7axC#b^@Lk=s~!X#&zBCJWtrIGh!i0 zxoVrk*Xdn^id?@t3EI4ui2Y##g!9T;&$FB8JgWjM-EIS`p!GofrB9Nv=fjw3N9Ocd9AD{l#0*;}}U36k*ro_ZIZ|(X zll--0xStazK4s<#xkhJf9oART_EF;~A^fA<& zSWX9q_)FTV&gL{kr8Jr{VE0stb*?VX&S#)KQX*2mAX?$_$pb(`5C*0r1@1}jh3T3! z>E)zMPeHY)SLikSnk3Pt@qmDpPQT}=qhQINHoz2Ogm7(fKEw{4=Sx?9B#^jP45YD5 zC|Fq|l9csgVf7pzA7dZA$cTxeQLRM8IwgWv0#PX*#njr-@xo1uT?I7RG?j?370Q?I z3qBsK!#6J;0;_{KC5_3~Ue7u(fl*RYo?y#SVed4ek$#LV6M)?0HC-vln2r)z+H$hI67~E zd+y?5Ku9b22xn3sJWI_3|f%b4En6z-4N+3G5yWFE})p^9quGQ>UVY7Ai8qFD#dF>9 zVl;7c$={)?8VGUVz@(&&H8g&PN!mMtfXP|6m;UBpYP8~`89s_4Ss75?Vlk}r930Ut zbA;T^_JDPr=pyD94Me+Nv9U$&OiXw}(kGe-yY&iX>wP0Ac;{9Lmi8fFWQTrb0HopK z;sW@8f?;H2#Q*9v_kY@DyJ~8BuRbl%TZ~f7cxsEmNu= z`FcwF#-W?t?cs9@-g7eN z4WpM4T#Qz_rMh}?j84c%Gn*8xBL3f>f4SNiqF<3I{B;^eom&{{(M%%M`4aztR8B#& zzq_j?Lh&OtXaIZ%3miTSpx-{$u)7)fghyOLLN9%9X9t)K?7$XkZ5#`PJ&V!M8g!Q7 zS(t#`k1SnQ-_$e@WM}XVMU??IS^N~w$k-T8vi-dk8QTLOMfmvm7EUQLO5uFjI(FW! zpPBg}BqVfjV(>dlHq#Qwy532kJ$u!GnLIHvGkeKx*zAW3LN9vfAOMEI-%NtoYZqt! z?|Tgk_A`1e9&-c{95(isyHZi0iPpeUoaZP78{`vi=LkBD>$~{KXaw)!gaap~6pOGO z{K~Px!GL~lB_t$3aD?Nsb8wKElQV`N$UI>srAmk^@MBr67Vq&z;^E-|EEl9`xxKYj z4to|lC(tNq43m`Sa5^x~`U3_~^;%~(n?JI!??wZxDN)mUO3kKgAxlWlvHcbF?AE?& zm3}X=usc5ZLP967lAcEYffh?uOiT>Gx z>UY_0;5dMDWd|cDd?T>EnLt;1@67k*SC17>)JL#LWw40<4p>M(F0r2vJ4AWTz)ipg z25u=lG6#qINqj|i{r&xv&uH|GdF@bp!PXHJ6a?Y>>mxwa3Sc|KZywFG9+Bl`N@+qQvosEywMODBPl-8zEZhU#<#H7XT=L4*(3IKIW6gU=GNMMXgY zB(b27khlED!U1@q$45saV`I_-9Dvi7HjDysCwX)_--;=0L&*t*DV;_;kESmF$_D7{b z$jf=3Ki_m3?&>n_h@d|X0MqKfpMlgC9?Vu11~wcwfLp=)>geeB?VCqGqm7NtXcaVl zl1r$xje&v2rC>I<{Rf$UUE9_?T9N{v;qLAZXkonZ>|8xGhid%OiB8HZtQ0=mq1HHXvw_(ecahQd3l^K z4fG5QSC)edVg&_-lk0G9{$HYYd9SfVvT`6x&UcqERg0FE7U;Z-6%}}xsVkH+S_vXKp+3Z2Y0kD9)Rh2 zcWd@74NdOWmbs()x%CM|Cdl)O8nA}DBIxJRH{Tw))qN#C`gP-Vg$2|ckj!2g1>h$8 z0a3weZs@21F%J?xJf4p{zw-$*E_lBhB{G2-l#tl~+E*%-){%j2Xm)mXh^Oa!E11gV;9!6_l%16YDS{S+ zLt~9+)9=7Oo+Xoxwk}^$UJe+S4HrqnXl7b50#RIyD3b9XD7IddNG=a!sDcA=d~7TZn0-dZ5SltSy+Sm zbv^;cEBD`S(zcnv;*roYh<{=BuX$}(jV@t&oHLld*B~@-OwY7UJE%C zGJRe3JwQocwR<$uy`Q`X%!0_TU)*BCw~0+0ViF0N=gB~274`}1Y%GjW$^j` z_pOZe(%(CWcR_QW`r2e;q5^Ez;HRlfO(i4zEO}!Qs+G}~^-$0a!by$CnHj`@$Id+p zjse1KIMk!v`*M|ZjL7&LY~L$NB`WDqF9ufHZ4y;IYFe;_D#~gYzLr5t#dsW zHbDYhH&IK~&h8L)zK@Y|sj-k2G_RwxAKWw~t#jB-D=j^Mow@upGFYA8o}2YtC$M-$ z)p7n8x|x}o4;Gv=5+(GPUYCcy6v3+`bs7!Gcxew@q0j_&ny+C^AkKx2;!{FB$Qcav zoxdPXL5ue(85y5@gjOi#L5t`7mWOr9IJY?UZwsnDM>> z5k7P2?Q#pIeyqq96=FE=7fz-Wj9}o2xETaSdMH7?VYrqUL`+HPeGQ31YEMTB(K<0P z@p$$SRqV;5M*-dLsm z!0ZR4t61w=t!-_EcD_z`vJw-2qLGr4&f}5M(8L-cU3ft4QNTs|(6ARhw7=Bj_(DmN zpd06R>a~y39!h}`m!-$_^>HWD)eil|1~O9Ku;WQ461;770c$CR91iNeE8+$A6&w=i z`H2Z;#Jy_{Rr}plbD&r~fQS!>2PgQfAjA}xLj~_!S#=AE;uRJa)^fi6TW+UX&(czs z^G-XhUl(Zk5V0XHJ?bQ@?D0%Wg2Z;qsYehk6^}5lfH0#3Y!8;>2m}JY5nvForzxqZ ze9&#rX`>>z4ie174)S~-5=Q=NZzst<51%ZzAmQY!2KmLR&dSE-{9qk_Jn-77m&5k& zTO`gL4)*p;5PySJY^SPk7sFZPxAjMRP4z$^6W-;$Gn?N}9I&ymPpUasS?MnQp(GP# zbaFa{3h4Os)EDgtMhO63@@D!SK<^aV{G}lqaH4*%V()M}{JH~KhIZ{M_bVjVhabCm z4iOQNk(~TCoA=o*vU(=>{QQ?UkR&%CtLT{qGDA;ChrXVx1DGYoX{RjME&9gBFQ}>U z2?@nG;)@rwA3Q8TML}|V2#Tmbzu)8DcNy?e@jPxN z=?XpqUF~Z}3k28x5Hv;rpCR`M02dbvXe$&HU*Q~Ih(1)WB`a!R+S=*7z1YoWIe&-5 z*{S2m6wsxPLm~`VR08*Bt_<^KxXf|=0a2Be?CY-IJ68bYsX&WZ;SxI4hT{?M1ry-? z{Pt3h7UK`yT+pr1FMst9ee?pAkuP5rWKwvUfn5?v2{{R})~&&0!NI}cvC<#NKrazm zU0pprK9-_>>e7V8KvMO{8YU;4#DQm@{l3hii2uYbG4MFM2pg-{IP!@kZt{+WV)#?( zw`9Vx0Vf&Q3XqyGp{mrWwR-_iv#Uo6$;8Q^L2zBq`lb>Xw7?-R?Zsg{LYMZ@KM{ez zGD!s!;}F0|u-wb5sw5)lASHdhviItN?B!E9jq$Fe)~JUr=(JGQK+55_<@60r7v?q$ zfJ!GL(+~eyAyZlhQni5@HZZ9e_N4?v@re8QagT)v)Qu3U0HU7*?ZakcBGSDNx_DDN zPBGuUMaF#-x&eLmV=IcLNwocL>aRH4fl=OiBbx=)!1Yb>!;G1dq}S;%d6L>N^&TCFO8GTn&G>NL=nrt$Vi!S4sJwg(S2$MxNAbSSRL~5^16@6$q=Z@E-el^(Q*V%F;$<~0)?v2IjT<+bM3!l> z3mbrhoX7ge|L;rzqy=$r8?T2CAHH@wcCO9%obgsMNSqnextM;Q3X1nnDq6(3b*xLO`GeWB|IZ4Gau`@fM$epkwO(ojc30ccAouKcIe@PF1&tnT-{{Nx-h=W0GKW^W^Z5yL?lB~d{}WD_%%)-%ceb|^aYI8xDM@fPon~RnF})o8 zU}_5Uc$R_MqymQY?qI1_3tCpo^mM#%eSJMhv8j;Qrl*6-QUz{i+XIln_t!?P;NRgS zz1nxda6ZA7Lxd?q?*kHN0Y1KeUx1`;=zA3oy)FV_nkEq#i;)pT*fnlv(p!~7(+H&$ zECM4<%{L9O1re@biv?cqYFY%MTbczA1lwe7ZEgKF*s)R>>@a7FDw5OTN^Y-?snYoXVbq3# z35!7H9Dyc7Eb0jw&N&R*_;~Hczc3s{5osjG?`Mr?G+170b*{0Ro#0{x*^QxoZ+9S5 zW(N@Bs3_~<(a}h0S>Qe)TkM-`Y<$;d2$^eZ7dP}lARqY7mLDBG4(AP^iSKx+IEKJ6 zKR6hQd^IU3`D*SDB;J+dkdwl=rlS5AYSrZ+zk<32$Pkq8P|T)Shc+7;8TsZf!3R(< z9PI9bex>z!=@^EiNyV-y)i~^WF{m&zGvlRA$n)}QTw$3Q7*H0#DszJ4{U1FHNk^Wo zZeXP0%Y)H4oN^UYP|sogRY2U3dR2}vgVL)1$B&QXlJfFt7zb-gVadtK`m7)XCdr|q zqJrx68=4T%wDf6)s-@_LagcC`_XbD=Qm;iD;Hw%;Rx*z--AHTo)bUWZ#%2Ow|)Kn@U`?%y~73Gy_=7MAJ*5>B7peggJPA7kqHPbq#)2Y zVt_F*N^c!gKvuvAj1WmrC=f)Rk!U#0BKYBZ2WbI=#S{sN40T)siNY5)d+LldOhUH~ zM;R>-+mVDuiY3g0qIBdb_3`mxa;Z%Qi(pOPe|6TM6My`1Ig(~s!3 zl+;wS=B&oE)87z?l$@Ln-4bo6k~~F)+?bh|Myjqv*z!`yt6-)T6!wgaG6+IFZEZ<1 zP#G%7vsEf~0H=k~Vtmg>YTMA1a9) z+E;5-Q&V$%i{d1+#1q6ISXbk_nvTb zQczsQTWFm^(hGCYx|L^vwr96qE`Xe(yu2LZ{7a?cuSDpDe`5_u9}BZ%)D3eULhy>Y z8qRRM8x494At7wDMfln<jts_qCQp5Q}dV(`$>dF_0wnbIJv z!h&~%(TKUZ>jfGO#U&+ygdEMbDXS|ht+VFP@dw=+RZeaY;*!3;K1>Lxgt!Pf4uoJ9 zdiqx7*+y?n$}K{A&Cg+B@=%sjWPlOkUu7Ff2S=cq!=wKHQU^GQ79~Eot;J_E-jouW zsx|T*)S)>OGoD^g<9FnX#NfL9^T`*Y%(iRQUy&qfHRh0!Bnt}&kv~rJjt3=uR^|H^ z98642-M)YWjPUK(+l~f2oNKcCX)e?(`_^;Tqnq_uTQLu2iQ#MO=mPru!loE2C3CI74b5nt}<%`6bnA+$py)(0p_$snWStZ;4glij*8wUqzaDHO_ z%Bauk`-%*)xVu7U?z=_r>_V|0i)fiH>8i-MpeYB(w5_p+oKt;`5BfDMxgh&}#-3@h zPg;M#D;Xl6!VdRD&V=h*jcHO!oV<96a)91# z&)r9XSkA*dcV=R%fBFV2rR&j=pAa|_u``DTg`kU;ZkWsKlNMPQlRnquCMWa9{Z3lM z$7TA3ALFlViuY{uGVQEr2@~oy8Dtd_##dNtzc`|N{v)=IYjs2}F7}q4{&VlR zT+)G1R;MmqGxo5~04`gu({1XD`C1Hoa*z-xhe7VLMju*3CLpsJhud7Rssi4Q#v@l?17P|W* z-Cmfg&5}aZUucH<7d;L(>xDbd(9cVn_}{~NW^RaT`<8q|N+ydBOMhztM@c*uBu*UGa;P|Ia)H^eaE=L6`z~cSZwt5uK`0dW*|o+ zA?f&)BBu+W-X(Kbyb$4Ka@a)=#E=u#IxPv!(CW6y{7E>)m!yvGy?W?i_VyO0N=?h5 zeq*lwuf#irZX6q{PhIt~FmYSbnXDw8^3teU-o^K4-aY(NV@wpk?a+}dSmuP9msCB2 z7(W@T2tU8cwm3KJ4CCEop63-_f9qx>x2Uo|hwV0ri}vL^L*fY;x7%#pee|5E3)E5d z;N$idL0dy&ss6C>k#BHC%4ZQV@56Y@ZX?r1+#cSCiOuA9HpY}K;_BM(>QP?0T!alL zActG(m3}6k%&>Q5#uwLqak-4GmVGkO8iyh4klUu>Xzj}{?A1b-Zicd>B`k<*fm zfI|N+GUbu#cB4C zVm2=Se)sHGd5mA^g_JDemU~OPgVK?Q+9N7+HP;!Lt+A$cp7ge;Ws8_K)(2{foS!S@ z*oJf`RP_oo!~6vbm6(GP?*5g>9j*4*(IA~!)#_OE6;@=9#_So359QxBbqgg8|F*EB zL$=&3gLpwgeeQ-C@}q98MdGA6-{kpMtmNOgyC@Y!e6(Na2bbPGr;D$w zKkz+}w7x#wQBW|{ujkGgc$dxKy9WVdTJ+~)#E0^vXJ4+5w&Wk@{y}x* z%g}CSeueRFWV7K2(Z}u7UdFg2nJ4Cu7e`J)9b2Wu__oXUkmt>EBGJS*ks^7*Uu}yP z?63HYX#e*rU$xW3Gvd%3~6sim~o=r>O{P46WZEeC``Gi;as2LBbpr1 z@DcuEi%9tK&8w(zH$Lv1hUZIkcg1%CUcX2y%T>4b$m#`Su23pVMKhp0zHA*#IL z7CA4LWqF+oBkV7Fn%HW7i~k{+m83kRX0n+K%=S0PFeg6<3;KrhB0FLKQR2hW=&gy7 z6z#?B?6p*%9e4rq*dBscW29limaL$HK&S>)(ieV=7`f%{;8s64PI7Smw0?8U`yxd`+N-C;Jczi&v@QF*=nQ!ab2ExOOrg2yOZuH=0xMaJHhlw_Uy7D>CYOC$X4>^IR zf7Q9d_gvTSAYFcLyl1Li@yk$g@AdL*&nL|bvP!&rsbSVd46|S3FBIDYcF7|y=R4ih z)HVgGx8B!=a4GPL2Pq&s|H8$OZ%kKC^&t?^;?*mWvS9OG&kl6v662k|F5j$@B_`Xw z`hjR%hxZM}?jk#ovo!nW&s`ZIy3TLy zmu%jLGWRYQN#fp;krp9s`GOdxt&;-sR@2#&d&|>iAY_ZO*#M#=gQ*#XKnOmU(q9 zl$VAVyDQksf^qe>yVkh$iYSv@o-|LJGdVSUGagn_5z&Y*^*6E*x8LRV+U0SZH9Pn% zSM)oJivCYqOxDnZ$#VxpLtjR+f`dQdEzIGpj@GutC*?mx#C106<|p@;Uggpp<)wVJ zovv7OS+YlL(T>N)?uBmt+0vVmjg1nfXtiq2?O=C~Jf!=$bRJZ8@_ML2fsKZG%?qYX=%)*wnnFmY3xsoxEN{I$rjFL8`{y2 zK%s=&(OecbI8C)CDs8h%*At9EY=_=!uCLXNvF!q=9s~|exw*O5GC;dl<*>uyK3xzA z2e!2RY#JJS-kVwx3QVh`$sFrC^b2T#Ey>BO>0<%K;W|1xqh%7CkRdaW>5UKNg316b zW^{3J8#E&J4yb$(kH6M>Ff$KKPAYQ&v6qIec&{y7zXbo|3+3YjfNfGLtjM_fdnG>di{;@SK zkLv{JF94j`t%e2WU{m8pt)rS)BG7(EfdZ5&WScplFc z&uY+j=CEtKF~Yk5;tNew6|=RC%i%@C=WWboMqE6+C_BaDp<|f*5J1SKpZDO&r_#+4 zHkcyHRb}_ch08$T667V&J1guid4(-^vO=kMyF?r|{>WvEiitI$=Bw6y3yb?X6TNB7`qG|X!YuQLE+)h@p+^i7jbmlHfWSIT4pl+^M@N>if~xFtc-bp z3Drq4`rdOotpsgf$BFDi`{XcPF}3LZBkX)-tBsxjHbw0!FAQO)#?Ot&?| z4;$(kov&$Wx`6UN{>YPi`SIGChO7QaI_Oxod&@xxMB~}jl-;YcQ*I15N*l=}%8r)wvhS_aw;|j}@@3u(GqFiHW z1|-8uG81~cbA95P11C&-6Hm+HzLZ!q;rEt0YCBs_FFdlMG1W|0`bjU86s35sEW4dy z#-`ivKb&~iT0u&@O;#W^JKMwt)nrl654&)lw2dECgV*(h_&O4Tk8iYG?t2kFmt(PB zU5t9Ogm+PH~5iT{Jsy3UR;;?g}+=*sz*jXRv28bHe4SXhj^Ba14QLk0S zY#N%yfMKC=-cL$O%24t#x*8Z4R_%J8r8Jl|AZ~1CmYDjqPR{Hgr z48{=X8~4eb#U+Cj%H1y2oSo|@9ISX;PORrn{9n17rHMxhb2!1=!V|~J(}O4PYYZ2l z;bp|Z1|6JHkhgGNSvKBbH|;naO?V@Rtz%0F$PtJB)(4=9A{o<8Pfz=+_v9fElion$ zlWC0YSOAB|2@ZkIR7+St@A3$JGK}`B zv|drF;rA!=ebgHk#63*n_22>8-PHAGCLbhXxoZsO(i$7PA>4vulQj1(>U%=BWvz&v zh3U*x<$f=T0F^uwkNxt)84kK;iewSF7tC9Mt)IO2h>BYH(Qp`f&S;QvP(c_{D*Ltz0G%UX|fs zn~l+MR%RwJ4sOc@8u%?aU6O9RAzWFuk9 z$gn7o1(X=}{(LPeDheH+ro%Z(cV=`~^geMbvD>!;(Fm6*lEU7KoosYeC3yS+{^prW zF1N$ZXB3!xGxPJU!Z1Idip0rQzp2Yny7?)UoV87{fpVl-gF<|*3+nM#WS6sY)5)=l z-Nhn1qhVV-ra=KH;vXUjz2lW-(tk*@R_RXkfeWChJrq3^!ima${&r^*|T=6%k28w zgeX^J>`piz_?)lcT`b5x|HK>>*JH;~a%&M{GLD&(jLRk0ha-~w!- zRH@yXULYY5Kv3hjuJrlo41U8Mx2WXIOoyF;%$n1KN3xf3lT|BEO}eLQUaBE8ne`Ux zbrY>^x|2&p?ik&#u`IOoaJ%H1C7B*f=HH`LWnW!ct+{8<_vI^>(_T5?HlcPK15$5g zJ`sOVT35Jstv_8XxgKyjxZ=aIZJx3?4hUgRi{CeQvmx)G*E=v~|3iK9qRbS=$ysA{ z8{%r*>C!C$oiYMC=If_YRj#0Hju#u8Uz~GLrBAZuCku?*Et|J5*_LfgdZFP4hlTOu zc0zw?<$I6#)2g~MoA$*?xT7R0IWLXHPiEk zg^74<{pvHBjli#S@2%KJ#0PRR^1d?C$@ShEWzbsh>RR9T%dlZNb~L6 zx5S|d=%T@)8Cn~Q`?J=E`3ni_{5@3EREcYRc?|-7Dz(mvyxCM)>QYklo9|Ejs_nPy zCnwKg*4A4uG_BPN=as%z%;&UfmBp7o+=0ZF&i2wjiQ}q-Yb*9n?wg^6Q_`m0Zo-O; zief)^Iou$03MZ75lhJCs4o!SvvggkwqL?gB{BWUFwI`(@BZuuTJ=~K}2j|c4ewf=I zSSn_WsUxe6Rr1z$qtCN;*Ku!cw722YWZPHj3~?^58aT;hWU_Mnn3z$R4aQQSEd~43 z$H<^ze%+;EHR6$pSO$%L-ySN8n^XB3sC?8sn~qwDmE zP%Cb_i&ZVsMqPkl_pgn<9xs&h>6TxD7TJ+T{bE9D{L&11@5O}pWf_&sVPLN@oWZ6*V=)a1v4`zXQ1p=iiM&V7e2f2c*-!*>9y74@>UM zdLLANcw|M;$As|R>poq&&LJy{0M=gcwn2M%eu7{WM&AmfuC!9;oo=(#sv5^bc{w>~ zEvR^+)VY%7L8FR@)B3Archd9H;s*xmTchl!hwGa|xlVv@XF9~y?_G`5xtMyZ1I;{2 z>2!A`w2}-R=yN<{TAP^(ii$enwHFjczE7m7p<$q{&1C;evQ4KkdJxr-r4b1Ag0N(* z%WF57n3(hl^*?lPa9wSzD%*`et1F`&o&I<~kkRmD(@iHKGb~7^kkXX!v&mA84%ojM z#X4Ol@pBbGPk>id@mQeM%3o`9usR)hu4-x0GG_cqg*SfTO_*9$sSNNX`j~A$c#Ka= zO^l~Y;P?m7g3DzwCoj*`T(YMn@Co$%1u-S(jDQS@=g zhyk$BpMW{4UjD|7PtZ4xWq0w(4P&@{%k#RE?f7>qg_5j6`8=hSi3C^wKZ9s4Jax*# z!T_DLV%7J(f&3CxalL*uU21LAED7$m;CfpmNo%a7g^xu*%~|6u!|$&S%Q&HrJBGvrU(HIjo#Ru^hEcPU?WF4(%8E(_MR2=GS^_&< zP_@D+N+S!CZtah@uC1>EYWU&LfWcta7@&?(=tNT;v9DfE@24z>MJelb#+evUF1tI; z*7Jb?QEEKNk1v*{56(-=j`sFfby{?#Y}CW-R%|LLw*7rpl`KXxYbq7e3pg}UW@FW< zLH=`fWB*ThnEyYdpHU!SMYb zx;mfhYRX!j3W?i1vC>CKMKBME;!{R!gr(@%cKP~T5wyd_2|4<%4USqZnV6U~J@@^3 zC!WU)%JjpLqP*piv^4r#Zegg3mF|hxZd`H-AB=WA zB$tT7BD(O7x@W-3PVU8JhDgoJ+h&_B`u^QJBdFGk0_k{%3`o3SVufDBC*-A=u~g~h zE~Hx|R-ZS8P?SqeM;Tlv-k$`d74V6v#+vM<-YqOFLdi_rIti@}#2&=N#}rw|bVyHO z!9Wqh!gjT86IPEcxfs_~xudj1B2ZIlw+c4S1g_A+u?B$v9IkjuMbIV&5{EDX(bi87 z_ERQ8XcF^VkB*)s%6XW-2POwyO#-eo({QbI4bNBkURv53siv%~_97>xX8u=(pqAF$ za|x?jVMsQeolO^%my$eDfiUSfc(A%S#QB2B7-~zbVWRz=whk;~fp-Fg4#P4EM>e!C z%YMp)o5Z6S(aDwSN%XIwCme;Y&kx|3HbJ{_aU%pVZK&lxX+w zC(2VIfA(>j6^M$v-=e6B6Qgr`j~R>W&yp3TXuu4e#KYw0={j7l_=6KaMLpUxwT#SP zJ$2Tu!js0h6?a0F6}c8WAZ_iDTb`2>zf_z3vW0y5!lTREBY51sZ&n$Xq6TO=a$U(|A~WinQ7* zO_TC(k6A4GNUPdH;R+*gK2dB7ik`i|Prl+u8VMp_y&DV7ofl`7Zd_e&u_ zx308?v_Mg=@p;o+*dA;Y*jqcP$y>vu6+Kn5*20QAW%JdTlI9)aucy5L{JKRWE28XM zuVZ_(zp9Xx#a2g^w)a+9nS*H!b2s~cI1)x1f_M4eHR14#j0{_o@fXUqZxHUmQOtxe z{qEfo-o*ZXYUh3Y=&txzfh+{F#6%XLe05*0$n;JEdHfjfP85Ynos6_JRfae`5yOud zog(VZYr`p?o@5*^omTvuhePlLDet&$6Q|F49@Ym)?cMk3rEr`(VSW_ubsUgHt^y=I zO4?`@WJv=UB7q3o<(@h7k<}n0V09hBq6is>+;A>zt4K>R2mC+iML6k-NIAlVek> z&o>_xI|5DxN!Iu8Y_SD^zpXXzugX4#@%VUARx|H7=+?6StgP^P?^}`m=_sQB9DvQG z`QCQ4Ds~lMycVsEH_hcsAqFU+1e z>eX7vj6Q%nl1y0%dT(Q3re2Lxiy5Gp}uqkE?Dg(nT%o%m#~vv?_a%fE-MF0sXDi_GPK$v0{_<1FffT?q*gw zt=`2X?BSydlij{2(FLOo{21nCes0 zKeSJ7h&BB`+TJp%%DrnJMG@VAfRX|ND$>%SfOJVWNF$x1q_m)b(y{1Xu;@@yS_zfz zMi8aDq~pxB_p_h(KhAm2IG+w5_8w#F*0t{Y7js_o3VavV{Jur^gkXOj$|klwyE`nb zVsr}qlCAT5X7Oo>ioBj8xXGXXSU7qte2&`}Nj=E@XN^nH(srB+xNSi2#t{(I1l}PV z$OMjUAUcBfG}BvO|FP7o+u<2!hwVgS>O54!SddCNJ6h`hL>mqa0p=vv>r0WL_|smS z$6U?f)8SMiU)f9`Vz4C$&otS^`}q%~N1kL{Q&`zwS$8Q;AA-V zOob?KhNP}9U(kB=-(SP=u$P_%?IczQ6GgoE*D-i{TB<^f8@OM6Q&7E zyhti}9DPs=wGodmDE=*}Wbc5#!bVr+VqG$RmbFL)`6TzW`9=!s$dgV zs`HnSC4)miV2L>n7%~LLlxK#N+e*aGvuLR~v18?cg8N+gEY(Kv`P2s==ni?t5&7yU zRCX%mki%$|y}nmUnBoS_4xd9mGE3%~O(t=yil!}Kix83#7FHRR`K7+b$!&8yd6WIM zY`Mkry|@zX>YmS+&L|&RM^|5*0pk2;eKJ>ZbwpOyi1F<#*;Z%YLIpLe-o(UHN{S`V zR{&5t6NgRIIb1}w1c9%m+=={fffkF0_EkSW2OEu2B~LBYD1HW2*jvRqS<;D5?D$Xb zU4+INdIs0t#1vx_d*)x=m>*@Rnlm)YR8+`o!`eUe-J5L|+Uv}ASmBavwr3;%%m#~W8U6rMYfzznp&K!K zjtopSSQ6OhNt!NS+L)}1NPR6_Tw(dsrE7I^v=pGUnOb{FsynLuQY}u4U4Ql)A(BtF z*m5vOnLT^F;Pm~waF$c=KXfsaQOv5}uO#Z!dyisnU`a}PE0tsvPi5E2CfE9>du`O8 z{#xq(+%h=TrtIC_u~40q=CmIcj8t%ON z$uJb(sTIfk^$(|fW_sg0Xj)ZO`JRi>h_LB3uAwqA55fX-a=b}S&d;!}Jr3P!9itYi zodM7praBKDJk&ioXdj)mdIL;E{NVWLC@|1l;Dhf4n7P7j?>5xA3M#8|i=N21s9AGM z!MaZ=f}SJbg)w2B$Z0B|xpR8tgma0E)o=i0Dg`qCCnBAvIobND*}$j?03#!%p#3c8 zipsRdf6!@mk(@KbA%7777ncW5yXfi5y@Zc23^94zbb~_Vc~L|JL2*Qgd`mzGX*-T! zz|^N_Ewz7Em#~+Ailqm_+e94)avp}wt4!?Di__o^ja!$Ed1_&%%vVkv0(AHQeq)VSf z0-yBxWC>L)2Zjod)KvS_NADA$gXihA^?%%t%#>KV6^TRn(9y-=hsRJ}f9TfY>;g$Q zw2KtU3HnX0_8o}!3RU}`Yf~U$mAFPA{Oa)Ce{tw8Nlhu8it)$JOMU*JlE>*yXI&~k z9YkS%X3r>HrjsWX`Ex+F$rzpVwNSfIz`OQm^&=_J(cYE9t_!|LM;FleYxi6(|IRzx zS+}zdX-8-xcW)yY)K<9IQZ|7Cv!*#QuWlAMI`K)jW zJR(zxoI~o9rgx#i*7GCpjznI~U7SjNo@6&_DqvWd|B17()1ta)6DOLGd6z?P`(#8uzxa(Zv|$Fe-lAHv)$o!<_8yiP6g z;|mK>n!Wk-K`q$05%uohB3fR|&CMr0bd4ihrKjU%UGE=Uq?)W67$!~ml39%E|I%<& z^2Sg(t;xAa_0L=l3&l!7>2$sQoSL$c%*h&RRcBmh$8l%8-p+Nuo_EoM_;3Cnf(IM> zJz%SQE8|WRL;29=tWQ?b{5?QHDYLk_?bmKgJz%$&`@;5C>#?N9+E>`^Md1}%=CM@e70s8xx2!QhwCR1sS}mIwvP;R zdnlK2ecE?8?++D6IVHy_vKck~d3>j@rsQ|b;wAFsL?MC7lb!j=4T*1d54uI9Bz=ye z6}SiX+%|=f51txm&hG`VQ0Z3p4ffZ%ES`tyHU1J}mXwrcVPXWk7kP1iTh0ClTwH;H z{I}`3m}`?|D9z1LPVuFyHnufGrBqZzZcB&cl(@TdbBKE05D^^Er*zx_3T=h6{w!5S zeLmPiOp>u;AS_^~vuL?nt5f(&CMPD=fZPYb7+@MhqD`=E`~#in*npXs%by)oV;2&c zEjr}mjs{hi?K`2b$n)^`i$_TmD{I38wjd>+EMSW71O~d6nwo;bF<1>zQPR*HZqTOpmg?2z zMEM!2JV^k~N!o|2K@^(8SAv4sw>w82aByl$)e7<$)1wldGM<~*0c?!tg%eTskyO7^ zNk&gy{#AdozYVDn2z$^!hi-`4a$C^bfrrHD$}kHaUKrZQLk=Bf0xA?5e#h3{US-I> z1{t=dntqPIm)6w?+3sICW=?8lHHqf;ce8opX(At=aY)``1bD`}Yr@pGZkcT9zrk@oG$b z86e$rYRNwRYG%K@ys|*2LC(>}W-RwzETzw$?8P6wvS_4u523jkXgZu&8Tt98lwSEc z++$(w#?MCOh6I|=U$KpL=>8RP`JZohPK9DAK^0X&R4qWL9NgSMginH~Hxi{pE)+;^ zl)=mSp~Ey3a^x7VXCz+cR`4iGaU^t$j`x>ZT9V9S7u?g|h-mZ#d-tO+`SnHm9?}AW zw<*)_=!quJplqwx?1}|HJ+z=9!vb(J#v`#Ei$A#82)TcHNee1K3k#jrMA7ZokZ4rC87RRNC}q{KXsmCy>B8C8#DX!WC$q+9N0-gIZ+D77Ly+&2Yjgq+;U_8?hI zqgQuz+S^`PkJ<^IEzU=KtJQN5oE4;;KGSgU?xscl$_lgEK(qxt3DU%rX%{6PZ0@}w ze4|uMR<*ymYi_8flSV?En~U4j@VYq z4|OA@625wTE)CA>IYprg7Ft?o6ZkdE*3+$Rn_mWZ;~mT_a6B|P9`Y^^OdBkCHeI_{ zX`_WQS7j^8$uY6e_v_tSRwXw4_XP<)^72tFt!??e4eESgR3wTh4qdw}^%2I~BZGrP zu^Od@XTa^}QG`we6o5zYJ%4?z1j#)hg<$vq#te|Xbc1FX$^;Plg3()YAbJ@B%L0lE z?xyT3zjZyFK?4JMw$J3As64%Y#>+dv(t$V@NV@)+hU6wy(EsKxVnwNj_)y3Qdjp1q zkbmLosIrrKS5ig>l*{T|wqO}$QTdAw9&?s8BdP&*LRr}kJ9M1TPzEQ!e_mZ*hfgiD zt!j6p%L4-5)vpG?=Y=Tee>M~RQ)NH)g+6$&tHWCZd8R79=jsUSe*Hu}9k^_rfRqGc zxD$R&Hu?I(7Y8{SV6phOAKhVw@*TWaz}>2UU;vG>!wej(0L22pXod%R>2etH4vvnN zs$_}-&=2D=Np3aQDX^2`<*kH?G6q!3XcA9MHcSXo(t)uf`(6^EXQ+dzIJ zIjWbQo*qDdFs7&Cv5Eu?$j|RfS0c9*Z!QX@%3qut9jykd3&J*g;~XHTksbn*^EC_O zf`jGYql4v?KK3FMW*{!&F}AUp0G&NWh77ptyGck$6pXjD{06Gm|48x>H|cJV?!$38 zBYeX#)(ciVNK77&Ke!jH!!($EMO|DR2}B*V*e49xg*XQxn;;(_{QklU1RO=%M_xG3 ztY7kkgopRQ>jzSW!s=(&1W`s_*OxERNVJ_BSXJ?SfvCALRZtXxB&7tDM9`F_q^4Sv z;$-FP1DaWn~b-NR6jX zA^$!X92A0nRmR6VHHVO$JnN527%UOcNF411u(orEB8aBT&z2-Ty{ewa{PorCA1M*>VPv}>mE=W3zy?kvf}T+QWg#$~<~=+|%w zihf}`3j?17w507FmpX+xIOiovsjJ7Nc8!i|tErX2sc*;68gF90J?%1Hq^04mudiP+ zoMW8iXs@i?3-4;W#wqCAZ}3v-lQ2eq)W3f+9x#6Vv=4+ZFl0e}D1$ZW3`bO>)H2B| zr~~0VlG1O5j}IP_;KR{z1Y*|{ID-Iw4e0#@PZnfPgUk(HN6}nH1u{IrT5lBPcj*AE z!tW~sIa%sVM_NTP?l8EJN%6iLaRmb=@S()gjE)ESv5+xJXLpF(8?l&76(z8#CZ%cbBrr56ofVmuFa1FYpdf-C)r;1!~}lKa;o z2&Z65?eg;FO?EdYC-l)a`_dk^AM}n(u&+I((C!q(Z*p>T%NYhd+}$A-W)aSvE(egK zLG>B}dfKH+SFc?IGa%B2K=h$0Hwily$9;a6mkj8VW30Nqyf4JK$oRtUN9z;8v9n)XNJxnPwh|1p;i++ga`@rHY8dbC zgG3j^$iUy;7%n7}ssMYc;gOO3gM(ZQH?R~0Vd}~NsuRxI1d%ylziQl_FGlFVY3T~) zh!uU!mYJB50H5D34C7Q`#`>=eKfhExbb|^b81jJdHw(+q z@^^&%*r!VvhzE8-mwvkS@nthU(^k#S&i>xfL3%cNL`Ob4fCQ&2*bVtPIbeM!yv;2O z?m+X)%SW*C!TJdpO7#rw;>)T=3txX>D^VLrDzA_zy3k4$~RK$Nap> z_$3BkzGzbyR^te4)9~B;YVe{!SPst`WR0QsENeRrJO9so_)}WBoi*JkC2{adxpe6g zlqFD{N{I;lj~+V1i;)B@g5kCViSqy4uAfD)89x4}f`_&A|C!Ky3xPyyX`G{Z*~NN;|^RQFgsfVmLhPq%L2TF(~;=64HXeo)**3(BqY3G z;{*#6JjBp0V}R%|ap}_ZcR=9KBLRUD{hDaf`$<1x&jYH_2bYMpHk@A&0Gn-{?#|An*XKgR0is#_-hpdB30f=SrRWoM+r}6L`yM|WogP_!)(JL`^4Rom* zy8wE%73wy6)kHzc0av9JK4SF`Uxsz@T-Dl(p8Fsj}H}1e_!9DS6g>bj!^AR z!sWjIEpS@NJ~itup`paVCq!>mz3&@_Ha1wl>nRr4^-fL_`(?j z??jDMHo~8pD-5My2{jJXZMb-N1|Ln@;5rB4x$Hc+SHazpBI0`vJ90Bv{%`S}H_ftnY{wz7(f=9a+SN(K)#C@7Zs z{}bSIeu1_D6eW*LOk4&Zm!CgX`mP`v(f&MCIZRB+L?S4}RHL^ZSk3_`4fa5Ae(&t< zf%`%BVNEU2OyNoKp&ZfPypiEISFii!R8&>vbcOGjxVZeeD-o!or2C{MkNYj0_17tQ ztl-hY>0j~jqYm(e>xvQ*Zn?R+B?ZuXLK13F%lmiljDwYRb(4_Na*umc_@U(~D=)XE zVoX8x#Svd~IXo12B;%YTbO_T!Kr4xYC+#NvgREg!8n1xOOPZ-Ps zQ%sInb)=#y(|prjXfbHNVTtZN06R2&Xbrivm?29I=zv7?1@GU#SJ(!H1DeDN{-k>v zg9aXiR?CPuwO4ZNjKz2H)D0D89ZQH_Eu+@h!0<@Y4Q>Ht+n%(?pxy38xtEufF;<() zgIHdvv@$gGdc!^7aJqxG8jxWt3J*$^Xb^i7c;Jt#7cW<4bu4x#f9rX||ENK2Z|6T2 z6~2E5EHPrj8&x}84nwr4$;s!_Vbvit)KbmR&n5iv@Lw#8wye%-M= zej`>;K%fzF?Fh$Ukp3=b6pTMUe8^ZHZ+lw8?e*h zZf=cNI&#t1Pl3APM{Hyy9C_Col$TOP9T+^+=RFkvxrNS4?*pjf+ZBJEo=*OSe79NI zp+e%FcJnzpa(>w_M&{O6cLw_Uo|c)l!~f4@nOz6gL0!ClZ{D;(RRyy@0s9G_V0z$= z3_L$Wgdmmq z!Z`mO&W>CrD97{ap*KVhiid=hS>uqy5&xuyTPhB^!Q5sb#4RKhf$s;Hb;Dd0T5fO| z2px+dB`24~+=CNdQ=_D$gc{bDJ0tDmOIlvXOG{R8N_yS$?fESmTOdLP(aJ4&L<)B!bMH=I)u zbx%o79u^%d1&aV>`~oyUdL`~myJ~5R?NqU+AI0FazNJEXV!D)5nGz2SLzZT0I(lx?f~i!0fMTr6C6r&?{i9yR z;^PL+#)#*D)&2o=;Ge~K7=kv0J!K&rNZ4{v;Q!9AUY79r%2&}S)p&E!+v&ZzS5#zW znFIyvBHN3Kiy3g&r)tXKy}+U|S6(z5Z1|>ozq<<5N(npeJgrm zeEfZFO-3wuasGg4LLB}tRZ#Y>Ew>=P)01*?f^C&!%$3FZ>?#rLJEc`gkrI9!!m zWST@VjW34Xv+(ux_3&t0%|1-#a>lWgq9ZQS)771rnD|e*<4e|4g7w;0+>3%pi>*wT zROp7sqiyT!@8D9VYKsRuquU(DqSJ$>Xu}`(U5jnPs#Q!m$`Cbos6xO;T<|tEHJjWM zTxRwwlP{SSyQWFn%6@5RYO;98yA{E*2#JKQ=#X%H8ER2>9|~(Y%VN>iLnbruHGb4M z$?$ZHj>dZv=A8oEg4}`o1I`~+3psaG-eUklAkqNf6CSVmj#&68ALh}!oA{A-nYFR; z=aSG@SDBF|B|Rm+FwASMyPuN~OFaQiU@Jq;UZVdftf2Ygps?KW&blaQ1g4vO)3p?w zv1-5txZgB82+h5$%0^!^!kI6$>Zv<6zyQa|9ISicMuo^W^NmxPi zAoX~U1@FeF_%fQNer*M;F5p=L9T&(Qc%YC=7%MRl1mjs~2|~gA+IeLPZh@t(G{-O~ zblw}`EdW5X7SO!>^hakW%ZxdR#v&ZU=yY-y(6XRYEo#S`$?RM+W|aVx4k$k$l9RWtNvh`u4W~ z@&Tl*3a-AQMAqz2an0tzwos6D#i?9|gcSVXAt`UJE^zcVGz5R*w6uNjb%F1S-ZvaV z5P7mhN^y?87c~yXhG^3fI$&#ugwH@V&ce(OK2dGBT}IkdyfxrY`)?R6L!N}7IQaeKzJB8TWljzMB`bo>dCeOvNpWPE4kKe@QH*g=_sC@s z48x0Ld{*PSPC?bHJ`2unODzj?bCTH0@DyPP+5r8S^s6#G)4Rdq^vY=pH!Y{9@8cG5 zgV)Z^Ur8ZVWB_Sp0{v!6XYbErpVLRY6DmHs-%V4v%yD=(=RCiXlLM#o6?@Dt=-H+D z*#l_N@Xx1A*u-{6=q?aU!Y;zO@UNb;%*h||mulS>%IjnA67g3Pp9soOu7zuTlI!j{ zN@>$e?mBF=u6+@CcN*^-dCOAufw1w>{293?a-9SVv6lyQ zQ7Z|VNd=rD^4UMo^Gxu9vpI8a*d!dX<7?4XE)|MdpNGImCT$K7@^X2d55@o}U+R|k zbU{pl#dQ3U#1eM)yF|WC1nt4fa0p+|o=qCRlQhqzV&;b9J!gO%-fs*rs`}y*s}1h= zO-<9o;2mvHu&i)wiUfGvI$3jy=e%c+^zt$v*s61h3%8)1(259E-l#h@DQQz& z(_nc-FRQ^_=o`XJ{fG6NUG27jMxSpUG6j(zE~l+Mxk5V8)%!G$Ysb8vW(R3^TaJ{M zU7hqcIk`^jj!7optqz>=!nc=1-PI6blVI4Cca{N&LxqE=ARz#=PWZf!Rq8HRE^+vN z2VH{ILmx2H6k$E(t)TPT`uPPO0$k6cia&-pq{G;-ctyy>q4f$@`M7}mx&zuaH76=6 z8q$gbER2hsfuLO%PY4S?^4`g(}Jg|Z98I3bWt0N#zq&*vR$ zhUn2jG>|f_@=5mnCA>j>ViOgAF>bYYVl&Nf&}piwLQjFjq>#d<_AUf{2g1J-G9IAC zR}0))pL|#l*-+8KUW7Io%vS;i?C}nYGOlDd5m z3T?G01CEdFz<&X&+f*qAK%;~(>apu!lS&!H$Fnz^9U(yV z`Q5Q)5%i@2u~1-x2O+X3E;Wrl>ykioCaVF?~F1RIWef)O7vGxO*LN4u%-~=c{JL3km z0>ghA>E0;8UyRZF4=f7_NC$+*18Uh1SQPzjRORs$i zs4CFiOykt@rvSoU5Tl0O=HGz}Z*BXQ;tdj#w%Hd}%5PHBCf-Oj_=036Fv-VSJ4jA4 z{yYnldV(l}mYhOLM%Ye76)J=*Onw^-i&C2Ju7P(9A9)`;3z!iW55pljKR0LP_U1O~B&Dk>_CB6i35fMNB`&VyBF2(PwEBUbDqcs=`N?ND zuQF`205QDIE>! z8gaBr0IhWBQ_#7wmtwPqH*PE!cN+dU0F)P?s$BBrmV4*&GhXpeZf?O>2X$2ixOfM9 zTT^ULSj{XzEwYzk^>S}s37cJyK14yEI|_?7!l-L5l$4 z^r735$@jOF5rKhMX&=A7nVz=4ng1~$$@|u`WNfNx=hcxgIS;5`U_u2q`FufBhQM+L zT5Sc71qNCIPm!1ms_B@pq8APnQUzk;e2C0h%Rz1_2`?!U2%Pidc2GA6I^P9&Z7;kZNn0j z`HW9CoAy_7Z4Z+PZpd8;xHI&#C?i9Zl6+$5bbJHsT8lC;9c-X=)TlqO6u3$WKm^r; zeqm`b?g4z!bYbtMJ|U1*hqo>r2LBk<_Y$N8L`Ye9#Y%7gN3HgYlQk1OxF#{RDSlJ;LkG*!4=UxM{;PiLnsAd+ozb|C{#@i9~)y{c0} zx8$;6;*9iS=HQ5I9*3jO(j42h4*ZB`naoS!^Z?|7W|Hy|ofW#eW#zWV1g0N2h%a%l z&WH;XnMQD07uK1z6HZJ~iLf0mPs4o1T74ffA#@ol6F=V6YYb31S9vNs^ZnN-4%!pc zQ(yU`us8pJ=WEv7!?f@_W6$=JtD!@I=`b;P4oX7*F^;=3a1uA&&I9KPrfL>@_xB$0 z&9Cp?y_?Y|x@qHS1?H7fwH15%A_84?lEM1c2XB7i9^X*?o?OVROL~IA6qb2krsBcz z?S3N|FvEmIU;8>+N<)KCHy2<-Xvj=dp+6Y(ZXoDQD9Z@Fcum^DWaF?59T6<0{F{Lr z1D2XYR!sK<#9{#{k^rR9cBx!Z=20kzILcuVDxyIS`)v4^j3N&J{%gFg*xq<#8jG+e zmbtqOi{DXXEy;Vpgl#B8k~Mv8l&^9TSkN3Ze@>}j?FvFfz+IuXJ{<05VOhuG7XdgV zk_Jhjs_S$80BaIH1ety7Y($FJG2bco{D-R)!8IMlp+h9|+2Y8UvAT!pK{ol{U0!|^ zc3)iYUVO&;z<1s_R_an|@yCV2zQc5-_vN-1{(Rz6>=#TOV&@w1Q5Y(&A7xY^v7t*7 zYAY8UEXH8-UYvFq>aD_eSj#Vk(Y+q%bl0Esabg2oe*zbIXL*WU=^lX8?f(Pzc%nSIGl!nNwQ9cihY=<5D3|U9ah7N#k`8ji=*sH}?=o z<=R+VSv~eWPoW}pNHc4)VIsOgbu!4|shA2~|DfA8bT0tqN-8$*<&Y?Ttr9xzNqYBg zUvoz*+3h{pARxs(Onr}b(pf%2;D*X`T3szKubz(|fY=}w!gw1?61plV{%B7)v*{q4 zLfly~*lbIKYj~;N)x-kp-fvWD+ zQ|o8X#KIo09kA(%&me%6(p9ab%h;A`ckuzVhkxPWp%h5~yt-?doRIf2C*#kl`C3*6 zal#pW57`N(w65|#R6ie<90l${FT59zzZHDA+U6_vlKu3_VEOE$!cPD4wbzY-NEz?K z`oY0$@qAp>MqUFP7X&#|0J%squOn@nH`5DvTK7`D7Vzp zXCNyK0ngRM(-NNV`^UOZW=i*jT#k0;VcR~2Db)H=QgQIj4c_oRLaRC$$)xTIkV*vPU0vI+2=%3E7HI)bO$ z5k4Gk+t)_#vmZ0Q7jWqM^Tt{{?B3e9U<0kY+fVxYzb!sw=TTGZBfpGb+XKR7**rkw zZQOluG^xgfFFo{tmJo(DIFsI&c**+@=;(5x%<3B*187;&4Q)+h82@3wZRnA@N-8Y0 zUo;j1{wAK$l@%3ci{=lNk4hHVvsx$xrjVNs`yL1Iq4-@R3I&S&HSs(_IwCSmuAh1oVzgkiPd;@!zOwMG1%+w|kw z{FMWr>ypBf_q`RnD|iSi7>}>M&9&T7I%;%Fc3kWD{d2COE66XvoAduwR3&g|`PP7F zfjO6O0`q3-*u8tlLTFC_(g#mDARBDrZf5h$W>qD?b%>OK=U<^Hw|ZLd6nGDr`VpL6 z`JPWDxS9t0M12IkNcTCrr>Cb4tx=VoPD$e~D7J1><@fvPL2U+vC3J_DJOhUQTy2t0 zs?D8byBnz)MwLJ$=zF;ejQ~70sOGvX>W)aoYb2xEfbX$fX|btRw+#3Ft!MilFip`n zpeJR6>rj_!EXN-TF-s6Bt%eREi?D|;Y)56Gdp?H00H!D+5T{jl+b%PYPj>`*xV(n9 z!esDZ&(AtNRUV@qgO5MgLZ|q{oI7Tq^zComiMBQLbbBF1y#ET1&h!#hM><%hS31n3 zt$!1JOE>`cAmm#HPGjyhJi)dGS#Vwo*Eo!@!M8Ya9aHQrKKD|KvfwcsC5XI%k22He zmbe8m6Rg(9P=TowDnXwL<$ZqkyVavkX6=#(=K*kAY{IiF`(dme{-8ER7tFWw!$L;l zwCvDPdRZALloaJ4?5T*`{Ly?J=u9@Ds~&fnW}=?E?+o$`evx}f&*?JWe~n;T(q3p$ zncq6g<}31}9YOg%No6*juN}wlXtngl2!8j2A43MhSCfLNzzf4AeeoGH&Vb!%ZC|-x zQN@*54k@CW@q=Fz{uezG*-KWKlSwJI!8n_e&+fZsBg_Q>Jy0d$I`I@zC3A#oat*^g z3r?;Kp-X`1O_*lp*e)FOm1qF41CXGi>N5M<^l83@-9A|eY5*EQR>rJIDR)z%gaYf^=RJ!3TscH;jlu`wydyJk3HS@{Q=*>SeZ zj_uVwfWxU*I{%b(P@16b|Ja9MQV(uSL!<{+*{%_2TCudGO?K`8`y$pX2<~7W$fknM zv`Tx*3t}ME$_YIyId$odAN0|$!Qz4ObVeYT^cepez@6IaG+6NlN5UFA$#3k!63S}S zw2>ZZc>QjYU0AbEi+Z5I1}`N2wDtFS@{`(p#tw~#qsueM;G)phctj`z4e|#Si&|Bu zlKM*Wgh*R9%J2y3>5E_6cWo?WTbVG!S6@v?*wpy$qpXxTnj6TKkRU?7%qP z`XFHiDrCR;Z4n9{24lC#`S@bksOI;KqmU{-lDSj+S+;r3rkfWl2Ftpdsy_gx;PiIsCmR5k6w_82a0*tCpw>Cs%qpw|8nfQ$ zQ%A&CNBTKR0t4gpw&pPoX=SIH=Q_}492MEm1&#YT0+NX-KC~dY8(IZ@$;{FD3TD?B zF>m5sOe86gm;^~NcoUGAyj`3H#+vgkTa>G@*ZD0i35hrBG@?VLH`f^kIU%A}!PT{@uy7SxcX(*GDJUj@I++xZlbdz3 z!yb@Rg&I~~Q+3KMn0$}BFCUr#?2ho8u5*jvx;(L(lT`}43!Qj@pVx{DT%zTS*J{|o z*MSe()uSYPrIMU%Ag>E)Vb{+qDmi9hw@`Y+;eqA6&4X*NeYI4pTA=ywbnBE|zJ|sz zPe7GzX}JhAK~+ilWHjw?kZ$=nuQ85YcP8ew5!kj^I4ZD*$mO_t%O7tg>uBd^K} z_w4jE&%y?snVh9aXWx*&1&HgAp;Q(WRFbQr$wt?%1$p6;zvc=N7Tgodh=>K`s?t}b z4$CvP>EfErO2(NV^wn@N&kx}D!Vwm%)=s1F5mwrg>SBY5n3&w75_4sd2OR>$-g1YX zFezzg?l=i9o2X7t+^Igw=tiQF?tElj4Zbz1W|fC5LPRI+k6mD4Wl5a;LBz+H2QOcc zjZW7bEVb{xUI?|J2?IB#knf$bGVK^cN=vtU{W zuySq6`s67L+(rig7^p6|>HNAcGvbmO+`0yFIW0FCMe~92#|sYR=+avh4L~IvH7!H= zjP)Kp88vZll;bF2m1@eghb+D6vB|c!Hb??FqT8cTX%TL?ilpYe^=y;_0w^^YhPyC6 zH~C#w6vCpvm&jzfBo_OosOl3VvUqcDYiT(|c{a+?v23w)>ef`XU~Eu;Oj*kT_0hMl zZ8G1!YI5*cO?;UCaS}lz>`qTht6nUJn&2%gi+z<^d*e1~Nn!DLnYDxqujYioBi}#t z-BMxxvGzqNw+qZI%ztcchlR;!uxkiW*~fc?@1dxVnSQNw3*HW-WoI9)b*FWImL6R+ zR8ip>k>uSB(XnybobO59InrBP-xJeW??3brM@w##j4f6Z!J8HSc z`PX|vq`S_HyKT=OMjT(IB~FkutxT2B;n8df*gvc#F3n63i(rZUC`EX8+2O`OjvGLW#WVbTTbwGk-q`($Lbo;oyIEovU z;vjOR!RMq=Cbx=8x9&*Di;$cS7OJ<(ht%TX!`U-UO+*Y%%6MAFHm_K*z3kQrRr+1hILn4Y|DH(y-wGhPDEsV z{P{qPI9FgKZ(;~Vjn&;yTcNI{Mr`CUEz?1a*Cu^8Gkq$#W`DI`cCX%jrsjZ^-$k^v z2cbClqIpsBDuz!BT>C+QDneuwaJ{G_zMZndtmh#oXC~DGZ27+jyyiwg)nVSA0FmOb(ogpT(bHkE3Lt+I5$gCw$S)k zcX-5MlA*CRo85?n*wKwNJ3H?NHF+DpHV?0bC&yoSAxl$+FDQyi!byuUXx~Lh>=f(l zF*=TaGHtR-AQf;lcIZ&kAnOtu2%69g19J-TLuu zq?>XOL(|+;bzAf2iASX^7sgiMQhAr5Z{Sg#Zk648{BP(1uw2BBm)OgRc}*3S1ZatY zKm-L)Zf?A?FA!~d zRggI26u{3D&!T?(%GlWW=iD5R@3|Ln8Lnc;(OI*ps|LvST10bWWwQR@x|kl9ZwhGE zk+UYrzT#_s-hhAOshxuCq^p5__kQuz+`QRu+ypgg-6X0fvWii$-3{CEG2P4CaRtA& zuV70xFSfEwSBnJ5z@(1<81{pL_tnmWpTP&I1+ILRR0VXo*@15Z*mWyqHF`%K z+L1--T3Qgo!aM5UNXHQ3F&Z1&u7j%BbJj^rS&e9K$G!>=`c!o;+F_=Wo6OI{&pO=wm{TX zNd;mJde9CjeK5#kLZVb*Ajkui)N7cna$%?ht4_&2{9|I2jU)GTIw5*MR(1MG@^*ds z_s;fQ;A*#UzT8G;@Wq$MmuOd(uMbS820q*r_)Myskl4pc$NOh&S-#>9L^*c65UjF~ za=`m4eXJp?p-@!fs^t3@;%y_2*QQFbTnQ6X;d0j9)PJ!6#fwHTN%VICRuxP3!aW@P zGelHkVrqBRr5GG6Ljs{0nd45z(2c$c#l6UXh$%l0Vi#!!cLE?Y5QZ7$FwFyqX)(zd z%5KCWq@WmpYxhtLqaHZOKJeMiaI{Mr6W_X#8}ArM0n-+Jijz1yqP z4&O@dXAd3FNHlsW=9C6{Mw~kQAn~$=2WD-PCnqnj>P&f)N+OY+MD2lR%Qxlvt8`LQ zEKY-2482VRIGJNS0`wbw+vSOgI-1OSi@I@X;aZ z0=XUMzQaW9ef+g6S0JlN-B38UT8xS+6$)l>m{>?UgJv6qKY+X-qk&qaQUw$sVB!EZ zV_{|GZ%GgAI_SI62|>OA{`D#5QiD_{5jM6qPm_`xPj02yUJh0<{rzjyVG^!4!yk=h zQGV2(l^^wO1T_SmPp=0w2~6l}GV2&MzN|ByBt4)8rOCptYKM048dszo$!%KKOdc!gL^_M^{#%6BMLw@_tlHTZSa;{hTgf#ZoCXc8bd=Gl$6P^VIk3(>moXX z<4Y`j$Gu=Kb5(jwM$-Dy|7UK@_OZD7OLXu2AZQEt*o zLmW6QKfjJf9ts70sBZ~#T4ZEKR#uFyVN&QhY?L1-O=FHAbd&QlH8D|27cMR-na-5B zhEw^Ul>|@XwFxu)$)`=KT6Iu+fGme=rgyj)lvRM;0H$dEmTVaxfIf&+1FWosyt}&_ z`eIP`8R+YeMMF@#aC&K8-Yf8t!LbC6q<9PLN-*C80(f{R7#i~akM02@IEy&d0OWMt zWV_$$%23~30BJ|`a?J>8-hv5KMa3QzIgCD_tZ{@22>w@4HCQ780MN^q!jtg@Vo9TLf$`cUz9}%XHB918C?3<$maSvzP`9+Pe%EJlbW+QI zepHwd@QYie*f=3(80S3y%c?B<>m}={=Kq)CvKev1Iq=^<6qsWFOThZSzxw}+j^PQ{ z#kCo=#6xxk3sTGrf6h+LrOk1OwEg$zH2gwdKjc4QHR%7C@#&oXB`Z3f>aaYJy(c($ zvAl&#Ej0g9t|sPl`??f1?^j+6W0iJBzJ~gsIq$x;>Qtcf@(1Ny==^TtdTtp_{akML zHftDvR-J4CBTh#XilY$Uq6u$7R-O|-_7mo${EGl5ufx`vxmYUd7H#!~iszqQ3X|1) z*K<#ItIH+s9Z@i+q!oV(j}4i~R1qii{dr1b6xM+gisGzx;x5S-4q}y6GIvdF_aSLj zellm9=UDLc#bXL5YbG9>mVUdG9RZW>CcY^g>`J3jW5E-1tRhlbXO4C23zU>Zj-y-tH7b1Y1g758r(d)TAV&RF_ z5zvi};iid+{u=r;dK^hzEkTR@kE|Kv{NA1cI^9R2dSS}6GkdAZCgnaVjAh^4_Y^_& zvu7sFWsSMF$6v4_MzU9na78W!(iR?4by|F*u1h;RB=L1LdXE=_GRuC{d9ZLlmu26Q z)5~J`RXaK6{q&|qnwoo0qz1VX+$YNz*MIOy6gb#!Y?P1p&fvrm-s&=P;^-Xqt23|F zu(jMMI2)h+c>1eIxctT2`^EL6YWcF>_uU^`%!b>^DaqOhaQkSEv|yyk_~k`tSl>~gO4iY#P-7C|BAf)O=Rnvz+uz8`swl7dPFqY=AkAl zmeC%=b2IiIsl~|8%OmNHz^FAp>GBD|QgPqX^kuvo4co8XEU z^`B$s)E*K&F)~8?M}F>E-Oaq;JLSvtj^07|mnu@u+ODaJ&}FTLjrUVa-IG0A+Lvd- zoA!Ce{)GpJ)M1}U@c4ue54v880~$ccc{h)c-0KY?3jD?p3C>>Ry$-$*i1N53OWY4#l6U9+CEp`aPJO#gemaXy`ixyUkp51dUoCT zXCKTr_0H^24E?w*F z%C|c-RYl9NSu)(mUO+K)pImZ~)Rtx2zxmG|JQuhfdrS7fd ze0ldMRc!FiiLkJSj2UJinj>b=QwZXM-vZmnJbb;9DV(*(xSDBchd>{YjJXIo!%SdmM>n9Hv4UieyMOHoPhA?bJIPhH0(e1Qe@^4WePgnSE^U{ei9`Pos zYIZPP#4$gSr@MbRqvq4~hgXNAD8EBh)q=3;G;eP8VG<|9h@Dmt6t4*;ioEj|t*H|f zDf6auQiTXN@8ilSjy_TZ3o|;pj_(2LwWfU7?l#d3ieCK&mb(&3X9~`$c1%h&>&fS~ zH62W>&VuK(ALpNHITp0mah!kX@wbKxgSzooL*>uh99$21W9_vG%rA69j;Y3!A0g`*iFz^p#9bR%nfs)%&Vn z$8yHo5Do7NBz$w#iHvL&@ny)3wxiztNiy^G!2yNZRQq&moz9K?r+zIZO^KIePFqKk zs)%!UkiRct9+i$IdmpNuJ3OTdqha{Jczf%pEcdtVQ$)C zl~7vg?r!M@Y3c5g?(UwGy`SInzBBXAS~F{A&As+tDBE>k*Ei4eI6g*QYix!N%j6sn^jz1cY3lSDX7I?#j@+2%VaqbC(A-t z^vF=QtnqLTIl?K-vK!h`1@B{u{TbFeCfDwviqOt?zP6vYS)#?zH_z#=ARrMhK)Y&q zP6_$E*jUBavLX8TP0aNvifhr6{3vXBS#L@CC7F^X6SlVG=V1c)HSLBQWD(_ZIv?ej zu74w{Sx{JB6L05n)#)48+Y<8^pLgqQv$ZCB*p6*&q~trvf9KjyTN{+&5sG_jqBA_( zQ4OJk+uy5)?ia!U8;e}-meLP(iraA}*f)@GJ3UJat}saXPc49MeA3Hum!_wiNLLft zSSN*LWNUwu+A^(AZrRF!$b9&FnVr1N@B1#IcQ{5jyt9kQj*RD}9&tUnCGki!>Ro|+ z4*{Iw-k#<{hK0Vasy3KV^MLUU^ttNyN&Z@E*eZ)pi(!Pa1#M>4I+? zoFtH^G?lB&Sy)I9;Tjs!GCj48{5bU1bX7_&t@p+_4$ zOvl=)`3S1wRq7e&`#fRNA7`NE;I#sEk9%-%Fr?q)+3SkN*E$SQ0AFdh!EnUX>$B+D z-cXJvKL8_Oj6f$QA&dwGMdThbS|EiYjkH)jOKIlHfIx5jZ@;fW)NAJX)ARmHQH=J+ z!}IdhkYvfrwxk`ni7WhW%p7Oy4?zWkZ;yt6bq6`&fS6mOjsSH>l4J>mxe^;nyG}~P znEUHX1pCY7&s!X=c$1QDo5XS={%S}8eT<)2mMUTe zq7~N(^-a^$CU0-Pc565-V$wxb4Y8hM&F4nlYM7M@`e1ll`1W}G>dLH!mR4?N;?~^c zm#Fx+^z;#PRRHm?vNesoE&@}sYMqTgIilfSdhhg$)W+dqxqkz~dddA!3eoBrS&8OA@kmJydlJ za9X{&NBHcZjBvQFckXey{2232!^jAFuMa6q2g~1hmfAl#*lqmow0>}WJkr;fnh~B> zP*P$%S-z_}Q&n?*(8lNp!E6AJgj$o$_IT(vLZY*?k3&yv-A`K?xb!Y}#)7^BFYT5H z4sG7z-`|`_lyX!vWw!CxMY@O_EF@`Z#muhzVLd>h1^;aKdjg0NYRIQvs<;TM4BFV^ zrrDUPH_ZDZB$9_aSGm9Eo6L+b#sdKXy64C>(K2bXasxk#JaO9#nXnnoDrEZxP68*W z|L-f=8NNagq)_BqhLv?mu1R7S76t#w%0DSWv)c(Lg+B|h*pBq6xyzhdrQ#;a{P||s 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 TY10ON=hO|ATgoMh_k;cmG3w0q literal 0 HcmV?d00001 diff --git a/docs/docs/assets/images/concepts/audit_user_setting.png b/docs/docs/assets/images/concepts/audit_user_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..cdcae4527602173413f79c8ae35300e326bb522f GIT binary patch literal 9228 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 F{6F(AEWiK& literal 0 HcmV?d00001 diff --git a/docs/docs/concepts/audit.md b/docs/docs/concepts/audit.md new file mode 100644 index 0000000000..1a8f409237 --- /dev/null +++ b/docs/docs/concepts/audit.md @@ -0,0 +1,112 @@ +--- +title: Audit Log +--- + +## Audit Log + +InvenTree keeps an *audit log* (change history) of the changes made to key database models. Each time a supported item is created, updated or deleted, an entry is written to the audit log, recording: + +- **When** the change was made +- **Who** made the change (the user account associated with the request) +- **What** was changed (the item, and the old and new values of each modified field) +- **How** the change was made (the source of the change, e.g. an API request or a background task) + +The audit log is useful for tracing the history of an item, understanding *why* a value is what it is, and identifying which user made a particular change. + +!!! info "Version Information" + Audit history is not recorded prior to InvenTree version 1.7.0. Any changes made before upgrading to version 1.7.0 will not appear in the audit log. + +### How Auditing Works + +Auditing in InvenTree is implemented using the [django-auditlog](https://github.com/jazzband/django-auditlog) library. Changes are captured at the database model level, so they are recorded regardless of how the change was made - whether via the user interface, the [REST API](../api/index.md), the Python bindings, or a plugin. + +Some notes on what is recorded: + +- **Field changes** - For updates, only the fields which have actually changed are recorded. Saving an item without changing any values does not create an audit entry. +- **Parent linkage** - Many audited models are linked to a *parent* item. For example, a purchase order line item is linked to its purchase order, and a BOM item is linked to its assembly part. Changes to child items are displayed in the history of the parent item. +- **Files** - For file fields (such as attachments), only the filename is recorded, not the file contents. +- **Request information** - Each entry records the user who made the change, along with the remote IP address and a correlation ID which links together all changes made in a single request. The username is retained, even if the user account is later deleted. +- **Background tasks** - Changes made by background tasks are recorded against the name of the task which made the change. +- **System settings** - Changes to [global settings](../settings/global.md) are recorded (and are only visible to staff users). Internal settings which are updated automatically by the system are not recorded, and the values of protected settings are never stored. +- **Audit settings** - Changes to the audit log settings are *always* recorded, even if the audit log is disabled. This ensures that disabling the audit log (or adjusting the retention period) cannot go unnoticed. + +#### What Is Not Recorded + +To keep the audit log focused and performant, some changes are intentionally *not* recorded: + +- **Derived fields** - Internal or calculated fields (such as tree structure fields, cached pricing values and metadata) are excluded. +- **Data import** - Changes made using the [data import](./data_import.md) tool are not recorded. +- **Stock items** - Changes to stock items are tracked separately using [stock tracking](../stock/tracking.md). +- **Unsupported models** - Only the models listed below are audited. + +### Audited Models + +The following models are currently audited. Where a model has a *parent*, changes to that model are also displayed in the history of the parent item. + +{{ audited_models() }} + +### Viewing Change History + +#### Detail Pages + +When enabled, a *History* panel is displayed on the detail page for supported items (such as parts, companies and orders). This panel shows all changes made to the item, including changes made to any linked child items. + +{{ image("concepts/audit_part_history.png", "Part change history") }} + +For example, the history panel for a purchase order shows changes made to the order itself, as well as changes to its line items: + +{{ image("concepts/audit_po_history.png", "Purchase order change history") }} + +The *History* panel is only displayed if **all** of the following conditions are met: + +- The audit log is enabled (via the `Enable Audit Log` system setting) +- The user is a *staff* user +- The user has enabled the *Show Change History* user setting + +{{ image("concepts/audit_user_setting.png", "Show change history setting") }} + +#### Admin Center + +Staff users can view the complete audit log in the *Audit Log* panel of the [Admin Center](../settings/admin.md). This panel shows all recorded changes across all audited models, and provides access to the audit log settings. + +{{ image("concepts/audit_admin_center.png", "Audit log in the admin center") }} + +The audit log table can be filtered by action, user, date range and model type: + +{{ image("concepts/audit_filter.png", "Filter by model type") }} + +### Permissions + +Access to the audit log is restricted: + +- The audit log (including the `/api/audit/` API endpoint) is only available to *staff* users. +- Audit entries are additionally filtered by the user's [role permissions](../settings/permissions.md). A user can only view audit entries for models which they have permission to view. +- Some models (e.g. attachments and parameters) require the user to also have permission to view the *parent* model. +- The remote IP address associated with each entry is only visible to staff users. + +### Data Retention + +By default, audit log entries are kept indefinitely. Over time, the audit log may grow to a significant size. InvenTree can be configured to automatically delete old audit log entries, via a scheduled task which runs daily. + +When deleting old entries, the *Retain Audit Log Summary* setting can be used to keep a minimal history for each item - the creation entry, and the most recent change - while still removing older intermediate entries. + +### Settings + +The following settings are available to control the behavior of the audit log, and can be adjusted in the *Audit Log* panel of the Admin Center: + +{{ image("concepts/audit_admin_settings.png", "Audit log settings") }} + +#### System Settings + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("AUDIT_LOG_ENABLED") }} +{{ globalsetting("AUDIT_LOG_DELETE_OLD_ENTRIES") }} +{{ globalsetting("AUDIT_LOG_DELETE_DAYS") }} +{{ globalsetting("AUDIT_LOG_DELETE_KEEP_SUMMARY") }} + +#### User Settings + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ usersetting("DISPLAY_HISTORY_TAB") }} diff --git a/docs/docs/settings/error_codes.md b/docs/docs/settings/error_codes.md index fbd4d8f9ec..d26bd1cbd6 100644 --- a/docs/docs/settings/error_codes.md +++ b/docs/docs/settings/error_codes.md @@ -255,6 +255,13 @@ CORS settings only affect user browsers that respect them. Setting them correctl Use the INVENTREE_CORS_ORIGIN_ALLOW_ALL and INVENTREE_CORS_ORIGIN_WHITELIST settings - see the [Server Access settings](../start/config.md#server-access). +#### INVE-W17 +**Audit log middleware missing from configuration - Backend** + +The `middleware` list provided in the configuration file does not include the audit log middleware (`audit.middleware.InvenTreeAuditlogMiddleware`). This middleware is required for audit log entries to record which user made each change. + +The middleware has been added automatically. To remove this warning, add it to the `middleware` list in your configuration file (after `django_structlog.middlewares.RequestMiddleware`). + ### INVE-I (InvenTree Information) Information — These are not errors but information messages. They might point out potential issues or just provide information. diff --git a/docs/main.py b/docs/main.py index b7aed84775..24450cb288 100644 --- a/docs/main.py +++ b/docs/main.py @@ -91,6 +91,9 @@ with open(gen_base.joinpath('inventree_report_context.json'), encoding='utf-8') # User permission roles with open(gen_base.joinpath('inventree_roles.json'), encoding='utf-8') as f: ROLES = json.load(f) +# Audited models +with open(gen_base.joinpath('inventree_audited_models.json'), encoding='utf-8') as f: + AUDITED_MODELS = json.load(f) def get_repo_url(raw=False): @@ -495,6 +498,32 @@ def define_env(env): return ret_data + @env.macro + def audited_models(): + """Render a markdown table of the models which are recorded in the audit log. + + The table is built directly from `docs/generated/inventree_audited_models.json` + (produced by the `export_audited_models` management command, sourced from + the models which implement `InvenTreeAuditMixin`), so it can never drift out + of sync with the models actually audited in the source code. + """ + global AUDITED_MODELS + + ret_data = '| Category | Model | Model Type | Parent | Notes |\n' + ret_data += '| --- | --- | --- | --- | --- |\n' + + for model in AUDITED_MODELS: + parent = model['parent'] + notes = model['parent_note'] + + if fields := model['include_fields']: + fields = ', '.join(f'`{field}`' for field in fields) + notes = f'Only the following fields are recorded: {fields}' + + ret_data += f'| {model["app"]} | {model["name"]} | `{model["model_type"]}` | {parent} | {notes} |\n' + + return ret_data + @env.macro def report_context(type_: Literal['models', 'base'], model: str): """Extract information on a particular report context.""" diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 2dd93db915..d89068ca31 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -109,6 +109,7 @@ nav: - Parameters: concepts/parameters.md - Notes: concepts/notes.md - Tags: concepts/tags.md + - Audit Log: concepts/audit.md - Barcodes: - Barcode Support: barcodes/index.md - Internal Barcodes: barcodes/internal.md diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index c00f2292b3..d68a4ed2a9 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -29,6 +29,7 @@ import InvenTree.config import InvenTree.filters import InvenTree.permissions import InvenTree.version +from audit.helpers import write_batched from common.settings import get_global_setting from InvenTree import helpers, ready from InvenTree.auth_overrides import registration_enabled @@ -534,7 +535,12 @@ class BulkCreateMixin: if has_unique_errors: raise ValidationError(unique_errors) - with transaction.atomic(), batch_events(), batch_offload_tasks(): + with ( + transaction.atomic(), + batch_events(), + batch_offload_tasks(), + write_batched(), + ): for item in data: serializer = self.get_serializer(data=item) if serializer.is_valid(): diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 241a3a3ac9..be5ad33454 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,12 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 564 +INVENTREE_API_VERSION = 565 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ -v564 -> 2026-10-24 : https://github.com/inventree/InvenTree/pull/xxxxx +v565 -> 2026-10-24 : https://github.com/inventree/InvenTree/pull/13069 + - Adds read-only audit log API endpoints (/api/audit/) + - OPTIONS metadata includes a "filters" entry, listing the available choices for choice-based list filters + +v564 -> 2026-10-24 : https://github.com/inventree/InvenTree/pull/13090 - BomItem "can_build", "pricing_min_total" and "pricing_max_total" fields now account for "piece_count" - BuildLine "unit_quantity" ordering now accounts for the BOM "piece_count" diff --git a/src/backend/InvenTree/InvenTree/config.py b/src/backend/InvenTree/InvenTree/config.py index 7cf2ee5191..7ac1fe50db 100644 --- a/src/backend/InvenTree/InvenTree/config.py +++ b/src/backend/InvenTree/InvenTree/config.py @@ -58,6 +58,41 @@ def to_dict(value): return {} +def ensure_middleware( + middleware: list[str], required: str, after: Optional[str] = None +) -> list[str]: + """Ensure that a required middleware class is present in the provided MIDDLEWARE list. + + The MIDDLEWARE setting can be overridden via the configuration file, which may omit + middleware which is required for correct operation. Any missing middleware is added + (and a warning logged), rather than preventing the server from starting. + + Arguments: + middleware: The configured list of middleware classes + required: The middleware class which must be present + after: Insert after this middleware class (if present), otherwise append + + Returns: + A list of middleware classes, including the required middleware + """ + middleware = list(middleware) + + if required in middleware: + return middleware + + logger.warning( + 'INVE-W17: %s missing from MIDDLEWARE configuration - adding automatically', + required, + ) + + if after and after in middleware: + middleware.insert(middleware.index(after) + 1, required) + else: + middleware.append(required) + + return middleware + + def is_true(x): """Shortcut function to determine if a value "looks" like a boolean.""" return str(x).strip().lower() in ['1', 'y', 'yes', 't', 'true', 'on'] diff --git a/src/backend/InvenTree/InvenTree/management/commands/export_audited_models.py b/src/backend/InvenTree/InvenTree/management/commands/export_audited_models.py new file mode 100644 index 0000000000..3ea70841ab --- /dev/null +++ b/src/backend/InvenTree/InvenTree/management/commands/export_audited_models.py @@ -0,0 +1,83 @@ +"""Custom management command to export the models which are recorded in the audit log. + +This is used to generate a JSON file which contains all of the audited models +(those which implement the InvenTreeAuditMixin), so that they can be introspected +by the InvenTree documentation system. This allows the audited models table to be +documented without having to manually duplicate the information (which otherwise +silently drifts out of sync with the source code). +""" + +import inspect +import json + +from django.apps import apps +from django.core.management.base import BaseCommand +from django.utils.text import capfirst + + +class Command(BaseCommand): + """Extract audited model information, and export to a JSON file.""" + + def add_arguments(self, parser): + """Add custom arguments for this command.""" + parser.add_argument( + 'filename', type=str, help='Output filename for audited model definitions' + ) + + def handle(self, *args, **kwargs): + """Export audited model information to a JSON file.""" + models = discover_audited_models() + + filename = kwargs.get('filename', 'inventree_audited_models.json') + + with open(filename, 'w', encoding='utf-8') as f: + json.dump(models, f, indent=4) + + print(f"Exported InvenTree audited model definitions to '{filename}'") + + +def audit_parent(model) -> tuple[str, str]: + """Return a (parent, note) description of the "parent" object for audit entries against a model. + + - If the parent is a foreign key field, the name of the related model is returned + - If the parent reference is resolved by a custom method, the method docstring summary is returned as a note + """ + from InvenTree.models import InvenTreeAuditMixin + + if model.AUDIT_PARENT_FIELD: + field = model._meta.get_field(model.AUDIT_PARENT_FIELD) + + if field.related_model: + return capfirst(str(field.related_model._meta.verbose_name)), '' + + method = model.get_audit_parent_reference + + if method is not InvenTreeAuditMixin.get_audit_parent_reference: + doc = inspect.getdoc(method) or '' + return '', doc.split('\n\n')[0].replace('\n', ' ').strip() + + return '', '' + + +def discover_audited_models(): + """Discover all models which are recorded in the audit log. + + Returns a list of models, sorted by app and then by model name. + """ + from audit.registry import audited_models + + models = [] + + for model in audited_models(): + parent, parent_note = audit_parent(model) + + models.append({ + 'model_type': model._meta.label_lower, + 'app': str(apps.get_app_config(model._meta.app_label).verbose_name), + 'name': capfirst(str(model._meta.verbose_name)), + 'parent': parent, + 'parent_note': parent_note, + 'include_fields': sorted(getattr(model, 'AUDIT_INCLUDE_FIELDS', ())), + }) + + return sorted(models, key=lambda m: (m['app'], m['name'])) diff --git a/src/backend/InvenTree/InvenTree/metadata.py b/src/backend/InvenTree/InvenTree/metadata.py index a7a2768984..576c849150 100644 --- a/src/backend/InvenTree/InvenTree/metadata.py +++ b/src/backend/InvenTree/InvenTree/metadata.py @@ -168,8 +168,74 @@ class InvenTreeMetadata(SimpleMetadata): # then we don't need a permission pass + if filters := self.get_filter_metadata(request, view): + metadata['filters'] = filters + return metadata + def get_filter_metadata(self, request, view) -> dict: + """Return information on the choice filters available for an API endpoint. + + For each ChoiceFilter (or MultipleChoiceFilter) defined by the view's filterset, + the available choices are provided, e.g. so that a client can render a filter selection. + Model-backed choice filters (ModelChoiceFilter etc) are excluded. + + The filterset is instantiated with the current request, so that the + choices can be specific to the requesting user. + + Returns: + dict: A mapping of filter name -> {'type', 'label', 'choices'} + """ + from django_filters import ( + ChoiceFilter, + ModelChoiceFilter, + ModelMultipleChoiceFilter, + MultipleChoiceFilter, + ) + + filterset_class = getattr(view, 'filterset_class', None) + + if filterset_class is None: + return {} + + try: + filterset = filterset_class( + data={}, queryset=view.get_queryset(), request=request + ) + except Exception: + # Filter information is optional - never prevent the OPTIONS response + logger.exception( + 'Could not construct filterset for %s', view.__class__.__name__ + ) + return {} + + filters = {} + + for name, filter_instance in filterset.filters.items(): + if not isinstance(filter_instance, (ChoiceFilter, MultipleChoiceFilter)): + continue + + # Model-backed choices (e.g. foreign key filters) are not exposed: + # these may be unbounded, and would expose related objects to the client + if isinstance( + filter_instance, (ModelChoiceFilter, ModelMultipleChoiceFilter) + ): + continue + + choices = [ + {'value': value, 'display_name': str(label)} + for value, label in filter_instance.field.choices + if value not in ('', None) + ] + + filters[name] = { + 'type': 'choice', + 'label': str(filter_instance.label or name), + 'choices': choices, + } + + return filters + def override_value(self, field_name: str, field_key: str, field_value, model_value): """Override a value on the serializer with a matching value for the model. diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index bc67bbde7c..7f880c053b 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -532,6 +532,93 @@ class InvenTreePermissionCheckMixin: return user.has_perm(perm) +class InvenTreeAuditMixin: + """Opt a model in to the audit log (field-level change history). + + Any concrete model which inherits from this mixin is registered with django-auditlog + when the 'audit' app is loaded (see audit.registry). + + Attributes: + AUDIT_INCLUDE_FIELDS: If specified, *only* these fields are recorded (e.g. user-editable fields of a cache model) + AUDIT_EXCLUDE_FIELDS: Fields which are never recorded (merged with a base set, see audit.registry) + AUDIT_MASK_FIELDS: Fields whose values are masked (the change is recorded, the value is not) + AUDIT_M2M_FIELDS: Many-to-many fields which are tracked + AUDIT_PARENT_FIELD: Name of the field which links to the "parent" object (e.g. 'order' for a line item) + AUDIT_VIEW_RESTRICTION: Restrict reading audit history to 'staff' or 'superuser' users (or None) + AUDIT_REQUIRE_PARENT_PERMISSION: Entries are only visible to users who can view the *parent* model + (for models whose access is determined by the linked object, e.g. attachments) + """ + + AUDIT_INCLUDE_FIELDS: tuple[str, ...] = () + AUDIT_EXCLUDE_FIELDS: tuple[str, ...] = () + AUDIT_MASK_FIELDS: tuple[str, ...] = () + AUDIT_M2M_FIELDS: tuple[str, ...] = () + AUDIT_PARENT_FIELD: Optional[str] = None + AUDIT_VIEW_RESTRICTION: Optional[str] = None + AUDIT_REQUIRE_PARENT_PERMISSION: bool = False + + def get_audit_parent(self): + """Return the "parent" object for audit log entries against this instance. + + Audit entries linked to a parent are included in the history of that parent + (e.g. changes to line items are shown against the order). + """ + if self.AUDIT_PARENT_FIELD: + return getattr(self, self.AUDIT_PARENT_FIELD, None) + + return None + + def get_audit_parent_reference(self) -> Optional[tuple[Any, str]]: + """Return a (ContentType, pk) reference to the "parent" object (or None). + + Override this (rather than get_audit_parent) where the parent can be identified + without fetching it from the database (e.g. generic model_type / model_id links). + """ + from django.contrib.contenttypes.models import ContentType + + # Resolve a foreign key parent from its ID, without fetching the related object + if self.AUDIT_PARENT_FIELD: + field = self._meta.get_field(self.AUDIT_PARENT_FIELD) + + if field.many_to_one or field.one_to_one: + parent_id = getattr(self, field.attname) + + if parent_id is None: + return None + + return ContentType.objects.get_for_model(field.related_model), str( + parent_id + ) + + if parent := self.get_audit_parent(): + return ContentType.objects.get_for_model(parent), str(parent.pk) + + return None + + def should_audit(self) -> bool: + """Return False to skip recording audit entries for this instance. + + Used where only some rows of a model are of interest + (e.g. settings which are written automatically by the system). + """ + return True + + def audit_always(self) -> bool: + """Return True to record audit entries for this instance, even if the audit log is disabled. + + Used for changes which must always be recorded (e.g. disabling the audit log itself). + """ + return False + + def is_audit_masked(self) -> bool: + """Return True if *all* values recorded against this instance must be masked. + + Used where sensitivity depends on the row rather than the field + (e.g. a 'protected' setting value). + """ + return False + + class InvenTreeParameterMixin(InvenTreePermissionCheckMixin, models.Model): """Provides an abstracted class for managing parameters. @@ -629,7 +716,9 @@ class InvenTreeParameterMixin(InvenTreePermissionCheckMixin, models.Model): parameters.append(parameter) if len(parameters) > 0: - common.models.Parameter.objects.bulk_create(parameters, batch_size=250) + from audit.helpers import audited_bulk_create + + audited_bulk_create(common.models.Parameter, parameters) def get_parameter(self, name: str): """Return a Parameter instance for the given parameter name. @@ -1000,7 +1089,12 @@ class InvenTreeTree(ContentTypeMixin, MPTTModel): B) delete_children = True and delete_items = False C) delete_children = False and delete_items = True D) delete_children = False and delete_items = False + + Note: re-parenting uses audited_update(), so that the change is recorded + for audited models (it falls back to a plain update() otherwise). """ + from audit.helpers import audited_update + child_nodes = self.get_descendants(include_self=False) # Case A: Delete all child items, and all child nodes. @@ -1016,7 +1110,7 @@ class InvenTreeTree(ContentTypeMixin, MPTTModel): elif delete_children and not delete_items: if items := self.get_items(cascade=True): parent = getattr(self, self.NODE_PARENT_KEY, None) - items.update(**{self.ITEM_PARENT_KEY: parent}) + audited_update(items, **{self.ITEM_PARENT_KEY: parent}) self.delete_nodes(child_nodes) # Case C: Delete all child items, but keep all child nodes @@ -1025,7 +1119,7 @@ class InvenTreeTree(ContentTypeMixin, MPTTModel): elif not delete_children and delete_items: self.delete_items(cascade=False) parent = getattr(self, self.NODE_PARENT_KEY, None) - self.get_children().update(**{self.NODE_PARENT_KEY: parent}) + audited_update(self.get_children(), **{self.NODE_PARENT_KEY: parent}) # Case D: Keep all child items, and keep all child nodes # - Move all items directly associated with this node up one level @@ -1033,8 +1127,8 @@ class InvenTreeTree(ContentTypeMixin, MPTTModel): elif not delete_children and not delete_items: parent = getattr(self, self.NODE_PARENT_KEY, None) if items := self.get_items(cascade=False): - items.update(**{self.ITEM_PARENT_KEY: parent}) - self.get_children().update(**{self.NODE_PARENT_KEY: parent}) + audited_update(items, **{self.ITEM_PARENT_KEY: parent}) + audited_update(self.get_children(), **{self.NODE_PARENT_KEY: parent}) def delete_nodes(self, nodes): """Delete a set of nodes from the tree. diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 030411ca66..0dedd57c3e 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -25,7 +25,12 @@ from corsheaders.defaults import default_headers as default_cors_headers import InvenTree.backup from InvenTree.cache import get_cache_config, is_global_cache_enabled -from InvenTree.config import get_boolean_setting, get_oidc_private_key, get_setting +from InvenTree.config import ( + ensure_middleware, + get_boolean_setting, + get_oidc_private_key, + get_setting, +) from InvenTree.ready import isInMainThread, isRunningBackup from InvenTree.sentry import default_sentry_dsn, init_sentry from InvenTree.validators import invalid_site_url_hint @@ -369,6 +374,10 @@ INSTALLED_APPS = [ 'django_mailbox', # For email import 'anymail', # For email sending/receiving via ESPs 'storages', + 'auditlog', # Audit log / model change history (see 'audit' app) + # New InvenTree apps are appended here, so that existing ContentType IDs + # match between existing databases and freshly migrated (test) databases + 'audit.apps.AuditConfig', ] MIDDLEWARE = CONFIG.get( @@ -396,10 +405,33 @@ MIDDLEWARE = CONFIG.get( 'InvenTree.middleware.InvenTreeRequestCacheMiddleware', # Request caching 'InvenTree.middleware.InvenTreeHostSettingsMiddleware', # Ensuring correct hosting/security settings 'django_structlog.middlewares.RequestMiddleware', # Structured logging + 'audit.middleware.InvenTreeAuditlogMiddleware', # Audit log context (after maintenance + request ID) 'InvenTree.middleware.InvenTreeVersionHeaderMiddleware', ], ) +# The audit log middleware is required for audit entries to record the user (and request context). +# MIDDLEWARE may be overridden via the config file - ensure that it is always present +MIDDLEWARE = ensure_middleware( + MIDDLEWARE, + 'audit.middleware.InvenTreeAuditlogMiddleware', + after='django_structlog.middlewares.RequestMiddleware', +) + +# Audit log configuration (django-auditlog) +# Ref: https://django-auditlog.readthedocs.io/en/latest/usage.html#settings +# Note: AUDITLOG_LOGENTRY_MODEL is a swappable model, and must not be changed once migrations have been applied +AUDITLOG_LOGENTRY_MODEL = 'audit.AuditLogEntry' +AUDITLOG_STORE_JSON_CHANGES = True # Store values as JSON types, rather than strings +AUDITLOG_DISABLE_ON_RAW_SAVE = True # Do not log fixture loading / raw saves +AUDITLOG_CID_HEADER = None # Correlation ID is provided by AUDITLOG_CID_GETTER (below) +AUDITLOG_CID_GETTER = 'audit.context.get_cid' # Matches the structlog request ID + +# The upstream auditlog migrations only define the (swapped out) LogEntry model, +# and do not mark it as swappable - so would create an unused 'auditlog_logentry' table. +# Disable them entirely - the 'audit' app provides the migrations for AuditLogEntry. +MIGRATION_MODULES = {'auditlog': None} + # In DEBUG mode, add support for django-silk # Ref: https://silk.readthedocs.io/en/latest/ DJANGO_SILK_ENABLED = ( diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 1f6bf19f7e..c21b538d67 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -515,9 +515,14 @@ def offload_task( ) return False + from audit.context import audit_task + # Workers are not running: run it as synchronous task try: - with tracer.start_as_current_span(f'sync worker: {taskname}'): + with ( + tracer.start_as_current_span(f'sync worker: {taskname}'), + audit_task(taskname), + ): _func(*args, **kwargs) except Exception as exc: log_error('offload_task', scope='worker') diff --git a/src/backend/InvenTree/InvenTree/urls.py b/src/backend/InvenTree/InvenTree/urls.py index 3b583f4dea..4b79f50110 100644 --- a/src/backend/InvenTree/InvenTree/urls.py +++ b/src/backend/InvenTree/InvenTree/urls.py @@ -16,6 +16,7 @@ from flags.urls import flagged_path from oauth2_provider import urls as oauth2_urls from sesame.views import LoginView +import audit.api import build.api import common.api import company.api @@ -55,6 +56,7 @@ admin.site.site_header = get_setting( apipatterns = [ # Global search path('admin/', include(common.api.admin_api_urls)), + path('audit/', include(audit.api.audit_api_urls)), path('bom/', include(part.api.bom_api_urls)), path('build/', include(build.api.build_api_urls)), path('company/', include(company.api.company_api_urls)), diff --git a/src/backend/InvenTree/audit/__init__.py b/src/backend/InvenTree/audit/__init__.py new file mode 100644 index 0000000000..2374b9cece --- /dev/null +++ b/src/backend/InvenTree/audit/__init__.py @@ -0,0 +1,5 @@ +"""The audit app provides a read-only change history for InvenTree models. + +Built on top of django-auditlog, with an InvenTree specific LogEntry model +(see audit.models.AuditLogEntry) which links entries to a "parent" object. +""" diff --git a/src/backend/InvenTree/audit/admin.py b/src/backend/InvenTree/audit/admin.py new file mode 100644 index 0000000000..c225c82713 --- /dev/null +++ b/src/backend/InvenTree/audit/admin.py @@ -0,0 +1,29 @@ +"""Admin site configuration for the audit app.""" + +from django.contrib import admin + +# Ensure the upstream admin class has been registered, so that it can be replaced below +import auditlog.admin +from auditlog.filters import CIDFilter, ResourceTypeFilter + +from audit.models import AuditLogEntry + +if admin.site.is_registered(AuditLogEntry): + admin.site.unregister(AuditLogEntry) + + +@admin.register(AuditLogEntry) +class AuditLogEntryAdmin(auditlog.admin.LogEntryAdmin): + """Admin class for the AuditLogEntry model. + + Extends the (read-only) upstream LogEntry admin, adding: + - Filtering by the user who made the change + """ + + list_filter = [ + 'action', + # Only list users which have recorded entries + ('actor', admin.RelatedOnlyFieldListFilter), + ResourceTypeFilter, + CIDFilter, + ] diff --git a/src/backend/InvenTree/audit/api.py b/src/backend/InvenTree/audit/api.py new file mode 100644 index 0000000000..c45aef7bdd --- /dev/null +++ b/src/backend/InvenTree/audit/api.py @@ -0,0 +1,217 @@ +"""API endpoints for the audit app.""" + +from django import forms +from django.db.models import Q +from django.urls import include, path +from django.utils.text import capfirst +from django.utils.translation import gettext_lazy as _ + +from django_filters import rest_framework as rest_filters +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import extend_schema_field +from rest_framework import viewsets +from rest_framework.exceptions import ValidationError + +import audit.serializers +from audit.models import AuditLogEntry +from audit.permissions import ( + get_viewable_audit_content_types, + parent_permission_content_types, + user_can_view_audit_model, +) +from common.filters import determine_content_type +from InvenTree.filters import SEARCH_ORDER_FILTER +from InvenTree.helpers_api import InvenTreeApiRouter +from InvenTree.permissions import IsAdminOrAdminScope + + +def audited_model_type_choices(user=None) -> list[tuple[str, str]]: + """Return (model_type, label) choices for the audited models. + + If a user is provided, only the models which the user may view are returned. + """ + from django.contrib.contenttypes.models import ContentType + + from audit.registry import audited_models + + allowed = get_viewable_audit_content_types(user) if user else None + + choices = [] + + for model in audited_models(): + ct = ContentType.objects.get_for_model(model) + + if allowed is not None and ct.pk not in allowed: + continue + + choices.append(( + f'{ct.app_label}.{ct.model}', + capfirst(str(model._meta.verbose_name)), + )) + + return sorted(choices, key=lambda choice: choice[1]) + + +class AnyValueChoiceField(forms.ChoiceField): + """A ChoiceField which provides a list of choices, but accepts any value. + + The choices are used to describe the common values (e.g. for display in a client), + while other supported formats are still accepted by the filter. + """ + + def valid_value(self, value): + """Accept any value.""" + return True + + +# Note: the choices are dynamic (and any value is accepted), so the schema type is declared explicitly +@extend_schema_field(OpenApiTypes.STR) +class ModelTypeChoiceFilter(rest_filters.ChoiceFilter): + """Choice filter for the model type of an audit entry. + + The choices are the audited model types ('app_label.model'), but any value supported + by common.filters.determine_content_type is accepted (e.g. a model name, or a ContentType ID). + """ + + field_class = AnyValueChoiceField + + +class AuditLogFilter(rest_filters.FilterSet): + """Custom filters for the AuditLogList API endpoint.""" + + class Meta: + """Metaclass options.""" + + model = AuditLogEntry + fields = ['action', 'actor', 'cid'] + + model_type = ModelTypeChoiceFilter( + choices=audited_model_type_choices, + method='filter_noop', + label=_('Model Type'), + help_text=_('Model type (e.g. "order.purchaseorder" or "purchaseorder")'), + ) + + model_id = rest_filters.CharFilter( + method='filter_noop', + label=_('Model ID'), + help_text=_('Primary key of the object (requires model_type)'), + ) + + include_children = rest_filters.BooleanFilter( + method='filter_noop', + label=_('Include Children'), + help_text=_('Include entries for child objects (default = true)'), + ) + + min_date = rest_filters.DateFilter( + field_name='timestamp', lookup_expr='date__gte', label=_('Min Date') + ) + + max_date = rest_filters.DateFilter( + field_name='timestamp', lookup_expr='date__lte', label=_('Max Date') + ) + + def __init__(self, *args, **kwargs): + """Limit the model type choices to those which the requesting user may view.""" + super().__init__(*args, **kwargs) + + user = getattr(self.request, 'user', None) + + if user and user.is_authenticated: + self.filters['model_type'].extra['choices'] = audited_model_type_choices( + user + ) + + def filter_noop(self, queryset, name, value): + """Combined filtering is performed in filter_queryset().""" + return queryset + + def filter_queryset(self, queryset): + """Filter by (model_type, model_id), optionally including child entries.""" + queryset = super().filter_queryset(queryset) + + model_type = self.form.cleaned_data.get('model_type') + model_id = self.form.cleaned_data.get('model_id') + include_children = self.form.cleaned_data.get('include_children') + + if include_children is None: + include_children = True + + if model_id and not model_type: + raise ValidationError({'model_id': _('model_type must also be provided')}) + + if not model_type: + return queryset + + ct = determine_content_type(model_type) + + if ct is None: + raise ValidationError({'model_type': _('Invalid model type')}) + + own = Q(content_type=ct) + children = Q(parent_content_type=ct) + + if model_id: + own &= Q(object_pk=str(model_id)) + children &= Q(parent_object_pk=str(model_id)) + + # Querying *through* a parent requires permission to view the parent model, + # otherwise the parent linkage of child objects would be exposed + user = getattr(self.request, 'user', None) + + if include_children and user_can_view_audit_model(user, ct.model_class()): + return queryset.filter(own | children) + + return queryset.filter(own) + + +class AuditLogViewSet(viewsets.ReadOnlyModelViewSet): + """API endpoint for audit log entries (read-only). + + - GET (list): Return a list of audit log entries + - GET (detail): Return a single audit log entry + """ + + queryset = AuditLogEntry.objects.all().select_related( + 'content_type', 'parent_content_type' + ) + serializer_class = audit.serializers.AuditLogEntrySerializer + + # The audit log is only available to staff users. + # Entries are *additionally* filtered by the user's permissions on each audited model. + permission_classes = [IsAdminOrAdminScope] + + filterset_class = AuditLogFilter + filter_backends = SEARCH_ORDER_FILTER + + ordering_fields = ['timestamp', 'action', 'actor'] + ordering = '-timestamp' + + search_fields = ['object_repr', 'actor__username'] + + def get_queryset(self): + """Restrict entries to those the requesting user is allowed to view.""" + queryset = super().get_queryset() + + allowed = get_viewable_audit_content_types(self.request.user) + + if allowed is None: + return queryset + + queryset = queryset.filter(content_type__in=allowed) + + # Some models (e.g. attachments) are only visible with permission on the parent model + if restricted := parent_permission_content_types(): + queryset = queryset.filter( + ~Q(content_type__in=restricted) | Q(parent_content_type__in=allowed) + ) + + # Note: otherwise parent permissions are handled by the filter (and serializer) + return queryset + + +audit_router = InvenTreeApiRouter() +audit_router.register('', AuditLogViewSet, basename='api-audit-log') + +audit_api_urls = [path('', include(audit_router.urls))] diff --git a/src/backend/InvenTree/audit/apps.py b/src/backend/InvenTree/audit/apps.py new file mode 100644 index 0000000000..c0b0b404d2 --- /dev/null +++ b/src/backend/InvenTree/audit/apps.py @@ -0,0 +1,21 @@ +"""AppConfig for the 'audit' app.""" + +from django.apps import AppConfig + + +class AuditConfig(AppConfig): + """AppConfig class for the 'audit' app.""" + + default_auto_field = 'django.db.models.BigAutoField' + name = 'audit' + + def ready(self): + """Register audited models with django-auditlog. + + Registration only connects model signals (no database access), + and must run in every process which can save models (server, worker, shell). + """ + import audit.signals # noqa: F401 - connect signal receivers + from audit.registry import register_audited_models + + register_audited_models() diff --git a/src/backend/InvenTree/audit/context.py b/src/backend/InvenTree/audit/context.py new file mode 100644 index 0000000000..2426d082aa --- /dev/null +++ b/src/backend/InvenTree/audit/context.py @@ -0,0 +1,165 @@ +"""Context tracking for audit log entries. + +django-auditlog resolves the "actor" eagerly in its middleware, which misses users +authenticated later by DRF (e.g. HTTP Basic auth). Instead, the current request is +stored here, and the actor is resolved lazily when a log entry is written. +DRF writes the authenticated user back to the underlying HttpRequest, so +request.user is correct by the time any model is saved. +""" + +import contextlib +import uuid +from contextvars import ContextVar +from typing import Optional + +import structlog + +_audit_request = ContextVar('inventree_audit_request', default=None) +_audit_cid = ContextVar('inventree_audit_cid', default=None) +_audit_source = ContextVar('inventree_audit_source', default=None) +_audit_batch = ContextVar('inventree_audit_batch', default=None) + + +@contextlib.contextmanager +def audit_batch(): + """Collect (unsaved) audit entries created within this context, rather than saving each one. + + Nested contexts share the outermost list. + + Yields: + The list of collected entries, which the caller is responsible for writing + (or None for a nested context, as there is nothing to write). + """ + if _audit_batch.get() is not None: + yield None + return + + entries = [] + token = _audit_batch.set(entries) + + try: + yield entries + finally: + _audit_batch.reset(token) + + +def get_batch() -> Optional[list]: + """Return the list of audit entries being collected, or None if not batching.""" + return _audit_batch.get() + + +@contextlib.contextmanager +def audit_request(request): + """Track the provided request (and a new correlation ID) for the duration of the context.""" + request_token = _audit_request.set(request) + cid_token = _audit_cid.set(uuid.uuid4().hex) + + try: + yield + finally: + _audit_request.reset(request_token) + _audit_cid.reset(cid_token) + + +@contextlib.contextmanager +def audit_source(source: str): + """Mark audit entries created within this context as originating from 'source'. + + Intended for changes made outside of a request (e.g. 'task:', 'command:'). + A new correlation ID is generated if one is not already active. + """ + source_token = _audit_source.set(source) + cid_token = _audit_cid.set(_audit_cid.get() or uuid.uuid4().hex) + + try: + yield + finally: + _audit_source.reset(source_token) + _audit_cid.reset(cid_token) + + +def task_name(func) -> str: + """Return the dotted name of a task function (which may be provided as a string).""" + if isinstance(func, str): + return func + + module = getattr(func, '__module__', None) + name = getattr(func, '__qualname__', None) or getattr(func, '__name__', None) + + if module and name: + return f'{module}.{name}' + + return repr(func) + + +@contextlib.contextmanager +def audit_task(func): + """Mark audit entries created within this context as originating from a background task. + + If a request is active (e.g. a task run synchronously as part of a request), + the changes are attributed to the request instead. + """ + if _audit_request.get() is not None: + yield + return + + with audit_source(f'task:{task_name(func)}'): + yield + + +# Context managers for tasks which are executed by the background worker +_worker_tasks: list = [] + + +def begin_worker_task(func) -> None: + """Enter the audit_task context for a task executed by the background worker. + + The worker provides separate signals before and after a task is executed, + so the context is entered (and exited) manually. + """ + context = audit_task(func) + context.__enter__() + _worker_tasks.append(context) + + +def end_worker_task() -> None: + """Exit the audit_task context for the most recent worker task.""" + if _worker_tasks: + _worker_tasks.pop().__exit__(None, None, None) + + +def get_cid() -> Optional[str]: + """Return the current correlation ID (used as AUDITLOG_CID_GETTER). + + - Within a request: the request ID bound by django-structlog, so that audit entries + can be matched against log entries (and the X-Request-ID header) for the request. + Note: django-structlog uses the incoming 'X-Request-ID' header if provided + (e.g. by a reverse proxy), otherwise generates a new UUID. + - Otherwise (e.g. background tasks, or if the structlog middleware is not installed): + a server-generated ID (see audit_request / audit_source). + """ + if _audit_source.get() is None and _audit_request.get() is not None: + if request_id := structlog.contextvars.get_contextvars().get('request_id'): + return str(request_id) + + return _audit_cid.get() + + +def get_source() -> Optional[str]: + """Return the current audit source, if set.""" + return _audit_source.get() + + +def get_request_actor(): + """Return the authenticated user for the current request, or None.""" + request = _audit_request.get() + + if request is None: + return None + + user = getattr(request, 'user', None) + + if user is not None and user.is_authenticated: + return user + + return None diff --git a/src/backend/InvenTree/audit/helpers.py b/src/backend/InvenTree/audit/helpers.py new file mode 100644 index 0000000000..dfcdfe6b03 --- /dev/null +++ b/src/backend/InvenTree/audit/helpers.py @@ -0,0 +1,256 @@ +"""Helper functions for recording audit entries for bulk database operations. + +QuerySet.update() (and bulk_create / bulk_update) bypass model signals, +so changes made this way are not recorded by django-auditlog. +Code which modifies audited models in bulk should use these helpers instead. +""" + +import contextlib + +from django.conf import settings +from django.core.exceptions import FieldDoesNotExist +from django.db import connection, transaction +from django.db.models.signals import pre_save + +from auditlog.context import auditlog_disabled +from auditlog.registry import auditlog + + +def is_audited(model) -> bool: + """Return True if changes to the given model are currently being audited.""" + try: + disabled = auditlog_disabled.get() + except LookupError: + disabled = False + + return not disabled and auditlog.contains(model) + + +@contextlib.contextmanager +def write_batched(): + """Write all audit entries created within this context with a single bulk insert. + + Avoids one INSERT query per modified row for the bulk helpers below. + Must be used within a transaction, so that the entries are written atomically with the changes. + + Note: post_log receivers are passed the (unsaved) log entry. + """ + from audit.context import audit_batch + from audit.models import AuditLogEntry + + with audit_batch() as entries: + yield + + if entries: + # Upstream applies context data (e.g. remote_addr) via a pre_save receiver, + # which bulk_create() does not trigger + for entry in entries: + pre_save.send( + sender=AuditLogEntry, + instance=entry, + raw=False, + using=AuditLogEntry.objects.db, + update_fields=None, + ) + + AuditLogEntry.objects.bulk_create(entries) + + +def copy_related_cache(source, target) -> None: + """Copy cached related objects from one instance of a model to another. + + Avoids re-fetching related objects (e.g. for the audit entry string representation) + for rows which have been re-read from the database. Only relations whose + foreign key value is unchanged between the two instances are copied. + """ + for name, related in source._state.fields_cache.items(): + try: + field = source._meta.get_field(name) + except FieldDoesNotExist: + continue + + attname = getattr(field, 'attname', None) + + if ( + attname + and (field.many_to_one or field.one_to_one) + and getattr(source, attname, None) == getattr(target, attname, None) + ): + target._state.fields_cache.setdefault(name, related) + + +def audited_update(queryset, **values) -> int: + """Perform QuerySet.update(), recording an audit entry for each modified row. + + Supports any value accepted by QuerySet.update() (including F() expressions), + as the new values are re-read from the database after the update. + + Arguments: + queryset: The queryset to update + values: The field values to update + + Returns: + int: The number of rows updated (as per QuerySet.update()) + """ + # Imported here to keep the dependency on this (private) upstream function in one place. + # It provides the same pre_log / diff / log_create / post_log path as the model signals. + # Pinned via requirements: django-auditlog>=3.4.1,<4 + from auditlog.receivers import _create_log_entry + + from audit.models import AuditLogEntry + + model = queryset.model + + if not is_audited(model): + return queryset.update(**values) + + manager = model._base_manager + + with transaction.atomic(): + if connection.features.has_select_for_update: + old_rows = list(queryset.select_for_update()) + else: + old_rows = list(queryset) + + if not old_rows: + return 0 + + pks = [row.pk for row in old_rows] + + # Update by PK - the original queryset may filter on the fields being updated + count = manager.filter(pk__in=pks).update(**values) + + new_rows = manager.in_bulk(pks) + + with write_batched(): + for old in old_rows: + if new := new_rows.get(old.pk): + _create_log_entry( + action=AuditLogEntry.Action.UPDATE, + instance=new, + sender=model, + diff_old=old, + diff_new=new, + fields_to_check=list(values.keys()), + use_json_for_changes=settings.AUDITLOG_STORE_JSON_CHANGES, + ) + + return count + + +def audited_bulk_update(model, objs: list, fields: list[str], **kwargs) -> int: + """Perform Model.objects.bulk_update(), recording an audit entry for each modified row. + + As with audited_update(), the old and new values are read from the database, + so the recorded changes reflect what was actually written (including F() expressions). + + Arguments: + model: The model class + objs: The (saved) model instances to update + fields: The fields to update + kwargs: Additional arguments passed through to bulk_update() (e.g. batch_size) + + Returns: + int: The number of rows updated (as per bulk_update()) + """ + from auditlog.receivers import _create_log_entry + + from audit.models import AuditLogEntry + + if not is_audited(model): + return model.objects.bulk_update(objs, fields, **kwargs) + + manager = model._base_manager + pks = [obj.pk for obj in objs] + + with transaction.atomic(): + if connection.features.has_select_for_update: + old_rows = manager.select_for_update().in_bulk(pks) + else: + old_rows = manager.in_bulk(pks) + + count = model.objects.bulk_update(objs, fields, **kwargs) + + new_rows = manager.in_bulk(pks) + + # Reuse any related objects already loaded by the caller + for obj in objs: + if new := new_rows.get(obj.pk): + copy_related_cache(obj, new) + + with write_batched(): + for pk, old in old_rows.items(): + if new := new_rows.get(pk): + _create_log_entry( + action=AuditLogEntry.Action.UPDATE, + instance=new, + sender=model, + diff_old=old, + diff_new=new, + fields_to_check=list(fields), + use_json_for_changes=settings.AUDITLOG_STORE_JSON_CHANGES, + ) + + return count + + +def audited_bulk_create(model, objs: list) -> list: + """Bulk create model instances, recording a CREATE audit entry for each new row. + + Uses InvenTree.helpers_db.bulk_create_and_fetch() to resolve the created rows, + so that entries are recorded on every database backend - including those which do + not return primary keys from bulk_create() (e.g. MySQL). + + Primary keys are populated on the provided objects (as per bulk_create()). + + Arguments: + model: The model class (must provide a 'metadata' field) + objs: The (unsaved) model instances to create + + Returns: + list: The created objects, as fetched from the database (in insertion order) + """ + from auditlog.receivers import _create_log_entry + + from audit.models import AuditLogEntry + from InvenTree.helpers_db import bulk_create_and_fetch + + # Required by bulk_create_and_fetch() - checked for all models (not only audited ones), + # so that an unsupported model is caught in development rather than at runtime + try: + model._meta.get_field('metadata') + except FieldDoesNotExist: + raise TypeError( + f"audited_bulk_create() requires a 'metadata' field: {model._meta.label}" + ) + + if not objs: + return [] + + with transaction.atomic(): + created = list(bulk_create_and_fetch(model, objs)) + + if len(created) != len(objs): # pragma: no cover + raise ValueError( + f'Expected {len(objs)} {model._meta.label} objects, fetched {len(created)}' + ) + + # Back-populate primary keys onto the provided objects + for obj, instance in zip(objs, created, strict=True): + obj.pk = instance.pk + obj._state.adding = False + obj._state.db = instance._state.db + + if is_audited(model): + with write_batched(): + for instance in created: + _create_log_entry( + action=AuditLogEntry.Action.CREATE, + instance=instance, + sender=model, + diff_old=None, + diff_new=instance, + use_json_for_changes=settings.AUDITLOG_STORE_JSON_CHANGES, + ) + + return created diff --git a/src/backend/InvenTree/audit/middleware.py b/src/backend/InvenTree/audit/middleware.py new file mode 100644 index 0000000000..3412b355fd --- /dev/null +++ b/src/backend/InvenTree/audit/middleware.py @@ -0,0 +1,48 @@ +"""Middleware for the audit app.""" + +import ipaddress + +from auditlog.context import set_extra_data +from auditlog.middleware import AuditlogMiddleware + +from audit.context import audit_request + + +class InvenTreeAuditlogMiddleware(AuditlogMiddleware): + """Bind request context to audit log entries. + + Differences from the upstream AuditlogMiddleware: + - The actor is not captured here, but resolved lazily (see audit.context) + - The remote address is taken from REMOTE_ADDR only, and validated + (upstream trusts the first X-Forwarded-For entry and X-Forwarded-Port as-is) + - The correlation ID matches the structlog request ID (see audit.context.get_cid) + """ + + @staticmethod + def _get_remote_addr(request): + """Return the (validated) remote address for the request. + + An invalid value would otherwise cause every audited save to fail + on databases with a native IP address column type (PostgreSQL 'inet'). + """ + remote_addr = request.META.get('REMOTE_ADDR') + + if not remote_addr: + return None + + try: + return str(ipaddress.ip_address(remote_addr.strip())) + except ValueError: + return None + + def get_extra_data(self, request): + """Return the data to be attached to all log entries created during this request.""" + return {'remote_addr': self._get_remote_addr(request), 'remote_port': None} + + def __call__(self, request): + """Process the request within the audit context.""" + with ( + audit_request(request), + set_extra_data(context_data=self.get_extra_data(request)), + ): + return self.get_response(request) diff --git a/src/backend/InvenTree/audit/migrations/0001_initial.py b/src/backend/InvenTree/audit/migrations/0001_initial.py new file mode 100644 index 0000000000..0572d5aceb --- /dev/null +++ b/src/backend/InvenTree/audit/migrations/0001_initial.py @@ -0,0 +1,171 @@ +# Generated by Django 5.2.17 on 2026-10-20 07:02 + +import django.db.models.deletion +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("contenttypes", "0002_remove_content_type_name"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="AuditLogEntry", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "object_pk", + models.CharField( + db_index=True, max_length=255, verbose_name="object pk" + ), + ), + ( + "object_id", + models.BigIntegerField( + blank=True, db_index=True, null=True, verbose_name="object id" + ), + ), + ("object_repr", models.TextField(verbose_name="object representation")), + ("serialized_data", models.JSONField(null=True)), + ( + "action", + models.PositiveSmallIntegerField( + choices=[ + (0, "create"), + (1, "update"), + (2, "delete"), + (3, "access"), + ], + db_index=True, + verbose_name="action", + ), + ), + ( + "changes_text", + models.TextField(blank=True, verbose_name="change message"), + ), + ("changes", models.JSONField(null=True, verbose_name="change message")), + ( + "cid", + models.CharField( + blank=True, + db_index=True, + max_length=255, + null=True, + verbose_name="Correlation ID", + ), + ), + ( + "remote_addr", + models.GenericIPAddressField( + blank=True, null=True, verbose_name="remote address" + ), + ), + ( + "remote_port", + models.PositiveIntegerField( + blank=True, null=True, verbose_name="remote port" + ), + ), + ( + "timestamp", + models.DateTimeField( + db_index=True, + default=django.utils.timezone.now, + verbose_name="timestamp", + ), + ), + ( + "additional_data", + models.JSONField( + blank=True, null=True, verbose_name="additional data" + ), + ), + ( + "actor_email", + models.CharField( + blank=True, + max_length=254, + null=True, + verbose_name="actor email", + ), + ), + ( + "parent_object_pk", + models.CharField( + blank=True, + max_length=255, + null=True, + verbose_name="Parent Object PK", + ), + ), + ( + "actor", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + verbose_name="actor", + ), + ), + ( + "content_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="contenttypes.contenttype", + verbose_name="content type", + ), + ), + ( + "parent_content_type", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="contenttypes.contenttype", + verbose_name="Parent Content Type", + ), + ), + ], + options={ + "verbose_name": "Audit Log Entry", + "verbose_name_plural": "Audit Log Entries", + "ordering": ["-timestamp"], + "get_latest_by": "timestamp", + "abstract": False, + "indexes": [ + models.Index( + fields=["content_type", "object_pk", "-timestamp"], + name="audit_object_idx", + ), + models.Index( + fields=[ + "parent_content_type", + "parent_object_pk", + "-timestamp", + ], + name="audit_parent_idx", + ), + ], + }, + ), + ] diff --git a/src/backend/InvenTree/audit/migrations/0002_actor_username.py b/src/backend/InvenTree/audit/migrations/0002_actor_username.py new file mode 100644 index 0000000000..a20effa869 --- /dev/null +++ b/src/backend/InvenTree/audit/migrations/0002_actor_username.py @@ -0,0 +1,52 @@ +# Generated by Django 5.2.17 on 2026-10-23 23:18 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models +from django.db.models import OuterRef, Subquery + + +def set_actor_username(apps, schema_editor): + """Record the username of the actor against existing entries.""" + AuditLogEntry = apps.get_model('audit', 'AuditLogEntry') + User = apps.get_model(settings.AUTH_USER_MODEL) + + AuditLogEntry.objects.filter(actor__isnull=False).update( + actor_username=Subquery( + User.objects.filter(pk=OuterRef('actor_id')).values('username')[:1] + ) + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("audit", "0001_initial"), + ("contenttypes", "0002_remove_content_type_name"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="auditlogentry", + name="actor_username", + field=models.CharField( + blank=True, max_length=150, null=True, verbose_name="Actor Username" + ), + ), + migrations.AlterField( + model_name="auditlogentry", + name="parent_content_type", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="contenttypes.contenttype", + verbose_name="Parent Content Type", + ), + ), + migrations.RunPython( + set_actor_username, reverse_code=migrations.RunPython.noop + ), + ] diff --git a/src/backend/InvenTree/audit/migrations/__init__.py b/src/backend/InvenTree/audit/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/backend/InvenTree/audit/models.py b/src/backend/InvenTree/audit/models.py new file mode 100644 index 0000000000..f17501873e --- /dev/null +++ b/src/backend/InvenTree/audit/models.py @@ -0,0 +1,337 @@ +"""Database models for the audit app.""" + +import os + +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import FieldDoesNotExist +from django.db import models +from django.utils.functional import Promise +from django.utils.translation import gettext_lazy as _ + +from auditlog.models import AbstractLogEntry, LogEntryManager + +import audit.context + +MASKED_VALUE = '***' + + +def get_audit_parent_reference(instance): + """Return a (ContentType, pk) reference to the audit "parent" of an instance (or None).""" + if callable(func := getattr(instance, 'get_audit_parent_reference', None)): + return func() + + # Fallback for models which provide get_audit_parent() only + if callable(func := getattr(instance, 'get_audit_parent', None)): + if parent := func(): + return ContentType.objects.get_for_model(parent), str(parent.pk) + + return None + + +# Attribute used to defer an audit entry until the instance has been saved +DEFERRED_LOG_ATTR = '_audit_deferred_log' + + +def expression_fields(instance, changes: dict) -> list[str]: + """Return the changed fields whose (unsaved) value is a query expression (e.g. F('x') + 1). + + The value written by such an expression is only known once the instance has been saved. + """ + fields = [] + + for name in changes: + try: + field = type(instance)._meta.get_field(name) + except FieldDoesNotExist: + continue + + # Read the raw attribute value - avoids any related object lookups + value = instance.__dict__.get(getattr(field, 'attname', name)) + + if hasattr(value, 'resolve_expression'): + fields.append(name) + + return fields + + +def file_field_basenames(model, changes: dict) -> dict: + """Reduce recorded file field values to the filename only (not the full storage path).""" + for name, value in changes.items(): + try: + field = model._meta.get_field(name) + except FieldDoesNotExist: + continue + + if isinstance(field, models.FileField) and isinstance(value, (list, tuple)): + changes[name] = [ + os.path.basename(v) if isinstance(v, str) and v else v for v in value + ] + + return changes + + +def resolve_lazy_strings(changes: dict) -> dict: + """Convert lazy translation strings to plain strings, so that the changes are JSON serializable. + + Upstream only performs this conversion when AUDITLOG_STORE_JSON_CHANGES is disabled. + """ + for name, value in changes.items(): + if isinstance(value, (list, tuple)): + changes[name] = [str(v) if isinstance(v, Promise) else v for v in value] + + return changes + + +def drop_orphan_currency_changes(instance, changes: dict) -> dict: + """Remove changes to money currency fields whose amount is not set (and has not changed). + + django-money stores the currency of a MoneyField 'x' in a separate field 'x_currency', + which has a default value (e.g. 'USD') even when the amount is empty. + Without this, creating an object records e.g. {'price_currency': [None, 'USD']}. + """ + from djmoney.models.fields import MoneyField + + result = {} + + for field, value in changes.items(): + if field.endswith('_currency'): + amount = field[: -len('_currency')] + + try: + amount_field = type(instance)._meta.get_field(amount) + except FieldDoesNotExist: + amount_field = None + + # Only applies to the currency field of a MoneyField (e.g. not 'order_currency') + if ( + isinstance(amount_field, MoneyField) + and amount not in changes + and getattr(instance, amount, None) is None + ): + continue + + result[field] = value + + return result + + +def is_concrete_field(model, field_name: str) -> bool: + """Return True if field_name is a concrete field on the model (or is unknown).""" + try: + field = model._meta.get_field(field_name) + except FieldDoesNotExist: + return True + + return getattr(field, 'concrete', False) + + +def mask_changes(changes): + """Replace every recorded value in the provided changes dict.""" + if not changes: + return changes + + masked = {} + + for field, value in changes.items(): + if isinstance(value, dict) and value.get('type') == 'm2m': + masked[field] = { + **value, + 'objects': [MASKED_VALUE for _obj in value.get('objects', [])], + } + else: + masked[field] = [MASKED_VALUE, MASKED_VALUE] + + return masked + + +class AuditLogEntryManager(LogEntryManager): + """Manager for the AuditLogEntry model. + + Extends the upstream manager to attach InvenTree specific context to each entry: + - Parent object reference + - Actor (resolved lazily from the current request) + - Source (for changes made outside of a request) + - Row-level masking of sensitive values + """ + + def get_audit_kwargs(self, instance, kwargs: dict) -> dict: + """Update the provided LogEntry kwargs with InvenTree specific data.""" + if reference := get_audit_parent_reference(instance): + parent_ct, parent_pk = reference + kwargs.setdefault('parent_content_type', parent_ct) + kwargs.setdefault('parent_object_pk', parent_pk) + + if 'actor' not in kwargs and (actor := audit.context.get_request_actor()): + kwargs['actor'] = actor + kwargs['actor_email'] = getattr(actor, 'email', None) + + # Record the username, so that the actor is still identified if the user is deleted + if (actor := kwargs.get('actor')) and not kwargs.get('actor_username'): + kwargs['actor_username'] = getattr(actor, 'username', None) + + if source := audit.context.get_source(): + get_additional_data = getattr(instance, 'get_additional_data', None) + + additional_data = kwargs.get('additional_data') + + if additional_data is None and callable(get_additional_data): + additional_data = get_additional_data() + + kwargs['additional_data'] = {**(additional_data or {}), 'source': source} + + is_masked = getattr(instance, 'is_audit_masked', None) + + if callable(is_masked) and is_masked(): + # Mask at write time - sensitive values must never reach the log table + kwargs['changes'] = mask_changes(kwargs.get('changes')) + kwargs['serialized_data'] = None + + return kwargs + + def log_create(self, instance, force_log: bool = False, **kwargs): + """Create a new log entry for the provided instance. + + For updates, fields whose recorded old and new values are identical are dropped. + These occur when the in-memory value differs from the database value only in type + (e.g. an empty FieldFile vs. an empty string), and would otherwise add noise to every save. + + Updates which assign a query expression (e.g. F('completed') + 1) are deferred until + after the save, so that the value actually written can be recorded + (see audit.signals.resolve_deferred_log). + """ + # Internal flag: this entry has been deferred, and the expression values resolved + resolved = kwargs.pop('_audit_resolved', False) + + changes = kwargs.get('changes') + + if isinstance(changes, dict): + # Upstream includes reverse relations (e.g. 'company.contacts') in create / delete diffs, + # recording the string representation of the related manager - discard these + changes = { + field: value + for field, value in changes.items() + if is_concrete_field(type(instance), field) + } + + # A money currency field (e.g. 'price_currency') is meaningless without an amount + changes = drop_orphan_currency_changes(instance, changes) + + if not changes and not force_log: + return None + + if kwargs.get('action') == AuditLogEntry.Action.UPDATE: + if not resolved and (fields := expression_fields(instance, changes)): + instance.__dict__[DEFERRED_LOG_ATTR] = { + 'force_log': force_log, + 'kwargs': {**kwargs, 'changes': changes}, + 'fields': fields, + } + return None + + changes = { + field: value + for field, value in changes.items() + if not ( + isinstance(value, (list, tuple)) + and len(value) == 2 + and value[0] == value[1] + ) + } + + if not changes and not force_log: + return None + + kwargs['changes'] = file_field_basenames( + type(instance), resolve_lazy_strings(changes) + ) + + kwargs = self.get_audit_kwargs(instance, kwargs) + return super().log_create(instance, force_log=force_log, **kwargs) + + def create(self, **kwargs): + """Create a new log entry, or add it to the current batch (see audit.helpers.write_batched).""" + if (batch := audit.context.get_batch()) is not None: + entry = self.model(**kwargs) + batch.append(entry) + return entry + + return super().create(**kwargs) + + def log_m2m_changes( + self, changed_queryset, instance, operation, field_name, **kwargs + ): + """Create a new log entry for a many-to-many change.""" + is_masked = getattr(instance, 'is_audit_masked', None) + + if callable(is_masked) and is_masked() and changed_queryset: + # Upstream builds the 'changes' dict from str(obj) for each object, + # so substitute placeholders before anything is written + changed_queryset = [MASKED_VALUE] * len(changed_queryset) + + kwargs = self.get_audit_kwargs(instance, kwargs) + + return super().log_m2m_changes( + changed_queryset, instance, operation, field_name, **kwargs + ) + + +class AuditLogEntry(AbstractLogEntry): + """A single audit log entry, recording a change to a model instance. + + Extends the upstream LogEntry with an (optional) reference to a "parent" object, + so that the history of a parent (e.g. a PurchaseOrder) can include changes + made to its children (e.g. line items) - even after the child has been deleted. + + Entries are immutable via the API. + """ + + class Meta(AbstractLogEntry.Meta): + """Metaclass options for the AuditLogEntry model.""" + + verbose_name = _('Audit Log Entry') + verbose_name_plural = _('Audit Log Entries') + + indexes = [ + models.Index( + fields=['content_type', 'object_pk', '-timestamp'], + name='audit_object_idx', + ), + models.Index( + fields=['parent_content_type', 'parent_object_pk', '-timestamp'], + name='audit_parent_idx', + ), + ] + + objects = AuditLogEntryManager() + + # Note: SET_NULL (rather than CASCADE) so that removing a stale content type + # (e.g. an uninstalled plugin) does not delete the history of child objects + parent_content_type = models.ForeignKey( + ContentType, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name='+', + verbose_name=_('Parent Content Type'), + ) + + parent_object_pk = models.CharField( + max_length=255, null=True, blank=True, verbose_name=_('Parent Object PK') + ) + + # Snapshot of the actor's username (retained if the user is deleted) + actor_username = models.CharField( + max_length=150, null=True, blank=True, verbose_name=_('Actor Username') + ) + + @property + def model_type(self) -> str: + """Return the 'app_label.model' string for the audited model.""" + return f'{self.content_type.app_label}.{self.content_type.model}' + + @property + def parent_model_type(self): + """Return the 'app_label.model' string for the parent model (if any).""" + if ct := self.parent_content_type: + return f'{ct.app_label}.{ct.model}' + return None diff --git a/src/backend/InvenTree/audit/permissions.py b/src/backend/InvenTree/audit/permissions.py new file mode 100644 index 0000000000..a4027a9cc7 --- /dev/null +++ b/src/backend/InvenTree/audit/permissions.py @@ -0,0 +1,73 @@ +"""Permission checks for the audit app. + +Rules: +- An audit entry is visible if the user may view the *audited* model +- Querying the history of a parent object (which includes child entries) requires + permission to view the parent model +- The parent reference of an entry is only exposed if the user may view the parent model +- For models with AUDIT_REQUIRE_PARENT_PERMISSION (e.g. attachments), entries are only + visible if the user may view the parent model +""" + +from typing import Optional + +from audit.registry import get_view_restriction + + +def user_can_view_audit_model(user, model, groups=None) -> bool: + """Determine if the user may view audit history for the given model class.""" + from users.permissions import check_user_permission + + if user is None or model is None: + return False + + restriction = get_view_restriction(model) + + if restriction == 'superuser' and not user.is_superuser: + return False + + if restriction == 'staff' and not user.is_staff: + return False + + return check_user_permission(user, model, 'view', groups=groups) + + +def get_viewable_audit_content_types(user) -> Optional[list[int]]: + """Return the ContentType IDs for which the user may view audit history. + + Returns None if the user may view everything. + """ + from InvenTree.cache import get_cached_content_types + from users.permissions import prefetch_rule_sets + + if user.is_superuser: + return None + + groups = prefetch_rule_sets(user) + + allowed = [] + + for ct in get_cached_content_types(): + model = ct.model_class() + + # Stale content types (model no longer installed) are never visible + if model is None: + continue + + if user_can_view_audit_model(user, model, groups=groups): + allowed.append(ct.pk) + + return allowed + + +def parent_permission_content_types() -> list[int]: + """Return the ContentType IDs of audited models which require parent permission.""" + from django.contrib.contenttypes.models import ContentType + + from audit.registry import audited_models + + return [ + ContentType.objects.get_for_model(model).pk + for model in audited_models() + if getattr(model, 'AUDIT_REQUIRE_PARENT_PERMISSION', False) + ] diff --git a/src/backend/InvenTree/audit/registry.py b/src/backend/InvenTree/audit/registry.py new file mode 100644 index 0000000000..49c1ee114f --- /dev/null +++ b/src/backend/InvenTree/audit/registry.py @@ -0,0 +1,105 @@ +"""Registration of audited models with django-auditlog.""" + +from django.apps import apps + +import structlog +from auditlog.registry import auditlog + +logger = structlog.get_logger('inventree') + +# Fields which are never recorded in the audit log, for any model +BASE_EXCLUDE_FIELDS = ( + 'metadata', + # Derived sorting fields + 'reference_int', + 'line_int', + # MPTT tree fields + 'lft', + 'rght', + 'tree_id', + 'level', + # Automatically updated timestamps + 'updated', + 'updated_at', + 'last_updated', +) + +# Models (by 'app_label.model' label) whose audit history is restricted, +# regardless of the RuleSet permissions of the requesting user. +# These are models which InvenTree does not define (so cannot carry the mixin attribute), +# or whose history is more sensitive than the current value. +AUDIT_VIEW_RESTRICTIONS = { + 'auth.user': 'staff', + 'auth.group': 'staff', + 'users.ruleset': 'staff', + 'common.inventreesetting': 'staff', + 'plugin.pluginsetting': 'superuser', +} + + +def audited_models() -> list: + """Return all installed models which opt in to the audit log. + + Uses the app registry rather than ContentTypes, so that no database access is required. + """ + from InvenTree.models import InvenTreeAuditMixin + + return sorted( + ( + model + for model in apps.get_models() + if issubclass(model, InvenTreeAuditMixin) and not model._meta.abstract + ), + key=lambda model: model._meta.label_lower, + ) + + +def register_model(model, **kwargs) -> None: + """Register a single model with django-auditlog, using the model's audit attributes.""" + exclude_fields = { + *BASE_EXCLUDE_FIELDS, + *getattr(model, 'AUDIT_EXCLUDE_FIELDS', ()), + *kwargs.pop('exclude_fields', ()), + } + + mask_fields = { + *getattr(model, 'AUDIT_MASK_FIELDS', ()), + *kwargs.pop('mask_fields', ()), + } + + m2m_fields = { + *getattr(model, 'AUDIT_M2M_FIELDS', ()), + *kwargs.pop('m2m_fields', ()), + } + + # If specified, *only* these fields are recorded + include_fields = { + *getattr(model, 'AUDIT_INCLUDE_FIELDS', ()), + *kwargs.pop('include_fields', ()), + } + + auditlog.register( + model, + include_fields=sorted(include_fields), + exclude_fields=sorted(exclude_fields), + mask_fields=sorted(mask_fields), + m2m_fields=m2m_fields, + **kwargs, + ) + + +def register_audited_models() -> None: + """Register all models which opt in to the audit log.""" + for model in audited_models(): + if not auditlog.contains(model): + register_model(model) + + logger.debug('Registered %s models with the audit log', len(auditlog.get_models())) + + +def get_view_restriction(model): + """Return the audit view restriction for a model: None, 'staff' or 'superuser'.""" + if restriction := getattr(model, 'AUDIT_VIEW_RESTRICTION', None): + return restriction + + return AUDIT_VIEW_RESTRICTIONS.get(model._meta.label_lower) diff --git a/src/backend/InvenTree/audit/serializers.py b/src/backend/InvenTree/audit/serializers.py new file mode 100644 index 0000000000..9ebbf1ea08 --- /dev/null +++ b/src/backend/InvenTree/audit/serializers.py @@ -0,0 +1,306 @@ +"""API serializers for the audit app.""" + +from typing import Any, Optional + +from django.core.exceptions import ( + FieldDoesNotExist, + ObjectDoesNotExist, + ValidationError, +) +from django.db import models +from django.utils.text import capfirst +from django.utils.translation import gettext_lazy as _ + +from drf_spectacular.utils import extend_schema_field +from rest_framework import serializers + +import InvenTree.serializers +from audit.models import MASKED_VALUE, AuditLogEntry +from InvenTree.serializers import OptionalField +from users.serializers import UserSerializer + + +class AuditChangeDetailSerializer(serializers.Serializer): + """Describes a single field change within an audit log entry.""" + + field = serializers.CharField(label=_('Field')) + label = serializers.CharField(label=_('Label')) + type = serializers.ChoiceField( + choices=['value', 'fk', 'm2m'], label=_('Change Type') + ) + old = serializers.JSONField(allow_null=True, required=False) + new = serializers.JSONField(allow_null=True, required=False) + old_display = serializers.CharField(allow_null=True, required=False) + new_display = serializers.CharField(allow_null=True, required=False) + model_type = serializers.CharField( + allow_null=True, required=False, help_text=_('Related model (for FK fields)') + ) + operation = serializers.CharField( + allow_null=True, required=False, help_text=_('M2M operation (add / delete)') + ) + objects = serializers.ListField( + child=serializers.CharField(), allow_null=True, required=False + ) + numeric = serializers.BooleanField( + required=False, help_text=_('The field holds a numeric value') + ) + + +def is_numeric_field(field) -> bool: + """Return True if the model field holds a plain numeric value. + + Fields with choices are excluded (their values are displayed via the choice label). + Note: decimal values are recorded as strings (e.g. '10.00000'). + """ + if field is None or getattr(field, 'flatchoices', None): + return False + + return isinstance( + field, (models.IntegerField, models.DecimalField, models.FloatField) + ) + + +class AuditLogEntrySerializer( + InvenTree.serializers.FilterableSerializerMixin, + InvenTree.serializers.InvenTreeModelSerializer, +): + """Serializer for the AuditLogEntry model (read-only).""" + + # Fields which are only exposed to staff users + STAFF_ONLY_FIELDS = ['remote_addr', 'remote_port'] + + class Meta: + """Metaclass options.""" + + model = AuditLogEntry + fields = [ + 'pk', + 'timestamp', + 'action', + 'action_label', + 'actor', + 'actor_detail', + 'actor_username', + 'model_type', + 'model_label', + 'object_pk', + 'object_repr', + 'parent_model_type', + 'parent_object_pk', + 'changes', + 'changes_detail', + 'cid', + 'additional_data', + 'remote_addr', + 'remote_port', + ] + read_only_fields = fields + + action_label = serializers.CharField( + source='get_action_display', read_only=True, label=_('Action') + ) + + model_type = serializers.CharField(read_only=True, label=_('Model Type')) + + model_label = serializers.SerializerMethodField(label=_('Model Label')) + + def get_model_label(self, entry: AuditLogEntry) -> str: + """Return the human readable name of the audited model.""" + if model := entry.content_type.model_class(): + return capfirst(str(model._meta.verbose_name)) + + return entry.model_type + + parent_model_type = serializers.CharField( + read_only=True, allow_null=True, label=_('Parent Model Type') + ) + + changes = serializers.SerializerMethodField(label=_('Changes')) + + changes_detail = OptionalField( + serializer_class=serializers.SerializerMethodField, + serializer_kwargs={'read_only': True, 'label': _('Change Details')}, + default_include=False, + ) + + def get_request_user(self): + """Return the requesting user (if any).""" + request = self.context.get('request') + return getattr(request, 'user', None) + + def can_view_model(self, model) -> bool: + """Return True if the requesting user may view the given model (cached).""" + from audit.permissions import user_can_view_audit_model + + if model is None: + return False + + cache = self.__dict__.setdefault('_audit_perm_cache', {}) + + if model not in cache: + cache[model] = user_can_view_audit_model(self.get_request_user(), model) + + return cache[model] + + def get_entry_fields(self, entry: AuditLogEntry) -> dict: + """Return a mapping of field name -> model field for the audited model.""" + model = entry.content_type.model_class() + fields = {} + + # The audited model may no longer exist (e.g. an uninstalled plugin) + if model is None: + return fields + + for name in entry.changes_dict or {}: + try: + fields[name] = model._meta.get_field(name) + except FieldDoesNotExist: + continue + + return fields + + @extend_schema_field(serializers.JSONField()) + def get_changes(self, entry: AuditLogEntry) -> dict: + """Return the raw changes recorded against this entry. + + The string representation of related objects in M2M changes is + removed where the user cannot view the related model. + """ + changes = dict(entry.changes_dict or {}) + fields = self.get_entry_fields(entry) + + for name, value in changes.items(): + if isinstance(value, dict) and value.get('type') == 'm2m': + field = fields.get(name) + related = getattr(field, 'related_model', None) + + if not self.can_view_model(related): + changes[name] = {**value, 'objects': None} + + return changes + + def get_related_display(self, model, value) -> Optional[str]: + """Return the string representation of a related object (if it can be viewed).""" + if value in (None, '', 'None', MASKED_VALUE) or not self.can_view_model(model): + return None + + cache = self.__dict__.setdefault('_audit_fk_cache', {}) + key = (model, str(value)) + + if key not in cache: + try: + pk = model._meta.pk.to_python(value) + cache[key] = str(model._base_manager.get(pk=pk)) + except ObjectDoesNotExist: + cache[key] = _('Deleted') + except (ValidationError, ValueError, TypeError): + cache[key] = None + + return cache[key] + + @extend_schema_field(AuditChangeDetailSerializer(many=True)) + def get_changes_detail(self, entry: AuditLogEntry) -> list[dict[str, Any]]: + """Return a list of per-field changes, with display values. + + - Field labels are resolved from the model (if it still exists) + - Choice values are translated to their labels + - Foreign key values are resolved to the related object, *only* if the + requesting user has permission to view the related model + """ + fields = self.get_entry_fields(entry) + rows = [] + + for name, value in self.get_changes(entry).items(): + field = fields.get(name) + + # The primary key is recorded on creation, but is not useful to display + if getattr(field, 'primary_key', False): + continue + + label = capfirst(str(getattr(field, 'verbose_name', name))) + + row = { + 'field': name, + 'label': label, + 'type': 'value', + 'old': None, + 'new': None, + 'old_display': None, + 'new_display': None, + 'model_type': None, + 'operation': None, + 'objects': None, + 'numeric': is_numeric_field(field), + } + + if isinstance(value, dict) and value.get('type') == 'm2m': + row['type'] = 'm2m' + row['operation'] = value.get('operation') + row['objects'] = value.get('objects') + rows.append(row) + continue + + if isinstance(value, (list, tuple)) and len(value) == 2: + row['old'], row['new'] = value + else: + row['new'] = value + + related = getattr(field, 'related_model', None) + + if ( + field is not None + and related + and (field.many_to_one or field.one_to_one) + ): + row['type'] = 'fk' + row['model_type'] = ( + f'{related._meta.app_label}.{related._meta.model_name}' + ) + row['old_display'] = self.get_related_display(related, row['old']) + row['new_display'] = self.get_related_display(related, row['new']) + + elif field is not None and getattr(field, 'flatchoices', None): + choices = dict(field.flatchoices) + + for key in ['old', 'new']: + if row[key] in choices: + row[f'{key}_display'] = str(choices[row[key]]) + + rows.append(row) + + # Order by the model field definition order (unknown fields last) + model = entry.content_type.model_class() + order = ( + {f.name: idx for idx, f in enumerate(model._meta.get_fields())} + if model + else {} + ) + + rows.sort(key=lambda row: order.get(row['field'], len(order))) + + return rows + + actor_detail = OptionalField( + serializer_class=UserSerializer, + serializer_kwargs={'source': 'actor', 'read_only': True, 'allow_null': True}, + default_include=True, + prefetch_fields=['actor'], + ) + + def to_representation(self, instance): + """Remove staff-only fields for non-staff users.""" + data = super().to_representation(instance) + + user = self.get_request_user() + + if not (user and user.is_staff): + for field in self.STAFF_ONLY_FIELDS: + data.pop(field, None) + + # Only expose the parent reference if the user may view the parent model + if parent_ct := instance.parent_content_type: + if not self.can_view_model(parent_ct.model_class()): + data['parent_model_type'] = None + data['parent_object_pk'] = None + + return data diff --git a/src/backend/InvenTree/audit/signals.py b/src/backend/InvenTree/audit/signals.py new file mode 100644 index 0000000000..44c05982fe --- /dev/null +++ b/src/backend/InvenTree/audit/signals.py @@ -0,0 +1,115 @@ +"""Signal receivers for the audit app.""" + +from django.conf import settings +from django.db.models.signals import post_save, pre_save +from django.dispatch import receiver + +from auditlog.signals import pre_log +from django_q.signals import post_execute_in_worker, pre_execute + +import audit.context +from audit.models import DEFERRED_LOG_ATTR + + +@receiver(pre_log, dispatch_uid='inventree_audit_pre_log') +def check_audit_enabled(sender, instance, action, **kwargs): + """Skip writing audit entries if the audit log is disabled via global setting. + + - Instances can opt out of being recorded (should_audit) + - Instances can be recorded even if the audit log is disabled (audit_always) + + Returning False from a pre_log receiver prevents the entry being created. + """ + from common.settings import get_global_setting + + should_audit = getattr(instance, 'should_audit', None) + + if callable(should_audit) and not should_audit(): + return False + + audit_always = getattr(instance, 'audit_always', None) + + if callable(audit_always) and audit_always(): + return None + + # create=False: never write to the settings table from within the audit hook + if not get_global_setting('AUDIT_LOG_ENABLED', True, create=False): + return False + + return None + + +def recorded_field_value(model, instance, field_name: str): + """Return the value of a field, in the form recorded by auditlog. + + Mirrors the conversion applied by auditlog.diff.model_instance_diff(), + so that deferred entries are identical to those recorded directly. + """ + from django.utils.encoding import smart_str + + from auditlog.diff import get_field_value, get_mask_function, is_primitive + from auditlog.registry import auditlog + + use_json = settings.AUDITLOG_STORE_JSON_CHANGES + value = get_field_value(instance, model._meta.get_field(field_name), use_json) + + model_fields = auditlog.get_model_fields(model) + + if field_name in model_fields['mask_fields']: + mask_func = get_mask_function(model_fields.get('mask_callable')) + return mask_func(smart_str(value)) + + if not use_json or not is_primitive(value): + return smart_str(value) + + return value + + +@receiver(pre_save, dispatch_uid='inventree_audit_clear_deferred_log') +def clear_deferred_log(sender, instance, **kwargs): + """Discard any deferred entry left over from a previous (failed) save of this instance. + + Connected before the auditlog receivers (see AuditConfig.ready), so runs first. + """ + instance.__dict__.pop(DEFERRED_LOG_ATTR, None) + + +@receiver(post_save, dispatch_uid='inventree_audit_resolve_deferred_log') +def resolve_deferred_log(sender, instance, created, **kwargs): + """Write a deferred audit entry, with query expression values resolved from the database.""" + from audit.models import AuditLogEntry + + if not (pending := instance.__dict__.pop(DEFERRED_LOG_ATTR, None)): + return + + saved = sender._base_manager.filter(pk=instance.pk).first() + + if saved is None: # pragma: no cover + return + + log_kwargs = pending['kwargs'] + changes = dict(log_kwargs['changes']) + + for name in pending['fields']: + old = changes[name][0] + new = recorded_field_value(sender, saved, name) + changes[name] = [old, new] + + AuditLogEntry.objects.log_create( + instance, + force_log=pending['force_log'], + _audit_resolved=True, + **{**log_kwargs, 'changes': changes}, + ) + + +@receiver(pre_execute, dispatch_uid='inventree_audit_pre_execute') +def begin_worker_task(sender, func, task, **kwargs): + """Tag audit entries created by a background worker task with the task name.""" + audit.context.begin_worker_task(task.get('func') or func) + + +@receiver(post_execute_in_worker, dispatch_uid='inventree_audit_post_execute') +def end_worker_task(sender, func, task, **kwargs): + """Clear the audit context once a background worker task has finished.""" + audit.context.end_worker_task() diff --git a/src/backend/InvenTree/audit/tasks.py b/src/backend/InvenTree/audit/tasks.py new file mode 100644 index 0000000000..8b6e7dfe46 --- /dev/null +++ b/src/backend/InvenTree/audit/tasks.py @@ -0,0 +1,65 @@ +"""Background tasks for the audit app.""" + +from datetime import timedelta + +from django.db.models import Exists, OuterRef +from django.utils import timezone + +import structlog +from opentelemetry import trace + +from common.settings import get_global_setting +from InvenTree.tasks import ScheduledTask, scheduled_task + +tracer = trace.get_tracer(__name__) +logger = structlog.get_logger('inventree') + +# Number of entries to delete per query +DELETE_BATCH_SIZE = 1000 + + +@tracer.start_as_current_span('delete_old_audit_entries') +@scheduled_task(ScheduledTask.DAILY) +def delete_old_audit_entries(): + """Remove audit log entries older than the configured retention period. + + Entries are deleted in small batches, so that no single long-running + transaction holds locks on the (potentially very large) audit table. + + If AUDIT_LOG_DELETE_KEEP_SUMMARY is enabled, the following entries are retained + for each object (regardless of age), so that it is always known who created + and who last modified an object: + - The CREATE entry + - The most recent entry (for a deleted object, this is the DELETE entry) + """ + from audit.models import AuditLogEntry + + if not get_global_setting('AUDIT_LOG_DELETE_OLD_ENTRIES', False): + return + + delete_n_days = int(get_global_setting('AUDIT_LOG_DELETE_DAYS', 365)) + + threshold = timezone.now() - timedelta(days=delete_n_days) + + old_entries = AuditLogEntry.objects.filter(timestamp__lte=threshold) + + if get_global_setting('AUDIT_LOG_DELETE_KEEP_SUMMARY', True): + # Only delete entries which have a newer entry for the same object + newer_entries = AuditLogEntry.objects.filter( + content_type=OuterRef('content_type'), + object_pk=OuterRef('object_pk'), + pk__gt=OuterRef('pk'), + ) + + old_entries = old_entries.exclude(action=AuditLogEntry.Action.CREATE).filter( + Exists(newer_entries) + ) + + deleted = 0 + + while batch := list(old_entries.values_list('pk', flat=True)[:DELETE_BATCH_SIZE]): + n, _ = AuditLogEntry.objects.filter(pk__in=batch).delete() + deleted += n + + if deleted: + logger.info('Deleted old audit log entries', count=deleted, threshold=threshold) diff --git a/src/backend/InvenTree/audit/tests.py b/src/backend/InvenTree/audit/tests.py new file mode 100644 index 0000000000..631b3defa7 --- /dev/null +++ b/src/backend/InvenTree/audit/tests.py @@ -0,0 +1,1261 @@ +"""Unit tests for the audit app. + +No production models are audited yet, so these tests temporarily register +PurchaseOrder (parent) and PurchaseOrderLineItem (child) with the audit log. +""" + +import contextlib +from base64 import b64encode +from datetime import timedelta +from unittest import mock + +from django.contrib.auth import get_user_model +from django.contrib.contenttypes.models import ContentType +from django.test import TestCase, override_settings +from django.urls import reverse +from django.utils import timezone + +from auditlog.registry import auditlog + +import audit.context +from audit.models import MASKED_VALUE, AuditLogEntry, mask_changes +from audit.registry import BASE_EXCLUDE_FIELDS, audited_models, register_model +from audit.serializers import AuditLogEntrySerializer +from audit.tasks import delete_old_audit_entries +from common.settings import set_global_setting +from company.models import Company, SupplierPart +from InvenTree.unit_test import InvenTreeAPITestCase +from order.models import PurchaseOrder, PurchaseOrderLineItem +from part.models import Part + +TEST_MODELS = [PurchaseOrder, PurchaseOrderLineItem] + + +def setting_content_type(): + """Return the ContentType for global settings.""" + from common.models import InvenTreeSetting + + return ContentType.objects.get_for_model(InvenTreeSetting) + + +def audited_entries(): + """Return all audit entries, except for changes to global settings. + + Changes to the audit log settings are always recorded, + even when the audit log is disabled. + """ + return AuditLogEntry.objects.exclude(content_type=setting_content_type()) + + +class AuditTestMixin: + """Ensure that the test models are registered with the audit log. + + Models which are already audited (in production) are left registered as they are - + only models registered here are unregistered again afterwards. + """ + + @classmethod + def setUpClass(cls): + """Register test models before any test data is created.""" + cls.parent_patch = mock.patch.object( + PurchaseOrderLineItem, + 'get_audit_parent', + lambda self: self.order, + create=True, + ) + cls.parent_patch.start() + + cls.registered_models = [ + model for model in TEST_MODELS if not auditlog.contains(model) + ] + + for model in cls.registered_models: + register_model(model) + + super().setUpClass() + + @classmethod + def tearDownClass(cls): + """Unregister test models.""" + super().tearDownClass() + + for model in cls.registered_models: + auditlog.unregister(model) + + cls.parent_patch.stop() + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.supplier = Company.objects.create(name='Audit Supplier', is_supplier=True) + cls.part = Part.objects.create( + name='Audit Part', description='A part', purchaseable=True + ) + cls.supplier_part = SupplierPart.objects.create( + part=cls.part, supplier=cls.supplier, SKU='AUDIT-SKU' + ) + cls.po = PurchaseOrder.objects.create( + reference='PO-88880001', supplier=cls.supplier, description='Original' + ) + + def entries_for(self, instance, **kwargs): + """Return audit entries recorded directly against the provided instance.""" + return AuditLogEntry.objects.get_for_object(instance).filter(**kwargs) + + +class AuditRegistryTest(TestCase): + """Tests for model registration.""" + + def test_audited_models(self): + """Only the expected production models opt in to the audit log.""" + self.assertEqual( + [model._meta.label_lower for model in audited_models()], + [ + 'build.build', + 'common.attachment', + 'common.customunit', + 'common.inventreesetting', + 'common.parameter', + 'common.parametertemplate', + 'common.projectcode', + 'company.address', + 'company.company', + 'company.contact', + 'company.manufacturerpart', + 'company.supplierpart', + 'company.supplierpricebreak', + 'order.purchaseorder', + 'order.purchaseorderextraline', + 'order.purchaseorderlineitem', + 'order.returnorder', + 'order.returnorderextraline', + 'order.returnorderlineitem', + 'order.salesorder', + 'order.salesorderextraline', + 'order.salesorderlineitem', + 'order.salesordershipment', + 'order.transferorder', + 'order.transferorderlineitem', + 'part.bomitem', + 'part.bomitemsubstitute', + 'part.part', + 'part.partcategory', + 'pricing.partinternalpricebreak', + 'pricing.partpricing', + 'pricing.partsellpricebreak', + ], + ) + + for model in audited_models(): + self.assertTrue(auditlog.contains(model)) + + def test_register_model(self): + """Registration applies the base excluded fields.""" + from common.models import NotificationEntry + + # Note: a model which is *not* audited in production + self.assertFalse(auditlog.contains(NotificationEntry)) + + register_model(NotificationEntry, exclude_fields=['notes']) + + try: + self.assertTrue(auditlog.contains(NotificationEntry)) + exclude = auditlog.get_model_fields(NotificationEntry)['exclude_fields'] + + for field in [*BASE_EXCLUDE_FIELDS, 'notes']: + self.assertIn(field, exclude) + finally: + auditlog.unregister(NotificationEntry) + + def test_mask_changes(self): + """All values are replaced when masking changes.""" + changes = { + 'value': ['old-secret', 'new-secret'], + 'tags': {'type': 'm2m', 'operation': 'add', 'objects': ['a', 'b']}, + } + + masked = mask_changes(changes) + + self.assertEqual(masked['value'], [MASKED_VALUE, MASKED_VALUE]) + self.assertEqual(masked['tags']['objects'], [MASKED_VALUE, MASKED_VALUE]) + self.assertEqual(masked['tags']['operation'], 'add') + self.assertNotIn('secret', str(masked)) + + +class AuditModelTest(AuditTestMixin, TestCase): + """Tests for audit entry creation.""" + + def test_create_update_delete(self): + """Basic create / update / delete operations are recorded.""" + self.assertEqual( + self.entries_for(self.po, action=AuditLogEntry.Action.CREATE).count(), 1 + ) + + self.po.description = 'Updated' + self.po.save() + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).first() + self.assertEqual(entry.changes_dict['description'], ['Original', 'Updated']) + self.assertIsNone(entry.parent_content_type) + + # Excluded fields are not recorded + self.assertNotIn('reference_int', entry.changes_dict) + self.assertNotIn('metadata', entry.changes_dict) + + def test_parent_link(self): + """Child entries are linked to the parent - and are retained after deletion.""" + line = PurchaseOrderLineItem.objects.create( + order=self.po, part=self.supplier_part, quantity=5 + ) + line_pk = line.pk + + line.quantity = 10 + line.save() + line.delete() + + entries = AuditLogEntry.objects.filter( + parent_content_type=self.po.get_content_type(), + parent_object_pk=str(self.po.pk), + ) + + self.assertEqual(entries.count(), 3) + self.assertEqual( + {e.action for e in entries}, + { + AuditLogEntry.Action.CREATE, + AuditLogEntry.Action.UPDATE, + AuditLogEntry.Action.DELETE, + }, + ) + + for entry in entries: + self.assertEqual(entry.object_pk, str(line_pk)) + self.assertEqual(entry.parent_model_type, 'order.purchaseorder') + + def test_masked_instance(self): + """Row-level masking is applied before the entry is written.""" + with mock.patch.object( + PurchaseOrder, 'is_audit_masked', lambda self: True, create=True + ): + self.po.description = 'top-secret-value' + self.po.save() + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).first() + + self.assertEqual(entry.changes_dict['description'], [MASKED_VALUE] * 2) + self.assertIsNone(entry.serialized_data) + + # Ensure the raw value is not stored anywhere in the entry + for field in ['changes', 'changes_text', 'additional_data', 'object_repr']: + self.assertNotIn('top-secret-value', str(getattr(entry, field))) + + def test_audit_source(self): + """Changes made outside of a request are tagged with their source.""" + with audit.context.audit_source('task:test_task'): + cid = audit.context.get_cid() + self.po.description = 'From task' + self.po.save() + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).first() + + self.assertIsNone(entry.actor) + self.assertEqual(entry.additional_data, {'source': 'task:test_task'}) + self.assertIsNotNone(cid) + self.assertEqual(entry.cid, cid) + + # Context is reset afterwards + self.assertIsNone(audit.context.get_source()) + self.assertIsNone(audit.context.get_cid()) + + def test_disabled(self): + """No entries are recorded when the audit log is disabled.""" + set_global_setting('AUDIT_LOG_ENABLED', False) + self.addCleanup(set_global_setting, 'AUDIT_LOG_ENABLED', True) + + self.po.description = 'Not recorded' + self.po.save() + + self.assertFalse( + self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).exists() + ) + + def test_retention(self): + """Old entries are removed by the scheduled task (only when enabled).""" + old = timezone.now() - timedelta(days=100) + + AuditLogEntry.objects.update(timestamp=old) + + self.po.description = 'Recent' + self.po.save() + + n = AuditLogEntry.objects.count() + self.assertGreater(n, 1) + + # Disabled by default + delete_old_audit_entries() + self.assertEqual(AuditLogEntry.objects.count(), n) + + set_global_setting('AUDIT_LOG_DELETE_OLD_ENTRIES', True) + set_global_setting('AUDIT_LOG_DELETE_DAYS', 30) + set_global_setting('AUDIT_LOG_DELETE_KEEP_SUMMARY', False) + self.addCleanup(set_global_setting, 'AUDIT_LOG_DELETE_OLD_ENTRIES', False) + self.addCleanup(set_global_setting, 'AUDIT_LOG_DELETE_DAYS', 365) + self.addCleanup(set_global_setting, 'AUDIT_LOG_DELETE_KEEP_SUMMARY', True) + + with mock.patch('audit.tasks.DELETE_BATCH_SIZE', 1): + delete_old_audit_entries() + + # Only the recent entries remain (including the settings changes above) + self.assertEqual( + AuditLogEntry.objects.exclude(content_type=setting_content_type()).count(), + 1, + ) + + def test_retention_keep_summary(self): + """With 'keep summary' enabled, the creation and latest entry of each object are kept.""" + # An object with multiple updates + for description in ['First', 'Second', 'Third']: + self.po.description = description + self.po.save() + + # A deleted object + line = PurchaseOrderLineItem.objects.create( + order=self.po, part=self.supplier_part, quantity=5 + ) + line_pk = line.pk + line.quantity = 10 + line.save() + line.delete() + + # Everything is "old" + AuditLogEntry.objects.update(timestamp=timezone.now() - timedelta(days=100)) + + set_global_setting('AUDIT_LOG_DELETE_OLD_ENTRIES', True) + set_global_setting('AUDIT_LOG_DELETE_DAYS', 30) + self.addCleanup(set_global_setting, 'AUDIT_LOG_DELETE_OLD_ENTRIES', False) + self.addCleanup(set_global_setting, 'AUDIT_LOG_DELETE_DAYS', 365) + + with mock.patch('audit.tasks.DELETE_BATCH_SIZE', 1): + delete_old_audit_entries() + + po_entries = self.entries_for(self.po).order_by('pk') + self.assertEqual( + [e.action for e in po_entries], + [AuditLogEntry.Action.CREATE, AuditLogEntry.Action.UPDATE], + ) + self.assertEqual(po_entries.last().changes_dict['description'][1], 'Third') + + line_entries = AuditLogEntry.objects.filter( + content_type=PurchaseOrderLineItem.get_content_type(), + object_pk=str(line_pk), + ).order_by('pk') + self.assertEqual( + [e.action for e in line_entries], + [AuditLogEntry.Action.CREATE, AuditLogEntry.Action.DELETE], + ) + + +class AuditAPITest(AuditTestMixin, InvenTreeAPITestCase): + """Tests for the audit log API endpoints.""" + + roles = ['purchase_order.view', 'purchase_order.change'] + is_staff = True + + def list_url(self): + """Return the list endpoint URL.""" + return reverse('api-audit-log-list') + + def po_history(self, expected_code=200, **params): + """Return the audit history for the test purchase order.""" + params = {'model_type': 'order.purchaseorder', 'model_id': self.po.pk, **params} + return self.get(self.list_url(), params, expected_code=expected_code).data + + def patch_po(self, description, **kwargs): + """Edit the test purchase order via the API.""" + url = reverse('api-po-detail', kwargs={'pk': self.po.pk}) + self.patch(url, {'description': description}, **kwargs) + + def test_actor(self): + """The authenticated user is recorded as the actor (session auth).""" + self.patch_po('Session edit') + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).first() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.remote_addr, '127.0.0.1') + self.assertIsNotNone(entry.cid) + + data = self.po_history() + self.assertEqual(data[0]['actor'], self.user.pk) + self.assertEqual(data[0]['actor_detail']['username'], self.user.username) + self.assertEqual(data[0]['model_type'], 'order.purchaseorder') + self.assertEqual(data[0]['model_label'], 'Purchase Order') + self.assertEqual(data[0]['changes']['description'][1], 'Session edit') + + def test_correlation_id(self): + """The correlation ID matches the request ID (as used by structlog).""" + url = reverse('api-po-detail', kwargs={'pk': self.po.pk}) + + # Request ID provided by the client / reverse proxy + self.patch(url, {'description': 'One'}, HTTP_X_REQUEST_ID='req-abc-123') + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).get() + self.assertEqual(entry.cid, 'req-abc-123') + + # Otherwise a unique ID is generated per request + self.patch(url, {'description': 'Two'}) + self.patch(url, {'description': 'Three'}) + + cids = list( + self + .entries_for(self.po, action=AuditLogEntry.Action.UPDATE) + .exclude(cid='req-abc-123') + .values_list('cid', flat=True) + ) + + self.assertEqual(len(cids), 2) + self.assertTrue(all(cids)) + self.assertNotEqual(cids[0], cids[1]) + + def test_basic_auth_actor(self): + """Users authenticated by DRF (not middleware) are recorded as the actor.""" + self.logout() + + auth = b64encode(f'{self.username}:{self.password}'.encode()).decode() + self.client.credentials(HTTP_AUTHORIZATION=f'Basic {auth}') + + self.patch_po('Basic auth edit') + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).first() + self.assertEqual(entry.actor, self.user) + + def test_spoofed_remote_addr(self): + """An invalid forwarded address does not break saving, and is not recorded.""" + self.patch_po('Spoofed', HTTP_X_FORWARDED_FOR='not-an-ip-address') + + entry = self.entries_for(self.po, action=AuditLogEntry.Action.UPDATE).first() + self.assertIsNone(entry.remote_addr) + + def test_children(self): + """The history of a parent includes child entries (unless excluded).""" + line = PurchaseOrderLineItem.objects.create( + order=self.po, part=self.supplier_part, quantity=5 + ) + line.delete() + + data = self.po_history() + models = [entry['model_type'] for entry in data] + + self.assertIn('order.purchaseorderlineitem', models) + self.assertEqual(models.count('order.purchaseorderlineitem'), 2) + + data = self.po_history(include_children=False) + self.assertEqual( + {entry['model_type'] for entry in data}, {'order.purchaseorder'} + ) + + # Short model names are also accepted + data = self.get(self.list_url(), {'model_type': 'purchaseorderlineitem'}).data + self.assertEqual(len(data), 2) + + def test_filter_validation(self): + """Invalid filter combinations are rejected.""" + self.get(self.list_url(), {'model_id': 1}, expected_code=400) + self.get(self.list_url(), {'model_type': 'not_a_model'}, expected_code=400) + + def test_read_only(self): + """Audit entries cannot be modified via the API.""" + entry = self.entries_for(self.po).first() + url = reverse('api-audit-log-detail', kwargs={'pk': entry.pk}) + + self.get(url) + self.patch(url, {'object_repr': 'x'}, expected_code=405) + self.delete(url, expected_code=405) + self.post(self.list_url(), {}, expected_code=405) + + def test_permissions(self): + """Entries are only visible with 'view' permission on the audited model.""" + entry = self.entries_for(self.po).first() + detail_url = reverse('api-audit-log-detail', kwargs={'pk': entry.pk}) + + self.assertGreater(len(self.po_history()), 0) + + # Remove all roles + self.clearRoles() + + self.assertEqual(len(self.po_history()), 0) + self.assertEqual(len(self.get(self.list_url()).data), 0) + self.get(detail_url, expected_code=404) + + def test_child_without_parent_permission(self): + """Child entries without 'view' permission on the parent model. + + - The child entry itself is still visible (permission on the child model) + - It is *not* returned when querying the history of the parent + - The parent reference is removed from the response + """ + PurchaseOrderLineItem.objects.create( + order=self.po, part=self.supplier_part, quantity=5 + ) + + def line_entries(params=None): + return [ + e + for e in self.get(self.list_url(), params or {}).data + if e['model_type'] == 'order.purchaseorderlineitem' + ] + + [entry] = line_entries() + self.assertEqual(entry['parent_model_type'], 'order.purchaseorder') + self.assertEqual(entry['parent_object_pk'], str(self.po.pk)) + self.assertEqual(len(line_entries({'model_type': 'purchaseorder'})), 1) + + # Line item visible, but parent (order) not + def can_view(user, model, groups=None): + return model is not PurchaseOrder + + with ( + mock.patch('audit.api.user_can_view_audit_model', can_view), + mock.patch('audit.permissions.user_can_view_audit_model', can_view), + ): + [entry] = line_entries() + self.assertIsNone(entry['parent_model_type']) + self.assertIsNone(entry['parent_object_pk']) + + # Not available when querying through the parent + self.assertEqual( + line_entries({'model_type': 'purchaseorder', 'model_id': self.po.pk}), + [], + ) + self.assertEqual(line_entries({'model_type': 'purchaseorder'}), []) + + # Still available when querying the child model directly + self.assertEqual( + len(line_entries({'model_type': 'purchaseorderlineitem'})), 1 + ) + + def test_staff_required(self): + """The audit log API is only available to staff users.""" + self.patch_po('Edit') + + entry = self.entries_for(self.po).first() + detail_url = reverse('api-audit-log-detail', kwargs={'pk': entry.pk}) + + # Staff users can see entries (including the remote address) + data = self.po_history() + self.assertEqual(data[0]['remote_addr'], '127.0.0.1') + self.get(detail_url) + + # Non-staff users are denied - even with view permission on the audited model + self.user.is_staff = False + self.user.save() + + self.get(self.list_url(), expected_code=403) + self.get(detail_url, expected_code=403) + + def test_view_restriction(self): + """Models with a view restriction are hidden from users without that status.""" + self.assertGreater(len(self.po_history()), 0) + + with mock.patch.object( + PurchaseOrder, 'AUDIT_VIEW_RESTRICTION', 'superuser', create=True + ): + # Staff, but not superuser + self.assertEqual(len(self.po_history(include_children=False)), 0) + + self.user.is_superuser = True + self.user.save() + + self.assertGreater(len(self.po_history(include_children=False)), 0) + + def test_model_type_filter_options(self): + """The model type filter choices are provided via the OPTIONS metadata.""" + response = self.options(self.list_url()) + + filters = response.data['filters'] + + # Model-backed filters (e.g. 'actor') are never exposed + self.assertNotIn('actor', filters) + + choices = { + c['value']: c['display_name'] for c in filters['model_type']['choices'] + } + + self.assertEqual(choices['order.purchaseorder'], 'Purchase Order') + self.assertIn('order.purchaseorderlineitem', choices) + + # Only models which the user can view are provided + self.assertNotIn('part.part', choices) + self.assertNotIn('build.build', choices) + + # The chosen value filters the entries + data = self.get(self.list_url(), {'model_type': 'order.purchaseorder'}).data + self.assertGreater(len(data), 0) + + for entry in data: + self.assertEqual(entry['model_type'], 'order.purchaseorder') + + def test_superuser(self): + """Superusers can view all entries.""" + self.clearRoles() + self.assertEqual(len(self.po_history()), 0) + + get_user_model().objects.filter(pk=self.user.pk).update(is_superuser=True) + + self.assertGreater(len(self.po_history()), 0) + + def get_change_rows(self, field_name: str) -> list: + """Return the 'changes_detail' rows for the given field, across the PO history.""" + data = self.po_history( + changes_detail=True, + include_children=False, + action=AuditLogEntry.Action.UPDATE, + ) + + return [ + row + for entry in data + for row in entry['changes_detail'] + if row['field'] == field_name + ] + + def test_changes_detail_fk(self): + """Foreign key changes are resolved for display, if the related model can be viewed.""" + old_supplier = self.supplier + new_supplier = Company.objects.create(name='Other Supplier', is_supplier=True) + + self.po.supplier = new_supplier + self.po.save() + + [row] = self.get_change_rows('supplier') + + self.assertEqual(row['type'], 'fk') + self.assertEqual(row['model_type'], 'company.company') + self.assertEqual(row['old'], old_supplier.pk) + self.assertEqual(row['new'], new_supplier.pk) + self.assertEqual(row['old_display'], str(old_supplier)) + self.assertEqual(row['new_display'], str(new_supplier)) + + # Deleted related objects are marked as such + new_supplier.delete() + [row] = self.get_change_rows('supplier') + self.assertEqual(row['new_display'], 'Deleted') + + # Without permission on the related model, only the PK is returned + with mock.patch.object( + AuditLogEntrySerializer, + 'can_view_model', + lambda self, model: model is PurchaseOrder, + ): + [row] = self.get_change_rows('supplier') + + self.assertEqual(row['old'], old_supplier.pk) + self.assertIsNone(row['old_display']) + self.assertIsNone(row['new_display']) + + def test_changes_detail_value(self): + """Plain value changes include the field label.""" + self.po.description = 'New description' + self.po.save() + + [row] = self.get_change_rows('description') + + self.assertEqual(row['type'], 'value') + self.assertEqual(row['label'], 'Description') + self.assertFalse(row['numeric']) + + # Primary key and automatically updated fields are not shown + data = self.po_history(changes_detail=True, include_children=False) + fields = {row['field'] for entry in data for row in entry['changes_detail']} + + self.assertNotIn('id', fields) + self.assertNotIn('updated_at', fields) + self.assertEqual(row['old'], 'Original') + self.assertEqual(row['new'], 'New description') + + def test_m2m_objects_hidden(self): + """M2M object names are removed if the related model cannot be viewed.""" + AuditLogEntry.objects.create( + content_type=self.po.get_content_type(), + object_pk=str(self.po.pk), + object_repr=str(self.po), + action=AuditLogEntry.Action.UPDATE, + changes={ + 'tags': {'type': 'm2m', 'operation': 'add', 'objects': ['hidden-tag']} + }, + ) + + with mock.patch.object( + AuditLogEntrySerializer, + 'can_view_model', + lambda self, model: model is PurchaseOrder, + ): + response = self.get( + self.list_url(), + { + 'model_type': 'order.purchaseorder', + 'model_id': self.po.pk, + 'changes_detail': True, + }, + ) + + self.assertNotIn('hidden-tag', str(response.content)) + + with mock.patch.object( + AuditLogEntrySerializer, 'can_view_model', lambda self, model: True + ): + [row] = self.get_change_rows('tags') + + self.assertEqual(row['type'], 'm2m') + self.assertEqual(row['operation'], 'add') + self.assertEqual(row['objects'], ['hidden-tag']) + + def test_stale_model(self): + """Entries for models which no longer exist can still be serialized.""" + get_user_model().objects.filter(pk=self.user.pk).update(is_superuser=True) + + ct = ContentType.objects.create(app_label='removed_app', model='removedmodel') + + AuditLogEntry.objects.create( + content_type=ct, + object_pk='1', + object_repr='Removed object', + action=AuditLogEntry.Action.UPDATE, + changes={'name': ['a', 'b']}, + ) + + data = self.get( + self.list_url(), {'model_type': ct.pk, 'changes_detail': True} + ).data + + self.assertEqual(len(data), 1) + self.assertEqual(data[0]['changes_detail'][0]['label'], 'Name') + self.assertEqual(data[0]['changes_detail'][0]['new'], 'b') + + +class AuditMiddlewareConfigTest(TestCase): + """Tests for ensuring the audit middleware is always configured.""" + + AUDIT = 'audit.middleware.InvenTreeAuditlogMiddleware' + STRUCTLOG = 'django_structlog.middlewares.RequestMiddleware' + + def test_installed(self): + """The audit middleware is present in the active configuration.""" + from django.conf import settings + + self.assertIn(self.AUDIT, settings.MIDDLEWARE) + + # Placed after the structlog middleware (shares the request ID) + self.assertGreater( + settings.MIDDLEWARE.index(self.AUDIT), + settings.MIDDLEWARE.index(self.STRUCTLOG), + ) + + def test_ensure_middleware(self): + """Missing middleware is added (after the specified middleware, if present).""" + from InvenTree.config import ensure_middleware + + # Already present - unchanged + middleware = ['a', self.AUDIT, 'b'] + self.assertEqual(ensure_middleware(middleware, self.AUDIT), middleware) + + # Missing - inserted after the specified middleware (with a warning) + with self.assertLogs('inventree', level='WARNING') as logs: + result = ensure_middleware( + ['a', self.STRUCTLOG, 'b'], self.AUDIT, after=self.STRUCTLOG + ) + + self.assertEqual(result, ['a', self.STRUCTLOG, self.AUDIT, 'b']) + self.assertIn('INVE-W17', logs.output[0]) + + # Missing (and the 'after' middleware is not present) - appended + with self.assertLogs('inventree', level='WARNING'): + result = ensure_middleware(['a', 'b'], self.AUDIT, after=self.STRUCTLOG) + + self.assertEqual(result, ['a', 'b', self.AUDIT]) + + +class AuditAdminTest(AuditTestMixin, InvenTreeAPITestCase): + """Tests for the AuditLogEntry admin class.""" + + superuser = True + + def test_admin_registration(self): + """The custom admin class replaces the upstream one.""" + from django.contrib import admin + + from audit.admin import AuditLogEntryAdmin + + model_admin = admin.site._registry[AuditLogEntry] + + self.assertIsInstance(model_admin, AuditLogEntryAdmin) + + # Remains read-only + self.assertFalse(model_admin.has_add_permission(None)) + self.assertFalse(model_admin.has_change_permission(None)) + + @override_settings( + SITE_URL='http://testserver', CSRF_TRUSTED_ORIGINS=['http://testserver'] + ) + def test_filter_by_user(self): + """The admin changelist can be filtered by the user who made the change.""" + other = get_user_model().objects.create_user(username='other_user') + + with audit.context.audit_source('test'): + from auditlog.context import set_actor + + with set_actor(self.user): + self.po.description = 'By test user' + self.po.save() + + with set_actor(other): + self.po.description = 'By other user' + self.po.save() + + url = reverse('admin:audit_auditlogentry_changelist') + + # The filter lists users with recorded entries + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'other_user') + + response = self.client.get(url, {'actor__id__exact': other.pk}) + self.assertEqual(response.status_code, 200) + + entries = list(response.context['cl'].result_list) + + self.assertEqual(len(entries), 1) + self.assertEqual(entries[0].actor, other) + + +def audit_task_helper(pk: int, description: str): + """Background task used to test the audit source of task changes.""" + company = Company.objects.get(pk=pk) + company.description = description + company.save() + + +class AuditSourceTest(InvenTreeAPITestCase): + """Tests for the context recorded against programmatic (non-request) changes.""" + + roles = ['purchase_order.change'] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.company = Company.objects.create(name='Source Company', is_supplier=True) + + def last_update(self): + """Return the most recent UPDATE entry for the test company.""" + return ( + AuditLogEntry.objects + .get_for_object(self.company) + .filter(action=AuditLogEntry.Action.UPDATE) + .order_by('pk') + .last() + ) + + def test_programmatic_update(self): + """A plain ORM change (no request, no task) is recorded without any request context.""" + self.company.description = 'Programmatic' + self.company.save() + + entry = self.last_update() + + self.assertEqual(entry.changes_dict['description'], ['', 'Programmatic']) + self.assertIsNone(entry.actor) + self.assertIsNone(entry.remote_addr) + self.assertIsNone(entry.additional_data) + + def test_programmatic_bulk_create(self): + """Entries for a programmatic bulk create have no actor.""" + from audit.helpers import audited_bulk_create + from common.models import Parameter, ParameterTemplate + + template = ParameterTemplate.objects.create(name='Source Template') + + [parameter] = audited_bulk_create( + Parameter, + [ + Parameter( + model_type=Part.get_content_type(), + model_id=Part.objects.create(name='P', description='P').pk, + template=template, + data='X', + ) + ], + ) + + entry = AuditLogEntry.objects.get_for_object(parameter).get() + + self.assertEqual(entry.action, AuditLogEntry.Action.CREATE) + self.assertIsNone(entry.actor) + self.assertIsNone(entry.remote_addr) + + def test_actor_not_retained(self): + """The actor of a request is not attributed to later programmatic changes.""" + self.patch( + reverse('api-company-detail', kwargs={'pk': self.company.pk}), + {'description': 'Via API'}, + ) + + api_entry = self.last_update() + self.assertEqual(api_entry.actor, self.user) + + self.company.refresh_from_db() + self.company.description = 'Programmatic' + self.company.save() + + entry = self.last_update() + + self.assertNotEqual(entry.pk, api_entry.pk) + self.assertIsNone(entry.actor) + self.assertIsNone(entry.remote_addr) + self.assertNotEqual(entry.cid, api_entry.cid) + + def run_task(self, description: str, **kwargs): + """Run the test task (synchronously) via offload_task.""" + from InvenTree.tasks import offload_task + + offload_task( + 'audit.tests.audit_task_helper', + self.company.pk, + description, + force_sync=True, + **kwargs, + ) + + def test_sync_task(self): + """Changes made by a (synchronous) task are tagged with the task name.""" + self.run_task('From task') + + entry = self.last_update() + + self.assertEqual(entry.changes_dict['description'], ['', 'From task']) + self.assertEqual( + entry.additional_data, {'source': 'task:audit.tests.audit_task_helper'} + ) + self.assertIsNone(entry.actor) + self.assertIsNotNone(entry.cid) + + # Context is reset afterwards + self.assertIsNone(audit.context.get_source()) + self.assertIsNone(audit.context.get_cid()) + + def test_sync_task_in_request(self): + """A task run synchronously within a request is attributed to the request.""" + request = mock.Mock(user=self.user) + + with audit.context.audit_request(request): + self.run_task('From request') + + entry = self.last_update() + + self.assertEqual(entry.actor, self.user) + self.assertIsNone(entry.additional_data) + + def test_worker_task(self): + """Changes made by a task executed by the background worker are tagged with the task name.""" + from django_q.tasks import AsyncTask + + task = AsyncTask( + 'audit.tests.audit_task_helper', self.company.pk, 'From worker', sync=True + ) + task.run() + + entry = self.last_update() + + self.assertEqual(entry.changes_dict['description'], ['', 'From worker']) + self.assertEqual( + entry.additional_data, {'source': 'task:audit.tests.audit_task_helper'} + ) + self.assertIsNone(entry.actor) + self.assertIsNotNone(entry.cid) + + # Context is reset afterwards + self.assertIsNone(audit.context.get_source()) + self.assertIsNone(audit.context.get_cid()) + + def test_worker_task_failure(self): + """The audit context is reset even if a worker task fails.""" + from django_q.tasks import AsyncTask + + task = AsyncTask('audit.tests.audit_task_helper', -1, 'Missing', sync=True) + + with contextlib.suppress(Exception): + task.run() + + self.assertIsNone(audit.context.get_source()) + self.assertIsNone(audit.context.get_cid()) + + +class AuditDisabledTest(InvenTreeAPITestCase): + """No audit entries are recorded (via any write path) when auditing is disabled. + + Each path is tested both with the AUDIT_LOG_ENABLED setting disabled, + and within the django-auditlog disable_auditlog() context. + """ + + roles = ['part.add', 'part.change', 'part.view', 'purchase_order.change'] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + from common.models import ParameterTemplate + + super().setUpTestData() + + cls.company = Company.objects.create(name='Disabled Company', is_supplier=True) + cls.part = Part.objects.create(name='Disabled Part', description='A part') + cls.template = ParameterTemplate.objects.create(name='Disabled Template') + + @contextlib.contextmanager + def setting_disabled(self): + """Disable auditing via the global setting.""" + set_global_setting('AUDIT_LOG_ENABLED', False) + + try: + yield + finally: + set_global_setting('AUDIT_LOG_ENABLED', True) + + def check_disabled(self, operation): + """Check that the operation is recorded when enabled - and not when disabled.""" + from auditlog.context import disable_auditlog + + for name, context in [ + ('setting', self.setting_disabled), + ('context', disable_auditlog), + ]: + with self.subTest(disabled_by=name): + n = audited_entries().count() + + with context(): + operation() + + self.assertEqual(audited_entries().count(), n) + + # Sanity check: the same operation *is* recorded when enabled + n = audited_entries().count() + operation() + self.assertGreater(audited_entries().count(), n) + + def test_create_update_delete(self): + """Model create / update / delete operations.""" + counter = iter(range(100)) + + def create(): + Company.objects.create(name=f'New {next(counter)}') + + def update(): + self.company.description = f'Description {next(counter)}' + self.company.save() + + def delete(): + Company.objects.create(name=f'Delete {next(counter)}').delete() + + for operation in [create, update, delete]: + with self.subTest(operation=operation.__name__): + self.check_disabled(operation) + + def test_child_model(self): + """Changes to child models (linked to a parent).""" + from company.models import Address + + counter = iter(range(100)) + + self.check_disabled( + lambda: Address.objects.create( + company=self.company, title=f'Address {next(counter)}', line1='1' + ) + ) + + def test_expression_update(self): + """Deferred (F() expression) updates.""" + from django.db.models import F + + from build.models import Build + + build = Build.objects.create( + part=Part.objects.create( + name='Assembly', description='An assembly', assembly=True + ), + reference='BO-9901', + quantity=10, + ) + + def update(): + build.priority = F('priority') + 1 + build.save(update_fields=['priority']) + build.refresh_from_db() + + self.check_disabled(update) + + def test_audited_update(self): + """The audited_update() helper.""" + from audit.helpers import audited_update + + counter = iter(range(100)) + + self.check_disabled( + lambda: audited_update( + Company.objects.filter(pk=self.company.pk), + description=f'Update {next(counter)}', + ) + ) + + def test_audited_bulk_update(self): + """The audited_bulk_update() helper.""" + from audit.helpers import audited_bulk_update + + counter = iter(range(100)) + + def update(): + self.company.description = f'Bulk {next(counter)}' + audited_bulk_update(Company, [self.company], ['description']) + + self.check_disabled(update) + + def test_audited_bulk_create(self): + """The audited_bulk_create() helper.""" + from audit.helpers import audited_bulk_create + from common.models import Parameter + + counter = iter(range(100)) + + self.check_disabled( + lambda: audited_bulk_create( + Parameter, + [ + Parameter( + model_type=Part.get_content_type(), + model_id=Part.objects.create( + name=f'P{next(counter)}', description='P' + ).pk, + template=self.template, + data='X', + ) + ], + ) + ) + + def test_api(self): + """API requests (including batched bulk creation).""" + counter = iter(range(100)) + + def update(): + self.patch( + reverse('api-company-detail', kwargs={'pk': self.company.pk}), + {'description': f'API {next(counter)}'}, + ) + + def bulk_create(): + parts = [ + Part.objects.create(name=f'API {next(counter)}', description='P') + for _ in range(2) + ] + + self.post( + reverse('api-parameter-list'), + [ + { + 'model_type': 'part', + 'model_id': part.pk, + 'template': self.template.pk, + 'data': 'Y', + } + for part in parts + ], + format='json', + ) + + for operation in [update, bulk_create]: + with self.subTest(operation=operation.__name__): + # Note: disable_auditlog() is not propagated to the request thread, + # so only the global setting is tested here + n = audited_entries().count() + + with self.setting_disabled(): + operation() + + self.assertEqual(audited_entries().count(), n) + + operation() + self.assertGreater(audited_entries().count(), n) + + +class AuditRetentionTest(InvenTreeAPITestCase): + """Audit entries are retained when related objects are removed.""" + + roles = ['purchase_order.change', 'purchase_order.view'] + + def test_stale_parent_content_type(self): + """Removing a stale (parent) content type does not delete child entries.""" + from django.core.management import call_command + + company = Company.objects.create(name='Child Company') + entry = AuditLogEntry.objects.get_for_object(company).get() + + stale = ContentType.objects.create(app_label='removed_app', model='removed') + + entry.parent_content_type = stale + entry.parent_object_pk = '1' + entry.save() + + call_command( + 'remove_stale_contenttypes', + '--include-stale-apps', + '--no-input', + verbosity=0, + ) + + self.assertFalse(ContentType.objects.filter(pk=stale.pk).exists()) + + entry.refresh_from_db() + self.assertIsNone(entry.parent_content_type) + + def test_deleted_user(self): + """The username of the actor is retained if the user is deleted.""" + user = get_user_model().objects.create_user( + username='leaver', password='password', is_staff=True + ) + self.client.force_login(user) + + company = Company.objects.create(name='Edited Company', is_supplier=True) + + # Grant the user permission to edit the company + for group in self.user.groups.all(): + user.groups.add(group) + + self.patch( + reverse('api-company-detail', kwargs={'pk': company.pk}), + {'description': 'Edited by leaver'}, + ) + + entry = ( + AuditLogEntry.objects + .get_for_object(company) + .filter(action=AuditLogEntry.Action.UPDATE) + .get() + ) + + self.assertEqual(entry.actor, user) + self.assertEqual(entry.actor_username, 'leaver') + + user.delete() + entry.refresh_from_db() + + self.assertIsNone(entry.actor) + self.assertEqual(entry.actor_username, 'leaver') + + # The username is provided via the API + self.client.force_login(self.user) + url = reverse('api-audit-log-detail', kwargs={'pk': entry.pk}) + + data = self.get(url).data + self.assertIsNone(data['actor']) + self.assertEqual(data['actor_username'], 'leaver') diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index e8c0bcc4f0..02ee6b91f5 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -84,6 +84,7 @@ class BuildReportContext(report.mixins.BaseReportContext, TypedDict): class Build( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.PluginValidationMixin, report.mixins.InvenTreeReportMixin, InvenTree.models.InvenTreeParameterMixin, diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index 2bd0b33abc..9d954a4d1b 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -2693,7 +2693,7 @@ class BuildConsumeTest(BuildAPITest): expected_code=201, benchmark=True, max_query_count=180, - max_query_time=2.5, + max_query_time=4.5, ) build.refresh_from_db() diff --git a/src/backend/InvenTree/build/test_audit.py b/src/backend/InvenTree/build/test_audit.py new file mode 100644 index 0000000000..d44ed1f269 --- /dev/null +++ b/src/backend/InvenTree/build/test_audit.py @@ -0,0 +1,154 @@ +"""Audit log tests for the Build model.""" + +from django.db.models import F +from django.urls import reverse + +from audit.models import AuditLogEntry +from build.models import Build +from build.status_codes import BuildStatus +from build.test_build import BuildTestBase +from InvenTree.unit_test import InvenTreeAPITestCase + +ACTION = AuditLogEntry.Action + + +def build_entries(build_pk, **filters): + """Return audit entries recorded against a Build (by PK).""" + return AuditLogEntry.objects.filter( + content_type=Build.get_content_type(), object_pk=str(build_pk), **filters + ) + + +class BuildAuditTest(BuildTestBase): + """Tests for audit history of Build objects.""" + + def updates(self): + """Return UPDATE entries for the test build (oldest first).""" + return build_entries(self.build.pk, action=ACTION.UPDATE).order_by('pk') + + def test_create(self): + """Creating a build order is recorded.""" + entry = build_entries(self.build.pk, action=ACTION.CREATE).get() + + self.assertEqual(entry.changes_dict['reference'][1], self.build.reference) + self.assertEqual(entry.object_repr, self.build.reference) + + # Derived / tree fields are not recorded + for field in ['reference_int', 'lft', 'rght', 'tree_id', 'level']: + self.assertNotIn(field, entry.changes_dict) + + def test_status_change(self): + """Status transitions (e.g. issuing the build) are recorded.""" + self.build.issue_build() + + entry = self.updates().last() + + self.assertEqual( + entry.changes_dict['status'], + [BuildStatus.PENDING.value, BuildStatus.PRODUCTION.value], + ) + + def test_complete_output(self): + """The 'completed' quantity (updated via an F() expression) is recorded as a number.""" + self.build.issue_build() + + completed = self.build.completed + + self.build.complete_build_output(self.output_1, None) + self.build.refresh_from_db() + + self.assertEqual(self.build.completed, completed + self.output_1.quantity) + + [entry] = [e for e in self.updates() if 'completed' in e.changes_dict] + + self.assertEqual( + entry.changes_dict['completed'], [completed, self.build.completed] + ) + self.assertNotIn('F(', str(entry.changes)) + + def test_expression_update(self): + """Saving any field as an F() expression records the resolved value.""" + self.build.priority = 5 + self.build.save() + + self.build.priority = F('priority') + 3 + self.build.save(update_fields=['priority']) + + entry = self.updates().last() + self.assertEqual(entry.changes_dict, {'priority': [5, 8]}) + + # An expression which does not change the value is not recorded + n = self.updates().count() + + self.build.priority = F('priority') + 0 + self.build.save(update_fields=['priority']) + + self.assertEqual(self.updates().count(), n) + + def test_failed_save_not_recorded(self): + """A deferred (expression) entry from a failed save is not attached to a later save.""" + from django.core.exceptions import FieldError + from django.db import transaction + + self.build.priority = F('not_a_field') + 1 + + with self.assertRaises(FieldError), transaction.atomic(): + self.build.save(update_fields=['priority']) + + # Subsequent save of an unrelated field + self.build.refresh_from_db() + self.build.title = 'New title' + self.build.save() + + entry = self.updates().last() + self.assertEqual(list(entry.changes_dict.keys()), ['title']) + + def test_delete_reparents_children(self): + """Deleting a build re-parents its child builds - and the change is recorded.""" + child = Build.objects.create( + part=self.assembly, quantity=1, reference='BO-9001', parent=self.build + ) + + grandchild = Build.objects.create( + part=self.assembly, quantity=1, reference='BO-9002', parent=child + ) + + child_pk = child.pk + child.delete() + + grandchild.refresh_from_db() + self.assertEqual(grandchild.parent, self.build) + + entry = build_entries(grandchild.pk, action=ACTION.UPDATE).get() + self.assertEqual(entry.changes_dict['parent'], [child_pk, self.build.pk]) + + +class BuildAuditAPITest(InvenTreeAPITestCase): + """Tests for build audit history via the API.""" + + fixtures = ['category', 'part', 'location', 'bom', 'build', 'build_line', 'stock'] + + roles = ['build.view', 'build.change'] + + def test_edit_via_api(self): + """Edits made via the API are recorded against the user, and shown in the history.""" + build = Build.objects.get(pk=1) + + self.patch( + reverse('api-build-detail', kwargs={'pk': build.pk}), + {'title': 'Updated title', 'priority': 7}, + ) + + entry = build_entries(build.pk, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['title'][1], 'Updated title') + self.assertEqual(entry.changes_dict['priority'][1], 7) + + history = self.get( + reverse('api-audit-log-list'), + {'model_type': 'build.build', 'model_id': build.pk}, + ).data + + self.assertEqual(len(history), 1) + self.assertEqual(history[0]['model_label'], 'Build Order') diff --git a/src/backend/InvenTree/common/filters.py b/src/backend/InvenTree/common/filters.py index 7013d9d303..7f7938d4bd 100644 --- a/src/backend/InvenTree/common/filters.py +++ b/src/backend/InvenTree/common/filters.py @@ -45,10 +45,12 @@ def determine_content_type(content_type: str | int | None) -> ContentType | None # First, try to resolve the content type via a PK value try: content_type_id = int(content_type) - ct = ContentType.objects.get_for_id(content_type_id) + return ContentType.objects.get_for_id(content_type_id) except (ValueError, ContentType.DoesNotExist): ct = None + content_type = str(content_type) + if len(content_type.split('.')) == 2: # Next, try to resolve the content type via app_label.model_name try: diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 9784361e5f..8d60456de3 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -151,7 +151,9 @@ class UpdatedUserMixin(models.Model): ) -class ProjectCode(InvenTree.models.InvenTreeMetadataModel): +class ProjectCode( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeMetadataModel +): """A ProjectCode is a unique identifier for a project.""" IMPORT_ID_FIELDS = ['code'] @@ -246,7 +248,18 @@ class BaseInvenTreeSetting(UpdatedUserMixin, models.Model): # Execute before_save action self._call_settings_function('before_save', args, kwargs) - super().save() + # Values are stored as strings - convert the (cleaned) value for the database write, + # so that the audit log compares like with like (e.g. 'True' vs True). + # The cleaned (native) value is restored afterwards, as callers may rely on it + value = self.value + + if value is not None and not isinstance(value, str): + self.value = str(value) + + try: + super().save() + finally: + self.value = value # Update this setting in the cache after it was saved so a pk exists if do_cache: @@ -652,6 +665,9 @@ class BaseInvenTreeSetting(UpdatedUserMixin, models.Model): setting = cls(key=key, value=default_value, **extra_fields) + # Creating a setting with its default value is not a user change + setting.audit_skip = True + try: # Wrap this statement in "atomic", so it can be rolled back if it fails with transaction.atomic(): @@ -1258,13 +1274,44 @@ class BaseInvenTreeSetting(UpdatedUserMixin, models.Model): return self.__class__.is_required(self.key, **self.get_filters_for_instance()) -class InvenTreeSetting(BaseInvenTreeSetting): +class InvenTreeSetting(InvenTree.models.InvenTreeAuditMixin, BaseInvenTreeSetting): """An InvenTreeSetting object is a key:value pair used for storing single values (e.g. one-off settings values). The class provides a way of retrieving the value for a particular key, even if that key does not exist. """ + # Only the setting key and value are recorded in the audit log + # (e.g. 'updated_by' is redundant with the audit entry actor) + AUDIT_INCLUDE_FIELDS = ('key', 'value') + + # Settings which are written automatically by the system (not by users) + AUDIT_IGNORE_KEYS = ('SERVER_RESTART_REQUIRED',) + + def __str__(self): + """Return the setting key.""" + return str(self.key) + + def should_audit(self) -> bool: + """Do not record changes to settings which are written by the system. + + - Internal settings (prefixed with '_') are written automatically, + e.g. by every scheduled task run + - Settings which are created automatically (with the default value) when first accessed + """ + if getattr(self, 'audit_skip', False): + return False + + return not (str(self.key).startswith('_') or self.key in self.AUDIT_IGNORE_KEYS) + + def audit_always(self) -> bool: + """Changes to the audit log settings are always recorded (e.g. disabling the audit log).""" + return str(self.key).startswith('AUDIT_LOG_') + + def is_audit_masked(self) -> bool: + """Protected setting values are never recorded.""" + return self.protected + from common.setting.system import SYSTEM_SETTINGS SETTINGS: dict[str, InvenTreeSettingsKeyType] = SYSTEM_SETTINGS @@ -1417,6 +1464,10 @@ class PriceBreak(MetaMixin): help_text=_('Unit price at specified quantity'), ) + def __str__(self): + """Return a string representation of this price break (e.g. 'R_10K - $1.50 @ 10').""" + return f'{self.part} - {self.price} @ {InvenTree.helpers.decimal2string(self.quantity)}' + def convert_to(self, currency_code: str, raise_error: bool = False): """Convert the unit-price at this price break to the specified currency code. @@ -1815,7 +1866,7 @@ class NewsFeedEntry(models.Model): ) -class CustomUnit(models.Model): +class CustomUnit(InvenTree.models.InvenTreeAuditMixin, models.Model): """Model for storing custom physical unit definitions. Model Attributes: @@ -1832,6 +1883,10 @@ class CustomUnit(models.Model): verbose_name = _('Custom Unit') + def __str__(self): + """Return a string representation of this CustomUnit.""" + return self.name + def fmt_string(self): """Construct a unit definition string e.g. 'dog_year = 52 * day = dy'.""" fmt = f'{self.name} = {self.definition}' @@ -1956,6 +2011,7 @@ def rename_attachment(instance, filename: str): class Attachment( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeTagsMixin, InvenTree.models.InvenTreeModel, @@ -1981,6 +2037,12 @@ class Attachment( THUMBNAIL_SIZE = 256 + # Derived values, updated automatically after upload (and by the thumbnail task) + AUDIT_EXCLUDE_FIELDS = ('thumbnail', 'is_image', 'file_size') + + # Access to an attachment is determined by the object it is linked to + AUDIT_REQUIRE_PARENT_PERMISSION = True + class Meta: """Metaclass options.""" @@ -2060,6 +2122,23 @@ class Attachment( common.tasks.rebuild_attachment, self.pk, group='attachments' ) + def get_audit_parent_reference(self): + """Audit entries for an attachment are included in the history of the linked object. + + The linked object is identified without being fetched, so that the reference + is still recorded when the attachment is deleted along with its object. + """ + from django.contrib.contenttypes.models import ContentType + + try: + model_class = common.validators.attachment_model_class_from_label( + self.model_type + ) + except ValidationError: + return None + + return ContentType.objects.get_for_model(model_class), str(self.model_id) + def clean_svg(self, field): """Sanitize SVG file before saving.""" cleaned = sanitize_svg(field.file.read()) @@ -2632,7 +2711,9 @@ class SelectionListEntry(models.Model): class ParameterTemplate( - InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel + InvenTree.models.InvenTreeAuditMixin, + InvenTree.models.MetadataMixin, + InvenTree.models.InvenTreeModel, ): """A ParameterTemplate provides a template for defining parameter values against various models. @@ -2853,7 +2934,10 @@ def post_save_parameter_template(sender, instance, created, **kwargs): class Parameter( - UpdatedUserMixin, InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel + InvenTree.models.InvenTreeAuditMixin, + UpdatedUserMixin, + InvenTree.models.MetadataMixin, + InvenTree.models.InvenTreeModel, ): """Class which represents a parameter value assigned to a particular model instance. @@ -2868,6 +2952,16 @@ class Parameter( updated_by: User who last updated this parameter """ + AUDIT_EXCLUDE_FIELDS = ( + # Derived from 'data' + 'data_numeric', + # Redundant with the audit entry actor + 'updated_by', + ) + + # Access to a parameter is determined by the object it is linked to + AUDIT_REQUIRE_PARENT_PERMISSION = True + class Meta: """Meta options for Parameter model.""" @@ -2891,6 +2985,22 @@ class Parameter( """Return the API URL associated with the Parameter model.""" return reverse('api-parameter-list') + def __str__(self): + """Return a string representation of this Parameter (e.g. 'Length: 10 mm').""" + value = f'{self.template.name}: {self.data}' + + if self.template.units: + value += f' {self.template.units}' + + return value + + def get_audit_parent_reference(self): + """Audit entries for a parameter are included in the history of the linked object.""" + if self.model_type_id is None: + return None + + return ContentType.objects.get_for_id(self.model_type_id), str(self.model_id) + def save(self, *args, **kwargs): """Custom save method for Parameter model. diff --git a/src/backend/InvenTree/common/setting/system.py b/src/backend/InvenTree/common/setting/system.py index 6a924fa93d..30c39d68fe 100644 --- a/src/backend/InvenTree/common/setting/system.py +++ b/src/backend/InvenTree/common/setting/system.py @@ -1334,6 +1334,37 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'units': _('days'), 'validator': [int, MinValueValidator(30)], }, + 'AUDIT_LOG_ENABLED': { + 'name': _('Enable Audit Log'), + 'description': _('Record a history of changes made to supported models'), + 'default': True, + 'validator': bool, + }, + 'AUDIT_LOG_DELETE_OLD_ENTRIES': { + 'name': _('Delete Old Audit Log Entries'), + 'description': _( + 'Delete audit log entries older than the specified number of days' + ), + 'default': False, + 'validator': bool, + }, + 'AUDIT_LOG_DELETE_KEEP_SUMMARY': { + 'name': _('Retain Audit Log Summary'), + 'description': _( + 'When deleting old audit log entries, always keep the creation entry and the most recent entry for each item' + ), + 'default': True, + 'validator': bool, + }, + 'AUDIT_LOG_DELETE_DAYS': { + 'name': _('Audit Log Deletion Interval'), + 'description': _( + 'Audit log entries will be deleted after specified number of days' + ), + 'default': 365, + 'units': _('days'), + 'validator': [int, MinValueValidator(7)], + }, 'DISPLAY_FULL_NAMES': { 'name': _('Display Users full names'), 'description': _('Display Users full names instead of usernames'), diff --git a/src/backend/InvenTree/common/setting/user.py b/src/backend/InvenTree/common/setting/user.py index 01e2e9b4af..2cf5c2bff0 100644 --- a/src/backend/InvenTree/common/setting/user.py +++ b/src/backend/InvenTree/common/setting/user.py @@ -249,6 +249,14 @@ USER_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': True, 'validator': bool, }, + 'DISPLAY_HISTORY_TAB': { + 'name': _('Show Change History'), + 'description': _( + 'Display the change history (audit log) panel on detail pages (staff users only)' + ), + 'default': False, + 'validator': bool, + }, 'ENABLE_LAST_BREADCRUMB': { 'name': _('Show Last Breadcrumb'), 'description': _('Show the current page in breadcrumbs'), diff --git a/src/backend/InvenTree/common/test_audit.py b/src/backend/InvenTree/common/test_audit.py new file mode 100644 index 0000000000..9c4b7ae014 --- /dev/null +++ b/src/backend/InvenTree/common/test_audit.py @@ -0,0 +1,822 @@ +"""Audit log tests for the Attachment model.""" + +import uuid + +from django.core.files.base import ContentFile +from django.urls import reverse + +from audit.models import AuditLogEntry +from common.models import Attachment +from company.models import Company +from InvenTree.unit_test import InvenTreeAPITestCase + +ACTION = AuditLogEntry.Action + + +class AttachmentAuditTest(InvenTreeAPITestCase): + """Tests for audit history of Attachment objects.""" + + roles = [ + 'purchase_order.view', + 'purchase_order.add', + 'purchase_order.change', + 'purchase_order.delete', + ] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.company = Company.objects.create(name='Attachment Co', is_supplier=True) + + def upload(self, company=None, filename=None, **data): + """Upload a file attachment against a company, via the API.""" + company = company or self.company + filename = filename or f'audit_{uuid.uuid4().hex[:8]}.txt' + + response = self.post( + reverse('api-attachment-list'), + data={ + 'model_type': 'company', + 'model_id': company.pk, + 'attachment': ContentFile(b'Hello world', name=filename), + **data, + }, + format='multipart', + expected_code=201, + ) + + attachment = Attachment.objects.get(pk=response.data['pk']) + + # Remove the uploaded file from storage once the test is complete + self.addCleanup( + lambda: ( + attachment.attachment.storage.delete(attachment.attachment.name) + if Attachment.objects.filter(pk=attachment.pk).exists() + else None + ) + ) + + return attachment + + def entries(self, attachment, **filters): + """Return audit entries for an attachment (by PK - which survives deletion).""" + return AuditLogEntry.objects.filter( + content_type=Attachment.get_content_type(), + object_pk=str(attachment if isinstance(attachment, int) else attachment.pk), + **filters, + ) + + def company_history(self, company=None, **params): + """Return the audit history for a company (including attachments).""" + company = company or self.company + + return self.get( + reverse('api-audit-log-list'), + {'model_type': 'company.company', 'model_id': company.pk, **params}, + ).data + + def test_upload(self): + """Uploading an attachment records the filename only, against the linked object.""" + attachment = self.upload(filename='datasheet.txt', comment='Datasheet') + + # Sanity check: the stored path includes the upload directory + self.assertNotEqual(attachment.attachment.name, 'datasheet.txt') + self.assertTrue(attachment.attachment.name.endswith('datasheet.txt')) + + entry = self.entries(attachment, action=ACTION.CREATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['attachment'], [None, 'datasheet.txt']) + self.assertEqual(entry.changes_dict['comment'], [None, 'Datasheet']) + self.assertEqual(entry.object_repr, 'datasheet.txt') + + # Linked to the attached object + self.assertEqual(entry.parent_content_type, Company.get_content_type()) + self.assertEqual(entry.parent_object_pk, str(self.company.pk)) + + # Derived fields are not recorded + for field in ['thumbnail', 'is_image', 'file_size']: + self.assertNotIn(field, entry.changes_dict) + + # The follow-up save (file size) and thumbnail task do not create extra entries + self.assertFalse(self.entries(attachment, action=ACTION.UPDATE).exists()) + + # Shown in the company history + self.assertIn( + ('common.attachment', ACTION.CREATE), + [(e['model_type'], e['action']) for e in self.company_history()], + ) + + def test_lazy_string_value(self): + """Lazy translation strings (e.g. a generated report comment) are recorded as plain strings.""" + from django.utils.translation import gettext_lazy + + self.company.create_attachment( + link='https://example.com/report', comment=gettext_lazy('Generated') + ) + + attachment = Attachment.objects.get(link='https://example.com/report') + + entry = self.entries(attachment, action=ACTION.CREATE).get() + self.assertEqual(entry.changes_dict['comment'], [None, 'Generated']) + + def test_edit_and_rename(self): + """Comment edits and file renames are recorded (filename only).""" + attachment = self.upload(filename='original.txt') + url = reverse('api-attachment-detail', kwargs={'pk': attachment.pk}) + + self.patch(url, {'comment': 'Updated comment'}) + + entry = self.entries(attachment, action=ACTION.UPDATE).get() + self.assertEqual(entry.changes_dict, {'comment': ['', 'Updated comment']}) + + new_name = f'renamed_{uuid.uuid4().hex[:8]}.txt' + self.patch(url, {'filename': new_name}) + + attachment.refresh_from_db() + self.addCleanup( + lambda: attachment.attachment.storage.delete(attachment.attachment.name) + ) + + rename = ( + self + .entries(attachment, action=ACTION.UPDATE) + .filter(changes__has_key='attachment') + .get() + ) + + self.assertEqual(rename.changes_dict['attachment'], ['original.txt', new_name]) + + for value in rename.changes_dict['attachment']: + self.assertNotIn('/', value) + + def test_delete(self): + """Deleted attachments remain in the history of the linked object.""" + attachment = self.upload(filename='obsolete.txt') + pk = attachment.pk + + self.delete(reverse('api-attachment-detail', kwargs={'pk': pk})) + + entry = self.entries(pk, action=ACTION.DELETE).get() + + self.assertEqual(entry.object_repr, 'obsolete.txt') + self.assertEqual(entry.changes_dict['attachment'], ['obsolete.txt', None]) + self.assertEqual(entry.parent_object_pk, str(self.company.pk)) + + self.assertIn( + ('common.attachment', ACTION.DELETE), + [(e['model_type'], e['action']) for e in self.company_history()], + ) + + def test_parent_deleted(self): + """Attachments deleted along with their object retain the parent reference.""" + company = Company.objects.create(name='Temporary Co') + company_pk = company.pk + + attachment = self.upload(company=company, filename='temp.txt') + attachment_pk = attachment.pk + + company.delete() + + entry = self.entries(attachment_pk, action=ACTION.DELETE).get() + self.assertEqual(entry.parent_object_pk, str(company_pk)) + + def test_parent_permission(self): + """Attachment entries require permission to view the linked object.""" + self.upload(filename='private.txt') + + def attachment_entries(): + return [ + e + for e in self.get(reverse('api-audit-log-list')).data + if e['model_type'] == 'common.attachment' + ] + + self.assertEqual(len(attachment_entries()), 1) + + # The Attachment model itself requires no permissions, + # but without access to companies the attachment history is hidden + self.clearRoles() + + self.assertEqual(attachment_entries(), []) + self.assertEqual( + self.get( + reverse('api-audit-log-list'), {'model_type': 'common.attachment'} + ).data, + [], + ) + + entry = self.entries(Attachment.objects.get().pk).first() + self.get( + reverse('api-audit-log-detail', kwargs={'pk': entry.pk}), expected_code=404 + ) + + +class ParameterAuditTest(InvenTreeAPITestCase): + """Tests for audit history of Parameter objects.""" + + roles = ['part.view', 'part.add', 'part.change', 'part.delete'] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + from common.models import ParameterTemplate + from part.models import Part, PartCategory + + super().setUpTestData() + + cls.category = PartCategory.objects.create(name='Resistors') + cls.part = Part.objects.create( + name='R1', description='Resistor', category=cls.category + ) + cls.length = ParameterTemplate.objects.create(name='Length', units='mm') + cls.colour = ParameterTemplate.objects.create(name='Colour') + + def entries(self, **filters): + """Return audit entries for Parameter objects.""" + from common.models import Parameter + + return AuditLogEntry.objects.filter( + content_type=Parameter.get_content_type(), **filters + ) + + def part_history(self, part=None, **params): + """Return the audit history for a part (including parameters).""" + part = part or self.part + + return self.get( + reverse('api-audit-log-list'), + {'model_type': 'part.part', 'model_id': part.pk, **params}, + ).data + + def test_parameter_crud(self): + """Parameter create / update / delete via the API is recorded against the part.""" + from part.models import Part + + response = self.post( + reverse('api-parameter-list'), + { + 'model_type': 'part', + 'model_id': self.part.pk, + 'template': self.length.pk, + 'data': '10', + }, + ) + + pk = response.data['pk'] + url = reverse('api-parameter-detail', kwargs={'pk': pk}) + + self.patch(url, {'data': '12'}) + self.delete(url) + + entries = self.entries(object_pk=str(pk)) + + self.assertEqual( + sorted(entries.values_list('action', flat=True)), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_content_type, Part.get_content_type()) + self.assertEqual(entry.parent_object_pk, str(self.part.pk)) + + # Derived / redundant fields are not recorded + self.assertNotIn('data_numeric', entry.changes_dict) + self.assertNotIn('updated_by', entry.changes_dict) + + update = entries.get(action=ACTION.UPDATE) + self.assertEqual(update.changes_dict, {'data': ['10', '12']}) + self.assertEqual(update.object_repr, 'Length: 12 mm') + + # Shown in the part history (part is not itself audited) + history = self.part_history() + self.assertEqual( + sorted( + e['action'] for e in history if e['model_type'] == 'common.parameter' + ), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + def test_copy_parameters(self): + """Parameters copied in bulk (copy_parameters_from) are recorded.""" + from common.models import Parameter + from part.models import Part + + Parameter.objects.create( + model_type=Part.get_content_type(), + model_id=self.part.pk, + template=self.colour, + data='Blue', + ) + + other = Part.objects.create(name='R2', description='Resistor') + other.copy_parameters_from(self.part) + + copied = Parameter.objects.get(model_id=other.pk, template=self.colour) + + entry = self.entries(object_pk=str(copied.pk), action=ACTION.CREATE).get() + + self.assertEqual(entry.parent_object_pk, str(other.pk)) + self.assertEqual(entry.changes_dict['data'], [None, 'Blue']) + self.assertEqual(entry.object_repr, 'Colour: Blue') + + def test_category_parameters(self): + """Default category parameters (created in bulk) are recorded.""" + from common.models import Parameter + from part.models import Part, PartCategoryParameterTemplate + + PartCategoryParameterTemplate.objects.create( + category=self.category, template=self.length, default_value='5' + ) + + part = Part.objects.create( + name='R3', description='Resistor', category=self.category + ) + part.copy_category_parameters(self.category) + + parameter = Parameter.objects.get(model_id=part.pk, template=self.length) + + entry = self.entries(object_pk=str(parameter.pk), action=ACTION.CREATE).get() + self.assertEqual(entry.parent_object_pk, str(part.pk)) + self.assertEqual(entry.changes_dict['data'], [None, '5']) + + def test_parent_permission(self): + """Parameter entries require permission to view the linked object.""" + from common.models import Parameter + from part.models import Part + + Parameter.objects.create( + model_type=Part.get_content_type(), + model_id=self.part.pk, + template=self.colour, + data='Red', + ) + + def parameter_entries(): + return [ + e + for e in self.get(reverse('api-audit-log-list')).data + if e['model_type'] == 'common.parameter' + ] + + self.assertEqual(len(parameter_entries()), 1) + + self.clearRoles() + + self.assertEqual(parameter_entries(), []) + + def test_bulk_create_without_pk(self): + """Entries are recorded on backends which do not return PKs from bulk_create (e.g. MySQL).""" + from unittest import mock + + from audit.helpers import audited_bulk_create + from common.models import Parameter + from part.models import Part + + original_bulk_create = Parameter.objects.bulk_create + + def bulk_create_without_pk(objs, *args, **kwargs): + """Simulate a database which does not return primary keys.""" + created = original_bulk_create(objs, *args, **kwargs) + + for obj in created: + obj.pk = None + + return created + + objs = [ + Parameter( + model_type=Part.get_content_type(), + model_id=self.part.pk, + template=template, + data=value, + ) + for template, value in [(self.colour, 'Green'), (self.length, '7')] + ] + + with ( + mock.patch( + 'InvenTree.helpers_db.bulk_insert_returns_pks', return_value=False + ), + mock.patch.object( + Parameter.objects, 'bulk_create', side_effect=bulk_create_without_pk + ), + ): + created = audited_bulk_create(Parameter, objs) + + self.assertEqual(len(created), 2) + + for obj, instance in zip(objs, created, strict=True): + # Primary keys are populated on the provided objects + self.assertIsNotNone(obj.pk) + self.assertEqual(obj.pk, instance.pk) + + entry = self.entries(object_pk=str(obj.pk), action=ACTION.CREATE).get() + self.assertEqual(entry.changes_dict['data'], [None, obj.data]) + self.assertEqual(entry.parent_object_pk, str(self.part.pk)) + + def test_copy_preserves_metadata(self): + """Copying parameters (via audited_bulk_create) retains their metadata.""" + from common.models import Parameter + from part.models import Part + + Parameter.objects.create( + model_type=Part.get_content_type(), + model_id=self.part.pk, + template=self.colour, + data='Blue', + metadata={'source': 'datasheet'}, + ) + + other = Part.objects.create(name='R4', description='Resistor') + other.copy_parameters_from(self.part) + + copied = Parameter.objects.get(model_id=other.pk, template=self.colour) + self.assertEqual(copied.metadata, {'source': 'datasheet'}) + + def test_bulk_create_api(self): + """Entries for a bulk API create are written together, with the request context.""" + response = self.post( + reverse('api-parameter-list'), + [ + { + 'model_type': 'part', + 'model_id': self.part.pk, + 'template': template.pk, + 'data': value, + } + for template, value in [(self.length, '10'), (self.colour, 'Red')] + ], + format='json', + ) + + pks = [str(item['pk']) for item in response.data] + entries = self.entries(object_pk__in=pks, action=ACTION.CREATE) + + self.assertEqual(entries.count(), 2) + self.assertEqual(len({entry.cid for entry in entries}), 1) + + for entry in entries: + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.remote_addr, '127.0.0.1') + self.assertEqual(entry.parent_object_pk, str(self.part.pk)) + + def test_bulk_create_api_error(self): + """No entries are written if any item in a bulk API create is invalid.""" + self.post( + reverse('api-parameter-list'), + [ + { + 'model_type': 'part', + 'model_id': self.part.pk, + 'template': self.colour.pk, + 'data': 'Red', + }, + {'model_type': 'part', 'model_id': self.part.pk, 'template': 9999}, + ], + format='json', + expected_code=400, + ) + + self.assertFalse(self.entries().exists()) + + def test_bulk_create_single_insert(self): + """audited_bulk_create() writes all audit entries with a single query.""" + from django.db import connection + from django.test.utils import CaptureQueriesContext + + from audit.helpers import audited_bulk_create + from common.models import Parameter + from part.models import Part + + parts = [ + Part.objects.create(name=f'R{idx}', description='Resistor') + for idx in range(5) + ] + + objs = [ + Parameter( + model_type=Part.get_content_type(), + model_id=part.pk, + template=self.colour, + data='Red', + ) + for part in parts + ] + + with CaptureQueriesContext(connection) as context: + audited_bulk_create(Parameter, objs) + + # Table name quoting differs between backends (e.g. backticks for MySQL) + table = AuditLogEntry._meta.db_table + + inserts = [ + q + for q in context.captured_queries + if q['sql'].startswith('INSERT INTO') and table in q['sql'] + ] + + self.assertEqual(len(inserts), 1) + self.assertEqual(self.entries(action=ACTION.CREATE).count(), 5) + + def test_requires_metadata_field(self): + """audited_bulk_create() rejects models without a 'metadata' field.""" + from audit.helpers import audited_bulk_create + from company.models import Address + + with self.assertRaises(TypeError): + audited_bulk_create(Address, []) + + +class ConfigurationAuditTest(InvenTreeAPITestCase): + """Tests for audit history of ParameterTemplate / ProjectCode / CustomUnit objects.""" + + roles = ['part.view', 'part.add', 'part.change', 'part.delete'] + + def entries(self, model, pk, **filters): + """Return audit entries for a given object (by PK - which survives deletion).""" + from django.contrib.contenttypes.models import ContentType + + return AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(model), + object_pk=str(pk), + **filters, + ) + + def history(self, model_type, pk): + """Return the audit history for an object, with change details.""" + return self.get( + reverse('api-audit-log-list'), + {'model_type': model_type, 'model_id': pk, 'changes_detail': True}, + ).data + + def check_crud(self, model, list_url, detail_name, create, update): + """Create, update and delete an object via the API, and check the audit trail. + + Returns the UPDATE entry. + """ + response = self.post(reverse(list_url), create) + pk = response.data['pk'] + + url = reverse(detail_name, kwargs={'pk': pk}) + self.patch(url, update) + self.delete(url) + + entries = self.entries(model, pk) + + self.assertEqual( + sorted(entries.values_list('action', flat=True)), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry.actor, self.user) + self.assertIsNone(entry.parent_content_type) + self.assertNotIn('metadata', entry.changes_dict) + + return entries.get(action=ACTION.UPDATE) + + def test_parameter_template(self): + """ParameterTemplate changes are recorded (including choice field labels).""" + from common.models import ParameterTemplate + + update = self.check_crud( + ParameterTemplate, + 'api-parameter-template-list', + 'api-parameter-template-detail', + {'name': 'Resistance', 'units': 'ohm', 'description': 'Resistance'}, + {'units': 'kohm', 'unique': ParameterTemplate.UniqueOptions.GLOBAL}, + ) + + self.assertEqual(update.changes_dict['units'], ['ohm', 'kohm']) + self.assertEqual( + update.changes_dict['unique'], + [ + ParameterTemplate.UniqueOptions.NONE, + ParameterTemplate.UniqueOptions.GLOBAL, + ], + ) + self.assertEqual(update.object_repr, 'Resistance (kohm)') + + def test_parameter_template_display(self): + """Choice field values are shown with their labels in the API.""" + from common.models import ParameterTemplate + + template = ParameterTemplate.objects.create(name='Colour') + template.unique = ParameterTemplate.UniqueOptions.MODEL_TYPE + template.save() + + [entry] = [ + e + for e in self.history('common.parametertemplate', template.pk) + if e['action'] == ACTION.UPDATE + ] + [row] = entry['changes_detail'] + + self.assertEqual(row['field'], 'unique') + self.assertEqual( + row['new_display'], str(ParameterTemplate.UniqueOptions.MODEL_TYPE.label) + ) + + def test_project_code(self): + """ProjectCode changes are recorded (including the responsible owner).""" + from common.models import ProjectCode + from users.models import Owner + + owner = Owner.get_owner(self.user) + + update = self.check_crud( + ProjectCode, + 'api-project-code-list', + 'api-project-code-detail', + {'code': 'PRJ-001', 'description': 'Project one'}, + {'description': 'Project 1', 'responsible': owner.pk, 'active': False}, + ) + + self.assertEqual( + update.changes_dict['description'], ['Project one', 'Project 1'] + ) + self.assertEqual(update.changes_dict['responsible'], [None, owner.pk]) + self.assertEqual(update.changes_dict['active'], [True, False]) + self.assertEqual(update.object_repr, 'PRJ-001') + + def test_custom_unit(self): + """CustomUnit changes are recorded, and the unit registry still reloads.""" + from common.models import CustomUnit + from InvenTree.conversion import convert_physical_value + + update = self.check_crud( + CustomUnit, + 'api-custom-unit-list', + 'api-custom-unit-detail', + {'name': 'furlong', 'definition': '220 yard', 'symbol': 'fur'}, + {'definition': '201.168 meter'}, + ) + + self.assertEqual( + update.changes_dict['definition'], ['220 yard', '201.168 meter'] + ) + self.assertEqual(update.object_repr, 'furlong') + + # Registry reload (post_save receiver) is unaffected by auditing + CustomUnit.objects.create(name='smoot', definition='1.7018 meter') + self.assertAlmostEqual( + float(convert_physical_value('1 smoot', 'meter')), 1.7018, places=4 + ) + + +class GlobalSettingAuditTest(InvenTreeAPITestCase): + """Audit tests for global settings.""" + + roles = 'all' + + def entries(self, **filters): + """Return audit entries for global settings.""" + from django.contrib.contenttypes.models import ContentType + + from common.models import InvenTreeSetting + + return AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(InvenTreeSetting), **filters + ) + + def set_value(self, key, value): + """Change a global setting via the API.""" + self.patch( + reverse('api-global-setting-detail', kwargs={'key': key}), {'value': value} + ) + + def test_setting_change(self): + """Changes to a global setting are recorded (key and value only).""" + self.set_value('INVENTREE_INSTANCE', 'Audit Instance') + + entry = self.entries(object_repr='INVENTREE_INSTANCE').order_by('pk').last() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['value'][1], 'Audit Instance') + + for field in entry.changes_dict: + self.assertIn(field, ['key', 'value']) + + def test_unchanged_value(self): + """Saving a setting with an unchanged value is not recorded.""" + self.set_value('AUDIT_LOG_DELETE_OLD_ENTRIES', True) + + n = self.entries().count() + self.set_value('AUDIT_LOG_DELETE_OLD_ENTRIES', True) + + self.assertEqual(self.entries().count(), n) + + def test_system_settings_not_recorded(self): + """Settings which are written automatically by the system are not recorded.""" + from unittest import mock + + from common.models import InvenTreeSetting + from common.settings import set_global_setting + + n = self.entries().count() + + # Internal settings (e.g. written by every scheduled task run) + set_global_setting('_TEST_TASK_ATTEMPT', 'now', change_user=None) + + # Changing a setting which requires a restart also sets 'SERVER_RESTART_REQUIRED' + # Note: A setting which is not overridden by the environment is used here + # (e.g. PLUGIN_ON_STARTUP is set via environment variable in the docker image) + def requires_restart(setting): + return setting.key == 'INVENTREE_INSTANCE' + + with mock.patch.object( + InvenTreeSetting, + 'requires_restart', + autospec=True, + side_effect=requires_restart, + ): + self.assertFalse(InvenTreeSetting.get_setting('SERVER_RESTART_REQUIRED')) + self.set_value('INVENTREE_INSTANCE', 'Restart Instance') + self.assertTrue(InvenTreeSetting.get_setting('SERVER_RESTART_REQUIRED')) + + keys = list( + self.entries().order_by('pk')[n:].values_list('object_repr', flat=True) + ) + + self.assertEqual(keys, ['INVENTREE_INSTANCE']) + + def test_protected_value(self): + """The values of protected settings are never recorded.""" + from unittest import mock + + from audit.models import MASKED_VALUE + from common.models import InvenTreeSetting + + with mock.patch.object(InvenTreeSetting, 'is_protected', return_value=True): + self.set_value('INVENTREE_INSTANCE', 'secret-value') + + entry = self.entries(object_repr='INVENTREE_INSTANCE').order_by('pk').last() + + self.assertEqual(entry.changes_dict['value'][1], MASKED_VALUE) + + for field in ['changes', 'changes_text', 'additional_data', 'object_repr']: + self.assertNotIn('secret-value', str(getattr(entry, field))) + + def test_disable_audit_log(self): + """Disabling (and re-enabling) the audit log is always recorded.""" + self.set_value('AUDIT_LOG_ENABLED', False) + + entry = self.entries(object_repr='AUDIT_LOG_ENABLED').order_by('pk').last() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['value'], ['True', 'False']) + + # Other changes are no longer recorded + n = AuditLogEntry.objects.count() + self.set_value('INVENTREE_INSTANCE', 'Not recorded') + self.set_value('AUDIT_LOG_DELETE_DAYS', 7) + Company.objects.create(name='Not recorded') + + # ...except for changes to the audit log settings themselves + self.assertEqual(AuditLogEntry.objects.count(), n + 1) + self.assertEqual( + AuditLogEntry.objects.order_by('pk').last().object_repr, + 'AUDIT_LOG_DELETE_DAYS', + ) + + self.set_value('AUDIT_LOG_ENABLED', True) + + entry = self.entries(object_repr='AUDIT_LOG_ENABLED').order_by('pk').last() + self.assertEqual(entry.changes_dict['value'], ['False', 'True']) + + def test_staff_only(self): + """Setting history is only visible to staff users.""" + self.set_value('INVENTREE_INSTANCE', 'Staff only') + + url = reverse('api-audit-log-list') + params = {'model_type': 'common.inventreesetting'} + + self.assertGreater(len(self.get(url, params).data), 0) + + # Staff users without the 'admin' role can still view settings history + self.user.is_superuser = False + self.user.save() + self.clearRoles() + + self.assertGreater(len(self.get(url, params).data), 0) + + def test_default_value_not_recorded(self): + """Settings created automatically (with their default value) are not recorded.""" + from common.models import InvenTreeSetting + from common.settings import get_global_setting + + InvenTreeSetting.objects.filter(key='AUDIT_LOG_DELETE_DAYS').delete() + + n = self.entries().count() + + # Reading the setting creates it (with the default value) + get_global_setting('AUDIT_LOG_DELETE_DAYS') + self.assertTrue( + InvenTreeSetting.objects.filter(key='AUDIT_LOG_DELETE_DAYS').exists() + ) + + self.assertEqual(self.entries().count(), n) diff --git a/src/backend/InvenTree/company/models.py b/src/backend/InvenTree/company/models.py index 3efe6d844a..e9cbc25213 100644 --- a/src/backend/InvenTree/company/models.py +++ b/src/backend/InvenTree/company/models.py @@ -26,6 +26,7 @@ import InvenTree.models import InvenTree.ready import InvenTree.validators import report.mixins +from audit.helpers import audited_update from common.currency import currency_code_default from common.settings import get_global_setting from InvenTree.fields import InvenTreeURLField, RoundingDecimalField @@ -86,6 +87,7 @@ def default_internal_company() -> Optional[int]: class Company( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeParameterMixin, InvenTree.models.InvenTreeNoteMixin, @@ -337,7 +339,9 @@ class Company( ).distinct() -class Contact(InvenTree.models.InvenTreeMetadataModel): +class Contact( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeMetadataModel +): """A Contact represents a person who works at a particular company. A Company may have zero or more associated Contact objects. Attributes: @@ -350,6 +354,9 @@ class Contact(InvenTree.models.InvenTreeMetadataModel): IMPORT_ID_FIELDS = ['name', 'email'] + # Changes to a contact are included in the history of the company + AUDIT_PARENT_FIELD = 'company' + class Meta: """Metaclass defines extra model options.""" @@ -372,8 +379,12 @@ class Contact(InvenTree.models.InvenTreeMetadataModel): role = models.CharField(max_length=100, blank=True) + def __str__(self): + """Return a string representation of this Contact.""" + return self.name -class Address(InvenTree.models.InvenTreeModel): + +class Address(InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeModel): """An address represents a physical location where the company is located. It is possible for a company to have multiple locations. Attributes: @@ -391,6 +402,9 @@ class Address(InvenTree.models.InvenTreeModel): link: External link to additional address information """ + # Changes to an address are included in the history of the company + AUDIT_PARENT_FIELD = 'company' + class Meta: """Metaclass defines extra model options.""" @@ -435,9 +449,13 @@ class Address(InvenTree.models.InvenTreeModel): # Once this address is saved, check others if self.primary: - Address.objects.filter(company=self.company).exclude(pk=self.pk).filter( - primary=True - ).update(primary=False) + audited_update( + Address.objects + .filter(company=self.company) + .exclude(pk=self.pk) + .filter(primary=True), + primary=False, + ) @staticmethod def get_api_url(): @@ -543,6 +561,7 @@ class Address(InvenTree.models.InvenTreeModel): class ManufacturerPart( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeParameterMixin, InvenTree.models.InvenTreeBarcodeMixin, @@ -562,6 +581,9 @@ class ManufacturerPart( IMPORT_ID_FIELDS = ['MPN'] + # Changes to a manufacturer part are included in the history of the manufacturer + AUDIT_PARENT_FIELD = 'manufacturer' + class Meta: """Metaclass defines extra model options.""" @@ -658,6 +680,7 @@ class ManufacturerPart( class SupplierPart( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeParameterMixin, InvenTree.models.MetadataMixin, @@ -689,6 +712,17 @@ class SupplierPart( IMPORT_ID_FIELDS = ['SKU'] + # Changes to a supplier part are included in the history of the supplier + AUDIT_PARENT_FIELD = 'supplier' + + AUDIT_EXCLUDE_FIELDS = ( + # Supplier-provided stock levels (e.g. updated by supplier plugins) are not user edits + 'available', + 'availability_updated', + # Derived from 'pack_quantity' + 'pack_quantity_native', + ) + class Meta: """Metaclass defines extra model options.""" @@ -810,9 +844,13 @@ class SupplierPart( # Once this SupplierPart is saved, check others if self.primary: - SupplierPart.objects.filter(part=self.part).exclude(pk=self.pk).filter( - primary=True - ).update(primary=False) + audited_update( + SupplierPart.objects + .filter(part=self.part) + .exclude(pk=self.pk) + .filter(primary=True), + primary=False, + ) part = models.ForeignKey( 'part.Part', @@ -1055,7 +1093,9 @@ class SupplierPart( return s -class SupplierPriceBreak(common.models.PriceBreak): +class SupplierPriceBreak( + InvenTree.models.InvenTreeAuditMixin, common.models.PriceBreak +): """Represents a quantity price break for a SupplierPart. - Suppliers can offer discounts at larger quantities @@ -1069,6 +1109,9 @@ class SupplierPriceBreak(common.models.PriceBreak): currency: Reference to the currency of this pricebreak (leave empty for base currency) """ + # Changes to a price break are included in the history of the supplier part + AUDIT_PARENT_FIELD = 'part' + class Meta: """Metaclass defines extra model options.""" diff --git a/src/backend/InvenTree/company/test_audit.py b/src/backend/InvenTree/company/test_audit.py new file mode 100644 index 0000000000..bf706f6117 --- /dev/null +++ b/src/backend/InvenTree/company/test_audit.py @@ -0,0 +1,526 @@ +"""Audit log tests for the Company, Contact and Address models.""" + +from django.db.models import F +from django.urls import reverse + +from auditlog.context import disable_auditlog + +from audit.helpers import audited_update +from audit.models import AuditLogEntry +from common.settings import set_global_setting +from company.models import ( + Address, + Company, + Contact, + ManufacturerPart, + SupplierPart, + SupplierPriceBreak, +) +from InvenTree.unit_test import InvenTreeAPITestCase +from part.models import Part + +ACTION = AuditLogEntry.Action + + +class CompanyAuditTest(InvenTreeAPITestCase): + """Tests for audit history of Company / Contact / Address models.""" + + roles = [ + 'purchase_order.view', + 'purchase_order.add', + 'purchase_order.change', + 'purchase_order.delete', + ] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.company = Company.objects.create( + name='Acme Widgets', description='Widget supplier', is_supplier=True + ) + + def history(self, company=None, **params): + """Return the audit history for a company (including contacts / addresses).""" + company = company or self.company + + return self.get( + reverse('api-audit-log-list'), + {'model_type': 'company.company', 'model_id': company.pk, **params}, + ).data + + def entries(self, instance, **filters): + """Return audit entries recorded directly against an instance.""" + return AuditLogEntry.objects.get_for_object(instance).filter(**filters) + + def test_company_edit(self): + """Company edits via the API are recorded against the user.""" + self.patch( + reverse('api-company-detail', kwargs={'pk': self.company.pk}), + {'description': 'Widgets and gadgets', 'is_customer': True}, + ) + + entry = self.entries(self.company, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual( + entry.changes_dict['description'], + ['Widget supplier', 'Widgets and gadgets'], + ) + self.assertEqual(entry.changes_dict['is_customer'], [False, True]) + self.assertNotIn('metadata', entry.changes_dict) + + # Reverse relations are not recorded on creation + created = self.entries(self.company, action=ACTION.CREATE).get() + + self.assertEqual(created.changes_dict['name'], [None, 'Acme Widgets']) + + for field in ['contacts', 'addresses', 'supplied_parts']: + self.assertNotIn(field, created.changes_dict) + + def test_contact_history(self): + """Contact changes are included in the company history.""" + url = reverse('api-contact-list') + + response = self.post(url, {'company': self.company.pk, 'name': 'Jane Doe'}) + contact = Contact.objects.get(pk=response.data['pk']) + + self.patch( + reverse('api-contact-detail', kwargs={'pk': contact.pk}), + {'role': 'Purchasing'}, + ) + self.delete(reverse('api-contact-detail', kwargs={'pk': contact.pk})) + + entries = [e for e in self.history() if e['model_type'] == 'company.contact'] + + self.assertEqual( + sorted(e['action'] for e in entries), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry['parent_model_type'], 'company.company') + self.assertEqual(entry['parent_object_pk'], str(self.company.pk)) + self.assertEqual(entry['actor'], self.user.pk) + + # The contact history is not included when child entries are excluded + self.assertFalse( + any( + e['model_type'] == 'company.contact' + for e in self.history(include_children=False) + ) + ) + + def test_primary_address(self): + """Demoting the previous primary address (a bulk update) is recorded.""" + url = reverse('api-address-list') + + first = self.post( + url, {'company': self.company.pk, 'title': 'Head Office', 'line1': 'A'} + ).data + self.assertTrue(first['primary']) + + self.post( + url, + { + 'company': self.company.pk, + 'title': 'Warehouse', + 'line1': 'B', + 'primary': True, + }, + ) + + first = Address.objects.get(pk=first['pk']) + self.assertFalse(first.primary) + + entry = self.entries(first, action=ACTION.UPDATE).get() + + self.assertEqual(entry.changes_dict, {'primary': [True, False]}) + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_object_pk, str(self.company.pk)) + self.assertIsNotNone(entry.cid) + + def test_company_delete(self): + """Deleting a company records the cascaded contact / address deletions.""" + company = Company.objects.create(name='Short Lived Ltd') + contact = Contact.objects.create(company=company, name='John Smith') + address = Address.objects.create(company=company, title='HQ', line1='X') + + # Note: delete() clears the PK of the deleted instance + targets = [(type(obj), str(obj.pk)) for obj in [company, contact, address]] + company_pk = company.pk + + company.delete() + + for model, pk in targets: + self.assertEqual( + AuditLogEntry.objects.filter( + content_type=model.get_content_type(), + object_pk=pk, + action=ACTION.DELETE, + ).count(), + 1, + ) + + # History of the deleted company is still available + actions = [ + (e['model_type'], e['action']) + for e in self.get( + reverse('api-audit-log-list'), + {'model_type': 'company.company', 'model_id': company_pk}, + ).data + ] + + for model_type in ['company.company', 'company.contact', 'company.address']: + self.assertIn((model_type, ACTION.CREATE), actions) + self.assertIn((model_type, ACTION.DELETE), actions) + + +class AuditedUpdateTest(InvenTreeAPITestCase): + """Tests for the audited_update helper.""" + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.companies = [ + Company.objects.create(name=f'Company {idx}', description='Original') + for idx in range(3) + ] + + def update_entries(self): + """Return all UPDATE entries for Company objects.""" + return AuditLogEntry.objects.filter( + content_type=Company.get_content_type(), action=ACTION.UPDATE + ) + + def test_update(self): + """Each updated row gets an entry - matching the signal-based format.""" + n = audited_update( + Company.objects.filter(pk__in=[c.pk for c in self.companies[:2]]), + description='Bulk', + ) + + self.assertEqual(n, 2) + self.assertEqual(self.update_entries().count(), 2) + + for entry in self.update_entries(): + self.assertEqual(entry.changes_dict, {'description': ['Original', 'Bulk']}) + + # Compare with an entry generated by a regular save() + company = self.companies[2] + company.description = 'Bulk' + company.save() + + entry = self.update_entries().get(object_pk=str(company.pk)) + self.assertEqual(entry.changes_dict, {'description': ['Original', 'Bulk']}) + + def test_unchanged_rows(self): + """Rows which are not actually modified do not produce entries.""" + n = audited_update(Company.objects.all(), description='Original') + + self.assertEqual(n, 3) + self.assertEqual(self.update_entries().count(), 0) + + def test_filter_on_updated_field(self): + """Updating the field the queryset is filtered on still records each row.""" + audited_update( + Company.objects.filter(description='Original'), description='Changed' + ) + + self.assertEqual(self.update_entries().count(), 3) + + def test_expression(self): + """F() expressions are supported (new values are re-read from the database).""" + audited_update(Company.objects.all(), name=F('description')) + + for entry in self.update_entries(): + self.assertEqual(entry.changes_dict['name'][1], 'Original') + + def test_disabled(self): + """No entries are created when auditing is disabled.""" + with disable_auditlog(): + n = audited_update(Company.objects.all(), description='A') + + self.assertEqual(n, 3) + self.assertEqual(self.update_entries().count(), 0) + + set_global_setting('AUDIT_LOG_ENABLED', False) + self.addCleanup(set_global_setting, 'AUDIT_LOG_ENABLED', True) + + audited_update(Company.objects.all(), description='B') + + self.assertEqual(self.update_entries().count(), 0) + self.assertEqual(Company.objects.filter(description='B').count(), 3) + + def test_bulk_update(self): + """audited_bulk_update() records an entry for each modified row.""" + from audit.helpers import audited_bulk_update + + a, b, c = self.companies + + a.description = 'Bulk A' + b.description = 'Bulk B' + # 'c' is included, but not modified + + n = audited_bulk_update(Company, [a, b, c], ['description']) + + self.assertEqual(n, 3) + self.assertEqual(self.update_entries().count(), 2) + + for company in [a, b]: + entry = self.update_entries().get(object_pk=str(company.pk)) + self.assertEqual( + entry.changes_dict, {'description': ['Original', company.description]} + ) + + def test_bulk_update_expression(self): + """audited_bulk_update() records the value written by an F() expression.""" + from audit.helpers import audited_bulk_update + + for company in self.companies: + company.name = F('description') + + audited_bulk_update(Company, self.companies, ['name']) + + self.assertEqual(self.update_entries().count(), 3) + + for entry in self.update_entries(): + self.assertEqual(entry.changes_dict['name'][1], 'Original') + + def test_bulk_update_fields_only(self): + """Only the fields passed to bulk_update() are recorded.""" + from audit.helpers import audited_bulk_update + + company = self.companies[0] + company.description = 'Changed' + company.website = 'https://example.com' + + audited_bulk_update(Company, [company], ['description']) + + entry = self.update_entries().get() + self.assertEqual(list(entry.changes_dict.keys()), ['description']) + + def test_bulk_update_disabled(self): + """No entries are recorded by audited_bulk_update() when auditing is disabled.""" + from audit.helpers import audited_bulk_update + + for company in self.companies: + company.description = 'Quiet' + + with disable_auditlog(): + audited_bulk_update(Company, self.companies, ['description']) + + self.assertEqual(self.update_entries().count(), 0) + self.assertEqual(Company.objects.filter(description='Quiet').count(), 3) + + def test_unaudited_model(self): + """Models which are not audited fall back to a plain update.""" + from django.contrib.contenttypes.models import ContentType + + from audit.helpers import is_audited + from stock.models import StockLocationType + + self.assertFalse(is_audited(StockLocationType)) + + StockLocationType.objects.create(name='Type', description='x') + + n = audited_update(StockLocationType.objects.all(), description='y') + + self.assertEqual(n, 1) + self.assertEqual(StockLocationType.objects.get().description, 'y') + self.assertFalse( + AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(StockLocationType) + ).exists() + ) + + +class SupplierPartAuditTest(InvenTreeAPITestCase): + """Tests for audit history of ManufacturerPart / SupplierPart / SupplierPriceBreak.""" + + roles = [ + 'part.view', + 'purchase_order.view', + 'purchase_order.add', + 'purchase_order.change', + 'purchase_order.delete', + ] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.supplier = Company.objects.create(name='Supplier Co', is_supplier=True) + cls.manufacturer = Company.objects.create(name='Maker Co', is_manufacturer=True) + cls.part = Part.objects.create( + name='Widget', description='A widget', purchaseable=True + ) + cls.supplier_part = SupplierPart.objects.create( + part=cls.part, supplier=cls.supplier, SKU='WID-001' + ) + + def entries(self, instance, **filters): + """Return audit entries recorded directly against an instance.""" + return AuditLogEntry.objects.get_for_object(instance).filter(**filters) + + def history(self, model_type, pk, **params): + """Return the audit history for an object (including children).""" + return self.get( + reverse('api-audit-log-list'), + {'model_type': model_type, 'model_id': pk, **params}, + ).data + + def test_supplier_part_edit(self): + """Supplier part edits are recorded, and shown in the supplier history.""" + self.patch( + reverse('api-supplier-part-detail', kwargs={'pk': self.supplier_part.pk}), + {'note': 'Preferred source', 'pack_quantity': '10'}, + ) + + entry = self.entries(self.supplier_part, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_object_pk, str(self.supplier.pk)) + self.assertEqual(entry.changes_dict['note'][1], 'Preferred source') + self.assertEqual(entry.changes_dict['pack_quantity'][1], '10') + + # Derived field is not recorded + self.assertNotIn('pack_quantity_native', entry.changes_dict) + + history = self.history('company.company', self.supplier.pk) + self.assertIn( + ('company.supplierpart', ACTION.UPDATE), + [(e['model_type'], e['action']) for e in history], + ) + + def test_availability_not_recorded(self): + """Supplier availability updates are not recorded.""" + self.supplier_part.update_available_quantity(250) + + self.assertFalse( + self.entries(self.supplier_part, action=ACTION.UPDATE).exists() + ) + + # Other changes in the same save are still recorded + self.supplier_part.note = 'Checked' + self.supplier_part.update_available_quantity(300) + + entry = self.entries(self.supplier_part, action=ACTION.UPDATE).get() + self.assertEqual(list(entry.changes_dict.keys()), ['note']) + + def test_primary_supplier_part(self): + """Demoting the previous primary supplier part (a bulk update) is recorded.""" + self.assertTrue(self.supplier_part.primary) + + SupplierPart.objects.create( + part=self.part, supplier=self.supplier, SKU='WID-002', primary=True + ) + + self.supplier_part.refresh_from_db() + self.assertFalse(self.supplier_part.primary) + + entry = self.entries(self.supplier_part, action=ACTION.UPDATE).get() + self.assertEqual(entry.changes_dict, {'primary': [True, False]}) + self.assertEqual(entry.parent_object_pk, str(self.supplier.pk)) + + def test_manufacturer_part(self): + """Manufacturer part changes are shown in the manufacturer history.""" + response = self.post( + reverse('api-manufacturer-part-list'), + {'part': self.part.pk, 'manufacturer': self.manufacturer.pk, 'MPN': 'M-1'}, + ) + + mp = ManufacturerPart.objects.get(pk=response.data['pk']) + + self.patch( + reverse('api-manufacturer-part-detail', kwargs={'pk': mp.pk}), + {'description': 'Rev B'}, + ) + + history = self.history('company.company', self.manufacturer.pk) + entries = [e for e in history if e['model_type'] == 'company.manufacturerpart'] + + self.assertEqual( + sorted(e['action'] for e in entries), [ACTION.CREATE, ACTION.UPDATE] + ) + + for entry in entries: + self.assertEqual(entry['parent_object_pk'], str(self.manufacturer.pk)) + self.assertEqual(entry['actor'], self.user.pk) + + def test_price_breaks(self): + """Price break changes are shown in the supplier part history.""" + url = reverse('api-part-supplier-price-list') + + response = self.post( + url, + { + 'part': self.supplier_part.pk, + 'quantity': 10, + 'price': '1.50', + 'price_currency': 'USD', + }, + ) + + pb = SupplierPriceBreak.objects.get(pk=response.data['pk']) + + self.patch( + reverse('api-part-supplier-price-detail', kwargs={'pk': pb.pk}), + {'price': '1.25'}, + ) + + entry = self.entries(pb, action=ACTION.UPDATE).get() + self.assertIn('price', entry.changes_dict) + self.assertEqual(entry.parent_object_pk, str(self.supplier_part.pk)) + + history = self.history( + 'company.supplierpart', self.supplier_part.pk, changes_detail=True + ) + entries = [ + e for e in history if e['model_type'] == 'company.supplierpricebreak' + ] + + self.assertEqual( + sorted(e['action'] for e in entries), [ACTION.CREATE, ACTION.UPDATE] + ) + + # Price breaks are not included in the supplier (company) history + self.assertFalse( + any( + e['model_type'] == 'company.supplierpricebreak' + for e in self.history('company.company', self.supplier.pk) + ) + ) + + def test_price_break_permission(self): + """Price break history requires permission on the price break model.""" + SupplierPriceBreak.objects.create(part=self.supplier_part, quantity=1, price=2) + + def price_entries(): + return [ + e + for e in self.history('company.supplierpart', self.supplier_part.pk) + if e['model_type'] == 'company.supplierpricebreak' + ] + + self.assertEqual(len(price_entries()), 1) + + # Supplier part is visible via the 'part' role, but companies / price breaks are not + self.clearRoles() + self.assignRole('part.view') + + history = self.history('company.supplierpart', self.supplier_part.pk) + self.assertGreater(len(history), 0) + self.assertEqual(len(price_entries()), 0) + + # Parent (supplier company) reference is hidden + for entry in history: + self.assertIsNone(entry['parent_model_type']) + self.assertIsNone(entry['parent_object_pk']) + + # Supplier part entries cannot be retrieved via the supplier + self.assertEqual(self.history('company.company', self.supplier.pk), []) diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index 6c6f1f6f34..157fd72128 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -15,6 +15,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ import structlog +from auditlog.context import disable_auditlog from rest_framework.exceptions import ValidationError as DRFValidationError import importer.operations @@ -1014,7 +1015,9 @@ class DataImportRow(models.Model): if commit: try: - serializer.save() + # Data imports are not recorded in the audit log + with disable_auditlog(): + serializer.save() self.complete = True except ValueError as e: # Exception as e: diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py index 706c44b203..f9a4dc271b 100644 --- a/src/backend/InvenTree/importer/tests.py +++ b/src/backend/InvenTree/importer/tests.py @@ -82,6 +82,36 @@ class ImporterTest(ImporterMixin, InvenTreeTestCase): # Check that the new companies have been created self.assertEqual(n + 12, Company.objects.count()) + def test_import_not_audited(self): + """Records created via a data import are not recorded in the audit log.""" + from audit.models import AuditLogEntry + from company.models import Company + + content_type = Company.get_content_type() + n = AuditLogEntry.objects.filter(content_type=content_type).count() + + session = DataImportSession.objects.create( + data_file=self.helper_file('companies.csv'), model_type='company' + ) + session.extract_columns() + session.import_data() + + companies = Company.objects.count() + + for row in session.rows.all(): + self.assertTrue(row.validate(commit=True)) + + self.assertGreater(Company.objects.count(), companies) + self.assertEqual( + AuditLogEntry.objects.filter(content_type=content_type).count(), n + ) + + # Sanity check: companies created outside of the importer *are* recorded + Company.objects.create(name='Not imported') + self.assertEqual( + AuditLogEntry.objects.filter(content_type=content_type).count(), n + 1 + ) + def test_row_data_datetime_serialization(self): """Test that row data containing native datetime values can be saved. diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index edd84a6a4f..056adf2daa 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -32,6 +32,7 @@ import order.validators import report.mixins import stock.models import users.models as UserModels +from audit.helpers import audited_bulk_update from build.status_codes import BuildStatus from common.currency import currency_code_default from common.notifications import InvenTreeNotificationBodies @@ -88,6 +89,32 @@ from stock.status_codes import StockHistoryCode, StockStatus logger = structlog.get_logger('inventree') +class AuditedOrderMixin(InvenTree.models.InvenTreeAuditMixin): + """Audit log configuration for order models.""" + + AUDIT_EXCLUDE_FIELDS = ( + # Recalculated automatically on every save + 'total_price', + 'total_price_currency', + # Derived from 'barcode_data' + 'barcode_hash', + ) + + +class AuditedLineItemMixin(InvenTree.models.InvenTreeAuditMixin): + """Audit log configuration for order line item models. + + Changes to line items are included in the history of the order. + """ + + AUDIT_PARENT_FIELD = 'order' + + AUDIT_EXCLUDE_FIELDS = ( + # Additional (plugin) context data for extra lines + 'context', + ) + + class TotalPriceMixin(models.Model): """Mixin which provides 'total_price' field for an order.""" @@ -642,7 +669,7 @@ class Order( raise NotImplementedError(f'get_status_class() not implemented for {__class__}') -class PurchaseOrder(TotalPriceMixin, Order): +class PurchaseOrder(AuditedOrderMixin, TotalPriceMixin, Order): """A PurchaseOrder represents goods shipped inwards from an external supplier. Attributes: @@ -1366,7 +1393,7 @@ class PurchaseOrder(TotalPriceMixin, Order): ) # Update received quantity for each line item - PurchaseOrderLineItem.objects.bulk_update(line_items_to_update, ['received']) + audited_bulk_update(PurchaseOrderLineItem, line_items_to_update, ['received']) # Trigger an event for any interested plugins trigger_event( @@ -1451,7 +1478,7 @@ SERIALIZED_STOCK_CHOICES = [ SERIALIZED_STOCK_DEFAULT = 'any' -class SalesOrder(TotalPriceMixin, Order): +class SalesOrder(AuditedOrderMixin, TotalPriceMixin, Order): """A SalesOrder represents a list of goods shipped outwards to a customer.""" REFERENCE_PATTERN_SETTING = 'SALESORDER_REFERENCE_PATTERN' @@ -2286,6 +2313,14 @@ class OrderExtraLine(OrderLineItem): abstract = True + def __str__(self): + """Render a string representation of an extra line item.""" + return '{n} x {description} - {order}'.format( + n=decimal2string(self.quantity), + description=self.description or self.reference or _('Extra line'), + order=self.order, + ) + description = models.CharField( max_length=250, blank=True, @@ -2311,7 +2346,7 @@ class OrderExtraLine(OrderLineItem): ) -class PurchaseOrderLineItem(OrderLineItem): +class PurchaseOrderLineItem(AuditedLineItemMixin, OrderLineItem): """Model for a purchase order line item. Attributes: @@ -2507,7 +2542,7 @@ class PurchaseOrderLineItem(OrderLineItem): self.save() -class PurchaseOrderExtraLine(OrderExtraLine): +class PurchaseOrderExtraLine(AuditedLineItemMixin, OrderExtraLine): """Model for a single ExtraLine in a PurchaseOrder. Attributes: @@ -2533,7 +2568,7 @@ class PurchaseOrderExtraLine(OrderExtraLine): ) -class SalesOrderLineItem(OrderLineItem): +class SalesOrderLineItem(AuditedLineItemMixin, OrderLineItem): """Model for a single LineItem in a SalesOrder. Attributes: @@ -2576,6 +2611,14 @@ class SalesOrderLineItem(OrderLineItem): 'part': _('Only salable parts can be assigned to a sales order') }) + def __str__(self): + """Render a string representation of a SalesOrderLineItem instance.""" + return '{n} x {part} - {order}'.format( + n=decimal2string(self.quantity), + part=self.part.full_name if self.part else _('Unknown part'), + order=self.order, + ) + order = models.ForeignKey( SalesOrder, on_delete=models.CASCADE, @@ -2689,6 +2732,7 @@ class SalesOrderShipmentReportContext(report.mixins.BaseReportContext, TypedDict class SalesOrderShipment( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeParameterMixin, InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, @@ -2713,6 +2757,14 @@ class SalesOrderShipment( reference: Custom reference text for this shipment (e.g. consignment number?) """ + # Changes to a shipment are included in the history of the sales order + AUDIT_PARENT_FIELD = 'order' + + AUDIT_EXCLUDE_FIELDS = ( + # Derived from 'barcode_data' + 'barcode_hash', + ) + @classmethod def barcode_model_type_code(cls): """Return the associated barcode model type code for this model.""" @@ -2762,6 +2814,12 @@ class SalesOrderShipment( 'title': str(self), } + def __str__(self): + """Render a string representation of a SalesOrderShipment instance.""" + return '{order} - {label} {reference}'.format( + order=self.order, label=_('Shipment'), reference=self.reference + ) + order = models.ForeignKey( SalesOrder, on_delete=models.CASCADE, @@ -3074,7 +3132,7 @@ class SalesOrderShipment( stock.models.StockItemTracking.objects.bulk_create(tracking_entries) # Update sales order lines for "seen_lines" - SalesOrderLineItem.objects.bulk_update(seen_lines.values(), ['shipped']) + audited_bulk_update(SalesOrderLineItem, list(seen_lines.values()), ['shipped']) # Repoint allocations onto their (possibly newly split) StockItem if allocations_to_update: @@ -3146,7 +3204,7 @@ class SalesOrderShipment( return task_id -class SalesOrderExtraLine(OrderExtraLine): +class SalesOrderExtraLine(AuditedLineItemMixin, OrderExtraLine): """Model for a single ExtraLine in a SalesOrder. Attributes: @@ -3317,7 +3375,7 @@ class SalesOrderAllocation(models.Model): self.refresh_from_db() -class ReturnOrder(TotalPriceMixin, Order): +class ReturnOrder(AuditedOrderMixin, TotalPriceMixin, Order): """A ReturnOrder represents goods returned from a customer, e.g. an RMA or warranty. Attributes: @@ -3642,7 +3700,7 @@ class ReturnOrder(TotalPriceMixin, Order): ) -class ReturnOrderLineItem(StatusCodeMixin, OrderLineItem): +class ReturnOrderLineItem(AuditedLineItemMixin, StatusCodeMixin, OrderLineItem): """Model for a single LineItem in a ReturnOrder.""" STATUS_CLASS = ReturnOrderLineStatus @@ -3681,6 +3739,12 @@ class ReturnOrderLineItem(StatusCodeMixin, OrderLineItem): 'quantity': _('Invalid quantity for serialized stock item') }) + def __str__(self): + """Render a string representation of a ReturnOrderLineItem instance.""" + return '{item} - {order}'.format( + item=self.item if self.item_id else _('Unknown item'), order=self.order + ) + order = models.ForeignKey( ReturnOrder, on_delete=models.CASCADE, @@ -3734,7 +3798,7 @@ class ReturnOrderLineItem(StatusCodeMixin, OrderLineItem): ) -class ReturnOrderExtraLine(OrderExtraLine): +class ReturnOrderExtraLine(AuditedLineItemMixin, OrderExtraLine): """Model for a single ExtraLine in a ReturnOrder.""" class Meta: @@ -3756,7 +3820,7 @@ class ReturnOrderExtraLine(OrderExtraLine): ) -class TransferOrder(Order): +class TransferOrder(AuditedOrderMixin, Order): """A Transfer Order represents a request to transfer stock from one location to another. It provides a place to queue and review changes before execution. Attributes: @@ -4088,7 +4152,7 @@ class TransferOrder(Order): return TransferOrderAllocation.objects.filter(line__order=self) -class TransferOrderLineItem(OrderLineItem): +class TransferOrderLineItem(AuditedLineItemMixin, OrderLineItem): """Model for a single LineItem in a TransferOrder. Attributes: @@ -4114,6 +4178,14 @@ class TransferOrderLineItem(OrderLineItem): """Return the API URL associated with the TransferOrderLineItem model.""" return reverse('api-transfer-order-line-list') + def __str__(self): + """Render a string representation of a TransferOrderLineItem instance.""" + return '{n} x {part} - {order}'.format( + n=decimal2string(self.quantity), + part=self.part.full_name if self.part else _('Unknown part'), + order=self.order, + ) + order = models.ForeignKey( TransferOrder, on_delete=models.CASCADE, diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 396c12d72c..be7519e1bf 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -2138,6 +2138,7 @@ class PurchaseOrderReceiveTest(OrderTest): N_ITEMS = StockItem.objects.count() # Receive all items in a single request + # Includes a fixed overhead (independent of N_LINES) for recording audit entries response = self.post( url, { @@ -2151,7 +2152,7 @@ class PurchaseOrderReceiveTest(OrderTest): ], 'location': location.pk, }, - max_query_count=104 + 3 * N_LINES, + max_query_count=124 + 3 * N_LINES, ).data # Check for expected response @@ -2273,11 +2274,12 @@ class PurchaseOrderReceiveTest(OrderTest): 'location': location.pk, } + # Includes a fixed overhead (independent of N_LINES) for recording audit entries with self.settings( PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True ): response = self.post( - url, data, max_query_count=400, benchmark=True, format='json' + url, data, max_query_count=420, benchmark=True, format='json' ) self.assertEqual(response.status_code, 201) diff --git a/src/backend/InvenTree/order/test_audit.py b/src/backend/InvenTree/order/test_audit.py new file mode 100644 index 0000000000..99691e7041 --- /dev/null +++ b/src/backend/InvenTree/order/test_audit.py @@ -0,0 +1,568 @@ +"""Audit log tests for the order models.""" + +from decimal import Decimal + +from django.contrib.contenttypes.models import ContentType +from django.urls import reverse + +from audit.models import AuditLogEntry +from order import models +from order.status_codes import PurchaseOrderStatus +from order.test_api import OrderTest +from stock.models import StockLocation + +ACTION = AuditLogEntry.Action + + +class OrderAuditTestBase(OrderTest): + """Base class for order audit tests.""" + + roles = [ + f'{ruleset}.{perm}' + for ruleset in [ + 'purchase_order', + 'sales_order', + 'return_order', + 'transfer_order', + ] + for perm in ['view', 'add', 'change', 'delete'] + ] + ['part.view', 'stock.view', 'stock.add', 'stock_location.view'] + + def entries(self, model, pk, **filters): + """Return audit entries for a given object (by PK - which survives deletion).""" + return AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(model), + object_pk=str(pk), + **filters, + ) + + def history(self, model_type: str, pk, **params): + """Return the audit history for an object (including child entries).""" + return self.get( + reverse('api-audit-log-list'), + {'model_type': model_type, 'model_id': pk, **params}, + ).data + + def check_child_crud( + self, parent, child_model, list_url, detail_url, create, update + ): + """Create / update / delete a child (line) object via the API. + + Checks that each entry is linked to the parent order, and appears in its history. + + Returns: + The UPDATE entry + """ + pk = self.post(reverse(list_url), create).data['pk'] + + url = reverse(detail_url, kwargs={'pk': pk}) + self.patch(url, update) + self.delete(url) + + entries = self.entries(child_model, pk) + + self.assertEqual( + sorted(entries.values_list('action', flat=True)), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_object_pk, str(parent.pk)) + self.assertNotIn('context', entry.changes_dict) + self.assertNotIn('line_int', entry.changes_dict) + + # A meaningful string representation (not the Django default) + self.assertNotIn(' object (', entry.object_repr) + + label = f'{child_model._meta.app_label}.{child_model._meta.model_name}' + parent_label = f'{parent._meta.app_label}.{parent._meta.model_name}' + + child_actions = [ + e['action'] + for e in self.history(parent_label, parent.pk) + if e['model_type'] == label + ] + + self.assertEqual( + sorted(child_actions), [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE] + ) + + return entries.get(action=ACTION.UPDATE) + + +class PurchaseOrderAuditTest(OrderAuditTestBase): + """Audit tests for PurchaseOrder, PurchaseOrderLineItem and PurchaseOrderExtraLine.""" + + def test_order_edit(self): + """Order edits are recorded - without the (derived) total price.""" + po = models.PurchaseOrder.objects.get(pk=1) + + self.patch( + reverse('api-po-detail', kwargs={'pk': po.pk}), + {'description': 'Audited description', 'supplier_reference': 'SUP-1'}, + ) + + entry = self.entries(models.PurchaseOrder, po.pk, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['description'][1], 'Audited description') + self.assertEqual(entry.changes_dict['supplier_reference'][1], 'SUP-1') + + for field in ['total_price', 'total_price_currency', 'updated_at']: + self.assertNotIn(field, entry.changes_dict) + + def test_order_currency(self): + """Changes to the order currency (not a MoneyField currency) are recorded.""" + po = models.PurchaseOrder.objects.get(pk=1) + po.order_currency = 'AUD' + po.save() + + entry = ( + self + .entries(models.PurchaseOrder, po.pk, action=ACTION.UPDATE) + .order_by('pk') + .last() + ) + self.assertEqual(entry.changes_dict['order_currency'][1], 'AUD') + + def test_total_price_not_recorded(self): + """Saving an order (which recalculates the total price) records no entry.""" + po = models.PurchaseOrder.objects.get(pk=1) + + # Initial save (fixture data has no creation_date, which is set on save) + po.save() + n = self.entries(models.PurchaseOrder, po.pk, action=ACTION.UPDATE).count() + + po.refresh_from_db() + total = po.total_price + + # Change the price of a line, then re-save the order (total price changes) + line = po.lines.first() + line.purchase_price = 123.45 + line.save() + + po.save() + po.refresh_from_db() + + # Sanity check - the total price has changed + self.assertNotEqual(po.total_price, total) + + self.assertEqual( + self.entries(models.PurchaseOrder, po.pk, action=ACTION.UPDATE).count(), n + ) + + def test_status_change(self): + """Issuing an order (status change) is recorded.""" + po = models.PurchaseOrder.objects.get(pk=1) + self.assertEqual(po.status, PurchaseOrderStatus.PENDING) + + self.post(reverse('api-po-issue', kwargs={'pk': po.pk}), {}, expected_code=201) + + entry = self.entries(models.PurchaseOrder, po.pk, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual( + entry.changes_dict['status'], + [PurchaseOrderStatus.PENDING.value, PurchaseOrderStatus.PLACED.value], + ) + + def test_line_items(self): + """Line item changes are recorded against the order.""" + po = models.PurchaseOrder.objects.get(pk=1) + supplier_part = po.lines.first().part + + update = self.check_child_crud( + po, + models.PurchaseOrderLineItem, + 'api-po-line-list', + 'api-po-line-detail', + {'order': po.pk, 'part': supplier_part.pk, 'quantity': 5}, + # Note: the serializer requires 'order' and 'part', even for PATCH requests + # (pre-existing: validate() does not fall back to the instance values) + { + 'order': po.pk, + 'part': supplier_part.pk, + 'quantity': 8, + 'reference': 'Audit', + }, + ) + + # Note: decimal values are recorded as strings + self.assertEqual([Decimal(v) for v in update.changes_dict['quantity']], [5, 8]) + self.assertEqual(update.changes_dict['reference'], ['', 'Audit']) + + # Numeric fields are flagged for display formatting (decimals are stored as strings) + [entry] = [ + e + for e in self.history( + 'order.purchaseorder', po.pk, changes_detail=True, action=ACTION.UPDATE + ) + if e['pk'] == update.pk + ] + rows = {row['field']: row for row in entry['changes_detail']} + + self.assertTrue(rows['quantity']['numeric']) + self.assertFalse(rows['reference']['numeric']) + + def test_extra_lines(self): + """Extra line changes are recorded against the order.""" + po = models.PurchaseOrder.objects.get(pk=1) + + update = self.check_child_crud( + po, + models.PurchaseOrderExtraLine, + 'api-po-extra-line-list', + 'api-po-extra-line-detail', + { + 'order': po.pk, + 'quantity': 1, + 'description': 'Freight', + 'price': '10.00', + 'price_currency': 'USD', + }, + {'description': 'Express freight', 'price': '25.00'}, + ) + + self.assertEqual( + update.changes_dict['description'], ['Freight', 'Express freight'] + ) + self.assertIn('price', update.changes_dict) + + def test_receive(self): + """Received quantities (updated in bulk) are recorded against the user.""" + po = models.PurchaseOrder.objects.get(pk=1) + po.status = PurchaseOrderStatus.PLACED.value + po.save() + + lines = list(po.lines.all()[:2]) + location = StockLocation.objects.filter(structural=False).first() + + self.post( + reverse('api-po-receive', kwargs={'pk': po.pk}), + { + 'items': [ + {'line_item': line.pk, 'quantity': 3, 'status': 10} + for line in lines + ], + 'location': location.pk, + }, + expected_code=201, + ) + + for line in lines: + entry = self.entries( + models.PurchaseOrderLineItem, + line.pk, + action=ACTION.UPDATE, + changes__has_key='received', + ).get() + + self.assertEqual(entry.actor, self.user) + old, new = (Decimal(v) for v in entry.changes_dict['received']) + self.assertEqual(old, line.received) + self.assertEqual(new, line.received + 3) + self.assertEqual(entry.parent_object_pk, str(po.pk)) + + +class SalesOrderAuditTest(OrderAuditTestBase): + """Audit tests for SalesOrder, line items, extra lines and shipments.""" + + @classmethod + def setUpTestData(cls): + """Create a simple sales order to test against.""" + from company.models import Company + from part.models import Part + from stock.models import StockItem + + super().setUpTestData() + + cls.customer = Company.objects.create(name='Audit Customer', is_customer=True) + cls.part = Part.objects.create( + name='Audit Widget', description='A widget', salable=True + ) + cls.stock = StockItem.objects.create(part=cls.part, quantity=100) + + cls.order = models.SalesOrder.objects.create( + customer=cls.customer, reference='SO-9001' + ) + + def test_order_edit(self): + """Order edits are recorded - without the (derived) total price.""" + self.patch( + reverse('api-so-detail', kwargs={'pk': self.order.pk}), + {'description': 'Audited', 'customer_reference': 'CUST-9'}, + ) + + entry = self.entries( + models.SalesOrder, self.order.pk, action=ACTION.UPDATE + ).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['customer_reference'][1], 'CUST-9') + self.assertNotIn('total_price', entry.changes_dict) + + def test_line_items(self): + """Line item changes are recorded against the order.""" + update = self.check_child_crud( + self.order, + models.SalesOrderLineItem, + 'api-so-line-list', + 'api-so-line-detail', + {'order': self.order.pk, 'part': self.part.pk, 'quantity': 5}, + {'quantity': 7, 'sale_price': '12.50', 'sale_price_currency': 'USD'}, + ) + + self.assertEqual([Decimal(v) for v in update.changes_dict['quantity']], [5, 7]) + self.assertIn('sale_price', update.changes_dict) + self.assertEqual( + update.object_repr, f'7 x {self.part.full_name} - {self.order}' + ) + + def test_extra_lines(self): + """Extra line changes are recorded against the order.""" + update = self.check_child_crud( + self.order, + models.SalesOrderExtraLine, + 'api-so-extra-line-list', + 'api-so-extra-line-detail', + {'order': self.order.pk, 'quantity': 1, 'description': 'Packaging'}, + {'description': 'Gift wrapping'}, + ) + + self.assertEqual( + update.changes_dict['description'], ['Packaging', 'Gift wrapping'] + ) + self.assertEqual(update.object_repr, f'1 x Gift wrapping - {self.order}') + + def test_shipments(self): + """Shipment changes are recorded against the order, and the shipment itself.""" + update = self.check_child_crud( + self.order, + models.SalesOrderShipment, + 'api-so-shipment-list', + 'api-so-shipment-detail', + {'order': self.order.pk, 'reference': 'SHIP-1'}, + {'tracking_number': 'TRACK-123', 'invoice_number': 'INV-9'}, + ) + + self.assertEqual(update.changes_dict['tracking_number'], ['', 'TRACK-123']) + self.assertNotIn('barcode_hash', update.changes_dict) + + def test_shipment_history(self): + """The shipment History tab shows the shipment's own entries.""" + shipment = models.SalesOrderShipment.objects.create( + order=self.order, reference='SHIP-2' + ) + + self.patch( + reverse('api-so-shipment-detail', kwargs={'pk': shipment.pk}), + {'tracking_number': 'ABC'}, + ) + + history = self.history('order.salesordershipment', shipment.pk) + + self.assertEqual( + sorted(e['action'] for e in history), [ACTION.CREATE, ACTION.UPDATE] + ) + + for entry in history: + self.assertEqual(entry['model_type'], 'order.salesordershipment') + self.assertEqual(entry['parent_object_pk'], str(self.order.pk)) + + def test_complete_shipment(self): + """Shipped quantities (updated in bulk) are recorded against the user.""" + line = models.SalesOrderLineItem.objects.create( + order=self.order, part=self.part, quantity=10 + ) + shipment = models.SalesOrderShipment.objects.create( + order=self.order, reference='SHIP-3' + ) + + self.order.issue_order() + + models.SalesOrderAllocation.objects.create( + line=line, shipment=shipment, item=self.stock, quantity=4 + ) + + # Run in the request context of the test user (e.g. as via the API) + from auditlog.context import set_actor + + with set_actor(self.user): + shipment.complete_shipment(self.user) + + entry = self.entries( + models.SalesOrderLineItem, + line.pk, + action=ACTION.UPDATE, + changes__has_key='shipped', + ).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual([Decimal(v) for v in entry.changes_dict['shipped']], [0, 4]) + self.assertEqual(entry.parent_object_pk, str(self.order.pk)) + + # Shipment completion is recorded too + shipment_entry = self.entries( + models.SalesOrderShipment, + shipment.pk, + action=ACTION.UPDATE, + changes__has_key='shipment_date', + ).get() + + self.assertIsNone(shipment_entry.changes_dict['shipment_date'][0]) + + +class ReturnOrderAuditTest(OrderAuditTestBase): + """Audit tests for ReturnOrder, line items and extra lines.""" + + @classmethod + def setUpTestData(cls): + """Create a simple return order to test against.""" + from company.models import Company + from part.models import Part + from stock.models import StockItem + + super().setUpTestData() + + cls.customer = Company.objects.create(name='Returning Co', is_customer=True) + cls.part = Part.objects.create( + name='Returned Widget', description='A widget', salable=True + ) + cls.item = StockItem.objects.create( + part=cls.part, quantity=1, serial='RMA-1', customer=cls.customer + ) + + cls.order = models.ReturnOrder.objects.create( + customer=cls.customer, reference='RMA-9001' + ) + + def test_order_edit(self): + """Order edits are recorded.""" + self.patch( + reverse('api-return-order-detail', kwargs={'pk': self.order.pk}), + {'description': 'Faulty units', 'customer_reference': 'C-77'}, + ) + + entry = self.entries( + models.ReturnOrder, self.order.pk, action=ACTION.UPDATE + ).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['description'][1], 'Faulty units') + self.assertNotIn('total_price', entry.changes_dict) + + def test_line_items(self): + """Line item changes (including the outcome status) are recorded against the order.""" + from order.status_codes import ReturnOrderLineStatus + + update = self.check_child_crud( + self.order, + models.ReturnOrderLineItem, + 'api-return-order-line-list', + 'api-return-order-line-detail', + {'order': self.order.pk, 'item': self.item.pk}, + {'outcome': ReturnOrderLineStatus.REFUND.value, 'notes': 'Refund issued'}, + ) + + self.assertEqual( + update.changes_dict['outcome'][1], ReturnOrderLineStatus.REFUND.value + ) + + def test_extra_lines(self): + """Extra line changes are recorded against the order.""" + update = self.check_child_crud( + self.order, + models.ReturnOrderExtraLine, + 'api-return-order-extra-line-list', + 'api-return-order-extra-line-detail', + {'order': self.order.pk, 'quantity': 1, 'description': 'Restocking fee'}, + {'description': 'Inspection fee'}, + ) + + self.assertEqual( + update.changes_dict['description'], ['Restocking fee', 'Inspection fee'] + ) + + +class TransferOrderAuditTest(OrderAuditTestBase): + """Audit tests for TransferOrder and line items.""" + + @classmethod + def setUpTestData(cls): + """Create a simple transfer order to test against.""" + from part.models import Part + from stock.models import StockItem + + super().setUpTestData() + + cls.source = StockLocation.objects.create(name='Audit Source') + cls.target = StockLocation.objects.create(name='Audit Target') + + cls.part = Part.objects.create(name='Moved Widget', description='A widget') + cls.stock = StockItem.objects.create( + part=cls.part, quantity=50, location=cls.source + ) + + cls.order = models.TransferOrder.objects.create( + reference='TO-9001', take_from=cls.source, destination=cls.target + ) + + def test_order_edit(self): + """Order edits are recorded.""" + self.patch( + reverse('api-transfer-order-detail', kwargs={'pk': self.order.pk}), + {'description': 'Restock line side'}, + ) + + entry = self.entries( + models.TransferOrder, self.order.pk, action=ACTION.UPDATE + ).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['description'][1], 'Restock line side') + + def test_line_items(self): + """Line item changes are recorded against the order.""" + update = self.check_child_crud( + self.order, + models.TransferOrderLineItem, + 'api-transfer-order-line-list', + 'api-transfer-order-line-detail', + {'order': self.order.pk, 'part': self.part.pk, 'quantity': 10}, + {'quantity': 12}, + ) + + self.assertEqual( + [Decimal(v) for v in update.changes_dict['quantity']], [10, 12] + ) + + def test_transferred(self): + """The 'transferred' quantity (updated via an F() expression) is recorded as a number.""" + line = models.TransferOrderLineItem.objects.create( + order=self.order, part=self.part, quantity=10 + ) + + self.order.issue_order() + + allocation = models.TransferOrderAllocation.objects.create( + line=line, item=self.stock, quantity=6 + ) + + allocation.complete_allocation(self.user) + + line.refresh_from_db() + self.assertEqual(line.transferred, 6) + + entry = self.entries( + models.TransferOrderLineItem, + line.pk, + action=ACTION.UPDATE, + changes__has_key='transferred', + ).get() + + self.assertEqual( + [Decimal(v) for v in entry.changes_dict['transferred']], [0, 6] + ) + self.assertNotIn('F(', str(entry.changes)) + self.assertEqual(entry.parent_object_pk, str(self.order.pk)) diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py index 8ebe43dce9..47ba514bc2 100644 --- a/src/backend/InvenTree/order/test_sales_order.py +++ b/src/backend/InvenTree/order/test_sales_order.py @@ -619,7 +619,7 @@ class SalesOrderTest(InvenTreeAPITestCase): expected_code=200, benchmark=True, max_query_time=5.0, - max_query_count=100, + max_query_count=120, ) self.assertEqual(response.status_code, 200) diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index 11eae3b2d2..3a2854f76b 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -41,6 +41,7 @@ import part.helpers as part_helpers import part.settings as part_settings import report.mixins import users.models +from audit.helpers import audited_bulk_create from build import models as BuildModels from build.status_codes import BuildStatusGroups from common.icons import validate_icon @@ -61,6 +62,7 @@ logger = structlog.get_logger('inventree') class PartCategory( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.PluginValidationMixin, InvenTree.models.InvenTreeParameterMixin, InvenTree.models.MetadataMixin, @@ -80,6 +82,11 @@ class PartCategory( EXTRA_PATH_FIELDS = ['icon'] IMPORT_ID_FIELDS = ['pathstring', 'name'] + AUDIT_EXCLUDE_FIELDS = ( + # Derived - recalculated (in bulk) when a category is renamed or moved + 'pathstring', + ) + class Meta: """Metaclass defines extra model properties.""" @@ -455,6 +462,7 @@ class PartReportContext(report.mixins.BaseReportContext, TypedDict): @cleanup.ignore class Part( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.PluginValidationMixin, InvenTree.models.InvenTreeParameterMixin, InvenTree.models.InvenTreeAttachmentMixin, @@ -516,6 +524,13 @@ class Part( objects = TreeManager() + AUDIT_EXCLUDE_FIELDS = ( + # Derived from the BOM (bom_validated / bom_checked_by / bom_checked_date are recorded) + 'bom_checksum', + # Derived from 'barcode_data' + 'barcode_hash', + ) + class Meta: """Metaclass defines extra model properties.""" @@ -2403,7 +2418,7 @@ class Part( ) ) - Parameter.objects.bulk_create(parameters, batch_size=250) + audited_bulk_create(Parameter, parameters) def getTestTemplates( self, required=None, include_parent: bool = True, enabled=None @@ -2887,7 +2902,11 @@ class PartTestTemplate(InvenTree.models.InvenTreeMetadataModel): return [x.strip() for x in self.choices.split(',') if x.strip()] -class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): +class BomItem( + InvenTree.models.InvenTreeAuditMixin, + InvenTree.models.MetadataMixin, + InvenTree.models.InvenTreeModel, +): """A BomItem links a part to its component items. A part can have a BOM (bill of materials) which defines @@ -2913,6 +2932,15 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): allow_variants: Stock for part variants can be substituted for this BomItem """ + # Changes to a BOM item are included in the history of the assembly + AUDIT_PARENT_FIELD = 'part' + + AUDIT_EXCLUDE_FIELDS = ( + # Recalculated automatically - validate_bom() re-saves every BOM line + 'checksum', + 'validated', + ) + class Meta: """Metaclass providing extra model definition.""" @@ -3567,7 +3595,9 @@ def update_pricing_after_delete(sender, instance, **kwargs): pass -class BomItemSubstitute(InvenTree.models.InvenTreeMetadataModel): +class BomItemSubstitute( + InvenTree.models.InvenTreeAuditMixin, InvenTree.models.InvenTreeMetadataModel +): """A BomItemSubstitute provides a specification for alternative parts, which can be used in a bill of materials. Attributes: @@ -3583,6 +3613,35 @@ class BomItemSubstitute(InvenTree.models.InvenTreeMetadataModel): # Prevent duplication of substitute parts unique_together = ('part', 'bom_item') + def __str__(self): + """Render a string representation of a BomItemSubstitute instance.""" + return _('{substitute} (substitute for {part})').format( + substitute=self.part.full_name, part=self.bom_item.sub_part.full_name + ) + + def get_audit_parent_reference(self): + """Audit entries for a substitute are included in the history of the *assembly*. + + i.e. the parent of the BomItem (skipping a level), so that all BOM changes + are shown in the history of the assembly part. + """ + from django.contrib.contenttypes.models import ContentType + + if 'bom_item' in self._state.fields_cache: + part_id = self.bom_item.part_id + else: + part_id = ( + BomItem.objects + .filter(pk=self.bom_item_id) + .values_list('part_id', flat=True) + .first() + ) + + if part_id is None: + return None + + return ContentType.objects.get_for_model(Part), str(part_id) + def save(self, *args, **kwargs): """Enforce a full_clean when saving the BomItemSubstitute model.""" self.full_clean() diff --git a/src/backend/InvenTree/part/test_audit.py b/src/backend/InvenTree/part/test_audit.py new file mode 100644 index 0000000000..5b3b302b10 --- /dev/null +++ b/src/backend/InvenTree/part/test_audit.py @@ -0,0 +1,350 @@ +"""Audit log tests for the Part and PartCategory models.""" + +from django.contrib.contenttypes.models import ContentType +from django.urls import reverse + +from audit.models import AuditLogEntry +from InvenTree.unit_test import InvenTreeAPITestCase +from part.models import Part, PartCategory + +ACTION = AuditLogEntry.Action + + +class PartAuditTest(InvenTreeAPITestCase): + """Audit tests for Part and PartCategory objects.""" + + roles = [ + 'part.view', + 'part.add', + 'part.change', + 'part.delete', + 'part_category.view', + 'part_category.add', + 'part_category.change', + 'part_category.delete', + ] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.top = PartCategory.objects.create(name='Electronics') + cls.category = PartCategory.objects.create(name='Resistors', parent=cls.top) + cls.part = Part.objects.create( + name='R_10K', description='10k resistor', category=cls.category + ) + + def entries(self, model, pk, **filters): + """Return audit entries for a given object (by PK - which survives deletion).""" + return AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(model), + object_pk=str(pk), + **filters, + ) + + def history(self, model_type: str, pk, **params): + """Return the audit history for an object (including child entries).""" + return self.get( + reverse('api-audit-log-list'), + {'model_type': model_type, 'model_id': pk, **params}, + ).data + + def test_part_create(self): + """Creating a part is recorded.""" + entry = self.entries(Part, self.part.pk, action=ACTION.CREATE).get() + + self.assertEqual(entry.changes_dict['name'], [None, 'R_10K']) + self.assertEqual(entry.object_repr, str(self.part)) + + # Derived / tree fields are not recorded + for field in ['bom_checksum', 'barcode_hash', 'lft', 'rght', 'tree_id']: + self.assertNotIn(field, entry.changes_dict) + + def test_part_edit(self): + """Part edits via the API are recorded against the user.""" + self.patch( + reverse('api-part-detail', kwargs={'pk': self.part.pk}), + {'description': '10k resistor, 1%', 'IPN': 'RES-10K', 'active': False}, + ) + + entry = self.entries(Part, self.part.pk, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual( + entry.changes_dict['description'], ['10k resistor', '10k resistor, 1%'] + ) + self.assertEqual(entry.changes_dict['IPN'], [None, 'RES-10K']) + self.assertEqual(entry.changes_dict['active'], [True, False]) + + def test_bom_validation(self): + """Validating the BOM is recorded - without the (derived) checksum.""" + self.part.assembly = True + self.part.save() + + self.part.validate_bom(self.user) + + # Note: entries are ordered by timestamp (newest first) by default + entry = ( + self.entries(Part, self.part.pk, action=ACTION.UPDATE).order_by('pk').last() + ) + + self.assertEqual(entry.changes_dict['bom_validated'], [False, True]) + self.assertEqual(entry.changes_dict['bom_checked_by'], [None, self.user.pk]) + self.assertIn('bom_checked_date', entry.changes_dict) + self.assertNotIn('bom_checksum', entry.changes_dict) + + def test_part_history_includes_parameters(self): + """Parameters (already audited) are shown in the part history.""" + from common.models import Parameter, ParameterTemplate + + template = ParameterTemplate.objects.create(name='Resistance', units='ohm') + + Parameter.objects.create( + model_type=Part.get_content_type(), + model_id=self.part.pk, + template=template, + data='10000', + ) + + model_types = {e['model_type'] for e in self.history('part.part', self.part.pk)} + + self.assertIn('part.part', model_types) + self.assertIn('common.parameter', model_types) + + def test_category_edit(self): + """Category edits are recorded - without the (derived) pathstring.""" + child = PartCategory.objects.create(name='SMD', parent=self.category) + + self.patch( + reverse('api-part-category-detail', kwargs={'pk': self.category.pk}), + {'name': 'Resistor', 'description': 'All resistors'}, + ) + + entry = self.entries(PartCategory, self.category.pk, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.changes_dict['name'], ['Resistors', 'Resistor']) + self.assertNotIn('pathstring', entry.changes_dict) + + # The pathstring of the child category is updated (in bulk) - but not recorded + child.refresh_from_db() + self.assertEqual(child.pathstring, 'Electronics/Resistor/SMD') + self.assertFalse( + self.entries(PartCategory, child.pk, action=ACTION.UPDATE).exists() + ) + + def test_category_delete(self): + """Deleting a category re-parents its parts and subcategories - and is recorded.""" + child = PartCategory.objects.create(name='SMD', parent=self.category) + category_pk = self.category.pk + + self.category.delete() + + self.assertEqual( + self.entries(PartCategory, category_pk, action=ACTION.DELETE).count(), 1 + ) + + # The part is moved to the parent category + part_entry = self.entries(Part, self.part.pk, action=ACTION.UPDATE).get() + self.assertEqual( + part_entry.changes_dict['category'], [category_pk, self.top.pk] + ) + + # The subcategory is moved to the parent category + child_entry = self.entries(PartCategory, child.pk, action=ACTION.UPDATE).get() + self.assertEqual(child_entry.changes_dict['parent'], [category_pk, self.top.pk]) + + def test_category_history(self): + """The category history is available via the API.""" + history = self.history('part.partcategory', self.category.pk) + + self.assertEqual(len(history), 1) + self.assertEqual(history[0]['action'], ACTION.CREATE) + self.assertEqual(history[0]['model_label'], 'Part Category') + + +class BomAuditTest(InvenTreeAPITestCase): + """Audit tests for BomItem and BomItemSubstitute objects.""" + + roles = [ + 'part.view', + 'part.change', + 'bom.view', + 'bom.add', + 'bom.change', + 'bom.delete', + ] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.assembly = Part.objects.create( + name='Widget Assembly', description='An assembly', assembly=True + ) + cls.resistor = Part.objects.create( + name='R_10K', description='10k resistor', component=True + ) + cls.alternative = Part.objects.create( + name='R_10K_ALT', description='10k resistor (alt)', component=True + ) + + def entries(self, model, pk, **filters): + """Return audit entries for a given object (by PK - which survives deletion).""" + return AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(model), + object_pk=str(pk), + **filters, + ) + + def assembly_history(self, assembly=None): + """Return the audit history for the assembly (including BOM changes).""" + assembly = assembly or self.assembly + + return self.get( + reverse('api-audit-log-list'), + {'model_type': 'part.part', 'model_id': assembly.pk}, + ).data + + def test_bom_item(self): + """BOM item changes via the API are recorded against the assembly.""" + from part.models import BomItem + + pk = self.post( + reverse('api-bom-list'), + {'part': self.assembly.pk, 'sub_part': self.resistor.pk, 'quantity': 4}, + ).data['pk'] + + url = reverse('api-bom-item-detail', kwargs={'pk': pk}) + self.patch(url, {'quantity': 6, 'reference': 'R1-R6'}) + self.delete(url) + + entries = self.entries(BomItem, pk) + + self.assertEqual( + sorted(entries.values_list('action', flat=True)), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_object_pk, str(self.assembly.pk)) + self.assertNotIn('checksum', entry.changes_dict) + self.assertNotIn('validated', entry.changes_dict) + self.assertNotIn(' object (', entry.object_repr) + + update = entries.get(action=ACTION.UPDATE) + self.assertEqual(update.changes_dict['reference'], ['', 'R1-R6']) + + bom_actions = [ + e['action'] + for e in self.assembly_history() + if e['model_type'] == 'part.bomitem' + ] + + self.assertEqual( + sorted(bom_actions), [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE] + ) + + def test_validate_bom(self): + """Validating the BOM (which re-saves every line) records no BOM item entries.""" + from part.models import BomItem + + items = [ + BomItem.objects.create(part=self.assembly, sub_part=part, quantity=1) + for part in [self.resistor, self.alternative] + ] + + self.assembly.validate_bom(self.user) + + for item in items: + item.refresh_from_db() + self.assertTrue(item.validated) + self.assertFalse( + self.entries(BomItem, item.pk, action=ACTION.UPDATE).exists() + ) + + # ...but the validation itself is recorded against the assembly + entry = ( + self + .entries(Part, self.assembly.pk, action=ACTION.UPDATE) + .order_by('pk') + .last() + ) + self.assertEqual(entry.changes_dict['bom_validated'], [False, True]) + + def test_substitutes(self): + """Substitute changes are recorded against the assembly (not the BOM item).""" + from part.models import BomItem, BomItemSubstitute + + bom_item = BomItem.objects.create( + part=self.assembly, sub_part=self.resistor, quantity=1 + ) + + pk = self.post( + reverse('api-bom-substitute-list'), + {'bom_item': bom_item.pk, 'part': self.alternative.pk}, + ).data['pk'] + + self.delete(reverse('api-bom-substitute-detail', kwargs={'pk': pk})) + + entries = self.entries(BomItemSubstitute, pk) + + self.assertEqual( + sorted(entries.values_list('action', flat=True)), + [ACTION.CREATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry.parent_content_type, Part.get_content_type()) + self.assertEqual(entry.parent_object_pk, str(self.assembly.pk)) + self.assertEqual( + entry.object_repr, + f'{self.alternative.full_name} (substitute for {self.resistor.full_name})', + ) + + self.assertIn( + 'part.bomitemsubstitute', {e['model_type'] for e in self.assembly_history()} + ) + + def test_substitute_cascade_delete(self): + """Substitutes deleted along with their BOM item retain the assembly reference.""" + from part.models import BomItem, BomItemSubstitute + + bom_item = BomItem.objects.create( + part=self.assembly, sub_part=self.resistor, quantity=1 + ) + substitute = BomItemSubstitute.objects.create( + bom_item=bom_item, part=self.alternative + ) + substitute_pk = substitute.pk + + BomItem.objects.get(pk=bom_item.pk).delete() + + entry = self.entries( + BomItemSubstitute, substitute_pk, action=ACTION.DELETE + ).get() + self.assertEqual(entry.parent_object_pk, str(self.assembly.pk)) + + def test_copy_bom(self): + """Copying a BOM is recorded against the new assembly.""" + from part.models import BomItem, BomItemSubstitute + + bom_item = BomItem.objects.create( + part=self.assembly, sub_part=self.resistor, quantity=2 + ) + BomItemSubstitute.objects.create(bom_item=bom_item, part=self.alternative) + + other = Part.objects.create( + name='Widget Assembly v2', description='An assembly', assembly=True + ) + other.copy_bom_from(self.assembly) + + model_types = [ + (e['model_type'], e['action']) for e in self.assembly_history(other) + ] + + self.assertIn(('part.bomitem', ACTION.CREATE), model_types) + self.assertIn(('part.bomitemsubstitute', ACTION.CREATE), model_types) diff --git a/src/backend/InvenTree/pricing/models.py b/src/backend/InvenTree/pricing/models.py index 611c3c4b11..72f41a6b0d 100644 --- a/src/backend/InvenTree/pricing/models.py +++ b/src/backend/InvenTree/pricing/models.py @@ -19,6 +19,7 @@ import common.currency import common.models import InvenTree.fields import InvenTree.helpers +import InvenTree.models import InvenTree.ready import InvenTree.tasks from common.currency import currency_code_default @@ -33,7 +34,7 @@ from part.models import Part logger = structlog.get_logger('inventree') -class PartPricing(common.models.MetaMixin): +class PartPricing(InvenTree.models.InvenTreeAuditMixin, common.models.MetaMixin): """Model for caching min/max pricing information for a particular Part. It is prohibitively expensive to calculate min/max pricing for a part "on the fly". @@ -59,6 +60,18 @@ class PartPricing(common.models.MetaMixin): - Detailed pricing information is very context specific in any case """ + # Pricing is recalculated automatically (in the background) - only the + # user-specified override values are recorded in the audit log + AUDIT_INCLUDE_FIELDS = ( + 'override_min', + 'override_min_currency', + 'override_max', + 'override_max_currency', + ) + + # Changes to the pricing overrides are included in the history of the part + AUDIT_PARENT_FIELD = 'part' + class Meta: """Metaclass providing extra model definition.""" @@ -68,6 +81,10 @@ class PartPricing(common.models.MetaMixin): # When calculating assembly pricing, we limit the depth of the calculation MAX_PRICING_DEPTH = 50 + def __str__(self): + """Return a string representation of this PartPricing instance.""" + return _('{part} pricing').format(part=self.part) + @property def is_valid(self): """Return True if the cached pricing is valid.""" @@ -834,9 +851,14 @@ class PartPricing(common.models.MetaMixin): ) -class PartSellPriceBreak(common.models.PriceBreak): +class PartSellPriceBreak( + InvenTree.models.InvenTreeAuditMixin, common.models.PriceBreak +): """Represents a price break for selling this part.""" + # Changes to a price break are included in the history of the part + AUDIT_PARENT_FIELD = 'part' + class Meta: """Metaclass providing extra model definition.""" @@ -859,9 +881,14 @@ class PartSellPriceBreak(common.models.PriceBreak): ) -class PartInternalPriceBreak(common.models.PriceBreak): +class PartInternalPriceBreak( + InvenTree.models.InvenTreeAuditMixin, common.models.PriceBreak +): """Represents a price break for internally selling this part.""" + # Changes to a price break are included in the history of the part + AUDIT_PARENT_FIELD = 'part' + class Meta: """Metaclass providing extra model definition.""" diff --git a/src/backend/InvenTree/pricing/test_audit.py b/src/backend/InvenTree/pricing/test_audit.py new file mode 100644 index 0000000000..c0a93f8a5e --- /dev/null +++ b/src/backend/InvenTree/pricing/test_audit.py @@ -0,0 +1,161 @@ +"""Audit log tests for the pricing models.""" + +from django.contrib.contenttypes.models import ContentType +from django.urls import reverse + +from audit.models import AuditLogEntry +from InvenTree.unit_test import InvenTreeAPITestCase +from part.models import Part +from pricing.models import PartInternalPriceBreak, PartPricing, PartSellPriceBreak + +ACTION = AuditLogEntry.Action + + +class PricingAuditTest(InvenTreeAPITestCase): + """Audit tests for PartPricing and the part price break models.""" + + roles = [ + 'part.view', + 'pricing.view', + 'pricing.add', + 'pricing.change', + 'pricing.delete', + ] + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super().setUpTestData() + + cls.part = Part.objects.create( + name='Widget', description='A widget', salable=True + ) + + def entries(self, model, pk=None, **filters): + """Return audit entries for a given model (and object).""" + queryset = AuditLogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(model), **filters + ) + + if pk is not None: + queryset = queryset.filter(object_pk=str(pk)) + + return queryset + + def part_history(self): + """Return the audit history for the part (including pricing entries).""" + return self.get( + reverse('api-audit-log-list'), + {'model_type': 'part.part', 'model_id': self.part.pk}, + ).data + + def check_price_breaks(self, model, list_url, detail_url): + """Create / update / delete a price break via the API, and check the audit trail.""" + pk = self.post( + reverse(list_url), + { + 'part': self.part.pk, + 'quantity': 10, + 'price': '1.50', + 'price_currency': 'USD', + }, + ).data['pk'] + + url = reverse(detail_url, kwargs={'pk': pk}) + self.patch(url, {'price': '1.25'}) + + self.assertEqual( + model.objects.get(pk=pk).__str__(), f'{self.part} - $1.25 @ 10' + ) + + self.delete(url) + + entries = self.entries(model, pk) + + self.assertEqual( + sorted(entries.values_list('action', flat=True)), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + for entry in entries: + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_object_pk, str(self.part.pk)) + self.assertNotIn(' object (', entry.object_repr) + + update = entries.get(action=ACTION.UPDATE) + self.assertEqual(update.changes_dict['price'], ['$1.50', '$1.25']) + + label = f'{model._meta.app_label}.{model._meta.model_name}' + + self.assertEqual( + sorted( + e['action'] for e in self.part_history() if e['model_type'] == label + ), + [ACTION.CREATE, ACTION.UPDATE, ACTION.DELETE], + ) + + def test_sale_price_breaks(self): + """Sale price break changes are recorded against the part.""" + self.check_price_breaks( + PartSellPriceBreak, 'api-part-sale-price-list', 'api-part-sale-price-detail' + ) + + def test_internal_price_breaks(self): + """Internal price break changes are recorded against the part.""" + self.check_price_breaks( + PartInternalPriceBreak, + 'api-part-internal-price-list', + 'api-part-internal-price-detail', + ) + + def test_pricing_overrides(self): + """Only the user-specified pricing overrides are recorded.""" + url = reverse('api-part-pricing', kwargs={'pk': self.part.pk}) + + # Creating the pricing record (with no overrides) is not recorded + # Note: Part.pricing returns an unsaved instance, which is saved on first update + pricing = self.part.pricing + pricing.save() + self.assertFalse(self.entries(PartPricing).exists()) + + self.patch(url, {'override_max': 25, 'override_max_currency': 'USD'}) + + entry = self.entries(PartPricing, pricing.pk, action=ACTION.UPDATE).get() + + self.assertEqual(entry.actor, self.user) + self.assertEqual(entry.parent_object_pk, str(self.part.pk)) + self.assertEqual(entry.changes_dict['override_max'], [None, '$25.00']) + self.assertEqual(entry.object_repr, f'{self.part} pricing') + + # Only override fields are ever recorded + for field in entry.changes_dict: + self.assertTrue(field.startswith('override_'), field) + + def test_recalculation_not_recorded(self): + """Automatic pricing recalculation (cached values) is not recorded.""" + PartSellPriceBreak.objects.create(part=self.part, quantity=1, price=5) + + pricing = self.part.pricing + pricing.update_pricing() + + pricing.refresh_from_db() + self.assertIsNotNone(pricing.sale_price_min) + + self.assertFalse(self.entries(PartPricing).exists()) + + def test_pricing_permission(self): + """Pricing entries require the 'pricing' role, even via the part history.""" + PartSellPriceBreak.objects.create(part=self.part, quantity=1, price=5) + + def pricing_entries(): + return [ + e for e in self.part_history() if e['model_type'].startswith('pricing.') + ] + + self.assertEqual(len(pricing_entries()), 1) + + # Remove the pricing role (keep 'part.view') + self.clearRoles() + self.assignRole('part.view') + + self.assertEqual(pricing_entries(), []) diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py index b714a07baa..f1a85b4e13 100644 --- a/src/backend/InvenTree/users/ruleset.py +++ b/src/backend/InvenTree/users/ruleset.py @@ -200,6 +200,8 @@ def get_ruleset_ignore() -> list[str]: return [ # Core django models (not user configurable) 'admin_logentry', + # Audit log - access is determined by the permissions of the audited model + 'audit_auditlogentry', 'contenttypes_contenttype', # Models which currently do not require permissions 'common_attachment', diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt index e93199ddc6..1a6b6f1229 100644 --- a/src/backend/requirements-3.14.txt +++ b/src/backend/requirements-3.14.txt @@ -603,6 +603,7 @@ django==5.2.17 \ # -r src/backend/requirements.in # django-allauth # django-anymail + # django-auditlog # django-cors-headers # django-dbbackup # django-error-report-2 @@ -645,6 +646,12 @@ django-anymail[amazon-ses, postal]==15.1 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in +django-auditlog==3.4.1 \ + --hash=sha256:29958ecacfee00144127214f3ccef3f0c203c3659bcb6dd404a0f3d5551a10a5 \ + --hash=sha256:ad07b9db452d5fa8303822cccd78cd3fcb2c2863aeb6abe039ec45739b4d7e33 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in django-cleanup==9.0.0 \ --hash=sha256:19f8b0e830233f9f0f683b17181f414672a0f48afe3ea3cc80ba47ae40ad880c \ --hash=sha256:bb9fb560aaf62959c81e31fa40885c36bbd5854d5aa21b90df2c7e4ba633531e @@ -2134,6 +2141,7 @@ python-dateutil==2.9.0.post0 \ # via # -c src/backend/requirements.txt # botocore + # django-auditlog # django-recurrence # icalendar python-dotenv==1.2.4 \ diff --git a/src/backend/requirements.in b/src/backend/requirements.in index 002833d032..9e596f041e 100644 --- a/src/backend/requirements.in +++ b/src/backend/requirements.in @@ -4,6 +4,7 @@ blessed # CLI for Q Monitor cryptography # Core cryptographic functionality django-anymail[amazon_ses,postal] # Email backend for various providers django-allauth[mfa,socialaccount,saml,openid,headless] # SSO for external providers via OpenID +django-auditlog>=3.4.1,<4 # Model change history / audit log django-cleanup # Automated deletion of old / unused uploaded files django-cors-headers # CORS headers extension for DRF django-dbbackup # Backup / restore of database and media files diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index ac1486da53..361fc69d58 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -577,6 +577,7 @@ django==5.2.17 \ # -r src/backend/requirements.in # django-allauth # django-anymail + # django-auditlog # django-cors-headers # django-dbbackup # django-error-report-2 @@ -615,6 +616,10 @@ django-anymail[amazon-ses, postal]==15.1 \ --hash=sha256:299fb12a21ac4101e9706c2ade461d18deacbb6bc3750cfa6ca08aeea1fc9442 \ --hash=sha256:cb482b0e2b0aea665c83d49e3f13bb0673210aa0de285b1748a3b5e6277fc826 # via -r src/backend/requirements.in +django-auditlog==3.4.1 \ + --hash=sha256:29958ecacfee00144127214f3ccef3f0c203c3659bcb6dd404a0f3d5551a10a5 \ + --hash=sha256:ad07b9db452d5fa8303822cccd78cd3fcb2c2863aeb6abe039ec45739b4d7e33 + # via -r src/backend/requirements.in django-cleanup==9.0.0 \ --hash=sha256:19f8b0e830233f9f0f683b17181f414672a0f48afe3ea3cc80ba47ae40ad880c \ --hash=sha256:bb9fb560aaf62959c81e31fa40885c36bbd5854d5aa21b90df2c7e4ba633531e @@ -1907,6 +1912,7 @@ python-dateutil==2.9.0.post0 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via # botocore + # django-auditlog # django-recurrence # icalendar python-dotenv==1.2.4 \ diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index 29b6fea2b2..4e6ab23b7b 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -253,6 +253,7 @@ export enum ApiEndpoints { // Miscellaneous API endpoints attachment_list = 'attachment/', + audit_log_list = 'audit/', instance_info = 'instance-info/', error_report_list = 'error-report/', project_code_list = 'project-code/', diff --git a/src/frontend/lib/enums/ModelInformation.tsx b/src/frontend/lib/enums/ModelInformation.tsx index cdb6e6692b..93f670402c 100644 --- a/src/frontend/lib/enums/ModelInformation.tsx +++ b/src/frontend/lib/enums/ModelInformation.tsx @@ -83,7 +83,6 @@ export const ModelInformationDict: ModelDict = { parttesttemplate: { label: () => t`Part Test Template`, label_multiple: () => t`Part Test Templates`, - url_detail: '/parttesttemplate/:pk/', api_endpoint: ApiEndpoints.part_test_template_list, icon: 'test' }, @@ -170,7 +169,6 @@ export const ModelInformationDict: ModelDict = { label: () => t`Build Line`, label_multiple: () => t`Build Lines`, url_overview: '/build/line', - url_detail: '/build/line/:pk/', api_endpoint: ApiEndpoints.build_line_list, icon: 'build_order' }, @@ -191,7 +189,6 @@ export const ModelInformationDict: ModelDict = { projectcode: { label: () => t`Project Code`, label_multiple: () => t`Project Codes`, - url_detail: '/project-code/:pk/', api_endpoint: ApiEndpoints.project_code_list, icon: 'list_details' }, @@ -270,21 +267,18 @@ export const ModelInformationDict: ModelDict = { address: { label: () => t`Address`, label_multiple: () => t`Addresses`, - url_detail: '/address/:pk/', api_endpoint: ApiEndpoints.address_list, icon: 'address' }, contact: { label: () => t`Contact`, label_multiple: () => t`Contacts`, - url_detail: '/contact/:pk/', api_endpoint: ApiEndpoints.contact_list, icon: 'group' }, owner: { label: () => t`Owner`, label_multiple: () => t`Owners`, - url_detail: '/owner/:pk/', api_endpoint: ApiEndpoints.owner_list, icon: 'group' }, @@ -307,7 +301,6 @@ export const ModelInformationDict: ModelDict = { label: () => t`Import Session`, label_multiple: () => t`Import Sessions`, url_overview: '/settings/admin/import', - url_detail: '/import/:pk/', api_endpoint: ApiEndpoints.import_session_list, icon: 'import' }, diff --git a/src/frontend/src/components/panels/HistoryPanel.tsx b/src/frontend/src/components/panels/HistoryPanel.tsx new file mode 100644 index 0000000000..b01cb643eb --- /dev/null +++ b/src/frontend/src/components/panels/HistoryPanel.tsx @@ -0,0 +1,60 @@ +import { t } from '@lingui/core/macro'; +import { Skeleton } from '@mantine/core'; +import { IconHistory } from '@tabler/icons-react'; +import { useMemo } from 'react'; + +import type { ModelType } from '@lib/enums/ModelType'; +import type { PanelType } from '@lib/types/Panel'; +import { + useGlobalSettingsState, + useUserSettingsState +} from '../../states/SettingsStates'; +import { useUserState } from '../../states/UserState'; +import { AuditLogTable } from '../../tables/general/AuditLogTable'; + +/** + * Determine whether the history panel should be displayed on detail pages: + * - Only available to staff users + * - Must be enabled via the 'DISPLAY_HISTORY_TAB' user setting + */ +export function useShowHistoryPanel(): boolean { + const user = useUserState(); + const userSettings = useUserSettingsState(); + const globalSettings = useGlobalSettingsState(); + + return useMemo( + () => + user.isStaff() && + globalSettings.isSet('AUDIT_LOG_ENABLED') && + userSettings.isSet('DISPLAY_HISTORY_TAB', false), + [user, userSettings, globalSettings] + ); +} + +/** + * Panel displaying the audit log (change history) for a model instance. + * Only add this panel to detail pages for models which are audited, + * and pass the result of useShowHistoryPanel() as 'visible'. + */ +export default function HistoryPanel({ + model_type, + model_id, + visible +}: { + model_type: ModelType; + model_id: number | undefined; + visible: boolean; +}): PanelType { + return { + name: 'history', + label: t`History`, + icon: , + hidden: !visible, + content: + visible && model_type && model_id ? ( + + ) : ( + + ) + }; +} diff --git a/src/frontend/src/hooks/UseFilter.tsx b/src/frontend/src/hooks/UseFilter.tsx index 88781f9d8d..c36c6346dd 100644 --- a/src/frontend/src/hooks/UseFilter.tsx +++ b/src/frontend/src/hooks/UseFilter.tsx @@ -15,13 +15,15 @@ type UseFilterProps = { params?: any; accessor?: string; transform: (item: any) => TableFilterChoice; + // Set to false to skip fetching the filter choices (default = true) + enabled?: boolean; }; export function useFilters(props: UseFilterProps) { const api = useApi(); const query = useQuery({ - enabled: true, + enabled: props.enabled ?? true, gcTime: 500, queryKey: [props.url, props.method, props.params], queryFn: async () => { diff --git a/src/frontend/src/pages/Index/Settings/AdminCenter/AuditLogManagementPanel.tsx b/src/frontend/src/pages/Index/Settings/AdminCenter/AuditLogManagementPanel.tsx new file mode 100644 index 0000000000..5dfff198e5 --- /dev/null +++ b/src/frontend/src/pages/Index/Settings/AdminCenter/AuditLogManagementPanel.tsx @@ -0,0 +1,51 @@ +import { t } from '@lingui/core/macro'; +import { Accordion, Alert, Stack } from '@mantine/core'; +import { IconInfoCircle } from '@tabler/icons-react'; + +import { StylishText } from '@lib/components/StylishText'; +import { GlobalSettingList } from '../../../../components/settings/SettingList'; +import { useGlobalSettingsState } from '../../../../states/SettingsStates'; +import { AuditLogTable } from '../../../../tables/general/AuditLogTable'; + +export default function AuditLogManagementPanel() { + const globalSettings = useGlobalSettingsState(); + + return ( + + {!globalSettings.isSet('AUDIT_LOG_ENABLED', true) && ( + } + title={t`Audit Log Disabled`} + > + {t`Changes are not currently being recorded in the audit log`} + + )} + + + + {t`Audit Log`} + + + + + + + + {t`Audit Log Settings`} + + + + + + + + ); +} diff --git a/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx b/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx index 232150d2bd..728c7f827c 100644 --- a/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx +++ b/src/frontend/src/pages/Index/Settings/AdminCenter/Index.tsx @@ -11,6 +11,7 @@ import { IconExclamationCircle, IconFileCode, IconFileDownload, + IconFileSearch, IconFileUpload, IconHome, IconList, @@ -82,6 +83,10 @@ const IdentityManagementPanel = Loadable( lazy(() => import('./IdentityManagementPanel')) ); +const AuditLogManagementPanel = Loadable( + lazy(() => import('./AuditLogManagementPanel')) +); + const ErrorReportTable = Loadable( lazy(() => import('../../../../tables/settings/ErrorTable')) ); @@ -178,6 +183,12 @@ export default function AdminCenter() { icon: , content: }, + { + name: 'audit-log', + label: t`Audit Log`, + icon: , + content: + }, { name: 'companies', label: t`Companies`, @@ -312,6 +323,7 @@ export default function AdminCenter() { 'barcode-history', 'background', 'errors', + 'audit-log', 'companies', 'currencies', 'email' diff --git a/src/frontend/src/pages/Index/Settings/UserSettings.tsx b/src/frontend/src/pages/Index/Settings/UserSettings.tsx index 376f6e9985..d83f7e82cb 100644 --- a/src/frontend/src/pages/Index/Settings/UserSettings.tsx +++ b/src/frontend/src/pages/Index/Settings/UserSettings.tsx @@ -62,6 +62,7 @@ export default function UserSettings() { 'DATE_DISPLAY_FORMAT', 'FORMS_CLOSE_USING_ESCAPE', 'DISPLAY_STOCKTAKE_TAB', + 'DISPLAY_HISTORY_TAB', 'ENABLE_LAST_BREADCRUMB', 'NAVIGATION_TREE_PINNED', 'SHOW_EXTRA_MODEL_INFO', diff --git a/src/frontend/src/pages/build/BuildDetail.tsx b/src/frontend/src/pages/build/BuildDetail.tsx index fe48207322..493b36f1da 100644 --- a/src/frontend/src/pages/build/BuildDetail.tsx +++ b/src/frontend/src/pages/build/BuildDetail.tsx @@ -38,6 +38,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -237,6 +240,8 @@ export default function BuildDetail() { modelId: build?.pk }); + const showHistory = useShowHistoryPanel(); + const buildPanels: PanelType[] = useMemo(() => { return [ { @@ -375,6 +380,11 @@ export default function BuildDetail() { model_type: ModelType.build, model_id: build.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.build, + model_id: build.pk, + visible: showHistory }) ]; }, [ @@ -388,7 +398,8 @@ export default function BuildDetail() { showChildBuilds, buildLineQuery.isFetching, buildLineQuery.isLoading, - buildLineData + buildLineData, + showHistory ]); const editBuildOrderFields = useBuildOrderFields({ diff --git a/src/frontend/src/pages/company/CompanyDetail.tsx b/src/frontend/src/pages/company/CompanyDetail.tsx index 2c7b855f4b..0418273cbd 100644 --- a/src/frontend/src/pages/company/CompanyDetail.tsx +++ b/src/frontend/src/pages/company/CompanyDetail.tsx @@ -31,6 +31,9 @@ import type { Breadcrumb } from '../../components/nav/BreadcrumbList'; import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -96,6 +99,8 @@ export default function CompanyDetail(props: Readonly) { /> ); + const showHistory = useShowHistoryPanel(); + const companyPanels: PanelType[] = useMemo(() => { return [ { @@ -211,9 +216,14 @@ export default function CompanyDetail(props: Readonly) { model_type: ModelType.company, model_id: company.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.company, + model_id: company.pk, + visible: showHistory }) ]; - }, [id, company, user, instanceInfo]); + }, [id, company, user, instanceInfo, showHistory]); const editCompany = useEditApiFormModal({ url: ApiEndpoints.company_list, diff --git a/src/frontend/src/pages/company/ManufacturerPartDetail.tsx b/src/frontend/src/pages/company/ManufacturerPartDetail.tsx index 26e1d6a97b..69216ec7ce 100644 --- a/src/frontend/src/pages/company/ManufacturerPartDetail.tsx +++ b/src/frontend/src/pages/company/ManufacturerPartDetail.tsx @@ -23,6 +23,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -64,6 +67,8 @@ export default function ManufacturerPartDetail() { modelId: manufacturerPart?.pk }); + const showHistory = useShowHistoryPanel(); + const panels: PanelType[] = useMemo(() => { return [ { @@ -120,9 +125,14 @@ export default function ManufacturerPartDetail() { model_type: ModelType.manufacturerpart, model_id: manufacturerPart?.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.manufacturerpart, + model_id: manufacturerPart?.pk, + visible: showHistory }) ]; - }, [user, manufacturerPart, instanceInfo]); + }, [user, manufacturerPart, instanceInfo, showHistory]); const editManufacturerPartFields = useManufacturerPartFields(); diff --git a/src/frontend/src/pages/company/SupplierPartDetail.tsx b/src/frontend/src/pages/company/SupplierPartDetail.tsx index 376a0f08d9..36e43d5c48 100644 --- a/src/frontend/src/pages/company/SupplierPartDetail.tsx +++ b/src/frontend/src/pages/company/SupplierPartDetail.tsx @@ -27,6 +27,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -72,6 +75,8 @@ export default function SupplierPartDetail() { modelId: supplierPart?.pk }); + const showHistory = useShowHistoryPanel(); + const panels: PanelType[] = useMemo(() => { return [ { @@ -137,9 +142,14 @@ export default function SupplierPartDetail() { model_type: ModelType.supplierpart, model_id: supplierPart?.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.supplierpart, + model_id: supplierPart?.pk, + visible: showHistory }) ]; - }, [supplierPart, instanceInfo]); + }, [supplierPart, instanceInfo, showHistory]); const supplierPartActions = useMemo(() => { return [ diff --git a/src/frontend/src/pages/part/CategoryDetail.tsx b/src/frontend/src/pages/part/CategoryDetail.tsx index 8d13aa49d7..3e5bce06a5 100644 --- a/src/frontend/src/pages/part/CategoryDetail.tsx +++ b/src/frontend/src/pages/part/CategoryDetail.tsx @@ -30,6 +30,9 @@ import { ApiIcon } from '../../components/items/ApiIcon'; import InstanceDetail from '../../components/nav/InstanceDetail'; import NavigationTree from '../../components/nav/NavigationTree'; import { PageDetail } from '../../components/nav/PageDetail'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; import SegmentedControlPanel from '../../components/panels/SegmentedControlPanel'; @@ -198,6 +201,8 @@ export default function CategoryDetail() { defaultValue: 'table' }); + const showHistory = useShowHistoryPanel(); + const panels: PanelType[] = useMemo( () => [ { @@ -269,9 +274,15 @@ export default function CategoryDetail() { icon: , hidden: !id || !category.pk, content: - } + }, + HistoryPanel({ + model_type: ModelType.partcategory, + model_id: category?.pk, + // Not shown for the top-level (root) category view + visible: showHistory && !!id && !!category?.pk + }) ], - [category, id, partsView, instanceInfo] + [category, id, partsView, instanceInfo, showHistory] ); const breadcrumbs = useMemo( diff --git a/src/frontend/src/pages/part/PartDetail.tsx b/src/frontend/src/pages/part/PartDetail.tsx index 22636c7068..6e4253df0f 100644 --- a/src/frontend/src/pages/part/PartDetail.tsx +++ b/src/frontend/src/pages/part/PartDetail.tsx @@ -64,6 +64,9 @@ import InstanceDetail from '../../components/nav/InstanceDetail'; import NavigationTree from '../../components/nav/NavigationTree'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import { RenderPart } from '../../components/render/Part'; @@ -284,6 +287,8 @@ export default function PartDetail() { }, [enableRevisionSelection, part, partRevisionOptions]); // Part data panels (recalculate when part data changes) + const showHistory = useShowHistoryPanel(); + const partPanels: PanelType[] = useMemo(() => { return [ { @@ -518,6 +523,11 @@ export default function PartDetail() { model_type: ModelType.part, model_id: part?.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.part, + model_id: part?.pk, + visible: showHistory }) ]; }, [ @@ -529,7 +539,8 @@ export default function PartDetail() { bomInformation, revisionSelector, refreshInstance, - instanceInfo + instanceInfo, + showHistory ]); const breadcrumbs = useMemo(() => { diff --git a/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx b/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx index 05ad1fa814..ec1c2993cc 100644 --- a/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx +++ b/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx @@ -24,6 +24,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -133,6 +136,8 @@ export default function PurchaseOrderDetail() { modelType: ModelType.purchaseorder }); + const showHistory = useShowHistoryPanel(); + const orderPanels: PanelType[] = useMemo(() => { return [ { @@ -223,9 +228,14 @@ export default function PurchaseOrderDetail() { !globalSettings.isSet('PURCHASEORDER_EDIT_COMPLETED_ORDERS') ? false : undefined + }), + HistoryPanel({ + model_type: ModelType.purchaseorder, + model_id: order.pk, + visible: showHistory }) ]; - }, [order, id, user, instanceInfo]); + }, [order, id, user, instanceInfo, showHistory]); const issueOrder = useCreateApiFormModal({ url: apiUrl(ApiEndpoints.purchase_order_issue, order.pk), diff --git a/src/frontend/src/pages/sales/ReturnOrderDetail.tsx b/src/frontend/src/pages/sales/ReturnOrderDetail.tsx index 4a7ad11d99..6d6bd192cf 100644 --- a/src/frontend/src/pages/sales/ReturnOrderDetail.tsx +++ b/src/frontend/src/pages/sales/ReturnOrderDetail.tsx @@ -24,6 +24,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -97,6 +100,8 @@ export default function ReturnOrderDetail() { ); }, [order, globalSettings]); + const showHistory = useShowHistoryPanel(); + const orderPanels: PanelType[] = useMemo(() => { return [ { @@ -168,9 +173,14 @@ export default function ReturnOrderDetail() { model_type: ModelType.returnorder, model_id: order.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.returnorder, + model_id: order.pk, + visible: showHistory }) ]; - }, [order, id, user, instanceInfo]); + }, [order, id, user, instanceInfo, showHistory]); const orderBadges: ReactNode[] = useMemo(() => { return instanceQuery.isLoading diff --git a/src/frontend/src/pages/sales/SalesOrderDetail.tsx b/src/frontend/src/pages/sales/SalesOrderDetail.tsx index 6b472b75be..512b11ad5c 100644 --- a/src/frontend/src/pages/sales/SalesOrderDetail.tsx +++ b/src/frontend/src/pages/sales/SalesOrderDetail.tsx @@ -30,6 +30,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -135,6 +138,8 @@ export default function SalesOrderDetail() { modelType: ModelType.salesorder }); + const showHistory = useShowHistoryPanel(); + const orderPanels: PanelType[] = useMemo(() => { return [ { @@ -247,9 +252,14 @@ export default function SalesOrderDetail() { !globalSettings.isSet('SALESORDER_EDIT_COMPLETED_ORDERS') ? false : undefined + }), + HistoryPanel({ + model_type: ModelType.salesorder, + model_id: order.pk, + visible: showHistory }) ]; - }, [order, id, user, soStatus, instanceInfo]); + }, [order, id, user, soStatus, instanceInfo, showHistory]); const issueOrder = useCreateApiFormModal({ url: apiUrl(ApiEndpoints.sales_order_issue, order.pk), diff --git a/src/frontend/src/pages/sales/SalesOrderShipmentDetail.tsx b/src/frontend/src/pages/sales/SalesOrderShipmentDetail.tsx index b9a1d2a308..be1f1d7400 100644 --- a/src/frontend/src/pages/sales/SalesOrderShipmentDetail.tsx +++ b/src/frontend/src/pages/sales/SalesOrderShipmentDetail.tsx @@ -27,6 +27,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -74,6 +77,8 @@ export default function SalesOrderShipmentDetail() { const isPending = useMemo(() => !shipment.shipment_date, [shipment]); const isChecked = useMemo(() => !!shipment.checked_by, [shipment]); + const showHistory = useShowHistoryPanel(); + const shipmentPanels: PanelType[] = useMemo(() => { return [ { @@ -116,9 +121,14 @@ export default function SalesOrderShipmentDetail() { model_type: ModelType.salesordershipment, model_id: shipment.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.salesordershipment, + model_id: shipment.pk, + visible: showHistory }) ]; - }, [isPending, shipment, instanceInfo]); + }, [isPending, shipment, instanceInfo, showHistory]); const editShipmentFields = useSalesOrderShipmentFields({ pending: isPending, diff --git a/src/frontend/src/pages/stock/TransferOrderDetail.tsx b/src/frontend/src/pages/stock/TransferOrderDetail.tsx index b1ccea9a0b..2b709187b7 100644 --- a/src/frontend/src/pages/stock/TransferOrderDetail.tsx +++ b/src/frontend/src/pages/stock/TransferOrderDetail.tsx @@ -27,6 +27,9 @@ import { import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; +import HistoryPanel, { + useShowHistoryPanel +} from '../../components/panels/HistoryPanel'; import NotesPanel from '../../components/panels/NotesPanel'; import { PanelGroup } from '../../components/panels/PanelGroup'; import ParametersPanel from '../../components/panels/ParametersPanel'; @@ -99,6 +102,8 @@ export default function TransferOrderDetail() { ); + const showHistory = useShowHistoryPanel(); + const orderPanels: PanelType[] = useMemo(() => { return [ { @@ -192,9 +197,14 @@ export default function TransferOrderDetail() { model_type: ModelType.transferorder, model_id: order.pk, note_count: instanceInfo.note_count + }), + HistoryPanel({ + model_type: ModelType.transferorder, + model_id: order.pk, + visible: showHistory }) ]; - }, [order, id, user, instanceInfo]); + }, [order, id, user, instanceInfo, showHistory]); const orderBadges: ReactNode[] = useMemo(() => { return instanceQuery.isLoading diff --git a/src/frontend/src/tables/general/AuditLogTable.tsx b/src/frontend/src/tables/general/AuditLogTable.tsx new file mode 100644 index 0000000000..0088b259ab --- /dev/null +++ b/src/frontend/src/tables/general/AuditLogTable.tsx @@ -0,0 +1,569 @@ +import { t } from '@lingui/core/macro'; +import { Badge, Group, Paper, Stack, Table, Text } from '@mantine/core'; +import { IconArrowRight } from '@tabler/icons-react'; +import type { DataTableRowExpansionProps } from 'mantine-datatable'; +import { type ReactNode, useMemo } from 'react'; +import { type NavigateFunction, useNavigate } from 'react-router-dom'; + +import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; +import { ModelInformationDict } from '@lib/enums/ModelInformation'; +import type { ModelType } from '@lib/enums/ModelType'; +import { apiUrl } from '@lib/functions/Api'; +import { formatDecimal } from '@lib/functions/Formatting'; +import { getDetailUrl } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; +import type { TableFilter } from '@lib/types/Filters'; +import type { TableColumn } from '@lib/types/Tables'; +import { RenderInlineModel } from '../../components/render/Instance'; +import { RenderUser } from '../../components/render/User'; +import { DateColumn } from '../../components/tables/ColumnRenderers'; +import { + MaxDateFilter, + MinDateFilter, + UserFilter +} from '../../components/tables/Filter'; +import { InvenTreeTable } from '../../components/tables/InvenTreeTable'; +import { useFilters } from '../../hooks/UseFilter'; +import { useUserState } from '../../states/UserState'; + +// Action codes, as defined by django-auditlog +enum AuditAction { + CREATE = 0, + UPDATE = 1, + DELETE = 2, + ACCESS = 3 +} + +// A single field change, as returned by the 'changes_detail' API field +type AuditChange = { + field: string; + label: string; + type: 'value' | 'fk' | 'm2m'; + old?: any; + new?: any; + old_display?: string | null; + new_display?: string | null; + model_type?: string | null; + operation?: string | null; + objects?: string[] | null; + numeric?: boolean; +}; + +// Maximum number of changes rendered inline (the remainder are shown when the row is expanded) +const MAX_INLINE_CHANGES = 3; + +// Maximum length of a single rendered value +const MAX_VALUE_LENGTH = 100; + +/** + * Convert a server-side model label ('app_label.model') to a frontend ModelType (if known) + */ +function resolveModelType(label?: string | null): ModelType | undefined { + const name = label?.split('.').pop(); + + if (name && name in ModelInformationDict) { + return name as ModelType; + } + + return undefined; +} + +function actionLabel(action: AuditAction): string { + switch (action) { + case AuditAction.CREATE: + return t`Created`; + case AuditAction.UPDATE: + return t`Updated`; + case AuditAction.DELETE: + return t`Deleted`; + default: + return t`Accessed`; + } +} + +function actionColor(action: AuditAction): string { + switch (action) { + case AuditAction.CREATE: + return 'green'; + case AuditAction.UPDATE: + return 'blue'; + case AuditAction.DELETE: + return 'red'; + default: + return 'gray'; + } +} + +/** + * Render a single recorded value (old or new) for a field change + */ +function AuditValue({ + value, + display, + modelType, + numeric, + navigate +}: Readonly<{ + value: any; + display?: string | null; + modelType?: string | null; + numeric?: boolean; + navigate: NavigateFunction; +}>): ReactNode { + if (value === null || value === undefined || value === '') { + return ( + + {t`None`} + + ); + } + + let text: string; + + if (display) { + text = display; + } else if (numeric && Number.isFinite(Number(value))) { + // Numeric values (decimals are recorded as strings, e.g. '10.00000') + text = String(formatDecimal(Number(value))); + } else if (typeof value === 'boolean') { + text = value ? t`Yes` : t`No`; + } else if (typeof value === 'object') { + text = JSON.stringify(value); + } else { + text = String(value); + } + + if (text.length > MAX_VALUE_LENGTH) { + text = `${text.slice(0, MAX_VALUE_LENGTH)}...`; + } + + // Link to related objects (only if the server resolved a display value) + const relatedType = resolveModelType(modelType); + + if (display && relatedType) { + return ( + + ); + } + + return {text}; +} + +/** + * Render a single field change + */ +function AuditChangeItem({ + change, + action, + navigate +}: Readonly<{ + change: AuditChange; + action: AuditAction; + navigate: NavigateFunction; +}>): ReactNode { + if (change.type === 'm2m') { + const added = change.operation === 'add'; + + return ( + + + {change.label}: + + + {added ? t`Added` : t`Removed`} + + + {change.objects ? change.objects.join(', ') : t`Hidden`} + + + ); + } + + const newValue = ( + + ); + + return ( + + + {change.label}: + + {action == AuditAction.UPDATE && ( + <> + + + + )} + {newValue} + + ); +} + +/** + * Return the list of changes to display for an audit entry + */ +function getChanges(record: any): AuditChange[] { + const changes: AuditChange[] = record?.changes_detail ?? []; + + if (record?.action == AuditAction.CREATE) { + // For new objects, empty fields are not interesting + return changes.filter( + (change) => + change.type == 'm2m' || + !(change.new === null || change.new === undefined || change.new === '') + ); + } + + return changes; +} + +/** + * Render a summary of the changes for an audit entry + */ +function AuditChangesSummary({ + record, + navigate +}: Readonly<{ + record: any; + navigate: NavigateFunction; +}>): ReactNode { + if (record.action == AuditAction.DELETE) { + return ( + + {t`Object was deleted`} + + ); + } + + const changes = getChanges(record); + + if (changes.length == 0) { + return ( + + {t`No changes recorded`} + + ); + } + + return ( + + {changes.slice(0, MAX_INLINE_CHANGES).map((change) => ( + + ))} + {changes.length > MAX_INLINE_CHANGES && ( + + {t`+ ${changes.length - MAX_INLINE_CHANGES} more (expand row to view)`} + + )} + + ); +} + +/** + * Render a table of all changes for an audit entry (shown when a row is expanded) + */ +function AuditChangesDetail({ + record, + navigate +}: Readonly<{ + record: any; + navigate: NavigateFunction; +}>): ReactNode { + const changes = getChanges(record); + const showOld = record.action != AuditAction.CREATE; + const showNew = record.action != AuditAction.DELETE; + + return ( + + + + + {t`Field`} + {showOld && {t`Old Value`}} + {showNew && {t`New Value`}} + + + + {changes.map((change) => ( + + + + {change.label} + + + {change.type == 'm2m' ? ( + + + + ) : ( + <> + {showOld && ( + + + + )} + {showNew && ( + + + + )} + + )} + + ))} + +
+
+ ); +} + +/** + * Table for displaying audit log (change history) entries. + * + * - When modelType and modelId are provided, displays the history of a single object + * (including changes to its child objects, unless includeChildren is false) + * - When only modelType is provided, displays the history of all objects of that type + * - Otherwise, displays all audit log entries visible to the user + */ +export function AuditLogTable({ + modelType, + modelId, + includeChildren +}: Readonly<{ + modelType?: ModelType; + modelId?: number | string; + includeChildren?: boolean; +}>): ReactNode { + const navigate = useNavigate(); + const user = useUserState(); + + const table = useTable(modelType ? `audit-log-${modelType}` : 'audit-log'); + + const singleObject = modelType !== undefined && modelId !== undefined; + + // Model type choices are provided via the OPTIONS metadata for the list endpoint + const modelTypeFilters = useFilters({ + url: apiUrl(ApiEndpoints.audit_log_list), + method: 'OPTIONS', + accessor: 'data.filters.model_type.choices', + transform: (item: any) => ({ + value: item.value, + label: item.display_name + }), + // Not required if the table is restricted to a particular model type + enabled: !modelType + }); + + const tableFilters: TableFilter[] = useMemo(() => { + const filters: TableFilter[] = [ + { + name: 'action', + label: t`Action`, + description: t`Filter by action type`, + type: 'choice', + choices: [ + { value: `${AuditAction.CREATE}`, label: t`Created` }, + { value: `${AuditAction.UPDATE}`, label: t`Updated` }, + { value: `${AuditAction.DELETE}`, label: t`Deleted` } + ] + }, + UserFilter({ + name: 'actor', + label: t`User`, + description: t`Filter by the user who made the change` + }), + MinDateFilter(), + MaxDateFilter() + ]; + + if (!modelType) { + filters.push({ + name: 'model_type', + label: t`Model Type`, + description: t`Filter by the type of item which was changed`, + type: 'choice', + choices: modelTypeFilters.choices + }); + } + + if (singleObject && includeChildren === undefined) { + filters.push({ + name: 'include_children', + label: t`Include Related`, + description: t`Include changes to related items (e.g. line items)`, + type: 'boolean' + }); + } + + return filters; + }, [singleObject, includeChildren, modelType, modelTypeFilters.choices]); + + const tableColumns: TableColumn[] = useMemo(() => { + return [ + DateColumn({ + accessor: 'timestamp', + title: t`Date`, + switchable: false, + extra: { showTime: true } + }), + { + accessor: 'action', + title: t`Action`, + sortable: true, + switchable: false, + render: (record: any) => ( + + {actionLabel(record.action)} + + ) + }, + { + accessor: 'object_repr', + title: t`Item`, + sortable: false, + switchable: true, + render: (record: any) => { + const objectType = resolveModelType(record.model_type); + const typeLabel = objectType + ? ModelInformationDict[objectType].label() + : (record.model_label ?? record.model_type); + + // Deleted objects no longer have a detail page + const url = + objectType && record.action != AuditAction.DELETE + ? getDetailUrl(objectType, record.object_pk) + : undefined; + + return ( + + + + {typeLabel} + + + ); + } + }, + { + accessor: 'changes', + title: t`Changes`, + sortable: false, + switchable: false, + render: (record: any) => ( + + ) + }, + { + accessor: 'actor', + title: t`User`, + sortable: true, + switchable: true, + render: (record: any) => { + if (record.actor_detail) { + return RenderUser({ instance: record.actor_detail }); + } + + // The user account has since been deleted + if (record.actor_username) { + return ( + + {t`${record.actor_username} (deleted)`} + + ); + } + + if (record.additional_data?.source) { + return ( + + {record.additional_data.source} + + ); + } + + return {t`System`}; + } + }, + { + accessor: 'remote_addr', + title: t`IP Address`, + sortable: false, + switchable: true, + defaultVisible: false, + // Only returned by the API for staff users + hidden: !user.isStaff() + } + ]; + }, [navigate, user]); + + const rowExpansion: DataTableRowExpansionProps = useMemo(() => { + return { + allowMultiple: true, + expandable: ({ record }: { record: any }) => + record.action != AuditAction.DELETE && getChanges(record).length > 0, + content: ({ record }: { record: any }) => ( + + ) + }; + }, [navigate]); + + return ( + + ); +} diff --git a/src/frontend/tests/helpers.ts b/src/frontend/tests/helpers.ts index f6e5183eaa..d74e8fdfc3 100644 --- a/src/frontend/tests/helpers.ts +++ b/src/frontend/tests/helpers.ts @@ -141,6 +141,18 @@ export const activateCalendarView = async (page: Page) => { await page.waitForLoadState('networkidle'); }; +export const tableSearch = async (page: Page, query: string) => { + await page.getByLabel('table-search-input').fill(query); + await page.waitForTimeout(300); + await page.waitForLoadState('networkidle'); +}; + +export const clearTableSearch = async (page: Page) => { + await page.getByLabel('table-search-input').clear(); + await page.waitForTimeout(300); + await page.waitForLoadState('networkidle'); +}; + /** * Perform a 'global search' on the provided page, for the provided query text */ diff --git a/src/frontend/tests/pages/pui_build.spec.ts b/src/frontend/tests/pages/pui_build.spec.ts index 46d568ff77..e5f9a94228 100644 --- a/src/frontend/tests/pages/pui_build.spec.ts +++ b/src/frontend/tests/pages/pui_build.spec.ts @@ -3,6 +3,7 @@ import { test } from '../baseFixtures.ts'; import { activateCalendarView, clearTableFilters, + clearTableSearch, clickOnRowMenu, getRowFromCell, loadTab, @@ -12,6 +13,7 @@ import { showCalendarView, showParametricView, showTableView, + tableSearch, waitForDataOutput } from '../helpers.ts'; import { doCachedLogin } from '../login.ts'; @@ -275,7 +277,7 @@ test('Build Order - Build Outputs', async ({ browser }) => { await clearTableFilters(page); // We have now loaded the "Build Order" table. Check for some expected texts - await page.getByRole('textbox', { name: 'table-search-input' }).fill('1'); + await tableSearch(page, '1'); await page.getByText('On Hold').first().waitFor(); await page.getByText('Pending').first().waitFor(); @@ -757,11 +759,11 @@ test('Build Order - Filters', async ({ browser }) => { // Toggle 'Outstanding' filter await setTableChoiceFilter(page, 'Outstanding', 'Yes'); - await page.getByRole('textbox', { name: 'table-search-input' }).fill('1'); + await tableSearch(page, '1'); await page.getByRole('cell', { name: 'BO0017' }).waitFor(); await clearTableFilters(page); - await page.getByRole('textbox', { name: 'table-search-input' }).fill(''); + await clearTableSearch(page); await setTableChoiceFilter(page, 'Outstanding', 'No'); await page.getByText(/1 - \d+ \/ \d+/).waitFor(); diff --git a/src/frontend/tests/pages/pui_part.spec.ts b/src/frontend/tests/pages/pui_part.spec.ts index ed18aac434..ff79ff3187 100644 --- a/src/frontend/tests/pages/pui_part.spec.ts +++ b/src/frontend/tests/pages/pui_part.spec.ts @@ -13,7 +13,8 @@ import { openDetailAction, setTableChoiceFilter, showParametricView, - showTableView + showTableView, + tableSearch } from '../helpers'; import { adminuser } from '../defaults'; @@ -406,7 +407,7 @@ test('Parts - BOM Nesting', async ({ browser }) => { await expect(page.getByText('MAX232IDR')).toHaveCount(0); // Searching reloads the table, which discards sub-assembly rows - await page.getByLabel('table-search-input').fill('Doohickey'); + await tableSearch(page, 'Doohickey'); await expect(page.getByText('M3x10 Torx')).toHaveCount(0); await expect( page.getByRole('button', { name: 'nested-row-collapse' }) diff --git a/src/frontend/tests/pages/pui_purchasing.spec.ts b/src/frontend/tests/pages/pui_purchasing.spec.ts index be277b5e8e..3049d9146f 100644 --- a/src/frontend/tests/pages/pui_purchasing.spec.ts +++ b/src/frontend/tests/pages/pui_purchasing.spec.ts @@ -16,6 +16,7 @@ import { showCalendarView, showParametricView, showTableView, + tableSearch, waitForDataOutput } from '../helpers.ts'; import { doCachedLogin } from '../login.ts'; @@ -53,9 +54,7 @@ test('Purchasing - Index', async ({ browser }) => { // Check for expected values await clearTableFilters(page); - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill('R_100K_0402'); + await tableSearch(page, 'R_100K_0402'); await page.getByText('R_100K_0402_1%').first().waitFor(); await page.getByRole('cell', { name: 'RR05P100KDTR-ND' }).first().waitFor(); @@ -155,9 +154,7 @@ test('Purchasing - Manufacturer Parts', async ({ browser }) => { url: 'purchasing/index/manufacturer-parts' }); - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill('CPF0402B100KE1'); + await tableSearch(page, 'CPF0402B100KE1'); await page.getByText('R_100K_0402_1%').first().waitFor(); await page.getByRole('cell', { name: 'CPF0402B100KE1' }).waitFor(); @@ -609,9 +606,7 @@ test('Purchase Orders - Receive Items', async ({ browser }) => { await loadTab(page, 'Received Stock'); await clearTableFilters(page); - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill('my-batch-code'); + await tableSearch(page, 'my-batch-code'); await page.getByRole('cell', { name: 'my-batch-code' }).first().waitFor(); }); @@ -669,9 +664,7 @@ test('Purchase Orders - Custom Location', async ({ browser }) => { await loadTab(page, 'Received Stock'); await clearTableFilters(page); - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill('po-custom-location-test'); + await tableSearch(page, 'po-custom-location-test'); const receivedRow = page .getByRole('row') diff --git a/src/frontend/tests/pui_audit.spec.ts b/src/frontend/tests/pui_audit.spec.ts new file mode 100644 index 0000000000..1e4c632592 --- /dev/null +++ b/src/frontend/tests/pui_audit.spec.ts @@ -0,0 +1,100 @@ +import type { Page } from '@playwright/test'; +import { expect, test } from './baseFixtures.js'; +import { adminuser, allaccessuser, stevenuser } from './defaults.js'; +import { + clearTableSearch, + loadTab, + navigate, + setTableChoiceFilter, + tableSearch +} from './helpers.js'; +import { doCachedLogin } from './login.js'; + +/** + * Tests for the audit log (change history) functionality. + * + * Note: These tests rely on the audit log entries provided in the demo dataset + */ + +// Return the "History" tab on a detail page (if present) +const historyTab = (page: Page) => + page + .getByLabel(/panel-tabs-/) + .getByRole('tab', { name: 'History', exact: true }); + +test('Audit - Admin Center', async ({ browser }) => { + const page = await doCachedLogin(browser, { + user: adminuser, + url: 'settings/admin/audit-log' + }); + + await page.getByRole('button', { name: 'Audit Log', exact: true }).waitFor(); + + // Historical records are displayed + await tableSearch(page, 'red round table'); + await page.getByRole('cell', { name: 'BOM Item' }).first().waitFor(); + + await tableSearch(page, 'PO0020'); + await page.getByRole('cell', { name: 'Purchase Order' }).first().waitFor(); + await page.getByText('UPDATED').first().waitFor(); + + // Filter by model type + await clearTableSearch(page); + await setTableChoiceFilter(page, 'Model Type', 'Build Order'); + await page.getByRole('cell', { name: 'Build Order' }).first().waitFor(); + await expect(page.getByRole('cell', { name: 'BOM Item' })).toHaveCount(0); + + // Audit log settings + await page.getByRole('button', { name: 'Audit Log Settings' }).click(); + await page.getByText('Enable Audit Log').waitFor(); + await page.getByText('Delete Old Audit Log Entries').waitFor(); + await page.getByText('Audit Log Deletion Interval').waitFor(); + await page.getByText('Retain Audit Log Summary').waitFor(); +}); + +test('Audit - Detail Pages', async ({ browser }) => { + // Part (includes BOM item changes) + const page = await doCachedLogin(browser, { + user: adminuser, + url: 'part/111/details' + }); + + await loadTab(page, 'History', true); + await page + .getByRole('cell', { name: /to make TB2 \| Test Board 2/ }) + .first() + .waitFor(); + await page.getByText('Setup Quantity:').first().waitFor(); + + // Purchase order (includes line item changes) + await navigate(page, 'purchasing/purchase-order/9/detail'); + await loadTab(page, 'History', true); + + await page.getByRole('cell', { name: 'PO0009 - PCBWOY' }).first().waitFor(); + await page.getByText('Purchase Order Extra Line').first().waitFor(); + await page.getByText('Supplier Reference:').first().waitFor(); +}); + +test('Audit - Hidden', async ({ browser }) => { + // Staff user, but the 'DISPLAY_HISTORY_TAB' setting is not enabled + const page = await doCachedLogin(browser, { + user: stevenuser, + url: 'part/111/details' + }); + + await page.getByRole('tab', { name: 'Part Details' }).waitFor(); + await expect(historyTab(page)).toHaveCount(0); + + // Non-staff user + const page2 = await doCachedLogin(browser, { + user: allaccessuser, + url: 'part/111/details' + }); + + await page2.getByRole('tab', { name: 'Part Details' }).waitFor(); + await expect(historyTab(page2)).toHaveCount(0); + + await navigate(page2, 'purchasing/purchase-order/9/detail'); + await page2.getByRole('tab', { name: 'Order Details' }).waitFor(); + await expect(historyTab(page2)).toHaveCount(0); +}); diff --git a/src/frontend/tests/pui_permissions.spec.ts b/src/frontend/tests/pui_permissions.spec.ts index 73d29b0d6c..60f71fec0c 100644 --- a/src/frontend/tests/pui_permissions.spec.ts +++ b/src/frontend/tests/pui_permissions.spec.ts @@ -6,12 +6,18 @@ import { test } from './baseFixtures'; import { adminuser, readeruser } from './defaults'; import { clickOnRowMenu, loadTab } from './helpers'; import { doCachedLogin } from './login'; +import { setSettingState } from './settings'; /** * Test the "admin" account * - This is a superuser account, so should have *all* permissions available */ test('Permissions - Admin', async ({ browser }) => { + await setSettingState({ + setting: 'INVENTREE_SHOW_SUPERUSER_BANNER', + value: true + }); + // Login, and start on the "admin" page const page = await doCachedLogin(browser, { user: adminuser, diff --git a/src/frontend/tests/pui_plugins.spec.ts b/src/frontend/tests/pui_plugins.spec.ts index e00435a0a9..65f4b64763 100644 --- a/src/frontend/tests/pui_plugins.spec.ts +++ b/src/frontend/tests/pui_plugins.spec.ts @@ -6,7 +6,8 @@ import { clickOnRowMenu, loadTab, navigate, - setTableChoiceFilter + setTableChoiceFilter, + tableSearch } from './helpers.js'; import { doCachedLogin } from './login.js'; import { setPluginState, setSettingState } from './settings.js'; @@ -26,7 +27,7 @@ test('Plugins - Settings', async ({ browser }) => { // Navigate and select the plugin await navigate(page, 'settings/admin/plugin/'); await clearTableFilters(page); - await page.getByLabel('table-search-input').fill('integration'); + await tableSearch(page, 'integration'); await page.waitForTimeout(250); await page.waitForLoadState('networkidle'); @@ -305,7 +306,7 @@ test('Plugins - Creator', async ({ browser }) => { // View a custom table await page.getByRole('button', { name: 'Custom Table Example' }).click(); - await page.getByRole('textbox', { name: 'table-search-input' }).fill('red'); + await tableSearch(page, 'red'); await page.waitForLoadState('networkidle'); await page.getByRole('cell', { name: 'Red Square Table' }).first().waitFor(); }); diff --git a/src/frontend/tests/pui_printing.spec.ts b/src/frontend/tests/pui_printing.spec.ts index 47eb686abe..89503b71e8 100644 --- a/src/frontend/tests/pui_printing.spec.ts +++ b/src/frontend/tests/pui_printing.spec.ts @@ -5,6 +5,7 @@ import { activateTableView, loadTab, navigate, + tableSearch, waitForDataOutput } from './helpers.js'; import { doCachedLogin } from './login.js'; @@ -243,9 +244,7 @@ test('Printing - Broken Template', async ({ browser }) => { // Next, check error message from the template editor preview await navigate(page, 'settings/admin/reports'); - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill('broken'); + await tableSearch(page, 'broken'); await page.getByRole('cell', { name: 'Broken Sales Order Report' }).click(); await page.getByLabel('split-button-preview-options-action').click(); diff --git a/src/frontend/tests/pui_settings.spec.ts b/src/frontend/tests/pui_settings.spec.ts index 56c646213c..a6529a4de0 100644 --- a/src/frontend/tests/pui_settings.spec.ts +++ b/src/frontend/tests/pui_settings.spec.ts @@ -2,7 +2,13 @@ import type { Page } from '@playwright/test'; import { createApi } from './api.js'; import { expect, test } from './baseFixtures.js'; import { adminuser, allaccessuser, stevenuser } from './defaults.js'; -import { getRowFromCell, loadTab, navigate } from './helpers.js'; +import { + clearTableSearch, + getRowFromCell, + loadTab, + navigate, + tableSearch +} from './helpers.js'; import { doCachedLogin } from './login.js'; import { setPluginState, setSettingState } from './settings.js'; @@ -417,10 +423,8 @@ test('Settings - Admin - Barcode History', async ({ browser }) => { await page.waitForTimeout(500); const checkBarcode = async (barcode: string) => { - await page.getByRole('textbox', { name: 'table-search-input' }).clear(); - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill(barcode); + await clearTableSearch(page); + await tableSearch(page, barcode); await page.waitForLoadState('networkidle'); await page.getByText(barcode).first().waitFor(); }; @@ -441,16 +445,14 @@ test('Settings - Admin - Parameter', async ({ browser }) => { await loadTab(page, 'Selection Lists'); // Check for expected entry - await page - .getByRole('textbox', { name: 'table-search-input' }) - .fill('Animals'); + await tableSearch(page, 'Animals'); await page.getByRole('cell', { name: 'Animals', exact: true }).waitFor(); await page.getByText('Various animals and descriptions thereof').waitFor(); await page.waitForLoadState('networkidle'); await page.waitForTimeout(250); - await page.getByRole('textbox', { name: 'table-search-input' }).fill('some'); + await tableSearch(page, 'some'); await page.waitForTimeout(500); await page.waitForLoadState('networkidle'); diff --git a/tasks.py b/tasks.py index 8e018c0ac0..0379cc5056 100644 --- a/tasks.py +++ b/tasks.py @@ -1206,9 +1206,11 @@ def update( 'exclude_plugins': 'Exclude plugin data from the output file (default = False)', 'include_sso': 'Include SSO token data in the output file (default = False)', 'include_session': 'Include user session data in the output file (default = False)', + 'include_remote_addr': 'Include remote IP addresses for audit log entries in the output file (default = False)', 'prettify': 'Pretty-print the output file with indentation (default = False)', 'bulk': 'Use bulkdumpdata for improved performance on large datasets (default = False)', 'verbose': 'Print verbose output from management commands', + 'summary': 'Write a summary of the exported records (record counts and metadata) to the specified JSON file', } ) @state_logger @@ -1222,9 +1224,11 @@ def export_records( exclude_plugins: bool = False, include_sso: bool = False, include_session: bool = False, + include_remote_addr: bool = False, prettify: bool = False, bulk: bool = False, verbose: bool = False, + summary: Optional[str] = None, ): """Export all database records to a file.""" # Get an absolute path to the file @@ -1232,12 +1236,22 @@ def export_records( if not target.is_absolute(): target = local_dir().joinpath(filename).resolve() + summary_target = None + + if summary: + summary_target = Path(summary) + if not summary_target.is_absolute(): + summary_target = local_dir().joinpath(summary).resolve() + info(f"Exporting database records to file '{target}'") wait(c, verbose=verbose) check_file_existence(target, overwrite) + if summary_target: + check_file_existence(summary_target, overwrite) + excludes = content_excludes( allow_email=include_email, allow_tokens=include_tokens, @@ -1298,10 +1312,17 @@ def export_records( if model_name == 'auth.user': entry['fields']['user_permissions'] = [] + # Remove remote IP addresses from audit log entries + if include_remote_addr is False and model_name == 'audit.auditlogentry': + entry['fields']['remote_addr'] = None + yield entry indent = 2 if prettify else None + # Number of exported records, for each model type + record_counts: dict[str, int] = {} + # Write the processed data to file, one entry at a time - avoids ever # holding a second full copy of the (potentially huge) dataset in memory, # and avoids a single json.dumps() call across the entire dataset at once @@ -1313,10 +1334,25 @@ def export_records( if prettify: f_out.write('\n') f_out.write(json.dumps(entry, indent=indent)) + + if model_name := entry.get('model'): + record_counts[model_name] = record_counts.get(model_name, 0) + 1 if prettify: f_out.write('\n') f_out.write(']') + if summary_target: + info(f"Writing export summary to file '{summary_target}'") + + summary_data = { + 'metadata': metadata_entry, + 'total_records': sum(record_counts.values()), + 'records': dict(sorted(record_counts.items())), + } + + with open(summary_target, 'w', encoding='utf-8') as f_out: + json.dump(summary_data, f_out, indent=2) + success('Data export completed') @@ -2126,6 +2162,7 @@ def export_definitions(c, basedir: str = ''): base_path.joinpath('inventree_report_context.json'), base_path.joinpath('inventree_status_codes.json'), base_path.joinpath('inventree_roles.json'), + base_path.joinpath('inventree_audited_models.json'), ] info('Exporting definitions...') @@ -2146,6 +2183,9 @@ def export_definitions(c, basedir: str = ''): check_file_existence(filenames[5], overwrite=True) manage(c, f'export_roles {filenames[5]}', pty=True) + check_file_existence(filenames[6], overwrite=True) + manage(c, f'export_audited_models {filenames[6]}', pty=True) + info('Exporting definitions complete')