From 2caf6f16d535477ccccbf4f0ebe47edceeddab78 Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Wed, 28 May 2008 11:00:26 +0000 Subject: [PATCH] dama restarted --- .../dama/dama/Q_is_orded_divisble_group.ma | 276 ---------- helm/software/matita/contribs/dama/dama/TODO | 4 - .../dama/dama/constructive_connectives.ma | 53 -- .../constructive_higher_order_relations.ma | 51 -- .../matita/contribs/dama/dama/depends | 38 -- .../contribs/dama/dama/divisible_group.ma | 99 ---- .../matita/contribs/dama/dama/doc/apal.pdf | Bin 0 -> 180164 bytes .../matita/contribs/dama/dama/excess.ma | 279 ---------- .../matita/contribs/dama/dama/group.ma | 220 -------- .../matita/contribs/dama/dama/infsup.ma | 53 -- .../matita/contribs/dama/dama/lattice.ma | 484 ------------------ .../matita/contribs/dama/dama/limit.ma | 67 --- .../contribs/dama/dama/metric_lattice.ma | 117 ----- .../matita/contribs/dama/dama/metric_space.ma | 46 -- .../dama/dama/ordered_divisible_group.ma | 75 --- .../contribs/dama/dama/ordered_group.ma | 328 ------------ .../contribs/dama/dama/premetric_lattice.ma | 70 --- .../contribs/dama/dama/prevalued_lattice.ma | 243 --------- .../matita/contribs/dama/dama/sandwich.ma | 81 --- .../contribs/dama/dama/sandwich_corollary.ma | 39 -- .../matita/contribs/dama/dama/sequence.ma | 21 - .../matita/contribs/dama/dama/tend.ma | 28 - 22 files changed, 2672 deletions(-) delete mode 100644 helm/software/matita/contribs/dama/dama/Q_is_orded_divisble_group.ma delete mode 100644 helm/software/matita/contribs/dama/dama/TODO delete mode 100644 helm/software/matita/contribs/dama/dama/constructive_connectives.ma delete mode 100644 helm/software/matita/contribs/dama/dama/constructive_higher_order_relations.ma delete mode 100644 helm/software/matita/contribs/dama/dama/divisible_group.ma create mode 100644 helm/software/matita/contribs/dama/dama/doc/apal.pdf delete mode 100644 helm/software/matita/contribs/dama/dama/excess.ma delete mode 100644 helm/software/matita/contribs/dama/dama/group.ma delete mode 100644 helm/software/matita/contribs/dama/dama/infsup.ma delete mode 100644 helm/software/matita/contribs/dama/dama/lattice.ma delete mode 100644 helm/software/matita/contribs/dama/dama/limit.ma delete mode 100644 helm/software/matita/contribs/dama/dama/metric_lattice.ma delete mode 100644 helm/software/matita/contribs/dama/dama/metric_space.ma delete mode 100644 helm/software/matita/contribs/dama/dama/ordered_divisible_group.ma delete mode 100644 helm/software/matita/contribs/dama/dama/ordered_group.ma delete mode 100644 helm/software/matita/contribs/dama/dama/premetric_lattice.ma delete mode 100644 helm/software/matita/contribs/dama/dama/prevalued_lattice.ma delete mode 100644 helm/software/matita/contribs/dama/dama/sandwich.ma delete mode 100644 helm/software/matita/contribs/dama/dama/sandwich_corollary.ma delete mode 100644 helm/software/matita/contribs/dama/dama/sequence.ma delete mode 100644 helm/software/matita/contribs/dama/dama/tend.ma diff --git a/helm/software/matita/contribs/dama/dama/Q_is_orded_divisble_group.ma b/helm/software/matita/contribs/dama/dama/Q_is_orded_divisble_group.ma deleted file mode 100644 index a0b646f33..000000000 --- a/helm/software/matita/contribs/dama/dama/Q_is_orded_divisble_group.ma +++ /dev/null @@ -1,276 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "Q/q.ma". -include "ordered_divisible_group.ma". - -definition strong_decidable ≝ - λA:Prop.A ∨ ¬ A. - -theorem strong_decidable_to_Not_Not_eq: - ∀T:Type.∀eq: T → T → Prop.∀x,y:T. - strong_decidable (x=y) → ¬x≠y → x=y. - intros; - cases s; - [ assumption - | elim (H H1) - ] -qed. - -definition apartness_of_strong_decidable: - ∀T:Type.(∀x,y:T.strong_decidable (x=y)) → apartness. - intros; - constructor 1; - [ apply T - | apply (λx,y:T.x ≠ y); - | simplify; - intros 2; - apply (H (refl_eq ??)); - | simplify; - intros 4; - apply H; - symmetry; - assumption - | simplify; - intros; - elim (f x z); - [ elim (f z y); - [ elim H; - transitivity z; - assumption - | right; - assumption - ] - | left; - assumption - ] - ] -qed. - -theorem strong_decidable_to_strong_ext: - ∀T:Type.∀sd:∀x,y:T.strong_decidable (x=y). - ∀op:T→T. strong_ext (apartness_of_strong_decidable ? sd) op. - intros 6; - intro; - apply a; - apply eq_f; - assumption; -qed. - -theorem strong_decidable_to_transitive_to_cotransitive: - ∀T:Type.∀le:T→T→Prop.(∀x,y:T.strong_decidable (le x y)) → - transitive ? le → cotransitive ? (λx,y.¬ (le x y)). - intros; - whd; - simplify; - intros; - elim (f x z); - [ elim (f z y); - [ elim H; - apply (t ? z); - assumption - | right; - assumption - ] - | left; - assumption - ] -qed. - -theorem reflexive_to_coreflexive: - ∀T:Type.∀le:T→T→Prop.reflexive ? le → coreflexive ? (λx,y.¬(le x y)). - intros; - unfold; - simplify; - intros 2; - apply H1; - apply H; -qed. - -definition ordered_set_of_strong_decidable: - ∀T:Type.∀le:T→T→Prop.(∀x,y:T.strong_decidable (le x y)) → - transitive ? le → reflexive ? le → excess. - intros; - constructor 1; - [ constructor 1; - [ constructor 1; - [ constructor 1; - [ apply T - | apply (λx,y.¬(le x y)); - | apply reflexive_to_coreflexive; - assumption - | apply strong_decidable_to_transitive_to_cotransitive; - assumption] - no ported to duality - ] -qed. - -definition abelian_group_of_strong_decidable: - ∀T:Type.∀plus:T→T→T.∀zero:T.∀opp:T→T. - (∀x,y:T.strong_decidable (x=y)) → - associative ? plus (eq T) → - commutative ? plus (eq T) → - (∀x:T. plus zero x = x) → - (∀x:T. plus (opp x) x = zero) → - abelian_group. - intros; - constructor 1; - [apply (apartness_of_strong_decidable ? f);] - try assumption; - [ change with (associative ? plus (λx,y:T.¬x≠y)); - simplify; - intros; - intro; - apply H2; - apply a; - | intros 2; - intro; - apply a1; - apply c; - | intro; - intro; - apply a1; - apply H - | intro; - intro; - apply a1; - apply H1 - | intros; - apply strong_decidable_to_strong_ext; - assumption - ] -qed. - -definition left_neutral ≝ λC:Type.λop.λe:C. ∀x:C. op e x = x. -definition left_inverse ≝ λC:Type.λop.λe:C.λinv:C→C. ∀x:C. op (inv x) x = e. - -record nabelian_group : Type ≝ - { ncarr:> Type; - nplus: ncarr → ncarr → ncarr; - nzero: ncarr; - nopp: ncarr → ncarr; - nplus_assoc: associative ? nplus (eq ncarr); - nplus_comm: commutative ? nplus (eq ncarr); - nzero_neutral: left_neutral ? nplus nzero; - nopp_inverse: left_inverse ? nplus nzero nopp - }. - -definition abelian_group_of_nabelian_group: - ∀G:nabelian_group.(∀x,y:G.strong_decidable (x=y)) → abelian_group. - intros; - apply abelian_group_of_strong_decidable; - [2: apply (nplus G) - | skip - | apply (nzero G) - | apply (nopp G) - | assumption - | apply nplus_assoc; - | apply nplus_comm; - | apply nzero_neutral; - | apply nopp_inverse - ] -qed. - -definition Z_abelian_group: abelian_group. - apply abelian_group_of_nabelian_group; - [ constructor 1; - [ apply Z - | apply Zplus - | apply OZ - | apply Zopp - | whd; - intros; - symmetry; - apply associative_Zplus - | apply sym_Zplus - | intro; - reflexivity - | intro; - rewrite > sym_Zplus; - apply Zplus_Zopp; - ] - | simplify; - intros; - unfold; - generalize in match (eqZb_to_Prop x y); - elim (eqZb x y); - simplify in H; - [ left ; assumption - | right; assumption - ] - ] -qed. - -record nordered_set: Type ≝ - { nos_carr:> Type; - nos_le: nos_carr → nos_carr → Prop; - nos_reflexive: reflexive ? nos_le; - nos_transitive: transitive ? nos_le - }. - -definition excess_of_nordered_group: - ∀O:nordered_set.(∀x,y:O. strong_decidable (nos_le ? x y)) → excess. - intros; - constructor 1; - [ apply (nos_carr O) - | apply (λx,y.¬(nos_le ? x y)) - | apply reflexive_to_coreflexive; - apply nos_reflexive - | apply strong_decidable_to_transitive_to_cotransitive; - [ assumption - | apply nos_transitive - ] - ] -qed. - -lemma non_deve_stare_qui: reflexive ? Zle. - intro; - elim x; - [ exact I - |2,3: simplify; - apply le_n; - ] -qed. - -axiom non_deve_stare_qui3: ∀x,y:Z. x < y → x ≤ y. - -axiom non_deve_stare_qui4: ∀x,y:Z. x < y → y ≰ x. - -definition Z_excess: excess. - apply excess_of_nordered_group; - [ constructor 1; - [ apply Z - | apply Zle - | apply non_deve_stare_qui - | apply transitive_Zle - ] - | simplify; - intros; - unfold; - generalize in match (Z_compare_to_Prop x y); - cases (Z_compare x y); simplify; intro; - [ left; - apply non_deve_stare_qui3; - assumption - | left; - rewrite > H; - apply non_deve_stare_qui - | right; - apply non_deve_stare_qui4; - assumption - ] - ] -qed. \ No newline at end of file diff --git a/helm/software/matita/contribs/dama/dama/TODO b/helm/software/matita/contribs/dama/dama/TODO deleted file mode 100644 index 353329bea..000000000 --- a/helm/software/matita/contribs/dama/dama/TODO +++ /dev/null @@ -1,4 +0,0 @@ -changing file resets the display-notation ref, but not the GUI tick -mettere una maction in tutti i body (ma forse non basta) -la visualizzazione dellea notazione se viene disttivata e poi se ne definisce una... la rende causa -il fatto che disabilitarla significa rimuovere quelle definite fino ad ora, non disabilitarla in senso proprio. diff --git a/helm/software/matita/contribs/dama/dama/constructive_connectives.ma b/helm/software/matita/contribs/dama/dama/constructive_connectives.ma deleted file mode 100644 index 78e2ec571..000000000 --- a/helm/software/matita/contribs/dama/dama/constructive_connectives.ma +++ /dev/null @@ -1,53 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "logic/connectives.ma". - -inductive Or (A,B:Type) : Type ≝ - Left : A → Or A B - | Right : B → Or A B. - -interpretation "constructive or" 'or x y = - (cic:/matita/constructive_connectives/Or.ind#xpointer(1/1) x y). - -inductive And (A,B:Type) : Type ≝ - | Conj : A → B → And A B. - -interpretation "constructive and" 'and x y = - (cic:/matita/constructive_connectives/And.ind#xpointer(1/1) x y). - -inductive exT (A:Type) (P:A→Type) : Type ≝ - ex_introT: ∀w:A. P w → exT A P. - -inductive ex (A:Type) (P:A→Prop) : Type ≝ - ex_intro: ∀w:A. P w → ex A P. - -(* -notation < "hvbox(Σ ident i opt (: ty) break . p)" - right associative with precedence 20 -for @{ 'sigma ${default - @{\lambda ${ident i} : $ty. $p)} - @{\lambda ${ident i} . $p}}}. -*) - -interpretation "constructive exists" 'exists \eta.x = - (cic:/matita/constructive_connectives/ex.ind#xpointer(1/1) _ x). -interpretation "constructive exists (Type)" 'exists \eta.x = - (cic:/matita/constructive_connectives/exT.ind#xpointer(1/1) _ x). - -alias id "False" = "cic:/matita/logic/connectives/False.ind#xpointer(1/1)". -definition Not ≝ λx:Type.x → False. - -interpretation "constructive not" 'not x = - (cic:/matita/constructive_connectives/Not.con x). diff --git a/helm/software/matita/contribs/dama/dama/constructive_higher_order_relations.ma b/helm/software/matita/contribs/dama/dama/constructive_higher_order_relations.ma deleted file mode 100644 index 8d195396c..000000000 --- a/helm/software/matita/contribs/dama/dama/constructive_higher_order_relations.ma +++ /dev/null @@ -1,51 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "constructive_connectives.ma". -include "higher_order_defs/relations.ma". - -definition cotransitive ≝ - λC:Type.λlt:C→C→Type.∀x,y,z:C. lt x y → lt x z ∨ lt z y. - -definition coreflexive ≝ λC:Type.λlt:C→C→Type. ∀x:C. ¬ (lt x x). - -definition antisymmetric ≝ - λC:Type.λle:C→C→Type.λeq:C→C→Type.∀x,y:C.le x y → le y x → eq x y. - -definition symmetric ≝ - λC:Type.λle:C→C→Type.∀x,y:C.le x y → le y x. - -definition transitive ≝ - λC:Type.λle:C→C→Type.∀x,y,z:C.le x y → le y z → le x z. - -definition associative ≝ - λC:Type.λop:C→C→C.λeq:C→C→Type.∀x,y,z. eq (op x (op y z)) (op (op x y) z). - -definition commutative ≝ - λC:Type.λop:C→C→C.λeq:C→C→Type.∀x,y. eq (op x y) (op y x). - -alias id "antisymmetric" = "cic:/matita/higher_order_defs/relations/antisymmetric.con". -theorem antisimmetric_to_cotransitive_to_transitive: - ∀C:Type.∀le:C→C→Prop. antisymmetric ? le → cotransitive ? le → transitive ? le. -intros (T f Af cT); unfold transitive; intros (x y z fxy fyz); -lapply (cT ??z fxy) as H; cases H; [assumption] cases (Af ? ? fyz H1); -qed. - -lemma Or_symmetric: symmetric ? Or. -unfold; intros (x y H); cases H; [right|left] assumption; -qed. - - diff --git a/helm/software/matita/contribs/dama/dama/depends b/helm/software/matita/contribs/dama/dama/depends index dcbfcc6f0..e69de29bb 100644 --- a/helm/software/matita/contribs/dama/dama/depends +++ b/helm/software/matita/contribs/dama/dama/depends @@ -1,38 +0,0 @@ -metric_lattice.ma excess.ma lattice.ma metric_space.ma -metric_space.ma ordered_divisible_group.ma -sandwich.ma metric_lattice.ma nat/orders.ma nat/plus.ma tend.ma -premetric_lattice.ma lattice.ma metric_space.ma -ordered_group.ma group.ma -divisible_group.ma group.ma nat/orders.ma -ordered_divisible_group.ma divisible_group.ma nat/orders.ma nat/times.ma ordered_group.ma -sequence.ma excess.ma -constructive_connectives.ma logic/connectives.ma -group.ma excess.ma -prevalued_lattice.ma ordered_group.ma -excess.ma constructive_connectives.ma constructive_higher_order_relations.ma higher_order_defs/relations.ma nat/plus.ma -sandwich_corollary.ma sandwich.ma -Q_is_orded_divisble_group.ma Q/q.ma ordered_divisible_group.ma -limit.ma excess.ma infsup.ma metric_lattice.ma tend.ma -lattice.ma excess.ma -tend.ma metric_space.ma nat/orders.ma sequence.ma -constructive_higher_order_relations.ma constructive_connectives.ma higher_order_defs/relations.ma -infsup.ma excess.ma sequence.ma -constructive_pointfree/lebesgue.ma constructive_connectives.ma metric_lattice.ma sequence.ma -classical_pointwise/topology.ma classical_pointwise/sets.ma -classical_pointwise/sigma_algebra.ma classical_pointwise/topology.ma -classical_pointwise/sets.ma logic/connectives.ma nat/nat.ma -classical_pointfree/ordered_sets.ma excess.ma -classical_pointfree/ordered_sets2.ma classical_pointfree/ordered_sets.ma -attic/fields.ma attic/rings.ma -attic/reals.ma attic/ordered_fields_ch0.ma -attic/integration_algebras.ma attic/vector_spaces.ma lattice.ma -attic/vector_spaces.ma attic/reals.ma -attic/rings.ma group.ma -attic/ordered_fields_ch0.ma group.ma attic/fields.ma ordered_group.ma -Q/q.ma -higher_order_defs/relations.ma -logic/connectives.ma -nat/nat.ma -nat/orders.ma -nat/plus.ma -nat/times.ma diff --git a/helm/software/matita/contribs/dama/dama/divisible_group.ma b/helm/software/matita/contribs/dama/dama/divisible_group.ma deleted file mode 100644 index 3a79b11bb..000000000 --- a/helm/software/matita/contribs/dama/dama/divisible_group.ma +++ /dev/null @@ -1,99 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "nat/orders.ma". -include "group.ma". - -let rec gpow (G : abelian_group) (x : G) (n : nat) on n : G ≝ - match n with [ O ⇒ 0 | S m ⇒ x + gpow ? x m]. - -interpretation "additive abelian group pow" 'times n x = - (cic:/matita/divisible_group/gpow.con _ x n). - -record dgroup : Type ≝ { - dg_carr:> abelian_group; - dg_prop: ∀x:dg_carr.∀n:nat.∃y.S n * y ≈ x -}. - -lemma divide: ∀G:dgroup.G → nat → G. -intros (G x n); cases (dg_prop G x n); apply w; -qed. - -interpretation "divisible group divide" 'divide x n = - (cic:/matita/divisible_group/divide.con _ x n). - -lemma divide_divides: - ∀G:dgroup.∀x:G.∀n. S n * (x / n) ≈ x. -intro G; cases G; unfold divide; intros (x n); simplify; -cases (f x n); simplify; exact H; -qed. - -lemma feq_mul: ∀G:dgroup.∀x,y:G.∀n.x≈y → n * x ≈ n * y. -intros (G x y n H); elim n; [apply eq_reflexive] -simplify; apply (Eq≈ (x + (n1 * y)) H1); -apply (Eq≈ (y+n1*y) H (eq_reflexive ??)); -qed. - -lemma div1: ∀G:dgroup.∀x:G.x/O ≈ x. -intro G; cases G; unfold divide; intros; simplify; -cases (f x O); simplify; simplify in H; intro; apply H; -apply (Ap≪ ? (plus_comm ???)); -apply (Ap≪ w (zero_neutral ??)); assumption; -qed. - -lemma apmul_ap: ∀G:dgroup.∀x,y:G.∀n.S n * x # S n * y → x # y. -intros 4 (G x y n); elim n; [2: - simplify in a; - cases (applus ????? a); [assumption] - apply f; assumption;] -apply (plus_cancr_ap ??? 0); assumption; -qed. - -lemma plusmul: ∀G:dgroup.∀x,y:G.∀n.n * (x+y) ≈ n * x + n * y. -intros (G x y n); elim n; [ - simplify; apply (Eq≈ 0 ? (zero_neutral ? 0)); apply eq_reflexive] -simplify; apply eq_sym; apply (Eq≈ (x+y+(n1*x+n1*y))); [ - apply (Eq≈ (x+(n1*x+(y+(n1*y))))); [ - apply eq_sym; apply plus_assoc;] - apply (Eq≈ (x+((n1*x+y+(n1*y))))); [ - apply feq_plusl; apply plus_assoc;] - apply (Eq≈ (x+(y+n1*x+n1*y))); [ - apply feq_plusl; apply feq_plusr; apply plus_comm;] - apply (Eq≈ (x+(y+(n1*x+n1*y)))); [ - apply feq_plusl; apply eq_sym; apply plus_assoc;] - apply plus_assoc;] -apply feq_plusl; apply eq_sym; assumption; -qed. - -lemma mulzero: ∀G:dgroup.∀n.n*0 ≈ 0. [2: apply dg_carr; apply G] -intros; elim n; [simplify; apply eq_reflexive] -simplify; apply (Eq≈ ? (zero_neutral ??)); assumption; -qed. - -let rec gpowS (G : abelian_group) (x : G) (n : nat) on n : G ≝ - match n with [ O ⇒ x | S m ⇒ gpowS ? x m + x]. - -lemma gpowS_gpow: ∀G:dgroup.∀e:G.∀n. S n * e ≈ gpowS ? e n. -intros (G e n); elim n; simplify; [ - apply (Eq≈ ? (plus_comm ???));apply zero_neutral] -apply (Eq≈ ?? (plus_comm ???)); -apply (Eq≈ (e+S n1*e) ? H); clear H; simplify; apply eq_reflexive; -qed. - -lemma divpow: ∀G:dgroup.∀e:G.∀n. e ≈ gpowS ? (e/n) n. -intros (G e n); apply (Eq≈ ?? (gpowS_gpow ?(e/n) n)); -apply eq_sym; apply divide_divides; -qed. diff --git a/helm/software/matita/contribs/dama/dama/doc/apal.pdf b/helm/software/matita/contribs/dama/dama/doc/apal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..393e71e9dd0ef5152f46f4ca1273b430ed20fa0f GIT binary patch literal 180164 zcmbrmQ4F2-}~Q#L{>)jPxv_T~-p5CGB@vVLM+{ez>W*8jnY# z-s`#@aYlWwlP+8xOmlj$l{F+aE(=nLjk~~mS%pE2r!mRkrEP@t>lQ`C_lXus(AbpHF9lU9EWCU*6;;Nf$!x*@`4o@FlNJsSH2NAd zUzR~31rn%CV&s=|KAFOjVT=Uv$#}ql)Gzkr0-VZksYOPeYAfJt!^G_qFtfC28#6bk z{fscu(hIfxOc}!g9);ASI{@QYGD8Y78py@((hP9j>=YiS0>=#GBQwNbnR#vSa0O|J z!*dSoTW{>0wI$Ww@!h2iN#XBx7Y}Txb(`yRRLL3D>W8j-SXQMwxBy; z4TDS>a4zIK886PN2Dq-S{+i?I4XLvU*$$h%YOOB(&~KlLpT#;#q@z7)E3CMoYb+U; zTxqZ2@YIwRZZ^%3Mjk6-gg@PoGQe`Xy}UU=XGvX&1>7s6VlWnrg%W|YAtQw)1i8(` z!)3Nsb?hT>A7H>dp}82^btZeHZYlI6fWSdPx#k8Kr$C3A-Fy%sBv#*ZZc)#uT^*s8 z0cJu6kfRcM?)MHypybJsc8lQ}oAot^K#jdt?=7|O`tl;?IHtY;8$DN#B zNIV2+M!LWUcAqO25~)ZJjlu_keF%uPJtLx$T}W-NzGODy5F@gl z&(u$_L9#_tH4JFxIyQknIE6D~_|JDBc7u1j0?&1cYp=lXQaR%2lS)ko+AJO=5(;A>7j15|&J_;`Cj z_WG)Bwg#n7#K&(VxUO#}U2*K;*O6cWf2%+sl(+6-XtwK=a|-E%nVmiXo+#KJV5sow z#Q>nF?jnUcQdHNxFK|>hX~%v%XO(%(3MjvvTWedr<9G8_nY)0y6qDyt0)MJRTcU{& zK*(~8Y*?s&?#F)lI6QTPTJ1ogB7B64eI+^H)P+rroj$p{Y5MviD4gRMP?FIkq0>3V&)vl{r%O7T(2D3kLNDc!-@ai0p*U5#I8=;D_7 zR)W&4+&DRh6C@sRi~xa zFD?Py*1k!#ts8d~Qckrd=lx1dsrC*`JW#P$*8|U7F74SlbR)z~{-$+gw;ZH(|8owto15L*3I4;<`O7OJw2f7t4g}S zPAJ8j!g(M9IYB3c!z$+%8p0HgJHwq`V_ML|Q(=ni&N2U;wYBp~y)3Th+O}JzBR~4A zB(JC?X1U^C++O=H%VUjcyW=HG&L2>jTl66j6UI~HE!gB6&n?$V(+t_;mVIYA8?-`$ z{Z@GWNt+Q_K91a8`U$OhkFI235S5dWMYf3ox+*h=s<-c}aPJsxEM-fjg z$Qk?bNx6C8g(@*om!tUsXE|?S32kI$_^)U6@6qq)JT&9qp7)BbHbwwCSv?aYXu5CK zRt`p14)%aQ0)jj=oxG8~wWFPZkv)Lnzb2%O3{CX}tz7^b^uH%qI9O;I*;oPW%nY>b z99q!7zs2tNasUI%pI7tp0{*q%AFKb0FCxG9_#J3|M-wJy0P`Og{xM_${JG}$kdY0* z`mb4b0NcMt3=9DFe+?Nq033hKvH}?XIL9B~z(NoBebIl7Ss4Hff8639^Q?>jhClD- zk1_M_u=eNt@90G*YiDhsVB`SM_3d#%fF8Oudv9-$j0)Y zhQ$i3Rjaec>vxZVM!Fc^2Evfm0~#poJycVedhiz;JG?!#bCT>)k$8_256?r9kha2E zn46spEO^nr?KSp~i|xKezT&s&LR$sYu%~}%p0CwPq&MFKxJga9BYS^$`TKs`S_O?b(Av?uJbx-KDXQ_g+1Zt zxm+SL04P=Mi(1Z^+d4d%RE)&BOk*B;#?#UA3ep8(&<3K<)NMhXl!F2z@cgnL^c{_( z%w}__N|Lwilak8krm4P?Mo(CvTdFT$Y^PqWux@c6FtaH3@U0D}Np4vQ>MYT>7GpV1+Bq}>0*9qca%W|>~7dUz= zDh&||PQ)rj8lwpZ&9q@O-=`~JL1-(&B2#WWH`UF*TW-eTh9Jl!ikKLH5d?kt)!ob! zXWONk$d4g?$MQpaL2=SJ6^;TLTvkndu}ao;1))1aIC`i~Y*NajYESld{)6$QZTcHm zWG@?Z0uC|-2v?0q213KuNL4(o(6J*rOyBuHBvILJ>qzphFQ0~JpCLvd;AH{ptiN?3 zW`0zE&_qNCp&kP(5fCDzIEl2`&x&l#W3c%_IphhQ;W$r0digB$Q`mfi)Ty7z#^;uu?&okBLjlhpC0ZqHUdK*=uT9S7_~%#=pOLx*!hLi3NTZq1YLOz=ZK+NnBGbD zZS+Da*;g)@(vHmc)t+vJ#YEu2YOiI%f}+S!S)r2*-!^N34q!Ba&s!t27Ycl^EW|rI zw7!^4G&jk#iwXW(9o;H_r8#ZL0~|5b1>#~sw2mI>7(n26gn zQ;*39TQ{8VM#}`bd-!~aa!0$I&<(dtY}pTW-=c9KW0sqKE)X^Tt6a#^(J*~dC$=Ph zE-DY?*>qfXn6oxG|1L4fT!AoajU!Sram&N(EmfS8d#r5bwMts0nLu}iC_6@Kt?V=( ztRojk@>sZ(8J6P*IO;VJsHZ`0ib+mWl#Td#h#O_^&+XPHeaE4BX9>IF-K$w(Wmwb6 z_+Ks5l(I6PwS@DGC&S;B2E)r=LJ2!Lh%Zo8!0DGzc7WIAs(n-`Hp$M+Q~i+9-sRmP zfI@>%#=={4L$EyA6`BOz5wcyd)Z!#r_(S)ib|a=bM8T|*;tEpwv_7?%R8%x7LEuWV zKw?i1Pfkj+%E~IT%6@OThoqQ|)uQR{_=s#%UBk=r|nEfy+ja}h*I?Y^KluA~=55OTnXu%HCSkH2SS+uA` z*FtNN(TSN+fBSx$_H|^YKr)gwhFWI8jL^{kGqmDfH!HuR+)t@tF7}3&?&P$H6NMqOlJ1v zY4dHdo$b#x4rrvA;d>leLtU9rD(JHJVyy$X;y4ml&9lXKcf8N2o?Vj~iJ8yqCjxTmw1#K@>oL*HD z$>yCvH%O8mETdPu62H|1pzcHo|) zvRNlPk84s+j`<|NFAEui&xjsfIXD{{?iBI2u=GMo5Vc<&I4Wd`hMkF+vI%p;Ur^;13o;0$a*vSCAE#dmyIV1 z+uoZrFzQooVV#%=fmn?A;*$_E>Su4%%!;!p|I;~w&l5P2qA_RSGQ<}f`zOzIWej&0 zLVclyq5~!nlXFYQlO^d0XJr3&XvIE+5AGOmV)`@b5<}`@n@a07a^fCaIB8?UF-Jr6 z$Ifr6?9>LxPIv?t@iX9VZP?f(^ZkwlQQ5Fbyl=kTh?12B!0;D6{*5_*&oTZ5lK;(@{}CfH z{zK}7k>xju{)efP2sO#5wPvK>sS{W`HMptSRkwQs>r-M89Af@xTwR1l1dEV$X;m6W zp^@EXovhNAP`7%P?#y9Ibc)&yCAZJFi$jEw3xdeSAZ{7FOc?}-RMO`@TE3}fcNbcG zUSVPTj+6;ps@JFZg0$kQ^<##})CcG#XG1aOMKp|>OK&rUehSfD9@g6-X?>_`xMeE>MX)WuZ{Ldk4YmaXB{i6 zVGZRhEukFN9r$tg4bW9V)|x~`(6nZOX>>FV&NlMj#ki$y}Z|E{W2H*S{t(1 zY(>7Bo%$ZrzEl*_gqUr=2rJySWaR1L-&YzOC2XV(wJWzyApP`#kB0+XRyKupap&Fn z@LAuCS6IeBI^;FlD=#3c?WVoG5sVkb%CMz5IxWqB?dxZ;nL^jL_?<1Jd2%A}Gj#qq zK}LCf*LT}&v6i{fbbGhTxP*T>!Fjz)Y0r2{!EsueMA_VoFBv*PE6!!CFj%-j!4yc3 zu4!W*NG77l(IbgtqAn5e1i!MYsZc5{ok1ac(|_vk9SU(0mk6*@A3ez=jv4kJEMw_B z%)>&gxK57iAb*%+Z4GI;aM&G>W)IEO22-sULSG3qERZ+nS_oEoKY-drGJk9SX`VPf zKVMi!!sLWY9{cX*EyjOM#a=zY7Wa*I6BUNrwY-?Pv3EdJxvj1;egdQ8k+qzSecMod zefcDXnErA(T}74s0hg36DmTjBY~DOJwy11!18wdnW>TT+91hp6S&T)hv3_>|iC!-V zM>0A3kn^!Nu3l_1eUorGY*19Y^T*7Z*NqQ%zU(pw(wQ2s5O@m!`a!(VPTMmE1tMOQ zZU-C7z)TCOiftC6+nN6mb8B(!8Nk`QE9+=zK~SM0BU;|BcRyFpWD@_gjfZA^^(%Wi z^F((oJ1$yAj9rDwn6Of^U!^m%s0!SLxnPS-E(_wGG=xg)q6y*)2{-nw=iHqVRJENB zS(tR!k)TQJcf0Fo)7lL7*MR+DC*KxG2Dz`g{S8Qs(`Oduu|fszeqZ(UorrK?fUsn# zi?w4vZF2k!J8UjT-kqkGeJSqOEDWMQsD!Y+FKEh)V-NEhK<319+Y5qhaQ1!*#9%gK zu3MHaq~4(UWLlZ~XZybqC|&BH$SL5SvKoU6;V+(>U-dG+_kLq4SH@_7wKBS zjFBEAZ_1u?j2ahFNp0+tx{!vUcO|0Ow6LzccG!0FP{ony5QcS>+%;5W8~i>OA>gFB zIl#V)*}e_8-z2I$i#>u_!7W*T$P#|N_V!TfRj;j~AHqgFOoDLO&nPcJD_qF!7GBO4 zv2!7wIecy7d2^Qa%cP^zOGi**|uT@c1Ja6D_M|KjVxaRV0^FV>IwWxXE!PQzsu zQ)U8Z)$a~v8l_h(vKMejG-bJBF#mWoE&cV4kgFXqevDPNC6?6Ti~VgGgK$3H&hmgC zn>mxTaRIG=UymdLx)bINct&!0bA_vR3-NxdfY_(T6S6AZ!Bsb@!hC8qzyq?}3=F6R zS-Ma;b5Czg;a4~O;dRJe2FnpRH8KUE`)2D6bqm#(iA`KLXHhN7ixTnzb@(Onv>E13 zNmtg?@_t{FYvSx_%3}5}(64$nN(eav(PVcx>40_#Dmnxldw@04g1tb^G9( zkU}r+7Rh&FWJWr3DY#-kL93!|SIUTi_%S%yM)XhqH9$l|I|^~G*f@Z#G6lt2SG%{Lt&g0bG%-_+7& zmL|GIdA4Vr8eaWO*(JmH^<$gVzy8t^!d4eg)YK>-2JvuOVowBf3;8+v8J(Q3NhYS> z`$gJNB6(nqSQsl;F9zDTQ$&8eL3p3Mm#J#tQsUayS#m?bNW{CNBPKR_r*d15Z(&M? zrv1oR(Y?ZFmiWphsR4J+jTCglZn?PsfHm>M!VFtr>T=7=FHc`#_sg=|`OXNoirdx}3^@zKCT>zfI0}MLv7b0y#2v3;*AreLoPd8#q&$X3Y+rOM zExUv^*1E|ztl~4n!fRwBF2`-F1T7jca#m6pnyixW;&)*t*HjGYRqz9!uz+}}44NY( z?9p3UuG(n7h>eV}&_Gf%#G8s91f(kjaUC7>``$tC!sh-$2eK1s?zetF%T38#yEsXnWIXm6lmxy#x z&o~H*%N?2#)_&pKa$tOrMVE%)aaMvIzaW@M^WE`@-}%vZ(l+%u&0Omd1CaQRZDHAj zrGW)I@r{};OmIq79Bc%2CXH~6_>KODnL>yB(leOiw#z2R@$eKgs#ayaTk++{z9kG> zGj|JOQ{~2ki{>_&KiPV8s3s00rO(U+$lBiH2Rsz zm|0plPMnZIhtwZ+Eblcv4PeFqpKFUm8$#1mtL8=P4j5Pyn#|Ynt-n z1DH~3Ho`dk9oDhqV{Zr6GMp@>H((LxxDQ1u_{lU0#-hvnpYyq+TINM5ZW8vjfqP`W z(W2tVI=0H-lVfOI+E;MxRgJWD@pZlO^#qzG{BIs+{Qu0f{t1x(Bh||I|1a12=kou} z!+(R|{|4XxjBx+X*MDU}8CY2VW5QLHwB8*?>YS{ix5L7!X5W#_uLLRg1x>SvW~qjV zLa;0`VhPlzvasWxsFLwinkU}hCU!?ED=lj)JJou5yV{=hR9??Ft)&`0JJ@!qBci9W zF0~WgJUQ65xou{AKW{A#Q!czYi-h6c4s-Eosh+%>@Vz$X!2FfEN`d8X!^&AQy^eH^>l!>=9PUeK z)${vJ_X*VnkgsmF^m5u3^XRT}wcy^|N$8qX<#|!`O{N-~qrG+H5{MvmR|FflX9B@? zLM?t0=ITFs=BlDH=CwL7EMEt^+TW$Rd|T?yPiox!0)s!D+b&TE7N*>hAB~l2DI70# zY~95pZS4fI!{m0I{JJ(yK&lr)++*$p>2C<$gXv0jq}QmQPeT8GV>Gj`o5Jkj$z3kCad~AJ^2;T_^z|>oPz5Pje zn}R0dg6fOZsfdsn+vn%d1!uTHNMkG_2rhA3`~{<&J~}u3=0Y5Yub z6Fu7>;)mmDhM{JOY?p@X^$=gyUNZ>6{N3m(B9VOaTw4UeEztcHMtirSrEn9#e|aoh zHRb9$y$Wpw#d)FxkAnErMNRF+a6twt!X4qU1h==^o{NrLJRA3w_~?KnZqikfas7-6 z_9A#*pbeC_!J!#&V(P3Uzn7C@A%Hd6_knzhi~%y_kC2lAoybgvd|Q?4bmw#UB4HA! zhwz$lC-scO*+;1!O6J_jd@)K&^H4*-pGr&q95&D#FlHeQlUHH%Z0I*Nk6V$MN5KjT zM}6jC@Qg|G-4G?}g%ABu#0SK+EV5y}I9Y>XuALTzel$zJI^EGSwW+%W3!CrPqo-ZC z3DNlaK!jUEd~OP?F-NJ#VNg=s9L%{L<^k7nGzs!rYn;wzLftEN=wKymyvIzP8FP$!Mz!R=%LJ;mN> z!=v#)DZ##c!r&dNKe1G71ZeSCQaf^w78wdd5ggae3G$~xv z>w{5k`5wEct_v~(^=cux5qybY1-nyT3ZhkhqME#hiwTyNI8kd%`4&dYwc~E)H>}b-$%rD~cRd){&PX zp@b8YG$1Z1Hhy>dM}hk^HTpn*o!;K6rJDRBmAH3?(Q1JFqT|J4On}7QV;q(sY%>=@ z?N^}S99HntVs?PV3}*(a%Gg?nflhzoR92W)u*pZ25GSv`mZEJyX()RIkRsi&(dbrC z^l&d9H5QfKIJX?6rhGZ^b}r?;B|CQ7U2qV}9Yc1)F3)*vxdI@zC?VZHti+-kUtx8y zfQU6KI~HWXs?GV#KDj!($IdhCC*^irs-Wk%XVXjg$8GT4_;+A`DwaP zqA~4G9W3iyE*0G>Tgn@vIx#R!EHBUp^(F)tM^|F2`M{Br|KZbD#N-SwhNSv?AH_YC zvg%+>j8d=>3Rnul7L0M+PGd%a(2;)>Q58E3tyOxlcxX%IaWkVq-j%K5;S4jC%4h!Z zGC_pn_m>Kp$JLwlPC{u3`J6LJ^5$7M7Mre(#N@`~L*bR|#|6(Og_kF8&&45wy?y!~ zO$$!sU4SCr9k31i;jJF*k_9G+8|z-l-R{HLyKAY_Hpn2&9z&r9wR+wAaF1}gc;oeK zw*OkWx4T8yfESj-Mbgjb7^yfO5bl9wmXuM$x zoR@LiN@?f1g#aI+AKaoQUysQjK*X0YKR!vm?FvU^PcsedI=Eb~t5EO&#FWHcb2aG1 z*>A6NE5(x>U|zNp8^loas6_3ZB5ssYQ_anqvy7HN8K%;DucdFDaqBp5)_guHk-{_G zbS10bPdP=-dLac$ISIQA=jQITJ7-WGbkKG&fC)K3ZRRSx5B0El5}>&0nJ!J=io%}# zJQ#?~S*mx)uW>q(i`)>s=+`GD`3kE`{mAraAM3o`E)0z%6y{aiedIQ}`DcGTlEN}F z>B-g0YQ2Whn!1%`H~K)6UHoJrH>tsnEfrhg8c~fctP^MNR`I5%IBx5k^Mdyq3?Tb; zZ)J_q=7P06vWN8n#qAV03q~+Bkp;#G;XVB#lY~u>`-`P9X(P-Aw~V>?UWVqNOSYGB zx?dOflc9SP6EfQb`on9B$_p8m8*NsPlhu&%b(gd@%vCRJiZPahE_BuCe(XG$^P&>N zNhSA4Dl>R8iJ9(5s1(v0DeyW=UM%IJHbA{D&9PJRL_W^Jw*aAw+vACD2A|;LAMops zqViuX^pELC#(yOr|6S>3{If#*e@;jKx%{s!|DBHfC;a*!74Uy&CjT=k`y-3_*Eav6 zGA4SC|F||iuD)))#|rN~sl#A>4-`@=GrEzB(AGf(FYMmY2i_di$j**+IjAzpZtl*S z_I?_Lx{u(>oHD}Nd>UsYUPuv3=$(Ie@UnAyS)c{gV`s2;^0H1DRLD$aZs)Qxe{Xy* zc~fb+sKS^u(zsSxAZ@iZPHMEeuJjl#;$^l{+fx%|p3*Z#;>f3~B7UBG`k=9SaT)6M zxcJNhXViLTo+lSRp% zbz}v^(1Pd?JY$f3Dem|ZIv0*-KHJex@ptv^{@T;Bb$7lp+p>*#N6{<<^FF8P#Mwo) znKqfx@u@@aqlHkoE@i&8fdx60F0L1r+JxRFINo`HyW2B@P0OX58^w{WhJQAer-Nq@ z^TRqxhjLpb-49o#Z541GX0d_-)~k-H*GO%z{lGreZ5`7dN9q2+jiyH>gwyj*zhy$z zkemee38T=m%V=u=@-O7Ubjs|a?8Vo{HN~cGLN$~KUkRQ`dIJprQ`Fr|BK||dEKoaY zn)JNNcxCZ1Q_*wbdj^5Ej(1jSO9M!mdNuW8f2pCJCkgxE$mIEojqVhW#3H!e6%Z|F zZvGtsNhO-xi{vvEhT9>#FG9ta6+dk9`78~<`56eO&mN$S#Jksy^yin8$dl6sW~ixI zXeW{IZxyJqMDp8%6QFTwoU(SM1xBEJbFg2%W}E@AX&&Ehb&c!?QAZ6~<#rh#Ceuee zSSdOO)73aWkXijTv;@qTQ9T84-*; zap?(F82Z|iyq9xwSzVA}Dmc^;=e(P2+B!0$3y#?!7A(nDV)M&+EZD(F&8o$w-H_v| zOkhD`|4tGqfx(1Bsx5Uq4YWfwQ(t79WZW7Tq8p3*WW+~W-plTr(IV1fSMX-K@tST^ z*Zn97LWJjDL-uuLNyifL8=ds5P1fQ#h^0(6Z<74-gVM6xrx8CSZh8P$(;2lf0fprK4}+|o!qnAiUhM(XWK(d< z2y(8ev3Rv;Xz#$rtMZH|3S;~)qj5$7h5?2p!&#b~kR~s)HCoW4^WhpOR%nLW;FPB$ zch1c$k!DghP=%J6IkndO8x$OG%(ir>+A2JSt zAM7q5OW6-q!YYKV46gDWVGxve@H>k6f&(rYK$u@yg8OnJTsi?#B7*Ear;}FggjT(v z33}!v=XyF3UXcgQoj{#9>cpe^XgPW+7axUJFZmOa<{HnrkvbAEq_A5*cp=`9p4|v5#yI^4uqx zd8YwPKXlj7iE~O+8R7dQ;DV;(cnqenhUHf8Zk32vT(Zta;&|qrg2SvHI8RnUn&;7vtfYOq04&32vhaD67-h13D<;%+Aacv%S(6#%*Qv-`kEi7i>?!o-n6fYUn-&7HFO$R z%@*gzUxyq?QB>?l{UwfMEds0%bnTP8VY0k5E~Xd;v3t`yEJiI4HYU8@-85*kYz$j&iq3xp#YOkS z%336aM{lN2_X=~}PDY6g)x6=LwWY@5|Gq4w=V|ukXL>(x^?R*Fy$*zeuYSXNVjA>R zQCWo@=z;wY7~J#n1A0}m!+N{{Vc;-<2C!48WVognDFxD>><)f1wx`~Man^J^H;g{* z0q_}2Z#u0>i3_DKjKhL?GMqAO{>#8pcMT?e#V zH*~~tP`6B<`Pgp<)H?O`&+^rrX%cB5<;sKd`cRXk+Qt*@e0EH1)7`+DX1sQ4PcOp} zbP=dAu=2f$41)#HSe|HTaiE~Oy5SuB}+i7&40-I?W9kg+mfArSD77A(ZccHZmM%FUB=P5!FOt4u9~_!dEIvw|KV=HHdk)Hy3?67Q-qPZR9+0u4jJ0+;AM+yF`2ls?bfpp4e21b$>2zD(K zx-LaM^`$3~@nsGTM^DOTT69VnUsX%=5j=gL3+wC{TD)c5+H_D=T@CdfRI(`iN+xe> zO^XV90lT8yXV|53vI|5Gmt!RBEk680VQ!54p=$^ZkRi3FB*o3KhsH{o3C4zlBL&FJ z3#Oh-l;hSy2YK47c>CylI=vqVg4w40uHRfnY1iIQqSCY)rsK6+1{eNb4Xg_pdDt_) zR*C4qu77`WKEOw}vDLA-wd4Uv5H}7yKSE1u2~*|9hsK)Wn@Z33=3Oa5Q5E{0q-R~jhi{F&@r^Du zg9`kcvjFb29oP5#`DQyV;$a66p{K9qSI;h1TW)Q3qK^tfoLXK!tfk!}geve8;JM^i zUB=W4Ix}S|u&fZvx~uaKHQV)}aNfSI?S5ykYjHOYVT+ifl@@%J1c5Ig7-x=6l`%&) z1nM*ELC~av)>@I&;Sem}u)GI9U5*)+fVVzokBucPVEA#M`3uK{Z`}4kwNtkj%Evf< zdYzHX_A7T;J2Nkxy=PO&cH1kmMxxKL<@tyzEajfU>$hL|*A+2Quwj%*&SBTnUv1rf z1yTzH)d!y)G@xFq2t|yT*$%WN63rh}D3pKCKkQ~4P((QoThNIE&%Im=iLgg;b~)Me z=G8Ru!`hgr>z;_oNXcMp`*A!B47>+EnrdhBiVe-==G+A03- z=lCskep_$T|6`#xuc=|b)`;dcStYv~B(FdtxaPZ8 zVtbn6Fq6-;AceQXJ%vnS*|yW_UUTNXX%A#0Zu2F!Em8h(U=#*)N7H7)nfA(gQOEN= zbs0t?Bq3Hyb5l#T+3-eC5~k~A=jCB1saNyE?LDeW$9@^VI2idX_l{`e8R=RvkluU+ ziJApMlTmV&po$hl5o1%)D}U=fCLCECPo$G(^v)xk-0YC<#FFB8-_KNGY0lwFP7=XC zspOb>TM_n0xC-9vlfemBAh}m^egXc`RKFPjyFjpc9s@?Aet+6*$C@Hn(rNmuBXXW1 zvrzYtBbOiOilcYGp9CG+79eKjDQ6L3^n72?Ms97vT9Pt#->RiEUw9Y4k&f!K&X?`p zsYz|4yO`dv>7i@&rR%k|rDR>_O5gJk-&@6UVfiWa4O``QDuT5$_x&F;J`;LPOMivlGEaZrn)Xp$OcVMP)h3FkD84qsOi-I!<_>$x@ zp*MR>Ey<%7BjqZBk<)UwSFnBHYQKJ2b#qR5D<-V9o-jd7Wef|IB~UPC_`oJxn_8m& z9;?;>3Sjw;5ART>znq^~21db^_dGZl`hFtpS?kxcIEAcxL8Bra|sLsl_)=YQ}UzAa$vmv}v1V_6~N_|mh znq&-;wv6aQl2=VbQoUt*$-PpqPG(p*ObCm+dbNvK=HXcSp2@lvkadRM2g?h5g)ERr zNQS-TZZE`N2rxI~fgl&7Sje%(w9SE~P>d#pJS`@2`^G1h3dv3;_ec|~5CDt9fg!eFwBpPmW z=$&TPj_B>hE)XELh3VOAwKjMI-D1*t9F zi|=<*dKxvzh9JBOu44coL~05B3T!f@Cn#7ZCqE&ktp0ka1CiKRgcD+{~9_+?QyC(R(i#4Xicp8~K0$Fm1&$;{Mu;+Kd8m4JLV~!852Xg;x%IO4u2` zC$bVtuvdwcL!{)SB)k|5F+aQbq>KQS#2bp?>2p?kKQ_~Ph~S5{BL|=O=-Ocm?#UUh zV>a@98F2z%EHnqmS_uAOrySC2CcJ85O*Ti*uT!-^RG{B!Zs3#0cYmQ@3gke%Am0iA z87c-9q^H<721szBVa)2i5XadE#)L{Ar28Jwa;9l3`o!oSTTFC%psV zI^y^{7}W~2hVP}%@j=+$QNO3{C1cr~Nl%pbXaqNxhp=6Lf>DL{GahXg1KIWDdfY79 z68I?S(08*11&6^C(msM-ffqL0>YmSR4+BC)R7o5q=n3KQU&i#DB9jj8+WYy-Fom+Y zbCj&6u_|)+Albe-EMlbMSe!&oiM4Lo2%89|qQZ&B@>Eb44cTL7hXBbW*Vd4_4S=Z- z4ax(hkD37AQN{ox5`X~=F!U@&N8`R|& z8jFwPNRAK6?}|vN1hY`EWVD#L1E(B@_!dEQ?cj#cbAC7Ckz^GbTd5-))acv`?n?MP zF5tZ)A-!DbzyS}y$?UpSgWIjc=FR)UcI5Lgk<||4IC!ppy+b07^Omy zbb>+dhO8Py^BGsUTwxx21%d8BNmza281hOz`0Dl9KQa;$i)gn#`6iopL|3QVw-=J3 z_#r15T$Sy+Fg@5q+%-GyTN9>QOL_GJMstSuif-)O`bIav9`tE}0_u*9sGkhC=JQ-@5W`=-M0ZYm(NTY`^ zs;0gd(;&}ODF=gP7gtonfxI_Rz;hOEZqh&_^t6Bp#co5c65`G1fmD%5Wc*j1pwF%O z6FjcaXvHf^3K_tNT*Q%BSeqLbBapd&n*%($f}4Cs59FaWzeIAYu5W2PnVN13+8T0p z%EHSVfffNks_Z#r5eV4FeJOYVWC(911FKeLDW1@veMe9b-@c_6(dd{EDloB6IVOG+ z7#_P+W~NEWZ=4%Yc6bs<9{{&TfqZt{;ppHAKCX#KE5o$)nr}uyZ918gk|ANg@f5D2 z1w?GldNhU!H7PI@9`;C>#zUaXi)|z(LKa7*`mM;gG<|`N)Z}Yi@tgwVjtTXv%(Btx zu~D6>eFS`pbu;EET@1Rx!!?(m5r(wG#%b6)KpH{>G^ zNRi>Xw&#p!^vSfkE()7`3$(IJ`xZ&PJHu9k zIZuAzwZ!<2K9XrKO21!! zWRS))aW1nKAJoG+QTRo1>@Etg)wv1r7A_jF@LBSR?}y8yKaLDOH`^tgI2bNDLbakA zQEOM6nAsl%0MX%3Xox9T#_0;ponu|K&}%$E;QZeQfR0=6QA5_#qvp76m_AKhIPs zcn|xD_fc(U#N+}!*?2!##9%!V{tZRWJ7@d>;|A*>OZ_mYi~ANKGAk|T-6Rq10~Jns z)f;CjBZb{;fui7u9;(<2>1>Br?I-j5yQ9-B$BI9erxS@%ml68U@zLCP`!g*LBtz91 z7JefTVUoLQ(XC?AHHv->$k5qRC8t7`Q;g+eu;qX*a zpO9Uu+}#1QD5nzm0mLza3MdM23i7E98l1RVHM#YhK_L1)ThA8DN6 z(OjDnQ4**45x=YZ@s**vN-W#5t&>vB12-Py7KKgp^2GQq5S#=n=r1NrV+eR0 z=HN2{(LR{f@>bdA&d(>8i#qQJTQ|~}|65l7?tJ~XDEvoR{ikgFAGR>2fA!@4AKN7U zT>e+V@NcsE-`%wTZ~FOfy%B#`-hZ!X{=1R)cN+!MpC#4b?Y4hc-oG0|nEqS#n*N0u+zE4|Kg^$(cokF( zi5RSPgWICyM9pXG$#E9%fjKv(T4i@8<7El;$2Xs&-Rx3cV#}Ts!ieNtokg;<3Sv zv!|ylvt?Btd=w(5(E7R`R;<4a%+-4LXvA9eO`H|O zkU?EK54t+weMhb1VKca;*FR(UN_ML&Cw-8z#g8~5wMtTDd+E?1V4N@@3PDVM;KPGN z^o=Coo+^1sjWU;*4~$o<=#Hv8YR0B8<~W&9u*AS3{CKAS2tLxjeLL~qghYkS)PmHf zOW*&#S(CS>ZAr)n&YaL8$~g(KvTc52AQ3sh8@+7fm9`o~y1cMFOA?vjELch57scB7 zefFwpcSppR3FHMGOJpK<8gepJk%|^@tbO+nhvLe`Sc&F|Zydoa`#fGKKs1`qJE`V~ zepe7RVdE|;T3>o1-e+XHM)|mPho&@*92NG{j@yxi1P>taPQJCmSPCD&Kpt_9YCr2d z0_v#4bh<#_2NEOrOaKU9bO!ufuV zm~E>^0GXgKrw%DgZp=B2`I`YA5&M~`8c7(hk5ki>8t<9;_Q(4SRc0-_w@KrPS)tM; z-r|kGcCb^vsq@0qUxAaM%mAf1w;^MA{0c+pG}GB1Al(T=zF8&k_lLeezJPj6+{rpzadstlUY%-RF1Y7(+HmX?cWyg0@6!l~ zx_@=ikQ<+H8}|xx=daLy=3E1L!#VREKM{im7ACntWtj{{zMu&%FDT9m)cFnb9 z|KM&+1@u;z2~@cfiP^BoZ%T2@?eZehk9{eeKlVvkfcNvdTyobLzRc4H5rSc}$Xy@$ zif8&LBk+|+6pez2kVBNr-DRD7=xU(muvX}6NuCTtX?O3!4tK>`*1JpT^zy2(@xE=F zFg?fi^qz5q%bkG*76@BQ8$BBXsybnLXpT*LB4O$c1N0%*c+vmE+C2qV8tB`i@7T7@ zj%~YR+qP|+Gw9g1Z6_VuPRF)R?^WmA)w}lEwb#ApzT_$2LmpD~{pJ||F}<@j1B5%+ zZJVf8G)Ip7M#w@<$3hScS2d$9J!qo?L&)OSh*wEx z6M|$nr17`XAX)*;3izz;!<;=|vXiVnlL6Umla(P6U<&PVpq1GZ;NH97X<*&J2h(;& zg)FNG>B-~Oh`UFa8{>~?c-^B3(a@dz+Lmi|Zt641rbaidLANsliou#9X z!TJsE(KJ>Zl(xxR{*8Hf-m9Di4><*9Tqdcj0B;gABksfyutQKdEq0vLFYLIr?r;uf zo;HrX)~Fk8Sch9tOG*{BAl-&$5+=!PGoJjVdgli?J{0xlHNaW1R1}xpZJbBY)BDR> z?c(?C?-Lnem63F`yRB~wLidGzkbgekK&-;CCXR_zmV!O&l~-j}g#Zb>%VKT*k{g_3{N(-?k8NUz}_|?9qzJ(Ei}BL8dW7K!)R$oX<6Ce2^Lxu_pCbu z!FH|An`+66LcoL{7RYn;#24ogLZm4&^?atu(Erz zR8`hnn@YDB33T+OD^HFh#^Q^8U`ZQ_!`16=B9k4R zij}}dn-8lEHN!@wFukE+3SnkU4oR~%5X`268G0sCIPZuNY|xePRFhE71T3cx|0u}I zpe#%wBK#bPuX3j%XLn8DI&|F^Rt`0U6P+zs?#+_8mrG7+_(oEpbRxfk&O?y~1?gcg zmyR>mSC4@vVBEW-)uh8cQbOeq7=lOpM3nA_UHI6d$IZ2ISw&_LH$@raSiL4MgadLQ z-s7z!JTPXtz+q&gp$Ymx)XH8H91vwRuT^2u2-Z+#fRcpAj&yflj$<;KjE8-OB)@T! z8HVc}#iWe8`%w8CleF3^1iv+`_itQ#c~1}3ZBSD~?}%8v_yjh#V;+6P*qqN9#*8%w zV|clJU15ky@$CiT6iEV^7}}7l$1W%&3=-8G4CTz%XHUyG$hw2Tn4`DpUsSjpM4b)q zws%;8m@*LA(&yJ@cS*E&{>9F6d2gp^wJ{kRRY6GRSNSYR2M#Kou9Ng`v*%Oj;V2t@5WY&W(?Lxde z$h=IZK-?jW3hJL^$E26s>|Nuty;cAxC3DnKBMhFLOE=*`3Ijdq9(0KdeiZkHM-Dq7 z6UpemruLSGGnv$aw(huXysq|{D%Uq~#HWUQ){%<}=%M8^?$G1K+%?mEM!Gt9d$AV$ zzTPNf5ZAA{MB!oh14E@(3M0AHhZBOXX^5eCtbAk*;cmbOyR^sWx?oh_IZO3-P`j?% z?}x@j$8;Kw)@*zBo5D18ADw4o<=#a}qxmOc*~b_D+Ix0UdE`QfaKsNCtaA9D=cgyW=e!Jf6 z(Swww%;16eaJ{at!7|5+{@qck32PLp?kV!fQkV5eMJ>Cq<7~UO#1#NdZ@eD-q`Q%h zIK!+XaP{mXja(ZcivW@dV3v7bW49FK=|z_+2C9b&`R1Ve(LMT!*Z075GL$ z^DXlwf|bqZ<|2ds6UOED(7#wrV)>6a@&EAYUyAJ?9Qn^;``^*%zb7`9e|f-ZOdNmysDJYiep7QZZk-MJ zPa(DL$(gD4C}R5n%tvAlW=4318<))@pxI5{+NQGiJ6TGm@z)!U2%ay*|sVELo4s;an@J?Pwk1C1MI6OELn|joQBD)qAIR;DVu7XQw>v_Y4z802N<90MOHTlC)Mg+L>;#D!prVW zxn+`{9Xp}G(=;~dz*~MY9_{*ko;}PT>NSH?8M!+oUbz3GmbRMQ-^b*M5 zJacU75ZG6%)OW}sKqlTv9={!0;eMOw?`zl(8fhfuS`>&W>EFSm8!Z19=$N*bXaLX0R5*)8c)22bPra^~JiPSLr)kQS9F>Mp`r?>TOt$7N%Jr)5b zj$tT$=PjB2%+}Zs@L@G8E3XR2=KAvH1H^FxH<_p?)+-P!RX66wY4H=;D3Y6G!eQfy zHgLyMdmTto~vo4F-P?G7Li zmqVa1t%ap-)?fR0(|Na^ZCrjCQ3!-WF|<~u0IS#~eag&ZPbHTJjc~p29h|O*$sLdbF-7p2QJBFaSVn| z9KVwX0(Hy2yO}9va4gGuaD$Ce=<71-5r`BxfbCXf0zKn%jR#B*1T@!LoXSB#FsSj* zz~oZ%3#@>_5j=9XBK)y%Gd`n9cnYVYLApbb!o<%TVtzEwFQVh-NZI={8ushx9PFv zW%p}5FyFg`Su_S2gXitQI!bC4QO1V4Dz97mq{^`}HL(p3qu!6m&jb~RikH$M*Ulzk z>=rXhGihfvKdFAT6St@KS`9Xlm5i5o0}*>YJNXd3zkKNw(~~p!D^4wDB_bp2Vqo@% zWeUi7NuV0(OUmMy{5a2L7e$rOPrBH_914Kiv9VXQgshaG!R@@0j>N~qPoghBy*TAaFe>@n582!?B==qdqzR#^OXvAUXqI0m{ z$^Ke5sqR~^u9jpO&Mjzo?0ja)^EPB~bI?u+u5X(xgL1%n1QpogrT?7~>T!OnefxWLR=aaO~{`A$lm2z?%HYMWPs*)PIDOv0j5gFC#ks zUMaB(t|SXSevW$$Av=Wo+F`@zDD(hz|K$04-yE~d5?`tD`#cc2=kBn;d-)lb-aCnj z-Xiw0L1KMeJ~Fw;S({L59e9>3)=Ik?z2ird4g5Jw0fiOT)Hg?X~1PinuPN$ zdEY3=PH82#7d8S58`D9HmnL_w8w`igBRy4tI86r3)H%F;YE^4P2?jr}em9%1YsgbG z?bDu@?!#eKZPV3e)5f!+6quVIGl%MJa4^%uFq$B(gaoBBwDH~?A)wO$VIZW4kSeDJ zWG<-=>^w)lA(Wbd!SCA-7gRTJz-%j_H1*Nsv^frim4v0Wul`##n=Sp53(q&Tsq@ti z@EwG-VqQDB7j^-HJF?y5>bhgVm~Vy9L4pl{^LOvfD8uzvWWPD}voDQs=$$ z{2tb$8lEAy2o%O=z3IL2A#mPo31W}0@GJ%US>e7zevi%bNR@pds^w)%_1V_^i3{g8 z(df8=lR+iw%M`JfebVf?KBwPIa1E;UC(Db=VRCnX3l#9wz5DU|f*td5g z$@E^cp`tM zhd7;>(!;4+#YLg-iu4r)u%nQPah7`aSalOGX@D*3x($iSG%C#Q8O}DcQ@=Bgp5kto zm$o&a6T|pure={I5~ZAiI2|)J(twUv$avj2;jQs9^ojCzi=5VM^=nxboq7923@~+u zo!BM2CdCNf65D-k3WXn4k*~RYy?>gki0Si<-L+u?OOELwN1j9?rQCy>Kt*VkRpS}V!dvbymtNu!tvd0)Ho|D=9 zDW&c-r#!bXWinWVCjRmg^r3IydUvMBsehb|PIJi23Pfnxo8}Z({Ug#J?Fga;(yujp zlsG2wp{Jld3ZDsQw!>H>qpAV9n?en{y=CA6CjQq)&rHV&Y zWEfjA4>E}FKOO`vV4CaJ4%r!pQ#RcNKf1U{GXw-gh?>FsdGGf=0O+Azq!8rrc5X{3 zqfELx9JtqiI%mCvbiCD>r>ffXyZ*QoFgd*xgt*s)glSPn0s?h~FWv%N)lJbgt0N!m z@`Zf?-7Uvbx|5FB^?K(6Jbn%qlwM@;R;&<;;N)f8tZ&km+>i}F{$R|V)~?b0nSpjd7Z z=&X?Lbc@I*?Zcu6CAh}x`CdmB3%)>7mOBmpYk0)+KZZvv|M4#VpD6Oj0sk*Lng4|% z|9JfW=;xml`6~kY3m1RoNdJvh{_a@*C!ze+$^4rr|76L(N0GlvtN$k$Vqs0}v2L3+>6Ro5=9nZN;|AtNY4ME&vKmS<2R|Q#Z;FIe@}y*| z4yI3{$dZU09PHl5xB~n-d~dr&sAj>0B%r(s5+}f`VnJd ziWm}2xvSJ%qpk7C@Z2%NU%_B-_mRbkYj=iTf=ds?x8dE@u40JbKJ2^(Se7z?Y;D5c z8O4$X0C!yc0Sw58Wg_I^(@^{%!}3XmFwdsFniL;r)`vN(+uePp3EMPkEuZcpILoU(o#De(iNXN%0QU>rS#47a>mT_WYWht+X?bfB!Q7b$FCf3}Pw=7o))W4xq zodL>9+kt7!V4y~ZI1(bQ-_S(H0qLnDVn*Q>o~l-hWK~e}xwdlxskjbw6AAm##i&%o zng>mVaSA(9-Ql+>B;X*d9_xvSf?Vp~40tRl^yLK`_y$6Q}V@pML ztg_eczXZy$wAwJiPbH0ZJ-ajm(UXilf(-W^VRa3xZuvKbwPcfe%xZzJMZ2d`mr9&c z%Rb+`Nlo2`>;hm0hg`9|@Nvrf#O8lo+5oiGon10E zmfAN6pSB$|$xyl)6L%|P)=~q}X=-C4OAX}J7h0fw-gv0LUBkGHx}2g_+wfPRRX1ig z3bUtG3sWQS2aBO5@u|zBtgWxegD3bG#*T&r`0MU?b7s2M`q>$}-G*9Yc=_ z1XfC*V0Hcu+!sXP&LY;Q{>YVe=&zHtP3b*P{>lRKE~NfBG>nWpn&2e^VxN!tR<*JQ zW~1SdG#ZMgr``_GVc`vMv*^BUX+IY=FAOS-T|jWu3}QqKx%mK}-;pz;5kDY2ob4JH z7Nd@{tSS|d(678gBm@#M+B}07ht?k|T!Qt8(4DHhw23U;Uy=xUIG+(sAju#76s_y~ zvg@P-79laN;cW7bbq9_jA@T0r!zAt)(ZqQnR5~tUatUcPBoR7l(OJE)eOOx@Kpo>`N|c)hDw*cG zqXW+Mw1;^6b3zpId_np`#!K2$=ymtQP~I2nTN3)kJF?m2Vd}XXOV1z{!VB4Yd4itM zr*4o1Er*EBqi`cK*$0n#pqJJR8w`B5A7|n*`uoM3M|yj{0IYi)eKa z$k{JujyCUbzW9w=h~4dF#OQZQevFbEa`hZ(h|=da`)a>c+b_Exn+b0-i0cx(LKIQI zoR3B{rsrHH5qn9n^5S#@(JtVMtd>~5(GFVo5`s&g{}KymAup#w880B8BJAgq_i_^h z1c@I&oaj_22B3Zm)U1eguGPtow@CYna0;U!^KFMMO?hwS1{3 z>43fgfkWJfyx_u`4)Cnwe=#RQ0Ak^#dy@cZ^!2MQt06lvPB5u92d%rG^V=3wyMB1V z%{HAiM|&@07@;5rQ}T(B2z^MB6p74IT#kLJOjtkR6`%2RuN)eUSC4{|6yd{d#Y|EC zIpQQZd<~SBav~fD8#gHwXwo^^BZimfy7h7|bp=k_MPG@A>^vBb?j37nlYe@%))Bh_ zQQXyrKqMMPYC~gtBPr;HR{P_J9+@E!eAk&_R2hYuG0!~_5R>b4QSo!5k;}56TPPG> z@e}owfhFNEd0*Xdsp8JvYJtPEkNCL6auf;(#|Cd|0*x<*8DmNQ(4LP6pS)LeqjlNG z?vyt6*72kjsIQXQR2%-zq>6q2i0RY{2>BSo(-F48M#pj?c>^7{KGEBUmD-ZEwxSv8 z5uU1*r#D;EM*^(*NIHcPx=>Ah#vyeiR38_X!AMXg|HbY4iivbsA2KDGc#)c`i<5Gd z@_i*?eQ|zf#DUC~0&eJYN$7q4N1uOU{VTfI`o42pt;3922a}0j0S+_h;N>eQE8e0S zaZ}_is`56W;Hydw37%!TuyRjN{KvQCOunw;p!;kBc|;4F%K+1M1*8*DwUoL_4DBYF z{hZY$mULk!d)jlkhfNm|;6{J8o1-zyL>&hvZqGMCr6eE8TW5T4>xWyNuy29kzA+?t zxUK+iKY16L)b`wR#&-6F^3+KPQO(?iH#cQ}1ZboSq!Xr9hyzR9XQNALcgxj!lnht3 zbU|WkcRe8q2TrM{Fj7bO4MY7@;5-$Q?X9)evq!A!+UXts?^>*Gspx`CiIq;z`D5gI z>lJTP`JHvF5^G!D3<3HD8|T9^^}2^{cQkAULrALDfMah(aa|Te#}Z(xPc76uA}u~&Eyv)_t^4NcNO<0=~;>0hKa`t z)Iq0)?KnB7bjnN4Oo$(ER*qb*$%4EMo_xj#&$^IUrp;^#&$?sa9ZF1)Fh-p$s-gkO zG!;y_-vw(h%O$=C?=PHf9wgoX2g=3s`(vHq(GSwePpvDlQd!dpag#?$+2v7BG%C%> zEcw3p!TdVHJB?+Tl@`EQBv0>pL55os)qwZoRV`7rY1UoE?tuz zyIU34jJDXN&tLtA>fUBnUtLrDoC0lA)(D~=PAN8H8pcX3@|ton8M+71*i;>Zea9H$ zGNu^HikBCrB0&WYvMJ^zUY7>f=k_h?HEc?`>lYJ5wtBHv2fEIOHmw?7!hM?YvJJp5 z6#Vq>PY^x^e7Y>*s1Jc{WGWO}+XK1GYUE#v3(c3U5NK`5r26ESD?&<`(yHGhWXEIk zW<7Pf+BF2|L#oDvy}mpyataT_%lxp0DVbVW%Qh+-J0osZgCP3yKB^XDE4&jtuMO?` zxi8;rn>z1+HL9E@Wa-q8xkN}SRSUtNFry5SA&=At;5X%E0nKmcXEd9rXYWo!I6Ds^ zc19(3JwM29FqS?{BVGhVeDe zzI9Cg8Hn$;Zr`yFzM|u{5XgM;?T01HIUqdF)b#= z;drUo)J`5)_5BDw*FQhnP7q%ALkKQh&>-oesKxv{V391K#6NFkd^4u!Rmgk^e4v6F z(Gzx(46qWi9P5M1QudTsZzSpYAeY(IS~N5Tg0JkjJ!@~{OtA1%@@{#4Oq6^lI28;6 z=P~huk6?y}?9#=6ZwZXj_jBxG(qQIhx+)E%BF>v=asp*d*=(I5-U z71ix_=%{>cle~L4H)Y;#zPG54ke|X}6Hrdp%x5Z0N%tUQ82p`wwDCbQSfNz zJ^7^Vz?62SoGI-AxpW;XTsuRE8^~Ju=Qkcjb1>==!axTAtE6v1M;awe10u&xx{ z*u{^gPRD<4FJ}`A*7*lz+cb<8vMU7VakOzggTG#=<-DLb+HwdsQV0(iOkEa8-Q`xL z;;1B9J}Yb}N>tx!nkfokvHe>tzqk*hP)Qy96vl{s`Q(|68#xka)U%e1PKCYs)hYZr zgN>K66VMA&usk2*Cd|GdNcI!!%)qW za;w&3BpmsdQ-oKlf*%Do=Y-i&7rl^4Wxj)aTtCQ}S~dhy=-3%(?w(edR58^_qutT8 z$kC(_0#~B)RqHsBoxV+{ye2g>FuiqEu0S zbfza2tf;D{vlxu8o{b~gwL4sW-s)gUuSg-J(GecMYKvG+?LxmU_i4@FHJVVXNY$@K zyLbAtpx6@g_VabgC?Ka{JycBV^Gto|%)Z5-3Lpq{1;v})>O;9aBK%|RR!UWp+E{w* zCribfY0KU9T^`!TU2JbT=XH!;CiYd-Qp@ckb`{R0^>=!BR=Lwns)T5RSIJpcwb_Q> zhE4N(Diir#RIz7PCTd!$;ExW>*87N{wEU_z%fmom`RRR-JtKLTJ1+RbdDbqoD`N1a z3yG7Q#z*0!M8VE|>gi$5>-kZV1<|!0pN_R3aK4K{b9M$otTEqO+2*Xs=N4{JByj<- z*7n?3uE+(fxfBGfo*AYUY7XJ!4fK)o8a?~Jd8qmwm@H%Go#ekscdP&;0N4eN1Kk!j zu3)57$Cg?gwS)C75u=Vy_zwXhKU0nk2!5oS?O5mUWM&~zqjUskj}Y8L-U(P)oB90Yh$;SP3^3Lx<>`79NhcM+r-q?^^qm$-{*{L2ZfdSIT+(4 z-%wqR7DaUP=U3Gl)W{D{W5-SaSV~W2_6?lC+I~ZSda_f>sKhQ|mYWyZLUvtz05HV~ zkgvDwowtbfv*PZHyBI-YW+%G=5kOUXdL|3=3d_qeBlLx80P1f!VL-QPymUVQNZHT+ zHBRQ`zzid8XeHnpo8EB#5o1TfC{v<2W3-Z97EvcGRX)zD0N_QlRiFqD3kWJ>WcQ-z0e#iFFlKCTa;6fav4l8LNB+VC$qz7VB5(s>C{zO{RP5O6HfP%u7A(s(E) zPgJdrKkZ!$7S{Q&+wvTD1#!|f&#(U#?`OyTu1#!CuGjbvfa3N zc7a>2v|Wh)nBNg=27H7TDqvd!)hyL6o)Z7R^m$U9UjBlYr#&sHO-J)3MJ zcrPVm-pPxv)ZcASi|>jSKFv?L+wLQ)F{>EN%tM6h$L8dU(dLc1F(SBsEBBPO?_GKe&@Gq*QOj|n`q{-XR&KNQ@0xjVZSM%Xxhoo z_S_x2MIf#>!CP3o?tQ4Xcsu@%fQa|2ocY$F@54e%a_nOtJ;xw(c z#f$v}2D#UM<`s1rnn89|eAMw!ZN6@)bM6{MJ*#ycQW=5A_8?pf_PR#mTwfxC|FoeL zQWj}%1CPTbr)@l1;LK+p3&?N0iOl~Dq_=sgEm>x)q`oAnnps>A%`Tg8S#2K5%V!?C zuJs^q%3+Ym@+z}Hm6Z8%_fgm%XkJaG2!>BEGv$jh&_|NGp(KPPB#}&9T#sAdTX9_^ zFow*MZ-eVOXEDb;gQghuSyVB>i2_Pb3Fw=~q3o&WOkvo#F0bvPrm?w76-jqdfrl0@ zS*EH+fKUg2JnisdP>O;TTi(+DBoD_p@}U{+DSgR1ZQjVA$>BDp9GA=8fi?a9Jz9}o zFwi*wG}29WnUU3fw++kDPVMCaKcfJF_P+Bc7w0ng$;Xt-w~kfsPaEgKwQ*yi^xX~B zN3rVmlC*bnB-N9fE{2*`+OzKH#Al_Q$yrlD15})uQM5;C`iaBH{jA*KuM40c%?~ub z?&`I<5s+-7WwuX&E+~4K6ZBelp64WXx&05I{V1-qxb`QRO%a0;sax>0F$j<00wBNo!WwA`(99LKXmRY)rG>2E0Quyo?C&B8%xbcsuXrVkBjP=8syDp|?_`sI-dyl)(p;0k zLh2^}q`H0GTHcU(mQiDZ)ZuN9`!P9X5*Fr|=B93>hy46lu-amU7|j80mhDCzXn zW6%9azFa9G8qGg7tBUXB46*V;vVxfFHxUA_%L;{W5FNZtBmQ2agz>A#9<7wB?DXK< ze8kfub&qI0822)?V$2x5C@^aNqo`%1qwxob>EOT6sKWw<6}RvZkK)?-2qG z#sYkRIBwH$>OxjaSTpGEtP;ypqK0`Ftnm$;v?J%?n+)7yS{8AcvBkJ;)uby?Lnt6$ zR^DUxRAE>`IP(}|9Catcm%FR)7?mbBhbq;A<4(5nxLsM+kY#5Um2i_|g_FComIB7U zHv4l4-XwX09z~152y#88(Nj4Q$_VpbrU(7ISt(d@q^*GNUnH*&K@ZIK{zDbrj|rg| zR=!M+;4A@79jTqa@dBUV9y6XI&Q@E5RS);ABe)KCFAt&O8(r6!R;<{l9{QS5xD;-E zT&4-i(I1q4f7^i{hplNU?Rmh%w|%kO#=#WCHwPil5B~8*(26q^%l#!WTNhxvLYY$T zWjZy{+AU$!#j(}+`EpF0hlK={nq5d5Fh&}`E9_?+6UmGtE$Q_}Dw}Cmg2XasTx7q0^;--sVrN#R!WU}yBztyL7_!RbIJ!kU7 z^cw^}T+U<}=R!03hy(fvdBC6lx~;gW-nXiQb~v~U2h&R}2HP~*YhgDna=r!KTxMQ~ zQj74$=ZsG$+f4s78Obw|&`FmlX^9Y*;v#&?ZV#`gUp+vP?P^v3m1cjIQ2vKbob|BhpSU!wgPWoP|=24Vi*kNNw$?Z3Hb`zI6st+0~y zU-TxKnb}$XUCLc(|FApw^94eG!bF6(?atX=81?3+X%eH~M5r#_M%4kt44`^>;6K>l+2S?G2dw@N&RCY7?NbM}F!ySt$ zx|(TUy7G$`DSMrBy9)3h#jTp`CZ$&Rd}OJ)8Gp?a@h=2qLT7XG+hZ2OqJ2r`w)b%0Vj`Y>gTWm4CL zmjBHJSO=4KY5f}1SCA}m^DFf5dSIX#*mP?b=6kx=yNOS-^L5kOcIaH!SM#IH_~s`g zyU`S>!&J7&sGM@RwqB_G_r&b_?*#WE{UQ+7`0%jx{g7c7wSf^*Wdm+Fh}!Tp>Wpwq zD^o*okk%2*yy6Y#!NhJfQsS{Pf#KQvzXs5dRW(;atTs%MoBM3A$~CK%1x&tlZE6Ur z!7GE7YF!-fYSSgSvq#N2tqF5$JsP|Mk&C?G-!pNf5%I@z$o6Z+MH}aI-t_9ZQzX_V z;+AD=-*4A1Uh`Jf^rVneK3g)hpU?{f=o7kp70zY?IWd>9#%lw}rSts}LDEU2N!T&3 zkxMfh(~%W^OzMlyfF2;W4(>b=hLvZ)Ev)C?NPkWXw_UL3yOcICS17Pt9DDV-Ds3T{)QNH&quWo)bI#7y~VD7M}nk~?=TGz=q zOGFy`B?Oct4CExdN9mHn;+bo64ai7~jgEug^_EXP!f~En0l4yP=Hh~L; zPZl_qFo!z^NkLOS$e!4qY%hVp&I4LJ7*`^GX7Sn&7hy#y_b`-GpBc!^FSQP6jPm6_ z7{Xp6E6nBvPN4+DGkJ+wVgAi%1y+q&65MByfgSXG<_r=xcc@Jr?k6?$4u^bFV$1$Tl9 zxk++Sf{Og5I+$p!5Qi=KL?pqQo>wY}F!BdGUm(!*PN@bqUQ^+0we@4iDf9^z_OgbW zvPFIww&yn`ROKa_+}xeLWCV=ik`PR5g^6s_C)v?jX%oy5F|6U^Fjn^gf$Mcd+FKXB zvDkA-)$ajv78{xIpZF5e{ffTksi=S6S_9(Ou<-qLDgZAR?zLMiE+xXaD;)(K6D(1n zGF9gYZBzk87{7E0QCn^fI(pSYI@aaDCQ@5Wy1ritadQmQ*E3C^rExrhWj2{_P6W8{ z|Nh>nw^OY^{PS0B@d4^0a-!U;&=8rw5=rLJCgd5c;` z*jXi9=N>9ciYZCU3Hwbr{FDdvaZKa^$1`4sNY)dv_>H*i=4czHN0YgzgmIkWV7jV3 zXaWOEk&ZIUU}%OO!FW$DuYcd*E4;DkHU#?a?ttvWi{eu7M0&@=gjTyUAvn=m>azraXdsAh!WwO!+dF!AZd7WJ#(bQbNu00jp6%{S0YhoHb1A$;-Lt{v{OKSsI+e`Q}0fuI=?tz|%lX&2h_x2ZC z+zXhNj~i5OdQ-{NJW#csUEhWC*rRzOBuhm+Uxk#2l~KoOf$A_R1IXe&05(zCo}cpq zT>#oDl?6I6hZH*Sm6>3vOfEiVr4dVh7nuQ>%jFSTE_wdn z@5_~IbEPO0L@gp>s@IY30nD{BFH!v^u29~VdXRig3_i@Ea%9ifkU3KJi4E6OY~k3j zx?(qT#e&U{%A341%yy~AMX)hI24~$E?|3V@CwtkOgVq=pK)I_ZVrt>CljcQa#mI6J zHhTREAK|&rLrz2U#Otq=cQBsd2AZpsTf3dU7k>%hPfy;0q|}tve`1K z9X5hxUdcW3rVF2ph>F%F{ECGnJ3i18uQcde&|Fc>AYJ3fRZ&PY*)IAO1HF}V?v?3J z<5Gw@efrop`IS)A!9TKw?)M7{4srB^>>D*J9U6AF98_I;sY2nNFurfRHJccyxTNtG z&c&%<944eZIVf5|pwj4GM;z%3}Ed_D5 z%f-)vNm3CoaOjp(sMn#68zI6LScC_c*u(E>4c}5VQ4G%S^tB3iy`zaE9DWg4(N@rx z5PHg#azN__h>YaE-6lQy8Ed^0?7Yvu@&VuX=qR75EH1Ik_(4z6A8+e}P`6gTGMC-5pi=bLeGOJ#AeSaH?@nRaJ`fEcN?R2$GXsN8I)(Qc80`Ye)$F$~X$!-}UBtRy%b95Q09h(%7r zXNC+XB;4G3@f*P3#cFBx#^M+a%X>K)cmR4f2vzS$N{~=jGJB=J6a{+A;1rq?lhQ&BKY}W1S3$wP1(X59;=W><$(ADvSKx#hDZ># zh2H*P-(L>%hU^KS>pXWKML?O9nqVUQBS7T&4H?&c6xx1g-8Ct#+h5osn__xKouM_3 zuh%I)4frZ(5LFMw_-)1eh4AJE4WN}~=idr%o<6fOh|x6W}3o5gks z#?6&YC%jG+SD_}8jub%isY0}n{Il5Dg7RXFk=JTNTY7p}gEsucXJYss7fmicm_(em z;a0TTz}^Nut`t3+mx4@B2bAxrq%9Guv4o*ZGFXU*``~=FZV&s<>kj{%hcCqm4}`mI z#uPK$ZzfOb{0e|vo}T}2U<6qZJiPQ9VjN#b0a3A&>^;HegV)1Ubd9M9a?xxgwt6> zTAih?2lg!5-7hDli3k3j?ZYTZ9BzpeH-HILKY`L8gbM>bUqE)q%DC#PRXBZ}c-NOB z6K-E%5WV%T|AMgpW0&?HKKoCE{Zl0Uzv#SPd^pW+mW-YZojc-e?;Tp+@Q1dfB0z_#JEikDap)OO|3qIJb$H3ripV?buRm zzE`)q!(X{&01NQ0UsXehAz_|_ zz@_;E{ISD>$T=DDkfb5j!#y<`YYQ8dcI8cenLuW}cdnOwt`$1G#@Ld3wjvMLHz?k- z1B>X!VxbI?u*biGP#*N9BSaJ@`qJ!oG+vAJVp;I2)t)r6A@ieIL}cF)4Z)$YLL%^p zkamH|MaCKUEiab>C0p}A;0y~sKd33*8HK^oF@FpSblPrQ)kg-q?8rz-{K&f~z52WWUlrl**HVv97}ykTKEqt+&t0PL%upl<#;!Zi z;TBBcVts*w^t>8d?v7F{3=x1iIHWi%Vo*hO{)q5jwx$=C)d{o483iK!enCgFDB_0H z&`>|+Z{I3I8Ht5*^eI&VKRqa08vw^pwHfF9sAH-nNpSFmgz>%55pu$npjD7enKbAc zcRRU&u8M=PC1bn6g*bmota&33OR;xA0j8nd%)82xiodZ7(t2)Mv8t2@J|ZH~QMA8n z9@>x4!q~e(W6=W@Z=Yj-1E<3tSv>UTPSNtTsP>smQyGSFT^6(6Vo7xA%dRuX*x#y}Df zSuM!`%9T9ujz|^gRuyQuaSk#=0`K)id|^E|&Kp;7T<3jF6;9>*9fgE;A2XkpS()Q^ zp_HfxL0EPR$3BqK85+EJ2dudXEY5@mUX8079(JdULHVQk0lb3a^K$+xgPx)pGZq2E_k&&N=o z6@CIEn822{vBh%P9QYGbyJ%9jsGXf|y>{UC)4XKDH4ZI+DVBcYJwKU2nHy!g52jQP z#&-g}9rc%+4&?Ebo|7QL?vJzJR9LgZLXk;e{Pv;^9K4i%T+5JW_$-%kwW}&zf38KCev6I#V8UbE6N2KQCtt^g?B6D;2>#-fGVbRGN4AF2X7|oL_;WikJfKDr z5N1pMHuKJDQt)uxQ;0=Vd0E_m(0uQ6c;d)v5sKUom6(VA#r%#GxJ4YlqqkBW^^y4; zcX2tNKYoT!sl)<$;eGLI-~18ST`l*^+CD}J@23_Ld(S6TOS~ZHRgj@8)HPnW*_UuP zF!Sj%)n^t7Q+9qK6k+mZz`-(iDR1VpQ(qL3>?k8s@yNJ30o8s!R>0G2S8h;K@GDM> zr)9=?es$9$xsTi!FbX@7q0cCt6cW;2?vI2iVJiO~a|;UQY2AP%7o(@^y47~Oio=ni z0zV~Q>xx5gZ=3pSdRw=NpATIzU#An|JR5wzk*F(lh=M_Bu3?&^V!#UGgCDmvd-oc~ zI9MF38KdAfvj|P5WXh%eE1(#d#C?R441g4_Z`db?n^p4+h9OgSptDuMTTHS&s>2lXzy23{Zyi@<(=7~>(vpIJ zAl=gJP)g}8rAs=bySovP?h;W!QcAj8LXcFEmQuQv@7jCgE%&*f^FGgc&-cgo$LG&I zd-j?&Yi8E0Suxjejg^oKSMn^!UF=>$8dh27G*mK*)@3^$3Uz${cmerRc7K9nC02dq z!Z;$YI@fXyo44U8jP%JD35FUdB)-U^v<65jxoOf~*a!&lYqFe5U?GTU|gMQCiFwWRaD9-rHuIL%+c*?+LHYG`oWKLO-`aRmw``bN1 zKFub5bWwte=eNA%F5Wp}IvZ13C4xPUBzCJsuD8j1;@X)Zf!s{bRk_6QLU}9(~l7q@$Dg$M8{wN8WuVl#5$mJgiR(+vubEzEPTfTnO+PYI>%KQK`|42+X>5oZy`)Hj`%IH*-!YblbTX^GBLN>_ z)`4Oevix2KK33zcj`@OA;`9U#L-i?K!j%X6nHI=D)6eXyR<5VrmF=}L7qZAAs%;v> z5?PShMor2#OR=&3DXAS+a64|3umD7(f-jv|g&c8BwBLq-NBqG=y;Sa-IJ}42>#xI6 zi`v_Mff}Z>URKn(V218WwPl}s1AGAMURYjH|Tm}~CpC}u&K z_->NBPtKym=bXR`*f)4(%YHwmq8C04LgycP>tTKoJsRC?!v zD$?mxhV7QY^ie{A{ZEFzF+KVtUysGxq>m<^*~q*l+ucw#y|KkKN`ETJwM%&a!eOOJguIqqg3PrO@*leUY5+waN2T`eh5rb(|66A<7$uqQ;&ND1=L1 z2(q?vUSH8w#4}|sV)%9_>=fSX)J2=|an0cksP%rqEvb(B^F-HrFQPROv$uUy`fn%c zyGhtnB@0*%nf5=*Z=`Zv*Ne=-S$!|B96dYB&~K`~JzvWc(O{(_R98Z9?0D~8P6M8p zyDMd&>yj;Y5cn)*y1N>Qf5gX(i&3Qg`}4PIU25loz~3jEoJ?pN(zr38W3$@cHIA&N zIYHb1Q66Ei`-SYpTqIgKd{Q>3v?s3Jd(bstGo5$qWO}jU{p-)Ku4Qw8*!^zy>Y#kq zL1D}M9A2{f$i+{@GM+7|OLyD2Bj(8mr=O1mel({AkqxGHFg0x}c%~H!eE+#y_=_=T zVv0I@Nhksj6|CBnhW9EUs+sB+u$MBW{g%ngc@E!0QLce7lO~UAWnPhVmqn{LS=saq zt-)V&#C7yRF_~aYIWzZYQtW&1PG8{i>Uy5CgG}(&ri1dgcfWdg7HD61EazW0mxz6d z5+_QP)7aO%gcqq|RF7}L=SFgXwUQT!wb6NIIT{7-U*>uDgmTH8ez}I+Zam ztH}CT`Ua=_=kQkq=br1@aEW^^y}DTG@8Xbj8!`Kl_wuJevC!aAZ8}b!{Ku|g17}Kq z#iWn*z2g1{>IvJy^mtoxdrRTOw?A#`BZnu{bURI~J4JByizs>J4&D4R)exEFS4vM; z%JtgFmw<5o5iQ*Z6OH*NKBy6?%;(9xBEY2>3wOH7vN}_4VQh;Oz9;AKuH(SzvM+29 zyXNyf+1svAoF||@X&TSCKq8Bku(s9Buj$wKmJ{=IpMMeF{oBK%0{=KX3fye`zY6bQ z)&CjZT{#bWHPZVN()~AK+|@|$UmqCdlDrxu{&|Y|A3c2p{i}ndz%N_k}Ai^!8*L?h408AE5_>!chuJN7y$kKW{3x<-DgNM(KmkYF_G5x1`yTT)- z!cP(FcOE(K_5jZez3x1`myl!u()4Ep36 zIp3T#g$DyBW>J0iMwyXj)^%yKNasqLU@Htz{z=(~>&LA3!j;VYF#Lia%O6>Ubgbd^ zXIC;vZika%#k+glo3EKEeY;wU^}?X7t>IM{iJNZ~X2vmqign?UEj6YkW? z7kfKVXD7wcOWex+y%RUniwA+`zJY&u`-o)&4c#z2eMKwR+1!o1!ZF!L1$$5a( z!*%Mu{NbzN(`xLrEymo)v**TSKX2-|HcQ-l;KFPbwUHe+Tnd_}WbrmeMMFPo?*@Gx zQ*45k*qR@|P&pn9EMOR~463{qnk$yVLB}my@L8-e7}M>LA2o}@vm|F=gq`jc)wRy^ z!yF32lUxJ-$hmXDClmo;*$M_D4(_VGCW-V@G(c?jif3=Z~&vR&s$4%yYFUYAGO zr_$ZDI>;=2Bh<_NI=y_1I$7`i0VFib`mU3*Al@idOfw~usxpb(ble9sbyZj15ys{E z(=|TfHoek0RVK2%_ulU?TR7|l?e8hJl9L9b5dXY=kU5lE!ywOFaoLmccvx%Snd zXZwej?62mk&YK6FX(d8_Eh*C!i$B5$dFfEjH7s@Wh?f_0w{g*woN_1KW#a9p=wDQw znhK~?X)p8~Of+bY%y6!N2R`~7SNgWzHrF`TDibrXe_#L1EvG|6#Nyr5AldA44Y}7_ zJ>5Lq%}U7VbrzOj2G^H_eosxiSu|hc;R!Z?x9W2ju|qM{+jNQBinqLj=7imtiS`15 zGBKx%c49?4DqU^f5vyL$EfC7fxTSKts+!*ph5ZNW8o980Y|;o>1+UwZnk{W>XfJfv zGRjEqVan+_&aGFk^_L3>YivE(neKvlKL0!w6HYhRdveNl4V)i6_@y=D1Lc^O*a=g^fXrY=Jyk-%LGzx)4 z^As1$2c3OPvGdQ~FNd>#)m&%c)Y1wk0WHp0fN?l95k8Qj$h*EtQ7s8K|eGo8Id|^{n;rHxL;tU8l>I`%cvn zs?=h8o1!MSxX0w6PeejM2mO3I>-Ng+4G9Zd;X55jsg4w&CVKL%`fnJ^k)(mIh6Zm1 zNj>Y-L1~b>n1m2U_{d@un>DGJw?DVIgB+`9FhEWH+J`vt3H1&O-{Vq~DauFj#M_%8 z({k(#->yw0yk>@g^%s)dW1JFVH3x2r7=8V8{Co)S-5okg9Bf%CWRCDBgTwk%U?{1h zq>1^U)DHKK=?Ix!thW=6y111#dXys=#|+OaUAgv9g~XXvW7!zH8=Xh56GS7ytM1R= z^BR@j6eov~!S%eC+yi)5Q(dU-)Y)(drWUJDBItc(T`V*c_qHq%hZ7kqUHp5A$U#N9 z2W==LC)R*Q`x&) zqY7Q=XG|R+i>HtSp)M*1oLzs^5(|!TISGnO?VVmA|67Bo> z%?iGoLc{sY4Gx`ee4VM0(l%1)X^F~tLx~%{krZ9iOZZMa(JV}h;X}7;s@=H)bS7me z4o@l{TAYs6)IgPP*4?xD*6|Qkc#-brq5XES%*~6~<)ZIRN#&m8lHThbGEY&t4}Me;JP*pTkiDtB*6BfRM5#}QYpJyW8$oSJi~$CzJ{ zOas8NOZJ|GSW@a%HASfNE=^cZPZsKby=|8KWr4fMG}uytxuxg%QcvpU+@^+1)f)sZtB3CvnMlt*G>g6UkV>H6*_b5BY=Pk@ z#cO+%jnFrO>nQl~i8$I~y2S>O!Q(RJ4%1Ds?-YAL|1(6#g3l?98vasL{+&QJLi zD_*^g5lKRgnqjaA-GWYyBl5KpFZ!3xB3&+y>itMEmSMc^ztXRNyenKRFdg>YoSM=%s$w22qI7&`h{Sh~>qee<#<5!rNnz%6ttgbZB#9)`)$WEj zj{k70>g4cspH@f*Y1wRm#{6AP_k^&JpR-F5dmYtG-9^WNUEkv;c9|$2$ym7lY8yT% z-2W0IeD27e>a^&|g`wC{;)AIvnBDPw$F_ppqc#u6$Iu&8%m2pjGg$=MV0ZQq^5{J- z;ac_Q5mjM%6yD-c+>ggb?bNhRNJRs7pv8MPK8!GMbWyk1iH&Wg>$^uAoVyx?g6ff6 zEI`{i#zE*$zcjd{TjVdta@#`VEhMX`6sLl^je2=CAEC6wt@Xad{4}MXhxGaTF%LV* znJE67m1!dbUKJ6nGcj5P>!osbqnN-syCnazVj^WniDM64!W~9kLRU!*wDdtdq?h|( z^J|0gx736M9EA4tXxY|GjdD6Hp<*_BmT7*s7`7V+nXON`Z>AGA3a_FN+{JgJJKWSID$Od&Xa}s>d*Vz*!qs#?_popo#vBhbdk2fY%u`5+OD) z(l_#S{mIYg`cvU$;=uwnUqj|(zrJ96e4d&j+1=FVka(M0naOJ)_?GYdA%uso13W6( z1pIl;b%qtl2$a4?ram;|Dc3L8lLbG^ZwdMTjJH7l_CzQ=;Q0IFwExkGP|$yUOD1q> zz`u&O{%w%;Cs6wPMFoG}HS_nt>aPIqKZ~pW<*81d|M+c~Ta-XtReSQ?An#E8eR%Hz z9%NB$p_^~bJ$^{s;krY-)-!e|ors6;3hwBg&hGgj9m@FYet0-DxZjRmPD4F+R&8L= za=h>~o-C1wow1>=xv6{ve&?T(kAqOlu?HPyOXdfT0VX>xQ&1l`!!h*ff@A-DgL;(^x%`NAMqcg;3~{t~3I z24xA1mNBA1ww&*cI?FExayh10uZ_K<_=R3L8lpa>#y*=G3o{~%+k)Pnp*O6`y zer0}6sv|~R+{3lAF~#WYh}CMI+)a>|A7H2Dfx8SjK;h<)?w;;S#HI`0ce+j!Ek`%a z61-D^Ip!xBe1Jc#M;C%ESMcbd!0Mikt|Gc|!h5p11dIn?nj&E#F{}x_r5M=npEX&cz?b%NaamYC+qki2~+pQ zxo+e5XEh~HyZ&X@>JsS(W_%J4Nq_k?v8Zn>G!srX-k6*dO#WD?IfN}zRev!2NyLn1 z5t`-QdHW@Y;pR0G32Xs*iU+1a5-*b?Sv*jPwl2C_Ssis^76^fN^_hJ^dtlsq{nzLV za2!ebkLyhyRvW!eL=8!*;$~G}`Z`O|6Im#}obn9$72FWxkmVw|F4Le9yJZq?@%o49 z6J|xth6Ew^8MlZrtGprSPuFC)7QJZc?ipov)e?)V;H3l|`L6gGohiK5c`}pcc9Uu= z`)8M7e7>vyL|%XXodhZLkBOtW{+4IE>$f*<5Zp$$6gR595e=N+$pK!D7e_6BNP@jO z5g}Z7f4?o3*oWISD2sW{SLf5*YBOs%Q}cm~`$@UJ5K>N>OvM-7cGNJ5m8Dy592;iP z$2h~~^3NLpJ})UUEtb;QmkE{yS}8{!Y8{l4mZR>o&{5Q%tZ`dDWn5&%%{>X2)IQd? z4#b5-5O&~aB6HH+TT*zW%NaQ9)Twv)Y%_-DgBQz$-j4%D<%LSN)vo$xu71^7h~}$Q zhfmL<)BKGj@7`bD?6IpINOMZb7cWx&ifivlDRGUyF-e|l5k;a#+Aqt{=3{_ba$th( zfxIV`XH1CrB<-=B^9?*)*|1_Eri#{}MStt_z8AG8f6XLu zTI9O_^9hwOJ7MmylLE~l4e8*V%;WU4Hl<~=dE@{B2b2(Uv1sZ#dm(NG^b{M0HXPCQ zERrLu?~BN`_}^9@>E4tvl7F6NwKW9vO=Y z@9&GSk(F*qG?cW|G-M%TCF5~UejXk_8=YXV*R#9X{Epu_{$2zQeV`^jWKyhw=mPWu z-C*bGJ)HM<1MusO!^e$g6`b!IW;!q8sR?>ch&XfGn09k(ik6kHRk5%=ymg1$f`DwF z4t4g^rdtll{JDQEvnc!P=Fbt7sCC~=a8Aub!P?^()^vtVKK!>NaD~Qx2@4tEKZ`T! z)<0(JqWa{7ar=dvyS$WtPUUlYG|_=m;DsB;tyHN}Vp!BFbhu|71dG(q_?V=RPK>f+ zRbLIGavU*9s48W& zKpf1%kF6quqb`Eltn`ebVWN<_$6l)BwUKjLrQwOn`4UKx)zdZpV0;l7e?=|W8rO`9 z)Sa64Mnd#(?HYM16+!EXzS+x6`v&3(@_cQ}v4|eb>^Auh-5Io*Z$%)LdU0G?w(2=* zWMi?&AX;^9y);3c5r>-=?E{T>K+VtStT-E{lLTpgGCAm$j@v3$__@fv$&;d4(`(n< z@Q0X8ao^)`3rbonFshqUqjN~C4o<31y>|BOHsQ=U6#ILrcJK2({E-J{cCr|aW$M>I z2S+Vq9Za2Wv{31@59OskgV(OWKrmT zf4!h#hIFILb06t?M#Sog<~8Ztp6|rEmu%?jWXSN7k-dM13z~t)jx5D zibb!PU^S(Lhx-QcPC%be1vv#0_lolRJa}2L{XD9X%af}xR|Ip|L?qq))3O=|*VNF*bo8pq*3)$VorYfb9=_?jB&UYbUeB*%^7HQ8>LLr(H?O>PhL1o~7=__}W~_q%HQ78PUZ-^iO7Pv+p)uGuT)TlI-$P zfav!{q_~U{q2{sttEK0rO;fGk=GxIO@{#!>B;$qhKN;F#`Fn7ljSmw9;gyVgJ;t>{ z8H#bJuywt7DG`wLT=%T=7Rc6#;EhuA)^ne!-4lnWSlf;(86o&jN^3UG#Z*ozcm>({ zb3V5^>I;(Y6(2KI~X^d{^-oLq_jBYSufQygjgxaNFUrHRl5>QhlK}QL!)Z zW6vIQXg2IN&3tQhHFoBw&ye(bJPZwH(q!B#)^w*7SFP5vGtc-i>=(eB2u-SDjr=SPwtq^F>`i^nH#0&MG;1S!Q7J3cuf z_&-Q#dGLkQ5)#hbQn?!j*!_KdSIyr!f4#x#Q4CZ9?blfRxuebj@920spp^ zjNGs`@?x$|!Lv#?rZWhfP4SVO2TPxr%)1pSb_L!s9eVf~FS4fO8D}xbNuF_IpfA)m zs_p2`4SV^Jv=66I$$7+RD}|6!?Rl2_JdJ8fOS&g~wv9K?N*sx^ll*FexobXo$-YAm z>bRvLf%T+_l5DBCXy(hkr|BzC2zKRhQL)Dl8|m3hxR{l@_wIZe$;$Mfy+`OUFB)1R zm&N>q>dUs>yXdGw+eW@eii|VbVj8R8h~Bqr#qZpe!n(*i=dZ)X<%uqFGy5su=us-8dnj*t7cfswR=tYft?Gux{y%W1AqQ+co&rhxhsP6~B8s zP)wN*HFxIS^`GbP9c3L$YN)@H>Zn`D{*pH?cSYB^IpfSR!|SDlqW-E2tBuzRfn7YY zatP03>j)^$I}bxQv#w$;#;-fA*kqOeO?{o@UNTXc(-H{)Ju@)UWC1w0fAD=txPq}3g2jV8L5{P zoW0R*GB(RLGRvK8?a{0bo!u$lc6me8BH{VU+F6W(=%9p`=q+()>kaQx$*%)sbGj|Z zRNUH(Gyfux{I};afrnoI|IxY3e*}{7>i>LjclF`gUojwXeLR>3{+tlF=I+Y5 z%&QOauKwBJmG_!njW7T9aPO~c82+;W^Ix6OBy-JiX_#c z0#h$aTBjDImnq79L9kQHpWZ=oUv?=t%*N)|xw=brrg(`2kfk&cuI*x=t^eE zjG%?iyBeM~OM^@w_HJuS@sb0#b@towRxt=NEt-_CWQ<%NcUPD~!^gT~7V#`hAw0Jg z?M)Xxa0y*%;DmjKL^$L7XnvpMDI?ZJi(mP<7hzRayN?HU6Ur4F6R2rLdT0(L z%al+*H$B0yOuP74^<>Brid}&w{K_Qf1s7AMvXhVdZ1MI3*;LdJa8eFgMXLEYXXO)x zlEThab2(Oyv1HWPNLJHtePKnqnD_jmM79gU4+;tyH7%U;t(??93O?ag@3(vu`zFqr zDoZ2Rw4y0jbV!_6{cD76d;zm6N%sNu#rwuL6Iv2t#g(F#0?_lWJ&;}bYTpN=wpD8@ zFeTT>Q+jv*n5-0T?Nyg>F~TnS;wVD35N}HsJXBh5ny==0M~pOa?)xRtw8R~R|d_|t}iCrH)n$#dBrI)B} zGxE`=HX`8U5~X%Q-VL|(kk8j~>Go4HIagtH3k2VP0=_;ix**6dj()~-zKF9k%wJ?e zQk1XhT(-berHp%!)m#_Fp)2TvdPeW1NZsBOZ^m?-#Q5UHBio?PnW z{3nym29w`xz?aTA%7{)Qp8G7|Vv690UKH89xG~%n#Vq<#s-aunGLgBCO$VOKKzF^5$`9U7N1QwG z3kjAx7~T>WFgz*!WUKe=h?DDk-y;oExkmGkyk0r&IK1hvz~Wj4DkAjJKgPPPGA3M_ zWovbqMeVd54Yfym4X;P(2u%)dOyWABCkj#B{e?~PEa8>WOuY3&9IE>z$RcaWl98@% z8`p}{uYFm5Z?->;pQeA9a`mDR~mUXg@R?~Ml^az-cQG&V|*_()loB&7Ib9ZpVd zo+(YC%gDY$-SNi#F)k)HnfI-0?MX}9nPj>59V4vK4)lJyM`7@q{W>DBLs=T{yN7Lw z)-OHV*Q%8oxzHT)nq>!MAnI({*B@Y_W;Ev(U6($g3Yg=%~EpzcB$Ghf0^6iK= zjgqPAE;OkNxRz|FP!WBpa4+3#HVh+Dg&)`9re_Sd4a*yE$>3Rg@*ZRK>waIin=k~= z;)Jk8Y5Ux3J4XCPU)-br#baR{7vF%56xoiqGkGIe>{=d8;`ukVv#&bOg{jk`r427m zr4NMP;EbgWtul<>{n4jKrS?@7W&Po&>o~c-L~R9m2_EY`x~l^r+i7OieQpJ}>A1L~ ztXCO-VpJY^d>((?rBz4T!$=`~utGaTXCk zTI?ce1{KD3cf6$N4++h?sraUnIaKCsgkznpR_2VLi3ol9>p2OfOO2rBHSuB-XI$ZZ zgRP&F1dg2nWvT>Q+1D^Y7**LOSuKoAkvP8bhUE8+@6!#6Qv#cp7bNcX-%lJ~wDP;%dKTTk>MQYCmC%TVd2P5;>-v}+z& zNr(eIW+?#!pQqbuZ(r5_Aq6uB&yKR7%{(ZwF3AL6x4=61wEShIeY+cm{>!kv?|HjJ z7aG1)vsk$5NNGYS7rvjxoG}RAyb8$Q?r*g)`Vr8u1Z9x!S+lF_Z zC)pjr^h%FLGcwfYx3R+pZ_(7m(ewSF{TaU-?HXb^|M9bX$ISxb%va32-O!+8jYsWj zty6m3eMp}wPgApZR8cBRA#UXqK2sW~i`tK!nUq$=j@NY>ix_g5GF28t3ToNptlbC# zf8KSnU3x{MNpgSbF>dgSy0=-|da^%O-Uo1b8Yr+ESLHpCUi>;cr59jaM*d9qhs?(Z z#?Ixv~7&~Jkoy$a-CXIP?d?ec5Qvo<}QuR zX`$Z#$R^M-w4rcfFOgMNF=Y9p)D{P)oH_ z3Qm;>G8-di^ghiZnjZEMQt zO6&a?o5`9I0V{{J9TM)=*HUI$`-e|Jvt#P|BSKUVzu^~cYQ)5Ex9``PM6{N1X})>a z(&zeOjCt5j_~drk3)FvcGX&`09(M%&{hz7< zfz`kMJGiS+)77VVz>~ns>%+MuAvC`)8wXxe!vj0ys7mu6#Z|!3$3Kq~FYk_k3V;#k zA!)F=BrTsfn>qqf-;>AArsAf?b|$94m3`Pw&W@&!ZLr;EeAMNfWr)GA`S2J;-3w>k>R|1Xti23g^?WfLx-bIGpA8M89DYj zTd8|_Gd>&jBNE%Zvv3773>K7+zxd->ASI^;}@XZaiU*bXTq4mfq5P^U}kI9668NYwi_ql(g%$>2CAO#tWu8 z5t>>`%==ZH;#^~!-9RRr>v%`N+E7{a!@Q1k6MT?Fdb?d!^oF0;y|PGW$@w{&sJBgY z&z7Ljdd~bZCmNdKK#zEFx?v&0cg#k#$QaLhHVel(kgCNCd>811z&0XN4t&QC`sg!C z>faLiyB67wf?t&+1%d96BZK@m$5-!K>r5XHr+UR}JQrF*MJXQ=OH+#;sxKWaDooI$ zFr3Uuj|z;=G5VGvg&gShM4VhClI>8NsOQ89a*Luebs;W!nIx==L%$Unl^K$IDspQ? z8lqfS<~fz-K+|(A$W792d~MV6LXM>|CC(h*5?spFADtzjV@x~O%=}q^hqLqz)@t0$ zr+aj5m4~~Tw=SXyHs0#GPrk^DNvfHUI&nM{UgF4KuFhlXVq089c~pY2NF!Ht^ZQ}V z?QT7>nWr-w>e>(MxXKJE(P`-#j0gy`%2Z42K} zw%l~s#+VeX-pjC0F5E%SsJq*HyD?C5)m*)Z8g8=c+Z zo<--~y6#^->$q`~SzfJk{}6M04R_^%;O?7!J4oZNTfWzL-RpMnhKpHB`VF&5B@%m@ z6|;>u`x*}VT5hV-9sP3`3jA-6Gr-lw-;OhY{&&Y2;MM=R3-zz`*_BPG|4g;Pj!poi zv32-B0-Rty*mz+-!LWTZI2_E&%gOr(ez^yStpnoW;pCx#KtY_qd$IUo=_Lfr&B;## z^gTb5-8XjJ5@Lwf-z~X_>AW}p<9&T>#zbXJ(1O)^JKZJ)V%d z1L6eUy9K9+D7}*Y>G|d93v3;JegRGpjR4Sp5Df^#%?YL9=Z58ZxS@OiAutGfl@XV= z3|j}x55CHXOS6it1K|Y$!{UVsz}NxL3-Iv(?D%IM0r@|tJlr5&V5|rdR|)-}tNkaX zm!vPhuGaW_$@Lt!ESPyb%>w@SPa2p|`iATT$Clkd+2UG822oQBKG z|Myb}Fc>HeBK?1>w*r9Z^TNl^3tM=A_X2AJA<*!p__zFj*D8E5{kO^0S^@&F#c)X( z1Y1am{8h+h>sMw4(JNSA5wt+?noxdzU?p7EhhzV(=HC^`$wGD;< zDG1C9(1GxRVcZ4s5E_19nSyBqATZSes2q43um#Ht2k`U32yla78VAe=3O)J`ikd{Jel(p%D;((dXj<1KI-02ZeP9 z;2Ho2+72t9H32LAFCPdGKa69rIsgV3 zD207sSP&2&&@(7J1q0>0zz0SNUIxPhWPumPHXw&6;Ro`t4-DfsjPFXV|JwF{_Z!|{ zfClUvM&~ykEDr{BCNKkloCC50E9ZmdK=59I;CZkBLM~x=d|+4#;}(DosC?Mm!SWC| z96<|46;U5fA6^dQA)GqAH3S~?Y8^x`F8c`U-*3+R?mG+y<0_o9mw8y(@87@iV83CU zh4B$SbFlAAJbpkP0GR=P!DkPc9~d_1k}5y=iUeH79N0R)dG+tUFSQ0jcU)Pk{J;tV zBpRMxu6&?9xbFSERsmkaW`G+eu>!F528O_762?84?DD|*4gI~=fnG!5CKt|K#5#x9 zy`;_ug4MX9SKxR6EnvOE9D(0I5y}D4ZP?)cYwpi)1TlWNdbyhCgD)~TW8lppYFt9$ zZ6P2KKA46;)ck`j0LS2i!WJhV6t<)<)f$`@q7Hj9ZqzR{n z$RpaiN)rJA!|gSg8$KO?;RWn6@IoaJVETa(Bh(Lkga|x72;5tTnKBUE6$1DO7%3p` z02CC05`0XE`j;&LrWR(VVTuooXaRundMh82r3&CjmZJe0;E;3ji_=%pp()LO2|7 z0p^GE13ssJR?T0r4Z?Q^1HlO30>D-NB?JVEy%0V>0s@mTFrbnF8wj~9K*TVJ6oCW* z8Uq-Kh-ct=1PKJrRWIoh2Oj?*O8Ef)i1#usLX`e*(yM(#{ z3YU3683DDR+<@R9TDfc&jt^5imsJs9L|}yIID!rT%wK{0nb|+#=RXWP%#tBY?w{PH z3BF?f{|SM|1#mO?7lD5w{ZAo(f{m*+|3H7Y_Xh&cA&~z75k3JT{R6#%$_uDY_)kR0 zfk>|gVldD7($d4%90CK*A$UM_H9SGIei@_yS^>~PfU60tP(X|U@c=>+K=|Qa0xWU> z#0;=6fT;ld5Ww2OQxJmFz!o?N0(0+yO%B+G0t5(5VDbgCH6TDD0OJMsm>__<1{y)Q zEdT*P9s!Aig(NW30)@ccBe*gG0m=@LEMAx&c6F%#B9AaK@D$-9{WJZ|eT0L9Na3#0 zA3^(TKLg=1Ay@-v8+?dx3V<1g8DK!{0ObLU4~R7WY#BlRir@d{h5<76yY=7SFbbE> z983Zc)ACm6CKQi%0D*x;f0Go$^F$ba%z+Hgn1%TxVi@bp)3VeX| z1^@7ZVKxT}l<)%!5^#|In-mOtkObePL|`CjBIqL^5C|V^O#(4J&?3BDIBkIbWjWB| zpWGh|J|GqX+$wl_N&Bzbden3$IIDi%doDPH^&J9EhaMuXL53?_b_Wqf|NBbAw{_jNOYOUY&5R-=} zxtfP@0uTt;ya7HjkOK@E;1B_)M`1w6yO2zBcd2s6a)st<2Jy}0x$s;5911qA_zE4D*!w*0G1li4s0RA-7!Eg z0n-V~ohi@pt>F~qL z5GexVPZ=LP%7s6h_&@gWzw7x`_+_6iM-A&4d<5_?<1&x{T0@K#3~&}uM2K+$Ed#QJ z*c5~-G+4+E+dPJ=df@zk05C!bT=jwgd4mGV2#5dx5F7#KxFK{Nj5yqt19o5mF@pt{ zfRF&f2LxI`XW&fc;Q_olL>7^P0QU?Q>BD&dv~!t*bK~lWU{AvUxdw>B<_Z3dh%c|q zFAREF2LT0?G;D7HMjJ6J@Op6C@Ep9HUjR1y{6Gyrs^N3>rwqX%0XQB!{UdvqJ5@A- zg4kS$;|l;sc%i?409qAb^6y{32F&j)uugzK&4&N`_lF!xR6PX8btqHb&|B+`KlBwB zk8X=*Y^Y!)maQ4NDT4c!o9|G-i#0^I@?m%eomM4Rf&ha~Z|Np$r3p?`LPOJ!riqjijNTjJhw1aT?J4hya_dQab!*u9)KyBXGXqm4EP1S`LGRXcSVsgC;H^cek>h zC`!{c(jW}ZXXTK%b#_#X`5pi1VM>x#+yZ|St`U`MC}F5E5RM!6NLdczn42$|#PW%; zl+T4Wzpec;@5fLR4*+>MEC;-5~xUUGhO`0wGY+jA|^lI)@3tO$95C= zCeOL88+hO%haLS4x=&Z0i&&I0@w(I|;Lpp=d;{aeX%pFn=D65Ta~{p+fTM zzoGgIJ9lxD(?!U(pp4wXLd%pk=^YNBBSezlFt@lp%8b@={xlIOwPQ}2-2d^#1N%A@ zB>D@og2}vdGI12{b>Z_`fteYG+kTcFr%naS1eGH1u>C7hc(?shHI;bD8B~u%s6Wq( zR1n7q;}h&7SH!jX5*_N+S*u!_*v8qaPpX;qq0S7Mx{Y>KeW8dcKXSm>hT2F{#~Vu| z&kn0zcY4n~jOp=1loeczDt~W3xzy{E!uQ#XoqABhf(CN6t_;s%mMhsbrq0(=HlNx< za)+-*!?subOpm;FZOki#WT)PmPqkNeb}Gk6;44ERVa=if4^Y{= zgKG$;q75PhaX2{@cA1ld$%n zLIvFTf9vh{wE&a$;E$=Qb$xv|fj>@zkvyiv0Ifb$%RqT;j3;lD2*;mjh z!QS~e;U9O{t%xbT77atfWq7UAJ=6(i*556mn!IlBkk_`FuN9zj*;kFqlC0cB$M(f)aF_qo29Ipszm zNv(U(hq5D1yq$xO-llo!{6c-|HTh}agSY57@4ajBjJ24Sy#(dDQ3mLa_%j~OZ1Ih1 zXW@7sRHq%ds%z;SZ&pf4lCqyN$IZzq8dcECu`hZ#Y?rYJ57^5-Xly*?(w;2i7<$^p zrAJ^tA&i+3rKo;b)kNj#ZRphSwNTn;YV@i5uNAkH9LSgOthq$0niS@gGW2icTrcN$ zBa73rgiEK;xhP3oOw@0Al0W^R>$F)8F{a(o9Kb%iCfhMHUiyBgdfMS6m?nQbm50I4 zR%2SfHa~p2v$)|IhD!=oM7&G6s6+STV1CLQjOfbr)QJqYN=YwTiN1+C*vsR;x9z?D z#3+#ZUL%fIJhiFg{&Til!Qs_hAdOerx)N4`WUl-D#cNZu5j#JiEw1h7ERTQQlQ$C7 zo^SSz2zYI!oGRZ{^t4meL`av~`qYY#@hENNPIoCGT2ksmgT(c)^#bfKH`56^d>dXA z=jq^+`A*4RuljgIhH5%TE<2>CP_ycoG5E-KZR+Dw1Epa-5;~~JdaZ=K>z&74Pq~$O zl%(X9J};Q*&CQd^ZelI_#OLb!5xtoEL6-h;Frn(@f{8EBq0`{C$(xutNMv3Oe32y} zCOu@$U*=WYos8~mj!x@}lX1u#Rp#5CI407P!%=t?V`Hn`^q8{D-K}>teH3(Ms-JA1LcPSXic~<1#MhVAN{TuM z#vat9dwq5a84|Rmr(}G~C-a`n=Onn366Xo^uF%K3&Gxz@$Ak*gCC46h`bXbIaX=AC z-0Jof+}hJ|J7dMz&DQ58Py4-h&g;5yhz5L``_^iQrt4kzHZpXB=aZ6sFuO{ORe#z< zqq2;BcKJn2Rrnn(Y@r;Ve9r(Qh}g$3I(TD`|2n7oEMHgoPIB3V%%k-hGmMic%5nRs zo$M&k&}I!C^|a-50&kR=)<#(J%6>jQb~Dw-Z4K9~TI-FYXsd-3yVaG1JwF+7(0fjs zHMG!iGIrtXD#Ofait9R3Y&ZH0YTAlK&KUL>gmRAvO*J^5TY3`;<+A>iTzO)gy;~*~ z)jM4;9w~(1-}QZCH8s<7t69q2A4mLMz{uFW{yjSGmHRrq`k!oExc7HOg2YOI5VOr-D54CH9wM77Fp(AXgei>3Bvwp{bM?*H%jfE zn`p~geS6;%vT2l#Qr?u@INSLi`Iq9hIcqx4yjh4|s*pdj08Z7)$?JLF7WNj*y~RiPLqKXN$z`t@O2Y~}G-?`zCH@d0m+ewC#R}}8r5%ay%)j-K-ObNdXqOo#7&t|CW z^&Q!lEk?~L>6JxquUqDFp6Q8_sMi#73^SG}Fo@oXw#TlmURKSy>8~9GZZ!B@c{dU| z;PnH~+%zR}ick-Q;b2A_4I^V*=HNWsj*>EV#mJnp@&H}v_O~7v!SLm4W9s5dvEDvz z>nX-!U;~pA0f@+w=!?3~Uza~Gm1D>#Ke4(dL4}%NC9GBDv@BkZUVIX#g6cdK$atbU zk#^^S7Ms*t`HqlL9+IQ~hqQN&j_m!`ePcW6*mfly+qP}nwr$(Cla4wayJOq7b@JW6 zz0cYEp0n>gW85)ntWj^RwW`*C_00Kxp83SUQ=NfYn{x@PkDzi*xmnD?X3rvv`ledr zbp~V)U}asbD@mlilY(y{Hip+*(+us`REhW08$r(?g@8L1jzRR=4}v*Tjdl!WDX5>4 zBRR-V>Njhk!)ur@cVy}nIMY%*iA&eCA`ng1pkdj+m~dzWZNn^476Zc{Ei?j)-o!;2 z?UAGA?Q*%7b;+~w+4x1D`a)P?M6kB7zF$!35{jcv`ra5GluI05Kr&ZYyF1b!v7!;X zWpKb?O}2$+`O;LdvY;`i`0_X3&~sVTee_!~V*=S}Z3uF+xIqgU_Bh|VGz=Y5R_Cd2 zVTn{6ZF*(2ZwgiD3}F4>Z)kzzS+Y^nD^3r@b%4ZK|Kke})s?Iue5sFC+kDSbRlsbUy4aBi?VO$5+@tNar;=xwyN!r%Mz$v};>xNEb zY4xXXZW7mcdU6%dt8<~(~Z>kE}v{K0V8`{yb%mUGxS2xM1 z4*%5?tvD>rBUS?8m0uD>w!3@lE-6*v` zNKmG4MCl{PA}#r43Ty>4-#gs?s+C@WIdyJye$NK=(n>gRV9^@X$!b)0n<5H$u-rri z!J0XJeBH5)tVaJfi`!i+Yw_ZXcyvGZ!@WxWvVD{y7L>*ZA#gVi?TTZ-<8)o$Ci1F7 z(pHu@`wqxd`buCgD-co$)CrphQ8YS5P$@$7jt+{}rP`CnHE3fj37YSA$ruHS7XW>y^-fPj;ciLLW@ zcjEg}Ap?7H6ALr*?gou`fk{Ne}}n&qmqd;AtgWnU;r=#7y%psP5@`Be?7=I2XFG-#rfWVQT*oL3I81> z{mzK_f70`egp4dKjQ>$)eplIS4Bt=muhR5C*Pq{el&t^P^=FES_WauGBh?8+iGlga zbTw#TV9rf0AX1T5pnCmr&dSJEuigI>-H@`gD7oYHlor8uOB;=3$J-vf3 z*ORYvP&^yFu1~z3{p0gXh(Ms^99jXS>#xw$z)v#S+0mV^W(9jt&Sgz;{~A1gphrKt zm0x44o`JLr)*H0eK&t$ZYJa!R2h((+kjX>yV)8OJ*B@sbN%cpfo=M1HFc-H zl0Rr(?GB$O<=qHdbAg0hRb5>X%n9$W_`a~dY&;c(CMm zfuHSxtou?4<$y*|E7N0sobN-(0Q1v%K-N13=6^nLcz6I=qxjK%M7aZ7C-z1l{w9CO zdIq+h?UexfO@4=X(*U|`?1zfsFSElYVAb;?^Ot+UFPtE=>@kZS*c!VRT2thX%>i_| z*%wv0<&h7JN6q^87TAKtXIB0P?I)3~`43nMvEi*5+;e&8R6jyUfB1VuK{}JSC88HR zpdS_wIA6qTTQ}N%1;Yg3pQ~<;Vebiu@C~1!1(DXD{KxvOeuU2GVSGrO(R+6L{*sVi zw%{(n*02yC4Tw2|Cr{^pjmy4PLoJ;?yW!~$;e!2tBM????KwKVd;Pf8qqi6GaR}Ws zF5}DI^G7(mMRXMC>}cl_0BrfK4Fl&qA+oXO-~IZ;-vNMl_eDar1wE20T$E{`&g(Se{2PeAr;isYnyihvbb5a|Hh06|rgyH`pnsvD$Sm>5pd)~4q?SkhVzOcydh&4-caR!nIP$g57Pot!+8t25O5u=>7ap zd{&0)RQBqI!_{qq6H2c14&AWJL~TlJQa3{@+@;}gt%DWl_n5b~b*JRHdn0Os33xTC zpB!*_Q$n7Y1t*EiM?!76VJ8s*`t$te%6G zwREiVcVdF^Jc<^DL@!&YC-m121->Axxm9p+k+Q>l67GR&-<&@FyXuh=w8nb}Ug5)r z#!bGMb(U6ir!Cpmdd~GqoGi&0Q(KB;5rZ0o8*^q0iJ#>JDQW|ygo`4YkZ;QF<8UGn z6tg{VP8rf5tuXf+xZ$eFodO!yUQU<&Z=Y&=A|Zm&aDdSZ2$2@nkA=l_3<$6KmPAUt zpd?Ceiim_(#+Y1N;{klwFcsggz~`e|%~uHtXM|y`4TgklwlbRLL2g@ctLjSHA!W5b$`lhM)lHBe3#-%iUUUh@>d=uLJ6#m&&j>c;AO{1jd zV{0PG15;8svNvSAPUEH`o)e9nDL~eJ7826j1T#_2{@m2-_>Bg>G2DWopSzv2u7bxA zp;f~)zM(apH`2=e3^T(TUtF#B)4bSyPUIE(q4XRP1eYA&XINqhm#v5G`*32-0xe_* z?aZEYHZI+lf$~6&b=qCIJW-OY&p97A%m*XXv;zEC7?zybc>BS#|>Bz4guUZ;Z z0FSF`z&Ry_>Dp8G@29;odc7we2(#PZjwxH%dlkPFQm7^5F}l8~ z@TPh_!Rv8l=_UOJ;O#Q_Kq3wSF_cm~@6`UT_|&)#Bl6U_6uK+715E9}poKf*o)2nN zm|~vt@C1`OkHhRI&ceEKI4mT2s$WB;w#-}z7!i%FJ6!Cv%cj&FKoZbHh6z4YJR5Pv zd&KY3uue8{lYWrJr!}mQi+^3cMcAbs^8&NVCe@~e;*@-k9-0m#vf^a>722AOX{L0? zxGX47Bpr2Fjn_oo<F6TZajz(+*x|JW^>%>^Q7D5}0mW#6AhHZc8|0LeXHxn$oClFaJp9tr6|c|f_M~5C z!jC<&8IKUqtmYQ|&CDvUT>0^9aIv@}AB(1;-;q z$XrHFY0ereCL6Rjdqzp5>Asy|OM;4LwDSb=Ug@$DQ)J64Qvll1w8}b69PJD69F%o_F;$4Z!c^Gk|sB_ zyC406Ha9=lxYMk@)vHq#szel7mgx!r2 zw@Mn?J2V5eIChd`sNRYEkOOK-^#--8!(IK&2I`?!3P*0d{iy+mEUV)Sn28gPq)>X5 z)F8wshwwhqrWI-*f8jvi%o4264IoSts-+9$N2_aseNRn*A;t=j5@IW9#)Y8rL-TY1{SZ>Ve}FE zr^i_t0`KYlFNI|kkv>`a7la3zQ4B&3^*DjPOrvwzfjt3^JTh3BGqGa z;%7mPjjpc6@@(Bf_n<$Wc#TizBYpCVCLI%-J&ey3S4W&gMmMq`-_t32(F`Osb_#!T z=0x0w%Iy7ljU`0;nciIfeUe%qDlUKf^W*JmM%`1UfK7IvK2qrqhF{q}z zR)lRPR$|YPp5k!ThJ}!WOb*rHESpLuu76nZvzb^!_fkU07ZmRLRbLXsbn1pFfjtaQE~c%&mQZvAQiOeo#KGfK3PPgIpZ6u9e-$om`5BD^k2H;nYXsP=X!H>YSntcT_i^*v9<{(v118!_|&jL6~O zSWi>T@1gD2kfb3;UN~t={|em*Gw$w&Z)8)jUzW5j4+Q>9K=^DM?aNO{(|wKWq_f`A zToKn*OCr|jMk#(2n4MFr1UF46{0+Un7I_I?ms)GDh?Uk&;Sc9+T0f~>HOid7jNTE@ zh2gu<-ULtlB!>mhH7hL8q1uk+^KcWykza#Y_~8ne2mEN$cAs=}zwNHUQ>jjMa^^+d z{`elS!Vz4(FbNF&dCl&1TW67}YvB=d1K<|Hr`=ISHJn6<<7C0r9E&uy?}sVbAW$q# zMY05k)fSbIgj#D8t~(bori@F{*IY}kAINS6=OIpCk2gFO$+6T8 zTk(k;SlY0lDh*hj+dm)~{p>xOp{#Rlo^hPOjDdz)T2`T1Dmd&1J$8=G@I^bhw-|*5 z&waNHsj%B4>&HaVzj*1+1N^${PuzECt}EYrU$g{5C*yPWUwIDujaM2f;cYQEJtXnq?w+gA z&jO6yj5<)qqB{q2gSXD^xTKZ9CbE_bIJ8$>89CVH$oo0Qj&hxsD*O@5BGeFq}VCfbbk_>fn<8zAu~G+V?G+>3ArwL zOjdA8ysli;92=iqg9<(V-9+37{bx7$i9LI0-l8IR1yD~_eKvwJho9oT?}L;Vt=bIa zRHUWHj^k|#1kC}|WM^KkZ_R{J4AB^gByYvN>di0}%KHl^Wi?qR&RereX9uJlyOe+`cJ19D3azRzW2L-?_!G*L|<#s^2 zC>Ss%Zc(O{68pqZ)@(_>R2=2T{sVc3N;&Wg^#Jvr_`Q~vgNz>{b*@r%P?X+i>JQ;o=;$f;##36tTRZ$eI(=wtTcy$nX$8)uxXL1ux!!$r ze|4}4`KHjH5%ESJwt$EsEvEemB^m_#a5h{7ZBQ+MTzQ{Hk#9dJoZT9ql+7+ z(^G4^)ERw3D<5XbGJ5C1*A@W+{2=L3fWtOX=`_+=K0@SiMET z6$yDV=4ZL6^*8Tt*O;r}QFO13ZRp7hGk> zZqc`PIk@re9$;+7WKCQUc_Ba7!Hjc&a&i@?;bM}*;v!!)CB@-g>Z%w+E52#D$-v8n zy~y!Ru&PmYVW+kC)=E_(veJYBZX9-Bv0T!hZj|)F?S^C zACtTfEu@dL;k-OYB`q?^?x0R5YNq+#hf##OzH7MzKi4FHXoUP3FW&_V7YKGogFnWh z&Cc(gVR{wb&z5)3jNRX+m28?oGGVEfUzJnVD3ZOkA0#XR9kds3TH5i#%iN#V?@;8|)irB5hc*^_*Gh@`vmgYMF8zJ@j zPF$p-WtU*VLnA(s0YeTQF$2}csM)_q!nuGtalxPHM>oYq8_KNRCxQe^rd^eD%dEYb zrPhvB+6HxgOx0w5NkwcC&BAh#bi9#}>ivrq>(ig<3V~&4o;}qws;xt5fy#+Z<}-6F z+(ae%lCx%RBU9#VE^w|B(_35icT78!qL2U)ux=sU(x^ESM_RshQ3O!rlRA3?s=-GW z)0&@A6p%F#2i?kWC_c3g>8$UW#^eli!)$YWI^~b90`dF`EH^%f z@|;k3Q&tL+`xN=5QwUJzsI^C4#3f}tf0EYSj~ zABvMgRhP$2Cg`nvO)+9B`9e}lwQ%CV78JvYlCHA@J8T4yT~x2mCFa2ezjV}vrPJ{Xs5hWMIJxipH6{D^d6o4ja5#i%n+AFv*s zNG;1g5G<`U_N2d*(*@fXEbVrE%PSHAXMqE@oM z*{5_>lj~w@L!?eb$T?hF ztACXIK%WDKi&1zB!Vj`i6i;_01xM?P0e zgh*jR^4nzW)baCab1-MaYI_m+*x7LL2#Xd6E9S}P#(UV!$HRt$hX)EoyYDT@!@2n` z{qOPYVa1cVwBo;42i6ekM_!3OK7Jz9#wXsY{TihQ^;q(i&DVZ3E@{AnseP+OG24Qr z8nn~m-%(|uLGw9kHEa%$Z~>N_h-4M3s&GF$XYKT;I{bMCkc{|Qs*(|@Cig;FIlja! z^|+hu4#|l#7~Xdf=-9-MXT3=~L6(V))65XU1X7x(6MMz&dd63!fL&f=zS>F_BZ76; zJyq1@@#9rQZf|pn-RZT$HJgD;Z0(3tJI9&wn!fKf8ECR?aEyV!1h`C^NZ9N2`p#$_ z{zaLkQ<1yq;8{hfrO!d3$LhwF_l`V5iJ`?g6(DqRR~48G7AeDP4B3T6;7_H!{r(am zl?y!ExVPIz^c|WQ*%zViL-Kea*ElsQr%5Ap&6L1mIzB>5E~-X{>a6kfEIm!B+L26A zR-PgyR+hBS)-mf-e{fLPUL>l4!uN0Ebh4zF*+6m8UuxQv2 zh>Y_b8}nxXBHW~|<~ppJLA6-GDCwCQ@zjh(c_(F$JEtVZI@SCS#ln>bh*umK%NEr^ z9`FNa1>8|Px|~93{9m@6GhDtdoGe|;9pgrIEDkaf!rkPCzsN|1ctt+L#YVS^Jsnf! zjhp_i;uGvA1iz!hBRrzp<=75ezlD~=W@Fy_+VyTmRo2ZE$N~;5B7;mzM(c^pn7<1>*yhSzm zdn%cT-|`X~2BqK`{c;`m*2Da|C_`*Nl<1`B?@cHyX*2Q8Jg3?&&wcwFtd}xBg{m-x zWiWxzYtR(&6B+fcBHkqAtXl>M9|7s^lQ)(BNW#stI{KQwr)YW`)K0mx?h zz2+-NDP_;{EA;cahsk#JeBxL}pkX`{gexYvyF4c=gHj~qm(p}RWQG0Zi|S3<+X?|x z7#H6k;hiCW%$_ZxOJ%sYr%iQ32zD_E89~x4ai;slFfRI;iVYSvcwKOVAq9c`{Q`c$ z$`@MUhGiTRzY23n;f z)zQw(F>$pbabAZ3lh@bBl4VV8)Ohr8@Hm9+uRU{*g8o#(Tu{3_ zXsbije@9sB6W!r6u&}#3*qYVqn4KhOOYnjFW1Q zhSfB?e#y%7@M}e`9hQ41JBe|ah^9BP&;w3#;yx_+d6>9jQKYgqZFlzx7M*qD4{b|x zDwQUeJ3T8o)sdu`M69Hft?}emx*#{Sv4xFp?LO5`A}Te^pF@-vQL(&ISwKfv3TCn* zQPpC5l%*!>iDuP>6o5#47UIY9uD;`_ag97Yf$KEhNvb~4w7k`9m!0wwSWP5dz3xHp z@<-$VTvf8_=`#DZZHDS{3MpjgIN1_&;T=RGh1cfCkhcEWh5lem$jfz@{G@xpy{}9< z!UdA?&5@uc#I2Xm>AS2wG$H66bhk=WewrA*iHw6E4-)8wBuM+PjUnBVL}H{3WSN+e zkMTTTGwyE5o&u?x!86nqcRp9p_Eqzm$5*XZ+Wt_nEFY^$D+2uwJq=RJXd?KsP-ekL z{rrL?={%S1sX3Y{ba4~Za`s~#kR!|*Q@>3D<}?MGIq$r`XNFu~H;~`CX$abfS{Y(5Bb6d(?w%-1^5Q!kKF4CW8M7oPu%IN6 zP7o{dJjy@tX7oo&aDcfnLeo|nF7GuRsSg{3llPcRg#RpUpSsXiI1V6c8F=Lvo-zgR zk2uMCB-w7=sh`loBRqr@BGOnd9=!oVF|x>FdyIM7NpF{o&7tmFo6y`+Ze6dTC}J0p zI5$oZvk_aQIgf5H_2~fa)gorOPLB)1w-7-!tTqlleVNRwBfz|@AWAi>pf72K*k1dA zY0yyTN~?K>(z>Pb!H`gz@El_f*%@^^vB*v|c`rFeMk+eHXlnHop@!SUJJfa&d*-zP zRRs1>)n>htCmMGHC56XiuG4XiZ?uKV+5XT5_9v^Q=dJc@Q!d?m2}W8_6{V`ffFSAY zg`T)0lyQmZZFVw_P+=2XPb*6R{4)s@R@-%2u3Z-mtdaA;3Cp+=H^yN$%VNDRrr@QT z_{q*kpZXs3c)Bcy+}**lh#TM8+*GN^CUMJUvzy}_7;NPDG`B(0T93OF<01gc1AAC4 zk#<1QE6^Jh4LZlzDdATKePMHhRH95jfT;*N?=tQnLQ+eNOU}QdKYLRK4c6}O*`WN= zNndsyXLdB5Q>Un$l`N&-XfG1$G!WML{<#;$5xQR1W=S%vB_>y zux?ttu4YhbWa>R{hLcMv5)cN(E>BIjG|>RPGAQ2hM1;u^L=s4je9U`?>{K~VeW!gI zrf`)kxmV?jA2Ht&uIxNCDxPw_c!AK8t`AcZMSe#SDs&}){*q0nC<|h2rKhF)s^7cIX@5ACH#rc+MX_z7xH@hc(u1$>Z z?fw0^o5Ns(7bXWIVxiV~+Lw_aXt>W7)$O_}SKYZ8K`6zkVyfb4`l=j&lX04wM&Bf@ z#Qts-gOU71ijHNe*_jD`GBl<&q@|x@IiK0p%qX$q%H2$zfoDZXkANTYkypgo;nAg0 zrV2)}%8T7qMQRXDyzLNjLFT8=2dSq=n z-8O3!+HMk-fh*M;=`p)tah4NJ$P1=STl0*m#R+l0-ysu2H> zUKa{C(7H5FrEfCYYFnCJ_%T;qbj$7vS^xV#X1cJ3PsdegIweqe)O8(5d^-$$p zCpdY+m~^MdC4001Cw@;_N}*3;k2W^qa!2D7`#DTE9eeGmF+0Y`qSNE!gM}QMtg#5Q zvg40&gj_9R9B+itiG~`Dvk>F6(m-ZgLidm(1Jnbu3_WfEw<>j<9xT!Il++y4qmPy$ zynQlGGwZ5iU^P`zxbE!WbCDMpOC%H=z>hIk9JlKa@T&qaH34B3^%GT9(!^=(M;$jV z6QNO&_CS3Z(%$KQn%d$Ky<$uS&VIsXZcE?drb-KuqQj!jCUNC`Stz zY1wt%V|g$r#!Po$taN$t%``~NgcHNW*D-`Et6EZDm4>yhMc+3cC0$N*HnoqSG=z_y zB_a4X+w~5u)@8IqD+Mn`p6-H=){Z;my!B{jy=|J8z&V-p!!s(dCf+o)Xp~6L>cMOk zNw8hmqAe#K=qz7$_n>l1d7@b=^Q`F>(wWKsqJXO_ujPf>pI|Ot;Ma z>boekdaP=*?P(eBd`rRBYiVG{X|S(;h9BauBKaK0KE=>blVON#VX=*}8Ju9b)29C#G>fY@_I$|7Oq*tM*ntVI{J30#bA;=qI z>nkYaqwZSrSTdP&7*YZkQsq;X+48ztZAM*ZAjydknHctaT7iCD_lI`&ffgtKrN`H= z0Ia*XKUL{=aK5(Q_n?WS5|3A}S8D`e&uXvW6@*G6+{=qBBVlk9T-8ZOLniwhqGGd& zcUusV#Vlacpx2zLs19q#$787T{MIwSQ&@n4h-UgiF+=pOfG^3O`d#G?Jd_jb^M#-} zBlkK3qZY-AXr3Pu8lG<8YszyQjV>%N#(9iqzr&e z$#4&}Gfb*P1UK{vn^Z2OGSAXu`;HogOA7A*!K?W0Z24r- zqFb=qFq=J-9#-W5gjrh-bp~Q`w{!So><4!!9@GnKCPvCiOJiVzf+E|H(^O7rGrRB@ zz$k=S^-_k7nZ*xz$|Cb=h~h%j+_W`<8R5r+L)-Mmq@y!fobII$3bHL)Jm#e9JWoLhj1yk&?&DiwwHm zeB$V45W#lnWehDyd+72Jig6O*`^Dx49v%|%Dp|umnn-0{z&23BdDV-sbkC(+ z2!__`G&KNu*Sa2fgOr^8s$P)pa#a-uW9lCkC(=3&sBrtC0vRPS&}9_gOq4^;FQopG zc{^D?rrbQ5-5aUssv)#^{C4C&q}6w3Dc1M~_o_MUXD5wd=@6~We`p%s`d!qrq%&yS zZwCewpKTcH^ zhX4OO8^gED>A&UK1OY+-VSorg6d(bR2FL;A0g3=6fHFYk-$^$kI~yAVfHA-X@NX0y zz!YF=@%?f&0hrpkI0DQ7<^T(THNXa73$V4YH38TG?7olo0DA*R6I*K&Q|EuZbNmOv z1K685TG$x_8~_e3cHgsO|LwDXP&y|QR}))+lZ89L8Q^U0Xkr3zcC!Px09*lX0C#`~ zz|+Lh?!VA>|G;(sg|_?8vv>c)?8U~;^dETL_wYTY|F!zhupJ}EcYewLwb{#yJJ|v! zwNb0+BSd{tlIM<*<FJDOPAohDtT|hV^dBJ;P(`ghg{MT-LchWy3C~5rKo0I8rcJ zMUVD`lrf}nL=BmmH+i+-Vr^^b^X((oFZb+M-BC~7kthDo(ebQ5J4Rdv7;q_yn92}1 z><%55aGdg&C(a-l=fVB)XnlWU;?Yb&A)-uxxeJB;EntpQt(}xwJIDgyvKb=a#DWbJ z_4kdr0gYg|jL{_AP~h6)*bq@EJnr#O?nc~Tsbl5-Bq#wkcND~Ztn4U5ZvEcW0ewK; z!4%+J21J1<=6AX43cwJwe6#PAqh+(Um~qOPAfm9WF#)rr1VSP|e}{pCt(r=6z^i(` z_$|M7bx0+PH)Ekpx9N$W+PR2Fha3A*Gc=G&!tD7+-5B70X#c|dG>?V7OQ5_tQgNdq z6?Df{rVIoQF%T`u^4U)i#~{T%^deH!#YEyS6n75@Q}{fRO@5(!&bQfre)055e}8F) z6#+mAl<@w9hCBAFz+l(|RKr1w6$%jMNR}}r3m&{S!+u()GmZ5>Ls5fCJHZ0&u#=Kd z@+F{TfO3EmQWC^M*f-BI#zYz_9w6sSn*xyZ*$qB*=xBi_Epj#a4{7=L3=A3X^@jeS z{Ut6z>fwL?$c&9uZ_YLx14AqAaHQRsfKkt!d-{xv#|YVDpw@Yo9INLw04|)s2rV+e z7q|i1(;$G6>&})(JIi(}Q=epabn)CN$a=U*Ia!>?@LAM+x~W{_z0Oq2yvf`d;fP6A zm{!Er)Bg;1&p@4{eJUMvvtsotvGIOQeo8ay!Vut6)@rn4u0b-x$5XAwOIFT^=3!3v z?&{R7v7TcJHKBL7UrsEng>Bm;0=B*i}R!q_8LPtm+IGzQ9J>Ys= z7X~@rhW|H`vbVqaBZH_ylH3k9CxfK-CwI@j%=KEE&(}-5xHab9s04M@RFy4T!&v>6 zjq&ZDXY!o#MTg>yeZ-ItC-t!gw=*R-@h+kslPv-zrb%$$>M5U9#3_76c?Rg|Wv1Qv zZ1{Dcq^N~SK5!1Ps`~f3BG!+Nz3DnOQd0)Ec6RW`ki{40jOJu*%Zau2#{KKW?L$k9 zH17V>67?tlBKlF=14}DBc-g=Ch)`Sw&kwrJv*ODOm~?k5SRYQ-Q4?NQ)nT?}-b>mn zn&t%rRjkhPfL$<`0kiJ)(}P{l=|uSzysE^=!>yiA)|4w$p_NQ*huV=QN&(s|eL5+6 z)08+S^rHc7pZF$pL2ZJg8EfYZiw~aC`UY04Fm`>E}fzkR-9^EaLW1p zgD2g+JOb*VkadSvqFBqXDYZ>jgsCi_ychK;f9BDiM^1?Sl8mBW%|_odwH+c@GwOJj zccGwT(5f;!XzDt8H9}aI#8FVSi}#tFet1yzG%xqrhDpLEI?p-N<2>jd`D!%linO?m z-k&9_1SLIxP9U(2OL0&G8uED1IS;2#w z@{(IjIAhw{MaC9~>LY3);1!TDU05j43_nI)cD*1;(?-WG@|ce3%6 zpVGN#+DJKzPx-`k7rkme-p4n3Zv4QK-=kr#xVA{^6V{RnM6_{<^AfQsLnPTWB_}L* z8{jwVC~4=%SOtA(K0Vi)r#ee-n6J3^(ukL$8<&Tcvp}lciZibYh}GtzMkHSw8Hb~| z^V6od(cQX6oSnOA(Uf^`>eoXBH^{1Ufk0QFS>44eYvX?T-0hFKHTiSOX{z+HG84|_ zu=iX-@KjuBs75tCdW9po#vbP`8>y8;p_QSuCCB4@ZrIFWH)T76!zz03^!k8_VO->d z=PTVZoYaOmvdUsOp-AG8!&8xIkYFhnj@!Hh=R()=> zBQ{L1j(=1usl%4LfZcnx3jCwK{8x`bZGOqv*SP8ygKuku*wH7FFt}WmPZ@!~P4~i) zr%9TI$<8hDY)Ak?5>aTOSMhtPWoFPZ#)SNH`8=Y#7pIoh&}IqRuP}t{H`JP6`E+$*k4S0Aa{7-?Y==DqD~Lh-F0W;vAeMf|S80hh;QDwiW49@dWG z0);CLti)??k@LBsEx?*AVPRQ<2-6_dW zbK$pk_#U5ZyFXZEcC0cXIk-47jjY}~E93Y1_he}Jo4GRKsELkh$tYhyZ{_vv{|5#3 zzt8&r?=1zw0_v(tlHUqUM&iG<6#V>mM*#!#zm0ADe^FrH0^`4T6wv)+B>0!7fbCoC z{Z9$T^z8xoUzP$Pz`rDxle2;2f6+MqNSgnmasKz5vwu_~Bm4gnIjpQd|EJ{n&mxD7 z={tqs|5oHAnP@9tthSw8+Cm^(gcfv4{SwMF@E6cOzC=i{JwXRMNkl4E_?2*(Dtfxp z^VHP#)R|XzW#^+Y?D4VWfp-Q2!RbQhDj}5)E{t%vJ%+Fg1PxrQqO2R#4m5q0os9_x zH#>#oq((U*Ftq-I7z_v+<`x)j;~Yr)9Y_|KNY|H0R~HV#pLt?t9Lv&X4@N)H^pj=) zF}^vBU8wI60qBR58cz6!6JmV_9zQHZsGxQ?J5ZvlE6`+bk3F!tpf=&uC6W{Z91@g1 zG2*XFsD4ct0b1=uU2QV#>Dki_m z@||_OS=twY=GTVy)Z~=x!un_3qhH_vL3zG#1wX3?ZNI*w<_giqU{nJtVa1UUZj*j+@fw@7` z)4f~KUsgXgAQ>i5PW9opcMm|*xwx{t4D5N^c6SfJpZ$U4A*I48fOcQ3;r8wQJ9zy- z+;y?|{C`Yf?bZ1l>_GyRd{KYMfOJhy`Gq3_&3_0@OLX&*0s)3@wrZG3?Bu-yzSk2@A%WppZP)EIq<1zPk!xydQP=}2-F_s=6>-b z0UbXedVi8!_1=8tVpCD2mmzYoQTXRXrQOw)Y=d6kIlg}I3DjpbF%9%RTxGp@KYmWC z{yo}*32+zujd{n!P;XyuqiN*c(QCc4EM{zqQ5ik^HzBtE70w_w$iyI!>Znw~25J(^ z7qf@183gbkeuDaUHqtGnOJTNcOAHp1HEb(RW*|GSBE%Dfm*J-X=E%j_P|I}eYDU?H zv$Y|QMt-lh!xew6>L%z7Mm&KCNy_vTclKK^{BsXyT!yVgZ%U*=_F8E+$jpXL1i_~d zB_d7mBnDzUwuvqZ?^Kf8SGId+a1Ie>QdJ4KX8b!8~Tvm)@mq5CfVE-8N6G@iJ)uSDlR+mUdB>UTU2tg^3YLfUm^yNY)H7=_XZ zmVugLu`N&zYzRaBCP%L|*1#5-R_v5Zo7s>!^RSTzqRv;#Cxa`P|ZJG8w8E^GrNEzhkSJ7{n> zM}uiCtAHj}KA`T~Ig&mK3*G?r75E3BKHCP<^3M0}PD5?WIh z>!kqEr<-m%VVxt)#lp5%V2P}rHwbOMQ4W`e`TDtLpB_l;wXo6Sd8mqZFbp7<6(5&) za|epVHNM0fusu-;0mv>YOI+Rfs@L?cf#ruMAOn}Mt` z{SO@C{)u3r?5G6uo{ENY18=d_>zO#~9YoP;p`PjBqq^s)Pquu^f~mi-G?ARk*KXQK z9^YJJG?0G@!9_B(+Su5T(1l6_!I3S23hc7?j?YQBOjv+g3wun037LJf-CQJ6XUSe! zgpVRMuq1Tu1qL>!K9~a>aRv47ywliM-LR79FQ#U%@J+efFos*hNk-G_@y1^y9_&6v z__xkA6bX(eN=Knm1x}&GS){zi9D)&ncQ7pNdt(`z`KXP8QaZFbA7t?=j9l{Wp>5*~ zPT~hDZt{|!gKfyL22<0QN;}L7bcWVu3~x$h(eyip9O^p~UjD=GJr z`{hR{FBgK9*K4E(Hd1W>Ip}UMjOPYn79MMhE@@`X`f#}%v^#&sDBMOPo;a_=kRb^~(_VH~F)B^VOEtLp zI(aHs+(?gNDT%;uIx)s(ZF>{)9`71FbCPCutB5!nEY(fT@=XTjGE09rTUEVI^2Jrv z?UAN|f{Y50{f&0~!e^_4iS`P4ZC}j)q5Ws3omjGdpgnl zvKHjZZYuR_L{;6+$IH3UGriP&zs7!x0acLUowA`;KcpL!P)fc<D2uc9#4a9+MT zNu$~5PZE~JHHn|9v15^t4~hbeW*ir3r;r!V?~W#z`s|N{ijHSCBqZ~342xQrv9Jje zBN%q;5w%1;UKL@f%S_xq){Q>t{Ha3WE=Xy+I2;L7=*?L4E1F_L$Y#He=DdJ!o8mkc z2Z_+h^5TadLn#CZPTS$l)0gJ!@+Z3n4$4-Qe`X!^xnqKY{sDiej(OyXj30(idnmB*@d%=_+dtUL+s+<6Hk?q*QK;Yq)SWJ) zgvlDJ6KYEWsbfM(35vJ}sp83^hJE4Jn*R*}#mE5iJ!B{yS!4UFYaRF& z-j5bO13#=O`!!a}%)yo)9aKus`ExfW$=dz(+96bik)T&rT9^!7NrEn5K>HoaN#|DA z-CxJ`^7%%-8qH(mRq-Zj@h&>*QX2nz&!_D=yRdgX*u9X>cit>*cIBnF!s1qGQ;9y= zFbdt%g`Dfd@fXc~Y#!~Np`DI*x@++fbQ7JE3@?Z<2 zI)WA=ZeQ|jiw1R~95N`||TIZ3eQ#V`LvIhXo6Nv#Plf|=z zK&gq}Yz_vzHSRp*38HV(-hJaG&swH#3kWW4#Z0fFIRbqoKk12mth~XcV{Y?OYm4!% ziyL;RYw1PR&+t3W_(yu|+j$07clrvvS{Bb*MSa;TegClZt~b-vLOael@C6tB7S)&c zWw7@_2tnWMFW@Z|R)nuGL}3{{~qJCF~D*$F6wIAChXGU7Ty@^_SWC zq}yKI5>jw}-5w;z0g(prC=@JE1GrElqZDr4%%~nRbikmyKvw<6ByxMclo=N4(mN(7 zxFo1Q5Woww5Zy90u(cshRnbi}5vIvuRK8(4)?Rg!5_9ZO<|CP(qEs&;;qE*IIR@m4 zsKkzMbrgp>$B4&9RP}n2S5A z9w#Y1NG|6$0yU((1eCZqIvv@?OYK*o6B|e|yb4WAM(*Pnp3e^G>NeRnUP z{&Cbq9>PrGM^FWEo;e%L6B$Ou7yhd(?$UZ31S_tXf{)$2m{kPJiM^~*dhl}`6G{JH zdzQd~1jbhEh!yO!Nv0%PpAVT8Q-|%iwIyuqG6x$5(};z_w1f>VqvH?T8h0`#ip0wI zgKpsA2^niBo?W!x92fO)Ep7$*uL}a+y$ww}!B3}Gsy0jW4b=`9;V0g#d#X9RlK49P zt6RoFzSGnux*Bh0?IJ#__c4Vk`Uys?Zh50^1%PQoWO%`<+jnYHWK`b!AldT?AjT8@ z^KqnfuCL`kS5|SB9iB?6V+jek?D zCXN4Y9}9SLVi+7iHbSr<#%NFM=pVCMtc#W5fqDsC>Jxvxk;p%Dt|%s$yly&PY@A{p z=6d3l7^#}Ue}?=?ZMjpA1-o%1SJ|ZEenV!KjS&+Nj|TT_>97t0KSz)k+|HL3?HlAj zJ3IHw!2w?tNW;yUxNooEx<6tx{vMq&|Lh&W^xSTNIbN-4lTm;8^`^J5k*`nZAQwcFe{xvum!~jp<&I4A;QVUKBc6k&4-FkeCy} zrT5-Z&iN#gB5U~9K}jtPF2&e=q;KKjXs2}2%d9ye3P4bKw5S7YNZGjvp@HTW-SUVykkCWZ$zX@bO2R0`9kGC8LsOIawnkPL%Mtp(m(_ zD9)gyL}8?f;XY%Oh()ayagL|KZ$Sps|H0Zjgjp77X`*3d*tTukwr$%sGVI8(ZQHhO z+jhjuTj=jrzgyik=*j-pK9e)tYyDKV@k&2%dZ z9kz1qWZP7crg9otitDR)Km`xznlG-gFjKz*C1~i;czV2}QohWUG#d1%jOEwQ34umO}|e8pA>p0*qPS?YnO;1HEBj zN2r%CMsAU0IM(MuF(Y*#o3IsYCYF8S?MT05RTMfJmxkDq7va*1Cta01{;(c!=O6{} z({H?8oF0c+t)<>p-{K>S7H+NRCC;Rx@=4t!=wnM>QFB$PS9*QXjGJ!BNW+J(|vFTHIY zX^b_*q-o{+NXsL1Zo^sY)(%|K4{-~dXZ(qZ<9U{Sz>Ws>yn!iUQVDF_H>KoY1rsVF z3z;Gu7t@z69zgp^_f)tzD$4-5Cz4X3(|mI2GadSo<|W#NPi)x=73m3! zHFayg;z%HW?xJtrE-?yfJ{#-0t*wQKtvIiAGEaVd0{~GkXRGr}NXJ2za-te*MkpIX zt~~~TM#g&QwT`B6%;7@xppiuQ?KK%NJJD2QcU*o%@ZoBxxrAwA#33^|UB-FK#nHve zhoA!amj&c>#aq$b=|f5)BD0Y8qso3pQb1~&ny8U3W_bt{VF4x-Av)Liq~h$1aYGRa zTT(rp`_oye)=P%ZDJWLGYCJ?CgRZI{281bPIYY^ZOr3>t3>j9cdU9p5p@cYTYVV+w z%_GtvgU5d2E-_X3aqAwseZT`$K^A;=2LbtL1Sp^hP>#;B`*XvJaQud1PinlqM$7h% zzs{i}PW2fku`QnUK;Rg@RW>&$+9rke;+Vs%jwHoDUqhPsy zJk<3D(-g_n#jnD16hJTK8bn(U_fH7OOxb4E^`IKHVf3CzXHNJXaYF*OvFl7^QOo(- zx#`2nj9`yHv;=Z>VCsE=97^EwR(i@vvy~-e(kk<>?~}>oe^i>|6e{m8_wr#%&=A$} zR7xe@YSlroyiWz9M!YG-EMm=l1g&FP;Aj&+=i%2#17p4MLMm65J9&N*_AaynNTY#Y&-G2j_ucUh5!`>{NrPn*PL>ifr53LOqNi+<*pM#j8fDlOTf zd5ga(n;=0!l8vJ6gO`9bD(>E3l#l&>FipKi|l&}>* zOGc2__=Lghgq>letMwV=1XnWOX=?K)AmZrpVAxLL&-)E|aew)u0I9_C{a8TtrSk9Z zLXy1|TMpTpV4o+p-wFU3tCn+Vw{=Lk2Pk!^lV0GHlMd51Sl}{7W;aI@_&wxYCQeJ3 zq_jKgV6_HaZ9S2XmHjLwy(=_vuI?h!FD9R)KDW{9$e-|_J6~(pzuhujd~%L5EZ{bF zso~|uRQZS;4=ikS4kRKS(d>|BZ$fFI>#sa?0(JxOA<2U<&w=7mt+k}8h*7O zG^@y4Au}k_611`>=CQkX2OgVWF5T(%wz7HPdv3ZsuJZ*X31q*4xWotZkRDv$<)Fmd zV*9*NL z3waDtJ{o05l=!$Je+|Ltj9Ihqt5ze2Y;z5IH&pnD(Tv6JtXlXBL+>q<;?Ku1;l##{ zN#4W()hj{}p+F38K*L?t*$F{8wSi}0nENF5v31s`SHpJqoFl}&EpK!B4sDB_RD}m?d_&8O6XL{OWmR-b)S9qGYR`DTcC1r5%2vFb7 z=M;Is=O>i?pKnRDqAbH4^|0mAt3GXa-JDMeu#_KEUD?NDqh}TG+t~s4>CO32?M=#h z;?}IYi@Z5FF`jyD4a-2Mr4Y=jAUUoIgyr&4vm;5L;)95{)WC>jqTf`E!mg((=O1^m zKFidOmoYt@^SWD%R)UhDodk^)*wqsv#0U;_D6CEc`pau= zGif-MRKKFHPlht8k_;0JK?Uxo&pjhp`$f~jx^+A|-;}H`%M7vZ6gVLf?M((G9*!uL@BiMh?XNb;zLXG!{s!x(3!YUly0vvV=auh`fhO zP^#F6BZdZdTbBGf@dmEqw!pO}Kn=$*Ug+ZGZ6j0(tMKl*u`%XDP2@1Sj2if?fUKy$ z6npSejltW=)GRJ+9KDK+5|G9mNBEm6Fb263;1P0NRT24{s%2j|M*IYXeK5KjW+kLp zAx(LMllm4dgVK|7LrPVI0PtBA4Kk81(6hjzid<~%OXP8ON)R&_xfm2@3Mbx}+3<06 z8vRf-N&NH#<%HscDMN=fORwOr7CSsqsMZ6U$Uo#mE5d_-u?W=tTR^b=c5`7x^EU>b zDsnLYlKb6N9WULJ@JeM{w4v`X`DA6*G#6}XvAw20$PLz~)4xrsdrU7y@D)=T=)OO*T&FiXO&=6=wZ^?vhZ z*Z568$aqaE=Xr1|SafT`2C%B~QVhiU?dbLBM5cuXZU_l^T`Wjv159!maOzrkk|DK( zxQ`Biy_NBSyx+0y?5f)i9v4ZL2X4zm6vl6rSt3za8A}eOBPco-;7xp2x~0{W?`*&( zt!N@qWHP*QZCa@kKAAR97PNWYj*9xq(W@%qR_n@z{0n-_8x$s6QHG5|EhM^a)sZ)) z8m#@!=Gi(q9He-}*x>4-Pxd@}>`LN*~p*7zY>lv|Z(;AqB~P04qE#`fl&@mYU`ywox_sfxuac?Dah zH5cHW?>^vcaYMK9(uFWOrD$Ru>h;&8cT*N+NVvBk=QYD|j+Hh27cK_tvLvw6Kjd5E z8$r%}m7yRQi~~^8nO#Nd4T^?8zkZoY;4z??|-yq{ErglRD|UO#8v*C{{3$Rcue&FN&hnbqoeEpB*6Qh(!Z=M z{|EY4g-(@DjZXc4)7zQSnf>ii|0|OFE3dPpv-%H--G2z^oGi@#it_%!82=T?{hL7U zzc9!DAd3H)IsV&C@%NYitWy48@;KJNk$3<8@(+0&>%YvRW8nDPjqyKajuZY(9yh{u zYe2?f16}1lFDpHSjgD$#2qu#cR`Dlqc#?^Gl6xiNl-TL!PTBT zzY^9k?oV@lbEtS7!R78%Lr%-r%h%@5=8DVL^~L*k&&RO!=84VTpkN@s8VIT;JT>Gq zz}i5NB`|r5JNK_3f(L<6ctQPNLJ;e~AY5En`fecL_?m$3T3!jsJmF#e0LH;&dqRB# zg1wnhI>>84vf6QQ3>fsgeej|F+9q(MLBQ@r(h$g!)PQ8L;J2FG1OT1x@mTw;AV2MnkbVPl<&Ee&Qk-? zED~BUqB8Dv=ybE+Ux+jFzMN@jgE=k;I$C`*2IBLBEp3&9;UE+d-<`n9%;R=H@y0u# z)#DP%qmyCuQZQ-M^m*CZqa|~k>fr%Z@N-snoGMY{L&b*PT^~RB1V_>tc+ zLo0(XL+V&naFCrKw~13&DcSk1K&SVhj7Hid;(g!ZaA6a2Zh5#s_%unBcdrq7Oe)4g zp_xhGnN}+a^m}&E5;mE08Me~UZDEJB;PCrw`ih{oW+R{jdRZ_{HYx`?Hj9#Dao=3`}w~<|lyd2`dOA{&sY?=&=d7-a(6g(3e&sa{A=+w6;Pg zxkB7e=bKnh02|~%9}lHYBMgk$ug5mtjgw!T!RAZ;2X~6=4Fx#r4OVyu>`GrTQu%U0guuyc5b_7MlYGjZE(n7A35{t7|%%ey{{U{Hob_-FV*jcJGGEZ zV{tyU;B*~dtIZ}p=Ibw@M+g|0FpBxQYn-BlWwx98+1ZgyrP`c*n-ej6&*)3!;pysoq^!mX=i$fA{Y&scg_kT?5U zlzD17vpwN2jzZd*Q+ui<3whc5Y`H#L_d7q7uHn;BY)O5qyxe%6Tdt`Yxr1&zMbUY- ze<>55Z}ORsYbfxY+ny)eFk^2+@Z!zQ)kMsoZDUnHmzXB#`ssNY9%pZotX~x6(vQ&U zk9t#ED4OK`DE5~zw*zE=$X?@r+{jE%WL{zW&>g46&@P5F!hOJ~abdI{44*JCfR2z+ zehPZEnCf>=!!nO6R7^VUJbBkN9tNQE>haLy>=K<=FXz-NujX-?x+(&fkv*``!RT_Q z)K6JE8PpL1;;ZW{g?}RUjF8R=E4Ku8ceor?$5Nc%zpVv_KQN)Mg|wgN?_b00gDp6G z`W4cyeDYX=iw?;gJtp$86M;8Bso8ihYIV#eRK?@2$Tlo6vwA9Wq8yG==YUbg^{&_1 zD>@X_49A&BnSI4z<(W6FHZObfI&jz5P}v>vCyo*ErAvDLw%iU_kdS`(RF9@^SR)7S zLH~OO9t{syMQ|Er<^0U9g~mtEs=A9#MkX_PA1PNaSPRA#BZ#iqdbryr@NzrIbP#~)fuX{9xs==pH_Cr(#ny4nW0%lQ#?Lh z(Qe0DqBCoEt*B!7GF>jfKP51wq^2bE74#%Abdst30h(8!i0c%x;c#w@%dA(Nh;!K% zmZE7{ATt#K@I3K9zjC!dwF~Oc_x%6wL4Qkd{^=|Ke{&)TOQ@-f|GN(E?}z_iBZe`hl+>Lkc9FP(i{2k?fUT@d6@ChUGdO+xnZvnGw9(t&qati2TfO^cnq?K&_<&d zAgqD~%p`&)EzH#y1ZHpsN;Zth3u*_@788T2g~bOv#{`hpLd(mGoJCdykS^^OU=Dnd z;LJ77@3frViZjIOR-00hI%7^h6#G)a=TI-9YpUptDX7lPC61obT7cB0X#bNG=pRJ4%rOfHe-Q)89UGr zmb{obAUY-t5;4d@l%g2Ezdk#E?k+zV03&;^JVc1(i8dg6UnbzKa{BDMYEvU%>6oX5 zP@e$=faL4n%<9}hKXDuY$#1QG1AwG^I7sl^MVPl6=BVhhsNJCR^j-lM5bLd9z>NsC zOg~10V6*1DTa4vb$_cOcW4{BeMWA*)@=mAb?XZTH%`r5dVcygBth*Nd5>Coq)} z$~>cwwb|-yRpkSan;rP$h$M*DwsP<0N)SVP2zG^((SqxN3i8WVbF2uEN0V0M0UVc& z;OQq0!v)1QhmENc&)p6?luK>CZAbCFVBLlr6s^xRWw9q75AU98XhJ^yx}644CA){) zB#<7ai)*@|I@__@p3gSJf$1V9JHDL@2kZ5(m|Eo)r4wfI#42R0z-?u0ZrfY=ujiSH zx>Tn6^hG4bYjfFNv5QHlMUE=>wb#!yZ@Pv?Jl0uK-v$on##6hq0*S$7M8({d=XePg zT1xFG`&t+&zq@noEqNk52A_S2{1NE1*3$^$y-fl?>-l9=Zss(t($SXK3rkKzl{Qk` zYfQ^kJQg}2lW%B)8Wf6c4Lye8s>ocsv=b4gE=EUpN@5^+UH5SGk`A#a4V2HIkT-4B zQ`3za_3y~F_4fr27bm8N7rkec%<`Rdo7{YEbt(HhduF^`>VM#aIh0lFJs=_#3u0Mv zwX*CaH*1LgOwi9fy$Lky7H3OE?3Sq9v~*lk=)cCX6E<4TC7{~PAivxLR!fWOTaJ$W~utLk!}Hb3$tj5IDUu0hq4mWEg(?w@Y@mdk0N z+FhZIgkn^oDjAsVZ%!sC*@)}FQogP|pA}!BVzx6dXo^}?!aqBD(#R(aRX3r|wU+N0 zZP+=DNQVX@zkCf>_h>cky7{qO)O)4EC~#PBM+??xbeJTqJDkW&<8pRfbb?)Wjj@W+o!rii(+caE{|9M-J0 zKQysQOlF;=8$n&u=&@gVC?%;(BR2f<+wv_@lS-fFHuGSfmLNH>2W^2=1NxcBNze1Q zP~_h?==5zjKP0&BGXK8ty$8l@Lo?pThSC?swU)E3d#g>x$_wG4>)B}QM5mZ)EA@%a zDNTH^3`>qT#~J7A2uIrF*lLNm=VC9?j)i zfoQ;N8)}R!+L<1RjpY;2_S!Xa@OR+1FL$`k&^qdBI(j(oI{b2DCslTr{uC7E`KADgv5g$qr93sF8_E&~3V!TQ7AWbycb`f&7-MvZz5)p@NNUexs;d%L6;^oJ`Qj;e5L@6Cu`78@hn z+iJ`iUZnR`O_#B!wdsTzi(9sE7{A&>!LR7Ey#`=GX2c!}w{i!|(K%miG0)RvK0h_i zyLCSvJKTyTNwl}6HP>1^;40t-SUldPj4bk$$~(_BSAwZ-3YG|IQ5XTSWZ1+@VF5Lg z%4|S+RBnU47(Ilgg4gOQ!zLE^Dm*d1Oc(83-@hM@ld2!No&=VZ_K9iVWYR0PEqOdE z^k(~b+;W!KL6O7Zuxt1`mIKhl?#6E3d6?u}Xt#7Tw6AY2A2dzAd*7(l!TgeH9d$Sx zBiFX(qhLb{+S6Ke8$_PCi*!<9k8jPG#*z&zWAAF<<(NW#kC3WRZ_l90N;rMBk{~*a z)E0887U)l?!r+-W)<-GT8p=M$u&;Ev8E$23yR^b*T_@G=2`cP3D;T%xtY6~8Pdu^PzCw!u%LypD0%xhQZ#g6DR`g0cj*?Ro59h?eS?3iGukL( z%D&;dlG@p7*>_r9Hc+avyu0hvd_bRL%>Le@;!p>FnE>lNA<)}Tjs(4vVq}Wvqg2pyBKR{!@%B()<8?CPh(W1KT0buxS&Y~Cw}$qana%tLD@as zD2J)c<}v6o-h9p1K!fd@t!P-l+mHb?pTur8r(Er5di1k&(7pj|R!o0Kgk&I7@37UZ zk2?EWklDKDHtxj0bvEHbIKwe;>?xFDN$eZrH|Z4$Rr->(ilYMc`F4kZd)4s41N~1{ zR^cbcMj1P}r=3{;N!)uH7*3W~nl@RvThz?030(wUWqC(+cE7ym!-@{m+&K*!)jJ%u z9}mHkjy(O6i~MYxav>?-I$^P&?eD|HIsG=roxx{>cmA~NSCk)oJ7h#Dzc>qxv$)5) zCoS+D;xeq9-5Q9ic8$~@^1Uj7KXM!4F*&8FNev@AZ>6F+{T4SA z@sAsX{;KIZ9k(fyf&^7-pN+l^UM)}fYbAwc?et}Zl#9}q?i2-CHuG~aaLzqdsNWL% z%?ju?a?;t##oLP2ifZQfGh+y(`K%twB3q8?WxXU*HqH4+%Y-j@aPl%||LPw2y9EC) z)bIax56Fni%8AMU8!-CUQ1UPC0UAc;|G-5V82(X({r>_NW&8VA|E(?NAGqf~Y{mb@ z`O856zZY#V(ErP(4G#8yYTEdVZnFH#(}3Y`k15Ol6y9t$QP$q7Z;tNh2!-w2+6wIG z&;rMFgXz-|w1>OChG$l{cXNZho?e;RHp?;2dAVWJr++WkV7c*9omzq#e;K!o!kfC1 z2}pQ$rH!hTuJi_A098>%1)xHLiX=xQDN03}9RxMDBeUHHIs~r0zpn=*4k+G*+tuTh zh2@oHC6@G0?FuSE8ttD4b3NYCcgh|KnBsqp8FSxYkzc#rb(t z{X_f{sqsVK$|Z{r=Z_23+EuwLd^_XEi}8s^1IfkYK~m5rN4h@ydMtI&7;2$ z;@$wn?|RG+2QUk4otic_y$z}j1n@Elemk}ed6pC4=m3<;_l@+<<^Y%~@&nK2uW<=? z2ar1S15f9#vF{h20oqIb_FElrQqeCArkDEb_bT8dqhAkU{$qmA$^`DK9FUlkH5nc9|&*9Fdk5a)i*(H`|>}ApTEQO4+~aBz=z?vv7sr9a~+_s;~SFM&(3QPUdj)3?N>uLwjrDH|6B9tZp-;F#EJItk=JQMFcPjA9 zvsk>_EF-Y*6f;%UTZ`V<;P8ecJ(1ls?{_7T=~s~V3+2oo>WvQ0FBJgUx>u+^-5=`_ z!0e2ok|2`V>l$eLOS=?(Jykyfcgkfyf>sRHzmKwJKlsl=#-Ft`ByCIZdf@LS*lYhU zJf>a4j~`7iyy3kWMt3G~B(mHsKbg#+C%^n39y{1tEAU&i!mk_xdw;Aw{e$z*mG9lK zgB*vTC2XB59slEE)*q6-={vK%9+g#(AG4#Lfy&C=h#t}2U)QI28qpz0-J|6vYXir;~6J!qAT8u5ZdJ<|AAFp%%@PTtF~&#;jrJsDwNra%Ou*; zta>)mz+_#=y~IuXV5)Nx-Y`p67-RAqSxs77;bA-IVy;0oyqaJJozVfm@95n*<-;_q zj^!XoE?y3mLUg|WV4V5zJ0V{PtGF4c>HK}V>{M|h3%9?&{71TB4g#jS$k4AQB7R>T zaTuZfJSH9s#dq_Jyig0}G?$92F<#y!+O{!IvD& zb4u%`hBDsSKO`MVAI=q0z(t&t9*V1wav@T@-~1liPnuA=?F|=90;?Q%bh6n74}d(rXd50`9fl z$Kni$UANMF1p`wUuLnP#3xcfEqa&ga!~2oKSro{|h+8v!p4U%-QAG6S3QeAOvVX?X zos4d!BI0K7lUDT5P>FdsvCL9PPtAi<5=CjxLs9_e+=+~2nX;HCYArp?QXxe1U}Tf- zo9i1ASHLJUC(Oh?#Hl{+R8YQChFK6>1LTErFJcavWcGG%bMx7EaiK^dsRdF6&co}j z2bC)8Himnx{9>v3$rNLsBx4}Ogw%X>GLuL?)8emMg}M4x1(X2l1$>s>Vdyrpy|N$1 zLB)q9@sbo3%N{dN|JZK^pA8P(Q0IQm&VSb4{ z+10yV@7`!>b{(mnTRa5{o6O z>(iuPbL}b=U>UfunQBAGa$&iL5YSWu%pu5n`dNdsMoyRl7uW1{vt>ggws4sIW37ga z4uu4Z_}%hv1yyg!u8cvxgcKfBw6jK<5OEzZ1EwSCc{ZjOZ#;MpNY3vg5jjK^gM+!h zJ+?48n*x0FgQ_*8`<_%n-la?)6BHDO=J7@6f77{cXvN%qJey``5)tq7rj(=qSa1gu_8eomYpZILDG{Po^rt4K#RUB^2r zAbl?7w>j*K!_8>cqr@(^3*0p)w+Zq@Qo%DRHWI8Pg6FJFF6hG}31PA1Lg>?JCb(X{ zEn=ozKvp7Bc!GB(;q8T>cPm$qGxSTM2FuJt|lx>vT52=otKyE9aer%s}RQ| zpC)#<6?QNF5J(La6;AqyEFYJh4=_ZkdIo^os2UL8H|Vw-mId;Q1o^f7p-^j?Uon?K z*w8)4``CGPQc@VJv7WL4)qqM7pmaW35l^sGAgmE>)~1NTdbJN%j4l|v;|D7aV$$8O zO&&zKT3VITD;pwq)III9KIUBX)NP1V>6phc5UPuGemd#gNxh%>LRhA>{~Ghj8&0L~ z&fx}ZB}74o)*NK3P%hg4T%HCm?Gp{nY5}zwnUAou#a?g+A#)gRJunEg?ypP>e>f8( z+%cD+LP0~QbNSp1MEg>O>&6I0jAFz#aU5e9gIZ>O@qI0y?;_)OiR%h;Wnf}a=aYJg zz?hz-mu*^hfMmxNPUnun8tuxaK5lDu6p5i%UV~|_)EP)`rU+tje-2o1t6S4s?}Sz^ zA3v3!IIpL;NP(2Z9>f*$dZclM=r~}_>uRUdH%nnk?lFlP8tzTjJw&sL&QL-kuLaoi zE+L8;|EWU#3hn+t_R6 z;gUy)dTW4=l){x*@hRzd`*FA%8Y5C$_qGyn*iRuD_CYW&a!8s<4cHvPIBSS;q8^yJ zgjoqbfMXRuZ6kf(G8T0}MyX)v4)W5)y6eyjQ}=TOOeanddsYxSqq`6+Y9$DENIv4! zZZW{i(DoCHq{&`(9h!><7ZUZl4%URiWh6pjKkcEqhVHH{E7unj87 zgDU~grj}>0c^87#7n10)d6)Z1Z+wzdrg>xh>CSo7yAhclg3<1mQm^#_dZArunG)-z z%T^o2*O)q3ZMebWu*0gdF~igyC2Z`bZ;S;#E{V8(&AqOMStGf3VqFsEKOug-a36|v zWn`Twn(ya`OIA&Z_4_G44L2|;8`OMth%*R&9>Dp&EBG_!n5{?`zFyH}sQn>jTJdpB zRDKt8Al-f7m4THtW|XBWm%3Z4A<~V^QQHM6r3*C0^za)zVkF^v&P)R^2&v%D zptk&wl-5(YVOL8K*N)#$Wp-4}SQDcz#`gIUuV&#+X=vIvuPkj=NFRc9NTglkur(Bp znb}Jrb-9SRkaSi8V-^uli7(Fr+TcA!#KOnm;a$`7>X@Ydi%=Ns*l_F3FOQ+GCUK<8Cp0Te6v zr2l}eAm+^NcrWIDD=y$+eL?QMDwbtyQ<|__=T6glPep>w~II-X)m=Sav_g}Eb z9IrgtLRA&=Zr+56kV6_50E_d;aPnUU+7Ey1(5kqbW*>Zfx%TKMxTwfbatK-IZ$!Z+ zs(m;a6Ri|a%Dta-4EE*Tom+#{Dl6?+0&#yMKq>ZQ2G_YHyS=#6D7`*BbwxRB>i7*giC|4vcS%7V;`>hIijs|&IGE@OKX{iJvtG9oZzv(lZD=TK`1C7E*-C>rST`Y+szFo>*nwu{l zJ|M*pWK*pG*1i+&JdAU>X$Zyb;+UB{;ktBd2@8!Ye~MfM7yAj~o5bU2%^JQ~D7)Yj z&vfiCjk&5k#dOOh>(02lo$peTcrpqKHQ=vyLl!Z zvpCkalUEvXz4Yr8+ZUHJ&lb{+>6JWY(qD$8 z8yh32{i;3Z@qkA4xh|(8L7FDxT=?S%=*b0)aN0Cnd>$zeBA5xt|L!H+k{=aK4U+0- zGes^DncSLJYH5JYrJ9pG@|1v+?YF%y@!q`Eio@U}z-JOLWdEs z-0%z~YsoemfwEM{L^t{~$^+G>;`2-*B@TjGkWa+jiXaq^&h_^tHVRPqk#YX>Y_CZL zWx;+#qsi*fS_jF@?j`P*LF=)k)H1LyXReP2h1^&}yF4Pqkj-}t#h>?~+ zWdnXG>>Wn*bXl~yfg3GznbhUD7z0NnYpA-jxN`9GZ%(8%si~h?vf|38Q+zk-ln72a zD5K~_j>n_rr2IXx7LqdrZQ?DOX}~k66+w66I`qBk?h}6E$eOR|QI9IZ6SaFQIRxy~ zt*NKeh2QxN;UzB`!4h6pe8=lY1KyBc1VG`;DD|ltURqB zE)1zNd>q|k2!U3zx>6tb;};)$l5@OaM=935?XY>p_l#qR88yiMkDUyVRkXp+Ezx zanW+`;v9jwI`jLD8HZU3;)NAVI_djRbC&;vS~e?@q?bRCC0FIebuJ+}o8O20&<8o|dKTq0hlb!BQo*in0@ z6d+%^oe}luw4EVUMyQ~or!6{qQ|^11AQg+c<77@~#o81FwRK2NcpjC@qq9YE`ZYTBgx=R-B!KUP=oBDPXJoUpX=4b$p2aRv-oS+zY~Mh%?s?iv)>8nLo{_}Tk) z>e-h9G-NNUC;^L`;VjnBDKL8zxKL$F_#bJp6ub>lA7F*S$qBxOv z)*ebvMuc&eAMB(u1%N)+X6Mbsggrn&m&a%e&mYUtRvB=yq zASm<+!?S-?hyMv>jiX}vp7Na%D-9Nk6&u!Oa`{L-f)S3s`%r6e<_C(mMkxC2u&gis zpg%o#??3(CSoh)rvnj-+)I+f!zl>E>?{{38(-xe$h>)Lzti>y|XSW9PD^+8ICm7F? zzJ6Jh97&G8<-+-IQxQceL=r{k7h?pOPG-mL3pQ;8Qdb8Yun)uZw*U&LLeLiTxx^RX zfd`c`z}I=#q_^LXK>U^5UeFd?9K!UdLfCT9q1tLK&GkU=tRRY5rgvd>J`-O~W>ZEv z-I7gs32iW&`B$7#QMKFQhmGOvRCGQRCI{zlA_gQE)ruWDVZR+=By)rln@KX=5zm~b z2E*PoM3{M5wd{f;T$5`oALwyYSwAgR+9U#@N4D?84^kDF)3z%qtwx+L+UVJuwB_Dcoy)j_cHeDKOUJ` zy-0Fj|GD}@Y{+LMU8fPtJQw(hKNLnl4u*Pxs|u_yAR zF{_5-4sXFVE6O)yw4VAPKDU}81%9HokTWu;ReC(N058lTIh*qyrtrb%W17VAJcgn%?_VT7 z0oiYWC9t!HA=RV1<7I^_(6Z*YG2$sarH{p$Sqq%-%!{C}3^XyINW>Hvy4U{oeZt6COApYaR{%kEq#1u^nQal3)(;*jY&uaI2!=scykf`55 zbAW2hM(*~RQmNc#`I^xTTdlJ0!|0QEwqrhF`IHO4tteHN-)jWN7s`}xK}IWV5yo8B zg=X;Cw@=Hsk?Q8Uz;(H&*=_FAl*a)bCR17O#fBD^%5h*a8gUB*(W;>Y_#3Iv6Qg-Y z*dI7$jd$wN;I0=0?Fc>ebP}%`tO&IMzSkCdeh0voku(n9-2zS;_9n_XL%Vbh()!sy zzr#sEBwluU-jK+GRe#ZIz=w08?WZB<`+6d_i#bj>(uVjMG$*=^G^i19$Q#$}VJ1&!V(8kH~Q%Ub;*LFUCEXH?7fchGj)@ z7G&PVg}fIhRr8M{b_+O?Vb)H`FC~a+uU?b$p!|@U;G*Zwdf+_h7?o>GVAzA{6dLTe zOInhCSI)@_bj$G&((UXfN_(~&9%;T@to05!RvjMpHRuxic{_Z$_pc20JuilCi!wl; zsGwe0KFMT!wS3iXaGKV_gKFw)2+2T3%WKcD@@OrnYQrKKXD&uoM?+*97k-IBY@^n5 z9cPF3Gw_2Wb&mLU9Y7YzbKev)&zvUC4}uq`!2l0p=GFWDZe+FYA-PG45F#V_v_ZdF zh)PW!s=zXd&0Ebuy8!aVjWaH_;4b5f*Q}Xx{dAA0Y=YsM$#BEh zxz%bC%ZPKKQglvTl%(UIkjXTL6|tC4)NaBqvXkpufIgSnr-A+EO$=pfoic!!lKA&<6H!bN6k>siYtJ<1jd2dRP= zBxRfkBwN4-3@TUqQn-QAh+SJCrWkW}SueZVj=r~`<&USItsFL!u&d)E6-Zi-x}2+4 zYQ1)Ih9DO}8r2rr#F-gQq}QbxIVErGmH&K@3dQOE+TX<&U?XiV#U<*Rfq} zcs2GHx7d-Tcxh-G%TaDLgF$85G)dTWrj8AgC0Hm*%&W_o-bjqTMS*VuA5sVrWWxL# zWWUM~ZIjgxVx<+rJschO+bnT06-oFhDifK>Ly%N53*D95T#6y{&i-XJ<7+!|wp-IY zXBaWz*w_&av_-hJA>`udtOVq^N7qbozE;{1Zr>~tQM$#eC!_YAmWAe^%f^b~uL^HH;UXBt>Z%~CfnIB}R$Xp)WJR!7+;YQi zIQ-3ofU#q-KqpE zfE^rTMq+@nIc~$AP4SOV|JU@=)RY z-8!agclZ)4aycY_g}^U~ts)^^FNDn_1K*-DH(W!MLXvFDs~Q^3zkG==a*ES^?>)@E zAl}bylmZ$~VX()mIsD{$;($kEz>0TS=^uZ_&UPO)Rb%5P>{$;cSRq#q{Mve?1&lhN&XCRFi#E2Q3hc>@WHYUwgGtvEJ{2z)tO*@x`&OV(RC=QMqM*`yIrC#vwz zlo*p3aVmNq3Mv>&2RON)o&rce&sCtH-dX57BpPm40=$}tlru3*kP}ZCxe@f2+)68F z9(8+hD}oJZ#HI~<%iyJz(WytmdpT(BR`NJcnp^8|97Wj-yX?UnJq`ZG_K|nG{2Ol9 z({-o9xs8M^zGeWWzfDx?rVadIP)+TRyZd;wUr%qbjM|pbiKSqLPFH!+FbI|QH;;2j z)~GD%7NVH0^U_$?counse7Xn+Z|kO`=Rz5|$n!y?YPREE8L+PSb`chfwV7_n@vw}H z1If3xmo`V-{4kt)a74oQy^8ngVfl+K*r9*Ejv06p+KOqcM0Ci6SS9@n3ZXy$LdsLg z2rmn6zpC8Rz)QgU!yTdwM;u&;&acM`_yZd}$+f$#FR6tsI)1Vm0Yaz6FNe6*%j5!< zEEB8GHZ*(kRJj!cA%xf|4F!$|0ao^v$=0UnU&}Vuw&k?DZPCXvK zuKO|beQ`JNhP||Ll!&2TTawHDIuWgXba@Aknd^NCX?;>BJ@rCyv^Y|8E=x=FBeN-* zoSwtttRAol0HSAX=X5LDaA_9}_MT&Y=)27j^KS0i9!74W>1o?zic$=0vJngun-J6n zszk!Ql>#jvkGtH&)H4opyZr{k95 zDQ$HZ*?u{srkD@)Rf^&$RmIMR<+Bk&Ra>L4e!`1qTF8uxBi1ZJrjb1vrE z;*B=hf4H>h^#5^oPr=irz*tTuk_KI!Wwrx8rwr!ux-gD;csWYc) z=G=XK(N*6?cUM>U`#e8%o)HBu;0^$KE4^SVO<8;x3P_e6@wbFtco?oO4l{W zz;k*VomA39Qcl-dis_KcpIQI7Dufzbj{4)XwjSgj;*%D;lANZxRJk8;fYXJ=N(bzf zswYMqsRyu2Z=9*(=)&gz*PsPi0_8x*c-18)#O+F}-^a;SOaYFmro9;v4K zye(~bYr`kOue}p0{ZFd+xi=K7LZ# zcuPwY)ICg-D(&8V>|xsDvjoAH8vec3bMr<|NXx>%YIhY^Q&u0B#(DwlW!n&oC%}xF zOUJZG{+JgG^WM!@tO!GWxhZyAm$7x;*Gqlz32o0_Z8b9dsaMkoY>8MV%DXi1U(jk* zoR=nnd^Li-EJF1yaHSy0MiE;(jfaa;qJEAU``|6VM1|>U%aBM7R5|?9zt!5q=YcfT zrZa=N6-v8UlVm&`Wcr9s&&esWQ9So(?mo=d#o7#?8H$O&8nyx5IMH$tws7Yu*epbm za1oFbjnaLA-x&b#R-ePh+O9*qY3~tj#|BHYW*TGh1NDavJrjr737=dZO+VdTBMw=w zjI-W4nQpT1qnqB$!~w*84d~JiN0Dwe5Y1VNdp@9*yHewEM~!!^_Mhi|$wuZtj7XP+ zAI~1sDynK-&f$}ied(Pk7qroUvs#+q8%*zja7PwKuuqLVHpz2Y_h+J3m27)j@HS}r zl*2|0NmIELepCO%i$W(2&VqcAoa11|nEd)oUps~fnl*hhBkw`c3ZPe-5jt%I!xM=Np{OgptaF~9N9X`ySYROx-Eow6 z@N(#4qH#=Hx{QhxZd_Mkb~!lR(Vg8EQRE6tHn!Fnv7~wOio*fR7omcr+J=#P!?Pc$ z5*1V1Dt_jIey7!ZGF5}4oW(@y?^zxD99upN&KN7XdJLvuL;JDGoN{EXILtA(uy$-- zKK|~%B`*!h&{RTH2)A*(7=#`L$K|^G>*(*P98g-|vJJQT%G)bm1a`TuPI^x!`F%t` zM!H-omeu<|@_`3>doPO~E;?U=b<+bL#s-Q8T*jNXM=JTap+&IZjpt#ZP!VBCpn=h3 zwp`3by4DddXC=Ngq3pt23Pp4$I|Y{^qJV`0IYMpp0B3FEz&t~yeMj|4z*b0kE=qq; z47jE^4lX^%zYSou+&mK13^@zG%reH!(vjo0KW6i6gT`4jcye4t&s=f^vG>B{`zg;j z&^0iZ^4kjfj1!27wKOhgk_L6I?{rK3e68!>keIX=tq(si1$eI_Gx#nj< zFNVoRtu3O=@hn%U!sWr?70qVr>!e4kUb0%k8qn{dNqnQ2(&QAZjt5c#8FRiC;HJd3 z{y&iRG&6`3-RYc8(C`p_hnlpsg6knWVwJpCwO}c$W;PaR&YTg?Q()_-=6gNP8K z@eDrFmhhV?qAqks_pdRO4uONWf|60T(~_XN1ug{dvqWjEr-dydlZH4Ui%xx!x~RrVy?Wq;Avag zghOpq$37HLdGW6IB$=s;2re@&PX5TeY9uLU<7&ql%w#z0w>5B*L@RcYU#~tCB zlj#Z-<#?re`=26?!mQoM@~tCL)eHg*F)R>Yp*2yNv;X?08fY0H_q91~J?I8Zj2Rb%KIzHbExcKdEW zb=t$O2Rq3lb!E_q@e@d2jxu5ld0~R+yG+T#u=x0Wq}I@n*apIj3P8&f<7q_=8+vSo zmnL$3ny6lyvEc&F#%CcT5QM3i98KuYM)YN36;oZ_d}@!f`hW3rv0D~lA*8XLzM3cu zEA24y&Irl1pCV-fUuaF9)c0oBp0VMk)|Gc!FPckaxV$VIn|vh@n!Q)6ds<7+o~>w3 z?f2es)oAFRix%iYbSbsIAf!aWG37P)VZ`SA(kvV^v+4QWyKQuUY^n$~&o#K(ea+5u zqHSseJ6NF+L#vp=Iy5@li|ye%np>U7XTP)r1V^FY6}-Dg7pS?6e$1$LQ+6Gwm$9u5 z-1*&XZ8hIYlt3}JO!~IVO2(h(cB;g-IIJ1*2d64Z0uUQ)1NxU%h@<>VuQN-#y>5CS zrT9?{se?%Fcl=h>({E!FOT@xu@SpMFa5xrXVtw3irdGKHqq=OhX)-Wp??t7Az(V~G z_Z%$hGHC0H@#(48iMosr&sUA^P=B-|U3ygm9=4MJ(3Ix=_7urnDaRnS@7Iz<{J1Hl(beCS=3W?kEPG)RC1JL3@e+wjljX)+Qsg>M|Ozsa|1ri}HLt8o?ekWUpm zvo50DsgX8IxuNsTC8993){!nYm%VNoMz zqqSbJQD*THqNj0fF-4Z?nfRNRgNb=l@gCWyc?Ugi@Kb_@vtg%_WHN~bRIi$%KV++4 z%hr(Y`Q*O0bsH6T!&mHoe!^AI5ix_O&l%GlQiT^@!MyD(Yoy@Ar8YFW=5dGmE!nyv zB#cYjW^&Ku=&HZ>%`5n{swEOGX}u~OcAy@f zR%Bd{Q*eOTQ=hG=J$En0Zq4n;k*ZC>`#U764V}L#nX?iKbRs~=&M{x6@|LFOL#WsL z-Q&JRE0^C+U{j$cFXb9}2khT(qHh#q^G zi?M68pO{anXXKLVJjCz(%l^l|ZLF;^-<{)ALZZKOOh_t(astSp#!|nWco_G7fAUBs zjOeEexy624Qz(s3P%ot3B%uN1Bux3%wZwuVjs@ZNHdNh-aj#`kWnGM?Ql|!pxPa|d zPe*m{z_*&(YHJy9oDiv(h*g1bZ^SiyAoMxnpoIk767LLp+isv;in6Zd-@RH6L}Y)?~IBJAKN+tWm?R4zW@ z{OCM{+%SgbI2Z#ix=Oxvj-$nR8zqtlCD)w?(cN-7y{;WaQgIC{|9t353WN%i2$ygS z78{C#<-)Ry@yyW3K?gfis@#i5Ul18On%^`IcbBuNLk7_;=@zv+%v+JrkVm{Yeck1d zofLd3h$pd; z)Rii28aWx|;U40@%OE#JJ?h@ncG)UK5I;h~uzly_rj-fU(BkSRtf^IRq&fA!@FYQ} zK5S%ImbIOrW7f$XlFiF5*gp>v$}ptfa32h_3R5|PNFa=>QlI2;HIL3`kd1rc!Ta6L zBadr?j7a`D8U&mo1l9ueu?OVUicBwi7S2neawVHHlgiqeH8_5QQ6E>#unO7g?WK&- zl{=gfbITwix~R~_rvhOp!AkJWpTjlQIY&OBmk8FE@NV90#LS%(O)BmjQ#xm)tQ0{s z6x=lGeeR!Vu{vZjtP-}OsHnLPTr>$B6VWA^<}3MlfLw0io%yW z$*rM^z(+R5)tFMUAw2jv>g1oi>D^U6&s&s?!t-J)hS$i~+$J~obv9+sfPWV@TREUN zMj?rwh?ULKeF=G^oFzu`&o~P0EVyJ*k`Os_Wn*eC}o|)fdvM1a4?Zk+n^q8 z&tr6IYV9wc<7wr-%q7yO=eR&VafM!)iRUpe@{__X`5)roC=bqvxigIBv-phVrTdG^ zkW5{V(q(rzk2y5a%kUUlXKfq4r?shCr@|^?4er;@09LmCoHqWWS63bUW6yZ#%dGL% z`wK6KZE8rv#6(ki=e_iK;d^omvqF2R)gG&=iU|Yip0jU0aIY>|Z@{N@h3h`5D=&lG z(LP2b+=844MMCTlL0`{j!jF{+x%8o!!84!S%dcwkMkb*(wdpoLkQUxV3?wL0Wf=RY zBVj4nrkYDfhgWtd!3gbw$*ES}(sT{txp?X*d>yBox}V4p>MzpFTYUWK(^@*zjFLtg zws@uQ7xzjRt>r^DxmsiV9me+S5U4_1IARqN>IRu`fTF+3VI$oYBax$UhoKx=so7&M zSLhd{aUv%W+5AyfW3|+z6?zFTsNxq-r!?s)Vp=B;4G(B^%cM=g;X#X+|KOTs;@jDZ zESL?zJ`_F{m9ElOfL45xW)WV7gS!aF&YB9ER7o$x#2uuiYpW~)b9z~S>fSMmPM}_7 zt$QSeV_TGiQGCJL8vCbkgQSd(AWou*>rbKYio@jST{GpSma$e7i1=_uTJ%ulYys|B zxmHFlIZ|zQaw?(Jt37dwLqUWBx{ppz-XsEfRxlT+i0aNnSQX603gUVsIy_dqLIXzQ zr^4M>zA+`8AUq<*P&t^wtka6nmTQ1UinokHylhsK6=fklHmiWrg*2ic)hpX>OG`l( zPIu=A_tV*wZ4sViCTf%JAQma&!yC`*CmXc|{@R9X2Hz1Djm$Hg`s%Pg9TQZPsAw2R zPvmRy{wLc^ix6AG*mHqKvGXL69)n@0&_8|#_1V$>Dx~9XW8Ng9zGEZmedWU!IL!^( ztc?0h$>bi-cMi#b1jytK&&8AG55w#?y3JIDiOf}g1W#CnTcdeq@{GrnG5@Lt)humY z@wjejAD&AwP+mUr8u}^ZC@Ku9#qM)TJ@;01d%?uGnWy zS{U}0($`OgzBR3eB9yemeu{UR?+Frqvf#}ZaMSgxm%(Va04smH>wk^GVC|>JO55~6 z2AU~{^osuqn-2bxKVE?!*@Ra&qceqeGK2`B^&j+2?1Z{J=nMW{=jJB#{uAqMH0_9kPo+%QULN~ll>T0ERWBivg9W+KeP{ z$umb`ebVt%lpVAQ5!rRK#=1}C&K_<#Wk};ag5z5&c`;OsHLp91^B?wtEaetWxfB(= zmeo`Me_zK=`^9`-JrDl;{+rGNyk~f?Y;%hs+jSHUrvmffN;*aUed=nw)dew-Und>Sw2F@-wb z?e%pUF~D;sp;9Dl=+de8b7O2`!sfkN$(9L456=7u@2So%5O2SuU1eX6hku5X#a7eF&_3gml!-F{60X}o8;9wZ0Qso|P_5r+ zlx^{{=|+uVzh5u!gg@78Tj3Jsb=J8;Ni`TEp9KtlJU2|jcApIO!2nbi$gZXL$&v(} z!PxKY!NNH`5~HrS&;7u}n;;2URh!^zgGnYroIp^XU6FfDpJTaqppc$^)qTMVqWAQM zmsM+gp?p7j%Yy;hf0)fo`^F~Um;!!m;yQ$flb!V%GB#kHayi^Mmi^Vrnp*t4rAj1v;K< ziANqf4DRSZ?axQaHiBpZ;gg*y;yc^o7>>4P=$AOL*nchbH1hCgulZU89I6wr9T+(0 z(TXMshFf{YdSesqV7|>E^Lc-$1dWqxz(IiUr<+nE;`0)z%9}J=x0OdG@$Wmj zq0zIv;H}UOTHKQnmKw-1tHQIsqtkWgX@Ohj6pc^N^26060&;hApWNa%n?b1*hiDmw( z=!AED$I?)>W0nasG`nz@{EFF@kv2QSdB;A}&MgPRTKIvszD}HErWfqf}s~Dqk z3%K7V2xNTXke;d#=pyJkeyIUeu+)CRaagfv*=Z^qj1ea)=YCcoHfIzI-wXg3G3*hf6X<##xLz8FUF2?HNW|iXKPw35j zK=(b;Ds=HG*?dgK)T)Y-er~JtTilN2w$zN@qVkbH48=aWvOD z$~`&0Y?pllzK3Y8;nJfUlE`;Zn24E}U?~tEo^!q*zGZ2lJryCDs6A(ccXq%qe+nTz ziTrFJ!q|a$X@ICbnR3a2PN0z|2hFZ`U^qd5rUo(eu681CW;i)GfTVtZr+!Ii0+G$R z?t%RI+l9jBC;pM;1|)_2EvYpLL^kGX0RBh32L;DZ{3weL?O+>PiGTNJf%@MTr@nu2 zl=xq>`1H&lqjLkwufeEFpJXn8$R1rmnksH(2pQ6^!H^3cf8xSarSCF?Ik#N?XBnL+ zuwj`|($;>}&3uk4u3YQi|Gqy_KSuiAYC!p1cRVRdRTo?VV)c|K3jh9nDc=!fBsG*} zWVO+n6?`)|`X#1vt_I)_eygp1Lp#+rcml@z;VgzO@c5-OIQ$CRTh%_%K<6K-A)S&^ z{l1IR?g@Gla8C5S0U+t^uUr8jlivbQzBe@>-(Wq&kn4b#6)?3ghEDS17xIn1sn;5d zT%d>^#Ki5pF7sIp+AdsL|0iEzKPz80D2uT-dNA6>BYLo@+v{b%_gc?wNU_MQy0Uv+ zMH7ACsRuj`zO{?0i*JkL9DDZ8bI?P_7kV~|qWun>#L2l;EVFOj=g_P}-^y=q&sF{? z_5faCye-vng!HI_s*DNUSAO)8=LyjAql2Rz7-pur&l+T_i|gp`>i*$-K=wCl!$-qP zPjf#A_MN9X!YmO+Zq}0Twpg^U0bk1}JuJoFh@@j(b3UFfj9nm>D~nUO4@;fOZ!opB z^iOADekR99yBBImGe{d>BC~=kUm~&e5#3k5lJD~G8I;pUjDVxVPhM>~GTYqyo}aWZ z!9#vNLN+g4t~g_DK+wINBWNpos`oeb^x_m&qsWSHmmt4w#CL5Q+Q}vemRqr}NmEeryEv+}3g1FNght~qHS5!~6A=VGncsRc+yuv5HH#TQ#l#^0Lf|^ygBzt? z$mhM1k<13O=-(Qnr}rdqHFFoMLU!f-qv`Z( zue?8FQ|lZ41q_zjHu-aLcO{|>o%NWMX4Fr4O`?@ix!I}A;qHZg1-{wXU%3jDKA&ZM zJ8P#24212CKll+lcL_R=)xU~^0lP*s_GjxcGqh^c>uVa=qQa63bqOLELnckG+yE6* zCTQvUCb{8~^%)o=ax6!QMtPEHcw0m-oAFyiIE}PV#(4VczVX#s&Gh~HfSS?;ND8g9 z$#%oSo<*%DTNUoBSp=|}kE!Jk_Z|x0@emDTevvWot*a2*q0W2WCXNf)a?FUDJcfDO z)>bDhILPoN=c5jYm?b!~E{cbX^b5F)Q39NC!KnJ3HI#oR>ZC5VVL8r924{&Xc$T(u?cScJy;hFZzZ6!uv6m?i34;Gp( zAi==fIH_%LV_%r>TJZQtzsUCdW#TBYrU83G-9tl|V0_g@l_^3(1T*UdyNDjACmnIU z6+mA|9TdwcGTL7fxNI13g|AfO>X+aU{B_=&@cRm_c461IFu{!}hlGhWcZKMA!wUyY z%eMWw!MLsw*Jar~JWp-F)!~&92jh2qV`xz`)+?TGgG4er4byc@F!!x8vKIbuNnzKg zgoQlU+`!m}F6~ho3(mO^mVp>K0-y6#~iA9a0t|w#8V)efTh68NsLQd9>y8|{b zm>N8;tQMy*E8@}OXr?-P9F@UockHsmV%_Me^AGc|zutd~mFg`$p(C25)5c<7c)HIj zhNpxx_>&4x?^F_%3WaYk+|hTO9!&>{4AuUv?N}((@G$Xd(4KF{1B7#^?)e_;IYqdW zFnn&-{dRD=%d+RCnK&!aLM$o(cCbz z31;%xbK>zxpj=yg^YD%rB0TBlE2N2!J|UUmP+@yOUT!Zv@_Zy5cq@4INnk?h5_jCv zdd543?38)LAGtA6qUSS(o6JBJZ+1zbSv6-R%W4>ktMVSF`(7RrhD%+<{4zXmSCkWv z+6Sb9aSr^8$P>imaCm}&Skz>59qzCckgJ~|F!e=nEaV1E1E-#~vHG_z7L$C1F=2Pw5W`HLME7K?r7o->221}LaUAg8S)gy@%1Xa3)+yB7%9+RYZfqt0=$YT`gj`YMwQP1h?qEa?HvTL{EI)=sOj)1^m$r|HrXb7-+SCNf4l4;bQc(Mj zYd4xNBX=g@*fiWGeP@e^#C+P~1c$IQ0!aX>#*y4F`R{TeWY%P|>Yb@Z*VmFQU`jwQ zUG9bqLeErMkd zL^>Sw^I5b|-6e-qHv`<5>y^2nd7mR`ob7@aj_|0}2CXZ^x+dx`K8Na2+kSO1+p1ef zW|=!L5%!UffIo^GM%tFspqB|dvj+CF7zFR4HDWHqP~q2qqTf?*P-(m{$`Y72IK7??!03y$byW`@2#h45#c2QMujX(x?+fzn`8$7I*jJ zRj~dtf=KOTLXYEIWGX=Ki>kLHM#QYpTE+bofMfB6n%QN-wrk887dBaUPitCkTwV#< z&(v5;Wuj$DRO?yhM%~`T}u9QOo8fw!p?Kh7x1%`|mq{ znRrG)wB;?p=a9+6tgx5AI{1X;wF3W(QMbtH|Hlgz58M==IM!TJu0BGQ`!>A-x)3hU z;>7EFW&^O>S?K6%zQ)srW@eyTDyrqn?9Zp=hYkHe!Uj^eFvZoJyqY>_Urs0o^R0FG zj`A@g#^Q6djR-#qIA`#RbfvY@Vz-ag_GUv>LNbmg?$&GXtG09TV2TcGV8vlp^E`^g z3sd5BcgupK|40g(OT_*sr7)_H()Nc#M^3VBlN2{^0xqr(1RA4isMrT%(&tQ16f1pU z8c2rPq2~6Ie93y%8kL_O!vR^r#U~BbLcnGyucmy0U#XRB4cLSycv}uC60ziLo%nL- z@1h7oOBLFEy99=RmUQJB1@`zD@UH&9-gOD-br9HjER_NK8e*w5WGXE4Kv~$w)yX7v znEmjfwOr)R>e=S*H7yB~nOa|;+$N>XkQHwV0 z;^9i1{nwl>m7~fr6rz{y9HxCF7?GHYcZ-Ab`68y#o=8AkT+K0RaFzUS?u(R1pI=F` z^cVU(-$`jmS)81GtE>Q#^mR#Uc7iBr)fmEzw%f+NO(qWghC#{15>lX<01nG;D}xWk z3cX3(P9vEB@!aaha$VbXqyf%OcEIuj_>WPSnkhmwxAorZkU@tMUiV!lUGHH)C$ZSBTEtvwsZ4^{o^$#Plgq?WZn6VUp!jRW1xKw{oXNA0{CH+SLSo0S zu1gc2-Awj1Nu3`%z>t4pwzBxpSWkKr68D-oXOUXa_y8&dIZe4I|CHUz2!o-D)OmQ| ziGMZQA?_6fdhJr2wp`GINkg6neDM=wVmJiudN&UUR)FOs3fae7U~{nXoda0o5s{yJ zVl~7@$ce}s8=<7UwD-=samYT~kfge#(M_?aC{=6w^Kte=i6pWBI8@|G02CVIPPzQ% z)CS>pPGVT;N+^HI2}8>*@Kdnz4p#sZE+-S?<%9)~BCnBdde zRrroNn^*eZB|>b}W!=m+y%Z+#6NDtg*3eqg#b)AFo@Ai(i*U zL9?^yBrXFCArbA;C=%q+$^38_VOTu-9>IUzKdPGexQ?yW7(^+pOzf*n;UgHyL9#@&slM{?zU4hqu6#hl_+@?L%-aLuN54U@m}~()Yu<#rrs)mo+3Yi{bO9-K0D6&3pUY% z-Q1=_H&?gCz9c2*#V?HTJQ>51_=IpjHnu46d)K=EBPw$Cyt|A-(L&c6o1}CZ-^&;N zG3^VBbkeY0rgv{OBeZd5sdLFLdY5Xo6oRyQ$ovIN+VGBT$s28;vc9zb@nHzJ=(?ba zYJ^*@MSRX-jF$lIVCJSsWs+sT)np*Ln5JC%m-S zzS9z^|7CshJUi2+57**!iq|_@sg?UGUIcr*Qx21jW|dTyB!a-c^zgi*&T#X@s{Pll zDHIjdWQ{qX@eo&2?!16ns4i@!J)Zq(6-8h4m{*)a6KSbKGNaT-RdVvR)>iGWfI6Q9 znc}_X8PBq{~MNuNns$;N1k zi+F9&6>Iu3K4ha5@=Aut!uhwggPwC!h1WYW<2 zbo$nJ;NWI{@N5}|_t0oAzp7IAeeUKaIG`6IOxp-8xM$Y+%fpV+`hG};d0XAPOrPD? zTA-NYm{qH(AYsP6x9>Ta6Zh)Sa&;9%E3%+k@Ra*`?tyPX?}Y9ixppe1hX}m=w4)2p zCaT(Xv4Xj*7Y_*(763MbPtp1-)4S>CM_VG`YJwYbWXwpDY86z_ha*Xjsolyw27t8T+C3i^t8k~muFef8ItK{!M=e3Vs#8!4Qz3j>d z?^pSl>H7zw#!`E_>Gj7Tc$tM8pSV<+h7m6Okz{&;Kpps!p6KmBcZik%9u9&>M*y* zI$Nd1*m_C>`P`g{yR*cf7{H;Ufm*C~b32~N(xo2al#CI>MVB>66vJg{+vpH?4j5e- zO!6sKYfN7r6&3Wgt+w)Lm)*K+h=gC$Yy!c`_-qWN3s#)Gz{(u3x2oi~1UM$3 zY7Wi;Mzl`=0tzgU?u7Pv*l;;)=%vwQ-(RtJ&aKXqAEi@rQzQnTB4d`q^9V=ycxE3Z zIP(LZ#&a{IF|;8tJXjruM7M@E$dZVtw2-l4+N}odLd1x_zlh1EFW;EEX=p`}H{yR^ zzOj6hj3`s<6e{M*2^g3Kb`mPaeYXv(i6yU#7kMTQ+Getsk0Natv4w0z$ZFV6l*BeE zr8%GKggN?kdOj(`q`_b6W0e@g$A=*{FDEGhTlNfGfrJjKY2RGo-B$)=6&filb5~QQ z(~Hcm7~9s)WXb9Jj_h3Iu;fJ~LrcBMYGWWK^gt}&G_@I`&KYdjv57Pj1Skr4hCktj z^#4WkrEHHvouqf)D8Yv2ef_P~u~aYJ#(yn4oKO>)0K=O+*JmzNS#n*kEJj?05+3t6 zIkIL?mVGs${^wPHIF=!aWzM{6Gfj@`zL9WzJ5Ig@S6d;f=}5!&rO`O5jT4gx?;)I^ zm|gHJ-nd5z$1M9GU4u=G+*OB?Otu;Nuw$AAb}B8gXFFeIr{M%jP%+g=@HZ8Mi?Vn3u*8Yt_z0 zY;&kt$5)isk_$NU93;oalYzrsY;H|`O2FCDEdP( zfBRf5qEqTcyK;9Bn2x1{^zaKte=Wsx^-g@T#govA6xva^x_i>t_a6LWa}*2+Yt_X! z#(bL>Ktdre`C{K9Q@OcPrgVY(SRl{JdgF{1tG+~PKZIas4lG`f0g6B1Ao<233L<(f z;skxh=QQ$*5{{~zJPx`}k}>!9E9)OAU)j(lXt5KilZJ&x5IIkd z4ta}(e4cBDML|}$5I<}YSt(5^O1G*y@agDkT>7lNQ6i4QwIu}*uNC}(HCMZP!<;Bb(> z(iLBI)(F=(>WhHyGz#Aj$k7R60q<)=KZDEGJh_iE8f>u}8?@WIy4W7k=DD(Dc zlae#Q6CB@u#jf$a2gRl?=}WIEc9rK%Y!+DbH%2LF(EuUjg@JubD&H*KQA{*j*Tw$w zL_+_#eMLeDwGw(@#4?&X9^$qZOZ-+E$BP^tW8SqVeX_ZYek402_F~{~4ku02D(pS-Wjk$(==aL?U%9rTC|VQS zgPYY5Xxj&^OK}dDFwOF}o7l$qbkzzp7<9rc46Vw(Sfy_VN?v87HB78-lY(E_+LhGP zFv_?G2C5XquZMx|F|5?-GY*|NX&-Hc7BK3&rG#vg#H{(a{BNAd@U%3>8&jy+nx4fD z&y=dpH-g!_L_upR8^yoBD1%y9u)XBakE-&rLC!C5BO;fuOmjd^$0LM{b}MxSIu3Cw zCEuDoJ6-Dv{NCEM281*wivd{=pH)X7!n>NqGc_Hg>6`g2U^dqO`~j(%EICij#=muk z0pT&bS+Ardaxf;`4C1@zRt(Ek&Zwx#4`H9R4s-%& zPdDsR3uf!o;^VBJb+*|%t3<@kn%Gz5&#=jrK^qCTn85<@Ky6rv2{Re>N~zc?Dmx*O zK^)H9Zbu&LzGaB5l+$|3%Le&%ROC|0Wf~3acQ_Nibet&$*4#^#>GT^U6iQ`XT`7_F z`%s6+ud8#&5IMzB9W;5yh8mLeeP3BE=9Pu21mD4KqZW>{DEZh(6`!37%I&y5mBp-H zcxTMegIYaFdHk=UE@2H3#EQ-3BxmS)v=CsN`eC*ck)%*2WVAxwZyr;nSNeYM_@>E5{bd4nK^w(jB~$?GoQ;MDU zpK6doT|+morjMn#em06WutLwrGk=v|Zi=dUJT&P0OxkKd0sPFttzwg9ZW$RXZD+0x z&XvzP^yUIjfh?u3K-tNz?iG}g`YM=*8WuUNmdYcocWJq<}(wu{4HJerS`}o()tCWBI8+ zIHI}i4d=>^uJW8&K34H3Gb+)BE?>mBAO@r@{6$u zZ)>rTu3sMH%QY%RK{s@)%`vK~2(`D<*0`k$Zj-&8iPW`#yeATls$oVR$Sx(z6)BTB zi2AuqYpT+{Ndn)M;-e%JN=K7=3X*74vR;TBK$a2jR)L6hjk`J2GS{0Kt9tdlU^<>q zAOmYVj^*w(vv_Z9n$bbjg|a;0L~|}?ZKvu<=xRO%u_RQ)8jQ#BwpbX(`=r&;p3Tc- zhPy$Ezd1G_u6}qaf-|r8QN8wk`e=mWTZ$`(NV4q2){~>$MOsT~D7_=Sam~N)YmIOP zO^l;zrGz!Qqu&(e_hbW_aN8}pT8vtE3{oc|&rDH=aVy;N!{W5(n)4y1^%c^S^+peU z)%ZUQJRY(O$|SbCi9JKC`o;qT0t&fF>O+$}v@t@O?v z(VNg^nd1xwLPz-0omR(vpyLND_vG~XLH<1 z#-w1Q97CvN5Tl#{zAu+%qnHZ*3^v3|fj;IA+DldFfix8Ek+Ia9=QGqJG0qN7r`}gp z(HhjbE>YuGjl-vfOnclR^FOF^gjA%jobJ=j&dAhIR>!e!6iv8 z^5hmy>#=NN7hyPdY&}?)ahF*xU1!;&gs!Wo)O>pT-fHpIO*NG(9PxMKQL=fx3*swd z$Xl@a9uLsl_0W%oiYwo<#J>ckEH2oRqAWL6y&%W@H^Yc4lolr)>8&^Rr$uV(T8(P7^SDoFh`rhut9l7r&8P~Rv0o`d{RX<{x%(g z{^=edlsuOc=HDcFNcA=0rSF`k!8o08ZWL#7X-!So;waANcQdMjYsisCANi)J)=yq| z$*(8gl^u~aPs<4CVs>2$=^>uKB}E^PKETx^)A$F>Fy?&}@x!^SRv}8(GR1#NqULEe z{jHOCy|p5>XA6c| z#eR;TQ4NOT@&z~CFUgf{F3+JR2_KohB|#1b^qNJ<+ly&JcOrm;ox*~fY7-*g6?DAF z*Ry6L*SFxPm^;^noSzk-VG!OE6K^3XhA%(N_}8~i?Z=x zzjhFN)ecW4YLzeJBP%dKOMZWTL9Eebc{yCKg-Ni6jvuZ14;GUW^A~zU3>7fJI?MhP z?n4d$^vGLJ^w`*t7%bo*g{g=4r?pkoaRHPfDRO0eJdW+W!(i#mR8O0oYOPLP-w8e) zGrFj#5mU0}4OAs(gqbOY(Z}?L3z?>9tucsQp!LRANH7hEBl#^7lc58-I!u_6U-lmyT&vZS;3OQ0Krz{*%^E{G8Z z?M(yy;jhiorJH}5&4(RGnG+`3p zg#?kz`KRH5g0L#wgncW3;p}X25zqx?);;*HJJSJssySFy&61F7$Rd*g!DmR?)xp11m>V85yQBRv%yvcV#z>4 zW(#Tj6Cbo#g247E2kzE@Q~h)+L}6$*VSz{ZnQpoE12F=h=sRliu922%b__3IQ>+pQh!;e;{2-J zN#SI_PvUj)|Dx?3qhx8ctlhG9xoVef+qP})a_zEh+ctOEwr$(C?OX3TeY#JNK0Uhc z{k}UgMvRR3m5~`4YsQQ<*Rv?P)!B4z)S7xzb^JwzlH4II_83Z8()E+x3hS%+cysZ6 zwIoL`hJ;NFRnY^6b5U9qTZOwUIuku)yF9mRqzh`o21?rIm@Gh0A}oe(OKMQ1r6Elt z96Bi8hAHH}#tcKVJ(OWE#YwQeJ5eI%SLEebWOnLG;RE$sh(IC;7XJJ=BD$0j7^me8jFAx%QrDVC5GoirIp3UsEZSN=0;Mt>z)JC{eYiUH*mDq!?LKlbCNgHVEmagMP?3nqQ8XD|Y zQv09zoJ(Z8RhBNN^`d$FLiKL83tnN5R{Z9`^S#nCE7{fGa)$%=2xE-_Op*xH`G#d} z9Dznja0m@Ap+oKo3CfB(5cP?~Kp#|+S(@2-8oBB?mM_8zjksEjj|+v}ose;e!tGDW z$rl#;l}E$2miuf_{fJqCQ$4lOUr^V>^ddxyCCwW?kDSWvF$SrRU_#!hi`q~QxIFY z=tqRlp99xyma=gu@D#lv$u84}`Z~cMZb-SC-=WJ77>>R~6&Ie;U@-T)ol!NX+25rQ zkaiUdS^*vybw;1XI4oPdTKDQQ*l^Q@hZ;aB@_!mgDfM!_7(&t4)+~SoXcn(j%-r`- zS0KZIXvQ>~MOHf?F6vVh&&r4YL>cmWVvOF+4y=ETjyOU!_xMB4t|y~rfd<|^lZH@U zifG5xuZg>|4dze^)mB4Kil1neG3eO;fY$+V!qk9Pqdg%V^q!HL^ZsAgS1FY zGFQ_i6|p=F9Zdql-9kjn-AU=L4TIi!VS@ezE#~HjxD+z8l)jdQkc&UtUJ|}xbg4{2 zbAQP8p4NZ(eIwIW(tATJA2Z14R+_NVhz2Jmi2@Jh^RcV$JV|E2`u9e;p@S~1)k zqw87bisO6kkS+dZunR?SxkA}`x#thua!7Z=0;K(Gb?D4y{NHD)f_UpU%B(UQ&du4i z;qo>wUiOqR7AUp0U-eC&(nXq2*k?`lbtz2Hd|PCHG0)caWH(u~sn z&QZ|vQD+pnyG{%DXX0-RGm8ROvJO%8d!G0)q))u)sq9&xf+Il+Y3BDvx(N+^$J)p z(u|#gjZxcZhZO7#xpfSWSwvYGYE2of`)}fk59)w2D?OGkDs^bKxJL$o82+?eAl*As zlJxelKK~_wcNd|6L+P~RH%Y?er8t3qISjA6O;@5C5JkJ$SS;|f{SFbVYEx?YcZp!l z>_bv$t;r*~s^y0*ET(&VIH?|zm=LyLHl9h9dEn01-tGeF1|`*0vE8%t%d5Vz$4fLA zrILtZbEW!Wtf0=C3HP9lv9bz5Zyif+3`Te_cTKxEsHK>iM*ZQIgd_+=5Ks`~7&5F2 zMG&w?zvjMqR`mSpo5`!%7TXR`&%JO8?&2>%&g_sMRQi=ykX<%r1I8pZk={4TJ|=#z z1X8?0yE4y()ls=vBfLGG0k{uEMbpkWpHkWncsoZ!JPvl*NXs6ma8%ED+udGY;el4E zu*Ocf6IW~TM&_pNzHMbc>REpW*(i52e7uC=X4P7W20x}Mr0&JQAYjfz6V^Z|YD-xm z+-QL!ZzS&3Gc>pg5j3#gM`$kH;gYhnu8@Y4T#Cd33f#mhUGH|3;J+UcTTh~yvrrBiQvf34tTwhgmE;`c@ zhu}*!%cGz*tt> zyG6~jP0<~qE4Egkl|PZO2_`nY(87vyh@{dg@->k)#`v3uV~_iNQR!~HbsLI&_QVeS z+5sx34| zK&Nco7qHdIg3;`xnL?YsW$!iKHkKK%A6=^68edqb1qWri1f+IfC6PuOsB7H$`5oZ) zb`g`fGoE~wp!{=Vg~eMmQgxs}Nk-J^yj3z=Yw-xPdYXit{rRhm1^kugGHuzb zUnA)k%xy~8$OA{7dD*~aCu#UoywAg2KPfZ76f;la?l&^l*QEw#6XdLI{eslcv)4J3 z+^P(T-eQ*FVvk?X>)Ic8fn^%t2T58^ir`&wL1k*y>G_c?+T~72qY73nxkbOSK{|y+ zU?OAuu*5^!$O2+M+2273%tV06O4j;$>+i4e_UnE=tZM?)D6C+;VCpzmu5y0GP<@YQ z7325+!2dcIb}ynw)~%4GGz|oWtD=It={I!NX|BccS{!e42y-4U_haA96e-3NbmyBe z(bT{X%yNI9v^?99n;Bg=) zcQ$)P*s8XEi02^GIHghah$8Id(efUCGo4Wcj-}J=FB|95KP{F`x6}J;fpl=KA{9Xp zNA^N1z$N~VW5%$E4AHMkj7Y4@hdmX`gL75otP|oCeaNtniTf5A6i66fs-cbvfP2>H z9*OL8ySA!vEXwbzC;jw!6`*hh?SszABHZdL_F~A?Uckn@;a%z*2LPv6DOIUq;X4uIQx{WZj?yD7KTFi~9%-vC>@{6Eo6F!uloM6{w z5n9L30X!{y%6o}@lmup!g-wolYi4zv0#!%bpbrr>4>wkPG~Yu)sBg46q3 zZ~%<=$=UaQ;P`%ML}os{38`tmR(ZwYWjK@&s}2A+kB_-Xh3M31|a9t z9!*t8C25cY-uV<637B*qZp^B82}N`iNO5#Ne*KHSp3wOI6RDxKxv15Qxi!Z%ZHm$> z#N|;Vl0YP)4XGjp_BS_i4CJk@FNHb zw?s0hTqCgl`OS{yeoW%JIC{#7vDN#H>vmMyFW_>jQj7(4`I#_E88byDM_UE0rk^>+ zBOl=~u<6zcN07dnIf}(dh+nhUs|97EJ9ZshpJz=A_7I9A5kwj78j=W|F~*wyAT8rp zmEcBNIo^IcQ1w zvpb0}{q&dG)^b?bFE5rR6J|h&!~Uqv~H8$1Y%hoI1pv z@$|5?6Z%tBX2W_Wr)_(XmlsF8`cTpMSB>W@YG6keWyjBwmpbOXaO)m*`$5|Gp+%t- z5tYeKYA!CNlXBb*_9N)a6P))GvEB8XB`waGM@&@cvtS`38G*T9TsMJ6DBvz{;WP*e zHgd}D=BOhy&qRYKO1RHz*dS%chf|29D&{`aw&hgg@P)2K#zs(4&!Izl2Oi;$z_gg8 zch>itt18kL=7e)#QHEvm+OLA!JQ4Z8XLSADNVaUBVo2+k!=}-S90Ug$Yl7VPGfk|I zPR23p<3`XqY0`{kfpZ2}#ao|;J*|Ar<|!n&ZMRnseUbZV-|+Ze{lc z)6t0#v+`0U?{dTka>}xD)ToZ!}GijqREjRHl4XcP!ou} z?s*)kJ{p*&v)JM}2Tl+LlGFO30gq}zh!Gm1!KsnWs3+tZCd~<-NJT``WmZ^xdV68a zSJNByI=6rbiO#A0SjKJ&vtd1id_n@ILmYadZZBpop^Gr(P>S_4J=&gan;`z`k6xW`#5r~V~2Z{1%HYEnPsm+GDBUPf|4j%WV z>!g!}TL9zSZl7}>Q9bY0ASE?hb&)yT*zP%wVX;Ab0P)NcU8hwoiWiA^Ovt%|n{->t3PR2s|&bl|zOjg^QpeXYI7vuF|8Pk*Y$KkT+MiPQl+k5&_Wz(=)@;nkzGY#T_3QIodvr(a7YPziVQBVdh z>Nz*nogG#ySCD`>st&4gW+#>&r+9ZGT;jPv&>%yHY`$ir%ns=8RCbViIW(1yqR!)i zg6TfY8e2|G(E8O-LO<6o_Iqk^s^SKWoWo|nSC+yWE~6MDg+lT8nIa#8I>GIVXR(}e zc}SThxR)NYoMX(f>8qjP?RkJmn&R$bQIrBWtCdc$-#$mnrhv>ttD9idV;jzo{>WxP zFUZilNWUW3cUAg^w0ZJ;mXYi%+{wHtBqr9;IYA0=>8gFbOGiS&CqzKrFB@ycG$Cw$ zHY-YOvkjQRi@fH=r+V_lr9f)#EQA0SD!0o7D`{^%S?aFQAyJDGOtx_>sCV7&VD9}d z{?l}wEj65~=8f=!QjcYpHe8qV6omsso}bbZKu$wVsaS&CaEOuCFCOxUJ<<-Dgu=gH z$-p^2!e$wru_{DruQLnxR8ql~sG$bdBTw5^MGMy5g5^e>n$h7U{9|B+{SgzQ;?tNM zX}dCd70D0=elv)5UXdR?gio&*Bw6C^fajfhf6CuRX7ea)_!Miek9Z|{k&d$lF|gMS zTpgz7#$VEFnp3Cpo)g&4AR$SyVmZbn%zQDEo3M>Si?Y#k0$BQY_jpx?om4wHu=vgJ zI<%`@$@1(J-eFQ_Tel=Y^e-2ZjP(m&m4NmT+n1Afzrt?e$Xl$&V8gY^>QP(KX`CS3 zSFkS_w3tp^oQdA+?~^W{L-LMVzYVVy&abWztCO|IB*r_d99O*IyJ&ym9-Tmg{;MD= z>;DVxs=9=Xu(bT&f~XAtn!C#QH|{Du9y=S`{|R>WKVqoN|1EU&pJS+hg;4(^f+}ZX zN~=JtNUKDvO#4?1_5Z&Js;#4*#a{{3zZO&4zb$`dQNQf8*1^Qi$cWa#)WYz4?QBi!Nb5xFOzT4HO6&G7QmTJtQvY*GmF=HS6e%OC-wr19 z-#;-E6z$(PzC)_?bS(ea`cD~EmVd+6;(ebprWOuHc6fg=dmW5~j0~&|ji7jVpzIy& zjPxv_TvjU-+_{uY(PZQ?)<8EFUZ;`O4JPUQ`4<~B^t4vVMpM`a=^2kAQW;YO8tcg| zB&Z`(bxaeEE0e^;Q7LAKC@kw#8kEdL3kr=Z9;X}MG(Xz9uClK@H;>%6j@&nsEe4>R zuMhQYZ2*FHVc|jbfwpq!zTy zsbqp$kP$%uX?lD3vBm}E;`XYuj7+$|w0L^8N{$sN&`~5I#%cpY_#T~cki!13QGxNJp`zsHmr(9R&-&@o z5d4gqr0H7$3fPOh1)JC<0i$=OQ72fr}RbjuK!Im4c4z7RCF`x*d{x zE%yG>D3tHyYeYizAzY1`|10(BC1t38*&)~HlfflKU6GMv|74HC@jq66RTwItNjs2CEr<5ana4)}zvNjhT4qRi3O~zAxM0mBxpmu~ z{^tzV6&+ju(XE=Pqi(=pqptlV7wm-P(4Mq2rF9)bC?HarY{A_|%N&$8*`24<^C7}2 zn5WhGx4M?ZQ#)MEh~RozFpcXKbzicJU3tg-=ERWx&#b_AzsfnJeYjb_H{!j`HVpI8 zt)R|^=G?W8Ua`w153aItB{jqI+{pS=WLt+4fUb7$@98A2_Ctd!r@(>Wo5m`U-sKyP z_u3y(z(`1pfyzBgyXXh$P-`eVpb2J2Lc-f=MLQEXsXsHi`PahywB)xx+Q*uXb6JDV zzje@*>mF}o)w_#(&A4&LuI6xvvZyBq^AU)f5JtS(YJ7!fbJgxX7#&mLz`lQA-sw6I z_neFo#Ym+@h>m)%*@4Cf`W_>(VV^ANW%B%F=iaE`Pulz_vEkKJ=2l$;_lo*-5N7o8 z%)Bi{?PUyktPAV-qDAv(_tlIjyhhlMOr6Uw^~|@jn)IEX$$%(>%ci_}6m4KwMk#6< ztdy1ECu)$?%rtms*DKsY(&Gy88RI&NtI@cl10%9GoWcN22a8~oY|ZCk?Xvb>vsE_I zqDfEdB^4u)z>!L$%fO**ZSvt7@&}TFBGuv(+#JxVRDKR>Wf}M%#2^xW{8T&Tq*HErHh8X@qd`s-mf*sw}#=)Q{H=s%LF>cJ54js z=kr%iX|~>3p7LgHn!{m7mJiLgk}NZdhrAf;euI8CU%M^!+me&4IsT?pe%Tw!=a>w; zBTg7rd%J{W#W10s%g16(5YgiS)22s3uzl;Ipzk0#by{#sO;*Mfr!lU*VE=`kl!fxU3Pq4U~E1o5vV5c@w>w*Lt|FRUTJud4Ky1p2OZ z|B^gU_Yd+sJLCTq3B>k2_~F0d&i|X1_?8gl-yg=>%Hg}b8hy_I`Kwg_r{Yad_fLoT zkK)b7`0wTVyLhwH{Y&UP0}~tl-{wpFuZp)TTY@|0ckxz_5(xN3p&5ZbrYmF&rcSVL z7{Fls%a|#hp3%5p%jn#)x5m6j{5F>=o?A1WT$4n|l>cZth=bjJ82yz)Tjyx&%I(Yb z>a8XF$XVy*upIAJ97{nZSHY~iDYbiVsXhM1XLP{^Kl3b?lQ%Y&wnXbfT zJVFJ1D7u&wCJ-VNNG6KZAMo9BAtj{JwhbqsYr$axJ*D|_&?-N!Mz#|0TIQhMx&KgNus2B^NaNi;e9*{#9}9jV8yNp=x>DZ zkVT_FR9#~vo@WAx8kK((eolII2G_KyHnnKn_Qn=V>Ck*+=TfdJLw`jPuh5BM;Q@dJ z_G}~O?!P^v-uEfWC~-yddUAqNfqEw=a?Sz8S#WvX<|$pS8QVyLpu8$gUjXM~8p z?Ho!h)hjg9*`x+sID@xGd2^LBZGv&s9Lf$vM<4IdtEWQOJ&K6(#w)-T-UCoFzJQs~ z{{a&mM>Gb=4;vC3!Bx0pxz|?*8fwH_8}i zSd)l5Qejjo*=u#|D3Eky@d_uifVnPVV4yacp%cXG-Lo5?uYoTBBJVLIC?uNPkl=FO zG2BPQ{`y}rY6@$JZkjrF!S=aB{F5xD? zDjvmO2LT13H9@8dU;ChIrq#IXLjaEQ#+Fv-rGEJ8a(|lnjp5f`KGnmgW``9r5GUk= z69!_=^%8Y>N{z~KYp$UBOsU^Qewemsc-YRg^kf%}cyN++L=R2ZnFg)0wS7M+1w<_y zQ<_G;F{~;_G4`<Tj1^l~p1~}IE~6=RfHU5gix*z$do-1N?X(~% zMTW0YvN`M5E1PX#XuCTd=i~(kpdc2KWpJRBn67PxtlA#G-mJLAjZt0>j#3+9vv;2< z#L*w%prbQg=@-k+8}><+)KG`r_1j23EDPHgh_|4REvF)3Zo-KVYNp3*C+ggW35L$v z8&8-fU}hLlPf+zzTy|y@lG#&%f4a`3^q4X^oBuckzzneFL0NC1C7CaO2zPYaFm?Q} zNooBhdVqC?Mxekw%7#1bP=Q_3Uh1r+5necms+7ca@~X7=Qq2tmq zuwaB-jp#8pq81 zAGd;jaFOI_QIN(ZmMbNZwNE(c$xZuTkDm+bl#veuiKS3)mu(ZGH<1+*zkgFHKVVFu z!J3Ukqso1p*bFWECX2Wr}V1nlZ{ro2zm2CccPVYZCfYIxR>KauQ}-c zor_lMq$!89HqPyw$H` zG*QhRV2snUjX1#SIpR%I&x%6z9D{dvfyJbihXLL1d59T_riF&?qc7n47gwN{Ym4`3eA+2?KRISoX?%t()!qY7G(MwSAPGx{?cD^ z)@Ne&>Wqpk<(ag}uMJO|uXs;V9;CK^hNLE3nANaPzCWX^UyAT?XJpR_I}*zIrT;N>j(MTp0Sc3QFpYKV^){yZLI)%iXn9w zMRcX*BK*$6e(Pv86A_2e;zwtP{LKU}?$4_ZoOHS4mX6m{jSYo>S$|ZI;F`BkJ5uaJ zrAdBC+)IbSU5QFi2P{VO{kR>O~TiK>0UtOE9Ex@@>BT? zODU8seuut1k?@?$G_2QLYZ=jO;WF+TX#{&?EqRP}CE8xJagMj9w*##Cfk_B#lE*H+ zh-h8AHubAAl=iFhwWmCC0)tU>CaKdSVLh78GBtTdBI8n{{sw+RF))xI*{`F)(@0>dmR{ zsNyd&mfl7(X(*2iG$K=N`&riOSL@((oS%f2Kawf^{)H5#r~fCN_&-TubrDr14Yj|dFx$VD!i+5c7)r-V_kTqSvwjQK z|3(Vy(f)@R{<~xLZ+_Re)8%GlXZ@c9^55j}e-_9L|8(I05Xj$t*0&M)4||J=o#ESz z{QK5F+gr>mbWHzig`D(TDc-y;h#wh5$W2~@PY&>;!T*$*eqh2Sn{TDn9>QU`_B4x7#2Bd zqF!w|B{3z~oXX!oh(7^CphD%YZ%gxYbe+)jF0f(lqpGwGf1WiRnX3g;BmL;od@m#NLQ zo=fI~g9s#y|4Gg4|7j!x2j%O^_QhFt0UOk3p^WfoL&hhkA|`NJMK><}BPd7!TJN$E z7J!p(9p?2nR+!KG8ibyU_bNOXdKoW^E7f(j<_DuGL=gTuuC7)NK&EB3@AwD^zU6Ccg7sXwXWTeIh_!d= zJOU8%eO6>p2*EEAKl+_6u+L~dL_Fv>7|4a~F8rQ^J6m`u7HY5@Mn1Z z6!Zc3=>;(TByD}_|AcIPA+EaR$jJq~Wm}`^MShMs(e>`~=b98#4?IK6s_^vFw;a0q zb{)3)_ELISS(LcqKOat)D!Jx9n7X!Bky(5JlMTUIl2s6vhme>GHmRZMld`+#i!3zF z4GFP1L^Q^S`On%4Q0`@f)2R7YglfJqW=*I{@SEq&T3cHP z{h~p`W?y@7hC0r~E|T(H*O17o9<>1I@Jp+l?B9v<28g|i*=x}rPcnVGKiXqmE$n3T z%$G=v9Gxdbmr>>-M%@uyn|M$NDde<`N+-Qt@FYHZaU%A0ey7Y5GI%0u*@kH!*!*SJ zv9xm&oNT5_I?0(|YLx|5XIn7KbWyXWdwGfrzd+>vNXH@~A@&@W^D{znOOcgQoZ^O- z>lm(#<;iaU^8S3hl%_U=Q(?ml^U73|*h}fA@#v4bL-JR_V2;K2K%DYlv|Gr^P1X5x z%eZ{>NQsh$_S7LlB}5wDMUJmU>%XJ36JeOe?1WwKfm<~I-@?nQ6&O(ftzz@B-Ils> z?%Hp{XfDIYCawXU9>Q=??Q5W5eMp*nFZP>Vjcx0-jSZq{ z^XP&34wU=|GAv<~B@5Cb=MxfI+owk{PZe;iu*_zf{DltZF(yGio%nUqBD=;~6tcmw zc@3(9`ZNR(`skVQR7K0!6tlL_;feA|B?tEddOCD7xf&wIp_l{t*dA$j%5omGW!!!= zGP!Z-dni7}4e#pqe10}XMA2-yLJG0!$MCxM!H>nVL~UB3qFoHr-tBpogUp*2fu4j6 zDwm-cjhpWdS-NttELN~zC;7aY5SG+uJPPfYhTEBRWI>#ZZo>PLw9gWO7o zN6RCs^W36;s3?~TmU5q@^j#LTo`7~sp9hsVk)~7`d)I2lc5etQzHgKjKZ-hFGBfIz zG}~D*Ps_3d9MukmIw01jLL(xgFq75K%PsC1*>%n$(QpQt+f6K?SRNau)_S2?wOpsjDXX-jZ-gNX|>7`hY{&n z*oMODEFKX|O-_vqpJuz1$O8Jf@=oac8TITrQQoo%i#7SO(e+wxLTMemuc^+erAvvt z>X;lL6QR5rmQpBp=4!EhS0Gy{E_A#c#nEIX#BrK2=bVYkuk@#oGdmnZJjSJrl4^J@xVH;5WeR^~d~EaQ$JI~S7)l*lz25hQSG?0#agnC1PRbt}l> zY^pUH!6oyp5HPN?QZ9JgZd4q(9U~&AJpd@WA(9}UEQprMTS3QUd!|9UEAlb}icG26 z4(OjMN@aQlxAKR=Ww1MvDy9h+_JC~5_u3&p^S-zN09&}_TF?r0a?RY|7d*4HzhT=- zPxOmGDeA@*25)BmnfHOT2l3&9x+US?@A}feyYIo%z2q}bgrgXOTSB|WnXI{;ofI$3 zc;YF8yk2f%&j78Q>}E*EflJfV{exRjLR;(dnGaRx$AfZi^&son`#FxQ*L3haMvHQj zB!;9=5ECxUPn0uf_oU$^V&riNlv%2*aAHX%)VxGhWdx6iG82}EeM|yCYp4!ra(_;e zOo@~rn2HfONwJ2!j`vpvIFc8ei=ya!p^5fDxTT3R7rlcT)Ryc1@StcoN~Oq^_X}pj zsly%py4@G-H_t^5D9)eu7bwq=HWe<5ZZJ+aHeR4p<;X{)h3>0d4x=!1apXxs;X@^# ztNXrAcuMtSiTOZVID5{B{+uf?^@EDyYIZ37_v)mJf%P<~k%5ev+Wm2(;8{c1kb{fV z8rfrS0fma>jwMlXP@{7)?XbI~0{E+YNAUSF8IuZu8l#sLkP(yRdW=+0K^bV+$L5TO z_9M-d`}fLW)-YFZjmG_Z8xg63VwJtLD$a{8>Q(7bSxa55R7@Mxl(eo^x7ASCsjqaa zZ7zreDRm8jPO~8+4N<2*2CnIWSytv9Rj)Bx?nm>8)f%)8j;kVh(w5^t7rw8EwHUM3 zUO+}(7)Ypai%GeQRVC#jRtXx)agWY2ddIpKU|#CWV6J%iN<(-ygq(HJ9HByT zcuCrUOYx5J=!z?CF?G6Cse%@tiIQpxF|#$@pWj0+vE;aW^ zK)c(h=LH)1_UOajtyCScu*|e>kgrfKC92{9HAtIAPQ?v=*9H6g?o}X!>4c0>mYCl#@u(PY%WK#pWWW__FRGp zbCv?^b&Z+KwdY{eUBM{5T4$(A4S(v-h)r{@IE{RGHY}JTKj#cK^&j0MK8wB2z>WvJ z&cPdPGN5m!I}>Y~-w-1{0p3eAUe#YPjMV5H_y+7YNy?Y?hv)G-Z;oSc=<{rpmJ)8x zsMEKe8sETsHZ4!#nR;sF6YEvII82cwVldUnRdg^cgsF0hb)rsuC7tk$Q($X*xbT@~ zHDIsB@CSa48~t`45O%h^2sl34-sSpJO|yRp-)%_^`doJ4$A6wg3hL?n-7|lZKamFdtFMO9iHL7Ol58c{{fftXW$8W_X{T?jG$%g` z*xX~42e!Le1ka1Sa!_RS{yasMO^@P&pck%UMeRu&ZFE#@v8%)KP|bHC}ze) znCr8WUpt-Lx=4f;kLG<(i}`CdB~Jz&pRB-CsnVQ%STxY98j+6J79f1=D?3vk+(wko z0hiQM8|Y(KOTu85N~_!ezwDi&+jW2JYu1ii>r8c8(X$1GcE4vFNArP`C0$VLj~mn- zLuOl+0D+$SDpssG;TnaoW-IUPH=r=R@io7nC+CGGYAm=H_MP{ICyFQ|GzT2*+qyN% zrt#k_YLx@?t-6Z{hU=vV1+yD^C>H){V8>-gyqx2#=^tX<-my5TswF}*jZCXRMJjRG zlB*+CBS+7qx*#=8ZL&CLNf7g4_re#k&cF?HpnpiMa4D*322S2UW;L3o^dUA^fx0~x z-{>o1cy~EoGrnQcf33peSVDrq*&_Co^N(f$MI$wFWlEsfL@Q8QF}U=S9K4MhsRywM z);dpJz;_~gioNoG2LQD#73g}hHo5Zyv#eCaY8f!K;&KDGm7>D>b>LiK3YS#w{C>(@ zXPsJtah8iqPx5EP_WAtLAtIY}xCvi$BJogiI6kU~iI}T2YARb}8!R<#qRx6DwC`{) z8dHl1#6J{-=*$G&eE{|Pqprq$Ee)Lw5MLe}IVth9v^}xhrKaB85#9OamNT26bx`%` zZpCyPC9%P@p8+5C4#R~45#Dv)zwmW?1u}axKPRJ1!nq`%oQCyA*Q3!ZRb1C!jEv^y z^2few{Z{3%<{y>nti?e-4~e94)pNRNtDZaOUZymY5fTa22iuSu)a3R*q>?63Ks!P5 ztgLDevj%?Soy{fc7K;RnWAC!ldz1Sm9y=Jk`zvTEq&)WLqMyF^baTveZpuMG55>>JnDbE1I+ zcFhVwq17kB4}OOw;8JFBJnC?lH{|DgA8@la6^gi+M9oFnSed){h*bEa~a>Ld)c z&l2<8c_;>3^TL>8xObV)tKVcyM&2f`ohH5HeK95vafWJMb>dXet-~>ZLl3)(VRR%= zNSob$N)%1~&a+LzK7cBi8H0uih2Iym=k^H8bQ(Tjf()7!ice?wu{v=foTOB=f9O8Pk62k@cV-0UUKj150eo`raM|Dm z#kCHxS)N!p1^Yv~hlIhI<;ct22iO)Vm5c59nOX5S$rk5lkS(QaFGwbkI-f+FAGn^^ zGHv-n;@rZz0g*F63A-D!cU-Zkz89*S7@sWs_~tYr>1ImiY@|@+n+APKtm!f>c6;v! zwtX+BRP?GmDXNPt^e7~&GRHg(1$d|H7uwff2#qcGTENc&yPD<$nPr`<8O>wF*mA;a zm(Gn^f}S0~10#Msv6Z}al^*J4h8?Eu;Z08Lkd0_QX+-e2=(VuK3n!K{4{=tPILWpZ zbvl=fCF68e?MCdShU)N$)tIc-x(&iR^?&-L3CQ9mF6I~o?`nlnv<5LsLGrT}|9Eoq z)FA0!G@6}uDuL#Y^Qp$jq^u8@vSgefrQfdQLKC;5patM?Q`K19Y97ax=ZDsB^0cA| zGdEnF#~^*r_mFSWR;O#dJ0E`Vhx=NJ_q;~6xtqqef;e~PeqGKX*C)$lO3l^S#cZzmkN-Re;0 zlOc6+6yX*<{nVDm_jSeJhH+^4X=;#>1-amVgy?$AY(-s8;6C!N_8r(r4UEHU6}3`My%vhsee zI}}Xe7k%=KIM}%@_saf$d4~CjYkDWl%9A2fJhj7SlA`J8Af*u>7bB|UgSi@u5Oo5V zeF)=)Z@4LNAF2i3x z7LpZGSTwsSwq_s7(ph%YvC?xj1`6P{AKMoe&SG}`gjidoM^BD6E<#^2>Anh4635ZW00|JCzOcpjnEw)rV zh}U%^e(X;NRd^RzN#qA1nK$Yv=rN~=|3NX=K`knz=>_YYjIL)~ZarJ4rM&UC8-29$ zotvtLS;yadZv8?rqOIOP7aBsv>>pQ^~8`V{BDVJam4<}qYE*r*%tkj@|7FlpfhJH-_hwv11dui|mgZ_L7& zsIxl@Xv#thJopIYUX{arj-J$QX0xx|N%X~d)2tLS*ll4oeK&ZLvm4|v3bWymI~SK(cV%}F=jpC z=+63+x@M-yvNzWEDCX83taZ;28Vygqp^Mz^F40p0M{&zg7LS(fyFO-Yqo!0xq;b>1 z!~^goKIw)&5lyf5DI&1_C_(QQfOZKj&aQOz7-@%s$$d4zx0;vN0l{$FpIOn+SO^X{ z{LV%0F2n|AnMAAtrR2~pA7ElGjD}5MRoPJt#q&ZCQP;yVIuPxSyL~v|5j$5JLtynv z1B+g0~r(SZ=u$Hn;6n3Y6+Yd6%B-nB({S;=&+nI zczwXJ7y+RED^va3EylCfH^bxNf};JOOm!&*K@CNXZ&O`S>c4}%urU0i!-V1gsKbQ% z8}agY*bD1_4|@^*2D`}p4dG(=@8lIzS_@js?+#Y$@5WU-TKm6xOaHB(^t+ezzj*C` zIqUz~YiIhW@8jRSb_SMz>PBH?`^)P8uU~`Tfq7 zH@oWT?7^d=DFk3$K>{h%5%9hm%@0`#qZDY7rKUc3)F*eA0S^JelFJ7#ry30#1W*o8 zFflP#S6auJP6?0-STQzHUf#!7sC!jS3jpWfk{=*@2Ib8P1lZgS&?SKq2$+Q*o(q6B z4o(#W!y?pC7%%|9w3-A1rt#UU58MLq8Nh`XfE>n8phql$67U?TIiC)1*jYH}drl_W zBWuL{z=z-qpbKss*)@8c7(Jah0b)2mxKFGPCWL+%@c@vR#3!%N$BEVyY9x!Wi>LEf zzQk7_VY}S1Pd17gZ3Zo1x4(3?7(n#P+&s#&W(K5>(2Lv02nHg&NkSRPAU2FoLC)H73vn@Ow8P^sOxUpW6?3Ao_ZnY1`_!=anT~A}rrt_;Mf{ z0JX!WhiJz8r&J|kt}qCvgxI85-#BRTEne?QZ;-ixX8l;Q2u?K>euRkbJp@3!S& zsBJtlv_O6!Av!)H@*pvTYLMBVbR|rx-BxN`$L^Ym``z$kSJTn)?a*ifx4sXetvNG3 zm^-Y1AJXp|tKMh|j$RCE-s9Fvm!z-3HSe-1_g_B<`FZ{r=X!97+wa``2p%Q#!>56G z?*dRq^bu_a`icchjD3UrVod@fM~y2$^?5-BBh(W@CdUf$A%NNDZKfjUe!6-C+Xl4W z@K@s=5i|-lOH2oM=#N<=MT<%qslX=fp?L( z-FaZ|^XogTFp$R#2y)c?tqzX3FP+a@GYv2tqw^qw3IqUnK-KAGh{cEVhB4Cxd1Cz5r(YYqu(=y&G&)%MRt;q^E&c+(YLtdq zP;E%}X%8k6PFRz$01;|RphXdj zlA+f+EN2-Bf4eGaTwhraL5N3LLTXN!3LSf}kVuFpwQ)X0plTCH-N5Qr0aNS8&w zbLvXIW81z=qLVgqOiqo{k4o5LXqnneDG1%8hHaVf z;}ENWz}FnLF$#3G^cYD8a6GS#cZ6O7r-(%u8kD#{otzTkY@2brq-7}EcpKSd#CH^B zv)j~`ZNvCf%LLX?iXPvw%t8#l66JrcZ7`$yra2BSPo1$Quf*Nr)CLq{Q;>(EXNuSR z%i9{ctu+d|?d<0}KZGsj2~Qu%O7cBhyYaolId7p4lw+cccA|VPqZ{QtcY;~XshhKA zLKdkXs%u=NolHtLq+0ZG_pqsAF1Qb?qOr4N6jZ6=8iV-fSTmx{9ldN3OT1}A-T(e#3r;S2WZH)m~uv`dl&U!-S znLatNnVYVR^hkAPvTDF`(dyC?KFc2S@LDG4j#^-l^FOJXvGKcu0fCRXGGyJSPl-gf zn}^MN%o?Z< z0EF5RytIxkpl?#{uSU)m43Rrpy@lPX+zyw;INVg!*IVd{@dVzUMNxE@DqpMk$#kWf zL5l{7!xk;>=KW5(wnoi<|mN5J*cv)A|59>fX@>ufD^b2nYG#Wo&~ z5Vtt4C9bOzSgK}!twkpX$u-9m=S&yRS(>s_*V=Op@jC`oF@2FgdH?t%^uf32s5ke(U-hBGgi z28%?uEHx}D<@P>_M~Wq{;z&&iJnK|3?phj-b2&M$=_vc#x~N;Ob*nO7CXKjMfhgW< zB#iY+fAJ2p#Qv<=qi)k=pE#;$)5mg4!T=(8UP001!_fCF z@iz%Yye!Lr)>y>N@(cTWCRhxhZl@IteOt9OM{JpHwNY=- zf`rm^c%(?`qP^Q6Rf?p^l>`O&qKo1A zlm3xBw|+x+H2Bidk~Nnojfo`wZ-dzxJmjVpK;X@36mo71g>uAL=v#gcr(uCmVDdC$ z_JB*82qLcQW%=|o3%O=Ww4RgwVf&*pqQd2n?be9mI%+3IOiG$1(Lm0W^4-deBZ>z+ zd&EC9sVYBW!+d-2EilR>HeG>Vn=%WrV_{14yNR&8;){Z8p3GG5=^erTH;SnH8F_AV6viQJWSMPnX=3k z#>^9L(=x$;$OFRaU=1S&D6#X3ElI{=rYR8W$EJI@8f?p2Z%Q{jVR6FKZ z0x)Tp#gJdW7TZG7+Z{j6hC{w2SqZ29esYijS(tZ=c~hTh)F%tedwXMn3MMKoR^B8Q zq$up~f|9Q$*J$70zr9gqe0>@0`oQ)F45L;tHclv-T~o*B(2(bVjH6Du4!xjjb2~^i z8xP)NLGR8<9eiBWFOe1aq${j#dNgXWI~35lm95XJ+WeJS$Ahk;M1dcBm#%zRB_<}Ib6^i5M~veQEk_| z@S0u|^-4yA_CeAQq4+0mQ zYC~V_Y(jW+3xb* zfn?@DC*h4LlCyjbI2AX8w>wmVG6 z7%c*I($$S|gV$;BJ3X!1jz=2Wx42O=EqmSu_^g)5dTG;Z51mh4+(bIlT@>dc*FB$I zIXcw#svnAp8;kTj9^K9)<3GXrZHL?XFV8A|rC>8rOzR1+rwaX!+{!Jf>#F))q60lc znoTyVdc6#X3-kwUvot@hdl}d>4CegIc4$0?7&W@4n(oQ4$L) z@%k%Ld2DA5M?yNqvT#*9&d5-|t^B)p_M@~{Y0xI;*_uF4p7{QB`d0$*zQ0VS?@8(O zd1^F=`wWy?(_nHSl@rjfER-ldohjwZ#;%571Nvg+4>xd)=!ZIG~!mV=xsQGrp zt~wbO_t-NQnWBUoMkGe>zvO8!(qf0AZ8w>D%*Rf!Fv_h*C|69r*ufx@SlSOPOPchO zs>kifp|>39Y$kRa;-GQ6x`fT06g*KqJv{^&Rqw& zMu=<3qswSAVeQv^!ki;qv32A7Eq(P{^B#E&@A)3-OGfOW7i9<4=V?HQ%VR!MnT?UL zY5^0?Z#1z?JaEbFNj4MB!(Bxo+K8?>PQ1ODGYeT}l`P4{pA)zeTHao}UggsZTF08W ze~Gc*NtrV(Hv&6)^3W4Va6tfHA^Y3yWkaBzgo>86uk#->uV#*D~c zhsQ4?~l42#uV174k=l(O04DmqmG<4T^KzZ9S76BGl@ToMXP?A1c zl#^1IH}H5AysaL}fd#1g1f-s&|`j?yVx&1D0x94h&=yLWeh1@x>w&&3mlvJysHv)(*aQ8e}7Y{X!?dE!x~JH%#j1q~sMf2hP1 z)&Hw39s@fbH9N}>v6-Hp1&@`L`9Fxwtjs@Er-J%+V#emCW=?o4{}6x)89N#p+c@D- z)3g65uEm}7t;`MiZA^dEUexqI1OJ-FWBaeg@`|+j4i2`i{{}Vwx6Z%n%>T7#>uU3_ z2mLRD&UUo=jz5BJb4N>SeJ3+o1APbDf8d*q{~hG~^V`o&(*6us|J)z#PubYd@itE8 zKe~9+A5HhqxyJt@k~g>cX*wDkI+_27-~Rz}{?}nETT^pGeJgz%BijGjw6S&ix2CNF zt+lz$50cs1*~-b>&dQzE#@JNi*3Q_*!1)K$>_qEe{10TbqqBkIPsiED z+~sF7eXIXm^!tyr<9|*>{xk40E7QMM`7+?K(EW4jGCe)(|7#jjQTZ3dlC#vPtc3IU zH03Pw0%N0s-4jdMX(NWraBtk0qjC-MU4O?$|)L3 zznqc+z-Hnzp!i6O4~`F&C<+UU?N8qifiERM+k-G-1Xwq!m`I0d=~0ci$l~Y<5gi#F zDe|E19HAv76(W(m?iCdx?`D!iN(45JGBXm?Ga_lu)f3VZ(=XCevlGj6EzR;x^{k-c zN2pxJE5)QCN2tW7TO-N8dc+ARbPkf~7P($ZBC6x8F& z_59?19bpo@{H3E9tCS04nPH@(1EByBK%+#Nq*?Af_(+=QbOI$*WDFk2&mWMW0nU{d zDK3Uu41r2_Coe;WDnsT2KR-V_Oa*8n0}w1$!KdyCgGMSNL4kS$6;9`C0Sa!T>)Jg? z(v`2W%+IxiR5CZSGAh%v(N~Ggr)g^}C1b7u$&&HY2iz|)2I{9}ZX#e#KR;^vFgj1E zJY8Q?S!$!{u8mO6xjznXqP4BZ4O@|CB(-TjSO10y40wpG7tzn_36Uw-AkU-o_G5;ujsks(n4b~lsP9fulN*>HFc&q z-}uPa@(nQ68G|k<9enTJ?iivjL}n6~6d(IIf_mzRGT2LY&C&fNtQuM6qUAXGdJ0-O zE7~=cs&V)6{6n#+MWa_AIeh0*qnIKQwwapi-kwNWZi7s1K6aA1;~^%zeV!USym3nZ z;~qaH z%Wk^`B8*jb&jNLoGuPz*qkvGJP7KD(KU<~*8c(mD!`{W+j~H8cp^3ox z#2mx*qG@a!;Lz)zz7+LI+kC%b-*#8o>R#0)r0p`K=0dH%5{tihRnul^D)Z&^s=@YV zIUjp$fkhxvCEo7t7JArbz`h2h&NMk3Vyp}^RBH<^An?Als1Ah0yvDlYadp>yY`?O_ z(yhkItY}n>)VG|7Y)7<@e=|jDVeqZvs#q>TGrgUEkzc&@lo$0a*C{uTJK=UN-}!6U zq{+FBo~_}#$fUd{FEvTN`Ux$a4lEmiLw>rIhEcWu<^HwZ-v5cC>fCd@j?F>KWorw) zow=Z_(a?ZwglS9Fa+LT=L~Z+QW{>!NHe7^1_3k~@y~m@`+-KX{^-j{$-X-O$^75Ik zP_M$b2@e2bf#vegqSSxK&P75}QCV5|U!v5{Zp%LtGyk}`ursm!13%A>$I8a?{~<=P z|JQ0}I|p;?|14zwiH!gIEBl|hkg)y7Tbcono%P=>N&Z)r20b&w|GP>nH%-WF-hf7)@LLJ)OOHdde%OJH6K^d8s)$)P~|vpZ#W_X90YM(SO5@4@F)mS5-q5{T$lmU zTM)i26&Cn!Tz!A4J49qqNJw)iIq}4C0CRaiLjrcVzjjcYu%xE^bEDt-78Z`O>0$?= zVWexaK@XtOVe;`GxPUYf#a_RBX_zmgO3gfhLT=Eo6-1WS){0s#2#tndj@Zi{k`J3yF>-eY;bJGBZ z0MG<6is$LHBya$Y80_(|NXZam#|!{Ckof5b3K0j0L<9_w62-qjt;G3A67u5@W@OX4 z2y;ad$lOOE560g++IH#dSX_ST_2XC3rN>b1?EDRXkBy@xgmAbyfF)G?Pzo(Dx`P|y z<0&daKj!>|i}yGmzW9T4eCE)dZ|PGy>baWlV`?}%<)j2RZ1@L?4n<=6Is24~OD^x* z`V$DZd!Al<@2JnHr;s|()Y%alv4O^h3u&67g!|}p91$UQ`fc38yvB9#>5-J-$qB<@ zJiNN`vv`R*u(-p*BpadAZr!W;;xo~tsx8G|luG&+mIh5li*#lUt?juv1~b!=6dN+u zOXI*DXa5W^Ct^c@v&Uv8ZI8%Zpfv6ukl1Zgo$!@H6RYo)p8Dg&!D>k5^m{wuj0RPKZ533J`&$d(w3FM!$TMUVE`lHuhdxh?|b zNoi4y$K&PdB6VJ~v(%^*eQV)4uKT!RQ`eCGBYQ0*O+mhp2IXCzDDE>Y%ZtN_uFSor z)qCT>MO(ez*(=e^^|^OT!LL?2X-jXpY8B7(yc+0N&=^V^#)qwWpmvG<$Cq~-Sk7Vl zi(+&mAh< z5=;{BP)5^pN17zCX!Ve)pTa%8<~cv%2K1Z!g^e{Q9#=C-js14D=-$WDOb77t$3DVR z&KXGB)A{u{SH|L7590MI`fH!zwz>MFcMS2XHR}$hEi`lvsb`n2Y)z)?zShY7cqs3j zyqE$~A=CH6@+MI?%nt+A-``p;$Q3GiCdo8Qt$Avd7#?f_?i01zMf;>^cxxSM@_Bw= z2}%1I$_qbRGG(?Hkl4wBjbBC;6!T}*$oU`az(au7Qiu(z?`>?bL0BS#w0&;NOP8l7 z4Q>u31jaJWLUo_d%G1>-g%0}~4+ZC(^Dqc8D(5FCij-$Lrd!%8GS@P`Zc;Mo9R(x; zWzt+H`cX9;>bd6J*M$+84x?&H{ZYoM;ecCT0ak$q7UH?Z)y-pe(lgzilff3-uvjgU z1v<2%XG#8Gu#!;9H5cv4j&h&=7RV3Ypf|m0GR8o}cg9*PCp2&pw)%zdN0%l(@39^Te6C3PQ18MBnxy}OI7M=XuMA&nvP zD;qRFkb@a7YN~K;U8PF}P|UXrO>0HTe&u*Li-!-^NK@W1q?8K{cR9x}Y~kvJxFjnR zG;qp}!`$nlc8T-IL1&l$GGev0QV&;WI>R=+jxoCkKd)#U6fe-bLA<#6l>yzQMR zZ`xWdy<4=CDRM#4RXx9$VDwlM3BYza2A-2b8Vr0A=z^EnEjn{r-^{q4Bcwhz`4Au1 z`ea=?*kk->k@Uag3L+vSt|Tq-FOl@W(n9{&g0M3)|19^|n17ag?EfD^DcgTtwefGu zvHxxP^iLw}|6vuv@XxG5=$ZZ_s{VL|&@un>@(g-OKy|mu3+_ zc3xFi`X*1e$z5|J&ojvZF1J}u0c=UA`C^`Q0HAY;5h4*ztXXz4Q@?SWzcjVRCbx7( z7j|i1dsNT952UfJF1o%-fDU#Jz`)u8koZyfP=~*17Qw#8vj}GTh9-A=8tU~FJuw~S zMJYY;{KBIX)06LY?J-r!F=cauBVblGF!anVuAx3Se>*k4*pk|wKexc5fGP_cGlPbF zudekZQWUeq=)usE;`u$wK5kDug>Iva4h|vaPQNveS=k2L=J@iWe=Qpn#4V~SD& zaH6vQT^Jl(fIhv1>w-u98w#VhZwB}P0>HhE)j-D?@Yhxlz?O0!ycVPl@3X09Lkj?9 zwnyNbzy=_41$PgyHtZW;2Ox3)cMrH$>?_ob4S=fN_e5Ip3%1Lg;v_IR688 z<S6^z*0x$U6Y3H~S)J%V_qM*Mi>oCFoTNfYQbLz>;%{>v7(D0oyfc^M$+TF`gcH zvHknGhcGM4R~QTHE6UW+8?ogDydF@^@B42H7}Yn#moOe{s_((JM*SOj_o?PL@ODQ1 zD|q*7-8Xo5y7Nn*?QrqC*$>7$zu=1$?uPn{ub#s#;o&6pcUYU*oSqV zw$Gp0T>mlA%}d~gtxDIIzwM^`_vyZMDeKIk?%MaWK}5Jemv`DqD?5PHg)Pn2+YZ=` z{r&4_jf5j>YD+M{_ve#m$M(00WM+#h5ZnnQlc+`pcsjIKqx9!f*@SMrUOiUIR5DrD z!G7%2Oo$WUQGqkygnDW*Bn;jtu?Sg6l{BcwShyE*WH9kE$rr2qHb1U&%8YOnzmipZ z=P&0M#(P3w!qU7fe;uaK%9~H(IqedXkOt$3ZOp4bwaieVR$Q+yr0{gc(D&1-UoL=# znUW*sC`i1DalahbkP`egz%lI$V29^&fo2qD;i~zEY%5cVKen38JCqlkx<{~tPuiUF zNQG25WXG%MiJGN2=ZODU@uV-Wg?KYD9O*y1CqD=iD`h7j9P>CCteb19QDv*u8`}I- z$?s3@LPdkYn)Ju-jINILTBd{yIHU#8u=lyQ?pMiLh5XUY7KO~sgEjfBWp}xxq(lf2?rQgN7%Tu zxtNK2PMRO%@=kv)liKMrJdLH<+8oh6cri^0AK|o;`ixKUwT#o9i$x=kA>ZPa4n|gI z;nqOtua}_6pMv!gy*qNoMC;;ws%^_BMTR^%burh*eG<#y_5$w}mW+i49y~04HZC)O zFUv{Pp*B)23F6?t)Ceq{6sY3yl!@;LMCZjn8dm~!Rvv-J%XF6mCEN}`g;x1n3nKwF zs~S>y>yRd~4~OY4np0*;MNLO&@@L+6B$S7Du zWS*6njLU_XE=+!J6kfZLOEh@&;aQh!1CGAW%jG;hdh}IO4_rW24t|_83J6G(E%VxL zY)Hoj#3$Mcal@Rubmp67YW~0pJ;$&uzl7|yh)lnB(538xYh}JR`$YOwRmHUK2Ts!~ zNDB081oXSYmDI{O5WKIo{M!pQ1jGf0R!C@Z7se_oX~S&Te8~&tG(uJS#I-@M$qAPk zhfdv)C(BzmEqxB!6<2Xx{K<=O5w=gU5JU5$3XK`8MKX<48gIhj+7a@HXiS zn9#gcjbt5U6L+V?f`vVcF7h^VhA#XHO#`@Ot7nusW>bA2ykZ8)J_6_{KekIoIiC=L zpuC&ZL_Iq~C=W#7&hx?C@5x;S@iA=t(oLrentGeHUNF=%*Y&jyA@nFArh==JKay^8 zL5L_iA$+FT=qgYI-@sipUUr*#&fWGh+YPSDPjt!9Mg$g8n{-k(Ly$W+I%5NhB~xQ8 zlMrCAl!Bn5Pr*|{e>+2sup6Yl)N}{z)hrtwP@L1}3ZSP2?{}rEdZ7nMYJ0SAxDOxM zhe*&+r={Vy#jRCn>oa(Bz8}iC(BdZ(+vb2|O_o^`j41WSrbld=%w;)QAmAM0 zA-(#oRtMb5=4e1A*j3e`>fh@kxsBn!ut6=|5HIX{Tw=JS0H)taH;*d`|gq^zb9R4T{HTVHx8erR<8G8vKM+od()yGiF)L1Jfj&7WdAwdWtotPdtt+v#@0=g=q#`usd-9J=a z&bMCDLk6O`!-h2R)1A!Kn5%lqeA)ks99imMbK2;;f49Zb;KCKTAEZcx+UR7)JVxTm~?Zwjz@tQ_H_%vdC|L->H2 zBvgdrzTL~W+)hMC@rtY@vP!73{tdFxL)ypbQ^Xl%|GUGwg-XtGyQf;UtqHkc9hqrd zKGk;bNacwle|BnwvRG8WoK&?rgORXrlJA4=Q!OpE@E~~>Fi0xW*S1tQOZ~;opmeWP z9S1wJ(9OttSi}P+z_J*MkkTwS-u)fETFHG*tpqy@4iElivhPBoX~V`w$BM3@ON3+p|ZX`f9jmfPE@yNo4d4>fmIO$=pFcB}YbWHE})kWyDSjzc{rh{|NIY& z?>s77DG3v3{j3N-EFX8Go{!;NnJ=}oJ_E%UPR8WbD$?%$lx?k;A>kGEQ7N45JexkY zy1^aQU@+dQB5}0mp7xSxD2q3nVnHIwDg{(T(Iy{PPQKQQv&3!O-rgB|+7dwO0fuH@ zePR9!8h~T6oIK@ElF+n5#53z!zs>l+Lb_UBeo&F{7A}HxWZ4+uhI$99vV-SVQ0{Si zwVd=!#Ef&;uk>XiWeH;uO8;y28bi1(?}IUHez&8 z?tD;B_&QtFq21Du+pp)@y`MtXRXNskIaS5gr^WQ}d|vt{h{iIDCJYer1=5e?U?Vx* z((CKN6R85MA-Le~+Z@+hg%d$OY4}7PT=#!2R&D+k^iBw)O)~!)FvdVtcph|C_ zC@&xapTq2@xJ21$TU8Cc-C~}-J)QW0u8uZo>WH_>9)7)7Dn%G>fLD{(9n_Q@%k!GG zMC~UMBx7;?S_A_exMS4qD5U9W||4He!ZSD0Fu=<*eBB^6>< zSU;;3Ze>~awcR3~y*AP&$b`UptQhR4f%l;uu7Vr)Z~D2!4Xyi%Hs^5e}2 zP@my$>@(46-*rcNn#8I=i0r{TSN26V!?nLoOyei(-I*bgvph&R*jIJ~ z4hD!7l}S4*tTEakOu%m305dt8&zlUM!ha`^BR%#{j1`s^fFWFa^i7RW)04ZRx3K^X z!5Q^xmHS;XTtmW)+0mcVwm&9#DP(snkfBa(66w}z#buEL!T1QfnMllXl9=h7(l$>o zdNc=Wp|Wwyhn(T;({G`hW|fd3u1@R%`GyY%3E?~%dN&yE_L&I*AJifuVukFPJL8WJ z2-)=ybzU(vi)~K74c776!NhzU8E+w%Xmow4m{YU8ChsbjBmw6ez}>sl=m&gyOMY6U z&emGzv&}vQFz@erXjw8LB&}_jej&0J-b-a^xnbvP?da#_tIPkU<)l?A9v(b`nm=EG zeNnYp{{tPN&RQ!(5l+5IH1Cf0%hL9E}B7o?j9$=d76A#**2gv%4E znySRaVLYI%6)x8Q1xY9538Mi-l6M2;5&NY<5dme+&9)^zfcEE^-@WjnaLLzQE`4%FFI8|8FGYU9Ln4wwNO0UM zV1Nw?ckz5Qx8o0Qh=B-+(BBWm8J%ZFqGeusS7kWg*lZMLHvDo9zRIVSlV|cgA7i{a$drhLwuFn@n%8Br>kQA+_fsjyU}ZCU!NJuRBm0A>7!&Ge zKjFLGwbQQdvffSV{3Bhj?Wjc&O^zs~ZiQ3GNR=j{?pLM%I2Q`hb{Mm0G{)#Gvo%#h z6o`eZN1k^sH7m4c%>IlVy_e6%YUnR&s6n9nz%-(zJ-u8u98ieNGEHkjF(6&#Ks~)v zI^dTp3P7M9WgJEhwB44%?dSNf?BnfBi8sC^v*+I4X$~Tp8cM?b-XBq25?J zkQIVpcEfeYl6oo7V=%wk842J`Z%|1f$+MA7+cv|tXdXeXK2l$=oZwwBpf#X-*f*8G z#?P~pDjFD>HAwdwz1{zP3?uL%lrP&pPa)XCf&(+&il%wP;#_V3e^SGO4|P8tREJ~8 z1@w2Xe7C$NhuOukA-gS?R101pA#243xG<78>3m-YS874~gl=={<4H+!Y?mj2366Qu z@q|>D?%G`9xn#LoJ1eIZxUX1$kUgvY=16Xh_8ucaBv>qJ%or79%%nte56r1}H^>c|LkQDs!g&nEx-zrcbFsGknZx`J_4wKYILjKjb!s6k)7NyKB_c-SH7E zyBoevV(n|^un51T@i#rJ2j>1NtD8~SdP!Q4_abB9%{*spzVUDMi3n?|ck@JM@y!5r znvI*TYX_pD_3HP}!}O4MdVpVA33Mw|A`7cn5J;b>18hZzI^X#@l{0ZU_EhzCdLIg~ zq>IwpJjkAcJ~&m~g`PI;-4$N~e`>nP(8Anw1?bAT=E+gmm*vu3T!cd^D;W78-40>_&Rxiu+j(g!))JO|uVcFGbVY zoXx{B&4 z;(P-dn9JDa&MM{}ucVhyWOE+Ny&!!^N2OOgkT#qKm&ydOMRsdHZ--{uOV0q>W+5r_ zOHNs&6Y5V&K7hT4O^QG+q@x1+@}8gE!~HZpjrM<`3uN3zvNZc-u7k#`ksGKmeX1Rs zWsqxRoJ6J4&(4f?kuQ{PI56bP0VrcM=UMsiSez@#G+k=cAL#80niGh)zun zvW;F3M<98!LJup~xgU!C=5r8}aaU|6g}z0c?x3w|v2w%;SGB_s_MnUV8-_;)ByH#N zzDvHVJe$!0MOgze6IuLr_$5YFhKr9seaFXwa~%#-b)BW=lp-6Y7O`svy|x|T!;G)a zDWFir@*tvD3pXmOsGEMNsL_?#@+$fGtR}?@Lj;JvDz;ejQN3u{_XSxx(zY7IR7dB< z&OXWS<;K1=_%up!nqw@9+Lcyvjqo9LXQP^8S>vFgS&osVG*gB~F_nLA`;&@L(doEz zbE@giyQbtBaTN966i{obTcF6#DZZOWrrVaUWE`rI_LNiRo0`rU{o@{^cc2-vw{W`#m|5q1pab&iqUl zG)f<Z>7!mJqo$wuT|N$R+_8V3>nb!n z<^2lwWJtJ6f`TAMRstITwZ2_?9JqWiLXPhjGMEFK=3DxdW3pz!<(?f=1R_U!R7YNL zHYna|fNr`xpsIJl!HO&$?{%<(M|Hcb96pw%JXk^L?i}@DzQ45C`+m3uM%%r7*F)!TB)8`Gvqo@ zh$L)qTm+Y&zOX}b3=wkmfUNengDM_j*|Yit*X(ZZH(!0vP2z8l%!CWT6pAx=mBTMA zSM1s6*>F_i_p)n<`9DuxYDU1i1ljir&{8i14}Uw#zp!n0dq4YcwT(x$GC)Q&206q2 z0#gIsK7NJI!@o7lUVyuo==o}NihvXYYcM3eM8{sbb^@S88HK%)Yy$3!xT)@E*9zBIDPiz^S8o+c{ zyjbMG2|lpH?}VIv7<;6qV@|?LpgiL34@BfK$kc&sq5gAaK_e2bd_q||f%V+RgLfdX z->f#=*Cy;x?7atEW_)}_L>ny&u}0jxZX&i%A*(EumaF%7*9lJH8J!QKDP-5QnZ|c7 zVqU?#(t{C-Yzt>;H!jbd3>S@dWs2AG>Rvs-^52RoB-LlTC6`Z*5JBf6EE5-j5kj2+ zGXn_Kxl=?!CkoJ#q;>S>hF^Pn=gP?HT^)nQG$#oMdpCd!k z+4TE@R7+$37$P-at$zf-lu8FB2yp_4VGYw_lZ-zJ5DW}JnGJ*Id9!7__UhMFv*$%` z!h5oYGp+#YZk=e{7dj|0YgBfF7K>%OJ)2I(aYLr`mSvS*)`V3$RiqTqh%5$^iC0UQ z+Cp86N1GTYSlF;@aX?Q>zd>=I00Ri=IbQsX0YMOQ*IvTbn|;zVhgIi-%YywKbbDWSf@ z;D$UozB}RrNuA65y9;O3FC~{;a@rLYD5SJwR*$8m60KoiTbSW)<*<88}SnL3`0@k0N;xZDRF zg8lr9n?%>hixcRJ4CnKq3&5yd0W2XLt!CUwgQ;|VD)%=67I(=yidGJ`rLn3pqx50Q zC2JCu1-H^8QH+E?)hobSO+K_|XLY`l65QjK+vq8s<54?ZBTX0&%0(~21xDAu@p9x- zo^g=`40kvroRGPSj!KF6h@vyg*up)f@&Z-pn3|iB4M1xX>M&HJ3^!Y(b0^S|)VaC83 z41-NA*?qbtN7FI+*e%L>Av~rK*}oJXF4i(J;~rzN&QjhJ1T6{mupr z-1jb86Zw+5E~(StwP6shcsc|1aHoMb%3MC}O6!JrhDOK6m{MB+bZ@ggtUkDe$MvL% zi0vy+G!!o%(kfQcY~}|4L)DHHN&xzw=*A|(uy&6^uy#FPa9(x{nd(q&GYTl$G4GQVTAC9A*bd3u_Sni9jD zBo@M3cS*4>iin5E+C$4$>}yle7I?BJjc6@Z6|ei@=iuv77b|I^ zxuvY;p5OIe6$s>O9nuT23`pa1ys*S}$N7*Dk>~~E&$|#zR>RyhptmRE?^LzQ@}?9$ zw;4hMo#SL4bV!TYDEbwRlM4A8QjEzojg8yO2)n1&>i$+-gMJ!ex!>zbnxoKy8%3YK z%_DU`P8xx7s0Oi>7kpjO5y%Qs`La(s8Wq7%Bhk3e;;soxbu-6z4qYLYMS#5`4hZ1$ z*3?+snXH=pv8@z&@DbOi<+Qxp4xh6DhN9K zTdxr*Fx4@n;ghCIoI%d~(AQ++q%@slXHLYEAE2P0q8;;?zM@GW)Kau^B=Cw_-X(|g zvIL&H29ppmSFP=8Vt6ckPb1kSOGnW6&K+M^O(?yz1&kB$ z^*Pl=FXGs`Zfng)fR4ex<>qEWA<|T_IRbsrP)e3yDWK6Rphz*@v8?*)1R%FdOzy8| zY+5>6yS-#cE;?obAN{TdLD{d8KjOx{ZA%A|o7f-+UQ@f%8|2W}M2iTO=^1t6MxPe}Qe;>MILhj-DV&Fb~P200Ue$Kg5AO19t6 zyXBTfWwGl^b8$P|Rv_J;XoytASO=IEz1g#Vv7Y@d`2E2KyZp3uxJ}KO+@r~M|M-4{ zrb803J}pISH&?4r(&+h1w`H_$>XNMjNa-S7#Gh8z!E#J?8Mmc>EPl2GIEJH&|>SEbz9xF28_|`r8a@HkH zjSFP7>4DdEvsZ-BMb@;}AtHOehP~q!G)tE8c^LvDwQjK zmLqJ6m1M^sR@+szq5dsSZB+D@b^i?H;_}3#f!@YJ&P-QCR94uzUW!LY=2>8K%^#9g zaX$>9$lM;bv(PGBW>w;1wXoG?uGMO7#XS#3CT@!@&9q#u?}#5~cjNuWbX@ z4DP)k2)-3@XbdP}k{B5$y76!Y6^NHo%s1P}TYixFw4O1Z&`Xm@z;*f0)^qY3(i#Qd z6@MibSOFr{Rm8rjABA39z)=FEX23In?)1zim4Da6Vwj0-5lUD_zng^>WHSdk+2ute z4N^;|JHb>Ir4f!yMO9IqsE;)@|23oAqN(i57zk!Q-T8H}o$ z1Bd;oB?;#RB^)L^I=p4uIfb3-hA}$M+r$BZvO^YC|5yXX!$~36l?m0YR*J9P%h>pP z`Bci2#a{a|4LZT8Le3*X|eaw-jQk!;}|8nw67h^1sFuyWtp)-*~W&9wV`$lORJx)&r|vW7U28o zegSuc@&ndpH?6qS^9wP(CRFQ?9kT{U%tDs0A19Mea=C*z9sOrzW*e0x46Az#Bo3U?7cU#a}jMs)CO{qN!% zHa0k&kt>~my;!BvNc*%(RCFYBByzcL@Yn$Zojd-eQl1$j8kb+cf%d{k-36=3{F(Cx za?jHPf>Og^WbJ@;Wxchge)jd*y!EZLTR-P!++I<_C4~)gM6Eldgqcz_<4x;5{apA_ z%t7<)R6aF?jW^vHi~Kq7;0N@n-IR&qJ}fDmTLiBeml77-?wgLprSzV>hwI$Jb6a=# z`%|A+fTVw~o3RkUYE}4u-Y0oDrMA`2cwp~QwkT9t&lnfohby)#3|%Fv!V+{GZ=eA@mZFiYEA79W%0gH`C`RjY@J?++HQlb}@kJS}VM(HFJXY{Ct~hBxUDr zb8tG4ms=7B1YH#*N^BE}CskQiR+GsOvUz}_zEEO)E{kqIR#a|~qoFP8eOL$xw(8T1 z1>thDclu68?hb@!R~BEb=XC$wLN*O{vz>mf$lC_;d?`?L67Of&xrMYBgt_w@h$WM7 z!YH#3&2FYB^O*48JEb~&XGT?pE7;EP-k>rv7+Rc2hT9WxG}C{7De>^#CB0zsGS~Qc zmVAhpBR>D!25IJ2eW#}h!0}FYJIG+$DK)@gIv<(y#PPjVgb!e+Q5NpIm; z!FE3EhLu-D?8L$l2C|5pk#shq9x(=*l`H70LuPimVH`?H2!Zr_r&@JRKUo8+VE|+9K_*><1SLwsmBg*8 zF-}uV_1O;TWBD|fp<#?5`J>EC*iMD4@lRr>rgW1mP(!F-^s3jaPz`aDDii9(%2${~ zK(1W+`?5#zL~MTA^BCtBFaiXcj$w^Y;z?dMEs7rgZETX@1$2=!L|wp3j;ml6ifx#S zhi8Ho7DpI33Aa&uBNgfM zea7AwXSBLv%om&Pgw2#c1in99>X5@o3$xzV1KW~8hO*Acm{lvv3lvX^I@85vrq5~{ ziAu9c{|QOwhcc2XDWVR0yO7HvNQKg-+-=im$`obqT!G>CBxf%9sr^MkEoLVQRwK?w zZNk)bPlhO9drp&e0krHS4iOtIgow(xb$|5ryG@0$XBZTqxIY^%m_m;XHSE&{?QXrn zu}kAfWM#YJtCbIDGdhU1?H>ly1y!vQ%|fGA%ViRFRY_*-Ygvip2!HOde>p&4I}i-N zV1!O)NU*pIG$DG4>h#Rc!QfeK@==qV$}=_T+}cy~vk~6^wIOIM|9dXEcdh0 zmI{nf=3#;KOCvIC6B|C(xCcC;z|5y=!V_(2RU~=U9EJYblsIWK6cr%ei^lECrgKvyzKLjwNF9CNUr{zSn310Hg2jq% zNi!Vuu?FYV47JD=2~>mlaK$lw+rBaAccbLE^Y!T9dOF7eMX4}uNdvak5;4zYOSHsT zGu&&VT--*X)u_fCEK->Se~Lz?^NC}p&xKKVVnTIM4v)8Z7R}w35SgI$U*UbhB`EIumozjfOVF>BPwqgJvP&+Rj8KFFq32 zRhF&7sB+!{k%raHm#XK38+r&&b17jf;ndN;wXm)C?sis`r}+jZUDln+SztAF$(z4=M5Nb<}tHADq2obY%a7cN^R8SRE%7J007$ZQHhO+v?ahI<{>) zxBv6I^UTb;Gi%L#-ql&BUY&YTtG@Nwd#{hWJin5`-fkO`^(C+j80A}QOK_@u;_wW{-L&RHkn3V|Qa>Amf&t9gkXGc2CU=L4kyG{2agY5;n^uAl6tM zqs9ERPi7T|0BwSum$rx|4g0c^J{hh!Q(}J<7AVJ`377=WEq*a+#qT0q#4JFA2Pd9E zm7nc|e<(1QX9}|0W%Cp}Yz>7j{PuS^W@T)>y3%AP;Gj`kKx*u2Wx$d@Y;##6i57W%+d&mLt#`jnmdEstwjue>7ARWuC&{sf0L;g@+a6b9eWgUU2DA zl%N3UdoXr@m3s1jLa!}i$I983HWRzFYud@(s^z4T^&@B~S&tnm9!%?pbVayi=4!7$BXsXd+=;V2|0c+tS(Z#@s9fQry*d zCdL*G91x~vi1Na2t36~mGo{o(sDIeVp}_^j!1l}V2-si;Yoaa5*Rh|Y=+)vD8(|^w zdY_68TfBRcdur1dF$yfcq9IJFY{XB@^?t0}8x`%a8`8;**k&iWp`WH8-dm2x8IC0Z z#l*4nXHPpUk17H}qQ2s7I+U)@`K_*hZ)$7gtqcb0eO?Ip+kiFCQKBXstbBvUUN}kp zH`{Q=|38@=DS2sG1*yN=a3%5oi3Mh0W%_reA2TZ<2kU=YhqL~R_x-e+truw$|4AfPcCF{x+`vJ!<_Q0>HoN$^WTdZSQRR z7y11+I{06bz<*NI|Dg(W{qMum|29AWFO)7L$XT8h^k%j4K2PD*DQRwzqIl5sR(7t;_%kT4)cN=@i~T0n$ceHi*EInyrCgz%3~gmk~;JTk7!$<^DnfO7OK)HT?FnDJL#@L&D90D>kb_dDYKVFM%`hXZv6-C!aL3Ie?J zq;dr$8CT7N6}?X&45Nnw<#)YpVu_gg?d%?qX9FkziUJU)0|8K~iS)<`{8&aIq6N|K z=3yTS4!#lPzgt?XLK71!g70|`znhD{M{IYkt`F{ck&#R>5nYkc@<8e#`1`)uln@_m z?WqVYJrR$;&z0?3>>64UfYv$vfvouOU1V~6*Dp7XF1z@b&YrGRT!3(3$=POmE(q%$ zzm@MAx_nP}=;N5B93qBnyY~6ryQNGi@q-}w46MVxEdx;)H!GLfXzlnay0EJ!<>_OO3eB`H6 zjr*PyM~oAAlovb^?D>`#e1+;%n0*rA1BE^jc+8dGhw50IeTM4PV1^D6>_OV8eG%=z z^3zt~@?Xgi;ym-ZTz#*6dn|K1662;vc!<_fr z6#qN{9DvxZeDq2RpgwdhkAS~o zAA3?K?;QlSbnwAObuHgbU6#KIpC#E;5l1I%UwZyRf~n!(Ymhg_+%3HC9^ww59P8iD z;lTcY&99^#@Av~7Nbt|}pl9Ls4$Onvpj6nyTg+~nse6Fe>E7cqbhnY`cQD}4`z!eS zx{#0(`u53i-v?B0-$New7yZZioY1Vjj&Q*FE1j+i(?hV;L31i#J}b)n zC&L7cD)OI~jo%E*e`N)}mb2Ps)? z&BdU2o2B4)rIP~@r6R45SFlksxDlf2X7z8x(75XK|7ST<$B7eqxqhI<>|nsJnLiz0-f?Ah*bi1bNODnCNB-2?cvmMOuq zYCLp1{{(WLpw><#0!b+KBO#0&B(7AKx4&r#10!Z8A542I&DC}3)F|a^*!Wt6q`qY7biao*4>ff%I;|8AVE}wD zoQ0fRdv;C~o-_BbaC@(5$XxW5k*;E6pWrOfk)rTe7`KMpVTvgi8y9pk6Nz zs-1&w^U`Adz*4k!HB6b8A<>Mwd#z4u9x~l;(B)6wWrbUMiTOZHWUM+^$CwaZw zAHnvuDGY>%Tpfvbwm^E)43!O-cv>sH-ua$G;1F-iDi&S6^`CKo{HC?>g7Ei}ROXF@Mr=`FX6CG|f zi`O+A_fHNC0I@`cl_Nc9^Le7QUL(9$snEN(t=6EaleqJ9wB*58(W^3;QX3Ry*ZYx2JFE*Y1MU9yPmR4x2u=LKscn$i+p)n- z>E4Y%Cp4#0yEct5lG@LXNh`UMDkO52z?UlUAI(&2@rp@u8`({$CTtIDB>V-+G|dJ9 zSrqY&JvZbU;5^)L+4|8D*q|Evri zPy9`qNnq}86_5*=!9kJ%lo+B&&O!Kf2ftj=bgN#c_ z^|u!9rXtB|T3pU{0ac-VTY7B&5G+TxZbfz&Ws{fe$5lZt+Vj_W5xrdhM@dCqs+OUW zVt!0f-dJ1okccjSVWC~-k+{Nnd@vJiWK>h}@a0=!t4d2_+d6HKhM^&mZ;5#)zzj_? zmqKrCB~>jhu5vK|jmMH=*qIS^atg3)Xk+_!L7!FHd@o+Pq$8EewAZvr&w2<`Ftgi~ z!It|q_R0s9UbEIx2z5T$MF&oWEBV@`c!cG8UcI!>)74IGvW@IYBuxe0e}$Y-;DFm3 zb!_T;PJD>!$r>=#ah{EUmIfU!q0sMqkQYlTcMFBxcy~+YlEChN@};K!NVO!_bIH zubtV4ZYMuC{O{KRexLd|EOX6^vVBbA@Rri2l6LvwwdM6GE3}}!WTjfXcY4l`+}vzI zYJa~dEAlHCCV-os)xlI61+iDqL$KK(!)+csquL#I*P%sP zt~+MdmzbJ!K8-$aN^2*5__K3IcyyLd3{?Yby4s{OABd@JWCUCE!@hE~gZsfj96W)o zulAVb05U#~Xj<|P4(oy%3)y}te3k=(7Vd6VnP|5g1Ws`To!;3;0EU!CA!Da^h{ zD(2WG!nuwBFCR8ArRt(yxBce8Uj(SAGa8E#FX4V;6^!mRUVJ@HEbJHD!X`b~Z`c6z zu2)oYdPP>yaj}KQ{C5QO)8qwn_D01w)Q>V{U@wBXdB&eUn~e8D89ll{f?Uyo+yn3m z_C5vHs?XZku5qCT%dOByZ%xgL{1HC9Pvx-{V=@(~lG|q{R!c!!axv#`%G5-yY{AsX zDmkexj@fKnFk4KBiVrl@wAt#t@)3U{l`N+18Q3}_k=Gi+ZQ36NZxuCz;w&$YL*E&m z9X%FhLFhz}p2no=!-v=kZHs3Thag76=r#O=hg0!i!pKQ?ztu0fX+AZ}Ob$T#DRNwM z?W(_(SRvYvTX!J3tn9#qZH_gEqymB47}WZlG%sjVip|&vx~Fdg8iNwlxewn!z&$UG zb$OCl27#R4SG?7zHJH{@ZmP>yXF7*m-6y%1zECS6r=sjzsjLzdpcWTf$s5`tQC=3q zYuk(s!9d_1gR*7EEDkHUHmXKDNUfK0eSB`h%t|oACwYQmi7?;W1kRMy_N&kxYwd2K zATuXEyi0icx$^ic?j^bKN;p*bo%MlXR43Z)=YB~>k zExEM%)=PNms%>vypus@zo>a{^Mc^$E->r}HWGMBWJA&r`LC0nL#X8eVfRC)$f z69Wt?meO*S6|df_}peIplq<2 zQPaNF1j3-DPpgW(&5j!$pz8S?zM#L$b`xB&uIL>W3#DH(%qD)iz~;{R`cA9Pr^6`4 zkxoooyj42?xe$M=K0#(sWAP2X7@zq>=6@s4M$wLHH@ykn9q7%d1xI-Aq5E8P?zDZ9 zE#4AnZ^B2nvLcq4L0p!rY99c_9y(noal}&sw?#JYM-m>=8mJ_OY$TORS4eRGyJhr5SgDhSS7q`Q zDw-)H6D7z10*M3R3VHZ*0ZlV|GP$Gfc?YVo0=2tg3)~RW%4hQi`ZA5Q7z-&-J|Hz} zSgT+ot!~u&Zc*Ktxh^Yet{tDCbq6_$nl*Uc(BulX+?GOR*ooecVcYS;E#ehNR~^nw zp}81P~I@G2Gww0%JRBZKU(^Ov;_VPzW zmGgc;fjb0F3qthNA9AM2YJW@+s5H`%lG{Tx3wi%A5 za#+Uqg+|q*(;<(G9T{=3tKjdH&!g`&L9$gv(W~*#C4s;YA=ufOU3DiD!En?nwY!B$ zfh~ZbbK`mCy8ChQ5=V)f;lYy)rQz{u93#M~lDMFelXuTG>5mIhg6HUYm;Gk^%Teaq zt%x>XW}l1j0;c^$S_a3;*C?jcyCXq@1K?v)GLWmj&#vgJ@K`y>z-LutR^~(603_wE zrJ5qRjgtDYfn(--#U;NGe}AH7d7XP3QX?^N)Y8Sl4E9Jr1sw&KN}x>H zhVAzS^wx2n3;VEprj>h@WJrDRLx`^fD4h4A*(x5R82hG+_aA6L5UWJ?J+nTx6juv! z!>wtm*2iDvxk9VvaP&u8EI^RIuDa>R;J#X%gZhPxIde5384W2jk8UUti*TQ4*Wwy+ zYwAX@NU)U8K&ZpUVGF=B2CmGLT?|aE*3MC`_m_uD_(e<~)WbJZ?z*p3FQadw4l;7{ zuUV6j6V7L>wn8iCX@$A^J(Ilc56Odia6}telH)t8^?U0GSERJC$HXN#Xy_)7Ecu8G zVgz#PCgvXjNc1!+plMK93tHb>OSy3*Q`fc&^E}#Rx=Kb0q#_VFdfUGbbRJ3Sax0^z zQovUSo=~Pu(;BoA z&d?3C!TQ< zW3Z_L&3ate3j5HTbvuWM8nm$&UFSpfI;rQR9h~&0Ou*%jE%f%-b_Npj%<3HWOu(XI zi?VEgxU`twQ08Z*4c>H%HDfhk3A!e7!Qg`CM0T%!4{}BNI+ybIhyLUrWEEpoC9>nG zj^`oqWDL67XOn&M>;ZP$n@L~Jdhc7x^ytqThf%xw4A*DJ;RFjzC8^xz&V6B|Wtej) zn#n+V6by9Gy2MamFla<7U__6%n0>^XMrA)jLjfgosd0j9?7^c9VnbAH>}l=8mRzd43DN*r-JW?_>2dX()s3%2Y61|W%S*GRTur3-=fKO8TAl%4tBw3LB zu2#K)5yN@sHY|x5jqTvT)|;KEPH_-L9b_;J8MsnG|0Z%aQcI?=b3^3F&xeDB4J{fE zSdt+g3}oCm?Y9|tTJk;(T|+8PEcWwj0LkCSI%v$u>0mBwlRpskI#gxyvAo$I#gcb+ znLu&HR^|5}yxEhY^f^NQdGeasXf~(0bB1nzR7bWSoCqda>WmgMoQ#-&e*`DN+q?rR zHevdn&;25t+ZBiD%m87MM5dJNgtqI}<#`*AwbQ-Fp~3YMr7u;efAb1ewH(U5I{#TE ze(<`65k*#gfY^;CGfdXft>$@6$~%chxmhsMwnG=e)Z(5#idYX<2F7hL_>(g&x<$#^ zmi7vhsdA8>8drW_92HkEOcLrY{ZBcn{dH3q@y40a>%MH0#Z7Qew`YYoUE0FYO-rUa z*Nd3uD>WDG8b| zP5!bXuYL|Y`h8XEtd(e{R6%0Q4WXBZmp_rO$R=@VPADz%)q0obtZ%jtU|U@fi;*4b z{2X}NQy@=qljc0+E&{p7P&{WJR^C^?bf`6t`;rCk_)zQkNX|N*y+6FIPgHG>B~Aoq zCwg^Z=x4`0Eer0w4|mx%I%LMF>VDE@B6Q$QDZuW>hStp+Xl;+N*07Omzb2kd zRdJ=Pa?JqOd%%|sq50Hcr4NyYZx$!Bo@4VWAHmYmSHyK=R1;HT8hDVAcyyK*EH=!N z)bDr^@AWH{2$FwyHWdx79SzZ6MS{vEUzJdC6%pL4w>lZj_q{8sA*8%t;U42gv~I!F zPX>{kfx}lVHns7%DsspCz0Y{{Z9Do|4p`kyj#eAO! zwXVs@iQp(McjEeh%@uJm4OnW=rlNgUD{Z@{*cbp@%YAu6A)w3d4ragw0zzKg{fiv%VZJMLn9~N%U|N)urCq zZM8e~BPvNk?%OL0$RE}Y(&ICAmF^;~z=y?{vus??Z8_Eetw3;dafqipJZ1|N*3oR&bS?WzO}T;n(@l@X9Cg$0Vm* zql0aQ-ft+(mS)c$R}}Y-6FsAi@Ar;(VL7{m!i12g*xa{}V8&%}H}$vpZGN*v)?X_Mmv6Sl8u%Dk znRCLcz|~yh=ZX~CzdO0}V{l7a^Q-}njn^Hf=jYsv3bLKGQ7y-RY6*)A=LyZ51!>-% zNWbO6TU;Cp%$A*7W;b-slC|=0*8$`25D*9O!^=#U=S$4lu@L9nBZ&fbA>KUa4{4a# z!cL?#2bew|)qya}v|NVmYSta4C$CoEV|CDr}8ixR%-UPCyUe zUV|;F0Ad&@D=S}ArMTm!HZqOUk18A|*tYBUp1NT$b`YP|<*1G{b_ho>Zy}Fj&(5SGsc^fc zG}oLS(EJv|kWdecYSEZ=juK(os}AeC zuaK9o!DzA`+J@U=eRp4ayrCA)>&0P#iiokTuht88g7z`XC%s`$Hta%(DFxr8d!Qp}hF;q9|!s#zu(E&-XFwg`un&Oa6 z%&r2*a}2;G{&t3SB>ZnyAvG0Hk2ZL42*TLNh{D&1Gl)GN5;Tbwo?(0U-t)7{o)$_V zA~$cz#!oiqmxc(;LF%ku&oCyhe3e*O4@x z0g4!?JhaAZZ}_7G0odcM6QMu26j1~L==P*GX(~6?BQZ@pF+`}a2Zo8dQTQT>=&Xa~ zh$-gp8Jtg*y-}Lhp4nktn10_~DXgdPuy;9)+Y7e(k450!7?J*m9=B+u(#{#IB4W7^ z!gP8qy>iE)aq92(Z{jVcQiv&qr(0b;s{@4@Jeu56QzmUKi?NkP z5i+wIROA_TY49=hfLFKhsV9cJkF>+5zRP-)MXHsb_6IXjB$#xM=WX>?4Yg`s>#au z@yTpdNTdVTF&H(f%0G6Ac67JPU~ahG98$qN*Bj@A#)p^z+eGDbiK8_&GW$HVHzIV; zUxW&$Z$WFJ&om3KbZ=1Qav?XKU+0eywTq^O zRg+RP0+W-*C4kXCw{$!qzwU$Vet&77(>g+uf>h_xTgWG{7Zb&}1uwA-qSX7Ce;bRA zUMbRdb}2D)>(nH1x6MU~Tl{H8?woncOB(Zb4xD@nL}COL+>CT zP$LRY?!x*zJBL==$fJq|w4IsRW#A&Suhp)#N+C+f$ZBGFundFGy4!Q{IH53GN$qJ(8Q-=vm8}S~iokRaUCQw9XW{nLL{uA4yk`r>YYD zn(ATjurbv8r`<+jz+(R!KG$SiUI854JHM#Yo=hH1ufV8LtXgMrjkoK(^VkLTgd?7| zenR?tey=)k8m5~~1vokg1Y;|YkwMzS8YYJL=6tS4V z(VY$5ddWanK!x3YPYpj{_%C@`l%*FmPMx)E#U-GoAMX7yp3~Do@AIN>!f=pCR?_$L z6PHzQJSBYLG~*o>Jt@Pl)kJ?YkYxLZ&&?}j<@v@g814(HC3HG^F255oN}L1Jx&Gaf z6`$I*+kxxbudh_ZMAunAZL(!=U7E=#ue3kFY&(TuU2M(}KgMIZzpXSt`L?5V`% zwZ)gI?_P`g=o(Ot~M2bs-+Zj|8 zXA{h7ozA|^kOa4k!*_d^Mq2w_5bC1rf`{-t^;@DXvIP$DgXSb~y@MvjS%}KP&|>iv zN(;JkH2CHZA0v}{U9)G-T_k8v`vq9jlmmI_G#ussWo-s78DiQ6CoqCs2asuHZNn+rd3 z+C6=?{ft{eQ`bf}m#pEnH^CyYIQLh{5@5hY1Zs{2!o@DQ2WE$03 z5r$UhNZy{J6npTjbE6fxM)>CStdEy+`28C8Ec`sV1K4mZS_vOQy#@}i9${^f)_W6L z!0Tq;{PVbuc8&G~C(OtYzjxUZo-FF4TyTj=+>D;qYj(8E{X1d2V#_UeAA=DgDEon%(q|!9xTDK-LC5i=DL(7!&xT z+&h?G)zpKAQ4Pxv7e`4%dsKNUYknkR;!?}Nzuf<_K}^br(9i`!wn2kEdMF)j{vEO! zt9wk&iL|EHk*=0V4$G~*Z@bhj24sd=j4@0z?-bQ~O2D=e^t&5Oan{)F7I~Q=`J8?j z#S8+;Dmin{nXjV|WZrfbuLSm55(_94kzllni> z`j9bHVmvq-B-7LEg~WsG=hsJ97%Npbc^vB6)&ZfqlTpudQv1s~dn9dvznW&_R*Jc9 zg+h>=PF0oO7IIJ6VSqDd2(F55c9YbOJ1Njw0OS3;zEC1Dt>c9~z z8S1v#$1iZDCW9~}q&c(kxN}>p4k>uktgShN1e7Njz4!c0TjyA-XuRD8Pg!UZu`X3n zemJ6(f$}0t#XsTYx}4G2j?gZgNgqqx-jc<|zYh!RS*PA4nrT#3mgjZy0NXnbJ_}Mu zFJ87g}SriuyzMyqAp^z z^BXF_!84E5WO79M1C|rR3HQ+$Y&8?}^m&#b~H60zEdp1(B~gE9v(;T{I(l8T<*6E-{T; z*LuxP%xh_35P?p}OZH7aH*3&@R`26~90^-+#g`GOXDMAg><|kPA(FL^nxVl1=JnnM z(JHNP>Y+CT(s?2*p<$U4b_P3OaE}lx5u(Ya&{xe><|4hrdUn!e1&{O-b@|(5B{)Vx zqUy4gFIHDWE(Q&2&m31rOgZX|Rp2*-!=Z~7qCbDf-O#cEI1+g{ zsct9Dxp7^qPQ{Hp)Gv1V=~ip_C@htp-WqXRUm8h^6O|0@=2j6-rKt zEor7^Q>e37)NtBsPN$~1vJ0|aO`>Cqr-@NUxe?_;d zUaGn9NTTg4y%W)q6E;k{N=%zAE`jZnQ0QOc}B20^%sH=3Ae?8bHkqsn8&m)Bt3MxCP+-v`M7P{kA0i z^YZs}8EMz{S0K>OTY|eR&N-oJXWHXUm{=z>aBG+EgBMT|-qSj6)(Fq&xH*)Xk*=;Tw)>{aCqW4m1gt!@L z@|)q}C^JDCU(b5<=>-imd`)}MX3o{EH5vz6i zvyL;y+mIas7lsd+$)l}_$fbgzo+t2p4W3pg@^^e>*#$22;&cw@+4VRJ%<>RKnl^?7 zFj6xF|C;o`p`tX^HnBi+4i&_{1fGim{moxP>t&cl^_+3P9H0yOGCo5JJRID`){t1{ z%>Pw>u)IlwojJ{Zy1~hFtfeZAnt{_|P;IX?DjS&6a%#8bT>%fieyi;#PfY-q2oo&) zX1wukbHtWyvuS{J%oG~B1em`-!+fO%T*9iA<egQEbGST&KS;I3nR&OnBd6FMW}NMpzVmRf%Qn< zb}vGGrxeR2rxT6xvy_cNj>T5P>RVv8s`(%wL(UWge*OT z(YrAV|FB#L95=ytV20`AP?Er9ss*2N{B+=1zn4o2#5lGk8g3!RH@x0VAHF#+YR&K4 zdE$^@l)WLXUd$K2=5yjBByJ5)c`6Z<2zY&bU~axRg2F5)4yV0-QH@Z9$8vG#4-HW~ zP0Gb(h0mxz0}t|Q+C-7A9&2oG+*jhFngws9o@fG}B4w4$qW(Ka3WbdA zgck0NR%}?H%b8u}K8|V4Snu3atC%aj!b?uP-VCjgf-zO2*L>1tYGAkQ9FL0)8XLsR zXrmZT@t%W3*dLFkTXi0yq+fOsaB4A1xhvEQJtPX#<#PkF^G$LcF&3l#=qRnjrBLh>sb;btjHsZHhZjE-G zS8#|Z^0XJ*NjI_wQ~K!>0|hk&a&R@=?#M`-8LqD`1j^tyB2N;S&3^|5{2iYY+8S68 za&yA~l-%u%2>~LuHctPlcR85bIoUe=ouU7|meIHVdq-VBT}(*%A25LN?+q(`Q%AzT zYyW?}LqNdRjZl-8iS=Jx0K;EvJUtWP-!9mHSmXcixq$yU!150lAPf)zi2uJ-fE+*( zpaf6`r~>o>e+^}S%U_npPXDL<_4oBZ`~LqH7Wm5xm;+3#{(~AYbGI`ywgLRF-~qe8 zN0AS6hHHzy;t6a09sim*CgGfdl^)CHPkY?B740 zf8c?Cd$xa{{=cIH%$$^m>;CcM=#~Dvd8w=B zT>aUjbroJZNGXqkD-8lB92o=#^bn}RqojmS9!O422~B8tsyZUXpTQ1I0Y1uq4A`%s z!2k$dm6=Zp1_&)V5ozF;(FTxmQY9kx)lL}jO~u`(GAXs3ERClocY> z3binBJkY6c za6W#`x43)%?3J1#(AGBVE09{E9NPR4Bv9~bV)#j6odtbW>Nle1w^hyV?p^_+$j9Q> zbJ3S9ew1Iw%SQ)Du-#*C?<^1x8d`|RSK|Wi6Ts1fo?-*^cBYCI;sPYJj1W&t4`|N! zuM890&K7F{DaM~2gx(Bs<(eK2`m+@B;=qRssm->+Ko1J#<+=Dv20LI^EUG;Ad|Ugw z;%ln+o6&{atd*@-0*yFxA^kd0pq2C&&XCN1a zD>}Vr-bvtk9(rHG-~IcDgBka4hD~bj+uJX`E#P1R?!3qeKv3b~k|0Gx{y;zE<-fm` zA#V8!^~ENy0mvQp-};{HEu6e;WN;#3R-UKNCq@}8bCOmhTLaH_#2 zz1JIWh%*o?hN+v(X-w^UF${-*`~6W{qwTj&RbJ1O$KhFw$?|k&-R7ycnBST`4`gy~ z6R{ZiPI31<`31NQs_J+JwoisAX6Vbw@{nxCk8b4hkq%QyD^p8}TZV@K-49;XG= z$VXU}{Hx28&Ho_7g*%$x)?~ZcF3)v8twk@^Q!wG3{5(1bXp3PiOOZ9Mv1hynRrrKB zXoR#Ftmlqt?5r+MYKxTj9f5m*oGq@BSY5HzuVN{3!M`ao;rCrv%n5En{Q*M8MJe~x zd-B=J7Kq;!!W;7Rg$Fp*Ku4hZnzDgRe2@T({-4tAosWb+rb(=^ixrgt#?cxAz%VBU z=xKiJs9G`c1PV{mBo{rzI(B1a_YP54K3&i5En2KGkgH511S?0I=hCf&1^eHPU@VH5 zSMB7+ejR9RcZ~=~*DJY*MUwQX9;(VewC5G4rf@)7=B}cQD&HDFXGk@9p)4b?4|hh5 zn^0%m3R`)|PivTXuP5}DCAo^3ylY3ty&MZ(6SN|s>xhQyZ$2E}K+*TzJIeUmVykW> zL}x50sY~j26l8A6@c+=Hdd$lGJj{b<3aLJTLH}btANli>F`^D-%xt zYu5Xq5!>e6y!VCT!}3Zv$8=>5TBr9$5U?L6LIva{t~--u<0+sOIaD;OoHwa78y&WZ z$E)L%^=!DF*QstHoap!Rge%$*6P4*U3Tc)!&9+|fwrhA=Wnk{#e5rjo?h?B;upC)Q z(1F*ChPLW{5>T;rl@`Mz4Ud9aBT(y*=$?S++x`^3e~r)1DlQ?_(!D*Z92b{i zM)P@cTR4O zyQK!+!m7)xob18+(8?ahp5$N_#v&fE3+(gc@)RQ-nT8~o%6YEN*)PBOv-kEPk_@yT zx5eAO&(0b>p8?U64B{3kAfuB)SDT_ioU@L4H8Cu|aN0;zD8xL%vK&(hje!;oZ0Jl? zq$*03BX>PQ>DGU3fVL&~V3L4%W_ab-v&CNa9{wQ>rgXntgYH~3L=aDK17=LE`1>Cj zI2#30jS+jpYjU4;rR`77PRvrlIwvg}*=qv*KOC=VH{dTdl;S$xU=4k&cQl|QlFd@6>%3U-)DSgox!_=>3ZiP|MkDx9l#X0v522%9sX26s`4G@8 z^E)`I8Np@TAU!32#`=ci7yG(LQ`g;|l9~};vo?~UIXRCT`!bn5Eoi;X|Fnd|?VMaT zG_HG23XV5xVoJb$zPGTzeILkEwf@P%l|dQAVdSK{JO$p9GA{-5w4j$nS@;CX<1w7n z^kLciV+(h;0Kyh@BnX_yM(JR4(jH>@PsFsgw_+eWGB$U_g{*k)BTjOWye5%q9=b8$ zgKs;06;$bDv2@#Q1PPIky#+HV<^%92mXJR&=%=E)Y^nI;Y$wTj06djr{-G;6nmCJ! zX84~zI%(jZ3b9_A%w10nN#LpVP(z1g*oSxV*yT*Xu;5mmn&=!F-4zaXZspO-kfSK8 zF}PO_#W0D$0S^q`FgJqLj%gy;Mfs+h7So{nWhvSsUjhMj3F^QUVXD3Bdf!<(aHtDm zf8&#ZpWw24$6XUTOE8H8>Iv=Ls%I@5{OmH-C^!8S!HNEdsO`#$G6b-Q<@Ld=uZ z0_D5D6V!_X*(^W%g-~Mtr2XVQ|Ln9(RF~w0keXzb6y}=xH6@u0<|XBOIS|w>oQM~h zaio%rEX9xhzGx~GQ9@RjQrd%VZPvn+vlnv>&tD&-8z3@n6HuPtNyp8X))OXqINjMI zUbhD0{mQDQ1%3GxZ4y;0#5~wc;61J|5!RPe)hk8z94ZrVIb)UUe}0|z`X8OrMEW$P z&f)AIVm8KeVIvaQqgBeNOu6wC&iuf+aI=dEP)O~mYdzApS{?qrh1e)s)| z3xO`>K?W_n(+!&9R}N6hK`ja%lC3IJ>gaHFonxiQ)P;3lEA>nBgG}fg=WDsVqJ}Rr z8Q3g*fkR$@5s%RCB!t=cV7?V}tPq#AQk3c)0p@EOy-iN|>>rQW+>>3uz~5uN;I$K` z8iN`YA~*o}to+%cnx}@>(BzQ!X%X9}7}}+WqIm&|yx2IFN5em{d|9+?HpZ{IrUtCW zmA6X9SILu68<=jyJ+VJFMva>Ts)qG58f-3!UPa=f*8w9~yFhF|sHb*zM`jVuiw;^T zlR}2p;zIXVE9NoDjveG*e=t`>8PHpTv5X#YqQI@|HuE54ABWetPt|37{B%=MF0^&* zsP>QFNrLZz+e$qPNp*UMAcgk8;=qkaoqJ6nC{kPYx!%j8J-H3-P}qX&(>%eM8iVd; z8+^aL-77JbJY8-E3+JZn4XnUvxeX1xzr~m@DsrOInbz2bk)0=dph&mBH!wzTTO=6C zKaQn2?2LN^z~@E(_;EsB6crx5lcvJB3gOAzl}Y6U;SQ7IRCiZ1J?vRaZ(?4RlCWq) zJq1RqIY{;#C0jk*viGDrn$L*ZCh`QxVE7VBWt()7Jz)%q#@eEoDbQ)OFinp=a-Bo# zy6P-UyZ3Qo*#BBr$w)F8)*KzET*=JOxz}BwC7URS0@>DLVy-j6#L;5;p)PD6K4uXO zOXhTvQcKyAPWrVMXyBy$ROtW2gA(2RtO1}H6uS_{rq+y}DjHg_pZ>+;nsc`J*t2J%*0{g=* z7d4NZsd-uP=L}4jsd8Sjbw*nw7RLA?sLh=WcR2Tzex*^cqD0+HL&t=e!GQqp`$mf@ z?@4)NwTRnPIW@`KXL5^qO}rVNEAgDY;h|(scEbD|nnPJJe67*5xehjJaL_WB-Dg{> z+!mNUF=}_nX^Bo>zO(WjVAK9^8Jcr@E}0!m?=Q*Y_Pf2sj0G+N$0cUgA95gVUnEIqygV-nc1#S|%8!kEbZ#f1 zKJyTdmN|sAwL;EUGtE5BGp+mZbfm`a!oo5wlA$QgJ(c6v-=m5t7=MQBcg8?(pkbm9 zIx;ye{4f(5%shiI(UN}_n)-4|`Es9gUv+Y}ZS{VPFA$spiLFD;yfxU#cEw<&K6_QA zVRUU2^qgtbNQdEBJ29Xxi_s)J8s`UYeHojJj5y zGR-Q+M?pG~BZHczxOYpoYVZ_knA-NI{wF%de*9EphdW`tUqls8ypflL4o1v4j+}b~ zd7Tek>yZoAYXbSFnCpYo=o7|5N{#xpYmW(8ci-%zZfvXn&{h!=!L{n5j7nZ6S^nl) zvm`@SY)A1#K9gDpwKMJOYb81nLDTc-AC_vP;$Z?eCc71QcT3qRw)I^9*|xO+pK zahA@%`eALKAZwFd;91R!Rgi<5!j8?Eo+(LZ9qtdk(jQQT=_7v(RSg+OsErR8IQ4XU z&VGFUw7)e$t>#;^p3c0`+eAJD3g-LH{Hwrs^EV%32iiBUd$;uPt*Xu2Yra3=6orW_o?}44DK+1zSPO3nXy2;x+i1O%_f?>7Ox1iMPhQT4(?{l- zhEpcmygQeijTNg$sunfxh*EydRuEd@VJddd893m&ax-nty1@05(&sX<+CWkbs&ey9 z*%v~(?x9u}(j$VysK{ai0$~9$U6$V!oFAnZ#}x^57@u6dS|shr+&h(~$jKllqguQ9 zC6 zcr`c37}wJ$BeaX)D)fbQ`sxY(x(y?3EP zvU6HDXT!9aJv^JbMl1GtSiMau;zNvBzk?-4$>F{01~Ny4>NR!XqPhLT+NuB!p8WT^=2n z^{l%>J`}XbwmfmvP3AQ!uQsfGHh-RNay?LTy~DnL@TTWbd0iT6ks&mvDMOje?Nh|P zPK)PBqA}h)h9A3vBhl)wk^y7GuyHIh27){huwv#NUiD$d!2WDDxYl${wemF!bejGq z4`25}4i^P$aixuy{pxI zw-cpWRX?l8nm=YWUG%;(Mf&nUKM-TJpK*C5l{LRwy#bChj=Cj8ktjB&@OGePB5v*J zR)1Z(h*u73F)PF@GlY(;XdvVTb!l?b4TqNF4=D^2fq9qXmu`}Gf9B}G-1W<;T)F%N zk>zD2l@4hdmvOIDne&oZKQ`LWeQx7r@Jxk?iDeMvWcXo~kY2^NAq5#}+*E6yJ((Wf zJGFB9L8rK_(RyNyP)(hZ*|&>sO=P4EMrEOE75BSiBz2cm^}?dR<|ltwqu%~(Iy2fc za{5$?g}s+XF_V{!uhfgjXr#dY~lV&UL{Gpd#cDLTE*d52EWXZy3W*Txc{b@X87x z;ZVIB27_kuteKB%Ww{P@zqx4K%Ek6!F?-M>H{Rk~4CLt0x+k$mbm=j}gnr3JS70N@ z`yu~yI%wE?&&jCJzAq&~F6z+!(uDa5pURqNpGeC3-1O7KhfjINw>WNh-YGf1RkxO; zX!<-Nnj&>7>HeqO4QabqoIZvrQN>R3LU6 zW7T@+^TDS#9_e1YXYx+7=N8<6@yF2{gNtDocGQB}sgtgHm+7T3>U6Qhud8v%oO@nD zyO8Rj{!N@gZbFAnGe+nW*^V?e#$L*pF*8RiflsHc;tltzl zddp}0Xs-7o*p=fkgV7olL0FsorU!Hdoaif;(v<5AFpHV}&p0+6mZz_6MlhNdFU3XQ z?`%?AZLc@$P$&yJJ^MucLhLY6R-o;9>VXRz!h>iyYdPm9|5Qk+t9iD{GqTsmQf1h}il+~oCMIhjmg!4lA7-aE(6htNnD+VmpVIq? zJ^AB*O7E-aNUCc{;nMp$|Lfcz;Cgi^aA7J61_7bLdz1SR$i72=aF4h-1gx_M@CFn} zS1Wp0INDiBI@>s6L10QDZ4a!I9tiorFNC!avT(Puv-7ZXw8jcqcmT=#Upf1qNBh|B zNz1zm{gr*+J+{Zu!rfNL14yxZ3;FF&uj7*G`_t>V>)P?t>nPkcwZF3K5HJ$BX`V2< z4ncx{9@7H?ra%7a;#e&^o#Xl^$ok>V4`e9QMGh!PC_+yW2j@yeGn@@2&LXF~F@F6O zLb&`E#hV!nh1UqAqtDJ4w70=TQdVHvyY-^_G@1vw8sjo3r)X$t zLMYyo(_Q{T5`WnH+E_%@Q4q0?Wl2zQybQMiUC05l4R+Ae7}b|Y;PIn5}jOMLXiy{SOxRqA6mx5Y1x@m?Cu z)Dnl^1TmH_i+jQ;@8y3y^;%-J%}0Wk<@f}Ztbs|-DxcXEB}m#yHs0$`87;aQ1ZPS} z=%<5UNJoih(<)tNh-rS_Ez%@Ac93=={LS0?_rC7It5hEgpW1e_zi^d(z{f<=d}z`3 z_N7n?mvI9Ta*NvrDnwy(Tf;eHt$HI;3FM7ui0^%))Tn0BjS9t{IgM11A-ZwPT;%fn zHA`XYINnftTGku|GRuTy_>WvivIiMWk{pUVDbELt=~Jg}yON&?75)6k;HhVn@{b1B z=jdvd(VN`@rwV-7Z$X}mk&mTC_Ppgh&NV}KBHG!T^Ii(8S#qa}Eti{9`g?9o&Z>4Uy4EE)3B^Qdizt1r$ukT2{=%1ElJ?3F{ z#la%Z`;ZrCYWpp#@GuG>?e ziKQ-4u8jNUpzCeIf1VWTw<`38vX^OKGGy#z1dE=5mI#wbPLz8g*AJLGnZKud*}Gto z!s!M1=>vzql`kEU($dy`_bf^54%EC_mg}yKHOqL4v1&%@9lP4b8dRag<*h+8%MUFO zx*Vall-}tH?P5Oh4V!Hv&eLI;8Zt-E4~tVV3)`3+H|am#T&ZmJW3^s;**Mb}NIOu9 z1;(DSr#PGl@)6 zrH|>1QF4Dl(%@_lx^3R&{$^R(QAzFm$@dVO!&W*n^jZgP@`vt<#v&#ncrDs%2i$~ssoC`l^OmaL z6rPWL=hRnys`wOi!h9_+)8PZVk+aqC!xT1=lM*6zk1Ewyeg;%>uk7a zn(^>Weu<-7kj=xiVC}Vp9`=f+J}VKjp^)c(jExK12L~NphMifeDvI7qp38fs?w;f3 z@O+@{KxZ_C{JPDYvf@yqj6l`G;w$5srsAcn=mw(n_vdw#QiU7b(`o_5H!bm>X! zY33!*&bjH$`K^Vmk3si0YGyZTiZ=r9>r2yp%lBtcUOx1#jiW};9J*~ya(Qg} zH4&G>L1KP|U=l?T{dXH;4-s+}uB$pcMAGYbj~rX8A!Z;MQKGplA*_6-*h)G3QLYB) zK8@`MdnY7pjUDmSf`r($zu*C}Ac#8i#$^Lh3N*`8DPoVO?1!%@99vJim!^P*n*X3{ zhVl&O(nczc9XVwCBjg>)YKCPS2gxlL7Vfk;m5CLSHMMQ_>?bEHZD`3m8BUvRPgm?b zvkIlXvV>@ikR-|*=1wMQFmfX)p$%RYy_If7uJP1D3q(wM_=yy42OH(V65CL=%ZFSU zNT@fj26N1;6s}FLzcJWZ`U5F3|(}AcdZo}vXYgB1N)At6eZM|F#o)PQ= z8*`#b?jH><+;ek@{ZS;X2B9a&L6OZwHb13`oI2+sWp-Md^ugQ@ebPyJ(nz_n-Yd@zZ*N^Xvx;UP$lPw; zsU~4&cC)P#91bZudUXfJz{E&$fjl^LN9nM+Mjj|^`?K!+$u)sy$<6X$a~=lJ{Evf} z5p$E*OZI9OnXHwy3I@hcxgJeCc9$Jn2vTgOF+BD z1Bf_dUPE>cubRxZ`dZz4RVYv*3Y8k`fYij69Wm`L^xrx|gXJ;d^D2eZeRH}ZPj@nM z#TNdlPxq)_K_X9ZpPJVhGUinX&DPyo&6%$z$}vOh_G1C4^_6pSZSAZfTU73!+})ux z42sc9w*!jZj%vRE6=NPR#HJg>1=RX|4K84f+b|pw;H5D1M?H76`p7rmT;Y<@9P1aZ zss307?%RK!$guR~&>hVvD%q;gTed7~B2(w$Wh(+cMOEq7vUtBYKEBXYHev^=@(jd& zP!tP7!PI#>aHH%dDx+NzZpU)v+yXNNYq4=X!sK|b- z33O1>YKE1mS3tC6+Ex)Ilyl|9v5%kRpOnvQo^a}Wea`__%#KO0r17t2kJVut|4|#$ z{;|L`S~B3&LgY$;ewkEs1{-?#b)IcdS=%Ua4%qLU`~qvCU~`uNqK8A+Lc z%M=l$?{_UKC_Fz*ck~Sr71z)Oamau}hvbHDJ@dO}ecg7ymN9$ztD|SKXXz_=vY`%4 zd4cvrsbxOe3N-<4X*TkoV+t@6lt%Xl7@d+>W3s?aaN|6tOYW}UrDyoq=0nFad)7%~ zD5``R#dNgKpt4phD<+eAS<%}3jOL{VZ9|ru_xig0ftADt5?HH;)MZ8MynYI9ea4Cx z&U2SAlv?vF80*lwX%5j%d(|mmT)bO^us8KLFb``t<1Q4qDO0mKZJfFtnIT@TF84#& z9_^EBsX)qS$H}KMbD{xMqtdWAxU%tF_B-i*3%qElkNBg&p^eS+qRVAzoFges*qM(T?Vfp1y`s<+v&3?Pz*mZZs3(%UiS5 zK=wDlX^cJfl`%&jH?)b5h%I%69AS$~4X?1h-!tv+VRVC+=%wgVpJb#k)9mGAmwL2d zh;MG~8)@%H5bD&7R9wXgmfT-ZeAgzk!eU9z+^?tPWyQvqk9lBv+=)Dl+vcu6y>wZz?MWhj*s{_d#Z z1cOkJ1NluOi{p*y1tFBF$eB@{xg!>a`V_ULZ&NF{c(0G0xsOphV%EWeK3F?gDy^u~ zriCJ7^HUqli!inS#`z?&aE#tCGLTq5j`uqGzz@cA^=|JWl@_m9+iDX`Lh9wFDD1(H zf80@@!UzXSDL=MKGoI{=fesUA5YH7Y@NVUO!@}vg zVmc-@P~+5!Ax2F3ixUb)*_GIL>L67_zJvV36S+K_RU02MA2$y?%e_siF5fIs7%@eo zS;`)H;^FnpTf!b4yzjm^&BdonAK6}H4AR#XIm=z}3AKfh6ze!8K4-3|VN~U6FKM;) zS%6=BX|+FF%y+S~?fsR?<;>e;%Tqkf0rAO&ZmAWAhOR)HvV9i29^LxzPH3nZJ5t`r z`Hn}qx-QC3ymD}HSkN!Idj&X7c2W2~NP~CA3df+ZfqCR)&2#MjB`sZziGc70OU#N^-Hx2J#(-h~pQ0gQh zFza;tw)%@>{Cy-|sYkWqic(fGmdkCXDcBcOgRs+H1GX1u^iQUW+8J_P6=XSXxJG94 z)!~$y;_x==z_Si1u|~eo^1k@%k7pxp_AI$+RQa6lgjJ$db59$5W@QVQ2Pw0eFzTx6 zwhI-MEIni|ra?8H9rx^L{StoDD)4lFILDA;`TK4`HDO6ZPjrAI)m2}kgq|LE<r( zkA1x!YjC4polb*HT|v1pA-kQ}zI=yl+!nF&rw|{rClvmt5MNziO4dN}tg5z@>i-Jy z5eSd~95}HW3WLKy80el19vl~6|BmvJxFp#Bi1UHi{tr<;5?H1yZENACjr9QW2&n<* zb30<)-JO9WwJ&;FI0^xO;GTCM_Q(IYXn$Y)4+HOM^v{qV0zzR>zvF)h3<@L||B#hK zqu~EK{@3ysiC$ysRkYMQ+As6@U7M)Y1(W8&!i(HDZX0KInwZvg#&`SJyps7;brLF= zq!H?9RcQp_ZM(};ZDs|ji84;gdtIcwG5QvhYPEyjN$%R{n)AIsx3CqMIvD`(8B$mW zPT(T>0AYM2MjwtiWTK!a=tC6JoDPQ<7=jpY#2;pc9!@-90E4lNC|xJ!XL}l-$ZYv4 z9Ku8W^!njL#2lvN*A)+u&?bUGEY??us1FB|FoLKbd?!MalaikTQKjEybnpR_e#*N0 zg(yt%xA67+{M(=-kEC4y=1 zodDBXJ~*s*$laP0OuXrr*i5r!Gk#+X4E?*A(sVV^kB0TA;L;npEd%Gj_+95 zpQ&a|QscfWO}k!>-N{m+xiVGfc^No}<}s3_?wO}NFu<@3aV!viZY?as2`2dhx@@Q} zY2ihCGP7C|j36fmy={D2F4FqIDO#?goXb(-`}`uv?`xr1qftlrVTkz=)2RkS{bvr4 zWpT*kat1GBjUto*P`e_(bTE3YPYW&0e94EKfPR)D7EEDdiE?AisZl)v(;^)WQz9;Pc6Z6 zHak@E*ir+~0n=Iv>mz1kMCAQUd)>jESlqjO%En${p$%P{b|tfO&G+J{ z$gX?cl($?DdSUYleNpD!C!GdJnFob$IQ+|#xw;~ozCC<{IVp3)2Uddd^W&ne&IatD~x;HH9`V%%5B+@IkdZU)$;lk3ZkM1-}DF_8F<}g(BTrC#tpwnzn;o z4Ci^rd)icZXhvRlix5c()QM`kA5Vwb2dzMEN)O-B|0Ws7!6d z&7$U29fvHU!oF^PT<5+39BLMI*BuI6rL)m8MHiAxnldQ*#J2og{S5Yu^S9PzdA`nf z^{=lCt|e!E3}q4fd@RfH`}G3;3b)QL>jp)Y4YV;T_m}QWl|El7XE&oqs>BzQUo0&8 z;x;)N-c_697bB<^7%kzi%9?t~+TZi#n5*!ChzzChw2LxfY+>wz)r!{f+Ckhm!OqrS@v^+)j(UFWI`26IN?!hZ(5?lRDPo zQhlk~4ruuLov^>8UuGW=INtd6!Ih!wh4&u_3iCgnDb*-J7{~KU_ITS5*;_t(gym|_ zQ|4s!)|eX&WXkt^7-}i*J#zkj3%WyJl4{$cR!Q2I`J!N^y1UP5U8;}lLX@2sYIYcs z#-;O7H|=&fY;`7bgu`i?Ge4hSELu9|m&&)U+Y;0*)v;xEBXJheo}3cn`50o#S!t11>Ty30s|#EsM);obwoptY;56>0vZFUuP^&s3RLSdGEAHHL<;88gSO_Xcjtp z+E4tA{nsbm^~;Y(9_8 z-QDN~@brJ!TLcCPAi!`C6bV59_h*3Nzw?uDG%ohAa8w$CWK@BfRVjnr$ZX#Z zD-Z^^2TKb#kLc#^feWEPNCXhwSp4+>fdDg*`gYbHw(cPG&!S>tAgr@BkRqkryFcjP z@nU44A}3|=lNa13E<9dv6UO^^fdGYm^MZ@J{^A9L)9zlu>`mMLJ6>cY4fM2?0A5so z-ZX>93ogICj~4_k>-$SCNB}0k#PYM`Z?XJ&+WY@gk*Y%f#7Die~ASbz3vqYuqEzKz2N_2Mn+NJK;frc0NvxM2m<~o_&s=mfcFCih|vGy z2K7^)za_JKUCpoL`oGhXs)CxjyvD9*fGc_kxFJOEKGEQo0{mj;rxbrP^XCbS|4%Zy znwkbGS^zIvf9Obn81U7E>pOeY1lWmRkij2z{C6!GDyhk;YVPtvh!_a4J^&9gfbjOP zvZqtyiv{-It!(1q{U(QoLY@r@l$r2nlO zDQX$X7~xd(*9_c#V+R4e8XjJNUi`OUfOROpC4)a>hWPIuNl95-S66nInLhvqLV(?U zg26rf0u1ic`>Y*KQ2$LZa%ze?syJ(>ZTKg|5P)~DTo8Lq-A|@}TbEs|{Wn(duRg=m z(e5>BT6;Y;Y_CV!>juySJ?XzA27kXbJ~ssL#o5~5klEv_(fCej7yAEEHh9a!@VOzt zFC0MD9&Yvkm;f~Y9l-eW+4$TLAQ*>~zq#298~on1Fa7lIOdfvb4WAhT2=BFdXyD;j zZ^CyT%Y;lWW4(T`e{=@KliwUpu1=RL3bMrg6(#e^OV2)E}Re%|L$Y(U8IA6 zB@BRF0>O7-07CpEB7PDPyTrX;L;l0pfYj)pn}+;ZG4f}{$e&+B?GpFa|5G6UkL++^ z%1>eabOWH>_G^K58PnQd6;3bvtCF?=7FW91;FtvT@wfPYOB1py;9oCkxVcz+T4CKl zJg(Lkbg%{j5J5Ot5C)8Tq}{LXC9DO=>+e@^^gZbEal>Aq1OtLXP=f#d0Y+U2U~TIK&|fqN5{Dk#56Jm% z8m?5F~+IfX1S5HfHa;U_dJPZG)iTFc^WH;g~;s zmrw>!FboY?<$d3Pf}tqD?ChgKP+(xK*ghK2UL*#;9l&~V0&D=&PXyS2f(dm5MZxhg zj^hMO_ze^Re=slx$QJG64-9AnjVBkNJ_IhSvbSx3j^Ic<9f4tRU`^cqasUm1#FrHe z0>O<`_SOeT6lgI44Oqm6PXok)hasRFA%RJ){q+F`5JB)R07*Pv0DYhdWCcgS2>KBm z0VU{1K=;MB2Vmf=8C>AFuWfKN0)zKmFdTuv4aN7BLx8~qI)Y;`2!eOf7y_Lm0OaG# z0H6`z6aj`p@GuERfMEpu0eM6Oemejf3cqh5z-WBi4n{x#WZ}0Ba7YC0g#wrS;+KOW zp!nDY{3!v35HJXupd1W|!L#jP1ON^Kxxi5bwi5y1ilA)>I4}o{rz0d_#RzCfLjHh0 zi2q$+Lj*zpKmxfce7T^&D16@tMghk~;mZoxV}gs<_F)JGgQ4;3Lxa&U{C1!r5GVl+ z1|jHMz?%g26pe%u)`tY9$M^FBv{JsFt(D=BA02;@~E-&Y|h2m*yK7ZeOZfDIJTRqE2uMiV z&JVjApbBZZxZs9V0G@FfXhr7>F2EC@#oZ?vkg*6x27*BVj#5$zEC+>3qcJcz29AKp pz#xF%hReXjK>u9iJV;E8(%r+t&0{w<1~`L(p_H7Qvg&e_{|A`o{BHmN literal 0 HcmV?d00001 diff --git a/helm/software/matita/contribs/dama/dama/excess.ma b/helm/software/matita/contribs/dama/dama/excess.ma deleted file mode 100644 index 9068d297b..000000000 --- a/helm/software/matita/contribs/dama/dama/excess.ma +++ /dev/null @@ -1,279 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "higher_order_defs/relations.ma". -include "nat/plus.ma". -include "constructive_higher_order_relations.ma". -include "constructive_connectives.ma". - -record excess_base : Type ≝ { - exc_carr:> Type; - exc_excess: exc_carr → exc_carr → Type; - exc_coreflexive: coreflexive ? exc_excess; - exc_cotransitive: cotransitive ? exc_excess -}. - -interpretation "Excess base excess" 'nleq a b = (cic:/matita/excess/exc_excess.con _ a b). - -(* E(#,≰) → E(#,sym(≰)) *) -lemma make_dual_exc: excess_base → excess_base. -intro E; -apply (mk_excess_base (exc_carr E)); - [ apply (λx,y:E.y≰x);|apply exc_coreflexive; - | unfold cotransitive; simplify; intros (x y z H); - cases (exc_cotransitive E ??z H);[right|left]assumption] -qed. - -record excess_dual : Type ≝ { - exc_dual_base:> excess_base; - exc_dual_dual_ : excess_base; - exc_with: exc_dual_dual_ = make_dual_exc exc_dual_base -}. - -lemma mk_excess_dual_smart: excess_base → excess_dual. -intro; apply mk_excess_dual; [apply e| apply (make_dual_exc e)|reflexivity] -qed. - -definition exc_dual_dual: excess_dual → excess_base. -intro E; apply (make_dual_exc E); -qed. - -coercion cic:/matita/excess/exc_dual_dual.con. - -record apartness : Type ≝ { - ap_carr:> Type; - ap_apart: ap_carr → ap_carr → Type; - ap_coreflexive: coreflexive ? ap_apart; - ap_symmetric: symmetric ? ap_apart; - ap_cotransitive: cotransitive ? ap_apart -}. - -notation "hvbox(a break # b)" non associative with precedence 50 for @{ 'apart $a $b}. -interpretation "apartness" 'apart x y = (cic:/matita/excess/ap_apart.con _ x y). - -definition apartness_of_excess_base: excess_base → apartness. -intros (E); apply (mk_apartness E (λa,b:E. a ≰ b ∨ b ≰ a)); -[1: unfold; cases E; simplify; clear E; intros (x); unfold; - intros (H1); apply (H x); cases H1; assumption; -|2: unfold; intros(x y H); cases H; clear H; [right|left] assumption; -|3: intros (E); unfold; cases E (T f _ cTf); simplify; intros (x y z Axy); - cases Axy (H H); lapply (cTf ? ? z H) as H1; cases H1; clear Axy H1; - [left; left|right; left|right; right|left; right] assumption] -qed. - -record excess_ : Type ≝ { - exc_exc:> excess_dual; - exc_ap_: apartness; - exc_with1: ap_carr exc_ap_ = exc_carr exc_exc -}. - -definition exc_ap: excess_ → apartness. -intro E; apply (mk_apartness E); unfold Type_OF_excess_; -cases (exc_with1 E); simplify; -[apply (ap_apart (exc_ap_ E)); -|apply ap_coreflexive;|apply ap_symmetric;|apply ap_cotransitive] -qed. - -coercion cic:/matita/excess/exc_ap.con. - -interpretation "Excess excess_" 'nleq a b = - (cic:/matita/excess/exc_excess.con (cic:/matita/excess/excess_base_OF_excess_1.con _) a b). - -record excess : Type ≝ { - excess_carr:> excess_; - ap2exc: ∀y,x:excess_carr. y # x → y ≰ x ∨ x ≰ y; - exc2ap: ∀y,x:excess_carr.y ≰ x ∨ x ≰ y → y # x -}. - -interpretation "Excess excess" 'nleq a b = - (cic:/matita/excess/exc_excess.con (cic:/matita/excess/excess_base_OF_excess1.con _) a b). - -interpretation "Excess (dual) excess" 'ngeq a b = - (cic:/matita/excess/exc_excess.con (cic:/matita/excess/excess_base_OF_excess.con _) a b). - -definition strong_ext ≝ λA:apartness.λop:A→A.∀x,y. op x # op y → x # y. - -definition le ≝ λE:excess_base.λa,b:E. ¬ (a ≰ b). - -interpretation "Excess less or equal than" 'leq a b = - (cic:/matita/excess/le.con (cic:/matita/excess/excess_base_OF_excess1.con _) a b). - -interpretation "Excess less or equal than" 'geq a b = - (cic:/matita/excess/le.con (cic:/matita/excess/excess_base_OF_excess.con _) a b). - -lemma le_reflexive: ∀E.reflexive ? (le E). -unfold reflexive; intros 3 (E x H); apply (exc_coreflexive ?? H); -qed. - -lemma le_transitive: ∀E.transitive ? (le E). -unfold transitive; intros 7 (E x y z H1 H2 H3); cases (exc_cotransitive ??? y H3) (H4 H4); -[cases (H1 H4)|cases (H2 H4)] -qed. - -definition eq ≝ λA:apartness.λa,b:A. ¬ (a # b). - -notation "hvbox(a break ≈ b)" non associative with precedence 50 for @{ 'napart $a $b}. -interpretation "Apartness alikeness" 'napart a b = (cic:/matita/excess/eq.con _ a b). -interpretation "Excess alikeness" 'napart a b = (cic:/matita/excess/eq.con (cic:/matita/excess/excess_base_OF_excess1.con _) a b). -interpretation "Excess (dual) alikeness" 'napart a b = (cic:/matita/excess/eq.con (cic:/matita/excess/excess_base_OF_excess.con _) a b). - -lemma eq_reflexive:∀E:apartness. reflexive ? (eq E). -intros (E); unfold; intros (x); apply ap_coreflexive; -qed. - -lemma eq_sym_:∀E:apartness.symmetric ? (eq E). -unfold symmetric; intros 5 (E x y H H1); cases (H (ap_symmetric ??? H1)); -qed. - -lemma eq_sym:∀E:apartness.∀x,y:E.x ≈ y → y ≈ x ≝ eq_sym_. - -(* SETOID REWRITE *) -coercion cic:/matita/excess/eq_sym.con. - -lemma eq_trans_: ∀E:apartness.transitive ? (eq E). -(* bug. intros k deve fare whd quanto basta *) -intros 6 (E x y z Exy Eyz); intro Axy; cases (ap_cotransitive ???y Axy); -[apply Exy|apply Eyz] assumption. -qed. - -lemma eq_trans:∀E:apartness.∀x,z,y:E.x ≈ y → y ≈ z → x ≈ z ≝ - λE,x,y,z.eq_trans_ E x z y. - -notation > "'Eq'≈" non associative with precedence 50 for @{'eqrewrite}. -interpretation "eq_rew" 'eqrewrite = (cic:/matita/excess/eq_trans.con _ _ _). - -alias id "antisymmetric" = "cic:/matita/constructive_higher_order_relations/antisymmetric.con". -lemma le_antisymmetric: - ∀E:excess.antisymmetric ? (le (excess_base_OF_excess1 E)) (eq E). -intros 5 (E x y Lxy Lyx); intro H; -cases (ap2exc ??? H); [apply Lxy;|apply Lyx] assumption; -qed. - -definition lt ≝ λE:excess.λa,b:E. a ≤ b ∧ a # b. - -interpretation "ordered sets less than" 'lt a b = (cic:/matita/excess/lt.con _ a b). - -lemma lt_coreflexive: ∀E.coreflexive ? (lt E). -intros 2 (E x); intro H; cases H (_ ABS); -apply (ap_coreflexive ? x ABS); -qed. - -lemma lt_transitive: ∀E.transitive ? (lt E). -intros (E); unfold; intros (x y z H1 H2); cases H1 (Lxy Axy); cases H2 (Lyz Ayz); -split; [apply (le_transitive ???? Lxy Lyz)] clear H1 H2; -elim (ap2exc ??? Axy) (H1 H1); elim (ap2exc ??? Ayz) (H2 H2); [1:cases (Lxy H1)|3:cases (Lyz H2)] -clear Axy Ayz;lapply (exc_cotransitive (exc_dual_base E)) as c; unfold cotransitive in c; -lapply (exc_coreflexive (exc_dual_base E)) as r; unfold coreflexive in r; -[1: lapply (c ?? y H1) as H3; elim H3 (H4 H4); [cases (Lxy H4)|cases (r ? H4)] -|2: lapply (c ?? x H2) as H3; elim H3 (H4 H4); [apply exc2ap; right; assumption|cases (Lxy H4)]] -qed. - -theorem lt_to_excess: ∀E:excess.∀a,b:E. (a < b) → (b ≰ a). -intros (E a b Lab); elim Lab (LEab Aab); -elim (ap2exc ??? Aab) (H H); [cases (LEab H)] fold normalize (b ≰ a); assumption; (* BUG *) -qed. - -lemma le_rewl: ∀E:excess.∀z,y,x:E. x ≈ y → x ≤ z → y ≤ z. -intros (E z y x Exy Lxz); apply (le_transitive ???? ? Lxz); -intro Xyz; apply Exy; apply exc2ap; right; assumption; -qed. - -lemma le_rewr: ∀E:excess.∀z,y,x:E. x ≈ y → z ≤ x → z ≤ y. -intros (E z y x Exy Lxz); apply (le_transitive ???? Lxz); -intro Xyz; apply Exy; apply exc2ap; left; assumption; -qed. - -notation > "'Le'≪" non associative with precedence 50 for @{'lerewritel}. -interpretation "le_rewl" 'lerewritel = (cic:/matita/excess/le_rewl.con _ _ _). -notation > "'Le'≫" non associative with precedence 50 for @{'lerewriter}. -interpretation "le_rewr" 'lerewriter = (cic:/matita/excess/le_rewr.con _ _ _). - -lemma ap_rewl: ∀A:apartness.∀x,z,y:A. x ≈ y → y # z → x # z. -intros (A x z y Exy Ayz); cases (ap_cotransitive ???x Ayz); [2:assumption] -cases (Exy (ap_symmetric ??? a)); -qed. - -lemma ap_rewr: ∀A:apartness.∀x,z,y:A. x ≈ y → z # y → z # x. -intros (A x z y Exy Azy); apply ap_symmetric; apply (ap_rewl ???? Exy); -apply ap_symmetric; assumption; -qed. - -notation > "'Ap'≪" non associative with precedence 50 for @{'aprewritel}. -interpretation "ap_rewl" 'aprewritel = (cic:/matita/excess/ap_rewl.con _ _ _). -notation > "'Ap'≫" non associative with precedence 50 for @{'aprewriter}. -interpretation "ap_rewr" 'aprewriter = (cic:/matita/excess/ap_rewr.con _ _ _). - -alias symbol "napart" = "Apartness alikeness". -lemma exc_rewl: ∀A:excess.∀x,z,y:A. x ≈ y → y ≰ z → x ≰ z. -intros (A x z y Exy Ayz); elim (exc_cotransitive ???x Ayz); [2:assumption] -cases Exy; apply exc2ap; right; assumption; -qed. - -lemma exc_rewr: ∀A:excess.∀x,z,y:A. x ≈ y → z ≰ y → z ≰ x. -intros (A x z y Exy Azy); elim (exc_cotransitive ???x Azy); [assumption] -elim (Exy); apply exc2ap; left; assumption; -qed. - -notation > "'Ex'≪" non associative with precedence 50 for @{'excessrewritel}. -interpretation "exc_rewl" 'excessrewritel = (cic:/matita/excess/exc_rewl.con _ _ _). -notation > "'Ex'≫" non associative with precedence 50 for @{'excessrewriter}. -interpretation "exc_rewr" 'excessrewriter = (cic:/matita/excess/exc_rewr.con _ _ _). - -lemma lt_rewr: ∀A:excess.∀x,z,y:A. x ≈ y → z < y → z < x. -intros (A x y z E H); split; elim H; -[apply (Le≫ ? (eq_sym ??? E));|apply (Ap≫ ? E)] assumption; -qed. - -lemma lt_rewl: ∀A:excess.∀x,z,y:A. x ≈ y → y < z → x < z. -intros (A x y z E H); split; elim H; -[apply (Le≪ ? (eq_sym ??? E));| apply (Ap≪ ? E);] assumption; -qed. - -notation > "'Lt'≪" non associative with precedence 50 for @{'ltrewritel}. -interpretation "lt_rewl" 'ltrewritel = (cic:/matita/excess/lt_rewl.con _ _ _). -notation > "'Lt'≫" non associative with precedence 50 for @{'ltrewriter}. -interpretation "lt_rewr" 'ltrewriter = (cic:/matita/excess/lt_rewr.con _ _ _). - -lemma lt_le_transitive: ∀A:excess.∀x,y,z:A.x < y → y ≤ z → x < z. -intros (A x y z LT LE); cases LT (LEx APx); split; [apply (le_transitive ???? LEx LE)] -apply exc2ap; cases (ap2exc ??? APx) (EXx EXx); [cases (LEx EXx)] -cases (exc_cotransitive ??? z EXx) (EXz EXz); [cases (LE EXz)] -right; assumption; -qed. - -lemma le_lt_transitive: ∀A:excess.∀x,y,z:A.x ≤ y → y < z → x < z. -intros (A x y z LE LT); cases LT (LEx APx); split; [apply (le_transitive ???? LE LEx)] -elim (ap2exc ??? APx) (EXx EXx); [cases (LEx EXx)] -elim (exc_cotransitive ??? x EXx) (EXz EXz); [apply exc2ap; right; assumption] -cases LE; assumption; -qed. - -lemma le_le_eq: ∀E:excess.∀a,b:E. a ≤ b → b ≤ a → a ≈ b. -intros (E x y L1 L2); intro H; cases (ap2exc ??? H); [apply L1|apply L2] assumption; -qed. - -lemma eq_le_le: ∀E:excess.∀a,b:E. a ≈ b → a ≤ b ∧ b ≤ a. -intros (E x y H); whd in H; -split; intro; apply H; apply exc2ap; [left|right] assumption. -qed. - -lemma ap_le_to_lt: ∀E:excess.∀a,c:E.c # a → c ≤ a → c < a. -intros; split; assumption; -qed. - -definition total_order_property : ∀E:excess. Type ≝ - λE:excess. ∀a,b:E. a ≰ b → b < a. - diff --git a/helm/software/matita/contribs/dama/dama/group.ma b/helm/software/matita/contribs/dama/dama/group.ma deleted file mode 100644 index 104dcf274..000000000 --- a/helm/software/matita/contribs/dama/dama/group.ma +++ /dev/null @@ -1,220 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "excess.ma". - -definition left_neutral ≝ λC:apartness.λop.λe:C. ∀x:C. op e x ≈ x. -definition right_neutral ≝ λC:apartness.λop. λe:C. ∀x:C. op x e ≈ x. -definition left_inverse ≝ λC:apartness.λop.λe:C.λinv:C→C. ∀x:C. op (inv x) x ≈ e. -definition right_inverse ≝ λC:apartness.λop.λe:C.λ inv: C→ C. ∀x:C. op x (inv x) ≈ e. -(* ALLOW DEFINITION WITH SOME METAS *) - -definition distributive_left ≝ - λA:apartness.λf:A→A→A.λg:A→A→A. - ∀x,y,z. f x (g y z) ≈ g (f x y) (f x z). - -definition distributive_right ≝ - λA:apartness.λf:A→A→A.λg:A→A→A. - ∀x,y,z. f (g x y) z ≈ g (f x z) (f y z). - -record abelian_group : Type ≝ - { carr:> apartness; - plus: carr → carr → carr; - zero: carr; - opp: carr → carr; - plus_assoc_: associative ? plus (eq carr); - plus_comm_: commutative ? plus (eq carr); - zero_neutral_: left_neutral ? plus zero; - opp_inverse_: left_inverse ? plus zero opp; - plus_strong_ext: ∀z.strong_ext ? (plus z) -}. - -notation "0" with precedence 89 for @{ 'zero }. - -interpretation "Abelian group zero" 'zero = - (cic:/matita/group/zero.con _). - -interpretation "Abelian group plus" 'plus a b = - (cic:/matita/group/plus.con _ a b). - -interpretation "Abelian group opp" 'uminus a = - (cic:/matita/group/opp.con _ a). - -definition minus ≝ - λG:abelian_group.λa,b:G. a + -b. - -interpretation "Abelian group minus" 'minus a b = - (cic:/matita/group/minus.con _ a b). - -lemma plus_assoc: ∀G:abelian_group.∀x,y,z:G.x+(y+z)≈x+y+z ≝ plus_assoc_. -lemma plus_comm: ∀G:abelian_group.∀x,y:G.x+y≈y+x ≝ plus_comm_. -lemma zero_neutral: ∀G:abelian_group.∀x:G.0+x≈x ≝ zero_neutral_. -lemma opp_inverse: ∀G:abelian_group.∀x:G.-x+x≈0 ≝ opp_inverse_. - -definition ext ≝ λA:apartness.λop:A→A. ∀x,y. x ≈ y → op x ≈ op y. - -lemma strong_ext_to_ext: ∀A:apartness.∀op:A→A. strong_ext ? op → ext ? op. -intros 6 (A op SEop x y Exy); intro Axy; apply Exy; apply SEop; assumption; -qed. - -lemma feq_plusl: ∀G:abelian_group.∀x,y,z:G. y ≈ z → x+y ≈ x+z. -intros (G x y z Eyz); apply (strong_ext_to_ext ?? (plus_strong_ext ? x)); -assumption; -qed. - -coercion cic:/matita/group/feq_plusl.con nocomposites. - -lemma plus_strong_extr: ∀G:abelian_group.∀z:G.strong_ext ? (λx.x + z). -intros 5 (G z x y A); simplify in A; -lapply (plus_comm ? z x) as E1; lapply (plus_comm ? z y) as E2; -lapply (Ap≪ ? E1 A) as A1; lapply (Ap≫ ? E2 A1) as A2; -apply (plus_strong_ext ???? A2); -qed. - -lemma plus_cancl_ap: ∀G:abelian_group.∀x,y,z:G.z+x # z + y → x # y. -intros; apply plus_strong_ext; assumption; -qed. - -lemma plus_cancr_ap: ∀G:abelian_group.∀x,y,z:G.x+z # y+z → x # y. -intros; apply plus_strong_extr; assumption; -qed. - -lemma feq_plusr: ∀G:abelian_group.∀x,y,z:G. y ≈ z → y+x ≈ z+x. -intros (G x y z Eyz); apply (strong_ext_to_ext ?? (plus_strong_extr ? x)); -assumption; -qed. - -coercion cic:/matita/group/feq_plusr.con nocomposites. - -(* generation of coercions to make *_rew[lr] easier *) -lemma feq_plusr_sym_: ∀G:abelian_group.∀x,y,z:G.z ≈ y → y+x ≈ z+x. -compose feq_plusr with eq_sym (H); apply H; assumption; -qed. -coercion cic:/matita/group/feq_plusr_sym_.con nocomposites. -lemma feq_plusl_sym_: ∀G:abelian_group.∀x,y,z:G.z ≈ y → x+y ≈ x+z. -compose feq_plusl with eq_sym (H); apply H; assumption; -qed. -coercion cic:/matita/group/feq_plusl_sym_.con nocomposites. - -lemma fap_plusl: ∀G:abelian_group.∀x,y,z:G. y # z → x+y # x+z. -intros (G x y z Ayz); apply (plus_strong_ext ? (-x)); -apply (Ap≪ ((-x + x) + y)); -[1: apply plus_assoc; -|2: apply (Ap≫ ((-x +x) +z)); - [1: apply plus_assoc; - |2: apply (Ap≪ (0 + y)); - [1: apply (feq_plusr ???? (opp_inverse ??)); - |2: apply (Ap≪ ? (zero_neutral ? y)); - apply (Ap≫ (0 + z) (opp_inverse ??)); - apply (Ap≫ ? (zero_neutral ??)); assumption;]]] -qed. - -lemma fap_plusr: ∀G:abelian_group.∀x,y,z:G. y # z → y+x # z+x. -intros (G x y z Ayz); apply (plus_strong_extr ? (-x)); -apply (Ap≪ (y + (x + -x))); -[1: apply (eq_sym ??? (plus_assoc ????)); -|2: apply (Ap≫ (z + (x + -x))); - [1: apply (eq_sym ??? (plus_assoc ????)); - |2: apply (Ap≪ (y + (-x+x)) (plus_comm ? x (-x))); - apply (Ap≪ (y + 0) (opp_inverse ??)); - apply (Ap≪ (0 + y) (plus_comm ???)); - apply (Ap≪ y (zero_neutral ??)); - apply (Ap≫ (z + (-x+x)) (plus_comm ? x (-x))); - apply (Ap≫ (z + 0) (opp_inverse ??)); - apply (Ap≫ (0 + z) (plus_comm ???)); - apply (Ap≫ z (zero_neutral ??)); - assumption]] -qed. - -lemma applus: ∀E:abelian_group.∀x,a,y,b:E.x + a # y + b → x # y ∨ a # b. -intros; cases (ap_cotransitive ??? (y+a) a1); [left|right] -[apply (plus_cancr_ap ??? a)|apply (plus_cancl_ap ??? y)] -assumption; -qed. - -lemma plus_cancl: ∀G:abelian_group.∀y,z,x:G. x+y ≈ x+z → y ≈ z. -intros 6 (G y z x E Ayz); apply E; apply fap_plusl; assumption; -qed. - -lemma plus_cancr: ∀G:abelian_group.∀y,z,x:G. y+x ≈ z+x → y ≈ z. -intros 6 (G y z x E Ayz); apply E; apply fap_plusr; assumption; -qed. - -theorem eq_opp_plus_plus_opp_opp: - ∀G:abelian_group.∀x,y:G. -(x+y) ≈ -x + -y. -intros (G x y); apply (plus_cancr ??? (x+y)); -apply (Eq≈ 0 (opp_inverse ??)); -apply (Eq≈ (-x + -y + x + y)); [2: apply (eq_sym ??? (plus_assoc ????))] -apply (Eq≈ (-y + -x + x + y)); [2: repeat apply feq_plusr; apply plus_comm] -apply (Eq≈ (-y + (-x + x) + y)); [2: apply feq_plusr; apply plus_assoc;] -apply (Eq≈ (-y + 0 + y)); - [2: apply feq_plusr; apply feq_plusl; apply eq_sym; apply opp_inverse] -apply (Eq≈ (-y + y)); - [2: apply feq_plusr; apply eq_sym; - apply (Eq≈ (0+-y)); [apply plus_comm|apply zero_neutral]] -apply eq_sym; apply opp_inverse. -qed. - -theorem eq_opp_opp_x_x: ∀G:abelian_group.∀x:G.--x ≈ x. -intros (G x); apply (plus_cancl ??? (-x)); -apply (Eq≈ (--x + -x) (plus_comm ???)); -apply (Eq≈ 0 (opp_inverse ??)); -apply eq_sym; apply opp_inverse; -qed. - -theorem eq_zero_opp_zero: ∀G:abelian_group.0 ≈ -0. [assumption] -intro G; apply (plus_cancr ??? 0); -apply (Eq≈ 0); [apply zero_neutral;] -apply eq_sym; apply opp_inverse; -qed. - -lemma feq_oppr: ∀G:abelian_group.∀x,y,z:G. y ≈ z → x ≈ -y → x ≈ -z. -intros (G x y z H1 H2); apply (plus_cancr ??? z); -apply (Eq≈ 0 ? (opp_inverse ??)); -apply (Eq≈ (-y + z) H2); -apply (Eq≈ (-y + y) H1); -apply (Eq≈ 0 (opp_inverse ??)); -apply eq_reflexive; -qed. - -lemma feq_oppl: ∀G:abelian_group.∀x,y,z:G. y ≈ z → -y ≈ x → -z ≈ x. -intros (G x y z H1 H2); apply eq_sym; apply (feq_oppr ??y); -[2:apply eq_sym] assumption; -qed. - -lemma feq_opp: ∀G:abelian_group.∀x,y:G. x ≈ y → -x ≈ -y. -intros (G x y H); apply (feq_oppl ??y ? H); apply eq_reflexive; -qed. - -coercion cic:/matita/group/feq_opp.con nocomposites. - -lemma eq_opp_sym: ∀G:abelian_group.∀x,y:G. y ≈ x → -x ≈ -y. -compose feq_opp with eq_sym (H); apply H; assumption; -qed. - -coercion cic:/matita/group/eq_opp_sym.con nocomposites. - -lemma eq_opp_plusr: ∀G:abelian_group.∀x,y,z:G. x ≈ y → -(x + z) ≈ -(y + z). -compose feq_plusr with feq_opp(H); apply H; assumption; -qed. - -coercion cic:/matita/group/eq_opp_plusr.con nocomposites. - -lemma eq_opp_plusl: ∀G:abelian_group.∀x,y,z:G. x ≈ y → -(z + x) ≈ -(z + y). -compose feq_plusl with feq_opp(H); apply H; assumption; -qed. - -coercion cic:/matita/group/eq_opp_plusl.con nocomposites. diff --git a/helm/software/matita/contribs/dama/dama/infsup.ma b/helm/software/matita/contribs/dama/dama/infsup.ma deleted file mode 100644 index cc3292fd0..000000000 --- a/helm/software/matita/contribs/dama/dama/infsup.ma +++ /dev/null @@ -1,53 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "sequence.ma". - -definition upper_bound ≝ λO:excess.λa:sequence O.λu:O.∀n:nat.a n ≤ u. - -definition weak_sup ≝ - λO:excess.λs:sequence O.λx. - upper_bound ? s x ∧ (∀y:O.upper_bound ? s y → x ≤ y). - -definition strong_sup ≝ - λO:excess.λs:sequence O.λx.upper_bound ? s x ∧ (∀y:O.x ≰ y → ∃n.s n ≰ y). - -definition increasing ≝ λO:excess.λa:sequence O.∀n:nat.a n ≤ a (S n). - -notation < "x \nbsp 'is_upper_bound' \nbsp s" non associative with precedence 50 for @{'upper_bound $_ $s $x}. -notation < "x \nbsp 'is_lower_bound' \nbsp s" non associative with precedence 50 for @{'lower_bound $_ $s $x}. -notation < "s \nbsp 'is_increasing'" non associative with precedence 50 for @{'increasing $_ $s}. -notation < "s \nbsp 'is_decreasing'" non associative with precedence 50 for @{'decreasing $_ $s}. -notation < "x \nbsp 'is_strong_sup' \nbsp s" non associative with precedence 50 for @{'strong_sup $_ $s $x}. -notation < "x \nbsp 'is_strong_inf' \nbsp s" non associative with precedence 50 for @{'strong_inf $_ $s $x}. - -notation > "x 'is_upper_bound' s 'in' e" non associative with precedence 50 for @{'upper_bound $e $s $x}. -notation > "x 'is_lower_bound' s 'in' e" non associative with precedence 50 for @{'lower_bound $e $s $x}. -notation > "s 'is_increasing' 'in' e" non associative with precedence 50 for @{'increasing $e $s}. -notation > "s 'is_decreasing' 'in' e" non associative with precedence 50 for @{'decreasing $e $s}. -notation > "x 'is_strong_sup' s 'in' e" non associative with precedence 50 for @{'strong_sup $e $s $x}. -notation > "x 'is_strong_inf' s 'in' e" non associative with precedence 50 for @{'strong_inf $e $s $x}. - -interpretation "Excess upper bound" 'upper_bound e s x = (cic:/matita/infsup/upper_bound.con e s x). -interpretation "Excess lower bound" 'lower_bound e s x = (cic:/matita/infsup/upper_bound.con (cic:/matita/excess/dual_exc.con e) s x). -interpretation "Excess increasing" 'increasing e s = (cic:/matita/infsup/increasing.con e s). -interpretation "Excess decreasing" 'decreasing e s = (cic:/matita/infsup/increasing.con (cic:/matita/excess/dual_exc.con e) s). -interpretation "Excess strong sup" 'strong_sup e s x = (cic:/matita/infsup/strong_sup.con e s x). -interpretation "Excess strong inf" 'strong_inf e s x = (cic:/matita/infsup/strong_sup.con (cic:/matita/excess/dual_exc.con e) s x). - -lemma strong_sup_is_weak: - ∀O:excess.∀s:sequence O.∀x:O.strong_sup ? s x → weak_sup ? s x. -intros (O s x Ssup); elim Ssup (Ubx M); clear Ssup; split; [assumption] -intros 3 (y Uby E); cases (M ? E) (n En); unfold in Uby; cases (Uby ? En); -qed. diff --git a/helm/software/matita/contribs/dama/dama/lattice.ma b/helm/software/matita/contribs/dama/dama/lattice.ma deleted file mode 100644 index adf751b83..000000000 --- a/helm/software/matita/contribs/dama/dama/lattice.ma +++ /dev/null @@ -1,484 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "excess.ma". - -record semi_lattice_base : Type ≝ { - sl_carr:> apartness; - sl_op: sl_carr → sl_carr → sl_carr; - sl_op_refl: ∀x.sl_op x x ≈ x; - sl_op_comm: ∀x,y:sl_carr. sl_op x y ≈ sl_op y x; - sl_op_assoc: ∀x,y,z:sl_carr. sl_op x (sl_op y z) ≈ sl_op (sl_op x y) z; - sl_strong_extop: ∀x.strong_ext ? (sl_op x) -}. - -notation "a \cross b" left associative with precedence 50 for @{ 'op $a $b }. -interpretation "semi lattice base operation" 'op a b = (cic:/matita/lattice/sl_op.con _ a b). - -lemma excess_of_semi_lattice_base: semi_lattice_base → excess. -intro l; -apply mk_excess; -[1: apply mk_excess_; - [1: apply mk_excess_dual_smart; - - apply (mk_excess_base (sl_carr l)); - [1: apply (λa,b:sl_carr l.a # (a ✗ b)); - |2: unfold; intros 2 (x H); simplify in H; - lapply (Ap≪ ? (sl_op_refl ??) H) as H1; clear H; - apply (ap_coreflexive ?? H1); - |3: unfold; simplify; intros (x y z H1); - cases (ap_cotransitive ??? ((x ✗ z) ✗ y) H1) (H2 H2);[2: - lapply (Ap≪ ? (sl_op_comm ???) H2) as H21; - lapply (Ap≫ ? (sl_op_comm ???) H21) as H22; clear H21 H2; - lapply (sl_strong_extop ???? H22); clear H22; - left; apply ap_symmetric; assumption;] - cases (ap_cotransitive ??? (x ✗ z) H2) (H3 H3);[left;assumption] - right; lapply (Ap≫ ? (sl_op_assoc ????) H3) as H31; - apply (sl_strong_extop ???? H31);] - - |2: - apply apartness_of_excess_base; - - apply (mk_excess_base (sl_carr l)); - [1: apply (λa,b:sl_carr l.a # (a ✗ b)); - |2: unfold; intros 2 (x H); simplify in H; - lapply (Ap≪ ? (sl_op_refl ??) H) as H1; clear H; - apply (ap_coreflexive ?? H1); - |3: unfold; simplify; intros (x y z H1); - cases (ap_cotransitive ??? ((x ✗ z) ✗ y) H1) (H2 H2);[2: - lapply (Ap≪ ? (sl_op_comm ???) H2) as H21; - lapply (Ap≫ ? (sl_op_comm ???) H21) as H22; clear H21 H2; - lapply (sl_strong_extop ???? H22); clear H22; - left; apply ap_symmetric; assumption;] - cases (ap_cotransitive ??? (x ✗ z) H2) (H3 H3);[left;assumption] - right; lapply (Ap≫ ? (sl_op_assoc ????) H3) as H31; - apply (sl_strong_extop ???? H31);] - - |3: apply refl_eq;] -|2,3: intros (x y H); assumption;] -qed. - -record semi_lattice : Type ≝ { - sl_exc:> excess; - sl_meet: sl_exc → sl_exc → sl_exc; - sl_meet_refl: ∀x.sl_meet x x ≈ x; - sl_meet_comm: ∀x,y. sl_meet x y ≈ sl_meet y x; - sl_meet_assoc: ∀x,y,z. sl_meet x (sl_meet y z) ≈ sl_meet (sl_meet x y) z; - sl_strong_extm: ∀x.strong_ext ? (sl_meet x); - sl_le_to_eqm: ∀x,y.x ≤ y → x ≈ sl_meet x y; - sl_lem: ∀x,y.(sl_meet x y) ≤ y -}. - -interpretation "semi lattice meet" 'and a b = (cic:/matita/lattice/sl_meet.con _ a b). - -lemma sl_feq_ml: ∀ml:semi_lattice.∀a,b,c:ml. a ≈ b → (c ∧ a) ≈ (c ∧ b). -intros (l a b c H); unfold eq in H ⊢ %; unfold Not in H ⊢ %; -intro H1; apply H; clear H; apply (sl_strong_extm ???? H1); -qed. - -lemma sl_feq_mr: ∀ml:semi_lattice.∀a,b,c:ml. a ≈ b → (a ∧ c) ≈ (b ∧ c). -intros (l a b c H); -apply (Eq≈ ? (sl_meet_comm ???)); apply (Eq≈ ?? (sl_meet_comm ???)); -apply sl_feq_ml; assumption; -qed. - - -(* -lemma semi_lattice_of_semi_lattice_base: semi_lattice_base → semi_lattice. -intro slb; apply (mk_semi_lattice (excess_of_semi_lattice_base slb)); -[1: apply (sl_op slb); -|2: intro x; apply (eq_trans (excess_of_semi_lattice_base slb)); [2: - apply (sl_op_refl slb);|1:skip] (sl_op slb x x)); ? (sl_op_refl slb x)); - - unfold excess_of_semi_lattice_base; simplify; - intro H; elim H; - [ - - - lapply (ap_rewl (excess_of_semi_lattice_base slb) x ? (sl_op slb x x) - (eq_sym (excess_of_semi_lattice_base slb) ?? (sl_op_refl slb x)) t); - change in x with (sl_carr slb); - apply (Ap≪ (x ✗ x)); (sl_op_refl slb x)); - -whd in H; elim H; clear H; - [ apply (ap_coreflexive (excess_of_semi_lattice_base slb) (x ✗ x) t); - -prelattice (excess_of_directed l_)); [apply (sl_op l_);] -unfold excess_of_directed; try unfold apart_of_excess; simplify; -unfold excl; simplify; -[intro x; intro H; elim H; clear H; - [apply (sl_op_refl l_ x); - lapply (Ap≫ ? (sl_op_comm ???) t) as H; clear t; - lapply (sl_strong_extop l_ ??? H); apply ap_symmetric; assumption - | lapply (Ap≪ ? (sl_op_refl ?x) t) as H; clear t; - lapply (sl_strong_extop l_ ??? H); apply (sl_op_refl l_ x); - apply ap_symmetric; assumption] -|intros 3 (x y H); cases H (H1 H2); clear H; - [lapply (Ap≪ ? (sl_op_refl ? (sl_op l_ x y)) H1) as H; clear H1; - lapply (sl_strong_extop l_ ??? H) as H1; clear H; - lapply (Ap≪ ? (sl_op_comm ???) H1); apply (ap_coreflexive ?? Hletin); - |lapply (Ap≪ ? (sl_op_refl ? (sl_op l_ y x)) H2) as H; clear H2; - lapply (sl_strong_extop l_ ??? H) as H1; clear H; - lapply (Ap≪ ? (sl_op_comm ???) H1);apply (ap_coreflexive ?? Hletin);] -|intros 4 (x y z H); cases H (H1 H2); clear H; - [lapply (Ap≪ ? (sl_op_refl ? (sl_op l_ x (sl_op l_ y z))) H1) as H; clear H1; - lapply (sl_strong_extop l_ ??? H) as H1; clear H; - lapply (Ap≪ ? (eq_sym ??? (sl_op_assoc ?x y z)) H1) as H; clear H1; - apply (ap_coreflexive ?? H); - |lapply (Ap≪ ? (sl_op_refl ? (sl_op l_ (sl_op l_ x y) z)) H2) as H; clear H2; - lapply (sl_strong_extop l_ ??? H) as H1; clear H; - lapply (Ap≪ ? (sl_op_assoc ?x y z) H1) as H; clear H1; - apply (ap_coreflexive ?? H);] -|intros (x y z H); elim H (H1 H1); clear H; - lapply (Ap≪ ? (sl_op_refl ??) H1) as H; clear H1; - lapply (sl_strong_extop l_ ??? H) as H1; clear H; - lapply (sl_strong_extop l_ ??? H1) as H; clear H1; - cases (ap_cotransitive ??? (sl_op l_ y z) H);[left|right|right|left] try assumption; - [apply ap_symmetric;apply (Ap≪ ? (sl_op_comm ???)); - |apply (Ap≫ ? (sl_op_comm ???)); - |apply ap_symmetric;] assumption; -|intros 4 (x y H H1); apply H; clear H; elim H1 (H H); - lapply (Ap≪ ? (sl_op_refl ??) H) as H1; clear H; - lapply (sl_strong_extop l_ ??? H1) as H; clear H1;[2: apply ap_symmetric] - assumption -|intros 3 (x y H); - cut (sl_op l_ x y ≈ sl_op l_ x (sl_op l_ y y)) as H1;[2: - intro; lapply (sl_strong_extop ???? a); apply (sl_op_refl l_ y); - apply ap_symmetric; assumption;] - lapply (Ap≪ ? (eq_sym ??? H1) H); apply (sl_op_assoc l_ x y y); - assumption; ] -qed. -*) - -(* ED(≰,≱) → EB(≰') → ED(≰',≱') *) -lemma subst_excess_base: excess_dual → excess_base → excess_dual. -intros; apply (mk_excess_dual_smart e1); -qed. - -(* E_(ED(≰,≱),AP(#),c ED = c AP) → ED' → c DE' = c E_ → E_(ED',#,p) *) -lemma subst_dual_excess: ∀e:excess_.∀e1:excess_dual.exc_carr e = exc_carr e1 → excess_. -intros (e e1 p); apply (mk_excess_ e1 e); cases p; reflexivity; -qed. - -(* E(E_,H1,H2) → E_' → H1' → H2' → E(E_',H1',H2') *) -alias symbol "nleq" = "Excess excess_". -lemma subst_excess_: ∀e:excess. ∀e1:excess_. - (∀y,x:e1. y # x → y ≰ x ∨ x ≰ y) → - (∀y,x:e1.y ≰ x ∨ x ≰ y → y # x) → - excess. -intros (e e1 H1 H2); apply (mk_excess e1 H1 H2); -qed. - -definition hole ≝ λT:Type.λx:T.x. - -notation < "\ldots" non associative with precedence 50 for @{'hole}. -interpretation "hole" 'hole = (cic:/matita/lattice/hole.con _ _). - -(* SL(E,M,H2-5(#),H67(≰)) → E' → c E = c E' → H67'(≰') → SL(E,M,p2-5,H67') *) -lemma subst_excess: - ∀l:semi_lattice. - ∀e:excess. - ∀p:exc_ap l = exc_ap e. - (∀x,y:e.(le (exc_dual_base e)) x y → x ≈ (?(sl_meet l)) x y) → - (∀x,y:e.(le (exc_dual_base e)) ((?(sl_meet l)) x y) y) → - semi_lattice. -[1,2:intro M; - change with ((λx.ap_carr x) e -> (λx.ap_carr x) e -> (λx.ap_carr x) e); - cases p; apply M; -|intros (l e p H1 H2); - apply (mk_semi_lattice e); - [ change with ((λx.ap_carr x) e -> (λx.ap_carr x) e -> (λx.ap_carr x) e); - cases p; simplify; apply (sl_meet l); - |2: change in ⊢ (% → ?) with ((λx.ap_carr x) e); cases p; simplify; apply sl_meet_refl; - |3: change in ⊢ (% → % → ?) with ((λx.ap_carr x) e); cases p; simplify; apply sl_meet_comm; - |4: change in ⊢ (% → % → % → ?) with ((λx.ap_carr x) e); cases p; simplify; apply sl_meet_assoc; - |5: change in ⊢ (% → ?) with ((λx.ap_carr x) e); cases p; simplify; apply sl_strong_extm; - |6: clear H2; apply hole; apply H1; - |7: clear H1; apply hole; apply H2;]] -qed. - -lemma excess_of_excess_base: excess_base → excess. -intro eb; -apply mk_excess; - [apply (mk_excess_ (mk_excess_dual_smart eb)); - [apply (apartness_of_excess_base eb); - |reflexivity] - |2,3: intros; assumption] -qed. - -lemma subst_excess_preserves_aprtness: - ∀l:semi_lattice. - ∀e:excess. - ∀p,H1,H2. - exc_ap l = exc_ap (subst_excess l e p H1 H2). -intros; -unfold subst_excess; -simplify; assumption; -qed. - - -lemma subst_excess__preserves_aprtness: - ∀l:excess. - ∀e:excess_base. - ∀p,H1,H2. - exc_ap l = apartness_OF_excess (subst_excess_ l (subst_dual_excess l (subst_excess_base l e) p) H1 H2). -intros 3; (unfold subst_excess_; unfold subst_dual_excess; unfold subst_excess_base; unfold exc_ap; unfold mk_excess_dual_smart; simplify); -(unfold subst_excess_base in p; unfold mk_excess_dual_smart in p; simplify in p); -intros; cases p; -reflexivity; -qed. - -lemma subst_excess_base_in_excess_: - ∀d:excess_. - ∀eb:excess_base. - ∀p:exc_carr d = exc_carr eb. - excess_. -intros (e_ eb); -apply (subst_dual_excess e_); - [apply (subst_excess_base e_ eb); - |assumption] -qed. - -lemma subst_excess_base_in_excess: - ∀d:excess. - ∀eb:excess_base. - ∀p:exc_carr d = exc_carr eb. - (∀y1,x1:eb. (?(ap_apart d)) y1 x1 → y1 ≰ x1 ∨ x1 ≰ y1) → - (∀y2,x2:eb.y2 ≰ x2 ∨ x2 ≰ y2 → (?(ap_apart d)) y2 x2) → - excess. -[1,3,4:apply Type|2,5:intro f; cases p; apply f] -intros (d eb p H1 H2); -apply (subst_excess_ d); - [apply (subst_excess_base_in_excess_ d eb p); - |apply hole; clear H2; - change in ⊢ (%→%→?) with (exc_carr eb); - change in ⊢ (?→?→?→? (? % ? ?) (? % ? ?)) with eb; intros (y x H3); - apply H1; generalize in match H3; - unfold ap_apart; unfold subst_excess_base_in_excess_; - unfold subst_dual_excess; simplify; - generalize in match x; - generalize in match y; - cases p; simplify; intros; assumption; - |apply hole; clear H1; - change in ⊢ (%→%→?) with (exc_carr eb); - change in ⊢ (?→?→? (? % ? ?) (? % ? ?)→?) with eb; intros (y x H3); - unfold ap_apart; unfold subst_excess_base_in_excess_; - unfold subst_dual_excess; simplify; generalize in match (H2 ?? H3); - generalize in match x; generalize in match y; cases p; - intros; assumption;] -qed. - -lemma tech1: ∀e:excess. - ∀eb:excess_base. - ∀p,H1,H2. - exc_ap e = exc_ap_ (subst_excess_base_in_excess e eb p H1 H2). -intros (e eb p H1 H2); -unfold subst_excess_base_in_excess; -unfold subst_excess_; simplify; -unfold subst_excess_base_in_excess_; -unfold subst_dual_excess; simplify; reflexivity; -qed. - -lemma tech2: - ∀e:excess_.∀eb.∀p. - exc_ap e = exc_ap (mk_excess_ (subst_excess_base e eb) (exc_ap e) p). -intros (e eb p);unfold exc_ap; simplify; cases p; simplify; reflexivity; -qed. - -(* -lemma eq_fap: - ∀a1,b1,a2,b2,a3,b3,a4,b4,a5,b5. - a1=b1 → a2=b2 → a3=b3 → a4=b4 → a5=b5 → mk_apartness a1 a2 a3 a4 a5 = mk_apartness b1 b2 b3 b4 b5. -intros; cases H; cases H1; cases H2; cases H3; cases H4; reflexivity; -qed. -*) - -lemma subst_excess_base_in_excess_preserves_apartness: - ∀e:excess. - ∀eb:excess_base. - ∀H,H1,H2. - apartness_OF_excess e = - apartness_OF_excess (subst_excess_base_in_excess e eb H H1 H2). -intros (e eb p H1 H2); -unfold subst_excess_base_in_excess; -unfold subst_excess_; unfold subst_excess_base_in_excess_; -unfold subst_dual_excess; unfold apartness_OF_excess; -simplify in ⊢ (? ? ? (? %)); -rewrite < (tech2 e eb ); -reflexivity; -qed. - - - -alias symbol "nleq" = "Excess base excess". -lemma subst_excess_base_in_semi_lattice: - ∀sl:semi_lattice. - ∀eb:excess_base. - ∀p:exc_carr sl = exc_carr eb. - (∀y1,x1:eb. (?(ap_apart sl)) y1 x1 → y1 ≰ x1 ∨ x1 ≰ y1) → - (∀y2,x2:eb.y2 ≰ x2 ∨ x2 ≰ y2 → (?(ap_apart sl)) y2 x2) → - (∀x3,y3:eb.(le eb) x3 y3 → (?(eq sl)) x3 ((?(sl_meet sl)) x3 y3)) → - (∀x4,y4:eb.(le eb) ((?(sl_meet sl)) x4 y4) y4) → - semi_lattice. -[2:apply Prop|3,7,9,10:apply Type|4:apply (exc_carr eb)|1,5,6,8,11:intro f; cases p; apply f;] -intros (sl eb H H1 H2 H3 H4); -apply (subst_excess sl); - [apply (subst_excess_base_in_excess sl eb H H1 H2); - |apply subst_excess_base_in_excess_preserves_apartness; - |change in ⊢ (%→%→?) with ((λx.ap_carr x) (subst_excess_base_in_excess (sl_exc sl) eb H H1 H2)); simplify; - intros 3 (x y LE); clear H3 LE; - generalize in match x as x; generalize in match y as y; - generalize in match H1 as H1;generalize in match H2 as H2; - clear x y H1 H2 H4; STOP - - apply (match H return λr:Type.λm:Type_OF_semi_lattice sl=r. - ∀H2:(Πy2:exc_carr eb - .Πx2:exc_carr eb - .Or (exc_excess eb y2 x2) (exc_excess eb x2 y2) - →match H -  in eq -  return  - λright_1:Type - .(λmatched:eq Type (Type_OF_semi_lattice sl) right_1 - .right_1→right_1→Type) -  with  - [refl_eq⇒ap_apart (apartness_OF_semi_lattice sl)] y2 x2) -.∀H1:Πy1:exc_carr eb - .Πx1:exc_carr eb - .match H -  in eq -  return  - λright_1:Type - .(λmatched:eq Type (Type_OF_semi_lattice sl) right_1 - .right_1→right_1→Type) -  with  - [refl_eq⇒ap_apart (apartness_OF_semi_lattice sl)] y1 x1 - →Or (exc_excess eb y1 x1) (exc_excess eb x1 y1) - .∀y:ap_carr - (apartness_OF_excess (subst_excess_base_in_excess (sl_exc sl) eb H H1 H2)) - .∀x:ap_carr - (apartness_OF_excess - (subst_excess_base_in_excess (sl_exc sl) eb H H1 H2)) - .eq - (apartness_OF_excess (subst_excess_base_in_excess (sl_exc sl) eb H H1 H2)) x - (match  - subst_excess_base_in_excess_preserves_apartness (sl_exc sl) eb H H1 H2 -  in eq -  return  - λright_1:apartness - .(λmatched:eq apartness (apartness_OF_semi_lattice sl) right_1 - .ap_carr right_1→ap_carr right_1→ap_carr right_1) -  with  - [refl_eq⇒sl_meet sl] x y) - - with [ refl_eq ⇒ ?]); - - - cases (subst_excess_base_in_excess_preserves_apartness sl eb H H1 H2); - cases H; - cases (subst_excess_base_in_excess_preserves_apartness (sl_exc sl) eb H H1 H2); simplify; - change in x:(%) with (exc_carr eb); - change in y:(%) with (exc_carr eb); - generalize in match OK; generalize in match x as x; generalize in match y as y; - cases H; simplify; (* funge, ma devo fare 2 rewrite in un colpo solo *) - *) - |cases FALSE; - ] -qed. - -record lattice_ : Type ≝ { - latt_mcarr:> semi_lattice; - latt_jcarr_: semi_lattice; - W1:?; W2:?; W3:?; W4:?; W5:?; - latt_with1: latt_jcarr_ = subst_excess_base_in_semi_lattice latt_jcarr_ - (excess_base_OF_semi_lattice latt_mcarr) W1 W2 W3 W4 W5 -}. - -lemma latt_jcarr : lattice_ → semi_lattice. -intro l; apply (subst_excess_base_in_semi_lattice (latt_jcarr_ l) (excess_base_OF_semi_lattice (latt_mcarr l)) (W1 l) (W2 l) (W3 l) (W4 l) (W5 l)); -qed. - -coercion cic:/matita/lattice/latt_jcarr.con. - -interpretation "Lattice meet" 'and a b = - (cic:/matita/lattice/sl_meet.con (cic:/matita/lattice/latt_mcarr.con _) a b). - -interpretation "Lattice join" 'or a b = - (cic:/matita/lattice/sl_meet.con (cic:/matita/lattice/latt_jcarr.con _) a b). - -record lattice : Type ≝ { - latt_carr:> lattice_; - absorbjm: ∀f,g:latt_carr. (f ∨ (f ∧ g)) ≈ f; - absorbmj: ∀f,g:latt_carr. (f ∧ (f ∨ g)) ≈ f -}. - -notation "'meet'" non associative with precedence 50 for @{'meet}. -notation "'meet_refl'" non associative with precedence 50 for @{'meet_refl}. -notation "'meet_comm'" non associative with precedence 50 for @{'meet_comm}. -notation "'meet_assoc'" non associative with precedence 50 for @{'meet_assoc}. -notation "'strong_extm'" non associative with precedence 50 for @{'strong_extm}. -notation "'le_to_eqm'" non associative with precedence 50 for @{'le_to_eqm}. -notation "'lem'" non associative with precedence 50 for @{'lem}. -notation "'join'" non associative with precedence 50 for @{'join}. -notation "'join_refl'" non associative with precedence 50 for @{'join_refl}. -notation "'join_comm'" non associative with precedence 50 for @{'join_comm}. -notation "'join_assoc'" non associative with precedence 50 for @{'join_assoc}. -notation "'strong_extj'" non associative with precedence 50 for @{'strong_extj}. -notation "'le_to_eqj'" non associative with precedence 50 for @{'le_to_eqj}. -notation "'lej'" non associative with precedence 50 for @{'lej}. - -interpretation "Lattice meet" 'meet = (cic:/matita/lattice/sl_meet.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice meet_refl" 'meet_refl = (cic:/matita/lattice/sl_meet_refl.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice meet_comm" 'meet_comm = (cic:/matita/lattice/sl_meet_comm.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice meet_assoc" 'meet_assoc = (cic:/matita/lattice/sl_meet_assoc.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice strong_extm" 'strong_extm = (cic:/matita/lattice/sl_strong_extm.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice le_to_eqm" 'le_to_eqm = (cic:/matita/lattice/sl_le_to_eqm.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice lem" 'lem = (cic:/matita/lattice/sl_lem.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice join" 'join = (cic:/matita/lattice/sl_meet.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice join_refl" 'join_refl = (cic:/matita/lattice/sl_meet_refl.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice join_comm" 'join_comm = (cic:/matita/lattice/sl_meet_comm.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice join_assoc" 'join_assoc = (cic:/matita/lattice/sl_meet_assoc.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice strong_extm" 'strong_extj = (cic:/matita/lattice/sl_strong_extm.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice le_to_eqj" 'le_to_eqj = (cic:/matita/lattice/sl_le_to_eqm.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice lej" 'lej = (cic:/matita/lattice/sl_lem.con (cic:/matita/lattice/latt_jcarr.con _)). - -notation "'feq_jl'" non associative with precedence 50 for @{'feq_jl}. -notation "'feq_jr'" non associative with precedence 50 for @{'feq_jr}. -notation "'feq_ml'" non associative with precedence 50 for @{'feq_ml}. -notation "'feq_mr'" non associative with precedence 50 for @{'feq_mr}. -interpretation "Lattice feq_jl" 'feq_jl = (cic:/matita/lattice/sl_feq_ml.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice feq_jr" 'feq_jr = (cic:/matita/lattice/sl_feq_mr.con (cic:/matita/lattice/latt_jcarr.con _)). -interpretation "Lattice feq_ml" 'feq_ml = (cic:/matita/lattice/sl_feq_ml.con (cic:/matita/lattice/latt_mcarr.con _)). -interpretation "Lattice feq_mr" 'feq_mr = (cic:/matita/lattice/sl_feq_mr.con (cic:/matita/lattice/latt_mcarr.con _)). - - -interpretation "Lattive meet le" 'leq a b = - (cic:/matita/excess/le.con (cic:/matita/lattice/excess_OF_lattice1.con _) a b). - -interpretation "Lattive join le (aka ge)" 'geq a b = - (cic:/matita/excess/le.con (cic:/matita/lattice/excess_OF_lattice.con _) a b). - -(* these coercions help unification, handmaking a bit of conversion - over an open term -*) -lemma le_to_ge: ∀l:lattice.∀a,b:l.a ≤ b → b ≥ a. -intros(l a b H); apply H; -qed. - -lemma ge_to_le: ∀l:lattice.∀a,b:l.b ≥ a → a ≤ b. -intros(l a b H); apply H; -qed. - -coercion cic:/matita/lattice/le_to_ge.con nocomposites. -coercion cic:/matita/lattice/ge_to_le.con nocomposites. \ No newline at end of file diff --git a/helm/software/matita/contribs/dama/dama/limit.ma b/helm/software/matita/contribs/dama/dama/limit.ma deleted file mode 100644 index 1250511e8..000000000 --- a/helm/software/matita/contribs/dama/dama/limit.ma +++ /dev/null @@ -1,67 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "infsup.ma". - -definition shift ≝ λT:Type.λs:sequence T.λk:nat.λn.s (n+k). - -(* 3.28 *) -definition limsup ≝ - λE:excess.λxn:sequence E.λx:E.∃alpha:sequence E. - (∀k.(alpha k) is_strong_sup (shift ? xn k) in E) ∧ - x is_strong_inf alpha in E. - -notation < "x \nbsp 'is_limsup' \nbsp s" non associative with precedence 50 for @{'limsup $_ $s $x}. -notation < "x \nbsp 'is_liminf' \nbsp s" non associative with precedence 50 for @{'liminf $_ $s $x}. -notation > "x 'is_limsup' s 'in' e" non associative with precedence 50 for @{'limsup $e $s $x}. -notation > "x 'is_liminf' s 'in' e" non associative with precedence 50 for @{'liminf $e $s $x}. - -interpretation "Excess limsup" 'limsup e s x = (cic:/matita/limit/limsup.con e s x). -interpretation "Excess liminf" 'liminf e s x = (cic:/matita/limit/limsup.con (cic:/matita/excess/dual_exc.con e) s x). - -(* 3.29 *) -definition lim ≝ - λE:excess.λxn:sequence E.λx:E. x is_limsup xn in E ∧ x is_liminf xn in E. - -notation < "x \nbsp 'is_lim' \nbsp s" non associative with precedence 50 for @{'lim $_ $s $x}. -notation > "x 'is_lim' s 'in' e" non associative with precedence 50 for @{'lim $e $s $x}. -interpretation "Excess lim" 'lim e s x = (cic:/matita/limit/lim.con e s x). - -lemma sup_decreasing: - ∀E:excess.∀xn:sequence E. - ∀alpha:sequence E. (∀k.(alpha k) is_strong_sup xn in E) → - alpha is_decreasing in E. -intros (E xn alpha H); unfold strong_sup in H; unfold upper_bound in H; unfold; -intro r; -elim (H r) (H1r H2r); -elim (H (S r)) (H1sr H2sr); clear H H2r H1sr; -intro e; cases (H2sr (alpha r) e) (w Hw); clear e H2sr; -cases (H1r w Hw); -qed. - -include "tend.ma". -include "metric_lattice.ma". - -(* 3.30 *) -lemma lim_tends: - ∀R.∀ml:mlattice R.∀xn:sequence ml.∀x:ml. - x is_lim xn in ml → xn ⇝ x. -intros (R ml xn x Hl); unfold lim in Hl; unfold limsup in Hl; -cases Hl (e1 e2); cases e1 (an Han); cases e2 (bn Hbn); clear Hl e1 e2; -cases Han (SSan SIxan); cases Hbn (SSbn SIxbn); clear Han Hbn; -cases SIxan (LBxan Hxg); cases SIxbn (UPxbn Hxl); clear SIxbn SIxan; -change in UPxbn:(%) with (x is_lower_bound bn in ml); -unfold upper_bound in UPxbn LBxan; change -intros (e He); -(* 2.6 OC *) diff --git a/helm/software/matita/contribs/dama/dama/metric_lattice.ma b/helm/software/matita/contribs/dama/dama/metric_lattice.ma deleted file mode 100644 index 010360757..000000000 --- a/helm/software/matita/contribs/dama/dama/metric_lattice.ma +++ /dev/null @@ -1,117 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "metric_space.ma". -include "lattice.ma". - -record mlattice_ (R : todgroup) : Type ≝ { - ml_mspace_: metric_space R; - ml_lattice:> lattice; - ml_with: ms_carr ? ml_mspace_ = Type_OF_lattice ml_lattice -}. - -lemma ml_mspace: ∀R.mlattice_ R → metric_space R. -intros (R ml); apply (mk_metric_space R (Type_OF_mlattice_ ? ml)); -unfold Type_OF_mlattice_; cases (ml_with ? ml); simplify; -[apply (metric ? (ml_mspace_ ? ml));|apply (mpositive ? (ml_mspace_ ? ml)); -|apply (mreflexive ? (ml_mspace_ ? ml));|apply (msymmetric ? (ml_mspace_ ? ml)); -|apply (mtineq ? (ml_mspace_ ? ml))] -qed. - -coercion cic:/matita/metric_lattice/ml_mspace.con. - -alias symbol "plus" = "Abelian group plus". -alias symbol "leq" = "Excess less or equal than". -record mlattice (R : todgroup) : Type ≝ { - ml_carr :> mlattice_ R; - ml_prop1: ∀a,b:ml_carr. 0 < δ a b → a # b; - ml_prop2: ∀a,b,c:ml_carr. δ (a∨b) (a∨c) + δ (a∧b) (a∧c) ≤ (δ b c) -}. - -interpretation "Metric lattice leq" 'leq a b = - (cic:/matita/excess/le.con (cic:/matita/metric_lattice/excess_OF_mlattice1.con _ _) a b). -interpretation "Metric lattice geq" 'geq a b = - (cic:/matita/excess/le.con (cic:/matita/metric_lattice/excess_OF_mlattice.con _ _) a b). - -lemma eq_to_ndlt0: ∀R.∀ml:mlattice R.∀a,b:ml. a ≈ b → ¬ 0 < δ a b. -intros (R ml a b E); intro H; apply E; apply ml_prop1; -assumption; -qed. - -lemma eq_to_dzero: ∀R.∀ml:mlattice R.∀x,y:ml.x ≈ y → δ x y ≈ 0. -intros (R ml x y H); intro H1; apply H; clear H; -apply ml_prop1; split [apply mpositive] apply ap_symmetric; -assumption; -qed. - -lemma meq_l: ∀R.∀ml:mlattice R.∀x,y,z:ml. x≈z → δx y ≈ δz y. -intros (R ml x y z); apply le_le_eq; -[ apply (le_transitive ???? (mtineq ???y z)); - apply (le_rewl ??? (0+δz y) (eq_to_dzero ???? H)); - apply (le_rewl ??? (δz y) (zero_neutral ??)); apply le_reflexive; -| apply (le_transitive ???? (mtineq ???y x)); - apply (le_rewl ??? (0+δx y) (eq_to_dzero ??z x H)); - apply (le_rewl ??? (δx y) (zero_neutral ??)); apply le_reflexive;] -qed. - -(* 3.3 *) -lemma meq_r: ∀R.∀ml:mlattice R.∀x,y,z:ml. x≈z → δy x ≈ δy z. -intros; apply (eq_trans ???? (msymmetric ??y x)); -apply (eq_trans ????? (msymmetric ??z y)); apply meq_l; assumption; -qed. - -lemma dap_to_lt: ∀R.∀ml:mlattice R.∀x,y:ml. δ x y # 0 → 0 < δ x y. -intros; split [apply mpositive] apply ap_symmetric; assumption; -qed. - -lemma dap_to_ap: ∀R.∀ml:mlattice R.∀x,y:ml. δ x y # 0 → x # y. -intros (R ml x y H); apply ml_prop1; split; [apply mpositive;] -apply ap_symmetric; assumption; -qed. - -(* 3.11 *) -lemma le_mtri: - ∀R.∀ml:mlattice R.∀x,y,z:ml. x ≤ y → y ≤ z → δ x z ≈ δ x y + δ y z. -intros (R ml x y z Lxy Lyz); apply le_le_eq; [apply mtineq] -apply (le_transitive ????? (ml_prop2 ?? (y) ??)); -cut ( δx y+ δy z ≈ δ(y∨x) (y∨z)+ δ(y∧x) (y∧z)); [ - apply (le_rewr ??? (δx y+ δy z)); [assumption] apply le_reflexive] -lapply (le_to_eqm y x Lxy) as Dxm; lapply (le_to_eqm z y Lyz) as Dym; -lapply (le_to_eqj x y Lxy) as Dxj; lapply (le_to_eqj y z Lyz) as Dyj; clear Lxy Lyz; - STOP -apply (Eq≈ (δ(x∧y) y + δy z) (meq_l ????? Dxm)); -apply (Eq≈ (δ(x∧y) (y∧z) + δy z) (meq_r ????? Dym)); -apply (Eq≈ (δ(x∧y) (y∧z) + δ(y∨x) z));[ - apply feq_plusl; apply meq_l; clear Dyj Dxm Dym; assumption] -apply (Eq≈ (δ(x∧y) (y∧z) + δ(y∨x) (z∨y))); [ - apply (feq_plusl ? (δ(x∧y) (y∧z)) ?? (meq_r ??? (y∨x) ? Dyj));] -apply (Eq≈ ? (plus_comm ???)); -apply (Eq≈ (δ(y∨x) (y∨z)+ δ(x∧y) (y∧z)));[ - apply feq_plusr; apply meq_r; apply (join_comm ??);] -apply feq_plusl; -apply (Eq≈ (δ(y∧x) (y∧z)) (meq_l ????? (meet_comm ??))); -apply eq_reflexive; -qed. - - -(* 3.17 conclusione: δ x y ≈ 0 *) -(* 3.20 conclusione: δ x y ≈ 0 *) -(* 3.21 sup forte - strong_sup x ≝ ∀n. s n ≤ x ∧ ∀y x ≰ y → ∃n. s n ≰ y - strong_sup_zoli x ≝ ∀n. s n ≤ x ∧ ∄y. y#x ∧ y ≤ x -*) -(* 3.22 sup debole (più piccolo dei maggioranti) *) -(* 3.23 conclusion: δ x sup(...) ≈ 0 *) -(* 3.25 vero nel reticolo e basta (niente δ) *) -(* 3.36 conclusion: δ x y ≈ 0 *) diff --git a/helm/software/matita/contribs/dama/dama/metric_space.ma b/helm/software/matita/contribs/dama/dama/metric_space.ma deleted file mode 100644 index 2266fe9e9..000000000 --- a/helm/software/matita/contribs/dama/dama/metric_space.ma +++ /dev/null @@ -1,46 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "ordered_divisible_group.ma". - -record metric_space (R: todgroup) : Type ≝ { - ms_carr :> Type; - metric: ms_carr → ms_carr → R; - mpositive: ∀a,b:ms_carr. 0 ≤ metric a b; - mreflexive: ∀a. metric a a ≈ 0; - msymmetric: ∀a,b. metric a b ≈ metric b a; - mtineq: ∀a,b,c:ms_carr. metric a b ≤ metric a c + metric c b -}. - -notation < "\nbsp \delta a \nbsp b" non associative with precedence 80 for @{ 'delta2 $a $b}. -interpretation "metric" 'delta2 a b = (cic:/matita/metric_space/metric.con _ _ a b). -notation "\delta" non associative with precedence 80 for @{ 'delta }. -interpretation "metric" 'delta = (cic:/matita/metric_space/metric.con _ _). - -lemma apart_of_metric_space: ∀R.metric_space R → apartness. -intros (R ms); apply (mk_apartness ? (λa,b:ms.0 < δ a b)); unfold; -[1: intros 2 (x H); cases H (H1 H2); clear H; - lapply (Ap≫ ? (eq_sym ??? (mreflexive ??x)) H2); - apply (ap_coreflexive R 0); assumption; -|2: intros (x y H); cases H; split; - [1: apply (Le≫ ? (msymmetric ????)); assumption - |2: apply (Ap≫ ? (msymmetric ????)); assumption] -|3: simplify; intros (x y z H); elim H (LExy Axy); - lapply (mtineq ?? x y z) as H1; elim (ap2exc ??? Axy) (H2 H2); [cases (LExy H2)] - clear LExy; lapply (lt_le_transitive ???? H H1) as LT0; - apply (lt0plus_orlt ????? LT0); apply mpositive;] -qed. - -lemma ap2delta: ∀R.∀m:metric_space R.∀x,y:m.ap_apart (apart_of_metric_space ? m) x y → 0 < δ x y. -intros 2 (R m); cases m 0; simplify; intros; assumption; qed. diff --git a/helm/software/matita/contribs/dama/dama/ordered_divisible_group.ma b/helm/software/matita/contribs/dama/dama/ordered_divisible_group.ma deleted file mode 100644 index a9dfc4a58..000000000 --- a/helm/software/matita/contribs/dama/dama/ordered_divisible_group.ma +++ /dev/null @@ -1,75 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "nat/orders.ma". -include "nat/times.ma". -include "ordered_group.ma". -include "divisible_group.ma". - -record todgroup : Type ≝ { - todg_order:> togroup; - todg_division_: dgroup; - todg_with_: dg_carr todg_division_ = og_abelian_group todg_order -}. - -lemma todg_division: todgroup → dgroup. -intro G; apply (mk_dgroup G); unfold abelian_group_OF_todgroup; -cases (todg_with_ G); exact (dg_prop (todg_division_ G)); -qed. - -coercion cic:/matita/ordered_divisible_group/todg_division.con. - -lemma mul_ge: ∀G:todgroup.∀x:G.∀n.0 ≤ x → 0 ≤ n * x. -intros (G x n); elim n; simplify; [apply le_reflexive] -apply (le_transitive ???? H1); -apply (Le≪ (0+(n1*x)) (zero_neutral ??)); -apply fle_plusr; assumption; -qed. - -lemma lt_ltmul: ∀G:todgroup.∀x,y:G.∀n. x < y → S n * x < S n * y. -intros; elim n; [simplify; apply flt_plusr; assumption] -simplify; apply (ltplus); [assumption] assumption; -qed. - -lemma ltmul_lt: ∀G:todgroup.∀x,y:G.∀n. S n * x < S n * y → x < y. -intros 4; elim n; [apply (plus_cancr_lt ??? 0); assumption] -simplify in l; cases (ltplus_orlt ????? l); [assumption] -apply f; assumption; -qed. - -lemma divide_preserves_lt: ∀G:todgroup.∀e:G.∀n.0 sym_plus; simplify; apply (Lt≪ (0+(y+n*y))); [ - apply eq_sym; apply zero_neutral] - apply flt_plusr; assumption;] -apply (lt_transitive ???? l); rewrite > sym_plus; simplify; -rewrite > (sym_plus n); simplify; repeat apply flt_plusl; -apply (Lt≪ (0+(n1+n)*y)); [apply eq_sym; apply zero_neutral] -apply flt_plusr; assumption; -qed. - diff --git a/helm/software/matita/contribs/dama/dama/ordered_group.ma b/helm/software/matita/contribs/dama/dama/ordered_group.ma deleted file mode 100644 index 7d25273aa..000000000 --- a/helm/software/matita/contribs/dama/dama/ordered_group.ma +++ /dev/null @@ -1,328 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "group.ma". - -record pogroup_ : Type ≝ { - og_abelian_group_: abelian_group; - og_excess:> excess; - og_with: carr og_abelian_group_ = exc_ap og_excess -}. - -lemma og_abelian_group: pogroup_ → abelian_group. -intro G; apply (mk_abelian_group G); unfold apartness_OF_pogroup_; -cases (og_with G); simplify; -[apply (plus (og_abelian_group_ G));|apply zero;|apply opp -|apply plus_assoc|apply plus_comm|apply zero_neutral|apply opp_inverse|apply plus_strong_ext] -qed. - -coercion cic:/matita/ordered_group/og_abelian_group.con. - -record pogroup : Type ≝ { - og_carr:> pogroup_; - plus_cancr_exc: ∀f,g,h:og_carr. f+h ≰ g+h → f ≰ g -}. - -lemma fexc_plusr: - ∀G:pogroup.∀x,y,z:G. x ≰ y → x+z ≰ y + z. -intros 5 (G x y z L); apply (plus_cancr_exc ??? (-z)); -apply (Ex≪ (x + (z + -z)) (plus_assoc ????)); -apply (Ex≪ (x + (-z + z)) (plus_comm ??z)); -apply (Ex≪ (x+0) (opp_inverse ??)); -apply (Ex≪ (0+x) (plus_comm ???)); -apply (Ex≪ x (zero_neutral ??)); -apply (Ex≫ (y + (z + -z)) (plus_assoc ????)); -apply (Ex≫ (y + (-z + z)) (plus_comm ??z)); -apply (Ex≫ (y+0) (opp_inverse ??)); -apply (Ex≫ (0+y) (plus_comm ???)); -apply (Ex≫ y (zero_neutral ??) L); -qed. - -coercion cic:/matita/ordered_group/fexc_plusr.con nocomposites. - -lemma plus_cancl_exc: ∀G:pogroup.∀f,g,h:G. h+f ≰ h+g → f ≰ g. -intros 5 (G x y z L); apply (plus_cancr_exc ??? z); -apply (Ex≪ (z+x) (plus_comm ???)); -apply (Ex≫ (z+y) (plus_comm ???) L); -qed. - -lemma fexc_plusl: - ∀G:pogroup.∀x,y,z:G. x ≰ y → z+x ≰ z+y. -intros 5 (G x y z L); apply (plus_cancl_exc ??? (-z)); -apply (Ex≪? (plus_assoc ??z x)); -apply (Ex≫? (plus_assoc ??z y)); -apply (Ex≪ (0+x) (opp_inverse ??)); -apply (Ex≫ (0+y) (opp_inverse ??)); -apply (Ex≪? (zero_neutral ??)); -apply (Ex≫? (zero_neutral ??) L); -qed. - -coercion cic:/matita/ordered_group/fexc_plusl.con nocomposites. - -lemma plus_cancr_le: - ∀G:pogroup.∀x,y,z:G.x+z ≤ y + z → x ≤ y. -intros 5 (G x y z L); -apply (Le≪ (0+x) (zero_neutral ??)); -apply (Le≪ (x+0) (plus_comm ???)); -apply (Le≪ (x+(-z+z)) (opp_inverse ??)); -apply (Le≪ (x+(z+ -z)) (plus_comm ??z)); -apply (Le≪ (x+z+ -z) (plus_assoc ????)); -apply (Le≫ (0+y) (zero_neutral ??)); -apply (Le≫ (y+0) (plus_comm ???)); -apply (Le≫ (y+(-z+z)) (opp_inverse ??)); -apply (Le≫ (y+(z+ -z)) (plus_comm ??z)); -apply (Le≫ (y+z+ -z) (plus_assoc ????)); -intro H; apply L; clear L; apply (plus_cancr_exc ??? (-z) H); -qed. - -lemma fle_plusl: ∀G:pogroup. ∀f,g,h:G. f≤g → h+f≤h+g. -intros (G f g h); -apply (plus_cancr_le ??? (-h)); -apply (Le≪ (f+h+ -h) (plus_comm ? f h)); -apply (Le≪ (f+(h+ -h)) (plus_assoc ????)); -apply (Le≪ (f+(-h+h)) (plus_comm ? h (-h))); -apply (Le≪ (f+0) (opp_inverse ??)); -apply (Le≪ (0+f) (plus_comm ???)); -apply (Le≪ (f) (zero_neutral ??)); -apply (Le≫ (g+h+ -h) (plus_comm ? h ?)); -apply (Le≫ (g+(h+ -h)) (plus_assoc ????)); -apply (Le≫ (g+(-h+h)) (plus_comm ??h)); -apply (Le≫ (g+0) (opp_inverse ??)); -apply (Le≫ (0+g) (plus_comm ???)); -apply (Le≫ (g) (zero_neutral ??) H); -qed. - -lemma fle_plusr: ∀G:pogroup. ∀f,g,h:G. f≤g → f+h≤g+h. -intros (G f g h H); apply (Le≪? (plus_comm ???)); -apply (Le≫? (plus_comm ???)); apply fle_plusl; assumption; -qed. - -lemma plus_cancl_le: - ∀G:pogroup.∀x,y,z:G.z+x ≤ z+y → x ≤ y. -intros 5 (G x y z L); -apply (Le≪ (0+x) (zero_neutral ??)); -apply (Le≪ ((-z+z)+x) (opp_inverse ??)); -apply (Le≪ (-z+(z+x)) (plus_assoc ????)); -apply (Le≫ (0+y) (zero_neutral ??)); -apply (Le≫ ((-z+z)+y) (opp_inverse ??)); -apply (Le≫ (-z+(z+y)) (plus_assoc ????)); -apply (fle_plusl ??? (-z) L); -qed. - -lemma plus_cancl_lt: - ∀G:pogroup.∀x,y,z:G.z+x < z+y → x < y. -intros 5 (G x y z L); elim L (A LE); split; [apply plus_cancl_le; assumption] -apply (plus_cancl_ap ???? LE); -qed. - -lemma plus_cancr_lt: - ∀G:pogroup.∀x,y,z:G.x+z < y+z → x < y. -intros 5 (G x y z L); elim L (A LE); split; [apply plus_cancr_le; assumption] -apply (plus_cancr_ap ???? LE); -qed. - - -lemma exc_opp_x_zero_to_exc_zero_x: - ∀G:pogroup.∀x:G.-x ≰ 0 → 0 ≰ x. -intros (G x H); apply (plus_cancr_exc ??? (-x)); -apply (Ex≫? (plus_comm ???)); -apply (Ex≫? (opp_inverse ??)); -apply (Ex≪? (zero_neutral ??) H); -qed. - -lemma le_zero_x_to_le_opp_x_zero: - ∀G:pogroup.∀x:G.0 ≤ x → -x ≤ 0. -intros (G x Px); apply (plus_cancr_le ??? x); -apply (Le≪ 0 (opp_inverse ??)); -apply (Le≫ x (zero_neutral ??) Px); -qed. - -lemma lt_zero_x_to_lt_opp_x_zero: - ∀G:pogroup.∀x:G.0 < x → -x < 0. -intros (G x Px); apply (plus_cancr_lt ??? x); -apply (Lt≪ 0 (opp_inverse ??)); -apply (Lt≫ x (zero_neutral ??) Px); -qed. - -lemma exc_zero_opp_x_to_exc_x_zero: - ∀G:pogroup.∀x:G. 0 ≰ -x → x ≰ 0. -intros (G x H); apply (plus_cancl_exc ??? (-x)); -apply (Ex≫? (plus_comm ???)); -apply (Ex≪? (opp_inverse ??)); -apply (Ex≫? (zero_neutral ??) H); -qed. - -lemma le_x_zero_to_le_zero_opp_x: - ∀G:pogroup.∀x:G. x ≤ 0 → 0 ≤ -x. -intros (G x Lx0); apply (plus_cancr_le ??? x); -apply (Le≫ 0 (opp_inverse ??)); -apply (Le≪ x (zero_neutral ??)); -assumption; -qed. - -lemma lt_x_zero_to_lt_zero_opp_x: - ∀G:pogroup.∀x:G. x < 0 → 0 < -x. -intros (G x Lx0); apply (plus_cancr_lt ??? x); -apply (Lt≫ 0 (opp_inverse ??)); -apply (Lt≪ x (zero_neutral ??)); -assumption; -qed. - -lemma lt_opp_x_zero_to_lt_zero_x: - ∀G:pogroup.∀x:G. -x < 0 → 0 < x. -intros (G x Lx0); apply (plus_cancr_lt ??? (-x)); -apply (Lt≪ (-x) (zero_neutral ??)); -apply (Lt≫ (-x+x) (plus_comm ???)); -apply (Lt≫ 0 (opp_inverse ??)); -assumption; -qed. - -lemma lt0plus_orlt: - ∀G:pogroup. ∀x,y:G. 0 ≤ x → 0 ≤ y → 0 < x + y → 0 < x ∨ 0 < y. -intros (G x y LEx LEy LT); cases LT (H1 H2); cases (ap_cotransitive ??? y H2); -[right; split; assumption|left;split;[assumption]] -apply (plus_cancr_ap ??? y); apply (Ap≪? (zero_neutral ??)); -assumption; -qed. - -lemma le0plus_le: - ∀G:pogroup.∀a,b,c:G. 0 ≤ b → a + b ≤ c → a ≤ c. -intros (G a b c L H); apply (le_transitive ????? H); -apply (plus_cancl_le ??? (-a)); -apply (Le≪ 0 (opp_inverse ??)); -apply (Le≫ (-a + a + b) (plus_assoc ????)); -apply (Le≫ (0 + b) (opp_inverse ??)); -apply (Le≫ b (zero_neutral ??)); -assumption; -qed. - -lemma le_le0plus: - ∀G:pogroup.∀a,b:G. 0 ≤ a → 0 ≤ b → 0 ≤ a + b. -intros (G a b L1 L2); apply (le_transitive ???? L1); -apply (plus_cancl_le ??? (-a)); -apply (Le≪ 0 (opp_inverse ??)); -apply (Le≫ (-a + a + b) (plus_assoc ????)); -apply (Le≫ (0 + b) (opp_inverse ??)); -apply (Le≫ b (zero_neutral ??)); -assumption; -qed. - -lemma flt_plusl: - ∀G:pogroup.∀x,y,z:G.x < y → z + x < z + y. -intros (G x y z H); cases H; split; [apply fle_plusl; assumption] -apply fap_plusl; assumption; -qed. - -lemma flt_plusr: - ∀G:pogroup.∀x,y,z:G.x < y → x + z < y + z. -intros (G x y z H); cases H; split; [apply fle_plusr; assumption] -apply fap_plusr; assumption; -qed. - - -lemma ltxy_ltyyxx: ∀G:pogroup.∀x,y:G. y < x → y+y < x+x. -intros; apply (lt_transitive ?? (y+x));[2: - apply (Lt≪? (plus_comm ???)); - apply (Lt≫? (plus_comm ???));] -apply flt_plusl;assumption; -qed. - -lemma lew_opp : ∀O:pogroup.∀a,b,c:O.0 ≤ b → a ≤ c → a + -b ≤ c. -intros (O a b c L0 L); -apply (le_transitive ????? L); -apply (plus_cancl_le ??? (-a)); -apply (Le≫ 0 (opp_inverse ??)); -apply (Le≪ (-a+a+-b) (plus_assoc ????)); -apply (Le≪ (0+-b) (opp_inverse ??)); -apply (Le≪ (-b) (zero_neutral ?(-b))); -apply le_zero_x_to_le_opp_x_zero; -assumption; -qed. - -lemma ltw_opp : ∀O:pogroup.∀a,b,c:O.0 < b → a < c → a + -b < c. -intros (O a b c P L); -apply (lt_transitive ????? L); -apply (plus_cancl_lt ??? (-a)); -apply (Lt≫ 0 (opp_inverse ??)); -apply (Lt≪ (-a+a+-b) (plus_assoc ????)); -apply (Lt≪ (0+-b) (opp_inverse ??)); -apply (Lt≪ ? (zero_neutral ??)); -apply lt_zero_x_to_lt_opp_x_zero; -assumption; -qed. - -record togroup : Type ≝ { - tog_carr:> pogroup; - tog_total: ∀x,y:tog_carr.x≰y → y < x -}. - -lemma lexxyy_lexy: ∀G:togroup. ∀x,y:G. x+x ≤ y+y → x ≤ y. -intros (G x y H); intro H1; lapply (tog_total ??? H1) as H2; -lapply (ltxy_ltyyxx ??? H2) as H3; lapply (lt_to_excess ??? H3) as H4; -cases (H H4); -qed. - -lemma eqxxyy_eqxy: ∀G:togroup.∀x,y:G. x + x ≈ y + y → x ≈ y. -intros (G x y H); cases (eq_le_le ??? H); apply le_le_eq; -apply lexxyy_lexy; assumption; -qed. - -lemma applus_orap: ∀G:abelian_group. ∀x,y:G. 0 # x + y → 0 #x ∨ 0#y. -intros; cases (ap_cotransitive ??? y a); [right; assumption] -left; apply (plus_cancr_ap ??? y); apply (Ap≪y (zero_neutral ??)); -assumption; -qed. - -lemma ltplus: ∀G:pogroup.∀a,b,c,d:G. a < b → c < d → a+c < b + d. -intros (G a b c d H1 H2); -lapply (flt_plusr ??? c H1) as H3; -apply (lt_transitive ???? H3); -apply flt_plusl; assumption; -qed. - -lemma excplus_orexc: ∀G:pogroup.∀a,b,c,d:G. a+c ≰ b + d → a ≰ b ∨ c ≰ d. -intros (G a b c d H1 H2); -cases (exc_cotransitive ??? (a + d) H1); [ - right; apply (plus_cancl_exc ??? a); assumption] -left; apply (plus_cancr_exc ??? d); assumption; -qed. - -lemma leplus: ∀G:pogroup.∀a,b,c,d:G. a ≤ b → c ≤ d → a+c ≤ b + d. -intros (G a b c d H1 H2); intro H3; cases (excplus_orexc ????? H3); -[apply H1|apply H2] assumption; -qed. - -lemma leplus_lt_le: ∀G:togroup.∀x,y:G. 0 ≤ x + y → x < 0 → 0 ≤ y. -intros; intro; apply H; lapply (lt_to_excess ??? l); -lapply (tog_total ??? e); -lapply (tog_total ??? Hletin); -lapply (ltplus ????? Hletin2 Hletin1); -apply (Ex≪ (0+0)); [apply eq_sym; apply zero_neutral] -apply lt_to_excess; assumption; -qed. - -lemma ltplus_orlt: ∀G:togroup.∀a,b,c,d:G. a+c < b + d → a < b ∨ c < d. -intros (G a b c d H1 H2); lapply (lt_to_excess ??? H1); -cases (excplus_orexc ????? Hletin); [left|right] apply tog_total; assumption; -qed. - -lemma excplus: ∀G:togroup.∀a,b,c,d:G.a ≰ b → c ≰ d → a + c ≰ b + d. -intros (G a b c d L1 L2); -lapply (fexc_plusr ??? (c) L1) as L3; -elim (exc_cotransitive ??? (b+d) L3); [assumption] -lapply (plus_cancl_exc ???? b1); lapply (tog_total ??? Hletin); -cases Hletin1; cases (H L2); -qed. diff --git a/helm/software/matita/contribs/dama/dama/premetric_lattice.ma b/helm/software/matita/contribs/dama/dama/premetric_lattice.ma deleted file mode 100644 index 6c904055c..000000000 --- a/helm/software/matita/contribs/dama/dama/premetric_lattice.ma +++ /dev/null @@ -1,70 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "metric_space.ma". - -record premetric_lattice_ (R : todgroup) : Type ≝ { - pml_carr:> metric_space R; - meet: pml_carr → pml_carr → pml_carr; - join: pml_carr → pml_carr → pml_carr -}. - -interpretation "valued lattice meet" 'and a b = - (cic:/matita/premetric_lattice/meet.con _ _ a b). - -interpretation "valued lattice join" 'or a b = - (cic:/matita/premetric_lattice/join.con _ _ a b). - -record premetric_lattice_props (R : todgroup) (ml : premetric_lattice_ R) : Prop ≝ { - prop1a: ∀a : ml.δ (a ∧ a) a ≈ 0; - prop1b: ∀a : ml.δ (a ∨ a) a ≈ 0; - prop2a: ∀a,b: ml. δ (a ∨ b) (b ∨ a) ≈ 0; - prop2b: ∀a,b: ml. δ (a ∧ b) (b ∧ a) ≈ 0; - prop3a: ∀a,b,c: ml. δ (a ∨ (b ∨ c)) ((a ∨ b) ∨ c) ≈ 0; - prop3b: ∀a,b,c: ml. δ (a ∧ (b ∧ c)) ((a ∧ b) ∧ c) ≈ 0; - prop4a: ∀a,b: ml. δ (a ∨ (a ∧ b)) a ≈ 0; - prop4b: ∀a,b: ml. δ (a ∧ (a ∨ b)) a ≈ 0; - prop5: ∀a,b,c: ml. δ (a ∨ b) (a ∨ c) + δ (a ∧ b) (a ∧ c) ≤ δ b c -}. - -record pmlattice (R : todgroup) : Type ≝ { - carr :> premetric_lattice_ R; - ispremetriclattice:> premetric_lattice_props R carr -}. - -include "lattice.ma". - -lemma lattice_of_pmlattice: ∀R: todgroup. pmlattice R → lattice. -intros (R pml); not ported to duality -apply (mk_lattice (apart_of_metric_space ? pml)); -[apply (join ? pml)|apply (meet ? pml) -|3,4,5,6,7,8,9,10: intros (x y z); whd; intro H; whd in H; cases H (LE AP);] -[apply (prop1b ? pml pml x); |apply (prop1a ? pml pml x); -|apply (prop2a ? pml pml x y); |apply (prop2b ? pml pml x y); -|apply (prop3a ? pml pml x y z);|apply (prop3b ? pml pml x y z); -|apply (prop4a ? pml pml x y); |apply (prop4b ? pml pml x y);] -try (apply ap_symmetric; assumption); intros 4 (x y z H); change with (0 < (δ y z)); -[ change in H with (0 < δ (x ∨ y) (x ∨ z)); - apply (lt_le_transitive ???? H); - apply (le0plus_le ???? (mpositive ? pml ??) (prop5 ? pml pml x y z)); -| change in H with (0 < δ (x ∧ y) (x ∧ z)); - apply (lt_le_transitive ???? H); - apply (le0plus_le ???? (mpositive ? pml (x∨y) (x∨z))); - apply (le_rewl ??? ? (plus_comm ???)); - apply (prop5 ? pml pml);] -qed. - -coercion cic:/matita/premetric_lattice/lattice_of_pmlattice.con. \ No newline at end of file diff --git a/helm/software/matita/contribs/dama/dama/prevalued_lattice.ma b/helm/software/matita/contribs/dama/dama/prevalued_lattice.ma deleted file mode 100644 index 53b2b0a1b..000000000 --- a/helm/software/matita/contribs/dama/dama/prevalued_lattice.ma +++ /dev/null @@ -1,243 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "ordered_group.ma". - -record vlattice (R : togroup) : Type ≝ { - wl_carr:> Type; - value: wl_carr → R; - join: wl_carr → wl_carr → wl_carr; - meet: wl_carr → wl_carr → wl_carr; - meet_refl: ∀x. value (meet x x) ≈ value x; - join_refl: ∀x. value (join x x) ≈ value x; - meet_comm: ∀x,y. value (meet x y) ≈ value (meet y x); - join_comm: ∀x,y. value (join x y) ≈ value (join y x); - join_assoc: ∀x,y,z. value (join x (join y z)) ≈ value (join (join x y) z); - meet_assoc: ∀x,y,z. value (meet x (meet y z)) ≈ value (meet (meet x y) z); - meet_wins1: ∀x,y. value (join x (meet x y)) ≈ value x; - meet_wins2: ∀x,y. value (meet x (join x y)) ≈ value x; - modular_mjp: ∀x,y. value (join x y) + value (meet x y) ≈ value x + value y; - join_meet_le: ∀x,y,z. value (join x (meet y z)) ≤ value (join x y); - meet_join_le: ∀x,y,z. value (meet x y) ≤ value (meet x (join y z)) -}. - -interpretation "valued lattice meet" 'and a b = - (cic:/matita/prevalued_lattice/meet.con _ _ a b). - -interpretation "valued lattice join" 'or a b = - (cic:/matita/prevalued_lattice/join.con _ _ a b). - -notation < "\nbsp \mu a" non associative with precedence 80 for @{ 'value2 $a}. -interpretation "lattice value" 'value2 a = (cic:/matita/prevalued_lattice/value.con _ _ a). - -notation "\mu" non associative with precedence 80 for @{ 'value }. -interpretation "lattice value" 'value = (cic:/matita/prevalued_lattice/value.con _ _). - -lemma feq_joinr: ∀R.∀L:vlattice R.∀x,y,z:L. - μ x ≈ μ y → μ (z ∧ x) ≈ μ (z ∧ y) → μ (z ∨ x) ≈ μ (z ∨ y). -intros (R L x y z H H1); -apply (plus_cancr ??? (μ(z∧x))); -apply (Eq≈ (μz + μx) (modular_mjp ????)); -apply (Eq≈ (μz + μy) H); clear H; -apply (Eq≈ (μ(z∨y) + μ(z∧y)) (modular_mjp ??z y)); -apply (plus_cancl ??? (- μ (z ∨ y))); -apply (Eq≈ ? (plus_assoc ????)); -apply (Eq≈ (0+ μ(z∧y)) (opp_inverse ??)); -apply (Eq≈ ? (zero_neutral ??)); -apply (Eq≈ (- μ(z∨y)+ μ(z∨y)+ μ(z∧x)) ? (plus_assoc ????)); -apply (Eq≈ (0+ μ(z∧x)) ? (opp_inverse ??)); -apply (Eq≈ (μ (z ∧ x)) H1 (zero_neutral ??)); -qed. - -lemma modularj: ∀R.∀L:vlattice R.∀y,z:L. μ(y∨z) ≈ μy + μz + -μ (y ∧ z). -intros (R L y z); -lapply (modular_mjp ?? y z) as H1; -apply (plus_cancr ??? (μ(y ∧ z))); -apply (Eq≈ ? H1); clear H1; -apply (Eq≈ ?? (plus_assoc ????)); -apply (Eq≈ (μy+ μz + 0) ? (opp_inverse ??)); -apply (Eq≈ ?? (plus_comm ???)); -apply (Eq≈ (μy + μz) ? (eq_sym ??? (zero_neutral ??))); -apply eq_reflexive. -qed. - -lemma modularm: ∀R.∀L:vlattice R.∀y,z:L. μ(y∧z) ≈ μy + μz + -μ (y ∨ z). -(* CSC: questa è la causa per cui la hint per cercare i duplicati ci sta 1 mese *) -(* exact modularj; *) -intros (R L y z); -lapply (modular_mjp ?? y z) as H1; -apply (plus_cancl ??? (μ(y ∨ z))); -apply (Eq≈ ? H1); clear H1; -apply (Eq≈ ?? (plus_comm ???)); -apply (Eq≈ ?? (plus_assoc ????)); -apply (Eq≈ (μy+ μz + 0) ? (opp_inverse ??)); -apply (Eq≈ ?? (plus_comm ???)); -apply (Eq≈ (μy + μz) ? (eq_sym ??? (zero_neutral ??))); -apply eq_reflexive. -qed. - -lemma modularmj: ∀R.∀L:vlattice R.∀x,y,z:L.μ(x∧(y∨z))≈(μx + μ(y ∨ z) + - μ(x∨(y∨z))). -intros (R L x y z); -lapply (modular_mjp ?? x (y ∨ z)) as H1; -apply (Eq≈ (μ(x∨(y∨z))+ μ(x∧(y∨z)) +-μ(x∨(y∨z))) ? (feq_plusr ???? H1)); clear H1; -apply (Eq≈ ? ? (plus_comm ???)); -apply (Eq≈ (- μ(x∨(y∨z))+ μ(x∨(y∨z))+ μ(x∧(y∨z))) ? (plus_assoc ????)); -apply (Eq≈ (0+μ(x∧(y∨z))) ? (opp_inverse ??)); -apply (Eq≈ (μ(x∧(y∨z))) ? (zero_neutral ??)); -apply eq_reflexive. -qed. - -lemma modularjm: ∀R.∀L:vlattice R.∀x,y,z:L.μ(x∨(y∧z))≈(μx + μ(y ∧ z) + - μ(x∧(y∧z))). -intros (R L x y z); -lapply (modular_mjp ?? x (y ∧ z)) as H1; -apply (Eq≈ (μ(x∧(y∧z))+ μ(x∨(y∧z)) +-μ(x∧(y∧z)))); [2: apply feq_plusr; apply (eq_trans ???? (plus_comm ???)); apply H1] clear H1; -apply (Eq≈ ? ? (plus_comm ???)); -apply (Eq≈ (- μ(x∧(y∧z))+ μ(x∧(y∧z))+ μ(x∨y∧z)) ? (plus_assoc ????)); -apply (Eq≈ (0+ μ(x∨y∧z)) ? (opp_inverse ??)); -apply eq_sym; apply zero_neutral; -qed. - -lemma step1_3_57': ∀R.∀L:vlattice R.∀x,y,z:L. - μ(x ∨ (y ∧ z)) ≈ (μ x) + (μ y) + μ z + -μ (y ∨ z) + -μ (z ∧ (x ∧ y)). -intros (R L x y z); -apply (Eq≈ ? (modularjm ?? x y z)); -apply (Eq≈ ( μx+ (μy+ μz+- μ(y∨z)) +- μ(x∧(y∧z)))); [ - apply feq_plusr; apply feq_plusl; apply (modularm ?? y z);] -apply (Eq≈ (μx+ μy+ μz+- μ(y∨z)+- μ(x∧(y∧z)))); [2: - apply feq_plusl; apply feq_opp; - apply (Eq≈ ? (meet_assoc ?????)); - apply (Eq≈ ? (meet_comm ????)); - apply eq_reflexive;] -apply feq_plusr; apply (Eq≈ ? (plus_assoc ????)); -apply feq_plusr; apply plus_assoc; -qed. - -lemma step1_3_57: ∀R.∀L:vlattice R.∀x,y,z:L. - μ(x ∧ (y ∨ z)) ≈ (μ x) + (μ y) + μ z + -μ (y ∧ z) + -μ (z ∨ (x ∨ y)). -intros (R L x y z); -apply (Eq≈ ? (modularmj ?? x y z)); -apply (Eq≈ ( μx+ (μy+ μz+- μ(y∧z)) +- μ(x∨(y∨z)))); [ - apply feq_plusr; apply feq_plusl; apply (modularj ?? y z);] -apply (Eq≈ (μx+ μy+ μz+- μ(y∧z)+- μ(x∨(y∨z)))); [2: - apply feq_plusl; apply feq_opp; - apply (Eq≈ ? (join_assoc ?????)); - apply (Eq≈ ? (join_comm ????)); - apply eq_reflexive;] -apply feq_plusr; apply (Eq≈ ? (plus_assoc ????)); -apply feq_plusr; apply plus_assoc; -qed. - -(* LEMMA 3.57 *) - -lemma join_meet_le_join: ∀R.∀L:vlattice R.∀x,y,z:L.μ (x ∨ (y ∧ z)) ≤ μ (x ∨ z). -intros (R L x y z); -apply (le_rewl ??? ? (eq_sym ??? (step1_3_57' ?????))); -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+ -μ(z∧x∧y))); [ - apply feq_plusl; apply feq_opp; apply (eq_trans ?? ? ?? (eq_sym ??? (meet_assoc ?????))); apply eq_reflexive;] -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+ (- ( μ(z∧x)+ μy+- μ((z∧x)∨y))))); [ - apply feq_plusl; apply feq_opp; apply eq_sym; apply modularm] -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+ (- μ(z∧x)+ -μy+-- μ((z∧x)∨y)))); [ - apply feq_plusl; apply (Eq≈ (- (μ(z∧x)+ μy) + -- μ((z∧x)∨y))); [ - apply feq_plusr; apply eq_sym; apply eq_opp_plus_plus_opp_opp;] - apply eq_sym; apply eq_opp_plus_plus_opp_opp;] -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+(- μ(z∧x)+- μy+ μ(y∨(z∧x))))); [ - repeat apply feq_plusl; apply eq_sym; apply (Eq≈ (μ((z∧x)∨y)) (eq_opp_opp_x_x ??)); - apply join_comm;] -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+(- μ(z∧x)+- μy)+ μ(y∨(z∧x)))); [ - apply eq_sym; apply plus_assoc;] -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+(- μy + - μ(z∧x))+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; repeat apply feq_plusl; apply plus_comm;] -apply (le_rewl ??? (μx+ μy+ μz+- μ(y∨z)+- μy + - μ(z∧x)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply eq_sym; apply plus_assoc;] -apply (le_rewl ??? (μx+ μy+ μz+- μy + - μ(y∨z)+- μ(z∧x)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply (Eq≈ ( μx+ μy+ μz+(- μy+- μ(y∨z))) (eq_sym ??? (plus_assoc ????))); - apply feq_plusl; apply plus_comm;] -apply (le_rewl ??? (μx+ μy+ -μy+ μz + - μ(y∨z)+- μ(z∧x)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply (Eq≈ (μx+ μy+( -μy+ μz)) (eq_sym ??? (plus_assoc ????))); - apply feq_plusl; apply plus_comm;] -apply (le_rewl ??? (μx+ 0 + μz + - μ(y∨z)+- μ(z∧x)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply feq_plusl; apply eq_sym; apply (eq_trans ?? ? ? (plus_comm ???)); - apply opp_inverse; apply eq_reflexive;] -apply (le_rewl ??? (μx+ μz + - μ(y∨z)+- μ(z∧x)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_comm ???)); - apply eq_sym; apply zero_neutral;] -apply (le_rewl ??? (μz+ μx + - μ(y∨z)+- μ(z∧x)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply plus_comm;] -apply (le_rewl ??? (μz+ μx +- μ(z∧x)+ - μ(y∨z)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply (eq_trans ?? ? ? (eq_sym ??? (plus_assoc ????))); apply feq_plusl; - apply plus_comm;] -apply (le_rewl ??? (μ(z∨x)+ - μ(y∨z)+ μ(y∨(z∧x)))); [ - repeat apply feq_plusr; apply modularj;] -apply (le_rewl ??? (μ(z∨x)+ (- μ(y∨z)+ μ(y∨(z∧x)))) (plus_assoc ????)); -apply (le_rewr ??? (μ(x∨z) + 0)); [apply (eq_trans ?? ? ? (plus_comm ???)); apply zero_neutral] -apply (le_rewr ??? (μ(x∨z) + (-μ(y∨z) + μ(y∨z)))); [ apply feq_plusl; apply opp_inverse] -apply (le_rewr ??? (μ(z∨x) + (-μ(y∨z) + μ(y∨z)))); [ apply feq_plusr; apply join_comm;] -repeat apply fle_plusl; apply join_meet_le; -qed. - -lemma meet_le_meet_join: ∀R.∀L:vlattice R.∀x,y,z:L.μ (x ∧ z) ≤ μ (x ∧ (y ∨ z)). -intros (R L x y z); -apply (le_rewr ??? ? (eq_sym ??? (step1_3_57 ?????))); -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+ -μ(z∨x∨y))); [ - apply feq_plusl; apply feq_opp; apply (eq_trans ?? ? ?? (eq_sym ??? (join_assoc ?????))); apply eq_reflexive;] -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+ (- ( μ(z∨x)+ μy+- μ((z∨x)∧y))))); [ - apply feq_plusl; apply feq_opp; apply eq_sym; apply modularj] -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+ (- μ(z∨x)+ -μy+-- μ((z∨x)∧y)))); [ - apply feq_plusl; apply (Eq≈ (- (μ(z∨x)+ μy) + -- μ((z∨x)∧y))); [ - apply feq_plusr; apply eq_sym; apply eq_opp_plus_plus_opp_opp;] - apply eq_sym; apply eq_opp_plus_plus_opp_opp;] -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+(- μ(z∨x)+- μy+ μ(y∧(z∨x))))); [ - repeat apply feq_plusl; apply eq_sym; apply (Eq≈ (μ((z∨x)∧y)) (eq_opp_opp_x_x ??)); - apply meet_comm;] -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+(- μ(z∨x)+- μy)+ μ(y∧(z∨x)))); [ - apply eq_sym; apply plus_assoc;] -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+(- μy + - μ(z∨x))+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; repeat apply feq_plusl; apply plus_comm;] -apply (le_rewr ??? (μx+ μy+ μz+- μ(y∧z)+- μy + - μ(z∨x)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply eq_sym; apply plus_assoc;] -apply (le_rewr ??? (μx+ μy+ μz+- μy + - μ(y∧z)+- μ(z∨x)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply (Eq≈ ( μx+ μy+ μz+(- μy+- μ(y∧z))) (eq_sym ??? (plus_assoc ????))); - apply feq_plusl; apply plus_comm;] -apply (le_rewr ??? (μx+ μy+ -μy+ μz + - μ(y∧z)+- μ(z∨x)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply (Eq≈ ?? (plus_assoc ????)); - apply (Eq≈ (μx+ μy+( -μy+ μz)) (eq_sym ??? (plus_assoc ????))); - apply feq_plusl; apply plus_comm;] -apply (le_rewr ??? (μx+ 0 + μz + - μ(y∧z)+- μ(z∨x)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply feq_plusl; apply eq_sym; apply (eq_trans ?? ? ? (plus_comm ???)); - apply opp_inverse; apply eq_reflexive;] -apply (le_rewr ??? (μx+ μz + - μ(y∧z)+- μ(z∨x)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_comm ???)); - apply eq_sym; apply zero_neutral;] -apply (le_rewr ??? (μz+ μx + - μ(y∧z)+- μ(z∨x)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply plus_comm;] -apply (le_rewr ??? (μz+ μx +- μ(z∨x)+ - μ(y∧z)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply (eq_trans ?? ? ?? (plus_assoc ????)); - apply (eq_trans ?? ? ? (eq_sym ??? (plus_assoc ????))); apply feq_plusl; - apply plus_comm;] -apply (le_rewr ??? (μ(z∧x)+ - μ(y∧z)+ μ(y∧(z∨x)))); [ - repeat apply feq_plusr; apply modularm;] -apply (le_rewr ??? (μ(z∧x)+ (- μ(y∧z)+ μ(y∧(z∨x)))) (plus_assoc ????)); -apply (le_rewl ??? (μ(x∧z) + 0)); [apply (eq_trans ?? ? ? (plus_comm ???)); apply zero_neutral] -apply (le_rewl ??? (μ(x∧z) + (-μ(y∧z) + μ(y∧z)))); [ apply feq_plusl; apply opp_inverse] -apply (le_rewl ??? (μ(z∧x) + (-μ(y∧z) + μ(y∧z)))); [ apply feq_plusr; apply meet_comm;] -repeat apply fle_plusl; apply meet_join_le; -qed. diff --git a/helm/software/matita/contribs/dama/dama/sandwich.ma b/helm/software/matita/contribs/dama/dama/sandwich.ma deleted file mode 100644 index aaea369f5..000000000 --- a/helm/software/matita/contribs/dama/dama/sandwich.ma +++ /dev/null @@ -1,81 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - - - -include "nat/plus.ma". -include "nat/orders.ma". - -lemma ltwl: ∀a,b,c:nat. b + a < c → a < c. -intros 3 (x y z); elim y (H z IH H); [apply H] -apply IH; apply lt_S_to_lt; apply H; -qed. - -lemma ltwr: ∀a,b,c:nat. a + b < c → a < c. -intros 3 (x y z); rewrite > sym_plus; apply ltwl; -qed. - -include "tend.ma". -include "metric_lattice.ma". - -alias symbol "leq" = "ordered sets less or equal than". -alias symbol "and" = "constructive and". -theorem sandwich: -let ugo ≝ excess_OF_lattice1 in - ∀R.∀ml:mlattice R.∀an,bn,xn:sequence ml.∀x:ml. - (∀n. (xn n ≤ an n) ∧ (bn n ≤ xn n)) → - an ⇝ x → bn ⇝ x → xn ⇝ x. -intros (R ml an bn xn x H Ha Hb); -unfold tends0 in Ha Hb ⊢ %; unfold d2s in Ha Hb ⊢ %; intros (e He); -alias num (instance 0) = "natural number". -cases (Ha (e/2) (divide_preserves_lt ??? He)) (n1 H1); clear Ha; -cases (Hb (e/2) (divide_preserves_lt ??? He)) (n2 H2); clear Hb; -apply (ex_introT ?? (n1+n2)); intros (n3 Lt_n1n2_n3); -lapply (ltwr ??? Lt_n1n2_n3) as Lt_n1n3; lapply (ltwl ??? Lt_n1n2_n3) as Lt_n2n3; -cases (H1 ? Lt_n1n3) (c daxe); cases (H2 ? Lt_n2n3) (c dbxe); -cases (H n3) (H7 H8); clear Lt_n1n3 Lt_n2n3 Lt_n1n2_n3 c H1 H2 H n1 n2; -(* the main inequality *) -cut (δ (xn n3) x ≤ δ (bn n3) x + δ (an n3) x + δ (an n3) x) as main_ineq; [2: - apply (le_transitive ???? (mtineq ???? (an n3))); - cut ( δ(an n3) (bn n3)+- δ(xn n3) (bn n3)≈( δ(an n3) (xn n3))) as H11; [2: - lapply (le_mtri ?? ??? H8 H7) as H9; clear H7 H8; - lapply (Eq≈ ? (msymmetric ????) H9) as H10; clear H9; - lapply (feq_plusr ? (- δ(xn n3) (bn n3)) ?? H10) as H9; clear H10; - apply (Eq≈ ? H9); clear H9; - apply (Eq≈ (δ(xn n3) (an n3)+ δ(bn n3) (xn n3)+- δ(xn n3) (bn n3)) (plus_comm ??( δ(xn n3) (an n3)))); - apply (Eq≈ (δ(xn n3) (an n3)+ δ(bn n3) (xn n3)+- δ(bn n3) (xn n3)) (feq_opp ??? (msymmetric ????))); - apply (Eq≈ ( δ(xn n3) (an n3)+ (δ(bn n3) (xn n3)+- δ(bn n3) (xn n3))) (plus_assoc ????)); - apply (Eq≈ (δ(xn n3) (an n3) + (- δ(bn n3) (xn n3) + δ(bn n3) (xn n3))) (plus_comm ??(δ(bn n3) (xn n3)))); - apply (Eq≈ (δ(xn n3) (an n3) + 0) (opp_inverse ??)); - apply (Eq≈ ? (plus_comm ???)); - apply (Eq≈ ? (zero_neutral ??)); - apply (Eq≈ ? (msymmetric ????)); - apply eq_reflexive;] - apply (Le≪ (δ(an n3) (xn n3)+ δ(an n3) x) (msymmetric ??(an n3)(xn n3))); - apply (Le≪ (δ(an n3) (bn n3)+- δ(xn n3) (bn n3)+ δ(an n3) x) H11); - apply (Le≪ (- δ(xn n3) (bn n3)+ δ(an n3) (bn n3)+δ(an n3) x) (plus_comm ??(δ(an n3) (bn n3)))); - apply (Le≪ (- δ(xn n3) (bn n3)+ (δ(an n3) (bn n3)+δ(an n3) x)) (plus_assoc ????)); - apply (Le≪ ((δ(an n3) (bn n3)+δ(an n3) x)+- δ(xn n3) (bn n3)) (plus_comm ???)); - apply lew_opp; [apply mpositive] apply fle_plusr; - apply (Le≫ ? (plus_comm ???)); - apply (Le≫ ( δ(an n3) x+ δx (bn n3)) (msymmetric ????)); - apply mtineq;] -split; [ (* first the trivial case: -e< δ(xn n3) x *) - apply (lt_le_transitive ????? (mpositive ????)); - apply lt_zero_x_to_lt_opp_x_zero; assumption;] -(* the main goal: δ(xn n3) x