From 440a5cba61c71f3ec71d3f479da1def180934042 Mon Sep 17 00:00:00 2001 From: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> Date: Wed, 17 Nov 2021 14:50:39 +0000 Subject: [PATCH] Move flambda-backend specific flags out of ocaml/ subdirectory (#382) --- backend/asmgen.ml | 4 +- driver/flambda_backend_args.ml | 757 +++++++++++++++++++++ driver/flambda_backend_args.mli | 93 +++ driver/flambda_backend_flags.ml | 252 +++++++ driver/flambda_backend_flags.mli | 122 ++++ driver/optmaindriver.ml | 6 +- dune | 38 +- middle_end/flambda2/ui/dune | 2 +- middle_end/flambda2/ui/flambda_features.ml | 59 +- native_toplevel/dune | 1 + native_toplevel/opttopmain.ml | 4 +- ocaml/boot/ocamlc | Bin 2854326 -> 2833921 bytes ocaml/driver/compenv.ml | 116 +--- ocaml/driver/compenv.mli | 10 + ocaml/driver/main_args.ml | 659 +----------------- ocaml/driver/main_args.mli | 53 -- ocaml/utils/clflags.ml | 252 +------ ocaml/utils/clflags.mli | 107 +-- 18 files changed, 1345 insertions(+), 1190 deletions(-) create mode 100644 driver/flambda_backend_args.ml create mode 100644 driver/flambda_backend_args.mli create mode 100644 driver/flambda_backend_flags.ml create mode 100644 driver/flambda_backend_flags.mli diff --git a/backend/asmgen.ml b/backend/asmgen.ml index 520c7e8cfd2..b0ebe677503 100644 --- a/backend/asmgen.ml +++ b/backend/asmgen.ml @@ -222,14 +222,14 @@ let compile_fundecl ~ppf_dump fd_cmm = ++ Profile.record ~accumulate:true "linearize" (fun (f : Mach.fundecl) -> let res = Linearize.fundecl f in (* CR xclerc for xclerc: temporary, for testing. *) - if !Clflags.use_ocamlcfg then begin + if !Flambda_backend_flags.use_ocamlcfg then begin test_cfgize f res; end; res) ++ pass_dump_linear_if ppf_dump dump_linear "Linearized code" ++ Compiler_hooks.execute_and_pipe Compiler_hooks.Linear ++ (fun (fd : Linear.fundecl) -> - if !use_ocamlcfg then begin + if !Flambda_backend_flags.use_ocamlcfg then begin fd ++ Profile.record ~accumulate:true "linear_to_cfg" (Linear_to_cfg.run ~preserve_orig_labels:true) diff --git a/driver/flambda_backend_args.ml b/driver/flambda_backend_args.ml new file mode 100644 index 00000000000..f74e4f82fdb --- /dev/null +++ b/driver/flambda_backend_args.ml @@ -0,0 +1,757 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2021 OCamlPro SAS *) +(* Copyright 2014--2021 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) +let format_default flag = if flag then " (default)" else "" +let format_not_default flag = if flag then "" else " (default)" + +let mk_ocamlcfg f = + "-ocamlcfg", Arg.Unit f, " Use ocamlcfg" + +let mk_no_ocamlcfg f = + "-no-ocamlcfg", Arg.Unit f, " Do not use ocamlcfg" +;; + +module Flambda2 = Flambda_backend_flags.Flambda2 + +let mk_flambda2_join_points f = + "-flambda2-join-points", Arg.Unit f, + Printf.sprintf " Propagate information from all incoming edges to a join\n\ + \ point%s (Flambda 2 only)" + (format_default Flambda2.Default.join_points) +;; + +let mk_no_flambda2_join_points f = + "-no-flambda2-join-points", Arg.Unit f, + Printf.sprintf " Propagate information to a join point only if there are\n\ + \ zero or one incoming edge(s)%s (Flambda 2 only)" + (format_not_default Flambda2.Default.join_points) +;; + +let mk_flambda2_unbox_along_intra_function_control_flow f = + "-flambda2-unbox-along-intra-function-control-flow", Arg.Unit f, + Printf.sprintf " Pass values within\n\ + \ a function as unboxed where possible%s (Flambda 2 only)" + (format_default Flambda2.Default.unbox_along_intra_function_control_flow) +;; + +let mk_no_flambda2_unbox_along_intra_function_control_flow f = + "-no-flambda2-unbox-along-intra-function-control-flow", Arg.Unit f, + Printf.sprintf " Pass values within\n\ + \ a function in their normal representation%s (Flambda 2 only)" + (format_not_default + Flambda2.Default.unbox_along_intra_function_control_flow) +;; + +let mk_flambda2_backend_cse_at_toplevel f = + "-flambda2-backend-cse-at-toplevel", Arg.Unit f, + Printf.sprintf " Apply the backend CSE pass to module\n\ + \ initializers%s (Flambda 2 only)" + (format_default Flambda2.Default.backend_cse_at_toplevel) +;; + +let mk_no_flambda2_backend_cse_at_toplevel f = + "-no-flambda2-backend-cse-at-toplevel", Arg.Unit f, + Printf.sprintf " Do not apply the backend CSE pass to\n\ + \ module initializers%s (Flambda 2 only)" + (format_not_default Flambda2.Default.backend_cse_at_toplevel) +;; + +let mk_flambda2_cse_depth f = + "-flambda2-cse-depth", Arg.Int f, + Printf.sprintf " Depth threshold for eager tracking of CSE equations\n\ + \ (default %d) (Flambda 2 only)" + Flambda2.Default.cse_depth +;; + +let mk_flambda2_expert_code_id_and_symbol_scoping_checks f = + "-flambda2-expert-code-id-and-symbol-scoping-checks", Arg.Unit f, + Printf.sprintf " Perform checks on static\n\ + \ scopes of code IDs and symbols during To_cmm%s\n\ + \ (Flambda 2 only)" + (format_default Flambda2.Expert.Default.code_id_and_symbol_scoping_checks) +;; + +let mk_no_flambda2_expert_code_id_and_symbol_scoping_checks f = + "-no-flambda2-expert-code-id-and-symbol-scoping-checks", Arg.Unit f, + Printf.sprintf " Do not perform checks\n\ + \ on static scopes of code IDs and symbols during To_cmm%s\n\ + \ (Flambda 2 only)" + (format_not_default + Flambda2.Expert.Default.code_id_and_symbol_scoping_checks) +;; + +let mk_flambda2_expert_fallback_inlining_heuristic f = + "-flambda2-expert-fallback-inlining-heuristic", Arg.Unit f, + Printf.sprintf " Prevent inlining of functions\n\ + \ whose bodies contain closures%s (Flambda 2 only)" + (format_default Flambda2.Expert.Default.fallback_inlining_heuristic) +;; + +let mk_no_flambda2_expert_fallback_inlining_heuristic f = + "-no-flambda2-expert-fallback-inlining-heuristic", Arg.Unit f, + Printf.sprintf " Allow inlining of functions\n\ + \ whose bodies contain closures%s (Flambda 2 only)" + (format_not_default Flambda2.Expert.Default.fallback_inlining_heuristic) +;; + +let mk_flambda2_expert_inline_effects_in_cmm f = + "-flambda2-expert-inline-effects-in-cmm", Arg.Unit f, + Printf.sprintf " Allow inlining of effectful\n\ + \ expressions in the produced Cmm code%s (Flambda 2 only)" + (format_default Flambda2.Expert.Default.inline_effects_in_cmm) +;; + +let mk_no_flambda2_expert_inline_effects_in_cmm f = + "-no-flambda2-expert-inline-effects-in-cmm", Arg.Unit f, + Printf.sprintf " Prevent inlining of effectful\n\ + \ expressions in the produced Cmm code%s (Flambda 2 only)" + (format_not_default Flambda2.Expert.Default.inline_effects_in_cmm) +;; + +let mk_flambda2_expert_phantom_lets f = + "-flambda2-expert-phantom-lets", Arg.Unit f, + Printf.sprintf " Generate phantom lets when -g\n\ + \ is specified%s (Flambda 2 only)" + (format_default Flambda2.Expert.Default.phantom_lets) +;; + +let mk_no_flambda2_expert_phantom_lets f = + "-no-flambda2-expert-phantom-lets", Arg.Unit f, + Printf.sprintf " Do not generate phantom lets even when -g\n\ + \ is specified%s (Flambda 2 only)" + (format_not_default Flambda2.Expert.Default.phantom_lets) +;; + +let mk_flambda2_expert_max_block_size_for_projections f = + "-flambda2-expert-max-block-size-for-projections", Arg.Int f, + Printf.sprintf " Do not simplify projections\n\ + \ from blocks if the block size exceeds this value (default %s)\n\ + \ (Flambda 2 only)" + (match Flambda2.Expert.Default.max_block_size_for_projections with + | None -> "not set" + | Some max -> string_of_int max) +;; + +let mk_flambda2_expert_max_unboxing_depth f = + "-flambda2-expert-max-unboxing-depth", Arg.Int f, + Printf.sprintf " Do not unbox (nested) values deeper\n\ + \ than this many levels (default %d) (Flambda 2 only)" + Flambda2.Expert.Default.max_unboxing_depth +;; + +let mk_flambda2_expert_can_inline_recursive_functions f = + "-flambda2-expert-can-inline-recursive-functions", Arg.Unit f, + Printf.sprintf " Consider inlining\n\ + \ recursive functions (default %s) (Flambda 2 only)" + (format_default Flambda2.Expert.Default.can_inline_recursive_functions) +;; + +let mk_no_flambda2_expert_can_inline_recursive_functions f = + "-no-flambda2-expert-can-inline-recursive-functions", Arg.Unit f, + Printf.sprintf " Only inline recursive\n\ + \ functions if forced to so do by an attribute\n\ + \ (default %s) (Flambda 2 only)" + (format_not_default Flambda2.Expert.Default.can_inline_recursive_functions) +;; + +let mk_flambda2_debug_permute_every_name f = + "-flambda2-debug-permute-every-name", Arg.Unit f, + Printf.sprintf " Permute every name to test name\n\ + \ permutation code%s (Flambda 2 only)" + (format_default Flambda2.Debug.Default.permute_every_name) +;; + +let mk_no_flambda2_debug_permute_every_name f = + "-no-flambda2-debug-permute-every-name", Arg.Unit f, + Printf.sprintf " Do not permute every name to test\n\ + \ name permutation code%s (Flambda 2 only)" + (format_not_default Flambda2.Debug.Default.permute_every_name) +;; + +let mk_flambda2_debug_concrete_types_only_on_canonicals f = + "-flambda2-debug-concrete-types-only-on-canonicals", Arg.Unit f, + Printf.sprintf " Check that concrete\n\ + \ types are only assigned to canonical\n\ + \ names%s (Flambda 2 only)" + (format_default Flambda2.Debug.Default.concrete_types_only_on_canonicals) +;; + +let mk_no_flambda2_debug_concrete_types_only_on_canonicals f = + "-no-flambda2-debug-concrete-types-only-on-canonicals", Arg.Unit f, + Printf.sprintf " Do not check that\n\ + \ concrete types are only assigned to canonical\n\ + \ names%s (Flambda 2 only)" + (format_not_default + Flambda2.Debug.Default.concrete_types_only_on_canonicals) +;; + +let mk_flambda2_inline_max_depth f = + "-flambda2-inline-max-depth", Arg.String f, + Printf.sprintf "|=[,...]\n\ + \ Maximum depth of search for inlining opportunities inside\n\ + \ inlined functions (default %d) (Flambda 2 only)" + Flambda_backend_flags.Flambda2.Inlining.Default.max_depth +;; + +let mk_flambda2_inline_max_rec_depth f = + "-flambda2-inline-max-rec-depth", Arg.String f, + Printf.sprintf "|=[,...]\n\ + \ Maximum depth of search for inlining opportunities inside\n\ + \ inlined recursive functions (default %d) (Flambda 2 only)" + Flambda_backend_flags.Flambda2.Inlining.Default.max_rec_depth +;; + +let mk_flambda2_inline_cost arg descr ~default f = + Printf.sprintf "-flambda2-inline-%s-cost" arg, + Arg.String f, + Printf.sprintf "|=[,...]\n\ + \ The cost of not removing %s during inlining\n\ + \ (default %.03f, higher = more costly) (Flambda 2 only)" + descr + default +;; + +let mk_flambda2_inline_call_cost = + mk_flambda2_inline_cost "call" "a call" + ~default:Flambda_backend_flags.Flambda2.Inlining.Default.call_cost + +let mk_flambda2_inline_alloc_cost = + mk_flambda2_inline_cost "alloc" "an allocation" + ~default:Flambda_backend_flags.Flambda2.Inlining.Default.alloc_cost + +let mk_flambda2_inline_prim_cost = + mk_flambda2_inline_cost "prim" "a primitive" + ~default:Flambda_backend_flags.Flambda2.Inlining.Default.prim_cost + +let mk_flambda2_inline_branch_cost = + mk_flambda2_inline_cost "branch" "a conditional" + ~default:Flambda_backend_flags.Flambda2.Inlining.Default.branch_cost + +let mk_flambda2_inline_indirect_call_cost = + mk_flambda2_inline_cost "indirect" "an indirect call" + ~default:Flambda_backend_flags.Flambda2.Inlining.Default.indirect_call_cost + +let mk_flambda2_inline_poly_compare_cost = + mk_flambda2_inline_cost "poly-compare" "a polymorphic comparison" + ~default:Flambda_backend_flags.Flambda2.Inlining.Default.poly_compare_cost + +(* CR-someday mshinwell: We should have a check that the parameters provided by + the user are sensible, e.g. small_function_size <= large_function_size. *) + +let mk_flambda2_inline_small_function_size f = + "-flambda2-inline-small-function-size", Arg.String f, + Printf.sprintf "|=[,...]\n\ + \ Functions with a cost less than this will always be inlined\n\ + \ unless an attribute instructs otherwise (default %d)\n\ + \ (Flambda 2 only)" + Flambda_backend_flags.Flambda2.Inlining.Default.small_function_size +;; + +let mk_flambda2_inline_large_function_size f = + "-flambda2-inline-large-function-size", Arg.String f, + Printf.sprintf "|=[,...]\n\ + \ Functions with a cost greater than this will never be inlined\n\ + \ unless an attribute instructs otherwise (default %d); speculative\n\ + \ inlining will be disabled if equal to the small function size\n\ + \ (Flambda 2 only)" + Flambda_backend_flags.Flambda2.Inlining.Default.large_function_size +;; + +let mk_flambda2_inline_threshold f = + "-flambda2-inline-threshold", Arg.String f, + Printf.sprintf "|=[,...]\n\ + \ Aggressiveness of inlining (default %.02f, higher numbers mean\n\ + \ more aggressive) (Flambda 2 only)" + Flambda_backend_flags.Flambda2.Inlining.Default.threshold + +let mk_flambda2_speculative_inlining_only_if_arguments_useful f = + "-flambda2-speculative-inlining-only-if-arguments-useful", Arg.Unit f, + Printf.sprintf " Only\n\ + \ perform speculative inlining if the Flambda type system has\n\ + \ useful information about the argument(s) at the call site%s\n\ + \ (Flambda 2 only)" + (format_default + Flambda2.Inlining.Default.speculative_inlining_only_if_arguments_useful) + +let mk_no_flambda2_speculative_inlining_only_if_arguments_useful f = + "-no-flambda2-speculative-inlining-only-if-arguments-useful", Arg.Unit f, + Printf.sprintf " Ignore\n\ + \ whether the Flambda type system has useful information\n\ + \ about the argument(s) at the call site when performing\n\ + \ speculative inlining%s (Flambda 2 only)" + (format_not_default + Flambda2.Inlining.Default.speculative_inlining_only_if_arguments_useful) + +let mk_flambda2_treat_invalid_code_as_unreachable f = + "-flambda2-treat-invalid-code-as-unreachable", Arg.Unit f, + Printf.sprintf " Treat code deemed as\n\ + \ invalid by the Flambda 2 type system as unreachable, thus causing\n\ + \ it (and potentially calling code) to be deleted%s\n\ + \ (Flambda 2 only)" + (format_default Flambda2.Default.treat_invalid_code_as_unreachable) +;; + +let mk_no_flambda2_treat_invalid_code_as_unreachable f = + "-no-flambda2-treat-invalid-code-as-unreachable", Arg.Unit f, + Printf.sprintf " Do not treat code deemed as\n\ + \ invalid by the Flambda 2 type system as unreachable, instead\n\ + \ replacing it by a trap (which currently causes a segfault)%s\n\ + \ (Flambda 2 only)" + (format_not_default Flambda2.Default.treat_invalid_code_as_unreachable) +;; + +let mk_flambda2_inlining_report_bin f = + "-flambda2-inlining-report-bin", Arg.Unit f, " Write inlining report\n\ + \ in binary format (Flambda 2 only)" +;; + +let mk_flambda2_unicode f = + "-flambda2-unicode", Arg.Unit f, " Use Unicode output when printing\n\ + \ Flambda 2 code" +;; + +let mk_drawfexpr f = + "-drawfexpr", Arg.Unit f, " Like -drawflambda but outputs fexpr language\n\ + \ (Flambda 2 only)" +;; + +let mk_dfexpr f = + "-dfexpr", Arg.Unit f, " Like -dflambda but outputs fexpr language\n\ + \ (Flambda 2 only)" +;; + +let mk_dflexpect f = + "-dflexpect", Arg.Unit f, " Like -dflambda but outputs a .flt file\n\ + \ whose basename matches that of the input .ml file (Flambda 2 only)" +;; + +let mk_dclosure_offsets f = + "-dclosure-offsets", Arg.Unit f, " Dump closure offsets (Flambda 2 only)" +;; + +let mk_dfreshen f = + "-dfreshen", Arg.Unit f, " Freshen bound names when printing (Flambda 2 only)" +;; + +module type Flambda_backend_options = sig + val _ocamlcfg : unit -> unit + val _no_ocamlcfg : unit -> unit + + val _flambda2_join_points : unit -> unit + val _no_flambda2_join_points : unit -> unit + val _flambda2_unbox_along_intra_function_control_flow : unit -> unit + val _no_flambda2_unbox_along_intra_function_control_flow : unit -> unit + val _flambda2_backend_cse_at_toplevel : unit -> unit + val _no_flambda2_backend_cse_at_toplevel : unit -> unit + val _flambda2_cse_depth : int -> unit + val _flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit + val _no_flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit + val _flambda2_expert_fallback_inlining_heuristic : unit -> unit + val _no_flambda2_expert_fallback_inlining_heuristic : unit -> unit + val _flambda2_expert_inline_effects_in_cmm : unit -> unit + val _no_flambda2_expert_inline_effects_in_cmm : unit -> unit + val _flambda2_expert_phantom_lets : unit -> unit + val _no_flambda2_expert_phantom_lets : unit -> unit + val _flambda2_expert_max_block_size_for_projections : int -> unit + val _flambda2_expert_max_unboxing_depth : int -> unit + val _flambda2_expert_can_inline_recursive_functions : unit -> unit + val _no_flambda2_expert_can_inline_recursive_functions : unit -> unit + val _flambda2_debug_permute_every_name : unit -> unit + val _no_flambda2_debug_permute_every_name : unit -> unit + val _flambda2_debug_concrete_types_only_on_canonicals : unit -> unit + val _no_flambda2_debug_concrete_types_only_on_canonicals : unit -> unit + + val _flambda2_inline_max_depth : string -> unit + val _flambda2_inline_max_rec_depth : string -> unit + val _flambda2_inline_call_cost : string -> unit + val _flambda2_inline_alloc_cost : string -> unit + val _flambda2_inline_prim_cost : string -> unit + val _flambda2_inline_branch_cost : string -> unit + val _flambda2_inline_indirect_call_cost : string -> unit + val _flambda2_inline_poly_compare_cost : string -> unit + val _flambda2_inline_small_function_size : string -> unit + val _flambda2_inline_large_function_size : string -> unit + val _flambda2_inline_threshold : string -> unit + val _flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit + val _no_flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit + + val _flambda2_inlining_report_bin : unit -> unit + + val _flambda2_unicode : unit -> unit + + val _flambda2_treat_invalid_code_as_unreachable : unit -> unit + val _no_flambda2_treat_invalid_code_as_unreachable : unit -> unit + + val _drawfexpr : unit -> unit + val _dfexpr : unit -> unit + val _dflexpect : unit -> unit + val _dclosure_offsets : unit -> unit + val _dfreshen : unit -> unit +end + +module Make_flambda_backend_options (F : Flambda_backend_options) = +struct + let list2 = [ + mk_ocamlcfg F._ocamlcfg; + mk_no_ocamlcfg F._no_ocamlcfg; + + mk_flambda2_join_points F._flambda2_join_points; + mk_no_flambda2_join_points F._no_flambda2_join_points; + mk_flambda2_unbox_along_intra_function_control_flow + F._flambda2_unbox_along_intra_function_control_flow; + mk_no_flambda2_unbox_along_intra_function_control_flow + F._no_flambda2_unbox_along_intra_function_control_flow; + mk_flambda2_backend_cse_at_toplevel F._flambda2_backend_cse_at_toplevel; + mk_no_flambda2_backend_cse_at_toplevel + F._no_flambda2_backend_cse_at_toplevel; + mk_flambda2_cse_depth F._flambda2_cse_depth; + mk_flambda2_expert_code_id_and_symbol_scoping_checks + F._flambda2_expert_code_id_and_symbol_scoping_checks; + mk_no_flambda2_expert_code_id_and_symbol_scoping_checks + F._no_flambda2_expert_code_id_and_symbol_scoping_checks; + mk_flambda2_expert_fallback_inlining_heuristic + F._flambda2_expert_fallback_inlining_heuristic; + mk_no_flambda2_expert_fallback_inlining_heuristic + F._no_flambda2_expert_fallback_inlining_heuristic; + mk_flambda2_expert_inline_effects_in_cmm + F._flambda2_expert_inline_effects_in_cmm; + mk_no_flambda2_expert_inline_effects_in_cmm + F._no_flambda2_expert_inline_effects_in_cmm; + mk_flambda2_expert_phantom_lets + F._flambda2_expert_phantom_lets; + mk_no_flambda2_expert_phantom_lets + F._no_flambda2_expert_phantom_lets; + mk_flambda2_expert_max_block_size_for_projections + F._flambda2_expert_max_block_size_for_projections; + mk_flambda2_expert_max_unboxing_depth + F._flambda2_expert_max_unboxing_depth; + mk_flambda2_expert_can_inline_recursive_functions + F._flambda2_expert_can_inline_recursive_functions; + mk_no_flambda2_expert_can_inline_recursive_functions + F._no_flambda2_expert_can_inline_recursive_functions; + mk_flambda2_debug_permute_every_name + F._flambda2_debug_permute_every_name; + mk_no_flambda2_debug_permute_every_name + F._no_flambda2_debug_permute_every_name; + mk_flambda2_debug_concrete_types_only_on_canonicals + F._flambda2_debug_concrete_types_only_on_canonicals; + mk_no_flambda2_debug_concrete_types_only_on_canonicals + F._no_flambda2_debug_concrete_types_only_on_canonicals; + + mk_flambda2_inline_max_depth F._flambda2_inline_max_depth; + mk_flambda2_inline_max_rec_depth F._flambda2_inline_max_rec_depth; + mk_flambda2_inline_alloc_cost F._flambda2_inline_alloc_cost; + mk_flambda2_inline_branch_cost F._flambda2_inline_branch_cost; + mk_flambda2_inline_call_cost F._flambda2_inline_call_cost; + mk_flambda2_inline_prim_cost F._flambda2_inline_prim_cost; + mk_flambda2_inline_indirect_call_cost F._flambda2_inline_indirect_call_cost; + mk_flambda2_inline_poly_compare_cost F._flambda2_inline_poly_compare_cost; + mk_flambda2_inline_small_function_size + F._flambda2_inline_small_function_size; + mk_flambda2_inline_large_function_size + F._flambda2_inline_large_function_size; + mk_flambda2_inline_threshold F._flambda2_inline_threshold; + mk_flambda2_speculative_inlining_only_if_arguments_useful + F._flambda2_speculative_inlining_only_if_arguments_useful; + mk_no_flambda2_speculative_inlining_only_if_arguments_useful + F._no_flambda2_speculative_inlining_only_if_arguments_useful; + + mk_flambda2_inlining_report_bin F._flambda2_inlining_report_bin; + + mk_flambda2_unicode F._flambda2_unicode; + + mk_flambda2_treat_invalid_code_as_unreachable + F._flambda2_treat_invalid_code_as_unreachable; + mk_no_flambda2_treat_invalid_code_as_unreachable + F._no_flambda2_treat_invalid_code_as_unreachable; + + mk_drawfexpr F._drawfexpr; + mk_dfexpr F._dfexpr; + mk_dflexpect F._dflexpect; + mk_dclosure_offsets F._dclosure_offsets; + mk_dfreshen F._dfreshen; + ] +end + +module Flambda_backend_options = struct + let set r () = r := true + let clear r () = r := false + + let _ocamlcfg = set Flambda_backend_flags.use_ocamlcfg + let _no_ocamlcfg = clear Flambda_backend_flags.use_ocamlcfg + + let _flambda2_join_points = set Flambda2.join_points + let _no_flambda2_join_points = clear Flambda2.join_points + let _flambda2_unbox_along_intra_function_control_flow = + set Flambda2.unbox_along_intra_function_control_flow + let _no_flambda2_unbox_along_intra_function_control_flow = + clear Flambda2.unbox_along_intra_function_control_flow + let _flambda2_backend_cse_at_toplevel = + set Flambda2.backend_cse_at_toplevel + let _no_flambda2_backend_cse_at_toplevel = + clear Flambda2.backend_cse_at_toplevel + let _flambda2_cse_depth n = Flambda2.cse_depth := n + let _flambda2_expert_code_id_and_symbol_scoping_checks = + set Flambda2.Expert.code_id_and_symbol_scoping_checks + let _no_flambda2_expert_code_id_and_symbol_scoping_checks = + clear Flambda2.Expert.code_id_and_symbol_scoping_checks + let _flambda2_expert_fallback_inlining_heuristic = + set Flambda2.Expert.fallback_inlining_heuristic + let _no_flambda2_expert_fallback_inlining_heuristic = + clear Flambda2.Expert.fallback_inlining_heuristic + let _flambda2_expert_inline_effects_in_cmm = + set Flambda2.Expert.inline_effects_in_cmm + let _no_flambda2_expert_inline_effects_in_cmm = + clear Flambda2.Expert.inline_effects_in_cmm + let _flambda2_expert_phantom_lets = + set Flambda2.Expert.phantom_lets + let _no_flambda2_expert_phantom_lets = + clear Flambda2.Expert.phantom_lets + let _flambda2_expert_max_block_size_for_projections size = + Flambda2.Expert.max_block_size_for_projections := Some size + let _flambda2_expert_max_unboxing_depth depth = + Flambda2.Expert.max_unboxing_depth := depth + let _flambda2_expert_can_inline_recursive_functions () = + Flambda2.Expert.can_inline_recursive_functions := true + let _no_flambda2_expert_can_inline_recursive_functions () = + Flambda2.Expert.can_inline_recursive_functions := false + let _flambda2_debug_permute_every_name = + set Flambda2.Debug.permute_every_name + let _no_flambda2_debug_permute_every_name = + clear Flambda2.Debug.permute_every_name + let _flambda2_debug_concrete_types_only_on_canonicals = + set Flambda2.Debug.concrete_types_only_on_canonicals + let _no_flambda2_debug_concrete_types_only_on_canonicals = + clear Flambda2.Debug.concrete_types_only_on_canonicals + + let _flambda2_inline_max_depth spec = + Clflags.Int_arg_helper.parse spec + "Syntax: -flambda2-inline-max-depth | =[,...]" + Flambda2.Inlining.max_depth + + let _flambda2_inline_max_rec_depth spec = + Clflags.Int_arg_helper.parse spec + "Syntax: -flambda2-inline-max-rec-depth | =[,...]" + Flambda2.Inlining.max_rec_depth + let _flambda2_inline_alloc_cost spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-alloc-cost | =[,...]" + Flambda2.Inlining.alloc_cost + + let _flambda2_inline_branch_cost spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-branch-cost | =[,...]" + Flambda2.Inlining.branch_cost + + let _flambda2_inline_call_cost spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-call-cost | =[,...]" + Flambda2.Inlining.call_cost + + let _flambda2_inline_prim_cost spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-prim-cost | =[,...]" + Flambda2.Inlining.prim_cost + + let _flambda2_inline_indirect_call_cost spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-indirect-call-cost | \ + =[,...]" + Flambda2.Inlining.indirect_call_cost + + let _flambda2_inline_poly_compare_cost spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-poly-compare-cost | \ + =[,...]" + Flambda2.Inlining.poly_compare_cost + + let _flambda2_inline_small_function_size spec = + Clflags.Int_arg_helper.parse spec + "Syntax: -flambda2-inline-small-function-size | \ + =[,...]" + Flambda2.Inlining.small_function_size + + let _flambda2_inline_large_function_size spec = + Clflags.Int_arg_helper.parse spec + "Syntax: -flambda2-inline-large-function-size | \ + =[,...]" + Flambda2.Inlining.large_function_size + + let _flambda2_inline_threshold spec = + Clflags.Float_arg_helper.parse spec + "Syntax: -flambda2-inline-threshold | =[,...]" + Flambda2.Inlining.threshold + + let _flambda2_speculative_inlining_only_if_arguments_useful = + set Flambda2.Inlining.speculative_inlining_only_if_arguments_useful + + let _no_flambda2_speculative_inlining_only_if_arguments_useful = + clear Flambda2.Inlining.speculative_inlining_only_if_arguments_useful + + let _flambda2_inlining_report_bin = set Flambda2.Inlining.report_bin + + let _flambda2_unicode = set Flambda2.unicode + + let _flambda2_treat_invalid_code_as_unreachable = + set Flambda2.treat_invalid_code_as_unreachable + let _no_flambda2_treat_invalid_code_as_unreachable = + clear Flambda2.treat_invalid_code_as_unreachable + + let _drawfexpr = set Flambda2.Dump.rawfexpr + let _dfexpr = set Flambda2.Dump.fexpr + let _dflexpect = set Flambda2.Dump.flexpect + let _dclosure_offsets = set Flambda2.Dump.closure_offsets + let _dfreshen = set Flambda2.Dump.freshen +end + +module Extra_params = struct + let read_param ppf _position name v = + let set option = + Compenv.setter ppf (fun b -> b) name [ option ] v; true + in + let _clear option = + Compenv.setter ppf (fun b -> not b) name [ option ] v; true + in + let set_int option = + Compenv.int_setter ppf name option v; true + in + match name with + (* override existing params *) + | "Oclassic" -> + if Compenv.check_bool ppf "Oclassic" v then + Flambda_backend_flags.set_oclassic (); true + | "O2" -> + if Compenv.check_bool ppf "O2" v then + Flambda_backend_flags.set_o2 (); true + | "O3" -> + if Compenv.check_bool ppf "O3" v then + Flambda_backend_flags.set_o3 (); true + (* define new params *) + | "ocamlcfg" -> set Flambda_backend_flags.use_ocamlcfg + | "flambda2-join-points" -> set Flambda2.join_points + | "flambda2-unbox-along-intra-function-control-flow" -> + set Flambda2.unbox_along_intra_function_control_flow + | "flambda2-backend-cse-at-toplevel" -> + set Flambda2.backend_cse_at_toplevel + | "flambda2-cse-depth" -> + set_int Flambda2.cse_depth + | "flambda2-expert-inline-effects-in-cmm" -> + set Flambda2.Expert.inline_effects_in_cmm + | "flambda2-expert-phantom-lets" -> + set Flambda2.Expert.phantom_lets + | "flambda2-expert-max-unboxing-depth" -> + set_int Flambda2.Expert.max_unboxing_depth + | "flambda2-expert-can-inline-recursive-functions" -> + set Flambda2.Expert.can_inline_recursive_functions + | "flambda2-inline-max-depth" -> + Clflags.Int_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-max-depth'" + Flambda2.Inlining.max_depth; true + | "flambda2-inline-max-rec-depth" -> + Clflags.Int_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-max-rec-depth'" + Flambda2.Inlining.max_rec_depth; true + | "flambda2-inline-call-cost" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-call-cost'" + Flambda2.Inlining.call_cost; true + | "flambda2-inline-alloc-cost" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-alloc-cost'" + Flambda2.Inlining.alloc_cost; true + | "flambda2-inline-prim-cost" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-prim-cost'" + Flambda2.Inlining.prim_cost; true + | "flambda2-inline-branch-cost" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-branch-cost'" + Flambda2.Inlining.branch_cost; true + | "flambda2-inline-indirect-cost" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-indirect-cost'" + Flambda2.Inlining.indirect_call_cost; true + | "flambda2-inline-poly-compare-cost" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-poly-compare-cost'" + Flambda2.Inlining.poly_compare_cost; true + | "flambda2-inline-small-function-size" -> + Clflags.Int_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-small-function-size'" + Flambda2.Inlining.small_function_size; true + | "flambda2-inline-large-function-size" -> + Clflags.Int_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-large-function-size'" + Flambda2.Inlining.large_function_size; true + | "flambda2-inline-threshold" -> + Clflags.Float_arg_helper.parse v + "Bad syntax in OCAMLPARAM for 'flambda2-inline-threshold'" + Flambda2.Inlining.threshold; true + | "flambda2-speculative-inlining-only-if-arguments-useful" -> + set Flambda2.Inlining.speculative_inlining_only_if_arguments_useful + | "flambda2-treat-invalid-code-as-unreachable" -> + set Flambda2.treat_invalid_code_as_unreachable + | "flambda2-inlining-report-bin" -> + set Flambda2.Inlining.report_bin + | "flambda2-expert-code-id-and-symbol-scoping-checks" -> + set Flambda2.Expert.code_id_and_symbol_scoping_checks + | "flambda2-expert-fallback-inlining-heuristic" -> + set Flambda2.Expert.fallback_inlining_heuristic + | "flambda2-debug-permute-every-name" -> + set Flambda2.Debug.permute_every_name + | "flambda2-debug-concrete-types-only-on-canonicals" -> + set Flambda2.Debug.concrete_types_only_on_canonicals + | _ -> false +end + +module type Optcomp_options = sig + include Main_args.Optcomp_options + include Flambda_backend_options +end + +module type Opttop_options = sig + include Main_args.Opttop_options + include Flambda_backend_options +end + +module Make_optcomp_options (F : Optcomp_options) = +struct + include Make_flambda_backend_options(F) + include Main_args.Make_optcomp_options(F) + let list = list2 @ list + let _o2 () = Flambda_backend_flags.set_o2 () + let _o3 () = Flambda_backend_flags.set_o3 () + let _classic_inlining () = Flambda_backend_flags.set_oclassic () +end + +module Make_opttop_options (F : Opttop_options) = struct + include Make_flambda_backend_options(F) + include Main_args.Make_opttop_options(F) + let list = list2 @ list + let _o2 () = Flambda_backend_flags.set_o2 () + let _o3 () = Flambda_backend_flags.set_o3 () + let _classic_inlining () = Flambda_backend_flags.set_oclassic () +end + +module Default = struct + module Optmain = struct + include Main_args.Default.Optmain + include Flambda_backend_options + end + module Opttopmain = struct + include Main_args.Default.Opttopmain + include Flambda_backend_options + end +end diff --git a/driver/flambda_backend_args.mli b/driver/flambda_backend_args.mli new file mode 100644 index 00000000000..597a25aadb9 --- /dev/null +++ b/driver/flambda_backend_args.mli @@ -0,0 +1,93 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2021 OCamlPro SAS *) +(* Copyright 2014--2021 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) +module type Flambda_backend_options = sig + val _ocamlcfg : unit -> unit + val _no_ocamlcfg : unit -> unit + val _flambda2_join_points : unit -> unit + val _no_flambda2_join_points : unit -> unit + val _flambda2_unbox_along_intra_function_control_flow : unit -> unit + val _no_flambda2_unbox_along_intra_function_control_flow : unit -> unit + val _flambda2_backend_cse_at_toplevel : unit -> unit + val _no_flambda2_backend_cse_at_toplevel : unit -> unit + val _flambda2_cse_depth : int -> unit + val _flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit + val _no_flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit + val _flambda2_expert_fallback_inlining_heuristic : unit -> unit + val _no_flambda2_expert_fallback_inlining_heuristic : unit -> unit + val _flambda2_expert_inline_effects_in_cmm : unit -> unit + val _no_flambda2_expert_inline_effects_in_cmm : unit -> unit + val _flambda2_expert_phantom_lets : unit -> unit + val _no_flambda2_expert_phantom_lets : unit -> unit + val _flambda2_expert_max_block_size_for_projections : int -> unit + val _flambda2_expert_max_unboxing_depth : int -> unit + val _flambda2_expert_can_inline_recursive_functions : unit -> unit + val _no_flambda2_expert_can_inline_recursive_functions : unit -> unit + val _flambda2_debug_permute_every_name : unit -> unit + val _no_flambda2_debug_permute_every_name : unit -> unit + val _flambda2_debug_concrete_types_only_on_canonicals : unit -> unit + val _no_flambda2_debug_concrete_types_only_on_canonicals : unit -> unit + + val _flambda2_inline_max_depth : string -> unit + val _flambda2_inline_max_rec_depth : string -> unit + val _flambda2_inline_call_cost : string -> unit + val _flambda2_inline_alloc_cost : string -> unit + val _flambda2_inline_prim_cost : string -> unit + val _flambda2_inline_branch_cost : string -> unit + val _flambda2_inline_indirect_call_cost : string -> unit + val _flambda2_inline_poly_compare_cost : string -> unit + val _flambda2_inline_small_function_size : string -> unit + val _flambda2_inline_large_function_size : string -> unit + val _flambda2_inline_threshold : string -> unit + val _flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit + val _no_flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit + + val _flambda2_inlining_report_bin : unit -> unit + + val _flambda2_unicode : unit -> unit + + val _flambda2_treat_invalid_code_as_unreachable : unit -> unit + val _no_flambda2_treat_invalid_code_as_unreachable : unit -> unit + + val _drawfexpr : unit -> unit + val _dfexpr : unit -> unit + val _dflexpect : unit -> unit + val _dclosure_offsets : unit -> unit + val _dfreshen : unit -> unit +end + +module type Optcomp_options = sig + include Main_args.Optcomp_options + include Flambda_backend_options +end + +module type Opttop_options = sig + include Main_args.Opttop_options + include Flambda_backend_options +end + +module Make_optcomp_options : Optcomp_options -> Main_args.Arg_list;; +module Make_opttop_options : Opttop_options -> Main_args.Arg_list;; + +module Default: sig + module Optmain: Optcomp_options + module Opttopmain: Opttop_options +end + +module Extra_params : sig + (** [read_param ppf pos name value] returns whether the param was handled. *) + val read_param : + Format.formatter -> Compenv.readenv_position -> string -> string -> bool +end diff --git a/driver/flambda_backend_flags.ml b/driver/flambda_backend_flags.ml new file mode 100644 index 00000000000..bbaaee60a02 --- /dev/null +++ b/driver/flambda_backend_flags.ml @@ -0,0 +1,252 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2021 OCamlPro SAS *) +(* Copyright 2014--2021 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) +let use_ocamlcfg = ref false (* -ocamlcfg *) + +module Flambda2 = struct + module Default = struct + let classic_mode = false + let join_points = false + let unbox_along_intra_function_control_flow = true + let backend_cse_at_toplevel = false + let cse_depth = 2 + let treat_invalid_code_as_unreachable = false + let unicode = true + end + + let classic_mode = ref Default.classic_mode + let join_points = ref Default.join_points + let unbox_along_intra_function_control_flow = + ref Default.unbox_along_intra_function_control_flow + let backend_cse_at_toplevel = ref Default.backend_cse_at_toplevel + let cse_depth = ref Default.cse_depth + let treat_invalid_code_as_unreachable = + ref Default.treat_invalid_code_as_unreachable + let unicode = ref Default.unicode + + module Dump = struct + let rawfexpr = ref false + let fexpr = ref false + let flexpect = ref false + let closure_offsets = ref false + let freshen = ref false + end + + module Expert = struct + module Default = struct + let code_id_and_symbol_scoping_checks = false + let fallback_inlining_heuristic = false + let inline_effects_in_cmm = false + let phantom_lets = true + let max_block_size_for_projections = None + let max_unboxing_depth = 3 + let can_inline_recursive_functions = false + end + + let code_id_and_symbol_scoping_checks = + ref Default.code_id_and_symbol_scoping_checks + let fallback_inlining_heuristic = ref Default.fallback_inlining_heuristic + let inline_effects_in_cmm = ref Default.inline_effects_in_cmm + let phantom_lets = ref Default.phantom_lets + let max_block_size_for_projections = + ref Default.max_block_size_for_projections + let max_unboxing_depth = ref Default.max_unboxing_depth + let can_inline_recursive_functions = + ref Default.can_inline_recursive_functions + end + + module Debug = struct + module Default = struct + let permute_every_name = false + let concrete_types_only_on_canonicals = false + end + + let permute_every_name = ref Default.permute_every_name + let concrete_types_only_on_canonicals = + ref Default.concrete_types_only_on_canonicals + end + + module I = Clflags.Int_arg_helper + module F = Clflags.Float_arg_helper + + module Inlining = struct + module Default = struct + let cost_divisor = 8. + + let max_depth = 1 + let max_rec_depth = 0 + + let call_cost = 5. /. cost_divisor + let alloc_cost = 7. /. cost_divisor + let prim_cost = 3. /. cost_divisor + let branch_cost = 5. /. cost_divisor + let indirect_call_cost = 4. /. cost_divisor + let poly_compare_cost = 10. /. cost_divisor + + let small_function_size = 10 + let large_function_size = 10 + + let threshold = 10. + + let speculative_inlining_only_if_arguments_useful = true + end + + let max_depth = ref (I.default Default.max_depth) + let max_rec_depth = ref (I.default Default.max_rec_depth) + + let call_cost = ref (F.default Default.call_cost) + let alloc_cost = ref (F.default Default.alloc_cost) + let prim_cost = ref (F.default Default.prim_cost) + let branch_cost = ref (F.default Default.branch_cost) + let indirect_call_cost = ref (F.default Default.indirect_call_cost) + let poly_compare_cost = ref (F.default Default.poly_compare_cost) + + let small_function_size = ref (I.default Default.small_function_size) + let large_function_size = ref (I.default Default.large_function_size) + + let threshold = ref (F.default Default.threshold) + + let speculative_inlining_only_if_arguments_useful = + ref Default.speculative_inlining_only_if_arguments_useful + + let report_bin = ref false + + type inlining_arguments = { + max_depth : int option; + max_rec_depth : int option; + call_cost : float option; + alloc_cost : float option; + prim_cost : float option; + branch_cost : float option; + indirect_call_cost : float option; + poly_compare_cost : float option; + small_function_size : int option; + large_function_size : int option; + threshold : float option; + } + + let use_inlining_arguments_set ?round (arg : inlining_arguments) = + let set_int = Clflags.set_int_arg round in + let set_float = Clflags.set_float_arg round in + set_int max_depth Default.max_depth arg.max_depth; + set_int max_rec_depth Default.max_rec_depth arg.max_rec_depth; + set_float call_cost Default.call_cost arg.call_cost; + set_float alloc_cost Default.alloc_cost arg.alloc_cost; + set_float prim_cost Default.prim_cost arg.prim_cost; + set_float branch_cost Default.branch_cost arg.branch_cost; + set_float indirect_call_cost + Default.indirect_call_cost arg.indirect_call_cost; + set_float poly_compare_cost + Default.poly_compare_cost arg.poly_compare_cost; + set_int small_function_size + Default.small_function_size arg.small_function_size; + set_int large_function_size + Default.large_function_size arg.large_function_size; + set_float threshold Default.threshold arg.threshold + + let oclassic_arguments = { + max_depth = None; + max_rec_depth = None; + call_cost = None; + alloc_cost = None; + prim_cost = None; + branch_cost = None; + indirect_call_cost = None; + poly_compare_cost = None; + (* We set the small and large function sizes to the same value here to + recover "classic mode" semantics (no speculative inlining). *) + small_function_size = Some Default.small_function_size; + large_function_size = Some Default.small_function_size; + (* [threshold] matches the current compiler's default. (The factor of + 8 in that default is accounted for by [cost_divisor], above.) *) + threshold = Some 10.; + } + + let o2_arguments = { + max_depth = Some 2; + max_rec_depth = Some 0; + call_cost = Some (2.0 *. Default.call_cost); + alloc_cost = Some (2.0 *. Default.alloc_cost); + prim_cost = Some (2.0 *. Default.prim_cost); + branch_cost = Some (2.0 *. Default.branch_cost); + indirect_call_cost = Some (2.0 *. Default.indirect_call_cost); + poly_compare_cost = Some (2.0 *. Default.poly_compare_cost); + small_function_size = Some (2 * Default.small_function_size); + large_function_size = Some (4 * Default.large_function_size); + threshold = Some 25.; + } + + let o3_arguments = { + max_depth = Some 3; + max_rec_depth = Some 0; + call_cost = Some (3.0 *. Default.call_cost); + alloc_cost = Some (3.0 *. Default.alloc_cost); + prim_cost = Some (3.0 *. Default.prim_cost); + branch_cost = Some (3.0 *. Default.branch_cost); + indirect_call_cost = Some (3.0 *. Default.indirect_call_cost); + poly_compare_cost = Some (3.0 *. Default.poly_compare_cost); + small_function_size = Some (10 * Default.small_function_size); + large_function_size = Some (50 * Default.large_function_size); + threshold = Some 100.; + } + end + + let oclassic_flags () = + classic_mode := true; + cse_depth := 2; + join_points := false; + unbox_along_intra_function_control_flow := true; + Expert.fallback_inlining_heuristic := true; + backend_cse_at_toplevel := false + + let o2_flags () = + cse_depth := 2; + join_points := false; + unbox_along_intra_function_control_flow := true; + Expert.fallback_inlining_heuristic := false; + backend_cse_at_toplevel := false + + let o3_flags () = + cse_depth := 2; + join_points := true; + unbox_along_intra_function_control_flow := true; + Expert.fallback_inlining_heuristic := false; + backend_cse_at_toplevel := false +end + +let set_oclassic () = + if Clflags.is_flambda2 () then begin + Flambda2.Inlining.use_inlining_arguments_set + Flambda2.Inlining.oclassic_arguments; + Flambda2.oclassic_flags () + end else begin + Clflags.set_oclassic (); + end + +let set_o2 () = + if Clflags.is_flambda2 () then begin + Flambda2.Inlining.use_inlining_arguments_set Flambda2.Inlining.o2_arguments; + Flambda2.o2_flags () + end else begin + Clflags.set_o2 (); + end + +let set_o3 () = + if Clflags.is_flambda2 () then begin + Flambda2.Inlining.use_inlining_arguments_set Flambda2.Inlining.o3_arguments; + Flambda2.o3_flags () + end else begin + Clflags.set_o3 (); + end diff --git a/driver/flambda_backend_flags.mli b/driver/flambda_backend_flags.mli new file mode 100644 index 00000000000..01c039c0acc --- /dev/null +++ b/driver/flambda_backend_flags.mli @@ -0,0 +1,122 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2021 OCamlPro SAS *) +(* Copyright 2014--2021 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) +(** Flambda-backend specific command line flags *) +val use_ocamlcfg : bool ref + +module Flambda2 : sig + module Default : sig + val classic_mode : bool + val join_points : bool + val unbox_along_intra_function_control_flow : bool + val backend_cse_at_toplevel : bool + val cse_depth : int + val treat_invalid_code_as_unreachable : bool + + val unicode : bool + end + + val classic_mode : bool ref + val join_points : bool ref + val unbox_along_intra_function_control_flow : bool ref + val backend_cse_at_toplevel : bool ref + val cse_depth : int ref + val treat_invalid_code_as_unreachable : bool ref + + val unicode : bool ref + + module Dump : sig + val rawfexpr : bool ref + val fexpr : bool ref + val flexpect : bool ref + val closure_offsets : bool ref + val freshen : bool ref + end + + module Expert : sig + module Default : sig + val code_id_and_symbol_scoping_checks : bool + val fallback_inlining_heuristic : bool + val inline_effects_in_cmm : bool + val phantom_lets : bool + val max_block_size_for_projections : int option + val max_unboxing_depth : int + val can_inline_recursive_functions : bool + end + + val code_id_and_symbol_scoping_checks : bool ref + val fallback_inlining_heuristic : bool ref + val inline_effects_in_cmm : bool ref + val phantom_lets : bool ref + val max_block_size_for_projections : int option ref + val max_unboxing_depth : int ref + val can_inline_recursive_functions : bool ref + end + + module Debug : sig + module Default : sig + val permute_every_name : bool + val concrete_types_only_on_canonicals : bool + end + + val permute_every_name : bool ref + val concrete_types_only_on_canonicals : bool ref + end + + module Inlining : sig + module Default : sig + val max_depth : int + val max_rec_depth : int + + val call_cost : float + val alloc_cost : float + val prim_cost : float + val branch_cost : float + val indirect_call_cost : float + val poly_compare_cost : float + + val small_function_size : int + val large_function_size : int + + val threshold : float + + val speculative_inlining_only_if_arguments_useful : bool + end + + val max_depth : Clflags.Int_arg_helper.parsed ref + val max_rec_depth : Clflags.Int_arg_helper.parsed ref + + val call_cost : Clflags.Float_arg_helper.parsed ref + val alloc_cost : Clflags.Float_arg_helper.parsed ref + val prim_cost : Clflags.Float_arg_helper.parsed ref + val branch_cost : Clflags.Float_arg_helper.parsed ref + val indirect_call_cost : Clflags.Float_arg_helper.parsed ref + val poly_compare_cost : Clflags.Float_arg_helper.parsed ref + + val small_function_size : Clflags.Int_arg_helper.parsed ref + val large_function_size : Clflags.Int_arg_helper.parsed ref + + val threshold : Clflags.Float_arg_helper.parsed ref + + val speculative_inlining_only_if_arguments_useful : bool ref + + val report_bin : bool ref + end +end + + +val set_oclassic : unit -> unit +val set_o2 : unit -> unit +val set_o3 : unit -> unit diff --git a/driver/optmaindriver.ml b/driver/optmaindriver.ml index 4eb4c02c498..f3eb2b6e271 100644 --- a/driver/optmaindriver.ml +++ b/driver/optmaindriver.ml @@ -36,7 +36,8 @@ let backend = (module Backend : Backend_intf.S) let usage = "Usage: ocamlopt \nOptions are:" -module Options = Main_args.Make_optcomp_options (Main_args.Default.Optmain) +module Options = Flambda_backend_args.Make_optcomp_options + (Flambda_backend_args.Default.Optmain) let main argv ppf ~flambda2 = native_code := true; @@ -56,6 +57,9 @@ let main argv ppf ~flambda2 = Format.pp_set_margin Format.std_formatter columns; Format.pp_set_margin Format.err_formatter columns); match + Compenv.warnings_for_discarded_params := true; + Compenv.set_extra_params + (Some Flambda_backend_args.Extra_params.read_param); Compenv.readenv ppf Before_args; Clflags.add_arguments __LOC__ (Arch.command_line_options @ Options.list); Clflags.add_arguments __LOC__ diff --git a/dune b/dune index 73312c532c1..7ba7c586a55 100644 --- a/dune +++ b/dune @@ -32,6 +32,10 @@ (copy_files# driver/optmaindriver.ml{,i}) +(copy_files# driver/flambda_backend_args.ml{,i}) + +(copy_files# driver/flambda_backend_flags.ml{,i}) + (copy_files# file_formats/cmx_format.mli) (copy_files# file_formats/linear_format.ml{,i}) @@ -247,7 +251,23 @@ ; The driver should be in here too, but is not at present. This might ; be tricky because it has a different name... ) - (libraries ocamlcommon stdlib flambda2_identifiers flambda2_cmx)) + (libraries ocamlcommon stdlib flambda_backend_common flambda2_identifiers flambda2_cmx)) + +(library + (name flambda_backend_common) + (wrapped false) + (modes byte native) + ; same flags as for ocamlcommon library + (flags ( + -nostdlib -strict-sequence -principal -absname -w +a-4-9-40-41-42-44-45-48-66 + -warn-error A -bin-annot -safe-string -strict-formats + -w -67 + ; remove -w -67 by adding the camlinternalMenhirLib hack like the Makefile + )) + (ocamlopt_flags + (:include %{project_root}/ocamlopt_flags.sexp)) + (libraries stdlib ocamlcommon) + (modules flambda_backend_args flambda_backend_flags)) (executable (name flambda_backend_main) @@ -307,6 +327,7 @@ (run %{dep:tools/merge_dot_a_files.sh} %{targets} + %{dep:flambda_backend_common.a} %{dep:middle_end/flambda2/ui/flambda2_ui.a} %{dep:middle_end/flambda2/algorithms/flambda2_algorithms.a} %{dep:middle_end/flambda2/numbers/flambda2_numbers.a} @@ -332,6 +353,7 @@ (run %{dep:tools/merge_archives.exe} %{targets} + %{dep:flambda_backend_common.cma} %{dep:middle_end/flambda2/ui/flambda2_ui.cma} %{dep:middle_end/flambda2/algorithms/flambda2_algorithms.cma} %{dep:middle_end/flambda2/numbers/flambda2_numbers.cma} @@ -357,6 +379,7 @@ (run %{dep:tools/merge_archives.exe} %{targets} + %{dep:flambda_backend_common.cmxa} %{dep:middle_end/flambda2/ui/flambda2_ui.cmxa} %{dep:middle_end/flambda2/algorithms/flambda2_algorithms.cmxa} %{dep:middle_end/flambda2/numbers/flambda2_numbers.cmxa} @@ -1237,7 +1260,18 @@ (.ocamloptcomp.objs/byte/compiler_hooks.cmt as compiler-libs/compiler_hooks.cmt) (.ocamloptcomp.objs/byte/compiler_hooks.cmti as compiler-libs/compiler_hooks.cmti) (.ocamloptcomp.objs/native/compiler_hooks.cmx as compiler-libs/compiler_hooks.cmx) - + (flambda_backend_args.mli as compiler-libs/flambda_backend_args.mli) + (.flambda_backend_common.objs/native/flambda_backend_args.cmx as compiler-libs/flambda_backend_args.cmx) + (.flambda_backend_common.objs/byte/flambda_backend_args.cmi as compiler-libs/flambda_backend_args.cmi) + (.flambda_backend_common.objs/byte/flambda_backend_args.cmo as compiler-libs/flambda_backend_args.cmo) + (.flambda_backend_common.objs/byte/flambda_backend_args.cmt as compiler-libs/flambda_backend_args.cmt) + (.flambda_backend_common.objs/byte/flambda_backend_args.cmti as compiler-libs/flambda_backend_args.cmti) + (flambda_backend_flags.mli as compiler-libs/flambda_backend_flags.mli) + (.flambda_backend_common.objs/native/flambda_backend_flags.cmx as compiler-libs/flambda_backend_flags.cmx) + (.flambda_backend_common.objs/byte/flambda_backend_flags.cmi as compiler-libs/flambda_backend_flags.cmi) + (.flambda_backend_common.objs/byte/flambda_backend_flags.cmo as compiler-libs/flambda_backend_flags.cmo) + (.flambda_backend_common.objs/byte/flambda_backend_flags.cmt as compiler-libs/flambda_backend_flags.cmt) + (.flambda_backend_common.objs/byte/flambda_backend_flags.cmti as compiler-libs/flambda_backend_flags.cmti) (printast_with_mappings.mli as compiler-libs/printast_with_mappings.mli) (.ocamloptcomp.objs/byte/printast_with_mappings.cmi as compiler-libs/printast_with_mappings.cmi) (.ocamloptcomp.objs/byte/printast_with_mappings.cmo as compiler-libs/printast_with_mappings.cmo) diff --git a/middle_end/flambda2/ui/dune b/middle_end/flambda2/ui/dune index fcab2d24202..80f602bebff 100644 --- a/middle_end/flambda2/ui/dune +++ b/middle_end/flambda2/ui/dune @@ -7,4 +7,4 @@ (:standard -principal -nostdlib)) (ocamlopt_flags (:standard -O3)) - (libraries stdlib ocamlcommon)) + (libraries stdlib ocamlcommon flambda_backend_common)) diff --git a/middle_end/flambda2/ui/flambda_features.ml b/middle_end/flambda2/ui/flambda_features.ml index a84a56bf168..6020d0d41c3 100644 --- a/middle_end/flambda2/ui/flambda_features.ml +++ b/middle_end/flambda2/ui/flambda_features.ml @@ -16,16 +16,17 @@ let flambda2_is_enabled () = Clflags.is_flambda2 () -let classic_mode () = !Clflags.Flambda2.classic_mode +let classic_mode () = !Flambda_backend_flags.Flambda2.classic_mode -let join_points () = !Clflags.Flambda2.join_points +let join_points () = !Flambda_backend_flags.Flambda2.join_points let unbox_along_intra_function_control_flow () = - !Clflags.Flambda2.unbox_along_intra_function_control_flow + !Flambda_backend_flags.Flambda2.unbox_along_intra_function_control_flow -let backend_cse_at_toplevel () = !Clflags.Flambda2.backend_cse_at_toplevel +let backend_cse_at_toplevel () = + !Flambda_backend_flags.Flambda2.backend_cse_at_toplevel -let cse_depth () = !Clflags.Flambda2.cse_depth +let cse_depth () = !Flambda_backend_flags.Flambda2.cse_depth let safe_string () = Config.safe_string @@ -38,17 +39,17 @@ let opaque () = !Clflags.opaque let float_const_prop () = !Clflags.float_const_prop let treat_invalid_code_as_unreachable () = - !Clflags.Flambda2.treat_invalid_code_as_unreachable + !Flambda_backend_flags.Flambda2.treat_invalid_code_as_unreachable let optimize_for_speed () = !Clflags.optimize_for_speed let inlining_report () = !Clflags.inlining_report -let inlining_report_bin () = !Clflags.Flambda2.Inlining.report_bin +let inlining_report_bin () = !Flambda_backend_flags.Flambda2.Inlining.report_bin let colour () = !Clflags.color -let unicode () = !Clflags.Flambda2.unicode +let unicode () = !Flambda_backend_flags.Flambda2.unicode let check_invariants () = !Clflags.flambda_invariant_checks @@ -56,19 +57,20 @@ let dump_rawflambda () = !Clflags.dump_rawflambda let dump_flambda () = !Clflags.dump_flambda -let dump_rawfexpr () = !Clflags.Flambda2.Dump.rawfexpr +let dump_rawfexpr () = !Flambda_backend_flags.Flambda2.Dump.rawfexpr -let dump_fexpr () = !Clflags.Flambda2.Dump.fexpr +let dump_fexpr () = !Flambda_backend_flags.Flambda2.Dump.fexpr -let dump_flexpect () = !Clflags.Flambda2.Dump.flexpect +let dump_flexpect () = !Flambda_backend_flags.Flambda2.Dump.flexpect -let dump_closure_offsets () = !Clflags.Flambda2.Dump.closure_offsets +let dump_closure_offsets () = + !Flambda_backend_flags.Flambda2.Dump.closure_offsets -let freshen_when_printing () = !Clflags.Flambda2.Dump.freshen +let freshen_when_printing () = !Flambda_backend_flags.Flambda2.Dump.freshen module Inlining = struct - module D = Clflags.Flambda2.Inlining.Default - module I = Clflags.Flambda2.Inlining + module D = Flambda_backend_flags.Flambda2.Inlining.Default + module I = Flambda_backend_flags.Flambda2.Inlining module IH = Clflags.Int_arg_helper module FH = Clflags.Float_arg_helper @@ -83,7 +85,8 @@ module Inlining = struct let max_rec_depth round_or_default = match round_or_default with - | Round round -> IH.get ~key:round !Clflags.Flambda2.Inlining.max_rec_depth + | Round round -> + IH.get ~key:round !Flambda_backend_flags.Flambda2.Inlining.max_rec_depth | Default -> D.max_rec_depth let call_cost round_or_default = @@ -132,32 +135,36 @@ module Inlining = struct | Default -> D.threshold let speculative_inlining_only_if_arguments_useful () = - !Clflags.Flambda2.Inlining.speculative_inlining_only_if_arguments_useful + !Flambda_backend_flags.Flambda2.Inlining + .speculative_inlining_only_if_arguments_useful end module Debug = struct - let permute_every_name () = !Clflags.Flambda2.Debug.permute_every_name + let permute_every_name () = + !Flambda_backend_flags.Flambda2.Debug.permute_every_name let concrete_types_only_on_canonicals () = - !Clflags.Flambda2.Debug.concrete_types_only_on_canonicals + !Flambda_backend_flags.Flambda2.Debug.concrete_types_only_on_canonicals end module Expert = struct let code_id_and_symbol_scoping_checks () = - !Clflags.Flambda2.Expert.code_id_and_symbol_scoping_checks + !Flambda_backend_flags.Flambda2.Expert.code_id_and_symbol_scoping_checks let fallback_inlining_heuristic () = - !Clflags.Flambda2.Expert.fallback_inlining_heuristic + !Flambda_backend_flags.Flambda2.Expert.fallback_inlining_heuristic - let inline_effects_in_cmm () = !Clflags.Flambda2.Expert.inline_effects_in_cmm + let inline_effects_in_cmm () = + !Flambda_backend_flags.Flambda2.Expert.inline_effects_in_cmm let max_block_size_for_projections () = - !Clflags.Flambda2.Expert.max_block_size_for_projections + !Flambda_backend_flags.Flambda2.Expert.max_block_size_for_projections - let phantom_lets () = !Clflags.Flambda2.Expert.phantom_lets + let phantom_lets () = !Flambda_backend_flags.Flambda2.Expert.phantom_lets - let max_unboxing_depth () = !Clflags.Flambda2.Expert.max_unboxing_depth + let max_unboxing_depth () = + !Flambda_backend_flags.Flambda2.Expert.max_unboxing_depth let can_inline_recursive_functions () = - !Clflags.Flambda2.Expert.can_inline_recursive_functions + !Flambda_backend_flags.Flambda2.Expert.can_inline_recursive_functions end diff --git a/native_toplevel/dune b/native_toplevel/dune index ad9a828f71f..7becfbf0849 100644 --- a/native_toplevel/dune +++ b/native_toplevel/dune @@ -21,6 +21,7 @@ (flags (:standard -principal -nostdlib -w -9)) (ocamlopt_flags (:include %{project_root}/ocamlopt_flags.sexp)) (libraries stdlib ocamlcommon ocamlbytecomp ocamloptcomp + flambda_backend_common flambda2_ui flambda2 dynlink_internal) (modules genprintval_native opttoploop opttopdirs opttopmain)) diff --git a/native_toplevel/opttopmain.ml b/native_toplevel/opttopmain.ml index 182e52fda47..12b04aff784 100644 --- a/native_toplevel/opttopmain.ml +++ b/native_toplevel/opttopmain.ml @@ -84,8 +84,8 @@ let wrap_expand f s = expand_position start (Array.length arr); arr -module Options = Main_args.Make_opttop_options (struct - include Main_args.Default.Opttopmain +module Options = Flambda_backend_args.Make_opttop_options (struct + include Flambda_backend_args.Default.Opttopmain let _stdin () = file_argument "" let _args = wrap_expand Arg.read_arg let _args0 = wrap_expand Arg.read_arg0 diff --git a/ocaml/boot/ocamlc b/ocaml/boot/ocamlc index cdb357901bc0e3fbcaf70925d34d2bc43f30847c..36bf9c9d210a3ba875c7f9458bf0e73f81efab91 100755 GIT binary patch delta 205199 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νF)vvkOM)z36k{Q%1P2{Ly2!9Oa=ECaVWxB(pf z)#-mUuZeo-97E`Isz&JMemY62A#~aOe_Tp@DMemHqq{&o;n=(0bM=+((Q6lNjl*XD ztwrY4TMG=4{Y~30+Wh+M|4Sp8uBT^_fh1Y?drkLy!{GP#-G65hHw*u4^J_Fw_sZ7E zxqLnD(qlg(MNj>y1!F%h#5o3*cnlQ5`^EjCk*qWX_X5r+aL0bHPqlM~e5;Oo#}IA^ zRf1)95WI}R@7&RXlYw-jjx$C(SjW9>ptI>XV>EkiyYgQKm~;207Vcqno97@M`Idp1 zmyTO%z`aZPzhIk2>@AH)zQOC8n;LGJ0r!HAD=^@GrfRV0JfT)2UuW>@pyNI;;I7rU zCVwBbxrA;(uA!$d*_!qn|C`3f*@fQ!>{dknb${i=qgsh4d+qZc*6 zZJ&Xl@vrpGWn1HZ?_AX)Sr0$XOQ}wS&cm&v?zchrD>L|2U(v!jaa?BW$Z`d}%pl!s zlOF7VA=p`py8>fk9`%FM^0CVrlmF=yYD3a-Um0-!qx>tj*4YnTaxMSczqrERncz); zIZuNPte(!3P;qJZ~4d(OPhM;fX-Tl zkF3eQwB?xyTwd%h_yqHr1SbujDCmufXIhnI6ymIQ7us^7JcK|vS-H3eCf-B9edbR( z!hD3^Jh0PH5a8F>8Lx*UUJ%Au)WKxEc*X0W zV}&H({LEAAaSPy11uEiIHGZk!kP(uHmhedq!Z_* znhAmGF)A;zEXI>IDRXf>(~f3Bd#;D(LKoGq0hKiu+S1VGf=z{eD6$z2o~83GPU#22 z)T8;$RdyT%A@2e*QkK->z-Z`00^i$~`jEi)4NQ25%js!~Y$4#qm1rT`T96RIo?UIKzocy+YWd(pVvDmfl4`z6YH9Mx4Z z8IQLnUX{IQPP}j-peM-q*B-w_{5s;-jix6Ei+#I+3oG32RJ=6+Hw$(Z%c)2cM6&) zryJ4>@#+SFoj?{%AR&S{85o2!l%?ateQ@1`36H~=i4gaRPPt1>6k03%)Cc!F98V_l zGlo(di!8dui9$Fg26Pz(EncZjf;z!f@c$XzBo};Uk}yquh#G9wY8VBV%jG4ypM;9W zamdGoZd#F#@|}!`+4CT!c1P}RKQ6S_i==uIE{9I+F8KIPG15#@y>a+86Zg+l#dzRu zwd=U6E2k$O5V!~Gf2rM9jiK>8&WE^*zf%t(!g&HO;s?B;Ftdk{h9sTrAq>E-^|Em| z^P1RGh`~$36M8~HbfZOZ!nkI+OYMapHw-o*oIL=Zjp```20KaE6k!3W_pa3#2~P+i zbyQD)f;-}Rs-!1S_T4B0RB&c#&}z-ur#WYzK=B=OF|#$zd1C89qcRbD~zO^T*2nM9EoT7nMbL8g*Dja46ku`XJ|w} zVIp45%pHn44egIJvo-zDPc3Bc)>QhG&;!p6IX%Tb`84{A!~uwHg@FvraJk(8)OsP+4iNg|O`@cM!VtVk1g9fa z3`DQ+HWd#-bC3t&`yKx7LV2@rS^D@vXkPDf0@YVheQh9id`bJ^l)mf@)5jWlaC%0Dp;rM8K( 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

=9jm9sFWj!Jk{j^QBH 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ⅆxKq3m(axO5 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 delta 221665 zcmbS!4O~=3_rJ5;*WJ6i>+&ini=bd?LYiV?Vrp7qVrpt?qEcFF!lS08CZv_76|~AR zUkb|Cvcl4?_st1SZmvI3hg z`XadDrU)qr+;A9bxv6%ekP z@m#;p+x^0&O9n=fB|sqjM4Mj%m)i!!;wajCYfSV~q0!`fBrR~XyGOqs5G)zjQ_tL_ zsKD@J9x8oUjs}zR$A%@-@}*+JZ(?`>M29WYFqYrElc!kgOCcI}`4sRj)~Y zaXsyPO`0Tnm~FO5BZbJMhqp>cL{A$1y7Z{HfxdoS`cm|weWvt<+#6M6sk*PjM-|(^ zlMUOX49e^1mMHUPdP85 zVICz^O1|z~6xFZ@d2#=c*SujKOR6#h4r)#DrF9(eE^kmjx%yT!0?5?kEhfwUQNuitLD5frRW8hn=5=@ z>PV+PKqFP}1AN>2c=`%;#KQ~@OkBSXs44sdJQ)BI3xk+|Uo4`u_W?GM3xV20MN)+1 zW}UtGavK{zu-ixyPm*`P6zeDoqZa$6W@f+r(v~ps6kYrXq8^}!tE7(Bz$?`Axu!m< zs*)CprIi0EdOW#W%98s6r5vbzAd0eAcr-d*EoI2dkQYlm)5Bw_qN^%V#z86CLeh&0 z*T%$B>8dzrv?Yx(s}D;3tdbk3@E~YDc@WyZgo+OVy=T6Hs)wW@lynF^@f`QYQNW=1(ipMAEc;mcND?cVsxFRIVf10+ux2G?P?)P}&{)|=nNKy=#54Bu zxlg6Km}i+l@FRhx4FO4O&XtllE0j@r8KWE^XQci%Nip(Y+ z%DWA)lTS!n#9B)DTpA{?11?vftWT6!PibF3dv5t$iuP_mZv8~%f!Ii5A6B?}=@l=K z_(JMX@`V&f<(~s%_7{+dP4$&1{|jkaV0m?TpnR`HMvb&UY@y;BX?*jo0155D>qxWi zLRqP_SEKe1?DJ?^er_%3KNmQ6+ zvixP3qcV){%?N8|mg@3kK?`&lef++qWVUn3L&C({RM=RK6?fFv>;oLf@6$WY z<*AMj!sz-!Ez- zs>0}rpB$|zr;CsRr3WQZO`AJGwDPK3O0=YtoJ7+*$(U}2rj@h`lgz44@?k|k1S~Dk zx?#K@Vt|{XJv@#2xD)f225$ zgwda$d9S9bo5Pdn!j1Aa+Hj+6(DI)ghPl75Tq?vdnsSpoQhZA7v*Zqx*E1@dvb%Z= zDhNbs?u?m*&o)@@o$9m6<F<4Jt}ejMqoYse+_CydIs6ZkDz0S$jhH|IpkMDC#7&nvXn~=#8{s`KfvqBIaK! zgfQ}6o8+T4Z$XKqwu=a-q6~B)XN){c%%?&9V_-=PhEZBH7$cIMBm4Dwq%Nv%@AuKk zzD=S7sa*})kpq#t@QlMF8q?;en0U&(!|+h~?S>&UZKqjd#ZsrSfGQXZ-emJrQGZnv zb!`6l61;$7$TOfWR6U)oPtzM?ZpJICy>OhjPK+n2_6kMzZGRV#_OF#@xP*>@K;9}m*~TQOF3zcrO2SRpA0 zJeSX-ZF^Rgjgx(j-@|CvkG{x2c|VCR%vCf>T@@}R{1XA(!j%NH2_?Xd;(7w^#50>l zHz8PUQ|)h9{x*z*F8Cv)!IQ}m#y_^j$gXUwd1za#r0d(t#d920Z;OSd^ZF$(^O37^ zAKBY#NyUG(jHS%-mL96QR)ZRYR2=_%#|f`!+3d! zpv)1`lKTP}#FbdyFS2nEMVa4XQT@}lLaa%A$(qE0q86H$*T58jvMJ5eQ_$)=kkP_gGuEM!#&p?oIiMux{Y8(?+SrzwrGY`aUo zAl&4AL5?bU2^y^GyBLXzCIC;->v5WSYJxmG%#u|>Wy=M6djxiI(Q8;Rvt}3?4Zlk^ zWNY1~!b$S{h_xVoG-w}%z}a80jF7lio=>GyfPTYdIZys8(?n)USOhN}{A0z#OWa=o zl#?&d!K!p3U!E5xzBWhCkmCjA-6!vD+5{a5wGuoMU44tAC6&%bJE^n4g!-p`X5CCo zd8->;NX&v#N_{|%i?|U^F1xK`5b7P>YiR5Pa=e>OlO$yG(0Og`@kQUF4be` zL}MpGq?+S0w}?TO#H;#Krs@fGVNsR_E!NLb*ko#2|c919+nW{ExI6 z=)J8PfE}aSv5HTW(V0To7brjGiQ%5y9Sr<@4}z6P`K^@>l-domwZH=dZO@~PqbaFJ zl&54K)|)NU{T^C+A~KpzjmP?Xp( zW+?xdnH_?ad6ama;c3FmmZ*3hG<4lNnj~|+Mvu=!H*!XJq~@GvO~Lh3QJ*Cu9J<%; z^_fvkd=Xrf_O~K2I#_hg-->#MH}_d0*Rf#{Fmdm~5qR(zbEp3T6M-@o0EW5tA7D7Y zGxD!T9Lj_)$U_@VEdw)@3!2RZ?sbq0g9^Zfx}~}_FO&=E|Iio{&4JKkX8-bIl?#d~%5sbj-5(Ul6PB>Cn&f^6;*W8mMU2I=$$>3F1>Ej_@N z(0Y*#-~`evV2qc0arUPx+xZe{7qr;4?v1@v@N>N6eHS^b0qbjQrQ)&SzKG?>=5B@- zEugV6at}&PRNIv-ki#R^qr84GWLu^y>P)1xW^z=ktL%0zW7W9`AoUuNO@RGWwk8UT z!FM<$s4I}Q&b4R%zQBHny!tk{LwQKE%BUwd?kv5(K>m=7Ke1zw-NGMkO&1r5t)5uQ zc)~l2rf0(ouM2D5o629r_%HCQ9@^0wrk-{$Os3#TfI?knGjY!{u0XcA9#r#+IHT7)w^ z9ES7^$O9$O&nzZ+yLAlmwA>%ZAWuIncM$z)-_vrU$fDCv%Uy8#k+1_TrLU0l#4WUO z1*jNE=T~6QD4VWbDfbnF%(*M&nPJ#1`{fx_({DwSJjDl7LaDr43^8jeyrGO=6?$6S*YH z(T_X1O52iH_}CLS%6@E14SE6W*iV%JvfP0y;qPMj9zig9Kk&i%{K5^N>jgRIAK)iY z+RJjR&K@fhu%E`h2v^XGqUc;UHYZD8M3<~)u}!^6P6~O}Xvijc_&;EsXmu36;Lm?A zq^fN&fKz{M0q^f+Fa^7DKQ@k~s?V_FnDPqmciI`*ugJ^)UR&H_^RVjKCK4cfGLP)7 zIx1c7lPI+q##RnH(y8}G8k9E}+jg7E<#zHUu(}DAMS~S}K-jrKdwL4NmXBAfSHo2d5s>t2| zOEc@8dTHjxh4Yw#`aE6)IgfSJwFq;u<%MB<&?ZiMLmuv)2jX~vV@k%*lsDv=qJX}B zLpDVrt$tJPVF^Y%s(n-LB_3iO1J$q{`@NHCz;-yg`)T8LxyKbun{PYd+728kFJNVo zXyIr|-j8smF=_`YKTP>Mr`?!2(re zRC8M8v5xh!iV-McFjfykj*6?`Or##c{$j;Da&!#yEfM9t5N<0nA(hsjqz>$Tm~+4F`v+&Y9Kvg<34KR_J4*g-(wc_5ub)o4|ogV zXH0scIBwH*;;)WSy9v#)k#SH?a(|9`ES*fi7dWuT+^=asS1tE49=CNII0-l?Yx=(d z!0=yE?LoOMo%@&%qpCs6*MHIF{!a+vZ!A7h(I@OrR`X`tCvvLwB)(_jeB?ij+|ol> zyiQ%tND-%P%70+WapmhUj_Q7-&4)32>Nvv9lnNZI8y`bIoUuXA+Fkz1N>TYyU@bZX z9s7%2{HtC3n_WEoSdboZ-pLGmiks;?^2}Vt zM&>^%PnT8HYs?oA9GXnGd@8r5(yMsi@&GKanxk^Go6jzJeddZz>N#4$hSfpY2$c8H z94?uzJ|o|KZhez|EK6`lLpm2R*SbeyrA!#1ER}7 zO|JyPLBL_0(W;fYs5s#Fua!t8+6eqIO^4 zLP6aOUQ&-^h=zOt*wo{I&BGtj+-|(+xSSNzq5+5Fk!B|NsqzaJnK<628-#7PistcB z$qBTSz)kq59j+3ImNwa?H}e&W9{|M{jG86_2dme5MUVsz5J=0xoursn4H|46Y%rNl zoPa7wu_8*T1;wYhxvQxC=U5%uGR;wrb{LBeO}D{?qZ_oWEWq{#mS;`NX0I8NqPwLyV_Yep|yYt$a*Q0x}TKC;2PcP zlX8Fg28JRL;qblwE#C>~Wsd$%9^(+bO<*zwd`QF)yC39E;zsM)tocDM#br7wtV3Vm z1zbdnc^NSE_tpUeoR#ZvVwrKqawaO@ZyaUjoRQ0Uf%N_aOVWxu(5Wt7?9oq5f*tmg zyaBoQ|13`v{cJ%jPsdS^@r%4F?Iw^HIsN= zT(TV{QqESFWENe7v!{H z>j2-E(q^^tQBD&j3uksOHBoxWV!U}KT)|F3F7=F2rot)S9HSi4@2W>+U1l*$n<>48 zn85QQ%DfP(Ob-(iO=zrvnz-AnOje#1;vREs8zouCq06Fcl$DOjGJXDNR7>)|hU-=Z zyCkV3;E>G89hEs@jwv#|d|i{sk}k?#Y-*mkSxKa-d%cob*F`xc#8mS{S0zg5c_5($ zh?c1A7TkICbW<|n*A42Xj1m7bH+NIo3NejNWGG$4bc*N>(r1_tcUN$e^ggP+URf+= znp1iJmb7fepre_J2bT!b215~F$W%1AWO7fXqnQ0y7KIO1JZ5fBrN|-XS~HORce33X z)eNWZy_Ix$QG@y_5cuB8a0jjx=66(maGeg^sLY4!grce9A+xft;u5%Ga-g5m1J029 zCPWXL18!2VYxaoU*I73!x!6hLemlfM5(AVkQ)YlvME;rQM?ZBo=c| z;C>BMs^lerz|Jk-*7Rp9C&lBW4^rM1PnZV=DcD?jl1|(TRuozN(Rt}%Z2%W$u<|`z znC3&2!6HEULlmF9)W$R=EZ*EOL@5yRGGrK3`|l{9nR%Onn~5dnFC&z&Fb81}KbM+O z#ZNeNt_s(rlJ!`Xl13|WV!5S1aXk=vG1gu(R{W(e9V=z}VM&V?j#V91&|sOb4rqWGqTm`ARs|dwv_Tsf z1ZWDMh4s;!)O-QtcsrFXP+oKFz`%dfB$CRjJX&DWyM9{wuo8|Vxs4Aii}hWoZfPIt z{)iGUcAIEyf^byG^yUi*&CHrdm1qa{R?aU{CN-adKJ&8O5@9?-{jNGUSxJSDVZOe_ z5iZ<51{E`dx-SOPX3(O=%JYcYFHsUPuLmtrdPw4Jv$#l^@4z+2hybMd9ZMVG0-loM zco(+NdiPa%&B;VXXwY66PuzUDRU_<;x1SY zDp*Wfn3cLijWw^|FTA(rqTUcwAC00_W zL3cnB{p+Cbj>^=yi5zJbtz#X14DW&{^Yu?r$CiY`?w;5{={J&@vJo=p_)HEoE^0vq z`_ZYq7nE)K@yn2DFDkEz6Xw@1D)SoSwxcEMxVnKWXcuu6FYl?wF!L9O8D{C5n1;N7 zZD+%qqeRMVifzce9hh{rR)$%(Ls=jq{te{p0rn2E;TY0MG-ynVSX#47iS~YpG&}p3 z%jv)_C0_q3NYg0#WtU<`d>u@3ZT|5f|A#7fD+Ar3S#X_pV-e_7p-k81lYkvUh0B$w zK-B_`_V2?g@vXgxe@6-LE5pS1=Kb$0FFM3Y8uX#kF@h_E19ANx1at2si7JT5Nh&;` zd=vzr)?W zq-Uy>?Z8%fLg`2~)mU*)Qo=!tsxt?%lAWZqL&^t;kZNlab{d2+QGXHE^RNYC;mG`0 zsbL(SShQaI2{d&Od*%^kdJMCJd&TO3V~Ysn#Zhe>u4vXAQMTFey%@N2h9s)kkA>E1t^*ZZ!mW@UpJL@dN$-4$h11FpL0kLTKV)7!{tub|2zg~@ z_Zo`@`9E3|H?LI^-9MmP%xkNQ=73t*NdHqWQXj@_D5z2T1xnY!>vFNX{U?NjbEZ=66?S-aH7%7>qaG*;-2Yt`%I zCdh9RIP+E_Ra~oPH1#0K)Odq&Q-vCLRy)hSAQ-ksp1>lXIRegnXLXYZr{-PM2_k|L zx?(^gX*H*!Xh1iRmEBdvF4ezOBT$F)>GX8a9c{zK(B^b?jJH{^k=S4yXO&WVAJiM( zO@*D(RrL#;0_R_+K8jcU(1wqUZmLK489_W{@N)vUwwun~h+5GZYN<#x-^fq{LL||E z>p@g2y7PLqhrl9u2NSg&L+`1;y5Z@rVtv06-eq1`Tso!pP}4;+d2dtU#5)r;b4d@i zlMpFpWhNvJFZw0ipvGc9003~&ZctOODX{1UHBq#qv|h-nxUvJ$g2F7fR&o2RLTXi!;rmszSKbvs>8@S0|(O+F7 zZlXK0)b%)Yb`Ma$#G&(<0ctmqWwyTsf{s(?o&(in95^F4k(LZp`{C62R<*)`S0URE1w)3?+M(d;Z8j0Zn25e`!$;hP zo{!*6*wVM*I{xkUK%crz?MI$bkd(c{)Hs?rOzr2rBPgz8f^iO24nu96HM8ub4p*ab z)@)%KH5{16ThIDB%qlkFa;b1QScKzbhQ_#QX2ozdNqFxHqMHzmC(% z<4LsdcGdJw4ko7r<9n%iq&m+#HJHo`#`$K#C>1vTzgYTX;R5fxL+zqZN9knHf&=yV zCdpK%NRst>!VI(h7&Qz&v6+^m{vpInX6hI*iyj}RE`~#FDZJG2>Kr)433<$_@#+?M z#WQl%7sVVi;ZF580dF{Ff;u1W@9GKa_i%g{O;n$U<9lWjL=*6Mk);O{E7 zz}y8Vf*=U*pWLK|Q~AGCkM-8_LdHKnW>Gy(;PoT$;=)SqG4kH4CR6ql%$>z{eQSPM z8B6Sp%;(+Vfw<9_uv4HP9%mvG=>pey!bI(l*q5%Is`jAevmxN^^3=&V3ABKAE+&G3< zj8km%EgkMOnv5!$hVDO2cTa=HS;5?nGRvp2_^+g$)7AH4R{fW5ujX#!J;1w!WbT-O zp1`}Vz7NwtJWDaN)c&H>ymJ=RIF8{C+>h+%E{}U0YpiR`2Odxr0av)s=4rqd(Kn0i&yF5JaxSO8cMnT z7P`AYZ7a6YvI6M7*SS7!z1#=kE6T!LjxL1knslHL>R=l+e+bbVH02?6ns}3!)v54q z2hE3K-a#8V+DT#osM$rM7pPC-tvYMv&FS0}ZIz&|1oGR_()&g~%CA>DR zP8XFF@d!+pw`l7l>U_HJ6efJ;qs;X^G;|?U+&fgf5Zr#(Uee#Yyrkn$=1Db@Zds&0 z2+#DuBIw3_)O<0xyW}w#Dev>MDL$Y#%GAU_+*?}75_Oiq>tq|%*yaa|-dO_fRGDX%s5qFdrlC)u>&Ix{6Kbq%xiB>7R_vr*cmlKTAdPqu zvVMr#6sfO?!<1hPGBS%GvFD1=>c^b1UVK6^PeFAbp^Hzc^Tbh_8vx&qnI8vOr{G<< zap1rIAS&g}z$V-Nr7&AT*P@@+!8KKuKo~sBAq@ZKBD|L$z)GorDn=?fb~%AY7n`9mAVJ#UB#<`@hqKqhV{v6tQkL1#53sG&$Rg&jLR=v zV#2n4yp*N>S!m1O>}UVYP&Af`I%j8OmqKZr=jYk9WFy4eQ>JbZf3RRof-TGIB4t0P zE{8#z|2!7aKgs(%wE870<-m1>70;_J973fxpI28jb->jR-I)qg>8>^E%??R5UtOa< zARMwvSFclBI~0|6ZG?cuvWlwM5qVCH*EKxyz&NS;aa{B{wNCBr&{ev3 z1IBvzdUccT3<4N7fPaIU<#1U5w>u1#-ru0ElidtMmC%lk#wtCrQEi6ft?G|dpTlFd zeU-zjn%{v2;cg00zRkiqM~w|id09P$6R?O^;IOoy5w8GkJV%MN?G-3?Kb?66 z+8l>m<*=Vx($I1YVWL@Cu42>I$C}*k%32lM)g7X}Id=#2JxtxFcVfDBAbpoQkS6Z~i*t5iUBa=~W?(zM zOI<}N??Ylw9#TDe#~@4a-p*k)HlkAyG2i@Ur=Hc*wRB)NSkRd+?nd9cn0Ht3%9Ku< zE79q$=9x-1XRb5R>o6gA0|Hy(92qJ*G%YA&78)y%F~X-F0WnqYKxuR*@4FEE>#6Iz z>PK=9RPxwsZzi>Q50kB@IrKfW>9_%+ogWiPtM+20?qzefDA$eepga$x=k`LI_olKB z!SCUz$SB$elOGo=_d$K%NM#=&Kl6R4u)ehU07kUpeRYT2&uWb41Pok&T!MjHwjadc zR^@(Zu&f{p8e8)QcJAY-3Og4V=E1~G`w+~{<~Dzm2QjEM9h%>YN0!?(1V2KkejjX2 z5!kz5e}p~_rHCqZHtgNvDp+H~Xl}JStj%y#XI_s8#BJ!j#8^6iNKK3w2Ur%g(2*TaX@}L0F}Wz>shWgP zPd6LJI7>PJ4q6Uc>SVl)w&}2%CGMj0hher)p!|7RQ}C zPcT}OsQ44CYLf|b1v~zev8z+@iJBx&L2E9m+~todIf51XUhJr&O3v+|aNj-+f zrUS~L!XL0p>Y0yqZq6~xlo{0ZQ#iZ#p^SMtGZ@dZ3C5=?m|)9=ulp2g+oWa$!q6VkrrSD?TAhk0P;HaryBLuRq!}mB& zU{Nfvs}<6s6PVBsac@9NtgV^gi=yu5YMf)fN-tN-%^VA$ZoA9aLO9Yyqa~jM!NYXs zb5QXJ-T8%j1lD%<8W6LPDr+!(7Flz>q*l$<9|L9<%t%TY5BjWS-P5FrWR}*d6#`cF z*e{`1mQc)BOno#C?st3%Gxu>j{|U|?1B?3puhjl}5pb~#VKj;pVl9Kdm`;BMp~eZ- z*U+2+8u7I{(6JOl_(K?m@N4xjtZA?>+3I-JXV|^m{~xTJB{oayUIU|2-^Mp0a5V(m zWNT5L{SACCq8Z;{N-n3>h#XI=bjy*jmQ+;R7@xOz0AK4^@+K_rxRYv%yaF^~AN*Jo zsN9pPCaqAm@>RIWtrSojpsQPPgTESKW_~U_zrzu%Yp}Qfj{T4&dyqIvP=to1KMUIFOKqG zz+KYpCvi1C6L0;J{}d+3M(TM=P1Iii5TEA6k=KKb{(@8LQP|)5Jq_A53v4TwWqNsJ=#ylf5cky z8kNSOL@iO@*H6sirxdpJ}SGdq` z*w5B&+&4|+_YyJNK^NZ!5J8%D)Te1|Ze)DI&iZ7qcvpk;Zkl^ejcr=dAiGkf#z|P) zi>?Rr_Md|{^%fmFrzU#e24JZ2+e7a2aQfe&vFB0xZiCYIXxVx2VlP$y4(n~{?=aBz z@$)d4?TCD4#vj;&b9?|vO9+cJ@imR`Fzh6e;N_Kc9 z`QwXRf6!8xq;WgETEr%#L#bPgG+xeHZut6)WYA#KEaTZo^Qj4w!s)&YikS15)C2@B z}(MtIdQbWdUWk(~b&!FvL3)a+ZGD z=P`#|t>rnyH+Hq0=Wz^u?l!z-dm&ZJq?93A91Ty?vdA+O!m%Sw`zlO)XO>;7b#dT& zAuz_8KX=jU1f3fRVXAuGE4_Z5HYbcS#~_(G7u&?8-L*`I_fUKaQ7P>eukH!0x%Nis8T(JJKPI(&acI2fmR+RE)30#6o<0h-Q5~BwkB|R|h60(}f|p z+?F{MFP=spY>rRKH1|l-50@@oqSW*7Z?pXl3FT*oK&mPL-u9>94f#~Ca%vc(PPq3N#`p}$eZ^0)w z@@`NxTIG}sFRPuW5XK{LiwTr=wHJPP8CH^W2jPw6d;rR-GH|&fX8>9$FT>V%>NJHL zXbpHq%=3!_ry~Nz9pEhv)B4ek&D(^7y37$; zhD8dK!;n0Eai?)5re5g?a4oeKui{mV(Bg0a#3G9KVI=e12yKUeo6MRg;9me!VI)N5 zf(2lDMro;Gd;&B^>rWNu(ch}4-I8!oZCelSjU;1w9L>O;%*pMV!G!4^0bA{A$q3}c zX@T;q!O}5WCn_2U#pHD04vqBzr}!XoteT^#av&I)x(1A?dxT#=n1OY=Vm8!l>AMbW zh+mCu^*Q{t8P8l;2-fAsoZSHSbWXCjYX7w9&g+A7zvUQH&sZqnOLk^WH&{4PZpq9W zt8Ef#1M!i8yAhs3cov}=Aq>i?8NvvJ$p{M(UP7or_=yIL*9Lm8f#ihhrZ{?OycREi z1Bgb{vpGIFcL6F7ADh_I0;gOT>E5SAWb5|OJm}wLE%gpS*wSo=z+%Z^+(r7+p+$=4 z0%?i9o0d1IQH&a)&E_M``mH@ez3v+x%)2@yZvcPQQfA0&DD64ni>U{WY=H1*I+Kex zx)&6;@WgCHnC*)vfnY} zH+p%hb~Vl=(y}9b;h*DuU~ag+!IpRlp3)2baV^iHBy=RcZIJ%#m%yJl+)PXIG-GHf zzf~N9<-rE;?`Ai6f45^W&CKVP`4qIU!Mn9n__bW?gADj4)ces!zncIMN>Ha@1vY%@ zk*vadw60*9g>4`dV0|N;?t(PcTpgA%@7ua7v8`^9Uf3XgAJUyKHMFGg zG&Xt|%8$?&fvpTqCm`Gyd}ejsJNTSP#rJ7=l`+ikX~J)^3aooK{S>_$ScJx&MIG8v(n9*U}pik`ZJYL&Mj1WPQxeoO0^u`j7(dj`5feV z8Tjh%!FVq%)bSOxPqfLXSGi96Qa%geilV|y=RgdXo^AHqpe?a(MOA1~=BXF7a#7-P zN!Si5ywQmdi)_Nmjw@4KczhF#Ryz@E=Dp0cSS7J$-7AoIPQ0hRSMqOd2;M$LhE^g7%G&}_$=j*VGE0BedP^2VA=#Nue2wZ?NLSt; znx6-uSm-7X0!tarwsnnWCA#owO-c7SWY(S&sW_lxlTgvKf?y`VHbvWPi#4~!>$!{o ztbha4QlI6H31L+;s=UtWGpkza(QYV~o|9eO%r#f*xbYqrn!sx=f0eWdO~i*JXyW7G zVAf<;Y7j?4NFfdYLU1I8CXzxEtwIy6LlgL@*J7?^rXQUt(pNI9#)c3=r)OYYSD7;I@N3nACe&EyTyYyIdORm13XAlY| zVGuZvllnxx8$h592I5P!x}Va&##mHL)Hk?sydaW{UOdCIC_C2BUZ1Hi6^?cq{du4M z1m(2R<0$if{gjOqQu~0uJlFy@jvmmXO=*rUIVkS}hPeDJ_9=2NK#x>KxcX7fgZgmP z8=LIHOVtnR+dx9|NA)PPbe^8>;F+lfQhP~s_yoLzlZD*=T$dK;cL3jiO%%i#n?X`Is7R2lyT}f1$fer79MS4<5#icgd9<+C!o@uL6OrHJZ zU*Vinaste$TB1uhfVs>>o{~6;N$c+nP|gbH5Y}>L=2$&Pl=Oubs(1=${HsAr=?ZAx zf+GEAw1)A*D?P>fD72Qg3@nnK(sP*p%5!>0yBs&tE`r55k4H<(O7VKbj-~o^bOq4g zhdWX=YEd22!pwLGGhS1}QPl|P9VQS{?K=DGwG4bXF`?m5j**_Apzi}``h zS4sb>A4@;)*Rw5A_tM-dbUJGh^yTCO`YeaeH%nVXGxWmkT(7UB3Zr8Y6-!ub;M-NP zrZDfX(*NK~ju=^-i(h~>RCHKRsfVmPs;A?u88U+L&Ib6DkM-Gqlg@KTAjB35zD&&gO&p8i7Lt|K1$t^S)6h4~-H`OKW3b=>Z-6L@c3KZoc0f7Rpb z%QyY1V}tK+BbSP-!i)MqfK^{ad#Ue2S#CJ5<96Fw^Th8uc4PmCIwtBwajSrgdi|1) zO(IKZe9KCm#ub>OC|o!X2O&!w&QfuWS>|y57$G{E#nI0Bj=!|Nm$iN;%rCZmS@Yxl z=z7gx@-j9d>gK{|F`7Atv)pIkOT*6I!sJyz#)UY@5PI>lb3awRre&H{NzN?A-8n=> zcQK)&6EV-({3vbjT1u%0H4VK@xZ3%JL!_G`&G`jiXsx~0Il&SMER21fxcE2DshN45 zom&Jh(^Wr*H7olr9rrcTozore>q1)S#x49IxidoYy7O8*0pEw!d)K!&H`6&xvD?8e z&W+AY(9pfF^F4vHNKD(=xO!);n3*JQb`q}M@!Ykh@eL*(lbfQhC2iSzod&I{z-C9m zXt3fe4H}1qvT85LJvAC=L(QS|G03p`7Ee2t^JjD!BD9K;!_Yw!oUu3u zg>BdtFY+ba0kvfmm?aZETY)#)+sE4Y#8ac67TPjkKdt zb~M_K?y#dVc9dgBW9?|19l^6^)VUlzYUVuPJZHG?3=x#OSWsfkf=8WugnL3r!9)`U z@4+(u1WKoF3^oI+jzh~-jdxgL4Y^6qgAA^~saQcSY)hoPu}JUo!oS;LN2 z!k<`^+P&o}ka_pdLupHq_Kbr{H}=PZs&V*6JU6McFUBx^e-!p7+~^8?N=h5POhe&H>`WzLntJt-t_G9hm<<(<(} zDeq%!!&QuO;dbwG=MeXl5U_jA;^od>Dug#?i}Mc$-Xp|xhbGK3d%ocu=(2{s5d*z|cvoG{w#3Y?8g6IISpjC&Sk z3XFN(Q77BTjPP=K-QSALy3d@^(Uu~`yBNRgKGXlRvmhMZEYn;o?fOuqx+@M8Ptjf5 zS^2oXb;TlTgUHNrxq7qHQ5NYMOjSR+Si^aLcJ(FC*I27^>Rd~)c-+Ef-c3+}IV`uC z4W!8>?PFEHyeU8TbPSV-yO%cTpb3Z}AI-pjRD(Dc!+6tlFCtHME9ciE4#93}l- zz1>A2m5WWFo*L$UDkLw!K2|K%40YvE&aL_$voy=)chK>fpmNW3PMCLBmbgnoDw9>& z1W1v?y*#AgX^YH~cFrPRF3nXVT!)2NVdjr?g*hnhQReJu*Io$OqWWe$&p~PKH(&x3 z+~ul}sr)h2>pj_Z*x@b>L0m?K9bK>R%AaX1-p|?NQTK$FYx?tDDJ)5~b6q_UB|Hdm zUo*{B!_zJ_uV#kpg23yDt`y2z=_)0zOsMRq9NC#fo?_i&j=JBqJdA4E;=ch*oPklx z8;4z&in*Al*-rQm))JB0Ta)y)AdYuMomAWgOK<92S9IX#TRm6=*p8p;D!AOZ34+l3 zq?Kr>{00{ef{JlWl>Mly&g@s{nuBlaKUZH;wcWLYDwevSAI`wmp18mTD>t+cgg!_# z>M5^g`X5Gb+%JUi=tVQFz!fFT%!Mxa|NFNAYtDq4b&MfWZS}NSHhLpa>!?c|$9(Q3r_QtA^{TTY{ zF~O7UWdOdSGiGLqt6cnVn7!ryiP^garS@_4b8ihH>~#}l&u7&hDiNM%UD%~DL*TZV z-sfEN@X7iAy9B)PH=;B;wZ&ynZgoPm>DlUPhYxShaV_}Y;Cl1_hHFQddwU3(I|xI) zo!8Fcl=+yJidSuL#Feuea_XsYd2p3Fp#tTWx+?1Cn&sXVQh7I3Kjb<>RnJ1x7&~1X zgu5c7w9>5H<-+SYZ<#>h3Uj|5QnttJ`nKy?hdKO!>jHShM&38pVoIs9vDec&3Z`Tw|ly!6`(pNWNUF#87o|7+f_==}e<=5^rZspoI5 zN3k;P`^|+r6MwB%__X}*uFRl6+&vMSSiS#nRq@(otx4xvx{PI+2CVzbTY&Ah9yKm7 zioX`OOSqJ5vFMz+SvFo|E?_?)#5KfOscP_Qp069&xm69^d&e8Bx)F~kK{w!(nkaf( zx8<;)i4mu>Z+ISEbCY-)8%uRAV~emdf4?FV|AWqxryKAMjc^U;xb@p0*#w8M_hsL& zi2OCqe%LR;^1IWCIbWiWqM8ENMDu8Z0nL2DHoGp`{rJ<4E?L%>1OJ@h<<>@t1H0T- z>}(~pW;J0)}0RYq^AabvCpSmt6Aou0YD z)r_*wJF&x+qbE_-N|*>mW3X-J3F0X4U>wC287Ap=i)m)Toz5IV*&l*q1)Yp?6R*B6 z#CG^)yD6M9dKm0b!fs8bS#QI}uIh`cbe?_AIP+W&qZ4n!w!hKnfMw4d-Om^tg%1vG z9)q#QnS74X7VZHeY~ke?ao8)ip7U}HKemaBbBrF?FsjZ0Fy0j$Ygn&Dk3}6l2L0mW zuijLf9gElP#u@EEg2*-cmkfoYly?d?!lLuPGA@HbfU8y1Wt8o5t?JUC)XMXvNwb@s&(8!mZ*+5YduqQ)6)I zaT_jC6?}<%2n7@1I+YH0U?n+-yK`qrpJc$O3`2Rv{rC`4=|pQPou6p%Zs@glTT#9p zy>z$Hw|V^z6rZH=%FU-}d~RvI08HL{jFC*~Jr<=%#nXm+psny~^*u(E-5kGf9ZZcy zg>jn^>G4x^>l{ei---1FkesN z`4NY7Qxc|(V}bh(ZT*57*xG7N?gxx6wBtTwj@-fmC@#gv+p}jH1vqH0o@tQoM>dOg z0_D##riQlAvOx=pSF~^n*XMzp`~`|qL_colXQCeA)|*q6oItwaP9A9 zY>MY)-~`#2Z)hQ76v)PBQtHa^|1UD;Umm>t4T(N{fne@@11}qNwPq2%=74XvmM_3W zxsDDzY~W3{hmB~_jqZHdm>@DZYXWZ9U;7B;`FhHK1mf9)yo(H+FF#_O6Zkic=p$~K zE;iz*^a)&3*}u?8!8Vr#d4mbak^JrAdZ2}l-a6geEusY#{ifie&=P~!($!0hZq_>G z#^rZhtuF6{54qMI!nMRP_}>nhrW-EcRyKs+aT+?G9P&wYFDgrIf%j#f#nqfEOPQ(v zy_8jKFG_3I4EwU3qo5=nH{#fQ_ZAuay3U9q!xVi?Z?Vyha|Z;Vug=orfy)#o{27k_ z?GrHKEQ(z?X)?N4kG!)IS_IQPfN7j<;?2G*3A9Q0pUEH8R!XKF?>Idn9j=|x94_NB zBUk35^(M4$nbFJo7zOXtupT*P#*`Qzg~@$?`}2|@;T67;6*%pAjNB`X_1+sHO)N!y zgK;B<*bAmu75B;D;N(jA1*Z(OL(!&yVgjQvOmK`i@bdNL#?c} zh9Ombieyo;f~y=z;+2NE0K%o%GDOY$9JBBEWC1O2DQ!Whzv6I)YS%)n=F>$)38#-- zd1+%`gY;VJy3R<9a3Px!-4jG45Pv}VC~C9+W4nmE!fkNTl3?DHki0C~xen{jIQkZ~ zaE05w9#rH~oAt;XMnl&lGmq{^rW9R`u9Z#+5108$2CknXGh$tp-OMK;D5p~GdZ@yv zV9}i+MK~zi0J_J0WY@|IDZ)YG2E*6t{SWP;w?c{@K_0ko^#f6((RBX?BX-{O16O7b zYLIT6zcM|q(ad>)q#WMw+UHz2_dGqn_xJws^6|RQT6^uar?uCf*Z$f)!p}``kqMq>f=9W**-)5n z2#m^1@YS!}BRph+-!j3uCU}eq?rMY)e}h0H0&vYC_XrQ0;H@TjkqOQ)!3icf!~k>r z4Q?KEkMM{I-f4oDn&78QaIy)GFu}E7*2O2{Z}5FRg45HW#00M}!4pkz9}^s9g717$ z7op&Pstz74;0Ev4Av8GO1Wz@=159uXVAdhQ&=4*~QB9Y(+uKGo`CRk*3EoT+rju~{ z$9tPQ(Ej^2;@;WQ(koe1!G zsTRPY2WVjkFolwL+WjLs>Lh#;n0fL83NC$mg|a}>`pu6uF0FJgI1Q%ixYh<-7uvbg z-T@k~3UPO;IN)CBI{|Y9{8){vjGi&k41{5Oq~4PTvoo3|?y~oSaf_V{?WIGz?9tXc zd+FLPdmD@dLf%0R&+gHC*K?2JsQ{RCGo<{j_0uO$m1?Xx>#&S9Y z!oU`~S9gQg8LDL-85CFy9`94vVh|2}PvenjAhgg#c;U9wA`k|Cy<4Mr&_J=84ls{4 zRKeOLQb-AqZ&3m}PRb|&{~hmWq5B&`XHq_U`RHB)4PGC^?mbwIqjOB*yGskq zuT{9p`8$$!!)w`2&5IwfaCr@*1bD$r>?n3-(DS>|Y3-n*-H?sW+co-H6ebsLvL22L zcP|~`0Qb|?-AMR{q`YhQPZ+vY3((vU!R0L)&ewn=9oN!;!}IL#qU5%1*2s;*c0a9W zuLEyuUTqAa`p^;fs(4HDiZysmBA@r*<)eGuXYhI*Cja4;{H7Kv&fs;LX0zAqH#D#N z4PO3Kf;UAH%3jyJIvTu2>$qqG&PT`bYa_1G{s@n@?r>-AB8m8c>bvQ>U_XA{h)vFqzQ8_+LTR{<+_KM~eYRDLNg*b2! z*;F`#skMr122dXra@mlwfQ*P-s|AbHb34Z@sd^)9c2Uv`Ignczi$nbqrt zJPkF`#G2qgR=D&0xE|K}^u_fEux`-cVG|r`f`4A_&Tyv*UTA^`nc(O;Sc|{GZ_C^n zeqw@OGQk-pxU~sxV1hq?$({dt7u-tZ7uI`R2px_y!3`;SpWQ$E{iRyz7a2-_3UJ06 zOftctCivPCclv`Sc!LR^0hnvN%z~%PTnb1r5#3ts&UB**?r(x`zUWT>g$bTuf)fRd z+TsN8-=#(F3_do&6HKtf1n*nu9)5xeZfkrxcZ#tb==@JpVpUQ z`0yot&dwLO!)|XIC_k$a+EEZL9ryvoe}Wb?F3UZ-`vG%w=L|f*&D3zRA^2?IjJ4a> z1UEOq_olhiU({etCnLTFdrSnIOmLP79%+Kxm|(>O|MZM|0=^QkK__o85i9`AB_SDd z-Q7gf%mm+=>K@4j6a29WemmQQSYd)Enc!X~INSu^oZ_B}iXo8UMTd^dx`Ln*mN zCPxLL9^PbvpQZROp||b_npcTdYP6THm?=a}F$6WqlFH>rnPvdU`k&sg^e z&zsxHI1mn7MQ{gqUQa>7vt2 zGtm5yM!OE$LtD>E)50eh{JeDBvj*IIRKuz0O41>FSpTVyxu;@)32p(HQ}w)o!>^+> z+zbOQkFpM7MPab+^)$RV*le8yP6HeKjIw=vq&xgBY)YZ23i!KTnpRT5OynY#yDRz z!Ko%V)&&1G%su>36TGn=*5-q=>JcJsy-aWu6a3R7?hzE2;E^Uc&II3l*cG0)>G5~C z4xz#8Oz?CQ+|vYy(4nufAY!Mh?BFhaIppzaYR67F^@sCl{~=mIFF--FFs#rE98QCy zgEc=F4kMWc8NeAUAwj3vVyLLQgXqI@j6JgkY2mjS{9@=bq78g{pysv1;N_%{!&oj! z7@&FWGI;&g-#yk%Cip3uco?HJmDaFhqcV1$psR3Nmp`QO>toCE6Xn4Ij+>|rYV z)*cq0p5%`1Yl6c}u$80=dzjKI(LGoj>I!ti^F7_sX@EH)AL1d%p#zNG*4-VQPnUt78eu|LcXKD(2bdGESC5z*#1lGhzX8`w$DJ|YPIqKq{%kHNhY|t&Lc`sEh~esqv`H(dnj(n zhMcg6ON;S?ysX%rl5MJUZUg%pja^$1|S8$us3xQ40#T4Kp|8rV;R zsm*C%AEUtx)&$YB3@)KH0C7%lFFPO5Id%q<WA;8y&FfEt*CvOC`^$if)Nw{Z-a^Ueu(%l^Y2@72SSq6R zbO3Cyjj})z*vhVv+%|B0o7SI0j{JNzue%1X^^G*#Jp--{9#TWC&7oR2)|1}U_y>D4 z>$Qf|?FV~kcK?R%657%Pdzj!#FL(M96THj>XPDrg?r?U4M(&6PU)bCu$Tz`hCb+W+ zzUS#4zSsn>aD$_9?#m5Ew`yJKs$v_<0lD-vo!6;G0%=euqr(+kjap zo`z7seXK!_K|1zWG|w42j@8u!9XHc}v+1~52Hf@r?h!Acsg;lq8!d$sxZ>Vj5$!xf zh>okPQ}fHP(nZ`z-?`wt$YlfGggwdpt`%P(%a z2Y&-FM@xoqcxL1$u=Lcu)*HM&{6ix*Ml%sOV~Ub=niYm{9+V4~3Ge-`1z&0K>aXMS z47eX|Xmt4o+-y1m78wD$SAoGRuSO$ZZNLTVxHk>B%4&`7Ed!2#Gp2q5^|=7;u3o1} z7wpXj`(M|BbTR}vdQHO(HQ<&5XJj)`r+ME%6GW#jU^D%bt6FdsUR?Aa>Le_JOG)_| z<&{l)9X5cu5 zAM1Xc!el!9Gg`tAm+9A^?V)X!T-Hd-48aHLxK9kY+n4CRi|FtdQvZt>o438B1>2>^ z@P#3Us$Voe7moGJb{+Snf#p=%dePoC`|w5gl7H0%&oIG{0Om|RYG8HqXAO7QfGYyd zSflez@M9X>sBXFR0d>qTP*pAXa5LYK=!IVter!U5Pd77Oocw0I8g(doj)j7MwO3~+ zU%2aLxb1$xe6_+=^U;9$P_qjT0PHd;$Ax19%qQ|){(t^-SJ*Uk!M_0JYdXnW5uc_To6k zVLHy3+`cdj4Hn&WFSf?v%1JvN7hu3e>NvJC?4t9he6UFL(!GKVUbW}7!eC3fF7hin zj*XwXaFyrp()9w%7&Ymt9Y#!s(D3WHS};^x4Nxnt+rvF9DeBc5_U>MR{5T0$G*`as zFnTH_)Z&2t!<6+8?pvfx4~JocT6-RjQYHUw|L$LdJiZeKG}>TMaZW~0>9Eij*@9|^HwCL*$+HCH6Nc!CAityalFYhZbq!okWd z*hG-~;wR!(lP%Kk9+pvRC!2KLGvqO_<7SbFAOE>ZX|z_HDUGBl{3_=GUuj=m(X;>^ z&sO=qNgCmTLzqotz0)qWwcxR7+{S`|lpXy3m@G}8gLb^L_nbo-i5FfDJEZm&%j5MV zDoA=*@iYKm#iF=Bo8WeupES+`k)8{b_=H>T`*^Xj;sA_E$c?3bb*bPwtt(B6zhQ?} zw8qj7z9*RwA%)SNRwx?2E9FV?K27}9xe?MH4}oY%xy__7AC_#bB*#QaZN-z3u!$$^ z#=>d9jY0D+iju~HtEHLLotZb2`2N(qX2|O$+NwFapAs#Q32;PAJ`^>}flDpXFbI1| zUBtdPOIp%g>V*|e;XKI>9vo>QCE)~TQ41*uIo{g>h4d6IPYTG=67fDw`7H&Me+kA7 zy3(nM771Z0I}XA)UrB!5J3QU{b*n65?OXfAzE#mN25?gvnZYB9EqRc_T6~vU!7}`Tl zE2)bz4N0n#M^Qn!Wt=SaTr24f3(oH4wvpz*tj3)-(mj~bxYJhp61Fowj|K9Sn%qtr zZLvJ3i_5!sm}<{`QWp!}PN-=w4dtxFNgebi5j6nWj5`Kf6?t*eX9zqzUMjFg%|QG~ zNZ2hsfinT~9gj8magCRgPe*An$n!f&%d84F-#DOM`I)7*>n!DwlCLGOH&FcRh#$8qexZ2?<#&^oK~+U`m)a^E#}EYOo`Wf)XiRshy-yvQEHA(^ z@{aD3>*Y(!KmK@$vb&U{{0G6fHaRGl?HtPLA^D5!22<(@*zzyzAu6<_2V`w7MJ2dI z2$%0Z#7(Z0o)DUO|AJ4DykS2=mz=BwB$KVkvufaYvN>ML3UaXYlqEn|atyS1<*+9t zJojJNa&#}a;q!V*v&1u^U@OY>Nw}Q%*%Xl|u^qA0M6|Hkl%FU)>9YV4v*#(wN^_CF(vHU7h?S~ecl(+wi541f^8nP>nDxJ z({^jvSw+eKX)G1ahca1BM}|sGseB;1x?6cLqh8ow$^;e^ld*6#Z-6un?{5?hM=U)C zfkqxE!6*=W!$Rgj^oZ-~Jk#--T~>cE+doJeX??|qdUnJ6Qn7=jL3q+`_F$-y4HPj1 z(zKCMhe!kQphnaqpw1f%@hKf5#o_(B8pan=!cb5ZQPxl-7SGq!Q58ReuC&JhPDYB< z5l`5GFpSbuQ1fpZ$iU2-E~KFH-y$Vd8cJ~^(Aj0CO8sb^{?&@AQ>Adr7AkvKg1PvI z`4Zwt5LG-Z#q!&kp0xa7G`?+|(rC)N27~B%{m`7YbAYipjE_W3=GWkjX-mQyRm~&P zb-b)mHB9P2T}DfIUT!$pf`Q#7%4LvZv#*qb;K_ zJlIbqqovO1FK|aRh@ec>k{JXlW+e38+Tki90xbDJ2cn`3bE_ zleSwvrQ|Wvla|joR9mVT16li=BZ{UekE5o(ppB2CroI&ESUVP&gPe`&d?Ro;hz8Xv zz42BCvVp=)hxgZ%kq$X5XQu;Iq$5j*sVW^=`i7D-(0hE#-1}N87>XhL6H*U6bs=(@ z{)9A+&#ga-gj7EvEyoKNuH3_n{gYCf^_VVd@;K=Vp18O(4yAjXQlCQCbApPV0(6q0 zAhJJ=9G;@or=@5-U?EV;pGMO;1A`BsI;$p+M;>rb`uz!LnLkk1iD=3{(x{1244ziV zod}vLcB1LlM9ANHYBvdm^b_SzlA>)F&_E@MpM>|)A}2#ct9||KbYYUz-1f7Z&mg?5 zFm*CIr(bB}WVH25R5ckjbD8>2L2>*_Tc;q>-{{a3w7e_Sbt+PHm3B@=60XtrQ<10Z z)Z!T!SE#0%X=pxYpFvMsLxIy!A2%ptnzYjLJNsngErhI0AaBxvOsN3RAf#qN-2S4& zSx^tR$TD3TO>sVc%_;6#ej@8xR7ovkC&SAARCfNMQ_~UMZLPSIo`bO6p*7DTtuV9j zD6%O(k1+Qr>Uj|3aO4X*%8KhfyPuaP(dxMn{n#03ogSJmzU^K-LiKD!+h$0Uu)-xm z)#1GwQMZ}W(>@K+$FWvbDEU9&x__p$1UAqza!`k9v!o>YEE}A6%tCF#>>kIvXErN^ z+0r_zFIdl(Uc{z+{!1Y5_aAABRT8-SDJfqHU;7+dgQJd@Hw~Ht3BW64^TDQcj?@oU zyM5+L%Y2mjG_Y6kT!@~Z&J>yxc6fmB7va{<2Txc{n~x&R`~XjwRt!MP-!UH=B(R>K zF@H|REs8POD8pd-JR7wWLP`!a)SgACgIPH!V!T6_13ADeKyM({q+FC<1g+0Sh$fs> zUZHRC0@y@qP!zrY0{og$!~#@nG$}7aCL)_d^j0rL8C_T)O|Y~OX`u9lQVOohmn?+P z#jq1YrK}EP7fG!sX&Ju8EkXiXYh_ch2nq@BCBFzgfv1vRM1zPWWeEa>x5j(H)dfQR))3^LUC{i)sO>Or>i$g-cNU z_j9?%(3GV}N#06eQz6wl06y@bN*%+U>`^n6#y;$=|& zUFqC1Xt!=m+LUg|c^_0WnreFYMcKxHe?!f_FvOJ1N78HIPA zUPeBW=+w(7;$(ViB{WeSr@e3`O1GC*x)2>a)s%-K?oC;FDB?cs;9aRSDUzx$DKg9| z3PfcpvR3^c{1-|1FEbxy-cKvQv-wgEY%Gphg?I+gAIC0NMB!(4Kx<2A_JBm6xX6J_{BQ}J2^9j<-f=I=+D z4PF%@i2n#$O6YcCizIIq)^0K_wozyaex!Vdr!z9wqx*l1QeQy{RgA;i7O}5jk}+BZ z0ygl{3?AjLLWPfEL{plw0fKRIz9jqb(=IGAkJoujz%)}7cuF_)x>q(xBgy+skf&^v zdfPG(vs_Si9wYCKNXZiv@tX9pi_G=R)=P83%cp)n0 zX_{Jy;Nz)X5u_RRdyAy;)`^YizVCw?Q{3yQhe=wHoJc$tU-&vIV=_g(0Xdt(__o;d z-S`F+_cL_(4RmJH*bk$zDoHM=c6t_6=7v*VHyGPUe^Z)Z&1^(>yZE)ll&R)T1bvnr zj8$HR*i^m+#V{Rj3t^P=96N0($Irvl`g|jrKhfSs^Pj;U7$j!O zc+ENEZK;EGHrRLbdl2u<0fha!w=p=G!{1E{Dl=hQp}QYHmWfs{mom1oIB!OE%%h_1 zNQArv#F$rXN5pxXF$l~y;4z1&!{^rHsc<_+MuK`lJr)a=_0)?D_!kZM#RmKm1AeIi z|B{9;oQg*_J+~p*%P4*uih4Px{z>Z!l+1TBZ0>B6f~_w%q9KWX%_w|3MsO>c4zIQS z8UP!cDR_u1a~_^n%cI=w=tc9HYiHXkNRdOl7-=nNL`|LzX-Sbgq;Tu%dLWqQ;yo-3 zc$Hl!&C>3+V9I>T1MjINq2$+UMOc9_!eU7es@Wk;w-O}h1QM0A6O+Pqh{H}9Rd`u0 z_D2siaDMZr0zMcNU*3t%`xRzA(E2J8zsuP~ox4lg;bGaJw%#oTd16GI{DE`^{da^a z4b+WgM5$8yg2?+Zvr*Cey+-*5APy-9(MVGENPl3k?1mUgpY26tg>-H&itQ9hA7b2q zb(#;QU+A;1p=Z*+!gDm~doeOD{S<@3ynWJ1_~(BlP1fyOSUyHM<_y41-`o4quwG~W z_jD4Z?9NBfM&0Q7kENluZdeG$=3l z#I&9NSOvUExuw!3aE>ZNRlP;YWtbMjj`B%VKxP@F@@+R%=}G9<;xcqDn>l4+AABOo zR%Htq^W2+%+LScvGo*Se&Q@ctwvCi8QE2I(OS6>i|3-=QZ)t%!Xx+=JnKv3Pr2St& z%VLPnEOx43anGXcG6%;JHP#~n-!bEn!;X}C-XDfe+_}bei9)e|jSS$$y#tcJ4?m2- zgP{_t`dWHN*=^>8hen~y%c-gyUEI5rd>EZSW(bE7l(Wl0-)ArkGX=&{@nMLts(qL9 z_a5!rj;hC;p@vC6r1%OHN!&N6F*XDgOIhDw@XDWf`U0QOb!%K0-0l2E3Q~Ceu^E0` zz)aW~=1QfeB8)Fn;5D>w(PYcXlA~aP@GVMjpNQEf4Iwz4`*C~?ksr{~Q~fQ{_K}{p z3VeU8QFG_O)TNxpM5XM%3M98eiV@L9)u$l0{&Pe9XE%{@iaUbgHz)Z%%IFn{?(5|c zZ}qt&QlvHT6Ek;Fab?S_X#U?}k%2>D@#GkU@>41~rssEqhWV@>(@n#CUXO{@FkjST z?$a<|G6vR1k3*8>!RV_}3ekhg^I>rcS7cpL;PqgR^iVwpPu4N!t9ndl+WS4q^J{?- z2A%lX5Ln_l4!Uy2ifFu1nO%>gbserJV;JRmA=J|$o)`x!Zpjsm=$j`Z8dKg0DCBZV-DZPX{NzBq zfS!X_P0yad2;m4>PGW3z)X=1(F_AO2c{FfguFeCCv$3ZT`7xLGm{W-Sdjo_{w+!n( z`%g*U5o|GtciwvA7mc4$8^9prDJe*Q4n6rzD_-JW2mMxf0$Q-5GnQ)$+cigzaXQ!& z$*#HX2&1_%cpWP83AEH%r;&tm%0G>{6Y_tiKL2uJ04%vKvU_5ZnRN!Ok&^(8h+?gp z1ylKX>yYcD9w5pqLwUl`+8Hr7yK@FrrkA1M(c>&+{{*W+ETYZzv}2k&@hm36r>NvC zMu5<{bs?f@?l};j)`%;1SpwAJbJ89*Vl=T5D-JO8x4SVO&90JQ+MmDMQsjB*J&`nT zBn^YnN~rh9qjKTF@jkuFO6 z;LQ64L&@rknDX3E@jaAdhG90W(U6_%W_NdS8rcO!hoM$gHbT})kvSh zS#v|$B&dRDV~8Vct(PN~a(>6W0Cw(w7ZE@82PPYMj^+<(flhd}lLOBf+>|~OFwQXF zkNTFcqb?l((?bpuo*S+7e8bjIvi}IFvH>Cdf)4Ctc26w>EK#@%PE*d$pV@uJGgEvii1Vt zb44Jd{6ta|f5%uLv-};sM8@&pPB`SSILrZa&lDKoV5?wb;OM?l_7Ld*00)cW)c_H7 zpFlyhLUXBF33?Vc=~D;HY?b{6}B;0kSHM{ z`|C9)DpboysNng1sL03qFp=`wFi~uS!$l1F;d)9j)C_`7scGWSnxCDHGz-wM{~!IaFSa%z7&PgmNU)Oy<2IyZ>6WXu@HaCYvrf}byjN~ z9Y|&Oq(ri}aSRfn1EGpKQ0aBig5GcA&=dq-J?f|_h+sT@gw>p!whri0^=4Z~cUEli z?N9@7pTEx`O#Rlzi)uP>zeBTb=c&b#7vsRYB8||l;@UV`iTFIV_&PW`B2_m#h?<|* zQOH3}N5?WC=XDZo>T)L`$WtG1EYkwQKqEv+?(A5t!?}M0-rw2Ln`@+tqXXB-nDveO zQbmxXCB3$~u@_aYL&vkDtK%5Fa=US>QI+nFcfHY<6}=gR<@R4O=12;KWy|Vbj$qpv z41*FWsJtT2~ELMs~>nWgq~y*`l}!L z8}D?z==jWHt!zXNr>!v!TH@$|U`v-cI!jgH&f9TeaPgS#3D~5}IeE+@o$?NV6e95fzpU?eSbG?#ctmJdce=D0vv%N#-0 zpBvH3FFTsij%5yS>qU%10Qhu+KaV4Sp{iw$wt*aMEI=N{@_vsP#!}RB$Iv=2-V&N;?KYIJ@Md#~Zd9eNNIUhqnbLj`JOT>EwF6*;=^DVaK8`Be3Y3zseED zR(=_}r9rg}buK6!i#2KvoJO^)P}6BNs=(3KmWECSX7XQc;lFlN1l|Bz;DuecP0aTI zI=9jS1o%g*y|es%Tl=n_g)OPi3eg_h(YZn-Tu{fY2E{#%!p;Nz29&?e;qSvG#F?~E zQKBm8e{R$n^3-Vti^z&4$eivGglll>KkZ1wb|Ca*Xi z2id$=9OG>^c*C&dR4+W~^NOPog17NiM`tnQYmNxxj-K$oyumTn z+R&ETuw`iRU^X`3)_EL(FyP|_?fZ@fy2 z?=UP_kMVG}C;1_aCW4C`cAF%!7C*%+h?0sNvuqB)Sk(?{f>~=3l(>^p+arI4mJlq* z9zlc7e9PuVkH6#aQX^kSQCMWP>@*Bn1? zEPM)y_t;NS{7#2I7P&bXigwISDA7>0Xs6?zCuZkGyV1pbNmaWYG1kjB#j~<%AFul%vyW_ceXw{A|T-DefB*lvNgDZ0;! z0cS7o=6EqBz=u=Er@A5wq6Xnei`CP+KtAkkX=j zfqV9Aur+gig+%igrvty1__0FZqWq0Ee(soKJ%>f7GtENP zj$b(NT1;~q^_5G0gJ{QBkcx6D`wD%paKfn7*XVW1DfcQ87#D?UO^%M3iJ5xgK7Xv& zKMwU;{k3Bq$S`xm?(G~b6cv{XF&Bv2<&J|IKjGRGZtgf{{)CQ}{MoU@P(OAAf5gsyKX8a(A~!v4hVg|c0(`~iKCMxRY7HPHKW zFE|Q?cI~D{{fyBAJTtaqLK*jmBYf@Suv6XT7Yt6tsz_7nv0TRUdu7dVmf#l%x4?#} z@+AjeOA$bjYX22k15k4nVqC74{pP@N78l3`GtCW(R^zTYN}Bxo&ZH{;vKvBEwC_dbJ~GOzJt1&t9^?CDn!+2grb^y;2U_ph$=|0ys2Pw-`C5t zAnqi@`D$aiAPqMUrg%B~fh0d)HVh5aN-rlYy&Fdi@Ul>X}DsYZG`x3FF1Lq5(h ztF?_Uy>`E)jVjxn-abBUksIz_%hjkrXLk?YF`DEIQ)dM`hgr}wl#GYI!Xxx}^(w@f zWD(Weo#NS?@_kem=4>jp*QK9zQyj&IgT8ndrsP+?wBjA`2VsJ^ILs;YLv&1izaAa; z@ZCw6W$vK)bc7Fg=**`R^J$O0q6|33I6G^!T?}z{6>+N7;m!aXRy&V0bGBbQo=0?Z zomgLP=8VL~QC2hOSZo}@Z<$Ymo`Q198i=7lUTZ8%)hR4r|s+X1RO+dAK6bVfT+!65T}&M)Ddy3g4e zn@~!72v0J{j_#v9%Hl!p1|GpS)LZS5%iatnQfxmf&M#Iv(SgS~!x4ILoU^^Pk1zG? zBRzuR+o!?^rO6x!FhuHMjsyS(tKV+qY^A8W70pQ4^z~NLC z>VcE>+8w~yEvqB%n~Ck3NgXIt!X zi5N?}IeSui5c$v#OIF&y`17{4%YTf^ zpF(;$!+ajE0~2~dcE-9u^++#gLyIMyPW5&+6+@RclusDZ$bFo_IGf05am14Qs7U-+ zws`#XggT}Vs@3u&t?29g9eZK9{hV)fdJ23wbx-T=c-@_#yAySHlI~81+o&MQI2Yn*uexHS^IeaS zIbg`?o2$F?bay_DN`ne2C*^mWzgnJ#f(L-U8e`PQp@v=hM#HJV;Vfphx_7MeuZFZ` z4c-bDcH!k-Fs@$xAWmymj)#uGQ9+@flYR}t66i!{HSO61(wqWJ0AeROODzl3tCO4^ ztl0C5nhG7XNRabG4eH3L&a)O9H}eLR{G>7CKWTmYLu>nK)Gl z)iI7NMb4Qa`S6*j`^51|wEjI#%`b9(+z@1`TT%7nRB4;@HxC@XtKEsVfG4uzAj{P_ zG_2U`3+1Kv)&iwONXWsft~x>IzDO=!;^ zWO|n<1j;Fmlxg8!Xy13Zbz!^ZBlh z50bwsz+O;c_g?#{v!Cr42qemVqhSzsqG}H7ZRR-lQ*BB99J8YRpF$6x;PBCu_8Gd* zll)D*pui2UA|eQVYeO7+&ifog?$erFr5(W#t?&yp^fOG>%X-$A=G$z|u>6LJIVSqq z=;nm~4_aMv=f|f4)XFcMU93JoB3V4Gg_Y_VSSRRm2&{2Z@sP7SPAVQaelejh0cJV6ELs;8 zf9)Kn{A!~4O$4Qm-|C`yt&SE$$#UrL>$+B`F2^*Wnj1(WmbbDFLv!EY(tR@icbz5A zk6$o*0h9Hh?|20>_Rs_zT4?Vc@<7r&a%@FX(3H0_=ppa zdE$N-`u3C~&W;u4ea1R9$S6B;`eZI;4pUgEQCGY;?+-@}S&=H-SmEHMinrQBiPI_iwHd4oz9 zjLPF-SWU-Csgd71_gip^^4xLfKr1A8*AZK&6;tt-6KtWBege7073~vHV1ATwMvkVF zC!j?9DeD(jX3ybpm3$J20BUj4+0=^Z-OJB5X-QK~LPIvz(olF3X$ayHOT?m6@+l1O zL%1xletZe%D@$XrNVegWGc6(%i83mUFu<<+QsG*OXTFQ(6`}D>IgOSYS%q@n*>u{JBwY7JPV1y z3JA&xBjg{Pt*kBW)MQ6cC>3|WeEQN4nE1p{?R8W`>7)?c{P_V#VzYh}%L7$MF(uE* z3qs^SqF`EcDc~vJzryhn;Ezx*ZCHGI;cTX;#kh8;#nMWY8jc@Sq4~FCCmK7#kS?4* zs6xpX=W|zB<&3r9Oy+sWW!`izyChBy=&dMD1^$c$^XudbNCZqavC~0wI%-ZQtt26; z0R>5;?bOc#DJi^w`g}l>cAS$!GyfPH2Gtjw9RoX?3akrYoW^?E78c)C_i{DzZaVC0 z07ipCq9ZRl zgRMz+di-=)6U?0jF7qM=QxB2?hL}5}uyJPLGjy|QzaS?#!ubm($bGoX!|;L@TIG}% zy}j37f{K5L=3RoY^rfwrpeFj!kxQ6w^k*kp^uq%v{xTLc2G(N+X_&$Fm?0WwC}VJV zjfW_O@lXQQmz|ezigV*Nlsaa(SJ3oi1(L@*FVy=wMs0a#6nQlU0+rczoay=va_|V3 zdRt6&g)>}p9@U%?8mp1aYAhzXHCM3U@EEsA=$g$~&o91;`SWNUk%5M3zXr{e#&V41 zh1Jj`Y1g2l$7p;WXFkysITJ0S@*3o5tR_d1*P-juIZDi9_BtbJ)^%{frMm0RzBsfA z`CedoQk_@LbMSGrw8puK0`4L+nDco1@Q|4`_|qIdOr3DU`JPwcc+@P z7W^i%)0EcLVn#TL%4$*ilc}~AUDXsrAnr4!x?ntNjJ4pTzn$K;XMhW%BY!swE06=Q zWd67FGut%a?3BgLE9D>bl9_7OKhB0$TNdLBa+?HMpM~r^>TE){$D#FQT5U3w-$741 zUCXj4r`Wq_q|f1Kt{kMM-*pbMSSr+=_nbpLa0~8^Rc?=2Z}L{^FRp_3$YvMadJUe9=|8O&{YO%lnTASQYki-DR zW4UPjxU>W*_UvVU8;9^AWi|4ZXA_Lq+vKKrP-3r5j<&2)&)MWh_~GjKhVrLc^00R5 zEhkx#gw#gzbU0O${rts6QZ2FS?MCu)3-Gz){rqWzU6%2^(=LCEnJu^=cl_X3o+J+f z{+uL_g_GbwoU3SzL+%UbEr&b;&XJY=(Q2eqUc$`oJd3O+twKL`P?jeE5wFN$NZ(*Z z-frcYyuXYU(L}Pe59z$NrNw(~l!skRG4qC^&Ey2iBYkG0syOFZq79T6V-0O$V|ly> zX2nNBWEIZRP_QVc1EDgO##Ns%IS3J}QQ`7XAE2{Z$T6CO<;E8BFeIU7W@5y(?P*Tpbao*Zu?WwilM);E6s3R5%&Hmc5dXB)XYQgyiv;`iZt z;cDwcsn2)?6_n;-MePQ9&x(f{d7>Vs#>(BrWZFSdQBk;*5Gywqsqmt#Sh+Jt(oPg& zyLh=fz1L0-$BMy`b|Omz9CSu|`Aw-V7R1y7yCI_Zg?C(>d>gsP_joJjyIC7?UvEnX zc?z;E{PTPwTG1tbZ8ozbn6FY-bd<02%ynKDM1nWXxuz?B#R1p%y2$%QMBG+2$(z?z z9<2)#MaC&zD6exMcBMXW_)$s;1|gMOg0PePfrWEgGX-00aSz~f)sk-VXRc6rtD8pB zlJ0Vv&z!niP5vVar$W0cIBDGt3$fo~C8sA&ZOx_l9uTrb%I_g}@R?Ufez=Fc-DiFs zn42JL3%}X)euCUrtO4hcr6-Ccn{s<%YcZ`S+DDG~_ThW&tUhuX48u)HK~daOPUo?F zqTD`|*PC-d!R>B1etc|2YhnQ(!FeDuj&jO)6y=mYSoUo3qRwWqUch`7kfUXBcdb3) zY|^n%jCnxs<2oxiku1@^kmtej+(4F2&JIsM!A4{$8@KIb|JK>M7qfD)bFmOI27i_} z+^HTSTM|vPm%XwIY~)HV_8NMQ-NGgD^j6~v*|!8 z#0JYg55q5;o_|;%-+Ea74pLtA2*f+@5jh2tkMDu3q6Dt@aCt7MIgu?~iR7{7|4bxV z9>V>3`BAVE<>xwzXi35A@Oh8Qy}?--0nOm%2)%79$lc#`Z3oN(ibu%9vbpxTnBdec zTdn}Y2)_)NX}B7=mRADc`^cAvaNH&?P;FO8mcaibl(m|BDjHFj|r(w{rJUSWtO9>dG8$t&TzBV#gwLtR-CdLOpR@ zvMyYaj$_^6!o5ye2%qqV?!{ZqF0VIr9B&}HaBu0j?grf3R0bA!%22D01cTQW9oN%< z+e&xF$iHK|z2t|xvk}0 z_1t7Iu)T*!a57?rm%o}hRnD{gS4F&!y9Tm9BFfJ~eZO$du@(Mb%UOG!N*$ zEIC-T%?6Y!A)JVLvff(D*87VTy5wE!3^RuL;okJKVwjX)1%m;3jj?y}+_R!k_C71O z7ehE#qhuX=e_h%v(?#ww24kevYP#s15dvex>2fUMKC(Cn?5=rWul|oPjJX0ai%owC z;cA8@PoOCdn}_LpnO?Mc#nqvIKkPJ>=hP-Uarsc z7-y(7?|C$-J+$+Ac{^4lN6mnyLJwHgEJ0h1{ssBgn*4Z-F{BfILjyxVIy*vjAE~OT8MY=QQ%9Gs^R7P3zpy{jU%CQmLzi$h<;Yk|-U5M$+>OylX%1qq_Zo@ssP!$H(#Tx- zP0QEXkgoI@C4l4`nC!;BfI=_Vu<0+zvwRNg2~Jb1UO<p)qQLH>J4@uzLXf(tW0uO8 zh?UdM!&bqIx8O?yf{MPsoTL|8 zJc6loy8>kLxQZF%t2hnEd#~65UMru)qVmV}G^)Y8sAjz?|Dv7D z=tgBHa1c9lqZ|;(qfNd!!aWA7DK4`_TE9^abMtZ)XCfWiD8B)2Q(u!`W!3Ieh?bd1 zRfQ;zM7mRmQRfLH$xazXkc5=i{cv=s2z@U+%eFwB=j`(G+?@Hk?13?A)>}}gIEk_3~0!vPvv1a$uR(L^u9e!KxY}*S83ne$P;m*=#x!=F@i>7s( zF+ay!m0RR!9}dEQ(NtoE#gQG;`7!Vb=nHublM=ig`az=qYe%ixg-JhhU@69Ia1o6u z7A5q2F=W3EI$SJo*7ZSEZ9{)rUV;XaO@~UL+kZgpE?MV##u?QTtcmb2*oEd1BaZ~x z8?!hSQj@e>?gtL|hS>&n>u&iU2$cHPdvdh3J|bwSN*pULPVvTi+Xv`N^}une7^aKB zm1>cS2?C_XvKOMNNljI}cMx^lE6-|Ch17{uL78#C%B|v2-Q`xoeu?Ulz4Dh9+j-F1 z@dk7-dYU99R;}D8<7m|>is*t9c$J=*`-UGtBKA`M19D%VpIn@2{Q*dA2^~0qk{dwZ zAAoMCPbeI?pJPo@_+5%vOn6#Evpc+|ixMq2*vVNwT3b}(=+`wIx)KLHb zqPR$dkI2!Te&JHnOVX%&M9CV2fSFzbA-k6~9awq<1^la~8*^}9cx`_i8kCPhG5%&) zuG?``?r6Ef>%P;F{?zZ}Fy*Sw=bG+b=Vei>{_eoWUEy~iujW-@%;%P3b3Wyy?7jAw z+?!%g%CVG*FYH{ods8K2f7h@{$K`P9F%RbF(!WP_{6S^M)p1NT|Eihim+m&yU2om>5pFZOby|+~YlOyV9E$l$^uQUpjn$5r_}+HK z39QHmzlR->yfgB19%5+Jz99Y;49bhpOUc7AjE(&f^@iT{NBK$3pQ2vJdTHs8qH|R$ zp*qkzS7Lx5(UB}Ans)%O1tmT!3Op@~)WenX*V-`@2PwUpg86w4t6F}NJA3?#&a-q5 zY)TU@%JRSX;SeoWFD}Z*d|2n;9}h5maQiXyDXef-CbQY8MV7h)mleN2^PHggbQlTC zc{&n%ZI|Q#v9RJx%KhlbtAA^PJ8qXmhkzjlhVGYyuI0gmT6syHVnqhfLQhy-Yzp6K zio1zlMtP%|re4FKOKZ-w{~Dxf5m~N7NsDC>%2#mIH1E31=g-AS-&rlAaqzENz68-e za03g1Ni|q=(md5YHL|BLA9zD9K;fkRE+^V8=hXar=xqOcs6hQKO5%T`*W6Tk{Wtc1 z5dZ&)R!>=#pDfg|oq{9Dz6$o7Je4IBaGw&a=Ghb+j8dqiq4EYcB87wZf*A@RrI9k0 z@_xkV68({n@~$ON13^}y1M-Ki`= zv9jJ&_dAtBml7oav73t(1qce}+TPPy{m1z*@1_El=QVD}!|CYk9sHLDR)1Z(T;Ri}A zG_GvwZ3{sr>{Rx)HAo88+pRa`+d?abU^%uhMv?zZD~D5Aj1nWntu2*x<(-NtI4UT& zQuvrL-;_`%v{EX0nXrEwr8}IWw&>o@ZdAgtV2`168-r?@|V5(-Ktt}+L3squ`VLA{+Z4=)8p7xlpX%sL7_fSU5U@9>30fdaCPLP)N5QDO!gdt|nR7>l24K+jiyT*DdeP@^FooLw`%xeKpmbX8(3x|)k; za}b5yu;Rbv8MK}1Zpsu`8yeGHAteR@T7ePxinq&o|8_XVhqXi_=sNRqd9PsOdwo$ne2b8LND|Qsmo!%&Afu9NIP#5K9kpuW{tS&TAQ+x3Sl zk`qc*FkG4n}ozw7xATxA&~b)bZUswR7`c? zE#h)5T4YoHs6Y(Y)u^G$cNQEFfS5#6Tt{r{My4v0>pk7ma|fY5ay;rQqeWQ z2l@~OR0_}Vaqv_$3oI8rjQXvo$6e?7I1!Qlup$G?YL9Z_Ltx(MVc6VBkLKf~U2P~_ z&A;YhQC(S&2&d)|Nckd)8m7F8+NpXG+aEy*M*R+JcdAQEoR^90H36OzA zzFdI0eKPj5BTKM8WS^+iEgj`dMB!s6wOb%;Job*}OE6;1qjI9s+ij@C0@_{^(6f)X zz(iq^k_kg!kXV+o+?h&y>M~u4rKHKqIv~Vq!>!5a`NY;AcWT%YAB)o_MN^fTIBims z35iO2M&Y$5AzkU7I7K2OV>p8X&$erE--u2=1I>cNC=Z}9Px%(@V#+l1lbr+stV!a` zLds=Gq5QLl_gdVsq77eL<$_G)QO-mk@qk8G+SV6$jb7mM?wLwDEQo>qGR(r}WkHv8 zQ8B9Q#iElsL+K8C)X=8-ceUaXAU4Dy%FjUn>q!Ern9y?M=S4xf0^;-@U%M)OUdhvF zS8DaY2@neCRX`E5PzH-=-Yh6Nfs9#;Em2@X*396Y3lCBgoPYLtkRTx&w7~S5FyTvKyMu)lrht-uAl@7G$4YcZ%eVBj`T8tKem&6+?(c-9ff;I@syNq4*p4N1_c+~bftw+FArxnzNTz~lduU2MI;y&p*BH3 zCaOsF93Iwed|hM-d{6MLDIV`uyn#L^n=EfCK_PsF%mNAJ)yygQ)h~AaUwGR@Xl9 zyYG}o8j76tu8`NC%Taa<1}8$FX)rQFDa30 z|HCGhE<*0`s^UduGB!bw4k(>pkejJYHxOnNUF5A`OELEniXl^Tve@aMS6CjJRr4H`T}F1Er}$r?FK4imxMm90<0^l}*mx!u_>|6+^c%is(Zt^{f}hQ(={U6X z)D>l)WsVwk6{3N2LtU>Suk$GN2I?c{n$nz3{tlghFRZx?hZWN5Ysf6lMscF$>lkq4 zP--kE%{DtB5>bfFU~vnU_|Y26lKoeP^%lY@6x}~tY53k3T*lQ zqb!7tL*z}=k4Ow|06zh-I`$95wU844V{=cya(DCF7;+VH*$#x+Lev0;^|vw9dxNDN zYY2Cg&n$0h-{E(a4X`yR@D+Da%5Rf&55ud?H0B=4XbVH=x9`Dx^;SrCG!65FvD@%_ ziuam9e&a0L*Od4*wd`1P#4iTMzXw}D5N`2{!?huNkFdRic4en{D;m&#i{Btiv1lOS zRzDdl`MFk5r&vL~o4?1yq~B$$UwhkoB2b100>ydw#lrgc7!SY6xGHqW14Jstd-_FV z6Mnd--!z}Spk-YO106QdS91HD^I!MXBNZBEgx&6M#+*fp%F<(F2i^`(;Az zm;3vz!$ljE2M%cj_)VaZA%4NMKLBz4NOuB|%1U}F5K&f92|MTMPN3gdT%r-;^IT)U zVc7FH)EN2u8MdELOBd-t5O@s=@=Ias-a*LVB}Pq#b??@}DDGcrXDCu7>@#<1!e*3% z{U%@=LL?zG1ev)?mQX(oIr6ZndyT)x(v_wl%nU_FsyX-^+>~h@=EpZ>GQzXLa(8^+vQ)S9bDU z?2T-vp6=v3(;F3fZq-ip>Fhh-+q#|lOK0ER-spD9+r@XLdR9VGXLj+;@V4QLTbOk0 z=;F)uwr!`{b@iR+jn&sPg0YzMuY`wGboC{9%kKnL+^ zPB*9`L2c~r>#NM}bi}7hdeXu89z?Dn3Uj*J*Nu)ClH&@@$>En>JXY{Nw}-C_wq%{Y zO7898eO(U**-^=7QcXZE-Bh6jrLH>@$aRoB-Be~z?i1yH7IDCJ5z)PTqp^wR_3~Ze z?bt4OvO-NSUm@nhjNZOiFbOvI_6?C8EWLe(o7D%@BqlfyELittd^+nFDl45KI3*Bs zmzEdvy5GA8*0e6!hlvS)zr6RZSJob4MDwE-(f6yD@S^V%@9 z3yOw?wCO(3m+8&mqnHH0S~Son+f+*j`ubrZC>i9l%Lnc9!~@SBLbob@X%(+7J%?5>)f(c{{tM^$n4X<;tH64f<&+kl_0};V9eFK>->8H`brwf8lxc$nzi-J!%!KX3$ zNv+B9^$Nyf9v6I_t6!`6+0dqr?tHN%^dyWrHn~aXB2_Mt+Hq|8o`?~b2Jh?6^^Nvk z*6u`PWmMO^y9m)0{}d1`90vct;-s&}pL9Rrr28x7z8@N_bg%qBW>Q&df99Ugu^)%o z5ou_(x-m6bl!$68P&g@;vM1X&3kiyU15Vw29`6d^YI`Uek6{b7&6xHH|cM(tZJ8+1p8G{U8t(wW8UH-&m z9-c_7R%v6QTB;pOcUG&~v5cY43s}cd@@kbl&PPaUJ{YFz7qSVtt{1*Wh2wnB|4Ctk zb9E!|^<#l=Y5VAM8+%>+TP!^l=lW79tTNYkTg!K%8OUq~weDhIJUY*p-||lUXoK%w z$n%YBNk-(J{7J8ief|IZ-KeM>^0J-vA*{1?7yIe}TjeEy?Lt*@uQjeLD>5>)PbA?| zwu}V(m#_*?sjN$NOBsNN$y_iVqDZ>T_a*n9%NcoWfS3F3&>uvqq6LX41LxzJ@$Kcl z{`4>VYG1dQr2tE2hr?CrDppRXUI9DB5|j_7q;|nPQaC+D+@yU~!SZFGO0T4v)F{k* zsZUc{-FV-#OaPZp@G;HRZ|7<6PFVrzq|&mfHT6ix_?XTu;21g)B}q3iQ9V1+7q1&g z*p;h%1Is7r@dx7+W%Yi^Oi|xXg8na5QInAxY?GLb?gxwm;>r!-bp0s#-fp0w!&$|Wj12-Q0<8{D*CW$=2CQ(3Dp>=d^Jie^ zfjWAcMvSbLiC;9qNM>jf*sd?`ff+v5av-Q#0G91QvwS_d+%*fei7iC4B&*AAqo<@_ zx&?JFv%*u=9_RkebD-pDDlbO1JHvsq)aIdr^IZ20Ocs?&B@QysJz|7bE(ABS)56Y}|vlsZj z&`p}f`-X>E#Lrr&$#~2{%`@NvhPrW~2G+)fzC?{D(W<#~BxJHsM!;=eNVQxC+ypNS z4x-^sy4klvz)`S-?~g9hLzVYB+$DW6{EoIR_WcxmEl%yFOLUX>FVW-Ob*b;i(2zDS zqFL$1zQdY4V>NlYStS%lg$1|z5~YsC%NVNF>i%WEx4^)H<={|`n{m6Zr}$u39`WOp zI|T>4MR)otBzy8blHDDAk8f0KGM20c6G={610$W`GT^Uy^!5!gv5LJ_u0hsP*_*KE zHlA;SoeUhi!MZXmK1V=ca`2~q`2MJqbkG* z%aPJMsml5^1JG4(01i3o*alj-R3*HOh}*EIU8*~EqwnWdh@09+85DdN9})TpKPnz= zx9L&e2-$Nq;7Q*$nsVSt@Gr-;p7Py8pNUB4+vL?|++OaOD&HpphwRpnQeh3-FSE8W zJrS0sz3^4Sv#i!NY$kBZ^V@v81vbmK`+nrI;5p3_;#?pGQoEY23%)@zee3#O51NS` zRs8}C0VIDxkIJzZe3$T)_hN`^#z{CG>Mh4*c-f1-LA-0`ovM2=h)gfSVld^-+`)9B z1r#ozNc3t`n=s0g0eYdEUE`CuBW~~4eMDjj^{eR(RK(Tp$Txj$TTAtObX#u-U$_4Sqw?Aq!<4hvm!nG%p9cy{HFzu=Em`O1RZPA^rqnrovzLX|9vDUvs9*_G>1x zcE9F9FYJdOtX3C%s>fsFr@pz;!U<>+yAPr2qhfrfKjvbWFT>hiTtVc#h9A-Ijt+6y z(|;C5;i}Kj^iKV(u@dfFyq_jJ4Kxkb*Wg>I8)(Z=sl4Y~VZQ%7g2~{y?ITYiiWAaV zwiW8V0-+5#Cln5_GC@_|8)0n9Z}dqY3qB8Fk|~&kTK>6jnRgC>INHW^Andnhp9Np| zKJ#4fW`F5(1=Ejw?Mu-Whf9~W#~?}f{ziieBo>@4{YJBfE#JTccq}>qD*>Ut)59ni zJxu2*&j=KoRo`hwNhT(#eKEGzeCK;4l%Y}_TdJOAGep)9{6p4#?<>}C+N=5{Q2J^& z_s#V}3<6@i^zOjH0{curEdWvgbdV%fZ&rxRQ)a_uJom z2PNMJ$9xYZ%Mz$V=foI&Ilo@~ zgAC8z+16++?TBk{pl-(*B9t#{XGlhpxVUe$H+o8gn&XY2qSQ_$Cy=@L6?VXOPcR^P zw;;j58=X9c5!8(c3viPtfub8vuaTH=p%n@l5LO3d>cqDh4H+Y0V8Y@@RV zV{7HPI6AzSx5zezV{_eZ8^U{H9Q|2_qdB(TaFR8GdDtY!h}MXz(L!Y$rUAu{A*xI1 zU4~tj85!;FaEwfe=q2!Wf%mQm%|#uxKgF<aqs6n~-X}=F!pN zNP@}NjsQSSX~u@O{|ms8FP~BQNuov7oaK!y9}^wv?&xEDD>CNMvy4|xAtGsfXn2t< zYF$5LH`#PAZ|raE5+!SZ@l*uY9|jry7A>}HcgF~$Sk6J!T1fs2 zX^x72HA+mx)!R+B#OI-h?por+x>e^Jxvc?+XRI-uIA$})>Y+~?XLKfhS>qzcIe#22 zm>0ZX@n(lu_tIPv5JqVi8@EV(8!tB?Hh0hE#zZd`Z>?exPEWk1q%yZ+f^jem=F-WA z%_mPxHbiE>FbYmU&MKg?B z$nnDrgGtqeYUpfQkmJsoZTzJ9^a)w60j{bJA^bMnV2l`i{zp^jBYVE0w_UK98T`g z-z2w9N?H9OQDE*ca>#VSokl+{01+;5r}6rUx>=N1C^N#l^dLi-L!>)Q3h2k(Mt_~L zl`0sU#D^DRYD&My5OEfqDU2l8-~5@xy_k9rkY|bb9)m4Z7qanAlUmWel%@-_)$8{f zX85~<_Zn=E4VIC6pDwROewt=&layrUO-^3 zv$6LSmKvMMn7rD!MZbzD%l^@Dt5!3HB+KxqpUaFY?n|a5CE|l+yw1G_!n(Ck1Z;h+ zFfaGmT4RdnLj}s1Md}`9JggbfWOu308cJ{04^T-@@D;|%a?>n(0k|0cop@aG0wZ1z{zVO z{2cy=BhJ3B#nn3Cj=<-Je zsBYe)a1Jf(#otiW8^J(P7J_W7{xP9-+2CiCZ_?a2Zxcw7zR6&=p}3b3lO(rdlR@|y z$cZQp9H@Z*TI!Pqp^4E=w;0_tc@R~nIgqH1-rpg%{AptaeOdXmF_8r_PZVq|eOLrb zG5gy`majEp-R@hdEow1{nyoS}j!sm$`;Y*$tH4h{@j^9{W(hB|$`VjJn#LiWDxSw) zk^2%NjrsZj!*&Td+=Wo@XPJV5CEK*X(X)nUw;3DAl=rMLk2g#bZME-NsDrieCqUfv z?NnXtj@d5!joERn$je%YZJ!JB>4bhEw=TUmbE%v0yzzx6riAv$IZLssXf#{T(_b|H zL2ljDTmSE-ekn+(+p=M&F-VI-8IDdW?`+!Cv{U2#k)803lbd;)qM1b6`+H<}Rq?Xs zMtfd1E@ET@uNW7d+pR02e1S zxZK|~|3V89-i!q-r7Zs}oKueBf>n1pdSJsR{G0ubA)4~qcj&$}vbSm+&>0GEha#N$ zDz00*jT-@LsYwKkhBE?P2uTfpV@|i5hAedt>_$TA4~MGeS0$?KyOc+P6W%i>hE$Lj z-qWn1@jYW3pmf*1Z)gos%e`Iy(1IrU1LHmwX_=`iYdR!fm(8j#d_ekxq%7h7lTr!kV{m@`j(-}9yfJrxNkW>#RQ7&gm!lT!H;(JJMQ{Wwiv%k^ z1+sSvNfGQv>d}rdcj<)kp$^9zd}c(RqzHMggkJMM1LbjR`OG*jmj+{0vdFUuR3v69 z>eLZgr*IAOg~kRE+U(EOa!eaMFKyI3GBgy`jhb=nY1ABooxxbWJ~zhq5S}c5;%FjT znz-u9P>N@TOrqqqRDqWFxnU2MWC`#tGjpAM+UH?+!*IS6pEvWl6)yFZ&sFn#gbl6u zhPn0^40Dc~_XXIK&|&}xRRscmX>4VLGQK*YGc5WFz6Hno7ABbVwXs1%o_Jq-z08`w zHXPnnK4cnPw9*&I*l+wVqk;6&AB}ssBsXb79NJ`Dp;;KP#FU!-n1i5gG9tz8b^9TNBB6T7 zStfgFma6(+;mw#>e$s**aCcLyei8*k^t6XSv+SRZr+5pDjDS7LYp`_gbGgkLFLRCH; z#q2Wx%z0UmXim}TsD0OUz$flOmNN~v@0y{!YHdr~> zu$+Sfk9IL1As0cjMEBg^)fCCk+LRq9VoLs`VF2L_Q&iWXXP6gpsUM7Gtl|u_hI^(f z!htl^ZRiHzR;%i6rs#rQyK7`-x*}5wJ+0Z%-Aw2HhwcCg{?lE0ULaaau-dYCe`lvb&nGlTbMnzKlX>uCl#QZkJcQ=+&e2X&b-JnDLM|X2_AM+=k^7@*$aM{z>6gjv!JqWgRGq|QWL{(=caV}T}*v}$lhWSa0 zv$M2G9G~Nm3tr>2jS2UkrR!i?jb-~RJ(#R-aeiFC5Ph6kmhcZ)YCrQ*4dXLa<%5xl zTAZ9oxoN8C1r|JV`Zck<@f=n%nOqTm=iVc?8~6J zY@`8$La+M-U&jwNyPW8Rp>hUm6sMhnwIJnd!3%Sk#VMv+bB<{WtI_j-y2owii7#>@ z#E#U?(xZf-=1X|Fi6AdO&veSqH80hz&8Br>RFdVe2SPd`n`zE9H)$AzvxHa7)`v@B z$}|i%v_aJlGZh|kT1%Mmgu(IBStc_?)tIG6U5`+O-7&U&FN+1~Fh^YIv<8!(&G_Rz zN2{JY&#Y;MyIk#Pb6!B$hrlkp8r-5^m6g7N#(9BBd<%EXg=Q!ML@zZs$J_=F`yt2d zrUzT^j#CArQ8?-z5|-E+Z8mF+8T6NCH*S^JD8HKs37NBGLcJ#t?WuH2$C!3R+FyY{ z3p;|sgaU^1lQEQitX@_0P&B^%?*3f!wN{>o-O4La+Psh8yCcVn?H+GN>quhh z-D8L&-*_0xWBSr#6BT6f@-V+}MSpq>hsv8^8rr>@oEi;J$*xLXk6=-4X{%^=!vy3h z03STjye;8z$`6O0(un8onP|S`^*+%~UG*5z{L^prvnbF32l9Q7Vo=$2mAS_Aq&xX) zb7Dk@qn3Qfq`dALbC9>IKwkbtIZopz1qyYF!AUS(o^u#9E72W2%_K}>j$41N+1BHE z%H2QR{58_Mxt;pmAJM^Wnr-%K?b+fc&o|$ROnCYv80a>NnE>*;$*iCo)i(+Ib@$wa z&=m9DEoQ$+BAiz)HRpM&@Ys>FL8^m3Ace(nPiZ9a<@+WKRJkKXsVhdrU8uU2Ahm|6 zl_jvJ-KzJkrd@ukDZ7MZ3!_T9)s)>~BoC*KqFd1uPT4dh%_7L*GV{lTXJ~DA9=-g8 zNVak2oOua{9M>*4Kf@8S@^*80;JMQ>x#4G3{RJDi;_pBodEV`P2MUeEYrxB;{4S{E zMd`;B?@PK{9aa8btbQNgWoF?ax$$n)r=2SMZrcBH@aYwK!d`zjUvm8LJ!U_(?_RTu zy7L}$lK0i1j|`FIlf19BQ|~_0zLUgky%c}RW2JmmwZa_XeM48&NjWRcT<@DLUznk)_r61Vjduso^<|v#hwf|1TcvwPiSJ=pXz@|Q!SaW`q6Fg4*KC_n`#Ctbv zdDUzPlw)}1zG@4$!P)&g#K-&^3K50FKhq(h5y8 zzLbEPP32}4E5VhDF~-O9*gE(a`!nuG7tW!(MI?a zE+IqS5H3)SsbtKxl{B=fUQ-G5SG%k@8bRC0+059PWW+vfnsJSMC)_5;7J5IdHL>Ph z=K2Jgk;``0@LN64M~uFWV^ZuR<_z!W@R|h?es{$q<|0qb7cC7)cucD<7+d?g%N{dl zM9>-r3UlIFgnBTa6uyPD3IeM7DYy)e;+*AXJ#9WN+e;2?)m_M_GOq@BrB&wN$uX@O z{_>?rG7hb)HhaZx91%o$`0dSJNK&zP+}F<-Z2soe%LeWSkGX8v8PY$tPA zCK=CCA@kbpAw?u?;Gfw7nUd|OLVBg;j;L=bwL6nw!o%f%7+`z;bLRNqb|PZ4#^Br( zzl7i*`&`uN18V5==3CzHSZE#Jx>I>$2i7|u2y`LnNZt$RkXzLUFE9f`fqhXcN8ol} zmHHq-kehyFR#o^7=W$hK2-f3JG)3kSFPYQDq}(T^tKW^^VSX7AQ%F~YRdPc3#u)5% z{V}68eZ|(Rtb0J&s&T|Q>0V>51MO>TfQjDM1pD5IGTczhw1TrNUJZ`=8%!xTyc$yN zTC0+ggf)5nRWm+nD;>T_6=Y*;&pMm^=7(R^m@Gr6<-en=FG;m*u?Q0x+ssOkZ)E>n zSd3{RU^AOL;B|AokVZY#(Xr+?v?8DUrdh^Q^_%*sb{qrR^rkuJ&x=7jdkc_j1Fx-i zyk+jwRC#t;S`!Gm%XH!nQhOM20p9;7w4RNdb@JcL-|(;wyknN7{YV)?7Q$XG=91T;XYQ=j=A$6RtJ%T}G%Gf8#9VLCq5k`0jVjhCj%<)$Y#s%u8gy zSHk-Uw_$49`=IwB;mQ>GzS-aVQ#&0K-cA3z$%%_UtI7|+fM4X25+kBPMB~5p+}6$c zP-dUMs)CP2sjkCHq$9-VevHgLEUA6fuCGisaeoZI`j7hHV`$;GVD3~73gN6T4);ml zYZit~q>t_eDYvSOe=;H4s`B=O7wO5w#m<_~rq$gaCq}zf|1>j$o-vMU-lxfwYzy)D zetSP+^q6YiPaQeR`V{`h83`d9XLMQBBKZ8LpyO8dHZc)8uC{z;-k~uJgUsi$+4L7` zN-c|p8Q#^JMVAIfI!C?T08{xNRsXZ}P@>&eeISbFZ?Ma{M+woG)u_wNJCbO)2OC*P zP@})4$E)ODp=?iIF$?W0>vawwN&f;h*sBr_0O?iVF!gTu!gRb5?bUz2FvsF{z>Cgh zsS!krcma(*cOTn3quQ(6zcjB`UB08Z)B`jy_A5*;t%HT^`wB{rW_J>B(skv3ZFb=x z1t~~nePhO!f5T_re#vB~%_)gV9H>)3el(wO^jRj2g1;-!9oku=nv184;cRLpnKyD3lXaQF^^ zX{qK^4gqdhg@E;|((e%OwyK_HrQnmUF9Atp+Rr%&xTDLxoAtf$>X5PM=s{+vTUEjj zjQv(Lb|%*OZ84wE{y{J4u%uv=|ID$p@mpCO*{Z5LBx2M50WKjz#-@*9nz~RW{0k0{ z7_2raSgjl?pyHp_lVC&>;(SO73Fjh+>i#8@I?)ME@J%rSq&3kJmPecPTzhd7>VPmL zQ|va~R813v!KALq{3(Qajm5CTea+_UQrIEQm}(EfrxvKmKbbwdE)as_Pi7`^D{SH9 zG#RF3LC%3{)o*x2g=A$#R77O?&+ym zJoc;kYfK6_C!Lw3jvdB2m#T&yF}wB96R%JS@>YjuYyC)Hn;XVzL&`DJfBUC{A&+VcU1XhC1(sAizXE)7)`hD zKg#&Ce?Am&QO2qHDA*f{HqeyQC1_}ZThw;K{&h^75EdVUdoEC(_Et(+@q^I#Ie1pZ z|IWJwZu0MDKg`+N^Q>EfEUUMw_gc5WbDNWs@E>#wBCKxVH!Gv8*C;5jl_g`qT-s32 zx3XmSdwnabpCqk;5E^d6l9$@r$^n_@w6?_Fgajv^c56!%!UL_Xlpca_*V0!R2C?%< z-vw}g6pR_smV})yjn<87Y=eQVOAH0+X0VQbJtFtpnO)goT*iw2s+j+++6iqeg4`<# zkf?C@3Im?k`8K~Tz({YadvQwYAZ>97hsF-RJ45@?xziQ8I#2 z#BgZE6hGENpH$7UR%b3&92X58q;i~9rHd4_I|cnzLObin-~e@_i9Om|^Vs~kvAs2s zrz7pHi!_RebPc1(8LEB?hQz{nE1mBu<1NLRD3w$3-^xv(el|iR@No$4tCHy9!3S}_ zYf7*dq3X=>k)Q7%I~-}ZGQ-G>v64v0Hm!xaGhXQoT&TCj?j_TT=iL$0dYBSvDq4hP z_2Qlg-zXxMHD3?sv{1KXIK$9#PVcI_($6?jT#RFV5^lm_$J(t~&DE;jh1C>q;C!5_ zCConKd*F#)@c>MNzMP-JSqmMkNkRy75-l-9q90*$O0@3eUgI8p{WdfS$%tSUUo*=} za;uW9sUG&>r1g-tPiB$5SBkX@qR~-b3Ejccl^i9QnhNXyUUnLzmZPSnSp&7q@2x7+ z7;GGXJ4xd&R9iY*iEQY3yR+3-+lOQ!SIA$w9%d>q>n_$u`gL~bwTzy~Fo6!x}W8JA!QEbI!Lb5u!JMvnQ`wO#D;p5Ey4oy2+LG%HkNeAo1z(KA)T8J0MS5D5hS zvXJK2sJ-1a?jDm%Pl4S%rx1h?h8||OwugmVbT5^iVjJbXD5AGY?qv=0 za6avHD^YJd>MOD;vHZ$FWci&PquI&SdkS&n3cHx5`nZ>sFX2o&+9|C>YdfpG`qzDC zM-FylZe85lny-aLNN^Q%|HirW%=prQ|yf&Hfs zorZ|Irdzl!tGsk;3Z37c4lB_6^s%K!0ow5yR&Gf3&mIL#Ycj0Od^P7Ry3VxXEO;2l z37=(2gp2Hc@IV4l{mAj)sr{{7G8FYE0~6=|R%@A{=~u50u*MT$CHZWtn-0{|N;;q_ z`{B)9c(x^hf^@d3vnhdadxX`KPtyj0V4+vf53&j=yvJaxESyAr$dAER{vR}EEfe~+ z#OW0?s_+XjpNC{a)j3w`pL|BdntRypHD`!5M7o*@Mei5_Jq=SMGl3bM%e015KSyP< z$v2bH9jFduTK9PewO99k#`!KAB0HO$`zBU^q1MOj4_n;BW+&rpY!X%HlKmXD=UnRx z&HzT>_4Q=Bjl--fq^r8X+-&K-s?27Xh|nP-u_2iQ!Z@}#7zx{=10oa86#=SuGx2gL z$1)$4HI!B7SY^>(Us1mdH31UYlm z$`K5WOkcEtQdKW!x>7en(_ka7Fwew{wC>R#W~=IvnuxZHv}~O+T&L*U5#g7=jI`dn zco;f^*ylX_1f8=^d(J-X`MlGfhoAO5qP_av37oGcjk0o289sr^NVRj66?95!Lug12 zxBkqFXM`7)ksghcbM6x&tb;jfh&$)PWY zFCY`i`fTivM9DpztLpm3L|Aej04?vY@7axvHPWxQ$jB*IMJa zlw1qB=%=3L)2%_=Zk#Ubj?>Y7^nGW~6~cRaa#XXvObA}C3|=PUx=L3k2}yB?+AEB+ z9G1mCL!J4m;N@zSF%wCYuU5{4HEdOH&qQ%TF`j8%#0=zu>nLHXD!Gott!n#qFp&b4 zJxgO(%|= zWW6NTgtP^S#-@3I2~)&;xROqq1x2h}04@@9V&`ArcFSGQLW`r2Fu5l;-=D6X}`9OsM@u-HdIynqBqT6 zM5BU*YEo&Z@*+73v+icFY^zJ@9H1Zy@OZxMtZJ{pX>IgUYqnO6Ca9gu5Sbq@wMLLP zxfnqv@Gn8mvQS-u-X>p8RB6TNIJviKEqLRt*1%**4)0MA_|di&9VN$YzSUx_pRnZ1 ztfxW%a`Ts4Y=s`Cw%?AJ#5pRNnMCd#mK+U7d}g+8-C<4AjPo+x&a|fX-O3triGOn^ zQZx7gdhlJ=Y~VWdZi~%AMB7|R`n9R`&lggQzAV&xvWP?8>SAd*I*260GVZz z7ifW|ywNf=I^?PPISg3(gBXH#r~pCOH(I7{Zd7p7h}hsYhDSYUrD)tM0y>>l2ut;hppSZ>{%>*)au+@*7XEaMXMI96>cpgCF!DN zOL~~ZCX{7d!z|z}oB~Ievg8*382U?&y8ki8a=B`LEF`kW1^ro5H=%M6{C*R?K_K>` zGsU9`Y*!IXZ{DPp-?+z_gDqDjk85F2`M7n34j<{K+Rpq$p6TjU+!NL~{Yq#|T6N-8 z5w9qt_6bHqSiyLez^$sdw-Yw#CzwGI$L>k^Cm?+iPJ6A|@}%{VRu+XRc2e0660PDX z&_XwaiS<)fWX$w1b5TD$WexGpXs^bepTtV)KQLwIZblkhsP5X#^dLvo2QPswTJfI~ zywq-isP%~?1359kij5O_6+wL>uVw~KT{SN3yaTG?=s+SNtp@j6~(8Io$tVc*F*#T2ts%m#wubnbu5`+nw z5NhvYlCgQG)l1_Ar;?0gGLerxOdZ{6Jx)I#eHpx1p!U8D*#4rTUa?;CEL63xSV5nS zC{-|%RpTx-sB0RU@SPgnU_g?hc9$kcC)@~lMct9174Y7q>T3X@h8lCE&RwDj@HDj6 zdMf6YP|ldLv=qa$h!9}b7hd8#@sdqC@8L@s{{}OWLbv1%c%)~EoAH)RR&YGuW!c>{5J2GsiALM3&Gr(@9}iI`rvJ9ze8pG4Pp>fc$c{c_OVK>+yhaSs>VH* z(oGTmbaGR|+9h_>|D!2ox+#B9?boOa1aNCL{G!TfSbO}PFcVa~XDtgTo~1eo1}WN; zjPN?r+N#=-k*vwb;!!cF&Z-FEu!^r|I=oe7*VFf{>au#Pvz8B0sx%_1n>tv531M?R zCa~2f?My;7WTTjSwBG6>i@VT+!Uv$_R<+f8=vBj zM5U3%Nm#;Vq8#1Wx{c~n(V-1T9b4md<=C(L!QkpXvL4aTm#DmGnDL5_u~8vl_gX;* zGwG&aM|cFWTknOj(~`Xq^;R|XpNs@m{S#4(z3~&IBaJ9bWNCT?TN&&2p)3SB2b!vD zeF|-Q?{BXiWZc=GS$Il5;2vwRe#`KzcaQk|3;TPn=G7(0+am{(WnE4{4%o2u3}qDzEb2;u-BGU+u>d z@sKLY_YcFhs5;+&TT~?lB&f9W@c)^LAIzXHkYM=*{#YV%%_;CNjCxo`Is87d{2G6J zf}nXAA~NWYsI+VRLuljVYy10y9%cG z@9;b>ms`}-ss5z2Cn!!hwTGV+_vC5MPq`QsyGiK#x2O3xc{WRt(+T5sqU2uJ`eUD) zPMbrJNtode8qHEvL0U4F>lyxaUeD9&$aQ>JqY7pLQA|v;{8Nw|X|w%_ls$B|zgyHz z;BmBS?B12Rwx8)$N8<8xfM*uTQ_v^#kT(2LqeezxlDX>F@DOZ{fl)AGG)zL}w~S?bTE zl4DE#qqvML_FuteV=*PJ4`wQhVm+|f|FfK()Oedeg^Onyxc)T0Mxg1_?v`c#+dMcI zW!&x`$m7i0{lA6R$cv`38*kB_{^(GR85y0irrqgJg^p_P^j{r;Gg8_Le?Npb9woPx z6<4q*;3h@74J-VQw<2z2^LmbksCd+$q_QgfXQ+2O`&zk8W&UR)Sm;eyMd3*o5?VX` zUHqwwf8_wwszdyXU*|V{qSc3qK#1%)Oi}*;?HeXUaKQ6A|548&ck=y^1tpc7Lu7!> z5BLlJz+qk0d%gcPsGWuoc;}GosbCcJ_{6Ea06WFLM)svw`sbgNrgA&_@lUGs@8W~| z|LULXjXH$hV5#gXi3u^ujxT@7f2XQ>)IZw$e0%kDT@-##m$ZYf=e5HH`!WA6ulEJ0 zw4UScV_)W2jPxh`cj_W+DMAC}e7Dn+{GG?29oAl;cKh}>!%JaPcS6xB8D*ciLg1VnrZq1tK zk9E^u@JF^HN6Gs*fR28}Z*o8R75{KPu6)JMHi<(jtu_wE{;@w@HN~)DxYw)x;z)*W z%bWf`o~|_3{ozgj6#!C=e8=CDOVK-!;7e-D9)CBt<{keC4}N4kq^Q_hUvybjCBWU| zUxZf~iIwAZ}Xeaz2{HzQd@GpZc{KonWQlN) z8Lo)R;rxU)-c%cZ@%KAL%YRGl{{`yaB?=tolBbA;S7G=aHEC080)zkCAFD}4IE2Vu zDdcT2jweEsn{SuZv`7o%LqZ$t*u7pi>R;Aq}6vq*Nq@Kgc+)ZXh zGCR^7P4a}&PFXE+*$w}SSYQf%18bJ6yMFU;)sx0Z)tK1|#&^^&2FwLV{d2i|b=1F< zDdV(b{+B$2QcOFJybhZLPc|~a|CCJk#9e5%zFT)HGh8Z`ZbFA`oe>LKAX}qHS2qaPV^?aOmsRz@Gm!BPf~diPYosUI2Q>nSl$Xli z4Gw3+LC%)WO|p|tdHLQ+FDsJl?s!Pb+Kfv71r?CGSq=o$0A|ua1KMi0@Mrae0=*S39}xuTHgGI6%^t1yBeh|f6MyE4G&>X3YJZw-bNMCBPVw$z zb!tS%PBCIc60_zYmEFnyDP})~$e!6qRqz)Ufg3&qvgwZ|<5VPsRooe%jAqr)zC+Wf zjDrw_wChv8^r_~L38$6c#f~S6W>FV=nAY>e&n|4|SfFaV*mfuB;VH?Gy6guCQ+q>u zwd6&5S-b_Vm)g~yA86zYsps?1^$V_o=MShYUG2oKQlM<%5So-^S;;=Rz%O|}Q)Tpr z#iZX58>#1O|1JMlp=!S7d>wmU;G59nx1s9+uEE-0I3rYh%73Z-JF?F>t@i(x|NBri z2c`CID!-d;j+7n>Itece_fS?71Z3ek#ed5q!297OnrP@|r|RJm75~KWBy(QF17_h7jME5T8}wCPtnjXMQ^EWt22KLcMS{ zLzA1y3^lr^z2=lJehKn}T|MnsLa(0S4S&e^>q!|8>vhAjx^dAeX__axytm!Odjx79 z3>{?kwjEgKgx>Zx?|-0;27ur6xoB`4lB(?xzo{{OY&+^GO-oelLS$8;*&BRyOs(u= z579x-EubZc@cYR!^9`7u+1IY|9*2p4YM%LAy8Sva(-k&ve62sg*Rw%k(rM@)&lb4; zG{lQ>q0QO$#U2kQ$Fu03wFU)q{@HeVXzjUVT|&?}g8$ummmZL3Z&^Eyv`3aKmRi%S$IXk9yP>XoTTf%O~+%xflOV6cQb!Ji| z+%tQyJ;j?7r(XUbwS!wT*iIM8)_jgF#_{b#V0_F=_GH?@({sYYQm#@B7PX^C6+R+p-fdt)Ju~tYvDMDHuET(j*ov4dRB`J*Tx|o5U2vs{F zfH4B2(-YWaD#;*vbvmSaM18g3`D^tN`m zeGgA*BampqOgwDdPDL#oVXx5ILA=VllB_)2Uu3o*CtcsEgUmYi>|_dKJLM}b#4YRo85W4W3(O6w~dN1>BEz+$w% z>>p+S=*2_z`c|zvaPVN>Beq?BfnDrr=ayU`N=uHr_9Ey}CYy3z@1(Kt!S-tBSbGXO zPue(?9YP?Cqd{BM{&DDSxKXaL`?~XU?RYP7hKqj08NT9TI})>w`{*V1QaP}$>t(h$ zjMx6lnWbuGvR9yKbsHvEm)pxoEiJZ(sHV$p+0RpY1qE{I_IJ z>j8X_C(XlgJ}ckOVq{A4?Rk7$R6r}E3s6&7q?Z$n_Z5NMI(@4o&4bmBzQ%r@Iz3bD zeu40|g=~tB;3sq<3xqzE@iQVme~R5juL8*eM4C!CkN6)IQ_z)6l{XtLD}Jh-OX&qu z87h{@H+R6Fa6C?T3)x}cJ~+yKuT}$+>J_UV0n09eL>Z-#^Qc&(+4TSZU9|f4{Um(N7s(#) z86a6$eIv@XiCE+D4q`uVnP2`2OnflVffG778JvH7;rYnKE?Tq1_>D9EAs7G@=> zQ;0uQcRN#^x&?M{pX#})bgZwloAei3$J;sqA+cJ|xyinTOYL0xdGscG4fmxt+fx0b zH`{XosCA3oSJQ#uC@Z@!vFen6i+y95{!L%8VN8jt`C-VXaEbk;KGnJnjG8d;g-aPe$mvPv>avPApzUHIFBf)2u)D49 z&Jt*x_pqg5T;ND8C{y^mmu&{OF_QBAa`=ok(A(hG%?io}Wi_c`Ub;UP{Y+ETsWHgOV3hLw(q08u{3RW>9g@3_2OwU5%SK6_0bxiqW z+@;sOTMA0j3j6=4p{tQ1SswOFH{1*Tu3Bk#*SeaNDFdfrs?zQS!&gw6YFfz*NsJ!y zcS?rNgtD((1*@(2ISKEyPGX#BLc2(BsguTk4r8n8Abq?SAdXgV-)r~O$R$Nd3p14G zK6H`YYU6$OK;KycOH$=0Z~MiovBP{FRhHvrD_&&;>|rqe!~I(-W=nW4rYlYK<&=&O z5YTk{Ly#tci*R=K1%_X1f+y*6e&N>xRpTnV?LGeTUpthQ~C)vQ9RtA&Vs>YOQ-mrJ=vxK}8bySiZHFKkeg4V%yY_um)I^L&{&4b)$bFdi@rNT*F zIHx2tiY1SS=+AkdWR)sTWo$rC?f+L)*F)~&zuIi2Kcwz@7@0pp)ExFg%V~Ne1vK5f=LZ#j z@2HUCKUx(3ada9d(;>kNr?^~fMLzea{fH?4k8VQKzd((AoFT>G>2AQgqksF@()>tO zGm2ozHIFm=Q5QkpG-M6txr0yGW?a}pD1ACx)o-B{SvPT*Rr-^*sn_#G8Z>GVQsnTsUxOg*dygWFYUo}sbi?*PYtXkX}?zS0PxI+D~89Ez(YK}#mWVU4s zBzt9$oV6X`;1-JFLs8}(z;15vQW(4x$pt*R5ZXw0?f%{y;?<}7qt5Wo3ti`jt_wofzl5#}L)RPi zmF)$8kBao(gt)#riV)9h8M>Nvz-`AB?7Xjfp83ShYViwVUv?8-wEIOsXWFNr;YHw@ zHL*jy>^#=7v;{H5z8Iy_zN2OFB^1ywn(byyJ29p#a?@V6r?in{(}ZAZ*79~zKg>E+ zyX@|1VIdhNOowv9T8duIP_ZW&W6|)q?l>AIfW;>icxtrNtvF1+Y zdr&7!RQ3Uy(eS)S=7D`L3Qel)h_si@CL>)Y^CL zQ8Bl*JSMznC&nymdCdMfjhWrtfaB)BXXi?zs_Rh!m#B>Q!P_OObRU&Zecv8|pU@K| zk;C2j54bJw8b3hREOFC53_hOx#f=}qW0ttJA7Rtrn!Fdu!xwx>S9W3o+3`>NSzZ)< zB24Jy+Fl}c%zisDB5FB}j8&B;PSsVvw2pM|Y_L~&Vs1aV=`gd;?Lxk%(X4BJZV%#~ z_HEPHmpu6Wz z0s1!_Kc|HRYCaKp6v133eP`DZAul{4(dAxmJ^H;JEwB_wsV0eOUHEGI zNH_go_R%QMQn&Zd_B(jPyGMSrFNuX$R!`)BfZ5T`vk}Omv{+|7(e=VL!+6$qb=0ai zIMK8s8Y+p8a}MI~1p2W`@=s3vNNVS#OB_AHM`DRZsu}H^$36F|g!axYl((|I(@!q| zA`x0_X?Xs&ciy6f^xJl;;+@e!Hvo|SBc}TCK1amjVjqzjdifk}mh(B{pGuN!p{e9e z$gouO5Hh9e8#ZNr>~kFCK(o)81;?9gIJ0z?D9n#|TNRGsq^ee?^B^65)O1F9*1JEL zPFrs%Pr^XUUj1P#C-tS-&Je1YY&)`f&T~y#iW~xP>0{#$#Vk%;{>3k0D6Vl`G z&twOm*d?mDqcc50WTkKc5lQ;BnwjF1#g&CHPag%ZBZ<37sSYAdTujd4DD6ll4Hld4 zQiuDa-TXACSo~}nJ2_XVT|*ql&F$<=^>`+^+q*bd$eXw`0Fd5nstQIWVy-yDS%ZI= zp4n%0<9?F+K{tR7yqddn<%=H9M>_PRpO%F!FsDbZl+_$j1jIBXAqiUYanhC(j9e)u zjFx1%;ZG)8m+=#OZuoO?dTYt2=A7v~6jL4sg0gx7{hQUyp3ZQOQjI-9mDhVZNgRF1 z{c!L7@a0RQ{VKDU6HU`gwg-%|-OP#edpX^~j=Oq+M|<5Zy_}w2?*s8VV1zo_2UHuY zGWs%fW7WpK&O-0{_+V^-LFvv2Pp!K+T?TmryX;|=@%@4RAr&_-wsZNDT}?izK9EY# zhHLRhF7EH#>DlPU3~+w*5)rC}V%^k1PN7##J>N+xe;=H!I>)&b_bp9LsY9H6IYV&> z$jKRs5E$XChzD~k-quY+oK*1R1d+3uJkxo^^RU~PNl!eFoJ4=A=aTnPm3^-B3iwE@ z50@`r7zSBCrb@mh{AI6fCr8y}LAIMza~7{3mrIJ;mF=waJb_)951&+N!)eD;YUXg~ zVH~wIKgjwn6&t_XdxTRa*jhW1S6f=j9K_j>u|#pDZ-lpFd+6iix#Lvi-Gl#3Fo`BK zf}bc=TN&0YuJR|(RiR;q9gTM65Fnzd8}6#n&UjBo^=WyZIqiAdY0uB9z=h6jcn@v7 z&>6>>jz7r7RYNc0^1Qq9B8MdaV%FzC#V@GF9I`HPr;UMk#k?451t)?JB{*Qi+9vl1S>D59NYvhcD~0j{q`kJYar#;U+N%d#;X07 zIrrhh0y=bdS6%KnUR+r8*st14*;x}EX7%Hp5qgIL@fVhOjPfVpxmgq7hdYB~kUxRZ zT`i|#$j$;Cp1Wy+^DKTKEl8$g4Aoufzr>rF|UO)x}x};sC$G;i)52S*7eRlN=}~Z%;mC@pg}?2U6wHp%iBGO z!`vL!qq07cDA0Qe-+6FtVyye~TxXRh=JjyVf;h|%jt~&KrpO`gwY&BPXOmaYHP5Ae zVH1;{Bd4g@3mCIERKjHeSyLcPB5Lpg$2=`iV8UM*Ey75y$6ui$Hr_4#i*sX~wq)Xx z)sSqL)eL7^J`e4)=3Nd;s+fkFkrNw*gVr)9sTIs{%-v4k$yyN61Q|KG_ndSuGdD^9 zGqM%(d^6NPkyPOcp`^bRO2^F}2NczGx3k-WTM!F2?mzBv26_HeL6r~R=0h=PgKD3l z+-I$Hrs{ZYZB^dAt!%eurPBq!9QUhxo$0MP<8(~9^J~m*zR?@-RGw;w{-T`j5l~+B zFM*3<_JkUes17^;Gk@2;Y`rtxON_3a8(}B!s=$NJJW^La=sYCBz#&-jzk(~V?QCL9(JNbIh)UkfYf(je zj^%jRspBXMDRrWn`nBUc_BixjuRNG%;TKqG=jmy7K-GFXB*th8f|LqW$@g*Wz@avHzNsE@MKsB;IRN02t;Oe>6jvRxbV;fXdBVE~= z@G>pgQ4KG_?D7oqXsPP@41gk>%`>|GqGvRNdEyyoh&B$NL(yUNCJ5_-F{~HGZgYY` zmRZoQ!8FcBjk# z|8DQ8MWNWR9W@BJKIcd{s)Fa76wMTcLlFY)@3eTsbI$XjQEc7-4&?rfv82$Y6$B8F zh|T%`K!jJg@IeS#j@PJh;oodlb)De(PRXkDL&GR*SdXvV1}k30cR<_U@x0^cVmaKh z59>)y&pU%Og(s`Z&O}|rto4F!Q_%~6nW`kh;O?hkMLS+_UKfzOh*(?d-v6S=A8LMy zL4?5{l?CjVoNu*NGR()t=MM4g#0-Xm0pcn& zi(ioHrQ>eHE+^BAZ(Z^`&M+;qvUq=*$Xf9ZN-I$&%nrtLyPYa8!7HoZ13#0FjP0cf+A3AppU_0N!W_^W6z z{Au>;V!uFh{UoSK)qTu#A!O5t-izwH)ves?boK_DmFPBnA`M|*(tc;4o@8aJlCy9y zsMzn+5jnBwQ)d`)4c+R`P#O7lK%>Jc@>|`(U(qF^8lriHESjH*iu@Dm;DT?Qei0`R zQp0yz|LXd^vydU*_&p^OyZL*K05=_UUgGp?)bQZ?c6bG@g;ce$$nF@0g7bruB`bHh zD}-f==Ta2~*T^ zznyMTU+Lrwi8?d;-(bYoVuoZ+bz7_GO-=uHyURMBC`Qa|Ak{~3n0Nr$0< zQ`2iQF@!w+$MmMdknX8jSKUF@(ML{BFF69-Ps!!}d<2zI&yN2`W&aKnSoIsovR7^S z4VLtcTmPH0$-}|oHyv{>X?K9G03Y4k@0c&XAJws}YGgEF2bm@&dJd}O-+j4ie(6d-<`-%>5ZSqr|4S`r}h!Ttm${BilBIv$DJ#pex&3iy%T6{d|-s$%Bc+l zD*Hc)#@fO_m(!D~{+QGhDCE%c0#9Iyx0%M(M|EJ%+UN;viu#GtW6LT>+Qhrl6WaXs zSZ@kHWWrJ74LDK1$b02^7`sBvS1E*dYi=FA`X?+v5rHJnzun#ufrSww0I$>3S0`O_Tkgx|-abNY1LbfEb#jAwjE5@Lhbnz=)Q8-_k2R zCE_Y{aH5&%!Lo)2FSxd}4`gybroC>c6dEHq68wm^iiv4Y`+#_d1>ys9gP$4hhWNm$ zh?v6wRdR+Vp4#}9Zw7)9o{8~S%VBma%)px9CaKA8SAU?dr_&L>>dsd}sItQNpVOXy zi&y73fllr^JCG!nKEll4E!78$(TZF<+TGV7kRGiqb<#tjbRplPD!Fq&9NTm#m*UPe zLS_ZyR7PSnGaGiVtD4T>0~&JYz-?@&DCiQnBIp`FPG#qHMc?QOym9I88dy&*PhW;? z-5Ehp_hrad?KV=&k9uR>_-=s>t;w;a4m+Z}VKFnzDOvJ-o9zQA2RbwpqW0K98N zpmP*iwp<_>=N`Er@S1n+Dn>r*&W_kKFKq9qMSUZA92+Q(%lX&w<2|KS{N1dwe@aPF zU*4D$@9lJ4wHp`c=#5BFeZ~dGdLt9ml5v4fbLxLTeq79U;crGCJ@t9uY0n@3cKo>L zoRVK~b>4qYeICoRl-G-&DE#ubf;QdKbo}@fmC+%}K6fx#1aMIRCY)7@lE0hCCZC3% z>rQ(f)2x=W=PjvsGJ{_yi&o@G)Se%{417~k^jp7#EFRht{ICtuTi0%`-v za&iwnznogd-+w+8Lh(PHn*aSnr@k*$R$d@w>EzRrGf#VNecJQ;H0k7l*>T$QiqoDK zo%TGFXPK3Y9TsS)_a2Ik>U8yKnMR-XoZ0ODCoeG8!)jx}4_>2#m^pg$lRr5(pg+IC z{91uMmw@wVh?gZ{!LP(kC9BLAsT~fquA>UBO^~S$=i6{(Pb-$&4_^W+Vb%W9z(ah8 zGha#zQ$hbvR4qULF_`no{L0 z#gn<}a?0N7)?Oay=fxqY`5pLF`~-x~UR5w5a7nw9eOh7?Bm#Ly9m7+NpA>MkOA_J8 z;=OGXl<&&G>Zn*Sv%B)N#bvIpElwlrt_;LR#hpkjE@6ZJLB8;`Q^&3h*xvR~)tmMi zswoN~oHa2J9TiXROI7w&$ie)HfmDxA{XfdS1+J>1>-#x}gK`v}p>vEB zCPGF4U%|aO5)rQ_PJmNl?>Grbj>kwwK$|zt8-uTUoy`%&oQ7kVcy<`kEhUfdF%dDL zNmTnF0E%^9oHQ~<3UbN#E>n$F8C+pxp zrex%3(_HlI`>ow}w^@dnWjJu;?bf%@+6SZ+_6Qff{JNi8Yl{ZBEnfEENV0|aS>22@ z##_0`&sQXWYiGP;k21^lW*Kdk9n7+$iyrZb>SXK0?{}snMORh@BeNhrv` zW5on%WTS4fsqxR<^qVNf3D`F33o>O%%0Jz{QHb6_#Sa5Tvnt?S*gH`&_O>@}&ToAW+|`FLCBw}s_nGAgZWdWV z9>%kg=Dks7c|SiJ>Kbicjxo!zJk2v~4oCjlnE|+ zU})4W2tct&8qSCgFxe-G$t;{E#ULCdcA7NEJ{kI0j@xaY;-U{0x;s(E#||IqAvDdF z4o@qq*AJVYn#!+Z#eZsqe=y&lc0;}Ch~1U~IsAk*6z|bg|;)MY+6#xMT$+pwBGn5){^JvxHEO zm@OHO4eV677g4Syv!!;zBjsau!*F5$f28-T>a4M2FyS#68w<&n1^;Q*V^VjaAvh^5 z8t^T9OyUG2W;me;txudIO~b9ta|~5ujx+}mXS=_INsvsF=1QE3qI@nUJDC!Wq1Z}i z=St^rHN94fqxsj6n;`t(3~oL1-_Yy5=V9^!DB?a;t)}hsFh+LDG%HBk9E}qeBu6mM zIGZOk%wh8NLYh7w_63}}^Ck9IVhA`yZNBsxK9{{fS_p?-{Q|UplwzOY12q<6nK}J$ z)xU77)SZf+fc$6Q7&1CfhQCFeIal)p*w}Y;;R%fDJKeQV!dm54(sHEl5NU49mHJ== zNx85wrcv;dfY*HL{iHNigzk@}%})Y}7tl%E5kb0*yBcwn)sNSZDy(E7?63KYr0%gi zAQsw;KKJ1ljGra2ZXRsyBI#9OMP4WCb7#f z(I@rfWzyGn;}XZ1z0}N~O1dHmE%M+jmu840>zGy#heUSr6_}?d=)!VovUtklwfLv; zG-@H@3;d5i&jA!1OmRci9J4B8z9ss(Du=+|P&L=A$~FKSQdX->yN#jSL7HkS55$ZeVr^l5mf9eAE8SMzd+I2^`sS^t%K2KMiRv+IQi^ty=NE2@wefIMp-V}ZF^U~WkM2uw? zVl+o-L7_CjzRX2K#$y|5O`$YbaH<5#z365>lTGlDaLlu0Wa^8i?9JXtIkQ@-;cP{& z7vXn%8b%S$Q4HT16z_Zn)5iKhG8JEL7g+cbWM3aW_9e_KppX=+1bU7thG`ZvWDeo1y#L>6+*bUX(iG4n=NI5j} zGbywXTiwWi0VZ_rtI}e64Yw%uOWEfixS9^GhC?g`&qZj;25F2PfWGj$G(l{%Xb0FZ ztQaN1Zr*^vO`$_?2>;NvH>5#Lv^r`d_%A}-HbRZeqbgjPiDGOqzJY~V0S?{&O>DBn zCm{|Isri=F4u7Y;C5>?AV=DMdWAxIufIR@xg-z01Ht8rhJv*8r@#7g|6OZd1r_wE8 zO5f4JEl|H2iikwyF-Y2q9(+d-1S}LC4!vY6B%${ze557SvvV!H6acT*o!dYz=mP@$ zAuh*x`DlUyLEdchF!NwkvG^%4>1}D4SpT&iTPD#e{mR==>ZAgEf*l6@oYB+5uxbwA z(rwREk9UD+;!4r8-j$B<*Zc2~_JEH&cY;f!FYD3k^qoMRt%$glmILfK+X`s^JFI#H zVIa=;Jwd>>-9UlV_ZX!Z9r#^asf-hD-V=_1L+_zOelM7SWrQ*v2N}EIQAZxOT~f5O z(0Z(+wF$h^iVU8}X!-$^7wilB5Oz97E&LlFN@K)Ev=9u7A;ZICXh8s#NyBbBM}oPo z0H!$Jmx{`yiDpy~Z$zW;HDI&xJaR92jvAEh&dXQmoL3LwBjJ96S(g zu^c^IrDuMGi5If_7Fw`JQUt9$U~GZobYteD-Ft+NQNIW1gfo5i0yS~)~h#=XhZwZFcSJ_V?FcgK3IZSmfjB!D1*+MiU&r4%kCG%k7a0>2ctok zE26@%>4Y;U7DXZu=wm=0Z+#5R=l=hzf#)`hpCLglo}pl6tRM>sN%D>$8Fksmm{6Sc z^|ACRgZqFq50mb95KM?@)Iq49xOotGvzj&^M30xyAzX<=Iaw+)Z7`&l(3OK|{2m-j zBt<&cm@_LjDhKLgK9RcLe1={Hl?J%5#_wp2Oj3`yu&r5#-)OSUhI1re1$Jd^LgpSd z6!CjGhp;eFLA4dge-!>1+FEOPn6eT>o6#+wNiAscXTU@pG|49pf7wc?a~QW>HP@eZ~RcSa<3VinZD^^_0*&R7%`fL$tIfZbsO z`WMo2F%gDbpvo^KAE6w1q$a>Ukm?^m9?25k2N^RP_PqZdZ-bRaQ(6Yn09JmCIHuHZ zA795J#d5qOYwL@H{6?LkGH zfDp(fN1wKSBUV5BWzlHkBlPrR;`S%-O3^uIhBg!lF1x!HJS$6Av zBgKdX<1k%21$6M=6CF}WTP@#!AbDjk_ zFOpUQ)oK1&^gEfJK8r8#(n<>)aE$eqnzParQ`57B`(ZuiClD|ew0?qY!6q<1ai;Dk ze6qwqd3M#}J`%M@(zJ8Z4z!rvT8k8Y#>qEv*r1znURo`X*xaxyjy5gj*TD~6*a;F} z2-i=_1*snZl7E3&6_sBA{%xb$3z$rR`)6yp&hunH-^t3PD*uY8QfCBg9i344xQ5}Lu4 zOAwi6K-_kdohjt~yA+nd8aSIfJXU731Mp)#fxpSmKx`iEB@x1SEx9Hj@?pyFpuB~& z5lx^th(d(juv%_eFNPt0jcdHCYkx?8b5aoPs#IXp_0p@58+JJUKe#4cbnQTw_$}ta z4C9?t{+Be=473RTTl(DmGf9C&P27$7%?psR3SB3u+v8a5qcIG; z8q~Yl9HSbp#|jZ^H&%O1*kZdV$stD@!&7LnL+)jau`jFwZ|p9zId_}0S)p%eCiej( z^wU1_b2j@20Bs$wOWe(ifDElSTFATnK16kExPA2Omhz_tCi5zbrJUVEgImeNOptGA zB}bcoR<)A*3gB3%V!$lH1>hvMmP?ujT%@?o-g)c00?g32{AC}pg@83t&oll5|5z;= zj$ar27>{_Wf>3(uQ9h#M#OvI3&+Qvt=g(TNHwJI5^?IXOyy11ev|evKix@Po>mtM( z2pNwov^g$$1>&2$i`KvZL8`BU3oa8*oj&Hx0vXQjyL_I)n;Yc*Dw65Fs5pCWUlMDSpl7yQ=@ zmX~|k_ES_Eh!Lt;n#|UBak0X7Dd#~DJi8+$_4naBhtlK_aVL)QqhR%KrE6*OJQTU< zvQoGo(X6SLvDCNrUU@J3$%e^ctmEUMp-J|m{JZ@^^vZNOgYPHYCl{cAiHg;_BM74N zodCPK?mjt>Um78LWZQ(HWPBZl`y*sN)8*O-xep%q9x1#_)P8n@>1K!EOAWTZW(s&iQFALsjNscd3!W_9UH5>9CoE8 zJ(1~ZQ#coECY9sRgB1PbI2kcw=;1UuP**eM44f~*7mB`mf{ak-1GIah9BDg9wG-u+ zD5XFSrNmoc=&qh57nwCF{Xy$*NU?_jH~-12+%7@@@(~JNEJN|s2QS9tV1S#K$UTjzBb!}~ zrjqGUghQW_`w2569&a+nFalK2^rz%u^!-5~b>%PNSa5hswhob~{V)67Np7ddF9o6S zf!D$w3PQCp%jAJkY)m$6jLk$AyDZU}sT=6n0L&Mb$s9$R@5E81IZw;GIEJ+Ma+&?- z*~>kXR$GaD%tg!b$x?mua-fAkhpA|gdwrdTYFC=jnM%boePPl}WV(A+J`YG-dzM+% z5M9fY?dW_BUt zWsPf@B%fR;San(ss3krHhV=YG!2m_S-YAr>idc*|e6TGQZ-McGnfVcb+qhbe6acbj z!s2+PRJ$59^0hJc$~6MpYS+kf5H36FMY*pHVZrNO0zM)l>RT1(S5DS~^w72PVk809 z*A>b0*sTu9gD>3~?!z&({CD1<<~~qy@ON`Bbbi!-AU6GT-vaC* zblx(Cy_Hdu!1w#2NGgGLST>#c`wBmZvrTfSv&ICVNIEqPl}>LGR1&dSyg6#Kc#|DB zg+qBy*1d2?R&18psZ+j1e5!T}YI;80W9tncMvmyMGA9DU*O`Dt`mgK0&_8du6|qfT zB=~0_Rc&bv!JB}y`3zh>v`s!I2&*|ol)?(Cd|R#nGg|kK_~O2I@ZvVGRHQm@&oua9IFK4vdQ?U7$c4{dvI zWT!p$%7;-+bgym<6o|xqvT=NTGb)etg7bL;&XmAJ?33RTxXTJCE1cGf5p;?DLb8Ye zqFTz{547E?pWQF-;qPxgAaAvQ3;+B25I0!$f`js8>i#8ISlt~6T&nmPJ`>+h^yC3|?wz##B>Ph5V~fyV+d1&a$fflra6$A&?>_I{T=q=;5Es)9eDJZm0T<-eHJi zF0GRLIM15>zz*1>Y9wl>eW@zOOJUBRJP$L!00CU&EZ>pNbDq1U$HXgDUtlZKdC%RO z8iECISnle)(69!tWTSf*sq`==K;#S$@ngXJ?5SmbQ#t}Uhfy4nqoaPoL#|Y3Re~>> zjhTiF`yzJ01J5pE*8tQEWB9ab9{l`?+j%3(QF)|w_iB+3rtzpe%~o%4FLwP4L}|#E z#iUr-$^>^^4ID5fdP24$to%NrIQ^x-a8nPCJtjws)~2D0tSC;v&mi!JjtOma<1yKY z^S2O_XP5sLwe;F!P|KmaZmt#_N__irH7jxyd|ccbd|c+wPdW}A6;j;~x`fYsEO7XL zEw2`W8|8c>*MLYfPl01#Ba0~X@>B96yAUX1 zfaL1j5+0ywh#$`S7Ao&ndf{70YUFr@dWBQNp%UB(Y~vh=7-|gXL*GF|2Yr4oPZj3^ zG7d0>U8jJ|K;BArT6Tyv!~{HJ9N~JF3=P5Gjo)Fr1=OE=8iK%i2`I*v;6N%54#Sej zengAcbm8qvKY*)&=?DQjt(ikFJ0q{Q;oNv3`?Jo<>CnpdofW#R-~)4if{kUcJt{c` zO(67~Tw^kR&X|YX?eZl-#O$)TK7{%^F`F?LWD!sissuug=3lUyo$SYkG6#w!vd!Dz=CJ`aNbS=SJ%mt^A@>F__jcw!sD3N z)qe<0s`L*qEa)YF$vvsxWjJy$_h?OUf}5?VjhBT?$M>QIPQ+2t9-yxO6?vBR0aJl1 zy&`uJrXIVUcr?sTuEXcr6~n;&uN*BX&IqT?FAomU7ylQg24qa_pYmJiP5D)TtmrBx zSp3a<2`^j~3Xb13VLXd$Sy|V3^ptxIPY`!<4N3zxd;ft~!~c?FOhQfjOAd7XjoEFe ziwmO!{_GFnwaoiVv;tr($Lq0w%R^BJ#VGG@dmdW}O-?1-H;FONDD9yc0dE0WCu+TpGE z3V077m&>hCNtr*gF0^2O0iK}NHGDOeRdk^W<714FJjz)7EFRJie=}oe8I8@^&6E&x zgHLHYILR}XheP*orob_*uWP2vu-WXCxd4MnECL_t;G+!0cd~sHBdW%e#nNCyWZLEt zPP`~O&B|`6Qwb3`VD*Z7#2Gh4k8q5DGRy=bA9{m%8{9%sTwbWf6`AF6#cF!Ig~GN% zaSMPCa)S$`o#(y@)h4{9!b+J4f7;YiVgIk~(TKo8UnPb+AuBjk(pTxnukHZ@Lmts1 zBGTeEgEVtmVwGjBpVE~p_$ePlcUsd*;h7hP`PEiRqTSmwJ7Zfbotq|Jcq3XXl^vU* z@7!&U6G}wMT$_gj4OsA<=GJq4qd%jJk1>*(>VQzn2oSSr3kUziIx$Q+P}K_oN>4-p zRs|?bs2qpV1WQ5;5>)FzWj=bJJz0Y?ndj?UxSVbL$yz(=9;C#Jg$gGn90$SX;2MpU z1_>NH8lQ0Lf^40Em}QCB!=Lya z471b_g$Xb-LpvaAItIhP=%cUVA442GgRr?fUE?{`%uyu zka41P(JURAo#3Jnuw z{@u%sf%ys~;P?)Gt{WJPY2O(pK35y2Fex=aiKv?*(BNUP;bTnS%xM|>K;IgqW=6PT zm>3;Mrv+1Fuu0qTq#&2#a(10r8m-SRfd5Jt|Tuz|#wn3bWhC+kqS~(kQF| zHBzj$M=8Vbz}a3=8fa&>W8opxuf4)@A-6*5j3U3i&}(a-6h(P^!7l3CW4@R*22f@h z?9aLiXon|0fa9xIw8E|i!QV^93-m1?k5kn0qLozbM&pLr)^&~8bWgZC2tqX-Q<=TR z)!+^aTdXi-;5z95T4^OFSL_2}EeDCeJ0fUNpgb0=I)O9!o7B_^9da3epWwd{i3%!n zeuKAo{V9+y73`}Jv=`qQHE?hwYUnAQl}lz^)T@I081b%4Th{D!pIemIIQ_)t1TcP~ zc2RvR&~O$j&fg~}U7Mg=@nWxAm9LED7-j{HTcz%|DIB7<;WlLv+Rp!z1;*`45QZl* zv1Q$^7`bAQ75!pcc)(MdbAo>cyngm}$U&%|5#5#1&Ne1nte_>`m1uj2#c=gQ-NB2| zoOXxOrO~YLIt(j%Y<3EUOE&lkDd!HsLs#CRbQaSdM+x&-Q>Lmr1hW%j!l$R`A`;w< zqpW3!(#Ywl907wG-b>*5>|W@Zi5X?R1ZD`EJJjISIh@^h#eNy`vL&`esJ#U1l^vvM69eWh{^=|4wBPYM2Q^p+8%al~YaMB~?cjg+s$(0Omv44^>1#|Xz5)f4-+g)IN{{4XjK6e2sZgImF zX525a?o);Jm#r;7f*idItwfTuFJ`YDW{>TU4wMESUYL$m{uO=ESQHiaRmR!cldT^H z8_flnQa`1ivxE5t{C3}fD$DvQp|t64bRx7rvf-xO1q|s#uKuWg;%-=jxSLTpK#8Xs zbi;NF4xk4i#2H1rQ6w0}twzzsD7qTOZAO8BJASX5QFJ$o9-^RW$@ut={^)d1z5&5B zK;}yEVw|nw`B0IK~$BD2~0sUDA3YiB!g1AQTHK$OV(g;xuKLl z7+9HV6lq3ruP7*fDEhv7Fu*g-`it{*4hAvC4_7)+NpE-ui&B8d_fctzGJ|qb@j?fF z;ROH1uOdUI_`v-}lND*!{V_&EsY8@h8@4tKL609Wig8Af!3Fq87iiFB>6pE&G6YU# zqydz$euhGO8PA323!-yU@vRAzo2rcFjSgI3djkrpNyjIbr7DT!e=pvhj6iyDV{V7C zhT~E9p+E$T2a5-3Q0*S#w>pczY0Q1btL-TDUJR;ET;2aYBT8RVE`_6It;_`vblhy7zWUtAB8&M>B=&ict1X`o`QoGgT!tT zzN||}m7vj>BlIhgQbyxm&TwTQy~g)yhAZ>wD()4IP!?0yG3FnetUnxM#honbJ`98E zWn4k?`V>*hl_Qm|^!!-d_a6h9{RGvfTeDer7sxAT6hMSjAj6eDByLQ53M-*CqX7Q0 z3_PF3a0=JJqx|nz(vc+d)TXt$efv8VYM${UTAaa{Cp zr7!)+e?P^4!$9~7nK{bt!HuOx?UL*$ zXwTsKnL-)hrQ3oW>>u_w1idN1O=g`uUWkV2<3-(s<)XMjFIb2+lO}+op=TJW^Jh;` zj)C6}o+y+Lu_Uo#B6tQ)e3%HVhJH6m>Ee72j1K?dywv=sur`)4NmwON1G`a~3!7Og za6`B{ds2BV{NDZ#vT!8nL8S`{Xy_rD$HxXOrURN{IdWYW$$bzLD3r-=RQI3|R<_Ba zORIb=$z$KO<9EK_G!?~ z2GZ_n%BSA>7zVaP9&+J~!RgAxC=p79uCUH&X$3dwrUYk+p)4Y4{v+T8*nIv7pp6yP zM*z$rRP~6`*K?8`1Ip45#UmV1HUp{+l%*_XYh$(WT9y)L-f8S_%gk10m=AJ)Z_9S& z*=*RA)`}II#;h;EE%~Uz%P(Rs@*ZWiL0|W%0{00#2s4%E(8q*Xc(DMzVv~dQYeR7z zI}0k*^SJF#xyuj}&<*zJ>RGUmtM%Gh(CyH`HujpU^s*Jw<8zfo=0HpXIrwqRD7O3dXp7AZE#VIi zUkc+j>v3rLtm58DnJ>bm%6nWf7ZL*XHy#H@pxvGS2A1F)mVZN^WJs_Mg7Z!m`M^Um zPpLrg=7o8XOo&H?Va+GDJiP#V*J`R>06Y}kG7^6e#GW0@8&b4A0p)#-Ui$>Q3WSHT zvkiLzbCft?Mp-65hqoBeF3%B2$@*7eF6^IGSQLf@W)AssuHxHJyMG!ny5UbM8E889 zNvIGYXhW^P@+3O+62&e;0Z1%T`rujdBCu^N!7Nf{3V?;uZHw_Wcz72p1*Z02JDgW; zaf%N4FHv&LYA-BN-o~^iKLry5)z>Xmelect`O5%mpnmz&4065xX?zHuVCEni96$-D zROFW!@8?sU=v2l zhSktx0qZqTF}Kp#HG+pNS)-i6mFYvteGxZ@(8d?Rc`jP3IQ1`rBs`9l+?UXb={(8U zhJ?iaYe7ZH6uefr2^OqXK8|`Blf;Cx9wm3VVRk_axMD>oM9*0V?N}g+54plsHb89a zAr(q#?0SK+>()cduRs_h!+}|7!+^00I<#Ktd$XTMk0=7mYJ>v!;Z=?+Xdn=Zl@Mo< z*+tOC^*ASV;$X4TQ%rPc{w&oxkmEA^6{TGx-+D2ny`p@G+F*^7#UP@w;)X?*yjK<9 zMw91Ro778R1?M!mm3df>DS}VGCQzqwKVmn)CNa$XstqPaSgv9(bj{!y*ER@P2@YM8 zfI#z%MS%`I=ReSB%$KWQH@yPJcx<=h99jQ2nCHO)-6%fH-4MHjrt*;S1JFgJ2%EEP zSHD8p8->V!dZTjAZ1?du6-C5N4M7Ed3GftB!06cKH^D6Ng|{Fk5M%$AG6z>3Hwg?h zb&IDrDZ1HM|IGp?r*BqfYD>(u0&a)@wgP&^wSH~0;w3_!N<`NqN|>+V*kff5-`&1V z3A4W%K%YGl*oNXi0g~2jGyK2X6eH&tPGDJx-KQCE3oT>i+sZNLYbGX``^btapsLg9u5rgsLsoscsjI*A4WZMNUHHKn$DcziJT3?{)yOdu6 z@XXzoZWTvG_W}PZcZ0Pd2>b)(W9M6DZE(*I*e|B%eyGf|z-cR2CfF|OlgdFA|D#_~ zf8isH6#0vVQzzpSBpO`135P+f*sG{^6Mr`EH>WCWrK$b6i6cuUAeuNe97@H=W6EM4 z=P^*vJrw*ExZgm^{|cZ^{R%?$W4iDaL+>lNHN^b^0vfDivqo$!I2_<=Z=*(WwGtA* z)&`Kp1FwSt^ufW_$VO8QHRThA7(9>16LbpYqIfZbei z98ULv?_ z$P{4>AMw=1n%)I0Y413pT*ju_(vzTk*daAQ9C%8<0SL2d;CV9tUVHs-+%hY3EkxKg zy!yJ))rm$|CmUUT)9C6{qpO-mSGA3s#lY%Ryl>Dz7~4+kCgqbfKTRW%s$T1O2m`eZ()I9 z(eOKA(+e+j#W6WcF0O+^A~BPs&I%gt^9H0_T+Oji7o(^o$>$ z!{c|(DM5`M|F^;8ah{||+|NIGwx~9tm9hREOT`kaw&#`5Mh#qTFdU>V{u7WDki6Ca zUJDz&@t5^POkTwWC2>4wC*$pYtlYEwVQrtUSqAd8&Aevb$JciAn(ZaN_A;+oM)I}8 zytecn??8IwXXO#^X1G6vGAo_dm~5LlS1CxwySe8PVAcB{Z z_pLgtaW<|K!Ol8vifs(5TJTNPu*#BlSsCpLWANcA3l?U9p;W&cSw<@_!yN~o$`xo? zLf%lhPje)qyaS=ch)TKw!1Gawu!!~MN`e1p*zj_@>Mz1^v3KMO*o3k9R49QyXglHs zmlV<NJew6gJA!~SpZdTc%6SP~HpQm$e(q5=RS~YuHdMa^3GMQ1Y6tPT z&SYzjVC_nq$`Kk^s0FIpRrd8{+g0|PU^TuQ!EfTAAMNTugkC3jsff5?d%HQ+_YBjh zRqy6*%DWqJFsVD5W6vG`RpU@gY!Q0Cx7wML(2J8Njx<-}n+V0><3TCLM|3myDa1VF zC1TBDjE|a#7x{!x6s0~YFVJ1{L5wMO(=SD`ez1PbhEsfOd*)h*RN0=BVK{%2629`CEZfivdx>Q?IKyr{a-U!5w@Jp@gl z1<{n)NQ+%@E_Doggvf_Ly~Ks)a8VVY8V)12s<;c5L!DhU(Ug5lP)NbZw-D^n&V{r5 z0s%OWX93ZRMrgPh=zld(<)BZIy&z`_hq49%tcE8^=sr%1g^G#A2X`4OT~EHM0IOHL@V*WrQ~)`2=M>2uvso z<__wIf-z6n_~jR(zT~|hJl0085X3s|4N()Fj7)}sWE+H-st%z*v@w(&sz!=b2i5@q z7J0Ho=|{F=9K2B$s&@6}Ypm>NL}4Wqhgeh2l~xYRk1rw2C`Lm6jhFH-BkgI)^fp*6 zk<`~f!QQeO2IDqLR-oAUjegDk@R zany8p82Emsi9aR-X5m%Nt@TgRD-*ySoA@J+Mjini!T1w}=wuQz^Ldsj1K z$pVIcJ9T*zpIX;WHNrcwD%;Ve6r>_)N6{igTg`tJL3zGW>N4*R`1}+qeGWs|6opv_ zQ){nw@n(-74net>_eq>Z7(r2cl_RmL+5?q4Qf#z3LR4u@RVjX$hG;dN9Y6IQ)ye4N zs7`86!36(BrJDnlg7|S*%t4}V%IO4?A!{biI;-fUrodq$byf$sI-v_Ji&z4%^3Yk& z?hF8$SX#PDghiCbs79bBhm0`cTL{m52N?_3alk;V$+&N^4t(d$;RWYYeQ18Hpl#lW zvT7#+YhqPiy@G!kGdI;dJq)COi~2rp@4iJHM0>}pp%fmcekE`Ot6t53L;msL8P_+i zP883OK&Oo5TMtJ;D%{Ey@#;u%|6f%53eI-xm!R%&#+tJ{hP-c8|3qYftqU+6CqQ*k z$JuD{Lu$CbsjKSn0!u9IroM#W#=+gyukEHYDrp4>;Uo?2sZO@X2hv|df@P}gsphy6 z&@5Cp&tg=yp4m&qF-)*4dIMdm^@uywzQ%r)J1MCb5*g(rsug&y557zN+sk$<0o2I2 z(A?jlXWb34Wb1;1qSV8p|M67yp%?P;C9BU1Rog)k0r2@(CIbco=|ZyTlixi+g|6s^ zkvs1;run{jyzd^hvruPQ@wgj5Ci~mTHc0L3EzUG0*D4O@9E9#*u_gsL&+2@0%I%2I z`ivC5t;Y^l7m3BcRNz%N=AelBo6Pxb(;yCTHfb7KW8UI#95s}>4#x|YrK$aF&hF?E zYp1>ixj(^mJWRa`!W5#mYr47&0NS0d9%d964o;OqRm0WE!vDq4Wb|S*W3dLDPeXFQ zy5mszvhEXdxAZ=BsYt$K+4+`b(Srt$P$!_#(h)*ExG+MU0roz2q#DObwO8J+4#UIR z`!Pc}9rk{}51K@S!^2ZYt9hswQ5z75?ZCf{Ru_q+)Z&s>js@u<*Z6Ck6=p1^3L#Pt z0EhZe^#kf0T&0au=b36)?!tgTF@-qm)dxrM)NDWs!}y<#;$&SuN3*Ow(%j~ZSB>3-t*Cq>5+;Z&5qB_pAh&)elV-3~H(p)j*OL*z zgc$a6O+bfM(G@OwQT9X(8%bp*3S|V(0`<^Is;`$&vHD}1f*l@_DQY_rRL+Z+k@$sD z?qP|ACwydKv}uaU5#LDcH#BlLP8RZiSnx8m*7t@+RwHyKX^x7M6r4e<8)Q#aKQ;4xf^tm;^$2FDyi)sLw2ByNbm zn}i?KZ;$R0fJEvTTl|LzfT`?-#k#y1>Ups11zDJ&yQnG)NLxXE*|_RUnc3oM9bfgM z`fMTedOV7&{`$&Cu_P~sht@re7>d?R)mZpqscZ4)2Dck8?s;mn3fDw!W*kl2W}I8zRSa9!Ict7Ph4&;2M@mC{t&*V z-N%7|2j&3xhEml6Rk5dnlOq*?9y3?1gl?-}dmJp=o@UX0_5^g0J3M+ZLw2urO@lIt;CGrT$QD*qbcQCPzhA7XVn6mq6a?*sp?z^oM6X# zU#eZz7M_zlXwJrVS2~{uoJiIeLzff?e zj)lTT=wFDjfZ>RR0m?5_$y}~VsEX)r2u`s@x$X?2^-ru-f5eS_>(sa? z#ssF?2>d3P&2oFZ24cY-0Y)#Y#ujNyFk6q(DeYwdJ)QDj7V>oC%a}Xtn+<|vA{D!b zD15!JKsj(VIGra1|9B10Y5?gK*F#mY8qoKxhcFZZv;_%MC}$Du*!WMq{0p;ugQ)UP zCFu2%VsJhro_q~2F4TW}O+9ntD%F3~uqFY=Kr_~n&2W4pI!n)dokj6NvTcN^^cxJc zO>d~a-uI!ui8$m1se&rs0LKu|hk@*eZ$$MG^z=q3_C|B&^4Q6Zsv?HTGsVNa{=vp! zN4?*Kosah30*=@H8sO_ENW^?$p^p2{+2Ov;-z*5*(=GKse!ku#MYpO>wG1rWB6^ju z1q4)0OSZsd7{w1?NPy?9ato|75F_s~>a|s^L37v;!Q2xB2k(Rp21Q1RK-Fx%Zw6t% zQzCTq-;7&YshHN=O4Trlr;kyE$HjQS&H_PFG`&tMKTWHp{4aNNw zu?=)H+E8_;Z4+cC!mFW5z#IvO6exKZt1Bhj*c8U6k|_5o`+c^ln_y}$cpGmoq}sR9 z^|H5tQww$ceUACXq3u8!!7s+KcKLh&RSPq)7=&=FTOdd-53&cq7T$A!rLe+ zQ~fV!zUBjwZ0|H40r=VL5Zn{`Ydqsj36xg`-iU1;F^Dw~#t%3S4?>c!(x-od#%$vZg$#KxAiX|SeFO^kK)tr)Nwk{6B5b?1)(L2-`vSL*1-!U?H$!{};jU!>7| z+~zA50McpqS8C&(GWTIZd4b7N29VRM8UP1Ssv+9(`D)NwIyUY@xl1R%smfk`aIllsWlL-*fUsz-D}3}T6SMZG7u!4Y(&seJ|jiWE7d-gKG+N0#^6}c)v=%2jUyA7H3DnvQI>I&3||c@=n2t zctEifa{VBhO)v^<-4o7{9{^Zvuy_wUMJo@%w^Q>2m@4KoZCS_!D*I7Q7YmyVOy+LQ z=rJHD@rqF%KZR%Kse96@IT3MV!acnepea;KtV-&E z9LxF(;FC*fe*iuQI)(Uq0st7SPofiCE+VZ?jT4RHO59p(H0mG6$#;KL9E~0>F&-w` zAQOwuC@O72w+sAdL3g~;)*;U3;bl}NXFGnD_I1;YQ$)QQl6=!`Fktr5^u>?G@jt%a zpdOFnDax&f2?|GSy*fE!DaOV=^yc`nD`J^>%`Nlw(=_`cXz3ZGj!*}Q(_C;<41IYZ zeRI^mEtQ>_6+DP&8gmJ#oJrF!0XtXX#AMc! zFF{-nq}oeR6rQDPm()JOn;e4|8PE)Y=V4#eAy&4Kf7I z(cjf>&Q&H_6j1)}YMk?V^YR701plr8o9C|;QtltPR{ua(iDH3a&edksHH>g^*j9iV zJrVSOQ@7TNZWScH>`#>)pl!!oR=aB#u`Qzj2`)(D%TSaq(&o$RnI6ne z@5EDPEzIjIzRuSS4E|@`YpjbSlK}X#qWS7|SJduyNT7~a)z6z)DRN!|=+}t_JId*Z zE+$?B6YWF&ao>+MMdnZZJ#3J@rUo{;)k@qFma~(JXMnEDu8F19s(G41E4}uKXL~70-D|wjgJuqwqVpb@OcE)nc2*+H93g z8;2snuCdvO3>aAEOoFjr@+5B^90~;|$F8*#0=NxQ?P8^^(ylpB^{8DNZF?CD^ja6& z4ZFs(9a(V+~xA(LQaq?$a3k#;C@qDC$OA8XlNHFf>s167G@I}X<&j55d=>tVXAQDzEp*2B3 zsQ~~#cK#zbg6K2+m$M=EO9C(xrthpSKvTu~5xXWBVOXs;K*22wP&7rZrh%CesPSSm zPEUxW6M+KZ#RjAx3=VtBgEWrY7cRbxM?;vBvL6MRRR)QgwL#iU+=3~A_>fb4bha1` zij~1ywD>e<^5t1zl(h^tWRMLOG$pQ&_>+KY$NCk1rn{d(I%oTTZq6k(XC~0 z-1Z6)eH#^`EyUC65RDh^MHh=A;FeTF1*+WaXMx{6RLg=B1^L-Wa54Z%#;YmRU)GGo zv{20z9A5Rj3=F((bH~$VS!1u#VCDag)!=+$-AH&hc^lDHMca!u%2jk)ewqCo}Tx^I4o8tz{wQwgaO@V%~PzQ1)vk-G(D7ir$A~lh@fPrMhYE)%(24&R9mH{5?Ga;A5@S%!BJiy18x-PfuaGNNW6>!H ztRmLKA*e1^E5or2rMG|wyk@vKc{QJEIyvC8-i;~Dh(nt=>nu*|COl9r5U>Zfx+_jg z#VSDVHTZ+_o^bfMHUQYHfO=4nas!ZqE;U}fp0ES&WW|Fft0_Modu0Wdda3}L@fZs* z!mQ^{=i|{!7{{DT*FOP&FQkYBOgnHQ0TlHg8k+!F4##Q&=CRVKfWJwy@Smdw+T+Iy z0_-4ybN^OMD0spOSQrOx1$Bx%nJ@-+1&30t;IyqkJxyed}P1M|gS>sXL~5^1@z5d5Rwfk$uP z_y`dEMq@qlO@zd@Yb#^d1!NhUg{*6`>iZTjgR!EIUVDdj%q~nuo)n93l~S`U^7^Wl}TXk zh+$CMhUmTS0+YVUJ&C+z{j@XAEoNU*$ktyQ;oR!E%-%eaf+v}#26vR1 zm%-$aRtURR!r`#`@oo(%?(hzCH6OD=itaZ+Th89%H3PL_e%q`jp}};+Nt4hxeUmlS zzOW^|{HU$Ho|+6i6v#7-)-6UHS;;*RjD7S&_h9fgo%~YJ*j8GTqHV@aJvmVt-pQBUXF)`zg}<3`ly5G}`e0VgTFfw0<}S>2|(eOOJcOVj3KoYU{sMtcib zQEg#Jn123V%^||Mnoi<1{TZz%r4HA^UGJEnW8;8fo1*6q*9P&chel{UMU!5X-ya^@ zvZdhD@gp@p8!mICHVd%|O`! zSmum*SX*t(T^Q2H_&9*Xz^=SE z0nRo`+pdM_6G8)P&;+Jo4(H%7(lMvNfa)FtJ5SMp zc*B}H)CRkMadg*QZQ@Nt46Zp>8)TY_`90w{PJLYa9$mTZ-`e|r+bs$JsSOh@Im){| z1OYem;dCo2_I4CbL9jrtdD`Q#@J88I-j5#I`ovF*vz{yAE8TOSF!EbiV}PQ$Hb)&2Y7QS4A<6r`BH6yk^GfW zDT3-RB3dqd9$1O*MVt+KB1UcMm_1PJ2-gmiSlJRYKI_TA_wI6SA}@+eTB#8>Kop(XuP$>tJYTIj)YixOzWHti)gQuQ-P(MuyK|T4 zUioK?!TDf}yAe;QEwz0>YgWNnnxwl5wAPlUZ7z}benAWQ-DFsI2ODJ zk3KXfg0anV(^pdu()Iu*=r{75tOoBl<51#TLhSEa&5T;_u|^xg+%^9tU?qYUUxH{U z6MiZ^XRY=lM>#$8GDv$HRlThJV%w&duh&|8bIsQPVnyG*L2GHZmj{x2gNB2R#~~89 zW~`P09t61v%n@xJ(Q) z%o+^Fh178?xZ5P!yj7cl9s`YWI`1$9o0eENcz3%ZCP+Yn>@)w`MrS*$u^w;fS~0n&Hy6 zZXFW0L<9dKzmM=%_#8wqhHnXSXrd{+W>GD>WceRA^*MVnad_KEw{Kx8GAHF-4f46& zdVxvZnxuxO23tI(VMCRHbj$YE?F&C-b%?YNwUCI0uQc`TDqi@&j@u8RCw##^Q)5VN z%&r~A@wk}J_&NSQH~DmrT(53H;HUu<-mny8w(#Z6w~k#09kWyh!B;om!iLTdfY9L! z{E$uS*^tHy1jo7CA>>~P2APu=;v-fMtj4~+-ZAC}-2RE{?OV4_a{Ju^bi8G;Q?B_< zAl=#DuPtRf1_iJr!hwWaA88pvtg=gyzrhsI2lBc6QGN`vamn{K?v^|(`~sD6(&+0zNn>-5lGE!t(Z?CAs*?}c$tgJp&} zUWl^_()PiU!#3xAke0PHcApj|$UFg`4-1wYSALz(1uIy%_J(vEm0F!;ue4I zUzGbP;wisF5$RQ+X7Ui~z0Ez8~`it=E{qT$2LA&>BqdhHHNLWoBKNen- zQ6ED+`JNdxWyU%baMGj-C>LLStoa6?#%)G^hMDDtZ%tP|*7}IA&7%BXu=P_9Xht6U z$7uQi4Dtt@qlu;~__Rp{-0I{3m@Q{a5#UGpRa%H(I1Xf5go!=vpcd1E)kQ{G#$=1! zZsLNNErttA5KEK5rrv{KMN25{6D>NJH5&XUo^okm%F0i`S(i}lC)!)sn2f$Dyh8^A z-TW!$VjCU&6ejUmil_j~5~J@Hz*KETXzVN}=EYfl#EtOUI@=3<@w*Q{AN+WQ>YNE(?&TN?KBP?+;?zmGhX5h=)c{Bo&C(5rz|R-9vo8O zUxOnKKi5>jSFu<>5&H)bwemSyy+Bo;i_zDA4p{t5$(5ML)-=6R>nTRc2+(jikJ0W* z)Q5bm1PFiOx3LRuLKIdrtKgtZq1Y<83hElP8b@DM!T#PxeqX?y&6^~>s5BC`OyvV! z2yyvB^YyOBh+7pD_lIW72UKpS3twn&Lv9rx77C{DQdJ%njvxf2oWWOc^jToxJC1O= zdIZvX6+LuRs8?ogp+iT366^%9=E=hSWZn6t)|Wl8!eY#kaKOv_lC}`~gWzJ!IR*g` z3U(`ne+~no?i4f#xYKK3Vqs5BEqqFl_od$gY^L7o`yEDOYRmE8X%odBmwzGF3pxGI z&)|%N-@$5GLYaTU=BewCEi75zW0K6bV@AVmX}*oPF$52u(j0pHX$`s7me4~#XnXwr z06H)tGdbN$NxwilO*y0a3nCY03!Yh?ee4oBgCTCE-?$L89!M*GgwJ3J#h!&7fqt9? z7EPiBXTgjtsYK4n77g-7iUW94T2aMStJD)CUKGxg0*RU70=#m!N3{Q9d7yhXwB>jnX zh(0)j0u7J+Qy9g?e`+t`R`09Y00C%rdNJSPi4ahOcPA`FFS!b<+OS0nB65_%zqN1* z`U_pduD!p2G8MG*FBl~il<>FKS8Qu*M#WDcQqRAmkK^^czct<+ly7rKLT}z~b9agQ zzwr8nAZdxrBBGxx1mL55g$^rryEsVFuYQ#XQs>2vYQ}ZQQ922Da>;2M(m$RQFZ~ z?Do=d_XxW%3L{PYVFxS!-Ivl9`oe3t$KMDiOQEDlH!BKbjpFf0_dNT*g2-JZxhXLd zY%H{$I|!eRZHLj~RN8j#bAC2x3)i_rW?)c=UKZt!N3KA4(@ppE8wg! zvGlU|zqm)4Yk5yXM>n5bncoq^TZpv|cL<8i4?@{#pKBDwMp6DjXtX}RlY6aL!HaRT z&nYv;{T$D2jJq=sS&IcCrcm!#ceJqnd?>dilWeTJgOh!Y{P{>q3PylJPB7d$2V&iM zc6$&#F-ewb)-CQF(|Lzo)ljYD+|OeS;!Nwkaqjs-3|P927&xWHV`?g>{1dFq7R9@} z+r5J5euI{&tVk%YM z=3YGB8%W-NHXo~C_;=P)F>pQkhy@fc&qhEd!fPs1o-0Gz_%>tXKUaXSjV8&C>2>O^oIn6P)d{juji_inIW z*zW^D3+*Uvpc~t12jB_(2Ls#_u$#PeFkJnW&$>gAbsUwu(bWNHtAp`IN2BP(FLtqY z=6B*Ks}I5ucMJq^$B4HJlifk~SOJ&&D8t(eNhVV9g+8=#2%5_aMQY{BWOs}`&a9F+ z1bjN47Tg1bO`t>fKmgpzEyLH52{6nZguZm4{6S!CU1@rXyN~TQu7$Y5uMlE0%?I#G z9fCTy8xOnj!=6-jAH1{WP#V=x)wgi4d#%D*pDkV(j)%L>(T&fuY{1nocX_9O7Mh({O9b~Hn?fR#>yWV;y?lq*TJ~vz^-f*1+ z8r{;&O*zSKUlGh?HGUUuPIZsN21vg&$YThyG3?|+Z@`j2rq@|@Ml$PcV($Z2BQp@s6R%&5^C<{vy zvL3CpAhn~Z1!<3#T2NM+TF})}3(U$&^Z#A@oHLGS@9%v-|M{>vd+qyW?X}lld+oh5 zTgQf!oWqWK&3XJQxYaXSFeq41gxP^@r?I!?y3MmZcmN8}`YM{|a70nnZJxzg!Q_nw zqD&a(*>Fh#ZlZ+YXr`M%2|sbQ!Ik2kG~BtqakvM&>ikKkfwy~-Y4n|*kTy)wn1bAb z#ChQGu;UgQio!wkf?h%7Ogeu%Ix~y1?!ZiNE4_b*XOO==nRUF@jCC93j{t&ZjsR|9 zB{Tv=eKoCN%N-+X3s|Ij-{?$K-wAHjD>E)5&3exGv z(H_VZ>p=A5??j7^qA_=RWcTPM$&JB*X-_-bSWJBzq9HiA)6>8EI5P}ij>8qtHeu`D zq8t;BH2v>lnB3l0;l&jx_DkA%JWUYo~qw-On+3pEuWUD@RQ|Hm1b_suQo$%`i z!}OoYBTqft(9l&GjiEV_$G(^Lj`k>*p1qQOaDr!tV?IYbjGhS`-Cs0;k2HagHi3^dfxm15f7Jx8y9nPQ zN?w1_LBL-(fxl@2f7=B9t_l2oMDf^O9{t7pJQb22aldCy5V_We*`*+=eH>GT-S{|+ zPq6X9tAp$pVtky&2UlsbBOW{FPpI(;Gd?YiPb=f&qQ)gapWKIBmyQEB)lLWQ3Xw8P zjI7bx+He;_Xiluw4tnh#7b~q?$8kVg?oR&B7C{3{~4Uob`anIE><9=zVKE z#sdz+!q5@dmY=m_FK}?8KRhPPylr%Tmxmf6u<(h0(4*KoiKK-1*ClnPyazoU9l;>2NmTi;rz;iC z$C|2((Zb2x!d)?=i)O!;A>2=R5K16v8zE9EcnIBuOEw>56qpOu`ECLB?j+5^)X;-E zKkVs(dp5>A3@#^?I{}>WFQ6fc3mRFj2O!yTJ&bgE83B760s905%nk)lRPiv1l}3#y zBHzcrpX-bdZarYg$N6=ns&Bziq|WtZQe8*hTC_RAKFs#S)8@I*4auF2><(ErOuIR= z!GhgLm9sGg_MZoa0!!9;Ktp8?<|`b`pA7^%IS&{$YYxzGkP#lM5{@>+_}pTAh8mwt z+yyQsM)w?4bT6{P?5NJew2#ea{tPod!;R1FoCOvz^FWgCz(z8tY{7V32T{mn8Nm+i z@HmNRVeS}xdA?`4&FG{1j9!^+^wAUpnrcAz8_+ZZ$~B-o1A4%KrW?=<1Da_-4;s)z zBt7Q2ZT>71rL2kZVH36{#z#yTA2C2?n=sGQ-C^dKutlopny@tn=9#cH2IiZvIR=8o z0Kjn!Kgs|TAoM~H<2VMo0AruA?onf}8f6qX9&f_MEvI1}? z6$XY>6=0NA(kYJghVj`%otI)YvY7*5UGd*mG2*h0E!_RMD)>f>d@P=@qrDWOn>Uev z3(A@t9PR9mI_Q2dn8B@}w6}vl&V1T4$+k@pS;$s?!sRV|{l{DW6eFn9GvJ=K8$G>) za-Km?@8kkt`F8`h0(U>->1KP|OdvC!Iod)`O#63`T_C?w)da4#U{W(Z-jsJO&}i+e zb~S-_H-X>ND+^hc_h0>nV$U}cE&jq2qx)8PlI*sn}l`B0%ZPEw2 zw8}FeMB0aUTI4u=!iyezGl)tuen1~Ac-3=`d_SzTZc;NIS zeeN5cZ<lxon`h>C$V+DDTjva=S<5MHevM)R%oS&i4 zECPVk<_P3j^C;nn=T+P1k@VpNIg09zfM_2g_faee9--k!kuql9}G*6%VrDwK7On!;_`ENY^f}|rlDu5dsctT7hxOLI(KVqSanx&k8c=4zx z4DV9t%1O^T8;%OdF=EqVe>8ze9O?iXw+fzvvGuGVYRTFoxK1RX!@= zmSi4c0_Ezwa<*B}u2E7CIkYt*8-!`^&ws5eKwjjQpP)FJ>&?ph&T0+WwY`11wGJg(plV*Cx3*^j{H=3 z{Xylaa&&jTI>u5+=KT}qOe_&MSAv)AUKpOS`oVBT4%4Yrc~9(LXzvVwyuIUt;UA;s z-*ljtOrjW9)4jdr*HMR*F3|g_m(EYIiZ+zZ-KidZjc|tenifVvMx58T2du0qUggR@{OXftts{vIo*b}9Gu!vK~ZRoUT}-7*zo4Edjzfy z$=v`Y;{BPj;tq;3T9j9iye0xF5%vmQS@K|;JxU*&CBGXa_Vd^4ZHLSK?2-eMGwQ>4 zY&n7vIf-)8Fu+%hl;b6-S%7DV-;++>iHbR?@(Gaa!cp>IJnt(K$$UH!!*#T*P|b^2 z@KlVFA)x|@WwGC1hkvTg8H&_;pnPGFmdIW@I985#wlv*Z8E*08;N~*j-0YU_Y;A(! zB8a|WoSYPdRd3EZnMoFIKDbLBEvnas@;^tqx#Q&-SP37PfGVCFFZV|iW=xP5I-|{W zVsv;7ki^JiRnQxX^ZVcc$~~YseDh`tDj$c5reYJ8T^0ABHWg1`O!&wKap*lV&UEx& z#AD=lNE~A(%c+$1B*00N%Jj zM7!wOdGdr1r;4CF7}BASiQ-QA5wx%BC1ld@usp>;T0Q3x`755hGUm!X?KG!Yj-Y~k zImw3Y6`)2BYIw>KqMykJA%d72{ey=*7Rt+=Z7)r_;djmc=40|!34(9n4<1r}9N5>6 zBNS6&3F^Sp2vrm~LiHJoX_LFNJj}YobVIZ_ z5v_Y*c<>cqQgPK6ZCxQx!Q!6VPRudB5*a7*nV3^iR~&?Nm9&LAMv0u{N5>l}XR`~J zE|V#s_w<2m^mi8{R}hhVy4 z?OgrjDs&eM|DTZ4DfxN16S>Odkdjh&NOAUKcB?U>v_5#skmVqk@9kdie;b`=9GE!`!0B zzAXP>cXR7s&1HZY0dqT^{J=$d--tT4w(7=x~|C3ZTpe?}`P6S2{iPVP5B8RpT*H|2EEOF@)zJv7KG-ju6E|MM)x z(E}&9VBWvQzNaqNh!Go1`CjZ=y9l)7N+Uban+ zF{Xh;oIJNj)4{jo9U@R7<+R5&(G8<;sZGUpc@|!g6;#c)LtcLglW{%$wgUz4r}y0{ zp9sd5i4knKyu;0X$6`gEdV9d!Kw{eh-|~0R7(gn3I|Z zO+9=El6w!hhMS^j>_lvbWd4I=JB6LWsc+aLmq|D4L-xuzMQZY9RqyisukVA0g#3r` zU03!oBX(Fnzh555+qLXyT7pvlQ!@D%B2W-oRfv&bWOT9$VSnhpO< z-ud}L=AHCyUtp%dxcNfvBA#O40$Di6J<2fm=5XqKME(Tjk&epYkxW-4xH5)XWDi|= z5O>!n&kGIFGmm0khB`ssF_6vudgC#9HkccIYMs1@nVeHUV{ngns7IK2L~aAF+YM>AVv2H`GO6ssrzTSpTOWa8u>HkzIi&*UL%2B zT-qQXao%pVGvzhPgJK0aG>goYy2JFoh4Qj+fo?;iT;LqxkCO5#WI@TVW9ve>1*+j? zr{xfHsh0J9Gu%9KT8glwlrqJ|pjv?$jI4$X$$;Z!k4JuX!B@!NS?Zt>b$3Uvh&zY?N8BDcswA`}+ldmx-La(~Oqap_|7i9|NNzld` zEh(YSy8_*YO5^ov2`jSp6X4tfLGL!d_n6;_=690$y;nbFQ+nE*Tn9!VwK(tbaNXxn zaQ@^z{iS9~ABQwquMbt$8cSGkdv9wHn2mRU{J0cWXFA|g+JQ{|=2H6fWs1xqCm#&| zxU~Npw;l*Lg{HcdK}czvTlofvzPh!-I$Dw8%55f-P+f{{UJ$PIkL``Jc0-)uFq|K& zhOk?AYTObLT~dvUVy7CkrN+8ZY7D899pTG93zhCSd@>`HZei2V4pt#M>O~O>jN-@s8jKK+e1-C4) zqER$8=Cq0~iBncNAMnR{DNY&ho*qyjp+|@}HnEVds>XV`f4pKW!kmg_@W@ycT7 z3^T$MN`RW1;AL>p`NPm{hSpgO9~fQ%-tlCDQrCPYg7T98_h#fN4)qi_d=Y=9%W@lzy>*|g#6WhG zuP9#ZCRQs*u;G0qIEU?VxQIwNi9F^R_T-*!KB8>6e_)5`{t=w5NmG>xxJgJv$`6S2 zXh5We0g-BOUy&ZK0T&^%>g7f5hoP&5&tsT$k@4eH*#~Q*>|@MFdzFJ`nHy_b$I<3Q zCENBy6kRvd9)`C~6=$h`h@I73w>!5^4?x+4GQYWP>tl+Xp*v?auXz*w(pw4wt&bpUgId=Sm z(F!Hs4dH|D8l@oY=_{rKe%%XZEb|$NN?cu(f$nDz%sMB)s#uA{-AW6(C{=j*IU`w_ zEEVymi-S4ZWmKQ6>_W3vU#rLxr1sY;^QGmK(^W~AR^WiQ5^XDqB2Tx(D5~kIM1+YH z5s&Fu3}w_pVXV&1N8-9EyCJRTUa^%%70>gu(N>}$fs)y0o50US(c9@tll_Xr0<4jdLO3xF#@kY?BW~(UkyyPlzGy@y@B+$RCCk{5} z&cjBh(h-|^zFta*ZA}!trs4#|gu<5H9A%s@^w}kF*}W7TATAdUd2Mm#D6|g{`-OmE zv6eD`QPPWslfsC#_c{ejus#azzhqnCAdH@MjClQ|^*ov5O#EBml#&-kMHJUS+q&XT z>^Nlh!i?ohQ|6#)fmcxFO;a*)`dgswD;(QP*?m#JR}H5PhEv6_;LbCzQ|t~w2C3+0 z91qOBPEl~ETSR^B{}m1=)~-VZD$F`v2kfjg>@{AzXH$o?A>}vdKyPGr4v9ww(p*0o zq}skpA8C`3?`9)kCEI~hzx@+K*43mdQbI>y0dpXo&t15{vz`UFWSH{b!KE=fHshw( zzyD^q{!=_HUAA2daU2(L#-5gO?oVN5GS5-@_ZsEA(K6hv!kI^@mEsFjo}q->6aKnz zff{y);3~86+{!ClcE`_uUbuk!)}O>RvK0fFCCpGl9A5~>%7yH>7f+0ojf@I$_Gd>V zio4`a2Zg)0p1m~dgH-vlI~?yzNwXv3q)9aQdS$wkuXE`IvxWY=UKz)|IWo2nPSdvn z((yLin^fPAZ+1P=$^}hK*av~_slQpnOxs_X6yn?pWMeXtPL+d|iI!idA&SeGjZ{73 z7Nw6(%uLYR%v7FnZu3Wp%~C$X9tjrkz?QC2z^$>+p!J=F#;|fLFn2rkx)mWN>(1Mh zW)5iwhx`@0CXSI9zD6-<#7N8nrhWfNWP6y7ja2w5;gma-O|1jOD^BKxt!@ zWLiH)iJ{VQ@H;w2=|)?}DWMdSttjj}kVa?2qiifZ=48WTzv+=o$>R`B$${^LaY{Ga zCsFiSj+NvY__;sh0gSTpLWhai=ai7Gq^pOTI3I2Te?ci@l|HmJ8%Z2#;&+tlIf-LU zoWE=We?=KN%G$PdO`PkSz+W>=m9If%KQkXami;!UhqBfkQqmvO;x6iY7nrYIZWNvJ z25NH22?^`MyOhl~;RrN1fz5*4yOnbYJM|vr2tGxVl&&;qqLORa`%&^F^s8`RYdOuj z*K+Dd@%JfP;Vw;4rqjU5Y}aA$C^=Yo>!$KU&hR!|0v^6z7-qLnYQX_jhSKwgoKc8A zb1G(qU9@5B?-uN8*?S9t1a8$`vz| zed1kg#PJ`2iZrX}1MZBWxigh%(l>N!CgL*$s=tY7$`5)%6@nuJHMVE6Im zvh;xYjy67smie9zJg9V$exURGIZmA)!skcB@h4i!&|}7@ zrQl6|Pz1i&4~oEpE(HhsK@oU}9~6OaxfC4g2SwmaKPUocT?*dn2m3Bi_Bn5}K;4~> z;Q|6XsAPF7~+_>{8BRDP^8Du=A3=qqLp;Y}yFkZ5u@~4!2kflv6P}Yg( z%y?GDH4Ew3t4Lm|oRvoC?VrXXQre<-eg@4A&BGyu${j*Sm8V-4C2$nZC7q_;reZxl zM2;vfgv{(@A=r>VD60gHNkxhxrmT)MqzJPludA4xd8s}Nk9pUymSbHJnEjEIvs#JM zvzIBISRR1wBd`F)$|30w{o&;buD>_7lvw|VKu5MveJR-cEi{+JryQ!^2$E5X&lUV+ z8n{wfU<3faxKcS9c4uIlt*C@n+R2+*3|e;!4}mgE`*vRazCMj3BT-^bQ~MS#Z^ zq?`P`0=A<9gg?6s3<%Ii-~J!LD4>D<7A11(jq8+lW)DHY`2hMf`4v!hUTfNl-48;6pb{dM1+OUk zt>Ts9T^GuI)vOZ^l)kF;6p~a{nP%eYgW(^y!8odYRT+S&?nE?m@&qAHXXbENfDHsOpUsFaS#r!p@@gm${N_ZW`1BX?n zVkz)sLWrLGI{E=Femu~D2c?p2d^9~jqM1g8i?9~XenW{DGnGcQQ=-C+Ca0BeC|=WA z{f5$0@B_`seIEvuYm?|Vf1;GVN#F%<$%-fn)oxPSIVW7K(Ppes%%0BPjOOJzP9b#_ zu%K`=mO^F`fmGOn+6>-MIJ_Qqx0M8@&gOh6T)1Ad1qca$e{N7(y%_?yY+cDz?+FZ# zHe)iv}7;!q{WR4Jt>JREhX-3H=f5+i}u zp>K)dUi6l7$0Z^mW-xogaJxZsb324EoTrmg-UjPi)hEoj(R|EBwxgJ8w}Y;VM(=3` zF24i&1%>T!Y0}^w%5sdx`W?zX;n!BL+^Mv{<3W^j9DNeA83$&LzpV^}L&`fKCHwWF zca+y9Xs>5fEAN23OYbTZ9lgP`K`41I?$oLI1&?EPs!9ye3*W`)g+hDdE~Tq;veh3{ zc^yCEx?4#bQjB_7h9?ut{(t@Urx zaonhEnFAYiYw@qFMoC6CwKXWqWD2WQ)|sfet=60ba6#0g;c+D&D+eKL6w}1XkCg%h ze)tnmtjSdUiLxg$Fh6V3+(oMoDx*v`KEng?uTC&!S_F8cJC(v^$G(~0t>vYDN}M9<`M!(dBu0`y>} ze1$pIzey#gSiI3!f=^-QAFOXr(HhbU~WuRj+&@{++Sg>jlp5;hufaHBnU^7u=48%Z%4T4RKm1Z)OltSekB)_l)GrY0(f|p>4lH%E|rGhO&NjhnJjDj#_~m&LHqE%KA+)RP7Y1|4q}HQybk3K=Shl3Dr54aX7Tn@>{&6OSrSA8&zjt_ zn<^iYqKj*a?J6(Bc}io{v2+&#QK>a{=J^JI5{&zrZMX)2C9l{Vc((<1_nJf4+i(_x zR8S1?vwtcZpx?doPpmW_qf>t>-pdxg*C3ysFvh~S^Is4Hn=DIVw2J#0{(^YYoZY!{ zcosRrj)zw9kodX31Y^JxKd?COZ)K75aep=*$&rEA6)|>lUq6A%&QT$8aVl>^y?h?rf?#3? zh+Z|=X}q{1@)`A090KQ{ppD$ea5atw&^vi_{?O-xs?t>|Xd5;cD z>L}ovbTh6g7-&;-r2^V!1AR`?R9CL&qD!Se`UX3$&6BBt{McBNkJKG%k z27h9y*3bdAVN@ zmepTS#ifcmKxl9}sGeGd7u6us7vt=LKV>4)57!}LAyhM&w+`OL5w-c0psH((N_%Df+wcNI%C+hu$0}4Ax;+m>#p<73 ztA5XSU+nCT-e%$(LiOD-cveT#{RiZ6-uUSbayZH9Z4#q z+TQ4&a>fg=FD@_^u0FsBY|!)pMywU?#kmjSzLqq#Ac%KqIAB>8&u!^ygY**B`qXD| z-*HX`s(dX-s9A;Yga5QIrLDahXXWt5&NI2*3xE75$c%tICL z;Ecn9e(GYet?!XfZ7wMIPwRm9i6XRY4a!$Q72%F zr~5#4tvU2FKGebk(#eICN-f!P8xeNg6)zgaaT7EY3SVuteFtR|aT#VUY?MSH!e2!(X z+TZ!+MGrJialJEads`(ZrNgbl*iW@-?QV=wrVz^P3(as@ivB)oyii+EU zoc2qE*yb=$CifQA(96PdZ>Y-Gx-1!resyj&vrDHfnd*EqZm%rWIN;oZre>*Yg_yxo zKC^b1#flc!hhs&ScB?v2+D4Dx3bcNUq}$ZV7%>pHwG(SvDOpR{O!V7l338p8E1#@EJNI$+t@T_4V2S(x4&mnnnwT@xs zxN^RdeEl$Wu<#4Udoxni zF~2xz_$XCY|7(S4lJOqPomPx8aUW+yFq=~HOq`p|UWh%*(9x=;6Vi6HnlA07yGN_j zobMy5F=*=(usd881U2x$=qOS>?kDZSXznEDE_7UZInaWFl`KsjiC^KpV_@8^OOA>K*ELD76^QO;GrI%bgBPR)3xUg9SDTcKl!5fBYBspZ>-D#1-6m!Ng`V zjvb~?RaZ#ldI*b|L-(ue4I))6Jr_=;)6^tfG*~@NeU<8Fp{;SOHxK+xX|CE0R|p=+ z#kAC5rY^iLfb)_b0H-jY9)3U_?`*WPrtcmAyL395{u$fsYEl+s^^!SV?Qi=Pg53`i zuO?Rk#$wfUbqBH#6LskfHQRaSV%jso=HQsrOjUON=1=s;nQB*)rm7FBgJOS&5APT; zbz~&_!yjLyS@xis>pXjjo0#(!jKhUhX%DH%&Oa~l)C(WNNJL%0R(nYq7Z38n{7CXF z#qRv;(xCQ-)j3k^-*5~pz`4LcI8pNm+OvQTKcWu65*nhUp`!F5ym6Ad4OcQ%yakQ6 z+zi~#UNKvBp)IN*ZsI1HtxmjH(QrL`jyl57d@$r~R5%UFzzzLTkNqFWp(S@~P>`CZ z8mGAw%9#%$cwR4`uYMBbC_tG&F=s(57jROmu<{YogXtBwj*VH z$GRv>`JnVkaEq&+3&JVH$3U$v(1FL)S4D*8H1~0I3_tU3OkZM35s$Pk@M4)z^*B0q z7|ne`H4YfLXy+4V2DlqyFs@~+OT)$BNsH7(k)EPwEy8r|lmZjP1MRP2)Riq(x0;zk zBmn0A*|LR3D9g=9K~J!O_E zii&Q?I$F9f_&&C}p-c>=`z43T-( zYtWl&cpBtE!oxUkt8scvA!sT@jrsot$;>Q5k;O*YC{Z03RTrtc$uCO-(I(kZt`HVX zE>lkc1y&Y=)hQsya`ics6!d1kwRjOC70QSQi=DYb^@-G+RITIS?1mMX)rEA?U=78l zV^@Q6C6}r`%3Xq0kqdgd|3j!!`0=I<9W6zXaXWsg%F+a}Ycu7%$EEjQ3EW57s-IN{ zx$S5kW(?2{qHzl-;W^+ij^jP2w&Er8kmuEDRwERi$J}}Jc{RpzaIL{AUStQcDaDql zc=CWYmH|IShC>lQrCeoAAt6;=zbqtFFDu6i1s?S;sPo0UETa99Ju^oRv$xXqhu7j* zhFC?fr^uI(Fy1|WUyXJKTOsKEm(-7p47|n~s_H*#CucK%f3I$)rDNRzaeeAKHIt6+ zz%pd{IyKj10i~zf@_ad5#*MtKt$Y1$DZo(^rnY`yqRHBB(d%mp*&!%rw% z+%T4}Z(=x^SCit2TU~wK);xyZ*45taS=81Ufmyo8Qa)zjnGm-?8(LFND&WJUZdIej z<~avpNy)`~L5FOGn1xenK}AO#7-4;Q*l$&bNuiXoO%2DL8sdYu2N=TE7d|xWBeYXl zEmW{a-xwajXXI^elxkgA2i(gU87le+j{rXHk&E}|qcxi2tjNi2z#M4nzoquEwT_|Z z?~2u^;4O8MIfTl4<53V?>WSm4+p&yd(%2Ct)u_4v!r0tV&|S>lt|p1lohW}GSOA}@ zxk^+}-vtApB3QLuO%3oZS=bCo?ZDg_&IAGL#bO97a(AdxXv8;asGIRM(!xfJpXO9O z7wQM0JJkxD&D*&XI2+9opORvz@jGT@-Zn`*PJdKDR_&YYu!B_Oy`zT5GMTreP~(v> zH#<`bI}X9N3C94cd`C5QKO^YCJ6OkX1Z?>1X@#31%55Q(R3&DhURCB&ts@mxW2t6L z5RFyl67&*RcX5PFp~;X8HdJG#Gs#A$cU5Dv21MyY9NQ_2ltN2(VMe%xcJ5N++H;CL z8h9zeB$+XSn<5rX!IUHfhD%>S(r$kNs@L&RqQ`MLOXhBKVHJT(yuo@DQ0#kP7XF~> z@6p5!?}6VHB)6wYW1Kwdj9Q5O#fDs0XvrRP=0O@2{1V0>q7Oj*p=-QPHAM6ssn>oi73xm&(AXzt@k{;q3bXt{s7m2}^aRciAUHnt z`>~+pIVz6a^V>rHeL(p3Iv{4q`sX6T-IfHhzgc**7Yh!kFJ5+b@UpOa)`!SPiZ}4P z5MvU}`0_`l+!Qw;R`b;*AE^a!o?8QUfETwxl=E34$}%Lv-u_?F7Nub_ftD0aigiyd zgt9YfORYK{$FgHT#w_XN!|1%q(x^Pk2HnzKiCFd=6w9d_4yw;M6U-*xPsa{|!AK|P zr@$Dr)Tf~Qm?uAj;7ClDag_Rnst9Bk7>?oog*t;WKUaBAOzfJ}e6IEv0U{~(5XPj( znB=Ptsinrs?_$K=h-1y5;G-r&)g$|eKX&C?5EtaG1TC-n#S@{|9Z_*FbOC*L)D#v+ zQrIy}fVW`dM(r6XqY6AKc#>n>;s(R%yBRo1S9S~wIYu23BU(@XQk`KG#c-giuhjll z@nh;Bed5R<2ti;KGXG>{-(Xx&l3SL$k)AefEn z(}KfG_Fzt4a9lKj;2w@1H;H#7HSPpCjsFp(`4U<|u5d8@uGeDi`i37da?vgB6Y8|f zXn^J)$}3M`A{U!WU;?IqyqDdAe|0BJ5(rt@Np+|#*iH8zaCM;2Qy3snd0^G5hS4Bq zzEc>F^XcAGe%YGzGgyB?K&X5jc=iQ9s|N!+IrkSv7qgEF8~lQgmm5@8VPRA)X@u*1 z4EnHQ6-=TiQF0@AHj@x}{iQ$9sO~cpM>(<0blT)6BPpjo3>?X?=xrt+@su$cr{yZj zZ~=#Sa%se`Chm2j+F#WHf(y6!Y$oQoSX9@nW5O9{R71rhf~wEsaBt}uF+?|>QKyOA zJCgdFAV__G!+>l{wNV;0u6|RKX;K>vw-ipsx!S^oI5E)h8$`?o|C^J8QB?T5DN;3$ zDrJAEgizh@YB!Ori}L!j-1S}T^JHe?z-hx>n2_;0qcM)f6pl1DV^gc*4|T7I6G2(e zVH#O}R^4r8N3Y=b#E6~_pJUPyV;{1I0pP` zTZPI-yX`9$XuGZHHx1KTwxk)lVjzq$z>G2pFL;Z&8x6@s(3;N!iKPwhOb=eWm|)E>c`6ImwgPoW zHq-hzlT0MU8MkKIJ|03_Q1t~NTCTIbA3y&L(S|xZ_(5!a{VjT_J!Li5#2SHjjZ2$r zGo*j?uokGWIRq#>RI@ueA|_az5S;j)6RM4tq)z(bFm0Vp>a6FxG%()jdf(RC_#lyH zE2?f49IkJT)M6y*8XY)@iLHwu@^sdXb-EG*T--g75i&;0#I1JaG1`3TZXNG$4Ulj= z-eB?Cpn32hLK|(eNEL$II4#c2o7j9n0z*mk+RfA#&Sr=dxh<4#E~pBLQ!T6Fw9RN* zJUjRfKJEl<96oso+Ee(PPtc5!6hf6i9X->dVTpN|rplVZs)bOwtQmY>2aQW~uJUR}ah!j3qP9J(rRDEe%4Xd64s=QiT1k@#8?9_S%JVOY=U zrA=>ki8y#TGUhc7vy%_bjiQtRTDu>SI=EG!`~NRQ@%tE|`*`l^If; zFx}l>8)VGYiIj7L_J=@)Fn!F8+C-a_W>CPoftn%uh^3UinC~lY(q{B(kF=q6a}|$& zZi^%s2__%rb{L*B8D409nQvei_tssAfks6+t^?bFOT|nJ-edhdBAzO)!_m0Ho3*sa zz9=`N0B=a6=mJ}fRx!^E*8j;WmV>kzj-_})ta))p4_t9LNW&EwJ?-`|X5Q~Uf8oOF ze=b~DOYaTR`tY{RV2y6|hasOMLp{v>2TDvIOML8Ze6Hen!v4#oSFo$$K_dN7gMqnQEy$vD%jyagJ zd|pW6k~8A$C6i<9df|OqL5N5M8;ilX)}*kN98A|w*B;<1bOWLsT?L6^&2()T957EY zw;7F#k7j_N!{w%#+C!INHdo>zW*?iW6{FaB4{F;(aqTpU&6lTWixInaA=7hRdQAJ< zDfQRSFV()`J?{Dynjzeb(z};v@7QoRCes!@bfvb}j$0K3p{ZF5;b6mRZG>$=jJW6> zS8?9`yf(^N{{4juqmN&>a4$5*wKa}GusU(!7D~QgjTRa^5M9T(aTC70J98}%nwgB7 z>7_MV$FM;1a=CK{11vevbQ zB8F64{|Hz@T}yRy0{r8F!Ii`n*WjdR@K&wROsRgW<~6O(ZCX$14$9buNn(UvzD?U_ zlSb-OcWAHMKs4R;T3>2;qFFFyzk_`5B&iA=DNf*x3b2n3u#aJTPeC7pDgOsoT*-S7 zoMczwEFx3oV3OJc!4_0$-7I)TbUW750uF$lLl5f#uv6yE>jv)#wH8}2Cb&&_sWYuw z>lQZFYFn({aIT9V9Vx8Vb~9;sS8HLD#!=30w0Sno-L2h$Hve=tD!Cu`b7<3~9Gd%{ z*2i{N49$BY!b62$MB8z6;uucBO5^Fb_q2u5P<|7y@29!k<)%^N!u z&P=1YbuD=?yEVge+qi5^=?lSbRUKaJ%igP<;mPdD%-G%E6- zA#in0M0%Y2B+57i!BN3ST56H3#pKRxn zuo`Sve7Pyvel6u6H0#tFs>9&^MpErT?GDFCRLxEq0~2tN^i$^DfQZ9+*^>cIwyGtz zFKTu`qrBiVP``A2o$gZN^WV?a1*I(7d_ z>*7oV+JoMJl_^SX?WMx6v%gOmfq4gb^NYjrLBn2AuT8K$6hmVZBciC&*V?Q|?s>*jOB~D16-L{>*5cY) zUW{3sDZ|VaFlt*cF1{iRO5YmLy0Wjq5_9|ns$Ru+g?yt;5}1Y7#cWskD8z(^Y0EcS zJNK;1>QY%28D8?OHahI#Krg!YTdhkhzgfa9)E0)*VmlY$3BB@L;CI*~h{CXObzuG% zv2i7fu$7wpcnCJX7KXcubJ0JAiy_)_eXr%3Ma=j?ld-@1()XG-@+btG+z2c&WEm$X zmPp6G*T!8MIOhk9a1P82%q4-@fmbLU$@NvZBLoHF(J;pt4JUs9kBLDz5wpUA<6!OQ zQtfdNXlNS#h`C@t<^KqxKhKObpCie%!;Piz(I2&BD7=RKgtD%u&Od=_?Wdc50+)+h zczyyg&X1uFTL!f$;aAHx{DuAa>=R%&_tTOS8mm`HCxMNF2i z0Ed^5dIqGStU)Uiyo6wa;GGJ?MP!1-h&h5%rbmZ6*@=VPL@9}wKeCr&`?s*s#776M zYy_cyk{TPeQPNX1=8{Nt#P@nqJi|KRkK>}X)Qj|pDxn2*cYsD zf7QZ8saQ71rC@$BIv~i4P;=J2qEu_)3|{3lCPvp_Om$_yY73;LTstqWZ^j3l!WodO z-Zb|N>ivx03H!p=Lc37O;9lL2eXYT>)zIQO{lG_`#)a?2=?dlK zxryg@Zl_|}_?Ko})Pt^m9HQ^|zqMqup{3Sgpt(smIEvX01qKZu_UkzCVd{H9`$Q^P z;r51$)tZg+)`S?=&f?&!p!dAJr{S`b;P4f>-du@R)O$za=J39fccObG^5tfK2t=H# z^sK%`@;+m8vi&*u;o$~ogYAs^;;7#?d34~OA0MZsVtwh8BSL*EV#b#nO_e@wTdQgA4)9$noG zExF#z(n&iReAy2kWAGI}SpPm6_EkS9+IfQ?6zyDqB3P{u*v<-a_QCLvTW6ygO|&x& zzSv6TWcpT^ zzD#^rW0QG>L>L4Ci^hqHF^CY<#Zz7+*%yHw>)h>N2>=N?f#N z`^^>zudy&WDE;mDGOxVA-$x4YwCn)gX0;wgZ6DUw6-$k+f zL)>{^HKw^ei{o&0ERxKq#y_i}M#9cj-DXt=_Q0kXV*0;j`BVKYS9oWRvfXlO5{3QP z?6Cat3Uino`2u(bt}}ORDh!uwC55&0b`fK!6i!wlxzDW%uY~;u7$!D6cDM<5nkhp8 z$>sHC@Lok=`+bF+0^uV~;7v_nyyY1R@-b^k3y5cKYipNq82h8JIA^lWsL0y}B}@i( zaJ}9UI7O~7Z-}$XUq>|z7*g#AGZ=i=4~pTr%MS|t+3g3>K1y;x^Dw%m!f+Ek&0iS) zaoyiDV>KC_kHO0a!#@u8-@srFkr)+4db^6Yeii|))Yi|zy=hzTF%vS{nhM^>38#Tq zdkuzS6e9Rw_{X{K4a`-L4l&nqXZT?F$HCsWg2CPnCX9AYg!1+WrZZzmAPznNm>Yhd z3s2q6R#o4-abyoc24VKnu@{T91m*}OpA*Ylnd^I z;U9~4)kSISq3j34F5RTK`R*SRt4D48v8%M&h7fCfzWksAoOQu949rpfx(~q zK{R=^^N=4bT5pSX9`=Lk@|MxgFZ>{P#r)$alGR?h$cBq_#0=u^ivOXF?>6Hc{XfJh zFykDHxoWdfhI=fZvYf5?b&lH+{!uW{gUrA8lzH~OM*t@ZI)E^O2w zg?cjusHoiDEZX_C9~4C58$ZZxnlc~Nu!v|Nm6(r&d@%guVts2y6BrVi3K!;Wc^q2f z9?vjfE){sQ8qPi#{&D2*tjMriRj@kJV&iXzAMP`^rsHgy8ts+m^EAx3%P4NemPq&(+tLJ3La8wus6KzkBG;!0+*iiL;X z8q>xbEnQ6R22Rd}jD0Ztt{0$`(swqr9H^%n>tI1R({U5t?F^ z)t>f$@n>2rXKWN|99`px}~BT%=6AIy^l=TT&Q#Bd!D&~m9riffWXjWX&yY@Z949qfbd zQva*HE-~UDj#9ih=jrj7Z36E`MXZPC~j?+Ql>kMWn4B zFP;}h>>C0-ALRnT@Q>T1HA>E6cpkP)E%~?D_+0ga$2Xid@%guFmXuQsxD7PSHd7~fcsin{We59;&j3S#S8toQalov{3CQ|DjML9#D7Ez&iV^r?j|G@2Pc83`c!?UUlCJDxvRRy`=(cy#P9~Uj2i{_`v0^fP| z@WJrU>Rm=eA3Na3(Gmm+p*bp;GmpRFHvSG)LB0qw&MJPe^DzhmR6oeA-1Zu@GM5w; z5R1$=uhi<47vc?;R*ZRTw<#@5Ks~;2%GQi;DSbPI*p;LUM5oARaV=kP0F#O|UbQ2X5^vOLGa3Dqv z63NUL$-s+;2v?4WHk(N>R`>G`zYm6goNRX#$QrgBhi4Zn>>SuF>dff`!vv`va%;1hE?c_-ot z5`5ZGLnm)H=k@+{^9Ot&!M(KMQ)~sDn-PlrpliG_jvEjX??ZvN zh04s`*Lb@)2EZkb&L@RqyYCt=USdM8rcmW%-qd}&bv#v#g#IQY;y}vk;$7#sNrW#S z+Zs=%C3_c0Q2i`Q@rH}*$Pr33&SAYW#oJDDU$$XP(0Yq5>FN!Y2I*m4z3DcgWda?@ z?%pm?KFsg#?Sn?&+1=X@AE}3T03~L4BOKg!*u?CCKzLTI2e@q`kYG{pK12_%EG9wj z+kP;NOFU4}ZBR_{-oAK@bx2#g zlhLF0G}O-i>xMyJxUDm{LYEkE9!6Zo>z+8YCL-|UU0Jy4@fJ7GOT8gp!zM*#y&|TLh(}MY8X%kK}K0>)0dy+ zu-zU@Z!dGT>BY5XoaDjBwBioHK79FSbu0Tf?X_hW`?rXs`=jt~+|AfXp5ya&5@Y*n z+UWE4w2g?R`_J3jKuJ!@@Oo_{{a{9hH%>HpGo$caj^IEmW0IinYms|Dsy}6qqaBJj zRHXhNDsPO0-q=kJW7`_E8_5f=7fC(Z5_`7Sd*j3I3~Z$0JXR+2VAprS^=2}-`{sHx z+8oO1?=@7U;st)8XY12I`IA2cd9Ql3jgb+GXrVP;FZK7dx2?}^v~bgY8f6xN{qcBo zf2?(_xy%{>hBKO|wx8K1kXs;Wp+e?G?J)wcN{2xb{yqVw)<@&w3aemvdktxeL9qtG zcq}t1;V)A=?%L5P3X>BnUx}m}yy0Ty&@>A7I7b;17=_OF$6Adm(lj{J1P(s-vf!di z)=}ZM!Br$H<-cix?=Dv7K-UC=P>?? zQ7+5jMl<+?D+V9lv@QFa!S8Mo9L|18GuM%SRxet8!Cl6^9V`%82qG@=qN4109PRqp zZtU&}zl(07pPsll268B?me0rF6shofK@3fdiRu9+RnHa(C#d>FWXp|mPhhbHwg~TB z(|h8Tz3(=?CtcaQ!1TWN%HGpW@B6Oo{ebB``O4mwV0g-9-hy?UX~v!!=Zeh`rP|w6I2Mq(TPzzj;V7?F&M;3(*G>H>-?m%fo zcFn{bXj*d+Aofae8Ow3T)KVsj(<@HW%9(*ezxuon@PAJZv$XUMAaSiImy4 zm2JsvOJ!Rw+e+D1A>8hPt%hwQ*w(v%+l(Y%!DImi-`XsZ(HEz_zVytGEZY%#mJ&4l$U?;90gMPvpQ{ z$V|44U|S(~ZK-gZ1lv}>&2=Zo;7&fvZZ0lH%>A(Ca(bz3Yhc?f;l}Be3LB%qR^iLG z5o{}D-{etV9}S$z32;V9Y;$qud)ZdVZpYb{%-9t2AZ!hJ9FA?toYX+JWwP%ikqX;p zi7K#dJ-gL#xV;Z^IL5k3A}+Vpq3LjQaUQNQD8^oqJV!guwnDB)jA$XQ<;gY>B)T5L zB0ZVQm-G;Vyf^Qn&OD4G40GSKs=ESp8oYa3zaEk%H zXo8yz@C6gZqg5QZ+ywES6@z6ah*z!{WKMune$4=%H^Get$XkKzyTJfiGRfep2Kbx_ zzG8r^2*SQE8{kS4TyKD-CWtE~IbSlt{}^D23BE){d6;Q98L;OFC`KFKTgi4F_7bkL zWP2vtanB{&nbPCxOJQePFRd}`OzrXRnGuHVs||Z0#)Y(sitfY~$=Q2=Sus3b1sM|5 zP>`WiLD2+3Vw)fqv)EQ4h{{B7Dy|>{0tp%@#;~A)$vm0`4a{U)Di4udwvAw0A=_rL ztzwcliAvelz;1`w=Hj8BilM~RW+0W`3tJ((#jve{ZL?sLwo>K2D0%}s9AXEZ8reb6 zqZl6LnM`p~*_O+;5o{~G4>`_aTMfHyWm^N=4zbO}l<6$nlGzp`=2Etm!iG1xvL+*g zLUu@HuL`#DgbN9HC3`in!y)!^F=ac;wq!9MFonsS;+{`RNt)kxqKfpFY+s+C%CR{Os+>3B*!`zi* zOb~^F2C`d)pnpn!tc zc;Ui&udu?d7p@1m9=Pf*tnTXW>hk}7tE-dA5R~2D{_~-!{#L!JdiCnnt5?-MT^0*m z=LQPk&Y%|H8_U$IbIN;naNbR4&pS4#-p#>zx14+4t-*Qkk$F21o>Z!qVDfE0OMY)K z`F&^SELffH56=6*x#xW_IPZ3uSFT+Htq|5|vcq?n^i&|6w8>7B>qd(-xT7BqE`H}P z=h+pUXZM+Tf;;w+;5?81a-KcGdG^XYPHO}!>+o1G+2b9OJrPXyq$pko%hhr*esI+E zLzmDVPhso?ZqfP^#nnG_>6!L)Q2aAN_*t>~c04A3j^)Mk{7Dpx`9~tmMnu1oD0V+` z(s+-;#m8A3@dsp5_^$(#ga%tKURvjl)Lu5rdBrT}RTI5tqSsCI8xy@@BK(w3i4L3Sh>3n@qTie7Efc+MqIXR6u8H0=(NPnCi<6&el*cfCi=IDPMfF`PL_eR@Pp1fQHsq(ILm_wKR#lb!$kPWG*K55 z;p4GH_zW5;yPBw*iNZ`2Zldlc!gEnlMw%$fL_JItZK48l(~C}^*i11@>embJ5h?G zx#?ECQbf0zQ#Z>o#NK;R0QZABD}oHMZJRr3V>3E3vn|z{xw6_)v(1un%#w0V)Z0Y( ztrGd`W1_w$$~RFz6XEB;Y{>u<4K&dp6XAz*OdD*XA*PImnrN7bhD&4{(NjEfyStZs z%sC9Fx56cxy2Y)h@VS?Ksu^N_XX0XD?yB>l489&lVK;4oe$rtJr>R+k1P;`RqVRrr zSQp6R#dTZZijqc~FRt2%7ELypm|`+`k%^|7sMti)Of=m@GfXtoL>HTAmWeJg(QFf4 zYN9z(=!JX+Gz|QZaSES|&qZJIVILb3+&GJ7o}vj6vs-Yux*TpLvShKV1tawEo$xtc zYH^o|ukXTL{x)k&E;g%QVlq={W_f8FTrgQiwV7OFCfAzDz3+A3X(lf>BYwEoqQAnV z#}VpOgq0@3>FGpQo5Y9VO`5q^nGp&1TM^fo5oPzgb(7B~>rPu^ma*2P81ewtU)S9U z6MBmof2$dP;sNBmnQe`E(7G$I?r_{U`4HDV=x&lkSZ_+kwwjqIY`27RuZ+O5Rwm>9 zC8{Onb++O`6Je$%!hs7+!(>eKu!(k>1Bm){6Z(w$wX1Ca?KWv2F=-z)(H;|F5@b1# znFweTt*K@JA7`e6(LiinFT4v76b zAjV(GoZ_{Ip)1d~Kz_#_cJGoyKt5^NitICSS?cz>rEZ9$iv9+e&3uE+bmNOz=uwWJ z*35zWd?+aMZ&l_uWo8ZY7+ZbB9PpUOh<`iiFBjj2=`Y--eH zs;Y0=nEA6w`xjFxm}Ob{DHCCqCHmGx-Hj<2n|%tq(95N9Qyh7saF@3tzRPMJvEXw~6ui zjrB*{-J|aS>734h_A6HMmr)U`My^29vzTJ zw~{BubdVg|mK@hXa(r8ILI=r-ZOJ_YlG!_ycv4$(atFyNZOOelNKS1_b_FC`@=a?? zPVXSu-IlC(kZiOiXLOL9*_v$2N)lH;;7)gBw?-xAbdV!gChz?*C0g6*|Hn@El{Oz0 ztz3zsHmp+vslsOE1G@?`TAZU%@Re^-=xXuGypez zCn}JrQV|VQ1r0(NCDNXCMEmm}#TJ+LkiU43y9OT&5(gf0`?NPj;p5oN+9N!VyGKP; z;mupF{Bv>fZ#aI;@4hW+*Z1wCH;UpX@DuN)LD6%?>L>6zST;UC?G6d?1r{{&yY?mY z0p^HeMck2y3Bv#U_Vj7W(MmrSgkJ%se5~|cL3qQrr_XEGk`*A}dsE!!vNFx>AP(Qo z>eYpBHZ$-!6a@`|mFomvGh<1Cac`(NcB@7ANC$E25f> zudpwF;tTf>_j-roQt3y;k?r_W%Br=Fe4)Pt=Woc4^hhxScNqqfkSJrnh zc6T?Y0cH*Eyz&saMB@4xOYJnWDm}Dx9Xm z87jP3g_o!h>%SWvslHMLy((O!!U`2GQDKz|YgJgM!Uh#yuEG^6T&cpVRk%up*Qjuf z84l~TPDR|T!dq3?q{0m2wm%N ziKgvP$nUCS5=2-dHuK8Y;)}fBy@?UK5V!KR*3l-06P{_m&&0*E2*>fmfy!JUBAq^?fTw+prOlWgc4hF{; zh^o9CynOJ2JE1utH!^X%VqljF`LLV}JtaKb@hPg`2+vwasu=UEJJQ!hRq0e!W`k_! zAKK3*n}PY@!ZI%>j}7EGDo$ zWH%iLZYvUUNs?ghLq+kc?j&PIfMhJDNFG>WAF&>#$+g((wp;9CS+V&d?M+1h=B%16 z=Ey-{ajQkzYwo1*L{&52nvD}te+qlmANe|dIxw{Ey|&J}6M2W=Vx#Ut$mxlgzY{PJ za;apc7YgmLJK9T9uH&s%1Xf+3;+ZWlex!=$v=|saO2z9z@$eS?QKm%9TMug;p{O&1 zsLvLEH|Q+pH{t&08kZ=Jzu``bjR=qpb(D?ljq`3o@JrrzO|i}O=N)t}(c~k7iAe4) zlLs{;InW_nr^w0p1t6n05!m#LfqMvTRZ_fBA3#bTS!u9RUf8CTlN3p?QqC2p-cwpK zrAyeuoA2hd(BwNpN<4znZ#Wf?6zmZFalOW(%trzyT!q!!w6N4)XrJ8imqi7F%|sF2Cx2nvx;ucj%I z)IbvP)0^0JX2Ek*a+>7O_Z$ij?82QvcvBF*DF|N~gqH;2IYIcs_Sn~Hc>9P>xj{H7 z2zLv@oq#Qc=Sw*hao@nEqs?cF@7^ii%s_J**p2ut>Jg<@L*=bBo@-U{{9#BS^*XWs z2+ZEWx7&;I*T5EMx2UW`q}0P74M@6PoI-Bj)_^FQ47P)VJg_2q)s}A4y!(7M0)O!p-eCAAalEPQ>o?$w1qsAgi1CB7kOY9%)@^|W66MR>Y$v(va(+w zk~Ef3CUjiTFVl$PL@hd&w(bl*WD*{0(2)Ax?xF(=FgJQl#WV7+_}=jN|L z_%mROyR0^6EmKt+?5yc+&YB?(Jc~0Cdfy)sn)3=uVY@6jX}I6lLEICE{Zo#*Zw!%& zJKq1{2kv(rzM&xI)WML2aIr+pka)Pl42e0VGTri@IgJuCWID$ZvE}WLQkWsr3lwGu z?31S@Gee;n(P=b7Vus96q%cEb8V9B`B&H!CwhRIXJ+U?Td2d~$=Tt?^um|@TC#ndB zB;aI30*1sFD$J0Wt~ApvmwK|o44KZUhv^K7FH)ExF{c!!Gwgx-I~A)4h9sD#Fhk<$ z3Ns|8@5}-$ADWIavE?9hl|U?43kYW^%#isnQJ7&kBWA0J*`hc}Pn~FaxSS_g4nva7 zQ%a;^XjOC6<0#`fBN?rLUHLTKa0~Cqw49^phd6 zrJoFmN8uvV42cVH0sC4N*3wUgB(U_8A+e>OmcCm0Y3Zw_pO(H_`f2Ga%OC>`d9~`N zrLdNMTKa0~r=_o!ep>o!>8GWymVR3LYU!t?ual3@=dOf4u{&^3PS_WhyLD;Q})hzN=&U75~z{?{byt z3Ka(K|8kiA3K##PaZ&V9{%t41mT4mY2Y0CVcdxXU>>EM&r6BxF5Z)DpHvwA`PeWyt z7S4>rS|shpfF!p{%0oypX2B1xf50xp3Po1z|K3886mOaaoa+%3Pt|5Q3nia>1ML~E>5FQFlj>xH1W}layoTA%0`}QHO8!mGF0$VH#3qj#GHL!tn}EQ#e6k z%c3VLOvBCmJ&93&tBV57lois_lOS1PP8Gx{3UewU?xpaB3a2V;O-U|=IaQIKO3emY zikpsmA0v2?fWwIQ)}*K_Y)zVm!ebDUK0{%v&odR~WX$v|g$otVR=7an9QHpe9HkSH znD@K}Da^hkK2KrxJ@H_LVKyXYMJ$iH#B?%3Ol2eyM<(ykHc;w=Ez_=yOo%VPt0y7=13u?S`bfD zn7u^Ik;nA@3Ug!v`{Xkz5^(5}fOt#2k6VCAioJy!YT@TBgDa6s8U`y;Nb2 zLgF%od!c?A;Z+eBW)d${n8T167Ac&na5+MDIMXU{vGQ9KUaauV3NKMuC|s%V9SD6a zph`t-L`Yn%@HT~O6uwU3T7|Drc&WmB6|PhG5ryj&eqP}Qg?F?6Sz)7!U`FE06=uQ2 z%M^ZG;pGZHrtk`dA6A%*Q6glN`L9%%QYBuga1Ct=Bd$^rI}j3It?+h**-b3)X@yrQ z{EWh@6@F0RYZQJ!;cFGXUtvm;<+WJ-f4z#hPZ8Xp@I4BzQTSek*DAbK;dKgcQTRrM zH!FOT!kZMPZjb@r-7130!-$;<->UFk3g4#ioeDQ8e7nNy6>e5|gTf3cQO2`;(h)Ns zu&)yfVg$931gwad%1BH`h^f8AYzZ+LA!bX7$tW@VnwSkEX4ew4<;0f6DH-WgP#H)- z(UE|CPfXDgvoDF+6~ydI;uc)Qt8fu>v=CDlh}l)d>>6TrEit=}n7SZ+iZv>N%0dF_ z0tu*0#ME};?Fw@=5K~#1zDMDQ6n<1;js~W4G?AWNOT1X&T?nO5!Qn>&j7LdOt}w?h zGjRMeodpxq;1IK7Vvc8Gj(_4s3O}YWm6_=rzD%!H_zCs~BWQp~@FXr`S}5YD6kejR zUtzDp9FC-4pfHCcahbx;D(q4CIfY9VexB1EGptY%`xHTm!Y?R1AL049ekBT*hDH1L zMCg+``^Z(eBA`sWt9yzkLfuo8k?MXC!YFmW5FuL_s<71}r@~eXx+-jO+)ZJ$*fgDC zD#B`_#ZU?2S%JkATR?0vHdkSbxyux`7@VUp^H4(b6pmK-QVt|0#;AzdiXc|uOB9Y% zc$UKP3SX>ng2FQuPE>e?!aWt9u5gmV(@?);AX!BeE1aV6RE2vfe38Pb3QtkkrSN2h z(-fYhaJs@5D(qG`>H-y^tB8r>vnYKO&Q#s|0lt_|wkV%ml}a{P}u=4h4U3=Gnw8`;Vgywo7mUtiwsZ%WRn>ND$JfH9;7hkLVTXW>^S1V3bSL0 zhbWw(@KA-R2uvR)F?xrp!ieEA!n`LQp)dtaJW^ryEHMWfRgRiKJW63|0&#)D)EweM zh1pTWqlrzZZUnf!t4rSX&soMzlxZHkT^%- zxe8O+m|>p6R7T><6z1q5p099(!X*l?SJMO>)}u2p!Y!Yr5~ze?e26uw$vGRAavB}Kdn7coO(GD^H!VTQykM~;7HWCSZ_ z1{O?A&WR}rVz!K!j1b?TFeOL4Mqx5e%&sMUv%>5;Vm6fN>}omwDGElgFG)aA5wq`! zDN17Y9dVt)w<^rOXFB_y>FjG__B}Cmg_xs&n7To{fu@5IYzZUCDKV9en0-x5Wu%e1 zLmcm!5bfWUtlu8e^$SGM^c5wE3tW1geE2EE0hc}APqH$C(u+^6HBsbt(HgjV|9&03gSw0s&KBToK+W2f`e^*h^t z0$HqnGBHVR`15S zku7fBKGyoV?M!6l@U?iN-W1`w1Q+emIF%gd25*m4!Cx7kLCrmO9tRpSHdAzLit zVq6>uR@q%tJj8V<_Se>QM*H(z*S^8-P**cE| zKk%FG_%>9I9*KKTjy}MQN)^YhHtgc*96ii=0qX08a_pkGu2-r&&Fr8!m7`}mFKkWm zydQ}le24Z3Yu?`!CSLnGHB6M`>Y*rX+g(vfQ5nciNe;p_37IOysR2;YUAcNp_+((R z*#fE9#I{F`Byl2FpWv8+_;S*r;NJT4wu_QP_dLC)ZEBME?aYWcQIMx6cl_1aWO2MA z3i_0%Pn}17PC)4sah2jq#>Lv$e^Cgj_l##8X?G)}o-mI3P^`E+4DP~#N8#cG%d}}Y zOqc`hMtrcE`AHLoFpy@3q)D8KVkpCSm5e|Zaj}^^OC`qzC0}AD&sNFQAr@{^xi6K; zDRUH$h$GKG%-7>_&^ZOBRf%v0)h4PDBm3!Y zt=2?K#R{T26V;0+`{|kZVTjDvDE>xtxrvsELH&W2OO&`miO7<_C88^2a`=@2jCU~^ z$0v-zMdDQ|V`Pxvu9nFuzJQE$Jp*OC$}C~EDj^~$`5H6%T9wS<7?}Gyvx4gbDxii0 zlHd!oU@?460LjDR%K;dqYemXH-8`6hrvv}ce$949~{$Q3^h#YvPW zqhPmdi*auGo(phT^!{lvoyDIA=~p;zLb*8q_*$G`zUn;Pj={QjBt~1yd3u(7Wti=y zA))(ZjSqbF;XFN>wqmD)M|4LG*3I*eap?A7y)Os+U>F>+xtSwy_39HNKe{?uRa73$lE=)L*)L!sL3{)dL^U2t$cCGa8wG$P60biTezi@F1)(xK!1|7jMmNXVt0{WPB+az50oBRr2E2YpE=#Ipc};NMPMacoGQ|{ee}Q8hA}8uN zL3^C8JMIKQgn6oU**JYJza=#e8gVzhf>e3H!6x4J#rOP*$D@z7fWEs)e{7r{DR!mB zLQ}@WxNh|y0)ZA-k0141qS@|A5?eRm7`>DEz3eHRg4qQ$rTmj^Lu+WQ(!~1PV&ffb zwxjvLY8?M?fgTn`2wNqMGACDjQvN3gzFas7N{D{G5M8oXWM8NkC9X{{Ck_{=n1f~0 z%q0oWK&tA6`WQ*W;ZC#7Khnr~Q1rXY8I7~Z^#m3-36r0!C{-MM0rS%nlb{*_H9KV< zD9TkO>A+MuiDT8dWZL(g}N?jzDzK$QF?XOLRdQTy>KW~a2 zL8(EPQvGu;(qlAyYjNpR{R{k_3IRr2F~&k|u|7k)*Z*>{zDbkr8!S#*3f!abY%${I z>70=LTc$&|9QUDzx;1Yb8?W8(kD95!tHnNmm_W^c5Ey6p@FeqNk0*utU9)t%&9NP^ z;bMJ!FNl3xcYF`^_c$Yc(ro>C@aDV}PQVUxV3cgfN$@|;LEry47=2$b2VF#e2Gf}o zrs<{}I24^EDtFBVE>`^1(cy+&s?Puo z7iCehh0rMIUh8MttkF;9dqA9e2RJc%gi-v_dej3?;b4WIy#!tD0cCs5s`QC-_GWHK} zz^CeOvu}I@Kc+i2B-);c_n_tPy^Bz$#UHC&kW)HkW~{ zrcG;BFVTm~BN5tlo;b8b?<+fk^Pj~5JA!`}2fxq}WZoh*I|9sBRO?XY3~t*A3rhg-tw$ zwNmrpv3AE(ZE+{7^f38FsT`b{p}QUawj`2^&Cg(>oK&r^jk^2a?OzJIKzJSvkH(k6 zwk4u#_m2*Z#Me~PYV>9J6zp9!aG;*?AF9#s>*DB)MF2*hW{cm@-|lZ(rjM}WOrj(G zQ*lbrfY2D>N(&7W_LZ>4Dz@dYEzCb;B@8`cR$th2fM~i(FNk6}bO0#^3UQSG_*MG% zHhkE$unD90smwuw_^{b(42Lrc5!-rT#s9-P z)qk++_?yA7BZEBjqKLc00H} z=pTB!e%f}H<_cGiVfU8^{e(|7fy+E&vnMA)4*Au-V9w0g>-Uf0Wf?gGXzfL0U8%&mwk6{%4)^9wfU#Q_*9!npG zML6ug<#9ba1Rp`#_LP2~^LNO>ZmtxQ{rVE;?-e}gKj6oR)|UAH_Pl;=i1wD*XHEO{ zCP&)aRxQX!X}lAJ-xYW@N_M_$#1^ZnKemcFKUu{*w}K@|sH zh{Wg94#I){gMZ6GeN$&so&6(!ufJ=xw@(2ATE$U;Gl?4(TE)M)-qVYrhQQz^P=ud+1AA|6xLHM&E{CN=m zA_$*okJCGS**>DvpMvmL;^mL@)Tpn6qQ4P;`$+E__2;1IzlcE}>wSBi42nLLB+maT zuBT}FSby5~*CbKBAU$1F9>YNUR_y%*^VX`_HoN%xm|miNCng_l-^I4$ zP}c7yO8Y?-i(Zg2{6`SR2cnQE?O#FBKL+8S#L`bt#lJ=Ir&wm4CI^dpa9@P|Lj%qJ z(UL{ZAN4*qTe7(9CVW+)_K$j~EyRrMVGkm9D5ArE)MIR&lf|u{=;^jDDhySjQ-xhs z*iD6DDhyX)cNIpcFwzViQK&RbM9qngZ{7pfvFS5ipVmV$Vo4-A2*(8B*dQDigyWON zzq3N)MDpiYrY4BA88{nm>gW0he6~Q|w|uS-)OxnYNBStLBvpu|+Q~sUB?$Kl!l^;n z6@=4*aC#eFB>T$U79p`7gpDAa5ri{?a8?k`P8J`1p^x_EAfB#qiqer>h2a#)dV4Dz zt8kveG!Yb3ABDM%M%-6nI_Jds3R@e6{S>Bofrs6-b#32YE`W3mSYRdrraRfDan@R?HVRZMN}VfQcpQeUe%h9Cud zByZWGMZ#B@7KV!B^9)R3qIe8gD4FX(HUCC6C(nnsUHO$hReE;#vD#NKf!~XxUtx@0 zFMeY1y+7@1{o5|iVJOmMHRU^)_Td)v@B0o*MAL*zkHo+K@A_c}rhxT7>a(Q%?uiyM ztF+tJy1#V4uYj63hPU{gi+sI`9)tYg!W;;JwOc~Xq zm&pHH92R@)y4yE~7?HM7hMi2)B2pc`r;BSBDrE+eSm= ze@)7H%5H>dwxVRQb$fU(+ZYv&RpB@lj#uFX6;4#)1uDEyg_Be`S%p(nc##UHs<2pv z(^NQJg)>w*Q-v3+aFz-$QQ>SAUaG=5Dx9mrd1&Niy;5QSszZ$&ZNAtWX5?aXR0bY1 zSYQUFW>97ZUWyD$)AHB^ZK2rP-N+TSS9P&#i_GNmfaD4$yG2u1BN7{=QqqyvLSLWn zYGh%n^Z-Tg`bz|sdtvZzWhs>;%MEA0(?qj7szlmFM&EW()n?Qy7=g4#q{4SXyBWi= zyV}MPRy1r=of*`dL4z4In!)8}uuKMG;0;EW$;JvZ{tB}(uCY*$mW8ol;$*myV7oF| zJTkLahRE*@#aJmBmM$LW6}rV_=PEO&l+xAY=_1W1vSiBDsVsWMZ4WHQT; zgad;Kd)Fl3tl8r+SWCni6EqZhG~Sq{P4@RoFyNC-7S1HY2e>ZDxX31lX|n&r6eEe0 z|L6rdOcqtC&?8rO>>7+nHS)~}WD(zhC0Xf6R_Ye{E+YofC^+6f*JXTa2PiZQ?vlK2 z7@H6jWf-H)aIFh-9!a$;el?u z95tGzD(#&_?3-m7lR%humyx>h*Vuv?k!{>;6hI;AjnY#j?Jy;23s*vC9r$QwQoNIn zBS}WdbqyW;P`So#5T`afaC}-0I&6bjp96)x(SIn%*sjrPUEbT6rpbmoMe$ADqtVRc zc}Bd9!QozJOjI8gQ*6Z)S~1hCn59;EIliR8RMl#a23^4pDthNvOkc$G$T=Laz`d?g5OcqNA%2KwO!I6Q+ z?`4KkBnD>S6mMoYFi6&}ooAFLvS>bYu!?P?y6QY56AYl(c=7ysMgi`BI!}peI2pzB zg~5gk(Zz#}0h0go@s!6HEcOpJV$LYIjo)tu8%4;~Z-^RN(@uhU2?pF(9>b}mtSa% zv1!d>_he(ZgFZxOapZ;c=#5iAeH167rVkg9h1fOSKgGzh-7a093{kr*(k|chz`mxO zyYDc)3$kKGZDf>kbVRFDfGz$BajM~x&yQGOcU-}A zcZsE&q42AoO~W&({SkPE@dRC>VAk+(i@s1`4Vz5IXEP-)eJyw?quIt!;goF={fcFu z%_~M|(++qeR;w`hB0CD)#rl%-0kV9Vu4r zaNE`P3}YlIgeyoxDVBOO41Bu9b=S9V^B-vG2Gs&urx6K5=}eaiwfs zf8n_p^T#N$`(h(g&i-5gk|lN?S!8Dh;yAJX08~42mN78nel)27>HM34i_hy>!2^h= z1z@utOcuR*h4&P$eHaUCXTdcaB@WHP1UO0*KI4iOKhA;y!NKvDK$}@#h0aCMa z5EU+t@FlPxpX>z_bP-(i$hp#Yn>W`;we3w7eKvIOX?qMF`-bkl#La)#!$fU8o?yN< z*T{D~j>@ss@|GiBG`$-V**tZtT|PH{LL4Z=(xhOXG_0O^#`v>p?vp5j-Fr68eM&B) z6UjK0osCJyWp&#GJPbsC`?=6hg(^?Rdf)amY{nuO#KXy0w;t<<2a!#e8Fu+GeOAN% zct&gkW%#qG-BL!ZVQQd!A6$kh)KnI0pv*AG2tFt}H31`fJ_yXwaGay#;C#sIIpOhO z3O&5Quw!E#_vY(Q^n>aiyyYM$|#Pq0b=A5 zBWVz+sdlZ@VAj&NQbo>J4_P7`V3v5x5-8bhv3rT}anx+&;O2tWJS+<;jb%}9ox!A0 zrKZ+FVj^y%-adn3MU{~m_0Ad5d#jB2G%6Y`1FNA%zIz7QmsLj6%BlD&Th*}7_DfboamXfUjSJkX4F6UVF3#1Dc=1uMeW zmiyHhuXZ>?UnRn8(ZwH%!dgQ>fsfY0)2DY6B~A@Zi1$xjYV6W*AjVI1=$Ma9UCFOE zmOChqp2BlicRWq&)Ghx~HTnW=q3!g0CXCz1t@$oReMpfc78l2MG1wUi)_ECKE;b!xE_JQIjA9|ob zj9g`;hI0ej8iv`TaFv?tqr_FXbsj_Sk@bUO-zs#*aWU^fu8SAgaX{#5*a2*2tTvWF zoZ;7CaX#PgxyD#xY z#M0}LU;5#*a6*aP=nM2@aasv?7H_`6aJ4Fn0fs17vOP>3xB=oT5Zb@e&Cj>N>$yHD ze&ZH+uA7Y%^SxrzNs=ECrJq$KimwgD%fp`}V`^AqC5hvFfGn}6wKRHSlg?+GDUUH)`rmgeD^EYAFSy29Vlx}!#fi@fz>u!;Ll=D`g&qcpmv3@%$ zzPuHCYhQ@M+l=Srx~7|0{nuX6veP;8@%Gv0;g~&}FfZcCbQ1>4_5OKHD8Ur>Nb&3S zMxQiG*nBX-rc-CQ7@_T)HV(L%^oi0v=q>K`i?u8cq)wI=3+w69K?Y&r3LRLra!-NlOd>{1kTe1ED z47XAK!uySG!HM6gM6vGyjQ79M5OHM4#s2>LnBYI*1(bzq*Ils4Eggs>F z;rIsMX{zuK$QU8^UajFFDdNEiy+yJ1A)|LT<;_1AE>5N_m9LyprqpW^pCiZiI_2v}c8A}V+gkb7Ii+c7>BPng9V#HG9b-)_RwaOlE zQ9rcPn4dde`1W za{-03n|8qy`Vm>E*H)=di>Te0E1!g1IThvN;vYUSJUW~Y5k0%1gFlJ&yN#q+zC}g; z$)RPhaB9?UWBkZ}D^4h~hmp)Cm*S$lPpdS(-pK5MuUPVdZlOq9?uyRVaBE4%Dq=Rs z??xULWzFuzV)Y|Nw2$wD(P&xGta&G}8yCr06d4XdNQSLRmMtv8buliAmu{9#Rn0Q3 zg%PWcSLq>0XG`pg?x$oaL$i{fM9QOZPnb7R6g~=PiLC76uSv#dGnP}HB@e5CF^DU` z#XrUsi>N(@`LS$PRDg?r7I{~3{C=Fb@%2;DaG>@Wy=4_RbA6A|*XBqOj~sUN6jQ%R zu*)g-K4cur*F;loom0e=19)p7Gy-pusUYWD2*tge6noYU#j|EtA<>;bZWoyvt5ZqJlmZDJ-R2s&S<_l;A|5!#T zF2>Cj{T@>_ohK$ghBd=~Rg>8An337~&R@FzRnFNy7oVaHfbxRSwo-pF@MnC!jFD&lClaboA5IlZ-!Z3H2f_cF1 z(t+@3zCL+1GD<}Z6hHkT{+%hE;}Ie8Vr?&bq?Ar4amvu5n~!~w;B4I^6)8`uji+nH z$S2WZv`Hai+aK)Fy*Ql0l;RXYO~}?*Tx<}2FL>jV#xPrWig@KoqZh-^pEUZ|x~GVb zl0)J|@28AVTSSWgyr+!c^y*Q51%7;6-N^>Ks699=v{OTYzsK9gvOLUMH`+2X{JU)# z&xZILI%jN%bY?WHsI918)Kn;X#b+2XO@&PbO$8a171dr(T}GeMs*1WiQ68UBh9}&I z;xj(>6>z%8pUb+5v2K#Bn^5bfH7U}H(c5mCR6%-ybvM*X>~!{m#H0*t=?7A4bqk>-r#qFs^$c!5(|0 z=6n_?N^|ZTx5wT?b3O-zvvMy5iqS$@W~}CnMG&WjUNw49QDa@5xNTELzwkZw6s^l^ zAnT=dd0JF#&Y07qkLFka%D$ST5kbDz`5y7k=8U3l{k1N0KsZ3_e1p)pWXxQ1@0JW) znf`mXWNj++Px&}2}tancT zH2>R^bFPbDR5y)Wg}gI;j~xd94_&awo}h*Nv`DY0u4vd}@2S~iIu-4)Cuw%qRoT_v zWp&=tnz}NwZ7-VQzT8vk_Aam9V|QuxxsYy}W}h}=PeDP!9=lt!uN_B%J$6I0-{s%$ z&AFqSR_nibX--a7SY=IVeP(G*RjsGALELy(&im2s(yAI<%XM5HqqL^7rcV5BYt9&V zzS)YrQcq=NUTIBzL%)TM)ujy;HPw0bUK!Sl=kLzx@9Mj-(o?md%#(Myw{AgAy*C(( zKi{3RO!zkC^bxn+of9jzY|R-Yc5lkr7olossHv^=Uhb_Fn>OcM6m8X8TUSvf>vi@O zk8Z+?v5XM!Z_3FNQCo6$h<|R$$&ATf;`P?%m7!H_cOq?TPMtWmC8ukS)zrRqjnxem zRo=YIJ#`hH>V}M(TF=r(Z%%cMr?H_1owY<1+>?{rBMTAr_1?OM)*G?po}6s)5dMp* zDfLuUmM&bBW!;D)_v8%pcW=q*Zqq9LDfi}l5MpzFBL4M2&L-dJ=_{%mJj;i<@|1M? z=UJ^Suk+TI*Ho6dMl7tX@id(8TIm{5SJPNscK%2eGpBc-K7HmnC!Dp6N>AM)Z(dt} zR9xY8jev%=mgQq%jQGW(>Z{nlKT}jtNf(@zsoI*#73eVNR-M-;d+rxoc;Q(KtEeuk zfX+9xsoyUa7AW%0QX~6|BM;_8`+h;pf%(jAR#&yE{x8-&=By1_Q0MbhmzJNKJc`a* z3_7W%^xO(LKd6wto>twf@+{9Q^VT+$x7U{TUF^T(!JMHsUxsT;V^yuIw6dnYvCiwN zS-7y?+feVy8fT7nSASPcb>)ieetBhzBu|kzYh05mmUvxxWlHs33mO|-HH{6mjmYnD z^;uZi;96Kw>Fw&`-?DPp4A%lry|>y^<#kng8cNH(^)6pSxd*uxx*E#8u8L~pb@i#L zl=;r!A%|6Ym)AmHoCQBu`9cuYxhg%?iyA$PRQP$>{J-&^g1X@h;LUSvu{O4wKCfrv@jug!!snt7cgU9;*c z8YmaoF6497d24Ix8qDk!)vg5<)t~wB*jj8du zs%sit4Ru}=Ao(rxdaJx;E>FEx3+9-LGS`9?vWMEV0=|&fRllOX!CM7lS7SAbC@uFa zsPy&*zlipfnI)jgN>3@duV`Q~9@OTkb!9CpuP7~d`ARWad#f8NSGY<&jrGt7kE`Ch zXrZUEvLXB4f}Q7?g#`Crf%7Ra|3Bc}_kUsj=Xf`i0E0Pq_Q|WRY3muE6g@1F6f;JC znK#cbF<#BxD?6OasjTAk z2RSL?%6D^|i(hMjuhukrr*lMaS9!&va&Mihy0L13x31n*<@HpXs$EqBv+G&32<}3C z#pT}YGsba&bM3iT+Evtjl#}Q?$D)U|H9pvFf!Z}o*P^YZZH|Un{5a((*1MKfV6O2% zPwE?7Xo$zxfTqH-SL445CRbLvs^R<9QG?8ylyzvVu0*?Cp!75})Ky>#AwhjZU1KR` zks8bjb;~MXPP59q(k8fGf=G8d7iAB3)ng)Ptn@TMXeK|Fm2)lgu|g_qMLjK2nX6)< z%e%DEQ%NP}Oe5VPm*oz*>fu?LWdsk`0_Ttag%o_I82SyRk z2W}~iRDhg<{L-IO7uo$ms^Y0!=2=nyf6x_Qpt20kK3ms59KdpW=ji{)vCsS8sy8~e zV{SX>hYoyt^uq`ki(XuCv<+O-Gd9-jQ?v3gRNdBKGYweL zPG?rD0UPO(28%--Zea(;>c(F*RxZ~J3_&sNy_`&Cs9Hz2(Ie4z)!!Aymu%2|>;ibcusjpa64SNSOSL&&* zfgkCqH2bvL2e-Q(;^}t=69vxF|7At2$2fBZ;d2gb=lPU*7c?$HhnOwNlP$?(EAStd zgNpfjh+(3usI~o=W6TU@tNusrpZh z!X;NvoW;ELN*QE~NrcI;rdqmdXLhs?!?mDIrT(i@JLp!Y(Lt}O!t*4{d1SCBHLy5=`S}$wq)XeSej2srlU5bx7iA_gF0#e^iVB18mkx7EO%v9qYJzk)NtJ! zF$%GALN=wBt-eo{r+S5p`(D0Ej0wxIN-w5EqcZRRR7qeRLG}jihuoa*wx)6^UDuFD ziz8cviNM@8$mE(3+W;7Qb1io2E2?TMD;BQ6BDQ9++88w3y0EUM%C!Ld7E9{sXVJZq zNP1N+@A6Wwx2)dP;G-ufMb#z-XzAH!=f?k8)v{(Ed#SBzqyB6YZQl+hB%72+M==lU z?YsafKuRMlRu_4zy>%W8)>N;IVC!?JL(YS$(W6($JRhzX;l?^W}K@KyMxPqxuqR5;`@b`&i=m@ZpWt!SiQ9Fq>Wfd^Ga0ePZ=u@>hc{T@Unyb)vhVcHA zayx2P-;R23A@)obcuJR;o69t*&l*E{g{I58{njry6Q`7=(%FB%3a5aW4H%Uh7HB4 z1vQw&)Usqo&3x!ST71@Rz{O{+FSt72IoEgA&7wgab-3KJt0>C@`*|k&d2Aee-fTO1 z{X+OEzCd}jNy3~%|5xHDrBf6j_ken2|NlpFKdT)2pP>}zAOs&a+Q-O;5)G}7#=xn| zi!FL=7S&Rfn3#I$crT8G9NxDn}+FDy$?=?Ln^y&GQ z=6PysvGkH|58B{`7PA4hSc_p9W_E8CCL3QRceX0HwF)Pq?rfH-_&+Q*sMLpKqjdt8d2EcQAuST8=Kk~s0)++FGmie%i3csfYTLjn= zJxeR6{->q3E3~8bwQkY)`kSkab86if%w~9azlg4MMKukYxwMtL9CE?I@rL*%Xb}X} zI?_C@#lU7{`!@R2lgt9=tp7#f9kg{wyXk>^CA2#4_QY0wzM{-xMMMORO-x*itV5kgW3jKKoeX!txKoufLoXU(2ksqo&8OZ z=JZcb$dgY#t@kFf^Q=4nuaD%cj~Cyb$SKJf;z8$BuD~W@Egk@3_UDTP74Xh7sxk-{DbM%S^FIInA@<^1KM^ss{ zpiXk5C4W&+I2xtO$m%6p@+aiDH!Wjh1kc_#`Fw24ASg>_!n~ zrP+6w^%YgZr(RUA*$a>_r>Lr8zBx*?u>B}IyQr$6zo#1OcrD^d<_1NBMG^5BtIsS# zao+07wZviz;bFa&{1eIhFcEM*>hx9BRBK63gD8u!RTcH6TGB*z#MliPMK#q6D;8-X z!@!lS7gIKz-367JV?MA^Bn8*~Q7M2io(61H*4AlZ&q(4i+zjLJ)*`=0D>C37U}Dm` zWh1A1Ol75(FdO-NMH_O);ME^I9;!xz9VeJKcT7zc{C;|qUd^!tF-v3!g;d4BUDemunGAP>V6K45nV|HmYDWRH?T_ScdaCkrr~)Y)0>i)uokf-Fo_Pp-72XGBj|Zl-UsluE`V`ND}7)tU8A z@-9bzJ6Av%vnSPf%I4R48p<_$WdYd9orEz{Ilmt2>ecLJGIti^=nH9%qsWgu)r%@* z8yp{^QhhSyprv$Yo3nX8A8!rSYe_}O>;sdGDyzdovN|m#9QhHk#EZ8>DCwlVU?OWW z-^GAzwK&RApX_b$XbF>K2ag*M%nlDZNXa1Cm@IoV!i%CZr zw8$$YqbvlX(IO_$gqS5dzV)Nlsr;)gYBTp`O*7Zx4CvU_rm)NEkbAL-q{5Z-y6C8Z<`*B>_V=19F*< zcTh|V8nFp+xiYTG6EAIO#AYg9)(q_I%8_hu6!SB3V|`CDd+v-nPj!8z97bCFzfo_F zilKhT-wcv$GlF9%VVLSbGpc66VlA#wipGqnMaOCJGf+yO8EEqSiYmORQsF6Gp>?a3 z+-5V{tZZoXF3@Gk2-X!ngMCKGQLRP!QFVU{29y-}zUZBqo2>m-Ow7#fmGDOtlHW=u zy)*P@1qSs$#?e@;l2@$M=3<^yU^6jU6|B!Ufme@!$*iiT!503SA*$vvO~U z+`IhAzW*wJFX~UHvktC*|LcwZomshSHQ$RTqxNn2acRo~)#DzR5r6OQmKG&xh_xyI zrYBslN5A{&m;J^sbvI|kA8Abm<4yVB_lt0S`r5w-_u6r9&s^i*wJj|H-PV-9Xv~12 zFJDP*mM8wpe|K)~;4YDkaT{M+ zn6T@cRSU{P{#^7cd>*NP?ynF`Kbdj)!nYs3fB&=rZvW#0a`Uyw^9vVunf=6r zJ2!v!()59E)c?i*?ZDg+Epm6mC-HOdU9{v6J?~$fvFgM%qVsvVlOlVU7VX}2Z01EJ zZ=_~q{)E>$7o3;t@9}i$%DX@Cr$3f^*K%Lid%nnTX%VTeT$i|TaBgbkH$7HP8gs{? z6$}4-)nA@wtV#7&F(Hw#aupo+V?q^wY0QOmreOod=Jep8tUxw z<(|Svb;Es0OH1GkiwU+VziidcLnR5{{V`+c4X+mMn)FFai=3fhFq-m1M^4-M!R^nE zneLc-V(ERi%~EMFflc{q`wpu;m2jo=cZO%dt;-*Xy%b;KLBlT2e0%WU9T8)fe31A_ z^`ZHb#Oz_YxslKHC|&cnEw^01ZtkL!?_5>>dvW`)+*uK)Ux|1LZXd13zP~*3{McJ^;xk|P;@Tg)Q{R9PmZs!J_h`xw8BqD@){^_@T@d=#ozs4} d{{z(ICYAsI diff --git a/ocaml/driver/compenv.ml b/ocaml/driver/compenv.ml index e0cad3b2d06..7156ce46c5e 100644 --- a/ocaml/driver/compenv.ml +++ b/ocaml/driver/compenv.ml @@ -220,10 +220,20 @@ let set_compiler_pass ppf ~name v flag ~filter = (* 'can-discard=' specifies which arguments can be discarded without warning because they are not understood by some versions of OCaml. *) let can_discard = ref [] +let warnings_for_discarded_params = ref false + +let extra_params = ref None +let set_extra_params params = extra_params := params let read_one_param ppf position name v = let set name options s = setter ppf (fun b -> b) name options s in let clear name options s = setter ppf (fun b -> not b) name options s in + let handled = + match !extra_params with + | Some h -> h ppf position name v + | None -> false + in + if not handled then match name with | "g" -> set "g" [ Clflags.debug ] v | "bin-annot" -> set "bin-annot" [ Clflags.binary_annotations ] v @@ -359,112 +369,9 @@ let read_one_param ppf position name v = set "cmm-invariants" [ cmm_invariants ] v | "linscan" -> set "linscan" [ use_linscan ] v - | "ocamlcfg" -> - set "ocamlcfg" [ use_ocamlcfg ] v | "insn-sched" -> set "insn-sched" [ insn_sched ] v | "no-insn-sched" -> clear "insn-sched" [ insn_sched ] v - | "flambda2-join-points" -> - set "flambda2-join-points" - [Flambda2.join_points] v - | "no-flambda2-join-points" -> - clear "flambda2-join-points" - [Flambda2.join_points] v - | "flambda2-unbox-along-intra-function-control-flow" -> - set "flambda2-unbox-along-intra-function-control-flow" - [Flambda2.unbox_along_intra_function_control_flow] v - | "no-flambda2-unbox-along-intra-function-control-flow" -> - clear "flambda2-unbox-along-intra-function-control-flow" - [Flambda2.unbox_along_intra_function_control_flow] v - | "flambda2-backend-cse-at-toplevel" -> - set "flambda2-backend-cse-at-toplevel" - [Flambda2.backend_cse_at_toplevel] v - | "no-flambda2-backend-cse-at-toplevel" -> - clear "flambda2-backend-cse-at-toplevel" - [Flambda2.backend_cse_at_toplevel] v - | "flambda2-cse-depth" -> - int_setter ppf "flambda2-cse-depth" Flambda2.cse_depth v - | "flambda2-expert-inline-effects-in-cmm" -> - set "flambda2-expert-inline-effects-in-cmm" - [Flambda2.Expert.inline_effects_in_cmm] v - | "no-flambda2-expert-inline-effects-in-cmm" -> - clear "flambda2-expert-inline-effects-in-cmm" - [Flambda2.Expert.inline_effects_in_cmm] v - | "flambda2-expert-phantom-lets" -> - set "flambda2-expert-phantom-lets" - [Flambda2.Expert.phantom_lets] v - | "no-flambda2-expert-phantom-lets" -> - clear "flambda2-expert-phantom-lets" - [Flambda2.Expert.phantom_lets] v - | "flambda2-expert-max-unboxing-depth" -> - int_setter ppf "flambda2-expert-max-unboxing-depth" - Flambda2.Expert.max_unboxing_depth v - | "flambda2-expert-can-inline-recursive-functions" -> - set "flambda2-expert-can-inline-recursive-functions" - [Flambda2.Expert.can_inline_recursive_functions] v - | "no-flambda2-expert-can-inline-recursive-functions" -> - clear "flambda2-expert-can-inline-recursive-functions" - [Flambda2.Expert.can_inline_recursive_functions] v - | "flambda2-inline-max-depth" -> - Int_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-max-depth'" - Flambda2.Inlining.max_depth - | "flambda2-inline-max-rec-depth" -> - Int_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-max-rec-depth'" - Flambda2.Inlining.max_rec_depth - | "flambda2-inline-call-cost" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-call-cost'" - Flambda2.Inlining.call_cost - | "flambda2-inline-alloc-cost" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-alloc-cost'" - Flambda2.Inlining.alloc_cost - | "flambda2-inline-prim-cost" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-prim-cost'" - Flambda2.Inlining.prim_cost - | "flambda2-inline-branch-cost" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-branch-cost'" - Flambda2.Inlining.branch_cost - | "flambda2-inline-indirect-cost" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-indirect-cost'" - Flambda2.Inlining.indirect_call_cost - | "flambda2-inline-poly-compare-cost" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-poly-compare-cost'" - Flambda2.Inlining.poly_compare_cost - | "flambda2-inline-small-function-size" -> - Int_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-small-function-size'" - Flambda2.Inlining.small_function_size - | "flambda2-inline-large-function-size" -> - Int_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-large-function-size'" - Flambda2.Inlining.large_function_size - | "flambda2-inline-threshold" -> - Float_arg_helper.parse v - "Bad syntax in OCAMLPARAM for 'flambda2-inline-threshold'" - Flambda2.Inlining.threshold - | "flambda2-speculative-inlining-only-if-arguments-useful" -> - set "flambda2-speculative-inlining-only-if-arguments-useful" - [Flambda2.Inlining.speculative_inlining_only_if_arguments_useful] v - | "flambda2-treat-invalid-code-as-unreachable" -> - set "flambda2-treat-invalid-code-as-unreachable" - [Flambda2.treat_invalid_code_as_unreachable] v - | "no-flambda2-treat-invalid-code-as-unreachable" -> - clear "flambda2-treat-invalid-code-as-unreachable" - [Flambda2.treat_invalid_code_as_unreachable] v - | "flambda2-inlining-report-bin" -> - set "flambda2-inlining-report-bin" - [Flambda2.Inlining.report_bin] v - | "no-flambda2-inlining-report-bin" -> - clear "flambda2-inlining-report-bin" - [Flambda2.Inlining.report_bin] v - (* color output *) | "color" -> begin match color_reader.parse v with @@ -563,7 +470,8 @@ let read_one_param ppf position name v = end | _ -> - if not (List.mem name !can_discard) then begin + if !warnings_for_discarded_params && + not (List.mem name !can_discard) then begin can_discard := name :: !can_discard; Printf.ksprintf (print_error ppf) "Warning: discarding value of variable %S in OCAMLPARAM\n%!" diff --git a/ocaml/driver/compenv.mli b/ocaml/driver/compenv.mli index 93a585dc78a..845b3a88b9d 100644 --- a/ocaml/driver/compenv.mli +++ b/ocaml/driver/compenv.mli @@ -44,6 +44,16 @@ type readenv_position = Before_args | Before_compile of filename | Before_link val readenv : Format.formatter -> readenv_position -> unit +val set_extra_params : + (Format.formatter -> readenv_position -> string -> string -> bool) option -> + unit +(* Enable/disable warning about discarding any unknown arguments. *) +val warnings_for_discarded_params : bool ref + +val setter : + Format.formatter -> (bool -> 'a) -> string -> 'a ref list -> string -> unit +val int_setter : Format.formatter -> string -> int ref -> string -> unit +val check_bool : Format.formatter -> string -> string -> bool (* [is_unit_name name] returns true only if [name] can be used as a correct module name *) diff --git a/ocaml/driver/main_args.ml b/ocaml/driver/main_args.ml index 0dcb53fc199..8aa010aa6ba 100644 --- a/ocaml/driver/main_args.ml +++ b/ocaml/driver/main_args.ml @@ -328,10 +328,6 @@ let mk_linscan f = "-linscan", Arg.Unit f, " Use the linear scan register allocator" ;; -let mk_ocamlcfg f = - "-ocamlcfg", Arg.Unit f, " Use ocamlcfg" -;; - let mk_make_runtime f = "-make-runtime", Arg.Unit f, " Build a runtime system with given C objects and libraries" @@ -935,331 +931,6 @@ let mk__ f = " Treat as a file name (even if it starts with `-')" ;; -let format_default flag = if flag then " (default)" else "" -let format_not_default flag = if flag then "" else " (default)" - -module Flambda2 = Clflags.Flambda2 - -let mk_flambda2_join_points f = - "-flambda2-join-points", Arg.Unit f, - Printf.sprintf "Propagate information from all incoming edges to a join\n\ - \ point%s (Flambda 2 only)" - (format_default Flambda2.Default.join_points) -;; - -let mk_no_flambda2_join_points f = - "-no-flambda2-join-points", Arg.Unit f, - Printf.sprintf " Propagate information to a join point only if there are\n\ - \ zero or one incoming edge(s)%s (Flambda 2 only)" - (format_not_default Flambda2.Default.join_points) -;; - -let mk_flambda2_unbox_along_intra_function_control_flow f = - "-flambda2-unbox-along-intra-function-control-flow", Arg.Unit f, - Printf.sprintf " Pass values within\n\ - \ a function as unboxed where possible%s (Flambda 2 only)" - (format_default Flambda2.Default.unbox_along_intra_function_control_flow) -;; - -let mk_no_flambda2_unbox_along_intra_function_control_flow f = - "-no-flambda2-unbox-along-intra-function-control-flow", Arg.Unit f, - Printf.sprintf " Pass values within\n\ - \ a function in their normal representation%s (Flambda 2 only)" - (format_not_default - Flambda2.Default.unbox_along_intra_function_control_flow) -;; - -let mk_flambda2_backend_cse_at_toplevel f = - "-flambda2-backend-cse-at-toplevel", Arg.Unit f, - Printf.sprintf " Apply the backend CSE pass to module\n\ - \ initializers%s (Flambda 2 only)" - (format_default Flambda2.Default.backend_cse_at_toplevel) -;; - -let mk_no_flambda2_backend_cse_at_toplevel f = - "-no-flambda2-backend-cse-at-toplevel", Arg.Unit f, - Printf.sprintf " Do not apply the backend CSE pass to\n\ - \ module initializers%s (Flambda 2 only)" - (format_not_default Flambda2.Default.backend_cse_at_toplevel) -;; - -let mk_flambda2_cse_depth f = - "-flambda2-cse-depth", Arg.Int f, - Printf.sprintf " Depth threshold for eager tracking of CSE equations\n\ - \ (default %d) (Flambda 2 only)" - Flambda2.Default.cse_depth -;; - -let mk_flambda2_expert_code_id_and_symbol_scoping_checks f = - "-flambda2-expert-code-id-and-symbol-scoping-checks", Arg.Unit f, - Printf.sprintf " Perform checks on static\n\ - \ scopes of code IDs and symbols during To_cmm%s\n\ - \ (Flambda 2 only)" - (format_default Flambda2.Expert.Default.code_id_and_symbol_scoping_checks) -;; - -let mk_no_flambda2_expert_code_id_and_symbol_scoping_checks f = - "-no-flambda2-expert-code-id-and-symbol-scoping-checks", Arg.Unit f, - Printf.sprintf " Do not perform checks\n\ - \ on static scopes of code IDs and symbols during To_cmm%s\n\ - \ (Flambda 2 only)" - (format_not_default - Flambda2.Expert.Default.code_id_and_symbol_scoping_checks) -;; - -let mk_flambda2_expert_fallback_inlining_heuristic f = - "-flambda2-expert-fallback-inlining-heuristic", Arg.Unit f, - Printf.sprintf " Prevent inlining of functions\n\ - \ whose bodies contain closures%s (Flambda 2 only)" - (format_default Flambda2.Expert.Default.fallback_inlining_heuristic) -;; - -let mk_no_flambda2_expert_fallback_inlining_heuristic f = - "-no-flambda2-expert-fallback-inlining-heuristic", Arg.Unit f, - Printf.sprintf " Allow inlining of functions\n\ - \ whose bodies contain closures%s (Flambda 2 only)" - (format_not_default Flambda2.Expert.Default.fallback_inlining_heuristic) -;; - -let mk_flambda2_expert_inline_effects_in_cmm f = - "-flambda2-expert-inline-effects-in-cmm", Arg.Unit f, - Printf.sprintf " Allow inlining of effectful\n\ - \ expressions in the produced Cmm code%s (Flambda 2 only)" - (format_default Flambda2.Expert.Default.inline_effects_in_cmm) -;; - -let mk_no_flambda2_expert_inline_effects_in_cmm f = - "-no-flambda2-expert-inline-effects-in-cmm", Arg.Unit f, - Printf.sprintf " Prevent inlining of effectful\n\ - \ expressions in the produced Cmm code%s (Flambda 2 only)" - (format_not_default Flambda2.Expert.Default.inline_effects_in_cmm) -;; - -let mk_flambda2_expert_phantom_lets f = - "-flambda2-expert-phantom-lets", Arg.Unit f, - Printf.sprintf " Generate phantom lets when -g\n\ - \ is specified%s (Flambda 2 only)" - (format_default Flambda2.Expert.Default.phantom_lets) -;; - -let mk_no_flambda2_expert_phantom_lets f = - "-no-flambda2-expert-phantom-lets", Arg.Unit f, - Printf.sprintf " Do not generate phantom lets even when -g\n\ - \ is specified%s (Flambda 2 only)" - (format_not_default Flambda2.Expert.Default.phantom_lets) -;; - -let mk_flambda2_expert_max_block_size_for_projections f = - "-flambda2-expert-max-block-size-for-projections", Arg.Int f, - Printf.sprintf " Do not simplify projections\n\ - \ from blocks if the block size exceeds this value (default %s)\n\ - \ (Flambda 2 only)" - (match Flambda2.Expert.Default.max_block_size_for_projections with - | None -> "not set" - | Some max -> string_of_int max) -;; - -let mk_flambda2_expert_max_unboxing_depth f = - "-flambda2-expert-max-unboxing-depth", Arg.Int f, - Printf.sprintf " Do not unbox (nested) values deeper\n\ - \ than this many levels (default %d) (Flambda 2 only)" - Flambda2.Expert.Default.max_unboxing_depth -;; - -let mk_flambda2_expert_can_inline_recursive_functions f = - "-flambda2-expert-can-inline-recursive-functions", Arg.Unit f, - Printf.sprintf " Consider inlining\n\ - \ recursive functions (default %s) (Flambda 2 only)" - (format_default Flambda2.Expert.Default.can_inline_recursive_functions) -;; - -let mk_no_flambda2_expert_can_inline_recursive_functions f = - "-no-flambda2-expert-can-inline-recursive-functions", Arg.Unit f, - Printf.sprintf " Only inline recursive\n\ - \ functions if forced to so do by an attribute\n\ - \ (default %s) (Flambda 2 only)" - (format_not_default Flambda2.Expert.Default.can_inline_recursive_functions) -;; - -let mk_flambda2_debug_permute_every_name f = - "-flambda2-debug-permute-every-name", Arg.Unit f, - Printf.sprintf " Permute every name to test name\n\ - \ permutation code%s (Flambda 2 only)" - (format_default Flambda2.Debug.Default.permute_every_name) -;; - -let mk_no_flambda2_debug_permute_every_name f = - "-no-flambda2-debug-permute-every-name", Arg.Unit f, - Printf.sprintf " Do not permute every name to test\n\ - \ name permutation code%s (Flambda 2 only)" - (format_not_default Flambda2.Debug.Default.permute_every_name) -;; - -let mk_flambda2_debug_concrete_types_only_on_canonicals f = - "-flambda2-debug-concrete-types-only-on-canonicals", Arg.Unit f, - Printf.sprintf " Check that concrete\n\ - \ types are only assigned to canonical\n\ - \ names%s (Flambda 2 only)" - (format_default Flambda2.Debug.Default.concrete_types_only_on_canonicals) -;; - -let mk_no_flambda2_debug_concrete_types_only_on_canonicals f = - "-no-flambda2-debug-concrete-types-only-on-canonicals", Arg.Unit f, - Printf.sprintf " Do not check that\n\ - \ concrete types are only assigned to canonical\n\ - \ names%s (Flambda 2 only)" - (format_not_default - Flambda2.Debug.Default.concrete_types_only_on_canonicals) -;; - -let mk_flambda2_inline_max_depth f = - "-flambda2-inline-max-depth", Arg.String f, - Printf.sprintf "|=[,...]\n\ - \ Maximum depth of search for inlining opportunities inside\n\ - \ inlined functions (default %d) (Flambda 2 only)" - Clflags.Flambda2.Inlining.Default.max_depth -;; - -let mk_flambda2_inline_max_rec_depth f = - "-flambda2-inline-max-rec-depth", Arg.String f, - Printf.sprintf "|=[,...]\n\ - \ Maximum depth of search for inlining opportunities inside\n\ - \ inlined recursive functions (default %d) (Flambda 2 only)" - Clflags.Flambda2.Inlining.Default.max_rec_depth -;; - -let mk_flambda2_inline_cost arg descr ~default f = - Printf.sprintf "-flambda2-inline-%s-cost" arg, - Arg.String f, - Printf.sprintf "|=[,...]\n\ - \ The cost of not removing %s during inlining\n\ - \ (default %.03f, higher = more costly) (Flambda 2 only)" - descr - default -;; - -let mk_flambda2_inline_call_cost = - mk_flambda2_inline_cost "call" "a call" - ~default:Clflags.Flambda2.Inlining.Default.call_cost - -let mk_flambda2_inline_alloc_cost = - mk_flambda2_inline_cost "alloc" "an allocation" - ~default:Clflags.Flambda2.Inlining.Default.alloc_cost - -let mk_flambda2_inline_prim_cost = - mk_flambda2_inline_cost "prim" "a primitive" - ~default:Clflags.Flambda2.Inlining.Default.prim_cost - -let mk_flambda2_inline_branch_cost = - mk_flambda2_inline_cost "branch" "a conditional" - ~default:Clflags.Flambda2.Inlining.Default.branch_cost - -let mk_flambda2_inline_indirect_call_cost = - mk_flambda2_inline_cost "indirect" "an indirect call" - ~default:Clflags.Flambda2.Inlining.Default.indirect_call_cost - -let mk_flambda2_inline_poly_compare_cost = - mk_flambda2_inline_cost "poly-compare" "a polymorphic comparison" - ~default:Clflags.Flambda2.Inlining.Default.poly_compare_cost - -(* CR-someday mshinwell: We should have a check that the parameters provided by - the user are sensible, e.g. small_function_size <= large_function_size. *) - -let mk_flambda2_inline_small_function_size f = - "-flambda2-inline-small-function-size", Arg.String f, - Printf.sprintf "|=[,...]\n\ - \ Functions with a cost less than this will always be inlined\n\ - \ unless an attribute instructs otherwise (default %d)\n\ - \ (Flambda 2 only)" - Clflags.Flambda2.Inlining.Default.small_function_size -;; - -let mk_flambda2_inline_large_function_size f = - "-flambda2-inline-large-function-size", Arg.String f, - Printf.sprintf "|=[,...]\n\ - \ Functions with a cost greater than this will never be inlined\n\ - \ unless an attribute instructs otherwise (default %d); speculative\n\ - \ inlining will be disabled if equal to the small function size\n\ - \ (Flambda 2 only)" - Clflags.Flambda2.Inlining.Default.large_function_size -;; - -let mk_flambda2_inline_threshold f = - "-flambda2-inline-threshold", Arg.String f, - Printf.sprintf "|=[,...]\n\ - \ Aggressiveness of inlining (default %.02f, higher numbers mean\n\ - \ more aggressive) (Flambda 2 only)" - Clflags.Flambda2.Inlining.Default.threshold - -let mk_flambda2_speculative_inlining_only_if_arguments_useful f = - "-flambda2-speculative-inlining-only-if-arguments-useful", Arg.Unit f, - Printf.sprintf " Only\n\ - \ perform speculative inlining if the Flambda type system has\n\ - \ useful information about the argument(s) at the call site%s\n\ - \ (Flambda 2 only)" - (format_default - Flambda2.Inlining.Default.speculative_inlining_only_if_arguments_useful) - -let mk_no_flambda2_speculative_inlining_only_if_arguments_useful f = - "-no-flambda2-speculative-inlining-only-if-arguments-useful", Arg.Unit f, - Printf.sprintf " Ignore\n\ - \ whether the Flambda type system has useful information\n\ - \ about the argument(s) at the call site when performing\n\ - \ speculative inlining%s (Flambda 2 only)" - (format_not_default - Flambda2.Inlining.Default.speculative_inlining_only_if_arguments_useful) - -let mk_flambda2_treat_invalid_code_as_unreachable f = - "-flambda2-treat-invalid-code-as-unreachable", Arg.Unit f, - Printf.sprintf " Treat code deemed as\n\ - \ invalid by the Flambda 2 type system as unreachable, thus causing\n\ - \ it (and potentially calling code) to be deleted%s\n\ - \ (Flambda 2 only)" - (format_default Flambda2.Default.treat_invalid_code_as_unreachable) -;; - -let mk_no_flambda2_treat_invalid_code_as_unreachable f = - "-no-flambda2-treat-invalid-code-as-unreachable", Arg.Unit f, - Printf.sprintf " Do not treat code deemed as\n\ - \ invalid by the Flambda 2 type system as unreachable, instead\n\ - \ replacing it by a trap (which currently causes a segfault)%s\n\ - \ (Flambda 2 only)" - (format_not_default Flambda2.Default.treat_invalid_code_as_unreachable) -;; - -let mk_flambda2_inlining_report_bin f = - "-flambda2-inlining-report-bin", Arg.Unit f, " Write inlining report\n\ - \ in binary format (Flambda 2 only)" -;; - -let mk_flambda2_unicode f = - "-flambda2-unicode", Arg.Unit f, " Use Unicode output when printing\n\ - \ Flambda 2 code" -;; - -let mk_drawfexpr f = - "-drawfexpr", Arg.Unit f, " Like -drawflambda but outputs fexpr language\n\ - \ (Flambda 2 only)" -;; - -let mk_dfexpr f = - "-dfexpr", Arg.Unit f, " Like -dflambda but outputs fexpr language\n\ - \ (Flambda 2 only)" -;; - -let mk_dflexpect f = - "-dflexpect", Arg.Unit f, " Like -dflambda but outputs a .flt file\n\ - \ whose basename matches that of the input .ml file (Flambda 2 only)" -;; - -let mk_dclosure_offsets f = - "-dclosure-offsets", Arg.Unit f, " Dump closure offsets (Flambda 2 only)" -;; - -let mk_dfreshen f = - "-dfreshen", Arg.Unit f, " Freshen bound names when printing (Flambda 2 only)" -;; - module type Common_options = sig val _absname : unit -> unit val _alert : string -> unit @@ -1439,7 +1110,6 @@ module type Optcommon_options = sig val _insn_sched : unit -> unit val _no_insn_sched : unit -> unit val _linscan : unit -> unit - val _ocamlcfg : unit -> unit val _no_float_const_prop : unit -> unit val _clambda_checks : unit -> unit @@ -1470,57 +1140,6 @@ module type Optcommon_options = sig val _dlinear : unit -> unit val _dinterval : unit -> unit val _dstartup : unit -> unit - - val _flambda2_join_points : unit -> unit - val _no_flambda2_join_points : unit -> unit - val _flambda2_unbox_along_intra_function_control_flow : unit -> unit - val _no_flambda2_unbox_along_intra_function_control_flow : unit -> unit - val _flambda2_backend_cse_at_toplevel : unit -> unit - val _no_flambda2_backend_cse_at_toplevel : unit -> unit - val _flambda2_cse_depth : int -> unit - val _flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit - val _no_flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit - val _flambda2_expert_fallback_inlining_heuristic : unit -> unit - val _no_flambda2_expert_fallback_inlining_heuristic : unit -> unit - val _flambda2_expert_inline_effects_in_cmm : unit -> unit - val _no_flambda2_expert_inline_effects_in_cmm : unit -> unit - val _flambda2_expert_phantom_lets : unit -> unit - val _no_flambda2_expert_phantom_lets : unit -> unit - val _flambda2_expert_max_block_size_for_projections : int -> unit - val _flambda2_expert_max_unboxing_depth : int -> unit - val _flambda2_expert_can_inline_recursive_functions : unit -> unit - val _no_flambda2_expert_can_inline_recursive_functions : unit -> unit - val _flambda2_debug_permute_every_name : unit -> unit - val _no_flambda2_debug_permute_every_name : unit -> unit - val _flambda2_debug_concrete_types_only_on_canonicals : unit -> unit - val _no_flambda2_debug_concrete_types_only_on_canonicals : unit -> unit - - val _flambda2_inline_max_depth : string -> unit - val _flambda2_inline_max_rec_depth : string -> unit - val _flambda2_inline_call_cost : string -> unit - val _flambda2_inline_alloc_cost : string -> unit - val _flambda2_inline_prim_cost : string -> unit - val _flambda2_inline_branch_cost : string -> unit - val _flambda2_inline_indirect_call_cost : string -> unit - val _flambda2_inline_poly_compare_cost : string -> unit - val _flambda2_inline_small_function_size : string -> unit - val _flambda2_inline_large_function_size : string -> unit - val _flambda2_inline_threshold : string -> unit - val _flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit - val _no_flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit - - val _flambda2_inlining_report_bin : unit -> unit - - val _flambda2_unicode : unit -> unit - - val _flambda2_treat_invalid_code_as_unreachable : unit -> unit - val _no_flambda2_treat_invalid_code_as_unreachable : unit -> unit - - val _drawfexpr : unit -> unit - val _dfexpr : unit -> unit - val _dflexpect : unit -> unit - val _dclosure_offsets : unit -> unit - val _dfreshen : unit -> unit end;; module type Optcomp_options = sig @@ -1797,7 +1416,6 @@ struct mk_alias_deps F._alias_deps; mk_no_alias_deps F._no_alias_deps; mk_linscan F._linscan; - mk_ocamlcfg F._ocamlcfg; mk_app_funct F._app_funct; mk_no_app_funct F._no_app_funct; mk_no_float_const_prop F._no_float_const_prop; @@ -1858,76 +1476,6 @@ struct mk_where F._where; mk__ F.anonymous; - mk_flambda2_join_points F._flambda2_join_points; - mk_no_flambda2_join_points F._no_flambda2_join_points; - mk_flambda2_unbox_along_intra_function_control_flow - F._flambda2_unbox_along_intra_function_control_flow; - mk_no_flambda2_unbox_along_intra_function_control_flow - F._no_flambda2_unbox_along_intra_function_control_flow; - mk_flambda2_backend_cse_at_toplevel F._flambda2_backend_cse_at_toplevel; - mk_no_flambda2_backend_cse_at_toplevel - F._no_flambda2_backend_cse_at_toplevel; - mk_flambda2_cse_depth F._flambda2_cse_depth; - mk_flambda2_expert_code_id_and_symbol_scoping_checks - F._flambda2_expert_code_id_and_symbol_scoping_checks; - mk_no_flambda2_expert_code_id_and_symbol_scoping_checks - F._no_flambda2_expert_code_id_and_symbol_scoping_checks; - mk_flambda2_expert_fallback_inlining_heuristic - F._flambda2_expert_fallback_inlining_heuristic; - mk_no_flambda2_expert_fallback_inlining_heuristic - F._no_flambda2_expert_fallback_inlining_heuristic; - mk_flambda2_expert_inline_effects_in_cmm - F._flambda2_expert_inline_effects_in_cmm; - mk_no_flambda2_expert_inline_effects_in_cmm - F._no_flambda2_expert_inline_effects_in_cmm; - mk_flambda2_expert_phantom_lets - F._flambda2_expert_phantom_lets; - mk_no_flambda2_expert_phantom_lets - F._no_flambda2_expert_phantom_lets; - mk_flambda2_expert_max_block_size_for_projections - F._flambda2_expert_max_block_size_for_projections; - mk_flambda2_expert_max_unboxing_depth - F._flambda2_expert_max_unboxing_depth; - mk_flambda2_expert_can_inline_recursive_functions - F._flambda2_expert_can_inline_recursive_functions; - mk_no_flambda2_expert_can_inline_recursive_functions - F._no_flambda2_expert_can_inline_recursive_functions; - mk_flambda2_debug_permute_every_name - F._flambda2_debug_permute_every_name; - mk_no_flambda2_debug_permute_every_name - F._no_flambda2_debug_permute_every_name; - mk_flambda2_debug_concrete_types_only_on_canonicals - F._flambda2_debug_concrete_types_only_on_canonicals; - mk_no_flambda2_debug_concrete_types_only_on_canonicals - F._no_flambda2_debug_concrete_types_only_on_canonicals; - - mk_flambda2_inline_max_depth F._flambda2_inline_max_depth; - mk_flambda2_inline_max_rec_depth F._flambda2_inline_max_rec_depth; - mk_flambda2_inline_alloc_cost F._flambda2_inline_alloc_cost; - mk_flambda2_inline_branch_cost F._flambda2_inline_branch_cost; - mk_flambda2_inline_call_cost F._flambda2_inline_call_cost; - mk_flambda2_inline_prim_cost F._flambda2_inline_prim_cost; - mk_flambda2_inline_indirect_call_cost F._flambda2_inline_indirect_call_cost; - mk_flambda2_inline_poly_compare_cost F._flambda2_inline_poly_compare_cost; - mk_flambda2_inline_small_function_size - F._flambda2_inline_small_function_size; - mk_flambda2_inline_large_function_size - F._flambda2_inline_large_function_size; - mk_flambda2_inline_threshold F._flambda2_inline_threshold; - mk_flambda2_speculative_inlining_only_if_arguments_useful - F._flambda2_speculative_inlining_only_if_arguments_useful; - mk_no_flambda2_speculative_inlining_only_if_arguments_useful - F._no_flambda2_speculative_inlining_only_if_arguments_useful; - - mk_flambda2_inlining_report_bin F._flambda2_inlining_report_bin; - - mk_flambda2_unicode F._flambda2_unicode; - - mk_flambda2_treat_invalid_code_as_unreachable - F._flambda2_treat_invalid_code_as_unreachable; - mk_no_flambda2_treat_invalid_code_as_unreachable - F._no_flambda2_treat_invalid_code_as_unreachable; - mk_match_context_rows F._match_context_rows; mk_dno_unique_ids F._dno_unique_ids; mk_dunique_ids F._dunique_ids; @@ -1947,11 +1495,7 @@ struct mk_dflambda_no_invariants F._dflambda_no_invariants; mk_dflambda_let F._dflambda_let; mk_dflambda_verbose F._dflambda_verbose; - mk_drawfexpr F._drawfexpr; - mk_dfexpr F._dfexpr; - mk_dflexpect F._dflexpect; - mk_dclosure_offsets F._dclosure_offsets; - mk_dfreshen F._dfreshen; + mk_dcfg F._dcfg; mk_dcmm F._dcmm; mk_dsel F._dsel; @@ -2006,7 +1550,6 @@ module Make_opttop_options (F : Opttop_options) = struct mk_alias_deps F._alias_deps; mk_no_alias_deps F._no_alias_deps; mk_linscan F._linscan; - mk_ocamlcfg F._ocamlcfg; mk_app_funct F._app_funct; mk_no_app_funct F._no_app_funct; mk_no_float_const_prop F._no_float_const_prop; @@ -2054,82 +1597,6 @@ module Make_opttop_options (F : Opttop_options) = struct mk_color F._color; mk_error_style F._error_style; - mk_flambda2_join_points F._flambda2_join_points; - mk_no_flambda2_join_points F._no_flambda2_join_points; - mk_flambda2_unbox_along_intra_function_control_flow - F._flambda2_unbox_along_intra_function_control_flow; - mk_no_flambda2_unbox_along_intra_function_control_flow - F._no_flambda2_unbox_along_intra_function_control_flow; - mk_flambda2_backend_cse_at_toplevel F._flambda2_backend_cse_at_toplevel; - mk_no_flambda2_backend_cse_at_toplevel - F._no_flambda2_backend_cse_at_toplevel; - mk_flambda2_cse_depth F._flambda2_cse_depth; - mk_flambda2_expert_code_id_and_symbol_scoping_checks - F._flambda2_expert_code_id_and_symbol_scoping_checks; - mk_no_flambda2_expert_code_id_and_symbol_scoping_checks - F._no_flambda2_expert_code_id_and_symbol_scoping_checks; - mk_flambda2_expert_fallback_inlining_heuristic - F._flambda2_expert_fallback_inlining_heuristic; - mk_no_flambda2_expert_fallback_inlining_heuristic - F._no_flambda2_expert_fallback_inlining_heuristic; - mk_flambda2_expert_inline_effects_in_cmm - F._flambda2_expert_inline_effects_in_cmm; - mk_no_flambda2_expert_inline_effects_in_cmm - F._no_flambda2_expert_inline_effects_in_cmm; - mk_flambda2_expert_phantom_lets - F._flambda2_expert_phantom_lets; - mk_no_flambda2_expert_phantom_lets - F._no_flambda2_expert_phantom_lets; - mk_flambda2_expert_max_block_size_for_projections - F._flambda2_expert_max_block_size_for_projections; - mk_flambda2_expert_max_unboxing_depth - F._flambda2_expert_max_unboxing_depth; - mk_flambda2_expert_can_inline_recursive_functions - F._flambda2_expert_can_inline_recursive_functions; - mk_no_flambda2_expert_can_inline_recursive_functions - F._no_flambda2_expert_can_inline_recursive_functions; - mk_flambda2_debug_permute_every_name - F._flambda2_debug_permute_every_name; - mk_no_flambda2_debug_permute_every_name - F._no_flambda2_debug_permute_every_name; - mk_flambda2_debug_concrete_types_only_on_canonicals - F._flambda2_debug_concrete_types_only_on_canonicals; - mk_no_flambda2_debug_concrete_types_only_on_canonicals - F._no_flambda2_debug_concrete_types_only_on_canonicals; - - mk_flambda2_inline_max_depth F._flambda2_inline_max_depth; - mk_flambda2_inline_max_rec_depth F._flambda2_inline_max_rec_depth; - mk_flambda2_inline_alloc_cost F._flambda2_inline_alloc_cost; - mk_flambda2_inline_branch_cost F._flambda2_inline_branch_cost; - mk_flambda2_inline_call_cost F._flambda2_inline_call_cost; - mk_flambda2_inline_prim_cost F._flambda2_inline_prim_cost; - mk_flambda2_inline_indirect_call_cost F._flambda2_inline_indirect_call_cost; - mk_flambda2_inline_poly_compare_cost F._flambda2_inline_poly_compare_cost; - mk_flambda2_inline_small_function_size - F._flambda2_inline_small_function_size; - mk_flambda2_inline_large_function_size - F._flambda2_inline_large_function_size; - mk_flambda2_inline_threshold F._flambda2_inline_threshold; - mk_flambda2_speculative_inlining_only_if_arguments_useful - F._flambda2_speculative_inlining_only_if_arguments_useful; - mk_no_flambda2_speculative_inlining_only_if_arguments_useful - F._no_flambda2_speculative_inlining_only_if_arguments_useful; - - mk_flambda2_inlining_report_bin F._flambda2_inlining_report_bin; - - mk_flambda2_unicode F._flambda2_unicode; - - mk_flambda2_treat_invalid_code_as_unreachable - F._flambda2_treat_invalid_code_as_unreachable; - mk_no_flambda2_treat_invalid_code_as_unreachable - F._no_flambda2_treat_invalid_code_as_unreachable; - - mk_drawfexpr F._drawfexpr; - mk_dfexpr F._dfexpr; - mk_dflexpect F._dflexpect; - mk_dclosure_offsets F._dclosure_offsets; - mk_dfreshen F._dfreshen; - mk_dsource F._dsource; mk_dparsetree F._dparsetree; mk_dtypedtree F._dtypedtree; @@ -2390,7 +1857,6 @@ module Default = struct let _insn_sched = set insn_sched let _no_insn_sched = clear insn_sched let _linscan = set use_linscan - let _ocamlcfg = set use_ocamlcfg let _no_float_const_prop = clear float_const_prop let _no_unbox_free_vars_of_closures = clear unbox_free_vars_of_closures let _no_unbox_specialised_args = clear unbox_specialised_args @@ -2410,129 +1876,6 @@ module Default = struct let _unbox_closures = set unbox_closures let _unbox_closures_factor f = unbox_closures_factor := f let _verbose = set verbose - - let _flambda2_join_points = set Flambda2.join_points - let _no_flambda2_join_points = clear Flambda2.join_points - let _flambda2_unbox_along_intra_function_control_flow = - set Flambda2.unbox_along_intra_function_control_flow - let _no_flambda2_unbox_along_intra_function_control_flow = - clear Flambda2.unbox_along_intra_function_control_flow - let _flambda2_backend_cse_at_toplevel = - set Flambda2.backend_cse_at_toplevel - let _no_flambda2_backend_cse_at_toplevel = - clear Flambda2.backend_cse_at_toplevel - let _flambda2_cse_depth n = Flambda2.cse_depth := n - let _flambda2_expert_code_id_and_symbol_scoping_checks = - set Flambda2.Expert.code_id_and_symbol_scoping_checks - let _no_flambda2_expert_code_id_and_symbol_scoping_checks = - clear Flambda2.Expert.code_id_and_symbol_scoping_checks - let _flambda2_expert_fallback_inlining_heuristic = - set Flambda2.Expert.fallback_inlining_heuristic - let _no_flambda2_expert_fallback_inlining_heuristic = - clear Flambda2.Expert.fallback_inlining_heuristic - let _flambda2_expert_inline_effects_in_cmm = - set Flambda2.Expert.inline_effects_in_cmm - let _no_flambda2_expert_inline_effects_in_cmm = - clear Flambda2.Expert.inline_effects_in_cmm - let _flambda2_expert_phantom_lets = - set Flambda2.Expert.phantom_lets - let _no_flambda2_expert_phantom_lets = - clear Flambda2.Expert.phantom_lets - let _flambda2_expert_max_block_size_for_projections size = - Flambda2.Expert.max_block_size_for_projections := Some size - let _flambda2_expert_max_unboxing_depth depth = - Flambda2.Expert.max_unboxing_depth := depth - let _flambda2_expert_can_inline_recursive_functions () = - Flambda2.Expert.can_inline_recursive_functions := true - let _no_flambda2_expert_can_inline_recursive_functions () = - Flambda2.Expert.can_inline_recursive_functions := false - let _flambda2_debug_permute_every_name = - set Flambda2.Debug.permute_every_name - let _no_flambda2_debug_permute_every_name = - clear Flambda2.Debug.permute_every_name - let _flambda2_debug_concrete_types_only_on_canonicals = - set Flambda2.Debug.concrete_types_only_on_canonicals - let _no_flambda2_debug_concrete_types_only_on_canonicals = - clear Flambda2.Debug.concrete_types_only_on_canonicals - - let _flambda2_inline_max_depth spec = - Int_arg_helper.parse spec - "Syntax: -flambda2-inline-max-depth | =[,...]" - Flambda2.Inlining.max_depth - - let _flambda2_inline_max_rec_depth spec = - Int_arg_helper.parse spec - "Syntax: -flambda2-inline-max-rec-depth | =[,...]" - Flambda2.Inlining.max_rec_depth - let _flambda2_inline_alloc_cost spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-alloc-cost | =[,...]" - Flambda2.Inlining.alloc_cost - - let _flambda2_inline_branch_cost spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-branch-cost | =[,...]" - Flambda2.Inlining.branch_cost - - let _flambda2_inline_call_cost spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-call-cost | =[,...]" - Flambda2.Inlining.call_cost - - let _flambda2_inline_prim_cost spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-prim-cost | =[,...]" - Flambda2.Inlining.prim_cost - - let _flambda2_inline_indirect_call_cost spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-indirect-call-cost | \ - =[,...]" - Flambda2.Inlining.indirect_call_cost - - let _flambda2_inline_poly_compare_cost spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-poly-compare-cost | \ - =[,...]" - Flambda2.Inlining.poly_compare_cost - - let _flambda2_inline_small_function_size spec = - Int_arg_helper.parse spec - "Syntax: -flambda2-inline-small-function-size | \ - =[,...]" - Flambda2.Inlining.small_function_size - - let _flambda2_inline_large_function_size spec = - Int_arg_helper.parse spec - "Syntax: -flambda2-inline-large-function-size | \ - =[,...]" - Flambda2.Inlining.large_function_size - - let _flambda2_inline_threshold spec = - Float_arg_helper.parse spec - "Syntax: -flambda2-inline-threshold | =[,...]" - Flambda2.Inlining.threshold - - let _flambda2_speculative_inlining_only_if_arguments_useful = - set Flambda2.Inlining.speculative_inlining_only_if_arguments_useful - - let _no_flambda2_speculative_inlining_only_if_arguments_useful = - clear Flambda2.Inlining.speculative_inlining_only_if_arguments_useful - - let _flambda2_inlining_report_bin = set Flambda2.Inlining.report_bin - - let _flambda2_unicode = set Flambda2.unicode - - let _flambda2_treat_invalid_code_as_unreachable = - set Flambda2.treat_invalid_code_as_unreachable - let _no_flambda2_treat_invalid_code_as_unreachable = - clear Flambda2.treat_invalid_code_as_unreachable - - let _drawfexpr = set Flambda2.Dump.rawfexpr - let _dfexpr = set Flambda2.Dump.fexpr - let _dflexpect = set Flambda2.Dump.flexpect - let _dclosure_offsets = set Flambda2.Dump.closure_offsets - let _dfreshen = set Flambda2.Dump.freshen end module Compiler = struct diff --git a/ocaml/driver/main_args.mli b/ocaml/driver/main_args.mli index a0bb17d1185..a9382de39a0 100644 --- a/ocaml/driver/main_args.mli +++ b/ocaml/driver/main_args.mli @@ -194,7 +194,6 @@ module type Optcommon_options = sig val _insn_sched : unit -> unit val _no_insn_sched : unit -> unit val _linscan : unit -> unit - val _ocamlcfg : unit -> unit val _no_float_const_prop : unit -> unit val _clambda_checks : unit -> unit @@ -225,58 +224,6 @@ module type Optcommon_options = sig val _dlinear : unit -> unit val _dinterval : unit -> unit val _dstartup : unit -> unit - - val _flambda2_join_points : unit -> unit - val _no_flambda2_join_points : unit -> unit - val _flambda2_unbox_along_intra_function_control_flow : unit -> unit - val _no_flambda2_unbox_along_intra_function_control_flow : unit -> unit - val _flambda2_backend_cse_at_toplevel : unit -> unit - val _no_flambda2_backend_cse_at_toplevel : unit -> unit - val _flambda2_cse_depth : int -> unit - val _flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit - val _no_flambda2_expert_code_id_and_symbol_scoping_checks : unit -> unit - val _flambda2_expert_fallback_inlining_heuristic : unit -> unit - val _no_flambda2_expert_fallback_inlining_heuristic : unit -> unit - val _flambda2_expert_inline_effects_in_cmm : unit -> unit - val _no_flambda2_expert_inline_effects_in_cmm : unit -> unit - val _flambda2_expert_phantom_lets : unit -> unit - val _no_flambda2_expert_phantom_lets : unit -> unit - val _flambda2_expert_max_block_size_for_projections : int -> unit - val _flambda2_expert_max_unboxing_depth : int -> unit - val _flambda2_expert_can_inline_recursive_functions : unit -> unit - val _no_flambda2_expert_can_inline_recursive_functions : unit -> unit - val _flambda2_debug_permute_every_name : unit -> unit - val _no_flambda2_debug_permute_every_name : unit -> unit - val _flambda2_debug_concrete_types_only_on_canonicals : unit -> unit - val _no_flambda2_debug_concrete_types_only_on_canonicals : unit -> unit - - val _flambda2_inline_max_depth : string -> unit - val _flambda2_inline_max_rec_depth : string -> unit - val _flambda2_inline_call_cost : string -> unit - val _flambda2_inline_alloc_cost : string -> unit - val _flambda2_inline_prim_cost : string -> unit - val _flambda2_inline_branch_cost : string -> unit - val _flambda2_inline_indirect_call_cost : string -> unit - val _flambda2_inline_poly_compare_cost : string -> unit - val _flambda2_inline_small_function_size : string -> unit - val _flambda2_inline_large_function_size : string -> unit - val _flambda2_inline_threshold : string -> unit - - val _flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit - val _no_flambda2_speculative_inlining_only_if_arguments_useful : unit -> unit - - val _flambda2_inlining_report_bin : unit -> unit - - val _flambda2_unicode : unit -> unit - - val _flambda2_treat_invalid_code_as_unreachable : unit -> unit - val _no_flambda2_treat_invalid_code_as_unreachable : unit -> unit - - val _drawfexpr : unit -> unit - val _dfexpr : unit -> unit - val _dflexpect : unit -> unit - val _dclosure_offsets : unit -> unit - val _dfreshen : unit -> unit end;; module type Optcomp_options = sig diff --git a/ocaml/utils/clflags.ml b/ocaml/utils/clflags.ml index 628ffc6837f..3460c4330fa 100644 --- a/ocaml/utils/clflags.ml +++ b/ocaml/utils/clflags.ml @@ -52,7 +52,6 @@ and debug = ref false (* -g *) and debug_full = ref false (* For full DWARF support *) and unsafe = ref false (* -unsafe *) and use_linscan = ref false (* -linscan *) -and use_ocamlcfg = ref false (* -ocamlcfg *) and link_everything = ref false (* -linkall *) and custom_runtime = ref false (* -custom *) and no_check_prims = ref false (* -no-check-prims *) @@ -477,253 +476,26 @@ module Compiler_ir = struct end end -module Flambda2 = struct - module Default = struct - let classic_mode = false - let join_points = false - let unbox_along_intra_function_control_flow = true - let backend_cse_at_toplevel = false - let cse_depth = 2 - let treat_invalid_code_as_unreachable = false - let unicode = true - end - - let classic_mode = ref Default.classic_mode - let join_points = ref Default.join_points - let unbox_along_intra_function_control_flow = - ref Default.unbox_along_intra_function_control_flow - let backend_cse_at_toplevel = ref Default.backend_cse_at_toplevel - let cse_depth = ref Default.cse_depth - let treat_invalid_code_as_unreachable = - ref Default.treat_invalid_code_as_unreachable - let unicode = ref Default.unicode - - module Dump = struct - let rawfexpr = ref false - let fexpr = ref false - let flexpect = ref false - let closure_offsets = ref false - let freshen = ref false - end - - module Expert = struct - module Default = struct - let code_id_and_symbol_scoping_checks = false - let fallback_inlining_heuristic = false - let inline_effects_in_cmm = false - let phantom_lets = true - let max_block_size_for_projections = None - let max_unboxing_depth = 3 - let can_inline_recursive_functions = false - end - - let code_id_and_symbol_scoping_checks = - ref Default.code_id_and_symbol_scoping_checks - let fallback_inlining_heuristic = ref Default.fallback_inlining_heuristic - let inline_effects_in_cmm = ref Default.inline_effects_in_cmm - let phantom_lets = ref Default.phantom_lets - let max_block_size_for_projections = - ref Default.max_block_size_for_projections - let max_unboxing_depth = ref Default.max_unboxing_depth - let can_inline_recursive_functions = - ref Default.can_inline_recursive_functions - end - - module Debug = struct - module Default = struct - let permute_every_name = false - let concrete_types_only_on_canonicals = false - end - - let permute_every_name = ref Default.permute_every_name - let concrete_types_only_on_canonicals = - ref Default.concrete_types_only_on_canonicals - end - - module Inlining = struct - module Default = struct - let cost_divisor = 8. - - let max_depth = 1 - let max_rec_depth = 0 - - let call_cost = 5. /. cost_divisor - let alloc_cost = 7. /. cost_divisor - let prim_cost = 3. /. cost_divisor - let branch_cost = 5. /. cost_divisor - let indirect_call_cost = 4. /. cost_divisor - let poly_compare_cost = 10. /. cost_divisor - - let small_function_size = 10 - let large_function_size = 10 - - let threshold = 10. - - let speculative_inlining_only_if_arguments_useful = true - end - - module F = Float_arg_helper - module I = Int_arg_helper - - let max_depth = ref (I.default Default.max_depth) - let max_rec_depth = ref (I.default Default.max_rec_depth) - - let call_cost = ref (F.default Default.call_cost) - let alloc_cost = ref (F.default Default.alloc_cost) - let prim_cost = ref (F.default Default.prim_cost) - let branch_cost = ref (F.default Default.branch_cost) - let indirect_call_cost = ref (F.default Default.indirect_call_cost) - let poly_compare_cost = ref (F.default Default.poly_compare_cost) - - let small_function_size = ref (I.default Default.small_function_size) - let large_function_size = ref (I.default Default.large_function_size) - - let threshold = ref (F.default Default.threshold) - - let speculative_inlining_only_if_arguments_useful = - ref Default.speculative_inlining_only_if_arguments_useful - - let report_bin = ref false - - type inlining_arguments = { - max_depth : int option; - max_rec_depth : int option; - call_cost : float option; - alloc_cost : float option; - prim_cost : float option; - branch_cost : float option; - indirect_call_cost : float option; - poly_compare_cost : float option; - small_function_size : int option; - large_function_size : int option; - threshold : float option; - } - - let use_inlining_arguments_set ?round (arg : inlining_arguments) = - let set_int = set_int_arg round in - let set_float = set_float_arg round in - set_int max_depth Default.max_depth arg.max_depth; - set_int max_rec_depth Default.max_rec_depth arg.max_rec_depth; - set_float call_cost Default.call_cost arg.call_cost; - set_float alloc_cost Default.alloc_cost arg.alloc_cost; - set_float prim_cost Default.prim_cost arg.prim_cost; - set_float branch_cost Default.branch_cost arg.branch_cost; - set_float indirect_call_cost - Default.indirect_call_cost arg.indirect_call_cost; - set_float poly_compare_cost - Default.poly_compare_cost arg.poly_compare_cost; - set_int small_function_size - Default.small_function_size arg.small_function_size; - set_int large_function_size - Default.large_function_size arg.large_function_size; - set_float threshold Default.threshold arg.threshold - - let oclassic_arguments = { - max_depth = None; - max_rec_depth = None; - call_cost = None; - alloc_cost = None; - prim_cost = None; - branch_cost = None; - indirect_call_cost = None; - poly_compare_cost = None; - (* We set the small and large function sizes to the same value here to - recover "classic mode" semantics (no speculative inlining). *) - small_function_size = Some Default.small_function_size; - large_function_size = Some Default.small_function_size; - (* [threshold] matches the current compiler's default. (The factor of - 8 in that default is accounted for by [cost_divisor], above.) *) - threshold = Some 10.; - } - - let o2_arguments = { - max_depth = Some 2; - max_rec_depth = Some 0; - call_cost = Some (2.0 *. Default.call_cost); - alloc_cost = Some (2.0 *. Default.alloc_cost); - prim_cost = Some (2.0 *. Default.prim_cost); - branch_cost = Some (2.0 *. Default.branch_cost); - indirect_call_cost = Some (2.0 *. Default.indirect_call_cost); - poly_compare_cost = Some (2.0 *. Default.poly_compare_cost); - small_function_size = Some (2 * Default.small_function_size); - large_function_size = Some (4 * Default.large_function_size); - threshold = Some 25.; - } - - let o3_arguments = { - max_depth = Some 3; - max_rec_depth = Some 0; - call_cost = Some (3.0 *. Default.call_cost); - alloc_cost = Some (3.0 *. Default.alloc_cost); - prim_cost = Some (3.0 *. Default.prim_cost); - branch_cost = Some (3.0 *. Default.branch_cost); - indirect_call_cost = Some (3.0 *. Default.indirect_call_cost); - poly_compare_cost = Some (3.0 *. Default.poly_compare_cost); - small_function_size = Some (10 * Default.small_function_size); - large_function_size = Some (50 * Default.large_function_size); - threshold = Some 100.; - } - end - - let oclassic_flags () = - classic_mode := true; - cse_depth := 2; - join_points := false; - unbox_along_intra_function_control_flow := true; - Expert.fallback_inlining_heuristic := true; - backend_cse_at_toplevel := false - - let o2_flags () = - cse_depth := 2; - join_points := false; - unbox_along_intra_function_control_flow := true; - Expert.fallback_inlining_heuristic := false; - backend_cse_at_toplevel := false - - let o3_flags () = - cse_depth := 2; - join_points := true; - unbox_along_intra_function_control_flow := true; - Expert.fallback_inlining_heuristic := false; - backend_cse_at_toplevel := false -end - let is_flambda2 () = Config.flambda2 && !native_code let set_oclassic () = - if is_flambda2 () then begin - Flambda2.Inlining.use_inlining_arguments_set - Flambda2.Inlining.oclassic_arguments; - Flambda2.oclassic_flags () - end else begin - classic_inlining := true; - default_simplify_rounds := 1; - use_inlining_arguments_set classic_arguments; - unbox_free_vars_of_closures := false; - unbox_specialised_args := false - end + classic_inlining := true; + default_simplify_rounds := 1; + use_inlining_arguments_set classic_arguments; + unbox_free_vars_of_closures := false; + unbox_specialised_args := false let set_o2 () = - if is_flambda2 () then begin - Flambda2.Inlining.use_inlining_arguments_set Flambda2.Inlining.o2_arguments; - Flambda2.o2_flags () - end else begin - default_simplify_rounds := 2; - use_inlining_arguments_set o2_arguments; - use_inlining_arguments_set ~round:0 o1_arguments - end + default_simplify_rounds := 2; + use_inlining_arguments_set o2_arguments; + use_inlining_arguments_set ~round:0 o1_arguments let set_o3 () = - if is_flambda2 () then begin - Flambda2.Inlining.use_inlining_arguments_set Flambda2.Inlining.o3_arguments; - Flambda2.o3_flags () - end else begin - default_simplify_rounds := 3; - use_inlining_arguments_set o3_arguments; - use_inlining_arguments_set ~round:1 o2_arguments; - use_inlining_arguments_set ~round:0 o1_arguments - end + default_simplify_rounds := 3; + use_inlining_arguments_set o3_arguments; + use_inlining_arguments_set ~round:1 o2_arguments; + use_inlining_arguments_set ~round:0 o1_arguments (* This is used by the -stop-after option. *) module Compiler_pass = struct diff --git a/ocaml/utils/clflags.mli b/ocaml/utils/clflags.mli index e4faad42553..ceefd047f5d 100644 --- a/ocaml/utils/clflags.mli +++ b/ocaml/utils/clflags.mli @@ -27,6 +27,7 @@ module Int_arg_helper : sig val parse_no_error : string -> parsed ref -> parse_result val get : key:int -> parsed -> int + val default : int -> parsed end (** Optimization parameters represented as floats indexed by round number. *) @@ -41,7 +42,12 @@ module Float_arg_helper : sig val parse_no_error : string -> parsed ref -> parse_result val get : key:int -> parsed -> float + val default : float -> parsed end +val set_int_arg : + int option -> Int_arg_helper.parsed ref -> int -> int option -> unit +val set_float_arg : + int option -> Float_arg_helper.parsed ref -> float -> float option -> unit val objfiles : string list ref val ccobjs : string list ref @@ -56,7 +62,6 @@ val debug : bool ref val debug_full : bool ref val unsafe : bool ref val use_linscan : bool ref -val use_ocamlcfg : bool ref val link_everything : bool ref val custom_runtime : bool ref val no_check_prims : bool ref @@ -223,106 +228,6 @@ val unboxed_types : bool ref val insn_sched : bool ref val insn_sched_default : bool -module Flambda2 : sig - module Default : sig - val classic_mode : bool - val join_points : bool - val unbox_along_intra_function_control_flow : bool - val backend_cse_at_toplevel : bool - val cse_depth : int - val treat_invalid_code_as_unreachable : bool - - val unicode : bool - end - - val classic_mode : bool ref - val join_points : bool ref - val unbox_along_intra_function_control_flow : bool ref - val backend_cse_at_toplevel : bool ref - val cse_depth : int ref - val treat_invalid_code_as_unreachable : bool ref - - val unicode : bool ref - - module Dump : sig - val rawfexpr : bool ref - val fexpr : bool ref - val flexpect : bool ref - val closure_offsets : bool ref - val freshen : bool ref - end - - module Expert : sig - module Default : sig - val code_id_and_symbol_scoping_checks : bool - val fallback_inlining_heuristic : bool - val inline_effects_in_cmm : bool - val phantom_lets : bool - val max_block_size_for_projections : int option - val max_unboxing_depth : int - val can_inline_recursive_functions : bool - end - - val code_id_and_symbol_scoping_checks : bool ref - val fallback_inlining_heuristic : bool ref - val inline_effects_in_cmm : bool ref - val phantom_lets : bool ref - val max_block_size_for_projections : int option ref - val max_unboxing_depth : int ref - val can_inline_recursive_functions : bool ref - end - - module Debug : sig - module Default : sig - val permute_every_name : bool - val concrete_types_only_on_canonicals : bool - end - - val permute_every_name : bool ref - val concrete_types_only_on_canonicals : bool ref - end - - module Inlining : sig - module Default : sig - val max_depth : int - val max_rec_depth : int - - val call_cost : float - val alloc_cost : float - val prim_cost : float - val branch_cost : float - val indirect_call_cost : float - val poly_compare_cost : float - - val small_function_size : int - val large_function_size : int - - val threshold : float - - val speculative_inlining_only_if_arguments_useful : bool - end - - val max_depth : Int_arg_helper.parsed ref - val max_rec_depth : Int_arg_helper.parsed ref - - val call_cost : Float_arg_helper.parsed ref - val alloc_cost : Float_arg_helper.parsed ref - val prim_cost : Float_arg_helper.parsed ref - val branch_cost : Float_arg_helper.parsed ref - val indirect_call_cost : Float_arg_helper.parsed ref - val poly_compare_cost : Float_arg_helper.parsed ref - - val small_function_size : Int_arg_helper.parsed ref - val large_function_size : Int_arg_helper.parsed ref - - val threshold : Float_arg_helper.parsed ref - - val speculative_inlining_only_if_arguments_useful : bool ref - - val report_bin : bool ref - end -end - val set_oclassic : unit -> unit val set_o2 : unit -> unit val set_o3 : unit -> unit