From 7b622f4570375079025ee2dfc5c09c76d58a89ef Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Mon, 17 Aug 2026 16:53:28 -0700 Subject: [PATCH 01/16] ipopt_outer_bound: design doc and Phase 1 certificate engine Design for a cylinder that supplies a *certified* outer bound for stochastic programs whose scenario subproblems are convex NLPs solved with Ipopt. Today there is none: Ipopt is not a branch-and-bound solver and reports no dual bound, so Ebound() sums -inf and the Lagrangian spoke prints a warning saying as much. The mechanism is not "solve the dual and read the value off". A second NLP solve returns a point, and the value there is an upper bound on the dual function -- the wrong direction, so it certifies nothing. What closes it is Lagrangian weak duality plus a tangent-plane underestimator minimized in closed form over the variable box. That holds for ANY multipliers and needs neither convergence nor feasibility of the point, so a truncated solve yields a valid-but-loose bound rather than a wrong one. Because the ordinary subproblem solve already lands at the minimizer, the correction term vanishes at an exact KKT point and the cylinder costs one solve per scenario, not two. Phase 1 lands the engine only -- no cylinder, no MPI, no config surface: mpisppy/utils/dual_certificate.py check_model_is_certifiable, unbounded_variables, certified_lower_bound. Named neutrally because only the sign table is Ipopt-specific; the convention is a sign_convention= argument rather than a hard-coded assumption. mpisppy/tests/test_dual_certificate.py 31 tests. Deliberately solver-free: the certificate is a pure function of the point the variables hold and the values in the dual suffix, so both are set by hand and every expected value is exact analytic arithmetic. The assertions that genuinely need the real solver -- that Ipopt's reported dual signs are what the table assumes -- are isolated in one skipUnless class. The Ipopt sign conventions were re-measured against analytically known multipliers rather than carried over: an earlier draft of the table recorded the equality dual as +4.0 where Ipopt reports -4.0, which contradicted its own mu = -d rule. Both range-active-at-upper and range-active-at-lower are now covered. CI had no Ipopt anywhere, which would have let the Phase 2 and Phase 3 integration tests silently skip rather than fail, so the new ipopt-tests job lands here rather than later. It pulls the IDAES idaes-ext release bundle -- the same source Pyomo's and Egret's own CI use -- because pip/conda Ipopt is built against MUMPS only, while that bundle carries the HSL linear solvers. The job asserts ma27/ma57/ma97 actually solve before running any test, and installs libgfortran/liblapack/libblas first, since the binary carries no RPATH and resolves them from the system. Co-Authored-By: Claude Opus 5 --- .github/workflows/test_pr_and_main.yml | 93 +++- doc/designs/ipopt_outer_bound_design.md | 555 ++++++++++++++++++++++++ mpisppy/tests/test_dual_certificate.py | 326 ++++++++++++++ mpisppy/utils/dual_certificate.py | 248 +++++++++++ run_coverage.bash | 3 +- 5 files changed, 1223 insertions(+), 2 deletions(-) create mode 100644 doc/designs/ipopt_outer_bound_design.md create mode 100644 mpisppy/tests/test_dual_certificate.py create mode 100644 mpisppy/utils/dual_certificate.py diff --git a/.github/workflows/test_pr_and_main.yml b/.github/workflows/test_pr_and_main.yml index bf13637b8..408fff50d 100644 --- a/.github/workflows/test_pr_and_main.yml +++ b/.github/workflows/test_pr_and_main.yml @@ -1262,7 +1262,8 @@ jobs: mpisppy/tests/test_prox_approx.py \ mpisppy/tests/test_sep_rho.py \ mpisppy/tests/test_reduced_costs_fixer.py \ - mpisppy/tests/test_slammer.py + mpisppy/tests/test_slammer.py \ + mpisppy/tests/test_dual_certificate.py - name: Upload coverage data if: always() @@ -1273,6 +1274,95 @@ jobs: if-no-files-found: ignore include-hidden-files: true + ipopt-tests: + name: Ipopt tests (idaes-ext build, with HSL) + runs-on: ubuntu-latest + needs: [ruff] + steps: + - uses: actions/checkout@v3 + - uses: conda-incubator/setup-miniconda@v3 + with: + activate-environment: test_env + python-version: 3.11 + - name: Install dependencies + run: | + conda install mpi4py pandas setuptools + + - name: Install Ipopt's system libraries + # The idaes-ext binary carries no RPATH and resolves libgfortran, + # liblapack and libblas from the system. A bare runner has none of + # them, and the failure surfaces as an unhelpful load error at first + # solve rather than at install. Pyomo's workflow installs the same + # three for the same reason. + run: | + sudo apt-get update + sudo apt-get install -y libopenblas-dev gfortran liblapack-dev + + - name: Install Ipopt from idaes-ext + # The pip/conda ipopt is built against MUMPS only. The idaes-ext + # release bundle additionally carries the HSL linear solvers (ma27, + # ma57, ma97), which is what makes it usable on real NLPs. This is the + # same source Pyomo's and Egret's own CI pull from. + run: | + SOLVER_DIR="${GITHUB_WORKSPACE}/cache/solvers" + mkdir -p "$SOLVER_DIR" + echo "$SOLVER_DIR" >> $GITHUB_PATH + echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SOLVER_DIR" >> $GITHUB_ENV + URL=https://github.com/IDAES/idaes-ext + RELEASE=$(curl --max-time 150 --retry 8 -L -s \ + -H 'Accept: application/json' ${URL}/releases/latest) + VER=$(echo $RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/') + # Fall back to a known-good release if the API is unavailable or + # rate-limited, so a GitHub hiccup does not read as a test failure. + if test -z "$VER" -o "$VER" = "$RELEASE"; then VER=3.4.2; fi + echo "idaes-ext version: $VER" + curl --max-time 300 --retry 8 -L \ + ${URL}/releases/download/$VER/idaes-solvers-ubuntu2204-x86_64.tar.gz \ + > solvers.tar.gz + tar -xzf solvers.tar.gz -C "$SOLVER_DIR" + "$SOLVER_DIR/ipopt" -v + + - name: setup the program + run: | + pip install -e ".[test]" + + - name: confirm the HSL linear solvers are really present + # Guards against silently falling back to a MUMPS-only build: a missing + # HSL solver makes ipopt exit abnormally rather than warn. + run: | + python -c " + import pyomo.environ as pyo + for ls in ('ma27', 'ma57', 'ma97'): + m = pyo.ConcreteModel() + m.x = pyo.Var(bounds=(-10, 10), initialize=0.0) + m.o = pyo.Objective(expr=(m.x - 3)**2) + m.c = pyo.Constraint(expr=m.x <= 1) + opt = pyo.SolverFactory('ipopt') + opt.options['linear_solver'] = ls + opt.solve(m) + assert abs(pyo.value(m.x) - 1.0) < 1e-6, ls + print(ls, 'OK') + " + + - name: run ipopt-dependent tests + timeout-minutes: 5 + run: | + coverage run $COV_ARGS -m pytest -v \ + mpisppy/tests/test_dual_certificate.py + + - name: List coverage files (debug) + if: always() + run: ls -la ${{ github.workspace }}/.coverage* || echo "No .coverage files found" + + - name: Upload coverage data + if: always() + uses: actions/upload-artifact@v4 + with: + name: coverage-ipopt-tests + path: ${{ github.workspace }}/.coverage.* + if-no-files-found: ignore + include-hidden-files: true + coverage-report: name: Coverage Report runs-on: ubuntu-latest @@ -1303,6 +1393,7 @@ jobs: - test-cg - test-agnostic - unit-tests + - ipopt-tests if: always() steps: - uses: actions/checkout@v3 diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md new file mode 100644 index 000000000..da4414e38 --- /dev/null +++ b/doc/designs/ipopt_outer_bound_design.md @@ -0,0 +1,555 @@ +# `ipopt_outer_bound` — a certified outer-bound cylinder for convex NLP subproblems + +Status: draft for review. Branch `ipopt-outer-bound` (off Pyomo/mpi-sppy `main`). + +## 1. Goal + +Give mpi-sppy an outer bound for stochastic programs whose scenario subproblems are +**convex NLPs solved with Ipopt**. Today there is none: the Lagrangian spoke's bound +comes from the solver's dual bound, Ipopt is not a branch-and-bound solver and reports +no dual bound, and the spoke says so out loud: + +```python +# mpisppy/cylinders/lagrangian_bounder.py +if "ipopt" in self.opt.options["solver_name"]: + print("\n WARNING: An ipopt solver will not give outer bounds\n") +``` + +Measured on this branch, a converged Ipopt solve through Pyomo returns: + +| field | value | +|---|---| +| `results.problem.lower_bound` / `upper_bound` | `-inf` / `inf` (Pyomo's untouched defaults) | +| `results.solution[0].objective` | `{}` — empty, even with `load_solutions=False` | +| `results.solver.message` | `'Ipopt 3.13.2\x3a Optimal Solution Found'` | + +So `Ebound()` sums `-inf` and a user running a convex stochastic NLP gets no bound at +all. This design supplies one that is *certified* — valid by a theorem, not by an +assertion that the solver converged. + +Scope is **Ipopt only**, by decision. The mechanism generalizes to any NLP solver +returning duals, but nothing here is written to be solver-neutral, and the dual sign +conventions in §5 are measured from Ipopt. + +## 2. Why this cannot just read a number off the solver + +For a minimization subproblem the solver's returned objective value is an *inner* +bound: it is the value at a point, hence ≥ the subproblem optimum. An outer bound +needs a number ≤ the optimum. Ipopt supplies the former and never the latter. + +Ipopt's `tol` does not close the gap either. It is a **relative KKT-residual** +tolerance (the binary's own `-=` listing: "Desired convergence tolerance (relative)"), +not an objective-error tolerance; converting one to the other needs multiplier +magnitudes and curvature. And the two error sources point opposite ways: optimality +error stops you slightly *above* the optimum (unsafe for an outer bound), while +constraint violation — `constr_viol_tol` defaults to `1e-4`, four orders looser than +`tol` — can put you slightly *below* it. A single scalar cushion covers neither +honestly. + +What *is* rigorous is Lagrangian weak duality, which needs no convergence assumption +at all. That is what this cylinder computes. + +## 3. The bound + +### 3.1 Setting + +The hub relaxes non-anticipativity with weights `W`. Provided the weights satisfy the +usual condition `Σ_s p_s W_s = 0`, the scenario-separable Lagrangian dual value + +``` + D(W) = Σ_s p_s L_s(W_s) ≤ optimum +``` + +is an outer bound, where the scenario subproblem — exactly the problem the Lagrangian +spoke already builds and solves, prox term off — is + +``` + L_s(W_s) = min f_s(v) + W_sᵀ x(v) + s.t. g_s(v) ≤ 0, h_s(v) = 0, v ∈ B = [lo, hi] +``` + +`v` is every variable of the scenario model (non-anticipative `x` plus recourse), and +`B` is its box of variable bounds. + +**Convexity assumption (load-bearing, unverifiable in general):** `f_s` convex, each +component of `g_s` convex, `h_s` affine, all over `B`. §6 lists the parts of this that +*are* mechanically checkable; the rest is a user assertion. + +### 3.2 The dual function and the trap + +For multipliers `λ ≥ 0` and free `μ`, define + +``` + φ_s(v) = f_s(v) + W_sᵀ x(v) + λᵀ g_s(v) + μᵀ h_s(v) + q_s(λ, μ) = inf_{v ∈ B} φ_s(v) ≤ L_s(W_s) (weak duality) +``` + +Weak duality holds for **any** `λ ≥ 0` and **any** `μ` — no optimality of the +multipliers is required. That is the whole reason this approach is rigorous where +"trust the objective value" is not. + +The trap: `q_s` is defined by an *infimum*. Handing `φ_s` to Ipopt and solving it +returns a point, and the value at that point is ≥ the infimum — an upper bound on +`q_s`, which is the wrong direction again. **A second NLP solve does not by itself +produce a certificate.** This is the one place where the original sketch for this +cylinder (solve, take λ, solve the dual, report) does not close. + +### 3.3 What does close it: a linear underestimator over the box + +`φ_s` is convex on `B`, so for any point `v̂ ∈ B` the tangent at `v̂` lies below it: + +``` + φ_s(v) ≥ φ_s(v̂) + ∇φ_s(v̂)ᵀ (v − v̂) for all v +``` + +Minimizing the right-hand side over the box is separable and closed-form, so + +``` + q_s(λ, μ) ≥ φ_s(v̂) + Σ_i min_{v_i ∈ [lo_i, hi_i]} ∂_i φ_s(v̂) · (v_i − v̂_i) + ╰──────────────────────────────────────────────────╯ + = ∂_i φ · (lo_i − v̂_i) if ∂_i φ > 0 + ∂_i φ · (hi_i − v̂_i) otherwise +``` + +Call the right-hand side `q̂_s`. Then + +``` + q̂_s ≤ L_s(W_s) for ANY v̂ ∈ B, ANY λ ≥ 0, ANY μ +``` + +and the cylinder reports `Σ_s p_s q̂_s`. One gradient evaluation and a loop over +variables — no second solve, no tolerance argument, no feasibility requirement on `v̂`. + +**Looseness has a closed form, and it is the box width that sets it.** Each term is +`|∂_i φ|` times the distance from `v̂_i` to the far end of its interval, so + +``` + L_s(W_s) − q̂_s ≈ Σ_i |∂_i φ(v̂)| · (width of the box in the descending direction) +``` + +Confirmed numerically: on the running example a converged solve leaves +`|∂_x φ| = 5.1e−11` over a box of width 9, and the observed gap to the analytic optimum +is 4.56e−10 ≈ 5.1e−11 × 9. The practical consequence is the one worth telling users: +**this cylinder is only as tight as the variable bounds are.** A model whose bounds come +back from `fbbt` as ±1e10 will produce valid but useless numbers — 5e−11 × 1e10 is half a +unit of objective — which is the same failure the unbounded case in §6.1 reaches in the +limit, not a different one. + +### 3.4 Why the correction term is ~0 in normal operation + +At an exact KKT point of the scenario subproblem, with its multipliers `(λ, μ)` and +bound multipliers `z_L, z_U ≥ 0`, stationarity says exactly + +``` + ∇φ_s(v̂) = z_L − z_U +``` + +Componentwise: an interior `v̂_i` has `z_L,i = z_U,i = 0`, so `∂_i φ = 0` and the term +is 0. A `v̂_i` sitting at `lo_i` has `∂_i φ = z_L,i ≥ 0`, so the minimizing `v_i` is +`lo_i = v̂_i` and the term is again 0; symmetrically at `hi_i`. **The correction +vanishes at an exact KKT point**, where `q̂_s = φ_s(v̂) = f_s(v̂) + W_sᵀx̂ = L_s(W_s)` +by complementarity — strong duality, recovered exactly. + +So the correction term is precisely the price of inexactness, and it measures itself. +Measured on a 3-variable convex NLP with one convex `≤`, one active `≥`, one equality, +and finite bounds: + +| solve | `φ(v̂)` | correction | certified bound | vs. reference | +|---|---|---|---|---| +| converged | 15.93325207 | −3.6e−09 | 15.93325207 | tight to 9 digits | +| `max_iter=5` | 15.93321 | −3.8e−02 | 15.89485 | valid, 0.04 loose | +| `max_iter=3` | 14.35348 | −2.6e+01 | −11.85 | valid, useless | +| `max_iter=2` | 18.86760 | −6.9e+01 | −49.97 | valid, useless | + +Note the `max_iter=2` row: the naive "use the objective value" bound would have been +18.87, which is **above** the optimum — an invalid outer bound. The certificate +returns −49.97 instead: worthless, but sound. That is the trade this design makes +everywhere. + +### 3.5 Consequence for cost: one solve, not two + +Because `v̂` from the ordinary subproblem solve is already the minimizer of `φ_s` over +the box (§3.4), the anticipated second solve per iteration is very nearly a no-op at a +converged first solve. **The cylinder costs the same as the existing Lagrangian spoke +— one solve per scenario per iteration** — and lags the hub no more than that spoke +does. The re-solve retains value only when the first solve is sloppy, so it becomes an +opt-in tightening pass (Phase 4) rather than the mechanism. + +## 4. Getting the gradient + +`∇φ_s(v̂)` comes from Pyomo's reverse-mode differentiation: + +```python +from pyomo.core.expr.calculus.derivatives import differentiate, Modes +grad = differentiate(phi, wrt_list=vlist, mode=Modes.reverse_numeric) +``` + +Measured on this branch, a 500-variable / 500-constraint model: **7.6 ms** for the +whole gradient — negligible against an NLP solve, and one reverse sweep rather than +one pass per variable. + +This deliberately avoids PyNumero. `PyomoNLP` would also serve, but it needs the +compiled `pynumero_ASL` library, and `AmplInterface.available()` is `False` here — it is +not an mpi-sppy dependency and nothing installs it. The `differentiate` route adds no +dependency at all. + +Worth recording precisely, because it is easy to misread: the idaes-ext bundle §10.1 +installs *does* ship `libpynumero_ASL.so`. That does not make PyNumero available, because +Pyomo looks for it under `PYOMO_CONFIG_DIR` (`~/.pyomo`), not on `PATH`. So the choice +here is not "PyNumero is unobtainable" — it is one deliberate copy away — but rather that +taking it would add an install step and a second way for the gradient to be unavailable +at runtime, in exchange for nothing this calculation needs. + +## 5. Multipliers: canonical form and Ipopt's sign conventions + +Constraints are canonicalized so every inequality reads `g(v) ≤ 0`. The mapping from +Pyomo's `dual` suffix to the canonical multiplier is orientation-dependent; measured +against analytically-known multipliers (`min (x−3)²` with the constraint active, true +multiplier 4): + +| Pyomo constraint | canonical form | Pyomo `dual` | canonical multiplier | +|---|---|---|---| +| `body <= upper` | `g = body − upper` | −4.0 | `λ = max(−d, 0)` | +| `body >= lower` | `g = lower − body` | +4.0 | `λ = max(+d, 0)` | +| `body == rhs` | `h = body − rhs` | −4.0 | `μ = −d` | + +The equality row agrees with the existing repo constant +`solver_dual_sign_convention['ipopt'] = -1` in `mpisppy/utils/lshaped_cuts.py`. + +Ranged constraints (`lower ≤ body ≤ upper`, both finite) carry one dual for two rows; +they are split into both inequalities and the two rules above are applied, which lands +the magnitude on the active side and zero on the other. Verified in both directions: a +range active at its upper bound returns `d = −4` (`λ_upper = 4`, `λ_lower = 0`), and one +active at its lower bound returns `d = +4` (`λ_lower = 4`, `λ_upper = 0`). An inactive +inequality returns `d = 0`, so both clipped multipliers are 0 and the constraint drops +out of `φ` — which is what complementarity requires. + +Bound multipliers `z_L`/`z_U` are **not needed** — the box is kept explicit in the +certificate rather than dualized, so `ipopt_zL_out`/`ipopt_zU_out` need not be +imported at all. + +### 5.1 The robustness property that makes this safe + +Weak duality holds for any `λ ≥ 0` and any `μ`. Therefore **a sign-convention error, a +stale dual, or a clipped multiplier can only make the bound loose, never wrong.** The +observed failure mode of a wrong sign is a bound of −34.7 where 1.2476 was available: +obviously broken, harmless. Combined with the hub keeping the best outer bound seen +(`_outer_bound_update` in `spcommunicator.py`), a weak bound is silently ignored. + +The exception is convexity, which is genuinely load-bearing: if the model is not +convex, the tangent in §3.3 is not an underestimator and the bound is simply wrong. +Hence the guards in §6. + +### 5.2 Floating point + +At a converged solve the certified bound exceeded `f(v̂)` by 1.5e−06. This is not a +demonstrated violation — `v̂` carries up to `constr_viol_tol` of infeasibility, so +`f(v̂)` understates the true optimum — but it shows the margin sits at the level of the +solver's feasibility tolerance. A small relative cushion is cheap insurance and costs +nothing that matters in a PH outer bound. + +**Decided: the cushion is on by default.** The engine reports + +``` + q̂ − ε_rel·(1 + |q̂|), ε_rel = 1e-9 by default +``` + +settable through `--ipopt-outer-bound-cushion` (0 disables it). Note honestly what this +does and does not buy: 1e-9 is an order of magnitude *smaller* than the 1.5e−06 margin +measured above, so it is last-bit hygiene, not a proof-carrying margin. The margin +itself is not a soundness problem — the theorem in §3.3 needs no tolerance argument — +and a user who wants to absorb `constr_viol_tol`-scale infeasibility can raise `ε_rel`. + +## 6. Guards + +Checkable at setup, hard error (following the repo's fail-loudly convention): + +- **Any integer or binary variable** in a subproblem. A convexity claim is + definitionally false there, and this is the failure mode most likely to be reached by + accident. +- **Any equality constraint with `polynomial_degree() != 1`.** A nonlinear equality + makes `μᵀh` non-convex for one sign of `μ`, breaking §3.3. +- **Prox term attached.** With a prox term the subproblem is not the Lagrangian + relaxation and the bound is not a Lagrangian bound. `lagrangian_prep` already passes + `attach_prox=False`; assert it. +- **Nonanticipative variables fixed by an extension.** Same failure as the prox term and + less obvious: PH's variable-fixing extensions (`fixer.py`, the reduced-cost fixers) + restrict the subproblem, which can only *raise* its minimum, so the resulting number + is a bound on the restricted problem and not on the original. The certificate engine + cannot detect this — a fixed variable is simply a constant to it — so the check + belongs to the cylinder, in Phase 2. This is a real interaction: fixing extensions are + commonly on. +- **Maximization.** Phase 1 is minimize-only with a hard error; §10 Phase 5 adds max + through the concave mirror. +- **Solver is not Ipopt.** Scope decision; the sign conventions in §5 are measured from + Ipopt only. + +### 6.1 Unbounded variables: warn and stand down, do not fail + +The closed-form box minimization in §3.3 returns −∞ as soon as an unbounded direction +has a nonzero gradient component. + +How often that happens is **model-dependent, and the first draft of this design +overstated it.** Measured on the running example at a converged solve, one component is +−5.1e−11 (nonzero, as claimed) while the component belonging to the variable that was +left unbounded is *exactly* 0.0 — the cancellation `2(ŷ−2) + λ` is exact there — so a +bound is still available despite the missing bounds. Truncate the same solve to one +iteration and that component becomes −1.9e−01 and the certificate correctly returns +`None`. The honest statement: at a converged solve these components are small but +generically nonzero, so an unbounded variable *may* defeat the certificate and reliably +does whenever the solve is not converged. Neither outcome can be counted on in advance, +which is what makes warn-and-stand-down the right policy rather than either +fail-at-setup or assume-it-is-fine. + +`fbbt` runs first (precedent: the CVaR `eta` bound in `utils/cvar.py`), which recovers +bounds implied by the constraints. **Decided: a variable still unbounded after `fbbt` +does not raise.** Setup emits a warning naming the offending variables, and the +cylinder then reports no bound — `outer_bound = None` per scenario, so `Ebound()` +returns `None` collectively and nothing is sent to the hub. + +Rationale for warning rather than erroring: this cylinder is an *optional* source of a +bound. A model that is merely under-bounded is not a broken model, and killing a whole +parallel run over a spoke that could have sat quiet is the wrong trade — unlike the +guards above, where the model is genuinely outside the theorem and any number the +cylinder produced would be wrong. The warning is what keeps the quiet case from being +silent. + +Per repo convention the warning is emitted on one rank only (`cylinder_rank == 0`), +once at setup rather than once per iteration. + +Not checkable, documented as the user's assertion: convexity of `f_s` and `g_s`. + +## 7. Solver scoping: Ipopt for this cylinder, anything for everyone else + +This cylinder pins **its own** solver to Ipopt. The hub and every other spoke keep +whatever `--solver-name` selects — gurobi, cplex, xpress, glpk — and nothing here +constrains them. Each cylinder builds its own copy of the scenario models and solves +them with its own solver; the only coupling between cylinders is the numeric exchange +of `W` and bounds, which is solver-agnostic. + +The mechanism already exists. `apply_solver_specs(name, spoke, cfg)` overlays a +per-cylinder solver name onto the spoke's options dict: + +```python +# mpisppy/utils/cfg_vanilla.py +if _hasit(cfg, name+"_solver_name"): + options["solver_name"] = cfg.get(name+"_solver_name") +``` + +So the factory declares `ipopt_outer_bound_solver_name` with default `"ipopt"` and +calls `apply_solver_specs("ipopt_outer_bound", ...)` like every other spoke factory. +The guard in §6 rejects a value that does not name Ipopt. + +### 7.1 Global solver options must not leak into this cylinder + +This part is not free. `apply_solver_specs` deliberately layers per-spoke options *on +top of* the global `--solver-options` dict, and the global keys remain in place. That +is right for spokes sharing the global solver and wrong here, because **Ipopt +hard-fails on an unrecognized keyword** rather than ignoring it. Observed on this +branch: + +``` +ERROR: Solver log: Ipopt 3.13.2: ... Unknown keyword "acceptable_iter" +pyomo.common.errors.ApplicationError: Solver (ipopt) did not exit normally +``` + +So an entirely ordinary run — `--solver-name gurobi --solver-options "mipgap=0.01"` +for the hub, this cylinder attached alongside — would kill the cylinder on its first +solve, with an error naming Ipopt rather than the option routing. + +Decision: this cylinder does **not** inherit the global solver-options layer. It starts +from an empty base, and Ipopt-specific settings arrive through +`--ipopt-outer-bound-solver-options`. Filtering the global dict against a list of +Ipopt-known keywords was considered and rejected: the list would have to track Ipopt +releases, and silently dropping an option the user set is worse than never applying it. + +### 7.2 Convexity is a property of the model, not of the routing + +Worth stating because the flexibility above invites the wrong inference: the §6 model +guards apply to the shared scenario model, not to this cylinder's private copy of it. +If the model has integer variables this cylinder is inapplicable no matter what solver +anything else runs — and "another cylinder needs a MIP solver" is usually the signal +that it does. The routing lets Ipopt coexist with a MIP solver on a *convex* model (a +hub pushing an LP through gurobi, say); it does not let it certify a non-convex one. + +## 8. Combining across the cylinder's ranks + +This needs no new machinery, but it depends on an existing invariant that must not be +"optimized away", so it is recorded here. + +`SPOpt.Ebound()` already does exactly the required reduction — `Allreduce(..., MPI.SUM)` +of `p_s · outer_bound_s` over `self.mpicomm` — and already returns `None`, collectively, +if *any* scenario on *any* rank is missing its bound. + +**Every scenario in the sum must use the same `W`.** This is not fussiness. Let `W'` +mix generations across scenarios. At the true optimum `(x*, x̄*)`, + +``` + Σ_s p_s L_s(W'_s) ≤ Σ_s p_s [f_s(x*) + W'_sᵀ x*] = OPT + (Σ_s p_s W'_s)ᵀ x̄* +``` + +which bounds `OPT` only when `Σ_s p_s W'_s = 0` — a *joint* condition on the whole +weight vector that a mixture of generations does not satisfy. A cross-rank mixture +produces a number that is not a bound at all, and nothing downstream would detect it. + +Cross-rank agreement is already enforced: `get_receive_buffer(..., synchronize=True)` +routes through `_write_ids_agree`, which `Allreduce`s the write id and rejects a +mixed-generation read for retry. The new cylinder relies on this and must not pass +`synchronize=False`. + +The same argument forbids the stale-bound fallback used on the `outer_bound_only` path +(`spopt.py`: "Leave outer_bound at its previous value"), which is sound only if *every* +scenario is stale together. This cylinder instead sets `outer_bound = None` for any +scenario whose certificate fails, letting `Ebound()` return `None` and sending nothing. +Whether the existing Lagrangian spoke has the same exposure is a separate question, +noted in §12. + +## 9. Implementation sketch + +| File | Change | +|---|---| +| `mpisppy/utils/dual_certificate.py` | **Landed (Phase 1).** Pure function of a solved Pyomo model + its `dual` suffix → certified lower bound. No MPI, no cylinder, no PH. Named neutrally because only the §5 sign table is Ipopt-specific; the convention is a `sign_convention="ipopt"` argument rather than a hard-coded assumption. API: `check_model_is_certifiable`, `unbounded_variables`, `certified_lower_bound`, `CertificateError`. | +| `mpisppy/tests/test_dual_certificate.py` | **Landed (Phase 1).** Wired into `run_coverage.bash` and the `unit-tests` CI job. | +| `mpisppy/cylinders/ipopt_outer_bound.py` | New. `IpoptOuterBound(_LagrangianMixin, OuterBoundWSpoke)`; `outer_bound_only = False` (duals and primals are both needed); per-scenario certificate → `_mpisppy_data.outer_bound` → `Ebound()`. | +| `mpisppy/utils/config.py` | `--ipopt-outer-bound` and its options. | +| `mpisppy/utils/cfg_vanilla.py` | `ipopt_outer_bound_spoke()` factory, alongside `lagrangian_spoke()`. | +| `mpisppy/generic_cylinders.py` | Driver wiring. | +| `doc/src/spokes.rst` | User-facing page. | + +Prep attaches a `dual` Suffix (IMPORT) to each scenario. The objective expression after +`PH_Prep(attach_prox=False)` is already `f_s + W_sᵀx`, so `φ_s` builds directly on top +of it. + +The certificate engine is deliberately a standalone utility rather than a method on the +spoke: it is the part with the interesting math, and it is fully testable serially. +The *cylinder* keeps the Ipopt name, because the scope decision in §1 is real — only +Ipopt's conventions are measured and only Ipopt is accepted by the §6 guard. + +## 10. Phased rollout + +Each phase is its own review-sized PR and is green on its own. + +- **Phase 1 — certificate engine. DONE, in this design branch.** + `utils/dual_certificate.py` plus the §6 model guards plus + `tests/test_dual_certificate.py`. No cylinder, no MPI, no config surface. +- **Phase 2 — the cylinder.** `IpoptOuterBound`, config flag, `cfg_vanilla` factory, + `generic_cylinders` wiring; serial (single-rank) run on a convex example. +- **Phase 3 — parallel + docs.** Multi-rank cylinder test exercising the `Ebound` + reduction and the write-id agreement path; `doc/src/spokes.rst`; `run_all.py` entry. +- **Phase 4 — optional tightening re-solve.** Re-solve `min_{v∈B} φ_s(v)` when the + correction exceeds a threshold, and re-certify at the new point. Opt-in; this is the + only part that costs a second solve. +- **Phase 5 — maximization** through the concave mirror. + +### 10.1 Ipopt in CI — done, and it is the good build + +There was no Ipopt anywhere in `.github/workflows/`. Phase 1 was unaffected, since its +tests are deliberately solver-free (§11), but Phase 2 and Phase 3 could not have been +meaningfully green: their tests would have *skipped* rather than failed, which is the +worst of both. So this landed with Phase 1 rather than being left to Phase 3. + +**Job `ipopt-tests`**, in `test_pr_and_main.yml`. It pulls the release bundle from +`IDAES/idaes-ext` — the same source Pyomo's and Egret's own CI use, both of which were +read directly rather than reconstructed from memory: + +- Pyomo: `.github/workflows/test_pr_and_main.yml`, step "Install Ipopt" +- Egret: `.github/workflows/egret.yml`, step "Install Solvers" + +Why this source and not pip or conda: **pip/conda Ipopt is built against MUMPS only.** +The idaes-ext bundle additionally carries the HSL linear solvers, which is what makes +Ipopt usable on real NLPs. Measured on the extracted bundle: `ma27`, `ma57`, `ma97` all +solve; `ma86` does not ship. The job asserts those three actually work before running +any test, because a MUMPS-only fallback would otherwise show up much later as an +abnormal exit rather than as a clear "wrong build" message. + +Verified before committing, by rehearsing the whole step locally rather than trusting +the YAML: the tag extraction returns `3.4.2` from the live API and the hardcoded +fallback correctly triggers on a junk response; the tarball unpacks **flat** (so the +extraction directory itself goes on `PATH`); the extracted binary runs; `ma27/ma57/ma97` +all solve from it; and the Phase 1 suite passes against that exact binary. + +One non-obvious prerequisite: **the idaes-ext binary carries no RPATH** and resolves +`libgfortran`, `liblapack` and `libblas` from the system. A bare runner has none of +them, and the failure surfaces as an unhelpful load error at the first solve rather +than at install time, so the job `apt-get install`s the three before downloading. +Pyomo's workflow does the same, for the same reason. + +Two facts worth keeping: + +- `3.4.2` (2024-08-12) is still the current idaes-ext release, and is also what is + installed on the development machine — so local results and CI results are from the + same build, not merely from "some Ipopt". +- The bundle targets `ubuntu2204` while `ubuntu-latest` runners are 24.04. This is fine: + the same tarball is what runs on the 24.04 / glibc 2.39 development machine. + +## 11. Test plan + +**Phase 1's tests need no solver, by construction.** The certificate is a pure function +of the point the variables hold and the values in the `dual` suffix, so both are set by +hand and every expected number is exact analytic arithmetic rather than a recorded +observation. Given §10.1 this is not a stylistic preference: a solver-gated suite would +skip in CI and report nothing. The handful of assertions that genuinely require Ipopt — +that its reported dual *signs* are what the table assumes — are isolated in one +`skipUnless` class. + +The running example is `min (x−3)² + (y−2)² s.t. x + y ≤ 1, x,y ∈ [−10,10]`, with +optimum 8 at `(1, 0)` and multiplier 4, all analytic. + +- **Analytic**: `q̂ = 8` *exactly* at the KKT point — the correction term is 0 there, so + this is an equality assertion, not a tolerance. +- **Sign table**: one test per orientation (`<=`, `>=`, `==`, ranged), each with the + dual Ipopt reports for that orientation, all four required to return exactly 8. A lost + minus sign shows up as a wrong number, not a near-miss. +- **Degradation**: validity from points that are non-optimal, and from points that are + outright *infeasible* — the certificate requires neither. Under real truncated solves + (`max_iter ∈ {1,2,3,5,8}`, Ipopt-gated) validity is asserted at every level and the + converged bound is asserted to be at least as tight as each truncated one. Pairwise + monotonicity across `max_iter` is deliberately **not** asserted: the iterate path is a + solver detail that can differ by linear-solver build, and a test that fails on a + machine with HSL but passes on MUMPS is worse than no test. +- **Wrong-sign robustness**: feeding the `>=` dual to a `<=` constraint must yield a + *loose but valid* bound (−68 against an optimum of 8), pinning §5.1 down as a test + rather than a claim. +- **Box width**: widening the box from ±10 to ±1000 must loosen the bound and must not + invalidate it, pinning the §3.3 scaling law. +- **Guards**: integer var, binary var, nonlinear equality, maximize, no objective, + missing `dual` suffix, missing dual for a constraint, unknown sign convention — each + raises. Plus the negative cases that matter as much: a *fixed* discrete variable is + allowed (it is a constant, so it carries no convexity claim) and a *nonlinear + inequality* is allowed (convex inequalities are the entire point; only equalities must + be affine). The prox and non-Ipopt-solver guards are cylinder-level and land in + Phase 2. +- **Unbounded variable**: asserts the §6.1 path — `None` rather than `-inf`, and only + when the unbounded direction actually carries a nonzero gradient component. Includes + the half-open case, where whether the bound survives depends on which way the gradient + points. Also asserts the `fbbt` pre-pass rescues a variable whose bounds are implied + by the constraints. +- **Cushion**: `ε_rel = 0` reproduces `q̂` exactly; the default shaves it by + `1e-9·(1+|q̂|)` and never turns a valid bound invalid. +- **Integration**: `farmer` is linear, hence convex, and Ipopt solves it; compare the + cylinder's bound against the EF optimum. +- **MPI**: 2-rank cylinder, same comparison, exercising `Ebound`'s reduction. + +New `mpisppy/tests/test_*.py` files go into `run_coverage.bash` **and** +`.github/workflows/test_pr_and_main.yml` in the same commit, or codecov reports 0% on +the patch. + +## 12. Decisions and remaining open question + +Resolved: + +1. **Cushion default — on.** `ε_rel = 1e-9`, `--ipopt-outer-bound-cushion` to change, + 0 to disable. See §5.2 for what it is and is not worth. +2. **Unbounded variables — warn, then report no bound.** `fbbt` first; anything still + unbounded produces a rank-0 setup warning naming the variables and a `None` bound, + not an exception. See §6.1. +3. **Naming — neutral engine, Ipopt cylinder.** `utils/dual_certificate.py` takes the + sign convention as an argument; `cylinders/ipopt_outer_bound.py` is the Ipopt-scoped + consumer. See §9. + +Still open: + +4. **Pre-existing stale-bound exposure.** Does the existing Lagrangian spoke's + stale-`outer_bound` fallback admit the §8 mixed-`W` case in practice? This is a + question about *shipped* code, not about this design, so it belongs in its own + GitHub issue and must not gate any phase here. diff --git a/mpisppy/tests/test_dual_certificate.py b/mpisppy/tests/test_dual_certificate.py new file mode 100644 index 000000000..ff41c251b --- /dev/null +++ b/mpisppy/tests/test_dual_certificate.py @@ -0,0 +1,326 @@ +############################################################################### +# mpi-sppy: MPI-based Stochastic Programming in PYthon +# +# Copyright (c) 2024, Lawrence Livermore National Security, LLC, Alliance for +# Sustainable Energy, LLC, The Regents of the University of California, et al. +# All rights reserved. Please see the files COPYRIGHT.md and LICENSE.md for +# full copyright and license information. +############################################################################### +# Tests for mpisppy/utils/dual_certificate.py +# +# Most of these need no solver. The certificate is a pure function of the point +# the variables hold and the values in the `dual` suffix, so setting both by +# hand gives exact arithmetic and covers the module without depending on ipopt +# being installed -- which it is not, in CI. The solver-dependent tests are +# gathered in TestWithIpopt and skip cleanly. +# +# The running example throughout is +# +# min (x-3)^2 + (y-2)^2 s.t. x + y <= 1, x, y in [-10, 10] +# +# whose optimum is x=1, y=0 with value 8 and multiplier 4 -- all analytic, so +# every expected number below is exact rather than a recorded observation. + +import unittest + +import pyomo.environ as pyo + +from mpisppy.utils.dual_certificate import ( + CertificateError, + certified_lower_bound, + check_model_is_certifiable, + unbounded_variables, +) + +OPT = 8.0 # analytic optimum of the running example +MULTIPLIER = 4.0 # analytic multiplier of the active constraint + +ipopt_available = pyo.SolverFactory("ipopt").available(exception_flag=False) + + +def _model(kind="le", bounds=(-10, 10), y_bounds=None): + """The running example, with the single constraint written four ways. + + All four describe the same feasible set, so all four have the same optimum + and the same |multiplier| -- only the sign Pyomo reports differs. + """ + m = pyo.ConcreteModel() + m.x = pyo.Var(bounds=bounds, initialize=0.0) + m.y = pyo.Var(bounds=y_bounds if y_bounds is not None else bounds, initialize=0.0) + m.obj = pyo.Objective(expr=(m.x - 3) ** 2 + (m.y - 2) ** 2, sense=pyo.minimize) + if kind == "le": + m.c = pyo.Constraint(expr=m.x + m.y <= 1) + elif kind == "ge": + m.c = pyo.Constraint(expr=-m.x - m.y >= -1) + elif kind == "eq": + m.c = pyo.Constraint(expr=m.x + m.y == 1) + elif kind == "range": + m.c = pyo.Constraint(expr=pyo.inequality(-10, m.x + m.y, 1)) + else: + raise ValueError(kind) + m.dual = pyo.Suffix(direction=pyo.Suffix.IMPORT) + return m + + +def _place(m, x, y, dual): + """Put the model at a point with a given dual, as a solve would have.""" + m.x.value = x + m.y.value = y + m.dual[m.c] = dual + return m + + +# The dual value ipopt reports for each orientation when the true multiplier is +# +4. Verified against ipopt in TestWithIpopt.test_sign_table_matches_ipopt. +IPOPT_DUAL_AT_OPTIMUM = {"le": -4.0, "ge": 4.0, "eq": -4.0, "range": -4.0} + + +class TestCertificateMath(unittest.TestCase): + """No solver required: the point and the duals are supplied directly.""" + + def test_exact_at_kkt_point(self): + # At the exact KKT point the correction term is identically zero and the + # certificate collapses to the optimal value -- strong duality, exactly. + m = _place(_model("le"), 1.0, 0.0, IPOPT_DUAL_AT_OPTIMUM["le"]) + self.assertEqual(certified_lower_bound(m, eps_rel=0.0), OPT) + + def test_sign_table_all_orientations(self): + # Each orientation needs a different rule to recover the same canonical + # multiplier. A lost minus sign here shows up as a loose bound, so the + # assertion is equality, not just validity. + for kind, dual in IPOPT_DUAL_AT_OPTIMUM.items(): + with self.subTest(kind=kind): + m = _place(_model(kind), 1.0, 0.0, dual) + self.assertEqual(certified_lower_bound(m, eps_rel=0.0), OPT) + + def test_inactive_constraint_drops_out(self): + # Complementarity: a zero dual must contribute nothing. Unconstrained + # optimum is x=3, y=2 with value 0. + m = _model("le") + m.c.deactivate() + m.d = pyo.Constraint(expr=m.x + m.y <= 100) + m.dual[m.d] = 0.0 + _place_x, _place_y = 3.0, 2.0 + m.x.value, m.y.value = _place_x, _place_y + self.assertEqual(certified_lower_bound(m, eps_rel=0.0), 0.0) + + def test_valid_at_a_point_that_is_not_optimal(self): + # phi(0,0) = 9 + 4 + 4*(0+0-1) = 9; grad = (-2, 0); the box term drives + # x to its upper bound 10, contributing -2*(10-0) = -20. + m = _place(_model("le"), 0.0, 0.0, IPOPT_DUAL_AT_OPTIMUM["le"]) + q = certified_lower_bound(m, eps_rel=0.0) + self.assertEqual(q, -11.0) + self.assertLessEqual(q, OPT) + + def test_infeasible_point_still_gives_a_valid_bound(self): + # vhat need not be feasible: x+y = 4 violates x+y <= 1. The certificate + # does not care, which is why a truncated solve is safe. + m = _place(_model("le"), 2.0, 2.0, IPOPT_DUAL_AT_OPTIMUM["le"]) + self.assertLessEqual(certified_lower_bound(m, eps_rel=0.0), OPT) + + def test_wrong_sign_is_loose_never_wrong(self): + # Feed the `>=` dual to a `<=` constraint. max(-(+4), 0) = 0 clips the + # multiplier away, so phi degenerates to f -- loose, still valid. This + # is the robustness property that makes the whole approach safe. + m = _place(_model("le"), 1.0, 0.0, -IPOPT_DUAL_AT_OPTIMUM["le"]) + q = certified_lower_bound(m, eps_rel=0.0) + self.assertLess(q, OPT) + self.assertEqual(q, -68.0) + + def test_looseness_scales_with_box_width(self): + # The correction is |grad| times the distance to the far end of the box, + # so wide bounds give a valid but weak bound. Practical consequence: + # tight variable bounds are what make this cylinder useful. + narrow = certified_lower_bound( + _place(_model("le", bounds=(-10, 10)), 0.0, 0.0, -4.0), eps_rel=0.0 + ) + wide = certified_lower_bound( + _place(_model("le", bounds=(-1000, 1000)), 0.0, 0.0, -4.0), eps_rel=0.0 + ) + self.assertLess(wide, narrow) + self.assertLessEqual(narrow, OPT) + self.assertLessEqual(wide, OPT) + + def test_unbounded_direction_returns_none_not_minus_inf(self): + # d(phi)/dy = 2*(y-2) + lam = 2y when lam = 4, so any y != 0 gives y a + # nonzero gradient component. With y unbounded the box minimization is + # then -inf, and the contract is None ("no bound this time") rather than + # a -inf that would poison Ebound's sum. + m = _place(_model("le", y_bounds=(None, None)), 0.0, 1.0, -4.0) + self.assertIsNone(certified_lower_bound(m)) + + def test_unbounded_on_the_unused_side_only_still_bounds(self): + # Half-open is enough when the gradient points the other way: here + # d(phi)/dy = 2 > 0, so only the lower bound is consulted. + m = _place(_model("le", y_bounds=(-10, None)), 0.0, 1.0, -4.0) + self.assertIsNotNone(certified_lower_bound(m)) + m2 = _place(_model("le", y_bounds=(None, 10)), 0.0, 1.0, -4.0) + self.assertIsNone(certified_lower_bound(m2)) + + def test_unbounded_direction_with_zero_gradient_still_bounds(self): + # An infinite bound only defeats the certificate if that variable's + # gradient component is nonzero. At the KKT point it is exactly zero + # here, so a bound is still available. + m = _place(_model("le", y_bounds=(None, None)), 1.0, 0.0, -4.0) + self.assertEqual(certified_lower_bound(m, eps_rel=0.0), OPT) + + def test_cushion(self): + m = _place(_model("le"), 1.0, 0.0, -4.0) + exact = certified_lower_bound(m, eps_rel=0.0) + cushioned = certified_lower_bound(m) # default 1e-9 + self.assertEqual(exact, OPT) + self.assertLess(cushioned, exact) + self.assertAlmostEqual(exact - cushioned, 1e-9 * (1.0 + OPT), places=15) + + def test_fixed_variables_are_constants(self): + # A fixed variable is not free in the box and must not contribute a + # correction term. Fix y at its optimal value; the bound is unchanged. + m = _place(_model("le"), 1.0, 0.0, -4.0) + m.y.fix(0.0) + self.assertEqual(certified_lower_bound(m, eps_rel=0.0), OPT) + + +class TestUnboundedVariables(unittest.TestCase): + def test_reports_variables_without_finite_bounds(self): + m = _model("le", y_bounds=(None, None)) + self.assertEqual(unbounded_variables(m, do_fbbt=False), ["y"]) + + def test_fbbt_rescues_bounds_implied_by_constraints(self): + m = _model("le", y_bounds=(None, None)) + m.b1 = pyo.Constraint(expr=m.y >= 0) + m.b2 = pyo.Constraint(expr=m.y <= 5) + self.assertEqual(unbounded_variables(m, do_fbbt=False), ["y"]) + self.assertEqual(unbounded_variables(m, do_fbbt=True), []) + self.assertEqual((m.y.lb, m.y.ub), (0, 5)) + + def test_fully_bounded_model_reports_nothing(self): + self.assertEqual(unbounded_variables(_model("le")), []) + + +class TestGuards(unittest.TestCase): + def test_clean_model_passes(self): + check_model_is_certifiable(_model("le")) # must not raise + + def test_integer_variable(self): + m = _model("le") + m.z = pyo.Var(bounds=(0, 10), domain=pyo.Integers) + with self.assertRaisesRegex(CertificateError, "discrete"): + check_model_is_certifiable(m) + + def test_binary_variable(self): + m = _model("le") + m.z = pyo.Var(domain=pyo.Binary) + with self.assertRaisesRegex(CertificateError, "discrete"): + check_model_is_certifiable(m) + + def test_fixed_discrete_variable_is_allowed(self): + # Fixed means constant, so it carries no convexity claim. + m = _model("le") + m.z = pyo.Var(bounds=(0, 10), domain=pyo.Integers) + m.z.fix(3) + check_model_is_certifiable(m) # must not raise + + def test_nonlinear_equality(self): + m = _model("le") + m.bad = pyo.Constraint(expr=m.x * m.y == 1) + with self.assertRaisesRegex(CertificateError, "nonlinear equality"): + check_model_is_certifiable(m) + + def test_nonlinear_inequality_is_allowed(self): + # Convex inequalities are the point of the exercise; only equalities + # have to be affine. + m = _model("le") + m.ok = pyo.Constraint(expr=m.x**2 + m.y**2 <= 100) + check_model_is_certifiable(m) # must not raise + + def test_maximize(self): + m = _model("le") + m.obj.sense = pyo.maximize + with self.assertRaisesRegex(CertificateError, "minimize-only"): + check_model_is_certifiable(m) + + def test_no_objective(self): + m = _model("le") + m.obj.deactivate() + with self.assertRaisesRegex(CertificateError, "exactly one active Objective"): + check_model_is_certifiable(m) + + def test_missing_dual_suffix(self): + m = _model("le") + m.del_component(m.dual) + with self.assertRaisesRegex(CertificateError, "no `dual` Suffix"): + certified_lower_bound(m) + + def test_missing_dual_for_a_constraint(self): + m = _model("le") # suffix present but never populated + m.x.value, m.y.value = 1.0, 0.0 + with self.assertRaisesRegex(CertificateError, "no dual available"): + certified_lower_bound(m) + + def test_unknown_sign_convention(self): + m = _place(_model("le"), 1.0, 0.0, -4.0) + with self.assertRaisesRegex(CertificateError, "unknown sign convention"): + certified_lower_bound(m, sign_convention="no-such-solver") + + +@unittest.skipUnless(ipopt_available, "ipopt is not available") +class TestWithIpopt(unittest.TestCase): + """The parts that can only be checked against the real solver: that ipopt's + reported dual signs are what the table in dual_certificate.py assumes.""" + + @staticmethod + def _solve(m, max_iter=None): + opt = pyo.SolverFactory("ipopt") + if max_iter is not None: + opt.options["max_iter"] = max_iter + opt.solve(m) + return m + + def test_sign_table_matches_ipopt(self): + for kind, expected in IPOPT_DUAL_AT_OPTIMUM.items(): + with self.subTest(kind=kind): + m = self._solve(_model(kind)) + self.assertAlmostEqual(pyo.value(m.dual[m.c]), expected, places=5) + + def test_tight_at_convergence(self): + for kind in IPOPT_DUAL_AT_OPTIMUM: + with self.subTest(kind=kind): + q = certified_lower_bound(self._solve(_model(kind)), eps_rel=0.0) + self.assertLessEqual(q, OPT + 1e-9) + self.assertLess(OPT - q, 1e-6) + + def test_valid_under_truncated_solves(self): + # Validity must hold at every truncation level; this is the property a + # lost minus sign would break by producing a bound *above* the optimum. + for max_iter in (1, 2, 3, 5, 8): + with self.subTest(max_iter=max_iter): + q = certified_lower_bound( + self._solve(_model("le"), max_iter=max_iter), eps_rel=0.0 + ) + if q is not None: + self.assertLessEqual(q, OPT + 1e-9) + + def test_converged_bound_is_at_least_as_tight_as_truncated(self): + # Deliberately not asserting pairwise monotonicity across max_iter: the + # iterate path is a solver detail and may differ by linear-solver build. + converged = certified_lower_bound(self._solve(_model("le")), eps_rel=0.0) + for max_iter in (1, 2, 3, 5): + with self.subTest(max_iter=max_iter): + q = certified_lower_bound( + self._solve(_model("le"), max_iter=max_iter), eps_rel=0.0 + ) + if q is not None: + self.assertLessEqual(q, converged + 1e-9) + + def test_solver_objective_value_can_be_an_invalid_bound(self): + # The motivating failure: at a badly truncated solve the returned + # objective value sits *above* the optimum, so "just use f(vhat)" is not + # an outer bound at all, while the certificate stays valid. + m = self._solve(_model("le"), max_iter=1) + self.assertGreater(pyo.value(m.obj), OPT) + q = certified_lower_bound(m, eps_rel=0.0) + self.assertTrue(q is None or q <= OPT + 1e-9) + + +if __name__ == "__main__": + unittest.main() diff --git a/mpisppy/utils/dual_certificate.py b/mpisppy/utils/dual_certificate.py new file mode 100644 index 000000000..939e8dce5 --- /dev/null +++ b/mpisppy/utils/dual_certificate.py @@ -0,0 +1,248 @@ +############################################################################### +# mpi-sppy: MPI-based Stochastic Programming in PYthon +# +# Copyright (c) 2024, Lawrence Livermore National Security, LLC, Alliance for +# Sustainable Energy, LLC, The Regents of the University of California, et al. +# All rights reserved. Please see the files COPYRIGHT.md and LICENSE.md for +# full copyright and license information. +############################################################################### +# A *certified* lower bound for a convex NLP, computed from an already-solved +# Pyomo model and its constraint duals. +# +# The problem is +# +# L = min f(v) s.t. g(v) <= 0, h(v) == 0, v in B = [lo, hi] +# +# and the point of this module is to return a number that is <= L by a theorem, +# not by an assertion that the solver converged. A solver's returned objective +# value is the value at a point, hence >= L: an inner bound, the wrong +# direction. Lagrangian weak duality gives the right direction and needs no +# convergence assumption at all: +# +# phi(v) = f(v) + lam^T g(v) + mu^T h(v) +# q(lam, mu) = inf_{v in B} phi(v) <= L for ANY lam >= 0, ANY mu +# +# The remaining trap is that q is an *infimum*. Solving for it with an NLP +# solver returns a point, and the value there is >= q -- the wrong direction +# again. What closes it is convexity: phi is convex on B, so its tangent at any +# vhat in B lies below it, and minimizing that tangent over a box is separable +# and closed-form: +# +# q(lam, mu) >= phi(vhat) + sum_i min_{v_i in [lo_i, hi_i]} d_i phi * (v_i - vhat_i) +# +# One gradient evaluation and a loop over variables. No second solve, no +# tolerance argument, and vhat need not even be feasible. +# +# At an exact KKT point the correction term is identically zero (stationarity +# makes grad phi = z_L - z_U, which is zero on interior components and points +# the wrong way to help on active ones), so the bound collapses to f(vhat) and +# strong duality is recovered exactly. The correction is precisely the price of +# inexactness, and it measures itself. +# +# CONVEXITY IS LOAD-BEARING. If f or any component of g is non-convex over B, +# the tangent is not an underestimator and the returned number is simply wrong. +# check_model_is_certifiable() rejects the parts of that which are mechanically +# checkable; the rest is the caller's assertion. +# +# By contrast a wrong multiplier -- bad sign convention, stale dual, clipped +# value -- can only make the bound loose, never wrong, because weak duality +# holds for any lam >= 0 and any mu. +# +# The caller is responsible for handing over a model that really is the +# relaxation it wants bounded. In particular a Progressive Hedging proximal +# term, or nonanticipative variables fixed by an extension, make the model +# something other than the Lagrangian relaxation, and this module cannot detect +# either. + +import pyomo.environ as pyo +from pyomo.core.expr.calculus.derivatives import differentiate, Modes +from pyomo.core.expr.visitor import identify_variables +from pyomo.contrib.fbbt.fbbt import fbbt + +__all__ = [ + "CertificateError", + "check_model_is_certifiable", + "unbounded_variables", + "certified_lower_bound", +] + + +class CertificateError(RuntimeError): + """The model is outside the theorem this module certifies.""" + + +# How a solver's Pyomo `dual` suffix maps onto canonical multipliers for +# g(v) <= 0 and h(v) == 0. These were measured against analytically known +# multipliers, not assumed: min (x-3)^2 with the constraint active has true +# multiplier 4, and ipopt reports d = -4 for `body <= upper`, d = +4 for +# `body >= lower`, and d = -4 for `body == rhs`. +_SIGN_CONVENTIONS = { + # g = body - upper (from `body <= upper`) + "ipopt": { + "lam_upper": lambda d: max(-d, 0.0), + # g = lower - body (from `body >= lower`) + "lam_lower": lambda d: max(d, 0.0), + # h = body - rhs (from `body == rhs`) + "mu": lambda d: -d, + }, +} + + +def _active_objective(model): + objs = list( + model.component_data_objects(pyo.Objective, active=True, descend_into=True) + ) + if len(objs) != 1: + raise CertificateError( + f"expected exactly one active Objective, found {len(objs)}" + ) + return objs[0] + + +def check_model_is_certifiable(model): + """Raise CertificateError if `model` is outside the theorem. + + Checks only what is mechanically checkable. Convexity of the objective and + of the inequality bodies is the caller's assertion and is *not* checked. + """ + obj = _active_objective(model) + if obj.sense != pyo.minimize: + raise CertificateError( + "certified_lower_bound is minimize-only; maximization is handled by " + "mirroring the model before calling here" + ) + + discrete = [ + v.name + for v in model.component_data_objects(pyo.Var, active=True, descend_into=True) + if not v.fixed and not v.is_continuous() + ] + if discrete: + raise CertificateError( + "a convexity claim is definitionally false with discrete variables; " + f"these are not continuous: {', '.join(sorted(discrete)[:10])}" + + (" ..." if len(discrete) > 10 else "") + ) + + nonlinear_eq = [] + for con in model.component_data_objects( + pyo.Constraint, active=True, descend_into=True + ): + if not con.equality: + continue + degree = con.body.polynomial_degree() + if degree is None or degree > 1: + nonlinear_eq.append(con.name) + if nonlinear_eq: + raise CertificateError( + "a nonlinear equality makes mu^T h non-convex for one sign of mu, " + "which breaks the underestimator; offending constraints: " + f"{', '.join(sorted(nonlinear_eq)[:10])}" + + (" ..." if len(nonlinear_eq) > 10 else "") + ) + + +def unbounded_variables(model, do_fbbt=True): + """Names of variables that still lack a finite bound, after optionally + tightening with feasibility-based bounds tightening. + + `fbbt` mutates `model` in place, tightening variable bounds using the + constraints. That is sound here and makes the certificate tighter: it + shrinks the box `B` without removing any feasible point. + + A non-empty return does not mean no bound is possible -- an unbounded + variable only defeats the certificate if its gradient component in phi is + nonzero -- but it does mean `certified_lower_bound` may return None. + """ + if do_fbbt: + fbbt(model) + return sorted( + v.name + for v in model.component_data_objects(pyo.Var, active=True, descend_into=True) + if not v.fixed and (v.lb is None or v.ub is None) + ) + + +def _lagrangian_expression(model, conv): + """phi(v) = f(v) + lam^T g(v) + mu^T h(v), with the multipliers read off the + model's `dual` suffix and canonicalized.""" + if not hasattr(model, "dual"): + raise CertificateError( + "model has no `dual` Suffix; attach " + "pyo.Suffix(direction=pyo.Suffix.IMPORT) before solving" + ) + dual = model.dual + + terms = [_active_objective(model).expr] + for con in model.component_data_objects( + pyo.Constraint, active=True, descend_into=True + ): + if con not in dual: + raise CertificateError( + f"no dual available for constraint {con.name}; the solve did not " + "import one" + ) + d = float(pyo.value(dual[con])) + body = con.body + if con.equality: + mu = conv["mu"](d) + if mu != 0.0: + terms.append(mu * (body - pyo.value(con.upper))) + continue + # A ranged constraint carries one dual for two rows; splitting it and + # applying both rules lands the magnitude on the active side and zero + # on the other. + if con.has_ub(): + lam = conv["lam_upper"](d) + if lam != 0.0: + terms.append(lam * (body - pyo.value(con.upper))) + if con.has_lb(): + lam = conv["lam_lower"](d) + if lam != 0.0: + terms.append(lam * (pyo.value(con.lower) - body)) + return sum(terms) + + +def certified_lower_bound(model, sign_convention="ipopt", eps_rel=1e-9): + """A number guaranteed <= the model's optimal value, or None. + + `model` must already be solved, with its `dual` Suffix populated and its + variables holding the returned point. Neither optimality nor feasibility of + that point is required -- a truncated solve yields a valid but loose bound. + + Returns None when the box minimization is unbounded below, which happens + when a variable with an infinite bound has a nonzero gradient component in + phi. None means "no bound this time", never "-inf". + + `eps_rel` shaves a relative cushion off the result. At the default 1e-9 + this is last-bit hygiene, not a proof-carrying margin; pass 0.0 to get the + theorem's quantity exactly. + """ + try: + conv = _SIGN_CONVENTIONS[sign_convention] + except KeyError: + raise CertificateError( + f"unknown sign convention {sign_convention!r}; known: " + f"{sorted(_SIGN_CONVENTIONS)}" + ) + + phi = _lagrangian_expression(model, conv) + vlist = list(identify_variables(phi, include_fixed=False)) + + correction = 0.0 + if vlist: + grad = differentiate(phi, wrt_list=vlist, mode=Modes.reverse_numeric) + for v, g in zip(vlist, grad): + g = float(g) + if g == 0.0: + continue + vhat = pyo.value(v) + # min over [lo, hi] of a linear term goes to whichever end the + # gradient points away from. + bound = v.lb if g > 0.0 else v.ub + if bound is None: + return None + correction += g * (bound - vhat) + + qhat = pyo.value(phi) + correction + return qhat - eps_rel * (1.0 + abs(qhat)) diff --git a/run_coverage.bash b/run_coverage.bash index cbac43991..963e63174 100755 --- a/run_coverage.bash +++ b/run_coverage.bash @@ -213,7 +213,8 @@ run_phase "serial unit tests (serial)" \ mpisppy/tests/test_prox_approx.py \ mpisppy/tests/test_sep_rho.py \ mpisppy/tests/test_reduced_costs_fixer.py \ - mpisppy/tests/test_slammer.py + mpisppy/tests/test_slammer.py \ + mpisppy/tests/test_dual_certificate.py run_phase "test_conf_int_farmer (spawns mpiexec)" \ coverage run --rcfile=.coveragerc mpisppy/tests/test_conf_int_farmer.py From 46a3b84dd8f2029e7a802df9d814010dbe142fa8 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Mon, 17 Aug 2026 17:15:47 -0700 Subject: [PATCH 02/16] design: record that the stale-outer_bound question resolved into PR #839 The last open question in the design was whether the existing stale-outer_bound fallback admits the mixed-W unsoundness in practice. It does: solve_one kept a subproblem's previous bound when a solve produced none, letting Ebound form a mixed-generation sum that is not a bound, past a missing-bound check that only looks for None. Reproduced and fixed in PR #839, based on main rather than stacked here since it is a soundness bug in shipped code. Nothing in this design depends on the outcome -- ipopt reports Lower_bound = -inf rather than None and never reaches that path. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_design.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index da4414e38..4451b5e45 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -534,9 +534,10 @@ New `mpisppy/tests/test_*.py` files go into `run_coverage.bash` **and** `.github/workflows/test_pr_and_main.yml` in the same commit, or codecov reports 0% on the patch. -## 12. Decisions and remaining open question +## 12. Decisions -Resolved: +Every question this design opened is now settled; item 4 turned out to be a bug in +shipped code rather than a design choice. 1. **Cushion default — on.** `ε_rel = 1e-9`, `--ipopt-outer-bound-cushion` to change, 0 to disable. See §5.2 for what it is and is not worth. @@ -546,10 +547,14 @@ Resolved: 3. **Naming — neutral engine, Ipopt cylinder.** `utils/dual_certificate.py` takes the sign convention as an argument; `cylinders/ipopt_outer_bound.py` is the Ipopt-scoped consumer. See §9. - -Still open: - -4. **Pre-existing stale-bound exposure.** Does the existing Lagrangian spoke's - stale-`outer_bound` fallback admit the §8 mixed-`W` case in practice? This is a - question about *shipped* code, not about this design, so it belongs in its own - GitHub issue and must not gate any phase here. +4. **Pre-existing stale-bound exposure — confirmed, and fixed separately.** The + question was whether the existing stale-`outer_bound` fallback admits the §8 + mixed-`W` case in practice. It does. `solve_one` left a subproblem's previous + bound in place when a solve produced no bound, so `Ebound` could form a sum + mixing one scenario's stale bound with the others' fresh ones — not a bound at + all, and invisible to `Ebound`'s missing-bound check, which tests for `None` and + sees a number. The same exposure existed on the ordinary failed-solve path. + Reproduced and fixed in **PR #839**, based on `main` rather than stacked here, + since it is a soundness bug in shipped code and independent of this design. + Ipopt itself never reaches that path (it reports `Lower_bound = -inf`, not + `None`), so nothing in this design depends on the outcome. From 7922d01b2c88ece1b63755a6ff5afe71a51f09f7 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Mon, 17 Aug 2026 17:32:41 -0700 Subject: [PATCH 03/16] ipopt_outer_bound: the cylinder, its config surface, docs and tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phases 2 and 3 of the design: the spoke itself, wired end to end, so the certificate engine from the previous commit has a consumer. IpoptOuterBound(_LagrangianMixin, OuterBoundWSpoke) solves each subproblem with the hub's current W, then replaces the solver's bound -- which for Ipopt is -inf -- with the certificate computed from that subproblem's own duals. Unlike the Lagrangian spoke it cannot use the bound-only solve path, since the certificate needs the primals as well as the duals. A scenario with no certificate gets None rather than -inf, so Ebound declines collectively instead of poisoning the sum. It does not reuse _LagrangianMixin.lagrangian(), which prints "An ipopt solver will not give outer bounds". That warning is right about the Lagrangian spoke and wrong here. Guards, at setup and hard: a solver that is not Ipopt, plus the model checks the engine already makes. Two that belong to the spoke rather than the engine: - the proximal term must be absent, since a proximal subproblem is not the Lagrangian relaxation; - nonanticipative variables must not be fixed after setup. Fixing restricts the subproblem, which can only raise its minimum, so the result would bound the restricted problem and not the original. The engine cannot see this -- a fixed variable is simply a constant to it -- and PH's fixing extensions are commonly on, so the spoke snapshots nonant fixedness at setup and checks it each iteration. Variables still unbounded after fbbt produce a rank-0 warning rather than an error: this spoke is an optional source of a bound, and a model that is merely under-bounded is not a broken model. It reports nothing on the iterations where that costs it a bound. Option routing follows the design's §7.1: this spoke does NOT inherit the global --solver-options layer, because Ipopt hard-fails on an unrecognized keyword rather than ignoring it, so an ordinary run (a MIP solver and its options for the hub, this spoke alongside) would kill it on the first solve with an error naming Ipopt rather than the option routing. Ipopt settings arrive through --ipopt-outer-bound-solver-options. Its solver name defaults to ipopt so the guard does not fire on the spoke's own default. No mipgap flags: Ipopt is not a branch-and-bound solver and offering them would imply otherwise. Verified end to end on farmer with 3 scenarios, PH hub on gurobi and this spoke on Ipopt: the spoke supplies the best outer bound, -110093.79 against an EF optimum of -108390.0. Tests split by what they need. The wiring tests need neither solver nor MPI -- option routing is the part most likely to break silently, and it is checkable by inspecting the spoke dict, including the assertion that lagrangian_spoke still does inherit the global layer, which is what makes "this one does not" mean something. The end-to-end test runs the hub on Ipopt too so it needs no MIP solver, with a second case putting a MIP solver on the hub to demonstrate the routing, skipped when none is available. The design's file table said the driver wiring lives in generic_cylinders.py. It does not: spoke construction is in generic/spokes.py and arg registration in generic/parsing.py. Table corrected. No run_all.py entry. do_one has no skip machinery, so an entry would force an Ipopt install into both run_all CI jobs, which have no other use for one. The same coverage -- the documented command line still works -- is bought far more cheaply by a driver smoke run inside the ipopt-tests job, which already has Ipopt. Co-Authored-By: Claude Opus 5 --- .github/workflows/test_pr_and_main.yml | 27 ++- doc/designs/ipopt_outer_bound_design.md | 55 ++++-- doc/src/spokes.rst | 57 ++++++ mpisppy/cylinders/ipopt_outer_bound.py | 210 ++++++++++++++++++++++ mpisppy/generic/parsing.py | 1 + mpisppy/generic/spokes.py | 11 ++ mpisppy/tests/test_ipopt_outer_bound.py | 227 ++++++++++++++++++++++++ mpisppy/utils/cfg_vanilla.py | 52 ++++++ mpisppy/utils/config.py | 32 ++++ run_coverage.bash | 6 +- 10 files changed, 660 insertions(+), 18 deletions(-) create mode 100644 mpisppy/cylinders/ipopt_outer_bound.py create mode 100644 mpisppy/tests/test_ipopt_outer_bound.py diff --git a/.github/workflows/test_pr_and_main.yml b/.github/workflows/test_pr_and_main.yml index 408fff50d..b6e148250 100644 --- a/.github/workflows/test_pr_and_main.yml +++ b/.github/workflows/test_pr_and_main.yml @@ -1263,7 +1263,8 @@ jobs: mpisppy/tests/test_sep_rho.py \ mpisppy/tests/test_reduced_costs_fixer.py \ mpisppy/tests/test_slammer.py \ - mpisppy/tests/test_dual_certificate.py + mpisppy/tests/test_dual_certificate.py \ + mpisppy/tests/test_ipopt_outer_bound.py - name: Upload coverage data if: always() @@ -1345,10 +1346,30 @@ jobs: " - name: run ipopt-dependent tests - timeout-minutes: 5 + timeout-minutes: 10 run: | coverage run $COV_ARGS -m pytest -v \ - mpisppy/tests/test_dual_certificate.py + mpisppy/tests/test_dual_certificate.py \ + mpisppy/tests/test_ipopt_outer_bound.py + + - name: run the ipopt_outer_bound spoke on two ranks + timeout-minutes: 10 + run: | + mpiexec -np 2 coverage run $COV_ARGS -m mpi4py -m pytest -v \ + mpisppy/tests/test_ipopt_outer_bound.py + + - name: smoke-test the driver command line + # Stands in for a run_all.py entry: it exercises the same thing (the + # documented command line still works end to end) without forcing an + # ipopt install into the two run_all CI jobs, which have no other use + # for one. + timeout-minutes: 10 + run: | + cd examples/farmer + mpiexec -np 2 coverage run $COV_ARGS -m mpi4py \ + ../../mpisppy/generic_cylinders.py \ + --module-name farmer --num-scens 3 --solver-name ipopt \ + --max-iterations 5 --default-rho 1.0 --ipopt-outer-bound - name: List coverage files (debug) if: always() diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index 4451b5e45..2797fb09d 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -410,11 +410,13 @@ noted in §12. |---|---| | `mpisppy/utils/dual_certificate.py` | **Landed (Phase 1).** Pure function of a solved Pyomo model + its `dual` suffix → certified lower bound. No MPI, no cylinder, no PH. Named neutrally because only the §5 sign table is Ipopt-specific; the convention is a `sign_convention="ipopt"` argument rather than a hard-coded assumption. API: `check_model_is_certifiable`, `unbounded_variables`, `certified_lower_bound`, `CertificateError`. | | `mpisppy/tests/test_dual_certificate.py` | **Landed (Phase 1).** Wired into `run_coverage.bash` and the `unit-tests` CI job. | -| `mpisppy/cylinders/ipopt_outer_bound.py` | New. `IpoptOuterBound(_LagrangianMixin, OuterBoundWSpoke)`; `outer_bound_only = False` (duals and primals are both needed); per-scenario certificate → `_mpisppy_data.outer_bound` → `Ebound()`. | -| `mpisppy/utils/config.py` | `--ipopt-outer-bound` and its options. | -| `mpisppy/utils/cfg_vanilla.py` | `ipopt_outer_bound_spoke()` factory, alongside `lagrangian_spoke()`. | -| `mpisppy/generic_cylinders.py` | Driver wiring. | -| `doc/src/spokes.rst` | User-facing page. | +| `mpisppy/cylinders/ipopt_outer_bound.py` | **Landed.** `IpoptOuterBound(_LagrangianMixin, OuterBoundWSpoke)`; `outer_bound_only = False` (duals and primals are both needed); per-scenario certificate → `_mpisppy_data.outer_bound` → `Ebound()`. | +| `mpisppy/utils/config.py` | **Landed.** `ipopt_outer_bound_args()`. | +| `mpisppy/utils/cfg_vanilla.py` | **Landed.** `ipopt_outer_bound_spoke()` factory, alongside `lagrangian_spoke()`. | +| `mpisppy/generic/spokes.py` | **Landed.** Spoke registry. Note this is *not* `generic_cylinders.py`, where an earlier draft of this table put it — the driver delegates spoke construction to `generic/spokes.py`, and the arg registration to `generic/parsing.py`. | +| `mpisppy/generic/parsing.py` | **Landed.** Registers `ipopt_outer_bound_args()`. | +| `mpisppy/tests/test_ipopt_outer_bound.py` | **Landed.** Wiring tests (no solver, no MPI) plus an end-to-end run against the EF optimum. | +| `doc/src/spokes.rst` | **Landed.** User-facing page. | Prep attaches a `dual` Suffix (IMPORT) to each scenario. The objective expression after `PH_Prep(attach_prox=False)` is already `f_s + W_sᵀx`, so `φ_s` builds directly on top @@ -432,14 +434,25 @@ Each phase is its own review-sized PR and is green on its own. - **Phase 1 — certificate engine. DONE, in this design branch.** `utils/dual_certificate.py` plus the §6 model guards plus `tests/test_dual_certificate.py`. No cylinder, no MPI, no config surface. -- **Phase 2 — the cylinder.** `IpoptOuterBound`, config flag, `cfg_vanilla` factory, - `generic_cylinders` wiring; serial (single-rank) run on a convex example. -- **Phase 3 — parallel + docs.** Multi-rank cylinder test exercising the `Ebound` - reduction and the write-id agreement path; `doc/src/spokes.rst`; `run_all.py` entry. -- **Phase 4 — optional tightening re-solve.** Re-solve `min_{v∈B} φ_s(v)` when the - correction exceeds a threshold, and re-certify at the new point. Opt-in; this is the - only part that costs a second solve. -- **Phase 5 — maximization** through the concave mirror. +- **Phase 2 — the cylinder. DONE.** `IpoptOuterBound`, config surface, `cfg_vanilla` + factory, driver wiring. +- **Phase 3 — parallel + docs. DONE.** Two-rank test exercising the `Ebound` + reduction; `doc/src/spokes.rst`; a driver command-line smoke run. + +**Phases 1–3 ship as a single PR**, revising the "each phase its own PR" plan above. +The reason is review latency rather than principle: with no reviewer available in this +area for some time, splitting buys nothing and costs coherence — and Phase 1 on its own +is arguably *harder* to review, being a mathematical argument with no consumer. Together, +a reviewer can watch the bound get produced against a known EF optimum. + +Deferred, and possibly forever — neither is needed for the feature to be complete, so +both are better filed as issues than kept as planned phases: + +- **Optional tightening re-solve.** Re-solve `min_{v∈B} φ_s(v)` when the correction + exceeds a threshold, and re-certify at the new point. By §3.4's own argument the + correction is ~0 at a converged solve, so this may never be worth building. +- **Maximization** through the concave mirror. A hard error today, which is a fine + permanent state unless someone actually needs it. ### 10.1 Ipopt in CI — done, and it is the good build @@ -528,7 +541,21 @@ optimum 8 at `(1, 0)` and multiplier 4, all analytic. `1e-9·(1+|q̂|)` and never turns a valid bound invalid. - **Integration**: `farmer` is linear, hence convex, and Ipopt solves it; compare the cylinder's bound against the EF optimum. -- **MPI**: 2-rank cylinder, same comparison, exercising `Ebound`'s reduction. +- **MPI**: 2-rank cylinder, same comparison, exercising `Ebound`'s reduction. The hub + runs Ipopt too by default so the test needs no MIP solver; a second case runs the hub + on a MIP solver and skips when none is available, which is what actually demonstrates + the §7 routing claim. +- **Option routing** (no solver, no MPI): that the global `--solver-options` layer does + *not* reach this spoke while the per-spoke layer does, and — the assertion that makes + that meaningful — that `lagrangian_spoke` still *does* inherit the global layer. This + is the §7.1 decision, and it is the part most likely to break silently. + +**No `run_all.py` entry.** The usual home for "the documented command line still works" +is `run_all.py`, but `do_one` has no skip machinery, so an entry there would force an +Ipopt install into both `run_all` CI jobs, which have no other use for one. The same +coverage is bought far more cheaply by a driver smoke run inside the `ipopt-tests` job, +which already has Ipopt. Worth revisiting if Ipopt ever lands in those jobs for another +reason. New `mpisppy/tests/test_*.py` files go into `run_coverage.bash` **and** `.github/workflows/test_pr_and_main.yml` in the same commit, or codecov reports 0% on diff --git a/doc/src/spokes.rst b/doc/src/spokes.rst index 532bde125..d9dc40250 100644 --- a/doc/src/spokes.rst +++ b/doc/src/spokes.rst @@ -34,6 +34,63 @@ hedging algorithm for stochastic mixed-integer programs` by Gade et al [gade2016]_. It takes W values from the hub and uses them to compute a bound. +ipopt_outer_bound +^^^^^^^^^^^^^^^^^ + +An outer bound for problems whose scenario subproblems are **convex NLPs solved +with Ipopt**, enabled with ``--ipopt-outer-bound``. + +The Lagrangian spoke gets its bound from the solver's dual bound. Ipopt is not a +branch-and-bound solver and reports none, so on a convex NLP that spoke produces +nothing usable. This one computes the bound itself, from the subproblem's own +duals. + +It does not simply report the solved objective value. That is the value *at a +point*, hence an inner bound for a minimization -- the wrong direction. What it +computes instead is a Lagrangian weak-duality bound, corrected by a tangent-plane +underestimator minimized in closed form over the variable box. The result is +valid for *any* multipliers, so no assumption that Ipopt converged is needed: a +truncated or sloppy solve gives a loose bound rather than a wrong one. At an +exact KKT point the correction vanishes and the bound equals the subproblem +optimum. + +Cost is one solve per scenario per iteration, the same as the Lagrangian spoke. + +.. warning:: + **Convexity is assumed and mostly cannot be checked.** If the objective or an + inequality body is non-convex, the bound is simply wrong. What *is* checked, + as a hard error at setup: discrete variables, nonlinear equality constraints, + a maximization objective, and a solver that is not Ipopt. + +Two things determine whether the bound is any good: + +**Variable bounds.** The certificate minimizes over the box of variable bounds, +so its looseness is roughly ``sum_i |d_i phi| * (width of the box in the +descending direction)``. Tight bounds give a tight bound; enormous ones give a +valid but useless number. ``fbbt`` runs first to recover bounds implied by the +constraints. A variable still unbounded afterwards produces a warning at setup, +and the spoke reports nothing on iterations where that variable's gradient +component is nonzero -- it stays quiet rather than sending a wrong number. + +**Solver options.** Unlike every other spoke, this one does **not** inherit the +global ``--solver-options``. Ipopt hard-fails on an unrecognized keyword rather +than ignoring it, so a perfectly ordinary run (a MIP solver and its options for +the hub, this spoke attached alongside) would otherwise kill the spoke on its +first solve. Pass Ipopt settings through ``--ipopt-outer-bound-solver-options``. + +The hub and the other spokes keep whatever ``--solver-name`` selects; only this +spoke is pinned to Ipopt, via ``--ipopt-outer-bound-solver-name`` (default +``ipopt``). Note that this routing lets Ipopt coexist with a MIP solver on a +*convex* model -- it does not let it certify a non-convex one. If the model has +integer variables this spoke is inapplicable no matter what anything else runs. + +``--ipopt-outer-bound-cushion`` (default ``1e-9``) subtracts a small relative +amount, ``q - eps*(1+|q|)``, from the reported bound. This is last-bit hygiene +against floating point, not a proof-carrying margin; pass ``0`` to disable it. + +Maximization is not supported and raises at setup. + + Subgradient ^^^^^^^^^^^ diff --git a/mpisppy/cylinders/ipopt_outer_bound.py b/mpisppy/cylinders/ipopt_outer_bound.py new file mode 100644 index 000000000..5529c6e39 --- /dev/null +++ b/mpisppy/cylinders/ipopt_outer_bound.py @@ -0,0 +1,210 @@ +############################################################################### +# mpi-sppy: MPI-based Stochastic Programming in PYthon +# +# Copyright (c) 2024, Lawrence Livermore National Security, LLC, Alliance for +# Sustainable Energy, LLC, The Regents of the University of California, et al. +# All rights reserved. Please see the files COPYRIGHT.md and LICENSE.md for +# full copyright and license information. +############################################################################### +# An outer-bound spoke for convex NLP subproblems solved with Ipopt. +# +# The ordinary Lagrangian spoke reads its bound off the solver's dual bound. +# Ipopt is not a branch-and-bound solver and reports none, so that spoke warns +# and produces nothing usable. This one computes the bound itself, from the +# subproblem's own duals, using mpisppy.utils.dual_certificate -- see that +# module for the argument. The short version: the value at the returned point +# is an *inner* bound, and what makes an outer bound available without any +# convergence assumption is Lagrangian weak duality plus a tangent-plane +# underestimator minimized in closed form over the variable box. +# +# Convexity of the scenario subproblems is the user's assertion. The parts of it +# that can be checked mechanically are checked at setup and are hard errors; see +# _check_setup_guards. + +import warnings + +import pyomo.environ as pyo + +import mpisppy.utils.sputils as sputils +from mpisppy.cylinders.lagrangian_bounder import _LagrangianMixin +from mpisppy.cylinders.spoke import OuterBoundWSpoke +from mpisppy.utils.dual_certificate import ( + CertificateError, + certified_lower_bound, + check_model_is_certifiable, + unbounded_variables, +) + + +class IpoptOuterBound(_LagrangianMixin, OuterBoundWSpoke): + + converger_spoke_char = 'I' + + # The certificate reads the point *and* the duals off the solved model, so + # unlike the Lagrangian spoke this one cannot skip loading the solution. + outer_bound_only = False + + def ipopt_outer_bound_prep(self): + """lagrangian_prep plus what the certificate needs: a dual suffix on + every subproblem, the setup guards, and the bound tightening.""" + self.lagrangian_prep() + + # PH_Prep(attach_prox=False) is what makes this the Lagrangian + # relaxation rather than a proximal subproblem. Assert rather than + # trust: with a prox term the number below is not a Lagrangian bound. + if not getattr(self.opt, "prox_disabled", True) and not self.opt.W_disabled: + raise CertificateError( + "ipopt_outer_bound requires the proximal term to be absent; " + "the bound it computes is a Lagrangian bound and a proximal " + "subproblem is not the Lagrangian relaxation" + ) + + for s in self.opt.local_scenarios.values(): + if not hasattr(s, "dual"): + s.dual = pyo.Suffix(direction=pyo.Suffix.IMPORT) + + self._check_setup_guards() + + # Snapshot which nonants are fixed now, so a fixing extension that + # fixes more of them later can be caught: fixing a nonant restricts the + # subproblem, which can only raise its minimum, so the result would + # bound the restricted problem and not the original. Nonants the + # scenario creator fixed are part of the problem and are fine. + self._fixed_at_setup = { + (sname, ndn_i): xvar.fixed + for sname, s in self.opt.local_scenarios.items() + for ndn_i, xvar in s._mpisppy_data.nonant_indices.items() + } + + def _check_setup_guards(self): + """Hard errors for the parts of the theorem that are checkable, and a + warning for the part that only costs tightness.""" + solver_name = self.opt.options.get("solver_name") or "" + if "ipopt" not in solver_name: + raise CertificateError( + f"ipopt_outer_bound is scoped to Ipopt, but its solver is " + f"{solver_name!r}. The dual sign conventions it relies on are " + "measured from Ipopt only. Set --ipopt-outer-bound-solver-name." + ) + + for sname, s in self.opt.local_scenarios.items(): + try: + check_model_is_certifiable(s) + except CertificateError as e: + raise CertificateError(f"scenario {sname}: {e}") from None + + # fbbt first (it can only shrink the box, which makes the bound + # tighter without dropping a feasible point), then say something if a + # variable is still unbounded. Not an error: this cylinder is an + # optional source of a bound, and a model that is merely under-bounded + # is not a broken model. It may simply report nothing. + still_unbounded = {} + for sname, s in self.opt.local_scenarios.items(): + names = unbounded_variables(s, do_fbbt=True) + if names: + still_unbounded[sname] = names + if still_unbounded and self.cylinder_rank == 0: + sname, names = next(iter(still_unbounded.items())) + warnings.warn( + f"ipopt_outer_bound: {len(still_unbounded)} scenario(s) have " + "variables with no finite bound after fbbt, for example " + f"{sname}: {', '.join(names[:5])}" + f"{' ...' if len(names) > 5 else ''}. The certificate minimizes " + "over the variable box, so an unbounded direction with a " + "nonzero gradient yields no bound and this spoke will stay " + "quiet on those iterations. Bounding those variables is what " + "makes this spoke useful." + ) + + def _assert_nonants_not_newly_fixed(self): + newly = [ + f"{sname}:{ndn_i}" + for sname, s in self.opt.local_scenarios.items() + for ndn_i, xvar in s._mpisppy_data.nonant_indices.items() + if xvar.fixed and not self._fixed_at_setup[(sname, ndn_i)] + ] + if newly: + raise CertificateError( + "ipopt_outer_bound: nonanticipative variables were fixed after " + f"setup ({', '.join(newly[:5])}" + f"{' ...' if len(newly) > 5 else ''}). Fixing restricts the " + "subproblem, so its minimum is a bound on the restricted " + "problem and not on the original. Remove the fixing extension " + "from this spoke." + ) + + def _solve_and_certify(self, warmstart=sputils.WarmstartStatus.PRIOR_SOLUTION): + """Solve every subproblem, then replace the solver's (useless) bound + with the certificate. Returns the expected outer bound, or None.""" + self.receive_nonant_bounds() + verbose = self.opt.options['verbose'] + teeme = self.opt.options.get('tee-rank0-solves', False) + + self.opt.solve_loop( + solver_options=self.opt._effective_solver_options(self.opt._PHIter), + dtiming=False, + gripe=True, + tee=teeme, + verbose=verbose, + need_solution=True, + warmstart=warmstart, + ) + + self._assert_nonants_not_newly_fixed() + + for s in self.opt.local_scenarios.values(): + # solve_loop has just written results.Problem[0].Lower_bound here, + # which for Ipopt is -inf. Overwrite it with the certificate, or + # with None when there is no certificate to be had -- Ebound then + # declines collectively rather than folding a -inf into the sum. + if not s._mpisppy_data.solution_available: + s._mpisppy_data.outer_bound = None + continue + s._mpisppy_data.outer_bound = certified_lower_bound( + s, sign_convention="ipopt", eps_rel=self._cushion) + + return self.opt.Ebound(verbose) + + @property + def _cushion(self): + return self.opt.options.get("ipopt_outer_bound_cushion", 1e-9) + + def _set_weights_and_solve(self, warmstart=sputils.WarmstartStatus.PRIOR_SOLUTION): + self.opt.W_from_flat_list(self.localWs) + return self._solve_and_certify(warmstart=warmstart) + + def main(self): + self.verbose = self.opt.options['verbose'] + extensions = self.opt.extensions is not None + + self.ipopt_outer_bound_prep() + + if extensions: + self.opt.extobject.pre_iter0() + + self.opt._PHIter = 0 + self.trivial_bound = self._solve_and_certify( + warmstart=sputils.WarmstartStatus.USER_SOLUTION) + + if extensions: + self.opt.extobject.post_iter0() + self.opt._PHIter += 1 + self.opt.current_solver_options = {} + + if self.trivial_bound is not None: + self.send_bound(self.trivial_bound) + if extensions: + self.opt.extobject.post_iter0_after_sync() + + while not self.got_kill_signal(): + if self.update_Ws(): + if extensions: + self.opt.extobject.miditer() + bound = self._set_weights_and_solve() + if extensions: + self.opt.extobject.enditer() + if bound is not None: + self.send_bound(bound) + if extensions: + self.opt.extobject.enditer_after_sync() + self.opt._PHIter += 1 diff --git a/mpisppy/generic/parsing.py b/mpisppy/generic/parsing.py index a46c7cf0b..d76ebd099 100644 --- a/mpisppy/generic/parsing.py +++ b/mpisppy/generic/parsing.py @@ -126,6 +126,7 @@ def add_decomp_args(cfg): cfg.ph_xfeas_spoke_args() cfg.fwph_args() cfg.lagrangian_args() + cfg.ipopt_outer_bound_args() cfg.subgradient_bounder_args() cfg.xhatshuffle_args() cfg.xhatxbar_args() diff --git a/mpisppy/generic/spokes.py b/mpisppy/generic/spokes.py index d86da280a..a32d1ada5 100644 --- a/mpisppy/generic/spokes.py +++ b/mpisppy/generic/spokes.py @@ -58,6 +58,15 @@ def build_spoke_list(cfg, beans, scenario_creator_kwargs, vanilla.add_gapper(lagrangian_spoke, cfg, "lagrangian") lagrangian_spoke["rank_ratio"] = cfg.lagrangian_rank_ratio + # Certified outer bound for convex NLP subproblems solved with Ipopt + if cfg.ipopt_outer_bound: + ipopt_outer_bound_spoke = vanilla.ipopt_outer_bound_spoke(*beans, + scenario_creator_kwargs=scenario_creator_kwargs, + rho_setter=rho_setter, + all_nodenames=all_nodenames, + ) + ipopt_outer_bound_spoke["rank_ratio"] = cfg.ipopt_outer_bound_rank_ratio + # dual ph spoke if cfg.ph_dual: ph_dual_spoke = vanilla.ph_dual_spoke(*beans, @@ -173,6 +182,8 @@ def build_spoke_list(cfg, beans, scenario_creator_kwargs, list_of_spoke_dict.append(fw_spoke) if cfg.lagrangian: list_of_spoke_dict.append(lagrangian_spoke) + if cfg.ipopt_outer_bound: + list_of_spoke_dict.append(ipopt_outer_bound_spoke) if cfg.ph_dual: list_of_spoke_dict.append(ph_dual_spoke) if cfg.relaxed_ph: diff --git a/mpisppy/tests/test_ipopt_outer_bound.py b/mpisppy/tests/test_ipopt_outer_bound.py new file mode 100644 index 000000000..3611fd136 --- /dev/null +++ b/mpisppy/tests/test_ipopt_outer_bound.py @@ -0,0 +1,227 @@ +############################################################################### +# mpi-sppy: MPI-based Stochastic Programming in PYthon +# +# Copyright (c) 2024, Lawrence Livermore National Security, LLC, Alliance for +# Sustainable Energy, LLC, The Regents of the University of California, et al. +# All rights reserved. Please see the files COPYRIGHT.md and LICENSE.md for +# full copyright and license information. +############################################################################### +# Tests for the ipopt_outer_bound spoke. +# +# python -m pytest mpisppy/tests/test_ipopt_outer_bound.py +# mpiexec -np 2 python -m mpi4py -m pytest mpisppy/tests/test_ipopt_outer_bound.py +# +# The wiring tests need neither a solver nor MPI: option routing is the part +# most likely to break silently, and it is checkable by inspecting the spoke +# dict the factory builds. The end-to-end test needs both Ipopt and two ranks +# and skips cleanly without them. + +import unittest + +import pyomo.environ as pyo + +import mpisppy.tests.examples.farmer as farmer +import mpisppy.utils.cfg_vanilla as vanilla +from mpisppy.utils import config +from mpisppy.spin_the_wheel import WheelSpinner +from mpisppy.utils.dual_certificate import CertificateError +from mpisppy.tests.utils import get_solver + +from mpi4py import MPI + +comm = MPI.COMM_WORLD + +ipopt_available = pyo.SolverFactory("ipopt").available(exception_flag=False) +mip_available, mip_solver_name, *_ = get_solver() + +# The three-scenario farmer optimum, from an EF solve. farmer is linear, hence +# convex, so it is inside this spoke's assumptions and its bound must not exceed +# this value. +FARMER_EF_OPT = -108390.0 + + +def _cfg(num_scens=3, hub_solver="ipopt"): + cfg = config.Config() + cfg.num_scens_required() + cfg.popular_args() + cfg.two_sided_args() + cfg.ph_args() + cfg.lagrangian_args() + cfg.ipopt_outer_bound_args() + cfg.num_scens = num_scens + cfg.max_iterations = 5 + cfg.default_rho = 1.0 + cfg.solver_name = hub_solver + return cfg + + +def _beans(cfg): + all_scenario_names = farmer.scenario_names_creator(cfg.num_scens) + kwargs = farmer.kw_creator(cfg) + beans = (cfg, farmer.scenario_creator, farmer.scenario_denouement, + all_scenario_names) + return beans, kwargs + + +def _spoke_options(cfg, **kw): + beans, kwargs = _beans(cfg) + spoke = vanilla.ipopt_outer_bound_spoke(*beans, + scenario_creator_kwargs=kwargs, **kw) + return spoke["opt_kwargs"]["options"] + + +class TestConfigSurface(unittest.TestCase): + + def test_flags_exist_with_expected_defaults(self): + cfg = _cfg() + self.assertFalse(cfg.ipopt_outer_bound) + self.assertEqual(cfg.ipopt_outer_bound_rank_ratio, 1.0) + self.assertEqual(cfg.ipopt_outer_bound_cushion, 1e-9) + # Scoped to Ipopt, but the name is still overridable. + self.assertIn("ipopt_outer_bound_solver_name", cfg) + + def test_no_mipgap_flags(self): + # Ipopt is not a branch-and-bound solver; offering mipgap flags would + # imply otherwise. + cfg = _cfg() + self.assertNotIn("ipopt_outer_bound_starting_mipgap", cfg) + self.assertNotIn("ipopt_outer_bound_iter0_mipgap", cfg) + + +class TestFactoryWiring(unittest.TestCase): + + def test_solver_defaults_to_ipopt(self): + # Even when the hub runs something else entirely, the spoke must land + # on ipopt rather than inheriting -- its own setup guard would reject + # anything else. + options = _spoke_options(_cfg(hub_solver="gurobi")) + self.assertEqual(options["solver_name"], "ipopt") + + def test_explicit_solver_name_is_honored(self): + cfg = _cfg() + cfg.ipopt_outer_bound_solver_name = "ipopt_v2" + self.assertEqual(_spoke_options(cfg)["solver_name"], "ipopt_v2") + + def test_cushion_is_threaded_through(self): + cfg = _cfg() + cfg.ipopt_outer_bound_cushion = 1e-7 + self.assertEqual( + _spoke_options(cfg)["ipopt_outer_bound_cushion"], 1e-7) + + def test_global_solver_options_do_not_leak(self): # noqa: D401 + # The point of this test: Ipopt hard-fails on an unrecognized keyword + # rather than ignoring it, so inheriting the global --solver-options + # (meant for the hub's MIP solver) would kill this spoke on its first + # solve, with an error naming Ipopt rather than the option routing. + cfg = _cfg() + cfg.solver_options = "mipgap=0.01" + options = _spoke_options(cfg) + self.assertNotIn("mipgap", options["iter0_solver_options"]) + self.assertNotIn("mipgap", options["iterk_solver_options"]) + self.assertEqual(options["solver_options_layers"], []) + + def test_other_spokes_still_inherit_global_options(self): + # The contrast that makes the previous test meaningful: not inheriting + # is special to this spoke, not a change in how spokes work. + cfg = _cfg() + cfg.solver_options = "mipgap=0.01" + beans, kwargs = _beans(cfg) + lag = vanilla.lagrangian_spoke(*beans, scenario_creator_kwargs=kwargs) + self.assertIn("mipgap", + lag["opt_kwargs"]["options"]["iter0_solver_options"]) + + def test_per_spoke_solver_options_do_apply(self): + # Not inheriting the global layer must not mean ignoring the spoke's + # own options, which is how Ipopt settings are meant to arrive. + cfg = _cfg() + cfg.solver_options = "mipgap=0.01" + cfg.ipopt_outer_bound_solver_options = "max_iter=42" + options = _spoke_options(cfg) + self.assertEqual(options["iterk_solver_options"].get("max_iter"), 42) + self.assertNotIn("mipgap", options["iterk_solver_options"]) + + +class TestSetupGuards(unittest.TestCase): + """The guards that belong to the spoke rather than the certificate engine. + + Constructed without running a wheel: the guard reads self.opt.options, so a + lightweight stand-in exercises it without a solve. + """ + + def _guard_with_solver(self, solver_name): + from mpisppy.cylinders.ipopt_outer_bound import IpoptOuterBound + + class _Stub: + options = {"solver_name": solver_name} + local_scenarios = {} + + spoke = IpoptOuterBound.__new__(IpoptOuterBound) + spoke.opt = _Stub() + spoke.cylinder_rank = 0 + return spoke + + def test_non_ipopt_solver_is_rejected(self): + spoke = self._guard_with_solver("gurobi") + with self.assertRaisesRegex(CertificateError, "scoped to Ipopt"): + spoke._check_setup_guards() + + def test_ipopt_variants_are_accepted(self): + # ipopt_v2 and similar names still name Ipopt. + for name in ("ipopt", "ipopt_v2"): + with self.subTest(name=name): + self._guard_with_solver(name)._check_setup_guards() + + def test_missing_solver_name_is_rejected(self): + spoke = self._guard_with_solver(None) + with self.assertRaisesRegex(CertificateError, "scoped to Ipopt"): + spoke._check_setup_guards() + + +@unittest.skipUnless(ipopt_available, "ipopt is not available") +@unittest.skipUnless(comm.size == 2, "needs exactly two ranks") +class TestAgainstEFOptimum(unittest.TestCase): + """End-to-end: a PH hub on a MIP solver, this spoke on Ipopt. + + This also exercises the routing claim in the design -- the hub and the spoke + really do run different solvers on their own copies of the models -- and the + Ebound reduction across the spoke's rank. + """ + + def _spin(self, hub_solver): + cfg = _cfg(hub_solver=hub_solver) + beans, kwargs = _beans(cfg) + hub_dict = vanilla.ph_hub(*beans, scenario_creator_kwargs=kwargs) + spoke = vanilla.ipopt_outer_bound_spoke( + *beans, scenario_creator_kwargs=kwargs) + wheel = WheelSpinner(hub_dict, [spoke]) + wheel.spin() + return wheel + + def _assert_valid_and_useful(self, wheel): + if wheel.global_rank != 1: + return + bound = wheel.spcomm.bound + self.assertIsNotNone(bound) + # An outer bound on a minimization must not exceed the optimum. + self.assertLessEqual(bound, FARMER_EF_OPT + 1e-6) + # And it must be useful, not merely valid: farmer's Lagrangian bound + # sits in the same neighborhood as the optimum, so a wildly negative + # number would mean the certificate had collapsed. + self.assertGreater(bound, 2.0 * FARMER_EF_OPT) + + def test_bound_does_not_exceed_the_ef_optimum(self): + # farmer is an LP, so Ipopt can drive the hub too; this keeps the test + # runnable anywhere Ipopt is, with no MIP solver needed. + self._assert_valid_and_useful(self._spin("ipopt")) + + @unittest.skipUnless(mip_available, "no MIP solver available") + def test_hub_and_spoke_can_use_different_solvers(self): + # The routing claim in the design: each cylinder solves its own copy of + # the models with its own solver, and the only coupling is the numeric + # exchange of W and bounds. Here the hub runs a MIP solver while the + # spoke runs Ipopt. + self._assert_valid_and_useful(self._spin(mip_solver_name)) + + +if __name__ == "__main__": + unittest.main() diff --git a/mpisppy/utils/cfg_vanilla.py b/mpisppy/utils/cfg_vanilla.py index 9aa269a0d..d8c56b1c8 100644 --- a/mpisppy/utils/cfg_vanilla.py +++ b/mpisppy/utils/cfg_vanilla.py @@ -1172,6 +1172,58 @@ def lagrangian_spoke( return lagrangian_spoke +def ipopt_outer_bound_spoke( + cfg, + scenario_creator, + scenario_denouement, + all_scenario_names, + scenario_creator_kwargs=None, + rho_setter=None, + all_nodenames=None, + ph_extensions=None, + extension_kwargs=None, +): + from mpisppy.cylinders.ipopt_outer_bound import IpoptOuterBound + ipopt_ob_spoke = _PHBase_spoke_foundation( + IpoptOuterBound, + cfg, + scenario_creator, + scenario_denouement, + all_scenario_names, + scenario_creator_kwargs=scenario_creator_kwargs, + rho_setter=rho_setter, + all_nodenames=all_nodenames, + ph_extensions=ph_extensions, + extension_kwargs=extension_kwargs, + ) + + # This spoke does NOT inherit the global --solver-options layer, unlike + # every other spoke. Ipopt hard-fails on an unrecognized keyword rather + # than ignoring it, so an ordinary run -- a MIP solver and its options for + # the hub, this spoke attached alongside -- would kill the spoke on its + # first solve with an error naming Ipopt rather than the option routing. + # Ipopt-specific settings come in through --ipopt-outer-bound-solver-options. + # Filtering the global dict against a list of Ipopt-known keywords was + # considered and rejected: the list would have to track Ipopt releases, and + # silently dropping an option the user set is worse than never applying it. + options = ipopt_ob_spoke["opt_kwargs"]["options"] + options["iter0_solver_options"] = dict() + options["iterk_solver_options"] = dict() + options["solver_options_layers"] = [] + + apply_solver_specs("ipopt_outer_bound", ipopt_ob_spoke, cfg) + # apply_solver_specs only sets solver_name when the per-spoke flag was + # given; without this the spoke would silently inherit the global solver, + # which the setup guard then rejects. The spoke is Ipopt-scoped, so ipopt + # is the sensible default rather than something the user must repeat. + if not cfg.get("ipopt_outer_bound_solver_name"): + options["solver_name"] = "ipopt" + options["ipopt_outer_bound_cushion"] = cfg.ipopt_outer_bound_cushion + add_ph_tracking(ipopt_ob_spoke, cfg, spoke=True) + + return ipopt_ob_spoke + + def reduced_costs_spoke( cfg, scenario_creator, diff --git a/mpisppy/utils/config.py b/mpisppy/utils/config.py index 9b3f7a2e3..a49ce5d3a 100644 --- a/mpisppy/utils/config.py +++ b/mpisppy/utils/config.py @@ -1040,6 +1040,38 @@ def lagrangian_args(self): default=False) + def ipopt_outer_bound_args(self): + + self.add_to_config('ipopt_outer_bound', + description="have an ipopt_outer_bound spoke " + "(certified Lagrangian outer bound for " + "convex NLP subproblems; see spokes.rst)", + domain=bool, + default=False) + + self.add_to_config('ipopt_outer_bound_rank_ratio', + description="MPI ranks for the ipopt_outer_bound " + "spoke relative to the hub (flexible rank " + "assignments; default 1.0 = equal)", + domain=float, + default=1.0) + + # No add_mipgap_specs: Ipopt is not a branch-and-bound solver and has no + # mip gap. Offering the flags would suggest otherwise. + # The spoke is scoped to Ipopt, so its solver defaults to ipopt when + # this is left unset (applied in cfg_vanilla.ipopt_outer_bound_spoke; + # add_solver_specs itself defaults every solver name to None). + self.add_solver_specs("ipopt_outer_bound") + + self.add_to_config('ipopt_outer_bound_cushion', + description="relative cushion subtracted from the " + "certified bound: report q - eps*(1+|q|). " + "Last-bit hygiene against floating point, " + "not a proof-carrying margin; 0 disables", + domain=float, + default=1e-9) + + def reduced_costs_args(self): self.add_to_config('reduced_costs', diff --git a/run_coverage.bash b/run_coverage.bash index 963e63174..505303a9c 100755 --- a/run_coverage.bash +++ b/run_coverage.bash @@ -214,7 +214,11 @@ run_phase "serial unit tests (serial)" \ mpisppy/tests/test_sep_rho.py \ mpisppy/tests/test_reduced_costs_fixer.py \ mpisppy/tests/test_slammer.py \ - mpisppy/tests/test_dual_certificate.py + mpisppy/tests/test_dual_certificate.py \ + mpisppy/tests/test_ipopt_outer_bound.py + +run_phase "test_ipopt_outer_bound (mpiexec -np 2)" \ + mpiexec -np 2 coverage run --rcfile="$PROJ_DIR/.coveragerc" -m mpi4py -m pytest mpisppy/tests/test_ipopt_outer_bound.py -v run_phase "test_conf_int_farmer (spawns mpiexec)" \ coverage run --rcfile=.coveragerc mpisppy/tests/test_conf_int_farmer.py From b50b5c5568295afdbb612d21c61da9c67aecbc5a Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Mon, 17 Aug 2026 17:43:48 -0700 Subject: [PATCH 04/16] Register ipopt_outer_bound_args in the flexible-rank CLI test's config build_spoke_list reads cfg.ipopt_outer_bound directly, as it does for every other spoke, so a Config that has not declared the flag raises AttributeError rather than skipping the spoke. test_flexible_rank_cli builds a deliberately explicit Config -- its comment says it declares "the subset that build_spoke_list reads ... so every cfg flag it touches exists" -- so adding a spoke means adding its args there. The test was doing its job; it caught this in CI. Co-Authored-By: Claude Opus 5 --- mpisppy/tests/test_flexible_rank_cli.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mpisppy/tests/test_flexible_rank_cli.py b/mpisppy/tests/test_flexible_rank_cli.py index 65d501f16..391d0da2b 100644 --- a/mpisppy/tests/test_flexible_rank_cli.py +++ b/mpisppy/tests/test_flexible_rank_cli.py @@ -28,6 +28,7 @@ def _full_cfg(): cfg.fwph_args() cfg.lagrangian_args() cfg.gapper_args("lagrangian") + cfg.ipopt_outer_bound_args() cfg.ph_dual_args() cfg.relaxed_ph_args() cfg.ph_xfeas_spoke_args() From e6f26e85be4954bf0e249c5f0306c44d1edae25e Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Mon, 17 Aug 2026 18:17:15 -0700 Subject: [PATCH 05/16] Cross-check the certificate against the Lagrangian spoke, and acknowledge HSL Two additions, both prompted by reading the CI log for the ipopt-tests job. The smoke run reported a final bound of -109499.5162. The value test_with_cylinders asserts for the ORDINARY Lagrangian spoke on the same problem is -109499.5160897. farmer is an LP, so an LP solver's dual bound is the Lagrangian dual value exactly -- and this spoke arrives at the same number by an entirely different route, a tangent plane over the variable box built from Ipopt's duals. That agreement is much sharper evidence than "the bound does not exceed the optimum", which a badly broken certificate could still pass by being very negative, so it is now an explicit test rather than a coincidence in a log. Both legs run the same hub with the same rho and iteration count, so the hub walks the same W trajectory and the two spokes are asked about the same relaxations; spoke bounds do not feed back into W. Measured agreement is ~1.2e-4, asserted at 1e-2, and separately asserted in the safe direction: the certificate carries the box correction and the cushion, so it may be looser than the exact LP dual bound but must never be more optimistic. The Lagrangian leg needs a solver that actually reports a dual bound; it prefers whatever get_solver finds and falls back to cbc, which ships in the same idaes-ext bundle that supplies Ipopt, so this test runs rather than skips in CI. Second: the idaes-ext Ipopt links HSL and defaults to the ma27 linear solver rather than to MUMPS, so these tests have been solving with HSL all along. Ipopt's own banner says any publicity material resulting from use of the HSL codes must carry an acknowledgement, and our solves run with tee=False, so that banner never reaches the screen. mpisppy/tests/utils.py grows a helper that probes which linear solver ipopt actually uses -- one trivial solve into a logfile, cached -- and prints the acknowledgement once per process when HSL is in use. The ipopt-dependent test modules call it, the CI job echoes the same text, and spokes.rst notes it. The probe is exception-safe and silent when ipopt is absent or is not an HSL build: a courtesy message must never break a test run. Which linear solver is in use is worth surfacing anyway, since results can differ between ma27 and MUMPS and nothing else in the output says which ran. Co-Authored-By: Claude Opus 5 --- .github/workflows/test_pr_and_main.yml | 7 +++ doc/src/spokes.rst | 13 ++++ mpisppy/tests/test_dual_certificate.py | 4 ++ mpisppy/tests/test_ipopt_outer_bound.py | 80 ++++++++++++++++++++++- mpisppy/tests/utils.py | 84 +++++++++++++++++++++++++ 5 files changed, 187 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_pr_and_main.yml b/.github/workflows/test_pr_and_main.yml index b6e148250..0cfd34dbb 100644 --- a/.github/workflows/test_pr_and_main.yml +++ b/.github/workflows/test_pr_and_main.yml @@ -1344,6 +1344,13 @@ jobs: assert abs(pyo.value(m.x) - 1.0) < 1e-6, ls print(ls, 'OK') " + echo "" + echo "==============================================================================" + echo "This build of Ipopt links HSL, and defaults to the ma27 linear solver, so" + echo "the tests below solve with HSL rather than with MUMPS." + echo "HSL, a collection of Fortran codes for large-scale scientific computation." + echo "See https://www.hsl.rl.ac.uk/" + echo "==============================================================================" - name: run ipopt-dependent tests timeout-minutes: 10 diff --git a/doc/src/spokes.rst b/doc/src/spokes.rst index d9dc40250..4e6a87f47 100644 --- a/doc/src/spokes.rst +++ b/doc/src/spokes.rst @@ -90,6 +90,19 @@ against floating point, not a proof-carrying margin; pass ``0`` to disable it. Maximization is not supported and raises at setup. +.. note:: + Ipopt builds obtained from the IDAES ``idaes-ext`` distribution (the usual way + to get one with good linear solvers, and what mpi-sppy's CI installs) link the + Harwell Subroutine Library and **default to the** ``ma27`` **linear solver** + rather than to MUMPS. That is worth knowing because results can differ + slightly between them, and because HSL asks that its use be acknowledged: + + HSL, a collection of Fortran codes for large-scale scientific computation. + See https://www.hsl.rl.ac.uk/ + + Pass ``--ipopt-outer-bound-solver-options "linear_solver=mumps"`` to choose + otherwise. + Subgradient ^^^^^^^^^^^ diff --git a/mpisppy/tests/test_dual_certificate.py b/mpisppy/tests/test_dual_certificate.py index ff41c251b..1e362b3cf 100644 --- a/mpisppy/tests/test_dual_certificate.py +++ b/mpisppy/tests/test_dual_certificate.py @@ -25,6 +25,7 @@ import pyomo.environ as pyo +from mpisppy.tests.utils import announce_hsl_if_used from mpisppy.utils.dual_certificate import ( CertificateError, certified_lower_bound, @@ -37,6 +38,9 @@ ipopt_available = pyo.SolverFactory("ipopt").available(exception_flag=False) +if ipopt_available: + announce_hsl_if_used() + def _model(kind="le", bounds=(-10, 10), y_bounds=None): """The running example, with the single constraint written four ways. diff --git a/mpisppy/tests/test_ipopt_outer_bound.py b/mpisppy/tests/test_ipopt_outer_bound.py index 3611fd136..fff9a0ab7 100644 --- a/mpisppy/tests/test_ipopt_outer_bound.py +++ b/mpisppy/tests/test_ipopt_outer_bound.py @@ -25,15 +25,37 @@ from mpisppy.utils import config from mpisppy.spin_the_wheel import WheelSpinner from mpisppy.utils.dual_certificate import CertificateError -from mpisppy.tests.utils import get_solver +from mpisppy.tests.utils import announce_hsl_if_used, get_solver from mpi4py import MPI comm = MPI.COMM_WORLD ipopt_available = pyo.SolverFactory("ipopt").available(exception_flag=False) + +if ipopt_available: + announce_hsl_if_used() mip_available, mip_solver_name, *_ = get_solver() + +def _dual_bound_solver(): + """A solver that actually reports a dual bound, for the Lagrangian spoke. + + Ipopt reports none -- that is the entire reason this spoke exists -- so the + comparison in TestAgreesWithLagrangian needs a second solver. cbc is the + fallback because it ships inside the same idaes-ext bundle that supplies + Ipopt, so this test runs rather than skips in CI, where no commercial + solver is installed. + """ + if mip_available: + return mip_solver_name + if pyo.SolverFactory("cbc").available(exception_flag=False): + return "cbc" + return None + + +dual_bound_solver_name = _dual_bound_solver() + # The three-scenario farmer optimum, from an EF solve. farmer is linear, hence # convex, so it is inside this spoke's assumptions and its bound must not exceed # this value. @@ -223,5 +245,61 @@ def test_hub_and_spoke_can_use_different_solvers(self): self._assert_valid_and_useful(self._spin(mip_solver_name)) +@unittest.skipUnless(ipopt_available, "ipopt is not available") +@unittest.skipUnless(comm.size == 2, "needs exactly two ranks") +@unittest.skipUnless(dual_bound_solver_name, "no dual-bound-reporting solver") +class TestAgreesWithLagrangian(unittest.TestCase): + """The strongest correctness check available: on a linear problem, compare + this spoke's bound against the ordinary Lagrangian spoke's. + + farmer is an LP, so an LP solver's dual bound *is* the Lagrangian dual value + -- exact, and arrived at by a completely different route than the tangent + plane over the variable box that this spoke computes from Ipopt's duals. + Two independent computations of the same quantity is a much sharper test + than "the bound does not exceed the optimum", which a badly broken + certificate could still pass by being very negative. + + Both legs use the same hub, same rho and same iteration count, so the hub + walks the same W trajectory and the two spokes are asked for a bound on the + same relaxations. Spoke bounds do not feed back into W. + """ + + TOL = 1e-2 # measured agreement is ~1.2e-4 + + def _bound_from(self, spoke_factory, **cfg_overrides): + cfg = _cfg(hub_solver="ipopt") + for k, v in cfg_overrides.items(): + setattr(cfg, k, v) + beans, kwargs = _beans(cfg) + hub_dict = vanilla.ph_hub(*beans, scenario_creator_kwargs=kwargs) + spoke = spoke_factory(*beans, scenario_creator_kwargs=kwargs) + wheel = WheelSpinner(hub_dict, [spoke]) + wheel.spin() + return wheel + + def test_certificate_reproduces_the_lagrangian_bound(self): + lag = self._bound_from(vanilla.lagrangian_spoke, + lagrangian_solver_name=dual_bound_solver_name) + cert = self._bound_from(vanilla.ipopt_outer_bound_spoke) + + if lag.global_rank != 1: + return + lag_bound, cert_bound = lag.spcomm.bound, cert.spcomm.bound + self.assertIsNotNone(lag_bound) + self.assertIsNotNone(cert_bound) + + # Two independent computations of the same number. + self.assertAlmostEqual(cert_bound, lag_bound, delta=self.TOL) + + # And in the safe direction: the certificate carries the box-correction + # term and the cushion, so it may be slightly looser than the exact LP + # dual bound but must never be more optimistic than it. + self.assertLessEqual(cert_bound, lag_bound + self.TOL) + + # Both remain valid outer bounds. + self.assertLessEqual(cert_bound, FARMER_EF_OPT + 1e-6) + self.assertLessEqual(lag_bound, FARMER_EF_OPT + 1e-6) + + if __name__ == "__main__": unittest.main() diff --git a/mpisppy/tests/utils.py b/mpisppy/tests/utils.py index 5e7b1c344..ecaabaff5 100644 --- a/mpisppy/tests/utils.py +++ b/mpisppy/tests/utils.py @@ -8,6 +8,9 @@ ############################################################################### +import os +import tempfile + import pyomo.environ as pyo from math import log10, floor @@ -50,3 +53,84 @@ def get_solver(persistent_OK=True): def round_pos_sig(x, sig=1): return round(x, sig-int(floor(log10(abs(x))))-1) + + +# --- HSL acknowledgement ----------------------------------------------------- +# +# Ipopt builds that link the Harwell Subroutine Library print, in their own +# banner, that "any publicity material resulting from use of the HSL codes +# within IPOPT must contain the acknowledgement: HSL, a collection of Fortran +# codes for large-scale scientific computation." Our test solves run with +# tee=False, so that banner never reaches the screen. These helpers put the +# acknowledgement back, and say which linear solver is actually in use -- +# worth knowing anyway, since the idaes-ext build defaults to ma27 rather than +# to MUMPS, and results can differ between the two. + +_HSL_ACK = ( + "HSL, a collection of Fortran codes for large-scale scientific " + "computation. See https://www.hsl.rl.ac.uk/" +) + +_hsl_probe_result = None # cache: (linear_solver_name, uses_hsl) +_hsl_announced = False + + +def ipopt_linear_solver(): + """Return (linear_solver_name, uses_hsl) for the ipopt on PATH. + + Ipopt names its linear solver in the banner it writes at the start of every + solve, so one trivial solve into a logfile is enough. Returns (None, False) + when ipopt is unavailable or the banner cannot be read. + """ + global _hsl_probe_result + if _hsl_probe_result is not None: + return _hsl_probe_result + + result = (None, False) + try: + if pyo.SolverFactory("ipopt").available(exception_flag=False): + m = pyo.ConcreteModel() + m.x = pyo.Var(bounds=(-10, 10), initialize=0.0) + m.o = pyo.Objective(expr=(m.x - 3) ** 2) + m.c = pyo.Constraint(expr=m.x <= 1) + fd, path = tempfile.mkstemp(suffix=".log") + os.close(fd) + try: + pyo.SolverFactory("ipopt").solve(m, logfile=path) + with open(path) as f: + text = f.read() + finally: + if os.path.exists(path): + os.remove(path) + name = None + for line in text.splitlines(): + if "running with linear solver" in line: + name = line.split("running with linear solver")[1] + name = name.strip().rstrip(".").split()[0] + break + result = (name, "compiled using HSL" in text) + except Exception: + # Never let a courtesy message break a test run. + result = (None, False) + + _hsl_probe_result = result + return result + + +def announce_hsl_if_used(): + """Print the HSL acknowledgement, once per process, if ipopt links HSL.""" + global _hsl_announced + if _hsl_announced: + return + _hsl_announced = True + name, uses_hsl = ipopt_linear_solver() + if not uses_hsl: + return + bar = "=" * 78 + print( + f"\n{bar}\n" + f"These tests solve with Ipopt built against HSL" + + (f" (linear solver: {name})" if name else "") + + f".\n{_HSL_ACK}\n{bar}", + flush=True, + ) From 38a1934e02376c954ad94d6bda18d2b92661a33f Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Mon, 17 Aug 2026 18:31:09 -0700 Subject: [PATCH 06/16] Probe for a dual-bound-reporting solver rather than assuming cbc is one The Lagrangian-agreement test failed in CI: AssertionError: np.float64(-109499.51616667982) != np.float64(nan) The nan is the Lagrangian spoke's bound. On the runner cbc solves to optimality and still leaves Problem[0].Lower_bound empty -- [LagrangianOuterBound] No outer bound for scenario AboveAverageScenario0 status= ok TerminationCondition= optimal -- so the spoke never sends a bound and spcomm.bound stays at its initial nan. The comparison then had nothing to compare against. The test picked cbc on the reasoning that it ships in the same idaes-ext bundle as Ipopt, so CI would have it. Available is not the same as useful, and neither is solving to optimality: what this test needs is a solver that fills in a dual bound, and that is worth checking rather than assuming. _reports_dual_bound now solves a trivial LP with the candidate and looks. It is checked locally too -- cbc does report a bound here, which is exactly why the original reasoning survived local testing and only broke on the runner. Also widened the candidates. glpk is added ahead of cbc and installed in the job (a small apt package; it is not needed by Ipopt, it is there to give the certificate a second opinion). glpk cannot handle a PH proximal term, but the Lagrangian spoke runs with attach_prox=False, so that limitation does not apply. Measured: lagrangian(glpk) = -109499.51604354104 against gurobi's -109499.51604354102, so it is a faithful reference. The persistent interfaces need set_instance before a solve, which the probe does not do, so the plain solver name is now tried alongside the persistent one. Finally, a nan bound is diagnosed rather than asserted against: if the comparison solver turns out to report nothing, that is a broken premise for the test rather than a failure of the spoke under test, so it skips with a message saying so. This test can no longer fail for want of a reference solver -- worst case it skips and says why. Co-Authored-By: Claude Opus 5 --- .github/workflows/test_pr_and_main.yml | 6 +++ mpisppy/tests/test_ipopt_outer_bound.py | 56 +++++++++++++++++++++---- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_pr_and_main.yml b/.github/workflows/test_pr_and_main.yml index 0cfd34dbb..3a49d0969 100644 --- a/.github/workflows/test_pr_and_main.yml +++ b/.github/workflows/test_pr_and_main.yml @@ -1298,6 +1298,12 @@ jobs: run: | sudo apt-get update sudo apt-get install -y libopenblas-dev gfortran liblapack-dev + # glpk is not needed by Ipopt; it gives the certificate a second, + # independent opinion to be checked against. See + # TestAgreesWithLagrangian -- the Lagrangian spoke needs a solver that + # reports a dual bound, which Ipopt by definition does not, and which + # the bundle's cbc turns out not to do on this runner. + sudo apt-get install -y glpk-utils - name: Install Ipopt from idaes-ext # The pip/conda ipopt is built against MUMPS only. The idaes-ext diff --git a/mpisppy/tests/test_ipopt_outer_bound.py b/mpisppy/tests/test_ipopt_outer_bound.py index fff9a0ab7..e22afed4e 100644 --- a/mpisppy/tests/test_ipopt_outer_bound.py +++ b/mpisppy/tests/test_ipopt_outer_bound.py @@ -16,6 +16,7 @@ # dict the factory builds. The end-to-end test needs both Ipopt and two ranks # and skips cleanly without them. +import math import unittest import pyomo.environ as pyo @@ -38,19 +39,50 @@ mip_available, mip_solver_name, *_ = get_solver() +def _reports_dual_bound(name): + """True if `name` actually fills in a dual bound on a solved LP. + + Being available is not enough, and neither is solving to optimality. cbc on + the CI runner returns `status=ok, TerminationCondition=optimal` and leaves + Problem[0].Lower_bound empty, so the Lagrangian spoke gets nothing to send + and its reported bound stays nan. Asking the solver directly is the only + honest test; anything else guesses. + """ + try: + if not pyo.SolverFactory(name).available(exception_flag=False): + return False + m = pyo.ConcreteModel() + m.x = pyo.Var(bounds=(0, 10), initialize=0.0) + m.o = pyo.Objective(expr=2.0 * m.x, sense=pyo.minimize) + m.c = pyo.Constraint(expr=m.x >= 1) + results = pyo.SolverFactory(name).solve(m, load_solutions=False) + bound = results.Problem[0].Lower_bound + return bound is not None and float(bound) == float(bound) # not NaN + except Exception: + return False + + def _dual_bound_solver(): """A solver that actually reports a dual bound, for the Lagrangian spoke. Ipopt reports none -- that is the entire reason this spoke exists -- so the - comparison in TestAgreesWithLagrangian needs a second solver. cbc is the - fallback because it ships inside the same idaes-ext bundle that supplies - Ipopt, so this test runs rather than skips in CI, where no commercial - solver is installed. + comparison in TestAgreesWithLagrangian needs a second solver. cbc is tried + as a fallback because it ships in the same idaes-ext bundle that supplies + Ipopt, but it is only used if it demonstrably reports a bound here. """ + candidates = [] if mip_available: - return mip_solver_name - if pyo.SolverFactory("cbc").available(exception_flag=False): - return "cbc" + # The persistent interfaces need set_instance before a solve, which the + # probe below does not do, so try the plain name as well. + candidates += [mip_solver_name, mip_solver_name.replace("_persistent", "")] + # glpk and cbc are both plausible in CI: glpk is a small apt package and cbc + # ships in the idaes-ext bundle alongside Ipopt. Neither is assumed to work + # -- each is probed. (glpk cannot handle a PH proximal term, but the + # Lagrangian spoke runs with attach_prox=False, so it is fine here.) + candidates += ["glpk", "cbc"] + for name in candidates: + if name and _reports_dual_bound(name): + return name return None @@ -287,6 +319,16 @@ def test_certificate_reproduces_the_lagrangian_bound(self): lag_bound, cert_bound = lag.spcomm.bound, cert.spcomm.bound self.assertIsNotNone(lag_bound) self.assertIsNotNone(cert_bound) + # A spoke that never sent anything leaves its bound at nan. That means + # the comparison solver produced no dual bound after all, which is a + # broken premise for this test rather than a failure of the spoke under + # test -- say so instead of reporting a bogus mismatch. + if math.isnan(lag_bound): + self.skipTest( + f"{dual_bound_solver_name} reported no dual bound for the " + "Lagrangian spoke, so there is nothing to compare against") + self.assertFalse(math.isnan(cert_bound), + "ipopt_outer_bound sent no bound at all") # Two independent computations of the same number. self.assertAlmostEqual(cert_bound, lag_bound, delta=self.TOL) From a7318f3ea43eec382cd5e653e13fe91019c2dc0d Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Tue, 18 Aug 2026 09:19:36 -0700 Subject: [PATCH 07/16] Address code review: convexity guard, option leak, and seven smaller findings A high-effort review of this branch found a soundness hole and a run-killer. Both reproduce; the rest are correctness and convention fixes. **The canonical form negates the body of a `>=` row, and nothing said so.** Constraints are rewritten as g(v) <= 0, so `body >= lower` becomes g = lower - body: the theorem needs the BODY concave there, not convex. The guard rejected nonlinear equalities and let everything else through, and the unit test and spokes.rst both codified "only equalities have to be affine". Consequence, reproduced: min x s.t. x**2 >= 1, x in [0, 1.5] true optimum 1.0 check_model_is_certifiable: ACCEPTED certified_lower_bound: 1.25 an outer bound ABOVE the optimum Convexity of a one-sided nonlinear body is not decidable here and stays the user's assertion -- but the direction of that assertion is now stated, in the module docstring, in spokes.rst as a table, and in the design's section 3.1. What IS decidable is now enforced: a two-sided (ranged) row splits into both g = body - upper and g = lower - body, so its body must be affine, and a nonlinear one is rejected exactly as a nonlinear equality already was. The test that asserted "any nonlinear inequality is allowed" is replaced by four that pin down the real rule, including that the guard does not claim to catch the `>=` case. **--max-solver-threads defeated the no-global-options decision.** The factory cleared the global layers, and then apply_solver_specs re-applied the thread cap afterwards. translate_solver_options has no ipopt entry for `threads`, so it reached the solver verbatim and killed the spoke's first solve -- the exact leak section 7.1 exists to prevent, reintroduced by a later step. Stripped after the call, with a regression test; the existing test only covered --solver-options. (Note `--solver-name ipopt --max-solver-threads N` still fails for the HUB. That is pre-existing -- it reproduces on clean main with an unrelated spoke -- and is not touched here.) Also: - The proximal-term guard was dead code: prox_disabled reads prox_on, which starts at 0, so `not prox_disabled` was always False, and the second conjunct (`and not W_disabled`) inverted the intent. Now a live check. - CertificateError could escape the iteration loop and MPI_Abort the hub and every other spoke over a routine solver outcome (a constraint the solve left without a dual). An optional bound source must not do that: it now warns once on rank 0 and reports no bound, which is what the module's contract already promised. Same for nonants fixed after setup, which now stands the spoke down rather than killing the run. - converger_spoke_char was 'I', which is InnerBoundSpoke's character; the hub prints the outer and inner chars side by side, so an 'I' in the outer column read as an inner bound. Now 'N', for NLP. - The dual-suffix check tested only for existence, so a scenario_creator that attaches an EXPORT `dual` suffix (a normal way to supply warm starts) would silently import nothing. Now checks import_enabled(). - generic/admm.py's _count_cylinders spoke_flags list did not include the new spoke, so --admm --ipopt-outer-bound configured the wrapper for a smaller wheel than WheelSpinner builds. - test_flexible_rank_cli enabled every spoke but this one, so its rank_ratio wiring was untested in the file whose whole purpose is that wiring. - announce_hsl_if_used printed on every rank. The project convention is rank-0 only, and I had a note to that effect and wrote it anyway. Not addressed here: the duplication between this spoke's main() and LagrangianOuterBound.main() is real, but lifting the loop into _LagrangianMixin touches shared PH machinery and belongs in its own change. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_design.md | 24 +++++++ doc/src/spokes.rst | 30 +++++++-- mpisppy/cylinders/ipopt_outer_bound.py | 89 +++++++++++++++++++------ mpisppy/generic/admm.py | 2 +- mpisppy/tests/test_dual_certificate.py | 34 +++++++++- mpisppy/tests/test_flexible_rank_cli.py | 5 +- mpisppy/tests/test_ipopt_outer_bound.py | 23 +++++++ mpisppy/tests/utils.py | 13 +++- mpisppy/utils/cfg_vanilla.py | 17 +++++ mpisppy/utils/dual_certificate.py | 43 ++++++++++-- 10 files changed, 246 insertions(+), 34 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index 2797fb09d..f791d6169 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -75,6 +75,23 @@ spoke already builds and solves, prox term off — is component of `g_s` convex, `h_s` affine, all over `B`. §6 lists the parts of this that *are* mechanically checkable; the rest is a user assertion. +Note that the requirement is on the **canonical** `g`, which negates the body of a `>=` +row, so it is not the same as "the constraint body is convex": + +| as written | canonical `g` | requirement on the body | +|---|---|---| +| `body ≤ upper` | `body − upper` | convex | +| `body ≥ lower` | `lower − body` | **concave** | +| `lo ≤ body ≤ up` | both rows | affine | +| `body == rhs` | `body − rhs` | affine | + +`x² ≤ 4` is inside the theorem and `x² ≥ 1` is not, though both are written with a +convex body — and the feasible set of the second is not convex at all. This is worth +stating loudly because it is easy to read the wrong way: a code review of this branch +turned up that the guard, the unit test and `spokes.rst` had all settled on "only +equalities need to be affine", which let `min x s.t. x² ≥ 1, x ∈ [0, 1.5]` through and +certified 1.25 for a problem whose optimum is 1.0 — an outer bound above the optimum. + ### 3.2 The dual function and the trap For multipliers `λ ≥ 0` and free `μ`, define @@ -269,6 +286,13 @@ Checkable at setup, hard error (following the repo's fail-loudly convention): accident. - **Any equality constraint with `polynomial_degree() != 1`.** A nonlinear equality makes `μᵀh` non-convex for one sign of `μ`, breaking §3.3. +- **Any two-sided (ranged) constraint with `polynomial_degree() != 1`.** It splits into + `g = body − upper` *and* `g = lower − body`, so its body would have to be both convex + and concave — affine. Like the equality case this is decidable, so it is enforced + rather than assumed. One-sided nonlinear rows are *not* rejected: whether the body is + convex (for `≤`) or concave (for `≥`) is not decidable here, and is the user's + assertion. See the table in §3.1 — the direction of that assertion flips with the + orientation, which is the part most likely to be got wrong. - **Prox term attached.** With a prox term the subproblem is not the Lagrangian relaxation and the bound is not a Lagrangian bound. `lagrangian_prep` already passes `attach_prox=False`; assert it. diff --git a/doc/src/spokes.rst b/doc/src/spokes.rst index 4e6a87f47..b5a0d4f45 100644 --- a/doc/src/spokes.rst +++ b/doc/src/spokes.rst @@ -57,10 +57,32 @@ optimum. Cost is one solve per scenario per iteration, the same as the Lagrangian spoke. .. warning:: - **Convexity is assumed and mostly cannot be checked.** If the objective or an - inequality body is non-convex, the bound is simply wrong. What *is* checked, - as a hard error at setup: discrete variables, nonlinear equality constraints, - a maximization objective, and a solver that is not Ipopt. + **Convexity is assumed and mostly cannot be checked.** If the objective is + non-convex, or an inequality is non-convex *in canonical form*, the bound is + simply wrong rather than merely loose. + + Canonical form matters, and it is easy to get backwards. Every inequality is + rewritten as ``g(v) <= 0``, which negates the body of a ``>=`` row: + + ========================== ==================== ========================== + as written canonical ``g`` requirement on the body + ========================== ==================== ========================== + ``body <= upper`` ``body - upper`` convex + ``body >= lower`` ``lower - body`` **concave** + ``lo <= body <= up`` both of the above affine + ``body == rhs`` ``body - rhs`` affine + ========================== ==================== ========================== + + So ``x**2 <= 4`` is inside the theorem and ``x**2 >= 1`` is not, even though + both are written with a convex body -- and the feasible set of the latter is + not convex at all. Getting this wrong yields an outer bound that can exceed + the true optimum. + + What *is* checked, as a hard error at setup: discrete variables, nonlinear + equality constraints, nonlinear two-sided (ranged) constraints, a + maximization objective, and a solver that is not Ipopt. The affine cases are + decidable, so they are enforced; convexity of a one-sided nonlinear body is + not, so it remains your assertion. Two things determine whether the bound is any good: diff --git a/mpisppy/cylinders/ipopt_outer_bound.py b/mpisppy/cylinders/ipopt_outer_bound.py index 5529c6e39..b4678d557 100644 --- a/mpisppy/cylinders/ipopt_outer_bound.py +++ b/mpisppy/cylinders/ipopt_outer_bound.py @@ -38,7 +38,10 @@ class IpoptOuterBound(_LagrangianMixin, OuterBoundWSpoke): - converger_spoke_char = 'I' + # 'N' for NLP. Not 'I': that is InnerBoundSpoke's character, and the hub + # prints the outer and inner chars side by side, so an 'I' in the outer + # column would read as an inner bound. + converger_spoke_char = 'N' # The certificate reads the point *and* the duals off the solved model, so # unlike the Lagrangian spoke this one cannot skip loading the solution. @@ -50,19 +53,36 @@ def ipopt_outer_bound_prep(self): self.lagrangian_prep() # PH_Prep(attach_prox=False) is what makes this the Lagrangian - # relaxation rather than a proximal subproblem. Assert rather than - # trust: with a prox term the number below is not a Lagrangian bound. - if not getattr(self.opt, "prox_disabled", True) and not self.opt.W_disabled: + # relaxation rather than a proximal subproblem, so check that the prox + # term is not switched on. prox_on is created by attach_Ws_and_prox and + # starts at 0, so this normally passes; it is here to catch a future + # path that enables it, in which case the number below would not be a + # Lagrangian bound at all. + first = next(iter(self.opt.local_scenarios.values()), None) + if (first is not None + and hasattr(first._mpisppy_model, "prox_on") + and not self.opt.prox_disabled): raise CertificateError( - "ipopt_outer_bound requires the proximal term to be absent; " + "ipopt_outer_bound requires the proximal term to be off; " "the bound it computes is a Lagrangian bound and a proximal " "subproblem is not the Lagrangian relaxation" ) for s in self.opt.local_scenarios.values(): - if not hasattr(s, "dual"): + # Existence is not enough: a scenario_creator may already attach an + # EXPORT or LOCAL `dual` suffix (a common way to supply dual warm + # starts), and reusing that would import nothing. + existing = getattr(s, "dual", None) + if existing is None: s.dual = pyo.Suffix(direction=pyo.Suffix.IMPORT) + elif not existing.import_enabled(): + raise CertificateError( + f"scenario {s.name} already has a `dual` Suffix that does " + "not import; the certificate needs the solver's duals. Use " + "Suffix.IMPORT or Suffix.IMPORT_EXPORT." + ) + self._warned = set() self._check_setup_guards() # Snapshot which nonants are fixed now, so a fixing extension that @@ -116,22 +136,39 @@ def _check_setup_guards(self): "makes this spoke useful." ) - def _assert_nonants_not_newly_fixed(self): + def _warn_once(self, key, message): + """Rank-0, once-per-run warning. This spoke is an optional source of a + bound, so it complains and stands down rather than taking the run with + it -- an exception here would propagate out of the iteration loop and + MPI_Abort the hub and every other spoke.""" + if key in self._warned: + return + self._warned.add(key) + if self.cylinder_rank == 0: + warnings.warn(message) + + def _nonants_newly_fixed(self): + """True if anything fixed a nonant since setup, in which case no bound + can be reported: fixing restricts the subproblem, so its minimum bounds + the restricted problem and not the original.""" newly = [ f"{sname}:{ndn_i}" for sname, s in self.opt.local_scenarios.items() for ndn_i, xvar in s._mpisppy_data.nonant_indices.items() if xvar.fixed and not self._fixed_at_setup[(sname, ndn_i)] ] - if newly: - raise CertificateError( - "ipopt_outer_bound: nonanticipative variables were fixed after " - f"setup ({', '.join(newly[:5])}" - f"{' ...' if len(newly) > 5 else ''}). Fixing restricts the " - "subproblem, so its minimum is a bound on the restricted " - "problem and not on the original. Remove the fixing extension " - "from this spoke." - ) + if not newly: + return False + self._warn_once( + "fixed_nonants", + "ipopt_outer_bound: nonanticipative variables were fixed after " + f"setup ({', '.join(newly[:5])}" + f"{' ...' if len(newly) > 5 else ''}). Fixing restricts the " + "subproblem, so its minimum is a bound on the restricted problem " + "and not on the original. This spoke will report no bound until " + "they are unfixed; remove the fixing extension from this spoke." + ) + return True def _solve_and_certify(self, warmstart=sputils.WarmstartStatus.PRIOR_SOLUTION): """Solve every subproblem, then replace the solver's (useless) bound @@ -150,7 +187,10 @@ def _solve_and_certify(self, warmstart=sputils.WarmstartStatus.PRIOR_SOLUTION): warmstart=warmstart, ) - self._assert_nonants_not_newly_fixed() + if self._nonants_newly_fixed(): + for s in self.opt.local_scenarios.values(): + s._mpisppy_data.outer_bound = None + return self.opt.Ebound(verbose) for s in self.opt.local_scenarios.values(): # solve_loop has just written results.Problem[0].Lower_bound here, @@ -160,8 +200,19 @@ def _solve_and_certify(self, warmstart=sputils.WarmstartStatus.PRIOR_SOLUTION): if not s._mpisppy_data.solution_available: s._mpisppy_data.outer_bound = None continue - s._mpisppy_data.outer_bound = certified_lower_bound( - s, sign_convention="ipopt", eps_rel=self._cushion) + try: + s._mpisppy_data.outer_bound = certified_lower_bound( + s, sign_convention="ipopt", eps_rel=self._cushion) + except CertificateError as e: + # Routine solver outcomes can leave a constraint without a dual. + # Report no bound, as the module's contract says, rather than + # taking down the hub and every other spoke from inside the + # iteration loop. + self._warn_once( + "certificate_failed", + f"ipopt_outer_bound: no certificate for {s.name} ({e}); " + "reporting no bound this iteration.") + s._mpisppy_data.outer_bound = None return self.opt.Ebound(verbose) diff --git a/mpisppy/generic/admm.py b/mpisppy/generic/admm.py index b62d065d8..226f9b4a0 100644 --- a/mpisppy/generic/admm.py +++ b/mpisppy/generic/admm.py @@ -56,7 +56,7 @@ def _count_cylinders(cfg): """ count = 1 # the hub spoke_flags = [ - "fwph", "lagrangian", "ph_dual", "relaxed_ph", + "fwph", "lagrangian", "ipopt_outer_bound", "ph_dual", "relaxed_ph", "subgradient", "xhatshuffle", "xhatxbar", "reduced_costs", ] for flag in spoke_flags: diff --git a/mpisppy/tests/test_dual_certificate.py b/mpisppy/tests/test_dual_certificate.py index 1e362b3cf..b01ef1f87 100644 --- a/mpisppy/tests/test_dual_certificate.py +++ b/mpisppy/tests/test_dual_certificate.py @@ -230,13 +230,41 @@ def test_nonlinear_equality(self): with self.assertRaisesRegex(CertificateError, "nonlinear equality"): check_model_is_certifiable(m) - def test_nonlinear_inequality_is_allowed(self): - # Convex inequalities are the point of the exercise; only equalities - # have to be affine. + def test_nonlinear_le_inequality_is_allowed(self): + # Convex inequalities are the point of the exercise. For a `<=` row the + # canonical g is body - upper, so a convex body is what the theorem + # wants -- and convexity is the caller's assertion, not checkable here. m = _model("le") m.ok = pyo.Constraint(expr=m.x**2 + m.y**2 <= 100) check_model_is_certifiable(m) # must not raise + def test_nonlinear_ge_inequality_is_allowed_but_needs_a_concave_body(self): + # The sign trap. For a `>=` row the canonical g is lower - body, so the + # BODY must be concave, not convex. That is still the caller's + # assertion, so the guard lets it through -- but a convex body here + # (x**2 >= 1, which looks perfectly ordinary) makes phi non-convex and + # the certificate can then exceed the true optimum. The rule is stated + # in the module docstring and in spokes.rst; this test exists to pin + # down that the guard does NOT claim to catch it. + m = _model("le") + m.ok = pyo.Constraint(expr=m.x**2 >= 1) + check_model_is_certifiable(m) # must not raise + + def test_nonlinear_ranged_constraint_is_rejected(self): + # A two-sided row splits into both g = body - upper and + # g = lower - body, so the body would have to be convex AND concave -- + # affine. Unlike one-sided convexity, that IS decidable, so it is a + # hard error rather than an assertion. + m = _model("le") + m.bad = pyo.Constraint(expr=pyo.inequality(1, m.x**2, 100)) + with self.assertRaisesRegex(CertificateError, "two-sided"): + check_model_is_certifiable(m) + + def test_affine_ranged_constraint_is_allowed(self): + m = _model("le") + m.ok = pyo.Constraint(expr=pyo.inequality(1, 2 * m.x + m.y, 100)) + check_model_is_certifiable(m) # must not raise + def test_maximize(self): m = _model("le") m.obj.sense = pyo.maximize diff --git a/mpisppy/tests/test_flexible_rank_cli.py b/mpisppy/tests/test_flexible_rank_cli.py index 391d0da2b..8d352ab95 100644 --- a/mpisppy/tests/test_flexible_rank_cli.py +++ b/mpisppy/tests/test_flexible_rank_cli.py @@ -58,6 +58,7 @@ def test_rank_ratio_args_default_to_one(self): self.assertEqual(cfg.ph_dual_rank_ratio, 1.0) self.assertEqual(cfg.relaxed_ph_rank_ratio, 1.0) self.assertEqual(cfg.subgradient_rank_ratio, 1.0) + self.assertEqual(cfg.ipopt_outer_bound_rank_ratio, 1.0) def test_build_spoke_list_injects_rank_ratio(self): cfg = _full_cfg() @@ -78,6 +79,8 @@ def test_build_spoke_list_injects_rank_ratio(self): cfg.relaxed_ph_rank_ratio = 5.0 cfg.subgradient = True cfg.subgradient_rank_ratio = 0.125 + cfg.ipopt_outer_bound = True + cfg.ipopt_outer_bound_rank_ratio = 6.0 scenario_creator = farmer.scenario_creator scenario_denouement = farmer.scenario_denouement @@ -93,7 +96,7 @@ def test_build_spoke_list_injects_rank_ratio(self): # exactly the enabled spokes, each carrying its requested ratio ratios = sorted(d["rank_ratio"] for d in spokes) self.assertEqual(ratios, sorted([0.5, 0.25, 2.0, 4.0, - 8.0, 3.0, 5.0, 0.125])) + 8.0, 3.0, 5.0, 0.125, 6.0])) # and every spoke dict got an explicit rank_ratio self.assertTrue(all("rank_ratio" in d for d in spokes)) diff --git a/mpisppy/tests/test_ipopt_outer_bound.py b/mpisppy/tests/test_ipopt_outer_bound.py index e22afed4e..88014292a 100644 --- a/mpisppy/tests/test_ipopt_outer_bound.py +++ b/mpisppy/tests/test_ipopt_outer_bound.py @@ -184,6 +184,29 @@ def test_other_spokes_still_inherit_global_options(self): self.assertIn("mipgap", lag["opt_kwargs"]["options"]["iter0_solver_options"]) + def test_max_solver_threads_does_not_leak(self): + # --max-solver-threads is re-applied by apply_solver_specs *after* the + # factory clears the global layers, so clearing alone is not enough. + # Ipopt has no `threads` option and translate_solver_options has no + # mapping for it, so it would reach the solver verbatim and hard-fail + # the spoke's first solve -- taking the whole run with it. + cfg = _cfg() + cfg.max_solver_threads = 2 + options = _spoke_options(cfg) + self.assertNotIn("threads", options["iter0_solver_options"]) + self.assertNotIn("threads", options["iterk_solver_options"]) + for layer in options["solver_options_layers"]: + self.assertNotIn("threads", layer["options"]) + + def test_max_solver_threads_stripped_but_spoke_options_kept(self): + # Stripping the cap must not take the spoke's own options with it. + cfg = _cfg() + cfg.max_solver_threads = 2 + cfg.ipopt_outer_bound_solver_options = "max_iter=42" + options = _spoke_options(cfg) + self.assertNotIn("threads", options["iterk_solver_options"]) + self.assertEqual(options["iterk_solver_options"].get("max_iter"), 42) + def test_per_spoke_solver_options_do_apply(self): # Not inheriting the global layer must not mean ignoring the spoke's # own options, which is how Ipopt settings are meant to arrive. diff --git a/mpisppy/tests/utils.py b/mpisppy/tests/utils.py index ecaabaff5..4776aa5dd 100644 --- a/mpisppy/tests/utils.py +++ b/mpisppy/tests/utils.py @@ -118,11 +118,22 @@ def ipopt_linear_solver(): def announce_hsl_if_used(): - """Print the HSL acknowledgement, once per process, if ipopt links HSL.""" + """Print the HSL acknowledgement, once per run, if ipopt links HSL. + + Gated on MPI rank: these tests also run under mpiexec, and the project + convention is that such output comes from rank 0 only -- otherwise the + banner is emitted once per rank and interleaves with itself. + """ global _hsl_announced if _hsl_announced: return _hsl_announced = True + try: + from mpi4py import MPI + if MPI.COMM_WORLD.Get_rank() != 0: + return + except ImportError: + pass name, uses_hsl = ipopt_linear_solver() if not uses_hsl: return diff --git a/mpisppy/utils/cfg_vanilla.py b/mpisppy/utils/cfg_vanilla.py index d8c56b1c8..6d7b35149 100644 --- a/mpisppy/utils/cfg_vanilla.py +++ b/mpisppy/utils/cfg_vanilla.py @@ -1212,6 +1212,23 @@ def ipopt_outer_bound_spoke( options["solver_options_layers"] = [] apply_solver_specs("ipopt_outer_bound", ipopt_ob_spoke, cfg) + + # apply_solver_specs ends by re-applying --max-solver-threads as a + # system-level cap, *after* the reset above, so clearing the layers first is + # not enough. Ipopt has no `threads` option and translate_solver_options has + # no mapping for it, so it would reach the solver verbatim and hard-fail the + # spoke's first solve -- exactly the leak this factory is trying to prevent, + # reintroduced by a later step. Strip it here, where it is unambiguously + # wrong: the cap is meaningful for the MIP solvers it was written for. + for _key in ("iter0_solver_options", "iterk_solver_options"): + options[_key].pop("threads", None) + _stripped = [] + for _layer in options["solver_options_layers"]: + _layer["options"].pop("threads", None) + if _layer["options"]: + _stripped.append(_layer) + options["solver_options_layers"] = _stripped + # apply_solver_specs only sets solver_name when the per-spoke flag was # given; without this the spoke would silently inherit the global solver, # which the setup guard then rejects. The spoke is Ipopt-scoped, so ipopt diff --git a/mpisppy/utils/dual_certificate.py b/mpisppy/utils/dual_certificate.py index 939e8dce5..fa767b706 100644 --- a/mpisppy/utils/dual_certificate.py +++ b/mpisppy/utils/dual_certificate.py @@ -41,8 +41,23 @@ # # CONVEXITY IS LOAD-BEARING. If f or any component of g is non-convex over B, # the tangent is not an underestimator and the returned number is simply wrong. -# check_model_is_certifiable() rejects the parts of that which are mechanically -# checkable; the rest is the caller's assertion. +# +# Note carefully that the requirement is on the CANONICAL g, not on the +# constraint body as written, and the two differ by a sign on a `>=` row: +# +# body <= upper -> g = body - upper needs the body CONVEX +# body >= lower -> g = lower - body needs the body CONCAVE +# lo <= body <= up-> both of the above needs the body AFFINE +# body == rhs -> h = body - rhs needs the body AFFINE +# +# So `x**2 <= 4` is fine and `x**2 >= 1` is not, even though both are written +# with a convex body. This is easy to get backwards: `x**2 >= 1` looks like an +# ordinary convex constraint and its feasible set is not convex at all. +# +# check_model_is_certifiable() rejects what is mechanically checkable -- the +# affine cases, since polynomial degree is decidable -- but convexity of a +# general nonlinear body is not, so on one-sided nonlinear rows it is the +# caller's assertion. # # By contrast a wrong multiplier -- bad sign convention, stale dual, clipped # value -- can only make the bound loose, never wrong, because weak duality @@ -103,7 +118,10 @@ def check_model_is_certifiable(model): """Raise CertificateError if `model` is outside the theorem. Checks only what is mechanically checkable. Convexity of the objective and - of the inequality bodies is the caller's assertion and is *not* checked. + of one-sided nonlinear inequality bodies is the caller's assertion and is + *not* checked -- including the direction of it: a `<=` row needs a convex + body and a `>=` row needs a CONCAVE one, because the canonical g negates + the body on a `>=`. See the module docstring. """ obj = _active_objective(model) if obj.sense != pyo.minimize: @@ -124,15 +142,21 @@ def check_model_is_certifiable(model): + (" ..." if len(discrete) > 10 else "") ) + # Both cases below need the body affine, and polynomial degree decides that, + # so these are real checks rather than assertions. A one-sided nonlinear row + # is left to the caller: whether its body is convex (for <=) or concave (for + # >=) is not decidable here. nonlinear_eq = [] + nonlinear_ranged = [] for con in model.component_data_objects( pyo.Constraint, active=True, descend_into=True ): - if not con.equality: + two_sided = (not con.equality) and con.has_lb() and con.has_ub() + if not (con.equality or two_sided): continue degree = con.body.polynomial_degree() if degree is None or degree > 1: - nonlinear_eq.append(con.name) + (nonlinear_eq if con.equality else nonlinear_ranged).append(con.name) if nonlinear_eq: raise CertificateError( "a nonlinear equality makes mu^T h non-convex for one sign of mu, " @@ -140,6 +164,15 @@ def check_model_is_certifiable(model): f"{', '.join(sorted(nonlinear_eq)[:10])}" + (" ..." if len(nonlinear_eq) > 10 else "") ) + if nonlinear_ranged: + raise CertificateError( + "a two-sided constraint splits into g = body - upper AND " + "g = lower - body, so its body would have to be both convex and " + "concave -- i.e. affine -- for the underestimator to hold on both " + "rows; offending constraints: " + f"{', '.join(sorted(nonlinear_ranged)[:10])}" + + (" ..." if len(nonlinear_ranged) > 10 else "") + ) def unbounded_variables(model, do_fbbt=True): From 61df63dcf4fd503854560dbeacc8269c11819af9 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Tue, 18 Aug 2026 10:03:10 -0700 Subject: [PATCH 08/16] docs: name the subject instead of leaning on pronouns in the spoke overview Two wording fixes to the ipopt_outer_bound section of spokes.rst. The opening paragraph carried its subject entirely in pronouns -- "It does not simply report...", "What it computes instead...", "rather than a wrong one" -- which forces the reader to hold the referent across four sentences of fairly dense argument. Each now names what it is talking about. And "so it remains your assertion" becomes "so convexity remains a user assertion": the sentence is about what the guard does and does not check, so saying which property is left to the user is the useful half. Co-Authored-By: Claude Opus 5 --- doc/src/spokes.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/src/spokes.rst b/doc/src/spokes.rst index b5a0d4f45..3a01cc9b0 100644 --- a/doc/src/spokes.rst +++ b/doc/src/spokes.rst @@ -45,14 +45,14 @@ branch-and-bound solver and reports none, so on a convex NLP that spoke produces nothing usable. This one computes the bound itself, from the subproblem's own duals. -It does not simply report the solved objective value. That is the value *at a -point*, hence an inner bound for a minimization -- the wrong direction. What it -computes instead is a Lagrangian weak-duality bound, corrected by a tangent-plane -underestimator minimized in closed form over the variable box. The result is -valid for *any* multipliers, so no assumption that Ipopt converged is needed: a -truncated or sloppy solve gives a loose bound rather than a wrong one. At an -exact KKT point the correction vanishes and the bound equals the subproblem -optimum. +This spoke does not simply report the solved objective value. That value is +measured *at a point*, hence an inner bound for a minimization -- the wrong +direction. The spoke instead computes a Lagrangian weak-duality bound, corrected +by a tangent-plane underestimator minimized in closed form over the variable box. +The result is valid for *any* multipliers, so no assumption that Ipopt converged +is needed: a truncated or sloppy solve gives a loose bound rather than a wrong +bound. At an exact KKT point the correction vanishes and the bound equals the +subproblem optimum. Cost is one solve per scenario per iteration, the same as the Lagrangian spoke. @@ -82,7 +82,7 @@ Cost is one solve per scenario per iteration, the same as the Lagrangian spoke. equality constraints, nonlinear two-sided (ranged) constraints, a maximization objective, and a solver that is not Ipopt. The affine cases are decidable, so they are enforced; convexity of a one-sided nonlinear body is - not, so it remains your assertion. + not, so convexity remains a user assertion. Two things determine whether the bound is any good: From f667af33ab63442ba88fd527db05685abcf71ee8 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Tue, 18 Aug 2026 10:04:37 -0700 Subject: [PATCH 09/16] docs: drop the "inside the theorem" metaphor "Inside the theorem" was doing real work -- the hypotheses hold, so the guarantee applies -- but it treats a theorem as a container, which invites the reader to picture something that is not there. Five sites, two phrasings: Prose says what actually happens. "x**2 <= 4 is inside the theorem and x**2 >= 1 is not" becomes "the theorem applies to x**2 <= 4 but not to x**2 >= 1", and the guard rationale in the design now says the model "genuinely violates an assumption". The two docstrings in dual_certificate.py name the cause instead of the theory, since they are read at the moment someone hits the error: CertificateError is raised when "the model violates an assumption the certified bound depends on". That also corrects a smaller slip -- the class previously said "the theorem this module certifies", when what the module certifies is a bound. Left alone: ordinary noun uses of "theorem" ("valid by a theorem", "the theorem in section 3.3", "what the theorem wants"), which read fine. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_design.md | 4 ++-- doc/src/spokes.rst | 2 +- mpisppy/utils/dual_certificate.py | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index f791d6169..baf1cf6fd 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -85,7 +85,7 @@ row, so it is not the same as "the constraint body is convex": | `lo ≤ body ≤ up` | both rows | affine | | `body == rhs` | `body − rhs` | affine | -`x² ≤ 4` is inside the theorem and `x² ≥ 1` is not, though both are written with a +The theorem applies to `x² ≤ 4` but not to `x² ≥ 1`, though both are written with a convex body — and the feasible set of the second is not convex at all. This is worth stating loudly because it is easy to read the wrong way: a code review of this branch turned up that the guard, the unit test and `spokes.rst` had all settled on "only @@ -334,7 +334,7 @@ returns `None` collectively and nothing is sent to the hub. Rationale for warning rather than erroring: this cylinder is an *optional* source of a bound. A model that is merely under-bounded is not a broken model, and killing a whole parallel run over a spoke that could have sat quiet is the wrong trade — unlike the -guards above, where the model is genuinely outside the theorem and any number the +guards above, where the model genuinely violates an assumption and any number the cylinder produced would be wrong. The warning is what keeps the quiet case from being silent. diff --git a/doc/src/spokes.rst b/doc/src/spokes.rst index 3a01cc9b0..2bac26128 100644 --- a/doc/src/spokes.rst +++ b/doc/src/spokes.rst @@ -73,7 +73,7 @@ Cost is one solve per scenario per iteration, the same as the Lagrangian spoke. ``body == rhs`` ``body - rhs`` affine ========================== ==================== ========================== - So ``x**2 <= 4`` is inside the theorem and ``x**2 >= 1`` is not, even though + So the theorem applies to ``x**2 <= 4`` but not to ``x**2 >= 1``, even though both are written with a convex body -- and the feasible set of the latter is not convex at all. Getting this wrong yields an outer bound that can exceed the true optimum. diff --git a/mpisppy/utils/dual_certificate.py b/mpisppy/utils/dual_certificate.py index fa767b706..e83062787 100644 --- a/mpisppy/utils/dual_certificate.py +++ b/mpisppy/utils/dual_certificate.py @@ -83,7 +83,7 @@ class CertificateError(RuntimeError): - """The model is outside the theorem this module certifies.""" + """The model violates an assumption the certified bound depends on.""" # How a solver's Pyomo `dual` suffix maps onto canonical multipliers for @@ -115,7 +115,8 @@ def _active_objective(model): def check_model_is_certifiable(model): - """Raise CertificateError if `model` is outside the theorem. + """Raise CertificateError if `model` violates an assumption the + certificate depends on. Checks only what is mechanically checkable. Convexity of the objective and of one-sided nonlinear inequality bodies is the caller's assertion and is From 698725ab7fb7958381861519a86a33b2c9ce52d4 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Tue, 18 Aug 2026 10:24:24 -0700 Subject: [PATCH 10/16] Add a LaTeX companion deriving the certified bound The markdown design covers decisions and implementation, and states the mathematics in the register of a design note: enough to follow the argument, not enough to check it. This adds the derivation properly, with the hypotheses named and the proofs written out. Contents: the subproblem and why the solver's returned objective value is an inner bound; weak duality for arbitrary multipliers (Lemma 1) and the infimum trap that stops it from being usable directly; the tangent-plane underestimator minimised in closed form over the box (Theorem 2), whose corollary is that the bound holds for any iterate and any multipliers, so no claim about the accuracy of the solve is needed anywhere; the vanishing of the correction term at a KKT point (Proposition 4), which is why the certificate costs nothing when the solve is good and loosens smoothly when it is not; the canonical-form table and the sign condition, with the worked counterexample where a convex body on a `>=` row certifies 1.25 for a problem whose optimum is 1; and the aggregation proposition, including why weights from mixed iterations break it. Closes with the tightness estimate (the shortfall is the gradient magnitude times the distance to the far end of the box, which is why bounds tightening is the main lever on quality) and a table mapping each object to the function that implements it. Five pages, compiles clean with pdflatex and nothing beyond amsmath/amsthm/ booktabs/hyperref. Following the convention already used for doc/slides, the .tex and the built .pdf are both committed and the rest of pdflatex's output is ignored -- the existing ignore block only covered doc/slides, so it now covers doc/designs as well. Co-Authored-By: Claude Opus 5 --- .gitignore | 14 +- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 0 -> 202583 bytes doc/designs/ipopt_outer_bound_certificate.tex | 341 ++++++++++++++++++ doc/designs/ipopt_outer_bound_design.md | 6 + 4 files changed, 359 insertions(+), 2 deletions(-) create mode 100644 doc/designs/ipopt_outer_bound_certificate.pdf create mode 100644 doc/designs/ipopt_outer_bound_certificate.tex diff --git a/.gitignore b/.gitignore index f5ea066e6..e609cddca 100644 --- a/.gitignore +++ b/.gitignore @@ -158,8 +158,18 @@ examples/**/*_full_solution/ examples/**/*_pickles/ examples/**/*_cyl_nonants.npy -# LaTeX build products under doc/slides (the .tex and the built .pdf are -# committed; everything else pdflatex/biber leaves behind is not) +# LaTeX build products under doc/slides and doc/designs (the .tex and the +# built .pdf are committed; everything else pdflatex/biber leaves behind is not) +doc/designs/**/*.aux +doc/designs/**/*.bbl +doc/designs/**/*.bcf +doc/designs/**/*.blg +doc/designs/**/*.fdb_latexmk +doc/designs/**/*.fls +doc/designs/**/*.out +doc/designs/**/*.run.xml +doc/designs/**/*.synctex.gz +doc/designs/**/*.toc doc/slides/**/*.aux doc/slides/**/*.bbl doc/slides/**/*.bcf diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1b55554d03564a54c87b6d9a3a3b5efab9be4e4 GIT binary patch literal 202583 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%0DCDk-%69^+Q_JXmsvma2v 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

JH_iw;x*$a07n-!stg0Nb1s&` z({-Yu-(W~U*2-Mu&0Nee8iwg!*Cgh3%7Vqgw7>(0Bd+8uOUy)bN!5}$BOL^F`RL4h zm;MWf*_#jFv$ADG;=31%g62Hh68^zc^ioE1xlEE0{_bMk4}N6bb=|aim-?E+yLO|s zw!M?1=ORP9UeL^AV%%(=_t6zu^g)c(hhORLT8mBKH23%6PRs-VLycKSrUyFO?cLdG z$_5My)>dbrk(KLb?bFD*9-V#hiDQFXn%%F`5s*8a5Uv^5Wi@Nc(;iRlbhYh6 z-!x;z*fj9>ALhoIIBJfGET_p&tPaPF$3o8M%F7h4`8dxc5Qm|7oUG|d)ci8_zriSo zHP-DDbP`7}8QqLI$*R`lzOB7d@D$Z9*g!rh7n5>Z-Oj?D@095cR=O@{h20-N6sX`e z51r2B^clNGduM?6Wu(`R8vZEzm=5||z3y_(Qhfdwj?B%RBo?#zli629>2==0z}IGa zPD~xz9iS(s$<@8iadl$}8I>sa-V*NTQd%)#y!M zdJq6=O<#_U)XxPK$U5)D?suhEo4l7-(UURzlW#_fQlEBh9NDAYYIe$dhW1S?<*r7z z$Eh=zYZavevLNKj&wSon646WKY?Vm07@;v;i^03tRqL*uy}dDTCrqr=6;)}eWscm< zQ|aL&enl>Ox4V@czQ!%>#=Uxoow=z%%JL879ig2so%T(mMDxN=zLBBua z1C%E0aoXBjxi;Odvq~c1;lPy~?mNZ)2+G@14>d@JD9Ucq!w`$PJxWWO@iiO`H@W|Q zuOBOx*KIsGieN3ILGh*kHSj#^bjWToP4#gSQ{pZFg-2I8=6@pv}troBb~eWyu3UL`OGXY7>(Q%|lKTBm!sMCu4w;7XPl5Vj0|Y2@3%74B zWkRp^t7)MkDbg*qy;#gDLMRNUfq7?$$`FlTEX3^k)Z1-6PNV#Jv^$|VFmz5n=kWxi z#jLc}%MQMJW$;~4GCf6#OtccLjW0tyBdXS7+-HWf`L4vOw-cqPo0srptjGG4?|1p1 z7VTrWRvFc_UKu-f%o@*6N-Z9Njwsy0WjoS*Y2tjBJDd!qI>n*&wT7QQ9&cK(f95-j z)R_1K_hD!J3-=*pXZd?AGU2~LYOIx|ZMPZF+749R5R;Zc`(4CA&;@I*iR>4xl}qP! zh#1$zV{?%5PdjyEbOVyD5pyoDAKVA<$JQE?$Ay(oC!~7BCUnM|+nowh^EVocHqYoR zM@OewUJ(tc6{BhoDDGzJ_XciGc(qNB3(p8XyRRjNN*as)Tp+bxKORu5LTvSA?j+x{ zzZbh0K2sogYDu+=-8g#FlhB=D)--Aq*~fTgS!=dQry$4YIB1AvS6;@~-@%oFq_W}+ zUs;fzhxb@SI07M3S5AIqaM;+J&Vt0S<(+8fs7Uwz^f}q;$%10i`+kds7i{*Rf=PR= zt@c^d+{MC?BNG9F2@6q$MkTfV)a>XYO{5w|O7WFFc`AI(C!hS=$iV}QavjV!raH9&O1lVa;Dp@5o>h#Vp6#zN7?7iC zY8jNORRA^e6e$IkZ4e$bkK%r3%paCYv14K)d*{~dW(Qj!qW~PqVM9F$XUa_?eRyt? z3{bH;P{?TLR^HwT8(OC?MB1`U$b%1h8BdoWJ7Y15k=MQtBt=c-{uCLI$lIU6xEB+o z{K)KcWdVpPVg|HpHWI_HaW_jaSx(QqlH{!dn4@Dg~8qfywIa% zvlIr0!$|yxLswK`TC9I1$5$|d%0TtHiu0fYh;HG!p${WjZiI!v?8uSriS52;ya);@ z#nRtIa$M#T4HqN$2)@91qs$zhDcH}1T`Tn*h)QICLVsE{#4*) zgJvuu5QEdk<+FdCf3?D0vdt!&wy`e}G3h>Y<(TF4>pI_*SC;e2eWrRcLB=cVX7xaV z-Ycu_W5x1;MA65lYxkMv$pkvDEQPb{M40R%r6=x!+T+Y--Hzvi9qS%R5AVAX$%Q4% zX`aTj++I{w_WdW~>}6Dy<`~bB!FPnntcXo|{;^WEKcR-{{}R*;{RcJwLCya-YCLR8 z4gQ3h56_v<*1!UWoBJQWG$9KI%isOyf5+A&NZaNyAcdU2z?>5)c;uwScqv1L^$CpV zuat(Vw3FYFioif%$FjZq@ZgKjD0Nr zvM`3=I|({#V=yR9T(fhKRbRUI?|;@@5vZR%Se8`8@LDulNlm|g*af#0^{2WGmiE=C zE%E*sAD{nIq^J4-T86b4*ZXlb2nKh?Wd+A7j$RyB=&s~XnB{%SZroe&w#4hm0+BfP zoO$2o+-)cPd;|Rg19JlI3DXLLv3}R`7fu}dDD8zkmrQj8JWR*kuiKitDcdx=K`A7Y zU$sv&ZosbswmGii0m3@Swy}=eSnkp%XUj-pLjh`pwqdBd0cV2Q!Ll&kgKY1t=GH4Hm=td4 zpSlmrU%L+*2iw2jeUyGv6{PlmP!$4Fe;A@A=s19tW|Bp{s<;$8ii8|g=-cz{C)6?( z9wh0kjj^^%SjYQgXRc}G#zxfJp`~;l*W`}6gp>O-w6(Q8ZFh4kE^bZDB@1pIzUqYz znnoAB`z7*?y4#D*q4WlB9cr!`A9Czx`9}W$-jlbrx6DLoMOfY?-J>13MpT3=Paa&n z!$HS={yTJ|#GAppgBHu|6t~?BF1_lC^xz|X|v|hA~RMZ^IR@A*#yjD%eU!!Yc^i$VZ-=0c2WY_RT zuFly%;vyF8B!R+hvjU3(_;b>}^27r1hhI>ULskLhKo0?c=8&2p(foS)72F7&{e)Yz zkSv&h#FImSN^_@F{JWb$7=%2ev>)Jl45|#B;v_)ups`9!N%hQ}rXv_K2DC(jwjx0o z5PPxnKcR*=9^uA@Zoyd?al<7`03ESqwBBBNm|kDDjQX~|9l@!>=Gza&#^=!_<7boH zC1F5ZjtyG&t%JbB(}fw7I%dW=9AX6Lr-5&Q?_=~GgczJ#N2@(`1W9hN57vusu#4dx zK4Szuci0$U7V(lJSd1*j*6%uJ_*b@JqdX;DGOntm-Y0FZ?tpLC4~EG)lg?+``>Ou> zq)1Q3=&AL9txj@RW+>^s&+njVX*5vP zken@TpHJp8V@3Ehf_C=%S0s^NA?;5C`~Cz3);|G(^?w@>C=y-^coCerwl+H!dZ+Du zI86`?bs0pde64&dTJOTb#3q_Se_AIw!C&FRzVF3LZ>(;)|KgL_5@PW_q*+-wg=~HQK9*@kUo<-{2);9I(NFDZ z2flVP**Z{jC=0qyd7e!%O4<%vS$ab4$$R=`<$M|O6D@~swXu8|@rugE1nE81bMKHe zUh?Fn9H$OP7oiTSUJxi)Y1kqtG*CWNwt)i>EKr(XBq%?8oF_jprPk+QNCimo{88{+ za!@}fbEq5~7;AK_3>qNj{K2{4Ny5(%T%wq%q*HNzaUP-|A)=V=P`&13#==+=lt9-E z83HYg`hcPdV0WyE9MOSZyHv0oo8D$kf=X95g38vH#^cHfyLx_{P&g`%7Kg)24g+0t zeWXdRHqjH>sj1C)%0kYCN6KUydGS(pBpp2)0WTZMyY>CA1?Q4YH{Om~5g%`JaUHe- zP3OntF7`);+c|}i@amE}gV+xv=|s7@*aW@SN$$E-6FfSEI-VI1N@5DH*!Ql%9gMdM zD7AyZG5!>N$RKWC+Jgc@5-|xEtr+>l$+y50fn51}?^u|4M>FM^a49(klaT>!N=+KK) zcw2naay>;wjmdC?EL)*I#u>AVE>y*{;-u!9v!2)Ouj0uU5v(bt3qAhCGdiFR5#N}7 z(9M>9HzhJkmfq3adp+eF-xF%~G^5&3xq|5OE|SW%q$5+57Ys9yHy^Hiw+Yj-l5>b(%TTIaWYaxz}ygKJrygIIrwhOwMTNeH-2-pe^PJ1&uj(r_7J%m}0Zc&Sx zIl0|r@>0$f*Yb30-(!_(3ER3>10Gi8PTI$jB{!1o4xjg%Fh1UjNxU}#>^2spPqya< z`vj!1Kh=C|i)Ow^ViywZWa153p}y`=$nb3AZ@U9rmPF@2F`u2ocpDxSkebB65`fBn zB>}rg^neD3r@D=YS)N&Sv{R*;-{QDNjLt*-^AkE7*Gl=WCp~$|9B^u-|P?t&GwjhJQ3HXInDYbWoUIPuFDycrU)TKJt_xv~MPyHZLJc|F#G0z3UDg=_U;W zHWp*FkH$}mv-Pr4+zu1gxn{>@TwT3XDLPJ7hs9P4b+CHEY? zf~hqiO5kX}F~Y1GXm%MDmoPL2SJeT&2lNZzz(%0%eJDBR0mGz1By>|kxuF_buGKA~ z;KN=@O0P>dn5W!Yde~xyRPJz}OAx@hNz43AgJ3tmx@>ka>MtDB)M~$0%ZT#`*$Hxz!1GL#fdCS|0+0dn0zSD!)Wet_0~rrfvAar;d_+FcywHbEt|frO zK6mOZ$GrT>C>U>>xv>LL5ngucyJq>Y$tVS0_VAkTIbzx$3eMSee)xxibM;>ePUVM! zWBK1HIKRc6d-s{(4+Y0Ni|IqbfzB?Hdg3abpE?ny2Bng0oP!|AbG_ zO7dI585-<_kJK62q`$l_mirTC0DrX|{|hk_`yb5w2Q&ZFZ~mt+Llax9@h8muHBaIr zR`6f>5C4vS^A|e<_ZK@OECIOLsLUqVqFuq~-#NIvj^s&cC8%6Utypf)435cYU&`gV zFUTz5bJezUO|IX2G)li*S{_lEJ-O)9d2U!;j$12Ax0;>X2_&&iyK<{I>3hmDIuTn# z0>9J0Kfk*#G{liN0QAab$H-H1rv!UqN(U;by!X;&2UaE19_i z!w=E(neN_Cs1aIIdKH0N39RE6SDD{)!+t!!+C>1xu;mM#&SD$Sg^v#!-&oycxXaer z5@PWE?Rbnswsy+zn=~9$aB0YOyH)Abj^Jwv9lW}`)>yq|cGK*=*49crRr4zwYcA!k zeDEz+0yc4gZf!p0Pk-yu_kFaAMFR3t2c?dnN;$D(!noXCrVtR;?|KRaQ(s|!<>rR!XuI0Ckb_%rP*K01JVm(RSLk7f4k%nUv40uW`z0sl5NAHf0# z;!R_}8JB|B%~ zs+mahbecmRBMr{YuL#%4NlIDH&hZ2~n`@&7>#WF!GzyZ={o$ZQirO6R)UQ`Y1|tdb zAB}wORP?=JvylYGM2ZB3EGbcUCXT&fw8WxB#ViE@_b+67RN7kSWA9h5^myy!Zeo>{ zI__tl_k>S_Klz+4`sSnBI|j8^x~bnU5g%_Ff%B3-D#=kloX!80oV_p=vfTnaJq+l*Rm;b_&T5rAEYi2S z<5jKe`4&u!yk%$h+s%2vpR1nPuT2&3o*s=nZSI6-WdOyt<5i7`wkD~x)stlV7%yzE zC5Ov@53kA9Ise4d+eDM1Cth?)thZcl>7>-x`~?$a4pLe6MByl;M! zv->HY`hSo!oc|(c1B1SBky)dg1l>SIfq%lxAA-^x4F6|_W`z@}?O3%c6zH&&!{ou%DN7`C*ly9*&9``7Elg-M-+%zNSJa}NDuPa! zTahoRez%M4&v*j>jB8kQ#?E+8>;a#a3*<>XRZ7~YTrTa7UyUndJXMdEuWsS3p_j(G zpOX#VXlU_eXSwWOw8ng;yfZ>Bl~>;-XlZ$}5JMZGa0D@aB>mcvEKS*e?^qLIe776W zoS1zkf|1?`cXxi~#YbGBlUccB#gL>@HE3Qc3kTf!mYWZ1X6aTmJC7tuKTUhcmxmY3 zP^pCYErU=3D}gPd_0)wr82hPc|aF2kjf~X?u0-l-!N~+hu0-Eb$+60p0 zAuiM~!kS~y>J1btQP9e5Or)awhR#GiF;%Qj6r|h+-uF4Ac5X%dqAEv^2Eqbps+SI^ zi4_P^W}=$^*LKyfDHTat)JNOuCRMjofG@QZ*p@5-J<2eG*l)h{Z1B)aK;N0?d)<0gx@0!#aLF8upQ#8jg|e zX&i}0IcepBkFe2H8;(+swCCXL?fY*2DU)CP({np!^eXkUhTEx33WiBT>f?bKQ=4Fn zro#IB!A{hTzV%mdJiRk?qqcTR@gQ! z{t>KUeQVyKYH9zp=AJf_Ab5`6j^;)Z!nmGQ*ZbzDeIsVOb$i*r5F>rbSD|)<|0huY zA!h!+7S#71cV77GGQEI=A#WTRTdIRR<2Z&(NOH4LK6_4t=gS{*y7`IFYBAom8~P!J zjGY%q*EF@s`X@!O*q3k?!86|pT4whmd|I_pK+_2}Vv3qPv2^eH9jNv@XSOd{+EIHa z`(Fm<2FWT=!gxFK1I+KvSG3WtV<6fJxZ4T7Pu-NKC^w$( zTvnZK*Wu|JRwp`;eM=uN{c8BWkml01_qdm)S){d;Pf(6IU#do(XAoh_EmX200KwJSQN2nxJ-@yST7HbO;d$ z*7b8t!1#Xm>Vh%DJl8quAUI&@tnkH{M`h;xQJWudX6@npKz3!E`YePa>rCgpb>xrDHd18IAe%u?(#V`-leq4rf1gHQhiZP0B!x1{*0M><2$aIiQd;KZ!AMlKG1r zGk0FT7hC1vNyvFjkU!jt4)R0>`a^PAn1D?GBaTY(!<)sJ!e#xB?xibtj*GfzL%Z75 zh1`zzIRWWW@8Q00&kbmmRGr_wewOxq{+Myl&MrTRouRVT4E!DN^GjeL&7(}0WVE+P z^2U4_=pN)9*2EApfhASZ9@fG3PuyAORXaG|TidM5_@fJW<)wEW(|6B=*YnX6UtQyO z&-B-G?Yqv(+V{Y*H$>`ZzF#NrdNuDtsjmcrcfMvd@1GJ(%|})uokkB;cCxwfzpvCz zXBJVlQ{HGyOZu}LVC|d=aGfA7ium53=xk_vy)L4?gF1#C%Kr(}e+cQbv;Lo1>i=I% zmiq7MV-3{v7L~CnHl*U;Nq@6jW}%CkQ-3pVA7-CPADlCvHXG9xi+h(sd=AfAA2y*#4$HY7^U**75j95~b*V%2YW23y7Fzu-9F5rhQc!87%T93e z_APB?Iji-|%pYQ>+hhDA7KNAjcCa>F^Vo<}nQ}il!4zgG&^FRgBh*M^-D$~d6>HaF zA|YP}x}x-c+OJg2CpEPw@QA|uCG@vT7-0+sO~(kFJ|bsuh*D~2FAj|fDM6}*Ybn(P z5I0ziR5a@gc7TTGxjFI(-(h7`y9$$kG+oeba;y(vLWnBZMed8g>hhxrhwp<8cl;{E z=`VyUAL&g;VMu$CC}<#yf-G_o=zO$5qh{)p*~9q`$)_K_g1ZT3fdq3V=m$Zk3|CG1 z`2w}rKOMZUSfKE$06Y_DML?E7FIhy&70x!XN zlnfR$<6)O$LCylio5BpU2@@1} zm{iIv4^U$jVfz&Gb`YeEy{LQFV9;catklb86e~rR-K2&apZVcye$st{jvL?M)U$-x zx-93N&&=|(L_#Rb#Wd#W*U7d?C!b?x?bWBT3(aio%Xw2#pW9UVbyJfqZxg|DW>oj= z)Wzqq&+U_ABhO=I=gfv}lTt_CCQRqd37*-hJ$tZKRM%>k;q`R%fdF z4#oc2;IU2N(Vd>@C5fr6iy6JQvFZLnN5qG6-_Vj#{wce>+?pp7LH4BH_D3e(Qv1@r z=0YT5R-5zup~6boEsw-X%m6a@Q`NKUv!_btp!~(s)=b90z&IdwBmHt$Vk3*0z(_X` zF2QHX$4ukCuaD$l6%s}@{SM9$Zu*5fc$~t1aA5vb8IjAcMO<8kectW0$JP1n9(cHQ zQort?oU38lV|?HC%?|5XcJ2Xb{6o0Ei+a|(*DZL=TPrx0!T88%ux2Z35YwHWd~f5^ zWP5iR_;m1FP}y#TYAJ1K5NfQn>U8}GU^#Z^AJ?o3|D1o%BqQ3f%P3AQx*}^cNV57~ zkA^>r2C`~M;MbcE=U;%B-!%jSm)|AVCHF%Ue#5ym`?5s$)^tNR>Cz4TnI$@tR2Fy? zDfEdOK@C&~ObbXx5E20Zk9DlYWmplACTJiXa|E%BkGDOHD!0nb5D2pNnAH``I)hw#v6f9xc}&P38q zB`Kd0@W%p_E6IZ0;$w(;2_2=PUG z*{X`M8O>|CY2Tn}sr2^q%xW53AR!?Xz))R{tu}O0A}WY zzr+7cLi}eAPsC{uKnZGiB6P0T$4s;Q4km0RN(lvRbIP~VhdHRL6f*Xe`})P?+Buas)#Y$2U81^Z75co;?w4K0?S7Ip$YD~^rZw3gh{y;6MdwiOZ|NLzGX{AobBWTtskG_668%%vf^*+PHWMD=j%Y4&72Vpc>P;=tkcdP~JT(DBn|Ig6@ab4CMtMoRhLpG&Z~_URLgc0 zwuOUk0JngZhtbPQj`s0lXxFE}nKOQH!J0GZ(ls)XS90o(%p2^HN6_|2MVYvj9HFlq zK<`(biW@%E(eMb)C(pxd?5No*ugqwa`%$=-^KRy+m4J?ce zoj$$^IT-6ZeQcA`|2Txu)!fO9(9GS=*ulZrgo<9$*xl9E!N`&F<2U}cqq(h(u)dQq zA*C=U69W?)1Ar00$iT$R#7@h=PQk!H@v)z@tY(Zej}d=Rg4`RKTb`^OvlK=$jZUQ#>z~~M921zJN!7{ z@0x4|L6VpWuvE>>W-@b1fToL zsU4%nnYPN(l9H=bBg4V4)77NV2HKV7!`@k1)A+|*Sii)y_|>dBiWtqLLP{hse?&qk zmu11Q08GIWL3OVqVmD}6MJQTUCo7`n+9~_sxo)9B%o#^qnBW;=AQJk-WPDRJ4bKj; zI=VVXLfMrbJG5eN{W|AhhBgKSa2)lNO}&=s;3Pr*L5!ae`42r1z|?+UWYn-~YV6WN zY4x3f1N3PvVKG@;ytV{t1-m@fp;XNj-9lwm-E7e*<-jI{fX4`x(DB#FK7%?2{4|mL zL7dVBJH-oN(1Ps(O7T;+qm$O>2aZ0*k_)5Bg<+7igMSLh4bVg=^ov^UM)^v7FJKKF zBL#e;#6aGp1a3fzgdnVvvxU+WoY-Yv9r!?8E2z0yB7kYc3i8m_n^jMUJ&3zV!M#We z5<0Bs7mKS5e-WnuBnzajKr{es6}L=GFq8msf!3`z`J;T2DJ2dF?NmH)-XNdT+puQ{ zc+mt*+!5Hx6!!|??{tt`F9WhB$qvJx+*Lvg*>Z_{2%JH-2L&7_JOu-8#}&_@-0i0d zvB+~EJ}r!i{|iAw)?0SHYnXuu2>R9@C%5Jz7C zk8}vcZCb-dPk?3@iXC*hkW9k{ZbYdESX2O9Nz5|8R|5(6OJ05SZmZuF==Z`lK`nks zHQ41PHj{I^YI& zW{N3Vhs0MstV$y=Pi02S(p)LFlY24fI!Pp3y$f=Br)@+0K##itVx9eQ*HN2Bf1Wu! zFbScdgc+a331m8|dN;AiPcEnE`fFfO%A6mmp7`4hCm|D(IR+cUp!ohTY)tC_>r;?u z4k0fzq5+b#pCn?!Y_Swb$U^d#=4fn{_c>zg6>`%chC||TN|ESa`9x5NhLFu~YVV4v zjCyy)3aB80#l2#61B;3WR{i5jctkM8((4=08bJ;*TyaFnAI9S7!)Bp{$+<&*Y^(dWIe`?@F^_E^j`v?1;(K1*PpFjf|2xyK#1{macBx7M@{@hD!XJ!;`4?z>gt&w8KcGurU}_ zJY^Jvo5--!BPhovt08v`7!aLXHF@n&mP01XMP8drPN_l5tOt-Ne8Lqsw9)*+fEHzM zGK$B+B2vUQXAwEz#bSW|JQtA6;PL+cxP?e8TGWxN7E!LMl&J9O2f7IQmNzTB3Qe_3 z9=n8lPPrLKKf)?DC4TLdsWN}Ru}XUe4LzGmfdbCxoTnA?w`7Cm+@tC!H0nM;L5ms2 zX}+3H!7lbF!lq=uxCsTmmH!BFJgPYhyF|(X)hszQrXaJPscvJGkWhd4 zlRDouzC0Ii5)Jk+df~@~qLE>uPp}j#YsE@s-_h);T7L4UN-&cFBj|yp72vqro5V}+l}?vi z?JBr|?l*WdDvejbo!zO}Qi{^F;MMaqCBQ(SpANrOHaqZWi368rH~voX zI46n^nJ(+}#8DK$6)kSPJuKF2=Io=kLSXK=W{_?re~C|f=pxFlSA%yRQCf{-2LwjC zwg6Bkx-7)zNOE$5MUeo>iuFS{bHtHVFn2lfY!liV=gvo;Nt=UcdE7%Yto|6-9qZ2V zOCoN2^1b7vm@jkgB;2U4k1_mv-7Q`f1+dK8#q_WYXd7ZNT6`OdL%F3I4;#Ea(TV@Y+tVpv#W2Pt!` z_u}2v_l$WzB)hX{+wA1|TlhAQ)_yx|Tu*Ad3lW|yCCruDV+nP?huM~lj^6X^hQ&}8 zXr@m?P1y7@qb(1?*0tI$T?k8-E(7Z|_f}&QOW>_WWUZwg-%irjs={BBr56*&7c<69 z$y$vY_r9m;)_`l)7~e+CmvyKolKptksO7p#@;2Pa7LGumo)R*9vA8liZrt#J%AKuM z6+4$95p;kTgh57m0M~rrfV#XO6ns7*BXoknVujKkE1G585>8lD?mM>dX%x?ST?ajl z`KtO@pRpFPoGr9EN8aSU%I9V80M~R{8TGjYxY2LJ$|7*1a|GQk?V#xrj&<}AXRdCP zUy&H{)Qho$a@6*cgR1iA`iRrBMD^9&x!I${*3j3V$$sS2O@6}8h{D%g?5l0jwWwjl zqsY#m>2vJ7h=ck4G#1;!#`HXBcUYRxK4X?FC>HR7fum_lF}lL|nTYgG|sw zDa~}tcXt0D_%N$QO?i2!8Cu6dc#8{2l?f}KBA2df@QbQwZIkDXcms3VO%@^?w31k$2D> zl&O^u;9ceAeR@DS;a11oPh;1g=;f=f9cN)Ht9STx(g)_O^!>`q z_xkk?0);Cp>9ud8u>7-Ry{EZDV^I6e;946U{Uk--e4DVSN5q<&kJOLi?Trl56Z$*V z<`mc0wrPKdEB)vGEv~EUG)J{VHw4IY-{|xO+cAs{D#Df%yhM{c?$_<5w<6hAqhw9P za~Bcf2k`fGJWUZ;{UNg zN->|9x%x3^nzSjwXT-C$aQpP>j_yoh77%`80|yC= z=}8Mp9iJ&u(hR5tGWDK}A*oyC4c>2F`qSHEz~)=9{QK}Pd?&%*WCLOOKud1rnRE>H zHQx~Gm!%_SjkFf#MbsyWs_9D28}({Gku~KZnm*g=__v!L!?Mk0EGoR`qpno&Ro~A% z&Sz+iE9ZF<_X`zk_?|e?ef&w0I(08oTArO{;_`6`R89QEfA&Mqm&x1I!L@=&Lc%M) zs1N?~rTHw@%H)nEF3-;AlMS&VE-_2`4*^)?N|5?R zJ$wvAY(-}?2pz}LR>PgMnmTkl-*PZ*6)NCt!qP*8*sqyc=No|O<;!N0!n<(kl)8)8x@PhIVw?2=DO$d_5;8xuKF&0tX(i&}YaszBaRH~b{+DkMB};x-lX z?+$AVLwBs(se-?@R0w$I#H=f1-z%0D2JdgXd6J1pnWN_9NZOl4+at7OiFzSn>=P`5 zY@Z`E$3QeZdq}H>YTEXtX@14aaw;pZ-2kdJP{ zmpTNma#@6RK^tM<@%9PgN<7I7b+ZM;4;~gjLl19tZxO^5KBH^v60{0v;F1%)e-&P% zPk+LBghyELH28%a)}q^X!{QK_bN5Jo-8>ueF#v5sk#0=oC|Tm?Yc4f>rlHXz2X(LL z2aL;NDv+g+jo!hce6^PubSE!W*;4Eg;=OP*?cz^wY{@#?)E${>-DI_9(M_k{Iec_? z*cqMuJ5Qs|Bd#ooTCpPv*`AGB%>-}WN+gn1_Zn4_D{yB=;t+?oQZqbnk)v?82x3XB z=)@5BpcY1^5r^ZNaeZPkFf=Za>UdE}PUNH_u7n5=up&GeY=|)KVROUqq^dJQ)n1Hk zeJ*e6@ac~zM7ROrx)(pATu(?n0}sDPEwq$89+yz*{J-pDF&ZFD6yHfgcvB3?$J-^R%#ID zB0!5%e|_GGjsMvkJm*(h8rz;%$mR(tBE(xE-v!j@(i~!*gET!&o~okz4byC>6YBFy zUM@z3m||1S8L|Z4EXfR0OQm6+zy!M-a}@Gtypnu{WI-5biDDVmPYUEt5`K!pM5^?f z9EMsy2muOrHidMVm$q~Y2F-Lan{9@+$$Lj~oE@~LD|KGE%aPA~5BsMx ze^M3xH6{J;KCzmDu?Y;lgpHB08=)ox;m1_y+A#Er<{rkszrxU~5^6FMG7~a>tW>bI zb^2KOTPjreeT0eaN9(st@w+8VsL9R3BqYQpz$U`R$|xi(%D~3LBrL?h%)-neD!?Hs z#45l`_}}mHaULmS8`BT1f|cRluOY;nk+hAHM;o}T|9N8aCrWVT(GlCI;X@ZrlK4lSTC5NCz$w7C!e`jSoZzrUQlRj?S zU}s=Q)hZOP3e~0C2Fp(XD*)!iUmpMknNz0Vfgu*%MR^iv4*)~8!;0?027ntDR!}?R%l)RVU>?i&(8Y&t|8vdmFDuze!F+JZ~MCM zAUUkk7jFflL!m>6Nm$V6mCVg4Tm=3Tr1 literal 0 HcmV?d00001 diff --git a/doc/designs/ipopt_outer_bound_certificate.tex b/doc/designs/ipopt_outer_bound_certificate.tex new file mode 100644 index 000000000..847831a05 --- /dev/null +++ b/doc/designs/ipopt_outer_bound_certificate.tex @@ -0,0 +1,341 @@ +% Mathematical companion to doc/designs/ipopt_outer_bound_design.md +% Build: pdflatex ipopt_outer_bound_certificate.tex +\documentclass[11pt]{article} + +\usepackage[margin=1.1in]{geometry} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{booktabs} +\usepackage[hidelinks]{hyperref} + +\theoremstyle{plain} +\newtheorem{lemma}{Lemma} +\newtheorem{theorem}[lemma]{Theorem} +\newtheorem{corollary}[lemma]{Corollary} +\newtheorem{proposition}[lemma]{Proposition} +\theoremstyle{remark} +\newtheorem{remark}[lemma]{Remark} + +\newcommand{\R}{\mathbb{R}} +\newcommand{\W}{W} +\newcommand{\vhat}{\hat{v}} +\newcommand{\qhat}{\hat{q}} +\newcommand{\OPT}{\mathrm{OPT}} + +\title{A certified outer bound for convex NLP scenario subproblems} +\author{mpi-sppy \\ \small companion to \texttt{doc/designs/ipopt\_outer\_bound\_design.md}} +\date{} + +\begin{document} +\maketitle + +\begin{abstract} +Progressive hedging needs an outer bound on the optimal value. The usual device +is to read the dual bound off the subproblem solver, which fails for Ipopt: +Ipopt is not a branch-and-bound solver and reports no dual bound. This note +derives the bound that the \texttt{ipopt\_outer\_bound} spoke computes instead. +The construction is Lagrangian weak duality combined with a tangent-plane +underestimator minimised in closed form over the variable box. Its defining +property is that it requires \emph{no} assumption about the accuracy of the +solve: a truncated or sloppy solve yields a loose bound rather than an invalid +one. Convexity, by contrast, is genuinely load-bearing, and +Section~\ref{sec:canonical} isolates the one place where it is easy to get +backwards. +\end{abstract} + +\section{Setting} + +Fix a scenario $s$ with probability $p_s$, $\sum_s p_s = 1$. Let +$v \in \R^{n}$ collect \emph{all} variables of the scenario subproblem --- the +nonanticipative variables $x(v)$ together with the recourse variables --- and let +\[ + B \;=\; \prod_{i=1}^{n} [\,l_i, u_i\,] +\] +be the box of variable bounds. With hub weights $\W_s$, the subproblem the +spoke solves is +\begin{equation}\label{eq:sub} + L_s(\W_s) \;=\; \min_{v} \;\bigl\{\, f_s(v) + \W_s^{\top} x(v) + \;:\; g_s(v) \le 0,\; h_s(v) = 0,\; v \in B \,\bigr\}, +\end{equation} +with $f_s : \R^n \to \R$, $g_s : \R^n \to \R^{m}$ and $h_s : \R^n \to \R^{k}$. +This is exactly the problem the ordinary Lagrangian spoke builds, with the +proximal term switched off. + +\paragraph{Why the returned objective value is useless here.} +For a minimisation, the value the solver reports is the objective evaluated at +the point it stopped at. Any such value is $\ge$ the minimum, so it is an +\emph{inner} bound: the wrong direction. Nor does Ipopt's convergence tolerance +close the gap, since it is a relative KKT-residual tolerance rather than a bound +on the objective error, and the two error sources point opposite ways --- +optimality error stops slightly above the optimum, while constraint violation +can place the iterate slightly below it. + +\section{Weak duality} + +\begin{lemma}[Weak duality]\label{lem:weak} +Let $\lambda \in \R^{m}_{+}$ and $\mu \in \R^{k}$ be arbitrary. Define +\begin{align} + \varphi_s(v) &\;=\; f_s(v) + \W_s^{\top} x(v) + + \lambda^{\top} g_s(v) + \mu^{\top} h_s(v), + \label{eq:phi}\\ + q_s(\lambda,\mu) &\;=\; \inf_{v \in B} \varphi_s(v). + \label{eq:q} +\end{align} +Then $q_s(\lambda,\mu) \le L_s(\W_s)$. +\end{lemma} + +\begin{proof} +Let $v$ be any point feasible for \eqref{eq:sub}. Then $v \in B$, so +$q_s(\lambda,\mu) \le \varphi_s(v)$. Moreover $g_s(v) \le 0$ and $\lambda \ge 0$ +give $\lambda^{\top} g_s(v) \le 0$, and $h_s(v) = 0$ gives +$\mu^{\top} h_s(v) = 0$; hence +$\varphi_s(v) \le f_s(v) + \W_s^{\top} x(v)$. Chaining the two inequalities, +$q_s(\lambda,\mu) \le f_s(v) + \W_s^{\top} x(v)$ for every feasible $v$. Taking +the infimum over feasible $v$ gives the claim. +\end{proof} + +Note what Lemma~\ref{lem:weak} does \emph{not} require: $\lambda$ and $\mu$ need +not be optimal, or even good. Any $\lambda \ge 0$ and any $\mu$ will do. This +is the property that makes the whole approach robust, and it is why a mistaken +sign convention or a stale multiplier can only cost tightness +(Remark~\ref{rem:robust}). + +\paragraph{The trap.} +Lemma~\ref{lem:weak} is not yet usable, because $q_s$ is defined by an +\emph{infimum}. Handing $\varphi_s$ to a nonlinear solver returns a +\emph{point}, and the value there is $\ge$ the infimum --- an upper bound on +$q_s$, which is the wrong direction again. A second NLP solve therefore does +not by itself certify anything. + +\section{The box underestimator} + +\begin{theorem}[Certified bound]\label{thm:main} +Suppose $\varphi_s$ is convex on an open set containing $B$ and differentiable +at $\vhat$. Define +\begin{equation}\label{eq:qhat} + \qhat_s(\vhat) \;=\; \varphi_s(\vhat) + \;+\; \sum_{i=1}^{n} \; \min_{t \in [l_i,u_i]} + \partial_i \varphi_s(\vhat)\,\bigl(t - \vhat_i\bigr). +\end{equation} +Then $\qhat_s(\vhat) \le q_s(\lambda,\mu) \le L_s(\W_s)$, and each term of the +sum is available in closed form: +\begin{equation}\label{eq:closed} + \min_{t \in [l_i,u_i]} \partial_i \varphi_s(\vhat)\,(t - \vhat_i) + \;=\; + \begin{cases} + \partial_i \varphi_s(\vhat)\,(l_i - \vhat_i), & \partial_i \varphi_s(\vhat) > 0,\\[2pt] + \partial_i \varphi_s(\vhat)\,(u_i - \vhat_i), & \partial_i \varphi_s(\vhat) < 0,\\[2pt] + 0, & \partial_i \varphi_s(\vhat) = 0. + \end{cases} +\end{equation} +\end{theorem} + +\begin{proof} +Convexity and differentiability at $\vhat$ give the gradient inequality +\[ + \varphi_s(v) \;\ge\; \varphi_s(\vhat) + + \nabla \varphi_s(\vhat)^{\top} (v - \vhat) + \qquad \text{for all } v . +\] +Minimising both sides over $v \in B$ preserves the inequality, and the right-hand +side is separable across coordinates because $B$ is a box, which yields +\eqref{eq:qhat}. Each one-dimensional problem minimises a linear function over +an interval, so the minimum is attained at an endpoint, giving +\eqref{eq:closed}. The final inequality is Lemma~\ref{lem:weak}. +\end{proof} + +\begin{corollary}\label{cor:anypoint} +$\qhat_s(\vhat) \le L_s(\W_s)$ for \emph{any} $\vhat$ at which $\varphi_s$ is +differentiable, \emph{any} $\lambda \ge 0$ and \emph{any} $\mu$. In particular +$\vhat$ need not be optimal, and need not even be feasible for \eqref{eq:sub}. +\end{corollary} + +Corollary~\ref{cor:anypoint} is the whole point. The certificate consumes the +iterate the solver happened to stop at and the multipliers it happened to +report, and returns a valid bound regardless. Computationally it costs one +gradient evaluation and a loop over the variables --- no second solve. + +\begin{remark}[Robustness]\label{rem:robust} +Because Corollary~\ref{cor:anypoint} holds for arbitrary $\lambda \ge 0$ and +$\mu$, an error in the sign convention used to recover the multipliers, a stale +multiplier, or a multiplier clipped to zero can only make $\qhat_s$ smaller. +Such an error makes the bound loose, never invalid. Convexity enjoys no such +protection; see Section~\ref{sec:canonical}. +\end{remark} + +\section{Exactness at a KKT point} + +The correction term in \eqref{eq:qhat} is not merely small in practice: it +vanishes identically at an exact KKT point, so the certificate degrades +gracefully and costs nothing when the solve is good. + +\begin{proposition}[The correction vanishes]\label{prop:kkt} +Let $\vhat$ satisfy the KKT conditions of \eqref{eq:sub} with multipliers +$\lambda \ge 0$ for $g_s \le 0$, $\mu$ for $h_s = 0$, and $z_L, z_U \ge 0$ for +the bounds $l - v \le 0$ and $v - u \le 0$. Then every term of the sum in +\eqref{eq:qhat} is zero, and if in addition $\varphi_s$ is convex then +$\qhat_s(\vhat) = L_s(\W_s)$. +\end{proposition} + +\begin{proof} +Stationarity of the full Lagrangian, which is $\varphi_s$ augmented with the +bound terms, reads +\begin{equation}\label{eq:stat} + \nabla \varphi_s(\vhat) \;=\; z_L - z_U . +\end{equation} +Fix a coordinate $i$ and consider the three possible positions of $\vhat_i$. + +If $l_i < \vhat_i < u_i$, complementarity gives $z_{L,i} = z_{U,i} = 0$, so +$\partial_i \varphi_s(\vhat) = 0$ by \eqref{eq:stat} and the term is $0$ by +\eqref{eq:closed}. + +If $\vhat_i = l_i$, complementarity gives $z_{U,i} = 0$, so +$\partial_i \varphi_s(\vhat) = z_{L,i} \ge 0$. When the derivative is strictly +positive \eqref{eq:closed} selects $t = l_i = \vhat_i$, and when it is zero the +term is zero outright; either way the term is $0$. + +If $\vhat_i = u_i$, symmetrically $z_{L,i} = 0$ and +$\partial_i \varphi_s(\vhat) = -z_{U,i} \le 0$, so \eqref{eq:closed} selects +$t = u_i = \vhat_i$ and the term is $0$. + +Hence $\qhat_s(\vhat) = \varphi_s(\vhat)$. Complementarity +$\lambda^{\top} g_s(\vhat) = 0$ and feasibility $h_s(\vhat) = 0$ reduce +\eqref{eq:phi} to $\varphi_s(\vhat) = f_s(\vhat) + \W_s^{\top} x(\vhat)$. Under +convexity the KKT conditions are sufficient for global optimality of +\eqref{eq:sub}, so that value is $L_s(\W_s)$. +\end{proof} + +Proposition~\ref{prop:kkt} has a practical corollary worth stating plainly: the +correction term \emph{measures its own inexactness}. It is zero when the solve +is exact and grows as the solve degrades, so the reported bound loosens smoothly +rather than becoming wrong. + +\section{Canonical form, and where convexity is easy to get backwards} +\label{sec:canonical} + +Theorem~\ref{thm:main} requires $\varphi_s$ convex, and by \eqref{eq:phi} that +requires each component of $g_s$ to be convex and each component of $h_s$ to be +affine, since $\lambda \ge 0$ but $\mu$ is free in sign. + +The subtlety is that $g_s$ is the constraint in \emph{canonical} form +$g_s(v) \le 0$, and putting a $\ge$ row into canonical form negates its body. +Writing $b(v)$ for the constraint body as the user stated it: + +\begin{center} +\begin{tabular}{lll} +\toprule +as written & canonical form & requirement on $b$ \\ +\midrule +$b(v) \le \beta$ & $g = b - \beta$ & $b$ convex \\ +$b(v) \ge \alpha$ & $g = \alpha - b$ & $b$ \textbf{concave} \\ +$\alpha \le b(v) \le \beta$ & both rows & $b$ affine \\ +$b(v) = \beta$ & $h = b - \beta$ & $b$ affine \\ +\bottomrule +\end{tabular} +\end{center} + +So $x^2 \le 4$ is admissible and $x^2 \ge 1$ is not, though both are written with +a convex body --- and indeed the feasible set of the second is not convex. This +is the one place in the construction where an entirely ordinary-looking model +silently leaves the hypotheses, and the consequence is not a loose bound but an +invalid one. A worked instance: for +\[ + \min\; x \quad \text{s.t.} \quad x^2 \ge 1, \quad x \in [0, 1.5], +\] +whose optimum is $1$, taking $\vhat = 0.5$ and $\lambda = 1$ in \eqref{eq:qhat} +yields $\qhat = 1.25 > 1$. + +Of the four rows above, three are decidable --- affineness is a question about +polynomial degree --- and the implementation enforces them. Convexity or +concavity of a one-sided nonlinear body is not decidable, and remains a user +assertion. + +\section{Aggregating across scenarios} + +The per-scenario bounds are combined by the usual probability-weighted sum, and +the condition under which that sum is itself a bound deserves care. + +\begin{proposition}[Aggregation]\label{prop:agg} +Let $\OPT$ be the optimal value of the original stochastic program. If the +weights satisfy $\sum_s p_s \W_s = 0$, then +$\sum_s p_s\, L_s(\W_s) \le \OPT$. +\end{proposition} + +\begin{proof} +Let $x^{*}$ together with the scenario recourse decisions be optimal for the +original problem, so that $\OPT = \sum_s p_s f_s(v_s^{*})$ where $v_s^{*}$ is the +optimal decision in scenario $s$ and $x(v_s^{*}) = x^{*}$ for every $s$ by +nonanticipativity. Each $v_s^{*}$ is feasible for subproblem \eqref{eq:sub}, so +$L_s(\W_s) \le f_s(v_s^{*}) + \W_s^{\top} x^{*}$. Multiplying by $p_s$ and +summing, +\[ + \sum_s p_s L_s(\W_s) + \;\le\; \sum_s p_s f_s(v_s^{*}) + \Bigl( \sum_s p_s \W_s \Bigr)^{\!\top} x^{*} + \;=\; \OPT + 0 . \qedhere +\] +\end{proof} + +\begin{remark}[Weights must share a generation]\label{rem:mixed} +The hypothesis $\sum_s p_s \W_s = 0$ is a \emph{joint} condition on the whole +weight vector, and progressive hedging maintains it at each iteration. It is +not preserved by mixing: if $\W'_s$ takes scenario $s$'s weights from one +iteration and scenario $t$'s from another, then in general +$\sum_s p_s \W'_s \ne 0$, the proof above leaves the residual term +$\bigl(\sum_s p_s \W'_s\bigr)^{\top} x^{*}$ in place, and the resulting number +is not a bound at all. Nothing downstream can detect this, which is why a +scenario whose certificate is unavailable must make the whole expectation +unavailable rather than contribute a stale value. +\end{remark} + +\section{Practical consequences} + +\paragraph{Tightness is governed by the box.} +By \eqref{eq:closed} the shortfall of $\qhat_s$ below $\varphi_s(\vhat)$ is +\[ + \sum_{i=1}^{n} \bigl| \partial_i \varphi_s(\vhat) \bigr| \cdot + \bigl( \text{distance from } \vhat_i \text{ to the far end of } [l_i,u_i] \bigr), +\] +so the bound is only as tight as the variable bounds are. Gradient components +at a converged solve are small but generically nonzero, so a box of width $10$ +costs little while a box of width $10^{10}$ can cost a substantial fraction of +the objective. Tightening bounds before certifying --- for instance by +feasibility-based bounds tightening, which shrinks $B$ without removing feasible +points and therefore only raises $\qhat_s$ --- is the single most effective +lever on quality. + +\paragraph{Unbounded variables.} +If $l_i = -\infty$ and $\partial_i \varphi_s(\vhat) > 0$, or $u_i = +\infty$ and +$\partial_i \varphi_s(\vhat) < 0$, the corresponding term in \eqref{eq:closed} is +$-\infty$ and no finite bound is available. Whether this occurs depends on the +model and on how converged the solve is: at an exact KKT point the offending +component is zero by Proposition~\ref{prop:kkt}, but away from one it generally +is not. The implementation reports ``no bound'' in that case rather than +$-\infty$, so that Remark~\ref{rem:mixed} is respected. + +\paragraph{Floating point.} +Nothing in Theorem~\ref{thm:main} requires a tolerance. A small relative +cushion, reporting $\qhat_s - \varepsilon(1 + |\qhat_s|)$, is nevertheless cheap +insurance against last-bit effects in the gradient and the sum; it is hygiene, +not part of the argument. + +\section{Correspondence with the implementation} + +\begin{center} +\begin{tabular}{ll} +\toprule +object here & in the code \\ +\midrule +$\varphi_s$ in \eqref{eq:phi} & \texttt{\_lagrangian\_expression} \\ +$\qhat_s$ in \eqref{eq:qhat} & \texttt{certified\_lower\_bound} \\ +decidable hypotheses & \texttt{check\_model\_is\_certifiable} \\ +box tightening & \texttt{unbounded\_variables} \\ +Proposition~\ref{prop:agg} sum & \texttt{SPOpt.Ebound} \\ +Remark~\ref{rem:mixed} safeguard & a \texttt{None} bound, propagated collectively \\ +\bottomrule +\end{tabular} +\end{center} + +\noindent +The first four live in \texttt{mpisppy/utils/dual\_certificate.py}; the spoke +that drives them is \texttt{mpisppy/cylinders/ipopt\_outer\_bound.py}. + +\end{document} diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index baf1cf6fd..5ce5e55cd 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -2,6 +2,12 @@ Status: draft for review. Branch `ipopt-outer-bound` (off Pyomo/mpi-sppy `main`). +The mathematics is set out separately, with proofs, in +[`ipopt_outer_bound_certificate.tex`](ipopt_outer_bound_certificate.pdf) — +weak duality, the box underestimator, exactness at a KKT point, the canonical-form +sign condition, and the aggregation hypothesis. This document covers the design +decisions and the implementation; that one covers why the bound is valid. + ## 1. Goal Give mpi-sppy an outer bound for stochastic programs whose scenario subproblems are From 45876c3bb6767618c4dd79bdcd18badde7c7fe43 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Tue, 18 Aug 2026 10:33:36 -0700 Subject: [PATCH 11/16] certificate: place Theorem 2 in the literature instead of stating it bare Theorem 2 is the Frank-Wolfe duality gap. For convex f on a compact convex D, evaluating the linear minimisation oracle at x gives f(x) + min_{y in D} grad f(x)^T (y - x) <= min_D f which is the theorem with D the variable box, where the oracle is separable and closed-form. That bound is as old as the Frank-Wolfe algorithm (1956); reading it as a certificate computable at any iterate, rather than as a step-size device, is Jaggi's framing (2013). Presenting it as a numbered theorem with a proof and no attribution implied a novelty that is not there. A new section now says which wheel each result re-uses: Lemma 1 is textbook weak duality; Theorem 2 is the Frank-Wolfe gap; Proposition 5 is the standard progressive hedging dual-bound argument (Gade et al. 2016); and combining progressive hedging with Frank-Wolfe machinery for Lagrangian dual bounds is itself established (Boland et al. 2018) -- mpi-sppy ships an FWPH cylinder on that basis, which makes the omission the more glaring. Both of those papers were already in doc/src/refs.rst. What is specific here is an assembly, not a result, and the section says so: the multipliers are the ones Ipopt already returns, the linearisation point is the iterate it already stopped at, and the box is the model's own variable bounds, so the bound comes out of a solve the spoke was going to perform anyway. The abstract now leads with "none of the mathematics is new" and points at the section, so a reader is oriented before the proofs rather than after. The wider inexact-oracle bundle literature is mentioned as the place this question is treated properly, without pretending to survey it. Adds a four-item bibliography; still no dependency beyond amsmath/amsthm/ booktabs/hyperref, and no bibtex pass. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 202583 -> 212153 bytes doc/designs/ipopt_outer_bound_certificate.tex | 80 ++++++++++++++++-- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf index d1b55554d03564a54c87b6d9a3a3b5efab9be4e4..f13e51431e8e2c629510e1c654ea49fcd8ee0987 100644 GIT binary patch delta 125186 zcmV)HK)t`$t_->P3=t(zL`E$!E;R}z(A34)3N$p45fcM2G%%9^!YF^;T3?Ucwh@27 zPqBUK9_nRCijpV?DUcKmki-bm<^ZE`@}S$5?^N$f8%gUsr}^;x4QHg4*0d8OZi@D0 zMGlAL{O1h0pWR%2^m*b}CRf&^Zgul=RalkUY?Y;68J(_fcB>cbPp>zLw(D)x4fS{0 zxN66M_B2!-H*c>uHUod4k)fAu7%=N?+gxMhHT_hNJoxpqZ@AHKtETMgR(hw~W7pp9 zt3!YN{mqx4tXLVNiZr!EnJKi=$qJ|{F_tMi9P3SgJYL&;{f6gQzbaIbfdx$27@e!k zVv3%_~@n1@xO3`DM1`_;Esf4lmO zRIu1O0fQ#>SSnH8WlRB!`t4oQOcja$AlqgTZ=Nl;y$u?Ddt09=pQayVTaR|(mfNzd z)nO-^xzK5<3K)OD#%bk@7ZbhhhpyZXQ6qpdvn)jeHtof7Ztg2mf4)BTr*cot4BNi0 zw*qDZ2Jo&LhPt_9=xFhPlg0aB@jZ{#4G$dZBip2hP4b9f3@u}HRk;%gQ-Q68h%zkZjjkc%U@=JaLz2K>y1k^gk4X_LnY`{S2KY! zG;*hfuh9f&@~~M3v~r-;c~va{Q|3FiwS z5A|@*t&%?j_NW?~Gi;9gvZ)vhrmL>%hx$+s!EJw2^1`M*)cv?ra8BA}-%c=?{efF8 zEh*lzutA}m-84^ulcsB&SS9?7A!431_fd&C7BkW3h03%UMgMghXfCkjOZtux007W_ zU*V_T_6!J70~k&95K*ad2}195LOs3Sq#yyRYCDPmM4F|Ktb^{v#OK#OSwmf~{`LIY zyLErNe_1i+4!$m0k@Ix5u@=G8rAv9-l`tU(QIH)t)(>^(!axLZ9wX$pH1=&Jc0(P{ z)1bpG*&KnYatt%ngE~+9f!pO>Ne0PN0v7}YnN?Q~r>=sTdZXD)356pIQFY$1?qhm= z=;~ppLfm%bv(#WN@^!T>PkqG@3DXYLk-dM4{{Y%oJr9(fpgx4~L?Gx=4htt|L%KfF z8HF?EiOk|4PjZwEf?428w!lNR>`;~c8yRb3yx^R|ut)SQLzsW{K;kUBT@U%B(DN4* zuoF*_my)=KB6~R306KQ)w9FT>ywNK$61K;x9CoQy%eSk3IMvWo#OSTdlttDi#@Tx&jI$FM()+gCEM-JT%C(K<6kzsxL843eSKqp6_5Mz33>RXp(m0r zC1Tnbnwhp2(+-9O3qVSgxGWS3U_sfODh0rD$@k1PHnkLnIGq~}(r8ua!q9&_&}A_r zl^M?|OcL=p--3Bcn@^S>LvSJ2a)_w)qu}vps%w}!JKu#;4;-1(VH~5RP{vFcatdNu z%J0hCdO9{Et9$Z?$*Ycx;*wRaid+YbR5?!vGZK;fJtR2f)^0V!dLrAoIaaP9)731k z{wA^`l${zrL7euBJ(t8IXe56YnUA&EZ>HZX4Fj8DeZnSWL}kyaAw~iMm&>QX^;%Gp zrE-!9!3sh)N1&#ePUgQyc*vE{3ou$BYI1~(TS0~jcr!!Ww)=fG7C8XUkddiDa77kM z-PFkh%E(i*-p7_V5Vv<{Rw@2)WBt$|A=O&EYAIu*gwWtA_GcCjPG=+qbgR`U21r_OscZH zm@Q+3mllC21aj($TMCciG)gkI-Jk-AZe6u)PaP)`$s&L38T8Yb3P2`1Ztvr^X;3QX zRQMXihjIPSqN;Vu`(%IQ;FFk7dQ_0G+T`pYP0YbJhy$1bBczBL@ct25P9tD>gwI5| z)JRwtG(AJJ3$jd&VO9!R&T5ABG3*(! z_7o3fx^S^IFYU(^#eB{0$81H1QW53uImU6a5Q+dlRs(*KNi%pw*!Y_8HgyHrfJ3;`aI&Z$&8#`<%F%Z+3_$V0VxPr~C>hM1TY`R{V3`K1)d zI-W+QfDEUY!t`BKi≠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%0APpGITV@f5S>95t+-brp7CDO}88oZXbloLla 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

AgDAxXd$4@l~;%hYgr$t+%wZKVm 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 delta 115559 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

&EJmeFeZ-dkgI&bQ_#|(j# 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�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%0Ai8`B&R?;N?c-SrNt?!owN4iL-s`2M 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 HyKw;k? Date: Tue, 18 Aug 2026 10:37:15 -0700 Subject: [PATCH 12/16] certificate: drop a colloquialism from the attribution section "it is worth saying which wheel each result re-uses" leans on an idiom, and "wheel" is a loaded word in this codebase besides. Replaced with a plain statement of what the section does. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 212153 -> 212136 bytes doc/designs/ipopt_outer_bound_certificate.tex | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf index f13e51431e8e2c629510e1c654ea49fcd8ee0987..a480f5bfb2e1c44f39e01d7d821146ae0decfcb4 100644 GIT binary patch delta 4045 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 V^LWdbe>?*q2{JVbB_%~qMhXh!tQ`OV diff --git a/doc/designs/ipopt_outer_bound_certificate.tex b/doc/designs/ipopt_outer_bound_certificate.tex index ed2b78abc..a4e0b9558 100644 --- a/doc/designs/ipopt_outer_bound_certificate.tex +++ b/doc/designs/ipopt_outer_bound_certificate.tex @@ -322,8 +322,7 @@ \section{Practical consequences} \section{Relation to known results}\label{sec:literature} -Nothing in Sections~2--6 is new, and it is worth saying which wheel each result -re-uses. +Nothing in Sections~2--6 is new. This section attributes each result. \paragraph{Lemma~\ref{lem:weak}} is textbook Lagrangian weak duality, stated for an arbitrary multiplier pair rather than an optimal one. From cb18d68b424555d50c5ca336b6d48d38f7698625 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Tue, 18 Aug 2026 10:39:43 -0700 Subject: [PATCH 13/16] certificate: attribute the bound by where it is used, not by how old it is "as old as the Frank-Wolfe algorithm itself" and "its modern reading" both attribute by date, which says nothing a reader can use. What matters is that the bound is used in the Frank-Wolfe algorithm, and that the same oracle evaluation which produces it there also supplies the search direction -- so the difference from this note is what the quantity is used FOR, not when anyone first wrote it down. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 212136 -> 212188 bytes doc/designs/ipopt_outer_bound_certificate.tex | 7 ++++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf index a480f5bfb2e1c44f39e01d7d821146ae0decfcb4..402435f2427675a83363abd959148d21fe7099d2 100644 GIT binary patch delta 13448 zcmaibLzgZL6Jy)9ZQHhS+ct08e%gK8wr$(CZQHiyoo{}?Y;v;5BD*@NRF%EMZN0~=wg-kASQAj48jfpzE9$%fo6-gfTBdE0D$22GX82ShF3yMX$R(l%tC zU&|*zm>DFyKSMgp?l!dUPjiGv>?!)T*V=TZ*{`x&-0Z?^!#lxt_$_^401WZbpEzl_ z{#XGXFJ2fkEgRJ+idnApgKc~C12{t8 z7g~6>4R!v9BZZRmO1P*P<7&0dp?!SiGMt;@qk8K*HYV99vzileoMdpRokn!;4iydN z2lPWyGV5KjS+xyVb=y(`ek{Ed;rW;_b0EJ2$on}db#)ZsuLqt8s z#v28 zC8Hkj^t;H6cpAPDd<6dcy!|DO>&t-S?2F>A=!pTa2xQjR>{mILH1Q2rPmSo(7&bKX z8(Yze`xLhrKoTfaQW9Y+keL!CN(i%Z8Ej)ph;E&Aj{yW)Y)w!2{?wK(e?$iD8c_?- z$BP-eCSMX2;?MbJu8dHA!4&ha1luAV8!N&i+!~BZ;yC&b4mQ!FSeG^h z98tLT1Uxkz$7X6g3&xXE$LE}`&PrEKWm&_UuQT;FV0^ca9X37Fba-05n7Rz(uKJNl zgZc3(_GQFU75PmZUAS19q)FcDif$k2qc$66|0yfYkITcXe6Z}FUhW2|461dVv#gf7 zpB4_%d%BT! zb5H9E87qm49;D4zp#CIZh9ZZ7K)I-H3l*J2k9LSdA!3hHpnDFcBv)ap5)CG1v8K zvAov`kta*>-oy`Nkz5;-Lt)FSk9y^>rCw-u0b}#9@I*h)!0K0J-IM`@V4Mg(tBCQk zH7TL6r3cKjA@aL@vjA&k@41Vy%_c2HE{;`BOXZJYFv`t~NXLc`zqy%lIV6CgJB#WG z*mT#VUKwi?-1uI$fh`N)uH66Yk`w_%H#-CWLV$#t==XJ>0&B5>;(0=cRZDR*mN}kI zvM*Y7H5fw0pl1p!qDe=bLCh$*l>4c0f<-f8zeXx7hB_P-UavC_;-Blp{5Izfj|ha2 zrW!40NVTJ&1mZxFhk|{oY26tgqY2pxXp+X#U_ag9NC8)x!FzUU(Gx_F^DLKx`#4^| zuQJGm)kPu{%#jg>;O%omnEYqw=zZA@E)8>$4S2vP1F_jWs^~?tT;Q%6h|JuxZ=wEN z)tzapM?vG*))S(4`-OrUUr-7-H$ftK{n6SEXgX`j1bK$)ml7W{eKL*(F%01V#H{wZ zIn+wk5)G6~oiG!?2wjJUX9#xtI+uI#I>aV~n`mqj2sdY)5VolW(h{hrvcic@+^}Tr zxk%4HJ$SVGxQ6sL)1b~NPLbxZA}-1a!aJAHTGR>H-eFS*&A15I-v+|i90uzj%k~{E5uJy>-A4)<>DB=OoSg$iiC|8^iWYJVcwyG2p-OPkf9+?s?r;eEnng(OSp zC6MgHE{9Zcq?aI&5AGEtBS~CLf91F z^g-Ak*ik%XeSAy0q(qH;t_xH?(b}g|cq04$e3C(0s#KFf*3Ae5q|>@Ju?uXly9GPP z8}fRk{VQLdYiBz@{3-aR#R3s^xd&`t+Qn2|i!lY1DVb?-_F6|`)I@8*_#138oiLMz zNm&XB4WGFQ5~|=`bYspuB#<{Ys1?$y#T^N|ZI`ZP8m z&?v3N52qlcBz`Kov2^a^q2Zwt>&g-7812rUt>qM*$$7$A^8AeCumuQ!pgbW`)Mz}&-aj-;bUZm4 z%zNREVp;&MMPlsIjz4GgVr7sX?;%N4!0#|mw_sk>iRC?jmTtF(-G&8$chk(ajwlMJzvjYD;!h9~1~Tvb6n6J1KZvCZy-J z0Unipme3FYkvC@Fl{ziPR7}%%)sMLaaT?YW$iMxfF8671eB)3;!^0(Moa_R&4J3xeU`(o@G@i_sB! zM!cr9GFlS`&&hWe;sySgzdVIL@3Y6^32>ov|rpsssOZCuMiQh#Io53O&dqH5}E^$iG|J%(X@|l0gB6u2U zRsy-N_Ky=pWH_=BXm)tNy43D!qD%m(McoM`+Dbq+bP!-o| zC@T=xr(tn8t$@jTAY=QU{s|HUNP(%~h-K2-ocRJU9U_J?*m}2HEd8FQn=2>OmU2G^ z>|4U(b97MQ_Ht3D^b;KwzaWkEpcNLKF1QFlsC_|1aYIbsAI{<$EN;fZKd&N~8)+4Q zmNMbHcZ6b2qU%H*b3pX0{{>cM*Cq0DgCdF)RM)kg%0KKRra7XvwQAN}=lYCNdKZXK z426B-o(DDy08}wua8F=aJKx5Eq7vqH7l2k^{(Y=+jE)pblIXNVlSFBz+~a5H3y* zj~*T}{*^co>Py38qed{>-`tKSw}qLA6pFT`b#6i-g}}{1=s6@S?}Eiupj>drv+><) zz@J-F9Sr{hLDCXNH>N4)B) zDuJkNt)edXU#58XuZ3^ek!zNZGT47;tf*G&U}!jgS!l*ZnZMC z*}`KeO@7#$RAqR)E%1@S$x>~Q(M~hy=Ac;S%j4^xTsIi5)7MG|zhPd@S*^UtFPnXqZN z`bec*cW^I$MS{a|a{de@-5buy@Hi>z5b)4WVoC>FNaj4p?f)_Qu{GLQ4^gd*nv6zU%KhmR<_4&NA_E--8;lrQo>6Rb@Jcy z*Ij55*CCREYjO`K#M8NNcPz@H=WGY;+P76Et3SxdG@!@PX|wFm!(!u&uUK67LsHRRifh^W9F=2H&N%Xe{-V;-*m6D`z3#jPEb!cXRd?kJ45 zBn6D1!G#$WNb10m^TEX_Qp=MZHO7UTN-?=SjqoZ^7)zm87_;m^vh*FZB7sT}u|OLK ztc&p>26_tdwX-RcagzrD^mW;U2z3n;BcPM+aR2e`8I~ahablCQ`k5jIGo-=2gG6nZ zrW@u6Gkr(d4Hz5dpW(p)^&uchZ-TfYqXO>M(d7K|D)(AP31N}E`ldc~7J}zEC8Uo1 z(}5+&Aq3~^)2PyPkq50Mrn2~LpeE}W0z3wbR&z+YvnYS+ti2s9mL8Sg}&J z(Er4&9lhIbUKJyPq0hm3{1#sC z)haE2?iCneyM5MuzUHP+DlVN?x3^y{zUxKXt|U5fAu!$hzuQ5T!rHG!G61ixJNCx9 zf3NtpzTdpvxi@{j%7fbU>yMcAvGTcG+UsC@TzkF}7WRL$e1^L?EFCWf+ zn{{q#^-T(d{6cVuM&9ll6LDaFDG950X=0|bq5l5KW|9Y;*Rz?!t1AIE>b%>H%hl4`*C- zUKvE&LsOzvl(mqX4;l>2k9_Z)~iK zshF#c<4^0xJz3MKuX)HcTL2wAs2~&nHoC=KYbr&dprWNBSW&)M`(yP zQN_DJiK}y;o<1)7KEnzbrn-%{jVwj4iOM_EkB|NBhM%9&>90Z4kH>=>Yd4MMw#RdW zQb4AFx9D@&L5Hp}51?Jsf!S?d!XZs*jpozD7?-3dC*vBtH{18iW1eDIndohg4xCBm z9zz#qh)f3w+pQmDrV#6cnI(ZZ0h~Xac>`_-G{K6$Ow+W5$i-Xvjv@jc^Zk{vH&9TE zj*%BDed=rf<;6!zNj0vEK5Ur84A-)kNW2AP;7YayC3fz*8_)>SvySQmY+v)}2P}Z) zeED&PE9-rmjMe&T2)I&z)lRIs5zg@S&P`&f{g0S<$L;|k+UE`eFJ2JLYIrRxYj`1} zbuGXmWZ~%f^ZR*;LMfx zXX2tBLpTxu*t2{^=JJ&G4(N@#l@iwBHXG|)l?hxA*KZLq;jQef9;u|1aJ2_ySi`4< z#1iOJ7~{mb8!Sw)kwxf?n>*&C;fHY#(k>(@XKsO!B%6f$ZR#(OD+2>d&~)mWhob1k z6-)y6%5TciBFvVw`!Q+3iv<&-1#Vx%m`dmi#3t_mo=JYLnMSA8mEw9Wy(DAWSs&A$b7+LqO#FH> zFxhKN(?Ivjb_8>hdn)A@4o99U0gSMgw_5CR zT`AkAEpX{r$Ewm=<7hB4C(ry7C=#$8wh#b93{|Nr05dQPD%c#)RSCHgvY+6-sMD6@ ziW>5aKUP|@;kgc6(&EywO(h2rU?C4dDIZK7kfBBaLgPQB&Ni?}MEm|b$4c1sOhs-| zlkpr!@Gj-qy>@UweI1}AU2yseg{)ZCmefJP-@7`u9!u6@p?LTP<#rsHJfE?4>IGo2 z^DVc>qC55wi4Ym@*HI2}T8;us+^_BjBg09350(;IiJuJ^(wHuJz&JvYk4$)kj;{+d z;PSOqWhecFPGE@h=fx+B^P2*NjTn}oulchaHJxoMTyam;fdGu%I$}&0)AKKKk6+qg zE#R6Ilm<~+_r>PU9CQmh_T?0AbuyRdG;`fmzb_D9~LDtvL2xp1~x$_bDgn z*K_Brl~TjCgN)Pe2=z0*)!>)R=0q7}CD?)*d?~g5uJzx7WmKd)!hBSUwLE}@aNdme z=PFqsn!)a!q|Gs!qBIW}ZgGx;k~4%q3LLb$px7L%f2}OV#iH2gh?QbPN(8ibo8qWc zLD|ywPaRp{(g{{<+|n1rG1d6Q;smoY4_bOR)K=M-mvRU8ex}-<`SRQLJgz0BSGSMJ z(;wXKB?-o6*DQBiS=-A^jwXPujgH;sQp>eRPn0$!3?9o_E1{I!ha;E_6J)I9mXSNx zaXDtPCAJP8DW^5C7*TTpMF?2>a%>sYO+YdzDW*#vO1ct}P*vrQE4DX58xrlX%cB0X>B8`pGn7Ba#Rz|q?{?j8% ze}~TE<$HVhYw&dV`V$+v^d88ns7O^w1?ZpONoiNi6RW@#j3d@8fT5<=zN?VQygjkX zPxhqW(Ad`*y5;_PsS1K|EFg2iBQ`&x03Zv&!))12ki_{n!i+k&Q$Lm6qy#xi00&UmibZg@Ml`DGN7kcB?HsmOuSKw&bohW3TwH3qjcvP#LP!wIt4R(7(- z@l!9KdGHr?w%!y==ft;L;?MeH9 z=Yh3u_m5f^SZs2|^hcbOtR*Z>o?F~+)Br1qgfqy1;y6J}EWk=O5?4g^i~0e8%N>e< zj7*ejqmC?T)PX$wzCks+5a%*CK?=fKEXe6M#&qZ|Pw-+8MFs^18U@AdO9?-xnAi2+ z9^}NBX)doUSw0E&UzG~8$_ul6iY&x=sOSSuqZv=Q!$xN3?>31hH-QI)YW7lTIk5{C zG1HsG-#1gNc7RokR1w@2{rD?1By{k_yd>!=(rG#Ahuf2fS1WznzCK{1n<~3Tdb*e zZ%*sjr_4;>YaLrgNR#C>!kv$Y08QFzXcc6g3?PA zmjl*Ls5qb&Y(C0K#)8jN-Z$&ep+BOTbuzmcxg@3HD1)3SHs84i#p+DAmJKd+Tn5he zDes{)fFO*|!)wnu+xQ~}6dRMmEH7?$(iyZuPr+`}LSfE~AptmnC0)xodjnJBjCY;` zgRjk{45{*wNB!OTEVKg2+O40yg-%;x4gkmol|0~$u?mm@?`KmE2CI_hjgeDK*H}Ig zy!ksP3ThI?%v9@X=Xxhz3-g7v(T20W@eQCCqa?9&VcB~~Aw)aI?)T#{1(X{zow{R{ zk|=r>PngB)d5g_h@4Cq&*5dd<&Cbm6H5*jQKOoY^(DqCu<+Wt1Q{IQF^r<2IVSoYD z-n2~xu+bgN65Tu^W0P64SwIGE?tQdlSREIyZk(KJ`fiJMr+r7WHLsw4-p!uK(Zbt& zHSuRe#oMI*RY`UNu;_XVl5Ueu5M!0fS5OG|5nfd;%TO1VPH#Iq=B7)VRw;38sO;-0 zj$L^*+{mH%qo@jL#r1x(h3Ts8IbewL)Vh9Pd5b>BmR#BPdMZTiFld%=207NEv&QF2 zS)j&gCw{EXqW^d%(Nf_(hmu>;+<9N`T;(&vTjQt1DUk&N8$j;XHwY*XVeSxB*C2OQ z_Nv(ZN2n{1?yL40+mrBUH2R_QoZY>=GB=i(mGBO)koT%o_#_Mf5OYLP#d zSh+W^3k89IX<9DbOwnmJBzc0(V>EDk<_s%Wl4vTh@d5r zmwamoV<7R2NmQ1)34#@!&1CUJN*D+`l2)NvO(fTP3wi4gQ~OJ#vYcJ>y>MRlN_)n6 zeN%|q885Lf*)|C2&?$m={<@1un6usygS&Ai=Ht0Q~COhEHvVoWTZg zvYClj%4Pk*_G4j6U%*mQPOru#Oar1j)p?vXgraY3gQsV`2Xrv~xnT#cu`_v_Ox@`9 z(X9L3z0+q~_FD9=U}evRX}GpW?Q=mp8G)ein=(zJHt+wEMB>XtuoZQ{+Njp~=`}+q zN}b#0KY09f_MtkwQ)ps-Xu@!w-ZHH8Jj_v^3gfxx!KY?liY!;cT;Nd1!IY&0&Av9k zY3XhD$x~5SXB~caL%TX>SaY=Mr_adLghV*B^p@juasCCx<5h?GzvDefO*2eQ6S!4P z6C`^Il$(`3^_dKm=zj!@95e-(HMN!;lnt2kf4iPkI0{fWz?)5a5HEyUd3A&7@74OueR`}3v&r<8Fhrrt_y=>!OKnndCKGrDL@b&YCqb!}EjtP*>Q zfN^nj>1@dYv67&ggz|3jgqKgp1UZg-4@}CLUYYR{fjrOn@XvxBc zA#leWu!^NJpzur}g`G{Aw}2Ub+r25Une9sW^f2HB;V)8sX)grrhZ6S5J}D1d&=Cvr zB0sbhv9D5cbi}`)nyjd_iD99?@nAdHfV`kepP=P%?>%ssG}zT(h9CQvfD=cSn0fzp*f03o4hWm;5GIRk&t9Nltuu9MRl%`<1RKML zO2!!~p**>FX(;RY?Wu@`=4pV*agxh9O7;DNprt_2%0zsgc+suDps6W)ljyldE+063 z)P5u-qA0s6I8$<3dR_3Lv@9sVUvts;a#^4)?fSCnD$5y~dM)fLhSHKajA!nD4*4w2 z3&`D>n%U$Yg&^=+){hDeTdZA%oC9MiNSl(>Hs>mAuT!A#W=WR|UxY-^LINk26%hSN zvV9`k_k?^tpDqPA=*5%w<1IrhZH#mqp{EE9^<77U9^MR*QuFVaWvV zpcB#qINf^5-1d61$&MO=#QNj9+>ofm;wIsOU3Q-Ch+etljD2=r^}+(oJ!&YzZPNh^?&> zo!Lm}llG`n*0*3npv1t@>f=+i04O`@?BLk);<=&^`+n{5Va)@jHjV1Z1VdXBQbnEc zo`u92blEFsxU6}qNpvR(-5+w$w1}o*Ir;Zugj8f95fN3w6Kv_M&SSn0Q*~nEadEEg z%MpPx+(Z{t{d)q!5G4?~@lIgLHI~J<<#Xq+Hw%A~%RMH(OSS{3IX5L!0hiU1FbB`B zhH6rs$w?E-a@bUCr!B-f^6h4cPXv3;v}j#wMC~@P#AeNDI9y?feTk}Pj;aB`*d=00 zWUf3_gC)1^@B?8WYI$%Ghe+ruV#a8jihbrNLwQv2!qn~aWWxu@peVC-AImoA`inKd!KY4HpsmipV=m5OCvs(;# zTdd0;jzx=|N_H6E$dog#u?fsI>@_~IQ<9%G_hJtbl)pw81FjmC!$n}=4Uq~>+he6J z9%fhEGBjMOMKZybB$s3Z)gaXoc*ymSP>K%1^)+ZCDr51pT(4wfS2A4kx9 zxP^Eb(PD%u98*flxXE+p7EFc$!L}vkE7lT*S8KQ#Q3<@BIEak$T42G`g1rm$I+vyv zg#rK}$+_mb+nx*W<6fvyj`z5Lm&05MIt7`EZwxo#=fztZQ#W2IJZ3u@OAd)aP%tH} zb52OcA7Hn!=dw=l1#2;lz6VOhqX(4)2saQfK?j{-A0lzf1p&Qh$`P|w+02|3`N1EK zfb#ic;w>5(MVAIFBy+GilC!T+&r`VvW5uUYpKACxnYYd~tUA%#t$d!&2dhhh=m=#cb!Ic@(U%5d;W&tq0i*B-{_d+QP}m0p{un(tVKb?( z6c0H%r7fi_$vXl0Eb6(XW5S~rFfzf7g+3h~+Hj24#w1v%fit;clG+$#It4U@cc^@p zWCDGQx#Kq~m>#dAT5QvqL)zZNvfxni*Jbb}!UIZ2Qov9ZK6eZ40Y&g81t!sgqDBEk zBb+N2o+Od23z`fz`!l-DgaI8LGB*u#Mf-v?K5(f>8)pShO_fF9+%D<(jD z$tNn2%2hW+Qze0-aq4*zp-qLiS@yWavu5h4QI{al>cJCO_V5dE{{}UdcWgmMq@l4W z*Q(0;X;I}U(^@%ge#ncs9BL^{Hut8B$aBRepRDpGSJQHOJK&mrg}Eotjz|XA^4yxF zv`sR3K$315&LI<5N67yJ@bPG-laBBu=_Y50NsEoT-?adAiB| z-+b`YV*@x3%j3ZPJ=?dnfOt!MK`fmVo%wnQkld!Kr9UaXjHkREYVPj@ z^3Owg(2#jA9`Z~r&xQl=>Y&{|@1#7%q{@H2Wa$>cNp z(3G7!E3q1RF4yDk$=@}ASzc?<Ir zSQ>5p-)JgeA8vQiM?f=kS+n-rUgG=%5HJ>|b;y(<9zgl+s- zDGK}}or4*Tu+DieM<+KA4?4?qd`qpo5J?*jU)&~u>PF;Bn*~LsPh}%}U9aFJ2dgQNfjJuyLf5wW>zSqmfR7QmzB%fI~oJ>bB1DFT^28f2{ z;i)QgE=?b-%r(&LFbHp@?3KWD=&9|en!xDw>2T@1nPa`?Ypn$4W#n-4lf_;*_39fw z@C_ay1+$V@&V8-@z`OB$c>4Xon5~xp@weiXvxv#3u!p(MvX|jPu*`}Q^AXu?Rn5OW z7R1lP{p;m+d2+oCsi|EM6?(v4=n&QE4W!JN0}2W0Vki6L~| zYxDBmk}o^%T7MY9Ntu z<*C4twcYd637gf4=r9|T+vD>H3yRrtP~sXo&Gj8^`1ea;O=7z`_|xY2=!h> zJ@EZWsQ>l!q!DVJ8m-i(_*M>J^)tdZ`M{96Zb{h3i?{#5RdX^>=ZX%C96syPlcTPi zkyOH+7sTo6xkVG=+(D&bM&1 ziXNE()x{1Aq|fI%zcGuF<$f#OA1z$>32T&9|OSq4PXug0w>tE%D<#fp0KbpSpKwt)Yzx_T6`~`x@lQS90J7 zs1hq}p`8KO*X!859<7ALY7FK}e*+lMcD$lAuNF4-x;5-j}^=uK53s_!_5zdy4;-*I)011$Ww8GD5n zy*IC>r;YhC{HbNN%nXUh^ec{FwHT@?V$RaE*Sp#&lc${@KJ7iIRcb7*2|WlKw?gEa zE6c5CRTCdS|8|*}3{ns#rufLMjgBV!w2Ya2MZ~U;N}~J7HHO6MKg>@P2=FBNY*7$) z2ddu&ao|dw6t>)H?N`0-19S(fTKl?0JPF6hN4#K1X#YLCQSj9VQO`h{Zte1C=Libu z!C6E~s`)uSbUw}(;QM66geAh#)MZG1fxLdqoUS`OZ00WBpQZ$gcnsP5)!ynOFluLn zIF?4<|H3gcO1caR9B>Z3k6bj1@z2H5P~V=t-8;FkYd@J@F8E#D0t!AW%;flg%!MX7 zzSZ8%#zt(Syl`B*mBZXInkS&fVS~vU`F0r0Ze$t?w&FDHkfa^R701pef&Z;(EsMq= zK$9)vGa!@pFm70nqc4Z5uA%|g*M2cn>w?Z}>WYR;po1bzt{VffXsf^piFwY}qFJ_Y zB$$h4d3qzz{l-p{0v>f@%O$^d5nUvu*Cbv?i0Tl!g`sS1?c>1ReYs_sWj3}S8g$+W zoGpi6hW)+Q*Kp-x-vE|Wko9gF+AEU^%7cXo4yi>T@~QOx=Mgh?MK?(Iocx}afRaws ztC(Vgu{U}d_-TcsaR)eZOg_OqXsF^W z3(ju3u0Nb~Wb^GG({@e}{(_$kCVBqv7%J748&qGERYZhKM3_xXoQ+9bT!KZITU1Ph zO+=iTlbwTATvS*@fQaw^CrL%%0Tlt%YgeyCz<_{H77Mkb_2YU7BP(?QSr>Z@Zcd14 zQ22qaQZh4BWMByf;jS{cOs|CS>ZP~M2ZJ;7{5HNHr=M@0%bj|Pi~Xek3!nH(ibEj# zB9ZRT%WVh$1Ce2v)(%@l9~Yu^GLzUcz+rgyScGR2CVp}v#Y=>!k!}LK3Ec_6Y9JOI ztpn=BeyE#eq8lKv4DGH%d=U+cKsyklpPN{v*yq9vT6BO?=;y)J_gj#mc|Tt>0EaL{s$c>u{2D?213yCa1J7Y~56sJs zV1hTvl{c)g-Zrejo$080h=&327Jzm1JfyiUUX%DLb)29L+;o7v8Nk^J`pjbCQPoJ#`gcs&C+aa&$~JFRuqapxAOO$DAZVtt zF1git3c283c7{1co3RSFP)o@jCT*H2PhZ3<7>&Q~!yb_;{4+rs*}1yiln&B~eqg7$JSG6!62b5_)##U&y?Mh=@ckkvFL`;?D`IXIv=_5A;jd4Z|H?+49y2CsOc<*n zcVa|+XAB=OFKAD(w31I>jdm6qJqR-Oy i5M}MQU-U}6Jr=A&as5pN@PQIRb1=b>lZz`#!2BOuYz0dI delta 13417 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 Date: Tue, 18 Aug 2026 10:41:10 -0700 Subject: [PATCH 14/16] certificate: plainer wording in three places "useless", "lever" and "hygiene" were doing informal work in a document that otherwise holds a formal register: - "Why the returned objective value is useless here" -> "is not a bound here", which also states the actual reason rather than a verdict; - "the single most effective lever on quality" -> "the most effective way to improve the bound"; - "it is hygiene, not part of the argument" -> "it is a numerical safeguard, not part of the argument". "The trap" and "the whole point" are kept. Both are direct rather than colloquial, and each marks a turning point in the argument where a reader benefits from being told to slow down. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 212188 -> 212207 bytes doc/designs/ipopt_outer_bound_certificate.tex | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf index 402435f2427675a83363abd959148d21fe7099d2..501b2c3bdccd06704da19285241d6dd642d955e2 100644 GIT binary patch delta 7117 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 Dvm?VX delta 7081 zcmV;a8&>4+`3&6o43H)PFqbj=0w{moT3?Ucwh@27PqBUK9_nRCijpV?DUcKmki-bm z<^ZE`@}S$5?^N$f8%gUsr}^;x4QHg4*0d8OZi@D0MGlAL{O1h0pWR%2^m*b}CRf&^ zZgul=RalkUY?Y;68J(_fcB>cbPp>zLw(D)x4fS{0xN66M_B2!-H*c>uHUod4k)fAu z7%=N?+gxMhHT_hNJoxpqZ@AHKtETMgR(hw~W7pp9t3!YN{mqx4tXLVNiZr!EnJKi= z$qJ|{F_tMi9P3SgJYL&;{f6gQzbaIbfdx$27@e!kVv3%_~@n1@xO3`DM1`_;Esf4lmORIu1O0fQ#>SSnH8WlRB!`t4oQ zOcja$AlqgTZ=Nl;y$u?Ddt09=pQayVTaR|(mfNzd)nO-^xzK5<3K)OD#%bk@7Zbhh zhpyZXQ6qpdvn)jeHtof7Ztg2mf4)BTr*cot4BNi0w*qDZ2Jo&LhPt_9=xFhPlg0aB z@jZ{#4G$dZBip2hP4b9f3@u}HRk;%gQ-Q68h%zkZjjkc%U@=JaLz2K>y1k^gk4X_LnY`{S2KY!G;*hfuh9f&@~~M3v~r-;c~va{Q|3FiwS5A|@*t&%?j_NW?~Gi;9gvZ)vh zrmL>%hx$+s!EJw2^1`M*)cv?ra8BA}-%c=?{efF8Eh*lzutA}m-84^ulcsB&SS9?7 zA!431_fd&C7BkW3h03%UMgMghXfCkjOZtux007W_U*V_T_6!J70~k&95K*ad2}195 zLOs3Sq#yyRYCDPmM4F|Ktb^{v#OK#OSwmf~{`LIYyLErNe_1i+4!$m0k@Ix5u@=G8 zrAv9-l`tU(QIH)t)(>^(!axLZ9wX$pH1=&Jc0(P{)1bpG*&KnYatt%ngE~+9f!pO> zNe0PN0v7}YnN?Q~r>=sTdZXD)356pIQFY$1?qhm==;~ppLfm%bv(#WN@^!T>PkqG@ z3DXYLk-dM4{{Y%oJr9(fpgx4~L?Gx=4htt|L%KfF8HF?EiOk|4PjZwEf?428w!lNR z>`;~c8yRb3yx^R|ut)SQLzsW{K;kUBT@U%B(DN4*uoF*_my)=KB6~R306KQ)w9FT> zywNK$61K;x9CoQy%eSk3IMvWo#OSTdlttDi#@Tx&jI$FM() z+gCEM-JT%C(K<6kzsxL843eSKqp6_5Mz33>RXp(m0rC1Tnbnwhp2(+-9O3qVSgxGWS3 zU_sfODh0rD$@k1PHnkLnIGq~}(r8ua!q9&_&}A_rl^M?|OcL=p--3Bcn@^S>LvSJ2 za)_w)qu}vps%w}!JKu#;4;-1(VH~5RP{vFcatdNu%J0hCdO9{Et9$Z?$*Ycx;*wRa zid+YbR5?!vGZK;fJtR2f)^0V!dLrAoIaaP9)731k{wA^`l${zrL7euBJ(t8IXe56Y znUA&EZ>HZX4Fj8DeZnSWL}kyaAw~iMm&>QX^;%GprE-!9!3sh)N1&#ePUgQyc*vE{ z3ou$BYI1~(TS0~jcr!!Ww)=fG7C8XUkddiDa77kM-PFkh%E(i*-p7_V5Vv<{Rw@2) zWBt$ z|A=O&EYAIu*gwWtA_GcCjPG=+qbgR`U21r_OscZHm@Q+3mllC21aj($TMCciG)gkI z-Jk-AZe6u)PaP)`$s&L38T8Yb3P2`1Ztvr^X;3QXRQMXihjIPSqN;Vu`(%IQ;FFk7 zdQ_0G+T`pYP0YbJhy$1bBczBL@ct25P9tD>gwI5|)JRwtG(AJJ3$jd&VO9!R&T5ABG3*(!_7o3fx^S^IFYU(^#eB{0$81H1 zQW53uImU6a5Q+dlRs(*KNi%pw*!Y_8HgyHrfJ3;`aI z&Z$&8#`<%F%Z+3_$V0VxPr~C>hM1TY`R{V3`K1)dI-W+QfDEUY!t`BKi≠vKAwm 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 T|Ch!*10V@DFbX9lMNdWwE1Y~1 diff --git a/doc/designs/ipopt_outer_bound_certificate.tex b/doc/designs/ipopt_outer_bound_certificate.tex index a2e7699d5..c17da760f 100644 --- a/doc/designs/ipopt_outer_bound_certificate.tex +++ b/doc/designs/ipopt_outer_bound_certificate.tex @@ -63,7 +63,7 @@ \section{Setting} This is exactly the problem the ordinary Lagrangian spoke builds, with the proximal term switched off. -\paragraph{Why the returned objective value is useless here.} +\paragraph{Why the returned objective value is not a bound here.} For a minimisation, the value the solver reports is the objective evaluated at the point it stopped at. Any such value is $\ge$ the minimum, so it is an \emph{inner} bound: the wrong direction. Nor does Ipopt's convergence tolerance @@ -302,8 +302,8 @@ \section{Practical consequences} costs little while a box of width $10^{10}$ can cost a substantial fraction of the objective. Tightening bounds before certifying --- for instance by feasibility-based bounds tightening, which shrinks $B$ without removing feasible -points and therefore only raises $\qhat_s$ --- is the single most effective -lever on quality. +points and therefore only raises $\qhat_s$ --- is the most effective way to +improve the bound. \paragraph{Unbounded variables.} If $l_i = -\infty$ and $\partial_i \varphi_s(\vhat) > 0$, or $u_i = +\infty$ and @@ -317,8 +317,8 @@ \section{Practical consequences} \paragraph{Floating point.} Nothing in Theorem~\ref{thm:main} requires a tolerance. A small relative cushion, reporting $\qhat_s - \varepsilon(1 + |\qhat_s|)$, is nevertheless cheap -insurance against last-bit effects in the gradient and the sum; it is hygiene, -not part of the argument. +insurance against last-bit effects in the gradient and the sum; it is a +numerical safeguard, not part of the argument. \section{Relation to known results}\label{sec:literature} From aa67d0c39b0f1db2d7bcbbfec4b49005e4977cc5 Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Wed, 19 Aug 2026 17:22:51 -0700 Subject: [PATCH 15/16] certificate: pin down what ill-conditioning can and cannot do A reasonable worry about reading an outer bound off an NLP solver is that a badly conditioned subproblem makes the solve poor enough to invalidate it. It does not, and this makes that explicit in code, in tests, and in both design documents. The reason is structural: the certificate is an evaluation, not a solve. A condition number measures how much a linear solve amplifies error, and nothing in certified_lower_bound inverts anything -- it evaluates phi and one gradient at whatever point ipopt stopped at. The tangent inequality it rests on is a pointwise consequence of convexity that holds exactly at every point with no error constant. Conditioning changes how loose the plane is, never which side of phi it lies on. And for a convex model "sub-optimal" can only mean unconverged, since there are no non-global local minima to be stuck in. Two things do follow, and both are now written down. Rounding error in q-hat is governed by the size of the summands (|f| + sum |lam_i g_i| + ...) while the eps_rel cushion is governed by the size of the result, so severe cancellation can put the error floor above the cushion; the guidance is to raise --ipopt-outer-bound-cushion on a badly scaled model. And the correction term's share of that error is the half that can push the bound *up*, since the correction is -sum |d_i phi| * d_i and the clipping argument protects the multipliers only. Also adds the guard the investigation turned up. A diverged solve can leave NaN in the point or the duals, and an infinite multiplier yields NaN or +-inf; all of it propagated silently to the caller. It was harmless only by accident -- NaN loses every comparison, so the hub's `new > old` test rejected it -- but +inf would have compared as an improvement and been latched as an outer bound that is not one. certified_lower_bound now returns None for any non-finite result, which is the word it already had for this. Tests: non-finite results (red without the guard), and TestIllConditioning -- Hilbert-matrix QPs at cond(H) ~ 1.6e13 and 3.5e17, row scalings of 1e+-8 that drive the multiplier past 1e8, and a 1e12 objective offset, certified at max_iter in {1,2,3,5,10,inf}. Each bound is checked against f at a point constructed to be feasible by bisecting a uniform downshift, not against f(vhat): vhat carries up to constr_viol_tol of infeasibility, so f(vhat) can sit below the true optimum and manufacture violations that are not there. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 212207 -> 229361 bytes doc/designs/ipopt_outer_bound_certificate.tex | 96 ++++++++- doc/designs/ipopt_outer_bound_design.md | 101 +++++++++ doc/src/spokes.rst | 19 ++ mpisppy/tests/test_dual_certificate.py | 198 ++++++++++++++++++ mpisppy/utils/dual_certificate.py | 48 ++++- 6 files changed, 454 insertions(+), 8 deletions(-) diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf index 501b2c3bdccd06704da19285241d6dd642d955e2..177476fa8608bbbb453c84f9916a032f38d3559b 100644 GIT binary patch delta 124947 zcmZUaQ+F);B#B!gZlJN?B!zGq^Vq29nD6&sp6#fHVQW5paxz>#*SPF(Xh%@< z&%xm(=eC5gzSX+8M1MKq88M1wIUji2y4EM4r)R?k5+Fn?%E%*FSggNlV0?uBt(L&| zHr?#_ZoZ~&zrLF1m*Qj@#o`+I?AZUJsOlI$Fz!VCe9QlbJ_96MqjV=U2=UTs3%L; z(f5-47wDf#)r~K!wBfM+PQXbrFo5uQ~O4@R-IBh zx5~s+6@Bvwle$5nusv{2#oA`qx*n(e8ldv3+$z7wHF@Q;xvs}3Cv@tZZ-%M}k+df} z>wiN2E;h%RRa8R8U$?G?1%3DP7q{p3DH1e+kM{PXsi$UA0}U-entWJCl<+Iy zShh0VJnqlvxC{^wbg5;V`{gaB5W&TL{;o_w>{^M9^-McIhq*2@Rz&@W4c4V7H^8SE z{7R|qxrm^=tlN2kLY{M|@C7p9(n`89Jq-co*seSaJiZ0lp%%qs1W8#j`x7gM2LpD+ zQv3>qz40e!W>L>*67wmS4+yC6yLV8r2N!Fv2ZCwif|y9fT%~>IJ^bUz##R_aZ29>J zIFd~sQ5&-0k+`>eViD@V=l##ACZHp#^F(|&(|4^?O8jPVTEmu0(RB5zowi5>qLzrC ziH`6?j|G(A-w_sZS6SmN%{=bMm^Y4DJ82%NlDdLJcrVe6D(i! zaa7e%Sl%_QAsYq87o+&1+n7J}=woj6P|Lf|e$3)LOfgA(xtXg)j!b{ANXMgcV!tKUy{LIF z{~+?R^~vF=7Un>wcZmsj72?zXpJxg`$Q7qTDwkfi)+B=e z^I}zaD9A{uA7SX+$xM3wfV{b&EQxBL--FS!3w4chDM-1t zK*LwDx0Ce?4_>{1QFtvvIsGZM-^t{<9&a4^3{LJAyzBhL*Oxs<&~Q~3)>|R%CR58pGLAdM??!H=RMv;_2B66X6aea&0Y|Tu+mmV>5E0LwBq1^xHY@eC00g}LzErxLXkwXK)c!8Z}PN2RX zhqqd7_uckEkmZ*on@$=nRwoZHzd?hGXhhRz+wM%yq)G)n2H%JqrIiL7IWj;D7)?zx z&|}O~bIU?_4`jur8+&u-4X>+Am!DCXz-Mo3^gS;i?*k{j^!RpXX$ftMDQYum7?C)w z=nzhs0OPOLN(~e=u#|z=b3*(b^L>!%vU_zdZ!>Hh z8e2m2R^uS@f5udV7w%=m*-BwLGOu5au}>%p(rrM-f8HKp)3vGC*(BR)mDNm zLxv*rn=LT7C4Vb)fA;KJdmsCmtxU7Kce!r^2o6A+0%&X)W?u6zhvZiwL3CUN4x7G2 zcLm5wQe=j0+}X04>OrA2(d&ttTRXTB($z{4b~zYklHK?pwdb^P?SEomA4BlwKE1vQ z05?#E=0zk0i$f}vC@cu*mUk(-5w2a&;+70}(lFxc7#hVD_-c1@dX-xz&I03~;&&Gc zaUU&Q??v@`w)o$~XU5HI7B?zP4%Z+qUOcFq|Cm+?K`XXo+Czxgly4(F9@YjZJ4rtK zwya9Y3n115-^w!&gS!f`o+GL&zFYob0U{^4&I*$LLhmrq;SInfhX5_kV6`K~7V*gR z%gNW~z8luK1{6(eD~!}P)A?cb=%^{6!r3AtZt(TN**y#3g{GKKcF;zb@ykx+IYK% zJ<-sh>Fy?~{GE&Jj?67;V7U=xdbd7@s17VT;YtEhw*21HxwQXyl>EbkCVt&fp#;~@ z5L-4qXPs^AIDkpYsji*D3?Yxy1Bi45B+Nl-TL`v*!^LN;$5`ENfj@AsnU{=f=2NxR z<$M#7JB@$Nl+~w770SINAt8!UwMhgizlX!u#aeGo)sjs=+AnzBU>c?t?O~)HdClJb zQMpdgmxH8ZTadZpQ0VYfWOOs=;|b^eH!~ylTj;Y*n{9airKuU1J}oWK0WdGAnj8;I zCQM~H<9^UUUcNp^L{cq7mYtb69s<7eC=$OP1MPML^A;$G%^l>Qg;qolL_*gCE8_GTKBG}n*qO7=14qcQrX|GaCmex ztf4Pv+^8ZK_Nu4~kvCi{2ar`{?FAC!#Iep&8vRH>Y?K|$hq)}aTHK$g`xPwYO!t-rkXnf9iZ%)pv z3}5xs(@kDE^S;DK+d#`Vx(%K_0E~&-O>{fE>I*o50q*kPLp$=n00F5KtxeeYw-K7v z(J&fOdy!pBsTqF=S~!+LqTS@8*fal~)xaSw2NFn$Ny&LxvmuM)!3zUZyjvENfsf-#hO?nAK$)}`F;HTBHtPEJqE^3fl zTs3RPGyq*(nmpg(mf)0<{SN)xm} zt7eOERcCDY%{mmmrycW9YN$4HW=zWLoD@fnn7BUETkDDChyRf3%LubpDk@mexz_vLPgo$RmLbV0cHW z3h|a~7nLM&B#+oa{@n9(URWqtth&#mT~8v2DwfAnF@mVEI#~0Yo_SviUooE24`9pfP4F}hZ zm#-~+yt7J$*Vi9918g0zbv@L*I;4w9-fT5*?3SlaHd`Zj33jFWKF8?KM&>s&-XK?$ zg*~f+b#1O00G%J3;%<$~6mlqS`y24=9l|i}^Mn(fCnwL&dn5MCYI)m(F{@kif2aSb zuL=ZJkQndm<2_)j#-srH4)R~Z0k_u`yE6c+B`Kn|XIhunun>x1s@sMXXrV-n(%@h9l zEHc|)YdV?9soz3qO><1t`U?IV%wr@<)PlK;LC&UygfT`6tAq?-u@9!LP**q2(fzR~ z;#8G%U-V$PY`uW+ef0S{fWJ2{Ib@nYPv*TtrcuCIgNWLV?}QeM4Bu5Vcl<*S1wrlI z)4}j*GfLP~HfRT)H5ZeeM1yvSA-Mf0`Q6(*JdyX+c(n-&JmMoMv0rAfgvMRFa! zwQ0PY96mUu?@k0*_LAlu&BryOq84-j-Y8V~2V+{SglRDj%gn^Po&h{ey2!~qHZ{FW zT=NcW7|9sesBirV6NYj;An5n03QeV!%6$Mpo@Qg6jve9yZ5muMGbt9JI5JMvn}X;u z1{vc=u0!|4lag*!=TAr_eh?;<%!$B!U1P}WE;6+;ZyEyVuST2IWX64@&{=Bi0INxA_!5XGJxqgZRHz?>7x8#gt@5ym-#~m1i+ZD2 zFfEC`PXq%3UHB`$5c4~ll(L?>lZTDrf^*`02*{5bz9-;6VxH{3+3DT)L)&z>oJ##AVmS=R-R(Qj!2sVLa06* z<<$4xLktADX#(|R;&GI41D-<;jP^T~ve^IxiPeVCZjkvw-gnd^ptBa{QeB9(+H*c_ zJ?dp)Jxw+rO7{t*7VfrlDMo=CMbY>3LpqAJz4;%u1e1Y3&&=us(e$^)6@5S}%20z1 zWT+@jzAhJC1)O+{FxCMz&wJEdE9HR@Yva&3`NN6)yD4BVR-|C94enn?Z77K};v@xJ zymeo1bTaUQ$?zb+{ieEWrtw}3$%WIWu=Sn-_qX&8(vxUV*1~{Z_cPYPk;DNfUBAy? z*VV5x3S$oG;Z0lxVZf}!XFtN=kW-=%HYvlt!zQVMn7Se3Ihm<*RBAQ~KSKz*?0KHu zr+V?}L(P_y3HKccSdwtXH~iW%%WnZ%uciM+i^s6Svoxhr<9Y*+ADy&1{9$$;{L%4C z_Z3(hA&@D0X8j5OhBR87so2zK$K#dGL9?``8Ktvd+<|A(r2m!&%pM#7=k8IQI%C*Tx#lyPxV?3+GcaF7~WrqGi~e7qY;PZ;X7$ znl2{f-8}KgM2AyBMgwm_0tnhwL)sLd>7;6)0%daRmRjsvpBqoncxb;i!~W7pr+7-& zr0>u|s%g*-#KkL`;drwJ&p86RonSb=>YXm|5bxX&e?uW(6hw%U0!Kqt2GWOt}U{u z?@rRdh2N*mLFBgzdNct_*tKwtvTz-@64KQpEZuw7Nd_fd2C_a#{ln!c4MDWAj6GWk z?V9m1gg1bJcp=`HiDnN^*!DWNmLI02ptLbWKoH^{wISL*y7_o>5c&)Mc~bZcWPpm% zGe`y5UiYU?7NNAVyafg%U*9v)o{CgJ88nbeY@p4Tr`S<@Y)=A~6q-!;alyxLxn_m~ zOiLDY?RF&L<*LLL7|J?>-$;GP&>Fp$JSfGdCby8zV$s!wIw-JmlrGDLQ)9V(jgBzp zz(SI+3dPskrYVbkhh-96_&ZUke?`aomj%eG_-@5rdf{Rd`MW~SMe z4{U{1@upFjK9xEJV1fDrx2~%PrN9RuWQ-2jK8Ei2X~p~7xQ@(Z!Lh^|swVp&kIA5k zA*aoFUv6~xSx;%JxS`@GjMXS&N9?4!Ri2`dlbBWzIkW&v_vPboyTdphXBa3uJ@eBF z(pgEF&C4RN_!}>kXu5oB=X)ldwAQ}Pt)q#)P>}obL!2Lx3K-OuO1n3VnISKe?>Yb{ z4UQ;PdTq<&``n%wkjQl4J8kP&oY>?8tlK8H7X_%LSFi{F)p(z1G7>joJ@va_Cmc2} zjT2;Huob{O?H3P3*30Jaf$A}fv&y+67xkNvE4j8rQi5U$st_1oqRQ!nxi<4`4l%*o zOEVHt!+c_a9);A8iZ0vo{7+b%A``2>qx)cOW)7LXL6X~K{8l8$sdjvTl=q|n+Xca3 z;DNCC-VBp5gAf|Zeqq5^V=+$FkXS~j2WvisB^jWk^hWHGn4r9wm_(|BW?4&r3Y1z) zJukGBa%NHlqM1eKr6$qe_=5brDHB$yZSy%99>9FP4u!IaN4JNp*uQZ@fJx8$-kRJ} zK?REaQAOg00~*VA`o+LiEzOg=rK&P3=60P_jE@1N*R%iFHu2{fD_x$=Jd6iaec}n` ziyeS2M(at|!IfR?H43aNLa-dY>)Lo`9DVCPpZhJZ zBJ)KIsg?PqQ0MCn(=fkR*)vM(CBcXP=PQGkxrkoB&~OP#ZRm(oVW5d=LRjB&h@iyy zvMD0_QsJl%wg{*$*6#HNfC}8VFgk&~k^-=W^4c<3-2s^;;q{FoW_w%W6#U3!Vo+f| z@}s%JEgPq#X_j$@9@n99p_QKj^^+aeBu>?1+Q(cpeyd?lhy<;kJRN8b8ol1ko+I|V zc(BI`HGq$aW2r=W6VaqwiV}maWmj1bS*MnrGRa9&CFc)T-hv#asy$H(b>Y+q6$ape zF)#szTQ`Ehap~ffJuZ@-pn9}Ub}HaZsXAc04E51Aq>JRgzw3rLT9T*NpLe)U@!l1s z>$PNnkEY$;0hQSujr&YO#<;-m`j3sc#K|ZwVGEOdAn$yrcH@wX-^R*J=1vaCsD{Pu zPBV`8U+&x-iC^|zBpwBhFS-ic00WX>PMB?O4!Pn%;60~A$wYvp!nGi7E6u%@v?esR zUOe=gPLtkkBK%UrzE#aQAr^AfE!H;;kK3)c+O^XWPkO(%dw%;)D?b~P{QQTdT7NKF zi7EfKud$AX>;IauFShUo?~itwCYaAtJ*w6dqb^_QNmJ1K(dlXk-WeokHv{ZecQ`2> zhRH1S<^evI2XG=Y4|g|{o#1ma0whJr=sRRhZgp07tIu*)Q&_2e_T%S~+8kfJ`7(PU zCj|&5fycGQMs)CkqPm*+2Faoo=#$EHJ-1g4f@&e#Cd@h=U3tsxORZNtx>1hk$?25W zZhpDU%5S{epmQCxH7r`I;s7>Ic0c;0+LXn2(lp24d*sGQx$aLo3t_!tPdoh`I)`;$E(i0S1Zxw`NDAkG9uUB;^n+u$XH?LZa+Qk}| zhr1N}c1__IJwk6{F{slm6@~SIA5XgW4rL%Bs%6Jpcd(IP)9xHN`i^Y(Ucd-=2fWcQ z33g+9bY6Mc-&OHfA3$?B$reOurKD#)ipROO--VG?zIu;u)dt|?B+9`$vwR&i(W`u! zn=D`PxkeH{a)e;8>M%%8F{LaTIXc&wpRXX3z`yiPp1+J(6I*&dsUS+LZfh!{_s%dT zrkvM{bLY}s%lRikFN(L|o^fvk_LuEm?cdMXs4B9ZLWY^u8o;wR#avv;6}0a@Q`vjp zxiT8$cJ0DVKSE2tlg;|7r`2j@6$8`gpcGA0{WJ~f`9f>!V|(Z#{^&Ol$?&aCa#q|c z{gmi%iT038cj7Iq0GPJ5FHkDi;>VozPMZ{N?bGq`q{?x=WuOZj-z>(=S=H7)V?Go#ZM^!;09exly{V#e)}3*W3XC;=Q54M(~zk{M|HB z$fdD~`xQYg=wh!Y^sv?AKU(p6>4Hj{DnyOI3Jj~*0_-VwdP@|0&`WhQ9sDFrNb!%O zQOfv%o3##qbUWhrJV4HcaTXGV&5oblA0^XrU&GAorm9%fWp8&k7zGpdPrRktjcqDibnYjOl53sPYbN@d+(4({IfXj{Izp8oX41uLYmn_~CXcQ>d zw61@}fJ6rIlKeJcYRe~qM{PRJo7K0gYFAa3zLlK(^b(R|pKXSZap@9m&oa{hJwuj~ zf-K6gKdLmK$Yfwx0!@rNK|#hg%*4Zw9q(|^L*0QjD}jfTm%ZktFL68bGbj}-q!n}esuzAU@TFK79Eg)LnnTT7Y)Cr8ComJ=&aa2>(XyKVKg7aW_*=OL)tJr;( zF=nExvzNftc2S5yE|A^i^Z8i;i)|Jkr^Ca8a)#Nr>CKnR+a?a@zK@3qDYrWjxpyhM zyr(-CrsWChpY4mIdW3Deul2`>s~?tKD`^4(XNNs83Y)n8e64^k$78i9z|$mjgbTyd zy)CUB>4Bv`-P65y+h^nUv^?)|k-x5o=XaxcyN#yr86+m+z;_k6Qbq^BVKv*+oWYaX zf!xD~qwlNEU+>BTU_$}p#dwwI7r3CEf!+Q>}5uGH?D!g${Hun>ImgZg&w8qC)xWKHWq)o(2f zu;q7+afW?|YI2FZlIOksfu?sTd)@4hsE7OtU@~Vk;AO?1lm!nr%98{g`gTEmoFqpaicjWZG0o$D)ZujB0(<-joP@LBUOd*Rio*t zsz~^f&GFE|6xl0PsM3{f!3~k%l>(X9&mNt9p+qkLBr<<>#!8-=sV<$6c6jJ*k#A%f zDiZGkiwKg%Wfj15F)#e1;}mS?jhbIc*ULo>gzaZIibo>6YQh-l$c`8vRYD)8EKhP~ z`hWafnc$ZB*xdbyP-}6Wxr`}MW^pD6s@U@|2xCHSPgo&3?ZRf(l$1urT=+N|Am~_# z$u746_w3XItx0iwF>%LmJt;%QB>o*9oRT*u^9uFb(^b6Qe>n|rj#evNEje$4`_k{| zxzqI46svudpVhV5Ii+Np8yBvs*mM&q@?@H!t=&kb!L0w1OplbU=djgCHAl16oPBQw zdS{v}y;ZNeL{iIl)9;~ao5F{YGE=}|orx_15QV@p&4I9yZa{*w7TZJvE3@Yz&W)QbH?r0e_%+WjNB>h%&5n zQgbE61_?a&pPH4^Vy`HrI)y-P+>(Vph#l#uFmPMiWz<=Mc{hXA4wc>VKv?YJhPm** zkuV2*pJb&$HYFj{2$I|JpzlOCXy`-%eLHIVAI!+`5A0JIG7qHN!~=q2g8A%NPcx(! zt9_(cA99CfBftQPqMP_ywJcP==hz@UB~%wKOEMd-0>#*;+A>k52HDi@Q=q$eTJiJ! zLc!GiS&NN|14d~Ju8U@wvfaMjj8crg>o}dUR z#af}KaN&&3=PFq+nql9aWT;EDX)=Ov;nF6Q%?*%JF!8{}sZkH;Ta#HahrC;TfrrG3 z3Nvx|r`wDaS{lx^VnS%j2HqhyDSMwRx2@T+^)Vjf_2X1LxqR7XzJD=bbu$u1;IPcDOt4D*d0$zYeRH?<`jMR7_IeuNZR_E5D;c z&?iRscf4W|%#J;kVv|tLv0IhkNI^@{25XpPbn%By;A(kkvrQ+~CZUC9DL z6lZ-!`$Qxnl0ubZFc54^q0E!8ij@)U@+DJ3Yifef1~GHBm{_JeYayeQ^vwN)N*T6! z$Nla-78aC;Yn1`6=HIJyEmY62GNnd&8YesHgNA0M*=IxROXOFo!J+NwO}Wg;LF&KU zjri|^B@}#$Dag2}Anfc($fzJ}tpC?Po7S=auYdNFZ|FRhai;W#B-zJ)t{7gWgg%(a z3jQtR8l+o)hrqP%FL6ubpYw!UILpcm_*v&glCunSag`${F29qk{ebs_l-YvG7YQ_P zO}B%S;ct1(QxSGfdE$rG(Cne15xvp#Y^YzH2W9OA1qElCTPpf z{wL{kCIOtf&!?iO`r-G&)5)-*Ai%)g78z_zspVN-xcPJPyfh-DqF&c}5+R!A#Sdbr zmF1BXzHfDC=cy}| zUHmZN#%SxhK9vR)JW3UVQ+@{!)EdktZcu$8ag0w#A&Q0hYDW@ z=@aisWRd4@`I15o?)uFyh-p1S{5Ng=-G#O(YC`ya%_bMOoJZUs)lkg>{u zUV6~ruXvlm;$^WEJ;7^j6z_e~CC6U|gS#gtgLuRz^STwoK?62l(T@t=ZKBKcjHnD`N!um6$ zjW)C!&PIDd^|_Ov>zW@`PvPRC#f#g`G_)ExOir*g;H2vD=YVjJ9Se}b?RxT^cjW{& ztU*(Upv~zG&iiS2Suzd~*ROkS#2WLEAa<#;$n(oy&`HCLLGEFw7U?&k$@->XZ&dT% z*7$|3QR+)quk2PbX%QIcvhZg7Hh2XqZkQw$90%*f7TUxvO$FKSw6IlFEVePgXm;4P zCucbX{!TWD?$(;Y6-k+gL~5av38YN@L#xF=S18}xl_t-j5+(rP8L~f|6C6R|TsYL{ zdiU?k$$(3v94rqxANaCWZhRMo#pUh+vrht>*-DuCmlUExBV^1J6Q?lP*pVCC%!K=d zu^0c;!)@@FcaD}G7G{V`dA}AvV-OlWS~E6p`yOSM2n?tQ| zpveH@qB_P&tVhdXd^$&r8n5m?Ka!~9;E%N#)~PEX9|4gpx-e`Iuk;BW|7)Gvp-1!+ z@mIAf#{nMDY5ipY|ETX%+?vaLpSYwBUzjzw+=AG?fKC)?7uh;dEv(f)I)5G_9&4RA zXFMIiN1V#$m05quh*}KW`@RDbC2}Wp1kX;n{i-HrJ8~*b2+6CDK+)R^?{w9%Dkj0u z|4)p#O(K9jK-H}0{>_*)P>#TztcE+O6N}f#Rr(u{ur;)J$)s|L9XJ3?b&afi24uo& z!iV&dT!daj2dFyV4?;v{CrLA!#5cYP+XY21-j9A1lqIGW?jQ+-kRva{<<#HOhoex7 zMXSG-LUZ34^SEz@mc4MHLnCxo$wtgg^BM#>8> zG8h1$Ut%?VPjyb3Z|m}Ci*)}5v;PCDT_%PxJQ(F#PMw3`Gy@D&2=@s&RU12Fvj(nc zMj7uG&|Vi5^Mr{S(UD&PO&3V{Ng8R;=Jf9aOS-Bv<^}-=!7lkGQX`7}D7#SA@d@QX zWs~y**G5!5T|5thVjlRc?HaPEYVy+I#0(3NynkmLa&g9YId+bF^b{m2q`naESq+rj z=KeU4DU6DyF}R38D?a$?L00Yiw>%<{H+9IQk%_;(;(!(UM?PwuAJkftc#TfXW`1w7 z%V8%wSb}gn#e~9b6NHIA`m@i2BQQi?nP}jy_P!Z+7U_O*!f3G?rqtn&(#p#eBd|F@ zH;fIOF3d^>n(wk=pJ=7cRwi~kci<_gg5w}HVTr{~aY^-`tOrsHV^KdNrGfp<^0m&q zS*Gv^x5=~GqfRAC4+so?ke?9C=Q*p1E#AQvk@iekJ4|Jd062^0K;ui2-=@^LjK!JJ zT+Hgw>Zj8WSQe20qp)EN(7)YDJBcNL&^PY{=f2le{v^3EL<>AW-7Ja%Zj5 z5O5TG#N5B|IeAWszW9|*D9$44iJ*>F)G*ul9UxC*zIQVl{0p=Y@Xk1xpDI^Gfs$`2 zSy%ZNhfwEpT|o^UI{0s7V5ZC-!k7k4wgXiV3Hw;`;!QcOQd)^}-GjUf36$S}P>#Fv z5$AXWqe9>Tjtgz0+bR`5^(+iYIpT4#T^-Rdo zwM}Ek$}~ab^`6$A3LXV3ZUUgJERU6xs{T{Y!mobm02%~2i?+|{RA9j^8h6~JP=9Lx{he#1vzgO)@&X3Z6A;E&=02zo6)n><`GAh|O!36d z;C*Bk!H<@!WIfgtFCVWtv?XOS zv7n^uoUmd_v!{{pmemu%>bFoGnMHCsny$b@3wIuyc~;8AA7TmBYnpEWCffBfyXQ<<(2=GF<&lic!*EAs_Sa8@XVtu(rAdu(w3$uxg~H z(X+2X>zL0>Q>YCLv(QpTyDT5)(xF=s0Vg#BIhs$*xaZ~h7gDkDzp{E1A0`o}Ul5E) zQBqYA#oz>-A~){Q+mwBYtkvZyotwp&*%WxxXk3t70)P3M=>El=;H8dlQ z23Gchf205G5gYaa76@|YJj0D|see@Bp+S%m0qnE0lKp-4O)51KDu_2tMsC0UA0ic2 zvP_9(n-Qhi37e)HzA>G0W}wH5U+03_+wKx1X6PCH-G0doQ>JBgl@m2_(Ee#?xDYzG zzx)QR7KUVsIW$I6^T0O)tOhW>z76x#8F%D9fha`yE&9oT4%25|UVbvtAqJ&E#2`eO zcD?s62LH-OpY0N_mNz83 zxo>B;hCNjOH<|9Bdn69sJ*~44jZy)$hE+T=XzdUMGa9L6du~$7bmS1*e?}4-wK=RW zZ^5<9dh>dKmjS|7GzDp-jC$mT5yP1=ws!o(Y)FD#(BRSO;aBd|kKngP){p<}g`a6x zP`T_x**zM;F6vQW%eiCRBp27fZHhu~_zJv#zI!uOL7&0&3C%ImB$}?2ByKTf-QaoZ zRrFP%AaWRHoD+)1mwdMtgtt?xc$2w1?m&vEK@S#SNB+Tq2WVZ2WOQ^G4Q!eap6S)i^MJy<=j z$j7MZ{5$`{GAulubU&)kGRxKau=({s`+P!5 z3L;}Y*fErOKZEet`^#2V$keA@`@==7%98?6wv@a;&K0M!Cu%i|9R8t<2MaP&StFy$ z3_JDWRGxvDs8Nb*NF&>*L@t5nJAW@kOo14|u;WsQL>4JCOsR2frk3f(DbtujBz< za{HNu6@JTkN@LgFK`ja@6UUn_s{i(1|{fUH>UmmY%A?R z;fjV5{PdNj1JcQV$I1@XVhH7GA&sbV3ur!JEn#L+duCxYj810cFgd;cKJk=S6#C!} zgw1-Pb>(`_e5<=-xH@VX;6Zt0R1$DTZnnKPq-ftDD7j?(;%d^HreY+FMX<&=Ei*xV01p+I1z+H}Hh%;K zQU=n{Fj@b%gvY|d{r@3*oz}R^rUXv!CAAZ7!-Q1{C*AnC$5pJpO7U9##K66puvm(i z90(hb4R+6$AHXw&jB0Hr)eYF^_x1UBwE5Ig4C5~I*m))-A%V`MtKqN+=csr;r8i}UUi4f z(M;A|^^wM_@d?Sp>Ugmbmt${eUtNDzQ(m4HN^od=J~9+neCd&M?F3O-8y$d^wSJm# z8_X5iZl=TA^b_4-!^=~A&`=e{lob&uGp4Vrvsp&HPNxzDCs-fL>#dqr?mqN~chTGH z>EB?Fk;7+e=4(8FT&pkNny9;8hLhfNcq6X9zl6=s!+pIYOnlRBtFm%iSKZ#>J{>a9 za+Op@?MABV3^*^`-!^&&i3nu9Yq+HGnO z3r+S{X*s9$%(ITTikzfdTiw-U#m396zr?}kH{jfWDFPnAN%gTKq^0^#3q6_T%Hx{7 z$Dy{EiRa@>eh{=iQ!R=}e^@?Bn`Ubo&&suENK<|jXF+G2cx_?nQP}p?<^(HHxMjV5 zdSr<;_c|{ecy9eN!P0P+3+NxPu$mkdGFfgjn_}?$$<^X17gZzlm3I2X-Uz`qm`Wf@ zzDYNNK<+od`Q@P~$Qhq?;8ExldoonACx|653=r}ip6MtKLQyLh(~+L#)HIYVs!vl{ zof7}fF~WmM7e#1PoAx6xVswi(atANgH~eO(KqLb}J-N?Vduyauo=72k=h{1zhvQ0Q z+K3R30H6AeeyO!LM2JF$f|RTc_n=p>K>Bzkgs2K&!B#C%XG~TORXs*txJhbAc~nwZ zqrf+g_-`nrM0NB*ImAzan$&*9_sn(iWw|(*(PvBns{x5;E-^%9{BUhtHNBs5PFDoJ z$<6_=S423d4n4{G%;sc_ER);cL!v1_EsQ)AXu|yBT9&10?%cw$vtaM_RD{8?ljRUS zo$IGm{o-ek^_~IkI?kO^dZ^Ptr$}hY*kMwI@lr?jO3`I4)BF=(#Rt6AQ-wEF*9l$7 zVi~2O2&yKHacY`rkWp7jagD0LA^Wb?si^=+BwNzGZL29ub9S_ufDfSC)VF89=;8od zD3d7|3BSXLC}?c>6SIP{C9j%W%2b5v-)o2ar$_&|nM5fMZouymk?P0k{j=5bPoKTi z&^z+ptA*-cL%iIju#tML%;S2iqzy?$c~AD|!H<3Lm)ag#%HzGPY?zY`*W zgRn>AlQrhaqeTyg)UO^yM{hGVLIcp~TigANpVY2RWeK9n3-O?xJW>EobZDUE&LB+88{dRF4 zm_T<`$<+Q;_1kYt+aHS7U(yr%=zw8BwS)5dB`VWmYwwVPgq3s1=R;qS! z?RZh_+&WLT+ew`4I=#+P_VlE^)!DLoTnIl34~AGV_o%<}eY-Q**0Jk!1%sj;JWjqH z2JJj#hG3Mwp8Bx7!sHscafB0CLz(|ST?9Hmf_8oo+q!Su1!bJkR|Au#y%;cxXukpH z?bjVTC5obnoLCJil%zDNqw*KP9pw+UOTyvZG+oFl)dk~hW$eN}IE{aj)6z~E?w2%V z_VeHyXa<|5pzv80oZ-^Xlh69!1_HHoT%G&YrOxd?UBzPKu`KHf$h1lpb{vtv`FwZB zYhh9uzKF|+!fNI1?J1ZDyJavXt~3Hb?JZapv1@~ zhQ2SC$OVZDgC%ec$7r-kSHY+EbArM~?QPH5h+!SQr+gksQ#U6(MfN93GC|OT_GDmN z>92(zk|bTfDLx=%xF``#%9-_{0uW*`D_EWt zn;7<|qa`OZb-J$8WxpGM1%M6}ckbChqhYIW_-vihmt-jU9bS6@bY=oh7~Lk}!up)= zxCl0)eO4QLsfsR|ohww%pKKf%``vneye@}F8odsxlbY(6m{VV|=vI%dL7J$&>l)a~ z!}lU9Tv)XYG%0+Owlq?>D+6hNq|(R^K9tf_Cc7#HGU^^O0KE*L3F{%YkBK*Nzb}US ze#=`ULnO=QTJd}0YwtVH9%1EY0n&r{O3NA3U$QPK+z0S8#*3l9ag$iE=~{mK^~66E zl+hZ3$=g*P)NET&u-Inj85!=9@WlO;0ChaZyU+;!9k7gB$RN6&L*SzA+UE03+- zSjLgvRIsVQvERXUPti#LIopF{fQj~4Nl1$KM&H&AhRX0bY=Td z7RMYWyX?L^MbD69zUobwm0qn2uPZOG5TMFHRYk$h+Aa`heG*P2$*caCVN-Jd@3h2B z#LUh4KY{`a5i>gzcS@fY1{en`Gh4>}<$tOSui#3#mrW2bhc_sA5T5^?V0fnXE?J^> zS*KN?0s8hXFi-d!u!zYG--4bM?q5T9NBQNcS2w{r$JftgrR3^L*63{BOpr3XD}8M3 zEUh=7gJ=_;S~?&M3=awn3=S|E8TiB+`a8f8RH}}UC1zp>|E?g`!Hf{b>6yOq4 zd47O^=+pw%$Q-i4<-XD7v9SSYO-sw`H{xt>3Nn$&88QnLEeps6;YA1&OvV{flF>4; zEbUS<_tzV2E^{74%iFsH`^OvssRfiLWJ>M|IGUnfL#Qhu(t@HD$Q_auX>R!v&{2ro z;NtFnWNPtpcW1=X=xXfZ)QVPY4gm5B)T;xs5yC8N=AFa4(;NpPN9ElE$e4;0f>~(= z>HX9xc{VsbGdV+m2!OQ`u@?4BMnvWGaL-}iA>$V^)Bq`YfNlKd)ZRIQfbI!S12?cV z{;X~TYJXk8ntn4Hqq4F>@=Bt5FvoUKjDVZKK~l@mGWGcNv4JRFP5{XA06Tp=fh+kf zd7)N{a>7tRnFB~7iaL0vpW0i&hu&1KaC|+390Sp2pN-kiQDiNPcN}kbv{$hlh^`j6rA)^eu$ZpFjvkh>7Y+ z)W5tAe|Gw)IQ%OCRa*<>nwUk~k7fnkB>A@a8G&VW@A&2XGee{pC@?wt)(E2Y^YQgM zerGy3g@0w=^HctN8JYErCU%T&cJ{0K07x@2LC6Oplu%#*BE_Wyzy_wJ#envI-|xNl zeOG1%{-lfw+L>R|;{kR5D!i5`{-!j20xSYg1Yt#B-*$Ub@dPL^p$gx9=is%tw5J4m zwSEN?KKtZ;e&yc{4SozEzke;rjxGKV07pQ$ziaz1J*o5g z1&R(IyI}u+soKDQudbMbt@(fd)ycY=eC&d#y`}Ac+X!-z0(k<>RY0z0R{tKCf6F!h zS~OdbJy6BL1@za|0$^liVfjD0kL@zE`M5q@K4$V?D&WWR{O^#G_GS*|e{C7t#|fJ_ zJDYeRd>rxz;sp4xeypQ8(DPqY3}9xmcX0hM0elqa2e5E(M)>PQxj26T%%XpZ{*AZ+ z%;Nt=+$;cQslO3BfLZo$#06kh_#5#6n3evEcs}e@{ze=CW{tnmM?B5H(MLS(|03QG zWb!xq@M-!t;sr39{TKb!DQ5G3Kvn=V@W1e*5zPNSr2i7w0L&JkzX|MrL3iLk9DGPD z{{cU8w)!vR_{iDH%h7-8<1YN0@gW2K1Ac_G{s;WX-S!{wBYC^O;m39||HIYCeZcJS zcd!rc#~b4x>W|zV|5kqla{O2uhksPh`jM^kKj24dE`Qhh7XrHfBX`aZy35Dy^0&c< z&%b;1v7^kcR?fhG^z$QMR}Y7O7xpc%sQf`b`N+$x-Gxx$&T=6ktAh^h0zHD?X$*U@kKPtr?Bl%m zdX)y7OE(?`o*pg{NN43&@AVX7R?qEA^#^rqlq4)=f8xZ#!1{=|8CEj%)R6l02MV!J)BP%Wtp@^QZ@NV+2?FRP{89WIgxsz4!Ak} z&mQ9L({s%(I^V=NTt3#A-;;L4e*`giIo>qM_*EuC6 zoEZ>CnS0IdJgX31RXxWzKWRw3qzM5PHJSY(=|h3)dk1+)@n zMHj;Gj~{tWI$%F~9M2@(&Fi8^ndRKPo6@W7NbCiA{Da(^E z^E}~^UBb_^ygB6cB4Ng<1A?>(`GsS}gF z4L}sJ(KVhD!2FspCWz+Y(}`~jy0+D<#D{GOl`Xgx*7vA{z~31+gQwE_ZCr{sQ=Z$o zQH$haE(4S*Nu&PMLg#XDh&($Tq+!ncOUz`eC<-k&Y(+nI+$4b_)v}JY{lx+m*5H3I z1(xLqp8Jg0L~Y6lo#xw%0**C0`5394#|B$FdAt3X^EQQV)ccGE#+d?aa+2Y+Po++& z@%t0U0F!iz2WC^%-m0(41Dn{fOWu3GzSI#r*uId@Qly4IAzm(~Pnk)t?57bOk}qebEI4 z)h~UB*J;7yV0z1EH;?NJM)jo2WD>e!Xa@WPl`3POWAJb4uT+s4id1#n4d|`tsjhmP z&rk-=L;=2>DT<{noMiREbe(@Ss9i*-E5`!0(UU0>vC;Jm?Fu&**7V5&xRiu*=~u z5^W@VbZrZ2O8m^jnHYg`h`;NH?!@C$U;|17Ny_DSKQ&4qTie&jl6ik&>4Xy?tw}Wb zK2UY!NA%s<2pxj5J9?K-(ZH}UJ!_*+Ok3T0g$YW&%=}0k1~6n?Xtlazdv~Y2?2DQq z2eczg6VD+P3<{XpmJeP`H4%HOi_0{dL;g^RDdU35P91k0=q53MSTmf~$s4w{`~^As z(6YcF0|jm$GbPRzjQ|uGogy~F-ZJH-*bGzv)aB_+=;xA zTm#g`gmw#h&|YM|0`1d<2+JF zciAj*@T7*NA_fw=*_%EozBpZVkI<5uHxRY5`Qeb>R1Lj_mc;`_0t1l&b#Xxl(=|x+ zRY?|K)xDIL1Hym1{rxM);=NrED!`tHmPjJ|c+=EyXgLS=UEpFulg4uYZs~D@rpQ>C zEiJ0`wFr0B+ms!eWfyVmjuBTwtJbHZ2L9o*%td^ZQMi655Ytv{XlDmGEtcqoBUB;@;DzDSTn3t=?;P~E1ar9u1KkQW zluBu@K-7O`4s#l`O{KV9!WJL0PqvQ+kpM%R;c6Z&gp3F9i%Zc9LBXj9=R1Jbo>9Ob zx_vv(I~w4972&m@!Qf~u>El~opIB3lDNo>Z>x>TaLWW{_?azkj?-)y^I~X7Y$Jnj( zDB2Ve(E6-wrP%^Pk@i|EjKgf>8htUT@Xiee1vm7?~N8kr+$HcPxNb8x`ie`9>-f$OkED1DvWjOP2y8%eL^IRWqUY@ zW!itH!^RpiDJ796K2~>!)z{+k_BEPc*#Ne?!`8*z`mP@#1*Hst?S`$4pUSxU(-Dc2 zpACd#wOz*qhQpZoTVs$K$qv*AzuT?%R_A8YR{tr-%9M;Xa30oXMe3QGNpwgqp2h_8 z+Fkg%Oe;1Xd1=rovSJx@6g?#;YzL5Za$0{*4!z~!Fj|-y-9hb|k;rW#G7MraK2n;AQK?7T@Y$HrdBt`)j_#t}2|PFxH)oGA2k;Qze7i#o4T6cf0-}a@zVd6MWq7#{O5ne?AJw!}7f;E^9>=-!1$MAomh*tJ( z=?Of#(^rhb)F_DWwWmzdml3VkD`+lB(V;X;{%1d-NIo?v=Pvhs-q#U>5hul>_5)(5%ceN?%f39-JVP$~ZpLL8}e-UGti{aP!|+MYpQ7>2l}Lf}JbM1IIqXkk@XT%;vc& zOAhE|$BYGkMxWPxFnDb-~rz+`*W5+4Q?2eikxu=mn<*0vSyLkOV zcQqiHJmla+%-wo-g$^xlTy11MO;w z=dvl1B0eYAd_RhcoP~d6#^E8^)lI))PIY4ZSyFR|ln{4d%z$Jg-UZV`^8Mzas%H6= ztF2OdF$VDqrYa9S@>#tA5~ZgtRS-cb!oux$v~zzks~y2DsfL10GB$%&Lx#P8xgR3V zK$@q?$)nr13I*f=)O7Q?#DnN80n{Pk&T9$_sxO7qzdU)QCnz?dDCLV77tQ;3%N zzjwGM9Uz0J@qtI_wh$=cj z4*v7z?X_V0i}rv0m8=f1dU+?Gk2$p)(!H)}=P;Xb4!6u!1ZD=2=0_Wtz5ClcX^Rg} z0R6}P#ocPC)FTOeoA0~Vq868=rhuDIrAioGkNNr*fl2Hh+sBB_7pwd5l3Z@HA<$(YRqASzYzfV|p8tk_8K1XJptj|EvTk$Z3W08)OHV7xYbNE5i z4~&o8=BHnni;pkl^Zz*^mhSJYEetFg9MB^dZAiq;FR#CtMFToXwhEy_bg3y+zz4qt z$}fpf_%44-Xn)U$n!9CIQL2YAnoeP-W0Akx3p(n5T^nqs^_zpNmOE0kB%7t+eB!zK z+-X@U?!qSC$ju<1or^l3BMdj$J~>63caRdnv4Ql2vc^gd-s{j-ncCWngDp#FiB~)~)+&+2O&IDd4=^N|Toq-v04My*-f-LUsy$3QD`Y_g-I5 z>U)3izMR5=0ZbNYVWvnlUuY$mgeMlj7I-_dYb-d_{;*YC#LnonwvHpid5{yMepd4) zfYTdyqjlQe@&PKi$myt%ALUE-^Zg=m|s112=ct50^x_kk-2&uWBgp z%b|bVVmiuy!6H-8DeGr5mRx^jl?18YYUh8vyad6>tXa?fG0na}fe!9aJT6oAA<4AN zQ7baL%%_MUu&{EuxVv6R74C<`6!J0RI5qkfGtKQvA`OjgaGD%ilBO3)c_Z^x%7$*T z>o@f%Ci#JiTq<8~r*MyX=~uj^%%>cREv>IJO8K2jZ?<-`Tuy8TvR?wW(xThez$SmX zPK(GQL`>Le`w{XG!IiiV<+$rfpnh$$a+mKf$TxV?N%G@vK8{Y{q8mF^dyBpkf#{SX#Ka*%B~d?mrD&ZO|#e{w~aw z=rDEOw=MnoZ6h%6Wx?(;iRjOd_EUc)TT+_2)~Xx{#R{x`C@py;nnY+Iy!^o5V8(o z+);?J-GA25=eH5dP-LgWE{0TTHLE*@SvEIkz3L4L z7hb0upWmz>#?sXmn*=U)0oUWL^Kj10&6PbknU=6UYhFaV8}fw=*zte84p^M(GRWle zxu`h$R7i_exCggp14wyz(AWF|ndYq|Xi$B1n>&M|%hX5ogghc%UaIORZlmZI$x}Ms zZ#i~H%j}+uw_ic>q%q%J+@huv&7}8`*Uuc< ztevo&%se2fx3ycTugib8?#0lyU_%EI2QEHU;D1eNv~4lncDW>|ee(f7;gj`gFs1^i zJHE~TLaGBVNKdHN-LNc$6yhzvpPm4qtvOFvkcRLTE@FFZ*`tuG@T0b-0FFdNpXA}c z30ubYLMbIUeK}5p;sC4TL8I-D()S5t4Dk{^Ga;5)J5D7?X1Q-@3S zTjpmMNL@W1Z4@|81E^~nK}<%)IXK>;HN0Dpaf*mW!517{nL1$|gBue5>C|4J(^8Hj zR{ZX|vcRBzY55uMvteT%OIT#}F{AXT&isRS{UN=yZz5d2#pgt4LrLj`)lCzp)vQ>{ z_)~D_7Gmuz9c?m@18V$HESo!AUlO4(lSTa6&QqVY+Zx+qtU@8?eC1os$JdOe1+5e>rre|HjWV((V|r;KT_YibQgcSZMZw{!(9wuiBWDWU zh|nQ>t|WhpE54BB)M&yapMlOW_#H_oP(0BK!8Qesn>xqNA_;UvO z8&;0K??zOIY}d06RGJC|&&_}kVdV#ii9MfUpZn?2;<`0Rkzh;nB=Fx0_WtgEw^|!1jx8uzSzR!*js^Z^e^0~YUkH&y) zbXRY$Q;%tG4MAG?etm}^=opBf9o^v8)WmayjLN>{nEJwlF5$$GG}uY?u#T$Fu84HI z?E=&9y1=elT1EJ)vu9~SHR9SKZCPXzGBsW9%Tn#P_O)5Cx#NYw z+LNyr8M`d>B9ry=8tY0LL&CQ>(M7B0K_=~Tm7ZSytvquTHPc&1nw5&bXn3ZPi8D+kyHtNqWH9z&&|H~%Ex3N;pDyJ0X=05pAr0ly z?dN;$22ABDgBIhBo1K{r%p9h^s`HJLLrDbP3yR495#49Y#b_?s%Q-^&j$)}mBx9$% zoL*UxXNtlLrxKsni4WWIOybZxlrn>mGO`jnt&9a)9h5EW=gCpiR4?=T#CE((Zy$d{ znv_IYeYd zE)4Q>MWlyUd`@mW2M&x4sUzd-i(luW&G~V5(U6xnGMjO)l&{d7B=Kc0W?0BPG@b~0 zu~E7hhoLHvEF4nRRIxX<$>CBu^l>G>n!u?xFkPa*+0l}POM^92==@Bx0uPs%#=JHJ z8I2IX%O9DAL{D;tSjb&$4dkpqt4fnvZ^gSZ4vz|hWTMaH@m%z-74`EmX(Z>q2Vt40Q3l^< zDsAJ0P`XWOD!K25;@6n-K;h2)H!uyj5cD%oMl0Gs)S4_oPg!RW2bl`cF~`cG0oz&2 zwxGEO1&K3-_rtH{(lGHgEvGNoY$+Fd2aHoK3@WENuYz?oQwo19(K#rRvx!i6V^;?A zth;su`Tn5qbaYvGTJ>Cm`MzSF0cl-H6ZXg(K7SIw8iX_Y&All$2}b-dqvp(3b^ScG zy2nkY7SB?7_pwlTUG=_(3nR9m!??7j_CYc zi&K*|RQ_9brUZTB@G;=2yUwu?eTN1OT3N->msivyn4OHeLv2|6>-rtY+c#Z1ksHq2 z_tvD}*^o~(B>GR@gcFuhJ?}s@dW?LQisB+l?2msLC#2HJ2JYiUSD!)?u@vCe-VD%V zSe77<)Fmq%0AxR&=92UO^cfK%_yY(((RYcC*n1(v6i(0&KBDUc2JdCHyO|LP4GU{hm{%dgR-N#ZAGXh#kZ z8j31X4Y-`7QjsZ@Ss;{unbxq^Sp(aGT<`ftZOuiIkSTXa{Y7DBx{2jn@@&DB)b;0X zC2y*WSgMTaE9?<}G#55~@S5t!|M@t{u10?d8L6h+JZpn9^{o@J203lJDPoz~eA(Rh zv6;6A;2(-v8R9O;u0HGUoahf36~Fm4^uAxP_&q{SE`Ztfv*Ul3pYwH0YHr9YNx>-z zCVGYrw>Iao58fFX-@iIZIAn{vezGnONCgdLEPfp=dJJJF<(mpde1^04QW}#U%Zz`H z)ERbr{1fBOy$K)exh@alX2Q-`hnvGWrq2oVv%Ml;*Ab-GFWol(adFPV&Q|lzW`fdR z?kN@&H!cmLK9OJ8nm0`ldMs!wd3C)mfV1(ms8b+H>h7~sg(l%1NGsd$&JWLeF5PnC*tB_alQW ziU<#D^*EKTpT|^W*--7%K~2ibaj~l^pX1!zI)#85XiP-BAfU0%$JPvv3Z@0>*|0n1 zr2v-TaM1rz5;kUH85~y5%QLLDr(~WIo_+MWcWel@JvGYY`~dG#t%U9x#43OAC}=7K zxdQWhz<3uM@rl$Wp{-9Udf0+Hd(XOo!y7&%vduBFf`QTHY@wd}@MjrRWXtofU+l;0 z6Pk%tqjT=g`tQ`hwwUm06IzHxFR&gWOtjHS$u9oWhFz;VGxYp|S=}9P7|NM?a?SoG z!8y&SPe+OilE+b82$<;1u_AwCTnfB>h@5S2+9Uq88|*O2jrQa=I8eh2v-_lKNy9(W`H~hgEcjf}W!{f%|A>Rn{?r^<;n4!uX7;APeQ? zdfUD>Jf>2lYK+#8_Q-sFmX`0aeG;`KFgcq~)GkxdyE+)__a>rDsO@p0FpP`UDM!ur z<@1+r*+T+4nk@{x{Ru`QlKm09Yvl)zZf5N_!<7p_Np*1U{hd7Nx?|ef&#i1BtP?0j zNjY3r;@v(c@;szWZFYY}4P+&)X0=lwPG-Rc7R2{2#2igBnkqj0Xi=_IBKKw{OYb_w zM=1u-BAD$8K1}da`_g265x0s^Ks=_6_$?ch7LL>UW#xpf3c|tYofh!^)E?R-+<2u) zi*Cr%5DM^%bL9TaZlxNYZ7KWWST@TBW8$uUaf-w^pgTmb?N*X&>=dyQ6t^qaaVPg4!RsSE?2loX+aCveX64UOy+j-1dzJ7QRX^rN zQHzoW2IC-U-g2s)E_*G|@h+D>?ao$Viv{qr zIg2hT#~pwCSVv_eTeCq=BEA=fuR9C2Sxr%KXLd4TFMD$j4*C;)LhrA+DyT>0DjdIRrq>NF&pB+N+j;8Rjo39e zvA@^0RW~Nh4-V|?;BhuouDp)z;M15-l9&ut7e#-=x;4Zjox^=8p0{-}Uy_?mi-a6I z<5^a7rdrr8xxkc)P=zK`CQ2?aOKuaXno~!ijebX8b338JWOMbuj+Mbns5C0@&7Ea9 z^d?WsI1bM=?&EvTLT!C{*fJywLNM280#o2dqWXRw3K-X+VC@KQrLv)2o;1zMy-?;1 zvgUt1&|hJRT&rPgkC(R(wiIF(17C6Qgd1TBaDKetu>_wA{nMTOY~~tk)kONm^F;sn zcuN(GW9moyxbdoR?F$`m1#%5C7mh@*=Ql#W$=M#4lV)O{_4y;FiEg`DVp+K_nYVHy} ze{@nUG_yas$n&Pdx)i?GWcc0dndN^gXd7>9#ycw+dNGVSaEC`p2}2s5qXoW37w%y? zvK<6PZ0}#_pPzR_eD+ellRZ^ngb`@84?fW>Dwy5{hgYyomrrT+u7JTG|28WaX$U~t z-?R<<93Bu|rQtkR^{8{}K!8GBb2>z@uvZ8*i&HoERRsO3sgi>BT2SHyq%MD0x{Y;@ z-^>qzWiFJ-8#vlMyG&h&i_R$c%?LQ9XW-|f8sFrY^L*sw>9;7VLl_6y_UW4T3;cQ~ zH;{W>MBDY;`g1PCm^1RM$>Fw+n)wY$o!3U4?xqLk^{$z7j#k1-0#roST1#6?fjhf#xqy(L_iJ2h-tDz{M_!1@TSc8i;Mg=kY zToD&)`Li3oOe79aT$7p3llB{_b4!S>S8?(ptqVbZ;3+J}pl?d2d`GrUAhX5WYA)50H1|0<0-OS#J zt`1w|t;(Jn-X75!n^4Zlz|Dr=^|l)!F`@qRAb8e>6z|c?v8+MNrR3Y)q#GEC2DKT4 zhXRQ6+|w(bcM7n){0V>I`O97;%P7LSN|Vs^m*Myojax=M7{8=*aBF+718t5E5_CTx zp9Y_mAGn0Z(pn9p2kN2VPftaE#ofl5G-2pxnk2~$yk8*oyg1E+t<={j%QAZ0Fm1c?yK z3Yj@>(PbpUh&Bl2FewXJFyL@N8xecwVm~ATQy$%flr)Ssl;PJ$bujf)lsyyTy>jMB zwCRU>1F2t#&Nt+>?iAHT{Q5;E+%ffmy)w5JX@|OiwJBgxaNB7EW3p~38s62?;`j_tQSyi086>2MKq`8ACWfZ9vY*Dv{i$6~g)?fTl{Z?0TOXRmox9gtDUcO3vrNpQNv8wI4a6$Q= z^1XjG0O$LqEa z3eH+>tRlZ7ha6!g&Jg1pc&VUZo2i5WZN`Gql#C=K)Sze3cW&M71l;)^ACjF47l(dh zMRm!5UTat`7T58mr7*%b7UNYKJD)U)J;Z-xkRN9G08M^+%juUhhWtQ}Y^$9_th;$5 z4%d$9*=(+7T#jOB+*h4m78LZI>w;a1#4L$LsAjr((r_w~l1rrYJhyr8M(8Uai{B)L z1PM&by_npNOn2=tEr|<>qL^)qB*GxW6&>+os+BphGVG$l3CubYb@417PeETI$=W~S~$H?=J8U}2-ZZk2SxS!%*>T-;#>1iPL*W@+3- zZ$mZX2It_S-DlIZ+z=5J6OYYmFUEiEDlE>3!7A8 zNj9OZl8SBY(rqh8>Gye^&l4UPJ%&E+UnJeAb(PAWEq)quj`r?i;WuI5D@;Bv#uP?T zYoo?F`}A`)G?G%@Gb@&ST`b5lqnINwBus}kGhNg=kn)Bl$h%BBT0xQ}-eiB#mRC^` z31)pI69$kM2^AHMR5x1CfGwW?t?h9z0~Fj~uRZt^B8y~ZUri8N13SALjr^z%rAnA zQnVB=l#EVJD*o_MutUIkP-B)`{()%SNoA4VRxQ7hqQA637in} z+*QuB*CC(Aekp!qrge*+GQOG!`mGsB%O)XN7HM^?JU3dxNW#_=;+=n0geI*zcb^mj z;JxXUk7KvE94=*-&1!>}#<3sK^fi~WLm5w+3s3HZtti6+i}m}WfR7V}))TtXUJUT< zmZ7bse7d~QMYdj$#kO=DPrB}XiluO+!D&z}o~TSzSr-bBhfjLDs3F7|&Y>W1;`_Rq z*S6q(*U(_D8moNu0FHk`>sf%8^VxhKl*FabWFOO*+$>p;vrKxx19yBLXCWJ#3vA%yrDNEs>OD+a$MzG}f zW+d;VAMW#Qa4_K3Z|j~4H6f)Uvd1A%T0LL0AmGS+>&9n}MGnOhm>E;B@xwQY*tawc z?Yxh|!-Jo8vzz?{k*(uGPEx2H0#wJq0q*)1hR0u+Fz96$Ie2tw*CN$d11nwHOg4^j z6hudV=GT{|m>+-BrRJ@g)}gDs+qiXzv^Ai_$SclePA{uSL5n*WSZec!V#A_<2=A&L z9c+R9&x-@Y-c@a^w7DWd9VH>}r%Gq1&kQ)U6Ljd?Ag@@)wlO0o z*-v^xbDeXj#Hg~8p9EOd#$O{jV`l6+uqxB%3l9AfO1pnT_PQhYZ>tbYb6GrBZm*26 z5+V`ay7~LoMvOP-3e+c#bD9@<_VC+(t``&JwpbL(y0evuNIA57d?C?8_#s6?@T9S; zt$$Py+NCzL-dBMOMOf$7f#38H>c@{drh%)mHwy9qKfV!sj`ANbv3nDm2QQYap(r5{ zFE6UgrwxC}v@sx|WKksQb`V;$dlzsw<#dj?p_DvJ@I;WA6>+Sm_?K+CMUvu0m7U7g(1EocX=>UIqK=ni4i*Ci%GyU>6KUS4+>uz6o z&fJ7DU`@@9@kUt4kZ)0BGa#fELZt0lhmGO#C!|bCM2p5ObPpm0J(GF6XxVnD>QHqQ76GPq@o$+E_YdZ*-#@aPpb)-yQ zp?-GVpW2NOMkiNVVm1nJyMYjVM;cz67%-eYJ73iJUIM7>G@LwJ)er7}Adv5D+%s2E z0hbC;lUchde^STjR+j*Co9M8%SpB0WP*5A>2qcm%ZncF@CksDK9F{Pq>1OEW8|Z(# zOT;^#x85#ArTzF#goky{QCIXr14?)t$*=_%g`U?FNP^y9j^R|=f)w3(ITs+moEnfK zZcKw0iO=6?L4$#%4o(bn{?0UyB6B|22(i)5>AwfqOBLVO&(_?G-2 z#MznDQmqT2ePzYeG7>}@b`-Fq*+O=vtbVj^3^NE?d@9mfKtRF~BOLKYbijXY_5C22 z7~-mPkE;~5mULebYUvIac$m5i&;%@n^kG(v%yR3Z` zIpJ=vDW964w6(S^kNEK)l+S5;E43KDwgkA>Ua)p)_N8Lkcv;Cv>Q!WvOuVihsP#Ih zL?TGdFv78T=r8EY{RB!=L%+WE(6gpELHK$v2mX@3%=c({LUrvIeQx4Q$g44D9C0IA`{b;!*(~w-#?` zTSg}ZAq}()u^VpKa71DbxL2!AIErZ2R2sG7C3lrJ@wa#BpO#ldi9IgFO^-0O7ksjWfz_M={3oNn540Q9_U~OD(U6 z0oAy*&df% zbS0o18=mMFb=ZII+?zq}++>UC5N3okJzh}Qc(`5n-_L1O|riaca*&9Y9{dj$6y*dSj*&O#;*f& zvBul!`iFn(`1|8#IGMGe*G=FM4%hjgjySrfnPc=-Uz0ZbOYIPk-7uTe zGjU0EOd$o+5qMJL9$T=DP<=&1_taxJuWA?ctYMu3eb#2lRRdF?c7@LujR%*!+{nw$8(}sh@BWpXdR%3Lj5S*Y0mgP zzc=@+`D)YCe9$CdKk}9p!P-gOsk)E zZ^hV;F$SUVCAgzI4P3WvB5(DiYm!?KcEd^Y<4|dG0J%xXF z;n7aRF-b0ZsCjE)7FaphuK|nG`tjN^7Lv4rnVr;z8ktrFRJMTBtCNM#aPoDkCUj5+ zZw=Tt=i9DnRnM8;T)o5k8R!+oBniLl+g{;{n-H2fzzTBkxDWqC_hRschYH~vD*Y6* zs{DDaK|)j^AR#4)_)D>0>A}!Fnu>odLzGR1n^Myh#xYX0zdzhhp{+HrX>|WL6I()x z_KQPg1Dkh}0w$(EL3@6jl%rr>3R1B~$^!aPsHMO4I2KP{_-+B&e5D9`xRIpsd62{G zz8~icMk{jBcgPeb&AsRQh(ITCLFM*gk9x;yZ}0zjJ1EhvGvow zIty44OPMBqBs+Bi3AVw^&+_uSD%cw7Y$=%5L94Wd23`w&_}mA?y2Sd+`krvd5%hai zYWwZiZ`d;%VB#L$cFDdt;9BZRWLTk%U>m`6QNBtuXayKau>LLcbMm=x&Z=&$ueo!n zm1bXqYNLjKlzb!CPG&G7dP;wK$7|WyZnbKKpC{bw*a1nN)Sa8eT5x9h1Z2^}3Z_Mc z?{ajNUx>t4kl)k<{c*D&iJt?85icETyME`scvXb7!kg30C-ZUg6QWb!VhP+5t)$sf z3ZqI>*W+l|1_R{KEF9Ratme|SdK239%tG9RE7iKSVc!%j8!pIXt^j|?r@(1NR-+T< zlWB?=D$nBagngrVkb&t@p;wj$Wp`?AS)oJ?Xc@c!ogpIqfC~9(02QSe12T8ar%qCh z&^bicAC_vkU+#LNU~35uTihs>gXF*;eusjYvpA&imKla?zp6oP*-lRx>{R42Q_vX7 zXH%UzoK(DgPvs5>STujxqmj#MV1-mYfZ8gFAS^t>(CA~xHJRlvfLX9xs*PBos#!K) z((o|}2cZ{X%sBd@1y~qC`$aoEFWK!x7NUKvXG~TO1s3v6&?yued``SsIx}vkL8D)* z=_0hBa4n$IBl5ah?`_w8H6v)s?B4!83Chh=ezpZzn8_OypE{r^{hnUY&;RPeDD!7YNIBuX|qxpr7cVMLDHA z;Dd9Wy|0vpNDf zH?xb-A0wCJ_W~0YF(5HHGBgS=Ol59obZ9alF)}tdIg`Lx6$CRmF*29&>jEg3V7LMV zf9Vn~j6-lI1e*{bxVyW%6Lf$91|0@>cXyZI!QDcDKyY^g1czV&f(N~1chByg^Z!-% z)>O@WPxsUIcK2J~P`_5yU=lNTFa=3F*gG?^F|+amB$Slo*jNFqtQ^d&tn8@N)S6&t zThM>xsMOjZs1w-1p8sDA2`C8Y{4A3Me>y)Cl^pB=@-DUjHVyzAH$NK>KPxMMot2gE zKST#8KR^=b3N{BQF$3fs>_JYb)DjL54=C8u%K16Ye;xs}W^@2HK0Y4CKgr;&!gP!Pe>bqR z6+j*21cJJP%mKek1}FpVK!26Sj7kmAv;sT*snBq+aCQSiL4aq0E!YfX@APcqVs8$D z0-mD-G~^TkDiDzUpJc^935Og?Bm>K~1T;X5!IhjGh5N9W5 zC$R1B8d-k3c|K+-dvgf~J3ElQvlHs?{3O9pklFLOd$9b~TpN1_H+!%DAPca)xyA1? z%v~TXTJ~T^7m%FfUz}$V>OV3|kTZabm6wNumkR)L1c2PltXO^r(DZ%K-U+EkMsds9sJ$R}jD%>H_ld`nTf05h@!Sz#MGm3@`;*g6&cN@%}6Z zS^SBg`ws=X1N2#+$Bzxb`up?uli~A(nLF6qdi+EGqs1($${JEC;tYS4{I^nE+`%2- z#l*o5U}EQD1+cMl@&b6Ce;<7Q+m9*`{8t|TvX!&9Z~**v_B-F_gZfX-u73>y?Oz*0 z09HV$zX$klXUY!GqYDDi{xj(YtX!;S&tGi+&-4C=$^YM&|Mv2Ko%H|BNZQ5L_76Sn zpM?L99%u))_4teNJi0E<&ugIM@VpH6|4Y>Y{kgkJAak&b-T!LkoPp2lAb)0W`8?80 zY@E!joPWx}PSRj^khv<@+05$CvH4T3^?TuL!S*0k2Pg3FE9TjXmGysg&s%0@^L&js zJu=6;SUZ=0oy0SS{6l|^4*^1*!9ZJcu*E;Qb3Mm_ zJgvQ}Ud`{l!U+}p*&i{hX4f%H(&jDQjb^gz3yZ;M57v}LV z_?)xnAMn2>&CCS~eSaRsKdy-9G5iny1MZaD@=TPiZ z<=J7!^<#YjCpOxFA3%}&;h-xrIOZjDdjw_G^46E|OY%y%cypLC<@}1+iuRu>RAV#?K`}ac2Y^83r;SgJ~3xMYjcZM{#Z35D|{*Gb9sugoRiR} zmx9^xqp^<7`dxL9Wf>+?7n^BkTef^T(A%WbDyG!bkM6UZUeJk|J`JmN@@c&;43Ec+ zC4VYjx)rfTOGp6?qMr{g4ES;bDsf*@jzv3PVk)tIyV%>VuKK zEDU#O+uMW(fXsC4Z??SKp1LcEkot?ftQ^_b+Se-q=FP90{RPZ93ko%hvA%NgGj83w z;=eIdh@)Sb7hv$5AVAiQuEF)humKPism-jp^$7zV`%Srb*ka^v+r|~JX+lImlYev9 z2}0oq7H!Rfr`8Jhu`^UQt+rRI)W#QfREF3Yd|OOkg7SBWY=DX*ey>)3rE5;8vUyDg z;Jw1P&yR?m%ava8GS&Pv+F^kdy7?o&$}2)~`j95PyBl>_H-~R)xMcnI`nYLLSR?>% zX}eJ~e{s;^SlumiW`iF!j64g}c7KA(a`qykeUFUv^GiaHyC1EXKEe56&bv#x1wrkU zJpN~n&cW*zw?5styHm+@wV}KS8tOB;DIP?)g4s@u?A9qNMjabL?by`a=y6&(?IG)4 z!m}|f`IR*vBh=5Ogqy0BL=Icwd_s8R+hgeBj~|9e#?kO2KS@*BBM`Lim2@UejSpsED2v zuXSkT)}zS(>l+9j5><2mi~Q7Lq|hJ((#lwwot2Z8_pvcy3x_ zs1oH(gmZ|wzkkrTa^=HNc7H=NFmU6F^ZZHZglr6&@zK>|xyH(f{^=%XtjEUMwS?mz zqmh?KSxULPeMcf#&uqjK!}}j?kA>Y5S9K2rH)Zu=YWoq~U2#9*`G5FtOEXbrQD&Lq zzou>Sw2@R(H+2?h7{J`OE^7UfV}rJ>Onk*zHG{XYb%C<7EDiM3x67s}Hc2)2dUYNS z?vu^d)yHY>h4mVr(%}s}n&|9_MA~z;_X6dciOGK01yB!G9^?5^~JYQFr|OP>r4BSYF+%LW|gC!1V5QG%zuKVyeB>X80j0IZ8go>&n2~7jTM9LD? zyBbPYbKsLXj3wa|Oq~9S>+l`)ou3@^3)XLRdUGTXcz^ezsLp1*&vIY4NJp*>k4CmW zzS>_>OcF5mLp4`Rm6xMxZcpvi8>C%)Noc3;xQBOLD6juA(br-g8=j9bwSv20lgOCu zws6MR4S@FX@B^s^BccdfoJbG~+WEZLY~PxPEp6bIB5d1)^T&J&_!F&o+~cFY7v01a zcB0etgnxJOn)rP2%TjG{#X2gMOiQWrpQEvAW%nVwFEN3#NaU0#2A)L^J=iSMGvvWi z*4l_(IcyQpPns=QvCrT=O3x_Rt_LbR}(_@~kW7?|*oDOwM~5>HD=+_3WNGb3YS;i($f0 z1vR*x*_v#>d^7oInz8TtYUfjsj4O`jKtX@4m|}Nt+rtYM)=fG@rc;UWqB6nEDXy zgn!ZdwIe2I^OhO9ic$+telDf|feF6yq2=fjb1$eY!1Gh;P8_rv5$j-mnyOg598D39 zB{Kdyf2%m*C18GafyQ5kBzJn8&4ruQ(8(kKHSr?FJF`8BwvLc9Z>^Me|5UvGfeFW^ z<6~QHf2vLK#>L%71@daUsBfaH#zkUpcYhbU-?h(lP_jj@BFTO(R6;y|o)UQ^!zXW3G* zQoGx{evruE_vhRHZamKP(Z|MDaZ2?2kIEj55gDN`Mio|z2Xr_N00Y95MT`$~t1B5ebR=Bz6jC zRSI=N3;7gof+#hD3jFGtDTS}hmV@3o8P*)wrg6t?mw|7cYg|394WXva`YCj z4;ed`l2v8x$4`1s=`2u(vlfmD?Mfwx*0d)xpRgOPLmP_u^JvLrg)2dOORA&a8fFD* zt``Ru-Us{G>16LS{cKX&5F7V&GI28XiO-Gx`q1mtDvEEMw0^{a zi4jT9yImO(Bb#a2e?-k&u-ojW0rePXqm+Pn4US((cywRVTX4o*28Fizt648tWoNZ=TnX+;Y zILW9>OMjaYrOSSuWDuj@eEU)V3Km{WC6Bf`)M?0~j+%Dm4l*veEKA8wgP6_)i9}O4 z@vV(8-MZj-E#x9~uC||?hC+KNDJaljUHfIY<#z3>+|Dm{Cw#Jk=CwPqM$1r{q%mcU zfk?A{_SyUP1t>0a=(jDNIf+;!3Gw`msJ&Wzp?`1C_$iarGyH5@$0}NO!*5*~${>;) zg}r3f2C^fO(rE}=>h(`FqnPwFOnd?y6IEZ0Cki2jZ%-mpzjhT!va)Cz7|tUKp$1g! zFR1hvqFLPMAsn4Bhnsp@?<*aH5S!@XO!A?C57%O7RY_XB{R4dt@$?WUbkbiKQpH!c zHh-n2qV{SG=c5AZ3DNesi4p7`6QMPP!C#ww$Up8W>@O;4YX-fk;C;0botpxY;_q}D z&dHr3lrqCbOUmo5>=lx`+>a=gA22x`O4g-QcRyK8+>eL<;{Jkbih0SZ> ziItnH`!bUQIG>XcVOlaZsrKZQt~NZPU^00LIa!p*ylY#!-sB0HaKGwDghNbl#=slr zwHYP{7wjPkn*K`3&TE53-O76z&Ok08gpq|Hv+U>R$&1aS0fo?n)>B2;TyBqvZlN@l zq(=dj{KI=viSXYH*Mq$8(l1PFHh;-8(9oR~!+59aSks2Xy(eZ4I#tN&)*L5yu%%O+ zU!ES4DW_6a>DVLvdW)l94K?SzW?jJ|wtfVSabgvBW2ZXEr& zLJRR@T=&|0ZWWX;Yw@KmUXc)y;O{$6941Nq;nr0zRdB zyV2punXF?~^@4#wZ(zUECnje398Cx%$Do)f&8~;&ryqoyGl48fNFi|DsSYexan4h( z(A?2d&Mz583FPh=;IZ`1@YUb4A5sra`AX~H%v+stvLnd>^;rpm_F1)1CEKzMc> zJ=CWK2goHGQNEe|B)ZUn|w1CZ$no^@u6dlPF4lVft&UwIqh&g_s+GLLut) zCjeF z(!H5#%@nZ_f-f315peR3J$(mpaNx3^NEB~hh4Rc6SIIEE>mJDykFHyb>^cx?MWLq| z4bbGN;Pv$ji+__oz24tto6^HeLC{Q5-}kB2O8%~;ia2TFptCflvfkx}UpRiA4qQQl#VZvJ z=9Tc+QhrHy!!*74fs07}rA0S>ifzmytc~B8=C+nJOeD}@0(l%knwdp}rGlo#Xb^~V zeaq@}t+S?%ib*Kx^eHE^iaV8iqWgE8pRqT(t;G42BbK}hGJp8S$E*#n1LhqrJWF(f zPDe+;`~yfj9Smm(X$lP;UH9{v2yWj$I5~!CR(4tiazmF6&J>eq_;vImzjS0I0Jbd4 zi<%V8g`*?F;1rOvFhuV-<_wNCl=*qz7ZSd;MA$D`L(vjhrQ4oWH>IAsTXKkQ@lW3q zj^xJJ`ZC~4mw*03B@wma!+@?E*BA@s$cDE~Mj0)Ln2P1)s(eMK3|i}Y68XU8=Uh@& zrAvo5R*)&ped;e~JFraZ`Lx2t^y9ZLrpt~7*}1~4I`&T5z2%s>Tt1tqsTN+(2hy4R z{E()mHqg9Jdyjn0nZ)%nrNO8)Xf-$xUumtzA)E|_OMiymL}W}|TB!_Uz1RP7Zq#xs z_5jjtv9tzf5B~_$$<@z>WnNj-mheO2%OS45BC1ELNS&nQ6(P zd?s%1QG&Rd7z-iweZRl$F!o9Rlz}g?Is*ZfYk#jps$_A-l4a-`%A-fXuY>$OAl|aK zeO?lsFk9;TTJjHt$i~0Ctz4rdx#}qiRGr_vJqz9GY>Qxql_`)qM$wR;&>2Y?Eq|qq zA%^g7a|#;rYjf-Mki(Bw!lNR}ydd2N>FHjkn=`t61S%sv%#Av4a2!DWL%$dT*OL&A ziht$7n1nr$*OR`IeFF5zU9^I1I2%Zw4LLV^t6?Aq@UCZEm~osYuvbLD@Vkksrj~uL z>B&pN8`*UqHczDE*fi{vmPS?p$2{_R&tZ=MGDd{fV`MMkd4Cmb5UqriEIJX$AV|SX zyJ9$b;TDAB8a%WVPfPV=mEs}3tpBwzv48As#$D$F4NQ-XuNr`7xzLZgTAg0lS^sbb zousg1cMVu-fEsJ`(u;mKW5Ht`97s~x<_$F;mkS|&%e#v18u|u~*J*fkPL+FgdX&cx z0CwU6T8oLtek!o7-$ftzG5HDTzMv)!OScyMDLzAxozMW3T|%^O$y;aR+FuOh?SHCS z;IPYo-9vGMZ1JO(X?nJs-^TI&vWtWHGVw6|q6R6o2By$2B2M?C&a3htIMLrzi&~KV z$@l$EosH_Tkg{iX7YD#_H5m~#{mcc>7rymir|AW*et%ER+UP5u~5c@Nt3s8f}BSSe4WtpS^y6Msi_;h~t# zZ73Q<;rJ}jEyf_ir+AJTsZhNiCNd~caeP4%ox?UtpC?;llQ1O!P?}g0Qw!&otqhA& zg5S}ejMGrFZmNlfe6{ai(dbHvW}94rw;1jyFJtcQhiNYlej#*l zj>q=+nQ%?*acI(|dmHiY%zsPE9<8S&0H=4RXbnLk$;)hL?hS{Rmc|SkdU3F0Sjied> zr!CR<$xoQ!jTRZYiGNY0wkD4l;b-ktHDC0uOW6gB63PgM`L`ocU$319*YS-JwCDKf zzESQbVunE zmJgipZO;6rPo?mby)s>nVnb}f<6%Z9t)mV!W#8+oknUwNKz~`j83rL9M?iHH=ctO# zj@XOfY|;fEYu{{+>`UBeDfkz4M-K1V`;f|}WgO2~AF}v03y~<<>|}z9AF-uPw%*+u zw3s?%Fwu$nH|S#B{u1{L?wcD@v*{uSIEtu*K#-SiO~NglQf``LS4ZDIvAfaUow18p2N8ulKZP3-u-O15;d*D+s6Y0y{slCr9ZMPuMKvAvu>@-=fZWK%{{7sA%UY^1|a>y>W z%kcOuVSk^m%OjTcu*D%gkFu5MmiImys5Nckt%^eo+epJmo@1~>MKGfuG&8;%_RaM8 zRiS#h`2YfToL?5M{FOEeCHo5uVvZ+&ddq>S@`nE)s=wIyn(FF{jSQ+kXv~8IhO6Qx3?xe(9gNQz|2>Vc9jcF%}BgOTK_s>nLh`ngB1hPPG1yaC-~>vAGt7;Sb3$NL>nv7 z5=8*%*IK8JXq&KaEJR(+N_bNHZhxAQjrzuGGwuW+VK8l<*V4Ww=1-N(OCq@AsZ@5b z71CKKSYgCx_xQNl!rg-JQ`~O)l6shM9v7(n=p6xM)VS;b%pg0SS3FR%iYdL+<{>c7ZJQn5FxF>=i)xqmyBtuB-B zh~ERgHZ!oHsN9kl=ceKx*=!=@38yy`Ec>F zE#N9DUZZI$HB430H1E&+?5UYJfnE21+qwmN88CdOq&&GNz=en=b)%VPR9T}qD}h$t zGp@cDmf4r+`*Zl6b&but(|@d7$Vb1S`?ka(b<^vp0cFWXOnOiExE7%gc67SvQgxsz z8CV`m2^hSZNFJK-fEJYtFNBo=#RAnZk>2aKT!cl{_9Aa}j^5d{)1LZE`5;DnSksi* zAuM&t*-jl^-I_1%8MOt85%0Ncu_rp|+pO?MX&t=0{E?f^ghp8GQGXC9UomygHr1$& z;4_4qb}1I5e&%T2>US9mZ6UEr7o|WhNcd`wsz_g{cL!ocU3gOu8p7kZWr8^^;Nk5K z1$Z!oeM;a^d`l!QQVKW8Vl#v_!!7N4_|a1-)qSICyRn)PM!~~eu-NV~+t)HEPlk-7 zxzT~ZKI9{s(ywnkP=62}Sy~63DUQ%3{04JoD=T&+UhMd6ANmJkPaqvz8Lnlzo6sA# zP5YJrO~Z{6Ln?;M(~I;V`{}MM&dRZ;^>-$>M$`SP5Jx$TxjV~^B75P94C@vCC7*%8 zPuIa#nN$hGYCD0b2O=bjt9oTz$iJ2 z)4U}AT#IyKsj?7e8Ix~xSjDLG>8`H-0P8@Gql9$){CgG-iIg7jmS_EB;5K1;zhe3% z14v3G@*@rk*9Vuj5k`C+126yi0lS;4ATFMhDZZDNze4I`5P+oECZ5tfHu^1bV;EL?6gc0<7$AETyF;IX^XC5PVm9 zb!477!3UKxS=5-n!g8*8Ir6=mxayN9ZPX+Y!lJ`+;O4eeMeLn9m`k!FF6a{I(wNjY zc(HlWw$%x%M+ex3+N=oTt%G$&Yimh9Ay`9^QiULCAAb-_bu9Q1`qJ|jZY1NoT9p#4 znywPjr#gD>mLBVhKf1GoyU6MZLawEn;e##n1?E|Ruwi#CcS1T`a|e`d?!)NQjW-F~ z8CuPn4N9EK$_6&qM<%G@{Y1hM;?T5d343LvrXM=9Rft4{Vam$xglzW?sU=Z0M03Q^ zL>Nt;>wga`rmCnkIjGb0pm=137sfpG!&zV<*<_**&hjqEPAWFHt0`Iw`2A!rjbE&4 zg)v3lj}2zX&whddO;H-E;xS4IazM25Y!hj?>^O-R3|^ePxhgQ9tf;bWx+;*!`8e{E zVP74U5E*&9s4GE%w@Eyj>86ciDvFCmAj(V(4S#uLQ_3WWas2>gc`+?YQhPsdJ)#(? zK^-LVe!?-)!!3Cl82euQiaPd8tZ&?h>$}0(p5P=y=&Nt%{sRdyDr#o4P-c=nVJ=ig zHnyc7X>qKwMUB(D_bXd3tFNKs4L@l3sGRgI%DaX-By~UVeOFxgm=qu5FQ%UR%HxIc z$A7R#nW9f(P*kVoI z;L~V+$9f@MjN40K@`LBsH-87y{z|3tyMJ9p*be#b>;=5e`(G$^CSPvw-BzUoG`|WA zwkF=_HG}Z*HRwW)XMWo7c8Ds~7mG&ZC8f$1-$Y9^27Sjb>Xos1^<;18UlI5=^|+RA z{N4@&Mk{ z&K}ymc&LxwuWS--<@sqVY{nF$*nbbNwE@AIifevgD>8YXpz;KA7G4F)3$U5y^kVjPJ@4iEiM{aE`66Un)syXoO$rL{CiNzB*yl zYOFo~N@Z|JC0VZob8g0WKKOvQtUCeJrK@(|PrG!X$005TU&vijEMe&)g@4B>4W=9JWdwJe3mN8h{ z^^GBvx=b$x{*I#4H3e`t%3Z!yPCr@D@ctnd4>fJ05+4H^FlZj~VcZ}wI>c%6HhiK5=EWFyIACN@@&%k{ON)0njld`2C3y0Pl-IgFdvelZL&DPXYQAvS>#%H=oOr);Cr0_J40|Ue2+V+VVDG zSxkS(e22k(Vpiil^Xp}Ykgwr*X4sPu_Gi=f^9Dk2_eUt*Ra3>JG@qhC+3pNdRUQp(l)EoVJ76{`l&Zy`i4P;InsD%|$3^%R#LN#e-XaB>Wc;*zi%V1mNYS@jBUNvOa#(WALz{%52cIl$UcQM#w~#=UzHxMF?|C z?sE-3r(yEzL4U?k4Jju?shIdm5-eLf4EESAUGd_BHCB~de+gn%eQ#!JG<2tvx==NC z=L9=(aJ7>K7c589S%8S#Ko6xK0|O!?%u$lr9J!Ckuz;jfGEdhCsY!8J&vq}j_8Pts zoenFoZhf2X?Zg>ND37jTn<9C*is^EKiI;5Ghx>%5CV%kKl`SZ}_8qQB&}(}|bM*!0 zPNP&`$d?rA#gAS3x}048Evx1N7%M>w?t1i=&YDWT*^a7#l}-yK>duHp2CT_Nm^pEF z1?Xb0C-6V`$}u&5&NtqT9{9ZcMl#93y~YVMvS;I%R{<-Z9*;Y4@DwEGQ>^nt`kor` z+t&ew{(o22&PGKHy^9~zt3Bn}%GNDE`kbs3v3BMeaO%j)HddmS1*Ha}Cgal;_HdT* z9R;E*qSG;(bYs~g^!IP;Z2QXj`NiX(Wzi>TXVj899cLWk2wh{rbgE7l|3ae7V3Cw{ z&x7#nF@Fh$IEJ5mkFI<4C}S3yad-8k7H5H-NPnFHo(8r?>j10fa%^%otVwnZlO}RI zw)q#6eptP~+B`!uy~Ok%A{?b$#QP3KPbtTaC1EeJAl$Pk_T(Pg3DG9+xK^4h_pML~ zqKZ1>;5YvUv_z)@oPAh}2Iu+NHoZla*l6tb6dAh}X|*mr!HyTNOfhV0kHF>0ww2gI zCV!BRa&_t-yy`GRMa|UR3rtFUtu2FGo~(oME6CekkEYkFoL|u7max&VBI{i|ok)5d z(~Z}!fvv0wtO6vu2oA;m{Pfj1QZ7g+miP}XJ^0MNs^hu6v><+%^!UEu4A%Y^d+99L zI~s9sSCBEM2~OM=6OTKBV3`mc8=AlvnTi?!i`J*oaKX0PQvHSSZ1+O<=<@oH(-F4^E=F8E>Va!yzrt$l5WjpmRP_ z_9QP1aoFyP*lcCJ#wd1nEpWZ+A)cdVxesO-45ukft1N))r|%$bw-nkvVfejSuYYvS zSJ}%8uSFiL!RUw-;nR8TCAPW+WwPVGMD($YiuH{m{M|$%CLEt0a|ogU8sq9Un95>~drvdX10(q!OwF=lIi~N; z4Rj}+D>G77tpOvl^Ddwr4&cZ8JW-;Dwp)W|a<$V(l*;D6B5z!5e44!=_L3TVf$Mxi(lL~fi39vuwO4i4 zhR6i!4^aMa>s4*olKgIr@+&{e#X&wjDzi-=j0+vr7I@@1xPJdOc_c#J!Xvh`Mz zS!;XpBJgr-B-VAsBVT7w!hcIMF1E>yzDb9BQf`7U?^h>gk@~AQI8jHiV-*yC45bKe zCo6E~h=#TIRu8|bG+Mv)xyePa8$ei%s}K+*$RlefWwxm!F{>ydJzK5r^+d-Lo*-xZ zlI6~PiAv{N#=>G5GtF{FWX}$M(SI~IrN-)eiOkM~ z>AGSkTWHLLyY06m}L}7BO8lm+GQ5kQ^a2py_dEUhrIZ z%Ih5iuiU}jl{UhA8AdzC`GDj4;uq@0xdc+GD*DGgD-YbHHSI}ntGf!ecx(GlVbt85 zL25a*i%5lx5ZdDh?|;q!8cKPWtJ-9U-oROjO7piN>XjoWDqAqf%jDrvCf?W zXju~Ggg~}1 zda_jG4T**FLw^;5kugbyY*cCO1WpQK_AF_yQ-lgJcqJb`CmH@q;E=N{Lhsy9X#Z** zl!wzOPk=c%oeZVsOJk2bWH221HFQ>12=n}|Kr#mH7>guhWIsxkMYhlJg1O>mz<}o9 zj||gOMEF+SAlY2%Jj~DNpSUmA`T3jrmD+22E6~|CF@Fxcd*e^Kcxr^|7g7LpK$}O4 z8+V*i%+sBY$q@1^*JKsV+dhCZ|>ue>+a2VaLw zRM-s{^K+d=!*Q*%l*wgJqDl|}pF~a7j*k?_dJ-~a`DL1$f<*KCgIy>mvaLnVu|Kv$7&1oz^T zA(*~zB|7Kf%1CcVlUUI2f~Yw-C{Ze@=v~~HT7U9ZppnetU6W+Q8;rCQDI#fWCh8~V zTpbo2Xs^uH*vYreC5Al)Ivn6i-mHIBwkfxf8NKl^ z-}yx_z7zaDXo7^4JWscTgkaS>oSsG9hyYw1l3HT7OpD(M55H%?KI|F}ux}O8?zfN& zJbx1iq*3M^Y;KBqyD4NIn#8V>L9*imE?~dv#XDsvmmm6^7Zzu}=S1O`tq@+(t%Mbg z-PpQf7M3i(@bju7h8G}tGlnWDn$GUa7b-j!h3uV)tUu4BYh-oYq855W1K}HrF(be z*_UE-tdRDV{o`sD#&#O=*mC44G?g{+ET4xE`b6-EX?#6!{}m)Pq5wWp9nssWxjA;7_ur}6vA%(_zOe=AsIyIYkx*Y z7{oXYFFRYU(8sOEAMc1}z2pci*H96H@%MXoMZj&w{BFB9U#e|Fa?FY`XymGW0$={z ze8G+IeO@h#`5FSqb zuZ_wJ6SVL%R>tf()`R7VBP+U2RzAbEsQ$=c!SYE|T&cyE?_+pWn-906FID9~in}3G z%KYfw$Khnxwh~JC%-6zO;jL|ImCk&(fBb&{QB?plmqq;oCbuaj0UI2bXafTj6EPq$ zHZd>?FHB`_XLM*XAUQBJlhN}Q1TZl$FqiS`0w{mB1yq~q7A}mGV#O&g!QEYoySqCC z2!sSkaCa{)UfjJvfkG)xu_DE_xD_cee%B`latGQzj@^gr&zp6IK)oP-e*t?C#LoVA6Luc1T>21@n+H%??yrzX6UIL_ z2Ou0Ez%4AqC(H)`x&eURwvJrC>GgknT!DW$d48K8I|%S|g}MUlADaLMfb4;fKNx;6 zYfm5m?(P8$@cXypzYzux55Nv&3kTQ$9Y7F_f7l<*K>I)O= zY6$#uYt?~vAP<-S^(w=yA2)wN8shM%W)2>HPHz4`?I4%}$Qx*<1%lf;{;8Qi?fSoW z4Ge++wV*K2@0ZJC7B~0*_#PL`*7@-T0(%tZpDt_I*7xW?ZY__$C1U57lx7Hao< z@puIU0oLyB);<`ISO16v0De4=8)^si{zKXTE=~v({+I%I>^T5n4|RXX_J~Dg!3qCS?{sVb=09-zQ!2g2c^+iq``IWG$P($Q7trXCU<}F@rnDTBnEj$dHFC<1aZJWI zAi-%b%=}j32n~NuzvdI@2@_7wo2HF&i1o7*Usliw?r52d8k!`&TtHbH+5%&Cjkhvq z)A>7Am!Ad&4omCCIc3z?ns9I$<^yL53VQKby==KLFIyCO(#5@V`-)F9IwC~%9RZiZ zFSKt3)zVLWtf;&w%AY3UaFBZ_JMZ90d**c~cqHh?uaAF%A`1ky$|=wc9OEdSZ$_P0 z;#0-UZjy>J%Fi*)N;8*52``rW)oR4P4(xk2jr#K~6`=?<4Eu#rt{tVDpUs98^(MY? za2~=4ojY(XSspF%ikhC)7c#?9{i$`{odXv_S1O?~7m>3Y1B+%l3SmSs5U41w6Gu4i>6mo*hXSOoh+FVS@jelJf>|W0_ntw{U1e{&OTAn%@ zSj{Q(9I9Mw-Hk3(ma>ZXy5{+LN?txQqi9v^OgDeO+S|*PkOQET!bdUnOX=>9g-40Q z*lQMVf$fF6iW~rzSsvL3e!5+ejhQBy!1T(LUAZ`A8?^hMPc1P8*W(T6YaKCT=m5pJM} zTPJ_D+-iwtHQw4tk*SDgpYVCn>Y|k7N^NKr7&a(a9JIBc^YqhrNg(03=~(rolYq|kwvMl5YGCL?iOd^1n(yv>qUvhTI`FiLs;XSUZ zN3T8u(&F>-pjH7X%P|@24Ax_mX+MAcq_)JYFno@I56ei3g^^V}-D>190{UGF+gTq=Wxb(SnS+#FRj_d=R&D<(o!dTWXg<#7Aysh*YDyp zjKc&eufWC4EyBH58Q*1j+6@8DC1RZysX-X`)WO!|m}pud%D#qD&L3R9ulCCLx?9HS z(&6n*L|s-{fK}~D=w^1EBRz5E4t-{#o>CtNK9l$-2TKJbUs0E>%aP05PP#Kc}i}22fFOP!E3=D%ZV8mm6RDoE6+LjK87rv#$&cVfG@^4^Zz97yN}r zAVd9z8)>od@Sty{jEsx-ZKwRyu^wN@qflIP^_EVg#z?0A3rz$td6Qj!G zdUs-hDPoLxW;d^y(bb>&E;;KmMS$R zV|>`+IFWBRI^{BLyDReS&hl-RQvJ~pZ%?=1dKZLxzQhJocqKLxz+JAYomXo{(z#S< zf}2fFGa?(f%g=Bb{B`vKmtsu;_u*FY?F6pIFW!AJ{n(Hskx=DV(=y+JDFp;i={9ex zSLjSu1Q=o?Am8b0hn`W8UJ#vpP%b*GQVeM;KDy7HiIi~eb&w>7+-$Krpk_SqcXv|Sa2F^NA@ zSn_pPmH4l7W4t^fd0fq6acK_vC-twGJ}<|2<7%1_m0x$rD9b+C3Jt3B_lg%@Z_v-0 z>dHSW){%NA#VL~)Q2wMOUa&AMB$RikNH1Koyzibol(hK=mibPSfyRLJ7Nhd?2(J#$ z+3h@L!s4=2c^7}`uuL8)?c8_SB+JljVu$=?581E*!z3d|rM}o|HO|8g20dH%KnmEP zscfdQ&In0!Y~v8qtkJyP7r`2)G>cP-IHcDXuXWbCJPhW%=}xmHd|cu_&So*LJ^ktZ z@oC<1TnfsoY^rlKpZrMY>!yx}X=iVxNg+PVxP$qanfHGd+yy3~uXM)%Pe8E07?#r( zt6ro#J@pnaGBlRUF5E?>iT?RPoH^tgIP3UHFd?Ssy<>BJ)0|AxtrY5W(y06$Ud{c_ zI?tJD_DEC-S?iW+sb1b?d`N+R8nXC?I*$NL+X#}j)zLCU~W ziYeC81TQD7X@X>Kr2|(zJMJw%T?#gK;2|iTdzeH$W7tB)9R^hmmKk{olF}01;y+ zm+b}dgt@zIG+HzrW8efHZa;-?_&$@-esS*W)^Dmvz4GdR$aBJz>)Y_3v%}HMzYy}Y z`KX;u$}!P1qF1u^3;65v#zB@ML}OHpK1I>6A+YrHP&yxL^ahfYw==sGlD~J?))H5K z_`<~0P}&@e=B&7ML=P#R(Ye8lLHrZZh)A%xQx88_#~J?y$2-LBRc^7_-W@KOZ7xic zyzNF(A;q|V3(4AW^hn7iEN8!<-VB^Oi!LN#TfurO2b3?N@<+G-RhN&b=!q>zV1^PN zHICh_FML4T-kUQ{<-+qb$alMVTX9`oIwh|HPr(6<;Q`e8kBtC-o+z{s%=qKB1Vzjrz-7A8&;xdW zGIfvT$m{!Qn_9tc6p}uwJHt67tlSQp2-Q!|v$ve9ZqCEb>7pXu<73<+!mrmyj(66q z8s_gVscr~hFPqBjIb*7NP$AzPZL5bL$_pW9@&XAa{E2k*sJ{aEn7T@v-}b71X)6tk zJS{?ha+tob&B@T-EpOa2ul0-{%&oafdPTQQo&WFOzTA@ za?2pN3MXnQWbJ@yv7glLH6GilX+uQWU1gZ4*cn3Ku%zZkUx6LMOI*!y7MK!A|1<4z zSEB8w_ZFAE&5$o@4KxTP1$HFez7*mqeAGREFXwHA!cIEAF<@iJ>YB#eLlyq|dhwsuU zR^p=Fv6z_mTF0|d@yh)<4vXXxCBbob_*?+__vTh8 zbof2e7HyVQ&(b-FcNM;0w+O6b@DFlQ3NNPhc@13PW`8X(VOWNB$vJ#>tv`};lb9VP zo?wPus>;9H_gVRr5YfOaNxujsFtExfmiXa^FirObUqWwj*X7%yI1yP7hMquwjo?p% zP0ZT6w7xVq_UjiLB`tWcAh|B(4${dS09|`Y>JKiw%7vjRlS0^xEQa0lpL8wP-cxyG zE9&E$9m$+wV$I2Hf#}Z9aD8fhw>5je;C%V&`Hp*&$Nt)6hC^Z8Qfp1MB<8c4DnKff zUccw5Vv7pRa;`dZ*JZ-avtsOjGUBzepB_vfzqnN1B5pe%88=dJ?sI?$ zUSdDOsBybA6t38C<%57EwYMZGcl*O2uqcO=0b1);e3Zsd3>#W`Go_t&vpp{5*)b4D z?@BZMmRL7b7MQSO_6NATBa$_><1 zBvRd2<2Bqh97n&o+=wxT&QtH#=3$<%S;bR;`m%0PeesNYo3fm@Oc2B3FtSqv2{Ynb zZfiOO@?5Ow&REi;0CVqOp`JSS%`EUD+#;CTm)+vqWm#BGf~BEU5MA%?`vM`5W?Dz* zkWtyfS_+)e4>i~ZG+Eex+G-3j=yrSZA#@~vjm9X9G|?1#IQpc>>zCybfVN6%ZEJ$S zd;%w5g+D)Pf6`r7{@v&^HiR1X_xRjtqaxL%X>x}53iY&+QL+!CQlO(uAJ z9b0UA(vKAr9F0>0$YBVf3fCR9J>*_*RV*yr;ar^B5&Qb$@+f7$PWS@mbI{qubY^0X zEA8DdTbyfWpSAdi?-@5NUy}uysur^v<1Zg7ZGNP(taT>tYG*)yQ-=iV&o}jha)d&6HXm?@ zqgltK70da1c-&vPyxe=hIvmY@VKx3WOj-O4m(}3y3+7?r!YewqE4FPPp*=~6!5^?Lzi3s$GWY^8&1{a7AU1PE0hR|amK7gB?jZc|p0L!}hCbu|-g zl0wO|%^O{Re&J^f&1ZeU!v|CY}WfG9T5j71M=1d8<0< ztOblPzKsp=FNWuyi(J`he3s(NG7~X`=O$*>&g!XM;su>Bh#qbcO=gkI7mZIFA&dOP z<1kP3W3;^9;UTjT3h-r&tfJ#Lw1|Tf$B?CUEH6lM(Yd43f@2RV$U3$ZY?!XrB_NudWyVgr6 zi?4M+q(so-x9|*S#pC%vxeS5M9|F@*2_z|VY2^+V%gLtXYV_mYBZ}JMN|oZeQ0Vtq zizlCdlU$m|BB`Kp9dY8W$EYDHhEgpxBM1zA>C4Nx&InLK5535(rKyBqa+IIpprvP3 z@?3+Bu^+a7*6=$)wxhK>;l1tinhL)p=mhb!^raDLjTZK^K8)N(FLB9OTz4}gC&s5r zVMFNYVkdEkkCnPtmUoL&xY0HnTkX4N-PvbB%gPVm|4>;ioFDhDnyk%Kfn8?N zl%4MWVjibVoz9ThSag7yUw#p$v=Yn0e>(k^$N=HRhvh^^=lY18XZ(;F|>e`iTg6mP(z}XPq?Zf=~Lqntl{SZ2X`m&zj~-!)s?^5~PKF?r_-) zqg1wf!EMXnFz$U5W`9EbnwQyu=MeWEWk;Kl_&FWkeWq))W_;5bvZt|Bz7pxfw9V_F z+nH!Z)5~M}iA*y!fuX`Q!Y?5*8G*iKm?$5GcZc})v&zwAex39Xx zSY8q};PW5V{lK2W9*=7y#RU4#P=NY6$-!10cwt;|J1Hp8Ru2iw`35~C77JaJ2@a|V zh*!WJJ7%5nNVi0LHtG14JYwz#$k0-NVCYRM8Hu&( zs9t#`*%|#DT@*r83n$9{5g?>L{RGn(*&4;=TkxkBNUz51PYpNddWi@U_u&0bjK1Iq zv>H!X?^C!cMSPt zZ&u?heALV1a{Br0p1$SMuJwee!qWW1+_R&g%E)7$6oH39l58`H=cQ8@j&*c9JQE5d z31+!g(r=wn2XrNWojxdSq|J-6={}Qd7By#6D$(l`ASUdIvw!~D%pg(JY{=p5Pwv6v znu-lTit=PVJOJZUBUJ8_GtMdOL4s}iGZ9s<-29#J(v84sKq`1W{xDRRUFx{djI;Z~ zD1T*na9?z9ObkCdvuPA_C4dgyH(kt5^2P3+yO9h|R$;$?mPaNgZ|@qJ-3@hLMgI0i zO>a@5-g~qjGn94P+WNEdFEnMv>GXK+1kG9;HNGrGfnTCtyhgppKu%lxc*JaN#w8%C zhjV1L!Mjmt0<-VvzP*SQ$fj%G*@-SlN}(a%LSfCZdylCUBYzYi!XH@aOgF9Q-)Nbn z&@k5NN@#_Do2Ad|@w|v~CV{k*>1TGGH5gXyf`uoM^Ez1BIrFs)P|ZagBOS3T;dn$G z3$OO9rhDjz3JxMO%1!YKXL2AiT#yiqzj z#v?-5MBe5t`EeH`ThRntxA2#*1|{FB^_|Cq>%I?vo%bJ)#bxpiifUuF%>}PbXBzrB zs8Qo1#`o{6sG*PNRt0#-eoea)2%uFxJ?yi=6B3*1Rt+h&@Hsp>d^Z_)@E&9FEZ@pb zOoK@QQ~8Xmn34X0OkJG$5c`mLEZ*`{D%J4kVEwIl)yc86cI{9*HjtWR-0>+ zGp%y!o}y$sZ?N6an^_Ezm-h5&HZg{dJY=gsU6k-o=4HMZK6}YUqHrA{#O`p0>+WT% z2YuU1qBZVKYe{*0f^011rb%dbnmCTNkjn&bJg>dYHL&*sgU}@Nz*}%(;w8;drQgxr5gN(qYUOR5ghxCd_{} z5QVcfI=)9dx2}9c4B3fn&;U$wkC~{TCEMfYJE?2#1;RSzIN()>KTAS%qRutkii<+4 zaJh&RGI;0K{U&0XWA58K3EnKkcppoDI6LGGkh|G7fBqN|juDVMh7Tofn>bJ^y=yV( zLQS#yXhhM=zOtRlF`Y43wmFa@Y}6sJVdg^$+dnjU{Hut)!P0Spf@y~*O%;Xf`&I4P zn^8;JuKO+xhFA8Q?Mu*&NqyB~TPMi+Sm^g*+E(VnbhZ`-NVyng8Za(3$AdAK9{ zz<11_o;}^6yZ>1Lt?wCbMg59@B0p!T`^*?H`$O9&-|mft{^zPzO4WkJbubRX=w<5!yB1x1un+Kt(gmbw-`pUMZD1OId7^Q4u+fpw(t6NkgpPTKKkP%-+)3)bzTCnlB*XjB5!HpH zEP&PB=!gKTO6Lw@7wxwt^ItE<4`xCm%Cv7F4&1XUU%<_FCT84rEADe=cP_rxnr0U?iI znW=YBHqe$-ggVUKav?#y9-fOuHnU@7;T%$z>lHsg$vd3fLZD%cX4*H>0WtmnHl@9m zWNTc&BPqw>phRooWvUEpm*|N?7TG8OhTQTy)p>uNWy;Z1pbdU)Oux~3W+peb(C#4V zGeX%zzI#I;N`Yj5LW^Ig5$97*o$}nnI_@g+Yn@=}wM~yf%_yIABS8E)^6e|SW=96_ z(7CsE{xld)kyx;5mXqpczB+B~L+TzMjyzwEv(M!$x!=V`EnJw(O=o|FUU!Pst4^Rg z1|vt56M#J#CeZ_QsBtUn&4joq!WvPnmU{|g?kBV|MwIg8?l+JV6uMfvGBbp+QMJ+HXp7qrP_`$WiXsQ3GcU|ueZ*DUEN5m8d) z+}j%HLtOiRHZoJ&n<>pq#x#vaZ)UbrSiJq4j|ACxf=-k1<3?M;`BbXMHEk3& zuduWIePlIyey00RZ77EVogH|!q%EtwYMH?tXzc4Hs5VcgTy7f<#jPMJjL3(Gwkvid zTYRF~2fN!WYOIqO!ht8Mw0Wp;1_5onx3MAkupwT5ed_6GB~*~7#Qj3yz4~x0@V{BCG2i0W9cl7i{N^gD|^^V~gmME9BrVt8rZsJ+m@0-et zie_ewR-!;VOdj`TZ{^lu58Y$Duoa&PF@QHjEj? z3L%Us)9yd%w}WIU)#8w(m4?*jFpdDx5L?|Nz{jQu5S&CSCizw0wb~on(Eu4~u8HJr z;+^EffvfsGxiz!`q?8Cx0?+RpV^I?$3_zZLV*3Mh{}^>qq6G=xTKs>bIDf!iaP zrr2C&BIXH&@vPC%Dgp*@@NuBufR0~_w{@QRa^rzMmbLmOd55Nk@Ln?};w?}OItzK7 z!_7#vTz~X*sZD3;N!2Shmz<4Za>+p-w;hh%08g_%zb+z8GI67VwBmP13a}Lfnr2LY zC(E>Ru7)MTZBQ^$m8mhx0a1_K)%pPKrsLO@@4#iJNWcYZeS(tr3w1| z6uUuyIE;t;T-^?$qR8flsEF4oHPr2*2w#>|MzD z5-DO1p2z2?;#DzUi|U|=I4r4K18ci2(0+l4{zPvz8cS4BNuykTX zZJGiojNi+aI+T_YhAR9U!>kO~pU!98aM~=Qy|+9@U$xC|%6b@?8Berlxo75+bo(~F zT@FUQK&JD(Yi`S*^H~@h5Ga5LpfrlhmWI0$S>Da3^red9ufV^(Ll?b&Kt|sYkzp%{ z{|X+izSmW0OgxiGLP8311USqKCS9+;Os>E~o}Q{ED6=tVwY+a;USuFfgr4r#*RbNN zZYD>DU!uSlvD@XR5kn=cIQFLbZVmcGqWL3o+bRVjBvTF-k{XN=(R80j!8&)LS^yYE+91%1hFG*!Fg5kc6)+%^=Wq5GZcS}HLsyaZJ67s}!AF*Kc+iR=1?u5)EC z2d|=df7^PLAa^K|L}{e}@LO55?A5cm*3gr$*NTO#7o`dWzubv`HG(S?xt_gemh$2t zoD+nHrKVX7W17>v8*3E1YnNqmn)>K8=-+_fz9JLO$&tSCEyvuVh(@wu%x8haP1Wy< zP*1&pLVDx!?yV(rRAQMt<=p=1Oi2!!{I+;a`Fn(_ho||v*P9+*pj;uDC%1F0DdPei zgZv}d-@bON_d6SZHe=0lJz$<3j$u-3=M%kF{0NuAbn+^G-MK4M)umDVDHS(U@r{tI zQ1CLwa>qdjl9zH2XqnepWGH66MeGGOF#D%CfQ9ubPAz4wvwTlu$2Xu|!_hW9^X1Fj z*wph7)}EnxnZ<&jQ{T5sVbb2U#4$dz^_BM}McIfgAv&IaPYlaFqF*?FRAO9x&Q87O zmGw;xx=v!_0_1!(w7}G|w{k}{eW4gLvw`aDhx3h*u>h1F{C-ob==7X7F~5$+>Y*>}i|wa@%-tBw8-?C7Lemy!tsCKWLtGBz?Z3NK7$ZfA68G9WTCGB7cdz*rOo zGBY+fIG4d`0V#h2bR7En1`5Y)8e0?Fwrw}&M2&5$VPiXKY};&Xr*RrLjT_wAd!KXK z{r|qT?p<9go#(~#`Zq&CqO8UsVrFjwl(e^VVPIio<^_l;sIo8vn3>ranVDG;C@9pe zTx@{<5hGA&0-c<#?Cp5}Fc5PB8oPjG;>Io@I|X|?fUJ|mmJ@%kp}i9?K-}2P$_${u z2#~e613Dv6h}k=MI$2p*x`4v`_alJXlm@`U!^1`Yw>v<@7U*PUYHSBkFm|y7+JYjQ z8ruNW>`kqJE}s9Qpys!9adF^fVsdwPXEe5TX0&&*5Tv08xLdhc0#t#{Kqoh#8Q`yi z0gA@9z<(-ZM4*2Fs9Rb&|07qkH+OM2b^-!G0vjt+pq(?w!`03V=mY=-2dK%&1C$(q zcK;a5|6@Q8_)l*DEQ~Dwqx+BdUqn`Re>)qSn%dhs7~6ST*;xS0t!#h*B}sWk7Y`SD zfU%v~Uxvmu&h{XGV>e?f8)FlY!QYu110+RM0LGvK|5JaSv#FDngNrkxvz5(XB{Ka* z1M0Gbotc=utu4^b#TntR{KT!CfTp0fdoukq*^hSi?sne)0p?bAX6AntVdm<EgLaPv!2H+0|9#R2t(Td-osH*j^S|fIq$Z}Nt)N8rPsRV!iHh2L0K6I4nE?!} z9LxZgzm|*(^uhPvG|I+S|4HKyUl}`ddjQWr*@A!C^xur#{<8qo|2YmCz`wZ^?Lk`$ z1W^B8ay@1aW>e4~mjBPI{4J zT2~j)0Vvpm&cN>fnrZ?6Ia&pvnU$;U|JBO47=sQ$#LmLze{HmKmbCH!nkiekm|Fg` zE&qSWHU7FX8!J1Yvc0p_U(X7F0W_NbqXV6m=||Ah;S5^Izg0lc<@`IOgq^9q*zVh1qE z{zjl&Mp_2$YNBZv@Ik>3@hDl#B9j1d6Wu8-b#${YIeZ>c0^vy2ft= zil_BI!~;UczY!?9$!`Rz*2Kx!^dk`T{bBC%Th8`B`9C-CKLsdV)87b`gsGL2sjGjj zxeaJk{}pq9Vwl?7fY#!_6866gK@Z;VJpS4jCbK^vC==js22lTi{|d~)3Zekoni)G= z{viXU3EHYZWt@NUIJ$yv@i#T7jpn~0$iVy$$o?0!`hydMe?tzozo6Ui%vk;s{3hr4 z%iP}8>5ph21B*W(i2rwX?4UVWdOCkt0`2~=0LlJ{&kQQv`VR=2-p4;6sI`BV1{#O$ zAEkkM`kR>p@|5#E`gIwJ0 z|8M{`-1QF#nw8rh5R`}eAA1J!{v#MGh~D!L2x^Yk?^c4Cyns&sg!sM7Jv=h-k`b@reGVPytuc)I9Rq+y5< zo`6AJ_|WIY(ML1zBV-$Rk1R!=qbv7&p{1_oGW|xr~I9RS8i_{D9w0`6%WW3O<(&+fiQK&+)e-_0sdE68@DjFO* z$a80Qyn9zsA!>hs`Q2Xg@v6!_LUb&4N1ZDq|5LYWKyI(IQo58#6vUVNy~P1|6S8x4 zQ8yCXmN;ZBb%Ce7$=)x|?)2p{;uKWHs|rJM-}%FRR`plJiwAIP1B9_Y-L?d<)^{mA zP=me8LfMR^$U0nyBs1(9Ytj7iiYJP%rv6Ys=JgG1V0nLTa*yQe>>jzdO_g2=`(P`8 zk0UxA(k7mgWO*+jP#9? zR7RDxC0|U3@wSwhW4-H@E&N0r*D6r$tXIEVzN_UvM%Ldlmp&eFrPW= z5Xb^GX9i|^PZyV@7x5E+MlqF*zn5ILa3_`INQ!@R|DhH^?o;y?Xs^OQbu^WVh&XHH z*UXc7=oQ%=*(PK-E%Xu3| zi0Oz*<#Zts5qhpuzmJro3L9WmVxHGbt>%A}Q6?w1`Sty&vXvnb`A{;{b};Iv?p=w8o#c6Dih5$LnMHq7 zYf5)Z)567CtRBS2+>RvjW^>hh`1YrM`z)GF(W9aQ!gV)K=OoMtecJiZMrCwC0O%$i8MuM)I{Z(4*AQmE;!K3#d1Unx9_uU_^Q3X_99Y~wXc7CfVPu_ zNg#!b0!sr6;r3Qtu}?tl8&t=p-Z#{`f-n(z^_TOpS3opGUz$(VLfw8Pi0?x3+*de$ z;|!?Ct25}jH+IP(h7(p|In8Iv29x|joYc(bNko>uXNs(#uskC*r1P?=3u#;V*6uYO zE$I&fk7iT;SV7t^D_9MLTG4+Ljnfh(@IBI``3$w8Ho9(wOP_xkxK(ngiiXvSRovAf z88ZS|-ld$)c-$oqH5=gZ0QCjOP-K;!|s)E7p(CA<;&3Hr{w}_du2VrO$@K=GdHUc+%U-#%{A-xEg0d@K2#lM(apkoo1%Dkl!6o&54nuI)hlJ9$chF2j-3ssCwRCle4M0G(>1>w z{K2X6WRX&=hzQQOTUet1)|^cN}qiuK7g+;`*syzFhgUB?aE_e5r~IlNgzH^zlk_RnodIGw_m|W$K{|`f~V~w*E2=*N{ z+j$<4qs(c}L8wckxM*4|k{;6+3&*M30E<`K_?RXSP0!n=HPqQ`QhhQnKb+JO2e<1! zq-?^l`1HG#p;AUCQJzoan0Bq&VpU=+PlGPyX2N9mrQCmDGanVh7oy~9!Sm+%3VTl$ z5^Vw{pQvFFSE3bvMt%Y3`?gbT_FCEh>l{3x3gvm5wlk7{_)C8B-Vk~SdO4(X?-w5a zCaE|iF$tqk&F=-4-@3*IDKJ$MrzDH*mAeLaXHkRw$;&@?k1uUEc2Y{#5nVW zgHsvpRS|z7ojI*(J@P6h6`zed&)<$DwGa!#m3>`jG;xTzEJRnv2l8Zh*sWm_=iKf5F^u@@tJX)m=K4L6MPbIk@Uy`o2!5$M}lw?go) zIO={yJ6!qc24PAPTtlMZ?B{Fr)x2DA?;^5vG*x|*Ah?c-@D#Gl>NgjP!u_|DtX|zx z8m>Xg?&mzqDZA`AHY9C&hd|l=xby9meI|y9uy?%Y5+WRlm>6-C zH?}Dpqn5u;^VucQAv3le;x`kAPzz_}G&6s4hFQJ4nyH0MN_l>V9w@X{WE=E%K5c%P zjoimijAMf-&2;8dBVL}RZo$MmhV`Oe)#Ks0VK=NoZVR1oFc2p{J8zf62R?us7m{$} zE*9A$q^yVISh%l}z#_msa2-g(YYTg->HGZ%&4oy>dbF_@UHV>`2v3}n?MA}=VhGX^T^Wnpe zv>xevg)YnkOUhLGxhaR@15dewAS;(_hv>`CCTAwdi^ygR>YFkTOcna~E`qw%yWEqB zQqDuIfxN`30B z$u1=-RS4Q}3(LSTbln0Yp~)`?YdDTC#)znP=Dbu+G<@rd6FAu1w?SMJ--;lZbZpb3 z;t(H(S5e?UPtzOLoc-8Te9aWY2djol_0FK}mUrI;O192g_yohFq9Isk-0 zUBwY1wrnKnqdHaFRSpVY4*!2=M|``Leb+!28+kF7#1Df2j!C>!1jqR0LC3k`K%xDp z87~$wHM(AcLS>c#KO*25gc|E4B3p%Qio)7>NU{y}kNGBYIHGpon92c@t%D+m92dCO z3oz1$W?+3~%Q#XxrRtkb+k6eXYmA0(&(Pq}z)dL(h6Z4kF<@bt!g_LqM7sMjN=f<+Zfr7^*zmDAitjkQe(Kskepj~DE&qLep#BCK z0{JRzIr2J{n59r4M>>Cq8qN!0$NAUVz8}JgRXEx38OD{30Sp-FBL1e4Vc%`+wZIz{ zsITK-oWNR2$ku<2mS^m=y{*@c*nDgt+z6|U+Nor0@?QME)sY-DKIh-gEBB9|c_$UX zNYtcV3QRc|9~&SBu2`NbeS|d1Zn?xk2u9owE5e*%iUu*VJ)q^mSghQt041b+vyXP$}>`p`>Q_tK$p|mSCmp z@wY(+Dc*>kAA?@OIiZ=-I(igw8s}~+y%HhC9ZF9YDYLcatXL0sDtWqWyT-K_uVbV5}TERb$1~= zqVOF@f(t#NWT;c#I;~MSreJqK3$>Y7mchNPb`#-yPXvffXy;SP(PF)@i zP8WX-WwG>JH`(~F0(QoVgdy;JpeoOZF_$(XjvF(E4c0jEFPL&XXMY(PU*)5H z8AXcJt(l5MF`Db1kjN?QcgO34J~Jl5f0yrdXmu@b9DV5If~`l~=fn;S^0Snqg})##<%|RY zMvbKu{YEJT7n?m}&gDYwZeKfw4fLKr(I#Lny{L@ulq#B-htjQgc5j8`*ptG?td?lN zcY4kKv^cStG~SQ>?Aj=qH=E8sfd1jhbF;O)at7jwwi9C1;_i)I=mV>M|7Z46>5PBL zg3RUX41>NIM|q%qeO8*r`A@%h_r(bbGhBjaG{Z$d)1~b`=RmZVR*7(te)kp+Q{`u3 zb$L-38o7CNKKK&w>m!fMhnocR!m_Mc$lbT;mtS<~t6x4yoRy@Yj540=ko3+BkkZPo zt8u;WUDGD2fg?DEzO-IPBBY#K6*+&FeMeVu7}3+#0f)ARCUBdgn14Xd=~l0Xr>>3q ziEJIGT0ZrSeX8W*NGKC*n(FTCe&Eqx65C8uN`8r+?g+~nvr_7{=$ipkYnfx?0MytW zxMlPZa^>Tr4pF67hF~WiC#nE(y}=+PY1akLH$!9{ROyFr9)lyO+6rP5J>g*^iJM z_T4DDNBJ|7d?@sal%-VYR%MZTb&4u|GS|`zlQ%QOy+Z1|=fW$Jm)J*&Z-}sJANn?# z>-Z~aIxN3wEx`nKv75I^inmzCtuwAPs6)^gs6o#%5QW;g`@Ya4M(BSiwn|{mh=JeK z+#_lu#;8IAo4ooL?ylH6=kySoS6t3tU$u8QjN-5*{R}fb`eK41HFA8Ss6He#jf96t z2_tJPp>WC|>Jg`h9BteQKJ$)g8vcS96I}elLo37Vi#6Y*N9w(T33th+vF0`WW6X75 zGRqutVznsrR(ZR0oJN1*a|AbX(6dHy){{F;^_2yBSFF)?~$PH5-@_mavW^ zh{ai*&h|(QZNdo%a*$G7aeJgyJ}NWe5QpVY2LPRGFK3_7Am744`Nc*x^vGh~0Q2%i z+s=}H5w^>?r7JZ=)_$A#2vzC>_XW1;hjRq{DDuQb))3bjyoPg&?WFMHXF5T8F zv%{GpM^3MinAN?r)vve{vTptKa>PF1@Yju@)5)4!pFd|Iq&;VZ<+_7L3H03K7GLprcDnAKo$tp2@obKk(EOlt@ZW}Uj8 zmK+f64paGXOoM+J8J)NnYJj0g;#4)D?N!WQ97c)ll*%V!CL@M##1s+ei@;zF0O$15 z`)YHIJn<5lCC83OI~gd)fV;e@RjhWP95q=jQZ7XmJcu>8@r2zlGdCe|$+|Klt<2Sj zT|;!Py{|RKP%k-#CZQ0&te-I|`e`?p91TqW2P*}?O51KTK~ck zvb7O!vo8+rvmu0FR!>$Z#P)DJPKlEm-gaJJeL2Xt;_E7=#lXen`)Gnx(WRN)De94)6Fix}WlV;{*OR&R*4@KLyIOe}?VFhL)x(Y0#z zA?dcF=L3I`PTzf;k`^U1nP)~I_LF)7G7^8A0=089#gl=_~qb!!oWk&Q~UGPhO_ zA&kg~TXahrgiZtPL|0eS7uM9;3-s#YBQb3t57g`lezs1>>kav;RuiQ=Ds@mxpm212 z=Q`MX*_K<+Zeh6sI}ZAu>^#a1uLXeIM0+mM{oP|s+2sDFsHnr0bBy3=n*k5myH7~T z>eGMOJrgNSn0l^hOUtMjv&K8DgZOG1d=M?*z9a4-DYGRgNEz|^v~ee1tn6i`_je=m z?BqXK*Cp#d;n`Y)4=8`r<)SiEv#37IAcP@|ZU!Y&Mmq(rnDBJHE1$}b{ zTYz2BU4vCeluH|SS5HmAE_Uzsqw~kmLOku+`8?DUsMGtElBh1LLQdMHd<(H2%{Oaq z7UMoH^DhVbb$U`Mg^&UO6QD4=G$hH3Kf33y?Ra~ zdx$YwrxE3azRLSxdLm5>U2qD1bJZgyuc6iw?c9I7z80yV z^jS47K~$Kd<8EdwV47=n`gm(rxkq!ZQ{hAV%TVaeT$fL4A1UT1dZBl?0j&<04I8hT z=Z?EK)Mn4YThy&Cx3BD}+VG6~YiH@bS;lq68=BCsQI)98GPpssS%;h~%uqUZ0M_h4 z;0_7Ny>e>pL0p5F@T7PDFJ6BMIN=1vg>(P12V#_;4y| zh&fJpvVcf=E$oI#Vp~JN7v#PR8WdNzlz|^?to3)&Jw5r_wSJ3ZVrmC)i5}Cl(fX{~ zTU_@C`hAKcd(pkE5p1*;X&e@r@-mPmuj75VL>FqB1Ui#i6I{nExhH?=$8xhGD<4G) zN%iBx6g`Q)*k+Bx&oV#0GVvv1Jqua94uWfmNw-5ro#6kVXoNdp=Wjl0<8ziL_#$MY zCPxC^n*I%hlwb2ULV6Ktq_%%xsVPs8h-#vtUwKwFUPVe1McpbCW3_b6C`*}82>n&?qP4j+ zXA5*P`gyMbA$#+rp zvFi8z1V&XO+W49|UKh@`U-fe5r&>)$^0MKqXiQA7?`~d|w&e+sBHPvp6u13xgVb_6 zR`d?OIJK*N8-F$z`lPBEmWa)o1Y+}IWl3G zYk8r3>{Pb(TKIp?(Ij%arcNeqYYGMXa`^&PE88HMt-M{L!o-DBpp7^?vyzGqoWkxsQIbeBRxO8iU|X@g3?We9D1DEU@3GG}+^gZhIUQUHg=% z$tv)%dD4GPzSRs;MSc8(~mcOo@Ha6VUy(b;nqNsXbW;f z%hi5XL9km6a?AWAG6c>`L=ARv5GK8=(HC9_!RJop zkE(yeuGS)rMFJG;SSD*C5lW8(M_lWjx&0)1auZ${8n`!IfMA10Mp;xwy}t}(76is- z)pcTSdcyQdJPo!*R=f}EB&puPH3GC*D#&rJtj<+wxJVAn6JRkmid2)d!!56ZOK;jm zVPqz}=EEB|ghkCq7$QtbN%Xh_V_^-`o27pX;xW3LuVkQRDwm zHzIJ{6^*W$)2@TIRstIOC?&Jfnu~N4TOfDL~J&$&0*5K*2+QGf}ap zf=3R2_NRM@Jz!t%rSFT@_MBxG)Wp{|JN%He6UGud6rQsKCw55Nlpk>OCnwwnQH2q&NPY+L?TZpGuSNmT!T z^)(!S@X@T4ENdMMY_dcV|5=#@mF9q>KunJxj6*(Pujj$;SkNZmVAaGV)c%CdX6CKj zuJs43catR9Ho{<{w6HoZdhn57ihv&Q^F-d{_w*z6Ur|vaqMBV{NKFwXCS~OHXx_?JtwH# zXC4(2)F#)Pvyr6~;zT6j+Wog>6UeJp6+9F8d7_B*0fq zv`i$qlSG)!w)jR*=&=H^uQh1oKk42p3dA}Dctpn}eb3oS+ky;Wn|b{@8A8>dnTU)} z)x{-zbab|~b+|Vx3I--&se=rE*P{AL!v0pCGq7Y#;r?SdpyC_Zm-;z=Nj0Cl&hsfR z-k*jy$>j}7^j+Lm)G`Ypi3xY5oNO5sZd$4Cj4(NapL`d7(0dZ*a1u@js>l=JZ*x+& z>p5dNIf|yDY-`@B#Novg04J)yM`L_Kj`_^DX^WqI@KiU+z_Mv_G$wn0#UE5th+w}= zLm3A@bE+Mgqlfa7b+jXqu!^j$j4zEh&tYETG9W16*-P|{ zX6hTZ?MG+tn-o>&#H6;lZ1O&q4furRI5+l@AEBwD8-1La0DOg#sk|VnS_k!6Aw~UQ zF8$%`Unqd}&JmOACLV=<8_RA{f+3cZ{f0?$=P}P&0@P-l7IuKRRrpkXl2U6mv2U;t z18$T-*gHi7oLiz*b>|V%=zF`swVL^E&v=W(-g6nR^Q>Y$-5%`|CuB}jg?F6a8v3)l z-6#vl(FgAvE7iG&;4TP9kErBqO`{L+E;hNs%y;{@2+AyM0@p`>hXSgWLZ>{w>md{` z@JTNq3GB&WWh@-SBD-rh_Hgmx_M41d=B4y}E-@3&X=$}N~Y!Og>;s7$8ML>M+K+R>FhMyTN;$^;T>jMU9L8}f*`17 zcN{OvU5?5Oe(_;{MNHw1Wapfa4Q1@IB3^q;$L4i)H&=b)hT#)qgd*>=NUkq^bxQ(y zkTTXDu0!y!ED)-*%F z@3hcbb7Y4MW3Y36Cg~TaAoXYk*2Z*Osjo$?1_RjOJgUrppvTk|-lkr0^VL-lau0-% ztFes=@kR%lU~F?gt2*Bf)NXDU0JtDYtxu@?Y04=IXXm?Fig^s-70R&Ltx2$QTcHj| z0v;oeUr^n5&tK0+ER$@audOvTQhHpNj(-n&pVg(W7-6;A$$O%lE1%!cP30FL|IvU>8X|^+ zhP^|*X@C$uCJc?f9|?`cbLcLbb-EfDAN3>t%R$tCsR}|=`#V+}#rI|gc>>#r-R0EBDgL=b7vh0lB&mxZ z>&?k9mwmxcyhR2_W1)snKZHO+*&y>PKaHzM^Go1%YWxzUE}{(%f9BQ<+N6eiN4J<8j5IwI-cEqV8&T zNJhp3$y#X2J-SP_GtL(<5=5&s;(x}|yMm)(`isMd-y|lhYmv^~K{T~GDw#QD9hRYg zK9bT$pHWi;rGqq&MGTknPORA+|rU|>ok_}AQaqlwcP0qDqE3S|AEIGJX)A z>@J{)<2dZ}K@t+-i!!H}&M0MkMw{e+5gvI>MEVf(JM9LGA#Ofrl1Ps)u-0eQYxjsW zUfs!YananLe)%vrXQ{9uMitXB8q&8sT& zr|fnN>$>QR9(TMK$65SjJq})uG(n*j{k{6-AgAk|idGKDxO2G{UrFDzAClD4Dpawok&d+n zcvItLmYn$Ms**EGmGe^k>HGv5JBge&8*H3@#rZiPGZ90SB~ZUputEEw6+dP9xS#_a zH)HQ_dRoi003nSr&7$T`k|;2*)ZFS&Ts%=D5TB`u2oRSfU;emRO5(YH8okiAw4*^_ zrnl^$EbJ?e;Qe{>=BzbG$RR+DRUPsq_wwPZ4UP2xyiGBT59z7ed)PTJW7$t@ZD{#y zr4;mIdsw8!FdQYy*u1M6?t}hfb-FFPY|5u`@aZoTlPxoN0&JAvo3*0xDU-FU)Jc-g zQN!O!ygSNfDuB^3!s2~@gMmTB8#ATDYvq2j*rzeSRH|5>494R+s*IuE_8=jl3#Gi^ zMf9{Uvk;G3Uq8N1_Jj3(h?E|!ir#!AUPL`Q`XchlHf(;wP+d0b#=1jPxU&2Cd)cG) zna=F5;{~{%_FwguS%j4i)zxY}szl*qL6*HSmO<|1^?MC}0uk4Jp~!;6Bk zz_(ZM?)>*Q1QG;6s92e)JOf}Wp(A*&QzA*$2XpKuB(asp>akxO=2kA_jEb(PKatDy z)oaYsWR_MbT`C+NIqKu1rtFE5!x<5HsFD+Q+P3h%&evVXfI;XJ!rYW2$F=93)m&qq zDUWz5S9`7AXb%a02XRk1hP6cUNMOV{3)O8J-7pT@p^eO*C}yNqp;_trXH37=GNfi5 zt1v4|wO}QTeBh_%g;t>oO5+!2b%Z?8x)uhDLczQWC@@P{Y|!Jz3{1o``b^BVkxx*$ zY{wpo=*&lFKfY2U2l3p^_=3EXpP|hUo$gHI_W(ni8xLN8HA_)=G5_-8@e2R&a@a4L zoM6U@(rI`HCY_U2?R`d+*92+_B$;?H4y>I-g?5p25@X$x3T(mi-2lhO4%0zVH6Trr zM$snkiX1~<_jTL(xo?ZybDvP_5rVphqg(>QzvByY$nyQda*E~ zU7hjtB&u<&nQ}}KlyK$!9Dxku`PK_1{PMiyx)a=g*0Fu+%lv++OZgV5s|y!%9$7IZ zd#b_5``JGNC`jy!w{#znulGMKFB6t0gZURSdy~Ky)2YXXlI-fZvRg+lqsgPD!njtY zj@%lz7a*}U-;lT}lJ}3=zWVgE`sG?ojfDUc@9nR+zxyxMbupF&2-)XTund2@)xLh6Lo_2NR-xMrVU1-R)2NP#2oaeo3N~R z?@iFP5_U{I=T*)1=}6M?pz=S>-DO+e)(DAzzdwX<=d#ORkI)-VMAJ#l)RceQdB^N( zS`wD=Ek51iN^dZ+Y_T@-xO@D zW}`FghNuXUOA+f4OIUNUey?s{GFc*%rmw_J493IU@v5CvCUkN7DIJm@PhSXpBJqKxUlqq2&&>35?_5G_|hzIQb#Ew{_aUVXUv^*SHKu;5XR)W zzvHXXw2`7Cbk)+C%E^U_r<_|INwB?tc{n2m%sJ8;;88mCdWJKhr`b}RX5yC(t*#hG zzs#y^9lulAxK5{H+(^C3NrU5~KRz!$`P9U(W17V%)h)&6p^a6BCncQ0NtsN5nnH}e zOk~WuFhPI;$CPC)ngq;q_(72beT|`#Gdo^fp{yhL=Nl0TnGa1a9TrKMFi^06CfH@w z-fLgqY9k4HBjmZN;g(0?zLSGZ|56xMg;q@O*A>Qhs;khO5)Nf{UKDOND%%`T)9hAd zvd2o8f--Tw;n0Nsq0z#Q8Xwrpp&6y-B%_`W6<2z)!W#yusX8$pZ(fRy9*F*;Ap^tl z9?hwFCxM>;8;#EPQPD&=mb}e>qk!z0!rrv8INS%`kYQy-0PJp?02@y8p+5?;;k?TJ zO*_{kE3k{}bJZT9G@%|(qJz-Q{Ma(Y;xVFn+864N_v+tQyG1YQPLlhF3(^l9m??0| z`NbT)79;3-NcG~+f27T#Xo;SZzWSBxSLJDCFd!U%odTeKfpujB= zoM{DcelJ74ej>;7`m#WO?D)x6g6I9a(c1?fl+X2r8_x*{4H^s)V^OmHJ&pjl4<&-h zyx7v2To?T^3k+YLMIcOC7Nuk0k_~(gd_3zGj=etn%ZJ{Ie|%ZthC8#HL2{)!kPeHJ z(5>)7{etRiF35gRVx&Hho^&iR_j7(BDlklu+5f|42s1CQ#a`}z>@SCuBIr(QH!Px0 z?i3wt)Rt*fgQO%sG1Z6f85~toO^)ezSaVeMgu5@mOH|apwNZ5wAlbQAVdfxv^^&S{ zzTJKCgn7Lz7_@O-61;vSeft?$qWsC2v$-$kO=Tu_kY3Hj;D|oxn9P{FANnd3k zb5^nJ^{^?-7A ziTR8eqK>A2{T!q($urv9B@SQDYdsw)nJ+G6@U%8LPAAOYsO-OO(Rj{bhB&73^xP`G zN3N-}(q#2ccia{m7S9MryPY(5kXW-4nXuGbSe~DypS}}mFJL8j3x?opi)*@Ty5jZl zfya|hH#}8>$A=sA(jiu@^$1Te$8@jQBm1gak?8V&7MqfmdmIP5I!-HtWA+g7UAWms z9YW2v)G)X?bj=k-8|1klT9exVbC`Tc;p=ulgwV=EL9D`@hoTDEsjNWPul+9tgWj42 zJ?n&9yH`Ke;&4pY3VPW5&61~6@(LTd9AM{8kIn5PmV~N#r=H6&o1iNuE zr1i~zi+HI|$aPq|ZFMwE;OWY)1q?oU4{4FeJxDZj9UM8nHi*!R2-k~7FPmP*D;H`&0Q9RyRhK=B@? zH1`6dJ=|>|_3X1us~lQLZZb&&cjY{-gnYvlgq9IYw%k*jL{(e`bgG@3@qJ9gDv*qS z@HXIz=|I`Tz?&0QWDBLpE$J;u6oU><<=|75KbYd@#KG11uBB{Feyn_Q#*&c^CydN} zq7`=b3wb5?us=6FYXYZ7d2lIkEJ)zPFSlrhv)NYlg_!6uw$j{1#n;OtzncYhQ-^f6 zy;w5Xd&bHOj^x(wBZsvOZNzBSlVuTqzVKOa@rcWx$5x*m6bf~A+P9^AJ~JBV=Y2kD zmtjJV5+qH){}8BVS4T5c#@|Du>qOx`?H6M067;}lcjHk`uwfHrqTDuHHyF!2P@ zaEBdA=8+;d`~l^#v>AUwgi|0OjE1GJdWZ0hxLf}E zJ^}ZVc$Ju!Hvx0QCtmp8g=yCXWmhIx4Ftz4>z=nGZ!xXD6>hcu-hESlmbLfcKd*YV zh+xp?ZlC5U9KFD^zs@MHTV6M6Gwy81wHrqlIeNWVIv466mV*5Z=RPVm=2B@_(0EBC zIyCYT?fNX6+$kGk)}ji0xPqhwvBz=G$JSaQl=~Ud0)KDLO6;m^R$r&J> zH?&7Rr9&J=o~F1q{B?y6^=3N9mIf=r)>Z;yh1)#JZjM0KTD$yX%L zhd7F3sEGrGQ2MQ)ZsTE>hw2G?!7FLxo4a%^mc2rwYCB_Y4r?(4BZc%hb?h?7>sFec ztx5Z>+QE$uyRDqAQ{`tFD0j1s*IaPrj>;Q!G9#O;iGltOvd*npx&p**CCq z86f7M*Lo{lQ50|t4r{Y5R7Ey7|0jk#3eHYs|O*Q*M&8&K<{pLfwC)vi1na+$Hmzl%EZD z%g9k_e>L3|o#fNPhc*DwEWC=v{6v z7+P@8%Zl6{jTtgc!mzo5+OGlK>JkO$Bm6c-1S13fnW8v#u)0kpukSN_^5IC})s+dt z%+U1ki@w=^m}j7Q0Gwmwhu?~(;5T24xCroM#?W36O)Fan_e(WDr?F;MWYj`&VbnUjxu=ivC9kF zwCf7q(bI*=z2*@=%CjDt-I#WFBJRG zk|th%X(J!#dN2+UlFmczqDJ1mono83|M*VIml>AhoI1(YVFUfcmTg3)5EZ~7-KIw= zhutRQhUk-s!@EIYU?%eeRRNiIEqMtP4gHU)^mw714x0Dcn zMs8x3cDpZV1Zre$>TEPgXS~1aLW68<na zo|h&SRUF`GlRnOv zD(kAWQ=XW$qsSv1`2JY3GH+oE$lPsStkg}z_}ZDKXCnJmdw*(c@vXkO+k4cDZhhTK zK9srwr;auc72}BkvMAUbSG`Dom0KD7mB-%SvBi^2`G|5iu4wB>AY&DZP z-V+bcC=EbrhBy~5CLFye-3em}q|?Zr5_*vcN~P@aEr>zXWb#sHdAMA9i%>1Vxl(g} zu?@zDhPxDpmYDw7J#qvxuqkoqF{qXFWEO{JKAW8JQqT_q-nIF8>l;#kN5x!2Yc-K| zbknUhjm^VC&U*Q;B?x7OD)TP$#@}TpW%n)?jS`C&4lP;=t@c?i!drK$3FRUA>RGl83~s@>oCnYiX5yvGwu6 zP8@vq*uISUvmI&RZT$ZUxf(|0y2_4^0Svl<&+Hpwmbb~cFx&c^@Nx-=&`$)1fu9H=a!RWuQ;NfVC-qDqmY6kBY6#louc2!u@4g zrndy-b=#p6CG0Xh#yY~JNR99Y!7&zYNcS&A9s;-m*s+e@Um*jv)(%#zXC3n z5vi34kA$it7mHxzMm11B&ZHO;K^N%VEDTl%8ceEmtc>>ti$|~1SSUGW*3yTPbAA}M zi$r-VsPkffJ1INYgBNfyJ4k*m>qk?cMO_dJ3Sams!=1Bh`ezd5x5JH55X46j)v4VK z$1)NTe4X1yvPsA6o}fcf83?#|#RGB_%|x zebS`eqJMEmF$-eoFc;%nKvu2AOs`A9{SAipFr)#OeLzT)T)&HADyz^sH|jaOgO-Oy z1`^UGe|(gvx52V~;0eAH)XesJYV^~tuC-RqbyJ?QxE9@cJqo zpHKyVAu~`;yH=}~6i$mGE`xVyV?}zs?d@}fBut;;1(jS?{yfhQ3yJbC&LN89`RzqV z`cevwiKTRVNehk(4LDBu;%fQ0^r5@dZ7$1|yHpE;9O&GQ@Ho>`j&j)0T39eq&$>9f zuJ(ne)HU|twji?mPDoq`bPy9RcaF&tE%rlyQJ%8CGVu`>`QJ^s_-FVYd9I|$n8hRu zSTJ#SV=Y36M^-M}7QZ;~kxe_WZ=794NR100e4jPFdM5QWOJ+x%fN}V4-=ts-cF~T# zO~hOX(9c|v>L3{C!z}l3+V_@Z-QEKd>+pEu^VB6QBfkLW135dphM&O5QOIu1AG3~kZ2~B@mdX8^nWHEh zt-0Pr8^6^fv)6^)t90|DR_T1NClOwMBBbXFXkeuWR<9n9VeUYLe zw#+>{0?*2UJ1(o)%z{ZS&r~3cur{oG6J&S(+#Y?9GTT>j9-EqgYka_V6|5gHpRQP| zi3SPQioVZ-GZbYT-2q27@}7AMt%82fhEfKU*CPChzOZBf zyH3eSanR0}jk^!L53q;xp>;=*lDQN!N8!gPU&}mRDa4+AyCFyDNeB;Ob`|wH;Pos6 zGA~~U0@7`rFgaScS`jG$OGsURAm3aL8YAQosv7eczRn8<3hX}(5a`KY(0=vARiu~= zk8r<54}7q3ylF$@%C=|{trUrvJzsJP-6Xv20EULIHN$&scJ;eRtb6pInrJGnQqujc zTFrE)JwaDD#anF714t2h%>KIDJ!_?IpxvbMMee^I^55a?YHk@2GFDQ5ii9){1P9)o z2OkKkbvv^XqTbv(fj@uuF+BTPoHRx0AX~sKJ@r2m(ED9#naEBrNE&V8hV?C?MM+tb z&kZ5(o7RW^`^!;V;R-bR+X5qxGtE0*e$XlZZ+EQ@-B`Rd@5XHTZ(w1KIh~7)+yvno zXG^i@gI<#md>-G4;)~ONP?$y?li*DFR(5&~EOpjL+XQ}^P#h_n*_F$$xqUbdTnVZz z;2Z+BE-SirO{5*~jmom4eP;R5P26h)t-WB-#Fu@e`9n7CU39oHuYoYlNX&xnh%H+%Xt`iA8#{hnlU|rl08O zq(RNbG(FmLlj#R0Ep6g~t+|3B(Q*6#KpyAoYGD)FDElcbo04bU9}k!?2;!$)kishH zncSv9gqy+`>sA9sGQ+mt*`Wc@uC^9KdncR3Z4 z=A*zOi$GrDARf(}zzyc{K56Ru3HV|%u3frRTFrGiU}4BGHz_uTQOPGtgbYSN2g@g9 z2JQXtI1eo1QXWi3jp8?f2TtxyYLWI}MXWz+&I0ekA!jsyeGpy~7EIyccZh06ZR?z? zyHsCR(h>M%0YX4|GE;jhO^^dr`o}hs@fB(-hd)(lq+yOXyh?_SKZB!Z<{S+d_L00meBFu6&EZeY6 z_Kp}6Vx41u(x9->u$CyAWJX)kG`ILFUhH3Cw%fO;8wq?uDl=tscwZu0#x#l5u|pPV z?3A#AzO%-ms@Pl9MlZvrpD8A(RWM!*`WbMt3ZV-eRdB{3Y!Byr#Qxv6oWCUR z9QmAp=i1LW*Y}4OGQ2l@Tj2>C>ka<}6j;12#rkl+J@S(ggyK|N#0q2sBHKK=#SZ}} zl=X0D0OzpT4=12z(1n=Xk|9=+e})pWCR%9Niu4j4JZqC}pXe!-8$QBHY?m=s-Yq!u zVGMwO_&uEK7@CSHQjSH$e+grSN7D}R}^6eLOQ2M(})JyqahTOrRM+^C z#&K}?lEIT>>QsL=$u$g=ERhfB{TI{7%X#2`CBxN6L!%Z0Vd!b!tmdYG3H%KCgi&;& z{9s`n5$Ho5S1S8o8#m?|cEYfIzc~BT6Z47>l?yn~Q~MxT>nW+>nG(BeYk5)j5Lpw* z5=l^p0b3xDo+srWx7WI?2a#N!g0QMiJ15dlbm|wsR`6ee^M%MPTte{SVcd+-*jZ11 zIaZd(MbWay`mA3Mn+K_3*tX&BydFznGXbYAQ{FCht?qd(ea(PYtgHRrA$_8%{DYlX zaYWxKF#!@>b+xwj(orcNCrYpTG#n8J!*%ryEX|!)P~zo2D$DQ&wF4Bf5dnh}`{Bt_p{}hfjdfBu@~35P!>eF};gS;KX+f;X|M@`Atm-q3m%NPGe{s zml@v1oLvDR$R|OUj@ZD071|^GT5;y52~xDb!@O{ zZU6T=-;9Et3k92Mk*bR(L=z;UC=)5tK4HA90yp=6mRT6kVhpp3aQ;mt48bdL#{N#t zN8gbcNn;n5kJSC6)q&qoF_<5JZmTMvRLoeQEdh=}{36t!f4b|(G<6KIy?|{K7%NZr zrQXX?)}x;pprGPNyj4s9aLMZ`w$HYp0udHyfJH1v(R_M%Qv4!}0cYEKHfSJUWbU&C zwcqrOA{OzLFltq|hQ1R?uFP6aG|D8(`BVk`pk7~rUWePl=a5ju2fhe@eXEHZvvSQD zH%4vKyl_a-3E(}hW#0+y4uBG{bgVh(!oUEruMuF z-?A*s{9|&+Fkf%Zsi>qQ?L9~%Qcl}(K zjVx1j=*ZnXP(V~3!dmu!hWH>|mT)Y5Ipb*H%gQsF`H~_SdTyQyd8Fv^rVr8iPPcM* zQKv-5MzG1Xx)OT1MAAm=xi>gLrkr}>)x#l-=^(7AV%Jra0-kR|K!Vob)M!hc7FrF>88csYVg*g@j0=BiovG$khr*CKxK)I5)w_;CQCaHef zwOf9L5=x-C=&Fr~G(vfT(j1h=!AlbP;}1#dN$i9uaM+xM`Rzix0V{mz8lBGTjlMo} zzUX^A3-BIx!6N#9I5iwtBVMbAiMzj}-6*>H@9Z%N9PIxHOG@!%8RZe0`r#*wyr31H z-gfM{a7AGD6Yr3xn3hLFd|Bx7T(Cu7%ZqSeZiGSK#TJhXKi)-xUyhvk0s}SOTzOjf z^dcWQlVo)C5lKevmh&@juR>2noA?`UiH5~Mgd(=!)OmM*fOdc7_TUCXyE!xm-0s$r z^p6um8Vmzx$|t+R9*1`b9{FnO$UesgiKz83?q| zGS|6cHCAdIu6Gm^s&Je+k`YwtVs1~V<_D1?Z*x61ea%_8FNgt8CUH*Ll|h z&Xm0|E5@nE4APP43mz)l;_!zeXZqWrf0{}+GyPV7NJpk^4kUA;T3q~PDAWxnZDgjC z4)F2%I}y|mX5GGHU5^hAq^hgaN5T=gp%2yf*(1$=&@i@$qWCE7_wB%G{vD^qQw$Ms zMIExFDK4`y{X|1D0{3fHAXSh$`fcc0Wey#&)gH>gel)dQS!`|7@R3muM^9s^khMRQ zzP{vt+ipu%q}X}BKBlEd;LUZ7qPBGRF(LSXTofNB9x@fpta?+TlE=ov5X#kW-$hS` zHEaow+2x8C@>6HzHSJ6Xm$j|3Oa3H79C;v?cBFSCO+rKa;Oh22zb*(Sh?}X$AeQjWRW=MtTuef+10i!$|k) zgq`!r*$tdvjJ!`}w*=qrG{05E5Zm;aK73&h+fsYJi4AxvquMst*u(x;_eKt&{VX^GUPBaq4Gd0& zJCL$NYQ?NAoGjtvvf5w|%RU>Avzx;%5r0*rq@i9skA0^Z(2w#IWQLzyRgSnVFBA;8 zaqZ`sdgKrb{7SZg5Kvyg>GbeDg%s<5KL2hlrif*~XU!EF5jJq{bMI8$@d#d?Ic{}< zpmBFuvzA9{N!;E0hAzWUS*Dv1=%_mV{x zq48N7@2$y$`UqvU*uIn3DpN1$HDihg4}e0`Z}l0vMn zi;HPL3~(|=Mul?tN^E_9QK3tHwd+hP^ZO8W5tv6buvdThi00T@_vm4Ru_PlKwV6(j?HBm@ERMvvEyX8VeL z&>ZBUMcmjJP|^VsLwV*sod9NhWH{oU@!_0szh;y~$vg*Kx+%2eBEg2x9odQ+l8BT! zNn@EF-e)!m$ylXFMKdPQUXhb`X+5pNZc4qf5?)^^I0PKjTD!8R5I6#pZHxua;tXOZ zdS6-8pjtPtecqpc!Hg>f=p)!?wuzOa#R}Bra5oSn$X}LlBY;VB94-DiYlb5!db^YX z0#6Gu_7;MB+!;mMg^h9e2|t;*#;2SRPEUYtZ6xHr=@`J4t|reBI&!w zIn&RB`GJBUAcX4onWUK9rF9SbDebtuT8#`K`K`$@eR=19MQqp*umGebV$`|;obJ0( zD^<=yZWU?V$LaB=@_lM%)9OnKM;iYOJZ7e5coVbIKQ(gIZ#K?LUVj$_vgG8&wCJsg zFRq2qic=i&6o3L*7;+NkYwb9R^CrdK|F$}ckVZITvmdQG_i@&+S~kXk(MbdZMb{yN zK&|Zr_lp95;w3aM!pS{Oi1z6Fvf)+p!&d1eMIE;GUeT2ufB%gpV$S^m57`oL>Dt>! zvzN6FgF9$JR<#K$xc3u3>7?yBYSdORc|8!7miE!?#MHC$@!@)G{A<5M@@dGI>>)x3 zVX017w3gr?7#ejo{z%EhYk1dYD~{&P!&8W~Z=1+}jdzL0)SEUeWSA^*+CdWqC9qeH z(O=XTqa!LCom$uqYfqmRwT+aqBR30c%F_4RGSz6O-Pq8&Q*8nS!&9tUs;!Ndr#Ghz zK%)usRW%ox-Kw)ph}HB+rXnk+v5`O3Y5gExIm1sg^j3AiiOw`dUZLa8xg$EWS)WfB z;v&I+*t=4b^<}z0aV35uKs1MvBj>!C90eNfDy*cua|8s?!{3 zkM0XD>Gq;Euh>jg5-=V=o5_eBts+Q0%xVdz{wpEqOF2)Gtqv{v7GQc2@h@eGNiQ-4 zB%4*f=}&`1)XM$h`b<99d{}N~q^xuDNuEPGLBbqiD{$36e6&v9$JYZe zZM;`$ma&GR?BzOc+E}wAo@;QKA*+&qIc$p|*d90q>LBEexwmj`d6>p$KufLSBaF>a zSpU6WOVcr5n&=gLV)C7;N+$(k5MF?|l}J*VE2DiSoIPw(2Ii{yN!D`@m{$^`@9&27 zkIa|~`XRaaqOIw(2j$jmt<47CRUf+_2Ns?Z|D zaem;;OQ9bl-|SoM8SAug7)Hl#WsCl2F2Gwe&*L*K8QuXe3vk*Ul&OfU5`s`MAS}=q zPP6n*rrLdNbwb&g%G-JG%MT=)nyOq%lD`uxmxt(tcB(|5Yxe~m2biszsjY%_p*jy! z$*YkGKsElb!Fx~SK`@*^`3JFo?d1qh;=k*0d2P^fT74`#iJ4G*^{lgPX@|}gvql8g zly|j`kBozaBJwmg$G@0cTyV*)$sq>icMNEu`{0+5Of&U@IS#Q>?1d&SZq`~m##yeV z7~&DRP+_C84qXz&E#+s%5xrnQb$be!O0Yo{yRzZWeAWbxcmIgVmP=iK$A@+-aWgHK z%p+faVgz~8OP_Rl>cIQS@-n)1P*bMMPY%Pql53ir2C!=~+CT9aaV z>k-{@iPkkhJ-PB198CqVCdrBlz`V+qrdXKMd=tdcTnJNIx(m@PnPz2*NJTz=Po8S=Y)mL>GCns-@slTiT=gFJ*oVt7z}MvMczZutHIH1>+iNt)CV~kC-S{V@<-rUnYB;m6um1G zcXEWAnk4AxIlSU4&*nGrNW#Kc0xbpKDVOkNijOpfKi`5?<+czkoU?d9786F9B9s2n zo+^%)`ws&qw|d0^?;n>I7XuWxedPhWE0-!B0~8c7ATcyKG72wDWo~D5Xfhx+H#anw zU=acp12;E0mofVSD3_oS0tJ6t_cq;Kf`AMlor5&e-62vUJbUl6_u0=rY|MIweDZcM8;}YNisS?G z3rYeMwGG4pf`SkD1qFo&*w~D~NC@Z;O2B3ef+N5%sO10R72zOjBnp31vPPoJv|&(y zhC2iRd;kE7N&>|s1qA^@f`Sr%8^Yj{03~Y=upK~~AD{t)f)E63iZEAiIM~4vi8|%) zC4keG3jmam5aa#r4v=>N!NIoHP=K~I(h=l>I?>h|0x*Qxfsa0eMKUVwim80iQw03kqd50D+;SGfQkYZuV(!uSc;07i~r#2?rYW{>o= zhJyeo00OoJK@lhicc>i*4nUm^FjUt9=(>WSe~h*M81MrAx*7nGANZeee|i531cv^0 zwzjo}xwu+Gy}?iifIS!j0_dt}@gu#EyZ~#c-7iCH2m*%kxAuRq21BfEPzJvfw+5)l z>jSJ&_5D>H!WIs8MI!hSV92iu1%8D=U9vLNP7&tf0)iqD1i$iA0>eSJs9X0I_}x}# zD9jV;`)6$rhT7TxD#6a(Rp1d6?B)(qSNh8W1rhv%Ie?G=5kWygF$o|53i?g{hEad{`}?}WTmkl|5X!aa z*yFG6bN)3LT!4Sa(t)8A3j%QdBXDy;5kXtj2l)Rj^WQH2H+BDt^8XO{f9Ip(4uSk; zIe*dr2W#yDhIs$Qqx9;IL}_0ehMEBAf15rA{TWwnkR90F<-b{Vq%~>=DLBapxP*Y{=jCwQ>C_VnBK&YYl z_mRp_TbSLi=@JqV1z5x3*4_lD7Nd3|0AC<#4DCQ(zZDD+;D^GHC>H>#Jb!>a3{LQ? zpD2k7*ubrAok6H)&mQ@U{DVLE5B{fre-o%v1VDfPLPSv^KyL1+#{G>5O8^8=Z{0t8 zR4`YFJK~=pf&c-eC+r^sae#mi2>u87SADkba5!qZf9nrb{NMZEPYDR*1+pcWorc*; zJ$I^p-txUlp5BvhV_15EZR7C^Em2H)X3$Cm7DBa)nSv;vq^>d`UFO=?Ll#mq@K z!Z}9^8p~el$6}2(2wvSJ@U1RHteV8C>%?KK=0z()RBAKzqh5MYPI_%ag+G$QtCoNF zgSv-C)Pt@kXt{fz$}Dh>39h6U_5(`mm@=rha@5w~5Ggf$$w5x9L_Gn${;QN*tql6( z-l15-@9G=~n?93R2m&yUFwFn74k#HXJ_ves*HQSbh2<6IVKj3 zSSpf}dSRr|avFT`PUZc8;NnqRj+TG=;)3>(`;P3Ej9PXpOZXt0PHeN3IET&29G)r; zWvppu>W5^TUb_`yOYq+PiiV@6(**EcYckMz3L>w*YiTt^g$p9-fA6;P!MX`SA~rFj zw#RqO5;j$xqqdpuJG|pXtpWj0MvoU#uxtDky(00{o4*gqty_gL+s$1%GvNvCduJazAJIMF+-=ibGz^9} zbEzZyMWnC!9)&7(jJe2SJQ%Lsd-I$FZ|{;WqOG8Dt%TB;Y=p;PmOfDR#x>Vl=?;V1 zh=-T2YY=RmV^m;o)VH&1a#KyVZP#SmHPwX4cAae7#$?;JZQFLe^Iy+;)_OlY=fhb? zU+=Tly|4Ydc3=f2qS`0qbe-{=(b_KOzy|%P#5+_Xo)sRnoXGuOHo@j|QmjS2_;Qu- z4EBRxJ)M4&_ATb=Bbx1~DS#uESOhE?@uCNh#q#aU^lv@bwegoTH<@;ksufV?w*0$* z+YJ(F?v?(0`46K3zy1{EBX~5BLyio zTpUQXP51eqi@Xo!Ddz`$9Z3zXRNnuz@K<`{!AzvxNylW!%vGTb&;WP(8frQ_4D~?f zs^{@M#i0xO+{&*Bv?XJ^)K&$%S0ixfMOLc9qX>G3+Ma0 z7bPF(RVp--s16HrL@E@7SMP269Asc#sJ!i-?B95C$?z#WvHGs3QdcseV`8p=hg2;( zv)^Wv?_8`mhnFN*xB$r#0YMClI-*_dR(YjzV1RUEx#$oIndFW(>o{k8t0u^z(6!9? zMZVJ(ALw*Hj1DlQ zW@@dRu0C~t7}fRBWc+5EOJ9ed7^P`$Ia(=8DiCyO1TQ<4!2k@Ud&y-^{G96htxD%d zGCCOt7~dALEInE79xm9RnCUDOUsJyK6-czq`EFJQNA84OuUf1of@k|pJp3-Kna0XU zI3oNS)s@uZJwRdAJjj`DWP!#Z{&O22)nX-y9gO;=r~Jz3 zfOAiGRb<3;)eb1ht!6Gt*3*);nu*;5z5IBh6;7)d96W3cnJFO^dwG*SAV0k_o)v$B z>+Z~d+ArNI<`~m=?JdK^6jfYatl+00N#K(1e_*?6J(*bJxd?370Og<2W6HY_^`#%l zWo;%uq8?PFItm+Y)x$9mfXPtN3CrTKpGm!MGVC-=!2uAXF{|KDj3ctvB=0_Uqt+yU z;F)W8cMz#EgT!Ult!P||`hQRUx^MeVp6u~&^@?XrZQrYIddu#5rQbA6oRr~s!r39@ zm$|i>Q)n3+;_W3BVV&iivbZLc3>8o@3^$wcB1o&nbfX*Dec3ggT4YE^uenLk8Fx<# zOAtijcGj5V7R(E(7075-0MM> zZKX7gL1teg6I^vSSqi@?Bsx?L2}l@fk7;cUwG!jVq!@{AJnv>(#M}Q+*la(I%KkTg z=JD}5i@==fcR^iqjR7j&NBX`~kocp~Yz^NE-eoXsX|f+` ze;FM9MExpF$YfZWFQv)y+r#6<-?_bTeG-2TSYI$+`(73&pc4mQh|gS0l+|H$NJ6P| zhQ%?0vukIJ#qTnjqgPzUv(#V-+DXG|{}7@I*B~RGb9&lq95#|c!T-?uwfn&z&A0Ek zK?6|5UM>`Ah!@`D;7u#21bxEDeTbyw0hx(ERvFX7XK|M8(NnvWF z=rin^{rk>wTA6wTYoPViA|eZ83m1UkEpZeFA=&sqqB>pi?(Y=&V)pIW&t$}!SrxUg zt73pj$}YXrGRmuSJ{C)~2re8{7nyQsg7Ri`YYRLgqdld4eS<=@p{Oq1I`ZDglw1-f z%RQ#wk5pN&a8%;=hc0MiaXUS$G28Y!U#)CkA{zuUovt>NJ#&3?s={@jqZM#UhB%pp zp+r&~v0A~A53at)`lK3G=aKE_!bT(iX8|{7H7n^sJzZYQ&L<&qIAYv}$P||^AlfRW zl(zZaXv8$*Jh%A-OO39byH(g8A2-H=UUnrC9` z0A?CC8TaG~7pq^AJ%boWr3Tioar2qQ7M+Q73z?ZR4JA5i}sK=4wHsBb=&@xRKexr}1-hg60KT z28&_Z0cPu>O9Nlbqw-38oL_f#{>dP(bHr!y(U;}z=UBOz9)4`~7$a~Kx^nc*WW+1V zyALyBC4u;C%pU?3$H}WE^67Q5sE7gvf<~gKv)z$XulTH*_}6tnW#ijr{qfk6kqA@x z7HcUtX<1p}fW|g8n!Z|W25B!?Tcm^a8Hb-%02x=`4b*to_YUvgfNSPsFBJ@MfiUtt$z;Tjbd-xsfFk@tjnL|LCFC#bH9bZ@ne?9@0(ghc-o4l-8Qp=r? z2W=}JdpatdPge3J4L?>PaSp@g`>{<1-C(?<=Lm6Bmg89kuO%r+gAMqHrTU-BgJ*q-GF z;ATwCtyuuxx z`%i}lKg4l|nuF;d@Ztz+L&oJgRTRIDE={dZdY5U$zq7eE+0gx3C)QDNiH!1m>xpm6 zaSa0jOie(~3SN(bDR%rw&Ugr$mP6m-byWPYULS@1b@%~aZ@E^~e406LM83NrxM0P! zf@jLZ9cJ2Q%)37YI_aE25n`2`jSRLh`QQ)X3+@{NNf{W=8xJRL1KwHl-=acw!`@Gw zs%l)ae_0v#MuY7&oWz_K%3RVVKuF>WTPy!69qa-KLApwJG08kkjkl9W4zrqzsT5nk zSmMSO&tc`l!s~my5;p=b-|9`%D&(chpwVj)g8nH2dvjHxH#vWosiSRBGNG>DCaF0r-F5jl0)jbl z!TzY}=0)BV+1tKd%dy}_H))kImdN46Aq+ zKh&RYmAXU(dRw-53OlS7+U3)?%$CEW z7Sf;~*HK7Pt!k1ZtIzb1N~TPmR}JTu;^W_YL8(lrra6ATb*uF@ss>(0Br~ihP9;F& zil%S)_M%R&9_7p*baz~L?K4n#l7B@lR2c$lIlRgBoyjt#@rYvR)Qo-3iNZa(Kg?l@ zCxX@kpW|`HPGK1kywte+7`*GSee54K+G~)^5{oi;x=qvh5z-g?{n! zK!^)z8Cpr8K6VYZSjE4nR31Nla15Bk;@T$>e;^v6F% zZ$8b7^c86$itn}p7P|74_dP+DFcIjW@bp_*Vft;!9xh2i0X@#4xaMI(7YB zaqys4@TEn@Dbg&;RiEEY;=xP2Lo z{7&!E9+`_D6Vn$JK9lt#eE_hC8cLAghg`*J5&!5{{NIeejKrxqg1Zh&B&o~GuDCnq z!wbc6U$lZiYBJH24#zGG6Z$M*-*OL(gYne&Jgq<7yLtFo(fC$G;(Ig$&HGku#=Ua zM)#@xjvh*)p&ux+0PqEVJ5Ram&{zdz3bQl)_W34R(BU0F5v_bfOfU^v^F*?#Kc=DD zob5ko?3*d;+pwW$pr$<2N=HXrXZ=}nt*b%MD*Q<&vR@lxD=?M|cXmcLaSm6ZZEPKg zm&}0xpB3;D-q`-38r9A~P`k?EQS-6i(o{}HoRNI$)i7u60|a4>;Us$-hM0xGA7Bss z+eaE(T%2fUcBZXd2DDkV&;K2TwU+SS`^Od zt=~Mwnrh}hD}W~ZR7Lq@ZOxPkb3+&!jV+$II0EExa7)o|T(A3G=$_Yt$(NODgWUP+Sc4~6kw>_&z09I*#8cCwoD27Bp|n{VSNN`9;Za`G=*j0?q=_Igq( z4CT6OJ1khmFj50U#jq*4E~44P)vY~?=exA_j>i1k62RNFUE)U4!U~f&gS{)ljX%`R zA6eBs;4Kfes+>K`7$0OOr;7|5$YK>-Xnwu0btUQfI1N9}=g7&sJnIHuXo9nvetnKk zTlJ6ST563@XG+bPI}<%$&k5b`ugV;(jba2xxjL#1$HsTlMJy6H;57f{%HQnTg{+y} zMsbqH1ITT7)%zbUz8{x7A^T3lZI)$&I-c8$G;m9l#H6%mZxu2Hm%&8u9!>tz=UL6Z zPB4EQH-#J$FL87x5%Fq;IQ2rv@CRd{^K^9}%0&IfU%P~=HHea^II!ui?^MH)kdD?4 zSM{(>b5ESOqh>YdAol6zsdv=u^<`|$N9tJf8S%`ky>MY5QnHxA z0>atC1)zPrIIw@D$K&E&_ba_yzeEh2F)l1T(xz-nf^j1)MU#hkM?;Y}pZn6N!sqG|P|04y_g zam*S5Q~TmgrNg-v4n|ygcETs_UG<+PvdqGiY3l?*IaE18R{;gQX+a%Vj5d)M12_NGRAPmO6B33_DipRQ*=1f}Phtc+RMs3*VE|7>{%t0 z5d9v8uCsJ)OnlYMuzT{beJ;h+0kk{}k*d8cf09wFv5kt^;HwD)(Ac*_G=5B# zdPUJqi|mDWmQ(R3z~rqAa!FSnseJJoA(%3O$|P8-CKIPDy$}<1!$>2Q19ZrCimACe zL!(IX0mY4>Igw+Lvjd$omN;qsFt6ivCTvShh&_HT_`*8W)jK2Q#0NM5j7JZ&AKcpd zIeix!A>xyQum9?;&AQt3=EkLfPEcSa`@IpMd}J7zMXr(L}!sWDPX`P|z*Cx23w;PdpE9h@F{pUd-N3gUt)95lMjiOHW! zOOGiXs<17tZocuz6ga@d%d00gM+>kxD^wqp5x1i2dHv(#1I$A}L3w+NX6@w<74?Y3 zA+R+D-lc5(Z5l=U0!2>z@Ep$ri3N^pl%49)dcxa;hVt-(^sBOd3LO`A(v-#0e0;N9 z6jvleGip>ui^GibaU}G{$*F#~Yz$tvQ zezD9A$y=g$w9_Z!jdV`~#~EjbFxQw6`h)c3N2iI0r33a|c}y5*o-MX#C%@>jir7&j zB{ikC`R@$L*N19@q-@W>=fBKot}P~O_;n>#AeM=(aDYpIQKUMrZu63+7*;iFdQ9H;5$|$FLRy&8^rq}R?D11FTBlRuK2A)+0f|c zSmL(KfTacO3co@`%5T<5#&}vcfiatgj#&w?aP*l*sNTc|yFX8nw5Hk*a!~rTqA6Ly z0e(LNq$>rjhJ(jqyq1HkA6_TbU_lo}nbOw8;!K$V6o*~;;!ZsCy?vGZZr{T1){_=! zx9v|?@U--jThUQJW;`e?Yw<@R;>kOe<(^_Vi^%W(95n>v`gK+Iuq6+f`;lfcgv4Zj zOJ_NtQ4Ny0=DL1Bf8KerrwL`Qp6iDRrHnG(ZC@v|l;Bg!yQ)(vPTDgRH_;Z8zVa(@ zOUl9lA`oDHl$tdai5mWC)n%>JX|ndpbMuO^GZeEv%FTX!^`*c&N)#HJ_QnQQ|6SP_n!_B_>blpBMe_QO1?PR)@t#TdmsdrD;|wU)@paN9DCWPHNcS-WjA2 zZ8LPap9m01(51L3T4P{6zhIHS(;{sju!-!hBLh7kdhifXK={x6{VyybJb$0v>l7&T z;3MoDML}H#j+_(-1sN?p88LhWs4)K?djM_byIT&_JT5FWj*m~P89EsJwyLa>rznF1p*4zKhFnBA%mqCuZslX6pB@}F9s%Kt4kP$l6%h< z|28j=pP!!)_{)PCFvv*-3kU8M!)clW3l`q(O0wOp4+(A~vVj6ngM+&InoLTZ6Re|O zgxvWWA`9|v2L%u*XtW1o!9{h0+@yocI^FvQ;ls=m)P559F&Hx&wS=RxJ4Gr7=R zr5C=#3}8L0yJ>ufI`QrEtCnceCky+8^A|9dMc2W*xQr6qsrJ!-`9sJA^Zj%A`X`f^k@1a4Fw|fBO1!uGvxkb}Vg9#Xj5^&%9sr;GoKcV*|`pW9^p{Zr&?Lthb16;GKh z9v7hg94aabdW3`uk?`>)wpUUTWMa~!%87^oelQ+y8ARj^cg=!)4XHyPgg}jcj9>yX zfa&>1G6=*c4wBGzm(hmUo@zJ<+`IUG<1Z>kgfFtkFS>{Spm*SZ&>Qsypl}=;o49Dw z+-~~#Viehkwe|*3uJayxcc8mLA_>6f0cAQAAZQT;RNTGgt4S3adf=NM^(ZU@V1mLV ziL7z^EvkQ0_?38DOybA*OZ4y0?ZYmy3B*w0@3}R@`Y!OB@Ccs_xZa(=DxcrL!zPTzp zK`evK2)~zgxOC%XXkzb;EFYrnVpl>1+hvI}mY$sxW1rcp+x_xy!u07wV5YjtN?dN) zv-J_}hp)+0+-jr5X7`PCFq$7;l!+5g>_~`q-iG@x&&*f)0EphNY5QARsUl^=2K&P6 zcEmPwk|)GtBwFsA9U0TU4fP4DH!*aZiIF?(r@_@E@>nGBk$dJjCIT*sFmZDH(gxD% zA8&L*sCAp;6AwrCkH00(f&DWlRY~=qb9Ic*XZD9kMfWv~{KGR={ixR^l6ZdwEwFOeQHQ|auijARF?C&Gi;ycf zCSm`UWY64G*hW7s_$UfFO`iFklkks1%5rTR;fa~ug|AXJHyf8KK2X*hoJ+oSh=did zrb^*j9tPtgQR2BGI55;NZnyNV+J@BOW$`%jx9lW;FHyD}*!GZeymQOz7Iw2EeKVr8z*16gI}ArF4qZc;LM85SHylEi*iSX_&4&!>ICP&=aAK|1(&st|6Mo*R{oL{>d>iGsZi^7sGz*Nb2Jv1}P%LWEWDcTNpVVb;#rPhUVv~&}`YK(|jw962zL>W>yJ2$jB>Qvf zhPNa=aN6PC1SuZ!N|7G(lW`c^VL?_x50&jyo@{1ZMy0 zIBI>~Is5hjItaowq{ss_>Q&BbD?5udko|6hfZh;jw3ELSK^*kaOyU&pA+6>ErFJAM zC0RT(a7HGRgC2ZN9KacvTE_WJl1Q*o7TyQieF$Q3fPD5lTzd3V^VBO;*UM8@iqnN1 z^&rd((@Kf#QO7kO9z?Q6O%t-m?Q(qw-|leWMeG!2@;nx~m-nTYCJ(E&3}xtF670JJ zfY*dSPT-xT#;fdpKjdKB)&pk)DzT#B?VAPKfvNYzN`{so6{n3J+=WZWidXPR_P`rr z1G1qN@rwc7;_I)R4NVS3GY=S{Kz?cV0X-_(r^mLS09ESrYT++MDW>6EzkU0Z;18|7 z3%ckzC3!YPLOixF$MqRnlCO`Hm!@c8z^ps=Bhdw_9eT;on$5YknqP8BiJ{yaSF4$SW*Szft}<~(^h#uI?q#2BQ5YYI)Crb?F-;^3xf{B}l&-ANp=}37qiYYN-$v z7glw{Os(x-Tz@pad$|#D_w5r#HUf|d0xn-g1Orn|9 zIT9$wFDEdQQN_>j3r8v*GA{>sbN5a%@lz_sH)eh*-KH{e!Jol5g!*=l0>;n8YaR0j z0d%Q}SiDl(?xj>8YH4qU@}{B6($|Xg^3&z_sYpo`0izw_i{}k`zd638{u=FdH4W&7 z418cOi5@jnPY+-zSmSMIDtTabaeUL;2Q{t*r!7MvTpongYTg`gee@n@F1@)t@|dqS zsP#oyc$u`tH_SFXC`(_k17u2--P;Han>NbQZJ?W&tlIN`5!Flt^} zbj@V17iOPO0$lnC9;p-6vT%Q3=d*DM`AuzA>T~7zMmiIv{DxJP1jEL zxE}ULeq6-Q_#c4F2gpm!H(;18s`=rV1x0yMn0nHSNic{1q`#crx zlS9d4rRsWJ_cqM~PF9Vn;V0N%DS-jQ>fZ`Z4BA3$7mow4qq*CLZ5!{Go4}+=r3^R4 z&OLXn1D7r@Tp2^p7eN$368#xY^K$HfciZfN=K-O6k_!E^fVqdd*xYY-b!m4P3X*;f!(cl_@$qhKkP* z&Ug5o#=xe0<)?zQ(n~W-g}m3<#v4wuZoKo^GQ>j5&=NdqRICX{FZ!wnSrD5@CF~VW$vP|Ach%W( zUQkH}z@al?n3aJ^y)ybR=$eCx)`@dnzO_ZntW@Qc39qt6#WgxpjrpMO=NO(fQAqFJ zz=G8U&@}5{D)+C5WI_>mE;MF@%j7LWWevYHeKVyLhk><+s}1Xj31?zsf}I~6Y?KAv zE6pm;-E~Jn3tO15#FiCn|Dk@8M^@iiaujP9zK7Pa!Y@Jc_VXigV8;;gLzxwu?AE^#N3U z_0AyRv*SF2v6)9`^kJ1Cv3immd#}*8?%7`q@@>^4(x71p}J`rDI zNxLYjgv7Fpp>Gqb=|RJgGf)C0xV2?mz^r@HW6kVl;achP0LJ3TjN?pgWzpyExH~)A zmM?&}mtHm>~A zqrjguD@tob_v}p-55Kg{K6Ge1(2zX!2=o#C2~#ir@f)S64BTZ5Rzu!uTpb#F!1cbi z7UO~I5&rJMG<5GRz%skY-CgP_Wqh7@(+fHzIJd@|oLPw$r{3tzJ*bupXa^MeONQ;Mg);a)v2cec~k*;GV|NZve{Hw;VPAtH{)R*An#+`=DA(* zd%m0&RbI$t_s{e|5xKNFQtWRhRT~C}Vp$m;+GV;;N-6K&Yh+7pLy1cKqn3Z1t7DEw z<%>LS2OB?p>r|v`2*ycBOM`ABV*`9uX5d?EUZm5wy$}`h+=|I}|1$mk#Y2a8#WAyy z$bh4sMFkzX9HUn$pl~Yr1dO(!Z4!UXN&m(fXH5+!H8|@%2&;HWJ$t(A)j~9>)OnMp^(L(cVIlHI4oYDCOxwt)+AR0SWjNIQl4jE`m zIs{06$_Eo92tFrik^L4*?e|RUI9Z_UVaLiX%FSU6uD+6G!=(mcJAu_-sZK}KF?FM& zn#&dOwXcoCtZH?>2gWXkFvvZW9DcgtWwT#yp>VWt;rD#Qy9V_a*RmsQZU`!~w zaKrqPRdOD{`={2G4&5St^E+GiSibcYe?15mNw08iP~)=L@1L*y9{72ULA$lzwiJ0} zH3rAzjb?*-URl%Lco=fnMO(MUApEqt)^{CuLxk0hd8+>WeUYm*pb*qs(d>ZP zQ0RZ!2&lWzZf%Vv*B`yG0}ov46NCA14VY|blP-+ZhccKN&!-VdN53|6U4$U+$l5}; zTQ7rGg+=Ur?w#BCnID?7Mm%F9qR-K$WP@}Guc}&uTA)~x9E!s1V=LtgexQU6xK}HZ zlV)5E@NME(Z2D5_TV2}GM0Js}udrgtTcIa&C7o(m8CoaNgbBsGgA{wd) zyA@M6Eaeuxh{A&U*FaQ*8|g=MJfBm3z}tsQ;B{_>lX_xG*!z9E3LB%lJaEe{=fZJ&!*P)fvwHC+&>D` zjaPKvbf?-;q#cCtbwyejWNsCsRp{F*Sglx5l9LSQDTG#=9|%Lw&o6cIUnDZJ z)#{{dCfC`XWaRtOnqBIS0pu0TZIaVaghq)|xaZnV#2d|3yo+c~_+ zk&e<9i2>`}TB-gCUX=#Bqkb>W%Rw=^3+MPu6lS}!18PBMQXU5aT=J48ULA|vUzP3X zXFt3n>g~!($BjoiWzU;>1Lx7}$>1kphfRj<2V5E(_N_;Z%3!)jz-q7t<|f3~IK&3} z&nBN5iNa27Rz0ul6Z7rB?&!C1I>>Z}Tk^DejPp&~n%Z~5%w(~d{Z8MH7r7zMr`5@a zqAY&2yXeCzTs;r}`;qWcq<=ZW0?T=PJtxxDtz2`wkW?|iDra|RG2LHZjpSBBg0|Gc z6*(y1CcO@18cCj2ab!&iX76V=XER569_$o;!)RO&*tF;k}U?=Rd2y4&M% zePlh9GXXtWyo10UK5 z9K=+$O>-_vVAk(%(f39y$;;3CgPI6v9NMigetRui)uNNM)_NM(Dk{Dn(}MXBf1!}B zzp0*J!y5%Q@_OpR(;OZ@zt(ko#XCLye7d}bG#Z{d<2BbFi%m*qN-ZK1H?=qf|M?Wp z$)u>*vm3oJafjK(yM0lGzb>iC z$Z3S9K11w#1x^egFQ@TXQ=AGjw-K&XlHLdlc#h_qK zi>XmKs4n%&Md#r#-%UvPGHDahVIf(BDTI*PRQN+`AG@^#J>kjAcrcOV7it+sC^qqc z2em1)0ju|)Z&X3u=wn_lO}sI&hxk=@T0KhF<;Jp07;sO2h%y7JgibgD&Z;zIl68jH zjr>GgFd8=k?Yq%o96Ai}}NsES()stj?uRCY&{%f#086WYm>gzZ~mF%nHHa9b; z(7uL^XLqT;0Y~-e>CuQa=<+>W8JjRcAhUZs0~{+6*L>-en8-tA@>>#V^cZ{ct_?IN zt(Jr319hRH$i7#|6jrwj@g4n?iz{1rtfy$yE$!+u}j`2PA>a`SH@EIx4zeFqZhIsa#fphOA2Nl# zZ>M`WJ}!k{ItUy2W|(Pl#yh9a;SGUzfeF7sjE!3_RV))~MY)Bx+{PnDQfaSKsQjbW z9zq3vmk}9vTN{4a-7|Jq=N6){*SloU0r1VtvVOL_O}XRg$+)R(On{@<+qm&#%CD#C z9@<9GP5eF`oLzFt7ck1*yHxS!HAKEvEKq`(b;d6MWuEG~QV)L0SeN1%s`XXXhgo&0 z6GEOBSsO%*`sSyGJ?i6Jv@66XJ7l1v0)f%8iV*KKtDa)cO385!_BN5{P|AAAtK*vb zBDhk{VgzmArYYyvJRfHJB8BW@d`!x_&sBl@_MD@0GZhBz)BN)0dbw6x`>m2mJV0Tjg$Sl|YMP@mf|Gy|Q6Eh=Qe3u3$1Pe1G zOY+UxzbNvr=6@;D6->GaNEZr?y~}?GJtFJ0hR7b~I-Q1(pdVB+1S0Bs<~HU!88RU! zugT>)kHgiMdWX91!bgRb>4n20{{tIdVi8h$0%AWL={LKZUwei}=upFdPfqRaz&N?w zmbtiE6i<#Fd+_CQfHlRFdm#lE#(vRf0u*KiIi(aWR49=xiD+ zc+sD#0SavX`sU%oK8y$P0JZ}1X@;GHc!G)W6t=3j+zNhamUM zA}0JzI;=Px5eCjx6E7#f0B+hAvgMsd<3S&^+^35jx_e;qA=@4>{!)ZFzcpo^Ud7ox zhjYAvY+DAk?2#k%32LWq3yy}S0Xa6j6DOP=!2@pNzTJcQW%{TwfC5U;VEcvjAl=DG zU#C+WIB?GYY=SP(JRdV8Lj=Zpjhd4KVolmW*~Pj zcE4kI%Bv&sVO6J7NJu_brC_0*Zn5*kK>I|;$1BGKvN-|nQp`F>U+tNUC?ieZDiU#u;J|MuHsAEY4k_*IotrP-i zkFV085kMp~+IE*kiHM#fJQ(9AorAI*zuZ|eL*ASx1XII2NUuMSV zJ}woe zr^Ng=4tn?rab>H68$PmEpOZDOqPZNv+I(1vF1H1&F+p&#D2~3K^@7G$Zw?-9f!O_Q z`suOr_opy>`bFe)fuM-=XabM`Vc*Wb84OaphkM}94jnT2h{H$nDBzsSx`g-)R6fa< zV4#i2l&1vZqYMz+F>ihM6sX7mgzew2NIg%SFCo7S5TuDNly5#FM*dDPu$LNgdqW`4jC%weS+)2)Uz#%yRICp7vawtIA95$=U8AH9^m7PHE7i#c758JD~$R}49 z!{`gg=N&hcuczSR-*5+Hi&)#>)$7LeDW!rC1V$x zlETu4GBQX&AP=|b6+_3DT&me-S3ReS;Xmw~QDm_XunxmqG zK>~YqLljAWH8dWXsrb-rV$0$Kj6+t+z~Y*=UasJtgNeB8b%5FqDn+BbX_zPj<(jervFl#!>@~xEX zTO|QiB)r`FzUk{KoEK|Yo(tNRSka9L*mTUHEKDUZ|Q#e<) zqi*XP&a9Xw);x)o>eJfvU*4{BSDCD=6^j7t#QEO4Qgwl&$%9uek5AvGqnKJk%5#F>Vp-Tj{$J)y!!&hocujk@*u2V4Kaoq_+?1 zgH*@UQV;mEbE&LcsGo$xEkt_2InJ+ zHJp6?#+HVkju4CRUsv><(QTvyT(x~E))e;b{P~RHXLREz z)KWA1IGkrN`-N9E98U?SMO`40JSPd)`*HgXh-cRYBNf5-Dr*d1PgN+Vr?|{zDz02{V z1Io#2n%y?o$1a=$qR!pubN!uJPR=N(6h~<0{nN}E-d@94bT)XThr830 z9WPdxc9S^3R|N-_dvD*wF~5AZYGs_JikxNg)sogu|BMyFTFZNFVqf!oX5ZcJo04{$ zQ7h8YyNBX6S0NN6i9et@3s_#j6uAtRE$^|F1 zY%IfZ#R3B7P24&uaaOVt*rJvrMwQ{AX=NvYQeUrkM-`QQqrdAc0IQ30`&4;mm_s(t zXkpf5B???xRPb5xdJh_Kncz68hF-D=D1^51Yeh!+SuePQV^YiM1jUW_;d@PC5?e+v zwPx0`J?Q6IKKJvS8#u00%c;9X(fo%t=CSNuPUXWSbjF8>6V*9{kV#FKeKTqV4eIo{ z?+CjsoLu&2X{Y7Afce{J4L2{``f5ttdr`|7s-d3ah^lQ6lydQk-tp$fFP$05)EE*yxWes_5lmcrW+RWhm+Wfa+_-ul-u z>3-<<=T1aFwO8-IaYWlp7`c8(1Oxo+yj8L-!Pt5P@cd!NnFZ|wNx{oc9p%Xc(w6L* z&)>_%%GEYBfGw&|6KJyn?@g@pH9 z(7Zo*Q1|x{9j=;OnsMnaH2UxeJ(tpBp;Rj8Rs~_ys^P|&_S&*Pm8vK<78-}?$Ur!c z32?>0B&)$~frIVd?f=KtId$iSNJGO1xwrx8rw#_fLZQHhO+qUi8^>Ev1=i&T= zda0_}#+beLlnj7Al|h&O!NuK#Y9On(M%=&kh;(tRJ>tn2x$ByIu1yjErbOeZCkzLY zfQs}7;ha<%xfJqYGeP|Afq1`9iO*UYQ!=ok@nF1`ACOn75R)xgr$9A2m_TZTJKZa`{0uHP+sucIi+3~9b9e`UlGk{1NTDk_6C5FpQ|}so!{mBf??shbDmMF~ zAyLoaW-nCe-cO&RZX)Tig(P&a!aszd-EepEJ8yialO!i17*z{%>`^LMyvy2lQrH+( z>zBIm-`*5B;v<3{*a#PTlGIwBS1j(wmmEV|pSkfzT{$Pn3+RbvdE;g**&qPKwcCfh zxWRaYqEAZ|zSaBf)IST(X~+{Rfx-wQY041-C$Q%1Eh;|wz z$d2?YB~@OxUMBPj#m#o&Dp3Q%TfGjJ4nfZAW`!lhvJv^^ole3G;hZC{i!QSf?$D5f zp74(0ldVX~9AtH-JLXgLU^`OtCA;ILQN=-_r^ke9E~R?#WB zDS4E4d_w}x(US(?U6g>n-dBmunNLuV&-Na;I`xu{!3)-$+RO50cndVWZ&Fu0i5&uU zex-@FVrCwuk@1`j#l*4aK*;Hn90t0m6GIJ12bm&Pjm0R4*G+{%59WL}>rv&8L0`{E zBpxfQ=RA>@(51LtZMB7Vddc;X zWx~Ct>7ydkENE(mB6hv;r5P_gg2xY;DyV*Rv7+cpDTkp#Y3sXpI@ob!m&0Ug12(;L z6sp25%EqF94F6O1q#(1b8}E^o23}+pCevXPk_Nf6Z~*x9wMmExDHCE0_#U?A#-_Hw z{PV!><3FWt;M_Xpkk;mQ?1sm70~)l>RCnRK5?y^OeIxvivJ(YL>kRmY0LF0~jh|gp ziQ69-u}#-(|73KAfx4CX16y=4**N48uBm{(AMwt!I+R4|4A@pJrV>N$gG#}&VL|Nh z9?s0V0|4Fz&;piSokG9n58u7=P6iz^#OVbE!yDvvJNCZzn%LGKz_{bff9r}*FB%~Q zStw0}$4R#ZndQ};7leZZTF+^gNLiG0(;N2hC~XhaSB!GJlZ{MhwYDquud(28F?aRU zYiX|=mWVO^^k(HcQp=|=%!U|~ca3{G&$Ps;)B$|#3;g)wXjS|-M;D$VP5Fvy$3#he z%9Z#@eT6rZEmWAx7Xu`p>pRv~+bo>f(AB?cfn=7aPh|UMVobS;(Gx)$VKX!B>+!G^ z#?Fd$ph&w_1)rX0-^);fzl5W;(&s_KuEf|ja zi68HYEclwN-We^fOHD$)i}=8eeiP}x#hs@m?o+YO(iR;NR5-%yS5{fBoYyRuV=ZQ8^ZuzY(*A2D z+V-&a^TABC1-ag2w0ZmGG&f6Yi<$mK(PET{EVu$hYhj%Y+>|1B46E=p#k``dL`uzHdfl*OKdLWhttZMO z*~A3dDY}~yOLIc?sP7|~X$O;!-j5`otN5ntexOGdVzt*<^0*FSI2b_CH%7Q~xu_)_ ztrqoi=961aRR=@$!QIvp1_9tiXUWaWrWOroiy(u%o$55$WY7ux-MQ(`t})QQy);DX zs)e3wRw;!T3dM;V-|x~Y$bKi5b^nzY9$lFRb@dpV-8z|B@vF5j;+?3{p4+UT{k`jW zQg4IfC)>BVy1^_vYpM*40B6I{+>ls><35MQ|D$%TEZ;?s-I3yQ(V@*PP>jGl=x*$tK%DBvOTVGu}vp<$)Ax6 zf=Q@(Li5X*yg6>|a?pH8?}m)CtcG}UX}GeyhW0pLRs))5=r4I}=-HtaW-*f#mJp$| z*hxd~ws0n98`Bg*kpZzg@~aKr)>EkixM@VWL1@-3Dff%iawX#s)11QkpidA2Ru1$i zw&y{GzLdhbSfT(1wKd8#x7U@`?(+M29sw43we>GXVWFjFTW2#ALhb}9pGVecH2r}V zNk1Z^^KUHzIj4yIF*aj<&)8GKP=iEKc3>0&`)9J%Q!$AiUVsUl0|#nc%xyT=2QxEl zSFkmFAXU+gzpzja5+TaQ1!T*P3;w1W+>2N<8=U#o06>(Q*_=rfC?*>`J2>B`v?rv! zR@d$p-D4V=Ao+^C*I?*#^N)pKsEh-LvPa?3A<$x`nRiDP5_KXR4s3YNBOhXbj?HaZ z^9fKpRgVzl1t1oT8>pYCaaroC6w=-z#2%)E?Vky*HTA}S>z?FCOG##@HW{8b4rUb@ zvX3X{exr@YzGL0idt40&#V+PXNd&&_mK#)}stA}^$gxompv0Orzqi|Y+Gpz5h*FZ3 z#`z1TzN?t4BQ*~!ZBJ*8UJD}aRos{H!&6~;j$LN20mu?&q3JiyZg{vD9qxRc1;(Z_ zR|!}c+(pX%8@i@Gw@;vsf*b_fm@}_eMkTw?g=Ca9QgD1^)4MdqFLboWcH&!N5QZhT z`A3inxM&kL8?Rc zzL8n47hsPr_zC--M6ppFqbJt{q`G%$B*(tmXji7i$Dph*mU57-=B%5Ny8Eu@s=tOw z;d!6MKHlK`7e&R?C3~GnF@IL!zb8)OJb_!&9SmX-%&|}#ALP;&Vqzyv1m$ek;rDE; zkDMi5FCFm`PjtDe&(2$hkM8lQ@2GYPRBcA|Yk(QwaudEK2ZxmPfqYQozq&nxjv^Zi zXWN8O>650EOY9-2do&(1W5p^l{+Zn ztvzaLolF@W8ki`s{acLcLk!}{1zu?r=<^I0sLuq<*2n*N1f8kk319S)|0}|s>c*|G zTuuIu|Fxl-YawD;MS{uiM-3s_x>z@rvKwGOrml3W$^D?uL#f*c2{gWOZF_{oVTKCh zW}?wq$K~dPP|WGGs8?jde3w^co z?u1EvO)`DFavcpM6UXHDslU|s+d@Zf0va-pZMMtIal+0~qq@~wK4R*#qk`7vPI^QM z-Eb_dC}n|o92@IGo$teYDL{iI!l_D3KtQ@o3kNQdL5BZ0+}$pZZW>|xDS=nncDesj zz!CWhcjHvwHFnMp?(QQRxTs57IRv;3Yu5`g$K0L<)nS$Mhb)NRj zhN0KkIt&2*H4zGyXcGRZGyamXr(j;p#w@?NmmwoXISy&MA@D%U5LrUv<^nFQ1-IrQ ze+Sree5cVU5RfBy7UkQo>V1ExW;p>>Nu6C*qo-@YHhL0Ge9chr^@`IUN%UP zQvs1ky|m>55M9HqroqIYWxl%7lKp$t8`1tior4kDmjc9lUwdnh??`C zUAzk1m8P-;2Fw8KQ2VVzZYyhTiqzP1|3B?`nw&C*KVc|g!* z%HynHw$~TimxR0;fdj1j7_sHkJ#!ojt48@6X1a>KKJiw%?VU8by%J%H-8nod&Pw23 z3Wct0sd;w`%A4qLUP;_kwxTw?p)99~6yZUpZSi~UU5F)K={O*s4Kv&O#K6AY1)p6> zt!Jya<5G8gS*aQ3br4IXP|vi;DX$h7wu>MjxHh&(Z%nBbECXbn8lka;J%Di|t9c!3 zOsTpQPMNYW9%6XSaDeRZge7!y%ffXGi>;Rbk?=e(5NgHgrMjF(7&UTIY0(?yS3Pjh zmoPUy`{8gpCI>Nm#lkeX8v<3Mu?(SHmpuzVW0Thd`j{;F4M9Ap?Mw@}LEM^zr>bCl z&9NHUCC}ec?*Oy%9etO`(9${~%0j|tDLVbJo_+Q+&9KeURzro7->LE=7!&0mpE*B~ z&07nFT;jrY?;s>+!4P)H$a0zlG>{n>ml4LFxRtQxq^l+swwW`HE94^MDE)W3Xk^U_ zFzGd0BXm(?w_?1LO<8@L8*Gg>A0c;77|u47QlZn!Qh*f4_w8qE9Zb8<_+0g0y@m&W znPlm8smBPfFpC4GDdo$>bhSESsW-Er$XoC&XaD{~!;Fof%P0N^4PZzW4B^K%sJu0< zCg5j+V(;d_X7wLZn+rJWY{eVXoM244D=x@o&82MMdc|R7J9+p=B zcjF`N(X=K@z9OCZseS=fhFS8y{I|Q)h^q&`r}GyB%hC-L6nU?H#flBGC=Hz)uYFhl zp?L!;+WpiIaW@B3sSC6e_j9p5$LwvBk@s_!K=s$HL;S&wyjJQjreen<tordI*Jvs zKo;Eh@K13O?rcui2=3eKx}%(>n6SEZP-@U6<9JQIxpXn5=OEDiRZDb2OZ`UA#J&Re zy&-1Q+PeYG5JXqp;$Db{8xs0&S_)RrzNSCRQU9!t32i41zwx9a#WqlSV>%ZG72roj zHc!qXbl7}E4Y%yS{U15z67C9h6-c{v7XlVN=)m$4fCBOu zkcMGcq|+A`!H>i1VDTgj#8H+!6B@ei&m?fkf)oF4v* zeG^dQza_{S4_a1rJ!yRM-`V{~rDJ#f+&zbw)9hr(s>QJZ024d=UYi7wS{5c!ztgw| z8RQ8bIWJw1P4%U_mIfp7sk-2u4s>X0x2_C9CGmpy%4dF8zEp*&asN~(mJRNaHRte- zFJIfx#b!k6qWlS>3vYNq2=UDtS~teod@+kPAoNd27s|k1Q!p+5Awd=NJ<{o&C3U8| ziM)l<_#5yT6PVsWQV8#DgMl~%`j=Z2mD}av9$FC+@d31NinJ2nl*BFp0~20AsXwZp z*=PX;D`Y-5-&Fwv|0M0=$XG`X(q~E+;0+t0N3%nA-p5teu*hOB)bkXImeSG<(S>?; zh}`U*4N|w&>rznTU`dyj8>qMdY`QW0{9d7OYs39MHk6O6+cMna^Lpe@r`{ruLDo)E zBfU+r7~6Cqzw2o0*kZ_FdM#!;&|_o$vHvpR1FMAx{++kO&Hzxu7<=yF8OY zo-iJzdAR@yJf0td%Rb=UBsJ%0`Gu_r9a zjuM{tD`Z}3l?MyH#6e=$5tZc;66#g8OL5XT5NN@wh5~f#6-{3}h7S(x6V}g78FRjA zVROD?7)^!jd`tIQ061Y5&;P1q8+pEtq#^1M2op_VGH2t4#34nmP4<7=&&_>CJ&2GNpYsd+6U;lp1T zq}06dlOC|C`fqHV7Fe8#FcH)r;U}##8O7zA9v-?ud<=h%%Q4JHJ;>t0gQBPYX2{%v*YuqXL3OwwEw(dLy;HXg=fMeW#FU zUZ!?Smz>D@O8B0e7vH`%=-}3$73a#MVi8#mawA$%MRc!L0e^AA_O+yMR z#sEfsZQo&eJeRm(xt^c8ZBU;RBdkk0!aBJ1XN;8>gWx>}H%w*66GauYnjmbdV;924 z7~yD84Nj7n_ds!22~%zL;MT5ox?aM*7p${WTNmXDl%u$*nIfABPZpoKP7P^%ziYrh zbN-+ohV3N? z2Pi!6%n!ejRDN{x-<4&@$8TTNrvtlcwrrinn#~yfwLtf}?p_5S#Ds0Fe_s?`vH+Vp z(#d%l^;!&I&kt+kP3mb>gp$Wx{G{TQaJJ%iRErJa-r>gvpearJmI$VB%y?WokTkVY z*E@Gl);AZ$((+mwXqc8C*%HQPWzEkI{yaRtX1VikfsE8(59>XO`QrPxl>CjLS6H(b zp|{zKTFdL04u>*uAF1tfWp*B#C;;DAd^*56x;kq4D%*P%mtHrdI0QU0D~-a{+|TAB znD3#$Zg+L7z_Xs#c7Hp?+@HWiSvmoB(~%V7dci!hb6IZ6TDvAigkvYOnu*D!#5e%UY70bqtkm**O1 zy03djs;$p4puBjK^-o(s{nPm9d%yAl+BpYq*QJZ3OP4Faavc)9`OuocBxk^>kqp1Y zV09{qo`n-1cT4gYkECoBca#Z5jJL)GTL~HpKK?Sw7=t&pqkL2QW@E*MrNIA!Yw%_%KF=Iay2-@YXtr7qb)=ZSCZ6DUMIRn7h;Q2GSv2J6%uYTGJ;ci< z!v&k^7$(^j2w_$XNLyXfp9JiGv!HA*t6k5Pp5T5{=Fenh(7VV_eM%`;ggO4_)-^Zr zTB-2N(%Ejz%+ww%4JhNd7DaGR2v%~)o=|h z6(4*1PoaG?)SetoBCdi0tmd#zTWnUs8gG{;p0lGFD)7u#-d zOnoQ+kIRsX1ll4j?Rc$!U`TF*X~RO(Dktv@6_)fKOosFj0Ef>5s!xLSASV#+Y_squ_|5a7gJ>o<-#P-w}wS9coD zex&jS2Iryb8d!Hx&HISR_=lw#U`75~pXl3-g>4Yw9YE=jl_?*sxux+ZOkehmo$J_9 zJWL3vFaWNSAnNVImmn=S#!-7i4OO8v>$-o78jd_aI=ygBwn)C|Y$rBqWIyANy)F4h zg$8*sWv>fe$1MCc`UF*qaHl^zE!EJGfi($-dxHGb_l^R}mfvL>!K6XxO8CIcmFxdj zeZ@}K_XwuJ*3Xvu&z=?q@n&uM$#1;9+TG9WV*)}UI%_)Z(Tpz9|8rO0?}jHjOhx7dJl!L6u@9ph&0qahZJ7RDD_qJk^hU^sKKXtNU9Z0t&o6@9>)?Y zTL5t0b=kJdIG}@FBycwkFruz;AM2;d-#j*kxJm2rC4u*=ed$J&H@HA>Z?3{oBwu9p z#2CNgONe>_iq^lWFrFDzXEJ7n*7)(|Grs4$Pu>rm6`<`j3VPhDRPUwxT8Re<3R{5P z;&1!A6$NP#_56M;g%h7Jh7p#BqNDHqm<5=aB$=B@lWK*=z3(30S~oW-g*V;=LgT=d zg_Id}&j3y()y1)77O}e*;p6r(va_D5{ym!|e6%Q*5?N{ufDksph!*pE`wDrJ{4FYo5 zI@SveSMW0BQ|aY~xJrINU1~5CZ|yU0P&9}uNlAt6{p5K`x0K&b8URP+qyau%%N1eD z{cnCQvsz1C7X3A%$R=O`wA{tcx3R6;i802Hz^tT!hJoTcDH+f?FI4wG4Lq?~Z2fBT zQOQWo@YRJ#sFh>!FUW|!n9lX;82}?zns$Cj(T~r#8NcY}_KhOQhH8+Z<;+P#x^u8M z?oJ{f+yd>`SUYBn!5j2{U5d~l21zAI(uw9$;-?jvGTG>MJZXprazjG05}r#a5Riod z%Ry31W7#X~*I1VkS`=8}I(|CfXM`1rn}+ItPd;<%HE?uiIK7ygeZM;t4eJ66oxDy{SYsY9dI~6=bw1 z#&i998&N90rrjI%!L6d}ePyR9As8t>D~NwqH=fIsI~T((Jhec4?WzIydUe;*X?xJJ zz=Uhvd!7*!n;}ZM)9L6f0vNXEsB%FtbaqV`8qlHQh}w}Ix50ixa^*n@HmNSi?O;<; ztRdm;EHV%E_N?hK(FlPyGXA!#4QcVF_SQipM3{76OT7pm)6&-wUJdPHh(8)!6zw-q zq>SEi^BeK75Y$oW8Vdz|ZOLfejW8mYsLDPZd@t5`?km|Nsap!_0rZh}8$q-TPs0bV zSUfSCiL#ATJu5W2le18S3bH#rr4j>e_1ZRUglg*)@ip;J9h6tf7@PP@EGlZKIGUo{s% zg(lCHZVcTx$ZYpxCqSffXMdv;J05euZeiQ~4t?X5&s3ec{$P0)S?{EsS@PZ@5{K$E zvFb@tNb(HG>)_t|_0JvNOzVp*=4?maF2+Pyq z>E>}qxJHDubC0jurPy6pIFe)NQD5^s7U*v0=XcVV7QP#tt6BcHy4%EkRT7z z3=LB~(nH|aJx}~%r!_M z2itJ>P(9=S0#Z6e`G?1*FRDM4-5r{zoXdB{MTKPLRrA07p$qiE zNr0uD)5n2BsyZCCK=HVHqP5RDvc`fCNIJAN!A>UL0aA^S%!0RJlFs_0lnSnRa>we3P2MH>VnfLt6cI)Gq%l3mj;bP(h{?3EOdGXx=I&vYqk{bH}eru z>L<&AaVq~gp?Oc>3l)Y}>@l+4@}f zN*9ZP%J~iPMm63Q+B*mmGfAasqZq-ecEYbg#ca)a#rz^CoD%dz1Nr z`#CQo97coXYpWENVQ7{EmnCU$gKK0Lz&(@5&NPX*8d85T1kA-~yToJl2Ou*c2VNHh z0Wn96bW~B#!X$q@zCQ8BL z+iC(0(b9#+COc&Rg@80w6j(#U-C7sn0!V+9lvZ*POTSC?jFiDv?C#YWOMqU3El#k5 zlkXgQTXh>X`O6W~*~#Y|=D1jxaL6HfvlX~3QqE)~iBwQ)XLu#cz^Y`y&f>_yDe2PD z+up!8FGJ8yo2n_{{G!dY&Sy4s&EYO}{n05p%l-bhNuTq;%-LkLpq=gc{`)!h3_yeL zTvA1`=}4%VrPzxX4Q-r+C1cQtT_vnL+42C-7hs4z!PamcCQLq(0BZS@f62Z7@7*fn z=2HAPr0LIx{Gq>9w20@iqS2Dbx+un!e8uGBsdf!f2m|8y>*dru(qhS)ZsY@ao;-z` z{?KUkU5wXWHMIRbLbi-SqSdw`0KCu7<)H*DKib4>tGpohu!T#y%q85)bH_4d{&f@$ zYVFq4!iwP=9^aiu$}-Z>ffZg)9I7^;!Ryvc2b;;3;oNYVaUZ4JcWwCi8_Z4=le+Gf z5+jE{lwMaiYr%KM-`MN=HLZcIX$oDy*&Fu8k84%&`oB@4)GE&ZAjla1FMNoZk^O&( z9a&k~|G(IgjrD&@h9H0>t5r5aU0^ARDTz}CXG$qIxUeLSzCXfKeN%Jx5aIdQBqXFo z*cKot=QjuzK*b=C|CY(8UAJC4zxtP-D~&5Wv)!-FhaIoYp^r6qA__ZT7NE+4L<|7~ z1a&Y9*hICoFkk`w1q2KlK}m^=2r&);-!|mO-XOyH`w~G@00IDtA_K+AMhVF97cdc` z04zIsULA#khLD(s64*bjqhJ35;JJHj)EJ&sRxt?j$;JR;+Jng;g$w_hi;Mww}knE&Wb=uJ~xLK^RoyfxM9eX zM}cv-u?Nx`LO8cdXbXXj@vlaK3!%6Qe9_T|00?OQ0fG4Q+kunEAn~Su{uA+&3=#8& z3)9>p#?>i+sAnI9JBM}y^4~>;xj#b=1`q*?!6P(;ix4rO_AviOp$&QI0_(2Rg+f78 z4Sgxv`AgAWJ`eLv%XdKFuJ%-4A8i$?QIIIB>j(Ci*O1W1g%{by z=BJn9cd|Us?+N5X0tj@Nq~@54iV6m$XN7g{HrE31ly}#=@fNG#5=4tc@ov_-y87fc zdIOO3JFWfR1N~u6g?rFyV<4FAb+Ls*1J~C7h4{@~{^36QC4bP@{87*TbrYwum6PlJ z<^cfz;PWqG-W)xX3$0H>hJ4uhF<#C3EQhT3ZD;*%R>t`2)%x)a%$)15f{R!7@fxss z+D8HY;X+jJHlezazq$1j5LQLgwX}$csegnNDaz0(-?X5J4h{tH_b*)<{5^iu2o)fL z1Pp70{pf5l`15FyL_e%Z43Pu~$uY2^yYR+Y!6`0MGoSEDtF{%&E=AvYhc7<>xd1y- zm=nlGvg}MTtw}KMC6Lw})p2GI2wRxl+&#b+gYOLW8FQ$mQ)eED)JgRe%!eOWvi!|u zM|)ezl+%Mf-rb;CYk3Ss6{lkF@xp7TNmu`x81(rS#dc?WYUe}qzcXVRC@jA1$B+H9 z56W5CZqR0afBNACnP_>cxYx;i;f3aBi?IQNv!^hiQAsHA%4@vsZwkN>!x`eH@z)1y*?7>R%!!@ zVgid%7j)^q7PRWNR(0U|Qzi6=KBtBI9}zLfO_!rOB10T`j)bvmwy+QB$n8s@naq65 zh`*G%;rMYTno+NkTawF+aemv?V#NOTWvYYXjAQ=^hq;_kvoHNn?^r-TW(*KC!Ry*s z{UBm}@RRy-luoass)TPpA6?eChMkf+`-v#iJFkJMzMnPXtFCj>!3@c_K=bJpdl2U6 z1w^jrA-Q$&p|hWB2L#cLxf$;6#k4?e_aAbDR>E=US4@9=y7EhfbHJ>nRghJ$^N}Q@ z4s;H;9nIQ@7Jfomw=Yq`w*l7QnpGR{x!~Jea>JPjGz|}B#aN(JKIVh99A+334rPzJ z`#^z$ne1r}sapDCyl%fs^>}&PngTTq6#v-LsV2t#`1L59S>pim*mE|-f*`q{qak~y zavu?@fIyR5WIko}fKAE0ZZeZ_&=&cg4YYMM{o}cNTE$ek+s7yL7yt}$G{RvQ_7L#} zp$pUa`c7*+Dr#B@^hLiaLtD8oG2lYgKBQyrVoqs2>&-J9izVy`b`P?0nyFUt=%Eg8 zkevNV1ba>& zS{H}CGO$DN_pDzWF$O6_lX__X=eRgS=z3xsfL#UNbP#?u}e3v6ieg~`qQTyd-Rcv`q1MD=pS4`wC zC4e&9ZV-^-SnJvy0GpL;@xCz_NCIgofx_%tM?Yc_4l{PURTn(vhbLE%$sU!A4(N{+ zNNA%h)1#Y9C*~@>kY+RGB_OCLm$Td$Z#pzS9caFtn1Ia>F;yN`8J7b+sW+of6xl{9 zSgT@7Bq!kgD7!;9Re@cIsez(<+0geSi6k3}t8m^5sDXuOL$2pI(dH^&y^{04c{%Gj z1~5`o2~XJ+HfB{JEzAEw(AO)k`nJD{6-b0BMZh;V5b2`7+bg?m66GgvV^ly1S@y`} zMifV(cLKIm=BoG5*@5;NPR1~+Gay&doF_38Vo*t>?%6#1>VuJ`>(8f`hH^!#Q z33q_$b-qA?pO?f`i4bvPHJBIvz}1J#(7tK5Z~~0>+>iv=FW;qn-CbqIv+zHJzHtFF zN)qNDi}+21lK1Lo0qVPhP0W8Ni63*w7; zbb!iPiCB^ocr)qG7MbTxy{d|1c#fR2;Bfrald*^PtBM)ZEFbG|-U-p7V%3ufD2Osg z+A9EVZ*_n&&g2$zuZqlF`(Wgd(rS>JOm9KReHZ9q^H_5VIYlTR6EqJScC!BciTyak zMl9_X4fDJ$($T2d+Yc_IL88nMaJjHrFd+5D*2>4*w)~|dm{}l!^$;Gfcy)xik}GgG z8JH$m!VrI_yI25#Zz!KO`r=!SER2e+K(IS>$oK^GyL?pd#Fqaq-C2oF+9a>^(XGtA z=#0KdEp(GyDJ8<1KVc8I%rqk598HU>Q>4Ng{vGpFO8idhVtf!xXA{O-cu9E`0T@C< zyDoaFmiqgB{zqUrcn6=~R;TKIuN^(Jq({vI-FH2HnxSvl&id?YSXQ(x^a z*}dz8Noc_>C#h|qmS3K;g(6}V9$}}H+n}>7de(bS_Merww^J@Z=QaA4FfjH!ieYJ> znDP8E`cx_^w{u31b~m<5_M0ew8gRzjIUV#KXqF{@t#DZA#W^qE>mv{OE<2)dSCUwTbW_Fu++#J*K_C z(F?~X))?nFhsnl9gny1_zn5MLI+Ny)QmO`WP#lr)XQ^D*5%>AQ&E&d&235~b+@J{B zJ!DS=BZFlvKHBA$O5^AbXRXUrN2IV4a}l=VVD@`TM&H%M8Rj0YUJtagod8R*q>oE{ zHKJcm*??JkH?L_xCFE1=jYFLN&tl4jPOV?(8@KSmBq__2d+{)Q!AzOSND;zFs` zA&1nylxub8W$tK@Wsiow`k2V%vr*jENJ{0W%z3(A^cB}Jt@y0pbh4C!N?`Kg^#_a{ zd-laV!+O3VBXcRX{teHm=dQcotxqvoL-AOK_=J8C$rrtIXq(+)0MO;mDi@XLSAH>$ z{wGlJckd|3OYG!sg8EPI8lkgviO=r^brXY_0V+wxe{el-O_yIq{jZ9~HZer+rMtkNHIEA|DuD8BBkHYAroF_Li3)}gIGxe+tZo=g106l`p`R~xID!%d*LDJ zqUX3m8={r>aAwu_2LKS)4jTQ7xhlYapcsEtOzhC0>k^WyXSDuaCgR)qrf#}%PJ%64 zdMYpK;8Kr6rxt~VQaPki{0XTq`80LEq)|C9al51?gNb?&p75Wzi#e`zl9froQIg)9 zf4aDB;046a0H^XM{|l17Cru`|A$f?cgWC7G;!JTP4rY;A8PFjd*omnr$hEV*QV<|+ zk~-djD%szwhR%qydaOjz!h4l+&zSb6bR-~2xWqPTn9x}Vekih}hCbp+!%Wo0F5E_j zZuv(IqxHpSGrRjU;r7X7V_vjC238dx+hH}yx=m_%SUlnWDLV{IsiGey-=60DM0-#a zolj^Jt}BB!6~Lg68#oFRKRJZ8@B}|rPl5(cq!HN4N(J*45?FYg8LEAZ^CdXy26Pl1`2{Jaz}Q(2@$4Kaxq$mB*yffK$Xv}-+sJk?V2c$MJ}$E zNWZ5L@|}XSn9h<#mL2O`zGqN*ycF9y#nX@?jfd)O3s4;NjxJ+`FZ?jU4nia5sWlT4v- zFXq6cYlGc6dyH^b51X@8QqbvgX7KCMaHG?JEGr#T*KkAK!jiKrCiqIXu#$OIk$oBE z8E45Y2do&gjeLc76lU*3b=SLU6mmQ8H?}DJ=v}P=2Y&T9*m#HKUXVV~NUYiN%V@8^ z9WiGaQ4zTW@bFI})RQQau5GBX^x=fP%*Cx|e$B`%awt(}Aos$`Cmz*}PirkX>pJwkoukB)A5&14sg2AEdic-RtHCZnrbb z_wtZ_VRMGcT<@zHc-vVpQKx~`D2l-v$u&XIMj2gPC)uM@?oRst;`<2r-cz`m_Bs+U zl>N0yYf)6SAhFD@2ut=MR-)jskS{o^1}x1@qbTTYUvz7BT7ObobZWPMcp=t>B53Qxvo@GV=wP|12R5( zUTGzTggacoLK$nl$1jw{Y0U9A9#^%&Ma_AxnA9ADS+`Cl3Vl*^6($Zzieh5|5 zAEjaT|BcIswdaP!_J%RbzMF)`h`u@-#6aIQKFh5j;w>k>${o{ZPi&x&9-uEQOj4AV zy@)nwuyL?cXG~IzbE9@ODlngWz!_tVS=g|SKSWOvcdMdMqoJMukYBW31H3MPpeQlT zE)irBK)i4sh=MD?4 zang1cPETET7#gdA70Q*NWDT%OlVe)5GX3bRy{qwuwFF9e3PVkgsJPPigF|p{c z$zf{y)C2YSCEEqp_G}v%>O{=a6sIcTcdH*+==3xvj&2FJ0r$m*Z;y=)Q>6MAi|F`w z^$605LoSCk)e&Co%YkE2^5!l)im4+P3kS-{xVw-Hr|Pz^_U4J{fD!KRDh}P7-#21c zKYOtvO858tZrR+a8C9KM4@?3?{%T$!UD<@%Ls*t zLodM_n{k2BoHO!#PLfztwr}x9A-fqJzPG>z7XNL-&@jVazK`{8$ESEATSkL^s5XX? zkvg>Zr<&(ittVe9z$SZ$XM53e9z*pyhW_JY)s0L%w6`c7Xl&$aE`{?7qC0b@q7c)6 zZ#qA>r_at_WPvl`YBBu25;m7}*=QQ@=uQ~?EY`V5C7xo5kdYiq_ye;I3Ze)6GOga6 zJeX46R@Q0eWBIMK^&QPk3W|+J@$jKF7{^I#gFoe70@bd40EerW;N$3A3wBnx$ttw) zjN zIZL0*4SOrs0G{?v__rBgkt5b7&X!knqAVp`&h$8_G(kx+HW1fX z5f__1dxFUgQ6yOpHdqUnb@DUJ#0a@)CmlM}(;?&WGhHD#k3+Ux+ZpidFJDe3ZuTb= zhl!vFQlkP5=u3`rzHdk}U-!G;4(G)6keTJLjkvd9rz2mtLOUEFR{ksIS=e9&H@>Sc zeq4X00cayCxi{ucl#L9RB$v5fO)%f=Mvu{5jdgh34E$|ibm|g6J0n}L*jcxwMwOTk zdo+|z9V`kquWCg+OaJO2m+!V1YpYm`u4kfsyad2)< zX)%@Q+>W_CVefTDkOr6qZC_*$9|xq3!lt%{0B(55Un@SGRU60ihh57O-}Xb>O1O(M zdEBMWAXd@NuWZ?OOA&lMe%Jpl&ov>WK^ZIt#$QoL#v_+(eione8X;5hXUfu#f58V$ z?Ox-SjsqU?smnVvbMALOpHEuYqstIFp$FFpxGczGh3+@^Wgi9a%f9}Qdhg7^f<7|| z0kjaO239sJo<0Q7r>i(#{dKKdaGf$RMy@W@y4j_+5?MW|pxH-L*K%~)8_5=e{IjB9n zA=}DUc9`+)^81ZZTA?qN~1GtS*33}F742_^=_G7l$kiADtP9IKuE#;)* z@@K2ec3nq3Vm-KW>9)R9s>%^sya|9VHC-}Tif-Mu(T5;}Aa>(eMS@wzmlbF6hvn#a z=ECcuJJ_wI=nQW2bsci$XxDPsHBTS2yZSNK2ABCNR@qr`dH>qSt}7Ew7GMK30O@Q_ z9iIE$PVzkSj#j|!#!-`38Q7|)}wGbS|8n*Xn` zuL_DY46+3V4<6hd24`@05ANnNM`%j{qx0=KC zqzL%Jt(gxAZ(;P~D>o1ewfo8NL=0;}4z;~s^)b8G;(;Va{nF=XR(T7GERCDu(SoQx zAQTrR6IBD*J%I)sWlin&lK{zrYI(=LkYrj)s$Y#P79T(XA}V54w%rky zXNDlzU*SSjtvrhb&)-Vu{Md0uK=vuOa9d1{Pt%Op4dG{SNaVk{boof0DTd_eH>o|f zF5nR`aQQ{@a2Nj)F>S>{xgyP@_|gwUYy+{rOVWm}HZK2tTw(BHbsDUT$*y7;ldMp2=}W+H~r>#=a5OsDeVpX?7nm*9ub%hnssdF&25N$I({}#CR83Vq21a~-W zr!;I+bN&?V-QB2M-ryokF}(9bJHLccr=t|)$H0-yX8%FDqW~|-%GP& zu@7T-TivQ)^hZbO@jc6(=I3ZB2kH-Okfk0>)NwaK|2IdJC%{&{Y6m%b-F>Un+(J3z zQ;fHf(9VcX9eEbZOpPA~3u7APpATKCD+XH!1esO{Vn!+1p%G#1emjqp(g*{M@qfAE z+BzFSF1eWjUW2U~dE-?!_)Q(qhYEiaWRHCvfK`$s-Ex5CyntjZ5 zOM?w;!dOrq1yEObKD?YGY4U~aS&HE6;eAI=gCx;;6&rML`ZnY{>iV`1A*&z#Dvz(M z*jCT&pW*2$=ghS6^h(CV{pE4ZO;(hE2JkSO4nSi`(UhZFZoB#FzlT6@*@=Y6NH9}- z^Fg^73jS4r7aTv1fpD0>D`QmCknEtF){GnnKO#FOBCiv|5J{G$|a@j1<;H;}J#P`Q&i+l^b zU7cQS?6p!enB55yM)y`1=dY0E{!^t|!!WNPS#*L>2lLZ+1>6y97h%x6xF?x<$Z`jP zQ6W>UO3xPn;KFi28&2UKkpUnO547eEjtlUPc+=m}5cKB*oFiO%H7x)gO8*Q8f`bF` zLk(WxkN|KXfpmKSU;xSp3y^?=a^=pFE+6A=K$pqRJ-3=nw-{7_bMz$F|Z z*Z&rwq~zoPf&SyQ7zoi(c3$Jh>O9r8!-Sm;wolp(*CIreA3=0mZnpb2U_utDfZktE zwHE&Jd^53pV3QaeTRP*{K@^wk@poxzD1+k9l&g+E-hPeOdS0pM(p{HM-xr;?>_4xT!l{4HrT%g_shTF;{#x$N3HQ2xS_eYK z4o#>;t=xJ)d#=WD!5)^LAF~Sh`*eRAyeX_J%7^TFtX~W{7r!ut$cHWPH$IcC^5frr zNOcRK`&&;Ie%x2;huAJz;kNvzbPVtHZ#y?8yjT~7s_S2luCwTYg6w~aeDS5nIs5^@ z1F;e+m9^`pj(_qH)(szF3Jhm#ZbfyL^nEN-jlubUe<#?|ZdH9d9)&w8EXt1zKs5nk z{lCrUhQM51gBDc%^+rFJ#;D_d{ks76QcbbzZm~T^X+LR>@{L(g1?>|f5=ny?5sVUh zkqC*+RH;%`!cgy-6cz`20u!PnwV;ZK=$Ojn6)OGsh|7$SKUW+*Yj&gRg;5fCzqH|q z3<$rM!*NEt_?AnC5hGfZ8ieSDtcfcaVl^N`=dPsPWv>lB+gD8ucSVNNgrZbr=# z^5XId-WIGbl};a(G`r(;qt-f}x3Z4ixPdAq{JjFiTG+y<@x1U&R?Bi+^z8`E<>w(} zmLJeYN2{12+hLrK(^po}&C+HuJ8yQJ__eM|h_y|yt1Ni7Py^sP-8a;)B%f_v$i z?ixSMV_+4=3iI`bJa1}N;@axXh4_^Yj#0Q&Ro__ORjF4v5s?Oj+cCa-`}Ac#OLj*+ z6iL7s4i49lIup88WTt<3!CTNqYVAE^5lpXH!>${)uVZYN+-1+uT-I!ke8lvEa9TC0=o-*bTB&1*MGc$mR z_TG3g$Yrgx$}h~H67gZaDZ^l(ZSl6{W1@DMed|!%**eX6Y3E%8S?#)Ibat9;<;Y~i z!d(&bfx>s2GB9+5PVC@-zngaak=eyP{Urpf6URMzoq?Ji`nxU2BmDU@N8Xdz^BIC` zz8-snj#p|^pRPW0$E3lI@*?VGz0QN6eW-IiM8_+ysqd>k^UFyI9<6neQT-dERX~mm zZ5a#ok5OtI5Bx;4`Uv9QXA|^Y@cua3#g*F6IUy z#=Cs?|27xp=75q@0pbAwPHv85Wm$SG0S@l}9y+1q0da8t=cozf+-S{>gb&AmNq79W zlVe8kb1_qsc9H|b>T(PR}mcS)N^zcnZYMG^6EuiKtf?bt=Sm3?;g|j-?SqB~25lG9SS3kl z$tDL%=nVd-L_@_(qCOgxMB(?@gZbXt|U^s7Df^-14~%j z3J<+aae4r&H$k*7$%0yx+6OkU(%syuJ88C=0DW zgjDH+;G>U`eDX6s*|r`|KK(-%p0y!)dHC+`a=~1rxZ0uB>j;C?jiEBJSss$9wm07z!A*h_B z;2cEgo7f!TtYbC9*)gKqyW#3wbc2n0XUz$8%2emx`_@~XRYv%q+uC;TRfRxVJe3od z{`d%Y*|UWI>UinbhG?5f^1v(;zVyPKnLGD;ll)%TFBA(%Xk6Jp*vr3yk3Hz&Mtm`yEKiZ?=cn>Pf_MO^K=h&ko*CJ=9~6saq<#8xC=`&b3l8DT|oQ$ zs-NuKh&bli$8WF-q}f5S7Wq5_)v&BzTgrkGT#<+mj;%PZ0N>QG0`lo3p)r794qI0| z>NBi9u^cQMakE7G2NH!`Y;kyL&k(2CX$+#hkE4MSJHb3UkwY)o@rd{mB;NfnuIAxr zCqUQ0%Hrvx-M|J|$6703jYjY^jkGx=6Eebr^+mBEaE^exK0LCIK9LI+Bjkh<+iYD& zflW5r<_gT4{qi*A@lu}ny>||!=nE-7MzUw17Lw03V2^Tm14cbQr(XOYxry<++|Coq zf)%Np^q$TYX-X6fsp2E`ZgHZJ!#)bEI@ULLaC~I}Eq)hDB%y|Ql=-7+DHH6WAGRG}}*L9nemJ;b&NBr51%TT|t$YDTm z8DQ0#H>)R*uk{$9sBF$O7_KIXBHNCnMr}&2*6b@r2hwH#+`Nt^pZ3L9)-NZ zR?loD^OZ56f5c?~&+TII0+T<)^_AXx2BP;scoaQw2x-x0`VRVgK0nxik(L|!WCPV6 zoLhS_@Kc1$8Ni_=(t-gIP> z6x(^vA*cj6!J40lLK1i$tL`+u(09 z^S|b`($2q|m}c{r=pd|jrvtrbz%N5W{o=NTD=fnkOkf>NQ15}$vu6O-soya~Bd+t! zs_N7yOR5&K)Ve+s`NzM)@#Y(EPp#wJ8>dKP_4a~1)p@gmids|fEwrg zI~ZhpkZ>9yQY}MAl{mPsfx72!Eu|rcg17`r#HkITsOPkdRL?lkiHKd5QUr=S-5&02 zkoTlSpI4oGRi=IO`f{mfUI=m~8NB+bOoLP%8eLr{`Sj--`MU}5|tenhJ$ z%n=Cjidu*l@h`KGmjWB)#pz~)#uWafAy^>_Po&k$m~u&%YbnjuDQ%aht%4EkP;JU( zP3DuNTlZG>W!4;O=gl<5dl^|S(G@wme0e%FaQ z5T-E`m5&%%)@H8`X&{MY_7VF%936!`Uv5Z~`Oo&TPkG+#LyUJhjkMMp0pD_hCX{DO z#;S#S$t>#eZ4z7lq=GWEBw;=4gmMi?hAgIab9nluHSo>_X~dcf2t8Q0*{nkz%n z^ixiIr|o_TX_-mcBC-(eGdnycQU?~#>HQ@28uz!qi^FLM^hX2JQ4}|+ zMgaU;AtC#4GlDGuta9hZJM;~_Y0H^S|W6EcqGz=}xt-xKL6mCtxY9GNIZY^t?l!DZ-zQ|L~KHdRO z@b;%t$=z&ys(drrtcYw_6Ig*eb2H6tqOIG&Ca#=2Tj()mzQU+}iYw6)Y?U{LQcXVD1GvyZfxLhBT?=bT?6Z0ZOZP>w151 zkFamrj75}?iv`p77`%*jCDTUhm|a9kM`W8QE9WxvN?7ts$L$ADMA;$oX}fM2K*>={ zyC$sA-Q^_N+9chOPblvTWf>>JqH~0+frlVhmb}kOcdSt3B+;UA;b>5-_G}UU6ztH4 zn_Tb7G!3x;P8+;us&{2Z6{Nx7m=RZ8U56ia+bQ+17kP4OdwI!WH^`AmV}y~aD@oi2 zy9Naslfb5gNj>MW_87>!bkUhqm4ds1)QTIb(f7P0rC96J8As=I>JplMwBPDSDKtw= zYf;(iB^qP6rTo|Qrqhq`ahCcxleoe3dFd=GH}9TwdU{QX?ns05?s%k^lH}24npH)h zu$Gb}ITnFhTh)8V*?WJt%VJ!8gE-0ZPpn{12}BcnVfLSzQPvO#?5M9f9;mTNT^4;S zoPT4o^#vwfz|N5$65(}V5Ck($salh=4^Ta`MKM{dM@5oxjeG`~6)vKDzUmC$faZ#_ zjC6DVK34H++Lv3(*#@@K9aH}`(qKUSbvmZUrq8!O7ouI^j`E@K{_npj6ADRIT;GO0 z*r;)_eIvnh6Q~u$CdIw#Pu9L{)&z5K2Y*o@dlo4I^6Wdwf+_T?wmWnH;d zhFaR%f}e)?v6Uda(%kMsN>V>5oW_lnOqK@TZP68}K&z!_dF->z1sHf}T|EnQ+Z?Xg zziQqnuAyJ8!o%Wd_!(PZVi#|?j-7_tzCsqeTN!pa{Rzn(K^<-e;W zk9eRRX=hEog=!Q#!`=)D33_m;xL&DuI2Pd7pi`VR9T)KZgdGx+$#IjI(8`3`%cr%L zTJ*rmil*2-7UyR0F>EZdcz;YSX+YXZ<4beDSqNFOuN1PdaOARM1Dt!^@y$K8HPqAHGk6=i-lO zoZ7}O+DxGvwBG7@9vu!6Y_febq9?vQ_G|u`p5o!j;+_E>EtO=m-ef(O8r5jlI%qxe z5bZhqy`FTS(r&UbNz6Y@L~$vIFeNz?AfW!)rwRb!qv1k|N)iuW6cC#-YW-S`w2Cqt zDK$>B$JrXw0bw=#S$I|;ZP8%TOgpLIYu!2T_t~@o+0&nhWKsLV@Wv`r#~BFVU>;4F z6d=N^fH0ce%#aivPP|y~wi$o2J&v8t+Ck5KxjDI7)7^Uc{ct}c1iUg6?#R@oS0}xW zKDLD{YER(`Xgsm88!>jSWtm<<0W^&9;m|Ga!bHIePtI+VN(q%KIF zX@{V|E5=pl5s!#9jA>DgBZBu9IduYt{+Zu7a`CaWu)@URj5}sCipqlTZL}mdU0u3!B{S+Vz!^NOy4G zQPu|%^yq`zf;Tc5uGZ{$JI_ny@Zoan3b6<$>neJu%mTlu+ zGET>dcAxrd#~Y$jp7K{eU*&`6I(;-UBX=h)(e1$^Ls}W z9rPwUHvI(dK*f}a*dS&|GpTm@JT}1Fm1SA?>d9x!olY_IX^F<#-{+v3-lSn%9Z{1dg_UCgN~K+72OxY4h^`uk2Vbu zIPiYV^****o}skoz3#oO7rCu(%TCvWo~Ddcx$%#Ra!m0Wwp%yZns$hucD`I4L*;7X zy#)R~ux*so^+hwxlzbIxh^#v0VwW)S=dDhD7MTO4_{kz9fR9J zs<`XM%h*?p>z(V!9$U^1CV~GUMHxaY|s* zOfdB&HS06+vqnL6DfWbO=Qx(d^KZa`=$NCG%v)oC1A4W^uW@FlI{)<2J(GaP=VYi@ zUdP+eX~VB2k%SP)Nrvl-6zW@FCfm76>UTXuhg+Y&Uaz8&>*F506dN&vzgAXL=1nI5 zJRiRAn?PcLWStixT)hS$#c9?0FL>H@X-7+)_V&OF0fy2sft>28!l94&TbCuW`EK0V zd@r55u^;oBz_;-Qj|9l1Z54dC#a3)^Mik=aQ92ZPq05g{10cb<)eIs6B*$(vfxDe_^O?m z+HM>On`T0V)d}z$Wy}w-@#jZw+Tk*cog!2>(%~F?53zIGl9j&hySDGShJL(p)y$S_ zId)1~OJ!JZ=vRz=RE{LyDQibDm!qa5?;7mGk0FP=^G7}10_8%_P-%|_tyTO8@}1K5 z6)oL-^g@jN3QTLpwL3|h==XgI+sWg<8DCQ@*dX@hpDy0ckK9Z;r~bM9I)qqK-E_Am zJZ@$~8(UtVeAi6_){pj8kcB?dfY0UspO2tDj|{0xr= zJ~|{a9A@;(o$u11islG2Tqm;TEgCxP&$Tu84>{Z9z# zkPeUn3rfGD1CSAMzV|U@!EWvzl$`$oKUq83de~9&a`L8g{Ks=htoHkR2nSl{q3+c( z+V?_s170;;#>KT}r{%V}>EN`oFlhfIF~Qo~tNh9}Z84Eg(#wOiXi~kMcpwO|wg^Gu z$B!oXLcA*c+TA9&N|q`fEgpAxd2=2|T6t?)M_hTDamgQuk&=jFI7)6&$o2EMA=JY- z`@1)8b#3`qVjr&Gbc zq-o+7kuU_Oo>v3VfYY{EoO%Pd+Tok4qc)1}r}N-+o-_yT#3ok~)lxX8_rWsz%rvx2 zbRX`AJXI&V=jwz|BS|1(r|HklrgqQa#^Uv7;pmkL)Fya{q3xTtggJBKk2a2wijTM` zJVc*SC*?oktv+o`*4Y^DXKK=M-AZ5EQI6Ir()0*&BI;S-;OWarnp=b3HP(8KR!QA# za?}S{mllp(E{Ufyh-1212YH_kN>D$-h9Mjwn=KfK)kO4>DKLD4n?$i7^8WpDhI_fa zWOS*!gIZ1s`RLa;sXmgfwpV7MbwC`CinALz36ZT19T?|pt+oo|R8J!s4xRJ1`Qg>7 z#1_To-V_=4-Oq%RKyz(e$P{+GH?x-sw)I3%=E1EZ4k z^$hZx8jwUvj>=kZD_FQN(NeBoe|ODO>b>2wlA0L+!RF~Kd^w7@=c&5?N8WPi!-LRs zU2&7(rGTx9SCC11M8Fs^weWWCwhYms}Nk=(?5-p`A;*^waO z_Z3Rc-Zjre$zb;-U%>tTcD$8f^WTjx5tu&YS`gTA_YCNlS7_$?}R){{K_Z-w*oly5Q#fuezX{7g9};z#Y66 zxGf0$woTURMS!R7ftO~iho2VuMFMw^x{Z;V%)r2|AT@O)GBlE>j)OQRPuy4O!z+w| zo?ZsO&fwY$<^=nckp7>Xj9ZpTfxlBihdC`bs&cCzQPSXrNn?*dz#yh0t8;uXz#)X% zUa9DFSrCprpF&eD3LB)pS$-Am3&+4Jx`v3ujw_PUVI3^7w=m2HVW&{XTC#`QEtK|r z?QHv6_p>niHwPTHpmQ_)$zNzG=A`syXl%dm%phGE+{&M+CX!Y9OqP+JgOs0wU63(; zVe@~m%~v+s@Le+%A`SjM4a=~Nd)Xp>@@yWqOya&S=f9ZNwbR6B=Y1X|o*Z#(+G!MWwzP4`^YOe;Hm4!Y} z?}(RAq8L6u%0t6;ySQmCQy-=-Vy%2!G^>!4Z1osfr7lwJqPUZi3FOfnElyD?PcbNF zOfpC;i=XwZ!r_CwE_Frm0v$D?if|Rm;|=`37lV|n(?-|leWp5+m@)0ofFUE8SjqP+LXp$f+`g^Qjffr3L}2TE|bZZ3WBHwDI&CCAIavE1UbR~7x-b4 tAC-YNCmq{gY}@GAwr$(#pkv$fzcX)kQ;U1cO=OG62up#~q4z4^ ztiB;DyEr3cS_e^H;=eI~HMU0Nw3xe<^j7o2!rVeKvg{J8B1-t?uwSv;+=}dPo}!E+u}p6jTX4bUeJjGEEt+W(+#b3Y>ctEL;aj6GojcDVrc*a!Bgg9T@nqXn0{Eq9N~ zWo@&PHL`josgEr9HES$-q9#>5ifdO5xK;TB;33Ecca(ZE@v)_`Q@_oBTCJv0iaf~j zCMAu3GSQgCl0b9Bl_$DRX(6}yf;t+)1K5b+ck>zwkjPDO_g&vvHlu-zY%_JKZ<&MY zHF$+BNvRuNJvjUY;t$c#xY_Y|3`d0Y=rL>mOF;ZWshQPciy*6^8VkOpvIl46O)+){ zutmEYXyIQPY)W>Q-zYjY$C~=;v&W~S+G%JID#+eumGMs^Ly@mS^&3HEQpkKS8^VhU zIcXFw-jMzC-Eq%~xpw!9uM`>t#Im>cM&%k3@}&$ky2T5+Y^e>az@5J!SKl5j9z@NR zPYi@)dO>8R|9EQXc-0e6NU!$m@q^nPP+IM(!g5A3z^oqg>{!>1+B;2b=Dm_mj}M|8 zL&Q4|<4+q9gmB~%AG5c**p$8q<#)=3#J?K*2d$c-l3u`2cE1$;p}&)28qYiIETkB( z^?2lQMw4!3$C^b|;9yEzF@w7zB3X;%%NLsxw;Ah`s-GT3Tj6$ORfa`kv=P7!G-%us z3Wizl1vFqTK@sLcL+DKy{XMji{6m_f#A%W{MvHhyCb8a^^&{65j#qUOQH`rBp`LyS zZiWi}IJ~DA>AsdgGTW?|kSGtr>njk}rhw?4~`zgwg6^CMq&U;fw9#L^0|i06qLPxE=-zYQ}B$02xZ${d87o*ZufiArk$eHX=&1A3Cq! zlq-UYMOvrgSpcasf3!$4`b0Xmh`bQ3%&VTK&g`hU;bZoP(NhI!VVg%%ImsdcsSNQ888SudpkPaVy*-`PnEmF#_yLH2obv!QD z@H}Qq4pn|Q8qO)GP=jP#ymrHEmI#$+EB*bAOjzAo9b!n#RJSs^jM2 z7a?%HU^s%X7zU#&@$CqJO7?%;>_8kt4(>wM4CMn29he#nV9Grc8_EySCxs*J#do2n6r%$7u|*Ev@gFVwc$<8v!7-q zSAHO20V^?vKgNY3Gp4XOk+KUX1on#MGalU2219UcQ-n47>1Q6P~SWjQzFq&(oJ;)3ufsA=|#!PBL_$K;L4#>;Crm2EK} zl_ilmQ@3qIdWkuWz)I-qaziUXpjkfI*!s-s0i*EV9~*>$zo2Ak>FHZKi?{{6=aS<6 znTvB?xmx3Z44QWiU zJl@uJj`~}o#Pm2)Ou4%TqbrSivhWxfDZkusOV2t>G51$%WB($yJD>dl7OJ;@XBymo ztgiZ}PD}B(Pa2jpjru1Nsxq%}-Ls=?13TsMs3s-}GBYE`S#Uit2OnZId_|ZC_EVCf zGq9LgN#3)Is=|}jlc?HP$ai8gNxiGxl7UNi*`@L5@yFrlqNV;Cx)B@{J>S3Ldw1E_ zJ!@$7@98RRh-Qt7WQ+~krx$%28^if+OL;U0c;xsr-ZI&Lu}wojeava88V!@21C8UI zf0URBWA534qnwWv@oM3>&-*ZgpmsNZS=|Y+^2&I1;Ib>NhhC*cuRt?78)>%EwNB7m z30q}h+*3K#?B*&nI4Z-td7kj>`t*&wcN|xmG4yf1btDO-T=4Y761?1R<$M(ix=n80 zeAQULHeml-X8ZZ!#ql_4Qf=cz44~}7l0B677UHwDd^ESlhH7KThziO>BzshjSQxM! z4U{q7ENgIV_TX4s{rlaTKS(MY10ryU3;Ljbw^y<9qwP0^Xoj!Rq?SvMyg{AXqwlIf zLW=LA&l&RuNzBJ|{WZKR{LM);t4pch==RG6-2uhc_+e+kKYG6r4cKB14bhH}fR0VVWOaTn8K$z zd%CnI_(NuISD%9(7uL+qw6Pr?f)11^0R;`5nf-q)!KJoV++hof-*c_y%P`ImT~v`g z49Df8HarOltk%3gcys;n#mp zNeucYK81hk!eN`+`D_|Uma=G-jR*#x{qCu;Ijp^f49|h z+hnZ;xDwshH%J$SfnVZ3B&;v(cecLF&}>^Kf~EEmbvp~lImSRaLQATC+wJIy+u_;% zez%6gkCV0Rd@^Xc<`1hSFrNYqHEw~23_HWau^u-cB*{Z0UPOck~QMhbPy|2Y8~tJkXI8==D6p{ z9wX|ZUBpIhTL>oO6Xg?`5n(-BF=`af@mkqJ>Ov5l$d;EBogxS^KPllJ5`I`hXR!BI z1C7+1>X!+}RTt*uYa*+Y6+D}9%YPj+Z)wKODi0XvPqn!jVGt+~Dljs3!ml-9tNu2e=-|- zxID_ib36Zjq_qC(L%jXL*uqfR|3~=`?@Q^m4>f2|B=hLUtZ|09QHEo>MW1?lrff}_ z0<?>ZEEt5`{H^_mtapURs>!A!&JK&+| zuIeowTUH(3PAxOAxnIeJ;2*U)`}h0~R*cGD26-_aX_77Cm>g$3;cq!rV#+0{tIi;e zF7D{awU~0g1-1gn)mC)-Bg|S*I$CjGy3GulYmgGs&hFShlCLX)I;Cp+p#@x?oU7cd zVpou#JApqGcYn3P!OO}DftktuX@lfu0LJI;lUTkzDAESAKivq7e(7?TebM)($BBM>eI9j zHj#-6@md%UVs@>YJJY{Y-FSyXgFit^=%RNo>AR7iQfF{j9$>jVUme3?oH_;8L1m z#12cL1wpJ>JQUew;|1k3RAyrinD^u&!>%rTO_hQyCo?CZx;)@J-UM1`UsQX&w z3f`Rcla-+Z8H)2$d)G@YcAa<*W~BYsUEDA2niK-!X%T+5@k0_jT^lUnOGepsQq9F8 zN2>f~Z>_cmSWjp`IfzU=wpAO$iE>L3}x6mp&FZ^BC0Zp$L?i9WSgmNoO!@ zzXH5}?e1H-a*?tYUCcTz>}BFb{TrlMCLc|Q~XT?g(auvq?gXN@%$$gU##aPwV2<^o0{HwE1`#Y z@Klq?F!J8%=zx|n^@5Kx>KXwWntT%2CRsPFBFT8yEG0Jww6PkD>*1w&LRp*&mZ&ix zXuz4ud)AH0tOM6a6+r?A^~ViqVw6dFD)6$)iN5CMppR4tFgTV(yD3Q)h`9=)J59jP&p3bpE^0|B>i< zYOvr+y|Urmb;k4tO;OS>E$1)K73=$Beo(rUuGAFUD+7?Lb&pzUUq))NQvAwz5}8pA ziO9fXssAIi_GIKD_VevM^;96)km$0006BUWea?oe`(5UA0+gej_!+^8kO)@E3`E>P zPbjO8PVvbw(|29q&O(G-Ic~YVrV5@fEv1QUA)X3$SLRT>U!uWzynj}e$BJ?pGbu>$ z9j|@5h6jl1bA2a+x>2bngW{YulF{te^enN-_}kky-jLrbld`?d?oP7wcOKRnBE+BY^< zX;wQRljznnxU!z?J~~mjNmQI3x!XH{)0M!;WNlaW2Z6BvDVIT_8t+P18?7;7m0o6w z?F0y9_Vc}@X&v#UlLs^rJ1inWkDzIR28hB|!J;Qki1{QNol=90uA{RybAZbqJV@7{ zpXdfN-Sn=NK3k;EXY+sAhaB-Vhl-34o8}Of1(|}R8`s5ou7$N_+HDppNOFO+d%$db zu0m&hkDt~!1yiynWJsK@orCNd-ZrJ~Mgob9S{ZY#`YlEU#b2Q2AXOg|-s`duG8JH3 z1Rug{dpP&Hy|G5*kp7%XWS8mF_~V)pPqulOMyZ)dZv=-9kbex`uU*n-aNb4?3MVWG z!>*yk`o~F_J88-0h_Mqbd^U%G5GK1HhQlH3x}bgQ-aK-;^|43LJ=Q_q-6B}f z;fV)Wg-ZJ(S>up(e41k@hYuTkV}ge3%iBZ_5m~}_c1i1%611l2$3I6#O(xiS4sFc&pbXYFoj0{@xzD2v~ zxP@Ksl!2FmAGmWfcuL+vG0M=m)ztVmu(SL-X8_JEn9MYNHyU;6`%BYk#W|U4>3D}4 zikx2<5QDA2^uDifD4W9+IGLQz$13_Br}v zqz4CzNu1>L8+ONs(9HJR>ZmF8Q<;q&HKUBu4JVSg{FF%|dIt@uIJ!wC(&;L4GaMr< zMp9y@B)z_Vk-%D{tOKr2G`OjDm0a-ju`C)})x5<3g;`JII}{Ryf!`?sgD=k#MR(hj@X3vvjOGZib2PBvSVp9 zKNc9t@RX=FB4|vg0nJm(mu$zHR?~;$V;pNj#~T9#)*a0v6#yc7;Y{)|3Y%#BYX*9? zJGyAyGA6Drs@+K=CKkp(ci6z8@(>|tca-#TseYSfQRf)B0ixSrgddha7XLj|tY4aJ zD=2|oHo?EwryeRz$aQF`9UW_B0xT$G$z%4i(j&RJW=q1B1H9^cAse%qrCm><0*E`XaWQ>P8mZ!n|b*0XsR zb9K#5mXgRng`$3oXuc&slWzD2{2&lJ=Zt0s$4(BAjhsy~oTUJ|J`Z;_UDMdo`sKjU zk{+cfkeC=@8D!1uEL<#!nAsTr*Y|X5E7{|=qxh}X?j7JOD&i%IIQj4S>n=2j=@3c6 zH@Qa;;_2MBI~HZrakK-w_HC6Z>UYx84L{>)HO`5T4;(`85!}Z)2gx~;WaY)-+k?MD zVZWdb9@#UI8wzZMg;n4W3MdBW<+?b2VIHi9ixldi;nogH;-~P!bQH!|k^&>>@L@)O zBy`|^@xsR|P|1-THpWMoN;0}UjPS^l8%v^E7&GrcG4~y@AcKn&F~b-Ktc&s@1$qkd zwzDdcas3Jc^mSPU33UyVB4LtmaKm}`49k#%IIu}s{7jL8>C@p~!J;=zGYoTu7(b)! z28<00PVnGC`Vf(&Ho;s`(14qDbXouW%DvW6LO5ivzNt5zh2S|3amge93{Z)2NP+qK zbjoyHltF9pscb$Q=*c?z0FS|o8(u8=bk+_hde#6+xG4lQveEcS@`NV_@*h(Q5Nn3$ zPIdSPwW=|JKNOd+Cl##m76eWZCPll6BNiV8ab10l>_LSGqM4U}&H{B<=Lj~1lTpp1 zID*9eK~57LvW(=X;F>(n*~qL%@cHR>>bPh|+mYP(*)-?-XkDe8SaFiJFyW%svb73^ zz9aDCB9Jdj(}wKV6h#D7@YpB83JqQav?bsbY3i7e)<%!cmT5&h$8c34KT5307jRux z#fV(B!(4NDJ&j9hr-28CsK$^Cehz`HS^6}NsP29 zzumwLTDr^{7pG&HRtY?MNxSuzmy^!@KpwKKx&sM2V02y9&JVA`E_2*2KbsakwmJG; zcj4Gc97gNX^nlsngBh1ysp$@*l`{JkzOaI0y%UB`l$H;#yh@wu6JMyaXL{yUtkw8u zBAU)Ieb-Mr!uoyf_c|n>6N$d#9D1GiVUbcBPmmh;p)GEome8-IQ6DzbKl+N*A_uKG z5m#49=P_3*9C2FDHq|yUDz;*8Lnk7kys1Zz=cc;YTVpqH_!;yvySEiYF~5j2g;A-eExQVE8~5g zg4OzL2wbQ?YbRA*31#|v=Or`N{zpu_?xzXW^n9K{^ru zY}vlTbNPyU`*cR#iizv+n~im@N(8P4>(@w_2v&Ah_mq-~xY`5KED_U!qKR~=4Dn)I z4HhQYD8jVH%^mYG2*bGh>1W~;GuNQV5=}z=HuYyHm4SgJ=sI=HL(z0%@+N_Mh)&)Bp2>c$Sw_dzm124=ztTh`J%)V1rxTlQegrDc zs@S+_J3wZ23nbWcH>_do!7^ExdU#m#nbi>kddbE#vp%Lhr!a`eS@`v25HgpTrh)F~ z?TF?ix0Fgx?2g=3{1{8*8bzV3ExCi7uXlBBJ&vr!LgC;A+U+PXWj=H5*b88`^DVc>qCN5u zjuam6*HH>_T8@TD`di%(L57p|8Z0Tek}w-Eq%mD`hjEB17nOJqlTa6C!0BtN%0~JQ zlSm)$&x21E?>7Yw7db3WSEIZfJ)L7KRB=n$fe4D-I$}&4+Y=tO$0ud57H~-lPK_j` z`($%t@D*yF5x^ae1aAl$KSVTj*Ra0?6jgeU)mtZmXZh`#J+Jj9uGCA^V9J?k+o zp2$Wnmwk{kPrCAH+hPZE~^W~TAd0a~huWlcc2W8yuC2@vk z*KBuN8Qb$s_9npAM#pY*spZn6Ct4c{7LWO)l~7Xl%@IPH5h_k%%gCMcs2nrJ5?cq4 zl*1ZSl&JX+)YA``r~|7uu!@-p3$1%rrj~ruB)^vAM_agS(1cMkIOE5AY;jAoCVmTC zWaDUIQ+qXD@(_rO<+w8FtN3JAt|k6Ax~gpb6nYF9014!&$6 z#}7>1W*#XW43^u**vrQE1n+^zxrk+nW}?xxBAu1On7Bb4PFkq;_T3{}e}~rM>2rJd zWAJ$R@*Nwd^cKXbs7O^&1ti?>UujqD0}KBJtRvPeKwnd9-&M$H-kwzDC-bl0(Ad`< zL=svXDGVs+iu)U9iA4Cg1hJG`=S%#{GZY_!$Xc(%BA|w$#=LH{O!47GmIlv0NnHm; z2yU0Ih(dZ$a)-{2;h#pIa*L;|!{}Xlu4y$#T|@}2ge0?JXj4Dg7nH<|!2AD1-Oesf zW=6LE!|aW%VVT$%i5Q9ghw<|MUo8mvpBQA~;!GnF1f>G1HKpt~B{6#5HE!6^kyEsA z({fd^<-Ls8tXfU-k#gY`F(y$*b=7QXK9mxZNNPh`QLLaL7HcfPtcc-y(TzlIk4 z#mS+>z(o$&K*GP@XGc;dJ2uZpL%XcEj7b%`dZ&#MMV~z8XA*{CA2RL zuQ9ltfkjd-173jDwz88gw!lc`xI-Vy2o;+jeFZ?o;`(HwtZ*%-(VG?Atn9J09y~cY zSe}0-g@sfCiA_Xvai<({~eZQDuwF6eMl1190P1axX@BRzM}pB?SqT$HrjJ}kmVg2Lb2Wtk$+7!UmRsnxEuohev}|ms@u3$ZC2-mDH>^*(rP7;^`?VWC9cul0%C^ zx7Ko325foZaOqi9dE_)2qL$K71>X_> zs3LS{O<6B}f_H42E!I@KH>Y*%Q)i}cwT>(!rO0v{;ZH}`DQ}^8=yE5(#y8zYhdUhQ zt^(@wHD$&8UxNSCg42l?mji46DA}PGY~IRA#)3~%UpMQ1!o0;W>11^=a7swVQv^Aa zZ@zL3iq@HKEgPKaxD1^9rMQLG0D&|C@z*4*Rk! zK_okd?$@I+dDJU2ow_5Hl4v?+PuRuFd5g_B@4CrDmg0m#&CaaxH5)VvWiTmY7<)#N z@>;UhDenVSy0j3!Fkk?!H+@qcVsr1}7j+;nNvDkY8!m3cnKu`92JA2~3;7f~Utxcu8}VY+I23Jg&kTh|XPZ_(x2{!+5N zoC;Ap2%06FL5Z{Itns-};;(VqNf@iM=s%iCvXp<#rQnh%7^AY`uh84(U~p+}C-Jth zI+Rc?5;``e%o(uaku)T75-$y5^dz3KNlKDeL2x3oS!QSSJ&w z2oM4+fNx#fh^ftx6Sx2lRx`0m*=%KOKW4^^1uR9SjA~rMbP(EOo%>lsXu8HW1Ui;m zpo3BQiVd{J&g5k>ZKKymv+jHMMxS-rYtg%cg)I-Z;nE(h&jtP82qd}RlxZ@RdH;t5 zGH({5t%w8GMzzjYuh~zcw7G4*{rh)kAIgIplP0FSCJg84EyGIBgIuMlFz&M+d@8o3 zsB%Tj1$OydOc@IBoJ#|omfmKcd=>e1mf=S?^ovvaHAky{y38z1D8vIxZ&_X!=WlR4 z9(CCN&-rKPO#KUrj>5&n@&A$_W+En57WO2D-xv^V|4o{b?tkyG&p#BiHy8ZjO!~KT z`nR|713MvFK_PLsw&^%Qg&k10ehCG3c6R1L=7rwNVNu&~6wYk{KOAv>?*7 zAf9#Lb3YQaQ7=x8;2Rp;e07cm;y}2ay+C*b1Q-_cu0R~U^I68WmO%4O&#V!e0G;`* zCB%GCb|_H2?k@_6ocQL-%0dvD%CIn~sPb+&xV3fZ;9MAB57em{vJ70$f96UMu8;5+ zc(UAO0FX8kD2XuF1lj&kJO`rF;g!w}4r&j^6VEl*e>6Qj-4AvG@1cXAPh1ME=m^36 zVOI5$28yBq4n?2t3U%qWEh=xc|dEfEB#`*{D;+Sc-@U)uo1m*1n zxypNOcSOU#$Ey5mKMrTTNQhpAVFOYKs@d9MO&) zga_b3!t{T>?7s#M$}$7LW)2K`oDfqDLB0)6doC9NWw-B6sFN>(|I)he5oO3;S9)Z@ zXN5xCI>*M0-tPKu!0uT<@9W$3l~C!+0Qd9Tob15d;<+^UiXrHmu)CaZZ06iPs&&TI z**6R9*Ucs^=ZAp`{+>Z04QNZ_OD{K<2C&$wh3sC}@P5r6sB0>iD+s3+U)la>aCw)e zdmbm$2+jqf)=!@=P=f)&!h^f{J>M;t)_%G9`1ful38?V5AH46Ck>*JcqWel`j%`I_ zcXeZb6!zgcBN0|rBI zhAAHmw+*10W?#evAeH+-#I;=M8hH{zi{aD;RI|;uWJ)&M~b39~5mp8CqYPY>6SC_#*7{Xdj9NsZ|)Xu+Gju3u&;Y3kMqgzo4i&&SXP~{%}P@-8ODzgmbo~8Ybkq5Stk^zwmdcTEc`|r&hhsEL}MV3DS zW&Zkw^jL$i8zHvsUF&+;Ne(d$5sVs)&j3n zs<3yW`OhX8$`7^M91)rH5Ek&CoAqVfPP|hrIhRe-qbZ;OYm=$#4ZqRSa6{^NN^;Qf zh}KZP|GR}WY7Cj4B-}_|P7(fSsrDs&kJRl8*aaaFv!1jAZDQMO_Il5|J=l<%AwNOg zBhwtLS*WY5-k*cBJa(U?PU!NgX>d}w`<^*^cbU2lxj{bgoK@M~pDBoxNI{r;wpN&7 z{pokNK7J3ZK0%xdeTG_J{LYStaXDcB8oPwih{c>a6yJ$bBCPJ+5j=Ql2+!R+%!XLCg1=dXJL~U7V-Ijs+b-D;)Y` z5a{+I-}s{s3T(F-dK3G5%xwy=kLQPT#QXzu8)_cP?fYRrW{ zEXA8L^G?U8V!)kS%f8}=AHn4CWu0Sfb`cT}i%Yqqa;Zmd*%?xyk2FZGTfC1#H{e%V zik$!U#XGM>u5zNT&ENZU+ekD&LKfBVtt6HIqY?{6m({vzi zEs>ZYlrXpMX^6B)^b0r*p*}RUA$5_cMIVo z9exkt1&Cj#Nul(cO380(vo%Bwd*@HJvTAP;!qa=dQ>vf|Wnz4=pqAi_^c9*to<;TNFVUpG`lOxpCWa%@s;;e_Y0SAGRX zy5y~mb14Uk$#CUgl20)*y7(O)8^%h!4B1kzY2Pb$93}CztCzfWGuPe5R4qt}e^8}i zYHdJ|XoV}2uPHI!;iVIW4jaB+LvCX|>M!e?fXFb#JSIsQ?#za3i7MsX z2`2mr54xzO#S-IXb*i3zw!xCM91aTGd5+8o)m;06V>~OGy7|kcYphe{TK-MQ%%y#q z>fX8)M8V>X1tUcA;o;4aLLT*kj?67Ad`TAp(LMX=6|63#JAn^>GanV^Y*pYp5d1sb zOny7ypF)^iPcY>*|8-#GzqFm%Yu4j>j{3iiIg@CyT3r8_Q=<#eGXoqX3P-jsu|A^M zBgwf%B1%$Q2?}8jk}7xJNTUN-r2HA&E0pJv>>@i1LtChu+!7CpMGDT=>Q&3z*0@VB zhGk@MN0NsQ3R?0m2je*;xPkyJ^jsUg)|KQrvva#QV;R4!_b7B{;_x60r-%i3Xjzb~ zC%(aMefLy(jahP!Y}DXJGM&>IB)3CsU~7ihQ8wpUC;Eh4h!SNc6mMfKWngg3bEjl;<&r1%k`Vl1kIBm=sNU zKSHwCqH8YZGp*CPU#Ft$g5@yQ=0d$-+ow~F`u=X%!lFNAQz0Agz2-3UBJ@8Is~|=< z(07RP%s@LSP`Rz^T}&_}7v3 zU=+mcdS%mD^U)`rOPrO8>h(wG+D;I6O9h1Fp_9e_$@%(igLhHOR8>G*vn>K=cm3Tq zMCW;tIj(St3Nm)Uxez)-;NBUZ)5hY z%DMG2jGX1G#{u9IN3S3PRzh2L(V6(Gp%wd>r^UAD?{9M-xl8N373yG~gJ%mECUKNE zTR~c$h_7n8plSoD_-Dgdjeqk1PeI`JAHM_Rw?RXjo<%+01PP3p` zYi74Lfp5N=rn-Bq)wVf|4U*cE^f3O4wHiv6EvdF%qhBIOsI|b+C1s2ogI?RoeZV3V zX%YKGx@Ym4pF(?V7u$zYO@c1z5mxkl#!M)zrv|TA?qe_vZ1rk~2*=QpM{&F~CfyOr z(~aJboEG5qJN7}C+hKxjGg@nY?kWM_Nk#j{U_ZgFAnygnFH<53ALqk)cvNzO2LNi(;RRiyd#k?sBv@6QCG3|L~%Eb)CX!9*2 zMUs3bwPGK|u7s8PU|4Gtf@*UAK%TY^RYCF%-1V$gnop0<-ADMtigm1EP#wC5e5$6& z6@!|sI%K_|t7W1?o2?^=8l`ohYOC|(Rgx@GjNO~GC4A|uv6pngy4Euc3)Au{52JdnmU8aimCCU+Aga8ndDd& z2ZA{xiL2~fS+G){oW8)Djoc{hqBN`sehy1Cod#I$aQrmPW++J>F1nIn{aZ)uX*opO zf@THjBUaQb{@Z&Jd(5ws^qX=l+KD0BMS!%HgWbqYzd<+QMjehuy zvskE7a&S|oFuDU{l0>+VqRo|KB!%p$`Nsd>$<9PQr>ln$|v&7vSOf z+A}(H&jr7FH~O>THzAX+QU{S|S}goLM!4fy1MhBAU4S|7`o=vcI}Hg7#$po2Wo{7$ zlVwoqeV`C@%7bFYaF9rjEdjKg*4p)MyniwVUsc01;tw2Xwx20jLccr8`oCVEIT^v~ zR(}N@hVC0f{OJ?mgukzNmNb;Mf(C9S;(5O_4||Ju(o7d7L?3KKPzKsK6>ALNQN&_! z8O|o-btTKEZ<1VILNdrdskDD;(+`i{a3?^<1*tuccE}k}^J3HtnnKoFVa}V0&gmVt zk&1R}U8e@H3`qE?-Zoqz@D+Hwk1P*yVOzj3^<{3i@d4B?n>FHbHfoopWod?v!y$@|BInN2iby;Q${FoX@-nOW?UnD5z z-Q^BNXbGAmIvlMGa!V8Zzv$IPq3taD*>GO;Gxm?rIYqHAz`zF9TTCrDUT`#BkZ z>==PJG(%w0BAu>IcHRLM!zQ`^m~&p^B>!q!`#@7txC)Og<+`y7iHe0gYy3PZ{X$*Q z8Ng+Jd_70UgOm%El&>kI)lo|L=Q(%O!&#(nCE zgDpTmr8vOQRTc5{kGRY)E%Yi&SGgUL09iEu=wbIQ0a5;;p6k1N#kc67e%QZ3H?Cd0 zb^bBKRb;lCp}O`w^0JgA4oJUV{ta*bp0Nx4dd&EPQRm}V9UsQlgTGK;VTP1D!5Lz3 zNEyr+CVgLsG_?VI9p!Wp3laq@IeWWx<54>+gvP^NabF_{F^uo5r>TkF<1Fazf6|e4 z`?NeR{6#N5V9?3~?7su{lwU9%vW5fSKt1E+4j;4jxYfNsp08DTFvU$2+eu^zd+OrH zcx#H#h5cp<1@oTCwWWG!sJ;&C&o8C|}d`<~FnbIrV{0moYDXs1xs;jHjh*R$3hY_eP zy0U@AKOx&D3xr&*snLu?{y;6OBN9LAq%2lRKwz()1eG}364h^M@GH}To1HOSI91eh%^MGNfFaP*|O`P`&F6QWb?Z-uqFORcm;J0 z$w6&^+tPh1Kjk5a#mlJiOg*~{1eV<01p7g|POtay3v0V|XE}p-$rh;|*vY7OQ)L}N z_(~|n4Qr3%#M{kOSU)t+t&~=8dfz6??l(h%d0T+U5L+>ok^D3Ro1qCc-w0cK2kvxyiQE?o^^CH-Ao=F$QO$n7}s!H3YQXRc8oRFOD9t?2$fRdyL;-m92L)Z z3M^Mwagm5M8aEnh`}P_~_CeG-2Mz5+PJ7ZC(R}!z$ z>FZu;ocCT*`SC)B8`=_lhxeU@myzm4KsxkOZg_<^Sq{(@uG&r%G{3XVuTS4QpR9$BroZ zM^2{4&Zl*d)D)O7%=@V=x~-*`+kWf z4by#y>32Eg(y!Fc>J_`Q`Y!pEim_K&i*`^vHKHO^mtjPf3&=Iz?eRNyZu)|sK{gI1XO1z@{hpd z(PP1SPot^RkQL>S^pT8%@JabmY zf9?-Zh>CmQuhLaN`ttqd=<5~8Idw0_Jbq##K`5%-?qd4fcBZ?I0aI9rZp`}(nBj}W zbHvj-X(2e3&<3%5S8KOdfrTZGS2Zp;SVnvb?CFnQ3|6cuXFbJByyb@)0AwK$w!Y0k zih0koj=REF1cHI(3Qt|#K1wJ#a2Rh4e^Ok>%?ifsCQ`Ay`If*SqXubvNDC|-AZ_2# zv}hfM;&{NtkS48adCTyN?d3_AM!n*h*YTS1i_P6|y83*h(AhTN_ej$$yff?fvQE5A zE4a=TFOuywg#sp=gf1{Px5j%EN`)LWJbfDE`EvZdEAw9DT!MGM1%)y#n#j;$f4Xbe zxBA2vX%85Q`NX`u)HIIVhA_@j#&x}4vh5ERIX&mEqCg7dA1hqkVkVL-V(J!!o$)1W zbVV=iT0>Gtv;%Z3yjGXF<R8 zmD*tU!)(*#oT&Q62l7Zj&Zpjle+Ho8_%b_#Tnm|>o>=)|&8i4mgumo=VibVB;yh|e z9wJaMkK?i7fJ(L`h}M(}I1m$mP(b)BY8BT7qnzjzewYTs1yRd~PTv!+`E?Yb*Bqh) zbG0~KU88ASVQ5s~$d;?%5_?4h{*&LLAg9o$<-?%{p~EzQhL#c3SWGv{?(F# zTTDC#A%E|}%nADt(vbM3O=pflTP2=Usls(>j!EO(${60*upyT%EV}ZLS$0Tw_RhO* zpHbE~2|mx#ILX;iS~hWc-PCFMOPp0gkv+n!VS|!G!D|}4J6*L@Eo=SNlA>7|M!-SL zyv5epqI!kkvTUZPsHuFnf3_yt=8Kon{&L0ZcdG(>|BcTkwR#+}`?+THf94zS8(3Zb=W&Hkr1C|;!(JYmhjE7mdd>`ShZn|>SKTV?gRQp^opMpMr z7&YYC_eD~yy`45amgyBlS<&0oe=VY*Lm**RY`t4!Bi{iE z8s~=NrzbuPDJQ1nzBZb>RWyB0CFHA37uX)xIaaLk(#{{6$b!F4lO7wp_Q)D%DS@zQfl+gSKRUkTf41TCJ}1vSb@0zb@Vn?pkyWC%D{vcF{;)A3~s2$*qV zTFDH)e=vKmreA?QQ9^n_UJDLf%|xPrpyRT?Kt;n5T)x~DQG;2Q4i3}V7lb*u?qy^p z&90@@?_bVm3Jm%}(68zE zXm0SGmL$q*8#8~l;wF;pr{x4MdGi;dKwRpme-gnltCdk@mwUSKWM|u&jp?lJQ?*M- z+8p*o=j}i);?n+fg)6CYqq2veze;6_QXsax#Jr`6NW#H+X}Mba7L||i{2wHoMSo~$ zLGi6Lv9>_u)rTAUZ=n|DVH8TrDR1mMrf+lJ>LOdHZ` ze;%N38|={4MTUD1m;4i>Ak^hUhszjYCH*Mi&`7kC4olSFo%YAtHvhQ-Q2Pf2bpO*m zYE?-}c`s~d)Fe;ESuYV|5CCBTmD5}HbkOeEbfRkI$gis%2tCm+R#48HxUh>LLFdzD zj+-_!{PQ=hjf$(*z=4c^d}Vr1L#=nRf3j@Ii*~9{Bc?7M@8+G+=q<03s|TU6ml|zV^J)iuCBsDbHtSJdUH#69RZ_>Spu#M)&wA#i zieyyYK$*oN=k_kFsvFtFG)*YyiYH9Ajrh53n{dX{HxfBDUs{cE-|gYT&c1iJha9WGg{Tyh zj2p^p$7^{|&Por>wy8y{d`Rv-e=kJ3*!rRq^?t}J;!K-d*AVxv^5q@n%4~FI9m`GS zSewTJ(vT!f_wocd4}CPakxQH9(~q-Q%l3A;p5A&=WruC8*7YiTBDO)fY?92SX%_UQ z0I(g?rMW+uO7siPaUOwHABUJMTYSK$k}ahvxV21M+@jfEqcSL+@DO6xe{(qM>7>28 zdErDm%N)Hr!Z{cm0<{PBzwJHpk*M3y5tI}O9B80bs6AwftQd=JUBmUHrw0JKsh%MX z^9rvLhk6Qpj1~?&xSxY^zi`OaA|WfUk@}TCntS7lrl#!Z3qXVnEY>u6(GWol*$^Dr zh!EX^6Z&4ed^F`{+UseYf3)*Xq4S4K*Cghn&mgVjBDm=dUh}`q=}t>Fjtf2Invg|& z8$y34ZUg21lfgaDV`tDT&E1np3FGVrR&?^a;(dIEK9|ZmXFV?vbHNx`!M4M;^0l8z z0WlKDsz=(Z37%OiWeCnk*pilyguaNT2Hp7F#oCp!*<960wxCaXe|z1jK!1^|%S7_# zb8fOofA~^8o_OudIUVQyWim2(LDR#?9>?)KhAo`Ee!xc-|MRnM-Lfg!r#Yhe z$qG4`rBHtQN$7O?{8jdlI0`Rvw+%G7^~O z1t%-Jnr>x1oVn9y$7}98vdEQyN9&}Kd#1eism$lZLj6;v43se3gm!*YeoA_(Z9Ecs zhWgMwZ5z0Q$I_pXQ!`8zPhDdy#<#7Q)dKiAhmmxAhrG(8t;(`y>Uy>xH#_pXj))eL zuvfZy{URDke>85|rKjsOU*|%nm+~{YKv{TPNFH0Y`>dPuqGOD)9c~a&f$^ctr}6fy=Z9*a zuz43@oL9gIPd%nSJ^O|rM_;zs#0|d(SF7VCQd@|@kdWFcKYGu(QuX<&P$5ApGp~zd zvnmR$e-j*g_!ixe=lqxxN1@+>jaDE%y=op#*zkdF?-fe2?mLakA~yZX`)I?p_)>n~A08S|_X!m?nuN zHc;*A1|ApqZ+FO1Pi=a4A7m1&<*|V;>+chff1j>Lg~20k-$Ze*^9EyHiCw5afwn7Y z_}dW2>{Y9dr)ag+mOrk(tH|XLM`84t;dCIs7Q{Un_|-RD5u(tAQXFmqm5hQ6tPG zB;+ALk%lmtBhTYmX(BoFd&HkY*fNNAa!H=Q=hP`EJP*wR;(EB zu}-8437K&)C~`DT@sASxyRkqAe~?0U^?6Ghrp)|u0OKaj-?qx|X9Tp88BRYWqF>aH z*RS*`VJTNL#4+;r>)Y=S8}{~%>FRl9cz*9L$KD|UcW{2rC`hu0one%6k^A)fkizLH zG$l$OYK>1$GPQIHM0Brx;GNO@z^isLkMWzxetfU|*#rwjaTuqbDRv|6e~yrqp;lPW z(0tl#xDfnK2J#E8=m6)RnUVr(Mx!2Y8Y$!4K-!X`^$#I&o_D%3nBZ2VQS*Ov^oEfDH@q=Cen zGaLP?9LMcT7YYnd--A3me+x0p=s$*OypH>#c$%U2K}A@rx_(X73Psahb_g=`x--2H zdv69+x!(mfXA+n4{t>w(ZrWO-(ka%AEWliY$u}ZYkT9?Mcby7%fWrKx z!&x$=qIf$geooK5Z2sZ*8D_mrSw|_$3PT({w_ys|Q(=XW;U=LahHMejkQJ5+ zt3XF*J>S6RFk?K<>kj7I4<9`+)2q$0{B*vX9Nu%1TMA3w65!N^3B1GeViG(`9x7w5DL@L z)D;JRkmGA7|7=;qf6v}$+Xzy3db^=v;ixzhFO?JW+TxhNdp7{6 z;&*2phOI#pAFXeb5D6k{=3#Iog{e)Z)TdfFy1H@XLodWhENEp%WrfKH_CF`ZZt25c z1?nLTGk)-uh&@a0?rHAzcD5KU(e^}FxMAVu+NQdNNCI^?e^>_;`MuL3@H**phbVT{ zTWMh)f$)t~nyFRM^@gIr;yap*5f=?{Ofk%Eg{GH!CWvBX`9Km>q{e|&-2JYJ*T3;f z(a(jawf%no9R?p6*l6Z~iRIy?m+`}Zfz}~(9!Kd{h19|z%Mfx+-8rdU(H6Qjdr zC|;|V>t|+t#kW1pLn=Y*oNGUI_h4kl&8e-&pwnomxH}Xa)P_EFxkidBYN;wlhfYAU zaZ(Asq$+^~z2@fRa-2Jp^|?8yp~OZ>e>1Sr4{N-!W7ttymo(75T&alW0i7OP}pAs z=4>`IHAQ9m+!DGtJ;Dz(8r;}6(rUajlnjY_ze(YHDB>Lk8mCJJMVpfe)Nbj(_p?tk zPy94Je`_X;fnRe*elY0ydaoxp)fW7YO8`qH7qMAc|Ec#xO#kgG;7MZhIk$`pS@X$| z(-t`TI3XlQI`8$Es07uvxhqn?D}z+25uq<)Y5i;_sr``%cMg=wD?>(fF(J1qg(a($ z&rL_IyV5q*M9}Aj!>F52!Pv0bIZUOmE*j`!e*x`03h!CiE%`27d`ywe%&|LkTWZ%~ zKHxk}xtxdX@~~$JAzu?~^2X;O{~d%nzjMa8(w&96F%@S#>h-2AJ1+q$h?v;-rtRDj zVWE5bHyS%MN_fRaEAYoid9(!c%ar4HeRE`(tU?j#;>ua zYaOcx$+_A78Xr@gZn8lxNWJQx2y9!#44ZxT=&|zXj`sQ+n%9yXzB{$I*6Iz%T;PG0 z+Edf1DP8sH^^DE%A$Y%ko>026G$bDAe>;dg6t^2y+d>}D_C@N|#V43rtF=K8r2OVR zNQ`mvJlID)nSk8kRac!7qS2P5`Tjfh&#n!Tpy;|d>j?3ZL`)}L^ZaR8E3=et(iFPB zg)9D_2zk&NdszrARzbMGzlB?f3HEF=md~QEdZ3V`xs#?8mQ1JB8d&d(MO&cQeCAkm7KG9L?^r6P8QI!nV0&^amGu1;e2xrGu_5lRn+-2d@U! zZ$&L(dj~En#lJmyu?>IMV{(l|e^?MaF6(K1I8XRid?!nKS2ArVzCofaOhnG8Sq&l} zX<6$qX#1u9kQLRVis1}`OGTfomT_gNqq+YRJ&(SL-M)(-j-u(5V_h- z+O{^yhag54*L2u6skFuM#rb~8LPI9C(gCT;j9`7QHN$Th^hxVxp)aF>e`vjRI|h5C z4xNS3_=W;yG0V=nQTu{`0|QD;ewe>N+7F56pyCwj_qP{u{icK!wp1Z}FG{jX2sDur zx@^^EyeS^Xo3Z&;NSIH{o<73sbl3FZ1M!hVhY&7v%Cak*!xdbe@8C%#3e#KJiwWUi2F_DmsR|0iARRRt-`EUEmhPiOr zs7jV4Oi?GDV)(*PcbufAWY@B|F?3Y1yt!QNJijC0P$rJ#f4_RqrSy*GEA_D0r}s-x zeRD0K0P1d1ff2BV)9_VZ8N8!HWiJUd4%%pf?cDqfe}IKuBPWfeV9`>ma!LLGJ(-B8 zR{hR2kAlnixez-28yhq{@qF~Q+8urFcQ=}CT;u5!qIF~66Q>{@#K}INnQ_q>zu0Ie z-hh7PbyP*jB#k$g75F}cs)8`>3i2lNq<{B{NzV1M6ch~)R5o)rAu+i}Dh?Emg;vTn zUN5`7f2wZfBb+1zR&TV4kQ|OfvYWY0IM!~Rw{nNPibqrG!%-IrRoYMkiaP?S;HcCJ z^O?whByEj8z-xV{WqHq=kx?&j7U7P1RN?sL_EW!4cq+Gfrze>PGAj3ho2J;T3|xuq zXHMoO+Lj!itnlpgY?dvKfY#$jU_L80Lg)4Ff2^3As(^M8ETjq@OZm_|1Cfgn@h%s; zH?R71wd*lE2nGc35 ze;$>h$_Toz?S8&WhDWb5z{!?%P6)Al1e>ZMK94<#Zp}SiL|IUn3^Ht-?osH4I`iT1 zo&lwp*I;5B3EMazh>`H}t-{x>ox5eOca%qq+3wXf`4PIQ0--gx zlz+d!UudJ|y3W7ZSbfHEySB<)q4vo2-vAVuo%0!IQIPONP{%Rjb?4uSy>3C!-=!_2 zb`JQxB7NsfzstFdVOtQxa$uvw6k9epXkK4aU!OVfKiX`wSe;GBcLn1YbMnUSe+n)L zPuI-yX*(I{I`nQ}S=n>Ys1gyp8{2D!UY_eia;O;#30?c3zLhhgN1O@`y$8bXj6gNg zirY$A&y4EUf#2`6oy37E&Fgs-T+L(D7-%Wx=`l8XD zWw5A^^%c;xZf}rk{zIk>UncDgf6*2WTk4+ffIz1AP`2bYRq6>ysI*0c-g=jfkzZ@R zOUK|roBc4PJaRkfN$4d6=V8SrD81`eyr^HJiwnh^JVCt^(vqm2D z4_DUZ1fOQx4mQO4tOtl*nje=gS}QkI0`$8Ey2l&?NAuUyRAW}dIx5|93wrG>umNa8 zt)AH_Sre02$ZAJ}Qe%cXguQ48|`B7uC;86fh)F7i;m*EK?is_ zx;dE_xY%#ypZVE7mK)HMI-1rQ!;`vfueq%CsLMfADwV{A0Di&zfd9JwJiP9bFy|#W z4je;1ytFHOgbBQ=H{%t-{M{Rm$_7`d!am6rhK5XTHyP9874H;DfBh*Tx~V)tn_3*B zRahgKDkyR>_Db<*%5ylT$-|S(2U-{{Fzs#2H^A8K6Bsfk_{TbRe8AD@Mn(&mQcfk4 zaEdn5Yp@E0cu4ht=zUh zOPXwunL}$hvW@Xdhj=pPnCSfhYx}{M@_-*YzM_klaMbt(Xn2kfE920fikOPGEP+27 zJH!R>iCJZtO^IYHfB50q3|qi{%rXm^7uW9J-gIhf;M@_|e{_Yw)73pq=>vDp&!p(= z`F)$@fAnu8t8h9*0kBk*Ug3%pzr5P6IoQz{JZBF2@b zae{;Fd8#Y@9vuJv`LbaD`9AChOKEQd8neVBmXNyzQ)c8h-{nYn4c`&-W4S=;;hw#H zxfoJvhE3%Af2^9ri24o?C%=WP5qig zm>go-0Zb3F&2hs0PVo;E_s*WTwKW=tb4lJqw zHI^bbh+sHwNLS_tepIuxSb)p-(hIH1`I6w|wm26dUsxk$1?}A6aV0`k{B(zY{jB=2 z_nrovfBVibT=`>gEHeczw_;~9LA=r&HD>j>0fbv_vd$`;@fx4);td{k4>3+Y(-G@H zTEe3B&R`r`b&uf>&1bU?=nLSTvy1?YP8j=O)@VqmK6NW9a;PG(g)s1#G0KHok>pdF zz~Yb%`a`Vpp2&Pc0_XPPq$7j4ia!LkODz`1f8g#!eds9biW=1tU`R$)eJpEf+!_ZV zL{ja2hJK=)i&44d4Tmy-vb8z4p_sU?M#w5lTem$1jH#v?*n>W@Y8Cm7O8HnG8zdk& zJE2OfLMp+q1oacg>n&;82J!LNPp*Zwq^D84u8@X5QQa^JY=8ZdbW7VxRg1_Wr;Zgb ze*!Bjl7J~GlC7GwFEIW4D(?wvFGt^D*T>(x_8W^6k%a~(queK>I|w`$ginS+y~vY4 zqlr;5AoN(U`G`cn@34fnRG0>_9457XWAfsnPMLOdLh|Yz1`mX)s%&P;pIa9%PqK8H z-(oh(##$KVX~OypI`gPqGrj-8%raSfe_XZGJJDxnB!cbLi=(Bv-F6NEK3pc9dDu=8C-k?fYkis;_lMt_95Ql(& zIH{5iiMNTtvX(SQAS1iZ@2IRGf9@=7B)*H#O-m7};DEAf`pPfq0vh2%y9>aPhx7#{B;xUQMtS6URd$v^3yf5_&Dv-SIn z5Mcx=3)eBpO{%3oYHpfc_Zec4I8KX7{uuT510K&5&;d{+tu-=E41#hVUDj-lqfH8v zO5K)^yvEWeu=+G3#8#o#5`U=qC``++^qajlNm6ApT0#eme>3`t4Sj&N4&;^`kpXUz zwO8JIs(B8sXVK27mYn4pf6{n_Ci=3A>%~_W&~^uO00Kz@l72$YBbcu|R9Bz|b8ONG z<99;v95s{K(I2Fk3CVC#g`MTco$!EJd4~(*7(S}B4lxxYqnsCkIUM{np(ekJ-&M0z z#qW;D;-+Ya6+>T(KQ-9d0x-L!vz3m%8s~h2zzP_v2iuLQn; z^O0G`ry}ckQla*)jo3kev0~8haw5+6%EDV_Z>JYlN0IqK{xTz?_;sSTMReHYx8k2%5q;H`d`(=y4p;B zmbz`N6=P4!Pj)eW_z92+Djtf&!XqRKSuF_VAo7j-;H4`%R%bmBPB#qTPjDBTj~A4X zunpff`z#YS^Iab6E5$w{_aYS%sWK4`_Zzy zj`^Dx(3ROlk zM-(J6gl2TlgHQBkA}StHe^o~4?CJFmEMeRkCl5?ff9KLG8t{A@u$4QNa7t zjL*se0z8^%5|kazhcdP;{Si{-iF z2j+HFf0Mkhh=g6z-yI9Of+}Sv%k;>L70*;RI!dWq!dy?EUVIwm;Uc_F)nI>N^f3HN|u4?XFH@F+<*8SSE1&+r!aK?Z4!XdY*kw$r>eFliY{n!x%9dZyJn^zwnjuvv zCU|NJTEa(qr43mE{VW8EJ!rgb7oQz!%jcy?o`H!cl%+#If{V>saXPM!YR)5+2Nq@v zPhUm^UXT|csTTK||mEmkCx?%ORnI&IYy&t2^4o-VOAwa?;e_4+>%;XOoP z`u{(5S~k84Wo~41baG{3Z3<;>WN%_>3Nbe@vpuV`Is!K`mf-;uvj*l1BLX)xmf-;u z5;!(93NK7$ZfA68G9WQAHZU@iFl!YAGB-Fkmr+~+D1WyFRGaA*E=+MLT1s)!BE^Hd zySo+*5Fl8BySuv;cPK8!wP?{Ih2l`$TU-iUIx}Zx&iVhf?p;|c`JU~2zt4V?P`_4D zXA(7ont-LCc1}#J%q)BWaYaR0Ru%vY3p+Cl3mZB$wFbn=2K*m6I<*$q!4U$ry930+(&;JBe;xs}rgQ*SUS4j-KimPLwqOT{Daa0>2y(In+dgG91=#@9 zp{5Y9lly;#pcSxma)R*zfv&Eu%phAwW~hUO5Puybz!l8V-P!nf32*e|i571hMYJ9U(Tqdj$Rt^E75jJ2P>p ztu5Hj$r1f`eG(7{u<6s>-GP4{uC*Q1)z0%j$Q)v4X8yYkGiMl3(+*;&Ls;o)ZI;RJx~0bn;%OW^MW8h`FE@E=On-{Pkpyggx17{L6g4X`)F9Q^cw z?&%0}0Rx;IoWb6n|5p4rLT6^kW6E z{C@rYWbni=GpL=7`#B0NIOVER{6zxVzcz#p@ZZ6dpik5V18DzYx;_gh zi|NxF>;E&~|8V*LqxtVB|5v8}Z$(nhHa36gY5z3%|L8%s5F7WuES{+A?DVt-iqNNJ zu=`(AZSbGFs|YrOINScOR@Mphw0{nwb{0>RW@6=FX5si#4sn!%xPi@7AWo*1f70ep zx#sVMvw_%wRiKWL-&f3&7Yob(=$^LB)cWZfaeU(DpDK{!)5fYR?PKHQ0)QMGKB$A~)U!9h9DnM7{`;W0 zxBx)0-=aSe4*)3fH{yQMDg2FixB)=zztI!9fgl^0CFpMn?~|{|KYF$&1a|sI&B+S@ zKHU|z|47(506;M8Y2lw{@wXexlb`v&AUgnP@lSbAN{inY@6(z6WAYTn@?Ve>0EGMt zK2>G&H)MON+6H86V)joJTz@Q2qTdt$+vX{Wt@FPceZsJR%%8HsKn_k2kc}C{{GUoW zpYp(-SPnJ&r@yC;VU`fqe}#JL#{OUMsZ_^*!KZOM{R=+L``=|eC2;xIc%RC4`xks_ z%>7^Rsb-Hq;D3?D)Y-w|iA{fO`4f}=ga5dO{dM-r+?nTQJw<~%$0ZYm z)UE}EN!;w?<+GVY&nwb5v)IjWdDeSd?Z|i!$CA!k! zmr8NV1-C18cGr|sn~rW zOS!I7Il$6Ec8*Zab}+Y?sc=LXaC+9+`kSKIYVuWGk-1BF3b zXpwiNN4qWO(b^ntOcaz4K#^Ux-xU!QO~~9D{-$zqqc7}&yaGPX46aluxBT|ppI~eN z+78E#?o#R>b$j4(e*pg;po9)<@Id;Y@{(U`s>_0FFn_-v172vJ@$sinYpSxJ9EYta z%jmrtd*f^iJ^qkqCqq6#>n0vA?s_o9d22#3X;WDQ+tQoq#UgDCW&pnGP~cudY*f4G z+IdS(B;9l^$;{F7_EJHARA%0?oy>!Cb_){XvrIuO3cXGvibs=2sL{(GVx(GytG5FI zBPflh+JA2-j)>ql8?!P#t$|MWpzov{mE-Axk_xF$%-Bv_T%(lQDyLv7c$JTcXyVX;d3QKtjP z?S5^6{vyqiNWCdIp9aa-8xQutG_`L&YX|_{&3_u9_mkLgcxdgN?b@lGt#y$ZMT14E z>*?V=yi($mwIR$+yrXn6gXtM!A?h)!j_eb$vDUeahEXO7?|*oVw4j18MuItv#E>`k zUm)Qv-3^T2vYs$ZF5pf-!#>phSjRRDgJw$HWtN8{bh-%*o6pJA-|A5qXh>f6SiM&p zihu9{GTdQoZW8PR-lyR#+wg39=qx3`>dtdAvSeOsT`l>WHNI~2<2U2TFVHB$p6BFa z+_-hYr!tsV?*>y}VD8o{YmmZ-FY(e%n#P0* ztLGR07sU8>x#2Niv!xb1O*A@2+s%)nmFJ()yT6T*Y2t~RZc?EVT*Ak(pd%_>>huzfwS6^FX}d8}qu zYw((<&`dNix1zdC+!ngJ#WGG^;hhItd}X%dX-U8#6oD6kV(2PS{6hq+dTxf*hp-QV znCVU$u8DMg6h?(Thp_XL*7=L|w||I|f$#3f2hT5_BTT-jlsDbmHbO@~7y9-2mj-lF zu#legMf2y8TlYf0c}my|WU6${aZ*sRU!7kTrz+b!c0R(aCXyimUFk_r*6T-8Em@)( z1TI=52gNtn;ZDJ3etv<=ACwM4*bGb|p!G|Rvq!-bvN4DBHW&BBYD+`<9)B76`C2di z^KZK0t}i|kD;^ZEGtz(Ti*VueX8usbTl}gf=M5LAy#W^sth@K#I}U-XjLlm5H|2&b1dYVu%fds@LfhXx@G{;%>}RHg}2|P6cbg( zn+y~D*R&r!tR+;{Oq}@Z2Y<2ltO}d^vaB&Sm544mDyNY-Zqmz5v_MCmh(Ev7+eMRP>%{6` zy0z|5w=a!WRmZ7r1$F8jX$bo6AL;B~3Abiz?FPs-5|Q5^Gf)hXSc8Id^$0wcM$OY| z{qR!f%w_49^~{L`;T7=+*r(~J+kci-;UwCBsA^QEMe5RLdVlviiikY>K&}^EhK|%h z^)l`wnJVXHfv*OkiGnv!Xq?j;?~w3HP}MbG`GK2&^H&%p319LYW4@*lfr5%~{KvuJ zS4!el+v+R7G83n{ZbQP?#ydw;NPLM)IBGWi=+eUHNXPdLD- zY4RXRD=j3?EY|Qd*3m$X+GH(-`zcO$ZFw&bzp1m0)E{08jZP?qR$^v*!CHb<9`o!A z-5RrUKJD9jb)6p{zOozNyW~E=>>L6$pDSurDC!#YN!B($fHd20k>^73EGr^QM=r_h1twS$Wru& ziOI4kN6g;&_UORxx6BSJs5J=WXOenlOb8YCO@D_MSi6Cx{vI7ETd@vRNZ9*pQ&dG_ zA21Z)fe~>#e9dA67l7H7IT}A{lI*E*R%b3214mr~=@vzhKgh&-84+6h~2zf67EOe8K{jOCZ8 z^d+Yzrf=1YA0Ur%%!Sh}x_UJ;Xl%UMX~hS`fPV$|u0Gc9@jn#OQEM%qj||E~D~Mg^exi32LZZlIF?sZ-q$QEP_%%mYYbm%WOehT>f z`29`|3^jI1SZ{SOdj%6doS3Pq&NTljKK>H9wrsXV8|e}jGIM5)oF6zoB$`WsLpyJv zxJfjJi;aeZf4LNA=wCVcRXMrVW_jX^yCCU#si6m_WRyRV2h~Hsi0RP^%YTTqdIT)C zL-Yr{Wr>3$MsP=%F_PR^;)8W$d&{V_q~#3FuJFsiU_il(wJH+hA+|?X^;=^4o-0lM5GKh<;;rCBXq$$~_vJ3m&FZGEUma{ookHb@@^1F* zy+v!EjhsrzDl_)tzIaV)&wo*eu@sC7ZcE0CRJSHEpRgIOIn)>N<u30@uf7e={-{rsr7E;{bvXzXa>9hV(7f8XoaEP`*8=-3W~PtD$t3hN5O zR!)%oRGw;c9JyktFKuk{>=H!IQ~17#igx96$WW90MYa9=hM9|#jej$7q&MY{E?tq$ z7gi6raM8kPIk!tAqGZ!e+nmg$j(nX4gCzViY*oP>b;34X4RxmYc$*J!Dn(c4ufeDV zi~CGYtTEq!#K6IL6M>NA#HD-dJK&b*D)QcB5;S8x_eD_b*Z{)DVG)lsHEuX;y#4dR zK$GH6zUky!yZcX6rhn>w2PB-YKO|(gvLr`*Ul0j?ozm#DDScYjB){HC<~nM=)luB0DW zB-7T%(clVKL|8W)i=y2iH4$1L?4QSvHdmJ?RpQLTb}R~&p1Haktj_9ZE;+K<+a5m% zXET2*l5f1d7+4ZkWRPIs z0MJP2_Qq^ImVXVnJIY{NCaR*uEDA+Tf7tKWL#s(e|C(UxeDB_(spfCJh7kAki{#^Q zI7#`Ke^*G5SG$hNOs-Z(Kkc5!%H+PSr%OjnuaXme&gjqgrZ{jC>9wQ82^dEFPS!Ik zOc`1G9AwlbC5=c@r8g((M9;66kLrk@A&4sH&{l;wet$NvrKVlFgN;ip%DiEtK}utS zMPSIE_|$}(Y@D;d7Ic<8Q{78SMWsEE5a6%3s_7eUx?P=@-MV3O#3##dT)h)*un3V( z98*#sj4&NwoB7o`=YYo?vb@3lRXoN}Tr77za<>LwaM>Yl(m3T5Khws(l9tV2xhq`> zOp+zPn}5VoPj)C=G6iEzx%!D=7@c;Ch5r)QSj9*EkwQ>@`B7N%W?P;lBZH=%;Vits zL7$2ZjY@AW3g|WqWAB7J_^zv&S79HB^pPIkIM)GCb|s2YnW)J#FxU@`qlY;@C%wUx zEV{I@E-?|YQ)M_CvSE?%AO>UG{wV6%;~M@6_mZ$3onryH2(29Nrz6&?PMikFAky44UKb>dBL)j617!A zhG;)$o@EH$^rKHt3xQnG^No<^6aOMUdqjePAxn4p<%S0-egWOboG-z@e0sf3%bQlw zW`A&BoNE9by6%f9s!v4wO!nIc3mWb=Z7Qg3JkD9(gM1u!5+zi`l{n<}8<$VFg(WF} zs@Y9lCBNBUx29aqIZqH#&%O1M!=QUSm(fQgLB{uHOqz1h6qXR6^BYMyF(}NqFFa0e z`;k!bePvJj%OGw~A`)EFdkv~xS;fnB_kT#Z_dEm~Kt(dInx-zw96@6);sGRhqjQvF>h&%_!(* z6xCC%iPRR`y_(0Rj2dbswy?n?94s8Pvn7Gl77Z6qsuy$aE|E0fg<`8+Y($x05(#=t z@p7fZl{H?&uIzB~as8{i5|(&QvoU$J-Q{nA$)yYi$_! zmc6^$l)xbQx*LYzIa8)f7~(JK34HGw-Iiky)AX71>Io(~2>ef5t=U!D3V((7DI3}r zk!8;w9L5EKwb)%WtWp}@k_JE9+4ELQ)Tv2n6r0_n3v|T`lh90VHkym08PG&sU&Jw>b(QQ&DRQ)%yF{SAMvuLqPf zaHwdhyxyz=0Y}m|@ot!=7eC+|@<2)9wXZ@8voK4;GSkq^Abf+!+U*Rdh^c?__3d51W;GC9cgh^?Lp3ToEd#h57WPjS5^4CfbtC%P z)8hdf79R>fDwqjHg@?k+qhw%;+_8VvKUP=bUSG;Rsk*`GlifxJN}f6oL9$g0B=V5*IF*nhqWXA4Is3q3D))KQw>%#z-OcR+#jY86N#D zU+65$37Y}88|`5$2MnW1g{PgKlo`>5lPueD#6;jCrrtn7HH77a{<=~AD0z;dNkj93pSufs zvFK%&lSn7Tnv#E4Lta*ZVsztW=@KcyS@-6piWBAA(~zysmT=~0()p6dsOoYP+9S!M zABdGOMG@b9pL7Vm`M&Y`GxVsL;IQybPN2@c)Ko9i^(kF0B9);o)_ScMBo?4nHXw?~ z`6!61Y_UHkZU^G=ps!$?06%aQE}&t%vyy_U|rtPO*+9@Dn`d&v? zad+0rFqbnGuU1{KscXE~`$~GHPlzUg2jnv06n6m+3ducv37+b0*eZN4))a~$j%x3%?!v1H zHXc8)QDD8~E(Zy0Wr{vD)_@pF6#G(~7*v@-Gd6!4hl`g&YIJ==0UFy;T$>3!AArP# zYR?F)5r1{~H5ny@W^}tRu(Imcfgo zMr#VWYiI~A@^X%u5Asip1=OZ;axGDljKLKmtvn`%y^}_{I1=Gu%6XLWs@JsJ2jty3 zMXrB{sf1wZufOJPcJM{~2}eds12k*tJi5woGCkrq=W3+#R}g}nvsL0)#x>7w1R^W8 z*mz|Vz3LJAw+Md51`j&gO+V*&3_0!D_=xt(J{ps8B4#h&AfYj>TmjMWtBx1{3<}db z`3*vRWl#$oQ5#W?f@e-IQF!h8-cVl&8uWh`m$XCDqL@+P%NFS@Lf#iRI|+*joTs5` zObf26a}=7LdbC(-9w7kKhRsF}0q-m{MCSyPfrF?sxAQDH+9i*@^6Ea6;7DTckWI+=f-<~zNRd}^0562R8C`v6dUH}< zr0xBzVE1C6%)g6?*CYN{)08lVdx?sCmtHXz)wgEufyD3^VQm-F+VPZiUj$p7U?g(p z0do=^w_F&v(02olh7RiFi_m)k?mU0E_3r`Ip08>1IHelmq7>d1IKSl!_GM>3JF4Fe z2>h}F&N?7*C!<1bisKPSVA5_94X$?=v&9M6HtGpoQ|VJ7>3jDu5y7Z)KSTz=MEfb& zw#D1rh3pvidf+?Bfc5n?UO-d|`m~@=;702i#`ux+$0W}#!lQ)EQgQ@$57vK>muQce zHtCDK^aIYs^&&RPhywTF1@c%ydsM-KKUC#nlKYWS-O;&)<53|pfP^t0m^Y{kltO%@G@hLmvi;Z7yxb7kKmC{D1|s9~nE!pU+)U1EHL~A1ouD@Q`H0H`B zyWN_|>rsxZ#cqExtLffG={YvwaezB^Ak+*BXO|eCfvIN&yN0`7KTFgb19#yUJvkqAS;U- zLP6QS;l8onvoP8$^P_1r@Vr>mn7(x@%HuH0_e!68m2-dD#@v>+uGWDf0%R_+3M&Nan5FP1V$p z^5qp>Sj5m(U?}HF_Z~vszH2+*NRv08?BGjdiaoItDR(m!A*}Fj)}t?<-vp>ObxX0f zu+r@$siJc+zMAE|`7DdzN_vehAU@bEpYa)n^PPXBzJBYJGCAUJy^8M|LC|l{+vc=OR=|FMk&^ue|(%1NPV) z9u=D@>DA^b%;IQ0z_^6?9o=7&%rDrCPQEfIK=-2e5{X@T&^Oy$@f~0*uxU&oac;mF z5|w|CnPayPk8f;_B8--z1#qceRgA*JftwDc?6TnvKd@?gGg`s>UvA_<3i*0Zz6{ES zj_+I6El^U#6L!aYKc%g-FHe2^_PO_FZ8j*h`WE9NRO1V{W>1jGnG)BwMaN@Le_y-t2K2AIC%M> zL!$RuN3J4m*#2#IkeVef9sgc(d+T_ifoIW=6&KRhsO^z&lmR&Fb&P#*xvF^h@7RH> zeluTLZMtgNkmF(Bf(9|UuAY}o-^VUJmC@0heZH|S!9P6ojn@mmQjy(aQuHC{IG!)E z-!LcjIoFz9eI)8`(>TJHJkR7r$WCH)Uh(9%@||d@6PUR_yuZBN+(ki? zHM_uBizsiMUp^buSCs8!Nus=i@fIm=GL&<_{^1fn*oBM1Mr!BoJ(^uXM;TlE=6NKl zYu5;cRbZmhD1!~6H%@;z6dN1!X9&y$@dW+-FIT-sQ~j4Qs6lYgw?|n7{N{v!4t=Cw zUiPyaIPPHO?^9xaE4}=(O~1loDsC}|8bxOcr+(<5U?6uN`H(hYUe}CYjO36mg&MjY zaA(~X;_{ZKLYd1WmH+2$!R3~=Gp;Hv><9&NPA`8+;FTI(BTz@8zr3i; zpaluS3+gC%r+h#r^#@<_vXg1|#OCc|Qe5c%q|()acnaoj&d9ICIGD7eF&#o=+lB0Y zu;SFdNT#C2U)*w-6;>yhKOj1sp$2$n#F&*AL_WCZ6kX*E>5_ST02Q& z996`=u3^-Ur0Qh2?r&@Aojbn8Af`u6+}wLI%Y`3_8z~3zc|;jG`$%H$jt05il4|%( zz{`(2M&#?$2&aQtH#nsznl;V@EQ*2G8+-<{;@$XGU3};hu6j{iuP^;TmoU2;8kSm?=3&#tw zUDRGJ1vJ@LH>p_)+*hqU|Inq3rn4*2&6%}RGWzRf`8DYC7>Rfel><9*cyt1dcOw+=lRP|- z31vsGQsEo}E5kTMK-#r8@kmEaw2>D(5{-f`&1^a=j+8j~6+({o)} zMUsEl@^S8&{h+cxT!X#06+i^dHRwx(%+Q8)#7F5pik_R(fJU$ujcz0733KJ<`QJC{7uAe3S zcrN#4x3ssiZ7ZzJGICNZkBSP`v9`^1`wD+yqGhm*FCVl#;B0iNy8m$%360Q4(}1w? zmt30NrrY=L`N)sT&Rkg;w;IR$T3VpXr2Pt9 zX&PKYIl9kPsR}A0Vh`-!Or~g<`!Bj!C=BZ16!Jd0Qb-U6l(}Pn31f&3l7ZX%v~_=j zD~2e<3QD07))S$_>i?v7Kt%Z>6ZpC37Y-G(Lyj(gNyCTv=|ydy8BDePArpdHUjB`w z9yyb7PTa7ZM0?+{3b-G5Gc4CVvu{m89;lV=i(Gn%dSKp^7skt^&HZpwM9<{kxgszs zO8`qBBwBJ3GfuNE}Yt2{5VG+;TnF@OlXE;^t zl0uC4sfsLbVm1U(8xQe0xbiBDv^i_@+X4z&kvBhXIy>Reud14A4W`qn#XPK6;Q>@| zdN~*uA(zlM*Hlbk6oA$wjjD_J^oJvOjrnnd@z#5BLX6nd5P`GxV|8scD{+5N$o9+_ zuKh>i4GL=?U5=JS-_g*YGeB|mVqp8c{Fo}F#NA7D{DE=N|0ios64KP0cisv=C+K1l zU9e^u+%ld~o%=qV5Kr~iCTzTfFxOM4i~X!xvG>_v^PM9;T%b3w^^T5yS7EoK5=4PT z(_(WyD=`sQU4;b_)8Zm#s3Wobb-+%$bjJtMf%>Cehy>HogF$+-W)rW5GA1blN3)Do^K2g=OU-|9I&d%sPs9umSb zhh=PoxVR`q%FpFcZt;ILSIh`61{@@|V-K~Dh;R{i;DI+k?;)OUn&80I)mJS8fRa%2 zqUHHRiLzO6yKAC!Epn9(39rB4$top1GpbA5u%jq~GYVLis)>I?7RRL=9*c`d@t$0; zY3;U4>N(z8X5>R%9m#@x6X3FNk&~*tNeuMcDcngOu}yFBDj7IlVjN7*Qh!NuD}KmU ze3d2R%O^nWlornK zSRKcDYLB)HQ{{S`FRtmeubyjiY8LfS-(3{yn)(h?S>%6o-Ct7}Tpk9ydV19ej8jO- zKgTBe;i)ZRo7t;obG_+0Cq%v5M7yWN*BjK(fn!gW?_r|b{n8}gm#CV1g^swHZ%8dV z7WGORoVzMn^sD?xS#E@5F!$uIF#_I!$rS_RgCA zY;C3B7ZHZpaKP14efbjGkI!v^+BlO7)*E?60)l^!?AN(58d`zw4f!S%q-1{X6YE1> zT@vZ8@4>(DZ+O*^84*@pJT0?*D+;5lXju7(gGUd~qR82JHKbM;fj>PcyI?!0eV@LY ztFCk()Nk}m*>5k|3E=e|sqrED_sQQphM7GshroGx<*>gOfHTxEjc-V;IF2>bqI&Z+ zi>iM`=>m;>)Y|E!#+*Y^7(Fx?&P-r421t3|n47Stu8*8Xz`fdTg3R@N!&Dw%{32kt zV|>qN6RR=W{OihsFY=~&;UY1)*(cOe0`a(REpiUWE#ufM4$2|xPsO{2qX{)C{Sdc>!l zX-TiGtGJK*)op5Mc&gJA#`V$}`P)qPn{LO#WT>WC@yRI2I<>CezopEHcEe(?)nUGahm!s&l& z`J#-FeO5PL6D5|NYE1EOA|@Af;;?>YHQY#!MoGY}^sWpaZ#n+aDKlo{lm!Ozv zN&sdEVm#;;iRKyFlLWmL!PFtuwid>^jH$15*$MhcL(^q*ph|=HiI0njWN%_>3Nbe}mf-;u zxA;E+7#ssJH#nBz0TdB6IW-C|Ol59obZ9alI5;;jlQ3%(1UWe}GnXMi0V#j91yo$= z5-p5`V8Ihy8h2^jg1fr~YoLKf8f)Aw5G1%egy0qkkl+M&x8N2ecyN1UX70?~`~Pdb zw|cG9XIJg2Q&r!tkCswRlU3Zp!3-?p0EMvv**F9NlFG{R`~VIPE;bGhPBdCtEeOmG z{FfPxRtN0t0&#!}{)-^#3-FtPyLAuwxz z2G|Ac>;|>~{B9Va0wv4sr$qo(y&nb1>B9DZ&+M0d@vF zeH@@EuLMwa1VjHMEB#4e0sJ)^0FVv%ce=l#e*M$f}oxds1?8xVh0AO z$|$kHJYXyU5Y*x~5oCYo;_ws?asxr^KxR*bKPm?SWW?10pr;1^YR|>o8R7_YVRM1l z{ce%{cbcauOG7Or9qjGFP?!ta@A{-5&S3MWv3s)rd9t=p2Y0CVU%(OqwXpo%goUdk zyEYW!=z5ng_Z-fQ}0xTfrFn}4@3Iav@C;O8bZ22dC zI(%n{2jC6IllFiBj^Dq(-;AE*W#Is|^ZbYY$N92rNJoWh@@!viP2?q~=H!CMM zfR&Sn0{{d9IRJlrPcOdzokk4=`Kt_$e`4jKmJWa?{vYK&&FMcSyZxmAhQGFh5%Ay1 zR2-gU3kER!qjEzI9uD)T2k`${>wkp&|4ICJmj9c||F<9+S3A2u+zfyC|37Y!J;cuQ zFT#^*U13ifpzQFp2hjhe>Vp5=T4k^W#MS7(|F%nIaYwI%eiaJm33swr59V-g6*qO%* z_^AZ%OH!&CtVXyz-DC-J!6N5wI5o0J>~>U93#)ETS}Y&>Pv7Pe-05Bx%kU|LHmkI@ zR~LV0D&dm~==@yQfPFFR)7s+sMM$5sZXXl85oP!;MJ1g|QMmOQE#AEfd$o6jboYLadhj^dE)R4go3GTs(iB!Tc#XQ&eGA5#AQUOEMY(tzTxt1||qD z=aE(iHto>c$C?;2seP==i%M%45@UQ zKn1KuCZ^bgtYe<75yCHJ%`Z^8e|w&v>*%$So33<}A(Q2AG`*SH+-(1bME~w0Z|8ct z&gfg>CE)BL!sOIi$8=U6c%X2xc|SZ~`jJVv%Q45>P4x1GA!(CrTZ+-u?rwjkh!g;o z2sVta{gL|Nh<}(Mn5A;z7Tl7*Bg+b4oB>Kca#QaJtWVcV_@$I4?np(-o1r|MKQ}?= zWqJQvXfe`(WlZHPnoQIO}6herX zOspW7dCcWbgS||4Q;6vjmbAUS_XCsG=R?4+?D5ZO)1|bJ7#XVAR8>FSb=*I3D5O1P z8KRghR7*Fnk<=ero`&>bso|jRQV*!ZoZ1^)Ma(&vX$H)51P`XUsfT~KG?=aZ;635F zcxo!|*SR?rLrUs{>n`lK_Lg+L*huoNwkU0)#h(%9`Am+wy%$IU<2-Y^7+mV{lzHRS zIgi!TnSx+v6NoRD@l+&7t?f236lHer zH%(@Tia-_J?E4lnk{f^HSr}e`R1sM}&G%EGwXP@@miy3(y?P0KbsnzN=f3Uge621T zfTlqoZZc5Um&jZ4s_@tRvn9Z!T>YbWuimqMSvzDY1u^^X1+z5 z^E~VKI90eo93Pe+)4CV(OBABRF}#UmKvjP3wP>r!5DtIc7@<%w4m8%b*)-b$2lH|U zkug^ZiZ*|qVN~^T(LHXm9!t0AowC1azAtd=$na_qQ#@&nvZUT?y7x!^waDxu6Du_2 z%TcVTo>OH=*tVE&fSpM~IV9<~!%ce`@O|YGn{-tM`|(z`VjNrLj&qM#J0dV%AV@xT zO5#TV84vF%^~P=aGPS`n4;>Z#+lz%NU!2emtMY$0KYsXO2CmgMt;-=Y`W|Rb2G1NE zOp$mp<@YE7ggZ3*$NETp7)=AZ?PS;V=C1oUKV6*G<*@m7uzM35eTbd0Bdn}PB^WQl zp~9z8caxr&)M+7I?a|K>8$9Sl_~A>+Oe=6bd9RJbaZ1#)vizuQj{0rAt0|-fXnbGw zVitdA%A$-^pU{UsIN>_DO!)4XK28q4G`8voVR2TPXP;u}`5+Uv)PGhy*RcF?N`ZQC- z(?0U+Oa|TR^K*}{&vT9<6Om#w$$z1E=DxMPu5W#uvh|Rg;Nvoh+@E_l{n?l!&mey& zR&$hgDS4snb&Ab%4<0>TeW}d+9c0Sz^G0EYz-#b~^*7$=cLkrV8*=MsCF*a*kY5pn zOhQB%X0GxqYhKjn-;Oa$;p$>}@`!d(XJ#HR*QxR}D%5yU)fS;P>0 zJlZ!G*>gkY$0rApXBkyzgvCQUiE#9O=}hZHJrfLlYiDHB$!(`$i+h9R5$F_~{lRee z9@~z2HdvLU`9@SGQNJAlq&t6nC}$s>wU_tF&@Ouhl~2UHgy~iaEL}+MgKBwKoeMAP zhRKU(h!hewhS{ObzfaZDl{H3g4?On=?Qq;%e+S2iH&{ycO*1289_7dKto|JAOTEK50OP24)e;J+R&o=(qKWMGq~NETY9IA9@|Kftj*hdO%1cYY$EHSUu>OZ5zR``wLd_^)o~+Vx4O=Atn7u*5vB`ay zc!Mvi*WxKg%!0*{kdVjI%BMM|^qvX<{AN;xCq{qLwynQ)_F$W975K=!q!n29Sp4(j zg12}N95>OWS2TZPj(HNO(EqIxz=l@vDEyeMxh*Dlrzzu>s|OSQ|l5=~?Qs9Oq?PS|lu=LaSY@?EAS(JWq_ zQ-8Vkn9LzwRvz1EO<)TaYDi%AL$!T@?OElurP?)uHS*o9hGPS0d2KMwDl=xHwyIe8 zu3t$JAQnWU-T7Shivs0RwlZS-W%Txo512&+t3`k3uJm6=>`QOqx2zEK>qyylUHc1^ ziQUKyqCWmCv>c*Sxm_Fxk*&S*ghLS9T@;nNJ<;(i$ReV3sB-#nn9NP!GO(OBsh)hZ zH74fP+8asZNI6wOpc%yPa5IraTgNF1TCtgAomoTh6SPiDOTPvV<27(A4i?Z!{csKV zK1F}Fj+}%*q#2>VioJ?u?LC_vI!fDi>JeuY>=wr)oCwyIbQ0^1qTAh&WV@w@>V60& zKGhL1B)H`OQNxjBV}!Rw5FPp&dE5oLX;?Ne!V0hpT$Dz3KHM%zx@1M0=!*GMckO)6 z3`AtpwP@R7cr)P~pL%FMzdcj07ZyXMWpB1>@nH&PB z%EVST$MKBDv2qo-bHnx~oHeCuhF>tlRkD1>g&r-XV1_RyLqs!ZV7p~Uy?fZxu3hJFegYR1`!zX|D z>bDOXpK>ck7wVt&V7v=;Ybp^$DP~j zd^PbvJ?eGb5y3(zt2C^Hg5r*RH<6dFXgs4b_WrTd>?DbCwJl~xJ=Gy;faibHuMKVg zEWV)ajYsUkaHdgl*<$WapmVJK``t&3gW=5AreoiO<%Q3%nRF^%GYsiVD z?TSK0$7rR*16&GaE0$A*xUyfZJ@6nJGuiZI%I#lkM*xxGpyb``so2%-2(_k~^%?P2 zrD7zYa(b5uQaQI~4^-*xZ_R%T#*9f{9fO`t#7v%L9v3sx+@#cYlM(D1xaG-6d{x4f zP2qRrENi0%@#vxb813a=2+95>aAl#=FUFN&D4+|=j!CbY(Nem^@js>&JlMpa$RM06 z7@N{V6gbCWHHz`3Gr8Ud5}Wb)deOZtqvkfUB!1aX%)?M^CtUL4`7nQ4yA&O(5neTX z?xavnoN9Nf2JdNW!sxG*Jqd@mLIv@ufZ*i!w76^_cy9Kl4%Rnbr;a8TDYfgGy_=j{ zE4H8(wf7E;ULfDMBK`|MLQ-vIkLLWOQhC}=c%~dg5X6kcQZE<)iz4^V2#-ZErMRp0} z>kbCQn5ZN%OehU?!~_<>kzB{}($0rO4wQ|$Cd-Z)XO@{w3pjuBwdm8KMXH*R{UfKA zE9O*}J5hA#hhp3ozo@=zsd$`JrKqY?RIhl+c|b*GYd+nQp)1q-djfYAzmTDxuXroNweb((>f07rvenLT#F~yaP(?Us{RboO1YsbOTE(CHfbn2#t-_ z3Yxu8PMJHDxT}FFZ}V~0)3kA&(4xpo&tJ->CrA*IH$P%5Cg_OM=N)RE7u`8c;v~JW zaof7;2xfnLk6(++eOP^hIf*$I*-V5E_L(MybhnY%nY!Wxvqx?xA~`gdrVrg?FA z&lx(bAty?}2FP;^{g^}D!K{MaNsw~01Qt;{EpUG({C+0iN9#$re=YV5t^~?jR$W-x zwXVrsGv8T1<=rqc6J4l({DzR=o9dx;NTGDe3M49L*ARz@30K179fIV{SQ>T75QEeM#oPQP01`TV6R73lUPW6eR z#ICHNsY!xNCq>(J5n}41=}Ez#)uaif0yNJIt0Heo_5e$BxtlqK)ge`qwS+fkp=Zk0 z>gowO6CTQ=DQQw}b4I&SO}VodH;rOQk_j$elrojcj}$jQ>NKkG0YAi6k|B8Gp; zhIDEa!iAo+qfCS8>pItOazC(Sr#kVz2MeO(^VqH4K8&j!wsa0*(k1b|yJmk?nMw31 z{o*H@bb<$yeg-b`|64MQs}8){}qd1erBoNHqu=G0PQdb@LFs?2NR06=$duBWO5a zRdLSIcT`!j4oH-r_yqGs`&Q>5_01OR)a6lxd8!|uyi02Co`3O%XT>+kZY}B{NRvhE zDBqB+<3cZYd8uztaCcM)H$1(57=7878r3UB$U^k>&aShb1Xf0VkD6;bI%j{^DzU{4 zMR!T=)_P@ELB7^!lukpWHS?-ZXT>9wMITaVaGdcP)L1LM7z_MH!d}NAKcFEduYNsb z02#9L2x?&+nyz!M=Nq_KwszcJMDS!%w`^~R=fx*d5^N$dWm$YimwP9D=qteOS87W= zCF@gX5-(Fb+UEGu6gxwk)AfH<0oimkQ5*evW;MvprQ99^Ml|ETH=5z^|U8(a3*v&OSkP^yb-s z)v0t{Z!0AVT==M-?PVp@vFtKmSIO_mS3JH{il+zNW;lF8lO2kIAB{Z^4i9Q3BKJR| zEu7_=S_rAo%b?4jv3Ib(^M67A{;P~h$gd1O?z6%2W~^4sl|;>ocpZC`IMzaC`YiW# z+v1;uP@v8$;jnHMj2C|l3W-%sUZ%Qeb3sB^8PV2~e7Yz7H1EcS>GkxtN9r?N88L7a zqv^(z{fd*@ljD(iuQO__&H%{HvxPD}Z0vpbcoH=0dm2BJcB59s+e=0tPJd2ep|)+m z!Dr3ex5p9;ij9cR!%9ualr{%&NShtUnwU^G;RV>xspk_Q(&B$8>4(xzCBS}E9w*_B zj)kzrpOr-l5(l4?4*pao!eKFtmp7F+7QhVGOBew6%%bW(J~!Y(Imp*^9vSPj+)Y5} z!R07RIs8>DXwq59zBhGD?wXM@*zQwrouKM918-~aOu=;ZOX6pujX;7cJd+*p;AL^a zhSI^~s{z5gyS#txM=5O?JD63{dldI65)E-4aQTayG<-E2EZSSw!k^xL>RaTck?G$C z3Ac~1CZ_y`$F3k(8i#`jF$s5k>ZHi*d*riA4-7EW+mYg)os9~+UseJ+50<#mBdScu zH-dnRH$K}UM-J-z0S=0$U#666s+y2x>F8q|!<<#Hw%UK)Cert$W*!nnz{J4!T6nn$ z^ZWBL<-&?-u)Mw3&cUv8;a4+SKf;)b5|D^@6pEh@UWN6{ABJ(4VbB<9sgH~pXP(N5 zOjDT|w)}Fsb#+ma(ej~l7z(pMFhHlQ->w41c3j*ghFi-QU)tfII{7}A(z(lAAgc(i9A8WP+1#~pxUIgBr~WWc&7Y%QFY`uD)jZ zAl?ow&s?n>MY+4(qSO%Qiw8VE7JIvT3wR12zcYXN+r#=heT`}P$Xtm@DUlMPj(_p>(f)$he&B$2fziI09)Mr{HfQ!* z&i6^tT^_~}<9ni@Zk3|@p;U!ZC!FY-OzdxBGT4(WTMv(~mV#N6uVz(p`bKf(3Ng3v zy~DZ#PgyZWG+n~rdx`SL++L|`Q!3DQlU9FUdM+2r_f3c-`T7W_C8(M7r#?hn`J&lV z%Q2f#GYKw6OVyMEv-zZHv1r*Z-lbXW(P36=|K#GNPUK|B{C4Z#Ra(z$K98OvOH^|F zdd=9@i+J@Ibw%-3de5s$UWMLO&NBr+m;O-4K4hh6P})i~GaeOyurUHt?O|@fVDo=U z#g9-IC}2;%P$+6m7~1VQ9$Zk1#R8f0Cadh;+^ORY($kJZcNc$##gK)Sw>Rn~uWZp{ z>~{}r-@xH+Wr!bbO~}A$+*0sQvwjawWBPRET!!h?W$Sww`0Yz!*24Y(sb+~VDfu(* zklo7r=9d-s{HG?ug=UJ2yJSpidq003v>VONYMYo7hfvwkq>Untv?_1Qx1kX+D3zGU zs4BmHYT!*AP=v13o&0E@xw2Dt$KkAJXJHXFR}B3Enyi}%Z(+qzI`vf~5_nY^*g;K0 z>&q;omu|Yc=(Em0=F7^9S6rcMfMLNullRL$XiF52HLKAYXB+=4fxJgHjnsc@#x8(! zqifY*yRdDhP~XWjCI=%{tzpKbs3vzDLH7L1il7`wfylzJtTB}sliQ-2+Vr+M{FT>f zVz2uNE@FJknf)cQc<|n+|6!aJN2S)-jg9H3CPt6au5>_dxzYD}EmG9JCS)6f%D~U! zaYcn%ysGoJW3uuH`V|lHC!bt1Q3jVA6#`X>b7>UrhJmFDGXKVjBJ+XQ8M{1AUmH3q)-?&Br{ zB^ha!$(qYC@J)8ERpSF^OJqYxTa6HNxHJc^D!~Zf~7N#-s%IcnfbSKD_QMasm@$ zbdQAl-6ez(ZDgamQ;~oAN5f(jH(Z+t2Ye&~nZZ%C$@4ZNC9hp63H=-|oaBA=>?#dg zDM}2^Pr&`Q?_J=f&BJ}iqWcaC?%o%3h@l1=rW1x)nE=gG#G>pLpbHEyjjzu9;QeUm+>{dDEb7&pRY^*2-e-TeoN&@bttM={WJT-4 zoHPlAVodL}!*}UwTD`^AUkkd*WiQ7+wqD9J)`%1J3cCQ%lG4O4BS(+j@lTd`Qne(P z+jK;a{b&b4hPt?Iv(MDTsWIDwL9yB|e%eue`l=VhFpZ{{$X$-O3H9``6_qia-Ft@L z2F(+tEWfO=zX5-V7+Gb!Gpe|!3>pvN6&==KlHQJ1L`Q}LAH(qUzA3xgm*=uxBnX;~r~r zn{7tZ#%HtRCKk?xNpiJVTyJbEl0K9Pwp?bh;q;f#U=DvU1Ye&k1idBL^@Z#8IJKn% z9XBdCt}T6Nn$IAjqy%K@?<7?xYWbq##V=FU$ zyi<7izHAhca)JA0DuFC;F@*&!gl4UUafZI?e8a$Qq_w-6#99P*h%x2B&y|@{^AHh$ zAQtEduiJn9yeusTy>v0OfvYq@qL-7)ypfnoS>;YL2A+Rat)pIc<0X5rg^hZd{^h`yfZCa#5JP+v zDMLO-i|IKHPaA4QhPR-HPBr6Zdo z1D+1b8Ba_1`9Do+ROt$3Ze(+Ga%Ev{3T19&Z(?c+F*q=n|APS)5imFkFHB`_XLM*X zATlvIGB=YjYZL`CGc+(Zm*I&5D1Y_^P+f_(1&ZSC4nZ~!!QI{6Ap{b1SdBuH?V zAi*KHySux)YjAtJyU#gE-~X%LE2?0P=`!Y8P?9REF^Cx38UiJ4ZJZcb7@2tiVhXA( z%m8L)Hb!P2)b#o^x;D5vjl$t;XM{`>n-aib)9DoK+Aep#<6Ua`%)_(>d>ud#J zVFR#m^0IL8GBX2MnVEV1YiR4h3lKMOF*gP%Fal(4ZGesllw!7a?hfXrW=^0q|9u3| z7|{Y)czC$z|8@t6SOXo*jSOr63IK@A!zu`oSf``-&KMCW0qSPvj{nHjY)zb8 z4IF>~kig2^2x#L7@^H2>208#h$pLCI@&F|}pv^zV^8Xmn1O77`01G3_|HA#p`>#Oe zHh()C7#Z1G+Zouno7aFdKn>vHX9g`rj`9{}}#P zl>ax9|KEZnovp0?R@3~g|Nl`NSesk9|HlACT4yKF0Vvpl&cNpXnrZ?6Ia&pvvAMJL z|JBMk8GsH!#DB)r>VIQ2ca$`D0~#xvI~ke%!4xmAMU2+1Anguh$BI0koR` zqXV6mktOKW;RvGS-zp&Ja{irC!p6wf_^%UV<=_MuI5-%%BY>6+LL2~37SJsk1Ks{6 zF@TBD#?}es0syt=4KT5FK=^B;oE!iqk-tR$AWi_2=znj-1z-~Ujkp0!;=d6Oh;RQx zT+9F_$=`?tz$En>u>zQ+eGeev@Xj(AZV6<_5zx}^&h=}hWI-&2gub1ba{X1LCxC!E(YXm`!6-98N1(V zP%t~t2i4|ZRA6WMkM!R}Up2K%?JwcV?oFZN!V{+5u9;O(-M+4j!dD9Yb4?|)r; zq}-}|iq?@sXD7;2R;SngXaQxg(CC+361bnC4TAYS1Ai_>9|>5t z@|c-Fazl56j}V@5WP4pkd6(5*D7J0PpwC;mVtfjG3*=OMGi*<~xX8mdW0TNN5249P zljsb~S&ODt;j04H&IA@SU2K%$Fp3wslgP(zaV%W+Q{=PDNOkYdmk);P2Dn>1@Z>U{ zX_jd;$8hATknWsBFpM75`hO3I1_t-=+!`Nj-IkPye#Snu)qJ=pa}5<8jM`M^3d#v< zQ}xU0a8yc>5{ZB)xZ9rXhBqWXRTp(3wXTmw)lwID+#c;Hcy^^PmJz3<&R7E7*DIIM!iZXp~8IoMDb+BIZ@_&^;^qrde{daPY z4Y2O{snKoH;mK_ZPpdNBAM8C106vbdDUep*s7U9x{Zg;j1!%s8znX+MtZBH4)GQJH zOq=NguAdByK#7vWwz4r}367me1M-Tf)7Rwl>9F4B;xa9^JTinINunDB${ls9*065) zgG&T-JG8+m*2RTFHGhuaC-$B>6SAhffF)&%DVlb+1PcE1k&YuY6{+bir6CKC1bJDZ#;(x9qn2Lr_BVFkJ)V*>$98Jx*m^uroIXt4_4`rwl(kO|V!LjxZL)r{E$&_il9GX~>%vK0w<@!o-rnMSvxP1#x?-F4)GRclM~`((LGIT|gL$y!y&{ z*(xCFVa`n_X`!#b5`Jq%cHdDrc;oad$^QAd_0GU4lLSs!iRCzlDFaOMk|e&4&7GJ$ zW!nf06V>_*Y3^7=L&StKx?evMyP{av;=#rf9U5D53YhCT$GV zirT=kIX->Px&PXab5#tS2AurXX35BY$l_Mz490_2d8kQ0w|l4pJUyMU51OIqxc%3^ zRI)3O)s^3FTmrKn5P(DUv39RZ1c45|W^s=Van3lGF+pGT>8v~n;O>AbcXKg%!ha^X zoNNTr>&gZ$lOFgQqu6?tS)*8eA4^z>-xu%nM`Bb&E70{D+WCd>d9D_Z!26e}u;CnN zYVs}Qw2X#Mqab6HD={i%ZkW@zaC4W;5eJ@hhXk8u3Fr!J2$M-}JjzMltLGR#C4Xzv z^pCQlu`(_1%vds{7c>ed|Ko>>vwg?3&E*=UQdGlAQ zIFSX@cbhg=obKRXWZ|PFm1?i}<=}UZl}GcGqC`aShFn78eAlL|zEkbj-hXTF&eu>c zj)7?{P3#6zb$n;`mjk@wW2Z8i!<#QoIl~)f5_E|naQF9kh)CzpX0d@IxHDeqWVMCUzn$sVr-`7Y>vJqBwgDG_X&E7r5!AP1O}9Rtwk2JkVoSR~!X&t?vi)&Zuk*54v) z-89{AYM0O_Gsr%Xd-&ib{jhVn>O{^U3i+0DyU<(6=pf1yMuBb9pnok^CdTsE<5X-c zOnz6$4K`t^_+=(St`au;A4BcC`dX+7{N#^;|5I8NX6$Jdhx!)SXT@CI#QQ|Rt%iSeYD#*ed8rAB4FNyJKm8n4A zz4)ujPx#QmcwLo*u6L5}i&xCmaV{edJ}UxljrDRB^aJxk)PE?|s}-B%xS}iI=u}hY zPIMgd)1C*kZ+bCLwe5l4Ek73sk@6$%7PP-8KmI}(lLXh0_fM*r9~^vV z)>D{l^lTC!Wq;*!a1h~W5`__}_Opj4QW45(6^T6MBx~1~FFsqQ8LoBN9Qoj!>dRN; zeu7&z$kWIHZ|wDa4#jZUI+tHxY1;eF9`}nSnZg&-!CK_)%rOD0tMB^C=Hoi#`;=yZ zqPro-n+w}CEJI<>Z|-x5aHL{lBoUstMsSQ;z8~vO&VPybm~m|oHw^89O&yh!jVTx= zb#E)iX40tS`R&@FFd9&;Fp<0(ebQ>U4;~o@dlKvDOvd^>+zVX-NjCMWL_NxfzGQ{` zVij_kX@P@*IJ$1Rng7!L0o)*$lpB9G&l(|d`3s(@>mn&E0^B{;pc#^~n7gFYjgZgmE_yDBU^~bX!iFE^=&;XNrWjA&|>ELW^uOnEk z=Ni6cDdIUSG;K^WHql=ki`UP4_nXqXWYZ-&F!wBpV=1Rb9E$fm#dd zOps^cb*41GirlbO=uw;mb;`H6N8_X%dmH?DNqRGlQ318Sceadm9uA8c)m(;J`_8xUiOC`_ zc%yeQhtzvbKmP1koJxz(Z=iT*PUS-*1&s9ikA2h;Cz-sm7I@!*S;j?e!b{-=8|)H? zM1M5BUne#z{#|g$ZA#DEP9loX4D!e}i4jRc(0Xe)pY?*5O|fEYeKK+SqWL2Ai7O{g z3*|(=tX*&dd+It@NGiTHAPB}EShcIzeG4Hd`R+SS+YwTi@lcz8#T3a0tA2RWU!pRZX1L+L74BU+NZsBwmz8vL&QNBb)!wK@ju;E=|l;ROF0XCY3K) z_3%+8R*>`WFQryq0b^)QCU+z~()8>5>xI5=%NT(Pt4UKO^1ng1#GXL`U2MR(G5s?n z0|<4uHGdYf^+Bv&V_9e_AI2uKw z_fQwXckrcZ?8^7smTZGd4oa2(rxkJpibdFB)MaWhGa-MD6#gJJyceS8)8Wd_OX0XO zybSnMgVGv52CNhjU!(AlLw_qViLT)j?kMlkUVHwS?Jn`=kwq)_XA(TFIGpcD+Bb7z)n&cbhqa&UDx{n_^rX^Y z?`s!X3Z77%n7+;+zHUU0Y+WF1u!sF*DYFUHdlDD)wu7PDGbuLZF{2=QEbImUBz&&$ zpug~Ws!>YrmXD(ZCeOA1xEX3k#=-tvq>#--Bw$?|-Q2m0n%)QlQQjgj>Wr`~JXOcPJT}#J3g;G!FS6#WEd6wccK4#2pmh zJjAy!HO9MQTz{LjBk5XSNQ9V$79d@ zO5Pv{7sK0PsB(W$_$fDh*Spu(4R!Bas}34AW!L75V}DdKv(0-HPm~HPp^rr#*AWRr z7!iUE``o7_b`0{9R0FwBkmqvxf&l%RLdq`v#P4UT?SqcRLQO8i&3&JBpTpkAV$Z#( z3~d%F8kz*tEw{9-1!dZj!ACCs(1368n7lSUG95M8iHdQqk<6Y<;qS)$@aVqUP+U3z z@%X+4Vt>H&_KjWW1M8=*81_Qx)Y0#0^H-^#J16YrfwooY$r`8EK1g@@v9S|ef+w_n zdDkh@HZhqHO@(D5Tx5ry;vuU1Osq~X3cdZm9vpWI{GKd%WIp_gHOVbXpM>0c8-IDC z!(1%*AaU{|5p96+Xp^*KqMPi!?6MjcO2?8maeoCI;Q{oy#WFGx)zqTMfh-bT$zEuC zV>2Aa5{AG{qGHZ21*c1u8iBetdKmdKUb%eI8~fOgvwfj7uyN|!le_K*UrAhJO)2>~ zdb)iaN9Gbtgdy_*y z8duUsFU_qpG7wTD(<_4dLu_sTmmn!&RE;?_P8md9l9ZtRm0Q7Q-a$>hCx}78*#e&T zGR)pM)3v%}o(tG;=WH5F9(|XC&VM_S=_ZgPi+RB}%Ik$gv=T9)+^7N18u{suuC(PB zrkLTw*!DBL8^#vo`HdAT*r8^y_Wg+Y=`D`7$PA6bu?TXIQe4s7WMy6|6JH?qiXV3Y zAFn(dy@CV0b9>}xYt%5q^LhPDif64`esqbjok!1Is3EfU2;hI4)2TMDUw?>umQB}P zsm38LBfP>fI$6T=dwxLmf*E#dvtXI*OB305cn!xc@0cuq#UGJ%>7th-@dAgxstF!X z&|Hg&Nk>S2PE!f0(OFsJ*XaDfO9&OPv@B#qcT2hP6aG}Oc|}x>gD2!Zu(KLGvN)5h zd#)$F+VnvEuw`}Uvtf}|FMk}&GELQc3cy!an9}a zsBj&U_(Y6l#NO#Mh5CCVFjxS2^ zuh+oC8b<*RDFU&cQb)cKYz~{)el&k#rs2{Qo_U` zzme4to!}^)bg1tQ`f9xtEm)HQi$ugnQPP1+bt}~@xLWdJg@qILO@8XFZqiIKBH-`m z!JRjy$_#9hX%qvt5Jg=Mj#+Y&b&YFKh(vx^Lhai@j6DxQeMQv#Shwt-@qVkBuguHU zt(T7~#G|xKE`R0$`Mi~9E*cAZgv-r>OhDg->}=n7u_9yM1vj0<03o5T>27Igg$m`R zz%QcGx>LcuMve$L{*|%OcLwm*SnrT@n+az6GUU!noXJ9EyGBlT(-v&IELNogEF=u1 zQ@otSBLnEFnDJ5!N9LJ~%ZOb8l^H4U-ch^54G7hcU?=yHVY_t}CM+QoaEju|`g^9I znDVu#dRbi`*@lFO6bdlL@lMFao?H|Op!4RGCQ6))2sp^0z{%xUq=~dEb^Y7kFJ=fX zn3zfXOn<+d{vJTC@RHe1#Qb{oWxk&s%0(P**i!LF3Vg!~Sj$w#o{o8W)PtXrE@Qb{ z4qYwdCvJi6HFgb4Ozv9yJ>LcKRi$wPE(6J7S_Hnt%aPJ|SQpFXT(m}#O*Rs_joa>cIH2R=4hx{{p~vS|S`jNg352~LsHE=+p$X!Ov@0Qbz$8!$OiH)@|O?hJl$WpuGf6-aFQ=P=Kh@l~a%}JJ&sb1uZ|4Af zK(Jq5fQ!{NUh9^z_=FpsI}=hOxa+c%aU+vD){luaf?=(Oq|Oh6D3%(>O)(!Hvx|79 z7Y#osiMd(_6-K0ryn;e2Uexic-L$P2xqrFlBp}GhLS4#qr$LlaqbDet7_T5s=0d&v zQn*0cO!ms>x+BZs2YxW4r84VUUl2R7o{YA(@jFFNms7yKpq2mm?uSR!Z7_ch1p*b} z4OpSTa7vO|I=1~q2tK~A!JRaVH-<$FA0CP98ynYW(S;>gNT{rz_R1oqsn))bHGgk} z7OV^I!ZDQ>eQmiV{jPw;*M&wE?MuH23B^E5OQ$4fPxT&msF@|%KPL9V#TVHe zGV9m7bpOy?7ZqhUPS}KTz{fOQk+yor0~Lb=q8yCP6mcIU73-?ciBW5Ek&K-}Zt0hK z#m6+c<~6`5K3?P(^V9&mIIm~_t=E+=C6J$v8#)uu9nxysh2=sIqHt349e?R(MImOI zz$Z2jmxd%B6raD%n)L}G->9%q0BEb2LbXG?VW6Yt*-0PfxtHf#THf2=yW>%s!eQ8*q*>naZ6NvjnI(n2phZ{N!-&FQ=IJ!>eN)TyIEnn$+tZdrMuP{EB*lRUX#3Gb)5XinD-7$m-(3rou1!t2|Af>2!KK%bvt&^JBoT znNp4RTDA-}l(iYCKq9IjsbwbZL*O^al+Xp~Mz?nZQq133e;z#0x{14|(9|rs22KYn zKi9$#BDEMId)460?0*x5`xnp*0ka>8if$W2c5nx?$QfrWD`Jq}=v3n41`k+%n!#_A zpVlP!rcxUuFB&P_!*O{=>SV>``@uEIZYiD9nGW@JUVDNsIy9ZAC5eQ1sdBrZmFvFT zJ&n9R(AL2O{8~*}bzhr{ud$dApSxvc>p2(-RLivGL6{HK5`W_+KFLOJFsw(Gi(FJ1 zv%0G*Qh4b zl%Z+pF&cQml2(9GSG#%|Yn*H+Dmtt2m>rd$5Ik|aHN(%Mo%=2kn2mW$nB^>cAK8xq zAtcOZnO%9z34dQ^IRNr_as=8-U-{^vFe5F`r2VVL1Uc$L>oYWMaiz+Ws+0+;VatdV zeH4YpN4FjY$SgLhnv7Y9nHDQDjZE>E*g9@LD-hBxcPVX#@`?0R%5 zss;9wk6eq&)3=yrltXT?UsPgB-gj!=_eoVQ3o~?tzkkwN&fN*&*9HkgPIDgxsFe2} zY5tlKO0#({mE}9Kg~i^(t0LxE{auH-I~;!#tFU!YKp5dd4{x{C=W;mDff}(d$U}Lu zLB|a~DSPTMg>cq>Z`?fL!c`UeJy)HYLV^4~`X;4ejKD|}jgIW*Wv6ySjkrrD_lVH^ zFv@P_Tz{r3*;gJrB*tY4GduZN6J}Tdlkbn+)_Rw+HA*zP#V?s06b?F7jjB?u0S4Du z2fOvCn98(r1O%IEwaTMn#qAfZ^G;zpzb03*Y$Fs?zeUCp*rn{ zfQ$%#>K4`hdMw?`2}I&MW`${kkZ$ltKht&pVUvQ*>Am#~TgtFeq%YKcm;R*BEPl4S zeoQU6V5Av$qI6a?T1Z&;-BAA$S6~*N>x?YL88`|{?he)^KB=yVWuOT>cn)- zYkyQ6dl+1cc`aUk5xSp$$;}xOwA)0o|7(l&J^M3H<$9v&0DEuM7$)(SpDKPiM0@mc*khWh!cpxev=nX0={#w#CgiN^qlD%eAP|{K2(ot9iR5P z7;ZwSc}Nl=X#*j;P$Jc+_He{WwvOzMu0E&NkxU1<(jBbxaW0E5Ny_Qfe}>k{2!Brw z;Mim|$hH{-5G5&vE1zu(VGK`xL9ng{TR4-N&jk3d{<66Z@K4fH{HzHG1&={`2v7og zw_ddl8#*2Yvmd(?*1-Nq$TCUhr;siN7C~)O5~5K_)Lf0xtV4F7ODc`EYivEFHRjtX z8_?qFI>bQ_rG&P5iHz(|+bLQ}8GpM`C!`wjJi;982&@qsIM!HaZX%iw;zerD<4C2k zw+h!ySyEjNH*+C|ZMojiw>yb{aX_iI;QVDGD{v@wqJ<+D^>YY0@Pf_d=)>U?16092 zAL+TF76YVaRB|lw(Mv$l(g}9@Y%em@W>&mrYO67Pc~zn#cQZi=QC_6N#((nHCtLxQ zXk0uhNu(o!n61T&T?n7><|>!;@KzKe3Wp*u)d-q49BSNQ!%WGr>>u=r#$RL{3puMz zy>!j4KeuvYi7f_DE~oYL?NrC39p1~Lq>kc2%9uK5&$vu7h2E-NVjdHxESI$r?lX+( zuAcR8qw^=AT?RlISf=sI%75iST_WVC`^Oe_0On<>zRT#O^hbgzYYPr z#xo{AcZ`{jCn3g*ZWb}-y0fA+WJ;dN3CW(VV8GrMw6&lHukde0D-jpnspWLA2VWig zyq8YmT5S}R+|_U`+J|D437P*!X)#4JBvpXm|DE>LL((T`dRf!AF@I8IidexN(LKt< z_qmf=wfefXrd>6ps^G+ktXS`vbc;2OrcmE=6ay039t+_}4EMg9B3;392eVnh86!sG zM0Irv!obd_ucvF~sA0f?vgsN1C7GMfkTEga(3GJ2o~yLpKrXduX1A1kZ(2DmYwFWhQ zYk`XgG@-}LakP0CiVEaH;pzut=cJGQj;j;(pP(|&I_)T0(tm2PCvn5>f{kgyx$)LZ zv53;KHL6PR{j4-NdAy#$Ri~Fz%nCcpqk2Y-5M=`Wraq#m3S(F4QT1QH*wV%>*F?7!PJIe4P5ey&m_@q38$-ipX*~-4S~aJ@K0CAS3?~&;TQX zr9RzXIDheU0nVDQ7V$^YdSI+BbNia~B5}O1-fSlna92-p@;#kB6r~vK?9{e9p_>rr zW8_jk&%JbWfMKl12sgaTR<`>tfoDOVO2X+Jm4a=CmThzYra4|M^806U)R)!>^rHub z)N0^h8`l|-%RRhWOO+=$v7GZUsn_P?<|?O&@PCyF@U)MSLRB9;Hrnw)lB)H6plyjt zL;%2qn873cY>2sr?1DP2#AI1A7lSdmBn<8&qXy`og9TPMm^8%(9T#qO9RL$`hs*n^ zK7ZnCORIfq!h0qSydy-|nWL-82uDW=JbQZP_O}TgxfS~j+;^))TG_=}$&oS+l@8ir zF}zAN)IKauMgH8bSsDINsbVr@v1aJh05Tc!1PXgxZ!itIP?P+{0Gdl+l>*Kpnp#cl~mY@9+mn4PspvRY+R^_BPw*zjODUT z&yS+TR0-1Z1!cth8-E){ zBxjoY{YpuWUE(Df-^Pa(8|G*~`Je>{JtStlijK ztB0Zf5Wg>iC$5>g_Pajk&d2PgLD}8Va1W)$=oS5_;%hWQhTfsa;pRxnWv)jh<5|9vf>ZV{Ky}mIKP#>NA`Ww2O`fv+*q5~G2W03PP&}w4U!)vG>&xXQgsnNjf(uK|ePkzw9#kB-*LoBM#k)ln6%eD{qfN z5Z~_-<}eao(WQZ_fPbO6d!XmXJab*A6 z&`a^yS~jHG#7k_W6qnr*Oq8!{5SP(O2~QhfZUh4{iHg(a`hBgF@Ucm%{(!K_75BR$ zP77^tH1LpXbo&mcum_K*pD@%T{+&!59>yY(KxPEO3UQt8u784I$Vt((wn(aK^6=f{kw*LtUt%u6=1*jwlZGIEe*WN0_d}gt*p&n;%Wn2+HgAZ#Y^bblHgCm2PeYegQ+t02nhLX@QvdLFa9HloT)UOAovwsL{cY`;}AHcD`R z!@!3&yw*M2ZR1*g9B22r?k5C-$@4pG)$d?xWvGb9JTd`YqaPI(iA@zAp%Y+TV{`=6 znM;v6m`DLL1vSC$E5_DRYV4A(x>}U$t6Is`Dap4EW-ep zrcm$?b(LUmb9JAQCZ?`d6jho}UaO}Giy=Ok^g2})c8k)~dMJLhlxajOA69<0SExGK z#%UIxuYdW4`#PqYF5QzI_2X=<>N|TIdM)&7vZ6koH}2AlkA@gf z$TpT+9ACxvDWHbSus^~mrTKEaA~4X#6lPBCS<^vYLT$uQ>Fs3)R&Khnf^&ga$a}oS zs38^YN5qp%D3(#9KkiApukGp=*u2aPS$5J2w7Zc(nZYpk;QhB z)+>w?r`+I9svDE{>C=_&-M2G7WlW8L@6z0Eq8V9E-tGuv0p`?%<_-5Q$ebEsY=6hX zN&P3-kHORJbn5NKCu#j^_C=hzL3aSB?#qwjDo!2!qs(m6{x6Z<^Bs8OS~RGlT&3x7 zBxT{bm(Z=56IMiy*iJ#DDEJ%klDzBM*_u;q?weS)eRe(R{fQ&5)d|2|scP%G#lVqA)s^=fA{Wi@3wFnm+Pp53+VByFbgb;EsUN`yS(rJR3O-&=Ds+ z8kla^8@CTwzw+-8{)m&zyuQtb(;2R{JcWD-2C5d_5{gavaK^{CWZw$I_kR{YPV3}l zn;IyL8+#4MACYZFqjsA{@38M|YpDn_k)YIG_Btr~xW@5cMf&CklC08^Ldg&Ey^AOM zA^$PCyorjQ>(`o)3-~+bwn5iTi$3^6wRogL8iDB;8NKY%5s&FwPu*Ec*KXJ(UvXqh zQY^fRZ8Y-1AKUr8iGG_;HGhp?SIK+k^CpnOpq_4#aqipbRt$aUm2=H^{S{(Igkcq* znKWH~*d~KhenhdywA8M9TB(rBF!6fW`0=y5)a%N|MS!bzW$Pxwgh*2Q*^wetr+C_e z+krR?=XpNW%ZC;5y6~+hk|b2By~@C!Z<$I{bxk%#3Qa&^3e3zRWq+;UGUO$$Vk^#( zcwa)-;pyV)GmHjr02WRq+qwJ6ZqDT#JUyB}-p^H@_wFAy@7H6XS7k5sb_l+sLLJ6& zj$4W<7KVKo!=PrRBmSi;L+mrKpSRFO5=Gat%MH#6Giv$qJPuY4#!4rFBu;%w^G(HKIanlu+NY73q(I zwlgZ4Ef~Bf$Y{wNlNbctMbH(>_Rphz_s)Oc;R^o5=BpwF|tnV=0x07T4`qJxfZ-@ga9w<l zT{M}=*7C{kN7d5z5_?f8X442;X)g@kn6lNFu|whD5{GSsX5z07nwfoVxyz{Bu%?5y zL!@Y8WA5*kqH1B5r+;daGO-|ztfEafC&?qls(Rx!4-LLLQ>*T3RIXikeos#bPk;NU z>DqF$o3&7Yjepc@xON*h*lL@KC~@Gp&*Mk=GtS0)%p;%`q#;E*0Z#3?ZM zu0Jio5*WTVn3dB-$VwE^SQBT$I+IBPq4>Y|;Cvmuf@h#kTYX>r{0W8fAO|0nV3p%SqJodWHT;-Oq4uD+DGZA0#fX zXfX8=TZjATvWuzEoA4^30bMhixXP3gaqlBp>W_X+2F1KJvX~#dCSE=HqZ*&r$UQk1 zW6RBiDu2#)2_QZ3e`ecKB=6&vWv_=s3;WnCsn$gFjUN{O+}|Bp^Kfe<3}@RFfZl~? zf$9&~Q2_2>^8LEf*qO?fYGB4T0oQpGdL8#E*1}d7s5f}Z(*vt0@$e7oJ%$)Y@_{|QW zsei?qzK+;Htxus-j9M5c?sjw!cb~ush^pvR>-b$-OLH1mJ5wsdQ5fDGcw0}m+E|!= zWq~gDhEZSwM+1oO(@Y8v@NQlv?#3#3Y};OCd~E66#+|miBA>$ao9U#84p$NBut?WP z#Kla8-QpM;=GY#$8L{J&p*b_JyJ_sjDu2x_kNKgO(H)L9M6`k_%T(ON1pVwARTxd7 z*_!nP{y-W{Fnl!FXbr9|AtK>=MU#qMi^h)tgqpfO}oZ&wIAs25&$1|KQQ{1#SbsUlB5~+8#-hk#}s-Aus|`>XuWB4vVo_S$~jH zIaY+i3mxuR?RGe`gyN&g42e+Sq9g(L>$f%b;&@l>!w!fz8LFa)$Z>Jp+oPy@xZ*GT z`RvA#mw`q|Xcsb7%$jHSO*B~;-l1}VUfpz-x4s?3+qR+JNVfzR!WGQn65DnkWxqR; zO0)Uuwadf4;Te(B)DvmMawe;P`hV;}ds1xom`#MAO9>G0s$t9iFx;9NyPWja3EstQj!MP^Xr*h%j&pmN$G3;3^d>H#QOHRSbI~1;G zLW=j`sos(sV`1>?^8Wc^!4{JJrM_%+L*Opr@0t|HqOfmn%=tgy;qxiYg@1hWNRHm0 zGop&eeWJkGW3ixcvVPkjR~ti{weA#CcM5NJ@Q2dpu)EVJcG2@1Fdn7xTyYk$_5Df0 z$Jd;0oJr;i89Gl^gz@fZ>C>7(M>M8j^w^%W4o0QPNSqLj@hywJL5CITgv5y*v|7&) zmU#IRy?iq5ACrhY=se;MY6~({mzvN|#!los4Y-K6>W9n}AAg>ZD0{7(t80 z_9alhWl+zu?z5y+lI-s+gNXeMRC23Ic0aj z-X$hElcYmJ?(8GgL^AASg5Hfn7fkq;B7iaIriMax=uC-w+D87pOsoa$HN38i-svX1<$RXqyX zwvldNw%O~-3ht01K9*HJMC2@$^0Ihc<FqJNt0VKZ^_a&BBVU*Ba_0AX02 z;;Y-@Nqn`WSKu)u-(=jr8H#NHgS1-PG}ZWnck+I+Y3>r+S^c`P4$!+i*PJxx zU$Ttuam!?Z_K?RvwaVbDGg-NQrBM&#)F_+qW8E$fBdy}DT+t5NzrWsom2e}H2%wS_ zU7U$wgMUEa$R8TGGXfawS%&d-it{w}&QTh9A&Ha5T+CxDyCWA_w_@Tb)#&ZQ)6Hauw`T0wr$(CZQJSK#7??9NyoNrbZpzU z%?|E2GcWUSAL}Pn?Okg@n7LI{hoCjHI_F@x4OdN)Cur#FR(oZoIEu!dq=QH)(+>fb_4@)G2uPG7_oy>ll2rv*$8zzH!nE}byS0LOTDou z@#98;-Vwy#VqOK4s|@DD$_pA5L1e;x?G!%#NdIwWi+=eXxL-R#q>j5M_)N^=%I*gD zJy*X%`I8g8-!>-nzFHfOdEH$3f@3Gp(RS&iG8jWw!D)T01m^{v6(k7 zF0l*{2NSL~*qV+YCH3$BYQKB@C9Yuw&Lu2#UI9(93PNn;F78-?Wm8V_mK z?n?AL{%ar#{>&cNy)ZH6)fEazoBk)e{pOlWs{%h0_B%jPq84j8vOFfkXxMQu&T6jX zd<3jauUW){Aiv0D(JkU{58G3~q_2x6FHWWaOroK}C1-*x4{co5*|YK|i4v6|-xE3Q zf2`J=HpnGF@6p`uKjNmBZ)_75HIb4e=aY^8^22EayEvAbIQT18_WJ|?vg92;(_C-J zyKl|&n(clKHMPAHtQ!X9*H=Gyf5}o&NSrfk~0nIAnmAsg$U6Zg;xZUJ}^;#b- z>MMV84)}Z7`h6A8muzjo{V9TBxgNfRS{eNL(zQ@>m=e^Vk4w^PNsf$8Jizq=DY$1> zFKi<9KA!#Jx6|M3OpHmM66V~E=f}0i-$VXsOTvzek_PtzfH}JrcthlC3Q18;Kh9;@ zLjWhDoWfYFnA?|)&iK3&fndJGHD=(WMVOGPZ}wL9Jf-|b4Y3ixea&*bbipA|vKY1= zzTsD$pU0J|cKAN^gt;qQzMG+HuMrpG78he;J9{uGi6mL26KK1TW*xi}q-Lwe@DB-0 z?tAZ)Pdltf!5`)57@SZq_jQ&2y^dRuAH=$014w%O$`*e6DK(W*`tg}nb+TvYB6fW+ z;*^!jES4r`9u@}BU+um#uHhLVmCb7|RIrxB`oSMMYDd)8g|bXkp>gyL*!}v{#nm|mjLfMq6zPN)!F7=iCT?O@xY&PW7W9@$ z9AyO0-*u3zUD<*>=yky1O1kX_n-_n_Ih{6yE2%stwCn*X^r6ZO7jJyZD2)-^Z0n~; zE#vkmNB69bOs@BR$VC0H`wL+)_gM_g( zYoXYAtAIpD-_U7fgyT`M+CY+_ ze6AC&_mnxin}r3jKytAE{ADm+{O~jcOyb^iiie+b)djX4VnFEUNKp?UBZ|^XQd@}t zfL^}+T20ejD7$pYkr@4!5jno*l~tr*+hMji9N>b%GKuo&U@!lRSusi>vQ1_B@()@C z+bTC2HQRKFvBGxWkQ$lQF=mQM>rp-Y%+B^6sxCd8Z%d4{ zTY$8do0U$_s)&JgI_V*d8LT{ShLHU~O+iNd*4e?|;O&g_6|SmrG50}OUC@!X1L3(keG2tz&n6dT=l)B>$At!@-WfTK#7dSZ$7he*R1gMW^(2_wFiycEq5{XQe!g zkS55UohF)A5rsB<3mIjvD67gUD<~96^oyW>Tv=Z~ufxGjBf5x0tFqYW$1R!%!G6Z^ zBc?XUcERD34oP|stoKY()Vu9KCYfO&_J?Hhbx%K8S?h`pmF#a9SBHQ~O+B>XQUmVb zzx@AvV{6=BnCVuZj)&oAx)nZI55KkT`kCtnlzcrv{rx_w-XKmPki$I1^ zJOa+4)W~_^cC_XR$hL6qu=An67YAhPNmLZWsj3qh+j$__Hmgu)#g)Wze?Q|3eY#0n zPM-e+hk}~gE&O@VY@56%2*#ms5yPw*q_5IF-d|ZVpN%uUY$4D)D}$Hjzy;*xRyHvS zydj?Hh%b;8h_?4C_%h6%ZdhJsiE4~=sE?B?E;5pVVDiL7q6sZQSy&i+++%_tZT-Xo z1Vl5=S_QM$$Pm$VpcfQkDbb_0XZ}MMPLi)lm7Q!y?i;_&mAR0>tjA$rH6(w?F*O%E zD=5cCoS65<)&8DLb`zk)v<5&)i0V!7hajWD_A0Uj9qMb54gbTcNP={ZSlor=XS+|3 zGalyrcxr3p$<9_Ge4VYb>(Au+lhrLgqJWt^SSs1|4}{KVf8*P#eb;vL=-@HGvPcU9 zJ#+qoKua<LpaT%~W;+y3(~$Z~ILJw2K`)(L(sPEK^$@x*uqDFx6q^Akxn4 z%NBNVzCxxZ0smf`rj_{HGUtPr`hGDICHJrIF~fDKc9!4#H$7LpIAVWv4E;c!7Gmi} ze7X4WDEqmbrCzA zt@GA`Mi5+|yrKi{VHd#RVR4v6(e^m~P-xq!jvIy84KXCbbWTWq;6Ci_pxQ5UFgqFy z!5N^q_-b_lr*!6oGm8LW6$@pdh7K*hJS>=2Xq9QQ>Mtn(@GP36ze%cF?S00KG-r9G zXUiWR8vMH9fy%Zhs$HK*X2dESv~^(Xx+YKEwiLKMU6!B?`~X(H7B{w^%5(yn_@$Qk zRR}UG0-N$_@vFo1n}#ya1CLu*@x6qp8Mv78Y`O?*81UsQ_O7?#FO}g&HzAlcm*ggl za$Lu2^{|(U^>uiU=@}qwP0vL7LRhcT!&r}_$akT={As&DgR%1lZDVj!r3F4}HZ~@JNW$v;Uj{UzD-#BDiD>^Y4^bZUA9oxGQ=E@Q1KcERxM|ogQHJK_G zoYAbgaZkJdeDi(e(vNV~H&S@xYCMfp}@S_ z1x#DoDL@ezs<28CTk!K;b?7Kh5ZkXPr2+^En7f9{K`mSaKL^Z8ry;o3zp8qfQ`}yu zcj}avD|L}3s_vC6zvDQpUy ztkgQ_>UR<@&>nhJdMaF&CkKBbvQA8N);Pj16d1(N7)p>lM$#eWRG({HRLbfl5u zUbpgDPL`q=M0zc}mcQH5LLh>nKkX~QT>g3xim77hzYLEzDI`*!v3G!g?Ks@dS%ux| zNss&BoTHJ85M`}lpu*IXDVJvs_A#j%&=w@+4Sg)?#!rsWfHhK0S`(887L3W>$pZSn zt+XF*M4c`_QTS(v>-hWsne5G+2*5@&30Yo*^&8GtbJ=Q%k`HQ6OJ5B0EdAE0XD$r- zKFfn~`|P&wAtqwu0&62-|ND8y7pVT`FNTlf+RjHGqSqx5LKO64&=k)P7V@ZHq1^RA zMyG4CnWR!cg^XdUB+r;oXJD%;ivtLq=!dS|CKGlb=#45J5r2=Q^?^dN+*Ap5l*_N! z@#X%j-%Mn&TE1b0A|j$9TWpQToEPq~NN?pRAjD)65I-3?AdIP%y%=XbSRNks_L9V{ z)Aj485+6+9p|}M@Sy{ajteHx>OvQ2ppR^h@^nB0G9W$I0w34#5GM=re%?O}qL6-1z zUo&L{$yV19x_(WSl0RqfzQc-HOd!NuY?hc)HhoPN_|O+^P18l*brMm4M3Rh|se7TW ziYP5=tqISpSYc9)t^Kev>G=IQlOY8KCsx6i*{Gj6&A2wWAY0qRr!|Gj270ef%&4Yx zK?B|@cUc7=K=vBozfgS#UjZOBaw*vp3we+I(2ES~2ZzG1L3(=ScO<{bL*9E}xMQrJ zU|2QL;!(x4R-Rd|gh=nh_oI~Ob7E{ItxONMlL`&@GyoL+e`sS7Z-W}!ht*N6$LqVh z;*(#wF-nQHYVV~&stzuV}wS>7q9`@FHhQOu(o#+y5Xbjhnr9Kk~s0X z>~4WQK2RfT$Z-@+9{!qH$5}_cGO^Cm6CANye;Da|rRGB3r&0s^VH3@p$EI907`Rf@ zbeDU&Vvbav3z@Q%<^dYVTu0+S1yKKeT~LVNBg)$)gbW=!ahvsGwb|}+3*Eym7Lqdm z_XXPAa;l;f56gNfY2o-DVKX8SX0`!?Gm}3dW?#f9DGC=GoWozau&5S|k{`3^M_R7G zPS)9HXgm3RI$6Tp zEx3PZfA=O11<1uxJt{i|HMc3HW5z|tA1O=HL&GgzgI&zJBhj)3#CYY(Ef08I-FPOnc%#`5{ZVt5}>yk6hagI+McpLyLRj9XPap zE%4c)&mv5>CjpJaX>$|Tnkfllf~GfrOd23tx>5^FZn#VS4hw3Xt`qf`ANXs^TO9Fd z=WsICwviCGQPJODnoL*yWrTs^{}6Mwh`2QTwV--Rb-(eDFJ*|OSKY4EHxS4zp;d&g z8LxTGQ9M(C=3-~L7yUwtAIDxV3SxblkJdYaD>Di|5C=S6AS$gMTb~JvWwe5S8k!gRGrCO4)sh-C`ilFWDBS7TJ^M z+^&>l!Vj|v{#>1tp`b1Ky9l=$$gF~|Iw*j^v7Q8F%@Nkr2f1Fg9{d)@8yJP3%3aC! zj`;g0j7Oz##wNT{li-jigw@obn+Q7+?m5)wJplmTV*DQLS*|n$e*ah}r@k`jqo)JHY2ynJnL6IV~3<#-rWwk@n!GUV{! zHv-f=*YTkJ!wKiY*L-@SD@6EhuZW+ETk<#iTC)f;YL!Vta8MK1bsXs715l}nty4=x zQc~>P*U2h&Jf=+k_BaPUpWS+(#ICi7&Rhm2>QKMccgNzLT9cp@JU;oXqSu;m;}bp| z%|7RL8RC?p-k%|IVC6M<8EX2t!lt;$)dEV^{$=5!N$!@IAi2VTly|tMVRcv4*xn*P z9zD{k+c+H*B!rbIOR88rP(_I6>B)BJn~OMO_|xeb^oVh@f>RR|70dtJ0#+Dfbs>ru zwW>dKbmIlz2Fb-Uh?$LHNW5f#U{qnv+=TF&@M~beXwY`#$Fv96n+`$g}8@FgAnpeMA_8#c8FH}O+eTnAp zKM0=ME9IC6hd~eG3Qu#9&A^#j6W~MQwD$V0hdqJqD}kxCjs3AMY3OZSn59`IBrc{R zH7Udk)5=1r53ei~VBwhIWlr{hKjynfHS2Y%ercmy^7>LGxq=Sm)e&T|%NKonmIA9r zBCBtol1H`?n=hKAf~T^sk_=jaE=gzmJn#Q;o5(#GGs>y>(x9!!fm__kNQjd!a!4<`h#)4wlaUUU-HmJXOa7bN7iefdYQ{%Nz2QtM%3ByO&yxnvS z2DlnoTu^wjoCSM=IBG?EICL|NaXT7vD`LCK1tta1ZNqk-krUz(WSngd+;yyWOJnBu zW17&Khaj~m(Nue3C}x==A)}N;IY6~|iJ~~D`ss;Wof(NFk<3aIy34Lb9_0&q6nx<| z(b$oAH~}F2po2dd*wWOQ+^>WAo2}n8mm0bNwu8-?(v`oX`%8B$!e+aopr93JS-{cy zKEij)^D1EX&Upla?lp@?xXS;61Tz=VgRbA9iv`$U4360AXL#C9>_4Q@ILJyC5UT` zRn$W-rj-*f-Wi;Y*=wd3hFlLOG7F=##sHU*(sd#)c+s)>qO||bJbYS?^^3brpgc*} zgqWYBrKMvZ;fF^q5lCSxynbi($LYX1%wHDt~Ve7(1hzn~U^g^mblKjTa3;C5C0Qb-@!n36#W@EP#q2Vw$UUIfY z({AD*%FEH0(`gow+<51)%pdGy=t^veCQg+g<3cFY9SeO4=AkrxlbW@wZE9Vn1&W~z zz2PApunLMprDdK2ckpY=P75M2L%l_{w)0*C*8hN0=7rN}Q<}ggG5x820nzi>wIx_q zXSRt1?sl_kQ-l2)lGRDUXu}h>es1n(zHpmuztPuM#f$0K4>q4F>D^>Dwti1_!e@GL zMC=wWv%4orV9!0zCG9A&J%X11f;z0GoVJQ-2DC`~k!@%_C{d972 z)d@z-VR-)R*@~+geg73ISR?vg0+YSj*SeJk@URhK8ri&)SaH&iJwjYFhhmXRJbjsw z#s?ZVHK9-Jai{&`$5D+P6{X+ulKZxRQgh07>7AKy9=nT^KPb^BF6?$;hVQAAbd^BS zlRyl5L$+GJD#25^K(kevo=)?#a4gPtAO%YfN;?QlvHJ|y%AcE-U_C2hpZCjY07Li% zBtYwoNh*Fr$&n0rZf1ohCuo^D4v2!CfYbqXrYG*JRCABw4%Gy1sjl( zhXSVYbM52Gb&RnX!3AgyJO3G(Wjz54V?nyNeVNJvdG+uTl9~3^s7iMmCQv6kji$3uqY*Xx0E@7C$*o&I{* zaR*lXi~mBYg0i_m*|u7*kp$0)ryQUN#;#PMy?y!nnl}H4R^L^nX*G^}VvO;q+5NfN zt!x~oj1!;%o?=?Xfpl{cGxhQtwVP*lP8X~-b{I2-2UJOH+MGp>0}c)YC>fuL!!~I= z+qA#(O+Bbo=3Jsz{>6HNH_4^rqd&2Zj zU%6p5yQf66m5gd#^?EpRLCus1Px&av00DzzTAOvFK1`O9`;(*8+DOe8<|Xat?|+C$ zF9r)OvHf-vw`b5LEaR#-z+b#B)2C5u=oPBdiCfqaZctFmN3U;@)fHhnag_}7^?F)C z=Y(l7mtVV!qNAUa(9O7}ym@!o?#XN>Sc+@=UA{@*=CG?8sDWuroCoMswBU;-M?^n_ z-RKhXe;W)bx4Sh}1k=K`5LW2culfW;8*{OUNJvNicUBM1^=|N?0tD1*!%W>UYWV&u zPPaeGH;kUaWZ{@UlWX_#EW~wUtsS!(EuHGVmM?ixDIM!@{#u+&ds#@z4ZA5~176|T z^W%!dqO(B4zD7*g8|W72Kr@S*6bGUAwy!ZR7v(? zX{jU#%>yVXwQVtRs$M=GW_~h8->^-MwB?TxX-h_BRj3!`izleLM))6ZDmeUU!9S0e z5EU;=LCHnqN5Tp9Xg)xu%$)}(R|#qUZj()wWX^9wLe&ve0F8pmIXJAyZ7M$_NjAH> z*tiwK$@BO!^Fg+VRJe?&jPmDI2d5@qfdMvz6?D zl7O@FaHQ;kVzgp|g0<2AH*x(pVWM#VXRB7Qbh7raVI$$<vfj=Y--EqDP=Lbez3+p7f|3e>f{OZU zX^F$2!F`49H{yjFqN4C9+yi%TH6|zkS~zXUFB*169)!GWC`gcS5D`_`ytJYq5D^s- zk$q?Jwn_>S)I+3tP@6l@#XS}luv|^h>&qj!`bOyjr8hs=-MV845K4+cpTJJ=!>ryK z6nhkeJV>$i&}JCFEc6RK1o_(TB`OJk-USt1 z2Y>8?sjK8)g}SXY2;v%r{pe&7^4AK=7lgQj<_g*%6BMa20f7q=tLkHc81F;00{4Q< zn})(EvjzJPCSNB!oB<&CfB=SwAfwP9)SJfJJz%0HJ=vnm%P!Q`D3kDDjo_=?!KKW$q}wWAKn^U!h0PYfIlV&$CJ(w zp>1u!OBmk`BBHO~W?m)~A`&7ZA_`zIAe|t+Im^! z5m5jkiO_rfw8k(*IRt7MAikb7L)ZF2(SStBt@$0;&hMpwgdV6+^xNF}rahXW5Kw|| zxJ?BSiC(-X&@W)(qjln2ajU1`Lm1*~=Z&UQG`~kT!T9mJFC>dZrMAZ>*=Xw*&6Rzh zDmutN=Y^47;e!gumf$wtPwvVHhFo<&|5G_h_6_2#XrsD=W`-?kFS|vg%QWXKQ%&h2OI+xQ}d!|Kn~C0?)#;i zahlOVUqMvOZNQ&Ds!c$Ii4hVc+Cfx~-asApYF>NZqZ9vox1b+gM~(aO?C`s1RJd(c z_%-+IQ!%Q5pci0rD&zW$hmi+)Rb}4j@k_2`Uqrk^4jRuUJ_G$;5h3WkLG=0r|B&Wf zcB-i<)BURE(kKUR0AT`?I_gzCzzffb@u`3BGxqpFj+YO4JKppRb~%2emd7{1%20ok zDcVJihn_8$xie?H_z|GceJvPtCF39QIe4hfhoY`x1!QZ_#$VRiL;;6F*zX4#%^8_5 z?)GyhD1jeF;%kaK_}In=B+`>mk6fP11lZiJWLpOJ?mw9@XU?w^-}+|H5WA<~R1rfi z5?!}(3T+zm`em27wRF`NCs$>RpbVHA#Fh8Qk``baR>)i9&S5uS13Ov8oC6fJAk3Ld zy09k@07%p;4h9aYMT9hJi%@e1p?iJirJJc&jBZ0OLWS%CJ6t_aIViDKo-XdDry0Xm zK&P%gLB?%X<-uI7Oj44WyMl@jla100-kOl9jM=Z^6UDwx?DmvG%*iv)>?WF_GvRW$ z!nm14qL@ov=)45Vs(5)Z^&jb&fW6Q9(&iF55Z;kfV0jZr$2sy93{ZC0ofxZ4q)EMT z%6m>>(iO*0^N#MN=S}?QIQipWnJ)EG=uI=cYY%zZ%oOD^)NawFm_ORU(j zT3q+L#=xoU_OM9q?|j>dJT-f1et=kCR5%!IJ@v4>9nvSW5v{-#jFQvR5luO>k_~Y? za6RT9P?WLOPrx-=LAXFcIql@h5m_0cNMt^rKA&T;WZx)e1G;8OTPy4!kPtZ=BGX$s z7M0aeQ@mtisZ>_9^SJ?+|3v)?>kWh3v^m2XtE1V3tZ&_Ma~Fr*bo);jKc2^YdUZ&n zM;xt|oQ6UO8@Ufk;vu85T%gs+xgJv=$VFhl`5@(Cm&jyEJ+X!%d4Fq;tZP$$hWR;_ zlo%3h*PfxUN%ReQRP~dvOe!o;m%Yw=Jamg#UaxddCux2C+Q7ToZbVSDK+czB;9p|m zpF`g<-ZS{R8^tyyy6>>1Ko>|wor{yoY(n#{c@o6_W{KE{_ZpSEvAUATEWM*EfOIb3 zm}uXOhtYfpLl!YGAYCL^#^Act9Gruj6{qC&$Br!bs+UZgTf^_9y+65H5)n?K-znL< zr+zfEOja(6Zx%lM*{3G7E9optIMvfP(oM>ad*bS9az9X`I;IyArN!0B(kzt8#uW6< zz;(TpQ-jE&q0LU|zYrIB^r_Zt0G!7mcUp2k$icTRDbg51b0sz$u>sD`A?8(AZ)Tf* z{Rh0|n9+DyskSHUGcXOOtj2DPo4Lw_Hotcs=tNz6HPfRUP{E8=p%$iuq&Y8Dsof=d zXM5WXSDZZQ8qj_VD&Bf8e9NK?%jQw&hv&oQ)Cmo}+^j)bu_*7|u(Y~PAgtrY3Nb?% zPas{p%l!QHii2;uX2pXzeQnNH!pPD>lsw7hwH%n#VrdZa+wELkvmFc-nGqy!s-DIw z9bQdIvPN>Q{zqu9vq^DL|0GXiB~C^vXB>|wn^Cfjkkl2}w$Y`E zAFTv-N0WPNme*L$nePe?^oVWdFJ($Ong!~U{=wYla5costN}+a{g?0jvRj;N_Amk3 zajA;d2Z7{yy&FuvvsRB}@Mp59zq-78(iww30nPoUG?X@>*QmXzh+Fa_0BuvCOG}Ih z5$)%}%n-{*gO%4Ys6>(9PFJbc1K#Py&KE%jO$q0H2dl?l2kB`8U};3kzqLyV6@%#= z4vkP6gEAtZ*sMQiaSTKNCu~xpkwG)FdX$j2vtiILiUK6UF=a%OSaj^(5ydrWMOQ4Bhi(;jG}t+uq5k;F=wSM@c)pvag0X`Pg=gSLKu-nnG^(#2e#D zNB!$ocS|eh*4MUb&Rl^bB&d=ssRoa-(w}(pBxTHG4}m3d<~zdVY&fG;_j!Rc=RSXN zVNN_ON+bMDU;>4+^>h9t7GH_lR3plhXeB~p4n)Ul+RnTk8_~|-dEvz&O@ph)J}#9b zb$c%}>ndX~QtQCJ@_>8E$6_BRLi>U1hOjI=y(K;q-?%z-C$~*1qfI&EHYgr`SiIf> z;#QFb>xIa>^3dG4ZD(5Ce)O~T#m{PhUQyD3bKt`Oa6v@g$|k@l;g+jz>KLWCYS4b+ z;~P-A>xlFGt11$~-9t6?2W5vD*yTSy@))KU7@T0g6-?^ol6YHuxT926khh(P#Ict6 zL@&Wn#olhi)*HP1cgXGBad4cH9^5S`ARP}g^Mz~&b1M0|6IvGZybu>DQ`}d}t-ZP^Rr4K;Z|n>lVKHsQxU=_@@BT3E z2(PE}JxhMnIwu9E-}l8tXa3q~4!onr72lk8=r2XGO}^l0F6G0T>aA#vn7(F>A;l`c z!!R`DiJLon2ph>^s1>?&-4Oe^B8ZM|v+WQAcxuSh&Ve9G5YG{Is2SPKh5LesX{SI= zI{(*kipVJnr@>%AWME0W@z{l(huA!`ZIalGX`@ZiHE5Xd*B$P31?g1DcHZ+a$idid z*I%0y4Mc7|G9$CqQXZR1S$a6YibQ8;;_DCqjr>zNp^lBm?eVaurU})#y~f0G?r&WW zWEE|?jnQ4{3i8U~KOT3_mY0{(?t~&e67c%dN(<}dK;j(Uy&z^qhbG1`zw4~+xnEC8 zh14rpc7`V)Jd^!kbCq_MyyQu_s^gmhc=IL(ifrrr<$c1_nAhvfEj zVft{qA{f(pN&S{iu*7C@ zd$hYZv;K**lrim;!MXo4`%I#*%`O-XJ~56LbDSL2v+1L1#wV*xu99@ElOhv}-X4ZT zuVR_}bZ&Ov%743fY<UA+C0BUZ>>f-+BW{p*zq5U|V%Vdyej$LvktWPB6mwzHZ%4N8?x+0{yQl{+4csR;6 zCs3J_!iwZ^zi|G7Xfj{qx7-y0kI?2I#O=KW;X&)AAQNl&wm!79p5Bp zpCI9H_$(Nn(3TYXEm)JIsTY=3X&n9W)!S5&GyX{00EJ$tfOHC|$@K3>ihu|9p#j{C zQS81j%i#F4AhuN2FMbM7jc9o>Hg;FRvoA*;?~<{xhclGBKe~plP@sXs>1LbJ+7hYK zqSxeY`xmCM36=0eJL&K1WyZkz!vlm&Z2HG7Jk`Zi)!H;yYoP9JyzP2l4~5k5&-jqR zbJ?%TAE~%efLijbpn}^BL}}(;TP!{LTsc^=dHtqcIHHqmeArlaR8hrJtR!HG&*0dJ zMp85GazJ%KYelv`tDvHKAG!7RyZGt)%_MI{@2R^O@lq}3wvXf|7UXGm_f%p-#ib~A zo?B#&BNB>zaVIUEWIw}^iS)C%`>?iDTsvaIwadF65PRzJgA%H0?i_#loi3rX<$N18 z)R^HK-D0t>RHJ8Ph^LBt5qc2@X(&9zh(rAe>f~COk~{;6vm9{uHy0xoV70TRW7mm$x~C+;-KcHr2_^IaX;C&GFdv$ib1&vsx9!My#J+bHFz|`K>2pT* zD5VM?xRi-x`L=_5njF`gQ<2Ha z|1{@x>Guz0M`I^HR`%=mLFpI@`#9U>$v*ybO~RNVVc9^ZG7{{~LoiRdEf;a1uc28I zD30@puHCnFcx(Q1W*Yil;$sT;l#heWj*qUld+VZwyXK34KjBUMC-yUhC*67$D{&>8 zGOKS+&EfBLzMjNlJkQBh_L^1cngkS7o1Cvi#;y1Wr;vYsIxgV z>fNs3q>R)Zdhvh5QUzsd_Ucva>|j`=0OJ}&cU|Ym@6+njYQ}$)2nN)`u`J!RJWad} zk^HrCEDJeTrS8AXxc|iQclj5gq{AJmohmcyX^~IFj1*hf`L%2_*R6z?r(Bnk9@_TXaUMbmFpd`2%ljEUo0tDKp za!0fQBG)R_MS|aQ%ZOe+wwolm%0C0iNLP3&&3F-KTs$l1ruo*YoRp<;41>YF8X68w zp3J%!8L@K84}xbJcSpci*yHiTJPJr!ewX=aY_yE#UQdo|bnHX_#faWa+x}V?t$x^? zzXwIt(6dz zF6q{=4}BIWKj~o56SWor$z)RWYcfN^ zwWo6Q)l_m`9K06UN=xdqB&`!=Yndp?%TV=Zl`k~wzmlk^{;#s56#roJ8SlS$5v7J4 z=*SWOjti}ygyytIb-*?k0rVA(=Kp@|e z-Pl#{SlpYY_KZV%h&TqozAVpc9qBgA@=V=WB$_%l|H;%!ZFP{170~1U_t-+$gls7E zk|JcLtJ0SHCh{iwl_+J^eq4=~`q84!`WXT(dR@S&3=|8_Ttp%}WD4j4Zac=y7^u^- zcOC0a3(^Dez9^YL0E?iqpNM-zL%d!zrjBQ4`q_Uo*3LaV*Lc0&U4*x{TBjbs>*kWTS5& zqMN-~kGliPf%2l%YT^S{P_=n@at)TbIya`?Cl{>B`&G<@SM_-GM3~aal0#fpDiI0J zTs~K<;qtI5n0x{U^j1~!YkO_Ke0u7<979Jm(iliEv0oB*FuLi_Pv^j~Uo#Y|d{d?i zy&Po3_O$K@%G@Z;v5m!N|QX+cKCVuVCN( zAZ<)L&RNiOzE@A_w#x0?8oT&2+Hn~mdvfVIem&r50HjhCS{sSKhS0Y;2fi=VjUg@B zkQav(x(DXSn=0O(o=)7d9q7Li?dnVBKGlqKt(1ORzCiq<*v*%oR2XNGO|*OCz)Im zyLw~fH$ul>Y*dn-Dowz|gX{GkC(x=44&{+9LDjW?+HNfBb&wOiXj|IN{5I^$k(xmz z&I6+4zMAiMA)M~l>QQ;lsbR->?oj{Z?gXR`xY2#8Pt9=nVZo4eWtweu>YATuvyE^z zuxolf#7vaVd-jnc>fD}dLmZBWZ12>HUoj?dwJ}-b>W*P~>1tR{ZwEmcxu;5MSi~&z z*G^XZBe~t5X+L`lbuUj)N3PavwnIU;+|iVg*`)Jy$n z6E{%QfjJ1(zXE&6amOGTmWy)4tAR z$7V^!T)pr!kVBX3Cda6%GDz(UtSNo#0H>U}R4dJ3!;$l0Gl|cr&Gh1;Yb!-I1D2RY zjD~>5oQD|+;SToMoi{?TlK)$ z1)m82Bi5X@pRi>W)jpevbOZi8GLJ+EH$RVg+qWk{YE{@pBo;un5T})|YjAwNfYUW$ zik*hlH@*8hIILgS7#lal_10W_j!L40y1UKKx=YN}P98VbCAoGgS5Jq%cAPIRb^hfa zx6S3MSGe5Q7vTk%U!gy=%{F2#4``=}LqG~c>IzLL;7=9Bbh5F^xYeBR(e5_yWrKf< z;`B9KpM8Ron+Wb*Ax=nvC>p!10wkD-zo$F5BmR}1Hjy{counKxV`(W;*)obke|Z;( z{$y%QH7m}9t+rQ2U&2zL*)e*aufVr?4ut=+>~LYPp}8MuM5h6M`2Cw=`*KIrE`f8d zB#q#^zbnM9j>RZypn}PvY8(d*{&jv7UDQ*ISlc#7>ZZiFI?y~lM1_v*2k`5r-9SYI zWh*};it-s77w z*s3*yI?Ig3!pu6-hYjU+XSzm{T2v-Y{Ba|H4ur|k73#*X>~fdkD*?<6UkIFb1yvtV zm~eBmal6ewWDJ{3Sl7fqU`2?5Y3cpE+LL0j+E#%Uj-$T%KWcLIjng28mCZah)0PueKJJMD;dt5#Vs&2 z)jJ<#q$=m|IO@vQxMz4b%M{d_O&%^26xs`nYH8|PXQN-nNw;~-+A^XfVd zIlVNmO){XE$3>SVPHlVj5x;@4wf}2AEe!mVLOdZK9o}cnrwf$yCi%uVGL&$%yooS} z_~BtS`Wv_Q%-^|V?C%`{f322jhW)!L?jP%eAAZ{0>zQ9>u3O)H6pRtIs-HA%A05-b zTtl`CaL&ff4k9ZnQpb7Uyp^q{;`E0u9-WR|QMXWo-Q$iwp_{dH0C{|d>Q15h6T4*N z8(o|~{&C_7vjbCAgUaqcrU(~?fU;(Zvo4j`SJ&Wr`{m5Njm~P>u7eNCDlX>3S}apu zAUR|A`R(a&4HF|f#e86k1Lbx7;_M6=7V`jl3GPP%as!5&OKM{*ih1|ry}fu!nF3ugK7U4AM>*O-@uri_x}rw*}4B;U<}UA#gR%X z0!j;bLTV&Ct}rnskRhV=&;DnqCfUkAm}Eg<1!w znlv(G;aU6ySFj9`IhAB=46u(SmRqJ##P?EmQ4r|aN!Wz1&`dHy)@>3Dj3`KhJrf$R z`1o51kvtj_FZaCi1fkhk!kE{Cs_&6t;@6cm5J?EhucYhRQ{(8}sGU9%7M!zVB(c|i zRF*vQO-wkB#YODFSCiLZ5{Sc8@=;76esDOnOTM@gv3sUo0|qK6zZcwnJ^(Fq<-X@{?WRD38sj<|GPGvoB-7I zV+mq#!ElrS^yN0}yzKiZBpl@1goOr*hLnMvmX--T><37`kO_6Z@!6FBR(=l-U4ewvWXfK0QxaU!c2n_dLIV${_Q-_qYZ+JN&ho>H@Kwd#QtS z{%RdhCc<56M0v~l~t2hT|eev70FFPZ&3yNT)kA_I9b-roiN z;$JbONNH9fc@d^)MNdJ2G6y8Sddk24^RN!z8tZ-;Q+(fqa0nV20-5c=#y2wiDB|_` zzf|y)rW~9q5QJYkxFla2OK9)XO;9Q@n+sPx)qFT8S}=4lI4P50Wcxr!|32WtqlbPC z9*)z;YEmkk{1%$|otQyS0Lm#=u-9{q<&a!=3#`?>gLRtRAakUo_9&`U`G0lSLV?AF zeaxqqg;Ah{i3R(E_UrIPo1I)ShhS1boIhlaiI9pypoJoWn)x9>@R6wo8JlB*!v)W- z=Iq&EUt(kh;sOV&pFmh%&8#urKV&LeI1D#P(?CR=(4+62x;74#Q9{U(oL%Na2CrUlBm8)pA$ILs(mve;)n zvL9wj(vRi6&Vx7~}DBkxX{CgmCZbFGdj!6;=Xc`hdApUDYkjQDUC0n;_A2 z5}6;XWg1eKaBoTtcZBo*S|C~selnIalNIv~EmtnbFm23UaIx(KIrU;oTQHmIdCY7T@L=DG3L3h%uqirovy%J| z09-($zq;IOk9Lv|G#fQp2$UIY+h!+p1t5VBc6(kf7+!Y?r4VV^ipdA3oGt9=ZgMve zeNhIqNhSmgh#M3owCpd5J6bR%EB2|85|iZ9%Y7JX@@ejHHfdFXe?elD1=xbiWXlIC zKPKeFGWw}>9eerI9ukq(P)5ZmnOH&1qN)qXIT@PYgJv=+=GvWWhv+1td7jYt1L86>xIK6yU7=U#^CYWHJx@WJ z#8n0j(}x!Pz%E*c;iWWzV5P5qV_ma1A|CId{Hnk0c;Ma>5(3Z5lQhko@GU-%Cmp`$ z1-eqUj$8U5%D-v;I)t#R);Ac|sX|fQ7R{|nlzSKB_XzK0e{%6rQLpeg&~G`SK)cgv zm_ve@bNfecXhrZt!Z4>K(H=#4>1`prO3}lKcW<m0k}U^Ao-lX1LY;`G@r|O?)^iu}JRh-VG3KO;CnKIq5_lPfmxb@1!kMDQ z{oU>1npEx_f1z!d8;gTNYP{k%aQ#C7YnTG-jSuhLdqb*b*R`20E|pM9K!>2DxU_q= z)pV`xPuPy8N$kI#%9 zWDmI#jwwI81-}e&mGTvavDbYKmD4uw7d&+xAm`;s7Z#u3%Mr2VQuVgRlZJ`iw0F2a zb#o+xJmeicvAebsyKi{ip|Md&w-__*0)onm_?~3MBrBP1@H4ypnoQ(-wQdXMV6{&+ z!3n~Ge@>{|&N>p5NLSU6r|JFFg#JL%qp-)_Zd2K-0R^-bF;biT9w2{T2y}AH!RgpQ z;uxWY2G_Hh6~7XEO!p#S-?OfIjpK?s__ zR{qxQ+uio|m`!vce!j8iss9t*z_Q20LHQIFe{)Y*O4i-W*CPzdh$PI1J^67IW8q!6 zwy;ohWv3wtsGwcb5+GUc6vw#OL=ttw=Ho-Qi@w2ce!XXAT?Z`k(Y(Gi_Nue_uYAr2 zg-fiMTJSyCZQ6!UnDf8~#Ph`^^+k!FOTDgZhh&TJCgOD@p}t&3FGg^Mea3fam7E^6 ze;gcXPovl(v9osjVQr%H+_yQKMGGha;mA)R|E@QG_+a{H@nOSDTYPOi*%2-J`XHeF zMK@kZdoWI=K3(>WgEDa5-N}adbrPGA6s>9De-Id_^%~WOY<{?`>DFKnk7;*EByHVj8qbVd zQurCbv0yXFbN`_txGT0OAX9gvmFJ$TcQm^#^Ov1`i)1tM>J!O3F^-gg*F6d!pFSbD zz+YM6OhzXPLeE6KEeO7}jh3?#OUpF?Sx`+BhN)1LaX(iwivmrg9bbK#}2@v~#} zTOL0hfVG4Gh6cTJ5|x$bgh5gkgHuyI>8fcy$HZY10|W-@qLSl`=c`5ZzBS0K*Rpw$ zBP`MJ%TS;Z(ADp& zOHmmnN1@EsRlBd}=XoR_@NK{J$)xb;Yzz1558W+&oFS(@k!=f1jOy-Vn=yxi3$=49J# zp4!{gdYvt*{UGA#X3_(2RwIC?jYV+jPBZ<+`*F+2#`~Wil7dHw1~OC@JHy!Vy^ED@ zZ`Z`qs4xNw+0RNV638nJe>;g9l-I$E6G!%wdgKB1 zPKjh(17+>Rs|wChFs-oOY`f7SAuwYRVR8Z=oM z=bKq+o^y>`hzWdkhnpU^3-D)+UGe{@vyTX4NRJujULjBv@iJoK6m>0Pe7NUMBdSAl zNAEIUm22KxE4-IJ`hFuSRVQujfGTm!_I$f+U*GvX_r|s_9?=78XjQsV=eS!h_s+}a z3^{1a6MKww?i!0Ze|z+1Oa}<5MiX!zjv|awa+YXyauXeuHuM~8fRwv=)!xhaQ9`>Y z()+3oq>=TK>cPy7S~UO5W3W_el<%w&J>~3iQWnT+sm(au@F_P_+~5^yzRyvdONR%9 z!C2}P?DYdsl1zI*Y~SMlI;B#6ZImS74s3(&o1WDe6SBlTe{yT)VPQ@16xc6k&Yz;o zlIW(b?DH^_VwN=Bf&<}RJa@220r-h(w}l?Q1xpUGS!L&%Yj}60^{W?TI(X#gaWSs1 zzWVaUie8_5HLe@_5gG+)`6j70w#c1QWpjM?Szl)Io-#R|wTI%fU^<^}f;&QaX&VI@ zh99MKtIL>(e^?c>m(LDDD#}b91zsA4a8cgoG@!N4F}ZjLvAn3NJ7i(V`#z?8B(zPz z5`!1i>k-6OV$~zi=Bf3h>Cpt{)6*UJ4+8!UI42I$s$S*?A4m~xCvs#Q1&q&6n!LNP z^;Nt(as-+ttlhADg30M$`W~0kexGVx8$ghFBv(CpfB$E0Wkr+*IFaQ%gRJ6HvZN9D zx4ENXY6G^ad};cupi#>XRDJtf$`hC;ji;Ihq-(Tl+l+fmQ6uwAP;&K~)3pSeMX`kn zeI%PLR}JzVHzt%51GitQ$9?!++*Xlm3y+hzNTyze>%Pu?K_m>y2OZ#d!CXczZ}=tilehsIIoapj2sz>E)9T`Xq5!K7Jlt!T4jkeEa?(Y7I>I2w%RcLQb2t{s^D~D7_W9tkLwo8*XjFv zA?>FI8PRs@jfK+4&4@?zLLFBvj#`IKGb?Q|e@V4@#v%C$Bov7R)K?$+m+X-c zFnc!_wD(hRNN5E}%hy^(!6T;Bia1Y7&n!miGmpbud4SxeAuLPg;dak6Nr9+IQSJ|!#dU=h0e|juksJyGGzc{m=!Ng}E(#S=5TU|Ejy&fUs zJ)mTsegt$bb}Et7m?U4-Z-8Atrqm-)%lu&mYz5JO0r=c_zH#_T!)!}_XVB|hLG>wO z_5f8J$O^!VS~HR-ezTbM`8d~8DPmz@pT~&$$bN9+#eOT1$AR3B9`e8Q4AOUEFB-(9_1B-FO1sxWVG- zRgO;gFQY^sGpEN@%~@OZc9imIt%cwe!pNP}Ge$TX>QppwQXY%4zULFZ(?FGbqwO?8 zF{^0igxF+#Ri4y)qUC7-t5+Y6f61lU)+pfWX9lI)Rr57k&1)G?n}(aJwHYp^k8|oC zQK+kbtm{#FompJ}%!{45c?G|l_RzL?cJ-6?g!LG`ouARqC_#8*cnWu8+IiTMsiY}T zOSTkMtyRzWy|@w8e}RfJ3$s0I z&Jw3SrewTF%LYHY^s-jHVkVGx%#uTh*==3#!@D^cB_>tovo_2Byj&DNyYhToFJy!}GwIRG-f27!x z?wNlttVQxQjQ{#dQ}|H;~l-~;c`9c%6U znx)A4l(5D0{3J0piDvx>B$bOfn`Oc%m@<{RHB8wsnH>-Hl;~salj`;X0XFxY-l6YR z8Mb%+2r$o~6Kg zF9-kZ+XR5Zp3e5XCyn<(<38)8icqL^B&1 z)-G8fAwfB{!@frwxx2-yOLIml07c*RguZ@Ljj=&o)LY{1ucpW<{F_k{*}6RkJhzEKnW1)HP1p*3QsHaczERV)5}W0iZ}iFtmoiA*n0?ae*Q_YVui9oWAu z-Y#XWf8ENdRBcf;VVMMz&}Pzs!`A1tJO=ZRy$Zu=uh~xp)pbAC<{gp&q_^Am5vj%Y zOcw}bd}Nv`H5qZXeSg~})Fp_zf+bamm2h(^?33LA3l7{p@^ZlG zOxry}F{0JO8DVW+^LMb4|wkKLQ1jLT1t-8Jp3@KhL3xezq)j zkMC!$NV}M+y+{f9?hy1`u)C!$|LFU1F-ouo9L>Iw7Q3R8&(VMJWV*!pQl%?C+k7{z zf0@0IMVUX)gf*13%D;Vq+MnO0H&VY#w7Gsq_sGJ)Qk0McS9et<(J|nT>A2Fw_v zw;FkZk*R@MtNDg}AHD6#8fhu#Zg^H#JS(XeDgekUhvL~(^e=3wsE+Pv4%ZK%G0a8l zDkFi!H2q)OQe}!{PZmjjLKe%a&#4?a~M{8GjPDY4vp-~dccNB z!+*ECS*pb4RuIYs#kdk`hu1JEiG@S-+x1+yJd^gP@s_E*el$rEmmHkw+vC>b zr@F`lDX|8&a4^(J0dT92WK=-ne>imGC-{Z4VS&C1=avc;OP+K;znl><70i&I4za=3 zbLVL}+dZG4ORRO!F^QeQk0emsrrT^nU^6BnwUx^GSInaW3Ww4ixHX3NVlu3K!Y93G zB~saoZysaDAS%YG+LvKaMW+q<@f7umrRPD_} ze!_sFaz!5EwT_Vo7M*YEzv}3Bdun}`?M(3%ED%@Z15960_Ph_wNyYJN*ly9^Rk$L4 zxb2;KGsI|NXY<+vm6rX6Vj`TZ8_MBUt*l7@+WMDo&wIs8jVzaD4`nQzI~T}omoyF- zGwVpJfOSV);xl*_+* z)-XR~c<;k|-UY8$kov8)ciY2#MVq0^ecQ2gyzC;vQuucRHSV9Pf8r>!OHNxJO}>tJ zwY>HNr736gMb<=vypqWaB2r!usPoz=ir6QhzW{cMaeLXh+0@f#V*b(mZNpnHL4D#E z)yLFR`4Tp&k8eBT9qy5|4n)r)zc!Gtv*|5BuB+m?$0xj~Ye){oP_`}Hia=l8%JVpx z0h7Qykr$SHaS-zV@EH7slxhs%!;l~51jPaYOA+FS-;PLVK zke3{9ZrjCA?Hd<57E#5(W!rkb>ee&ZG+%>X8}P}>NF&<+e?c+Q*hehU$9s>K88K7wa=mCKo&vHp={peDmEiQv zpHP;%iFwObOyO{~?-{G~K7yIG?S5*O7^`NauJY326D&GeIo)V>iZ88iHx39To+t6g z>DUcbUi}i;+E0lX} zQfnqoga6O~HJX3P++8&E!Gn(s%s+ZZOFTWG`&J5!zt!t;CQVZR_N@(u1ateX{LT!z zkcK{796dF5ZLok;K955=lo_7G&VEqeTBlHBf`$O-da6G+v`dhM z(7wsLx^CqOzWcF;g`YrMHl+YOdu@LQXN{JzfB8;Fe)d?_0sk|mlp34B>0zIsHz4bZ zASN!b#hv%-in6yh zfA4Xr>qo}rwHD>!j?og4XsZi&#|oeR98H^?jbx>H+Q5Z-(}h8p=xB^PZq3`WzI-`A zV8G$?*Vx;#k;?jCNAHee^fr*U+^@aCp<5MHaw%5wht;L3iz<$w&ecy zET*Qa(}_}<82L3yG}I49Mbn^}f1Nt&y7QI$x{%wI5h_9@W;y;C@`J|CSi+E03Hh1u zjPfdEl+@_>1kK!|{yFv8SrT11bXm#!t3S@{*72P3kk*j(&i??OY)fMbWo~415Oi{7 zVQmU!Ze(v_Y6>wqGPk0M0`p1(F*!7r;QMFXQW&2(GTkETWhC*GFMZyAX29yOmKv_6g*#!YoDq30`>;QIl zE>?DSP81p%EfCZW_-{K3&08SE83c9^{3AjN0yKp_f7_%@q0fOTUQ3PAOvJ?>HttNg<1pcpHDP5wF78^%|Sq@$A6We7q*5%9R=Cg+}zw)P3@go z!4NA^e+FiN8whF*&;U9EA+A6R!0(m;s;2h9zguHPp#f-FgPi~6&;(mT-Ao}sz_Y;) zWDaz2eok?5umC~;&!+=46_f#LjzEWh1uOq6fEn=j zK6m(cf6nF*kR#NY)fr^>yGOR)WuC8D#=$}gY;O;AfI6f6)+Y^u0L`E8-GlA#himHq zc60FhH(7!lEG&PwVd3J)rtJW7asetx{~hyeLixvL1%v{4*xA|nxi|qpCjijh+?wt8 ze*sz^j=;a19KX%aJ@|Mzf*k>t&usvGK$gJgFBC6lQ&%7W3ULAYc>U@4Z$jbV09b&` zp#U?W703bQpX$$Mpyj{#`T0XY?f?V!=kenJu>b!2=a^%Mn|LYO6Nl9y{ z$!ReC-SU5&l9FI|fENolfQ6Hb3&6w0e+S?d;05^ncNKM0(BCTl$W(B!1Oo*ACHDE2 z{w>(`?+Kv)dp#Hc|6NNJ{5-cn0R2B>ZphBVZvOm-Hz<>xGF#kkc<8QdKI9if6u!h z;b3L=pNj-J%Yxj27V03Vx%FSO@h`LX?>(~vIRMqc&Y<6K761zeJNy6mo|ntq_WAAM z{5+C>xq#2R^WP`RIGBSielHm(4==zJ0x|VKVSk<^P97eB7svB9S^(Yu8e#w&s{9?2OSTa>W=X6raOLuCHGDtDI3c)1J#Ee_EW*ZA8>W`h=wL zm)Jw&v|f_CiHZcXUIlp(D06p6j*OL#2k5heOqOnLvU1sK-}AbRxBEhnuR2A1o{e<dGauZT8FmZBIYx!vUV=lkpa2q0*3pAR+ARD$b81xe@$Z9XLI-PAlavx<4 z=_m6m-FdpXk<@tD#gFDG@R(uOk=vNZ9O>hgz@evvF~{*`f8@^e7b$%cyrvRYT(l?? zA8(XBgdJ81*|}}Vw6EO&_9c?Y^LRAe)(`oP} z@B0VN%Vj&nf2=f8lnSeiJ`R5p)|^xi_}=z}5nb|CV5K%{$#uU zoX3EBUwK4j$hTg99a?FFn8`huG+OMMt%hkKN&%9_59&TQJ}ogTt)1hhmoql3?;b`X zGZzNs$!nG!wj+)AuY260`zKZECK=uBzfa?D>y;(pe-4QrE}^kPws1;5Ia+$LOSgIR ziWl!>?0pt8+Gi_ovGyJvW4+GTkU;p+U!gPwZ=Y`W%Xo=aXUUHse7V<)tSF4UCR^o-}lzy&HvP$n2@PohdiQ{YWNi3<{si~ufu?j^ke~OSFU;+i}e)}Ti zQyF{xe+75jrdv<6r?=5@@sp%NQ{Gxum?i-KzA%%|@lA6iH@i8ke9F`` z_o<7)A)1?Bb7x}em#xp7O$N}hiT;7ag`9}$bTR9Tl(6q+>1&US^Q3Upekc|_UroZO z0qP%6KcsyW^v9$O$UG}#h${5f9zW?RJczI)e?Yt`#*wbcghn3sa4rf~yH(Oq2#&@n( zfAQjV!wNpnMN`lHaSoC_hL3fut0|{H{ljJ41N7(``iidhc|v8)eMKB>S~%C6rx9n& zad$ttaiB)tUk~ka`I%)X7=@&VwR?Q86pR|$M6;a9DqPwRkK5Wm%eyPEv^u0|bxg^f$d4h`gs|MuMXy)=n_7a2BX8Od5y~^f9y0}OVjD|zq=k4;#p45RkxRz>SM}$ zJ3HXHJdhKcW{yuDLTJKetc8w}q3()8`?{iHqkX?5#^_2zBdtj4s}zE9InRRtf7OM= z(HfIjujB#s&QdSKzIbe()uJCooEJD zy3DG&Dzl)RlXY_Eiz_|ijPpCY z0MnuZx1o8}GHu7Ll(LfojKodAC}t1eDNjUV%?61&TP3-wFQpbrtI zH}-itHVk%w@x($t{oMjbt80b|tnU4sgv}?4w+KH2ZFxlYduY@2f3gliWbg~*tVP)XYkw}M{FeQzE_viQH zUzU}k`2~97nru^eKl+xMGL{Wn>}bFGgn-1r3RNJnc8ZyO3?*Y^htG66_G|d&S1!5} zq>9(8joi)EL*5s?f69l^)7Fsl<)zvv7+i_MQzwlT&>1WUEWxm8Wabrw;l!50f&dGLp+5nY$Vl-J_2=6dDDa z`%;*1#j9M|@dsAt)msJ{9PG7S+kqvnz@WnvEpYC=l!Fhqe`uZl6Qr-gs}VxbuC4zh zAXAhvGbLBH<`Tm#upqi>0w!{58D)lEm}?n4Tgxeb}%tE956tx}B_l7Qt)E312ESi3#%V%jERzX?Kgl|EC(oGI#G zA4ywXsg`O*e-HVz56$;{hdXPLiec#L;BZ46zN=!4rHpVyr0(SD{OBouL@Jnndb@;L zn5^o8$RzNzfWgg&749L2K|kK{xUzy);E&eP7Did>Ik1inR_k~d?_FZ9|48B~nY$e* zUZ?LTLB8B_vnpzcgEm9>%$YvBZ=wW#cShN_AxGB;j z$3665e@y69Y98p}UzNTrKN?WMDOQ)D>amRR)1tH_iJ(Lf170OP>gLnNYP598^d7u2 zD&SQ1+Yj!7;YC0_6SHREryas$lQhM&4E&WCM?uiQ9$Iq>#jH~i?hc37Wry`_=2)TT zrN*oCx%1Z%Ug5CW0@?1JkBm(NAcd`N3# zss{_`H#7$ZhuK- zf4G?(6k>v_cxzboiCdWXP%5&{ReUj;`thp-tDrE=R-l1rY6fr^=7SGlV8xmt=~ns> z72byB_QT7du0ypTUe`-cm)uX{W`W4z-N+#KYV)3D6UZVqEu?LS1Pxu`a32vnnkagq z{+%e+OMf&D&3#Ra7Z)&uTYA*TA50i>e>+Mq$GZq;1z&{WAGao88NIsJz&09_RVdT4 zbw5qBu`>H2A7}BBm0l2~ef^|3orE=F3@(W#*U_o9=t30Vw?x!<&(ocG!OJ*y*xU$` zw$2MKs|&8Fzs&0UQ392Z(^`^x7@Y+qs0ocZt@|7C-%#Uve6N!X1uH|){Jcagf7@zH zsObQ**WEshmw_}ljN$0mw?(&53+HV7G$~kBPxIQw)cm^u9=Z3!zH=SlzW@RIoZ+NX z7R4mkuwffUX3m~;t$l)9qoz6%)kP_y+=NUh4{&)rE-NC6WLoF9rE&71c(D8hdTVv~ z4&QOcM!oL8vG`*&UEjX^0)3kBe^I|bjE8pNW#=opS0(Vz_DyP#EUvK<7_3K&o~Jxy%9h%eRKBWuao(b4)0))$ zx@=`(o2eQ}2l#q=%(+ly`fXA;L(z3|;?MR~q$0&Ly|-tBY5diPZ5-_ne~1=Tipm`L zVmK<*ePTG2-Dzg|LvPyANlseoEzRr3CNm(_&E>Czt?b@Mo+QQa=#?vtiuh}8of#ci zpooX&`n^NqnU;564Y<2p!t2>*J6~@IAF_Q*vh1>LwdouGkQF|2jOjziZI>_>za@TC z-ug~WVWpmrC~cI@>yt5pf2RkF1!S1e9nF$Bt9gk07Mo9TWqjuBI%syX?W$VybKwSE z#%p3vFQWPbvzo7y=Ck0!_1+uXMOAFyv`f;B;HV%ETsrS(+d0^u2Doi$^4Zp zpx}@#b5{~3_i){xRwfydzr8A@_g)3rP5UbSkUME^p^G_v6_gjEe`m5%&j_3|(qoEr zx=@M9Wvu)BzJa*SbE!f2hljuRw$zw-aFSk5FmZ;oQN!Shz02p|5#Bo=wLKykRxPs{ zeXQyF_o-O#xWe9MS058)B32V~YwS@*lj7%Aj@9g+uA!r&6@r5mlcIFmX;~I zZ-Vy68#kWI7fA}oaI&-!Mf}C{1gH2=3iOQEs3BCwA6VM>Jk}*=M2oE8WC4216 zuG?E17{4MWe}`<5#AH{jMd?Kb;;ne+ z3VExxh@Tz&684iNV&YClK#_IeiWOUmdt+9G>iAL5q&BD6xs}v0?i>GNTq;KtA3X&m zC4+#Q?oj5If5|I}GIyCnsFT!-$LpDRF{3NNUiy&*Mp?h`CB^`ZH+w`MRq&rmzBgfDI0*k ztAg_&OWps&3zIZwHMT4m$#?8j zj|k?X&2Vh`Lke->+?rk9b?3tqlCZB3a(#W*YTqdW&$heb`{wMT%Ej_xJsahWP61gJ zA-i#1tRKh8rsyn%0c9ZSAa$~m=}T>v1a|K@f9V(`d%dxcmsWl(UP@rb9`eGwlMhmf z{ZsCSMlj@D5%O3o{DZ#OO3t{WtGeoaxx4xvqOqUS`j06hg7#ItTfGm`gK?DC-{Yxq z#VqUi$dVRPSA4MQV|52N!MmY5T=(g8>r7f7fZlwU?=#%51!P-dXAlSC013D*C_^X7 zfAOG=m)0;S0;*6fBGT9o0s)OKAoFeK;Y~$9HxzSy@7i|U7t~UH2IFL)uvy?~;HwGB zE10{=)s`Ni*IeEbF`lw(dfdNskmfW=Gib$96YD(d7Q)NW za0^+f@0BU#$q}RcqO;}gCp2BAz!8}4Cb**FMj+?e@uPi zTT^;P!7n+`9AyXF&$@&P2fid5#jlxm33WwLsteK-8)nxRE+TC@S26wqmVsNFIf+LT z)(y2V1uCH#zwceG^J7A$KyO(UwwJ4Sjr6c$7ZA;_rX=Io%R4eG1&)*`)S_xSWA#fa zXw^kbPr06B&jWXBvdED&8f{(ef2h4nL05Mna)Vg$Te@;n_ftGF)DFhAVSMD?EZD~P;VN5FQWx1D%i=HD zCnzDQ#Lj6Wno?!ka3UQO9s{U%22*!a#=;aVc^uRgJj(GuRIsoVSVSN3f2ZRWj$t@L zEU4146$OrIQxu}%KTv%GjCNZ^t<;(`HcDc_G8L5KEy?OQSOly1jB4n)q?oD0*9DZi zrtX-Fy|YrW<M9 zOSB-J@62#bQsH4RFlzX}KE65psAp2JW1{#@vV4`yI)BRPY!8PYl|rbW^?bCKxRtT1 zRaxb#r1xYe&8#&(Peq9+$<)gXtdyp(?J%w#1pZF!Hf=?E&K27}e;w%^qtW6-Du#7h zOm|y|u??$vI|Ejjd285(v}gpH(X#3bk2H9FpX`Va2(5N12lu4C6>eaWA9$@78$w?ulne!^hNtC(k zwZ6juX=gzi*LFt)e{gJw{_8iZo;mPc9$phbg!)k9rtT@D=5eXy_C>f4lkkeYw|Wv9NHO>*3YX z_Z9ph&zXx5;oDckFlUK!z(0z(kQAA~jjl<8&x(At!NWNMGSv7(u*w}${DokYTp znTaXUoaGI6_%B$OzU1n;lCgC{r!*+*sJ#ZrcI*>8UjXU+8PkI zG=skJj3ivKfB5iy40t)!gFnyGp2kSQyB<8J(MQ2O1je7BhCG4Q0X}jE-xShsubVrE6M! z?hOeo^K`I0Qdw{y=6G$BoI!x)hode$+PFgXHuvw_HGxKVZ1j)I+QnTPtt{JllQqyZUx02HgibKGrHXxtjc{Hs7>`JOJS zCjTL}*XJ1Y>Cbv4irlt%&h@8s)DWgLXzD}AHXlO}!-_p^xU$aBn<=ynWxhCu(kiQ8 zes%uAf3rVhhGS|eSwq{Jo-6^Om@;V(jO!>E6$B~+zXAmLNXjp5UfZW7!=n~a)X?Q2 zwBmBryW@5d3mZTH$D73n#~(9^4jeu$8>cuo^b2MfC#iUK3dqED*Wr$nzzy+_FH3Gf zg%@MQeL67xx8EC$s!BYJyHn($e;!%JpVB-|q;&OOSGaY|lc4z>h8}bd zRx!`DzM0vGsMhH$2`_>j%y{vsSQ?kC44r@&8i~$%(g{~J6m8{*jX*1!gzbK)!-Fe8 zV^zRvr^Ibr-0oGr^bw*ps9>^WZ)rDvB`lIb00v^#YdFMDZA6(}*Vj9+&=p0}Fj-o^ zf6P#igBNI9gcEtWWz8OrXWIAKzp7iRZR*L^w zsg8T)14f%+bq{^kX`I`4t-OJ8i~#abe{i*e!#9#<+#2n7qSg_OXygee=_Tv|EQ-JO zYLKXVTy(0_rPS*WkbQrW;EchdD+8V!8hEZI%&2RcMVUgsLvc_ANz}uO`r+ThfZB=2yb9 z!Y}unFR`5O+SL+<%5OF1QYyX{e~sx_Ce7VcIik+I_D_&;tpO0YO6wXJ=29)CgWseg9bZ#i+fd_fdNR>&l0qB(kasqyyrA#~F3?!zrNqD?^@Y!Z;Tr1p zFq_U6mwZu9ORMI?|$LnIX?@iWLwOI ze;s8Kj>-FysdnH_rjaKkf7Sf@G(5VBr-PEM*`zHzI0ue|^VQ?NU;*}OJfili=3X)( zi<#~q!D3qL53#~d*9LkfLn7bR%6W#Pow^;n1iBJ&jeX|S^xJSex${VwEf&ZLx?*bK z_kxco`0VB#iPm0uJ!o@)86pGRm|~_Xj@;np~MiiW{+@s(?UT*Uu9Qm zzrTfWz7R&_Y(EUF2bxQ-aYDa63Xgb*j|*CJDMspt@-mj1OD{(BTQcoSwt{CY#`pU3 zzLw#sl3QWW8?lu6e`ta^C#Z(ChO~1_;7!{11V$=h&{gE5?1k)Wk0@A)-*}xA%<_ME z?bi~rXw2rR!9fDom!piLkE}GpHZbYim0ao*iW}2DW+5G8fNiLD|Ata@@t2IGb4u@M z%6$nu>l3iQEJ>VEdp7!r@h>Kl$=vqlhZP(JzLr%G@_f8UoO!Ykguk!kBqug#n# zl&l&R?b`&>jA5o9q1m<-1dQ#XQCpTqBUT4e-lnkS22#5S5e?#H(C_oqn^EX?BB#W2 z>UfO=AA9R13~6b7GliH(vBTryz$S}kZ_reA?ulUswfSp# zEtz6ovm1K7e>#OMnD5Zrm~gUuU3W2c7fC6ieZ9)=bBrY9a?7Iwi0^VpmCTY9+FQu& zUw-^<8sACjovQ2r|0z7KI3pqOuB)twxZZ<_ekpDJj;*?ymnkQE`8?gMT#9fA7TJ(D zy7z9#fLIb_)6eoz&ege{5v2U+@-);pynJ`%Gn?8T4S~~f!0lm_@arCYN!i&o>q77Px zKS)`#f3|-rJP|m`dlJnPM|2|i3$27vbH-?PvmLibx}xS&9^+Y~C$aR_M3#Q@SV-PB zgf*IoaS1KBZ`q?OqVoVKfMvt?_tH&y8fS)>t&RV}nvJm%~f28t0rh@Rjhm4t}Zsg!@$t!Z?%7Xkf z{gBrig!c80%#u4Rmf`}^-bGsKR=J1G1KC-Fw3o=ibxdrSx&jqmwi+QW(5eL8{>xSltcn{ZJyEGPVLj6>0CB}?vQGWP{UohO* z*G65%%4E@E^)_aT1aA)Kd;`VV*3P<ZN9>CQorKF)2P9 z+ucM*%FTa*h8RswEHjArOO|KC(F%6LD4+qKfUx5J zZ&th_HnT!}KfX}RT<^i8Zb)Th#G<*8Mng1I67`QlnGud{vlm2_f9)_zIf(7}GYjc5 zItrTsZQjB#zv@n2BHw{uuvb930$xcDyFcCVbb>9Y^(-x==5isWmN%-`Q%m1Oe^_l8 zct9>COrFz5fXIRHHnL;OTk^=g_nsx*PelCTKtpnRwX3$zkXajyCJKj@WG?T&$}+=g zLfbCAKlMG13b#*RYkV~8o9I$;DO}T6N;TC~rp{K&Ivo2Gcl-Q>_x1>3l<1JB=urYJ z>f3N>xwGA(n-?yTYaf-5GQ&rBf4wpM9Svg`lY8d`a6f$M3={K<*B@$S(`=)5dpRVu zyNAIrDeY4_bUuymgU%W-`5`cy&&K@A{bNs|tz8Ti1OOY`=13!nx7v!7ou`rY)peS* zQ3egBUzov8tFcOQ&#+8&qTuBS)Z;9&VOhxEIBhV$n-QN2ZYww{b_3a%e}9$EL?pqa zfJN|NVDori>N7PcPlm@0Dcf4le4lYrTED->hU~qg`pUFF*Z7B)j|FWJq!S_-7gn>B zA3}S@I%=5)KNdT`*i0}!NG{&B_Y#lWLyxRwo=fp>Ep*|c!wo7~QX{95`(95rvn8BY zS&{w7@ME_2SHVj2@P}qPf1hPn?gNZq`V!0 zFw0Fbp^@4x;8D*9nt3Y{B=hnQ7QUo;;YqcE3mU-3VsA>vxm)y?F3|$+ zzw&ATvisD@!CL3Uts+f2E#YuVoSgNY^w2PDn%aX6_oE03qf05aGd_&o{q6| zl(m=k0Y9l!?Uxa1e-fs4`OnhGA2u-~EM^z>6Gvg0UpEbO7`Tw>UG^jS+7xj6w|r1_*#!s?O%x~FBU!SQ)!5%EEKW(5(Hy}L+Rh` zVLx6F25l{@J1&N~dz*%o52m=oL9EmQqGF4LH!4{+;9=A6w-`trFSGdEUR88{ZR!is zFAE8>bzeBYf8@e}OgsV4LGu=Ywk}AzRjIPsCzIeb`>{jzz*kBijxN62O!qW;Qh`o4 z3*Xo#9K@ZF!1%Rf>JIGr9LK$Xe?Z%LNCV$_ef7xD+;!om%Te3w35m}bwY)lAG1y1_ zLT=1bl12cklBf z#iu4yF5xosa&}hP53g0txKppE@C;jX8f(i*M$jTQ?B`Dbw)RF&+S%0JhI*Efl7*dB zP#i#$$HQ)dySuwXkj33C5Zr@1!JWkd!JWk+xVr{-cXto&?#EYkcTZP!k8LykI$hJh zf1(JF)2i~X{J*A|D3$b`c5yoV%LV6|J+{#;Fa>}ww7~1}v7v~XS zg&AY5B_Fl?ND`#_*fAJx0Cw8NSlS=|8RTsH~o{!L%#q066Mtv?#xsR z!bj#?M5R6?AtYls2UezVxyyHv>K;2r?l;~$K<&Av}5Hoq`Zrn%l4 zmPOD_l15Idg;>MS{(U$rQs)$AObcqu^$ zBbj9;#Rw>z#?70LsA~=JASa5saW8v;wxu7ztBhjtiCC^$QtT|P8o5ypJTzxzyV6RT zw#&w9qZOU&23H)znOK~7wY>?Yk4LA-VA(Czs-p&{#vTs_cs{LnwSwqU%yRr>-q@&Y zk^1+MxrK;YoUDPi1k+w$_T@_N$W?hRw-{n@bt0Q>jemozlI!A_iSNF@AO7XKjgON4=UMs*p-6tLlw&AirrRr{PPfB^A0|ZxI$8oTr`m>#&VDU}YI$3xR74ihrtQsYUKD4|cI^%#NzVfxL*)nf>{IC5I&3Ww>7fY+{+@>< zQHW=_cj72zHCW+w$+lD+s6I!-xqEdgB;?I=_>k2UmmZkUd zE|f(iNcz&OLH1@3#>kI1$Pzg-yCQnMkfw5WPGEb3bE%!o?`UJmJJa2QlvN6C(WSeX z9Gi$kz>m!`mNr<4-jC`<6i{>xAA+PWk`0Cp^NHl=i2eW;2J?sdMecGkFb_?SfoMj+ zkoZ>1^1p^!D5C=k?h^)Z$>ub{%w8BDO-i)gTNj>&$C^#p&B4AkzAU~dN-Nzf(=lMu z2W7DzIWWo2Ys#Xgs6_aX?r*~_Qwlm)j1KrZQ728g_eN$2=K1z$ee5cJIp0_pKMytI z<{L+-&&RX+w}fKy{c`23C0FY~8xK`+M@&CusJ4q9tB#3Fu$(-&RD#s*VBlU>^&3wg zckE2G)xEU&9}Z7$IArzKEcZqnFPLiD>bM7T?2|7##DU6Uyjiiik;BVr(x?-EK(&R_k7Y6&(1SvX*PqayxeWBBh2+T+_1Lo&37uaC;!BJ)kvJmVo-{| zJ^@<@Rf8kE*sdkP(uefi*Krp^Wj6VgP`^BNq%l6Z32V!1QppQ3l9DotyWaQ(djv_5 zW-*6VMyoYdJnb@nK}{l_zc}-I#V)0*rJF>kt1LGwSqZIv&!cHA9N^w+u)Oc`Uwp*G+cV7Q8e>Re7y8%A@rcq(tsDD2N7ZWY}iopANY@z}(A(1mv zj7xIN=QX2+x+lVEn*86nhji*bS0}(5IupFo-90~^Cv7c-62?L6>t_RyEDkpj4x^v= zyHE}azajo}Vxh{9VL|8Z^KOdLZzd>6iN`YV_GM)1Y++cP6CT%@}g@Bs-u8bSBvP#2I*fapB*r=062=BV77M#4@Msk42JjZ-}oI^O~6$Qf( zpFRH-@%*xyz}l7E_{0yJHT#Us)XyYy=Up$c&qCcZ=U=GQGceI&l)&OWMKaTca&C-x zI5I~!-TTSHO>(q)+zg1?lY5qfxbaAqrTa1>S?L|%?tO7*k`BAubA}%|m8j=D-@n0| zI9M(;@i*LV;!MKExgR67z5ebRxswF;2Op&&Y*oQVP6LYg;qbzq;3_w3GV2rf>V=+WEPJH>BDtb;vFVCFRd;o-9H99qIjvZ~8P)6l zp!)^_cNGL$DDvpGHDEDOPW^M=FQFq{*xWk9`EtH;x*Ih|aaKCrrrq!Wuf-fnL74K@ zo!jS_Aey7aD`Wi-zJ!Zs_HfxGnOYfRk+3|2ErI1XJ>teS0&PpKOWCU6dD-!>3ZSK{ zndg~1s9Lq+tv*Zm-1CLw+@Q(wp}%(Hgubf+OxdnMn(&#D=LDBWPu^SmmLBu#-?P%$ z*)sm_32VkV6K-QNtk+MPutG*6DbmBq@Ut90dh>J=^u7r)=)6*^J$d|F>=N&qM+)Vh zqs2FnNnu1;xnXNh3Mwk1b0slut4B%l_hTt24IcIQ1QO#DCh(%pbib+zWJT;E#d_f7 z0EaLNndjO~V(nTtZNU9>+GW>)$4HFkuh0ssi8H_*%&GQX+X5fJhTq*f;pmYN>x%0# z$IWU4JIS50AlnrW?hmvl8C?UI=OeM1GvyxTQ1={l#$66HhOq|XI3<$5Mpf~heX4F~ z+~HijmsJ?U5Eb%k6g@>FWXqsFyRu4D0+P2JQG%Go}9-EUA!Ugn$3wghrw?$tE5dPY1LmL;C#0*uhX zOcJC1@ZI{LYgZO!dyI$}FCmiD%aoXGEALF$i%k2lyz;eoFVlAfC1KR~WCd`iM0IgC zCA&o(n#o8L8hC=!{lie`ATr(3mDfoG&PjsTLsuW{D|2T_DbdcFvg)@-lcBAf4zpcP zM_bx3p{J7zdt)Dqp3}2*I8x^!!01Qdxm3(LeoOT@$eV5 zAnXlc!L^Oj-GxAi#J~Eg|X(Xi^$;E)D z$O8c=v3N?^SKTppB1Z@&o#WAFx>|vTDsz~4QblSPLCuM)%yK3+fZb%q$)THyBx^!T z%WA%~gva-}9#AfrtVIu{1Q!p>Q6gy}+WhW@BLCP=AoIr+tmmX58OW*$VTRSGRWk5h z!y>n6wPJLfw~AR=+Z+d|n)urBz=M9y>i!c9Q*P?1V<*b98z>g55AN+A&g0nm>c*_n zzEqm#k{NkE3zi)v*mfWf7T@Uz?7%Q9t8*FgciBR8zRE@cb>N7*@DjR{48gG=exI&J zaQ42YW$rZ+FgRv6!F6Ey(J1iI(Wh6n42=H+oXGPZIX%oqEo$H%?8mkbs8NIk_!S62 zh5K;+W(QIL0j#Wz<(xnP0AyPT3ZwCr8+Zo*u(Cs51%Q2xfBAqS00^4yM*vw6cng4H zh5V5PYBlPK0G9!f*T4_ItT>SD;}9;$$HAD5{!%~^AmnWm3Ip;HkZOFA{YV6`f*_^J zz>&s3ia=N(1PTg((b%dC{Lo-yWBpGVMq|7hkRAw`Wc&zBY68~*05a8gK5v1Rxv7S4gZekN_V9f@hJmbaZki<>ul1pM54$ z4jvBf|3DyV!Kb=9P6XUFz6+Jf0}nPSfqc+v#pN|7BbOB{p?SSgdcN8D)uTuf^puI9 z$J-SHZfT=n9KHGI!eIbgvSjY%EtXhRd4+0zd1ZP*^f%5AigkWu;Y7hS**76IN#%|F zVNdVB!&LZg?eIwldPPRFFw1@PbQ+dQWtePa7218`U|_-YvLV#pNvQ7@%DD%ENt_(Y zd^v1LYi@M`^&BT6`#b)3$kwRUg&oigPv7wVZBg)Y1n#n<%?Q9*lKFf~j12o7Sdku) zJlrR29s7A551buX>K!;2>b3dBvV#oThF@J-YE@Rv1{Of%GG_scZ94~2DwQ(eL~@mJ z4(-cc15+Qvg-dD-aid+K!_xnO0hJY4M=&VGSxJ}SODu%qT9?Dli(@YH-dF@j`C(oc zvtde|t;_7_QIL2}f)3Kx@$8hYF{dgka8dmR#Y& z^%H-lg~t`P<+9ZKQK^UqWxat~R3?@xd62u$2=+$`|5?Xroy{G$;l~^EI~Xf@)*mWY z+H;cBj*&80Z>nLb9ad^F+Of<)Gmd>W@QBH_$1v3mZA4PjUj$`2_Fjo)5O5623>7<3RS z`0^E@6xN2j_A``3-=f@xKOF@ALl|^dOrsdU|0awOrYb%aKk}i0Uwx5in%G{74$nF z^=EDVL{%E+uGv(n2&|5Gs~B7eA{p2=8k!)XVk*!~Cuk|}#$l80Zo^-NJ5c)a)KzvR zSw!`cIbj|dGryECD4AXU1d*-!%1Vw_DRE~jKCUfsSP7YxWxNvyIa9(WT@rX{75*2j z_!rFT*d#6V^%Tx8cnT6(Vpm(f&9Nc%-Gw%_>WRd?tHaWHEl3`@WT}i9^9KZ9vsDuq z|HZXE$-^B=2X?oMMrmK(=Pxzkigjy) zh0gA#Cp@zBAk{qCAPe$i%IM6#v5DjE{F|D%^kaj^f-{{=k<*%mB{QtnI^h5grzhBU-O6G<=?t?|y*MGT@EoQ|(3 zbapO{7cLCJm9ZR*?#US5$*R{y9WT1%5H<4cg=HlZ&CifE$u2>EFu*G5hlQ0=R3-rFu5!mEp!>;6a&Lzj7Xj6wr5=R^&wNisV4c;Tma2ePyuUj zo2>6X$n=x*MH83+ae|7VPj3w0r;S@8!h_iVwc^`d$x|a=tF#Cxmka>s&)25DW2<QT-M)smqgms4 z&4MG7-Td?ZRFJwPx)N*~ztxOXN4%pH2LQ{fd= zkS<61?Kj4kB(F{tmlW_7C&mVvU6c*X&_7u?ppC z;E#akjUlyxCZnHv33rqa5{%)_an^kYgi>O4RP$|GGAWwt*r$IMSUdOJg}KA(NC_IM zB4w>&UZD$}CBes=Q&%VgG(tgHNaXPxt#FhG8PAbT#>`k)Fj>hs^V&z;u>mVZhGgU( zv`?>kTWlSySP@Pe;(`pv{9=+2P*pE|nIsrpW8dRnm^LlpO40Qy@1lu^Mpc|(qdRXv z(bYTH?G|5ytmAzYm#ovCVQKvrGZtV&Wb zBZ*tl;%-VX6bRncyoTWpV^*rVK>V)E zs{!T3x?mDzT*YLoy_r|=9tw6CS?|MWZ&$^Ey=EPRXyZ9;H3nAt{e0M6e^`ur{ti3IWy;sirkQ{n z3v70I$aehS2DV37y(g~fz!_N+k_+L7^6hRO0k&cAiXMjeXSL!MYvgA-9E3t?flC zsYAyTxkAfNHE$}>NAI&cPbHbNGoHMb$Hz~9Ga?IcZp$(kuJ58e`sCH&3pV<~y=yg#mmuqdvh zdQZ6Gr#XB!fDZ#>12i;u_Eq7s=sOW)Pd`oc0r*PgP6Wq-_idlm1P4y{`wFK_9jZ0& zDK?QB&R z9n42UMV2%;*J!Q_YJSbp0AF{vm%H1EJUL7t^N#4P-JBo`SNg3g zU)ga*GrsmWz|89`bMTVq%JHKGe@4uy{ye1CwaLQVrg_JczxBzPt!&`bTi;-<^E#xq z&jQqr>+{wMjsPqeNT!~6C~~E*wZF9>q_?2_oQTS5_r68|;xud*xCD=ZULy^yUlbQ5 z*UE#QZT5B#E?!F;TNBNqQ5-uLj&xFlox((Bu!b^`Cm<0k|OZn_1>Kk02)PLfF6X!;qq8RMPcomz{9W&Ytwi9&T<<49tt#6kUUuTFSnw zscwj;v7ImxH}Dod;6Eer1F_pI`|iUQ3hlGN=`T0wcRo+Y<2iI{(amN#=owbj9qT+@ z7gc_dM%DxCA+<|4N=v7OTV(|$2Vsj$PIaGHQ@x25B*QyEG9#077NUOg!CC!1p40k{ z4qr(q1Z8Ob zI~u5iB16La4qEl(>8i#hHP#%N*BCm9h%z!?ucGd}8d}n?M|AC0xrg`uEX8ldY(#Oh zuP71h$Lr6>iBr*8)iKa1*bhmdn^Pv9C{P^gZ`~an4yEnW2tV4GV~LRJydXy^Zqi}m zTCa8CLKq?<+3qXJGEK#m_@ElS3exVt$UP?};Y2h|&XuGuGc&b~QWNi&M>iL9;{#tz z9L9@=HO)&+;KQB%m^)ZT_KyQ~@j?Qa{(uh8jHSLY`2r$D0M|c3_KzWj1SmqhEB_jK z9tyVxa+kdQU6vLMkgtDn^`4v_7+so|aE!zLWcaLp{xV z+Jzm&NcZGIf7W*o+R2)Hl%M}zfLQdD`7E1?3);e)kbF|UC!EJ9nrb{4#p1nA12n^s z&I;h)d|76-+IRb_wTL+=)OiVR;q)=cRw(5n@>eDMwu*TGRb8!PcfYs9YGsb#5y!-6 z5#GHG>^)TL^6{T;XYEBv*8tdd?L)=>)v&(Xl_8+k+r|hZrL^aE?(+~%K7$1Kc$_dX zt6MN8BZb}oKiHi%M{>L8vAW!B(`&tH0#yON*^0RO7Foty_(ad#Fj`lf2~@2L=+o z8wQPE!lIW3q_Di@Ykz^G^{=MJhy{5QyjQ77+5*(i1GxyK|K&DZXl<3$JtvuI9X3@Wgj%Qx0*%t{;XSLI|R) z<^N#$oypeZtj1{Cq00QEQW`uQf%?6uH76E@3`aRb#EeGK&a!MZgf$nex_}8)UHQUX zt_z&f)D`ruFubFX^}ua`T=Y~3sdc?p*=sM zsN9nq_Y;x_P=GM`9fplp<(;8katnA^fD2kMPR5Uj*p0xa0Y3|We-6HFanB2o(!P!v zwXM-eZY7D2?39Mzd^ZploN1q|{n9^bFb#ND`s}v2Q{Wwk`Uqxf>Urw(E(!cSn#?3s zoV#TN%G4*8=B)KJ@YM>%af;hy*SlKy6#YDsXhu#cUIerM(n+yC4Eql`4qf(Sl3X+9rDR*6Uk+`N z^kq~ku2%8`l5R>9AHxpLPve|WhaH^Bworlv>I%)K$%Ag(jQ6FNtI?ZN=Ys22a`Jci zUU5@95$P5T->5u8*3MOaI$)Y%P;+hGSj;cHf8#L?o$7`MPI=Ia&^RgJG%DK=LS3V% zFJ)-1tR`Zl#j*5%pfQJ3@D9hoVYrmRw%%{P z=;N~hyUo8D$F3DCUTW$Fy~95A6GBq-CElLc#d%jdYI!wQVCy{Jxx*A`V9Bu(IZ}zQ zH>#!d?TTk!n6@wbbd|OX)%5S>?GWi)t7yvUlhP44|#HX1kA5>DpwD=hlb79sRD+kU=nz2$7BLD>n$9ib_IB68^sc7yCr` diff --git a/doc/designs/ipopt_outer_bound_certificate.tex b/doc/designs/ipopt_outer_bound_certificate.tex index c17da760f..34193bc14 100644 --- a/doc/designs/ipopt_outer_bound_certificate.tex +++ b/doc/designs/ipopt_outer_bound_certificate.tex @@ -29,7 +29,7 @@ \maketitle \begin{abstract} -The usual device for getting outer bounds in mip-sppy is to read the dual bound off the subproblem solver, which fails for Ipopt, which reports no dual bound. This note +The usual device for getting outer bounds in mpi-sppy is to read the dual bound off the subproblem solver, which fails for Ipopt, which reports no dual bound. This note derives the bound that the \texttt{ipopt\_outer\_bound} spoke computes instead. The construction is Lagrangian weak duality combined with a tangent-plane underestimator minimised in closed form over the variable box. \emph{None of the @@ -39,7 +39,9 @@ matter in practice, and one of them is easy to get backwards. Its defining property is that it requires \emph{no} assumption about the accuracy of the solve: a truncated or sloppy solve yields a loose bound rather than an invalid -one. Convexity, by contrast, is genuinely load-bearing, and +one, and an ill-conditioned one does the same, since the construction evaluates +rather than solves and so admits no amplification of error by a condition +number. Convexity, by contrast, is genuinely load-bearing, and Section~\ref{sec:canonical} isolates the one place where it is easy to get backwards. \end{abstract} @@ -314,11 +316,91 @@ \section{Practical consequences} is not. The implementation reports ``no bound'' in that case rather than $-\infty$, so that Remark~\ref{rem:mixed} is respected. +\paragraph{Inexact solves.} +Corollary~\ref{cor:anypoint} already covers these, but it is worth spelling out +what ``inexact'' can mean. Problem~\eqref{eq:sub} is convex by hypothesis, so +it has no non-global local minima. A solver returning a sub-optimal answer can +therefore only mean that it stopped short of converging, leaving an inexact +$\vhat$ and inexact multipliers. Both are admissible inputs to +Theorem~\ref{thm:main}: the conclusion $\qhat_s \le L_s(\W_s)$ is unchanged, and +the entire effect appears in the correction term of \eqref{eq:qhat}, which grows +as $\vhat$ moves away from a KKT point. By Proposition~\ref{prop:kkt} that term +vanishes exactly at a KKT point, so the correction is precisely the price of +inexactness, and it measures itself. + +\paragraph{Ill-conditioning.} +The distinct worry is that \eqref{eq:sub} is badly conditioned, so that the +solve is not merely truncated but numerically poor. This affects the tightness +of $\qhat_s$ and not its validity, for a structural reason: \emph{the +certificate is an evaluation, not a solve.} A condition number quantifies how +much a linear solve amplifies error --- $\kappa(H)$ bounds the relative error in +$d$ obtained from $Hd = -g$ --- and no step of \eqref{eq:closed} inverts +anything. The computation evaluates $\varphi_s$ at $\vhat$, evaluates +$\nabla \varphi_s(\vhat)$, compares each component with zero, selects an +endpoint of the corresponding interval, multiplies and adds. Each is a forward +evaluation, and $\kappa$ has no route in. Correspondingly, the inequality the +construction rests on, +\[ + \varphi_s(v) \;\ge\; \varphi_s(\vhat) + + \nabla \varphi_s(\vhat)^{\top} (v - \vhat) + \qquad \text{for all } v, +\] +is a pointwise consequence of convexity. It holds exactly, at every $\vhat$, +with no error constant and no dependence on the conditioning of anything. +Conditioning governs how loose the plane is away from $\vhat$; it cannot change +which side of $\varphi_s$ the plane lies on. What it does change is the size of +$\nabla \varphi_s(\vhat)$ and the quality of the multipliers, and both push +$\qhat_s$ \emph{down}. + \paragraph{Floating point.} -Nothing in Theorem~\ref{thm:main} requires a tolerance. A small relative -cushion, reporting $\qhat_s - \varepsilon(1 + |\qhat_s|)$, is nevertheless cheap -insurance against last-bit effects in the gradient and the sum; it is a -numerical safeguard, not part of the argument. +Nothing in Theorem~\ref{thm:main} requires a tolerance. The arithmetic, being +carried out in finite precision, does introduce error, and the previous +paragraph says only that this error is not amplified by $\kappa$ --- not that it +is absent. + +\begin{remark}[Rounding]\label{rem:rounding} +Let $u$ denote the unit roundoff. Evaluating \eqref{eq:qhat} in floating point +incurs +\[ + \bigl| \mathrm{fl}(\qhat_s) - \qhat_s \bigr| + \;\lesssim\; + u \Bigl( |f_s(\vhat)| + + \textstyle\sum_i \lambda_i |g_i(\vhat)| + + \sum_j |\mu_j|\,|h_j(\vhat)| + + \sum_i T_i \, d_i \Bigr), +\] +where $T_i$ bounds the intermediate magnitudes arising in +$\partial_i \varphi_s(\vhat)$ and $d_i$ is the distance from $\vhat_i$ to the +far end of $[l_i, u_i]$. No condition number appears. +\end{remark} + +Remark~\ref{rem:rounding} is governed by the size of the \emph{summands}, so +cancellation matters: multipliers of order $10^{8}$ against an objective of +order one put the error floor near $10^{-8}$ even though $|\qhat_s|$ is of order +one. The implementation's cushion, reporting +$\qhat_s - \varepsilon(1 + |\qhat_s|)$, is scaled to the size of the +\emph{result} instead, and the two agree only on a well-scaled model. The +cushion is therefore a numerical safeguard and not part of the argument, and it +is exposed as a user-settable quantity rather than fixed. + +Note also that the final term of Remark~\ref{rem:rounding} is the one that can +raise $\qhat_s$. The correction in \eqref{eq:closed} equals +$-\sum_i |\partial_i \varphi_s(\vhat)|\, d_i$, so a gradient component computed +slightly small in magnitude makes it slightly less negative. Remark~\ref{rem:robust} +gives no protection here: it is a statement about the multipliers, and a +perturbation of $\nabla \varphi_s$ is not one-directional in the way a +perturbation of $\lambda$ is. + +\paragraph{Non-finite values.} +A solve that diverges can leave NaN in $\vhat$ or in the reported multipliers, +and an infinite multiplier yields NaN through $\infty \cdot 0$ or an infinite +$\varphi_s(\vhat)$. These propagate silently. The implementation therefore +rejects any non-finite $\qhat_s$ and reports ``no bound'', the same disposition +it takes for an unbounded direction, so that Remark~\ref{rem:mixed} is again +respected. The case that makes this necessary rather than cosmetic is +$+\infty$: a consumer keeping the best outer bound seen would discard NaN by +accident, since NaN fails every comparison, but would accept $+\infty$ as an +improvement. \section{Relation to known results}\label{sec:literature} @@ -371,6 +453,8 @@ \section{Correspondence with the implementation} box tightening & \texttt{unbounded\_variables} \\ Proposition~\ref{prop:agg} sum & \texttt{SPOpt.Ebound} \\ Remark~\ref{rem:mixed} safeguard & a \texttt{None} bound, propagated collectively \\ +Remark~\ref{rem:rounding} cushion & \texttt{eps\_rel}, \texttt{--ipopt-outer-bound-cushion} \\ +non-finite rejection & \texttt{math.isfinite} test on $\qhat_s$ \\ \bottomrule \end{tabular} \end{center} diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index 5ce5e55cd..1a188e18b 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -283,6 +283,91 @@ measured above, so it is last-bit hygiene, not a proof-carrying margin. The marg itself is not a soundness problem — the theorem in §3.3 needs no tolerance argument — and a user who wants to absorb `constr_viol_tol`-scale infeasibility can raise `ε_rel`. +**Where the cushion does not scale with the risk.** `φ(v̂)` is evaluated in double +precision as `f + Σᵢ λᵢgᵢ + Σⱼ μⱼhⱼ`, and `q̂` adds `−Σᵢ |∂ᵢφ|·dᵢ`, where `dᵢ` is the +distance from `v̂ᵢ` to the far end of its interval. Rounding gives + +``` + |q̂_computed − q̂_exact| ≲ u·( |f| + Σᵢ|λᵢgᵢ| + Σⱼ|μⱼhⱼ| ) + u·Σᵢ (terms of ∂ᵢφ)·dᵢ + u = 2⁻⁵³ ≈ 1.1e−16 +``` + +Both error terms are governed by the size of the **summands**. The cushion +`ε_rel·(1+|q̂|)` is governed by the size of the **result**. On a well-scaled model those +track each other and 1e−9 is generous by seven orders of magnitude. Where cancellation +is severe they come apart: a constraint row scaled by 1e−8 drives its multiplier to +~1e8 against an objective of order one, so the error floor is ~1e−8 absolute while the +cushion is ~1e−9. + +Note that the second error term is the one that can push `q̂` *up*. The correction is +`−Σᵢ|∂ᵢφ|dᵢ`, so a gradient component computed slightly too small in magnitude makes +the correction slightly less negative. Unlike a multiplier error, which §5.1 shows is +one-directional, a gradient error is not. It is not amplified by anything — see §5.3 — +but it is not self-protecting either. + +**Practical consequence: on a model known to be badly scaled, raise +`--ipopt-outer-bound-cushion`.** This is the one respect in which numerics bear on +validity rather than on tightness, and it is the reason the flag exists as a knob +instead of a constant. + +**Non-finite results are screened.** A diverged solve can leave NaN in the point or in +the duals, and NaN propagates silently through every expression above. An infinite +multiplier produces NaN (`inf·0`) or `±inf`. `certified_lower_bound` therefore checks +`math.isfinite(q̂)` before applying the cushion and returns `None` otherwise, reusing the +word it already has for "no bound this time". Without the check the safety would be +accidental: NaN loses every comparison, so the hub's `new > old` test in +`_outer_bound_update` happens to reject it — but `+inf` would compare as an +*improvement* and be latched as an outer bound that is not one. + +### 5.3 Ill-conditioning: why it costs tightness and not validity + +Ill-conditioning is the obvious worry for a bound read out of an NLP solver, so it is +worth saying precisely where it does and does not enter. + +**"Sub-optimal" has only one meaning here.** The model is convex by hypothesis, so it +has no non-global local minima. Ipopt returning a sub-optimal answer can therefore only +mean it stopped short of converging — an inexact iterate with inexact multipliers. That +is exactly the case §3.3 was constructed to cover: the corollary holds for *any* `v̂`, +optimal or not, feasible or not, and for *any* `λ ≥ 0` and *any* `μ`. + +**The bounding plane is immune because there is no solve.** A condition number measures +how much a *linear solve* amplifies error — `κ(H)` bounds the relative error in `d` +from `Hd = −g`. The certificate inverts nothing. Its entire computation is: evaluate +`φ` at `v̂`, evaluate `∇φ` at `v̂` by reverse-mode AD, compare each component to zero, +select an endpoint of that variable's interval, multiply, and add. Every one of those +is a forward evaluation carrying relative error `O(u)` per operation. `κ` has no route +in. Correspondingly, the inequality the plane rests on, + +``` + φ(v) ≥ φ(v̂) + ∇φ(v̂)ᵀ(v − v̂) for all v, +``` + +is a pointwise consequence of convexity. It holds exactly, at every `v̂`, with no error +constant and no dependence on how well-conditioned anything is. Conditioning changes +how *loose* the plane is away from `v̂`; it cannot change which side of `φ` it lies on. + +**Where conditioning does land: the correction term.** A badly conditioned problem +leaves `v̂` further from optimal and `∇φ(v̂)` correspondingly larger, and the shortfall +`Σᵢ|∂ᵢφ|·dᵢ` grows with it. It also gives worse multipliers, which weakens `φ` itself. +Both effects move the bound *down*. This is visible rather than theoretical: in the +study below the well-scaled Hilbert QP closed to 1e−9 relative, while the same problem +with a 1e−8 row scaling stalled at 1.8e−2 relative and never closed further. Loose, +valid, and correctly reported as such. + +**Empirical check.** Hilbert-matrix QPs (`H_ij = 1/(i+j+1)`, `cond(H)` ≈ 1.6e13 at +n=10 and 3.5e17 at n=16), with row scalings of 1e±8 and an objective offset of 1e12, +solved at `max_iter ∈ {1,2,3,5,10,∞}` and certified at each. Every bound was compared +against `f` at a point *constructed* to be feasible — not against `f(v̂)`, which is the +trap: `v̂` carries up to `constr_viol_tol` of infeasibility, so `f(v̂)` can sit below the +true optimum and manufacture an apparent violation where there is none. No violations at +any conditioning, scaling, or truncation level. This is `TestIllConditioning` in +`mpisppy/tests/test_dual_certificate.py`. + +**What ill-conditioning *can* break is convexity, not the certificate.** A Hessian that +is nearly singular and slightly indefinite is non-convex, the tangent is then not an +underestimator, and §5.1's exception applies with full force. That is a property of the +model as written, and no guard in §6 catches it. + ## 6. Guards Checkable at setup, hard error (following the repo's fail-loudly convention): @@ -569,6 +654,22 @@ optimum 8 at `(1, 0)` and multiplier 4, all analytic. by the constraints. - **Cushion**: `ε_rel = 0` reproduces `q̂` exactly; the default shaves it by `1e-9·(1+|q̂|)` and never turns a valid bound invalid. +- **Non-finite results** (no solver): a NaN dual, a NaN in the point, and an infinite + dual must each yield `None` or a valid number, never a non-finite one. The `+inf` case + is the one that matters — NaN is rejected downstream by accident, `+inf` would be + latched as an improvement — so it is asserted explicitly rather than left to the + general check. +- **Ill-conditioning** (Ipopt-gated): Hilbert-matrix QPs at `cond(H)` ≈ 1.6e13 and + 3.5e17, with row scalings of 1e±8 and an objective offset of 1e12, certified at + `max_iter ∈ {1,2,3,5,10,∞}`. Each bound is checked against `f` at a point *constructed* + to be feasible by bisecting a uniform downshift — comparing against `f(v̂)` from the + solver instead is the trap described in §5.3 and produces false violations. Two + supporting assertions keep it honest: that the 1e−8 row scaling really does drive the + multiplier past 1e6 (or the cancellation variant would silently stop exercising + cancellation), and that the well-scaled case closes to 1e−6 relative while the badly + scaled one only has to stay valid — pinning §5.3's "tightness, not validity" as a test. + Tolerances are a few thousand ulps relative, which is the §5.2 arithmetic allowance; + an exact comparison at an offset of 1e12 would be testing the FPU. - **Integration**: `farmer` is linear, hence convex, and Ipopt solves it; compare the cylinder's bound against the EF optimum. - **MPI**: 2-rank cylinder, same comparison, exercising `Ebound`'s reduction. The hub diff --git a/doc/src/spokes.rst b/doc/src/spokes.rst index 2bac26128..d07c00f24 100644 --- a/doc/src/spokes.rst +++ b/doc/src/spokes.rst @@ -106,10 +106,29 @@ spoke is pinned to Ipopt, via ``--ipopt-outer-bound-solver-name`` (default *convex* model -- it does not let it certify a non-convex one. If the model has integer variables this spoke is inapplicable no matter what anything else runs. +**An inexact or ill-conditioned solve is safe.** The certificate assumes nothing +about the accuracy of the solve. The model is convex by assumption, so it has no +non-global local minima, and Ipopt returning a sub-optimal answer can only mean +it stopped short of converging -- an inexact point with inexact multipliers, both +of which the underlying theorem admits. Ill-conditioning does not enter either: +the certificate evaluates the objective and one gradient, and inverts nothing, so +there is no linear solve for a condition number to amplify. What both cost is +tightness. The looseness term grows as the point moves away from optimal, so a +badly conditioned subproblem reports a weak bound, and the hub keeps the best +outer bound it has seen and ignores it. + ``--ipopt-outer-bound-cushion`` (default ``1e-9``) subtracts a small relative amount, ``q - eps*(1+|q|)``, from the reported bound. This is last-bit hygiene against floating point, not a proof-carrying margin; pass ``0`` to disable it. +The one case worth raising it for is a badly *scaled* model. The bound is summed +as ``f + lam^T g + mu^T h``, so its rounding error tracks the size of those terms, +while the cushion tracks the size of the answer. Multipliers of order ``1e8`` +against an objective of order one put the error floor near ``1e-8`` while the +default cushion is ``1e-9``. Rescaling the offending constraint rows is the better +fix; raising the cushion is the cheap one. A solve that diverges outright produces +no number at all -- a non-finite result is rejected and the spoke stays quiet. + Maximization is not supported and raises at setup. .. note:: diff --git a/mpisppy/tests/test_dual_certificate.py b/mpisppy/tests/test_dual_certificate.py index b01ef1f87..8b83f70db 100644 --- a/mpisppy/tests/test_dual_certificate.py +++ b/mpisppy/tests/test_dual_certificate.py @@ -21,6 +21,7 @@ # whose optimum is x=1, y=0 with value 8 and multiplier 4 -- all analytic, so # every expected number below is exact rather than a recorded observation. +import math import unittest import pyomo.environ as pyo @@ -176,6 +177,45 @@ def test_cushion(self): self.assertLess(cushioned, exact) self.assertAlmostEqual(exact - cushioned, 1e-9 * (1.0 + OPT), places=15) + def test_nan_dual_yields_no_bound(self): + # A diverged solve can leave NaN in the `dual` suffix, and NaN + # propagates silently through phi and the correction. The contract is + # None, the same word this module already uses for "no bound this time". + m = _place(_model("le"), 1.0, 0.0, float("nan")) + self.assertIsNone(certified_lower_bound(m, eps_rel=0.0)) + + def test_nan_in_the_point_yields_no_bound(self): + m = _place(_model("le"), 1.0, 0.0, -4.0) + m.x.set_value(float("nan"), skip_validation=True) + self.assertIsNone(certified_lower_bound(m, eps_rel=0.0)) + + def test_infinite_duals_yield_no_bound_or_a_valid_one(self): + # -inf clips to lam = +inf, and inf*0 is NaN; +inf clips to lam = 0, + # which just drops the constraint and leaves a loose but valid bound. + # Neither may return a number above the optimum. + for d in (float("inf"), float("-inf")): + with self.subTest(dual=d): + q = certified_lower_bound(_place(_model("le"), 1.0, 0.0, d), + eps_rel=0.0) + self.assertTrue(q is None or q <= OPT) + + def test_a_non_finite_bound_never_reaches_the_caller(self): + # The guard is on the result, so it catches every route to a non-finite + # qhat, not just the ones enumerated above. +inf matters most: unlike + # NaN it would compare as an *improvement* to a hub tracking the best + # outer bound seen. + for x, y, d in ((float("nan"), 0.0, -4.0), + (1.0, float("nan"), -4.0), + (1.0, 0.0, float("-inf")), + (float("inf"), 0.0, -4.0)): + with self.subTest(x=x, y=y, dual=d): + m = _model("le") + m.x.set_value(x, skip_validation=True) + m.y.set_value(y, skip_validation=True) + m.dual[m.c] = d + q = certified_lower_bound(m, eps_rel=0.0) + self.assertTrue(q is None or math.isfinite(q)) + def test_fixed_variables_are_constants(self): # A fixed variable is not free in the box and must not contribute a # correction term. Fix y at its optimal value; the bound is unchanged. @@ -354,5 +394,163 @@ def test_solver_objective_value_can_be_an_invalid_bound(self): self.assertTrue(q is None or q <= OPT + 1e-9) +# --------------------------------------------------------------------------- +# Ill-conditioning +# +# The question this answers is whether a solve that goes badly because the +# problem is badly conditioned can produce an *invalid* bound rather than +# merely a loose one. It cannot, and the reason is structural: the certificate +# is an evaluation, not a solve. A condition number measures how much a linear +# solve amplifies error, and `certified_lower_bound` never solves anything -- it +# evaluates phi and its gradient at whatever point ipopt stopped at. The +# tangent inequality it rests on is pointwise and exact for any convex phi at +# any vhat, with no error constant, so kappa has nowhere to enter. What +# conditioning does change is how far vhat lands from optimal and how large the +# gradient there is, and both of those show up in the correction term as +# looseness. +# +# The test problem is a Hilbert-matrix QP, the standard ill-conditioned test +# case: min 1/2 x'Hx - 1'x s.t. sum(x) <= 5, x in [-10,10]^n, with +# H_ij = 1/(i+j+1). It is convex (H is positive definite) so the hypotheses +# hold exactly, while cond(H) is about 1.6e13 at n=10 and 3.5e17 at n=16 -- +# past the point where a double-precision solve can converge properly. +# --------------------------------------------------------------------------- + +HILBERT_BOX = 10.0 +HILBERT_RHS = 5.0 + + +def _hilbert_qp(n=10, rowscale=1.0, offset=0.0): + """min 1/2 x'Hx - 1'x + offset s.t. rowscale*sum(x) <= rowscale*5. + + `rowscale` leaves the feasible set alone and rescales the row, which + rescales the multiplier ipopt reports by the same factor -- 1e-8 drives it + to ~1e8 and makes the `lam^T g` term in phi dominate an objective of order + one, which is the cancellation regime. `offset` does the same to the `f` + term. Both are ways of making the arithmetic hard without touching the + mathematics. + """ + m = pyo.ConcreteModel() + m.I = pyo.RangeSet(0, n - 1) + m.x = pyo.Var(m.I, bounds=(-HILBERT_BOX, HILBERT_BOX), initialize=0.0) + m.obj = pyo.Objective( + expr=0.5 * sum(m.x[i] * m.x[j] / (i + j + 1) for i in range(n) for j in range(n)) + - sum(m.x[i] for i in range(n)) + + offset + ) + m.c = pyo.Constraint( + expr=rowscale * sum(m.x[i] for i in range(n)) <= rowscale * HILBERT_RHS + ) + m.dual = pyo.Suffix(direction=pyo.Suffix.IMPORT) + return m + + +def _hilbert_objective(xs, offset): + n = len(xs) + return ( + 0.5 * sum(xs[i] * xs[j] / (i + j + 1) for i in range(n) for j in range(n)) + - sum(xs) + + offset + ) + + +def _rigorous_upper_bound(xs, offset): + """f at a point PROVABLY in the feasible set, hence >= the true optimum. + + Comparing the certificate against `f(vhat)` from a converged solve is the + trap this exists to avoid: ipopt's vhat carries up to `constr_viol_tol` of + infeasibility, so `f(vhat)` can sit *below* the optimum and manufacture an + apparent violation where there is none. Here a uniform downshift is + bisected until the shifted, clipped point satisfies the constraint exactly + as evaluated -- clipping keeps it in the box and the shifted sum is + monotone in the shift, so the result is feasible by construction, whatever + the solver did. + """ + def clip(t): + return [min(HILBERT_BOX, max(-HILBERT_BOX, v - t)) for v in xs] + + lo, hi = 0.0, 2.0 * HILBERT_BOX + abs(HILBERT_RHS) + 1.0 + for _ in range(200): + mid = 0.5 * (lo + hi) + if sum(clip(mid)) > HILBERT_RHS: + lo = mid + else: + hi = mid + feasible = clip(hi) + assert sum(feasible) <= HILBERT_RHS + assert max(abs(v) for v in feasible) <= HILBERT_BOX + return _hilbert_objective(feasible, offset) + + +@unittest.skipUnless(ipopt_available, "ipopt is not available") +class TestIllConditioning(unittest.TestCase): + """Validity must survive a solve that goes badly for numerical reasons.""" + + # (label, n, rowscale, offset) + VARIANTS = [ + ("cond 1.6e13", 10, 1.0, 0.0), + ("tiny multiplier", 10, 1e8, 0.0), + ("multiplier ~1e8", 10, 1e-8, 0.0), + ("cond 3.5e17", 16, 1.0, 0.0), + ("offset 1e12", 10, 1.0, 1e12), + ] + TRUNCATIONS = (1, 2, 3, 5, 10, None) + + @staticmethod + def _solve(m, max_iter=None): + opt = pyo.SolverFactory("ipopt") + if max_iter is not None: + opt.options["max_iter"] = max_iter + opt.solve(m) + return m + + def _reference(self, n, rowscale, offset): + m = self._solve(_hilbert_qp(n, rowscale, offset)) + return _rigorous_upper_bound([pyo.value(m.x[i]) for i in range(n)], offset) + + def test_bound_never_exceeds_a_feasible_objective(self): + for label, n, rowscale, offset in self.VARIANTS: + upper = self._reference(n, rowscale, offset) + # Both sides are computed in double precision, so the comparison + # gets a few-thousand-ulp relative allowance. That is the + # arithmetic caveat dual_certificate.py documents, not slack in the + # theorem: at an offset of 1e12 a double resolves about 1e-4 + # absolute, and an exact comparison there would be testing the + # floating-point unit rather than the certificate. + slop = 1e-12 * (1.0 + abs(upper)) + for max_iter in self.TRUNCATIONS: + with self.subTest(variant=label, max_iter=max_iter): + m = self._solve(_hilbert_qp(n, rowscale, offset), max_iter) + q = certified_lower_bound(m, eps_rel=0.0) + if q is None: + continue + self.assertTrue(math.isfinite(q)) + self.assertLessEqual(q, upper + slop) + + def test_severe_row_scaling_really_does_produce_a_huge_multiplier(self): + # Without this the cancellation variant above could silently stop + # exercising cancellation -- a passing test that tests nothing. + m = self._solve(_hilbert_qp(10, rowscale=1e-8)) + self.assertGreater(abs(pyo.value(m.dual[m.c])), 1e6) + + def test_conditioning_costs_tightness_not_validity(self): + # The well-scaled case closes to the last few digits; the badly scaled + # one does not close at all. Both stay valid, which is the whole + # claim: conditioning moves the bound down, never up. + good_n, good_scale = 10, 1.0 + good_upper = self._reference(good_n, good_scale, 0.0) + good = certified_lower_bound( + self._solve(_hilbert_qp(good_n, good_scale)), eps_rel=0.0) + self.assertIsNotNone(good) + self.assertLessEqual(good, good_upper + 1e-12 * (1.0 + abs(good_upper))) + self.assertLess(good_upper - good, 1e-6 * (1.0 + abs(good_upper))) + + bad_upper = self._reference(10, 1e-8, 0.0) + bad = certified_lower_bound( + self._solve(_hilbert_qp(10, rowscale=1e-8)), eps_rel=0.0) + self.assertIsNotNone(bad) + self.assertLessEqual(bad, bad_upper + 1e-12 * (1.0 + abs(bad_upper))) + + if __name__ == "__main__": unittest.main() diff --git a/mpisppy/utils/dual_certificate.py b/mpisppy/utils/dual_certificate.py index e83062787..3b69053be 100644 --- a/mpisppy/utils/dual_certificate.py +++ b/mpisppy/utils/dual_certificate.py @@ -61,7 +61,36 @@ # # By contrast a wrong multiplier -- bad sign convention, stale dual, clipped # value -- can only make the bound loose, never wrong, because weak duality -# holds for any lam >= 0 and any mu. +# holds for any lam >= 0 and any mu. In particular an inexact solve costs +# nothing but tightness: for a convex model there are no non-global local +# minima, so "the solver returned a sub-optimal answer" can only mean it stopped +# short of converging, and the theorem above never asked it to converge. +# +# THE ARITHMETIC IS A DIFFERENT MATTER, and it is the one place where an +# ill-conditioned model can hurt. phi(vhat) is evaluated in double precision as +# f + sum lam_i g_i + sum mu_j h_j, whose rounding error is on the order of +# u * (|f| + sum |lam_i g_i| + sum |mu_j h_j|) -- driven by the size of the +# TERMS. The eps_rel cushion below is proportional to |qhat| instead, i.e. to +# the size of the RESULT. On a well-scaled model those track each other; on one +# where cancellation is severe -- multipliers of 1e8 against an objective of +# order one, say -- they do not, and the cushion can be the smaller of the two. +# Hence the honest description of eps_rel as hygiene rather than proof: a user +# who needs margin on a badly conditioned model should raise it. +# +# The correction term carries the same kind of error, and it is the half that +# can push the answer UP: the correction is -sum_i |d_i phi| * d_i, so a +# gradient component computed slightly small in magnitude makes it slightly less +# negative. The clipping above gives no protection here -- that argument is +# about the multipliers, and a perturbed gradient is not one-directional the way +# a perturbed lam is. +# +# None of this is amplified by conditioning as such. A condition number +# measures how much a LINEAR SOLVE magnifies error, and nothing here solves +# anything: phi and its gradient are evaluated at vhat, each component is +# compared with zero, an endpoint is chosen, and the results are summed. The +# tangent inequality itself holds exactly at every vhat with no error constant. +# So an ill-conditioned subproblem gives a loose bound -- a worse vhat and a +# bigger gradient both enlarge the correction -- and not a wrong one. # # The caller is responsible for handing over a model that really is the # relaxation it wants bounded. In particular a Progressive Hedging proximal @@ -69,6 +98,8 @@ # something other than the Lagrangian relaxation, and this module cannot detect # either. +import math + import pyomo.environ as pyo from pyomo.core.expr.calculus.derivatives import differentiate, Modes from pyomo.core.expr.visitor import identify_variables @@ -246,7 +277,9 @@ def certified_lower_bound(model, sign_convention="ipopt", eps_rel=1e-9): Returns None when the box minimization is unbounded below, which happens when a variable with an infinite bound has a nonzero gradient component in - phi. None means "no bound this time", never "-inf". + phi, and also when the arithmetic produces a non-finite result -- a NaN or + an infinity arriving from a diverged solve. None means "no bound this + time", never "-inf". `eps_rel` shaves a relative cushion off the result. At the default 1e-9 this is last-bit hygiene, not a proof-carrying margin; pass 0.0 to get the @@ -279,4 +312,15 @@ def certified_lower_bound(model, sign_convention="ipopt", eps_rel=1e-9): correction += g * (bound - vhat) qhat = pyo.value(phi) + correction + + # A solve that diverged or failed numerically can leave NaN in the point or + # in the duals, and NaN propagates silently through everything above. It + # must not leave this function. Returning it would be safe today only by + # accident -- NaN loses every comparison, so the hub's `new > old` update + # test happens to reject it -- and +inf, which an infinite multiplier can + # also produce, would be an outright invalid bound if anything ever did + # accept it. Both are "no bound", which this module already has a word for. + if not math.isfinite(qhat): + return None + return qhat - eps_rel * (1.0 + abs(qhat)) From da1685ad28aae6382bdcff2c81bb82ab74f7652e Mon Sep 17 00:00:00 2001 From: Dave Woodruff Date: Wed, 19 Aug 2026 18:23:27 -0700 Subject: [PATCH 16/16] certificate: say which tightenings of the box are admissible, and why The box the certificate minimizes over is not the one the model was written with: fbbt shrinks it once at setup, and receive_nonant_bounds shrinks it again every iteration. Both are sound, but not for the same reason, and only the fbbt half had its reason written down. The tempting justification -- a smaller box removes points, and fewer points can only raise an infimum -- is an argument that the bound gets TIGHTER. That is the direction that could break it, so it justifies nothing. What is actually needed is that every scenario's box still contains one COMMON optimal solution x* of the full problem; then q_s <= phi_s(x*) <= f_s(x*) + W_s'x* for each s and the p-weighted sum is below OPT. "Common" is load-bearing: the sum telescopes only at a single x*. fbbt meets this in the strong form, removing no feasible point of the subproblem at all, so no appeal to optimality is needed. The nonant-bounds channel does not: only reduced_costs_spoke sends that field, and reduced-cost fixing is optimality-based and does discard feasible points. It rests on the weak form instead -- that spoke's contract that an optimal solution survives, plus the fact that the bounds are broadcast and applied identically to every scenario, which is what makes the survivor common rather than per-scenario. Close to moot in practice, since reduced-cost fixing wants discrete variables and this cylinder rejects those at setup. Written down anyway, because a future sender of that field satisfying neither condition would break the bound silently and nothing in the code could detect it. New design doc 3.6, Remark rem:boxtighten in the LaTeX companion, a comment at the call site, and two correspondence-table rows distinguishing the two forms. Co-Authored-By: Claude Opus 5 --- doc/designs/ipopt_outer_bound_certificate.pdf | Bin 229361 -> 231883 bytes doc/designs/ipopt_outer_bound_certificate.tex | 32 +++++++++- doc/designs/ipopt_outer_bound_design.md | 56 ++++++++++++++++++ mpisppy/cylinders/ipopt_outer_bound.py | 15 +++++ 4 files changed, 102 insertions(+), 1 deletion(-) diff --git a/doc/designs/ipopt_outer_bound_certificate.pdf b/doc/designs/ipopt_outer_bound_certificate.pdf index 177476fa8608bbbb453c84f9916a032f38d3559b..9b053e9eb93bfe7799cbded096a432fe2a05eb9c 100644 GIT binary patch delta 29289 zcmZs?Q0tj(JwkEpM;C z>*@N?VRK!@O)j1HJZ*RK>6sT_%GtmNtb+c!+dZb~qza9E031EwO-5Pk4bGq4GR4&m zG~1?!H&|LP^n81ylUY7Y46dzL8CEvkM|}u(VYU<>a6g=uK5>5g1!ykn)LrveZa!`q ze_c~`?NTBamkiqPMdgj|z_zgB)E6BeU)Y=v_x`M|>YRB_2DIAz9)H|G^iHHWh1-m= z3D7hAgb{D&0sw>;+n(X__!S|-oA&viLQNH;4T-9JTg$!gQ|g$U&Ey8iFF&xcMjyf%?xK*q?tgX&`xFBJR*Gw8;TyD!uj=P$h z4L7C;1Q-@b>PSEgV0ABwZNr#2HlB2z@q8j8V=a;T0Pjj?yKMr`nJ9bnfK88{>Q1+B zt=nA%)*WPhj*XFunU%FbX(=vkwKmVUYq2axsDitms<4mNu<(K8?(Hp&;LZDDSQK-H zvEyzj?7xE+TL(+Lxolg{Zl8<&Z!=FQyAsDvFw-H3uOx32JTs`*;e1PndXi``w68Z( z#rK)^fVc#HqLc{2Iv_hDN|8`z>1x@gkx(Wr{>OCSLDCgYjGd{vWzx!bP+l>N{b{dOan0OQ|hR>$w>CIUoEV+R4asb)fUp6Fav z%)V2EwW>m!4Hp0yy@|^9<`vR1pWWd?m8bT~>rcp5+R{dzNM%2RK(ze$Rsx4l>8f2%Y?*YY7PGp$Rij zz%U&7CpK6)Hsp;iDO`+N)~QY9@hd3VS#u15H&R|c(Hp4eAw;~@-za1W8xv6dHYZ6E zsM6P{VYC-7gyTTc-yM|KNt!kPb_y^gLrqk#=j0iYy?N$MO*?+Pa4a+BL8yQFb820g zFK|$HM6}^S(y6rPz>lN6Xi1;|q@JM+zzDu!g$X;)Pi;wGXhDc;rc@=0H|-BG{;3DI zDjkzQ3dKL##`%&6puMhW_>ZA;t}2JE%UY8ZJ2cj(_t4|%<&A?eHcPz?3RT$3Tj}~* zWl+$w6(+MkHkz*r&4@$i0do!43eyTNmwL~rud556ae~_Sha>(yeyeO^_lWGqfR})k zD2AfjZ7dY`6>B7=f zS1D+CSdn@Mg&-i()|w#|YC3JDEF*FuAMi3&Bbz1!h8#p>8q2cowre^cMFPl2>H zFnG#Ylh(*i)gs(KJ@k6f>k5q35p!Ps+(vJ<|cfuzH#hV zpubZQ-dFDHlD#=zeE~ubEsC)GxTiz{oK=a6dxLzin5dYy!D?px=s$#qg94bCCn%V> zHEvH?duGClM~h|vxT~6ez`f?N^CP1uT$Rw1*}wWo@1Vpet}YNi%@e|>yHiVEz}sx_ z;9N$G?P4s0i4Gk-v`&D2)tGST3R9<#tyROH?N%OmhHBdhEVl2Uqy?g$b1rI-qM0LN zzF)c2@o7@Fim88>;Y9KWBx1?yO_nU5;0vdMEHWV!nxsQt+9PJ}fbkqf<7fkf>z9N) zxIbcwANvde?CoNS{-)J`@}C9q5V#`^1gT zc*vcw`2IJfh;S@ya2jKWo>?9$1H!v`IKDOIMsI$KxcTJxY$DO^ON*(3quekj?E}v! zEx>)4_|0@Zt~BGaBabVf?{-XKIXAYgw9q`ZdOFW;qkdh0xDoB>7 zX!Nh6f)gaIkwhJlV7&K*bN6J?k$rU*$M8kv7=zVzBU;x>vdkkB@wCI%FwiV6c!u2& z@drAd+>@?@^@U0;G2T6WGZadRnu9^c^B{cQ)}SJBA)J8ZPXW)oRVPTxH2ilZ>8EEm zqoSrW;zAezsS{R%5^|`7`Kt~{Bv1xOq`+Ai0wpR`ZaK~+FoN0ko}a`0SEwJSa|<2A zw05`YzQ4v?kknRalR^aPy;SgnR$z@r_bMr?Y&_jERxu)AoY>Jx?OqP^k=hNUF7Ag}h7KG> zsnEYilsja<*!F?_v+Zkqzzpu{T+V<9Ns>th&5D9tf)MUF0^{ir_TbiUIsW-&NzLyr z3c~fycQn3wfNCO5wLcay7)`jW8}mmJIvT&oHDXP?w!feD4tjW0?dh~5cujl>i>oPQ z1)Lc0$;F4VtepvDgf-m2O$6}R=-dulL|+T^eUvDCtcagECF3#rvR^6X^3+7!tW38% z868YaZ(!=PaT>{&TBCcj6&PP8BU5HZGfPh4x`jX{L5!{6VP}_IWj>jy_kIeX?p|RL zLNOveG4P}d@2ht>W4ep1m;Pj4gN&}X;R*yupm3xY#cU50K=*^5wJ@q$Pwkb&y)-vb zry_Qz3a~-u7w}Bfx10qtq!p7RBW`(8+PK2$-XZ#X%ZF3Su_z3Nx-WSWPBAPOnj^D7 zj><$4K;)WT%7dpqBBPaCL}gGzchJIgsIE<=%xkhdWfNJUjY>YAIaYd0r*OwrpC|(^ zttIFYYWNeD*zCE@fb6yQT>gZG-9eQa#c}=q)5D^&Cq!&@jw&)zWy}NFgWCNtJeY}% z(@#vISw3^Yr}YA=x&-l+zF+>?(8u-Gc#EEmV$7f@XJNTy?H9#U;H+FLPVPhuCz^ky zp@gl3hO$AuWYhDycjF?6KrS3EXAA<==0@6ae==Mq2gGMpy^FWv&8ND66}5dXEc{PhojO_B`cqk7C$BlNfgJ#wi@yX0-* z!oK>=P?lyon$m~{|IHd^w(HH2t(Wr^i5*X{ytkrfvUC_(gG~t-N2fqu&1Dr#m_d4|P_j)u0~<@opm^f=toKb1C{6gZHJ5vg zGAvN=BnzV22D3fSz4OD>zv??vWQWFN(rinLt~aI&&h5EPa>M|!5zN1S)jD@dXJcX2 zHhNJ+cR{ZV`o6FX`R5+(p5LN>?15p@@I%$2(Lq%Ln1Oa~=h$7wtoVbqn$ zl1Nm$T(zkT?kvDz;+4&U!XULqnGmjHjcPF1pCZW>M75lHpSDIMK?sf%u`|f)aPexI0FqB$+lJXD*$5S|DCEGr!~g&JdA! zNS>H{z zENV-{LiXxs7u(useBtGr3#01IYc6Wr=B93DB}Kr5|H70kJr81gjr+7I-I#Dh-5j5x zc!#dpQx{|O66U0lW5lum;RoHsF6#??#0mjc2TqP*Dm-$);$m)GbfG(|`dcJ@q&KJN z<)WZ1`4s=y!jDl|0A?@gYr{&DQCty-sf~b`R^I28jG3%71^8qM*la}1k=PWWd{6S( zgB!qT45%dvrn#MEBU9^=)mB4A9x`Jq$Z5aovi}3O^QB2i0%fOoE?Fq?H;9VsGh+Gt z40r)@)wa~wrsV2pugyn~os#9wp*{FE+4y z?!Wq~Mg!@0J6MsKWbL}6D%XGhdxWVb;){v~>GZd>svbPY7Qd0fciK&u`NLXSzqeOu zJB(JSu>`smHm`_^LjT;JIY(>@E;`8`I`wzp#K~A=@FD9`zF?4-%5&Rxg9Hy+eG)(- z^>jPvCgeWyMeK{su9>ZRU61)bXV@krJC4vQ6+?D;2N!TzLM;!cFquHgvXkgrhF3l2 zC_fOeh<3D+BHjOsD?;J2|2xu;v^ynn8(GFrUTheozf9>!?EDbHZd`7DxPIS^y8?;% zD$LkUmW=hr!x36cTA^{CEZF^Zv(l=s66hQtZ=Nh;D zu^#UvJHLkH)M3kV)2g1Nc29Pq_`4^^ksXWWj135b`3buB#+8S%jgTL+jFLWkGF5R! zy_MfL_GLMkJ1gSGu3MDKN#%nkki?yrm;z8|AS{Z-w_;74!C~dOgJA{_Cp=XkJRT6%@Kycn|QkODU-pCVaG?xLbMHp+B!1_-p#^^ z5iqR-V>1~~BsdyL8Dhel_yTj-MP(W02-o9`n1HO$DY-IafEXgoNo|5SA;aDcqXFmw zh>G^wAg7Y%KqxL9_My4qBEX$NH6ZXjIWYX{GpPQ`Atz@Ws@97VSO-C<0D0b1klQAM zB|D1&*dn9z45P?)u=$eo2DuE0{dzO->IIMuCp#tAu0!+(NmwDJMo?ppQBqW-ehWC) z<(F_8fv8q;$c;mScfiM>Ce0o;KmoCz#hl=>z))BGFG8I77$NXPwy-JE8wG#ltwa+3 z!3AUlsE>*%$pz9tj|>MvQVD?~$dGF3&-;-O(IS5;3aO&FC)95YDon!$!@?ykk%YED z!q$$!i4OT96=>jS`Q#^qHNzOF1$XMHpaU(U19Pdo&5#4BRJkb(9<8&o`T=Z80s6Xh zQ%@!D_S{|i+w>=Cy_|wST<QrN#o?2t{aR-r4f2Ni1<>i^eBaDW-=*AS zp9z1_HJuz@@F?)Kx(&zc?l-08?(VuC_)+sX1wR6RL^?Jh(8#&%@~UX*MEYG1?|bIc zf9n%}^)Gr_E3t(#Jo z&!t~@_3;!gtDjq2C&&_d@{ByD%pNk2Ba0ua4g&#Ut%WSPXv-;KQ&v}19!B0YZ+ILW zLC}>q_W&58C(6Hk>=$1F1H)X8d?s}=DlI!-I|fSreYZQ)kC*#X_3!UwMg=SY;;>uK zpmV#{UHnmDED>`7S=AGxawD~xD9O3_3Q&>EGyiRwAio9-Cy9~#4IlvN(@Zi3sUlwJ|{T8OdeN3o4`;Bu$Pf3filHP=^_& zP}3Q}6az(5iL`z4-2xB{CUi!i)TBL7{Z!YN;yL7Cv_idxPEwOu^(!HcC$*S^2PrA4 z*}DFTg_zulH_bxu0$=uOL>6cGr$g^&L>$;RC5t@4o%7eh8x-+0tH($iDw9Wm3Aq~A ziOYl>WfmusPsK)nUH}7f_m~xer&Yv)j;h>*gqr|Y3l!roQX}B`<}EwLXmds#O}1JWr}Q^1_)|CS>t^6dP>1x!uAP$u!-q_G?p(;OhOlrR8_X%dKqC^Nv=tsBXd3@OuTNk}~5J$2_4$Bvb_G<)yWN{VN2 zMHG{oM+foW04P?clyveyc_fpCQqzQ(5O~6Rl((nAn9Psh(-fowzxDW-dLzLiDIs+o z=8~Y3oL|3s;~BJoF4(iAoQz&m?q1a;o+QfVP??b}m@=Tl(4v{@r5cR*kHG~mge;z9 zF;xnFHG5VCAfHC?ijkr-9&pn&99konCv{!0+wqSH1Y1IEB`+z3 zW2peb1r2}^_Qy{t%<5{S<&zyEDX4_t0yfH*=+m=yu<$HjVec<*(0+nd_Y&9MEZNd` zVk%7;oFc!8Ax$~7DwhSBHP=AP zMZubTgjK@YKizp{Y+`YOTi<(()rX*6{r$Pyb#th#s{gw3KC6fG%E#gD&uz(yPsOvo z^(BDob|Ydi)NM?1!HuAi;$LQ?KS7EzYLq{#DZbT%NbH&Ak?IAWbL`AVEEQ_E>apxG@p&94MGw$~d6mj!UhUAuDz41jkimieo5|FUkUX^oHg0&dvbJ^reOuq$w9J_Aj#or8_n{?EhMa^)`&-se>%7 z91ai0Z3qe-BfdwM0J#awwViEWv%HX@a(l(|eqUjXzMK@+!|L-kCM(PLuPEy4;;OIv z?Fi8T^FqedDrfoNV)$BJyX>KIO6-v@q4R^!p>ferJ0xq9{W?@TRcrOXe07Kfr4!%%abG3Z4z)#V&0 z1nR6I8+DQ$pqq6DK?%jpc>3j!#yGHSszcX~P{*xp_%rEqr-Q`JeUlqMBHP-Ey(Gb? z>ymvJe*BznG}s806P24B+50fG~~ex%T{JsiXk7+Q+RX`d{;` zW059qY6(t83o^}eCWq(0<=l;i4jbG)&eVZS_jVPnEql)5)hs^Eam~|jk$Cex1hwv- z5%BH9?2-F6jM5b*cD9_UwI}==eP}_?5XQzaRlO?KZ8HKBg&Ylw6FfM^qDw3MTEW<~ zN+e;=fXLodD-t_whw{1Q^&r#nG3`D z8H16F*ZtZt!;Xg!p?gQwFaf8^#L?rK24GSxoyYaZ5bo2iOhTM zXl(#_RPg|I52x^NSK`9sY;#*EZ)4S*x3w3wFcS#vL;+~brglrPoDh=6!nn`k27N0aJvp^zcnFmG<+2+&%XKm@Up^UA-7ed4q&lnQC!r5M^u34y@3&-REv z*T{~ajsqwQWQgv;!h!OKYebPYNE@%YjK52zI*^;|2d&8UZ|)0Gwn1{2+D2gmU3B}F zVohx4*xpgu{4V%Q#>Iv>9fuoW$qcosUOBAF{ACA&6I1k0SC|wS#-^PV2XH{5^-iT6 z3mj+V`Mx@Er!n~A-lOSSZqc$~B;8h5ZBC+B(Jb>rvh( z!5{CYp92~i%8r@JH)qB7HswRNB*Mw36YDC9Q`YyP)XfVI*$r#vd(6V9LS1U|tr}v= zedfj-b?)tz!op9vR@--L3jsks4KJ3V9caA1Y=u-`1`Vl2?oEBV zgO6v9tt_HZw>F-5+#yBS9goXpL}>MRkph=SgdE#VpjJ*sfsb!+s9^>2h|uczhuEZckXc(A0Npg&HtKe2B z;2z2x&H~}08Gt>-um^2{6IV(2y=j9q^J2LbuiPFG%t*0Sp`4;gz|woIxKqnb z>pj`g-#Fpg+X-(Iqv4G5y}QOtgKSOoS?r#}pk=WvMvJulZK=tzSOFX2+q48 zs;N7v;4(C}X~T2h13b7M)x~Da&|w~h;~SWe5ZBo>rjYprp)zF%)@d5TW^Ff?9YX?*GzhzW}6MqC|<{=~AeA=>GI_l|zHiKDG)opIAMD^EfnHvA0BpXpY5tbP*W#uO-K z0BQcr-S9Jn{n$pdnBLee#GZCJTe|G6?ybAjsBWcLJwvXA3n{6rOG%)1i+M=xfjgB} zT)^U~y}3iCJ(iVaOvgbJsT^3%>bt;_8Pf9#XOkD;YmI%ltU zSBm3b8y=e#oy<`qGRM-1i}&0a_YLDmz}Ucen$JNmH&8z=0phn6AmYM`h;Z_v<|9O= zs_EdNAy({J!xMlFIZKi^HXz{H-jLsdK0NX5HkoUGQ1);`u~!ry?djk$y~A;~gm?SL z$8;lbpAaKGT1ODTaj*dPsBO~NIkCw z;9z=cvp>R~!I7GNh>)q#FbO;rg&#r_fW6z`$CbznbK|*jghGYYSV3#iqSy?$oa17v zRY6w*{R%hMDlCf^KU+Vb2??d|0AXS2kwcX|_=W-JSFaZ&b55?W>RWU(`0huj{C!e0 zdYN&??NB_A#Xa9ARRUVfvYJ!^c$sR}+Rd-hx!$o`?8nTOi_<#3w0dyFTt$M=i0B_z z0TD=xU*crM8V3Y-w0xqLghn8VAPs~^DXScgctNpIVXduSEAG>TjhVmo?#E|RLwREs zx*5^f?^|A3)!VbKIk9ol$Nw%y1}76^q1-d^25%x}#w)G@+x2&qi9KupZlp${Nov$P z63k}DKdCGKHS7C+;1NVkrJdRm+(uCvCyofreozZ53MClp0Z*_~zQI)$6EWsn8V*H@ zZYJm)!G-47co9F*HnH)Bp9mJ}ER0rzwtw(ZpV~@g6!4K#1kJcIxiNF7deS-%K;=cE zhJuj`J5&>Ta}#QHo%wtNfNV5t=$Ab1ZNG3z7a5b4A7Q;{S5VcxzLDiBA)5z*)TLpn zm&k*F1zu*ZaBvr{>cdpuWEA#wmhvS2q0zzHfx@7Pgdu7gO(VNVe^tfT4!ATniQY>h z4uZbooF~9?8I$OUUuYbrYcFgJgpYwyCHbJDEvKM$8j2gbD15&HwoLMkS5;{*Y7mgd ztFB2;uwL+6h}r>xf#QQ|U*-Gp@cjK?_|oJgm4>o+{EmNz{MU#2o#@y}GNQwVM$znD z568DNnj+B==c23cdVdk)<^-wT0uQH;LoG?OQ>SZ3lOi+oMkc#%E~mL;E?`_WL8n_ddOL?Pi#bn(g%UFu5TPuM$Ses86fjSP+hHSxU;&JUbgtkT1$)IvOMW((sr`$IUEZul`&#u zadsZdpcyI1k^X}n`NX+V$dsgJ+4A!HJip=V10S;#08lZoXw@+N){7`>m< z2a}$T>D8>zC<>9%LPZ`ES($$$%mw>x_}ykKpLXix8 zlx5qxmDAM#jM~A|{v6%A2G5lXo#iJXrNQT`T-cSM%f5_iH>%fS?2p93Qg2V#=QgSk z=v3nsXtYBXOp7FRsQwIivUNJ;OfwJijU zvWtNx4(Z3t4|kO2y%e!FVT>Em@8Us&XLtUV%!t};EieqotTaUvgzk97U0|jh+YhR3 z2b^Hai(j^S!1M6F7-@G8WKoYwl69+2<$7FYS20-^q%Hl;NsX<(kB2+cN^)%N3At3f zj*D^xFtqL*4Cxc>)pK|<-EZ5rP1~EV55N=P+@6kT{D_gYm0Ceonkc3n0-x<-P4`R7 zx;Y=JCx+Vu{=M4fvS`&0`=`M@!CHYq`AgEa4M)rxr>YPaAYkF;u6qK64k8G7Dd82f(m`gF#d}+X<9n7)5Q5TOnfFZWIAfpy2#ZD!DZOt^m2=3Sz;#9l4x5I?rRb+ zDVlpibq`xVqsH#?;U&zqu}YdJ|M8u8(KnFNWFJ3Kdm3-5K815rpLHz!U?39kq`$pw zsEi0g|APHl)@3CjnXX?6xqyFpBRAx5#e2sYmEP-2{MX*g|AY5dLC~Ai2lq$Dczm2F zut*y^oh98Wk#*d+{VTan-}gbVi|Fh0|KYlv|Kqx#Ow3&We|>ToXEScA_1Uk_c&AXD zzga4(7_A6AlR`qLxaJV+F8B~+1A8XMSZ}0oWGD3VocacPfO19Bz9Hbep5`Px)QE@uaQ}35gzUTJKzhCR^Qp7S1H;}X*;dg^58i`qJ$)2Q ze}uGY;C@Nr}EAJXugf9TGDNwRgYRX$tGQ2Lj*8}kH znvSttG`ETPNOKaYK^NC8-898t(0}A%CtCJlb>gF{Lm?SQZ+>tF1I22r(iSR|FGDRL z+0W2muqalqA#<{@6~tEa#;PsqtS~dT?tUE=^w(*kF$~0LhZZ^=vGXl6EJMW_WWUu= zFy#??m}US?j2H`JFH#!QX|%kIA98goINcF3iklK;R^n4bF05pval$i5GSPIF4wh=5 z-AAz#x?@B2eC(Y0=`KgP**G&gR$nlB5=XQ}N23aD`t;1{fFJB!0qZ0<$n#%OE#_Kq zroYUo5J|si!KPZ77KTKpCa=ou9h-V`Qrw3`xsiZMw%AW(1OTFktSM7U1z#SDHX8_# z$vPOVy?9hbD6}6TIWExjb6=M}Z6aT^ca|J586(lvKpjl)Y4W%NpU}#dA8;C=KuLXzLl*MHb=;+=MF(LqJ zyMso=$)&!SjTw0;Jt7Jm0VWplW`ymSW6v0nB`IlLg?R6+iKOkr3 zDE!bc={%fZTY9)FFZ^d)-s=d>&PJhQ2A$<$5fs$P7)~O7%lP5i^Z~s3d~Z6dbQv=K zMl>K>>ETe%g|~4LeCN98Fi~u>u1kP(bg?a4{j7=kK=Sq++<;D$Z%0{Jvpzv~iyvQ8 zDEAQNE4*_@*e{!1ol}t(VG9KJE=baYae=LSpXHxDBc4Cq!QT^?Wx4wlqV8ydPz##bUE z*Q;pma!_Iv|L7AwD8RI}vJaN8)&gX^>~$qrzUy4(AP2v32_fMxAmZcFOI?f>J5~98 zqnH0#rq*8o_j`v*mmxw;A}@2pOS}aV9c@dJ14sq>2dxC4wSrP#-MIkIHKL-c=Vuom zg&vQqASoADH#8wo@{w%1{AGxIOml^|ls>mZH zW4}xGhu#ra%W0)(bB@hWmhDJvV5GMdK(NgomxM5UAT+cj)d`A1cp!|pW7X`(wp!J8 zU9ShB4T#+`@d_5^P=?OI7$FW!y#!WQj!-LjK#5s7-g!k&8FuhyI$%5t^X{SnedJIt z-NM1nSag=OBQbzB;xW&grDP{>S?F;^7h4Xpe~$@YWK%KuS>OrN1@0fRtD?3;Fkrqw zg>GHg)9#H;NH;`(*hV*ug@G-?snzwr?=CLB(O(wNVVFe1rt{TPSu8@e>@ur39Tt}{ zUIIMRa63NE6gg<2238zh$+k zTB&YM2k$CipjtrF{Fk`ae9DjK+Q((B8_0XoHzr%@m9j*-PlZKy#dx%b+L!XBO3n7h zhkd%$YRtnWM(Q!qP5OF{B(e4&Rbu6UArl-266hXSMIDtG*OkrhjZDd_o}(@bZwU)9F1&%=JmhboCkxK`6$WBkx7|YI8zn?fhno}gh(HwMA3oj@oGS;(O&W}v|f6q02rFaO{&Rr7*@qST3 zjTS6%1D*R{rs*YK-3LiX_Msow=$hSsPD2gxHUh)hF@O3%+xPQ{xqXnPVEpYpnndPw z9xKYE`T3vsJ7^f@(BQ;!!M&@u?mYpoPi$%}J{LM05q>a)O$m5^qaioS9++(g{z%Qg z5zNGS%o}s$P?lNDnf$%m3(3|Ou+67CTL$uI`+kbunBD&)YEfzF*NOp-6@nJ+$Ub4^ z%i*fn!zdOqJRrxF0Sx9{T}(hmSL=(6nBNT7Sh!j^J8!-wFgYrm1q|0KcG&~?hMgEk z!{a=?^-KKmr#DOz=5DuqG}yp*9l55^PuL6Q!qeDi@?Y1fV&m^qKkO?II{ZZp`|Uy@ z_;zISBZh<2-^=!c<>6#`cfnOS^bq~x*b~Hu!Pl)Q+kP!`-b@#5DX0L*Fyel>4;vG% z-SGogW>ZtA65d%!1vKJ5-%(A) zm3;g#KOOUhdW=8JY5VS&w<5f(Mg`vq_)UjI{0{g^bWc2BOPqN5JV8NHMP9H&e#6unqcw8Sc*H}@Tk{Pj5@9+G}pCoxtKZ$N)TF|ERDVZiaJ|6W0Ei*jU^KK8xyWt-V zAz|MngHrc-n$8H&R!3^v#JZz{k$%}Rf_fjVmc0D%J&cWH9@76L9=BPwC?wluRYrbf zz1Z?^&iU3f!J6*nr`y@8{Ajk+7F{mPXwbT+%%fJo6Igj;IwzI_bwkK7N}H5XDu~ja zAy=n?=!CZ|r(tQOfJus_mm%-Clsx=Y3fd7rjJ@Qfur&jGG%L=DLK2&ntkzs7JA2WI zeG24aSoX0D-`HzlQ_3QFU0r{P6dN{Y68gZNGD;Iqq>Iq#q7g?M>Kemjb|#b8khxNV zsq?kGQZ35+&&39ciPMkq;($s2EZFcpo;uzsYR55l$?6kYqTB!q^j@jYSoP%79Jjsk z8nX|f9g_gM7;L{GrB-=+79+&;x71v^s#;UnM|OpG;MC3q5pT9%`?Ri}bl%WkMn%2~ zmn=I*%A*W|0MG=CbLCq~u1pe6L@qcoFIokx*7 zp(h^9^mB>11%*|hq-hKMMH{80^t+vTh(3DVL2Kdq97K0q~s& zVNrm@S4UiE!(D5^^<9NP*-g%ot_J=|sK7~43;|;W9HbEoJh79rklTo}-@rE66srk{LzftP6;LAN1MGaaIyId|+Tum=*v77#ce7@eh`bvpe1mflAbIsoi5}1l8Ij z$!x*h9zEgw%;eA^Z(pp=_L2Rl+xR=hvBhfHhBAYhr>^!8?*dC;e=AyLJurMM`X%bK z129*H4$pm+nOVa+eWO!xdG6q(lnhm-VK$?(s#iqKUtqbCga1p?)2HP@A=3{8fiap0 zZ19BAk#zqfrK&uh^snIm2>b+=H2r%I7_*HM8n~My9RwHz9g&TR>Hm}tS%^4T)8}MC zFu*ujIRC%)Av2(vY8wt1IItlRg@hZY1X&4dGXNPkWve}SC3ASGWa zJpUJa_VEia`_R`?8IY6g#kD%icA@H#ZC)OnhBJ?FHY1_N%BQ1@#R9 z!^Agpk&fz+C{%Ne(4IRi6r~+>LJ-Hz+I&4&L0{2$dJXBE>c&9%6#E zlQy&h@dH9&K@P(LK>gw2<^p+0e&is?4uP@ONc4Wrp66GzJg6Xm`>F8~n7}5$G54c_ zNST0iodSA0G4^^Y9IlL4*)AVWks^$bFo z#Y1(-p@5Qs?M4`w+7NeFvHW@l)4mT?31cLttrj1c-}P#KnCrNQA6hL^Wyebc(SE(0 z5O`%N3(b(u2LsIPs4GDpTrdnGgicawZ%8;HE>I)_CY^nQb9lZSq`ug`<#uS_?wmOV zAb`yl5)@%EJIJf#$u)?ZC{R6?W=Q<&FUOZE31~2|BN-fQy~rAovgz-5oGNMc?^ye> zNdf^7D-wc_A<)_C?QWSQm*>Dd73A!1`|nO&eMRNW(B}jQfa0f3UK#ls_-Fo5i4?{St6F@LO2FW?8YGOkeq6wse9xP4H2Zh+tQ4Gy$x;Cu)A^H&ZsR+Jv3 z|CKNyEBK!<(-!2{FZ}Z^@h@k{@5I9|$UA@&%*oC1&FV1r0|Gh zzDhnxgPaN{9qtLu3~RCAYU6j$0R7K*jPL*bBS0a7#n`&zz$ZgDSHai{_|^0uFf?<} z`IvFOFNuj+z8#yO*tSiy56e{hOMGOTLz}k3!g<-QmKL4)X1?!#2fmhB$Kfb8m=Gh3 zmBNRsKRwNwe2sJ6qON2usy%yhk3>dYEre#+cSG75t?nl61aG=tJ}U9=18Od^BVGE$ zb-)srpsZJ{{60IW^rCasCoC=05jPE&E$S)!$HuZ+F0j!5TQ2y>q$!_EOKmT)wX1!G zpO1F}dqZ*cY_E;{aqNF=cH8qz9LmR@8fc=CHL>WA^t;ArTsIX;URqU3lnYl^XZDv& z$SzeUVjb4Z*!uQJI2vRT0S&RFo94yVVn>|T$d^5vYm?#P9& z)h+wq(Sc53$?LR}pm}&>yKx-%B`*98^t2m*i%$h%!6}9gJaZZ_wiyYz#UoecUH9<7 zF-07;0qI79zuSzj$vVNs@OEC)0P|Ewwz&)9^|g~Z4YYYxb6?&7fM0wQ)&Yh{Ukdd+ zS+%kYV0>}K3dQn=e6dAn_1oLs$6dq=;;$z7CkA9;B%0>zdA4NZ*t7&E^wxAaZ!UvT zt4_*0XcQ@=J*w^bO+4FlGM!`96|?`e!4zYZ=ZiU(>jK4(Ol~!qod9-;FmTgH!peQS zYc?4|O;@5!wk~QvfY%UWMafsq#f2mD+dBY+MXU?#mIFTTh}9=*>(pLH_10}0O^xdb zx4%b@Rc5CRCA~Lwy5|y>Ef2PfT&^^KVn@@h(2Q|A7XLuiQoBF?dwO>&_F9AYvdzmz(dx6S zYi@ zh9^_;oX720U*3+ej_!O#UvT!PMjIsVf#!UrMj*VYLaO?rNi8m&8lGTAcV}eD%wQ{| zVK^9GB68_~u<;37yKf@BHY%+<>|&VkI7KlrI46w*c+uZb9N^T%v!y~8?p~jsViY3Z z-=`!RpKUl@bUKrh$S?5ImF4V4yDeR10%ddtcO7lJ{jb8lGN_Jd**b9WKp?ogyL)gr z90=}C2(H1M0fGb#esFgP5Zo=eLvVM3yW8Wwy6^k@{p-~|z4uhjbk$VvUTdCO@>?$Ingm7o+9c$IsB~2#87`*Na;v+>gK4rQVwq8vaPZYe+g!sXC^tvA~wsunT;Yd5%{|h7kpocqLhh7Oa7*{1 zNh`W}c}^gsMLxOl!R`QIHIESnnW*dImpb=_lJvP>dhf~(>fXkaCV%f*tbfuatkL=hd%XOXoQb+~If1anXwE5DkLGD^uo}?341FK+z9ua<}d4FyF z*Aqo52t9&X9Oy|~$m9UlkYxMB{f;}C@?aMEi{AYpFRP~=N8;$pj`LOt|AiCFv;~n& zTgUx_^6+(SE9p5f+h%xIhKI7nM>tcLSz7QQj!krMhCs>2m9zXS;@Qum+4!tib&|aG ztf%C`BXY&bL^-#UaN4^ch|PTAA4HWtY!7CmzfWRfXyqJ>&E0Vyd@2a&y|zO8Y`T)@ z)pypYiVobi#{{7PRa?9)t2L&6ZxwWmbi?c9mc2)Dk zjW7Jq(waYg^QIe0PdP*>63~_@FMLmKM9%|%tc!mh@}AaN{NbcD@BSLh6z^X-j_Z!n z_uZkZhAz(CA>(hdsYrtCL#v|Oq+tv8pj(-@#|d?V!;zD+e0u24vL?+$w0OBiN?F+8 zncFH2TWiNY@U1h1=DJakzJ~FZDU<~|>6GW0TD%pPQZu&6ql1jGHy-IuS>V(@OKkoE z=PhB*Wo6eav~hAXtO#LMb#N+7s3m^@iyK7Q(2e;%WWcK*>rd_^2iovT@wGNhE&Qta zbuhP=Li^rVp*wK~%VQ{?Wq}wf#Jm~f!-PW`iq82)Lz?uMj)8f+7m z8>~=2jld_ROPdOHFmTfJDKpzVZRVE5M!6@9(&Dqnaa!~4=#H}A%jJ5=HFd5S$95If zxt`FxMaH_k#iwi=B8F%!RuWZgVDJ1MS{W0PAl;~Det6tNh+dl|J(5o^1<(eu_|x}O zqjTAS5#$_Az1dUzwq6hRLSy)=v}oV1>u@;OHsPcRRML1gH0DXNFXb#WN_uwSSq)~O zaYX}?Y%4UkDL{|EQtmExS#tANPQ)e$&4)6HH*Ue$(7Y6q^XE|onO*w%%<@j{x8wEb zPaHMPm8n_O0$RS>CGUS9G`3kc&0U$F@`K_52`~QrGe*n!6Sj`cj+ETz#4CbQO)3V* zBe4*g+vtSseK}e)%LRQd9FhVF@q`YitKn~E%#~i&HbumrpH1Ydj!at}$c^urob{dv zSB9r&a>X2g#mA`fcI2SZKH?%dsN*q;emKq6G))NXHOM4iv$Hy0!!TB2=?w-kRjIfah4 zW4mL+gVu))%a7WHLKE*~Csk*rzb%KSxS7dAn%7HXaemJG7J5%T-6$rTqz-bR6eWG1%_44N+JZELL=cRFnHv9j_H#>VzW$;R z(pu1FVW`=*Uij9r%S|3S;*jjtam~p>3!vEfIn>qlqtc|`DN_SeBSTkJIRsvO>SDP} zzfsSLlg6?{rvBsB@8~A4e1cTUisO zos2A%l%y*vWD6?O08D~P9_XLo8a_s9&b(%5Kf7m-h@ zOja|;t*u{T^*EQz>)?yqp0SkG5BQjGEvug<`$*zuE@Md+6&?1V(}`98}0 z@bZD0Q$;)=iU_~rAxEUI=KFg=I(<21tc!ON7vv8JJX5t;B2(FG=OPDnYc@Z8{dg=R z`+jPUJ8dJdi}~uB0b&hD(+IMW2eztl4I9jUUhM0 zRwGwzn)LP4y&FUVNYoYuIeMmuD(HW#;r627B5DO=&DR58=MN=<$cM^*GVGk}CB+FZ zlAu3tj%sMqSWz7%EP!w9LViXQKm3x-IyHKbKn`F$i&HJb+MSZgJ5k=Ob5s1iNsyh_ z+q&0kWWlo%d}U$*WON-`n%2`Byi>3ZEUx|X!;kY8ljiK+UGP|^WYOR~3oGyDI{Kz) ze;Lc=ankB^tp~%yyzm<_Z>Z{1`9TU`LZMc@Oy|#xY1js)R6-O$yj`B{i(J0h!$YS> zOIG(*C<8}JH9a=X!Kqsh$MY_@JIYV5=<7nylg5-g3=V?;N{H1x2L?8({`%6dn01;8 zWKu`lm-{J>SM~~V=)#pFX|eD?`)tU5nnRAIhrmR)!?jZ8tv{0@G!(*yLP_wH!FUDXN8Y$hs zD*RQNwN@WKlSRiLR6ci}$^n~)72wWJQ?96CC@ zUh}EFA~k6R!hchOFa0}sL#Jm-to`+(3ZZcd)2VQSQeJ~1r1M>e(6?Jk^FMnlwZW>O zMT$mFSb@uzKcpFX#nQ&vFCHhnrEoIO|CBo_GSqb6Uwj|;PJY=wEFb+ouDI|g<;=n9 z=@Xtfz=1^_vd{W)2G1kK$EeRFs%v0Ea6K73s0079clZ&8$Mao@G`Fu#a7~*eVEe;7 zd431`UO5i*BBl9@P58&b#6{?PU1DzkXfhs$ z3O9wQK3htB;X$XwOLHx$b%{zBQ5HYi#jd3tAn~ibpDsi1hh>+od@{l${Sws7c3+8O z&tdP&XQC}4)e^*!%q8Tag++$%9@XyAz(wbWragv^&>g^(o5W5bj+S4z?2^!|VO&fA z;)2g{*l%ETm_!h;@yT%*>P;w3mlm5nT-Sh3+`}z0?*8pvZB549>jVYS=MKiJC(6uU zfVfKDNl@W*i$=N=)n^n}%{FzaKNG0q-Dxe?E7+dNW$$Nm-4Y6i{X8kESzaOj%YU_4 z_^!R>5(^LOn(4ptd6CS6PK*(ld

    zW1sl!ntVVlF1W?(z@i>RbD7O;R^Bg!&W=Y z7H|}KdWb!Gg=MwpUB%HTo7@l8-3JF00W3k?iga|AJ@uqm1XL8i)r)ln2h7ElMg~|v zp08#VkDHw%;uT$H9O#wS72FL%*ZM2D-EZq{cy=6QA1e#zLt%97i59B;rj_QN1pkuI zrS1T3Azq;UASvCG@^AsWVV*kMzoLtK7QVy_4VXH-BU{Evg8U3ct|J6H`>b6Nax$s@*kAuszfb_k8oMrMjka!a&DrrM1v z{e#t|0&JU!<1iX+3z>VU2(V1Zb73P=&L&Xj_Nf9^8i#L*3h4_nI@f-LQdR?U6}G7j z#Zk2G9?Am8pBLRUIOj-L3>^79UBv*rTL+@)U1tpKs69pmf|5el+XdngV?;894`g-SpK%-DFYZ3G_$Cb*ln7# zTrN@c*8093B)Y8{EwV0HC&i9}WxAfdl2R++W&Sx{N71+;@<~(^#e+V4f-=^zt=W`% zrwoYkE&scukG`=`<`=FIqYjK;3|@5efACi(UGmf~3?4LlUA&~s(ym7SI5w?P3}VfI zS;~qE#QH}glt02BS^;D|L(SHRGuJqW{z^*xjDE~^0|TYj--MS^OC}M|KMO*|DuMOo z`qiXR5;RX7&#DHVsu73w**6sjy=B7-GBIB67-tWCHZ_5@a1w!$A!JPq7g_yqq+&{G*7asZ(ZCF61lwFCXBPiM^E zLB?FMpF~4qy0g<`@m0%L-F!FTekJnwub!X3%mnHoGFYX7!CpB)m>MtR*n? z6J}qq{qBVe?JKnE{bLgGbhVG&=~WyPr9< zIMJvotG}4Gw$m{CaX+8sU|T=f5AFZG?!lMdknxcKy>zGP+)J{dxGY4;nw}t~XrNiU zo+?G4-L`EsiKJz&69;Rxd7kqW2(HTp52O1RDb(b7?*#*(ySnfTKh1n1ZC1ByV);E4`Cne3sO(q%^w;LN8c86zSCoB`(8$$hT^)9&hjMva}AJt`MSzE*_ z{Rl7n*x2#@uwkEkqI- zPCAURCoI~^pwht9Pa<_2fj5!0d|9D|YwD^P*e|VSpbz(WlFD6t+}PJ^_RYEWJ83Z! z;nv&vb)ta)NvE_?(rk`i0(G+j+~y-jBLL<=_^Ai?-<3S=5*{pGDxas!pf5F|1y2d0 ztPPhu50brhb2G6gTVWh6A&HCF-yO^l->tM5e>b}oY9ix0dcdhk?%k>`)R}EI8tF9P zS*arm5!@A3uUgKlt9!bED=>W6&xtl2UTUzXFc}%w)AKl~o4<8pqLSv@=kn;-MhA>6 z&8v|jsX1HGFq&nIoJs4G?%~y+Qzyww1f2sJPYbpcG*k=4NZk}Mjeh*$Im8+|pCdi4 zAMe@ebJ;9onuTx(ToR5f%U{@C4eFPchJr9Q_@tV>zH>n9(K9kty{0&h9k*zt3epy> zB1FhBN%rzyE66qV=PXJdw+?xA)PRk!hTdQ`-&_udh0WnUbdhw(mtouRqyE;WHMGjh z9sLGlHy20_b|EGSBC90V>us`}G&$i53zE*6FoBXMr#(eo%3Vg$|CxyAViBAMk|+pRoH>F^k(8=hU^)(~@vn2Mqz!|bh?h|Q;Q5l43X@l8ys+}L3W zzn_2S^JAiPRpRZTy|~61cN|LNncpB6r%t#1wBDCRNiSBAcWX^O!xaYwTrBKs*-4Vtc~o zS2JJje#Vh4dLx?(#0~a9_0N`DbHA)LFZg<$~)i7RW~U8 z?yFTL41aMGo_gB$3bW)#RrJ5QDbNXKSlk9WeVAD~Xqh}LP6K8T%#l8nz!ny-0cQi| zhzyz?_U6Tffo)-eLZ{!%U1r!`QfMv`2)Ch29#)$iDoOihvf08ql0Ze-Kv)emVX#|r z&@!Gkvt%0ffeU&i2*PZrLjpyUKtbYfUQJriJ`&Uh48ny*aDr+Ykk~Zbw1hN6qSB{U0xBw(TK+HWBY5zrMZv{Da* z1(lb23k`|?XRT+Wx6m6V2f=c4K*ibKPyiT2_J%nBgRr2Vr9jdR4|1SISXgc@XqgIV zxFJUogam@&hUUn<-C~;xsOvvK>_4gT8X(5ERNjUTZP4jk0$)Rw9!L=mhQHy}2owW? z<>H6Neg)Bg;QhaYU~(Q#?*C4BAM5Km6Y*91%~dA%uPk1mo}c8N*S@m4)_P%b)>;J8ct-G&c!Vky zakQF4e>M7t@RuWo9%Qw2JgxRie+W-#XifHmtSl=MG7>Uh=IyJ% zrHX46O4Bh`=@I0hu@DynptC?q%K%ymo7!ASFRy$OT!e~1L2+foev~-DfJXA9NLTzE z_+N-om62QrVj;>pIY_A(Ol4v41Q6ELAo9F&+aS0w919!{T-O~5RR78gs~$}eOiIpX zMt;(B4Ru{&+1!X(;~;WOj7UruI_9ndIE7d_!2|J;B!7*-Xz6kQa||v-J$zagLjM!~ zCeA$O#W*riE*UfejjV}-c_`!={D>lpBK7Hq_IYvu?iX}TDWznF^aTkG9PDXAh__hl z?4+<}Rra*_6jLCX^)|Jg9h$m7Hhi~B$h<{j4K+W=;2RvW`Y60$O8|;gVAfTbx|rln z4y+*=|G*f=+Qb*&Csp;oHh)6GfyA5oi3M3%iB6b8ik!lLgaquwSyWvyHF&T5(o`PF zhwqi`f|i+DWYj4E#foLSE00+aWuE=aYaR+Cg_FLmpNOw7?xF=3g|tn_Vhq2EqxQ@1 zodk8%jeIqD*pRJE5{p`cCfOeId0i%iD`37JV8MKe>o?c|w&M&zZNm2cKp}bz-b1bH zr5kS>KM`vwy2jfwo@L#qW#0h?hG4OS4J;8`2>vp$kX#8M;=0oQRT6t$%LD`5_Vx^#wLi?hR ztIzSbp+i!D+rm8y*XPxX`+g@|Aa#s2lxtVk$F|*GF?9<)&f#0gdqLr#J=uj{Gdzz? z+1BDAN_|@Kg%~Ro@At~B4Hd?VaFB1vwl+pbvo&AgB9*#>KGxT7bCsX*bQ$MYd|{QF z)*bTJ!GH1M(~c~R*PYwlzawX=Bq@njsg5S4KuARc5KC?Lx^dYz|8nF=6c26@i93;d zO6hsWMbw9DhXd&EH5mjOY*MNiXYc7%gyMq9U6>4e>y`WN8F$^po3&bfgDLs!E8uV|& z@?^t+y+DlK&2~~oOMgJ6N_T)B-XZxlYeM*w+WQ4nTV#qFX|E5Qf+EXzX0X>p>hizj+ivj1~SoT zJDx;H08&-Xlgwy}UsQo#cj!H^j26iqYV(2Ur^JK3y^il?WwDs5qB#kXWhF@D-+@Ap zV8$*?UiC-iDgD1W4aGxPn>jy_sqK=k)U*AwM}~5xVA-F)>7%iR2KB{rO5_BV5`M=H zM8PZtS^s1ln>Kv(Qxs9?|2{}_j+v>g)&fGg4Cyb+q`p zT(^96us@xu$(Pr{Y4briPmF+E-$6K4(nGgV&sgNf3}>RbQG(W5o*7egEM4%tN8S5^ zseHYb@)CyMxr=^?a-~={t(pq~akfl^3sAVkLHU%U1Y|`cr)jOX?gWu;zZOuU@8?p1 zbtO}QwQbm>2&1IjV%$cH888%>+pqVDs$|_gz>i-yGyk_}bdAff( zrD`xpbYAOAcUtSxekICqYX|_*0jPNHkj}&?C6d_fngFK0%ZT+tm zv-~`22mX%oC`gvflS1LG72$@l_B5%joRu+;Fb63r5ZQd+CYriL8xQ~?romsP8>lLN zNM^}VT`p|LG0AI?XM&GidTMyACBfaEa6Q$=E@^|Rd!{ikc-$|m&M4%{ zvXteUIds|OuIIrHn(48pxLv9z#yV;v3PXaZ{n&EE!Wqmu87Ga&G<}DE$sh9HeQqQ# zflF5t!wnoq{+5iy8wi-nFt`>%0vGb&e|+lQwCE?6T$KAGLZX+>c}(HG1j{LDlj^-l z^N>m*_sd$NzrHgM+V=&9Fo))PJ&=Weh$V}*fz;o=p4T{dI%z9aYm8D(IG@*RWOJ6v zX4no>%szr=7}qBWP(Ay7*$dVNtcP{fT`@nT*%{y4)^m!-vjKxP+ex*U0J^NTq)tOa zib&pM>1ipB0v{@8G=*6PP*tr+az(_%8*57tfo2YI4q~NMNd?l0qjD;L&t9^*9 zAqbA&+CrN0gwQzSxSDFAr`3C)NB$%^yxIlLgUiVRQa_}!ESa#SY|rbf&Co+rgDsEyK%T785oi;k!tA8A^{Yc_=uZ9jMQMM5fPv-lrF24FWptwn<7Uac&;OhS%%PwxA+F4<&%`R%WgW5fJK6nl}|O{+&U0g zk=pqXa*K0E2y0W_)A;>ZTnl2JX*QTZPex_)jvG{6lmS`dwwNO%n{gg*?pWN#QM2K9 zzhEfQXfn$RbvF+3G|d`DF8!V;o@9y#D@gdm8MwpllcC(AEBSa36wna)`|_wz-2YCY zbRG768kJy}kwg=OVIIQ&$7No7)6DUpa29^eDau!ldkCuwEM=Im#Z*DOP&a8?mmX0z zbMKi@mcos>K+2?&tgNDK7Ujt1=+v^Z_dZLRmHJL6b3Ok9ews)&9aI_(qDwXDN9enQ96hC zS!yly?X%h$)>!^Eq){L|C;ryze>-APFZ&#WEKoL&PJv1zNP>?}AHPLkp)L9Kx9Sjr zhu^Armna?b4hber1BXe56E&o^r%tLs7*Hb&7}2&rHt1_1VcIk1hOk2DZ4?9ER~DHv z{VxCHC9qWRW8Xjdi!e%x)3&aeUM$zpv~|iRHr?tOd`8C`vDvvh#bn~l6B5rdhk#%k zJ0mkjf}hq}y6%B@VVJGh7B_@no~pb0TR-5F_rY4f!J1L#ic@UU4t>HRcbp=gDPXL( zJ!r-ZCQmcNt6N(w;}lMq#$8`jQ>|(feq&XTK&l70^bVxH%(qAGB$=s+C}Ue!!Iz%rH&gGRS%^rAC8v_c|uDz7ZL(*+D9Fl^0PpA%mV#m2w%Wi5~884d8 zFqI4?4B}RT?sU3Vzp4##<}eS>JQcp%H}yhJite3Fi0dJSRlP9nNLQXIiRh6I3ndPy%2DnW(+A1l#1=Jg6AR;%EM zwZa8=0#i%4p*9K3m!Et6vGDH;dYsz0xhh8?4Lrw-*;5|3oDv{!uf2R|)S z%*tYzbA*BGdjAwnjFPeSk8*9XG<|ON>&=`_*@|19zV=vAw;rN;H}Z0=LP<@d+&gL% zdYKK*E%JI7NsB(X8LQ}LkB+1e3-C-Cw1}4YEc$1eVpoxJF%+vn6Uej?NYN5Ypms6d zdlIf3s&N+0#_S;qO?Dsfe$zhiV*!^-x~Wk9USI=H4MDujIud*cjs7CJ`4SK%X=LhE z406ji6`*#O(@T1d4|-(3{=VZzBcuC7HpXV2x76#BBx3mB_DxdB&(HU6^sw^P^=bEC z2KJS)aAT?#tqSpZC}2HaUY2>@5PVKT=9F`X>gLyFWEv&qDctz%#oydqxU~L((Du8< zI5lY|Gs4zn@5Z*ZaJl7uP4C$**hlF&+Y?F`YmvuOfym|KbNzF-O2FQbmu~cMcWKwo zdG%@HX&N$WJNn#o1z#pYUeDJ z9#se(El=UQ+;EWMB=fbx9o_WeCFYG-D;hPp)VnOW-^$uAX9M@-U{*gBpHUnsDvtk* zHl#gLM|UHf-w4i$R{EatL+`iuq>p4{2CqfX3T9Kp{@cfS4_nu*rx)K>RPZPpLF?d; zDm}`(L(uwjJAj{2r}4=Qsr^TmI=+oDKGRbq{RS4ihvE;?vq-k8 zztue_e{H{U5c@&q&d)A4|Nbj&)G2@9%Nw2<-Q>Nt(8f};KhNRHBu?Zz#wrxjZP~J@ z+22{|-E`vaAVGhz+;yjB_Zc+(YRvIeZRwY1&fk>&^Bd6Y3N!BucXqQ>gSSQ!`))P; z3R$eo_OUw%@k-0#@0tbsJvCgVSMaxKVTX3wzZNqjYlf1(qG)*E6A{+Nz+3x4+;^o- zsc4818_fHs>o;y!;5;{;OfY$2-VNav3cMFH&dhDhL1pJ#T*tUtt=uX|@J$Yiv(zhyrl zs0t@a1pPuePc;#X6HR}bQe)|DIPu>$e0e;&E4p=9_g8$JUi(q-5OJraxa38S=RNKv zTlA^$vOW9mHoSxAn(ShyGK~)#xx>cyfs?fR@QD-9?`&dzJW^Oc0oO#dq>X>QFvnBV zmY;h?cVI=lJPgrCGV*I9iu{Om<}i&gH@>CePak;H7MpwR9IR(EYUjg8=lpnW-;8hQ zN60mELHqH-;GodonM=+`6vHc3G)*+LX1^Ks2q!>sjU==6B^D=}&d(-((;aogYJ1J0 ziDdxb3;NeuHt#KP6R*YQ_i~>+zT-Vs5N`sO^sEUJ${M~&A3nIyH!-MGV{I7Pi~%MD zp!bU`5ud!buGLO=!jw7$yqtS>m$zE3IAd`Pg~PbpmQt0LZL${N7XHn98Iw&MDj2K| zyJkJRcsx8a2|h18uG%tcj`OGFe$I?zXb}WN1J3!^qL|AO1G;Q^pFd^X|23XfZg!Cz zX8Gd=Ys`HwoEnJ>eCtt^V5zG_fLFH zo?1w$lG?y2_(=+@Bk)>81YY&InKSv%>nMC9KUXgZHQRidWJ}h-jtU!rK~P zvvBwEaeLVk61?^V>MfvM1}StXC#<%}9!TzNe6TCGL_6|yKMEQXDQAn>#1zPW$Pe!2 zS5@=m7q{u3qC23YcbFxNd&i@|>TJoot5<-vjG1=``x@;yH06%7R9gprWd0IZ*j?u_y5efNk?XX)Rt;fr0>{5OhN4?>Gx*jSRR`%$` z3QMARYM>xO{nX7@frmrlHyxr%WN?P%nlqIKEC1T`CzEh`@S+8^#LoW5T1x|L3t|@7 z<3N#hWvAbEs~<;^{!YP-bfd5ZVh<&|^$)|rjBtz31M?r)OU&=k14m!J-Wp#afmcTR z1&Q|+3f$nqjaI>K=u$t={;t@T4o`%rhE5$wmPp@vMm&9YPXXRlLSMn}<9(N_zaK1pxfg1C%B!-o3ED~DIX(VcxhSaC z-l7)?#u_oHDz)|Nq$?fb_*99v6qX0S6XkXP3ZpI{U@c(y!pG-e@n?;3rMdhS1ZO6J z{J*_mSYBSJng{4RJU=HV4=;4d14Q~?^Th*{2+PCqpEf5EJ|`y%n~ar{vkN%~ANT)j zdGc{XKZ<}Dfhf&k`z3aa)<>ore7s@>R>&uRa&1S)!KjL4iSl^CKn zvAi7h+Ex6R+;tchFr{?-cXjw8%=keM<-idQWZC>`06PvL4nZB6OP2xVO}7{2^Y6~c z>4{Jb36-+mogEY3xmvyVaLaN7t5blCwxC?=W&& z+pse&5K20X{IjjsDYb_sQn>Ax+YOu%oBap$O3{Xy-v)thDC?U!R>yBoPVbnH-t;$h zhct$#u;wFK2l^72Nj_eM8+~qOrf-Td6bkdwR(co$8~!HjUnQDVRxfa*J#REBA!u-qM@UP}%}sL$dEg{< zn%`|c-=Oh3rgQb-LHTm$X33l>()oS3P6i)G&sa~O{!cShl~8;K?Ay?Lg0PcdPl#|? z%#m^!Dd*OaOq1km+&`-|UZSDyRl6fwBf%G{$xjNeBM%lLw|N4ts3EY@N)t`rw~W>X zSqR@~y-NPCIn?^VSEYnLz^eQ3=rlg~I<53qeQ4_G@6^vSD@Ji-nM-yx7ClC`_IT`< ze4ch|WV~+AJEozgx;Lh`a}^@=0P+hcmLXvBzg5ErwetZ{0KEJLC~Rt0US{N+y!jx}$n}Idcx8Clc{nAdBzXlSx%s8p zrNy~<>W`FPh!Xunx617bBKCl47_?+LR%x=GgXYuSvS z1hfgeVHIv5EC-i;L!{jhOb7t&+a(9<9aU#phm?j{M;~Cu>PRn0xw;99<(zwdaCX_QEt6>&y%MB*RA<>ZQQdB%GX3~7I z29T+=h61L$rBf5`=yO!wqlqHbbuEpg<-jL5aXOpr4#CxlFK-fgBYsq-%$5=h^XIhM z>CgAEG8-5=l^u*(Y!vGG^lVHN12Q`sT2Gv?T7Rl9JN8brh@F0&sCt`a z8Sqlxrb%_9KEFneluMhhN$+-mNo}P_Uqvf+ti|IB$n+6ZF=Zj-Gy${;aBr3r`Nse$ yxNeN2wNNRzO{_ZrIV!GIH+reV&i(aW-e%eYbN~R6pmMPb@NlBg&`2xEp!^TyAw*;V delta 26796 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 diff --git a/doc/designs/ipopt_outer_bound_certificate.tex b/doc/designs/ipopt_outer_bound_certificate.tex index 34193bc14..03010dbd3 100644 --- a/doc/designs/ipopt_outer_bound_certificate.tex +++ b/doc/designs/ipopt_outer_bound_certificate.tex @@ -307,6 +307,35 @@ \section{Practical consequences} points and therefore only raises $\qhat_s$ --- is the most effective way to improve the bound. +\begin{remark}[Admissible tightenings of the box]\label{rem:boxtighten} +The box in \eqref{eq:closed} need not be the one the model was written with, and +the implementation shrinks it by two different mechanisms. The condition under +which this is legitimate is not that a smaller box removes points --- that +argument shows the bound gets tighter, which is the direction that could break +it --- but the following. Let $x^{*}$ be an optimal solution of the full +problem. If $x^{*} \in B_s$ for every $s$, then for each $s$ +\[ + \qhat_s \;\le\; \inf_{v \in B_s} \varphi_s(v) \;\le\; \varphi_s(x^{*}) + \;\le\; f_s(x^{*}) + \W_s^{\top} x^{*}, +\] +the last step because $\lambda \ge 0$, $g_s(x^{*}) \le 0$ and $h_s(x^{*}) = 0$, +and Proposition~\ref{prop:agg} goes through unchanged. The requirement is +therefore that \emph{every $B_s$ contain one common optimal solution of the full +problem}; preserving a different optimiser in each scenario does not suffice, +since the weighted sum telescopes only at a single $x^{*}$. + +Two sufficient conditions are used. Feasibility-based bounds tightening +satisfies the requirement in the strong form: it removes no point satisfying the +constraints of subproblem $s$, so $B_s$ retains every feasible point of +\eqref{eq:sub} and in particular $x^{*}$, with no appeal to optimality. +Optimality-based tightening --- reduced-cost fixing, which does discard feasible +points --- satisfies only the weak form, and relies on its own contract that +some optimal solution survives, together with the fact that the same bounds are +applied to every scenario, so that the surviving solution is common to all of +them. A tightening that guarantees neither is not admissible, and no check in +the implementation can detect that. +\end{remark} + \paragraph{Unbounded variables.} If $l_i = -\infty$ and $\partial_i \varphi_s(\vhat) > 0$, or $u_i = +\infty$ and $\partial_i \varphi_s(\vhat) < 0$, the corresponding term in \eqref{eq:closed} is @@ -450,7 +479,8 @@ \section{Correspondence with the implementation} $\varphi_s$ in \eqref{eq:phi} & \texttt{\_lagrangian\_expression} \\ $\qhat_s$ in \eqref{eq:qhat} & \texttt{certified\_lower\_bound} \\ decidable hypotheses & \texttt{check\_model\_is\_certifiable} \\ -box tightening & \texttt{unbounded\_variables} \\ +box tightening, strong form & \texttt{unbounded\_variables} (\texttt{fbbt}) \\ +box tightening, weak form & \texttt{receive\_nonant\_bounds} \\ Proposition~\ref{prop:agg} sum & \texttt{SPOpt.Ebound} \\ Remark~\ref{rem:mixed} safeguard & a \texttt{None} bound, propagated collectively \\ Remark~\ref{rem:rounding} cushion & \texttt{eps\_rel}, \texttt{--ipopt-outer-bound-cushion} \\ diff --git a/doc/designs/ipopt_outer_bound_design.md b/doc/designs/ipopt_outer_bound_design.md index 1a188e18b..346e2a9c0 100644 --- a/doc/designs/ipopt_outer_bound_design.md +++ b/doc/designs/ipopt_outer_bound_design.md @@ -198,6 +198,62 @@ converged first solve. **The cylinder costs the same as the existing Lagrangian does. The re-solve retains value only when the first solve is sloppy, so it becomes an opt-in tightening pass (Phase 4) rather than the mechanism. +### 3.6 Which tightenings of the box are admissible + +The box is not fixed. Two separate mechanisms shrink it, they shrink it for different +reasons, and they are **not** sound for the same reason — which is worth stating, +because the tempting one-line justification ("tightening the box only removes points, +and fewer points can only raise an infimum") is an argument that the bound gets +*tighter*, not an argument that it stays *valid*. Raising `q̂_s` is exactly the +direction that could break it. + +What the aggregate bound actually needs is easy to state. Let `x*` be an optimal +nonanticipative solution of the full problem. For each scenario `s`, if `x* ∈ B_s` +then + +``` + q̂_s ≤ inf_{v ∈ B_s} φ_s(v) ≤ φ_s(x*) ≤ f_s(x*) + W_sᵀx* +``` + +— the last step because `λ ≥ 0`, `g_s(x*) ≤ 0` and `h_s(x*) = 0` — and summing with +weights `p_s` under `Σ_s p_s W_s = 0` gives `Σ_s p_s q̂_s ≤ OPT`, which is §8. So the +requirement on the boxes is precisely: + +> **every `B_s` must contain one common optimal solution of the full problem.** + +Note "common": preserving a *different* optimizer in each scenario would not do, since +the sum telescopes only at a single `x*`. + +**fbbt (setup, once).** `unbounded_variables(s, do_fbbt=True)` runs feasibility-based +bounds tightening before any certificate is computed. This satisfies the requirement +in its strong form: fbbt removes no point that satisfies the scenario's constraints, +so `B_s` still contains *every* feasible point of subproblem `s`, `x*` among them. No +appeal to optimality is needed, which is why this one is safe to describe as "shrinks +`B` without removing a feasible point". + +**The nonant-bounds channel (every iteration).** `receive_nonant_bounds()` narrows the +nonanticipative variables' bounds from `Field.NONANT_LOWER/UPPER_BOUNDS`, and in the +current code base only `reduced_costs_spoke` sends that field. Reduced-cost fixing is +*optimality*-based: it discards points that are provably no better than an incumbent, +which does remove feasible points. It therefore does **not** satisfy the strong form, +and the weak form is what carries it — its contract is that at least one optimal +solution survives, and because the bounds are broadcast and applied identically to +every scenario's nonants, the solution that survives is the same one everywhere. That +is the "common `x*`" the requirement asks for. + +Two practical notes. First, this is close to moot today: reduced-cost fixing wants +discrete variables, which this cylinder rejects as a hard error at setup, so in +practice the field is not being sent to it. Second, fbbt is deliberately not re-run +after nonant bounds arrive. That leaves tightness on the table rather than risking +anything — re-running it would still be sound, since anything fbbt infers from +constraints and bounds that all hold at `x*` also holds at `x*` — but the setup-time +pass is where the unbounded-variable warning in §6.1 belongs, and repeating it every +iteration would buy little. + +**Anything else that narrows the box needs one of these two arguments made for it.** +A tightening that preserves neither all feasible points nor a common optimum breaks the +bound, and nothing in the code can detect that. + ## 4. Getting the gradient `∇φ_s(v̂)` comes from Pyomo's reverse-mode differentiation: diff --git a/mpisppy/cylinders/ipopt_outer_bound.py b/mpisppy/cylinders/ipopt_outer_bound.py index b4678d557..9cd0961b5 100644 --- a/mpisppy/cylinders/ipopt_outer_bound.py +++ b/mpisppy/cylinders/ipopt_outer_bound.py @@ -173,6 +173,21 @@ def _nonants_newly_fixed(self): def _solve_and_certify(self, warmstart=sputils.WarmstartStatus.PRIOR_SOLUTION): """Solve every subproblem, then replace the solver's (useless) bound with the certificate. Returns the expected outer bound, or None.""" + # This shrinks the box the certificate minimizes over, so it needs an + # argument. Note the tempting one -- "a smaller box removes points, and + # fewer points can only raise an infimum" -- is an argument that the + # bound gets TIGHTER, which is precisely the direction that could break + # it. What is actually needed is that every scenario's box still holds + # one COMMON optimal solution x* of the full problem: then the + # certificate is below phi_s(x*) <= f_s(x*) + W_s'x* for each s, and the + # p-weighted sum is below OPT. The fbbt done at setup gives this the + # easy way, by removing no feasible point at all. This channel does not + # -- only reduced_costs_spoke sends it, and reduced-cost fixing does + # discard feasible points -- so it rests on that spoke's own contract + # that an optimal solution survives, plus the fact that the bounds are + # broadcast and applied identically to every scenario, which is what + # makes the surviving solution common rather than per-scenario. A + # sender that guarantees neither would break the bound silently. self.receive_nonant_bounds() verbose = self.opt.options['verbose'] teeme = self.opt.options.get('tee-rank0-solves', False)