From 07f534ee11e0209618c564a4a37008b6b7bca627 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 10 Jun 2026 10:20:46 +0000 Subject: [PATCH] feat(modelling): system tune-up options (standard + zone controls) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the system tune-up to the heating Recommendation: keep the existing wet boiler but install better heating controls and fix the cylinder. Two competing Options (the Optimiser picks <=1 across the whole heating rec) per the user's two best control end-states: - system_tune_up — standard controls (programmer + room thermostat + TRVs, SAP 10.2 Table 4e code 2106) - system_tune_up_zoned — time-and-temperature zone control (code 2110, type 3): more SAP uplift for more cost Both keep the boiler (no fuel / SAP code / flue change), set the control ABSOLUTELY to their end-state, and apply the conditional cylinder fixes (an 80 mm jacket when under-insulated, a thermostat when absent — only when a cylinder exists). Each control option is offered only when it genuinely improves the existing control — standard is skipped when the control is already 2106 / 2110 / 2112, zone when already 2110 / 2112 — so neither is ever a downgrade or a no-op. Validated against the Elmhurst "system tune up" re-lodgements (cert 001431): nine befores spanning controls 2101-2113 all converge to the two common afters, proving the control overlay is absolute. The cascade pin is parametrised over two starting controls (2101 "no control" + 2113 "room thermostat and TRVs") x both afters, delta 0 (SAP/CO2/PE). Wires the two MeasureTypes through contingencies (0.15), the offline catalogue (500 / 900), the catalogue-coverage list, the report triggers, and the ARA first-run seed. Co-Authored-By: Claude Opus 4.8 --- domain/modelling/contingencies.py | 2 + .../generators/heating_recommendation.py | 109 ++++++++++++++++++ domain/modelling/measure_type.py | 2 + harness/report.py | 12 ++ harness/sample_catalogue.json | 2 + .../tune_up_from_2101_001431_before.pdf | Bin 0 -> 67150 bytes .../tune_up_from_2113_001431_before.pdf | Bin 0 -> 67143 bytes .../tune_up_standard_001431_after.pdf | Bin 0 -> 65379 bytes .../fixtures/tune_up_zoned_001431_after.pdf | Bin 0 -> 65381 bytes .../modelling/test_elmhurst_cascade_pins.py | 47 ++++++++ .../modelling/test_heating_recommendation.py | 65 +++++++++++ tests/domain/modelling/test_measure_type.py | 2 + tests/harness/test_console.py | 2 + tests/harness/test_report.py | 15 +++ ...test_ara_first_run_pipeline_integration.py | 16 +++ 15 files changed, 274 insertions(+) create mode 100644 tests/domain/modelling/fixtures/tune_up_from_2101_001431_before.pdf create mode 100644 tests/domain/modelling/fixtures/tune_up_from_2113_001431_before.pdf create mode 100644 tests/domain/modelling/fixtures/tune_up_standard_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/tune_up_zoned_001431_after.pdf diff --git a/domain/modelling/contingencies.py b/domain/modelling/contingencies.py index ea2f3c4c..464d72bf 100644 --- a/domain/modelling/contingencies.py +++ b/domain/modelling/contingencies.py @@ -21,6 +21,8 @@ _CONTINGENCY_RATES: dict[str, float] = { "high_heat_retention_storage_heaters": 0.10, "air_source_heat_pump": 0.25, "gas_boiler_upgrade": 0.26, + "system_tune_up": 0.15, + "system_tune_up_zoned": 0.15, "solar_pv": 0.15, } diff --git a/domain/modelling/generators/heating_recommendation.py b/domain/modelling/generators/heating_recommendation.py index c6eb0247..2a6e908a 100644 --- a/domain/modelling/generators/heating_recommendation.py +++ b/domain/modelling/generators/heating_recommendation.py @@ -28,6 +28,8 @@ _HEATING_SURFACE = "Heating & Hot Water" _HHR_STORAGE_MEASURE_TYPE = MeasureType.HIGH_HEAT_RETENTION_STORAGE_HEATERS _ASHP_MEASURE_TYPE = MeasureType.AIR_SOURCE_HEAT_PUMP _GAS_BOILER_UPGRADE_MEASURE_TYPE = MeasureType.GAS_BOILER_UPGRADE +_SYSTEM_TUNE_UP_MEASURE_TYPE = MeasureType.SYSTEM_TUNE_UP +_SYSTEM_TUNE_UP_ZONED_MEASURE_TYPE = MeasureType.SYSTEM_TUNE_UP_ZONED # Electricity main-fuel code (Elmhurst → SAP10 Table 12). _ELECTRICITY_FUEL = 30 @@ -149,6 +151,21 @@ _INADEQUATE_BOILER_CONTROL_CODES: frozenset[int] = frozenset( {2101, 2102, 2107, 2108, 2109, 2111} ) +# System tune-up control end-states (SAP 10.2 Table 4e Group 1): the two best +# competing control upgrades offered while KEEPING the existing boiler — +# "standard" (programmer + room thermostat + TRVs, code 2106) and "zone" +# (time-and-temperature zone control, code 2110, type 3). Zone gives more SAP +# uplift for more cost, so the Optimiser steps to it when its extra SAP is +# needed (ADR-0024). +_STANDARD_CONTROL = _FULL_BOILER_CONTROL # 2106 +_ZONE_CONTROL = 2110 +# Controls already providing standard (2106) or better — a standard tune-up +# would be a no-op or a downgrade, so it is not offered to these. +_STANDARD_OR_BETTER_CONTROL_CODES: frozenset[int] = frozenset({2106, 2110, 2112}) +# Controls already providing zone control (type 3) — a zone tune-up is not +# offered to these. +_ZONE_CONTROL_CODES: frozenset[int] = frozenset({2110, 2112}) + # Wet-boiler SAP main_heating_code ranges (SAP 10.2 Table 4a + 4b): gas/oil # boilers 101-141, solid-fuel boilers 151-161, electric boilers 191-196 (held # locally so the generator does not depend on the calculator's internals, @@ -263,11 +280,103 @@ def recommend_heating( if boiler_option is not None: options.append(boiler_option) + options.extend(_system_tune_up_options(epc, products)) + if not options: return None return Recommendation(surface=_HEATING_SURFACE, options=tuple(options)) +def _system_tune_up_options( + epc: EpcPropertyData, products: ProductRepository +) -> list[MeasureOption]: + """The system tune-up options: keep the existing wet boiler but install + better heating controls (standard 2106 and/or zone 2110, as competing + options) and fix the cylinder (jacket when under-insulated, thermostat when + absent). Each control option is offered only when it genuinely improves the + existing controls — never a downgrade or a no-op (ADR-0024).""" + main: MainHeatingDetail = epc.sap_heating.main_heating_details[0] + code: Optional[int] = main.sap_main_heating_code + if code is None or not any(code in r for r in _WET_BOILER_SAP_CODE_RANGES): + return [] + control = main.main_heating_control + control_code: Optional[int] = control if isinstance(control, int) else None + + options: list[MeasureOption] = [] + if control_code not in _STANDARD_OR_BETTER_CONTROL_CODES: + options.append( + _tune_up_option( + epc, + products, + measure_type=_SYSTEM_TUNE_UP_MEASURE_TYPE, + control=_STANDARD_CONTROL, + description=( + "Tune up the heating: install a programmer, room thermostat " + "and TRVs and insulate and thermostat the hot-water cylinder" + ), + ) + ) + if control_code not in _ZONE_CONTROL_CODES: + options.append( + _tune_up_option( + epc, + products, + measure_type=_SYSTEM_TUNE_UP_ZONED_MEASURE_TYPE, + control=_ZONE_CONTROL, + description=( + "Tune up the heating: install time-and-temperature zone " + "control and insulate and thermostat the hot-water cylinder" + ), + ) + ) + return options + + +def _tune_up_option( + epc: EpcPropertyData, + products: ProductRepository, + *, + measure_type: MeasureType, + control: int, + description: str, +) -> MeasureOption: + """One tune-up Option: the existing boiler is kept; only the heating control + and the conditional cylinder fixes change.""" + product = products.get(measure_type) + return MeasureOption( + measure_type=measure_type, + description=description, + overlay=EpcSimulation(heating=_tune_up_overlay(epc, control)), + cost=Cost( + total=product.unit_cost_per_m2, contingency_rate=product.contingency_rate + ), + material_id=product.id, + ) + + +def _tune_up_overlay(epc: EpcPropertyData, control: int) -> HeatingOverlay: + """Build a tune-up end-state: set the heating control to ``control`` and + apply the conditional cylinder fixes (an 80 mm jacket when under-insulated, a + thermostat when absent) — only when the dwelling has a cylinder. The boiler, + fuel and meter are left unchanged (the boiler is kept).""" + sap_heating = epc.sap_heating + jacket_type: Optional[int] = None + jacket_thickness_mm: Optional[int] = None + thermostat: Optional[str] = None + if epc.has_hot_water_cylinder: + if _cylinder_under_insulated(sap_heating.cylinder_insulation_thickness_mm): + jacket_type = _CYLINDER_JACKET_INSULATION_TYPE + jacket_thickness_mm = _MIN_CYLINDER_INSULATION_MM + if sap_heating.cylinder_thermostat != "Y": + thermostat = "Y" + return HeatingOverlay( + main_heating_control=control, + cylinder_insulation_type=jacket_type, + cylinder_insulation_thickness_mm=jacket_thickness_mm, + cylinder_thermostat=thermostat, + ) + + def _boiler_upgrade_option( epc: EpcPropertyData, products: ProductRepository ) -> Optional[MeasureOption]: diff --git a/domain/modelling/measure_type.py b/domain/modelling/measure_type.py index b1c4bd9c..70a52c90 100644 --- a/domain/modelling/measure_type.py +++ b/domain/modelling/measure_type.py @@ -33,4 +33,6 @@ class MeasureType(StrEnum): HIGH_HEAT_RETENTION_STORAGE_HEATERS = "high_heat_retention_storage_heaters" AIR_SOURCE_HEAT_PUMP = "air_source_heat_pump" GAS_BOILER_UPGRADE = "gas_boiler_upgrade" + SYSTEM_TUNE_UP = "system_tune_up" + SYSTEM_TUNE_UP_ZONED = "system_tune_up_zoned" SOLAR_PV = "solar_pv" diff --git a/harness/report.py b/harness/report.py index 002cbd22..632c2b30 100644 --- a/harness/report.py +++ b/harness/report.py @@ -164,6 +164,18 @@ def _triggers_for(epc: EpcPropertyData, measure_type: str) -> dict[str, Any]: "mains_gas": epc.sap_energy_source.mains_gas, "has_hot_water_cylinder": epc.has_hot_water_cylinder, } + if measure_type in ("system_tune_up", "system_tune_up_zoned"): + # heating_recommendation.py offers a tune-up (keep the boiler, upgrade + # the controls + fix the cylinder) to a wet-boiler dwelling whose + # existing control can still be improved. + return { + "sap_main_heating_code": ( + epc.sap_heating.main_heating_details[0].sap_main_heating_code + ), + "main_heating_control": ( + epc.sap_heating.main_heating_details[0].main_heating_control + ), + } return {} diff --git a/harness/sample_catalogue.json b/harness/sample_catalogue.json index e15e4537..02eb24eb 100644 --- a/harness/sample_catalogue.json +++ b/harness/sample_catalogue.json @@ -14,5 +14,7 @@ "high_heat_retention_storage_heaters": { "unit_cost_per_m2": 3500.0 }, "air_source_heat_pump": { "unit_cost_per_m2": 12000.0 }, "gas_boiler_upgrade": { "unit_cost_per_m2": 3000.0 }, + "system_tune_up": { "unit_cost_per_m2": 500.0 }, + "system_tune_up_zoned": { "unit_cost_per_m2": 900.0 }, "solar_pv": { "unit_cost_per_m2": 0.0 } } diff --git a/tests/domain/modelling/fixtures/tune_up_from_2101_001431_before.pdf b/tests/domain/modelling/fixtures/tune_up_from_2101_001431_before.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2d2095939521b99efefe8c3eb16ed4d8182ed35a GIT binary patch literal 67150 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

