From 363ca42cdf36a1b8bbd3fc85280e9119ec951f4f Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Wed, 22 May 2024 11:04:50 -0400 Subject: [PATCH 01/38] Adds set-of-marks rendering for burners in the kitchen environment (#1654) * good to go! * mypy --- predicators/envs/kitchen.py | 40 +++++++++++++++++++++++++++++----- predicators/settings.py | 1 + predicators/utils.py | 43 +++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index 0329951442..20ca492405 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -5,7 +5,9 @@ import matplotlib import numpy as np +import PIL from gym.spaces import Box +from PIL import ImageDraw try: import gymnasium as mujoco_kitchen_gym @@ -183,8 +185,35 @@ def render(self, action: Optional[Action] = None, caption: Optional[str] = None) -> Video: assert caption is None - arr: Image = self._gym_env.render() # type: ignore - return [arr] + curr_img_arr: Image = self._gym_env.render() # type: ignore + if CFG.kitchen_render_set_of_marks: + # Add text labels for the burners to the image. Useful for VLM-based + # predicate invention. + curr_img_pil = PIL.Image.fromarray(curr_img_arr) # type: ignore + draw = ImageDraw.Draw(curr_img_pil) + # Specify the font size and type (default font is used here) + font = utils.get_scaled_default_font(draw, 3) + # Define the text and position + burner1_text = "burner1" + burner1_position = (300, 290) + burner2_text = "burner2" + burner2_position = (210, 310) + burner3_text = "burner3" + burner3_position = (260, 235) + burner4_text = "burner4" + burner4_position = (185, 245) + burner1_img = utils.add_text_to_draw_img(draw, burner1_position, + burner1_text, font) + burner2_img = utils.add_text_to_draw_img(burner1_img, + burner2_position, + burner2_text, font) + burner3_img = utils.add_text_to_draw_img(burner2_img, + burner3_position, + burner3_text, font) + _ = utils.add_text_to_draw_img(burner3_img, burner4_position, + burner4_text, font) + curr_img_arr = np.array(curr_img_pil) + return [curr_img_arr] @property def predicates(self) -> Set[Predicate]: @@ -276,7 +305,7 @@ def step(self, action: Action) -> Observation: self._gym_env.render() self._current_observation = { "state_info": self.get_object_centric_state_info(), - "obs_images": [self._gym_env.render()] + "obs_images": self.render() } return self._copy_observation(self._current_observation) @@ -377,7 +406,7 @@ def _reset_initial_state_from_seed(self, seed: int) -> Observation: self._gym_env.reset(seed=seed) return { "state_info": self.get_object_centric_state_info(), - "obs_images": [self._gym_env.render()] + "obs_images": self.render() } @classmethod @@ -559,7 +588,8 @@ def _KettleBoiling_holds(cls, state: State, """Predicate that's necessary for goal specification.""" kettle, burner, knob = objects return cls.On_holds(state, [knob]) and cls._OnTop_holds( - state, [kettle, burner]) + state, [kettle, burner]) and cls._KnobAndBurnerLinkedHolds( + state, [knob, burner]) @classmethod def _KnobAndBurnerLinkedHolds(cls, state: State, diff --git a/predicators/settings.py b/predicators/settings.py index 3833f1ceb4..0f3c31c884 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -322,6 +322,7 @@ class GlobalSettings: # kitchen env parameters kitchen_use_perfect_samplers = False kitchen_goals = "all" + kitchen_render_set_of_marks = False # sticky table env parameters sticky_table_num_tables = 5 diff --git a/predicators/utils.py b/predicators/utils.py index d4f4887a4c..04f53b18f5 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -37,6 +37,7 @@ from gym.spaces import Box from matplotlib import patches from numpy.typing import NDArray +from PIL import ImageDraw, ImageFont from pyperplan.heuristics.heuristic_base import \ Heuristic as _PyperplanBaseHeuristic from pyperplan.planner import HEURISTICS as _PYPERPLAN_HEURISTICS @@ -3791,3 +3792,45 @@ def run_ground_nsrt_with_assertions(ground_nsrt: _GroundNSRT, assert not atom.holds(state), \ f"Delete effect for {ground_nsrt_str} failed: {atom}" return state + + +def get_scaled_default_font( + draw: ImageDraw.ImageDraw, + size: int) -> ImageFont.FreeTypeFont: # pragma: no cover + """Method that modifies the size of some provided PIL ImageDraw font. + + Useful for scaling up font sizes when using PIL to insert text + directly into images. + """ + # Determine the scaling factor + base_font = ImageFont.load_default() + width, height = draw.textbbox((0, 0), "A", font=base_font)[:2] + scale_factor = size / max(width, height) + # Scale the font using the factor + return base_font.font_variant(size=int(scale_factor * # type: ignore + base_font.size)) # type: ignore + + +def add_text_to_draw_img( + draw: ImageDraw.ImageDraw, position: Tuple[int, int], text: str, + font: ImageFont.FreeTypeFont +) -> ImageDraw.ImageDraw: # pragma: no cover + """Method that adds some text with a particular font at a particular pixel + position in an input PIL.ImageDraw.ImageDraw image. + + Returns the modified ImageDraw.ImageDraw with the added text. + """ + text_width, text_height = draw.textbbox((0, 0), text, font=font)[2:] + background_position = (position[0] - 5, position[1] - 5 + ) # Slightly larger than text + background_size = (text_width + 10, text_height + 10) + # Draw the background rectangle + draw.rectangle([ + background_position, + (background_position[0] + background_size[0], + background_position[1] + background_size[1]) + ], + fill="black") + # Add the text to the image + draw.text(position, text, fill="red", font=font) + return draw From 8f6dfe0b9958acfa875745423e16871d04bfc72f Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Thu, 23 May 2024 16:15:53 -0400 Subject: [PATCH 02/38] Making "combined" options and NSRT's for kitchen (#1655) * init commit (should work for kettle pushing and knob turning!) * should be good to go for now * mypy --- .../ground_truth_models/kitchen/nsrts.py | 160 +++++++++++++++--- .../ground_truth_models/kitchen/options.py | 86 +++++++++- predicators/settings.py | 1 + 3 files changed, 222 insertions(+), 25 deletions(-) diff --git a/predicators/ground_truth_models/kitchen/nsrts.py b/predicators/ground_truth_models/kitchen/nsrts.py index 397897e21b..94b58dcdc8 100644 --- a/predicators/ground_truth_models/kitchen/nsrts.py +++ b/predicators/ground_truth_models/kitchen/nsrts.py @@ -55,6 +55,8 @@ def get_nsrts(env_name: str, types: Dict[str, Type], TurnOnKnob = options["TurnOnKnob"] PushOpen = options["PushOpen"] PushClose = options["PushClose"] + PushKettleOntoBurner = options["PushKettleOntoBurner"] + MoveAndTurnOnKnob = options["MoveAndTurnOnKnob"] # Predicates AtPreTurnOn = predicates["AtPreTurnOn"] @@ -99,7 +101,6 @@ def moveto_preturnoff_sampler(state: State, goal: Set[GroundAtom], delete_effects, ignore_effects, option, option_vars, moveto_preturnoff_sampler) - nsrts.add(move_to_pre_turn_off_nsrt) # MoveToPreTurnOn parameters = [gripper, on_off_obj] @@ -125,7 +126,6 @@ def moveto_preturnon_sampler(state: State, goal: Set[GroundAtom], preconditions, add_effects, delete_effects, ignore_effects, option, option_vars, moveto_preturnon_sampler) - nsrts.add(move_to_pre_turn_on_nsrt) # MoveToPrePushOnTop parameters = [gripper, kettle] @@ -155,7 +155,6 @@ def moveto_prepushontop_sampler(state: State, goal: Set[GroundAtom], delete_effects, ignore_effects, option, option_vars, moveto_prepushontop_sampler) - nsrts.add(move_to_pre_push_on_top_nsrt) # MoveToPrePullKettle parameters = [gripper, kettle] @@ -184,7 +183,6 @@ def moveto_prepullkettle_sampler(state: State, goal: Set[GroundAtom], delete_effects, ignore_effects, option, option_vars, moveto_prepullkettle_sampler) - nsrts.add(move_to_pre_pull_kettle_nsrt) # PushObjOnObjForward parameters = [gripper, kettle, surface_from, surface_to] @@ -219,7 +217,35 @@ def push_obj_on_obj_forward_sampler(state: State, delete_effects, ignore_effects, option, option_vars, push_obj_on_obj_forward_sampler) - nsrts.add(push_obj_on_obj_forward_nsrt) + + # PushKettleOntoBurner + def move_and_push_kettle_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: + move_sample = moveto_prepushontop_sampler(state, goal, rng, + objs[:2]) + push_sample = push_obj_on_obj_forward_sampler( + state, goal, rng, objs) + return np.concatenate([move_sample, push_sample], axis=0) + + parameters = [gripper, kettle, surface_from, surface_to] + preconditions = { + LiftedAtom(NotOnTop, [kettle, surface_to]), + LiftedAtom(BurnerAhead, [surface_to, surface_from]), + LiftedAtom(OnTop, [kettle, surface_from]), + } + add_effects = {LiftedAtom(OnTop, [kettle, surface_to])} + delete_effects = {LiftedAtom(NotOnTop, [kettle, surface_to])} + ignore_effects = { + AtPreTurnOn, AtPrePushOnTop, AtPreTurnOff, AtPrePullKettle + } + option = PushKettleOntoBurner + option_vars = [gripper, kettle, surface_to] + push_kettle_onto_burner_nsrt = NSRT("PushKettleOntoBurner", parameters, + preconditions, add_effects, + delete_effects, ignore_effects, + option, option_vars, + move_and_push_kettle_sampler) # PushObjOnObjForwardToBoilKettle parameters = [gripper, kettle, surface_from, surface_to, knob] @@ -241,13 +267,34 @@ def push_obj_on_obj_forward_sampler(state: State, } option = PushObjOnObjForward option_vars = [gripper, kettle, surface_to] - push_obj_on_obj_forward_nsrt = NSRT("PushObjOnObjForwardAndBoilKettle", - parameters, preconditions, - add_effects, delete_effects, - ignore_effects, option, - option_vars, - push_obj_on_obj_forward_sampler) - nsrts.add(push_obj_on_obj_forward_nsrt) + push_obj_on_obj_forward_and_boil_kettle_nsrt = NSRT( + "PushObjOnObjForwardAndBoilKettle", parameters, preconditions, + add_effects, delete_effects, ignore_effects, option, option_vars, + push_obj_on_obj_forward_sampler) + + # PushKettleOntoBurnerAndBoil + parameters = [gripper, kettle, surface_from, surface_to, knob] + preconditions = { + LiftedAtom(NotOnTop, [kettle, surface_to]), + LiftedAtom(BurnerAhead, [surface_to, surface_from]), + LiftedAtom(OnTop, [kettle, surface_from]), + LiftedAtom(TurnedOn, [knob]), + LiftedAtom(KnobAndBurnerLinked, [knob, surface_to]) + } + add_effects = { + LiftedAtom(OnTop, [kettle, surface_to]), + LiftedAtom(KettleBoiling, [kettle, surface_to, knob]) + } + delete_effects = {LiftedAtom(NotOnTop, [kettle, surface_to])} + ignore_effects = { + AtPreTurnOn, AtPrePushOnTop, AtPreTurnOff, AtPrePullKettle + } + option = PushKettleOntoBurner + option_vars = [gripper, kettle, surface_to] + push_kettle_onto_burner_and_boil_nsrt = NSRT( + "PushKettleOntoBurnerAndBoil", parameters, preconditions, + add_effects, delete_effects, ignore_effects, option, option_vars, + move_and_push_kettle_sampler) # PullKettle parameters = [gripper, kettle, surface_from, surface_to] @@ -279,7 +326,6 @@ def pull_kettle_sampler(state: State, goal: Set[GroundAtom], pull_kettle_nsrt = NSRT("PullKettle", parameters, preconditions, add_effects, delete_effects, ignore_effects, option, option_vars, pull_kettle_sampler) - nsrts.add(pull_kettle_nsrt) # TurnOffSwitch parameters = [gripper, switch] @@ -313,7 +359,6 @@ def switch_turn_sampler(state: State, goal: Set[GroundAtom], add_effects, delete_effects, ignore_effects, option, option_vars, switch_turn_sampler) - nsrts.add(turn_off_switch_nsrt) # TurnOnSwitch parameters = [gripper, switch] @@ -332,7 +377,6 @@ def switch_turn_sampler(state: State, goal: Set[GroundAtom], turn_on_switch_nsrt = NSRT("TurnOnSwitch", parameters, preconditions, add_effects, delete_effects, ignore_effects, option, option_vars, switch_turn_sampler) - nsrts.add(turn_on_switch_nsrt) # TurnOnKnob parameters = [gripper, knob] @@ -363,7 +407,30 @@ def knob_turn_on_sampler(state: State, goal: Set[GroundAtom], turn_on_knob_nsrt = NSRT("TurnOnKnob", parameters, preconditions, add_effects, delete_effects, ignore_effects, option, option_vars, knob_turn_on_sampler) - nsrts.add(turn_on_knob_nsrt) + + # MoveAndTurnOnKnob + parameters = [gripper, knob] + preconditions = {LiftedAtom(TurnedOff, [knob])} + add_effects = {LiftedAtom(TurnedOn, [knob])} + delete_effects = {LiftedAtom(TurnedOff, [knob])} + ignore_effects = { + AtPreTurnOn, AtPrePushOnTop, AtPreTurnOff, AtPrePullKettle + } + option = MoveAndTurnOnKnob + option_vars = [gripper, knob] + + def move_and_knob_turn_on_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: + move_sample = moveto_preturnon_sampler(state, goal, rng, objs[:2]) + turn_on_sample = knob_turn_on_sampler(state, goal, rng, objs) + return np.concatenate([move_sample, turn_on_sample], axis=0) + + move_and_turn_on_knob_nsrt = NSRT("MoveAndTurnOnKnob", parameters, + preconditions, add_effects, + delete_effects, ignore_effects, + option, option_vars, + move_and_knob_turn_on_sampler) # TurnOnKnobAndBoilKettle parameters = [gripper, knob, surface_to, kettle] @@ -383,11 +450,34 @@ def knob_turn_on_sampler(state: State, goal: Set[GroundAtom], } option = TurnOnKnob option_vars = [gripper, knob] - turn_on_knob_nsrt = NSRT("TurnOnKnobAndBoilKettle", parameters, - preconditions, add_effects, delete_effects, - ignore_effects, option, option_vars, - knob_turn_on_sampler) - nsrts.add(turn_on_knob_nsrt) + turn_on_knob_and_boil_kettle_nsrt = NSRT("TurnOnKnobAndBoilKettle", + parameters, preconditions, + add_effects, delete_effects, + ignore_effects, option, + option_vars, + knob_turn_on_sampler) + + # TurnOnKnobAndBoilKettle + parameters = [gripper, knob, surface_to, kettle] + preconditions = { + LiftedAtom(TurnedOff, [knob]), + LiftedAtom(OnTop, [kettle, surface_to]), + LiftedAtom(KnobAndBurnerLinked, [knob, surface_to]) + } + add_effects = { + LiftedAtom(TurnedOn, [knob]), + LiftedAtom(KettleBoiling, [kettle, surface_to, knob]) + } + delete_effects = {LiftedAtom(TurnedOff, [knob])} + ignore_effects = { + AtPreTurnOn, AtPrePushOnTop, AtPreTurnOff, AtPrePullKettle + } + option = MoveAndTurnOnKnob + option_vars = [gripper, knob] + move_and_turn_on_knob_and_boil_kettle_nsrt = NSRT( + "MoveAndTurnOnKnobAndBoilKettle", parameters, preconditions, + add_effects, delete_effects, ignore_effects, option, option_vars, + move_and_knob_turn_on_sampler) # TurnOffKnob parameters = [gripper, knob] @@ -417,7 +507,6 @@ def knob_turn_off_sampler(state: State, goal: Set[GroundAtom], turn_off_knob_nsrt = NSRT("TurnOffKnob", parameters, preconditions, add_effects, delete_effects, ignore_effects, option, option_vars, knob_turn_off_sampler) - nsrts.add(turn_off_knob_nsrt) # PushOpenHingeDoor parameters = [gripper, hinge_door] @@ -459,7 +548,6 @@ def push_open_hinge_door_sampler(state: State, goal: Set[GroundAtom], delete_effects, ignore_effects, option, option_vars, push_open_hinge_door_sampler) - nsrts.add(push_open_hinge_door_nsrt) # PushCloseHingeDoor parameters = [gripper, hinge_door] @@ -499,6 +587,32 @@ def push_close_hinge_door_sampler(state: State, goal: Set[GroundAtom], delete_effects, ignore_effects, option, option_vars, push_close_hinge_door_sampler) + + # Add the relevant NSRTs to the set to be returned. + # NOTE: if kitchen_use_combo_move_nsrts is set to true, we use NSRTs + # that couple moving with other actions implicitly (i.e., move NSRTs + # aren't separate in any way). This is useful for e.g. in VLM predicate + # invention since moving places doesn't really turn on any predicates + # that are easily-classified. + if not CFG.kitchen_use_combo_move_nsrts: + nsrts.add(move_to_pre_push_on_top_nsrt) + nsrts.add(push_obj_on_obj_forward_nsrt) + nsrts.add(push_obj_on_obj_forward_and_boil_kettle_nsrt) + nsrts.add(turn_on_knob_nsrt) + nsrts.add(turn_on_knob_and_boil_kettle_nsrt) + else: + nsrts.add(push_kettle_onto_burner_nsrt) + nsrts.add(push_kettle_onto_burner_and_boil_nsrt) + nsrts.add(move_and_turn_on_knob_and_boil_kettle_nsrt) + nsrts.add(move_and_turn_on_knob_nsrt) + nsrts.add(move_to_pre_pull_kettle_nsrt) + nsrts.add(pull_kettle_nsrt) + nsrts.add(turn_off_switch_nsrt) + nsrts.add(turn_on_switch_nsrt) + nsrts.add(turn_off_knob_nsrt) + nsrts.add(push_open_hinge_door_nsrt) + nsrts.add(move_to_pre_turn_on_nsrt) + nsrts.add(move_to_pre_turn_off_nsrt) nsrts.add(push_close_hinge_door_nsrt) return nsrts diff --git a/predicators/ground_truth_models/kitchen/options.py b/predicators/ground_truth_models/kitchen/options.py index d1175f559c..ab0359b56a 100644 --- a/predicators/ground_truth_models/kitchen/options.py +++ b/predicators/ground_truth_models/kitchen/options.py @@ -143,7 +143,7 @@ def _MoveTo_terminal(state: State, memory: Dict, # Create copies just to preserve one-to-one-ness with NSRTs. for suffix in ["PreTurnOn", "PreTurnOff"]: - nsrt = ParameterizedOption( + opt = ParameterizedOption( f"MoveTo{suffix}", types=[gripper_type, on_off_type], # Parameter is a position to move to relative to the object. @@ -152,7 +152,7 @@ def _MoveTo_terminal(state: State, memory: Dict, initiable=_MoveTo_initiable, terminal=_MoveTo_terminal) - options.add(nsrt) + options.add(opt) # MoveToPrePushOnTop (different type) def _MoveToPrePushOnTop_initiable(state: State, memory: Dict, @@ -272,6 +272,47 @@ def _PushObjOnObjForward_terminal(state: State, memory: Dict, options.add(PushObjOnObjForward) + # PushKettleOntoBurner + def _PushKettleOntoBurner_initiable(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> bool: + gripper, obj, _ = objects + memory["gripper_infront_kettle"] = False + return _MoveTo_initiable(state, memory, [gripper, obj], params[:3]) + + def _PushKettleOntoBurner_policy(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> Action: + gripper, obj, _ = objects + if not memory["gripper_infront_kettle"]: + # Check if the MoveTo option has terminated. + if _MoveTo_terminal(state, memory, [gripper, obj], params[:3]): + memory["gripper_infront_kettle"] = True + else: + return _MoveTo_policy(state, memory, [gripper, obj], + params[:3]) + return _PushObjOnObjForward_policy(state, memory, objects, + params[3:]) + + def _PushKettleOntoBurner_terminal(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> bool: + del memory, params # unused + _, obj, obj2 = objects + return GroundAtom(OnTop, [obj, obj2]).holds(state) + + PushKettleOntoBurner = ParameterizedOption( + "PushKettleOntoBurner", + types=[gripper_type, kettle_type, surface_type], + # Parameter is an angle for pushing forward. + params_space=Box(np.array([-5.0, -5.0, -5.0, -np.pi]), + np.array([5.0, 5.0, 5.0, np.pi]), (4, )), + policy=_PushKettleOntoBurner_policy, + initiable=_PushKettleOntoBurner_initiable, + terminal=_PushKettleOntoBurner_terminal) + + options.add(PushKettleOntoBurner) + # PullKettle def _PullKettle_policy(state: State, memory: Dict, objects: Sequence[Object], @@ -408,6 +449,47 @@ def _TurnOnKnob_terminal(state: State, memory: Dict, terminal=_TurnOnKnob_terminal) options.add(TurnOnKnob) + # MoveAndTurnOnKnob + def _MoveAndTurnOnKnob_initiable(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> bool: + gripper, obj = objects + memory["gripper_infront_knob"] = False + return _MoveTo_initiable(state, memory, [gripper, obj], params[:3]) + + def _MoveAndTurnOnKnob_policy(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> Action: + gripper, obj = objects + if not memory["gripper_infront_knob"]: + # Check if the MoveTo option has terminated. + if _MoveTo_terminal(state, memory, [gripper, obj], params[:3]): + memory["gripper_infront_knob"] = True + else: + return _MoveTo_policy(state, memory, [gripper, obj], + params[:3]) + return _TurnOnKnob_policy(state, memory, objects, params[3:]) + + def _MoveAndTurnOnKnob_terminal(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> bool: + del memory, params # unused + _, obj = objects + # Use a more stringent threshold to avoid numerical issues. + return KitchenEnv.On_holds(state, [obj], + thresh_pad=cls.turn_knob_tol) + + MoveAndTurnOnKnob = ParameterizedOption( + "MoveAndTurnOnKnob", + types=[gripper_type, knob_type], + # The parameter is a push direction angle with respect to x. + params_space=Box(np.array([-5.0, -5.0, -5.0, -np.pi]), + np.array([5.0, 5.0, 5.0, np.pi]), (4, )), + policy=_MoveAndTurnOnKnob_policy, + initiable=_MoveAndTurnOnKnob_initiable, + terminal=_MoveAndTurnOnKnob_terminal) + options.add(MoveAndTurnOnKnob) + # TurnOffKnob def _TurnOffKnob_policy(state: State, memory: Dict, objects: Sequence[Object], diff --git a/predicators/settings.py b/predicators/settings.py index 0f3c31c884..9b5ad95d4f 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -323,6 +323,7 @@ class GlobalSettings: kitchen_use_perfect_samplers = False kitchen_goals = "all" kitchen_render_set_of_marks = False + kitchen_use_combo_move_nsrts = False # sticky table env parameters sticky_table_num_tables = 5 From 8dc76a562e94360728d8662198ca2d30ac77719c Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Thu, 23 May 2024 17:50:57 -0400 Subject: [PATCH 03/38] Image-option diff-based VLM prompting (#1656) * init commit * tested! * comments * yapf * linting --- .../datasets/generate_atom_trajs_with_vlm.py | 42 +++++++++++++++---- .../atom_labelling/img_option_diffs.txt | 3 ++ tests/datasets/test_datasets.py | 3 +- 3 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs.txt diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index aeae8eeedc..d342bec9ce 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -98,14 +98,40 @@ def _generate_prompt_for_scene_labelling( except FileNotFoundError: raise ValueError("Unknown VLM prompting option " + f"{CFG.grammar_search_vlm_atom_label_prompt_type}") - for atom_str in atoms_list: - prompt += f"\n{atom_str}" - for curr_imgs in traj.imgs: - # NOTE: we rip out just one img from each of the state - # images. This is fine/works for the case where we only - # have one camera view, but probably will need to be - # amended in the future! - ret_list.append((prompt, [curr_imgs[0]])) + if CFG.grammar_search_vlm_atom_label_prompt_type == "img_option_diffs": + # In this case, we need to load the 'per_scene_naive' prompt as well + # for the first timestep. + with open(filepath_prefix + "per_scene_naive.txt", + "r", + encoding="utf-8") as f: + init_prompt = f.read() + for atom_str in atoms_list: + init_prompt += f"\n{atom_str}" + ret_list.append((init_prompt, traj.imgs[0])) + # Now, we use actual difference-based prompting for the second timestep + # and beyond. + # The prompt ends with a section for 'Predicates', so list these. + for atom_str in atoms_list: + prompt += f"\n{atom_str}" + for i in range(1, len(traj.imgs)): + curr_prompt = prompt[:] + # NOTE: we rip out just one img from each of the state + # images. This is fine/works for the case where we only + # have one camera view, but probably will need to be + # amended in the future! + curr_prompt_imgs = [ + imgs_timestep[0] for imgs_timestep in traj.imgs[i - 1:i + 1] + ] + curr_prompt += "\n\nSkill executed between states: " + curr_prompt += traj.actions[i - 1].name + str( + traj.actions[i - 1].objects) + ret_list.append((curr_prompt, curr_prompt_imgs)) + else: + for atom_str in atoms_list: + prompt += f"\n{atom_str}" + for curr_imgs in traj.imgs: + # NOTE: same problem with ripping out images as in the above note. + ret_list.append((prompt, [curr_imgs[0]])) return ret_list diff --git a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs.txt b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs.txt new file mode 100644 index 0000000000..4b293efe55 --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs.txt @@ -0,0 +1,3 @@ +You are a vision system for a robot. Your job is to output the values of the following predicates based on some information provided below. You will be provided with two images corresponding to the states before and after a particular skill is executed. You will also be provided with a list of predicates. Your job is to output the values of all the predicates in only the final scene. Pay careful attention to predicates that change between the two scenes, and list these separately at the end of your response. Note that in some scenes, there might be no changes. Output each predicate value as a bulleted list with each predicate and value on a different line. For each output value, provide an explanation as to why you labelled this predicate as having this particular value. Use the format: : . . + +Predicates to label in scenes: \ No newline at end of file diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index e2118d6add..29c08d831c 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -592,7 +592,8 @@ def test_loading_saved_vlm_img_demos_folder_non_dummy_goal(): ("options_labels_whole_traj", "per_scene_naive"), ("naive_whole_traj", "per_scene_cot"), ("not_a_real_prompt_type", "per_scene_cot"), - ("naive_whole_traj", "not_a_real_prompt_type")]) + ("naive_whole_traj", "not_a_real_prompt_type"), + ("options_labels_whole_traj", "img_option_diffs")]) def test_loading_saved_vlm_img_demos_folder_dummy_goal( atom_proposal_prompt_type, atom_labelling_prompt_type): """Test loading a dataset from img demo files.""" From 6c78615af0137d84f05627690eb88066c1142936 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Mon, 27 May 2024 12:12:48 -0400 Subject: [PATCH 04/38] good to merge (#1657) --- predicators/envs/kitchen.py | 10 +++++----- predicators/ground_truth_models/kitchen/options.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index 20ca492405..d4d9be3471 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -88,7 +88,7 @@ class KitchenEnv(BaseEnv): obj_name_to_pre_push_dpos = { ("kettle", "on"): (-0.05, -0.3, -0.12), ("kettle", "off"): (0.0, 0.0, 0.08), - ("knob4", "on"): (-0.1, -0.15, 0.05), + ("knob4", "on"): (-0.1, -0.10, 0.05), ("knob4", "off"): (0.05, -0.12, -0.05), ("light", "on"): (0.1, -0.05, -0.05), ("light", "off"): (-0.1, -0.05, -0.05), @@ -195,13 +195,13 @@ def render(self, font = utils.get_scaled_default_font(draw, 3) # Define the text and position burner1_text = "burner1" - burner1_position = (300, 290) + burner1_position = (300, 305) burner2_text = "burner2" - burner2_position = (210, 310) + burner2_position = (210, 325) burner3_text = "burner3" - burner3_position = (260, 235) + burner3_position = (260, 250) burner4_text = "burner4" - burner4_position = (185, 245) + burner4_position = (185, 260) burner1_img = utils.add_text_to_draw_img(draw, burner1_position, burner1_text, font) burner2_img = utils.add_text_to_draw_img(burner1_img, diff --git a/predicators/ground_truth_models/kitchen/options.py b/predicators/ground_truth_models/kitchen/options.py index ab0359b56a..9eefbb2a33 100644 --- a/predicators/ground_truth_models/kitchen/options.py +++ b/predicators/ground_truth_models/kitchen/options.py @@ -30,7 +30,7 @@ class KitchenGroundTruthOptionFactory(GroundTruthOptionFactory): # Keep pushing a bit even if the On classifier holds. push_lr_thresh_pad: ClassVar[float] = 0.02 push_microhandle_thresh_pad: ClassVar[float] = 0.02 - turn_knob_tol: ClassVar[float] = 0.01 # for twisting the knob + turn_knob_tol: ClassVar[float] = -0.03 # for twisting the knob @classmethod def get_env_names(cls) -> Set[str]: From ca4555d1b2d497a5c2e9b126d8f4ef2cc7b9df19 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Mon, 27 May 2024 14:22:41 -0400 Subject: [PATCH 05/38] Improve vlm predicate parsing (#1658) * ready to go! * implements improved vlm prompting and vastly-simplified parsing --- .gitignore | 1 + .../datasets/generate_atom_trajs_with_vlm.py | 114 ++++++++---------- .../options_labels_whole_traj.txt | 2 +- predicators/structs.py | 7 -- tests/datasets/test_datasets.py | 2 +- 5 files changed, 50 insertions(+), 76 deletions(-) diff --git a/.gitignore b/.gitignore index 0da004bdcb..9439aec1a5 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ saved_approaches saved_datasets scripts/results pretrained_model_cache +tests/datasets/mock_vlm_datasets/cache/ machines.txt *_vision_data tests/_fake_trajs diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index d342bec9ce..5880630166 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -341,20 +341,11 @@ def _parse_structured_state_into_ground_atoms( assert goal_predicate.name == "DummyGoal" use_dummy_goal = True - # We also check whether there is precisely one "object" type that is - # a superset of all other object types. - obj_type = None - for t in env.types: - obj_type = t.oldest_ancestor - if obj_type.name != "object": - obj_type = None - break - def _get_vlm_query_str(pred_name: str, objects: Sequence[Object]) -> str: return pred_name + "(" + ", ".join( str(obj.name) for obj in objects) + ")" # pragma: no cover - pred_name_to_pred = {} + pred_name_and_obj_types_to_pred = {} atoms_trajs = [] # Loop through all trajectories in the structured_state_trajs and convert # each one to a sequence of sets of GroundAtoms. @@ -378,6 +369,8 @@ def _get_vlm_query_str(pred_name: str, objects: Sequence[Object]) -> str: # reached or not. assert DUMMY_GOAL_OBJ_NAME in curr_obj_name_to_obj + # Now, start converting each structured state into a set of ground + # atoms. for j, structured_state in enumerate(traj): curr_ground_atoms_state = set() @@ -387,67 +380,38 @@ def _get_vlm_query_str(pred_name: str, objects: Sequence[Object]) -> str: state_trajs[i][j], known_predicates) for pred_name, objs_and_val_dict in structured_state.items(): - # IMPORTANT NOTE: this currently assumes that the data is such - # that a predicate with a certain name (e.g. "Sliced") - # always appears with the same number of object arguments - # (e.g. Sliced(apple), and never - # Sliced(apple, cutting_tool)). We might want to explicitly - # check for this in the future. - if pred_name not in pred_name_to_pred: - if len(objs_and_val_dict.keys()) == 1: - # NOTE: this below code doesn't do the right thing - # when there are multiple of the predicate that - # are true with different objects of the same type - # (e.g. Covers(obj1, targ1) and Covers(obj2, targ2)). - # We might want to do something about this. - # In this case, we make a predicate that takes in - # exactly one types argument. - for obj_args in objs_and_val_dict.keys(): - # We need to construct the types being - # fed into this predicate. - pred_types = [] - for obj_name in obj_args: - curr_obj = curr_obj_name_to_obj[obj_name] - pred_types.append(curr_obj.type) - pred_name_to_pred[ - pred_name] = utils.create_vlm_predicate( - pred_name, pred_types, + for pred_i, (objs_strs, truth_val) in enumerate( + sorted(objs_and_val_dict.items())): + objs_types = [ + curr_obj_name_to_obj[obj_name].type + for obj_name in objs_strs + ] + pred_name_and_obj_types_str = pred_name + "(" + ",".join( + str(obj_type.name) for obj_type in objs_types) + ")" + if pred_name_and_obj_types_str not in \ + pred_name_and_obj_types_to_pred: + # NOTE: we use 'pred_i' here as a unique index such + # that different predicates with the same name but + # different object types (e.g. On(light) vs. + # On(kettle, burner)) have a different name so that + # the planner doesn't complain about this during + # planning. + pred_name_and_obj_types_to_pred[ + pred_name_and_obj_types_str] = \ + utils.create_vlm_predicate(pred_name + + str(pred_i), objs_types, partial(_get_vlm_query_str, pred_name)) - else: - # In this case, we need to make a predicate that - # takes in the generic 'object' type such that - # multiple different objs could potentially be - # subbed in. - # Start by checking that the number of object - # args are always the same - num_args = 0 - for obj_args in objs_and_val_dict.keys(): - if num_args == 0: - num_args = len(obj_args) - else: - assert num_args == len(obj_args) - # Given this, add one new predicate with num_args - # number of 'object' type arguments. - assert obj_type is not None, ( - "VLM atom parsing " - "failure; please add an 'object' type to your " - "environment that is a supertype of all other " - "types.") - pred_name_to_pred[ - pred_name] = utils.create_vlm_predicate( - pred_name, [obj_type for _ in range(num_args)], - partial(_get_vlm_query_str, pred_name)) - - # Given that we've now built up predicates and object - # dictionaries. We can now convert the current state into - # ground atoms! - for obj_args, truth_value in objs_and_val_dict.items(): - if truth_value: + # Given that we've now built up predicates and object + # dictionaries. We can now convert the current state into + # ground atoms! + if truth_val: curr_ground_atoms_state.add( GroundAtom( - pred_name_to_pred[pred_name], - [curr_obj_name_to_obj[o] for o in obj_args])) + pred_name_and_obj_types_to_pred[ + pred_name_and_obj_types_str], + [curr_obj_name_to_obj[o] for o in objs_strs])) curr_atoms_traj.append(curr_ground_atoms_state) + # Bookkeeping for the goal(s). if assume_goal_holds_at_end: curr_atoms_traj[-1] |= train_tasks[i].goal atoms_trajs.append(curr_atoms_traj) @@ -594,6 +558,10 @@ def _parse_atoms_txt_into_structured_state( pattern_predicate, state_block_match) current_predicate_data: Dict[str, Dict[Tuple[str, ...], bool]] = {} for predicate_match in predicate_matches_within_state_block: + # Skip evaluating any predicate values that aren't explicitly + # labelled as one of the below. + if predicate_match[2] not in ["True", "False", "Unknown"]: + continue classifier_name = predicate_match[0] objects = tuple(map(str.strip, predicate_match[1].split(','))) truth_value = predicate_match[2] == 'True' @@ -750,9 +718,21 @@ def create_ground_atom_data_from_generated_demos( segments = _segment_with_option_changes(traj, set(), None) curr_traj_states_for_vlm: List[State] = [] curr_traj_actions_for_vlm: List[Action] = [] + total_num_segment_states = 0 + first_iteration = True for segment in segments: curr_traj_states_for_vlm.append(segment.states[0]) curr_traj_actions_for_vlm.append(segment.actions[0]) + total_num_segment_states += len(segment.states) + if first_iteration: + first_iteration = False + else: + total_num_segment_states -= 1 # avoid double-counting states! + if total_num_segment_states != len(traj.states): # pragma: no cover. + logging.info( + ("WARNING: there are fewer total states after option-based " + "segmentation than there are in the original trajectory. " + "Likely there is an issue with segmentation!")) # We manually add the final two states (initial state and terminal # state of the final option). curr_traj_states_for_vlm.append(traj.states[-1]) diff --git a/predicators/datasets/vlm_input_data_prompts/atom_proposal/options_labels_whole_traj.txt b/predicators/datasets/vlm_input_data_prompts/atom_proposal/options_labels_whole_traj.txt index 0dddfe7001..2b6af35bed 100644 --- a/predicators/datasets/vlm_input_data_prompts/atom_proposal/options_labels_whole_traj.txt +++ b/predicators/datasets/vlm_input_data_prompts/atom_proposal/options_labels_whole_traj.txt @@ -1 +1 @@ -You are a robotic vision system whose job is to output a structured set of predicates useful for describing important concepts in the following demonstration of a task. You will be provided with a list of actions used during the task, as well as images of states before and after every action execution. Please provide predicates in terms of the following objects: {objs}. For each predicate, output it in the following format: predicate_name(obj1, obj2, obj3...). Start by generating predicates that change before and after each action. After this, generate any other predicates that perhaps do not change but are still important to describing the demonstration shown. For each predicate you generate, also generate predicates that are synonyms and antonyms so that any predicate that is even tangentially relevant to the demonstrations is generated. \ No newline at end of file +You are a robotic vision system whose job is to output a structured set of predicates useful for describing important concepts in the following demonstration of a task. You will be provided with a list of actions used during the task, as well as images of states before and after every action execution. Please provide predicates in terms of the following objects: {objs}. For each predicate, output it in the following format: predicate_name(obj1, obj2, obj3...). Start by generating predicates that change before and after each action. After this, generate any other predicates that perhaps do not change but are still important to describing the demonstration shown. For each predicate you generate, also generate some predicates that are synonyms and antonyms so that any predicate that is even tangentially relevant to the demonstrations is generated. \ No newline at end of file diff --git a/predicators/structs.py b/predicators/structs.py index d6bc7163d7..889905793d 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -31,13 +31,6 @@ def dim(self) -> int: """Dimensionality of the feature vector of this object type.""" return len(self.feature_names) - @property - def oldest_ancestor(self) -> Type: - """Crawl up all the parent types to return the one at the top.""" - if self.parent is None: - return self - return self.parent.oldest_ancestor - def __call__(self, name: str) -> _TypedEntity: """Convenience method for generating _TypedEntities.""" if name.startswith("?"): diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index 29c08d831c..520ddfd274 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -628,7 +628,7 @@ def test_loading_saved_vlm_img_demos_folder_dummy_goal( assert len(loaded_dataset.trajectories) == 1 assert len(loaded_dataset.annotations) == 1 assert len(loaded_dataset.annotations[0][0]) == 1 - assert "Holding(spoon:spoon)" in str(loaded_dataset.annotations[0][0]) + assert "Holding0(spoon:spoon)" in str(loaded_dataset.annotations[0][0]) assert "DummyGoal" in str(loaded_dataset.annotations[0][-1]) else: with pytest.raises(ValueError) as e: From 5aef831ee6b66ca7ed30c71722218af762532716 Mon Sep 17 00:00:00 2001 From: Alicia Li <102700848+matrixbalto@users.noreply.github.com> Date: Wed, 29 May 2024 12:05:53 -0400 Subject: [PATCH 06/38] Added GridRowDoor environment! (#1659) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * pr grid_row_door * minor changes * minor fixes * minor minor fixes --------- Co-authored-by: “matrixbalto” <“ilfangliu@gmail.com”> --- predicators/envs/grid_row.py | 104 +++++++++++++ .../ground_truth_models/grid_row/nsrts.py | 140 ++++++++++++++++++ .../ground_truth_models/grid_row/options.py | 74 +++++++++ tests/envs/test_grid_row.py | 113 +++++++++++++- 4 files changed, 430 insertions(+), 1 deletion(-) diff --git a/predicators/envs/grid_row.py b/predicators/envs/grid_row.py index 04f63019ac..11ac2214a8 100644 --- a/predicators/envs/grid_row.py +++ b/predicators/envs/grid_row.py @@ -174,3 +174,107 @@ def _Adjacent_holds(self, state: State, objects: Sequence[Object]) -> bool: # return abs(dist - 1.0) < 1e-3 del state # not used return obj1 in self._cell_to_neighbors[obj2] + + +class GridRowDoorEnv(GridRowEnv): + """Simple variant on GridRow where there is also a door.""" + + def __init__(self, use_gui: bool = True) -> None: + super().__init__(use_gui) + # type door with features ['x', and 'open'] + self._door_type = Type("door", ["x", 'open']) + self._door = Object("door", self._door_type) + + self._DoorInCell = Predicate("DoorInCell", + [self._door_type, self._cell_type], + self._In_holds) + + @classmethod + def get_name(cls) -> str: + return "grid_row_door" + + @property + def predicates(self) -> Set[Predicate]: + return { + self._RobotInCell, self._LightInCell, self._LightOn, + self._LightOff, self._Adjacent, self._DoorInCell + } + + @property + def types(self) -> Set[Type]: + return { + self._robot_type, self._cell_type, self._light_type, + self._door_type + } + + @property + def action_space(self) -> Box: + # dx, dlight, ddoor + return Box(-np.inf, np.inf, (3, )) + + def _get_tasks(self, num: int, + rng: np.random.Generator) -> List[EnvironmentTask]: + # There is only one goal in this environment: to turn the light on. + goal = {GroundAtom(self._LightOn, [self._light])} + # The only variation in the initial state is the light target level. + tasks: List[EnvironmentTask] = [] + while len(tasks) < num: + state_dict = { + self._robot: { + "x": 0.5, + }, + self._light: { + "x": len(self._cells) - 0.5, + "level": 0.0, + "target": rng.uniform(0.5, 1.0), + }, + self._door: { + "x": rng.choice(range(2, len(self._cells))) - 0.5, + "open": 0.0 + } + } + for i, cell in enumerate(self._cells): + state_dict[cell] = {"x": i + 0.5} + state = utils.create_state_from_dict(state_dict) + tasks.append(EnvironmentTask(state, goal)) + return tasks + + def simulate(self, state: State, action: Action) -> State: + assert self.action_space.contains(action.arr) + next_state = state.copy() + dx, dlight, ddoor = action.arr + door_pos = state.get(self._door, "x") + robbot_pos = state.get(self._robot, "x") + door_open = state.get(self._door, "open") + robot_cells = [ + c for c in self._cells if self._In_holds(state, [self._robot, c]) + ] + door_cells = [ + c for c in self._cells if self._In_holds(state, [self._door, c]) + ] + assert len(door_cells) == 1 + # Apply ddoor if we're in same cell as door + door_cell = door_cells[0] + robot_cell = robot_cells[0] + if robot_cell == door_cell and not door_open and ddoor == 1.0: + next_state.set(self._door, "open", 1.0) + # Apply dlight if we're in the same cell as the light. + assert len(robot_cells) == 1 + light_cells = [ + c for c in self._cells if self._In_holds(state, [self._light, c]) + ] + assert len(light_cells) == 1 + light_cell = light_cells[0] + if robot_cell == light_cell: + new_light_level = np.clip( + state.get(self._light, "level") + dlight, 0.0, 1.0) + next_state.set(self._light, "level", new_light_level) + + if door_open == 1.0 or (robbot_pos <= door_pos + and robbot_pos + dx <= door_pos): + # Apply dx to robot. + new_x = np.clip( + state.get(self._robot, "x") + dx, 0.0, len(self._cells)) + next_state.set(self._robot, "x", new_x) + + return next_state diff --git a/predicators/ground_truth_models/grid_row/nsrts.py b/predicators/ground_truth_models/grid_row/nsrts.py index 4f74175341..fe476b49ac 100644 --- a/predicators/ground_truth_models/grid_row/nsrts.py +++ b/predicators/ground_truth_models/grid_row/nsrts.py @@ -147,3 +147,143 @@ def light_sampler(state: State, goal: Set[GroundAtom], nsrts.add(impossible_nsrt) return nsrts + + +class GridRowDoorGroundTruthNSRTFactory(GridRowGroundTruthNSRTFactory): + """Ground-truth NSRTs for the grid row door environment.""" + + @classmethod + def get_env_names(cls) -> Set[str]: + return {"grid_row_door"} + + @staticmethod + def get_nsrts(env_name: str, types: Dict[str, Type], + predicates: Dict[str, Predicate], + options: Dict[str, ParameterizedOption]) -> Set[NSRT]: + # Types + robot_type = types["robot"] + light_type = types["light"] + cell_type = types["cell"] + door_type = types["door"] + + # Predicates + RobotInCell = predicates["RobotInCell"] + LightInCell = predicates["LightInCell"] + LightOn = predicates["LightOn"] + LightOff = predicates["LightOff"] + Adjacent = predicates["Adjacent"] + DoorInCell = predicates["DoorInCell"] + + # Options + MoveRobot = options["MoveRobot"] + TurnOnLight = options["TurnOnLight"] + TurnOffLight = options["TurnOffLight"] + OpenDoor = options["OpenDoor"] + + nsrts = set() + + def light_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: + del state, goal, objs # unused + # Note: just return a random value from -1 to 1 + return np.array([rng.uniform(-1.0, 1.0)], dtype=np.float32) + + # MoveRobot + robot = Variable("?robot", robot_type) + current_cell = Variable("?current_cell", cell_type) + target_cell = Variable("?target_cell", cell_type) + parameters = [robot, current_cell, target_cell] + option_vars = parameters + option = MoveRobot + preconditions = { + LiftedAtom(Adjacent, [current_cell, target_cell]), + LiftedAtom(RobotInCell, [robot, current_cell]), + } + add_effects = { + LiftedAtom(RobotInCell, [robot, target_cell]), + } + delete_effects = { + LiftedAtom(RobotInCell, [robot, current_cell]), + } + ignore_effects: Set[Predicate] = set() + move_robot_nsrt = NSRT("MoveRobot", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, null_sampler) + nsrts.add(move_robot_nsrt) + + # TurnOnLight + robot = Variable("?robot", robot_type) + current_cell = Variable("?current_cell", cell_type) + light = Variable("?light", light_type) + parameters = [robot, current_cell, light] + option_vars = parameters + option = TurnOnLight + preconditions = { + LiftedAtom(LightInCell, [light, current_cell]), + LiftedAtom(RobotInCell, [robot, current_cell]), + LiftedAtom(LightOff, [light]), + } + add_effects = { + LiftedAtom(LightOn, [light]), + } + delete_effects = { + LiftedAtom(LightOff, [light]), + } + ignore_effects = set() + turn_light_on_nsrt = NSRT("TurnOnLight", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, light_sampler) + nsrts.add(turn_light_on_nsrt) + + # TurnOffLight + robot = Variable("?robot", robot_type) + current_cell = Variable("?current_cell", cell_type) + light = Variable("?light", light_type) + parameters = [robot, current_cell, light] + option_vars = parameters + option = TurnOffLight + preconditions = { + LiftedAtom(LightInCell, [light, current_cell]), + LiftedAtom(RobotInCell, [robot, current_cell]), + LiftedAtom(LightOn, [light]), + } + add_effects = { + LiftedAtom(LightOff, [light]), + } + delete_effects = { + LiftedAtom(LightOn, [light]), + } + ignore_effects = set() + turn_light_off_nsrt = NSRT("TurnOffLight", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, light_sampler) + nsrts.add(turn_light_off_nsrt) + + # OpenDoor + def door_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: + del state, goal, objs # unused + # Note: return 1.0 to show door is now open + return np.array([rng.uniform(1.0, 1.0)], dtype=np.float32) + + robot = Variable("?robot", robot_type) + current_cell = Variable("?current_cell", cell_type) + door = Variable("?door", door_type) + parameters = [robot, current_cell, door] + option_vars = parameters + option = OpenDoor + preconditions = { + LiftedAtom(DoorInCell, [door, current_cell]), + LiftedAtom(RobotInCell, [robot, current_cell]), + } + add_effects = set() + delete_effects = set() + ignore_effects = set() + open_door_nsrt = NSRT("OpenDoor", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, door_sampler) + nsrts.add(open_door_nsrt) + + return nsrts diff --git a/predicators/ground_truth_models/grid_row/options.py b/predicators/ground_truth_models/grid_row/options.py index 1068f9f927..ce513b5665 100644 --- a/predicators/ground_truth_models/grid_row/options.py +++ b/predicators/ground_truth_models/grid_row/options.py @@ -80,3 +80,77 @@ def _null_policy(state: State, memory: Dict, objects: Sequence[Object], ) return {MoveRobot, TurnOnLight, TurnOffLight, JumpToLight} + + +class GridRowDoorGroundTruthOptionFactory(GridRowGroundTruthOptionFactory): + """Ground-truth options for the grid row door environment.""" + + @classmethod + def get_env_names(cls) -> Set[str]: + return {"grid_row_door"} + + @classmethod + def get_options(cls, env_name: str, types: Dict[str, Type], + predicates: Dict[str, Predicate], + action_space: Box) -> Set[ParameterizedOption]: + + robot_type = types["robot"] + light_type = types["light"] + cell_type = types["cell"] + door_type = types["door"] + + # MoveTo + def _MoveTo_policy(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> Action: + del memory, params # unused + robot, _, target_cell = objects + rob_x = state.get(robot, "x") + target_x = state.get(target_cell, "x") + dx = target_x - rob_x + return Action(np.array([dx, 0.0, 0.0], dtype=np.float32)) + + MoveRobot = utils.SingletonParameterizedOption( + "MoveRobot", + types=[robot_type, cell_type, cell_type], + policy=_MoveTo_policy, + ) + + def _toggle_light_policy(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> Action: + del state, objects, memory # unused + dlight, = params + return Action(np.array([0.0, dlight, 0.0], dtype=np.float32)) + + # TurnOnLight + TurnOnLight = utils.SingletonParameterizedOption( + "TurnOnLight", + types=[robot_type, cell_type, light_type], + policy=_toggle_light_policy, + params_space=Box(-1.0, 1.0, (1, )), + ) + + # TurnOffLight + TurnOffLight = utils.SingletonParameterizedOption( + "TurnOffLight", + types=[robot_type, cell_type, light_type], + policy=_toggle_light_policy, + params_space=Box(-1.0, 1.0, (1, )), + ) + + # OpenDoor + def _toggle_door_policy(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> Action: + del state, objects, memory # unused + ddoor, = params + return Action(np.array([0.0, 0.0, ddoor], dtype=np.float32)) + + OpenDoor = utils.SingletonParameterizedOption( + "OpenDoor", + types=[robot_type, cell_type, door_type], + policy=_toggle_door_policy, + params_space=Box(0.0, 1.0, (1, )), + ) + + return {MoveRobot, TurnOnLight, TurnOffLight, OpenDoor} diff --git a/tests/envs/test_grid_row.py b/tests/envs/test_grid_row.py index d39b7f31b9..19b1214a67 100644 --- a/tests/envs/test_grid_row.py +++ b/tests/envs/test_grid_row.py @@ -4,7 +4,7 @@ import pytest from predicators import utils -from predicators.envs.grid_row import GridRowEnv +from predicators.envs.grid_row import GridRowDoorEnv, GridRowEnv from predicators.ground_truth_models import get_gt_nsrts, get_gt_options @@ -134,3 +134,114 @@ def test_grid_row(): state = env.simulate(state, action) assert option.terminal(state) assert not all(a.holds(state) for a in ground_nsrt.add_effects) + + +def test_grid_row_door(): + """Tests for the Grid Row Door environment.""" + utils.reset_config({ + "env": "grid_row_door", + "num_train_tasks": 1, + "num_test_tasks": 2, + "grid_row_num_cells": 10, + }) + env = GridRowDoorEnv() + assert env.get_name() == "grid_row_door" + for env_task in env.get_train_tasks(): + task = env_task.task + for obj in task.init: + assert len(obj.type.feature_names) == len(task.init[obj]) + for env_task in env.get_test_tasks(): + task = env_task.task + for obj in task.init: + assert len(obj.type.feature_names) == len(task.init[obj]) + assert len(env.predicates) == 6 + Adjacent, DoorInCell, LightInCell, LightOff, LightOn, RobotInCell = \ + sorted(env.predicates) + assert Adjacent.name == "Adjacent" + assert LightInCell.name == "LightInCell" + assert LightOff.name == "LightOff" + assert LightOn.name == "LightOn" + assert RobotInCell.name == "RobotInCell" + assert DoorInCell.name == "DoorInCell" + assert env.goal_predicates == {LightOn} + options = get_gt_options(env.get_name()) + assert len(env.types) == 4 + cell_type, door_type, light_type, robot_type = sorted(env.types) + assert cell_type.name == "cell" + assert light_type.name == "light" + assert robot_type.name == "robot" + assert door_type.name == "door" + assert env.action_space.shape == (3, ) + nsrts = get_gt_nsrts(env.get_name(), env.predicates, options) + assert len(nsrts) == 4 + assert len(options) == len(nsrts) + env_train_tasks = env.get_train_tasks() + assert len(env_train_tasks) == 1 + env_test_tasks = env.get_test_tasks() + assert len(env_test_tasks) == 2 + env_task = env_test_tasks[1] + env.reset("test", 1) + with pytest.raises(NotImplementedError): + env.render(caption="Test") + + # Test NSRTs. + MoveRobot, OpenDoor, TurnOffLight, TurnOnLight = sorted(nsrts) + assert OpenDoor.name == "OpenDoor" + assert MoveRobot.name == "MoveRobot" + assert TurnOffLight.name == "TurnOffLight" + assert TurnOnLight.name == "TurnOnLight" + + init_state = env_test_tasks[0].task.init + rng = np.random.default_rng(123) + + # Test successful turning on the light. + robot, = init_state.get_objects(robot_type) + light, = init_state.get_objects(light_type) + door, = init_state.get_objects(door_type) + cell_order = sorted(init_state.get_objects(cell_type), + key=lambda o: int(o.name[len("cell"):])) + ground_nsrt_plan = [] + # First move to the light. + state = init_state.copy() + for cell, next_cell in zip(cell_order[:-1], cell_order[1:]): + if len(ground_nsrt_plan) == state.get(door, "x") - 0.5: + ground_nsrt_plan.append(OpenDoor.ground([robot, cell, door])) + ground_nsrt_plan.append(MoveRobot.ground([robot, cell, next_cell])) + else: + ground_nsrt_plan.append(MoveRobot.ground([robot, cell, next_cell])) + rng = np.random.default_rng(123) + for ground_nsrt in ground_nsrt_plan: + assert all(a.holds(state) for a in ground_nsrt.preconditions) + option = ground_nsrt.sample_option(state, set(), rng) + assert option.initiable(state) + action = option.policy(state) + state = env.simulate(state, action) + assert option.terminal(state) + assert all(a.holds(state) for a in ground_nsrt.add_effects) + assert not any(a.holds(state) for a in ground_nsrt.delete_effects) + # Now repeatedly turn on the light until it succeeds. + ground_nsrt = TurnOnLight.ground([robot, cell_order[-1], light]) + for _ in range(100): + assert all(a.holds(state) for a in ground_nsrt.preconditions) + option = ground_nsrt.sample_option(state, set(), rng) + assert option.initiable(state) + action = option.policy(state) + state = env.simulate(state, action) + assert option.terminal(state) + if all(a.holds(state) for a in ground_nsrt.add_effects): + break + assert all(a.holds(state) for a in ground_nsrt.add_effects) + assert not any(a.holds(state) for a in ground_nsrt.delete_effects) + # Now repeatedly turn off the light until it succeeds. + ground_nsrt = TurnOffLight.ground([robot, cell_order[-1], light]) + for _ in range(100): + assert all(a.holds(state) for a in ground_nsrt.preconditions) + option = ground_nsrt.sample_option(state, set(), rng) + assert option.initiable(state) + action = option.policy(state) + state = env.simulate(state, action) + assert option.terminal(state) + if all(a.holds(state) for a in ground_nsrt.add_effects): + break + assert all(a.holds(state) for a in ground_nsrt.add_effects) + assert not any(a.holds(state) for a in ground_nsrt.delete_effects) From 188d51efa48f8288d437fc73175b0612d741fbd9 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Thu, 30 May 2024 11:51:16 -0400 Subject: [PATCH 07/38] Support VLM predicate invention in BurgerEnv (#1660) * Initial commit. Just try to get the pipeline working with all predicates given. * Debugging. * Get image rendering to work properly so that VLM can take the image in as a valid input. * Get pipeline to run. * Remove change that made pipeline work with python < 3.10. * Uncomment caching model completions and hash the image ids to shorten the length of the cacheing directory. * Update comment. * Get pylint and mypy tests to pass. * Run autoformatter. * Fix more tests. * Update comment. * fixes kitchen * Address PR comments. * Fix test_abstract(). * Fix test_create_pddl(). --------- Co-authored-by: Nishanth Kumar --- .../datasets/generate_atom_trajs_with_vlm.py | 13 +- predicators/envs/burger.py | 143 +++++++++++++----- predicators/envs/kitchen.py | 1 + predicators/perception/kitchen_perceiver.py | 3 +- predicators/pretrained_model_interface.py | 10 +- predicators/utils.py | 4 +- tests/datasets/test_datasets.py | 3 +- tests/envs/test_burger.py | 2 +- tests/test_utils.py | 4 +- 9 files changed, 132 insertions(+), 51 deletions(-) diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index 5880630166..e1aee674aa 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -733,19 +733,18 @@ def create_ground_atom_data_from_generated_demos( ("WARNING: there are fewer total states after option-based " "segmentation than there are in the original trajectory. " "Likely there is an issue with segmentation!")) - # We manually add the final two states (initial state and terminal - # state of the final option). + # We manually add the final state of the final option. curr_traj_states_for_vlm.append(traj.states[-1]) # Pull out the images within the states we've saved for the trajectory. - # We assume that images are saved in the state's simulator_state - # field. + # We assume that the state's simulator_state attribute is a dictionary, + # and that the images for each state are accessed by the key "images". state_imgs: List[List[PIL.Image.Image]] = [] for state in curr_traj_states_for_vlm: - assert isinstance(state.simulator_state, List) - assert len(state.simulator_state) > 0 + assert state.simulator_state is not None + assert "images" in state.simulator_state state_imgs.append([ PIL.Image.fromarray(img_arr) # type: ignore - for img_arr in state.simulator_state + for img_arr in state.simulator_state["images"] ]) img_option_trajs.append( ImageOptionTrajectory( diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index fb64f707e6..8c3581e977 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -5,21 +5,24 @@ Nicole Thean (https://github.com/nicolethean). """ +import copy +import io import logging from typing import Callable, List, Optional, Sequence, Set, Tuple import matplotlib import matplotlib.image as mpimg import matplotlib.pyplot as plt -# import pygame import numpy as np from gym.spaces import Box +from PIL import Image from predicators import utils from predicators.envs import BaseEnv from predicators.settings import CFG -from predicators.structs import Action, EnvironmentTask, GroundAtom, Object, \ - Predicate, State, Type +from predicators.structs import Action, DefaultEnvironmentTask, \ + EnvironmentTask, GroundAtom, Object, Observation, Predicate, State, Type, \ + Video class BurgerEnv(BaseEnv): @@ -56,7 +59,8 @@ class BurgerEnv(BaseEnv): _item_type = Type("item", [], _object_type) _station_type = Type("station", [], _object_type) - _robot_type = Type("robot", ["row", "col", "fingers", "dir"]) + _robot_type = Type("robot", ["row", "col", "z", "fingers", "dir"], + _object_type) _patty_type = Type("patty", ["row", "col", "z"], _item_type) _tomato_type = Type("tomato", ["row", "col", "z"], _item_type) @@ -111,7 +115,7 @@ def __init__(self, use_gui: bool = True) -> None: ], self._GoalHack_holds) # Static objects (exist no matter the settings) - self._robot = Object("robby", self._robot_type) + self._robot = Object("robot", self._robot_type) self._grill = Object("grill", self._grill_type) self._cutting_board = Object("cutting_board", self._cutting_board_type) @@ -132,13 +136,14 @@ def _get_tasks(self, num: int, rng: np.random.Generator) -> List[EnvironmentTask]: del rng # unused tasks = [] - - # Add robot, grill, and cutting board state_dict = {} hidden_state = {} + + # Add robot, grill, and cutting board state_dict[self._robot] = { "row": 2, "col": 2, + "z": 0, "fingers": 0.0, "dir": 3 } @@ -177,13 +182,20 @@ def _get_tasks(self, num: int, GroundAtom(self._On, [top_bun, tomato]), GroundAtom(self._IsCooked, [patty]), GroundAtom(self._IsSliced, [tomato]), + # GroundAtom(self._GoalHack, [bottom_bun, patty, cheese, tomato, + # top_bun]) } for _ in range(num): state = utils.create_state_from_dict(state_dict) - state.simulator_state = hidden_state - # Note: this takes in Observation, GoalDescription, whose types are - # Any + state.simulator_state = {} + state.simulator_state["state"] = hidden_state + # A DefaultEnvironmentTask is a dummy environment task. Our render + # function does not use the task argument, so this is ok. + state.simulator_state["images"] = self.render_state( + state, DefaultEnvironmentTask) + # Recall that a EnvironmentTask consists of an Observation and a + # GoalDescription, both of whose types are Any. tasks.append(EnvironmentTask(state, goal)) return tasks @@ -235,13 +247,15 @@ def _AdjacentNotFacing_holds(self, state: State, def _IsCooked_holds(self, state: State, objects: Sequence[Object]) -> bool: patty, = objects - return state.simulator_state[patty][ # type: ignore[index] - "is_cooked"] > 0.5 + assert state.simulator_state is not None + assert "state" in state.simulator_state + return state.simulator_state["state"][patty]["is_cooked"] > 0.5 def _IsSliced_holds(self, state: State, objects: Sequence[Object]) -> bool: tomato, = objects - return state.simulator_state[tomato][ # type: ignore[index] - "is_sliced"] > 0.5 + assert state.simulator_state is not None + assert "state" in state.simulator_state + return state.simulator_state["state"][tomato]["is_sliced"] > 0.5 def _HandEmpty_holds(self, state: State, objects: Sequence[Object]) -> bool: @@ -250,10 +264,10 @@ def _HandEmpty_holds(self, state: State, def _Holding_holds(self, state: State, objects: Sequence[Object]) -> bool: robot, item = objects - return not self._HandEmpty_holds( - state, - [robot]) and state.simulator_state[item][ # type: ignore[index] - "is_held"] > 0.5 + assert state.simulator_state is not None + assert "state" in state.simulator_state + return not self._HandEmpty_holds(state,[robot]) and \ + state.simulator_state["state"][item]["is_held"] > 0.5 def _On_holds(self, state: State, objects: Sequence[Object]) -> bool: a, b = objects @@ -321,6 +335,7 @@ def predicates(self) -> Set[Predicate]: @property def goal_predicates(self) -> Set[Predicate]: return {self._On, self._IsCooked, self._IsSliced} + # return {self._On, self._GoalHack} @property def action_space(self) -> Box: @@ -378,8 +393,12 @@ def simulate(self, state: State, action: Action) -> State: # We assume only one of , , , # is not "null" in each action. # If each one was null, the action would be <0, 0, -1, 0, 0>. + assert state.simulator_state is not None + assert "state" in state.simulator_state assert self.action_space.contains(action.arr) next_state = state.copy() + assert next_state.simulator_state is not None + assert "state" in next_state.simulator_state dcol, drow, dir_from_turning, interact, pickplace = action.arr rx, ry = self.get_position(self._robot, state) @@ -403,11 +422,12 @@ def simulate(self, state: State, action: Action) -> State: ] for obj in other_objects: if obj in items: - if state.simulator_state[obj][ # type: ignore[index] - "is_held"] > 0.5: + if state.simulator_state["state"][obj]["is_held"] > 0.5: continue ox, oy = self.get_position(obj, state) if abs(new_rx - ox) < 1e-3 and abs(new_ry - oy) < 1e-3: + next_state.simulator_state["images"] = self.render_state( + next_state, DefaultEnvironmentTask) return next_state # No collision detected, so we can move the robot. @@ -416,8 +436,7 @@ def simulate(self, state: State, action: Action) -> State: # If an object was held, move it with the robot. for item in items: - if state.simulator_state[item][ # type: ignore[index] - "is_held"] > 0.5: + if state.simulator_state["state"][item]["is_held"] > 0.5: next_state.set(item, "col", new_rx) next_state.set(item, "row", new_ry) @@ -427,11 +446,11 @@ def simulate(self, state: State, action: Action) -> State: [self._robot, item]) and interact > 0.5: if item.is_instance(self._patty_type) and self._On_holds( state, [item, self._grill]): - next_state.simulator_state[item][ # type: ignore[index] + next_state.simulator_state["state"][item][ "is_cooked"] = 1.0 elif item.is_instance(self._tomato_type) and self._On_holds( state, [item, self._cutting_board]): - next_state.simulator_state[item][ # type: ignore[index] + next_state.simulator_state["state"][item][ "is_sliced"] = 1.0 # Handle picking. @@ -443,8 +462,7 @@ def simulate(self, state: State, action: Action) -> State: if len(facing_items) > 0: # We'll pick up the item that is "on top". on_top = max(facing_items, key=lambda x: x[1])[0] - next_state.simulator_state[on_top][ # type: ignore[index] - "is_held"] = 1.0 + next_state.simulator_state["state"][on_top]["is_held"] = 1.0 next_state.set(on_top, "col", rx) next_state.set(on_top, "row", ry) next_state.set(on_top, "z", 0) @@ -454,15 +472,13 @@ def simulate(self, state: State, action: Action) -> State: if pickplace > 0.5 and not self._HandEmpty_holds(state, [self._robot]): held_item = [ item for item in items - if state.simulator_state[item] # type: ignore[index] - ["is_held"] > 0.5 + if state.simulator_state["state"][item]["is_held"] > 0.5 ][0] px, py = self.get_cell_in_direction( rx, ry, self.enum_to_dir[state.get(self._robot, "dir")]) if 0 <= py <= self.num_rows and 0 <= px <= self.num_cols: next_state.set(self._robot, "fingers", 0.0) - next_state.simulator_state[held_item][ # type: ignore[index] - "is_held"] = 0.0 + next_state.simulator_state["state"][held_item]["is_held"] = 0.0 next_state.set(held_item, "col", px) next_state.set(held_item, "row", py) # If any other objects are at this location, then this must go @@ -478,6 +494,11 @@ def simulate(self, state: State, action: Action) -> State: new_z = 0 next_state.set(held_item, "z", new_z) + # Update the image + assert next_state.simulator_state is not None + next_state.simulator_state["images"] = self.render_state( + next_state, DefaultEnvironmentTask) + return next_state def render_state_plt( @@ -538,19 +559,20 @@ def render_state_plt( held_img_size = (0.3, 0.3) offset = held_img_size[1] * (1 / 3) items = [obj for obj in state if obj.is_instance(self._item_type)] + assert state.simulator_state is not None + assert "state" in state.simulator_state for item in items: img = type_to_img[item.type] - if "is_cooked" in state.simulator_state[ # type: ignore[index] + if "is_cooked" in state.simulator_state["state"][ item] and self._IsCooked_holds(state, [item]): img = mpimg.imread( utils.get_env_asset_path("imgs/cooked_patty.png")) - elif "is_sliced" in state.simulator_state[ # type: ignore[index] + elif "is_sliced" in state.simulator_state["state"][ item] and self._IsSliced_holds(state, [item]): img = mpimg.imread( utils.get_env_asset_path("imgs/sliced_tomato.png")) zorder = state.get(item, "z") - is_held = state.simulator_state[item][ # type: ignore[index] - "is_held"] > 0.5 + is_held = state.simulator_state["state"][item]["is_held"] > 0.5 x, y = self.get_position(item, state) # If the item is held, make it smaller so that it does obstruct the # robot. @@ -593,6 +615,59 @@ def render_state_plt( plt.tight_layout() return fig + def render_state(self, + state: State, + task: EnvironmentTask, + action: Optional[Action] = None, + caption: Optional[str] = None) -> Video: + fig = self.render_state_plt(state, task, action, caption) + # Create an in-memory binary stream. + buf = io.BytesIO() + fig.savefig(buf, format='png') + # Rewind the stream to the beginning so that it can be read from. + buf.seek(0) + img = Image.open(buf) + plt.close(fig) + + # Convert the image to RGB mode to save as JPEG, because + # JPEG format does not support images with an alpha channel + # (transparency). + img_rgb = img.convert("RGB") + jpeg_buf = io.BytesIO() + img_rgb.save(jpeg_buf, format="JPEG") + jpeg_buf.seek(0) + jpeg_img = Image.open(jpeg_buf) + + # If we return jpeg_img, we get this error: + # `ValueError: I/O operation on closed file`, so we copy it before + # closing the buffers. + ret_img = copy.deepcopy(jpeg_img) + ret_arr = np.array(ret_img) + + buf.close() + jpeg_buf.close() + return [ret_arr] + + def _copy_observation(self, obs: Observation) -> Observation: + return copy.deepcopy(obs) + + def get_observation(self) -> Observation: + return self._copy_observation(self._current_observation) + + def reset(self, train_or_test: str, task_idx: int) -> Observation: + # Rather than have the observation be the state + the image, we just + # package the image inside the state's simulator_state. + self._current_task = self.get_task(train_or_test, task_idx) + self._current_observation = self._current_task.init_obs + return self._copy_observation(self._current_observation) + + def step(self, action: Action) -> Observation: + # Rather than have the observation be the state + the image, we just + # package the image inside the state's simulator_state. + self._current_observation = self.simulate(self._current_observation, + action) + return self._copy_observation(self._current_observation) + def get_event_to_action_fn( self) -> Callable[[State, matplotlib.backend_bases.Event], Action]: diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index d4d9be3471..e9806a040e 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -343,6 +343,7 @@ def state_info_to_state(cls, state_info: Dict[str, Any]) -> State: "angle": angle } state = utils.create_state_from_dict(state_dict) + state.simulator_state = {} return state def goal_reached(self) -> bool: diff --git a/predicators/perception/kitchen_perceiver.py b/predicators/perception/kitchen_perceiver.py index 6637ceaf1f..577e4bd98d 100644 --- a/predicators/perception/kitchen_perceiver.py +++ b/predicators/perception/kitchen_perceiver.py @@ -52,7 +52,8 @@ def step(self, observation: Observation) -> State: def _observation_to_state(self, obs: Observation) -> State: state = KitchenEnv.state_info_to_state(obs["state_info"]) - state.simulator_state = obs["obs_images"] + assert state.simulator_state is not None + state.simulator_state["images"] = obs["obs_images"] return state def render_mental_images(self, observation: Observation, diff --git a/predicators/pretrained_model_interface.py b/predicators/pretrained_model_interface.py index 2fb5079835..ee4ac685d2 100644 --- a/predicators/pretrained_model_interface.py +++ b/predicators/pretrained_model_interface.py @@ -85,11 +85,13 @@ def sample_completions(self, img_hash_list: List[str] = [] for img in imgs: img_hash_list.append(str(imagehash.phash(img))) - # NOTE: it's very possible that this string gets too long and this - # causes significant problems for us. We can fix this when it - # comes up by hashing this string to a shorter string, using e.g. + # NOTE: it's possible that this string (the concatenated hashes of + # each image) is very long. This would make the final cache + # foldername long. In many operating systems, the maximum folder + # name length is 255 characters. To shorten this foldername more, we + # can hash this string into a shorter string. For example, look at # https://stackoverflow.com/questions/57263436/hash-like-string-shortener-with-decoder # pylint:disable=line-too-long - imgs_id = "".join(img_hash_list) + imgs_id = hash("".join(img_hash_list)) cache_foldername += f"{imgs_id}" cache_folderpath = os.path.join(CFG.pretrained_model_prompt_cache_dir, cache_foldername) diff --git a/predicators/utils.py b/predicators/utils.py index 04f53b18f5..b34ead4ac6 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -2246,8 +2246,8 @@ def query_vlm_for_atom_vals( # This only works if state.simulator_state is some list of images that the # vlm can be called on. assert state.simulator_state is not None - assert isinstance(state.simulator_state, List) - imgs = state.simulator_state + assert isinstance(state.simulator_state["images"], List) + imgs = state.simulator_state["images"] vlm_atoms = sorted(vlm_atoms) atom_queries_str = "\n* " atom_queries_str += "\n* ".join(atom.get_vlm_query_str() diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index 520ddfd274..021785c277 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -733,7 +733,8 @@ def test_create_ground_atom_data_from_generated_demos(): dataset = create_dataset(env, train_tasks, options, predicates) assert len(dataset.trajectories) == 1 for state in dataset.trajectories[0].states: - state.simulator_state = [np.zeros((32, 32), dtype=np.uint8)] + state.simulator_state = {} + state.simulator_state["images"] = [np.zeros((32, 32), dtype=np.uint8)] vlm = _DummyVLM() vlm_dataset = create_ground_atom_data_from_generated_demos( dataset, env, predicates, train_tasks, vlm) diff --git a/tests/envs/test_burger.py b/tests/envs/test_burger.py index fc2693c864..4c45ffd35a 100644 --- a/tests/envs/test_burger.py +++ b/tests/envs/test_burger.py @@ -72,7 +72,7 @@ def test_burger(): grill = [obj for obj in task.init if obj.name == "grill"][0] patty = [obj for obj in task.init if obj.name == "patty"][0] - robot = [obj for obj in task.init if obj.name == "robby"][0] + robot = [obj for obj in task.init if obj.name == "robot"][0] tomato = [obj for obj in task.init if obj.name == "tomato"][0] cutting_board = [obj for obj in task.init if obj.name == "cutting_board"][0] diff --git a/tests/test_utils.py b/tests/test_utils.py index 127ae9748f..1c511a346a 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1125,7 +1125,9 @@ def _classifier2(state, objects): vlm_pred = VLMPredicate("IsFishy", [], lambda s, o: NotImplementedError, lambda o: "is_fishy") vlm_state = state.copy() - vlm_state.simulator_state = [np.zeros((30, 30, 3), dtype=np.uint8)] + vlm_state.simulator_state = { + "images": [np.zeros((30, 30, 3), dtype=np.uint8)] + } vlm_atoms_set = utils.abstract(vlm_state, [vlm_pred], _DummyVLM()) assert len(vlm_atoms_set) == 1 assert "IsFishy" in str(vlm_atoms_set) From 9b4490cb918895ab68f6a6fe149456b289947fcf Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Mon, 3 Jun 2024 10:22:28 -0400 Subject: [PATCH 08/38] Add scene labeling option that provides the VLM its label history (#1661) * Initial commit. * Add new labeling prompt. * Get more tests to pass. * Run autoformatter. * Get rid of newline. --- .../datasets/generate_atom_trajs_with_vlm.py | 50 +++++++++++-------- .../img_option_diffs_label_history.txt | 3 ++ tests/datasets/test_datasets.py | 3 +- 3 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index e1aee674aa..31311478d6 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -7,7 +7,7 @@ import re from functools import partial from pathlib import Path -from typing import Dict, List, Optional, Sequence, Set, Tuple +from typing import Dict, Iterator, List, Optional, Sequence, Set, Tuple import dill as pkl import numpy as np @@ -77,8 +77,9 @@ def _generate_prompt_for_atom_proposals( def _generate_prompt_for_scene_labelling( - traj: ImageOptionTrajectory, - atoms_list: List[str]) -> List[Tuple[str, List[PIL.Image.Image]]]: + traj: ImageOptionTrajectory, atoms_list: List[str], + label_history: List[str] +) -> Iterator[Tuple[str, List[PIL.Image.Image]]]: """Prompt for generating labels for an entire trajectory. Similar to the above prompting method, this outputs a list of prompts to label the state at each timestep of traj with atom values). @@ -86,7 +87,6 @@ def _generate_prompt_for_scene_labelling( Note that all our prompts are saved as separate txt files under the 'vlm_input_data_prompts/atom_labelling' folder. """ - ret_list = [] filepath_prefix = utils.get_path_to_predicators_root() + \ "/predicators/datasets/vlm_input_data_prompts/atom_labelling/" try: @@ -98,7 +98,13 @@ def _generate_prompt_for_scene_labelling( except FileNotFoundError: raise ValueError("Unknown VLM prompting option " + f"{CFG.grammar_search_vlm_atom_label_prompt_type}") - if CFG.grammar_search_vlm_atom_label_prompt_type == "img_option_diffs": + # The prompt ends with a section for 'Predicates', so list these. + for atom_str in atoms_list: + prompt += f"\n{atom_str}" + + if CFG.grammar_search_vlm_atom_label_prompt_type in [ + "img_option_diffs", "img_option_diffs_label_history" + ]: # In this case, we need to load the 'per_scene_naive' prompt as well # for the first timestep. with open(filepath_prefix + "per_scene_naive.txt", @@ -107,32 +113,36 @@ def _generate_prompt_for_scene_labelling( init_prompt = f.read() for atom_str in atoms_list: init_prompt += f"\n{atom_str}" - ret_list.append((init_prompt, traj.imgs[0])) + if len(label_history) == 0: + yield (init_prompt, traj.imgs[0]) + # Now, we use actual difference-based prompting for the second timestep # and beyond. - # The prompt ends with a section for 'Predicates', so list these. - for atom_str in atoms_list: - prompt += f"\n{atom_str}" for i in range(1, len(traj.imgs)): curr_prompt = prompt[:] - # NOTE: we rip out just one img from each of the state - # images. This is fine/works for the case where we only - # have one camera view, but probably will need to be - # amended in the future! + # Here, we want to give the VLM the images corresponding to the + # states at timestep t-1 and timestep t. Note that in the general + # case, there can be multiple images associated with each state, but + # for now we assume that there is just a single image. So, here we + # give the VLM the image from the state at t-1, and the image from + # the state at t. curr_prompt_imgs = [ imgs_timestep[0] for imgs_timestep in traj.imgs[i - 1:i + 1] ] curr_prompt += "\n\nSkill executed between states: " curr_prompt += traj.actions[i - 1].name + str( traj.actions[i - 1].objects) - ret_list.append((curr_prompt, curr_prompt_imgs)) + + if CFG.grammar_search_vlm_atom_label_prompt_type == \ + "img_option_diffs_label_history": + curr_prompt += "\n\nPredicate values in the first scene, " \ + "before the skill was executed: \n" + curr_prompt += label_history[-1] + yield (curr_prompt, curr_prompt_imgs) else: - for atom_str in atoms_list: - prompt += f"\n{atom_str}" for curr_imgs in traj.imgs: # NOTE: same problem with ripping out images as in the above note. - ret_list.append((prompt, [curr_imgs[0]])) - return ret_list + yield (prompt, [curr_imgs[0]]) def _sample_vlm_atom_proposals_from_trajectories( @@ -171,9 +181,9 @@ def _label_trajectories_with_vlm_atom_values( curr_scenes_labelled = 0 output_labelled_atoms_txt_list = [] for traj in trajectories: + curr_traj_txt_outputs: List[str] = [] prompts_for_traj = _generate_prompt_for_scene_labelling( - traj, atoms_list) - curr_traj_txt_outputs = [] + traj, atoms_list, label_history=curr_traj_txt_outputs) for text_prompt, img_prompt in prompts_for_traj: # Sample VLM outputs with temperature 0 in an attempt to be # accurate. diff --git a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt new file mode 100644 index 0000000000..98a17aa5d3 --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt @@ -0,0 +1,3 @@ +You are a vision system for a robot. You are provided with two images corresponding to the states before and after a particular skill is executed. You are given a list of predicates below, and you are given the values of these predicates in the first scene, before the skill is executed. Your job is to output the values of the following predicates in only the final scene. Pay careful attention to the changes between the two images to figure out which predicates change and which predicates do not change. For the predicates that change, list these separately at the end of your response. Note that in some scenes, there might be no changes. Output each predicate value as a bulleted list with each predicate and value on a different line. For each output value, provide an explanation as to why you labelled this predicate as having this particular value. Use the format: : . . + +Predicates: \ No newline at end of file diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index 021785c277..371d2e94e7 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -593,7 +593,8 @@ def test_loading_saved_vlm_img_demos_folder_non_dummy_goal(): ("naive_whole_traj", "per_scene_cot"), ("not_a_real_prompt_type", "per_scene_cot"), ("naive_whole_traj", "not_a_real_prompt_type"), - ("options_labels_whole_traj", "img_option_diffs")]) + ("options_labels_whole_traj", "img_option_diffs"), + ("options_labels_whole_traj", "img_option_diffs_label_history")]) def test_loading_saved_vlm_img_demos_folder_dummy_goal( atom_proposal_prompt_type, atom_labelling_prompt_type): """Test loading a dataset from img demo files.""" From 10b442c2cb43e4e2874c3ef0577016ab278513e2 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Mon, 3 Jun 2024 15:26:06 -0400 Subject: [PATCH 09/38] Ask vlm to describe changes in the scene before labeling predicates (#1662) * Initial commit. * Keep only the prompt change, and not the before/after text on the before/after images. * Delete unused code. * Remove note that the images are labeled with before/after, since we're not doing that annotation of the images in this PR. --- predicators/datasets/generate_atom_trajs_with_vlm.py | 3 ++- .../atom_labelling/img_option_diffs_label_history.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index 31311478d6..372c491c99 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -130,8 +130,9 @@ def _generate_prompt_for_scene_labelling( imgs_timestep[0] for imgs_timestep in traj.imgs[i - 1:i + 1] ] curr_prompt += "\n\nSkill executed between states: " - curr_prompt += traj.actions[i - 1].name + str( + skill_name = traj.actions[i - 1].name + str( traj.actions[i - 1].objects) + curr_prompt += skill_name if CFG.grammar_search_vlm_atom_label_prompt_type == \ "img_option_diffs_label_history": diff --git a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt index 98a17aa5d3..aaef54b9b7 100644 --- a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt +++ b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt @@ -1,3 +1,3 @@ -You are a vision system for a robot. You are provided with two images corresponding to the states before and after a particular skill is executed. You are given a list of predicates below, and you are given the values of these predicates in the first scene, before the skill is executed. Your job is to output the values of the following predicates in only the final scene. Pay careful attention to the changes between the two images to figure out which predicates change and which predicates do not change. For the predicates that change, list these separately at the end of your response. Note that in some scenes, there might be no changes. Output each predicate value as a bulleted list with each predicate and value on a different line. For each output value, provide an explanation as to why you labelled this predicate as having this particular value. Use the format: : . . +You are a vision system for a robot. You are provided with two images corresponding to the states before and after a particular skill is executed. You are given a list of predicates below, and you are given the values of these predicates in the image before the skill is executed. Your job is to output the values of the following predicates in the image after the skill is executed. Pay careful attention to the changes between the two images to figure out which predicates change and which predicates do not change. For the predicates that change, list these separately at the end of your response. Note that in some scenes, there might be no changes. First, output a description of what changes happen between the before and after images. Next, output each predicate value in the after image as a bulleted list with each predicate and value on a different line. For each predicate value, provide an explanation as to why you labelled this predicate as having this particular value. Use the format: : . . Predicates: \ No newline at end of file From 2e0a2286de8ec484dc275e0119f4047f316c7296 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Wed, 5 Jun 2024 11:54:51 -0400 Subject: [PATCH 10/38] Allow different task goals for demonstrator vs agent (#1663) * Initial commit. * Get test time different goal for agent vs demonstrator to work. * Get more checks to pass. * Get more tests to pass. * Remove unnecessary changes. * Add tests for more coverage. * Run autoformatter. * Fix test. --- predicators/envs/burger.py | 31 +++++++++++++++++-------- predicators/main.py | 16 ++++++++++--- predicators/settings.py | 5 ++++ predicators/structs.py | 47 +++++++++++++++++++++++++++++++++++++- predicators/utils.py | 24 +++++++++---------- tests/test_structs.py | 33 ++++++++++++++++++++++++-- tests/test_utils.py | 12 ++++++++-- 7 files changed, 138 insertions(+), 30 deletions(-) diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index 8c3581e977..37dc163062 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -176,14 +176,24 @@ def _get_tasks(self, num: int, hidden_state[bottom_bun] = {"is_held": 0.0} goal = { + # GroundAtom(self._On, [patty, bottom_bun]), + # GroundAtom(self._On, [cheese, patty]), + # GroundAtom(self._On, [tomato, cheese]), + # GroundAtom(self._On, [top_bun, tomato]), + # GroundAtom(self._IsCooked, [patty]), + # GroundAtom(self._IsSliced, [tomato]), + # GroundAtom(self._GoalHack, [bottom_bun, patty, cheese, tomato, + # top_bun]) GroundAtom(self._On, [patty, bottom_bun]), GroundAtom(self._On, [cheese, patty]), - GroundAtom(self._On, [tomato, cheese]), - GroundAtom(self._On, [top_bun, tomato]), GroundAtom(self._IsCooked, [patty]), - GroundAtom(self._IsSliced, [tomato]), - # GroundAtom(self._GoalHack, [bottom_bun, patty, cheese, tomato, - # top_bun]) + } + + alt_goal = { + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [cheese, patty]), + GroundAtom(self._GoalHack, + [bottom_bun, patty, cheese, tomato, top_bun]) } for _ in range(num): @@ -196,7 +206,7 @@ def _get_tasks(self, num: int, state, DefaultEnvironmentTask) # Recall that a EnvironmentTask consists of an Observation and a # GoalDescription, both of whose types are Any. - tasks.append(EnvironmentTask(state, goal)) + tasks.append(EnvironmentTask(state, goal, alt_goal_desc=alt_goal)) return tasks @@ -297,14 +307,15 @@ def _Clear_holds(self, state: State, objects: Sequence[Object]) -> bool: return True def _GoalHack_holds(self, state: State, objects: Sequence[Object]) -> bool: - bottom, patty, cheese, tomato, top = objects + # bottom, patty, cheese, tomato, top = objects + bottom, patty, cheese, _, _ = objects atoms = [ self._On_holds(state, [patty, bottom]), self._On_holds(state, [cheese, patty]), - self._On_holds(state, [tomato, cheese]), - self._On_holds(state, [top, tomato]), + # self._On_holds(state, [tomato, cheese]), + # self._On_holds(state, [top, tomato]), self._IsCooked_holds(state, [patty]), - self._IsSliced_holds(state, [tomato]) + # self._IsSliced_holds(state, [tomato]) ] return all(atoms) diff --git a/predicators/main.py b/predicators/main.py index ce1a474181..7b3cd4657c 100644 --- a/predicators/main.py +++ b/predicators/main.py @@ -112,6 +112,14 @@ def main() -> None: stripped_train_tasks = [ utils.strip_task(task, preds) for task in train_tasks ] + # If the goals of the tasks that the approaches solve need to be described + # using predicates that differ from those in the goals of the tasks that the + # demonstrator solves, then replace those predicates accordingly. This is + # used in VLM predicate invention where we want to invent certain goal + # predicates that the demonstrator needed to solve the task. + approach_train_tasks = [ + task.replace_goal_with_alt_goal() for task in stripped_train_tasks + ] if CFG.option_learner == "no_learning": # If we are not doing option learning, pass in all the environment's # oracle options. @@ -124,7 +132,7 @@ def main() -> None: if CFG.approach_wrapper: approach_name = f"{CFG.approach_wrapper}[{approach_name}]" approach = create_approach(approach_name, preds, options, env.types, - env.action_space, stripped_train_tasks) + env.action_space, approach_train_tasks) if approach.is_learning_based: # Create the offline dataset. Note that this needs to be done using # the non-stripped train tasks because dataset generation may need @@ -136,7 +144,7 @@ def main() -> None: execution_monitor = create_execution_monitor(CFG.execution_monitor) cogman = CogMan(approach, perceiver, execution_monitor) # Run the full pipeline. - _run_pipeline(env, cogman, stripped_train_tasks, offline_dataset) + _run_pipeline(env, cogman, approach_train_tasks, offline_dataset) script_time = time.perf_counter() - script_start logging.info(f"\n\nMain script terminated in {script_time:.5f} seconds") @@ -309,7 +317,9 @@ def _generate_interaction_results( def _run_testing(env: BaseEnv, cogman: CogMan) -> Metrics: - test_tasks = env.get_test_tasks() + test_tasks = [ + task.replace_goal_with_alt_goal() for task in env.get_test_tasks() + ] num_found_policy = 0 num_solved = 0 cogman.reset_metrics() diff --git a/predicators/settings.py b/predicators/settings.py index 9b5ad95d4f..2091cddddb 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -46,6 +46,11 @@ class GlobalSettings: # your call to utils.reset_config(). render_state_dpi = 150 approach_wrapper = None + # Normally, excluding goal predicates does not make sense, because then + # there is no goal for the agent to plan towards. This is intended to be + # used by VLM predicate invention, where we want to invent goal predicates + # and different task goals are provided to the agent and the demonstrator. + allow_exclude_goal_predicates = False # cover_multistep_options env parameters cover_multistep_action_limits = [-np.inf, np.inf] diff --git a/predicators/structs.py b/predicators/structs.py index 889905793d..b77f2ce353 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -430,6 +430,12 @@ class Task: """Struct defining a task, which is an initial state and goal.""" init: State goal: Set[GroundAtom] + # Sometimes we want the task presented to the agent to have goals described + # in terms of predicates that are different than those describing the goal + # of the task presented to the demonstrator. In these cases, we will store + # an "alternative goal" in this field and replace the goal with the + # alternative goal before giving the task to the agent. + alt_goal: Optional[Set[GroundAtom]] = field(default_factory=set) def __post_init__(self) -> None: # Verify types. @@ -440,6 +446,16 @@ def goal_holds(self, state: State) -> bool: """Return whether the goal of this task holds in the given state.""" return all(goal_atom.holds(state) for goal_atom in self.goal) + def replace_goal_with_alt_goal(self) -> Task: + """Return a Task with the goal replaced with the alternative goal if it + exists.""" + # We may not want the agent to access the goal predicates given to the + # demonstrator. To prevent leakage of this information, we discard the + # original goal. + if self.alt_goal: + return Task(self.init, goal=self.alt_goal) + return self + DefaultTask = Task(DefaultState, set()) @@ -456,11 +472,28 @@ class EnvironmentTask: """ init_obs: Observation goal_description: GoalDescription + # See Task._alt_goal for the reason for this field. + alt_goal_desc: Optional[GoalDescription] = field(default=None) @cached_property def task(self) -> Task: """Convenience method for environment tasks that are fully observed.""" - return Task(self.init, self.goal) + # If the environment task's goal is replaced with the alternative goal + # before turning the environment task into a task, or no alternative + # goal exists, then there's nothing particular to set the task's + # alt_goal field to. + if self.alt_goal_desc is None: + return Task(self.init, self.goal) + # If we turn the environment task into a task before replacing the goal + # with the alternative goal, we have to set the task's alt_goal field + # accordingly to leave open the possibility of doing that replacement + # later. + # Assumption: we currently assume the alternative goal description is + # always a set of ground atoms. + assert isinstance(self.alt_goal_desc, set) + for atom in self.alt_goal_desc: + assert isinstance(atom, GroundAtom) + return Task(self.init, self.goal, alt_goal=self.alt_goal_desc) @cached_property def init(self) -> State: @@ -476,6 +509,18 @@ def goal(self) -> Set[GroundAtom]: next(iter(self.goal_description)), GroundAtom) return self.goal_description + def replace_goal_with_alt_goal(self) -> EnvironmentTask: + """Return an EnvironmentTask with the goal description replaced with + the alternative goal description if it exists. + + See Task.replace_goal_with_alt_goal for the reason for this + function. + """ + if self.alt_goal_desc is not None: + return EnvironmentTask(self.init_obs, + goal_description=self.alt_goal_desc) + return self + DefaultEnvironmentTask = EnvironmentTask(DefaultState, set()) diff --git a/predicators/utils.py b/predicators/utils.py index b34ead4ac6..bcbd7d91e6 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -2199,19 +2199,17 @@ def _stripped_classifier(state: State, objects: Sequence[Object]) -> bool: def strip_task(task: Task, included_predicates: Set[Predicate]) -> Task: - """Create a new task where any excluded predicates have their classifiers - removed.""" + """Create a new task where any excluded goal predicates have their + classifiers removed.""" stripped_goal: Set[GroundAtom] = set() for atom in task.goal: - # The atom's goal is known. if atom.predicate in included_predicates: stripped_goal.add(atom) continue - # The atom's goal is unknown. stripped_pred = strip_predicate(atom.predicate) stripped_atom = GroundAtom(stripped_pred, atom.objects) stripped_goal.add(stripped_atom) - return Task(task.init, stripped_goal) + return Task(task.init, stripped_goal, alt_goal=task.alt_goal) def create_vlm_predicate( @@ -3500,7 +3498,11 @@ def parse_config_excluded_predicates( for pred in env.predicates if pred.name not in excluded_names } if CFG.offline_data_method != "demo+ground_atoms": - assert env.goal_predicates.issubset(included), \ + if CFG.allow_exclude_goal_predicates: + if not env.goal_predicates.issubset(included): + logging.info("Note: excluding goal predicates!") + else: + assert env.goal_predicates.issubset(included), \ "Can't exclude a goal predicate!" else: excluded_names = set() @@ -3825,12 +3827,10 @@ def add_text_to_draw_img( ) # Slightly larger than text background_size = (text_width + 10, text_height + 10) # Draw the background rectangle - draw.rectangle([ - background_position, - (background_position[0] + background_size[0], - background_position[1] + background_size[1]) - ], - fill="black") + draw.rectangle( + (background_position, (background_position[0] + background_size[0], + background_position[1] + background_size[1])), + fill="black") # Add the text to the image draw.text(position, text, fill="red", font=font) return draw diff --git a/tests/test_structs.py b/tests/test_structs.py index 37c977243d..e1181d000b 100644 --- a/tests/test_structs.py +++ b/tests/test_structs.py @@ -6,8 +6,8 @@ from predicators import utils from predicators.structs import NSRT, PNAD, Action, DefaultState, \ - DemonstrationQuery, DummyOption, GroundAtom, GroundMacro, \ - InteractionRequest, InteractionResult, LDLRule, LiftedAtom, \ + DemonstrationQuery, DummyOption, EnvironmentTask, GroundAtom, \ + GroundMacro, InteractionRequest, InteractionResult, LDLRule, LiftedAtom, \ LiftedDecisionList, LowLevelTrajectory, Macro, Object, \ ParameterizedOption, Predicate, Query, Segment, State, STRIPSOperator, \ Task, Type, Variable, _Atom, _GroundNSRT, _GroundSTRIPSOperator, _Option @@ -300,6 +300,35 @@ def test_task(state): assert task2.init.allclose(state) assert task2.goal == goal2 assert not task2.goal_holds(task.init) + # Test replacing goal with alternative goal. + pred3 = Predicate("AlternativeOn", [cup_type, plate_type], + lambda s, o: True) + goal3 = {pred3([cup, plate])} + task3 = Task(state, goal=goal, alt_goal=goal3) + alt_task = task3.replace_goal_with_alt_goal() + assert alt_task.goal == goal3 + + +def test_environment_task(state): + """Tests for EnvironmentTask class.""" + # Test replacing goal with alternative goal. + cup_type = Type("cup_type", ["feat1"]) + cup = cup_type("cup") + plate_type = Type("plate_type", ["feat1"]) + plate = plate_type("plate") + pred = Predicate("On", [cup_type, plate_type], lambda s, o: True) + pred2 = Predicate("AlternativeOn", [cup_type, plate_type], + lambda s, o: True) + goal = {pred([cup, plate])} + alt_goal = {pred2([cup, plate])} + env_task = EnvironmentTask(state, + goal_description=goal, + alt_goal_desc=alt_goal) + task = env_task.task + assert task.alt_goal == alt_goal + alt_env_task = env_task.replace_goal_with_alt_goal() + assert alt_env_task.goal_description == alt_goal + assert alt_env_task.alt_goal_desc is None def test_option(state): diff --git a/tests/test_utils.py b/tests/test_utils.py index 1c511a346a..7fa10b9cb3 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1028,7 +1028,7 @@ def test_strip_task(): """Test for strip_task().""" env = CoverEnv() Covers, Holding = _get_predicates_by_names("cover", ["Covers", "Holding"]) - task = env.get_train_tasks()[0] + task = env.get_train_tasks()[0].task block0, _, _, target0, _ = list(task.init) # Goal is Covers(block0, target0) assert len(task.goal) == 1 @@ -3236,13 +3236,21 @@ def test_parse_config_excluded_predicates(): "HandEmpty", "Holding", "IsBlock", "IsTarget" ] assert sorted(p.name for p in excluded) == ["Covers"] - # Cannot exclude goal predicates otherwise.. + # Cannot exclude goal predicates. utils.reset_config({ "offline_data_method": "demo", "excluded_predicates": "Covers", }) with pytest.raises(AssertionError): utils.parse_config_excluded_predicates(env) + # Can exclude goal predicates if allowed per the settings. + utils.reset_config({ + "offline_data_method": "demo", + "excluded_predicates": "Covers", + "allow_exclude_goal_predicates": True + }) + included, excluded = utils.parse_config_excluded_predicates(env) + assert [p.name for p in excluded] == ["Covers"] def test_null_sampler(): From 161f250a486a86842a46d298143a055f1c414b62 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Thu, 6 Jun 2024 16:28:08 -0400 Subject: [PATCH 11/38] Kitchen init state randomization (#1664) * init changes to start hacking on things! * steady progress * todo: just get randomization to work along burner axis. * works! * remove unnec change * ready to go --- predicators/envs/kitchen.py | 17 ++++++++++++++--- .../ground_truth_models/kitchen/nsrts.py | 4 +--- predicators/settings.py | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index e9806a040e..bcf6547224 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -40,6 +40,10 @@ } _TRACKED_BODIES = ["Burner 1", "Burner 2", "Burner 3", "Burner 4"] +KETTLE_ON_BURNER1_POS = [0.169, 0.35, 1.626] +KETTLE_ON_BURNER2_POS = [-0.269, 0.35, 1.626] +KETTLE_ON_BURNER3_POS = [0.169, 0.65, 1.626] +KETTLE_ON_BURNER4_POS = [-0.269, 0.65, 1.626] class KitchenEnv(BaseEnv): @@ -86,9 +90,9 @@ class KitchenEnv(BaseEnv): at_pre_pushontop_x_atol = 1.0 # other tolerance for AtPrePushOnTop obj_name_to_pre_push_dpos = { - ("kettle", "on"): (-0.05, -0.3, -0.12), + ("kettle", "on"): (-0.05, -0.25, 0.00), ("kettle", "off"): (0.0, 0.0, 0.08), - ("knob4", "on"): (-0.1, -0.10, 0.05), + ("knob4", "on"): (-0.1, -0.12, 0.05), ("knob4", "off"): (0.05, -0.12, -0.05), ("light", "on"): (0.1, -0.05, -0.05), ("light", "off"): (-0.1, -0.05, -0.05), @@ -105,7 +109,7 @@ class KitchenEnv(BaseEnv): def __init__(self, use_gui: bool = True) -> None: super().__init__(use_gui) assert _MJKITCHEN_IMPORTED, "Failed to import kitchen gym env. \ -Install from https://github.com/SiddarGu/Gymnasium-Robotics.git. \ +Install from https://github.com/NishanthJKumar/Gymnasium-Robotics. \ BE SURE TO INSTALL FROM GITHUB SOURCE THOUGH; do not blindly install as the \ README of that repo suggests!" @@ -405,6 +409,13 @@ def _get_tasks(self, num: int, def _reset_initial_state_from_seed(self, seed: int) -> Observation: self._gym_env.reset(seed=seed) + if CFG.kitchen_randomize_init_state: + rng = np.random.default_rng(seed) + # For now, we only randomize the state such that the kettle + # is anywhere between burners 2 and 4. Later, we might add + # even more variation. + kettle_coords = (-0.269, rng.uniform(0.4, 0.55), 1.626) + self._gym_env.set_body_position("kettle", kettle_coords) return { "state_info": self.get_object_centric_state_info(), "obs_images": self.render() diff --git a/predicators/ground_truth_models/kitchen/nsrts.py b/predicators/ground_truth_models/kitchen/nsrts.py index 94b58dcdc8..66acef622a 100644 --- a/predicators/ground_truth_models/kitchen/nsrts.py +++ b/predicators/ground_truth_models/kitchen/nsrts.py @@ -232,7 +232,6 @@ def move_and_push_kettle_sampler(state: State, goal: Set[GroundAtom], preconditions = { LiftedAtom(NotOnTop, [kettle, surface_to]), LiftedAtom(BurnerAhead, [surface_to, surface_from]), - LiftedAtom(OnTop, [kettle, surface_from]), } add_effects = {LiftedAtom(OnTop, [kettle, surface_to])} delete_effects = {LiftedAtom(NotOnTop, [kettle, surface_to])} @@ -277,7 +276,6 @@ def move_and_push_kettle_sampler(state: State, goal: Set[GroundAtom], preconditions = { LiftedAtom(NotOnTop, [kettle, surface_to]), LiftedAtom(BurnerAhead, [surface_to, surface_from]), - LiftedAtom(OnTop, [kettle, surface_from]), LiftedAtom(TurnedOn, [knob]), LiftedAtom(KnobAndBurnerLinked, [knob, surface_to]) } @@ -287,7 +285,7 @@ def move_and_push_kettle_sampler(state: State, goal: Set[GroundAtom], } delete_effects = {LiftedAtom(NotOnTop, [kettle, surface_to])} ignore_effects = { - AtPreTurnOn, AtPrePushOnTop, AtPreTurnOff, AtPrePullKettle + AtPreTurnOn, AtPrePushOnTop, AtPreTurnOff, AtPrePullKettle, OnTop } option = PushKettleOntoBurner option_vars = [gripper, kettle, surface_to] diff --git a/predicators/settings.py b/predicators/settings.py index 2091cddddb..be81264d02 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -329,6 +329,7 @@ class GlobalSettings: kitchen_goals = "all" kitchen_render_set_of_marks = False kitchen_use_combo_move_nsrts = False + kitchen_randomize_init_state = False # sticky table env parameters sticky_table_num_tables = 5 From 3f9af164e9e9d674c02ac7ffbaef381fd7283eec Mon Sep 17 00:00:00 2001 From: Alicia Li <102700848+matrixbalto@users.noreply.github.com> Date: Tue, 11 Jun 2024 18:23:20 -0400 Subject: [PATCH 12/38] Created rl_bridge_approach and rendering for grid_row_door (#1665) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * adding rl_bridge_approach * type check * minor fixes * fix test * small fixes * small formatting change * more fixes * cleaned up rl_bridge * formatting * fixed comments --------- Co-authored-by: “matrixbalto” <“ilfangliu@gmail.com”> Co-authored-by: Nishanth Kumar --- .../approaches/bridge_policy_approach.py | 154 +++++++++++++++++- predicators/approaches/maple_q_approach.py | 23 ++- predicators/envs/grid_row.py | 77 ++++++++- predicators/ml_models.py | 27 ++- predicators/settings.py | 4 + .../approaches/test_bridge_policy_approach.py | 54 +++++- tests/approaches/test_maple_q_approach.py | 1 + tests/envs/test_grid_row.py | 20 ++- tests/test_ml_models.py | 6 +- 9 files changed, 338 insertions(+), 28 deletions(-) diff --git a/predicators/approaches/bridge_policy_approach.py b/predicators/approaches/bridge_policy_approach.py index 46810f9110..09f06e9ec9 100644 --- a/predicators/approaches/bridge_policy_approach.py +++ b/predicators/approaches/bridge_policy_approach.py @@ -48,6 +48,7 @@ from predicators import utils from predicators.approaches import ApproachFailure, ApproachTimeout +from predicators.approaches.maple_q_approach import MapleQApproach from predicators.approaches.oracle_approach import OracleApproach from predicators.bridge_policies import BridgePolicyDone, create_bridge_policy from predicators.nsrt_learning.segmentation import segment_trajectory @@ -55,8 +56,8 @@ from predicators.settings import CFG from predicators.structs import NSRT, Action, BridgeDataset, DefaultState, \ DemonstrationQuery, DemonstrationResponse, InteractionRequest, \ - InteractionResult, ParameterizedOption, Predicate, Query, State, Task, \ - Type, _Option + InteractionResult, LowLevelTrajectory, ParameterizedOption, Predicate, \ + Query, State, Task, Type, _GroundNSRT, _Option from predicators.utils import OptionExecutionFailure @@ -346,3 +347,152 @@ def learn_from_interaction_results( )) return self._bridge_policy.learn_from_demos(self._bridge_dataset) + + +class RLBridgePolicyApproach(BridgePolicyApproach): + """A simulator-free bilevel planning approach that uses a Deep RL (Maple Q) + bridge policy.""" + + def __init__(self, + initial_predicates: Set[Predicate], + initial_options: Set[ParameterizedOption], + types: Set[Type], + action_space: Box, + train_tasks: List[Task], + task_planning_heuristic: str = "default", + max_skeletons_optimized: int = -1) -> None: + super().__init__(initial_predicates, initial_options, types, + action_space, train_tasks, task_planning_heuristic, + max_skeletons_optimized) + self._maple_initialized = False + self._trajs: List[LowLevelTrajectory] = [] + self.mapleq=MapleQApproach(self._get_current_predicates(), \ + self._initial_options, self._types, \ + self._action_space, self._train_tasks) + + @classmethod + def get_name(cls) -> str: + return "rl_bridge_policy" + + @property + def is_learning_based(self) -> bool: + return True + + def _init_nsrts(self) -> None: + """Initializing nsrts for MAPLE Q.""" + nsrts = self._get_current_nsrts() + predicates = self._get_current_predicates() + all_ground_nsrts: Set[_GroundNSRT] = set() + if CFG.sesame_grounder == "naive": + for nsrt in nsrts: + all_objects = {o for t in self._train_tasks for o in t.init} + all_ground_nsrts.update( + utils.all_ground_nsrts(nsrt, all_objects)) + elif CFG.sesame_grounder == "fd_translator": # pragma: no cover + all_objects = set() + for t in self.mapleq._train_tasks: # pylint: disable=protected-access + curr_task_objects = set(t.init) + curr_task_types = {o.type for o in t.init} + curr_init_atoms = utils.abstract(t.init, predicates) + all_ground_nsrts.update( + utils.all_ground_nsrts_fd_translator( + nsrts, curr_task_objects, predicates, curr_task_types, + curr_init_atoms, t.goal)) + all_objects.update(curr_task_objects) + else: # pragma: no cover + raise ValueError( + f"Unrecognized sesame_grounder: {CFG.sesame_grounder}") + goals = [t.goal for t in self.mapleq._train_tasks] # pylint: disable=protected-access + self.mapleq._q_function.set_grounding( # pylint: disable=protected-access + all_objects, goals, all_ground_nsrts) + + def _solve(self, + task: Task, + timeout: int, + train_or_test: str = "test") -> Callable[[State], Action]: + if not self._maple_initialized: + self.mapleq = MapleQApproach(self._get_current_predicates(), + self._initial_options, self._types, + self._action_space, self._train_tasks) + self._maple_initialized = True + self._init_nsrts() + + # Start by planning. Note that we cannot start with the bridge policy + # because the bridge policy takes as input the last failed NSRT. + current_control = "planner" + option_policy = self._get_option_policy_by_planning(task, timeout) + current_policy = utils.option_policy_to_policy( + option_policy, + max_option_steps=CFG.max_num_steps_option_rollout, + raise_error_on_repeated_state=True, + ) + all_failed_options: List[_Option] = [] + + # Prevent infinite loops by detecting if the bridge policy is called + # twice with the same state. + last_bridge_policy_state = DefaultState + + def _policy(s: State) -> Action: + nonlocal current_control, current_policy, last_bridge_policy_state + + # Normal execution. Either keep executing the current option, or + # switch to the next option if it has terminated. + try: + action = current_policy(s) + return action + except OptionExecutionFailure as e: + failed_option = e.info["last_failed_option"] + if failed_option is not None: + all_failed_options.append(failed_option) + + # Switch control from planner to bridge. + assert current_control == "planner" + current_control = "bridge" + + current_policy = self.mapleq._solve( # pylint: disable=protected-access + task, timeout, train_or_test) + action = current_policy(s) + return action + + return _policy + + def _create_interaction_request(self, + train_task_idx: int) -> InteractionRequest: + task = self._train_tasks[train_task_idx] + policy = self._solve(task, timeout=CFG.timeout, train_or_test="train") + + reached_stuck_state = False + all_failed_options = None + + def _act_policy(s: State) -> Action: + nonlocal reached_stuck_state, all_failed_options + return policy(s) + + def _termination_fn(s: State) -> bool: + return task.goal_holds(s) + + # The request's acting policy is from mapleq + # The resulting trajectory is from maple q's sampling + request = InteractionRequest(train_task_idx, _act_policy, + lambda s: None, _termination_fn) + return request + + def learn_from_interaction_results( + self, results: Sequence[InteractionResult]) -> None: + # Turn state action pairs from results into trajectories + # If we haven't collected any new results on this cycle, skip learning + # for efficiency. + if not results: + return None + all_states = [] + all_actions = [] + + for result in results: + new_traj = LowLevelTrajectory(result.states, result.actions) + self._trajs.append(new_traj) + all_states.extend(result.states) + all_actions.extend(result.actions) + + self.mapleq.get_interaction_requests() + self.mapleq._learn_nsrts(self._trajs, 0, [] * len(self._trajs)) # pylint: disable=protected-access + return None diff --git a/predicators/approaches/maple_q_approach.py b/predicators/approaches/maple_q_approach.py index 44bd49b4d8..2a3b08835f 100644 --- a/predicators/approaches/maple_q_approach.py +++ b/predicators/approaches/maple_q_approach.py @@ -61,14 +61,19 @@ def __init__(self, initial_predicates: Set[Predicate], def get_name(cls) -> str: return "maple_q" - def _solve(self, task: Task, timeout: int) -> Callable[[State], Action]: + # pylint: disable=arguments-differ + def _solve(self, + task: Task, + timeout: int, + train_or_test: str = "") -> Callable[[State], Action]: def _option_policy(state: State) -> _Option: return self._q_function.get_option( state, task.goal, num_samples_per_ground_nsrt=CFG. - active_sampler_learning_num_samples) + active_sampler_learning_num_samples, + train_or_test=train_or_test) return utils.option_policy_to_policy( _option_policy, max_option_steps=CFG.max_num_steps_option_rollout) @@ -108,11 +113,15 @@ def _learn_nsrts(self, trajectories: List[LowLevelTrajectory], annotations: Optional[List[Any]]) -> None: # Start by learning NSRTs in the usual way. super()._learn_nsrts(trajectories, online_learning_cycle, annotations) - # Check the assumption that operators and options are 1:1. - # This is just an implementation convenience. - assert len({nsrt.option for nsrt in self._nsrts}) == len(self._nsrts) - for nsrt in self._nsrts: - assert nsrt.option_vars == nsrt.parameters + if CFG.approach == "active_sampler_learning": + # Check the assumption that operators and options are 1:1. + # This is just an implementation convenience. + assert len({ + nsrt.option # pragma: no cover. + for nsrt in self._nsrts + }) == len(self._nsrts) # pragma: no cover. + for nsrt in self._nsrts: # pragma: no cover. + assert nsrt.option_vars == nsrt.parameters # pragma: no cover. # On the first cycle, we need to register the ground NSRTs, goals, and # objects in the Q function so that it can define its inputs. if not online_learning_cycle: diff --git a/predicators/envs/grid_row.py b/predicators/envs/grid_row.py index 11ac2214a8..c2090b2ce7 100644 --- a/predicators/envs/grid_row.py +++ b/predicators/envs/grid_row.py @@ -3,6 +3,7 @@ from typing import List, Optional, Sequence, Set import matplotlib +import matplotlib.pyplot as plt import numpy as np from gym.spaces import Box @@ -179,6 +180,12 @@ def _Adjacent_holds(self, state: State, objects: Sequence[Object]) -> bool: class GridRowDoorEnv(GridRowEnv): """Simple variant on GridRow where there is also a door.""" + # Properties for rendering + cell_width = 1 + robot_width = 0.5 + robot_height = 0.75 + light_width = 0.25 + def __init__(self, use_gui: bool = True) -> None: super().__init__(use_gui) # type door with features ['x', and 'open'] @@ -193,6 +200,69 @@ def __init__(self, use_gui: bool = True) -> None: def get_name(cls) -> str: return "grid_row_door" + def render_state_plt( + self, + state: State, + task: EnvironmentTask, + action: Optional[Action] = None, + caption: Optional[str] = None) -> \ + matplotlib.figure.Figure: + fig, ax = plt.subplots(1, 1) + plt.xlim([0, len(self._cells)]) + plt.ylim([0, 1]) + + # Draw the cells. + for i in range(len(self._cells)): + rect = plt.Rectangle((i, 0), + self.cell_width, + self.cell_width, + edgecolor="gray", + facecolor="gray") + ax.add_patch(rect) + + # Draw light, door, and robot. + if self._LightOn_holds(state, (self._light, )): + light = plt.Rectangle( + (len(self._cells) - (self.cell_width + \ + self.light_width) / 2.0, + 1 - self.light_width), + self.light_width, + self.light_width, + edgecolor="yellow", + facecolor="yellow") + else: + light = plt.Rectangle( + (len(self._cells) - (self.cell_width + \ + self.light_width) / 2.0, + 1 - self.light_width), + self.light_width, + self.light_width, + edgecolor="white", + facecolor="white") + ax.add_patch(light) + door_pos = state.get(self._door, "x") + if state.get(self._door, "open"): + door = plt.Rectangle((door_pos - self.cell_width / 2.0, 0), + self.cell_width, + self.cell_width, + edgecolor="gray", + facecolor="gray") + else: + door = plt.Rectangle((door_pos - self.cell_width / 2.0, 0), + self.cell_width, + self.cell_width, + edgecolor="darkgoldenrod", + facecolor="darkgoldenrod") + ax.add_patch(door) + robot_pos = state.get(self._robot, "x") + robot = plt.Rectangle((robot_pos - self.robot_width / 2.0, 0), + self.robot_width, + self.robot_height, + edgecolor="red", + facecolor="red") + ax.add_patch(robot) + return fig + @property def predicates(self) -> Set[Predicate]: return { @@ -216,20 +286,21 @@ def _get_tasks(self, num: int, rng: np.random.Generator) -> List[EnvironmentTask]: # There is only one goal in this environment: to turn the light on. goal = {GroundAtom(self._LightOn, [self._light])} - # The only variation in the initial state is the light target level. tasks: List[EnvironmentTask] = [] while len(tasks) < num: state_dict = { self._robot: { "x": 0.5, }, + # Note: light level and door locations are fixed for now + # in order to maintain consistency across train and test self._light: { "x": len(self._cells) - 0.5, "level": 0.0, - "target": rng.uniform(0.5, 1.0), + "target": 0.75, }, self._door: { - "x": rng.choice(range(2, len(self._cells))) - 0.5, + "x": len(self._cells) // 2 + 0.5, "open": 0.0 } } diff --git a/predicators/ml_models.py b/predicators/ml_models.py index fecaabf767..2107a84999 100644 --- a/predicators/ml_models.py +++ b/predicators/ml_models.py @@ -1331,7 +1331,7 @@ def __init__(self, use_torch_gpu: bool = False, train_print_every: int = 1000, n_iter_no_change: int = 10000000, - discount: float = 0.99, + discount: float = 0.8, num_lookahead_samples: int = 5, replay_buffer_max_size: int = 1000000, replay_buffer_sample_with_replacement: bool = True) -> None: @@ -1354,6 +1354,12 @@ def __init__(self, self._num_ground_nsrts = 0 self._replay_buffer: Deque[MapleQData] = deque( maxlen=self._replay_buffer_max_size) + self._epsilon = CFG.active_sampler_learning_exploration_epsilon + self._min_epsilon = CFG.min_epsilon + self._use_epsilon_annealing = CFG.use_epsilon_annealing + self._ep_reduction = 10*(self._epsilon-self._min_epsilon) \ + /(CFG.num_online_learning_cycles*CFG.max_num_steps_interaction_request \ + *CFG.interactive_num_requests_per_cycle) def set_grounding(self, objects: Set[Object], goals: Collection[Set[GroundAtom]], @@ -1375,9 +1381,12 @@ def get_option(self, state: State, goal: Set[GroundAtom], num_samples_per_ground_nsrt: int, - epsilon: float = 0.0) -> _Option: + train_or_test: str = "test") -> _Option: """Get the best option under Q, epsilon-greedy.""" # Return a random option. + epsilon = self._epsilon + if train_or_test == "test": + epsilon = 0.0 if self._rng.uniform() < epsilon: options = self._sample_applicable_options_from_state( state, num_samples_per_applicable_nsrt=1) @@ -1391,8 +1400,16 @@ def get_option(self, self.predict_q_value(state, goal, option) for option in options ] idx = np.argmax(scores) + # Decay epsilon + if self._use_epsilon_annealing: + self.decay_epsilon() return options[idx] + def decay_epsilon(self) -> None: + """Decay epsilon for eps annealing.""" + self._epsilon = max(self._epsilon - self._ep_reduction, + self._min_epsilon) + def add_datum_to_replay_buffer(self, datum: MapleQData) -> None: """Add one datapoint to the replay buffer. @@ -1430,9 +1447,11 @@ def train_q_function(self) -> None: # We want to pick a total of num_lookahead_samples samples. while len(next_option_vecs) < self._num_lookahead_samples: # Sample 1 per NSRT until we reach the target number. - for option in self._sample_applicable_options_from_state( + for next_option in \ + self._sample_applicable_options_from_state( next_state): - next_option_vecs.append(self._vectorize_option(option)) + next_option_vecs.append( + self._vectorize_option(next_option)) for next_action_vec in next_option_vecs: x_hat = np.concatenate([ vectorized_next_state, vectorized_goal, next_action_vec diff --git a/predicators/settings.py b/predicators/settings.py index be81264d02..d0a77cdd30 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -578,6 +578,10 @@ class GlobalSettings: active_sampler_learning_replay_buffer_size = 1000000 active_sampler_learning_batch_size = 64 + # maple q function parameters + use_epsilon_annealing = True + min_epsilon = 0.05 + # skill competence model parameters skill_competence_model = "optimistic" skill_competence_model_num_em_iters = 3 diff --git a/tests/approaches/test_bridge_policy_approach.py b/tests/approaches/test_bridge_policy_approach.py index 39acebf35b..bc64f212ea 100644 --- a/tests/approaches/test_bridge_policy_approach.py +++ b/tests/approaches/test_bridge_policy_approach.py @@ -10,7 +10,8 @@ import predicators.teacher from predicators import utils from predicators.approaches import ApproachFailure, ApproachTimeout -from predicators.approaches.bridge_policy_approach import BridgePolicyApproach +from predicators.approaches.bridge_policy_approach import \ + BridgePolicyApproach, RLBridgePolicyApproach from predicators.bridge_policies import BridgePolicyDone from predicators.cogman import CogMan from predicators.envs import get_or_create_env @@ -233,3 +234,54 @@ def _mock_human_demonstratory_policy(*args, **kwargs): task.goal_holds, max_num_steps=CFG.horizon) assert task.goal_holds(traj.states[-1]) + + +def test_rl_bridge_policy_approach(): + """Tests for RLBridgePolicyApproach class.""" + # Test oracle bridge policy in grid_row_door. + args = { + "approach": "rl_bridge_policy", + "env": "grid_row_door", + "num_train_tasks": 1, + "num_test_tasks": 1, + "grid_row_num_cells": 3, + "strips_learner": "oracle", + "sampler_learner": "oracle", + "explorer": "maple_q", + "interactive_num_requests_per_cycle": 10, + "online_nsrt_learning_requests_per_cycle": 10, + "max_initial_demos": 0 + } + utils.reset_config(args) + env = get_or_create_env(CFG.env) + train_tasks = [t.task for t in env.get_train_tasks()] + approach = RLBridgePolicyApproach(env.predicates, + get_gt_options(env.get_name()), + env.types, env.action_space, train_tasks) + assert approach.get_name() == "rl_bridge_policy" + assert approach.is_learning_based + perceiver = create_perceiver("trivial") + exec_monitor = create_execution_monitor("trivial") + cogman = CogMan(approach, perceiver, exec_monitor) + num_online_transitions = 0 + total_query_cost = 0 + # Run online interaction once. + interaction_requests = cogman.get_interaction_requests() + interaction_results, query_cost = _generate_interaction_results( + cogman, env, teacher=None, requests=interaction_requests, cycle_num=0) + num_online_transitions += sum( + len(result.actions) for result in interaction_results) + total_query_cost += query_cost + # Learn from online interaction results, unless we are loading + # and not restarting learning. + if not CFG.load_approach or CFG.restart_learning: + cogman.learn_from_interaction_results(interaction_results) + # We should be adding more data to replay buffer + assert len(approach.mapleq._q_function._replay_buffer) > 0 # pylint: disable=protected-access + # Test that reward is positive for some trial + gets_reward = False + for (_, _, _, _, reward, _) in approach.mapleq._q_function._replay_buffer: # pylint: disable=protected-access + if reward > 0: + gets_reward = True + assert gets_reward + assert approach.learn_from_interaction_results([]) is None diff --git a/tests/approaches/test_maple_q_approach.py b/tests/approaches/test_maple_q_approach.py index 2200566f5d..17c2ed769b 100644 --- a/tests/approaches/test_maple_q_approach.py +++ b/tests/approaches/test_maple_q_approach.py @@ -51,6 +51,7 @@ def test_maple_q_approach(cover_num_blocks, cover_num_targets): approach = MapleQApproach(env.predicates, options, env.types, env.action_space, train_tasks) assert approach.is_learning_based + assert approach.get_name() == "maple_q" approach.learn_from_offline_dataset(Dataset([])) approach.load(online_learning_cycle=None) interaction_requests = approach.get_interaction_requests() diff --git a/tests/envs/test_grid_row.py b/tests/envs/test_grid_row.py index 19b1214a67..805d22ad4c 100644 --- a/tests/envs/test_grid_row.py +++ b/tests/envs/test_grid_row.py @@ -4,8 +4,10 @@ import pytest from predicators import utils -from predicators.envs.grid_row import GridRowDoorEnv, GridRowEnv +from predicators.envs import get_or_create_env +from predicators.envs.grid_row import GridRowEnv from predicators.ground_truth_models import get_gt_nsrts, get_gt_options +from predicators.settings import CFG def test_grid_row(): @@ -141,10 +143,10 @@ def test_grid_row_door(): utils.reset_config({ "env": "grid_row_door", "num_train_tasks": 1, - "num_test_tasks": 2, + "num_test_tasks": 1, "grid_row_num_cells": 10, }) - env = GridRowDoorEnv() + env = get_or_create_env(CFG.env) assert env.get_name() == "grid_row_door" for env_task in env.get_train_tasks(): task = env_task.task @@ -178,12 +180,9 @@ def test_grid_row_door(): env_train_tasks = env.get_train_tasks() assert len(env_train_tasks) == 1 env_test_tasks = env.get_test_tasks() - assert len(env_test_tasks) == 2 - env_task = env_test_tasks[1] - env.reset("test", 1) - with pytest.raises(NotImplementedError): - env.render(caption="Test") - + assert len(env_test_tasks) == 1 + env_task = env_test_tasks[0] + env.reset("test", 0) # Test NSRTs. MoveRobot, OpenDoor, TurnOffLight, TurnOnLight = sorted(nsrts) assert OpenDoor.name == "OpenDoor" @@ -219,6 +218,7 @@ def test_grid_row_door(): assert option.terminal(state) assert all(a.holds(state) for a in ground_nsrt.add_effects) assert not any(a.holds(state) for a in ground_nsrt.delete_effects) + assert isinstance(env.render_state(state, task), list) # Now repeatedly turn on the light until it succeeds. ground_nsrt = TurnOnLight.ground([robot, cell_order[-1], light]) for _ in range(100): @@ -230,6 +230,7 @@ def test_grid_row_door(): assert option.terminal(state) if all(a.holds(state) for a in ground_nsrt.add_effects): break + assert isinstance(env.render_state(state, task), list) assert all(a.holds(state) for a in ground_nsrt.add_effects) assert not any(a.holds(state) for a in ground_nsrt.delete_effects) # Now repeatedly turn off the light until it succeeds. @@ -243,5 +244,6 @@ def test_grid_row_door(): assert option.terminal(state) if all(a.holds(state) for a in ground_nsrt.add_effects): break + assert isinstance(env.render_state(state, task), list) assert all(a.holds(state) for a in ground_nsrt.add_effects) assert not any(a.holds(state) for a in ground_nsrt.delete_effects) diff --git a/tests/test_ml_models.py b/tests/test_ml_models.py index 7ea10d52de..4727a1e864 100644 --- a/tests/test_ml_models.py +++ b/tests/test_ml_models.py @@ -475,10 +475,12 @@ def test_maple_q_function(): # Test grounding. model.set_grounding(objects, [task.goal], ground_nsrts) # Test getting a random option. - sampled_option = model.get_option(task.init, task.goal, 1, epsilon=1.0) + sampled_option = model.get_option(task.init, task.goal, 1, \ + train_or_test="test") assert sampled_option.initiable(task.init) # Test getting a non-random option. - sampled_option = model.get_option(task.init, task.goal, 1, epsilon=0.0) + sampled_option = model.get_option(task.init, task.goal, 1, \ + train_or_test="test") assert sampled_option.initiable(task.init) # Test learning. data = (task.init, task.goal, option, task.init, 1.0, False) From 97b9b23e052f2a04492634270e769739ba6a7418 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Sun, 16 Jun 2024 21:46:32 -0400 Subject: [PATCH 13/38] Enable predicate invention with both geometric and VLM predicates (#1666) * Intial commit. * Get State.allclose to work with non-None simulator state. * Create a ground atom dataset with both geometric and VLM predicates. * Improve implementation for State.allclose when simulator state is not None. * Run autoformatter. * Get linter to pass. * Get more tests to pass. * Get more tests to pass. * Get test_main.py to run without issue. * Add test for geo+vlm grammar_search offline data method. * fix coverage --------- Co-authored-by: Nishanth Kumar --- .../approaches/bridge_policy_approach.py | 2 +- .../grammar_search_invention_approach.py | 15 +++- predicators/datasets/__init__.py | 12 ++- predicators/envs/base_env.py | 10 +++ predicators/envs/burger.py | 4 + predicators/main.py | 11 ++- predicators/settings.py | 3 + predicators/structs.py | 9 ++- predicators/utils.py | 30 ++++++- .../test_grammar_search_invention_approach.py | 40 ++++++++++ tests/envs/test_burger.py | 1 + tests/test_structs.py | 10 +++ tests/test_utils.py | 80 +++++++++++++++++-- 13 files changed, 209 insertions(+), 18 deletions(-) diff --git a/predicators/approaches/bridge_policy_approach.py b/predicators/approaches/bridge_policy_approach.py index 09f06e9ec9..cc44f463a1 100644 --- a/predicators/approaches/bridge_policy_approach.py +++ b/predicators/approaches/bridge_policy_approach.py @@ -288,7 +288,7 @@ def learn_from_interaction_results( states = [traj.states[0]] atoms = atom_traj else: - states = utils.segment_trajectory_to_state_sequence( + states = utils.segment_trajectory_to_start_end_state_sequence( segmented_traj) atoms = utils.segment_trajectory_to_atoms_sequence( segmented_traj) diff --git a/predicators/approaches/grammar_search_invention_approach.py b/predicators/approaches/grammar_search_invention_approach.py index cbcecbc0b0..0b6d0b6439 100644 --- a/predicators/approaches/grammar_search_invention_approach.py +++ b/predicators/approaches/grammar_search_invention_approach.py @@ -790,7 +790,7 @@ def __post_init__(self) -> None: for traj in self.dataset.trajectories: # The init_atoms and final_atoms are not used. seg_traj = segment_trajectory(traj, predicates=set()) - state_seq = utils.segment_trajectory_to_state_sequence( + state_seq = utils.segment_trajectory_to_start_end_state_sequence( # pylint:disable=line-too-long seg_traj) self._state_sequences.append(state_seq) @@ -996,7 +996,18 @@ def _parse_atom_dataset_from_annotated_dataset( return (atom_dataset, candidates) def learn_from_offline_dataset(self, dataset: Dataset) -> None: - if not CFG.offline_data_method in [ + if CFG.offline_data_method in [ + "geo_and_demo_with_vlm_imgs", "geo_and_demo+labelled_atoms", + "geo_and_saved_vlm_img_demos_folder" + ]: + atom_dataset_from_grammar, candidates_from_grammar = \ + self._generate_atom_dataset_via_grammar(dataset) + atom_dataset_from_vlm, candidates_from_vlm = \ + self._parse_atom_dataset_from_annotated_dataset(dataset) + atom_dataset = utils.merge_ground_atom_datasets( + atom_dataset_from_grammar, atom_dataset_from_vlm) + candidates = candidates_from_grammar | candidates_from_vlm + elif not CFG.offline_data_method in [ "demo+labelled_atoms", "saved_vlm_img_demos_folder", "demo_with_vlm_imgs" ]: diff --git a/predicators/datasets/__init__.py b/predicators/datasets/__init__.py index 657d5ee471..220259d737 100644 --- a/predicators/datasets/__init__.py +++ b/predicators/datasets/__init__.py @@ -45,7 +45,9 @@ def create_dataset(env: BaseEnv, train_tasks: List[Task], n = int(CFG.teacher_dataset_num_examples) assert n >= 1, "Must have at least 1 example of each predicate" return create_ground_atom_data(env, base_dataset, excluded_preds, n) - if CFG.offline_data_method == "demo_with_vlm_imgs": # pragma: no cover # pylint:disable=line-too-long + if CFG.offline_data_method in [ + "demo_with_vlm_imgs", "geo_and_demo_with_vlm_imgs" + ]: # pragma: no cover. # NOTE: this below method is tested separately; it's just that testing # it by calling the above function is painful because a VLM is # instantiated and called from inside this method, but when testing, @@ -71,10 +73,14 @@ def create_dataset(env: BaseEnv, train_tasks: List[Task], # a VLM. return create_ground_atom_data_from_generated_demos( demo_data, env, known_predicates, train_tasks) - if CFG.offline_data_method == "demo+labelled_atoms": + if CFG.offline_data_method in [ + "demo+labelled_atoms", "geo_and_demo+labelled_atoms" + ]: return create_ground_atom_data_from_labelled_txt( env, train_tasks, known_options) - if CFG.offline_data_method == "saved_vlm_img_demos_folder": # pragma: no cover # pylint:disable=line-too-long + if CFG.offline_data_method in [ + "saved_vlm_img_demos_folder", "geo_and_saved_vlm_img_demos_folder" + ]: # pragma: no cover. # NOTE: this below method is tested separately; it's just that testing # it by calling the above function is painful because a VLM is # instantiated and called from inside this method, but when testing, diff --git a/predicators/envs/base_env.py b/predicators/envs/base_env.py index bcd0994338..b9e3c31032 100644 --- a/predicators/envs/base_env.py +++ b/predicators/envs/base_env.py @@ -76,6 +76,16 @@ def goal_predicates(self) -> Set[Predicate]: """Get the subset of self.predicates that are used in goals.""" raise NotImplementedError("Override me!") + @property + def agent_goal_predicates(self) -> Set[Predicate]: + """Get the goal predicates that we want the agent to use, which may be + different than the ones the demonstrator uses. + + This is used when inventing VLM predicates. Unless overridden, + these are the same as the original goal predicates. + """ + return self.goal_predicates + @property @abc.abstractmethod def types(self) -> Set[Type]: diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index 37dc163062..61a70d9772 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -348,6 +348,10 @@ def goal_predicates(self) -> Set[Predicate]: return {self._On, self._IsCooked, self._IsSliced} # return {self._On, self._GoalHack} + @property + def agent_goal_predicates(self) -> Set[Predicate]: + return {self._On, self._GoalHack} + @property def action_space(self) -> Box: # dx (column), dy (row), direction, cut/cook, pick/place diff --git a/predicators/main.py b/predicators/main.py index 7b3cd4657c..4e4ad8265f 100644 --- a/predicators/main.py +++ b/predicators/main.py @@ -95,7 +95,16 @@ def main() -> None: # is often created during env __init__(). env.action_space.seed(CFG.seed) assert env.goal_predicates.issubset(env.predicates) - preds, _ = utils.parse_config_excluded_predicates(env) + included_preds, excluded_preds = utils.parse_config_excluded_predicates( + env) + # The known predicates are passed into the approach and into dataset + # creation. In some cases, like when inventing geometric and VLM predicates, + # we want to hide certain goal predicates from the agent by replacing them + # with agent-specific goal predicates that the environment defines. + # Note that inside dataset creation, the known predicates are only used to + # create a VLM dataset, so we can just overwrite the variable `preds`. + preds = utils.replace_goals_with_agent_specific_goals( + included_preds, excluded_preds, env) # Create the train tasks. env_train_tasks = env.get_train_tasks() # We assume that a train Task can be constructed from a EnvironmentTask. diff --git a/predicators/settings.py b/predicators/settings.py index d0a77cdd30..4a15f39a10 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -51,6 +51,9 @@ class GlobalSettings: # used by VLM predicate invention, where we want to invent goal predicates # and different task goals are provided to the agent and the demonstrator. allow_exclude_goal_predicates = False + # Normally, State.allclose() raises an error if the simulator state of + # either of its arguments is not None. + allow_state_allclose_comparison_despite_simulator_state = False # cover_multistep_options env parameters cover_multistep_action_limits = [-np.inf, np.inf] diff --git a/predicators/structs.py b/predicators/structs.py index b77f2ce353..cf703f2e3f 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -171,9 +171,12 @@ def allclose(self, other: State) -> bool: """Return whether this state is close enough to another one, i.e., its objects are the same, and the features are close.""" if self.simulator_state is not None or \ - other.simulator_state is not None: - raise NotImplementedError("Cannot use allclose when " - "simulator_state is not None.") + other.simulator_state is not None: + if not CFG.allow_state_allclose_comparison_despite_simulator_state: + raise NotImplementedError("Cannot use allclose when " + "simulator_state is not None.") + if self.simulator_state != other.simulator_state: + return False if not sorted(self.data) == sorted(other.data): return False for obj in self.data: diff --git a/predicators/utils.py b/predicators/utils.py index bcbd7d91e6..f503c8fc89 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -149,7 +149,7 @@ def count_branching_factor(strips_ops: List[STRIPSOperator], return total_branching_factor -def segment_trajectory_to_state_sequence( +def segment_trajectory_to_start_end_state_sequence( seg_traj: List[Segment]) -> List[State]: """Convert a trajectory of segments into a trajectory of states, made up of only the initial/final states of the segments. @@ -2715,6 +2715,24 @@ def save_ground_atom_dataset(ground_atom_dataset: List[GroundAtomTrajectory], pkl.dump(ground_atom_dataset_to_pkl, f) +def merge_ground_atom_datasets( + gad1: List[GroundAtomTrajectory], + gad2: List[GroundAtomTrajectory]) -> List[GroundAtomTrajectory]: + """Merges two ground atom datasets sharing the same underlying low-level + trajectory via the union of ground atoms at each state.""" + assert len(gad1) == len( + gad2), "Ground atom datasets must be of the same length to merge them." + merged_ground_atom_dataset = [] + for ground_atom_traj1, ground_atom_traj2 in zip(gad1, gad2): + ll_traj1, ga_list1 = ground_atom_traj1 + ll_traj2, ga_list2 = ground_atom_traj2 + assert ll_traj1 == ll_traj2, "Ground atom trajectories must share " \ + "the same low-level trajectory to be able to merge them." + merged_ga_list = [ga1 | ga2 for ga1, ga2 in zip(ga_list1, ga_list2)] + merged_ground_atom_dataset.append((ll_traj1, merged_ga_list)) + return merged_ground_atom_dataset + + def extract_preds_and_types( ops: Collection[NSRTOrSTRIPSOperator] ) -> Tuple[Dict[str, Predicate], Dict[str, Type]]: @@ -3511,6 +3529,16 @@ def parse_config_excluded_predicates( return included, excluded +def replace_goals_with_agent_specific_goals( + included_predicates: Set[Predicate], + excluded_predicates: Set[Predicate], env: BaseEnv) -> Set[Predicate]: + """Replace original goal predicates with agent-specific goal predicates if + the environment defines them.""" + preds = included_predicates - env.goal_predicates \ + | env.agent_goal_predicates - excluded_predicates + return preds + + def null_sampler(state: State, goal: Set[GroundAtom], rng: np.random.Generator, objs: Sequence[Object]) -> Array: """A sampler for an NSRT with no continuous parameters.""" diff --git a/tests/approaches/test_grammar_search_invention_approach.py b/tests/approaches/test_grammar_search_invention_approach.py index 1c1bdba500..140742b206 100644 --- a/tests/approaches/test_grammar_search_invention_approach.py +++ b/tests/approaches/test_grammar_search_invention_approach.py @@ -201,6 +201,46 @@ def test_invention_from_txt_file(): assert approach._get_current_predicates() == env.goal_predicates # pylint:disable=protected-access +def test_geo_and_vlm_invention(): + """Test constructing an atom dataset with both geo and vlm predicates.""" + utils.reset_config({ + "env": + "ice_tea_making", + "num_train_tasks": + 1, + "num_test_tasks": + 0, + "offline_data_method": + "geo_and_demo+labelled_atoms", + "data_dir": + "tests/datasets/mock_vlm_datasets", + "handmade_demo_filename": + "ice_tea_making__demo+labelled_atoms__manual__1.txt" + }) + env = IceTeaMakingEnv() + train_tasks = env.get_train_tasks() + predicates, _ = utils.parse_config_excluded_predicates(env) + loaded_dataset = create_dataset(env, train_tasks, + get_gt_options(env.get_name()), predicates) + approach = GrammarSearchInventionApproach(env.goal_predicates, + get_gt_options(env.get_name()), + env.types, env.action_space, + train_tasks) + approach.learn_from_offline_dataset(loaded_dataset) + # The ice_tea_making__demo+labelled_atoms__manual__1.txt happens to + # set all atoms to True at all timesteps, and so we expect predicate + # invention to not select any of the predicates (only select the goal) + # predicates. + # If you investigate the atom_dataset created inside + # learn_from_offline_dataset() you'll see some grammar-based predicates + # invented that are based on the DummyGoal, but they don't get selected. + # A better test would alter the dataset such that some grammar-based + # predicates actually get selected, so we can verify that geo + vlm + # predicate invention works more explicitly. + assert len(approach._get_current_predicates()) == 1 # pylint:disable=protected-access + assert approach._get_current_predicates() == env.goal_predicates # pylint:disable=protected-access + + def test_euclidean_grammar(): """Tests for the EuclideanGrammar.""" utils.reset_config({"env": "stick_button_move"}) diff --git a/tests/envs/test_burger.py b/tests/envs/test_burger.py index 4c45ffd35a..30f91aa949 100644 --- a/tests/envs/test_burger.py +++ b/tests/envs/test_burger.py @@ -32,6 +32,7 @@ def test_burger(): assert len(obj.type.feature_names) == len(task.init[obj]) assert len(env.predicates) == 12 assert len(env.goal_predicates) == 3 + assert len(env.agent_goal_predicates) == 2 assert env.get_name() == "burger" assert len(env.types) == 11 options = get_gt_options(env.get_name()) diff --git a/tests/test_structs.py b/tests/test_structs.py index e1181d000b..9dc2084b56 100644 --- a/tests/test_structs.py +++ b/tests/test_structs.py @@ -184,6 +184,16 @@ def test_state(): state_with_sim = State({}, "simulator_state") assert state_with_sim.simulator_state == "simulator_state" assert state.simulator_state is None + + # Can use allclose with non-None simulator_state if explicitly allowed via + # settings. + utils.reset_config( + {"allow_state_allclose_comparison_despite_simulator_state": "True"}) + state5 = state4.copy() + assert state4.allclose(state5) + state5.simulator_state = "not dummy" + assert not state4.allclose(state5) + return state diff --git a/tests/test_utils.py b/tests/test_utils.py index 7fa10b9cb3..e951f070a8 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -103,7 +103,7 @@ def test_count_positives_for_ops(max_groundings, exp_num_true, exp_num_false): def test_segment_trajectory_to_state_and_atoms_sequence(): - """Tests for segment_trajectory_to_state_sequence() and + """Tests for segment_trajectory_to_start_end_state_sequence() and segment_trajectory_to_atoms_sequence().""" # Set up the segments. cup_type = Type("cup_type", ["feat1"]) @@ -125,21 +125,23 @@ def test_segment_trajectory_to_state_and_atoms_sequence(): final_atoms = {not_on([cup, plate])} segment1 = Segment(traj1, init_atoms, final_atoms) segment2 = Segment(traj2, final_atoms, init_atoms) - # Test segment_trajectory_to_state_sequence(). - state_seq = utils.segment_trajectory_to_state_sequence([segment1]) + # Test segment_trajectory_to_start_end_state_sequence(). + state_seq = utils.segment_trajectory_to_start_end_state_sequence( + [segment1]) assert state_seq == [state0, state2] - state_seq = utils.segment_trajectory_to_state_sequence( + state_seq = utils.segment_trajectory_to_start_end_state_sequence( [segment1, segment2]) assert state_seq == [state0, state2, state0] - state_seq = utils.segment_trajectory_to_state_sequence( + state_seq = utils.segment_trajectory_to_start_end_state_sequence( [segment1, segment2, segment1, segment2]) assert state_seq == [state0, state2, state0, state2, state0] with pytest.raises(AssertionError): # Need at least one segment in the trajectory. - utils.segment_trajectory_to_state_sequence([]) + utils.segment_trajectory_to_start_end_state_sequence([]) with pytest.raises(AssertionError): # Segments don't chain together correctly. - utils.segment_trajectory_to_state_sequence([segment1, segment1]) + utils.segment_trajectory_to_start_end_state_sequence( + [segment1, segment1]) # Test segment_trajectory_to_atoms_sequence(). atoms_seq = utils.segment_trajectory_to_atoms_sequence([segment1]) assert atoms_seq == [init_atoms, final_atoms] @@ -1949,6 +1951,70 @@ def test_create_ground_atom_dataset(): assert ground_atom_dataset[0][1][1] == {GroundAtom(on, [cup1, plate1])} +def test_merge_ground_atom_datasets(): + """Tests for merge_ground_atom_datasets().""" + utils.reset_config({ + "env": "test_env", + }) + cup_type = Type("cup_type", ["feat1", "color"]) + plate_type = Type("plate_type", ["feat1"]) + on = Predicate("On", [cup_type, plate_type], + lambda s, o: s.get(o[0], "feat1") > s.get(o[1], "feat1")) + dark = Predicate("Dark", [cup_type], + lambda s, o: s.get(o[0], "color") > 0.5) + cup1 = cup_type("cup1") + cup2 = cup_type("cup2") + plate1 = plate_type("plate1") + plate2 = plate_type("plate2") + states = [ + State({ + cup1: np.array([0.5, 0.2]), + cup2: np.array([0.1, 0.6]), + plate1: np.array([1.0]), + plate2: np.array([1.2]) + }), + State({ + cup1: np.array([1.1, 0.2]), + cup2: np.array([0.1, 0.6]), + plate1: np.array([1.0]), + plate2: np.array([1.2]) + }), + State({ + cup1: np.array([1.1, 0.7]), + cup2: np.array([0.1, 0.6]), + plate1: np.array([1.0]), + plate2: np.array([1.2]) + }) + ] + actions = [ + Action(np.array([0.0]), DummyOption), + Action(np.array([0.0]), DummyOption) + ] + dataset = [LowLevelTrajectory(states, actions)] + gad1 = utils.create_ground_atom_dataset(dataset, {on}) + gad2 = utils.create_ground_atom_dataset(dataset, {dark}) + ground_atom_dataset = utils.merge_ground_atom_datasets(gad1, gad2) + assert len(ground_atom_dataset) == 1 + assert len(ground_atom_dataset[0]) == 2 + assert len(ground_atom_dataset[0][0].states) == len(states) + assert all(gs.allclose(s) for gs, s in \ + zip(ground_atom_dataset[0][0].states, states)) + assert len(ground_atom_dataset[0][0].actions) == len(actions) + assert all(ga == a + for ga, a in zip(ground_atom_dataset[0][0].actions, actions)) + assert len(ground_atom_dataset[0][1]) == len(states) == 3 + assert ground_atom_dataset[0][1][0] == {GroundAtom(dark, [cup2])} + assert ground_atom_dataset[0][1][1] == { + GroundAtom(dark, [cup2]), + GroundAtom(on, [cup1, plate1]) + } + assert ground_atom_dataset[0][1][2] == { + GroundAtom(dark, [cup2]), + GroundAtom(on, [cup1, plate1]), + GroundAtom(dark, [cup1]) + } + + def test_get_reachable_atoms(): """Tests for get_reachable_atoms().""" cup_type = Type("cup_type", ["feat1"]) From 00c42d6817f661604165a6f7d97dceb4ed3d55a9 Mon Sep 17 00:00:00 2001 From: Alicia Li <102700848+matrixbalto@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:35:05 -0400 Subject: [PATCH 14/38] Added CallPlanner action to RL_Bridge_Policy (#1670) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * callplanner * init nsrt * assertion * tab * minor fix * autoformat * fixes * small fix * minor change * more fixes * more fixes * comment --------- Co-authored-by: “matrixbalto” <“ilfangliu@gmail.com”> --- .../approaches/bridge_policy_approach.py | 173 +++++++++++++----- predicators/approaches/maple_q_approach.py | 4 +- predicators/explorers/maple_q_explorer.py | 4 +- predicators/ml_models.py | 2 + 4 files changed, 133 insertions(+), 50 deletions(-) diff --git a/predicators/approaches/bridge_policy_approach.py b/predicators/approaches/bridge_policy_approach.py index cc44f463a1..4a49f7a2b7 100644 --- a/predicators/approaches/bridge_policy_approach.py +++ b/predicators/approaches/bridge_policy_approach.py @@ -42,8 +42,9 @@ import logging import time -from typing import Callable, List, Optional, Sequence, Set +from typing import Callable, Dict, List, Optional, Sequence, Set +import numpy as np from gym.spaces import Box from predicators import utils @@ -54,11 +55,11 @@ from predicators.nsrt_learning.segmentation import segment_trajectory from predicators.option_model import _OptionModelBase from predicators.settings import CFG -from predicators.structs import NSRT, Action, BridgeDataset, DefaultState, \ - DemonstrationQuery, DemonstrationResponse, InteractionRequest, \ - InteractionResult, LowLevelTrajectory, ParameterizedOption, Predicate, \ - Query, State, Task, Type, _GroundNSRT, _Option -from predicators.utils import OptionExecutionFailure +from predicators.structs import NSRT, Action, Array, BridgeDataset, \ + DefaultState, DemonstrationQuery, DemonstrationResponse, \ + InteractionRequest, InteractionResult, LiftedAtom, LowLevelTrajectory, \ + Object, ParameterizedOption, Predicate, Query, State, Task, Type, \ + Variable, _GroundNSRT, _Option class BridgePolicyApproach(OracleApproach): @@ -129,7 +130,7 @@ def _policy(s: State) -> Action: except BridgePolicyDone: assert current_control == "bridge" failed_option = None # not used, but satisfy linting - except OptionExecutionFailure as e: + except utils.OptionExecutionFailure as e: failed_option = e.info["last_failed_option"] if failed_option is not None: all_failed_options.append(failed_option) @@ -180,7 +181,7 @@ def _policy(s: State) -> Action: ) try: return current_policy(s) - except OptionExecutionFailure as e: + except utils.OptionExecutionFailure as e: all_failed_options.append(e.info["last_failed_option"]) raise ApproachFailure( e.args[0], info={"all_failed_options": all_failed_options}) @@ -239,7 +240,7 @@ def _act_policy(s: State) -> Action: reached_stuck_state = True all_failed_options = e.info["all_failed_options"] # Approach failures not caught in interaction loop. - raise OptionExecutionFailure(e.args[0], e.info) + raise utils.OptionExecutionFailure(e.args[0], e.info) def _termination_fn(s: State) -> bool: return reached_stuck_state or task.goal_holds(s) @@ -365,10 +366,70 @@ def __init__(self, action_space, train_tasks, task_planning_heuristic, max_skeletons_optimized) self._maple_initialized = False + if task_planning_heuristic == "default": + task_planning_heuristic = CFG.sesame_task_planning_heuristic + self._task_planning_heuristic = task_planning_heuristic self._trajs: List[LowLevelTrajectory] = [] + self.CanPlan = Predicate("CanPlan", [], self._Can_plan) + self.CallPlanner = utils.SingletonParameterizedOption( + "CallPlanner", + types=None, + policy=self.call_planner_policy, + params_space=Box(low=np.array([]), high=np.array([]), shape=(0, )), + ) + initial_options.add(self.CallPlanner) + self._initial_options = initial_options self.mapleq=MapleQApproach(self._get_current_predicates(), \ self._initial_options, self._types, \ self._action_space, self._train_tasks) + self._current_control: Optional[str] = None + option_policy = self._get_option_policy_by_planning( + self._train_tasks[0], CFG.timeout) + self._current_policy = utils.option_policy_to_policy( + option_policy, + max_option_steps=CFG.max_num_steps_option_rollout, + raise_error_on_repeated_state=True, + ) + self._bridge_called_state = State(data={}) + self._policy_logs: List[Optional[str]] = [] + + def _Can_plan(self, state: State, _: Sequence[Object]) -> bool: + if (self.mapleq._q_function._vectorize_state(state) != # pylint: disable=protected-access + self.mapleq._q_function._vectorize_state( # pylint: disable=protected-access + self._bridge_called_state)).any(): # pylint: disable=protected-access + return True + return False + + def call_planner_policy(self, state: State, _: Dict, __: Sequence[Object], + ___: Array) -> Action: + """policy for CallPlanner option.""" + self._current_control = "planner" + # create a new task where the init state is our current state + current_task = Task(state, self._train_tasks[0].goal) + option_policy = self._get_option_policy_by_planning( + current_task, CFG.timeout) + self._current_policy = utils.option_policy_to_policy( + option_policy, + max_option_steps=CFG.max_num_steps_option_rollout, + raise_error_on_repeated_state=True, + ) + + return Action(np.array([0.0, 0.0, 0.0], dtype=np.float32)) + + def call_planner_nsrt(self) -> NSRT: + """CallPlanner NSRT.""" + parameters: Sequence[Variable] = [] + option_vars = parameters + option = self.CallPlanner + preconditions = {LiftedAtom(self.CanPlan, [])} + add_effects: Set[LiftedAtom] = set() + delete_effects: Set[LiftedAtom] = set() + + ignore_effects: Set[Predicate] = set() + call_planner_nsrt = NSRT("CallPlanner", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, utils.null_sampler) + return call_planner_nsrt @classmethod def get_name(cls) -> str: @@ -381,6 +442,8 @@ def is_learning_based(self) -> bool: def _init_nsrts(self) -> None: """Initializing nsrts for MAPLE Q.""" nsrts = self._get_current_nsrts() + callplanner_nsrt = self.call_planner_nsrt() + nsrts.add(callplanner_nsrt) predicates = self._get_current_predicates() all_ground_nsrts: Set[_GroundNSRT] = set() if CFG.sesame_grounder == "naive": @@ -410,48 +473,42 @@ def _solve(self, task: Task, timeout: int, train_or_test: str = "test") -> Callable[[State], Action]: - if not self._maple_initialized: - self.mapleq = MapleQApproach(self._get_current_predicates(), - self._initial_options, self._types, - self._action_space, self._train_tasks) - self._maple_initialized = True - self._init_nsrts() - # Start by planning. Note that we cannot start with the bridge policy # because the bridge policy takes as input the last failed NSRT. - current_control = "planner" + self._current_control = "planner" option_policy = self._get_option_policy_by_planning(task, timeout) - current_policy = utils.option_policy_to_policy( + self._current_policy = utils.option_policy_to_policy( option_policy, max_option_steps=CFG.max_num_steps_option_rollout, raise_error_on_repeated_state=True, ) - all_failed_options: List[_Option] = [] - - # Prevent infinite loops by detecting if the bridge policy is called - # twice with the same state. - last_bridge_policy_state = DefaultState + if not self._maple_initialized: + self.mapleq = MapleQApproach(self._get_current_predicates(), + self._initial_options, self._types, + self._action_space, self._train_tasks) + self._maple_initialized = True + self._init_nsrts() def _policy(s: State) -> Action: - nonlocal current_control, current_policy, last_bridge_policy_state - # Normal execution. Either keep executing the current option, or # switch to the next option if it has terminated. try: - action = current_policy(s) + action = self._current_policy(s) + if train_or_test == "train": + self._policy_logs.append(self._current_control) return action - except OptionExecutionFailure as e: - failed_option = e.info["last_failed_option"] - if failed_option is not None: - all_failed_options.append(failed_option) - + except utils.OptionExecutionFailure: + logging.debug(f"Failed control: {self._current_control}") # Switch control from planner to bridge. - assert current_control == "planner" - current_control = "bridge" - - current_policy = self.mapleq._solve( # pylint: disable=protected-access + assert self._current_control == "planner" + self._current_control = "bridge" + if train_or_test == "train": + self._policy_logs.append(self._current_control) + self._bridge_called_state = s + self._current_policy = self.mapleq._solve( # pylint: disable=protected-access task, timeout, train_or_test) - action = current_policy(s) + action = self._current_policy(s) + return action return _policy @@ -460,12 +517,20 @@ def _create_interaction_request(self, train_task_idx: int) -> InteractionRequest: task = self._train_tasks[train_task_idx] policy = self._solve(task, timeout=CFG.timeout, train_or_test="train") - - reached_stuck_state = False - all_failed_options = None + just_starting = True def _act_policy(s: State) -> Action: - nonlocal reached_stuck_state, all_failed_options + nonlocal just_starting + if just_starting: + self._current_control = "planner" + option_policy = self._get_option_policy_by_planning( + task, CFG.timeout) + self._current_policy = utils.option_policy_to_policy( + option_policy, + max_option_steps=CFG.max_num_steps_option_rollout, + raise_error_on_repeated_state=True, + ) + just_starting = False return policy(s) def _termination_fn(s: State) -> bool: @@ -484,15 +549,29 @@ def learn_from_interaction_results( # for efficiency. if not results: return None - all_states = [] - all_actions = [] - - for result in results: - new_traj = LowLevelTrajectory(result.states, result.actions) + policy_logs = self._policy_logs + for i in range(len(results)): + result = results[i] + policy_log = policy_logs[:len(result.states[:-1])] + # We index max(j - 1, 0) to count for the case when CallPlanner + # is used, since "planner" is added to the corresponding policy_log. + # When j = 0, planner is always in control + mapleq_states = [ + state for j, state in enumerate(result.states[:-1]) + if policy_log[j] == "bridge" + or policy_log[max(j - 1, 0)] == "bridge" + ] + mapleq_actions = [ + action for j, action in enumerate(result.actions) + if policy_log[j] == "bridge" + or policy_log[max(j - 1, 0)] == "bridge" + ] + mapleq_states.append(result.states[-1]) + new_traj = LowLevelTrajectory(mapleq_states, mapleq_actions) self._trajs.append(new_traj) - all_states.extend(result.states) - all_actions.extend(result.actions) + policy_logs = policy_logs[len(result.states) - 1:] self.mapleq.get_interaction_requests() self.mapleq._learn_nsrts(self._trajs, 0, [] * len(self._trajs)) # pylint: disable=protected-access + self._policy_logs = [] return None diff --git a/predicators/approaches/maple_q_approach.py b/predicators/approaches/maple_q_approach.py index 2a3b08835f..865a6d8b9b 100644 --- a/predicators/approaches/maple_q_approach.py +++ b/predicators/approaches/maple_q_approach.py @@ -124,7 +124,9 @@ def _learn_nsrts(self, trajectories: List[LowLevelTrajectory], assert nsrt.option_vars == nsrt.parameters # pragma: no cover. # On the first cycle, we need to register the ground NSRTs, goals, and # objects in the Q function so that it can define its inputs. - if not online_learning_cycle: + # Do not set grounding for rl_bridge_policy since it was set already + # in init_nsrts + if not online_learning_cycle and CFG.approach != "rl_bridge_policy": all_ground_nsrts: Set[_GroundNSRT] = set() if CFG.sesame_grounder == "naive": for nsrt in self._nsrts: diff --git a/predicators/explorers/maple_q_explorer.py b/predicators/explorers/maple_q_explorer.py index 8318ed5f78..4da4e08b08 100644 --- a/predicators/explorers/maple_q_explorer.py +++ b/predicators/explorers/maple_q_explorer.py @@ -38,12 +38,12 @@ def get_name(cls) -> str: def _get_exploration_strategy(self, train_task_idx: int, timeout: int) -> ExplorationStrategy: - eps = CFG.active_sampler_learning_exploration_epsilon num_samples = CFG.active_sampler_learning_num_samples goal = self._train_tasks[train_task_idx].goal def _option_policy(state: State) -> _Option: - return self._q_function.get_option(state, goal, num_samples, eps) + return self._q_function.get_option(state, \ + goal, num_samples, "train") policy = utils.option_policy_to_policy( _option_policy, max_option_steps=CFG.max_num_steps_option_rollout) diff --git a/predicators/ml_models.py b/predicators/ml_models.py index 2107a84999..5972e7a783 100644 --- a/predicators/ml_models.py +++ b/predicators/ml_models.py @@ -1392,6 +1392,8 @@ def get_option(self, state, num_samples_per_applicable_nsrt=1) # Note that this assumes that the output of sampling is completely # random, including in the order of ground NSRTs. + if self._use_epsilon_annealing: + self.decay_epsilon() return options[0] # Return the best option (approx argmax.) options = self._sample_applicable_options_from_state( From 90fa964f91c140085ea58d218f9bbadd025cf2ac Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Mon, 24 Jun 2024 16:31:39 -0400 Subject: [PATCH 15/38] Initial commit. (#1671) --- predicators/main.py | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/predicators/main.py b/predicators/main.py index 4e4ad8265f..3d5680b8d6 100644 --- a/predicators/main.py +++ b/predicators/main.py @@ -99,12 +99,16 @@ def main() -> None: env) # The known predicates are passed into the approach and into dataset # creation. In some cases, like when inventing geometric and VLM predicates, - # we want to hide certain goal predicates from the agent by replacing them - # with agent-specific goal predicates that the environment defines. - # Note that inside dataset creation, the known predicates are only used to - # create a VLM dataset, so we can just overwrite the variable `preds`. + # we want to hide certain goal predicates from the agent because we may + # want to invent them. So we can replace them with agent-specific goal + # predicates that the environment defines. Note that inside dataset + # creation, the known predicates are only used to create a VLM dataset, so + # we can just overwrite the variable `preds`. No replacing is done if the + # approach is oracle because the ground truth operators are defined in terms + # of the original goal predicates. preds = utils.replace_goals_with_agent_specific_goals( - included_preds, excluded_preds, env) + included_preds, excluded_preds, + env) if CFG.approach != "oracle" else included_preds # Create the train tasks. env_train_tasks = env.get_train_tasks() # We assume that a train Task can be constructed from a EnvironmentTask. @@ -125,7 +129,9 @@ def main() -> None: # using predicates that differ from those in the goals of the tasks that the # demonstrator solves, then replace those predicates accordingly. This is # used in VLM predicate invention where we want to invent certain goal - # predicates that the demonstrator needed to solve the task. + # predicates that the demonstrator needed to solve the task. We don't need + # worry about not doing this replacing if the approach is oracle because the + # "unedited" train tasks are passed into offline dataset creation. approach_train_tasks = [ task.replace_goal_with_alt_goal() for task in stripped_train_tasks ] @@ -326,9 +332,16 @@ def _generate_interaction_results( def _run_testing(env: BaseEnv, cogman: CogMan) -> Metrics: - test_tasks = [ - task.replace_goal_with_alt_goal() for task in env.get_test_tasks() - ] + # If the goals of the tasks that the approaches solve need to be described + # using predicates that differ from those in the goals of the tasks that the + # demonstrator solves, then replace those predicates accordingly. This is + # used in VLM predicate invention where we want to invent certain goal + # predicates that the demonstrator needed to solve the task. No replacing is + # done if the approach is oracle because the ground truth operators are + # defined in terms of the original goal predicates. + test_tasks = env.get_test_tasks() + if CFG.approach != "oracle": + test_tasks = [task.replace_goal_with_alt_goal() for task in test_tasks] num_found_policy = 0 num_solved = 0 cogman.reset_metrics() From 432ec18ee47e0f42149d013d02d2bbdae944ba72 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Tue, 25 Jun 2024 08:30:58 -0700 Subject: [PATCH 16/38] done (#1673) --- predicators/planning.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/predicators/planning.py b/predicators/planning.py index 5160eedf21..123323ff0a 100644 --- a/predicators/planning.py +++ b/predicators/planning.py @@ -985,7 +985,15 @@ def generate_sas_file_for_fd( # Run to generate sas cmd_str = (f"{timeout_cmd} {timeout} {exec_str} {alias_flag} " f"--sas-file {sas_file} {dom_file} {prob_file}") - subprocess.getoutput(cmd_str) + fd_translation_cmd_output = subprocess.getoutput(cmd_str) + if "Driver aborting" in fd_translation_cmd_output: + logging.debug(fd_translation_cmd_output) + logging.debug(prob_str) + raise PlanningFailure("FD failed to translate PDDL " + "to sas, there is likely a " + "dr-reachability issue! Run " + "with '--debug' flag to see the " + "output from FD.") return sas_file From f3b9bf125fe8c1d861c678010626d3b6570c47d4 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Tue, 25 Jun 2024 11:41:55 -0400 Subject: [PATCH 17/38] Fix geo and VLM predicate invention's use of annotations during nsrt learning. (#1672) * Initial commit. * Add geo and vlm approaches to offline data methods considered in _learn_nsrts() for annotations. * Remove pdb statement. * Run yapf. --------- Co-authored-by: Nishanth Kumar --- predicators/approaches/nsrt_learning_approach.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/predicators/approaches/nsrt_learning_approach.py b/predicators/approaches/nsrt_learning_approach.py index d6dcbf06ff..240604abaf 100644 --- a/predicators/approaches/nsrt_learning_approach.py +++ b/predicators/approaches/nsrt_learning_approach.py @@ -76,7 +76,9 @@ def _learn_nsrts(self, trajectories: List[LowLevelTrajectory], utils.save_ground_atom_dataset(ground_atom_dataset, dataset_fname) elif CFG.offline_data_method in [ "demo+labelled_atoms", "saved_vlm_img_demos_folder", - "demo_with_vlm_imgs" + "demo_with_vlm_imgs", "geo_and_demo+labelled_atoms", + "geo_and_saved_vlm_img_demos_folder", + "geo_and_demo_with_vlm_imgs" ]: # In this case, the annotations are basically ground atoms! # We can use these to make GroundAtomTrajectories. From c005cebd1fddc687cf2c59547fe123deca4b7e0a Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Wed, 26 Jun 2024 17:04:38 -0400 Subject: [PATCH 18/38] Add text labels to objects in burger (#1678) * Initial commit. * Note true vlm atoms in utils.abstract() to make it easier to debug. * Run autoformatter. --- predicators/envs/burger.py | 103 ++++++++++++++++++++++++++++++++++++- predicators/settings.py | 1 + predicators/utils.py | 3 +- 3 files changed, 104 insertions(+), 3 deletions(-) diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index 61a70d9772..1ec3017688 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -405,6 +405,7 @@ def get_empty_cells(cls, state: State) -> Set[Tuple[int, int]]: return set(cells) def simulate(self, state: State, action: Action) -> State: + held_item = None # We assume only one of , , , # is not "null" in each action. # If each one was null, the action would be <0, 0, -1, 0, 0>. @@ -523,7 +524,10 @@ def render_state_plt( action: Optional[Action] = None, caption: Optional[str] = None) -> matplotlib.figure.Figure: figsize = (self.num_cols * 2, self.num_rows * 2) - fig, ax = plt.subplots(1, 1, figsize=figsize) + # The DPI has to be sufficiently high otherwise when the matplotlib + # figure gets converted to a PIL image, text in the image can become + # blurry. + fig, ax = plt.subplots(1, 1, figsize=figsize, dpi=200) plt.suptitle(caption, wrap=True) # Plot vertical lines @@ -536,7 +540,6 @@ def render_state_plt( # Draw robot x, y = self.get_position(self._robot, state) - # ax.plot(robot_col + 0.5, robot_row + 0.5, 'rs', markersize=20) robot_direction = self.enum_to_dir[state.get(self._robot, "dir")] robot_img = mpimg.imread( utils.get_env_asset_path(f"imgs/robot_{robot_direction}.png")) @@ -546,17 +549,50 @@ def render_state_plt( x + (1 - img_size[0]) / 2, x + (1 + img_size[0]) / 2, y + (1 - img_size[1]) / 2, y + (1 + img_size[1]) / 2 ]) + if CFG.burger_render_set_of_marks: + ax.text(x + 1 / 2, + y + (1 - img_size[1]) / 2, + self._robot.name, + fontsize=10, + color="red", + ha="center", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) # Draw grill x, y = self.get_position(self._grill, state) grill_img = mpimg.imread(utils.get_env_asset_path("imgs/grill.png")) ax.imshow(grill_img, extent=[x, x + 1, y, y + 1]) + if CFG.burger_render_set_of_marks: + ax.text(x + 1 / 2, + y + (1 - img_size[1]) / 2, + self._grill.name, + fontsize=10, + color="red", + ha="center", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) # Draw cutting board x, y = self.get_position(self._cutting_board, state) cutting_board_img = mpimg.imread( utils.get_env_asset_path("imgs/cutting_board.png")) ax.imshow(cutting_board_img, extent=[x, x + 1, y, y + 1]) + if CFG.burger_render_set_of_marks: + ax.text(x + 1 / 2, + y + (1 - img_size[1]) / 2, + self._cutting_board.name, + fontsize=10, + color="red", + ha="center", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) # Draw items type_to_img = { @@ -615,6 +651,69 @@ def render_state_plt( y + (1 + img_size[1]) / 2 ] ax.imshow(img, extent=extent, zorder=zorder) + if CFG.burger_render_set_of_marks: + if is_held: + ax.text(x + (1 + held_img_size[0]) * (1 / 2), + y + offset + held_img_size[1] / 2, + item.name, + fontsize=10, + color="red", + ha="left", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) + else: + if zorder > 0: + if self._On_holds( + state, [item, self._grill]) or self._On_holds( + state, [item, self._cutting_board]): + ax.text(x + 1 / 2, + y + (1 + img_size[1]) / 2, + item.name, + fontsize=10, + color="red", + ha="center", + va="bottom", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) + else: + ax.text(x, + y + (0.1 * zorder) + (1 - img_size[1]) / 2, + item.name, + fontsize=10, + color="red", + ha="left", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) + else: + if not self._Clear_holds( + state, [item]) or not self._OnNothing_holds( + state, [item]): + ax.text(x, + y + (1 - img_size[1]) / 2, + item.name, + fontsize=10, + color="red", + ha="left", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) + else: + ax.text(x + 1 / 2, + y + (1 - img_size[1]) / 2, + item.name, + fontsize=10, + color="red", + ha="center", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) # Draw background floor_img = mpimg.imread( diff --git a/predicators/settings.py b/predicators/settings.py index 4a15f39a10..238d25d4f4 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -351,6 +351,7 @@ class GlobalSettings: grid_row_num_cells = 100 # burger env parameters + burger_render_set_of_marks = True gridworld_num_rows = 4 gridworld_num_cols = 4 diff --git a/predicators/utils.py b/predicators/utils.py index f503c8fc89..83bf8bba52 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -2308,7 +2308,8 @@ def abstract(state: State, for pred in vlm_preds: for choice in get_object_combinations(list(state), pred.types): vlm_atoms.add(GroundAtom(pred, choice)) - atoms |= query_vlm_for_atom_vals(vlm_atoms, state, vlm) + true_vlm_atoms = query_vlm_for_atom_vals(vlm_atoms, state, vlm) + atoms |= true_vlm_atoms return atoms From 079ed6d03312052ece7101c37c1e84797470af01 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Thu, 27 Jun 2024 08:08:21 -0700 Subject: [PATCH 19/38] Rename geometric predicates to prevent FD from freaking out (#1679) * clean implementation of renaming ft. ashay! * fix checks --- .../grammar_search_invention_approach.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/predicators/approaches/grammar_search_invention_approach.py b/predicators/approaches/grammar_search_invention_approach.py index 0b6d0b6439..5e6057f069 100644 --- a/predicators/approaches/grammar_search_invention_approach.py +++ b/predicators/approaches/grammar_search_invention_approach.py @@ -25,7 +25,8 @@ _PredicateSearchScoreFunction, create_score_function from predicators.settings import CFG from predicators.structs import Dataset, GroundAtom, GroundAtomTrajectory, \ - Object, ParameterizedOption, Predicate, Segment, State, Task, Type + Object, ParameterizedOption, Predicate, Segment, State, Task, Type, \ + VLMPredicate ################################################################################ # Programmatic classifiers # @@ -1032,6 +1033,17 @@ def learn_from_offline_dataset(self, dataset: Dataset) -> None: self._learned_predicates = self._select_predicates_by_clustering( candidates, self._initial_predicates, dataset, atom_dataset) logging.info("Done.") + # Now, rename these predicates to be compatible with PDDL planners! + renamed_predicates: Set[Predicate] = set() + for p in self._learned_predicates: + if isinstance(p, VLMPredicate): # pragma: no cover. + renamed_predicates.add(p) + continue + new_name = p.name.replace("(", "[").replace(")", + "]").replace(" ", "_") + renamed_pred = Predicate(new_name, p.types, p._classifier) # pylint:disable=protected-access + renamed_predicates.add(renamed_pred) + self._learned_predicates = renamed_predicates # Finally, learn NSRTs via superclass, using all the kept predicates. annotations = None if dataset.has_annotations: From a3b862bff48fc72ac8f0a2831b2424ce8a4a2355 Mon Sep 17 00:00:00 2001 From: Yichao Liang Date: Mon, 1 Jul 2024 19:09:45 +0100 Subject: [PATCH 20/38] Update pour option init to allow oracle to run when exclude all predicates (#1682) * Update pour option init * fix yapf --------- Co-authored-by: yichao-liang --- .gitignore | 2 ++ predicators/ground_truth_models/coffee/options.py | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9439aec1a5..6018f0798e 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,8 @@ machines.txt tests/_fake_trajs tests/_fake_results sas_plan +downward/ +Gymnasium-Robotics/ # Jetbrains IDEs .idea/ diff --git a/predicators/ground_truth_models/coffee/options.py b/predicators/ground_truth_models/coffee/options.py index ff5bafba8d..55b2510310 100644 --- a/predicators/ground_truth_models/coffee/options.py +++ b/predicators/ground_truth_models/coffee/options.py @@ -131,6 +131,12 @@ def _TurnMachineOn_terminal(state: State, memory: Dict, ) # Pour + def _Pour_initiable(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> bool: + del memory, params + robot, jug, _ = objects + return Holding.holds(state, [robot, jug]) + def _Pour_terminal(state: State, memory: Dict, objects: Sequence[Object], params: Array) -> bool: del memory, params # unused @@ -142,7 +148,7 @@ def _Pour_terminal(state: State, memory: Dict, types=[robot_type, jug_type, cup_type], params_space=Box(0, 1, (0, )), policy=cls._create_pour_policy(), - initiable=lambda s, m, o, p: True, + initiable=_Pour_initiable, terminal=_Pour_terminal, ) From bbb90a2a307cb2d510288783b5b77ae339dd595f Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Mon, 1 Jul 2024 22:06:58 -0700 Subject: [PATCH 21/38] Fix weird Pillow issue (#1684) * see if we can fix mypy issue(s) * yapf * fix mypy * should be gtg --- predicators/datasets/generate_atom_trajs_with_vlm.py | 11 +++++++---- predicators/envs/kitchen.py | 4 +++- setup.py | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index 372c491c99..618c05f430 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -7,7 +7,7 @@ import re from functools import partial from pathlib import Path -from typing import Dict, Iterator, List, Optional, Sequence, Set, Tuple +from typing import Dict, Iterator, List, Optional, Sequence, Set, Tuple, cast import dill as pkl import numpy as np @@ -870,12 +870,15 @@ def create_ground_atom_data_from_saved_img_trajs( img_traj = [] state_traj: Optional[List[State]] = [] for state_num in range(num_states_in_traj): - curr_imgs = [] + curr_imgs: List[PIL.Image.Image] = [] curr_state_path = path.joinpath(str(state_num)) # NOTE: we assume all images are saved as jpg files. img_files = sorted(glob.glob(str(curr_state_path) + "/*.jpg")) - for img in img_files: - curr_imgs.append(PIL.Image.open(img)) + for img_file in img_files: + # PIL.Image.open returns an ImageFile, which is a subclass of + # an Image. + img = cast(PIL.Image.Image, PIL.Image.open(img_file)) + curr_imgs.append(img) img_traj.append(curr_imgs) state_file = curr_state_path / "state.p" if state_file.exists(): # pragma: no cover diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index bcf6547224..fadf4dde3a 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -415,7 +415,9 @@ def _reset_initial_state_from_seed(self, seed: int) -> Observation: # is anywhere between burners 2 and 4. Later, we might add # even more variation. kettle_coords = (-0.269, rng.uniform(0.4, 0.55), 1.626) - self._gym_env.set_body_position("kettle", kettle_coords) + self._gym_env.set_body_position( + "kettle", # type: ignore + kettle_coords) return { "state_info": self.get_object_centric_state_info(), "obs_images": self.render() diff --git a/setup.py b/setup.py index 3201638957..fd83c01e8c 100644 --- a/setup.py +++ b/setup.py @@ -20,6 +20,7 @@ "dill==0.3.5.1", "pyperplan", "pathos", + "pillow==10.3.0", "requests", "slack_bolt", "pybullet>=3.2.0", From 80c74e4652c582790b428592a35e7b46962f29db Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Mon, 1 Jul 2024 23:35:43 -0700 Subject: [PATCH 22/38] Kitchen goal complexity (#1685) * making progress * planning for new kitchen goal(s) works! * fix mypy * yeet --- predicators/envs/kitchen.py | 80 +++++++++++++++------ predicators/perception/kitchen_perceiver.py | 23 ++++-- 2 files changed, 75 insertions(+), 28 deletions(-) diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index fadf4dde3a..6201c2e2f8 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -90,10 +90,12 @@ class KitchenEnv(BaseEnv): at_pre_pushontop_x_atol = 1.0 # other tolerance for AtPrePushOnTop obj_name_to_pre_push_dpos = { - ("kettle", "on"): (-0.05, -0.25, 0.00), + ("kettle", "on"): (-0.05, -0.2, 0.00), ("kettle", "off"): (0.0, 0.0, 0.08), ("knob4", "on"): (-0.1, -0.12, 0.05), ("knob4", "off"): (0.05, -0.12, -0.05), + ("knob3", "on"): (0.0, -0.12, 0.05), + ("knob3", "off"): (0.12, -0.12, -0.05), ("light", "on"): (0.1, -0.05, -0.05), ("light", "off"): (-0.1, -0.05, -0.05), ("microhandle", "on"): (0.0, -0.1, 0.13), @@ -295,7 +297,8 @@ def reset(self, train_or_test: str, task_idx: int) -> Observation: # We now need to reset the underlying gym environment to the correct # state. seed = utils.get_task_seed(train_or_test, task_idx) - self._current_observation = self._reset_initial_state_from_seed(seed) + self._current_observation = self._reset_initial_state_from_seed( + seed, train_or_test) return self._copy_observation(self._current_observation) def simulate(self, state: State, action: Action) -> State: @@ -355,25 +358,39 @@ def goal_reached(self) -> bool: self._current_observation["state_info"]) kettle = self.object_name_to_object("kettle") burner4 = self.object_name_to_object("burner4") + burner3 = self.object_name_to_object("burner3") knob4 = self.object_name_to_object("knob4") + knob3 = self.object_name_to_object("knob3") light = self.object_name_to_object("light") goal_desc = self._current_task.goal_description - kettle_on_burner = self._OnTop_holds(state, [kettle, burner4]) + kettle_on_burner4 = self._OnTop_holds(state, [kettle, burner4]) + kettle_on_burner3 = self._OnTop_holds(state, [kettle, burner3]) knob4_turned_on = self.On_holds(state, [knob4]) + knob3_turned_on = self.On_holds(state, [knob3]) light_turned_on = self.On_holds(state, [light]) - kettle_boiling = self._KettleBoiling_holds(state, - [kettle, burner4, knob4]) + kettle_boiling4 = self._KettleBoiling_holds(state, + [kettle, burner4, knob4]) + kettle_boiling3 = self._KettleBoiling_holds(state, + [kettle, burner3, knob3]) if goal_desc == ("Move the kettle to the back burner and turn it on; " "also turn on the light"): - return kettle_on_burner and knob4_turned_on and light_turned_on - if goal_desc == "Move the kettle to the back burner": - return kettle_on_burner - if goal_desc == "Turn on the back burner": + return kettle_on_burner4 and knob4_turned_on and light_turned_on + if goal_desc == "Move the kettle to the back left burner": + return kettle_on_burner4 + if goal_desc == "Move the kettle to the back right burner": + return kettle_on_burner3 + if goal_desc == "Turn on the back left burner": return knob4_turned_on + if goal_desc == "Turn on the back right burner": + return knob3_turned_on if goal_desc == "Turn on the light": return light_turned_on - if goal_desc == "Move the kettle to the back burner and turn it on": - return kettle_boiling + if goal_desc == ("Move the kettle to the back left burner " + "and turn it on"): + return kettle_boiling4 + if goal_desc == ("Move the kettle to the back right burner " + "and turn it on"): + return kettle_boiling3 raise NotImplementedError(f"Unrecognized goal: {goal_desc}") def _get_tasks(self, num: int, @@ -385,39 +402,56 @@ def _get_tasks(self, num: int, ] goal_descriptions: List[str] = [] if CFG.kitchen_goals in ["all", "kettle_only"]: - goal_descriptions.append("Move the kettle to the back burner") + if train_or_test == "train": + goal_descriptions.append( + "Move the kettle to the back left burner") + else: + goal_descriptions.append( + "Move the kettle to the back right burner") if CFG.kitchen_goals in ["all", "knob_only"]: - goal_descriptions.append("Turn on the back burner") + if train_or_test == "train": + goal_descriptions.append("Turn on the back left burner") + else: + goal_descriptions.append("Turn on the back right burner") if CFG.kitchen_goals in ["all", "light_only"]: goal_descriptions.append("Turn on the light") if CFG.kitchen_goals in ["all", "boil_kettle"]: - goal_descriptions.append( - "Move the kettle to the back burner and turn it on") + if train_or_test == "train": + goal_descriptions.append( + "Move the kettle to the back left burner and turn it on") + else: + goal_descriptions.append( + "Move the kettle to the back right burner and turn it on") if CFG.kitchen_goals == "all": - desc = ("Move the kettle to the back burner and turn it on; also " - "turn on the light") + desc = ( + "Move the kettle to the back left burner and turn it on; also " + "turn on the light") goal_descriptions.append(desc) for task_idx in range(num): seed = utils.get_task_seed(train_or_test, task_idx) - init_obs = self._reset_initial_state_from_seed(seed) + init_obs = self._reset_initial_state_from_seed(seed, train_or_test) goal_idx = task_idx % len(goal_descriptions) goal_description = goal_descriptions[goal_idx] task = EnvironmentTask(init_obs, goal_description) tasks.append(task) return tasks - def _reset_initial_state_from_seed(self, seed: int) -> Observation: + def _reset_initial_state_from_seed(self, seed: int, + train_or_test: str) -> Observation: self._gym_env.reset(seed=seed) + kettle_x_coord = -0.269 + if train_or_test == "test": + kettle_x_coord = 0.169 + kettle_y_coord = 0.4 if CFG.kitchen_randomize_init_state: rng = np.random.default_rng(seed) # For now, we only randomize the state such that the kettle # is anywhere between burners 2 and 4. Later, we might add # even more variation. - kettle_coords = (-0.269, rng.uniform(0.4, 0.55), 1.626) - self._gym_env.set_body_position( - "kettle", # type: ignore - kettle_coords) + kettle_y_coord = rng.uniform(0.4, 0.55) + self._gym_env.set_body_position( # type: ignore + "kettle", (kettle_x_coord, kettle_y_coord, 1.626)) return { "state_info": self.get_object_centric_state_info(), "obs_images": self.render() diff --git a/predicators/perception/kitchen_perceiver.py b/predicators/perception/kitchen_perceiver.py index 577e4bd98d..33958d8ef7 100644 --- a/predicators/perception/kitchen_perceiver.py +++ b/predicators/perception/kitchen_perceiver.py @@ -21,28 +21,41 @@ def reset(self, env_task: EnvironmentTask) -> Task: KettleBoiling = pred_name_to_pred["KettleBoiling"] kettle = KitchenEnv.object_name_to_object("kettle") knob4 = KitchenEnv.object_name_to_object("knob4") + knob3 = KitchenEnv.object_name_to_object("knob3") burner4 = KitchenEnv.object_name_to_object("burner4") + burner3 = KitchenEnv.object_name_to_object("burner3") light = KitchenEnv.object_name_to_object("light") goal_desc = env_task.goal_description - if goal_desc == ("Move the kettle to the back burner and turn it on; " - "also turn on the light"): + if goal_desc == ( + "Move the kettle to the back left burner and turn it on; " + "also turn on the light"): goal = { GroundAtom(TurnedOn, [knob4]), GroundAtom(OnTop, [kettle, burner4]), GroundAtom(TurnedOn, [light]), } - elif goal_desc == "Move the kettle to the back burner": + elif goal_desc == "Move the kettle to the back left burner": goal = {GroundAtom(OnTop, [kettle, burner4])} - elif goal_desc == "Turn on the back burner": + elif goal_desc == "Move the kettle to the back right burner": + goal = {GroundAtom(OnTop, [kettle, burner3])} + elif goal_desc == "Turn on the back left burner": goal = { GroundAtom(TurnedOn, [knob4]), } + elif goal_desc == "Turn on the back right burner": + goal = { + GroundAtom(TurnedOn, [knob3]), + } elif goal_desc == "Turn on the light": goal = { GroundAtom(TurnedOn, [light]), } - elif goal_desc == "Move the kettle to the back burner and turn it on": + elif goal_desc == ("Move the kettle to the back left burner " + "and turn it on"): goal = {GroundAtom(KettleBoiling, [kettle, burner4, knob4])} + elif goal_desc == ("Move the kettle to the back right burner " + "and turn it on"): + goal = {GroundAtom(KettleBoiling, [kettle, burner3, knob3])} else: raise NotImplementedError(f"Unrecognized goal: {goal_desc}") return Task(state, goal) From d51907b89ba058fed4d9c9a4c8f4302434c729bb Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Tue, 2 Jul 2024 10:40:34 -0400 Subject: [PATCH 23/38] Add task variation to BurgerEnv (#1669) * Initial commit. * Undo debugging thing. * Adjust goalhack predicate and goal in tasks. * Debugging changes. * Run autoformatter and get some of the checks to pass. * Update BurgerEnv test after the grid was changed from 4x4 to 5x5 and task variation was added. * Run autoformatter. * Update tests to get better coverage. * Add comments and make small edits to pass checks. * Get more checks to pass. * Remove pdb statement. * Try to fix typing issue. * Fix incorrect usage of cast. --------- Co-authored-by: Nishanth Kumar --- .../img_option_diffs_label_history.txt | 2 +- predicators/envs/burger.py | 206 +++++++++++++----- predicators/settings.py | 4 +- tests/envs/test_burger.py | 137 ++++++++---- 4 files changed, 240 insertions(+), 109 deletions(-) diff --git a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt index aaef54b9b7..5bf3793734 100644 --- a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt +++ b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history.txt @@ -1,3 +1,3 @@ -You are a vision system for a robot. You are provided with two images corresponding to the states before and after a particular skill is executed. You are given a list of predicates below, and you are given the values of these predicates in the image before the skill is executed. Your job is to output the values of the following predicates in the image after the skill is executed. Pay careful attention to the changes between the two images to figure out which predicates change and which predicates do not change. For the predicates that change, list these separately at the end of your response. Note that in some scenes, there might be no changes. First, output a description of what changes happen between the before and after images. Next, output each predicate value in the after image as a bulleted list with each predicate and value on a different line. For each predicate value, provide an explanation as to why you labelled this predicate as having this particular value. Use the format: : . . +You are a vision system for a robot. You are provided with two images corresponding to the states before and after a particular skill is executed. You are given a list of predicates below, and you are given the values of these predicates in the image before the skill is executed. Your job is to output the values of the following predicates in the image after the skill is executed. Pay careful attention to the visual changes between the two images to figure out which predicates change and which predicates do not change. For the predicates that change, list these separately at the end of your response. Note that in some scenes, there might be no changes. First, output a description of what changes you expect to happen based on the skill that was just run, explicitly noting the skill that was run. Second, output a description of what visual changes you see happen between the before and after images, looking specifically at the objects involved in the skill's arguments, noting what objects these are. Next, output each predicate value in the after image as a bulleted list with each predicate and value on a different line. For each predicate value, provide an explanation as to why you labelled this predicate as having this particular value. Use the format: : . . Predicates: \ No newline at end of file diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index 1ec3017688..36fd55342d 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -132,71 +132,157 @@ def types(self) -> Set[Type]: self._grill_type, self._cutting_board_type } + def get_edge_cells_for_object_placement( + self, rng: np.random.Generator) -> List[Tuple[int, int]]: + """Selects edge cells such that if objects were placed in these cells, + the robot would never find itself adjacent to more than one object. + + This helper function assumes that the grid is 5x5. + + Public for use by tests. + """ + n_row = self.num_rows + n_col = self.num_cols + top = [(n_row - 1, col) for col in range(n_col)] + left = [(row, 0) for row in range(n_row)] + bottom = [(0, col) for col in range(n_col)] + right = [(row, n_col - 1) for row in range(n_row)] + corners = [(0, 0), (0, self.num_cols - 1), (self.num_rows - 1, 0), + (self.num_rows - 1, self.num_cols - 1)] + + # Pick edge cells for objects to be placed in such that the robot will + # never be adjacent to two objects at the same time. + # 1. Pick one edge to keep all its cells. + # 2. Pick one edge to lose two cells. + # 3. The cells we keep in the remaining two edges are determined by the + # previous choices. + # If this strategy is confusing to you, spend a few minutes drawing it + # out on graph paper. + + # We don't consider placing objects in the corners because the robot + # cannot interact with an object that is diagonally positioned. + edges = [top, left, bottom, right] + for i, edge in enumerate(edges): + edges[i] = [c for c in edge if c not in corners] + top, left, bottom, right = edges + # Without loss of generality, have the top edge keep all its cells. To + # generate other possibilities, we will later rotate the entire grid + # with some probability. + # Note that we can always keep cells that are in the "middle" of the + # edge -- we only need to worry about cells at the ends of an edge. + # If one edge keeps all its cells (call this edge A), then for the two + # edges that are adjacent to A, we can't choose the cell in each of + # these that is closest to A -- otherwise the robot could be adjacent + # to objects at once. Since our grid has 4 edges, this implies that + # one edge will have to lose two cells, and the others will lose one + # cell. + loses_two = edges[rng.choice([1, 2, 3])] + if loses_two == left: + left = left[1:len(left) - 1] + bottom = bottom[:-1] + right = right[:-1] + elif loses_two == bottom: + left = left[:-1] + bottom = bottom[1:len(bottom) - 1] + right = right[:-1] + elif loses_two == right: + left = left[:-1] + bottom = bottom[1:] + right = right[1:len(right) - 1] + edges = [top, left, bottom, right] + # Now, rotate the grid with some probability to cover the total set of + # possibilities for object placements that satisfy our constraint. To + # see why this rotation covers all the possibilities, draw it out on + # graph paper. + cells = top + left + bottom + right + rotate = rng.choice([0, 1, 2, 3]) + # Rotate 0 degrees. + if rotate == 0: + ret = cells + elif rotate == 1: + # Rotate 90 degrees. + ret = [(col, n_row - 1 - row) for row, col in cells] + elif rotate == 2: + # Rotate 180 degrees. + ret = [(n_row - 1 - row, n_col - 1 - col) for row, col in cells] + else: + # Rotate 270 degrees. + ret = [(col, row) for row, col in cells] + + return ret + def _get_tasks(self, num: int, rng: np.random.Generator) -> List[EnvironmentTask]: - del rng # unused tasks = [] state_dict = {} hidden_state = {} - # Add robot, grill, and cutting board - state_dict[self._robot] = { - "row": 2, - "col": 2, - "z": 0, - "fingers": 0.0, - "dir": 3 - } - state_dict[self._grill] = {"row": 2, "col": 3, "z": 0} - state_dict[self._cutting_board] = {"row": 1, "col": 3, "z": 0} - - # Add patty - patty = Object("patty", self._patty_type) - state_dict[patty] = {"row": 0, "col": 0, "z": 0} - hidden_state[patty] = {"is_cooked": 0.0, "is_held": 0.0} - - # Add tomato - tomato = Object("tomato", self._tomato_type) - state_dict[tomato] = {"row": 0, "col": 1, "z": 0} - hidden_state[tomato] = {"is_sliced": 0.0, "is_held": 0.0} - - # Add cheese - cheese = Object("cheese", self._cheese_type) - state_dict[cheese] = {"row": 3, "col": 0, "z": 0} - hidden_state[cheese] = {"is_held": 0.0} - - # Add top bun - top_bun = Object("top_bun", self._top_bun_type) - state_dict[top_bun] = {"row": 3, "col": 1, "z": 0} - hidden_state[top_bun] = {"is_held": 0.0} - - # Add bottom bun - bottom_bun = Object("bottom_bun", self._bottom_bun_type) - state_dict[bottom_bun] = {"row": 0, "col": 2, "z": 0} - hidden_state[bottom_bun] = {"is_held": 0.0} - - goal = { - # GroundAtom(self._On, [patty, bottom_bun]), - # GroundAtom(self._On, [cheese, patty]), - # GroundAtom(self._On, [tomato, cheese]), - # GroundAtom(self._On, [top_bun, tomato]), - # GroundAtom(self._IsCooked, [patty]), - # GroundAtom(self._IsSliced, [tomato]), - # GroundAtom(self._GoalHack, [bottom_bun, patty, cheese, tomato, - # top_bun]) - GroundAtom(self._On, [patty, bottom_bun]), - GroundAtom(self._On, [cheese, patty]), - GroundAtom(self._IsCooked, [patty]), - } - - alt_goal = { - GroundAtom(self._On, [patty, bottom_bun]), - GroundAtom(self._On, [cheese, patty]), - GroundAtom(self._GoalHack, - [bottom_bun, patty, cheese, tomato, top_bun]) - } + spots_for_objects = self.get_edge_cells_for_object_placement(rng) for _ in range(num): + shuffled_spots = spots_for_objects.copy() + rng.shuffle(shuffled_spots) + + # Add robot, grill, and cutting board + r, c = shuffled_spots[0] + state_dict[self._robot] = { + "row": 2, # assumes 5x5 grid + "col": 2, # assumes 5x5 grid + "z": 0, + "fingers": 0.0, + "dir": 3 + } + r, c = shuffled_spots[1] + state_dict[self._grill] = {"row": r, "col": c, "z": 0} + r, c = shuffled_spots[2] + state_dict[self._cutting_board] = {"row": r, "col": c, "z": 0} + + # Add patty + r, c = shuffled_spots[3] + patty = Object("patty", self._patty_type) + state_dict[patty] = {"row": r, "col": c, "z": 0} + hidden_state[patty] = {"is_cooked": 0.0, "is_held": 0.0} + + # Add tomato + r, c = shuffled_spots[4] + tomato = Object("tomato", self._tomato_type) + state_dict[tomato] = {"row": r, "col": c, "z": 0} + hidden_state[tomato] = {"is_sliced": 0.0, "is_held": 0.0} + + # Add cheese + r, c = shuffled_spots[5] + cheese = Object("cheese", self._cheese_type) + state_dict[cheese] = {"row": r, "col": c, "z": 0} + hidden_state[cheese] = {"is_held": 0.0} + + # Add top bun + r, c = shuffled_spots[6] + top_bun = Object("top_bun", self._top_bun_type) + state_dict[top_bun] = {"row": r, "col": c, "z": 0} + hidden_state[top_bun] = {"is_held": 0.0} + + # Add bottom bun + r, c = shuffled_spots[7] + bottom_bun = Object("bottom_bun", self._bottom_bun_type) + state_dict[bottom_bun] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun] = {"is_held": 0.0} + + goal = { + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [cheese, patty]), + # GroundAtom(self._On, [tomato, cheese]), + # GroundAtom(self._On, [top_bun, tomato]), + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._IsSliced, [tomato]), + } + + alt_goal = { + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [cheese, patty]), + GroundAtom(self._GoalHack, + [bottom_bun, patty, cheese, tomato, top_bun]) + } + state = utils.create_state_from_dict(state_dict) state.simulator_state = {} state.simulator_state["state"] = hidden_state @@ -276,7 +362,7 @@ def _Holding_holds(self, state: State, objects: Sequence[Object]) -> bool: robot, item = objects assert state.simulator_state is not None assert "state" in state.simulator_state - return not self._HandEmpty_holds(state,[robot]) and \ + return not self._HandEmpty_holds(state, [robot]) and \ state.simulator_state["state"][item]["is_held"] > 0.5 def _On_holds(self, state: State, objects: Sequence[Object]) -> bool: @@ -308,14 +394,14 @@ def _Clear_holds(self, state: State, objects: Sequence[Object]) -> bool: def _GoalHack_holds(self, state: State, objects: Sequence[Object]) -> bool: # bottom, patty, cheese, tomato, top = objects - bottom, patty, cheese, _, _ = objects + bottom, patty, cheese, tomato, _ = objects atoms = [ self._On_holds(state, [patty, bottom]), self._On_holds(state, [cheese, patty]), # self._On_holds(state, [tomato, cheese]), # self._On_holds(state, [top, tomato]), self._IsCooked_holds(state, [patty]), - # self._IsSliced_holds(state, [tomato]) + self._IsSliced_holds(state, [tomato]) ] return all(atoms) diff --git a/predicators/settings.py b/predicators/settings.py index 238d25d4f4..a6adbb763b 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -352,8 +352,8 @@ class GlobalSettings: # burger env parameters burger_render_set_of_marks = True - gridworld_num_rows = 4 - gridworld_num_cols = 4 + gridworld_num_rows = 5 + gridworld_num_cols = 5 # parameters for random options approach random_options_max_tries = 100 diff --git a/tests/envs/test_burger.py b/tests/envs/test_burger.py index 30f91aa949..97b438410d 100644 --- a/tests/envs/test_burger.py +++ b/tests/envs/test_burger.py @@ -20,10 +20,15 @@ def test_burger(): "option_model_terminate_on_repeat": False, "sesame_max_skeletons_optimized": 1000, "sesame_max_samples_per_step": 1, - "sesame_task_planner": "fdopt" + "sesame_task_planner": "fdopt", + "num_train_tasks": 1, + "num_test_tasks": 1, + "seed": 0 }) - env = BurgerEnv() + # This should really test this for however many train/test tasks we will use + # in our experiments (e.g 50 for each instead of 1), but because the image + # rendering is so slow, I set this to 1 here. for task in env.get_train_tasks(): for obj in task.init: assert len(obj.type.feature_names) == len(task.init[obj]) @@ -40,30 +45,35 @@ def test_burger(): nsrts = get_gt_nsrts(env.get_name(), env.predicates, options) assert len(nsrts) == 15 task = env.get_train_tasks()[0] + # The nsrts that are commented out are used when the "full" goal is used + # in the tasks. Because we are still getting predicate invention to work + # in BurgerEnv, we are not yet using the "full" goal. Because the full goal + # won't be in the environment's task's goals, we won't test a plan that + # achieves that goal in the tests for now. MoveWhenFacingOneStack = [ n for n in nsrts if n.name == "MoveWhenFacingOneStack" ][0] MoveWhenFacingTwoStack = [ n for n in nsrts if n.name == "MoveWhenFacingTwoStack" ][0] - MoveWhenFacingThreeStack = [ - n for n in nsrts if n.name == "MoveWhenFacingThreeStack" - ][0] - MoveWhenFacingFourStack = [ - n for n in nsrts if n.name == "MoveWhenFacingFourStack" - ][0] + # MoveWhenFacingThreeStack = [ + # n for n in nsrts if n.name == "MoveWhenFacingThreeStack" + # ][0] + # MoveWhenFacingFourStack = [ + # n for n in nsrts if n.name == "MoveWhenFacingFourStack" + # ][0] MoveFromNothingToOneStack = [ n for n in nsrts if n.name == "MoveFromNothingToOneStack" ][0] MoveFromNothingToTwoStack = [ n for n in nsrts if n.name == "MoveFromNothingToTwoStack" ][0] - MoveFromNothingToFourStack = [ - n for n in nsrts if n.name == "MoveFromNothingToFourStack" - ][0] - MoveFromOneStackToThreeStack = [ - n for n in nsrts if n.name == "MoveFromOneStackToThreeStack" - ][0] + # MoveFromNothingToFourStack = [ + # n for n in nsrts if n.name == "MoveFromNothingToFourStack" + # ][0] + # MoveFromOneStackToThreeStack = [ + # n for n in nsrts if n.name == "MoveFromOneStackToThreeStack" + # ][0] PickSingleAdjacent = [n for n in nsrts if n.name == "PickSingleAdjacent"][0] PickFromStack = [n for n in nsrts if n.name == "PickFromStack"][0] @@ -82,7 +92,12 @@ def test_burger(): bottom_bun = [obj for obj in task.init if obj.name == "bottom_bun"][0] plan = [ - MoveWhenFacingOneStack.ground([robot, patty, grill]), + MoveFromNothingToOneStack.ground([robot, tomato]), + PickSingleAdjacent.ground([robot, tomato]), + MoveFromNothingToOneStack.ground([robot, cutting_board]), + Place.ground([robot, tomato, cutting_board]), + Slice.ground([robot, tomato, cutting_board]), + MoveWhenFacingTwoStack.ground([robot, patty, tomato, cutting_board]), PickSingleAdjacent.ground([robot, patty]), MoveFromNothingToOneStack.ground([robot, grill]), Place.ground([robot, patty, grill]), @@ -93,25 +108,40 @@ def test_burger(): MoveWhenFacingTwoStack.ground([robot, cheese, patty, bottom_bun]), PickSingleAdjacent.ground([robot, cheese]), MoveFromNothingToTwoStack.ground([robot, patty, bottom_bun]), - Place.ground([robot, cheese, patty]), - MoveWhenFacingThreeStack.ground( - [robot, tomato, cheese, patty, bottom_bun]), - PickSingleAdjacent.ground([robot, tomato]), - MoveFromNothingToOneStack.ground([robot, cutting_board]), - Place.ground([robot, tomato, cutting_board]), - Slice.ground([robot, tomato, cutting_board]), - PickFromStack.ground([robot, tomato, cutting_board]), - MoveFromOneStackToThreeStack.ground( - [robot, cheese, patty, bottom_bun, cutting_board]), - Place.ground([robot, tomato, cheese]), - MoveWhenFacingFourStack.ground( - [robot, top_bun, tomato, cheese, patty, bottom_bun]), - PickSingleAdjacent.ground([robot, top_bun]), - MoveFromNothingToFourStack.ground( - [robot, tomato, cheese, patty, bottom_bun]), - Place.ground([robot, top_bun, tomato]) + Place.ground([robot, cheese, patty]) ] + # plan = [ + # MoveWhenFacingOneStack.ground([robot, patty, grill]), + # PickSingleAdjacent.ground([robot, patty]), + # MoveFromNothingToOneStack.ground([robot, grill]), + # Place.ground([robot, patty, grill]), + # Cook.ground([robot, patty, grill]), + # PickFromStack.ground([robot, patty, grill]), + # MoveWhenFacingOneStack.ground([robot, bottom_bun, grill]), + # Place.ground([robot, patty, bottom_bun]), + # MoveWhenFacingTwoStack.ground([robot, cheese, patty, bottom_bun]), + # PickSingleAdjacent.ground([robot, cheese]), + # MoveFromNothingToTwoStack.ground([robot, patty, bottom_bun]), + # Place.ground([robot, cheese, patty]), + # MoveWhenFacingThreeStack.ground( + # [robot, tomato, cheese, patty, bottom_bun]), + # PickSingleAdjacent.ground([robot, tomato]), + # MoveFromNothingToOneStack.ground([robot, cutting_board]), + # Place.ground([robot, tomato, cutting_board]), + # Slice.ground([robot, tomato, cutting_board]), + # PickFromStack.ground([robot, tomato, cutting_board]), + # MoveFromOneStackToThreeStack.ground( + # [robot, cheese, patty, bottom_bun, cutting_board]), + # Place.ground([robot, tomato, cheese]), + # MoveWhenFacingFourStack.ground( + # [robot, top_bun, tomato, cheese, patty, bottom_bun]), + # PickSingleAdjacent.ground([robot, top_bun]), + # MoveFromNothingToFourStack.ground( + # [robot, tomato, cheese, patty, bottom_bun]), + # Place.ground([robot, top_bun, tomato]) + # ] + option_plan = [n.option.ground(n.option_objs, []) for n in plan] policy = utils.option_plan_to_policy(option_plan) traj, _ = utils.run_policy(policy, @@ -125,11 +155,10 @@ def test_burger(): utils.HumanDemonstrationFailure, }, monitor=None) + assert task.task.goal_holds(traj.states[-1]) # Test _AdjacentToNothing_holds - state = task.init - state.set(robot, "col", 1) - state.set(top_bun, "col", 2) + state = task.init.copy() abstract_state = utils.abstract(state, env.predicates) AdjacentToNothing = [ p for p in env.predicates if p.name == "AdjacentToNothing" @@ -139,8 +168,8 @@ def test_burger(): # Test _OnNothing_holds OnNothing = [p for p in env.predicates if p.name == "OnNothing"][0] assert GroundAtom(OnNothing, - [top_bun]) not in utils.abstract(traj.states[-1], - env.predicates) + [cheese]) not in utils.abstract(traj.states[-1], + env.predicates) # Test _GoalHack_holds GoalHack = [p for p in env.predicates if p.name == "GoalHack"][0] @@ -151,25 +180,29 @@ def test_burger(): # Test get_cell_in_direction x, y = env.get_cell_in_direction(1, 1, "left") assert x == 0 and y == 1 + x, y = env.get_cell_in_direction(1, 1, "right") + assert x == 2 and y == 1 x, y = env.get_cell_in_direction(1, 1, "up") assert x == 1 and y == 2 + x, y = env.get_cell_in_direction(1, 1, "down") + assert x == 1 and y == 0 x, y = env.get_cell_in_direction(1, 1, "no_change") assert x == 1 and y == 1 # Test collision - state.set(robot, "col", 2) # robot is at (2, 2) + state.set(robot, "col", 3) # robot is at (2, 3)) action = Action(np.array([1, 0, -1, 0, 0], dtype=np.float32)) next_state = env.simulate(state, action) assert env.get_position(robot, next_state) == env.get_position(robot, state) # Test placing on the ground - state = traj.states[5] + state = traj.states[2] action = Action(np.array([0, 0, -1, 0, 1], dtype=np.float32)) next_state = env.simulate(state, action) - assert env.get_position(patty, next_state) == env.get_position( - patty, traj.states[4]) - assert next_state.get(patty, "z") == 0 + assert env.get_position(tomato, next_state) == env.get_position( + tomato, traj.states[0]) + assert next_state.get(tomato, "z") == 0 # Test rendering env.render_state_plt(traj.states[0], task) @@ -190,7 +223,7 @@ def test_burger(): plt.close() # Test move option when already adjacent but not facing - state = task.init + state = task.init.copy() state.set(grill, "col", 2) state.set(grill, "row", 3) Move = [o for o in options if o.name == "Move"][0] @@ -200,7 +233,7 @@ def test_burger(): next_state = env.step(action) assert next_state.get(robot, "dir") == 0 - state = task.init + state = task.init.copy() state.set(grill, "col", 2) state.set(grill, "row", 1) Move = [o for o in options if o.name == "Move"][0] @@ -210,7 +243,7 @@ def test_burger(): next_state = env.step(action) assert next_state.get(robot, "dir") == 2 - state = task.init + state = task.init.copy() state.set(grill, "col", 1) state.set(grill, "row", 2) Move = [o for o in options if o.name == "Move"][0] @@ -220,7 +253,7 @@ def test_burger(): next_state = env.step(action) assert next_state.get(robot, "dir") == 1 - state = task.init + state = task.init.copy() state.set(grill, "col", 3) state.set(grill, "row", 2) state.set(robot, "dir", 1) @@ -230,3 +263,15 @@ def test_burger(): action = option.policy(state) next_state = env.step(action) assert next_state.get(robot, "dir") == 3 + + # Test _get_edge_cells_for_object_placement() + # This isn't a real test because we aren't going to verify that the + # edge cells that this function outputs satisfy all the constraints we want + # them to satisy (edge cells such that the robot will never be adjacent to + # more than one of these edge cells at any time). + rng = np.random.default_rng(0) + # 50 is an arbitrary number here. We just want to call this function many + # times to get all possible outcomes to happen at least once for coverage + # purposes. + for _ in range(50): + _ = env.get_edge_cells_for_object_placement(rng) From ad168e60ba5a804f552b1508eb676b8d015a4d94 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Tue, 2 Jul 2024 19:08:09 -0400 Subject: [PATCH 24/38] Parallelize vlm labeling (#1686) * Initial commit. * Add printing of traj number in labeling progress output. * Get checks to pass. * Add to test to get full coverage. * Refactor for cleaner code. * Fix typing issue. * Run autoformatter. * Add comment explaining use of multithreading. * Run autoformatter. --- .../datasets/generate_atom_trajs_with_vlm.py | 83 ++++++++++++++----- predicators/settings.py | 1 + tests/datasets/test_datasets.py | 33 ++++++++ 3 files changed, 95 insertions(+), 22 deletions(-) diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index 618c05f430..2affe19e0c 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -5,6 +5,7 @@ import logging import os import re +from concurrent.futures import ThreadPoolExecutor from functools import partial from pathlib import Path from typing import Dict, Iterator, List, Optional, Sequence, Set, Tuple, cast @@ -173,33 +174,71 @@ def _sample_vlm_atom_proposals_from_trajectories( return aggregated_vlm_output_strs +def _label_single_trajectory_with_vlm_atom_values(indexed_traj: Tuple[ + int, ImageOptionTrajectory], vlm: VisionLanguageModel, + atoms_list: List[str], + num_trajs: int) -> List[str]: + """Given a list of atoms, label every state in an ImageOptionTrajectory + with the truth values of those atoms.""" + idx, traj = indexed_traj + curr_scenes_labelled = 0 + total_scenes_to_label = len(traj.imgs) + curr_traj_txt_outputs: List[str] = [] + prompts_for_traj = _generate_prompt_for_scene_labelling( + traj, atoms_list, label_history=curr_traj_txt_outputs) + for text_prompt, img_prompt in prompts_for_traj: + # Sample VLM outputs with temperature 0 in an attempt to be + # accurate. + curr_vlm_atom_labelling = vlm.sample_completions(text_prompt, + img_prompt, + 0.0, + CFG.seed, + num_completions=1) + assert len(curr_vlm_atom_labelling) == 1 + sanitized_output = curr_vlm_atom_labelling[0].replace('\\', '') + curr_traj_txt_outputs.append(sanitized_output) + curr_scenes_labelled += 1 + logging.info( + f"Completed ({curr_scenes_labelled}/{total_scenes_to_label}) " \ + f"label queries to VLM for trajectory #{idx + 1} of {num_trajs}!" + ) + logging.info("Finished labeling trajectory.") + return curr_traj_txt_outputs + + def _label_trajectories_with_vlm_atom_values( trajectories: List[ImageOptionTrajectory], vlm: VisionLanguageModel, atoms_list: List[str]) -> List[List[str]]: """Given a list of atoms, label every state in ImageOptionTrajectories with - the truth values of a set of atoms.""" - total_scenes_to_label = sum(len(traj.imgs) for traj in trajectories) - curr_scenes_labelled = 0 + the truth values of those atoms.""" output_labelled_atoms_txt_list = [] - for traj in trajectories: - curr_traj_txt_outputs: List[str] = [] - prompts_for_traj = _generate_prompt_for_scene_labelling( - traj, atoms_list, label_history=curr_traj_txt_outputs) - for text_prompt, img_prompt in prompts_for_traj: - # Sample VLM outputs with temperature 0 in an attempt to be - # accurate. - curr_vlm_atom_labelling = vlm.sample_completions(text_prompt, - img_prompt, - 0.0, - CFG.seed, - num_completions=1) - assert len(curr_vlm_atom_labelling) == 1 - sanitized_output = curr_vlm_atom_labelling[0].replace('\\', '') - curr_traj_txt_outputs.append(sanitized_output) - curr_scenes_labelled += 1 - logging.info("Completed (%s/%s) label queries to VLM!", - curr_scenes_labelled, total_scenes_to_label) - output_labelled_atoms_txt_list.append(curr_traj_txt_outputs) + + def label_function( + indexed_traj: Tuple[int, ImageOptionTrajectory]) -> List[str]: + return _label_single_trajectory_with_vlm_atom_values( + indexed_traj, vlm, atoms_list, len(trajectories)) + + indexed_trajectories = list(enumerate(trajectories)) + + if CFG.grammar_search_parallelize_vlm_labeling: + logging.info("Labeling trajectories in parallel.") + # Mulithreading is the right choice over multiprocessing for tasks that + # involve waiting for responses from external servers, such as API + # calls, as these tasks are I/O bound. The python GIL has minimal impact + # on I/O-bound tasks. We will spawn one thread for each trajectory we + # need to label. The number of threads you can spawn is limited by + # system resources; the limit will far exceed the number of demo + # trajectories we expect, which is ~50. + with ThreadPoolExecutor() as executor: + for traj_txt_outputs in executor.map(label_function, + indexed_trajectories): + output_labelled_atoms_txt_list.append(traj_txt_outputs) + return output_labelled_atoms_txt_list + + logging.info("Labeling trajectories sequentially.") + for idx, traj in indexed_trajectories: + traj_txt_outputs = label_function((idx, traj)) + output_labelled_atoms_txt_list.append(traj_txt_outputs) return output_labelled_atoms_txt_list diff --git a/predicators/settings.py b/predicators/settings.py index a6adbb763b..aecd64f4d1 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -674,6 +674,7 @@ class GlobalSettings: grammar_search_vlm_atom_proposal_prompt_type = "options_labels_whole_traj" grammar_search_vlm_atom_label_prompt_type = "per_scene_naive" grammar_search_vlm_atom_proposal_use_debug = False + grammar_search_parallelize_vlm_labeling = True # grammar search clustering algorithm parameters grammar_search_clustering_gmm_num_components = 10 diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index 371d2e94e7..897a3f39a7 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -584,6 +584,39 @@ def test_loading_saved_vlm_img_demos_folder_non_dummy_goal(): # Remove regular files, ignore directories for filename in filenames: os.unlink(os.path.join(dirpath, filename)) + # Coverage for code path where VLM trajectory labeling is not parallelized + utils.reset_config({ + "env": "cover", + "num_train_tasks": 1, + "offline_data_method": "saved_vlm_img_demos_folder", + "data_dir": "tests/datasets/mock_vlm_datasets", + "seed": 456, + "vlm_trajs_folder_name": "cover__vlm_demos__456__1", + "grammar_search_vlm_atom_proposal_prompt_type": "naive_each_step", + "grammar_search_vlm_atom_label_prompt_type": "per_scene_naive", + "pretrained_model_prompt_cache_dir": + "tests/datasets/mock_vlm_datasets/cache", + "cover_num_blocks": 1, + "cover_num_targets": 1, + "cover_block_widths": [0.1], + "cover_target_widths": [0.05], + "excluded_predicates": "all", + "grammar_search_parallelize_vlm_labeling": False + }) + env = CoverEnv() + train_tasks = env.get_train_tasks() + predicates, _ = utils.parse_config_excluded_predicates(env) + vlm = _DummyVLM() + loaded_dataset = create_ground_atom_data_from_saved_img_trajs( + env, train_tasks, predicates, get_gt_options(env.get_name()), vlm) + assert len(loaded_dataset.trajectories) == 1 + assert len(loaded_dataset.annotations) == 1 + assert "DummyGoal" not in str(loaded_dataset.annotations[0][-1]) + for dirpath, _, filenames in os.walk( + CFG.pretrained_model_prompt_cache_dir): + # Remove regular files, ignore directories + for filename in filenames: + os.unlink(os.path.join(dirpath, filename)) @pytest.mark.parametrize( From 8272c02f5f7f93fa658d66fca640f154ce2a55d8 Mon Sep 17 00:00:00 2001 From: Alicia Li <102700848+matrixbalto@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:51:19 -0400 Subject: [PATCH 25/38] Continuous Door Opening Actions and Fixed Light in GridRowDoor (#1680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * clean * cleaner * rename open * formatting * cleaning * deleted print --------- Co-authored-by: “matrixbalto” <“ilfangliu@gmail.com”> Co-authored-by: Nishanth Kumar --- .../approaches/bridge_policy_approach.py | 2 +- predicators/envs/grid_row.py | 54 ++++++++++----- .../ground_truth_models/grid_row/nsrts.py | 54 +++++++++++---- .../ground_truth_models/grid_row/options.py | 41 +++++++---- tests/envs/test_grid_row.py | 69 +++++++++---------- 5 files changed, 140 insertions(+), 80 deletions(-) diff --git a/predicators/approaches/bridge_policy_approach.py b/predicators/approaches/bridge_policy_approach.py index 4a49f7a2b7..d8a1987c74 100644 --- a/predicators/approaches/bridge_policy_approach.py +++ b/predicators/approaches/bridge_policy_approach.py @@ -414,7 +414,7 @@ def call_planner_policy(self, state: State, _: Dict, __: Sequence[Object], raise_error_on_repeated_state=True, ) - return Action(np.array([0.0, 0.0, 0.0], dtype=np.float32)) + return Action(np.array([0.0, 0.0, 0.0, 0.0], dtype=np.float32)) def call_planner_nsrt(self) -> NSRT: """CallPlanner NSRT.""" diff --git a/predicators/envs/grid_row.py b/predicators/envs/grid_row.py index c2090b2ce7..94b7a86b17 100644 --- a/predicators/envs/grid_row.py +++ b/predicators/envs/grid_row.py @@ -188,8 +188,9 @@ class GridRowDoorEnv(GridRowEnv): def __init__(self, use_gui: bool = True) -> None: super().__init__(use_gui) - # type door with features ['x', and 'open'] - self._door_type = Type("door", ["x", 'open']) + self._door_type = Type( + "door", + ["x", "move_key", "move_target", "turn_key", "turn_target"]) self._door = Object("door", self._door_type) self._DoorInCell = Predicate("DoorInCell", @@ -241,7 +242,13 @@ def render_state_plt( facecolor="white") ax.add_patch(light) door_pos = state.get(self._door, "x") - if state.get(self._door, "open"): + door_move_key = state.get(self._door, "move_key") + door_move_key_target = state.get(self._door, "move_target") + door_turn_key = state.get(self._door, "turn_key") + door_turn_key_target = state.get(self._door, "turn_target") + if (door_move_key_target - 0.1 <= door_move_key <= \ + door_move_key_target + 0.1 and door_turn_key_target - 0.1 \ + <= door_turn_key <= door_turn_key_target + 0.1): door = plt.Rectangle((door_pos - self.cell_width / 2.0, 0), self.cell_width, self.cell_width, @@ -279,8 +286,8 @@ def types(self) -> Set[Type]: @property def action_space(self) -> Box: - # dx, dlight, ddoor - return Box(-np.inf, np.inf, (3, )) + # dx, dlight, dmove, dturn + return Box(-np.inf, np.inf, (4, )) def _get_tasks(self, num: int, rng: np.random.Generator) -> List[EnvironmentTask]: @@ -301,7 +308,10 @@ def _get_tasks(self, num: int, }, self._door: { "x": len(self._cells) // 2 + 0.5, - "open": 0.0 + "move_key": 0.0, + "move_target": 0.5, + "turn_key": 0.0, + "turn_target": 0.75 } } for i, cell in enumerate(self._cells): @@ -313,10 +323,13 @@ def _get_tasks(self, num: int, def simulate(self, state: State, action: Action) -> State: assert self.action_space.contains(action.arr) next_state = state.copy() - dx, dlight, ddoor = action.arr + dx, dlight, dmove, dturn = action.arr door_pos = state.get(self._door, "x") robbot_pos = state.get(self._robot, "x") - door_open = state.get(self._door, "open") + door_move_key = state.get(self._door, "move_key") + door_move_target = state.get(self._door, "move_target") + door_turn_key = state.get(self._door, "turn_key") + door_turn_target = state.get(self._door, "turn_target") robot_cells = [ c for c in self._cells if self._In_holds(state, [self._robot, c]) ] @@ -325,10 +338,18 @@ def simulate(self, state: State, action: Action) -> State: ] assert len(door_cells) == 1 # Apply ddoor if we're in same cell as door + # Can only open door, not close door_cell = door_cells[0] robot_cell = robot_cells[0] - if robot_cell == door_cell and not door_open and ddoor == 1.0: - next_state.set(self._door, "open", 1.0) + if robot_cell == door_cell and not (door_move_target - 0.1 \ + <= door_move_key <= door_move_target + 0.1 \ + and door_turn_target - 0.1 <= door_turn_key <= door_turn_target + 0.1): + new_door_level = np.clip( + state.get(self._door, "move_key") + dmove, 0.0, 1.0) + next_state.set(self._door, "move_key", new_door_level) + new_door1_level = np.clip( + state.get(self._door, "turn_key") + dturn, 0.0, 1.0) + next_state.set(self._door, "turn_key", new_door1_level) # Apply dlight if we're in the same cell as the light. assert len(robot_cells) == 1 light_cells = [ @@ -336,16 +357,15 @@ def simulate(self, state: State, action: Action) -> State: ] assert len(light_cells) == 1 light_cell = light_cells[0] - if robot_cell == light_cell: - new_light_level = np.clip( - state.get(self._light, "level") + dlight, 0.0, 1.0) - next_state.set(self._light, "level", new_light_level) + if robot_cell == light_cell and dlight == 0.75 and self._LightOff_holds( + state, [self._light]): + next_state.set(self._light, "level", 0.75) - if door_open == 1.0 or (robbot_pos <= door_pos - and robbot_pos + dx <= door_pos): + if (door_move_target - 0.1 <= door_move_key <= door_move_target + 0.1 \ + and door_turn_target - 0.1 <= door_turn_key <= door_turn_target + 0.1) \ + or (robbot_pos <= door_pos and robbot_pos + dx <= door_pos): # Apply dx to robot. new_x = np.clip( state.get(self._robot, "x") + dx, 0.0, len(self._cells)) next_state.set(self._robot, "x", new_x) - return next_state diff --git a/predicators/ground_truth_models/grid_row/nsrts.py b/predicators/ground_truth_models/grid_row/nsrts.py index fe476b49ac..7e3c08a791 100644 --- a/predicators/ground_truth_models/grid_row/nsrts.py +++ b/predicators/ground_truth_models/grid_row/nsrts.py @@ -178,16 +178,18 @@ def get_nsrts(env_name: str, types: Dict[str, Type], MoveRobot = options["MoveRobot"] TurnOnLight = options["TurnOnLight"] TurnOffLight = options["TurnOffLight"] - OpenDoor = options["OpenDoor"] + # OpenDoor = options["OpenDoor"] + MoveKey = options["MoveKey"] + TurnKey = options["TurnKey"] nsrts = set() def light_sampler(state: State, goal: Set[GroundAtom], - rng: np.random.Generator, + _: np.random.Generator, objs: Sequence[Object]) -> Array: del state, goal, objs # unused # Note: just return a random value from -1 to 1 - return np.array([rng.uniform(-1.0, 1.0)], dtype=np.float32) + return np.array([0.75], dtype=np.float32) # MoveRobot robot = Variable("?robot", robot_type) @@ -260,20 +262,44 @@ def light_sampler(state: State, goal: Set[GroundAtom], option, option_vars, light_sampler) nsrts.add(turn_light_off_nsrt) - # OpenDoor - def door_sampler(state: State, goal: Set[GroundAtom], - rng: np.random.Generator, - objs: Sequence[Object]) -> Array: + # MoveKey + def move_key_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: del state, goal, objs # unused - # Note: return 1.0 to show door is now open - return np.array([rng.uniform(1.0, 1.0)], dtype=np.float32) + return np.array([rng.uniform(-1.0, 1.0)], dtype=np.float32) + + robot = Variable("?robot", robot_type) + current_cell = Variable("?current_cell", cell_type) + door = Variable("?door", door_type) + parameters = [robot, current_cell, door] + option_vars = parameters + option = MoveKey + preconditions = { + LiftedAtom(DoorInCell, [door, current_cell]), + LiftedAtom(RobotInCell, [robot, current_cell]), + } + add_effects = set() + delete_effects = set() + ignore_effects = set() + move_key_nsrt = NSRT("MoveKey", parameters, preconditions, add_effects, + delete_effects, ignore_effects, option, + option_vars, move_key_sampler) + nsrts.add(move_key_nsrt) + + # TurnKey + def turn_key_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: + del state, goal, objs # unused + return np.array([rng.uniform(-1.0, 1.0)], dtype=np.float32) robot = Variable("?robot", robot_type) current_cell = Variable("?current_cell", cell_type) door = Variable("?door", door_type) parameters = [robot, current_cell, door] option_vars = parameters - option = OpenDoor + option = TurnKey preconditions = { LiftedAtom(DoorInCell, [door, current_cell]), LiftedAtom(RobotInCell, [robot, current_cell]), @@ -281,9 +307,9 @@ def door_sampler(state: State, goal: Set[GroundAtom], add_effects = set() delete_effects = set() ignore_effects = set() - open_door_nsrt = NSRT("OpenDoor", parameters, preconditions, - add_effects, delete_effects, ignore_effects, - option, option_vars, door_sampler) - nsrts.add(open_door_nsrt) + turn_key_nsrt = NSRT("TurnKey", parameters, preconditions, add_effects, + delete_effects, ignore_effects, option, + option_vars, turn_key_sampler) + nsrts.add(turn_key_nsrt) return nsrts diff --git a/predicators/ground_truth_models/grid_row/options.py b/predicators/ground_truth_models/grid_row/options.py index ce513b5665..07d33357c1 100644 --- a/predicators/ground_truth_models/grid_row/options.py +++ b/predicators/ground_truth_models/grid_row/options.py @@ -107,7 +107,7 @@ def _MoveTo_policy(state: State, memory: Dict, rob_x = state.get(robot, "x") target_x = state.get(target_cell, "x") dx = target_x - rob_x - return Action(np.array([dx, 0.0, 0.0], dtype=np.float32)) + return Action(np.array([dx, 0.0, 0.0, 0.0], dtype=np.float32)) MoveRobot = utils.SingletonParameterizedOption( "MoveRobot", @@ -120,7 +120,7 @@ def _toggle_light_policy(state: State, memory: Dict, params: Array) -> Action: del state, objects, memory # unused dlight, = params - return Action(np.array([0.0, dlight, 0.0], dtype=np.float32)) + return Action(np.array([0.0, dlight, 0.0, 0.0], dtype=np.float32)) # TurnOnLight TurnOnLight = utils.SingletonParameterizedOption( @@ -138,19 +138,34 @@ def _toggle_light_policy(state: State, memory: Dict, params_space=Box(-1.0, 1.0, (1, )), ) - # OpenDoor - def _toggle_door_policy(state: State, memory: Dict, - objects: Sequence[Object], - params: Array) -> Action: + # MoveKey + def _move_key_policy(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> Action: del state, objects, memory # unused - ddoor, = params - return Action(np.array([0.0, 0.0, ddoor], dtype=np.float32)) + dmove, = params + return Action(np.array([0.0, 0.0, dmove, 0.0], dtype=np.float32)) - OpenDoor = utils.SingletonParameterizedOption( - "OpenDoor", + MoveKey = utils.SingletonParameterizedOption( + "MoveKey", types=[robot_type, cell_type, door_type], - policy=_toggle_door_policy, - params_space=Box(0.0, 1.0, (1, )), + policy=_move_key_policy, + params_space=Box(-1.0, 1.0, (1, )), + ) + + # TurnKey + def _turn_key_policy(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> Action: + del state, objects, memory # unused + dturn, = params + return Action(np.array([0.0, 0.0, 0.0, dturn], dtype=np.float32)) + + TurnKey = utils.SingletonParameterizedOption( + "TurnKey", + types=[robot_type, cell_type, door_type], + policy=_turn_key_policy, + params_space=Box(-1.0, 1.0, (1, )), ) - return {MoveRobot, TurnOnLight, TurnOffLight, OpenDoor} + return {MoveRobot, TurnOnLight, TurnOffLight, TurnKey, MoveKey} diff --git a/tests/envs/test_grid_row.py b/tests/envs/test_grid_row.py index 805d22ad4c..de4f379de9 100644 --- a/tests/envs/test_grid_row.py +++ b/tests/envs/test_grid_row.py @@ -173,9 +173,9 @@ def test_grid_row_door(): assert light_type.name == "light" assert robot_type.name == "robot" assert door_type.name == "door" - assert env.action_space.shape == (3, ) + assert env.action_space.shape == (4, ) nsrts = get_gt_nsrts(env.get_name(), env.predicates, options) - assert len(nsrts) == 4 + assert len(nsrts) == 5 assert len(options) == len(nsrts) env_train_tasks = env.get_train_tasks() assert len(env_train_tasks) == 1 @@ -184,8 +184,9 @@ def test_grid_row_door(): env_task = env_test_tasks[0] env.reset("test", 0) # Test NSRTs. - MoveRobot, OpenDoor, TurnOffLight, TurnOnLight = sorted(nsrts) - assert OpenDoor.name == "OpenDoor" + MoveKey, MoveRobot, TurnKey, TurnOffLight, TurnOnLight = sorted(nsrts) + assert MoveKey.name == "MoveKey" + assert TurnKey.name == "TurnKey" assert MoveRobot.name == "MoveRobot" assert TurnOffLight.name == "TurnOffLight" assert TurnOnLight.name == "TurnOnLight" @@ -203,13 +204,25 @@ def test_grid_row_door(): # First move to the light. state = init_state.copy() for cell, next_cell in zip(cell_order[:-1], cell_order[1:]): - if len(ground_nsrt_plan) == state.get(door, "x") - 0.5: - ground_nsrt_plan.append(OpenDoor.ground([robot, cell, door])) - ground_nsrt_plan.append(MoveRobot.ground([robot, cell, next_cell])) - else: - ground_nsrt_plan.append(MoveRobot.ground([robot, cell, next_cell])) - rng = np.random.default_rng(123) - for ground_nsrt in ground_nsrt_plan: + + if env._In_holds(state, [door, cell]): # pylint: disable=protected-access + for _ in range(100): + ground_nsrt = TurnKey.ground([robot, cell, door]) + option = ground_nsrt.sample_option(state, set(), rng) + action = option.policy(state) + state = env.simulate(state, action) + if 0.65 <= state.get(door, "turn_key") <= 0.85: + break + + ground_nsrt = MoveKey.ground([robot, cell, door]) + for _ in range(100): + option = ground_nsrt.sample_option(state, set(), rng) + action = option.policy(state) + state = env.simulate(state, action) + if 0.4 <= state.get(door, "move_key") <= 0.6: + break + ground_nsrt_plan.append(MoveRobot.ground([robot, cell, next_cell])) + ground_nsrt = ground_nsrt_plan[-1] assert all(a.holds(state) for a in ground_nsrt.preconditions) option = ground_nsrt.sample_option(state, set(), rng) assert option.initiable(state) @@ -219,31 +232,17 @@ def test_grid_row_door(): assert all(a.holds(state) for a in ground_nsrt.add_effects) assert not any(a.holds(state) for a in ground_nsrt.delete_effects) assert isinstance(env.render_state(state, task), list) - # Now repeatedly turn on the light until it succeeds. + + rng = np.random.default_rng(123) + + # Now turn on the light. ground_nsrt = TurnOnLight.ground([robot, cell_order[-1], light]) - for _ in range(100): - assert all(a.holds(state) for a in ground_nsrt.preconditions) - option = ground_nsrt.sample_option(state, set(), rng) - assert option.initiable(state) - action = option.policy(state) - state = env.simulate(state, action) - assert option.terminal(state) - if all(a.holds(state) for a in ground_nsrt.add_effects): - break - assert isinstance(env.render_state(state, task), list) - assert all(a.holds(state) for a in ground_nsrt.add_effects) - assert not any(a.holds(state) for a in ground_nsrt.delete_effects) - # Now repeatedly turn off the light until it succeeds. - ground_nsrt = TurnOffLight.ground([robot, cell_order[-1], light]) - for _ in range(100): - assert all(a.holds(state) for a in ground_nsrt.preconditions) - option = ground_nsrt.sample_option(state, set(), rng) - assert option.initiable(state) - action = option.policy(state) - state = env.simulate(state, action) - assert option.terminal(state) - if all(a.holds(state) for a in ground_nsrt.add_effects): - break + assert all(a.holds(state) for a in ground_nsrt.preconditions) + option = ground_nsrt.sample_option(state, set(), rng) + assert option.initiable(state) + action = option.policy(state) + state = env.simulate(state, action) + assert option.terminal(state) assert isinstance(env.render_state(state, task), list) assert all(a.holds(state) for a in ground_nsrt.add_effects) assert not any(a.holds(state) for a in ground_nsrt.delete_effects) From 1a167d664aee27a694e3c7945843108f5d4e3644 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Thu, 4 Jul 2024 23:32:34 -0700 Subject: [PATCH 26/38] No grammar search vlm invention baseline (#1688) --- .../grammar_search_invention_approach.py | 2 ++ .../test_grammar_search_invention_approach.py | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/predicators/approaches/grammar_search_invention_approach.py b/predicators/approaches/grammar_search_invention_approach.py index 5e6057f069..001ecc0d84 100644 --- a/predicators/approaches/grammar_search_invention_approach.py +++ b/predicators/approaches/grammar_search_invention_approach.py @@ -1032,6 +1032,8 @@ def learn_from_offline_dataset(self, dataset: Dataset) -> None: elif CFG.grammar_search_pred_selection_approach == "clustering": self._learned_predicates = self._select_predicates_by_clustering( candidates, self._initial_predicates, dataset, atom_dataset) + elif CFG.grammar_search_pred_selection_approach == "no_select": + self._learned_predicates = set(candidates.keys()) logging.info("Done.") # Now, rename these predicates to be compatible with PDDL planners! renamed_predicates: Set[Predicate] = set() diff --git a/tests/approaches/test_grammar_search_invention_approach.py b/tests/approaches/test_grammar_search_invention_approach.py index 140742b206..e33e4815b3 100644 --- a/tests/approaches/test_grammar_search_invention_approach.py +++ b/tests/approaches/test_grammar_search_invention_approach.py @@ -201,6 +201,35 @@ def test_invention_from_txt_file(): assert approach._get_current_predicates() == env.goal_predicates # pylint:disable=protected-access +def test_no_select_invention(): + """Test loading a dataset from a txt file using the no_select method.""" + utils.reset_config({ + "env": "ice_tea_making", + "num_train_tasks": 1, + "num_test_tasks": 0, + "offline_data_method": "demo+labelled_atoms", + "data_dir": "tests/datasets/mock_vlm_datasets", + "handmade_demo_filename": + "ice_tea_making__demo+labelled_atoms__manual__1.txt", + "grammar_search_pred_selection_approach": "no_select", + "disable_harmlessness_check": True + }) + env = IceTeaMakingEnv() + train_tasks = env.get_train_tasks() + predicates, _ = utils.parse_config_excluded_predicates(env) + loaded_dataset = create_dataset(env, train_tasks, + get_gt_options(env.get_name()), predicates) + approach = GrammarSearchInventionApproach(env.goal_predicates, + get_gt_options(env.get_name()), + env.types, env.action_space, + train_tasks) + approach.learn_from_offline_dataset(loaded_dataset) + # The ice_tea_making__demo+labelled_atoms__manual__1.txt happens to + # set all atoms to True at all timesteps. Normal predicate invention + # would only select the goal predicate, but in our case, we get more! + assert len(approach._get_current_predicates()) == 7 # pylint:disable=protected-access + + def test_geo_and_vlm_invention(): """Test constructing an atom dataset with both geo and vlm predicates.""" utils.reset_config({ From 61724fddf6a0a99470b3aaaa7f6aa5c44de5c19f Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Wed, 17 Jul 2024 11:37:13 +0200 Subject: [PATCH 27/38] Fixes + QoL improvements to the pretrained model interface (#1691) --- predicators/pretrained_model_interface.py | 57 +++++++++++++++++++---- predicators/utils.py | 13 +++++- tests/test_pretrained_model_interface.py | 16 ++++++- 3 files changed, 73 insertions(+), 13 deletions(-) diff --git a/predicators/pretrained_model_interface.py b/predicators/pretrained_model_interface.py index ee4ac685d2..dfd779b8f6 100644 --- a/predicators/pretrained_model_interface.py +++ b/predicators/pretrained_model_interface.py @@ -196,6 +196,22 @@ def call_openai_api(self, return completion.choices[0].message.content +class GoogleGeminiModel(): + """Common interface and methods for all Gemini-based models. + + Assumes that an environment variable GOOGLE_API_KEY is set with the + necessary API key to query the particular model name. + """ + + def __init__(self, model_name: str) -> None: + """See https://ai.google.dev/models/gemini for the list of available + model names.""" + self._model_name = model_name + assert "GOOGLE_API_KEY" in os.environ + genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) + self._model = genai.GenerativeModel(self._model_name) # pylint:disable=no-member + + class OpenAILLM(LargeLanguageModel, OpenAIModel): """Interface to openAI LLMs. @@ -225,7 +241,7 @@ def _sample_completions( stop_token: Optional[str] = None, num_completions: int = 1) -> List[str]: # pragma: no cover del imgs, seed, stop_token # unused - messages = [{"text": prompt, "type": "text"}] + messages = [{"role": "user", "content": prompt, "type": "text"}] responses = [ self.call_openai_api(messages, model=self._model_name, @@ -235,24 +251,44 @@ def _sample_completions( return responses -class GoogleGeminiVLM(VisionLanguageModel): +class GoogleGeminiLLM(LargeLanguageModel, GoogleGeminiModel): """Interface to the Google Gemini VLM (1.5). Assumes that an environment variable GOOGLE_API_KEY is set with the necessary API key to query the particular model name. """ - def __init__(self, model_name: str) -> None: - """See https://ai.google.dev/models/gemini for the list of available - model names.""" - self._model_name = model_name - assert "GOOGLE_API_KEY" in os.environ - genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) - self._model = genai.GenerativeModel(self._model_name) # pylint:disable=no-member + @retry(wait=wait_random_exponential(min=1, max=60), + stop=stop_after_attempt(10)) + def _sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: # pragma: no cover + del seed, stop_token # unused + assert imgs is None + generation_config = genai.types.GenerationConfig( # pylint:disable=no-member + candidate_count=num_completions, + temperature=temperature) + response = self._model.generate_content( + [prompt], generation_config=generation_config) # type: ignore + response.resolve() + return [response.text] def get_id(self) -> str: return f"Google-{self._model_name}" + +class GoogleGeminiVLM(VisionLanguageModel, GoogleGeminiModel): + """Interface to the Google Gemini VLM (1.5). + + Assumes that an environment variable GOOGLE_API_KEY is set with the + necessary API key to query the particular model name. + """ + @retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(10)) def _sample_completions( @@ -274,6 +310,9 @@ def _sample_completions( response.resolve() return [response.text] + def get_id(self) -> str: + return f"Google-{self._model_name}" + class OpenAIVLM(VisionLanguageModel, OpenAIModel): """Interface for OpenAI's VLMs, including GPT-4 Turbo (and preview diff --git a/predicators/utils.py b/predicators/utils.py index 83bf8bba52..f2034dbca1 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -44,8 +44,9 @@ from scipy.stats import beta as BetaRV from predicators.args import create_arg_parser -from predicators.pretrained_model_interface import GoogleGeminiVLM, \ - OpenAIVLM, VisionLanguageModel +from predicators.pretrained_model_interface import GoogleGeminiLLM, \ + GoogleGeminiVLM, LargeLanguageModel, OpenAILLM, OpenAIVLM, \ + VisionLanguageModel from predicators.pybullet_helpers.joint import JointPositions from predicators.settings import CFG, GlobalSettings from predicators.structs import NSRT, Action, Array, DummyOption, \ @@ -2234,6 +2235,14 @@ def create_vlm_by_name( return OpenAIVLM(model_name) +def create_llm_by_name( + model_name: str) -> LargeLanguageModel: # pragma: no cover + """Create particular llm using a provided name.""" + if "gemini" in model_name: + return GoogleGeminiLLM(model_name) + return OpenAILLM(model_name) + + def query_vlm_for_atom_vals( vlm_atoms: Collection[GroundAtom], state: State, diff --git a/tests/test_pretrained_model_interface.py b/tests/test_pretrained_model_interface.py index 51aa3d8d81..e1a3f10875 100644 --- a/tests/test_pretrained_model_interface.py +++ b/tests/test_pretrained_model_interface.py @@ -7,8 +7,9 @@ from PIL import Image from predicators import utils -from predicators.pretrained_model_interface import GoogleGeminiVLM, \ - LargeLanguageModel, OpenAILLM, OpenAIVLM, VisionLanguageModel +from predicators.pretrained_model_interface import GoogleGeminiLLM, \ + GoogleGeminiVLM, LargeLanguageModel, OpenAILLM, OpenAIVLM, \ + VisionLanguageModel class _DummyLLM(LargeLanguageModel): @@ -157,6 +158,17 @@ def test_gemini_vlm(): assert vlm.get_id() == "Google-gemini-pro-vision" +def test_gemini_llm(): + """Tests for GoogleGeminiLLM().""" + cache_dir = "_fake_llm_cache_dir" + utils.reset_config({"pretrained_model_prompt_cache_dir": cache_dir}) + if "GOOGLE_API_KEY" not in os.environ: # pragma: no cover + os.environ["GOOGLE_API_KEY"] = "dummy API key" + # Create an OpenAILLM with the curie model. + vlm = GoogleGeminiLLM("gemini-1.5-pro") + assert vlm.get_id() == "Google-gemini-1.5-pro" + + def test_openai_vlm(): """Tests for GoogleGeminiVLM().""" cache_dir = "_fake_llm_cache_dir" From 5397abb595a8c788ed9bf6f1cf6d3e5af2f038d5 Mon Sep 17 00:00:00 2001 From: Alicia Li <102700848+matrixbalto@users.noreply.github.com> Date: Thu, 25 Jul 2024 17:01:20 -0400 Subject: [PATCH 28/38] Added DoorKnobs Environment! (#1693) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * doorknobs added * testing * linting * more linting * refactor * more refactoring * small edit * cleaning * refactoring options * more refactoring * linter * minior fixes * coverage * more linting --------- Co-authored-by: “matrixbalto” <“ilfangliu@gmail.com”> Co-authored-by: NishanthJKumar --- predicators/envs/doors.py | 280 +++++++++++++++++- .../ground_truth_models/doors/nsrts.py | 156 ++++++---- .../ground_truth_models/doors/options.py | 225 +++++++++++++- predicators/settings.py | 4 + tests/envs/test_doors_env.py | 212 ++++++++++++- 5 files changed, 805 insertions(+), 72 deletions(-) diff --git a/predicators/envs/doors.py b/predicators/envs/doors.py index 4c6af5fc99..f95a5c4ce3 100644 --- a/predicators/envs/doors.py +++ b/predicators/envs/doors.py @@ -13,8 +13,8 @@ from predicators import utils from predicators.envs import BaseEnv from predicators.settings import CFG -from predicators.structs import Action, EnvironmentTask, GroundAtom, Object, \ - Predicate, State, Type +from predicators.structs import Action, Array, EnvironmentTask, GroundAtom, \ + Object, Predicate, State, Type from predicators.utils import Rectangle, StateWithCache, _Geom2D @@ -81,9 +81,10 @@ def __init__(self, use_gui: bool = True) -> None: def get_name(cls) -> str: return "doors" - def simulate(self, state: State, action: Action) -> State: + def simulate_moving(self, state: State, action: Action) -> State: + """helper function to simulate moving.""" assert self.action_space.contains(action.arr) - dx, dy, new_door_rot = action.arr + dx, dy, _ = action.arr x = state.get(self._robot, "x") y = state.get(self._robot, "y") new_x = x + dx @@ -96,6 +97,11 @@ def simulate(self, state: State, action: Action) -> State: # Revert the change to the robot position. next_state.set(self._robot, "x", x) next_state.set(self._robot, "y", y) + return next_state + + def simulate(self, state: State, action: Action) -> State: + new_door_rot = action.arr[2] + next_state = self.simulate_moving(state, action) # If touching a door, change its value based on the action. for door in state.get_objects(self._door_type): if self._TouchingDoor_holds(state, [self._robot, door]): @@ -292,9 +298,21 @@ def _sample_initial_state_from_map(self, room_map: NDArray, feat_dict = self._sample_door_feats( room_x, room_y, name, rng) state_dict[door] = feat_dict + + if self.get_name() == "doorknobs": + assert isinstance(self, DoorKnobsEnv) + #Create doorknobs + doorknob = Object( + f"room{task_id}-{r}-{c}-{name}-doorknob", + self._knob_type) + feat_dict = self._sample_doorknob_feats( + room_x, room_y, name, rng) + state_dict[doorknob] = feat_dict + self._door_to_knob[door] = doorknob # Sample obstacles for each room. Make them small and centered # enough that the robot should almost always be able to find a # collision-free path through the room. + for room in rooms: room_x = state_dict[room]["x"] room_y = state_dict[room]["y"] @@ -729,3 +747,257 @@ def _get_open_door_target_value(mass: float, friction: float, # A made up complicated function. return np.tanh(target_rot) * (np.sin(mass) + np.cos(friction) * np.sqrt(mass)) + + +class DoorKnobsEnv(DoorsEnv): + """A 2D navigation environment with obstacles, rooms, and doors.""" + # Types + _door_type = Type("door", ["x", "y", "theta", "mass", "friction", "open"]) + _knob_type = Type("knob", ["x", "y", "theta", "rot", "target_rot", "open"]) + open_door_thresh: ClassVar[float] = 0.1 + + def __init__(self, use_gui: bool = True) -> None: + super().__init__(use_gui) + self._door_to_knob: Dict[Object, Object] = {} + self._open_door_target_value = CFG.doorknobs_target_value + + @classmethod + def get_name(cls) -> str: + return "doorknobs" + + def simulate(self, state: State, action: Action) -> State: + new_door_rot = action.arr[2] + next_state = self.simulate_moving(state, action) + + # If touching a door, change its value based on the action. + for door in state.get_objects(self._door_type): + + if self._TouchingDoor_holds(state, [self._robot, door]): + # Get corresponding doorknob and rotate it accordingly + doorknob = self._door_to_knob[door] + new_door_level = np.clip( + state.get(doorknob, "rot") + new_door_rot, 0.0, 1.0) + next_state.set(doorknob, "rot", new_door_level) + # Check if we should now open the door. + target = self._open_door_target_value + if abs(new_door_level - target) < self.open_door_thresh: + next_state.set(door, "open", 1.0) + next_state.set(doorknob, "open", 1.0) + else: + next_state.set(door, "open", 0.0) + return next_state + + def _generate_train_tasks(self) -> List[EnvironmentTask]: + self._room_map_size = CFG.doors_room_map_size + return self._get_tasks(num=CFG.num_train_tasks, rng=self._train_rng) + + def _generate_test_tasks(self) -> List[EnvironmentTask]: + self._room_map_size = CFG.test_doors_room_map_size + return self._get_tasks(num=CFG.num_test_tasks, rng=self._test_rng) + + @property + def predicates(self) -> Set[Predicate]: + return { + self._InRoom, + self._InDoorway, + self._DoorInRoom, + self._InMainRoom, + self._DoorsShareRoom, + } + + @property + def goal_predicates(self) -> Set[Predicate]: + return {self._InRoom} + + @property + def types(self) -> Set[Type]: + return { + self._robot_type, self._door_type, self._knob_type, + self._room_type, self._obstacle_type + } + + @classmethod + def state_has_collision(cls, state: State, robot_pos: \ + Optional[Array] = None) -> bool: + """Public for use by oracle options.""" + robot, = state.get_objects(cls._robot_type) + robot_geom = cls.object_to_geom(robot, state, robot_pos) + # Check for collisions with obstacles. + for obstacle in state.get_objects(cls._obstacle_type): + obstacle_geom = cls.object_to_geom(obstacle, state) + if robot_geom.intersects(obstacle_geom): + return True + # Check for collisions with closed doors. + for door in state.get_objects(cls._door_type): + if cls._DoorIsOpen_holds(state, [door]): + continue + door_geom = cls.object_to_geom(door, state) + if robot_geom.intersects(door_geom): + return True + return False + + @property + def action_space(self) -> Box: + # dx, dy, drot + lb = np.array( + [-self.action_magnitude, -self.action_magnitude, -np.inf], + dtype=np.float32) + ub = np.array([self.action_magnitude, self.action_magnitude, np.inf], + dtype=np.float32) + return Box(lb, ub) + + def render_state_plt( + self, + state: State, + task: EnvironmentTask, + action: Optional[Action] = None, + caption: Optional[str] = None) -> matplotlib.figure.Figure: + del caption # unused + x_lb, x_ub, y_lb, y_ub = self._get_world_boundaries(state) + fig, ax = plt.subplots(1, 1, figsize=(x_ub - x_lb, y_ub - y_lb)) + + # Draw rooms. + default_room_color = "lightgray" + in_room_color = "lightsteelblue" + goal_room_color = "khaki" + goal_room = next(iter(task.goal)).objects[1] + for room in state.get_objects(self._room_type): + room_geom = self.object_to_geom(room, state) + if room == goal_room: + color = goal_room_color + elif self._InRoom_holds(state, [self._robot, room]): + color = in_room_color + else: + color = default_room_color + room_geom.plot(ax, color=color) + + # Draw robot. + robot_color = "blue" + robot_geom = self.object_to_geom(self._robot, state) + robot_geom.plot(ax, color=robot_color) + + # Draw obstacles (including room walls). + obstacle_color = "black" + for obstacle in state.get_objects(self._obstacle_type): + obstacle_geom = self.object_to_geom(obstacle, state) + obstacle_geom.plot(ax, color=obstacle_color) + + # Draw doors. + closed_door_color = "orangered" + open_door_color = "lightgreen" + doorway_color = "darkviolet" + for door in state.get_objects(self._door_type): + if self._DoorIsOpen_holds(state, [door]): + color = open_door_color + else: + color = closed_door_color + door_geom = self.object_to_geom(door, state) + door_geom.plot(ax, color=color) + if CFG.doors_draw_debug: + doorway_geom = self.door_to_doorway_geom(door, state) + doorway_geom.plot(ax, color=doorway_color, alpha=0.1) + + # Visualize the motion plan. + if CFG.doors_draw_debug: + if action is not None and action.has_option(): + option = action.get_option() + if "position_plan" in option.memory: + xs, ys = zip(*option.memory["position_plan"]) + plt.scatter(xs, ys, s=3, alpha=0.5, color=robot_color) + + pad = 2 * self.wall_depth + ax.set_xlim(x_lb - pad, x_ub + pad) + ax.set_ylim(y_lb - pad, y_ub + pad) + + plt.axis("off") + plt.tight_layout() + return fig + + @classmethod + def object_to_geom(cls, + obj: Object, + state: State, + robot_pos: Optional[Array] = None) -> _Geom2D: + """Public for use by oracle options.""" + if robot_pos is None: + x = state.get(obj, "x") + y = state.get(obj, "y") + else: + x, y = robot_pos + if obj.is_instance(cls._robot_type): + return utils.Circle(x, y, cls.robot_radius) + # Only the robot shape is dynamic. All other shapes are cached. + assert isinstance(state, StateWithCache) + static_geom_cache = state.cache["static_geom"] + if obj not in static_geom_cache: + if obj.is_instance(cls._room_type): + width = cls.room_size + height = cls.room_size + theta = 0.0 + elif obj.is_instance(cls._door_type): + width = cls.hallway_width + height = cls.wall_depth + theta = state.get(obj, "theta") + elif obj.is_instance(cls._knob_type): + width = cls.hallway_width # pragma: no cover + height = cls.wall_depth # pragma: no cover + theta = state.get(obj, "theta") # pragma: no cover + else: + assert obj.is_instance(cls._obstacle_type) + width = state.get(obj, "width") + height = state.get(obj, "height") + theta = state.get(obj, "theta") + geom = Rectangle(x=x, y=y, width=width, height=height, theta=theta) + static_geom_cache[obj] = geom + return static_geom_cache[obj] + + def _sample_door_feats(self, room_x: float, room_y: float, loc: str, + rng: np.random.Generator) -> Dict[str, float]: + # This is the length of the wall on one side of the door. + offset = (self.room_size + self.wall_depth - self.hallway_width) / 2 + + if loc == "bottom": + x = room_x + offset + y = room_y - self.wall_depth / 2 + theta = 0.0 + else: + assert loc == "left" + x = room_x + self.wall_depth / 2 + y = room_y + offset + theta = np.pi / 2 + + mass, friction, _ = rng.uniform(0.0, 1.0, size=(3, )) + return { + "x": x, + "y": y, + "theta": theta, + "mass": mass, + "friction": friction, + "open": 0.0, # always start out closed + } + + def _sample_doorknob_feats(self, room_x: float, room_y: float, loc: str, + _: np.random.Generator) -> Dict[str, float]: + # This is the length of the wall on one side of the door. + offset = (self.room_size + self.wall_depth - self.hallway_width) / 2 + + if loc == "bottom": + x = room_x + offset + y = room_y - self.wall_depth / 2 + theta = 0.0 + else: + assert loc == "left" + x = room_x + self.wall_depth / 2 + y = room_y + offset + theta = np.pi / 2 + + target_rot = 0.75 + # Sample the initial rotation so that the door is not yet opened. + return { + "x": x, + "y": y, + "theta": theta, + "rot": 0, + "target_rot": target_rot, + "open": 0.0, # always start out closed + } diff --git a/predicators/ground_truth_models/doors/nsrts.py b/predicators/ground_truth_models/doors/nsrts.py index af0698ebd7..8d26cce23f 100644 --- a/predicators/ground_truth_models/doors/nsrts.py +++ b/predicators/ground_truth_models/doors/nsrts.py @@ -5,7 +5,7 @@ import numpy as np from predicators.envs import get_or_create_env -from predicators.envs.doors import DoorsEnv +from predicators.envs.doors import DoorKnobsEnv, DoorsEnv from predicators.ground_truth_models import GroundTruthNSRTFactory from predicators.structs import NSRT, Array, GroundAtom, LiftedAtom, Object, \ ParameterizedOption, Predicate, State, Type, Variable @@ -32,11 +32,14 @@ def get_nsrts(env_name: str, types: Dict[str, Type], InRoom = predicates["InRoom"] InDoorway = predicates["InDoorway"] InMainRoom = predicates["InMainRoom"] - TouchingDoor = predicates["TouchingDoor"] - DoorIsOpen = predicates["DoorIsOpen"] + DoorInRoom = predicates["DoorInRoom"] DoorsShareRoom = predicates["DoorsShareRoom"] + if env_name == "doors": + TouchingDoor = predicates["TouchingDoor"] + DoorIsOpen = predicates["DoorIsOpen"] + # Options MoveToDoor = options["MoveToDoor"] OpenDoor = options["OpenDoor"] @@ -57,10 +60,11 @@ def get_nsrts(env_name: str, types: Dict[str, Type], LiftedAtom(InMainRoom, [robot, room]), LiftedAtom(DoorInRoom, [door, room]), } - add_effects = { - LiftedAtom(TouchingDoor, [robot, door]), - LiftedAtom(InDoorway, [robot, door]) - } + add_effects = {LiftedAtom(InDoorway, [robot, door])} + + if env_name == "doors": + add_effects.add(LiftedAtom(TouchingDoor, [robot, door])) + delete_effects = {LiftedAtom(InMainRoom, [robot, room])} ignore_effects: Set[Predicate] = set() move_to_door_nsrt = NSRT("MoveToDoorFromMainRoom", parameters, @@ -80,10 +84,10 @@ def get_nsrts(env_name: str, types: Dict[str, Type], LiftedAtom(InDoorway, [robot, start_door]), LiftedAtom(DoorsShareRoom, [start_door, end_door]), } - add_effects = { - LiftedAtom(TouchingDoor, [robot, end_door]), - LiftedAtom(InDoorway, [robot, end_door]) - } + add_effects = {LiftedAtom(InDoorway, [robot, end_door])} + if env_name == "doors": + add_effects.add(LiftedAtom(TouchingDoor, [robot, end_door])) + delete_effects = {LiftedAtom(InDoorway, [robot, start_door])} ignore_effects = set() move_to_door_nsrt = NSRT("MoveToDoorFromDoorWay", parameters, @@ -93,53 +97,79 @@ def get_nsrts(env_name: str, types: Dict[str, Type], nsrts.add(move_to_door_nsrt) # OpenDoor - robot = Variable("?robot", robot_type) - door = Variable("?door", door_type) - parameters = [door, robot] - option_vars = [door, robot] - option = OpenDoor - preconditions = { - LiftedAtom(TouchingDoor, [robot, door]), - LiftedAtom(InDoorway, [robot, door]), - } - add_effects = {LiftedAtom(DoorIsOpen, [door])} - delete_effects = { - LiftedAtom(TouchingDoor, [robot, door]), - } - ignore_effects = set() + if env_name == "doors": + robot = Variable("?robot", robot_type) + door = Variable("?door", door_type) + parameters = [door, robot] + option_vars = [door, robot] + option = OpenDoor + preconditions = { + LiftedAtom(TouchingDoor, [robot, door]), + LiftedAtom(InDoorway, [robot, door]), + } + add_effects = {LiftedAtom(DoorIsOpen, [door])} + delete_effects = { + LiftedAtom(TouchingDoor, [robot, door]), + } + ignore_effects = set() + + # Allow protected access because this is an oracle. \ + # Used in the sampler. + env = get_or_create_env(env_name) + assert isinstance(env, (DoorKnobsEnv, DoorsEnv)) + get_open_door_target_value = env._get_open_door_target_value # pylint: disable=protected-access + + # Even though this option does not need to be parameterized, + # we make it so, because we want to match the parameter + # space of the option that will get learned during option + # learning. This is useful for when we + # want to use sampler_learner = "oracle" too. + def open_door_sampler(state: State, goal: Set[GroundAtom], + rng: np.random.Generator, + objs: Sequence[Object]) -> Array: + del rng, goal # unused + door, _ = objs + assert door.is_instance(door_type) + # Calculate the desired change in the doors + # "rotation" feature. + # Allow protected access because this is an oracle. + mass = state.get(door, "mass") + friction = state.get(door, "friction") + target_rot = state.get(door, "target_rot") + target_val = get_open_door_target_value(mass=mass, + friction=friction, + target_rot=target_rot) + current_val = state.get(door, "rot") + delta_rot = target_val - current_val + # The door always changes from closed to open. + delta_open = 1.0 + return np.array([delta_rot, delta_open], dtype=np.float32) + + open_door_nsrt = NSRT("OpenDoor", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, open_door_sampler) + + elif env_name == "doorknobs": + robot = Variable("?robot", robot_type) + parameters = [robot] + option_vars = [robot] + option = OpenDoor + preconditions = set() + add_effects = set() + delete_effects = set() + ignore_effects = set() + + def open_doorknob_sampler(_: State, goal: Set[GroundAtom], + rng: np.random.Generator, + __: Sequence[Object]) -> Array: + del goal # unused # pragma: no cover + return np.array([rng.uniform(-1.0, 1.0)], + dtype=np.float32) # pragma: no cover + + open_door_nsrt = NSRT("OpenDoor", parameters, preconditions, + add_effects, delete_effects, ignore_effects, + option, option_vars, open_doorknob_sampler) - # Allow protected access because this is an oracle. Used in the sampler. - env = get_or_create_env(env_name) - assert isinstance(env, DoorsEnv) - get_open_door_target_value = env._get_open_door_target_value # pylint: disable=protected-access - - # Even though this option does not need to be parameterized, we make it - # so, because we want to match the parameter space of the option that - # will get learned during option learning. This is useful for when we - # want to use sampler_learner = "oracle" too. - def open_door_sampler(state: State, goal: Set[GroundAtom], - rng: np.random.Generator, - objs: Sequence[Object]) -> Array: - del rng, goal # unused - door, _ = objs - assert door.is_instance(door_type) - # Calculate the desired change in the doors "rotation" feature. - # Allow protected access because this is an oracle. - mass = state.get(door, "mass") - friction = state.get(door, "friction") - target_rot = state.get(door, "target_rot") - target_val = get_open_door_target_value(mass=mass, - friction=friction, - target_rot=target_rot) - current_val = state.get(door, "rot") - delta_rot = target_val - current_val - # The door always changes from closed to open. - delta_open = 1.0 - return np.array([delta_rot, delta_open], dtype=np.float32) - - open_door_nsrt = NSRT("OpenDoor", parameters, preconditions, - add_effects, delete_effects, ignore_effects, - option, option_vars, open_door_sampler) nsrts.add(open_door_nsrt) # MoveThroughDoor @@ -153,10 +183,12 @@ def open_door_sampler(state: State, goal: Set[GroundAtom], preconditions = { LiftedAtom(InRoom, [robot, start_room]), LiftedAtom(InDoorway, [robot, door]), - LiftedAtom(DoorIsOpen, [door]), LiftedAtom(DoorInRoom, [door, start_room]), LiftedAtom(DoorInRoom, [door, end_room]), } + if env_name == "doors": + preconditions.add(LiftedAtom(DoorIsOpen, [door])) + add_effects = { LiftedAtom(InRoom, [robot, end_room]), } @@ -171,3 +203,11 @@ def open_door_sampler(state: State, goal: Set[GroundAtom], nsrts.add(move_through_door_nsrt) return nsrts + + +class DoorknobsGroundTruthNSRTFactory(DoorsGroundTruthNSRTFactory): + """Ground-truth NSRTs for the doors environment.""" + + @classmethod + def get_env_names(cls) -> Set[str]: + return {"doorknobs"} diff --git a/predicators/ground_truth_models/doors/options.py b/predicators/ground_truth_models/doors/options.py index f81aa31f1e..d243e17df0 100644 --- a/predicators/ground_truth_models/doors/options.py +++ b/predicators/ground_truth_models/doors/options.py @@ -6,13 +6,14 @@ from gym.spaces import Box from predicators import utils -from predicators.envs.doors import DoorsEnv +from predicators.envs.doors import DoorKnobsEnv, DoorsEnv from predicators.ground_truth_models import GroundTruthOptionFactory from predicators.settings import CFG from predicators.structs import Action, Array, Object, \ ParameterizedInitiable, ParameterizedOption, ParameterizedPolicy, \ Predicate, State, Type -from predicators.utils import Rectangle, StateWithCache +from predicators.utils import Rectangle, SingletonParameterizedOption, \ + StateWithCache class DoorsGroundTruthOptionFactory(GroundTruthOptionFactory): @@ -22,6 +23,13 @@ class DoorsGroundTruthOptionFactory(GroundTruthOptionFactory): def get_env_names(cls) -> Set[str]: return {"doors"} + @staticmethod + def _MoveToDoor_policy(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> Action: + del state, objects, params # unused + assert memory["action_plan"], "Motion plan did not reach its goal" + return memory["action_plan"].pop(0) + @classmethod def get_options(cls, env_name: str, types: Dict[str, Type], predicates: Dict[str, Predicate], @@ -36,12 +44,6 @@ def get_options(cls, env_name: str, types: Dict[str, Type], InRoom = predicates["InRoom"] # MoveToDoor - def _MoveToDoor_policy(state: State, memory: Dict, - objects: Sequence[Object], - params: Array) -> Action: - del state, objects, params # unused - assert memory["action_plan"], "Motion plan did not reach its goal" - return memory["action_plan"].pop(0) def _MoveToDoor_terminal(state: State, memory: Dict, objects: Sequence[Object], @@ -57,7 +59,7 @@ def _MoveToDoor_terminal(state: State, memory: Dict, # No parameters; the option always moves to the doorway center. params_space=Box(0, 1, (0, )), # The policy is a motion planner. - policy=_MoveToDoor_policy, + policy=cls._MoveToDoor_policy, # Only initiable when the robot is in a room for the doory. initiable=cls._create_move_to_door_initiable(predicates), terminal=_MoveToDoor_terminal) @@ -293,3 +295,208 @@ def _get_position_in_doorway(cls, room: Object, door: Object, ty = (y0 + y1) / 2 position_cache[(room, door)] = (tx, ty) return position_cache[(room, door)] + + +class DoorknobsGroundTruthOptionFactory(DoorsGroundTruthOptionFactory): + """Ground-truth options for the doorknobs environment.""" + + @classmethod + def get_env_names(cls) -> Set[str]: + return {"doorknobs"} + + @classmethod + def get_options(cls, env_name: str, types: Dict[str, Type], + predicates: Dict[str, Predicate], + action_space: Box) -> Set[ParameterizedOption]: + + robot_type = types["robot"] + door_type = types["door"] + + InDoorway = predicates["InDoorway"] + InRoom = predicates["InRoom"] + + # MoveToDoor + + def _MoveToDoor_terminal(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> bool: + del memory, params # unused + # Terminate as soon as we are in the doorway. + robot, door = objects + return InDoorway.holds(state, [robot, door]) + + MoveToDoor = ParameterizedOption( + "MoveToDoor", + types=[robot_type, door_type], + # No parameters; the option always moves to the doorway center. + params_space=Box(0, 1, (0, )), + # The policy is a motion planner. + policy=cls._MoveToDoor_policy, + # Only initiable when the robot is in a room for the doory. + initiable=cls._create_move_to_door_initiable(predicates), + terminal=_MoveToDoor_terminal) + + # OpenDoor + def _OpenDoor_policy(_: State, memory: Dict, __: Sequence[Object], + params: Array) -> Action: + del memory # unused + delta_rot = params + return Action(np.array([0.0, 0.0, delta_rot], dtype=np.float32)) + + OpenDoor = SingletonParameterizedOption( + "OpenDoor", + types=[robot_type], + # Even though this option does not need to be parameterized, we + # make it so, because we want to match the parameter space of the + # option that will get learned during option learning. This is + # useful for when we want to use sampler_learner = "oracle" too. + params_space=Box(-np.inf, np.inf, (1, )), + policy=_OpenDoor_policy, + ) + + # MoveThroughDoor + def _MoveThroughDoor_terminal(state: State, memory: Dict, + objects: Sequence[Object], + params: Array) -> bool: + del params # unused + robot, door = objects + target_room = memory["target_room"] + # Sanity check: we should never leave the doorway. + assert InDoorway.holds(state, [robot, door]) + # Terminate as soon as we enter the other room. + return InRoom.holds(state, [ + robot, target_room + ]) or memory["starting_state"].pretty_str() == state.pretty_str() + + MoveThroughDoor = ParameterizedOption( + "MoveThroughDoor", + types=[robot_type, door_type], + # No parameters; the option always moves straight through. + params_space=Box(0, 1, (0, )), + # The policy just moves in a straight line. No motion planning + # required, because there are no obstacles in the doorway. + policy=cls._create_move_through_door_policy(action_space), + # Only initiable when the robot is in the doorway. + initiable=cls._create_move_through_door_initiable(predicates), + terminal=_MoveThroughDoor_terminal) + + return {MoveToDoor, OpenDoor, MoveThroughDoor} + + @classmethod + def _create_move_to_door_initiable( + cls, predicates: Dict[str, Predicate]) -> ParameterizedInitiable: + + InRoom = predicates["InRoom"] + + def initiable(state: State, memory: Dict, objects: Sequence[Object], + params: Array) -> bool: + del params # unused + robot, door = objects + # The robot must be in one of the rooms for the door. + for ro in DoorsEnv.door_to_rooms(door, state): + if InRoom.holds(state, [robot, ro]): + room = ro + break + else: + return False + # Make a plan and store it in memory for use in the policy. Note + # that policies are assumed to be deterministic, but RRT is + # stochastic. We enforce determinism by using a constant seed. + rng = np.random.default_rng(CFG.seed) + + room_rect = DoorsEnv.object_to_geom(room, state) + + def _sample_fn(_: Array) -> Array: + # Sample a point in the room that is far enough away from the + # wall (to save on collision checking). + assert isinstance(room_rect, Rectangle) # pragma: no cover + x_lb = room_rect.x + DoorsEnv.robot_radius # pragma: no cover + x_ub = room_rect.x + DoorsEnv.room_size - \ + DoorsEnv.robot_radius # pragma: no cover + y_lb = room_rect.y + DoorsEnv.robot_radius # pragma: no cover + y_ub = room_rect.y + DoorsEnv.room_size - \ + DoorsEnv.robot_radius # pragma: no cover + x = rng.uniform(x_lb, x_ub) # pragma: no cover + y = rng.uniform(y_lb, y_ub) # pragma: no cover + return np.array([x, y], dtype=np.float32) # pragma: no cover + + def _extend_fn(pt1: Array, pt2: Array) -> Iterator[Array]: + # Make sure that we obey the bounds on actions. + distance = np.linalg.norm(pt2 - pt1) + num = int(distance / DoorsEnv.action_magnitude) + 1 + for i in range(1, num + 1): + yield pt1 * (1 - i / num) + pt2 * i / num + + def _collision_fn(pt: Array) -> bool: + return DoorKnobsEnv.state_has_collision(state, pt) + + def _distance_fn(from_pt: Array, to_pt: Array) -> float: + return np.sum(np.subtract(from_pt, + to_pt)**2) # pragma: no cover + + birrt = utils.BiRRT(_sample_fn, + _extend_fn, + _collision_fn, + _distance_fn, + rng, + num_attempts=CFG.doors_birrt_num_attempts, + num_iters=CFG.doors_birrt_num_iters, + smooth_amt=CFG.doors_birrt_smooth_amt) + + # Set up the initial and target inputs for the motion planner. + robot_x = state.get(robot, "x") + robot_y = state.get(robot, "y") + target_x, target_y = cls._get_position_in_doorway( + room, door, state) + initial_state = np.array([robot_x, robot_y]) + target_state = np.array([target_x, target_y]) + # Run planning. + position_plan = birrt.query(initial_state, target_state) + # In very rare cases, motion planning fails (it is stochastic after + # all). In this case, determine the option to be not initiable. + if position_plan is None: # pragma: no cover + return False + # The position plan is used for the termination check, and for debug + # drawing in the rendering. + memory["position_plan"] = position_plan + # Convert the plan from position space to action space. + deltas = np.subtract(position_plan[1:], position_plan[:-1]) + action_plan = [ + Action(np.array([dx, dy, 0.0], dtype=np.float32)) + for (dx, dy) in deltas + ] + memory["action_plan"] = action_plan + return True + + return initiable + + @classmethod + def _create_move_through_door_initiable( + cls, predicates: Dict[str, Predicate]) -> ParameterizedInitiable: + + InDoorway = predicates["InDoorway"] + InRoom = predicates["InRoom"] + + def initiable(state: State, memory: Dict, objects: Sequence[Object], + params: Array) -> bool: + del params # unused + robot, door = objects + # The robot must be in the doorway. + if not InDoorway.holds(state, [robot, door]): + return False + # The door must be open. + # The option is initiable. Memorize the target -- otherwise, we + # wouldn't know which side of the door to move toward. + room1, room2 = DoorsEnv.door_to_rooms(door, state) + if InRoom.holds(state, [robot, room1]): + end_room = room2 + else: + assert InRoom.holds(state, [robot, room2]) + end_room = room1 + memory["target"] = cls._get_position_in_doorway( + end_room, door, state) + memory["target_room"] = end_room + memory["starting_state"] = state + return True + + return initiable diff --git a/predicators/settings.py b/predicators/settings.py index aecd64f4d1..95384beaf8 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -289,6 +289,10 @@ class GlobalSettings: doors_birrt_smooth_amt = 50 doors_draw_debug = False + # doorknobs env parameters + doorknobs_target_value = 0.75 + test_doors_room_map_size = 10 + # narrow_passage env parameters narrow_passage_open_door_refine_penalty = 0 narrow_passage_door_width_padding_lb = 1e-4 diff --git a/tests/envs/test_doors_env.py b/tests/envs/test_doors_env.py index 39ff11bad6..7add7c7184 100644 --- a/tests/envs/test_doors_env.py +++ b/tests/envs/test_doors_env.py @@ -2,8 +2,10 @@ import numpy as np from predicators import utils -from predicators.envs.doors import DoorsEnv +from predicators.envs.doors import DoorKnobsEnv, DoorsEnv from predicators.ground_truth_models import get_gt_options +from predicators.ground_truth_models.doors.nsrts import \ + DoorknobsGroundTruthNSRTFactory from predicators.structs import Action, EnvironmentTask, GroundAtom, Object, \ State @@ -229,3 +231,211 @@ def _get_delta_rot_to_open_door(door: Object, s: State) -> float: # OpenDoor is not initiable if we're not touching the door. assert not OpenDoor.ground([right_door, robot], [right_door_delta, 1.0]).initiable(state) + + +def test_doorknobs(): + """Tests for DoorKnobsEnv().""" + utils.reset_config({ + "env": "doors", + "doors_room_map_size": 2, + "test_doors_room_map_size": 2, + "doors_min_obstacles_per_room": 1, + "doors_max_obstacles_per_room": 1, + "doors_min_room_exists_frac": 1.0, + "doors_max_room_exists_frac": 1.0, + "doors_draw_debug": True, + }) + env = DoorKnobsEnv() + for task in env.get_train_tasks(): + for obj in task.init: + assert len(obj.type.feature_names) == len(task.init[obj]) + for task in env.get_test_tasks(): + for obj in task.init: + assert len(obj.type.feature_names) == len(task.init[obj]) + assert len(env.predicates) == 5 + DoorInRoom, DoorsShareRoom, InDoorway, InMainRoom, InRoom, \ + = sorted(env.predicates) + assert DoorInRoom.name == "DoorInRoom" + assert DoorsShareRoom.name == "DoorsShareRoom" + assert InDoorway.name == "InDoorway" + assert InMainRoom.name == "InMainRoom" + assert InRoom.name == "InRoom" + assert env.goal_predicates == {InRoom} + options = (get_gt_options(env.get_name())) + assert len(options) == 3 + MoveThroughDoor, MoveToDoor, OpenDoor = sorted( + get_gt_options(env.get_name())) + assert MoveThroughDoor.name == "MoveThroughDoor" + assert MoveToDoor.name == "MoveToDoor" + assert OpenDoor.name == "OpenDoor" + assert len(env.types) == 5 + door_type, knob_type, obstacle_type, robot_type, room_type = sorted( + env.types) + assert door_type.name == "door" + assert knob_type.name == "knob" + assert obstacle_type.name == "obstacle" + assert robot_type.name == "robot" + assert room_type.name == "room" + assert env.action_space.shape == (3, ) + # Create a custom initial state, with all rooms in the 2x2 grid, with the + # robot starting out in the top left, and obstacles in the top right and + # bottom left rooms. + state = env.get_train_tasks()[0].init.copy() + robot, = state.get_objects(robot_type) + rooms = state.get_objects(room_type) + assert len(rooms) == 4 + # Recall that the obstacles include the walls. + expected_num_walls = 24 + obstacles = state.get_objects(obstacle_type) + # Walls + 1 obstacle per room. + assert len(obstacles) == expected_num_walls + len(rooms) + doors = state.get_objects(door_type) + assert len(doors) == 4 + # Remove the obstacle from the top left room. + top_left_obstacles = [o for o in obstacles if "-0-0-obstacle" in o.name] + assert len(top_left_obstacles) == 1 + top_left_obstacle = top_left_obstacles[0] + state = utils.StateWithCache( + {o: state[o] + for o in state if o != top_left_obstacle}, state.cache) + # Put the robot in the middle of the top left room. + top_left_room, top_right_room, _, bottom_right_room = sorted(rooms) + room_cx = state.get(top_left_room, "x") + env.room_size / 2 + room_cy = state.get(top_left_room, "y") + env.room_size / 2 + state.set(robot, "x", room_cx) + state.set(robot, "y", room_cy) + # For later tests, make sure that the obstacle in the top right room is + # exactly in the center. + top_right_obstacles = [o for o in obstacles if "-0-1-obstacle" in o.name] + assert len(top_right_obstacles) == 1 + top_right_obstacle = top_right_obstacles[0] + w = state.get(top_right_obstacle, "width") + h = state.get(top_right_obstacle, "height") + x = state.get(top_right_room, "x") + env.room_size / 2 - w + y = state.get(top_right_room, "y") + env.room_size / 2 - h + state.set(top_right_obstacle, "x", x) + state.set(top_right_obstacle, "y", y) + state.set(top_right_obstacle, "theta", 0.0) + # Since we moved obstacles around, the caches in the original env will be + # wrong. Make a new env to be safe. + old_env = env + env = DoorKnobsEnv() + # types = {"robot": robot_type,"door": door_type, "knob": knob_type, + # "room": room_type, "obstacle": obstacle_type} + types = {t.name: t for t in env.types} + predicates = {p.name: p for p in env.predicates} + options = {o.name: o for o in options} + nsrts = DoorknobsGroundTruthNSRTFactory.get_nsrts\ + ("doorknobs", types,predicates, options) + assert len(nsrts) == 4 + env._door_to_knob = old_env._door_to_knob # pylint: disable=protected-access + # Since we removed the obstacle, there should be no collisions. + assert not env.state_has_collision( + state, + [state.get(robot, "x"), state.get(robot, "y")]) + assert GroundAtom(InRoom, [robot, top_left_room]).holds(state) + assert GroundAtom(InMainRoom, [robot, top_left_room]).holds(state) + # Create a task with a goal to move to the bottom right room. + goal_atom = GroundAtom(InRoom, [robot, bottom_right_room]) + goal = {goal_atom} + task = EnvironmentTask(state, goal) + env.render_state(state, task) + + ## Test simulate ## + + # Test that the robot is contained within the walls when moving in any + # direction, because the doors are initially closed. + for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: + action = Action(env.action_magnitude * + np.array([dx, dy, 0.0], dtype=np.float32)) + assert env.action_space.contains(action.arr) + s = state.copy() + for _ in range(50): + s = env.simulate(s, action) + # Should still be in the room. + assert GroundAtom(InRoom, [robot, top_left_room]).holds(state) + + # Test opening the door on the right. First, find the door. + top_doors = [d for d in doors \ + if GroundAtom(DoorInRoom, [d, top_left_room]).holds(state) and \ + GroundAtom(DoorInRoom, [d, top_right_room]).holds(state) + ] + assert len(top_doors) == 1 + top_door = top_doors[0] + # Move more than enough steps to touch the door. + action = Action(env.action_magnitude * + np.array([1.0, 0.0, 0.0], dtype=np.float32)) + s = state.copy() + for _ in range(50): + s = env.simulate(s, action) + # The door should start off closed. + # The robot should now be in the doorway and touching the door. + assert GroundAtom(InDoorway, [robot, top_door]).holds(s) + assert not GroundAtom(InMainRoom, [robot, top_left_room]).holds(s) + # Now, open the door. + action = Action(np.array([0.0, 0.0, 0.75], dtype=np.float32)) + s = env.simulate(s, action) + # The door should now be open. + # The robot should still be in the doorway, but not touching the door. + assert GroundAtom(InDoorway, [robot, top_door]).holds(s) + + # Test obstacle collisions. Continuing from the previous state, if we + # move to the right, we should run into the obstacle at the center of + # the room, and not pass it. + action = Action(env.action_magnitude * + np.array([1.0, 0.0, 0.0], dtype=np.float32)) + for _ in range(50): + s = env.simulate(s, action) + # The robot should still be on the left of the obstacle. + obstacle_x = s.get(top_right_obstacle, "x") + robot_x = s.get(robot, "x") + assert robot_x < obstacle_x + + ## Test options ## + + # Find the right door. + right_doors = [d for d in doors \ + if GroundAtom(DoorInRoom, [d, top_right_room]).holds(state) and \ + GroundAtom(DoorInRoom, [d, bottom_right_room]).holds(state) + ] + assert len(right_doors) == 1 + right_door = right_doors[0] + + # Test options working as expected. + + option_plan = [ + MoveToDoor.ground([robot, top_door], []), + OpenDoor.ground([robot], [0.75]), + MoveThroughDoor.ground([robot, top_door], []), + MoveToDoor.ground([robot, right_door], []), + OpenDoor.ground([robot], [0.75]), + MoveThroughDoor.ground([robot, right_door], []), + ] + policy = utils.option_plan_to_policy(option_plan) + traj = utils.run_policy_with_simulator( + policy, + env.simulate, + task.init, + lambda _: False, + max_num_steps=1000, + exceptions_to_break_on={utils.OptionExecutionFailure}) + assert goal_atom.holds(traj.states[-1]) + # Cover a few additional rendering cases. + env.render_state(traj.states[0], task, traj.actions[0]) + env.render_state(traj.states[-1], task) + # Test if MoveToDoor is initiable when in same room as door. + assert MoveToDoor.ground([robot, top_door], []).initiable(state) + + # Test options in cases where they are not initiable. + # MoveToDoor is not initiable if we're not already in the room. + assert not MoveToDoor.ground([robot, right_door], []).initiable(state) + + # MoveThroughDoor is not initiable if we're not in the doorway. + assert not MoveThroughDoor.ground([robot, top_door], []).initiable(state) + # or if we're in the doorway, but the door isn't open. + action = Action(env.action_magnitude * + np.array([1.0, 0.0, 0.0], dtype=np.float32)) + s = state.copy() + for _ in range(50): + s = env.simulate(s, action) + assert GroundAtom(InDoorway, [robot, top_door]).holds(s) From 8df9bda3f6a2dda008ea0f738af387567bec1d6d Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Sat, 27 Jul 2024 11:25:03 -0700 Subject: [PATCH 29/38] LLM-based operator learning (#1690) * making slow progress * making good progress; almost there! * good to go! * feature-complete! * good to go * fix checks * fix tests --- .../naive_no_examples.txt | 64 +++++ .../strips_learning/llm_strips_learner.py | 241 ++++++++++++++++++ predicators/structs.py | 6 + tests/envs/test_doors_env.py | 3 +- .../test_llm_strips_learner.py | 71 ++++++ 5 files changed, 384 insertions(+), 1 deletion(-) create mode 100644 predicators/nsrt_learning/strips_learning/llm_op_learning_prompts/naive_no_examples.txt create mode 100644 predicators/nsrt_learning/strips_learning/llm_strips_learner.py create mode 100644 tests/nsrt_learning/strips_learning/test_llm_strips_learner.py diff --git a/predicators/nsrt_learning/strips_learning/llm_op_learning_prompts/naive_no_examples.txt b/predicators/nsrt_learning/strips_learning/llm_op_learning_prompts/naive_no_examples.txt new file mode 100644 index 0000000000..3c9cdf825e --- /dev/null +++ b/predicators/nsrt_learning/strips_learning/llm_op_learning_prompts/naive_no_examples.txt @@ -0,0 +1,64 @@ +You are a system whose job is to learn PDDL-style operators given predicates and trajectory data. Specifically, given a list of predicates and types, as well as trajectories consisting states and actions, where every state is a set of true ground predicates (assume all predicates not mentioned in the state are false) and every action has a name and takes in particular objects, propose as many symbolic operators that might help model these states as you can. These operators will be used to plan on similar tasks. +An operator should have the form (note that the angle brackets here are just for clarifying the syntax; do not output angle brackets in your responses): +(, , ..., ) +preconditions: +add effects: +delete effects: +action: + + +Please structure your output in the following format (once again, angle brackets are just for syntax-clarification): +``` +Operators: + + + +... + +``` + + +Here's an example for a simple block-stacking domain. +Input: +``` +Types: +- block + +Predicates: +- (OnTable ?b0 - block) +- (Clear ?b0 - block) +- (On ?b0 - block ?b1 - block) +- (Handempty) + +Actions: +- Pickup(?b - block) +- PutDown(?b - block) + +Trajectory data: +Trajectory 0 (Goal: {Clear(A)}): +State 0: {OnTable(A), On(B, A), Handempty(), Clear(B), OnTable(B)} +Action 0: Pickup(B) +State 1: {Holding(B), OnTable(A), Clear(A)} +Action 1: PutDown(B) +State 2: {OnTable(A), OnTable(B), Handempty(), Clear(A), Clear(B)} +``` + +Expected Output: +``` +Operators: +PickupOp0(?b0 - block) +preconditions: (and (Clear ?b0) (Handempty) (OnTable ?b0)) +add effects: (and (Holding ?b0)) +delete effects: (and (Handempty) (OnTable ?b0) (Clear ?b0)) +action: Pickup(?b0) + +PlaceDownOp0(?b0 - block) +preconditions: (and (Holding ?b0)) +add effects: (and (Clear ?b0) (Handempty) (OnTable ?b0)) +delete effects: (and (Holding ?b0)) +action: Pickup(?b0) +``` +Explanation: +1. **PickUpOp0**: This operator models the action of picking up a block. It requires that the robot's hand be empty and the block be on table, and causes the robot to be holding the block. + +2. **PlaceDownOp0**: This operator models the action of placing down a block on the table. It requires that the robot is holding a block, and causes that block to be on the table, and the orbot's hand to be empty. diff --git a/predicators/nsrt_learning/strips_learning/llm_strips_learner.py b/predicators/nsrt_learning/strips_learning/llm_strips_learner.py new file mode 100644 index 0000000000..81a8209573 --- /dev/null +++ b/predicators/nsrt_learning/strips_learning/llm_strips_learner.py @@ -0,0 +1,241 @@ +"""Approaches that use an LLM to learn STRIPS operators instead of performing +symbolic learning of any kind.""" + +import re +from typing import Any, Dict, List, Optional, Set, Tuple + +from predicators import utils +from predicators.nsrt_learning.strips_learning import BaseSTRIPSLearner +from predicators.settings import CFG +from predicators.structs import PNAD, LiftedAtom, LowLevelTrajectory, \ + ParameterizedOption, Predicate, Segment, STRIPSOperator, Task, Type, \ + Variable + + +class LLMStripsLearner(BaseSTRIPSLearner): + """Base class for all LLM-based learners.""" + + def __init__(self, + trajectories: List[LowLevelTrajectory], + train_tasks: List[Task], + predicates: Set[Predicate], + segmented_trajs: List[List[Segment]], + verify_harmlessness: bool, + annotations: Optional[List[Any]], + verbose: bool = True) -> None: + super().__init__(trajectories, train_tasks, predicates, + segmented_trajs, verify_harmlessness, annotations, + verbose) + self._llm = utils.create_llm_by_name(CFG.llm_model_name) + prompt_file = utils.get_path_to_predicators_root() + \ + "/predicators/nsrt_learning/strips_learning/" + \ + "llm_op_learning_prompts/naive_no_examples.txt" + with open(prompt_file, "r", encoding="utf-8") as f: + self._base_prompt = f.read() + self._name_to_pred = {p.name: p for p in self._predicates} + + def _get_all_types_from_preds(self) -> Set[Type]: + all_types: Set[Type] = set() + for pred in self._predicates: + all_types |= set(pred.types) + return all_types + + def _get_all_options_from_segs(self) -> Set[ParameterizedOption]: + # NOTE: this assumes all segments in self._segmented_trajs + # have options associated with them. + all_options: Set[ParameterizedOption] = set() + for seg_traj in self._segmented_trajs: + for seg in seg_traj: + all_options.add(seg.get_option().parent) + return all_options + + def _parse_line_into_pred_names_and_arg_names( + self, line_str: str) -> List[Tuple[str, List[str]]]: + pattern = r'\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*([^\(\)]*)\)' + matches = re.findall(pattern, line_str) + predicates = [] + for match in matches: + predicate = match[0] + arguments = [ + arg.strip() for arg in match[1].split() if arg.strip() + ] + predicates.append((predicate, arguments)) + return predicates + + def _parse_option_str_into_opt_name_and_arg_names( + self, line_str: str) -> Tuple[str, List[str]]: + match = re.match(r'action: (\w+)\(([^)]*)\)', line_str) + if not match: # pragma: no cover + raise ValueError("The input string is not in the expected format.") + skill_name = match.group(1) + args = match.group(2).split(',') if match.group(2) else [] + args = [arg.strip() for arg in args] + return skill_name, args + + def _parse_operator_str_into_structured_elems( + self, op_str: str + ) -> Tuple[str, Dict[str, str], List[Tuple[str, List[str]]], List[Tuple[ + str, List[str]]], List[Tuple[str, List[str]]], Tuple[str, + List[str]]]: + op_str_elems = op_str.split('\n') + # Parse out operator name and args. + name_and_args = op_str_elems[0] + opening_paren_loc = name_and_args.find("(") + closing_paren_loc = name_and_args.find(")") + name_str = name_and_args[:opening_paren_loc] + arg_str = name_and_args[opening_paren_loc + 1:closing_paren_loc] + args = arg_str.split() + arg_dict = {} + for i in range(0, len(args), 3): + arg_name = args[i] + arg_type = args[i + 2] + arg_dict[arg_name] = arg_type + # Parse out structures for preconditions and effects. + structured_precs = self._parse_line_into_pred_names_and_arg_names( + op_str_elems[1]) + structured_add_effs = self._parse_line_into_pred_names_and_arg_names( + op_str_elems[2]) + structured_del_effs = self._parse_line_into_pred_names_and_arg_names( + op_str_elems[3]) + structured_action = self._parse_option_str_into_opt_name_and_arg_names( + op_str_elems[4]) + return (name_str, arg_dict, structured_precs, structured_add_effs, + structured_del_effs, structured_action) + + def _convert_structured_precs_or_effs_into_lifted_atom_set( + self, structured_precs_or_effs: List[Tuple[str, List[str]]], + pred_name_to_pred: Dict[str, Predicate], + op_var_name_to_op_var: Dict[str, Variable]) -> Set[LiftedAtom]: + ret_atoms = set() + for prec_name, prec_args_list in structured_precs_or_effs: + if prec_name not in pred_name_to_pred: + continue # pragma: no cover + all_args_valid = True + prec_arg_vars = [] + for prec_arg in prec_args_list: + if prec_arg not in op_var_name_to_op_var: # pragma: no cover + all_args_valid = False + break + prec_arg_vars.append(op_var_name_to_op_var[prec_arg]) + if not all_args_valid: + continue # pragma: no cover + ret_atoms.add( + LiftedAtom(pred_name_to_pred[prec_name], prec_arg_vars)) + return ret_atoms + + # NOTE: we actually do test this function, but the many sub-cases + # etc. make it annoying to test, so we pragma: no cover the + # whole thing. + def _learn(self) -> List[PNAD]: # pragma: no cover + """Overview of what's going on here: + + 1. Form a prompt that contains the object types, predicates, and + options in this env, as well as the training demonstration + trajectories. + 2. Query an LLM to return operators given the above information + from (1). + 3. Parse out symbolic operators from the LLM's response, with automatic + pruning of nonsensical/hallucinated operators. This is sufficient + info to make PNADs with empty datastores. + 4. Associate data with each PNAD via our + _find_best_matching_pnad_and_sub procedure; this populates the + PNAD's datastore. + """ + prompt = self._base_prompt + all_types = self._get_all_types_from_preds() + all_options = sorted(self._get_all_options_from_segs()) + type_name_to_type = {t.name: t for t in all_types} + pred_name_to_pred = {p.name: p for p in self._predicates} + option_name_to_option = {o.name: o for o in all_options} + prompt += "Types:\n" + for t in sorted(all_types): + prompt += f"- {t.name}\n" + prompt += "\nPredicates:\n" + for pred in sorted(self._predicates): + prompt += f"- {pred.pddl_str()}\n" + prompt += "\nActions:\n" + for act in all_options: + prompt += act.pddl_str() + "\n" + prompt += "\nTrajectory data:\n" + for i, seg_traj in enumerate(self._segmented_trajs): + curr_goal = self._train_tasks[i].goal + prompt += f"Trajectory {i} (Goal: {str(curr_goal)}):\n" + for timestep, seg in enumerate(seg_traj): + prompt += f"State {timestep}: {str(seg.init_atoms)}\n" + curr_option = seg.get_option() + action = curr_option.name + "(" + ", ".join( + obj.name for obj in curr_option.objects) + ")" + prompt += f"Action {timestep}: {action}" + prompt += f"State {timestep + 1}: {str(seg.final_atoms)}" # pylint:disable=undefined-loop-variable + prompt += "\n" + # Query the LLM to see what kinds of operators it proposes. + llm_response = self._llm.sample_completions(prompt, None, 0.0, + CFG.seed) + op_predictions = llm_response[0] + pattern = r'```\n(.*?)\n```' + matches = re.findall(pattern, op_predictions, re.DOTALL) + assert matches[0][:10] == "Operators:" + specific_op_prediction = matches[0][11:].split('\n\n') + # Now parse the operators into actual structured symbolic operators + # with associated option specs (i.e. PNADs, but without the + # datastores set). + pnads = [] + for op_pred in specific_op_prediction: + incorrect_op = False + name_str, arg_dict, structured_precs, structured_add_effs, \ + structured_del_effs, structured_action = \ + self._parse_operator_str_into_structured_elems(op_pred) + op_var_name_to_op_var = {} + for arg_name_str, arg_type_str in arg_dict.items(): + if arg_type_str not in type_name_to_type: + incorrect_op = True + break + op_var_name_to_op_var[arg_name_str] = Variable( + arg_name_str, type_name_to_type[arg_type_str]) + if incorrect_op: + continue + preconditions = \ + self._convert_structured_precs_or_effs_into_lifted_atom_set( + structured_precs, pred_name_to_pred, op_var_name_to_op_var) + add_effs = \ + self._convert_structured_precs_or_effs_into_lifted_atom_set( + structured_add_effs, pred_name_to_pred, op_var_name_to_op_var) + del_effs = \ + self._convert_structured_precs_or_effs_into_lifted_atom_set( + structured_del_effs, pred_name_to_pred, op_var_name_to_op_var) + option_name_str, option_args_strs_list = structured_action + if option_name_str not in option_name_to_option: + continue + option = option_name_to_option[option_name_str] + option_arg_vars = [] + for option_arg_str in option_args_strs_list: + if option_arg_str not in op_var_name_to_op_var: + incorrect_op = True + break + option_arg_vars.append(op_var_name_to_op_var[option_arg_str]) + if incorrect_op: + continue + # NOTE: for now, we do not create operators with ignore effects! + # This could be done in the future by modifying the LLM query + # prompt. + symbolic_op = STRIPSOperator(name_str, + list(op_var_name_to_op_var.values()), + preconditions, add_effs, del_effs, + set()) + pnad = PNAD(symbolic_op, [], (option, option_arg_vars)) + pnads.append(pnad) + # Finally, populate the datastore of each PNAD. + curr_pnad: Optional[PNAD] = None + for seg_traj in self._segmented_trajs: + for seg in seg_traj: + objects = set(seg.states[0]) + curr_pnad, var_to_obj_sub = \ + self._find_best_matching_pnad_and_sub(seg, objects, pnads) + if curr_pnad is not None: + assert var_to_obj_sub is not None + curr_pnad.add_to_datastore((seg, var_to_obj_sub)) + return pnads + + @classmethod + def get_name(cls) -> str: + return "llm" diff --git a/predicators/structs.py b/predicators/structs.py index cf703f2e3f..d058feae98 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -593,6 +593,12 @@ def ground(self, objects: Sequence[Object], params: Array) -> _Option: params=params, memory=memory) + def pddl_str(self) -> str: + """Turn this option into a string that is PDDL-like.""" + params_str = " ".join(f"?x{i} - {t.name}" + for i, t in enumerate(self.types)) + return f"{self.name}({params_str})" + @dataclass(eq=False) class _Option: diff --git a/tests/envs/test_doors_env.py b/tests/envs/test_doors_env.py index 7add7c7184..4b82a7e982 100644 --- a/tests/envs/test_doors_env.py +++ b/tests/envs/test_doors_env.py @@ -236,7 +236,7 @@ def _get_delta_rot_to_open_door(door: Object, s: State) -> float: def test_doorknobs(): """Tests for DoorKnobsEnv().""" utils.reset_config({ - "env": "doors", + "env": "doorknobs", "doors_room_map_size": 2, "test_doors_room_map_size": 2, "doors_min_obstacles_per_room": 1, @@ -325,6 +325,7 @@ def test_doorknobs(): types = {t.name: t for t in env.types} predicates = {p.name: p for p in env.predicates} options = {o.name: o for o in options} + assert DoorknobsGroundTruthNSRTFactory.get_env_names() == {"doorknobs"} nsrts = DoorknobsGroundTruthNSRTFactory.get_nsrts\ ("doorknobs", types,predicates, options) assert len(nsrts) == 4 diff --git a/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py b/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py new file mode 100644 index 0000000000..5316130117 --- /dev/null +++ b/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py @@ -0,0 +1,71 @@ +"""Tests for methods in the BaseSTRIPSLearner class.""" + +from predicators import utils +from predicators.datasets import create_dataset +from predicators.envs import create_new_env +from predicators.ground_truth_models import get_gt_options +from predicators.nsrt_learning.segmentation import segment_trajectory +from predicators.nsrt_learning.strips_learning.llm_strips_learner import \ + LLMStripsLearner +from predicators.pretrained_model_interface import LargeLanguageModel + + +class _DummyLLM(LargeLanguageModel): + + def get_id(self): + return "dummy" + + def _sample_completions(self, + prompt, + imgs, + temperature, + seed, + stop_token=None, + num_completions=1): + del imgs # unused. + completions = [] + for _ in range(num_completions): + # Hardcoded completion for 'cover'. + completion = """``` +Operators: +PickPlaceOp1(?b - block ?t - target) +preconditions: (and (Holding ?b) (IsTarget ?t)) +add effects: (and (Covers ?b ?t) (HandEmpty)) +delete effects: (and (Holding ?b)) +action: PickPlace() + +PickPlaceOp2(?b - block) +preconditions: (and (HandEmpty) (IsBlock ?b)) +add effects: (and (Holding ?b)) +delete effects: (and (HandEmpty)) +action: PickPlace() +``` +""" + completions.append(completion) + return completions + + +def test_llm_op_learning(): + """Test the operator learning approach using a dummy llm.""" + utils.reset_config({ + "env": "cover", + "strips_learner": "llm", + "num_train_tasks": 3 + }) + env = create_new_env("cover") + train_tasks = [t.task for t in env.get_train_tasks()] + predicates, _ = utils.parse_config_excluded_predicates(env) + dataset = create_dataset(env, train_tasks, get_gt_options(env.get_name()), + predicates) + segmented_trajs = [ + segment_trajectory(t, env.predicates) for t in dataset.trajectories + ] + learner = LLMStripsLearner(dataset.trajectories, + train_tasks, + env.predicates, + segmented_trajs, + verify_harmlessness=True, + annotations=None) + learner._llm = _DummyLLM() # pylint:disable=protected-access + pnads = learner._learn() # pylint:disable=protected-access + assert len(pnads) == 2 From d312e96a2d85fb4cb38449dc076c17a18af94e2b Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Sat, 27 Jul 2024 23:37:01 -0700 Subject: [PATCH 30/38] gtg (#1695) --- scripts/run_checks.sh | 2 +- .../strips_learning/test_llm_strips_learner.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/run_checks.sh b/scripts/run_checks.sh index 8e2beca2b6..5908ba8f96 100755 --- a/scripts/run_checks.sh +++ b/scripts/run_checks.sh @@ -27,7 +27,7 @@ else fi echo "Running unit tests." -pytest -s tests/ --cov-config=.coveragerc --cov=predicators/ --cov=tests/ --cov-fail-under=100 --cov-report=term-missing:skip-covered --durations=10 +pytest -s tests/ --cov-config=.coveragerc --cov=predicators/ --cov=tests/ --cov-fail-under=100 --cov-report=term-missing:skip-covered --durations=0 if [ $? -eq 0 ]; then echo "Unit tests passed." else diff --git a/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py b/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py index 5316130117..8c294db2d1 100644 --- a/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py +++ b/tests/nsrt_learning/strips_learning/test_llm_strips_learner.py @@ -1,5 +1,8 @@ """Tests for methods in the BaseSTRIPSLearner class.""" +import glob +import shutil + from predicators import utils from predicators.datasets import create_dataset from predicators.envs import create_new_env @@ -8,6 +11,7 @@ from predicators.nsrt_learning.strips_learning.llm_strips_learner import \ LLMStripsLearner from predicators.pretrained_model_interface import LargeLanguageModel +from predicators.settings import CFG class _DummyLLM(LargeLanguageModel): @@ -52,6 +56,10 @@ def test_llm_op_learning(): "strips_learner": "llm", "num_train_tasks": 3 }) + # start by flushing the pretrained models cache! + for f in glob.glob(CFG.pretrained_model_prompt_cache_dir + + "/dummy_most_likely*"): + shutil.rmtree(f) env = create_new_env("cover") train_tasks = [t.task for t in env.get_train_tasks()] predicates, _ = utils.parse_config_excluded_predicates(env) From 1ccf251f82f78b198335deeb96e0ece5393455d6 Mon Sep 17 00:00:00 2001 From: Bowen Li <56875617+Jaraxxus-Me@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:26:31 -0400 Subject: [PATCH 31/38] Bowen gnn (#1696) * modified gnn option * formatting * type def * all checks passed --- .../approaches/gnn_option_policy_approach.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/predicators/approaches/gnn_option_policy_approach.py b/predicators/approaches/gnn_option_policy_approach.py index 7ecd84b6cd..a001e4632e 100644 --- a/predicators/approaches/gnn_option_policy_approach.py +++ b/predicators/approaches/gnn_option_policy_approach.py @@ -199,7 +199,12 @@ def _solve_with_shooting(self, task: Task, start_time = time.perf_counter() memory: Dict = {} # optionally updated by predict() # Keep trying until the timeout. + tries: int = 0 + all_num_act: int = 0 + total_num_act: int = 0 while time.perf_counter() - start_time < timeout: + tries += 1 + all_num_act += total_num_act total_num_act = 0 state = task.init plan: List[_Option] = [] @@ -243,10 +248,13 @@ def _policy(s: State) -> Action: break # If num_act is zero, that means that the option is stuck in # the state, so we should break to avoid infinite loops. - if num_act == 0: - break - total_num_act += num_act # Break early if we have timed out. - if time.perf_counter() - start_time < timeout: + total_num_act += num_act + if time.perf_counter() - start_time > timeout: + break + if num_act == 0: break + all_num_act += total_num_act + print(f"Shooting: {all_num_act} actions with {tries} tries in \ + {time.perf_counter() - start_time} seconds") raise ApproachTimeout("Shooting timed out!") From 74d20fe7083617ea86fb4c68a754beb5709935fc Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Thu, 1 Aug 2024 09:03:23 -0700 Subject: [PATCH 32/38] minor (#1698) --- scripts/openstack/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/openstack/README.md b/scripts/openstack/README.md index bf224a4cd2..eb3335233c 100644 --- a/scripts/openstack/README.md +++ b/scripts/openstack/README.md @@ -3,7 +3,7 @@ 1. Request an account through the LIS group. See [here](https://tig.csail.mit.edu/shared-computing/open-stack/quick-start/). 2. Follow the [instructions for creating and uploading a private key](https://tig.csail.mit.edu/shared-computing/open-stack/openstack-ssh-key/). 3. Launch instances using the `predicators` image and your private key. Make sure to enable `allow_incoming_ssh` in the security settings when launching the instance so that the machine is actually accessible. Make sure you launch enough instances so that each (environment, approach, seed) can have one instance. - 1. You might need to create a new image. You can do this by launching an instance, ssh'ing it, installing everything you need, and then using the `Create Snapshot` Action on the instances dashboard. + 1. You might need to create a new image. You can do this by launching an instance, ssh'ing it, installing everything you need, and then using the `Create Snapshot` Action on the instances dashboard. To ssh a machine, find its IP on openstack, and do `ssh ubuntu@` (be sure you're on the MIT network)! 4. Create a file (e.g. `machines.txt`) that lists your instance IP addresses, one per line. Do not include anything on the line that isn't the IP address. 5. Create an experiment yaml file (see `scripts/openstack/configs/example_basic.yaml` for an example). 6. Run `python scripts/openstack/launch.py --config --machines --sshkey ` to launch your experiments. From 3cb4d6d41411bb2b1bd052ec081d12a71b5929a6 Mon Sep 17 00:00:00 2001 From: Yichao Liang Date: Sat, 3 Aug 2024 18:39:32 +0100 Subject: [PATCH 33/38] Update LLMOpenLoopApproach so it can also use Gemini models (#1700) * Add compatibility for LLMOpenLoopApproach to use GEMINI --------- Co-authored-by: yichao-liang --- .gitignore | 5 +++-- predicators/approaches/llm_open_loop_approach.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 6018f0798e..166d256c82 100644 --- a/.gitignore +++ b/.gitignore @@ -15,12 +15,13 @@ pylint_recursive.py .coverage results eval_trajectories +images videos -logs +logs* saved_approaches saved_datasets scripts/results -pretrained_model_cache +pretrained_model_cache* tests/datasets/mock_vlm_datasets/cache/ machines.txt *_vision_data diff --git a/predicators/approaches/llm_open_loop_approach.py b/predicators/approaches/llm_open_loop_approach.py index d438420e67..d16b4cdcb1 100644 --- a/predicators/approaches/llm_open_loop_approach.py +++ b/predicators/approaches/llm_open_loop_approach.py @@ -9,6 +9,15 @@ --num_test_tasks 1 \ --debug +Example using Gemini: + export GOOGLE_API_KEY= + python predicators/main.py --approach llm_open_loop --seed 0 \ + --strips_learner oracle \ + --env pddl_blocks_procedural_tasks \ + --num_train_tasks 3 \ + --num_test_tasks 1 \ + --debug --llm_model_name gemini-1.5-flash + Easier setting: python predicators/main.py --approach llm_open_loop --seed 0 \ --strips_learner oracle \ @@ -39,10 +48,10 @@ from predicators.approaches.nsrt_metacontroller_approach import \ NSRTMetacontrollerApproach from predicators.planning import task_plan_with_option_plan_constraint -from predicators.pretrained_model_interface import OpenAILLM from predicators.settings import CFG from predicators.structs import Box, Dataset, GroundAtom, Object, \ ParameterizedOption, Predicate, State, Task, Type, _GroundNSRT, _Option +from predicators.utils import create_llm_by_name class LLMOpenLoopApproach(NSRTMetacontrollerApproach): @@ -54,7 +63,7 @@ def __init__(self, initial_predicates: Set[Predicate], super().__init__(initial_predicates, initial_options, types, action_space, train_tasks) # Set up the LLM. - self._llm = OpenAILLM(CFG.llm_model_name) + self._llm = create_llm_by_name(CFG.llm_model_name) # Set after learning. self._prompt_prefix = "" From 0bb4c1678b2f30a873f517de25d8e076fe636708 Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Sat, 3 Aug 2024 10:46:26 -0700 Subject: [PATCH 34/38] modify codeowners to stop bothering tom (#1701) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3b2a7b7438..ae3bb78011 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # Default owners for all files. -* @tomsilver +* @NishanthJKumar From 57b3ab0efba5fef422aadf59c0f81f0054c05fc5 Mon Sep 17 00:00:00 2001 From: Yichao Liang Date: Sat, 3 Aug 2024 19:30:54 +0100 Subject: [PATCH 35/38] Introducing an INTERPRET-Inspired Baseline for VLM predicate (#1699) * draft generate dataset with vision api. use with flat --vlm_predicate_vision_api_generate_ground_atoms True * vision api baseline running * fix pylint * works with multiple demos * yapf" * fix mypy * improved regex * uncomment sample * restore accdentally deleted files and changes to docstrings * fix pylint * add test for lfd-vision-api * add pylint: disable=exec-used * yapf * add prompt file for pytest * fix tests * yapf * pylint style * git add tests * yapf * fix test * refactor * yapf --------- Co-authored-by: yichao-liang --- .gitignore | 2 + .../datasets/generate_atom_trajs_with_vlm.py | 184 +++++++++++++++++- .../vision_api/api_oo_state.txt | 138 +++++++++++++ .../vision_api/api_sym_predicate.txt | 26 +++ .../vision_api/prompt.outline | 27 +++ predicators/envs/burger.py | 3 - predicators/envs/cover.py | 12 +- predicators/envs/kitchen.py | 1 + predicators/settings.py | 1 + predicators/structs.py | 37 +++- tests/datasets/test_datasets.py | 60 +++++- 11 files changed, 468 insertions(+), 23 deletions(-) create mode 100644 predicators/datasets/vlm_input_data_prompts/vision_api/api_oo_state.txt create mode 100644 predicators/datasets/vlm_input_data_prompts/vision_api/api_sym_predicate.txt create mode 100644 predicators/datasets/vlm_input_data_prompts/vision_api/prompt.outline diff --git a/.gitignore b/.gitignore index 166d256c82..74eeb654f3 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,8 @@ tests/_fake_results sas_plan downward/ Gymnasium-Robotics/ +predicators/datasets/vlm_input_data_prompts/vision_api/prompt.txt +predicators/datasets/vlm_input_data_prompts/vision_api/response.txt # Jetbrains IDEs .idea/ diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index 2affe19e0c..fb71ae4ecd 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -5,10 +5,14 @@ import logging import os import re +import textwrap +import traceback from concurrent.futures import ThreadPoolExecutor from functools import partial +from inspect import getsource from pathlib import Path -from typing import Dict, Iterator, List, Optional, Sequence, Set, Tuple, cast +from typing import Dict, Iterator, List, Match, Optional, Sequence, Set, \ + Tuple, cast import dill as pkl import numpy as np @@ -673,7 +677,7 @@ def _parse_vlmtraj_file_into_structured_trajs( return (output_state_trajs, output_action_trajs) -def _query_vlm_to_generate_ground_atoms_trajs( +def _generate_ground_atoms_with_vlm_pure_visual_preds( image_option_trajs: List[ImageOptionTrajectory], env: BaseEnv, train_tasks: List[Task], known_predicates: Set[Predicate], all_task_objs: Set[Object], @@ -735,6 +739,171 @@ def _query_vlm_to_generate_ground_atoms_trajs( return ground_atoms_trajs +def _generate_ground_atoms_with_vlm_oo_code_gen( + image_option_trajs: List[ImageOptionTrajectory], env: BaseEnv, + train_tasks: List[Task], known_predicates: Set[Predicate], + all_task_objs: Set[Object], + vlm: VisionLanguageModel) -> List[List[Set[GroundAtom]]]: + """Given a collection of ImageOptionTrajectories, query a VLM to generate + predicates over the object features, then generate a ground atom + trajectory.""" + del all_task_objs # Unused. + candidates = set() + for io_traj in image_option_trajs: + # 1. Create a prompt based on the image option trajectory. + prompt, imgs = _create_prompt_from_image_option_traj(io_traj, env) + + # 2. Query the VLM to propose predicates. + response = vlm.sample_completions(prompt, + imgs, + 0.0, + CFG.seed, + num_completions=1)[0] + + # 3. Parse the responses into a set of predicates + candidates |= _parse_predicate_proposals(response, train_tasks, env) + + # 4. Generate the ground atom trajectories from the predicates. + ground_atoms_trajs = [] + for image_option_traj in image_option_trajs: + ground_atoms_traj = [] + assert image_option_traj.states is not None + for state in image_option_traj.states: + ground_atoms = utils.abstract(state, candidates | known_predicates) + ground_atoms_traj.append(ground_atoms) + ground_atoms_trajs.append(ground_atoms_traj) + return ground_atoms_trajs + + +def add_python_quote(text: str) -> str: + """Add python quotes to a string.""" + return f"```python\n{text}\n```" + + +def _create_prompt_from_image_option_traj( + image_option_traj: ImageOptionTrajectory, + env: BaseEnv) -> Tuple[str, List[PIL.Image.Image]]: + """Given an image option trajectory, create a prompt for the VLM.""" + prompt_dir = "predicators/datasets/vlm_input_data_prompts/vision_api/" + with open(prompt_dir + "prompt.outline", "r", encoding="utf-8") as f: + template = f.read() + + # Predicate, State API + with open(prompt_dir + 'api_oo_state.txt', 'r', encoding="utf-8") as f: + state_str = f.read() + with open(prompt_dir + 'api_sym_predicate.txt', 'r', + encoding="utf-8") as f: + pred_str = f.read() + + template = template.replace( + '[STRUCT_DEFINITION]', add_python_quote(state_str + '\n\n' + pred_str)) + + # Object types + type_instan_str = _env_type_str(getsource(env.__class__)) + type_instan_str = add_python_quote(type_instan_str) + template = template.replace("[TYPES_IN_ENV]", type_instan_str) + + # Demo + demo_str = [] + imgs = [img_list[0] for img_list in image_option_traj.imgs] + assert image_option_traj.states is not None + for i, a in enumerate(image_option_traj.actions): + state = image_option_traj.states[i] + demo_str.append(f"state {i}:") + demo_str.append(state.dict_str(indent=2, object_features=True)) + demo_str.append(f"action {i}: {a.name}") + num_states = len(image_option_traj.states) + state = image_option_traj.states[-1] + demo_str.append(f"state {num_states}:") + demo_str.append(state.dict_str(indent=2, object_features=True)) + demo_str_ = '\n'.join(demo_str) + template = template.replace("[DEMO_TRAJECTORY]", demo_str_) + + with open(prompt_dir + 'prompt.txt', 'w', encoding="utf-8") as f: + f.write(template) + + return template, imgs + + +import_str = """ +import numpy as np +from typing import Sequence +from predicators.structs import State, Object, Predicate, Type +""" + + +def _env_type_str(source_code: str) -> str: + """Extract the type definitions from the environment source code. + + Requires the types be defined class variabled under `# Types` as in + cover, burger and kitchen. + """ + type_pattern = r"( # Types.*?)(?=\n\s*\n|$)" + type_block = re.search(type_pattern, source_code, re.DOTALL) + if type_block is not None: + type_init_str = type_block.group() + type_init_str = textwrap.dedent(type_init_str) + # type_init_str = add_python_quote(type_init_str) + return type_init_str + raise Exception("No type definitions found in the env") # pragma: no cover + + +def _parse_predicate_proposals( + response: str, + tasks: List[Task], + env: BaseEnv, +) -> Set[Predicate]: + """Parse the prediction file to extract the proposed predicates.""" + # Regular expression to match Python code blocks + pattern = re.compile(r'```python(.*?)```', re.DOTALL) + python_blocks = [] + # Find all Python code blocks in the text + for match_block in pattern.finditer(response): + # Extract the Python code block and add it to the list + python_blocks.append(match_block.group(1).strip()) + + candidates = set() + context: Dict = {} + + env_source_code = getsource(env.__class__) + type_init_str = _env_type_str(env_source_code) + # constants_str = self._constants_str(self.env_source_code) + # pylint: disable=exec-used + # Disabling exec-used warning because pylint dislike exec + exec(import_str, context) + exec(type_init_str, context) + # pylint: enable=exec-used + + for code_str in python_blocks: + # Extract name from code block + match: Optional[Match[str]] = re.search( + r'(\w+)(: Predicate)?\s*=\s*Predicate', code_str) + if match is None: + logging.warning("No predicate name found in the code block") + continue + pred_name = match.group(1) + logging.info(f"Found definition for predicate {pred_name}") + + # Try to check if it's roughly runable. And only add it to + # our list if it is. + try: + # pylint: disable=exec-used + exec(code_str, context) + # pylint: enable=exec-used + utils.abstract(tasks[0].init, [context[pred_name]]) + except (TypeError, AttributeError, ValueError) as e: + # Was using Exception but pylint was complaining, so I'm + # adding specific exceptions to this tuple as we encounter them. + error_trace = traceback.format_exc() + logging.warning(f"Proposed predicate {pred_name} not " + f"executable: {e}\n{error_trace}") + continue + else: + candidates.add(context[pred_name]) + + return candidates + + def create_ground_atom_data_from_generated_demos( dataset: Dataset, env: BaseEnv, @@ -816,9 +985,12 @@ def create_ground_atom_data_from_generated_demos( # Now, given these trajectories, we can query the VLM. if vlm is None: vlm = utils.create_vlm_by_name(CFG.vlm_model_name) # pragma: no cover - ground_atoms_trajs = _query_vlm_to_generate_ground_atoms_trajs( - img_option_trajs, env, train_tasks, known_predicates, all_task_objs, - vlm) + if CFG.vlm_predicate_vision_api_generate_ground_atoms: + generate_func = _generate_ground_atoms_with_vlm_oo_code_gen + else: + generate_func = _generate_ground_atoms_with_vlm_pure_visual_preds + ground_atoms_trajs = generate_func(img_option_trajs, env, train_tasks, + known_predicates, all_task_objs, vlm) return Dataset(option_segmented_trajs, ground_atoms_trajs) @@ -989,7 +1161,7 @@ def create_ground_atom_data_from_saved_img_trajs( # atoms that might be relevant to decision-making. if vlm is None: vlm = utils.create_vlm_by_name(CFG.vlm_model_name) # pragma: no cover - ground_atoms_trajs = _query_vlm_to_generate_ground_atoms_trajs( + ground_atoms_trajs = _generate_ground_atoms_with_vlm_pure_visual_preds( image_option_trajs, env, train_tasks, known_predicates, all_task_objs, vlm) # Finally, we just need to construct LowLevelTrajectories that we can diff --git a/predicators/datasets/vlm_input_data_prompts/vision_api/api_oo_state.txt b/predicators/datasets/vlm_input_data_prompts/vision_api/api_oo_state.txt new file mode 100644 index 0000000000..811308af27 --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/vision_api/api_oo_state.txt @@ -0,0 +1,138 @@ +class State: + """A class representing the low-level state of the world. + + Attributes: + ----------- + data : Dict[Object, Array] + A dictionary mapping objects to their feature vectors. The feature vectors are numpy arrays. + + simulator_state : Optional[Any] + Some environments may need to store additional simulator state. This field is provided for that purpose. It is optional and defaults to None. + + Methods: + -------- + get(self, obj: Object, feature_name: str) -> Any: + This method looks up an object feature by name. It returns the value of + the feature. + + get_objects(self, object_type: Type) -> List[Object]: + This method returns objects of the given type in the order of + __iter__(). + """ + data: Dict[Object, Array] + # Some environments will need to store additional simulator state, so + # this field is provided. + simulator_state: Optional[Any] = None + + def get(self, obj: Object, feature_name: str) -> Any: + """Look up an object feature by name. + + Parameters: + ----------- + obj : Object + The object whose feature value is to be retrieved. + feature_name : str + The name of the feature to be retrieved. + + Returns: + -------- + Any + The value of the specified feature for the given object. + + Raises: + ------- + ValueError + If the specified feature name is not found in the object's type feature names. + + Examples: + --------- + >>> # An example for predicate Covers + >>> _block_type = Type("block", ["is_block", "is_target", "width", + "pose", "grasp"]) + >>> _target_type = Type("target", ["is_block", "is_target", "width", + "pose"]) + >>> block1 = Object("block1", _block_type) + >>> target1 = Object("target1", _target_type) + >>> state = State({ + block1: np.array([1.0, 0.0, 0.1, 0.2, -1.0]), + target1: np.array([0.0, 1.0, 0.05, 0.4])}) + >>> def _Covers_holds(state: State, objects: Sequence[Object]) -> + bool: + >>> block, target = objects + >>> block_pose = state.get(block, "pose") + >>> block_width = state.get(block, "width") + >>> target_pose = state.get(target, "pose") + >>> target_width = state.get(target, "width") + >>> return (block_pose-block_width/2 <= \ + target_pose-target_width/2) and \ + (block_pose+block_width/2 >= \ + target_pose+target_width/2) and \ + state.get(block, "grasp") == -1 + >>> _Covers = Predicate("Covers", [_block_type, _target_type], + _Covers_holds) + + >>> # Another example for predicate On + >>> _block_type = Type("block", ["pose_x", "pose_y", "pose_z", + "held", "color_r", "color_g", "color_b"]) + >>> block1 = Object("block1", _block_type) + >>> block2 = Object("block2", _block_type) + >>> state = State({ + block1: np.array([1.0, 3.0, 0.2, 0.0, 1.0, 0.0, 0.0]), + block2: np.array([2.0, 3.0, 0.3, 0.0, 0.0, 1.0, 0.0])}) + >>> on_tol = 0.01 + >>> def _On_holds(self, state: State, objects: Sequence[Object]) ->\ + bool: + >>> block1, block2 = objects + >>> if state.get(block1, "held") >= self.held_tol or \ + >>> state.get(block2, "held") >= self.held_tol: + >>> return False + >>> x1 = state.get(block1, "pose_x") + >>> y1 = state.get(block1, "pose_y") + >>> z1 = state.get(block1, "pose_z") + >>> x2 = state.get(block2, "pose_x") + >>> y2 = state.get(block2, "pose_y") + >>> z2 = state.get(block2, "pose_z") + >>> return np.allclose([x1, y1, z1], + [x2, y2, z2 + self._block_size], + atol=on_tol) + >>> _On = Predicate("On", [_block_type, _block_type], + _On_holds) + """ + + def get_objects(self, object_type: Type) -> List[Object]: + """Return objects of the given type in the order of __iter__(). + + Parameters: + ----------- + object_type : Type + The type of the objects to be retrieved. + + Returns: + -------- + List[Object] + A list of objects of the specified type, in the order they are + iterated over in the state. + + Examples: + --------- + >>> _robot_type = Type("robot", + ["x", "y", "z", "tilt", "wrist", "fingers"]) + >>> _cup_type = Type("cup", + ["x", "y", "capacity_liquid", "target_liquid", "current_liquid"]) + >>> robot = Object("robby", _robot_type) + >>> cup1 = Object("cup1", _cup_type) + >>> cup2 = Object("cup2", _cup_type) + >>> state = State({ + robot: np.array([5.0, 5.0, 10.0, 0.0, 0.0, 0.4]), + cup1: np.array([3.0, 2.0, 1.0, 0.75, 0.0]), + cup2: np.array([5.0, 6.0, 1.5, 1.125, 0.0])}) + >>> def _NotAboveCup_holds(state: State, + >>> objects: Sequence[Object]) -> bool: + >>> robot, jug = objects + >>> for cup in state.get_objects(_cup_type): + >>> if _robot_jug_above_cup(state, cup): + >>> return False + >>> return True + >>> _NotAboveCup = Predicate("NotAboveCup", [_robot_type, _jug_type], + _NotAboveCup_holds) + """ \ No newline at end of file diff --git a/predicators/datasets/vlm_input_data_prompts/vision_api/api_sym_predicate.txt b/predicators/datasets/vlm_input_data_prompts/vision_api/api_sym_predicate.txt new file mode 100644 index 0000000000..644405f360 --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/vision_api/api_sym_predicate.txt @@ -0,0 +1,26 @@ +class Predicate: + """A class representing a predicate (a lifted classifier over states) in + the context of AI task planning. The function takes a state and a sequence + of objects as input, and returns a boolean value indicating whether the + property holds for those objects in that state. + + Attributes: + ----------- + name : str + The name of the predicate. + + types : Sequence[Type] + The types of the objects that the predicate applies to. This sequence + should have the same length as the sequence of objects passed to the + classifier. + + _classifier : Callable[[State, Sequence[Object]], bool] + The classifier function for the predicate. This function takes a state + and a sequence of objects as input, and returns a boolean value. The + objects in the sequence should correspond one-to-one with the types in + the 'types' attribute. The classifier should return True if the + predicate holds for those objects in that state, and False otherwise. + """ + name: str + types: Sequence[Type] + _classifier: Callable[[State, Sequence[Object]], bool] diff --git a/predicators/datasets/vlm_input_data_prompts/vision_api/prompt.outline b/predicators/datasets/vlm_input_data_prompts/vision_api/prompt.outline new file mode 100644 index 0000000000..4d6ff651bb --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/vision_api/prompt.outline @@ -0,0 +1,27 @@ +You are a robotic vision system whose job is to output a structured set of predicates useful for describing important concepts in the following demonstration of a task. You will be provided with a list of actions used during the task, as well as images of states before and after every action execution. +Generating predicates that change before and after each action. After this, generate any other predicates that perhaps do not change but are still important to describing the demonstration shown. For each predicate you generate, also generate some predicates that are synonyms and antonyms so that any predicate that is even tangentially relevant to the demonstrations is generated. + +I will describe the API you should use for writing predicates and the environment the robot is in. +# API for Defining Predicates +Class definitions for `Predicate` and `State` are: +[STRUCT_DEFINITION] + +# The Environment +The environment includes the following object-type variables: +[TYPES_IN_ENV] + +# The demo trajectory is +[DEMO_TRAJECTORY] + +In your response, propose predicates in paragraphs as follows. For each proposal: +- Identify which property from above does it correspond to. +- Define predicate in a python block as follows: +```python +def classifier(state: State, objects: Sequence[Object]) -> bool: + # Implement the boolean classifier function here + ... + +name: str = ... # Define the predicate name here +param_types: Sequence[Type] = ... # A list of object-type variables for the predicate, using the ones defined in the environment + = Predicate(name, param_types, _holds) +``` \ No newline at end of file diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index 36fd55342d..3b4e9ba06d 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -58,16 +58,13 @@ class BurgerEnv(BaseEnv): _object_type = Type("object", []) _item_type = Type("item", [], _object_type) _station_type = Type("station", [], _object_type) - _robot_type = Type("robot", ["row", "col", "z", "fingers", "dir"], _object_type) - _patty_type = Type("patty", ["row", "col", "z"], _item_type) _tomato_type = Type("tomato", ["row", "col", "z"], _item_type) _cheese_type = Type("cheese", ["row", "col", "z"], _item_type) _bottom_bun_type = Type("bottom_bun", ["row", "col", "z"], _item_type) _top_bun_type = Type("top_bun", ["row", "col", "z"], _item_type) - _grill_type = Type("grill", ["row", "col", "z"], _station_type) _cutting_board_type = Type("cutting_board", ["row", "col", "z"], _station_type) diff --git a/predicators/envs/cover.py b/predicators/envs/cover.py index 1e2cb58fcd..1ff8f6b74b 100644 --- a/predicators/envs/cover.py +++ b/predicators/envs/cover.py @@ -27,15 +27,15 @@ class CoverEnv(BaseEnv): workspace_x: ClassVar[float] = 1.35 workspace_z: ClassVar[float] = 0.65 + # Types + _block_type = Type("block", + ["is_block", "is_target", "width", "pose", "grasp"]) + _target_type = Type("target", ["is_block", "is_target", "width", "pose"]) + _robot_type = Type("robot", ["hand", "pose_x", "pose_z"]) + def __init__(self, use_gui: bool = True) -> None: super().__init__(use_gui) - # Types - self._block_type = Type( - "block", ["is_block", "is_target", "width", "pose", "grasp"]) - self._target_type = Type("target", - ["is_block", "is_target", "width", "pose"]) - self._robot_type = Type("robot", ["hand", "pose_x", "pose_z"]) # Predicates self._IsBlock = Predicate("IsBlock", [self._block_type], self._IsBlock_holds) diff --git a/predicators/envs/kitchen.py b/predicators/envs/kitchen.py index 6201c2e2f8..bab273fb34 100644 --- a/predicators/envs/kitchen.py +++ b/predicators/envs/kitchen.py @@ -49,6 +49,7 @@ class KitchenEnv(BaseEnv): """Kitchen environment wrapping dm_control Kitchen.""" + # Types object_type = Type("object", ["x", "y", "z"]) gripper_type = Type("gripper", ["x", "y", "z", "qw", "qx", "qy", "qz"], parent=object_type) diff --git a/predicators/settings.py b/predicators/settings.py index 95384beaf8..7e232e2070 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -689,6 +689,7 @@ class GlobalSettings: # filepath to be used if offline_data_method is set to # saved_vlm_img_demos_folder vlm_trajs_folder_name = "" + vlm_predicate_vision_api_generate_ground_atoms = False @classmethod def get_arg_specific_settings(cls, args: Dict[str, Any]) -> Dict[str, Any]: diff --git a/predicators/structs.py b/predicators/structs.py index d058feae98..cf93c4f733 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -203,6 +203,36 @@ def pretty_str(self) -> str: suffix = "\n" + "#" * ll + "\n" return prefix + "\n\n".join(table_strs) + suffix + def dict_str(self, indent: int = 0, object_features: bool = True) -> str: + """Return a dictionary representation of the state.""" + state_dict = {} + for obj in self: + obj_dict = {} + if obj.type.name == "robot" or object_features: + for attribute, value in zip(obj.type.feature_names, self[obj]): + if isinstance(value, (float, int, np.float32)): + value = round(float(value), 1) + obj_dict[attribute] = value + obj_name = obj.name + state_dict[f"{obj_name}:{obj.type.name}"] = obj_dict + + # Create a string of n_space spaces + spaces = " " * indent + + # Create a PrettyPrinter with a large width + dict_str = spaces + "{" + n_keys = len(state_dict.keys()) + for i, (key, value) in enumerate(state_dict.items()): + value_str = ', '.join(f"'{k}': {v}" for k, v in value.items()) + if i == 0: + dict_str += f"'{key}': {{{value_str}}},\n" + elif i == n_keys - 1: + dict_str += spaces + f" '{key}': {{{value_str}}}" + else: + dict_str += spaces + f" '{key}': {{{value_str}}},\n" + dict_str += "}" + return dict_str + DefaultState = State({}) @@ -467,11 +497,12 @@ def replace_goal_with_alt_goal(self) -> Task: class EnvironmentTask: """An initial observation and goal description. - Environments produce environment tasks and agents produce and solve tasks. + Environments produce environment tasks and agents produce and solve + tasks. In fully observed settings, the init_obs will be a State and the - goal_description will be a Set[GroundAtom]. For convenience, we can convert - an EnvironmentTask into a Task in those cases. + goal_description will be a Set[GroundAtom]. For convenience, we can + convert an EnvironmentTask into a Task in those cases. """ init_obs: Observation goal_description: GoalDescription diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index 897a3f39a7..65d2bbe74c 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -38,7 +38,45 @@ def _sample_completions(self, completions = [] for _ in range(num_completions): # If the query is asking for atom proposals. - if "Please provide predicates" in prompt: + if CFG.vlm_predicate_vision_api_generate_ground_atoms: + completion = ( + "```python\n" + "def _Covers_holds(state: State, objects: Sequence[Object])" + " -> bool:\n" + " block, target = objects\n" + " block_pose = state.get(block, 'pose')\n" + " block_width = state.get(block, 'width')\n" + " target_pose = state.get(target, 'pose')\n" + " target_width = state.get(target, 'width')\n" + " return (block_pose-block_width/2 <= " + "target_pose-target_width/2) and " + "(block_pose+block_width/2 >= target_pose+target_width/2) " + "and " + "state.get(block, 'grasp') == -1\n" + "_Covers = Predicate('Covers', [_block_type, _target_type]," + " _Covers_holds)" + "```\n" + "" + "```python\n" + "# An example of predicate name not found\n" + "def _HandEmpty_holds(state: State, objects: " + " Sequence[Object]) -> bool:\n" + " ... \n" + "# The predicate is instantiated similar to above" + "..." + "```\n" + "" + "```python\n" + "# An example of attribute error\n" + "def _IsBlue_holds(state: State, objects: " + " Sequence[Object]) -> bool:\n" + " block, = objects\n" + " block_color = state.get(block, 'color')\n" + " return block_color == 'blue'\n" + "_IsBlue = Predicate('IsBlue', [_block_type]," + " _IsBlue_holds)" + "```\n") + elif "Please provide predicates" in prompt: completion = "*Holding(spoon)\n*Fizz(buzz)\n" + \ "*Submerged(teabag)\n*Submerged(spoon)\n*IsRobot(robby)" # Else, if the query is asking for particular values. @@ -748,9 +786,8 @@ def test_loading_txt_files(): ).name == "PickPlace" -def test_create_ground_atom_data_from_generated_demos(): - """Tests for the create_ground_atom_data_from_generated_demos method.""" - utils.reset_config({ +@pytest.mark.parametrize( + "config", [{ "env": "cover", "approach": "oracle", "offline_data_method": "demo", @@ -759,7 +796,20 @@ def test_create_ground_atom_data_from_generated_demos(): "num_train_tasks": 1, "included_options": "PickPlace", "excluded_predicates": "all", - }) + }, { + "env": "cover", + "approach": "oracle", + "offline_data_method": "demo", + "offline_data_planning_timeout": 500, + "option_learner": "no_learning", + "num_train_tasks": 1, + "included_options": "PickPlace", + "excluded_predicates": "all", + "vlm_predicate_vision_api_generate_ground_atoms": True + }]) +def test_create_ground_atom_data_from_generated_demos(config): + """Tests for the create_ground_atom_data_from_generated_demos method.""" + utils.reset_config(config) env = CoverEnv() train_tasks = [t.task for t in env.get_train_tasks()] predicates, _ = utils.parse_config_excluded_predicates(env) From 40fc50f102965f608834ff42dbab77238cfde37d Mon Sep 17 00:00:00 2001 From: Nishanth Kumar Date: Wed, 7 Aug 2024 09:49:13 -0700 Subject: [PATCH 36/38] VLM Open-Loop Approach (#1702) * init stuff * making progress * progress! * making progress! * progress! Still need to construct few-shot prompt, but basically there! * imgs are prepped; got to make actual prompt and query model now * ready to go! * everything except tests done! * works for envs with continuous params now! * woops - mypy * yapf * testing utils done * ashay comments --- .../approaches/llm_open_loop_approach.py | 64 +----- .../approaches/vlm_open_loop_approach.py | 202 ++++++++++++++++++ .../vlm_planning_prompts/few_shot.txt | 38 ++++ .../vlm_planning_prompts/no_few_shot.txt | 28 +++ predicators/settings.py | 5 + predicators/structs.py | 10 + predicators/utils.py | 158 ++++++++++++-- tests/test_utils.py | 72 ++++++- 8 files changed, 505 insertions(+), 72 deletions(-) create mode 100644 predicators/approaches/vlm_open_loop_approach.py create mode 100644 predicators/approaches/vlm_planning_prompts/few_shot.txt create mode 100644 predicators/approaches/vlm_planning_prompts/no_few_shot.txt diff --git a/predicators/approaches/llm_open_loop_approach.py b/predicators/approaches/llm_open_loop_approach.py index d16b4cdcb1..7ced989beb 100644 --- a/predicators/approaches/llm_open_loop_approach.py +++ b/predicators/approaches/llm_open_loop_approach.py @@ -40,10 +40,10 @@ """ from __future__ import annotations -import logging from typing import Collection, Dict, Iterator, List, Optional, Sequence, Set, \ Tuple +from predicators import utils from predicators.approaches import ApproachFailure from predicators.approaches.nsrt_metacontroller_approach import \ NSRTMetacontrollerApproach @@ -135,63 +135,11 @@ def _llm_prediction_to_option_plan( ParameterizedOptions coupled with a list of objects that will be used to ground the ParameterizedOption.""" option_plan: List[Tuple[ParameterizedOption, Sequence[Object]]] = [] - # Setup dictionaries enabling us to easily map names to specific - # Python objects during parsing. - option_name_to_option = {op.name: op for op in self._initial_options} - obj_name_to_obj = {o.name: o for o in objects} - # We assume the LLM's output is such that each line contains a - # option_name(obj0:type0, obj1:type1,...). - options_str_list = llm_prediction.split('\n') - for option_str in options_str_list: - option_str_stripped = option_str.strip() - option_name = option_str_stripped.split('(')[0] - # Skip empty option strs. - if not option_str: - continue - if option_name not in option_name_to_option.keys() or \ - "(" not in option_str: - logging.info( - f"Line {option_str} output by LLM doesn't " - "contain a valid option name. Terminating option plan " - "parsing.") - break - option = option_name_to_option[option_name] - # Now that we have the option, we need to parse out the objects - # along with specified types. - typed_objects_str_list = option_str_stripped.split('(')[1].strip( - ')').split(',') - objs_list = [] - malformed = False - for i, type_object_string in enumerate(typed_objects_str_list): - object_type_str_list = type_object_string.strip().split(':') - # We expect this list to be [object_name, type_name]. - if len(object_type_str_list) != 2: - logging.info(f"Line {option_str} output by LLM has a " - "malformed object-type list.") - malformed = True - break - object_name = object_type_str_list[0] - type_name = object_type_str_list[1] - if object_name not in obj_name_to_obj.keys(): - logging.info(f"Line {option_str} output by LLM has an " - "invalid object name.") - malformed = True - break - obj = obj_name_to_obj[object_name] - # Check that the type of this object agrees - # with what's expected given the ParameterizedOption. - if type_name != option.types[i].name: - logging.info(f"Line {option_str} output by LLM has an " - "invalid type name.") - malformed = True - break - objs_list.append(obj) - # The types of the objects match, but we haven't yet checked if - # all arguments of the option have an associated object. - if len(objs_list) != len(option.types): - malformed = True - if not malformed: - option_plan.append((option, objs_list)) + option_plan_with_cont_params = utils.\ + parse_model_output_into_option_plan( + llm_prediction, objects, self._types, self._initial_options, False) + option_plan = [(option, objs) + for option, objs, _ in option_plan_with_cont_params] return option_plan def learn_from_offline_dataset(self, dataset: Dataset) -> None: diff --git a/predicators/approaches/vlm_open_loop_approach.py b/predicators/approaches/vlm_open_loop_approach.py new file mode 100644 index 0000000000..0bf9d23bb3 --- /dev/null +++ b/predicators/approaches/vlm_open_loop_approach.py @@ -0,0 +1,202 @@ +"""Open-loop vision-language model (VLM) planner approach based on the 'Look +Before You Leap' paper (https://arxiv.org/abs/2311.17842). Depending on command +line options (specifically --vlm_open_loop_use_training_demos), the VLM can be +made to use the training trajectories as few-shot examples for solving the +task, or directly solve the task with no few-shot prompting. + +Example command in burger that doesn't use few-shot examples: +python predicators/main.py --env burger --approach vlm_open_loop --seed 0 \ +--num_train_tasks 0 --num_test_tasks 1 --bilevel_plan_without_sim True \ +--make_failure_videos --sesame_task_planner fdopt --vlm_model_name gpt-4o + +Example command that does have few-shot examples: +python predicators/main.py --env burger --approach vlm_open_loop --seed 0 \ +--num_train_tasks 1 --num_test_tasks 1 --bilevel_plan_without_sim True \ +--make_failure_videos --sesame_task_planner fdopt --debug \ +--vlm_model_name gemini-1.5-pro-latest --vlm_open_loop_use_training_demos True +""" + +from __future__ import annotations + +from typing import Callable, List, Sequence, Set + +import numpy as np +import PIL +from PIL import ImageDraw + +from predicators import utils +from predicators.approaches import ApproachFailure +from predicators.approaches.bilevel_planning_approach import \ + BilevelPlanningApproach +from predicators.settings import CFG +from predicators.structs import Action, Box, Dataset, ParameterizedOption, \ + Predicate, State, Task, Type, _Option + + +class VLMOpenLoopApproach(BilevelPlanningApproach): # pragma: no cover + """VLMOpenLoopApproach definition. + + NOTE: we don't test this approach because it requires an environment + that has rendering, and our current envs that have this are burger + and kitchen, which are slow/untestable on GitHub remote... + """ + + def __init__(self, initial_predicates: Set[Predicate], + initial_options: Set[ParameterizedOption], types: Set[Type], + action_space: Box, train_tasks: List[Task]) -> None: + super().__init__(initial_predicates, initial_options, types, + action_space, train_tasks) + # Set up the vlm and base prompt. + self._vlm = utils.create_vlm_by_name(CFG.vlm_model_name) + filepath_to_vlm_prompt = utils.get_path_to_predicators_root() + \ + "/predicators/approaches/vlm_planning_prompts/no_few_shot.txt" + if CFG.vlm_open_loop_use_training_demos: + filepath_to_vlm_prompt = utils.get_path_to_predicators_root() + \ + "/predicators/approaches/vlm_planning_prompts/few_shot.txt" + with open(filepath_to_vlm_prompt, "r", encoding="utf-8") as f: + self.base_prompt = f.read() + self._prompt_state_imgs_list: List[PIL.Image.Image] = [] + self._prompt_demos_str = "" + + @classmethod + def get_name(cls) -> str: + return "vlm_open_loop" + + @property + def is_learning_based(self) -> bool: + return True + + def learn_from_offline_dataset(self, dataset: Dataset) -> None: + """Adds the images and plans from the training dataset to the base + prompt for use at test time!""" + if not CFG.vlm_open_loop_use_training_demos: + return None + # Crawl thru the dataset and pull out all the images. + # For each image, add text to it in the bototm left indicating the + # trajectory and timestep it's from. + assert dataset.trajectories[0].states[0].simulator_state is not None + assert isinstance( + dataset.trajectories[0].states[0].simulator_state["images"], List) + num_imgs_per_state = len( + dataset.trajectories[0].states[0].simulator_state["images"]) + self._prompt_demos_str = "" + for traj_num, traj in enumerate(dataset.trajectories): + traj_goal = self._train_tasks[traj.train_task_idx].goal + self._prompt_demos_str += f"Demonstration {traj_num}, " + \ + f"Goal: {str(sorted(traj_goal))}\n" + for state_num, state in enumerate(traj.states): + assert state.simulator_state is not None + assert len( + state.simulator_state["images"]) == num_imgs_per_state + for img_num, img in enumerate(state.simulator_state["images"]): + pil_img = PIL.Image.fromarray(img) # type: ignore + width, height = pil_img.size + font_size = 15 + text = f"Demonstration {traj_num}, " + \ + f"State {state_num}, Image {img_num}" + draw = ImageDraw.Draw(pil_img) + font = utils.get_scaled_default_font(draw, font_size) + text_width, text_height = draw.textbbox((0, 0), + text, + font=font)[2:] + # Create a new image with additional space for text! + new_image = PIL.Image.new( + "RGB", (width, height + text_height + 10), "white") + new_image.paste(pil_img, (0, 0)) + draw = ImageDraw.Draw(new_image) + text_x = (width - text_width) / 2 + text_y = height + 5 + draw.text((text_x, text_y), text, font=font, fill="black") + self._prompt_state_imgs_list.append(draw._image) # pylint:disable=protected-access + for action_num, action in enumerate(traj.actions): + self._prompt_demos_str += f"Action {action_num}, from " + \ + f"state {action_num} is {action.get_option()}\n" + return None + + def _get_current_nsrts(self) -> Set[utils.NSRT]: + """This method doesn't explicitly learn NSRTs, so we simply return the + empty set.""" + return set() + + def _solve(self, task: Task, timeout: int) -> Callable[[State], Action]: + try: + option_plan = self._query_vlm_for_option_plan(task) + except Exception as e: + raise ApproachFailure( + f"VLM failed to produce coherent option plan. Reason: {e}") + + policy = utils.option_plan_to_policy(option_plan) + + def _policy(s: State) -> Action: + try: + return policy(s) + except utils.OptionExecutionFailure as e: + raise ApproachFailure(e.args[0], e.info) + + return _policy + + def _query_vlm_for_option_plan(self, task: Task) -> Sequence[_Option]: + init_state = task.init + assert init_state.simulator_state is not None + assert isinstance(init_state.simulator_state["images"], List) + curr_options = sorted(self._initial_options) + imgs = init_state.simulator_state["images"] + pil_imgs = [ + PIL.Image.fromarray(img_arr) # type: ignore + for img_arr in imgs + ] + imgs_for_vlm = [] + for img_num, pil_img in enumerate(pil_imgs): + draw = ImageDraw.Draw(pil_img) + img_font = utils.get_scaled_default_font(draw, 10) + img_with_txt = utils.add_text_to_draw_img( + draw, (50, 50), f"Initial state to plan from, Image {img_num}", + img_font) + imgs_for_vlm.append(img_with_txt._image) # pylint:disable=protected-access + options_str = "\n".join( + str(opt) + ", params_space=" + str(opt.params_space) + for opt in curr_options) + objects_list = sorted(set(task.init)) + objects_str = "\n".join(str(obj) for obj in objects_list) + goal_expr_list = sorted(set(task.goal)) + type_hierarchy_str = utils.create_pddl_types_str(self._types) + goal_str = "\n".join(str(obj) for obj in goal_expr_list) + if not CFG.vlm_open_loop_use_training_demos: + prompt = self.base_prompt.format(options=options_str, + typed_objects=objects_str, + type_hierarchy=type_hierarchy_str, + goal_str=goal_str) + vlm_output = self._vlm.sample_completions( + prompt, + imgs_for_vlm, + temperature=CFG.vlm_temperature, + seed=CFG.seed, + num_completions=1) + else: + prompt = self.base_prompt.format( + options=options_str, + demonstration_trajs=self._prompt_demos_str, + typed_objects=objects_str, + type_hierarchy=type_hierarchy_str, + goal_str=goal_str) + vlm_output = self._vlm.sample_completions( + prompt, + self._prompt_state_imgs_list + imgs_for_vlm, + temperature=CFG.vlm_temperature, + seed=CFG.seed, + num_completions=1) + plan_prediction_txt = vlm_output[0] + option_plan: List[_Option] = [] + try: + start_index = plan_prediction_txt.index("Plan:\n") + len("Plan:\n") + parsable_plan_prediction = plan_prediction_txt[start_index:] + except ValueError: + raise ValueError("VLM output is badly formatted; cannot " + "parse plan!") + parsed_option_plan = utils.parse_model_output_into_option_plan( + parsable_plan_prediction, objects_list, self._types, + self._initial_options, True) + for option_tuple in parsed_option_plan: + option_plan.append(option_tuple[0].ground( + option_tuple[1], np.array(option_tuple[2]))) + return option_plan diff --git a/predicators/approaches/vlm_planning_prompts/few_shot.txt b/predicators/approaches/vlm_planning_prompts/few_shot.txt new file mode 100644 index 0000000000..002ed0ec14 --- /dev/null +++ b/predicators/approaches/vlm_planning_prompts/few_shot.txt @@ -0,0 +1,38 @@ +You are highly skilled in robotic task planning, breaking down intricate and long-term tasks into distinct primitive actions. +Consider the following skills a robotic agent can perform. Note that each of these skills takes the form of a `ParameterizedOption` and may have both discrete arguments (indicated by the `types` field, referring to objects of particular types), +as well as continuous arguments (indicated by `params_space` field, which is formatted as `Box([, , ...], [, , ...], (,), )`). + +{options} + + +Here are a number of example demonstrations of solving a range of goals from an expert demonstrator. For each of these examples, you are provided +with the goal the demonstrator was trying to achieve, the plan (i.e., sequence of skills with discrete and continuous arguments specified), as well +as images corresponding to the state of the environment at every timestep (starting at 0, when the 0th skill is executed). Note that the state images +are annotated with text indicating which demonstration and timestep they belong to. Additionally, note that a state might have more than one image +associated with it. + +{demonstration_trajs} + + +To solve the task presented below, you are only allowed to use the provided skills. It's essential to stick to the format of these basic skills. When creating a plan, replace +the arguments of each skill with specific items or continuous parameters. You can first describe the provided scene and what it indicates about the provided +task objects to help you come up with a plan. + +Here is a list of objects present in this scene for this task, along with their type (formatted as : ): +{typed_objects} + +And here are the available types (formatted in PDDL style as ` ... - `). You can infer a hierarchy of types via this: +{type_hierarchy} + +Finally, here is an expression corresponding to the current task goal that must be achieved: +{goal_str} + +Please return a plan that achieves the provided goal from an initial state depicted by the image(s) below. +Please provide your output in the following format (excluding the angle brackets and ellipsis, which are just for illustration purposes). +Be sure to include the parens '(' and ')', as well as square brackets '[' and ']' even if there are no objects/continuous parameters. +Do not bold or italicize or otherwise apply any extra formaating to the plan text: + +Plan: +(:, :, ...)[, , ...] +(:, :, ...)[, , ...] +... diff --git a/predicators/approaches/vlm_planning_prompts/no_few_shot.txt b/predicators/approaches/vlm_planning_prompts/no_few_shot.txt new file mode 100644 index 0000000000..da7fbc66c6 --- /dev/null +++ b/predicators/approaches/vlm_planning_prompts/no_few_shot.txt @@ -0,0 +1,28 @@ +You are highly skilled in robotic task planning, breaking down intricate and long-term tasks into distinct primitive actions. +Consider the following skills a robotic agent can perform. Note that each of these skills takes the form of a `ParameterizedOption` and may have both discrete arguments (indicated by the `types` field, referring to objects of particular types), +as well as continuous arguments (indicated by `params_space` field, which is formatted as `Box([, , ...], [, , ...], (,), )`). + +{options} + +You are only allowed to use the provided skills. It's essential to stick to the format of these basic skills. When creating a plan, replace +the arguments of each skill with specific items or continuous parameters. You can first describe the provided scene and what it indicates about the provided +task objects to help you come up with a plan. + +Here is a list of objects present in this scene for this task, along with their type (formatted as : ): +{typed_objects} + +And here are the available types (formatted in PDDL style as ` ... - `). You can infer a hierarchy of types via this: +{type_hierarchy} + +Finally, here is an expression corresponding to the current task goal that must be achieved: +{goal_str} + +Please return a plan that achieves the provided goal from an initial state depicted by the image(s) below. +Please provide your output in the following format (excluding the angle brackets and ellipsis, which are just for illustration purposes). +Be sure to include the parens '(' and ')', as well as square brackets '[' and ']' even if there are no objects/continuous parameters. +Do not bold or italicize or otherwise apply any extra formaating to the plan text: + +Plan: +(:, :, ...)[, , ...] +(:, :, ...)[, , ...] +... diff --git a/predicators/settings.py b/predicators/settings.py index 7e232e2070..c3e9dfe57b 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -418,6 +418,11 @@ class GlobalSettings: # parameters for vision language models # gemini-1.5-pro-latest, gpt-4-turbo, gpt-4o vlm_model_name = "gemini-pro-vision" + vlm_temperature = 0.0 + vlm_num_completions = 1 + + # parameters for the vlm_open_loop planning approach + vlm_open_loop_use_training_demos = False # SeSamE parameters sesame_task_planner = "astar" # "astar" or "fdopt" or "fdsat" diff --git a/predicators/structs.py b/predicators/structs.py index cf93c4f733..a27c20947b 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -31,6 +31,16 @@ def dim(self) -> int: """Dimensionality of the feature vector of this object type.""" return len(self.feature_names) + def get_ancestors(self) -> Set[Type]: + """Get the set of all types that are ancestors (i.e. parents, + grandparents, great-grandparents, etc.) of the current type.""" + curr_type: Optional[Type] = self + ancestors_set = set() + while curr_type is not None: + ancestors_set.add(curr_type) + curr_type = curr_type.parent + return ancestors_set + def __call__(self, name: str) -> _TypedEntity: """Convenience method for generating _TypedEntities.""" if name.startswith("?"): diff --git a/predicators/utils.py b/predicators/utils.py index f2034dbca1..3500562b56 100644 --- a/predicators/utils.py +++ b/predicators/utils.py @@ -2227,6 +2227,14 @@ def _stripped_classifier( return VLMPredicate(name, types, _stripped_classifier, get_vlm_query_str) +def create_llm_by_name( + model_name: str) -> LargeLanguageModel: # pragma: no cover + """Create particular llm using a provided name.""" + if "gemini" in model_name: + return GoogleGeminiLLM(model_name) + return OpenAILLM(model_name) + + def create_vlm_by_name( model_name: str) -> VisionLanguageModel: # pragma: no cover """Create particular vlm using a provided name.""" @@ -2235,12 +2243,132 @@ def create_vlm_by_name( return OpenAIVLM(model_name) -def create_llm_by_name( - model_name: str) -> LargeLanguageModel: # pragma: no cover - """Create particular llm using a provided name.""" - if "gemini" in model_name: - return GoogleGeminiLLM(model_name) - return OpenAILLM(model_name) +def parse_model_output_into_option_plan( + model_prediction: str, objects: Collection[Object], + types: Collection[Type], options: Collection[ParameterizedOption], + parse_continuous_params: bool +) -> List[Tuple[ParameterizedOption, Sequence[Object], Sequence[float]]]: + """Assuming text for an option plan that is predicted as text by a large + model, parse it into a sequence of ParameterizedOptions coupled with a list + of objects and continuous parameters that will be used to ground the + ParameterizedOption. + + We assume the model's output is such that each line is formatted as + option_name(obj0:type0, obj1:type1,...)[continuous_param0, + continuous_param1, ...]. + """ + option_plan: List[Tuple[ParameterizedOption, Sequence[Object], + Sequence[float]]] = [] + # Setup dictionaries enabling us to easily map names to specific + # Python objects during parsing. + option_name_to_option = {op.name: op for op in options} + type_name_to_type = {typ.name: typ for typ in types} + obj_name_to_obj = {o.name: o for o in objects} + options_str_list = model_prediction.split('\n') + for option_str in options_str_list: + option_str_stripped = option_str.strip() + option_name = option_str_stripped.split('(')[0] + # Skip empty option strs. + if not option_str: + continue + if option_name not in option_name_to_option.keys() or \ + "(" not in option_str: + logging.info( + f"Line {option_str} output by model doesn't " + "contain a valid option name. Terminating option plan " + "parsing.") + break + if parse_continuous_params and "[" not in option_str: + logging.info( + f"Line {option_str} output by model doesn't contain a " + "'[' and is thus improperly formatted.") + break + option = option_name_to_option[option_name] + # Now that we have the option, we need to parse out the objects + # along with specified types. + try: + start_index = option_str_stripped.index('(') + 1 + end_index = option_str_stripped.index(')', start_index) + except ValueError: + logging.info( + f"Line {option_str} output by model is improperly formatted.") + break + typed_objects_str_list = option_str_stripped[ + start_index:end_index].split(',') + objs_list = [] + continuous_params_list = [] + malformed = False + for i, type_object_string in enumerate(typed_objects_str_list): + object_type_str_list = type_object_string.strip().split(':') + # We expect this list to be [object_name, type_name]. + if len(object_type_str_list) != 2: + logging.info(f"Line {option_str} output by model has a " + "malformed object-type list.") + malformed = True + break + object_name = object_type_str_list[0] + type_name = object_type_str_list[1] + if object_name not in obj_name_to_obj.keys(): + logging.info(f"Line {option_str} output by model has an " + "invalid object name.") + malformed = True + break + obj = obj_name_to_obj[object_name] + # Check that the type of this object agrees + # with what's expected given the ParameterizedOption. + if type_name not in type_name_to_type: + logging.info(f"Line {option_str} output by model has an " + "invalid type name.") + malformed = True + break + try: + if option.types[i] not in type_name_to_type[ + type_name].get_ancestors(): + logging.info( + f"Line {option_str} output by model has an " + "invalid type that doesn't agree with the option" + f"{option}") + malformed = True + break + except IndexError: + # In this case, there's more supplied arguments than the + # option has. + logging.info(f"Line {option_str} output by model has an " + "too many object arguments for option" + f"{option}") + malformed = True + break + objs_list.append(obj) + # The types of the objects match, but we haven't yet checked if + # all arguments of the option have an associated object. + if len(objs_list) != len(option.types): + malformed = True + # Now, we attempt to parse out the continuous parameters. + if parse_continuous_params: + params_str_list = option_str_stripped.split('[')[1].strip( + ']').split(',') + for i, continuous_params_str in enumerate(params_str_list): + stripped_continuous_param_str = continuous_params_str.strip() + if len(stripped_continuous_param_str) == 0: + continue + try: + curr_cont_param = float(stripped_continuous_param_str) + except ValueError: + logging.info(f"Line {option_str} output by model has an " + "invalid continouous parameter that can't be" + "converted to a float.") + malformed = True + break + continuous_params_list.append(curr_cont_param) + if len(continuous_params_list) != option.params_space.shape[0]: + logging.info(f"Line {option_str} output by model has " + "invalid continouous parameter(s) that don't " + f"agree with {option}{option.params_space}.") + malformed = True + break + if not malformed: + option_plan.append((option, objs_list, continuous_params_list)) + return option_plan def query_vlm_for_atom_vals( @@ -3062,12 +3190,8 @@ def _atoms_to_pyperplan_facts( ############################## End Pyperplan Glue ############################## -def create_pddl_domain(operators: Collection[NSRTOrSTRIPSOperator], - predicates: Collection[Predicate], - types: Collection[Type], domain_name: str) -> str: - """Create a PDDL domain str from STRIPSOperators or NSRTs.""" - # Sort everything to ensure determinism. - preds_lst = sorted(predicates) +def create_pddl_types_str(types: Collection[Type]) -> str: + """Create a PDDL-style types string that handles hierarchy correctly.""" # Case 1: no type hierarchy. if all(t.parent is None for t in types): types_str = " ".join(t.name for t in sorted(types)) @@ -3094,6 +3218,16 @@ def create_pddl_domain(operators: Collection[NSRTOrSTRIPSOperator], else: child_type_str = " ".join(t.name for t in child_types) types_str += f"\n {child_type_str} - {parent_type.name}" + return types_str + + +def create_pddl_domain(operators: Collection[NSRTOrSTRIPSOperator], + predicates: Collection[Predicate], + types: Collection[Type], domain_name: str) -> str: + """Create a PDDL domain str from STRIPSOperators or NSRTs.""" + # Sort everything to ensure determinism. + preds_lst = sorted(predicates) + types_str = create_pddl_types_str(types) ops_lst = sorted(operators) preds_str = "\n ".join(pred.pddl_str() for pred in preds_lst) ops_strs = "\n\n ".join(op.pddl_str() for op in ops_lst) diff --git a/tests/test_utils.py b/tests/test_utils.py index e951f070a8..f5dd4743b8 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -20,8 +20,8 @@ from predicators.pretrained_model_interface import VisionLanguageModel from predicators.settings import CFG from predicators.structs import NSRT, Action, DefaultState, DummyOption, \ - GroundAtom, LowLevelTrajectory, ParameterizedOption, Predicate, Segment, \ - State, STRIPSOperator, Type, Variable, VLMPredicate + GroundAtom, LowLevelTrajectory, Object, ParameterizedOption, Predicate, \ + Segment, State, STRIPSOperator, Type, Variable, VLMPredicate from predicators.utils import GoalCountHeuristic, _PyperplanHeuristicWrapper, \ _TaskPlanningHeuristic @@ -3457,3 +3457,71 @@ def test_oracle_feature_selection(): utils.construct_active_sampler_input(state, [robot, cup], params, NavigateToCup) assert "Oracle feature selection" in str(e) + + +def test_parse_model_output_into_option_plan(): + """Test the utility function that turns a prediction by a large model into + a structure from which an option plan can be made.""" + # NOTE: all these tests are for the failure cases of this function, since + # the success cases are covered when we test the LLMOpenLoopApproach + utils.reset_config() + options = get_gt_options("cover") + options_str = "wakanda\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [], [], options, + False)) == 0 + options_str = "PickPlace()\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [], [], options, + True)) == 0 + options_str = "PickPlace(\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [], [], options, + False)) == 0 + options_str = "PickPlace(forever)\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [], [], options, + False)) == 0 + obj_type = Type("object_type", []) + obj = Object("obj", obj_type) + options_str = "PickPlace(canard:object_type)\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + False)) == 0 + options_str = "PickPlace(obj:canard_type)\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + False)) == 0 + options_str = "PickPlace(obj:object_type)\n" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + False)) == 0 + options_str = "PickPlace()[ ,]" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + True)) == 0 + options_str = "PickPlace()[not_a_param]" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + True)) == 0 + options_str = "PickPlace()[0.5, 0.5]" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + True)) == 0 + options = get_gt_options("blocks") + options_str = "Pick(obj:object_type)" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + False)) == 0 + options_str = "Pick()" + assert len( + utils.parse_model_output_into_option_plan(options_str, [obj], + [obj_type], options, + False)) == 0 From 1d2cce664c720690cf0399ba5972365ffe907734 Mon Sep 17 00:00:00 2001 From: Ashay Athalye Date: Thu, 22 Aug 2024 13:57:54 -0400 Subject: [PATCH 37/38] Create BurgerEnv variant without a dedicated move option/operator (#1706) * Initial commit. * Add first-draft of support for cropped images that focus on relevant objects. * Update approach to pass in full and cropped before/after images during labeling. * Update prompt and add some debug statements. * Add option to compute preconditions via soft intersection in cluter and intersect. * Investigate extra operators from label errors that cause us to fail on test tasks. * Start adding some support for goal variation in BurgerEnv. * Add a GoalHack for the third goal in BurgerEnv and fix set of marks to not extend past the edge of the grid. * Add debugging code via a manually specified plan. * Initial commit. * Update nsrts and options for burger_no_move. * Fix burger_no_move nsrts and options so that basic goals are achieved by oracle. * Get one basic generalization result in burger to work. * Edit goals towards a different generalization result. * Progress. * Achieved next generalization result. * Fix VLM atom proposal to include all groundings of each proposed predicate. * Update get_tasks(). * Get 2/3 categories of generalization to work. * Get all three kinds of tasks to work. * Refactor goalhack predicates and ensure BurgerEnv still works. * Fix some formatting issues. * Fix more linting issues. * Get formatting, linting, type-checking tests to pass. * Get mypy tests to pass. * Run autoformatter. * Start to address comments. * Get some tests to pass. * Add an option to skip hill-climbing and select all debug predicates directly. * Run autoformatter. * Progress towards getting burger_no_move to work after changes. * Update debug VLM atom proposal to use existing code that was there to handle that case. * Fix handling of all groundings of VLM atom proposals to avoid labeling them when their objects are not the trajectory being considered. * Remove comment. * Run autoformatter. * Fix typo in comment. * Replace original atom labeling file. * Remove space. * Add unit tests for grammar search debug predicates and soft intersection in cluster and intersect. * Fix burger text. * Include cropped image into prompt only when flag is set. * Add test for including cropped images in ground atom data generation. * Run autoformatter. * Add more tests for include cropped images. * Add test for ImageOptionTrajectory. * Update tests for BurgerEnv. * Write tests for BurgerNoMoveEnv. * Update burger no move test. * Update burger no move tests. * Finish burger no move tests. * Fix broken tests. --- .../grammar_search_invention_approach.py | 55 +- .../approaches/vlm_open_loop_approach.py | 10 +- .../datasets/generate_atom_trajs_with_vlm.py | 152 +++- .../img_option_diffs_burger.txt | 3 + .../img_option_diffs_label_history_crops.txt | 3 + predicators/envs/assets/imgs/cut_lettuce.png | Bin 0 -> 391413 bytes .../assets/imgs/realistic_cooked_patty.png | Bin 0 -> 32492 bytes .../imgs/realistic_cooked_patty_full.png | Bin 0 -> 211345 bytes .../envs/assets/imgs/realistic_raw_patty.png | Bin 0 -> 33199 bytes .../assets/imgs/realistic_raw_patty_full.png | Bin 0 -> 208108 bytes .../envs/assets/imgs/uncut_lettuce.png | Bin 0 -> 264973 bytes predicators/envs/base_env.py | 8 +- predicators/envs/burger.py | 711 ++++++++++++++++-- predicators/envs/vlm_envs.py | 6 +- .../ground_truth_models/burger/__init__.py | 12 +- .../ground_truth_models/burger/nsrts.py | 169 ++++- .../ground_truth_models/burger/options.py | 307 ++++++-- .../strips_learning/base_strips_learner.py | 41 + .../strips_learning/clustering_learner.py | 7 +- predicators/settings.py | 13 +- predicators/structs.py | 6 + .../test_grammar_search_invention_approach.py | 49 +- tests/datasets/test_datasets.py | 57 ++ tests/envs/test_burger.py | 187 ++++- tests/envs/test_cover.py | 1 + .../test_clustering_learner.py | 45 ++ tests/test_structs.py | 36 +- 27 files changed, 1702 insertions(+), 176 deletions(-) create mode 100644 predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_burger.txt create mode 100644 predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history_crops.txt create mode 100644 predicators/envs/assets/imgs/cut_lettuce.png create mode 100644 predicators/envs/assets/imgs/realistic_cooked_patty.png create mode 100644 predicators/envs/assets/imgs/realistic_cooked_patty_full.png create mode 100644 predicators/envs/assets/imgs/realistic_raw_patty.png create mode 100644 predicators/envs/assets/imgs/realistic_raw_patty_full.png create mode 100644 predicators/envs/assets/imgs/uncut_lettuce.png diff --git a/predicators/approaches/grammar_search_invention_approach.py b/predicators/approaches/grammar_search_invention_approach.py index 001ecc0d84..8195ce5536 100644 --- a/predicators/approaches/grammar_search_invention_approach.py +++ b/predicators/approaches/grammar_search_invention_approach.py @@ -6,6 +6,7 @@ import abc import itertools import logging +from collections import defaultdict from dataclasses import dataclass, field from functools import cached_property from operator import le @@ -403,7 +404,7 @@ def enumerate(self) -> Iterator[Tuple[Predicate, float]]: raise NotImplementedError("Override me!") -_DEBUG_PREDICATE_PREFIXES = { +_DEBUG_GEOMETRIC_PREDICATES = { "tools": [ "NOT-((0:robot).fingers<=[idx 0]0.5)", # HandEmpty "NOT-((0:screw).is_held<=[idx 0]0.5)", # HoldingScrew @@ -463,24 +464,43 @@ def enumerate(self) -> Iterator[Tuple[Predicate, float]]: "((0:button).y<=[idx 0]3.01)", # ButtonReachableByRobot "NOT-((0:button).y<=[idx 0]3.01)", # ButtonNotReachableByRobot ], + "burger": [ + "((0:robot).fingers<=[idx 0]0.5)" + ], + "burger_no_move": [ + "((0:robot).fingers<=[idx 0]0.5)" + ], "unittest": [ "((0:robot).hand<=[idx 0]0.65)", "((0:block).grasp<=[idx 0]0.0)", "NOT-Forall[0:block].[((0:block).width<=[idx 0]0.085)(0)]" ], } +_DEBUG_GEOMETRIC_PREDICATES = defaultdict(list, _DEBUG_GEOMETRIC_PREDICATES) + +_DEBUG_VLM_PREDICATES = { + # Note: depending on CFG.burger_no_move_task_type, you might want to exclude + # some of the predicates here -- they won't be useful for the task and may + # cause problems in operator learning if labeled incorrectly. + "burger_no_move": [ + "Cooked0", + "Whole0", + "Cut0", + ], +} +_DEBUG_VLM_PREDICATES = defaultdict(list, _DEBUG_VLM_PREDICATES) @dataclass(frozen=True, eq=False, repr=False) class _DebugGrammar(_PredicateGrammar): """A grammar that generates only predicates starting with some string in - _DEBUG_PREDICATE_PREFIXES[CFG.env].""" + _DEBUG_GEOMETRIC_PREDICATES[CFG.env].""" base_grammar: _PredicateGrammar def generate(self, max_num: int) -> Dict[Predicate, float]: del max_num env_name = (CFG.env if not CFG.env.startswith("pybullet") else CFG.env[CFG.env.index("_") + 1:]) - expected_len = len(_DEBUG_PREDICATE_PREFIXES[env_name]) + expected_len = len(_DEBUG_GEOMETRIC_PREDICATES[env_name]) result = super().generate(expected_len) assert len(result) == expected_len return result @@ -491,7 +511,7 @@ def enumerate(self) -> Iterator[Tuple[Predicate, float]]: for (predicate, cost) in self.base_grammar.enumerate(): if any( str(predicate).startswith(debug_str) - for debug_str in _DEBUG_PREDICATE_PREFIXES[env_name]): + for debug_str in _DEBUG_GEOMETRIC_PREDICATES[env_name]): yield (predicate, cost) @@ -1021,14 +1041,25 @@ def learn_from_offline_dataset(self, dataset: Dataset) -> None: # Select a subset of the candidates to keep. logging.info("Selecting a subset...") if CFG.grammar_search_pred_selection_approach == "score_optimization": - # Create the score function that will be used to guide search. - score_function = create_score_function( - CFG.grammar_search_score_function, self._initial_predicates, - atom_dataset, candidates, self._train_tasks) - self._learned_predicates = \ - self._select_predicates_by_score_hillclimbing( - candidates, score_function, self._initial_predicates, - atom_dataset, self._train_tasks) + if CFG.grammar_search_select_all_debug and \ + CFG.grammar_search_use_handcoded_debug_grammar: + # Skip hill-climbing and select all the predicates from the + # debug grammar. + debug_predicate_names = _DEBUG_VLM_PREDICATES[ + CFG.env] + _DEBUG_GEOMETRIC_PREDICATES[CFG.env] + self._learned_predicates = set( + p for p in candidates.keys() + if p.name in debug_predicate_names) + else: + # Create the score function that will be used to guide search. + score_function = create_score_function( + CFG.grammar_search_score_function, + self._initial_predicates, atom_dataset, candidates, + self._train_tasks) + self._learned_predicates = \ + self._select_predicates_by_score_hillclimbing( + candidates, score_function, self._initial_predicates, + atom_dataset, self._train_tasks) elif CFG.grammar_search_pred_selection_approach == "clustering": self._learned_predicates = self._select_predicates_by_clustering( candidates, self._initial_predicates, dataset, atom_dataset) diff --git a/predicators/approaches/vlm_open_loop_approach.py b/predicators/approaches/vlm_open_loop_approach.py index 0bf9d23bb3..18da64e7d2 100644 --- a/predicators/approaches/vlm_open_loop_approach.py +++ b/predicators/approaches/vlm_open_loop_approach.py @@ -107,7 +107,10 @@ def learn_from_offline_dataset(self, dataset: Dataset) -> None: text_x = (width - text_width) / 2 text_y = height + 5 draw.text((text_x, text_y), text, font=font, fill="black") - self._prompt_state_imgs_list.append(draw._image) # pylint:disable=protected-access + # pylint:disable=protected-access + self._prompt_state_imgs_list.append( + draw._image) # type: ignore[attr-defined] + # pylint: enable=protected-access for action_num, action in enumerate(traj.actions): self._prompt_demos_str += f"Action {action_num}, from " + \ f"state {action_num} is {action.get_option()}\n" @@ -152,7 +155,10 @@ def _query_vlm_for_option_plan(self, task: Task) -> Sequence[_Option]: img_with_txt = utils.add_text_to_draw_img( draw, (50, 50), f"Initial state to plan from, Image {img_num}", img_font) - imgs_for_vlm.append(img_with_txt._image) # pylint:disable=protected-access + # pylint:disable=protected-access + imgs_for_vlm.append( + img_with_txt._image) # type: ignore[attr-defined] + # pylint: enable=protected-access options_str = "\n".join( str(opt) + ", params_space=" + str(opt.params_space) for opt in curr_options) diff --git a/predicators/datasets/generate_atom_trajs_with_vlm.py b/predicators/datasets/generate_atom_trajs_with_vlm.py index fb71ae4ecd..2cfe7e6d5f 100644 --- a/predicators/datasets/generate_atom_trajs_with_vlm.py +++ b/predicators/datasets/generate_atom_trajs_with_vlm.py @@ -2,11 +2,13 @@ import ast import glob +import itertools import logging import os import re import textwrap import traceback +from collections import defaultdict from concurrent.futures import ThreadPoolExecutor from functools import partial from inspect import getsource @@ -20,6 +22,7 @@ from predicators import utils from predicators.envs import BaseEnv +from predicators.envs.burger import BurgerEnv, BurgerNoMoveEnv from predicators.envs.vlm_envs import DUMMY_GOAL_OBJ_NAME from predicators.nsrt_learning.segmentation import _segment_with_option_changes from predicators.pretrained_model_interface import VisionLanguageModel @@ -107,9 +110,7 @@ def _generate_prompt_for_scene_labelling( for atom_str in atoms_list: prompt += f"\n{atom_str}" - if CFG.grammar_search_vlm_atom_label_prompt_type in [ - "img_option_diffs", "img_option_diffs_label_history" - ]: + if "img_option_diffs" in CFG.grammar_search_vlm_atom_label_prompt_type: # In this case, we need to load the 'per_scene_naive' prompt as well # for the first timestep. with open(filepath_prefix + "per_scene_naive.txt", @@ -134,13 +135,21 @@ def _generate_prompt_for_scene_labelling( curr_prompt_imgs = [ imgs_timestep[0] for imgs_timestep in traj.imgs[i - 1:i + 1] ] + if CFG.vlm_include_cropped_images: + if CFG.env in ["burger", "burger_no_move"]: # pragma: no cover + curr_prompt_imgs.extend([ + traj.cropped_imgs[i - 1][1], + traj.cropped_imgs[i - 1][0] + ]) + else: + raise NotImplementedError( + f"Cropped images not implemented for {CFG.env}.") curr_prompt += "\n\nSkill executed between states: " skill_name = traj.actions[i - 1].name + str( traj.actions[i - 1].objects) curr_prompt += skill_name - if CFG.grammar_search_vlm_atom_label_prompt_type == \ - "img_option_diffs_label_history": + if "label_history" in CFG.grammar_search_vlm_atom_label_prompt_type: curr_prompt += "\n\nPredicate values in the first scene, " \ "before the skill was executed: \n" curr_prompt += label_history[-1] @@ -185,11 +194,26 @@ def _label_single_trajectory_with_vlm_atom_values(indexed_traj: Tuple[ """Given a list of atoms, label every state in an ImageOptionTrajectory with the truth values of those atoms.""" idx, traj = indexed_traj + # Some of the atoms may be over objects that aren't in this trajectory, + # so filter those atoms out. + obj_names = [o.name for o in traj.objects] + filtered_atoms_list = [] + for a in atoms_list: + # Get the names of the objects in this atom. + atom_args = a[a.find('(') + 1:a.find(')')] + atom_objs = atom_args.split(',') + keep = True + for ao in atom_objs: + if ao not in obj_names: + keep = False + continue + if keep: + filtered_atoms_list.append(a) curr_scenes_labelled = 0 total_scenes_to_label = len(traj.imgs) curr_traj_txt_outputs: List[str] = [] prompts_for_traj = _generate_prompt_for_scene_labelling( - traj, atoms_list, label_history=curr_traj_txt_outputs) + traj, filtered_atoms_list, label_history=curr_traj_txt_outputs) for text_prompt, img_prompt in prompts_for_traj: # Sample VLM outputs with temperature 0 in an attempt to be # accurate. @@ -257,7 +281,20 @@ def _parse_unique_atom_proposals_from_list( objects that aren't known, (3) removing any duplicate atoms. """ atoms_strs_set = set() + all_atom_groundings = set() + unique_predicates = set() obj_names_set = set(obj.name for obj in relevant_objects_across_demos) + + # We'll use these mappings to generate VLM atoms for every possible + # grounding of each proposed predicate. + obj_name_to_type = { + obj.name: obj.type + for obj in relevant_objects_across_demos + } + type_to_obj_names = defaultdict(list) + for obj_name, _type in obj_name_to_type.items(): + type_to_obj_names[_type].append(obj_name) + num_atoms_considered = 0 for atoms_proposal_for_traj in atom_strs_proposals_list: assert len(atoms_proposal_for_traj) == 1 @@ -283,10 +320,29 @@ def _parse_unique_atom_proposals_from_list( break if atom_is_valid: atoms_strs_set.add(atom) + # Create VLM atoms for all other possible groundings of this + # atom's predicate. + types_in_atom = [obj_name_to_type[n] for n in obj_names_list] + names_matching_each_type = [ + type_to_obj_names[t] for t in types_in_atom + ] + combos = list(itertools.product(*names_matching_each_type)) + predicate = atom.split('(')[0] + unique_predicates.add(predicate) + # Note that this includes the original grounding. + other_groundings = [ + f"{predicate}({', '.join(c)})" for c in combos + ] + for og in other_groundings: + all_atom_groundings.add(og) logging.debug(f"Proposed atom: {atom} is valid: {atom_is_valid}") logging.info(f"VLM proposed a total of {num_atoms_considered} atoms.") logging.info(f"Of these, {len(atoms_strs_set)} were valid and unique.") - return atoms_strs_set + logging.info( + f"For the {len(unique_predicates)} predicates, there were " \ + f"{len(all_atom_groundings)} unique groundings." + ) + return all_atom_groundings def _save_labelled_trajs_as_txt( @@ -689,11 +745,11 @@ def _generate_ground_atoms_with_vlm_pure_visual_preds( atom_strs_proposals_list = _sample_vlm_atom_proposals_from_trajectories( image_option_trajs, vlm, 1) logging.info("Done querying VLM for candidate atoms!") - # We now parse and sanitize this set of atoms. - atom_proposals_set = _parse_unique_atom_proposals_from_list( - atom_strs_proposals_list, all_task_objs) - else: # pragma: no cover. - atom_proposals_set = env.get_vlm_debug_atom_strs(train_tasks) + else: # pragma: no cover + atom_strs_proposals_list = env.get_vlm_debug_atom_strs(train_tasks) + # We now parse and sanitize this set of atoms. + atom_proposals_set = _parse_unique_atom_proposals_from_list( + atom_strs_proposals_list, all_task_objs) assert len(atom_proposals_set) > 0, "Atom proposals set is empty!" # Given this set of unique atom proposals, we now ask the VLM # to label these in every scene from the demonstrations. @@ -947,7 +1003,7 @@ def create_ground_atom_data_from_generated_demos( first_iteration = False else: total_num_segment_states -= 1 # avoid double-counting states! - if total_num_segment_states != len(traj.states): # pragma: no cover. + if total_num_segment_states != len(traj.states): # pragma: no cover logging.info( ("WARNING: there are fewer total states after option-based " "segmentation than there are in the original trajectory. " @@ -958,16 +1014,75 @@ def create_ground_atom_data_from_generated_demos( # We assume that the state's simulator_state attribute is a dictionary, # and that the images for each state are accessed by the key "images". state_imgs: List[List[PIL.Image.Image]] = [] - for state in curr_traj_states_for_vlm: + cropped_state_imgs: List[List[PIL.Image.Image]] = [] + for i, state in enumerate(curr_traj_states_for_vlm): assert state.simulator_state is not None assert "images" in state.simulator_state + if CFG.vlm_include_cropped_images: + if CFG.env in ["burger", "burger_no_move"]: # pragma: no cover + assert isinstance(env, (BurgerEnv, BurgerNoMoveEnv)) + # For the non-initial states, get a cropped image that is a + # close-up of the relevant objects in the action that was + # taken. Assume the relevant objects are in the action's + # arguments. + prev_state = curr_traj_states_for_vlm[i - 1] + assert prev_state.simulator_state is not None + assert "images" in prev_state.simulator_state + relevant_states_for_crop = [state, prev_state] + if i != 0: + # Figure out which cells to include in the crop. + action = curr_traj_actions_for_vlm[i - 1].get_option() + min_col = env.num_cols + max_col = 0 + min_row = env.num_rows + max_row = 0 + # Get the (x, y) position of each relevant object. + for o in action.objects: + for s in relevant_states_for_crop: + row = s.get(o, "row") + col = s.get(o, "col") + min_col = int(min(min_col, col)) + max_col = int(max(max_col, col)) + min_row = int(min(min_row, row)) + max_row = int(max(max_row, row)) + # Count rows from the bottom rather than the top, + # because we actually want to index by traditional + # (x, y) in the numpy array. + temp = min_row + min_row = env.num_rows - 1 - max_row + max_row = env.num_rows - 1 - temp + # Assume that we can generate the intended crop from the + # first image in state.simulator_state["images"] + full_curr_img = state.simulator_state["images"][0] + full_prev_img = prev_state.simulator_state["images"][0] + approx_cell_size = full_curr_img.shape[ + 0] // env.num_rows + cropped_curr_img = full_curr_img[ + min_row * approx_cell_size:(max_row + 1) * + approx_cell_size, + min_col * approx_cell_size:(max_col + 1) * + approx_cell_size, :] + cropped_prev_img = full_prev_img[ + min_row * approx_cell_size:(max_row + 1) * + approx_cell_size, + min_col * approx_cell_size:(max_col + 1) * + approx_cell_size, :] + cropped_imgs = [ + PIL.Image.fromarray(img_arr) # type: ignore + for img_arr in + [cropped_curr_img, cropped_prev_img] + ] + cropped_state_imgs.append(cropped_imgs) + else: + raise NotImplementedError( + f"Cropped images not implemented for {CFG.env}.") state_imgs.append([ PIL.Image.fromarray(img_arr) # type: ignore for img_arr in state.simulator_state["images"] ]) img_option_trajs.append( ImageOptionTrajectory( - set(traj.states[0]), state_imgs, + set(traj.states[0]), state_imgs, cropped_state_imgs, [act.get_option() for act in curr_traj_actions_for_vlm], curr_traj_states_for_vlm, True, traj.train_task_idx)) option_segmented_trajs.append( @@ -1052,7 +1167,10 @@ def create_ground_atom_data_from_saved_img_trajs( vlm: Optional[VisionLanguageModel] = None) -> Dataset: """Given a folder containing trajectories that have images of scenes for each state, as well as options that transition between these states, output - a dataset.""" + a dataset. + + This method does not currently support including cropped images. + """ trajectories_folder_path = os.path.join( utils.get_path_to_predicators_root(), CFG.data_dir, CFG.vlm_trajs_folder_name) @@ -1152,7 +1270,7 @@ def create_ground_atom_data_from_saved_img_trajs( # Given ground options, we can finally make ImageOptionTrajectories. image_option_trajs.append( ImageOptionTrajectory(list(curr_task_objs), - img_traj, + img_traj, [], ground_option_traj, state_traj, _is_demo=True, diff --git a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_burger.txt b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_burger.txt new file mode 100644 index 0000000000..4b08067b11 --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_burger.txt @@ -0,0 +1,3 @@ +You are a vision system for a robot provided with four images: a before image showing the state before a skill is executed, an after image showing the state after the skill is executed, and two cropped images highlighting objects relevant to the skill's arguments (the third image is a crop of the before image, and the fourth image is a crop of the after image). You are also given a list of predicates and their values in the before image. Your task is to output the values of these predicates in the after image. First, describe the expected visual changes based on the executed skill, explicitly noting the skill performed. Second, describe the visual changes you observe between the before and after images, focusing on the objects involved in the skill's arguments. Finally, list each predicate value in the after image in the format `: . `, and separately list the predicates that changed. If an object is not visible in the cropped images, check the uncropped images. If you still cannot locate the object involved in a specific predicate, retain the predicate’s value from the previous timestep. Note that when a cook action is taken on any kind of food that is on the grill, it does not take time to finish cooking -- it cooks instantly. Note that just placing any kind of food on the grill without explicitly cooking it does not make it cooked. + +Predicates: \ No newline at end of file diff --git a/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history_crops.txt b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history_crops.txt new file mode 100644 index 0000000000..fcb5edff30 --- /dev/null +++ b/predicators/datasets/vlm_input_data_prompts/atom_labelling/img_option_diffs_label_history_crops.txt @@ -0,0 +1,3 @@ +You are a vision system for a robot provided with four images: a before image showing the state before a skill is executed, an after image showing the state after the skill is executed, and two cropped images highlighting objects relevant to the skill's arguments (the third image is a crop of the before image, and the fourth image is a crop of the after image). You are also given a list of predicates and their values in the before image. Your task is to output the values of these predicates in the after image. First, describe the expected visual changes based on the executed skill, explicitly noting the skill performed. Second, describe the visual changes you observe between the before and after images, focusing on the objects involved in the skill's arguments. Finally, list each predicate value in the after image in the format `: . `, and separately list the predicates that changed. If an object is not visible in the cropped images, check the uncropped images. If you still cannot locate the object involved in a specific predicate, retain the predicate’s value from the previous timestep. + +Predicates: \ No newline at end of file diff --git a/predicators/envs/assets/imgs/cut_lettuce.png b/predicators/envs/assets/imgs/cut_lettuce.png new file mode 100644 index 0000000000000000000000000000000000000000..207b2178de77e5576486f5176414a08191b29de9 GIT binary patch literal 391413 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 oYro@q3?3a)0V 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�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%0Ds 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 literal 0 HcmV?d00001 diff --git a/predicators/envs/assets/imgs/realistic_cooked_patty.png b/predicators/envs/assets/imgs/realistic_cooked_patty.png new file mode 100644 index 0000000000000000000000000000000000000000..527ae732745d2e75a6eae5357976b371bf76a4db GIT binary patch literal 32492 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

8a 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�+LvNfI|u)P+! zQqb+785-qu3i}6WMbR`_o=VGlW(3{u3djGnK{T5DH?yFBUJm-_BG8%=6hcwS2D51} zlVn?8t^ToGul|wD)9o5Zh(-xr7pSIWzL?Pnjl;Wl866x@Cv)A9UptE$7t9i9Z#v_ltmP>``|ub_{KL#WKFBrK^GdyYJq7& zd)UWvTtr@?$7>d^Uywch3|-dbRnGYNOU{1s7=+H@-~LUG|7U-n=IuKS?muLBbcaMK z@^D4^@&w~@hF8>BM;|aheM3=)xCed0CdDio2DPA5)~uTiPN*oPMP%u8+ii4RXOU(2 zy)8~>GrDiz<>;GVz#Vq+M}7R`Jyy0NrlB<&uvtx*oV;W+pA#1aP0L3cc34u=iV|d= zqh%RYUQkqmB!?s|(1jp8>Qd{HcrvG$O~@}VDbCK2(;3C(m?B9i<}1vqp-E$wFJJNU z2S33uEC#o4Pvbsgb2l)8r18!#zzlow#Ny9~QNXVV4l_71!6yi18jF<;{fSTE;j zY074kFqzKCqb1Sol5X20*cze?i|flve9NJ(YNXUCg+{4KTD>kxYN#Ya%W{ZQga)$h zk~am>c*f@J3h7$phE45w*p`c4rs%eT*y_`I^nlg*5^)`}EMq!v?Gs*KV%9Zw;M4m5 zk@si4vL)zwCibj(UMuF<^WJBkGEZh!W(}+=4kb~fL{KeCaMQ8@4}kxGed8P3zrqG= zH{iA*7;SZlUl)kwg*e<1|vEe}O}Z=-EV@k{5sVGt%XR z?ZZRN8#~Ru!oZ8-n~=28*d1+A=4+Ohr&xJI zEh)GPh+2zTbjv`&XwvM8#O z;qDgdu*1vGJ|)ir#;Qnre#ynJJ|>6*wz_>z<}VnT19Z#g^y(PbR8Z2K@pz1TxDTdE zm?enoltz>&M-7xMmR?Y*3fALqa#V=)Et6FgU>|zy6fG}*{Fiw9JEY46nyleAD*nk8 z@zpik`#Wf+LypM7U`Uze%;rmWj*i&Aag($z(LI+kipe7%OVhE2U2sgo%?745T2V4f zLiRfQ92Yg#{??m_+Ng&&FcCU^diyu<9~SiX4%z(pFGya!rVZC*qKqSUsTG~%dV!^A zn0*gL5=qJuT~+Z!l}v0g2QJBlPo30g-9Ej&U78?5?gSJ~L9x2T*xTkJE3n_Xfp|2= zEJPmNzQv=abcuA*h@D!DNsbVP-s;wZlB1M#94@Zn|9?Ls42R)h2R|$s?3e^sA?w8j>e&)|u3g%|JeWou@u`He3)5wGdIj+!K8MWhqqY^qg`@JzEQRgIG zFi%nr4Hs!1Gf_i~xF+&9bZ_2Z=l!>cs~ou~dHw0f{Om^`(H}Wjw#s5U#WCzRpH*)0 zH&g7QMCx{^vWDRJ3bSX^`TpCa`&%@I!*cSP?h1-XK)AJwFtk~ooN|74it*qE;<(TB z^N*N)@-cOs;JI6fibH#_gY#S8V6eZ9F85d)IvX8MKm3r%XCI@K1y`Rvpu-TpT~An`IcAHOX{BwhmdJ&zL=VO>;J5vRKfjF{U9?s|xPH z4LUb(6VXsf4ehUH^jnR?x9+ewJ>mSH{W6ACM?IUekaeQnmuag9AiU=W;d&S;4eziunb8utDy-bZ_jFUazR0 zUmz3>kp|VZ&+a?#(r#~Y`@OeFgE`xSK8j&8TgSZhNB`ogS(rV)Z>@D*Q5~+wG!CGOcUS zb{tF;qGu<}PF|w-4JuQh(qweIL%0gw)S_NaP<0z@hkXAwi%LRC8ssRU$ZIA~ujqO% z?zi^o8XoTL1B}CcN=YJIZSZ7+I1UjMf#G1t@bCQq`@MJQy!)8yZ@&k>`4%_7^*;V8 zz@FCxRZL!G$hJmfs>J8#aCM342rxJz?^_h6h?tj@*K1sNgmG|(AS!9B0h-*BU7aD7 zE#~eK#dwEx*KQUN9K#u-Ljq=fPt-R}ZvNhHpvfM^Dn*_K6whCiNd3+?Fdsd@wq15Lk0h_D z%^nCQN!k#EKAvb`wQl(l8j+ZwT6 z&I!YW!R`Cp{lmYHaI{M!2*{0qS+oe$WU-H&=g3V7VvW+4lyZg!G_8#4IjAi(VMwVM zB!dyVg2t<7Uy=GV;>8u2A0lfS=Acg|WJFnlqAAp6PPSgWxh`E!vGbVCt7qgfxVlSZ zh@`=W_VedlFISBJ_79NUJ+AKd87n(=v*wR+Llt&(3Tgxdig2YS1+*U z5lPb`+78>h2e{)Q(#{Cc)zJ(UDa{bq8w^1tX$!oYdsO2CwD}stUz2Gyvmz&cJ!4$t zTOfS zbCjy3zrD+*t+>88BYO5F+Gatyn&RI7CWrU$kSit8`VuD$@zx2m_Lm|k*~oN)C1J!#u@Vije*cd8{eb)_P5Z-BZQ~NRF_wnU5lbKM6V@`QXxrG^npg4&k;6Pm{o*o zm`I+%Y#pK~Hpat;3CE$ zI8i}3xu&)Z#&-`H_B%MTz~qxBOiz!Q5n%5PC_5UesB-m_&zbm3)=iG^1V;Z?g69n@B}V6-_bn z8A4@o>*f(f++yF@WAAr=gNfa8^6xgh@RtnBU3T~ONo0|+s3PqSsa*|4Y;eDKmv}j6 zfJQ!B6AJ~Ese>rfvpXczINKiPsK?uj0O9Ecv*iqdgpp(t#w((9Lt-{$hQO}24~9(P zYK+_gOs>&qR~Y3If4U?uQmUjuGpsijmZ~DFI#QF6>={Sj zc%NEqsAQ2J47O=Bo78BDj?bx<8&-OaJ}@xnAt#@F#yVN!204?(9AUS|_~C6LRiM+e zkY$k~2ytAC_0p#mASw!E)nIyh$&S=#Wl5B(PG3=|kLS3e&gY+f$UE{~C-2+cAnDghx5soI7-OOZ5*bde!y5_yv&v>8fyNqRV9`*(godzpYf zpxw7=qYd38BZvbUT0ssnwbJFAO_6_Fp01x&yY`s?@&9;`v0qcnu9aj2p+#sxY*D1P zv1CaWRaHUKb?P)G2sYGyfK=2B#v?36M~pL8zK=+SWf+uBP1cGazd_r}l8Q9wP~5pm zPgV$?zhLwF8mCZE(Fjr>Rg=k1FWD?(#D0gtd-vJfe#q;eeL@o^pi1nIM`T$_Q5P&X zKFRfh&3sM}__Vb6j?PMBtAF;mrlF|4cb=yJD zG@7PC*%@;9yWgiQH>^MW1SM>|OxfkuyDf3|1o`?JtFDpa2(f`wtWb1;Ol>Ip4q8*%T!Lg;_>J%V#g1@Mw6z^_S1d&*$8~_YiG7VC63ntsa|CKB3&c zL2k;(y3D~lk2(ABC(KS?F;pEaO(A@}qPSeJC=-U`8)!Y3$WI7@0DI6S-vr1(M7CNZ z8U}`E;n*Em`&_<0!P$05mI2|*6TD5$m#<#(C;#%#QDrbi2}4zA4U@rejN5Zi{ea~2 zFX`R64c0#C?l#gp4{6U&u%=67%SM-B<1gNT78DuZ_Zegbw-0X--@Z+Lc>zVn>U_d- zGDjWusIrRJbDx`k?{|@G54$~Qb3I4sS7=Se_4FFm($Gf(Qd7s58k#z%TbDR(Ll}mv z&aa5el3=sMQSRXE?9k>h`Q!xG)zPb(s+Q1flR}V5PAABgizaIbSC>Q|e?mQ*p~x~x z3B9(2qM&I7Osh+n#b~-gB^flT4PKADQPCZbV#gqC8azRyUT$FG<4P)tBO|P0p*2id zt(qfk5x-mP);|{8I#&4~k3@eB9<)!>2$XG$h=7`>p0wHgCsLL^5EV&k6j{htGt$)( zu_(A+E*amtNiB+R=-okpEVkI)E~qNG)KW#@pLOvn8wf0=L^?*}N%lSF(ci5N8%L5QlU2yKI*E0~6kSQn(>8llM0 zMS)6^5d~0+3N;F8qBTjlq$vt)!$OfX;-+R*7hF{ZxntsOZxL+X94@p~0cAxRMHE?1 zuiHgdby`WL6=f_-rj82YnBe;<%JvSOM|Tk=iS+miEy zpYvaR!k3?a%3pu@3!f~5iFOC+&8$ki_>E|u1CK!MBg4T-X3%L^fhr?@q_>M|CIS` z&gS!19H|D>C5a!BEFunX-^bb7Mvy?t5=5iHh;t@?{UO26KBIhoMioRHy>*|Rhj(d; zf^a!wvsxe`Q#4RF60#)WuU9BZ1-3#O%!z;bD~d0^L})YAQ4g~}q7hp%Lh);^ z5z%yzdt=1Tfcnuluu6gK>H^s+5rqhAoggi97J`5+3glE|MMB*+Xq6z!f|Rtb`J&a7 z6Pf?e=J>VopnZQ$+0;}`gVfZhal9q2m;YEulN*hQPzne_6`?mRWuCDpQnnvGqG?;2 zBu5h=sxnN^1H(WtHAF>*vO&c})on`GAqYYYSw+kXUVrf=o5cc6*H|rAMAIdvtdiCh zlWv%QaK=meLiRC$I`RZO2gWAW@6o5>}L0%ektEmx#MHi$9-X6I#NmK?&_y}g!@6-m zBFaQjMjlthn+d}4geVtCWu5K)U6k!z(#B+Zyns5V?l^4SzDXRu0U1n=PoS!)6qz^; z**Ut2xxbA(8Zf?hi==5O@(j;$X{jlS9NG#=5U9(HERLx11ge}|*HD6ld@`f1BOF6S z@B`u?r0v+4r9>n^_wgg{|H1F_&L93=?*7L2sDgy+7Z)^AgJD`kVF*owt{H5?2;H>M zO_OA?B&%BXZr?%fI25kNaC=BTTO-82$%C@pOYMh!9m7$u>x<3V*T25EW!wr=10S`8Pl3hyU(J zJbn6-EG-#(U6y%CuWh-xf5->l`wc2hMs^Kq3HFb6(M*}OKVxW{c%n?#@Gy4AR9ijL zw8SY?C?d)vrK{x8Gvx_9G<6qF7Ae@&uvIiO(*0`OA-pujceRea5$MGk)hS3fINXHxzY?vvmV= z>jtvBg{qk}Nq|u&h&i;n!1C2g(vLo)TjuCPm%_1-b&H~bSXPm@_Yho>8pJR`%1XV|)l4bHi9GB)6_EdfgYRD} zfo}i%K4_I1Elutz{_1}&(Xnm8otFl&V+PuWcB@zl;r^ETxHKiybwk?ZSXD9+R z0^AzxpokJ_p7Q$ago~>y;v_|GWk%g0x+vf$34;gsdH?VKKJutf-|KL7{0doWG2IT8 z1e&gs$1zqb5Cm(6ogUM(Q!ak>Da9n@!NbRV=kNR$N-Hxkhcv4NvyXqq^5rMk<^XeN zAEW0&UNhW3B&C4JCly2n!vQa!Jwp*%uCLCRPbWC8{pS3<7LgR0RBdr~N8}=afKW6P zn;1#c=-qfz=a{cI7$|6}LRD2bnn^mF68Hg%^G3YQqXV`cK4fs?CWU4Y{qz?!VaUOM z`bT(oA5hPiG^$N+_db=alb*bybLWup)*hS5j4}?%7E9VBBcQ_R^x1iMAEDR5+#0iU z^9EU-kwp=sPKUP1DYBR>NvNsY6;ysc106oO-<^OV^MFWY;s&B%|#(C~=N8 z>~r`#-$&aXvyo+@IKh%kq*|u76*S9cxmZzVC5Ec9Tr3bo384i|(%5?EF+!&crcR;4 z^5m4w^D}HirR!~z+}}eO^w|+DinxTHN7Xb0vo+DHQ_i2CaO<1z(7mybR12Uh6g`VX zY|&&1nuemSNvi_gaahb3$cX5sL3%wQuWEky(Xa6R04K@mHZ@66u{6MKYwkR}%dH!? zune6fN~qe3MiVHN7PZRgDGG7}iz-3CcZ7cQCT5rwEw0>hKDnk&GR&rBv6z$88GGAX z1m_dZp1&ZbK$0bTmW|vrJpcSNitB6iFk&9gDRdEYxJCEiCg#x*3#9=^Aj;QFK7B!2 zR}AmnLchI-_vkMA;SP}?l9Uy#KPMM;+=Dwv{T*t>polhX&R%2YF;NiH<{9y;6S$nv zu{8=uC8#RoR>kY}5qblh8#fR=57jV9k_1szKv7XP6H=){w>pUP2C0&ElORAY8?JR@>l;z$}>|? zMWIz>lKF)6a!#2Q*oOxQwu_Rrl#30k`3!G&3mqL<(hx13s;Lo+7Rm8QT@$rw(FBOr zOPaQ#w=<$_TdJ()@bD(33X-6(@&hc-MQKHn$$~OTQ4AGYku*tJ%x26luSxufx&gP_ z=f=GUbdE-pNy%vU0QcT))=G^i2^bRex-PYC&^z2lk_7sSfg%VrVoO~Yj9P`u*@6~> z_x`~ja`U%8Kxh?;pe6_w^js0$>ob1%9fsfkF6+{#yq?nSjqs}yTT##~4{vvmTv6!g z7NjVQ&CDSf-I4Q5lI}O+ZKfgN}k|4I@x-GI9Z^~m&j>?5Qd1W z6_#h=N-|n2l4Utb(_#(=$c{^68023*K~W@*{x|;%hW8#2K7T?b%jBg@o-L_QPcip* zsN$0BddA}V0%;QvuGiF>!uZ~Ov_TJJG+=OeKrILeO@ko`)JcSp2DEujTUQ7OZ-BJ2 zir9+ORfD(*k&6N;ODHDSgr}!SZA*7N#<4wwCMGX)q`E~=bR5@16lIb);nnFWsudCM9Fih(bN7%oPsz`&*tTreVveT`k?!px2rbe)MC*8z zwu&SxY~MU0e0|QMOxge5`)r~ZbrE6px+J!OF3F_pfI-an3-q$;y(bt?7GR&OUsCSvAz6NPl;at=)YtU!5QXF~MYl zB)1s3MO_qZ_dAGXL2K#cp2^_$EwpZ*;A}kXySk}3j{tkc(BbVWjNU7B78#j~KPXak=z z2~mX>U9qVg8_9MNqY^<;DF+%d4bsURbudN@V}$7nr6^Hsn_5?!)=)R9V!Xz7U-IwW zd;i)9^m@IbX=>`aLMZaF6a;_7YVlh_o=dGPQ7JOnbV6`;#b_|VyKw{A^=SPB50TmR z74G&nLR?Z64VfyEJ&`jbu z!Jp1BDu}}k!`(5Ft&_wt%h%^r*K5qC1yr=H5&iqOQKN{n^@{E9e1LQJCQ8{b`Q>M9 z?G16>Il?wQlD6V-XNS$n1xXx|X(D3NAkNmTG@Todzs0-%%m0*T^_pI9o9*!drCK2x z75zK!(|`OMOl^(j`T~2gB9C)g+hsLfzCm268d|?caD2t-pZ}Qm%pr9Ji!!CEM3Oi` zZ9on))VM^KWbS_BU3z!+u{?nlF@CaU$Fa~Pk-APvvVby;nXNAovJAour4ex~mn2G9 z&X)}OBcwcHb#=~cXNy8qP~sVbdxwPA0pjc&X%iy$d#tbKn0d=;dW}=m#DUM~a3A`8 z?BNh=IK=7o2%-Q(kx+z|Xtg3=FOfwNP16wsiIz7f*+MJQRt>!@BPtT|a6|mnD;BR_ zq4Yhx?OoDYM5RSEdCB5xhGWEo2o1$tFL;+Klk?Im%67iP{!c9Q0>+$#x z{{i>@!QZ7!N?!c@V;bMb%Sx^;PD%O(`KCb~*las4K@j3=0&UgOvuu1%;$~-nxYwuq z&OIitj^V3I$|9#WCAKx2Zg&W_My`TsTTD;RFlCkQa6qlgOsD5uOR&6(xcbpY*aFPt zm^`a_Pqy(4nYZ70j9(WV2TRO;hwb5zcJ9+o)|~y~3C}+Klw}t2@VCB09tMn3fhLTp zU5);oyEx-9rmP~TH8m}XP@|(FE>ol;BQ0A*&&AI&mKPJcqRiHK#91(7XX_pOa78>j zMh-TdeD#9y_7QTS&}%%L{XM$-2gFH+iHKc`_~++%y2fTXM;YuR8XAjWjvyo$a!GV~ zK{{PgMFmB&V*TWp>U@c98fYUI*|RVN72=$Dxg^sRHZrKTju;0BflubIFjbMvyp3d; zWXT%Zn2eAxOBih5CAdmxvWU%mLGj5;8d<>D9inN568D`*&FZ<(AHD$M|9{>3wGn9F zUlSY9$#cP6E$QRqGRajm6^jnej zmX6(Zv2q399gy$rA+`#hsuHCo&SXjZ^m8^ZKO&i&kop_8?mR%d{Qymo84mWzQF$?+ zA?rG7TjSU&LAJ(7ET-X_`E*L07POv6&+ef48?MftGMUVgbd_*DhqcfA^=rJnExcQ| zXsr&)-hjc@J};h~a(!`49Yt(uCQbR~>aHF2`OQE6V~*bcHb$>YD6EjZlHKtxVQA9~ z2e>zP2-_5|&`?*tu1QMHiYyMs{)JpXV01!pJE2;~S>G12W2=G{a3dwZCk z!?@pNKD*@JHy)AbI-zc2z5i`w$;Fji!lVSRLm_Hpn~H%o#ECK%=a*Dff+Xdn;S{M1 zkeY<~^pq`UNNPFAlPP96C$CGavY}7K;`E&S_?&XFBwbFaRzCIl5~)(zhzi}CckmE7 zTV2!XTGaCyN86(}e__jtI%{c*fJSIAEDJ%A5p|PPRESU+-F?LM<`O%DiAcd1Qd;@toc^01QI0e^4-d)wh)R}`h9g4BWMu83U4&?LMcz>{xA)L0m!JIdQ@;H23|0m4 zi`NX)61fSuz29MX*kiR`GtUBU-Z?@pK$A@d2YXy!pWvUrB8nEoagBR4WVo}(Exk{a zr%Z}~aU&5GC5y95{7t}(@4k<5a|gjN*xDLXDFS{FQ5rIXQJ2flK4nkQs5cwJAf#GG&ylyGT2?$W4(VSYy*-ghml?+17Nsl+q96&Ts5G%y1(K}2 zmJH*n6vVa=1VrIYpyBIyzMcuXEYQPLl!EY`I*WfV4L65%n$xHff!L6rpCR`yQ#R>6ziD9~Q z?%rjgODM90X*rCK4!HNtZ_o-Y^NVYARYP|jvU$NKPl;y-M`V*Z+lSkbbf#oWI zvZYEhin^dQ1a7>0k4#snb%oy67FMrIElT8BK~FbP%Not|a0X)}%OWXDEXT&{y3`w= z)!8xH^^EC9UvmEQkE#3sv4-Q5YlupSFbUS#<=@O*u!mF!z2s> z{Mm#k^vSD=tSpei1XUGSJ$cUL(YOd`56J zdl5C42koM{_ZYy>#!CZ{H8|GEfmwCX)5x|E3SU=5v$o1?)Cv$nR9*q60hGw>+RC2 zCZ?sM)ETX=5w|s2+oEbZs;EFIP?QaH257EL3$$f}*g#8zC`q({nP!ld*p`ibuuUO} zly!@0ySiW->l*1=){NK4a$YqxqR=9JP0_orKa59<)}|u6_jCwtcpR;`Rnv>7IWdHHI+_`a&(sIbt0#mmr6`3+G zsq=)(vzHJB2u_#n!H8t#bA5V&rJ8iT9(h(UU0$*(RLrO$U$1!e>II|kK1MYaytYDY zOEz|g!Oj-h$uaBcj4F<>yEf)tkJ1)##)ll(9l|tYqo~-OE}bl=Uam;f07=`2Mn;o0 z6i2133(~XKM3>hXf8U|E@>ZvdNC0 zF@N<5@mQgI)#CLWR)&bsGs%1%XM2nJ^OwB;;9a_V+f2d$%W@Gtm-ThUG>F+6bQugC zG-rU=h$wl1QP;FhjVWkoA{2STP!L%yms~!5id@&ce)fXl;uhpOr5lQWvHjyW`K znkeDJzy2Hk>aYKXkN?%r@LHRRXE2|yI2v}@Q56>A8hx*ib#$9TFzH-R`0DZ%FJ7Lo zd+%*-+}S)}a^P&5rp6|u;; ze04#cZSZ;?(PD{h7$mwzCQHb=fjt;f3thVX4u&ftixR8FhRR=)U0xHPU7nu$5h55Zf}umlL9z|Va;O_rNkmjt zsf)MN=p%^+kKg+)vZ~OE6?GNUL@7lOlPrB&!@wB01e%0XDKxVc!R!)s zOCy&g6jkNc-Vsum5MNx;CIQ-xN2#PZj{V>FBO6Sg9TWK*lr%-2uIYpot69Xd`jTgR zKVG*t~os1V>BF6g#oi9Bdlwz!vluz-ACN%(HV`A!pZv58wX^)>H0LlECCXZ+~HfgXS3PX(DeT?pqylGjVpE0XKgfhoAbxtnN(eB-# zY(#cq+v4u6$DDoflKuT{b{@aQlMjEv!`&@D`S=%%_O|%e zZ~iue+xI!STu}I@+&mnxwReDCskDiRim+Jl`7eIK(anA8qG0yL3$9M) zghkA@(Wg=+PM1?u&&JZB41C(UKx`X=$&~r=F^9KqQ&kmO$HVG$S!E@io{r~q(8Q8x zy=3v^3+l5=qL;5w6^SZuxqEA$Occ5FL+o*%{o9A=+q<02=18w91Vjwoq6!jw9 zjGX~e-=k>-vN)m63pB?tqG zdacP~Q#D^7oA7I~IMTMjs2eOvaOyJqUb4QR8HWI4wb1up)Je~SO&C7LQB_HB%<0fHzIM+t3JQBAH8 z*8x(Ik%T_cY|7_<^;hU(%e&wF2K~oxBlR34Q9^NDV#8qR`xKi1L6>oNh77ibq-o5D zPrigYp)CvI>6{P${NJ)`+8Es~y@Neku_c+#NtYX(ZlC?fk1+Z!z5Q(zQ$?;SqU&o^ zMaSCSLK*bgs2ZKi1?}vLT1Z*XuFy@3(a{0vWJ6i!G}jZ>$FE7^4W{SO-+R+Ly-Fgg zv_O{>da}yot7qhkIhF{+{e8l+ggjtq+gzNTktGR~6>?SMnHFtbljIGGtf8nnqO5SW zTrykxbho$IJ~$$JcFgg!=LmVu;`uS+WQiH)OfOHF1Xt9-hQ;MMtJxG))xa=uZXB`m z&SRwBkaE4|*~d>9^#|M$djteKx(Gym}? zRB^#zxJ_p?qBGb+)C_v#5oJ>&sTTRbrRi#DfsgR~87Ck81i48m=Su_xlI4^^StBhs zEKW}u$_9GJ#(w)I$-~8EMaQfv}JpS$PviH_Q>b4~pV5pe9c=?)t{onl=tH}mElqqH@YOhCi zV}vcMJp1`i*_rkr760_scni@@7 z(AE|1phrWEm>0-MG^&Up)Yv5yqDZL7=!T6SY#7)Emp}eFU;bDB6`rKvj=I#Ig*E6= zgelQ-O`T?_Wq}mN6l)*LP?(>bFn#)h+ee3lMZ(%oa2=bS;TElC5q2!pUI)vuF?W0P zZycd&8tG<(TIaNFO;h9?b^9!yy+)N){5&TEV&5menxa$Br9XfY!VeD>`h%I56q4sPtxxwso5LF39s`2E8&B-y(e)3byRzMe3iXfn`s)R33 zIsf7*!Fr7)sVvf%z2ANx>*hV0=O?srfaqwPpI>3Q9fn8yG?GHN@|myZM5_gwDB?JM z%-#^A*TeQ){9uE3u!Wk}eB<_g28X-k5_qOVRh2BlhogVx%v13 z$tK|Jt5*n$OzH<{h#Wq;i(&O>C4s!j5fu>R7SR;RwT9ekQDz}pl2WA+k|uFFyGH4G z7<*&HogwpIeM&S7=vjS?Zl9#A2`(2XVTq#|R1^$`TS$sVBQ$tD54+!?RdsZ)Lqkfv z-jH9-NY2ivt}bcT0fnky-oHm1mYh#67~Q(T-S7S;V#lGCN{o)jRhVNf=fs;Bscw)p z9q(wLrtc!!4q=ocrwNiIqFDw40%ektZ$hd#K~og+rocu*lx4y+Ku{Dc!=x-qp%f6C zWMhS1Ym1tU5t3qDHBpmc^YiPkyh?lAC!D%V}Al4m${jhLo3xl8DeT ziSryeuW>DhTo!2~pJ=)ylO#}eWI;i4bUKE{$v^)$TtEK;&#|dms3Z~3=}>MGq^3sF z6&hVf%o~KVMwTR=e)K8XbVZrvTrcMg4-b$n4cBq0bOZOTd)$5dF-ldFlo|b-cSys8 zcmJsPeXvc+qC^lHBo&e(#_%_&o0MuElO-kLI%4zsoMyU0Npr%<3bBUEm&aT# zXXv8=uG^)MWNv={TU3>XBM2a6WO~cC)kh)!@Mxc&D{M9+5?c3OUTNJ8DUe+{{f?{j9NYt|#$AA4(Hgd!G z=m4wJMRIJ)O@bpzL`ucLa#$@UP^GxCgi%x!>kWz|ktGS;lS_)_1kaSoHcQ$xrEA+< zTwk+&=aBcl`2kfWa4}s{k9zd)+@h`iTr;qE;=(sP}&Am8Nqr(l4*kkC9kNe98s5XT#MQdAdbOMku(L>>!1iC6^)=v zja&#~)!NQW#dcn_f>3^40{yjk&_*jFmbFM-9SN|dS*BEXU2+*@*TS$Z$QrUtB&rHl zNk|@Mh_%2ZT46=uoAP~4!H^UjL8f(WKKa!z2#=5H9Bomg4Z+z3YB6Hi9lrUIdNztC zlG-NM$5)79f)QzK7Hb^MfTnMAxV?+5*&K&6#+?Js&aNqxmeIE!VOwK_R!8$J z!sBCVOGlS9HgQ3{iSa5KC2h&iW)!N&=CH@^&3i2T4VSN;k@{=YrlAF{vNb(PKvQI* zbVJ)V$XWwpMpdL(rip&gN49PB92BXKFdpK(m10{x)}Ma?^DELkAZ`+rs%A$P2xix8 z7Arj4!oG8hu*pdM03}Tj!ws9&oSmb)=&{7L@8fwYil|VhIain0Jpa{4h;hJfuS25S z^hbMWrhyQrm~BKJ1W3u6f!Y#hYvf1w$<+a!w#(kT-@*ItJAC@j{we+sKV&F5{PO&B z99L&>bV%>+Eq2DYxHsG)ScF)DPqCR3jwK}3K*&XuOd#3qaH??cw&iTz>K^ ziYR-tm{J7FDxwy3(xS#NEKWZEl>Sbiwr)u#Q$$7K5>&GwxVzuC)m9aLcdG9>e3mR?7sIc!W%d6SAUIpFy`Jj-^H&RuD^PQ ziNKA)i0ER5b+k(|TTqr2ZCN5V1z98F2n9w~)5i)fw+Ryn}GChc|Fp%+A@& zt}#W4ZnuZ18!zl?AMBhqdox87fsAkjD|iJVojD35pD_7O{`^I93Ek z-XTeRNt_oPJ$M&=?+|r&o7rqZ5tjs_L^RJBnHJOMpV0&x@;Jj7j1dMNm+=zO?9$&K zp_wA##VMQ5pR)Sw8O<`FT8HSHme-4yBv!`J-ACA?ha5cq9%iqDN`-Xe0QX>@x?{5z z-b{e+HI2^g9oEsB)$=FR*^1HwwQJIm95P+NC=|5L z2>W~Qk`G;WWrMH&)xTx4Ub0jg!mOsV-Q#cl-tS{~`$V3KdT$TGQgJ3T>fH{4Gr-C% zM8je|lnI5Ljwqw12?Y(>c!%!IyO@J9Nm-EQIkwkBYD*9#Hgg|2jxdS@w`WqdDu4OU z{*uMhFDdjcyTAFny!i4p%H<`k9y55bkLuT){N#r`yn7dII7HbSGu+>y%nK4x!n=JB z(>5vU7SkFcT79mBhHPMC8Ycd$2~zNy;qD%y(`P#0@Y%ok3+6xnkd7u0OfOl#KEq!H z1VM(JRcK*KGTCr^@)d$1qbPl>M#U*bdYvAzrjeKymSvM&&k>RUQEa*W&G%5<9?MnC z_U=Bi*s{4kA^z1<=JP8|SH`epq^dz{BplO)re*!?f{td8bv42&XIt!$>lV&8@6nRs z&L%kHZTzMoO%|BM6j_2G%g9o}W)U*hO^W#pv5v4Tji#-LlN8gj$>RW1QE8@2y0VIF znq*}`Qk8Vv4uUV?YdN)DVa`K5u}_slC^u+^h%C6RWIJb>Ec{CAcD}5tCjTG8VExB< zzLq7ST-8`%a#P6SKQ7bcoyFx$tu-B~?+I;Hlh-o6-iWHKi1LIW3*Iaqq6oWfX> zaE4tnMZ^#_IyG#jmk3gWD=47I=)(@)Xn-h44EqB_P2prQr?L$8hTBxvE1v!AW2PIQ z-}vKy!2RFJV2ZiisAWT2ZYB`Dg8-e`#Hd4z$F2ncOM z-87hkA;Emc;^G2LfZm{wVCXcahB4}~^X_}(QAp~qaBYjSX&8;Ruyva>h*%aIZa#X< zCR`(#3Sv`mI=^Ck_a<%KkbLzDYi~$1_Gqe_Y8la14O++L@ZN25RYMbNqSI5N%PZnd zOe>1?$0JN#qis|gp{6$+plLd3lu=dXT0>m8V=VzpoB~2+~-oA}=`vBE5pvuvO zoFa|zXA4YCV}EZ4s)~-O^WgR^%K03r23?j2qma1HiG+%aJY*fO5t5vuX;Ebpp%HLL zTbR2etX`iajLE8k?ZFndVh~3$L6$Mt-J{nVVYLc|*FiH4g2{|}vBK3=bk9OHO%z!n zmSl=jWR(|KTVvAAhW2X4`7b|VdUl1H)$AVZv-{qAc90E=rmT@v z9cR?1s3DUTuq2*<}*aRfg3)X_jm&YfN_2Cyh*VXM?3pOKP9rI( zriG^IAheWXh1uqQ7fJA_}E{V&66sSZ2 zQB#p!n=0KPZXyIxM%f)v?)9N#p=oL>)?%59!Yk3X|3-1#Crv~3bqVy>(g!USwLnqr ziGr|inzp>ICk*>N!5EEbHZfJypoTSz<%Y_XsCy=6Uf?eSN(m(0L+$sd#2PUQk%R@l zKOxK$#=|j9GNF=1YD*@mGLqSxBF%7a?sN0;Bi!Hl4(hWj!jlQMq|v#%k1%wJvy6jU zAsuzGU6;$h`W0;&5pR5gXpN-11XYdn_#Pd7NEM~TWzOj6kkWNX@{IZAB|Eaj^=w9w z#MrWktScy85BeR(w{B2vkFXt;JY6uEo+0Nk=4eEimuQwl-|Ueu7Fe!DvdLJVpW}5s z#QB`n^%^0FQI58`3RjpBxQa>d{!JE1j4Ddl_l~eGuhCV5&=2v;0>d@XTpRz=XSi=* zI5vW$vPlZI9=t;lM&xbAjwX@JV$8FB4^EtE6KH{s* znoyEaT@UT%E$;u|d)#>Zkk9|}uL-}(Nt2K~kJ)ids2jrbHQr#G&cH*_bYih3*#vZ4 z7s0U@$u1qmVmdizIbTwlI&H@$n#Gi}4SJ`8xLDC{LNwvc$$l-VZ}RX>&gj-XI(nD0 z$%O3s454oM{4ajY`I8qkfCfmqjdS-QgWvo%($p^BfL>GtT8*eHD3(Q|$rN=(6FbO~h9Vl&wvICW5^1r1^V&OmxU$aS(F*x;LL`** z4N$a((a5E;bQGl_+AK-e3wA!($LTrKp1Pp>g7 z8F6SK=_aybp#>S@Cc>&~6tzSZOj_QMz6I4lFk~7@MjiIpx%YtcPfu9qG28BtJTF)+ zuMmZnwbCM63g&JH*)@?TQ!an}Q;wr0wrz804Vax>LC;~J8#tpeG$Lu7QKkiosgYKo zIVSCPpURcd+Lp3uX{!poXHw`D^}3+YeX1}<79}j*LY7sMD5hOSY|H}V+()`zQjR+; z`WqxiN6RJTx@|GEbzRq?Y1$JIa#0q)7JCD}CV`e^Nf0FQpl!rX)ik22Xw*shX7M+f zGaQc)FHf<;Inu}`tTKw3Pafx#9ScWLsV$2*4=_cU&Dk-pzI;kn7Mz}3A_hyWUWY1( zS!OU&HDbr^!Ie&G+^XqGV@9+F3?r=y|*UT@kF>gQO{%`yi`fADf zN57z5`uO4ryN^G>9FNH>aAk$Cju7e!%Q2}Wk=vGyx3^1sd_v}LpeQH`i2Mz%YaNSwUWu%$}a$-n)f9U!u)@ zWYr+<=~Qh=8b)McOL=#XvaU$h5pCPzj=PK>-9<7CST9kA2Kumr()EbTik;mfq&!1y zGPd`|%(IaCdXBOTsWk&zvyeoEtd*&1h2!%JI*NtY!fG}r%u1?355v?b%9yCDakPII z{o)ljOo?zZ;q{qjSmn6FdBhmGC|I38dKwHI_K=!3#u$d z)^yfEMidrw91rVY4@VVoMFGh&P!xr@%BhlIdk1 zLWz5$i|Sa^l0Yf8lx>43NO+!yVOdm~N-HQ}n&g^-QVIxFL!G4*ih!c3l^rwG_Kv7bjieS)w)Qy~?(pEwTm0F-_?IYxKpF&uX^f)^ERQd! z%aml2lC=fNlVeB{x<`GKx>fqT9{eJ(=caX-EEpI63ZigmaBj_q>Wnvj7 z##BLsBuOCXXi-j+RG6Ac-ZmIfj#5BXH-fAf zSyht=nsWK3ck^qJ$v0a0b-ZcSR$kGRxAG!!^C*;iu16NdWJv_8fb-=`#ET_X+mh%4 z*V74Vp)kC48|i2lBX7uM3EdqbZUU}fA5(8Oc&g6R({lzRhoNSptT(LI5&F1Kq3c{8 zpK|&7k|-A_;}}V3IC%FhcHe$Lrpe@*%IMB*lC%QV;QrtJ1E!Npmd~EEWp%N16LB;| zoh&*1>J?>?({UZzw#6HC@Oneq=P!t_CYZW`?6}BP@kXfq4UMK!`5Vg5UX!J34ipDn zwt4ydjMw5vd~f$A)5{5Y6)`kBRIEtiU((hh_2Cw+*pOZ= zkdlIFn`2k|r0an7dW|<6qHg!0=Q2xTtfM{FR!b$9+&kEzbUWm-O4WjH*sKdsEgSKM zPTP%9GiWv;s;Q$WI-PI4&#TRIjz9dIUMbP|2~G8;es%Z$eYS=pPSSu>3F(i9s9uL+ zyoDr)*fn^zhcM_6WhtVe(CK@Wd5V}Mlq(;LP2&h-!fHH}np>&_uNs>Z+llYfKL#Kdq#+ls6b5M+gH9dKvoh$kO@ z3X05&R~LNK=py$lWL-y=Efl%I^fa`(X449Ybwzq~h`BXFAMT)S@6kEBMK8}#)>Brm zz9RVS&uEQ?rfbl89)deWc6;FTpsWeDy1b|UPbgnqlTNRhU7hjdi%&3?E82@G#=V@q z4<52s1;+g?q`u3x-C_Fl6^SXaW+n&qGkdR(kRvQ|I{W72ZNx4!)WlPqR6_mP5>Ca);V63MaAWQ~hg zXXNXGAN#!1g}mA=4-k)Z(wvxY{fu|GHTP|L@pSo zIe82H-4UguAoo4=P7kTmqhnhv#E9N_h@uL3wub5TC|i-TEJ@Q8cez3ASmc&~K#q{c zl)gwQOBg#YTaVu5_}K-~WK9?Z1oI`AE!=wVJ<{b0&dzxieu1VM1Z|7j?{N6Hev7N) zV=P5OYD=6b#daNLvl)wvGook5c!EG)X2g=h(X9h)-5`jjgo`=5cONl${1(QYBQiv? z<(gtXBP|jX$;1#OnlL4|}% z;2Jt&S(2_-;A}9v+bB*K-}ecMmYuuzY3vbKFD%}E`)#^gTYUK^{{l&i**Ut&y}J(? z4TdDahPX(0es+l;1f*hvqDoXn%6dMbrp8ufLXrjQ9O>0b& z?n}1!ann+NOtsWlRU90=O=^zVJb#WdU16#v z&Q_09tVmZYYy(V5rBxh+(H5#Vz`y(jX|!SIork2UjG*h_SZtyV>S}|I$Z+qF@%}!g zVPGBXa5=riwQSU~MUG0Wj*5vwQ?5~pgy&yA#}pL=MJ7mmmd7udT+MM*8_zMwnwTnF zv6?TKt$a#B<<|X&2%|ou2e;qQKdvUUc|w(CG+9czTo76YUdLdgfqVB3zxU1WQwa*w z%S*J_$GdrmV{|zUS9Hc>78TTK%ANaf@$%U#irE5l)Te*6jiKt~aYQRic%v?Rx=gj$ z5TpU4hc^f&28Ll{y92zfF=<&)=L@#I9_jUzI8HEC1*<=%mR*#prFR9Jrll-1vdxC! zR-d}b$l{vo*@iM}&^iN}d5EGYm{my^5W)@f=g-O4ONyeQd*c@92A!LS3=a>`UcMrW zV&puezFN|x1woP#Y!XOo(yHRppAnS;WmMp4D#>C^0NlEH#OTHyR)vVT3@NUb5J#x4 zj@upJL@mqpoXvbro0N0}jaOGQA|V3Np;cP89vt%aAO1F~)&)t&@;Vd}2x7}MX9pR z6OwR)CW#nDOB1GKS&F#3gK)i}>DMGxiYC`+b&V>@7@|RE`+#LIqx4e@DZp|H#3V+F zePmUjjAs~&4I8(ncV~~y;+kx^rfwvp(SQfvd>8ZfE#|Wgq9kLCx7c<)ejfcCZ7d^S ztSF)gv)e@$AdV8sO@=6dU}&J~1ZhZ;tx?sKEDoVj5fu%;RS=vmsw7gT6qv2k z((&2<%1GkhuJYJXH3gC!K~qTT9JQ$^YLC{jN%MrRtRfj2y+^mHEDc-I5ImVIZqSF@ zbPo==_|->*Kl=!&toYX-f5Gj?@9_3F-^U!doE{$|q&ZbqQz$YFJ!Zk0f$O5>64Wc-t+Xz?c+hW^fg?*0ynB$F&c0&0XiyXd_R_NJuDGoC;H0@Kr}>k_$D zm|ZWCB%PCsOEeMWqNdpd#DUN2vr`I5WN>gu+6n~o3zUvS$MslToFghN^Yx6rZnG=7 zIO74udc)}_pHeQ?&;TNsu1Oq4$Xye6)TdBX5>-a@JUUxDZ13#T)&fBqVxgf*8r{*D z>DeVxSdhmtkyuj}3PG?Y_apKaCPIsG=O#vfi}fU6WcLuRuh8lg(KgVXE^-0>`3dXw z6?UT#2N`}`Q7R7I;VzPF@b2&aChE-{9KoYjbiBPi8qXrCD@@BG3sZ`$pd0&K{>4wo zpB>XPb(FTE2_rOJM(XJ_Q3HwrqapI$8x+GXnr_ituK4hu|2cBBA!)$UyLh6`%a>0% z3+BXr!no-nm>PZ4U^%%WUB-+DyBz)YZxC}ZwnN= zPgT{lQBIR)L}g4RRoHEfG+z@G8P=@>k_P^}fBGks{+dNmGVEA9=x?EI_ZZ%~i9Q~o zN+MQKlT2rXSxom}3wyYaI54UDGPNO4<~dbfB6>FRZl4{aho7XZ)&Z(%A*vchT_T7j zaX4o$Q3%C~dauuLYYWX!sII3R+}_7~xKGjVazpDv)#6tLQId1`_9M2sTP*(aGnUm7 z+jVgr53#DysuH;@5$cx3bczv_2zi2SNC@!;BTTR=nJRD5J3W#ukBtbKEYaE7rIjRt zO-z;7cy<@HSkd&lq_RvL1r$m{xntuT?z5OI1-Xb3O-s%-eXWgl|E#WsRFZy8>PF+M znbKZ9|KC+jc~g@WRfzI8474Q0Y9x{*CysrFRfb$9Y&-+&=6%e@MD~5w%U3Lq7o=Z) zMv(+`-~AS|Mab;ak3d&3zV}_;{hc3Bdkzf>)gmGaGmgIX9-^tTczTSYRCK*Qmf1m+ zL@GJO*mf~H9_cbiuHP)t!Zv1g_8et0qg_R`l1gdlB$E?7UBtZ%c(wBR;E(@j*gJMu`(VTcxUEjJBpI6PmIhnXOUsl=<|8FQ5JjC2ufRElamx z>=+pSil;yNA;*_zG>*x5{|KwsL*BnZ+v`$`3XQ);Ndi3AM6*5CMNR$bhgj||-e3pq z@(RD0V&C0GT?bVCf=(PV{nH;(`b+G67fTb6>z3~R4Hl~mFStNhPZ8%=l%~$Yayjsh za4U)9{DQ1NMNOcI7;cx2;vx-P4(_~1Yifi|j3&02VS=>|QT!zrPk+Ve zbi-GZS71pL&#w^A-Xt^DLc(mmKx{<@fJ9BG)o6|m>x>(F2YCB^B&k7oxQ|$f2%8-9 z?vUyE3(_YqN$Z;UEa$V+IicyXb>o1%^11Q&2BU}f5bQCMsZv$}vY4TX4W?w!<~4P; zL1;okL81NEe}iVK6bA>anwm6Q!z@H>`v^)+m=_$p^%l9I(=-xtsZh2m_kQPhNcvld zaf6+xb8@a{kUBW`^2F@>LCv>KTpAsPyXDIsPB zS(K3$4JBY3CT?ors5)t$lC?ROuH%Rrismv!Kucn5LE~Tk-~I`o{>8r|$Wyj=Oy0e5 zoAhLkvUiC2-~r{{7OErh_IY4M%Q6-^^&nIQ43xC z>4NUn6m4_KMxNlv6;7t%*E(swq0}r))x|Cv(o18D`IB=3i4Bzrc1aDn;OWwZd}yWO<7yNl3Ct*#@wV5fg!0(kaRsQ&KT@wz%vl zsP1i|p~KPE0r4vz>F(RaH*cVcGQ*-`ZS@dk8?BP)cRI|kF4^BX1iQzk73icsS((XZ zBbVat_J5POwg<8Ozr03|6Z14TLx9273#7g&kORpL6B7{APEAlXHxRBSF6#L))h;1Kih7AjD$CcORq@9^*sexKgKF0mH0>KalA!5GvP#jEtd~oAlFIz~OV-mlts>KEGK29hPfw0HfBBm3 zjUzP6Cc0kWxfXhqK-VTNOQfP5qi3@=&QXnsjELLT)Ojg?C-S&Ggzos|geW*hR4{+Iu6qy*5ppki;=&r;R2XEKje=PCuit z41%g4u?sxQ!bo-UtipXcw!ICs2Rl{mKl&dAtVnH0GY_69yx{Lkb zKBa9DY?cUJBC2g3efK?HeD*0{y*lCD_ur?i1@3Uj;NANylN?=F@mDJNpdk|emKPI4H%zYlUN3azyF(Lu0j0#oO^zQX__cSj;%HrMMD{v3{;DocW*GB zoil&+3VZFdX(HM?JtlwhE1v)LM~H5VrjRIWs2qpgJ9o&M5+OJ2+&ZRx+olQ5GwtHu$Rv@+QZ&3@S}Rv|R);Mh0?H z&{#4{t>oa_Z_#Oc{PfTNobh^t4LF9y;P8lYzl&MboUb>;c}e%qO&&jWTNw``fdmReh#4z3SGD_)rF41}gRMeuO)9H}<3$#i` zQgl+!AhS&xr;XmN=7Tq(dTOxWQgq!&fF*e>`N*oXIsvx>x^6}5Qac=6!IiM zFAChICXON+-Ktf?3!8(T|4*&iOZC4L54xtQS8G2rRVA0oiY(2@g+Q1Vnxvo_I-aI- z_W5UMTO*Dh+@&sfv!$RIG>wGClHUCXbdHb6LZ3=hwBEUob+|{}^_b@=O;uB+Io|#@ zLF%(J9B_Vqjy>$+dL44npt}Y_vau3DG+B|^Q>eRw$wP_vfV!r(dQ7NomPmnHu ziB-rn%Ybw`Cd?w*Rmn1nsFWOA>aw_+GWFNUp2hydhuDV0CQ2x)itccmMpLP!np~HO z>IySTQR^l7$vOVy1$zg_^!Ikzs4e^tzak&6S?Ueh&psetO&C48hq}K*fleMb-opsiAhPLIsCF=Do3<+q@jy4+G5XcqX!XEmh<47?_z)RCNKW^A5)&3ljTpz9`^)e^yqo^Yw7lt7lrO%+u$c>2NT zNI`+zQTg59|9!ezn?L<0|CAtX2!E`I5G25?;K*|M7ps)NDFc!=%oTTO$UYEwYOZi&me_WXe{nPkA{5 z&mff=R9$0ye#vGrp{upAS~gmzkGa*Ru4KZ>z)S?4GDWc!;yk2@65`8K>UBaqyQH(- zp(zq_RVB1EQdQyL_=xeV6PV6%b&JY&(QGG`B!wz3Rq5+%8~qx(IAp0(EyLd$Zud#k zW}Fv72pP*T5t2-WAdUl$?mZx>3hcoareZMhQ`W0FQm>0sPYgr1zYwAuNUY=gD#aMWsFq9 z_SPPo_!XsM5Uc_wCucO-n%4V2;+nbB$`&f!hJe?B+8}fBPcjo}vGFU}1 z`7)=!Jwo*R%r%vx9fNwEyaA);F`=OlfAyT@ zO`-{`UK`2J$)bWg_a5Soc3Idqx88k(HuRXxuIR-Q#l@KY+c)XoyUF?46{e(d_`Pp& z5>MD~Z_}(pKK=K9M(W2r`ujh^yt~Wl<4^dF@68F+hWK(uelp|5b-;MN=FWqMWKoWm zmXxC*gH{XEHSr|S3>~A@K`~7<%fyySf-E7+G9=?otDsz^R5S?1K%*jwL+0@e|ElD{ z_AR=-4#v(t%E1wexLk|rV_r;ih_s{+t8b9UEgNL+Ko7X@62&Qu` zpS)x_c}X>1pz96?ckVFS+2Q48ii?D$NL;50j-ir=0l{WPe|rbJJwQT6)7~%|rHd=< z&K9gg*5?!KoBIq74*BZ*n&&_JhZn7(+${NqnK*xI4jYLnSE^W}z? zu92UgF?sPE!*g&B4`>V<8o_)ur=@CmPK#PoX}WE6&BQT%Hf2qB{|-qlXo{4!WKxwO z^UE3Y`GWF#&en}RT(6DD3S=Q+7$%-)QDr%bB9L5(;!l1?;I`<0`@4u$PQHl9cRlR( zklkPZA;||Hg44lILcF0vAp}uUP$dQS_8wYg5C<8}<&>UlqP1I;MTJpB$Wg)~E=bcH z%`lPDgko~_rdPhOxeha=oh^*rJJ^SZh_@cF-)rUG4_( zb#!s8mN2{i9mjTuRgrf$tCcA76iG;wRY{(v)Jcd`H>kEvR8?G^o}v~NgTauXDrwm= z>S&+Bu(5R&sm!U1nj*?@s)nxD=JBhiblPtY0v~_!DN4V^{=@rFG`Ri#o4Bc{sT~v7 zZj($lbbBodM?zK&L|h>%xOjca>tB69{`!K|V#@Hr4Q~DJ-^OZNTrJ1=(*^lrjbRw% zX^gwwgGxnKH4NQCl4_(nMHMAU5u-R7uF*#*7FDMMN81!K7-5coF+;UITp`gU8FF1= zs0u=AD5a88RHS)GD>uob4QiF4l?_7C(L4{4C#2&mtgc69Z((ll6TEmukcW5&J2cPF zxC$@mD>`+rLv!mUJMaGnt)sUvZr(z2OqP#dVtw=#^lh>vBfXqKnWMBc%C5$;t)K)k z-F_dl+v4)&OC}$G!gkALUdJe%HreBAMh|YY_qTqX?A`&@)&SjZkuQBj5JOq8ID1W8 z1kkq$>Xc|aM_YunbHQ|4;C$+in+*02Xl)HBtBh)TjjRYP*G1GNB8}0c=1l{j)Nt~} zicpfc$TRw@hWzDg+`BeQ{~U9;^@BQF==$ecr1c@I| zloe^7<005wUXkZH{o^B)ZkM#Eh=Y)=60)-?Qc{xD0|Sa*d(eOeQN5e}kEo5C(`cr&a~ECetX;NDYM7qP`Vv1{Y zFpqYSq#EP1Q_NMsr6({99i!7nv3sa?3!MgGsOZBU3_L8iTO(`hCQ9q9*ZP-I+Ziig zQ&{Cc{}#t)-57EBP?Dtmx+u0pRZ4PIiYCjb(v+smDHdZU=hwt}fzV}w*%-0f&~ACi zo=1DfLvpv!?G77%j?xsQs{|#hDK{(P`HJ?S&Gh;TC5Q>akcU6~brMCQ<8-Oi2D5Gu zl8iDM(%#yo4szEi94Z+%{ zb_`TS!5sC-be(Flp&TzLs+2^{Xw-&03bAS^wHB(ZlV~!{(8Dn`x@nDE3Ebm-jvm~{ z>2)!6ohpi1UtAGgPN*ge(z9!*6r?J~Y6|3{LRJhE%cM?2vgsv>W^(s8eh>M0kF#fA zA@wZmPM6i6eZpcsrg#57*e>SL4f^kW58vvL7$$O-5`Fa)yO^?we8eK9tJzdtl}sry zgo>qG=qjkPPJv1h#Y8V(6UQ62?%zSuZMwH^F#66T>b)Kz5=LX71_jm1$5AAt@dQHw zRTpf=W9rFMI>SDzV1wQ5V01c2rb%8TtY+6R8RG{bLVzX-3@T*NP|6aL;ZQa*qaQg=bQIgxnOO# zIojF5RaB-|*ED%aNl6x^T%VlK_yKxRGJgGs$I?TjcjovchTH3e@PvNR=J(cEK=+RvTuYf6nB~FK9BKR>#6NG?KzZ-XF1d_dZ%u zF#GIFinCK}(_}4`=u(Pd+XziT*JT!qE6OHD_cY9|LnExZOjEz~Bhd^xe^`6&l_qKb zS#|RNfBomTI0Pt``K&0aZ>lu6WkDy+Qi@GL7KOw?NO^$yM9}n?18EUSQQnQe9w7kYxE%DL_-z`ak4UXJH>O)=?u!ztV z2}N$>dnr;{5>wDUxIz1Oe~OG?3qj%QkvW@d=--CDVGPfnR4U?;X^Czg|Db720nU6ZOjt@At9}zr0MVrhBh8F2x zUXjgGnmflF?T#=S!SY6%-R=7{W{uJB;_YnX^+rT#MiQ^7!jRIBh)7Y)7N%|?2?_F? zS_fG-aE~>D|KU@bB4nvs^uF~7MdY;g7MtD??RAB>ze~}!5a$aRuPNl3&Ztk*?ZBXe zW$X0fl*Q>eO9YdX3I3}y^0YwJ8U|LEEG^h|Tezl4b}?bRna~=vvDYC@k)i1ds^uWG z98*Z>LZa(9%#(oD@h(!w0ZnIia!GnQ!>k$_2QDM4EXHX3tEReG&>zKOQA|a+;#`W)ew$CmR!SZM%{84 zeB%HRLGQjt3_f^F{_lQ*?+1vsi!L09ef%iq{PA;g$76Ws7M|fyET$Nyhg7CmwuWLg zWEWRtiv|5S0cl2RTDV8M^bX$T>iG#<>xkg_OC(KjHGYYus1zNC!Mk^9)fv-Y{sNJK zTB}rPjjPv4@7zH+U79bSv-;^rXi|hZ+@ez}M2*Ct*Tp#6MQm-OR4I)lQ${6a7$XmC z^0L67X>>!YzqTc4zNS9tqTx!>l({aOsT}JF!$4OR3Pa^OizxGqGVnRPc@MkSMaO({0TC z9g4GzbRFOt4xt}Hk<;t8$%Mpqcfew?Le3KmrQq@F=M=F|w3##P3`lC2oWCY`{t}u3 zD`_}<@D69Lfl?^AU5m>nU!X)a*PAtW+(TT|q+aG!{Vp5FrD-BWt)e6e)mkRHyylCK zKSXg2?i_s^wdm36k3fPx|PwSHdrN5ykBv#>? ztFOKycy-Cc2e&wI2fUo86o2P;*njkZEM3!kc1@TIs;Wfq=$L*;esRL$%TLgSkK5fx z?MMW9PF2bbH3!XZF=?CVhF~)e(e_73X3exLQFlj(c8|!fNMBAcYl&*&|Z}v$w z38etDRtb-`ktm3sUeois48H$8%18HT3W>uPF_H2Z`I9ej##1aZ!V4Gsc7fq^X!hE; zhh40T8CrkDSL&E`TJr0^`#V^wK}Ln7I+V4KDV^&jcB9}sD#mt; z&DD(e|KM+M{%1d@`tlWJ5ppt{;7?Z+b&ZCG+ScgwJkDO8g|8gUw>W_4opRJ?HM-`)uzWvXV>U>5?!1@)y*X3#_(_dAN-xNqqH_pVQJh zIF3vrl}x8o+S`3rX-spzLF-!V-M^3MY$2&0T9Wbd>>2CLlsmhJR2`Q*%jnA*R;f_T z0z$teXv_E~Ur>C!V{~dqzr(e>p3Z_v&SXp$0z?H$2RWd&%^D|sg zL0s`wD`2m77^eaLo`ao4@imeVo7SX?bO#RU_WFZlTOOT;CyCBkr zI1ld7%kB`Kog?WIb#0TTVDuG4mT-0T93xs&R|%~&qnwT@Z|%{)`3=mw?~r>f7Bm>G zKDKP2W-3G#wJbL^jihQ?gl!gz@--1-`8tw>b%QF|t0wmYL{`a`Okta(afM_lm_rF3 z2#_@vs|Ce!#p09CNv316MgdKuwL2n^PQdFSLK!_OsOD!B(iMw zN&#GjuBuaf_=L>&u@oq54M`1A&nHYP2|esGoaa3G{3(0ic!;PgrdQY8bhpq-iEJKH z8#<+4QI%_2lZ-$4@BUxRKX}X!{}=xNZJ83Z1yU9wT(BN)(-RJZNk(~fj`#jux@M2` z&wotvd`z)C<9t2F?hk3AoKmrozk7>HDH%Q7r_<^2_~jX8nlO5vGF{H8C6!PA!yj>R za>n2P-EU*wKfsFDoc#DN2tWD=&+TCT)(z&ur_*%UJ$^tu3)n0sNL>jjFcG_5YT?6+ z6-ugMZ{KDUmZ)+`YnE^wOt7|FC|ZFN6s)dSBqFCh>fz*H;BD_vyw|6F^A={mM-#4D zKY7Apd`&%hg1nfpZtKXR!JZ_9$_1Cb4MVHPrDt+@>lQ|%(%IeP<@q)G?jB=*hNjDy zWkprUD5Xk^g5c^EjUu5;Bjl4Mldi^{PM0FjDT)-!HK}N*lK{8vA~G5IXa{98=lF2M z`D{jX9pklHR7Qr-)~HWjBRrS(x87#{<(G6iF6+F(+P=lzf7oXp6#Rex=-;zR5|AXU zx}k$cBbBsEm(9tTwk+`UhN^+<)rPj&CVm~V3SScSd))oOcafF>^QSMEiWTksT?Xy| z<-tQ@)xyeBvY=#ndV$uw5t=|LajsJ|!(m!y#4$Lg1FlOxTfozo%yX67zxxA{2XBGV z!WIg}YR>g^!%?$`_2`J}>r1Nh8H{3LA(Lkb$>THZJVmNO*&nf*FWB}T5w>L#qajT* zL<6=~k)|azDwelJoW~^DlG4&hEs4FV$LrZkdWSu_>k^YTN^6&LnNg`Js%_GQOO&LC z+8?3(=67jJC7XZYQ@(nNF)|3AT+%)map_-@yAn5V-e=KB)ZG@1y-R;lq4@!e)fHJ1 zvJeuz!H})J1K8bRt|}y+gC}HKs|{SgfbA}8QRALVa;wpd)U%d`&}zAn_%ABzEo4?g zh&3g3QPqx3w|tU}~EWtdoHoKk_Rc*vjxi%hL%YjCiv?Oot+V@=@ojM^X$nB65C{WcncYw7p)ra?jgf& z4}Z2`lW(||8f>j0a~&M#kX0VhvMiqehhLJ$1>gBc|5MuEeVepx^Wfk%+2uK5EyxU+ ztdTH0g{}P|&fO7aXmAnbG?s@J%2Z>Ymrp;Yx7$bC?lAe)hur&v5y2|Jzh2Rk6t1UB ze){33D4N2~!`q0|ryU0TtN-o)k%Qm-Ef$|Y!=0USwGR14YYR^^kyM?khBC`3iUQNN zX;ckIGf4b^Mo6UVId;b-Yf4(GiPH$KCzr(Gl1|H{T&=kBYgDU6*LCsdQ?yZA61)NxD|uGqC~Qh$tSD-3Smrn&Yc8TSL?};bw!|ve>m-h&ZNF6lC?yUxc7WmSwUqCJ#eQ zMWzxpNgUB>xpeFnvZ_#J%R_hs0Klz+JL&e+LV_-V0 z&#(F7&;A1I^b&=J0;nYj@(dg3Z*8&66Ixy$OSUNd1YOmM^O&~hk*xz1wZ`f8n5~xN zK~ANX*g~LEqV+q(oi0{?o5Npw54%|M>dyq_&Q1E^hF|>C{}CzNuyy|cZNG;bXM|OT zW2r2cbJ8Th+!}G`H+~CIlxPDF^LQ5&1F32-6lj{9FyD{_EBczjurr`!BZ{anV<{Jn zzfm>U{Vz+PQRKOhrK={Z$|kLl8$_*X$cFZ&Ac&ZJxk2bEBq1%&BD4$~O(TjE{EJhN z6qGQdN-{XwBi-#&cqURM7-(H$u|WU+1AJ3Z2N7)dPz)2pZ&(Bywh#BXygDOW`ZSve z(`rGHBZ3VPGF9l4&(>^aYb3|T>8Ln^Efk^PwFZdo7Tump`r?Ak%;)a=?~%z0?NVdC zcbE2A49k>aHe+jK({~M$Yz1Y2G1^DbRo1W0xcclF-~QhB+46mZ=`+eaBa$R?$0zUh=o<<~UQ#X=7~3OCWF#4? z*hh{+m`!K}YqljpJ`d22_i$TnnyO*SnFb)SCrW-7YA3uz+cG`^PoS;lF%7QXUxqkX3 zW|*^WdMvNcY1uBC+eRohn$u;pr{eFt#EMsxVMyr*m>TGQh#tgP608LXRYp`5Dhg>; z;ui`1ZkKqIqSS)Yk}2|(G}s_hV0KNG%NbcMX!qJ&pPwS;Gt?l!ZTGQv4%h@Min_sj z^oWO^#o~NUojIgI%3e@YozHoC{U0$Lo82G%8kSnKT&?l5lu9+|-MUXxl}K%qxaXqV zI=R2WeO*G5f(%BlPv&~$vWC5hL>ZPkmaFGUtZ39Tk1}@EbMced;eoKc&cW@;t}LG|DI;RWuTRfm2sBWlBfaSceILpU^+P zL2jE!riCQQZ0+n5jtqJ&7e5vF%N6b6kdx^QD^5@}gQcIcoG!?gb9z}wk(UH%L?z2q zYKzmy&zL_up>6B*ZtvnZDILe7+C&t)DM1!ucYCO<4&yj}1NSry#-Dypk!jqybpWQq z=Eec@SLZ0tJER}{oIAsN#244REONT|< zq<)B`X(*#1Ew4w4iV%X?*YEg$zZSuzLOs>2ijll+agAp~J?%Af8=O&Nt|qLt}UF^MW9WIXu|K@;t_xgm-hF&ZCEfKl_m7}C6fGTav78dbF+rKJj59D~ z>>wpRypf42_yVX#OY^`IsNi6QkrxBV2`4%Xh{-koG^QN%GsBnQO~FBN*beXo6laJu>bzA z@%FdAL(yt8zf913k8`93Jj14xWJb4d)7shP z?87e^v^vcEgs#?*`Z2a7Q>h7?Cc+vF@GO%+Gik{R@nk{z#aDRUKIYB=%d&p+ob230 zt}W*Al3NeoVf=6Ygz@r{{azbt!F<$VbWg@>Bn-zPDWS40gr-2-CXy! z6(N<=LLH2dYX>>3sr(g6smos1&`VX5z30bZe;26kTJxoR8Y97)O5=B|#TQadB(F6re8M2rKNR0tUEy~pf_wf>G zw1bc|tgDQdU$3!SErbw6b-{GKU{``V2+4z-q$t65QG0##jz^m2_+dy( zS225i3Qgc_?NC;NCr_W#7&^06f?jT+Z0+LReZczp6V_jSL9;nQ(j_#<;p2buPg%V@ zCrNYmfBU-xdPy;vGU{%VMj_#^KH*?{kE+OtRx32mq;gc!pv2v2lLr}DykIqtNj(qy z{kQ4A^9aT9&`!=M#S_Z9Ve#w)JF6Hyyi2FmV%kgD-reElkN=vh%L!EpRaqnJDzhxZ zELD6a)>%p# z=Lkb()atO+@$kb9!D0eJBddM9tvwXSqEapVO3=A~AAo8yK~ozx6v$bDS0!|c7OH3v zbwiM(T%5jQtC3lK`jpp~D{|ArzIl_#kchi3t(!VSKP9ge;)lCL^K+a(eU5g1Mbs2n zy_l8&{0)Iz&{wxXQHg^Tq1edjhSkL>nyBe-Z@qyzq%}nYg{Y8R8P9KSybyCpy z0q&qnaCyc0a>-^fqpT}xso{8MmzLWjt}_e;UO)Z_Tgcd=!cPK5M>p8JbDPfo0hO-t z`k((hlp-N``HHvqcX{&kbB=F3ni@wzQRZ<7LuT&XsA`qTi<-dWO_w7o{>L&fod8Y z-MK{}!RxCFOhsUL4llp@5c^;scejt$G)$g8<@pC6l2h)Rs z5v6V*^}4843eghTa46D}V4b2^3Z)-%7QA9G*doY6+NMdFMXX*vMK#~h=p{*~$|~~X zKFk_!f9E^kN9e~UMjVp=)#rqtpYbxv@U};^_m7cf4MizIRgo1zT~ru`MdJrFSJy1c z2+1*Nw;U9;g`$^;R|%3Nge1^Wl%_%Y+V(iU7J;q=)RL6tP0`e4{st|SClo;ia)Xh| zkeA41gC@xcMW)psvi;xzvD2a~Yr5wPu1;Q%-0!pZ_I<=8V7gvW?TxtGdB~}kA)U_9 z<^h{_3$5zm7$%cog>fAsgkbyV5U<@u_u3d+9sKbXo0lg9(U zB9CI`*H>=>9dU?(3Y2IqkECd5e&}W~;WS!i-p|s8khMb#QAz zYj2w<3|W^kR@_H!YP`0~nwm6>k>rXrO_4O6Rp_IX1*@kovHdk0Z9`mS1hq`}Xhi#9 zpSmnDssc|_iGm1CmT1z5vdG8<)Q-#Ejhl=PZXj<0CNDonzq-WKYSf}ZY(i2YQ5z;z zD$$>jPqq!|KO~YTVn0)jYt+T_A1#{|cEVGE(mFTKEN(w*t(Qoi~|It4ppDp?1&;JB{;-hOau3^%(EVkB1>>L~;oEG}l zHmc*X|3CQ~jKBH}FPL+Aae}6Mgkj7`GsynKPx$Y@{3pzxKEqBDZXNCtMNQtsUfC zp)w#ga;!X~L68T5B8sv!5PV%T^w%>%H-cIcr6h@}ks1`Kp-M7RfBB}%VCxo|rqOP< zk=HqQ4vLo zghr$ZEWO2!rm@OW+|ht~lM|FN!R008c!nor3{7Qxb;10_Ii{kL845QaJ>b@(cUW%< za!IDOH^L7iT27mKXfat%QIde3;!uuP%+F7$RyoJtxXts~$Aqzuv%P~P3zkuUWT~_t z-JpASh&}iMUA0-Bp7SSv`eWQDThs#5D8)`vdL0izj8bT%#hOx=nHN4cZrx?~)&bf1 z3{4RP;R+RvyeesI6IZfW$8%c!Ayp;Fnu=_^z=={EYOXg^I`$U5n>Xk@dPv>vvb;K_ zSxt#HYb04mNGi)H$8HoP)x`AL<4fm0M|AHc0vstY$ zx-DEyrkO5C%N*5dq3AZ(mous;!fv(6s+ziKsB{Cy0tlP?0aK_9o}VYIpw z(Tmr%zx9v**DM^3^XV1#ppO>#+x`mOFbsz(jhVfC zf-)Sk)oqi>GC>K&Y{QZ(ltqNrWXM%TSQjjS4i%~d`oRF>);@Yv($yW@UW>EI71?}= z(zUUiHnL_RXF0)FOAJZI?Qav?7QNv^qLULAFE8oG8S>r)VW=po$^879mfb{|!8LL(?^Y)wMC7&A2* z*dAb+9^+`qexpzcfn-TsPp?SQlHTDl^B`jW#WN;<@k=(7Yqsy-W&7Q?Xzw2~o6HEN zGp5&~Pr7#3< zf9HK>WrBZsMSp(_qu<6gTuRem)s)m>j-o5*iq1MtkTr$n)0fB>*T{83s3z2z%GTTO zARir2$THPtMLD05#0kd_?ql>ul$uHR@HVp7LorSK`J8kzMFbIQBB;i5^sYgqt$K~Slr+7vSMCV+c8)9rm0>XRLpuE}Y)R&7Jf^qR zqca-P?RKftgw5$G(RfTx_Q;wVE2~K3fX_erkSwo}T$?%<9NjwP&fonV)U7V^JVGrR zuF?&as2Ry7MX$xXzxOvNOpDE8j_ik6iVB@J#juZ_s%Von>g5>lBCgVE~X?e0<+f^rd~*%pWrp$d{ZL$+|cX0tW1A5+N^ zu_U4EGPNROxgCOeh}EdbLdM+g;Hw40T;k&SGwS7%X1$=OLNZZsbo(wrTtc#;S^HEX zCtuI$RV8v3;;06Tyuhg!RL?dvtCZ{d3UAB9I!}ncc*O{Ggj*ey zw}-YrLhZO5-M&GiHcYQCINaXCur%hSPns@i85UYxqpKRL^^9aQ$C6|ODuoszw+tFp zr_KeIWKt(NRSmLXVr&{hRUztnDEs?#9zJB}t#??>BbHCbq?%58F+q+)8c87Q4oQ@; z?d&2<69OOS?b~?65#ypla~<5YMo}uHbVH@RnZ%PM!%zkFYEF25#%el82$Q-yq_?|8 zT_$uCnS32H3o4F(@IyE{LXDxiIV3G(qUi)fQIOA;tUrE?wbde?KOyWINWDFD;{a># z9_vP6ES9|Z7ylCfQk;$;V%ONTf@2Z{A`1?f2Mv|68~>@8HW8?)ZwrRM@_`%a@jk#pw(%knilcW$0!u!QYI}0YO7E0orko(^A5S) z&`1KatXZ9$upXZw@|eZ-HJ)aZY8&>-H{j#H{P+`|P1m?W!OIF1rQqOi{cZ9=pZ5L{ zjS$4CPo8Z^rwfLLhoomTqTurBD|BDb9UU>z1Wg{%J-f!zE&SaPK|05HeTpr&n8tI2 ze@!pYDT@Wlz$0s$6r#qJ8k8(%lLe%0ogyhw`aL|;BYt^~p+N3RWKDq@=BS-*G|Quq zW#ZJQiWg|rhB8?p(I5#Kt+2=jd#~j?H~!y6(}e2RbWr%U2((uTk;g%gGWvVvYPDx4 z75Uu9^jvaHkWCgeX~|}_#&aAh3UUe7agJ?yn6gAw=WMPnV78*pa{L-f!^N>X6j?-_ zr<7?-9L3ZUL`6fbXvmtuvk!j8&ajUkF37Tso&GkPs~Jy!^&!=A!M(TMrtEf5g@Rd> zn4UzjT;UpRZv4%^LF07LJO@b;#LE>T&as4oRMgaEg^NNqosnE$v$?n=T&)R<0(W

XN|K zHJUspD~mT+CHy~C+hO(k#JH)a;prEQUqz%d1ha@99Jtutenkr3k23@4m09nE5cZt&+6qW58 zM-;9>)v}QLcZiyXYO$gt!|L)C(I>y4znL(<_>|&mg@=aM?;{2tg~%~xbDsR0e@A?J zg1S3m_w9Qey!#ftgIzSoVR&$W-5+50`$TOE$FQk4A#z&KR1HFrX>SeCT#Hhx+1M(F z-+cRxSN-&y+0#>0S;gse@mn&D+|Y47^rEH-W9l#_^Mf~WYuCedHDZ5>r|XoWAukK^ z*@Dww{EAhXvGexZn3_kYwn$e#^>W4J)31ova|Q>yWU8Q1Bs5t=HgrVG!E|j}j!SK; z-2VOF;9Gy^Z*t?kZ<0DTfeN-`GIU++odHo=Aa6>G z=@uePkQJT3`s@=ve0hc;gN{IHYDV25TW{UN+v<@f5j`a2Xv2CrqiJeHQIQWjT%26e z7Zy^IvC0E(fA?*I<$~;bPWoUM{dkY-i^s(N4C}@b`hJh3&IoInCXEn=iDp=oaY7MB zNL7KRD)f6j6wk%zwD1OfPR17$bxFtbAk1+k4OiDuk{C13(ENbndV(AzC}~bMU(ska za-~rZwq7bX5C4Z+NUk4V-PRgxhtS3L8ta9xvu>r!bO7RwdVRtuq+ltqoGD)Kys8r*J&;b;%3)j?^s z5T->F)tp^Cp$tQ$Tw(m#31u1(_)~1X&(_WXkFO`hs|d$XDC>aL>oab=_kC1%KqzD+ zRU+EVsnZ-a&5^4HIZas4=16`*xR@hCpLD(^D@u&5KCQb)$o)R)({pk^KwYeerJ8Pk z8&n-xGHK~5jcSm_8F8KytrsNMSJxosaX9s z6cuU_6Z$EVrcqcP+u!>Z2jBTNKmTw4@5IlZl3qom1yoe%;R;m(xk(Aa6f?`Ql?G8N z$O!7Jpf)wiqM;6BnxG_~uc)h<=yJ^FdWsMgEoqogUYO^;)Lbnr|7#Q)V!eh{28+^K1Os+c5m(>Z}*55 zK~$AAwuLzyAUQ3BX%OowGzG%6u}uxhF_^^xv7%sF7Rrqya?3_m4D4I?*grbp{4ak( z@##~tUz`%&vrwysB5y!aNo9eWwb4`+TQx|sOR!|>aDz}Z2qT&-=lYY+S)ZNK`}X@d z5AKkxYQm@@(^Tr|72PPqX!17{b6v-<95iGq3DPP?scKXM4u14o$n7_)VMU>!Y6V4; zQ>@lhn-yZ`kRSfnkGT5e3#O}x@Pm&rONC_`azR2@QBj0Ox=Bd#j3i45n+8dST82M- zd5Y;My#0;0(PhE(>@`V}5S_ln@I1`H5pn@_QsU}1s;MKDHBAF`lraA4fO;^BR8;rxR0x-lv#|~)YL&jxb)dvT_M*gy6ccODX!#k`_=*Lt7|m9K}#Znvr`Ta z5BcE5DR(JwRzCeg!Ws@Kvy$q?7`X`1w_6lhiaeR2X%;1dS}KtYjV6`R6$xi&hbYX+ zO`G;_`~d0ngw2bW5XW#RQMMI)-$#*vA|=T;$cl?dVf6v zJ$D30rBTSstX37hdZi=n-MvjQ^YK3(qo!-Rb;*utGF`4o&d-R`2px+mtf-q1KUm;q zC1I2@%NvF}hYa6(NRd`}g`li$@+wC)bkuGebb};|$>NZ`(Gjmc`eTNkjZn5&T+NV+ z6?Ky{c33`W;qDNL1!{qbVhiC&`<6GrsrZJldb}$UpyzTbEKm_t4}^)u-Q;KDx&4$9FB-K8LF{| zBNF1(hWT_s>#U|8&p7|($LN+xrYY3AN?Mj=>orkTar3RWF}fXA<(m()g+f_W$o)3C zQlpp(OL_L5{rLp=jF_ zwF;3$6~#2BMz$)^9E;g%josD=#w$Mf@n52B0@~dnVP2pd9Uy5MU9IG7eu^X&xJ}9Y z>HDv`QgaCM0={EHqk8g`P%~VN9(XoX*F1_m25{|EK>0 z|MtKA@A&jDevAN|p+~bUsPc-YD6w=M(=<`@7}xXI8V-r-hO5OCxrB?03oc)u^7dN~ z>1!%!S)f@K%Nmj_#Sntn52&eebd$8miQ8)5Fx3grb-cp6yqsq60)O`m#~^HiB8YZzV%&%?lCJ$dhfmqn!%I5{D8h( zGnq< z9LGDfwzs#ugMF#uT4btBEtMEjjqrVjdBMeppU^oN;YUl-LgMh@U0yutOji=GH4UD!;QD)@p4Xh%1`}=e{170aA zwr#T$A*R--8 zMY~7$cpqjPzWVAbeAnRC)-l=j3>g`b7L;jDoX50mi@eH-^AgqZD3TaWSFl?iXRn?h ziHe@rrfwP}2^!lZR3vP(huYXkms57V1N6W3`#kPD)c@x%N%EY0vcgip&}7iwytH|( zU=RC9bw#b|EV2q+HhJ~cmz+O8=kESCZQEu2{1R1bA#e9dU!D<9r_47KhLJ;mv`^6h zae_ccC=&TPr%@F=NoBKKz5)AIH9-TiEYK?nrLKuZL7gUSn;udH((V?2=fC;CaOazn4x=j{9% zSuRmqZF<82slUdsJ6JnANQOgErWlffu0l)J5v!cdY{k*NJA}_aC(dOQ$6{`kRK|cJ z+|UeLT&Ov{N};N1iX=hQGLn>$rXlgwl(JFqx?A)Q?~+M6ag?Cz23yBB@ye8^vlEP` zFWI|sfbF=T$>@$nSXP92f-&f$Dhin_Aq@SrXvn@MUM%o6c+iW*9JQ8-v!F10b|ve| zp4G?)lAo%!W0PA#$W_7G4@shoWW6EVEb&y8EQ;|1pQ?Z&3duGB>jED9?LWYL_Zg^u>XP*<5 z32G3rKE2{Rh)I%)?VWvk-+e$cpOdYYB-8Pm7w`OpV6{Zkbt=(N`8kvGOXiaqwPCXT z)&qKXZll^BS(+0i%QySPjllKVWQv5^ZBrR0Myo|CRD>*17Ag63iWY`cen6w^XuU2` zmf?0>WLab5#}q2D{1$<}>QqjI*cD5T;I4 zRy=(B8{~?_-n$RjxpxoAwNNUFgSX!zS5@Nl&98b(wTPoRMUWD0e2OAw`uZjD^%S9~ z$ev3}($Q;y)JRCWPGhL(T^D=MVV!JnC6g-Lu+BpY&7=}8_5Ly4Z@xz*nFv!O(PetJ zM>X}in$CFiw|>OdqemF-0O9CR7R0MH!DhwI!7i8vb<`@dYO&FnMCFCWFuH*IlM6yb|(<5v^ z9c4JP%+;4^fU>p*CDJk;wndL zx#XrvVj5_}KB6coh1D4M9{fL(LFbp6P#f_zMOD6@vZOdi2)R}}t-q9Ljti7J^ql{VCdG!D_W4$qH0WXLdP3RVu~qHK^1W-E~PfYZ}!+)dh7aQx!ENCE+?GPfG?z1KLN2M5@Fl*pQYL zTU$fSQm`2>c=6#U9DVQG7^+4r$)t6Oo|oiVNEK{Q%Z$nES6FF^qIt-g%IfqCUD-pm z+F)12l1j_#;O=Zwlm)pgkW>|=DIkoPeffkqTjK{y&%kVhLDc@2snSWYm7M3m=HSJZV)Q52{`!bYK5M{Kx2H&hZT zcDMQ<1W}r>y}ixFs~4Pn_7OV|j?f;Ckk%z#(ILBgNZf8wUu{?z4e~r8JDm|;Pr38{ zH@Wvazey}?k^JeGh%zBeQl!lW&1(}PVdoi@ zB+=d;kf$ZOXxJO|X?IMb*_61B(UJzSSx~K~RH9^ir%zr;T#m1ihCO6SBh3pO%f!(Q z%B-S_Bf{wkuGK+qb~G<3=Ir)HawLxoY?SwWFT#4ld4 zc=eLe(Gj-SM=E31i%UBF4jre1+O}!7J*r}xQCiazDtR8WUTu)e5-pWcOc&RZFw}(D z6v(=jif;EY!mOKGz}MtM|7RCyAp~d&W~Ngv0$EGSVb(N?)@hN%8NtN_%h_V<{sCE? z)0Il9ET*&U@x?Dc2DN5zbD#O_0!7idee)i6tBq(RlG%!My#iZD2nCRlkcc(`#d1ay zMD#R;%rdzD+kX#tx6h0J>;DZYDH-0m&+C;>F`2U|QtVAmV;a<*7Trb8aC?{BQ;E*c zv3esaMMHKyupDH=MQwEI6gHcX^~ojCIzrJjG{-^fw#jS*8I^(UVJ8zxMd9Vi88biR z_?>TH=_Z*hQxpYmR#MkFdR<^U7BA0Fku)7dO};X@e{_?p`JCFQ80;NWsXBOVl(b-$hm4;*N4H%1M|%{lERI(bDJ=ImWgnU)fJla$%Z6Q)khTfg`F zT#FpN(Wxw(){Q-swNE*gS&lFG$&de(M@hor&AW8kTcooU6&07O1*WQCDHgh>(zaTx zE*6Y-Z!_Qc6hj$`2JJG(%POSZE#g6!#_D41OBi=9(9MPxIjh;2FpSCb9CtV%O(K*| zn}Ujylb1+!i6~=)Y+=<<_YI7;Lwt5lbHn4}lgE5xFd|q-bUcUd)__X02hVvLe6SzpY+b}=Lc%kH406-ps6QJ4=kv5qoaeR}e2}!Rmxt`214I9sb%hzWZ!bFyJ z!Z4y-hlD3rET4|)Xbx#_K(pgPTO;w8bQG05s+f?{-`iz3GnwZbs1jOxU9>!>*hHjF zgRbkKs1!|&ZkSVA?TZFM^EDn4el2TuaULUS0x6EX`t17mjVgO5k#lDj{w+rLZlKR*m|?=a%xH!#J3BW?B#l)b zP|dG#7jqg-WqmZlkzCRaICafefBZ}4{)VlayHt5hq^ekFSFH1#q>>P|Ml8$R_}+WO zK@H$WE zYC2vTlLt$>HxKCExx=i;&>RQLUoxMadStm~fk~hTP-KVuZ#6Nq1xVmQX?3BE$h>8+J5*&_hbGck& z_WSf&9_jTJbzY(#-ypnm8`IdLKk75TIwP$U61k*aY|v&tjin>Kdd~HWXT+Au*0I5JjukXD)cJl>f)&XNWNAzq9x7{LYU{wpG zZlA^&pyU;5;OmLhn zTxp25*l_vLk2!hvbK*E-?hHvzL#i}j_vj{br6IRXjG&?xcvDCTz&N#$1rF;x`+AjHjUfIk`3x`LrsbzYSbL0tO8v{eeWi| z*Fnx~`tBB~1+!>_>kUvw2WWmk{qEgQ%DvHlZ%TTs6!3Lry}uTVqw99a@({%^g=|}L z7H?9aYK`Z4jkd}}*K!Dh5UDK?O2g~*HIIJy4qJ~7Ib)6b#S@A;qrKHdQQ_p|8O1U{ zYXsh?hb9?NRhU(YT;?R}CBbBZXnC|H9Z7}R_lQ&pS5~+++UMt= ze@GgJG(o}sgS(7cCTSIu&X%y5vwY_fRj-38YdBtu+I3k>&p2CNvzShZs+fb@$CyX^ zG^)(b)(&xAyy3h#4yKSuUY(#RDz@!#^5i+K2QTUD?2wj5-6d#RAnaF*KXlFO&h;dF_2V;}Xs zhvZ8iW13Q<;P1Gkx3`!n6?Pn9$QD_hp;{`IWxcVB6pcpKP)wb}{(#L_pCU;Lie|92 zzsGbsN3%>igD&Uc0&{-{ci2O-H2kR#Nld$`$>W3~`U-zmBGyw(RYz+SOs`E{X{^^% z!o`9(3Nc&<*Rm<|g2`eJqB!CqJ{ycGB%NL|Y-y-b#CrB6-rgbW^_U&aLed;`+r_c8H?$h9qV4FI zH*eto>aW;@A=BA2vgLxaFJ80bjPOQX7XB5~1w|0>gKxdhM^VJfPd?<K6KPS!`3QcCtf5g*Zfx^6|M&lxc)8-@qrYbRJ8zMP8K+-;MzcBKfgh2FH7Da0ZAnAOI+pV0 z3}Y_GRILu$&MwN%Hi<0opPlgYfBml!MaiOoj^`mViAM*wdF%Ioi>u8FVH;?=gd=Oj z^Cej+u+og$kEu2nsCh;usiYepsnL+D0%r=dBBOQh2F6|wz0+nrT~bMKxd|}0du(M2 z)hr;RMoJ?@nNf<8sw1;fYC09j@nMEeWRAFEC{bT{oTxMU4eO^L41?o9kf)y1*`6*`qglsdJ-fo6Pbu@1{-Dh!Sh1XqiK8`#w{IY=H*C^`*3LHF zn}-ylAqqCo6x_aZ3%NT&WCg+18OmltHMyc#tf*=Up_=H9jg{s6>Yx292D(o7{t+kF zmmKv*T%Mlra(&6Z-a)HnlCH_hsE8LcdO*He(hPSnTO9-nN}f}!SNMww>&t7F7gH8h z$>_mN^kI)elIah&DAJrHP08yTw@k>VGaOkat6=Jf$g+Z2WR#be$d1Xj<{+QVdGYEM z?RW2S`2Fuv%Np4{q7pJ@Z-})uq_zywvZN^s$P(%xfb}`!4?bXebw-`1$htu!DHvWK z@BMcOWEg+=m^uwny&mSh8H)&cHxd3-}3wzK-mSA~(O`arl`hBXZLibOZef}}wlNVHr07;T5 zsVR$y`S~mSm#=XhkM7Qh+O~+Q3RN|5+HGV*M-5_9B4!sai9dUSvWYNux4HfO?-GOw z>D2{FSyBZ)N?zbEm(*23NkzNcVpgXFuU-(pc#0kQ6jzrtizQN-5T$Fns!P=}$qfa= zuuyf2#`B=tWhu$@N}0>qlqg=JOEPr=9dC>7pocJO;xIz)^f>s&dn}>|&vw}FZxJRj zqvJy+n+5gtf^0lT(p6@!FR&F8;aTMCh$;?{g+dTU#9>5R)*vltcROTFN$#&$MjNsq zLQKWx``Q==wqKaO=yaYrl}ci@1R&3i!h{n zc+6n`Cab7K5e+PTq*Xu}rRavmDoJS%`n><`Z&BRZVj8Szc`d3SCYjBNmJ1A3!f9Lh zt0j{cFF}z}w+2|<0sWgdQCtVs8IfxMB|+N0(z<&CwcDZ0N+hA6_6H<}jcWA}en^-X zn2t@nS~7qBj3x=`?v0R#Ev!w+#V3zB|Kv;b8b-$lc=wM{cLrb?fIyQK6j>%uGwPy5 zlO&p^L{%i3S%f<1p?VJeej80{2u{z@q8O`V5NlTDJh=DI=xzVBZsbO8_%CaM7LA0e z=mx zwnZb$kd`x~})ce!58aTWE=*VNHD zy!STJs|A+V!~E7A`bv%e^Ur8kHOqQId1zBCPTCK>^7+Wz38ktfwc>NZp*J8M{ zOI$bjlR34J@P<7WNyzfzk}8X-vl`8II3Bey@|@M<$GDor)yt<`PJNtG=J5nE4pD_Ay!>wX6^%F;!Dz3W+*SNS8|tYKo#_l_bcjLVxIS@V#&1Ssl2&PwT~) zuHBjlZ=8j^&?_!;5(6irwdJ)Q1o#3EV{oV><=_KY%4 zut)o7mdSj*CQEbdgBGfxvs|yJCv)=EjOj0bMn9=p89KJ>P>$!6;|)QP(9sRzw4qiT zv_>Y25`yb%c8?A?lHmOE6fIbjC3C7cqVII@$ESGoS(_8;fyCMmDa#dBZJ>G{T1!XM zJ@jw>8g?8|zeq7u3 z;;d>2;skOD-E=8Um-XZvEmjD18TYLR7@o&U5?GRqA?v)pIzcOaDnCVO6uS5BBU%Qz zZ83{;>d_8Xu+LQz(Q-QM+_{5yuupt3XYt~K>O4lbWaLJWB`fj-bkk)tIKWkH>MSQY zpHn6Y%AilaTw`fAEuk|wJS6B^oGzvu9v(8ZIs_LJ^1Q(`ZBk3Ymoub0+jwQh*3mv? z+apaXiktf=x{li2MkFE1sEw+sOul$df4GBw^AKBi-V7kcoa^<9LaHhAf;z~llNfzi zAUuodX3gubp5g*6#l{`>G5T$;rxOlL3!zHLl7ylth%`ls3p6z)FEeUUB1Nz{e@-oH zR6=0hIHVPXte?Ne@?$tWiiG7n2T|8W4PRqYrfD!Nn<|Y(Qj}`PaVtb2uV_$o zjmdJ3rRr>L4Om}Yb9R1-R@Zb9tgbG&kW}tHdW$qK$O_Orhu&bDBFphBnK;jpr4mIH zgo`=XXP4;RAp^@rkrd`%yx=69;oaOLl~j6zEheunSVtkd?|h3Uk(h}M``>tk{qUIe z%QKo73RR})wotQ_Y&<2d1a&|^{eft{($qGLVC?+9prXaTs zu04U0r=Up4K%OMzNse9vLeLZilH-yDK2@4C8VuQt7t~3``g(yk^r+JuB!wcYs2d3b znKVvVpPkYu6Q-x7e~xA- z$a^gmSD}&$^5vRt$0b`$QP&zB%fc!%L>ZHjQ`rh_O(Pj@VeK8DMH^JBP3!nA4!kba z)eAPC{EV}|_%phO$?Eik$ZzAcT}oL;vTROgQ{>$N)%gWiNsPTW;AnJAR_3f1D@sG9 zvv&h!x6ejzX!ZNZVMaJz6Rg(sZrvpQ|B?4!zm{hSb|&`ipEt+*>rI%9jLeL*<+`e? z+1=HSRFgx_a7al627)kv1PB;G4|*8rS;Y0z?OLhBIu6!**=8t?u$BD_vyx zxc=Vb&CmO-hiDEUKzf}d!2KT_oP&jZ)?Vvd&p)C%pVDl0DRhNO7t~Tok|fCOA*-NG z_eQ5CEN*UQXlY67owrD;jH~%2*4oEV6*ki`v8uBB?)#*s$!tESEG5DChPGp(>IS>F zZm|wi-nerM>KZSuFKDU9^mn_QUfmEy0d})az2#!L1|>P}{o82WLu{wPP2f=_8?YTj zzfBZWbfPwq0j6cp80?VP4x-bev9*KQ%Mk0AxQ2n-Y7MUpevFpN~uInlmzId#6KBRw;QB(4gK{yxbMBq zdJ*B;E=sF8!LX;GAf^1m=C0ri66mzb5K>Uav6gK7c3rKzmaBCet)?*c6)sOA7C}U- z;ZV6IvdRej7$F3g$%@_E@8dRGtgo(VH7(kmAyvP{ItVC}0;S4P6^Vu<^b)*S(rNZF zdPC$UAssJi9QA2+dlcgpX$I1;=r%hPc}Z7TM7=hH*Y8l(8eDnLP%IaB)Zy07ZB~y? zcz!WKZ*^Y{&88{AWX^iBBr7Uv^$x>>W3+Y~O-gE|z(umYxWpPXk%mK|tU*;M%7p3V zB^e-9oy1URcj`F%JLIOxwM;3B3bQOJgv2XCl8Y71eiyUuVi*Q$5|d>WWt`&JHhOo& zW)eXap_vMs`5aAEsFfF>DnRT*_N|D6$h9g9$hc{|rZtY-oY{oBN5J`nw%?`s# z@ag!R+SVS1W#i{1gE#MT5qY%x1MVO1Q-AH4ZmY%g$y4%Y&uP7NgmvpaPOCvRnLtsI zh6Ri0b6%&QG4w!>2O57QRm|FoKed`y`BjZ{ z&%m;{e*TQ>n=!RgyqaR_)+scBX_(luAW1?JFQ7<3H9Oe7T?)-+a{7X3u|_){;utQ| zRlvz7kJ0NE&0B9^@``a0%@>4~hdmt8IX=Mb zG|Sk9#vS8Xm#8$!5dFe6;O9asJ#(op-}}Pbw?vs1!@nZVUnR@>N;`Y5nhiWjbXFK z2m>@q#=#n=)$Rlw!Lmzc*ppju>xLSfa&I$f5Rrzla#JWjBVw(0CN zkco#f^_iZ1kHTM~9_(P&O)4cvdP{W8VDS3eh^G&E@|~aJFP604zl#!i?C2`fUKSauWuW*em^!6UST8r!O&g^s*eDXq)-V*f`r(HJm)Eq0U5c#% zdasXWG%%DBsti4jaI_X1ZH7xqr{8817p&$BqD8>YJ8xr_Ho>PKQVL1;{@b+P`3g(b z;Egw4XK?nCkN@dEC4Bmva=Jttc6sfsH*lK`{HrnJr!R2IiuLnnh+duG(NmJ=FPJ@l zL3%w!jZ?1v?Av_x@BAGG$9HMf4YGK}{K?0-noHd@*rXGpt1$u#x9(slC2p`GUros^ z1CjZtS-@g;MmU?$9n|UWjClO{BhG*J89Rx@R&^>>ptNihT_yF`2vsNZJnD{yt_osR zV02n&nI!N$TvJ7+C7RQ~wo8_m7tE$h94Xm*{YwnD269~`nboLG3q%H>>tA5TjxP$9 zlqVEbPS?;1-F8kBZ(fz9mKcU%<)Rc;txcTAtbGsHw8+8~Io;qcBM$q!EYD7vg&Qa; zW+yK>Urc!Gcnhb|K$AJe(x>nP$|OUp3^ZM*(p)?*<^07Na=GHmd;7fj+2>SO3-*5L zt6b+XX_n*6Q%r6WAviL3rbYerqXQ^tDtf$OxqwSa)LO(rov8B0?#9jJZ9@9 z2g5CdZqgX_*?#>ta<5AkJa+Ml8*C=`fNGCe(~h$6IAh)fnprC{%uK43PRv8yy0$JgW(c!7`O z*z68Q%+AhPo?bC%^`KoNi#(!r#PdJ@g#EnYYrp<$ERuxX`)}~fP%w>s4$xVhos#Gp zHiDbSC!GH1DLu2IePy6P)Kvo+=H$AI+wb!{PT9=nOi!Ni&TfN7tMiKQplWE1 zCN;Oo`uZBV-XM%Fo+G%my~QH_F>7zbp_gzzzQ*j-(CQ|%G~%g`xhhbfz9gS-82;P? zCT2yu)<6{|=n39xOsCmHTTAq<0cGxylam<&3zc*hlMG$>=KH++jR%}Rdx7HgxclX= z^GDzPkcU5gO0CSu&nGk*4H8r3{+GT)t{Rk=bDsS4BMecZb~MK0Q{1V})wjP(9wlUD zhA_a(ps7G9GLo7=adpz5;^yP0v_mLHLt-sN4I=7JA8$Fu?lf_{HCmaGr6oySp`3&` zqTqOMz#>}mCx7$@{PcJJn61L14H%k^(r~z#++ddx-F}Bk78IgHuPQ9VBrtT0dJQGa z$np}$P?3cs4K(61rideMjRwf123N;tR8Gf-LN-JtshjMzu>SoN@i)V};yv^d)E%HyEu+whw z^7@($6(78D7ytV|fqskn;Vz+))9_OALb5OzBZ>U!pJ|XAxGa5U4=vEWis1r9On)U#@?BO5?wHTvQU=AB7eoCv; zm)A@le~xD8=oTbV zf>|qB<`rG3uq35hG*IG_hHwyR1gTH%)R+kky^!>+HqM~Id~!wh=_ka~YZ6`H)H@X6 zit(qPbMnb&xZ6XlhC}SdRHziqKGpVpYE75@_JLgT@^RB=jp9uqvhpkqmP-u(tkD<@VII?V=25s_O8O}$2XHlx0t(i;poTl!r8 z@yBQ~N7q$MzlS0qwQg9h*W5qeVmZFXTFvof##r1icsQpj3(_QI)O~=GxtxR%N|0d9 zCtQsmV(zyI^PHodd(71qMR$l(ugG3Lr&L21aB`n? zofEkh-e!qWWt74oDsp!B4hT=jEIxe6qu={eS|~&$B(}>c4jIi0tg6m9x}<-wM-T*< zW}D4)Lp8pp)$dZfJ|oan(kfvUfpO~&bys2Y(Tr~1CUu&mb%T16(zI+=6s4bL*3F@-E^Vf3p?k-QefzO|Xog^`sQjRtvHQL7}2n`_p2 z&ilXmS1DBoRadbc7qXlp3VHV8C2>`tyLEKKrf=D7mMg9|YizTQ8drEpfMTkoUdaBv zH<`aU$391 z1Y0HZJc9EZkP>Hii(6m&8flSIr6KWbN;Y3$q2PxJhFfRgj&Pe6_3a++-Y%`<9V#<_ z1t3~fh&&}IN|a`ko%?rj`c3>aCCe(Ryu?vo@qKl-NqxADuxhNsh%ibydGwU=UwoJN z={bJrfvdCI?omY%VG^>lHKa;2ikd~H>1b(*f=X1YQ8wFj?H=aPB~Mf4{tAbjlRx_& z*5TEs zHC`OCb9|e@@gB=0!mvzsJKIEI%Cx4_{nl5|HJ#pIK(0VUNtne{VL-nUWM^0SXQy0V zO<2@)wAT+Q*9nTE!SMi+f~(C1wT25(NV!@wzPzH4prc~=DM=LIq!4-@X_k>oN#pJ@ zwbyTxp`oTJH$VD_Y`rA470N7U`SBBuj}NJR^)r4F=7d=HpcB^*xe#( zt6YBfCk#xL&(1H2uP-^g^%_;DMsagVoG0wxyUQ#K$ch}zj|gABBwx%(LZ8q6hbT|*gAH8?vyUFKSuEK9<~PvnHi4!hdri!SiAa3ZDy9$#c^TqRlB`#RQH<@> zsFH%^>6p#c9NBKLC@Sp1h@)G#h&O9y*EguDj?^@SAEH(jFTVX_iqFrvT+V6!+L!3u z-6#C;5qZ2p)de-j#WHjhDNz3MK`rwW?!5Unjol8SD5#2x6oCk1>M1jy)`74&98qAyVXTgEbtc;u1nTzV_Qwa%S$eA&Nz7R zCbu4ZKxc24mk%FOyqu74d=gD?d2vcIo3ML0z$|r&BB#}F;RQ>IJmK*8h^paIb=#zA z%KYgW#d=LuBm}cLB1$nEZHBMEM%lKpbqyuUh^G_$>uZWAK^i8zcVELbyHr|2tW|`X zf?0Q{nJTWZFh!H`_zY32(K^0`Ht3S5f*=g3X*x9oc~KIgpf!5byW7ZGllt}$JxQ5- z`=?y~^iu|gN$+r*OcdOF`k0!cV%9BA&z_@e4%VQLupH7bMYn1gJ6o8&5w6|A**4gW zCx|K|zP#eezxgA?YR&ZWhVjD}OfN3zDGqrY)7sspdvr($Y`^(B>ZprbZ{r0%f$vdf z8EPf541>5VNQFX8H(#+xHXc32 zf5CFIBr*;5f9}h?|C_(Tpgln8HfX(d3wgf4TaOV%LFxOXUO-t?bcQ1|x6UR@DTSb3 zDtPM^hO4vQL`;-|{jYx=v(ZCbUr~(5h%{jB&sm>ea@ZbHzjw@ZV4@TzrKY@EM9&pc z!zLN@VKjnTlfnH5M9T@;XCGrM19aPFcC{qEyrSVi9A_MV`CUp=L6;T&(-++Q=p*zb zB8hymM++iDL2KG*qQVg+(W4hU`OXhHe*JaS!@KCZL!}7n?HY zIni=W0hsL`W}}1cHb@FV5N+u0>|xcLY-V$mJY{##qd)A??snMP-zAY1#Uf;LI>9~I z=Dq*)H@JTGnCLqnl4})tnowjJd6tpo8LH4QRUI9bdFXR-`U2Z9XbuOQUtXZE0;=^A zuLux|jh>{Oe)I{?A3dcr81e2`zrxws3GI4=mfIxs1H9>iWU*p%afLUYp-4%);Zmj< zJA2!NX@p@I2nmXAV2=7!{U$qGThw+(Sc*-oDc~O*xKw6fC*=pgX zPr15U;WX<+o02?@IePCKJfDqOPZm@I2Nw-&m#EBW9q+S!|Cnh|;M!f%xsTrHQ;SuK zkvl>awIL?#4IyfhQ`H=9Vr%Ns@!mJ`O zRJx-r=8qn+`Q$PEZkNtz$VKT<#TEJ7=OR5JoZWEewYw}9OB&rRv}TQTYYV&GqSf7| zsx?SkO=@yNcy&R$+2r)ohbWs3K~=IyGe*rV#Qq_2yg*lA<$E-em|D9_6o%MIN*0E6 zYYvg9NW6sZ{x-g-xFfzoLpOQyXMe)<2cMxf>xk_Ev8vO*e~-NfZ)5m5>zeh7Nuudw zaZ2KEFpHeC(--8c34@~}Ztw20b$E-_(!(<(jpKdloi5KGpHhwI1Ra;{JBL_}7R5TD zGEB^Sw;1dWc>G(x$6#wjGhUNK8`z{6ipr=rA}>wmzE51G=&^^fOlWmSG;eRQ(F@GN zL@xw|X(F2@sVONfo3h>{%qr9>!;d}m(LRaQ;np38vv5UtHO5{zOf3UzDEatb{~l$t zPL^auXE#u!sD&h)j7j{84<0<=;_Q^@{ES|s#rY3EBMKs%ogFOUU@00hD=9Co2{nnP zTd2cbY*j(sBp_2nUQ!=)$P}myjqY2olN<2b;+m++2u~kT6wqxo5vt039MReuP~E!C z>$^YC{crs;Klqpb8a?p1`kn9c>2LoIJC;tcj7YKq1+X-MR0L&FqE-S0fmvmQ&(C=* zVgJEfbZwh0MY7x|+$1UWj*5sY)KYS^vq!7fW4_rSbc5%oXVh&MO$ufg*W5gQ!SeEo z!>tkI8PUe)!OkvPC8+)~g|S=(D1#nvynam8vCu<_S~FNYe8wz|=o*65(a@Ya?Y%C_ z;}CZ^BGq*&&qF9WM%_dxDJE*7G+Ngvf)YTHe33c3FGQe=qCl4dp{XdkUZIF0PjXqL z2{MY1vOq=~B7e?$osq>E?M{o2pPbSb;5v1Js|i6AvW|TEmWE$us127&g{oPzuOG4f#sRj|V{z%DMjO8Qw||odUw@Bsyd+-voIifbfn(w9G*JT^weSdnH6o6v zD;CoaKfwx8wpu-$qaEB%gPVsQp1(%71Xi=d@a}z@dplG?fSRQk6{tc*sv3o^BUC75 zK~k+zy*W+GMd&S7-i9JyVzugY4{l?sbuKTjiJ#}VP7~WS@m3+Lc#WtcbkoJ@G(lzv zMNo(ee?8;!`~*Xjv>!ZR9tWhl#a6dVqqajF2UKc`C2We>if}i_8M(Av7squ;G{{6o z-4@IrK4<#rBj!a#zM7MI9$}eLJ340X_&(<%CDsi5>uaQ{QAvqRQ?xKfE|zSP61Cfg zGAEBbyewn7oRTIHGAqy&mFap#cYhn}_95-z7VhyL>*bokrXsOJ8kLTo3xdUxEQ=Uy z4;kIN#ky|dq$)v?F<-9;VhzV}h?W~>(;MQzr?GQDtXGs~4YOwnr^W^yC#kWzFy*(2IaL+5Qp6R#b0Kw3sk8g<{3q!MA1|X#Xu(M zD+*njLlUECCfah&=?|Xr`rrC{Xj;g{fBWBX=hhLvY7ylYuCBBE{G4X9iLR?`^}1~G z6ggQUmI*6Gp;VxpEiiJ)`uP>-A3dagutVya)HIch0?RVcq{LJV)K-^JwI~&nIJ!XB z1evbVFm;kFA`ePjOGA|@lNZmqI6I-=?a^=dD5pB2?%=o@$~uE`A1^CdXbPjh_g6Vo zT>kWb@xP;n%5|R8&}|F~RG_LLEGr5?*HpAh(sONg8{0hfeBwA}b9qg<@+m|~z1AQ| ze6F59rB-t|pUtUT8uhI{oAU^#*}yh!vb9gVT2lleWtL+#yU5faTE~2PdC6$INB>|C z4M8VKx%1W=Xtv3GwPfLekyz+b<>>ehv8ghh&*-*0%+4-x6NlRI0deRN=M_bi;aCoC zvrD4sFI~%AmngCT)Gsmw%@ImA!SnH zC>o|0P`C<;p^_#k!{H9iQl*-$na-w!2$DF&lu-F0gL;c9&AC1~M@tfV2Ya-tif2Fl zklFPOnr&gV+uVNVZ6=F3^Q$XlC9zDKD$U4}2)E`^sT%FkkcKKqudYyPE!?-?LvHoa zMGi?qr#oPt<;3e1MiL=6KIwW5ag5A;beUl}HAGcW<~g=wK$)?)yuiD-=FY8KR9ig~ zRpIXY?_udS*(RcWw2$5I@chT0Vple`Z@h|k{SA|Hw95qC?#qhldS`07gyM}gVS!HJ2th3!`kx^ z7jqT{2-l+4X){nPg3q241siscc4)u%CJ4d#la~lZqo`SQ4-ZI|A?wdhP>qUewj>V% zd~ZV9L!9?MpbXY%nPB$xj9|G$7&@PP_6gqA z1U1ZQ-oM4wa*9~_)S{B{`8BH~Mb~xmhJ&>`q_hO8Yoe+erD;$!YG9ificVTaI4ze_ z6v(om3S$gE#@zTUpFCy$=pkE{g4kDhbvr z8ryxG;eaRSXM{nFtON!cg)9kxTmeNBuSO9ls8k*M)**YZ-{nvL#cwgcykP6rA$7OK zY&~ardd9P#Jth(*4}RsBadx**gg}G|byer#4}Q$^pM8cQ6%<`ZaU4=brBHOlew+U7 zL)ybWMOk2&252g)^_sTsFxtI`>$of)pJAjWdd(u<1T@hx6qTwz!0xvZs!DrngmfJe zKcP^JL_I$EZF~3j@0Q525)u`G@|Pv8FXDV50aOs&`aP)U~`) zl&ujh!$4bmWKjaOCO8d*P@yacFJ7Xk3b!8Ir?%&_!!`-hm|(SJ zeR9TfIVZZh;riKg{8d1Iw9WS2I}EnBncdt#UQ$YhILj!iSMi>1uS*5QSwYP-2$yS| z!`syU%C}ICk8m|XFqx4SCH3}zmZj6MAxk~{z{9o-)F?m=1GMgdEQ+A4h_i@jwLu9I zgrZ~JI>0CjWS&zLCCjS`1SjjNX@uY&zq#@>5xGJN}O{6w<R+ay*}+G)=0dP1%$bZ#G@_gicNk76A% ze|Ap8F*thn4MbY-;^YO>=P$8m8+!YFs+vZ)3{k>__05=i)1}fSRap{`rxe!<{LKxW zRFVY|=a-jcspKnv^;hWLJtoT&l9y+E{wLq#VzuTM|BL@M^6-eNva!t?R;z|~bweaG z)Vd1@WL4nk0&O~{c=(Jz`A2`B!@K*)&5}<(`;1$^`is;$+YGx~h&w}iwKlm_`267` ziYzAyeU{f#OsUXo_b}Ua{LshA;Oxl>7fC`}H83l|_4x(EH}BCI^a$1-%aaSD)e=Q5 zX(<)O=_%#-hMFwMH%roukCGOs1*Ad5a<;nA>#BoBF#ArfA(I71)RVlFq?CozcFDmZ+#;?$5 zHd%c7h{5)N-t8ldM9^%yeEJvPW3Ss~bnB3^-(hg;h5cNy+Dr(8ubSD zpwF$Ze8A!R@1qU+Y~MS;bzB_PM9~#WOJxym2sR$B6c~GVF)WAGc{)nhzOry#;+ru}7&D(Qv3et%))3QnNXwMs`~Pbl98<= z{Ie_6jYqy(F~13!#WSv+JftQKoY5YJ(Le?pGJFD4;IEc+Qw2rUm~|Y2x`nB~S~9UU zorCU>&Gm#NPRKM^#UA@xL*nIvWaIPXqt8gakODY7zQyqHfa!cfv|2Oh4A|a3B#{+v z&7n*aqQFPDEH=JRXbAE+#oWD3cyy0B3M~~Z3YvR6s1d9e*Z9E{)l$IHaC9B->WX|e zXYJHc(-PA*S;Zk*DY>_Ei~4AbOIIQP{BuqoJ|Yhjc6)uEJbuJ4|4;u0Ntuv7zhwJc zzkqSLi>SF2Ns5R=>?}cDuZZR|v{sw*Pag5;<4RQ&<3zy1!ZR*jkz zTs?n5UgbEB$!0dgc5T*)Pf?Y)LcyPp$wH6NTd}yfWc=tE@#Pq;-XPjUtiJn%@@B)W zZ+r>GRN0)IB9nyh{EFFf!T#HCQ1+W_M1?LCnqfsVkUTFZG@Tm7^9fe7hS_vb|3j2LXjz&>ghs*XwxWDY~wpHf**{lj*0=c>3@my6sSJwP+si61pm_W`mdi z__z7!`E$PdcmF20e*T+`gN)R)sJEN1$aqG^A`Y=Ka2FBAI)FUk6-up7p=tC+ecrx*AOGxzV!0uUQuJmGTL?5=M@=Q( zCPZ(zltoEBtJrp%1T~xE!y}@bIr-_BdR5W11af@E_x`~@ccIRtr6e+ z+6RQ|fXVYyl%harf=X75x((iW?R7NAz~0&6-M{`n;q>JRohU_b+B~0)*|oZyUp!~W zsq@<5F=n@g@0fJ=_8?4979OAe{vWfsnlNg#=x=YaQXp_GoV`7aejhuInLao!f=TQVRWD%ygVpi_EnnZ3+Ddgrjbi1o zT5j-AagUFv?d;I5x#(fSQsfv;lkLuk#l<;Ay2h>x*0D#U-=_j*zxQuxEEm{2T~xP4 zU#l^H@eptR93@oP>klbRon@BOkQUpfOBMMn7uRH3#>HezZ?sP)Y#QwWNP#z-;;IVi zEF+f{0ifz8q$PTu;TQtN1l#GcsS@goZ&8rL_ErnkGr}08M7pgo3Ojt4)BdJJ_8b*Dp`8iwb`-W_@#w zndHPL*M!e6xH-RKw6~A9ZKEA`ar1)p(--7vhN7!ftvda^J#5pZXE!NU8;m%k%oC(3 zNJUDw-eP=tgVSwu@bxb<^ z&mSXIXqpbadXw{T$!ojEoc)vE=eIupjBotse}}uj_KRetWYF#)@|tP{Nmi(Iw(hXVeR@`l;qAMG zJADkN&g9QNM6Y6&BFDd)v63b8BEgXw^-{y`cChw$5Qc+@Li%^MSe=}*IlacR8oY2+ z{Jul{FTamnE(mNv!|kDO?;*AZ2wg$?YsUZhcbWa!pQ8E!i&aF0M((yS_ja(3cA?kB zw!6%iOH5NoNn+fze8pF3*O;47Q%qW0J2dKD!s`jH7jUoNqStOvnhN!viT37Qns2>L zv9Ag?94clh8 zvrpb`vFX-GER`~iNy0Tw%|u9zcC$;}Z4!hbj^ogBZI;*9XnBc90s}etKX+E6*8GHy|~1` zTJy%%eV#sg!sp-n5s4R5@3t_Gh9otEU^+uAJT8ILZpL|RnXNXd=y)_~-1P#@~JHO%EAODntTetYeU;7PqU%Lak$~udP^^#oV zpj0$;my^@y#HZKz&#y2BBkDUlTzvQ`#r1;K#Y=3>;BqtP-Z#IDY8&WD$#CzG&Gi+v zVS{q9!PIr8X@D_o@%-Y1XdN^2JX9okkt5R_Q&EwMV7R}7=X>Ny!u;xzPd@*Y^C!ULZkbJ!Yz*6aCQ{w23SoznIfYhY@AMcQ9x*#xk_0iikT|U-slOrGY}kw! z=tat~=^*upsxk;x0ZKNdsw&jh5UJ{v^D)ab!gTAj>=Ah$6D{Vbu0eg!BNP=ynNk@B zdaX&lKVmxfc>L*8JV3mD%_NrWw zrv77hE0@ioqD#z&1%E<|LD(1H!)qy!09(pWWn{1eng|&WAOgl7~Lkdw4%5i zGkf#|OA0dECQ_l*bVwE+^|y{G^b$3dG@yJc5B2h70xcN zxc|<(2uG*XHD+PXV0WKFHTa8v^}Ezc1+Cqrqv%jcbk`xhoU!pjZe+z*AG}MuHzZ3^ zR4Gx5l$u+oDoborWpTB@a7>!B4PD(KXuB+Q$?pDb;#hL?*^k&%3AeuTK5oszzqmw= z6{<~wpZK^hQwrOreLTRNgs?1V47WkpYzfK5r{AO4q;w4()zHDx3B3)gt7|OR!H!F+ z@dmfkV)x!{PL~^oP7_zLq0!*>ul!Yp@4tx}R%BU(sc0-`GqTWQd(dOq?Gkt%l~Iuz zI_jWD?!0=$Zn;g;LejBX7^;OIZBR>zVk=}?fS>yes{$GO1WJj1|A@om5z*;6=?{K_ zH(l}ifAlwb`Qn6z$Z&t|KJNSPa5Rk=|M{QNj4Cdo1>J6whV3Hs25C~FR3U1aVw3X= zfAeoq?Dr_QdqhGd%L=xS+H6(}l84V&-OPxm3;H_P^%}ZrP?RN7f&NaPhFWpOhSC<~ zu}6GyiMH_w3?0=r(WS&ub%Obds7%lXP5i~eaqENBsVezJJqZ5)I$y{QTI3a|f=a0< z5ePwHARBrTe^o@$C|qqsl=#$JHH4}mR0G|xQBWz;gi5Kfn@u{y0Y=TCPzn~2M``Gk zmPt4F@KuZMy$1-##8qN~=_PKnOI$e=vuonWL$wU7W(#53NTEYnqExS%Mw`_dSyZ$- zEsUm1Qlz+sO~a})IeAKwXXF)B0!j%L6-8N*mKi#)$|riw#1A**c}mSRpejhB2!HHx z`RtS=DcITBqp9fV%QdVvwCgppMwd#cNL|NtTmpYX>iO8RVtjE*bb89<{ETL+iEtct z?!STFY@uozQ4-Km1R7ALIc}qa(cPl<+Fkk|yhXXyqPw;*8%^fn0_n}MFRlna{Tx%~ zeER%Tu3lWwkSd~(pa@>u+NGA17%iK|dq?b2BfY%gC%^x1nVp<691e)$kTgvZX+}-A zNy>!qYE1CyGgdFpnXT6>H!G?rrP1DEbhwY`H*gO|q?%+opJEjy`OOSjK|EhT7%{&% zCz{Vtl8Dv$CCiHo%v2%m)p1P+qf$^0M(D0XG4pY^28`-8PR5tShQjFRh^wnhg6k>O zWR7=wjj`TPDv(q;v&9?}h3U@d`QfS*=&3wnF&b581>%l?ql= zQePLi!lcx6YFpck$1iY$f`QZId_Bi**3q*9tCXz#6)n|7$qI@x=k~9D1G_&U2@_253^GDa;+3{z({8M8XSpy9eSQ^|TfW4>IV)m)nU2iOO@WHlRU==A%2Dxs5P z36up!DJjDMQRY~dib6r~gHN#vjhfTOH0zW?VVS1T>hRh(ejfZeKl@kzg81@;?OR8r zY8}JqFz63?^5Q8}C5={#PJh6BwIL1yY*i93Cs;~>wzm&QJBU^XBT>n(*H}r;AO1i7 z5qDyVm&T;4HKSIOPPa#6cL&+3y+XAPdxU{P(P(1yddN6N9nYzk6`3dy?K-AV$-Gy; z*W3_vw@1uZK{dGh`tRyH+kXzPBGCUn+@QZ0ftCVfg%D6kiK42QQYuOmzb}&X*l;b) zpUcFB^MQYkQ86UDI*wuK%nP3qSH zAODmWFQ0PntM3vClTy_XmQEOlh&-cX=;Z4q>&b-R@){I4ymyzvBnZ6SAd$-6DGDy1PSjMQVgI7N+?Tz&gHod4VJ!8BlcG2zL_k1?AyYN}_vD7?Z6%A}?U8-s0hpevF=H>~uR+Q4C>< znitUNvho9(ZXK=LB+|h0b80y_+ijXd6@E*%cu_l-9h|C>K1pUt>69HGRpSO(x26vPzCilJ>& z6a})BuY_OZkow3hVry%FdG{_=&7}x(8j)bP)u&+_eEfs&b8l-GFZS?e3mjX+?R04D zA0V4eVp&m1iM8{9w9!JZwf3O0Ls!~=tiV##1BnnC;%PREV(DLGz*{s#mwI}QxR7Gc%rGzVFd%LqdV7N0-i>_HsgD&$B^ z6r7riZdqhyffvW1n@B}Pb88syzRTg=du;9PqStKFG@?us3SH8>vrntNMJXy&L!(Gy zwrmIg^o+mwSN|F#FVLipVi_o|gLE8(Q$v_KNtR+-8d+>t>ra>Z08lwSH!tCS{&Chs#b3%DFqqtrY7a6&sP!tlalr)_>>7Ylm z+d-gG>jr}dkQ3J=z z&^IA|6+xD8_Vf{|VNiGL%+D{#$78~aQ$GC8_wc+85`j=Pq@zMsp=1TmiVW@ch+qBS zo9J6@GEopmKC$Ox_S?wa5%!%UvSy9tzxrJ+fB0jXhG0FOQL8LwS&H6jFsgLShQ(-m zhm(sl48y>cDwUs*A`xu|#ns7@3{BS=uV>_C&ehd9qHUubc6sCOJ7ku{$$W<8*f@ox zRzMj0cuB-s7FfE5A`50ofD+|2EEl>C-eiKUR;W!2%@2qcuYg7}%~>P~^V4fI$Dvkt zah)2%webYhM}169A@es-#Hdw4*Ksil$>qy4%2J}5CSI0c{L0sfO&!%TFsdAp#t2oS zw^}r}b|{)%^!-EL`NeNB8_$Vv#`LR%^+!LXGhdP-F*JiLiD|nQY8J7WUSrl9NW0EB zPSElSBgygR3sRBtWO9zX)y3Q%vi|r}(r`_u)56`}#@O8@b!%YSXsU&|cMqr6C0fi` ze)14)vqq~~6poEqYmt!S6bjfTwSz5!Fkx_X`_y>j&A%U^O^mx->MZG({H* zNP$G4Agd}2w{0PIr4Y@cC>%w56@$yOiY(1(ciNO1C>#IP-&>&~vjlHG;p*fiWtb4m z)-(=}arSm!Rb!I^s*2olaC;-#c9SyQfcnawD1;yv8j58h42?u)l%hl~eTvg-vgs7v z)xlEnW(yjbq<;S%imD-sk}Qk}vy`He2nA$Oph+mR0&le@@Is`fv%PS8!H zrLNG~+CnoORMlX;TA<33uu!ptLX;#}y#cvylPs6G^9eutt$)UgpFL)KZy&>|5lfS# z-Q&(LeUo~p&h+``EHBQfA02S?%ipB&;67q!3t6ji_VH7avjs^@q2C?QX|$P6X4L9U zHY<2L2+tJm3S51Gzpc!tKLDERrm@(aBA!3Suq29=OR%PHz+jmQ$DE-8wX za60ADAN~bZ77?6XU~3kQcOT$y_vw#zxPE$yqs0(}q{}63*MTr5nk|_xW;6#~;!Q{u zWfX=&)w1c@HsW%MZV5I`L0Pr9_Zz>+(a*h4w)A=N-Jf7cNlH$J#IRk$B%-0K3|noq zWlT}zh}{;uwFaeTQo0uT!Xsb%sAjF}*uJp)?gN_dzk&AVZIVibJg2TmL^!APXPBBqs489Q$usn2#M#vh!!>c-Iw}fP9N?`c6pDg5JYcQVsA~dc>7(ZviC)my z8xRB`!|sUd<%;|}-^W1G-`S>du!r2*B6920`a|qSlZ(j(8Y!D+PvPY$JN-6QuR-QE z(ex%2DNa<8sVYjpNfBjqkMI7B?VW!T6@=DbPF(#5E6|0ZQ6(`JDj+~rQ4p1yCT307 zTdJfL%Y2wAm59SgjOu-2KV(!h=uZM=pt*`z((y=I$ zn7(GwZx47jpHnFYY9YD4dCAIOW0)rOP7k$K$L;lTIt`*Sqdto`KRaU)ERj`#5$7c1 zIo@i`_U$98<9!T8#VjiFFd_^*DkQ2G&&+cMZ54d_&DVsC@u7|gO9G>5is@Y6s2Z4S2`Ui<3bqw$TeG5Do#ptgG? zev0a^_`!eo4{0yYY4&#c#sBU9lEc68En=xLFgx^GLpHw8y{~>iQLE^6yVQh{kONks6PN}swSrZcajdj??X7p<%_GW>PKctI#_=A5ckk1^cZ^~he#<$`XMl3rX8 zO(qoMDUF2(yN9^F8p?Q%p;s#6AGaBE>n}Ve6d-H23xhqZCtWbW#m-6;RBs89)A*<@F03$Ha7Ngkj7e%}`c3 zWxd66e z2ty-yeocA4!i*KtAN~MMg57Rl>~6#MHbtvNV>qN#1X{jkGrcB1KgU^asANXaaA@uw z>WMy4g{Y(rLLXpYTPrU+H1EGu@m_dt={EN&R>^@!3X z)nLf>J9n8C3EpHuJBDyP#ZT8Pvo+c2HIKjjJ^as~^YoAZgw>-@d2M&VYOzFU2IjEN z(L3*wxBCQ0Y)heK3!=>wMHVdLlu}bERTZnOXvG2L^#w{Usf;G-&WP>9W1@bO?bq)z z{r-pi@jv({G#V}LzVQzIHwFybTST#f7!0WOJFH*6M3xz1w?pslyG$-_IDhmRvA3Xz zA{;dGJO|65k^-+t*@%oNF4(p$8e2W~Zy%97z95=CN8NAH?{!fgjk(+3V&zoWO@sW= zbNs6_rYFy6^g6ux8~+jcYhQ(Y~0297S#@9YxKHrOvG6yA)yQz6oTuHHb|-6u~y ziq(>Iddc~dhvaF|S``UXfh8E3bfM#pB zrpB`${ggb239DB?`pc(J;5wk*aG8w9B$rdN`5bjnqt^3`OS5u-Wq|gPFC3bh0xam+C4tMKYJo?#3WHrzzXfG2M zT22#zq3Eol2n&^PK4))xo8+KN)gRI^ZQ}Ks)bltyJ3%uI+HQkHRESQ8&H56z@Q5yM zs1%Flt=rUG3)5dS?U(S$lh4P+QBQ_8eJIxfO=$derDy0}|IbfJ^He8KGGCHZWDH<_?p_-r2? z;0^~QfaNr(DB0N>anSGMNQL>;HC`A}AWEFGD)$NiB zFdZ9;1j?MUl6YZ+l}c*1iLEKD=QD!E995JkT7}Rm=(g!K>ddEO%(P(o@#l0pP5#sW z)qjTDX&@I1ns$p44aaq`k{Ee)L$%&u8amxOM@)b62|JxGum9>VkTq(IPp+{Io3yT> zN`+166P6N36>Rl~#J?(ZWk zjoc7m>5LBd_|t#&J2;8NG96BWC6$C<_~0uX-@VN=4cKdUA&i(jenv2#;fDcsy-pbv z5axvA8K+k-@K+1krQqbl&$xc{l*^AlXLEXn60cEo3n>(AO(l;5(kLQIbF#c-y_(T! zcj?xfOs=l*Js;gLK*Dl5C+$1z?rkBL9)H5oMqTtB|TDpH1Ki&Yk~1Tq^m z)5J7%?(Q8S8Z{aUoPGK!&p&&JEKAzm9_Tu?RvWp_Q39W0v7#yk_VF?8x9<~>uwKsz ze|(92<1RbD`7NfWrx@2$qI5x-hxFo{`Fc(yB*Ru8P0`W%EwXXI<%=oNoA+UNA9*oG zO*hPCfXEe`L_;ldwA@E83gp^DbPQ$LD*}X|6d-k_L^mgLwWu3)OJtcz z946#;gt0xsaB9@km?{XVHXczL)6sf_Hzo7BMeWXQY-zE)I;RX198r*$8A(>5J5Aiq z2*qf!3a?1hobYDCsNJPq>!JZN&WNTfhr8S0xD=XBqu0eS6~bwRrfFDijq{r^$@CHN zsz-BcgqFr+X#q-(ibPfk>%}SNYC*Hv#>gv%!#;N&+`&BFBVI392NBJU_bRtM)45qM z(Uu!zDZy2k{NShTfAuYFU1NQop`Xay+It+@^K+4xgn^d+$AV-+2wSu2Y^pAz953jeYDpZxDtX z8qGFBGf8Dd{DU8mznn6=Sy9L4CXDgIfTSuY_O>wxZRYD0rfKrx(G$Yyl7ZPl3Q&Qa zVTW#~MHNMe+~;R6&q+@&$!808j&}$QgZ0&dY!%XL_K=e+qU#$x&qK8uZ1o2?vB3M} z5m~oI@2%Si&0#uQQmF!jf@RhyDv7JznsE=ej4UrKDt z!m%7Gw?k5$qvkGESs+RceS3g*d`Nk^q=*7!6hSV@^Bif|nB4)2(uj}B3b3O5H`6@;q|;cSYeL{kJU zT~I~^ZObN-8Nc-F-$EJ!nWijHE>SBOUq2!GZbb8_OKoq9vWn4^7Ba}Vxx8fFtXPld zIF-OwbqqzI*fzaUh12Vh2v97G_GrXvF(Hf++HQvum87UJk!*aA!cGCPY=?29PNUPKb?bofYDusPNL`1jZlO3Dx%9cbd`vT!*tHgA8PG4AY(_P% zY>(LZXfK?-PvKYnBlKih^;n4 z=5#Baq||x&?2JgQFgF=;9&#Bx!>9t>QUg>jv=rms9^FP0<>rQqM-K_}nEP+Mg{cZ; zk&_h_GB1c%F(i_x2Iewm@#Gw<(V*AvFfUVlFQD`y_jmzk7uar%)@YkNQ}7Z6%WBZ-53y=4 zH?t|~pvT>VExgH+LRHD51S1g~4UXylt>2`y6u$jm{-5YyTr)Yckp^t_4#|&(NKN3Z zH`KQqn3{t3;X`7jLfk#TyYkUo6MwghS<_H9De>YZ(ykK|W7ISXtx4zS-hrzb(?9qN zw6?>+um1|oZjZ~~`7XvHB^zI&*)0^qWZ_37sYKUR8r?c+zm4LU2vcY6Z%}lVW~+mO zMjQq(w9!Tmrm0cu7(|{&scDo+hGke>djXjrVJQY?r}s>3Z+|~QtE39AxT*hRtK$Fv z^FO-9v0ks>FYOJ1q(V|D)hi~pR1iWb?Zx!(_>09Ik)%qy-bAl82@#Z1V5$a+VUlf@ zWMxFS_Q_Icy>*}3?ucr>qHYRu-zN_Pq9jGS4ea4Ak8HN(0B{|-DNmXW~t0l|T zf;>;jucjo^8^R!Fx!Eu}I%Mzl`zXy8qV6(0JR;LdqAW%c&~j^(c}AKQ%;yX83QWr; zl{uY3m#=)|Yh*GfPczh_L`D%!T}4(Yx?Z9xl7?+#YbwEd1zCoSLMlIEtnCBmT zM4qM8`vZ(tm;Rkw)cbwfqXE=htJ$2i$jI{y!?m#toz-N9zuvGj8j(Z+FMs$6 zFP}dp5duZkNX9Gjb%<@-Owt(FsBxvho&VWi=c|AFH@W)!1>gIFKO+rNYJ)C2qamTc zCJ21Gy#d4ih+w_p>f|N5Wzsim%+9XRYYmFJ#Uf29a!H<)lvt>ZHmR*sRXK*|ap2aF zQlc~*4!`vQMk+DFjMZ$0V>@JdN>r3!8-x>&dc8}f*-WE?;jMe@-o20N)LsoMtY>JJ z!QtT%lj#hzRcGtoZ7kDZ)ZJpyvstfaJpFHen|_)yt~Q9IqDBL6cMH`|nS}vI_wR82 zlb`Y7@BRV1AH0bibZAv3;}@S(-P)(o+9G{)Mle02Q5PsthQBVT-98{Y?jc4!4qCgY zo@BlbSfv@lao93!Hk%1D-=O9xtD7aFR8iHOvRG4GPjQ+xoKB0R%qj8`UDZgUnAKv1 zQF)~4nlxNtmL*wUpt>$XG3hpXsIHAH!R>bA=4-G0wz7ZtFG8UvrU12){JVYFe;+K4 zFGQdv0wF$b&C`mErb) zk3WCL&ZtMtwOB3}WLf%3xXY3)RfROB3?uyM7;n9#R<~)knkPC!g`~!-wp?^MLn%{a0x9hRhdp=BHO^%Yas=POu6H!&f9U!VDwGFccj{*GaPi z#Zajz$-IKLz?B#!PP!kAjk z!LV#zK6y?!^O^ChaWY z`uvPMh)IKx_Te_>UWd{(aGMQk8;RF97z{f&>kXQ%F&OTkDh|0_W2ot@2R3e{VV_L# zNon0XCJhp@AjV#J7{~i)vBW;PrYz>@Ee%mBNGv>mMyC*1iivT&hkCTd(cRZ*_j}}R z2P?|BzB<7c8IGo7+AZpx0a=l7cKVq0!)LUHeVW5Ad0D>d{gsk9NkM=+9^*|WgjX}f zDnb@uw41L`4yHvK#uP$g?QTDFUVrT$QE&Y$DN1Q73ZlqBedR;{`ykL?hzBi&%3roA zQ6z{;0wAP7MXi#i`-#19SJLykp3Kp*m}Z=yD=NO0lC45aHAAZ;?%@HR-69Ti8p|bd zIw#KS)TDy29gJ3&`u;J-?g3ihGioaOL@gy*5Qs|oeU zps-9bO{G?I&;-opE3EF2%C3|60Z9(JrBbsja>wQ-+OVF?ur!6tbWytL3FaG?H*=POheCxVz)%!gnog(N;by(!<Y3Nw;*N=l5? zZ_(WyVDQbu=sC2xV$-Jvjlp6J_NvorvD$r^O z3{|l4B1~IFb!@g?f0IoqS^ng6bVDObV%F<5nlO+hXpI(o2m2K5E}|+Z^9n64K&mLE zL{Q-QbCN}jd%W!zUHAJmYd>TW(I1O0G#GX%{B{WP2#j***9L3M6Tm!e$rM0s~Y8X_yj#aO- zT(7CQF7a%})yp$#P7SGR*jpnyw~vtR4i~d2|MdU-f5B07@});Z(daarNJT-dxpYP& zHcbP!-9lsqbzvaGlxLqlXMK4?9fP!QV5l0K>5O9I(Xeeyr_M4iC{%+i*YZ7OF zpRp}yx4P`@9uT!HrcX|Iqt;{R)&Woc?2oxTc}X58gp&o0Qbm&$-9d+LyFp`B!`;j< z!%MQ&1$h{dq&bR!VZTMRnNtNZ#oS{eGI(>3rdgw(=xE&zl~xdwQ*&(EZjCBR5pl`+ zXU_?5R;*=4CBZUO^rAu*C7NTQI}WzvqO3BEgAtA05tE0{sHY`{Yty(jVvz*o=nSnI z=JlMjKlu)CbUV0~#XMLcg~BRKa7`7+2-B3#Xq(mACtfYtOmA>Pg-uoP+RuNP#^FAd zt`p`Jg`r^&x@4+J5PIn2IoE&jL$roT`&Yh9xxdS3>lUl;{}8pPuw0w9@1sUJ(anNR zZ%Ep3FpGlG-aew{5DS6nn#941x&}>CA#E89ZyjQ28n<`%DT)}y*4f+IVRbU$veQ6m z)R7M_nE%1|(2NqcYm}lwiDJ%@8O@-=w(G2gplP>|PJ^O9KxP_cUSU3b%+(M7h&WkL zL^-)(BV7e$Jtn@n=Z8L@+rx5!KP4XzWFwxEU;parU+Sk z=eSbAUya$!XKZin69^qIN-&auBAQVyX3mSkCrrwn42eO=;4^$ zmITdhoZUB(J3YGHCi6f38IwQ!L;6L9VMx-pifS8(xTHDU=3KAX>+j>X+HAjeOr)2% z{T7NQp(uF%*+Z;NMWskK(#N(mrq3_P3KeJnko_;ehirARZr!GSbVL>h_|KkT#u1gK zqxE~tpMQ*gGe)0In4iC(S;G3$6XH#Zwl(7ZU;j@y+}R^h6VSk_RD|1veizHAQF@Y8 z*TGe>M1}A+xRjhddqPc7&@abCX@*~_4C^BnPcJxo`IuJM!PF)8;W4>TkliM_V_=`& z@bXXp0=He~`ew=}KmC|$lhUqCDnG}oD*T$sm;TzXaq!?RR+GnU(hXL^gU8bCXCH=AUWoS{fXa4u%9 z6rl*2J6&l03|&bVBPpoSXoe!Y$tI_L6F?V$0t%?AW9ryE=`*+Ad+p`DE>44l+L196 z(ZB@xMC^!MDbk+z*>l_~MN=eXDs)k%C`wF0LCQ)z-^Z{GvgLv_OsQKn8XFE?K0%XWW-qP~7760^ zCib;9rCDN%6T(Uoc2^vW%42e1SH|#nF{~W0{X|Qs_M`ETvZiOSw@Z@?5a`tp{xl;7{5B3 zUxXp^*%ZN4(Jc$vwkbsgSvF`mZB*T6nODpdg~D#5Z0=CMaX?uVRI@qB=_QL7M=VY! z%uY`*Bmt=?FbWYNE;+uu;O>_`pnvNPGDV0*i8snhE9$l?V27`06B1#ot5 zbNkKr@Y6L_64JNNf z8zC-e8W#Cvgi1wQuaiteu8yv#*$te!jb(^*dRwGzcnw#9${ z&wiV_D6rY>vzX3E%AEH02A#caWXB|kLzKM0X*Y2iHP-H$%#TTvjI4wx&Cr7icXWj# zOXTAvjb@usM`NW`3?zk-drsRj+1cGjGWA!P%BuidGRVsexu{SjnKI8XWtB8dC^ks@Gi z_K`&aZ@EMj1;}%XECE%)%S%elK;PTv^u;-=AKa%Hos!m7=yh4IJUTUlba#V|JGXKD zfWrr05W8zOwl@%)7U!!e^NUliCS%l2oA!rqpzZd^CKI%y3%tXZEFM1ur$(mf6!NS8 zLlVU(ii%yYqiS_zO(V$*R9T~lGAJq}MMF?D)=J9i#Y5u5r&ywhS#N@7f}|oB0_$K+ z&9C-FOJjSp(j3RN+U?KeTK!)t&DQs1(=01qh4V|&|G(q=vjFIyjtBh{ zF#hr9C+|y=RB6rnBVlQstwXnw#Ia~g5`rjE_yMz%L##%PR=dG6&d3)LjZTMkQzcPV z2J$VIXBVV-42nb&dbrPDke*+Vq%m5hP*f3@s|myfYO3PJCAHmK)ZY03MQdSZOUfcZ z(j3Cf&__^V?zy08xM@aD(b%wbW-FJ=^9zcT zBfjygUm+S^qfk|h%|5%WEiPX?$JrQS+`hr=^qBeY{{idE38kAc8qW}Q8`;#Ek57q` z1vRgvxidtkLM>y|Bqs}ElkMAA$eJKLlMG)4I0 zd*3A(&FSEgRub{)m`o9Q{_+V$9<#Z*$^M|tK)2W%ZgV9_ECY|{XD8g*?$YaZkTjKI z4WTzx^-JRGInj{)n-6MI;$y z-AxK1$7t1IdmE?SW%Rj3d$l6VbEdN~x@j|?Pcd|v!A6h%&Njl$4K{KWL$vAjdR*ux zs#ubgIgMVAb?C8txkQ&`hTAux-$7^?sFzc`D8-QsWCV(=B#2@Z-C#9evRKlo19ANnT)e>U4DdRb;Jc(oAziRiz9QbVDNyeF{;eG7M7P z!s_<$M?Ok_gXV|#I63*0W~m^Y%}EhRuGhKV*V%yzpnCd@ znj>K+GA-R8QU#{ZUXcFgA5tEjFgbaGX=(_9Kp7@fs{jlG(J~Q?1o9N!7RmCQJWZ%I zJ0NM)I~ycPLYQQX;ww~AoVa?G#bd7MUcZB(*9aya-JJ#$358ga88Wq2jYR&_?zt?d z(9|Qvv7Za3l^48<3Kpvh%Ic>!9QH5MPp8f9FVK&_tpq`!(lm@BkBNgl()5~Kl)97` z0&zs{uSxv?qt(V34v0mGD$OBH@PZYZts=NF+0}?*GDh&{L}y31N5`a5K&lFeZb~G^O zJxEr_lstRzf`=b{#8r|~$TFiSU@5@vm)=3>wUKNKNw-0Ob(&EaHs+vDVVY#R!sctY znJgxxUc~BR%xJx$HK>CskYyQ`Q)eAy40|0icfsiw4~gb;#Iht$6B6GeTP>;5gt}uv zUf?d*Sj{HA>w9$fcSz<_{Me%$%~0Z!+O<8_zK;@T#6pCgCS*xWmLybpPP^6M>f)5q z=`l4`XSKJ6e!mL z?re^_T66kGAF+k|GAF7smQ~3#4j2~+JDo0@gDxxIqrSC)-S3ht zSCGVLMb2tDN2xj3Tf3NTlv__fVJqd3Ic>-7iqJPo#far&d4uMcz$(BZ@WihYa6}Y!Kl?Rb%m-d zC}ojc2Dy|-Vh^$m%g{lnkQ5aZnJCM!RxXq8eop@KlBT4AEU?ZZL`6W?Bx;WJs@PLy zYJ(nnr%NfTl!91UhBb|A&hIL<`lo_vuhI&tqC^&jSCMT$0qFlIE9f6TbX8S<=>imS zPCz*^Y~!SofTo2)LOmue6 zbT!9c&S4$X+}uKI*O^~Vh|kYysX7ZvYVY1)|8M*a!a~AUO$xCjk6bLnq~7Y2t1^BR zA}bb7vjy!IzFo&|c9^FLYT#p+E|Fi+9rk$t@BAHtJZ1mZbp%zUltpg6@fxG^3y3ph zc}|tZ$Vv;bkZ_C!SqX+TwI`O8nS6pr8#m`QSY?S z4U-6&)zzz9T5`UsXqXe@BUkT~-Zs~oE=5Elz%yN@db zw3LF)T8$@1PdL1MfjMZhT6-9l`Ko(l;S>1*agmT@1!b9#$r47bfgr+U>Ct%Yb-whE z{|h+SXC=s};gW`~oDh)hQqUAUkttO(X;QKyNnPF-owPu5Gc0yK^=$1{gC=pDH1PRlwljbUU zppY0%#LZns=cfpVE~^(4(t`=9C{vqkGT6U{*sLMTDxT-jYqXJM4HZH3t17T$B}0&) zDiK8yQ52wjRY3oQ^ZHZQPu1f1u>?W*x4^Ed3Kfx56bn%ipO%6+*97?>jAQaNLK8~j z6l#@>5T=w`3L0do58jf>ogwseDlwrVp~@1nmCy9)G4b5P@wZ9Km{zThe=()#cIn)` zi)R^Bxqwrv;UzwfWwDkt8r?qfMh{Uki2Vr1ad1_El^;+@8nsTBBD^3SjZoWlHn;bA z|Gjsa_;ajoi%J%mdM<%uVk$CCufTo&5fKu#t$n0=K)9TtB4gGqW|Jv`-9)k)ID=iP z)M6E`k!Asd#wJPOv9qG%6g7fZxAWhm%`kx$Z8 zDO3Sv5fILnRH97%o!i`Kh`e}lN^>wIO%ptCK?@1H)1!C2;{K05q6!msdK;Lsik#=H zMkDg7z|>TNc!etH#A!rT36vd)$}lJ#i_&&De{xE3Jfmhbm?#;ClLfnGA3t8ud;4{2 z&Fk1oPMHLFkDd@ee?hKJ28YUMTeXM2^d83UWi?mG>HO*0Ybzn-E&I!hI)JDK6 zyToXBna`Fum4Jqb=2u*to^ksZKBQgia(Q?Gas^S&`f`a}b5JaejFK`-nU4cP1=6xW z1a52|Ac`6cYW)2F=D#AdEbP}_C(H%PB&CWn6uZs&GNKtp#e&>BO zQDt>{OlvSeC?wLdU=q2A0*IwRsmK&+MNElg=?rh|vvqBkAAEA3<@pg|DWJ+4y<4}b zwflskLLA4GRfd`?XjMkMUUPYT#%9OC)C}Bp$llF6*l)eVqto9+wq>lkL)B{_w`&M; zf~q#ro{o`}l=%-nV?O@q)eznDbCM*(DnV;@5G;pC5Gc|Nq0A_Y6rz;M^T-x+L`142 z#t(h8exF!TvFi?&t+BEk4*t&H!b&1e|LOmi^0UwARWbcWk1NlktOTMYCG{d2Ef94X z$8pFiNYl7PloL@_Q-G=zkYxd=$jb}?74fHEIR9JyR4eEo>(6@78Zw!#lLzvp7epgD z%L_pg1xZ&0*%Qbe8BLKWrY__HRj)%KDacj>F$|DX9nox~9MsSb3R<^)Wa9^fS0hfI zKEr7k7_~0vB@A}1Gu*tv3pb+CvMrxJ|$Vs5epj&k&(ORq&US8 zAzMz7OYmwMt>G3`sZwvWVK_u>Hi;KY;tCWuCQ~%z%|20FSK8QlsvA zoIU*}POr_gGC~zZDn-OSyTG}=gK4R(CSz1Tr?1;&s>qat&AV?R@881i_euSL`ST~t zFE0@q4!z-!oB4_tKYGCV@df|wknCjkCC#1(a8zTP8~bbIDYsEXHOnccN|)+0fyehU#|$`l&TPU^W85I$2tG> zxBpuPJ9}&lHhFnDMfEf48xmm^lgAlCSrC*7f}m0#wCOl?w)PIFY?XA-K)=4r)b%MY zr?mTh(#WN%)k#YUQP7Zz0!vrvXab8QhlbAZ<{Kzc&gk@UZXLGPgW=YJWknNj0$f{0oKE6aG@UX`!Li952f3k>CJACGA{!F9=@3hG>R)<~ zL@0^FCFS)S^fepHl1LDc42wpmi&(3JtW*_cA;?mo$%=;{##A5_C4wYURV77Hph$n7 zSwBtvwR_O6yP_;h;Ln5k$10)%(G(H$v{DxCZAXw^OY_L6vQWsTGsL|ChHA08TD}5M ze}hWb0f{09aVgNW`h=>%%QB^Yu*;o0ci0;Cn0rg|^D(2z3}2K{d)qjh+en&$X($MC zP7^n9rcYmR^3f+qlNFPrBN`0{r)^Ow75258)SVh- zlwyh!s;04y160eTDoaAY!rI-%RbCzb+3xpWRfeXH)NfIbA{vIp0R5$*w`gYLoOaaVAF2m zFG3Ji!n|bn_HBkg|8?f8C1;;LMDY{$ZrrAS^E$R!!-z#T4mRlQY+`FVN{|x!9_{TR zTQ?5q4>u5ZS{R1P!Oa`2B@xqVVCNFadV$f^k?bL1DxlhRiqI#2`JBUVe-lY6P`Y)_ zmnm|Tq6?5`8SZ3Gxr(T3I<{?6BqgIHpj0H(qM*~LlPdz6X5gSvD_lrQB*|nNXLRn| z!RR)LLm#~=StKs;`GS-G;a}7AT-GgxajVX~Z+!jL3EEg;J-tBAe1tf|6f7LUMvP*r z(8n?Bh+)d|=$PX#9wTKrW(tiQw&f>c*Dmnt;s3G)D9adGGRX=l z$rYg~2=SY87WB$W70sR77_v#E%jC-i!hC|X<*-(Blw3lSEg~)FXmm)U$WTu&2>lg7 z*P^+#gSG(o^cg`^qIQS$K6sDDJ9o((jo9_*76x&?Bwl%VMb6;OHyE$i^sE~G`3duv z&)72Cq&s^AjSgmBvZqOmUOeac=~K3vHA+)K%1j)48@bhB7ELIt7*TIhG=NA-{V-nRtZEw+N)JP{UsLjrapI`9V z{S(GNe8d+|&X9YX^zPhYU{R-5&hi*+O;j@jRv7E5oQ8vZGf_M4WZG+GFo_o zkJ_zcMg`g;AgD6@B4cCwI%%g*A*ietD}==iak(OoW5hDT(kvX=Aq!)U=2Ilgq^1}M zNZ8kQ!EvbK0#D0u44u}_4!)P6RT{PJE?zt$`TP^6r%&MiBaZ&t|B*%%(cawQA}P=} zH|XBjBbE(BSwRy@^gPC!Tu`PFwVH)#=$P)3g_7{@z4xfnf|(G~=+vn79F+I==$JeB z+bu#xKv~7y{l-`EzIvPeU;Q;q+HiND+TIqrP!dh1=&dG$ue?K`!A7_HYV)&EM>cfo zx`|qpc!^IcgQ}QR@&^81jYP{CE=$h;=u;}gq%&v|e)0+4%X6ANCRMjiXbkBHWD!YILNw6JR?3wMTAvzaFuomzvZ zFCOvz?|q6{LZcF~Oq;xEAiuGJZ%MQc_Ru%BiHrt9dlzTxfK*Uftvq@~h2K&M8VU_n z!U%o5s}pp8fj+sy?{?5tnJSOb+6@}pduVDMWtkDaJg0ZvrkJEyN{cHYBD4Z(YDrzK zFDkM9C&jJ1{}NGJi;{>eiqDCRfa)D+V80{9it)V$BA^@d86mzIbOuG)M0q5t)hDv*DfZnmWoL&)3$AmAA zvBI2Wa~q>>v8n>xY)!IWfgkbCyB}~CCNNuJN(RwvMINW9j>#;IScVb0qQ9zEW$9Hy zU?I@#_vl~WCyryXmB-}SbJmi~@a}7b?uux1!RgayeDud3ad~{n)oMkOW@w^H&9dqB zyM#$Vt=3>~>wt7`pQ_&?tLZ3)h2+%8Et5imC< zH4AmvM9Xs~-};2;*#-B%`+ZbHLF{$$dp)+k{2^Pfzs_*)0NXODIW|R-;=5}ULBQ5c zl6Ao7?2=@*q_Rz{dV@kz5gK*KN~(3j-u51DkkQ;7AnPX0dYA2Y-y`4NMs-@$^%lxz zjh1b3{P}&>^Etz7*J$q@pfuaGHg{-mZ=o0lNuCj9F_j3CX`tA3RMSR6Bh5p~Bt#P{ ztgQ}dTO|k=Tpd2A(;1@HERvM+RMX?Y?@y{_x_>UdX zuDkk6fA`}Bssw>JO_5~@xhjg>^LDkOysaTNBG<$7Bi07!nvPyp_>oVvTC=*i#LyI? z^$fd&c)nmcx*{FT$S-F2>lI5irz%9GW*2j3m)gNTa=SqohWL{)YLOBbB8IFYYZ_|5 zLl6Wgu7^0DFnaz3tJQeru^Adl1=(W3?BWX9G{7`4$`Y;JB9tnS3&c1eT`iF${Z&lp zZkIR?Nmnc4>5S~?99~{BJwIikr0m}P63yK&PB5qX>=LJ$;5+(_=ETXJR@~O+{=^=0Y{og>}-$n@&7)|-& z!F|p~E^Wa;GIGR9gi=726vEhNG@Wq$&g*P$?<2kO4nn(zs2iw~NmdCY0u)6;Je^Vt zTvqE9jvx}vr=(?wAwaZniOY;!)Y*RR4z=wq+&n|nboOstBcLT&dE zw}#BJlrql9mrH{60yz?pRS@es?O~rdi3r1h^yq@oAAFDHXU}ny2({6o*xP3NSALmW zzx+!Cl}KJxNO?ry`2_1Vd7PjMGO-__hzf&FmtZnMY1L60O_Wv}t=Wb!BRn6oI622? zSxAP4UT@$Gw+JbthD7(8zxbrB|7ph}4=*>YXl$AYgZTRJw+0+nB0?dwxN-a*>dD|JVN} z>!yQm8#FeDScQsI3KU679C&1Lgk~5t`aK$hA!etG(;tFq6O|QGT(EfbjO^l^VW*B( z$%s`!R%B>Rhg_9dq%noAkr)cv=3T_=H;IRRq?(Bw6nS($cGGs_-ze|g{Y|lwu3mL+ zh<}bf{|V541)%?}1cAIL5rqm#Agz+5QAW|N!Vk8pIF!1Z`>eDIT~}xbGX8RbH=VLP zzogNwb8>mk=;;xLtP)EiWl@r^d^Wm0rv3^yE_mnXzJ}On;fVsZR*T&CnLU3_gNjv@ zpaGR!QUDu4t2{xx!OPt;gZ~nqBV>m6Cg=AqwX=n&7o!lrXavyaa;GbT?Y{BgN zpL6l;k4fV-hHA2L_a=9K`Il(Dc85e&(Nvi#iO|E4i{oSBAVgC&Y{wz33Jl9eGBjj= zMOGFlijHnrNP@_q*`#S(oE$!7F@A|ARtSnjrpV})gIa=E#-sCh;fMHFsC^z;P(^JkRP zIi;qC< zyGLVlo7%PO$o&CvR?=~r_@;oL6zp8TMG!{3eDDR)*(HOT!O`h+rk7I$QKZ%BQAi@C zsxsU^KyNeYb};w1$yAwQ=Hq)FMH->Y6`Crd>jt8# zjj;zMQ*ADiHB%N=$3(|>F9!ploZ&AC`E~C3b^Yj z>G-0O$De`ws=`^}_T|Bh11>0buq{{-ki1@vF}@Pde>h)`7s0;sYkCZ4~Sxy##* zB<%4JZ{%`&ZqA;Z1Y?8WbY9%Cw!TtyLFl>|A$vLmT z`3BYACi;7KL9y^+k1X;~vsXhGw7P+*2qfb%<$8r==}ZofaU_wnhzXWUwg z)Q4Rv$6y_&=&D7dKP1sr4wnlAt-_lxSe#xE&nBdoBZ`YFVt<7_XwWb;g2E?XuSn0& z(aMT}VRP~E4_Q2YPNYC%qk~@-Sp5Mzx9*Te5y^5)O)8l@cto&r>GwJ~wK|yqr6QrX z9Oi+GUBuu=&@G*`h9g1x#5u63Ux_CDhtFcA&-5^B16**RL!6&ONzurs4`SpqRJ}H zA0ARHeRSKPeq)=&o%8YU{t-1Cd|o$jkn5vdZ8bsfR=P-GQR zND#{m#rLqnv@GKETpe!yzPfktuTr>FQU213`9A^rFR7q^axsd$LJBBc^#R8`Be zAnF(E#oM-2wHBpZg;FV0?wa&!0)~v)sv{JCdQ`JH#BQ_+MFHwINmY=9KK|91;CzJG zsL>kqhycydiPuZ2<&t7DAze%fS4)IojUr~$Y6hYoQI6&u-v5-DH$!P|Q|qr*s1Z2w<$!d*h7$}NF7J8^jhIe|7e{xB1a)o<2AuXVF_ZF?& zw}{;$GWQv7-vG;I6}Uu~$BaMy9<^zOuB(XKJ>+X!)b{r%Wr>x$#A(z}MS(oa z$f^>n+oIL)(li|&K6prB$h`j#{t=N3cpks^fBnBx&)~feKH$aEr$~8*j)vTB(%jkR zVIDM7N5=Yb(iEK6|y}BejKj-9+ zzQf6nKIiqD`wVt>Ni`j{)k4x_iqNBuNIajAte50bL>{NFx(M==V7VZfEy;wEQ~-Y+ z@%Y&hNzSV{eP)Vn$t&*%}O~bQAshF51llc5mI{ z;^AZF;}LyTN2*!mLW$j|gCZj;8cCd?>n5gZaQUr|X{H5gQeZS2Y`%7v*2V_WbP018 zr{6*qD}*E>T`ovgE>f0bD=IZvrAj?ap~SnofW?&O-~KK&S;p>lC>)!Htdj%@ifZBd zA!$*et18R&3Q4R;n{|?+K+1(mm7FNT__XTp{By->{74Jbv{I|T63l-QlYUzIsm&z( z%QgzDszNL($|^??pr9fs#g%M3k7UPr=}*tEi5;!1JF28CL*hapS5+=U4@m@7P?=4Z zY~H=bdLq4g&GtjuvWl-&WI}|Tgh*9}znW4r67WQzPQc+3Lgh~*wnoR^0=23`Ue-&M-1TK>oFX`0kNSeaT_i4x?MH(?5 zPneyb;Xgm7n)xWAK=*4Ou=DjV;dJ|a@&Eq6VJR9$8gTac53p|E#v1gHnmv~KCDr_d z)r%C%zDLpR(|zl0G*PF_Gt|X`xhz2`FsPY0uk9mO0{$1rEG|ae`di;%DwSN94IcdK zKgK;g=Cz$`%+D^-vVxkSa~@?3B$ecJLbY7ezp+hjNob-#d31#!fmS5svpKPwk?IE0 zx{Z*;gfCA~?%ttRZ=k9g@xrChD|Fo;%1Xkt1hqjKrPzo#rb_0oSx)DqOAjq85b}sJ zudr<$#Z$P5GeW5%F=`YptXn$1sMACvy1L-W=n03d zx@mBJ{}aUdB|CdJS^7S+t8=m}LsL~WNhH0PpePcdX`&Q9nr$K};;Yc7PKTt~LY7L( z&K~kACpbT6aWZCddV!*;RO^J*i*sH)J47{Q^o=3QxI%7Qe@4|BP?#;|X+p8RgC%6>n>}vI+oV*)!3s%J+3fXL1_4K(eu`6; z*j2%55i;1?A*k6ns!V=5V)Nd6)CE}2uV{-EX%caEeuC5OlL{eG3Tc>AlmeC@bGev9 zo>Eu4TuiQTpQ&`4EldHf9zCV5spwgT=;u)7D8iDoJVJ10SdK}dRoGHa@bm`M431#Xd2ct-Kl+Vb?Vgi=JU%BYHzBu&V(h@z6AOo_ua!E}rh8>}Z6Op`Tf zDRAT94lf=Z(jV>;L%gBiap~ed|XUf`GT0A}bZydBr$dbM1qlL$Vz1 zeB*Dkn0}uujM-2uLKk8$K~gR3R-4)B31^cLtrB*&cTlhIQ6(Ai<5O<#?IG24#JWSV z@R;9!N?$d(Iz6GRavV`4iDH`fUSlBD5vLxTW&_z!am$EaUb6cB7hsl16hs$elBrKs ztK(eT!&VfU%a~A<(AyotC?j5YNHrN*cc|5yM5aNk*r;iY5U)vsCBb@15v-})CF#`y zPuRq)?J_rKI9Zv@_(xfB0V#Jh;!<_dnutdd50UIlcc7 ztK4IHe9pkGu?VMRMTyfL;ut2SUyw!-x>QnEB+@uT$aTsvA@)6-yBmxIf$Dh5`k#Ln zMU=R9^A@e0O-3TD-8K1i#c=n4_Q5WW7;`#_n9Mw`-MY!0zoC+@My!(H=5p1@iM3fXHGoL$e)9 zS*K>!p{Q6)rmyw@c6#jG*umb}B5pKTmj!O>;f66m8loE#DJ5Z*p(!G$6MUGrw^a}|kv#3=TL0v=%S44V7L(&mf8A6uh2Q#W@g%ZS6>jG;lYj9q@jib{;aySd z4Um81?@+t>24Y$Q8NwzWdh<1gfA`lIO9JEH`!21I?lTZ#&h;hsS;DL? zA>QoMa15+GBd=mIEhiT;ve}GI-(hz60w;=5Iu`PFlVm={nl12?D@t3W>@<2GGd-nmN~L0pvW>MVxc+Cqph1ae?K^UcDH_Mgd!NqreZn%s5M;{B8LNvCk+*_0#%kFFQixHd zRAEA`lJPG_#6?N$CUj~ol)TB(T|rf#D>{`RVOkb?&B2coOj$rIE849d3(dlha>PPH zP7B=m71})H(l4mjG}<4$g>h}40PvPRVN#;@hsaS#Ilscax@4r(kmLpm8S%tH6GV!l zLMTc!QKoJ>%;Jpk@d?#*ilBmD3VgVK9aocB$s*INysrdeZn^EP&;1qxIutbLzWvqpQPkD$VAKBXpD`~;kW*u{~x~ot3Su^ z)+SG8bF@JZ%{Hl385he1Tk93ke8p1qSwA~w`Qjz3EFcj?;wYhI8{GTaSJ~OSfwHlI zVbn>(IqQzatO-U|&@5F_QiLSr#^x5~$(Y$>f@Yb_XJfWnT^vK z8ii%^IDCm=TBNIj@zo(}R`J%C?%|6G!qXn(hXTWXm-Xb5;N&HRzvTSWoUPuF&5Z#U zi%X>Q31eM>uSi&f7QR>zHg)t~gQjZZ=?WqxtII1`thv0L@nSq>`r?>@VdHvhO2a~{ zDjJOjl_XOXDRb8)3qqVmoj4ZB=QH&2gwhXiR1L9uH4wx6^81*TMB#3wc(Z&8&M)}TZ8;0|luqU?8=kA0HZLk@H5%^n-IHrdLjQVLW>tCBQbiM7Tj&T#lg zqGmnScokES78UZ(*m3T^N$GQo?Wt|=`7=vs_wjM9gI?1+e2w zXgKAw)*6Q9$8gln+CR}Qwb%L^Eu5zBfq#J$YP-6<@qVW zY{lpQ)Tusj~MlR{qgp=hJjbWX)yIb76af55` zzr}ebkZTIr<%kX2;Lb07$n(C;kv4wNJg%;_)Z<`Qho9 zw_m@8Csf3u#Ims_?+$3}rL^C^!S?2Blx-VJ6MIKhjqCytNSoH>qDiZ_=X!^Q3j^*QtY(9Ei~GnlZ$1QS4bv=WsHpW*Ur5Esrso|9Pk&vLI{FDT;)hr_3DF& zC`+VyPFj|gplD0iQBv)4^|pF`xs_dAvR+KV^C{hsdFs>Y^}rCY9f@#sj(2p1R%)1y z9<|;krL7=~5|(L@r!iF;A!b$7(eZ5XhHHqKk8sD#tVo47)*dZwGsKNTnL+PJ>Dmk&~R&)2Ez${4xH~F?CrX zGc4ZwhkuuPvw_gm>9$)~nvJ*7MYNmb=Tq89s9B0GsYG*^uGON9LrhVkOas!@3R6+Y z^Nf|Zf~umXnPfps6$YHWIAgjB7;YWl&s?N1#Slx%C?Ih|%)KF1zeQA4*oux>3S@Ca zu9Q@9fu$NmMM12HjK?Fq%PBj(Awitd`P!Gc_V(Mq*<5?;9cug6$+}&XgI#i0KvPuuts0`Y#6Nn;>hywI zr%BnV(TE@w1cEq4Ld6$F?)|-AW&8CTOwLa!42hW^AZHaum=Vtw?C)JemJB}m{^wl% z;Bzh?JVjjw2+K8J{P0tvH0H*ecaa+w7mr>to6VSvCKO3R86||P1!bI4r5Q!tpwsFy z=xu^nLf{jR#}s*n;OOi*2PD1^w#G^o$ZZEo0snl$c5{FyM<|pub&c`#0%@~OwcRA3 z1QCRJfRdL`=A1l#j+UfUe!w#Hn3e@L5?L6d2_oH%9<_EIfdYR#W%Tp~-gu0*(Lz5M zVDD^@R~3;TV%Ka0UFDDd`EOCo=g18mrDf4~ns`Z$-fkn#L#(_+$`T}UWI@1GH3U&4 zE6b{sq|(rg3EkfB<^BF|30CujLP9D^1ocmc!dCxbW37G`ERMf+KzrW$ugro5$SBYy z1sQ>g5+s>IsK|Xr&0FXjJv2cg3j(~r#n{}$ zR8)#2rzi>}SthAUDhYH`Cy0H7tUxR)T-RmL>rxXX-0>LKT@dHcd-D$0zVTJ8ojo+G zjq3)ufrr^^;FJ~1XD^sOeT-0Kl#)at>*#|XO1Dj=Xh^C~>_wPK%=Ezn*3VyHl_jAc zpltMb`|tfCNg5#-67FQm{BlO#s#DiYR?m)*8!AS_B%CcMa)?xk_V$1(3RxT>1;KrLcMiZ|R_|^Z@{|@_|yS($(J>2tCp1*vIvWltY5{_x%9BiO>8bnK< zvnOYWsza~S#FkaU$%L~}}?g3Gfp-fV_iRS0QHuylz%pDN86 zymcE#v#~Uj`C>}pubG{mpeQQMjXssCAPG4&L&uaY+Ij;sm6<(1CtW9Wx?A|mjM;RB z)$Ou*?@fxPLn_JGwHi*C5(FMunQ?M{!hAZVNK!;f$P0w5q~SDZ9&97mO~#{3!pR)F z07H<-vjnMWA+{T6mW7y9n1z58WIX=lM?|ABcQ!Y%`V9vA+xUw$qGeGz7FC=f-t3V# z4RTvSuUo`%L=wj|nq3504`+Gt{o3_w|9#c%eW#So%8&#ENd%#!6iTG(-+3JW3DAE= z>$Urr?x6m7K}u0ZMWo7evOK2{Dk?!ls04%(oJvh~Lz2ts^sUQ$J*ae*f!)FCbd|m5;r%!^XSsA`V)3d5Am>Fq;l*Aww`#x{Vsea*ep~Ssb5XHF_9>9@Wkk z&duwuT6-jsGLM;$F3Dt#eyfEdt3+A)Duqo`s3^$e7|-`!(jR|G^LNPfoBJ4nn<2Y1$b59)e?#7bS`; zLz=>T!Sg@)7OR)f(NqODiKuN2*?#v9qN9;|F~QhF)C{iQx=lEqp-2VthK)67Qm?o0 ztBTsqU0T3DGMYwpj@v}WC^wIkjXNcAY)nnyGX7Kh~$fAYlm*|DU^kPg}E(qpR3{hlze-~rWWB<-wq(mS% zpR#-NH7eWWVm4tsn-DHtYO;o0!u)DX?510AO=?<`@%#dN(4)&u=F17$Y>7Xaq0}8R1j;nRlyy`=BJ!5l z^%l#+GuE>SW#Qwm)=1MCk?Z4E8J*i*6hkK~3sOoVQp}o3BbPb5{~4pl_gP*)kd5U^E~#nlCii<?AXP+!ZjCUBnVeqIc7PHesYB%;V%aX#6@Z1%Wq>u#>;e17&=a_}a)~&mw zOP8^~AYP2HOp`Q|FgLEz=xmcD3BhE9RmPZNi7%!EqKqO6q+U*-E^xAv`@i!sftc~` zd+#whJEJT^R_EuGg2Ya{!Sw8mQj{n}o!v&8<1Y?5`}i@rVzVw`zu)8Qzxpc-c6WJr z{EW!+=-PGsFl1+Y53Swg#pM}_Br_0olrkmPDrT-nmPRysZSuB*VCo13tb-V9Z<}pf zXZ>$JX8QOAN$wF#1qY;QCkJ<<_r%os(yu zk>)OvT(a5j@Z{)-H@@~|^0NyPBg3~;%-g$UUd;0GA+1gmbz^|CKcsW#Ch-@KSgt&z zFh4n+ z2yxFY(25FER*{-@rlSS&WP#dn82!ojIk*=Q)O0rG8qs=9nu90g=v9eQGYKi(&@sNV z@y1(!h;EOhGDj_P5+Ok-1yorZ$!{F7c>lJ*9_Jvg1eFI+9YcEl>L!ccC!b4@7wTllBvM3TtHwHpjx zdxKS(A^H*5WP?c5IGbG2GB!}6oYVV{dG_fe7RMJLz}0j{O;w4~95YoZ<_X4)9+oB1 zxj12UG-q;phSYANH0x02R8>K@R-;0|o3B|uc|jF>Y~I@9YC6H2%@A^E_xdP`!sX>9 z+IURsV4uV`iNXZS^_bs(gdB%xRe`9gRI*A4XrhdyDoCQpu+=0^QTJ33_*MC>$M)HDP42 zX2G)XiTsG3>9En;W$mQM#|uvX;M=_OOJ7FIW9G|C7MEx2ciWha9`4mCrdm;%D(ej9 z%LR4SVwuAWDWQ$RW~&dj&bmw)I!!Xo#1k{@)*e{|<;X+VZMxki%li*G`t(!Gj)^op zfFwjrG;E_o&9>0uiZv-|nWEPX+#uleho6yG8M!4edvQUf*ZGazyBzz+bWWFe&kxC$ zE_$cM%{#C2#?O6)v!e@yvlHHZ;~L)b67|#Pym_$8Vq4}b|NH-n(Py8b?cZQUPU?qD zKK}v%NLvniC8Itb5k0+NP#J`|&pJ&>B#~JXFt0!{HN3#blq>X_jjWVJUO*;_lmeKI z8U@m;lcs`%YU?boW;9HbDE81K8ON14KD$C|m?W-CFrLD~<;Cy)A>zd)@vey;Rdk&e za<7H3-QhG3Sv@KdMoUhg9OB%(&fb^5N+LiMWIVYT(|Y?hwGVFMOvWT$g!Rquv#Zq! z%#zb&MVKb^EC*3936hxA%Oj+IpBo>(hgfFJ$5)tTm)d5BVo;~_B2FJXL8zJRv^RM4 zKl~1F{e!;=-`GYiW#q76arhD`iqJ}}LX=JqUVr0{{CfTKB+Ze_3`5r_fJ_p26@*iP z{@04U|5^H}RM4XM;|$jFFRY~VB0!Y?6xb=Kl}LpG0)%4Dz^%wM1>b6a(-`*tRldBu zB@{uYZ}kL6-N&8GaStCO=rPvoyX5sD>9a94rNO1}5-E(?Q#CFxj;X0Rm!I9oR&|tH zH}IdFVaFoNr$;p3f0IQzC$dXsMar<=rn~<-y8Z%px@LWJh<2$_DFR`$$-yuF8mk2C z(S*}7q<>?J#PunTrz8uPSSZ=v=~8z`ym*{2lq30A#HSxE%s zsBwT5*~pfLZ-{h*l#wE$qzS_DG2yp9W?Qg$kw(1v%U@&X_Ul~g60g;_2uqRRZl6`l zW{|6_kB`u!0)4B8znb73{fK&%6U~-9IK0H!*k#bW!!ld4(;JY6A=A{w@O(BtKW2IV z1=E+O^sR!$;gYM32EQ@9MQYYjYHgyuF7nY7FO5(%9b|>MKSzsHlF@?R?%S}}Ci~VO z@}qzA9C=l7_R+^2KKztPnA7YvSh&wAp2ZlOw=s9$A@tUiCtpw;J|mu=u|lDrWVHJo z1~+#pOPE|wFV(f-Utqr7RgGx0KTNUVPot}_CcuZT6(YJ52swD1y@IIe>=Q|uOF3==_ z)oezvoTG{YlBiOZIVmM>n9v3sStp(?usdyPy3NvCvsjE-9v#sUMEoj8F?0rvYebn$ zt{Z4uH3~y#sl*`WROeUtM@PsKeE#vrj2=IyDQe6|3A=+`PA>wKc|>-x0HL5PN=`ri zoX{O1K7Yxu(L`*wp%jn|8~<~U?VTNh{yTi*|L_{AQD^?}d-Sw|t%-?RH7H_*xK<&} zT};QI{`PC=tp?u1L#$lD88(qrn|h`oNd;xyhCD+y3a(lOUw?O>@gIK+skVXh3tywF z=)@OiM2?y54qt!ns@>1+q5w$%Nv9}YF+~+#?Ppc`zu&s}S+F*Kte?szA-sa`Pr~`% zXM6nkZvbRLz*S0wFhy78u!w^jN)TVy8jg^J3CVgQ1hX-+ZPU1RodO9Z%LrEES39{Y z550otXV2N&8Y0eJmh(BCVIP0Kr0mpb-`qozMHD~8tOT0v28v~(nkKnqqS;Lp$sh`1 zLU+aTazr{`A-NvY^9xF`VtZ$kbmcQWIY-xY%w88`&?l8NWZh)1)2AHIc=`PwaQy5A zljRz%)k7Fvk$d-w+wZYA=ewEJF z9*x~?6j{gY_E0zaWF@FkPEFFOWCaHuXk}y*KW#@&0S98XD1)Bc$UMkr$)f-DA}?C`<`KEOAdxC{`0XRgN02iINpd zZ$TD#OpZ=@`rRLJaXLoa+U44>{ydLIFA?K{zTBaeDr9GuBqF4uhT7~P7AfJ$5wiym z89hHD^dowEJ??(}tF&+3K<+iMJ9UbxBn%T|Nkx-YQbnbI`xNx{%{yxEd`F=6cnv20qh;+3=7i8+47O5<;j6+J{Rft%>*GExgq9jC?Wen3`wRQ=7pUc?{ z!!${XlFO?rYV`*5)e56tLw77BcZGLxg*zJYqfbBMVzHuk{T9w}524XxaO)25|GmG5 z^VVIKRf#1l)CGyfe9R(U!gP(@s1sx-4W*qYQJJ zvccZo4zZN7ib6J;4LZFx^?L3zpw} z!076Tb(}CfI6$sS8g&cVw!FCB{9XNE?{`E&N`8_Xe-^m^3DAFqehlaz>(4^@-**jA z$`z3)pa&&l+ZiWG)Ye9;uZXs4X6`~*zI==y#q@5yMrm2Eg3lA5&|Q&&p>#zlXiMi!UiOcWz=hE%K}+UVCVwLO7c- zeg2$c@+yk4)^Jc2h4aH>{KXoh) zxcXPWMdo^>rh?LHp^FA_p5w-A;`x+~ROR#UevjkFPuSnu<;?RCcDK3y)vu!1O~NXt z*&mQ-GOIX2M`8T*CF_+-t=~b(5~fEdod581#t)xiiyBd0(b(Q*^Tst4$6;NSpsD0> z&MFAd4>qaaIUuWBFkN9SbJ94+{#zdqx+@w2qE6{C%6wDF@O36rX^FzIZBo@ z`QioI%A@XXhDotVOuUPtP^qP%bYp}Du!^4k1Vf~#SlKT-A zBBIk^YrwBzsbJ!bHF+ak;lhGVT5eA80_A{Y_^FgNUaKEw@Jfl zQ>F>7x26(B#7dwFLkzK`W-2&;x>ogekBwWmh%}uHft~&ag&$#-0fnhkW+i@+U^eSj zjC>yN4F8$c-};eI3IEn){+|+p^s@x$pQ;D_A9DQ{DHBR+m4+mVWU^XicJm`iF`i0m z?*pj{Wz$>ZRx)ODK%AGYa*x)wSyZp6@?-NBNK6d@DMRC3E~K`+oiEFKz2(OlR0TP!^$HeuNaQ zD3gRdjw!^7{=pV{&moj^M7znsJ6}f;CE~+#tT03{45BFGdS{3EKmPj!2VXGx;t5)_ z&g!?nLzv`vQHXz|L8nrA`TQB)Y=)+T(rF^bK#|kh-=N*<)9&rD`oVL$lboaTr-aQG zZ~gi&GWz}Bp;`r$u1hoqte?sK(uSfjTV(D<3=8$BxBVKg0LV) zU>W#`S7!{>8q2d2zV{~|F@Exbc3IJJByR0q=f&AeR`VJC{T&p;q}|=-((@VIyGw9( z$*pgEgU^>f;WJ$o1WR$2xxLOnGC32@r<4f=0pP!&aDYlXF+;z#zk|Y;6e0h!|No?J?&3be~ z^zsnNFbS(1c@@xC8idgjPlCf*!G~&}^kA3C#RzB6t42w_szmi+du!)Gg_OfzyvOyw zMEy*3ar|Z1e|7@+kFN`$n^Y`ykvz!J&F0HuWAL5);pcCcS}ZqIgO#8Xg&B>8i5{#O z9lxYGIKVUwM8zReDtbFz^g=+>>I9<1!d+l=n{+o1sBJb_UY#-#WO~C*?CovBQl#A) zlEq`Z*_6Yxr?i`GhWl^Qyz?5<7f*Qn(YNWYLjvEYkX2f>7LHSA5rs^H6)#>qXIl~I zZ*&mbJ=9tQM1j%a3*V%gg97RRb6pF$}6Do93A(~HEonBHp3ccYT?acwr zZim6{kd%tc(^EFASCvJY$Fz(F%6dWDk|@iBc(P=D^pr+Yki{=D`lRCNdtM zqNf#|H*Zte8tJNz>Da8-E5gx;p`hXqY&QSaFR}kOet~?e&e8b4<4+!bMhoc8dU%5& zLY!kr8W)dFuM;rN?9ycw3|&j zJKJpB*k|GU40m?fXxGUCkHd>YYPLlltca@wKU|WyGn7iAs$^Qq20;*$=C9Hkvm(MU zR48+rdjs;56rt{5Zf-C;yWrXBIhYz{Q4j+`mhg)|_aO&+JET>CAj`ygiswe`?(T8+ z?1*U`^7Xx6$Bz>uY zs&sZXG4?iS*cRUXBaUVhf^~o*X{^@)xfdg%(73rzy4yvbx~%Ia?6q){DN+>El^wQf z4IbbBK9y|J>UXGX8q=pQIsE()ei)s%DS&9StuS)Jy}lEGbkAKTq%o z5rqi5$|%#6q~>7$|JeJpSljaZz7zYbd0u;-&V28=L)}|*6=zZ;B}$Yn%dNKEb~}lk zpn)K-dCgl8AjngYJOyYZNYZGxa=!tQCn@YJSALs zw9AZ|>d@_M5Gf-0poVc}fNj~Bg-qPAQ5r2aZ$4WYSFTQd$^4`43m^L}QPmFf6h!Hx zXP*8f{5%o)&!qvB6;Xx zsR~LO;f*hl6`fKvNWzrx_>lDU7_q1T83B) zr>5(qaZVCfbieqExEbV=5&r0$JPN3Eg>V%TK0YU{8~n;Y{JS`vCcf{H=NYP@aB*+| z(>a!Da&|sqyS+iOxLh>S+jaC@;QU)}GJbf6>G1_+1=f{4>MuRV?q@!Y+3g`K4sO4J zqN@nX<;`sgGOFiO<_Tp}qf~5+LM3X}NOXhx&3!t94UFvpl4{`lOA0TdNON*UAS?I%cJYG}89`V_fu5Ce$k1lo!>8$ zBFiX|rN7vs;QR5P2>M6(D6RR!M$ZU>fLKT@tsFbekW7tP93u+^M%ya$cMoqiwzhVp zmQ|^WAV@(1D69k#y;&yjO`Qrq7^7;NGg4rh*xZa4%%Ok-8D ztZOu0x`8noBX}|XazQM^QUo)o3DPHd*chP-Fk+zyY~oAjtRy?d@Kyjz_1#u z*CDHmF|Yr-uflZ7wp+vLZ4u@fNgh$fF+~_+88)B#{1;K{O%%sLQ*_EOM?*rcMCwkR z$;B8|k|__f;reGk%i{PEJ;Q~5y~r!+p|f}OUqvUphgD zVelvWA2w>{z5eL;zXDWZfto>93gl^tD=8S2EM!5o%r|!2+G74vR#v)d*+Q+?7iQBb za#~VJB5Pfy(HT&r32wVi#+`%?eK}KlT zIsM_=NQ*VHs!&x0dKi&TCY%kAsb&$`mp;j}fAepX4VUCf%I56>9o--quZVgz%GDCh z_mQHQAWjI1lJ;O5RX0(d-r=49_J5$ZPFQ6H<2*s~a)hymWB?FB@4gx|_c}D|4g54k zsJl3u1B$$)Of$-|;!IO%#2NAUgtbx9zj_UKoZx@|4)J<~K3o#@>+Ju^FEiM@PQS5% zVCrOIh9abF>Rr5Ojo5TquYK~1r$ocM6sCoF;}o8$jx*}(0Jq9GmqL6mq9-@W zJ2kw?7)i*f$tqXGCU(8WgZU8`kKbi-aDkfp_@_sBXCroBd;$A2FQQ%DM;H18Z@tCv zo%@_TKBN$!_44!7UwD?r?hegf539RDIvcZidJkJF5oE|U8KY@%Ha;RHp)DC?k1mK- z3*@!}R>igJH#s?)vh&GLvHy#|$jmgzC53*i&ZFaOd^=yz}S?vESj^r(dCpD@I3;F~tB=N|;WD1W7`7 z^9o5;A?OK?YBD{VVp&Zp+rn(t2^UM0u)uk4k6?U3zFbo2B6Hs-TPzTTm{B$*jYTrm zV6^r~b675y1YU&OY+<(=go_xf>3}7ps3Q5&BNHe^;)+UF(pnag8b*_4gN*&*P5V% z!2iI?`NO&kKS=Hn1pz@6|MW``1Ox;GK}ZEjiu3X5&9un-VGt^ESqZwPAW0Hgo-*k5 zh`b10lTqXfNdQBV5W|RMbWSuLAtnOT;fUVm2D)pq4wmFqPLw3rs)<;D5k`nrM%6Sa z44op15q+O{Iim;*KL3yY0j6%^Jvqi{=(M-Gq)|e>-ofcK7(RMLG+%J-+BG!GBuP_R zZjEp@<9Gh+{|9Ce5c^96wdCsN7V&t&WU*%B`5RchCWhnE-`K!3EkZwHxmq)w&e`1A zMUxfe<%;3K6VO%SBx3aNF&7W+6Nhsas}-G>o@M9d7tt*jQIQc;0kKGF3KC;NiXtYO zt=N)l2nR>ZAK#<4yGiTi7ZIj2%IS=FJ!76PNTeLMEYW5w^3j;%qZvUIG1%(i+}tPo z*i9O*JckkqJihl7G0AxPgS)s5hby0Z6?wBsxL(l|6=tVL-1+L)ID7bzER5OQ+u_E? zKSA%tHT1fRsHsG2kB*@dk4B6hK12*Ns+Er#L^KNU`~|vZQi=+dqEHqELQxVe*9eGg zKlcpi8mi-9x(=qMaej2j{dewAR2AYnXK{E=dOXEDIOpV@cgej7*R7M5C0<;yedP-G z?>}I8G(;&RHr*y~fAgDc>k5)8U?>ujqLRrb$QELrQI3!B9=%C+JfaLDTv;U!Vh&eR z`q!?awVEuOI@#Fc{PjCz<0+DFz8naVFv<%LtLkcM)5i=T&$U0t-H`319!A;B`H`OH;T%N6l>OuN^{?lsX& zi!jY;+A4!ujdxyugT;8v&c+7W%Hz=w-r&g(zEAb!5Ge^cJ3m5}K#X&;IH$3{hx5X1 zx*Hwxvch#7{FO%%XDF({Xt}~{vISDv9dhdAvd=r|-5%W&!KNr%2wIhff~R=yWKSQ__P2)GR@AHS#<{ zxL8ommLydUwH?a3fn!;yn{9;8KhNNW=jka;T(^s)N!XHxVOhkkicvGj&o2-cOAbyR zaQ6NCc+)9jSM^8dr8fk-*aVn$dSPgp*9 z1Lfig<3&i?)CrRWtpdY!5rdS)*@&uTks3Dn*_cjVB1siur^e2$o0zgeJP9b0fJK@B z6_PBYsTxkrC94XqT)W2hm%l`_(?OMWM9o0y4Jey!{0h9J_fM&{ALzM=M1?2EsHp!z9QD_lpnoiJyx&6i zBW@N zu4C&8v*9u8ixbl6nD}BuI$v}4=#X_$@$4r*MW$+0s)8sA1b#$sa~E`-)p}04T$0Bj zRasEZ7x)jJvN}1X1d>8vRiu|usd>TG8~c=|j@@pPm*7p0Q56NLtjPV4R7t|p42F{#?%p1^zWinC&pbn#`m8*ka2+r_K1Ejz_V%wM=q95S)JcoAKedGzKxJo&*7={4$PVa(R^FSEJ7PgoX2c|s8RXkvlr`NWek`YNDbcR8Jn zS&0JeZXNIF0Y~3?jm0|$G}{{M!vjPwBwejp4;NIGjN0$PW|z%pUZmBjlPu>1>m~J8 z1Iu)g?FRiC0WXQz*uRF+Y>-P(X(BbD;>-)!eDOs#cdl^n+piN0$2c{M!Sy`?RmQH> z7>_4Nf=E%8bo)J?d*v0bJo_B^mP5Og8J(OHrU`YYiM-t>>oqt(IAy&Yv2$aWU;D>@ zpKG7{6wiGAlQ`FRc>b3^Mf>(1P1{8>4JJ_trj4wdc#An=oS@4xdcDWaXFiTtLN)V| zvJB3~v=C_Qv}k?lOPs%Z4{8w){Q>2~u7l6&XbyQ)LlGmf~d*vg=SHAjvAGu5$Y15pRF@+cZUq zvfVjTZ{Gfw_Vru8qo{fyL?w9{QzV@l@w)(;+Xzww#e18tQo4(L#zz3EQH0$sem6K)LJ;EP8Ru;!J5ijk}sCTbC2o8 zjP~a~fz{tYaU8nM7OU}sw5Zs5;RQxn%3^wqcQHl|a^_EuSiJLqTQmLZdZgX*Q%yd4dUaR4#I#1rZLpt{;(+sf$^Xd(Hy*@>dGP{_f zbUR%C)i0x8e+H+wLy-ljib|EGgewmb0o|>k*PA4W*v$q?tA%3O1j9M+e&=xK6_vO44?Rizrpw3d5h%WfM5H&zl^VBaGttJmqj@G|D!E<(S9HF%ye1=7G|_gbIf-M3jjIcDSLKEkyfR82#yDu@zjy!QF7pTgBvC{X#2+^gQ2~l(B(`aKNfe1$91Uz$ z9uURq$)m>TqgV($CoNr9Xe5GM$tNMUMN{XXTz zG4q2n(&?JhcOMcQ4>8jcUl0+t`aJi!FQ6+DsgR-99b!MB+3%Cd6=I$uYXSBb7OkM~aPM7R|@{=^5eSuQem<%sCI69@VwZ$`k<5v)SJp|pRVJhgViYiuUibPhV zEY==Yy@4Rf9M7f=HM-kZscmdh-`zq)q#DkV$44xV z4vBTpY@PJs0ma%wZdiC1GsHq9aCF4YHk#!UCn?=dhw$hEaXx1nMTn}5RA@r8l-BSbu>qnHR_Jd_x|wf4Bxnm z1teL_=)n_$H;%BSoK~+vk!2{AOsC#LFDh6p$Q^@DZ^LX@VIk^qv3?|Jx(6|32jTD?K5-)HCc3k+`F!rbVh zcWSiuw~(7HqPsli4w|YU=1|26WtLG?1=Wx4=`zU>YdS?7qof5%QDU|`4EC>8au^ELdR>;+ zZ+)}>3!nf0s=eK>mq}Sk0+gyiB?+jN3O|8ge=MJV*!J^;p9w*KP?z9e2(onf9u>%f zhya(9daFyq_WcCQwSpvz!#oV?k{|9@>!1&ExNW5C3FF<)uhvL1Sx+iJ;Nh*&%o9*c;o( zw#DrHoblbeq(@J2%Mi;b@Us*_F)(F~<$OvQ`#73GnPixfgdhuura>%0e`7#RR`~uO zeuGu$BMU0EUK_jDLb7c{RY#I!B(X#+GveurnxU||7_yv<>9}>`)td3s13IRGv$@ME z&Pd`20w1MHkfajPG$<5}Y&xTeA{vf`sYs|o1zE=E9K|!i2wDxwXH(I2tn1)`* zthF(EJ&bmX+RhcUK_6$(q1kWIY}ZNB3Pp90ONlbiL4ZbYgHki_%8GisjcMCxu8cGu zGXKVFjDPTeotIxhc0E)EVr3MUd1m6GSR8MHWj`L4yo_lEU%xM#3M3pSueBz4)+P zj!G1utPlW^%l)b>5kwJ1R-h6|s~n_i*)sHG`Q)fKeR{N~YO3yT^r~n)7J@Wqa=^k$3Q7jJ`DFqurT zclWsYi@(GVA3bK%G?@o;%vOUd-5u6`#4KDOCm|Yjyw#HF@B|@=S$ICzKlK@QzxX9C zOoJO%gV>d^nkM36Nj6;)iC|pWplUj>49TK^hGQZLC9CCvVx1REg`AyFynsDuqp2eM{T_8yVH#!Bx=pU^@1s=`MOdI& zH9T9vZ|KxLiBwZ*?QK!!B`0?u)2X#-Z0{nrTIfv|t=A)v6-ueXG9)ZjAzVi2vV~f6 znJp#=xlIzh+rml>eIl*FqVaXK4q;W{iaMfAZZe5xF)~8OEH?T`p%oI?>(hVL{z&&_x20KEr+C%xS@CO`Ua*@VNDjC zuP%sBFDOpOjK1+27jM3c+3OSK8D>@?ce_k0*eY}cS3`Cj^hTGK(LxDI9^89CSj71L z8u|1BXqSU8U6KwjXgD&n*$H|YGk)_v#x!R06EAb~ zi=Smgj%FG7XQxQZ1ttaa*$8P76EEkakx!Xq6w8zB=TwP@l_fZp%;;oH z7RH#QNUKwXA}8=Y;v}UMRcg&H!8+vV;E*JaSkIO;Y==g(&EvyE{OOYQe9b&qqpAvS zOTkOl*zGp;MjxS&X*YW0g@`Dq2w6tq`>cZ*qL7oXR)}?zGR@H5J|$avyz}r~&hI`( zD`D^EGc;bjh56YRSsqPD=2PmfizHTLnn-18q(R1JV}m>u2vm=Ca7NSj@iZCt)1RX3 z?J`mnI#z@2K?m<<2eGJVO=8Akiv96hByowdC=l`~W$q(K9*f712qt4vNu>9}Ge}z< zOjjpM6Qr`Ztguy`d6c4CD&cAZ4TGAilgBZp>EMMa8Va>sBz~5m!I?;TI5@jfPjzGpDoj{q9ts-PW5%hX}H4%#M zT>0#0|An=8^D9y%oeL6`pnz0Wml-F5LM2}QlKwF6_<58teiD8L6?DX(2*y9cUqt5k zX+Gdw2GRm8Dv(4G(bW&kPJLb#m3{j3c%xY}4Bcu#QB~!7AvEOzN7tCG0@P-o&Xs*E zLq}1iODkVlQl<$-6p+UOT2bNo8H?G1vn;MY`z+)I-fBssQNyqd zma7G6nBdqhPR(I59wVk1HAB*3b*@S+-hhsSmPtQ?Rm95=9 ziVBjfM3NN-gH7yaokbE+={lmOqALpNYJ#|4lPs15!x=5B%Xyq~zFspsn=+kWFnsWo zUaN`QYhyVzs+tX|hLs3xG;6puhvD!HMG!AP14UuJnvzv9<;g=w+<01g^kW8 z_TDC;D6lSaoLY<3!3E>Mr~S%JUKhttS$NkhUYVv&PT>!8(KimIT@WAZFRLO_=# zGy#;VK&eWEv>-|{ywIm`bQ=3RbhfuBvVvt2ph+UhdQHQ&&}13Muy7oQ5~#|ImSM9# zJm$_Hf0N00h~nDV?Jn(BhvIxfoaSs?xkBA_SxrZz-jXVh$)h!SB_ntNj;bSSGK=|) z)o4ahDKvI>Nk=oX(<#Hp2h8)B+RM*Sv|V&jWzX)g7#)+!IfkXOJUGUWBEr0+y}8A+ z|L{L2>F)8UiYbB+%?r?6gSuv5Clwd#1zg!-=lV57StrgbYP~L2qrrnGPf-k;PyV0& zkL>L1@O%H)|2y6{zKUD;_)>=McIdfVq+J8u(5a+~G>xfc6(`?)6K^ub>NTY}pn@`AP=xuG&YPBGa zF+_#*M`Je15_Cl)4nxwUfJ)@?<0oKSY;0~)78OYl;+QtQ!4`_HBU%RC!8V$xFda<@ z^NjlL2FwB#H7(=$H-Mqmp%TaTY z_F#vi)1>q1mo9_-zxf7k2-7<2U56mn3|5NYzmwr1D(HaY@H}OTW4|Tl;lKLFjJ+wp`+xX9Q-0%H zJioU^@5LL4-8OP>gA1`l(q+mlXSJG>uRYSkGY(ho+1eXd77gLP{aXJDNrGUAQPlHg{D%gxvc#V z36a3_@YWt85{tzWKZr0ldTj4(BW4BRe9d??L6jwA+d{D{R&jtP2#khjhv0HfU~BgZGh`aCyh88xvjk@|j=uWuXs!#&mQAV4RJuwg2{dwrlib6w z>kLniF|veYI3}Mi$$byU&`4vS^6JOf{Tsi)P|g@C8Mf`9=OTVt(yn)iMG>>vLEhZp z`WHXP>62roKYW02Cms%DSEuqaKNO1H^0lT_0w z6^%l^++@oo4A+#)B}S1`s3P{D&G-MsZ}I3~{4RA}N0lWkLnRj~6w|=Z16J{pLM+^F8-y;isW}(Nk*Pfwa+I;V;UnL(u zrR?^Yt!I>$hP}0e+UZhN1%94jot_XcSG@b$_sN?&-A)r*5;2O3lega?_d~oq;(WbC zo3H5V7V&VzaV)SV!w*xkM8)(oZoK+QzVN^PUvcyB9QWo8;${#3`~@%ci zW9pyzIOa|tX97>Y_HD9UK<{s2T;D@#yOgsGAujpmZ~o6b_#gg1c!xu-Z*_otO=AvM}4u7mp{pLg^5 z7x2r1YIKeiB}D5GNe~f=5~GsHRDrTcXoxadQm{BWC)-u2I$dI+VE*JWl;DUWWg$=` zIkVLQKhCgRmwva0ty=_wh@>hgib7Hp=m^vrb)+&t&k8oB0sGJ2V$g1qB>{SzQic(^ zqoT?xYgNP@G-++_kDfzCB@jov1~95(mZFG1z2dvVujPG)9P;FPtHk>7bq(q zOEFn3E*OqRRJO|Ir|JmZU4-cjEnQKoRD|&YeD42K_%mtbXW6eq~!OWuAg4|GE4BuPS~ff&K8&TG0o&H{L6K ze3V5`5CmpQP7MvyPbkF%>K2tQQ7$~3Wy!Rz9a$TLeh|vEgZZM71~GbB zV%J>q)s##S$n%^miHZG)JPJ{&9Eu8b39Ht{9JDDUfoQoxwQ8u18eO}G7yF2sf?QT4 zizV~Xl+|j1A4j-Wo3oQsl*NR4vw@Nd9Nd4()1xs#mT+xrlflcc63G(7>6oo<4@*** z1wN`EqN@hJK4*0Q0o5#Ic6^RrR%H1BnW)h0G#E|BG`k(jvSN60PP^5nv%QUyMO+!| z@MLtz`0)=hb_e|Moi|Yp7pqlcc08t=Eg3$XBijYNm#%OTtg&2;N-cQ&+8-mfB(6OB z99p-B7ca?AAwQc^Jw50A8{a|71D^Zz4Hl;t6vHK!*2ZXU;3Wyh+9OmYvT()t&by3G zPIz?hT{@b9p&HB*qTo@|y?T|960?M}<1T}l_X%%(XB};vrtDB^8Lf7rE{iPe^FTBdpzx)Hn-k4>T zl86!l5a$(ADIjYmxHYIsl=5;RJ}q)&LqQZpyb=%?e2!5 zAUrbM#@(zGOGTFvC=jX~kUzSS?cc|``*Vt)Sq1$U3G4qLvi|Y$A8&t#@N*Gal28szT5d zatz25Mw2rH%c1weGZ?)d2oge3(du+bLw~>lOKh&&}ta z=k(qi96dh56kSBiM6onBZeL;h`aZqew>gg@8l#4EK&1kG`4rxeEB-_I6!ac z*vdy#5AP9D`)1!@7)VWHDVy!MppI*@H(&2)y!3 zAE&Hd;NSi?|1UbLfV4U#%t~(j%`dW+N(4zni~@#lKIDzx`F%#yIUbZ#jB(3?s?5nmf!bD|`FMh<$^?rQL;*#S63QZiC6hT0 zO1q2N?xW@@wc8ez=hOB=0!g9D3LK|KtyW`rddBp@6Gp=edaV|srVxf9o%RNuL7%)V zF;MZdjEf**kP8@27pu{y-D*&lIXzLOh$0GI#-FWlHHn69Fn;oYcfRsF7?MT)%z#KN zF$w`i5RiftKaN>Em?Ovz4I#%{EtoDBtkwmAuCnv#kF)>fzeSl(sHwY@S;f1Lo?y$+ z8Ehcby9h>$YMqdj6;e}1Tqo#9D-2Dg7!1%p`68X*1aUSY&7#W(Uc4k-pHZ7Ss6s@P z3CIGM52h?ecWq=%C7nzWvI0whnyeGL4aOQcQOWS_L$o--;Scs!!ttx@GUk|>a631kXoQF8wHG0QL}tiW!&=}=c>HS0`Ntx5o*Bt(@2 z#1A0nzp9n=&%A zP_MNzu~U58AB{UvDHu|gyfh!5)dj&sh~vu^V4*^kF1r=uA|s9iOw~Zy7%;eb9m#Ph zs3=7VLpPbnF_q$yn=WEar`dGT{DjldjLpq$a;HYLIK+!ZB*&uB>te(vC^nU5k|U7W zeTM5C(J3m8kBi|Mo421O6+qbAN0l}9Zfd-7x@7apEpB}BImW{Y@$sBsu_9Xr zEKcTJ`O;@`Ub@CgC@E%3-eiO)Iu>et!$ z_{TZ6DujzU^MgaO=^O*FZH+XC@qA8S+oad)F`JG_!U+H57_nKWck>pSrV@t%bt=Ni zm?{lf=NZ?Yd!EDN102&J9LE?@fo`Z&x=8NmsNFV3zm4TIsEUHPDDbBX%yygU;Q{mI zip_4H<#NfxhYzXFW^A=DCwv^9p7E(qe2i;1Z!nq8k*kVomC)bVB-Jc}OrX}eX zx`fu7j*<%)bOn!C(O2#W$sGoi}=|3^wchxkih zBuvv3LHKZMT~$?x?}-xqNj}C8dY?=vDXS8ptPl~A#LGn@kdP`7qpGN6fk3FJEMtWt zdE{xOAh?}Iw;ijQTqq)bk_ttXW0e9*UJ?ZXt2o4H4d~pujd5k0wX9GZY+$%G{4_w* z!HxgRs+Sh$uf^Y z*CJSqI6F8XjY?{bK0>8Xc`ItO2~WQNO{UeF{f~WuT73th(WiXwI>B;6_V5BF1NCFK zDYpC6G68G8U>#l%EIb-b2Wk@ja!L{>)a({ry+h`>By9tw?XWTnA}K*0O^Ba9!O|sk zMdJAAgjTOhGM!Q$og*X(qb#PrvCZkbr&!(*f&^Br&&Jksbhd7gDjKHiusXRQn2ed; zeZq1!M+ExKCcC{&1kMfeT`YK(;WcKtFbPdHZsn%-*Z$-0d;ui{ST_aj7Sb7ne z>Y}?1#>a?cN=aiX1l!jbP z4hTkbvPz(~zsHTweu7tiWX5{2#!fA^KmKXrYda*8gt`h*(=}cyrA=>O5y{1q~ z1$q);5@T)Dp(+?gA+1+mBotM~56=i^9==c!jc1ghPv)&Do={f~G`h zX~c$2tF?>fbnq#d9UZay-n%GPMVbT{qD))S35FNM%Q=l^jWA8nZIxghlH?*~tAj7f z7`jcN%QT+dMnv<9cIVs5)ocHAVcS!w07Dch(+ELPF7tQz^F0$k#(#`{=MTfrw1WPi z>iPZ0KTO^L5JmA%u6wUtPZY&J^Y60!vqK~csRBWwC=05JO0(_z`sQYwDbixKn3nC> z{d_2wGPZr0`4L70^Mp*2v1@J2y{i~Io76W3s#5kgq1?H16sbx@E7EUlls$0afCG||??39=lZy$l zte{=n#JsUf!?g%HP4=>qeC?xmZJgZ}k00D&_(#9R71`jOlR3jDPpL@?cB4j8R@@(+ z^2J~KHJr@>Wu+sx+H{_~T%^k+kVT2(qf=H%LgO=^V7UlT>kfU*q^_vUM-zqzXJlf@ z+ES>A5S^~Ej2c^+ND^dB<8xHopeE?tIXXqRO@x|?W9SUeC-}jVhS?<9b?9twv-Ru^ zdb?YQqDZt3S&iqoqDZL7bQ?B;1pdlH@Iz#$Mrp__rb|kvhSRBIR8VF)!+Q^S{Knff zWeY=jxIQUaED*~2Y-hkNs%f@ z9u3+2rQ0m4l(p~SYATT`5H8lpWsW#ILURP>)r!hXkfVeok%%3WxaHDP9WtkeZ7&eR zn3|%JwOf=`PV5IHicJ-STxJ4GWoSW zcVGVjs^#K`0hBpu?1LmyWFno-0aX^`*pRCV?naL|j?pTa{_YkR(>ZD1T{(_(Pt}Zz z3@9m)5Rhe=@+Y+k{uRT|M1zJut22KPA%Bn``p4(~_z78-<)4u82WipoC+;8bCt`J} zh2~J^1(l+fN~iNQSH#m$6-)8ysGS$(3yP{CSSdm1Gmisg!=b;mOXD-I5S37>29lH! zt~`Vy$5L%%K_ps@kkgXdXpFL$APX8wz0RuUGFK&v(Nmbs34#DWEieTcvr)(0+N9yO zNC#~?H*Rn`8)IzN+1a?lO!ll95bSNJT|P z&MH|WrUIe@^=6xmjSck84zg(?XbPnyuv)FqRSiv1$&(cKN(af-@w^qXAR-$USp~9Y zAsa5428JXcE*6aL+~wXkzr}iZ!B)49D8qQMrlGs^dK<*cCBbURz;ZB~E%G4e;SayZ z=4KZ?2#|!F>DzZ0)tWS~?lblyL_tEW*BE+hs#HTU3?$Q_$Z`ZPqi)0E$$i43%jx1_ ztxc|3IE6|voH1IRkV=pyA*XjIh>DC~X4F~@+@d1UEySXt$WlaEq7-Ga9Lg%85)?+u zkXBY+x?n<|)VE2!1=A`)XuG&O`$!Z7t1;1PNx#`d(sUw8Ml^I1Q9!So)cai?&PHta zH*ge#dw1^9d*%vjNq*36x8Fk3yb_Q_@lx85B!s^@>wiBLel7_5$NObje&A1&5AsQW z5PAO?@2#NU|Nj6KMTV~Eh>}Q><|J`WrO8$0))Pfl|83AZZ>4_qUuN^=^VQ1Jl9fkM zirCE#jVsrXoH~*h63*7dixonVqq;VNP$8-!+fJYP_=0ihA-WRN$qaQ`a%*P~bLDd| zT~N%I_+CUT%SO!N9aZPOw>9Wfoxh*uu@BE&CZ z-ubQH23w=^+zlEvhjI~+PfPAT9`ba(z#*quZ=qNQilTGt_H~~5)h{qzc}P>A5`pDL z1F=eq9z5|Y)U+y^7z}|#hYBPbA6ve$XS&!if$7%9j2~^ zyaa0;a{S-_0i!bE+H)^5&QiR^h@1OYSe%@)b!7*)+2VBNQFU5$pSemP7O?biToIN& z8jwm5TQa9d2OPY4k7k}AD+YNSVY?2+Y{bD^cL=f^efzR&Qiy$IxdHV$N`DJI6;U(+ zse&TQ5M>F`kSTuDQf(<3^PY$=ipWJozKRjOfMUIdtitUNP*RiC=$v>t;^fg2*!HQn zdpO(M2(CpEt3)LTl0@tJK6b5%KVDGl_VMC;sP+ecthBm!D}=KAQH(=bT*{R~1=U|8 zmj1aQ=nt~c{rPMD6z`WT-h19pl1%_qM8v$jOpO&Jva%vgN>C+a%N?1Y|HN+wCr9Jx z?erg}lf^H{7`9t;uo^8&Q)hiL#1v#wFQy6uYMlmk*JPE4y zfmT^6iKv@Oorh!8+XzIq)g zShG$-B5#UPX^4(O>aXyoYa~BKNph>h1QJ(9rXoFbELI5wes<%|;O>&vS*S2oZe&tz`IOFco zzhU_BF=?5y2DUnz>`8UbF2+Qy6xnX0_j>qS1CqMK)+auOtqCxWuqY7KlE_<899^(j zt}ve8XL-1yH0#J+hk58@PCVpP;Na*HPfs4QSMQKcb41HRlN5}mL)GtNZ0=!XDmfnH z1xXZBQXyzEQdLnU30YAhugjn6^QbMNFn69K%4}*~YaTY-G;geTqL`pj8!< z^K*neC5aQl`HEPC`ql>9yL)UrdkcG~OAvT?7iR?12~v`wiy~wRWfGChm!vBXtJh-F zaPf}E#EMGRYtwt~7J{nKZ8cFVhspw5g~=P2v+XjeK$LUpNkTZv$g_f6R4wNDf!_(_8Ahxk*Edc&f>wSi_?w6_Mxb&HIGnrV=RAw{@AqCibEv@BFe*sA5GgN^si;JeL=*@X z6IRn1mZ))j?=h>3A%ZHQv|DUHdyA%_lY~BrA7IJ?{dSWgOIWU#tfPQD%CRjQ+0fBz zE~TmC=P6N^6Z#Rw=z?sy=H6?sVXG>goelDuP3^`tHlBZ$*4`fO))w_zgY{&}$>IWI zuS0F4P2F;7$~ul+L$_-*cdoJ&RBC(sY~Q?vrP;)>j}er}l0;w?kgb`2{|AhI@HYKc z1H08nS0qX=AYQF;Oq0?1Id8r8ZS1O`%u9mMN0Jn*S`93l%Cyn#I;v@-H*F+Mrw{}x zSw^vK6jhdAgr4w|X=YNi%-;a;do`FA+LOv|q|D%lRf*>FwkaL-WCrBcKbUB1mEI`al z!XQD`jLK-XpXisVAV{5#RAe0!_rwt9*gyY+z)8$7KK_6o}3as zJz@IjfINs%RTa-)Q{*ZB%16p7+|3@n{i`^&I$F1e)@vYSIcmJd8x9HQGn%%EZmP_u zQ&d60R7_4z9+6+nsG=CTS*Lg720K@;kVX+zkx?Z+TCyg(xPY=GC`(FNqs%fEvl%tJ zhVOfXp-0^?aAXmZ2w4%4EuGnPh~gJ`tC;#LFW_9gLNJ_?TuiZD6Zgs%R?|T)GFAsi zm63luM9zFZ<08ntE{S<)EJ7la2F)HnC&+|J9vbl8FU8Q%-24v^^#7vMQ1Re)#;H^APE&k=wphItk=v( zBi4%rt!4wsbdd}l!BSD{4x*`(#0jOBU?hf(&-;0Q|)iG+%`?%!p4bb=EX_-c({5#yLH^_>ke5lmS@ zN2Cxkv_T)!siRvqqOPME7K*AM6eScT4ZBHgZ=1|@5v>-YWMk_Ntxk)G6eIOeRhe+@ zbAEV6vI?;cgE)yW44HYfMydqnzEAt=^>iF0PczB*?a%!EfACL>Uhf-~s8*CBig=mz zj+lcWKq(+1{+zh*M8J{zZY2vNFqoAahXwNC2}bu3j(sF zU1tQjmQ)1EqvRiptHsviA0C`C^5>M12VsQPw+WS!(fSbL^D)Ughgg-sDE3h|`qUkpPzf<@n^c}LS1Q`Q z7Q_}>o+5c6={#k#x6Rr4Icurn%I)XS^Yrm8Ahtqyrw;7>i;Zj+rG*U4;^)tm2f{JlF&?%hS#b&Sm&hR07) z6^A&EsSmnb`SLGtCz!FwmpEli*X*-cPmpJ8YJo>GJ|SC7Xtr!F4j!VOr>!!hGw+tG>;wT#L-@N_rwEq5oN6q=+n4)SUQe`EoeA$1Heo}txN9A{Xl$L!-^p~>?#R?=YM-mBwKq){WRzzipE=f3ulx0OE zlp{e=)_Niil)-4v-^jfzy5X1 zUWdx6vAwy2-L^Q2N0eoX@N~x2amwAh51`w}-MUWYv`JfaXg)(8 zY~W3Erf)wcDpHhdP4=I?h1M95T-itZ_>0us8tJ#+Vf@xx)NTy8`h{O(F*>IwN%)~h z+3lhfHo9t&Uh5zmO@zXuSRbPa5n&i1NE-FJ%j2i_c=FqS$i?9?jb4|^(9ml&>g_gu znW4BkL9a%vT3FTwY9%l}dc@hmL%Lg6*m?O=XuU3hC81p3WAOZ^$SzhW2Z#9cHO2NV z1ji&ln^2psnB2e1aB@sgg@{s$DkPvf4tevd};+E2^1KUWw$cP8O{xh9gP=s{KtiiaJ`q!<2-w63`5lOv(|n z7q-$D~X^OhHN4j^Fq9If3^fBwbbgk&$?ft@M|H)XBz9kki z%~VE^N<`^$F|ZOUWJy6lyzC$p|7!W1e-i%E3A*@E)FXUwb^BuieLp^`dVc@)ABOi< z=O0DD8U5wWTevzXXV z$kLoRNm(t|)C`ODcuKHdWA9yK@an5eQMwR80p#q!cBrMjgX)X!se4tZ){1^y@Vazx5p+-+91`fA`ne`a6Gv@??y-T+(Ux z*?8p>yt`N+OBF_$V~a9wuZ>_x&@`xY5nE75PR6*HlqtxLjeTX4>2yN&cu3uC@`?Y= z{}T847g(kID-~Wzr(g+AeAbq zXbf97Zv87`Yxm#Ek`*eFh?tdB@}IpQ|04JJUp4$p2>PQ4@)AE?9O+LYMmK4Q-%SA2^Au7nxiQi zVv?g36-NgL$hyYWFZ?RT^?izNm*(~svQV)cj~I_Gux*>p^%oIj9iD6|<>QU#C>t%Bb%!zxkcyJ|WQHus7>12$x|jao zMg#5kHTqxt0`B%z49#UR8Bs3A-V*Xr4bhiz1~LNy^!9 zg6nq3;*9C(h;XqcD{}05ouo)v&ZZ~=*k#Fby{2xtWEWG!*_>>2!O7Fdgi%2M`Yw{; zpmlrDX&_q$4MpYj-hJe%gslOKAVuHZBI}r_YKi~g3CjnMsDg-4R%!2FC&~nb46L?J zqiusE<7FbXc9UQ_XE|IDRU&G;j~~T2g~-8cZ?HY+GT7R{k3vLQMp0D4@G^`(4g*9( zB8n0=YF$>t5pUl4AuoLCbG-EHe~Zkmlbp{9A3tS1pJBi9DpS*ByVW3m`UvmvF)gc! z*>xy87PIw&V!Wm!yIA!mMZHdUd%)9^Ll%d}m?;#7$>!%jNB?7=Bsc4rQG_2xBx%Zg zHl+;KoIiYkqd>`&7Dw(yt-d4GIYiMMlmf5CtSvAJL0Qu=K{s96N7CD~$$kY=cs#cV#uk~AzN=EE^_&!>O=D)QzP8dtB9 zS{g-J;9s0mt(Q!X4)HEV)Hk+J%8Ya|B`OJ&7KK=q(uZgCq zG-ZV%j0mHMD9Nxi3w0eZfB2ZhTOrqNl#M>ppiS)B#I8h5wQ&dAWSbiZ%^tO0mnx1> z=WCM5kc-0ua?c}}P08a3%g}*}FbFYT9ClCot}Gc4xc zy~7WF=WED@j@@nHN+zo4UQX#yO4OQ$(QqkBP%53B))rdRAy0EW&!^_r==ZzCVSp_w z#4C^aY=ownbesmmdkTtU&u^fzt8#E5TW0qui0oHdlCEga~$1&Ks-DmTh1se6?w3YS1c*w1WDAW zZEjN7I)Wx+WGUlEkFjkFyICg}1?*Z4NtC!aJtqo6guG;JWHg*6%kv3R3D3X!Dtj+H zPo-KMK0e0ow6ThalmhpKm(gln%;}8d*S>+b9x}W0l=WhYWoxt@mvFkIkYwhT#MNK< z98cc3!@aM41G^|FnmS3tB#ui|%|d9q)SD*lt6M}xMw+Bd&qmZ#gU5Fs^6-s&hzca4 zh?m67A3ov!zx@irVnL-8xEoCr!KT$~L6IX0GDs3pSt6AMr*GXQIK0co{tg8h$zqCk zc1q20sBdj@5_rgx7KF{#x2nA>|EzcGg>Q(W5^IW#C{#pMgeqzuDN+7)!q26|@qU8- zN!9QB&;76oEbqVW!@g{}0#&%o?I?@#GSTiw*}#IPPaMlxS6OaHE3dCPh9fuYLQW|V zM-*N_nPwDK#dvs5w)XL-b7qSrJI~&xvA2hpWoUJWTBpf+dVyUeM5iZcQAn}!@cl9Q z^nz+RV|{T%F`FW#O!S&>UF{=BLcr9y6|}WU;SGq-+BveH78uoN!JTXFUK-u zL`_68by8WR5CzOQCcO6qB^h734;DVNw;$jgoKlnmYJZ~)?fQwjx$%{&U;3qgvhk_U zel?S{MH1$ym53+{ltPXys2{=$fBos^jp(67ha~o{UIYmgGf= zD1xb|RH8su79?4U(rka<%5yu)GbgRmUy|aaO;TuvqzG!wW#lgjMhn!UB#$F5W)o_I zO`iSiXE|OhP~wnuIU%3cXv;Er7(yB&RV6LQW`6R3;VQ;<>sTTvippYi#%#W(dE+MP zMhjG#BFoA09Mv(gpV_BwxrmjRKRo4h8j;Upo~+iW{S7|(%U>XsMdDyiuiNBodqAt%M41O<5AP5kzRk^N z_sBQ4$n}zIW`o(o6PCj%Qm;;?$h>O(xm*KwCI=9Wop2-x)ohUGHYzE1w&F3xmF zXX_fnc*^P7IsNtk>P?!@-lFnDZrg2EuYC`xW+CM%?~VdGx=NZSl-`Qy;USYrhQB;z z?+c&7z7ipHH_`PP@obFd`FPVMciwq~RVplxPASupP?2M6`P7OsF5U|7WlJ^I=Kv&FXmXIqxOu_imSe z7s;u}<>E4=MYx8*3Hc)bna&(B@YN2$xWJd?cjRu;b;g81T!*h()j0a!; z7HQ$*eC`#*+2uoNv7S-P)f_4%vl zoetS}!CPN{jmC2~7`*ZVj$>kc{AC7`$){zL{oW?2QzHmH%q%9o|A@fV>4gbZoDx?K z3)Ntq>!^81Zi28@nEN@JTHp>kFu7oUcEKe4KL0rezw|jmRU$nfVy-<3afxfz&{Ub(owpd?`8LDJ9n5VD zOW9=AE69R5NmbFiah=Rm$f6kkWJ>hloYtU5T=^_lD|*+jlZY;1rP1EqC(M@wr$bEF zW_N3o`RNq1RR>#UtG`WlJ|o_?k!6{)@7yJeLKMqjhL0R1SmOX)9FZTF#P8M+lN>cE z&~~<+%K|&KvBvHoH8aO!w;+i5Wkxh-kwH+Fr2AV7* z6cP>9BoPFLp@$!Y*rhJwIg6{{OZ2XF--^=bb0^JHBss zUt*8Qh}$X_C$E z7D+T4070w;p!TY)Tq83w_T}#P`o0`JL?w_F6_J?$*;Co%{h3|6e%+6|pBv%+zn}ll zch2$fw?+&-gS7Q4}ePUnz%rGc}! zfZJ%X_32GEe)a)+o^q5aR5XRSH^NJ|lmh1{W^~8r{ME0}Fl{zI{0RI$QIVln zEzCt5=Rh#n*o2u1`^kXz>>9@15wVl8^yU)Qjfh*LE`_PES}pONfBQdh>A5Rh_~vi1 zrCXGAuv~|BtAS%$>+Zi1qMA55sY4z6LKn;PSzJr3Uc7-Pw!@F)D@FaMJH z$q+rYuq}+3*_7Fyu%q)?V99r!<_iY8)3uw9(DJ`dnP1Cns=jY9p zi+{Rs>4m@arT)NAK+PqNra)1Uh#R8^TR2j~o1bGNju?b+;mXT+?Riwg!c{bo3P}`G@?21I;yglEBuzyj z+u22lhZu&%{!x!ot&D962K#%|R#&lJexB+~9igfiWt&vbi2Ocw5Mqr2a(|2*ZlD}) z)7`pFt{o2yCHgsDd4_a$mTGkof2KieX_;Af9%dFOW||D|-=`A!IFlhC-n~PvK#?fq zl?M9db9gO>nLOfXoYGueVYfHJv#S`9g17R=@adZuDryuiY5eS_gJ#9mxv<+s0vqIe{G zH<@(qkq&nl>~A1shH2Rpxx(Ds0$#%dKjqUKcWAtLh2Qz#{R@nC3(GBW6!^FY>ty=_ zN((F8xp{-Z_r61U)T6m}3B9yN*ttV@V}lvXqVCv?@(_7t1%LTGTIC{nxy2+3P;TF4 z>%aeZY}~%jOMm!H8rLph7deWnqof%kEoik{43dz|y)7D+&DGf@Ttlbp`>eh48h8$> z3eq2<`a{N@eH39(DP=tP@IT^j-$GT(7&9->y8JTstcl|&xUD7!;|bv?;G$FG*8lG> z`Q+PwhMn}OdNX(z&Z8|YarL>Y*qS7Fa`K9UYE>weJ?0l?7=7|FN*WN(l^G0ul zd>j`=sr6CqYj6FxwU=N0bAi5Xj}uf|9DipaK?sDRqKM<6gEd{5it{6UX;~a__9M($ z6UUxhceaoGbXg#0@uWOyQ#Z)+92BH&nH^ixCR$NAW zL$TPza4fW8NG4*kG{(|ZDrJv64#|U%NvA_F7!XW`Sek=CVwei?uuJTR%wBzt`qk%f z8nYCdNtz3?C_{@ezQ@7#4oW7O zXa?Hi602W-i%eB%)k>61NJo7>{rS%r?;oO>I+b!6S2d8M5KGmlEzXeFY~;a!^?UcQ zXPdnA`@e%$tI+FrF;S@+CWacbD?@sd5$6|Xm}CKJwM_f!i^z)?Q5sd^QW;@+^g2T< zVPP9Kx@!|C36F;lbTqwr<=)Iq0!q)eu&RxKzO{*QiK?{_v2^ zt!*w}yb3|gou9wU5C81XU^v7`Q)Uh-uEhA)&yMW`BzuIEVc4hWqBDOB?hXQg)G z`o|wrt9f{KiBhe~I7^751T`9?YY{h1jq7)ivkNR%J&Y)zq*%1CUd6d~8Eto$xHsb7hd1c%?htl| zDE$!vsMZ=-^$Mw}qP3fpXXY^-o3d&$_9v)Oh^}dvx3$(V!w9&HT;vtddLj@HkCvrq#j^LncMU!El0l zYXiONa_*()(5p7lsEcR1D7`MDAjAlIwARkCb^QT@am2;dOFX!9A34lW&b!Qh{dZ|+ zIfXyw?%VI;Nt5_sh-=#~%~#H` z^!iJrIV7D4H7xS9An$Y-Zte5E|KVRFdjmWHuIq4^PN?M;@n(k`_rHxya%!zvoMwYz z8dK{X;pH*)`B}Qd0l{VuG#902)7#!+|Kq#3=*-MDiCvw<_bFQ?LQN2)6NG6~uhdDB zjP3V7rde}o&$Vc~26;HdqF_5tg4S1F_~GnpZ~l3qI~#cfp68Nf2|}n(eV_e9=Sy!S zJo)}`+u!o&pF0nHJ}N)iP5fzpARd-Wk_<)HP&Ab=j**bLrRq$vS*t@$!(LJEzI&4mQteGlyt%=bviLa#0oj*sgxy8Mo zzk`?z@Ew&SJ!4_EjD5yic@yfZg=y?cFE4dxvwgGfdQ&2cLY%_~ttEvu*sn9p3nZKfqEYnNr|)hs3)B z_HW%o78#Y5IYq_t#3D{fEq#;z6Gj z!n4NE_)WTbp4L_T>}-)QUL23s;nB~ZFE3D3l|rcGGDo7ISymwob2nAgG~VAkH+Su- zwRG`DF-kZg>>W@jIi~5NCJLruW7!tt z^#`Qm1N{95m_fwR-VsrjV5t%_4q0rp=-#|e|L$!BDH#&ebdY&Lnx+)0f`8PZw|<|4 z^?RTc)RyL1dhQD6u3pBpJc=k`I2s~clfu?;OCCnaK`B|ZOHGar_PPGo}))vr5A>(MmQ4~;a zw6LVk-sTqlK?ko|qLL@v`1W5>P9n;l!SrnUf|lP8gGJ?vVAm)J%)R ztt}=;9SmJ#{nMLl-nzweOUpE>WlHrj_4!!};bMAaLPNvX6mrj@xwwd;8H{@aBAJsN zbx|m&wA)O=1X=Y+$?3lTDb;cVg#tg1FczCArQ@+yR8wd1`AanC>SQLkHIGu&#!w;4 z5>f<(W~Ry9xgV|l{y+L}v@2Kt?Fd~Ox`vHP9!D6qhCn^_ex8c+7x_{f34aqYej0&( zIM~vo=R51XCy)CyQM9INBx!<_Il69qW}kpiRjE79U@p_j@i6rCer)*<4s1V|sG@A6 z$wG8KT_>1~aCMtzwGI-bEEo-Xh%`Y-GWz2&W)QMJ=`zj=%JpSd|MBnBdi5oauHQjX zg5$>2yr9T)6j_kw63weJyR=HJq|@KtBo8KdjRv{UajYt}W|Mv}K9CV0#eS+~2r(7a41g2>)TWa7B0-`ua2%Q}h&6THXd+)eVyISEsVUN2xBUh3Tsy`Q)|z$e*II%VaWXX zRlfGS-=MX0ju^r0xmCPo9k1SC@hdOU%_Gv$2tD#i;xU=X+1lG>rc~wL&D;F=`#;5z z5?d%}rj97tcndS+=a(>NnxHG>>GAnp!v!HIP?@9w=jP{8a!Dc-luDV|)m47_AHR#` zM>OW<81}meTOrU2@LX9`w`XIX|sO4Sbdr^7*+7pH#QAW^DOo zIRsD~&loNwlH*y#3!$J0(a%bizv$)hev+kcl$RIZ%9P^y!DwVFhM_JlEs4QsfSOB^ zB1do55K2zPR!MqY!ikTPC-}V)10|xgc8S@wYnb!rm}m;gWWu1xY3UVgLnBEeWF8~3 z49zewQy;(ICm4-UOqcTF9BLxbG99I4)9db1C*fdgi)1t+jV$b|OUP1{Xm5|+oegf^ zyhUXcVFGb3NYN09q*AkS9h2dpPt~(gYaVK<<1}k1?(rb=sZg18_ORlN8N0!pdmOb- zIzwch(<@SX{V}O+;I&)0dX+0qjTb8p_io;1a(9!|Q8?=KSa@!p$WmBvTBM0j?CLaJ z7de`sxFw`*<9JoV1E0M+dz3C+*vm_UbF>vn?hF z%H=ZN(GjMuaIR5dLAO|Z{yFUT-e)uW9!A+95fOpNm~XeK2#3uZ>(q4>5$2Q~8&s8r zwKX!=qIGVbXfQ-WGFL7$4wB;lK&vu$^%BkfBQOP>&K^!=Ftc`n;eLn1Pu6K(JjW;) zlgSv*E)hf#d%JgOXf9zE@SUH1pK`^fUTINxs?0Q7M5>yq^_dOx+=cI5{DVLGV|o7k zccUbhY7PydAE#s*28v~n<_YR&85>hkelpKQn%$#3tq*+CM}Bnslm73IOR;<0Me|Dm zmj$}6W9TYHmXW0ix}l*ef+&iiQtESU=~lm@ePZbP?!0cBMi93~{jL`kDM@}T=CRDd z(&&u_$RZ^VLsVIysRAvC5%mgduY8sE+$9dHE>T&dwm%@qC7xG>LQn(&dY&NCfY2Wk zO~!P$HVOBSh{G7AQp2b=&>at}=Ah4%aa0W7*38Z1iEK3R1<gPq|a zRYk=SDto~gwN_)MKF94JzKq7u>CZ)j6IGrCjoeOpT~)W7g^r3))%v-~9$_FT8+EAnSF}a!I>VXL)Iv3okrRsDL6=M!g}S2${Whh58H6G4?#H z`FXUOM`kE^?HZyzN1Q5nsXg`FUiN)3(Z7y>^BD(GiPd6;pR-^@4IOLKm&Ih%>FY<^d(~z* zG^2b1C6zc08SfpCAC0hcogxvqhE88IFlU#UxpbAjo^oNKh1@@2chaGeNGw(0k9%a1 zPsOlE$76=OI~0>X;l?_q0;Nis@o+?`Tt=%`pj^Ri%;MJC6icgUufB>rzlLp?IGr)A zT;az*{u%o2KBcxx(r{62gJ#Ji^M~j%#Y_{Qh+rOZ`whVR!tJI+N>hmay zpgMuFTVgB=YNZN>pAb5Iq_u?8yg;$J!AJl0UvuT3eGB>GHPoXNp+{(kL+FhO@`xl! z&?Yf!7gp(;8Jeb&cSm?(M(6e&+%%T2j0&+oK<`yc)J@*n=Q|3~em zxBg{bZoexEIW8-pQXpl4)Fg$jAQb`Pc<_Bqo_^0wMf!BURDnLplm2O^dDf3hn>%^l zU#)w(5$?`zBs{xuLkNK?6=b0x3l*Vg7>2RyxZZlXS>I?ZFZaS6)gPuMb&wjiVhKEp ztZYyif-DJ%4V`U>NNBmABp^MAGjJ(ZUojQ%Gb%rU(X;F{AOAB#a1rpDfR@Tn8=9 z$Yp`hbadOnu2e8wheA_PbcHN0m}#|1{TRbGIT{?{Px=&{4mbYhN4VJp$Mq;VF7;9! ze>h>k+aWep+Lu<@ynT;%{_3xpQB*E9=E+Af!8js_a}2jkscGWWOUzw3k8hedORHRZ z<1G}Y3QmnmO=su+1A2#DDiLJsdsJ&J7G8b@!>eNa_UmY^2D8s!q5j4-(!~~{QN@^T z63@4Z_j?$^Bk{-l=%;^;Xf}B9xBm&7_cp0$3Bler;pQ&mgMFmPsgykABtS_Lq|ES# zBf>$S!k-|M2+wt}YzNb^p(wzXD5^#n1a!7{*!c0gtiSyp^XHbZFD;NN8nt#4yX<0= zZ2UYSE;57)iUQ60GL^MeazmpCLb?ZsjDiV8mQnP3EWCJ`Jd5b8-zVJbP|}VkT^$z* zp^{>s1%Aydwzk{^XF+ctLQ-PPr#2bg+>$v zXaah@E?%WXwK+qh*2Iw!VG>hsw~4}tqr)z#s$Die%j zs`VC__E;>;e{}9EU-{GXUwP}lGu!RIP7sqcPSK@A&!JG2FWf7C+s6NYs610$y&v6n zTH4)d{`8Y0ml#8cWM8UcLaHg}=4IsJF-5ITP>DM0SS+fy9q9+Aq9_d;UD7QjPIk3pYq9mpwuw zqta+lI_Q#gj@TP@sPtkEb~+rc-=scQr}g6N?Ckd`r4fbFrF(B3bvz-DeB8{!P9hGr z_er`(tUUi5!m-Jcgd`ZF>naKvMKr=mZ6^G9j>q#7Ppyw{Nq3>mG42LaW!Q3c;{5pnmBRv$Ymc6yd7{ z>0y`HvuIzvNRT6wLYGc$HX0cAt;M(A{QknLuYb2bJNuqiDjfuQUSvs(rI{G$yyOxIt9tD5?$|PtYsV1b;ZdDtnNd6f$Qt@iCMF z(^9y1`%})f8`zCD*Yk|t?iN}BiK3x-HffR5oNX~bJIDIL9`D?^NtR_?JbwjgS7@|n z(Hbo#s-RM?psFgiZBuK_k?SUn<_x`!O*-oz5Z%8{gOvOGHkU81AzOm&qcPRDUZMJp zH<>gWC|(tnLhIng90)+}}ug_*VID1swYB*X4L^}2+qPh)--Ta(lsgSgkFzq5HFl>#% z<`G5RVr&WGIHvc(O&Ya%Os(82+RhJ`fA_6FS^L&oKh%}VW}F;fN0Jmn(=jv!4Hbk+ zCbBQwBPZ|EDNo1$=oZJLJSkcIEX(1v@=xn)olL`fn)*C#9Ui{tT7jZSG*zIBV^2=V z93cyk5<6EBQH)HpKxx_8dcuXM#s;VN8L_vsY>c~8SG$uUg;#542{64d_ z3fAF}|NH;x|ID4Yf6n6kJho*cU5oO{0%og@Q}Wopzs36dpD^6*l4TKwTcURL3XL~j zBb}e2y0XaH$|}idLUgcARX2{uw%*@n>-zgdn|Cq$2UL;?Q7qANorzztpA}TzdIjs^ z>T&n=Lcz^rd>gt&fTd}K{+N#612P61TfF!4@3Zzt|8q2ZhUaxBtKY z3VWR3nijQolT1p|Op+xrd75G>f^nyV5vQcR9%>j-o2fC{yN^B`Vfun`C`s!z!jeYy z+#;4AGwyXsh6A!R0aK^ZXi>Fnth`{5MX%JPp+S>o?fDyH3ONP?}ZDS{0>I z!mO0hY#mEesn`adX;Pk|niZsPg6+F{I zR}|7TB`ZK`DuUt*_r&AwsV8mwhs>8gtM_RU=+mUpJ#O6Sq9}e@=3$!M$udvkN%eT# z6M!VAKt++Cb-@+|h9Z#iI6*&b=@ilN05oQzpk!iPD5ambzVek1=Dzy%f8DwDlWS>j z^vYm;``Z5c=9+(ZeeT?)3)O|@oZX%D)xuCkAqye$;{j(BMM0|SapbJ&#CZC-Ry2&VyF)JRy#K%7zvT^GU zS)8(DmY82##hqPZc3~MGfmtrI)SjV#{U+UyK4x&|`)nrAnq5J$N*Jy~qf(>S>2owH zXvA=T`yR3~hjZx?YOO&q@@X0dNuFUUIlXX5UKFI0h{5(Q86iQx%lqH^4^)@uSo`YN z`0)E5k-AmzdyI?$7Z+x!85UK$iaFCp3UCvMMm}!yI3HWfGV(kp<9M|=TpEKSAsT(;l+ zF@6?fsW#o<0b#kx%u)@#Ud3wGFkT%K9_};Q*}>?AsB(|gt79zBaH!-cxrb-l*p`Ei zMt3}5{nMMINkW{2R9a2UY6-nm!mU=xBA-bR6Xyx45Oku5O0!9xq}Zy0KORwU&7s&9 znI`aThnv?wAsqQ!d-Dwrk_jE#Mw5bxKSCxNGYc0uD8%*ifAD*M{`^1v!+$+gcxSS+ z$5NwBswvox$;198d72zwg9x%b#Zaam^WPQEqz8Sn%t;UWNnOK#-OmsCyYis*+&H#6 z$jN|008*l$AS9UGh@mM7Yz13asYVLQAd*>@CDO4r8`r+F>6+FL<=2B|*zc{R!_k$! z`}eQDyMF)b`PH?xILT*KAuVLCXsQsVr4y&e>1;w4Bw0?9CTO`N4FYscVYstLE;B60 zp*7QHvN54GJIBYr_<-vlzR#sA=keMN#$=dfm#V5!_z{c~f`N~Qf?KUoo}Iy&Ym%E9 zqd2DQmT0uv^bU5p_3?XXVULCRHk<1Y&@&%BktFe${ehr}5?rsuVL!yWe39z;=UIH| z6{492lTH_9)F)FE^1=t-#}qoFu@9pO>ESLL@BN&7*yp8x_J5?ab;QhkgYoaain{xN z`NdUw!+<4MvU_)(bf%0^E)fkz^bhull^Rk5PZ3m#h_H7+I8@OT9VJh&kR0xAG46DT z1`{@}f5P=2{gkzG6RlCkZn}h`pzc(tw`Vxm+ac?R_(_DwG7QHhjY78iT}(^GZ8S-9 zl_DLZM+sX0E{3)Ug-!F?D=dwCHv9?M?R7?nU4nN%pqZRUTc}{fk}OIIk0zv(i1q6? z*;(IUwp^ysXkd5_QVJ%6FhLYR1;ZSKg zWKl$+7DSnjOaxgW(KHRqGLL%)6e)##{8RAL+(T22`O?SYcv2bQ)Cl{m2E)^4OF7NI zK17L+ z*ddBzoY@xD=T=GU7Pa{mYKwDJ+AWTbjtGZ6u6^}I;{9#h;u5iS1N;D8SCDDQpxdEU zEivwG(XTA<%I|-Z#BMP%40?kBay&*(GJ>i}lBeXo5vJi%s2bH~ox9)v8{YrnPx-I@ z>;H<8U1L5_85KU-r51YGVRq&!cW-^fPyhPQs7QgSF5!@2h9R!1P_`^4=?Du0Jqak{ zh)f9lq`>d@F_MJCd-t#fq}v^S^zHAnGSgt?$~E+JbIe{^#@{+5zj?sAe1MEoW-2A3 zC?=fv3{4f=wUD|>S#e2?65}MNJ?k>@ce(eA@6ud(nboD&>7vtGy-57V0Y$4$zO_eZ zf1mKEi)TTPjI!gQ7dpu(rnj|+mO|AlQ7V-P)0CNdlPs4EdPDXnJ{ARfuAnL=QV52_ zF3wze8J;S$*p(9F@G`{L;nUeJS@RQQTQl+(Pg)$O32dI9J&6CK>&_DKvw9jnET5?f0Lo{tq9{Jgn=X(@aup`zpn{Yd zI-nJw)k6YSj4dUWEFc8JBvr6>)%x5)BITAp?B5bu_LikNUpE}>r6eu%B=AL=j72&c zF;KzM9n2)fQC$u?dvv-7$TUDtMtE_XR0zzOHtyUaak+*q>&%zR$TZ_{{|?b`NU*cR z!L8ejV;`qgqO!I~Wn~$;x`JLRv-a{ewh#6g?jLaF{AI`r#=e45w`n^rhwuEHqdT{7 z3$PT8{i7J8K2P&^{)k%nJbTFm-->Z%On>_x!mg6~3sQ^-9>b&Bpx=(s984aLk<_y-&+?XutRz@`cMxRFf6O#gZ`AC&aNz z$#OubboxD-)iPeWM4HFP*Ndaz79n92vOOvA=2vLX%%YX54D|pdDUelTdV?;80;$L;8V>O!VrWmOx0+ZJpMJN4ZfLl! zi6q7Aj@a7Rp}w?2R4=p9>#+9xtE{XobK`?|@Wuhol_mN_eYdgnL03sX9*%-d!?Cx^ zFRX0Tm(FhpA&x{L3MGSFDJZPtwih=MD2jW0eJcv0NI?jM3R39gkK7L@1EYuUilUrx zw@*3Am+nEs(~I`wBIGA|#wW`?O{(9?v8zv;k^FH{Hk|F5KhAeQeT-`)kOB9KlGBrM zyctAtJI%9$LeXE!6m4FShN>Z1ZqJHT9}?zA3{oG_u5oUzfmKNKq@Wv3SYBM9y0XMX zQ79~hEYH~U_u1OGkAM9Z9x6xMy9|0hPPxR=b1zc8e2MD9629WlC^y;P++}BHn@X*U zDkS4*LakjRNMoF815v7TkQCH(ljZqEoLq7=9D^Fs>+hkKO0+6X?!5OdW#JG+F>%$U zb9BT?d6r%h(bOHj`zL>iy3}Uo55LKZ)ufY-QH6?7!1ZkOAf?mkaP!k!XlX#DB9MN_ zy`R0uBp8$KcUZi5j$yaMXgp^4=^pz+Aq`Vv*G1Je3{;9i$VWeZpK`N7-Cfr^Twl0O zBt#G`qchrIjLu-lAbK~!AVkUNCBZ1sg6O?>(Yp~OdWi_4cSDH!L-gpqpE=L@FV4RD zZuYv_&)Vzz-u0HYh5zP<;A#c&!Ozb^AF?rGW5R}p1zi2SB2F2^Uxg@40}A@n<@!cB zrKNHh{|LKfd52`IDNgE~HZ9jocVMQ!JrNQR;2(P-`PbAYt>FzvC3G_aPnqzy)8hKU z*RCLj#*7oCbjJHJ8^ZuzN~JFTNTWQ$h@FfgzrMGCg#IiB94WD~N@oU=i8{P${2^O! zjJkIY%RY?nE+z(u4Eor)uRn2gI254%&F|}?B~JD{GC`OB^3q1+u{1s7t%>M`X4|G& zoPcQ5s&)=%(8_Xyvf|knUtn&?VYe2T%d8!8-91{$mkZxt<^NkMvEE;k`y$LvskvZp z9Wx^USSyR~q-iEstAb@tR_gnv-sO$%jmHuy%Gs63)=Q}ebiYmiG^ARS#mm>XLOYSZ zxf$QT$B*8Kr|Lr8?@4tohg5;z*GwBS7vuXMC>%=XzKfJhy z(GW29Vy25+knThX8IVsHdJ9Bl=5I-6S{3X_DryS?&uBeb|0YpHCgua(!>@hU`6~q@ ze33G%6Wu(083gu7=W8s(yyrPP=NliGj*j?y2+kIa=W@Y|2o?P7905jhQ745pR7;cyPZ}pUF~BkHriv}EUJcxC1wH{ zV)?xO-su3=T%|k$%#?nXE{Gs}h7n$pKkAg^U?Ms9@>Ze^yZt3qc;w5GIZIyfsLubu(q}@_li#sv))}EqAplbhL#1B>1O`2-gKu1(;l0RRG@oS7%b>2M8Nt#JogGpB zo`)yAXEP=<`(#-8)fnfFOfhcz>3w;0%M)DEN80dSr`-GEHriRx{I(E*#&Fc6C`Mxx%NO!=DqW$# zZ$G|uFJv=WX4clV{PctssSvO5mTb+?Ry}JeG8RsE5RK@0B-YS?CSi(<1`&--(WA)| zuUIoMx>f2>?k#uHrwxtV@tc_uR)z{~e3%mDk}Z-CZu%P=e`tGdPL-LDZazDaJ3iao z_sICijH3B3FCW)cgU!Fz#wlsMFA3QLddR6I2E&F0-H5A=l|^|NwK#>(=O;0uU9Idg z+hjqWdq=Jv#{%sq1}itjOBMWl-z)UhS}hC#Y&>IB0T`m1f|tG;V@I2(p0f?5t$w9& zJ~K@BA;@8sH$i%r*>4txwPD_0_N+Tfrg?cdGa_VD=}#Fq%gS{w^Jnv-DdBvw?m<3_ z9&2$4S&`#+E|S%Uj$2)9k*4a$2M&?o_7Vz{qK&8`akey~GxMPBW{IO_f|7g`K%($g z%F_Q+DWT*!v-9fWqqD}w^yaUj=6}jW`1I3K!2-h*2+kRfq(1TsRCwh&R9$S_%N0qt)Miqe_&kvEBjX7(RbsT*LSxuTv-}lA~b(lpD_@X zd#4}PewlVJMU!ff?z@E#nCj4>@>U8iq2E*t#W=j|*c%5P%USIXSWWOH6-~=mwpdoF zE(hvO9Nq-G{d@kN>F_@=%F8dqyRv(E@1c0rl6i?}mvOx+Jx$*&Ykg#x4iC1aF0ziv zO*^mTp($jO3HTBy&yUNk%N!=aZOmZSOhO~x%FgThT{0(HhvBh)N9pO z>cGP*f)Et;wc&sEm1>e&mmOsOed8lQNxV_vab))VB-kwmNm#?ee(;=^ulH09YE6Bx z8jWHUfmYs)baw7eyxVD;+Nk4USp-Z z9y(2;<)3)_h*WcekjV0x56bEKY2TZK3$SbA@W111ydIp<7(z$(YMbt<|K{0;VlWSga>rLQk zyk!>894v+a-8eWN#58mm4<`{qhCrjnHG`1UBv-!M_4EslX=tZl^Yo@1W&H<{q2v(s zKkSR`u`IK$cq3xoT{dz!}S>2gW_+Ck!Ez9?gBLhP?{=6gh_ z&ov-c(RSu-t4gU3C`Zz{;i!A7~&l({t>bT3n zSG(TY zwj_9Z_X!Q#3mCCC?cwWbcj%8Ex96)}T|9=23|=_{ccV)*3FW%N&rSs2es4zzG8R%D z3>f@SYMC^5aw2QhQ54b)be3zJvqGVOtj`q^QE4VeV3r|sK-UBAryrSJ%3xNpq~{Tm zVG0aGHxhwEh@o~Am_{2+}1&o%-!=Jhokp|!$@06Qd{8p{kpQk0;&Ir|HYDd z_6uc9%ZU#=-bWI-f^UK8!9_`|7|cZa=Z*v4FGbygv0xqoG-pI$`kr6dM?n-Lep8yh z=iTshx|{O5g_gnf(>Dq#zf(trWMoD`k!9dS)lnPTXj?vL+=kB(krIxr?3h*p;ZCIG zekt-yqqjtc_7mGrXde=P^ziFH%3`BO462NZwkpu6ypWN+Pi*`LjB$IO8ue0LZRd*{ z0(UpnP5#Hg4FR))l@?g27VC2&R#mEynF%3{pr8EO*>)CU_S!GU_o-KM^c`-@Pg4y1 zzMjl7?3Wh4Q-;|8mSI%+6uBzP$i`g;6EkhqOfK%_3owk-`Q!)#XR3uh&cU5}bq>d0 z%Df>%?R29W?5tULJ2y=(xUK7QokY*8B{Q-mJ=eb~Jb{}RwCRYUOmPX z6sW$EZY?iLwp7&O=iREn;CyBaFl5Ot&g;W2}k_09J3OHvGvOZ=jTnU zSypwd5T^<4h$L6ILrw|uWjdyw75LFeJ?$s(ZDD8y6|zRM^&cgJNwq;>d;nSr7-k#t zE15Fz0gfCM&Fs-zB*TqgD`omRi8xWPErNI;acbG?A5SwKY%FRVZx_k)19# zF)Vg-PuVc@P04M)<|jKNwVU3t&C$$L8&I!>jtVUQCHl}^IBt&~+hHaC3JoY$JL2t> z`M2BxY}kqaODBgdZ!{uNV&4{dU&A<2z%n8n2s4M#3uRt_&}upA!gF$3<|GRWP`LCD z_w4ig?I$zMk$M6mtzW|n2nlcu<{4#4g4YCeEU%)rS0v0T^*)&QUa2@W+^t?tFI}wC zw4eIiSJi!3-pvN>z9`YV5LQHMX4R;(66<)qdrAc%x5sYdx zD1r3IHf-lAi|AyDX~l4F%2j_Mr%rnGSa({+*bmBeT(=fR@y~GW2!7jnsI{&ovvpy^ zbZyy|dt!oca07TLm4HEVc`Ep&V1O^|itqleP3GU?(#8Ab;L%~pDkdjpTQ3imvvX33 z`+UG^JWBt`bW$N&?sVRXx>kuUXKN7CUPzq>?_+u|j!2jLzS@$bJ zz7)Ux@S8TotBEY5VlDBkyaop-^}58&Vs9U)Qa`3E$XBgFQIPKWm4#X{r4B{%ccPI_ zNbKsXa?y*%`@1EygKxG$`;}e+Z?VWfi!_HmP;V`hk;r@QceS+ChoFXflUk#z$xQ#t zNBQOAkoxUg@7DVFty%&pilJ1#VYnMNTy{MTCrLr;Fno_b8uXEEdx2=iaV_H4@wdb zWP6+m12W{32g+fIw0Z9P^z=WZC|&YTht3LDOAv>Yo-a3j)$_- zi|~;XwT;KKFcz-Sr53*e5p6YF{j(;<9))*>TT<$fJW5uLrJ`okY}bCJnEyNCT8k1^wuGbLFSf1`3b`$W6*XdJjx-8WF`FVO!3yX;K0njAK}aM zY{aW-nt zpdb3h$1_G)u@Ujr^%G-sf>jh)b$p7Ty8Vt|ErV0`?{lT+>l+&pq3po3aJ!obgY)phfhmgyttO`B0&L zn8JEqK|X}@nv68VXGb)XM*olRzNAO{@uLqO%&#gkc}FI{uG56q&|<~36M}CaQkfK2 z?I?sP8+Wiqv6HrhX;3oLg>3q%NIYSWrt5wfMZ+)DUZ-KRA3u!PcU}#OYjWQJQjN+! zX2p` zLvdiq&M%Z)DHi4ALo@iHtdSvDQ7xTg(~7L^FG^p{jZ=ER?f&78$DYgSk)F{oHN*KH zvqze~UQuPgvF;-?U9soYH&GJ1uh(|)|2!~>DQ1g=4ubz4deVkg z75Z_G#QgxqB*vM|ZWL@JQTHU7B79`Dy04r@Mc$*~1FPF!E^~!3?`#aoxRwyL^dk-O zN4-V>M2(8p?^|@kpy4&#(MLA6ivE*a=DMYqRz4AtUSd?BeJamFcI8GT=*Ir{?#C(h z)s5cIZ+Q6ao5LwBvN+gc*;$XGYb-2wi0+(K1cCV#cvfC|`qtJ(Mv#ctYN!X+(fnq8(4|ygIiG&fI?Uj@X9lgP_q3M;U^0~@gMiP3O3<_k4-D0kuF~@iIWHT z9d(_Y%MiB{0!H-cQ_W$R)n#Axc z>A}LQ1WcaPbPt$L!<)SmJv6_NnA=`IeTQ|bmnB#$%= zHW?WUdbwrE1)qM*tQDb+RWHTL%61F!@oI8K;(;X4j5?Uq*G9O3oJ+Cn`*ER1vyV-7 zz3YavI@O-c%ui?I*<)AQR3c#MxC-OC7mb=|?0Wrr_k_Q$hDM#hy@!*kL9>Fq!_65!(CU+`` z!phD+z5@Twt5d#QS@98$#GR4p&z6WS{dr*|?*wxvWuK_IG7lHa-<$CUW(e<$`?{5M5v_X>}} zVJptZpripFXP)|s9H1C$7d__wY#6P&nhuT1|AIz&C3v5Q50gpvNYD$N`F>Ov^f|@r z+Ix@>23h3Jlcg&>bZ`4LF+qthF(Fho0&1RJQT13NzfDjYZWv!>Q9!-30&sn3-qnvvR~kA`c$!O41E%aJ?L%8vjKIeL|_P*O=L$99iw zzjlNnkFNcQcFr4X+R)d7Jcbr1Kic)~5-IG}pW~&QTV}7*?XVAp4eajj0FYgdjYP}P zSCVYw`iEmkDorf;k-;v1i}yVKU0vTrU1?p|e%zv2sY#H{f|)MG9b(X5jN(K!r{v+` zbi~WiNHs)UeC_CaAD!eo=(8j)hR3-8_uPh2dAZ`3{T%lE{(|p7Ye&^O3!)HGLw}^-Q|V1Zoa`(ym4^ zyrS{VLp$0qUarC)sfyAmXkO03hiF=sB9I1=j%F7II?iZ-HgI>c+INUC;sd=aPJ z`yfOT)m)LrT@bvmfYXEK_fgjHq8!n&(9xM0?@tNx4qmZFg(Ic=ZOT}Fw41ZaPA8=H$Nwpzrx0$B=OJ#xB4sFWn<+G%=NB>|}GrI|v zbl|`bKB?IYCh>{z;WAH-Gsnfk=9*8=eD6jTvCtK$>^Bmeo<~-H7$iTum)R(HJuy{EhZ2` zJbB|u(kv(LkHh@7dj#+e^z<~aAk9^Q8JdHNFC?e6bRJqpu5qb8^JiR&SeyD7jmy)^ zQT;q-7o%Im^8xHY4o5-h`|Fz)0V75P<%M#bZz{e^>MeTq{Du0@5ONjte81BApF`ty zu7VH5DJ-!MLUbzCXqAgB|0)Jp)2nb8OyY^2aalt%Y5V2{k@$+Z|A+iA7m6b;sryjd zNp$Z-pUU4wk%>%Tt#A=T+1rxCK@wK2{wW2ggV5QpxHI61ABBFr|vo$r$$W z2u`F5mlKSjq|_`%LbP!PV|SlyS9B|oIJ>|InF26T^cYJuo$=ka`a5`&y60GsV7`#} zlUPkB->7S5U%BcRMcbKWR$+p1+MqJS0KIB$Goua@Y;XAVNIeZh~o$I8wueo$1=mgN!^?t9Xj#fF1YAY+HEUG&$vB zdhF1)20P+5G->|Y?cQ5lmHImYyPhW8;lg^VR0}F1dY1D3(Hy);Jw;t4^f2QB^49hW z{p&^rnl-qRhIrpjsedUE;OA)qw@1TU_UhJ3z5J7t5P>!+pO1D9&vo(;RsLDwIQ5Dk zAa3DY6?l@Qa8s0*1Nbk=&YO!u;;&91TLQfbF4~a&c(o=nGl@$=4noKccEQ*CU)3kL zUvR=AAkj-r8(>?aR0UA5ljC$Dn);~&tpkakvQ&k?b(7cz!f8lJb7>Uk)sE-6YkuvX zOImkV_K~;?_FLLmd%34`x6B&Jyjw~ODwb1USKc>sN>+L$2J$%5Plnl*gi9=gs zkaL>E%ncI`p;~@QhA?aU862(DMgUsG* zuH!Pq4;k;9-l^L!$GPr{*w|Aj#eM&p?(Cyra=C{{)?k=}S?sV6JCmFJq4P(HnHNpe zO#h?|PQqwTKv^DudKBSu>`eqkm<0#pv+%|$-?jCD**5faCXG(Np`1@z!9CPE%=kGF=KbeW0&t_J$0h_&wgNSPrt+@^KssB7$ zOPUov&`&U@>kosDk#~Y!lw%5Y#4?bbhh93kWaW| z{c!YRhl)@(lx)~->OJc|c0)Z03J}^R0|y6MNzSm9iZjN)95*(Nh|+2Hs1|Qp9pe3d zJLPn{i1^Ucp*ijDQ&LXjML%6IZi}AS&0^kVGGYAiV&kZCVU1VIIuh>Aw=l*yHwjgw zMbmDgXtzmqiYWhicRS_2`QtGc^CY6gktTFj#KZ=+eYIfku!lXmSz+p~+zYEwsj2%p zrl%p#9=U3ESE)s`cj$d8PPtk8_?k8DY8=7SgP`2x`opAq_u;0EY7?89+c1>Gwpofh zA!iA)AY+KgpSheweiI&_%${zpZhNW)-!!kmM-ftIcJ8oBjjHWl_dXGjgq%w7gM8K^ z@=#GNT%z&3t#D1@SmOf{Y^>;DL(Vt${&usw*E?xP{@EQ3VnO#nQ6D+~I z_2^yl36S1BHk<=;^&o19{hkL%SKQe3`edodXeQs(xl334TRppWS1?kG(ElhV)&M&j zDE?&3xZy;DS7gUx88D=K^l#<~O(aodD1fL~5NQQWt7XZeBa@7>1L#Z5MLg>|3Ib0Q z8PT$^1uPy8)N7Uh-s94F#);;n(v;_7=OMz0-iJjVL#}ML?1cwax2ZAYo8V2I0@h&t zyePN`cM)fe0wPht04dsN?DWOXDBarYA>r`YT3;}Hgf)fM_H|3Z*yH9Qm1B$jOLQQy z4Y4re8`_^4c(=}Th7>1uV!i!q%3ekt*+j=nQui#6ul}|qQLH2tV9k`XMrSvU_icP; zO0%z3+3t#3vZFn7)|LOFH()$OGW~}BWc7XiQweg~@jCGv5{9Y1)Y-&PO<5`;0G*52kqeE_CM?z?KkN zUht7KuNfSlt0~4ZaWffy#v35b{WEUo^8CQ*rit*%4*zPJV!j-9U%I?s{1TBNY&Ed- zqy)R8^}m(K05Y#sBSUzN&I&T7TcVM16fI1($&IVLlro4;l5rKhPy^q409WN`m*7cR t;i^%vZa@z1YLP3Ngv=IRYfg@D!I3T{{y1$6@mZ& literal 0 HcmV?d00001 diff --git a/predicators/envs/assets/imgs/uncut_lettuce.png b/predicators/envs/assets/imgs/uncut_lettuce.png new file mode 100644 index 0000000000000000000000000000000000000000..b134c58ab89135545118385f42c45f435fce1b2b GIT binary patch literal 264973 zcmeFY^;a8T)IA)m1P@lM#hv0%3PppKLV@6+5Tq1$clT1% z($vJ`XtYXbIXu&ye@bEYAE^i(Uc}|0RYOoscz&uiP+tpt-m{8cdbt@`}2@ir*`z>bZ6_xwr{BD0MMt& zlO@>pHXO}<5T)9s)2dVtu%rbrU%%7mU&hLTV*mEMi}HB)AW5B-t2!k5`V}?~&JmMw zZadFrl=u_>U%Nk1zSqyQ$Ysw{fJ3@uT4h&$(4&Kqt?N(7_uWx+Ft6>+E(3Bf#P9Jt z+th|Y&F43yk!Ly)&8qaugC4&iaWZtnNgG6aetc&%$&XkGZg_x-P?fGvjhGFi)?L2G zD5z2RI@7KIN#6_3ZLiPe#-U_Pd!rpsb7V8JJbB`7fB565qP!lq-2<@LJAUz6a`Hsw$Tf- z`M_y8WoqN4S+l^haFJ~22b&yMRc`gLQepv@bf)o)m(rsJocVLV(=E&_Zp^v&oLjI~ zgQ#Uwey2=Z{lnbb-3z*O!^I253mQ}~W~H#A@S-RtZ=&E%Q!2ukNl6>h;F;&6N;69( zNVU_{VZUbgCXE{*N)k!ZO7czGEz{6+(v+CF4HQ@sAI8h`5`)_P&Tt)G3ss9VDeJ3_b5iPa`H_@s+PExht`$W ze8mU&=Yux~HgIigRVwWa+zgS7(Z-U>jLJUO44ZY54U!nPX|^kM+a=z^hePbc^urfN z!q-OEOxHHolds2K5xs`LcYg2f=H@GIg8c$YR@U&(Wl9%Hx*lhMBAUjMj{m%0-*m)iJStpK^pUR|eIvey`Yx)aB`o z&W6L-=8xix;+~7xU2X$c16>0|JGDw(CUX{?$7X1`Pw!9rsF$ILxR~kv#2%XXfH-Ql zXLeXeQ3w6HSO%$N9^%PZ)+M-6-2A?E#blb!b*-H0WvQ zg_wdE(HN~SxN*fv!MIp>x-^anc3ouWRCgx)D`s!fr$|SDKS-fe_dH|FO4M+|@1c{x zb&#)J(Vf!XSR*j}kGyqwGmQmB8rhu>2^%|K8P~pAy}Gl5^UWK0#g;C@to{30OzF2@ z@0Tqb9bL^TEUh8dCWjf#{>^300q$Y9vS%qo&cuvZM-f|n3w>e{n@*^^*6IA2Tj?6f z&L%&%SMq+5?d(mAX1RhKsszY9qvN~x9D4x$CCa+9lU7uzboCO!|&2vL#k$cxTX zt7&Rh6pi2cp_O#~ZuPy7^u2kgik!;;Kb8uF!y}F&{ujfAvX%^dtzvS~VUbffF*7kU zAA)C*T+cDj)5O}O@|A-l0dLD=$7X~oA#CJki{Z}cVwu!BL}@C&9`aKa|D_Ul35UBL zxt@EoLc0QVmVf;#a{rD2C-9|rdu+98b9LQ9v%BuuANo$&)|U)X>SS(Qy!w!qFYXqn z(>|l-qqWJ8sv9~G&2vkSmGkeApy|RwX^uc`fuz#J;ZfV4m(X7(q((_!G*2v3=Jd4u z*vXP$74{V+KX0q$ns+v|Kf&g_uRLs)mev%TMve{?4hjxzD{gc5Vm3ET8AT&A;~i;io^U^;lWn)Un9C1n*pR z^SZzfdQJL%?IiKAt%1W`+p1mG=gM~aIB+$F(wM5HbH{hJS>8>hKP$$o&qIactd_B#t z=?ZwD;K4C1(&v?_2(l*9NcUJDQ$+Pk1*?Tm}VWw6k)4u!^1CZ3QN5 z7Jn(u`teCZY&LDh<3{Nr%}QTQzuioFGE0KY`Bvu@25^?{O&Eg=A7nl=ehK=J=#wO4yl@KnO9#m zGqqgZx?UfVxnUnGt>}BkxK}-NEIsaH-V^Nm)gx<6yKMg48g>~@_UaOx;A4elArqfw z!v0RnkIBz5$T396{Gg$s!lP_I|1y#Ax45>Lcyh#7>&fH5seE_+aRc#jQs-ge6z48# zvh$}$>4oD-d1;l%Aj2R{+k}VMSw_dx^st-+}T0!gvZm2XK9mk z)GUO27}B(qjMil3$@|7B52TY}2thNFF#}Rgv3BJV2ggYQr_ez_EF&JnplZ%*d)M)z!wq@C5Naw$6 zpT~Bobk+ZJA35$CkF+7)|Bl;?Lc1vczx8@?0|ftf?bA>SRIC48><=FQ|1JD~q4+Ob z{x2*3f7l><2R;A^&0F`o>3IZb4M-2Rk}Eaa=?$3i9IRb&5QEVH%OYOUYkn%x`hKCu zI2b!cn8APphq5H`DUX z%`Ty>T;%8f?vDi_JXVjS30J7plz1(DPjBpJo?gryLhE9MGe1KN`Aon81;pH#qY$j9GW=7D>-Fjyb0=H zt8JvWykbNwdL6ca3~EU%I8V?-cOn?%etpO}aUj;f6)s4dhn|;~jU6}Y)i2{OiBJ4B z8ga$2vj-&Nr7X-!y&wgmM=+)>I5Q1&)xHUi9TGNqF-7z>0M1TCHxR5NNuTISk1opt zU0!fDnb1zf(9$3N8?GfC0HUA6{=lE`N>w<&5#&?=54B)o?q2$4vHgxBDUdhcvG)U+ z6502^p=o3AW46XT*{RlGub&3N=KGhI9iE zcsBC{Y9WPM{p1EJ%_w~%rdaE5bK{4x3 z{Rggy9}Qdyy2QW)IyQ0^AQe4vU$_F8QM#J-uWfqK6MNxpc0?a{5a=FbRwear?k3}e zQslYZ(f(KN*1N)iMCcX-sHo^TJr?axdse!gPxUK)DMQzlbd4vF{hNA7hto3lADA>x zI0n|0V<#Q?xdP?~tuo3Yxo>f`g2`o*5F82a;LD3zgU57jD@Gk}xAb$G+NBNM$2I>$rss8);H^&KZ_;I z*xb}@I5a0&5xf{rrUoB^{1v`bRba(#_BpiN^Mvj_QGxIC=La(+5}lAS#tJZSA}euR z@WTC7Y(h}?AL6e6YP%4KnX3#$H?UPXLhD~$zX|j$2Auo3~xty9TBdr?iQZ@PqJ~laHrINQ}l%yS| z%bz;SDyWtyFI;JZW#ac%H=Qq@zVSZ(1@%06Wu4QE(N(?-P9+*9ilu=DO999Ax}T)o z+m*w+WAX*j+#8d($)+#$a(_q)&7EHyH@0>jJ9}P&()#C#M$Y(k`c1!Rg51G%{jq9Dr@eg z<)3F#^X|X@6(*0Kqg`sOq{Gktg-%q$Za2FlX@+}w=?bWyb2WV?OIkAXu6Bnr7x zOeKVtmuSITs>@&U#~uq3(YH3EN-0x|d`@opw?M#7C<6-k`g>n``(q!|q;n?da|yYk z(Oq&2rytV*%;M|V-D&n#=F=wmg;#k!Cj?I~Fil2^_LK?dfsAc8CXie=&ugdNGlLtw z1eK1y$Y?Pc<_)#=n`-&tHwA^melMMism8q2n2Xd{E!Yc%nCGh6^!NFEGUWORrj5N9 zK4ocr^0TvQQLya$pl~Y;DX$ofxH#Xx`_=X!$VTm_Ts=gBf3mtF`q-}Cg6x&*p~>1k zczPSUr74&cb|FlT>#NB3Ow>+YB<=I-75bn!U3D(+{pKNXSmPTvKQ*g^$)){AGq~#n zGij6@t{k^*K!Ct6V2~D7Xq+*vVjnQoymROP8GaZ~AFhw=KvaKrING7_HlTWCFU)L= z9?UE!BUyoHY`cH4*7$yI`K0*t5!41PsG<4Tj4Prvb9uLUc7L;*`UDK!5`6?2OE`DH ze37+W5-PI0v}bAI-t#T1PsVdc%;*6*0?Xzt(@?y!=&w|kq;-Lcy$j|gG#P)RWk+>X z$#heY=6@WjW(g{%G+O=9HHE(8$R#O~^nb})x=tf&D(++|+_NM6P`u}Tm2ChMdu$){ zzMvV~+tKG$wKye)?>+MrA%_1+3$(sq5UTKm!4+Yy=KCyoE6f9GfNX)l9y2vhB<7)M zbL`bd)8@Ixd9=4Df2a?3dUkRZiNe*Y$$$TGp*j&d&h~qxxBFeZ^WcPX0oQq|@N4%R zRid6W!&Yu%-m!Tr@iu9&2~=buH^$m$>_)^Rt*N{8=$3d<-YGaR)M!(25a}O6 zURX-x?~(O^4Z+(N`2sCb{k{4Dh3XikGH!l1m$^*$zO-p%IGw=N1^MCMic}z7xb`?t zy`YAEW~pF3MOl(RA#NnNI+{Hq6F=5))wb%>0cPhzoBq>z`QA|{;{Noy(^o;|DVk(P z8;lz+Dd?j1jCa0@JpW}vLNH*uU7AkLQr~ZBwAIaTZE4>vbM)S6zQy+m+L%4FBxl7j z(nt`TkS}%49;f?HGi?n{97_%)@=Rj-EN-jMc(ijAW}E6FwMELFuo|;{Tf7AcS<1(G z;MnN3F}>l%;$*NbQ)TYoQ6_fdxf5vx3oE#KE#NB%nseO3p==I=RZ)9mmIOW?hdtYwoOBtB$ z!GE?pgMAq>T$uHNDLw&|P(9n@(Td1wy$E~i)AYR-nz-A!`EFxM<{bZteF-RbX zcxI{N6aV2NmCT`(&UUJ9mUlARaG#?ok02#+ozty;kNJ}(dIS1N63S+FWZ3{hv}g!5kRQq&j( z@GqLGRrQ9nU(~%Y z4o}5eLLEr6Y?4S|dT6hY*gPsm{wvP*+g(RI?CEuOzKH3K9W=>&E(jUl|LgFC{9S4` z6Z|5c>+;jab^p5W&!$f371AR?J2kUZKmf2I6<;OGB>IyzBui(GL)yzXDIB#%9=AE- zvB6#Qfb(4!+Bi``gy zZ3Ah!0S<$E(#W;e+VJnl2~}sJXn#g4_JG4-r;*v`?J%I zbNzZ!!t44_Xgl#lPcMwnm*kfhD>YBLkY1uz)Yebj5JsU#p0A5J((r;S`b9?HH?3`;GhJQ)7A@ z_tctcrFmc|p8f-plzEU=Wn5+mLMsJaB$5^Kb)^fg5(-l(mFJ?*p=u~gT!zu`%Z=VZ zg;+_R?l;F_k!gW0-P)8N=r7cy=;>Z6<*3D(D-BZAB@x(l-nx;tKZTr#K8?ZnclT7% z1xI>gcMP8&-S~eVo$%%zhVfXvWySKHS>-m8yG^3=p&agsAQM>CS&n$ekxr>eR#ri~ z-=nY3vx!3w!c`z3_ z27{av%Hov{e{a3}7Ysap**Okv_J*dd`@vQoKF&kUnj$=#kTSeVQeHdR&{#>LuW{4Z z@HS7T?u%bw1)ZT1Wu1&tK?l*#2~NgV{n{1P@g~8)-95ygrt{pM?k>tz9+P{$ZzXm_ z*NaoxED4HzdC0vt{*x(g)oB&|MW-zPI*UB+BU;Hik)I8aL}0N{!{1J+8@Ukc{6tiU znDT2U;?^VMKui_&81+*v{TA;}ZG9n;r#jPz8uY-Rn{C=D>A>`uTq-al9-5_890`A_;QG&-#4Vg7OU`r4@_tQzft#I&BVy@!203Gch( z6Hm{p!;|J;p4TUzX|kS>0{V|a!jnpTHM&wReeZE!WPkZj*YO2=N4^=9nM+RDMyC8| zBJ(|qk2Q$vA1g1VaF@qumTsJjdU1RC%25!Q&^C{N|Z|BCA zTQ87h`)l&+m#;)!zw5Rw+<46$#c}%iwWQdZW)mHb=Dx zr$KcDTp1!sKX_>6AwaK`nM@|}zEcF5?9qb6tg>6XN1MM$cyhDNjm#C2YdU`zPu@a4A^iCr}R8iaFwL4hr6OS+`GmW8Y|aN*6wli-M29> z9{NQJ^%d%=VF2U%xe(SH@^)KIzh;7jwaCN3Gh@XY!wIp#QH&(Hd1vLtJQV*1V<#`Y;IfD^>I_ZOr-J zySdTMheygM$GEgN+Awd|$I^8~nw$8I%C-ekbk2A7fS(+tF+^xqbP};$}+_K_tJ~0`-b&pt2uVX?l!JzKh3AsFMWI?GWGtk;q7xIUT>3P zy*DOZ16&-uFXlEZ&8l_|H7oQDBScfD$I&&VZSpOp#~5&^cN^x*d`@zRz>EXo3beuP z#@DJ+I7U^CA0{(A-!;PPaq59|bY5i-)P*_6-7Q~i7RAe(z3Qp4u+@ePYR*UW@@M%q ztvWmR=|{9IE9>E0h*#qz>SW;IV8~m`%0p5~m{nbr6hprPs2bjHg4@TKGV6nd717G- zN>{37QC8wvT?(9S0Ysq^ciK{Hg?jkD0C3Uosn>GmSYSz<%``i{y8ByP@D<^2Z3 zZcd(-CPfi&zuUUW&I?%j#TaDL&(m)AnRp1A{RhkCpkNXfTs)eN+l`ak4TQvLQ#^;m zJ|8{GR{_EBZVu(u_54beGchO)F#vp^h8baM=x9ebC@cN9UCtemovD=X0a=6NW^BGrDZHwD;o?rgF!5o zl_keuj`;YTGHa??DAu112fu#VA-ec{iI~;V|n#0NMDWgU)pfk*@ zPJ5oZV?ZgjSV1Y*>qo`O>lO3;zXicbzxjX0U;Pb=9a3j5j4;(@Gd)tzkeef&8_Fao zh%I%IUW`6JQ|q$qQ%Wn6Q7rYUU=CD5X3mAAq~|GH>~na4{Ki!=G`|lg3M0(cK7j2Z z4xr`rTBl;30kqRIeIc*R0?}iYVuN{ZVCpF>wqv2~##h8NX9rC+A4jdoz-3qGzo0K0 zrx|eT>3KaVJy~{@u(9gotSZfHFnEBx)6k2?Y=51j&Q2~A8g^@afe6e1_I)(3lBQKI zQeK1k@DvsT#eF$@De2rLvAJUl_(f&lb;w-1*wS)dIAl3ccio44b?Dfj#eWRRS+$6w zDFHX++M+h*dhj0epx;&sC!FzbTrFnK`JGM(Ele{APC|^5URYQCdPK^r-d2MIXI?OuPE;04OsB+c-a{WVrpvK}H1|8KvbdB<=zS5*H*E~cU z;|p^|HKx9;VKBsGYA zn!m0LF}5&sR7u1XZvu{|ISAtMPE{fy?0kAAAk?g7Dfts@geLhmAzJK(6{(FKZhX}i z`I%(KpWI2SjHg%7Fblq{rtJJJrjvyLgMY_X6Q)U$=H6>;H0I_8Qo!#2U_P~_a7!Si z*U#Z@Na7Rk{h3aytnbC+!O+p)y8r1-&)v1Jq7k#q2L*IsJv6&r)aP-O^W~mA*R_RTT~<;wesByJC0ua_WxRlsu#r9)&;QiWZ8J zkLF-Iza=i^RRoi~pvbIMoOHY#PnVcE3aBb^Sa$y)R*kJiQ4S zwt?yWexznNZ9Gt4^swl7n!VvZ@XNfz(y}QB`@W5s5Ugf->1Obv;I4yA)wO-sri=Dx z-RyNlt3QP8s;{=PfJAtV*h0}a>!XoXly;6{;oJO1MYbe4sX%V|7ovgBzKE&lzg~_A zgR3}HXpV)QFt#z_P`jXcaF!S8y(e`cBJ-YqOgJttdv`j~#!8%%EiyPX{YoKXO$(0< z>swmx*DR9t$$3}tE6X(P2QYT9q|o0K@uTK!j+UAAVuBzsTnqsl4J&j(m&e3$30zQ%x;&?`pH9INuhwD z%Z-v;6fO3SZTHYafr#r2JJu6n_cS*%JMJS)@Lu)0rUhwsFcV6|g)ArEWJ1jqJpJL> z>e22Rqj7ZhLT*mchO{zCOR=-vNXkD_(FH};*WH_1CKxBmcI_mIbFy}6*-HP*O16VbW~qzO;-|IvS^h#2$_NX^aEb;qh%E7Ctt17RA{`ImlmQ2%)V%s5 zQR`bW<8De66)iG8qQq7Fm*}(i$8twAzL7Ye_{(0VH-3CcmK*ph)=90Q^KA@zWMIja z*>Tl;ZN)6~-tojgLbbdZvr5qTGCb<>Rfag@Nz@AnFcp10Xu*50;pF4x7=O~C8l@5a zM_Fll#U4h_dij?^T`I%}t36>=NQA`4{ivs$h7;uYWR}l8P1^LB$g9(!?)ju=HDbM> zSx13Rt-$*_zx4*W8e_ZubYb!qUnmaLEdXM=5-nE9tW^oq&8Num{VPaf6?%o!6fF5& z-uPQgri|ACx3gV>zPB!%4A*J6&a(t^#l5zRH0IAzh~G<>ZOnswCc_Ip$M=S?dn z+aI&kfnwgXc7J-XEvwiq=Ie;sw{;tgmvox=M;+<66(UjMUKq(L!8mTMm*s5W%c)-I z((Bs`A#qnP%TC?~L)rC8>zAI{1XL!YNlyK|6igQX+1tn&tplY}5H%EoEKLfho02)L z01qz-#1c>5fMGXU#s|ZinbH{vd+72iembhVXnOj!jx0TSq&oM0G@UZNt$h(xMf{A* z9Ulmdzf~L@HTj%we0*9vI^Rf1Y`m>qOXVew9~1K%8Q+J0lXFp%zG&b<1+UAS?d)8E zuow+sU2U*|p6x2j2Arz-;)Cn;8&dw1AHIhjxvSX?i0TLW3QHyRfr9BJ#W}o&hFu8{ zz*pQ-ullim&C;ye32#CNLy(k3eT!-Xq4dANDbLXv)}4SH@Z?E#21W2JyaUm`z>gwrQ;KS~mX8dbhP9ALKk7VACrF^z}xyfM#p8N(lTC%8g zFJ_@Mv>Ih^VKD{KE!OSr%O)%&=ZR@M!^Hw~97ZVJ;Qc#Y1Y&%7yj63uWOl9S8?!-# zKef=!07e={xnYDLscFAqQL;kS$?6LSm{2hmShFXqo znm>zv)bak>4d#8e-l`{l-_gMJ>Zi{Z(p%i5na!h$Ro8A)7L_Pn+nPShCKwU;g^Z?K z&p+k{)nJ4(1<@Na$8@oGwLfQd*irH^EAiHN+u#hFuG$92;@p1v;%>~Mok_+diy1#m z!74_(O|pDV4p++a8h)I3gE2_?O^f58rPh`sY?G8%2|YSEwi=|m`Ys!L*>%9*^cN<( z9ZZ6OhKTOVr()vb3q_E$@u355bS0O$Re^>=4fqqadH^@{t=F43G*w$?f7I_iS~V7c zVlOw&?$obmJ>Sr3fp8S;%*rSWZD$)DeS8>q6+T7W-Db|*F%@6<*zK`FR|y&j_==pr zWHESYrF2S+g`{^wu?w{`N&G6H91XU!OF$W8d}<9!7AU`^MM1&rJ}QSCO{n`To&yZw z?l;$5+r5cp>GVq_2!`x3(5~q7^9h>u?Uw@Y% zS>pNf{G!L|xncKqBh-1*Z3Z;%)!j%Sr#n45+wVJ=NpY4~*4xIJSQT0y z7O!Gqzr`B7{K9QN9VbPDu1!Z`_;aYWi>dv_xLSc|UQtJJPkZr^)P#8CSb;cw5F9$z znZ$@Gj`s~O;Vvk%k1*y`CTFsgRn{s+7$zE9;VAt-eeXcXk|G1&WL6zxyecVsjf&j8 zFt8@BmS;SooMk@T`txggE6&VhVjagxRiTiK!-NPV?B7~h+4j^D4a;Rn06k*Murp>< znR?=V3vBwMgI96it{)G=g_5sFg$hU&S_vrI3CY)wJzwc;HzG^a;4k@dd8z4awC~2@yjwUC%8Kp4j*xGR)7adO( zH1)D=go~Yn)yvCZV<>b`oaqPK&SAE&yb10_&kZp~BRdl+?kSz(lv z-=k)ReCbg~)A5ZW8){swr>ynl)ifM9{jMq62B(h%D?Wmc!7)UEHr?0=gZFp>hRovj zHoZd&vunRgvU|OLXHvMz(EA`x?ydYEIf;;G48U;AtbulJ2c^Is+)hRxx#s{^Y7?Nm zTfdO6q&4IGdG#loQKjqaLF7x?|IcYI!uf3|y$= zxWiod@T*|mzwSz`Ni&XragXscHrS1N_AZ^QE`THD^wtWI|Gcw=O-eC1VDz!B_|H4Vjny;5gEW6tB zDAcfv3R$?wzuy05OTw85DeZT=#P9&6@eX7WZxaYA6VC|nEAux~QTyjn${EO%H?zAvhI8Sd^LS*i~WnP4_fM^$bfQ?w`$q{E_^@3qQg9 zqn@Uep?$7_u~l_&m-#GvAGNV(D*a^kL}G1CGMIy-41+NHJP{=P>bu6wTBEnSn9a>T zA$2=f0QuuQG7$5+P2fofkbZrtR)N_GR){OltlqhU9yxp>4@9RKDtRL=M}Z$sT8&Gj z-)Fj+pCWO}zwi0v_q4Z;bVAm8blmrT6njc_?Ru8WcK#>JO*_R4wwRB(eJ=0(uG>>! z_c%=2MX@bL@9rb1Q0jVG*6M6vSW28OmI_ZrFh*;ZaUz#ei*7sSYnw9hQJL% z_U_bL{fZEAu4neV8EBVLHPB6Gk=&(spG{}AY)@>}jsw6G;)H2nW?8$4+PqXSCrN4n87edk@l8~RJ9mo*_#Ln!38%q)NaG{uRFbQ9^${t z)IQSH@9ZwqCn$^Wu?(}YW2~E&%soC_&WWH4DK&&DxRGYg+gX7c9V^d{VsI$1dC?`S8_rlR=gTSY%scu01`W{jrsgn*m}ZF;@LXz z5D+nc2VZFeeA(7_5_NT+S?po9_&wgQwo2SH#S+gr;J&y}QpuY*o= zrYy;(xa!MEf6vX|+tWG%MuAubIlt_^khyk=gmkDgXDZY$oPUK_5G)A8bDYQ<6Jk;ce z(WGi>;6ygjsgt1{^B*KQLl!&rOB7&Jo7=QfSlw<&*$ACc5JsH0MWtt9#gu?Ouink4 zio+uf$!p-<8=cenk#fGYXGo6#Q8vu_V$)>oIK-%v>6A>Te;od~Zw_BjKU9;goaWiN zi}c8f{o_T>{joJDsy302j=WF+Tv}hYx?tP<{eqo@ITgtE^<3arwhDc!e2~Jwug(|n zLW+XlEN}YXjSXYIqR$ywb^NHS4L+wq{dY39}Wm}E$8Iz&nYT^uOA`$6ZRXHp|K6HQL6$NOot zcO(xQCC^^3IKj`0UCGAwslLS!ulCE3T!TL2aUdUIugoWEGdjKi=B{;O^@&%-iz&uv zZf@LcE}Qnv;6{E^F?Bfcfkm!bF8AM09?bpU8Mn}2(jS|+<6!~uj1aB z)HwS2W^;RkkZ~&Wc26|zR}bobi1ELtQ_%H)5>wrV|M{&{NDTC20mWCBl{Bjzh~+iJ zKODcK)q7qCcBMMn4*TzL=nef*663|ovHZ7qSNN3(`NFxqV6aP8>Sr>vd_^{9yw;M0*-UFJp(tOYlSUzv;5x>PX} z)i8IAa_dy#x0n|V8tB-0T`x+x4l^Sz_PLEDRU^dsjP39|1%j5OKVErvnCP}mzm!G~ z(4tb#!0CL+lOahjEO$Qlu=M_-{vMhW_R{`x?~^7tFq46I(x)<>cT)a)Sbmdx&~48@ ztpzxLc#VyjLC0-);R*u1Bpj#CV#ocefb5T`wWcy?^#@E?p9a>V5X93;Y`g5H#LhqAY8k2f}pNZf;GPt<6Lq(TBswWe6eP z`asR?Uc)UvO0K>ID+2KdVG=WzhPo#{(Ms4WqQ97nl3H8!J{8~8s0u4_NlN2tXwECz z^A31z56wU6@X)rDuFwvckm*-3G=}{=1`m>PBX$AMn<@(S{)-`NH+EeZ`%#*TZCMOC zxH3|W&O`8HfzeBDY1FTQ1^QzpRBN0$VmVG^x;~9lFvQ1ivi}-rxQspZKGkcr6^eM^ zEEY@7xxHu%Exq40In3(7e4QoTD#MxTUReINHxHytSQ<`JB^eUlICAue6*nNj1Y$sc zSH*%qI4rBR4CLjTT-2uPS5Tx-XDEyyXQ&J~nv)7C^Ep>PyRM{&G~Ny_8c8JB0xEyA zATr46c-UR>`Fkw!G3^Kem1HNHR=#xE zyAg@}yj!D;S@KeCzE6=?XNYJxcCosNu%@v>+Z9}IEG!LjtP3ZmA4p_r#8V1ts(&+8 zrnb*{vrA^Zz2yK{bi*3h>QN8RJQf0N9;vhkg^aYGw2zK1r_e_C(#@dfX;O-Nn5AI7 zZ`JUw4%fBsCazT>9++hTc9yl|X0e2#$18<@5!#e5v@R?jMxevG+7*bdEk63Kh`pe{ zL^uUDHQ#%Zue;i$u!-lKP+bCpL2Y224DGoUbuAi_SPc45%ga6wk|7yh2+`yyq_AP3 z-D4{IreBpBc)2To4F2hoyU^eHg{+FMHmRqv(nsX?gPYS`go|C`6blYRC0kxBW1Vh+ z&GY9cyi-tF#So=-qYa(c<{UQ`r)@t}<%&nVA*$J|mr-y?2{F#v0=E z;%Q5sdmRx?NA`A+XA$UhfOP~`uOc7Lw~Q3Myn9Fq_U*nctMC7a0Inz=6FZ~C(45Y3 zrM*HUw3~BJExsOZ@U1_)vJlrSYybmU8eJ!ke597*CVdbpn>)jCrgy0>?S&1M@^tkd zi;`(ILMk(L4hCsC*aW{R+K79wG_;^}zW(KLo|%!sz{|mH&^8%H(=iH}c-~Uy`v#|r z{N;L8o(qLU`R$Qg3^t1);kUn3hL5>JgM*pLECFl51GIOv*>eT)Kb5x5g-Ny z`vWiq)fV?aa1Lpi%NeU53p_yKUq_)p(m}kZC z(K%vBv*sW4MqgYW`RwbaMoqXQUh=1>n$T->{=*{PW7!A^11A=oaw^XY&MvS=MT!cp@K;)?J6@Pv$)R*lh7% z1W5?~#~yl#q`xSp&3N9d-q83x#Q1nWtyOV)%Jqg0;NejbUBBT_=?D!|oGUaY1;M3zeU1e}@y? zfKxgtWEz^^=jX?i3KlPtD|T5TWEE}dwS3ZQZe?;t3G9kJqw475xk6|O77vld;-aeK zKLI|RaF{#WR10ra7(y_`j?^(4jCRJ~k5GPRFev3A&tTw9mJ-PjEv$Z>6+Jk4%tKEcv2onn>7{G?)Y7`0uQFe)Dm=3wiLL5k zuGc^4Ry~<`^{Q-Day;fNp;_#{-ETS=f=!od#v2j=UwNwARrdG_x4l0eO{ZB+%B|OG zkDS4#>3jgpMcdt7HeGD(;pMEXuRE+Am$(EOS}!YFC2jI15b*1@npWZ{za?|kXU$s^ zN%#%q<)PsdQpw7D>3+9iQkEr!8n!9u009R>h3Y?4sZy|w^b3WSXiG2X8Q-(=%-zra zxQnE8f-QA~>zsLWEWH5IF;1>v6Bv&$DWaZR6^n*s#f4xtSgQ2T%fGmn3@$0itnq>V z&ao92*8O-CQ-zMTHB9Dta&vcTurTwt5C?ZM7lMVJ@743*um|^8K$D7I=#0!FqDia% zlPxXkNLSx8t}L0M;{0iz_~U2cY_fWayn)7_C2xyJKE(5ur`(2GqA^lX*4`$v=MqbUV=P?f3Z; zf7P)B(gWsuBJVr7de?tbkZ*XWWOJhfnQiN5QuD+BP#1^ZZ#$^G!;IznM$J*N#>n=fn0!IaEU|QtHjL5CMX0vogCV=_^%bRx`{11m3!;@p zc9QvaaUMT&O;qP~Ze3B%?Uc3K<&FF1;PruPSf5;Go1-zjjc)NiZv*0fzr`k`lC5r& z|As@8OoM}tg13J@kD;Yuojab5_zlA8B=EO2Y~syU=CINE@KEdrKD4w@suHTo!J7NK zo6M3!k5An<7y}*rs;&OKSMp7U;cr1eUP*o^@zU|=QpgX%*%9#=g@04%^tL^IK(o^% z-jrR|j-{fqOT-e)#;?QR$QkVx`7)xm(~p|tbTxk`P~`e;Sz1(MHOI8rmf#nBi?4b@ z=8=6viDvW>B33u2Y%c0~g76kqMH7)%Y0qhCrEpLcE2&`b;zTRwy?^OF`Tqb7LGr%3 z`LF~gRBPOyUU0wkiYYMViJRjMsc#9Gj}vHw68nT??w-0pRG&b^3UFp?XDBCc11ABy z<;x%Zk-y^h^uho9+duQO|AD7hpZQ%=oO&g3Fc|zq41qQHh9Dr!d1l+z{FM*B@Ec#; zefjUdJ%9K_!$va&Hd?5@Kv(uDwSZ{4?00ixy3?1H`0e^WK6x$Y>hU@p58HGf zpWD8V(PS5;u~*$Zq!Ljg9$uMqVw&8%Z??BjGp5N~TVh_JlHeEU7@5L^$kfkq=o5t2 z*W{S16tUi>tY|1*D7gqSizG`Z5iyTPP%~<4RI8NQmp%6dilKYyVhDXvwLcsoVj+`5 zCQvD*VofhSOX)4p*WMdEye%Fadd5R_)Kl}jy7G_M!=KF$2otESw~ZzE;}Xa@a_H5% z+M4e|Y!%g&Mxlj>1VP24K=uIuieXDb!K-yvea~Z##LN45Z&?d!fl>+|uOE^~%+rB+ z_UX@@C$d}v6J`^K`HDFms8!k4JC^z(+WUZJ)*~%eDra7tUOihr|LS+X{q(#3nzx>Q z_P0K{di(dskg&G>DgG-T41Q`c1lHi|j))LbX5H5B{h`nQ@qg#zyRZD&hXYusSgf?R zp;jo;E&?i8L{xfwxBRHqUzBjUc<$~RxwL>@$Hdr|1qTT(Lew6$mGrf0n70IXvG({v zS6mQiL!_{5D`p3tKm8O>Zr&n>OxYIB%PXqhk+Zkhw%SOui@H)b&gVM_MotNnM%6-X zZl+It^^A#fxV}Lob2=|HGbHUxVB81h%BeoI{w`0wSKsjILo@e2Nr;4$k?6~_wYfh_ zk)F5OyuufD0havSn_%if%DV7)WS4SbW&ZWv;nQCAGqzT!)d&_bnSEsuy(*=i8jnF$ z5YcW_mxnwr>vb#*msLK#>?c7?U4C=}kwnrZvZF_6>@Qyr3H5Y?y*;{n?k?{XcF|>* zqwJsQZ?c|_;95+Bi&{LaHHZFwl18QS?Aa4y7S3g1t0zMANk3I(YrcXf;HOw6Jj%hf zE*xtY%yJnf5DBO@YFR1e%(~rkn2t=7F{PQq;W<-!#?A2=F(#Jf%(e;Pu5y1Cnr)aB zl+8{5K@lr#_8}kK)?adW{_yubJAU>*{FZmV`)|3qe*VLY-TkO}k-=c#41qQHx?y6Z zkT^_7K6v?+KmSjD`M>}7Uwr(*J25JuU!1T;(@O0%g~t)#a{2Fd_Q1;h^GjPJM+-@W4$1LA-($cOig4pUkX#l6Xp_7zqTA&$^tSE<8+nqPRU6 z{<~@3cP|DAeOI7WTJwoWA$0+@XGuK_BbY%`UriK3@MFa@v|`WBijpqXE&3Udo*`EE z*ENL8`z1w>RMjb&S@dPY*=$+LGj9^PhI?kIYqwR>7SqjpBEkP{#$PRqvWboJ}aCdXK2TX=O z9p`PC=0c$^J`qZP_`S?blLx-WL7c!n0uP1?0! zhOhexz9=~aNXfIQq6DgLmkLocH;rou#2)ZT7jkOKo@;I*7w=XuuRKch<=L3O-eyKs zZ%c;o)fLX&^#1Vt9zD~`hpkn#HWzUMCfz*VP4Z0}jRsawD^#m&rvhv=scg+ZPE#6< zIUUF`(yV!onC(6(304}SJrKKFM%y?Oq75*aDO zn>83bW(cgo*Bsv^IJ2&G`uux8_^*EXgCF>-O-@YLhRBL(^QF9a)xyP7mq22K;1v{K zI1FCF2>s&NdtvtQSpJ1Tzt{<|Hyb?*O1bp2#7EfoFY*>qfNpjd*pnYH^9ozl&DYkL zaz5V?W8~(^Q*I7V5euB}&n(-C`{hKQ;c&QSt9zEXaesP+$qM*hysexml=dmi=gLYiT2|OkEF9#;TkT=(BOjr7^V5bZhFP*@*dr* zm=gMa#Qpu`??c^nSkL~-DH7x%h*kUR=EtQdiyQW(VzFVhxED(|-!&MF6tf?DQ8XGs z`n&$M_H_SKj{?zVwCZO+hD7W?3mAz$;>^S8M=9=&y4 zPOQu7L8UPf(!>-avCWt%DS1RkDJx|wh(tC%`j*eX|MLI*_(Ee~Z>G7R*k|kZ3%9pnd*G^|$Z2`Sx}H$m5NS;5z|GBpWu5rw)kmz$3-SapH&hF?t-kMY z552tPb{WgI(pux{>Y5M*Q*{9l9;$1CuapTvyH)IQRUs0{y_%IU4Q%Tk>=}Ip%;k)S zM|olPD0X4@S1CyJoGGo{59d`O)r!&ll?X17QID-Ct$L-#)LVkVt5Hg2pTZQ0l(tfe zT?EZMrHcR(bGZ~#Cg)6uxrdMLZAus7y9ph9>9ML&x58QqDFvo!VoI5i5?l2J*^hmD zu~*&9@e66C030Pv= z{1~P@^#EEy)zjHkb!0&DO!VXs=%R_1p<{FDF0dmnxAH!Ql44v`S?pW>xYC7HKabZ_ek zKBblRXawL#{fsR9*grG(&<5Fe3_jeNzM`d}n6%y^lLwcL^hki+?f~{eK(<8 z-aj5i;Q!?m$$9EoUfT6_x|q!$d~`h+)qGiXN-;y))G!s*x zmW|RHTd8DGgg~tuwH8XL?tAO!Of=&YqJc;yr5U0TQe(PqEO&Q&`MpXA2kNH|M7ze! zMQ717_ve?iwjrruD799EKuQxS9$A}`^N}fCGd;cG^zn=IC%*7s{ie?>-|-iJ%cp+Y zUpr0L|DR?as5%(@RAmUP!A}}yezA!mlhefA^6~%ly$`I9$!7?D5nsq+mtvJ&Dpz~+ZkI-T(mGwFHE)qgd#w!w&`fEn9&afRhIo;L zSY)@++oS3g0J0mkeK%o@nd|E(++4qdHep*UWiv|i>9{FJ;#9d`Kj6#neV%o@V>)IO zbDvcV7?oPht0V-RvY5Mxhf z*GN;(k4hSoc zwD!u{?gX#BqUEcCjFpfwx%i+X{Wba-bANYrTlTJ%h`ulAfU@;=3JV zj!4dxYV97hTSka$teLYyyKMmad}lzDS(Sn z_nyHn{>=8N&wcVW5~B;`S}W_~x7o_dvaOU-DQYgj%{^yoT=K&LLJYmS+pB^kA;mzR zZ@3CamV9PgjobSdpr7Y>_!M)PnI>VLg{3Oza*HmjzbE<;hmx4`HCsJ#b$G(@>KVa= z`5?q8a(n;5&sWp`sx& za^l6SuW)W3QRSAywIAoQC`cm4+>gO49KNc@dgaF0*220LZmzEhL8z^I$U^j1U9i{B zg^41>K27J#h^J{L%0%5NTWgpa(=>6Mj~wTt3&w_DynB0Xe|#}F{Hyxo1gl+OYOnGY zT2;==y-yk@KWDXg2A7KTt&MK>mM#Q#C09!&M?(XYCbYH?LLh}bz%--X$bHB&(oN(c z_BBAwTWq_+YNozA#{g*@rXwN1x-4v^TqX=-6x5VuJNw773rY8JHMABaK+`kZc4Db3 zwN~bw$k220sZHAqXMPeDv{q-~Yp3`D4H5!`m->#!_LLCUOovo9Hsj z4)lhMMVeS2P4^Wd!AmrLo6yCTJ^reP$MwlSefV=nsSjV%A69h_cJvFg3#cwo*u6FW zXH^#zyJ*{6Ga`XG9Y`@f%7AL_0Sb*6-2{Jk{{l&s=TC0fs`2XXL$n$pW{*V(jXlBJ z{X?ETCB9^j^Ri$jOjGX1tw?|*Lh8{GkK@2X57pc&U`Zyl8CzMXRlVw#BlCP9q|{r1 zfEmpyL3%ZeKDEiEvQzux>0pQni9g~_b2`9#Or|Gp|tKIe|YWuLJm}) zd^;~IK?2A5$dm&n6YE;A28X8;F=v0>`s)~@5W;l1zhya5OK+hHEX(faGGc;O_r=lf zy{h#@2#KcAUvKjYVeO{;+HR@!L~ZV?+M1FzljDR@iAkyLp3~``tyB*4k!hMpQzGS= zm=dWKS_+i72f7B#BCYkRY_Is$sw~#9VB|EBLL{ch6pvmJj^cjAp2+@yzdxH<_j2_& zyV*X(+1C+yY((u9KeNCJgltGkoR*cgZ61peCvrX@Qph&lb@>6o!-eDLbMUwXT|`onKO`_|v~{Q8}LKBctPw*HvkF$RNgMuxx|yivqFh%!w_ zzVg8r{?|YFg+KPcYnXMWo?T2Ml(p}Ehp=hv_0yxjaJ-q6H+9K`<)c}bYQ>GYd6YY^p#I2=6>-OF{a$xUO;V?Ru*c7 zDdir~;A>}Ev&%$a5FdargIYcGb$@@X+d>G!JkS00>XWL?tAVvGB#EfS%XF$zSnHW} zJ=64riSJt^2A7&g{!Nly!HH3#2nDj zxL;0hHNNsswpRa=x1PQA*Gwt@$;}$C%j?15o0B2125*c#$4E{2_`|RKqd)w`Kl%?f z?zwsENVC;`h?ac&{6wO>G4vzdTpOv|DWv>gyR0I5bTi&x^{7c(P`NRAl@)aDhCKtz~GA(69BgY5?I)?1cAJXS&V;V1v&@tSFxh!Na-! zr{x8ut`G~wZn^#NmZhA%jTj@-AraGz2t6BXV_kic3nGWZOsj=b8*{$q$&=?ixp__q znOY%*8DVxaGu;!`{Xw22?n|62o(^sbA^7CnbU2bjgiD3)VagBaE!uqq;L_~!i=wuk z5AXZ@=x0&czeYS?ON`npCJ&Y?ae>nws*BL`wW3@qG>60CA|P99tY!0xT=a>+y3##S zZm1W$B`w{=Uv;BeWzRG-f}8ENQr4|!KzV>_t(9e6m}SDm+o!%9+qVc98zFfl#a4aE zGz4DV-m|P9@@=2}Hg29iq1KI<6Vr46gmtYn-Dp}pP9rB@MjfPQl?mInayp%Wz!U?A zDU(vf5K_+MoVw`jazuNp)%<;a`LI@h?eVCKS_|4LdyK?BpP{O#8L1CC>@8Gf;k=wE z^-MJ5$<2VXMN^t4x|BAsWRBwKnvm5QM{YMLtfL3au61 zd-bJXda5t}vv;0<_V1h1)&D7_?1Lf?|ELFpZ#ss+8oU{dZc3K?h4+5=-~RH4Kk%zH zZp??oQty3=FZ6}Qs(mNj!)4oA_v8pjhzPNp%lE32w>s4Jba3mJ&c50P@N_E=jI8(s zQ>`0jwO3=*{V4I^A(}?tW0#0=Cg$WpmoZR^$0b~Hp@Jd7Xqy}Ir|CdWz5~xE*^Hcp z5CvFyb@x8^r;jLh#%!ZeSk^O5g(uJ7p*6^PCZH6>@4_B7>k0mzXkL4qx{GM(p`sEKhoirCttq7_O~I&`BuI*` zg`x%1+M^UU=A1D(u&j4{{P7F48adB=%cnleThHHi@0NHp!+Bl%4-Kw#-H+!2zcpjq zs!uW2#`%0=+g7Iez%*TPeK?YHrYf}Fu{QJb(!75RJgk9g{ohk5g;wi>lJYYO7#4&q zUJ;Hxz}5d9w#(}*5eSu1@A>eBQmgUlx4w;MPi{~(mc@WdO2V_}Z=tnOtudzn$rC!} zS%%+$!jtQ_{*5V4+gis?!@)Nv zLtqX5jFB#`6yr-D{Lt@s_vIIVwZ=-A5>1K+B}lu3VtYkH`;uSZ)n?kq@Xf*m&uzR(> z>b)XfZIj0V=|2uX-lz8!Ic4|F;nF%7pzRXiDvy0$;+4o+D)(*Ucs%&t#o&Vi5~0?O zW$9Cp=1E>I+7hLiw-T#yn6B7D<8$Bk?R?wkzLk$&yyEuuzE_Aq8|(|Ey)Y}BmV0hL z{Fv61`7i^7-W$}D^Ge#~ITyYGF8S0BCNGoSe!^Wg?#=6o*QXm7;q72Dfo zVV-7ko`HyH!YpyOyrh9gIZP8*hZ}4wlx^k3`J(AE`c zkn%I0JbBKyeCl(&x12E4A#1djc zj1w^=uU?tZv~qKEO>LFsyij|qFUCYTW~Mav45+^3xG9a@2iI4|;4M^dvAOx%dZMM6 zUA%KHu=)iVuY&oey+?`oKZeU@Z|V9F1XwgwAHqa;_Euyd^cJnZPkf9~5EHBmI`#c9 z4_>cbwA)u-sD0XTD_$i$oifM66(M@`hc;u|Rze8O)9fo~ns%>P?uK|c9G>#_J2xDz z4y2s;=*2Ck(*l+}*Qy!Xl&!3n!2zEZy{D8)h?j_4=EKZ1C1Q*&-h)!K5yTVc+rBg# zkHcuKUJ~<9%Zgaw$;}lhADN~|O0&mj^vS<2i}A`Ly=7amQdze%+g2`B;%!?{73S$k z&cf~8Enm5Rm%HVj&wchgI2^7BIbv&N+cxqf!~~^PPD>$GPj~n8;DZ7o`c!X9-X1l{ zC_*rplCso~e$MjhEZ_6evY$&I_QA$`Z7Aw3wgf2Xx@S(}n# z^l#j>p2ehKo13~-Y34agF^LPi?(4B8XcIKxqcpAzPAQ32=jdC)wT&p z5BnO4m-FZTEbIASzFSe%lj`XiVf$@uA2xVRL_Op=0gn>kdHwJ5`0I9aw&Ixvf=DEV z2@z-(Q0-9(>I<)9Jdo0a?@MgnM(p?dAgE&Z-Zl1BHJ%vnf+Zy3$+H{J=t4=_kQkVb z6Sld3D8xW)hK9&|IFhGKiW#6+u_|Jj)9pg7jpOl#^|WwaT$tBd2qAhUup8K~;xnGT z{WjA)QA=Ulmfo6^Kas-R}RK56pRHU>;nV%sX~ zx?vK1>Q4);tgL0DtUjy}L+%wtfA0ke#ORf@n`bvn^MuOE%e(ie`VNPDMUB!Y5Va3v zBwDL1bwl=bK^j;#2tg4k#8@e7Vq26}jbqBhqu;*(_uKpb%hR&{rC0e=|JL&-pZYB+ zr61n?k%Pe}nIW(Se@d9!g^4ktT6y>5&;Ns8`RGS}>wUXNf?+{X+rWwotI!bLTS#KJ_kF2M{OFJ{=$@kAqM?QM_ey`R=wzUvr=IPBdQk)5b}BBfMf-xX*gq@2jv$Lv)T)*dQFA-aIE+Gtwb$}WJ^{`$GN^c{kr`mo>e zl4jB05&Q3|9>XAeD!EyI-F=#EuS^+=S?v|d)hmD|B=d{A@0t{wd4(X272nKUI( z>AtwwmmupU-^^Rhu|Lk9BHm@az%=deiymHTK3GxeMr)On1M`*VYy}G}wGdNALg*sY z7ckewhc>jq-Q7JeK74^-TwNcznyyJ{H?z~jP$<*51dnhx|(B9&v(fv|g z{9ygPn!UPZ0;C?JAUy|6(GbWvdFbm_-MdvAr@Ir&dd94|K$Aq84jc|Q%+nPqX9Cf? z;XT*O<_0&7tt_0kTiR_zZZgyC|BlwRcshQ_L^)t=J?6v+L8LYU|p8CzVzOo_#I#P_`m-LFwd0YZ9rAe%6iS4(#`3$*6z2F9zdC>>Y^g0i5McP zLMi*=?0w3PUKKKG^=g&u`BW%KH&wUFWi7UOX46Av##gs)cQMru(fTVW=E9_3D4Tdi zQ?-kyy%Jf#!iLG};iAb~cmDj090M_WY({Io_b1Aa;nV6n2xANc%a^K|x03zOK4j5v z9t>0E#f$e@wvFrSnbtDrZR32uvMdXVlBb!g;}!Ef0mioZLSwCs+uIkEZQxOvWvDnXMe{K;svhSz2L2rTj^y~h8rId}Bvo9Ba`GR#V z?lr6%TUkA?ZJL>;NX!SUc?8N~zT(Nv4FW97!g*aT?=5ZBD|T9_OL7mP%J2Q_8Qdo>EGq)q;q!E@!m1e!+}@8R z;FKmddzh{h!Pl2`ag|aA+{5N`@BXnU$;a{^O^bQO$J|V<>RC~ym#7K4&~4gtx%w;S zLiO>gq3}qQ@o1vZdfTt{)}0HCsudJ8wBGh}VR!L>wT5XW#)hg8s;}1Bwgt}>%Y@+H zu4-R3^Li(;T|Tl$ry#GCPG?R1cqP6s4j^Np1-4|vOu)b=17kQ6nEMI>c z_X$Elx*zLdnYH`b+!ts))})k`^Z7*GT5nNCuCA{5^z}Qacw5huUa@T+Sy5L?nJKk$ zI^VNxK0WKP4;8J&Clt4pv_?+n8=gFQo1AaBzrS}u6)I*fh-+QZ*3hQDo+>3QS1hg+ zt<+kWufUqI)?2pQmzGojo zNni-9uMwM`zTSuMXN(XyMByv%{fU3<-H-po&oA`guWXVV*n~(aeyT z+)ykDZSHZ&SrDp!({DYtfu6razrIKy1tEmw9-7uL^L!#TudaY$;(16S?z>7MLWurT zen`Dt%OqsQAY+GfT4?KJJocVAdhKZ$kzSZ$?#k#E2w$WHQonDa-M5GV)*~MQ5P|dm^^rbhhW*)@&Lp94|4xYXB+>fg%>$>`|!LuhE4hIg0$-Pdx zvYl2+SxG6A#H*Y+MXChMlv@3L6oSxNZ+Aa#bGgE~$kqoJ+v~e71A7d~wM^y*;YNS;k=yD=0dv^|Di>xzSj{Y zB;lAQ&bD$ozvAV~4>=y6GUqGitZcHl4^l$^chd9Vx?hr*fJkeCR*$Ke=Npnh*(zJv zSc_50D^fZ$motay2{$vWRsO84p8wfpx&7;|=ePd;dA|M+O$5;&JwP!Sd?PXh*4Kzl zKiLaULr5etUwHoq|E4c~^vC|DA}?9(7L|>|RitQTD=S((@GzK>Bq1p?O;_Z2MU;TX zzD7rssvBypUjPH4Plka&2uKVb{22nJx;LcN)mtVgNJGT;+F9UX{6Bgdur&|7ob!w! zE*5$lva06>c{NN?bze&)f~1QHIK_!5fn~dAS?@{N14_4YW||Ty%$^e^jTnT|Hd?KO z5IM}(TpgbhLhR%JnJFC!l9*?q=z?vY-hMn}wr%2k-k2sAmYAn@tI_x7Wh8WgCF(6! z1T*oa!+6s9oDW?*K2%LFlBR#mokyNJzvo`<>uXw* z;xv(`$pcPnqp0?ZPLIrZ#N)-=Q_cvJA4`C!flYRS=LT#M@rZ_)5K)YWsZqo5DSzoc zKD{K*+oRXrAJ@?80j0jfFL*{-@m#LMVdik<>v&R1m>TQ(MCrm|53%+9Go|T52nSRH z=d$)oe|Qul@_}|z>@Z#fJUcCB{o9nmX zNq`hdGO-j8^##)*XG9VfjXBTE`Ec3mnNng(ecz`+N)VG#OJQAaS<1@j z|J_&2SZjzt$S#_+xge^|rz)Y*B#>jkQ_&x?iuT9{_9|EZm;u%r+Ki@lN#ef*q5W9z zF$u)rUa}~emKsqbNfR;RQ4~!{!DA@|VJnqV7Gm@e*oR3%7l!opJf=N`AHBqGG%qjp zu-AzBU&(nU=X^<)$Ik$*8m%ga~MOtDX9 zX7>U5lMX%9cVB949=U;#CPBlDRRar@TDU#mv(?05f;nFS8+WG<|LL6KdNtqtjt~N4 z&~WgL&Jb8%Gd`)OT1YW)zkK|;AAa|b{_mIeLL_YzU62$I$!x{z94RF7JdtEZn8?9@ zw|=2@-$_Mv!)!%FNjZ{I9{@19ghU=wB<6@VrED9ut=)5_hpi8MiNWh1r}I5#jcE#=el3lc zcQ4qs6M1?qI$x*2XH>L$h^waykcd++lywN(B1U1P+F}aC^=4q zAU{eTne53-mk)T$kk?n)Jcx=%@2ty|Cxn>14H{h7g6EWJ^vO*cs3IjP3A%^&?PC%AFti~(;k|2&KJ*bU=LFn%Uwb?8QmwfN*??;0Eb2?^_2OJ=^p#-!mZPfjR}C;^d#NbVDR5VKb-ni#EYXmbO) z+KI;M?HR!116*{N31Sn(>|^605oIDu0#S1IpURu7i$Ek-HbkFUBDTLNb=^ z#A$owIYYt2AfpIxzx|vTmCDMi`;VyGiI@xvJyM`;)a^{3qDMQ3FPgqO&IAs$>gVe? zA2}}(QzPQ5Y@S>_WzHEab7kbneGs~sg;eW2y`ZDRq z7yVtNUV_&jvaD2nmt8QQ3cCzuzFr0MYEh-)iS#iai7B$xf|(-ywfBRG5AQ2KG;;8T z&?!c5Ero}+na2ir_0FdXJ#k*u4ca1jm8rR>DS!)?ZoUuJsOl}xy@e*??d)}Jsl%NW1U_JR;;GqV|bJP>YYWrM&iSAV~1{-!7`e zUr7cxIVn~ zyXX1I?+zh;7|q4?C-b}P;G2~pu)bErPo62$6T=hlee@%L!}~9Pwv7-BkqzYzq<{p! zXd(S^0+11z33l*{gy+k5lY3yE58abv-J2Z<@nIs*t2vbrl#l`hdQjsnTe+oGL-N6m z#Tca(HZ7EP;^oT^Sjs)u^9^%O#79+>6ckfmFEZr=DJG_T#d>yQwWv|o!g{|VM4mo* z#`V<|fk;soB(k@&5OUa;DF?Wu+{12u7Pqodx0RHHkRA!9M_xDgZ9Vo_fl2hw2fxVe zOMznyOp{Nl)h?)nhxi0HkvB{V78(+*hs-vAD11`XFX;N(6qpF)E}r)NlOXO5lYIxF zYmzC=m_aFCbwm957+(GI*5sr31&KiI3$#6@JcQ5<(vjoUk$ku!ACBadFz8F1U2<-< z_WZNNJRNaC<;UO5P%DTErhYDhYo$IIu(zwZOwO8gv3L=%f)QL~`K@`ZzFKRS_ioOa zQWlSlP@z>9U02sfZmw>a=VNcZNq^n?4+$Z7n>o#>7N#k4nY0w&1-WlZ@T#v@4^!~q z+r3>#sA%=1eu@4Mrqsf+oJeW*fMDzI3-LKrH6sv7alYiSP5D468(UiuEkI@OqXyes zxf>>pkTb^+P~A9}d$5&5dPcBJ(}i_ezH_a&zxA-){JP`x^dFz|vwvrnsZ?41RKLv) z20v*Gf%P>)?2{+3V$9T5pMClL&;Na=^%Z3IOSz50g#?C+iXg-gFZ=JnD+XGZI0;`V>squSRZQrlg?{7ab@^C*FUzkZ3S&dqaT8md` z#6@Eua5x+}9Gl2AUtLn?6c{pZo5&H9ahzIfZt6S{5 z2;2?rUv*x@=u@8JEkgC>*&zh(@9w$3zw<0OGj48f$nylfU0O=Hh%68i(c7*m^odmA zp?LWa%<9K(eW~?cWsKd|*DFFMgy_{qEV?ixc*fRt?$K$nPXPP-r}P#)_yY7KnLJHQ zQ{q}?w(U&WP9S|9Qx{m$@JhFo?#YV;BIoTyYl%4=2{9uQXl>>0w0+OA-2WdA`R><0 zfBKnUpY!xzfAxENF!*{g1lHFGX`ifr@Pd0JzWCnff79*hqo0+cpg~-?nDw?#zpW@D zzCvbC@b*x}e$hi|wqa7b=juRN!E{DtCQ2r!fQeTeYTc-H0V*cde>dMj2)&IG6A~r@ zF0z6|Pt1;xBwQ*tk6U8k7ht&rX7*<)5K|yTVcmRDv{$rz)l5v;*Q1CMr_A}hxF<`D zm=ZTP&k+j*xgl^x2sa$2OexC!dExfe9k7rO3wfHDrz2V`+qM$3U({5MoF=px(&HG+ z_7W>-D4&6l|Ve!F0Z{itnCTy z{&?HAQfedTtA5Onzo<{Z$!>7gF2MHBdtm0i+U9jZ=1QblC1|)*;`U$OM(n=ue*Y5a z9>Z6F?FAzc)f3L5_{{kzaJE2 z#{E?i`VLAzm%A{2yozey-{{p+!~ebY^I;9lQ~qO&eON~bWKd&URx}AyI+D8h6BF{3 zi3r=aaXKv=@{!~5NJ@c_GLu$LVVb;p z)-TRJ!4`Xkt*6jS{Qt4{XR)?*+kPMPYrPm_&bijwdw=^>_uO+!`?|JqaFn1VCM19y z3_`ldhT!l(5+MPKNc`Y}n1CUUut5rr13d7Cu#h5>2gHM)ka!A$7ak(VvOxF7_9?$= zS8J^~=NP?cJhaxwoclZH*f+lC>~o9Nb-uIqUVE)M#~elPt^eD<*p!3am2lVoRRN$^ zSM9m4S8t4-oSnBzL3TaNcghIqO)I^1<9`K1TrSKOW1EXWWgu7pW&pb`D>nyao-%7G zl;W=*jEFzXQDZb=gDDx+6{VxVx~z)g2v$mg+uK{B2oJ|cbnRxM>WguVft=!oTAoh# z9M6wdbTm^>c2Po{H!rQ$Ovx!CZokmU$NK>%u(mV0XEHa-J!rb3C5N zdB<+IBj)I;NLA8Qua(pJ zgv3l5HXFmGU&OK$BMg`S>y3u0Wiy&sU_>NY@oL{=6M!J(;^|yYx>O%;r(SsV{+WAX4T}iINP^~ZYf`V9ZbBvbB*ELXUpcO;0V%V7-L9m_r zx;{{p z#lY!wywV}AE0NV=Pav+VAJ=&x5M##P( zK3>!XJ9$$|#5{943w1f6(u_aHKo5s1@d|kn<2_BYN3sK?QiTG`EeUOan7?Ul#lTh?XabUK@0L4=(5 zOmiT{$v8tX(Ns8{7e)aaf+2>{Rc+_x%;|JuSyn;_tm{gxmEF!z7>hHiEK6ZZnZwP& zj5djMmCXliIajJK-px(E;V@K56-qVZTFs@4D z@%Z+|ae4hGZ|){EHHuoxX|w??g!d|YPA&+{wp+exLDXhN63pbZ+muYL6FDxlHJDPG5(GfR`Cmra8>b08IW*Ysqj{Ur|!k9!;Be3@#TvaHB z4jCQaHxBkaJC#Cn6wguzCQ|I&-ro8K#){-tS3g%u=t_=}9)cOdii-{qaN7*kPOEKu zUM<{O>20WJyZd;JYv^S2pjAwNmsuw+l)>ez+89d1l2{DpGAWg}PhGW7~m6Y4G1C2aBzGGPmFYdm?;c!Fm zky@3YP;2Ma{U`qmiSh08yJvq*NKaM{Pva*to(ilFG_FadzmZ3>Rg7>#vvMZ2W%_ttRV(43GMrO_#Cn$GL%Sx>lccQJM6p+eN zj;!s0kkv@&=paAY=as@>#;8_0iIgnnX7w4~+A)@=Xs+dM)Y{ohRco!x^9~87gha8} zo9^UfamASzOQ0rmSA{x#0*t?@AOt!&I`+O=6E`qVr&BkuM53v zuF~ZmXsvTTE%X)$;enK_EhRzFZpd4R7FE=6pmSGoE zG3yWPeKa%Wncd;Qxt@9T?lqsj`jp4Vd!9dkPRfU;qOR4-=~S8L12?xj z(iEtxamtppa6TKF*}D}ec8*Nk(OP3&mo4irMnR&5YPYLcB5{8&^P4xum=X0GqOhD6 zzzFDv+nM#e&{}1hGBM6f$wH+|DfGHnD-UO+sggpb#fsMANj%*+h+d@HB@%j9VzOt& zp2P0<+i0By;}W7*we;nBTbEy1ie)bbBBBv(3X+JDffZGumhLTEMVjR_T7i@aIT1pm zmrAMb$rj9VqV{6No*4BY#%#p+9N8as-0W|7_i#c(W0&`=XXDc$jnny_M&mHQAf_Fq zH^_GXynXlaze8N~#m&oqH#m3nX*`V&Ii3ov4>s1H^a1<>hXkRE^6}^2{tIs&KKYkh z?4XUc86uJ-Krj+3dST|+y3&ztntp%3s2ZV15A2P^)RDL%{X~e51QuF5(^@6x#55h; zaoY-y*37zrVNu{b7u2{|_U@);vn9rRV2n1Pk;qj7Qwl`q|Fm9!6~rXt%ev5NU^m}! zI2@oysyke_ZY`G90+NjEDWNtgUu23xaIK)T{v*#${ z()mF?*6rjf0aZNG#|i)EfYw^9GJ1Cpz%t-3XvT|O|^uAi* z5DeL{_EvQWOWjSsOucni)ZhR8tq4dd-Jx_#3eqricMT;&cXtWWjdXW+3?0(lJ(LIx zB@8&E)NelT?^@To{+JsuYn|6Q&)EC19gor?5d;LmD!K6c3KK@sv<4E@D*lUK+aE1G z)K&mqyzElzbK>twj zvEka7XGEly^>M}px3)Xv!kjj`Xa4ZI6D@$;cJ#T_am{cv7wx#gN+~rcSlG%gPLZad z=2}W}YA6MdO|$%Q?h1+ngr1oj;o>Z;jY^I|a5fp9uAB%o_L)maOQ1B8sWv<{eG>-KH% zLI@N@3ZJBs!#>5u;}&R6Y;JDOvDPR`8h~+j6a6pI(gzg6qxRHV;?g1rbx(kS)C+!q z-}~I&tT>%@OsNa;Iq|S=HSdw;E}{1kd1zoTi+S?)-K)yQq%o|Lld72Of z!dYjpB3;i&Q@g-ZjZ4w%|aMzo5!zCa&^E%N6ux1S3WffUF%d?2LMMw7e zWQ9oUrT4wf~Epo^nosoNlfG@e5bi#)4l zyvVYuWrz)>>qICTBnAHOTXf;4P?an%x()0yv}-(dsHo!}R$9|H zC6#PS^M|h$iniO2-+8zcBvRH=hWuy(0}M7qbL=;xW1}$PLU$6z*I1y zZDWX2ZA{nphE+>Qy>m^{LMk&Xb3th$xCEW0JD~l=O=MW?FPIn}L|b|_ck++Q_?9 zoJtZ2YbgS&NZXTttRYU0=P!}`^S--anG!;u{6k3blu1~|Aima!L82$Xm7eQ%?}%lH zu7s%|6)0q+d;841|H%FUNK4i#TpKI*vM|t}UgB1~%Ef zI;^EV%rorEFp7@uS!>1+QzhIs#tW043n#3~h50~aHP$*?{?bef)c3~OjucIke(gvO zLNyIxQYP5d)FZBk$fxQg?;S~3eseEq$oLgiHDxpE5K+NkKJ7u0#oVgnF!abD>hkXD zJHL?acBuE6sf*Z76&!|}(Yw|^>?b{VA7s=!O8+*j+%{#8TMGlG>dfMNl+inV13MSn zGu+9-(-G_%q;wN)|1!9FXP{*(qG@obBq8V7@jVLN)`?fwEBunqH<%F6vJ^t_5e0ZA zSLxYZ1)V<#bG+su2hou-pDBD(Gg7anazLKT@Zy=x7hyacI(D}-ny~yFtQT0W{wj;M zFuW{U%SjvX;Xb@{&YkN@nT@mvtZ)kTVAMF$cqd;cneij>hkT&lN}Z!Srn(3f1_I{) zMW^se_N22REpyBLYx?^Y$3KW^8)6{foAH9}6+!$`{P8k%0-yEN=J9UyzaESD3@MQI z9WHhFP@CAjP|)-AQ~Ar<^t6;5KwY;e>{q6{4CVhuKnsj4~y)U4KIyJZhB^rtHQ7NDwR52Bp$(aaqwgQ?!-h!dCO&{hRx)?W!ibMW%O*927B3X2 z3v8a-vJh|!dJ(@JBTC*{Wu=X}jj(M2Db~Nk{Mxr8V5N|=V^J%CDxhabdbG*XrhW_m z+|K( z38!A*5StiIlU!QL)p;W*TT>@Y1=C+ibu+R?xw#)v!^`>*wo@GGC9ur)W{F~a)uQy) zcII%K2#ZF?S!+*CeyXHWvjyL+tg+9cWX~bFVrWVZBhiLQqOdTT!{M(oGaqL z8AfXB6Tob>AgY-rBj5$K88vNVtZGW3RW#uHzGS*sXmkvwL1U(OHjP$blq#*(w_Mt$ zM9`ZBZ^RvvGLkW+|LCJju$|a4A%AYjzKzt|R8isSaaX91gj0t#jy96BMq21(P4N0| zY{{HX++WJg@O0f1Ipi)Vv)2$5)$l6acY55~StNNVQaDUEu~VxpgE~;_6)u143sz-T z#d(~`RqwachAE|wmBU1ziMNHj@2&bC|JuDwZv{SMgGCGVRQE=O{wtZK0{13D&E!&i zd;Pp0|EQL(|9XT}6KaDV24$`RY#$|T!1scrhOYzOIjnz>%?>H3AesQiv29c(Pfx$z zHs5>yz%%uEH2w=d9Zy4SoIU~SUl7aZjVOaPdyd`;1*9praY#xoL|4IxO*jjc7ZBR@ z^iDw4S{Fdnd-ZoxoH2Z?i6n}Dn6y;D_t#%$r%|?1{D;B3?7{xTdK@OiKlg9Fp-P2h zT~?s#{+USehiK$pu zN_wZ)gBv#Pv&D+@RR+{+od_ew*AOO{0roX$k*kmS)gFezM5(Gj(Bk}^ll5>VT+&14IBjgB6p!fjqxU5Y=1K-XA^5UzN5 ztX`^+gu~V`4GSPfxJgo!N=SI>Q)B)A__un zdPV2khI2i*8@}}{Zq%g?9{_ye11aQ8X2N}&Ry@X9KqHllDLtj@Xd+H?u4w(j2S?US zS2{L5IKs)zEK=|0rd_G8{-`FWc0w)QN^Us|=INaRRPdSUJxvcSi^E$Si?l9V>2!W! zx6I`UaLr`sq=XJRN;?Q>p3t($0t`v{@Sy9d*3F;9ZJ4`r@@hVqZyp45^RcIm_(ACltb^cv9DBVmF8NM z!b6=knr6{JUvpqeCERuYO?fvC!XltL)kO}lAu{>x>d_y0Jo<0!xP?p z;v8jJ1Umu7beIZ}-BkOCB8e1RApH9)l4f2a&QviPiMm)ZJ)R_8XI8U-i(Zz%EPjzm zdJGt4#)b?Q=E=Cm$YDv!N*_tw9#8-@=Hh1sY6%H2{-6u#eEJ6AQW5A9obi!_%+1*Z zDrZ-3XlA=*=+Fp>ybe?c)dKMOB6 z$!&TCqq&R>v+!*n;Sc(&1Krt?F55LEz{P1!9qB)!Y{PY2fcXIk>!~Zq!OGVur~0F2 zAviKkrntBt?cT|_@AviT>J<>JhzTX;Ouw=!QYu7-PB}cyV)ArjT4;e6H*IWVbe131 z44gi-<+s>NN>#v2CN$(-@%^iuV35JvWlSbSldC|BYG(($w8Plko+@bW@|FzI>r$qn zmi|f~K9pjmm70UM$m>TwpLnX6rrAKF8+RSXH`~fPdL56~jKdwTMY!U+-y(|lo3zqO zuq-xbA(WALU3dZWdj{2`4=MTEGo1?Avn$R}%1@lQ^wy>Kc#O!A_yRIB2U{E~x|1*P zn~V7u=(+Plp91qX!McDc;(wuCOIc9}jf$uGmJ3&x{v` zPVt#d?k~FZd@6Cnz5HmZ`zG4n5zl~cFYW2}yH2`GAEcwMO6A6}1?Q;4sl$736o93r zD=~s&ZH)a^3{`E4d@;~!UkBJPDtD{XE{kr>rIl7oRf|Zau3MbbQ zDe7@HChjD9Ph+hO)M=s(wX01jEnqU*ZOMrYd2sKbuF8)9>Q14E&9!I(OHVQvKG>Wo zIiR4;G5D&-C&zmr%LPwxCI1NR^0 z&BnD=0kFsUwC&xW@n{KxrCsB3!rTPh?4N7g-73?01&R(;TaY`8`{l!Gw%7@gs=_*b z8=)ABbo1yZnfvH+WJ8!gyB#!?xMJFFMvus0XWX@s;Kv+AtJOehv=U~?qm)k0Fonfb zaoK^pSGwB{kuIG}k6XSxDu!qqXNr=EdGdu46?A0UEMyEC`F}e7`j-c#(q@Vd%JNQL zT8{py?re46!Aja+ZagfH5d%cA=u54y0R@+T)^&pxA}-!U;CdQ7KJMzikd}O;{t<#} z-zE9d+N@lmGwa2ZU+TTgh(W#Jp(O{sV59EzbGy8Gzb}jn*lZVGp=n+vFUuW-Dd2F> zbpHfh2q|%X#q_w8UiTK;LqI0v5%_N@G=<~ov8f)%Q8NrW17%-K-s7dEMBo>WVYSj% znwWB&9A#hxAa&)$&X*Yt0BXxdr_M^yaHuJD78XM|PMJ$HKpYmbXu@CgBQgOOfTg(_ zAh|m&@X)?Os#awVR@RP%48d+t!!lNLXjr!1@G+&W8)$+Hdh3dPW$KNV*3z}TB{F4V z5(=u7DAQHoB49_BgwNuF6)hX>tm-O;fB@NXr}(zfBdzaWPxCa9(b9|_b{ zXLUd$Cb?QS?XN&-ckvY?%xU6OWZSC;>*RCePjklbDH;tClmhh9G9+kLVrD&D$pA5w zn~#w`Q+P=t3Na>Dd8^JkI?EsSMM_FinH6lpOI|Nwfxqhm?j2utqN#7d6g|~8*`mBg zm#_0j7VlK~|9b#^gYFRT-|aivDofG($F7%&u2J0=!%D{^lDHa5(%rr?WP3-HIVO^m z6!GCwh>YxKxA7Q}Z?-57y{weT4!3a_C%9ysI28U7_Aw?`G+$fl)^O_QS-QJbZ%H!I zK$#BAmRd+^mFF%?zJ-cyfBKFT1kkM;2I}m}ua>v!Xd#WQ44BncbhdIOyxDf0WR>03 z`aDB8U-DIjTi+^F)|_Tqh!`XZ%4%HcRCCCf+D)P}>n|xOWp?s8jZRyN3r-pF8!yrS zi>L;kxVm^egd0A+_|XaQ{kg!r4YQ9aYqrh#VIGzl8XS${j%;P;5%H){8_qeUS;mKE zB!I|kum8dm;5_@MCq#+^^$pj|6kIAk3MiB?Io&*q1>S0}MCganOQ;nb~=UGe(C)o|vD+4E`ZJbMM&PA50-~KKe%(I2bM8cP+>uTv=|`!07Dz#H@ibfA6TnLM%g15%rTILA<6IJQ zBO;&}zFE4GytP@ZJW^r^#t;>LQF=5){Oia;xPx~_l5o2A9;ZTpR{U{139HkE27=agL3=bC-HS7gENcf$k5EKKzG zLCm55LA8kokLDyFmIT^o$w=#ol;yGYQZz&&1|l|^6@`=M82L3ru)bp^13c5$$8G;? zqb;QgAeUCmj3G34bk^RhagqrJZZz5P{AlxvD|SOi50?9?uPPO#q-j}ePMiR(wV7RlK?A$ro_mX%=WT8S7Xxz_3mwF@xK=4E{r<3O9 zs6#V5-Z*knl<*A4a^o)XaXakq!4+sKHB*X3xvkR!^)sYouXJS<_i$Es4$hNm&Du@8ZpOxRUKOT%HF>vnedwuB+(vjPOV{h3uZMzg3VL*h!F z0!#Dd>T`MyAmlB@`24^f;c6r>X(pev8S1~P6N{;-E|wZ4IT|jkDdRVkh`X8(3F0?k2sMSB-?tT&GM~rr$Y!yqp}dDcdl6; zyqcc`3EE`CP}4R^E&Wx(1!Q*aSs}FkL^=p(1p18<8&3u40=lCN)nIf zP!UV9%sS;K(YpzXAkD9ZzhN$-MeLwcgp()jtJZ)_=Nk1r_#m3$uP#bx+?lJnRX-3r zq&S>mOafM6udX*A0TMBp>4MwU3;Y-A?G+ZS2!6h%{P?tg3K8iUu`BfB2-^;&|KZ%kF)5i^Me0h zgXsBpQS4Z9E&S4&W%S=a#rmCq8!;ve2@t6L$3{b#N4qa}YWk(9y-S=K4Po}!cPS9Y z5YAN2JfR}7Z22j=-QyOaD@bL|l8LMrHcDUdQo+;DUnJz-S-lsM$uTmXL<%0R&`o$G zQCS3F1-Qxdi4tkHXv_5Ti?;bnE?zvY7x=>3 ze{lA3-{vg_Hg*D96ldJ%;=$nt_}IV>6^lNW`b&ANvX8(_wTtPMhDRKJH7)4yA)qz_ zzsvWSH{NyV&M-)nwLScxCZK)|-BofNI{LLX|5tZr%9Ounfkhd?=lW`?k7w9RWO}n! ztaZ~^>D$D%0`va>Hmr6+ZlA0cgp=J`#rM!k>q7Zl{MHsrGn*2lZ5tl|N)9VsP3=_; zUT)hjSIMjXuw?$tbDp3h>?hN}0 zNF=HUk^q@iJcecto3T7Qi9XmR1Ka=jK(_nt2nEiYv=G`VE?n30X`e!ldEtSuzRJMG zf_mLnK@==N&7ivmdN!;zc&4+>uI6_#aS^OXARR68M1(G?sE$jEs0(RAQKcVrelAv5 z;yQ@Qj)pS#c-^vVvN8F7g_%nBbU{$nO6Q{7aizk@1R+zNQs1N#x;tJTXG3ys_`QN$ z2x3&v`pYk||8Gu(WP&C6JRXM=RwZlPcYifYk$~M-Z09xz$XCnhGy4@C@vl=iIaGXL z|H)`-5e@e*FK#LIyl26x^>_olwXF*kv=)Wd+h<>fTz61Ate2$v#n63k3=^{4?acKo zYnOz>h}fN!*{Cv8o?+s#YR3rZndMXmcVu8MWrR9JP!33;0aAa5?UjDQ{qewGSu7ju z;c(&1n+~^C=--|eI~@okg*}KuXi-IyB=@1titjT=_h=!Z-IM#gnK8)#2ajfgi#)9F z^+dEIXGn}p#JU{e(+(e^R%~6*7w@EY#AGfHLgC*C>m1FJlG~`4F|_CBeY<~edBm7X z)ShV>Se%mkjLUF_{_Wf%5w_FlqEYw0pO^iE?dAV`UtU6>#$sonXN!PxUmfCfwJvVTq;GPB)nLbZY_MQ9lHlO=>-MjC7 zFzgFAv0Kc!H|2Ys>@%xOg>qh9STQ-rwasj-c9kOri!;11giIpXm%f7~@H^*dW)9w@ zEwpV!TG8;abSbfyRjRp~5Sv*^Nz=3vJ5+-jR-0IiJ8U8;p6w)c~(w~k6 z$wxK6j~G%z(OfxN9DsU04x4YCHRL14xfLJ2&w+6e@xQ>P?^rk!6bFh1xWQ!pJj?!Y zf>fn=Irz!YE=A|HIL`l36qFMF)07PMzK&#sq)(F!>ZhO_8}w8 z4?+K?gZAKUA6^pdgd|*Vom}4ZOE8TJu=WU%ZX)Dm1Uk9h7_DO;-|SvE>*In5G+Gk( zTD5>YlCoaBS7`;~w{JN{zX+rU6r^YimBE$FGT3aD&O@ypDeZ9(E=NGlZ*Ymcx@3uyNQ4K9~#rQZyh z%T#ko{gA4XjnzX=YI8+hA5J)Ptv|YvmKtL&rupM0^CLCV^nqF8yZy{f?zuWkpcoTz zi^D^1^>6(8y(hA_cwBS{1jFIYP1*{PuL<)oG7;Es=!d%o2E}_nQNQcx(ZvDT*@BkT zZ8AKX$)-8U-A$sj>tF<%Z37UikVWI8aJ7wC$nWD_`T#6IAT!<9xgSmRAk_5zQbm!yuOR|TXdYq)IRvuGi9NNduWAFN=Wq7hDcwQpHQ zO*?08CoYI^SfsZ=k$OU^5+QeN5xBua!cAa$jrLCJOFGK3dV~J@93|z(ABGDg$ZeEExNymrz;3$>)Dk~dX8b62>XXnfq` zMfPaWNLNgk4Il(KPhq%Dzct5(s!#Re<0Sk%m;M1|?Uwe9jx*XJoHTVP$BKvrL2d@C z36I9F&95C7YWNoFG{32EkT57}Gj~y~rG^|0yS;r-I17X5uAuI+<*3~Hp9dhzRfPw$H5s(4rD$Vpe9eA%t5RXzrV%!6`D;EDM~XN$s7>-m0r?pB_c2 zWZFg&N{kFgq$4o9djhedQbHN#Yv?Cv4_U0Q=MD(i*97Q53fVAV-E?YzrREPe?&bP_ z;qtWyJ8Jk}++(z=4xyDuyHBm_7qtt49+cTA&E*XapX@U-B$i_3wJ{^3$UV87;eQl` zsS*&1lNFfx&YU-wtu3%3Z`NA6s<0FyY~{*ClsxR@(Re=)8?LJ`%CBpAW!oi#x&P@Y zG+YUBvHBcLXZPLCa-7~12mZ4YgU=RSwy=fGUA`MZ+*>cd{%^pQ%+wGIZVt)Al}F&( z$IEw~l3&K#0*p$wh9XQ+5~)TYozneEZYr@XM8A$Jwdv%Z(uq1{;O`kU4r6a6tp1HFbuWrvies zez*u=RZu{Lj#6{|>-g3SWH4U~Dc~5c&wax)ghdl-e}k%-g(hwjNa)8eogb^zrGEGH zEryZ7yG0CpCL_#+-)NdpnBi^rCj}*H@7-V4sZ3iPme95HHl!va+@$$|?(UANh3_TYv4-kwZ zXUQg1wPofXTS5icKOc50fJ4uOfZDu}@5a>&rIFL^B!T4Ia7Tlix=^A$pO?&M$W-Vz1AcXj2JW2=j=tzjF=`IX%lX_;eu>q|M2qw-iTZLV`!?D`#3=B? z=d2{gG!fo5FQ&s`2I*}%)gzJAzKPv2ls0+niDO)5lXXdS8C zPuF!~Wx~@%7K6ykY(4$;SwD^{O21aFk65D)4}LBP04!b#;cJd1Ihpw7aK}k;i_(%Q zCytwi>NJcxcXH+?VLmF{^EL1u3#AQ*c?oZdX7EjFwP%S}2(s_hZ$?sdu`cB(BN|o} z^N$(EYuE8nlAYu(+}@znZCb#`XkhRGZ?N*0;v2Z+C0Sd`xA(j%r?d~=gU?V)yS`gT z?BF7;cXKrIH$ynMcmia7;Fe{Bmv>}DilNN({0$D>22O0J2uhbc8x=DH=678Ye4CPh zeP@37o%g;_{>wyuMeWm0zSzUR{0Zuyi1JI`z_|Y{a@d8DnK1AyXP%x97-7%neQhIN zeTV1L(A_Jd5;wnFtP7$rT6r^Kzpe95sl}fk>-JtSia+DE@k!YIem@gt!JN{R6H?%_!O`e%)j#3By8j&mr_!3M<(qRYB6D)FB3D9mf|g@$=)gF%jJJ-cJ`} z*c0w;oE_pm3&QHp=?^e9Tun-Vj)fEBaE+W%$Xu&glPQyfi4_`ergE(8c0$o>!+n(& z^GLj`O};5IajQqNEC_+LvR>9oT0a(;DqoZcUGck3tq)s2QgC~hv%Wq z8+3S@AS;(}a?SclPH&o3c2!V^s`URoltQ)v>7apqQxxbGT(2SP7;Mu^I!p&j?2PdV z2-Y8z60B?7r{4Sc7o`t&`;6ChpLTsTY;FBhVVls^nwO}{sgu=W_?*_13H>`^Z0}tR z1HM&c?spBc$;yT?fB~^Bvmu&wpe!R-o+jscPNdJ*N}&3p`eB;~_MKxSyts%$$pMoy zQ{TEa6%qr+EGERoqxKf+;@5mW5cZ)eH_B%UsS?Q^!Qhkz-RcNspf^+)1z8|#G&j~sbPoH_YDUM>wT{tmnfk#kWV6=8 z(8wIG!IP2Q>2X2*h*{0>ItIRz=E_j6l9>7_nE8yUM$TCNVdQkr>-l)$;pLQdw)bYV z-2LIh+d$VENcm;96=Go3H!Q1?xdMUf){8yd!V>CVtW#!eL^Q!23nNe2{;iSy48k7n z<#9wCI;!Z!FpH02)O1C~)?6iMWThFeE5V{Q4xl3y=TA#vJog*9|q3SM4yrgYJ zG?rtJp!YT_=)aD6L8HdqES4i@v$GK3uqNj5+C+aaLTWq(ow~)7V{-Tf{63hnMsrGJoBFL7}7qFyUJlpO@{$`SsZF5uM2;gNXs4 zu0~}1fTx0f<>v+9ZujQm39S*?t>SL8>aX?O3)$!9pp5!}GdtnU{K(6nywgl!+pNmd zl8ReVJxdC1d3ry`Po{CmwL}i*nuP2emRkQpcPYycf;~jkS9pxb^+(_Z?z+RC@*jD) z&*b~t-PH@CArIAa{7Ad6%(@iov+u~oDD3fMMvm|OqEnlQpgHXw9TrCH=S-u= z3pCi|d)PzKFF0iCEa2>E1uWw$-`9eHdi3HE8qp#f0t*lfiK&=Ryeg9-RWcr5HYp1% zSFSIuOvLF?e)TOTR!{3 z#H3hD1w-Qe3;P=S;OQ}2Y`R=9n276yf~9qe$&e-(9j6l8I+os)HTYnefzC2dwB(ZU z2^Md2Xq^Dh_l1Lg!)|eDP0Zyme{+eAbbZ0*k&Kj&v})p-BeX-wL}L3&aI67qygW!+?~ zsyj;!?7z_9gb-K5aBEF30_d>nxlPVCo0+6BPvfX~9hkBULDTSey0e13D!SAql=GNb zoY7=Kv#s$Ioz_(H$j~kO4&PH-iMec+OOWKhZSW6k^JhdF9&S`TDt(H$U1E`%LTM#Q zX9d)$>}kO5)JSi2SyYnC{K(l$79+E2x_7l^dd;`6CDp>A;^!{W^TmgMh#d3PK80Fb z^!d4AlFHII=nhG6AezKDwfZR_QD&w%mEC%jAdKu-3s|xA{!nwbWz+3b{g>PwHE_c$ zKHL$2#yfkWrSlN5P7BN&%X4z9M3yg(V)q?nI$Dn5=BOK?Wu-mxW1sKDzK!%Gi_{hony-_e+J?2zKB4j?2a<{1|5u^AjJN%}e6PJH zR?@QP-TQI`^S^a^G1(FE|C<1F^uiJ=%|K#Ff{_2F$W56N5kStFvbSaREw`nA7l?aq zR1uBLf0ptM)uYXJClysv_KzP*R8qm9--J)6F>guArnAN|+40F)IV#>9o0{SX283{TP=Xhfb)8=E_&5nw%M1uUondwT>ZND?T_j5-+o1D6x-JVUDMGWf+;T_Npv(N!AD*E9?+ePY)h!=qJ}te0U-8<9M;-TOAD>T2Dq+Dp^5XH^FYu< z=9B-Vq_?6`Tszg!Z^H?QM9ScF@CrsLx|X+aUco>R^!5cW=mPukwG;#Jn8MSGE|XJ^ z-zSEbD=ZV?#X}mn6@7};nWcDdxnNW3PIILgt0f}lESQUMQdNDLY9lrtWtwM`mseom=eS`hex!48ih7#45p*`~ zvmrEE$`vSX7iT7f>uwSMk-D)Z!X)tNV%)^%{*PS{-^f_yr=bt;=SAaoM*dfBiA##9 z1&94yV8^*$Y}@(g=0w$ZolvfiZraL($E8X_m<-W9{1Z!5h+Dz~nXM^GTB5TB+vDI9*0^viDbA~!=Afk_~*ThnP3k~J4iuP z9nzTnOGUl0)sQ(AsQWV-Odtz2I)tR2Xn1Ed7Tr^<_imx3cQ`R+oG+@m!_Zq;mA}bhENnL|iX2r_iTRzvRsMDqnjA>E-?B z!M!bvD#Zt)#@}9dHdug%3p)*u<>35xlwmx1qD&*y_%&hW%KF63-`CFG zek!4;TvnfbXG%^)b#hxkY!s-Z?z|C9>9#3376}nyCCh-0FPT{FO;~VfRN{k`O9Wi~ z)-L}ohpzB=)YeR9>X4U%7pnBbry|C>k<(CSMn_T@0-vpdk`BE%eEbc^Y0Q-}%aM}A zz5d=z2hOIO1QJFK3|>wlmOx6YsX`s}G7@y;<5?=i6%GgOy-;sanhv*KG58rQAOaQ$ z)6HzYxX(V6Q>`G{OB+t#7x-q5hJVF4O% zCCUNZwCbJUByEvboj_0Oz?W?Cy#**XRatBUc-1}oO}FSeS+f1@g9Vvy-%sEAN3@Ys z3_LXTt*U!o%*SR7l z;YE>f8p8QVIeHwnRW8(QOy5SV703QVw=WmxSL^vUwNF>+CjJL~`DTGfs@Kblcd!3< z?7r>|wxCJMsbS`e`osHfPA(0C1kZ#Pg|jt%HdcU2ANDah(zNn_OGWpWoLdxLpU|Dp z>kI-_s5bCIz`4N6mR4Y$As^51U+)qdiK4@nN&tBhv#I8>&xZw`4J?n7tvNCejW$9O zvwGXZ#?O*90M0i9r!&EzF*Src`JK&%=MtW?uHwe!g1YYK_c6ie=6^`=7n zF=zJi z5pYO*kI2OVM^GkW@6uSq$PzXKV%MG~Icc9OZMvb&@4o+(fbFCYAvf;xQB=a;oyy- zwezbbFAef5p1S$=H=SncH?dMd@0NcK*S`Ea#U?k&fo=B@$Cg|FT=C_o)G&j6R4w{LLTJd}bIsXc3Jo??))ycSqi??M5EX_xL_s=0C5D20hfT zcth7?gk1CVW~TRF_N*wSU+qkX&j@Fa8?!R59GKTZHC;aqTF?;56E#(-*%r1E0;I`m ztn5B7+19e719FfK{@{`^;bPu{LzF3|o0u|Is#wX+N-95Gf9{f44*V1@rPA-Z=-W0W zl;03B>7OW0CSzpefQ0>~A8%(q;gyB3LRq#t&3Tk04^_C{Ly2NRUK|!x1d_;zBH0wN zjBKUF)?7aUV~gxp6eWvRHmeq|GJ#BfRZansA}D3qGDVXg*M8Kz?ez-VmnM|5_*gow z?~7%&fht>p3}1Xp$z803nstVb=nH(^4FR!J@P2k;`+oT!Xv|4&S4`P6_x@7#szazm zko)*~dvZ_?`wW`J1b&x~Y+}^*R;Xreq;Yz@0w6*`wPuU8Dm1>3T!eEP;SDm_7U_mQ zpS>{&ten!^gmlmhba`RtsKUPF&Pu8GK5HUS+%SRMnX9V(l%Fx@I6Tx-;u59BwXUL6 z#~ugWzKZCjDPd`Na-}xZ$Y1Ii|0j3y|F`bta}70%Kak5yA)dvS!x(ZOG*VDXcAJx8 zqAVduk&D4B?fOcq?YV$c8ChqYL3zpL&c&74gq`T%27+cAdGM?dUe}wwxiH3@HQ1_) z*6OhD(~6yQ6rM1pccP#_E}kPZshf=HdkH1(mVh1nJs4fyfa|$fOx@!an+uON&f_=w ztt0KNgFHTZ3nzCx&I%M|1(+4hp*VCBnhrkR6>;|#cuIs|O4K|V2q$)XNSi~?j^RNy zDSuz?CenkR^Ro}LO?*xWMB`5XtJtVJpVxNGeq^rJ_uY;@-_$<_J=-438V6oaDlO)^ z8OK+UaS?Uuzp`#apNWb8M8wynv*(SIf>RsGwEXU&JD2kymyp+^(NmkFriwrojSgAs z$2#U1Clwaf8<~F3hW`1oZLE0=P$S_A4X@~A8O-fG^y7-o54mcnm)W)~CHmZ^9}9Bu zQD)S3(GQ135zp-J`p~CQoVs?9V_!k8@$|hxr(TydIjy-M&iFi4*=w?&gnR{j>Z*(J zTUS_eDd3_lq8cCzBqgKRN`Q=i2;lw>(HA)&h4y={ld*!ia`uK(Z9+2nvwpB_fHfzP z31maUUlMC|e}~P6$^mF9fH8W8Sn3lgwpG#|Isc-)Qax74vT2R*jUU1U5CqDEYR z`t9=t%S%Qrr+y4DzwICeggCO2B#R~FMj;()SP+%*zNCfw%yOU08K^=rE9)7NDQp4p z`K)4WWLH#h#+{iCAcdq~_Yu)#t4x^+^H_Gewrw}9p0wv}9Sg1! zX0);~_41|>L-v~^byqlO%aFyYxho~R6`RwWppG4oU5Ql@hg}O7S5)Mj#HF0{D-d}c+U9b%PcyXy*G;{d*@IT z$gN5&Wf!MGv|<}kR?)ryIX5oionY$met1jgjy8^yo|nj0SCjp1d4mP1r;vLJ)oA!| z1qs1&W%CI>P-2otXk3k&(F2$^V>w=rY+Q~%WED_Nc^1^gfwKkKR5L3Wiut>c1JR6O zwH((61Es$ughskaUk`n6cXIW_j3K0*JPDg!8g`v8`r@a^>4z!%UClyldUIQtvD6?w zA+@t=7_IbYQ(h!K!VU)b=3&HCTIBw=YAB$j``ZsiRsf%h4v%A$?4Q`QYMe2yIr_y+ z9Q}rFY@y!yaP44Wl#o9-T%qG^WX@9N>va*fW?2j%tR>t0wiw^Z(I|L{qPLs-s1s>> zSlIph=M5iy>(4m!$qW0pL^$MJ2AA4)*GLrqJdIG|f)kw*y+Lh4oUn6me|Xxe(~h&7 zms#ewuZn}vS&rF+UVqcMh8!nM7*vJN zyCAuzMRk8}wX=J9_w(5ix-QF)73Mg`BeAgZ_jA@w1LyHRPHRZ_txRq8j$2$O--)4( zn^``#(tHzDG80RxDN+?^cRLy|8@~BF3e&(3_E+3c&EBcrVTIYOoo1O`jqNROmiC~Z z-1M)aREt01X9zA z!yfLk<~xA7L!9e5a_4<=m=u~VJO*nB7<)K!0JX)7%!-Xz{Z75|z zq&DIEo96on1EC;TANPlwC4Y9X$tsl8!ZPV=Eefkt5#7a~?i`-tTiV||QEucz&bNb zXnV8R`+;A03^z<-jw;k+ucUhiQ_YFPuvs%!(jpBJ!4^tT37%h3iRXzJWM3r6Sdm&) zP=V%Jl=v9%N^@|DMdOE9eDyWn7f5ry*Ro}Ypk^UEtVEZ16d`NGi-V0?8^GVO8c(mN z)@F%rHXhcN-;h*ULK_nTdyoNE+oU#P$eJZt+)HKYWxtuqzql?O8%1*ChRoTS)&kzQ zu6bxfx8jYamZC}3KBcb2SnP&L)w8;Thl=Y;GBV02Bc3QnM+crZ+BSE#J6OH>v)`gK zMGfX&9MlJf;V>cyyWCyUkqa%21d`oY7PiFoRojISH-y?-FAbk2sW+yigd%})1wOI$ zEa1hFCy+(wj%oh*7qS)$5t+S|sdIsp@)Oyd(zwi)@D1oT9v1ICIiMaAI89m)Y zt<2jUCOTP6Z5&H6tF4|Md$;A0ZpK_3r1Hf#lb3h1n2X1X9KDwu(n-~Kjpdgc9{)L4 z{nfSM#RyWS=*#1t*t1vP{mTPS)x=hu@;R7|PvmA-e_vYttyXP2WI8hW%e>`Ekzg5c zk15R2SdH2o#4U}zO+{|Z$H!%oN({4Dcx7_;Xz7-s?Xu}z6uWI5Teq*QfmW|K1v$#NfBjMG&*Hf4KTlZ%jHwTY55egR8|Cq+hN3@G zMJ4}k*_OVQ)UY+mJj}GoLNk?B80g5EH?z7+(68Rr(5h;?YSo3^_{hf2L%*jKxh*jO z#!@UwuR#*iT>7mBZ8}x8mFHCn)QaIGrEy}Z8Y5q1tBLc>sLv$vpb|evq9z3lKHd=K zE4Z{wsbjpOq+6)IHww!co98B@9~+h_%GS54wM5O_Q)0#JO^n&jqE&9s_z^nN<| zoFDj?+2pA+vFux`B_>-^b~gF>x#RTvqS~QK^4SKjmFqvycF)+~)Kh!Cwlh8ks{=Od zN}45#=K3jPc^o}=s9jI-ytAK%I0@=UK)5`wv}PIDD~Plh6+{*dBy!$bqi7c&XKFvi zyM_|du)E_mJAp!d_=eQAu{z@V4L6oCxOrxJSj_A4QVWH_r^nLgYl+wAa_Oh%ba(?_ z;$3#Wj=A9-cA?~xe z7_tuAKwg5xI-mZUy#GMLYi{~t+b!PZvOuF*nqcZcGTV#U4Cpv7H+LveS9;_mM51P@TOP~6?6 zxVuAvlkYu0A-QJn+0V>GV`F7t&)W zPxQZTKU2F>EA1F|+EO9*3yj?+u|C+|w3}%b^6I6N&Uoi0YjVnBVQSRMDhNi9L!-!) z_dy4<9KYkc!{k4^{quW62_w}&N&Pjy2)rUlgMc)te4eC^W+iCLJ~U_hvpQ3?7#>c- z!K8@srv3OMr#Ogk-*ZrCSvYSt`iGJ2`oCFP9KDFD0*`OmjKb-gy4)k~@pf+1(>Br| zHfUiHG6gK0OIlwom@dH?f};jYc#)k6S^I`zAt#<~oCYo^+>ni)Xeo{!H$}?c2BztY zH1lUtRku-<=M(}$v4<_rooGHrpP#DabM|DWKp4t^RvQ4qKpKCyov zt-a`e3B%yUZE4~CANDCPrcXZ#!e7YJ5hT5_qjWA|taga1r^y5qXI(?h5v3;KpvrUt z2-KD(WPl1Eq^n9*8k@y`@19{KVBU}!GS?9PQM~&uX!pyH2WGo8bg^gP+=wP1R!Ik1 zt8e4U>q`MKZ;0#0)@%ztKag0EvYILEqwiZv_NkdH5V*A58?G8zhl=;P-`^*W;PuC6 zGBu5bcP+4@PegH8whAglIkdKyxbJ!R41yH&*MQ*Bec{q9&ADc}Pc|7<4;(I(&vzuD zMMXa?!7s7h86^@jSoGqg;WJ)EYK{2e(-Zz@@u7@8;{Zg&D(lYeWjQ(i8Lu*4S)c08 zCr{hzexHdp4c>?*>RynBRYy9~EHo=E2po&``WgJ&E>oJnu?A@QP)t;@eqP28IQRl1 zg;1c?7YzIIiaxrYaq}FynAc4WM-?{I&igR8@^rX|Djw{rEuCm%)bd3{iLokSOa3Zd zdbxKrsECtFu5anP@XWIe3sxDqD|)s96GQ`pBf&i*UnvN(0YMM=ex2I!6bPX&PR}UZ zV+hUfGgNhEVJfNCaDi`cVZQV#2vbOn4UMj$H_j;Qyt>pK!rB&>#%3`iBFiF#FKQIw z`KX`sz=o$0T8IKihsYh7c<>2iy@_=ai_-z&M>(z^#M0#G+GODjc0fa(7SW*@l(Qa> z9LMAB85EuCdD83Y9g*eNuHx0k@>EEmpsAj+>RvfTM+u6*2}WV=Y;5K%VUg1t^0Wtk z4|Ww!G~VC8%=T%LAA1wcebuz}E`<@NHx=JN$qQkv>eOG^X8{W%J7$Q2ZgCXgNo3G!#>QOOnhpPLO(3+4lx|)N0ElL~%+T|DzyecCugeX-{On%=O^ini7tY7U93$VXe07`*ClWoh!&PA-7!0fX-WF1m!i@RSgQ+^6b@g->TT_OV@z)H zX7a=ex_ee=xT&7FAja|DX_K(;&*9IBy|ugg(hL(GE~!$7{t+DL(gv5d$?G;7`^RqZ zz@CC{EqA&5F&xW%SBaktqc|C0>RJ=ScAu!rNSQr}dQw@O9ZpxbIk`(FY}1a(GZETE zQos3C)*3a>_f2#Hmp4p@mace*jDZOS#IHO@eiaeC6rpkk5g*(6E(k{_KRnHa+J<2a z_p~6GBXgQTVv0C(&Y>7d zKVD2v`zI7NZBJ*R2Ij%{^+}(-w67bV^#37JpQ{hj4c=P*TloJO^xIpH$W5NxE*5{w z%_q?F9}%2}8L_gal=A)Wb4@tKMBT*Ptlu2)hB(iyz)f8^y%yNN7SU4m%tHMQQSU-D z=dE24FMzf&>4{@{(?y8Bb2;fa})ZT@eZU&LO zET^7iI#^zuCuqyepVz+o`v?(d)5MPlyne>SVLwONti6U+suwlt_wWXog5u;zmeClI zbsSp49nazwMv__#QA=3&KhhPY9P3N`{Q(6gSBc&R-g}|ZN?(>TmDFfl+}G*3qt_*; z>|FK4i!0Mga1wy+X1uP}Mf-AL&O&>~oXz}`JbiqAba!t(-FyVdk?nVqYCN+$Z=LF1 z^L!-DkdiOqVFkK!n_~tdFu_?1l6o=V7w6+;elB59$;)=$yHa2rG%c75@f_&`s4U{j z`qoXd^dyK@8%BIE<7$Vne0R&+BCEGT$f>%y=b{z-gd%VO>KN2{~>h1XSgk!14nRW?Rck>#U36%I?Su-K~~R(=D5EZ zKd({+1Fj8-yHR4SMaZRX8G8R6Ac@~sy;;cUrXc64% z?VMlI?RzR}T0adsm?{^fNYW^sS<3eAT&F7P`##j3m&LtpvLEwSfu^1bDJIIUbUgkW z0L0hdr41CZ0_o2`iM*K{IAzl!6c&R^=GtU?B(l{C%oytMWxDbaG~?0XhPx~;@=NDd zAB7UvG>7MSA?i1kN0L^H>;d-S)7�osVq!L|~87J89zqq?NOERPYgx){nwQl5{tqvg!X7m)xWrbf)$0C2S)X?ou@Ayjwmbl|FAua1I8a=&9A1?N{UriB6 z&|#rxl)MR-F~StCtHF19RH=aMc}W%H;!e^_36$ml48jRqLq@J z2*fut6`~(wGg%=GCNHzo7)eF1qwBK~;8Sk}zJ5m_-}nK2%+*O(&e|dgH+l$_b~ePl zFmHLpZk&JN2cP%gpEk0|{x#13eCp<{5?y@~v4FCTYVS}Z?;clYGzVA*)jMz0kD*#? z58d=ddHnU>^d8*&7uPjB8h8J1ZPM@0c6LpTkyLshaZV)^&P;gz*yr^sh7LKEkIkw6a_>~E!F=2U%ioq}H2A@}aRz2Fz z#`=AceMi0#+j5)-(uG^o4?J;lyC@yA5j?viY#Xz-_LV`>aTNmwhsp&s z`0+T%wmPx@pHQkh^pPl$wVB7Ma2E~6TW?}#KJ{_IFBTI*O z`2LG~m&F{-X#bO&ZZ00Oz%(DuJhj6^Y(;Vg5Hrt=%~|sU|>eOR9oN#agR#?%FoF-Ma@XkeM5cRtS!YcQcz~|?$9PJQ^T}L$XbGQL&SZzhc zhM*WWXafR8qKlD<%LR;^q0+o_8ii{MR>ux310z$O=M)7HjVlx!iKb@~3ORC8!~njf z2Lv~Zvqawil#6fF%UmD?o%AIi`hL5Mp0PmK`*1$t2bt||Vq=p?bwdLD&p%X{+Oymc zqTFdXhY*z;aJXyKe1hNGrxXewN6^5NfS=zdz8>WrT3dA6f}9IJR~igR+mQmVCMAPM1$py&XKyZI0YgI4aVnld6QKNcqe)L^6Dk?Gq!n_UP85`0Y#1t z1jR_-A}dz$;+2);;nuO!kvI|KO5~R z;o}u1($c69Z=Dd{jQ>|Lb7o9sGuPm4dI1$MirU8%qQ}gm z_?Ah+AqW5HS1vahIFW;!VO8BZ4t|O}4un4ENi&fg(-W8rej69xhf$brfKj)VNVqGF zs)X6`pGfn_yI&PG_C)?Y`#cPaA$8B>3Q7B~M*mm59eh5QdiE-fL}q+79ml8CrfhxxwDXI7M=oQ3_T2UQ3; zP2;DA4duEt0W_R( z4{ne9-pS1bhkMUQ_YblB#bJAJ!pbWnDg;(+W0s2Hp?`^N>75)~TNa8caa1W={)LpM z{9dp@r3c%is{|4;^x`2l{bkW~H^tNx^dt^^a6J8zzTik1ZntYyq?au^hnG?5b`C@t zbKc*|X-LL(pEUP#Bz!#Q{Zv3&NQEQxcWF~540b`EYd|h}SuM?S|2!TkaXbo@=qU!4 zz`qgia}}ZL{gXF%r~`zUVqx1_u&pXa9)zMtZOz|M6ZfWz|GdmB463!@-S*y43k={x zZue9iO-bf-9+5_|D2Kv#aaEg*Kle)~i=!={ah`fbQ{LsvEJ|DVTwMJA-5?{*2`6ta^lsCx-Wl z{=r*a8Q-P$aAhGrPvh-o>Uh52e0-J?c^y2ke5iup=MLDv{x?D@`}fg4;02fD7&PnW z?xi2Xu3mq-wCQB>d?yUghY$$#lh=$RT8Q2e_Kzc(+9hu!utK{unjryNvk4Cjx;*D8 zLwD5AU7s(nZC494Huo~k6VJBAn#RPQEm+X~64LlrS65!(hzI##3(qz~1+1_tY^PiC ztoL)*JJk0VFqK(Rdk0>L1|9d_CAj3jweTo~@AKH!3&K)CyP;U$2RJQH_7y}XrVmA9 z3$5ZS5J$eCFj?<}g8fLyXtCQdfDOQ1*yDmqxf)hkBOq;Eja2HLoMq`x6smaRwHlp^ zj{!}K;q25@N>+sn!M@dheYpJdM(53Q&F$>%q^}5EjP*W))oIV=grc+*yV^N!Z*X6EK^W{nqqQUOehkkfFrF0Vj|s|9*b_fEcjKM7}DR~ z+kXOkA*5*DsR5a>H<`U3s?Z&In)s)J=*S`w;w_9eRywsv5i0MIrHr5zxtb|X>J*^F zVyJ~-=GZYkyx4GC(S9Jrz}BnI&HE(gWl*zQXR7<^E)BYnoHO5(K80N#S^gU!`ETP> zeN@i1qA~v})bVU`a{c(?^$K~ zUPaCC^-4+NeMEouy&~3>Iyr;K9)(4NTivRHPy-c|g!AX8dC$yPDE+W-aFm%x>mH`5 zPZ;NQBJ{By74C3|Y^A@A^_ZxR1*@%I&J({u{R?b@M_4`qn)$A6>20!VuZ;%y(vekN zqCom^y%YVE8z*2mnO&|}5 z3pQEe+!F=sXE(vm8$X;-8ejr>Wb&0|=;#X`dK*}GvnfN+(T`ljG}_6fe&hQ=3TCvc z68Fi&_??8vkJQsuuF<}EvlfD~R1zI8fl9#{6XHow#=}TM$95ewQFUFmbYWKkX<&|H zmdFP{c$-L7(q`mNa_}@cG0sfe%l5Uyjoh00TNCFL6k~oix5iM6hBLJiCk(i+LMOru?|nc<>W7fLhY*(+koGeSdW#4+K}7jSoa(fj!E9 zuF%laUQ5SAxO90;vrzD=9jsROCn6U|&FH_Vr4{{drKOAxwDQo1F;}fK2D^q+>GgeC z$3Df%d7zzZP^u_y=w8H`AY9kk4lJTn%Io!)@; zqhs->xt!;scYh$Ru$lk}d*-FhRX7MvRlw@U)pu2%r*wY3)m{!E=TNLo+9M4F57J`w z(9N_+mbyX$XhVy3;Pjx)7XI+hAK^~&(+)VneO9Q@0IVc)MV%ZYWWR=Qf3rnEpkEvd zk@E>d+rqIC#7mk+$#>P$nyktR6LTW&u0XP!rcS&iNoa)iwq6WZihMD!EU;v-tkaNf zcu3zT_Z-Pi8}S^c*s!(T;2+!9-=yiR$xZ`ms)j7T9-ZMCjJ2bbnFf^9*Pzk}STOEe zeJYr8>j*Fee6)J-wr;KqF{Dt%ql$8HZ#3bRpHs>HW%?kifE}n(h417ZW)2sTovKN8 zaiJ}<^|US(yxx=XL_x!+ML3CknHxu-a$ok4a$}4eH`5qw5;S<8pVeaJ zL$t}JTjN1*xR`8RZ<}3$a_?m;G496#yBB$tDGvPcdPie_8*ok_T6ph1dAttyBIO*)xW;Eha}1%tc&j zoQpqOZL6&hXV3O>p-f zR8GW*u*VKCtw)zF$~9DvIoL1goj99TAAk0fo&6FLtdz0M38wA|W(qp6JoNp+>&gd* zloC&JUX0d*b-yq%hZi2H4BI7|M8sK(uSbtG@)FFmH@|c6ZZ+2O{)YF!;8Jfg<&v`a z%;m@Q-?u*c^r!W6+Tbx23jc!nn@L2&c^Qq-8B`pyRKL8FA6*(0W%Fy}R@ee*Jo?}!!$Rx}+^e|J&b^S?;q-1l-zMDa#MWG1I4 z;s4~%GV#*hG{Eb=a5chzPX1MAnIdRHvvgpO++$th(EKu1<>c=No&bI){Sf z$N4~=X%CHTRB)x1g~`2Fx6%_mYGx+uu6=VnNDCah#vCxz$s15`2QBuEI2P1hq)Uj= z;C-PQE}A=b=cA{&|MXk4>smcmq!vzNY#FEjrVvN0 z?c~6DMeCe6uCZM#<4Q}tP*!>OVAO2mdok(fGg!aS6boSo!Ix%XUr6-xjT0AS2_pvZ zPnM%tA2Hh+p=^6*rfnW|Dt8L;0=*E3C2A{(R4Yp-2vilH!4le}5PW0d7iS(^I)3-* z1UF@|U4h)W{Iyf_g~tEE<6opyTVI(rA4k~!S%cB%FEKNIKxcuK|9^31m3|sNNhcG$ z-d}Gw&|iHP6o(^e`rz4g-^RA>b(c??5&l5&w~BiPsVG!8qb$|t44__;EO|D+nv@2+ z)j;FIWyItMy{9vC9&ow7qC6c)kC-;{d*6t!*2$V))#V6Z3mOvGSS0TY0?Lx2;9k~Q zPR=GD(AND|PtJF0bcN7Hc_C+JIAxiPeX(l+tgn?-t%DD(`P0d76f3TqP{1}aaZj4 zl7*-pa8dcOX`LwcTC})D!6{P(pEjfIuY96Qn28ly2C7@rnKPMS@`3@@yI=TuZSm-lrBhuG}<~;Caw=$rlp?7+KcjPGhW;i zI=rJ{UAah!$Q9I<)RF~r(CU$YYVyw2kdr|D>RE(m;i8%Cx@Dm?EV8t0A76p-G#7x# zKlV%bjb9&FRS&BWj7wuzY|V1*nAQ8&4B*w@4FrF%glO@UbzgqrI^(|nsf&)-59-vLfv^8i&jh|>xzDGM4%3OE$0xFp!W;{T0% z+>N};d;=nWkB;u{2_lZtx~QwE!Y4)|!3marIK*Z$`}h0=rXiT`%kQjy1j6^x|eJ1lIC7SV*RC2q?ye6wrC;q#2-UEJZ z>~l;Ayk|`>*LJnpiy@%TB?PH^Hj6SJU)Cqkgii#GE9F#6t3yao;R;fEU)x*OYRxG+ zL-_W@b2(-8c!U_Ff26q=Tf!#KB(Ee%!1w>yy+`OeaZs-nJ^)ClWHxu(D@NFq&3!Ty zn};vC1^zi7rKH)K_1A zu46}Zf^lwFEsE5YfrTp}mo&%@PN1(_fbHbiBUjC}(RaQIE5UVH)xG=OG--hrOlHHm z{Mi(s^s$8(*S7OOXY*zC-Rng5-x1sUzdWhXic{!n{Lk6K?I+&p`mNR91MvW9dRP0mb(k#z*cW1I>^EHa0H)} zbhRf!v2MplOV7>m2L($gb`ZxU-Ob1^Kl_bZ_vTHAy-RX7gBX!ZzGE!XE6JRI^4KCm zJ?wduJ$jFOi|1-jP=dJ$lF;fVv?Q^Q>7ffda@jWqdt4+EJ@lZOUcAbPsUvep>}E?|DY%{IT*K%~w~#L%C#YQi(NX3K zx!i&#|3fqIpe%j9S|&WEDX&JGHo&K)GrM7^J~CxND67VOK||<`mT0!k_RpLw{WCv#fU0+qC4+^ysSrac9xk#td*3XITl>3; zO!Cc0*23fQqW-n2!7Bn34ZQWXMScqfQd@i0rB>0#N8~5{@|&xF* z{V=D&eAo&Ybpq-|WQuDkGSDK}UD&Nl_(?=GeWgkykND`wsv0jHIlB*WeI+aB=?*&+ zK#ScoWv!>QC3>g^v9nQp+&%8bqqoVZ)T~!F$PTM3&nn&5A;<}4OE36LXy0*O?oky| z!djd>Hr%C-nmxcQ{H!vaiNv2^LU}+=O$=b_B#0NiFsW%Am%A_=#>%M4foP!O+G~i0 zQXm_b=*9+E=J8P|`n(-y`P=2W)#h!!&KY3;YN&yN4vzi{6iG&Qzp0Yze!YLnQhYCg z!gPDp5)89Zxbp&8w$@i{tptxhVBh_owbQLSQ_pFq)?f}#zld@~$4fD@=<(Jqcpy~? zrH+Z1(b3RJsC&iB$4Ggp;xmx_b$_z*mBoyi-z%MF(ZOT$H^HYsLQ|uTxVkKJyL;YU zC`-vvfNh_mmPQe*zY-(zS9dib=5Ly8mCM)~J5ZW9Vwuo9%O=VHCy3O3@`BNNr$35t zcNl4)gv7|NWmRk_8K=V4mH6#)^_iNmXqJ5bXuE^v7ZQ$mDD&HKW!v@0wh6WDC+aBF z9s{C-X@Ut?@GhWk^&^cYzH);VSJj`8-PIlGF}NzYSw#B@`qNNv~CD(zqMYzEKA~>T*B2n)glNW4F3U5uU#)KsOo1(xQzHrLHa&5GU&fRBF^A4!D02Lb?cNA# znQk(+!HjFC7g`fc)VS^~5&G!kqx=c80SgMjk91zO%qP8Vc%{|B7Cz%sf-A|DGW<-C ztRl}5Tq-w}$RE&yES^$}th96vc6j6La2jXa5=akf(~l5{x;^p=CyB{*OkPe9fCR){ zV?ZjwNikd;WX+q~({t$50Bm`gRUtTSZ~oTqR~kkhtYo$K_&79v#xl#L+>-Ah20Q_U zv)3n)_vMf_edae^Z~{L=4(b*ZkYeKLq1BY*2o)5)V%*_f9U#VTW9-A_njNvm?ueh#s5d$Dmq_Xy9buIS@+H+)0`B?He#KD?$Ks(QD!vUSgMH47uP&^jG8nuxop&~VCG=7O@|QXY_WM3Te#{pcO2YMh)(2hkdW~7G7a* zPwrZf32zO&q_NVm04F$KKN7(c_x####M==^V*1lYEs6OWGcY@nsB9qZ>JSx9dQlNa z&;+XaF@`MRd2>%*^4Y!J+-Ik(yQih=m5KR8aN>l*bo|*o1O5`U=g(x$1h!{P%e3pJ{8>O zSJi`LH{7h>e$YZwP(W?tW$(+E;%3tooRTRa(AgDhme+~&hMmS6g1K%oA8A~6DHg>O zy9Qp?ol>mX%(nUl$f0b1p4vJv%WlMjZGZZWhb!M+5s_8U-ic{iGK>1-(DOw@t19rY zF0hW^0`$>EmN%Rtfu;|A?+l>blsx+h4okC#zFwsUDz4@_$jHDCm)IQ(&jy$pF`Ds; zfER`>r6yyVYo_WKN@)8eFu%cC>maM36GsC93>!i|{|@Z!Z#L6a${|&QQo=EtWB*_3 zTim4PlKP8NmFu(@eb#Tb`Xu3S0oT@Is3NyYyUtdXUi8@Yu9|1~gF2M>>O;hW0GQB_ z9U~qtZhWe0C!wmgp|kaHisG1#a>>&`15La*LS9KY{$@i*xB2&SFJZH$_`nnCg*j48 z21r9i28~8Fjyu?ptie^-84AbF6{hdOj$Gh{RvT;jhX#6(W&$KJw|~YZo%t4|e#tu3 zxz?B}{|wFu)As1ook zo9OG>$!q#1lW2R+ARhIBYkeLrXCbq72rC6SPV@ayGHzjS19P}!sio8kbVvw?168|x z2D88gzqMEwe)32*%W~mZdsq+M*c4SpQJxP`!HzI=(M4YotCb?!R+2v({P@ijow+?$~%qnEv zKk-mrYjs3LbE1rsH%xf)-0pE^G|uC-xh@rVPnVA(PR`P3B=*CoI0o_d7*vYkvl5XH zuUd?xCr3qu?7=`%teQm(nV8MxlBdN)&nqJbn2MEJOGWhYB_-};kt~fH$s$2FgL z?SnRRV3TP4O)PPJ}Z@@f0xF;r4P&qj}KMh)8EB2;0i$yeUPCXQo7cEQPx2X2gSyy_u z%$&lC#zfW95i!~e7Ibh`FA z+f)Og`T&nDS4&L4fDiBknlo(A>b?c?hm5kb$Gh{=7xQt5yrSf~tgVz*L8v^ffbnF} zX_TsT)_;|M#?g6s-HYS-^9YSk*VYx1HIQ7O_8^(fYV_Y8l4)Yx2X2A~#;oV(n{+te zjY_-}IV3efu2GoB;3D*ItyXHD9qw* zizvqkrLftx!j=vwKL3(uUYLmzoo|6h3lBt*=57KQb`aAT?)XqM<#I0#{Jq*@vGyHo zk{t^ZZgWD-^!|fOdYI{9FV!~BNQi&vYscb zlP=a|UXh%lp+PfJ_JcINCRCtOqNUGb_qhiBF17f+6%sE6O%Pd^i|V%IleR0Kk$AQi z61(k3hDs|;(4h{uYS`_o=s2n^liy3dkhm)HL`_-FMvxFnmi$N7+%a(+yj^iKFZ#g0Nv%+`Gvo-1YPr9lM7{~`upG;3Jv za<-d}{hi+bo<|XBhZ`~T%QaR?RF!8@Gd!%gro=$9UO!>0@R}3fS^@b21lQzX|6G*+ zld`~|Nf|`SIxTkbp03`6KGX!8gp5k(_h8hjk;Nvh2^+5j-3^9G^B3P?`72qpYpV>D4vB;29q+qJIU*|j6mzSALz(F7nx>u9A zkzpXF-t~d%EHIHRZ1r{F+rn{YNCDi097Kb3d&{6wqe5A(Up_h+Zk#t1`pRn?NE{&D{TsviY=2;A+Vb{eW+oHoDnQs7p@B}9K)K6 zht=lzh2JE#umJ7Q@XoT_{E)`lh&`@PVhB%s%|NM%C1=FQ1|D>*sb=o^4aEQI^z6d_ zkP3S0@1K%hne8y)ofHxhy1svdys9E;5P52Hh4xT2x}`=+(MDXsE0*C}K&JN7mCx|( zKcbj1;bf=r$$61ab&YtG5C;ZE+3rtaUc$Cu}dZ3fp)z^ja2G$rUcl zB)(wv8OHh)chE@TdPz3`ojAER#2FV!Ta^DX`uI*Xns)n2hl+uAF51vbwTW&^r9ku7vupha!jj8<6=hq_Kdk&7aVa zBjk;NLt=r23{*(FJ$@*=bW~LJuULYHmr<|*NPqw#zTOa8mC8~666aO#+R<#2+l|$| z(LWE6ulp-yG6L!~jmK(DD@J*p_qxup{E`>omV3ziL-%PXWfdSI?qeB}v>=B1F&Ky% z(i~nkQ(HW<1S&4=t2R&F>l4aa@mv)+X=}@zTjc-D8b=iz9r2NQLI!j@xQ0Vry=tF# zvnui!^KLm`=MUAC+;kJ2%nn|KIr}g}bIV^a^EY3x?7gA%?QV^@F1s-7Rs8vF8KRP?{`s}iA*Gs5OzlbsDcdKLuN7^ zzUFB!RwWsMr^Wzf@37w0i;E}H^tYc=T!|NJN3;BtKOW>^X zzz+&16xvC0Z{!hEqM`^8kmU9DkBC z&u%4Yq%k#0RNIl>(Rj6(OE`I3h1?Yn#{lA2$%}1?rUJC}_c9l2+wYX|NMkM$#aQX4 zQYOW&d+S|JU;Tm7J$@~2fsFFwhswr$;n#u0y7Xtastt4^lLNdL-gjoE_ z@+zhry3%iQ=lydU`{31;Ph(X1u~QuZ6_<}s@Aw|OBm+Ds{p?pGNYU*df5T}!1VW;W zSVDd2n#p`}+#+Kl^{R&N%-YPLa`39ADm0rlI-D0}&8x+ClZTpldc?Aada$}r7KW6W zyX4@|m9p}sWS#y|cz*&A$4vt-P+v+<&txnaQircG4lLvmW6o>{LhrEa*KaM)Na7X3o=a-p4Xf2 zs~r_JScydlf5@C|$p7rl!DjynD1=FO{pn`9%8UWk+)}NDSM3}i8u7!qZp^2E*ow80 z>kaGa^2dss;%8umXF-LjBh7aCDJShQo-(^O;wRZ0^Z35}3~C&~qPcR+N~4lYISpcR z8MKk1l1S65f^OfcLkv-0E%~W%Kj~%+Lx|@7@s*kdhqCM;9+`=<#9wQKYDZ zR7})F(sDw!p5SwrBRw+GFi6a?`K2_6KX2$NSf=m{g~cJW5uUv2`wF;~$dR5C&>{Mx zo=2Ufcvz@w;UuL~%?oq4=?mQs_ns%Psqsv(L@hU$bq;)exs8kE@w(4>PH~Xj8cbbw0~{N|1tP(H z{+1$6Pt%0;9e`DoVIqT~1pV94@Y7q}H4pRSY&(%t%vV zmxbUZ;cNLZ0$wE7S;{>pmXZFgk6wsyu@%lY5HcO(cuY$2Mb1PNPTQPL!=(V zfqGxg_j}^Ih-R^)aE&SVtxJIkJk8^F;zn zw(wy6>4UK;$vX-FTw$0+a5A-X>)0<}aG3v9piN_NtW2*gtxo8Ztlsz0neQLAjlifG=U9B%G-K0NQ2k+kb z-jrhE{#Oe>@q1FdyJ4r5Vaw~%F?g?-af=e9nhFxE68yy-B04$SW6qKOzAxgu^P>kn z0fp6l(R{PE!yoqjx=z)F)(<)NlWxWI{uh;l7kEldKD` zGmyMATfxOuF=7LS3c$Vs37c{^J<#{J&-j9q-rYzCQOy>&tQtP*>yhh z^T@%D+GsYA^AOXEwFKH3XUZYttBN-%>l8H^)jXe$M1H_7))@`m z;-w$FOTUib&qMn*^&xQ>z`18=A*G9ySfGtcO;0rtv4XM+0>{v1WTV56A4Pv54x>l7 z#j{-v+I$kb_Cx+ZPOP|~MsKFP&pdR$f8k)Mj8$1J9_z9Y-AGJZ^hz*(mruz@;1 z4aS0<6-p=_URCsPb9epJ^7qEukXymPaaRLEyp2c0zYYvIakEocJf8-SBCBC^8Ge7ylUy*u$oiaXo&6VFna;bn~Yq~q6{~# zrv0GQ1G*rIGe@M4w~$>kKA8b#EMM${5XB4Sv~LNl-YN0-+$RhAUtPK7iN?Tos@0M^ zQmb9~BuCu!C_6F~;?mYTEz5yPGSAEnddP@{gLF^}iPYHa<>m=oi!UYoPe`FwBHGcM{Xj(fZtYPihaNt9F1~3y~RR6?^E`CfC8$oqXyaD z=4-niSKdS4e9&L{-s+vMs=}rlKKE7c|7Q1YMD&kkWO@`%k>pRWFi~(| z`RUqP)-fV(kUZ`YR~5YJQ~V}MNc=br_Elr{PD_cBAG!_(=A9-|)QWOrYfqL$qbFzE z3kdlSvb-BM_>@0P+EP?%c-1N-$DqO1Jr1|?L{&ls1M`uUuD%?xl1d8=No8ZNe}vOy z%hWi3aBch%J!@M<#k-&Pae&@WLu4#h>kHCjg7;WT;rfQ2xSYELSF>U!Jx%U2N{4U$ z!l|HCuhO_09D$Wy95nphCiSL6X+G}5n4K*VnJXM1rXKw$dm%Xd96q*t6x?hV@-6#F zm0^B>%lv$j!DdqX;7Sbs4N6xrUPUv_E7%i?0}a8LCjLKNfb?5xr^2p9*$G9c(uEtIXeW zV9a(m;Mr>fJ5s0Na0eRG_!~!gQ##IbU3#lAUPzaIWG;jfiG6=gG@-@TA&S~LD@IAL zTK@GwDin)~e~?KM$b;x%TWT0f^+e4LIw0uNT`{v&iL)cB=RdYJ@P0qm_uqN*c4Xcn zM(>r2MwI6wJDK@=c1NmgG#9^pGF^@v_p%#OI!yE0z4^Xe@O%b}d03&LlcykdRh1hg zlG6rsomakY{1xgT9T%lqYVY*E5?!YjdF*L`Tl>Ft{d#fMq&fbyoFFQFA!X9{l30hcNa@f;4 z_45#7tFy~ml`q&u9ldn38eeOvm$&G!1Hfa8c_P64IbS71l*wE z8;OtPjVeVhSl17_uG77t%+vh%m`aGc8@XYys(@v1}IN_UBfuEcu zOkau#0YMH>+^KmXf@whwyo5qkr=Q!ZkIFx>wwaTm5W{Ovq0Oc!iNs2H@5F7uV~qp7 z86FaJvN~OrWb2QXkTufdb#j~OT8a2X4mQf0wIX#y`Er27qKYDoTTJW(6@J`GR;{_H6vi-ezUY_ljWlF$ZCqq9;nv%c@uPf8 zq)MBVz5=1jFogQ3;x|hwJKm@W$M0*VOpRYID{ZT;#Uy>u(v!qgd z-Cmyc(QMJF;%UFo=fQvV9DUagNC~>aLk7k!tKzKj;op#1gH_r&OizR}^HNB1wv?ta zC-vl}6H0(p^U?hCpdA3b{d>myoX6zKIGXz0nDO9QOG@4Ji^6PVvuJdTxSRj)NI(Jl zFF!U>zb`{vKfR4ZzU*r_yj6jtV*XkabiKLRYoAx|k=N5(ky=fNM?2wZZ}R~Da7d|- zb)!ie<%frI<(1+J_ss5`*!$f-^S*=a{az2=;lFQXWW7R%9HajYIZH$Dm-bKOp?wi2 zZ%=uTr)T!BjV0i|rL%zB4X6NZv_3;;Q>0DVK*R?2r%4Yc&bYT(zNViHPi-lT>Ytah zKK9#3ideN5Wf$T!rU-1cEbrN-nmLt>YljMr{pDmgs&v@nCuHH^p(hu!O(xrJW2ejQ zznxxGSQYcq^|Q%TTHgRDi=BK@)d__T55uS`*&a9d=!ukoWZW9MdSEGL~Kb))_zK9-PJ}hmvmr9n(N4te5 zED8P*rj`(+Q%w&yYDkaGO}{3lnm$P}a>_LR(OHw+R-^~Gv-;n$*8HO(o#N^Af=pyD@gEPgRG4ML4&8Sp=&-m+e6n*@cjSEcc7Y)5giC<0{Q$(DFjm zdyP!{dGdLGibgao#w}D1ip$R9G$BWoiRy+lh+tu*{f(PuJG2n73_e=3Jk;26`^f8C zAIb?HXPRq>8$?$L5}M#f{1d5C%ZQkH#B5CBZovkl^w9cSy7`TrwQZRd=fpI}tX0Xp zLRAU{Vw=fi`A3$prAv!iqi|MypiJ1E^yR|g&TNunmeV~66retycNYIKAtG50yMsB^ z-x6E}^@>M|e-B1R5J9 z54lY{Nt*N?JCJNSib8!>KxcXQyT{WoLvw}~rxTSK zT!Iu%M+z!fE--cCuuH4NNss4>Q#rQ4Y*{FmAFre#4)BM{L*T@Q?0-qQSr8+Cs8sX! zo!<_lF0iCO>FXWqV(LU4^`S58+lZmBBh<;8+4bR8Hu%%|am#wpMTK<_@%^9a>u$GW zi_f$Fd5TD@#@2-|>Wh@ye}g*GSa(?-ZiG0s{f6J$rtWC_cOZ>89qlBMko5G$E8gF% zrj;XJA=M6ehN4&rvvlEDHw~ogy_PG%PC;*O-epyF5W3oW1%w(A5!S0Q$uc@aadr>5(7EeCinX7XU6q#XLU%# zcyIi#(CB5Q)Rn!M%RPQduVn;SXQn9~=-)hLF95Be?rKGfgovnn8WAadL$tF#J@MUr zqt=2-Cxwg(l)ln?aXSp7Ba1pm2Pl-iB+7Xw<O6%z>w$~>JAiPUOp zxLOM0rTQr8RD+PJ@eV4f|G1}`KHS?@OIdn89ce06M& z;7i|e2pm|Z6@(!h?-11OEH*;8BL@4PX`aYw;&QpN?<*+=mgVH?#!ifO5bbcxkrD5d za&pwF6T11AK|6}{-aMuZA!9LCAynqcL>MBlmmRI$ItfcAVhU-IV4#>=P(-P;w(|L# z@BJ0ghrhn$`8QSD4;g}d96y=kV}bR7hUoNr`neb~PnS1;{IehY)_*@xkfi3%l7=B* zaCGOlA8w;W%Gu&^)a3G3o84TP2lRY!jJ{N3*=FH|jD6)Wg@i!PcIv8iqm_-lZiEQa zWc1PAszukNMDOtO#XaZqnKy6Wu&ygHPKbv)n?zeF)iS?IEl8+@I9e9n+f|cE&b_r} zT|<}dOCyM96{>Q*KCy0Up~*qr0p1Fz>ZjHeZkuY1nLN!*(`@FD<%to`A`<95()Y&G z(}fogpYZbKE1sSnY0XZuwHDiSF&VnGc{+o5t8$aTAI|O0vwHv9kN=1ah6)5)v*2aa z^6$3IB;nV!^X~CAm&C8(m;&2&9KI^AxzdyJMO%cGe6}M6#as4(U9-QTClYMLzlD6GQ^7ea^P+ zEKB5|eaVQP*@0q<%t)X%<|_>$>4--WQW6in?%o!#4MzO**_t^f#bn4@X&b5;m@&Q5 zjaw0OB3AQiGU>K+GPEPTpO(>BmSva?L3pnqh2o*?2k)^sL5}2HbVeie%B0?@F(a~KLBbY& zL^tzFf6^Eas5W?yLgfBz9&e(-g0iI(2Jc9O-Yak3y*669Do@u& zikPLs(e}40#2I17by5+!Y?QLI@7?qHhQF8zX^#G;e}IS~>)p*hdv}xEuB_K9clQsZ znAq0cin`VaUWgC%rzJNePRkv&uBZlbUJ$8fdfbQ7*LYzuxW$1hZY89HXBLyW_S4*~ zR=Rn|X?2yRP+Oyw)e7*KsAWUD6{k7P2fr;PQ@Xac(wd{CisyM+ovq_E7qA@3nB4TX z+Wifq^<2?*H6%TZWDL8vUik3$dQ;kZ{GgaU${Fj|HE&5 z?ECe1{WB>hF6Hq*^PTVi+P_l!O2|$YjgtfQW*?y4(4=4h z3xbi>Ycm_dm<&R_7sC4wuc@i@`13#kLYPSsDP{G|(+Z)S zqZc>U`b$%!mP%cB&i8ky!1Z!D+J$l`b;LPh!GfH_PRh{Lj5!ZmhT17w%)vTDUl?s6 zg+|wk1?hHoQ!ZFmb2aZQu2fw}YKEM>W4x#!0*;dZLrYbDggbT@H#_kt;$ z=m`5}Q822N+BQlzm17k9EYuxTol6ra&5TPWnu+P}v{oLAs28*&-p2Siw&_pPWav(F zMDFPwfr%I=QaI7H^R&H1_Ko{{<4Qd}70dJMCSx~`u-S{~U>vDd9U&-`x-!ob)09xn zM_a5`ixSy)Q(ew;=KjS!+rF`GJEd3lR#C3BzFH=ndgP7bszf+Ynb1rL8v;e3HYL}9 zNH!x(>Evax0;{f+nyfepLKUUAf~ujW_vbU~WnnLm+%I>$e)~ClHU88TCPPRBI-N*| z9?)RLWeCmq^rAF6Nrvr-ZEVINGs60au~~o^B2!t}s#0rnba}Mstynhufzg1naz;xf zh#A#RQ=~OvPR5O@rCNJECoj`Fy_sWsYlX5|exdatn-$Mmyf8HG_Goq6>JWKu!4hMq z*T%Z<5bqdjUod|%^}e+gxHsay#q4yn`2kXF9oeo|$g>@)nzg%HZ*E!}&HkY`FQNid zUQn!XoOARbapx$iIM*s+{I^JGjW{`CzVD=IAu<~&Kv!a@j@W{9^P96Z(XN*SD@p^; z3|N~-SNUP8cSCelMp5ebek2a~)9AfY=WAsSgNLI?Hol{@4#B$sJusz{qy9>x8p7AR zwd->vMtg6aOq9s!+7@MDQ?wpQ%{-1Uo8%YYCIk1z^L95!*1DJa%k@RuA1BT$r0R>TSe4Gv}F;=zgyr54L?=GCMotzEd%0Zv?|x_BF)u$4{>|WOfjHUPxHsd{Ec4k&=_%8D zA;s)1+l6_KJUzWdYc)B0w1RD#j6CltGL&A9UtX%I9?$26n1XMB7*A`8h+MgDE4o8? zdg6OO_%5w?zIJy9y;+gvZ4LEeMa0PGA^3cA^mKgB?SltmoP2|d3o%XvjGJZQ=g*>?^!6+S5;<9p zVb77UE7w)2^-6aSs1TDAdffVfbaboQ5I6Y0V~pmoUUm~zBug^Dd3xJk*vo3qc{8NQ z4nWn4EA=*4Y*sjGAcV>Y1=sg4Fcv@6D8-bi)^=||A`lEo#T@+6Mn9&i9oAaA6_UL- zwz9uxyRh$_T6ZJJ%g73pqXQHss*IQ_vtF==bNG%$BqUBbq0`9@hCQG}OQ5KR zM&4S%@%uAm-rtIcpNj|)r3}=}=cgV7sDVoQ=M+co?Nf}2VfR>fYW1QO zAv90XaJ6-Fzq*_~HKJFd%mgC6TQPpVpV`;zr$2b}-M{=(U;Fw0&QKtK96!0^V}bR7 zhI!Kb=)=60gv<8kKSwmOYzK0Pm?>vGh@}Vdn46yOaO;lZW`wwt@v{ZzSs~I@4=)-~ zobS<&)~2nMw+&@viHS?r?F4%KEh8ca&)9p;?drX=x`VsrdCkWuGsQu;FNcZc^VZ=& zxCUoPNyZ`LnNkwG@cf~x>MwIMJiL7-Ur@!)pdm!kl$rBlEzaVtQUa(UMz!u}E7tCj zY6Vs;v~H+Z5CLt57;v+`Xxhm+vDe17uhiN|DgF@eZCuOl)Z!knh?Hm7(l|2S_NbN1 z|V^+B#Dk*&9vIMu2)n8 zQ+C^ioD6CCe5Y&YvR9} z9_M8u&l9aRcAg=97_Z1$$B`*#=A5{$R{Z?*PyHPC=a;Nc&7PxRT${tk2^W3TMvLue zPqz+KJvLKDWRkaZC8*yeBf&4S0G;dFT<{@=IIAHdA=+VQ6jZ9sZ7bY-*W2!;RLF1Bc16sUck!(PGsu6pZm z_-`drj`Xb}Z!qi`|;`>`Y_t{lA;)3^C0@a3!L($Idq z=6L<_{lO5m4oJfs+l4B-abttfTO|dvci4)VFy}npqCGcxGT*GvUw{9M&N7v{762 zIgy+bHrhWvPmWDQKsvP)u6}<@Da4o!#j1wRr8IGO|A6*NZH-Sp`Gm`QW#6y7csQ|c z=HU}uRv+`klx9-2Lh$lr)(wF~)CAr9+~%|(Bx+a87&p5ExZRhOjQ>??^SRe4)yVr@ zo3+j*vaSu$$TFWOn?=n`$z1wl%m*iI%ypY56={)-Wf6dSxVXHBUWssPBMDwiN9N^> z1mU_GPp!3~(hUSL(M!`pYk{Fg5y3p7Vgv$pZ(J@aRw8m3tQtt=S(MJZ;yBdVa~mX(@cZ;>1F=rX}*UUwQrb-GBWnFJJyU(=_ohM&~DYd@Qg&(Af6J z-_`f$G_kHvf1;GPe^kRxaFXgMsEnWBZ6iPl=Ajdm)`nUp`U5}m&P){+9Q|q@wriZ8 z$zDI)&@V%}%+kO}z>ZvDDj-OdZ5%Fd0jvRYH@1zyVDnl{VK_}EQi}H9YEd?|R_;#s zfVCjnGnq4}FNnYWb&|oOIM9Tl4l|z2t?;u#vT0{6Zl!=3p2pCTJRMh3Vqy|servH! zQ6jAc)>5F0dkdM;vDV6Uzf!g-ltOqYNT2)~X?h6*;>V-60Ib@41k`Ze2eX zb0LLH3bvV+eWRAfG}%IaU9Vg(S8`6ol#Vv(wr@N=z2kCy;wxWy#mkrXJU#_pzbUTj zGcv!~Yoa+L&gp0)Yq$9}%`@lo*~r7|Mr)?9j8T}g&}#FRkX_d~ zC+2A(MB~8C6>{j#$ug<_%eznLnyAfuxc1%rydLiEA*vh64yzHc+`8^6#)S}Oz{0Fc zX=so1qHJqJn~{tIojE7E&%42u>fQtE-4tF?f*FrSj)G)7FZlG*_=e zm-U>yU7vgduEXOCBH2Bb+!ldArSSN;vXv)F%}1V|x^yn3Oiq*EYYx?|Dd4)btb1V~ zwB{St&;UW7*)O<)vh>cr7IHqbOeZV_B2dLbn>E-$%#?J_YqBbW7{$0@I_CQg>oH@| zbgV0_ZCqM$#7G^{lcQrf5PKUQ4j*qS+Z3a>v+cRE=&(*zkG&aC{_{eJq1Ltc*Tk+- z*T4v~7wI?K7OY(uV`Nx)=zD?dt_;@O_mB1Vc!vGJWcO5^)?tNf#}tlQl{wFVsa;db z1niK}N6|j$6)2~3r1i@`bGf|!m+sFG|Ne*KVoe{bh2Qn~c*%Yuhb>&!{oOyMvWJj6 zJ?JgY;yFTna1(yp{*rx*G1Scy$Fs-UXvyFkg`-HNRp*Snj~BIW68a!BAsTl;+l@1# z-BgRHwNzA_oz6t)dTWy`^XxKzv5;j2A-GDXyP9rrb;e?)9L9qOqBd4yTtzPjXX8NK z2se%gwpfk$i+wBPDY9g1_h~aS^Kn9z(WJQXdqT)W8r!yWxm<`Luor6$YAdJ~+l)g; zq^bw$Ie7EQu;jMjQWve=u%6L0t)5<;5 zdgbZzL~WII-@H&4*4^B-Z`0Qe9&0746}lpclm+qD-ud*v-RZ;+zIa3Hog6b8R}(Hc za%lV`;|_Iosk?_in~HGe@$ohLwsV?J%+rbc^Gi}XQ8qx6eImtpUIM}M^Mqh1%rkVu zT1mcXiWNm8x#c)yc;2C^g?-!m>u%ZMo1_TTfhc1txM;0VabA}Ai^iOp1(YY=zWstJ z&!oH%LL#S$(Y7-r$Kr{^1J*~xrK;TW`+~oCv%j=8C3*`GYt?Hw{PSX*n4*&0hbpT1 z$MvIz5p!$T@%)Y==EjAy=X*zMF=WOsU~7iVwpN+vnR%WLWC*=ssEQ$1+1r8ZwsV@S zg+HRbg!k7gJ5ag`R6x1~K%+KSTB~&NYpz(>vIx($J;7huT6BpJ#^KM`JqFq}+JZd$ z_w7**K@QUWp^Rj*Ya<;YP;23$D><6U@086pV$3fcDG%C-Q((VbdHwW*|K76P{rjpe zO8Gc`;>O1U>jRC`^2v|^2RTgc zZehfJ><$V+2rRP?n@&)hcxY%ObyK!Dl%gpwk z(Wn&*w$P3O>-_*^LEKecj#H_2=psZ%*KS8v`<-K`I1;9&R2+Y^Z98*584}lpTK4y^ zTZp##93MoPrggg!PF?PxECURk98t+SPtb-iGPMC0!6#KXf0kvkmsD^h#wj*jitw)R$V>xmcwIa~2;-f!lu)T*JuDI}&TGfk1wR*1oj7DV0tV+?yv za|*PUsO@I;5!@uAVQqiu#zh*{SJ6>SkG`Mr1+zAft*O-5m~&%7=^+tlcBny~`AV6u z)}VNggN|xI#Ozw^d9>vw#);sErVwo%*-Nq4#Ipx6G%5)6+Nj<(%W*>Fwsl!M?RkN5 zduGLdUzbj!A{yx$X=>#Y*nElO&=8-k9Xi-;!Q1QUcKG{JK>P1F#MoIwOeAU~{V7=@ zMDGgPXx%9T(XM$6fjD_C;z%11@xxCeFM+q$cmKlO)8#L|y!-0E*FUxieu;}t)9_FAO>@K&hbPHGrd_jZtsQKHo8=Vc5o0z%b|NnbMM_Ya_3;( z$o9kY3e2a+;P4oSbD%A=stwxBkv@2_0fI^-Xym3#y213rc0vz7FDw2+5JUCEp!yKh z9NrZ|nBFT^?T{+Okhxp#i1*gwTlXs^DAY>X&7#5DeeS6>dwFFi$hRE0@caQg%{`O!GpFk#*fr)P2pA%k{##t;}<_ zdmYT_dmu9FTFCh(hEO<)ioq}H{T8N+7aPs5Fxq+h_?B(E8b`^wJgrx1GgDioC}W#@8E}pJqj1u{2}8_ik1a>vlCx zA$lMf2{i;w6sY8BCI*9ry0}587W3>9OF@|PLMfe6b|8?$Ajo@3bMP^5&RgA|MRnue z8%kXKIki}-aczfd7ujAn(Gcwv&lC+I9vOgwsUbrQnA_CtkY_evx7T}~RocM9(xZ87 zMK$tvtHn^ephU5PyW0<=rGpkT2cFVlYaqdRT!BQ;33Q`Yp>{(85v6-85G{_(L6_vK zjiYeFfp&-Y)>OOS>Kx7xEhb8&kDltB>AmBL>vDa)qX1{6C+|wc2xEQY8dK zxQBY#=D1;w(=>6}cRqXjy?^7y`Q^VirOC`tKaQWM@v*@AKx3;SE;ODAB7h<3I_S5GE8e@{?*y;*s|5@ispGprt%xERL7nO&rh9E4cw;)SXCoE2B7Jrii;L}|~26{@^_e8(p*zQV)ZJzvZ- zO*2{}!;3-Wc`HY}XcQ~JLSo9+!f9%zptZIm7}-P`g%E@kO%k2y>73Ox(lu1lz~oT2kitM zD&9y6<~wGs$f4l1`E;nUMO<+?=8SRPx|n}p(}A=P;{R<<9a*jKwGTPgA{C|L2)Bs& zu&J$ay*FRuBOyiOWCeSlh?r+r0g=pBFMsZ7fA?RyKfnBIl^-vP^?M6@`$v0xEU-S* z&>z*N!8j35m$(1ab$yFOAy4^;b+Iv)0Do!4diioY!I=CRU!a8SypmEzUZ1%b4*r{-Ein=3w;!yjc`swD8)LKQGQoE7KWe{yJ zw65(tT`Oq|NNAL{Q}?TF_~`AjFpxQCsc3LTr~f;F>~bu-gTyWbqS^`87(43k)qJ4p z-nd+!2q95hCnCgXZ6*<+_~r?aQlON=^?K#$df}^IeZ}3~otZPbOZ_OKgSU;X*o|Ib z89EZ=#%}4h>l=xgTkFHJD2*WBd!ZN*VVoN2T(>K#ktoYxu6WDyR%DBsWkpBHYKR$P z8|oYuO1;vw()v#6`%N*YHkWS}2R5g+?P^NZ2>W&+#=z-xPl(e&boK{@=dI!9t?F%a zgh$n_B>ehxrAb5EK##g3vWBQmQ$pl~XlLKANa!AVq$KmC!uFM0v-t?&MwKYd-V%;$wEMmuf! z!gSlnhpJ{QSmq}qsy82(79c1o8+y=cyFuZOG^uv#UT6wa6jzCjh0qrjFGzI!R`EqK zR8&@A2S?AWXfmg1GcXsXQ>3-RGS5ze_X4Y%I;}P1Boz+`9zm_*l4{$KlOtG0NLHg( z5e6w&hH}seq0W&R76jraRPpww?>2z(Kdj9M5(_aKnjns_nV-|JIjAU=raRib)uiKh z$(M?0yS}9qs7kGokOHcmC_+2db~8~lIX2W*40#meylHFX(>-7LB|l3?C#d@hl5gfdN;$*7!o-tr5YZhz0(c^%!u8= z3mZEKWtv8EO(-Xt`=hCLl83aXYytx#wp(%4++O9FcV2|32(=VPKqu0YDEo+HD%e3t z=&n4pLM+ky1QjCDio)J8v9MBmHI-}dwmj}RhCSSLhV&sRJzuqApb!!uMH+`1qU!-UA}#}G?J=)JPw2NI zX3<3nsy15LQ7VYpGjyUIUZi1lqtJtK3eBBtpvhk79tY4dFANn6&mQmA6m6ZMko^Y_ zYjsNqC^vsHoWd{~j)K{DY|WyIVpUQI#4Jd6H2yd^cGmsrzj#+(-bV?KH$lqB@slt< z7FZu>Z1vrb^nD_MD2Yb-nfvn@N!_yXQeqg34k6NWjzEZ(zOITd63#10gR2w{zbbW( zQ;g=P)wI)PD2f`r547x7WEq-a@3Cv4)|FbX)V>nfsk$>xPzN`v1K97$$^4FV^zZaW zhPC3YQL1n92luGa+=It#DD3o~QX=WRphiS%ydeJpM! zhCr`&ay2q*^i%aSGB1God##1iHs}`fF@y$#WA>b#(R+82y7`RVkTkO)?OyZ_+rS(% zU6rj`8*g2&+}(Xb&J$0UCweKQm^`{Bu(v|5#lcN$bBbDla5|kBxr#9+LX2b)LTi*( ztre?|P#Fy9hLcL~!p&g59q7-vdv={VISW%Zbf~t@w(YdNQYUXgH)|u~+?v*QSLs=i z7vh;5h1NTJ*@!X|qd9JeB+T=Bb=?$0l9s9m|@(0x1~pCZ=RXkQ=5d7UxoG_4#E*i1C<=e>KmU5F6`Sy-jZx z6d?vu%vLxbkHZjhcsP2n;NY7Noj=>HnVK~wVzS7b-ggS|;CTy543U>FUO^C^u5VcP zE46L3YExvi@edWHDj{02)cbxT$2ZHzYt?f7tSuTy?!<4rN;QXeFCGv>kxMCz?86WP z(fO0n(U|U>&7(DW%)4%O6)`x^tvg3BQi~b+_Fm}y!n!?D>T2s2JKJ99z3}$!=e&J< z%d#XB5`;T)dW9;alTju1vJyf^+>;FH{(eW1*UTUnC59Vk($v9zNOZ5Tn|g8-jN#x0 zim%BcmN+Th(5E_x?=sePH8e{shN*Y)^-O7+$i(Blfgx>Zr?vG@0e@c~1NG^ONw~ZH zeV$B_Sn6(wQ51ya90?0z4MAMNqQ|>aOjf;@)dGCE0+xF=e2SK3A$ne7Ot8!gDQ05I zJjdOA86yym_Gg#`Bp>`Fq&*8fwgNy>Brg+}Z8b-7EEYvPD-H2wUGXsATgw4B3MO;x zu1K6%<{4Q|l&!E=Ypb}=HrnjEBZm5+{n!jFOVPiMg-@rL4`lGh-H0s9!aOHxE0jy| zf&e56RQvn`UF&@ay#}G*9@SC{+g^?~XZ1voS_^xz;^VZ;)-sBL&~3q9mYHc@4Dk{< z3aFSODGFT^tvLx8Axf}#n^Cv~M~s@GMn|owhE(=$p|{hNiM`YN&f{fcUDtzuc0;^8 zxcB&)`(uf1tk$Np4JU}9x(Hl)w*X;}hcPtQkREL|n?gvoF=}Pqc3LZLXd92>N5ZfO zG4gs!LY^(~x7C8G9=sO^^{|uy=M;6DH?@xNYAdpOH&3+M3g`38vSgsqv=M^E5e2d5 zQNlo|Y=hR}=Ol`RNL1tgjQgZO*Gg+P2~~}YBr(#}VziWg%uNeVwzgi~1N)`0>y_*F z#9D?wnYXJk#b^kSVqou>rAL?yC8|o>S9)s%nNb3@H?n}p^j>)UI5?Ev>1yV>s)5sD z-!qI&Ewaj{L8l|F6T2ULP*4va7xU_i{fXAy$-h2P>JwU5IxAawWL+P5`}l@ZFZ8zY zt#AE0kC)H*#!r2N)3R_keUrO$Cx$y)YeFFCMoMQ=Y!KoRpbgf#96Uo+Me*%{$#-=@=iR2Mzmi4+X z*Y)Y2%kkl_+s}MNv3^p<#{%mEjo$J<{F^WZTd8kIXsBj(hrZAC8R`~0 z{oGEY{%VX{Tx&H#H@0C#iKg&tMivgw!e4L5*lk2{?<4Rp z4^79M!-F9+mNsvaao@IiF7LLDvqLbLKDg0eY0XrWt#P?r*siOiaYk0v){g@2D72Jk z1)@5o%K2$Jwz$r|ZwzY!GjjA+K{qe0Bb!l%w0ksGtg!V@Y@3`Mbo&EE6ER}H1VQ?6 zO}CarlHnBod^|(IG|)YwB!;WX_{LVs?tW&rX=#9* zBQY*$?`)e%#Rcdw5S#e>vO@7_<#LNo>1v9!j##E)N>Gj05(lbt5Qv=@_a6F+ndqug zi+XXNjr7YcC-Uif6ZL@-Y+*{P%qk1mNIDGVK?XS~xHl9q6jxtzbno>6MdNCJx zRVPdPvtk8`DFy91S`nSF{F1`%tw|SqbPM|)oS?27dx=OK_9%vu1u>#>ccS>1t3&>8 z2BRiw8Axku=Dnuc2umh;@qQy#D^L&4popn*U%!4sX`R*!Yu(w))i_Ej^jg`q5xaP> zaHm!?gdHgeBDa=j4w>GR5Up*D;?XWfz88}#+N4r@W&=h`5HaN0KG}Fa-_OyLaoX@X zvA0TV(WwE#_4;T+*X<2YPj5-dXbVr*w_LBVUN6jZU~6v(`^0%x zo-U1+H%|G57xD#|P)#=9MG4(|*#d}KzGGK3x=)!nQZI_e%$%UNU{(%?y+=m^b~p+a zijCeZJ?1H!(Q<1nIX}CXm?D;dNO9g-p*85;4U9!e!2;h~?_AgGzkJH=e?L#lul64^ z+5O}A(Z|OE>qCuy2y|;C#{|;3Tps@`wYEQQu_(6asH?+|ZP*J4I|1X1z-W`$gMU-< z8PwdGxhRJi=yW%~8)#2p5V}Ww7W{PvDi%cS6j>~D?v~ZnQ88|px>C$|Pu<+Jo%|dG zmSwiQt*tn3rrD|O=-)lNC?Z5h8+sQ*E^I-X9`ku_LaHqRk6 zsXFQc3KZ1TqJd^aU>zurm8(K0W{X#Wtiur} z^WwoK4dS3F>i4S4!Qz za9X@D6!J6?#YGxw?<3^|&XJO!#!CyyRHr?mr1u_y6oVanc!pYOJ9t^WD^*9-*DWGv z5V*Bl#8yp-oFlbu?B(jncB7Y_%jJpd^@3{Se1Fe!TIj9N`p(zBu6+M{-{tL_N4E7s z2v@%PN(on0;yi!ypg`2ep-qOt}B1w<;eqAq= zz7gH;Poz=pWvqqkhaf}6?O7Os+H^oKOE?k*l3z11V1I_4+T?s+ila`e_DxxVkN;!+g^ak_c@O zeHHpJ5A?06ceE8JO4`QK)fQGeao&oMq0);-QQ`|t@SMO}J;!d~O$nF?8c87=>g2^i zN(&}EHbS`JXXgV^86}F2&!z*t0`r|pq%higiZ)x+T5Ig9IfYM?IUlQaGmqBbEwZBf z)$-!84St1~?-xQ2Cz@SYLhl4ocW3aNI+uhi>TdFlT36$cgj>tNenBv#NnjAy?K4%- zKx^C}{IP3eMUYDI4IAHJlpL(cTGtDAcMqJViR<-=eKY?er!74A<@;ro8JY(j%(I&#@5mPSZ*XnPr)n=1gmayX=ER+y$U z5;CP!QgBY(;Aj%f`ofi!-BC+Ht(ca;G|!|StMehM^w1AjJt^(yeLF5)QrHo7q;z*eSf4jLs-{!r`O8) zd`FBz%!bHoHw%(aUrpRC54?MP!`nA2m-Ry5f55)Or=R{bFYivQ>k}y|Q&&O`M|(9z zD~Lz&GdcxLyD2CYM6$0b12rBIT@4M5lqQCCiM6bqmzB-IUfjnk1dCf52<$jq$&q#G zMY&(4=*V~NJE2BWw4ioqT-G=L-Saa2AI_)K-{?PPMd8Qsqm7RR)(0B@puV^u#5hsv z%I9yt_isKvef}@1%YlPbCr8@CbP$96`3ug~&>p-1QCe*lgW_SOw1Qwtym_7oLAY+4 zFYpk=oY03ogV`XMA*o4boCNJLHY%N4QdmNoX`kW@j71#Vv_Yu#g3<}mxG}v?*78#4 z5MYb#(D_B*pv){1_Pr3}L=r=<22zkc=4LD=UOK_?O1Fi4Y!cdxGo%W=R@=+6wIOa6 z4;6_ft4}GJb3JAq(VQ4wN`daA)#vR!wHA}ap~T!FKuRD|P;ZxL3-n^`(;!3FIV>5n z*#OX;n4Q?JSGK1|LN=mrZ#Nzmbdtc``9$x}TeLDd9DuhbN;8$`>$2F1U2?k2h>Y>OD zFj0fn=5r-F;^W4guCfE$%+Z#!njcqd)LuwYNYk0Bk=k~aWg$}~H>3fgw&G!xHf z9`3%zANl#ry6$}MyFcJNzx8d_YoL8C6S#7B*LXNbR5IFjdT*Rg3poWB>sSrnbXdm( zns%ai`yDI3TZ5oRQRq^fQ<{x$STM+D?p=E`wYlX^#yvbNU-~(YEJNJd~p8^ zF-DNaUK_pMT*QqJG5o>4d~enB6#dPN-5vYAA=;_mRCb*?O_s$cN@*s|&eP01oq)vK z$9JsjMxHWLUaZZam3`kxS(xXAm=b~TEHpbF3%YT6R=a-Pino}IKQnyC0$!7=AxWV- z3Mc(&VM^%FPVhJWUnx7a;wrrHYQ9nE;McgKwVAa+iW4DZZ)x6~*vr20`psvA5GZxE zdvw^5nD3TN%)qdU=*{P3SEM&??%~5Ma>(h80~13uK|rf?SFcG(L^0D|y5U{DRm&;# zg0=Qh4i7?oB&QQ$HsjD%6E#*V&_f2b_WB?@4{tc*aM^tlZLY&GA1*RZVwU&QG@YkZ znP62uch?2(l5R`tQnU*|@x0xvYh0ntAog z6o8k3#Hus+o$>AZ?^tXQTPWvJ{DLX zXoR@@wqLhaUgKNe`%nIrU;EAf_%Fptkl0QA7AhjUMZqxNPVQ=po*8YLfo7>2&}_jS zr!VCo_Qp7yv17lol`DIBB4{9_GdV5C_CJs^`~QBNz6U9_sRuf{st&P@(h8Wdi5e0# zh~eGCdP9ijf7F|q=n)7#I9EiO!b}MLFi;E#?Lc*`ozr`xsk&W*@uK=OC+O$H8Yb0q z!_!D*ZFL}}2kS35b5yhR;XYn;pt>Q{Zv^189K zj;njfz7>gq6f$|TT)b`F$uTm`)4^lW-nm|{h79IR&XIXOQR>Rm~k+4MG0Xd$LK-RzTx-!tbnmG&-OYg8y9EWs-Zw?*TqDWhB^(C%x$yH#Xgt#^$fUs z)=`ifLEGf+IVEzMy}=lpA`d$2=YFs*YJn z1TmyHxHp&tYmet-))%!ZG`l{u>P38XeAG8WHR=A8PH2q8x>I8!=h2F^c`%fvtrzp6 zQ}rxGBSf1~E6y9MfE0@boAT#ANcXub2)0vbfdTr!+F)y$XU3uxBt(x6Rnld>j_I;z4 zZqIvB>fU+z$yfR1U;dQ6G*ZY+;Y6?M7tA!vPVJ0Od=0FVDizV}* z>MFL5G7fg#R;_Um>2kcs&?6em8pevt=$w8#RH(1lb~qkw$J^R6vQ*zQKotSCxUHNL zW#3Nk)~7!sDgVv-`)t{8H~qf8+&>cIV}bR7#^wa%FOL*6Yq|Ww-~ao6@2{-o4WB$b z(4|9Y^w1B#8Z&1c{d_}-Zis+y+urA&lkq3|k)IYxX(9$;uTMvmN{I15QO2puPG`0; z-xPV>h}qpp#e-MG;21DCAi)XH0Hy#kKFiKf=4pfK-zNwXl!Q=pWTOR|3OPmQ(}``r znxBq#^E&G4g_WUUo!bI7+JIw>;AG=wbcW4^DWMkQ9Z90K{XNuc{48#WT3eyCNGX+G zE3H`G9Ij}3?-#x|nX1Rco_~!0EIw-QRI}verv07MWw&I>y%mHM;=+{GAa?;{}p0 z{$nGs>l%*2X#{!K+GtLG&ncPuOS|*XOd;4?x2(7n4p(o$$h|HSFz+ZYu6rkRBhVXw zYwsa-^VlM1dw!xhnRnEP+0i_jLbMna6-QqLmU*UNOqbRhp$9Aaf)JZ|v^7U&>{q(m zxFo+Al`g?UjH6GZ=+BeoU&drALfzXlk1^b0p;1ev_duQ&Qc9dpXIk62u9u@7KhUeO z`No(@DbT92^?tO&od9Sp&=6=?YpoTS<4la1+U?1SF|lN2XQuRGExS;iKgNMl*$E*a zb9C-nAcXEdQZAP9BxkL`4<^=LtZie;3n>|&(egOWWo|2mreCis+AcgkzT@#}{aUy4!Q)b&5(`5XrUYn^!gB>7K zO5}7$iYG#f2ns1bBJ5Q0mZwh_U%{I#0r(no-5dzZS2pH7rU;uf#RE+ zYC9z1=7ya)pYIXG_z{Y|uV=;5jp*Ddr5(Jl(ORu_htQ38gL5)0*tOQqvNV+LS$xV~8vC}SMuK}unfg#fjzYms;iKTP*WUMHB<$$f ziki8sJ3~3wRn6#BH|D?*V}s9w8*dkE_f;w8cq1u_J zY@8?&l2{=hLLi1{8Gz0BW&34APWQ~y8IjC1TcNub;kuixNx(!PX7p&!oOal2rFTP- zTQ_7Xh(IttUhro#MsM?bi%>+^_MIq+`_ml{_xGI73r|m#>-9p27JVcbXHs>jcdei} zEmq7KC#O4)r=wAb8tt>GMQP2`0^)A=B4};YTKq89Jq%gQ*}s|5tODxBqEQk#FRpwm z1hL|i-VBATLJh*U?Ig*}=Y`rTZ8hJwVv~(IW>96@H}-ww^7xu5Megn%_^GddouB^Z z&v8CIux}Q69i;s}L*sUGK)$sN)pBr09 zYw7MU6WsA#fzg_=|5P!hlwzu~T1R0vED5Z|rrM6SrL7NE(1;{*ifp@WrpufuEf{gT z2P68%6I~kHzEk^Pahdex6W_=kG%wt(3Q&<$F>rDygK z(c3siwjPF#&$(k>eR$xnc^wTi%E)a|_jkdU+mt_a&kxSrKr*`dcd6XsjZ`UnbMK`@ zDTQga9JcHA%DZ=O0BbR}ZmqypJ9p=qWjV3$hKPt52WzM^^Sp36El0~Y1mV2Q>@{#L zS88jA@~pMZi<3s9qBMroA~?F#Tm5Z6t;j%G{rWTh{ESW1jo>UviP>@=ZI1nRL)n~n z_q>5^sOvF9tf=vJvpol!3j#XxG$R77?#4Mx**42yMc2G6tlP@1ErohGcHfL{t(_N`mzjA!ad&@DN||+C*|yz_ zcerU}>|oVeW!=o!S2S5#LdeK?MkSb+lNb83S9;yhWMp*3)`D7##Y;&5DnZr0b)?cZ z?Y%16y00G-DJ{e>1JU?_-H`0YX6U+zGr$0`!%Ec-Tj%YYN8VkYJbMvqJ-cWndAs|? z-Am5r2R?cA6<*%I;^F*>o1b>3ROrcCkvT>K4Xr{yrh+))Jk-@f_F^;wE;w--L&sus z0uj;V=xqm8x<*=yEYl~veDM`tzy14s|Fh4zzrW}1{+=8cL^5chu~Yl%=xn05Td=(q z@X1KW1{{O2jdbO?(kTMBL^^JRkCh9x%7DxUFNIMm64TR9c7Ye)+GKvj5d3 z&EIYxO-KJg$HxNe1C8tU!%;a-V*OgJ+s|l-v~Y9rX;tmCCqn2>>ScIaC3Gwh`1gnv zSPh8X6)9jjZYZs97M0OEInKW6iIcFK6X{=NS< z>*sH1`gKkxYbA;p{h{?pZHDaKaP)*~c8@`e#Zp&eJ`bQDA|lmB)JTf1to6d%?zbJ1 zOxdb8R}!lp4QZr9->lkJZBOdVIWOA82S>fB0(} zTsd?lL{qk@2vs{hbV5)wZ0v!qlc|^naai2}-4PT~Ap~-BX5v#x;Dpkb&o6~ z3G1=xjZIC(+?u;~qq@s+B{g z-WnmB(P!Bk+KkAL7DNs8h|!EQ#U0KS2&%@tp_xIY*n9123$l)dPP=m#MlmauU^c%YQ(>ALn}>vITrd(mcW!|Cs{YN7wEecHIAZ%5Xl*8 zF_dc=6QCfaT6L??wl>G`&QAuv&;)4ELTFH_0F=Kn5LOaS$TZ-hV{B~ylixtm|$lU29Y|WCq`mto8asv)Jb{$LCiaYB&4)n1Z7&{g^!=Om+=DGN$Xe zCnN0m*%X7LEi3V+V8tVQx)=SUm}dstQ&XUwcOIX1_Vr@z z&0uJC4iD^YXLs}8y*8RgrX`Z5%%%-(8xkt5U&$V(TuY@@{xkf-Fa9FS>5LXwmIs#U&XOU37`hdQVIjv8y$^n6_BAayiWj{|hwOF;dYgFm zjE+puWA50`hodMJb3$+9U}e)+2DQRp$CRDIG`--P-}oi=vhi!b`M3H0_rA@mS6}7s z{)O`o6H{Kuadrx0CWP$IYz8uMY_UhX?>XYlG1tR*lh4pu=Z9d2+2V!PKZVq&UwyZozlssDixF7K_`AIAqB9}BDxG?x6s#&02jcHMiwRAohDwxUZrgex(? zWxEn(LRnDLZX+6LY6Pr-;dG)orUZ))CO~k`iK$&G5{!@3N+nGR6*nk#zLjl?P8JqG z8}yylFaBWP9M|R8Z7sNU*b&&@H(+92jhsGB)4{t*2_zKO?X}6%sn)J!cx=J_`An3= ze%YZ$qGnVpqC$$17?WkNHSGO+8_Hs822s1yXmqJGZRXVMh{E#_)kSacQofA1wVxjw`wqy%r^1nj`~BWpx7qaFoa5+SF$WKsIsmrA`^G_ z_r{%3YYi>)L~D~35&|(r=c757q*S-Pu*F`AW%a#&{RJc1MHN2z}KVEtJ-{T;EY?tlP%p zx^xmp)@!4zowAAX)2@&7UI-x*<(_YRde6`O z+}HT2pZ+HEbjS75m`)G8xcijAMBN%e8!0I%LJSkV4L`ndPzgj|n-EY<3>B#8m>ahO zztiY`2og!;Xf4Gk!>!KdkEx0UQ!!%)EQxdiQ9HeFoKKmQW?D>q<5T6cAH3!B^8clD zYn@97#ArM=QXonul8N!;zGM@o{`Ixs*2`vy6%LxiK(71n7xdy&3}r*C=tfOVos!uz z^wLNfbX@1Zkw;FbBwz2W?J(+wh#`&>B#FEzD6p7c4f}9wUnI>+kPsyw&(HQ-6r9Ohe3fl5J8oLm-Iuei-WJ_zjypRo#Bc-+ODIR0d-|! zb<}O8^egYKuen~IC=EV;vvYlFq?nnrxBx?*{eB^ZL_VLejn23&`(A9Li;I)tv+DqE zLF%f7r^^$kHWTtN6b<013KBehp*Nn>VFXa;>9lGlr?oaSGi}uZ(}O_h_8e<>^_U-^ z#xs9ha;5ovi(y!~m~u08HDWr2Ai}E`U*USS;xMGd_V}9l^a>=it`}lxY}XZ7co`FK z-*rCw>~!0VQIOoOoH427+4UUZ>y3bPAxt(aLwJtf_}uEY z9!L;6!)C$EzPi7zYI5FXB*zzg^BX_U`5~G0g2`yzjRA@KRme|^=Sm@P3?gZF%K-&%39vBmMhcgbZjohC5R4a2gj|< zVcK8SAKV+3Z25D=T&QC(KG&Bv!{Pi5{UBQ#a$uW@0>eBn@|+-lGb4TP^R{9{VfCCu%Go-os*Ua ziV%EvY7*S+^m(yU7`{tpc4~&LLF|Oi>m^*~^YdXPVFClxYn_GE=q!Ph5t#?H2MY z1eRsybUKk!Wbc(Xk580+L$Sc_ech@1<^7tq6OlCD0z`uH0L z#(2A*HlI4~DsTWWjUh}hq{7s%HW!DHrsq<&iu$HltFZS@(JNK2%rh+Y%&&j@`+VnH zh5Ba#F$H>Z`;cIP%j2055l-{$VuHZ+dSzRUtJHiBhcFWpXj7K?o@H5B_b1-G`2rA5 zB8Q?fcw|%*p^5o!_12I4VEeQ-r_~jYrUn&it4!JK14=2BRtaLqh}&~IkT^N!toWg# zIa+I9Gt_R%cdVCp>}%u2%U8U9_md0pqhC1MP;q<__*`=_uumPSb6p8k-Phu z?|$#QynS4W38p06KSa*2B6s(9JlwtF;qHNDd0@(CUcR{JeE(o=(Gb~7MOs1IFyHKk zl7&Q?5-D}hdrSm1ProREEYFIoaC`0pVN4!N`SMv4fDkIuvE&7rP%Izvc965{KGfC{ zMuDowa;W~=)iXb8LkCtrDY<5`-K{$!ENVV?DjCO=AYM zaB`EUJIk?^0K&oBPN_B)D5 zK8_#P_*h_lppoL;Z}YXxwq3qaTm2-)=tc{j)M!O!4 z>7%98olj%vlMyv(Fy+a+li_HUc8?`7qft9)9vqa0`&9T&X-7dr^}G$&yYYHbwswz2 zcO>U^nZhmr!IeO^k&jkrv-Tp@-iKmFjsxx2ffS63VC~Dvo!4u%SQ=U<#EE#HnC3IJ z8>hv5ynLheO|#a@_4-6g*$|mh`Qi&Bz1P;Pc@XfnYdgrVy>_(krbtV+`PN$4_m#a| z&<-&wc@mzUHZIpI+rHbJh?Z^ETeDV*ljU`gg@1>`!SgRmv^JVxElYw}!7v~e<=J%; zBR6N`4efO|Ri9XnWABwZ1bU+gR{K0DC3C*F#;kD*d#6|D%BisLJ1T*_7Jltl-}2e# zH_Z1Ifd2f$U_75-ZPlDJtv1%{)i*vbmPN?X3V4YXAs+8L7 zGc{Ae(UsMS$5!b1<|}4dQ0oO%A;mjKG&`jhe}?3}H{D&e*t-R6--@=|+>9YvVcB3x zCpZaJHy&QRWG~8Z{l>Sb68YX|jZzXR3vb^Po*v;l-}??j{M;M7d{kgA^ zCS^*27xyoCIK4uc32`RpOp=)-7GgPt$ldvYx|_93Yv%bhr)2HB04b;|Hlr6xR&Yfk zgQU*jNr|_m+xwQtru|7IvgL$!vrQ0f1nF)aAROgtme4iv{QB{ zW#W9AZLWHYxA#V;6T^j4uD7VM6g{|lw51KPR4@1}dz6v$?p(*7{18ZPoC6_3H(8;=at-uoyPK#s}GEPE%-i4X((UW|b5 zmLo<+H79T)^NHSd+?oVVKCHQo;zwVKGm%ujvu?3H!h&7`#zLNLx@@1`u%!RccZP~Bst z1g1;~a(o@<6QK}eCaA&^h&}T9UFG5Yia+*8|2Ut2@j1WoowvMs4f|F}3*-qt`3kh% z1BN5C3d=0K_~e04zxEYk>?G;ru+Y1jF>qW6F_Sb|NIA-`%9756B&0Mm$4FSt%yA+` ztbkMJn*~F?LNI-Fbn%HC2TE6)svmMx4?_;0xxGyyi%=1ZIO^(tWLC5U zV1%ys5RRp+yN?;Zerk_sPm~h5TsBflEX%^+a8A>i`DB(Js2v`9Q=T4IQkp!KA+ohX z?dIGsh|Lv((IR@c_v<1bvn{a$rN-#_h+O@ujE@D@2O6j8llT5x90Fh0Z~vLDjWj}4-8iwfm2H1w-(Rzr zN19qugWBnRm?e%pE(snUDlnphpZzu@h2rkt zUDOM@=lm;gWe#LaaR_{T?tbub#(8nHF}fP}$|7-KnI?LI>-GAqML1eUctPpyQL)xk z*WuXi=#>~}A%;kh2@xkCyHY5IM2s`4ky728DR}sAD|Eb-8AdTXuBSSBWGBrj&p@De zC`Az}m#3?7ou-V2>b$gms0>>(i-s`8Bj@h6^u3Qxj#h?!-F$W0uy=3;l36FLth;R< ztyUyJ$b!^PYdhOjoSe&rdKli?*M=~_?$;m?x7Mgm2sfm% zTFVj4kXF@C@-}x<3Iypi-6*v=&^UZUn;TL&#x$y1p{67p84#K=-rc)4^uQ|^df{9mpSAu68=8%Z)IVB2qNLHXD#pkTl>ELZ|A)HpdH52AIFb-d@Qg&&`9b1 zuxB#{g>`-UbBYpTBuTJ{4@}Xs?^pKy!oIK8ehKca=NwmCn;aVU*b*x&nxhOi){CJ5 z7Uxl&G#vFAXt%?mheL$}>XAQBVzo)Az<$z=m4SKm&h| zZoC-7?bP@T)w0cY5XuMdWDw&)9A!f+Xt&nlTn2NV4zXAEW9XrwpilEp}hnHUqj zLoH_WK(N+e?>pxGh4Cncv|G&KdbCkfOvgfJB=bzG(7SlsBw6@vGn2}k>|UJDcXSf9 zI^Rr=%k_TYsyKtm(K@WnHgfA~Z{%bW?sZ*ht&*n6PwL7t&Bg_C60K_UAn0d>xZKz& zzuhoCk@1f#X~0kaBB*p~cT}=>%cD~_hb@J@Hcpe>?~X#SmSk#yd7gkssg>@I`K{?O zpM&TRZ3Rd1&Uh~tjJ}sEm$e{qVp{`m-!|wlP0+NluA2!drs-&fT9d^%SusYB<*_7! zhldCDZ97n+5yxbvqM+UQkKJ4&nbJ&k52?MGVmGElPJz4oJ6da8E-T5~d1hZ?MRxC< zecyPvf59?Go-R+;5{>5gZx^8*&$xYNp{uEH--{WNVT{|XeOWtmN#tPpmO+xWA<6vF zU;HKhu|M{fx0nA9(#HKy z)vHgT!}osh15&fYV@wlyL`gMUuTS%YNMNs(r|X3|&!lPLh{aLk@P%F}!P<>e@brQ% z_D}HQ4$S`yN3?>nm+L>VZjb-kXgNA96#>yvB3I3<7xlmz5g~B_jrHVFTaF` zHrrnav`#6VQVoTvzJMC?<2)HBOWHv?nCeT^6iLluE6fP9gDT1U_Z_vqe@@5OnkwQ- zLks@3lXtR%s1IE;h(6yD#5|$L{LBMj$1`}YKq7zHKh0s7XJbRykhldAJvNma`aIIFXrJU#}F`Lohk@qIXS4%mW z2bdSatvBDi0-GZSrY5WwmYfsxLZ?A6{$7^pD7x&PO@uHVF6VoBWN*8-nlngqVv^r8 zy%oB~S<~Zl$sidI1*l_h;b=DwOAHqy)E&*s(c*5c5~5O?5`EJfd^re&po1|roIu{& z4?2y#n98*)w9vTJm9<>icje8y!neQu4(-B{;r=`kg0ikxf<)%*(Ik3{_epso=hHEN zr)gqYPNWpMJYB4~a@z^@4PP zmz`5QklRsAhQ-Vqqrktn^GohU)PA5CGrD)zjLRt0)wTMMV< zjz9b7ewn9Q`CEVIS6H`476QvDFrQ&MWmF6E3@=_jFin|KE+i4Mx76*uRcb9Z|3fC* z0z@RcU?TW|B%3>Y3cv!M5@4a^)`FF8%4X$e+rdE+2MNy(agGwEWY=D_Q>V!VFXou8 zt(yv2G7Jc3tY|Q=xZsChE4Dk^x>B}E z_E@fE$*k)W(>#+Td9h~?%&=3@))*0Jb|AhzkG4j;rH(c;p-IuuJ{e_|bG;5ie*$KL z&LEM;r!W3;O7T~gdH%ojTHfnCd>lWX@v*@AK%?vX94ygDsp~h^digpjph192@22|N z%TB9-lwJ^+ECBfk_8benqCvn5H|X=}e9%M^NlKhZGLOQpHqX(Tzg~ zbg!B)FF$+#F@|GdpC-#%wD0R|b)$P5Zr?k?M2r)?7pBRG@9TOY#^Bk4J6lmRJ!Eny zU&xb@@l~&sGSpAa3%bBw`cY(C2AbWYy%xHv^EcFOBdq0eSvPuB9`5gH3Z31E+-itZ z&Vdkw&X z#^Pk{%w1W|Xa4M;{l}?&-Jf_Fmw34_GZx(!JLhAwxTBI6Cuou_F^DF@F43DjwL+! z&!|@Cl-T{!Zi}a(85Sw?-g^w@-&KmWz6`Oj;x)zS#AeHWoTde^HfSjYZOx$mv{e8qWof;btSE-IRTkG&H>5 zwtxQmO*@q8YS=`ro1sb1TDKx507+@4X>}t~Q>@wVGcMJ(Z=9AB0TVGu5TaPYY#yvu z3`gg6bv3cTcm}q8BjrSlSf-sA$$k`h~0haL+?ASsR@#&H4<>I2B#NYlq zzd{I&U;5*}$X8!|%FE?zbluV3?EU*8a?mm?Ts@fL+g4P6;yhJDT>ya}6pq%ZpfVlT zQ?)Wpf$R0%&wla6cmC=(KmFPNdX&J&BJ0OHJ{DLXXiV|`__K(StKU9->(B3P=RRc! zou)gbU3k2_<@3*9vtN~$U;7#_Uw(raCx$xcxu4J>p?_YWh#7mDbiJEQSf0m}+)U|) z$>I1Vzk^$#aFALTlVmeR-rHUPTDjRJ}V$pm37;U)Lkut#lGhmpGt41fBOjW z*`M(f;~;xK&o#u6J3R`^5E3!Zq-n;a)ZI6{2uGyN`>2eycYLFZH{Tr%-T6ilQNgLR z2S-T6xDPMx7rPFa-NTe;gZ;T7bociUynTE_Sy%JH5=c3_Z%?DS8m^VfcD+CdEK?+B zD;l@`!qfVWWioWEl*YDg#vRH(4EL*A`_~Z6nVct&W@&WUZ=YQQwLou?X}Tlly8|7o zb*HyN>Vkww@4GG5+5F0e)4iE|#-qp&cm$CbTdHFB9e1&JquSv2c{sJdchALzA0zZ! z#5eIk&J$e=z3j$SnuW_{=kI^-9Z$P(Iz^V#LQGG*e0gR$5A#pBa zqSe-+*pcA8QaIMPZGZZgw*B&7yF0!352D;q`H$oGe|#*kKG2YOyVN3fq%NiY6EO^R z-%jf*dwIj<^7a;!a{d~hy!a`kC(1tfN`v3@>~sdlf?%gE3E4{!*&^j2H)zSJ-5?y4SgIwdu2ajoBj99g#pv6Dh@mfGv`2 zv+^Q0giPpxII;xYJ-^izZB7_BXC5ONYovEv2q3KMBO;OP{E;ssQ?}L*-yq}1*j8)B zOdI#w=c#(J{_gR@ul@Sx>>GUZ>zQpc1Jj2)xVslxH6Jm-xGr`r46fDQ-Gbugw=~|@ zP-@Qe$%>?UMYYhHSnE!QpPHDDm}l#SV8O^>()*MWr54LfAF8m{37!@(9QXI#iWalz zuzQiyY-D&3txhr0nzb)uwAQ)(z0J#cHttwTiP9QLmAw>tdvw1ntVJpoCDYPOSfFk@ zUw`$AU;dMSiog4J{}$i>>@An4%F9=a8M>BEEtOsr4aG`I3Er9yNOUEm8d8Y(^B;p5 zr{?JBOaW~N;s;9Y-nyrmuN!LAf}9bFY zJmVD*ahr@7&?x4crLgykHV;z9478x6f+{hMmf8=WLQ{;^iYYreOo6k4htWiw$fOmL%3{AHVUvR$w4Vq{mLF7i!sP+K!kQNCZhY^fU^~luZR( zRwvFI5;jev#b@uWwGqN@hnIcdX~iAtJBTdaqU`K@C4@wtCzjb<(k&a&in(5`NSyP; zJkO+Lw1QTxNZfmaDoE&LvAC6}<~H9YnEgO+{K-H0OMLp3d;XvQum70e`p$Q#dtx~& zW!uQPlVfL@&rH+oO3?-;6s)72Y!)*nbWl-i^QX)- zWqRK&rc080Grz!}{^fs??|=3! ze(T%6#pB~!9zOXBKmSud$Jf91)4Y6m#rga|t4gbQoKQ9~M|0YQF;J;qOa?0SaS*Kp zI?Yvw8-O!i#^mf6OWTv5k)f)(0BOa|A21)~7#K>i+W~ zTGYpB4)i31>qgZp(-Qg0!%y+*#WzqrnJJ;u7f1N%bC}p-R)#;6w_E(QW`)S$8a+n} z-XAwUNAuIC9-H^Nt;RDVxq2=htrXyJFmBCGxh82JQuwiP-rA1FuNrN^5sl&-+W}Gx zm6!eeP}dBEix6o2=CO4H^}K~C*^7ftZ^ru&iKJu&M6Z=Yc5mb~B&xRr)KBPwO7Qqq z+Z;zwaBy_()*dpRiU{OsqW6mS#@bfsovm!_b>qePC3Bv*s=868p+)9YpJ=rm=pL9; zbnlH@A?3}NFk)eO@7jX3k9sRKReI~hIamf{GgaBX8|UwsLkE9ua9ganvw36zi7tJltpUZ0+mO2CuyldL;$pDa8~ClAax2o*!b2 z=&U`us@GBol8Cp-BQa$pEGTXsngo$XZ5!Ke?eS$^IG@h!rQQre$KBK0GuVM%Ds=e& zvG*rUmTX&oANJd=yPp#gnYVfMUZDUGKmpaT073+1k|q>QqS0jP%w(pSq?rc#4jM`y zLmxnzaZZ^GW|Ywg5SU1SK@=p41%Rk}&22Ix;+*5|yIC5nwf#h1lmVy)ca-~CzPyo{ zapD~J?R&5NU;kz|zF^J?P!zT`J@m|8=eGBrZ7=jUd8f@#oAKCrAMF|rZ#!+*dKBS} zG2>}$WhJ@5U;WE}i5LTa=kNR%eDmG6_>jrDQP)B`XT-tva=}sg^8F(*czUh0;6c>f zRn>8k6cVi#wsv8wL#ZnVGEDc(QzC>3y3Vs;rmVG8uD4gjOmS7D&`2)c=c*HWv$@zR ztqq}y-bY2%EfK<0zuw)mRW)*}(%qf+Hm+Z@HCKWlzOuJMuPc}Jh1>cD0FI`uf7l%Xd63KjSAq`Exuz{zPTA zL`AxWqqI{3=-^;!K&=}`?}My4{_Q|GwB=+iz#l}Q$QusU-4R+(+pRW`VNGCG3^KCh z9BG6MH&Ft27YG6a9RLR5y*o7o)d&#_=|yPf-Qo~}_&YJ#nWo4MpP7L>ad0K{^$pPy zjMJbSQrRoYqg5%pbB=YrQQK~9A|+>sqzFkM&|E`;=0fW76=(-h*Q=JxX>k`0!&fat z@SU6{O6~0Xjq7^Fi{OLj;qlD*VP@MDY0PdFFPzal5JMWs{xjdSjX$y?gUn^V(uNuIzY3JVzd((?o*g zlfE6VqKmy0_P%miSN6TJOpqtz(UcwO@bD0r=TStCxvhtQKqbvW%4+86t%y6GFE{j) z=9Yg14-36*6elLoiQ3$K}q;&}OZA;pz1-hW9-+K$@V3Zh)SZQpR>XmO^625zOa z3wu%SRf?V*GQFEUg^Ng3{!o*ZRyuvs_9_ldNoY!nueGbq!`%h()!K$ax5%x*gSsC~O}yfTT32r6h0FHJUT@$uk-}GD&JT(q)vB%d zqH_UPjbh>X?wg%o|LO1YKm6~*Kln#~mp}aF|BDZ=|Ae)C&(D9=xo#I;t`~mt`)po~;ravf=zS50PR_pdRYp<#l|6E}G z8yTMqtRHE_crOB?>s;1v{|9@2L1ICCW!-K(zkJ|&y&*O8{^2+H;@zJo#S`t|Bae2O z$C6IbEI%_K6(w}u<@;8YaO}PeE{k;YJ#u%Vxf6Z(psNBdB@4Ih$~9rMam?@!QT~`3aJ*J}R!%$VxyRE2< zex5QRPj({r>Z4^m1wRO##w*+Q!d4n71#;Ad7tz+J25RfqZ_z^INvoHWA$el|Q(a_- zHd>;?d~?%6R06d$US71&4KW}@Le=)Bo}87?+ghbb!$~tG)j+T?v`dcS>Oh))FuHVF zZ8XvA{P^%d44Ie9w^SJgzwyyJ;710er!~!-Owsb-hLI!SgNigfV%d&e<2o2Z0eCo{ z2*Fdzcie6t$T=~m6Tw58Jvpj^sha{(xmI^XXT-_~qm_+0N9re@=Y`&PUSBt^*9+6s zAwaD+Qp!BOQ%|JxIgpYw!$x$zqlUEJS5Dqrq4MeVyBAkF_WhN0ztGz4aOCgpN(+$V zSru`$B2p0#^OT73#6l+c8Sgb?aou)p(Hpuv0>?GCQqffJo!M-7YsZJ*P&^sW>DeNOB~OS3sH_@QPDo}LwPY^`y-?ZoK$tAFJ$Q)}ZN{-eLo z%VpDi%G*Y8j_LgqF$C7zh2+kpI8n+5sS}#8Qt<6&w{1n-N-@8z)*>w~I5*?SuvMfN zQV8@`DD_5dE7O#~b-GkbJ`fO32#FZ;p{$l(k*cB+@46mLM5DcePXq?iZAhk1T0o7q z8Dg*X2KjTtS4t4S(OKErM{fHodwHR?RXI&g+q8H`X@x8qMwh{<_f2Vq)AYo;?%Xab zUw-*B{`_zJHN;hxb7bAWN2Ics7k=^c-)CEIynpvK%lybZJ>u&V&OH)CB*u)xtE!Pe zFdnS99n8NjpmVHK)aAb^r_4ot-aLWc{MV)QsY~DZ*D0{3fAv54JU$(t3#=b&xM7kP zd0oH%&6n#R{0Eg+d?@%>xt3R6ZZ~R$caOi$7f*kYCI5t00!=DIA*ZM7zzBSPYmO&& z+7BTd>Gi7o(@jMmL=Sza+eW*ogEK-T>f%17iD{k?-`KZ}5s9HnE{_-G+BhPPLDUtH zX2y3qI+fCPWGJIZG?KMQI^rr&5Z9E{j3Nw}fga<#LV`iu?22r3L+zw{wsj-K#xg&s z3vyJ4aBbnKQ6pGkBoK3=Upwo5CB!p6Os0}6hc0I@ay%S`sB;1O2p;z2>`etEpTrQg zqOCt49C3=aX>62D3Bjk+gc_W71W#>+w(X=GEox>+(g#^Yi_hL0y;mcnn=JWPYT+e3C@x8qIqa# z$NNCeGjq^JUpC9$ARdc*6UP^k`m2>N_XahU~J^x^j=UO*vOFdL%?EK$MHMZ7Z#H zEvf>D6iR^@1W>eU+jiD<1B{~+w0}LyM`0mmLDI`$m*_=%tf6pI8lOp zZH-nN*UJmCHh%Ya{u=MzpZPm~@9*%A2XK7;YIPY zR$lq?{TGDzwW3Z1PUrWWmxybgwii9P`U1WaeZ_k{44a$-XwzG^?CdW#^(a-M;oK<;CZ=x{NLR6=dYb_gxC;Yk*257ZLNIq^b?l(J&t5;1Z$I6 zyu+R74ufxWw>b!Z@;^#O*lL2ZDpPp-aS3>`YM#N-DU3R%ifDAL()dUYw;YTxB@Jzj>9IQ)y9Vp zADE^@&XKeyTH9>n8g0g4KWFf)bOTod&O0wnXPwTr7y?t8Xg=UmU`{hJDvzwz$}~+( zDf8~>i4Yu@*Jp0G3Td=}(+}pb9M?;gaYAjyJlF2tN19m~S=WuSuB0ib5vXyzoa+!A z^KxQdPQ+-33V}~mQ*T>=W6rrx{(gL71yI%7sdv2}%2TYwq|a7wx{)~%EuIBLJf&%2 ztoA5gL#|83w{Go0uTfaNBdwE`g?XMBhPvyv0nU8S3cYtjs&w9lpk#F%)VAZgqcsf{ zZ>`d!=2MPV@?MK_1d|X%5EHnRV%azA- zrWCbbnWw^9H>5Y}UTJPYvXFd0J&8M|T>1XPFS*@5^6u#i=KMtTo){k#0S}33o(Nvk z7jCy3Z5wXmVskQ*qdwo#goTpBMWrbnWl_$k+P|pxruORM7-g?IYZkW=5f~% z^!g%tAnm@hZy&kde#LFS(V8eCb`aoU-&azCWj>K&r0tD$8wJ+NX*n~^nX=v3cX)jI zg2(eaZci8HC9v&*ZGYwCho2L(s)%p5XTI&)R)6+{`YaU$CRY?xDV}Q)*S- zRJW`xleG8H4gFR}VIQ2WS)aTTV>1NQeK>?!hexxTWk8>fe#;aq3Cu7HrINDP7DF{Y-J+M4Rl6hM36J$eH$K2B8UHxkC7_oOe3Arm8|{v^h8ccv)i&N4_mFqi@M*N z5ID%YB6sTw-GJU)l{dzYh>%hur*vGmyK3+*HW0dPLPHG)De2~4${UZeV=g(o10Ov; zW>t(OC5`u{ebOn-`o6t}5jvOfQ59u_=i&%RZ^n1KD_p%VX7IQp-kB=0nU9j=+i$+( z`QtOE^E+Y=w01RnfT(T374Y5AIwu^_!5ACna@_ACBwQ#1^eJrfJ46ft=N|2nTx8^_kS8QM3Cu zTE|Xb(`#E-(P59YVy*OoNc`lP97SCSno;PjJ+7+0z?>JHckH#Z?iCWLrh)xp@lBslC>r?@$UHO%0T$mWjshmMii-CPFZw_uhEH>WG zYQ0y=VylM&&;{7`3(v2wh*W$?s;~xaTRXU3Z!A6V<-0}I#=VeJ#<>cj77?}V?7L^m z4@}ccxoqSZi1C4xzvkcii^9*RCthAZa#}LtI(vt9y@7nI@2bDBZ4)`1nd6BxowTs* zN_clJ+qy1x@bV1rzkb|*Z>`IkaCP9vd>()H<8y)aBMtA>C+2#2{tvh9^|!p&Y_r~X znlBI)Wl1qBfta9<>CWH#PB`UFyg5}XlF_YwH3}>9MLEVD+Gwrm#^~=68-vi^yPo14 zckYKu$Mv)u{6q>-l|KxkwHXNZhKs>AKRFh#Zmq>8jmbrx9^Wx9XMXYXUm{d|(0oIU z_i=ALs^rak6Yv_%(|czxMIn8s3s*|2YMQ1@%!*#c5S8;~)(0s~iiXre?}fb;J@uQq zDkW{J+_sg=<&`uqYG&Dm-qrJG%F7SXjpObf|23k9Vv5irTk}Y@Lf1R8&+N5P_d@TU zUiH4s%S>y9=a&x}B~&XS4VTnUs#f*9x;xkpH1RHAxFem4vLvrajt_zJ`ON$G@7T-E z%gcv1q1q$z#oEV%=j1&p%*3S1z;(MCYNV#8;ykTaoWPWm+GIE(hCm3B(#LxN@t$f? zGR`GZI^kTSwH3O4P8@3Zcoc=GFPIerTPgRJtMmBi`R@A8(D|Oe@fH3$pZ&1MFLSn*qF@07yA1_l`bP>Euq&PuQ9#hVXapsgvziqn}Q~~de zFK3UepoWi5?sH{Wom9&X-SBmo|GK!0(;q@N97~- zole1v7V;q`LhyzXS47krr5Ums0wxI1c%f3&`%S6?3!wkuv#V>1&H=IYri)mc&|23) z*e_SU{rC-~7E%i8r{)BgH1D(55nH1?#T*xCiFtP9p6Gpno+!2BLLyHYEqd-~?Uc_< zIkQY(@P~i!-|%vMCMN74(%APa*Nda~l{qgIcV!O~Q#~=|h3ID*iP$?nW?a<6AEG&r zU5Y9Ntdm0Mh-*(V#U+G%{cP3nZ)SWhuzsYGaz+jFUjI9#uk_F~7qH#Hl>>=5&u8Xz zvXg(HwW&4n++U}Ac97skgeXS-}j)vOEFg;WcnQn!P#=Pjp zsbty4!^4T3GPQQwp!IZ$>o@|nR`ZB52{!iLS~I(dfDfLWCsHh(Wl&pf+qH`oDDD)O z;_mKRihI!l#oZl>JCqhDxH|=cyA^jxNg%kpJA8TX=lj2BGJEElo%34fvDQ*T!4q^I zy(UPapNPUf*RWjJN^hL8XZtBUi(u@_?VB6@EAujjY+gf>8;pYMb9ahnz+zN4?O^p- zA-C)D15^ie1fAFHTg`@huAxpDh9CuB+n!;V^HwwXwXhl_Y|N&q<~KW0$opZDTg>W? zFP&0NX4)tzNi}X{RTBQ_$do3PvvKwt%PSiI`~j+-z``h4$I%&)9aja4Gx2&DaVtyH zC-0eWJymbL6R?Y1s~ZU38{n6vTxhh}_qUch_xsFVNx=$Q@h#{dijfS_?m2Dy7E-Ci zYj?0Q-=(eoEAPT{r`j28b_{qsQII7Y=XGEGCX}PE%1|meYbRGpQn*C!cPo2#tUu#Q z-W<5MbCaqox;HOkp5aQ*`_9_LIrjM;J98y-pT|FXqMLg!CVgDtHn8OL-@o~@0;ei< zx}>n8D@}Ay667pu6kFp(z+4A)$CH#crHQA|bgW%ss0VLB&Q#FX!!bkzws}|IM zAli6;aKAi|p*=g6=&rFCuDUnn2iZ3sc_`*_tc8A zo+nw#?T4omt0>jgP5I#xk})U~LD7ht;3Hgty@=lPl&(O~#iYdEz<3L+)b9I-Oiix< zbi2uQF=G;6-*1@|y$pqUOio2wF`pM+WoSz1IzREGtO|0VK^!;Roo48rs(xPLNjyBR z6~0~OH9Agz;P<6|e|~&y_}4RJB}B;-4S2k5G-6ipq|Eurpz~5h2b%yT{-L^NR{o)e z`DJa~>_H9SU*+~D`da;eQ~X~NjN9(^n%Xzjve|NvSFfjN_ni3$^6|^^SwZ6z z3F;1NEm~b!UkqZ7y*1ffZO2qc2yyL6EI%r+;u92kT%eegT3a8K+NJHbfL?7COEy`H z7Va>$390Q?jW=RDB}6fA^K@2!kCT{C~+pS`%g#-t=;k_W^s{lZ?*^QiY6_CH>#)CivxQusaP*QS0*U~X~$9RmUf zHz7B7T2hu$XcOT+2=I9u%7jV4<3|d{$8yl7*5N(k0fdAM+9WIn+6?dRms9^+&z+5N zWa;S6Zj)B1$xOAJ&WFU`RRXE&5W+vs37#hl?e0N74d(_xd?q00P>d*@pN9BX-T?#8 zSPrYE@;^e<-{TzM_ZKRM@(LLr@Z#XvL?N@yp0zwVR`h+W5@c(^_q|6)ELeN6AhiAf zai*qW6BC8uWPRrl;@t=}Mw27@b6t44&0 zL3Nx~Xu6WJO2n9X6X|WY0C8)YY-hBmu$TLA=HJTc(D*-jc{px(^+nRsmeP}2VpN(Y zgEnJ5u}KBA4FXykJ%?n?L3^bGNq>M=T{VCn;OziW$(G`x;nh56rcN`<7l_AAHN?00 zHilP%&z{cWE1cbDf&9^FtMX?>O;&ro4JrL6bM#0uVsvrr?l6U&Oe;1D6H}9)m}OU6 zFW-;5n6Z+cxo@Krc%gOImGASq^z1`~?M1RW z9{y3G{~_J{fOA7qCuBUFm{EmRf5nCBqEz> zjm7fWTUKT}Lf%tlj;5vWP$R6^(%_X#?nf5y7S|e!z0(LxuU4mU3-01(ruoR0wUpI9 zOWIGmr;JIm0@;DmQ{J`QmEINVppiNu#-JDzn3r-o*4V-AiY?P=qBs3#P_%&<#^Ub54oTlbds_>BO!6Id30e@sM+kV^ zK!A!&m1Qzb`2(mx9wI&ENEc##kS;v_(8iONmxt9Njuh3CxpW(sX?opu z{kC@WZGM&KyD#k$-^_tB*Z(zkyQL`BF{xd<*w`V>s$w0_Bts}cEwi=C;s)IecN1wU zD*JA%cI1^44Co-7{K>asTX$f`%>L-F3VX(os2PKTk|O4arK?I#COXkH=n1(RbcRyy z*V3+Z#4KDOC$}2f4${-RMu$>`f49%&Y0mhkwAPDcu%>^P3gCE~En48Ph+YeH!h2m# znnqem;@#~$UyYJ@HkE)WrIvf4XvW@fw3@{(^z1QFJN9mZnOCi&PHppA$PcTCdoPLJWo*AA)9C73eC#FtJGc^PayuK zbZbbrV}l~w=f8tAm{DMla&J^DO*dMT6EO+7o;6_PNyQ z_oY&_Wkbx&Ao?5aU*g>OivjgYB8vH#3d?Aa?y71rM8`NVQtPU&-w8eKw89shy~MP` z{7Lz(@nU>Nxz>{o*ZLGvBIzcw#-KgYzOv=`PbMZNK7oNH%{l)VSZasm&k-mx^zf?@ z?3s>FQlU+Y|3W-DR&KLtg66R6&}y5Vv~hHlN`ML2+(K%A(g(?<_DsQ8?X)53qUm7_^-FDQKwIZw zmpiz2#qQ6sECw)VR}S?;b#=8&6yiBYQ>7z@0C1Kg=T6^zD?Ot=`GIpQ-KpLNVL7S1sPZR2Xa6SNL$GDD|$@;?U3-^4k& z%S6EWVGzucM@3x#8R6CtiJ&aFz;yHX8L?xSjqB8(TuZx2PhK?Q?aXFeBgaClG!gfF z1AL~>UT>X4++kAS_1mQPTAe81#?J^uV0(Bgu9AC)bvBBXv`*`PL^ALx0qo6&;*fBm zk~&$LF@;Fv@}2Wnx5)GTX%xPzmmnES7P=$AjXxqXzi-R!TtwlvVoE^ZQ!DlC)0lxC z`x8rQ9EAz}PW^+`=m*ufViPp#X~3@c!~=PswO>!@g-i~kFlCOPT8w2jb6`O|zzQlB zILZ@a3wQIxW`R`c>m$@&oY*4h?4B=vH2Z}Go#FMa*G^SBXw9q4Fiiy_(#5DB((sHT|ZSAnGdm1AfMYW91*}?R7F}L#lD}jXsbSW$!beJ56=x%loJnV=96m{PT z$)8d(8l=d~A(^>M_!W&NItUnHUn1rtfN9wUrKbdGO7`I^rACu&vr@3ED(elJ*bc%h zK4f+qo@M}lDA^uErnou6iCx$?Swpw|x*AOMV6kYb3^(|Pl1JFXdtCC3SclPFr`f__ z1aTjwqhlaF*_HES#IAjSo zhTk8vyim-I@OX4(xl;ER#QXiXI)}>p;p`_PvC+Be)wgQzyz<2|PAlWqJ2In$lhC9; zfD4tv5v&Ogife^@5Bcz$h>1&EOdJJLyvrh#QWLR$28fy~Yidj1Lv{WLYI`S4b)V?= zq9JCKdSq-2=aXu)fj=zrQcZKKNUnQzFq_+K>{_ldIqFHfpYhs?ice|V8adas&nj^N zDP;3-P-9bC-{XG@J5xem1~oi;Qd+jNdj^4??|Q!{!LrvW>( zR%^=h(1iC*BY)PROGtxX0gnLD*ZyVg#Sx)Tjs@Z7$BL|))GxwUm&#+kkfcrXDdr;E!Y&Z7C|r{_`hM*^Kwy79~h3&Waby-h-|xHDhTyZk z+8{Da>}48+H`tOE8=4r|My!iHbt4GmQcR1Aiie_Ynux%)Yd=avkchAg)~{EOXuU}NM#j9I0Gd4q z(!xSAT;`wG)*C8{sYC57 z8Ti}5&~x$!DE?m*=ihKO$%ZQb~p znVRx)sPXR}gaiuz-Yn!&CJZo+UCto`3~H?ZyE%BlcvH&b8~AwQj=>B5`4wy6svNR+ z%PwWJD__ez0bt0@&22RnSaPH-MLpx;+IO%uJ_lwc#5Pjhi8KcXl7=CD&u! zxL$SpTcD8Puf?5dAst*36ArJ*tXP*$Af4gNv&xlvqx>g0nUIotR+0!0|E^hkhE|(t zQbljpFWVO$TW-76r3~CXniSL@G4&) ztT>yo9TNpir&ON&WU}tmb4n=uY7xTgRt1btVLVEj94sKE;Bpnuabd?bqM{QcFU9AR z6#Ar8)7dThdtNqvbV5Sxs`?gh8bsOxiTib4WWCBVFIp9>OX|p(x?Gl#f~E};Kq@0_ zx%@1(=@5oPH}AJTV(TGUEZ`m_E_S&?Bw=Pi_R=xd?gSoF_AYa~y9J)0Ib!tdcghfV zep0Bh+ulD}sE*Yn4rmB*>Vwd{V)(9jKdC?RB>AtyugW59L57ue7>lw^={)kd0+x(}Lp*L;rmb`4uOpIdL6Rq%I_UOE0R*0 ziiU8EBu?uZ3$^|71(F!BxBBO0)~o7*`X8PZe;?ssvUkm9w|M1|)zJ>4T}>UuKu2@R z+y`w(TG{+GoiIR8u1WIz+sRB!-raG~*^3)Vg{E?}un}~RTZDsI>4N!67lH|-R70xJ0_T(?~7Jy5)-*3v^QBv&6%fK z9$lz@3!@1$15INnl#T#t$h9rCHnv3V_-?r_&?6q`!~>)hczS`kM+?0Z_@f|f2RW$e zas~HL);FCHC2o!*BX73tF+nX{BhOYvC$E>jIujLp=jKA~Ay7=KJ_X0GORy}1Vr)gO zS>3n$nM~WSMsap zAHS8IDKx1fKAz#4u%1Z6PpSC83X|ttG|>1R7nk8itj7BoZdCLnk-IAFG~%mv$$7 zjD0WsPBnR^^0Asmeg_tTrJLI`3D#HV4z-lAyuW!~|HX)K;P!c4_@&Z<6oS;8};FL*NW?qA)D#_1}6vA)_XyZsdQiR{3${x#QJQ z@L^jKGZs7501NZy`fNs;(@9(TxxXe$v`s+4{6YL({i)u&G+X(>#*+@IS1_TAY8wX= z5~H8-dsh;T(PWC*;mJpL7>QKW{{uac&+J ztbpfpm}189ZyZhB=IF#m>b4`({`b`PQz$z1(7$*v`RuuB%sfqkFgHhFBV+dL>0F`c zUNn|Q<5`y5v|nTYH+&t{Jwiqacc^o3dvUN0}Gi1~#HPap> zbK%?EXL&)=s%Rhx+LX85DoP(uSte98u$(AlU93dMU~#FtCB8L8kcGKFy{<7{Aq z4K@;$m_izj?Miesu8Ty>a}{k1Z{(F?>bf6cwv|i0&Tesc;Ypt)nqa}5mIzsImoBD@ zfTnC9#sP}%$4Yg{WW0mNE4A@V=G2~hqBol0gS;2dSIW0_%FAy5-JN7?tA?bBgLv;s zZ5()+8q}mmS=(|S`p5`;_$PyX9V)D-z@bg#{vy#Ajp)P1B0{b)H9rv!f(()| zd%B30%8$uYp1^6>ti^I$cpOCq2c2kG+g!R6?Nwq40(N0lRH?eU;@tsv628K3!*A5#5!0|}|BnB7<6%$#hr2JP!Svb~mp4Ud zb=b9c7beR3QP7WA<5(|=5#k7?4Q|K<1i|S%Emr4k(aGXxGL*w2;{4&ZP_$LTah$c; ziDz!ah}@chrxZv@7m=otku#|w6YDraAIl|O>25MJFND*+Mjn0*Yw(!yeujUDO8pMA zgg9im7PXhxS6Zp~Cn~kAEAtYwORiAfKJS>NR%nOKA0aS0&7l){K)uSc1{)FQp7I2b zuXwWbH$#M{R|Hz|vO9Vt$37n-nD%eLGR}K(x{4rJ(3G=u?a|2!>tVXQco=K`za&Rq zx?MoIaaW1-%*@)-Ax`RcqHefIEQ{*^CqHf&pFaPad^cYt#y> zd?s=#o_b2ly|!_!*GgQClYx-0pwu!B=*9IZc^97vdrpIs_AKW~;F@4wu8*ih)+P_G zbWl+iY4KyZrZ-LlaF>!&cpR44%cC;m0Uxp}Y^XP+&qW&ERlU%?C5u9R^}3oK5OKbG zC$YD4DOO^Xge;3vT>jPfZ=VH`jy#28uDGFooO=fJFpr-FU7K?wN_ZYa&*#bcLeaU@ zJi-#Tw&W>cCTW1BPd|B!O7zUwm$W5-Yi3+?Z4Y5`p`hhqd*;KjzRODABI(D{zwSRQ z>JqxplJ+?64c|`BTzy{>>4|bFCcdr-Y3eqD_vy_6=i-{A^#anDx;CG*xrkAy|FELX z>J7%**|SBi1Tt^OuxD(rEws=2!+~mu(Uu76?E@H6&Cx<>{(77c5~I`O?#luPuqQuV zn;dtNoHOBS(bLN_h5ls{H2ahzwgaOG?A*RCjt0ugbxl;giSoz3A)q z|0a3Ij+clf?{?7dw`9_2J&ShirU*{ehC;a7%3ZCZX${_lC@Wb2`ftSqdE&Cx7OYXh zgVn3W(?L=#rk8I6Y$Y@HeBq39Sv<%$-?mi(pF+zyl04kQ>J%=hrYKPi9PP;T4`E|` z%Z<`e!ulfcs~F>1#F8Oql3PGO=}kdQHN?kU9Z5xcK*7d_zOu%pTYsN4xdC`Pw{e~`%2iv z5flRdMg~R@xR)<)wf@cW+)GS=M!Zuoq%RuD+H*j1gW)A|q*}s0qK{JO1>9@Qn47Q+ z@0&%@O{bRZX7eJN9?Cq^8c7aaqyG!(HDNYY<{57wD>uPJn_cjR+QZfx9&=BFycLh0 z#qT|OF}QxX{)O4sSDn&s^nPFv@iOoZ#q3+1#{f9aAEnS3MCVf97KLs2%>J}vN}~_w zwO=g^10?tr-c6jrSRd95x5lHp@*5@kk|6^d@ECK+rCH#{#zsg6Lvs!1%Dw&KyAvqe zY@feU&GtS0FUDb!Q2MYf`d!u{r0DjuD)?rHh;0Okr_s6#Q1F@e1H;?%-Exc46q;{t zBK{8m4->m0+5)`i+UH(;dNIaU$&yNj*U}>!#_(| zr4;DUwLSoG)Rfszb6b2Dd{Uj*=2@c!y%b3S%Mxy_Gk~mSlTWULxChDes=Z7W!PIw| zz8|N&i|hJ%3CPwX>)kbq&dTnRpEQ(YM1623dl4(OMf)27nduQpls!9c59LQP#ME}Q zJ2F^iD7 z;?|$np(sp;2(wRJ#>HjLrObR9J6YXc3rkUPyyG%kQHQ_6I3H{S`QYvT4qzG>0he5; zu^VY*$J82{@d+*n7goHLLLBGKX-j39vfmSBW5_w@$a6XUbXv%EY!_l+ClX5?yAW5f z4=+mC>G~KgtaXfPMU-E|D3%9BaD+91dT8@D^v6^L%9eXZ84ElTBLv+d+pWjn*S^)x zW`hmMLcm@d&p)6~t4%Y=SU`7}*$_f7_=-zni&DJ4M&%j3Q}H>{a@6aZ-d|Df=LBUX&MfAwEmD5kMDi#%)K| zrmMVKNl*pWwHehJ`q;2BX(fq9_g0z@iYDU2OPGC*17tP&IY+@WjG0ym7-4OvL_-Y? zCmQdZ7@_iPsgRoA^CD?=YxdYKYX`gF?z@~hX8&auMAa+hDKxGLS%Cwq18uqYsAmlJ z3CIR`G8Ea(pkwIPB6D%f<%`o3veOaT5Xv((Vklzg#a8#*JE-8+|V%y5l0c;s7pV!ErNy})*r`;5ZTYEGdmBi86 zS>1&D*;aQRS^K*?2kUrTOPYZ4P_+>cCJ z9Z9ju2GxQewVM54z?-)uEnVQ!m7*adM&(Cz+Mk}Mk-YA?YR85fmi{FR1WXLi0UQ|l z^Rd*`QiknNk#WJ5iiSC`{8`R=XLDO%gf12(>zSuhTnu3r3z$N7_2#a9wwPH#N7C%g zNpvXj3hpAAn4vIV5G%=VQ!OC6$*-jU(gAt#g}E@CBtfp!Chq zMM5+`m?C)Yf8)x))$xHslu3FH982FH_jwyRg%bVb@jCD`5nT?lSZZn^SrIWUlePJhwm03pzmbhc3xdeK zabP-G(`iKsizyv_;7ImYcz!QSom=_N7|1aTdrz)tq8Z)9;o>NL6v{*;;+%7~<`7tduyFafWigTK z1jP`hAIg+a$eCEVMHdTUOP8e(!EQ?>E{1j09aeie)7Epm_E1X`6gF__uM4N)uScI% zNK%R4HU^McNWuuMbVVymG%eO@J572v++L7sJTE=y!;yvYAW&>Ccv3E#@WiXY`hPeZ z^~2|Vq?9vc7b<4_Ga|wHzo6BeO-P1cv^0Twxnz@gq1c)a-P|b;7c4||wcse;< zGZ&|RI6S1|cKZz0>ycN@U2^g{h{|6Q2l)Cu|4IiDsTgvm*qyuL5cKIYl{FKVBXq)Fk$+e4DLsEV z(|PC*7_cx&G5QYhF1&kCW@IGUxN`ad+Oe+% ziy-Xp$BR-ueNhy+S^{31%(>`bZqd?%Yx$uQa zPz^mKaP?f=El7~sIUw*cTTRg5SKra@%H)2sfb5#YShgK2)?=ec$?-LXE%mPes-f!f z=<@A=0BHv1FN8S1l0kCxa}Lx)Dr_79Gb&8s%Ea5ZB3dUlc+4$~B(|oB{#$DXXo6>{A%L2G4ANQ(B2&}O9F;&C4_0+#_xfBWD$44#>J-t1dK}+$dz^d1c%iD#+NdXW+)ejtFf1{uQU9 zZ*5jUXCo%Et!%sCeJQtw{npLS*bR;He2nF1#I=L8wtof%-m3xrXG^)--aeD3JWaUB zg(sbyKG7&O{4OHCO2q)*yHl}uloH+g+gQ=%KQ|eAZna=U`-hOD(&qwV+{voH8RE|U zal~ zFUpKL)P#>?D2e0aELXg);(0%J9sDYK%lLF&g%}LdIrV`gx~B-W##g| z|AYXM&isn53r#c&3-g&(AXchEMRqLnHkjsKow z%j$5>D2a_sjUv;s9PS=rohDr>K`ZZu2QHZOcWT5CsPeoRPqtV5ElmZsKFMvW(~(dw z_)B%F+wm;w$p$v^y*JODR=yg1XgYs_KcxeNFAbjluAr*&%h|1tXb+k z$%o#x_2R&msqrqMm0IN8x2a=p2abgmp8N~e5l-A$8mBrI;F?RefxsUHJB5p^P?x&SC6A4pgreq$e{%LtROtDyt37BXo4UnSEU>G>th6Z7P1qGZy%^ z2cA`e-m~Wl9A~u*}Jb8D7+0q>jW;`&>=_(g2#07-DXwX+)w5 zIn>J=!A@Nl!aKU$UHR<0cYYF+&Tmp0c%fxT3RQ=6jD>&2bZ6F|*k)zSP3+uG zv>P9&5QKV974eXSSmFt5g$+=r;6}_Ave5)@`#t+UU;JllBGJmSSDr_frjNwjWGV%Z zFKhFCLMm&w8cbbUuw4%IJVUg$h8s@A7GwGZ(4t5pB)*HaC9 z#Tg{=yg-uCt<0UOPNm*FZc4+pU0EUkkqcS#SvZ{Z&WcuQqOq&r!s}Aq(mOy@RZ(x2 zNLuGtvk&gkX+tL}R3vk)G>sHri%-;$6D!NUxf&pPrQUg?6+1Qj4)`>QC&U&{WSph| zIBL>O!2+E%M|g8rO1wh87L<2uKZ-vwp#2j0P-f7z^ZXGsWG(VQVD#vf-8H9FlK6uD%9gV<<--npulELF@RH7D~jwD+@x zi+8$)S~6evYSeG8yEUF7JUcYU$GXotyP?!#;oE4xu2!8fZgi9@d(eJa;}Q;!TgP(S$z9V?SHO7X+0hi5$XxnIEyTLZ3Ois zR`ml~fqFyej-&@c9~wL7j;vDVx5EKV{-qlwK4(^7N4bNc1&2U$J9o)w1J_fZ3hV;w z=eyesy-$$1+soLU_?ra(X_t(*XBIzyu4C>UnX^^i@`rd^%TE^u%!>r}W>7{IoxC}6 z5Qy|)RiyN}*Os|8YA_0G&8@9^yZ&c7PuV;k*4|xlJ$6R)h3x8JHO>O%#Ah*|Qkv8` zQeKsxy#mtj_Q;>w|D4pN_?29fzH;g)l0;d60>~zK3kp~$xuP`)fhDUx}lEf_OUtCJ<>QqwbvyT6uKN0?q1+^aGE#)o8-a& zebD7;*E6I);4#68{Q)T{eKtgS=p)>-ij$H+ztmLKrp>jG1$|@dByMmEk+obih+@*) zLQxlwMQnA?VSOfEm8@a{OzkN|q8t46Azu~DX)^;=Dgig}=(_4_SYTvjA`ilsBn3b@ zTKiq4IUe0)`)RqM+30+rJ52n0I#?a)Musy`E3M%xJmS?5YQ9?!ph4^tDOgZFh`{zp zuGZY|V255kkC7NdLQyOFhiGuv@4Bu>Rd6070OH`P1))r2Np7herVsM?cg z;s1*Keg{-POwiP&Io#mciJ>>>P48m-3|%Ag;Yw6-Ui?|@(ZrKe@XI@$r|D)!3M|Q# z^T+}8%J=WboJ*c_1-crVwwajNc5$g>uIpsf-^5nO;#NP6HJ`wy4O`U|@bVHG%7rfK=#N|(8mOO)X zXDdr+M~~9cA);S#=*K2yni%VVwm8NjT)9300SZ$*>Emcrc0D*^(QYd#8MShgHfr|7 zeoX_vtvqiHa4yoQ))$zIPi^33|M1rr#nd~&-cb{962!Lyr7lLd>^a|fAcgk4p^jhv zFmlEwgI4Wj6eb*sQaq~*ChbT=TEJfO{RK;~55(f90)k=!KQ@Pwx!W;c-|Y<#t5}S5 zT1p5{3#flyt$Q=>&NLYiX|DDV!ju~wG;C-zfs*5GqG7I3=ApINVDVc80S;y*b!`hO zZnkFWBr~C{(81o41<~5~#K`?ChifDd)XriA>uF%|Cs7!b@INyyg%NW5X6ctkY+KvN z9GgAMY;g)fOf0D$#Bl+HU2})YIKoQ@-x#gVRAzYu94N?|iCwVX-5KP!&00ma>lmQ` zE)kM{K(57^=FV{JIcSYXpV-OdbQMFerGG<<6xYOCP~IH=hre$&c-(DE>n0Jd^XBpT zMQ)T=V{t4qx|M1F4^PO_^Nx?m%His1VQX4%M%5T z--)8S2+A2%Oi;79cn7uTq9AFB!*v5Zfl*%@#wQyz%j{N1@;w^0z4&ZeNV98)ZAhxt z+|Lbh%!I_?oep6j}j)NxEwJ~K&P5qe ztfLhCjw!!X7`-nkCz=D$+QtH&Vj!gq5GGhsQgLZ!iTW3=;?G-V!!dder|1&7EmOx9 zQ)GD<3d)ru9jgmyta3V~o&aFx2Nm7N_Np7{NeSBb_JUQa4xo)H%Cjhns3J_ z)e7kgQM=)&)Ptnjo&p60MdDrhujVO3z1(m0{Yb78zJ+<=#5~l9S>>)yXBY)qV`Gl~ zJAO|iCLEpqkD*rsA_k7_s37vacHyA7VXO$jtNZg_km;L{!O`=jp2Xh618iLs)Z4*u z$!j?Nl?@v(R3Ny(Du_5aPqqx;dJoq93d)Xs-wqC}tT!M0@>OOfHW1MKJ8}d*&KUK} zcS!ETZhC^{>#zCCL`Mjf^vU8NhO`^)WH05>k9C~2ZxcvlJ_SYPtTtvf$ita=FUKHX z;hrLV>IfcohM>zE)BH3uQ|uU9nur)OUMA}H?{@Mo=2j@1$cfb>A0t%dj2g*$`rA$0 zj3nyQi2QnRL&ZU3bXx7Q_HN}yLrm#P^WHKP8uv>@R;$uWuqG} zSq$_lLtTd!9;JlrX|2=*9-eHk=KWk8-0o;(;~GS8i7kq~ok8>!59K)Kf1dUMe|_Z! zjk@q&M6&*76y}~AI)<0eO0wx+Xw;+|B7>8R2p?o1AN}CD0M~JU*vZlIPTOuk4@9zbF z6>Dq_p+Ougr=v(k7~8LTG^TepEecpe$aSn+hu>L8MiN=vzY0DBlS-|~R4sl`HY0{{ zo`RETdsno3QOJQg(9sQLWozkcyP0wVOq-YtDea?yN2W=RO>D87k!h zX0f;2z`|G45R1K(=BXFAWiY;?ZFAbD+&pG6p1gi*jflky=$%8Re|o;^Y2KIre<}SF zdB0$1Xi(SO7cHjW*9xA}rYLk8GBNJYUZ%2%=DcM*iX;sjE<%z9D($If3K|C#Kv2iu z#-XbW7Wfu^&GRb$S={%q&AS|eg?n?qhk3|LO@7UMFT#W)kmr@rDBcQbP^UIDA&-hFq zkPFMiW#_2gCm>YLYK%o*W7uMx;ZXw|iimVg|J|}glPU4-agTy!ru+lYe27rEHitBt z{TLgeG;z+!)s%^W9D_f7?p|a5-olny0{4dMnTzmWFASMR4%Xv!>*0 z0auWdf?vU%QcXmS!(nmvnO&~IhOxM-u!`5o05#%1O=&o3EF=gYJQWM;ukmL}3ABKC z*MbOKNwsh_0ay!h^u?C_{y%lLT(a=9P^92%e4Rkj_LPj4){w^q9-E(B1d&;$kB^UJySm?Onm)=WGAVA@dFFC(Xz4%H zrASk97TKh|>cqB~!}dpOI8%XmDQcN1LS`&A_ZCcaogh5^Pd)+klZw~t*ROF}^!xRi zX)=<9cItr2njt>9gREu*xdnMyrA6~VUC=GSN^HLsksVAus!QD{1jn~_qnjbj(rKXe zsuMq!bD5DiW6QMSU)G!hZX%A;h_k{7T1xXCA*ANNv|E(fl5E*#OuXS4{+Y=@%@?J< z*k1avq)H^<4qLucN5o%1h%e)XEd9!w>wh0<_NJxHX2WkKZOahufn zChUNGki7Pr5_ZDy1v~D5bYf$3_+e=cTx8vc;raUwE5^IEVC;e`FLVz($ty&RR7?$l za(X0%$88;p+-Tp@1y#KLpr(Jr2eq!tx+{*0NYdBgEop_MZ-yPH2hnohN;Dsbh1YLTqMW&{IuS!u!KP37|>?XCJzNi+;IyBb%XGmbqmaeYiPqS(NGjrGH6 zY#yY}-%@ul|E3(>rD@;|!IkKi^irXsus_p+0lMwgI)YH%4{685uG;H%$P-WP$gI}l z{82N3EWf69U8(I@IQW2%a|fy6*P7fyX)jD~l>2Nb)y6{c2^XNHkn2^HhM{gI6CZP! zh3oGsKiEYSU=b8AL5g(gXP8N^pB5p{uoGUTZ~u25jMt6m_F>zWyP>6#7_fm)+3HAS zVwy*=aphGr`_tYwVO2Etu=HcvUQ~3CZtfJ;1flP5w*`bRGH9Z8Y}7eqVATr$68y$d zedmC?mpcz8Wv%s>CuEbl1bWgbON?m#x`y$aRL_q3Qvor~>kq56>0!C`xe}~ySTJkPI^#;k zdHpYjHZn#KjixTet6(AiE^~=sS>5%Ig`sz-`^0#tl`go;8EkGcKGmESri3m1JvI{` zkIULEtEuY%ev(fqP(w=9LsYDLOXgt&{J|6A8~6~-tMGXV6D`-^wn&bdJDetB{4rF0 zlxfRF`{3BK~QTJZ3L9KU8F zYgs0~YH=%ezp}@J;18j}R-;E@JC{m{lGJPputBkIpb3nCGuOqK3abb*quB7i401X+DUF%V^K^}$|6yiKJAXerRtK`NUoloJAN}e$^ja^ zxq0mM_+@p!`d1pfh`u)c9~iKOi468n*Iho6XZ?+v>ks;EXuq9u#{aG+Sd-C~bd*%{ zde`#Adry27{f}24)%T;i-ZG0O5@cpt2g3n>+AmxGnp0+ui&Wq(jZ;7@x^6to6HiPuFq#r> zaO>Bq7yNvmY(TnasUg8yM!TS3%7;h%0EBd}y9A_o=HANF5k9`X@c0$?&#eBXFSO2T4IJfi~2s z0!Ugq!K+d%_@_mBndPV%c9HZ%z@1KMBrJTM&DbOF`?Uo%NRKvSZa=94eiZRvP8y+0 zr(D$Lwc?9Qv14$NBUD;#U9EM1Od72%4orMeU`**YT+rO`YSRQOp(IEB&7A)X(Zuwo zLhr9v=Oj8;o5FYAd%FLGVCJzzp_@XrUf{{z64%V(UjR~NNvJuMP1oN=++@2{q}BFY zwJm9MB%R+*^jfv4X=~BD$KWo%I(dDK9Ccofb9E1WahF?qPo$N8)sY7cTy?QK*yOBT z8E!Y0WCqrzG~*R9lp&Th5K!-^#*;z)z?Fxh;)u1Ng!FXlG~1197ZTqu``5IE3m^sO{Sr%<4BxhQ4yuMN8WXId^6_hzv1;H zsl?-+_;*h%167-?+C>-(vC{`Wakb*2ET3^XnP49{LIA>t%OXwepD@d)v2u)Z`@3@R$4~MVEdqDn1~=mE zzb9ZEIe1jSV1YeRA+`lDn~bYofh^B&l`|nWJZgVURmpjN)$=hr>INZ&iqw;4xL2xs z|1wv8=K2Q0X!Og*M62?@F7q0^`F~Dep~qhN`MH=}E`9+&=#AL*OiVv;`2ohg%0z%L zmwq;G-6~}1Pcw%>-ErXJNG8~3n8(#vBX4_QQ9|*PqO^ck@bmwp>8zsKfVM4K!QEX7 z6!+rpTHFa%+={ywcP&yNxJ&RL!HX7mC%6~4;xG5!@qRP%lW`>b?7h}pHMbCger3o* zOvM4dyT+aS^no?IFQybxL{@?YyxV!2FumbXYI;~!(q+QvWBzFS`s~eR{-Yml4hHx?CB>_VGPZmgSG;c7rd%$8Kf;I=y@L$sGpiO zI|Oga@G{E~Rm$WFW1A`mK0<$*QHM)|!olTV>K8s(QN0iG$~n3HxDoKiys(O%AeqH? z>fxt?U3fw;T{)2bXuQnyS<(Z5!RTP(Q)ASl@Ts&P#s<(=8N1G;tteYgr3;xwY4T`W zg}O(&52?)KXt21BdZnnd%bH2WWqlMl)49n_WohIr-&TcmX`YjpXc^zdjm3c zKz@wm|I~A#>)et0)E}K>|kz8|wHj3=ce> zMLiA>E%_@P_`p-vh;#E59M`kL&EL$&DhOQ0zagj8=FvUIz+o(L1<*MjM9-kKG38Zy zOxFqI6Wv#*N=^_LxER!~ITHHnifVD(6!AFBqAzuW(dTt!AU3(?wxrscVQuSdf1f6R zl$S21>pT-Sm%b}$HK1KJs}LtEiYj<1p51DlTRW6KqIzv$X8n>5z0mfz<*>jaa6_nz%JAfIo&#KlpqS7FulZ1rR<71yE(0{a6jl;TAJG0bwTI)?xHmelp+_qK@#`@_y zQBplE2=a9uR@}zS#N)bl-REX)%1W+rcn0D!_I0rO=f`0xT+xt&G#+JH^E>NA*2bkb?RDANNCZ2byS=cDF! zoDnAA&A5Ml(|SStJ-dT@F#9mfG5=SAhcbclP`DBX<_VFf_rFZIPgG?YjplKJJO6bx zwsRB~WxkOb%P-lV6S~4Q{?8c9{kgnEqHZ{Uaa2y!|6hcP_G>yHyVx1R#~Jvea3k)Y z9Q@iYD0-WXFX!XFpV!ux%oX`{FI9eR7b7&6%P1u(55N_o*u(b<&a;rt{koqhiZe#O z3N^+G2~;@;b1W1JkhR4)#X>m|&b1uKQe>Da9@UL%Lhub4hGy{=AHAUefH1TOr!*io zYe1VE>|3nMcI#L3#P>G(6E&#ivX6JmPc%^s`rm!uC)B+MG%gbfV8qjQDbPWql8!&h zK{vAV!X2GnxKdG#c4e%>rm5dc9`;w&pY{T>WguEG4d5!1z%k8%KLW~4yaunCR?3&qvF{*} zNCGy$Wt*8{{c3QVTbsYuSA>In-QzB**-Xnn{AGicezwI7n>TQO*HjeKIxDdc`yPrj z!wa#$(5PPK2i-=v+4<_XGhqyk<6=YHN~0PcA(;hr@^Hvv@ur?FTtO6)#;gtUW9tkSJL zCoL3c{NQNEOzwH@Pr7s zN5*1&SZiix&p5Yr;OcIXCse(Oz=_etY1Mp+Z6FNTP^dVI`MfGItDir%3K*>Mb2wfv zMKsh>(qcAP9j-~DGvzO#l-K5}NB_}+rWuL+tM2!s%8oOXax(OOt8R5l8dmTfQ>qt1lDsv&B6iI(C6jmWMh=y~wpW%nPkY(69)&gI}f^;X| zhOlNv5A$Jku!jGQhumicOP+!I$OWHZlO3E|PL|VgVFH(%eU@+d?nOM4_=HUZhlpas zD47xy?uCC{BM$HhjO``2`5Zc@*$OtIn|IEECu`9c@s4HtXDnpAGQObimgYujt=$=< zs;cMSfe$?pV;0(1(Wa8!qncTxf#|a9K0~3W{h@)~ zAy(v-WZgwkzikDHQTBWPn7;C<;yyKBRylQTd3F*9+5L{^{T_++EsK8cMhinF9n%=K zRcG001^W0%Z^EgJ+Ok@T%?% zSO)ABeRb}$WTAba5OvnvO1{?%ab@YMo)v41UsX&qoJ4u5&QddKr*6CT;{$My1mo!W z-*xioKF~UgV5HghtD_*-02gPjmJzdOVTRCE>9n+rdIAR6misGn_yX^RT2@iB5xPD6 zbq9{&MeEA)S4$(*T&09QJWVb#O+1Z+Cg}3LHoh~z)aQY?FfVOayN|<#btK@MKH#0V zof1{)WU+B97R;mosEyoqy^RNoaDMCHgnmXn6jtn=Ue>=y)fChO(D01HqpK%hV(IVy zNvf2foB~^Kc*fWR)5DW~Hq!){W%kF!!m3pB+Hl(mi`vYvL{&^-(cE&st@iV7ZCQhh z?*V+DHEG(U5xmBhuk~#MT7Xe@$aq0iFx&fYYy zFz1Q}&fRJIM%#MeY0#bf>($#DtoIUB`M<56LGZOolXYHWUE-PYmgBehudJLVAS%Q= zpI+pE{LH&6RcupkBAfe(!bq!Qu^fF$xnUNMjuIrXb@AtMu2Z*87M?n11_g>bUD4q9 zudS(+7l+X@H_v2A=hjH$r^2;6Nv+Mv5{E1v+#)kHTor}W0e21ge*I{W#QYQ8IM_{v z;T8pHv>HwYCUO}B7Me3K=G?PX}Vbt6(&;4@UaPfTk@x+%_85zhHQZ&GHsBq1# zx{KFlXtF$NMSnhaVhLXh_m;633tq0HmP#(1wXOd!PDz0D(P&Cc(=T%N2o4BC9#weo zMfxSVirpUDE-Il-9~Nf3gnKOJpIPQEd3wAONborw*&$0)&llc(n$d4DqA_jG0feVE zzQhd!t@~{qN$FN~9=gHFYrp9Agrvs_I-PXJY}7SZWgQgw7+t(b;dL4Je)|R#+(>$& zMkbRkJO(x%F%*pJ`?36#jNC<%h<*~N+-84_I(ckNc(6u{U~32O0A&dA?;1j#c7em3 zNoL=&aKT=JX`LRD_Z`MHYYRDyc|5=2+#6jJ95yf~7EhaJo&x*p`je{;1fPt5WM967 z;CqdWu53Q6lj;;jk$2g3N;&7^ag~%;`JAU|LWRaHi~LIxPN>np}r5q$zwIi zXH;Nb<2)0AygA=85AX`(o-D}d)EiK6d)mS*r0fYRXZ}~lo1gI9PgHoN6}6usn{HD? z{?LDqCiD*7z+(c}P_4{}>!Wlk%L>}EdTvSqvhm+UJl6#ElKW0Z&ZTIzcBb83M3KNT z)njOujd(#jDRnqo!VDR=gvIPVbFMJG#>_Vuc!sa})RV}o@`G#!PvVa%G7MyH2NS?2 z<8v!?7c`^t4m7h)`iE#?krbG=E7!rK0({M3-7(6q?_#V9lKYG~q2gngnIF>?!c{ZI zZ7XU79MdWAV$Chq%x-4dUuZRCPi;6do97mqlA|qcX8V4ksE7?LYm#($sWH4Z4mID} zRJehbgDE`;j>SsJ2+o1ny&{b8K(WTOc|6DW6(OxL_e8cP22Nm|1qZ%BIsee5as$1S z_=fW^q6$#`nb4DGQEcGk$)4l{s=(wA`tVE+Wx>N+wZVclocV_AFk=Er_nzi^*<6Kp? zjnHe#8pKmDALV5Y%mzs?rx#B>+_g)d=FDDwTgwee{qQ229Fd68ueqvHLBb|nCWDHn z{#gjln}0mDaB>`C)MjW5lNao|i`sH)Y38*#w7dEk`MeG2?*0vq-&fLR%1`FkKJfdo zP+R>Z=eT;`0ToqSRUE@6{4jyli$&fM9n_1Wfvqax_Ql1{;v{F#yN%#NBt$EVRCrn? zA%RiVzxCAr&42IGb|^1{43zy3)Rvo5$P%}|6By)p_Qr}Q(% z&)5kDm1Xa~e?6l2b$)rDcYghEk@CNu4ev`6enLvh4E72KGy8ZfI!U6LeMQFXim!MM zE)&@CYiBu|FT)g?yXCQtb|XQYj+jLKf%JNn^T7r0KX4bMxef=(Jy|;21M#ILi`--^ z`g~*zW!q&59UL}_IRHr`FFk%j>wG&Dhm4R}k4rqI0qcYVX)Re{6`LZ~!q{|v5r+&7 z{V%(9o3ly+LU#>r?M5)U-Y3{FG!wa!%x2h#XKBjJVpXS9f%S{4I%Pq?YUWjcL;2BG z^XXh^!o}iA6@(>wAf)w&dwj6~D`qOw+Cm~r8Dgo=)-5=zx9Ez=jxxNec}5zTe05t> z!reHAnm;1jiJ83MwePcERr^Mkae_)I8d$8mUS2qxE)Npwlt7F2nHbY7)iN#Dj=aa1 zn5}XS2O$+G0y1Ny2VUpLA4FsJIGfozrtz z>SQD&CJ;6Cgv#1_Zb*vp+d^$yo9`tsWf2PC>?JSL~BeE@`4z(4wFd5f#@0o@hdExIx# zZp3mB%H5^q(LF53>XUgTV*w0CX{z1fqYjQq+|}kSaRH+M^Yz>c%im&3P0geu7AH|M zuTlJ!c+NsOgo;6>E;9anEjQ);{^vx4c_CuZQ2C*UVxRcV6iMNZ^|>W#sxfXR`T7Mr zTDtL@zvNvnucV~{R|ACSnWdS#Uk)Dn@d)vev~19M{O$lm0ug%R^4r+RPG_b?3+Ty; zD#x??#arkbgt#2Rjl6V2Z(i2MVct9`mj1P69{BK|8$4LoI5FiU#pQET$+vl%K@5BS zEB&9U?M*jG{n}m=Qk7GBU$gqJTQvy6ktI~FpJn}^78^vqV^uXbraXv8pyNkOi(k!B~YvJ z&Bgln9CNw(1oUDHD3d}vQyLi% zzhaj7Zl5V~c=lF#O}$^2R7#y(>)9(0IPzc;2MU(%FblyZVG>6SdCn(JGclp>MUstE~t*UY^pij>=6H zF5%~;sk+x`bwEF0@>nHe`t7m4-26M0Qr^nH!l$uNCZZ~ppc=jyWI{>98CJBZcB8pU zGQn8;RT>>oVsEmF+Mk-4&ehw^IUv2>K5s3VM~@xU)O36Aiud5#iC^z~IKq{sYQ2Uo ziDh4q=m~+sG9NU*XL1S1Ep%qq?LcQpY5qy0NunyBiU2g>#uAkc)#qt$7E@3V*k_ja z|AOs`g$j7$C=bwF?3@7cb?24uMt#im=`^(9jpVudjt3A;*Nq?kT^iV}|2p`CK`Hdq zRUtT08)fgEHG}#0)^GjBSbhk(7;o5zI-?=o(%42iHA9>z{GJQvPe)ZZ&Hx1T}A(|%tDgmh)+!f z&^gAl@pB5+Z|6a4?Gr-YUs3D2e=9Y zI)HRwmIFGoi>|NeG_8-<|9-~*7l0>;wBh6L1p3F8hLx&Xyj8SvOe_=Ycy_ue8~!m| zL#zD5hnfO{URX=4C-U0TqwVir5-3<}|sgs)^m1kx7L{#clWuTdPQtohphGYb zA}V_X)Hmc>i@lZPf=F!Ies|h7>mprvGohRc{ga$ z@g%$q)()SI7O!hACTUp+y&!d`0gbT6t`mFx4V2O%`gRD?E%XCLH&=1_*rv%hrx!l9 z@c5Pb>CWmo$zN=KU?S8^2K8p%sE7?Y)2R-&zzP~`MMmI$xX;WsWGAzMf_GnYcYT(o zHiOV{H9RBZ+$O*@mp~Dxjh5W%b++dtgu)joux$F8h0H4Qq~|I-A8(a^}s}*0Y zS=~#RBDPg8+bxR*4sb6!6)`8X7(1nTm!G1D@ zi7M+~+#)vuGP4jNl6bh(*&~Pur9XtvrXGmIX)NAc-yHD&?V3Su<+nXy_P0FD43pR9 zsE9rU%BJ-xE%K%@E)eq-cX12VaUl;Hx!jH7PtR0gC%2QPlvYCSqIaaH;eq9yf&9?F z3!%7lkR_T&=eub$IK_&;Pb0$Y!XhHUsD|u>0QJ1AOAKPAMlO z_3K9<(ft^)wH-aeB#dX~^EU6-Tvg}9tQM_K`|qDDbMp$ef}13KT8^#8j0~*VHoH)5 zSropPN@oZCcYKmp=R_(%Pm{Z0Za8;G#ig8fa$1R$U{in8!E_~krda3a=W3{NTSv0E zD5OeGKy)~`AvDXf^As<35!CZM9G&UR^3Pa31hV@<+tPnGIo1eIf^p&Tuz(dS$N57Imhj0sJt!AKg8Up@vg{GaHmqcW-)Em zx9Co`nYUs1;;*KEC-IgT+z{SRs{Ex`{5`;}8R7>yFJj~odo)%%3Hn@EmIK?tpvTLB zp;ONNIe0xlR0Ml3*f{Lgqs-x$N@q{DWD_}z!(M24ZMHM<^G3X}RU~2=iUhqx1(DGO z6%~jyi*!COAwP00@SbJvR%pve%3obHhj5><(E$c?u9SsDHg@M*wNPAU*)GX+q6f7i z@*f~$OCQs0Q4u+#_e9luAdpuE%8fB40qY%Xpl&tG;1 z<%EYQ{q-AalT;+u_2jK+8Vq(flhH@Y1$I(7R3f>vP2GjKk(-+H_X#mW$$UKt&ddD@ z@En5w)lK_J6xYGrJLhma;_0k z*JrG!AmiP#u8w$gR+`eQ#qF9@aST<5IWzw#v!(N9dG3(#^7b*`+IAP^)`S--V|B#1 zYUyk|J1p6h5y|WSr8T-^78W`^6+B^Z{(Z`^T^ZlRczjcy~&$k zDsGL%2-LQ{jzGEC8A>Bso|6D4(-J2qctxGfEnSGcG5^aWmp(-5r;z`FyYCdwv*)y# z&U5|X$<_Dw^IGH1X|k-OUo1-n8fsz!+xk6)9F+EfKys|1VSZ?{Sfa_Gf)!TZaq2kbwvSrfxsa!H@Q8N)4Qg`A>F1%QY^v z9G}uS#`}|c$WGdc%bGtPP&|ja1pMXWBioyPr(L&{K5;$j_1)mW|MdfV^5P<d#v`5=?)H-(qywVGY$Wzyd{;L~0-|8P$vA|W*Ec@mF4{sCgp=easnITfnZ zocGK^nuEDMMmj7M+te$wYJAJqu;M+Bn*hrr3EWGuvh2Z%BPCvri>Ob5w6tm`2O?9cf!LqM(xM7u>Z7ziWTM{#c9&!F7Qi{u%wi{kuCz>ey`yCd$3EvvYG zJa2EkrPV=SgXMcgB(726&1AV{~33y((V3F3hb9C$+IEExXCLBzbDKn zR;Ac;Tf^jl$A})*ch6pmd_?NzyZy40q2yCADt%#XsD#&j^5pd15caB{TU(uw;M@BB zvWzKlUbP8h5v!sEpLf5dM_%_I`S15do}<5ai%8wLMg?7a`Fmo+79XZD&Q}-GH0uP( zY9iTDaZafLo4;^o6Kcy`@}BD)sKSyW9)j|Abl(aRz1F;+|^OX^PZYXpCnrLazzrHoG+MMy<7b4s%VAaST ztPMHi>a=)$P4ZHi#y@~bsvvDKm3q#7gh#B3rPgeVPo^Q|ms~45g!C)aA38331$VBI z1gz36bv6o&srb$2KDezr7XLajN;9l+?|SLVtYqBu|5o)DboW~PCxxZ`xu-{3;jMV1N zEn6bmoiv08<)YWaa8YoIg?xcj3GVkCe158V$DIeylR@&;GD3dzb#&Tz=zY;dAGUd$ zB%gGHg6JZ8j@->)7?~S8%R>pSHQ7BNnpDA@I2+-(v0Iv~RP=D0UU9@aGbbFzPe`m&|Grg7u-2DI1!XZe#!vX*0h{l*xjj1lBWF~f zXD(_q4N7@ds<22we?_NbgM~r)pJQ3<#dDYB9uX~TUqznh zR+-=uQB*AscKJC2H2`B#O@|DE-p(p++x|=QVKF1#0QM#VNB=*Vz#b2>voV6rC&SDm z=l=F!psu1eYOsgVTpugKpo{onD}rfM6fK|O0jdD$WR(zUtf!x`_MT46qhK_?V5cr% z9ZjV@dHgohWnhbL602o0|3~8-(vEvclg89#r5i#Ht~Zl>D&gBY3^OAg)F%A)^V;-9jC`>DO|T_A@x;r7 z67~mT6Tj{i*$%KE`ees#XK|A-7(AzwxlK$tCO42pae4@1#wVYj)~-TaIh~P76CL+P zZVm999PB=}!>)_GjoBE|d-C6a=rb~D*LrBr^Ig$*DSbmBsN~%GOuS| z?cIcAasiT;rZ!fs3Pjdr)DN1@852a+B;12DOm)U;G zP#o8H+W;0d51Nvo-+rmdj@3G{8eH`DY2#4Fr6&A2SvBihRoL|fx_ol8DGaK*PfMT> zD#3SF{Ojl-q%;=EtQ&H?%yUxDQce7P98Jp1G^3#Bmmo61C;lS!VGqk(A<;wmMz7(L zq*O|(b*oQEu-eyx ztPkg}XTg0BQT(b-BzM&WbX5gk;^ifZSBy&5z^s@xJnDUw zZf*emS-*v=Fx+1%KV1?0mIaI^e1Mem`fG_gQQu`7M?k7T=IZJE7XN|f0thpp8rPbVNDO4wZ^3v+2i^CqJO-i(%q}$p1 zwIYuhwHpXpzvi|XvX4!2v8y`slkrndw4M=p9?OUqZtg~T%hfQEReKuf|GcBK zmn0v&R>DBV`hOl4EhQEl&AnLl{1zAdQQH?7p>#jWAAvl3!Rc8@HbgwEvz3s)_Q9oW zfSQet`@fE6r067g@#WnXD`st4VKaOPwZ7I!eMiZ-PejxV&*Ee_lPK4!mI@)#Su+F2C99RhW#E# zJlw&b?63PepJp#He5fD zUMuX%V0PJ_r{J0A;M+JffM4wZ$5RI3HUvNuHcp6=y(uQ z=L_hrP%xqB-fF+^&cBs(m)pVX^6e>}{woN{r}#DzN=ZJ;nUd}7(`6U&84+?g*)k{2 zC1(WwvgC;Or#(sC<$j71W^x50$Sh70M(#g@da&&zrUS zU1M7=MHv!RNjhm2b!YcZe0gpFt!d3V+$3^o4(_WtDv|&?S=Jl3iJMAbbGxZU*Th^F z9w<@$KIG-~er?L*?nOTjqR5DPo)`2G^h_OeDV7~E+r6{%n6o(a;RF$Ip4Sb(dq8bR zPmj^Tg;TB2C^Qo8?e9C;Ft)aygA9F-$aBDqye^GyXBFDtvK^k&hu`6NgPzmvlx5R6r3Zw&sN#ine1SMRA~n+os@D#8M; zkk3_l-uEFN<(wFL`?e*GR?5av153F|1hOuznv;u2*a(=?uw?u7&+>@f?`m>hInYuy zhP9W8no7f*j<`{O)O4N=9|ktcHyU!2zbvfSva0P_r4a9klTnNEw-5S$6|m*UoXoK9 zdN?C@Iv3kHJHy3@RfG}9c_FiTf11I>tV7{@E~@x~p#^Gxeu>xz0WxE~czn18}39Bg7_ zj4WGM+cLgAux(Q4pSM#SMrZ9n)_UZn-iTKSKO-|U`#>%Rjj4B>yf4+7i)=j`);-Vd z!xKQGM}PE4*c7fHP=wvUY#oMHu9awg!yLz38%@VyHAqj)2x*M>bBI-Qj+}zWNqJwJ zpH|GuLUhkE4)rj|Y66C3)^c6I*wdF{OAOf)kO`PA#auY&a@sr8UF)A_#X2#&!u?Mo zL<~8Piu3Gkh@XwJ$P1ac41{{xKI;h246Rt8o{ib*Ol*tt&FPKs`H$EGJMjxFq9^T; zt~fSpDgr-i$U}AfPrpd^#>ybF{|nhsV;{U3GqS{3iu~1j(S11P%iF1rZ_JI1d~+v0^q# z4z+S2yE33)c!^x?t2oqUO`AcbHa2Q#T#0ZDdjOCIPHpZ1ZZ6z5nhuFNDx) zIC@LP?vKl#vkcqbbojPF|7N;1YReb$3ACww4g}(Gw?i32>&~iSc^CqZJsfezCbws# zB$eB~*B23dPEevR#cY?IQUKh=(X_}&zwu*V4>hJ1rMSb(fvkO?9dU^#L@hnH7!fWm&m=C@mK+W zC(4%Urd@H!XY1ie#3b<6-VDkA@sIV|#yV#L%?u4I^8uQ=hiP#g-SR}t%PZPM)r@AC zE!p9^x+`CiTzpNmsoH~>V3+1+?sr+8dVs;Nb$(c8WSN5>!TbrDJ(x)_^X!2MSFLKL z=*iy4n#oiBc6{VE!{JG;$qdxd4i1F9^M9MC0-kVUSx(v9vK1=A#dTZW z+JwMLQzAvH*VFfdw1kP6lFkz2Esf8Vx#(dhwk&!7ZaH3p;RjWUjAepxYiOtI}71@l-U2z0TG+^ zJ5YT+cnb^q7x@Mc&C{zvX3r&(_3*bD7cN8T%KXxFD585}h1xJc=D{ov&%1@gAR>-8 z;5MPvPsKn#hcz-oGH+jCxZ13MLiu{u+%MXqIFL(5|uP)W{eNAZjU_&p*>)-M!!~3O8#L$ckpOh=wJ=~-}?#hlYsQNcUsB7Gh zDU(hNl9KWvjiiXm9KkjoFwdc2AcOJ{v9Gbd?tHzOo6x7Rb_JkpC_mNWAjDXJ;*1Cr zvE$xwpSk4N{`62!TF$qHh?0^t@Mn9GQMZat8s-kLh&z7sum@5Di}PCNkhaOO)OW#P zV<&_?yTN(0E|y4Hk-CjI4=t~C&4d1(+nt^_*I%*=Oz6Y9R=KOe8m^{Or%6!MUIAY` zyXg}xJIlBjv~))+kWuXQLVl{WQ}*=9>5oBKelU;O)Q=^f`4G;qd@?@7Hsnr=az0y6 zzJ$dEM!$nz(bqUE% z0a-otqjpC~@hN`ca+ct|SDY6iGXLpW3C`)%U-AxV(lTxuE5y_?GsF(=v^^n_;X|y* zU`7fej0B!uuXCJ?6Pj)2>_27hPWKvRp57p|KLlOb3xo?E1&iWd(ZNW8VKqhi=VY95 z#SI!i2UHwhNr^ZqTYe7k6%0o_J0hb;#qX>Pw&C!sIm8>zuq|QD)fDPbrHvdp?>hg| zn^pR=jP#%^cfRct*ro>9*>acjf^2jUSRA&hq6^nwRq5UaedSr@D)Eyz!ao;@wB6;1 zV_K-FR6f-%`o`N&jyB)Y%}iSn)lc#xmF23`&bXKoQ;VsqqElvEA(^>0Gmde5%-$l` zq+G!5m#8%gV*040sU`5Q?|k!y`6T;!n{h6G&P2z9rvfJrib}`v$ zkrfawDzIhL_q9oLpzvo$ep^;fL^*^wNUG~b`{V_PIt@SQQVhNmtGKPT9TThRcKPo; zk3W}G8`mda6D#TrPOk7&^)vKR{IG%jj%E^~tXz1U<6&gWnT0vQtAWkR0U6XGid-4= zpJ*uM#rTnRb*qETF5ehAk945Stx-rUFgqP3;bSsBC*8+^9X|%Gm@_LXDeZ*?X)rjl zTG=cQx0O@Nl1YT%a0TSgMr#S%aU6G;(@>v8NuV2Y*o367m6g$|-6)X(y zxmtEj0M9AB-R|Fs13d8Vp35B<1-BcdaR2>L4b0<*tI5dxW)y7`L$KF63l2;_q-pqakhycZe8Hhhx+%$8?TbZDxsu z%22ZHTojN^@+6$~n_jzRA})`3nuBO0)Btc(i9XDM5rtX|#6F16#@8xV!}YkDPBZ!LJhYPWPRhvs@=acFubu>!HC0 z^PX5y-BCdrJe?rR%3Pno$=Pc^*pZK@pB zTq-iHs1T9`h`yY2HYIf5?Lg+}Md)oXFiy0VlyH;;ONvYqEl#rsUN1v>BKE3T@Via8 zFS|_2`6j-Af!pu2g!kJ~{56E*cr1}B3X1ZWoE#DICpo~?*A7#^;lMjDFeu99lkBY{ z3YD|4ol7BuOKCdD7EkIA-q9&WvCxy~Dj44{AteC%Xn4CKPS&Oi;lACf$_b<(-uZD8 zkr9HK^^w0HsTa3a{aP_ct|KWMA=-ppH+}T?%TWU53pCN&`$<3rqlxUup}6J!0bRe( zv8$yKZf9zzPl3$gao)V&dhAU6c?&HdHH(4g+-9CtwAzl>>Mq7NE2V)KU-3JNN)q{l z{o&F^EJ1c`?c8{YRm z9p;%^d7}t*=Xj81bpHpH#J3yio&Y7PQWSEa;Ub-{X&u6)WE`A)|bqO z=_Kz%TT)%yf?UE293UN_;-H|xVN#t8Pp#o5Et71N)Ku>=i~(SHYt8>GB8X59jd!!% zMYA>Lr#SnCVGX#J%_Ya8j1rh#H5;Lf#3WJAZluOtji4~!^#*FC-IJ1G)wd>(@nhJ1 zTFJuqeI!mx*Z)erryWrJ9j>x1)w9I%$=J6ulIqyIq?{-8T1DtEKl^nu@KyJDPxUSJ zsU5fbEmCa%>`cXS7y1!93!)tRP#o<+IAJf};BJjnWzL;QNhu8WdVc+5ZeBZa=h^AK z%`qb*uOHA0#NQ>_P*S!9EBFLHrdwtTtSkS^XK<>>RHuXcwMZzM{f~chpuQjs z#M_T3Nff1?46|6cd2f(C-)7*NlF5ynrFM%nWVa6gPaY$2}Zy%*F-uYZ9 zBIEGqpH*$48iXsM$n{)rjI~pDW$-@5s$=jyBnxS=@)>Lz^%#iV!R)J=VUaA=-PSLA zRQuMU&&(ib%uRp<4i?9&$6hXU6`VLKuWC|cV{WT6r{PnlFEcHp86r&TE%iwt4v?dF!%a|w0x*=`Wf=# zB7L6Q#V2z-XFPwxilC9D4;%XjV`0c+-muQr*>kqQE8Rm~Bu)kTk-_O3_uD~vu>E}A zAxfYpHWee<5c3Av4MA&u?~$Leai#XU4~d6xM4zAEUEdRtzx;d|Tb*=R!0di)R&I72 zLZO`UPV$fd>Z;QEolcOQB20;sYYhSdN_v92!eVD z*b9J^suwg=VY-XvtL~751+?@HZ#mFOd0AmmtA=2&&tP9aQMKA-yuGi)qs|TE3Sk`3 zKfq^uu{&`4nZt$O4iQkvw4Z*fc&Z!_qK?V z6E_b8dKX3t5=>Z=_m!lU-(n}{)8NT2XxWOK630Si>af>DCC_4@a{v!C6mFLD1}U~G zf=nI5`4snA{KL*;s+X9e`mtyiqD&RU4x|#V(!Sy@6=?l_np5{nme|`-Uh>NC1CwV? zr?ZXCXYszBfd0{Z*?e)j`E~ zrL`QWvk~F`9)!j(rxK~w2AkzWTIT3;?war{w_5D}XQm)z-}_YP1t_VK1HrQx|Ayp| zi2$D4&IE^gIu>Bh4NiHtOulQMGi4iR~0atgdu#Y(tv>JJlaENxK(X2b1H$oh^*mS|zZo!!=odT^CZ> z#?!^P3J|)$$*BEx(-jSKEF9{SzfftP(zy(@Aj?Wn%uZT_GaiZq69VBz!J&XD>d$D^ zqe>2G!13z}wpNZ)b7YTilX!y5Q;ASiDiWvfolGXhsOG{y4wt~%GQVI)kY8nPfoNyA z!?3saVXHr*`!z-ECHAd9g%Ilh=m$I(GZpSIjY4ELCKr_si~6WBTAlqxu|KNo<25Wq zrZYqG7txTq_BUml5;ds?vi{R=v2iYDY{#bf5y_F4Klmpb9A%cRDj_`Y<87mqBE3m_ zi{3m*yCXQLS!Z4Le{I}jLzWtg#l-$f+nkfBG-E4$;{xLfPh-v%O!)>Iqo=9C-Q41? zn7jdNcAOvt{?r8bbKH1q0?Q5tysue}J>S)!7OUzFue}tFiPU}@a%!u;OyoiZCs@I1 zu{e{re&1;{0`{e*urrpf*VX&&j0j_hckVFOkN7vZqj@P)J3sYP9BAn*xKCTWUrZuM zI*xmN*IB#r4l7P4X%||wp@4dlQEwg4Rcr0CXA|m zCh`IqsDmi*sP{EYNYR~aisNyzc~eWOe1+qFPmzp1!_j_1#P@C`Ii(Ri_*woomQ$6+pdlWf^^1A- zz=lpEwen5x($)j$@KH3iHroTQ?28w+85-|`#w)%CR@u=7NXil7Qj#h_h7s3SF4kx} zTuu^8GGej(4di9VXjNSax8W!w&HlL3F%;EYnRNov|2~ZGEkS~k7#Y1OYv(HMHH3A3 zv(A&~9p5V+bEaEp6;C^^^^FYkCPCs!(02_Z3yLE^-@_G;%b5Vn4$@bER(N$VcE3xQ z?LXoOajHIo{{#5M_t>R=8aYQNc$kxtCbuQkAG>1E{~iOU9NcJ(+i4|@0_DRvNcK=M zv<@KO;dc>M`mu9)lnEeZUxX#;I18)1Q`(7sf_aSm#9ldR387+Qu5HE&58;N)UjZ&s z`O}P@4aJ!PM)K(So09Ytcs|*b|IzJH*SHDiQ1PP=jWg-M9;(P*_ttxh|Hso?__f(J zZGaE%?rz14TX2`+PVrKT28ZBMT#6KmySuvuZ*Ygu;;zNrH~W73+dm=qnKPL)mvJbI zaklX0Fz+{CHJQI8)%Ct63FUR~HEBp%WKO9LiqCu0A-a29qwOwbAIS?fSbEuHgyY2o!?0&-i&F7_`L&3`%!~2G^KlFJ)@N&qT)E=H~3JY^pvaGQPpwDVwH7r962Fiax1 z6Qc?IycRTC4*A}Ks>|C%zH|2d*Kd2)zlOuN%c!=^zudf9T^AHW?mWWg_!{RC|IC`2 z?w9A1AVS#JQFz3**u!fC-m!^!j=}-N|s`_fo_4)2{n>00gqf<@xfVR?LwOMe% z&l*+(=L5(m+0QK<4yMCk9^QD1gi|-{>?W4d+Bp0h9&oy6i^{k$+M4P;*Sf89Q9ut@H;cEmVP^aDiP7H!E73x|gpoQ}jK%nVbJu;9HkQF5Zk4RJI=gUA^h;)}VUN_i@1U^(g`%CV(6W_hY z9`3qnKvr#dEqrKQ?^}#{&?Doz@Y(t*PdtiXi)oZ}5R$BRR#Rw^n^%zHO>od<-J8Js zrR1B+lo!D;taYiyTFeXxFk)MB7atRE5r$l)8F4+-?lkuZ&v}V|QFab1b(OKy%~p#;XdQykgHg{>M+_r3H=oP`7h3PL-}FmL>~^X>;G~dmQ^#amuj!Ya;a#AbYBmi zk}YEt$MY9-STj`+wZ(M@p71@q+AQbFmQ`S9J*gI-N)C3Yvx%^sLeyd=cdC|SJhc1} z4(P$R2DVFadVjMPL*j8_I>0lIZB;IQrYr5^tM!8Jnsy>78$D2k&`rI?efk=`u7epi z92>Q@IEGSz8hS~O+c--gQC%A3hkj$RvBZT=3RND;SGe&$=jTf*J=sehy!W9Zpjd;g8Z zcAK=atTP59ev6yOoDVow+>8(T`U@z#hSclsm@JB7FBu_Sr`ZJVrvh zS-l!nXh%q{L|8=V0Lp6+BS%i8pN5gOo4VMlICpH^eVVi9mE%!(=X&y|aeqc*-+-}< zIjYb+fEvueD4O5u%7~@o&*$RM6GS{2&AfDIG6LiFh`hLq4Cx`E0A=%zf{UqH}&M~R|A`&M0@sWwy$$UhE`B9%DO)!?MtUryv zX{CNG&7;%oj5NVpx-jdyG$NSt8XDZn=bUa~f(52tR@L~=U)1CVD z-23NN$b9OV72c*c-$0m_v`=cR)?Z|FOgb}!>zsY31=?sjo+b&QErm`Lmjzp66f~9W zX)cn*Sp}no`i%X;+9%(Kqixhg&VJ11=0H6?9$L*VgRU(M4>we8{42eA3MFI@fJ#E9Xi2 z6Ny65pSrl1ua&I7_*%+;788MPHYnt@2GVuSTx**jRubv7di2j@z6;kW6<&*wFMhZF zJIm=WbPw8dh$v_3US#i(Omi5?>^P{)6fK{QJoC$%*88R4g6qF~7%x{gEpz(hj3&KS=>2(@aL&sV=j!YRu9rx` z2|*0=%|OXW)_SsF=|}%qy#B(fD|@{JDb2+SMDNL~#cl{oce|XU*1Io*eJK> z4OL7L>$}sew6L9d)T*FD9Dj%fYOL(S=WMgjbC}?A`a~J0AH*SqkV6)q z{VeC8NdxoukmYcVb$`g(Q5^MpMdq;12V|VPbv7p&);Sp+`zIZ8oXKtpCM?zxJd(Rl9mNwo=7DA5ps* z=LZAfHAzinI*uP^S)Ld-sbGsa18tR()ELZJNbaI;O*|ldPkAly4U0L*)P?R>j{MbJ5I6~nB+$BG1DagU9x7+axsM;T_)yZfW4W!a?te8} z=Ku89#{c?^-QHf8x8w-?>;_KK-ucy*_s^u*h&M8l59bl<`c__8Rbo^1kCuDMC&m%M zBobxl^Bf-O;1GoQw$RTARv$W!ysZs)z_(2LZ&~io`nDOFP3+6XkOC1iLRm^#+^;jU zwyZwR``e_#)Cmw0j7nO0hDiJI;+Kie9!(&9N=i0=D0f8PCdxMdW+<4eC@u_u3Uc`=;Ak$!%$K#dZc$cXhN_>h#stPYzW@3TkniyzSl%Z-hKN%kt2_5@dUP{z z<+N0Ho8&4P?k$V@+=RB3Qsh+r;LXD4gNy)jm42`x9jPzc!GtBfj`?2$6u<^Sir$zbF-l*ixI_bYh3dXK%*Cp>PHk&RAuMNhnvM% zpnOZ_Gk71?9#c;PJ=g}@BIn@-^Ofhdlhhk0kSbbQjXR@$y$)6DeY&IjQ}*SzUd`gy z)IW*_baIZ%zH4=(aVJ(wgDBlrE3J;c2CIpSa(V`mo)4q7;^8F#5fOZge$sh3Qo|o% z@r_cQyj?sNK;ne-O^3(^0f@+^#=p&WP@Jeh!(UVPj}?~fa41pWSAh=4FJ7=|C5uAz zdL?lTQdo>imk&kVCn#ejoJIO6HOby00PQZ9DzcqTtBMfzizGXeIny(ARQHHI>=bS} zJY4?4Jik(x2)%gCs?8@Q?3wrR%~SvIw5rRQp$FW?dup3cyu2G7Tk)tKYlK3z=^4L zWD1#5eep-7Oknhy zwgbN3xSTtjQBi9Awer-IfQ}LULG1Owk;ejp^TB73GIDy#f51bMuloZnxAwlD4WucxW*aTtaNqvtOt zj$G({snVXXMvwlKyOktMd19!?SDK&)8=<^T7!7ms1kka};;S@RAi;XZZ32VOer*(>IuBs{DVv7r$5l;pn(TVszpgzRD8 zg+hGWA{fI^&3@!$6V!O^rFF!z=NjE!$MPHkYW>Xv{DC6bD{_R!hmD)RFJC;iJbIV` z({6@X!DoU!bDy&UHckQ(5b^P}jYbV+do3}Gt?1GqSweYkq}bg-ff}RnJ{-wr3$f5R zO(IaNQ-0~#`1tkIC(Qn)kL-4aKF_$C)(UMWhli6D0kIe?R0W~)vo-VvRrHp(#3~+L zC`8vsh5y8vWd_~E;#SRo1^3^~%OHiQ-enn~CDzLNd)}z)xjK73oF_zun>lA|Ef^Xa z(_-d5beJMviR~U{qIvM;9TnU@d5CQ{Tj<>dZ?vsLMRx$a;ds*L7F;YSOJ~1pv~XQ( zTaR^K0rW3j)&Hw?6ZaX5n_)?DDv8G?;N!7IXLtbH#}c6%rjM*f6)#vDmyk4V`pZ(w z&dc1+OD3nkpX+d|<5=uozGJm+pi{3MrWnt-m3UcXB4ZB*`%FbRNxO(_SIT$QpB~t1 z>DqBnYWwr92hLQ(kRsiF4x% z<;b_cpa%=xp0Mvqr8i`XgP@iy(um;9+gIVs_WT||2O;MYvo_2>*x|~XY6VkP z7h$lm63?3J#&>05NG$Q@{_6*`vfy$0Ql%5NEoZan5mWcY2%hbnvTsycn?tcmp~Oh0 zq@}QO6<_zW=hzjvOT(^zcT@248&aLCBR@t7+@{2fLC_X-YIPI!mc~p+| z;m;+#98HSiaJefpCqedApNRZMSDunyN(~RDYNUp6p2XJH8v*1p_C~30#-xN3ql9=Y z$w90}KGMtS01E~+HT_%BL8U@b=U})A)c=tGY1lwK-IuGK^Go9+RFLSer_ISZ@LU0N z3BD5)S8V^seHm+Q8MiQSex`?$EoHb|Z6J5Pyl^+?x`h?m)9ZLv{smaw4qOrER zIDE{c^!Mzq!3HY$mxzR%`g}Ru%H*}bp)hqAX+pBtN}3JWnx5Yks_A)++4N5dSXr!B zB;l>iYH~nQ>bl#cA+fc06=#jPkD&?3-mt&$IZ@pid3=js7hM`xH6qbAVv)ZOwV*^b zZZ00osuGs)2f$xJJ84}hWQJOO$7F4ZXE_SMgJ+K-gqy`dpz<8 z6P&$*jJ5>59|!XE6rmivn)6XTw!iJ)HuOCO>$}{0yYd(NsGDoQ=500uf3ADkAL~oC zLmwvJE?afK)@pB?mROGraAfN#Dh5z6o>tL8GUnp)o2W#5FTAK2qnL%lJ7h_PshF_m z6RiS^lLs0=pC6wYt@DcMcLY~VzlS(Q_A4jY;J?OFkOnru=bbx9ggc-N`( zu`c`l$|Z#ypHbr6pVHT&$~vC+3S41b|W z@za{h?~@QD>=gEMR+|v4?LDOrAZW@*t)aC>D;mIVLAdlTTX)DZ7B#+XB??m4gOnUU zNJcO?uXh*dyO=44f&EI4L)}if4v3U z=curL!i!qEm)48dc7&zf{pDSkaS7wrY>c==mdxyQ?~9DO&eRZsNL}R4u^&ARG@5+k zxISC++uuXOONaD*>+jhC9DiPo<+?{WO(6>TCq1k-9Pacr8Sa37ke?Jj!)5(f67wE= z2@6kWGKAk3VzD`F{z8X?Bl*>gZCs3?C_Y4`#@bo)-*<=V@qzC0$aMF30hmKvxlN|7 zLLJ@lB&54peJ~U;tdf!@?07+;$xu7Ekhrdi21|H7hLEay`Fd8mliX8~G(@&jWVaVP zah)7S7}LBvaC^Q!OFu|9ZW4$35iY%9IwDH>+@5c>9M@;uFGS=5Xlw<}kC!I<+68pR zJwZR;_p`#6(Ib!4?_*o9+-7yZLrIi%+CV2&e@3tF9Bg;Cq{L(v#b-gbKi&71N!A0e zA|xL|B{!$vuQr;XLt78|;iafbbco=Cfz3r^L@iw-!r3^89e#I(*3M~wmmZq(@W9z* z+ZeYrS3DEm0gBGEBV_DvIdR-_COWX2;VF0>gjk(-Yn@uM6ePs3zHx8O;(N`q!i1@L zS!iaKaK7$pT1$yj25#4(u8RMDdouXu?}+r_ncG0p*($--@}w2-0lT+BgTtPa`|+L= zJK-hn^lkWd>Hnx<`#13AH2Se`8vu9pz_`&)ika$+Zw}M_SXUc`Ab!l-#lt?w)uMCv zW~bhbPn!;6=_|5Lk=(t$YQ}P5?r=2lC7}3zcd@+3{iXAAJt2Z8Vgk1vN#P~oSO!z_ zj*rRBmCUMjH%9y)+lge#!!nP)zC^xqS3YkwR?w@ccXykh*8YOZ05g>8ZRt*-IYhC- z2Wz3$rX(DggWs=nvPnW{{=N3N4LipP)WAHLNOGV+wT zFa%6ltQruO{0l#R=qQN8HVp--@hb2VGjEnR(W@#swbD0p3##w z9wTr8ZlTN%$K*NVQlcjK5qrf=M(r#VgG8qaxVx&`o?-RVJ7iH;(>$&KQNg6L^E!(i zO}pzR@p}c{AX7$R7t_0jwUYyXmsHbxbURyO__rsrrJ#EYh9$p2QRfk3+Ne%%(WB~! z-9zdo)~rQz`EKNdgJf77GR55G7^%hrHf%WFZ9Wd*My6QIlK&BB@%#21+)B|e0?=qI zuWTgzdb65$-qH1pY1pWZXrxy~@V6SkTY$!B5V0vtjZGPkQoB@DFyu>vZJ}FI5~p`TI%c)^NlFYNY}Knjtm^aQ!O7P|bXKof^R7aN(ljzGsxURYV) z19F$D89K@jR3KE=piRLQSW+KRxTZ;F;Gl-} z@!Dv_2N{nXq2#E&pF+#5%j=rTE$6F3>>p`%{0l(lC2is8Z~3s9uK1(Ec%)1`r!*@) zjA%2xtpg!1J6XzD#WIwPt3dmj;!F^t_K(hj`^sJ$3iz79vHE(ATvIH$Qe&ym;Y~9_!wK^QKo`m z##oJ)VpTjHrEqNS$=+C3+Wi6>OfcqxIdPo=O`Z{*##kfD=1)y3=U_0yTYQcbU61Iy zy&A|gfH(RlkWJl)RcYm%T3Y1Im3du?ny7#*Je#Nk48e6F4sPZ#?YzvEKuqZ>02xQQ zho+_g4{nzBQ4Zu>=0;mW3=%576NQ?-g0sb+P5B=Tx)pHk=$x_or+Qa~2>m3SyHyVa z;A9-(lPUJ)21^r{N{58rtCI0$DajHL))w4q3_6Wn`v3wmgxv;+WqMfkP-IJ4gEi>w zH0tD6ubxsO>ewu=J>!ra_cfRgdmsKF7o?}LP z@YeoCQwPrz4u0Ny-{1eC_X+pU-Wko(dGr4;)TH`;nH=eece?g1F2Cbfo{_GTGPr&O;z)Jw_!?%^ zaTOQmUGDiJp?B~@TX>NGRE2Df#RRfL(FPxeVrhl8hQ37pxBm=1LX;IYsrB29kD_!$0M9Z^d9!L1=NNu4=( zcuUOWeUI$VX3-LdnDf$%ueLXF^91Noo}2c?qohnNqTKWywl5`UrPS&Q}PhI?+>>OIIydwu|%YFUf z0N?P{6lZ(2@szJp>0?Q`kF8$T5BprTDR$5oO5LMQCcRsTbd>F%PJS&4ME4LceX-9b zWgG&Z*1k4&7HA6#6~a)S#2xQl4-tax@;~v;$!;Yr6CQzsNB-K3jh~gJPK<_r=%{aU z)1|w*)QAYi#vm^0dxe*t{^_dAx9KbB-}TVi@$pzKpKh|G46^{>zDiADm3*nBbC`;D z&2B~6_{d96zFhFkDR?}T*-%q&ucp-uGE_PuI|v5_&_UozeuJ`EHry%c=RM?R%~ycc z9gY1_W(3Tbvc+wEVkE@|zTCQhKYnp@%7zT~MoYZ(>iEu1TRp7gdeSVl{_lQN-l9tZ zu_KF9fgf4>iN_%*ga1iAM~^u+z4geM;&8~zEntiWroI`xzQa@DfYU!bA;+$@e_n~O zSVchDAteJAN5wgl-^^W}i~&9sdLJREu9W4v$4Q^( z$6Pb-@M3z>8jBpV27rIQhWauLDUmWUDhp|)Xqws9{##96e-2bqogc~MUD`9|T*Bz6 ztv;!=jj)}{B5+13FyNo2m>wFLZ5+lH&IF^t?T?4wYn*$AJmi9y1O;96vG0u)Ym5Ht z4T{gyNPg|3=_M_9rO@L5MyI>_?S3<)VKDiWKry)*Wg&SXm6M> zb%h8f8cSL38z14X0EH7c|4xgyYmL~yooh4ef6yyzE>ucY>ATQcK|XC!i@p zI_J!N)FXJ-PkyTV($Ui?<^B6Kf(U-iDw9l1u`eGg*3B7dM7s@3Y4T#wq#tZ)Zc1=c zxvtV8IGIL?>Vvm@brgVXKnR&XTb+c9wf1G)rVXg*G z*#CDzR)9vJzN7Kn&ss-S-zP%ooP|o-Ce=gW+r;_URE^8B99JD)*NT$n;<$|F2lLJ= z{Zk)fVtHW7$GU<4Z2Sce|n(wg+_2)%N;Nw(L6Jc`R{=L0{Olre@q60PymQB$fl-ugj zACTavBybvtZn09Kb`rwtVCeCj(jw_BpYn*Z7CV58QbN2AeouAY2pa61D)vBvpR}sf zsg)-vs31$STF8*mrJQ^q-~S+AiMC;JK}`bgc(fb|!)M86jm;#Wr~$|&8_%oFLgj`_ zsRUF`x0_w?c)02&8YiTXHhkXS#9_iTvSEgUYqStZ?CvU=;uaxFscWBJ9g2Q!cefa? zdESwFIk8N&qAVjq2E;omdzv}G5rABVCpDL22mNQ(T+LGWQ606~iw%;9ij*kY%DdH%KS~IB zO(hY~s;l1GW_bm;NUk$55^bRfjwkkl_tm+~6ieAoq?*t+rcld)6ME8v3jG z96tTySE?fR5-2d!^RZSto=zSg$h3|-L7y=$`Jkua_v6GhfZGY!)Zh(IRvkQHKLY%n z(q^Nab0EM~-)fxR2x{}2(Bue@n?4#!1a9r^AterQ`?~29ZagFKV3*3Qo)InHtkwRv zTTHi07aL1=So?38Q&2jY0?-*uhus!2Jj#9?`JymiYn*7wK~@nz=%R3(Z&>7jRL6!_ zw)MbuNaX|C2>ky@H3>~I0B9WHNj5XGK+M17rS|wMS~DW^sqx&$wu7(&lytP17S-c5 z?Wu|SU&?8PhX{H&7FN$Jb)Ul4f4t7sPCq6xk@(hqnR|f7>EOag?nFaHrZp0V;7ksG z!jZRN%r#SRg5A|HI+%TJ?M28Kc+?T$iBC&dvEiu;njlzr`Tt!QV?p-m+J4v1jOA9 za}NWU_DDV;LqaV(Y;_gSAhI3<$VvW^&GpquvONzu}E%AU2I6fT52@F+RGliyMpr-mnC@Thx?E^J5bB!a*fi*iZJPF-`jh}L4C`n)BIOBXKtCzydh83p{7|Ptg8Ip9P z&Rg&!0%risMJ%fi4*xa?_`g;O^Lw=@kcJ3)7S?SDD^BK+S_-R|1)VXzK|MlXO}_2_ zn*6#d)2%{JZu~)=+1Q05n3*avPEp&bdF~Y070zg!Sn_U!^_uPZQd2=`+PyNVER>P} z|KBNev@69YaNEsi*9E|fd7Mz#0qoQgs*ICFx2jnn=NLn3tzT9yY$iLv-VA5tLKlrx zKP5Y$4GV@gTLKmCCTp8YC&VPRRkoXiB)2_!cAj)umNIydv3EwaF;0jj=k$E^R0^O` znD*r4p*9Zjx>@9kovjHfkrwn2>q{K<(ZyQrlkjx|8BBhyf1zMprSj;fJGq))=n}&qW}_8-!i{Q-AJIw+h=!$gHVL2 zMyeLl>gL=}6?8*O`9(={DpqQ7MmXN*_wPM0Lax4gB%dqgeeK4NG9SI~!Z=H}1M}m4 z9D+|{ZRSDIz>8gO z9q+yjicW9Oz@P3eV$`vuwM7yEx+&*PM4Iafs+PqIPCeRx0&21=aFONMrl+}BNECmt z+ANjr%a!msbp*4*z!get%*&Crt@sl?FgV2P;V_!+=eY7HS>|SunfrmrO0l|Jl$Im9 zAhivvucIJ#(LJ0r+G7nU!eZA&3|P(|vl|77=x2?rU~=O$sblXzwG`uhfTKJ71LA`= z2RP)}pO^yw=$9=)_KpUO^!Lc%G6ysJ&{PcVz&ju2wBR7!-I`CvMk@aIlYC1j7;ze?E zVF1m7$BsOgiUQSM_ACNgqy^eN)9JkLx+{k z3?yD}bha&uRr($o=v4jO3z!Iu_$xn6l*&1?rP{`sfwB+f@kVCEXXR^!d9cgg4*=Nj z)vaW(s}ywb|E~3EfYHT{H*lYeLz)iJ*NVMB=j`#53Sv;nRs)x(nm%n@sV<3>ZTl^c z4za73t6YovFWODq3xyLDVkYIfCM(@>Dc)?k&L;$eNa7u@6MX?7^Q!J0~rHq#oDiI!sGL+;Tt#5P^2ugUqnbXtf~&+x{L^g-JW7Mp(g| z@8)F}bC2IW)gZT>#0}=B>HNZv=nwIIcim9&F-ycSX#Y35#0D}vUz}H(LF^Qgo>*=70LFPQS3+MC* z(QZjMK<)@gJ68`Zqlf?Ye7|w=uqN7_6*X8)jLjnz=@V!j71QU-Hatki^|aC5Hf^iu zK{z_QT$)h=7vttxhVo-xw8t`1j_dms*j}d?&Tcp9&q8a~hJhl^+j^FvxMO6yIECM@ z#<=t3P{M&e-f6%&Spv%0G&A-*%uut?QjcMOsnnL9bau^uO zTw*+-me#}2f{uT@vB8TWAWvJOte!!~c4XQaPvE8gIegIjOLvyiiK;SL=U|5MqZrr6 z@$Rll#UE_w{j7~w{eRA%{R*Bm9od$&7e*H4d#|JHxpv`OzU6WyPy)6GrP!l!6{yc( z84)AquZww26AAurN9V3$6=f@pgdw_+{3u`9g`e}d3Yp~Xf|*2scx|?8f2|$8x z`5qdiGM`ck?FZlE`U1tQTf{y9HR_hq4NB=&E~h;>zsEeJ9nNB*?{2+9Pw5lhF?93t zGUFgkv2;+1)IyB1y{pTHQiFWQQi*G1eZjXY?nI`%TNtFtl1$gaG3nbj)x15d1A4!=dQ?I*4^jQu0U$uO3GPX z?dqw^w&|wn=zR~f18mMHVbj!bS7vdkl%*)Ur_yufMs|swP2Cr_WWWyt*KAP?90Lvt zRv`?eh|ZB%S#H{}258HCmW?Zz9{4PRK1E`3abx!RI$U5n*$fpf{vZ){t_KG{h|?>$ zjpQ(;_ynjPaxm9j_f;$v?VY`42|33xYWlZa^tb)EAo(+cP$q$~hGQ2~n{EOq?>zC| zNbFg;t(@s6VVx7@ljwNlp}_0Or7&FY=Y0Zr2D;eq+?cuEQN`N*L>~mY38*)E4`9sY z(zbz>XA~JthGE=Lc|@}11&aCqaPFBI9`yH;qjiunbR758vCrD#X#S?t3&Fb<%~p|j z39`2v)gJeq!V7bRk)AdkJ%jABx~Zs840e94+V<3mT*eExil#E^JQI{yg*4f;=yjKC zW8R2^epL!}4J*%1%P9V%N&4P4&`Y?s$8_L;YxjlKTN0z>RzPX0>STt|7);@Bj<>m1Q{e7IE2oE=Y66?? z8pIKmfn5#dQAq=Nxp}0}j6qlWlCjQ@l<@>**A$#-B+8>kr3dQ{96tVQ;sWF`o8{8LgtP+AENL4% zKf6~joe=V&?6WbSGBrPbGaF)X(!76Mz7>XSHDv1wRuL&)yjfdpbyrH(6c8RYJFRNd zLK1PY7d}obIea2R0Ehf?FlmE3Z^6w?O973-B)&CO^rAzb5}R8tT!dT!l=rqDb0i5J zT~Jd$6x^q}$D8nVd;XMTvKY$#{2Da4}a2fbcp;Mm@cW`7q#PnqQL<;AT84Z`#8PORU&HH z2QH+GWNQzMEmo~V&sG7_$KlI-9b)t8cm^yAN%we_@)ko{9S$9WCd!yv!m=^``5%lA z4%Z#{JALS_CMDP>k#Xmu;3)nQGKQR}qa9k9xovfd@nMlOCy&Jf$Bs0MW+yVuSgd~g zDLoGC%nJ>{@I5iym;V6SKgM`2?a?WU8U?a}-9f(7Fh;}R^?djR&H2Fw=RJ5lrP}huCiJ$Z8qC0SR z#{tuexC-hEvg4ZuNRm3+);Fp4DWk%4hGk_o+RAb?EG3y-Yj^5lt@lD>Mf3iXlPjOj zS6(KD_jR)hb(Ql5vGY8t~b$m7bm)_q< z>6-~!SdNcgzjx~sIDdHQ6bOyk7QtyD+E2Cs_Rvt5!t{F~Q+8-_W|7e#bzk5p*?aEp&9-~KNCf=BcSmC?BU+E;4B@7wySVZ%*jKJK zJpG{5?e~@mCD>+5kx2{J<}{gCWy9c6u%GtuK-5&W&M`m^T9_pnD;QgJO~=j*T8g2% zk6T?}>`K9`8NiiVP^a6=P-gCw!qr&A#a~LlPVw=vP7e{7%1lVVjZq?Zpgz;cj(5f*BO64cQ4FE51@lbvNepnS!6=Nwd2f-Ddj`D^?vq560-vEiDaE4a zE|W1?wL6lq*CT_#URm?LheE?fiBr|V?R1A`3^mKTvvsvE%|fNE7SLX`>RyK70ODra z{NKfl+}eVG?>D~aW<1v}0aCvap85jF%BztIOK)* zWS>R0^ly28BUfAp`!S_u%pXP3P^Rc9HcY{?%a+D5`V+D>2oA3C4iG|~^ut{@xhX+n zDmJG2+O?@v$1TEDB1S~6h&CqtWp;=jib#_}amo)|lkn9P_N69`jFO+{mna4SGja5I z-8QJXUC#{j9^03fhCi~`Hk&et!b;^Sao`RRu5Xo{bGG=m=~V}Z)-F}g2YAh+U3I0y zN%n=|5_gVb;~yH4D!HOmFbBz)*FQ?*vzlIP)y$ESmpdxG8051Y48y!D|94BmUAh+5 zkz{Vq7lRa1w2V87qcjC{OvMxLAU=6zRfgqW*q0)O^Q-%jm!`Ae&j8Pns)j&ZGKE|uGq5t6t+nU zi>;=EFic@3i>#DS#Zm!ztm4z{M;lBGsMjTMBW$x0sK2&U+H<8S^P445=L#KsZAg!S ziVCxfEOjxLr~>&KJe4`WyL500((C$o)bLfH#_9c_vE$ER{b=uC#J-*EZ_spYpxyZZ1jYJEYkT^eRA{uQl>BN zi33L*O)naL9fx!EzLK>NmF}GLV8c|l;;>gAt~`SKRJRE=-o_|skL&%4>+x#b96onv z>)Y!5j!urf9*glMj=5kqi@1kPXlYt@?>#FUOwPOMI=6r)%AE4% zr%3v7EW)wy-=uHF%@Dx~_T7}QS>Bkl2L_y857Pwj;ox3hQN-l$#ezZx6;#o}410($$s8vSWq zcU60Im&j+)uTdi5?i=x7@u$UUNpHExcH;Pb23PL%X&i zc`>=PaXJ0g`yNr2hLIO^$y#BSn6D4>s7B(-iR@}?);GK+a)o`Y^0#ka+3ci;L(Jlw z>y|QL*8db1zQst_h<>LQHiB5?1whQi!%(_+$7usceUpkZ{k3wZl{L$VakO(Ppsxib zN)tKkdDUXaS;sSl-%kU@{7-$WfAE?zIHq#H-OTNia+H$z(u(tppu8oCi97aa$ zw9#i(u6{@bI?pm}e3AKdCjwsGc>vXe_jT8Cjo0?Kv;RrbYvMwYXzefVZ6uI=6Fkax zh=zE=+GVe@=v_|CgwoDA61cGuX3?vmY*F#8zSH}9x~{cGh)Rr*@}p~FjmD$eeELFt z?ERaj>yCv4;hF0CBlWFYGXppE8Tb+pws6>>`6gYxbUVl5J%!OYi*y%l zm;_KjvqjojnU*SI)ZbE!E*3CwYJ_S(|0O$)gDm&-wR`{mFzwg1@+rA4xHP;$G)(FY zsWQT7SnD;${=`7gV>bh?I6e}*py+B(e zXmQs9#oeX21a}BhD6WO#Ufco{2rk7b?(XgZ0tDyed(SUOt}A=5tU2Zw_xRvRlne`T zXBcO8^=z73Ot1n4+a^vL^m@{T{x$ea{E<#k6G;bs3Vn3A{<2^;^W-7q3O9una=d(>xgX`E$rvEq;e6BT+N9(1X5Mo@t?NOs>tS!=(74c9YPMHh z7*@bwO8D;3+7VrQxIycZsi{ATW_zWhvXG`Ji#M7yT=|gG)OGtbU#)LWP_n(ids2U4 zw5|#faR{e76g6#dJuI-$^Bky2rk+|;1FtM&Lgy(2E9I6y#BWkn^Y(DsaepvQ2^9YN z^cXP~;m^O8{zWRJOYOFJdJ%MyDzy3!;bf{S1`ze^mrJ)QWbhx5J2I$u?S@&Mw&Ze1AYO*_lHH|cbaW!4 zm&Y~z6J@{P{z){P*g4WH_BiGXxI{(ggAqeva{b&FM{=QD4HA1U?)^IAV$UG4TXz4Pb^}7iGBupdl{iL?Q8=q0x6zXTt%So(&4C#8pSL)hvTXoS!`lr<5>j*7=L=^eJL(IdDIqWMi>3 zZ6xBP+%;8L*L0NEH;`Qh3Ks#{cw#6r4>Eeq8U%`^j`|BmPcLF~|MS0zF@??PZd~k- z(O!T|pBT<*#munrlzOA^-|k`G#C=%tMT~=KT~Da6r=CmBil}0kfmRb5nYVe0qx4 zfiPD>-pSxY$=34GP3B7M4wz!d)f7Gos5-`JaL1J#{<^o-j_Jdw+w%S-VmtR!^4W_H zt#v`&`{X6O$Md-;hugU&?qI1cE}NyLrrl^g5f*~?qceV$3~kFLJGpG*eHym=&R8$? z0?>RsOd8)n2T`8u(n;&eW3N*6aY}J(Mm4bSz&WsQ6YBbT>7^KIN`OenUVPp}Oq0b< z*93$47UDZnzOI?YM+{TZfXS|nK3p)QqjoiVvV*zt@h>O>CIv;*F$!xu#FOD+BPdB| zdsPqlg<=OOz!V*G3=bf7zg%3CLGI=J>X!pA4oI?fJLRHOQE}x%U1}^RXDmava+R;y zznG-W4zZQ7a?m5u#H*6!17C4#*Gs|)wDW)42)Di!=tn86pxUZ0mbN}!zRE|xx6dRW zz#mho4Gih#lW0DyJylAflr^s(Zrh?{|LCP#EK{SsHPH2QM!{<#oi?!b=~G524KJXO zIwk9oUNkEu=Y^mDH0@xV0|WpCDHpOtcnA1qA~e}tJL66}Fb{o>o_=ZsW4 zqP-s9uGO{OTsL`CM8qeao)CxKg6V5!S}DBhBvxFB2M;WltxJ?&tWrFsU~O!3W9E*K zn2tCp==6+h4b>Y89NPgfJiBjFp_cL$`^Zi@Xe-L+qlrR@9`g+5Vnjs%yb9v<)|%I1 z&_Onn4uu;9vOSD#{Rrrl({8Z#tfXNys9_z6`#~g~&#oPHw~yXg-rt^);79Aa7W7^I zs6K#_OlbDTcteAi_;)xbV8ZbJtGT>0c=)R@)%erhp!n9yd3=&}>Ij4P0r&Q`NvALk z0w3O>Baj2VWIyJ>i0#b}i_t}t&4$g}7DQ?@laq^%w0^F^>ctnNRrMkL3ap#b`{?)t z2&f?HhFD7wSaPNOt}p`HS$oHZGb;{8k;Dm^J5Ew^Y3)DtSOq3DSF;STV9$hNocJ5jkIeC!-Q6%TxlcXuT|zaIMUb7HfO6fgyl-S2K`(wqn3Jw)>CWzvMdfyz>o zW(EpB5Rfz2v4si{?4Y2p+m)1%eo4MbOHZsJc!?`eQ&cB?jpL3UAUbkitNOIi@;wsy zDD*cAecZCIa_>0IruKLD@!F4^IWLmsxK5B;p&jA0=Ibs`xj48h87*O#|vjslS@Q>%!$9q^2(Ou-@nj7n9n5 z6&jaVw7$$T3OJGP|A}aalSFI%VFX~efi2lLRIqS=*+;{j5vBQDifY?;%Vs@LZ3E6os<+C(=*Ep2A4_R@GhX-L zrk8o{y8?0EGIx| zz{X8z{}(>L!Axfc^6vT}xSlL2>7RHh#_yXFGjH@sWC}yD<5tBsI++;_LBw6f zQYrTEDigqn5LIZyXtI!nDA^p%QhcEJ!FyTJOsQEU8==@_G62_}UR?7t4RNp$A|jmR z-gtS06VTPt5woP$3?8XPGU8SP5gN>OIfGef*|A`&uAM&sPY(;Gmp4tOb*$Wo6e}z% z7`7$@wa2Vn@KX%A%ik-g#K=-X5}7@o$P&-V26}_|l?Pwsc{@Ovc>&@)kV4LhqjG;JBgtzQSSca-p_zQ^>-Qe1+ zXViLFug7Qju5}{cX?U42h2O1}hH@%EXZCCn__nJt%rjTN8h{|C#N*P=a;>$=r`j{1 zu8H(J@}cL(7tU&nE7Vv=ub%*uODwgZ41tjq7ge<+IOFTpwa*Y*hr3*|Pn>9h() zLRBLPD&r2%>ABFt&7@?ebj^0s7tQQ!($|qy2D={li9AnbHQyM(K2_l>ves_yl;tXa zB&KBe7pHk6DyF^hsuCl@*u)~Uyi-UF7b_XLaVMK2R>?n5=8QS$6 zUz(Ppfobahf;zYptn|HFOm6clkdD#Q4=(o8olcfbM|1qzV2F1H#Bg9aP(h-y-d0XX z*D2Ynw3?`ddNZn1MX5@dd1@vID zK1Qtz_o4cu-*t1VFu>t{ihIZRr)NU~UNm{@?gG@wAU^DD6*=4)b?6(G5ChgjxtZ(b zC7(ubN0bm+B4c6%(40Ar0nNYJHRHBTGh1-sKsUScg%TdQ4l@uueq2f~h&R7R>M$Xu zovQ@sQr}P~Ag}9oKA-FQKaZuw7Iuc)30>`Pv{Kd(GCP@ z82dc;Z!+cq+o2km%(?~(>h}UFug0;i+Uz@Wua&P<|DVqmr#kuZae30d1GBY%SqmlG>|f!j4GZ)-|t(;`Zp9wVz=%u1(b0cZZJU&b~VVte&T#=RTUy5 zx42MUrPx2Cw}7>zF#3XihmsSkW!4ybXTU5^{8B4af@B(6o_tLZZe1|%=th(KRn-~+}E57z{#IaMsE zXrVvmV9#yqK>V3}!yoo>=khP7?7XM-@&GS0IX+Vr!kgg75r$v(QN0q4Lv^OlhwSvi z5z+gr)uw0_18moa-oi4SC-rGyM!+!e4|EQM+uGGFCbw?5v;*BPVQ{A>owq(zI=y z*OqJ}PxVWHrb#TTp zd}ex`h+^2Z+t&UA{+B+fh0#jhim4nYsQfb@R7&!=9%G$o&J!Vu^py#+)I5h-8PA)w zV$!}g=p=_1K!%fY26FMO@Y?XA3lGNsZI};nZ{<)K3>JUt&2#A#J_ac#80FfSV`nD6 zM>e^p;4N+B?5Osr*^#4`tRz;T5_ZLBiCU)=TU>0w^AT?#8w^?=(h^(demXGtpZfVl z{Je`aOo%37ChJv|#txD`kh#Lu9j)TY_#SjEOzFYwM zoQLN3u|h2n#LI=UFzcmodZh>kFmY-&FF&FZlpX>yKr5%rFaoJSSg;?1t(7Rl20HvU z8caMbXcOe|8Z=TCX1UiZ0k@e8IfhzxKHLc4MocBUHV(|~_k(Q0W{3?Q{EXl7n|=dG z)1%i2VkrIL-E)~uhbHMsCQFOq)FBlYwv62!8SgJ=mC=))B%SIQl41LI_Q(~OGx;JE ziGO)=Fal9DHTlYAA`(vl7Ly`vgZteXRWj@pe}Df$4}nem7(NYp7-I8zKey18pWJ8MT&RAjey=%(i^t}3 zrdFPT&+tZ%?eN68Xv!O%&P$wtbLLK zTY9w~#)sEzG)o~J1M5tv;w$)b7xz?LxMhU77;uvP(70!$w=gOo8*awAGl4gF*tBsH z%xvCXZsO&3eK`C0RcPQf#DtQ~M#E&5b~N|Iy2b`DYmOgICP0NN;5rJE0^3(S>~F>Q zZpFegeHTCC?iQq znKh%IK45q7gV_yT_$qQ!8NV?2Z|*m=%r#8^KFKwaC9#HOvT(_)s&#}DH_AH!>KcAn zGct^y0w>89t=ult=%&cc2EeT7z>^7_GF9(c8(Qg&eY%WnzuaA)9SpxY86L#;36b%e zF)wYZR@NIS^G=J#%-rMIwv>~k-q5_kNY?qPXsu89s3h4Q#lnYjiuUhJFrlB}^SgGE zxo!{@4uQLlclv>eCMcy&?PS;{FQ|vnd4paha_X|a3xQU;s(B$q{J&+aQOcPM=##Y{ zxcQp5h;8l4RK{gT)1{PE%%Z&U804YJczPpO#JeE#;0~wN_$pT2wef#=H#J2QQ~R|i z>GT)cw7KUzpl?UH0!w~vFc~6Q zax>1=zbc4OR-dz?60wLyiQbp(1p<=Kni+vLq~o*-Eh-#oJwS!-1#B8NPm^I<)@ld3B)@zF=C6u4p%4 zb-cFyyEDk!IrrNddSrOFL7|JZwFgmhY9G)4v9^k3nEws@*m&(+Iq;wib5uD9c!b^R z-!y{cgGr3F#eE*d_P0&3=CF!&QazWHIUwILvQ=#MOg`Qutqc^=~1!VE`~QoKB(@_Pz*ZuGR`4`DqvMD zpx(|~Rsre3l}R700PJTvD|TejOu({R33fo5=aw2?bVG|gscLM>dSQWuN^en{2WTJg zOJA$VldiZ={2?M}^ywDsWv}byAd>R#?dvAaj0e3BWnz4eRmNArE!}`;3XCG0r8*NI z|G>8bDy8)qw7^e*od06YM^_R~#3%kgqc9Cmn|vL$J?q6+f8}v@nexBg$DH0Xm!(0b z0AYc~*J^6l%9Q!f#mAoxI_l%Dn!0i~yuKecEd*^^yjK{6#Lr3qq$*O_ms=Eqp5x$} zWMw2(Rf&w-JXp$+9?5qmz>j-j8oF_~%wH49c2uVzOl~TJ2F4AGw#ss0@>Z0E+sVll z?<3_dBKLr6sh9; z<3Z!9`Rylx3_qZp##!YOve;Zs0-!N1q|bj_5?><{z)?1PC0P|cjV+%OLowW{bL>M{ zG_)xiWmzyt3*z{l#kXYNtz%N}=f(kuE(qn21}Pjv+r#88Ae-V@q$2aCGh7 z?9rC90WMpV`a zfec}}N|zREd#5U(S&P>4B$@e_569@&uY>Dd*UOEL_c@a_Hw$F2KlAI4BImsXbT%cy zN+=4Z}7ihqTBnU$e^m{ONAjxX)*mwCd7On{9hCidXmgn3Y(HMbm7z5-gxv! z*;UYlJG5gy(>->IHcsj!V6D-l$i)fJ^N7d>l1}dGb*$ANPX&dX&5b~MYIy=Vyas=U38gHJ!r7FRYqQ8&w6`QOj ztJJ_6H@s}EB6TxlGKkdNy}bMDDn#%ctGQ9`K|S!AE4s6DH)epTBed=gE(2;g-}_01e9fL?rE^<}{jkhem-#Uy zZ9s<`I3`0IcTHXhxnGVxo?oFc+}O0Fq8GNF`U>}x_I0uiV-9Xtm2sv76AB-p(Z;5) zwUGZXEHL;d+S=bDTb*LnviPr6MhyCk;@!01{z2tZ%o}IcVU%YO%M!Q$)s_!|t+&r-` zZQ0}C%kQUVu4{bXO?)!qFu{-Cqs(Q0$7@ho8O9AVA+NPSGMpyzTm-TOb7&A-S{SLsfC>`8toiN5hApeT=RHdQiuQ+H z$Yo*mu)p8t))S_-bX+`4CR1eLi(T=>^^4*Qf=z8)eZnD-OIPyOLuq#}tese+*4HN+ z?`dB3g*Wi&UR6zSGeGtR5u2_Tz_+ni#*p#e^$~CvYHtLdinLVCS`ROFH+`{cV=`u8sI3d9gs?Q(-g=&&S3KkDcm*T}^S9b493?bwZ1T zkRs9|Q$---r@d_^e2Z2P`uaEEHREaLj+E?wLqdb!^F>$ICi+OP|6Py+$JvH`((kO` z^DjufHV3lts16LSIaL6KauP^E<|WO*S7V4`DX_`lP@!6MTl&3#I|u0><)Iig1KA2X zIm1T23?O%XP|-L0^g0nw-ptLuy73}++^fdz_QYImDgo)*Yy+TL!%awSy6qEtK8zg zb)RDAOLf(A<3pL_PgeMasZ9`7#Hnu}iARk`hc6}}j}x%0qxoFSvz5c0QiU6s58)Ag z)6dnxxQ6&*aK6eQ*9|yDednz4Ym>dXieU^OH3hY7Jx_==kYBx~-1; zwK)pxKh=O^ompp+ifZmsm@2|0$4_+-WyE4a57F)ncx21JLkW5s4C;aHkv`2sM|DC* zWd99-h{6n#RmJbKH(t(y;%Eb|R@wufF%EVB9`BB?h&KYCak?=yKif+QwQpT+;owE+ zqNLsSh@9lx-JKWD?^G*TkEPQ8tp7%%{-(hrDM<1IGBO=RP*j=F{VF+WDH<%vOkM&0 zAQibA%M3E)Zlieil5+?2?A85jLQD;Th*)boU8ua~-sKi=4b3{j2)5qw7y|qE`zm)Q z8{MpDgq&@EHAqM_q|(T(B$=3S_Ja&PF9^1(IK1WaBrMh()Yy1ZLxnyd@U&bLNENhx z_kV!s!u>SU`^@IQL~9$^DtewwZ=D(QAA@dRzoj!qQ=0IIHp*1eVQyHN+A$Wv)21YU z9Up4;`p9>KDi#YwHXS4Cz?8+rDy47DMQRh3eiz0e-V)|VY;S5B;;Ih4UEc5o4>jFx$mi&SO@9g@$!*uFcWew*T=PFiw$ zKY~Cw-9AinNKMK=IronwJgA#Ww{BUlqg;f)Uqct{-(oXD484b5xOK=D2S_`LshRc% zt(yv5p_XFGzlit22KjaT8kbDzh7-Q3jgw5-@##DRSOifxw3qfC7RJ0)WLANC{R z-F(~eQcW~KjToy%$oyZ*X~W@xRNX@Y#tL%sA(s`QXd72<@EW#JN0V)q0Vc$KGWG&m zK1MT&FT&ukzPbqhd$Y6bUA!hS5YF@$sS^NU8Yj1zYU|?~@B8W#bkAMAVwlNZ^~IL$ zV*lx{nV&K{IY+#PPBn+F1}36kmEmYWFT0T!OZoh(*Ph&@S%H$iKqK(@`HO~`ZutWvmqmN6burogeCi`l@!m8 zpNgNHam~(q=tsUddbWv@YT*29xcbG6rcl{#WGavs?|)mU>wmTHnYYuZA_rAJxX|)& z7cp&(2~58Ny!y9SU;X*}JDMHo7~`;<#TGcN6Jsi}fxZw&b-__|Bbj?Emga=e@b`nidJCbGY`MLgECP z&6hd8OtbJ!qb7?(bb`;jdt|i5azFg>z|oYZ0~LTJK_w@C8KYFx;*o)lI#v$sIw1iO z45JG8qJ-{dh6Pw^O4 z#;(6;b$zDdvNjvOYvAkayM1&Nb(4nptY(X2sdFA(5FFcJzOF1h zIt|UZG-f$lXzxPfDc2F0G+d%KEAL1<{cyU_F|RPbG+A{6_O~0d z1Qe%fKXePb;A$vjtGr#-VLnkX8#No5rqZFG;kk4Pd>=a03U20*4lg2h=p z#L;yZBK}Y)e*CryF{7jiEM?=)gw9Kih1~UQ`D}am#qA_IvN-^yrM{`i1zz7L2;|@@ z{Tdr18+U-zga?SBkJbGL*{Dw{hhWjT@u^B;_A~0IJ-e>&(BIiCx5%U&p{Xd<%ZB+{eVRNDG|?*=6+6{v}%cOqU0>Em9fk3 zCX5J6WA7U33%ziI|Bf)b#>2?RdyCm4ef9-4GB3{83^g#7U`mehY?L7dNw%5jO7cQd zD|(In>uEld)$bhUTd%9}4Y-M9L5t2KlV?N*0FXoMH?&X^1%=nn#JV)AVn|#?v^g6- z1_2an*;F^%;6Jc?c&MPNJ4u2?c6z*#8RNBqZnk^!ykFFg+SsQ*3)sK6MMk+MF^xC? z33!Bg0at?K8OO1oBGV0HFxDu0O#{)AP_X23VGarwg`r$(g8*_7q^Ty;AmNVcwlVU)T{b$)ds z|Hxq#xj*2LLfl}qk|?>vfpG_$2R#Opr7KTdJB?3|k-bjs~wfdg*(%Ia%GiG4?80yNfGHcnE^G~j4BHEQASOnq3G zW80~iE1&q`!Ze}fr|a!u&}9Fl2Qrqke@{tRDtJ;ThjE%n=nC-&?@?Q6?87LL=GUo) zr5O_ibIa>F2f5uv>e+@la=UodF;fiqrO7a=fM}(oupeWB#P;mT`xpPBSqZY*1k;|? zoZeo`UvN8~p?bYb-McacMyLiQO+Url67)aB#r^M;uU>)G_>V;qBN^OG+BVb0kw{t; zHCkh3c{%?!9$%+q1cSQOT)S87Dl?MGu2ZKaa74N%vAOtf!F*dqy ztm0vPJbBIRfDuot%y*h1n+6s@obs^EPuZ3rQx&#HMQRmUf|)WC*M5~g;{v3!}-F19HEsmpEzv9Hab)UgHZs7m9h` zCJr2}R&)X{ZA@pD6*3vMx=TYz z5TWK_&n1_2SFvn?&?OUL)Tiz5k)&I#nN15nOR|=%&)jFdJBhyc$Alg-Ss@#xMNG_B z@Yd*~VeeX4;%f4%c;r0teyWXnx5)qLjOL4{^T_i2xsd7zK9PYONsck{Z{g@2zczT7_jeYCZAt0OaZ zG2_|vf=`b~@Ip5_@TGRIT|Vh-h>o+gf|Kn_8X?t@66FIch6wuMT6#d}qzkxi53u65 z23Egy0YZ96{ocl?bH?f9Em7+|PI|hAp7xV@X#KfeC^~zapEEG|jTuldub|BQ9T>VP z|LY(j=(g1VelPEGzdkB0jnP24{T`S=wI7wLj7b*oH!R9mqea-<7sZzznhAPZvW+PZE_hs!~~dDB<}a`mnp<$_UlFC)kGh7-<2_s0kjqoY@5i zNPc$86ri%s=9!#x&`K&y>69e|e>>HOq@^9aUMc#$IHS_OE)@GGOxZr&n7#;f2Klqr z2IeP@Tmei^WV{%CN`L%t4~jhPv*olJM+b)gvGb;p(Y=a8$7()s!5CkWjan{u&;KO7 zXK7@8gsS^dV4{*gZ&@}I%hwPz(npm>UDEd_Z!KMlfnPJ`EC$9@6b)$!&s11`j#@X6 z0W)|N*c%Yv$sk^%A#T4m)0xJiLYi|M&$9tUEh%RSCjIIC6aj00LW?+=2Dx1=oMq zHyKn$nO|?Rbmy0iNdSROqa!fxNP>Jr4jr`2t@iRmwBubbXf+wwT!RxS6neG?M^iz29|7Uo@D3FN|}|51s`NF8V!zNm)rV zb?n7WanA7G^1}0B`7<`_7WFNm$=r|wpXjI4iNFEzXU5m>y<8VQFUh58jMH24nMlQ~ zv&%t}EGqQAmF*%c1{oR>bBQpiF(mIm-zf=74I&j-;>b+O2*2s)Fl30o(C(>%fmuJ{SwjyC3b>HdkE2S?HV)g|4nhPY@h z;GPr^&*}`bHsWVenq2v@Tw4~C1=V8qnx;vlz2!elMVVqnyPBVhXj85u^%Azktf zCfL~daT1UcE6`~Y)Xb~DreY&9Y~ z4JJ8DdVHit<6Sl+Jh4Jt&7}N^zfKWJ8q_&PE-&fj_~f}uTG0FeB2k+F7LTx^oar$y^9C)p{FRq*7z5Sfof1Ex@$GFJ z@%9b{>bB)s>B*h~yVsd?H^IJQ7q@G=PcPz60b14VzOaQUzoHbtrH2fPTg$WoUb%DF z-apJ7U(9x2&%U=-l>jSEBOZQV%_KhDK|)CiJE4pH8CrLt9N&kML0Df##0=%Wz;Ct{ z!gZuhgVe%z7u`D{5-UIL5l|^QpRASW-;*JijMTvfB-IO~!(PSqzvX2zq39{^l0MV2 zL0wm>H(3OLw5By!8-b5~N7vy9xrnG6g>1P4nb^I?8Qu1zQFu-WsY5iUer@C41##yp zu6DQ&$wz_y8=F^t!ms=;v;h`lvCCEWOrCy#6<~8ExVu@AjRjJ5C0_m?2VGVHuj`5z ziac`V&kClA=>6-hhfh0g+lDfEh89~gR1qLepuR$O9(#qxFVo_9wIdTqIWJqjY}?{R z6LGdX4x(>NJXme*ii64)A|k2>)>7yVnFLB-N|35Yj)34Y%5kYTQy7EOrh_We#aexj zqO-FqCWTfq-biUCB46RW$Lw=IPNqHJfMeSE=5NZb+n3ue-AWQ?oDKw^gybFP0}3!3 zmL*tJ(?|nfMrzVaG9m^EKiYH#zakBsUx|g~k3Z2WJ>rQP7jw63 z2f^2e1`gbHzoc|5vW0c@J7~vrlrCdxJeF9*jXrlMIzMi=ew6ht^&YT&7+>wo3nX56J?OukDA%`Cgj-cWG8J33+z-6@RfuP+7b|XQo^ifHkaqSJ8=Gb=iBh+2 zg+SrvLC~Fx?fj}RoqByeBV8@3V=9ssbCGuZPknMymGUN24s0W7X*Sb5pXvFfZkoTl z)?7(x3L7=({Kl=s*)cBJR4yVwN&>7H2d>6T33XAH#1F2;e8+ok74pab6q>XWh$G9j zw9F(jcmT!RU)upvp@&tFuu%2LU?)0v`VNZU7mDw$tvDle$_arnyjcqQBVL|Cw+8J#C)D^P;|eilQuYizuKuIHn`5)`kmf-WAE`=3!scHOfev=q>O@935XXARv=5q{a2_XnxpICnG}LO-`-BW+r$=jjU=a4ddn zs8P8_H{;_&@j1#CjE!1IEk*rX_Uxa+nT!?yX?tP1cs1zhittMp1O$TsO7A(MmXfV| zg_%Wa+5BC%cz?`Cs8;%!%f~$rYGS?8n4VitoBO56kfC8sgRVFfmbi9-!Nh~mo^v_6 z3vi@$sH&Q%8SuxBt9$CMt z#(jqfdzJHN! zD>IG(1;^YX1zsGW)safk%jzvSc<^CR?PqA~xQ$0j#Fmr7Z*T=^QP_VyWqluTk71}o zwm`=?pogw^UOaj1%~i^Y-R~0a-z#A!%=+!E!J4WT0HwYRVKU%&rJY~=HNJtbIHrL& zs3WOS|6(ouk0S%dn{9F05v5$tCSChSXDM!LdUz!b*xg(cg#T#OJ&n@fyY1T_2tvLC zeAH7hK1{OjodKkT0& z0glDLyDZ-BLLI~^dKuhIcTYptzDE*9DD-cYjYo%gHN6oCV%Wu%A6ZRzUYT^Fkmts5 zVRk59R0jr8-e%4uFV@PH^CJ5Fo4ACJy@RxD|ux~=wUD@OKp zulh$5>vgQwJx8ddNO?h52}^d0IN?7 zOMH(V1tWg7PY_F6BMH`^aEN5ng&VMWE6r&TI;F+%Y5uts|zy&Gc!#_ z3#9R-ef}aztFg0-zTZW|{?5di5~oQ0Q>|Lz20Mm_zK#6%OT*NV4+t&y(labH_Owf$ ze|R&(prYT11{xCC!Vs^3LQWk=ltCNOK07A5;l&s*Aq5zz@*Z|3uVV?io%Ui=Say% z-Al@H-pjebI&TEd{E>uCMc2{8!>5pGE%5`+s6)wI4L|^^At<$7rh2F+pv>d}X>o(n zn3t)JFaXNW4*KS9nvUB>>GeT_Cn@JrRf}!XAP3dBW@Vtx2+=Qk%lRwG&u08a$M$}3tQoyp6Cd{oy+k?Y)1JgNAWBR1rAb+lIP%U3{l zh0kA{Yv3SyZ+KnM>jW?nyXV!Zb_vc5j^pThh)%*{{vvxNrGO}&L7DvWHsqwpg&Pl* z76~D#u%y`eE#jC;qwhL|W!syPsCuOsVKRq8jS8VA+@L_{+^-*U5E$a~9G2rf_Oiz` z7zXg7n^zpE!%Cq+g@si!2+FF}(%t?_69WI>nvGY~ivr$8PX-epTIhYOjccr{459`1 z<@PF@OfM#0uk#qj{RiD3jLqfm0~zivTUahJj~1Kgbw7#QArcos#`NlJ2yjLS3f_7<`=f!G`mO zuIpR2056J>tJvm&-V?&@6mM0ikFPI%@zBW(P)k?A1fO@;Qvn0&32#_|8N+|+>Q45E z)rd2d^n3HaG}1azQ*J$>ye5@%9i4 zh@J7`C>oVRub9t4@de^w^R6g=Jbb{t*pg;=jI!}(2%Th^qF?$d`KGe=eLd7Bm{UyG-36+=YB(6l)^< zW?ST>F0o1Kl-!fvd_2D5C&h}@QTE40`}(*tKm_(;J<^!BM-MOLe&=DKO|*YgWG?gZ zS@)bD2#rPleELaiYzV^Re3*@1?LK<_V|!q~w0Cm$R`RlVK<=c!!*$l4Ltu|j?rrqk zj;B3$aoOoaScV8ivn$lw^HF%&zH9w7mhf>iVJ@z#UK#6@ znp1Ld?~Y;&4^5N6{<9&x5t9-)>9+c9oYN#{=%%8H=kM|m`{lD9RZan@t1?HO;Xb*g7LQ|sVQmw0>LJm z7n>Q@nwAfnmrgy!eV5lmjrxBUi`1+>oB-S%48jN zXX|c623;b`Zm-Vx0)~h?mn08+{<9sKHQ$<5(NGos8E=r8X9Sk^*d$*P@Et$D1 z#Tj(Rc%4u%T)w4c-E0xBidGkL1KMQDa?s)Z9vQsUrTm{WCiDUrE8Fo?|qO%Av`iP)8?pSLBJc~{&y2}R;uA@T)^>3{>Tye9+z=%z|3{B6@$q< zR}8zZSddcH{q#)GhOO}DC}X6=jDst!`B~XY*YgjQH5+d+L;J=P$92rEG| z^UVb2W*sN3YK=XYb8l#SO~`Z{5C0!YXZ;ps*LGngq`SMMq@{*NTDltqgrU1zx)GG_ z?vNNdq(M4{9vX&_98&6=_j~?<`C*Rx*!$YoTI*bzK0!g#H~%=I5NAG~G~P^fBdC6! zA8e@s(2SNAnPy1+?ZRN=J9zj-BCv>H@>o_C-NZg2C(TIyg@a@*WkhZx^6{Ql3!{!f zE3JDe@X;h6!&`&@pmF25)~1^_q4Q@Okv;@r@dk?r!$Z)+UubCbx&<#Gv7JZxa-?nVuy;#`g z!D#zd&aO{}tCLSA1h)gvJhjQn&yZq9ndK{A;#>>A;#$S=j6)hTt4ay31oxt#e6Sii z_N7g18)X`jRsa6kMe|lW5mXe8hVS zA!H8kZ*+W5UX;d6`t|sPEoFzbbVnL)`^txbTZ4g=T)vJ`<1NW?VmO>1qC6tI4AQEX z4Lef%4Fy|nC-$$fxTe**jPud7q;w4aq~1+CXX1n^SQ+T1DeZF;tyhozz*~*3`dC+3 z?FHa-me`#>FpQTV`PVV8Q#~v(-#v9Zg(qE<>fhWt&*=8zz;@%QcsYLCxBBe*6!+h0 zpY>9Olcp<=`ZPPRy`9g#zrU&8?LDItY1ZM19Wy$5O_6P=CMqjp!H3!~V8eTd)ktFd zoGO8f8#LXMf*yG+9O-rV$RawFjlHxk@JaG@|jN6p!-hEnDt7;Xj)K2*o z{3_1u%m(DnE)ukOfrwQX8FNktz)tlDKSJf*BVPVx*WW+=R0AmUhK|UOba3t&XUt)B zyY$u2$%Ln;M>IMPKf7XYx-U+Yq)uTC)TQz^O>|ieD2NyY5$@$mI6HRf;^`=EZgu;e zolx?(Q2gY6wg4I)~K8$Y-@Dyhj-J;yqZdPhNn~f5u7F%hnwh~Cg7z~ zW{m==d{H?hZt4^y~ubO^t7 zPtc>%hiT=enQJLWierhlqT}O=TKn7gqt$}nDY4~E^YR`k>)F>Z(p%L69?zyTu;FMb zK_5yL%!V?nlt25~cLh{f#NW?9BiK*vbzBAnTCAA*_}oak{9?zzf-9skj-B{Fxu?5R zm*{yYZRT({B|AqluNTm)htlQ(VGG#%_+1ZF0z5=~xKaoo#;+EN`|zz;)ob2t(7-K2 z)ksi7mqhcMNBDx}e-k+hIm&Cb!CvmG2KM}=ghAG$;KT{aJ9<#QxFchGIoV43`RMB1 zE6v~QjZgWU=Qxk8uLw6_aY`v7o{di7IX+i|JXQ`~0@4H(d*09Azb18qT<)Ai!j;)$Ar>8cd4j;kkOn1hQ%uq{Pofbrutr>jHJiPz}p; z`YO%}is6_b3j+wG(Vc?pQYLOX-X!=6-`wgp6?}=5#uGImUbL4L4M&)RZSaAtEytxoC#e*>cCj2gqrOWD)ms_`c2K8d#SIK;WgAk6&&z3b5}LiWcl)C5M}k(^2(D!?*siO! zVad!~Cy(g{MZ)a*W8RfI)vSfuF~kbiH)M5w$u6j*cRH@Ot{uYbE;6hfTHP~Z+w&`J z_~<)*w4IF0R5y)LN2X$dKf*&fnm$aaHt4Z~^RlJ(uq*Mv%Sk2>zT~`hSyJ-;UjG8E z%;UWZ!6ojabrW)fu)WrZwA4kw^BJ23z$F@G@f0~G;V?YqgOH%2sq513-3P4vK&QUx z@_B}+`H2?J|FLWmV%_;ds)<&c-d!mocHHFB~bC&&A+X&XV7>oPg4Ek2&@w^%K9 z(Zk~*o(K0X1vM0!4pbLAXqTg~eGV@8+jWG%y%ABzgP6NlhcQ}eJjL*0_B2O9i_J@o zmrPX0o&r6DRk$h(r{J!xcqdspLqb2l^Mi*@IhRrU2EdSJzfTJr%OR%ZKLLX z&%u73lrNnFv~@>UY|PPg1kTS$Uk41f-@~1+L+a(TO@dbXN8x7f4Cp(;8a^XUJutP~ zSFcA2s@j#;9Q{SgTF-j6zl5AyRD4hl=$VLd#w9nj3$JM8Q6Xt`FL7AnD)VncnwG$h z?7U(c^*CMLDuz1Sf&&57DM6ezkF}o`qrqFoqHqAuJk`9`@zQK8hC5YjQNkiZZ0*e>VAji+A9PmMpCntONXSAFpd{saWSZqzz|}eTfW;- zE6E6r5K>(fCZ{k6?!{&pgYq{Kp{izt&JZp-Za0eld`cFg^!8BTHrJ{H0`=pF;N6X} zEI0d^#sY(A?pcyYXInw?5=y*Jl2i*0gTiI$PTZMKCsiNw*ktrMq18< zq{LQyfH1rF!Gnf1*g1M7%j+&8!QR(i$c`qo^wdx+oeAkcuSfg99%dP)1D|hWm^4OI zX?Ozi?1jG?99!Dy#1z(r?1x%oiM3$w^5Zvm2I=hw>3WJ9T}?JLb%dzsN9IFzSudWh zHjJN7B8$2YhzI@c4RlV4DX3KbIx^dHZGKT&;(g;!(F?Ro=w!}t9bq>!0Hc2yZ#h99 zQXjMWy4GR}xV3g(^P?lKxnXZ_tyh8GVSE%R|F+A#;t?c2W{}KjG-} zC27uO(p5Oe*Ux+Z{N+?)?}YjO+FiY#QZ3mQ;f5$Z9NvxOD$Y&Qu`e6f8oGdC8>_4( zl?7e9<67uwbW{V>cfIT-Yf{#lN}|iMO~b3pjz*dDd-^&@8$~a#uksolftiIsscfc^ zY!9YkGPDT8RDS1_+O5#7Zdc0OlWA-DlO;!K#S`M;R3T~wR@XpZ;JE!45&KCdw)faBMSF$DgzU;jc=bOIv`I)@jc&HyQ=Xh*sN*h?&eG|K3PoXH2P?Gs0au6@i4N4!==Z1@3(<>OAhV?-^aqFn zIUVwG7`l&CH6ZtH&YVQ+P#6;y$>}&eV$ZEhGRN!ADDf zX*K!1ynWxte+!|FAlUQp0h?>mj=w)T=x#$Ij%*~WU(v;eqcwCp(V^~RY+*wo#V0Xm zBW8U69EH~UUpoxeY?xhli^J~2+xFlYEh5H;G2AU;AD<^AD8|xh1iX{3#qrq?vQwdb zWH;?pT%gECvDTuV)_(~vP!r}JV%T7g{8o5um#r6--@3!9rblRh!ZH4b&p@H=0}=`9 ztX8(gyDf_s_xncoNjsc20a>nvEPu&nRwPD%G0~!DF-S@=#L=j7 zHKQC&M{SbLaAKYqAijAr)HPa@NYRsFg@bmmdXt1O+%3J0{IIGZVpmQ)~syXdK_~vFluSpYQAr{aJCwPf` zzk)Av{!2pTJXOWw{x!}G@F9Ubyr#xIoz!V-tyC63Y)ADOZW2=fv`N{937wi~?AyN} zg<3Si5wH8y)Od6NwVSsb)X>RR>&eWmcXpOTLw5;_HDW}e=aH3L9SF*Ug?+9WLtTwo zuAfmu`A&g_jln+(f8ceQAX-6l!?*k*4O&02gh}tCvi{IpvrL4AD{eQ!W6~tMP}*i) zpVy}eIB||+N|u^t8Xn+_(wHg5y#*oH>uFYO`Nf)s@d7QY}wNR=$7Uz~AQl2@|x6<$3g>I!N-@l9T@y2s6+8HIa^4 zSHJU2xwrGzdGyxl%_Mg5_GM)Btd|j9pR(s{Dq(z-UbW^p_r!IY$%L*c{=LQU z_gbqfPaeFX?d4i5VY_e->woc8g_X5qbu*Z71M-Rkyvla&R#Xy0&q=Uxua@As&y&Ay z9k<5g<(sg&|2e30*=V`Nl@Ud1b@;I!SudP)K5xI%iL8>8o`ku~wtvJj{3H*^=~J>& z_;pQyb3Ee2k6(JHC8@D+WvwMyiAh2BS6T@RTuE9dt~*KXeZ_gD3;qWtp``gME-H@h zeub)t9y6u_xH*VfN7C42sG{T=Cu+B>0okWZQp$80m~AB;U;31B6U@uRHZUl3I~oe) z{Ju0F_Kpg0SJ`xc;4cXQz25xTLZxT&JVSLpn|46W+e1{*`u@*wrG<@7M$@g^>}QaR z3qbJ9WRSpyuj|}Z-jroO7D;w59w&sf*mb#?tpBrw$4msdwzi&3JdM#KD`#X3?1A4V zlsLvI)Xl#~L~ivAhZjDt1pfcY?P{+Sw_Sv{CN z-e|?-6iL6`Clty{az}{im?T1-_4Ojvqr5Oi|GkXM0c%QAWs&B`l!}zm4h~4^dLtUt zcc;+=4UXNWs`T7{xPtdvCzJc&TbZY?-_wtQ}FAINQQdFRwLgULu#N?|G>=TfHt$xm%C&-h%tA{xK> z1;)F??^R+w;GY2NB`UMs9p~od*UW=jDdBP2N{jWNPJqV*rE)@f+8s%#`5K5^ z;JmPv8ae;t^b&K={ktHx4=^$*q*=x5CM^D6rr6VS}U`m;T2jW?w__|GCC$1d)B<9ZCGu^eo9 z?4~ek1!ok6UL(&oPJB`Ur#f$XkG%}V)6+2-%n&OhjZ4ZR=4gg@-*Mj7W*!LeeszQ# zE^Vx<29l~`paVT9tql_@-ius#%f`;^mS!nD!ZSp2|4H{MOXtsd^Ky!pIIeSo3Y%2b zr*E61UPbEWy`|4IJxhPSpI{GASmCKdJy3lyX+G)PrADg|xtbwCN7IHzi(k2Q7wE*e z_WSdUuv^Rg^$%Z3RPJO;aSkCgg7>&DW`T7M|CoI+uGPX_A^npXjVYzf4>oLb&r&5 zbFnQuHf)JVA4k5J&?;$;|1LFFmIv$0w5Xo{dycmIb-}P;%@_XP3PYWiTC;P5(*J%~ zKA^LxC=r^z6Pj;At)*Hv6YNMeeOgEF3Q>iyD@2BM1}?h#kW$R5*JHg!W&!EspnpQJ zImxytyNM=&c32y(%{+I9F(=i0v|8f~xC9f}W(iI5a%OF2cuSpaZ-Sgmcm!&&Ye4L% zFj1b;%-w+BO1~D>C?YGdN^aSO9|IZQXU8U=bsv-zbJY?|DIG;~*+7&WI^T&2(K=@y z8sfM*cQS@qSH$}tI*+H6-5+{oBcGb@c23$<)>zRoVo2R>%-bMAGo>0$nM?{0qOtLN z<&DZx;0w7t$H1e*wEdqcOiFA%;+Kf$_i^ufsR| z*G3a(76zOZ@Fq6vj9Axa8PV~^UyBJd=g=Q|$GRD1@I*B3V^);O3lc>n+9_F+*PxchyBxoY8+Z}^uEc){ib&%dadswvw+o8`haglQ&O=K1v8v(au>n>)InK$$b z3wzryb9yXYU2;}k>l#!mq}FwyD|pwny1C2r=u?HDU4hXDmKv--er2J{s1!yGUj|pDdS6Z3eC8n`^3yzO}f$n>fis@?+3w+*dqwt z3ETM!%$ujST+ga}#ob){+WM#g?xD`v>Q;}T{nz=-pC+YB6CrfN7E zNembo55>g_rZqIgS#p$DfNtLPtI*m`5u|H;ciOgYZWhpAV>W2>$P7zWDGB_w7F_N_ zGs<5~l%w=mCN_mI81tU`y?pTf-Tm#p^;7n1>Qcbf z@#xZ*V8?)8hQ2*4;^_7Lh&+_h8@p2UZ89!}kB?T1;DOQCzw(;Qk%??`pDZCd8B>}6 zwCo|i%I#^Y|LSLc%a7c2kj;vzKo+IF3G|d!NZ+pi`CsDK@5E5XWo@{O0q07bV_>m- zfRCp%W-&LSo4nE5Iw{t>u2>yNruFr#R*E38LSqOwmGc+(+#^W;Em^KBU3R}~mJ6pw zi_|r55nh$_U{*gpw)Kaj-coE4%mAc@Acp^vKoWvM(v;M`S8YnNTD2YWt)IExliC*t zUWS=}NNVuKrpX05ev&gD>+YSt`+n|bMIJz^wbLQ(!KSQb;oClA80loRC996}iFRpS z?YZ{==QCHh2O(*sdJLe1)ps(N#EL8&<~l6o&Q5JqZ*GKG+B9!`68+t^uCuz~KG&Kd zcUeM(SBQpP&EcxX=zYX!BZq@8qaXm~=cu!l)f%yBUcSww1v@$Lo)vPZC=lf>*TUiW z$*+&L_H3Qc@m5GhgA|v4uu^9zLP4Q#20P-x#Y}j@2hVOSe#d4#{V1u8J?Z3+sBZvz z3ce6EaE`F{_iU$-hoG(KK+61CIh_IVN~0r%dc05fbd<*EcQW&5Ry-CVg0I{gx+EeQ z^BryyyC8ma5XsK%-8nv5DHT_Dr?}OqEO{E8dC-v@|8O5b$NJuoSwImH?BXJ)j<{goI_SyPe8rAk2V&v zqFD*cTm#8#g`gkqOe&S-6d4~?V$@MwJHNQ=)%F@svd{TzRksMw%ven0fcvZDKfT9> zPEh&`^0LOxE2fyTh!Dgr*trV}w_+$P>xIVJAYfGp4gu{cKu+Orp!3SJX7Fg%ETc^V zBiC=_Okfv5V!djPgwRE2@I~uGb}&?8&v5f2+YgR2TTxrpO-;R z-a?p_EyBpHK2mQ;2^IO)TwEqVGxB!!V8cc_`#VG(Dje@mvTGSdfdfBrbdH99#W)&W zh~G-j)n*q|4Z<^d&1_c(wq=zdTl>lQ>o*1RABEWJ#4}hu(l*5#PTj8`HJdcBTY_d* zgBxLZ_30$0oYNC1S~RVzP%5!g$w|4Pm+93SY-!M(hmZJF`KwyWePBZ&%}DR>|K*m= zb|0-BQKJ3TN>M=)8mj z&`pdi_iDAs#|K#{5)^&cJ&Yc^(_qQ+M;d$Hw53sRb_$k%T$Dga_E)mN&FaR@dhXN` zDHLi5oi41vY*xd(B=4|VpOPnC;`cGnvo4^=s>{B*a@$V-65Qt&IR0?48jrrz-|C#N z-!f^K#o-PRb<1F8|0nkgm2ewCgKM^?E8-Y;W)RRZLXHMt=+&e$jL#;@VQ7=Y_Ikx> zDnzT@J3Dl?q$J{J%$HQa%SZ6pwMoU~H^L*&y@I4_%EVtm+C>)KKAPq`VuM;g{yiU~ z?M!&$b)fE3Cq*|Jn^5-Am~qNkbtiJp&PL;8hh1`NB^$BrNL1gqo*O+SXKvlLeBVHS z173tPDK zOjn+8&_q=+N3*h&QVbi~kLPT~-SKfezd3Mm`gj@hVGW21M75PKJq-{HCwcy*6Hl85 zlMD?%a@pDn&uPuoudiC*fS2LEop|lK<$meqk$|iy!u!c_B5Ovo-(r5PdeeJiDuZ z`1k43Mp_KW|Gtgcyx8*0^M%MLB<`1Xjq8;~s4HhTJp>ESetOc|qrwv7i3u|r^&zg<-ciT-q~{vhr* zl?>;O*WoY)RNqoTO4(hn3U6q<$7lcfR(g;!FIP5E$rW$t0 zbef@0h)c*-faLv@w3UyLQs|LHcgT%SgUm`#k;4mRLv$yprMd>Z2eh;O!2s$Y77;Ap zW0M*2VJ0ADwT5oOV~1Mfmpg~(RO?#EguOKBrvVHQk#?ubr(m4PPYNM~6IMZM69>O> z{PFm)7v|^vIZp`azRgRHDUN~0*G}7AoR+^W!*&B`J^TsPq%7s4*Rj+w`J5`&$@~MS7jQkw+b{S$G;L z68xcun#adD$Xbf|MQoS0_GHVP>Z0#2*UY28?Gx9K`m(Nr>fa!Dx*t;X!Umjn@UuT1_UagRW{w;0a*d736jVrsl_!dw8P$D{;id|i7`S>=_ z9%$ACc3DdQDB_jYb`4S5fH@t zU(QD76&f(jV;nP?)t40cM_oR1)oyTbd3fQn+*F^GoTp99!|BcP=Wz|5%;u_sNpCjP z(~s9dRmXAitPxdyB;sNLdPq^_Rq$sr%A1ib{YB-nZJba7>skr^_Kx!|L=FD9P}~_{ z_{(xB?4TNPW>af`veW->{93i>r@{H?iV4&hVSs%RF?s@PzZ~hYo5^V);OC|Y3eWow zxH4_V?2@-PM?}+0cgDoB#*9OuA4=Y^wsQ^$22(@X&#Yq)-Uo~4Uhd3x@!W_u`L!ZU zH~GFtmLRL2Kq<>W72lSAUplzop?)>I?ZF4q8l#HQuF`kf*>~H2c=nI$6{7k~mn>!G zie?U{eDK3OxP#EcN}Pbm8<~QM?ukc$pYDZ=7H`L?@Tx!ti{`xib}o6V!WtPH+Uf-# zYKbf06iwp76bxKB*rijXV2WvlN4%yIBsCs!7Qe*3{oRk5z&0f5C+$lf{C-Q>w;&QU zU9(bdI@e~t)21au$w21;qsR6+lfN28N?R`ctSo2ZI{PoQ6BN2j9a?C%s&B)F(L zu%rhbA{mz7st!7!4%(pHp}Zf&t=>X-AKlmFl&Bg1JGfm`Bi1?(XX0le7jca$SEJvW zE|GK~TZNcXo%@Ax6T*QD;M<4x4DhE7PRcpu4bCV3*Sp~S-iOv#rYIC2(LSMm>!@jV z{F5DD&z7Rg?QNo{UA%Ludg{%s%)+4{^(Lvdo1OA-DdiCLNo6fE$ z-KcNv;Ph4BZ^*WSmO9##VXE!3jKbfK%Z|@Zzl4-QLPKT^1^K{)iy^w?vVz9HbV~pP zlpwHlFVU#sCe4pUn;{JpgSkEbguSaA33#qqmr zbmS~=A02ea{jb&$%$K|7G}iT`YQs}=PbB}*$RV^aBP;Pw#K#jHG9Azq2o6_=yHNAV zfC`?q#7TF=a9Uaj&U25pFj5t*&7 z>n_|(7n@Fw?U(i#eM`u>StQ8G_;7m})jcEHoGF&b(HAbpmhq{uZU+|Z^`k~ECX()h zSGg9YYT=M;_%Rm|!&=(Sh%5DeFy@;t!|9=ov+GQpELb%w^|vS)O8H`c2WuZ0-r|j@ zj83+Z4oXLs1}ot60#*0N{`Tj>#L$(7X8|av@P^p2X%jjdscA2Qb$7f9!#T<}V$~(Z z-s!vxy{_q<;yQO{OzMgfNyJ;3A=+g_mO;e9agN@e*zZVcC0ZcpItllE%TMo$Do5{) z-&tsbB#O1ND>z~c-J+6i{y%uhOB5HMEU*OfIpqg=9*C;qEm*q$$YM$ z<+{51WdQ+w!lBp(a*-gy-T2L)tHzHbnXHUK=jX3tFT1_Ztu6#lhvoIILAy7uJ3LgM zM|eL|`}Wisr?auXkJGyXawR>XK{fL!uqtEA<9PgJ(xd+teVY-oQ&4+vvunEEyzFl$ z#cE?e3?<}t=uTAK>Ai4ybjE=#g;wXj;3~(@*^5hqJE~^d&o(30aQ;*wmvSpyRjCs$ zmXqY=Z|)Ad0>m)9rJ{y)@;R}RD!K(E?u91|M@<&6gD5b zd+@r%N}__jIJWDvN5;(Bz0=Qn=@?PS=u1l_xW+m9O zc%sj>Ew>}goe-u&?&ikkNmnDqx#vQn0$>rekk|;eLK8!krL#`D>P`+yOElCM{js9SClxPqj;6I0 z5H!Rm+ZC7l&9Oa{!w8QlbZDd*tG3o%sKj}$j_vBhG#5}(SoY{C-$l=u%*`BF)w71t z3{O=LzP4UCvRMx2p6cS(W>*Vmv(3a+=Vn{I_7cTWt}YIl8u$|%SB7&J^7H!beJyKU zWG~S#S+n;s=5}*qV>2=}NW(BP$Y7ct7_bk>u>l*VwG&cqxNSAU383K_7J`L*1f!%D z62|&;rbj)%`1eSC?;YxjCBx+9>k(>+*q$GYZ-TTm$%P3u4{a(s4g62zP`Y)g!>=iv zdBQCP@L_}V?q4UDTy+Xt4a*5dq@3QLjqmqwyX7jHhVA&VrFTCmAV@X%vzJ+`5Y#-d9F)SqgPZoU6%K5JG6?%nq{=Ts{ zaX{N&gHO8*#OGh8Gvm{AF4;AdxZTP9Cw4^BNpS7$z2sP;_xT2$%ERCJ{H>o~O$2|R zNmJ~UB~svI(oyWhQmblZURb`5W=S|KB5Xl9#Ra{;fC#DuEX2pcpVdwu^~fZ zT~rV-C+Q$Xlbl{~K*F8OsWbok$=S$;kR7DLq^Nf(XqU^gd9a7QI}m~Ih#A_DadTIR zxYBsndC>1>!V10u=dkd|O_ek3q>S&6sgr8#CPai2Y=eaw9EY^^J`@Q0dd0?&o^IyG z0e#5Ccm|)T0nBa3!tH^}#LK?g+zVf0nSbOb0X4X4`4;)_CRtq=zRsgjM6w?k+w$*9 zF@P36FDWX^V~>nJxNOa0%+yg+O>K(?Ut)r`k#WEH=7KZAxXvd%Xz0912nMi>!lXn2 zvi4dWSb|_kbd={T&2!@aD2^1Dg0_=<=KJ2Ki&QEUj#faSgYAb}wO?Id5AN=sIIYe8 zUW4LMrG47hT02I(_tMC77 zag50+OpQ!mS-sqGwcB3Xad1SN#f*@(`hqc$eatjk$cn|Y3+^KuNb)%kuY!215|J%$ ziJf0_z4?MQQ^OzkvoTDs6>B9GlE8xZFJ#%DV0(tc^Y5Fvz&|B%N;BDtp!`f(22=dD zm=jG~$e8Z}y*}M`C>)m>`9;Gv%}C$q2%T$4PdYTxBaqbPK(mnOYYyL9 z1=QueIBF`x6xxZV(1aa&r*RD_TV^ek&#%11CNhnIqi|2zjYz^EvVch9?99DmqwIu6 z;o%n+=iFK^7@ZdKFbOf;W-9TX8)8sN0y;`EC)VozX~E55pt5KsjUL2h_hKe#vD$rj z$kf!!K?-F#X6Q3gR+{h2w2z)pPu+j`bK|>xabRh$Qj2(g6cI%e^SMm{uyu))n~50mqPh(fHUU{C=Z1a2PSaTSyC>jov6U$UIfPl#(-2WpmfT!b#4| zJs1vKOicH(FFh?QMnN*S!{&&Ws=J{nIXT+6vT+s ziI~d%$dxhsvp3m1N-v!wWAVqEe~7{YC?aT`okJtBu`aEL9*+n_7_^Zh(U7|(Pns^% zrRH@Lg5Q}RM)}8Unilc-1bt-AZVj@>hE2X@C1ev8F{|JJn2qZxrn#JjS|hpMp2v^t z+CKX0k|F6vx$6R&H}G#DkN_xt%;#SDMU(N=96@(4u5LzB{ITqBeIu1zNeG}*S;cpX zJhD4{%)5zLGOh)Y!ySivItfXP z*fO98AiL_tw#YS(!4ui@aJT+hBj+3#w`rTNFSg+zbyh=XbfM9`R&$#VZvcTv?gF(|2V}mK?AZxmc6OKEn+C{0X@)!W4OmlWk=yxfX82CsG8-BQ9 z(^Py8d`RRbmiCgb`n{2Ow6BN)i|nf=diC=^pY!VvC7St&ixcJA{?C}=y)~YfQ*K4( zr-LrdCMqX**(i)}jnXr*qt?L)2tjWL=A8F9bkkmmU;7lrSCtP*PEx=`-Mj1HWSn$L zY-ZIFUU)1n6Dx3Z8nvGwnu~gaa3i z^FMM}ndbg&5~v)OC+GQ6HSBXyn~wf=VS6pZdzT90KsbD!z;8W6foamXKC~r9;nZro zoPWx*`R=1Q?yLmLq~?SGviJG z=OanQ7*;s}$7VP_)Vj`VBdr#qT3VcehgznJOg-)Vavu=%)VnnR0mIi8TK~x&t1kif zU;;oc^{XHbEc^AP?ED3T;U9u)x2*Nl*;l%xzFG3JP^7Ng-)h~i0H=Y>t8xCEPJ76c z&@S<5!6Q0D@ysEIkZY~cdxH=UjA2h3N5a~53zEoq-=|Z5sj;X%d_3tYJLa*?A|uQd zw7~W^Y?w;?nGXS3qrUsk^Zp0YmO+589%1k$p;tbs*8RePO}9FJl&fWy!F&JnOP;rE zJXwb0b+%l@9)l<=V(m2;Yo6x!R6~S9xziIo>KJn0oE2FY-?@GAPL||Yw8#ymvnsX9 z$to7(8}tN!cURW>jRKRzH~1zQ4JpyK{QlTxMMf?tqtR^m#-$RgG9i_S1mCn|q<8&a zGmOs&*9p|y-DNB^g))~jLtSv1dnDccJu>p|wfX6&^>>cshKCy|lVw2yBEOVBHV=tq z*N&#^0ZoQ?!pErnk~$08iC7n^!oon#mM0ig@u@Sh0pxz+tQI?Rh)W@pBRoikAB3p7cOsPBEr8VCU9slfvd z!1>v@1oI>jHG-)5kooOFIN(Zf^95h0a8Ir-0U&#@Vmkeh;2XNN?ejkja_q=F+b+e! z+0g>JChq~in-PCW>ysr5Oc*U-9eTd7`;34%Irxrs5* zTwv8%4La(LvrIVRq|=|3mmm$c#tf>tWtZ))Uf1r_HKa&_2PBZ0BPbDS1-i0PU8OE` z|F$Sb|Eked5DBJ@bU$w=X?9$2(wP_DVMU_s1}jQd!%y3jV5ke=MQc3u84xu8-?v)T z`)?-j;@J>QJm~o-d-Em#d8hhj6VE_{mCwrh(+!hY1qY`rTOpaBWp?22pB3w7HOaQo zEqUAgUG7e(sW*?EAOMz6;Z@TX!?)0AK-PsSrc6h{5yl%e<3dJ z1vsj5g>J7TSXh!AjHbqgbj=;)KL%{tH@r$0Q#6&2N`8-zV}MjBr%}R&ikWGWi2##FdB0|UAipNkCH7SE(zIPt$SGO5j@tH%8Nsu)9vMORyTOW6{Fv~shc zYmk=UIIe3J4R^@Ab$zRc;q&)=Uij07dOfbF@0xx(n=SPv`5c2hd97tLBjp`xsBJ@v zqRv2|!x>qY$0j``jHV`mETF#&q36tFJ%C@14(ZByP|Vd>bfi-}~~2 z4LK8U`FncdDpsw#T1ySG*9Ezgo<3-V95S38qP73{@zAjE;3~Sf;r+}nLSB5E*%!_Z z6y#<{M&MIJmu~@vEX}fUO-~0rfVmznzXwem`RpA*L>5S7$c=pa;y@<>-=HT1=e>d3 z>AgPV0|U&;^C7yX7bpz#HfK7R%B{bdGW`;TE~X0M!X~LRldtNJI(W5 zm-M>p)xYW}#Hn01Yf-Q3S}}D;uTP9SsKV|FDO&8NEo)L7PCIFVv`U9w)XxStoVWqg zUVFNh&%!BH%@!uelsgcr3gPIZ!|!F3qguj{jR7zmkm7 zT>LfJ820FE$-8HSx262TwoQOzu4&d~}ox zo#vVzWS|6Q9Ke4@uPY8bSN>ZsK#cfGjDrqmZp}Skv zM%F<-?Fs(*`I5pY2soaJo4BBByGpW;4O>bxIO(7WZgD`mbZn>J0Z=DS{1kG9^$m-^ zs5*yKeKiqC^MoskB_jU3jnqGf0+w$=G~UFa!Y;q5C6||bQ%(&J%+-B^kHoN4Rw~pW zv)FD0y+`8oIQ9M%H(R= zhBvli+5I2BNiX6{(yXNvzB|lm5u`ugT3(DRKo5#5?4zBTuC~g+fr2U|o=?)(F23!J zbre>0UcH`{fw$Hx2DFW0*0<|{-tiOagGt*5hvfgg_u;^5-nYadsMSA=slAeG1(+FdgdWaM|1Vv|8}zWxr7v)Qboo0+lofCwL@H>< z-}@_vx5ofI{I=iYeiO6`putXAy}w<%Qx?bXUx!-cpI}n2n>4BamCRa0MUOfGi-Iep z*3i%M^3-c7aR^4>k=m3RfTJBDf_2wmt>d0CY7;1K^0)3|w}*dUM^j#kstwJlX;Uh$ z^B2L5^jXO(&r*=w1zK~`k6PJw&K&ITGQmZbBaIo%WOKD<#;q1;cu>bPZGJG%^KS>v z7v4IRTWT=2TRD8b7~-1@<~o@~g=fnr|4SS0ak*6LM6gokf60drC$I3()yoJuk)X=` zi~(1!1f$q!^I=OXR2!+hr`X^too-})Qsx098nn@wyIFW0(1$&)1dUr)kL@TH27cNX z-m|Q?b-AOh6pX}4aumjbLKMQ=9C0_c7m}6UqW@`zwy$vCq~iK%Sm%jXkR`2dRze6q ze52VALxyfYT}Y0xjo&ERvW>uEjLAz;;UUy?DYgh)`qfkr4 zjW0T6Ol4~=4V+xWDs!nSJhEvgixLzvUtGpiM?N{7YT!xx6wEcx@fF*}xj2V!2U;eg zT%@iy`X0qEVdW7rh330{Y;*j3*9VuwDuq0|f^LT6_0mZc#|EioC<6L@mo%_&d4_hL z-#&Zf+~1yxv{=zi5}b4(BH?cvA}N-}or^-k-Jf2nDO-lQ zMZv&jZ+kdUtxl-uKG72Edg8zhH7)Egn)n?hx%^f~&;EG*OGbUqCFKDD?5~C{=lF1^ z_ZN5HssaLu=UKJ;vG2igyH7%EI{J&=l!?5~;{JOyuVYJH{{Ma~Ib)0FP1l?%g2U+@ zPS7*suso`Chci5!91s)e;(0?tK{yzh!y)4pCDaOer7?ORMY zK`brMYm~O(w0L_f6Kl<@$PRg}S*KFXtKk-%EMjAY=hZvS<;-QPXm`xi&<>ie?dbEqhE6x{w zgu~FLWwfSKre3#qA8uaP8?8p3;M4Vg6ARV@2CcpTB@RygOL}>^;OnW9?_>S^M-Y41 z!=E1R4GG*GmxbJUw>563+SaY^zOf;6cEK+7EDkwYxOXk^*GhaSs*|OW(Ts;PV^BJZ zd62?D@YrXoEGD+!!rO+z=1u&|SBk8P*YhUXzls4ODNgN%tg_AM?aOj3b4kFVB6n<> zF2>1feCdy#YDNa>;GCv;hfL==qj#iHdyS69OA(CLi~L$?krIy488}Jq3AO_AHahxC z33uoD!fxuF+ofLV-kWQw!x8wGZBrsJPEw4+sY27C&3lC`vf$ta#e)8|;p(!v`fQc%;6=yM%CA|2%9`B~=HDCGJ?~oZLk5mU zTb(yAubyPG80i1FnF!@EL{V$kq7>7w6oQZSuCpy8>uPZZnj4XS^rrivc$jm zR1kHzn1hu(B*1C>(Yeudxdq~}AoFI{zmd1U7uRVxGk0X(-RIUi0`dV20Q60l;d|z# z3A)t^J&krVvTwF!i+sQ+r(JuWU|?cBHN4SVK@Z@3IP^bimtij4 zSN!ATcOS9K2j+Y?;qGnl00Yj5d{@40yK9E^T;T=0y*&7z+AEEN9|jmVskH^qy_4J%;C>k3joDF zUK-4|rc3as=S4t!!74m6zw>nQ8=4<%@vdizf@Usrxp+NS(hj7JR6-Lk6}-_&5$xho z3@moepwR=V$}~xbdne)|9+R6Q^r@ui;$hK-tS0z&(=>d60GdUbvTHv}p8%259_$Nh zjeKxjoe&ZzaiGD1!}peoBVQan;o!Z@|5!{;4_vol90YSu`_TO7snYt4CwNHmi6dw|ouR)oxjN~3pUAIvXMz|i+*E;dLZd~J;=w83Xx-qWO z&F0sB0xl(8TOPH9KohmhBz9TYzcWJzSws7XRR{M6aG3VjjC*7#tD_GKnRm4(b%cAU z`CfviiaLD#G?=ORQSmDrY(lVBhD%uoh+A4*6$IF?rMzqK4@9$a7Rm7MeunMu!@&Zq zvSmk-97HrV7mgqgEwxgRa&1qqfJl)HwC(mDad58~%so5SKf!tkSw9J72zm^OP;p{H@E@ zkkuVo;bKxZ5%oWq!Tq&k zZ?xO8QmWEiN5+C9iramtEGy3JL`qY1%{1Q;t8V7nj{@A(r@HUW&etC*C*aS{fyvGJcJ`LoJirsasHI^ z{5hw?XQX%npcIdHo{(Tt$MHPz_x{1(;UE0Nzr*Q4NXf(m^XbSO5@o4|@OW!e-+(~Z zxk_UVbDYnCbzOM>^q%usIUEjXbH+_`a<|@C3PI%-mTby9d$zoHyBmKkN=Si_0^4SB zT2(7~$-IAl&p-QT|CrZre#+-RdP6!+Ol=}BhG-h{bHhJ($x-Y5O;O|hg+T1lVU?Rx ze~0DmUUmVCwcIfeJ_61q<~icrky`BYg~{!e08}dbEHYP9|InvdxUq5~E-<-VQnowQCiDgh3 zq7@J~+AS6pV&;>soBs{}mBA5ELSS#bSlo(GbGxgag&f6wn2-on*g0cHqAu_zU+D>j2Y~OO)jT1%4 ztyv4tTQKpk6PV`%(_y9+hjW!z=QC@LTrS_>y>xQ7a6UhBxm=-C@BxBH9c*i(q3jUW5?tP&ePa z?quFK4hbCQnRPP+sCjre9Vulq1JaTyxsaxb5Iu_9^Y3mViN5^^Hh;MxqbUUPwsBdm z#;7q<)^~)%QLxcoc;O3b{Tfh&7HcDvw5$XdwC$Qg{>8)keH4$Q<~7)XvOB! zj_U0dX)l5_ zE*r52kq-ev$qP=3wF0l-QfubnB*bKqK9A>5`Rw&yC;8X3HZjE`KF-v(QJRulW;%MF zm$&?bKllT#3w-*R*lOlD&72Rf&}uF3#b+b+FE)uI1XZSq;5)@roTI-!{4<$+mG78f0^TBf%O9o z@4w#%>$^jNo3+2< zK)7x^soP&NLq7WEaNmBsZD{up@;K>M#0PxKq~J*@a@`i{+sc$eH??e??xMefLR|* z);umomUSg~cG9#~H8cTG&3zGu5RxHqLKgyPhyG#U6s0u0Q-TQU?Hh*rX+MF&b=%nT z%K71l^NyU&O*t=?opwGy?!m@$^oUmE)y5%3rZ5p|z!5v|sZ($I$<_7KxW&ep1%X8& zS-eg40q?aVfDLV<#bSlW;L!!&Eijgi*RRif_2t*RfB&?*ncWO1ZyrnEH^eG^ixCos z4}qi;Bce$#S8mtMBe!*ftue*Kune(W#=*n8wXs#r-^k{jg(-^%s@YR$yP1H>2r-u0 zVI5ePE6cVrO%ov`Qx>X)KC2jM-K;TgtyJ$VlhO_UA(Ym{T2XsuUw?k2-92|eNAkw7 zXV7?yQVfj!V9Ix(*{C+UBUjd%lAdj-v}T;ErX#ey5MyATCnHwZ{*IcUwNZ;j3e`G< zFdNJIOpMC=%L~t!Zx9FbJn?vX;CT3q*AG8so*xNv!pTI8ld0V#vXvLh`Hb+pfBSFq zM}PAB{NyJS4{sigPdJ|lZrWR9-uvzb)yz~D`{2^=>*(@@5Siy0=K`%2zWwGK>eGeu z!z*Hh5J0?)iDrk#U!(F<8ckde6sWx|ZGKVHVS)n7yOp1R@g-ls+i=q}U%!7#iW9Rc z-dQwO{=kYsO{wfWf>Jc}`O$4b#xptKuKwKAL9q}e^dfV;T-dfNQ+UOk&WHx`R%p!; zobNEWFr44b%+@1PcN3h^!EkCOwb4bSb?%)HOw;*42q`Y5)P0_Q9RG60#{%mI8l`T3 zsh_W{kbL~zPal5#zgqG)|HD?-p1;~-TS>*yNO!?=EQhE-gq)024qv7pPy;R1Lspf#>pIOdkv{DDwZ^_73U(s*PhFz zxX$5`-2vN*uG{K8H$w)?yk^o zed9lz&V&@r(&Bz@%B_$bzY{{h1#fM!*28|W*rY(j_g3NFp6dwGXs6fO$hoj>D@#{3 zPAT4A+ZlH$=ZvbMaLyTddTJ@4if$}rT*T#7^Mqcnwn2l>72F0bYjgL*XuLW0Ya=?e*Tv0 z@@&=$^8-_Q;M3PX=Jn%`xxRSTyz%&WASKVccbQT=rEa97@~6M}=lt;>|6}HZ=hf>s zoX-bbJP_jv7ZTC?-rB47nP9&^<2nh0gNdy#2rX~;6nOpmH7`#WE-%k07Y^qGhuKh? zDNTr$U+YKJa3m43W?t6SeA1*@tWpdt%Y~nR`E&m8pMMR&XP>@8#PPgd5P{R-M4Tqt zwi@3_%^=oE=U-;yEe_@2KAgpaF9&$ZlHM1Tw&>N7cB&Hz!oeFT3qK_(22$f(#%sUx`dA>4(VjU#LdX&2)hbzI#?ml zEREUProoZd#>?deA1AzzoX;~NM{3;=^{m^1HZl7T6=H|lT6fO(-gks#v(V#|NGamG z8+)y_qaQ}57QGd%u34ejYjZ2W)UpYKkA@KG22yFAJ7yVp*4i56e|x>o7gA>gf2X|| zGzFuIL%IWYy;CzKA2_^zAWexi=UePZe@{+sHX??2*y~fx1>1FwBCQ$Xvtx_e3wcAG zhS{t0o)j$BXt^$wEkh6c7H`O#bC9c91{gVt?$2eYk?Mz_i4{fmhWAkIozUn2<3;-Z zd6eOPelyh7);DAB5ak{dRa>PAG!e8ICEbcE?PO@*J+fTibFIj#-F(v%iNSo%ro$jq zS3>f9{q`+C|FfTSnBVZps~>SXydlO1))n5qdm+e)X|`O?Wx2Af8!s;_KlIN*3b zl2T<^uFzZatrS{6h??cZSO?kvy}C|Yh=Hhp*EWoTNk_~1TySdyg_c%x?uil_g0 zEA7{vssH@(F^ljoJw6s#KhOyNFV4ZbAJIR&`_Y?!^}lmjpZ>jf*FXC&N%Z|#T#Yvo z6sgu}7rl8GeOOH0$I;x7tRYLcwRiYu%iYPQ?b2}X)iwcVsuwh1OP@lEgb++cLm|ew zlccSYq*Szp8z)O`K{4+hTkK*?_zrXz4^^%85kg?w8ntfS3^6g!iM%zw`tnO& zUS9a^pZ6*V&r%*5Y2&~EU&F~;(95?)O4NKGS4&1^2Y&@XA$)(B!jMOqh}RD>1PhIbWM5jG&0R#IdyG


>%|++GAfCn%GwJip^ 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 literal 0 HcmV?d00001 diff --git a/predicators/envs/base_env.py b/predicators/envs/base_env.py index b9e3c31032..b77cab93ee 100644 --- a/predicators/envs/base_env.py +++ b/predicators/envs/base_env.py @@ -382,7 +382,8 @@ def get_observation(self) -> Observation: assert isinstance(self._current_observation, State) return self._current_observation.copy() - def get_vlm_debug_atom_strs(self, train_tasks: List[Task]) -> Set[str]: + def get_vlm_debug_atom_strs(self, + train_tasks: List[Task]) -> List[List[str]]: """A 'debug grammar' set of predicates that should be sufficient for completing the task; useful for comparing different methods of VLM truth-value labelling given the same set of atom proposals to label. @@ -402,4 +403,7 @@ def get_vlm_debug_atom_strs(self, train_tasks: List[Task]) -> Set[str]: ", ".join([o.name for o in atom.objects]) + ")" for atom in sorted(all_ground_atoms_set) } - return atom_strs + # We return the atom strings in this format to match the format they are + # outputted in when querying the VLM. That way, we can use the same + # function to sanitize atoms regardless of their origin. + return [[a] for a in atom_strs] diff --git a/predicators/envs/burger.py b/predicators/envs/burger.py index 3b4e9ba06d..3ca54d2868 100644 --- a/predicators/envs/burger.py +++ b/predicators/envs/burger.py @@ -8,6 +8,7 @@ import copy import io import logging +from collections import defaultdict from typing import Callable, List, Optional, Sequence, Set, Tuple import matplotlib @@ -21,8 +22,8 @@ from predicators.envs import BaseEnv from predicators.settings import CFG from predicators.structs import Action, DefaultEnvironmentTask, \ - EnvironmentTask, GroundAtom, Object, Observation, Predicate, State, Type, \ - Video + EnvironmentTask, GroundAtom, Object, Observation, Predicate, State, Task, \ + Type, Video class BurgerEnv(BaseEnv): @@ -56,12 +57,15 @@ class BurgerEnv(BaseEnv): # Types _object_type = Type("object", []) + _item_or_station_type = Type("item_or_station", [], _object_type) + # _item_type = Type("item", [], _item_or_station_type) + # _station_type = Type("station", [], _item_or_station_type) _item_type = Type("item", [], _object_type) _station_type = Type("station", [], _object_type) _robot_type = Type("robot", ["row", "col", "z", "fingers", "dir"], _object_type) _patty_type = Type("patty", ["row", "col", "z"], _item_type) - _tomato_type = Type("tomato", ["row", "col", "z"], _item_type) + _tomato_type = Type("lettuce", ["row", "col", "z"], _item_type) _cheese_type = Type("cheese", ["row", "col", "z"], _item_type) _bottom_bun_type = Type("bottom_bun", ["row", "col", "z"], _item_type) _top_bun_type = Type("top_bun", ["row", "col", "z"], _item_type) @@ -72,8 +76,10 @@ class BurgerEnv(BaseEnv): dir_to_enum = {"up": 0, "left": 1, "down": 2, "right": 3} enum_to_dir = {0: "up", 1: "left", 2: "down", 3: "right"} - num_rows = CFG.gridworld_num_rows - num_cols = CFG.gridworld_num_cols + # Currently, a lot of the code for this env -- like the rendering -- assumes + # a 5x5 grid. + num_rows = 5 + num_cols = 5 def __init__(self, use_gui: bool = True) -> None: super().__init__(use_gui) @@ -104,6 +110,12 @@ def __init__(self, use_gui: bool = True) -> None: self._On_holds) self._OnNothing = Predicate("OnNothing", [self._object_type], self._OnNothing_holds) + # When an argument should be an item or a station but not a robot, + # having the argument more narrowly scoped than the object type would be + # helpful. But this is causing errors so we'll avoid it for now. + # # self._Clear = Predicate("Clear", [self._item_or_station_type], + # self._Clear_holds) + # TODO(ashay): fix the errors associated with this. self._Clear = Predicate("Clear", [self._object_type], self._Clear_holds) self._GoalHack = Predicate("GoalHack", [ @@ -208,8 +220,9 @@ def get_edge_cells_for_object_placement( return ret - def _get_tasks(self, num: int, - rng: np.random.Generator) -> List[EnvironmentTask]: + def _get_tasks(self, num: int, rng: np.random.Generator, + train_or_test: str) -> List[EnvironmentTask]: + del train_or_test # unused tasks = [] state_dict = {} hidden_state = {} @@ -242,7 +255,7 @@ def _get_tasks(self, num: int, # Add tomato r, c = shuffled_spots[4] - tomato = Object("tomato", self._tomato_type) + tomato = Object("lettuce", self._tomato_type) state_dict[tomato] = {"row": r, "col": c, "z": 0} hidden_state[tomato] = {"is_sliced": 0.0, "is_held": 0.0} @@ -264,6 +277,8 @@ def _get_tasks(self, num: int, state_dict[bottom_bun] = {"row": r, "col": c, "z": 0} hidden_state[bottom_bun] = {"is_held": 0.0} + # Note that the test task differs from the train task only in the + # positions of objects. goal = { GroundAtom(self._On, [patty, bottom_bun]), GroundAtom(self._On, [cheese, patty]), @@ -279,7 +294,6 @@ def _get_tasks(self, num: int, GroundAtom(self._GoalHack, [bottom_bun, patty, cheese, tomato, top_bun]) } - state = utils.create_state_from_dict(state_dict) state.simulator_state = {} state.simulator_state["state"] = hidden_state @@ -294,10 +308,14 @@ def _get_tasks(self, num: int, return tasks def _generate_train_tasks(self) -> List[EnvironmentTask]: - return self._get_tasks(num=CFG.num_train_tasks, rng=self._train_rng) + return self._get_tasks(num=CFG.num_train_tasks, + rng=self._train_rng, + train_or_test="train") def _generate_test_tasks(self) -> List[EnvironmentTask]: - return self._get_tasks(num=CFG.num_test_tasks, rng=self._test_rng) + return self._get_tasks(num=CFG.num_test_tasks, + rng=self._test_rng, + train_or_test="test") @classmethod def Adjacent_holds(cls, state: State, objects: Sequence[Object]) -> bool: @@ -364,10 +382,16 @@ def _Holding_holds(self, state: State, objects: Sequence[Object]) -> bool: def _On_holds(self, state: State, objects: Sequence[Object]) -> bool: a, b = objects + assert state.simulator_state is not None + assert "state" in state.simulator_state ax, ay = self.get_position(a, state) bx, by = self.get_position(b, state) az = state.get(a, "z") bz = state.get(b, "z") + # If an object is held by the robot, the object is not on the robot. + if a.is_instance(self._item_type): + if state.simulator_state["state"][a]["is_held"] > 0.5: + return False return ax == bx and ay == by and az - 1 == bz def _OnNothing_holds(self, state: State, @@ -382,6 +406,13 @@ def _OnNothing_holds(self, state: State, def _Clear_holds(self, state: State, objects: Sequence[Object]) -> bool: obj, = objects + assert state.simulator_state is not None + assert "state" in state.simulator_state + # A held object is not clear. + if obj.is_instance( + self._item_type + ) and state.simulator_state["state"][obj]["is_held"] > 0.5: + return False for other_obj in state: if other_obj.is_instance(self._item_type) or other_obj.is_instance( self._station_type): @@ -429,7 +460,6 @@ def predicates(self) -> Set[Predicate]: @property def goal_predicates(self) -> Set[Predicate]: return {self._On, self._IsCooked, self._IsSliced} - # return {self._On, self._GoalHack} @property def agent_goal_predicates(self) -> Set[Predicate]: @@ -564,7 +594,7 @@ def simulate(self, state: State, action: Action) -> State: next_state.simulator_state["state"][on_top]["is_held"] = 1.0 next_state.set(on_top, "col", rx) next_state.set(on_top, "row", ry) - next_state.set(on_top, "z", 0) + next_state.set(on_top, "z", 1) next_state.set(self._robot, "fingers", 1.0) # Handle placing. @@ -581,7 +611,7 @@ def simulate(self, state: State, action: Action) -> State: next_state.set(held_item, "col", px) next_state.set(held_item, "row", py) # If any other objects are at this location, then this must go - # on top of them. + # on top of them. Otherwise, we are placing on the ground. objects_at_loc = [] for obj in other_objects: ox, oy = self.get_position(obj, state) @@ -610,8 +640,8 @@ def render_state_plt( # The DPI has to be sufficiently high otherwise when the matplotlib # figure gets converted to a PIL image, text in the image can become # blurry. - fig, ax = plt.subplots(1, 1, figsize=figsize, dpi=200) - plt.suptitle(caption, wrap=True) + fig, ax = plt.subplots(1, 1, figsize=figsize, dpi=216) + fontsize = 14 # Plot vertical lines for i in range(self.num_cols + 1): @@ -626,7 +656,7 @@ def render_state_plt( robot_direction = self.enum_to_dir[state.get(self._robot, "dir")] robot_img = mpimg.imread( utils.get_env_asset_path(f"imgs/robot_{robot_direction}.png")) - img_size = (0.8, 0.8) + img_size = (0.7, 0.7) ax.imshow(robot_img, extent=[ x + (1 - img_size[0]) / 2, x + (1 + img_size[0]) / 2, @@ -636,7 +666,7 @@ def render_state_plt( ax.text(x + 1 / 2, y + (1 - img_size[1]) / 2, self._robot.name, - fontsize=10, + fontsize=fontsize, color="red", ha="center", va="top", @@ -652,7 +682,7 @@ def render_state_plt( ax.text(x + 1 / 2, y + (1 - img_size[1]) / 2, self._grill.name, - fontsize=10, + fontsize=fontsize, color="red", ha="center", va="top", @@ -661,21 +691,22 @@ def render_state_plt( boxstyle="square,pad=0.0")) # Draw cutting board - x, y = self.get_position(self._cutting_board, state) - cutting_board_img = mpimg.imread( - utils.get_env_asset_path("imgs/cutting_board.png")) - ax.imshow(cutting_board_img, extent=[x, x + 1, y, y + 1]) - if CFG.burger_render_set_of_marks: - ax.text(x + 1 / 2, - y + (1 - img_size[1]) / 2, - self._cutting_board.name, - fontsize=10, - color="red", - ha="center", - va="top", - bbox=dict(facecolor="black", - alpha=0.5, - boxstyle="square,pad=0.0")) + if self._cutting_board in state: + x, y = self.get_position(self._cutting_board, state) + cutting_board_img = mpimg.imread( + utils.get_env_asset_path("imgs/cutting_board.png")) + ax.imshow(cutting_board_img, extent=[x, x + 1, y, y + 1]) + if CFG.burger_render_set_of_marks: + ax.text(x + 1 / 2, + y + (1 - img_size[1]) / 2, + self._cutting_board.name, + fontsize=fontsize, + color="red", + ha="center", + va="top", + bbox=dict(facecolor="black", + alpha=0.5, + boxstyle="square,pad=0.0")) # Draw items type_to_img = { @@ -686,9 +717,10 @@ def render_state_plt( self._cheese_type: mpimg.imread("predicators/envs/assets/imgs/cheese.png"), self._tomato_type: - mpimg.imread(utils.get_env_asset_path("imgs/whole_tomato.png")), + mpimg.imread(utils.get_env_asset_path("imgs/uncut_lettuce.png")), self._patty_type: - mpimg.imread(utils.get_env_asset_path("imgs/raw_patty.png")) + mpimg.imread( + utils.get_env_asset_path("imgs/realistic_raw_patty_full.png")) } held_img_size = (0.3, 0.3) offset = held_img_size[1] * (1 / 3) @@ -700,11 +732,12 @@ def render_state_plt( if "is_cooked" in state.simulator_state["state"][ item] and self._IsCooked_holds(state, [item]): img = mpimg.imread( - utils.get_env_asset_path("imgs/cooked_patty.png")) + utils.get_env_asset_path( + "imgs/realistic_cooked_patty_full.png")) elif "is_sliced" in state.simulator_state["state"][ item] and self._IsSliced_holds(state, [item]): img = mpimg.imread( - utils.get_env_asset_path("imgs/sliced_tomato.png")) + utils.get_env_asset_path("imgs/cut_lettuce.png")) zorder = state.get(item, "z") is_held = state.simulator_state["state"][item]["is_held"] > 0.5 x, y = self.get_position(item, state) @@ -736,25 +769,45 @@ def render_state_plt( ax.imshow(img, extent=extent, zorder=zorder) if CFG.burger_render_set_of_marks: if is_held: - ax.text(x + (1 + held_img_size[0]) * (1 / 2), + rx, _ = self.get_position(self._robot, state) + # If the robot is on the right edge, put text labels for + # held items on the left side so that they don't extend past + # the edge of the grid and make the image larger. + if rx == self.num_cols - 1: + horizontal_align = "right" + text_x = x + (1 - held_img_size[0]) * (1 / 2) + else: + horizontal_align = "left" + text_x = x + (1 + held_img_size[0]) * (1 / 2) + ax.text(text_x, y + offset + held_img_size[1] / 2, item.name, - fontsize=10, + fontsize=fontsize, color="red", - ha="left", + ha=horizontal_align, va="top", bbox=dict(facecolor="black", alpha=0.5, boxstyle="square,pad=0.0")) else: if zorder > 0: - if self._On_holds( - state, [item, self._grill]) or self._On_holds( - state, [item, self._cutting_board]): + # If the item is on the grill or cutting board, and + # there is not an item on top of it, then put its text + # label near the top of the cell. + if self._cutting_board in state: + check = (self._On_holds(state, [item, self._grill]) + or self._On_holds(state, [ + item, self._cutting_board + ])) and self._Clear_holds(state, [item]) + else: + check = self._On_holds(state, [ + item, self._grill + ]) and self._Clear_holds(state, [item]) + if check: ax.text(x + 1 / 2, y + (1 + img_size[1]) / 2, item.name, - fontsize=10, + fontsize=fontsize, color="red", ha="center", va="bottom", @@ -765,7 +818,7 @@ def render_state_plt( ax.text(x, y + (0.1 * zorder) + (1 - img_size[1]) / 2, item.name, - fontsize=10, + fontsize=fontsize, color="red", ha="left", va="top", @@ -773,13 +826,16 @@ def render_state_plt( alpha=0.5, boxstyle="square,pad=0.0")) else: + # If something is on top of this item or this item is on + # something else, then put the text label on the left + # side of the cell. if not self._Clear_holds( state, [item]) or not self._OnNothing_holds( state, [item]): ax.text(x, y + (1 - img_size[1]) / 2, item.name, - fontsize=10, + fontsize=fontsize, color="red", ha="left", va="top", @@ -790,7 +846,7 @@ def render_state_plt( ax.text(x + 1 / 2, y + (1 - img_size[1]) / 2, item.name, - fontsize=10, + fontsize=fontsize, color="red", ha="center", va="top", @@ -817,10 +873,12 @@ def render_state(self, task: EnvironmentTask, action: Optional[Action] = None, caption: Optional[str] = None) -> Video: + if CFG.burger_dummy_render: + return [np.zeros((16, 16), dtype=np.uint8)] fig = self.render_state_plt(state, task, action, caption) # Create an in-memory binary stream. buf = io.BytesIO() - fig.savefig(buf, format='png') + fig.savefig(buf, format='png', bbox_inches='tight', pad_inches=0) # Rewind the stream to the beginning so that it can be read from. buf.seek(0) img = Image.open(buf) @@ -841,6 +899,10 @@ def render_state(self, ret_img = copy.deepcopy(jpeg_img) ret_arr = np.array(ret_img) + # import PIL.Image + # temp = PIL.Image.fromarray(ret_arr) + # import pdb; pdb.set_trace() + buf.close() jpeg_buf.close() return [ret_arr] @@ -908,3 +970,554 @@ def _event_to_action(state: State, return action return _event_to_action + + +class BurgerNoMoveEnv(BurgerEnv): + """BurgerEnv but with the movement option wrapped inside each of the other + options.""" + + def __init__(self, use_gui: bool = True) -> None: + super().__init__(use_gui) + self._OnGround = Predicate("OnGround", [self._item_type], + self._OnGround_holds) + self._GoalHack2 = Predicate("GoalHack2", + [self._bottom_bun_type, self._patty_type], + self._GoalHack2_holds) + self._GoalHack3 = Predicate("GoalHack3", + [self._bottom_bun_type, self._tomato_type], + self._GoalHack3_holds) + self._GoalHack4 = Predicate("GoalHack4", + [self._patty_type, self._tomato_type], + self._GoalHack3_holds) + self._GoalHack5 = Predicate( + "GoalHack5", [self._cutting_board_type, self._patty_type], + self._GoalHack5_holds) + self._GoalHack6 = Predicate("GoalHack6", + [self._patty_type, self._patty_type], + self._GoalHack5_holds) + self._GoalHack7 = Predicate("GoalHack7", + [self._grill_type, self._patty_type], + self._GoalHack5_holds) + + def _OnGround_holds(self, state: State, objects: Sequence[Object]) -> bool: + obj, = objects + obj_z = state.get(obj, "z") + return obj_z == 0 + + def _GoalHack2_holds(self, state: State, + objects: Sequence[Object]) -> bool: + # The object is somewhere below the patty and the patty is cooked. + obj, patty = objects + obj_z = state.get(obj, "z") + obj_x, obj_y = self.get_position(obj, state) + p_z = state.get(patty, "z") + p_x, p_y = self.get_position(patty, state) + same_cell = obj_x == p_x and obj_y == p_y + return obj_z < p_z and same_cell and self._IsCooked_holds( + state, [patty]) + + def _GoalHack3_holds(self, state: State, + objects: Sequence[Object]) -> bool: + # The object is somewhere below the tomato and the tomato is sliced. + obj, tomato = objects + obj_z = state.get(obj, "z") + obj_x, obj_y = self.get_position(obj, state) + t_z = state.get(tomato, "z") + t_x, t_y = self.get_position(tomato, state) + same_cell = obj_x == t_x and obj_y == t_y + return obj_z < t_z and same_cell and self._IsSliced_holds( + state, [tomato]) + + def _GoalHack5_holds(self, state: State, + objects: Sequence[Object]) -> bool: + obj, patty = objects + # The object is right below the patty and the patty is cooked. + obj_z = state.get(obj, "z") + obj_x, obj_y = self.get_position(obj, state) + p_z = state.get(patty, "z") + p_x, p_y = self.get_position(patty, state) + same_cell = obj_x == p_x and obj_y == p_y + # We check that the object is right below the patty because we don't + # want this turning on for the top patty when there is a stack of two + # cooked patties on a cutting board -- then the operator that covers + # this transition will be less general. + return obj_z == p_z - 1 and same_cell and self._IsCooked_holds( + state, [patty]) + + @classmethod + def get_name(cls) -> str: + return "burger_no_move" + + def get_edge_cells_for_object_placement( + self, rng: np.random.Generator) -> List[Tuple[int, int]]: + del rng # unused + n_row = self.num_rows + n_col = self.num_cols + top = [(n_row - 1, col) for col in range(n_col)] + left = [(row, 0) for row in range(n_row)] + bottom = [(0, col) for col in range(n_col)] + right = [(row, n_col - 1) for row in range(n_row)] + corners = [(0, 0), (0, self.num_cols - 1), (self.num_rows - 1, 0), + (self.num_rows - 1, self.num_cols - 1)] + cells = (set(top) | set(left) | set(bottom) + | set(right)) - set(corners) + return sorted(cells) + + def _get_tasks(self, num: int, rng: np.random.Generator, + train_or_test: str) -> List[EnvironmentTask]: + spots_for_objects = self.get_edge_cells_for_object_placement(rng) + + def create_default_state() -> Tuple[dict, dict, List[Tuple[int, int]]]: + state_dict = {} + hidden_state = {} + shuffled_spots = spots_for_objects.copy() + rng.shuffle(shuffled_spots) + + # Add robot, grill, and cutting board + state_dict[self._robot] = { + "row": 2, # assumes 5x5 grid + "col": 2, # assumes 5x5 grid + "z": 0, + "fingers": 0.0, + "dir": 3 + } + r, c = shuffled_spots[0] + state_dict[self._grill] = {"row": r, "col": c, "z": 0} + r, c = shuffled_spots[1] + state_dict[self._cutting_board] = {"row": r, "col": c, "z": 0} + + # Add patty + r, c = shuffled_spots[2] + patty = Object("patty1", self._patty_type) + state_dict[patty] = {"row": r, "col": c, "z": 0} + hidden_state[patty] = {"is_cooked": 0.0, "is_held": 0.0} + + # Add tomato + r, c = shuffled_spots[3] + tomato = Object("lettuce1", self._tomato_type) + state_dict[tomato] = {"row": r, "col": c, "z": 0} + hidden_state[tomato] = {"is_sliced": 0.0, "is_held": 0.0} + + # Add cheese + r, c = shuffled_spots[4] + cheese = Object("cheese1", self._cheese_type) + state_dict[cheese] = {"row": r, "col": c, "z": 0} + hidden_state[cheese] = {"is_held": 0.0} + + # Add top bun + r, c = shuffled_spots[5] + top_bun = Object("top_bun1", self._top_bun_type) + state_dict[top_bun] = {"row": r, "col": c, "z": 0} + hidden_state[top_bun] = {"is_held": 0.0} + + # Add bottom bun + r, c = shuffled_spots[6] + bottom_bun = Object("bottom_bun1", self._bottom_bun_type) + state_dict[bottom_bun] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun] = {"is_held": 0.0} + + return state_dict, hidden_state, shuffled_spots + + def create_task(state_dict: dict, hidden_state: dict, + goal: Set[GroundAtom], + alt_goal: Set[GroundAtom]) -> EnvironmentTask: + state = utils.create_state_from_dict(state_dict) + state.simulator_state = {} + state.simulator_state["state"] = hidden_state + # A DefaultEnvironmentTask is a dummy environment task. Our render + # function does not use the task argument, so this is ok. + state.simulator_state["images"] = self.render_state( + state, DefaultEnvironmentTask) + # PIL.Image.fromarray(state.simulator_state["images"][0]).show() + # import pdb; pdb.set_trace() + return EnvironmentTask(state, goal, alt_goal_desc=alt_goal) + + def name_to_obj(state_dict: dict) -> dict[str, Object]: + d = {} + for obj in state_dict.keys(): + d[obj.name] = obj + return d + + # We'll have three kinds of train/test pairs. + # Consider a burger as a bottom bun, a top bun, and something(s) in + # between them. + # (1) + # Train: + # - Make a burger with a cooked patty + # - Make a burger with chopped lettuce + # - Place chopped lettuce on a patty + # - Place chopped lettuce on a patty, place patty on cutting board + # Test: + # - Make a burger with a cooked patty and chopped lettuce + # (2) + # Train: + # - Make a burger with a cooked patty + # - Cook two patties and stack them, place bottom patty on cutting + # board + # Test: + # - Make a burger with two cooked patties + # (3) + # Train: + # - Make a burger with a cooked patty + # Test: + # - Make several bottom bun + cooked patty stacks + + def create_tasks_for_type_one( + ) -> Tuple[List[EnvironmentTask], List[EnvironmentTask]]: + train_tasks = [] + test_tasks = [] + + # train task 1 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + bottom_bun = d["bottom_bun1"] + patty = d["patty1"] + top_bun = d["top_bun1"] + train_goal = { + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [top_bun, patty]) + } + alt_train_goal = { + GroundAtom(self._GoalHack2, [bottom_bun, patty]), + GroundAtom(self._On, [top_bun, patty]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # train task 2 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + bottom_bun = d["bottom_bun1"] + tomato = d["lettuce1"] + top_bun = d["top_bun1"] + train_goal = { + GroundAtom(self._IsSliced, [tomato]), + GroundAtom(self._On, [tomato, bottom_bun]), + GroundAtom(self._On, [top_bun, tomato]) + } + alt_train_goal = { + GroundAtom(self._GoalHack3, [bottom_bun, tomato]), + GroundAtom(self._On, [top_bun, tomato]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # train task 3 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + patty = d["patty1"] + tomato = d["lettuce1"] + train_goal = { + GroundAtom(self._On, [patty, self._cutting_board]), + GroundAtom(self._On, [tomato, patty]), + GroundAtom(self._IsSliced, [tomato]) + } + alt_train_goal = { + GroundAtom(self._On, [patty, self._cutting_board]), + GroundAtom(self._GoalHack4, [patty, tomato]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # train task 4 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + patty = d["patty1"] + tomato = d["lettuce1"] + # Start with the patty on the grill + r, c = shuffled_spots[0] # where the grill is + state_dict[patty] = {"row": r, "col": c, "z": 1} + hidden_state[patty] = {"is_cooked": 0.0, "is_held": 0.0} + train_goal = { + GroundAtom(self._On, [patty, self._grill]), + GroundAtom(self._On, [tomato, patty]), + GroundAtom(self._IsSliced, [tomato]) + } + alt_train_goal = { + GroundAtom(self._On, [patty, self._grill]), + GroundAtom(self._GoalHack4, [patty, tomato]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # test task 1 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + bottom_bun = d["bottom_bun1"] + patty = d["patty1"] + tomato = d["lettuce1"] + top_bun = d["top_bun1"] + test_goal = { + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._IsSliced, [tomato]), + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [tomato, patty]), + GroundAtom(self._On, [top_bun, tomato]) + } + alt_test_goal = { + GroundAtom(self._GoalHack2, [bottom_bun, patty]), + GroundAtom(self._GoalHack4, [patty, tomato]), + GroundAtom(self._On, [top_bun, tomato]) + } + test_task = create_task(state_dict, hidden_state, test_goal, + alt_test_goal) + test_tasks.append(test_task) + + return train_tasks, test_tasks + + def create_tasks_for_type_two( + ) -> Tuple[List[EnvironmentTask], List[EnvironmentTask]]: + train_tasks = [] + test_tasks = [] + + # train task 1 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + bottom_bun = d["bottom_bun1"] + patty = d["patty1"] + top_bun = d["top_bun1"] + train_goal = { + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [top_bun, patty]) + } + alt_train_goal = { + GroundAtom(self._GoalHack2, [bottom_bun, patty]), + GroundAtom(self._On, [top_bun, patty]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # train task 2 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + patty = d["patty1"] + r, c = shuffled_spots[7] # next empty cell + patty2 = Object("patty2", self._patty_type) + state_dict[patty2] = {"row": r, "col": c, "z": 0} + hidden_state[patty2] = {"is_cooked": 0.0, "is_held": 0.0} + train_goal = { + GroundAtom(self._On, [patty, self._cutting_board]), + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._IsCooked, [patty2]), + GroundAtom(self._On, [patty2, patty]) + } + alt_train_goal = { + GroundAtom(self._GoalHack5, [self._cutting_board, patty]), + GroundAtom(self._GoalHack6, [patty, patty2]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # train task 3 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + patty = d["patty1"] + r, c = shuffled_spots[7] # next empty cell + patty2 = Object("patty2", self._patty_type) + state_dict[patty2] = {"row": r, "col": c, "z": 0} + hidden_state[patty2] = {"is_cooked": 0.0, "is_held": 0.0} + train_goal = { + GroundAtom(self._On, [patty2, self._grill]), + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._IsCooked, [patty2]), + GroundAtom(self._On, [patty, patty2]) + } + alt_train_goal = { + GroundAtom(self._GoalHack7, [self._grill, patty2]), + GroundAtom(self._GoalHack6, [patty2, patty]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # test task 1 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + bottom_bun = d["bottom_bun1"] + patty = d["patty1"] + top_bun = d["top_bun1"] + r, c = shuffled_spots[7] # next empty cell + patty2 = Object("patty2", self._patty_type) + state_dict[patty2] = {"row": r, "col": c, "z": 0} + hidden_state[patty2] = {"is_cooked": 0.0, "is_held": 0.0} + test_goal = { + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [patty2, patty]), + GroundAtom(self._On, [top_bun, patty2]) + } + alt_test_goal = { + GroundAtom(self._GoalHack2, [bottom_bun, patty]), + GroundAtom(self._GoalHack6, [patty, patty2]), + GroundAtom(self._On, [top_bun, patty2]) + } + test_task = create_task(state_dict, hidden_state, test_goal, + alt_test_goal) + test_tasks.append(test_task) + + return train_tasks, test_tasks + + def create_tasks_for_type_three( + ) -> Tuple[List[EnvironmentTask], List[EnvironmentTask]]: + train_tasks = [] + test_tasks = [] + + # train task 1 + state_dict, hidden_state, shuffled_spots = create_default_state() + d = name_to_obj(state_dict) + bottom_bun = d["bottom_bun1"] + patty = d["patty1"] + top_bun = d["top_bun1"] + train_goal = { + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [top_bun, patty]) + } + alt_train_goal = { + GroundAtom(self._GoalHack2, [bottom_bun, patty]), + GroundAtom(self._On, [top_bun, patty]) + } + train_task = create_task(state_dict, hidden_state, train_goal, + alt_train_goal) + train_tasks.append(train_task) + + # test task 1 + state_dict, hidden_state, shuffled_spots = create_default_state() + state_dict = { + self._robot: state_dict[self._robot], + self._grill: state_dict[self._grill] + } + hidden_state = {} + # Create three patties. + r, c = shuffled_spots[1] + patty = Object("patty1", self._patty_type) + state_dict[patty] = {"row": r, "col": c, "z": 0} + hidden_state[patty] = {"is_cooked": 0.0, "is_held": 0.0} + r, c = shuffled_spots[2] + patty2 = Object("patty2", self._patty_type) + state_dict[patty2] = {"row": r, "col": c, "z": 0} + hidden_state[patty2] = {"is_cooked": 0.0, "is_held": 0.0} + r, c = shuffled_spots[3] + patty3 = Object("patty3", self._patty_type) + state_dict[patty3] = {"row": r, "col": c, "z": 0} + hidden_state[patty3] = {"is_cooked": 0.0, "is_held": 0.0} + r, c = shuffled_spots[4] + patty4 = Object("patty4", self._patty_type) + state_dict[patty4] = {"row": r, "col": c, "z": 0} + hidden_state[patty4] = {"is_cooked": 0.0, "is_held": 0.0} + r, c = shuffled_spots[5] + patty5 = Object("patty5", self._patty_type) + state_dict[patty5] = {"row": r, "col": c, "z": 0} + hidden_state[patty5] = {"is_cooked": 0.0, "is_held": 0.0} + # Create three bottom buns. + r, c = shuffled_spots[6] + bottom_bun = Object("bottom_bun1", self._bottom_bun_type) + state_dict[bottom_bun] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun] = {"is_held": 0.0} + r, c = shuffled_spots[7] + bottom_bun2 = Object("bottom_bun2", self._bottom_bun_type) + state_dict[bottom_bun2] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun2] = {"is_held": 0.0} + r, c = shuffled_spots[8] + bottom_bun3 = Object("bottom_bun3", self._bottom_bun_type) + state_dict[bottom_bun3] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun3] = {"is_held": 0.0} + r, c = shuffled_spots[9] + bottom_bun4 = Object("bottom_bun4", self._bottom_bun_type) + state_dict[bottom_bun4] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun4] = {"is_held": 0.0} + r, c = shuffled_spots[10] + bottom_bun5 = Object("bottom_bun5", self._bottom_bun_type) + state_dict[bottom_bun5] = {"row": r, "col": c, "z": 0} + hidden_state[bottom_bun5] = {"is_held": 0.0} + + test_goal = { + GroundAtom(self._On, [patty, bottom_bun]), + GroundAtom(self._On, [patty2, bottom_bun2]), + GroundAtom(self._On, [patty3, bottom_bun3]), + GroundAtom(self._On, [patty4, bottom_bun4]), + GroundAtom(self._On, [patty5, bottom_bun5]), + GroundAtom(self._IsCooked, [patty]), + GroundAtom(self._IsCooked, [patty2]), + GroundAtom(self._IsCooked, [patty3]), + GroundAtom(self._IsCooked, [patty4]), + GroundAtom(self._IsCooked, [patty5]) + } + alt_test_goal = { + GroundAtom(self._GoalHack2, [bottom_bun, patty]), + GroundAtom(self._GoalHack2, [bottom_bun2, patty2]), + GroundAtom(self._GoalHack2, [bottom_bun3, patty3]), + GroundAtom(self._GoalHack2, [bottom_bun4, patty4]), + GroundAtom(self._GoalHack2, [bottom_bun5, patty5]) + } + test_task = create_task(state_dict, hidden_state, test_goal, + alt_test_goal) + test_tasks.append(test_task) + + return train_tasks, test_tasks + + if CFG.burger_no_move_task_type == "more_stacks": + train_tasks, test_tasks = create_tasks_for_type_three() + elif CFG.burger_no_move_task_type == "fatter_burger": + train_tasks, test_tasks = create_tasks_for_type_two() + elif CFG.burger_no_move_task_type == "combo_burger": + train_tasks, test_tasks = create_tasks_for_type_one() + else: + raise NotImplementedError( + f"Unrecognized task type: {CFG.burger_no_move_task_type}.") + + if train_or_test == "train": + return train_tasks + return test_tasks + + @property + def predicates(self) -> Set[Predicate]: + return { + self._IsCooked, self._IsSliced, self._HandEmpty, self._Holding, + self._On, self._OnGround, self._Clear, self._GoalHack2, + self._GoalHack3, self._GoalHack4, self._GoalHack5, self._GoalHack6, + self._GoalHack7 + } + + @property + def goal_predicates(self) -> Set[Predicate]: + return {self._On, self._OnGround, self._IsCooked, self._IsSliced} + + @property + def agent_goal_predicates(self) -> Set[Predicate]: + preds_by_task_type = { + "more_stacks": {self._On, self._OnGround, self._GoalHack2}, + "fatter_burger": { + self._On, self._OnGround, self._GoalHack2, self._GoalHack5, + self._GoalHack6, self._GoalHack7 + }, + "combo_burger": { + self._On, self._OnGround, self._GoalHack2, self._GoalHack3, + self._GoalHack4 + } + } + return preds_by_task_type[CFG.burger_no_move_task_type] + + def get_vlm_debug_atom_strs(self, + train_tasks: List[Task]) -> List[List[str]]: + # Convert the default value from List[List[str]] to List[str] to match + # the other entries we'll put into the dictionary. + default = [a[0] for a in super().get_vlm_debug_atom_strs(train_tasks)] + atom_strs_by_task_type = { + "more_stacks": ["Cooked(patty1)"], + "fatter_burger": ["Cooked(patty1)"], + "combo_burger": + ["Cooked(patty1)", "Cut(lettuce1)", "Whole(lettuce1)"] + } + atom_strs_by_task_type = defaultdict(lambda: default, + atom_strs_by_task_type) + atom_strs = atom_strs_by_task_type[CFG.burger_no_move_task_type] + return [[a] for a in atom_strs] diff --git a/predicators/envs/vlm_envs.py b/predicators/envs/vlm_envs.py index a065efa3f5..c5964b7fd6 100644 --- a/predicators/envs/vlm_envs.py +++ b/predicators/envs/vlm_envs.py @@ -131,11 +131,13 @@ def _get_tasks(self, num: int, for _ in range(num) ] - def get_vlm_debug_atom_strs(self, train_tasks: List[Task]) -> Set[str]: + def get_vlm_debug_atom_strs(self, + train_tasks: List[Task]) -> List[List[str]]: del train_tasks - return set([ + atom_strs = set([ "hand_grasping_spoon(hand, spoon)", "hand_grasping_teabag(hand, teabag)", "spoon_in_cup(spoon, cup)", "spoon_on_plate(spoon, plate)", "teabag_in_cup(teabag, cup)", "teabag_on_plate(teabag, plate)" ]) + return [[a] for a in atom_strs] diff --git a/predicators/ground_truth_models/burger/__init__.py b/predicators/ground_truth_models/burger/__init__.py index 8b9dd72f9e..37c7ba1756 100644 --- a/predicators/ground_truth_models/burger/__init__.py +++ b/predicators/ground_truth_models/burger/__init__.py @@ -1,6 +1,12 @@ """Ground truth models for burger environment.""" -from .nsrts import BurgerGroundTruthNSRTFactory -from .options import BurgerGroundTruthOptionFactory +from .nsrts import BurgerGroundTruthNSRTFactory, \ + BurgerNoMoveGroundTruthNSRTFactory +from .options import BurgerGroundTruthOptionFactory, \ + BurgerNoMoveGroundTruthOptionFactory -__all__ = ["BurgerGroundTruthOptionFactory", "BurgerGroundTruthNSRTFactory"] +__all__ = [ + "BurgerGroundTruthOptionFactory", "BurgerGroundTruthNSRTFactory", + "BurgerNoMoveGroundTruthOptionFactory", + "BurgerNoMoveGroundTruthNSRTFactory" +] diff --git a/predicators/ground_truth_models/burger/nsrts.py b/predicators/ground_truth_models/burger/nsrts.py index 408eadb885..b69b476f8c 100644 --- a/predicators/ground_truth_models/burger/nsrts.py +++ b/predicators/ground_truth_models/burger/nsrts.py @@ -21,7 +21,7 @@ def get_nsrts(env_name: str, types: Dict[str, Type], options: Dict[str, ParameterizedOption]) -> Set[NSRT]: # Types - tomato_type = types["tomato"] + tomato_type = types["lettuce"] patty_type = types["patty"] grill_type = types["grill"] @@ -69,7 +69,7 @@ def get_nsrts(env_name: str, types: Dict[str, Type], Pick = options["Pick"] Place = options["Place"] Cook = options["Cook"] - Slice = options["Slice"] + Slice = options["Chop"] nsrts = set() @@ -599,3 +599,168 @@ def get_nsrts(env_name: str, types: Dict[str, Type], nsrts.add(place_nsrt) return nsrts + + +class BurgerNoMoveGroundTruthNSRTFactory(GroundTruthNSRTFactory): + """Ground-truth NSRTs for the Burger environment with no distinct movement + options.""" + + @classmethod + def get_env_names(cls) -> Set[str]: + return {"burger_no_move"} + + @staticmethod + def get_nsrts(env_name: str, types: Dict[str, Type], + predicates: Dict[str, Predicate], + options: Dict[str, ParameterizedOption]) -> Set[NSRT]: + + # Types + tomato_type = types["lettuce"] + patty_type = types["patty"] + + grill_type = types["grill"] + cutting_board_type = types["cutting_board"] + robot_type = types["robot"] + + item_type = types["item"] + object_type = types["object"] + + # Variables + tomato = Variable("?tomato", tomato_type) + patty = Variable("?patty", patty_type) + + grill = Variable("?grill", grill_type) + cutting_board = Variable("?cutting_board", cutting_board_type) + robot = Variable("?robot", robot_type) + + item = Variable("?item", item_type) + obj = Variable("?object", object_type) + + # Predicates + # Adjacent = predicates["Adjacent"] + # AdjacentToNothing = predicates["AdjacentToNothing"] + # Facing = predicates["Facing"] + # OnNothing = predicates["OnNothing"] + + IsCooked = predicates["IsCooked"] + IsSliced = predicates["IsSliced"] + HandEmpty = predicates["HandEmpty"] + Holding = predicates["Holding"] + On = predicates["On"] + OnGround = predicates["OnGround"] + Clear = predicates["Clear"] + + # Options + # Move = options["Move"] + Pick = options["Pick"] + Place = options["Place"] + Cook = options["Cook"] + Slice = options["Chop"] + + nsrts = set() + + # Slice + parameters = [robot, tomato, cutting_board] + option_vars = [robot, tomato, cutting_board] + option = Slice + preconditions = { + LiftedAtom(Clear, [tomato]), + LiftedAtom(On, [tomato, cutting_board]), + LiftedAtom(HandEmpty, [robot]) + } + add_effects = {LiftedAtom(IsSliced, [tomato])} + delete_effects: Set[LiftedAtom] = set() + ignore_effects: Set[Predicate] = set() + slice_nsrt = NSRT("Slice", parameters, preconditions, add_effects, + delete_effects, ignore_effects, option, option_vars, + null_sampler) + nsrts.add(slice_nsrt) + + # Cook + parameters = [robot, patty, grill] + option_vars = [robot, patty, grill] + option = Cook + preconditions = { + LiftedAtom(Clear, [patty]), + LiftedAtom(On, [patty, grill]), + LiftedAtom(HandEmpty, [robot]) + } + add_effects = {LiftedAtom(IsCooked, [patty])} + delete_effects = set() + ignore_effects = set() + cook_nsrt = NSRT("Cook", parameters, preconditions, add_effects, + delete_effects, ignore_effects, option, option_vars, + null_sampler) + nsrts.add(cook_nsrt) + + # PickFromGround + parameters = [robot, item] + option_vars = [robot, item] + option = Pick + preconditions = { + LiftedAtom(Clear, [item]), + # We OnGround over OnNothing here because the latter remains true + # after we pick the object up if it's implemented as Forall-NOT-On, + # and we want it to be deleted after picking it up. + LiftedAtom(OnGround, [item]), + LiftedAtom(HandEmpty, [robot]) + } + add_effects = {LiftedAtom(Holding, [robot, item])} + delete_effects = { + LiftedAtom(Clear, [item]), + LiftedAtom(OnGround, [item]), + LiftedAtom(HandEmpty, [robot]) + } + ignore_effects = set() + pick_nsrt = NSRT("PickFromGround", parameters, preconditions, + add_effects, delete_effects, ignore_effects, option, + option_vars, null_sampler) + nsrts.add(pick_nsrt) + + # Unstack + parameters = [robot, item, obj] + option_vars = [robot, item] + option = Pick + preconditions = { + LiftedAtom(Clear, [item]), + LiftedAtom(On, [item, obj]), + LiftedAtom(HandEmpty, [robot]), + } + add_effects = { + LiftedAtom(Holding, [robot, item]), + LiftedAtom(Clear, [obj]) + } + delete_effects = { + LiftedAtom(Clear, [item]), + LiftedAtom(On, [item, obj]), + LiftedAtom(HandEmpty, [robot]), + } + ignore_effects = set() + unstack_nsrt = NSRT("Unstack", parameters, preconditions, add_effects, + delete_effects, ignore_effects, option, + option_vars, null_sampler) + nsrts.add(unstack_nsrt) + + # Stack + parameters = [robot, item, obj] + option_vars = [robot, item, obj] + option = Place + preconditions = { + LiftedAtom(Holding, [robot, item]), + LiftedAtom(Clear, [obj]) + } + add_effects = { + LiftedAtom(Clear, [item]), + LiftedAtom(On, [item, obj]), + LiftedAtom(HandEmpty, [robot]) + } + delete_effects = { + LiftedAtom(Holding, [robot, item]), + LiftedAtom(Clear, [obj]) + } + stack_nsrt = NSRT("Stack", parameters, preconditions, add_effects, + delete_effects, set(), option, option_vars, + null_sampler) + nsrts.add(stack_nsrt) + + return nsrts diff --git a/predicators/ground_truth_models/burger/options.py b/predicators/ground_truth_models/burger/options.py index 2a3febe6f2..4f450ac323 100644 --- a/predicators/ground_truth_models/burger/options.py +++ b/predicators/ground_truth_models/burger/options.py @@ -1,6 +1,6 @@ """Ground-truth options for the burger environment.""" -from typing import Dict, Iterator, Sequence, Set, Tuple +from typing import Dict, Iterator, Optional, Sequence, Set, Tuple import numpy as np from gym.spaces import Box @@ -28,7 +28,7 @@ def get_options(cls, env_name: str, types: Dict[str, Type], # top_bun_type = types["top_bun"] # bottom_bun_type = types["bottom_bun"] # cheese_type = types["cheese"] - tomato_type = types["tomato"] + tomato_type = types["lettuce"] patty_type = types["patty"] grill_type = types["grill"] @@ -50,8 +50,6 @@ def get_options(cls, env_name: str, types: Dict[str, Type], Holding = predicates["Holding"] On = predicates["On"] - # GoalHack = predicates["GoalHack"] - # Slice def _Slice_terminal(state: State, memory: Dict, objects: Sequence[Object], params: Array) -> bool: @@ -60,7 +58,7 @@ def _Slice_terminal(state: State, memory: Dict, return IsSliced.holds(state, [tomato]) Slice = ParameterizedOption( - "Slice", + "Chop", types=[robot_type, tomato_type, cutting_board_type], params_space=Box(0, 1, (0, )), policy=cls._create_slice_policy(), @@ -148,6 +146,76 @@ def policy(state: State, memory: Dict, objects: Sequence[Object], return policy + @classmethod + def _move_subpolicy(cls, state: State, robot: Object, + to_obj: Object) -> Optional[Action]: + rx, ry = BurgerEnv.get_position(robot, state) + ox, oy = BurgerEnv.get_position(to_obj, state) + + if BurgerEnv.Facing_holds(state, [robot, to_obj]): + return None + + # If we're adjacent to the object but not facing it, turn to face + # it. + if BurgerEnv.Adjacent_holds(state, [robot, to_obj]) and \ + not BurgerEnv.Facing_holds(state, [robot, to_obj]): + if rx == ox: + if ry > oy: + action = Action(np.array([0, 0, 2, 0, 0], + dtype=np.float32)) + elif ry < oy: + action = Action(np.array([0, 0, 0, 0, 0], + dtype=np.float32)) + elif ry == oy: + if rx > ox: + action = Action(np.array([0, 0, 1, 0, 0], + dtype=np.float32)) + elif rx < ox: + action = Action(np.array([0, 0, 3, 0, 0], + dtype=np.float32)) + + else: + # Find the path we need to take to the object. + init = BurgerEnv.get_position(robot, state) + + def _check_goal(s: Tuple[int, int]) -> bool: + sx, sy = s + if BurgerEnv.is_adjacent(sx, sy, ox, oy): + return True + return False + + def _get_successors(s: Tuple[int, int]) -> \ + Iterator[Tuple[None, Tuple[int, int], float]]: + # Find the adjacent cells that are empty. + empty_cells = BurgerEnv.get_empty_cells(state) + sx, sy = s + adjacent_empty = [] + for cell in empty_cells: + cx, cy = cell + if BurgerEnv.is_adjacent(sx, sy, cx, cy): + adjacent_empty.append(cell) + for cell in adjacent_empty: + yield (None, cell, 1.0) + + def heuristic(s: Tuple[int, int]) -> float: + sx, sy = s + return abs(sx - ox) + abs(sy - oy) + + path, _ = utils.run_astar(initial_state=init, + check_goal=_check_goal, + get_successors=_get_successors, + heuristic=heuristic) + + # Now, compute the action to take based on the path we have + # planned. Note that the path is a list of (x, y) tuples + # starting from the location of the robot. + nx, ny = path[1] + dx = np.clip(nx - rx, -1, 1) + dy = np.clip(ny - ry, -1, 1) + action = Action(np.array([dx, dy, -1, 0, 0], dtype=np.float32)) + + return action + @classmethod def _create_move_policy(cls) -> ParameterizedPolicy: @@ -155,68 +223,13 @@ def policy(state: State, memory: Dict, objects: Sequence[Object], params: Array) -> Action: del memory, params # unused robot, to_obj = objects - rx, ry = BurgerEnv.get_position(robot, state) - ox, oy = BurgerEnv.get_position(to_obj, state) - - # If we're adjacent to the object but not facing it, turn to face - # it. - if BurgerEnv.Adjacent_holds(state, [robot, to_obj]) and \ - not BurgerEnv.Facing_holds(state, [robot, to_obj]): - if rx == ox: - if ry > oy: - action = Action( - np.array([0, 0, 2, 0, 0], dtype=np.float32)) - elif ry < oy: - action = Action( - np.array([0, 0, 0, 0, 0], dtype=np.float32)) - elif ry == oy: - if rx > ox: - action = Action( - np.array([0, 0, 1, 0, 0], dtype=np.float32)) - elif rx < ox: - action = Action( - np.array([0, 0, 3, 0, 0], dtype=np.float32)) - - else: - # Find the path we need to take to the object. - init = BurgerEnv.get_position(robot, state) - - def _check_goal(s: Tuple[int, int]) -> bool: - sx, sy = s - if BurgerEnv.is_adjacent(sx, sy, ox, oy): - return True - return False - - def _get_successors(s: Tuple[int, int]) -> \ - Iterator[Tuple[None, Tuple[int, int], float]]: - # Find the adjacent cells that are empty. - empty_cells = BurgerEnv.get_empty_cells(state) - sx, sy = s - adjacent_empty = [] - for cell in empty_cells: - cx, cy = cell - if BurgerEnv.is_adjacent(sx, sy, cx, cy): - adjacent_empty.append(cell) - for cell in adjacent_empty: - yield (None, cell, 1.0) - - def heuristic(s: Tuple[int, int]) -> float: - sx, sy = s - return abs(sx - ox) + abs(sy - oy) - - path, _ = utils.run_astar(initial_state=init, - check_goal=_check_goal, - get_successors=_get_successors, - heuristic=heuristic) - - # Now, compute the action to take based on the path we have - # planned. Note that the path is a list of (x, y) tuples - # starting from the location of the robot. - nx, ny = path[1] - dx = np.clip(nx - rx, -1, 1) - dy = np.clip(ny - ry, -1, 1) - action = Action(np.array([dx, dy, -1, 0, 0], dtype=np.float32)) - + # We put the move policy code in a different function so that + # subclasses can use it. + # This policy will never return None because it only returns None + # when the termination condition is True, and the termination + # condition is checked at each step before this policy is run. + action = cls._move_subpolicy(state, robot, to_obj) + assert action is not None return action return policy @@ -231,3 +244,163 @@ def policy(state: State, memory: Dict, objects: Sequence[Object], return action return policy + + +class BurgerNoMoveGroundTruthOptionFactory(BurgerGroundTruthOptionFactory): + """Ground-truth options for the Burger environment with no distinct + movement options.""" + + @classmethod + def get_env_names(cls) -> Set[str]: + return {"burger_no_move"} + + @classmethod + def get_options(cls, env_name: str, types: Dict[str, Type], + predicates: Dict[str, Predicate], + action_space: Box) -> Set[ParameterizedOption]: + + # Types + # top_bun_type = types["top_bun"] + # bottom_bun_type = types["bottom_bun"] + # cheese_type = types["cheese"] + tomato_type = types["lettuce"] + patty_type = types["patty"] + + grill_type = types["grill"] + cutting_board_type = types["cutting_board"] + robot_type = types["robot"] + + item_type = types["item"] + # station_type = types["station"] + object_type = types["object"] + + # Predicates + # Adjacent = predicates["Adjacent"] + # AdjacentToNothing = predicates["AdjacentToNothing"] + # Facing = predicates["Facing"] + # AdjacentNotFacing = predicates["AdjacentNotFacing"] + IsCooked = predicates["IsCooked"] + IsSliced = predicates["IsSliced"] + HandEmpty = predicates["HandEmpty"] + Holding = predicates["Holding"] + On = predicates["On"] + + # Slice + def _Slice_terminal(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> bool: + del memory, params # unused + _, tomato, _ = objects + return IsSliced.holds(state, [tomato]) + + Slice = ParameterizedOption( + "Chop", + types=[robot_type, tomato_type, cutting_board_type], + params_space=Box(0, 1, (0, )), + policy=cls._create_slice_policy(), + initiable=lambda s, m, o, p: True, + terminal=_Slice_terminal) + + # Cook + def _Cook_terminal(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> bool: + del memory, params # unused + _, patty, _ = objects + return IsCooked.holds(state, [patty]) + + Cook = ParameterizedOption("Cook", + types=[robot_type, patty_type, grill_type], + params_space=Box(0, 1, (0, )), + policy=cls._create_cook_policy(), + initiable=lambda s, m, o, p: True, + terminal=_Cook_terminal) + + # Pick + def _Pick_terminal(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> bool: + del memory, params # unused + robot, item = objects + return Holding.holds(state, [robot, item]) + + Pick = ParameterizedOption("Pick", + types=[robot_type, item_type], + params_space=Box(0, 1, (0, )), + policy=cls._create_pick_policy(), + initiable=lambda s, m, o, p: True, + terminal=_Pick_terminal) + + # Place + def _Place_terminal(state: State, memory: Dict, + objects: Sequence[Object], params: Array) -> bool: + del memory, params # unused + robot, item, obj = objects + return HandEmpty.holds(state, [robot]) and On.holds( + state, [item, obj]) + + Place = ParameterizedOption("Place", + types=[robot_type, item_type, object_type], + params_space=Box(0, 1, (0, )), + policy=cls._create_place_policy(), + initiable=lambda s, m, o, p: True, + terminal=_Place_terminal) + + return {Pick, Place, Cook, Slice} + + @classmethod + def _create_slice_policy(cls) -> ParameterizedPolicy: + + def policy(state: State, memory: Dict, objects: Sequence[Object], + params: Array) -> Action: + del memory, params # unused + robot, item, _ = objects + move_action = cls._move_subpolicy(state, robot, item) + slice_action = Action(np.array([0, 0, -1, 1, 0], dtype=np.float32)) + if move_action is not None: + return move_action + return slice_action + + return policy + + @classmethod + def _create_cook_policy(cls) -> ParameterizedPolicy: + + def policy(state: State, memory: Dict, objects: Sequence[Object], + params: Array) -> Action: + del memory, params # unused + robot, item, _ = objects + move_action = cls._move_subpolicy(state, robot, item) + cook_action = Action(np.array([0, 0, -1, 1, 0], dtype=np.float32)) + if move_action is not None: + return move_action + return cook_action + + return policy + + @classmethod + def _create_pick_policy(cls) -> ParameterizedPolicy: + + def policy(state: State, memory: Dict, objects: Sequence[Object], + params: Array) -> Action: + del memory, params # unused + robot, item = objects + move_action = cls._move_subpolicy(state, robot, item) + pick_action = Action(np.array([0, 0, -1, 0, 1], dtype=np.float32)) + if move_action is not None: + return move_action + return pick_action + + return policy + + @classmethod + def _create_place_policy(cls) -> ParameterizedPolicy: + + def policy(state: State, memory: Dict, objects: Sequence[Object], + params: Array) -> Action: + del memory, params # unused + robot, _, to_obj = objects + move_action = cls._move_subpolicy(state, robot, to_obj) + place_action = Action(np.array([0, 0, -1, 0, 1], dtype=np.float32)) + if move_action is not None: + return move_action + return place_action + + return policy diff --git a/predicators/nsrt_learning/strips_learning/base_strips_learner.py b/predicators/nsrt_learning/strips_learning/base_strips_learner.py index 5258273396..5d3aa998ac 100644 --- a/predicators/nsrt_learning/strips_learning/base_strips_learner.py +++ b/predicators/nsrt_learning/strips_learning/base_strips_learner.py @@ -2,6 +2,7 @@ import abc import logging +from collections import defaultdict from typing import Any, Dict, List, Optional, Set, Tuple from predicators import utils @@ -315,6 +316,46 @@ def _induce_preconditions_via_intersection(pnad: PNAD) -> Set[LiftedAtom]: preconditions = lifted_atoms else: preconditions &= lifted_atoms + + return preconditions + + @staticmethod + def _induce_preconditions_via_soft_intersection( + pnad: PNAD) -> Set[LiftedAtom]: + """Given a PNAD with a nonempty datastore, compute the preconditions + for the PNAD's operator from a soft intersection of all lifted + preimages. + + Keep the preconditions that appear in a more than a certain percentage + of segments in the PNAD's datastore, as determined by + CFG.precondition_soft_intersection_threshold_percent. + """ + assert len(pnad.datastore) > 0 + threshold_count = int( + len(pnad.datastore) * + CFG.precondition_soft_intersection_threshold_percent) + lifted_atom_counts: dict[LiftedAtom, int] = defaultdict(int) + + for segment, var_to_obj in pnad.datastore: + objects = set(var_to_obj.values()) + obj_to_var = {o: v for v, o in var_to_obj.items()} + atoms = { + atom + for atom in segment.init_atoms + if all(o in objects for o in atom.objects) + } + lifted_atoms = {atom.lift(obj_to_var) for atom in atoms} + + for la in lifted_atoms: + lifted_atom_counts[la] += 1 + + # Keep the lifted atoms that appear as preconditions in more than + # threshold_count of the segments. + preconditions = { + la + for la, count in lifted_atom_counts.items() + if count > threshold_count + } return preconditions @staticmethod diff --git a/predicators/nsrt_learning/strips_learning/clustering_learner.py b/predicators/nsrt_learning/strips_learning/clustering_learner.py index fb0eae8dbe..7cbb9c6b6c 100644 --- a/predicators/nsrt_learning/strips_learning/clustering_learner.py +++ b/predicators/nsrt_learning/strips_learning/clustering_learner.py @@ -116,7 +116,12 @@ class ClusterAndIntersectSTRIPSLearner(ClusteringSTRIPSLearner): def _learn_pnad_preconditions(self, pnads: List[PNAD]) -> List[PNAD]: new_pnads = [] for pnad in pnads: - preconditions = self._induce_preconditions_via_intersection(pnad) + if CFG.cluster_and_intersect_soft_intersection_for_preconditions: + preconditions = \ + self._induce_preconditions_via_soft_intersection(pnad) + else: + preconditions = self._induce_preconditions_via_intersection( + pnad) # Since we are taking an intersection, we're guaranteed that the # datastore can't change, so we can safely use pnad.datastore here. new_pnads.append( diff --git a/predicators/settings.py b/predicators/settings.py index c3e9dfe57b..4dc482e377 100644 --- a/predicators/settings.py +++ b/predicators/settings.py @@ -356,8 +356,12 @@ class GlobalSettings: # burger env parameters burger_render_set_of_marks = True - gridworld_num_rows = 5 - gridworld_num_cols = 5 + # Which type of train/test tasks to generate. Options are "more_stacks", + # "fatter_burger", "combo_burger". + burger_no_move_task_type = "more_stacks" + # Replace actual rendering with dummy rendering (black 16x16 image) to speed + # up rendering -- used in testing or when debugging. + burger_dummy_render = False # parameters for random options approach random_options_max_tries = 100 @@ -420,6 +424,8 @@ class GlobalSettings: vlm_model_name = "gemini-pro-vision" vlm_temperature = 0.0 vlm_num_completions = 1 + vlm_include_cropped_images = False + use_hardcoded_vlm_atom_proposals = False # parameters for the vlm_open_loop planning approach vlm_open_loop_use_training_demos = False @@ -488,6 +494,7 @@ class GlobalSettings: strips_learner = "cluster_and_intersect" disable_harmlessness_check = False # some methods may want this to be True enable_harmless_op_pruning = False # some methods may want this to be True + precondition_soft_intersection_threshold_percent = 0.8 # between 0 and 1 backchaining_check_intermediate_harmlessness = False pnad_search_without_del = False pnad_search_timeout = 10.0 @@ -506,6 +513,7 @@ class GlobalSettings: # associated with their PNAD in order to not be pruned during operator # learning. cluster_and_intersect_min_datastore_fraction = 0.0 + cluster_and_intersect_soft_intersection_for_preconditions = False # torch GPU usage setting use_torch_gpu = False @@ -684,6 +692,7 @@ class GlobalSettings: grammar_search_vlm_atom_label_prompt_type = "per_scene_naive" grammar_search_vlm_atom_proposal_use_debug = False grammar_search_parallelize_vlm_labeling = True + grammar_search_select_all_debug = False # grammar search clustering algorithm parameters grammar_search_clustering_gmm_num_components = 10 diff --git a/predicators/structs.py b/predicators/structs.py index a27c20947b..a9daed57e3 100644 --- a/predicators/structs.py +++ b/predicators/structs.py @@ -1238,6 +1238,7 @@ class ImageOptionTrajectory: """ _objects: Collection[Object] _state_imgs: List[List[PIL.Image.Image]] + _cropped_state_imgs: List[List[PIL.Image.Image]] _actions: List[_Option] _states: Optional[List[State]] = field(default=None) _is_demo: bool = field(default=False) @@ -1255,6 +1256,11 @@ def imgs(self) -> List[List[PIL.Image.Image]]: """State images in the trajectory.""" return self._state_imgs + @property + def cropped_imgs(self) -> List[List[PIL.Image.Image]]: + """Cropped versions of state images in the trajectory.""" + return self._cropped_state_imgs + @property def objects(self) -> Collection[Object]: """Objects important to the trajectory.""" diff --git a/tests/approaches/test_grammar_search_invention_approach.py b/tests/approaches/test_grammar_search_invention_approach.py index e33e4815b3..14e1e96e27 100644 --- a/tests/approaches/test_grammar_search_invention_approach.py +++ b/tests/approaches/test_grammar_search_invention_approach.py @@ -233,18 +233,15 @@ def test_no_select_invention(): def test_geo_and_vlm_invention(): """Test constructing an atom dataset with both geo and vlm predicates.""" utils.reset_config({ - "env": - "ice_tea_making", - "num_train_tasks": - 1, - "num_test_tasks": - 0, - "offline_data_method": - "geo_and_demo+labelled_atoms", - "data_dir": - "tests/datasets/mock_vlm_datasets", + "env": "ice_tea_making", + "num_train_tasks": 1, + "num_test_tasks": 0, + "offline_data_method": "geo_and_demo+labelled_atoms", + "data_dir": "tests/datasets/mock_vlm_datasets", "handmade_demo_filename": - "ice_tea_making__demo+labelled_atoms__manual__1.txt" + "ice_tea_making__demo+labelled_atoms__manual__1.txt", + "grammar_search_select_all_debug": True, + "grammar_search_use_handcoded_debug_grammar": True }) env = IceTeaMakingEnv() train_tasks = env.get_train_tasks() @@ -270,6 +267,36 @@ def test_geo_and_vlm_invention(): assert approach._get_current_predicates() == env.goal_predicates # pylint:disable=protected-access +def test_select_all_debug_predicates(): + """Test selecting all debug predicates from the debug grammar.""" + utils.reset_config({ + "env": "ice_tea_making", + "num_train_tasks": 1, + "num_test_tasks": 0, + "offline_data_method": "geo_and_demo+labelled_atoms", + "data_dir": "tests/datasets/mock_vlm_datasets", + "handmade_demo_filename": + "ice_tea_making__demo+labelled_atoms__manual__1.txt", + "grammar_search_select_all_debug": True, + "grammar_search_use_handcoded_debug_grammar": True + }) + env = IceTeaMakingEnv() + train_tasks = env.get_train_tasks() + predicates, _ = utils.parse_config_excluded_predicates(env) + loaded_dataset = create_dataset(env, train_tasks, + get_gt_options(env.get_name()), predicates) + approach = GrammarSearchInventionApproach(env.goal_predicates, + get_gt_options(env.get_name()), + env.types, env.action_space, + train_tasks) + approach.learn_from_offline_dataset(loaded_dataset) + # Because we have not listed any debug predicates for this environment, + # no predicates will be selected. + # A better test would test this on some environment that actually has both + # geometric and VLM debug predicates. + assert len(approach._learned_predicates) == 0 # pylint:disable=protected-access + + def test_euclidean_grammar(): """Tests for the EuclideanGrammar.""" utils.reset_config({"env": "stick_button_move"}) diff --git a/tests/datasets/test_datasets.py b/tests/datasets/test_datasets.py index 65d2bbe74c..447898d23f 100644 --- a/tests/datasets/test_datasets.py +++ b/tests/datasets/test_datasets.py @@ -823,3 +823,60 @@ def test_create_ground_atom_data_from_generated_demos(config): vlm_dataset = create_ground_atom_data_from_generated_demos( dataset, env, predicates, train_tasks, vlm) assert len(vlm_dataset.annotations) == 1 + + +def test_vlm_include_cropped_images(): + """Tests creating a ground atom data with cropped images.""" + utils.reset_config({ + "env": "cover", + "approach": "oracle", + "offline_data_method": "demo", + "offline_data_planning_timeout": 500, + "option_learner": "no_learning", + "num_train_tasks": 1, + "included_options": "PickPlace", + "excluded_predicates": "all", + "vlm_include_cropped_images": True + }) + env = CoverEnv() + train_tasks = [t.task for t in env.get_train_tasks()] + predicates, _ = utils.parse_config_excluded_predicates(env) + options = parse_config_included_options(env) + dataset = create_dataset(env, train_tasks, options, predicates) + for state in dataset.trajectories[0].states: + state.simulator_state = {} + state.simulator_state["images"] = [np.zeros((32, 32), dtype=np.uint8)] + vlm = _DummyVLM() + with pytest.raises(NotImplementedError) as e: + _ = create_ground_atom_data_from_generated_demos( + dataset, env, predicates, train_tasks, vlm) + assert "Cropped images not implemented for cover." in str(e) + + utils.reset_config({ + "env": "ice_tea_making", + "num_train_tasks": 1, + "offline_data_method": "saved_vlm_img_demos_folder", + "data_dir": "tests/datasets/mock_vlm_datasets", + "seed": 456, + "vlm_trajs_folder_name": "ice_tea_making__vlm_demos__456__1", + "grammar_search_vlm_atom_proposal_prompt_type": + "options_labels_whole_traj", + "grammar_search_vlm_atom_label_prompt_type": + "img_option_diffs_label_history", + "pretrained_model_prompt_cache_dir": + "tests/datasets/mock_vlm_datasets/cache", + "vlm_include_cropped_images": True + }) + env = IceTeaMakingEnv() + train_tasks = env.get_train_tasks() + predicates, _ = utils.parse_config_excluded_predicates(env) + vlm = _DummyVLM() + with pytest.raises(NotImplementedError) as e: + _ = create_ground_atom_data_from_saved_img_trajs( + env, train_tasks, predicates, get_gt_options(env.get_name()), vlm) + assert "Cropped images not implemented for ice_tea_making." in str(e) + for dirpath, _, filenames in os.walk( + CFG.pretrained_model_prompt_cache_dir): + # Remove regular files, ignore directories + for filename in filenames: + os.unlink(os.path.join(dirpath, filename)) diff --git a/tests/envs/test_burger.py b/tests/envs/test_burger.py index 97b438410d..01400e4bcd 100644 --- a/tests/envs/test_burger.py +++ b/tests/envs/test_burger.py @@ -6,7 +6,7 @@ import pytest from predicators import utils -from predicators.envs.burger import BurgerEnv +from predicators.envs.burger import BurgerEnv, BurgerNoMoveEnv from predicators.ground_truth_models import get_gt_nsrts, get_gt_options from predicators.settings import CFG from predicators.structs import Action, GroundAtom @@ -84,7 +84,7 @@ def test_burger(): grill = [obj for obj in task.init if obj.name == "grill"][0] patty = [obj for obj in task.init if obj.name == "patty"][0] robot = [obj for obj in task.init if obj.name == "robot"][0] - tomato = [obj for obj in task.init if obj.name == "tomato"][0] + tomato = [obj for obj in task.init if obj.name == "lettuce"][0] cutting_board = [obj for obj in task.init if obj.name == "cutting_board"][0] cheese = [obj for obj in task.init if obj.name == "cheese"][0] @@ -177,6 +177,12 @@ def test_burger(): ]) in utils.abstract(traj.states[-1], env.predicates) + # Test _Clear_holds -- that a held object is not clear. + Clear = [p for p in env.predicates if p.name == "Clear"][0] + assert GroundAtom(Clear, + [patty]) not in utils.abstract(traj.states[9], + env.predicates) + # Test get_cell_in_direction x, y = env.get_cell_in_direction(1, 1, "left") assert x == 0 and y == 1 @@ -208,6 +214,10 @@ def test_burger(): env.render_state_plt(traj.states[0], task) env.render_state_plt(traj.states[5], task) env.render_state_plt(traj.states[-1], task) + # Test labeling when a cutting board is not in the state. + no_cutting_board_state = traj.states[12].copy() + del no_cutting_board_state.data[env._cutting_board] # pylint: disable=protected-access + env.render_state_plt(no_cutting_board_state, task) # Test interface for collecting demonstrations event_to_action = env.get_event_to_action_fn() @@ -275,3 +285,176 @@ def test_burger(): # purposes. for _ in range(50): _ = env.get_edge_cells_for_object_placement(rng) + + +def test_burger_no_move(): + """Tests for BurgerNoMoveEnv.""" + + utils.reset_config({ + "env": "burger_no_move", + "option_model_terminate_on_repeat": False, + "sesame_max_skeletons_optimized": 1000, + "sesame_max_samples_per_step": 1, + "sesame_task_planner": "fdopt", + "burger_no_move_task_type": "combo_burger", + "burger_dummy_render": True, + "seed": 0 + }) + env = BurgerNoMoveEnv() + task = env.get_test_tasks()[0] + assert len(env.predicates) == 13 + assert len(env.goal_predicates) == 4 + assert len(env.agent_goal_predicates) == 5 + assert len(env.get_vlm_debug_atom_strs([])) == 3 + rng = np.random.default_rng(0) + assert len(env.get_edge_cells_for_object_placement( + rng)) == (env.num_cols - 2) * 2 + (env.num_rows - 2) * 2 + + # Test _OnGround_holds + s = task.init + patty = [o for o in s if o.name == "patty1"][0] + OnGround = [p for p in env.predicates if p.name == "OnGround"][0] + assert GroundAtom(OnGround, [patty]) in utils.abstract(s, env.predicates) + + # Test the GoalHacks, but not that rigorously, because we will likely + # change their definitions. + abstract_state = utils.abstract(s, env.predicates) + goalhacks_to_check = ["GoalHack2", "GoalHack3", "GoalHack4", "GoalHack5"] + for atom in abstract_state: + assert atom.predicate.name not in goalhacks_to_check + + assert env.get_name() == "burger_no_move" + options = get_gt_options(env.get_name()) + assert len(options) == 4 + nsrts = get_gt_nsrts(env.get_name(), env.predicates, options) + assert len(nsrts) == 5 + + Cook = [n for n in nsrts if n.name == "Cook"][0] + Slice = [n for n in nsrts if n.name == "Slice"][0] + PickFromGround = [n for n in nsrts if n.name == "PickFromGround"][0] + Unstack = [n for n in nsrts if n.name == "Unstack"][0] + Stack = [n for n in nsrts if n.name == "Stack"][0] + + grill = [obj for obj in s if obj.name == "grill"][0] + patty = [obj for obj in s if obj.name == "patty1"][0] + robot = [obj for obj in s if obj.name == "robot"][0] + lettuce = [obj for obj in s if obj.name == "lettuce1"][0] + cutting_board = [obj for obj in s if obj.name == "cutting_board"][0] + top_bun = [obj for obj in s if obj.name == "top_bun1"][0] + bottom_bun = [obj for obj in s if obj.name == "bottom_bun1"][0] + + plan = [ + PickFromGround.ground((robot, patty)), + Stack.ground((robot, patty, grill)), + Cook.ground((robot, patty, grill)), + Unstack.ground((robot, patty, grill)), + Stack.ground((robot, patty, bottom_bun)), + PickFromGround.ground((robot, lettuce)), + Stack.ground((robot, lettuce, cutting_board)), + Slice.ground((robot, lettuce, cutting_board)), + Unstack.ground((robot, lettuce, cutting_board)), + Stack.ground((robot, lettuce, patty)), + PickFromGround.ground((robot, top_bun)), + Stack.ground((robot, top_bun, lettuce)) + ] + + option_plan = [n.option.ground(n.option_objs, []) for n in plan] + policy = utils.option_plan_to_policy(option_plan) + traj, _ = utils.run_policy(policy, + env, + "test", + 0, + termination_function=lambda s: False, + max_num_steps=CFG.horizon, + exceptions_to_break_on={ + utils.OptionExecutionFailure, + utils.HumanDemonstrationFailure, + }, + monitor=None) + assert task.task.goal_holds(traj.states[-1]) + + # Coverage for move part of slice policy. + # Put the lettuce on the cutting board and have the robot move to it when + # slicing. + s.set(lettuce, "row", 0) + s.set(lettuce, "col", 3) + s.set(lettuce, "z", 1) + plan = [Slice.ground((robot, lettuce, cutting_board))] + option_plan = [n.option.ground(n.option_objs, []) for n in plan] + policy = utils.option_plan_to_policy(option_plan) + traj, _ = utils.run_policy(policy, + env, + "test", + 0, + termination_function=lambda s: False, + max_num_steps=CFG.horizon, + exceptions_to_break_on={ + utils.OptionExecutionFailure, + utils.HumanDemonstrationFailure, + }, + monitor=None) + assert traj.states[-1].get(robot, "row") == 1 + assert traj.states[-1].get(robot, "col") == 3 + + # Coverage for move part of cook policy. + # Put the patty on the grill and have the robot move to it when cooking. + s.set(patty, "row", 0) + s.set(patty, "col", 2) + s.set(patty, "z", 1) + plan = [Cook.ground((robot, patty, grill))] + option_plan = [n.option.ground(n.option_objs, []) for n in plan] + policy = utils.option_plan_to_policy(option_plan) + traj, _ = utils.run_policy(policy, + env, + "test", + 0, + termination_function=lambda s: False, + max_num_steps=CFG.horizon, + exceptions_to_break_on={ + utils.OptionExecutionFailure, + utils.HumanDemonstrationFailure, + }, + monitor=None) + assert traj.states[-1].get(robot, "row") == 1 + assert traj.states[-1].get(robot, "col") == 2 + + utils.reset_config({ + "env": "burger_no_move", + "option_model_terminate_on_repeat": False, + "sesame_max_skeletons_optimized": 1000, + "sesame_max_samples_per_step": 1, + "sesame_task_planner": "fdopt", + "burger_no_move_task_type": "more_stacks", + "burger_dummy_render": True, + "seed": 0 + }) + env = BurgerNoMoveEnv() + task = env.get_test_tasks()[0] + + utils.reset_config({ + "env": "burger_no_move", + "option_model_terminate_on_repeat": False, + "sesame_max_skeletons_optimized": 1000, + "sesame_max_samples_per_step": 1, + "sesame_task_planner": "fdopt", + "burger_no_move_task_type": "fatter_burger", + "burger_dummy_render": True, + "seed": 0 + }) + env = BurgerNoMoveEnv() + task = env.get_train_tasks()[0] + + utils.reset_config({ + "env": "burger_no_move", + "option_model_terminate_on_repeat": False, + "sesame_max_skeletons_optimized": 1000, + "sesame_max_samples_per_step": 1, + "sesame_task_planner": "fdopt", + "burger_no_move_task_type": "fake", + "burger_dummy_render": True, + "seed": 0 + }) + env = BurgerNoMoveEnv() + with pytest.raises(NotImplementedError) as e: + task = env.get_test_tasks()[0] + assert "Unrecognized task type: fake." in str(e) diff --git a/tests/envs/test_cover.py b/tests/envs/test_cover.py index 575f6b4b22..44f3695ccc 100644 --- a/tests/envs/test_cover.py +++ b/tests/envs/test_cover.py @@ -780,5 +780,6 @@ def test_debug_atoms_vlm_str(): 'Holding(block1)', 'HandEmpty()', 'IsTarget(target1)', 'IsBlock(block0)' ] + gt_debug_strs = [[a] for a in gt_debug_strs] for debug_str in gt_debug_strs: assert debug_str in debug_atoms_strs diff --git a/tests/nsrt_learning/strips_learning/test_clustering_learner.py b/tests/nsrt_learning/strips_learning/test_clustering_learner.py index dcdb3f350b..a6aee2961b 100644 --- a/tests/nsrt_learning/strips_learning/test_clustering_learner.py +++ b/tests/nsrt_learning/strips_learning/test_clustering_learner.py @@ -253,6 +253,51 @@ def _simulate(s, a): annotations=None) assert len(pnads) == 0 + # Test cluster and intersect soft intersection. + utils.reset_config({ + "strips_learner": + "cluster_and_intersect", + "cluster_and_intersect_soft_intersection_for_preconditions": + True, + "precondition_soft_intersection_threshold_percent": + 0.6 + }) + s4 = State({obj: [0.0, 1.0, 0.0, 0.0, 0.0]}) + a4 = Action([], Interact) + ns4 = State({obj: [0.0, 1.0, 0.0, 1.0, 0.0]}) + g4 = {IsHappy([obj])} + traj4 = LowLevelTrajectory([s4, ns4], [a4], True, 1) + task4 = Task(s4, g4) + segment4 = Segment(traj4, utils.abstract(s4, preds), + utils.abstract(ns4, preds), Interact) + pnads = learn_strips_operators( + [traj1, traj2, traj3, traj4], [task1, task2, task3, task4], + preds, [[segment1], [segment2], [segment3], [segment4]], + verify_harmlessness=False, + annotations=None) + assert len(pnads) == 2 + assert len(pnads[0].op.preconditions) == 1 + # When we take atoms that appear >= 60% of the time as preconditions, + # IsGreen will show up, because it occurs 2/3 times. + assert list(pnads[0].op.preconditions)[0].predicate == IsGreen + + utils.reset_config({ + "strips_learner": + "cluster_and_intersect", + "cluster_and_intersect_soft_intersection_for_preconditions": + True, + "precondition_soft_intersection_threshold_percent": + 0.7 + }) + pnads = learn_strips_operators( + [traj1, traj2, traj3, traj4], [task1, task2, task3, task4], + preds, [[segment1], [segment2], [segment3], [segment4]], + verify_harmlessness=False, + annotations=None) + assert len(pnads) == 2 + # Now that the threshold is 70%, there will be no chosen preconditions. + assert len(pnads[0].op.preconditions) == 0 + def test_cluster_and_search_strips_learner(): """Tests for ClusterAndSearchSTRIPSLearner.""" diff --git a/tests/test_structs.py b/tests/test_structs.py index 9dc2084b56..efd45d20d9 100644 --- a/tests/test_structs.py +++ b/tests/test_structs.py @@ -7,10 +7,11 @@ from predicators import utils from predicators.structs import NSRT, PNAD, Action, DefaultState, \ DemonstrationQuery, DummyOption, EnvironmentTask, GroundAtom, \ - GroundMacro, InteractionRequest, InteractionResult, LDLRule, LiftedAtom, \ - LiftedDecisionList, LowLevelTrajectory, Macro, Object, \ - ParameterizedOption, Predicate, Query, Segment, State, STRIPSOperator, \ - Task, Type, Variable, _Atom, _GroundNSRT, _GroundSTRIPSOperator, _Option + GroundMacro, ImageOptionTrajectory, InteractionRequest, \ + InteractionResult, LDLRule, LiftedAtom, LiftedDecisionList, \ + LowLevelTrajectory, Macro, Object, ParameterizedOption, Predicate, Query, \ + Segment, State, STRIPSOperator, Task, Type, Variable, _Atom, _GroundNSRT, \ + _GroundSTRIPSOperator, _Option def test_object_type(): @@ -792,6 +793,33 @@ def test_low_level_trajectory(): traj = LowLevelTrajectory(states[:-1], actions) +def test_image_option_trajectory(): + """Tests for the ImageOptionTrajectory class.""" + # This setup is copied from the test for the LowLevelTrajectory class. + cup_type = Type("cup_type", ["feat1"]) + plate_type = Type("plate_type", ["feat1", "feat2"]) + cup = cup_type("cup") + plate = plate_type("plate") + state0 = State({cup: [0.5], plate: [1.0, 1.2]}) + state1 = State({cup: [0.5], plate: [1.1, 1.2]}) + state2 = State({cup: [0.8], plate: [1.5, 1.2]}) + states = [state0, state1, state2] + action0 = Action([0.4]) + action1 = Action([0.6]) + actions = [action0, action1] + + def make_img(): + return np.zeros((32, 32), dtype=np.uint8) + + state_imgs = [[make_img(), make_img()] for i in range(3)] + cropped_state_imgs = [[make_img(), make_img()] for i in range(3)] + objs = set(state0) + img_option_traj = ImageOptionTrajectory(objs, state_imgs, + cropped_state_imgs, actions, + states, True, 0) + assert len(img_option_traj.cropped_imgs) == 3 + + def test_segment(): """Tests for Segment class.""" cup_type = Type("cup_type", ["feat1"]) From 8b9420e61488ca7aa06adf68a1b275cbcb0ed9c2 Mon Sep 17 00:00:00 2001 From: NishanthJKumar Date: Thu, 22 Aug 2024 12:00:00 -0700 Subject: [PATCH 38/38] try updating codeowners to see if checks now run --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 29ec3570f0..58c6725365 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # Default owners for all files. - @NishanthJKumar @wmcclinton \ No newline at end of file + @NishanthJKumar \ No newline at end of file

a>YjHT9utcyRoJ=IWpWt{|Anc%S&8d{8Lt! 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 Hu0mjfR+gDI literal 0 HcmV?d00001 diff --git a/predicators/envs/assets/imgs/realistic_cooked_patty_full.png b/predicators/envs/assets/imgs/realistic_cooked_patty_full.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4e175caaf93aec80496babf6c6201f58fa1757 GIT binary patch literal 211345 zcmdp619N3f6TaDvZEtLCaFdOV8*5{1Y}?7kzOn6WY}>YNTN{7-{*ABeOr5Ifo~b&g zr>CEJro$BEB#_|o;Q;^uk|an}2>^gF`>(-5|LgHM&|moXf;1J96#@WizzA>pPyhhD zq`8QQf}@gzFo~p?2nP!n2L~f76AJ(U3d>Y>RgZtd=HGfUMo|@BzOG5O`VAl>FNYmQ z)yPAQ1Ly~$q6-cLg~F?1VxeV#RQmlF;6a(8yE!z?rb6MNnh`46oR`Gw#SPvbR~Hwr zORw!m8AorE?o%j!Xy{b2hj|tNE~Ow|?qy=IJg9%9!|w|gXd99Q^>D1$6lwqfxc=(y z=HpZ?@CH$33-|)CTVSFM z0svs;?j=kH_=5yEznA2P0xXxtuj2rg^9V~}0Z|ZuR2m72FM@3VJ(b@|3}3o?0XgM@ zWK59Vl@NX!jjR%1{5qfjF45{SD1v$bzf@s{aR3SD7k~&6#>7_=nXfs_vt8SzzwCmV zK@foMvBZgF=~*_+=EP}y*W2suUDDlNs~TZ_99mQpxP7vWV6>a!}8jejGy#o>!UsL3nTzlZt80F*TKQ!SGysIYUeJ?QZ2x$ zD!^>(S%+;6E=Lo7+T%IGo%2nQC@WWCnD-kYJOaW6r9o~7^Iio1C)0Bb z-1cBNNTFd^41H4WP&9++WwJ?FoYZJYGJOy*&aZ&vBotGTY+%@-;7h5nMXU~p{Fc!H zlPgMF@Fiw#n1nU_ExcWVCE<6i;@9~v&Vnr^#Q5QZIgT?N4sgC6wpn_2{jzYH$I8EWOlZ@g?&0lpg5M{cZ-_H8JYq-F|3jZl9r$~5MzOI0skzjd4>$tS&a3_=00q#UpYx~ zY*P$MjC|bdNZ)=FCig(-t_)lrg;GHRx)i&yzyV}oHmh)I&L72z(yV#dKcU>&nv&Kz zE(+h3LrO7#&S{hr>DVG;1&sL%(`n|W=1*qdPn=reHUfymlBbhrEstSNj!pvZT@jIj zkphN51~hncWc-s$b6-EK_6+v}&KvWn7?M30%H=$|#FC z{xK;xi8aYQw4Z=L9<15E=32>+nk1b>n)GD+$|%5CvuIIaQsGnaW7T7|bJgI&;R5^O zZ1u|7E>kd*A@hOTn)}Hau9c%zu{Ef5&3WpSf6nmC{RHk|^a1%~V@Be^`ab^w=k#jv zYKHg+GZ2;|2G5Fx)9`vc#_-rO#k_guI&h~1ZOp7Sw%;s&Mlzqend&mcbdTK)hu@^! zme8OaxM{p@$*XT*&bn66Uof!WNjs5XnP$>DQ$Oc4K0eH_UcOvDavsgKkYSmn-?`Gh z_7)XXD3&oG6~PfPl(d@UH3pR=oAgwkqROx8uKJ+5R4%!wea3KRy{KlTK%kb6n9iL( z)>u-JUeWK8ZoP%MiwUNkrF~GgS!FqYJBL3{JBPmDdencUe6)U?`Zi98{%w)RiO0*q z$$8wx%C7yaUe&PI8|`pHv^1x2#v5 zm$7&7->x0^TkIP-C_RWChy#d@-}t}lzFK}IhD?Plgkgt@f@*{Qj>wNCj0lIMLF^E3 z+l_Ne@NCGoZpx50gEb19iKR*K!aPnTL$rt%9XtiQh3aEl^el5S-Uu7IEnyYfOl*#q ziu3G^NlVB2hv`(YUfIds>4{;nd|%_$v?KZkTpHQJvu4rg;9^>CVWnhcc%I(u*ZimX zw_C_xv72OcCkzU>i?IFv<$k`fJ;yIcR%vV*`)NOuoD3@u*7I6$4o@b>vRrvJ*fnCj zID=BqlWPSI0!V}vzT?Ut6x+yt!?+Dh50V$_%!|rXtZ8bN;*C4ZR84&3+~DyRc`*x? z7k3_HgOgXHcaO!3YazdrRTW*_ET3AjUt#1*$VkY@S3)vRs;6IKZlYqjh4;g*hCx3RlTf?#nl9|b`SE^J%#+LbBLhq)9tL4@V>HulZvu&AtoIaBy_+xu@ z#8fLZSJy2!yJ_5PlXZ!;VUtHF$<$f70lxlIpM!T9^*LMyepVi8>(oWi7SolpF*@;; zU7!6zYrL_1?KYPq|Is7US7%K1y`rqCbA@Vkv1`NC^A0)S8y3&zRl<3D1HGG?Wrvve zgU#%v{{|S}fS|SO&}XAr!c~4C3+!3w3G*m+b!OpYYqeh0)l~~;t;7*U1md{U*`b^yzcOvS;W##12-=%E_eRyLsOCkKZdcD$dH36X2UqU3Y(yc}um_QPk-$ z6`9Hsz;U{iY5Mgva<_Q|*12xCyC-`xSfgx`uHdWWlkl;7-vL!=*`66cja{hmRyy6w zp7G3F&H27qbT2qA{as?x$#(C!8ayXxvZ2}_Y^H2|`0Mg`f#V8)DYLHQ0d}i;>s)<5 zg?T|a^{xM?G48hB{;SumH`S+sa)k^RlJ$}BITx}sD={vyKrT)m1G5XzD9VCnChx@FTHcPDl4tx9wHwiZl84LyD56B zm|XL|YQAdS8tNcUrFj$lP`I0UF&rwMmVe?u^7?rD{uFrk$|%7(^$%o{7=n~!|3OYF z0KhL00C@S=<#!AKI5PtPr+NSYcM1T2W0%pY$oo$LX9v=71OS-G|7#F#g#s>suS~U) zqC!92GS1&kV+vQix7>ZE_Of5KZD-T}F#OV4=$wfX&xe!t7cZcRML#HnOU<0IF_R#u zA^7*?ZnzQyaF zgyYnI0xr=Iocd?rB|7oN-@6*89axkLEZm1g~a^-?G(mu|NW;( zk1H_mlmZ=$;2ffpjs%31$^P@m5>lTa>`mKe=gUTuuL2XK1~RLBjnh{V96!+!84zu( zl0izN@G*!4CNS<;`1en<)pKjsyFM1rgNe84QbJU85j8&mDIiD*K0$C!j_E!@i8!!M z=~Sf2_tQ@f>llBzHH>6o82vku^HJ}J9m~{gf4bHxN4=5+ZYAX2eyx%jjo{q=$opUK zw{4Wj)Kmewe@=PMox4Zj$0`{Yq6=eI{vC7Wt4vE-kYJWp6o^XP8HM`R33mz$6f()3 z<$Bw}2zU?4KDo5=VSRjcOe$)X>bMtEvGH1ATIwu|6ppsZv1~;b%sLXDi`){(H8uJ8 zH2UX$0WbJCX5e7{<&cQ)eVo#0?Z#}TLFvb|ONVYkAf2r8H`K~A@g(B`!9V6{^FUeJ z2O&Xv5~$iI8!bWd$B?6NBDT{EaRb@?#tc1=4dTG{RCt5))^H_sS0{!np4%s?LIp zTWyBCpGVBvFIy|=oseWjf+REKEL<#_p(q)KA_L|}X9+i$ za?Ysqnb{d)4>dSv-xY~v2i%Oo{@AHAz|v4Nbu{rj?WKgh5fFxwBHdzfQE5Vv-7N*% z>t0yW085K$gi?$62wgs;SuoN9qO{ELPdVVpNh7p4cAOl{K7KEdWww&Wn2b@@x*@kM zX_ip!RGf?Lp;oC?dStS=F?LCoEgO8R*LO9L>^Il2xO)Y=(N13n>JUJk1tQ7%c2zPd zO6A>n!qle(-GS>@U_A~|g#4ARoYlO16EgOxlMkV}ip)C&q%cV=>B1_Bh%bFl|LQ#{ zyI<|><)~PX&9J6o4ABb1YE}eWEfPH2=UG;skrmDxCBf;i$$#*Xgp(C@=5-qXYl{!L6xBRljc zWfm+(2~Pd14E;`&7CBRw0z_m6Mgi4A=lkigKo1!t(bHD(;@)zpMbfwwp%xJq4QV*x z#QjEWOj*CyT`H}<$|I8^6 zZr_3`MmT>G_g6ackC%gI!E?$cb_Vlj%e`jHz0F|lfVEm}@=*Jg{F$ryl06#y60+1R!gaC=(1QIs0((wo#3;IjF-UBxGNMz9(@w0NP?aGOt&u@c&>-%gCKuMANz#SY}k z3Uw%})B=@cP58WapbEtg8LQ&q63@`ev-+guSejj+So|H31G^MKi0en`;;30skV?5e zw^)V@x&#K|TCh+02G3K93>Bs}&RU}+kIvgBplpRCLm;9QNS6q2(<8D%B$PtZ9+Rd+ zZX#@eRkMzts02Z3INL0NiYy5XLJj8)!*fQyhVibcZZA;l_`@MLpEzPiQ%mziSj>Ec z4gaLQbVdUkDELMAH@fi64pj`wQB49msfq0zu}Yn(&mqcw%BrMV@MweCH2)C__ms)b zeh@GtE9y&^P3yqZ+1!A?IfrzEgQQ7m;?VCTiW+qt9n+)jP+;=-!l_v=3E^Yd8*Ow^ z>>)I(+I}k8wamWtOJYzJhHfd%eSZI#sbM!Z7d3;0`~RNVS?f_EE>Y~v8oZ%`(^-m(93Dv z^)kpX*e#g2rQ(<{nDFotAgXwd*S5C59XbWGv`g5-j+qSc3=9kkjB3nxnASdMsYRH4 zC=>HxWZ6dCRF5Iebh);escjyqw=b+ScA|lKdP|by8JpGeoxWhDGARQBnL&}+Ud-ZF zf3;FSsuG-ZSVr=R;=mi&GKD;Cog9+Uz}!5}59ih)80xV;+L^VfutZtohrANEtdpXE zx%?3~XHHyirjgrWmySNA!glkvP4YhG#t8>Q2`TrIgf!e>H124O(_l0}O+w48lVj4X zK%Pl_;3wSkwd3;#s~IU|2_hP?MS3ZY#E2DXnt?zdyyl#6ZuokgjIK#iNvP&jfq`e4U}_I*3^$1N2hpXX zCBw|0B)9uZg7bABm<4aYA`Q%NB=ox8-9adW#CXcDQpkTXBz;%&HJEO;*R~G-uJUB) zX!Prp&bB*+OP#@ywS}r?O3Wc}YE0^V@(UB_C1cjQy$S% z!Y>RanXmA4SEBBA-_w!L+4I1Q6x|xFyuiF4pB7+U^+|7U{V3D<9Qi>Y^hv$_x&d*$ zleP9FV4@MNze)^w2Qwf~i3SRU4ks+c)X12>W5@!Fe4g7)`?zqPcc~vYWP|+e^AFPS zDJ77gb6~ zIz6K_4>33vX}R#R*1DM?JvMWdY|zc`FzHk*6a)E~@=wrhjiH);7#W?(po0eC(s1`BbYW0-%=79__FC6EYMD*ab(nx z9fzI>b1>rO)#>VV-|II0Zk`CKHqzU|nUXShBk0bm-?<=)6L(PoBWy&gQYFe8^)JM= zf7szW?k9~rW?BLpB2Dsx%O?ycvj^h}!R%wDO`wkqt)b@f_)ay3;f0l>#e#)q7{bppI#dbN za6bA={JHpvb#_Re!7K8e`!8tMy!Y=Z-4Xw@;m^rm`|G3765z|eRCt222;3Uk7>Z>m z93vTgS!P*`iHhx{GdhG|*5p;mrSNK&On=sL;k<-XYJ2X?#Y4IDx(kvjvwf)mVN2)4peA{itwlzsh=xuY8x6H#ZR?n!Ifn>L&#`* zqiD1B{bn6Qf|zWo+X|xl;{*nC^79|AuhcC^N9=jfRLLZ9z;bNm*y5zN{iTSSJDMIc zZ0#^y=grl)ql6pWn? zB}F-V%&z9#@3AZ6>aiDTIpo+zb@D1~_qZsvhe)Cg9q?jB$%zQ96zgP9btm0SyD$Hu zCDEF#!4KU`3lGFCkkFvG-@PzBzHjy4>h93rBsk^w{Ce~K%*J#1YL!Z&xUV6D9X%aZ zGe$%=o>Gv@ETi^aWt1kDg)pf9H`rRU)w~&@;8_@3J`z+Uz>d{>O_!?QI#2~KJ0(ay zK~eM%k6trmd>W-g-DfKhcizUbzHUd+97xJOziK%hmT2oAL#F|91Eerm@E(70uWmg* zPu}dvo9$h$oS2yz-(W5&fKpLqBuapT98Pg0`nWQsjNcWrY|#Nf$1pjP%*Fz_<_zaE zt82Y}7cNjqfNf&`;3giP+g|7;V^}FO6Gi=9bk#j5EzZ*43&T0KSp)?S{YB9oxZ_>q znB1NxIA$d~u4jP~^$|y>z^r9O^V27D5W}ZPX%*vM#2sP@j;vmQ#Y0pqB7swW2{Yim zFD>VnBPvQ5g=+U7IM$1>?X;_j5VN_GeJYDlB zNd{s~J#M~PZuM|opdyvsXn35OC|%|ajUFoz{2VM2sgqToLK@X6T?BtNw6erpeUd)z zmLS_Bd+z>gRR~IQ3%`|W#7DgJC(P$I@jp_cZ`?PBI0G^8X|-;XfE|I9zq!I3zqLrt zVgiKj>+r|7{nJr`C*8NMt?9jPPRLUhVX#$(oKU)0m1(DyNqET~-uTZ0RQV!d(6iXN z!&iN*VWr`@1b<`wGwAq}1Svy^V)bISTMaH(qN+`jaJE}!VK%4JM6ycD*~|NwwBN=! z!)#(HCYZcn*mP|Z!Y$wAlS%7cNt~UZxMx`Kbb@2b^*}Lc^4*b8GhT`tYRGpcdm{ZY zTr|kYSMNamT{ogEEx`e}4XrEIWslGpfAfqODY3Lcw;~GsZ>U%4kov*IvZ?fGgugrk z?4I~#sZE#Lz&}+yetAS>y4qe}&!DC1>y;2HR^I%}oTxC|>2t^d_5>O+$F0364s=tz zBC}}{k;vvif&^Xy-+4-SaS}*8?i8lPAhvxaa#=@)x!zh?AY@wZ4mT6N)N+v|W>C;f zjw{pkdzm>Q6X5s7Do>7Y_0~`bHG=OHpP=~N63_jvSH0~y8aw!s}~t~{_X|uA7krtg{9fR{fe@dQJaMO%~diO&WDrI zA-AXvaqufL`0;t_WAiiX`$t!&&_dO&x|owlACRE{vtYKnZY<%?9ppzKMM{h@OJk`a z50x2o8Wn62OKW8W5E+iT^Q1QjRb%SbYouYKMYQ=B8=_&(nFsP4PkcX{ufxQb7x|PY zk!ROr&H}(a?^GsDI74AVQqjM2E#Fuz)y;9~`}_M;BMQndGU+92*|b)f8PVt>ilgsY zeK&+MOQeD*J3^hGs(&~h`S4v*YsFh_w3b|Ym@&00fDu*2g0oVZEDsPE%R zJ0yNwbFZcB0r=S5-xJRei@9yg!)_*B-R`*O%TzW$91^3z0t1HMKcG5a3VlZqqPcTQ`d7@7xSreHjnqCf!)c-5z0(v>9}&$l1u4+xMmV%zhtO2zNkGYS0P8;R-xj@@Ls6m5pFHN3%gKUJT8%ee!#nHm)L}W z9-$b6u21;rsypx3(<>YOVe*7C)C69-1G4-{mI((uCV@WN%~p{MxAYB394!mX*^Jj; zuVe=nVR^CniFzw7y)=s_#25J$lV~3JFcL%ae~>JcL@?r{RC5mJ;TRx-g(%}?LJXA{ zZb2exBvSaIEIzNHQn`^b-;^r+xSFRZq*r`Vt8>(D*5GV%++Hs{6DD-BYI#L9a{T=+ zdSb5L&ln%OZe_KlnYjwxc89W#wmu%qGPs?wj%>BJCsxr>K2HROBt>@Jd#;a(bTx(f zI(kLxHPG4pH@^|SyDmR761zHoOZ(ovg9N_-uUR-Sn`jD3OXli)T~n{1G^m&~d4iz7 zV?Rw)UUz@6OvprQ6fM=1SxmkXg0|{7BDaHphuL zP}7Q#{xzd>#a@U9p0<*W4c9JJ9~!6hrL$uftLH&w2{5Kz=%7dt{RH3sG_K= zEA(|UVLt`~F5c-CbAQKO>7-d)S(oI;(xax4NMhY~jF6163Lc(cUA*wkgKJPTfsM#(PH@Wud+Bw?eB-71nhHBvJS0 z^Uo<}b1EksEnTx^26b4vsSdw?peY(>Mh)=?oGrRJ-Ql+lxzd_o0Q(HkMPYN%UNBZ+ zcoKBdO|w0r*KANJX<=TUR&H0XkS{(yXmNFE-UMj;;0*xOUQ z#xB?73N5Ynx{YF*ZHL2{LVlzQ!7YFCRR2I9!ngujN3eKgRk`CMwXVUg!_;J0byDUshH`Cvr|J+5U48op z_#0q8-!OA8E;}-)n6%P*N8Ssuub%;@1}6y?fhgZTd)>*7&bbySMoDUt6=ug-T@S1a z7OwF--mwczi{@4lsg?z`dyTnVZwOe+4GO?83FQm51^@30nCS;rbQyWM1dwXy2h+r@C{Kz-IzuJ-q1~( z-E}$J*d(Yb`8+sF z(f0R22rU=aEOu*@&&=i0V^JxKCd3usr545)ptTSirV^2I%d`c?L$qA6ogkgm!w|Xz z^R5aQ9W_q{RLd1M26M2xy(U^hW&+qk>K5qe#zM!$9>d%`(ODOBsr6aaj4;K3#VoE* zE}RYaY3uSdcuWp0lR??lBTwr+Ll+9ynWxUtOE2($*`+jh# z)~7Uey;Dk=XR{?&&hqf@Zo2wLY)d<=vN=D5KMqrxCy?)*rc=*2smCt8}|^@oDTVTiu!?q661C9-}`YbD{&4}-X; zO@e4-b9AgY8g;q1oq>@YSN1UfG5k}nfy2nFqe2QfcGARS%5UrJ6iR9uG1A9g=SXC^shJPJnj^0X)vhlh2FYM8-1NSxfu1J|xK z=d67jJZ_T0r_1*q-r=b^%PEF#?GlxqypR3L+HKA_iC4MQaRUR6<&BfIjkmmMPsY*6 zE;r6@R_}0hQTQ&3(<#4lRIAXR;oMV{=zsRuDFjbaL^C5Pn2$H}bnDnnBZyg%i>ZG} zJ%vo|>7g*SO>lJmaahep(MTQ*4tC=iN;wHdul5_UBdkuO1_rZ;I83e**)yy#X&JTt zPL?-Mha38Fb^HB8{`1G-;$rIOc*MA=ydwwqfCH{w1lnCG*+y58?#zfhJJ-XkN_z`; z{zpRHQ4+`!`RpX{W{1OjZO_FQJU;9G(n8(5dFl94WJ$c9TvhTJ_H{Amd^RRL|s%v1#Ji|4HYv&3`@3%47o@%sXzJ*i*T)8nr!Uo z<>Djp@@De;Pr8OiecZ2O(|sdOggl8aWl@W7UGt1*NeN0+_R+@gn<22{Z#VyiZ}%&^ zsm@Yomya6lEJg1u`wI+;0L!@xeje-@)rP!ksf%6 z9wGm$$mfv3z&Q)1s$=j#`OIpoMbffV_$UXA>hE9}y;B0NaIzCzg4cGxb$_h-#+(I- zSPKz*qR8hOHkHL4ai{?jG0dalwC}!Nlx=NlIzfoHu#CNZLpR4om&YJ9C!rh$ib#`} z^9mMVhzCH}TiG9Nd~3W~KWgSH#2}EV|B^3C#-e`f8R_rGfaKm|lUo}Z3lqSbm#}K) z0^!Ztoj~=Cd?zUT4JeMzmQC4yca4M(`jab|!q3yx*`s&#t@9&utvnflVUl1z3i9bu zD>4~d{UvNlU&Yca0F4eclGrOEtoCHxH^j#m_E|^81lOpvVmS~eo z5&sSW>C)>N2|Mc_(R*Tw`T$jH5jDEb`@R>FFlOAYgl25U@V$~*GUrNOT}L~AgI_Rv zIb{U1En#=T;a*9qp*>Vlhg^nnw(1Roszc<(69qOuw4O!Y(HpHy$WN2$*3CR1-v<1=U>s=8iWfP|O`epkB{Cl|&bS!r z50RhV#M$K%w%ZHcm)Z6c3C6N=;P7Hg-)S%O{Fp=9w9@W=!FS^HnZDiYgmvp}S77ML zV)z#F-Y)@7GA@V5cu+sk1Q}G9kv1p1IK6G;xBn%OrlO0X;AFV|cF@xNTO|fh&NYYBA2;*lzuD?n;o6y;?W96i+ zndp5Ev3xxC#iVg|P)Oii`TQYE)@$!;JkR&yK6`Cyg(r||A|zWBws`drsx0R1qoJ+~ zwZ_E!?NPE0cZivWoxo@((7bq}piYF?J1r=A*Eg!+y4D1R<8sY7f~rG+xNF8jO(;argDX`5@U~@6NB_ob%%Uu zWA}5EiVF${%flB%bPSonl-3}Pnv-)IvURvZ_aK|4;n#0enO}vKqzKB~94(D{^;&%+ z8|xx8Zinw6e^cC2p6H3zE*QR6PxY;VtFt-57}9CMA{fkdq3R|yjKv0i=BEtuP-!~b zS}Q4)5RQU)@xQ6e_qkj3mCBdr3*??Z_~#}$($o1CkHX8@aqJHHCi$L#KRVyB3lrJT zgT$bde$(KLyh6nHRn^t|K-oXjkvj@6KHb<|KMvtmP_COqaTpVJgg9B0MB#AV(Yn1a z@@4644cy~LN_@45aNJ)N(`MT%aYXq}uWZW|=_xVnGS6)r( ztc^j;^W{-5A-34l#H7@ja$jU6N#lleU z@vn+3$&T|%3}Y6fqY;B|LYTz8p=OBl%ZXsa6dA6~97M6f_7n^&?4tu*!jy_G!p0pz zq2j|75*GL!KIv`0d^6wGo??Tel*=5C=s(j2a3?kKb;)ipXwta9eEWf>2Tw*3jm{8= zpH@o4$T6}TX^^I9(TJN}dY$b1hR}Yy^{$-JDt39wz{FI2Gg5aCgD2N9?7I1vsp*Pu z|G<=AY^A*BoV_~SnXckr)ASTG zGlLuvp^{apD;DX3Hc57&Hyorq)g5i%UOJxdc{S_sBc%Z1LMZ(Uo|HJJCWHiAXdhym zS)4e3E7fp(#*EwOODR%PxY!%>&S2)6)%b*RJukd)pPjZ*mXemXaOVw2z(>MP^)HZ8 zA^pa@agv6TROC|}=@eEgzw{|_k_OHY@z>M?;`!9AEw-I^6Q-Ejl~(75uy(zKx_v48%>qk*jgIk)(R3P1EUivO-37on{EK zk-FtIp5~&GmjFgM0#zq>)uha#qgZeivP)ur?;$Cwncv+! z`-Eh1gMk-YuO8dZwB2r~M3;FbL`Jp``fbcH98cshU+8`cRbPm-`&G>Mi6~Jj=%o;h zfn&Xj^2@ZLH$VCfX7>C8O@6IraRDQ#JRt|?u{!1TRz#;yRbi0zgx%CboL%_NwACNR2)7MO}| z{;!+^p*BoV%1a-u(>IH3#WQ}DD<(Um{ch9Nc{ajn7LN6f*qFor!_cm_dA}cpX=)L& zfD59YqKcP8QAjb6bdu+?*fw3Krc1C`j#Zu&$U^*2@_pn!n^F<_y+-7B(C)kL*# zpcc8}~I3Gbv+rteuA6fuU} z3)nNt$$v-K=+E0dGS%*WsK1OjGF1LZ>GFzBypv~Mz+SoBEM6jJbxD2>5_tWwve7P* z%2G;I%Gdx}{kHkC;48D?psvv-Jb!Uhy=3BQJM1_?dv}LZEgP0<%AhJ!D;!a((@Vd4 zzsp}SlyrTlcXs(L4rZy8L6?LnlX4r$#l|a{-tge_vKd0gc0vxJzsDiOUpD%%uo16QIl57bT=p% zef7+rbcuy5tjcCm@P&cVxp>D=LE~)la*#?IB}_5gI;A{4D-Y@--RHU?9S= z0M!*Z!`E(!ixd*?3kFFh6Byj&Yva-W4uvJFnUos~`Z`V*OT3pyej7OA%t{U?a;u%|K$BbsTNQ>DjGGp1u0=>pY{<=VSG;K6wDy*^=X^{7THna!#VFoG#=IA+;$f4oyB)H4@Z!Ur2n-R;${_lej#bwS(7A&j6 zv420P!0-DQDTU5?h3>2RA>VoL2*0fumT`+#VO6Uh;+AE!|2Q~D5a`*Y>E+|!ebm}2 zRJR+Ji8ARJ{ku*2)b(WDo4%FTwzLyf0OHu}qr=u{zPB%$F7fODX zR-^ez;I=^3YQjcDs8FpfnuLn9y1ubO7B&Pq$8t24Es=UTl82dy5e)Gj5Nnghl`D{m z5&Ryg7~`u6x3?5WF#;$%#$Gg@_Sx0>EBNM$h zc&&C7#OM0~lOefaC%PMCW4Pu<0x60R%RZ2OvWg{XFc~*YjnAx zF<{_3ld+H{aQ|uco73*arre(-dg^?ef{im&DjQhND4rwexkr`%OOqRmt%gfv6-&59 zPWUiQkHBE9ZD8Lio+b`z>tA1?UbY6$l#{iZ&vC6D^zc+ocYPu^SP6El+M*amyr7f}w|EEAEs-_sNT zFSrCHoPh{zebo|J+H}8einD(*Bm>`5goVXpmO|Q7(JmtkOBp5U!44lt>a=NA>Yc_I z(+VFJ=!fQ-)8xYX!&dzi=VVH>fSRbCmWjA=8_wAps$nFY+t<4yovEv01cqQT3H^bc4Kzp3P33l^9}8@m zpvgoHCcnKwjbnjg?AdA!+2q!toKW+<)f-bnbWnAmi$mu|x+q|Eo^sQISh zYF52`+74ZHs;buXaGVFb0W8q7IuLPRwb2(Y!aFA{PU|rsQkGpvg8tU`D%$bwma`v> zo+pX&c@2@-XT5F^ugAQ*bBQMZasP{S_$#vOrQK!W6e$kB_?26HE24QSyey=XI7|L~ zzTGK9{Tk#RZF06pTD#KFEkn4tXd1$O%TOrzYTDf{fC1jDQb#XN+D6AWUOa!~QHXes zKE9AEN)v;YqKL^XQM-JZI{WeDF(g4dogrc*F=sKYSc%CXuIA~Oskc7R2KPAFoTgOu z7TD$&H&w#xNhiHqwjjKdz`|ui8S=!)7bWI+@ejIqGhm7LNWI@kkwrf6g1?a($iWLOaxFj+E6@!505O|t!$hnqg zl7jq1J9tb*mwIZ+BZ=aF916CLvQa5xOZy!o_M^e6K?QSgeIqG$al2R1T&>Q6rnaMp z7b12tm}+Tl@8jXvR^srs(WD8rJ=uTbE;lT}rq@-?$egc)n$ z)L{XY$UMs?LGO#;F=b6MXJ^PmDCVSOm!=7VY`etV`#}rG`RQ@%_1G=;~&x)y4rg^JrMG~yHKi0^pH=sG3#F4 z5o2Y9-mlj6=_qFS*u_3K)WhkFmzNt79PIe&PBH;AJrHeI>lDjeddr)I-p!Idz|glq zo~26VB+uqC@QxOesutFu1WI)Wox5}9L0L9Qq;;e1mOg739K55p_oc>S62Z?uD$&tv z=UxxVVS7ZIy@mw`NUUq*6F^|$aGqiL3m#b)${fet!51OO&XQ@(6+QRP!N&~(SbfLK zd)mgUPO&rz1snTiJY`{4!g_NKP29#IpSB_W;s9&2d*sI$MZto#@v6)s?k@i|&7LWw zas#-SW~k)FS$uoUSmV@bKL%uW*#qH&FpgsvF5cB%R(6IZ6I`mu0FZhkIbjtIYoR48 z5>lUCpbeMz2E+P-Y;lG8pywV6%bL~6Crq7WuK@H_NS$E2S_nTL7g#)B{_@=FU4$ajP5s^$E?Dbb{31RxbUS zqNOd^q?1sYPl;z9mq*Td`gl`JS_If&QYdXWc5N(CwOns@1hXB&Nl34T}5*6dmK0np+q385=H>J;tx%@hO(a0`M5aTWV}E@T@w-9w|IJ8LHoE2kFq z##g#tOsnzFtQtieSc8j%uf!ATBmWRNsD#vSP@A#0#7j+&uEWeaggx5%(Ht)ipidM+ zxe#60U-pVA`S#W&6Yn{yWp7XT-h;YeU?_LlU(KHK+R;FBI6!B~pyz|1!Jux_eGA;qr!G>;2AHc>ea?$SsK^MPhU zhopWK@i-^Dv%l@vR)OlWD5qilol1CeHdPAI+y%;X1QLVV-o0=p=hMv|WD_qq2}-5` z{vQ#pt97(8hqJQg?UxACpUD{gkZTDc3Zl(r~ObS}1aVL^^ncFEWhkk|-CeQZovk zFp3v7&3;^9+!UZtC;Q6G>d^o3W+Ui7LJE*7Lm?6G)!(GbFftuYgM=J}j+Sc>gpUso z9{pt*w|~-go0T+`MmQY{&je2-9Nd40!@F>Qg-P!b|i=V;(%( z!munBS1wasS|f68+@gaB0xC`cvsht(fpj!X+a?$cN!mT^Bq0eV^d|!%k@NVIO=K|Q zRIS01S7Ei*`d{a}r)(i2wG1bK4-i-(R_8V_7C|iWKz#mP}$aukYxTsuG2_vO3 zj#E-QV<@KFlRg`bCDLI^C(ZDT242tSOzz`$w|RQM$DDagxc3^T&o5#MvwU7Te*S_~9^7aj${?t!#^V)STRCK~r zryW;$qE=_*MySRbrKR&s(+;I{ihk)TlYU0Yt6_I;At$@^>?T5G*!~fbR$_eX>lCz< zNa$FrS21d5u!Kd~b_j%l819p)n4R_x(?Oe6&qW&!*xT8pvA%$4KEvvY!|2gH4sN`G zQynv$4Djp)hJK%Hf154^Dy0^YnBWMowHgPxPdV;F-oZ6mXv`x;iNr|3%rJC|c$krp zqJf?zld9i4F1Q9m-F6;jxm3c?e^&+i_d7dr=HE37=syB^o}awfgm`ak{Qg;RCtnjv zBb7Ott|PM)UCM>__QPKs50Cy#I329(d8h~Do~RToM*TxJ@83Wp#nJ@*ewRF)@Wz{O zu)n)Yo+jM8`7TA%VB9^zb8V)&%V2+>c>fSRO=zsnaWLwWMj7SIKoc6aVPQHJ!h$3V z@W(xpL5FTm+@@BmksS}|=Tk0!_C?NJJxh4w2J3OmdIH6#G&I9u z_0oAJo{v*&vikVXkj-D@@sB@AXaAVn-7Xi;UE=)33v9jq4oX04zJ<{!Qkp-FRji>k zTL`Cw-<~qJxDj(1pk>?Lk*b*Rfj;`TnH++gFeCyA6pW91b2v`7DV zpUUb*i6ky?=jih;qdx5F?EA0AAg!)cLya?Ji{XD_o*$_Io{uWCX^5 zf}<$sCSF<~$#aaRfu>9$^IXfa)KyB(BXr$%oE_bC+d>HS;TZnGvlC~2f3tx8BcKEy z)Y*g(XhQJ*FO-H-IhY!tkV&Y8y~97%+uQuhGM-%4MQ*6DE5dP)&fymRpaXe=CM2e9 zU|JSO+YiZ;m~$JaAWJyj-KO7elSVN*g2mIP(US-fN60)yvn?bVp5dbWh{J67P3V7ptuTk@=*h2E=ul+CF`R#vBDLlj_ zWb1H``<*@yM?R0<4d^O^s8qu!Rk^mc%f680p3S0LW-kwj$`)_=eYT7YY1+(*GQ~{8 zh$QFTl)WGzaEb(JjAvSCF>FbR{_z)CU##IC^;y$3>U9Tw(xuXG^ThdOYER6OTv}#r zV~ym@I{FhYli5ooc8+IH`TBqL|6zY@uoH|})C`)>UgFkoy~^32c$u@+1_#4E)>h9j z?so~I37Q{ZCn=|&y@J`ALre`cuYzvFcrb);$j;qYXf<0j=hoTp9^*EfXoD>dZ{Nj; za`Z`?aWJ5=x=gL1QMAhpvjov;llBh?`yIxILqb!c=P9;I5yb|RSh2Wq0jwgE_5pf4 zCK&e^P6N8PU!`D5uDnFe^p3YzIM8FpD&TccjBW9S;KW{V_F@yb=A6xN$f3{Qumj&LlFcaACIkV#3~ z?<0~Fe>x)aC-~Db!)}kj56Pq;$`uwmnvt-vR%iR}+Z6JIH@@+0CVd~zE%VLa+2d=! z@h!TC5!Y|F*=}pxJ%YV)fp5LB&2&0o^WY()pwGE;rx_o2aH0ee`oz(cy*Njc5~XFt z7UWVgUn-)d3A(MYqm-^^b8i|D8<3MgmXlN~{O7;?-=lR7Xn*@VEM*b>{SGqe^5oSs z*iS67f4Ri`%F|SuMN&)0s;;nd{vyf@*t>RvcYo&|Nhk?bM%9XW`EULrC8Nm0X`jun z{SIXo{gH1+9AxDRb^JgFD za5A7A4?#G%l{$LdAx2~V;uW4czlu>`V-j|7+Fdfupw}NFCPOZL<|T^FGx*A;UUIni z_IIdPN+eRJHyltRWc=_A60^ej(`!6>w9UiKEgrve8KoHs<^h zcZyC*=Nx$7dQ2Z zw3N6|15IbJ`3`FD4kAv`T1(`WIt5Fok;g=ug<XX#mf5!ZNH@(LDW&@N zl{RLF+y2330sTin@!k^G4=r;Q>ZHf{q|%Wx==EOc93K8z=?{Kh`rYRoE%A~#)}k;b z3j$EEw!DT{C~$n#!*Pq$YI6(*Q>4l%*IW2WhUt`;h8e|blX88YrL}dEWQ65ucr}lu zQ)g(*t)euWPX8F&(a;S=o+W5;ikyUmqX=aba2Hl^S5I@~$GrPslWR9_ar>Qn+<0>n zq1D+QWc<^w++%;KPRA?qjh#cb@%RgW|NqX%KmRi{n)5uocbCKQ9>pNQKkjh-&TYgb zq8#TKPKgJ_jP>g;dc#?B^aaY*Qou<`&jlk)Oe=9f?NE5H2T zvb*_!$3OG)3^E5jo-ho%+`RrKjk1GdX83-GTn1!W$YQI+)LJ1;A@wT6!H~+}Ax1bL zB!^^-W)z7V7H5mg*kPHSqaM1JlU0kf9)Ak6eT%~zZ&8&BrE*lkASI@#3BtnxiC4gN zY-FAxrNnj|p%6wU<=F8GcZJZWKlq-Rh4UZIETI1g)UL>iJIuusU(^xx291Tfzi`vEuczVw6)+UX$iwG2h zo8M%yBoJPM<8jP#$)umVv=)|FDP+`Z73`HOjDm=ba*h+5cz%XH9Abw)>9CC(kLlcg zhj{BQ%b)!(s1_^O3kytpy9~ebD-5o`!Gjy`FundJ_rLN0=cx-QtwdsZSeMo)G^z~t z+Z4tL)5(OmP~*zyf1bkf1qOqdDAK8{Ttcp1LbIRC+B0sTipL!hB+0+1+~5eHK*n2t6AfArHk_wW4W$PYhTH0_maIw%g? zTSl+FPY@~EgMh`=6{__bS)MW)_NZ5@l&fWOnbDYQa{u-XrhdeQ$Dc+x9<7BX;yA>y z1;v7aZKgOfL1a0Z?lFJr5^1IwZ*OCa`b4=!o}>iRDWmCtu|H%y?lB#7hz5NYDlH~q z$i4QEue^Sn*r@a7y)8n=rJY4g-tCYNa=hFo2{LSH@vr{*Z}8vzcmIU#{Rxh;7^VR$ z!s2Cjk<8TSo+;5iKEV3gHQbx`Xv70r3W79X5Jzk$5mCWqyQp!dzRb1jukrD+;>Bkk z!?}8f?qI<5U>j8pFfBo$X%i(O$soiuE1db*idHE2m)0<~3_JGm7Un36w9JYuKaXLPuW zzPAUiN3nSZES>ug-==2ONsFtLN*>X8z$iCaSUW>^^Cr6OU^iCSe{`R;zl-G-+1q?T zK_s|tk@~_4Ru=L4Z~qEm(52!Cj<+A+kH+L_#;7x7^yrAegMEswO|W^JiKZ~6WccMT zvYhEmk0%s%d_)(X{xAOvzWLfU$`y~57avEnJyxtD2jBW8s@dcyhzL!aJhw2F!(*48 z#$8%r;@Y_3h;FBIve}XlBuR?xI9ig)O0J|XbZZFg>AL>GejOkFIP-g(^+Ep;`2HzX z3PnZ~2A78Y_KTD8@R=luua+F^yy=xHGS00u3`G0*kb+}z(CcygK?n4VGpox)!I)~J z#-Ml1!QnRZ3oGnwJwR8I%a<=Qo=maIb#&XopAPVkden;+=5$Oy9#fc`qgpNV=GVRh zu^^v@2vx!T&QjGarj|o5Sy2FI9 z5A!vf%jf2pOh(w#KHA|Xw|?gqpM1KEnDp7{D9#2M{kbz-`ms-7ckc1_D{piDFa90e zd=7DVgK_m`Ru<>j?u^-O4_SET^W3>}hr-c-6(?po$r7{cVA5OWq)#Lc#F}1{G!6@?o}sX{!_jYjgW8p+$;u8aTcpR=SjrOIodcpt!sdg0RR1A*qe^k9L1FGO z#^W)qMitXEnfie!R&`U?RW+FUpFuC+I8H^=wD0P=-Uig~^LCo~kl6_O58>n_l9Lq9 z^Bhgn$R#AXLTG|v4weQYj+^1A|LOhRt-rK)aP%`puXe>UN{dFVS{#f!4st5S{*ZE| zPO(^|RmeC$r!X@g&(g?+#_=Skw0Ii5GLNq`oO+YW+%l2Su!SMT-8r{QvR?nPa8s*HFo19)*U~jU`;P3!%r9py$XSX*u>K% zsV10z;RU?&PcZ5Ba9av{X_;c{BBhU=ryPc~CyGU*Le|~pSo#!=0)_Drd*L>#rStd| zlT)Y8us^*)->7i#<}uS7-)8@|V)B)TjPH)Q{_v39y*A?R5m)R2V%+DH28-vHc~sQE zv*>^I2E*GC?{uaNlY|A~GSUkyER$-Rp|0HpxvJch}oTRw=k>0X&7SMkPKN!v@t#qK|N!{7iAe)XJ@9sSMrS|^L zUmH({pY{rc^@8VBO7DCzJ6*PR_K1?4dZPuJ&cn@3;xxsw9i*m_ z>VjC;AkR>i$$YCp%PCU!6E>2Bbzx&>Ci5$gp;asN2OU=Jlu|gx;NCSRaLm zAZD%{aC*a|@WLft{L`Oi;14NlCfVVD>tFvCEAN;mW{W9IH z9h9Hp)+^ZFD&bUe>#f&mZ}rJT7nP(~(qLLBkmZuRJz?kFMJaot7z#OfDGaDXyQgHW9Q+ zMdI<0hGy{~@fqYGvxxL-H;G=`qLYqTZe>&rxSkj^@+q4&jqdO+XHQ+EvVMu)q(gOX ziOG0Maq$f6E6eQd9bh%rSbX|(tUmq{M|=A$7Y&SJkrbU$Yk_iWnOF(JRN}gxFbq>u zLNl{0UraK&l1Wt(LP%XVCYlhTKqA$9>jmDQR7a5K@?^_@rO?EW?p_|Vfc`_0QhpH5 z@6$Cwo@c1>!6*0c-ugTJqrG1m4LVmrx|K#aIt(-6mEiz0?)U#+6NW+9Q7F#vT6ow_o8PhyFA{6|0Q=j9@$^j1wk7 z#9#gEf1TyEb$;u&zJj6Y)GHMRlL?8;(GrQuGEx$%hQ_%Vs)5hT<~&_Df#G^4HOfd43F;o!7 zsDgoQRB6p^kP1P0!J|+z&~ly0ag5M%$_tBlbBnm;I-UNQ<8Gg|jkBbgB$#F-`#Wg0 zd0OY6BpZ!*_3hU=Ocj6T7yb&zI}a%?uVU2JIQQ7|)EWz1zy6S4{Wo7{eqjOM=j3Rw zC?bB?K^vOvj}-OipW#z~^Dp3M26m%@k;l}BVqKS z0}B(&NLl^d$Cz6vuyXnWZE2xt0^M-g-0RRvH7hpVaS-{;e>LvM$+Fy^>>&U zWx@<<3u~0;7s+!Cg&>F${3sD3OEuH73|-gjS(-29S+_OHLhojVWM+I)!TTGSdf zI!6=Udi4$B(TH$3pxr&7TrE;47U>VhtmqDTo>KKnIElbD9KuX8Y>zp9c)(X~KH|G~ z?(+8ihjb<>IyRnJBiG@=6aoTs?D z#voO!T)N7+XP;#4>Lp}ivUR*g*^u<_?s0p&L$_Gvvw!0+;i zEym-J5QE0~^JpW3?XSIpE)FOyo+ByN(P|ZpXhc~*qM78hA8n&05z*j~Vzoj~W;AO> z1`lu2-QOg=cb7tSjoV|%VLqYl6`1;hMivlif^s5AERAW|WEdnkp2=YrGjCZ`w3uUG z(s2qr`M3Ww#0wV)gC5>wgx4}DU0%X#ED|OWZnmhA{3bUn|r zvXuE!o+j%uOPY?UMHt485JIK7B$uFR+R3!L5FiCV%6l!%0{Rc-WFgA?0j-IX{psS# z@MDi2-1|G-qy3*1La$^>P-)HyqgWJCnxPAgaesi3XAHX?+6TMz+sCLZLdF5fu+7oK z+ek7-gDHby%zkIYy+`}p+1lgLagS?vw`dO&OsmMvYqvPuKgRV0x-E#Km^{tNL!ZFWVQ0+kM~569Oqj0DaeezCd+i~X&@dE~oB|?)Y3gITE~C*9l`BlC$U~o+ zZIMSI3yw=o<;)4eRcUiZn7BqxBbO{HiDSc9&rePy&urGtJd0jmq}-}NxW{7)I*%{U zG56F4oSTE?IgHvo%PSWs)t8tQJWiPfij75L!$mm-s?7!ZVZu0r(^sD&9OWpH;+71s z4TMoarWPtrSZEda?stEia2&9CZ;MuQiE)x}Jo35p+zTkPNIX1*LcoMP%Ds=$&n{G$ctg zY(JoTxQRJmqLS)-=O6w*? zU%O5+ZnJ#xDuv~<6kDe$G*6+70s_g{pW@D+C8=(Z9Ns}@8DX5_S_Xdqh48F1QVMkKWYJfirD*!B#4+>x zQYZzvIK?7)p5W;M5eHODB`lFb7NBbq z*ELD}5i*>TO#2kQGWQ>B^NsI(4?mM+hD~bP>~sbMnuS%VqZ>sm!)0Ny#p2o`wPuY> zf|i>k#R5G;aBFuTKh=2U#$CSkV3PwsW%bNsBn6FHqe+w`#4^J!c^nVB6j!Q@vw$qj zC^!x(O(+=#c9Kw)u;$p*ltxWvEC`comSf5oTPbWIi8IAGmH34P%ujG+F!F$!StIBj5srG)+R0SH}Iz;64#=< zSm){|o+S(eN`B7S&s^luo40Uru}URI2ZvbwA;W10wN!xJU1V=Wc>^`A>1{jkmeCxsPpotUkWM zr~aS+M}k+r$8fcZ_tXVC2W>M7O#}!w>7r!zk*{G*tqm8Z(VyAGZ}NbS->M=a;ly!Zvln?u0_BFf5BS3TYNS9GOx|bCz8Pd+IZ%=~$LY z0gYjvGSb0wiX;j~WH_$Lna_Qei?%^)`ytMFo8_xb)_?q2Dp$^NltWZ*P;S*I`x)cC zHUp6pg(1Z>LuCQh`LkGsI&NVOm1xK;p;9VPD;F`8qFnI+$YPBs%umjb78ywrF`NWc zy$bcYRiY?muGQe}cfQNJuYVWi`&4z4(e!}P!#x()&tQrvrMS!L6HhUJ;W6C75u+?8 z3BhwSEF&k2TpY)x)hZBA6j(8X%_H2odFIZYBG}!duIn_G*I2*wID_L31*1q~Wsz>y zCt*U#(dld-5byRWL=&bvL%b(GhGPnx_C3yi;(4C`*?JKl*PdFD($i^$HfpXvGSSQ(tJA;U~ z=%3k~u##!n$N3z%6#nx&YA ziEUXVaYz#QXeeCM(BjZvN|SUwml(QX9hj!s69OfKdhZ0HAKe^OZTm&Xm1J+nhdgj-U9<=ehB{*Lm>W8~nQp!|6(!ffpG=u^9IA$f^h3^;D~KRqDs!SFVN*z^6^n{pVi-mQhR)g5Gd!)| zL+QsXeC{&tk3GfNpZrPe${fA@4rDo&Oqsj5Oq%*=NlqAN*vcf*HKNNa@TiAtRj|q} zYO9NEA8+yC!F9@(iQn!LnjtbVDcSQV3{v4Um>y!;9+uUBW|bgFVeGT@_FITapS8s% zODpr}j)6XzuyF1?c53lk|I7ctx#!jxTV;mF5k)s5Z>^x&Wm470PsZrhBIRb2P)>+r z11SQAyL}ceJw|SUwY5*Yy-!+ek}j@LTHC-WRjBEpcD9MzyM$zDUWN75$Jk5zgu@Bt zi>Gk1A$Gq<*Q{gc74H7(|4JoDIoco6JadLpp~|;@^HolL@(aARe@LM_z;3LdKKtVY zZ+(+qyHA`tJZ+mi>K-s9l7 zO|e{|R4P-LJ42$o;8cjhfQ{7!wzjvZEuF$`ETTm|)A58f&reR<$t5yR(3B$25>c;| zRS-n=Ac`uMQy4pi;sb>W(kwyKcyHqHN7F2z`Os-6N+I4q{zQroz9E!GB4aWwXVBhz zIc*>Rk_f_=T8oRi)~K0Yl8fHf9pZ!gm|>f6a7-KqSe{L0YPi0SrJJ~gDwgRm>UBvb zeHN+?!{cqb$?NE0o59y!XME$3>j(SXx_gi5-5n~a;;80vcD2R}S6i&i=`@=zyd9aIh9FH zTN*N(pp1mIC}mNaV7vIa!pRM6-JqL>=zsES!D<+pQ5r$C%lO^iGFrvrKcrVPJu= za+UeYG6%1GlRNKx7r$7bkt$rrB9sAo$tFm_uqwofBF^Az0@ zmRTanOtO5$qum{z`>~HBsx=;MjmbwTt4r$)lL9rzA`OQmeuiaKNHQN~2+DJ(nC6n3 z|Mh=Gb)$->rC6CHU7u$Z#Jutk{~4QK{&iw!j?-(abdw&DK4I^{9V(8;b1(k{Tb(IZ zG+?;-CdJ+!R(X*l$7Z-{s$Cfx845&sahf&H4fA4Q`_Tp6zzH<$4ae?N~ z{dMfikMT3luk+P^{*MVWo2!>M=-&A^te$%o_lXx7WRj&)i)b7XD>6=5Tg;x ztIv{_U7Wf_&1*95Y?B)?t<#^P{N$%m2zKsW!$^FVH`cjv{SK~Ez>o=2(=ZDjd6JP% zMnr={7Hb78QzMZX5=S%_7c<=}xYINihHLK|y7>r+GBoSoTj7xMy|X?46Yubt1vK9e zXW)Z65l=oGV3JD=00TLh(K?5RSCZZ$erYCxu zX{MP8V5Xa<8@d@JQK)3f+vCsKXYX^iH|c%m^4@&@`{rVoT7rSOm}pFu>WNsfGFIfp zy7>OTeDnRk@AC)>DInnnq>zYYiH-zWUqkaEGK8E$V!{pZBAdP}(+MLEgcRcJG-TtL zfz7h-@=7_u=}8mRA%Pmh9fWM&-k@@C4LSov-9SHcmiW~xWYG{J2SJeVr5K{D64-r4 zLmMMIjZ%v9JOA=Gna)o!Gj|fl8!=thx%b}NoIi1zTt3I)(J@{Wp__3`L#JHKQ_g2; zSC7%~aE4vxCyPuK(lidYsqXI}Mj^R$g4V$fsvw~VB8DsxH#9CkagkIm%h0h1LIJ{% z;h=->j!_jANi&dR2^1rV+&!jQYq5H;M|Qfvgc&EDPB0Q|{3v4m)i>~Ot}(T8g1K{N z@wb}{Y>QD6#@lOD*Y6VboA_SD)afVCGg%BNLbO8;_ZlRpbkuQ=#+@6iz4|&ybSkwr z)j=0a7!!ypgLV@!bUC3;G86?&XFzx3A=3RGZQEes|MY7FlX()4ny7<5Q>7Tao9~kA z*3qIC3_gI-D(dq}PaSc=xSuqGapR&-W*6y>j z{s5f-Gg(A7Od>POnUDS)nS2Q$3Wof*28ifFOyYAevzig_0;VHC3zr;X=#5_w4=z&_DkALr>braE4Hbh=j*J z&k-;VEyR)aLStj|mkm|=m?Qd=p^7GXo-jPF5?C!FYk)WGA^0A8%pjdeqA3zW;335l z?CkF{IW@`D^b~`B2UCGTr;an~Gw3Bb9D20J5mI5Aak+p}$WfXok;vspt!+WQ&Hm~p zoAoxarPI8-y2I?$3BLB_ukgXn8ud`%*tQvq0!R_|$OG5Mw=AX|A3bz2q6ke2F$6F| z5K!=KdF^}OBd*Fs)`&Zxb(?ChbpL4Za*OHN_2V_58HLdx`&}cb|jHYh`4@8G76A< zi;@_U3T;+WImWFnCtf(s;Ng9&8#kCMn|KG0m{(o&Ws~A`mQvnja(RmQxerr5`6T1o zEnT2GMHk_53h>2wy`4iU-= zSR;$AtxaZUW(b0aPJhV6)GT%&lFSrHstR{*UPl;rajXuhbc*8CJZdaYD4Cck1CRt= zRV7VSb^Wkh~;=|e~<6nyhTSA`Tm1j>^$1wWFpV*`*-MAUG_qY!D0RXKmPCkH`dl4qNjA~gCU_|;1b}D$0&-(spS>UUwVS0S_MZD@U#F~3D5~K z!U)qBh=mflKp~JqEXBtWAc#N|C3IQCR5eca2V}Z^&XnR@`p|jgi?cY(ljxHR6qEA| zJ0qgWGWn%NItNE=-9KWC$BE@D5+e}WCP;)WtP$iWsVx}_mM>e+W;@U3VR*Qb8i#P6oAcLe}nlZ${ z!*@oE23-cj9^+7@JimyZNTV4h$#jZ%JkH@!g?hb3etHR6@R9s6x(u48;P?TS9}x-? zifGg74Vaprp}M=p-t8MaxObDuxdoD$Jed<&uKwB2v3Twjy=sHfnFXZCq4VHArG-4I zYI4{fkw0;s!`=ul@~Q6au=>F*s+-#kFMNoVmtNua<~EJPF0L(*%$0B&eI^|h9T!Q? zp&Al#amai|LW~5`GdVIR1>&g=osAou@GR7@NAW_5SXqaJj53|Wj%P3n36$AWDlwdRE2>r5#~>kQypYkK*1v#4=JQlgn>^K1mp`v_KzFPUVWOzL5qZJVoN@)<3lpK z$xv|cLjzfq9#=D>#MpLe4=m1IzDhh-#E9qEdT~)W=LgA16bGWFY)OJV{x{C+9|QA`yW#&&01c0QoCSeMfPmm}xGMtU<7RZG zefP#+s@C?tq?kfsJZLK7percDA(G&e$i=Y+Lq>xhzULsy3PB_@bUl3UaTJz0s-vqq zz3zZ&y~mkLPc!xv`mV}}bI)Q%0*TX$eDeoCpuKg#vXUa#vKSmySs&JD89KEnqOHip zO4H0Op5&=3mw0&V8qZugiRe4j+GDhsN+gJcj*B2jjJ=RrcfhgL#}y+?&nGhu$+{7G z6d}q2nj+H+Mp%K1rK$8{CbpEHp^cd@ z6BIHmo;t&gZ@)_Cu*yNbOMYRIiKzur6AHSZU=4@FjR?W+FmCnGQw2IvNGX|MZD)&i z=a`J-Q`8MAl?I*^v9L6a7B3P?GRbU#WWGp$f|y8!Kg#fX)+TxV9=tJNib{=*uS%e9tk+Q$=uT)<0HTD8}#E2I}g{Ga2;}s zF(wwvSdmYpSxh`TLAxX&ng(tv&dL*)=@0w(C#O)B=P33JVv`z?5oatKD3V0~Xa}oZ zXWXt5^ZK}&kD+P!w!mNzpb8r4m_og_$NKgovc&}stNSDsovlZ!$T5j4PdvrghSYSK zM6wJB=!QYJ*C&zAAjlf~hZV}x(;(`^6u@fYkGpg`eS%0N^g~o40z*R#!Rqy~`h7tZ zMbY=%jN|*VVVc{5An%K!7(G6!|KE9rKLPZQy8;13h=hoU2pRG5cu(NtkF1aH-F)k> z+P-xnH<@MBZHemG#vme$JZ!5Vp$eD zJ6jy??=v+sO|Rd>4gz)_tP$SarL*U09}=%L1N z@0jMsI&S3CP$CvS@+@w3A2pU|)_*vDHu`_T_E zarr7YZr>s1S!l5ovMizK2JuXuRIWfGTcAI-N#+V<%Twsd0=DBb7>FXgaD8VUJtPKJf(D zA~#=slg+LBc=bAaH;>5APLZ0M#X8uhd$d8nUS+sdp|{_{>WvXa3N@!fUOFFnO5 zlcDFX zPF2_|v z5d1)h1Q9I}$M!=;!!cIpkZ$uB(RY!A2+Oe%1(1b+PV<wJw(+5C`hEIvj~bvh)1M}sF@5}zKEGGklWxv2ucO69Z(qX*d{jlG)oO8At1`E=Orcz&(dr^;8ge3w8-OfJ^ji&7DI}ZEvw2)2KfjC^ z$s{v59LFPW#>pgOD6&Ai+om(@v%D}1p^M`?xPeC^l|qqaI<+cJzk?YU84LonWC=l% zxqs~~lA?egxf~qTnJO2k?5z@v2B@-0&yr{yblJaopQzo$G6jC&SN;o{wFdRo_ZU?+ z7MCl!uJ8zuu!Au_Ybu{ePcqN(Y}TLw{pB!M6z zM1)9@Xb?oApvQJ4N!t2DKj}Z-*7$LTGyDY5zz+=##XtNxBn$(BvHe1?+4|*nwfb?h zoQbK3vQ_U2imYPGAZJo2l7=42bQ>Gg4|frK7sJ%BEE~^t5dxcWuZbwBq;&yzP^W&h zjikt6CKxMml-wkT$5q-=z^e~$aiDrUj7GFQ4+V`{yT|<8B!A`q_+Q{>b#6Yo$E#oa zE_$due)xSGYvdBk=je|e(z3)8Q&aed`=s$nOA)f;;U`4)!x0a9E!O=p6-`8tOeP|e zOAScb4&}(AtT@bEE|UE8Im9PUV9b|^=AU7%xP&>B5L}-d zabhuqY=ZmmyhEbWA!!FZeE$P3f9M4!pZXALDvRE(F`G@3I(ZTyks+%XFIQgeOPQO^h%ucZ|GsVbilDc((KcB@| zDqwkSG97{G5C18mWEsov<3xv46^|oqvc&|)dk-1(Ym}#^F=HtLHAYgF=pP;8jYbTI zU8Kl|z@~G?j8kXqdZ9ii9%sGal zjC21MPAW|lLL!mCb{z7>BA)*^#oo1DHm-dYx<^bWb*je=d@YBZox+tAV%a2uBjNcj zs;(ewGQRI2Niw=(grVyti6tCWRgWY|stJPdW8ZiFE}1vDXI=+UnoeSUBC?q43%c0QGflSNLcL%S__ngt3-kxWX|={Jvvf-X(pXJu-c zsOREpDorsU3PmzT9$!flGbFs?83a{C_4^#|RoK7wE^@og%%x8v$}+9>BkKEgD$Oo_ zBx0sgj0K-eF2!#Bkl+2C-{a1;J2Z|OgsMbfh`7E(Fm_40;E#sPBqUB*9@h^JsK+8s zNmC3)A&)c{&kfmcjcI6ET7iz|L@Wzqo)9c%f&eXHQ+iq>@pK7!ZjM-D0YlDW##1Ci z2iLV&JJ{!Uzwu29sU&iLj92dx6Lnl{lG7#JFkt7cH%YadbXyJfod}92D4ah-H0Uy! zGLegOm5zXBiMx{o5bq#kq&vSqAR~ghNc+i2(E;&N+*s2$Aqd7Y*X$i$MtSoRJzjGbk)@{mL(K{o!5y>%aH+7>)X5@>$B| z5{uI_Bz(9$zl`1Mqqz|=q%S)-|5&>T(`J{}`*Eh^1pCgx{|Vk({-lJ0joTD{Al(O~RK*nWgAh9ng* z6_uE-;E6s`HijKKc-1y#D`G0HQ}0)BI!)S<%EZ;D(X%?u!<)=zWDXwI*?qUmPz-rA zwiv`!3i%Qp%cT;9U?w<~nd8(m&(a&!>2#VH*%?0b7k`6$-7d$+yQoJ!^n^+Il!~1e zc= z$mlYPH{{wIKVWC?kdqgm0>{FX6;xTlvTQ<8V18)g6)2T86ihLikP<@ zij^Kqz=_D`Qa;7Y=ThQS~p3hdUe|9-uCi=odEKSQlL#>`|HnHq=V z5kWkTIW@!bv(Iws>?OYc)$dZga+c+lS=`}}VtI)zLE*wreF34$}8bF$RMkCss~jqjJz0GkqOeo0cT8!LGiFhWD-RlG3OCg@`6Ini<7m_R%h=M?{9ZwZxt)^)Dz9cI>1c4|L z5X2wvyp=y8fDRFUnA#8lK@=efk0&*Pz(oq(rw`U2{o0^@_=+h>eL7bS*}{iz9}_i&;MN%Rh~v zDU3aro;4&8AeBg9h$3mt#EvW+L!)Dj8JZ?-2@c~D>%AI_9XJ;==moUEhl77B~HhTg&GevA-5jB=zIO?DYAqgXcJrIbO5-cyCw%A}G>tY(dk_uu7ka}&vwm^^!)^DjKl?!66Sy2yA`C5nb!(+r!XQ3YwRITmPsVC_`MMa{RYz$b9CA@WF8vBv(5YkYm9$CNA}jeF$gCQ%H9coZ@61?>DJq$f}t7V0RZqe!^vG?HxK zD>A9&1r$3Z-fGhvRY|Hk`)_S?^SDoL@eH*OHs}Q*3E8CM*qr~VPhzgj@$lY51SAr3 z)0mkw@}P;_sUylEayG?yG~&i@{Q>Gx6Z@ozFg45h=f8lZL|pyC3!HlP(-@g$)M=gB ziIYrB&R}^qr_P^7HZ+z`o+gp8^Ap&CK%?2l9S<=jP-F>7*4RBbMu}$-H4Vj7 z@k9t^g|Y23>lH8}_I3G~<$iTD&&ca_Y-he(zu7z}Hep^R$P zskM%XFFi-OJV_Ax1VKPNk!Eh?4D(l?CzdIpC9*hbfVX=QJC+Rm^guaIp`S@Od=tj7nPb{Ao6j6#o1W8e~u_TIPK@|FuB=>$e9s3hN|HvzR zY`7l@!VgzaKoTM#U^E&|xAwMv!5MZxD+Nv=rb-yGxF9H+;2Q(n)H&d$d}8 zPF;G6csh$?4KavN;x1y-eK@H!VHllk;ue3nJdv>y-9s%8}I%x{(A=uwpz$D zD>P#TDz!Eb@80Fk!v|cye}}Q};`$zjt}`AvOiUEGG&#-ot$WnA4^WZNO#{z!8ILSP zA;Pc&x*3C`n8dN>vYuvmWSBP@LS<47S`l@>}qNB{OFy64`MWTX$g8g_wjr8c`B83Z}t0vgr065WI6l z-AeMoS8g!euh3jfaQpTu_12h%GoUjXlAJ5^*qfllATb0bXEz>su` zQFgOV$A<;9P(dDKA1r4z+@<`;e$w`XHLy2Ci?5Sy8Ukx!7Br8qT% z9f;)1QzWM6>5RaR6tcM-#}D5?>9^^$Yg8Le2z9h#88MXxH^Rch>Gp}~8cyU91_3EO z27*ASsc5Pu0D`K>vgiA{=em+8iG4v3`l292KWTCNs4EJ7=ob2T^+ZBI6e2upEcP0; zPu6!<{NTO8hfm)`a*n(bAJ zU7wAeLzbR-l6&vo;QQbC8i)H^Y`yjtJF8o`*VkyTcDOUJ*)s+92QKfu_5u06#kic{ zpx5Ta`4#@o|Kac8_6Ahew#mr~n(fnn_kFa^n6j226;I;(KI6be(iB2TK+L9zSs~Ly zShhr-3zM9Y6a4Jo_%+neJw^1W&%MevVZXxjr;6wahm2}4F@G8R{BtDaEW>exq3Lwn z#~dGRBB>&JI*XbuV#eZ3&difYWf4`0NCZ(;@dc5w8$!&$8V%_+s}u@(B2mB-z))pW zcZ|Gpnw>{C5jr*e;|jxi7dI3U@_CeUiRt7tiDDMZ8`E!8&}4ywqa&`rb&J|&12u1= zw}4| zwnyy8bb>%cETjqIF@_Uy?i}y&g^zuV&%E$5TRWRvId>j+`_e>`5dugit6?*s;VHIJO{RfzjhmAIz!tINsL<(d) zv3_*;7Zhjkf+z~w*l{E$05z6EH4_Muj1YwgwuC<%kc=CssRT`{kD`gtt%`AG_VQ5DLfs0Sb z?Bpc-4_2{jEfyxqjCwta$V`@}@C9fL`_#un1Wh58OwwufxpMj}(=Cgckwwn8n0e_m z&1As#^_wh~r}*68`gM*Bn{qae>vc&#wM1rig|jDLVe*NOp$TOoA>#1xCWpH>z!?ya z<O8(REBswMIh@W%oqp~>Cz-daf1A0iO98(oH6-G zV|={9@%{s}xXAk6HX#y<2Pd)<*iHva3`l2-$e}{F-bFLwq+@Z;omgbtZZi=xsEZMW zE6-r}Y(%e5elkmFM}&!h_NYZXk;0C20y#rzVu8-_F_P_&P3D*=Wf2sG{jFoXevf`* zi+=lvLA{N)v4b9hH*%{9>TRoW7KzqQ7Yi0)9NXG!$yO(qs{ zc=<91y$-se^QDh}n$`Oci6oJmw{Ek$xkEAzk|wf#e25!rten2e*pCSCNyZc`PolI^ z;!}V3@8V6);Wn$(T8GqSfzs3@iPQ>X-$O}&9`~snZzDw!h8P1|!5`KTJ&SZqV>s;N zc`n(6ffkNASii%{6VDQpBYbN_!iYg6(e5>4tRQ%G%#npKGt2VH^K8HWK0Vh#3kAfW&E(>F5}5*qsZl%FW;h&Do}S0;R;b+i z9#nS_Gyy}FvBQY`;sPg@mf5|29o#o*Rh-d)cs7MBi45CaB2mJ~rwMEq#~uq1 z$&v3Rec#K7APbUQlNDtLLHz$|sPv<(KN)}~B;qlke>lK_5O|C_&7W=_AOF0LT^fvr zlH~>{MgmdO2_gssAEJOU12i)rQhhq1ix*EYvv7je?h)%Z?og{AQr+%QeB~pEOJ~`C zZ-?q(kM!x&yng*2@3w|$gAwH*&*U&hs?jE4#))Yv`A(JLKqO_x8I4E0{rbD~TTM!Z zB8^UqP?50G0xi*Fwb7z4`UIMUAjwP?^29`uFP?pd=l|+Y;XGBOY>HS1yQr2!YNx|s zJf<{}!o0A+<>#L#bReHBF+WUT-EX5#OcG^HGC7r2ZHr*&F`Zc=ZWhs#21+_4k{!zf$Muni6n_qiR{D#&Eq``JRH{|&KT3`Aa^>X zQ8?P&M@z;@m9h+bhY&NVwJcI{0X0%_0*CF@`)uC7g<9`phXZ;ODb76gVL0v*30*uh zB<`vt1RuN6#Isx$PCY?>=@K&+E;6+=M}6GH8>R81A-db5aq9+R=MYhLNEN5)TS+#) z_A2}L_Gxc*7<5E7#}X4C`y|?_i~Rl%uCeU;JWLootoIprEf&>?xIdz)sk~9`Q|e9Zh|ANI&OS{_chQP*^puGp=ong#Yjw;4hrDy+4oj0IhOIWkfz3p@gsh6Fx{nzXm=aQCi+LnPLL5fi`0Bf? zy|=-I^UsjTl!(Gd$dw_K3h2o+DI?9@n;$T1N`#4!!|e)P%VBzHiTRl#g;b2MfAiZ+ z#s!W)_zq^mKpVMKtO1#mC$MTgM9;zY21I*%U~>=x;}?~(LFR1t=f&6X5$q`~ocL`#YxDn7lD zjg(Ac#AT);m&L%vltrpaK+}zA3~XFP+%O`esw|7JP-*a->(CVsSU&wEFTV0;Fs5eE zwE>ffKIWu=6%Np?WA?uO6-Ijp#FJB)R)lUhxV!om;kd_cqQ=!{KFeVxK+r(YY|L01 z!$^{dYuHMjnCv5rYmB;0LLr8vXDJqQ>^XkPoo+#wyh9PPT-3H!|oA{NB8;Q8*dP_U0fR;R)++R z!tAF%!E||o&H6Scl{|ZWm%eW!rL!zQ{XF@l6)OEct`H!4r#^$h6lSmQL#uaX4vT%^tx@#$m4Vp^l?B( z3)zc2N}-JJ3`s>2u}ENWd<0gX!SNx7@7!Ya<~dS5h&K^KZ&YbnT~e-z;0c7Hz|ghO({UW%Wzg@DO{a+$ zN(`q@Q0tA*Mr}krB9<<5u(m;=r1IoPe--)E6g&6s;6)?Sxg?4z5X{8z+D$sB1dc@9 zN|6+D95mZxmP@?y`Dbaj*0H4o{c)Y~(E*9<0_7*3V{G@>-MPbLHiMg@6kHRLZ7i`pvTjwu{4To2x1fp{@6+do@sZp|gMZq0!Otuli&AYJ=sc$h-JvwrP>qRUE24|%V-Z*64cIfFQqcMEwLm$EnY^H|;K2^wa zE+$f#)`^x3QpG$S1Uy|KHxb8B#?;%#kjioC6Q3de+%r@+-=}@=4WzI_m=CClU9`zO zyR8;;Cr{Jb>*4l>q>YeLE`#R_Bnx>u;|{uP5cm#5+rsxn(&-GzREk_aLntdao`j@m zbbDPYM~7rnF>=WSgdWQ)OXP}K%xsz5^a&QvoM-Q_LZx!VsMFwh>mHF2BazCX8Zo~0 zjjwWYeulMM?<0F2QV3Eej*=9KnOPQ}d6CXumFd|6*+d+*RAO#oi9$X@Dgm|THp6k3 zOlE>qe1g$Hp!x2q!|^-2JX95wmoAVNbl%=uXKUp0>o0za z#o0N|8U?0bn&bVwd(5k8%r10gg#iJl1cj38kWUxsSOdyum+3Wnbl!c4xpBm3XM_2I z%j~CK1i@r`YnwsP=DAm%Ax(_#{xR7?g0SmF?0=(=vpS8H74I{GQM*Ytv7(Z7QtSJy@y9kOim&w3X2OXbgMl& z`$zO@72IYUXSYgf;sk0S@%^uUlLvS1(CRihbNLL4DKmD5WDT9{+&OAJk4#*n+wL%X z_G!jro9ct>XmW|mCrjLY@GcKm*C{0mBzjGnYp)>$+XUklTJa?1tG~wbK6csNFQB)D6h-5Cu+|qdluE6T{9;s}aZo9$y%?CXEz1OK- zf4~Q~Z?Ju^f!6IYF%Bq78clfw5yS+AxG%xbVLDqt^aE^b%(mb%PAJ$;fI1Ga5LnYg zy!ly9UVf5Vy@l3plRP}+rJTX(NuBPviEG*^&d2EY+vu@4p&}Dc$B8TlGo1r7 zMR{_Dw60*atBglIY|lp%RXlqLu8kBrxK^L>s81w-r0Xm$uh1R)$mt2x%oI<5_*0C= zBXqxqF+S$Vm3Z>0XQ|hkD6&ApP!V05{q;>Ui3IsGCvZcDVsVDa(^pu3u*vlN1csq< zFzlm;9eV95qgI#ZaTi%gAuBq)ej7g;uzBbEWK&73`6AN91oP)-2!{vkTtB4o^oP0A zJY?s+`{-tz_F%+^UwVN*_vimSiXBkvwkT*eR=Z2*pn)iw7^yU-Af*Is+CiWSD-sj9i|h)fu9w5+OE?!y{t8Kr|Tf;PwrIcXu!ZkAj)u zaPo%b2qiajlcaFII)@`D|Vd>O7=bt!3 zcif>rY@>vmRx#=s+Enj8h)@vNR|7CK9O@Hi? z%%8_hnrNkYR3pyudtb-dU!y#Cf{_}bOJfR)Pm(6dMK%VNfHkvN$vrWAn?DnGT}#ik>$r8&`}g2NG^it;yMj+ zTz~XY+1~w3Xdkbbh9Djt?Fl!&^)8wuq6lDn7MW}oMbq%ZfJ{1tD-RI^7q`);v9?EN zzl!gS2_%nO>-UH)pTtX>v_y-|jR(kwRZavdMKggD`Q&63t2SxKB!#Sz4H9VseIwQW?hvb7T|uV(f19IjVF>Xd>6X_d3E*VXr@;dUQxa7g0o? z!Kh0p%h--ZCX*o(Px0ue&ceB?>}+jvaOWK=cdv20{eV%ojX3V&51MG91@4$pze_Tc zWny-op6zj1Ymmw3a6Okm)EET$trkf~%k@alFuHFm4et#Os7qMokpW zemuD`YA_=e_|Dr0eDojwBQ9S($*nJc9j)u2^({`GT4sJ}jtN=Eok=on8EmX=vpHxW z8zOeEMS3ES`os!-%jbnp{{p3PANBp4%#Z6#PiL68xP&oXAeqZi)C=sjY6Mcm(@UqQ zuI*51*QwSH@hS}_=O=jLPk)j53zzX{rpS~g(E>=Fouwa)F@iDE3yVlbl7TA|h&pZn znx-L%A={g`FvT|Q!((ce&L@BV&r=9ITJK-y^70u(zr*C|D;Q5dNBy{i6pk1vBZAI= z{dS*}TIBZI?;*NlO1T76a}(6NRa|dO;w0tLfG4hCeG&Qcp%2%`o`RYpiJaC~%& zb5DH)Eq@V5Od$IW{KkDmK|s%+B6s2n;$V|*ZJon|eT04ozc;4V?K2KW*yVZjy#}J5 zVA!k>&!-5JDU|MzcDjVxuOTP~s4-+ch9C&o_D~1|Pcmb=J{Y;7s;I|;KvR_D(c_aZ z{8$(&{n!FJ`eT1WEkQV|o#UA!B!WjKwk9Xew2K|Tcv-|bmWl)lTR%$_v`{eR>n+an4CI8Z1NQ9%qdcHc{Zzu>^BYw)rh&1ixd}T z@RfjAN+C8i$8gxC)2eg4b(=Y@OUkd)vILx|tLTL|p3~;ejn{bPL(j9Zy-DBhv$VK? z)3?YJie#o2*se4=ySTtRfACu<-D3($K<{Xq_Q5*gut{xyn}hvbB0;1)J5Qoeq&KoK z;t5nyARW_)sWRPO2iNmZ%ovfL#4vSw?GBO%^=6Au(QrcnQIPR{m&*PTxtK=7voL3t zc^Z zB1Fjyd6HNPoj(@ZohktLegZi zlqFqAvVXKkED>iSKY=glOr&INw~r@66gtTMm{>f?FjDCrY_ht3hiYe^OfG{oaH!pV zh;NMuwFp~kVUBwAS`O`27r(Vhx4nmypXbb_FEP-w^jE)we|sA>mZzhcxJE?N-JxWk zz=+!ff{YtVNV1BiN{E3+82N&tsG@BLTFf+hK^QhAQ9KevDSEub@}r-+@?#0;KMrRA zPY`Gy?MmvnbxCyhzf`H;KGEz|5<-*^e&=6&o5i`(;|I%7C{9i?vTVZ8M;0a8^(w+~ zl~%3F{PHPw>kYp1_M2?%HrQQ%#FS|8^*6uIH^22&PG^hcnKem(g}sOOxqfYplA@4}C%D(_qNR$YZ6DcpsjIL&dzzPD{0Ooj z)2STc?(b3-BX;iGK@SByQ9+9(k>d#@Q)g~|hPa_H>NM~yi_kY|)#{urmWW1OUcdP| zi>FUgYgydbJ|t&3M5!Fpi%ZBOn?bdLsYqhzE9A&pzi<}*mHN9SM_d3Zodju>`FL{Sq{ z(rCK@nxPOhJLvHVE`8>gDP8;o#r<1!5B7;a_cFu1cTqOC8CqG)u#aqd=K6-9WGN~CJI2t>%l%>>C<3V{)Y!Xh_r z9q>PX{Y^If0J#{)Iyk0(<1TxR3MENJ99py^pDiO~I9p)qnI}+Y%V>=O)xc#lu;}OF z+^^M0W-?s+{+m3ra*n~$R6_H{$gW4T-e+hjC}IrJ8dKI}dQw1HN^tK7_fh0BH`ccy6(jI{ zF3g;y)$Jhk_9*Kiq2-gxWhpOA&>wV(X-Ql$qTOjQJ2TC}QG;}LhT+iX`(L}ki%*@V zGPW6o8Z)P_Fn{_9oJghH=@7X?;!?<<-(vaPB}So+?FJ0$hnS&-Oo-$8M1f7a-e6{S zmWlaA@=IsP&!6Ijmp?|}3%IUNIVNJeef*w>Yv`ohkbW>Ck;-ECR_WBLSOXVL%^+zR zBH(C$1E*hMcsQiDx`s5garQk9Zyg~@CbzcU=lt>lli7I=SGS4IEnp+@U}KB#9rpIF;jl+EIiulOsMefx0|FG-xw^cn_&R4jGix3-8`VNxelU4TrASQeTcQX!<8?5 zg3Dk080|)lZmWTzYWTKG-yPB0+95GrBv*)|#YN0a3@Kw0%TFMhDFQ(wusZZc9;Tu* ztnQK44O+c1Mk0kh>N1hb(Aqn~2z4yiW$ZL?tRtM^7)8#KnVcnb1^RZKOxmDWxXQ^- z|8=C5^Q^Dm=7azCuV5YbSopjDCC;O7u=kJu3GaOW0rAQj{(^~~TR}Gx0QjQ;a_FK; z5?&-?d!k^NvSjFHYB=bJf*|xX-CPaBC=^AJ@P}6KKdSn%0`$KN&H$>TiuYGHKcQ&S z&!o-h!uE~#&9s~+H}xFTXFrbJ-zU-x=9X7Tmda%FC615l?Cu<(NGg75iGT3Vf1BU_ z+P85BJv4iS8A^m^mWmW-a?qg=NLaRmu`)|+YLa-UA`X4tzkP?Du#Y)6Nu%3?fybm^ za`fHKg* zGsv7?#&mUr-X7Ah&O~MsDHf+`x6orI&1x4}QwV&E$>}NdWEm?+P%ba>@Pjw;`#mZ_ z#HANL%IxW@jL=DDa-n4we4eUXcmBS-G9XD8fd5OENZ3e%8jpFnL<}Q4Q`719_ zT$rHQU&UAYy!N z@J(9PeQq3Y^444HJoSlB$BkmFZ|*Ri)`5_&kfPI@!0uH^rhEpXKyvClvYMw>t03w=b}EZH zR7oM=Sr$(AB$J=}MS7Zv-l)-i^eUZ$4>&loSt>2ly?dKncz~%@!MT8W@dC+InncV* ziF^d#MG{0rEsl}QgKr6{t_t05PZUJ)$c)9WhhgOX;i%nDD(L@&ilPW1@`?NaL6Sib z@Pi0J5)gz4KX6#9be~MRhhG{z`0gtYZhlY*3l|uh%k(N0)Z-5jBZuLr#mxLH$J_fn zxOR_!{afGQ)YBj4nV($bf1jWJ z)MpVk*I9l0I&U8JvAqPB%X8#U&T*)l=mO~V`#5TZDi}y|j`YGJ@!1IiM50cgs8&H$ zTolnHAj>d-!MH&=C$M(&8b>>O%v^n*t1}ubP15fwBqR^x%q&rqWYFnRx8d+$fLPli zW(GKgGfd5%LXRBWTmfhO1BA#!5I_ukQj&{2YGJhwS$*&Ua~EF3GZc=${RUDB6a!EU ziYHHFZPqxv{svJ-#T5lQk80fc_D$9v9nt7J?Cl+)9u7F(sbe1xAz$F#Q5V;TxN5Nb zjkoyr(IG48EDvwI$7g@;bA0SepW|PA>vwTRK4;T$o*0ce6Ua>20Sn7niWgJV8tcRa zmGbEe6c-jzOo>`$jdA~wPIZT))ko}HyGj54Du=-FQZLl*naC(CYN4BnS72~`^aX@mil*wJxH4hZNA36N?sQoG=qrdZIJov6>cGMZ_nDq7GibWV!!geB z8qNKO%uh{I%1u!{*u$xAFb*8LhK(;(8Fj|&KWLE_M1-Nol5@!L;7xi#h~M=nFFnuv zpZeSEH?~;l?$b%638$uT>lOT7m-ym&x`9mGweh_HzUvVLfvp+lL*0zOD~f_0Md1&t z=O0}{|40M+fAe*YA_PeR0en9s2t8y;CJbF_mFfj|Y=742);|9BtKVNp#52;u{0hx# zlX1IEJRYN;P+2UU;N3rXlQ+Kk4ks>NW%)xdp_hxS?`-mofAqhw@$dmxPG2PS1CEa? zq>VUUZ$wIq(@%;FJO|gZuDO_D7v5?}*)l0M#iS+Umwe|a~-o8sa;W4!^Pj48YB&RuX^&<%RCCvO8W>0>c zo%K~JwFY`Ni%~40`4MLQ0I_kzz_$6yrpU>w7r6h{yF7Y$#MJpGktLCh%?hQbzr=jr zAQ4X>s4{3Gmi5?ILv(EnRibWL7^xER+%#?^Lgb+a4$Z9%cJ8fl;f0S-Ygd>#u}IuV z(dsp+)^<@nn|s%9veS35`eVi;i^9qogm{i_+af=+f>fHtZP#&8u|0`Qeu7%PgX_3x zvWz5%SO;r#Yg^E7F>~f5iENI>-Zs7VKIX83H>r?T4SEMXTAsmPkfe0xMINp;2%-d= zwS5})nDtnMKN@jTGMG-rDH;i0A089gGO-}wg)0|nKH6aOJ8v>GjyM|%obVzdS!8xL zLwU-eFp=QQ`OC;!7FmxY>N@+ri|0A?_m5~l+~%#{f0fEsi}UB6V)L-Z$G`XqL|I{O z;S5S(u=f6SK7MwYayiFa4P8jTTzh?%)roFJl7@6jEM$>&nc&P?JsA&blBSU!7- z?x;oc=!mIQiT1FA-5uhOZ1Qu{jFJ+4*{89)Pi`ELQViT)7qK6p#S0AekU^({CTTos z4{`5b<9L6QmQ}|ShIE?;BqRY{RCxW3w@4RbOnv^ZGdcYPqwinC{$QWho3GLM^8d)_ zyKi%xKICwFjg(oY`oSiG?Q`xo{wC71&!e_l?7sQGk}gb>pP0cHA1Ah}L4@fIk^Kga zpdyG;=y<*@DcVEBh`kv_k@H8Fgg*iFe{}sD?TjDhRYg2DVs(+zsP0X=(2$9Krgl&RIboH%!uPEsR#{tVMA zCviQ2nbahEuU+R%B2HYjID2J^^t6N$A5mJ?aSry_eAr;|!@tP0ANf4(*SfR`@{`n? zo196hc!w>9UWY)5FmfeI7oTDO_S*~tpT$dOSvhl(+TK394<6!sHkM}*FU{gbDuQAl zsWPEArn>Qfu+^lowMBaJH19sVhg&;BPpFVcL$8S#4mjNFU`$MKI%D8EBYah+7}x05 zJ2XZConD=cX%f#)An7KVd=XJn3H<=awipkG=n_=BU6go%=_j6{bn-m0Se%eCt=)C9 z!1nj9;XjJjHO_roQzESd1DRN4|3Kl7&v3o#luzK0y2Cw<})#?ooh zlk*Jg1L~Cu#zX?&7ZD{na{a)P6zzdw#@|2??4JPoKY{+8eP%%*2pUI9K-P%3hXtq;fk?2KPRNw( z0cy9!JMX>Eci!7)^ZMH~j`oSyntXU7MyJ;#aq=>1B1>BAQp}f_JbjXGoHi9Z-& ziVCrGikZ`=C{E4dx*n>cU@8KG`aYG_`*^h)^^G0+w#;6?iEy~d?AZmR;w;%9z|0uT zoqUPN>tH{83wO|Ab98PDde)yUPIDNCh|FSLqU-xO63xbMg!GQIeqpFqtIqN z7*j~)P~s-dVVg*BNy{S6VTA`bAD|Vc=*Lrh?K`isfBzxbtw)rtKA(I-rm*rM9^Jdk zM18=>x2X}(2O4rf+Er0U7L(IO?Aj6C#xct;UnYpb!g7ha)WYk8B$6_b1d47Tn{kvx z3@x2Nip4P98133VkJfIJo}S|QFZ>+Q#1x6e5*4pTb>o0RU{h%|SeabpbS#e8sgR#9 zkiK+^NJxRAkk)KUy2bW`J8T@+S$X<-o_ggKmM>f-J~zw6xwGu;AEJ&tst+D9ZZydz zV+`8+XpzgP+a~ZF(%BTEBrxiAa7R59J%$td=uR8OcWH$N6BBWQ)&W|q%+B#1MlOSz zFsN_ukaI$m{+LjU5GRueuE24kO~$(u}4#@$b04ax38;o?3AQwYmgcy1> zi#khR{3$}UMCIM@Vk>EuE-3FM$wmJQTZ)h0D)eLLFNC&VToh5Vwvos$F&--X|?9 z%%7NLs6(fp)XT6Dt## zxk=J9W#pJauir;QW@Y6x@xlcAojzjVqewE@m`6>L!aCfd-ya|v3RydWiFgrpdYEUfu$=? zGB-EJqxY^6lOwda%FWdW#7%`@G{$Z>h-o6SEYa<@8FxF#fkmXIktC1fhu1jR*~geT zfopf!x$`cGc#-LaSr$(&Qmq~`Y&K{g9+8fl495eu_x2b)e2;VKGI2*_Z*>#9;c$D+ z=Aa+(#D%B0*{CoT8T|f#^$&=5dmL7G5tBOO{+PY%tJsw>GamSdA*pzR-BFL>={cVM zYk!x-sVjVcYZI&Mk_rMcaUD4!&~h8ZVns~vBp-b1pKaA;-!z!_a%gD7D zv>Y@;L6Vio52KNy8IR0Z;&lYUflngzYolR__-hWNTP&5NT*qwY1fXv zIPNrl$?msa^hdo!p^%HBC=${!jr#sNdz+8QW(zb%Az%6GtNixcZQK3UhwHEY0I4@(P^~c@56RC>Gky6C(@&m=YjfCd;8ZLoKl5o;7S8hCSALJv zFI*&HBxt|C$?Dc7iqNKS*Kz$0S}D9-i2V?RXlVW0k9*k&2DW3Zqe+z9=B@?$0lOm~jmSoCg&}}gq^qHBSK{8DmgAwUM z8Ee=>S9DYn?0%cd-UfOkP~AMDebhppDKnc=FcnZ|=2$#?34btR>{9 zDP~Te#_|N5u}?0Q;M(;!aeG~YagV?rArrCs@IFEmqUbVPn;UGdJt7|I9CW*MJAK;2 z0Y{Z4yYFt%ZbUTeBYaXi`(t+24-xty($Hq|g^PUhlb_`Bm8;BM zJVPncX%0H1>7fb^3sVJ_E}mij%Eia2JM96^L4#CzfkwwdRN}n&kr#2IK9V6It1(i^ zGKoZ*y*qblJldjHaXEW-g|ul9R%+x2F2@H0W+v14qC@fI2?l{pzgIz*;OhA+6yhd> zL4$YRyU%RtEQV3!_pU!;>B4!E{T=34E|Ja_==aAcfXJS}8eI9(U3#BCzANefi=RQs0{1U(SfB7$oe(-(n|KO_}9B#QPGvBb}3z2E9s+=*5ft@;AOh?uD~VUwo3&U;G@~x3}n2t2{Vt z!6>58a{0kmU!`HpbNb3Dvhy=Mc=(XX^aPqJvfDl)QJN=TJdbU)P*g4Q!)Poi>Y8E3 zUKd1h97Pdf7$S<&e?(gS?<@H~^%wa6SAQJZf)F9#Gw61v8EPk z5YZosf+mTK8xzh>4ZD2kqt9^T_WS(7zxrncyHzG7 z15bmt5TfK0Osp)jaOo_OrgHPvEu;{{?OnogKsgkdKauD1%g?fUw9D`R;|Fhjo7jh6WM+9D=XC+~zQs|$LF>`m+}vsN?8+zb5(YTOB;^stf{C8c zDCN_rvPiwzr|U*co?ar=9kTV+|2OZoJD9ReO!V>W4z*SXA#w@pJ;s5EWCW!1Fc^ZG z5!r1X^3uy6;qLZz^kj}yBH;ep-y;kHCW;e8a)57$2?OJ z@2s=^{x-o_V6WBU3q}H_=a7sN(XdY#xg^yD#f22gWS$3>&(@vySXe$qc=8F}{_?-# zV0)8^nMGn=$gtL<)!XGDv4>_FJpbVjqnid_dHYpFE95(kUB0}z!BTdXDN!M#E4Xcg z18Yb+X)^FUx9cFsChtSHQCv(5tCsuQfRe2;#rMvJ*+dW zN=&FpjsuYnJtWyVp4a~Acd0ivm{J2i`YXT0U--S><-P0QV(%+oL)jcMb#{t$ zNhf>i95+9>#zYvyNX?PI{4$d6Asj!#>Dr(@4uk$<=167`1d1Svg79OIw(=uULI2zO zw<~H{0^730M!oX!UaR>Fp4GqV3_7OZIi%wTeJ@U27C7Fxd6ZF8T=`SXm%D%)EX zvP-iBV#Ej6-{rlpeS`kpHBzC7ql;9Gh{fV8^XE=8_rxVAqIkS68` zqByRjk<6AcrvysNQw(}4{dSv%|9~+qCZj2W>GSx*fW5U{d?Ss1<_h_XmkC3Uf?}*R^Og>O6X|LG5UODrG5t?0M#fE$mE&+~P&{ zR&V3^Vo!+MD0w?D8CL!sPnS zCShbVq3T@wz3(zA%n$@!D(h>U5F|2q^s^-vU-~F+=MZUl$aE~j@Th}tTf~Yv{B)M6 zxImCw#LP{xcKarWYj>Hh#?ZzIMa+1Lu{MF*Sw%|bv5W;oFGNqLs5M%IwH@@B zLaLZSH8pfEqWZx@273*z-MT|RVNjQ!F2mH_f?5otajw$R_X$cax zmS@j#$RuWQdJaiN#tTELqcL64;*uP~NaR40*tGY!S*cQf=EI~Xm@38p9c!JFS9-LH`H$H=BeBr7PY7P@}m ziL%l$%-CzPEVqCk+K&F{Li#^@Ku1yZZ|u|mA)Nm>q(xE09uLjqoy}j>30@L?Cl$D! z;CTV6nZyes#JeB&*00(9*sutRF5~(9 z!$Gr0TsIKYDO}G(o+)6dE^4R7pt`|uTtjR(x&6M&dzQ_lBvH(#kgPt*-93;DD!#+C znqe=i@r)InHiS<^j|`` z@F5;-*3i3krY184$s&nti3pdZR!1vliQ@Cj&MzU4s~p|gMhkTY?kfIZ1Ur2Ou`(a{ z@Y&D5$m!`4m4gcDpvu*&bG*BGhai*Y?)&#CC`m3~c$&`GW4Bsi+c(h%9WG7J&>Sn= ze$Zz3+S^2(CX1i>67h%E=p|>7N<{>BNFkLZC5FT!5xfj7yGcpz(yQ!Jb9IUfPr$H` zVR!KQT{?*Y=Exxvh4jaDWZj_uXotODf z&tK(wI>YeHB){-8pTxeq!>E7E{eSsCvGv+_SpVQ1c3O8iy!Kr-|EvF=!S+7oK}dW# zLn9{>Pv$ZEV-lKA-|b_@lXy~+xFSYM=!CZ8da+FThAT?DiV#G&1CaFp=-m3>OaEB| z`rmsg_;3A=C<=J4U8o%${5rle}zw=s7kVudEX&WL0wkKlUjef4#egAwIyf`lKU$AD8a%$!=HzrIT@ zouKWFn4OqF4?^m-3aSjbgi0o^K-DSwIdjlT!hCKhwCBF3OPoU(p>@}M_wQ`oo_bJSr<;j=7 z$UpfX{yE+K9p-XL>dhvvUcb$Y24rI@``u$|-2;{{oM3kGBzJCJ!`**K{%8LR($)iV zqD~NtVbWoD;}G-2Y5L(k46TF~&yvcQsqXKfMh>cBvbD2~({GX)JFvgYc-X+4$#U4P zQoDPT@Xl?z-}^qB-+Vy*-XVLB4mmpRGH?R=V;9@@nKX4Wg2P+UkmJz7@BBs{%aqw_LVnTzH*M~k6fl_)tESal8&P?J#`Ap?&C&%1S5wVOd?1w zV&Dk6s$jdJ63EJyVa9F>VHgOK0D|%#9#;Q>^q(!D|6OqYx2xwrd=CO2+ZwI(TJ>Mh zWih5JvN0Zw#PQfhl2oL%2D=AU&VTqLTz}&_cmMhC^1=V~o9tYB3oW#0IvN{E0m;xf zRh~s%EHR#lGa5LYonGSnxyy9B6^t79ex3y#MO+ z-}#RBu1~vZGu=G~X5a=MAi2cSghY|trB>V(LpQrYMXX}EQb<8+MREy>6a|7H+ze(g zGZ;*JclvmLK5xtW%Bu9a7d?Yz5D>+S)v^(R=O#1jvMzr0)RWKuePycE3cGQSUKDWj z+!-`gMe;(tUXM|?MiBPM&X~-^P5g~b#Ds#Cjp@@00f z-=aP35e6<($6@06NQTKI5bz>_L?(mhI!yc!H*IjTT*a?>O@;pX}7(j23V-p)!|`apdSMk|{G1 zr^FU3Bu*V6bNLj@uYC?LG->WWrCcgdTslp;y28D8{*dOqj|qEi{Dewn{w&vCd4q-3 z6HGk^N9xg?*gSX=;niB)7*05`oZ_$k*cTa!DxJVb@g1_c8SZ{~oz6t&_r7<7ciw)7 zxwypMotsQ;hvvj5zx{}T9wT#Xm2xG+>gm&@kDTJd)k{2m@AvT&c@|Ec!W|tjtA=dv z)p6r06Ss}7#?h4oV>OSSsjz96fGY7dw{y2^WB z`v%jSH5|ua6i75B8DVaYAe*LZ4M<8bn@N(30`9psJ5dOt#59r_3nC>!StJmk=C$}(v<;VEk z-~8*$)Mfgjk8`z5I$dD?_)+?U5%qeX)l+9t(|MBFS+rONHS9C!wggc?4n#=_kb7n# z^RDgKma3=`{8@|R|7ZGNYi#^US4k4-cbcEGhl4j%F^YSRtxp|C&|@aD7UN(2qkqkT zJ0eU={ObSvzvY9sz73{CFBj*NaKht+%y_rSd^$(z;!#dty1*B&ehxiQ`P?%v@%R7B z|0C@;-=<``q*hf@%LUp=jq(f6QYkDlaJ#skjjD*Kl7Kz6n5pKOspfIK3GIG_J@p9H z7`f^Kn;W}K`aKTU9an}KOQJYOdf_T^W z!6M+uh07SZ3f-PXCY2|O;uKeB*c;V&`gDWZ!$WdP8Y87sJXWUB>0!n-RxTgshky1f zY~Hzp?HANd^PK|s5`$D~)ss&xosY2u%| z!pX0^#FR1Wv7@8|83q%)jESt9nA?4_zKD}kP~9=TiA|82p>X^P?Xkzs=3|n6m)Lj@ zXLXrNXD-lwQfIR{;*KQqcfau=`!2L5P}EKK>^^Z-U_sFdLjl=SaD#|jF&Eo2sYq~g zI^~2nq!hC`nu{}IX2@peXr*nOWDF;+lB~{9U0p_s8~BPuDxF4XHwkJFvByJdwvL*g z#~ZXUr4UgwNhXUp?9=RyNTrt%)ghr^bM@L+(BnxqKY7Sg$>R0XMUEvzad^jdW`*Y9IW5kLCMtGx2!=MZFxt^FO!7oQ>2Qr!FCF@l&Py>g6|s~70_ zHuc~B$K+0(WMKDb?L0t^>Ev=IF)t!*p2v0C3??3m79$ap5WESBuCj3S6k{PquTi6K zXt=h>!*Ac^##)2?>u<2r_u0R_hNVmF`wrsl4DqD}j$gRIgIl**%w;GgOzf`1_SB~9 zLm0*I1Q|(;C?b#xAc`x5l1Rg|>8b)GVwCbl{3v8++GmRPP zdC2RRo?&PC4BFY#++E*fyV)b2D^r~<@Zrs`lT=zPUi>NSNfVqVCr=!wGg2wfonbg` zk&F)!rxW(~b{LGt=<$Svq((*}c|8b)14U7TKfMX`XAIE)%Ww{Wh$ssG#A_IaYO8+u zbLrbbk&eZ(Ft9Fr@a=jREF~EB3|C$ z#L^PY{vL_`7`HxQvb?~>pZhB9W)pmuzNDkqhO|0urZIynbEmoe&3B1q47$B0!ElR2 zB1yg5qfnV+_2@C)fBS9TfBSos@_Evw6l>qR#ozs}|0&=KF#GbXSjFw4j=b??x{YKs~`p%bv>dOxU4ufySk4s@v%G)Nz?Hpk>SuH zE-AEHZ8Sw-Ly1v0G{S6-WIRD@Z3~7Yto?mzcW!gISZ>F|l>xxeDhCGh7X2s@)b}xbzHf{Ga~KAytZeY?#TT%H zDbBcyW)PxD9)d5B$!AFv(@X*nLDm@$C-hrAk}(rg_V5*v{U4uQLoG1op+h++$NCI47zO)C0s?vQFI2=3HG#y z)jni-aT!q+a0LIjC=~0FHw5^Dj%)i=R|d$+QB*^5Nr<^wk-73CH}?#_|GtFLuT|8W5*?& zj;L8(_8zP=xV^`F_ipp8+aFW$T#yF%))24Xq_y*y`pyPNj-BGgFZ>i?W(DouZGQE? z|8<7tdA2+WzcaxI6r6FNVob&I0RZNncPol^LJW)Z=<3zGdZ#<&!ScowN+0OHm&1~EViF)<4+E7Mm2;>DFq93pwWE z8G620?ce-;&Yn0!w;Jc8-~Tp7#-u$Sv2(ajGMC1|r{`H*e|pIGq<~NaO%MnL zg(MO4fsG!*SOg;wNtkJz>6DBZhrq+0SS-g)R)iQa&p>GQ@P|X3VV9iaaKs8InkpM! zpM_SBs5?ZRF;TrK4BHs(HfJ3TIg`UK+XMrFnam2U?jeVrM+|z~oV{=waX7(8AziEz z&y?`|0BbbR3_UhA(wTQ%Ul=HViV6Lh1@yn^rayJc|IV1B&}-IzVccsjI+L*$QxpVA z1zE=nMbe7IA9U;7w#TIB=lSKI{aK3rKBGrB(Mtm6u_F1A&Dy{C7P&LWxcp!I6;fuJ z*xr!M_96GL-{XVFpWp`;)zTteUuR+QJhQV$=qLioWSLNs7>-8BqD-&RMvWv)U1fi7 z7bOHqHaP5A=%pg{`XTN59-U5&oM|xJdBWzsn>f~h>12xMN90pU6mLi@7$No?Vv>k0 z$*9E&+2vLASd4O^~frZ*EcEZabk`|#WWdM7Fp9EYv|k@4>{0bK}%EWjyW5JypU6vd$vO6 z)KRiWkKyNvSaE~6suA;D>g_|!Tool5Cpl9fS<2#z0{zJdPZrQJ31;W#Fj5AhXftSS z)2P=lk~!Q#pPifUGPV2cuC?gw_Q=M4nukr^fA@Xn=1NS)BjU1vy}iq=hYh9^k=HMs zL(3Qpe1VFfA{#lr`|Drh-h&Oo$}DgE(2wEPJACrV2bilfTsd)$*=MgXCd8@j^3t`V zkQ9h32Hw+s#zu6&7q~B&b?9r+3F+W#jVR@B7 zr$uM;9`3kH_h7<@_xJgDzs=(6Dek`i3GaUVF2-_!Pd>WN=3q)YgtJ%AbL8j>duvab zHan!1h#oR$y?~Swk&sm`*a9iRWoSUzF|h>^7R&g_Bu-~Q0s%#gD5T;{2YnXAh>8s9 z$RQE>EUF5o@1TSpst&H5q*uzJjY6&rEM6`JBvp^p+?49^Byu@PTrJS*SR`^12t6V< zq_@*XL_vzDh-XWriZgUO9mc($psA9POl5D2YV3(9^1t3T_>Af^c~Irwx4rQLb-UfN z@4Hz|(*(oNLQRpyjlEr_p2*z%JlCJpQL`4GUrZo(I-IQPY(4amgpf?Gj4zJZd+Tkq zxfC;h{tXrvmq{N?x%c=!|M!3N-%yYwmQEJXmaFuP97{*9apwHXq>Fj_58fweH(4&7 zCiQI;Psg5$%$gNSQihs0!iqpo#Ta$&;~zLkQjtR3;Bdhpp{LLn zQi!sO9mEm(0!!HiHijKW;{g}-1i@~Dz3U${zIRB*4shcNL(eDCo$%yaZ*!Osn0<1{ zlP4C-@iHHDI&2FAexhO$6CJA8F0zNktf1iQGEt+!l`|*Uu|;O50cYnk>^OCZmnh~7 z3@nQ$2Q^eY>|T@3?I)0jwd8qz{O|m2j-I~E-Cy`+4#y4VQwH*ALbX`NiK|3$osu`= z{76FWL}(-d6x;7T;qP|-pEwB#&C6nHA-i3l_SzwVEF(WRLi^qy(mvcKna|>83OLC) z%F)YIDnsl$_t7JVi8(`U=u=H5dHqMPAx$Ry?Z5Yr*%;U?Y#;EKUi}iCM**$jgw&}% zTlEfcU1T{K5%g<3-cS*(F?!=JYQ4mcnI(F58AVC(^$+i$9XrCk?|z5zKR#q6W${!C zF_^NxwnhKe1G2*r&!np`=uj2nAUk+2#DWkNnYQ?88OOk+7xgjDALXz87k`W2{OkW$ z+_!ErSIASJHmNM-Y1(a!q|SnGusZZPXiZ7xlB7HtwLf5584`*<@y3M2sRHUbjiY{q zJAaN-KlJBl@87_POQ>mu-P!|8J;v4ZFVpXg=#F-=g9y7fq7=_Dbv%O5!<~#P<9_d2 zvYP%DF!|q(R{z`TGv%QFmzF#RL5QNL_`ZklIY^2G2zY^yBum1i-+QUm+W)c|Bkeg; z*%?lRf|((kj#*ibSUEmN+6Wk{3mBS=F<+#?m}9HwSen1g zp{L?zOw5!`_e&a3|k1X@y``;s(Fqu7foY9>-96r8D+iDZpA=cQV z9|lO0LTB#|zL{j{%yVRuRa8Y~&~1{8r$A^Cr_&5?zWhGwHLrwnmtlC7nnz z(RB1_$VeFSX!8@4^-UV}2HKHRlyest?A9q7W!mi)UB5%j6j{!fkwuwyFh)xs;qdS= z8DWAv8X%}Dt{idaqwjFEq~Lt+0#Bc8BKIP~Kp>e`skjcxL6dRd5Yx&GYb{JQV(D0( zX1BpYY8KatVWo=*Et{b4;np`8#adM6XSs6W4B=b`(U`{zL|j2d))UyHDTiB!Oa~sx ztd5e&aq?&W8ZW>6CCpqEJzwSRx8Gx6dw9A+wU8q(7qGS-GBo>}Ja{p!EuYm?F`b^jSLp4FBTyKH|Oi9#dIf#G9A6w4C5tN~31A88`ck4;7-q5wy7y*6uFr zHy#j+83fH95AW8gzVtF*zkP>WAKm6+ah{Xa5?5ck%Dwg$+iMdf#V08X7?H+e0I#|( zzCGZ9t`QFhOajo5NXiO_;fSs(BgzUfZ;GEz(YkRP@u0?$>Ioiy@;WHE%%3>H zNb8ZE$xxcjp(jPG?ufMRkgO>9d68JbqnwDLovPAW5J>6*Mi2Zji+|!grW$Ae$wL;e zyh@@QEk^5kcU8f8Ur8AGK;f>ATZsrq(DW2{IzOFtU9d zK_XSI(7674oVa|BqhET1(kox$m7o3v)*jx)pVp|%X$Z(zcAsvyNh)8VSY0BB1d>UW z3+Ik8Q=Vb8ze{#HV*UD?=xV@~7ccX4XN#*>t|6Im?!WaeW;TsdE}*F?O64lcM;7ST z4_G>Sl0-5||8R#%bDKeJgV3Im&F49K>=c=7o}Il%1c5*}u&^52teibfq$rGcH;6oe zUN9k?Ius?H$J^`J;}Oo`Aw8>&9S)hAF&tH! zBm^(OP*fCEWjeJ8r)@+fPBK?Tj>QqBh`_PIa~OAeOe7ak2uLY9H$S++{o7BmJ(;b; z8b{8afnuh^6>~WS;mSI$U%thdswbRX>OiS7U>KJ96Pg!>rbKO zlZq!9hEwYOCbhk7il$CwHcPsaV)5#8bcPl|cS2rE;usp;SOgK6%XT^f56~ylg-v4{md#EK|wJj z9N#CND02VaBa&&8;@tcMA^w4^OS@4-Bp`w)Abfw*N*G4pUo87)fd2PZ6#elRf`Sm? zc^-lwAc`V^9}-3Z0+A5--h6X^=NAawmFdKa$$~6+p@=6)7^yUd5yPnO@aoV02=V7$ zLanUQx^*3^wU1HE;97fViixTT1cA@gbup3|jJQGIPl#&*q*u6d@&f)~%!yNHIrqkE zD07R65qy$|1kfsLl>?2Sg) zx`2#CIg!F0PVgjwK+@>jK2sk8RYXuF(wQWgWP;$!uVbi76k9%rt;dkkF=I)*Y?;i` z7l@)UK?G6YA$UIhP7l#AiIo>PdhG=q+hynBZ3>dlM_>CjUOragbXw(1QsivjU|x^0 zc-&y_*^}4{ane`jh^?-Yoj*;Z-$Cf_6El;fawVcjCJF*#nuZWTNJwD!krb0;eg^ay zy+N05qmCLvIu@tbZjwu;snweJkwz>#L%luV{=IwL`Q!t(n-e}-?=TM1#8s7?IK{vw zRnC)JIg1(w2%_JVT7!o<*~H$W`AZ6~MKZu5xDa9C36K z=a>1<{^x%}ke%WFZ~P`kAR)O^@I!nT1VJJ+<1Ade%vkWD-a#`{BwxP3>W^Gy9G{S% z$&(Uv5{8Kv1}M71)VAL03cyNsZ0>pAa!ie_BH+%|oq&{fGY&MUhy3=_eUBdgz)?GL=L?VAvlq zwOxEaVBG6a-`&CWBZ}E9`RW|Gr6VY*0)1dS*>L0HTnpFh?zC8k}2-39pKhl zoVs?NY$!p-4KA%R7#n`EJh$S*;NeO#0MTjdTPt0@V;squ>3;H(B)Mn~Sn9~@do~ARKrKgAp z%`vG-NVnG~BP*P~_+!YktGH)R@#^ItN4~zxw?BTL?4?(jnV-c*LO>vsOkvwDiF^qm zokc5_N!c#F&2^+7)xeW126?^FMp+B}c^`+O?XxHg(Y@*o%B-6#0EDAalGZDI^F_nu4c?Vup&0#!RIW+D>0gq|<_#%&rNV@{S-%fh0&o5k%ql@htKwtUtpgkIxjK!!Z1l zAszW3hzNp&7X%1I#59%Aca2u_@Ojq{u6dJbIVK1~;5dR9c{t-1(cqBXyYDmq(l0TW zSJ7hy60VQ1{T|A~JjSUn;5Pmm;&Uf)4U7%W_U5nE292NJUxiP=*}2*QxJzWE0z=`^$Ri^K#C zTT@Xhae4<0b~g6Ot*+9X*eJG-(i<{vHM#oSvrM`j+I!m^Ke~z|sT*u61 zsb;cxk;mM{Q=EJ0bL8?Rw)eKMf(e=?qWUoKCUhhhLGe+C7IDENSIP3|4{kFUA8`C< zf1Z+7q4)G{Ts7d$c-65@7lb}DQ*&UFXTOeIs#FaE;Nn%)UpcA1*BGRzV(S*c8 z(IB47Amz&B=N3p9F=7kL2(nJ#2rR7}p*Qa1h#{vgTxI>BL1X&?6VXPM0z^cl>OAu= zze28hgiMr%yi2Ux#q9LZC67Var`g=0d*?olcRwZ=$QY9V>##vu8X?H#J)TT#BqK$~ozQW|q*4lI6c7d>$(YDkmMOh@g&+Er z|2^M+_c}=FWW zK~(FWAUc|=?g)Yu5J3<`NI$6FeTLx-pK(C{k%JBcL`fz9eBVb91td{mJnWrr*K1$( zJ@0%tnZ%>XM2JG4L^95xSEsY{gk(5nRIXBu!$CL1$j`8|cO9=#BzycCc|{<W@) z55r~?B@ri6oS~46(Y0J+`8g6ZM`-qjM9vg<&>(azvdJXFQ5PdW3u2tdj~}7rN}Rp= z63wj*CWB2LUcXMQ*XN2&|-e|1Xd`cCbJ~saXQTgn-4aa9Mn((8#R;Qotw8w=ZpAqz?1eCa~Tj~ z0W;YItER?m3>J?UkP8Y8qnJBkdjoQ(G;_)qbCFE^){NMAW0#L zSwSlvXB0EA#{r^dBFE#15(t8WB1Z_Kfc^c|S$ZOarkmK7MdM%(Z(`AHblBe7MKlwj zs(7}C5K5SO5-nyh^lUJ7EYZh|Lon?Uig4uO3(TK>mRPKS5^7kc#N5&ebTdn<*+qyv z0?%bUnV`f?mX4P3!VufBNzN{?@cfJHjwVQv%E8(;fxS;D9>+}RxU!2o=;J@#qx)cu z=HZmCm&4Kxj=%mKH*P(`U60TMg^j%tT9BsMYa_cJrXC|XzrfHMQZhBV?i6upnWg{a z7jaq^R=tO-z`%D&X(GBT(2Z;&TS6%(dC)mP>`ZVzzDsc>!M@*R?O(r1>l+{P?SJsk zsn-vA{g;25^y(sxAF-S&)4jRI=DkO3-rM5F`yW#O635L!?+&#|?!$Jwv^5b;<*bpH@} z&EVF94u5~$rJ4|U%WY8P1v%4lrsv6VPwCaY0vaAdhMXm{mp(qLbU=x<- z1xV6oH|F?E0XhhRKM~M`K7uIW2O&WuAWH(%iB;@24u5#m?|s>~hqJ2ZijwCGh%&yS zkj`Zp_qxPn1+$!>dH+6z$_dnBhD6-v>EktK=TDH$Ch!w!BuVD+?HlZGJ;WLu(CzHw zTK!KCcdWiharrd5StN`^GKDO&%L@!0k6L#`GOi$nCcQw$*Hltrh}&%;s?hCs@uxP4 zTnRT2nD$$w!U6KQMs074!$up&@(6VaCzha?uTp<>ms-8X?A#m&kFRs*!3~b9X%)h&?R8S)vAQzuuk>~^d=|?YFdU}4HD;C;$(&k3D`p6GyKH~sBle!Q&=#^3 zm(OtNi?1TA%pt|I#6yGigE5hsK-?ctJi5xVtg~Bh)A1tQ-Uu`DG3Tnh`jfwek<|Ee z|Chf>pc^zle1PEDj70%Q*N}%kp6F88JYe)_lZoP>T3yPAhuDoKd%lM~4sdjdraR{G z;Wj_@AO8x|xeQCMKFg2)rN6-c{LO#PhrjndVx2Kp&o452X_4-HiBT*@MpW@aaC`^^ z2}#yTCsLTEi4xNgWQmoW#@D|7Yq*mp1bzC0J$4S(u-{MLH}eGe;k zgs0*Pw;nttEs4DLl`k-}TqaZ$R4v1;+xG~?kPBCy6+&Xkh)^dCd?KMQ%W_)~#1H{O zA_S37bLr2hK2v}W!|;!N_HRZUei(uvB8ej7e)simtM*mjnVeR`Nz4=_(U5flN#$@b z;{3I1Ove_r{TeaB#o4Zt$yC@mc#6CC0J(2ryBcC9Pi-Ey$GF`Vy}bs`-Y(u`jG7X$6rXrGhpL+N1IR2aa_hTqB0t_|)O*4QkD8dvSLsbd zhOHfxXiBoU!2E?*8ASu$`PSE{=qk=&K-nnLy#0hlHHI|ovR5DBKj_hGj_4=?VyS@P z>Kr_6bNad0FqY3@xI>DI3%F1E;-E)!3i*p7oYbvU}X zj6E7Mucufn%@Mc}dcq_>UnbOC_8MzMn$7a^3B15TRg<`5o51Pe4sBvljDn%y3_VdmAPTXpDIpGtsZ6n4w3X=zvGC4dyVl?c~Y&^wGKxV#*QkkJFsPqGg?9r2`DHDI#q_Or0X=>vP z#|#4j0U0ryX7nY@YK=o3!H7{Qpl6sOsla9@FDEPzam zO1VUD+~=8BUgF^gx48M6-zIu`o1zzI@$7M4_={geuB31#5@kQhq9xIk0&EXt%|H+! zrt6HxL#FNo%NcS14{wrB6)ELQD6$TbN-k9)pIgLoBx=1In9>%uJ7oFT8Kg_EBER@N z^58Bn#z!2+3d|mvqhn1Fdfg<2Khs1kre8r@6{w({CA2I0GC@&vpGU~E<`$HPFJ?zj!_9yJ#zKxO2lTD{_ zodLn9j_Hk=S`N*q%!Qx&8)V80Y;4`(gExPJq}O8ey?5Aqw8_fZX9&x)WGoRSsMBve zW~VizaPl&<^NS3hJfaeYLf}(QD2%2(f>Dk7P7Q0=hIB-1mW^S_ zj0X|ZNr-GqY?RZqDg|;znbAPt?*5o7f9r2Cn=W(x$#0U=Y{pL?a=89Jxr#$FlP9mJ zEI)gasG3GnWYVU=f!!pUj!_2=awdzQ2^>f+g-nk4+zhH5qa>!7rcwlwNqKPzDSs3< zRVIq7IO8FrGh$q?BMd<*mxv1^I(3Peyujf{{{+SAV8nHtJ&Ty3(zO+=osS7q2BTty z(zz?-&wY{Xs1BPGes}9J#VgmicI-5zSOl3F{J4Sd+(ca|G3vXNpM8zh&pk)VAJZBQ zv6Ax?nZuI$_@RRtk0GiF=1yK?5U2=ZM1AW%9Nxzk1MVNx3B-s~s}f-?>d32$)bjQ)MY< z5K1oQrLzooS~L}(mzFbF@&V?!j z*lFV_G1NjC(H#?4EUcV^6edX(43fD5iS#0au}cv4NJs(Ar+bXY4a!FrabpQ&-JsuU zV8jjNOo8O;DU#%c(9o$~X(N}(! zku#;CbcLKNNfT=*%bM!Qaed$uT8gY#B2pN+A%gs85y!umg24Y1PZ64lB;COPMV8T2 zrLg|w(Jut9{hHvrvz}|KN~j8Z_wEu01_PIg6>ldOX2lt4D~)VZDQ+BzfkIpQ3o=ETiF=Y$nO-$|73m!*qi0y3DN} zWB%xIoP@&elk3F8A%f!|OA6WQJmK<5`bRD^{p20`^){7a1y$4041>n7$5y*VW^oQ- zc)%xb{vIm@lM|I3AAaZSjQUNUu0KWBV~hq4fu|5lBya^7don-%Q-6*`LZjZ?WMVbh zzE$JmU;a;6m_0{pyU#c8UMDpk;EkpzVuE5%W;T&!?fxwaPM_neSq=|AVf^N|DDIAl zjqAw9gr!q+bccN$O~b8Zc(dQ)_QyzjEt>r{)0oJl(LyREnQPVC8`2%~S}VzRjj9GivOht17X00wbQJ-R>}M)rku>_3d>U zqdu)#jbp_k&S4v26yaF{qT`cRMPlU&{;1AyZHvSA?$fSY$f}9&sOVBaV=9mg0%DTF z{=}lA$lTp{M7E^Svn=GrBDLw5;`w6;wu5Vp(RGb!&qB!NF|rvtii6`>T>qbbkClrT zc$9{yKVsf;=mrDCse)>zS-QBuxYgwG)&$*li62W+P8L~RokJBox?7Lwt@lYy+C=p> z3D?I-n0SFh%eL5T9AM;&=!qOeD#N~yDMbYS7}L}V?2x!7;W`6+*FjN|6D zpy~#Os-nvh)^tj)SfEfk4I`IMbB9145Xb>~Jc|)aAOr!gJadit#S){?!&VF)Z#U>S zTAVy{lDMJ}27)m40s~2oWJ#NbVKfm%c_@m~M3BVK^oznj6@VT&9`SgRAn=7wqkh?+ zT0fUb7)RRm19M@fEO>5=Y*xV=Tl5{Bi(mL6g|vYX3ivZe7>fg;V&H^2kKgTH4*sgV1C>PM;CSfRWxc(Sr(r47JaoA}i z=_W?DNPT;glcz3o{<$yl@$Cnwf{i!rkc_LCgC?#1fOvj}K+)OSuOVt0$IqN(WQ~!e z5Pv%5=_j|T6e^hISv(`hnU}syapfYx$RTd#m^eNI$0pKEs`E$K-(Ba)lRLE90*gQU z7n!;E43ED3E!w~NTa-PC`5*ZbTY-SLbBLN1DV{EJ_2O}kr}CJJNazeu+D-K3dCr|& zB9VzR9ZtFDOtBMrHj(H$9#?+l=aI81j$J;7@c5AM=@zY47ek0R{OCG2ryayemxWvf ztyrP&PqBt0^mGyJ=n8H!fh3w3sWO%op^ZagMvN$_(Cc>zEQ>@aVIEy1CK%{ioXCXC zWQY@WnEDMo9}KgMB$^BdV+=EfWXQOJkL+7)?%b!kdX@P?p2y$$eRMIw&=9Ey7L~bE zq+&W!ERQ$tFm-H(uFQ?!`ZeDEt#?^YOH|_#+J1**$71tf4Jswll`_*|jpHvoi#xIS z^?&l4jM_Gj?|z5c#%%&GMk*F3Wg0k>DTWazlgm>-tkF2!rnR@liIsVxc%IJo28oG9 zA!hRE=^n|MIpnxZueZnez@nINS^xGY3>pqgub(6N!V6Sic$I5^?I&10`wAbu^B&X5 z7)yv~$RPv4<|{w`1-|(DGu)}S`S|f3m##cQq0R7Tbe_N;MrGSVPg4g-`}8Mgea0rLYL@wdYCbdT78R7cSvRK z1fl|onMDdqClM5#_WnLP0oJI;aMWWu^ih=*$e_o3JW(V!e;UUNh}=VNf8#sEk_JJd zNNi@AYp;J1+jH1k+aRYUk#bqVi;!eV%c_zV3L#@rl)93lv?775dptl*<>@Of-QJMP&%J<^(g-z$LTQ0c+@PE; zU_~m~g=17sKTB-xG}Uu2vwY<>nvRUvT*ovMWC}B=i41}kCk!JRwK{Q4{&bR@q|k1* zvD$SChCn{0bI@!taeS1P!{MVxh)Rs9sIamy!=3N^7P}vR$njhWHwCjNP7*85GPiP^ z@o>V?g+-cMd#GVV%bQRz)2Ke&yYqnE{(zZNXIMRTnZw$EZtDO^lgZ{%WD7-NhRLJ5 zx3ODwgvo@(i$BbTzw+1FIBZh?KHBK; z?)x?JCss(j`V2Qdxy}b`AjWKo7rhc5mak`{?3?Be@EdrAx$)y+kNYC?~4KD~rT3MfUDI z!iyZtVv2Q}w4Dg)@g6PwBgw-JuLxM0Q9y3{4 zJjvRFo5;S&VEZ8l*Wcp#XI?@pCCMk#v^NfDZ#_ktJH}vqKys!?Vg4+Sf8$@m_72Ci zG|L$Su|37N96CB)a3ZNSMfG~o#EI*s=P+lts|Q` zve_*C{*cAxRTMqO;lVzkJH?1;EG?WMlT2eI;*0{1oo)@SU_d-1FhYc(%gx*GGw4br za#afFN~D(;iKUnEV>;eN2KRsMH;@i?C=^W~qVe_jD7rRVzDGsM(i=5!iy@MdA|6kXs3??6 z1=0)Wu$3P5PJ>7aSU9>!Wp$CMDv_A2G8972RCCN7&2n_LjAHe<_0a>;B^7(xXV%c^ zb?e-`^)bE9A-bpl5%Gjdx=>+gL9v|UVCXV?^bFZ-fwj9g35Fe#rbaqxVo$f3T{**e z3f*Rl>f8xd&VHVHdk@*)p_I^>igC(EE|Xt414f*DrHC0zAcQjHvV>tID1ss@vRn`% zVGs#oN07y)FGiO1XGgvN{p5M>A8&8~uJ5DCBJN~(Y20mmRl_?zY}S%8K9TF7N+Lrg zMq|Il@p77xKSVVvc%DS3w?|mtMb%W&Gm98AM=&ZUkjx@VEQufa-1&`v0C-HMQ%dC$ z!%mB>$M=bgE~+!2P@Q3QX$j97bFlds&l(U4pu|jKMx5bcjifwb)L7^JZ~rEpjoYLZ zfuqlSfpGCf?tSz-v^oPWUbx0@|K{&dEf!f>m}NK~GIawa)g>4VDC#ltnK&_1LJ=Jv zfAT)cs7-1n&+gVkOj$&iBs2kZe~LO9QMr=j48}kT*%P+pn$rD#ut(Mr{*hVVlu@1-Fy77o|ltjuWn1~+1 z{wB>{o1onx*0pdKX88HP{kQna%dhhKpZiJn-`!;Qw|)b2*djX%Y9>j#SVo>*C4K%? zV#7TI8{~X};>r@64(K*-N32W*lj$fB-_M{9BL#G zI3vW!0;Y_I1GX9DZ-nD{bo&!dsWC!K8s3<~oiML~+2L|%Xpg@TME zAqYVv(G+C4E=qD+MEK+FgwKfnQ~=ud9Kq0JX@BF%PkY1e7nZB#)Xw_jSmZinQ%T1A zHRk4yqIn*>H{T%|4KegA^{svU!)>OUA9LrUx3I@;l5qoPI3O5wNy|3((8%AFd-h9;&=zx1Ml+caPQQpQD_u5=&Ls?G3Tj7^f~@ zMic~&&dnow69!ffe^jTEG8xpnOgddecfkF3Kf-PJRQ~E;LU2^R_TT*jw!Z%Bl-x0; znK|y)>$twpVN_(W4(wPk7G(c zLUINzmck1>ruGCyRTz#&NTR^el|>G=H*xF{$wHCY#Rb~iPnoVgCOdR+Hb=bo+aFNO z<*4@shDn2$e&%()`g339t(zb4^$*{oF$lO^E%D^hJtPtGdWz%AC;0B2PmnTcTvLZO5LGI=#;oh2xdFZ?V4O90?!q#ulF3vT+1c8oJ&iEJfGC)dDlAZa^?B+~ zKOs}nNSY-)S7N{R1g+yE`5ulvK{X7}63i}~f>0x!%91~N3ExQJC?-KH$?}=2Oap;N zr^(nEF}rXaGaIKjw$O|`p(qef=mfscWN0%Px6zFRk|@#Kc*6K#2QBjO1F#XP@9aaM zkcbORtPO~!^txjlE2L6crYAt4r6|rEp=-IsGkF3*z;!Ju#RRe(MWKFj5l^R|ArLU=iE_0vA?|`%7pYg9Rf+i zt{sw1DRld7-u~7fu>JTEm6;rAQNy2hDWz4c`WovW{~^PT2W;PbkGmgymq)kXW%bM@ zW@cw7=d)-kBn_RIEYfW>nJMOp;yV4UhqRyG!Sw@7umkQ!=0T2=B_?V zZuJyqy2#$eV)J)?9joz( zf)`;375+d8xf?l5tO56HZAvdcOX}DX?#2_?+#;W_c<$v3G;v6nCiy@?OXt~r@`Rx% zlCYsH%6#Nmltvz*CZHzs^am5pzwj)Bdw040|N6%SsXB>rmfXn|q{;~@E3XhmE`DnR zf9nv(pI}8UI?!5wiYU0GHHG@-F86nK5S19=WJofh&}w&?onPUgUPrPAj9UAIa)QA1 znGRj7NyuahgaUTIO*n2rkYcp|KG{qbH73&Cty9b#XFQz{6GL)kgI}~g$TRqO=T%LS2jV;QI z4{TzEB*R{tR5C`w)bJb|yeaL&UF>0p`K2;vj?8lJyT6Ay9TSUGb`C7Q^T887|D!)e z`6d6=rOfD9zVRrrDrbD-rDEkJ0J4i^$#f&v$)+3rwx;` z5wVoaaP7yxjAHrp+HHEG%UmXhwo;;a@))a^R~RcJil^sM6FL0d5mMKttH>nrh?T1t zSB}xXcZ;)^P7&HJjx)hfA{xye@q~;JP6>SUiFWU~2K`=3R~~m6=Yb4BKt|ZVPG9!5t4U z3l$bmUBVfS5vDeiPMx9EA#NxnA^}6!QFA#mr4?+~CpS|h)KpwqLlWWO$!+NGVkBk| z2oMAjL6rniRfR|pIzlAu$)a?CC=KAVIWziC1)ziJ5KR_mHXhykKa4ufLdMjE$aTf> zaD=L=$crmXw;r&5_y{T$VxmH|Y_NEGg-1{J83hum6cUXO@apRfb~m|u;}Zl);KJ2Q zc<}=1Oa?;}n6J*@Iu3piQZAP1b$ZAdgS_Yv_Ueqih{Umri1``nJKIbSw{U9>R4>FZ zOb+%o81CL9D?+HwVaLyL;?gk&<31`b!^2HvXTqpE;>hufjEB&^`yS`7UZ8q%8Bq*z z+chRT8+3Obqef%G{+PJvvA?#>?N8Pi+YS%bAF;A@gvigZ_Q7}9{k3mUxqO^QcAtB$ z!pE*iRyGI*EnZE+tQjZS@d-O^9v`l8dRAmXSMgFRi|M00+1}^PZ@$B~KEBJ6u}C|f z;CqL=JgJzRJa(4&z(x%MwnUp_|IyD=o-NV*;5{mzKSI7FvvB+jxw$H{)zd62Jj0EL zAFzLTpO~+M3SL}B99Y!uJz!vUS+33^hZ4_!^~abg&vAJBCW*NWg;bB`dGb3S;Iy`>wd>UP>X?1l`lNx6&A4BuV8+nr zu8~b9IGoxH>@K6)V*(c{);^nE4aXiaQ#4R>6}s}6q1~aHEK-sT!c>KPvO+vIpxNEU zG>+nUD&5W|>6nNkDy%Hc(Q6&hY1EKJfrPHmYaG(t+hQ~w(Ry^9$&;JxJ$cM#KcM`= zm-zP14tq*Se{Z++`~{O!N|Bb3e_;oKXqlgeiJ+CTjlsDmlK zJ;nE?EQ|1(ktUdQxwd?aBVTxh%}1Nm`W+^7DH`<_chw1f+u`&|l~_u|X?BrPS$d9$ zb$6SjXJQ2o$+;w@SI#gWV7Jy)UQ4pBpo ztSn;n+iY%cVt2Z%efN8$!wKn(guZx=d^L|J$ZYSn$z-zVvO{Zki`hbj>7a z>P-oHZDd(SP8N84&>|*Tqy+`p7Z9}+ny91u69&^3JCi!q+(puPlcxudDIZ(L%#|@U zoyq&LhUs zB+p)9RNuswbUZg;PM7d9vkZF!VycLsYFI=h=L)DXg_Lg4+wRbK)Mk?Nu^vT;1C`xc zlVm)^Ob-z?hf}L(aIz<m2ilwnZL9z~PO z*tW;gYL#TZj2KhU%k#vlD}=EK)tMl6$BY^cl%mNbuxU@m7>17KyR=7@>%#S^?l7J>Cs40n_>yuhO#&6wu$m>7;=g~8Z+zSJIPeWcjjwp*1 zRDoXW5JMD6#&mXC`^4e_Nj1P1CKO^ZF8t7IO!X9*nNtwy#0&)~lF-CB2nM#GA!Kuu zR*s;?bGTCp50|m!5|5QAFPwO1k%ff{wR(fNnIvweP?Z?I>tYRuoIP_Kv65l?ts7XLMQm%G-~KQEbC_(g zB6@t%xXGz!f0S?i<6mQAa~Dq)P(z8ZJ?7pYd`xwF${`W+uRO=^t>5R)-P zXlghK72B7nO(#4#98-{G%w(F|^%jCD5>6t*YMG@=r}*3ty~66s0?UOm7pwD(*Vl1I zLlS0!#$<@9C@^)n{OWTks}=ToV-{1ZG@TxyI3Sl#;kX`A%%^(v1V^vD!MbG=j{3-o zhOTQwQONAvEC>2l_ZE8h?2(V zuD-&>*I(rJlLu%i12L5(UY#RI7}%mis*oa~tB7Jm+%QNc6Ud^3Ab_N3Ov4D#mZ<0z z;$9Y6FSFepAqo;~*D=@YJbu_^tvw}q@+|#Wj5}Lv><>B&rGOW|@@0;nTVO$Ia%82# zKYi~LluUsyoL!|L`aIZs%HepH_M}cy9Ff#?R*pVTyB5+LSXin{Tbso#%E2iW`jw6gOzfMnVB+nB$G^)Xzw@i#}>&G=g2JQ*l9gxV{M(Z zT;%!lFVb)A;y4F*kxH>p#IbE!y#a-4l~lG!yWYee4A2}0!BE+^h6r(uLM}~GlS$?i zSVl^7_oej_I{ItjV&ZyAydkejG6d8V8&T|=@;p? z`wVIaOowg8_87~vkYf_ng(^ucq_g%BLU)~mhwqV5Y&@&S>Zx-a+7j7f88cHtGLrb7 zPbQrdY-=QX0kt3$8-l8B3Zgg`5F;Yt--2@VA9P;yXA01^J>}p2u@VGL%gR4xUPT~XuS77{2~744skunfo&1E5hGov`r=idwi?tkakjf1 zZr{F5L5gu!O;K?Ks;7_gU%mA^=+~~Wzt_MBeKvbT4tryAf{Zi-$5lD{#tV4rl-kGF zdGgM6tnCAi&1dN(9qu>l_)>svh0M>+^Wral1+$PKpUx4bs+7-s9%0mHd+j5n;gqOn z(cHd8r#3_s%3Qd7mR_rksHlubBSbNx*K6b0V`MQTp^3!xIDx0)v<{IB4LcaIy>XXV zw#s6q%;xqs^?H+JI>Tse;W;jvs8HY9qjT6Ia9}iXP^wF0U%$vG6Q^|cBBx*cGV@DU z8MQWvNjmvlf&E^WaZKU4S6-uW*vIcjJn3wa&ZfxbG9$Iah* z2f^JZU`RL^6D3mIPZwD_dz$NOcPP*1=-2k~<$%D{S*kA5x$`ck7fZ~Qa~R1qmSB*| zR%jj6X>1>|JE?Q_N^T z{lhxNe4bvf2l(ic$aFeF(nK2lCjGrlEGy!mxx-*0k}59~FBOSpPod-r_^L{Or$%#k zA1NV|E9Edz5F`1<3S0<-FcigFf8sREc=DkrhuS5v{&7iUHl9q0mKTYF7%}bc@ZjS&nJLe4{Bu79OD3W@DpHz20VKb`D*Y=`|a;wvFdU zOq_s0r-P!Xq>>3d&p{Ri!YD-5bwp7ick~&KoV&>N4?bY?=EuaP2uW8^^#uJ!hgNqF zRga^@Qq0aB!SzCRcD9hD2to9i?yr%{#Bn+uypl;Wk)ij_1{?QVL;KCy*_a zNF|f_odK_Y{tdFHPSPYmY1QfVy2K2PF!InPsO@Y~-`ydTNHFSm8Q1C~#;|<5m2O^6;7`}i~Dl>EC5|2K(&TCgM@ZP&0^1To4Q!TA>Zsj<~&Yq*| z!P=cSSPoJf|*Wx?>&Hu!O zRh2KibPeBgu|)$*H1Q&pxUA4U+#=pi(A-=noODR0WR9Iaixkfyq)ZMc4d$y$1ffVg zkwK5A5hR)MXheN`3%lPXU9K|RYqI^(9SUZe%F?G>WlUtm_Js1e%cRO@*l6$Z%xgcx z@yoBWI~)+kj$kPYNijr@LL%2fk$e)Ggl|un_%5oc<39O-wC3GtH2sO;!PA#BhL$o)3vwuF zLP2wR^J~9`p2%?S%q46+L%%;Jqxv*HY00Mf-~&`W&&ZBY6Gh^wJp0@0xPu1q zV2VFzk)1n@kGmCRP{DXHmf9fo!Uc1U}V~1(8LH^7t|Gcw~Fq~36KSynEA1#?>fEYK#;3HE42GM`~$53m}C zNR2wp#}8RrEMbWwE*`(Y?vqD2!#=94FtJ^9MW?>I#iKi)keWNqb6 z1d@j=dgO$Namr-x=@T*|o9O-_Yrp@9# zQAL;Hbn64+3$s*bPcXE*#El|b+q;C(n3ctI9M;y6du=3B0bGP`4=wPp1RGCqF?<)p z6mX)DWVu4BSY|Sv(mg!D>-W+9fN^4(T6=_%DpEcBIV#t_in{tL#^PmGF1!TZ6jhec zM40xP9Be&C3p~Ow8cVWdDKTSLlB7)pDg3^H{yvh0?@#ytvxozL>2yLE1%LD$MIk{D zB=)vjt=i|p(lGO?z3)`-X+q2N)-#A)rWG3quE zmX5P{;VLAugn&uFWPgX|(uco8C61gtMY>oeSDD9hd?wa9hMuOszKv^p zIHO(E=^l;U7Q-j|Y#uboCKCj{OXSBIqcfw#@#k~=(BJ(}i5*{{ zF>RAiDI7I566HDS-8OFMl8_{%kwr8a(;K%CJI}WO;_3JtdP#Voe4V z@++*IJ;~wz7WdzL8^N*AQY!v9dV>xz`cn(P+a~Au!~+3S zR&Ya~D6Z3teD*Ah7hn23`#X<$@8j=q;q)TsmaE)TZ6jzQSRm*H&e~Vsy8@pGdwYScrTklgz8LU+Dxcx)M?Jh!6 zM-XA!>@u~+3<8T-OkzgUY0qCGRhh$cEuwy%xZB5S)$rYr(%dSY#sN9T=vI@!8B<+4 zg;705pe7jmDoHH5?Jfy3juZu?%@|SW34%Z(3PL1Z8z2fDQIR_l;vcm+ga|$jr2h=i zz^4v6jDkOkIKnW%^SnYZX#BKePi8|uh)=r>p|`)y&Fdd?;nFpRBa4aa(A|AX(NIuS zjaGj^%23JV%Ggp4OIBDoaSq8yQLa?Ur%fK-yNf3%RF0ftck3a7ZXl*}gtCr38q(a` z#-9!_O@(->j3i0;fzNa@#TP`9#VTsDK)Nzd{n2$2nFIsN247}kI~W<0LBEG<`}lrD zBuF?2oO|{Ka+NC0!G!9<5z@tZSiZ=vuG0L@UBtaEsW8KyC^Gz!7wBb^oSdKMwIBT= z$Il+4y12mSu0Btv)~4MXU>XUEc7RR9L=2f&E{Y;jU9K{y?Nb;`xcYN1@xp6g;PP{? za%b}?a^%6z0S~`-pJ?o}X!$73KCT?m9Mo}R9;2AaXyB5Y&9l1lJd>Ef?&G_->ubFG z?pw&F$=M^T7!jlsMItXCpUU$;{=;AAr59dcWquyJKV>rLBS`|zbjs8obLsL0R9(lh z9VX)ufn%e@O#~^&pw^&khxkHBJUw?zqG-7sso@6D(Zexp-S)$h;FjHM1md-JbK+WYiIBX!=5yN4h!_CJ8 z_LvYTRu>2&fo8o%A)7)P*gV>QOz2OD4aRIfc>u{6Gr0oY2U`?vo2|8dnnsG^Pkx2H z*&=NfbZbh`?h+a)I+GEqub`=MYEz4G7@>*^#w6hQGgtV-ci-k;{qA>o>!a(`4#!Lz z4u0*B*Pl5{K^{_GnWrLV8G8<~s*2{ea7P^$(n(A$juuxLNEXx40iT~Mad9q5u?VM5 zEf6LuB$F8u={$}QBUM>oacPx}2e;XL^nhN?re}3X#REj&rdM;AOcWa9F{ht9LGI)^ z`rRJkbV?zgBM=25Jw|?Zg{}+Eu*3e&7EkWqVYZNGsX9l1NV+x|bd;s)9NwT$IO>y($C1o5 z+RQ3mZjQjR@bnBy0uH`$wbp_Lrx`X6?x|Hr{!_ptj3} z=ik5+beQyrRE>n&V>Xv0S3SZcg#F!3Dho%+9(|VitVySB@nmzCspn8{)ft68&;P_v zp)9Q;A3R~Z*(NeGB+@x1?GBy&4YEmv>9k9v%}q{SZBqMNj9*tVBE?*Rw}0)o*=x4g2`AWun2tj^nW0Ra ztS8_F4llg%A~S)&k=mH-wIu=}PC7Twh2v*2Rgv}0$DBQ~gx0f2%}L0fO7duxlS^qj zwL@wxo77lFH^56AC!7w*GGyX+$&@Orx*1we5BT=@5HE8QwH#w}w?TDbiIKg{(CT5B z8DhyPYY(>Z1CN!JCG4q%Wepkh+61=6bkrle{KI4ys?1a~Xr)DtoPCAL>=~x95|%%r zzqd)Dm`7FxBEctH$RdjhVjv;}A(8JhnS`ufd6wlDUM8H#Wd1+w{pYh}S9+fdKHKly z>HW#$ZFye>6ifqX0F5Tvpy`{WNRgB%k&Uf`d()-Nq_nr@s6fqI=dAcLS_m6niyVm-dP^bRjAt%&0O~)px z$LSAkNM$jWS4d3HGM$}a>)i*KohmWGr@Xm|?}W5k1Cp@}ixVa4yZg{;P`BII)_`mX zQxhdjO=Npx7i+K0mOO=-TjHJVI`7}vCaD*gnLEwm^DiM^y~GQD=dUt<@&c=O*J%&i z=&=~C8erNs2Rl2EoZ`gk%Y5tBJ<66$(2J9*iewxg)2^XL7LXT9c%vTuSQKsc9P{b3 zw1xvBib?cTfoGq)NVcF*i29t)Cn@HWOfN1YnG#}YnlJ!SR#6f;nnR1(`301~Ve`Qq z21h%DBarL}DKW~#bc`S`^0A-zQA&?LgBDF7g#qqhKrWj`jYMdSOp=rH%$+!od9=x* z7Nh*;`-Ht7iHR&iB90^}-2BFyGCIqhyXrnPjMaM@i>io^+ms3eWBlKPFj8-l}=tDw|EL!2x%T|;aDSN+oUJN z80rNiRi)cFBv+cnm_0{NPqWiHfOZ|Nvd6)_dn{jllEl&l^2IrJZ{I^sPt&d(;Dm9e zCrWVe2E+C~y--24`go$j(06eN>GejWOGSpE!_K1zBu0Hk5glI$am+5sn8xHp=-~BzldG7%ORVFLP$&DQnx=b+>gvYkFG#^dV$521zI!n9JTk*+jRm{ zWu{bQT-(F3RYcigG}M`X>GQns;&W_lze{VhkG#D_+b$yuCIdtQyGz@P^5j#W#y}yy zaE0y4E{TjsvQVUX)I=LOwCjg-+!nL*bHsuuLvKVRp2ctp;aAI9cy$h zoZ|5HRmQr4aCl5`>lWrKX@gUjuX6rVpXRkMf1TMuhrBMZV}*E%!CMbE zdHdFz`RwW z;w4gvSyEO5Sqd;cg9$??EF{QAXNV~Y!my93t3;x6EL?tuu@bWX=pEV>lVm~U}ZkJ;F3&^UU)@bDfJiz~#kQ<&vVOm|FUIAB)p z(F+$DUsrt3w1s9gJ9T6_!l5jQz6dz3hbT+m)il!YDL^}p zP4M6K&oCYhmg~or&&P1C)#}ZZszp$B9m^b3KQ3dB2S_1^R-1e(jyr6TkE`V3I)hFF zCA7G(G>PPDL{ypV{3PR)fmSLpv}|_oJ|rVZ$jLb8&z&KWn_@KRvwQOmbU|X!wMfen zxs`K7s(lhxfG66Bo{4x^#y>7oYafwRLn2*^@m`bV)0gq)XE=}oLRID9!6u?@kxkFw z$q}|5t`n>u(tl@*wf8sq&a3ZpxWA3r9nc#MuqEgR4#%AqZ*APdN-DhaBR|2Y+~Sx2 z`M=9h*V3iaF{Mi)tLTT$0f!FMsaGQ8V)#R;tLUJVJV!X1|Rqd0^W- z@e@CUH8Dq{-$HF{lefkki!tVB&LL?rvdIu*`6S&)hPLT5c6172K)W$Q5mbWSkViK@ zpnK3|&~4)wkUm$Wv-%;HFedcJ7zcftw+?vN^O$=4Mecp$A>Q44B-(wdjXIZ&0u!dg zUbDv!zWf;9|Lo&jc;Px<`^`V*Xs^m=KKmJNedpWQu7?>_Fx3c+WS7a(6j8?@*7TWl z0~V4Jx@0mpUm|z<4Czdc2M-<+hLDKINEkYyHKf<9qwnsp{*`ZH^`O(W>Gi586FDlf zM{GKZAx4Qr6zcstLPVx(c|;N!P&F3MpQp9oqV;f(bRwYZjX3}LzewuD3eAmsjLa_i zxzpIyHkEsiU^qsJtEfqd^1(yoL6w+31K}ZqZinTEk@6Wo^R5x)loVFqVAZ(N(F7?qS0uAygB3`Z88Tx4?o47=~%#z~lT z7c*2I+(xP2;y7-LiY4jU$;m;x-D#`3cA(120Qjh@F#N7A(BE5twk(st_Ys5uMUsWu z@zJNdoz@S_=4jUOJULg)#GWkRtv$BVdK)cbw>33-dBC&Lw zL9a>W{#}GYi$ECT1p^o~*=_EliZTHTN4-9?=Psa28gp72_M6lzO;(CeWhs(mxO2eXhqu|ff1eZ2Ugc|dZ=&=pN}kWM zoA-8VcU}|NaspVN5#?+3tsn>Qmd1{VaDn+j| zz;s8n8b`FZHc>|og@q-4_!s{MqBc$Apg|&Hpd=JZ7nTuIab&?j8p%X*5&EqP{-A|8 z?jcwsbVWc{MKo1l?({Xj`8)py124{tKlL|=Y9ZxH9X}Ey8XX~9A=!m_GS5B5Mz71| zr3F&MHucRN^oeQm7ti4g>Ij?fp$r{H{SZkv&?cvlA||~?4=p8fMsK^$Z-3#7oPXwH+CC`uxWcm(FtS`ct^NfFFXmU*?0GuTnGf z(pyMLejiFsTjMav8j6Iqm8iF71O?E3c+Q++DG`;V!A@hwhzS5UU!W9RK(7W(=n zB^J@~T-Qz(3I_;6*|zOKmKB8XyG!WrDL@ZLJ;E?R1ccC^t{m+B6)_AS_lBK>s%k`I zQGDM=@O>m9Kovy{Ri$UlFtA)=={#*$M$RpA?(t_Z2W`CWF^Bz-^3g86c9pCo(OO++ za9kl%Owo3SJi2*@?Ts~h%?f7o2xr(vQ3MP_V>BM%`T!2wH*V5+|1M6YO1*hZw_3wF zY9Vg-KkCezNYd-oxciN7kO>5;?FNmw$ntZaU@%)^l!$Ww)&t&t`#shMebT2-Q!LHm zHd_rxT;FDN;2Ur{HTv#ch7!lszT;s6UpxLVvGek!H7MCxbWgsW8-Kx_WKmVkVkckI~GJtc(SQ5&YWj`Y_hd_M5GZ? z?z))KD9NaR>UPjXnMZoSD}V17$;_0v{OQM-dg&xhuY%}wNfZ|7_8smYHA&`6y!MT6 zp%wBx|HD7ZW2dhnyuHpsD5CdvnJ&1Tcx;a7*)vQ%|2bazg}+ZKo2Ap~5>q8adw_w9 z)$d@L7MAT1I3{OKUZ-8}VsO;$69m~7MUlXD5G47##>DR_Ko5pJR8>VH5JtW3C(1_$e>tkD6A?)g zd=N&ai6V)BdA!IcMbl|`3aOKq_<^7P1q?ljJM@{zlxVjG_&N-C_DK5z zE*|UkDoSC7+`7T?S4Q z+3yhb#vHb~^!gq8zKk3=6yp)H3m1uJr}@^e{|9zIe1}UjX+}evswFdaMG}t3xZkH2 znP(>&V7IzhwnI0TptLxTSUE;e0!&-wnZNl9=*0qpYx3MDu9GR~=z@<}?-5_TOxstO zzj&4QTA4dg4w4&$Hh>&CUN3A}B7otzku=f6&wAZ${@`=yz`oo)4KDf(VKf=J$=_0WB7e2+K*WP9H+8RIp zbH9jeXgvDnx0uM4NS`g?sS@RTWsXIStyzQKphEWxe?oinTjW*`*!%h>4}a@bvb{E{ zR%ha=lejV%Bx1y~IXqdTFi}F)B6Rj2kd289LJ1|JG3eHi6Ddxgdy;l% z#Nkl|NsTh{1&+*swx}Z{()6Z^y!hFddHd^MLmCWe*Xme;f|@9B^WA%V?RURP6q(=n z*Z&*y=^_VapU?lT|B3YUG_Swc8u-H+s-9$JdY0O~x9EE{md;!zF`LJX&oZ}gj@-mqD!Wxi!!Z?Yf)kHF$LaHD z=(f6uibi(v1UX`4b{oV48+Qh79URe@23)v&mfdcXc1C3}QN%rJF?1#L`ICJ7Z~h!d zyBmDwh3oi1hw|z@Bu^w8$@BKxTm1Xq_-)+2#k;@p`#iOHg8iV)*8T>Y|K+R9rUUZx zBGcz52+}#`F1$o$>MZ84&7%*#Mz?D-F;OC$&T;SdEk=z7zBOQRc7{>E$Mk1D1=(fl z&0RkJ%p8eCg2wKE(QyaYu{m?HfFLV0s~sNR{E(yqR=>rKH{NIC)&t&r_f>*Kl!R&0 z*{jhlAJN#~BQZb8kN%}!qz?#V5wY)5%1%%>`$Q&URF2l^9j((H?9tc=P%M+}ZkfZ? z2c)ApTw@7!=QdU*!T^C>T1QcBCKuA)p-Fvho%Z@6 zwbe5F$75~{pg%Xq$rnGx?|u2}9QiJGQpSr(+}YkD5l``V|K{Hz9NS=x8C2_h;n)5X z@4WUM`lA6&+rd%;LII+R#_5X-jIAa{t;%w<%;gy!c~PaE1X+%7?)g_pJ$4;kDH5NV zVkVMcSg#}Pw3*IN(drMVZf((TepKCc<%Q=7jTneB=D?&^A0hOc=sR0P#vKkG+{fH5 z(;IfEHI5JqBc%BvUNOVW$tAW|?_o8oY^>j6_i&TJqerw3s!S}*qD^NhPUe`Qxgm=pYqW@?RJ@Nxq;^PNr)D@1}-7}{s4E-!Ru6s8d2Ki zJqC>$Q<*e-kM1(;*SY=n4JLdI*Oysq9$?mYm?)GmRGGbf6e31KS^=y zkgC)G&OkB0czbh$ON)GYTJk55W()1$u0tXvw zw97TphJcJme=y|Q)mOk9lF6H>r4nACF*#u{Qd)EykLWc_8V4P=*6x$e$9TB9O|8=9 zcz2J>SD#_}$qPusBZQzyXBg7#bm-|O$CX1w+ozOB5En#RjXHb#yF?=jx^JVnCU#38 z5_M>7tkGU=^6V==f|^Zm>yQ2jy*9=u8YB}LYTNht)8F|O?%lZ!{SFhl!O>Bl-M3yt z>>l&nXFtavUF4nbyw1T}cX{tUKl2LK%?-Z%|M+FHDF=7`n1X9#`2lV+ z&feiM_3{y}54YdFiC;eEiPI-2`)x|8Q)GFBeICNke4H!)~>K@kEF|NMyqfbn>M=h=ci9L*kA%DuVd^rikxk6)(mL8jNzP#nOdh@aHq$ewNj&?59Iuz@H-;3>o#FDQKgo}L z{>MpAl(^eIX8qmwsnnZzVu~$WpyJ2a?RmWa{vBfIL{aGX+T41$Mk22B)aA!1@0D5I zUBiw^Z1o%5xN{3ll1L{KWObd48F0pqa6QbD7dE+)i81URF#GWZ%$!3k5knwDapf_> zP-EZ@>8!7lnOi_kOc7Z;k2LUb6d%#`3HyD9jV6+=Gk^91=dL}DDyWE#kI^~Ck9#ym z4V-gxq)x1$jck;xz^UaFa&D4c8zwJ3LuvX9+qp>gEQ{(H-jLBOZNt8=WK9_cZnvVyz^(j$_KyvD~xps5^*+O`;gsclMf0i z?{sX=l+N?_fB6@fwltcO&(aGQIFpI6cp^>L5RiKT$76}Q)1=U>b86b)aO*bZw{P>M zue`zUedRsWn#(c~PAVE%-(k6w!O>hMrn1b&W3)Aec+4Q1&FER|!Qqc?-G}oRIbSF+d}E#Mtpm=!a*4vf_%+tPdYA3r{?E*u zOyGL~LO)6~nIjyIkxh|aG(?POOpOGRV~g=%$lS^TvLG`MZ==PRP|iJ1_}=^Uzy2!8 zOJ``LMAS1^i5qeMt=C`mmzL%aQ%k4+Gg9o(3WQLVKomj{r0*INzo!5_G;K6l#_D%2 z_8OJHl1!$M)tFe{-xYJ|1fJ(0s}j+8lwP|{t6D{uCG3e65~D8T{x)Nwhb$&AZ57uu zVQ&>bK8>7AqIEk2!GO@|k_&tW!v@WVcd&#pVsnr7<|^jV0YZ6=joTmKrKY&};%As& znCITNzl~&#`H`RgX{N4SV=PI$^Lu~H{eS*4BJq~X_U|QE$5M?f7u-xo%G4NQ*JE-X% z`cjE>F~{lXA#msnEEdmRC$)5e152ROSYzC6kV8Q+4og;g4 zf%@?#qs9ik#ul~JJDhmx8dpF25?kecf>w*1px`A(D6szCG#|W2M3s=TlT4qv$nNG2!%79alwo3i0>w)sN)0^0qPy22 zBlQ@LBz!ZZ_{8VvOcaQC6`X@LqNxeAWSm;CL+$-L9DU^>@4Ve6n7_oJZ*%W=zrmo{ zBLAbGVKjA~)#f&@zxj}@p2X{|8g<=Z)DQVbf9)@D?UUa}$MVP^(^`MPZfl!yX!7)x zYXpYK?|$>E4EiJF(lnh)kHPI-4(@K#-WZV@$|Uq8DSL?IdIZx8WS%=mG&>~jA0cT& zvM>K47e4Vbl(*g^7#)*Y_ynm$2F*L9Vaeq67-DV`FBmdv*U1%6vUdAJPA=qd(+Lt- zY_8uWJ&|SLnJkvl1fwR$#~bvUs~CaCz#E~@7x9xb_-cuGB1Pq3jnS}%Js)8?nq%wB ztL%R1E{fmhlmF8Xv(@hN%*TI_h|pl|V2|9)38F@x+Cdq-AyUMm+}y-FtPy==BltFZ zA&A?3`fq%Pp%!B465=S}==L7cFvV`Y#mQNn^KpU04<50cE?}36l;5o|`OI@%_|zwP zZ*_;{<u}>uwtwq)Stu1~95$IA>lmuYZnuh-N#J@TJkKX1C?rD#H5TUp zhm~iaLrP6h><0|yA#<4<#>`w+_^-anxHjW38&C^L2G$&JLq$`@?hjwVT= z90=e`@ZIC{_ZFbXmWklI;<(%VRKL~uOhnf_1f+4ND@uw?JQ1hc>m!7aPNlF+n`AOY zM2*w78jO$jnNVWr#R67;OmJMMWpzni{Wur$c@A2;D6U6o@ibfgA^!R<+xOm~b+63& z*WW}q>>#!*4t8p^ga{K)K2P@XC-~sa_xZJ7`Hwt&w8rDlJ-^%mx$XAMskAF zC}i7BQp%8pPh8;aPrZzpjIywN5_O`8E34EyT~g^R>12kH?~Y>w<^fJ7P*+rt8cu@BWXwEyr!ZoGcLVQ)Ys2Vr&vhjIezDTS~ovr_s$)*9_`UOc94CDCo&j=4imX34cX<=PyG<73yYjT zzd%BgFfbSyNlq^;QF-_+B8*5DPtxhuki0&+QKV-#FkPSC(E%}8V(!#gKDhA?Gl>W> zDT5Gle>aB-Jc8^YHNUktVdUAs7!X#Q$WmqmV-Y!$Cb+IO+_?pVt zc5ri1gdk)>j?x*88IB+ujgnIoyk-wc1~Z#v^2&J*YKQb4jlJC?_P39C>a(9_?(_ctN-Yq;9PxzXgp47W`Qv(!h3Hc{j2{s{n3o95$6a^a1CI|w0b&ZkhbN0+x`i&;*JL^O<5|$8yrHlAt1h;dD?lftx?Qw6{MBVQaO{95ix6T`_ zG3A)bE-GJq_cmLV9&V?@pMCQiJpb}bJn_u4eC11Dqj6Z_=7;Z7vq$vP2A#koVoOYl z1}{DH9Hu|yR545Q?f1F+hkt@z?IR7xEKW}|zp_Fnv^W%oBreSJ)YKXB;||kGkJ+;s z3Lihg<j8c|N+y-(aO_a7wJ>b~S=LDDF%pu3rYKl}%a_0S22!m~OqRIt z?8gz)DO^9KKD0?pFQ5nkTHv6D9<~E|W`abvKsJ?Nc6O5HQJKoINoKl0pr$bGkiFeU zB=kHdPcPwCZHj{)i#dgt{@VYE^p&#+v>5e!JgUNRGESvy(UU@U#U4Y&CauQk_idU8 z^zPq98;hLCr$QkGJqsC2bN zOcbd%YfP4A$t7~s8#P9rg&R1GDoy-Gmv|&aWO14cPh7?e9Zo%dfraxY+1cDdRx~1! z1g_-LXm^;1$z&FnNM1TicRVC!j(O+i0bwG6;E9w@oS?s7=B?lVLo)FQeCICVppP3> zSl!q|1B5~bH=AJ?3Pkb~yx(l1x{%kSc!Ec>cT8ktGV6>HcDE`0y?@Brr=BDdFLJQe zr2X1g>Hf~YruyIk{>MIpo*1H}GeUml+*)#W`O85d^(9FP|GWJ8&jJ0>j7CFY)Ne2J z>Xn}l>|sF>1=06hQPXr%=?uMI57+aFL<~T}h{h0Pg+{+lWHhGJu9C^6k-8?8L5KLl zB-TNl@vYa0EnVW=sh8-RF6-a?GiK@?I<~~PrJzoiXeJW8)@X2G2vh`-h0_=591ke3 z?sIUsOKz$_-?4b%g->92$80=WLrWU$b*nTjhpABKOnQcY@NfPl-MGxn_ur$ru}$l^ zLgATbIO;YzbN&KyKF1y&`pE@;?5BSkt2gBM&fBhr3X5!old_Q2gRi=YSW@3g+aSF>EVs>jx8Xstu!h^b71h#;bAF(R=nMl^vci*(x!Bq79=3;1z?eCZ6L3xnn!qeh5fgovg>v)>?o zvOs+K5>{u#{`>DUapEl9m5ZD_b%k5wHphWO+!SyIHtXhys^_tw>zp$*Tp`Y|e@umd zxlg``)N1lG&t75n!WjZFf=Ea@9)rLm41CPtnCkH{f$y*>X?qHzH)CNqpBMIWf=N<(J8xcm^+SFuAlq zZ`dOmRY;}{TKzUcL}w%jn7eff3p1okMLbDFh^W|(jbjd3UYbQNWSN|r1;?khcYx^F zM07R=Fl~n%cTY0 z{e!m|o;!)z*g7EMI&9y*MRb0GO0|k+yM!pLn5sbPJf9P4l*q`z9JPs`K1<3-viEQPHJva19_Ca5@spoLK7E-; z_db!rR9IL#w;G*V`kE+8eL*A)0}nwAfIpYn0Wcg51+&*V*=-#EoD%w)B#N>hhJvme zM52+8B0u{*6h$Q(jUk9KmTeRGBVxLY>zPCa39HxR*c%Wpi?%>$`~3X>{0}+(sTUdh0ZYYcw)b~Yrn8*?g`Z{W{2BbX!NTP$Ost&d z$A9cElGkD+U5P7aBE%Nrh{YI^9;Fm5k?;+IFraR?D3oSdn46|^bV$(Y63QWiz(n=} z!e$3K9VKGKacvK?-$wTObjzC@ZLHF*9@F+E{C)$mSH^WLTs=o(Y6ZdotG>tKy*1?a zG3}i-nzduZh(U5@mXWGpM>M=|!x~(CatuppPMq$952A2heM+|6&B5^@L5IwGc^81OqCO`VACn)Oy za^J-t4e;zSj%Bg1u!w2fjLbfXj6qzMkp^87=@`*;hPS`)4TO4~xmXNsULsX9Fs(6# zb1US|o?vKonMp|u5BEr`aoW{ABu~QieQY-*DjQg)i50qJQWN-nm#!Ekl1oyp*T|=e z-2BRy$r&!mxhZ1#C=oSJK2t>19Fm1JO7^G|1+S?#D8sk?R$gYhY z1~{%w%#)GE0Y)@Q_ufN#Z@$jz>wiQu=Al0I2{vmXlN!YA`*^NNvNY!>W>2m~r{=#d zh+-dsP$2xTCc-}lGyr3BfIS+NhMmTbL{vo&1wjcAg}@IOnQ3li_&xnB@!S*|>QRMG`sp#CfisKSOnOlcD9(k4Aa-&38!! z3i^16Bs*Mw_AwmEV9*_Kyz!8!OoYcDzd|ILK#UmF8ckfwByQ+9w#l9Q4@k|<5a=q^ zojryd+ibsmk5p7)@zgYX)efg#`4KwN4EMHIDfgP(E_b=JameoNyByb!32X;hlOz3vddvwjQQP7GXyP#-{*b9+3}qrmG^#RLJjK}b z(BcB|Oqy7Fo_Kx|Gwf2ZEn3?fM9dM#tE;^6XJ5k`dgKxl1ZF_ntTQf`nNLQMM3+1F zZ&Tmjj>y z-2sxMQ7tOMcTvFs-(!HbY!lD5l4ig2 zl40mEFA#JeS_e090*%w}5`P50KCh`cD&9k3-iNEmIe*rO&(R((d!+qA?eGPB>5hZg#J#H{D zkwg)FHtybG_1(9Lc@~GO9}*Kxs+*hGeed-NecNq z)$%^Gv$Hf@8_RRiA}RqQiX6eWAQ;*xmdnxcJ??z-9gfR2UjD&X*jamsEcgVjN5q4U z>vQk*w}~fpl5=T%cgWH0N8~0K7^Slu-noz3u}FCilT#{IB%mj0IIhpAwa*jhP7=)~ z5mGU9U zd-DTYPMg!`E-)I|kjxTf@@#*&NpGV?r#nJI#TI-{oSEU==?S`xBhFpB&Th-1RyWD# zW)S-$4iERqrsE_B7PUL8Sfc?sQKu2YCX(asK0<`N|1dbby`klujnqG2TFBS-*5YsimvMefxM;MU^#e4zB9;2%= z@kETtRF?g<4K{by88>T;_79L!5mYTg{mUP4M@nbrYH z$^-6x=Y4LzcZ1E%N4)xLzmB}M&g_{i@{7|HXHH->YDnD<_3}O^E}dZNM2S{;1EpJo zAVqc}N4*nNfR$Q)!Y;#&Odcsuai5vdF1P zCT8Zy=CXWv=Pt*cF_)iwo_Jufv%P~L$&5^kcC}0)6K8CW*{{}-h60o6EMfqXqSG5Y z>{O2_E=(~B9ESCW=uI14PoS4__`c0-Hbu8yr(dhHUTu>VC7$}&<0u6Ul>nM!V#yNU zeDsLMhj+=Lk-;UC2@ofeq*l&ix(+}1>F0R*(nVU%h=C$8^jy;EG)fo{`ZiibL+N@* zi2zAS)7*JLbTA^~sMM@BZ*O#nX*mvVZ?OHwhh)YAMaf{$Y2q0Q6+K`-keG5ju6rT{ z-$fTi5*WB+pN^_x`65=trEkeZ`~-ftN-~?~b3ggx>}|e-Gi)=xP{I{Lh65Yd7EnTw znCzp57KzdXI5H1je?T#k;`=`RGHyIhY5p+=hZ08IMjTgh`*q^8In0EN6gQBBB!$=s zcG^v53Nu7=C3?dl1?i)P^0h`6LDbQf@;IJC`h76h=(vcA{VT@BBQFa4n7Z(Vm5Jw1z6>qM`jX6DYf>bh%Ao`fS20_0;X=;vG!y>(M68*7@6!J6Vj3RsW zI-|Bp5Tr0;4)YhYT)DDHdpP8vYth(f5m~EK_=)f5<$wIwu?sq{-+!NQw~W1eguGZJ zqec0K*(C34$bm?6G$d}CEQAVCAtV{qiS|c0hKdwb$OR%(MwECiM)A}%nW-#;<0|p6 zLqZaG@`aai5?OkpNp>NRo-1HP^Qf7E(-)Pl6iaL=5q(_}6kiZTzRR7l-&=rgG-||S zG1IaA6SZ3XF~>HOs*K?HjxZc_A+#wLvLFPAdX!L)F%A_7BpgDLsSHCO^uz>jfB6GC zM`J3AhV=X;#t#n}_ig^@oo_OD;=@aP1-8d-oXKxrw%R8{HaEx;(|gr#{c} zbAOe^RFal%V8t?|wHR)zfgBN#(^-_{94D?l#_FR-6w*07I{+n$6whJ;*+P--uus}Z zq6Z;LU?HbM{H%ta$`bbzjAfmv^B<#G-ox!xFtP=DokNu1m}>8c{^0>CE@r>S{`w=t zFvNDo2$D#ykR=jz@dAhbV1ykAh?;>Q$i&qccE@D@!MD-6BAt4jVbbBrPruCmhcz@o zCU!Z-cxR8r6O-810Pnbudpx2zHBa9i@tv>!85hPPlPQzjEaWas5S?EpSDGdrQAwx@ zb=gE5n&d|wZoP#R)i^Q-w8s`vJ%b+sJwC(U<_;$(CTQ%f(H%56ZUX4kt1VWK_X#Bn z6`QU<#t$SUSHcuD`YC}kejGJ~n&IO)K2wH4$8{i^A(9kmx;B>R;5#Fx6A@14vWTMr zjry41`QN`r)Uhb&U36nad@@0`cZ_VeQTvCi)+}!R(U&+oTOxgG0Xv&Tmy=knF1C3L z!I0F_$Jp9j<-~jvy?B;>TO&z`C5@2n4*j4-cihMBfDtPa#9*sa;ruJFkd$IryZh*# zk0XeTLKDmEBlY@pKX{kEbA;eHD1@XF5_&|$7o)g(i2-qp;tVU#K1b@pa|DSMLeEFB ztI+S^4`u8UbRX>_^&vICfGvw?fk1QEr>TYr2YpmmqE+u885*g%9CfRUuSvv81@gH9 zR?J|xQbRLE>f1H89&TZGN7zFXLogZJDvxZNbHyANpM9F6`Z|d>HrNnjyz}+fIJo%$ zWqN|Cfrq!gP9zfY_}m%3d3=af>oIaoMy|t!Y@CGeAWH!eQA8gLv=kcxg=+ zvw1qA!`(X%k>fIL4em8fiis3;w@cg&IHf8WTU+GPG0b4V;>B44*`=~`OuSfP;nH=? zKxX87Jp0*CF?s$n71O3FOmT7cJhj7ZMzT!fpo4gD%%I<4c5#-QH{N4vb_PaG61fR< zBSI>Zp>ll0!PX;;=@rCSf>x`K?|O(~jH$FvuhBv_6byU7;?>6p%8WEy7b%1(dlC@ySz& z$s+5WE^}6#Sw&~@+$@d$km~L}F;SxB^cZ!!LFzpDf~34=4^BR35eH z^s>CZ*FupEtRSGNL8u6*A!J+$1Bv^|kR#be8QH{bgFZHj6r#B@z6Ng%yChG|qBI@U zo=((F5JqK&%82aJIo#0aOJ90}L`0(`rTESN_*K6C2k_YArr_g`k2Pofu9lg_HW`2%ttA^r-2=WwT zJOWKYGE5w&$Ee?8dF~viPQAeWul*q?5|ODihA1)KtI|I{rkKsqDdjO7k#W0E&EF%k zw2T*eh`K=}9%td?3SMZicH;(9r!G)R#i)#j#1k=E1CuTybJwm@u8wJ~uMrsx$R#q| zzPCzJ67Y^j40MCg^XZL!9N)qowqe|2HXTQes~it%Ts?o9@mJpFt^fS{j9MTD5C{UY zt~1uav^A!aC8nPGI3KRQkJ1d;jcOQvf|DkIJY|@$4ziyz&WDUndM(+aqm;stb5O{QZeRA0>nc^gRCQq_7nH&b{yw&Ti=;_pv@B6MGeHY(1_#WG!2g4qs zC<$U1$o)?1M+m*7rpQ8I*@8VDQ_SUXOp9)(Pdc5&(4t79#KX-;{O+&*8uz~bI?`Sp z@2E_X2!Ugv2_nAdP*-iribF(_$@vDoq{2V^qhI6X^Vj*tqniv$Dc-$thfZU_kr%Q( z9+S@G2m^`bOP5&jT&CL%uBai!$pllEm(g-6qBv$LAEjY-i7d=>{Re)MYcKx=l*Am0 zqLYd1BvVnm-E}tJ|2C0gn#ISTWBJsR#Bww2*%k@APqSLV_Z+lHlxn+&tmz~Z28syL zVV&~cDz4dK^Tu1WZ+(clejlk{Ve8)O4EuGQND|GiQ@j0jR9U9eabalD*gIex1aw*r z;?WrKWExRXN#zU3s)3{`gz+TFOaU#CA(qNvM56@55pVqIpE5W&q+eIiLJK{YByr*j zSD*bPyPK=1T8#Z_h$Dxjidj0t4l!L~E}cL&2W;NGLGSpOQ!l(sd}fwodq{QMWbV{F zYCJ`EEK#mIXr4g3)j>-rc$&*$YmY#(Nyl~CwF+9hLt|@?2ak3+v}NA!dA!>n^FR&R zk4wm^$=RO3q$^`f(nlfdo{u1jBn1iEwrSfgmgHf$0*>R7OvI^F83um!=Hu|84 zGp;i-`xH`n@|w+iH*X-Orw9a*gM06iPG?ZFC2XrpA~sKuN-~mE)KK8=>t6$JOmylT z(fMZ(q85T}VV94Y%jcPxn`Y|7GX2qrZoALi7?=zOuI$DafIJ*;dQ%E5D-n5wbySj+VaSY5SJqiTo=ppQS6YuXOeOvsOMKG~iU`ONg?J6_4`t<4^MWU;nq9e(Z7He(we=pLmkK z?BcGKu>+X=KmQ~@@(+HQxpNmNcaMmqAR&oJBbOiu(eqJKb9sz>jz}trFTr3qAe+gN zN@r0u17cB>Se9gIUNSwJgR$9*r&3!%D42pM{`VJ-@5ToGJq75|ct{wAf}%)5uhaTu z;M&uQEQ!`=Bm_Y~Jf0vxpmJOxo%ydI2?HA4A*!qsSRS?VF$pbB)9Dik3V|weqYBn!OHpToVxxjQQ?4m z6rxt2)NsgR#GtmbjpaEMPRw%Q+Gh#JEfP|f=Rf&0Ggq!-8F@P09&WG3>E+YJ;~Jr0 z(skRIf{8O2VC~iz-`^)VK47b6^X;uZUTT(Zv&vjVAu=?{dvW4{$$}RmAyYO2hMq$q z2wC(DW}-37@tA_9A}9(`)!J!>N0veJWGP6`*Fs@NK+D4N?Bws*RBFJ%_ z%{vZR1Nbx_izKBxfh?LadVTyc#J{q0J~pi zb|Q`*dia))p3AfJ)OF;9jv9@j#SCo6!4E^GCTB2WagM7^d__QxB?K*z6-CWxnYKNM z#bR5cEH^_z4F4R^|8+*=5kVLTilPR?UgwH69$i*MQLt@O^uiF!v4|xT)EX@^g#v0M zLZ{oobR`^7;@GuVe)0)c+co0TGt{jS4QtG?6p(c_^jL<)Pdvx-Km8ZTP0#Uf|CfKo zSAP9>Ik#|z-0}j&(kvIBy2zkiX13jCy3-`+*i6`C9=}v%_H2enofg~e4$;&UE6XPd z5NOyEYC1t6c}z}EkjrK`t{)Lk%goFb=#32Yq)xMOL{!kYaPBe0gh50$;b@EM+6~(6 zCee5T6od4{ERkfMP*zE#a#+VTde)d~t%~2Xsjcp!c;E>k7oRxK%)%s6d$BA#LYfRQ@|MtY&3@K^<3(X z%BVLY!U6L(x>Pe4vbxcpR}lg~d(>FFn!f9x!dG$KGVNKP*!MGGA5 zSBXdC$kq@w5|GNM1mT$R$Rnbu7?BKapwTY3Ib1)+G9^SQ$-!|07f8e+2)@IiGa_2h zNM5@_F_q{3fBr8dPM&7-s7w6*9!kH@R3S%Ng1KvFIUMy6)d;zjc?Oj_3)81DmKIPH zm5bSFs^O5bWO4PvRrFBdvZ3{%hkZ+L|kSr zp>ioBlU`19?)quOYywBpd9d0blPfW`bb{%N=h28@^#-Jnpx33mxk{(9Lv4SDqs?`~ zMuT)l!X36zMh@NHfb`rHZV*!2Ii%C6p~q7sQfZb~PSNg<2@r|LV)XhwCPWvqXl%Fff)G!Hk>5qsBmC%({XD9n zBWokhEkDoPnQLSgR*01*2^5iBCPhRR5G)g+pfi2;67jh+Jlff3O7>~peV@+i2D%sF z_|83SYeX(vKxn%RH(G3L*IAQAey7%8Xab?ggcxFYBeYP!*F=bi_)18@PGCs_G218a zghUmIcqlXW99E?&guB$neZr)@%Gf7q}A`Df=*)(SgIrdj?)37Y&FFwiU#u1ab zB(~ee3MCA+NUhUFQ^s`e+@ba15o%!J={8Qa&(6VJy8RK^9=Y$j&|sGdkBg_h>Wg?7_xwcLuzV*opOtA z$HnRQ8276@{lwFBIuuAC;ec%I8Izk(B$`Py6Wu%ZMgQE&x|Og@dS zh?qkUMTybq_6a&;#zT)rb40su;tMjVR0_|v7@ID+RGeyajCy*8d^E{hfATf9M2{P{ z?oiUABx43{yM^ED({e`?E}S8V#Yjcsv>vRpzH`8zedn9ped~R;%Ln8?ei2*n`OY`L zL*e>G-u;z-$9U@&b7>tl5@9eNBg#ILD+?@~zl`6hQ)@H`LkU@p6HjLGJr{xy-?m8W z5RJxg0)$v19+4%vZrV;uPo#E09{)Ek{|^u7{-BQ^28berz8h)PtDlz$<)|cyLWoev zz&*$(1(K;GgKnElGR~k~rFyhSA|jBE z$qZX%@^ORq{sH5557)Fo4M@Z_2JJC1HASJ2WAo8%Zoc+SYKKk6W|vN@LaTa!;EwU^ z0j4`9KRvkMW#x#Si^u1*AB2tQ@mBL z@o?CqM@Ye!Da9fb@K{hZ4A)~ORwNt*h^EiFrl8tBxzHmGq(cEM5a@*=y)ZzE8{~{A zjb0bc2uOw@q8;$m)hAiZ&5;lGh*p~zq0Ri2SyHnxWQJUQ@+>EwI>BDcA(luomCGTS zCT?fQ%KRx1R9pnI^Aps{2S{Pa)WkHFZPM-?bN<8(?Y&(@FQjzgaYp?zcmMFWIJ&h@ z`?!rP1Vq#b2|a-wc$_(Z22j}DKA?JZ2;BjVyK6)YgS=r7jxA1Hyuesj(Fz%&szf>r z7>6QW_n3$?AeT(wOB$h~5a1w64iQnpS9BuTIZmE@oL;+u5caVglVWj_w%_Khx4w=j z`ecgp?6rJ)zD+!EFa-}S6+=}O0?R`V1O!1K5;chHBATpX_Qu$KhrkW+ zT%W#eqiYg@C_Al?%ZL1dKpB8&gMRj zXVPus4zV7KwiA+>Ui zaNMPQRHHb#KqfzhB1Ld4i>NBoZ`Ux~0Rj@9API=FBx~x>^}?POiEWFD)&N5Ib3oG> z^a#QbNkouBUu;$@-!BrT6xUNa%@*lInr5wz7(y~0CvY8F)hh99hI09cZ+-O}oSB_R zX%7)QZHkhH>^OAg5F5C?_K0tN=__1YI?K${7kD%%bMuYY$+s+Cup&&^BV64jGh@&b zTw*gNB5E9eSf@XfL7(PhpZziXL=@Q&u(}=6fkZDeAf72v>$+IFfi|5YKAT0-G+Z}C zh{tiq0-_Y9A2>u+mz+7ITRy;1L;TW3yddQ4i6!ho7pLFFkVB%fhd1h=8WK)#pUTD! z5)pyiDWeG!-x!xRi_%5AJR7X#FOF*XQw* zS2!-ejy$SxBCR6TD>#iRN5_XOJa&=CzW-$$vWz=zGVv@Eg)`(%JcFN_pwT_xq@M?H#T-aemZFkz{}@NOTeDi58X^GBzC6T$wvwnmbAxQwC7qhgmNG=x;MOd-Pm5f8_$! z*u-r2h${*^TTN8WCX@yYdp(?xDtPK0hVJOboQ{D@@!DDZRE(IIz>g&89n}fqIWB+hhe(~fOizk1 zF}+MIV$f?fiKlXmM<$+cQ7ER-LJeJt5jB!T(s9~I80i$g>k=1rqIw=NHA$>AOSd;f z8F%p&8#{1dXyUs*N+E+1P2e;v27VJ!G%y{5iNaa3*#(?XN6$|aBxguY&d}YskJa8~ zEV+oXj9?mQ*;$0?JSiiEZ-3MYm@`yD*Cm%qA&k2WtD9(ohVO{Dra;_C(`xiMtdtQF z3TiQesQXBsgcglZ6IvLhkfnub7SCKKe&H(eqep0SSFsfXXa7Fq;|9{?IUfJy6Ij)+ z!~HKa9_`ZfN|cf|vRY&>8f7w?Vg1{$Q~SbA+QX1?G|rY~^Wg3}B^QdJgDjeil@Q?Pu#x=25| z!F0YzadH_!+GFyu&)_Fvd_Q_-nx^5KjxQ2Xi4@C_~MYEV@nST42?FVbfgEm??WH^MJreljH zPAHQqE)dNo=~xYX4NgA(1Z(wUgpQA*I=G_)BJL2w^-&xLyImn1mhsy?hK*yaaUW!# zQrK1{bZr>y+=uA$|aqs?j zI6qlpIXl6FH@||JDRAw%k0U7>mOaEs!Q#1De91zV4YGL~`U<<-4xVD*hZY7lf&|IA zc|QM7U*YQ?+~igt+_s8Z(pjTUcdJF%QrMr(F-{DKj5`?fDo<53AnNwHU+FB*6NwkL}6eEVFsAz#lQt{cn{{fr#Z?Uj^4lxv2 zoL@wjHOl1**?f^`GQ)6Slh#zS(HKd?pkAwD+BS_rhjgKU9@V*j^8pvGT*Mm>sjP31 zPRCIaI>YgZbS#SBvdB-&qvi{!(u!eiLih!}S9qdKA|O#}|-Q9odK@X$Gz!5tX7?s*E0w z;kU=6^OKzZ}UQGi)Uuo{L|k?ohu+~SLt*t zr0s`D)&rvARlfZH{FglV(i`mJus;}Jj!m3)pOU0A6NzCUAd4~s2MkF?RwZs2ecq5Q z>Y9g?DlsWf((d+|EKM`LGJ_{tj9P6n)_}RtqT~$Fm!jxH6W<%62o9nrkUsq)v!D85 zDt431$m8htyQEx?#r!1u>kmk%4pBE?eAuF>#d+_ocNqpI#i=Pa-nz}`3$X*gEFzg*ca&cn}iXS)?k1b2pFrWFS5Dmi~l?{I@^dyixwQGNIjtL`&SCU|@zO@Dt6 z_uLG%JNJ41r5|SHWR^$k-(hAdOec54qE5ocIuWCmE{D8oSj$oQUv2aE{`)hK`I zXP@WL_4#o9klfrfQP-pthLARBN;Zi{dpzs8$amJc^1`P`Kk+ns+xw&hotkOmr&H8! z?a=Dm%&(lFJ!)gbW#0MPH%U(#eCqpNB2k*8xt?V$7(h)ipQu!1k zr-Pcw;HMWs&>4*T9NIpU!(-xllIAeLRMSFoW;qn%g=nWg_T!S+l9Qkz5*CgDXGxw}_Qy zIa<9za(af?+2_%7^Bis8C$1|9ib_n6P(Rq^aP=egH?<{i_XE2zM4ZZL}slPwNi#m?i?#CCovCi^JwE+kUYT`e&bi^ zb_PsGl4!0#MvD>HV`M>Kt>5Th*e)cc_Bu>4I zeg6R$-GK81h(SPjCW-#ZQ>4r&sgeOnk!rKS^5f6(vA^=S2#pv;v&Y@nUPbjsWFi_n z>yL;<1VVR!9{O0#F8ei;vDqd&o9FE1>lD&O#_bBBW|Ju981@~^jrRy`lhI&+Roy0< zpW@_;KaA~IY;W9VdUh5)8Yek1$M1{fU|LyK@!Js_Eik(6fwg zc96#=SzTg28Ke8bZ8pC6buytqr_-VLoqLqj6#GJqsi&`EwzfzXq6|kq@t#9-v`yo9 zpHw_WRMR-zUZ+{96ZC9^zDlj;((HP)#x8;Hk}!1SgwDYA=nclyj_*>{;{4Q){&g%g zHb1yceCSX!LYkvKpV#A@*Ps+g+&XGg`hm|f|NIl2K63`ek{Qk>_>(VxgPqQRvlp+j zd}4vk?|hrHw#h4>eGYYQf!y>Wa&itoxxoArFW_i8<9>rtqk*oUCAso6BOyj0;_dkWCQK@WtF zLjDAS$f(p@N zrR$GzV71t~eUocagtgaivUB5o&X30|4+3&Ak(HSUrBV`3%rJTVX`cT6A4Aa;0=rLk zVj3kqi>$|Z{OU!zgAR#Q4lxMv`h8NmL?#hM)nqgyg6_iV>OIVHk62v83mgz-jA(*b zG=UOL(;ked_Iqf_6w!2=Y%WhskC2VUQ6dJ-+A(IYMKPNo@NGiJA)iR#nkJ6#&}vo* zZHIodO*|6exKhCj1B`f-TqH%`4M@x`Q(Qj7%9-=j>opq32c#l8mLD=v$dgScF-Ki$ zhdVS5w=la6R53)2L_gYI9T#1XplSx8B%$gCMj}CeWe#g|hw6hPHu@GPUV4R-7oVZq zZnD$d#oO5@INYV%SY_00GpGo(y$mg9z-%VQY-xgi`97hWWaIWX{y*&fXVYzWex8Y4 zE3ch%d~!TF;Q$9X$Up<=2GO~hNs%JOlB`tH1c#}zEsy0O*T}Xs9#Nw(B8QSlS`<^~ z2AYjVJ^)V6=gDd3oYq=Ix;96iOFx=sE>+^Z93jgXt=HzHHX<|aQVs{q7E{@1f8H*4Lg_v3srk2HUJZ3N&awLe9voUhf zC;}o{CPUwGn4Mc77D-|yQuqfgYFF=p7%+4lj%syoZ*21D@PNWpBHXix_ASQMHir)m z*nQMtWGjf7c{&>{+SLKw#WHbQp>1~<<6Mwoq*VYf?I6G(?N+`hoD z;WMyY0x?1~5=RUC&sq^B7g^UR7fQ%6g*y+MRQ4yBu0)|wqFyfR;&c;=~zrInMsa|AFqLO(fz|oSPwc>90dLNmR0kc})z* zCdjM>vFuz|aV7&&ir}D{Zke74uasbg&9G>^E}mc-IydvUObudhDZBSBoZMW z*J;;U+`V<3xpI=_@-n+qo1ow3`t}aH2YZBXT|u-A!o4BK1(gdZcqN^XBv7qQn0@Rt z$4(aLw0h*8e1*qe{Th|~x2ZP{iOwve*gkRBWIAkczcIy+7Fn5_L70rG@9!|3j2IbH zqNx~;AmWzKQo0;R)dJ#)FplpK3MWY>^9;vRjMgEJ2+>rA%m*SH8f3S>N#kVgs94R z0aW%LA`3Pvt7�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