Jh;0gnrqME~A zygGC)`T#{i9hDY`@gD!J9nsD0q>tKFg!94*^Gwy7RzgW?o!i;9w$yl?W}QcZ?9j+Kr=j~8N-!n>o#1IT32_ihN4Kqx*>Rs?sqnC` zNtrF&SN`su9sKUMVXudVS>mIFWB;2s~Q^-iFZxRvN2MskmUT;TI02L z>F*;P&rK&L#`!-waB3BG2^9an$cY>n=qD2wc$DY6FKjHaC|yXvGKQrH|6xXe|B-fg zQ^4qhG))zYv1Mrqujb-`sgwF1PGM_6D`BsZfy7t&n}ZyAyhGg4xD(b3$BQteu;z!` zTu|c37Ois(k|5?sZD?6D+e^%@1B6_D)SKzD9T<$VD)4U<1{;lT(ob9Z(5hS8_Sm|Dof7r$WVrk>Iq zVWnl6zVT)dyEpO*I=Hwr+tkuDAPIS@sMy}}>PBIXNBO{c~-@_+H_hLftf|uX|R9 zMNe7B28 zmgn8l`r)N+*1qzpiV{gdi)+d!0+a6BX#30ae#t5$kXh!nsp}R;!pLt5;IeXQE9?!S zstTrB;9wYH_>VmvVx~!ULJEYk3PxazpG0G@e^4s7 z#aoO32`Z3Gcv$=eONS_NM^~>zC88$%^sgDH5Or{AeEr0B{TWr?d}Xy)`azQjl8CTK z1`skTXL`J$MVnXDvc%(osuUw?JKDxPLuMTzo2q*UcnEDjf)1`Y+vc^3y6t%|qCoyg z;HkQOEttGYtx8441>H>$oz+mx4J1%&9}s=jCL;AfxMVHOvU}lv0^j})6iF-09aa!r zgb1>cB~vCH7Ro4;JqwA>pdX~sm|_~82oe@2B`z(>t+;z2R0K>& zP*F?ytcd!t+dz~e0p88#ow6Jj5uuI5yQFrxp`7lO(c2Rw!yMbPU z3Y@LlF@d_9(1R84rr}ij>HPI`Wu@J;e-yhAX(i$t&|sLMYk#^^v5sefz$~8<=OTch!2hlSC3yy zbVr%1qX7c;_V!IKx%qWPlA>mptl^k!ooW^Mw%@%}qbuEHNVZ;tO$y#_LxI35;HtWf zl0BQKTqN(Qm0pqk$;ITINJB_XIjoC{!izvcQX=kviB_NMnu1wRY~b78ks%g#MtCIT zXxyTrqOpmw#jW3nl&rCBg+*mBpjP@54`HC~2iMZ@Lq0ax6169?4w}gB0>RSj^oaYR zD`{V45x3bDdG_fvl_C@gw3Y2hPA$o&ctk8LtYK)VQM`0#IuLa~&B_A$8hWo>oeket zBmMo2m77IZG7NaFv|aqNBlLCWoZhJf)ptx1s?56H{4YL|k&$m180W~gz4c?KE;ldr zyD%$lwovYMYm2;|N#3c+4abc3GCso|Ley!Z7B681vYJja^z;W+P`z-8D7+?dmGhZ^+zM*0`_`a%MN0 z8m4s^t`#1Rbi~$DWB4GY2fBBO^mgApe6Z_=-*qg$=DX%$s^P4$4LHiKEu0x&5PB#{ zNewkW7)s@u<$526c+xXIcz;kd@v_;=Bq?UF@OyFvoW-l9^iCfb7^pQ}Cuhf4%r*&q z5Bmeo8PSB7wBwvP`0ufZw4&yUSQ3fjO+|T_=-9$X5s1cN_xJV$*d@fRQAYf0Z#Hr_ z%10SrYk68C(fM*wNm5ZndMjyl#iYfgCEZ_Etmk#XJ8=h;tUbCC0fTj8b60@q@4+lpx>O{Zy`#NAr6Uf| zm;R6tL>S=|fQauT@r;VPq7dz5TWlRRdzoa(U?3{XR3x1K=KR$S$LjGB2QQIzNz~Q6 zht14pXocx4ob`7dTU|j;%7fh_AMu7#6A|H8GgozWT$8W+4tw_c=TzS@W;gLRDXj?> z9!Dha?)p4>X`<7a*y^qiUA=wZ#$er{F8%YZ1g$Gjat2xj#ZOgHbFi$)Czs+Q*+-na z*)--I8k~Jwf+O@P=$41#$!5f8-@T_H1L1)Gc77IXpA8(M<^;R zkJ^bd**>e+5EGgar~B@Guz2<>5u1-w=PF!CKj6Z+*g4WAJxx289me%*`OlyJjHvY1 z!e&Hob@g=xUlxD2%W{nv+c2NMM-kfvHJP4X-pPq$#+cFJvwGica1C)2n`uM^As`_k z6|F77s1%av0#v+|fQG)}^9&9#Pbb)+pgxI!i|>6e)5|T@uS9jPbqowhdFhZ8r9^>? z@jx!E^SeyT)YM=MU^gXY?J6(UqbTx z_npi3KYj$m16#PO{;kn#dnH=zP(*2M4EAP4}^_<7;bO zy}eUY4G8=+{r$X)ycdoR!DL=gP_G0fY~BoYPlX@t?QX4_9Ivd&Py~jMlamvZ5Q}x$ zYpSWJ)cy+mWoB;PV8dsUV&L@%e5tIeE+s`D3vQ?3&)^4=s<6$LSwL8z~(}o6X--FL{4KpleqMFUdnfA+DY1X6+CS^nieGq^)UDW z4qLx}yGq-Ks$b0|T zMOp(b_y`|w^7AZ|-$+B-I_BxvOE+0{ckb-(P-%8TVe1>|g-nxro|q}KlF;EX3_RRN36Y_%M4M)ev^>VFe=FhLySZyn8r^|q%6J=5A zLG*s-+pnUPCMT2S zN-j|sQ?CeXjrTX+5@4gS$9OhuGlF|PB7kzPs;!kM5T7M$)9|5Wd#UmxJza%P$qE#k za2UJFOAc(ndwWt89-CdbD7EBd@N|)ibYC7WH$OKcu@a?2xWlMBA88|}p7?ZxY(`zp z9_L7%>s{g3avOVemfySA;3+I;nTK%dMy>&P8UqJ0iO)E8XAN(#80pDn_C>FD3q2%%GhUbJiY2MHBHm(~(S#8HLVH1Ra85sWU{ zozcfWpbAB|un)OnSikddA z#pR3k3z@<*c!7$JslGv2^iWEM*J2c1$bPuRLRZ5Tvyiw`h=y-w6p?lSxMonLizL3KRGDJU0CP_M6F_4 z0P<^VSJ6=3aqN*GU%Um8qaW zGZxkN09_)Y58XJtyu5PA5ofA9_jTvvv8!!{B1K3a94&d@eOd5bC00G6Gyq`!V9TBv zsrXINPD<529I6bF6OS!Ns1XtZ!>|g6*QXm`u%^z@DVf%qS z2;2yoOVj+0$^{$#_OzHiSrhyGYZjHeu2>0;=4uxXN=i05MRr{4UZztU;df--4JN0y zJca%areM_$rXtd!FMwj1U{S?N=ub==&_`%AGqYf2XT>2r=8FkJ1G3q1=693(NnIbx z$V=C-YD|w1z7)cgT;>zeBLA&Qib9>`0k)RGBfu-h#wsZ(>NFoA?QA5na7CwexVc6) zXI&;(C3Pi)evJ(MQC+TRTb|U4z4EuOA-9=aIo56qN^T-b&sO9(Ps+fXzi%Q~OTLKp!+5vps_Z zc3M)52xekh4~4N?LR2^(V{dJ5O^buP-q3#Q4c+HHElQzx(~hQpV4(7Y-VfiBS^kd) zPX+bt<9YqxUyQt0>}(qbRw7E_)N#qsIS$p&wL~t6Y6ZtE5y%rsNl#sBzg=Oqu_-zk zEuVcqTQ)p9t2Wx&{!6p6r6Awj zETdca+KjeoVr(t{BNiVSW*8O*23AYKOV9`zT_m1A0{ifA7kbkVFd|{RvAt=`$gBe_ zp`-ou^J3=u{=Ts&I`|^+=h@EgE)1_lX^HI+*Z{tSpK)R?QpoAFpAgET#h8@@5Ed5h zh6((z)Fm8RU$nv@blrtvrI$lQCeRVI5U}_Lo+r{6*}JE#C_1wm%CBy<_9;uJJUhd| z?-h`n;mC-#5ISTH-Fv`Vx}mbNz09citQZRwZqsn{O)>RUWKycJ9}Z202u{e5k=R!-;|NIVu2$97qU9?cU~GmgFegT4n8 zcUVg-M2~H_sQ1l`?&7HGx=c)D#r_0Fv~+Z{v!mmZ>`p7yc0;m5)vL~2*B?3k$b5q{ z(#yK4^}s7TebzBT-6Up&siQ|ndsz7SdkJGGED5Sui2(dEf@yqw9H&a>MjXt=wsl!K zx#8hKu!#vFpdD=2vWWh$XsBqG6FDBEh-Gd`@S!uw=W!eLs$X6pPe73L%E8dku+w^0 zAX8YXZd{A73p_m9@Jtyi6OiTpuNENx%aUZ^6D)CZrvHCkyk-067H|Jywut%fEZ#!cA_!abe-t-@ zutgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH`5Vi=y7X9DI z7CrwG*1v)+V);AfX$V^cVT&Ma5ri#*utgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!& zLD(V)TLfW?AZ!tYErPH`5Vi=y7D3n|2wMbUiy&+fgf03X&lYj~bBnkCFk8g>cNT9U zY!QSlg0MvpzeNzgMfMQCMG(J55WhtbzeNzgMG(J55WhtbzeRuZ3;)lj5WhtbzeNzg zMG(J55WhtbzeNzgMG(J5|4;iZ;{4~#)BmvFBDTL{o`$eR5Vi=y7D3n|2wMbUiy&+f zge`)wMG&?K!WKc;A_!XqVT&Ma5ri#*utgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!& zLD-`I@oW*-Keu@M53@z=e`oO)!WKc;A_!XqVT&Ma5ri%J24RaJY!QSlg0Mvpwg|!& zLD(V)TLgF9|5REAbhufM#xB`c=ZSOQg|I~swg|!&LD(V)TLfW?AZ*e9(`*qF<3DGg z{)gcrj=y7{hQLJ-xCjClLEs_?Tm*rOAaD@`E`q>C5V!~e7eU}62wVh#iy&|j1TKQW zMG&|M0vAExA_!arfr}t;5dn-l(;|cZo#Q?=) zjzf9qCO5oH;8gJ^_hJhI3)8s8r}`f|mOoy*lay_>6R&TRSY=#Y z6g1lm3>E6`S))&|Igir_yCd9ALZz}lC=>V^}@WryDrU?a6|e|g@kawaMdpbKF&z(eY0I+10*)=wug}$`kskE z#{r*Gxj&;Z;}$RM@;vlG!+TVd6tXSLnC6pl>%jp8VYRKNfGirm|sM~iuCsc z-kW*8%^OuLJT!#Lk5?XGO5@8uBA9@}mNh|a-^Z0nx{nCzLUds&^5On{e~(;cUiq$5 z3KcE`F4|~TQ=x%C*#6X+c`pA{NzGdi4a}9@*ToTbARZ{r?Y5a=G zyb{q|;27cUX4~gWk57+}PgJ+}H$SE_baEv`BRN!3`L%O|jS9s~io}hJ#C3Cpm6G|S zW4U8G?RPKM9-q7y_Qzd*Xo*L1Dkbx3Web5Ntw2(Cl`^&!(yl)>{A#QellV0lbqF?!mftH@Y_TDUpcRIA3mLqe~}8TqcfND_wSG z=hxicgjWsFxk{mEJmTW^`M&5FHk;#8<;ItJyC3!`w9HaGSPyy6IIu@*B8IfwoX@X?{BBK zCT)s!)H1+H@hBwm=;lbb&DHx|mdlx&+3p7>J_&+7_NJVq0 zrU@A3D$Q(9f(5iPrIb?m_=DM05@jleK@}rHWjdLP3h~d+EfK{j8N;QWBN9~Yd3}3z zaDL!aVx^NSDjv|#-zI=LchsWLr_UC*D9e0pnIH$zJ= zPyBO+AhWQN2u!qP{|~;2l`-Sr}*UY#%fT@+@;#Pf<}xk~hmWN@-1*+MEI>a`W`R zs8lTfl1jzI2&q+&TJ=AtRbR7);b3X+cg+WGP|0hOaZ2ub7 zW`?LXWP+mBZH8xz2P4c{~<$BEAU*z)XJCvU}`03WpDb|b1_ppdk0|?UAyPf$msqh z%*4zLmNalMvDaYc;3RzBS=iVJ+1S|s*f}}52-(>=2${H;2w7NI{%r?eW8-A~H(Btt zKjZxw=l}2cS9x$6&*}WJgY#ozWMcaxv*!#sn3@0BpTq26lLZI3V9(c{BeO9w{vr3A z5hu6+f5?Kb{}Jyma(|5nj`JMmVrBhn+Ry3zS%~K&D?9jsz-c`{;9m<5&g0MUA9?=e zg)l#t0lYt#;raNS|DSSy9{)(^`TlcRpW}hU&t-f*{$T_26&( zcRYXPf0zCnP5XzH>~DTw=I<#P)88l=!(a93zo}mw>=6C>*XtKpm%$a3o$-(3a|L@w zHvaeiJ!|uSsv&>Y2yiaXTK;^GgN1{Th2t+Z2b}Al*Vx#Y30WB#|EtzNtNFicJ@emy zB?`L6h71b2cF%UjXWNbr#y|tsAzM(x2&mWcM`2cQnpIcc)1~DdZyY?L7<74yU*KS8t6aL1sj{56Ed}MFa)>y|8-=|#Kp+=R};|ZfOPc%r+H4a#eJG` znaqj&(=~H;`?cxL38y)In%J%jT2%NL&U^`2(!;6iL9<6Y_*@a8YSK8*82cE;T1Nzx z!cb~beu}qbS3$WiDSTr%k^D#{(PK*GKvZ>wmoYdE!Jy;@+NFRbh-2zsO-C#*}tSN$dxsD_Wc5h=`cD z2&ahn5`QeRPp9Yb%QE%KC-r3H-c+;dQ5p@o>s#a054;`G+~m!w@8qI6vw^<^Y6K{z z+kgq7Lh&q!B+d@|M`;U%c4Ob6nQQ6aQJ%X6XB+6}c{VgWh2+=?yhFzMXs67f#wKjl z_tGm;!p$i_2SI5!A1Rdyn_WwY0}$)|{oANHq9HSUU*h-DY{H7eEQC$Cy54=5I7Q*} zJ3Mt^Z;CfqdXFiM?Vq>>j+!)Sl{S8AhmX~_opP2(9x&v}?HXs{4B_C3~`KAC41h@&jT7t-N6nK1Lf$%q&_A7p7=Q$(-f$CHfwc%7)28cRJeSD>jMN9#a; zQuN8Nl$pCLdiNHt@915v%GM_iH!(966R0{F@!4AXeTqeU?LwHI!!=hIsT?Ia*RMo! zxgXACrrDCS)$kZ|K1{voz==e&YyLG$;!~8|Dj<20sbHn$r=UwME0#l87}JX6Z@;iA zu2sV90G0hJ`>@Z=IoPb^_#KN~$#DU7kXKeptjzl#f%u8arB$)|A07L8h^K5uvCY5j z;lvoHB5J-#!&?<#nhY~ zj8HZ{o7~far-l24CyK~p56Q~{2~rOaZr}H$xr_+79s+xdkuTmm^=2cq&}YtVeO?QK z6YxL9+CzNdXmnPvWwO2kB`>CdPMc-GIH40i%(RjtZClLIt!rhM=uM>M{ACq&wSlvH z6FWCGvyyBt236C_2Ulnsg{ddEKYZ?M*MW)V!>F9W%z#zvmr$KP-Fc!Q~Cn_*h6HhGMr;wH7_0;guAbu_X{Ux^GM$)}#2$t`IXU z6ZtBwTzM2dq5m*dH}YL3w97(b)j4(f!-glu%9sMv_z@$l;Nemvqh4!A1xB?%B$`Dl z?UJB&VmNyqHDj7$GsAZh5(#Gvbb5oZQ^D`;lTKMm06*~tIiB#RI#f3)FHPVRV>OEzW;D)?Y)3u;8{w!F%Hr;2dE%8OtKD4vZ> zS;Dg6o0fvv+BLOWlCh#@;%+T7^x|VBJw~f9VLyYQYZ|Jq&vft-82Q|7_BlzGs{2@a zJ(B!7nm$kKr48=nVFJ)QN%VFPR-n-=w9Ph0em(75v0(8*Stin;MwPm}uHk%rvB*DY zN)1(^Wx!bI5IU_BMzU}8f;5I=#k_UKZuaTiDfjvhkg(2>aBS28klJegcGuaNk)*~Q+jD&MwmOS%VSPLeN2aY|^wcwDct^?Z0(zmrL> z08c#+OCq%qixrJ-6@>#bJrx0(ZXx1Qq-S)iuNC)v`tPulk}Haet9?(P&IMl zEBwPTwUU(!S$ETe2c68U8Gz;|F8Tn01f_>BB?DK|I zY27?F=L?r)qNaE}zxJ>(+?yBhN74R${q*1Pia)r)Kj9Ua1;8J?0tEOM+5aoA__NLa zpLqozA5icwydqzJ7PbPW^q_{)Ug&(YHr_CUYJR(-yU01MbKQi?3@k52Jk&~SJn`Rm|=jR1DFm9 zLBw?^CeuM}icT*sT5`9)Pm(~L z6d5&{NjZG8fC_y3)`NsFt>XBwL#Vel=Su3L$M>E{_)++<^t23`139o4-{Q2(3*No! zD_=ao9v$1`=a&*^y@6m>R8P9~n60CLncO1tt^`_5R>56*8d9y%Y2>ZZjZ`Sp+)Rpq z-f9x2$OYI{*4Z!9dq+1i3Fg~JvNCb*R1+05lBopZJhWD>N$#LLY#9W*Z9eMF6|@$X zHI9#p?0?DSMWKyqNQ+%lgQjp#4?-8pXieyxF@7(pt(SFLp&4QABPh>Zq?<42c%^(l)GPjIC_dC*rv4LhG z)kBU`xN*R=>BTDZw^uH&4So1z(@G!7~-SkGb_%$reTET-bwZ>dtAi~Ema^2O)K<{Di z2hFdCLTJ`wd6*p!3$eb}E?tubLFQAe<#(WmqOFB4(O$LATlzCZRb}2{Xy#^~6l0nx z@`iP@N8~f)4O<@gy9XB&FFj<2Hh8HTE2FhQL#*k2X9~U8=tsOg+_#0kSex49DC67q z2(9%uLpr7=H_LUvsIo{8{H>00!sjHE^KbN#DB|uDod_qa?F&S=8z&enc0F^_fzDco zsUk|II^=9F$!4aHg+E$siip*^|E-61NNDDgDfqhq!U7__hq9$NoeRtpI6wwHZ7Y*^ zuMpMJeF^=I=7l%KN*j3x4Y^mM1RsY#v6&dlG{cn|x1Mq}shiDhYhGCUOt?auzv?31 zr6aYpxA?G2X9u)>pmoh4I|bKVG9b*zv{oXQHIPk5ac$#=405eR!2OMwzww(|KzE18 z?5)FTkqI%N(=i*)C(C24L8>n;^Y{r^)Y1~lL!^iPa;lGvqUKX`^b=&t9-P`GCx2`x zo^R(@ac1pNs#EbV1SBp=v$*l;=sBlu4&Jn!?m-Cc#zid07EM;&bKtO-Q;oM`Q_cCD z&vs<^8wBTjd=kn!!xp*E>ZILDE~sa;eMI%GhWqv7#ANol(*$w03xIb|3zb%~f5Ix! zexoZhok~XYrT*F4nZxJYLQlIr*=S;6ilZ`b<*IV>nQ3jVyc&BmMa!IXG%N*CiKq%F zUO&1h4@e^kW+Z$~M;+g;zDt>Bq-Ct_oqeB;s@dPVbYCpSHOyw!rd~IS*+9}ODDnex z*k{zv>{Y@F{gW}py-Dt@3~u`!(D!%?3+T!!GpE^3m|rM5bgmDyLvqJyyhHJ!>B3gc zmV}9nl3@74+ZPc$*!S^s<^^Z=`CBoU+2Y(XWlY(hB~Bc5nph8@jy|9KkaIorX~#xd_IW)Ozu!RB@?x$bP_(09P{2JR16O>tK1;BUqS}lqQR9+IMSK`5 z!(G?al4Fl#r_`5uGK`C{R7(kDp`_AJux&LMiHp+JCQ9wFm5Yt8={ZrCMe}aKSc49@&jncO7iu&=F1U7uS7f93Zl2U{ z<3u1_5pJ`NwU5LaNGO7Ztsqd=o*~c1h%`?Hi4iXaLzivSrTlK()vS{!z<&Nb*p`_P zhDBnLzo++@-lZSVWIz$yNHVCaJ)OJ2B&l4qX3eSeT9v}kHX%9i$4&jUma`#?VXaKm z_!iK=Toao5!0UlxcQ`^5dFs(aFI;13F10_zm1tQ;2FVyTX?A%ILl^@SxBaS} z6+at(RT57ZhZhP`9Y0eOk($q5%}wzkkhrMQx2kaUWv{xEg7mV~Mr4mS6n0x_v~^ww z!!)1)0dme>CTH22dgaU11T;>s^pT`w`t1Jr-f7P=DoPf2vsjnU4WMLVxY^)acGSuYk!he5_w7`1X{C{MLmgzn%@k z98r)!Ed@Q6sv<$|6p8+78?aOu2@=bQYSv}II@yS)#d#UT z*ia3?$I-R6nI!ci|5*N!n$wm6yX&iUzt@KgxbwN`dD5J2ElKmnWJ@D@BxG52PM?GQEX-kBCRdvu;Y zfX`jl99P5@wZ>3(R1>dfc%S*w?BI=nNfYU#Tk(f`RWlOOYBsXV_f=r;KjFu_Oc8`i zVwslsJ*&OuMa{^)486yZ`ebO*@X)VE4rm)A1&82c-7E*&ksRMe`Z2VH>8ATkNIv!( z-S@~IQT1Af2#}k9O1f_3U2k~U6fH=PI$N6W&JCAbYRpwo%~r%)Ej;dreULpL(6^U) zqqQ2QVj@G$+*c&V@l`o~aGY)K@KCRt4QIjFv@Sw9gZg_WG}>dXGv*6k*ex}W@P{@XAy*I>T(O@xladQ7Y!(!F0 za`pEZx=NHE`c5BywWb~((e6DSwP9Jh;U(v==Yi|BHyBqw4Fm|JecY2&h$cxMFHz=v z?%5O90Kz7#oLPmQ-1iD|_bIV)$Vhe%Eq*47lkH3%dm8;I^R2<%d-ujsrHs+={6rsa`ZhcQc|9ozGVwCsvyPE@Kk9L=yV z2f5-G<}d{P8_}F?YzBt1U6!edY3z!#RD)QPj@UlfWiFJSU-B{IzOhjiUuOaTM$Q8j zHq%TlH}|Sz`C3uEjNn+yD4gkFHiZ51F!waa?kndL!S|(Aa_-eB%y9Ubjw`K1XGh+a z-f$N&K2t4$k*KAJ5&Cktre^!lWMl%^#a%zIsiFLJXC`mgsodeWO~LVVA46xNh$E^; z1_zGA8k}1*YkCoUDs&%(*zfK?MwP7-IO!lzG6FP^v?nPeJYA4nx%5`~%vAh;+2&-O>{KAoP2q)#` zxzz`i6ne|4hVAuJ8NRAFy&GBZ>@>s^% zl40iLmrE>z{EvM9rk-5UW&fLc@<&bhC-npj_+3okQNYNhKjjH^j0qa>yW1LbBnk#{Gfrff?W_2TskU#gb#tI+up zCmrD@-_^t3*GaoN@yq~QXY@PrDY`0#0>wcaW+!b-SMb5iCI7bZEh)v(3m?i-acMtP z)3=$eWon+Fk4JL%2F&;6XlIsGh0sV+thad=#-Yyz)0w&-*LyQU&d5=`FQ1y-if-qX z@wF3)lxC!k@)|2BD%5Xt5>GA43GX{|L{Btk?ZgFK2hEkT6V;(YY?Dsy&=#KQtkg`U zLSMuZCUE+!v??1u<8KP&?q$LkXum>8R$`7aGw7CToF8qF#O*;8aNO%}iM>$`5zo2{ zfA((Dn~?%9De0&Vel|;-U$Ss?c77S6)Y*39Yhv@0>W~z|gF9$xcG;+8BmUEPsxBs* ziyJ-NAGkt}~_HWBacKY5y+N+d&cLp718 zU{Go-vaQL?{E2H~CEc}D)>7*J1A)-btM#?cjhoUfhE8!Jw~ zw_>#Eh%nqn_P+VF$Q#aW)tAIzJTn#ZoO61qxm9|&#Z|0kim%Ea=gDd~%1OeJ{9S9p z8`Ujwoy2%YB}xWpVtf;KPgRm^v%DGmkePzR{p0xd>&``fZ6w%Zg>1&v!7tGBLGLeb z62?-2pC$R?b27+@>Z*>@aHg86rEjBo%H6*dOxnHJuj@uJnczPvqxc%uw%Ju6Jws?uSfAeCyuS5*5m81WkU8>vy_Wv3hK^5Oc0_i8ZP!c^B- zz#TlC*rv*CblH4*oy*SCq9?iK?+3%iW6UL#=x85JPqq0a($vc7>*v+2-KO{wAf1C% zFLQ6(s8l|xy$FW1`pVLEB zOpGUqSJNj?I)&>mKqE1!qBUQDJ?UUc#ByvI`Gz_%N@C*d>1XjAHTwHWYF4hKgf;#p( z=2k{@aymu^b_9&zn+iNU2A29@5%}k`{~-E@2%VsngQYzIGo7S~zMVQF{c{8Y#y{c_ zFf#w!8SC>w^RLM;{pV!9$m*IJ=-JaLI_TOzmq6SCoHZT5MBm<+fRUb_PRzi>$k?8M zfr%NMm${X#qP32m0iBS6qlun@f~WwUfQh}GoPn*Nm4&sHr2)7s>~u0Z7T|Q~=|oJ- z?G0?{M9g*U4TKEztn>}&qzo*LzzMUkGP3jV*xB0}=vcsi@jujrvr`g{e#}9-8Z2l1 zao`-_fNGAqZgUWdH`vp4;N1H~n@>QX5?LP)SJ(c909GI|0$%28yqy-cS6Ne&rbUy@ z89=p71?8!ISC1Erm%{$9c_)j@zF#Y=7~&=M<@)}It#h?UhU?K~^U_F>$*PeExfM4w zFhO9OR=&X<#1bXebcn-&Yxz|G`?%_jLJ$TpsOj)K2d>IsD=@0w{vu^SH1~(^0N zydc3>`aG05eFe>id7nUZNxIFz))s367msxdz|^Ys%I4f0tjljkuYm2&HPHO&O$Mde zX6w@4o<~Tv13O0H;Xypd`SgD6`e|KysfWGPuw!uU-h4sp9dOtSWOWiYIkhU6d1}%+7|E;htIP2nLtc)7wwULsk~qmt{QlhMrn@f@ z-H&ogq;{|EG|JIxYUok=N$kVJwsXsn1EETNI~nnLXv)OY=YBbG$A#S5O@>*>FxcI6 zueYDSO@g~@_IQs~*HlCMA-b1NYe<3{4;kA}#^GSTBQ9*HBsNKmRPqYDMb2EM-=1Bg z?#}${o6&_Qu8?j^i(__R^9X8_>3i!Y+n+e8;6Ko~AY9v*y;Ol3ZKwT&*w5Ghg_kG= z4@l8cDrWY!4E32BDlkKik6I3Kn$ewKH^Gald~m(v?Cnv^PY)`3+^s)78SjwLH!~s& zxn$6>c0_KyGdB%TxZ8Q>xwzGR`Q@PfJgQY`5z%B7O(sEQ$$6Zq{=$^aHxifN`?$#s zhnE(JG*dDoRQen1Z9&WKEcR+%f|=R-9(0%2O`oT&0mtqs_W3379?{)u6nwo8w;h<9 zqE8wQolm8grKNP=tyEdF@^eBQNYc>EzoO)3^7QjXpp0PWPCr2pm4evDF9zv;Q{YH| zps-X|F-hEStJJqqPWITAzc=~3IdjQtDWD4@Wxj?ze~Y)c#ER*_o5@LWvIp2b3m#wI z$8lWqCUa^p9uGWBbS3(bLe*lzP}yK-{lc<$JtT^S1Ev4{Jj!@12Z(%Az#4i}8MxkD zwg1!?H;!l4KFP^pL0wSJJbM3pU-(tOcsteIFT#2W&*qBV3=Z`sfn?8W+(MJ0JFYh% z%6ZSh^2gCV8Y;({n&ARma^9D7i6lV6QuS$k#pCb{wLIsJreSd?96~! zlC!t&_7!g$CdT*Fm}{Efhpgh$&t6=8 zpgs_aY9J%!>?Qrq+3j(i&O>Jg$KHWC`JnPrOgmsv8 z#B2PL7<5|J77ef)pfWeO@^QnF2++V>BoWCbd9**|<13B<473)i0GJF*lwZXI5{2$L zPd%UPYWm8vDrcUc#^j&UwTQgJtBr%dNOFM`{Nq!YrMS;QfXYcCNg&Gwm-EFX zhpJN9Jt~dg9v0CljYHD=6H~|E)l1feLrK*N{)1G7J6Dz57Qi9v!-m_=oLD*m@t%#m zF7NCMu*OZb>wIrw0hR4<@=4a3w{T}(QMJBm{OYQjpa*V>XJV7!Kx?O(&8u=1l^+;^ zC-C2eGi@if;?UHR6>RqPo@!(174n5_`D#7vf&9GFS|~WjgD?&G^0%2`kGYD&3WkOq zR4X@|#ka?XPSt^GY11>f7u{7Z-DNn7?&Es>5j^*mJ&xPRyLUCiPm~Wpm%{UYAtg!7 z0krZT;U*pEXmN9XW9*re7tbooP6j&yApQ>b|Uv$N?+gjVlG zgLH<@D0P<;pIlVPxF>S{CNxB_qBBUXI)RJI%YLnz_Bj&8Gu2qck6Y zCC;h4JRv~Vfw&Mf7>e32>l%E!zFoHwZ+&Du(F0 zrxN(-gjQ7ELtOP2{ehHnmu{r_FoxToMS7oV%LtKx7QO2faI-g6ycVC{+KSW3&7wdH z^0X-BZiv^vNQVPG9y`VWsR{*ms~Ps+G%SV7u=c@DwAb*eDE;_-I&ljF&+MoPINeqr z=QK`;Ruj{jWZ^G|I?NvPF9*f~?KCTTe;sSt&Nc02q#JzrMu=PG!0~FJxW5LU!9%-F z-W316FTKh8cW1M?tcPv_UWVs)2P3-C+{(5zsG#U2(?k@)P5a71jlu<1^13HJikA}& z=`>9p<`;Jv7m^WxYs5QtW6yXe8%DmGVWtw19P{5Lh7L7XHD0AtwKYCx!PX$F(aH{b zyX^TQBau;MFDLgX4&)&j|3|V1#JgeWk$l4*Y%S#B;Sgr7R(g6S*bl0_f>a8}`k!I5 z?EFejOc^Tsv4+d!Kg~*suyJ70l7OP!_RCJ!rh4O9@KdF2h~CCDp7lrh#%Fq^5juP5 zi(!rQ&0Gwo2n96VmSoR~;)nMnerha`aJ~fc>oX;bAA4)oHfGE*uYx<#4BN-DBs3m3 z>jSll5rTdq(9)nZmYaSD)r4u>i((DcIqHKdGvt3*NMAo7;3un(E?4p*g7A~Ty|-+u8td#ULM!#K zw7DIPylAkRuw7hD+uQFJotivZohu{XrCzwHUz0Aq_yWvY)@Ja=jMX;<xiJZg+d! zRblk;z+zRwf`w6#renLmGo}KLyVW+B?y#yHO=mv_4s^0ARXlq9>R=kwb8U4>ZZh9Q zm`BxYl>lh#Q91agvqHt8vufzCMA+FNG~QN>a(1R8>==5q=n$v4zjD%<6$S1G!JXjo zWA`E7{^3EKY+-MH2dv@t#r=rU_C%SwN=dr4e%!-tzn^ZaeiWlOlWBndS4Vg!lE82P&u@fe_1VD^?zl5r zF7IZQR2pDKL5+TK@S-S>yxf_p@a68f#J#Wd%|y}}Wqf2w*t#=GrpDDME@n~ zv6n)XHQ71u00I1k?r?=e4!cy}s*$D@=uV1BR!5fiIg9}uq$OB;sh|&j7xQAo?c#N$ zujF;5Z~H+X+QCb1D?c&o*#C-2;yUMKmfPXyMj zfhEi?@j$6C^}?=cyh4xtVIZAd7lrkv;K#HTHgmCBJP!)3b;0hdyznubdcG-atx@sF z7n}lg5-mE1&fVD-8_;)o+4J+RTh-)VN)gg>ebEawELJE-NBM_J(j1&frN9xpds`dV z1P%KA-Mqds>}59K@5aoxUu7Q0gnMdk8&+vkct1wWYY=wn^WSORF7jnKjKzgXtMDX_ z7j$FZGUDhbq%$23yg5)J&%iQ#2zg|529ITsIFZ-W#-}fxhGUgyGq$}0KDEk_WbV6{ zvHO22_G(le@ie=yGEZoq@@)wljFrKPOTcT=%zF(39m;cM+bo8ioGcBCXv*0ro1n7A z!us?pKA>@Qh9-{4^p*QKi~IxyO==g;liUn(AstMxi^+q!ZH%zq*U5l% zP*CREZ9MZ8X9Ik=Ier41c}x8FRF)p@%|F~MlTNey&fra(tZ`u<^qf6c_fR6hO$y3L zAf|)<<0X7Lb`4h-Xr~|?6L?69w!WH|U+^&W;L8MxcNl`HzB~;_rsCt!YpuXU#}e%* z4qcvfUW1~qd_quKE+bwl$62P<&=whlbzwGiuI`qtGfX>1cC zNq5Zifsdsp0eDO90C(K~R9XhKzgdsMF4Pff30dpbC;$s7_-=N5uIoQQ_q zqgX+;@~@b5_82CX9vTF2QxC&$oXBc58UX^+gfUBGSl8|b$K)%y3O|GH(GbPY4EbCr z=dW-P5~Un&tsCgDZ74o=N;nUqzD?Z(^_}fWxlD>C1be>2g?HgE$z0Cvl()0x^tB0m z%FD)5A%Z(*g5&k9{FS}OFEXYz@Uc3Fcm0$-*ykS6q@Ax1I}!yn8g>?=NHWa>Dj~VN zGY0aA6n^{6-;Q9(wadRv)^ulV?;u}?h2eDnBtQMedx7of{o0#d7~Ic7au_V45&pS_-=Nke(-nQQrEbfQTroQ7oi{uvnYlw-8yC1_pM z3Ic1HTtpN`_-^4o=X*>nnv_DD-RNtR#|V;RC$k31PLr)Tnx}?>6Vbd_s^yVJ>EJQ7 zY+RwY;f~oJ;ioY|;tVgRJSDE&rKv@}vFhs)%I|U8%tTT-5q`Oeb*jK9Hgne8eCx3y zDV;u#AI(|UMwGNijSu>G^E@fZaCr9q7_oqj6@!u8q4wWYN0);fotkqQR8p>u_Uf~+ z7*yL8gz4DA#%jxeCzUHf^2&6;*nF0+W!g^)++f|tYDE}TqBfHztC;5{! zX8}tp`|IgQKWCmy|HB)}%b`dPwU^T3x~LURM3_EE1_C_F-|My4y3Wm_bF|muc14(m z2rA7gFPyvQQgS748aLp(sG>jI8WV-m(e`x)I+Kv%L2nSqm!w3E>)Mth@)gH^kXb{1 zt-p7J$iSM*#_df?Rqf&kNq zN>SCf8=ky!`%)x1m}?I3n7I+Irs3k*(Gn&01n(8klx+&B`g1?=u@oI11Pn*y_rVce zI9@C640ibGyEru1k4RIgbE8F1y*hGqnQLfc!)MQ=e+Q%n{d}NHX`NrkG|NbKp49t-ofj#>2y&l#Z(Qd= zRFnqf1|{tk-J`nf`&30aMDy)ucj*lL{Mm&YBb<2>e9M1Yy79Ua)}cV3IU`y3`oILI`5_tUW z2ZKnf0?WtNKNpJv>T<2Cgd&{c{sN53S#h^g9rVKfh$l=NLU@%WEGL^yiopVB8nB~& zE9?%M9FjhzCjoUhHo?Pg#La{g%BP+R}y(6VMxo`$APIkd0 z&ec6mNSf2^78RjTfq*Ag;|N^mChz;DsqJIELQSkA2P7ep{klWDCe@+XZGx$E6~5nD zoLlvX!ucxx?QPf;iFOIU%{TxvI(?5sN*(XPywTEJL_Ejw0PYV~<7V)GdD|2u_|j!>$2MQ)U+@H4g%!!s{TA{JS|EFD z>fp*dhi@Yvl|*(~)i7{t&j5(i0YldU!p+guSPZnlrUhNz0W$9PH-b5XoVL$X7G__; zzQ9u=A4|d9k@o`MbXOt*6P#m)VrDAI6sqv_W~&6uZmD=^bK!d^_7JCnc0X2kyoj|s z;y#6QNEYLJTe`dB0|QOfC%U;5)GLopeiHwZWDE|Kz&`SI)h{PUKHv6PjtL@4*O6@y z0#(%Q5>G5*41V=^qw7dLF5AF0{>=!6S%PY^imAD z@dZ5Cw*40~@L#Ol&qnM2VCDYrny0~*>VM2U&G2{3(`?Kv^#92`4Qu~lI&L!EVm4N~ z(yfUj$Z5KnQzlhEB4$S6fZZ~Bfn*?_M%BOh8eXN`NgksSzDS^gt=zjAo%l-|3>p+C zfBCoEna1*jcW^IXBEA{N3Sqv!_Z38b9DHK3dvd#efQkC{3K|}RTrQK(`@aS{e1nqm z)I*AyI5iRAQE=EFW>vXW5UAEUHQ&OcAgd$@y?!lNVPPu1NY+Ru>DcfY<0I-qdJ{Jb zG39YkL;DkRx|a_NMrBh&`9xfH`8ES1BO^D_+6C6a&P{{ZN^Bc%(xe${%V_n)Wp;UB zMR_?rJ3ISlMjl4y^e(31or!_{TFJw4iH(dk*{wtSL-GSGPrk2Ml3{?86`H>n1RB%gGo%f2PEM4-5?4?h!)bhQ?OsrTl1bc%{01HM_=C zww{vxa=IJyJAzLKX?b1U8!~ok7>(7L6D6gAzKxF#bpnPNND7v`G!^H}8&enKqcVW_ zj`a46i>ev8G96=QV+VmQ< zfB$WEt8bcFVa(Oz4ffHWN05hDkL}|q4jfCsTT)RLAsk3Vw1-p_yMsei@1{2xW=fu_ zb~${kG~*{PO=8jFZm{CaWMW1}0;`H26~-b~UQNRdYl|AkM#_W{jb!P^PNByl{$MqX zpEjUC9X!Kcp&<{0qiPWST`9?)X0RHwNNszvU}_F75p;LtTL6?ufYne$kk1}Z=tc{G zb*E3ms`5>7+*E18cpgK|X#Io}pU$+7gM+e&MyZ{@1~%E1-lhQEdj;{rxVgNzF+KJl z%uN&5{5nqj4cihhOtnWRus8>*vbpwV*l;`WMbOwu3q=9E@qlfoTNUyHqQRk|z7NHX z@>w&Ox6>`_%Qs$_0{AWf=V{Z+F@=U-l2A*Aza8dVzS`F>=Liy%H5a=Nu7Kftn9SD$5Jd3bopoZ8tbM6AxYD!qVr zVa0s1OS_J%JJy`i-@H%-ylGzly+@kIJ3%ow%@|+(Q2PSVQeJMoJ?z1jFq(aSel95~ zdEJ=V9KN}^8Naoq#@g6Y7Cy4Q+~9yvv3gr*ZEvH2@x|>M@DAhVlPu*-h0jaT>13@5 z$_#p%yQ0_oMYEe0X`P4){xE^g4Q`>~p-ab=bsA;WdCCGB_YbtjAU#Jzm{8LV>&QJ* zGj(;f%xdjA5fPDGO&vnsj`D*HCbvQT+odSVK=;lRl%#|wAK(MgOrC1pG5mFx&7 z+TWuC`MgrJL!IZVYr;kI_Jvxz4~dhhI)H1h&9$fg7MfUe>c^b_-ApH2?IBiMaobnB z;c%Hxou957OX9b%&;{2MKd>D+@h^WmQ5y=C{=vvp`(u)ekD(Tv?t`7*=*wTz!DY-2FAy)$1zazbW{cF7yym>H0f>aPCNetrFB&|y7v zFrZ(4pp4sX&t5@y+z|`Dz9k%RjaE3h@QWDrO&5>NyR!1!^GcDi7N{1|Uz}plj_r=n zEG;xwU+LcF5=Bc6fmq)U-^#1@w_c+EJl#< zv|N*EjkHpJEY#{WGw7&hNb4tT-9OY)kA3PWy5%rY2$~3~>hIOAhB0KHw?@DK#p;PV z`@chN&lCU>zSV6B8}MhskPe|`^DNf7jgUKL>D-=ZM6#fKnl9TD4}t|(7~mAe9QNYX zp;OTZC^E{()L4x7AK%&%-rP=_`9u4oqgNiqg#yZ-e)2NeIju1-xH_s#ZH6RRSI;D- z#9_uUDqsPIM+PEV&@kU(d9Kf0Y8cYu#7e22HSO)~^=s>Egax-?xG-$phG~#0K9(FE z9fe*Xx>MHAUe#O;hDxnw%Gu`nPJ2_Kz{3Q2k&%%}N=l#xpUt^MbG<3HwM(4N24xQy za{Qc_8>js3=x&ZU2GHU6&Z`$*7@8T2ifUO}lHt)}XD`epT}GIjpKHTq1d6*81x}RH zQ|n$X%TX;kxS zXyv@}bL;Blb-N9HJv1CABWj38W5L!ywd8ZblIK$0)PzX1Yiyc@kz9==xfMD-NB1bO5EAv1==z7NRM6f054Qg|J;(b3=<$*SPUE;j>%dD33gBOTDrzRF(BfOAsb8}tA z=wpEc=H=(ESXs$hRZke5#_O2&ScXZ5%APoLVFa7Hxj1KI^r_OP6f*I|E!euMCAWlI zYFeaiycxv)8F2+2R9u>6VqxN+h&)wPY-e%xrZK=GvpBF3=2W|1&d5ERv^@1E;zuGB zYIT0gk2kv;E6$tao57W5YaQ7KgVZ&@CK~a-r~*mZb5a4*nw|MFu=AzYijY2|l(Y;Cbb4>ScG?Dkvw@B&GO|X!`|QuQa>=p)MMXvI zVc6B;%5lcNcAE44!7dC@S}5o&@1JkJj;^5Uz3#-}2xzOnzPb_+5DQoO@m;6u-7X?Y zo>yzzhnG5;`%0_Iik}KvU6SSTjeBmR>@Lsy#j6cLrWw~JE?aEzBfrUj%Sxqfur~xM z%9yGFgQ19FKlV5{IHDWnep0>pIDgOG=BT<->@WT~2vl^B>m49&&Q_bVs9JbKqcO3Nx^3)LjRZ!InX zM6Y}422Df5QON={@CG;{%Xt{&_6#UrW#F5Wc>E5TRs?APC7C=-)Aced*@Q`qK1<^t2#?mK@W`f6>AFe3ryiO ze~aNSMgfuv3yr&A>J%pG?EWcMiKsz4{c8p)SPfhnA77DOKYEon-ELll1?OwQ@z<0a@MNkWJh86@B zA%d)>NtB3(1=0(p&w``UX-B9&d32_*>Hd@vmysHum|_^62ow}0CMqq;t+;z2PykGb zQIJgrTuS!t74$i8syvmrbu!_*d7i~@p88&VYGvZEW)+j|rtI$R_NI^g;;iyUX9K+i z6*ybHV+?gSp$jY8L&dIG<@D`KWu@)3UnHvlaV6p#&|s*6i@)aZE-6XoLEueI*m24ndm5;Y*Fry}P(q8r1v<6+P~di(-?hh50&*18n(nwf+Na zQN^CK6z5|Yo0Nc@&!kO7r?j-%6cC3=$eT+9^F16(#GiD~f(oaOk(HimJW+ z!%v)Vn*_efDJV(Bdxrx0@8)ZJioqRHfGZ4RQ-`W@T%5!((TkA}_#XmAay_?7s1~6; zg>UB%w=t`1+|*O{JWtZ8Qp1XK+A%*<+4>))8fnao;M@K_ut)*%QRZH!@jO+pW+32* zYh^H_LYbJEGW@VpY7OCTE53h)k?RNecI@+NL_JxRd=1k?gWC7>)TSIE{DVXM)#JAk zol(Y`C;*?Gon5nYZhn1{xUlIZa~LK|mukgFo9~_~QI)PzpSE6vPV(PwLxI35;G(jP zk~N#4R3z)6nO2b{?`-@|s4=*<9M)M`?nM9rF(Ie_M4R_@ZNaPuHt_Awks&5ldUzz{ zDBPl=qOpmw#jW3nYLmn2`64fV?PO6BW0{+tLwD9|( zD@h+EA=lXzS=Q-PsWSBpC3TskzNF9GqCCyF2LCoKGYi?`@!%$jCUU5WM)viTYnOs;R5}be^2I=d67UhTb>w${_A^ zZU3=ra(9-nT>Z3$H^*S2K-g?}dd2pLQ|zRoT!Pv4H9mk;o2x<7qW0{|$1J4uDZ3^nzg=8}`VAP{%bFGzg3oM6 zQ$jTl!!*Ofkd9bdYYiSGbV2vd5ngV)hYz+r@VgGh*F4u;47KdFHvUIhb%itI3jz-% z$tfXb2SX_wvmEb35l?!@2k#GxCSJC98Ye~%7Jg5vfHQx!l-A`90|T|Do z=WchvJ|i6el6ssy=i_@ULe0pzBBlhQI1^zm1{#*IQ3S$q*!{gdK2|YNE0htxx|@yM zjq*|Y*P0#{NHjhi6yg+Q5nhU#-O;JhsfqWO73+E3@Q$2;rQr>>&|$AS;0`3jW!g1~ zd&u~*ObUwx(>ekqx3x4ih4ti0oAr?h0m3uzv)q?W3@>!MHvaHEzScZBh z2KpB|#FpE-M&Do|suad+Qi1l~7OhDqr6k5Je>iD=Z#OZ~sYpP8cS%b_kvBX3MFFG$ zqnV~jYmeQ;()adb#P-2Ps2W8P>#(hzO$f`x!?t>S#Kui%RT6nM z?`}P_8B$>~3upCR+eU|O2kJb8MJi}8-C1L(2l=LLO&qBP&V4i?XTC1CTgYhQ&4==on56+1;Zr=@D;vckB0E3c~ZqerE+ z5;P@ztD~pG|FZbIZKg~3*oN8sJ&MRKsM+N7@=it+Guo8qBeU1t2FDO5k*RuQAOaE+ zQqkHHjB+7~4nWyc5oq8eI!|XG{d9sI0_qd>dcyp9Ue;`08%Nxn`y_hzt~RYj5}xzx*_myCl4yKz5oG~QrNB_l zu2w`k=Y9O9jejmtzP4t6YmE&FIhXa$@i71mGx{vJFO25QX7xet@YegaAsNQm9(Td> zvZe@!lij)o+Th^eg}sy0$>#vSj!9)@w}XU)c&OK})7(A1w3dC~$7;nEX20Ewt=l5J z==-XTr_<;@$iu=iIk7k~Im^PuXpbQe*+aq@<)opNK@d z?KD)CmFs>5{4zB&YqaJuPS*E)1in;KQIn9MjRCjQ@MrJ?iPhMq%S<5G4T6WCoR09s zQ&b|L{eUFP8b*pfiiWw*(;(pf-hp4A!02bkeH9y>sH}8PXX8Yvtrdj!F8)Lo1Vy{@ z?6NXTdwUErnNV3JWtH9C9bikL_6c+X5+b{iu5oNy95?y9RINmoI+ zX#FzA&iKZG8Go+=c;_WY@FG4S3eZAM5>@%s|lJU4Q?H^fb0gBR^ zo`<1gTy)a|of9LyY|QLRl?orZU@b6~Ti<0C*9V!nsW(P*xj|cR5=`bd=|KOW$UDjA zJl@`801Zf%w9b0nCwI?VysqRChTAjSAC1ooj58P=AJ@&bnwdYpR%N!Su$e9c3Qv?p zss+;eo^QX3621Kyw$HXg6gMa#fNod*Bjz3f2sQ_O9k0XKp^16_cy!A$J_99ya5OoY zBvW#Ux|niBP-nEi@fIH&g*Dovaho38>k$H!a#d_Bg@GTLGB*t#O176OKhx4wXqT)& zu?U8;D!*jI2E4Z;M&YvFg^N^8N&-(8DTw!F;d1kH(-SIDIt4ood-9PsavF$EM@VMW zRPAt%)HvQ1ek-@OLudNEdkvn#vX{9FrflTugQqcYpcnXb$2WEC{zWd8Vpe(2gcc7+J@ zS^{`xWojGjpHzS5K@b8T^6LJc*|SEq znV>seUP?oqXI0u%f*Xv05j~=zq7b}Iux^U~qOE@2<-17f!uQmx88oNfDSXfO_bs{W z51Hptys9mB-#qOVC-g=IcEg9ijW)V9aEiU)N1pIIkv^NzSte+W(|X@8nhY3|A0x!} zA?*7p;e91y9fj@&RmF(+Aebw+%%C2xkZf7AEPIN0#>3 zPS^l{ILhwszV|u_`VxrtZm|nJc#JPVxq4JW$@XMM8q(tYH~mXfv{dIu!>gGuWhf}A zV_TiSYQ2yuJcH+}=$z^sghdY_r%OuhS|S~H)8W>x<7Q|d?DJk#+gBhk0_Xs3Y%C3| zCp@{g*1f7#_q#vuxL<(BHA|J8T#WVg%^-O!C5ELHaLY;zXBonqmnLto6nkN=;~%+- zX%5J*Qw%AIb@N}0mooLSgk>=Oj(M=-Ph}MbV1EPeP_isQymz*V;2m5`4Sp>_q(qPKC473N96hd%pWXS zGb0th$$EX3yavuvrm2@ar%xyPW~F6=N(`pw)Mm*Sb_L*S+KT<^oQ(^l~sqf2PVrT%3arQyfUjJv_4 zl-8$^-$7)|T0sS{sRMclO{S*i%&g2f1jjtlfoMP$TlV}OQeTPd zLn&FwT4wd>5rUTjnBvPkLYkz%Rfth2Gu^?~GI#`dg_sycMFs7aBcz>;1SXEC)J|8I zh?dODc+14@_>gZAAwO!$6>Q2A+pwHT(5(0T$)!SQp8K~`uaxzMm}{o}E=4ZR_}@QCae?$!ADsntTgWPFXdtDBp&G(N;)8=<@Qi9jl$bWBc~^ zO>`+|NLW4G8uZO=buI6k*FMXiRIr36))BDhw79L0VBc>pUpnn!Z(*a7B)v~r(Ih4# z-P|mrS@_n1wrOl+CHo`hBQne|EDQ{+rkp3gAu_s99B(-G;o&ayrY~Sb%xGhK(}9x zZtwdF$Vqo(NL>gWyoT;IU?tgDS=mu$SbSEDg$lQ6u=ysnShb|jZ3`JwuA{hG1|Vv* znd?zkksWtR^>h$OuAuT34-anzQxzM&_ir&;CK5 z1F}1;B__hhc3jl^7J4^PR5cw229jbwd_!s)n%UXWadB41l^WY2>7klcCywjS?7k#E zLFs8_-8H)4m7PATXn~$jrUWUYM@M^DAM^L($55E!Rj?8OAItEkKYqk_=&IV4Gavr ztY-N#1SRUnH3_=G!=nwaH1O){0Qp~*Bm{_El`%Rjex`wz24jDKhG7Qz-m*rNZV zxDkXcg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH`5Vi=y7D3n|2wMbUiy&+fge`)wMG&^= z|3JgH-!V@^*dhp91YwIHY!QSlg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH` z5Vi=y7D3n|2wMbUiy&+fge`)wMG&?K!WKc;A_!XqVT&Ma(f@e1i0z+Sy#0sSBIdud zcne{RAZ!tYErR$hg7_`6gZM3i_$`9?ErR$hg7__h_$`9?ErR$h`kP<)e?EoyErR$h zg7__h_$`9?ErR$hg7__h_$~T>+HVp2KWCo)hy50@{2lW&ge`)wMG&?K!WKc;A_!Xq zVT&Ma5ri#*utgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH` z5Vi=y7X6QBi#Yzd#oK?FEn@vUi?KU7D3n|2wMbUiy&+fge`)wMgLE;MGW-+ zoPGKqhKtz#j(r*e7eU}62wVh#iy&|j1TKQWMG&|M0vAExA_!arfr}t;5dQ^b3=IGM)msJ@IxzziBV&64 za7fU~+{#wbT1U@-PRPK~M9)A$RDe#v#NJNMz*f-8!rIExz|x+8olZu_!hlYk{qL;Z zvaoXS@Yvbg8t7QSfAJTN9+5@o$LM_`xixFFxYQ9_p+UxA`v?R83Ly!3$_M`*L%8ctR&gJ6?wfRMV zg=4luS?Fe0ybRz}vAkQcIlj3`?BY|yj~$C2uiZYCZFLZ>Z-25(zX)c)*MH59KQ>fF zXfjki9JRS&%**iPW!%|%RNJFK-)zqgTtz9FUUL2{foKx&*ROetvo zwd^hVvgGPBiHo9@Aq(Zgyq}v6)s$dk+D?U-V83AXFF79e2(5k7T_SxX7VP$iksI3H zi2#QI?^30oIG6U?pwzw2=KP66ZS|pyw=sm1YLSwF*}?>*di{s|IhT=vw?0|+Xsz5% z)RA9HKdan96{*z|nql80CSZ@4>_=)S;G1zR7psMY$7GiRrHdL1tXYW>^4%FnpSL z@2SRlsCIS51vffm$kFjKs0cNY;BJ8fF-$VFQ-oYNexY#CzDDjC@KKR$N=YjOp(&M7 z|}JOkrDrP-|ipk{OYso4q+mQn_mM)t-+26|Td z26X>+Lcq$-{#WgOe0Y3(e89ecxZk^6pV;f{SSfB>&L7yUT|Jq)zPr2x-y{I=0A3EN63n+i#nDs|slONB&U^$elv zsjP>`hy0;PrDR@-Xm&svpH8ljd6~F#t*m>4f=7eO@J7ep`Br$dr%W8DSGE4``G)Hc zU72`Jso2lXvVE?>yV4$_pzer~ZycJXKqtsJ4i8jtJS ztAq0c#}Z5JTw&2D4&Go^*%&doSP}4x7l~jK3}Y3EWY^9WQcaQSUF?4TjHJ_B(>m#z zx_P2s()q#V`5ef^8OX#F%p#x2t(z|*8_!oZRQCJs_p|ILa53k1<}LC}zNCt2<%nqI z3Tx&F=@f{nr3>q3s2BAWf(7rug3rP@duRKgL6Aq8n_9B6a-ythu3>Up^3>)OIFXyD z|3#%@`j=EH26{-Xg4C-2Ikk%UpQ=^==pc-N;m=wnVy-y zt%HHmbKs9mMCj=RbnFcNkoXT73R{BbA|{qbbN~}eeoH%(zn+Vj*xK0(8td3TmqtqG zFJT5oMzEy5y|JA-BO5!x^UlP=Lcqep`p3@B&OyM+%0|Gz!9c*o#Pn}F_!pr z{#7PybE*Vq=Bq*S}uBz`6{spse(N9G@%L zGqUl&_wQMo|5FY5vqpe(dDimhdu&W>1WasysX5?W|GdV+!breOPyb)F{#nicUF#YD z1}u@&F*2Z&)3JTFD?ZzH6zHT4^i6c0ThV7p77i9#MmBKP?92?b;FgMA6Ku(`v4D75NZ1oK6xVZkPG|vZcoBQ0#D$t2AfZMg_5DyRC7g=3X13i22eR1$h z`{TAa1Htoq1K)k#{?b7IkuKQS^qi21xxE3n)&H*}YX%N_mcN>SzWAr9&D+kiqj^jN zRu~jn@@>{Fv})GodpI3?%&1ZV(>(ad#nzIE@FJ^3mw(9KCCn3$pjDD&9ZGzUrf2uK z_2Drl_{|YSUcpO@#Qrw6%j6xgcygqJ`VyfYAg!`- zUZ0RM@imBjmVtFBrQ_Hq(k-)=^h92w|4MGp$K3+JTg5w~Kx%c$9InGAN%1XIL8?RN z$AL=X!hSt#!(e2e6Cz(&-bsRsSoP~>50v9Xj@}L{N#%{=7?J5AnAQn>R+aRNVn7W2 zT+PXqI)e*)Iyn}K(st=f(GO=Qzr)|{~XY*lW{sba*7WScb40@S1(U5>D_xdwc4l5#JlPbIQZXfE`& z^rkKIZKlTdr!;yeavc!w{?jo*w-U-=jil=DZ2TU9+%mEqtLR_ zGyt*hrDuegtE0a*g5qvGk~#x6t7Zo?Aja!^_NW=60V8~0!uQfF!ix1wgiW~mpZhSe z3Y{l+cp`#N#BZ>4ACsFpf?ju>e3Qq| zpG2^oegjD8f4`TFb|#NITwK%Dv))EeeS}-Xy_nx%j$~`}`DR&5!b0XdwONL3n0)0Z zM_YkNTy_5eO}Nywte9hOTPb5i!x)o7vB0OF2A}(T98`IC)9(aW*e$U~Iu&u!Z2OyE zmy^ikrkqJlvm|Ay;?d`Pn0nKR6M<&i@@w{!w>pzI0?C+{K%>KJ0smd*_hCMn60gWm zhiwA!9m@Mh-}=G()sXEkl6+lw>woxv*Kup1_O2-*a1?ZMy!yl z2ddsg^b_DVO?|AlF*myKKoNTE{q(X?jM&|s(}z<`Y?apfnBciWzn1# z+UxCGr^#ZxTXm6$g@X0#H))lk=?-oGU+LBX)YQ6l=|L1}(gY!NkX{l%DI&dt(yR0i z8bU`}=tWAT3W7B0NC~}3?>%%W5~T^!tH2-cegAv+>i_1SdGDLa%$b$%oNwnlXZBua zuN9(Lm`EkzhNoZ7fb6P&DZb=aekcVjLP8~H2(&HRkutjty~ezk_cGP!CQ$Zp*YJ~0 zH4c#oyzh2Ghr%i@s}DQFv|ld%iH010mStr!7Ny8wML9B&g^wpxalL-=|W&(?=`lf20FiM7WA*T|oC9Ol}MN7aU`n zOOr?!)JSUd;8&Fs&@49!-NR$*?g~KEI(>IvZA>{BK^cj!iSTsy7`%2fq`iJ`kUS=3 z63=LJ7bewAr-EaqpuDfW!obf}p)&}3o6gN!*&N&H|s;7_P+hx-O zEAOjFuc}*d^@XKWQa*5ezox`GJ(7gzmn4;9Znu8pJtNv`7%NU&Kou_xj~pYYTBuI9 zzaMzLwF_r<$y)JeAtF5UL2x-xxoV;M}5Akf29m+>D9jEhz)Dv)J zQ8-dV(Uv&lk8D3%|3MeMkj%YwQK4@8XeXJeyRb*^)=pPNPbv`+<&x@~BZJo?D2ocM zF9wsT_gh-8N7gs5+@xE;xo6Tfs{pbH039cy#7`_x<#t;@O`EB#PMl&PxUwYENiSt7 zC4~F<%8SW|0Sb5*5s{i6uc$Mk3z53|QPwZZU3}t}G_X1HeTjrWbD)S3!B}rF#j`k? zh4@iXkoMycWtK_2A1HPw^X3uMe#%fT)1!{QCA=vfl?>NYiEOL2kL4RzmG4=4kMzDH z7iK9THXuJSp-95Qp+rywH#a5;uNZzs@57$M{2<#gbCzS3r-=i#BBEOaRqA9XSWFMs zjH{lZ0eRdO>o$gOJppwE#pNB(h9vgDCYIXb?4CMVRs{SguR2nB5MQ|-qyH-2235jX z#X4XdOg_ewpA6whYht~CdVH3BUXZmAGDft>!*y$iTn9C=$|WgQW$l%6&W(G-FvOct zNh?Ruox%KFn;Qa|U+*PDEKt9oW&pPvDdg}BJ#2V+{AjbcN@M193 zc$YmS^-`RZVzaL>C|C+(gFOH4MdS8m9L;zC56wgaLVnjJuiNnypJGEYqFSpy$ES0V zUzt@}wB^$+sdv@gaZpUxFj~W_n#vUq);z|`<}PBo8|CFxo)Z1W;=y1TSs7C!1q~-7 zICc2lD0g~+In16>$>AkR2%PO`?035^g}QF3Uxfl;qg!>O@ebnDtSAlQOz1{@W@0-y z0CRhc6=%`^ZdSGm(y&V(Fv>s5o`shwj)AFFBfJ-)(U`->4?nBCGqhS%QyD68@Z{6L z>P+$|Q(s7Pw1({`YGF?{(g!D4?RGYy?g8fuRNtYn2T>_sBKv04e@9Kf2QWe z`5g;WwoD$!a3}ID;ugva9RYZfDyfv(-SYcRiGMVL@CkQm= zN@JN^%NH9nq02HueKcX`x7abXVNqBoxout53KB&z9jZ;nVn<&{8<0ufN}+U&k^wYo zhajktL3?Dp*<4iFRM?+csc~K)Z+)SQWxV3f9;4~!y8(#8^V%x9i}NChuw7&e&n)yN z049rUO|V#@QfrYFm0J%}=t&>PoReyk`Ya_Pe}tpB8DfWO@(%D;!LJ<#6!Zi$7fNpe z?3VXNV_T)frLbsX1M;Miux2+cqR_e`fQ1nf#t%bU1l&VfJUGKUdWH>~JTO=KgoFi3 zPr_c5ZAQGiR%55hro;Z6|MT-!Jj)2%5lNM?l7)QWm;1O^^@d#?8Cq;~)cAuGcIuh1d7jNROACgL?yRGN@0$VZKXaWSZ0F7kLFbmT!v*{0yw~5Igp@d@*oC z#r^S83;O%v%ypx^>4REH^HvQ{fNSbFHUZQi$+Jta{^BnqYg$qiSMPMP$|+p70Ai;XR2jma682;qD!H7UG0(5{AB ztd|x=oH9NO0?xh6A&kXdkf@3UKf?U_A$Z9$?zM9iY@YOG8MOvC`A7)9%Z84zOF%J86{AI>X3OQ+-Uz?c%t>weshifwz|r!^q{+ zDi=o=3)mpqz58PZ2qD25RA>6A$=8w;>1ZpEhkkSos#oug5ihRHss$!uqy#IQgj53q zYi{xDDMsmy@B)9`a6DRftP~@oS0{uN^>AhV{?DDsJYpJ_owfcR;~td_lRb3s;$jZ2 zz?;H4mZ%@+3n58>@(HyO)}88J{3GKs9F3{GR%>S6`K122ht9La$7);xnwbp}0U{iN zqQXPo(w#Z;#3U(augSC%epuEFk$ir}0su8`eM%F{wa*K(CF{3V+&*ta4BR;7%dX0?k^rQ3Fe;oi zZj*~=pFkY6kwB8>prxgk5JfDywD>v=;>&E(_hr_=OyUI&{1Q%4GW|_l{MRMZ%;Fqs zoP1^amjHn<>01kfW6m58c6NqZT5OuLndiE=ZJZY2=-MfCh{c-Ws@>ObLOLcl+}KZ+pW zKe|tU|de%16 zw|$AH%BLtfZRxOjPOJw#ny+Bam(MO=FX+_}wyaIJHXe@!t*9>;&}TMW+iH5&^bQ_i z1A4jIY<6KG!S{%tb4qxTuPi(;1@=C!xfW8l>(sew@q9jo?R^&q{p5YA`$~ z>3LQ(nK_c5k4ziw`}WE6+r~)2B=9lG%E5Mohxa;s={|<&rFtPBsrZiXx@C^3dwi7u z5u1O0jbrRtZ?xYOElk^azWk{-C-l*BV~(PFrV;>Ea5xBQmb)A>u$O(WjS5jSm8E1H zC=%m1QH>j(WLwzZ*Y9P+UNm`D8?Ks8d6A(R?KW>1e?Zc2@(AzsJi@Nuq~NLb^A2U6 zC=UDn@$K7|Z}+V@;CYc+`50M33>zn!5^L)9o)T_LhD)!OrgvHCmMV8tt1e<_Dms0S z?+)NsY3T!Q?lALejLOlBE<1-r_Jb9o=^CM=D&Z7-#%*_Fzi$klB)S|H!{a>TF9A#mFF z53{$h=;+FJm}Zc(SRc-l4PTjdy&8aA=V;OjJyN0HH8HLf=*|~f%f7G1_AGC(HRrxURHP9$J;e2!oyLzMz)u?#kWNAMLq?&roy2 z_@U(k#6F=_FV3cQ@I28hVbO2myz?$@B?xg!#&5*r<|K} zU-ZKT)M%ze*zfJCbe6(W2CZw{sZHuSn$p*14%MbhVHP$iit0x-U~t~s?a<9Lq9(n5 zOPeQOY-fZs>Pn7|O=hSLp3Hal!RfZUkCYKZc6cIn&1*gNn2|7IR%y{-syCN<3V;Ns zX;zkjpt8H87%V=iI<%9o_qxS~s?El$Q(Z5tbF?G87US%zz^cgYTt(?z?^^P_)BEEB z-LCZ=-(IKfx;8+sc`>T3rR7J5k8+f6D-^LvYQZDTFo{&PR!Dj6Sk!Mz-V0ySc9tVopm@J=VN0D8 zU3SbVddBluc5o}Q;EKnx!<7g59J^Ig+;QYsEXkh=SG_~}V>Hrg^Y#{`F~41y9hIxw z-lq`F;Te{}9@2P3(u z^XC}aBDHKt+S zl)(Q{PkxbO|C@U9XHED|>IoS5hlaqbh*n8|suEAo-e=$+CTsMODDV$cD*6ch9smF8 z3TWNo4`l(33ZR|Uzl#h%qxpYD20j7sUqpsd-2wM`F!84YPHXDSRd(N?$??j>IdSJr z1Es1xJXQu04uxI}Te-`eD=PrAtYVD0AT*YOwC`iaL)gRQQMk0xhs@E8Q{p;e^&G_n z6*7e=B4M1e+=H+K6mugG-$Gz-HJldE?evT$Z%U2$k;>;|uRBmqU*FDjZA!Q6s8y-$ zIx;J4od`3yK^f15a;Jjk#SD{kz#D#hpWJO_$IM;^KD)w zyIv|N7}~Rb(Ph#|CR25nZt-OT-nuoDrxHD`j|fdrSoOoE*l=v6 ze&oE=r_$11Wm z$>j@FTm%x&FO8m^@Nqt2N=9UEMkJ-H$I1|eLgA~4O(ho%AQvq0<>~X#6Yp7CEsr)P z=bjW9MRkh@0dkbDgvu%=)9&U2KM}mLyXx4`x}tp7;R$$|XNwpnbSwdS*3-3Gh&e614sSSX(3Tf;H2J{NIk!hP914$UxP6=CSZ-iWMB-=T&JLlE4yVA6haL!%t zXQo!N%r2M~3piQE%tF}pn{D`gKj+MRD(>|$mTf$paxU1+cbd-4)YZJBN~B%QTM3WU ze)6%^>~_XL8i%-_L&qX(nPte!Ktz^*jyO`}R;3^I^U*h*st#cMw0B=NrbGPfm3=Fh zNd4QAPEnr9;Ci8beFAAO0vZE>cRh~L(-&Qoj>IWS;`<3PlhyM+U7s@JUM!d$Bs?)~ zCwTu6bBYPn-ET#!HICNInC_j(f!hlg#KksNcyZd3@vjD#*GAOLCJozv7-BQG_>2hi z#MOjF)zayAGR3o>ayOw zJ^pohe)!~`_RKnG*;59$ycq{8CKxdFm@kt#-zgqUvEhWk#o-Q!dnV(AsW_LXldEs7 zUB3!BRqtVa@$Na}I7=Jn3YXfHGFLSvaID~R9yWU2W^~6ZuR74nXIWq9s%#~Ra-nAB zZK>#@=IOx+GV=W`iR6U<`C&7&W!==|yVm3_PSiytjn~tn3p(z{4uvYOC~r;cVPv>= zExYe@5u1$6nP1@+tt|}xo*q3RR@MY)7lH@@-#-Ts3<3#)fY!i&Vd(7ja{!(Hg`w5j zUon0Gbn^Q9Jdo(mEcQ2yUl1gK&Ru`ULrNC>S&|AK)8fBPLEFu(AxF{7=Ke80vF5(W$Yx>q3KpNjV{ zYlsMde#Znszr`Z@)9>=jxuX1NmHqD++O6{2xnO?5pT*?o_~(5C3xY&{T>~sA4Ek*z zNPzFx{R4x9{<<$vh?$+E6@)-cjDYv4owwD`XNdQSiwpX1KtF30frJEsE7S}E{o@G( PgF*bl1S~AF>T>@BCSN@S literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/tune_up_standard_001431_after.pdf b/tests/domain/modelling/fixtures/tune_up_standard_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e6c37477d6f8451b69ed0ec0f98743702b4d0ec2 GIT binary patch literal 65379 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 literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/tune_up_zoned_001431_after.pdf b/tests/domain/modelling/fixtures/tune_up_zoned_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ebc431d81c3424d543db33418be03a0a1c803518 GIT binary patch literal 65381 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 HSM`4Y)%u4M literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index a83a7c89..a124c5c4 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -887,6 +887,53 @@ def test_coal_boiler_with_cylinder_overlay_reproduces_the_relodged_after() -> No _assert_overlay_reproduces_after(before, after, option.overlay) +@pytest.mark.parametrize( + "before_fixture, after_fixture, measure_type", + [ + # The system tune-up keeps the existing boiler and forces the heating + # controls to a fixed end-state (standard 2106 / zone 2110) ABSOLUTELY — + # proven by reproducing each common after from two different starting + # controls (2101 "no control" and 2113 "room thermostat and TRVs") — plus + # the conditional cylinder jacket + thermostat (both befores are + # uninsulated / un-thermostatted, so both fire). + ( + "tune_up_from_2101_001431_before.pdf", + "tune_up_standard_001431_after.pdf", + "system_tune_up", + ), + ( + "tune_up_from_2113_001431_before.pdf", + "tune_up_standard_001431_after.pdf", + "system_tune_up", + ), + ( + "tune_up_from_2101_001431_before.pdf", + "tune_up_zoned_001431_after.pdf", + "system_tune_up_zoned", + ), + ( + "tune_up_from_2113_001431_before.pdf", + "tune_up_zoned_001431_after.pdf", + "system_tune_up_zoned", + ), + ], +) +def test_system_tune_up_overlay_reproduces_the_relodged_after( + before_fixture: str, after_fixture: str, measure_type: str +) -> None: + # Arrange + before: EpcPropertyData = parse_recommendation_summary(before_fixture) + after: EpcPropertyData = parse_recommendation_summary(after_fixture) + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == measure_type + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + # --- Solar PV cascade pins (ADR-0026) ------------------------------------- # # The solar before/after Summaries lodge *synthetic* PV arrays (each 1.00 kWp, diff --git a/tests/domain/modelling/test_heating_recommendation.py b/tests/domain/modelling/test_heating_recommendation.py index 297b1f8e..b0f86edf 100644 --- a/tests/domain/modelling/test_heating_recommendation.py +++ b/tests/domain/modelling/test_heating_recommendation.py @@ -394,6 +394,71 @@ def test_gas_combi_dwelling_yields_a_combi_boiler_upgrade_bundle() -> None: ) +def _tune_up_baseline() -> EpcPropertyData: + """A mains-gas wet boiler (kept) with "no control" (2101) and an uninsulated, + un-thermostatted cylinder — the system tune-up dwelling.""" + return parse_recommendation_summary("tune_up_from_2101_001431_before.pdf") + + +def test_wet_boiler_dwelling_yields_both_tune_up_options() -> None: + # Arrange — a wet boiler whose controls can be improved: both the standard + # (2106) and zone (2110) control tune-ups are offered as competing options, + # each keeping the boiler and fixing the cylinder. + baseline: EpcPropertyData = _tune_up_baseline() + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert — both options carry the control end-state + the cylinder fixes, and + # leave the boiler untouched (no fuel / sap code / flue fields). + assert recommendation is not None + options = {o.measure_type.value: o for o in recommendation.options} + assert options["system_tune_up"].overlay.heating == HeatingOverlay( + main_heating_control=2106, + cylinder_insulation_type=2, + cylinder_insulation_thickness_mm=80, + cylinder_thermostat="Y", + ) + assert options["system_tune_up_zoned"].overlay.heating == HeatingOverlay( + main_heating_control=2110, + cylinder_insulation_type=2, + cylinder_insulation_thickness_mm=80, + cylinder_thermostat="Y", + ) + + +def test_tune_up_standard_not_offered_when_controls_already_standard() -> None: + # Arrange — controls are already standard (2106): the standard tune-up would + # be a control no-op, so only the zone tune-up is offered. + baseline: EpcPropertyData = _tune_up_baseline() + baseline.sap_heating.main_heating_details[0].main_heating_control = 2106 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + assert recommendation is not None + measure_types = {o.measure_type for o in recommendation.options} + assert "system_tune_up" not in measure_types + assert "system_tune_up_zoned" in measure_types + + +def test_tune_up_neither_offered_when_controls_already_zoned() -> None: + # Arrange — controls are already zone control (2110): neither tune-up would + # improve them, so neither is offered. + baseline: EpcPropertyData = _tune_up_baseline() + baseline.sap_heating.main_heating_details[0].main_heating_control = 2110 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + if recommendation is not None: + measure_types = {o.measure_type for o in recommendation.options} + assert "system_tune_up" not in measure_types + assert "system_tune_up_zoned" not in measure_types + + def test_boiler_upgrade_leaves_adequate_controls_unchanged() -> None: # Arrange — the same combi but with already-adequate controls (2113, room # thermostat and TRVs): the upgrade must not move the controls (and must diff --git a/tests/domain/modelling/test_measure_type.py b/tests/domain/modelling/test_measure_type.py index 56fd5a4c..214df8bc 100644 --- a/tests/domain/modelling/test_measure_type.py +++ b/tests/domain/modelling/test_measure_type.py @@ -27,6 +27,8 @@ _EXPECTED_VALUES = { "high_heat_retention_storage_heaters", "air_source_heat_pump", "gas_boiler_upgrade", + "system_tune_up", + "system_tune_up_zoned", "solar_pv", } diff --git a/tests/harness/test_console.py b/tests/harness/test_console.py index 1adc9951..4ea237bc 100644 --- a/tests/harness/test_console.py +++ b/tests/harness/test_console.py @@ -39,6 +39,8 @@ _GENERATOR_MEASURE_TYPES = ( "high_heat_retention_storage_heaters", "air_source_heat_pump", "gas_boiler_upgrade", + "system_tune_up", + "system_tune_up_zoned", ) diff --git a/tests/harness/test_report.py b/tests/harness/test_report.py index 1dcf9123..003ff7bf 100644 --- a/tests/harness/test_report.py +++ b/tests/harness/test_report.py @@ -125,6 +125,21 @@ def test_gas_boiler_upgrade_surfaces_its_eligibility_triggers() -> None: } +def test_system_tune_up_surfaces_its_eligibility_triggers() -> None: + # Like the boiler-upgrade trigger, no golden cert selects a tune-up, so the + # branch is covered directly. + from harness.report import _triggers_for # pyright: ignore[reportPrivateUsage] + + # Arrange — a wet boiler (SAP code 102) with "no control" (2101): the wet- + # boiler code and the improvable control are what the report should explain. + epc = parse_recommendation_summary("tune_up_from_2101_001431_before.pdf") + + # Act / Assert — both tune-up measure types surface the same eligibility. + expected = {"sap_main_heating_code": 102, "main_heating_control": 2101} + assert _triggers_for(epc, "system_tune_up") == expected + assert _triggers_for(epc, "system_tune_up_zoned") == expected + + def test_few_measure_cert_surfaces_only_its_fired_measures_triggers() -> None: # Arrange path: Path = _GOLDEN / f"{_WITHIN_TOLERANCE}.json" diff --git a/tests/orchestration/test_ara_first_run_pipeline_integration.py b/tests/orchestration/test_ara_first_run_pipeline_integration.py index 3b72ba13..b7ffb86f 100644 --- a/tests/orchestration/test_ara_first_run_pipeline_integration.py +++ b/tests/orchestration/test_ara_first_run_pipeline_integration.py @@ -176,6 +176,22 @@ def test_first_run_baselines_through_repos_and_is_idempotent_on_rerun( is_active=True, description="Gas condensing boiler", ), + MaterialRow( + id=7, + type="system_tune_up", + total_cost=500.0, + cost_unit="gbp_per_unit", + is_active=True, + description="Heating controls + cylinder tune-up", + ), + MaterialRow( + id=8, + type="system_tune_up_zoned", + total_cost=900.0, + cost_unit="gbp_per_unit", + is_active=True, + description="Zoned heating controls + cylinder tune-up", + ), ] ) session.commit()