From feb89b237dbed7d1cb6ee4bbcf24ab0c5e067f72 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 29 Jun 2017 13:54:02 -0500 Subject: [PATCH] MERGE FE AND API ==== #monorepo --- .gitignore | 52 +- frontend/CONTRIBUTING.md | 1 + frontend/ISSUE_TEMPLATE | 5 + frontend/LICENSE | 21 + frontend/README.md | 63 + frontend/favicon.ico | Bin 0 -> 99678 bytes frontend/notes.md | 23 + frontend/notes.tsx | 0 frontend/package.json | 118 + frontend/public/404.html | 95 + frontend/public/422.html | 58 + frontend/public/500.html | 96 + .../app-resources/img/farmbot-desktop.png | Bin 0 -> 696282 bytes .../app-resources/img/farmbot-mobile.png | Bin 0 -> 42523 bytes .../app-resources/img/farmbot-tablet.png | Bin 0 -> 94403 bytes .../app-resources/img/generic-plant.svg | 70 + frontend/public/app-resources/img/unknown.png | Bin 0 -> 7436 bytes .../public/app-resources/languages/_helper.js | 170 + frontend/public/app-resources/languages/cs.js | 160 + frontend/public/app-resources/languages/de.js | 160 + frontend/public/app-resources/languages/en.js | 3 + frontend/public/app-resources/languages/es.js | 160 + frontend/public/app-resources/languages/fi.js | 160 + frontend/public/app-resources/languages/fr.js | 199 + frontend/public/app-resources/languages/hu.js | 160 + frontend/public/app-resources/languages/it.js | 199 + frontend/public/app-resources/languages/ja.js | 160 + frontend/public/app-resources/languages/nl.js | 160 + frontend/public/app-resources/languages/pt.js | 210 + frontend/public/app-resources/languages/ru.js | 160 + frontend/public/app-resources/languages/sk.js | 160 + frontend/public/app-resources/languages/th.js | 160 + frontend/public/app-resources/languages/zh.js | 160 + frontend/public/favicon.ico | Bin 0 -> 99678 bytes frontend/public/images/favicon.png | Bin 0 -> 6298 bytes frontend/public/latest_ota.json | 134 + frontend/public/placeholder_farmbot.jpg | Bin 0 -> 108272 bytes frontend/public/plant.jpg | Bin 0 -> 577943 bytes frontend/public/robots.txt | 5 + frontend/src/404.tsx | 22 + frontend/src/__test_support__/fake_state.ts | 25 + .../src/__test_support__/fake_state/bot.ts | 32 + .../src/__test_support__/fake_state/config.ts | 6 + .../__test_support__/fake_state/draggable.ts | 5 + .../src/__test_support__/fake_state/images.ts | 55 + .../__test_support__/fake_state/location.ts | 11 + .../fake_state/peripherals.ts | 5 + .../__test_support__/fake_state/resources.ts | 4 + .../src/__test_support__/fake_state/token.ts | 17 + .../farm_event_calendar_support.ts | 30 + frontend/src/__test_support__/locastorage.js | 26 + .../resource_index_builder.ts | 275 + frontend/src/__test_support__/wrapper.tsx | 7 + frontend/src/__tests__/spinner_test.tsx | 11 + frontend/src/__tests__/test_404.tsx | 10 + frontend/src/__tests__/test_history.ts | 12 + frontend/src/__tests__/test_util.ts | 136 + .../__tests__/test_change_password.tsx | 21 + .../__tests__/test_change_settings.tsx | 19 + frontend/src/account/actions.ts | 28 + .../account/components/change_password.tsx | 57 + .../src/account/components/delete_account.tsx | 56 + frontend/src/account/components/index.ts | 3 + frontend/src/account/components/settings.tsx | 43 + frontend/src/account/index.tsx | 67 + frontend/src/account/interfaces.ts | 47 + frontend/src/account/state_to_props.ts | 23 + frontend/src/api/api.ts | 127 + frontend/src/api/crud.ts | 192 + frontend/src/api/index.ts | 1 + frontend/src/api/interfaces.ts | 4 + frontend/src/app.tsx | 89 + frontend/src/auth/actions.ts | 136 + frontend/src/auth/interfaces.ts | 38 + frontend/src/auth/reducer.ts | 8 + frontend/src/config/__tests__/actions_test.ts | 17 + frontend/src/config/actions.ts | 11 + frontend/src/config/interfaces.ts | 11 + frontend/src/config/reducer.ts | 22 + frontend/src/constants.ts | 321 + frontend/src/controls/axis_input_box.tsx | 67 + .../src/controls/axis_input_box_group.tsx | 66 + frontend/src/controls/controls.tsx | 118 + frontend/src/controls/direction_button.tsx | 28 + frontend/src/controls/interfaces.ts | 78 + frontend/src/controls/jog_buttons.tsx | 81 + .../__tests__/peripheral_list_test.tsx | 52 + frontend/src/controls/peripherals/index.tsx | 106 + .../src/controls/peripherals/interfaces.ts | 23 + .../controls/peripherals/peripheral_form.tsx | 44 + .../controls/peripherals/peripheral_list.tsx | 28 + frontend/src/controls/show_url.tsx | 27 + frontend/src/controls/state_to_props.ts | 22 + frontend/src/controls/step_size_selector.tsx | 35 + frontend/src/controls/toggle_button.tsx | 50 + frontend/src/controls/webcam_panel.tsx | 84 + frontend/src/css/_index.scss | 36 + frontend/src/css/animations.scss | 8 + frontend/src/css/blocks.scss | 28 + frontend/src/css/blueprint.scss | 91 + frontend/src/css/buttons.scss | 235 + frontend/src/css/colors.scss | 133 + frontend/src/css/devices.scss | 35 + frontend/src/css/events.scss | 38 + frontend/src/css/farm_designer.scss | 433 + frontend/src/css/farm_designer_mobile.scss | 93 + frontend/src/css/farm_designer_panels.scss | 165 + frontend/src/css/fonts.scss | 32 + frontend/src/css/front_page.scss | 122 + frontend/src/css/global.scss | 387 + frontend/src/css/image_flipper.scss | 54 + frontend/src/css/inputs.scss | 48 + frontend/src/css/labels.scss | 44 + frontend/src/css/navbar.scss | 322 + frontend/src/css/regimen_editor_widget.scss | 29 + frontend/src/css/regimens.scss | 0 frontend/src/css/sequences.scss | 38 + frontend/src/css/spinner.scss | 63 + frontend/src/css/status_ticker.scss | 153 + frontend/src/css/steps.scss | 182 + frontend/src/css/tables.scss | 18 + frontend/src/css/toastr.scss | 135 + frontend/src/css/tools.scss | 8 + frontend/src/css/tooltips.scss | 128 + frontend/src/css/weed_detector.scss | 56 + frontend/src/css/widget_move.scss | 78 + frontend/src/css/widget_tool_control.scss | 5 + frontend/src/css/widgets.scss | 130 + frontend/src/device.ts | 25 + .../devices/__tests__/must_be_online_test.tsx | 30 + .../src/devices/__tests__/reducer_test.ts | 15 + frontend/src/devices/actions.ts | 395 + .../components/__tests__/lockable_button.tsx | 18 + .../components/axis_tracking_status.ts | 33 + .../components/boolean_mcu_input_group.tsx | 54 + .../devices/components/calibration_row.tsx | 45 + .../src/devices/components/e_stop_btn.tsx | 28 + .../src/devices/components/encoder_type.tsx | 62 + .../components/farmbot_os_settings.tsx | 249 + .../devices/components/hardware_settings.tsx | 68 + .../hardware_settings/danger_zone.tsx | 48 + .../encoders_and_endstops.tsx | 97 + .../components/hardware_settings/header.tsx | 22 + .../homing_and_calibration.tsx | 96 + .../components/hardware_settings/motors.tsx | 148 + .../hardware_settings/space_panel_header.tsx | 28 + .../src/devices/components/homing_row.tsx | 36 + frontend/src/devices/components/interfaces.ts | 54 + .../devices/components/lockable_button.tsx | 19 + .../src/devices/components/mcu_input_box.tsx | 48 + .../components/numeric_mcu_input_group.tsx | 41 + .../devices/components/os_update_button.tsx | 48 + .../components/space_panel_tool_tip.tsx | 14 + .../devices/components/step_per_mm_box.tsx | 39 + frontend/src/devices/components/zero_row.tsx | 39 + frontend/src/devices/devices.tsx | 32 + frontend/src/devices/interfaces.ts | 151 + frontend/src/devices/must_be_online.tsx | 19 + frontend/src/devices/reducer.ts | 112 + frontend/src/devices/state_to_props.ts | 17 + .../src/devices/timezones/guess_timezone.ts | 58 + .../devices/timezones/timezone_selector.tsx | 45 + frontend/src/devices/timezones/tz_list.ts | 588 + .../src/draggable/__tests__/reducer_test.ts | 38 + frontend/src/draggable/actions.ts | 45 + frontend/src/draggable/add_ghost_image.ts | 29 + frontend/src/draggable/drop_area.tsx | 41 + frontend/src/draggable/interfaces.ts | 56 + frontend/src/draggable/reducer.ts | 17 + frontend/src/draggable/step_dragger.tsx | 46 + frontend/src/entry.tsx | 32 + frontend/src/farm_designer/actions.ts | 11 + .../farm_events/add_farm_event.tsx | 100 + .../calendar/__tests__/index_test.ts | 35 + .../calendar/__tests__/occurrence_test.ts | 19 + .../farm_events/calendar/index.ts | 66 + .../farm_events/calendar/interfaces.ts | 35 + .../farm_events/calendar/occurrence.ts | 19 + .../farm_events/calendar/selectors.ts | 68 + .../farm_events/edit_farm_event.tsx | 31 + .../farm_events/farm_event_form.tsx | 304 + .../farm_designer/farm_events/farm_events.tsx | 89 + .../farm_events/map_state_to_props.ts | 36 + .../map_state_to_props_add_edit.ts | 194 + .../farm_designer/farm_events/tz_warning.tsx | 17 + .../src/farm_designer/farm_events/util.ts | 35 + frontend/src/farm_designer/index.tsx | 116 + frontend/src/farm_designer/interfaces.ts | 230 + .../farm_designer/map/__tests__/util_test.ts | 34 + frontend/src/farm_designer/map/circle.tsx | 25 + .../map/farmbot_position_point.tsx | 38 + frontend/src/farm_designer/map/garden_map.tsx | 164 + .../farm_designer/map/garden_map_legend.tsx | 96 + .../src/farm_designer/map/garden_plant.tsx | 47 + .../src/farm_designer/map/garden_point.tsx | 23 + frontend/src/farm_designer/map/interfaces.ts | 33 + .../src/farm_designer/map/layer_toggle.tsx | 18 + .../map/layers/farmbot_layer.tsx | 20 + .../map/layers/hovered_plant_layer.tsx | 77 + .../farm_designer/map/layers/plant_layer.tsx | 64 + .../farm_designer/map/layers/point_layer.tsx | 23 + .../farm_designer/map/layers/spread_layer.tsx | 53 + .../map/layers/tool_slot_layer.tsx | 23 + .../src/farm_designer/map/tool_slot_point.tsx | 49 + frontend/src/farm_designer/map/util.ts | 112 + frontend/src/farm_designer/openfarm.ts | 78 + frontend/src/farm_designer/plant.ts | 21 + .../plants/__tests__/plant_panel_test.tsx | 27 + .../src/farm_designer/plants/crop_catalog.tsx | 59 + .../src/farm_designer/plants/crop_info.tsx | 168 + .../farm_designer/plants/dnd_crop_mobile.tsx | 100 + .../farm_designer/plants/edit_plant_info.tsx | 32 + .../plants/map_state_to_props.tsx | 54 + .../plants/openfarm_search_results.tsx | 28 + .../src/farm_designer/plants/plant_info.tsx | 44 + .../farm_designer/plants/plant_info_base.tsx | 27 + .../farm_designer/plants/plant_inventory.tsx | 81 + .../plants/plant_inventory_item.tsx | 77 + .../src/farm_designer/plants/plant_panel.tsx | 73 + frontend/src/farm_designer/reducer.ts | 69 + .../src/farm_designer/search_selectors.ts | 21 + frontend/src/farm_designer/state_to_props.ts | 35 + frontend/src/farm_designer/util.ts | 29 + frontend/src/farmware/camera_calibration.tsx | 65 + frontend/src/farmware/farmware_panel.tsx | 146 + frontend/src/farmware/index.tsx | 53 + frontend/src/farmware/interfaces.ts | 51 + frontend/src/farmware/photos.tsx | 37 + frontend/src/farmware/recursion_idea.tsx | 45 + frontend/src/farmware/reducer.ts | 18 + frontend/src/farmware/runner_button.tsx | 0 frontend/src/farmware/state_to_props.ts | 29 + frontend/src/front_page/front_page.tsx | 323 + frontend/src/front_page/index.tsx | 15 + frontend/src/front_page/interfaces.ts | 14 + frontend/src/history.tsx | 3 + frontend/src/i18n.ts | 27 + .../images/__tests__/image_flipper_test.tsx | 31 + .../src/images/__tests__/selector_tests.ts | 47 + .../__tests__/weed_detector_slider_test.tsx | 16 + .../__tests__/weed_detector_title_test.tsx | 24 + frontend/src/images/actions.tsx | 71 + frontend/src/images/farmbot_picker.tsx | 94 + frontend/src/images/hsv_slider.tsx | 92 + frontend/src/images/image_flipper.tsx | 123 + frontend/src/images/index.ts | 2 + frontend/src/images/interfaces.ts | 59 + .../weed_detector/__tests__/actions_tests.ts | 34 + .../__tests__/image_workspace_test.tsx | 34 + .../weed_detector/__tests__/selector_test.ts | 22 + frontend/src/images/weed_detector/actions.ts | 11 + frontend/src/images/weed_detector/config.tsx | 110 + .../src/images/weed_detector/constants.ts | 42 + .../images/weed_detector/image_workspace.tsx | 161 + frontend/src/images/weed_detector/index.tsx | 105 + .../src/images/weed_detector/interfaces.ts | 6 + .../remote_env/__tests__/actions_test.ts | 23 + .../remote_env/__tests__/constants_test.ts | 30 + .../remote_env/__tests__/translators_test.ts | 82 + .../weed_detector/remote_env/actions.ts | 10 + .../weed_detector/remote_env/constants.ts | 134 + .../weed_detector/remote_env/interfaces.ts | 55 + .../weed_detector/remote_env/selectors.ts | 30 + .../weed_detector/remote_env/translators.ts | 15 + .../src/images/weed_detector/selectors.ts | 18 + frontend/src/images/weed_detector/slider.tsx | 28 + frontend/src/images/weed_detector/title.tsx | 67 + frontend/src/interceptor_support.ts | 65 + frontend/src/interceptors.ts | 70 + frontend/src/interfaces.ts | 109 + frontend/src/nav/__tests__/test_nav_links.ts | 7 + .../src/nav/__tests__/test_sync_button.tsx | 18 + frontend/src/nav/index.tsx | 202 + frontend/src/nav/interfaces.ts | 27 + frontend/src/nav/sync_button.tsx | 41 + frontend/src/npm_addons.tsx | 10 + .../src/open_farm/__tests__/index_test.tsx | 37 + frontend/src/open_farm/index.ts | 41 + frontend/src/password_reset/index.tsx | 24 + frontend/src/password_reset/interfaces.ts | 8 + .../src/password_reset/password_reset.tsx | 100 + frontend/src/redux/generate_reducer.ts | 48 + frontend/src/redux/interfaces.ts | 20 + frontend/src/redux/middlewares.ts | 32 + frontend/src/redux/root_reducer.ts | 27 + frontend/src/redux/store.ts | 39 + frontend/src/redux/subscribers.ts | 44 + .../src/regimens/__tests__/reducer_test.ts | 28 + frontend/src/regimens/actions.ts | 44 + .../bulk_scheduler/__tests__/actions_test.ts | 16 + .../src/regimens/bulk_scheduler/actions.ts | 76 + .../regimens/bulk_scheduler/add_button.tsx | 12 + .../group_regimen_items_by_week.ts | 51 + .../src/regimens/bulk_scheduler/index.tsx | 61 + .../src/regimens/bulk_scheduler/interfaces.ts | 65 + .../regimens/bulk_scheduler/sequence_list.tsx | 51 + .../src/regimens/bulk_scheduler/week_grid.tsx | 32 + .../src/regimens/bulk_scheduler/week_row.tsx | 42 + .../editor/__tests__/copy_button_test.tsx | 51 + .../src/regimens/editor/active_editor.tsx | 37 + frontend/src/regimens/editor/copy_button.tsx | 27 + frontend/src/regimens/editor/empty_editor.tsx | 9 + frontend/src/regimens/editor/index.tsx | 82 + frontend/src/regimens/editor/interfaces.ts | 48 + .../regimens/editor/regimen_name_input.tsx | 32 + frontend/src/regimens/index.tsx | 43 + frontend/src/regimens/interfaces.ts | 89 + .../list/__tests__/add_button_test.tsx | 27 + frontend/src/regimens/list/add_button.tsx | 16 + frontend/src/regimens/list/index.tsx | 53 + .../src/regimens/list/regimen_list_item.tsx | 37 + frontend/src/regimens/mobile_nav.tsx | 18 + frontend/src/regimens/reducer.ts | 84 + frontend/src/regimens/serializers.ts | 29 + frontend/src/regimens/state_to_props.ts | 81 + frontend/src/resources/actions.ts | 28 + frontend/src/resources/interfaces.ts | 39 + frontend/src/resources/reducer.ts | 291 + frontend/src/resources/selectors.ts | 536 + frontend/src/resources/tagged_resources.ts | 138 + frontend/src/resources/util.ts | 19 + frontend/src/routes.tsx | 287 + frontend/src/sequences/actions.ts | 97 + frontend/src/sequences/color_picker.tsx | 33 + .../inputs/__tests__/input_default_test.tsx | 70 + .../src/sequences/inputs/input_default.tsx | 21 + .../src/sequences/inputs/input_unknown.tsx | 7 + .../src/sequences/inputs/step_input_box.tsx | 23 + frontend/src/sequences/interfaces.ts | 163 + frontend/src/sequences/mobile_nav.tsx | 18 + frontend/src/sequences/reducer.ts | 32 + .../src/sequences/sequence_editor_middle.tsx | 30 + .../sequence_editor_middle_active.tsx | 145 + .../sequence_editor_middle_inactive.tsx | 11 + frontend/src/sequences/sequences.tsx | 41 + frontend/src/sequences/sequences_list.tsx | 97 + frontend/src/sequences/state_to_props.ts | 21 + .../src/sequences/step_button_cluster.tsx | 167 + frontend/src/sequences/step_buttons/index.tsx | 38 + frontend/src/sequences/step_tiles/index.tsx | 132 + .../sequences/step_tiles/step_title_bar.tsx | 49 + .../src/sequences/step_tiles/tile_execute.tsx | 119 + .../step_tiles/tile_execute_script.tsx | 51 + .../sequences/step_tiles/tile_find_home.tsx | 109 + frontend/src/sequences/step_tiles/tile_if.tsx | 16 + .../src/sequences/step_tiles/tile_if/else.tsx | 26 + .../src/sequences/step_tiles/tile_if/if.tsx | 71 + .../sequences/step_tiles/tile_if/index.tsx | 165 + .../src/sequences/step_tiles/tile_if/then.tsx | 22 + .../step_tiles/tile_move_absolute.tsx | 231 + .../format_selected_dropdown.ts | 45 + .../tile_move_absolute/generate_list.ts | 65 + .../tile_move_absolute/handle_select.ts | 38 + .../tile_move_absolute/input_box.tsx | 17 + .../tile_move_absolute/interfaces.ts | 27 + .../step_tiles/tile_move_absolute/select.tsx | 15 + .../step_tiles/tile_move_relative.tsx | 75 + .../sequences/step_tiles/tile_read_pin.tsx | 66 + .../step_tiles/tile_send_message.tsx | 160 + .../step_tiles/tile_send_message_support.tsx | 29 + .../sequences/step_tiles/tile_take_photo.tsx | 49 + .../src/sequences/step_tiles/tile_wait.tsx | 51 + .../sequences/step_tiles/tile_write_pin.tsx | 66 + frontend/src/session.ts | 33 + frontend/src/spinner.tsx | 29 + frontend/src/static/app_index.hbs | 17 + frontend/src/static/front_page.hbs | 21 + frontend/src/static/password_reset.hbs | 17 + frontend/src/static/tos_update.hbs | 17 + frontend/src/static/verification.hbs | 15 + frontend/src/sync/actions.ts | 60 + .../components/__tests__/tool_form_test.tsx | 27 + frontend/src/tools/components/index.ts | 4 + frontend/src/tools/components/tool_form.tsx | 83 + frontend/src/tools/components/tool_list.tsx | 40 + .../src/tools/components/toolbay_form.tsx | 128 + .../src/tools/components/toolbay_header.tsx | 23 + .../src/tools/components/toolbay_list.tsx | 43 + frontend/src/tools/index.tsx | 58 + frontend/src/tools/interfaces.ts | 57 + frontend/src/tools/state_to_props.ts | 78 + frontend/src/tos_update/index.tsx | 207 + frontend/src/ui/back_arrow.tsx | 7 + frontend/src/ui/blurable_input.tsx | 60 + frontend/src/ui/column.tsx | 33 + frontend/src/ui/custom_fb_select.tsx | 74 + frontend/src/ui/fallback_img.tsx | 50 + frontend/src/ui/fb_select.tsx | 193 + frontend/src/ui/filter_search.tsx | 101 + frontend/src/ui/help.tsx | 12 + frontend/src/ui/index.ts | 17 + frontend/src/ui/markdown.tsx | 27 + frontend/src/ui/new_fb_select.tsx | 42 + frontend/src/ui/page.tsx | 15 + frontend/src/ui/row.tsx | 14 + frontend/src/ui/saucer.tsx | 13 + frontend/src/ui/save_button.tsx | 56 + frontend/src/ui/tooltip.tsx | 20 + frontend/src/ui/util.ts | 30 + frontend/src/ui/widget.tsx | 16 + frontend/src/ui/widget_body.tsx | 13 + frontend/src/ui/widget_button.tsx | 21 + frontend/src/ui/widget_header.tsx | 23 + frontend/src/unmock_i18next.ts | 1 + frontend/src/util.ts | 456 + frontend/src/verification.ts | 32 + frontend/tools/farmBotRenderer.js | 70 + frontend/tools/webpack.config.base.js | 130 + frontend/tools/webpack.config.dev.js | 52 + frontend/tools/webpack.config.prd.js | 61 + frontend/tsconfig.json | 25 + frontend/tslint.json | 72 + frontend/typings/READ_THIS.txt | 7 + frontend/typings/axios.d.ts | 294 + frontend/typings/i18n.d.ts | 134 + frontend/typings/index.d.ts | 4 + frontend/typings/lodash.d.ts | 15828 ++++++++++++++++ frontend/typings/react-redux.d.ts | 66 + frontend/yarn.lock | 6291 ++++++ 419 files changed, 49964 insertions(+), 11 deletions(-) create mode 100644 frontend/CONTRIBUTING.md create mode 100644 frontend/ISSUE_TEMPLATE create mode 100644 frontend/LICENSE create mode 100644 frontend/README.md create mode 100644 frontend/favicon.ico create mode 100644 frontend/notes.md create mode 100644 frontend/notes.tsx create mode 100644 frontend/package.json create mode 100755 frontend/public/404.html create mode 100755 frontend/public/422.html create mode 100755 frontend/public/500.html create mode 100644 frontend/public/app-resources/img/farmbot-desktop.png create mode 100644 frontend/public/app-resources/img/farmbot-mobile.png create mode 100644 frontend/public/app-resources/img/farmbot-tablet.png create mode 100644 frontend/public/app-resources/img/generic-plant.svg create mode 100644 frontend/public/app-resources/img/unknown.png create mode 100644 frontend/public/app-resources/languages/_helper.js create mode 100644 frontend/public/app-resources/languages/cs.js create mode 100644 frontend/public/app-resources/languages/de.js create mode 100644 frontend/public/app-resources/languages/en.js create mode 100644 frontend/public/app-resources/languages/es.js create mode 100644 frontend/public/app-resources/languages/fi.js create mode 100644 frontend/public/app-resources/languages/fr.js create mode 100644 frontend/public/app-resources/languages/hu.js create mode 100644 frontend/public/app-resources/languages/it.js create mode 100644 frontend/public/app-resources/languages/ja.js create mode 100644 frontend/public/app-resources/languages/nl.js create mode 100644 frontend/public/app-resources/languages/pt.js create mode 100644 frontend/public/app-resources/languages/ru.js create mode 100644 frontend/public/app-resources/languages/sk.js create mode 100644 frontend/public/app-resources/languages/th.js create mode 100644 frontend/public/app-resources/languages/zh.js create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/images/favicon.png create mode 100644 frontend/public/latest_ota.json create mode 100644 frontend/public/placeholder_farmbot.jpg create mode 100644 frontend/public/plant.jpg create mode 100755 frontend/public/robots.txt create mode 100644 frontend/src/404.tsx create mode 100644 frontend/src/__test_support__/fake_state.ts create mode 100644 frontend/src/__test_support__/fake_state/bot.ts create mode 100644 frontend/src/__test_support__/fake_state/config.ts create mode 100644 frontend/src/__test_support__/fake_state/draggable.ts create mode 100644 frontend/src/__test_support__/fake_state/images.ts create mode 100644 frontend/src/__test_support__/fake_state/location.ts create mode 100644 frontend/src/__test_support__/fake_state/peripherals.ts create mode 100644 frontend/src/__test_support__/fake_state/resources.ts create mode 100644 frontend/src/__test_support__/fake_state/token.ts create mode 100644 frontend/src/__test_support__/farm_event_calendar_support.ts create mode 100644 frontend/src/__test_support__/locastorage.js create mode 100644 frontend/src/__test_support__/resource_index_builder.ts create mode 100644 frontend/src/__test_support__/wrapper.tsx create mode 100644 frontend/src/__tests__/spinner_test.tsx create mode 100644 frontend/src/__tests__/test_404.tsx create mode 100644 frontend/src/__tests__/test_history.ts create mode 100644 frontend/src/__tests__/test_util.ts create mode 100644 frontend/src/account/__tests__/test_change_password.tsx create mode 100644 frontend/src/account/__tests__/test_change_settings.tsx create mode 100644 frontend/src/account/actions.ts create mode 100644 frontend/src/account/components/change_password.tsx create mode 100644 frontend/src/account/components/delete_account.tsx create mode 100644 frontend/src/account/components/index.ts create mode 100644 frontend/src/account/components/settings.tsx create mode 100644 frontend/src/account/index.tsx create mode 100644 frontend/src/account/interfaces.ts create mode 100644 frontend/src/account/state_to_props.ts create mode 100644 frontend/src/api/api.ts create mode 100644 frontend/src/api/crud.ts create mode 100644 frontend/src/api/index.ts create mode 100644 frontend/src/api/interfaces.ts create mode 100644 frontend/src/app.tsx create mode 100644 frontend/src/auth/actions.ts create mode 100644 frontend/src/auth/interfaces.ts create mode 100644 frontend/src/auth/reducer.ts create mode 100644 frontend/src/config/__tests__/actions_test.ts create mode 100644 frontend/src/config/actions.ts create mode 100644 frontend/src/config/interfaces.ts create mode 100644 frontend/src/config/reducer.ts create mode 100644 frontend/src/constants.ts create mode 100644 frontend/src/controls/axis_input_box.tsx create mode 100644 frontend/src/controls/axis_input_box_group.tsx create mode 100644 frontend/src/controls/controls.tsx create mode 100644 frontend/src/controls/direction_button.tsx create mode 100644 frontend/src/controls/interfaces.ts create mode 100644 frontend/src/controls/jog_buttons.tsx create mode 100644 frontend/src/controls/peripherals/__tests__/peripheral_list_test.tsx create mode 100644 frontend/src/controls/peripherals/index.tsx create mode 100644 frontend/src/controls/peripherals/interfaces.ts create mode 100644 frontend/src/controls/peripherals/peripheral_form.tsx create mode 100644 frontend/src/controls/peripherals/peripheral_list.tsx create mode 100644 frontend/src/controls/show_url.tsx create mode 100644 frontend/src/controls/state_to_props.ts create mode 100644 frontend/src/controls/step_size_selector.tsx create mode 100644 frontend/src/controls/toggle_button.tsx create mode 100644 frontend/src/controls/webcam_panel.tsx create mode 100644 frontend/src/css/_index.scss create mode 100644 frontend/src/css/animations.scss create mode 100644 frontend/src/css/blocks.scss create mode 100644 frontend/src/css/blueprint.scss create mode 100644 frontend/src/css/buttons.scss create mode 100644 frontend/src/css/colors.scss create mode 100644 frontend/src/css/devices.scss create mode 100644 frontend/src/css/events.scss create mode 100644 frontend/src/css/farm_designer.scss create mode 100644 frontend/src/css/farm_designer_mobile.scss create mode 100644 frontend/src/css/farm_designer_panels.scss create mode 100644 frontend/src/css/fonts.scss create mode 100644 frontend/src/css/front_page.scss create mode 100644 frontend/src/css/global.scss create mode 100644 frontend/src/css/image_flipper.scss create mode 100644 frontend/src/css/inputs.scss create mode 100644 frontend/src/css/labels.scss create mode 100644 frontend/src/css/navbar.scss create mode 100644 frontend/src/css/regimen_editor_widget.scss create mode 100644 frontend/src/css/regimens.scss create mode 100644 frontend/src/css/sequences.scss create mode 100644 frontend/src/css/spinner.scss create mode 100644 frontend/src/css/status_ticker.scss create mode 100644 frontend/src/css/steps.scss create mode 100644 frontend/src/css/tables.scss create mode 100644 frontend/src/css/toastr.scss create mode 100644 frontend/src/css/tools.scss create mode 100644 frontend/src/css/tooltips.scss create mode 100644 frontend/src/css/weed_detector.scss create mode 100644 frontend/src/css/widget_move.scss create mode 100644 frontend/src/css/widget_tool_control.scss create mode 100644 frontend/src/css/widgets.scss create mode 100644 frontend/src/device.ts create mode 100644 frontend/src/devices/__tests__/must_be_online_test.tsx create mode 100644 frontend/src/devices/__tests__/reducer_test.ts create mode 100644 frontend/src/devices/actions.ts create mode 100644 frontend/src/devices/components/__tests__/lockable_button.tsx create mode 100644 frontend/src/devices/components/axis_tracking_status.ts create mode 100644 frontend/src/devices/components/boolean_mcu_input_group.tsx create mode 100644 frontend/src/devices/components/calibration_row.tsx create mode 100644 frontend/src/devices/components/e_stop_btn.tsx create mode 100644 frontend/src/devices/components/encoder_type.tsx create mode 100644 frontend/src/devices/components/farmbot_os_settings.tsx create mode 100644 frontend/src/devices/components/hardware_settings.tsx create mode 100644 frontend/src/devices/components/hardware_settings/danger_zone.tsx create mode 100644 frontend/src/devices/components/hardware_settings/encoders_and_endstops.tsx create mode 100644 frontend/src/devices/components/hardware_settings/header.tsx create mode 100644 frontend/src/devices/components/hardware_settings/homing_and_calibration.tsx create mode 100644 frontend/src/devices/components/hardware_settings/motors.tsx create mode 100644 frontend/src/devices/components/hardware_settings/space_panel_header.tsx create mode 100644 frontend/src/devices/components/homing_row.tsx create mode 100644 frontend/src/devices/components/interfaces.ts create mode 100644 frontend/src/devices/components/lockable_button.tsx create mode 100644 frontend/src/devices/components/mcu_input_box.tsx create mode 100644 frontend/src/devices/components/numeric_mcu_input_group.tsx create mode 100644 frontend/src/devices/components/os_update_button.tsx create mode 100644 frontend/src/devices/components/space_panel_tool_tip.tsx create mode 100644 frontend/src/devices/components/step_per_mm_box.tsx create mode 100644 frontend/src/devices/components/zero_row.tsx create mode 100644 frontend/src/devices/devices.tsx create mode 100644 frontend/src/devices/interfaces.ts create mode 100644 frontend/src/devices/must_be_online.tsx create mode 100644 frontend/src/devices/reducer.ts create mode 100644 frontend/src/devices/state_to_props.ts create mode 100644 frontend/src/devices/timezones/guess_timezone.ts create mode 100644 frontend/src/devices/timezones/timezone_selector.tsx create mode 100644 frontend/src/devices/timezones/tz_list.ts create mode 100644 frontend/src/draggable/__tests__/reducer_test.ts create mode 100644 frontend/src/draggable/actions.ts create mode 100644 frontend/src/draggable/add_ghost_image.ts create mode 100644 frontend/src/draggable/drop_area.tsx create mode 100644 frontend/src/draggable/interfaces.ts create mode 100644 frontend/src/draggable/reducer.ts create mode 100644 frontend/src/draggable/step_dragger.tsx create mode 100644 frontend/src/entry.tsx create mode 100644 frontend/src/farm_designer/actions.ts create mode 100644 frontend/src/farm_designer/farm_events/add_farm_event.tsx create mode 100644 frontend/src/farm_designer/farm_events/calendar/__tests__/index_test.ts create mode 100644 frontend/src/farm_designer/farm_events/calendar/__tests__/occurrence_test.ts create mode 100644 frontend/src/farm_designer/farm_events/calendar/index.ts create mode 100644 frontend/src/farm_designer/farm_events/calendar/interfaces.ts create mode 100644 frontend/src/farm_designer/farm_events/calendar/occurrence.ts create mode 100644 frontend/src/farm_designer/farm_events/calendar/selectors.ts create mode 100644 frontend/src/farm_designer/farm_events/edit_farm_event.tsx create mode 100644 frontend/src/farm_designer/farm_events/farm_event_form.tsx create mode 100644 frontend/src/farm_designer/farm_events/farm_events.tsx create mode 100644 frontend/src/farm_designer/farm_events/map_state_to_props.ts create mode 100644 frontend/src/farm_designer/farm_events/map_state_to_props_add_edit.ts create mode 100644 frontend/src/farm_designer/farm_events/tz_warning.tsx create mode 100644 frontend/src/farm_designer/farm_events/util.ts create mode 100755 frontend/src/farm_designer/index.tsx create mode 100644 frontend/src/farm_designer/interfaces.ts create mode 100644 frontend/src/farm_designer/map/__tests__/util_test.ts create mode 100644 frontend/src/farm_designer/map/circle.tsx create mode 100644 frontend/src/farm_designer/map/farmbot_position_point.tsx create mode 100644 frontend/src/farm_designer/map/garden_map.tsx create mode 100644 frontend/src/farm_designer/map/garden_map_legend.tsx create mode 100644 frontend/src/farm_designer/map/garden_plant.tsx create mode 100644 frontend/src/farm_designer/map/garden_point.tsx create mode 100644 frontend/src/farm_designer/map/interfaces.ts create mode 100644 frontend/src/farm_designer/map/layer_toggle.tsx create mode 100644 frontend/src/farm_designer/map/layers/farmbot_layer.tsx create mode 100644 frontend/src/farm_designer/map/layers/hovered_plant_layer.tsx create mode 100644 frontend/src/farm_designer/map/layers/plant_layer.tsx create mode 100644 frontend/src/farm_designer/map/layers/point_layer.tsx create mode 100644 frontend/src/farm_designer/map/layers/spread_layer.tsx create mode 100644 frontend/src/farm_designer/map/layers/tool_slot_layer.tsx create mode 100644 frontend/src/farm_designer/map/tool_slot_point.tsx create mode 100644 frontend/src/farm_designer/map/util.ts create mode 100644 frontend/src/farm_designer/openfarm.ts create mode 100644 frontend/src/farm_designer/plant.ts create mode 100644 frontend/src/farm_designer/plants/__tests__/plant_panel_test.tsx create mode 100644 frontend/src/farm_designer/plants/crop_catalog.tsx create mode 100644 frontend/src/farm_designer/plants/crop_info.tsx create mode 100644 frontend/src/farm_designer/plants/dnd_crop_mobile.tsx create mode 100644 frontend/src/farm_designer/plants/edit_plant_info.tsx create mode 100644 frontend/src/farm_designer/plants/map_state_to_props.tsx create mode 100644 frontend/src/farm_designer/plants/openfarm_search_results.tsx create mode 100644 frontend/src/farm_designer/plants/plant_info.tsx create mode 100644 frontend/src/farm_designer/plants/plant_info_base.tsx create mode 100644 frontend/src/farm_designer/plants/plant_inventory.tsx create mode 100644 frontend/src/farm_designer/plants/plant_inventory_item.tsx create mode 100644 frontend/src/farm_designer/plants/plant_panel.tsx create mode 100644 frontend/src/farm_designer/reducer.ts create mode 100644 frontend/src/farm_designer/search_selectors.ts create mode 100644 frontend/src/farm_designer/state_to_props.ts create mode 100644 frontend/src/farm_designer/util.ts create mode 100644 frontend/src/farmware/camera_calibration.tsx create mode 100644 frontend/src/farmware/farmware_panel.tsx create mode 100644 frontend/src/farmware/index.tsx create mode 100644 frontend/src/farmware/interfaces.ts create mode 100644 frontend/src/farmware/photos.tsx create mode 100644 frontend/src/farmware/recursion_idea.tsx create mode 100644 frontend/src/farmware/reducer.ts create mode 100644 frontend/src/farmware/runner_button.tsx create mode 100644 frontend/src/farmware/state_to_props.ts create mode 100644 frontend/src/front_page/front_page.tsx create mode 100644 frontend/src/front_page/index.tsx create mode 100644 frontend/src/front_page/interfaces.ts create mode 100644 frontend/src/history.tsx create mode 100644 frontend/src/i18n.ts create mode 100644 frontend/src/images/__tests__/image_flipper_test.tsx create mode 100644 frontend/src/images/__tests__/selector_tests.ts create mode 100644 frontend/src/images/__tests__/weed_detector_slider_test.tsx create mode 100644 frontend/src/images/__tests__/weed_detector_title_test.tsx create mode 100644 frontend/src/images/actions.tsx create mode 100644 frontend/src/images/farmbot_picker.tsx create mode 100644 frontend/src/images/hsv_slider.tsx create mode 100644 frontend/src/images/image_flipper.tsx create mode 100644 frontend/src/images/index.ts create mode 100644 frontend/src/images/interfaces.ts create mode 100644 frontend/src/images/weed_detector/__tests__/actions_tests.ts create mode 100644 frontend/src/images/weed_detector/__tests__/image_workspace_test.tsx create mode 100644 frontend/src/images/weed_detector/__tests__/selector_test.ts create mode 100644 frontend/src/images/weed_detector/actions.ts create mode 100644 frontend/src/images/weed_detector/config.tsx create mode 100644 frontend/src/images/weed_detector/constants.ts create mode 100644 frontend/src/images/weed_detector/image_workspace.tsx create mode 100644 frontend/src/images/weed_detector/index.tsx create mode 100644 frontend/src/images/weed_detector/interfaces.ts create mode 100644 frontend/src/images/weed_detector/remote_env/__tests__/actions_test.ts create mode 100644 frontend/src/images/weed_detector/remote_env/__tests__/constants_test.ts create mode 100644 frontend/src/images/weed_detector/remote_env/__tests__/translators_test.ts create mode 100644 frontend/src/images/weed_detector/remote_env/actions.ts create mode 100644 frontend/src/images/weed_detector/remote_env/constants.ts create mode 100644 frontend/src/images/weed_detector/remote_env/interfaces.ts create mode 100644 frontend/src/images/weed_detector/remote_env/selectors.ts create mode 100644 frontend/src/images/weed_detector/remote_env/translators.ts create mode 100644 frontend/src/images/weed_detector/selectors.ts create mode 100644 frontend/src/images/weed_detector/slider.tsx create mode 100644 frontend/src/images/weed_detector/title.tsx create mode 100644 frontend/src/interceptor_support.ts create mode 100644 frontend/src/interceptors.ts create mode 100644 frontend/src/interfaces.ts create mode 100644 frontend/src/nav/__tests__/test_nav_links.ts create mode 100644 frontend/src/nav/__tests__/test_sync_button.tsx create mode 100644 frontend/src/nav/index.tsx create mode 100644 frontend/src/nav/interfaces.ts create mode 100644 frontend/src/nav/sync_button.tsx create mode 100644 frontend/src/npm_addons.tsx create mode 100644 frontend/src/open_farm/__tests__/index_test.tsx create mode 100644 frontend/src/open_farm/index.ts create mode 100644 frontend/src/password_reset/index.tsx create mode 100644 frontend/src/password_reset/interfaces.ts create mode 100644 frontend/src/password_reset/password_reset.tsx create mode 100644 frontend/src/redux/generate_reducer.ts create mode 100644 frontend/src/redux/interfaces.ts create mode 100644 frontend/src/redux/middlewares.ts create mode 100644 frontend/src/redux/root_reducer.ts create mode 100644 frontend/src/redux/store.ts create mode 100644 frontend/src/redux/subscribers.ts create mode 100644 frontend/src/regimens/__tests__/reducer_test.ts create mode 100644 frontend/src/regimens/actions.ts create mode 100644 frontend/src/regimens/bulk_scheduler/__tests__/actions_test.ts create mode 100644 frontend/src/regimens/bulk_scheduler/actions.ts create mode 100644 frontend/src/regimens/bulk_scheduler/add_button.tsx create mode 100644 frontend/src/regimens/bulk_scheduler/group_regimen_items_by_week.ts create mode 100644 frontend/src/regimens/bulk_scheduler/index.tsx create mode 100644 frontend/src/regimens/bulk_scheduler/interfaces.ts create mode 100644 frontend/src/regimens/bulk_scheduler/sequence_list.tsx create mode 100644 frontend/src/regimens/bulk_scheduler/week_grid.tsx create mode 100644 frontend/src/regimens/bulk_scheduler/week_row.tsx create mode 100644 frontend/src/regimens/editor/__tests__/copy_button_test.tsx create mode 100644 frontend/src/regimens/editor/active_editor.tsx create mode 100644 frontend/src/regimens/editor/copy_button.tsx create mode 100644 frontend/src/regimens/editor/empty_editor.tsx create mode 100644 frontend/src/regimens/editor/index.tsx create mode 100644 frontend/src/regimens/editor/interfaces.ts create mode 100644 frontend/src/regimens/editor/regimen_name_input.tsx create mode 100644 frontend/src/regimens/index.tsx create mode 100644 frontend/src/regimens/interfaces.ts create mode 100644 frontend/src/regimens/list/__tests__/add_button_test.tsx create mode 100644 frontend/src/regimens/list/add_button.tsx create mode 100644 frontend/src/regimens/list/index.tsx create mode 100644 frontend/src/regimens/list/regimen_list_item.tsx create mode 100644 frontend/src/regimens/mobile_nav.tsx create mode 100644 frontend/src/regimens/reducer.ts create mode 100644 frontend/src/regimens/serializers.ts create mode 100644 frontend/src/regimens/state_to_props.ts create mode 100644 frontend/src/resources/actions.ts create mode 100644 frontend/src/resources/interfaces.ts create mode 100644 frontend/src/resources/reducer.ts create mode 100644 frontend/src/resources/selectors.ts create mode 100644 frontend/src/resources/tagged_resources.ts create mode 100644 frontend/src/resources/util.ts create mode 100644 frontend/src/routes.tsx create mode 100644 frontend/src/sequences/actions.ts create mode 100644 frontend/src/sequences/color_picker.tsx create mode 100644 frontend/src/sequences/inputs/__tests__/input_default_test.tsx create mode 100644 frontend/src/sequences/inputs/input_default.tsx create mode 100644 frontend/src/sequences/inputs/input_unknown.tsx create mode 100644 frontend/src/sequences/inputs/step_input_box.tsx create mode 100644 frontend/src/sequences/interfaces.ts create mode 100644 frontend/src/sequences/mobile_nav.tsx create mode 100644 frontend/src/sequences/reducer.ts create mode 100644 frontend/src/sequences/sequence_editor_middle.tsx create mode 100644 frontend/src/sequences/sequence_editor_middle_active.tsx create mode 100644 frontend/src/sequences/sequence_editor_middle_inactive.tsx create mode 100644 frontend/src/sequences/sequences.tsx create mode 100644 frontend/src/sequences/sequences_list.tsx create mode 100644 frontend/src/sequences/state_to_props.ts create mode 100644 frontend/src/sequences/step_button_cluster.tsx create mode 100644 frontend/src/sequences/step_buttons/index.tsx create mode 100644 frontend/src/sequences/step_tiles/index.tsx create mode 100644 frontend/src/sequences/step_tiles/step_title_bar.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_execute.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_execute_script.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_find_home.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_if.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_if/else.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_if/if.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_if/index.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_if/then.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute/format_selected_dropdown.ts create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute/generate_list.ts create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute/handle_select.ts create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute/input_box.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute/interfaces.ts create mode 100644 frontend/src/sequences/step_tiles/tile_move_absolute/select.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_move_relative.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_read_pin.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_send_message.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_send_message_support.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_take_photo.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_wait.tsx create mode 100644 frontend/src/sequences/step_tiles/tile_write_pin.tsx create mode 100644 frontend/src/session.ts create mode 100644 frontend/src/spinner.tsx create mode 100644 frontend/src/static/app_index.hbs create mode 100644 frontend/src/static/front_page.hbs create mode 100644 frontend/src/static/password_reset.hbs create mode 100644 frontend/src/static/tos_update.hbs create mode 100644 frontend/src/static/verification.hbs create mode 100644 frontend/src/sync/actions.ts create mode 100644 frontend/src/tools/components/__tests__/tool_form_test.tsx create mode 100644 frontend/src/tools/components/index.ts create mode 100644 frontend/src/tools/components/tool_form.tsx create mode 100644 frontend/src/tools/components/tool_list.tsx create mode 100644 frontend/src/tools/components/toolbay_form.tsx create mode 100644 frontend/src/tools/components/toolbay_header.tsx create mode 100644 frontend/src/tools/components/toolbay_list.tsx create mode 100644 frontend/src/tools/index.tsx create mode 100644 frontend/src/tools/interfaces.ts create mode 100644 frontend/src/tools/state_to_props.ts create mode 100644 frontend/src/tos_update/index.tsx create mode 100644 frontend/src/ui/back_arrow.tsx create mode 100644 frontend/src/ui/blurable_input.tsx create mode 100644 frontend/src/ui/column.tsx create mode 100644 frontend/src/ui/custom_fb_select.tsx create mode 100644 frontend/src/ui/fallback_img.tsx create mode 100644 frontend/src/ui/fb_select.tsx create mode 100644 frontend/src/ui/filter_search.tsx create mode 100644 frontend/src/ui/help.tsx create mode 100644 frontend/src/ui/index.ts create mode 100644 frontend/src/ui/markdown.tsx create mode 100644 frontend/src/ui/new_fb_select.tsx create mode 100644 frontend/src/ui/page.tsx create mode 100644 frontend/src/ui/row.tsx create mode 100644 frontend/src/ui/saucer.tsx create mode 100644 frontend/src/ui/save_button.tsx create mode 100644 frontend/src/ui/tooltip.tsx create mode 100644 frontend/src/ui/util.ts create mode 100644 frontend/src/ui/widget.tsx create mode 100644 frontend/src/ui/widget_body.tsx create mode 100644 frontend/src/ui/widget_button.tsx create mode 100644 frontend/src/ui/widget_header.tsx create mode 100644 frontend/src/unmock_i18next.ts create mode 100644 frontend/src/util.ts create mode 100644 frontend/src/verification.ts create mode 100644 frontend/tools/farmBotRenderer.js create mode 100644 frontend/tools/webpack.config.base.js create mode 100644 frontend/tools/webpack.config.dev.js create mode 100644 frontend/tools/webpack.config.prd.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tslint.json create mode 100644 frontend/typings/READ_THIS.txt create mode 100644 frontend/typings/axios.d.ts create mode 100644 frontend/typings/i18n.d.ts create mode 100644 frontend/typings/index.d.ts create mode 100644 frontend/typings/lodash.d.ts create mode 100644 frontend/typings/react-redux.d.ts create mode 100644 frontend/yarn.lock diff --git a/.gitignore b/.gitignore index 935faf553..e558b0a0f 100755 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,18 @@ -**.orig +_yardoc +.bundle +.config +.DS_Store +.rspec +.rvmrc +.vscode/ +.yardoc *.gem *.log *.pem *.rbc *.rbc +**.orig *journal -.DS_Store -.bundle -.config -.rspec -.rvmrc -.vscode/ -.yardoc /.bundle /config/application.yml /coverage/ @@ -24,14 +25,14 @@ /spec/tmp /tmp /vendor/bundle -InstalledFiles -_yardoc api_docs.md capybara-*.html config/database.yml coverage doc/ erd.pdf +InstalledFiles +latest_corpus.ts lib/bundler/man log/*.log node_modules/ @@ -47,4 +48,33 @@ spec/reports test/tmp test/version_tmp tmp -latest_corpus.ts \ No newline at end of file + +# ===== + +frontend/*.js.map +frontend/.DS_Store +frontend/.vscode +frontend//src/config.json +frontend/bower_components +frontend/build +frontend/coverage +frontend/dist +frontend/jest +frontend/.nvmrc +frontend/node_modules +frontend/bundle.*.js* +frontend/front_page.*.js* +frontend/verify.*.js* +frontend/public/app-index.js +frontend/public/app-resources/*.css* +frontend/public/app-resources/*.js* +frontend/public/app-resources/chunks/*.js* +frontend/public/app/* +frontend/public/front_page.js +frontend/public/index.html +frontend/public/password_reset.html +frontend/public/tos_update.html +frontend/public/verify.html +frontend/public/*.eot +frontend/*.log +frontend/*.log.* diff --git a/frontend/CONTRIBUTING.md b/frontend/CONTRIBUTING.md new file mode 100644 index 000000000..aed84960d --- /dev/null +++ b/frontend/CONTRIBUTING.md @@ -0,0 +1 @@ +To get started, sign the Contributor License Agreement. diff --git a/frontend/ISSUE_TEMPLATE b/frontend/ISSUE_TEMPLATE new file mode 100644 index 000000000..d341d4f51 --- /dev/null +++ b/frontend/ISSUE_TEMPLATE @@ -0,0 +1,5 @@ +# Expected Behavior + +# Actual Behavior + +# Steps to Reproduce diff --git a/frontend/LICENSE b/frontend/LICENSE new file mode 100644 index 000000000..689aa206c --- /dev/null +++ b/frontend/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Farmbot.io + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 000000000..aa83ecd8e --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,63 @@ +[![Build Status](https://travis-ci.org/FarmBot/farmbot-web-frontend.svg?branch=master)](https://travis-ci.org/FarmBot/farmbot-web-frontend) +[![codebeat badge](https://codebeat.co/badges/73a8b8b6-2683-4bea-a759-e3a07210e4ca)](https://codebeat.co/projects/github-com-rickcarlino-farmbot-web-frontend-master) +[![Coverage Status](https://coveralls.io/repos/github/FarmBot/farmbot-web-frontend/badge.svg?branch=master)](https://coveralls.io/github/FarmBot/farmbot-web-frontend?branch=master) (we're working on it) +# Do I need this? + +This repository is intended for *software developers* who wish to modify the frontend of the FarmBot Web App or host it on their own server. **If you are not a developer**, you are highly encouraged to use the free hosted web app at [my.farmbot.io](http://my.farmbot.io/). + +If you would like to report a problem with the web app, please [submit an issue](https://github.com/FarmBot/farmbot-web-frontend/issues/new). + +# FarmBot Web Frontend + + This is the Javascript / HTML / CSS of the FarmBot web app. It depends on a [backend API](https://github.com/FarmBot/Farmbot-Web-API) (my.farmbot.io by default). + +# Developer Setup + +**[LATEST STABLE VERSION IS HERE](https://github.com/FarmBot/farmbot-web-frontend/releases)** :star: :star: :star: + +0. [Install node](https://nodejs.org/en/download/) if you haven't already. +1. [Install Google Chrome](https://www.google.com/chrome/) for best app experience. +2. `git clone https://github.com/FarmBot/farmbot-web-frontend.git` +3. `cd farmbot-web-frontend` +4. `npm install` +5. `npm start` +6. Visit `http://localhost:8080/` + +# Deploy to Production + +**NOTE:** The [Web API](https://github.com/FarmBot/Farmbot-Web-API) deployment will automatically build the latest version of the frontend and mount it in the web server. The instructions below are intended for reference purposes, or for users who wish to host their frontend code on a different server than their API. + +1. (optional, usually not needed) If you have an NPM module that needs to get baked into the build, pass the NPM modules name in as `NPM_ADDON=foo` +2. run `npm run build` +3. Copy the contents of `/app` into your webserver and it will be accessible via `/`. +4. Visit `/` on your web server to verify installation. +5. [Submit an issue](https://github.com/FarmBot/farmbot-web-frontend/issues/new?title=Installation%20Failure) if you hit problems during the installation. + +# Debugging external devices (DEV ONLY) + +[Weinre](https://www.npmjs.com/package/weinre) is included in this project. +To utilize it, head over to the `/src` directory of the app, add a file called +`config.json`, and populate it with this: +``` +{ + "ip_address": "YOUR-IP-ADDRESS" +} +``` +Then, in your console, `weinre --boundHost YOUR-IP-ADDRESS --httpPort 8081`. +This should run in tandem with the rest of your project. +Then navigate to http://YOUR-IP-ADDRESS:8081/client/#anonymous. +After adding the `config.json`, you may be required to `npm start` again. + +# Want to Help? + +Check out the [Low Hanging Fruit](https://github.com/FarmBot/farmbot-web-frontend/search?l=typescript&q=TODO&utf8=%E2%9C%93). + +Also, if you're experiencing UI/UX issues, please include any possible specifications (device type, device OS, and device browser) to help in the debugging process. Bonus points for GIFs and screenshots. :fist: + +# Translating the app into your language +Thanks for your interest in internationalizing the FarmBot web app! To add translations: + +1. Fork this repo +2. Create a `yy.js` file in ``/public/app-resources/languages/`` where `yy` is your language's [language code](http://www.science.co.il/Language/Locale-codes.php). Eg: `ru` for Russian. If your language already has a file, then you can skip this step. +3. Search the application for calls to `t()`. Any file that imports `from "i18next"` will have strings that require translation. +4. When you have updated or added new translations, commit/push your changes and submit a pull request. diff --git a/frontend/favicon.ico b/frontend/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..41374401570f6709261b5ece378a6e8982ecb186 GIT binary patch literal 99678 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 CH93g@ literal 0 HcmV?d00001 diff --git a/frontend/notes.md b/frontend/notes.md new file mode 100644 index 000000000..4d38ca73b --- /dev/null +++ b/frontend/notes.md @@ -0,0 +1,23 @@ +# Encoder Scaling +|GCode|Param|Name| +|---|---|---|---| +|F15 |115|Enc. scaling| +|F16 |116|Enc. scaling| +|F17?|117|Enc. scaling| +|F05?|105|Enc. type| +|F06?|106|Enc. type| +|F07?|107|Enc. type| +|F22 (write 36)|Add to FarmBot JS|Enable X2| +|F22 (write 37)|Add to FarmBot JS|Invert X2| +|????|???|Set Home X| +|????|???|Set Home Y| +|????|???|Set Home Z| + +# MCU Reset button + +``` +{ +kind: "factory_reset" +args: {package: "arduino_firmware" || "farmbot_os"} +} +``` diff --git a/frontend/notes.tsx b/frontend/notes.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 000000000..394153d1a --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,118 @@ +{ + "name": "farmbot-web-frontend", + "version": "1.1.0", + "description": "Farmbot web frontend.", + "main": "dist/entry.js", + "repository": { + "type": "git", + "url": "https://github.com/farmbot/farmbot-web-frontend" + }, + "scripts": { + "coverage": "midori coverage/remapped/html/index.html", + "build": "node_modules/webpack/bin/webpack.js --config tools/webpack.config.prd.js --display-error-details", + "start": "webpack-dev-server --config tools/webpack.config.dev.js --content-base public/ --host 0.0.0.0", + "test": "jest --coverage --no-cache && cat ./coverage/remapped/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "just_test": "jest --coverage --no-cache" + }, + "keywords": [ + "farmbot" + ], + "author": "farmbot.io", + "license": "MIT", + "optionalDependencies": { + "webpack-dev-server": "^1.14.1" + }, + "dependencies": { + "@blueprintjs/core": "^1.20.0", + "@blueprintjs/labs": "^0.1.0", + "@types/deep-freeze": "^0.1.0", + "@types/enzyme": "^2.7.8", + "@types/fastclick": "^1.0.28", + "@types/handlebars": "^4.0.31", + "@types/history": "^2.0.39", + "@types/i18next": "^2.3.32", + "@types/jest": "^19.2.2", + "@types/lodash": "^4.14.64", + "@types/markdown-it": "0.0.1", + "@types/mqtt": "0.0.32", + "@types/node": "^6.0.63", + "@types/react": "^0.14.57", + "@types/react-color": "^2.11.0", + "@types/react-dom": "^0.14.18", + "@types/react-redux": "^4.4.32", + "@types/react-router": "^3.0.0", + "@types/redux": "^3.6.31", + "axios": "^0.14.0", + "boxed_value": "^1.0.0", + "coveralls": "^2.13.0", + "css-loader": "^0.25.0", + "deep-freeze": "^0.0.1", + "enzyme": "^2.8.1", + "extract-text-webpack-plugin": "^2.0.0-beta.5", + "farmbot": "4.0.7", + "farmbot-toastr": "^1.0.2", + "fastclick": "^1.0.6", + "file-loader": "^0.10.0", + "handlebars": "^4.0.5", + "i18next": "^3.4.3", + "imports-loader": "^0.7.0", + "jest": "^19.0.2", + "json-loader": "^0.5.4", + "lodash": "^3.10.1", + "markdown-it": "^8.2.1", + "markdown-it-emoji": "^1.3.0", + "moment": "2.15.2", + "node-sass": "^3.10.0", + "optimize-css-assets-webpack-plugin": "^1.3.0", + "react": "^15.5.4", + "react-addons-css-transition-group": "^15.6.0", + "react-addons-test-utils": "^15.5.1", + "react-color": "^2.11.1", + "react-dom": "^15.5.4", + "react-redux": "^4.4.1", + "react-router": "^3.0.0", + "react-test-renderer": "^15.5.4", + "redux": "^3.3.1", + "redux-immutable-state-invariant": "^1.2.3", + "redux-thunk": "^2.0.1", + "sass-loader": "^4.0.2", + "style-loader": "^0.13.0", + "ts-jest": "^19.0.9", + "ts-loader": "^1.0.0", + "tslint": "4.5.1", + "typescript": "2.3", + "url-loader": "^0.5.7", + "webpack": "^2.2.0-rc.3", + "webpack-uglify-js-plugin": "^1.1.9", + "weinre": "^2.0.0-pre-I0Z7U9OV", + "yarn": "^0.23.4" + }, + "devDependencies": { + "jscpd": "^0.6.10", + "webpack-notifier": "^1.5.0" + }, + "jest": { + "setupFiles": [ + "./src/unmock_i18next.ts", + "./src/__test_support__/locastorage.js" + ], + "transform": { + ".(ts|tsx)": "/node_modules/ts-jest/preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ], + "testResultsProcessor": "/node_modules/ts-jest/coverageprocessor.js", + "collectCoverage": true, + "collectCoverageFrom": [ + "src/**/*.{ts,tsx}" + ], + "coverageReporters": [ + "html", + "json" + ] + } +} diff --git a/frontend/public/404.html b/frontend/public/404.html new file mode 100755 index 000000000..c4c127dea --- /dev/null +++ b/frontend/public/404.html @@ -0,0 +1,95 @@ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +

+ 404 +

+

+ The page you are looking for does not exist.

+ Try going back. +

+
+ + + \ No newline at end of file diff --git a/frontend/public/422.html b/frontend/public/422.html new file mode 100755 index 000000000..fbb4b84d7 --- /dev/null +++ b/frontend/public/422.html @@ -0,0 +1,58 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+ + diff --git a/frontend/public/500.html b/frontend/public/500.html new file mode 100755 index 000000000..81a965d37 --- /dev/null +++ b/frontend/public/500.html @@ -0,0 +1,96 @@ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +

+ Sorry, something went wrong. +

+

+ You can try going back, but if the problem persists, please let us know. +

+

+
+ + + \ No newline at end of file diff --git a/frontend/public/app-resources/img/farmbot-desktop.png b/frontend/public/app-resources/img/farmbot-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce36524b38585562547b5c2ec56d260b034bcfe GIT binary patch literal 696282 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 z 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

R@Mq-v# z6C!NI>#hvmh4hr1nmH!7Z@ly3u{Ya;FiB{JJMNNrev}R59_#|J0XPw4(af5xU9K?; zXfn1%*g4Li(o3l#>PR)zbwd4xPr(2iEd#E?aNkE* zbw|Aa5B1t+>;*#gFJ}^U21sB`n6FBM3`D~$)LTw4ZHNjIMgb}m_|@G~o(16- zh(L*U#^kV5eZwAe$YnL?4M9a`}=RI6YzN&PqL*dk*^K;OR+O zK^I&<$DsyH*LyAH%YZkqQjoFIWKm8wO;*6fCyu1p#5$w{dkz6Ogwa6_u=$-_Tn0ep z7|w0y`@K9q5AeQ}$zC*_g6ef%FTyBC#TH(fon&%shS}^oIcJrH`df*{ z0v0Iupa)j~SPq;Tmo0;cZ)9?^n!Y@tsRHu~qU#1z6QFi?M`amZ`nCJe^V?u1@3MDF zpQXjZf2aGnUS7Xsw^ouqJHSYXqad3C7U}B+Xm-)&lr64cv+AEI<(fXHtfeLzxQYT= z0H-agLk_^EdgmC7;{g@{2Q2^?G$P)ko|JKJ=UABE6{It&F#T()k<8{!0Y?;&abAZ2 z!8ku~T@#jjgU?WVu*Lzd0b@#l;tc>!)x@>=*@z>xpivPP4{UWbl@gBNJm-{G6ky=TR&0H`bh$v;&Q8*9iB? ztJ;v;<%%qzbzTM7PLXW1SWHXDwtnh3E1oPeA&ayXGT|-SPRc~_hyl_3M3mGSk7_WP z%L3>}R6->~3m~z4vtOMoEF#g?uTh7=K#VaDfG0wI(tayQ#rPN#nEcBntE*n^VwxBf4#Y_3{@-pO#N< z`ml6)RPO7_%8Vs0(~f08bR4HR+$j`oZ+?zV03pmv?g9m0hPE zogo40d?C&`-3IJ0kr2`5NXaqlg!IYCm7nlB`-D!jMaJ+Il0w#Ty5gl`2y?T?BCm#y z!Hm_V8p$e|D^*gWQb!UAz_!Cb%$kGopEaq=$rwv+ruob?b&Mn&5c<^Y4D-&2IO&T^ zlO#WXU@BpouW4<8TRviFBaeJ&>cM(Mn8vCN(Wn-QBVQ7WBLZJmxeMn+H_?!DDO_h=$omvhM1SO^;ATv!W6ye6JU9$%kaHIN3F&f=z_D=1QfW>) zg5<84Uy;q^>?tPW;;taSh0IT{kI2LnPA#&9kIygR=w$w6Ol|#QL(SWh*O>`Wlh(q!)OcWN@xRS9OoVqaw4h7IDjaT%+fcke)Te0AP z>>9XF#+OdR2=X&EC?MF7lM64(y&HZ)wi9})MPEBMy`P0%Q+5uZAx4gQ}3dEFJicn@n2f*v=a!h|dW zlHRjW%~@%RQf-Suo?1%1$UCx^<`*TNGsDK#T|)yF7j1B;b+C8UWX^7*-jp z)j1eioql7Z3dn>P{ZX|O;U?G!$rd&y%jq=V)g^bZd5wnI)D)3J0PGtgM6?7*xG z^(6?%q#DEq^ky7ht-=T`Bbh;xJ!O zz^VYZ3dUCXZe`PJnLD;{@uSKv*7mBPI>UDBetBHyvzxc{ku=jTFTH-sv~P75>G!6w z)24wDHgqNN!7#1@s47@*3g5flsic5>GM6{-?%J2C<08N`IH^-i$14rErj1U0j@zATdz~+ z7@T%WEI03gwA1GR->F=Oi4fsC0o5zKSIH*%4DSQxJ3>9w0pKBXivsHwWt3Adrttk) z>|dfidjZH&2@()@z^21_Q!~;pNDR@YRSHIdaK-*BfT%gXqs(`^xh8Y1jEm;_0m1dJ z4h9OSHvr$Nuqn$V?WzHcTX7h>VRJc=jBt?C#RiM61!;0H?YqeaRhj5kKvd z5Vx)G^O%!rn`>|lb=p{iw%nji+v{2BfWe$V(xM0hSKAaQlerFapKJGPp0t0xodqgx zk{o8pdt-}95N+f#KxvVADhX@Z?~6*fIv~T1dqg_((%s2>I7(E{IoKOwEJ3c~bOzoY z&N6pRlBpIbui%4=al#6it_j;Mw2g}D2h#_%UHgy|sm<|z9{`3e3qT%0;(}-e98NCQ zq6L_@E2%i`17(&V)7Mv zZ1_G{syO1l%TmC>v22|eCxAGfS!4SgU{G|MPvXfeHp)xD2AkZ2JOTHw&WESb-v0j0 z_sa?ER}I^;!I(ET}0*q!sDpbXu9E!4RZFxak=}Bd*x*Ph`^ta z^OL8gkYGG!4bX>fevvV^qLNPZrSvNE0ZFVI3i*;uyM#lG7!x^&3`r;bJwV^T*-9}~ zm!xkJa>lacvd9cFFJ_9!o#t2%LAYqznD-jJOR5P)hY<@Vlfw7OP*y^-s+AUGaUXNkVqAVIK-3eLVFb79spM;&!aBr{0vmRqFR zK|=Z1oJpRY$yH@wIED;XQQ~7+oT5}luqKJb3dv_%iw`?{4+jZgjg%jwT)VU_(6&I^ z0@srT+JO3ZSz80qEwD7BW+QrL@ntq2BrPH#O@DNwoL_pAO~}05(t9rpCl=taXB5=g z+_S^{tp5s^^PK$WFMSS{Sqqq{!6FLzL$axVlYHdrh{00lSE!WCk zX8kREPaY41_sYq|uM$$7G&<^SK>d4C4e#npEgqZfyK{@YzWj0i7)8q2d(8hQ5-BlQd6{#MeUoDvr*xulCXiPfxQ|V+8VM4 z3ao3=PnG^iu*lA!HM&*|QyUqW*TyHzOTD2Wj!e5uCt)k`c}-5XRdQ>Z%)%nRe4qDHtlB7Op3O^h>RAUZ;ZdE|tt^CD+OW&TBN8 zi}9=huvH=dNs|+5`&`B8lK_MZDbtGc8QpZia}adSseJ>Gjxgym32K#{u3UY004WCm zQwOYcD~Zyqe5YPpL)o*Oi@{UFK6uVwz;)f_D^p#;b8WMnf*-!0=X4W(=#$)M>vbe8 z>hlujU(G#0|ApO*ZoJ-?>DcN)Xf|V8pV1D{DJN_Jg`vt{p=6 zzagEa4boG%Lsq(86BmxjQksOcn!FP1&H{MXF^uyMHgg%Eri5eJO{9xA(8YL2a#|u8 zLI6(F^EpTuKKv%?)T91=)E)UJtVNu>I)=i|ZI*11$KwV}uL0aUqa?duN^oxQVd~UM zTUGh0N{M#iLFbz!ymSz86atc2S`kYD)*wz_dlZO|guL?!v}<8zuf&~feFh1aylN2re@?*)(^`a{@djF(rL!^G~;wbyx}ly0G(zXlNjSQ zy35HJrU{Z$fa&Vo^)tRTVRXi=fZ~n*%Pz5uQ*V8e)uYKV^3M?I5bT#94DJOq&&i?W zsCaQQYnA9c>SXNH+zCwpJ)JLa?84ZJjZu7VKmY(h07*naROZ~E-1a&$Y{+4OsOJG) zV>pfiL<-Dji0;MSnuwX~5+tjH12ItUOE0INh^E088+#|e!uJ( z-X*7}<|LjyCmvx8=Q?7@RC-~yXEm}B>5$F+_wcPX87JximFXM1+Sc8j71Bi_{vV@$cF9D|tvQ}X(HW&m=INK=wsh-dYbiR`UA3O2*V-=4x3&ulC$*NV-XW>tXX+r>$wCQBz^& zh`0ZBg3#WyO7u`Pp{fF^4p=fOk6@%;czyBQvH{ce7$x-DXtNq!@z$cR&Bn=vfgFI# zOX4x4ZkoKd2E1nrCBj{8Y#^&L$8id}Dk!H;g|)I5d87M${Uk4IP0NElUdf`(9bl8u zfoAUYURoe8cErvB68`lfoe}gR(E`h}34q*WLv3Lm)dZnUm`Y6;o)!hb6@&&XQ4pB4 zr3O&9un}v*##Nw8+yL>Fpjb!_C(RX(<8|5rlQX+M0C#L{!KSKvZbRtYkUsfb3D#N# zJ!@K!UKEUQALj&sR@S?IC+%G~b|pX3FtlTb(jsYl+AsV;q8b;Tc~aI^TVQX;%u znUq?kOWBkx7f7z^;+z2U3IZzARih>v0I+318wJywICEUISBJk-oS`nUdBgM<03WW0 zLC1jTMi__BD5$OpOZBHt9sy;-Dhpki@fuaaw$sPm0ntC~iyt;scNUsdLPNByh> zkkV>mjGEmi8Sj9kXmd^4n1b=fp4WRrd!Md92Q#nfLUv+xj%bmvILd(BNP9V8{acVM zTC^_V2kRAYp1G>J2YHGkv>Q_Ekt;{p%5--lHBo~%8|&h|H2b?Ph z80-hQcfh)K+x$2&VP6k*iFDBx0k@XolUy4ugfS{tSs^;8OU7nT;@GT9S0E%^)*%x3 z>iny%=-MdFW=q=1iX$r$gsBcdZTdL(F_T`FzdrZ0d~D=C*%<8oju))`S|e0yI60g) zoEP4T0dlg)b@go@g5k=1PQ-^so*313<}?d^%*DTcOBd^zSy+~JNgI!91?rjr@+rm^st1O2mv}-Uz&A}IdpY3$#p&n8j#R~ugj;L=qexCXxp+YG&Z?Y2 zB@T|foH%`2R$b^2<5VdC(0iB{E!wAvHXygR#QIxnr|)>v*XaQ|@7Gw96@wLQN~8zQ zYI+On5Xo)I=9!ViLKf%vm<;dREFCfM zebxg_jTZ5t#a)SWKIVCxoDKl<0g{t$?%#rx-4f$IYgTW>$mXe|KN_TATzgBw_pOEC z8kBkaik#1kOE_*5S2jd+A+{>8hC@Qc8f4u_pH!)a*Ue}1t1TXf40nW)~5@)^WVXpL$ zbHZVzJu!C7u8iEO(zZa`0&NRiPZnqc>Q`7>o&F&u39-*;%Fli1b7=oYnE_7yUC!ISa%!2OyDjMe78T7MYhWTgEK>90-!DkMglutacS4QX1Uxj6;AhLqa zEeK2GjZs+7Fc}@NG2U8gY|O8K%#;R;iA=$wJ;FI@80ne)U@PZyZMY>MY6Vxc{0md@1H0xtBG7+`Raf zUz)&lVHHLq_Xm1%*_NQd<_tK~e4XF6qE{eCkK~bIDsO|fQK-5+4xyGuF=HtVWSPf0I`i9Em{4JP-@^mLB*_Pw`n4*or-=K_P_ zfI$GnnVvo~w{QCH_nq(L^Ssadymi1j&MnsCGVE0!1`}4lVRt2>|v=pK$u`0OU=;mMStFH8$n~*&`W%^sZ6!B>@Wn-zD4O z*z7U{=$=^@G+|`6%SCG-3)3WEo`AkKeL|ii4GehT5cC5*3wl>pkJ_2Z(>5`% z50Hg=0|02Cr&|LAYC@7wM~}=6S^rLeAl%@qw5Kk4>7eWEMf$5GSu5I7g|^s_F|z=bMa1}jmE^!8Y)XPxo4h7qu8OG^s?I*b>98#BvuIAm08 z2)1q#?}l7%!Q#tltLI>Q4wmgwW1ir93g8S-Twz=zh+oPBs~SM7%NM|9LO1=hy{^H!<19pY% zzdia-e`0Q148H2O^+ti;qg~%UXw@Ln1uN^eaBfM+-?%{qFLTFmRA7R$7tpI`9-duWK#GoW z5AeFgS}}&Ckr&V5I&m$u9tmNv@U`R(Gzhpo0J#Y!GV}eVg>%*{GIz5LTO)|?i+^?8 zCO&ZhK)z`&yzz|fK61$BUR$zu$#03?gv}Ae)W;mQqo)s#2A?GY{ahDgI%9Jx9<$T4 z7nzeVdPR~rgiz14(q z&^hMiJt-Rq4cj8pAWhKkqCB%QO}nr%YZK{lCf5S76j)y;Fc#tkaKHa{JHL9?QX9zV z9LZZYnYRnmD^|$1Y$VcciGgvOIsGc~OdcyNK;GHFcpmp#e0bP-^DL5&7H(^c*;UIf zA&u6Pv}Iy;2_O!$Uc}d6IoIbm{M$8|d?HL@U{h_OlhseI}VT`M@c6RACH@<&3 z`XNiBnZFg2mU>$2M;X^*tQXEtpS4kpRoxTdAgvTCE})Q}=$xe)FThW&h3RzHDPm{0ms% z|KN}QdFQb0=c`H}5$;FwWzudN`utU&ZojCUm7bqu?S?P<9J^*VC089)R?&;d}pQnyo`_V7_ zy@1ZElimt2R|*00=zA@q1L2?pw!ezwNoLj8f0N|tQt_nC zEpzy8>*A5#f14%8cUr8kpW=#^SI zT}~E2Y~=#d12Tg6<}q9(%9cpQaGi%tfwzJfku}C8$wUkdV5|WE6j7rFI2h< z=VT~m;Hfl_oWTu$ejx|bx@zl1WNcvT9vFSdMt%1ok8tC$EJMI&bPPbzb;^y{LRc

Q>T^lN9c=g6p0KPEcN%c4H-XlAynp_&U)68L4YXLCNbI!Bt2BV z8-i!{S{vT(pb9-sfAn%H{0j|{E^2-Wb}9i=kGyso_y5)n=xpeRlXZ#}O_1bz)!IUQ z={vtrLVb34^{67C2rM!Lz#hPi5k70_&aQNv<C z13l~^3RHM+SDsOZs{C@)=2Rh*e)uv_vdw)HTKBip+NBpse=cVqkW@FkCQI?Z40=Q( zw0H@PFc9eq@vWSM|VLe+}GMKtat#VF}XsaJXj3-w4!zF$# za{|HMFK%uw_j%omu}N}FoiAn-7oA1lGTv!f0k)tS3xTUQo|TpEpUm6CYI}~4hG}GH zKRS>lJbS`1JU+Nw5`O?|NY)0z6nKbLSHEBz&a*R*66R;8o;wh;%I>c3geG;*IiQ|o zTTf)YeI26$H1`r#R_Oa8 zl&nPqaJJuaiqUklt0I~eL)omafjgkNjp1nfO~%oPl~x}GWY!NBVQ5K@Ox@D`&byOl zyCaA*M~HDVv}wV1dO&kC<773B{O8AI^$wvh^zIV9s3$kf$i;}W5br8d=dy{lIc!C} zoc%0u`L+VypTVuS(Fetj8AKf1`Dp`}a?bwZGlWgbkB+ko z{|k)vn&Eq|bKSS^{!Xjy`{cLZ<2adwb=v6Nc!obWz)KDing!in~sC8NV`wLUTDiE$vSbf z>qqcfj}f#+CSovmbLhEKna%92ZHj}S@=s!c{bKPsC>A>1wJY zBwxNoIX)i*B8D{*>KJyi^rY^&b_b^tI+vahIETP9<&cq?65vJC2^c~||3jNJ6e9ZR zrjS<3gWvW{vfK!KxLzH+=<+~AY~8^8cKQyR*^#>=(g&933u?d<$uB-Ml`11Asx z%qJ8c5dl^;{%o-eFAr1E)KUpnOL;U@_^raZdiOt%BG}9758CbJNI@TGYtfj5b!i&%)uw{9G-PsbDVG#LEoX-HG%GB-*+d=DR`82SH;BIb~N<}*R+FjoeWTjOQ0S3HpTJFy~_#53$w})QlM;$&5Xk7wWf-x`)Z>A zOhx`t#5zH{r_7ZWJJX&mM9KtW~Ghq4$Jn|gR}Gj zAB5qZJI~@w-E_LRIpa^%-fthPk5WvemHp1DPP?IyL?>nCM3Znl-oJBEz&Yy%U(hJm zI4i7}2uXXdcI!R%BH4o z&mph1^pi{l4I}fPq2qUgc+L-SPqYHfhVjsiu!lWaJFLso$6w0EB8;2igbQn4hy=Zh zO*%@dqH1ou!?-Vv^_ImA^k;7eZv451!^TR6GB|lDQJQI;cU3;Ew`ixwNtY#&9e%(7hNS)%`^#{m znIhYaiyR(>kGrpQs=3c$dX!`Vxmw#HrBh-vc;w$d=CPWy*v-?P?B_Z(dUv`T4N~M6 zDbD#^YR5|F(zb--G{}`QqKvxkEs)sxTZ5O#U?pg5pL?mDbXPSy>iUtd-p;|!o{pJ( z<;7)nSZ?@QBQ`J0EB+kt=AZc;0v>zWj0T4AH_T3E1wbJTLJp*m%HFw@*OE#wEorMn ztP~mtm;JNW+4mGFB&N^bZ{kvz4hBa@t5x;N){S{jlQU^a+nn^;+-o0vMX_JWWd~j? ztdk+jV@6%S)S2`u*V$nsI32FDR+h)~NwT1>*gLy3o_!M}wTpiw`Bjg|Nx z-F#+E7hRh=wrb=MSFQay+Xr7X~W98kgwcbOzuBq9Ieiwwu6ge*~t0%Uy+k?=77Fc<+^nNM^ zmT+rxsV&4oExpm@uD$w|+WR5YT&~3O*xnU<-v%fG-gvUBy^mEJ zG*DOi0?bStUR=0WbmfP~4050hX7nuVd!Tg`5CdyC2#-ev`^AiM6a;r9(Md>!3mRL8 zD=GU0bCFWNmCw;RtUn+5!5Wxawo5m_KjZ|)sCaK=lq&Q}wla3xEjWmy9Gfc?a;-zk!q*Eeu*+r_0*xla+RIfaqV?+3q911wx;|sA8xkrC8*Z5o_}g!OLrXihu{3M0Si9V~iI{{lSOr9e3@?W&aZdBsAR#%!-EltYD_P zrd@Jb`oN@5Z6o5y4s$XOqy2%lS3^Mx%ue+A*#7`CMaXJ+a5UP96s|27zf@g$j0-q+ zVw{2;Q7^3W(XnSiBcY)TTkqGVu)4}-%;$`v!$%_a9Ke7%p8CcN=`_eMYs9W~Z3|2zI_!~^C#Y*;*e)vA~ zyejEt1ueL#D{!%U{628m?wINhC{OgZ*4E>Aj<5d58nDMekxVLuUzNq>ggLVe?`F-D z-enaFSFp+7Pe|4-TtrYBQzO!y1MR013mNk~aBp8X3EbQVP#Q&!cGsyCmhaj{uSbn9 z>_R~jZ~UgD0=5JaCY-%!azt_2vst!( zWES**&w>7%V7fc8?j~;>*SBu~ar;I%y}lNN@A~Ny_s+jU)lvH;h61e%k z_Y@oqP30e_9L2lManpKT>A|06)+1hHU>H9eUrIb~;*oCgY%|p0Gw^tjjT*ZeS>Kw< zZdRRYKnJ|q>4){aoS;!wPYKO+v&3&_<+I1l-Fp3GF+9@~O;{c`7A~wYFyJ{#ZJNO` zonk>K?Z|_C%gJWm;ANT(Z3Hk;ypCw3eWqURD?rE{t=vnDb)~Y>HR6`O0wBM|nS8A8n;8 zTvK@rNW5Pd7}!BaQbA3wQdSp~cU|lTHs`7p+5QLb9YJBF?;tf8lu{#-eI|b7%?*Z5 zAr&pzmnphaZXR@mi}+ndimhG;m1LBUpT=y)(-Z}}5kahrE0Z*pzR3X~o1$9rpyx6u ztAdVjMFid$^bhp;`bjt05|B)>KmdIo49>WY=DME`*f?*vNsD%*Z8Bu`yXVzkV2i)u z(xg%IB-mBDDP!FH90w;fo$$M%-)09(F4E%gD-0c>@@XDfjLP+ z*!%a0mwXZk-~1y)34?^FifKHgsy7PwXx6=^J-?XLNrU|SU`WsJFeM1wGs~;NBnT9e zwO)#9osg$#?K>`}EWRmlI_m2ZS)m%!D|0X%3sIVZo7va;o@EM6VXd%ftd}bC93sp( z*!jyta%+)gC->v4!t?Gec~6HndnTSQ!58D!`!ziQ`_}#eUHPPSSH&)=0)U?VKPJLb7 za@d1PtDzd&)iXINW~{m-)_4I=ZJ26=@i7nE17Bn{O2W&6GcbjA$?+$RY0j^s{7)FC z!ubIHdDCzYqAmukJbs-0*A$gdyvAh9^*Ny**diU{Z@U>PtNN3MMZ%n{mudIB`dj1o z{hZ+_B`>#4d_%RJ#pu}G$uWJM^5q%-LEGV>HKhv4N9^=^ z=wb2x1flLT`3h)Tq$@)|j1B?d)`Sd2+fAS1HG#J@D19Wo~L-KjmAl}#qDg$0qLD{+G zd}@cHx@I2~Xw^bCr~hw+u(DLg?@}vPiAVUGtsR_rY*4r-b^{g;FjWenC~|iO4Z-al zwkuqO;$D-ziE5u{=s3wKyrk$IpB+t2`^F$b5%VO2o5lNH&DWx2vD2Y`2oWwEJ(ftw&@>0%vuUl3P&8Io8xu*+QAXv2bwwBeOI4Q{gMXuD{*ul(Q7wJbuo0Sa3j=ij~#M46@VxjB(R#OPy@q99;Sl zRHJ$^#0c?ZL?oqQhAoHZM+&Lk3L_>*5LliE+44LvAe^$2+_idh%c9Z~)&Y86J$-I0=4J{?&c=@kc0LLoBObt4* zSvd_q$3%_`%skY6l1>$lWB^Bw3@Sn2sFd|KON47rs}2steRdWBCc60P?k&=#4D0&Z z-{@pwuROjx=tk;?{PVF#A%bqR#whJ&V}NwwgT@G|fO8W_tInVmHVdA3!p^YCeTDge zw+MF+8E{X1@1p8JKyOS;9>j6Z(*C4Ow_AJR&4xlS^auclb zVSYEokH??Zv$&?M!wi_G6X=Wh7;1(<>DjH`21G?D;Bi>}Vt6Ga@ z<6n<$v<@{)@_sUpouzFTdYERoA8aAjX5-4(Q3I5H9owR`u$sKh_>I9$3OhgSJTD_X zG$>A<^#phV5Rhn@&i&3`!^YWERf+`kZp<78Wty|Bd=a48@c7#mK!Q;0L|mUC6j$e)NcEWto<3iguKaJl{YxwV`LUlM0d>u(T?i8` z5NJLMpv1m&0PTl{>WriirEe?j=WrPG*It`pS2QTi@uT5pxHxVmTzG zRUEuh*8GS{+`QnP869oMZ1Cm%_-V*2A`%MeLMHfAECgtDtdb)0RuUJ|4JT7Y;`F2; zyFbRWp000s>Yn+=wja11_I}GSEo1ceVP(}m+CDz_r5i+zK?kWdzK`*usI zK0NwbLFB%_;x+P06PGN<)tj>D2u2umdS#vhEs_s8fO-L36E3;zJY|2#1eAGd7q}b>*8QAjgy&FX?k#DYes-_=%%+l(xNla9`&x40SEn*I!3J>{7>; ztD!USVZ`bpb591ExXeDhR~eZ(NB#4e3d9NUB6o}I&a)J*xsFmEU^D2!RAS0)+gs+d ze?a6u59yIVDn5q82vUy%%h^KU~^A$lfnxJd!)X;x{k)2;NEP$l}>8n%*V^E&eKdl>otwm5X z&Hww;$_SaP*u%I^??u(p^_5L4js%_Ovw29)=pE-xns>Ue0q#vbK3H+wl*h`NOPhSW z?4VZDlX5Y+TzKT0@UXKbV4kR%`Px1{K+mSOodVdvpz+$Y2?M#>@rn(xO21K1)*y>4s&;p8bOZ5|^%0Z#iHl`<{bST+Cm^$KK_W z>Bqt}2k)AYa9^{Jdb+XLaHDG9yW5@FR8nUzb~aIrnMi`L5vPI&CX%Du^ZrLF`M-n1 zpO}#b-0GQ`hF9a`=a7EH>`PpM{Yp&|yiO+=8(O0qN)(nya58iwY995&s}( z(awxzL;v1)(fk0*xZ}wv5kiW&FfxpRqpJRk#=JKR22mHEZqm`a$xwb{0+Lh)Ve+AZ zBL=r_&m%`&$+N%EyvGw3jQ%Jo@T~yks{A|&YOrl9g2q&)A)f&z^>PJG}v zMu$-fQ3z=-EU3w0KT5q1ZQ+TAdK*^kuk@0d#hPKJn8pfRu;mJqwc}Zg%F9J@!taw_ zCE|<>>x?RFC;$Il|Nn`Jfakx-6v#A(ng#|22SIIwDq!U{x$(uM_;A_VSJQ`|bkAgw zO^*pud+KgS(hUl>!Yo&OMk=Ivxl|U5(78QSTs)uCr*y5feV}=NTV|qkMR3-a)?&li zl-|`K{V2J&tUy<~cX}0p4B0E?t;ec=M?>4J$~TyuUN{qOCr5|5;tq=+)(~|motZ2fvXviHpYfFn!Z%JNfsnabneDl$ogjyZTFx&>c0(;ML z@-2jo%RP&oE=ldce2D;2ytMREVqujSjkM7bV@=u%7pB;%Nef3&r9QuW zCO}VNBr#$t&@e&mPl5E-XP%%qSS8y!?HJ*%7MH8Dd`g|%I8dRE#U;>(C3=GLz{__} zy9e$VeVuTL?%s1~mfqSm|3`;vK zHH!e8=48}fMvX7?F(;$$=Tjiuv2GnP0ej-_xuSMl>F7wk*cj$Z9RdExqwZ$hD$@J| zx|`KU#98ui_{RguN*Ko-`iwCukbAiWT{5}xyzq7+hD+En>*W{v1*C`fCi|FX!h zvP5@jU^*(3quf%uWg5TjJtEEEYN_CwfaJTI2J%;ksP7;7mL!{eM;Zt8;Pt7c>{s8S zl8X7_Hati+ouWSGN(Wki_CYvLTFt_$icuw{Tt7wUo@e; zGlT5FwWJ!{o(nAnX-Dlq7wPz!hNR`JGk4I&sm+6t9-leQuJzj|@h_XSLilv57jJjs zsMl#6wZ)JK7{uPK946?ScoZ+PESK*w2;zA3>U1n*M8ka8@*>GKT^(PBnp>2WdcMJ+ zu1)!xa`*zDIqa_nQZpi_JU$NH=vn%d2Nd)YHHW`>a;aTbeE7y+V=2QvLYgB4Ln!gO zuX%dkC9EaO0$6@!D*gNatqi*KU`&B1?c;PLSy6dcq}+^(0VKH5hF&){ zK@(|D$k&#nC(Mqdh9u;12H==Js0a1>LZEBl+r`h8mspB868wn0W~7?IEQN1EE2F$l z0E3hW8v=c&nTeR-{KM>|nl5WC zevC^lvrpTHk2S2p-H_sM3ri2P>VpC1TipJ#Jy4fjZgAO%Z!bN6q;0^_Lv0A|@dQg@49L#`%fd1}^)qAQm8WiZQToY=_Yge95G3N~LL{G_6)GWlF{Q076hXVw_`V`DpSrqGkNXZN zB_X6oxj0%jSXZJ24SKqv7cw;!nt8haEvw%WgR;5@(JZ_MELg{ePmz4lQCl?hyawjp z#t!cF>?8?vQ>epZyzRSEnw2XJ5Ke3gXnmM)qpLhM>)T!R^JnCL!4OOhLKagJ?w0mx9+@3f0bCDGV-ye!mqG z>wca)K_&A$cn0hYKwh{I=`qB<*y9rizbX<1##tIQT~87C4XXF&u-*1=+5GbZrqx8( zaorB9l&55WP6yp+nMyD|cWhV=?Wow4GSGxhCDli^soKnX{=1tOMA1Bhrp)VJ_R_3T zKxu`At}Lqw?%Z7V`u6ekcEtD<8v8ZjpheyAK1WTp$owl!iu2s!x>^uPP0p|KHJSvO zsFc9b%DX(RG+}g!-wxq89dVIQ?zBut^(<=MyH(9jh)wtx?CjL2@T#=BMyiV?Ra+tU z3MDR&3z=%yw3l3bCaT8^KcZ@_e>|JQ{lvkJ$@o;`xa+-pXurlZ&-cr9RjIAmK3i6y zMQPkE*VB@txk|e_*b@g`?;rK-f8vn;{EJZngwX&bikWhtFa9u2P-5y6@r>%#bW_4nSvVAiVCsQxc5 z{67PyRufqh9rj+7S-$812-7$)8{yQ2nD?+7k^DAjZHhVqc^$16{bSI2fuY>kq2Ixh zYHk2*s%Dedzr417|hk3l3Pl?>l^ z2T3>>JEiy`Vx`uhz>M6Q^CO;jkRwf!7N9`znv^xv(0w)06&^eJ(J^I3HdC$p${E|9 z|8JpsuP%xvdhm;)^QW6xXG_p4;y6M5O!NRavF+Tf#h*n5P!wKX(HIf&#~`M#C&aIp zV^nuD+C$K5L!b>o19J%{2Wr~v|6ASc){rA5V@n{yici-bbqnf(5`LDV_Nzi$N$tAi z%5%)IivgF(6s;(HHn!fMVVo?sWj`6|IDOb{q)&36*7uP3=c)uzY9+#5n*t_?%@!jE z5&7>j=%DXH#?>t-qo?irk>9k$Sk~IdRqc*vc|o>O=5g(X#=jzD{|Qdh!2;mStIbLk z-TvY4gwUYOZSUWeq-{=hkwznyX z;bp1y_jXHsT}P>|3wn&dmLR(Bq+EUzbQ}95E-C+4$V(UEJph8BGN{$t1pU^CfTcI! zQ<>ew23sqr)=eq30DNNaTv3AjMxW)oH*AM5@803`MqSRmPtviWmtU!WWKQhgKhvrvM8e8HB1Zfw#n2@%*YEh$!x~vx$j1Lq) zF3LkS>(BhUQ9uNd$fUir|CrGvk+NDR?oKxzZN!4`mtjuV*E3k+pj3t#C2d?ekEE0{!)oK}dw?|=S3|ZQa<=}ir(TvAQuMX zntBTaR0r2OLE5T&b(EfTcK@Yr(t=sh$tq&WT5Ki)*>GOU*rqvd2|B?EB2JU{#EVho zs(MI@H^#z2eE203>3syA&DRrrAq&dD909)2y|p!qGE|oHk&0na*MzBgx4ZjAs{6^t z?>j9Olzj|~CuDklzpD`|yBoe3Eh%f}41h&|HS=Wh^PVez!Jd@IhpCm$X8re>Z2VAD%Xx(|Cpo8 z{Bt&Gk6063q>EBT&tu%u+&h^+hp+uI<*C?2_a4QN{b`uGkhRJKu)c48OS0#_y4cB> z^R5XI_j9L!IkBJ>ac+P2k@7(?>qRAk(iMPvJ_b7F!R~Fp6k8WL3#Trg3ph$;3?O;G zq}PA6rYf1Y`$CUHvGS+ivW`UBP3~Vr?0>6`w-O+W=h?WJ3{)BnbD{TBOmUQ-WJP+Y zEZvsj`*N$v@xG}x4~!N9nrU`T>5q>;I)2ldzo6kD?tz}*M5!~&*-yWV&YuL`@nYS0 zIHIaO)Mt&>rR+cJkPe23Zau|vdzMI82+cu-v6$xEJYm@mUi#jp&M4|RVLoT$o#|BgWUD~td+}} zguhjDx*tvH+W-Zh z9lF(CccS-A;buE`!x48pr1#Ck>-%GMUSF&W;4(MbQ-j9`HslxKP*uMd0@vLcfn}@6 zZ2ol{@H~35ymwH|*jq%Z9%T5qw&4Xr=@3Sqhw7b+qkLTVYzEewuI!aun{bZ5BrM7A zJ!Mth1wuuh)?d$kykXYE@eTT#jubPao(s7H<--Bb3Li@k*EjXVi)=IY@O2jJ$SXZB zFZkuV6-v^lxOE)~q`|G7!GD^OlSn@@`a_lnB@;V0=z^ACWl7YnE50(&32%9FZKz52EJ|q zbE#JBU*O+gH2{KJhR7ARHKNy`q&OWb8op1P1tkIC3t6=(vQNs+l|jYDB+8HL_Qko+ zlCfMt6`Lv}YPfuetHQ1kJ~JTYJc-&`4>SBIC7L_nTiBW>^g5|7w}fZe(oQuEvjhqdiM`-aBnD}uPx?k(pW2q;;nx_u0K zu3v4VI)iG3Jkz;mt48>f7r|CI!N)o7@ScBA>6F5SHOF(s66OpJ#aR3q1Mrsr>2|$z zOFQy_LnD3fSfHk!&JDP#-9Tma;*4{F*Y`jXE9^bTv2I{)AHn$3Qb_(wb7dJvYsu}& z%`73~S42bB+!HsNm^(P$vVa&Fm5#-KTlY0^|GF@)NPnI&0#2a=+9Qd9J45)trt~)v zrr(MVRuJ#*;0@Oh#;#upe4ui-d_O4wZ*0PIqgv zlimbiWm#gN{j}mmB_`QC(oJk;?q=E?g!@Wu($F0oWj7ZT!$b<3)68wfE2JhjPmLol@L zN%%D^oh1plaP05h^|^lYs~9^=`c$f=dhqJRS4!-l-_<-#d5fkx4tjUO=*nRCK7`WT z5>oDqdR}qsK%#c|cQtcEoTAGGUX2cTl{74ZgoPAZ!HK|k$vZTjRfnk(_Iy)6ip{6E z-(N2f^U6t){9el3@+ld9baqzj;y`i-@wwMui)G`>cM0gSL-Dts;gyb+`^TSV{tLMK z4+_~{{hRfE^dQ~Cq6hqd4QPT_rDl+ltJ33KUk(jxwqab8sgQ~9`W@4f%NdIEg;~$Z zEvAlv32Nva5=!EGlg?L7*6@@Tjh$z^GcmW@pLMYbv@M-2h$4IihfRA!LyA)Q?Urtl z+sS(sb__yFE}NEDIT=QyI<3Izp^k2V|EN-fW zK7Oo-18+_xN>!0|rYmwZWn5mHkrqp$WIJ@5s=mg(Z)$U{v-3U|y)A!$)0tVc5RYCb zHDl+tfWF0CT^%OuGZEHPeM}_%S>Zl9 zl;1d+_cs2QgbGP{$+HMjuj%OM`z!Q3+R~QEqFl|ftGnqVgX8tt@;cmjWPi0_JFu}u z1d*vrwvTTu$+m)3HQ)=~H*n=TaR08t_Wt_&iX{ZJ!4g#rq*?qd?nJ(kF3GGH7J0(A zyXaNWUk(Ai{k4R4sq@$J(1{FY(91NhXXqG-;+x72o;vRb^;)Ku2jWvxAT<^+VD|F( zI$=1*5ABnxp*k9+()oI%<`DM|f0I{A|Y&?D=|41pgRPf_(Cv;#=8S6de2# z;fywM^R7@OcpIQEQmVkk_gyOTdpLPMbin;1C!fQ@n{SK6c~o1db-%h2%bp?&0?W4zevcD2M% zU!*GI!3M}QZ8EPj2^D*N;xR}B|Juhe)fvmIz`v>G$xz;DS_TpIWH*i)r1nmxmeLd6 zp~di*^!`5)8gPpFHvz0wFTrU*Vv>U!!I9Lwlp6t`1%ObY65=~!F1W&7=b8*Q`pWOS zvoE$UMIZO({NZXc=q&aBa#9!PAtiw2Di^a z&-)i?xRNhEl~go>E|&cKZ-DO58T)>d6i2fA=h8LRNS2blryYZy$gSrao5S?DX8K2g zZt#Q|PQqM7`roN9pef8+wDz zj5roIH0*%8A(DS}l;o4kHglFLtw{S}*Dvfk(#NOvYf4?!;Y*1;7YrXjflHz`ecR5R zA}bgxY9W~rkmE7?W0G7*@?(1mU$odymYr|$i=M70WF`9|*Re6DC5E~9>-E%xK(BeK zH>&SzFw}dI-M~T_lcki=JbNU{P`IU_lNsCzRH|;y;2*7jEd>OO1%u8q4Mwv{9i=rH z8j_ePx*v7_I5B+CX4rWphENOoVaFc6>uz%Lo-G$(4PTt@Cb?NtRFtflUI_1dow{NxBL@qwA=U(K;wZP_^jQ2yt>jV=AL~8pGtyZzg zVJLP%{9Mr>?I4nlyI|+~@4i-|y&|1Z^xSAh3FAfYIJZiU~?$7`&h_~;mm9&fu4M~3c=vjX{Hk~}7 z@<|-L&l&i0_zTB8h>;b@uOw=KmsCakO)q+yIUFgJo7$bJfZt%9^DV}_m(G{7c^1&u z`~5$s-4DfTiPagtPr^%;l#*FNySjPfjQDaV(PNQ;2UQEfbA>6Q(gyI=wfd%Enuh7+ zM@ip=-IzQ`B}0wwL>zy*APZEhQ2HNVxu!q#AC*b)Gjy9oVn%E*B>+Y1Zw1r^v7-9; zBW!PrrYpeJD0br`vif3k`22BFjo;0SwP^dkjD7IV?Up-gj!2OEeq8gf3rUozq|^9& zki&NIzVCV0{26EdOPQMRa~Yu& zfi90tQ;l23ZXiz$&Olq#A_E7%Zrtbs8vYHcuJce_?9PUp9ZpRJBLx~yw+H0&kA@gj zAK)jA;BYKB>}xfJ67etWd~F4ITp9c(9i2}lQ+&DqoGT+b%yv)LbBdF+&)&4c)$zjR z;LW-=3n4LSqBs7;7bgXY!Yt`QMBsg0&8}0$M>zc+%OUSkHk^;dIL_X}6;DL>v9YnZ z8L~930S-`(5-HLRcn25?@wHj)ekMY8hIHV4~nzqMhf|D5Oj;B(&O46~~K|4>`QNsv6pZ(a%-6=Uy$jO-X$O;H=qhxH<-dQ27L zRL*B~Tkmes1~=4N;`db|a~0X4zwW%?$IKSKV0O7LQI69X^B~Q|58T0uJHj}LUH69J z7^Jr)Tu`T~@~^0#7n&_TuG~j&n%y4y0QsZD%!kKa9lv&n5H>Aqh2raAh3UbP8lPqN zG8w$Q9Y*!V)EyF}EpGh-zt{7}uW|Q1z!HMIhPvJ7E?afb90Bx zoUqVXW4Xh6s(XV9T;akT2R9;;UsGC%w-!%6Deti-ZtzC^+>x#d6gMPfq0R&Z{;lc^ znrnPC;3z-(K@WhbObEon*#$RCm+sywKi_Y&#Rx8AiqGTV^@Q@Ho~DQ}EhoK{G9gA* z|2K{Nhhoy=K;F^2%{Uk759f>dn`9$<2n$Cbs;eH)T{%TP+#Gp+?*Og18r$+hRQmyk zV%IpW(mAkP;?A6-*Q@ReEb1n&%IU~G$zsakUDA%M*N6|3aXQ#z@p zkbZ8tI{Hh#{i``*?^8j~it&v`CACTKH2Sk=vBM`Xzz;zS#)JC{2d=9b3FXa;BwV5g z=8wxEf&r|aH`eA$fr$K7YjlQ@q77N}p-tEgHohaH-(0*Jj3 zilpP?9D@?&HwN2xIq#A;DeF;f1d8HoF~H96m!L&}@x8(o7hWE_sRyb%K~ z=S$ZM!$-bnrZ2e#A4)p#Zx2EyqHp#?dP_{4p2z=_wnrg=kO7uX+{ryHH>7BQElCu9 z{wg_wDPHJ+HJa)!@*LjlH!bjZ_<|{<#l# z=%9@@7Sxlx9cXjRD_&BKH}v0^Uez;@80S{ly*3r8N=mur<#!$%t>&jEBMWggUK{ej z#n;Qe@^;5gpF)_|T$}z?(-ciVbGCJPDE!st@4PkDy1d{uEth?g&a4M{0x~W=)*c(* z_%N&r(&B@H*v`y+Y3Um52Y%H}^)^g77KeCAR+F)0MtpyT4z>PW7CJf<2{j7_8mL5M z2uB>rDUJsgttqa=R;-x@P9&2KSRe($FvNT(H$p6=p6gix2e;{F@27(?Nn+(Ns4zCD zf{D$~erV3>OO8%QGJ+_yye1?Zy_289ev-;uLv4=eHvd3c4V(TI&|IH@nj8}OoKl`aq>fq7GK2F75fIbg8uo~tylQ8 z1Z_j^4;;dE26GUgNScMQeR{R@{GVcAm`D86dR_P&+a`^eG1PzE)ALNdKsHS;RPjhY zOmbl;am|*8;W}-yLo;om=yUv%H0q>}2$)kwmc|ka7M%XN!`GTizEHZ$^1)PziiC_y zA!k-I==+B2Wp}^N?>Bh{vPAPg7WautKzM`+PR4)wN;3L^+4yW`1;g=mz>g=OL!cWT zyV0^tJ1HuWEQ1sDFgKO+^jc}P!^Bk9;BiIm!0h>YvctANrow7wbs?<&*SBQM!xMt35qx^US2 zi+S#ipD;^4Ly*oSLW)#t3?`5cv@!3(M+$Br+jg<@cWS*2OBJ4_eyI{_;$Y%t+IMubQML4?$rj4vb}CIx!3*1xLeE7hN-X8 z_YhkUE~}P__k9qCJGG+F zb{by_@0+HqH^Qcb!@@@G0!X_=ycsr7phOk%^TB+f#}MC$Kht$x`vRYbU#Q(Rv^WHt z#A#ti{){7{)(Or2g>%9AoDige2k>1Ge&?1wB|yxMX5+Jf!8Y(&L4QRu7?1j*f$Qyn zbdrSl)Fw-DzobCoa87#;(*eW1cF1k~veB;?KgGo$WR^SJ+zCaRDqK>4<>QSsY~I1F z>v*nP*nAgBQu{hjbau8J)Hh5BRk0_|O3Z>NwnH1V;3`Ub%M?WME(_T;`C%H>ap1f^_ji(hUJ zZ=VSCUiqDXuxz*O0u#4G21612niQ;G1tnzZUqZ=bJj0p6+H;_Wjiyg|JD zS(TKUMmPG8pQu0mliFU)u9R`j!3yVIKb(y{?*r4=;O(`$Y1fdC%{69MdIe)T{JrqAa%BbPrz7ov ze?E5}ZPK-RyeV%^TU`QTc7&JNkx0zh3JC!xl`y{XNXb;-Z6!yQ(d)XjUEGEUhVdpV zgcyHrl4&8c$i5d5b0rYZwJG3NlNF6Puf)R4k;^2KfuY)M7NP}^E~v=vm?T>*eg%#k z3y_c}y=&P+TYuGz!PD|uDY4|%d-49I;xjEQR@N2gdHB+}mp;yZ8sPYeQM$fLD@P-CZYRz|zdlQRz(ANg~zMr>byd@Mh z6WcMQyLk4yhk?~sabxG=@saoDS-BENpq&+=uR90urBzLxX$_n;5dGCavd}Wj<(Yb< z7!kRvXQ%k%ydt#M5!qbRtziny7a1b~DG4q;diPF#=f|AEp7ReP>CS`3GwlAs*_2Y6 zO8*V^D22_Go=!2RL7yrKho7&Ee+ENv$nVT-UH&Q?mR;K=;`7ykJOxLi(;ZAcq z?)Jfv?0-GAQ2pzKM~2x_fy03Zyd$gWb=Fzpn;;9wrNIYW`gswk`;bB%jHv`%!&b1= z-ZZ1~e$))vZ`oCT6^L7~?NhugU2#<&xp?3rjC^2``%PIoo}Og%d(5zOu87m;N+K-( zF3~mPeZ%L9)c5@c_vt*2H#BdDu=_ozr1oafi1(#!;VF)xJECwc>PES~G4n9k-<<>3 zE5X8B{+TRE*5mCapeE+XAg$+17F>%`(XBCL{+!2#0mjzLby zC5o(?wv_?x%t6r05)QQUQPtzFw5QspC!Lt@qR)6u$ghXmy|(S_;(HFAtMzy!!o^2w zzb0RqL`rX?q$Hg^xb)aXpK$?%4>!K`H?IRjpV+|OAI{FV%xRxQX&o$fmy?Q>VY{=4Jbz3w4A!3-5$j%{efLV5{lU%<`0I}V3c@wjPe78cR z4TvsejjqGJm|-c;cA|gEw?O!RyOo)|9f$HtT~6LH}qcZe6+2faxo()VH$vnt}Tz4bOqU zn*RCUZkwhxx78c5XhB4b1x%Sw3tCBq)lpBLHSRJq;rf<=pg&S4a;Qp&zHp<5SlBSKi_-8(WOrRw#W{7fhtHtMnUCZB9aE0&>p8#&#RL2drgqE2hm%6eFuC>gz9|LH z+Hi0zB}y{MJe_bM)nt)u7yFlhSiy3K>??3*E{e~%Czb{0KsB1}?HIC-q%NCJX7X?* zDNHh50*)r)DL{n)k>s~K;PJ=NY7ZhK;TaERIO<>>R5dTnkg4K}Gs&Z?JkTzr)E)?< zz{9~qK5)-B?e`s{l?Mq^_N_1OMR7ErWJwgm3`8rQ+LFxJ2#<^3_Sk=eKv{;1vlHBS z#(mK2A9kgP*J4KoO8EWkqAkqzo?1A#UbO&!2V@{+d*)$7ic3J!(nulf^u_N)FKs!b zpM~&D%~0T0Dy4SAO|nhyaawF=FzArcMxZmZ&E(0?w!p&~E7wAR;)ec_Me#kJ?w+f? zJkWlWzu^PO&Q9HH2~nFO)Y&rrc)HvUI2pUf5w~L`$Qe!Ye&Sb_mHy8;j#85B2}1(L zI5;>o*iFyqK4d#$$o6K=>G%6;U;njo{+CZ|XJ2^W&&W#=wfsDrdmH|d*#thn%s$~D zE!So6L;6V^VSN5vc)dA@kIfDp2@YX+xCbsv5LKCZ+DDi04e(~mAq<4O_*p8Uuz}yE zGC0NlkbaUsZqNVE-kU(#ab4G9=gsqb-LL1l8|cPF00bvdlt_`9D2e)!E!+CvUXE>f zh_jZRzmj-)NSrv!S;=3{Pdt2k{d`&9Ln14(WZ9-9Yp_U46vYVyNCF^cbfeMp-2LWx z%-*-EUROUh2FfG|H0l7at6mMas?NFhzPkIIyN?^&?P^Su&*P<4Z%bZBKs<16RPm!- zLw=}Axh9FkvLq|B(&;?_$A|A7u~QNG5VW`Bw^0dJQI-ZQ4Okj@hc)nKB&SkZ^F%10i-{3^o+cEc2f5LOgoaKdgYh? z&xh1mlPA{Y=#x|O*&q9W{KQAzqnBhYw$s3LYEhQ6>+00c^5pVA%R?>q%2&@k*LSLsA_(;E1a3z&g{hlCh9U|Zlimuk?4 zg$L9y3pPZlVVnBs%`00kNtbA|NSN3%jksnPpfwEfaMtZFq{fJY?j(wYtOScmgAu6R z-czZ&O6`&YPj(RzqAAe2B;B)`opqZkhl)y8so77}1FVu7h^=JazOI0GIvTjoSNF&g zBII01Owd=4;)teB^!Bd?JK_lt?}d^&>ZCgc~?&rML_V zmtX@-S2m(!1D3FXzJ=e}w>#jVrE^269!7G&Mm1$OZn8@t5XKC)tejrBB*W2ub^Hxn z-a6z4G?1?%IKfeejW)q_tu0};0N-!*83isk`r-nDQns`unvX38Z3%V?hoh3sWkCb8 zF1tGVx$_3@z&gazfTaOT13O;>7NEZKZEQWEr2$I=CJlW2;k#wx=%U>71YZa-cpnPl z^&eBVPj74i)O|sxoPBOuf)STI^yv|G?9s1Jt7Y?_gOBz~E{Q4bh>kXMv2)C@oh-!S z^1Yc;(sLv%q0UVpEuRL5@H2BVI?yEtc5C;y-TBrwO#`p5o|6|A-q=w{IE|%QSWYfSesFBXz-1ygC81lA1d527EKWGu;g9#Lx;vSGZfXh8Hr_ernJ)Yp;oAg>~tciUhH zU8Vt$4AaAL3&~5Xvntx_zEJm7?~34I3^R|a;EW%4%}ZCURlESyGoU&-QW(4HdAGxk zu5z2Q6O&L*Vx|JCxDu>zopvYnPqDb!U1nAS3k0K9 zZcSlw(cwa$_?%uO8BR(Jv@WzC#Q@F~1qAw1eG*Y)p9>M_Y!7s*>FE^Ixy->3wqybIqaJIQN}-j2&Gn$1_Y8due?FZE0CtZp`!{ z)r;Pi*rqrMP0_!Y?9{Lkv}1!ENZ&&P5lqJ~xWHE~UQE>tdIG9%w`{bdtC96^mIf>h zyaf$dfcjfdmUXD50ZRk7zXm@1;6eG-KRDU|)ESk&>+Y=_~Xn}osgQJoGh9+n*eo;9n|2vy=@ar=aGy&=f@WkS=#_W z#2{=Qs|yE*{7@9-i?+JuFQbBBc0_2^<@wmFNV@5l3rn-|VD}-}6}kPLC^>+jOgh+I zZ$E-p zaOnh1$dqjvV7m6**q4Ikd4RJ{bY^Et1`+*bI9FP0y2tJ|eN4`>7%X?ArPgE}PBg=| zd>qxu&EcA$IFp5(3lReb@R4;|Hr>KoqL z**o*-R3RhZxrBtG`4w^dyb=y|0Pu5eg6XI~jC3}Gc*Wx8yAy#}_5KA~3p&Et?~)6; zT*b^oP`z}5mW0AONHLeAZL$7dPXpxRer5KAoLV`Jya@$FEO)?(>{t4Rx*_V1_ybN* z+i8lfqGPX^^4XA2o%x9PjtwL6KW2U+$^g_+1Fby`!!-Jh>)n*K|4kZLh_A?V(=V#F z!5uJPM=9&2r?! z{aQ4JY2)1=>XVVX+oY{8(Ac``o_1}3*VwYTGI?@M-t%7!i3`cHt|j?YNzOdCD2Mun zPXYu{Bgz=1TQ%_&tnqZ&B=Kz%^=*ZLHYJOhx-5cTXBq$L5hM*+IW>pAE{i&CdrLWp#qKnbLf zAoz?BZaJ2lS0KpQ^12j}!SqYxZ^$q0zt1T0rY$eT*W_Xbpt#E=6Sai2=DadhN{Zdh zh{(ERO2r1Ce!jja!*B+K#7EbGT(B*uW9W2X-$X8P)|;U+BJ&2m4U+5 zBi@$+OA_QblJlnTp9+q+Qwd zYPY!o(3#QKr(BcLQ)^R{Kg&qedUtVDTqZs+xsgW(hiWAp!#JvRaoZ@JF~yF z5R z&E;=i$y(dgz^n78g^DVOm^iv4R7C|Gzr6F{DlnYgy%eIW) z0sODk3OK(i#}{9dObs(!Xd`_1+i(Pd1_!#v5cPiT_iCg3JAFz0e&fPZ=sOD%iF70P z4>-~>+kug8- zcG*(V&HOu3_v>z{~Telhei@C}sC}3=CS~9WE zfBN+oTcnP-Tt!u!|i3GZNIPDm@l%%#9 zc(ZMRhBZ0mm|_eF2&x-m9HYK(`O>(Yap;z%Q6}%n3%?8piC{QUPMHF44%>M>2H`G& z#w1tKK`fVN5i&0`?t;D9VuFGvOhIE=&aNF1mU9u_$%)AFEh7u#rfPAkuEp_Nj3s|51@;}1$;5_)-CjgFVwyAlJy)1Vd#wntF{uab@`J@GaYx*k zvJPMY#ti7u>D0|?9TDl^0sn~YfI2q^Zg?m3Q^j%Afgz_|)ACsHu=={_T9Yeo0Pl7{ zZ}=F1dcjeY8UMUg>}46w4$4e;TCy%A`~+}B@l-vx1fWj)lMkNt`o8KIqVPB5l6^r6 zb>x`9eG*LPv#aOFGLP+aoWT4hooL5|ZGJggzbqT|EFed_bl5R91d=WnF}q_{?hbcJ zzwg}z*z<_m%mXE6^z09kv$6zGFyit`7rky*kyDN-xwkqBC^;`V0MFEwz}6~R>s8LV z9X2ykJ&&HDzuqo`)lPZCaYdGF@KVCgbf%c?&gV(t=!y=uY3*UNUATb0KV3bmK=}jq z-UgUH4Zf{s(=+mmeMdCCy^D%j$)=^v7m&FODBOx`(&Gw9w=a0rnKPufDdCAohebU- z=XnF|w{SJ6`t%_Er3UlcDQnv2X~gZC#l0v5=P zUPgt|>Wp^VD&iTd>KIM|!+(N^fk0GJsTIlQGx+TZ;1iTw87(iLmM@(AsysUQupI0g zeb?)f_7u1F-*ho6Hh9K7pwMw6>AN;#Km%z#9ypZI&dab-JYE3hT~Ika`2KAcg72J3 zKsz~+43l>9`C4#ZUSJ%ZYifWtNP)jF z0;jGUZHYQoIR&U{=sJkm1KC_va)?OxAWGfgvf*9K^sS1Z+)@Vg#p zlT2n^7T`E^BVoA1<(F(JA*I}^{MBn;mQRj7E(6hSt1VsALe@@81C|DMq6RELeJ5Jg zdL~N)cd!QX#ghEiAAL!(<%0b7S3fGH{N~HzQ-670e*ORY>l@NeVl^+{`P@1Ax&M7L zF{l$!s0tOr3+9g`cuDPwMCA8>?WY>28{m1+ZwiNQ?6p=54dg3`>Q%}&wupRU_z_vj z#bi7_r(XKC!I?c6gmbIJcj135eV0D z5A#4CSg_cxf`_axiFEWLz#1$FEDM;q63k>*(e2td&{}}aguwrwpZQ1mpC0&SY4_b) z{NToY8cXWqNOc#YkSnr^XjD{d1&DLMVI%6Oh+*;bwoCFp8AFoMh@=6O$4zAQRKFjQ zy2R8}R2mDy#{d?+*!NNA0l8d`scY2Tn+>lDAnKLsip(vgWpH%=;pyrcx&xYgyup3}HPd4+ZAL>NP?vOC z15Zi&6ToqC>@(Vxv3wOy6xIcP+7RVm0>=`c^NsAPT&bocyIzt{_3jn#O{V_geWa^^ zM&Stf+vRg|IIMvPbI6B4xeOxGS5D)}0k#23cUN6V zURqK1e=0wN_EeMC))wS}&OUYC&HBSg>O7oj1b|;m&dJ4mOnx3YInFpS4GA|(=SsR* z6pvpUTAixR$YJ}SY8On@J1HyTMB^@_&hy#Weq8Vn?k;bA4%(bRJL`a!V_@?MxlK7O zQ8$>2f#0bw)}8I@$>y22_L>_G$r|c|4b@jgnXArE18WJU2ZJu@=nSaenM4APD4kNo z{8ZEg8x`vj`&INX0OOJP*%MN~FSHx`UbovPpCw=|*Tjg6>{#NV0HNome|1Vc76J!-v&1nv1l)n>7I1N&JkE>c|EMv}y;sjd&En zbhf2vTSPfL(kTQls2?Iz8M=))Q zpU?aQmKyLvbr>(~9DGqc*TJAUARzzw9xV`94cag%K!H03z=Lt20xiuzJA#Y_Sg_a_ z9Hj;(peX<_UIw1ZuQmjt8ux&&n&`*z3#07J^fKJm8m&uek!zap7~^@2ZMXW8kN9AH zOpezl705xZb4D6dD~3LlX)yRYE>nm^N1Qq$F%#9ixcn8&9>H-qyoSNK0j8^gn*QLV zc{t((6%#JxsoKR~aY)t;01A!|Mz=@$!eT>qS5hs^`537j9y*N zhQboD9m=__K^;k`&efM(I}p{Ozsx$p>l&cK)WBa4VMZ3RHqidh8jloSA> zra|Qs!8K^#zn?uPac@~V@*Z&@V)k-U2afarNbI3SfGu(gi1kA3Cea1~|6YU2#deKm(Q^!Wr80Wt`Bdy{eM7(t$A@nU6VFUeu+vZd>PHR~I%EDO*;+m|R4giARnH>kx#2aT@B!r9p37tX74yOs) zeY74^IUwkOBdAWQA2k;N2eOO`Y(48(l@{>mlczXmFUYDhE-6=9($0)LoYZKoN|>2a zvX`WcWw;ET_?KlN1ik4pm>!hw>{UF;#zD8}lKu9h1CPi{YcER$Ty0J_6pAX$?wla5 z&yU8AFN}U38Hpge9Mc_|gaDsXzP_F3>aGW^AeM(i6j)C{7DuU!3t!lf*S|F@=U+tl@Q)y0{M}>Qo;7-3hc;EYX>TEmI5bA% zK+ZkCB=_I7tLX^q>$NoS^z2dj;}c)n7EI@PeA#Doxv@^FmuA5sZxW83J3u+zg?zMr zM2J&Zjzb5<_?_pG!kfS^Fcl2}(M+lK@feB%HnmlC5`uOFOaSV`aRu^cA~I7uK$VHr zJwqsX8%Y$kDA#Rv-Ex~41GuXW+KoEmhe7kv;6cZTOyL{)vH&pYY!zunG0T9|B>5Z$ zVn8o^CuK|oU@AFrEGU1)Y5ui&!IsBy1 zzZDQ2teg+}HgDA{ZFx;U*Lmc(Z8vS-QVU2IqLOWhj^(rPSsTs~taIB;eM2sSOFoGw zeN^^irb3I-1J#E^)G_1@Z=BEb@F`&f9UENlw?)MP1fIdyC2+78Tqqdg10B#emdE8g zOB3q*JMpK4$m-W)OY-ExMVZYd6;NIZXu#<_fbufBuTUa_SEGH+U_Mw{!B5PUW(a944^aGexz%6cvR3dY;Nksue z?ruZaj@}eyi=FCs0)GhjI`H9=&NxNq2WN;A+|t2do6Mx|@mVb{eLgcpjGx8{s;<7HJnl!KmT^ zf9CS@mW{SEj%nK(`ooq0W^&-Sr&PkbBy>u}vb|_+Njo^1EXvAq8qO-`mT`*_d2T9F ztvcAwhx{8uI<81>4%j}OS~xtNrTRT(@8 zKnQ!k^=Ieg$^Y=*H=k;KzlsK?QVX(>LDZv3)Qi38J6D~EJU4_d`!^zFiQwRlAWl1? z+haH{14ar3oSO=;qip2K0(ysi+my|5hKmDwe2m?U!ZcVYz#4)?wH!?1d{em}f4Eh~ zXSO~YgKVE&ctu7r{rPqg0;Xqb3z7kkx)SJtdNq%niBk|zS_bKd9ZIYMNOJ)ou;b$7Xr--X6Sx_3iwmh$RqgkrM<4i2#kYvVGLn~^{;0y-8g zNho^`Mm?K_p!p&qphtE^q^~a|Gt&w5z33CM-3VGRAJ26|KeQ8_7%Z1IVKpOQ??l6; zt1Dm0sk&zz&vPx&G!V}xg$YToB&Vc;gx~?c79~zy5vX;dJ(#5e;QaDLOh!keGJYv0 z$pq-mpnGK_qoJEmQ0tl#g}arF(9zM6Sci=;;RiF*oXAx$i*|uF1zsS_PH$46oLoFB z=U2yNrL>G00_!2>`>bvgO;g8a_keN^1u3Hi%^d{%)V@4b6W?fuN-@0Bk~3~n}98PsNM%p92RMs(Qyq#p!)~R$8 zN5VZN&@H*rm*IubC}1|hGNKqN{Unz8f=xx6XEPWy;~WEw+~sbQ4uI(d7fFqA3H<5H zX;38~Ng;()J7(!XVyrHQUrr>J0e~l^J?ualQ~;~ygRZh}Lxj~b(gUt$^SIxvJm~L{ z4rGrF!2@!zwM)KFnhBy>x)jJYV-kYtWzd$e-reWzl6%3WZSZ+>8$UezN>z(=$Cy(W zZpBW>o?5S*w$G?YWDPi1o7JBLz%}5eDk6+^pC1EgGaiuo%s8?DqTCWLq2k_T31c>a zACc8aZzdONi;Tln&&}IVPe?sreHq+I8_;nIlomr^L_dj0RO*jA&y<(oWYK0U7`IQ| zjXFCpQ=v!EzmQM-u9gl^4rqWn_uFfB$;5Nw3i#x;%#w7$v&Q7HZ|&oZq59FM#%CIEv!_q-rB9i{<9*dCXM6lzyJ1-%w``ZSf|`Alg}5J%n~% zLlk~eU72>_Eopz?^g!o)SysWbpOxKq&}yKrWMO+cQ}Sp}SKw@6+vj=eG=2G?XGjJd z+VAGR1;yzE2*nNzLPyI0oIZo#?LG$(T|Ee`CG%jPqWh| zxXlElhMl-vTgl4sa6~SgEi1Ywvo>AGN8|^UPXRN0=qRZZD2Kf_9irNMferlxZR()M z64ikYN!^`gF7A$Bp9S5@3)9C0zB$agKwCmmY)1F9HoMVR8FYB8;&I*2~X09Y< zbZ=BL>5{USS&2(F zUf{PY2(;YWiZL_>tB168z4;K*z8K?YniWCG5(Zy7LGcDQ!$R<3w?)tqQJzyng3h!p||w< zQXG^i0L4QUpDZOavW%po8`YeO&g9_D0LutA^1JZ?#WV(K1kJT$s7FSY4>?;fZl+eW zV+o?90Y7xy zh)kVF^lI}yj7T+Ip)@;yXO_drex*Nb!&miTa>!*LqQblzQUP!CyCLLG<8wcDdWttN65ET9}bHV#^Xy4R-4jdcz*6 z`2diiul6JJ?-J_YI4FRMCi`wZW9zp9XgvOL`J$WztxL18?h!;coGK0g6E@DKFb>qJ zsj96;{jT7gPq*)t{gDpsI2=ryfqh+pL0Wr28BKM;Uk6XW<1*sdOX_%@%i5f=+U6bHDoFPirA6-MO33q5W!YO5%vZr>(cx5cj0MV_C*SuOUg^SvXFz zXv_ILfEpwyrHyENb3LK1KIGYhb{&-%yq@1j7U?2v#91R0?xzs!aRcnBd$0u9MoOU9 z3Ja2ACwzl)8uSF;T*Pm*DK`gCt)O#S0zZEm9K?n=0#5O7Z5trt>&;D9*_^@~Td7 z8|#v*>Xxotmjo(rpCbvExhe9>%n3=N-wg%Y5kVW!L0ViIKlT+UwNNM{`DjUfiU3{- z05zNFv8_@MfZIp@?1Se=VD&)(`KI{XFxr$6*LBirx zK?X;{h%n!Lm!{tN9$mt5)NxNwKqbm-)-LTtAej9x6Up+@3FJ#Li)ABC8z+(5Azvw| z#GxMaKb(a@{qYY0^t|4dXe-)`?Wm09Dx4k{&#lT`hdRXT)B88=G&TNdv?bVJbQJGq zEYl>s1~<`8Y)dXgkQ71fS8fVEP<@^0JZsg`fTaOT13O6ro4w~wdMfK#EDcy1*zp?p zAO7Ua3aI+kKYjR3&-(ZO{-jh&7~w-a;0SCV2+G&L_Nol`w#)m$r+%ZtDXLWr&fKOK z&HwhV9~JVVUwC;{qJtgs)L%_V7E@YBj`T?PSdV&1{q~<7ld=0d<+FeAfcP-zr~LW9 zec?tgYaQ350W~ma+P38@(FR?b-uKm3Muw+Q9l8e*;RkTtgn1gLsU@S<%v3GNJ@=*o z#Fi8Ah0%nO4h#yropSmT2A2rbW)!7S4uLb|&6HNKkZ{TCQ#j!7>F|ixla?@mbmP7; zn^~5?H-5XwvG}~i$*-C(h{H={Ne6_u0SigO_%SP72b*htICU`eWOE&8xhsA3v3+S_&L#0jE) zdF{Lcu(ZOozl+JV{3Q}!dJszfIFg*+1)k{Fa~drVsXb1Ee#J190Rm&_WR4+W{GnQ?{vwPSigAIO@v_zVK3s;F7jc4QBDj z3?h(!{7_=Q;+uAmWc*!_U6`fNAtA+=J*gs&2?OJvVN^bcc`(h0?HKII9d*o7aFZ_y z|M~1{8x|v=dAZ*;ATBlr$l3A+^kvtfd$NXH0i15ou&=HkEEt8p4qA~7L@D#Rs0vwnf}!bE9f&%%KRqU)a_FWfrp4{Zd+fVF+mu42`MRvvzzeV2-O!L>Cmx%^%oW}< zpD&(dG%CSsJPS8Kxcr!ZuXMvnMj^$^MI>ikUS~8uj1FCAveW{r1KKA-!E?$c$$9*g7>H9kCNDOFSR($)^ z2RHK%^_OGxI@Z;pMqi@u=faP?6?dWSJJAQ+4DNhh^X(GqCk?Q+hPLDY)fOIIeT?!M zwOlhf#rVC9{@v*N67iy(KfNsXJ=iNh_};XNTqhL|6U8z*-H;9R&w~Kf=jQaB1;!56 zA2cv0oFpDhAG?^mC>y!BJhA5^^3v3+aEwkXrx#*w<$=B6qAboO)#d zwY7rm-QOYO<8gl76xEh+4jkG(M8=iBM+YC0jeJ6m zt(?2=!DU2&yIU}@K(zV>aJO~<*k)l;&=|1M_8tHfe7Ohis_0p8kZF8~#7Y3{5a>%_ zoW~Ib0j;+nr=Zxb5(Jpd)nz@&!9F9lR23lh(-4B_q~~r#4PlQq+`$qn2)5i5eVw2S zhWwk`Z_%~=fj0SJd`|IT1IN_v7)yPu2G|%${1C0grpJNyA%CZI`uuXPxPm051<4?~ z9Zg3%q2xBuhcLP5X>eAj9VPjjnK$I)y<_rZY+T%!9&Q%uZC^`=Oe0CBp`{u^VmAoB zwIZSw(~_?y1ZC3bKkOc}l`uPCAPkC*x_Hy%cn2paLf7d~BS^#OWYU>Xyx?*6pxaqr ztqLQg>j3shZ4rbs-~gu>K!!nAv0Mes2@+ST8#EMxeRLe$Z5xz}vM4!3!K(Y`ALpa?K}!&%hq(Zt6@Q1ycYqw=Mx^XQKe zu^YwobLbGEyw?;3jPqV_9VWRfdum8>dP)9`>n=qz6GlXQVWS}4w#_J59m;N$%P8zB zoF1G#@kIM>>Ba-GTt-YQLHWc&%cvhTvGLJV!1F-+BfT8SK_-p+*wVD13;(K{ug90o~5P`_55 z1wgDv+8fV9J?Ian7O;7D7pP*EH9c|PC}ya%+QE$lQL{R*B*jC_38xu45GHTcG{_@x z44mfs{cUnFzaewzupKRaiL|34p})PB@cITYOWWk&V9WU{^7%8b$}b$aN3xiPWG`X1 z1;9PFdkXKb!0AT1uuZb>;`SQyr2O3AJ*pq)eVgeOcsOdUvOBM<+PMCWGjYbGN4{@6 zqnsz~UN&i=P%aK|6sXPrGXy@t6SIUyGhp*Xzl5OJBAZ{leBhji=wL^8TUw zW%2w1-pz6V@Pdu{(R{zuF`ZS0&5Zp^OL-aHSCRKUG9a(N2HGe%XPSjn7W`dkjr#E0 z07srKw4bsa`UpQLh1k!mfY#^#J^TNu847k}D0d(#I|sn_ds8pS_}a8QvHyb-4PYwS z9V7v8+8^%TFBejisDA`u@jI-mnfjw14WW&iZIH=Sp!WhOdODC3r6%#1_TFxs!zJI* zFP>YIzJZ7=EtwiG%jbUB)sD`tqhq(k6LWHO^+gbXBbNpCI$d7at0J-DhWyEkpO+60 zKPvYQ9#Hl)Ut_1Q?`hjDi`hl!3W;L@Y#VK*`7M$*(;QP`@dk=6!5Tq+axcU!QU%ds(JVUsnCM!{NbimrJs6pndo94`eP5 z`mC|{OUUcrQiS!z(txD_O9Qv72J|=n+x7OX`?fS-Y2Z%Pz<>PRUu+Cq4IKnqJo4$^ zyjy(-C3)#9r=_*aE5G+opO9bqqxZd~@~nfeu7L;uDt8lrW}JlHrqgfTM{i5jAg;U9e3 zx}}KcA@E4lF9{IcgGlO!yx^Ed0#7j|ie2vi;7!^bS#QvsmK zNLfbO8MII#yIUR)42eg-!4?361cy0*HGjMyfEc#5t0bQ50NV{32wsEL+y&5-G!h0k zyZKy#b+fKzIqkbFaYstB056*XUh}=)to5U7v+|$kPa?Yibvad>mnREv$ar~;zD4CM z;gY~HO!OvNka!#*A)bQ!cwETllU=ShDWU-%Tb-9xc%%Aj8bC~tfDR5rCwx8^Y`Hts zD&IzXA(+m3P(idfb$C7bi;34|ql`*xIb#*jYph5NGQqN`FGnaf;E*$_rch$RO2`Nis zNWG~pqwiDeD1}RcsQgq&k%Ts)9fzA{*fTzyncxHE(*DHWn+m4$AwNItP<+_1wl0e7#((;Vd0hqgB9!d?) zIM$(tKra!S8KcAvAPU&VGtpMYN7T}plBpHc?Xt2jZES9D)BzJw*0ur5Ib-SMiDk^>amw9Cx)fJ5k2ecc2`UShv_#yh z43@*XM9PaC==$oYe54d%1hgNVYn=5E0bNsD+W=_TkRzad0N>kXA-5psS0<1|d25|9 zUu!3>dqLqb);S_}^m+Mw3bvqQN2|l;=cUcKulXH`cAiCK`T~+(-gkemw6ttGCmZLp z-s98V8{D)J>_niQvq39xSkXU8JGHd*;oZ!I_qTwwMf)Vu(j~2}y#U*X#f}*YuP>jJ zjVx)BX!$!ssN=i)4@kSOT{#?7TcRn{XR98_bHAN#*p^;+ehzH~6q@&TZ`+n=TesUO zK?D)0cBHo@&K}Go`4I1eHey0lKW6yR8QIp>4_c-^v?a7Dw54#kO)kVP$#iTM{l2+F zzcXxQJ*A}qO9MMo1KW)zcjl8?Pi1Mq(!kEs0AAoGPpmbb>wQ15OV(!7l33M8;n>5M zyax{MmQQ}*-o|lU`QzXExh>zf`$B-e3;d7GLJ;ktA0L(v|NLIHi%C)co6kS0KF!DS zdoj<*o~inkaP+AP8o z=iql|1>EkZ$OP z8@ozAnXDzzu2hXvAWVJ@^$C3X*K;=5kbmRr@rlN{EYFEq3s0w}F;fB{4$5qC;pPyn zY)IaRQuR7WZu_-$%whmImjIW2&IO_y?7P3ER~_y{r_qULr0vu_vyHGQd@2?S`G%cKArF7mQ4%gTUD5Lgu;lGNQsu?b223kilHP+#Np%&i|Vq@izb< zl0mC^M0lr>K*F#+m-K6K<^pZbWYKhJcG{4%)6pUwHh9q>J{@0c#q5S!xh^S8@%j7d zb8_C6Kz~q>`#LpUa+V0&o*{IGkzy%^e#4L|c!JA|J}J@ba1E(pO3=kxTrQX#ay;Ay zhujP4IR%op`M~Q;hnUenpn{hDS{yEAdCa-zWg+W9s(Zi29Tn{>nOwEb9SmkehI zF`MT4js)J|QfU}~6A7+BG+)j`@9Pt1w^-2q70kwA^;V?cOT>T*Vo!12N3457Wtuum}ydjPC8 zY{X>|NoScWfxpMJ57%9IX^OTIm~97Nw;MKMl)6Sw5{Yz6tPq!%re9@~x}yZ@ktfDJ zB0A9Lo^3IK7J?AqP31yrx-ZK)1t z6er0Tc2aE#FLEBVBc}&_a-%K5Sr#2YyYV(`sIA@ z@nZP+FYlMjUyiFms`+9Zv|dkoMkB&cv-rYJ`N(JYHE+J^_mj`ezDcV~`X^K@lX+7)<822taF;7ec^QPeIR2XjAW!zv-A3uebEkUfAw00N;m1;+&t z6q`tbo&!rJ8YNK1^LcCzAJDlf;Wl;M&9l`S2PedJkW){9%}5Y_nFz2JQtWOy9_Jgv zRfA*Q*mgTCKheKep2LGCkZ^Df2}u>zEcF5%*fH2Oiw)lkm>ZnR0Yn5~L>-j?q@^8M zc{VXEosNK_+rZ>;?KJA0UJM8+j8!zNwg&@14(_TdnQSoNkaQYAH?BF6T!*v5A%g%$ z2yz)m@pIqIE<<{q|X_Y_KHUq zzzMXGSOa)il~4FawcWTERS$5E0?bi|bI{RzUF(m00B1{xIwp`#sv-i=92gryEYGYx zeANWU82eUT8xpOca=nYusk;z$b`l95SAd)nNT-8<5p2{fftLtq16E+XqORv4_?GVS zbxGLom8X-JWoe^=NN>_&Iiw#+X=e}#c^-*H3w9_{B+xx(!{cgzzx<}*-i>DFoO;C&X3A>}d zbLNEu%N|=qrdhcuc=jITL^v4elnfkTU*0&Y9?Xm9?W}?W9%Z}^+Ks#qjtLxlGPf%2 zIt2{%OT7@3ryj}DpXWi)iy<~Nq*X@@iAe_<=NbFV%P<@r{Q&gm!1->jI}Y#$Gb)yK zh!O-ZI_Zo6ADT~BQT23kux`8k+7F5w_kLFh5zYL;f$Va&$+^-pd@(SfE-WPsx~KiN z9$BfUQK#@D1W~2qlI&{icqZ08&VsS=L%ZwG$mb3q0WuTV;?CeqYC{dscdC+ZuRm<_Y-f#|366Z@HH zu`TMCd|w3-(MkM{Rumvh8!7!lHEgF2fWW-2IWLa-1)$#f4>OIFP}x*Iq{i6*=%efK z8uPlQU26YM|Kmi(9Bmtx7&zv~Qxj5T5@7tcQkMY$sV+o@Q&mdWP!9F$LR)fsoJcII z1(VQjhC^&@G%6P^u1gZRhe}9ZYS8)6)+~p4G1x8{xI#x-LzLp#9yUE|$`MI3v7Pcz zyi>4m;JqjgrpC!TdxbiWVru0FhTbPH%^d?BRSf#;L_2cAIpsh^Kb#UchO~uhCIRX@ za{{m}@p}#lWqknN+4oU*?PyC`M4c}#W>h<3l3CV$?q`Bo+QzMDNMp(YUq3j^he{C{^R`L^ky3^{6z-FMT)v1C2}hZ=uN{#_lR0L{uoE{4RTy#O!)8Ur{i6i|Br zSgjPYQb2`Z5=tAvG|2G`xMAVJa)Gvi&IboU6P!cIdUVH&(p62u0XSG9b|ihhHq>}L zfim$1jCfR;$2Fa%$X1q1Iv>_+KO*mUg`=_t;N2{w{79f4C`TKtK@j2q!1RY(2JlV0 zH~!^1P02q{iCPA19u=v5skST|fYVh!f}Nx^Dxy!)bg1di+{ds!vERtpp+C=@rgzvs zTn)%jp|^2eUhZaz2Pjzx(a{;$m-Z%T!}ia5&HKFwJ2wRPek#2pqk$-#QWZE0(6-U` z3BqrHtGdJKlf?pZBIqC*sdr*LWT5HnT;Ra2N zUeOvC-dxFpvg1@{MI!hui2>-(IKj=X*E1f)btgb5${3Q9PGvCT4fkOPokbJ^`v%xo zL-ghc+J7r%{GSYP^Dy5+rn56IKA-$y@?0T}C1 zT-%9+mNTKkX-p<@0c>YfGNaO6=;sOa@mLokoI5)M_}wl^Y9p@Nq;VQ;#fWtNE;I`x zX9@mN*A&*>Toyd~uprkJ5Q%-RMqUnDRzFysv9tg1Nn1hT!Q`y*Qe0Ny=<@o)&`|{r zMYMdVLxJL4(S`k@2LP=b;CKWxJ?S8cA-@SJLwsJB3?N@g7PN_3%oL!g`i=_E83Rm+ z$>05E@xggzIJ?-mn837*euPHitRaH%c3hZtGTud+%h<`^Sx@(Ojp4PVD$maUP_-o| ze!teCcbmPSsB=j9VivX~7i<&=Lhon?>`T{?YoMbeAiYQ=%eIt`fm)6Y0Yd$|@!QCV zbOP$lLa?1SHk!wlwuDRbe45tJnP2K4miy*%n#;AmTN&Bd)~_7 z>ezes4ZY=atP?a1R1k&yjzOGbI^MLZ zF2Lw?g6d%%mtX`9W_T-LaCMb~H1OmCR7ajNpzZ)MF$P#g*_i!$!$Sdr`dI`d`oIfL zG498FFPS94A+=i$M-FN$x4~ahth6BU)HJ4p8~o$EZ4Q+fbxp8{0F)sK80YR_mt0DN z>l7QcWP3Q(0iITbnHf>S#_?Q|cb>=U<2t4HD4ZaqcuA+K;0}dO5lLqUux2C@T&QHk zTXf2yV28OVBt;F%`&#1Y80#%tUHt(Q_dyAeH<-OI0LM(*x$b z7|0(EbxIbI+9@OqOjHZ%p0z)?cNm*dwk`l@j7+CaNCC6U(S}H9L>+_fgcK;o@y3$i zKv%5=4uXQ>UJmG>yZOG}?ezyb`em@vD&I{^DX^RMo8Tkul_$54Nf=3(17N;}=@{g( zriv2@n+y#iA?@rc+Ae1r@Eommn3Km6OlKtTmVj|wqnOUi;D{Ssu83UDqP>D9f>Cl; zlZzWjeCw%50DQc5(9tvt>mccSI>6Q2;)Ro=X?D8VNklOHF7VeL@^{D!;FC|oY4Q`@ z`x-?Wb(T-WD-GCNVWlu%L1-t1oyEJ)_X&^-`K~<=?zCxl1R+k zTLgzRBG+%WxB;j?-o0Bc72|R)k69m@$xzSf9I#2;JiP-qm$a1?kUXA5)INj`gaG>5 zj4v%Of##vWX(;+*s3=uLR~iaXk(Et7ZV9vy;b0w(HAJT`g5D$Q2JM0N`>!t0^rr|w z{q^-lI7vZ6g!*ap!^U9*@_1c3Q)qin9yenG)Tw_uiwt41)c1IY5H;?UuP&fSKK%^(zSUX^NpRsX!uAjxbh#XJCTMkl#~Js;^UU^Eh2jslLyNKi zaJ>k9M$0XzSDW`_9Cy1cNlP)@)+hHC@0OGCGjOt1P{-Zc6B&)C>0!8;5$cShEg=e; zK;F_~N=Emz$>>;AR_4>#hlI~irlJIaqhvcUod6%BbUo+?482pqMNs*WUW?l*=y$7d zhThwA1bsJO0&ZVjH>vT4zfzCUU_>54qWEu4eg{-UB{(-RbBHC-7)^FE0C9reYj{~A z;7+i1WjPCg-6?k+>QzpQb8v*PT{9}3wjjW}ohTq40KHMJx-9-wI3onOMa;TbP7%=

0A^1v3W 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

$+ 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 Uhl>xdZvuZBr?gI{pD@4kUv?)&{Qv*} literal 0 HcmV?d00001 diff --git a/frontend/public/app-resources/img/farmbot-mobile.png b/frontend/public/app-resources/img/farmbot-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..19fa3ee76ecd9672a40e0a100b2145bce256b436 GIT binary patch literal 42523 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�%+xaX$52(+&t5H!% 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


lTJoboV`QPn&8#v3Vm*jz?BcqNv; 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 literal 0 HcmV?d00001 diff --git a/frontend/public/app-resources/img/farmbot-tablet.png b/frontend/public/app-resources/img/farmbot-tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..07db1a52eb075c8bde248ef23151e6628ea48a1f GIT binary patch literal 94403 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

Fzt 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 O-w7QfZSpbu8~+DwFo;zE literal 0 HcmV?d00001 diff --git a/frontend/public/app-resources/img/generic-plant.svg b/frontend/public/app-resources/img/generic-plant.svg new file mode 100644 index 000000000..09b8da30b --- /dev/null +++ b/frontend/public/app-resources/img/generic-plant.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/public/app-resources/img/unknown.png b/frontend/public/app-resources/img/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..ac98b3685888bbc9d4a145c229608b69d6505414 GIT binary patch literal 7436 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 literal 0 HcmV?d00001 diff --git a/frontend/public/app-resources/languages/_helper.js b/frontend/public/app-resources/languages/_helper.js new file mode 100644 index 000000000..9d5e3c660 --- /dev/null +++ b/frontend/public/app-resources/languages/_helper.js @@ -0,0 +1,170 @@ +// var HelperNamespace = (function () { +// /** +// * @desc Build a list of all the files that are children of the root isDirectory +// * @param {string} dir The rot isDirectory +// * @param {list} filelist The list of the directories/files already detected +// * @param {string} ext The extension to filter for the files +// */ +// function walkSync(dir, filelist, ext) { +// var path = path || require('path'); +// var fs = fs || require('fs'), +// files = fs.readdirSync(dir); +// filelist = filelist || []; +// files.forEach(function (file) { +// if (fs.statSync(path.join(dir, file)).isDirectory()) { +// filelist = walkSync(path.join(dir, file), filelist, ext); +// } +// else { +// if (file.indexOf(ext) > 0) +// filelist.push(path.join(dir, file)); +// } +// }); +// return filelist; +// }; + +// /** +// * @desc search in the file in parameter to detect the tags +// */ +// function searchInFile(path) { +// /* some tags could be missed in this regex +// We detect all the tags in the code +// regex is matching '.t("")' or '{t("")}' or ' t("")' or '(t("")' */ +// var REGEX = /[\.|\{|(|\s]t\(\"([\w|\s|\{|\}|\(|\)]*)[\"|,].*\)/g; + +// var fs = fs || require('fs') +// // load the file +// var fileContent = fs.readFileSync(path, 'utf8'); +// let strArray = []; +// //match all the groups +// var match = REGEX.exec(fileContent); +// while (match != null) { +// strArray.push(match[1]) +// match = REGEX.exec(fileContent); +// } +// return strArray; +// } + +// /** +// * Get all the tags in the files with extension .ts of the current project +// */ +// function getAllTags() { +// const srcPath = __dirname + '/../../..'; + +// var listFilteredFiles = walkSync(srcPath, [], '.ts'); +// var allTags = listFilteredFiles.map(x => searchInFile(x)); +// //flatten list of list in a simple list +// var flattenedTags = [].concat.apply([], allTags); + +// //distinct +// var uniq = [...new Set(flattenedTags)]; + +// var sorted = uniq.sort(function (a, b) { return a.localeCompare(b); }); + +// return sorted; +// } + +// /** +// * For debugging +// */ +// function logAllTags() { +// console.dir(getAllTags()); +// } + +// /** +// * Create the translation file or update it with new tags +// * The tags are in the following order: +// * 1. New tags in English that need to be translated (ASC) +// * 2. Tags already translated, and kept because it match an existing tag in src (ASC) +// * 3. Tags already in the file before but not found at the moment in the src (ASC) +// * @param {string} lang The short name of the language. for the language in parameter +// */ +// function createOrUpdateTranslationFile(lang) { +// lang = lang || 'en'; + +// //check current file entry +// const langFilePath = __dirname + '/' + lang + '.js'; +// var fs = fs || require('fs') + +// try { +// var columnsResult = HelperNamespace.getAllTags(); + +// var jsonCurrentTagData = {}; +// columnsResult.forEach(function (column) { +// jsonCurrentTagData[column] = column; +// }); + +// var ordered = {}; +// var fileContent; +// try { +// //check the file can be openned +// var stats = fs.statSync(langFilePath); + +// // load the file +// var fileContent = fs.readFileSync(langFilePath, 'utf8'); +// console.log("Current file content: "); +// console.log(fileContent); +// } +// catch (e) { // do this +// console.log("we will create the file: " + langFilePath); +// //If there is no current file, we will create it +// }; + +// try { +// if (fileContent != undefined) { +// var jsonContent = fileContent +// .replace("module.exports = ", "") +// //regex to delete all comments // and :* in the JSON file +// .replace(/(\/\*(\n|\r|.)*\*\/)|(\/\/.*(\n|\r))/g, ""); + +// var jsonParsed = JSON.parse(jsonContent); + +// Object.keys(jsonParsed).sort().forEach(function (key) { +// ordered[key] = jsonParsed[key]; +// }); +// } +// } catch (e) { +// console.log("file: " + langFilePath + " contains an error: " + e); +// //If there is an error with the current file content, abort +// return; +// } + +// // merge new tags with existing translation +// var result = {}; +// var unexistingTag = {}; +// // all current tags in English +// for (var key in jsonCurrentTagData) result[key] = jsonCurrentTagData[key]; +// for (var key in ordered) { +// // replace current tag with an existing translation +// if (result.hasOwnProperty(key)) { +// delete result[key]; +// result[key] = ordered[key]; +// } +// // if the tag doesnt exist but a translation exists, +// // put the key/value at the end of the json +// else { +// unexistingTag[key] = ordered[key]; +// } +// } +// for (var key in unexistingTag) result[key] = unexistingTag[key]; + +// var stringJson = JSON.stringify(result, null, " "); +// var newFileContent = "module.exports = " + stringJson; + +// fs.writeFileSync(langFilePath, newFileContent); +// } catch (e) { +// console.log("file: " + langFilePath + ". error append: " + e); +// } +// } + +// //public functions +// return { +// logAllTags: logAllTags, +// getAllTags: getAllTags, +// createOrUpdateTranslationFile: createOrUpdateTranslationFile +// }; +// })(); + +// // Need to run this cmd in this folder: node _helper.js +// var language = process.argv[2]; +// HelperNamespace.createOrUpdateTranslationFile(language) + diff --git a/frontend/public/app-resources/languages/cs.js b/frontend/public/app-resources/languages/cs.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/cs.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/de.js b/frontend/public/app-resources/languages/de.js new file mode 100644 index 000000000..35485ea54 --- /dev/null +++ b/frontend/public/app-resources/languages/de.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "BESCHLEUNIGEN FÜR (Schritte)", + "Account Settings": "Konto-Einstellungen", + "Add": "Hinzufügen", + "Add Farm Event": "Farm Event hinzufügen", + "Age": "Alter", + "Agree to Terms of Service": "Den Nutzungsbedingungen zustimmen", + "ALLOW NEGATIVES": "NEGATIVE WERTE ZULASSEN", + "BACK": "ZURÜCK", + "Bot ready": "Bot bereit", + "CALIBRATE {{axis}}": "{{axis}} KALIBRIEREN", + "CALIBRATION": "KALIBRIERUNG", + "calling FarmBot with credentials": "verbinde zu FarmBot mit Zugangsdaten", + "Camera": "Kamera", + "Choose a species": "Wähle eine Art", + "Confirm Password": "Passwort bestätigen", + "CONTROLLER": "CONTROLLER", + "Copy": "Kopieren", + "Could not download sync data": "Konnte Sync-Daten nicht herunterladen", + "Create Account": "Konto anlegen", + "Create An Account": "Ein Konto anlegen", + "Crop Info": "Pflanzen-Info", + "Data Label": "Daten Label", + "Day {{day}}": "Tag {{day}}", + "days old": "Tage alt", + "Delete": "Löschen", + "DELETE ACCOUNT": "KONTO LÖSCHEN", + "Delete this plant": "Diese Pflanze löschen", + "Designer": "Designer", + "DEVICE": "GERÄT", + "downloading device credentials": "Geräte-Zugangsdaten herunterladen", + "Drag and drop into map": "Auf Karte ziehen und fallen lassen", + "DRAG STEP HERE": "Schritt hier fallen lassen", + "Edit": "Bearbeiten", + "EDIT": "BEARBEITEN", + "Edit Farm Event": "Farm-Event bearbeiten", + "Email": "Email", + "ENABLE ENCODERS": "ENCODER AKTIVIEREN", + "Enter Email": "Email eingeben", + "Enter Password": "Passwort eingeben", + "Error establishing socket connection": "Fehler beim Einrichten der Socket-Verbindung", + "Execute Script": "Skript ausführen", + "EXECUTE SCRIPT": "SKRIPT AUSFÜHREN", + "Execute Sequence": "Sequenz ausführen", + "EXECUTE SEQUENCE": "SEQUENZ AUSFÜHREN", + "Factory Reset": "Fabrik-Einstellungen wiederherstellen", + "Farm Events": "Farm-Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Passwort vergessen", + "GO": "Los", + "I Agree to the Terms of Service": "Ich stimme den Nutzungsbedingungen zu", + "I agree to the terms of use": "Ich stimme den Nutzungsbedingungen zu", + "If Statement": "Wenn-Schleife", + "IF STATEMENT": "WENN-SCHLEIFE", + "Import coordinates from": "Koordination importieren von", + "initiating connection": "Verbindung initialisieren", + "INVERT ENDPOINTS": "ENDPUNKTE INVERTIEREN", + "INVERT MOTORS": "MOTOREN INVERTIEREN", + "LENGTH (m)": "LÄNGE (m)", + "Location": "Ort", + "Login": "Login", + "Logout": "Logout", + "Message": "Nachricht", + "Move Absolute": "absolut bewegen", + "MOVE ABSOLUTE": "ABSOLUT BEWEGEN", + "MOVE AMOUNT (mm)": "BETRAG BEWEGEN (mm)", + "Move Relative": "relativ bewegen", + "MOVE RELATIVE": "RELATIV BEWEGEN", + "NAME": "NAME", + "NETWORK": "NETZWERK", + "never connected to device": "noch nie mit Gerät verbunden", + "New Password": "Neues Passwort", + "no": "nein", + "Not Connected to bot": "Nicht mit Bot verbunden", + "Old Password": "Altes Passwort", + "Operator": "Betreiber", + "Package Name": "Packet-Name", + "Parameters": "Parameter", + "Password": "Passwort", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin-Modus", + "Pin Number": "Pin-Nummer", + "Plant Info": "Pflanzen-Info", + "Plants": "Pflanzen", + "Problem Loading Terms of Service": "Probleme beim Laden der Nutzungsbedingnungen", + "Read Pin": "Pin lesen", + "READ PIN": "PIN LESEN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimen", + "Repeats Every": "Wiederholt alle", + "Request sent": "Anfrage gesendet", + "Reset": "Zurücksetzen", + "RESET": "ZURÜCKSETZEN", + "Reset Password": "Passwort zurücksetzen", + "Reset your password": "Setze dein Passwort zurück", + "RESTART": "NEUSTART", + "RESTART FARMBOT": "FARMBOT NEUSTARTEN", + "Save": "Seichern", + "SAVE": "SPEICHERN", + "Send Message": "Nachricht senden", + "SEND MESSAGE": "NACHRICHT SENDEN", + "Send Password reset": "Passwort-Zurücksetzen gesendet", + "Sequence": "Sequenz", + "Sequence Editor": "Sequenzen-Editor", + "Sequence or Regimen": "Sequenz oder Regimen", + "Sequences": "Sequenzen", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "Ausschalten", + "SHUTDOWN FARMBOT": "FARMBOT AUSSCHALTEN", + "SLOT": "SLOT", + "Socket Connection Established": "Socket-Verbindung hergestellt", + "Speed": "Geschwindigkeit", + "Started": "Gestartet", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Schritte per MM", + "Sync Required": "Sync benötigt", + "Take a Photo": "Mache ein Foto", + "Take Photo": "Mache Foto", + "TAKE PHOTO": "MACHE FOTO", + "TEST": "TEST", + "Time": "Zeit", + "Time in milliseconds": "Zeit in Millisekunden", + "TIMEOUT AFTER (seconds)": "TIMEOUT NACH (Sekunden)", + "TOOL": "GERÄT", + "TOOL NAME": "GERÄTE-NAMEN", + "TOOLBAY NAME": "GERÄTEHALTER-NAMEN", + "Tried to delete Farm Event": "Versucht Farm-Event zu löschen", + "Tried to delete plant": "Versucht Pflanze zu löschen", + "Tried to save Farm Event": "Versucht Farm-Event zu speichern", + "Tried to save plant": "Versucht Pflanze zu speichern", + "Tried to update Farm Event": "Versucht Farm-Event zu aktualisieren", + "Unable to delete sequence": "Sequenz konnte nicht gelöscht werden", + "Unable to download device credentials": "Geräte-Zugangsdaten konnten nicht heruntergeladen werden", + "Until": "Bis", + "UP TO DATE": "Aktuell", + "UPDATE": "UPDATE", + "Value": "Wert", + "Variable": "Variable", + "Verify Password": "Passwort bestätigen", + "Version": "Version", + "Wait": "Warte", + "WAIT": "WARTE", + "Weed Detector": "Beikraut-Detektor", + "Week": "Wocke", + "Write Pin": "Schreibe Pin", + "WRITE PIN": "SCHREIBE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X-ACHSE", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y-ACHSE", + "yes": "ya", + "Your Name": "Dein Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z-ACHSE" +} diff --git a/frontend/public/app-resources/languages/en.js b/frontend/public/app-resources/languages/en.js new file mode 100644 index 000000000..b5325febf --- /dev/null +++ b/frontend/public/app-resources/languages/en.js @@ -0,0 +1,3 @@ +module.exports = { + // Nothing to do here... +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/es.js b/frontend/public/app-resources/languages/es.js new file mode 100644 index 000000000..9f05feb30 --- /dev/null +++ b/frontend/public/app-resources/languages/es.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACELERAR PARA (pasos)", + "Account Settings": "Ajustes de cuenta", + "Add": "Añadir", + "Add Farm Event": "Añadir Farm Event", + "Age": "Edad", + "Agree to Terms of Service": "Aceptar los Términos del Servicio", + "ALLOW NEGATIVES": "PERMITIR NEGATIVOS", + "BACK": "ATRÁS", + "Bot ready": "Bot listo", + "CALIBRATE {{axis}}": "CALIBRAR {{axis}}", + "CALIBRATION": "CALIBRACIÓN", + "calling FarmBot with credentials": "llamando a FarmBot con credenciales", + "Camera": "Camera", + "Choose a species": "Elige una especie", + "Confirm Password": "Confirmar Contraseña", + "CONTROLLER": "CONTROLADOR", + "Copy": "Copiar", + "Could not download sync data": "No se pudieron descargar los datos de sincronización", + "Create Account": "Crear Cuenta", + "Create An Account": "Crear Una Cuenta", + "Crop Info": "Información del Cultivo", + "Data Label": "Etiqueta de Datos", + "days old": "days old", + "Delete": "Eliminar", + "DELETE ACCOUNT": "ELIMINAR CUENTA", + "Delete this plant": "Eliminar esta planta", + "Designer": "Diseñador", + "DEVICE": "DISPOSITIVO", + "downloading device credentials": "descargando credenciales del dispositivo", + "Drag and drop into map": "Arrastra y suelta dentro del mapa", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Editar", + "EDIT": "EDITAR", + "Edit Farm Event": "Editar Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ACTIVAR CODIFICADORES", + "Enter Email": "Introducir Email", + "Error establishing socket connection": "Error estableciendo la conexión con el socket", + "Execute Script": "Ejecutar Script", + "EXECUTE SCRIPT": "EJECUTAR SCRIPT", + "Execute Sequence": "Ejecutar Secuencia", + "EXECUTE SEQUENCE": "EJECUTAR SECUECNIA", + "Factory Reset": "Restauración de fábrica", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Olvidar contraseña", + "GO": "IR", + "I Agree to the Terms of Service": "Estoy de acuerdo con los Términos del Servicio", + "I agree to the terms of use": "Estoy de acuerdo con los términos de uso", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Importar coordenadas desde", + "initiating connection": "iniciando conexión", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVENTIR MOTORES", + "LENGTH (m)": "LONGITUD (m)", + "Location": "Localización", + "Login": "Login", + "Logout": "Logout", + "Message": "Mensage", + "Move Absolute": "Mover Absoluto", + "MOVE ABSOLUTE": "MOVER ABSOLUTO", + "MOVE AMOUNT (mm)": "MOVER CANTIDAD (mm)", + "Move Relative": "Mover Relativo", + "MOVE RELATIVE": "MOVER RELATIVO", + "NAME": "NOMBRE", + "NETWORK": "RED", + "never connected to device": "nunca se conectó al dispositivo", + "New Password": "Nueva Contraseña", + "no": "no", + "Not Connected to bot": "No Conectado al bot", + "Old Password": "Última Contraseña", + "Operator": "Operador", + "Package Name": "Nombre del Paquete", + "Parameters": "Parámetros", + "Password": "Contraseña", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Modo Pin", + "Pin Number": "Número Pin", + "Plant Info": "Información de la Planta", + "Plants": "Plantas", + "Problem Loading Terms of Service": "Problemas Cargando los Términos del Servicio", + "Read Pin": "Leer Pin", + "READ PIN": "LEER PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repetir Cada", + "Request sent": "Enviar petición", + "Reset": "Reiniciar", + "RESET": "REINICIAR", + "Reset Password": "Reiniciar Password", + "Reset your password": "Reinicia tu contraseña", + "RESTART": "VOLVER A INICIAR", + "RESTART FARMBOT": "VOLVER A INICIAR FARMBOT", + "Save": "Guarda", + "SAVE": "GUARDAR", + "Send Message": "Enviar Mensaje", + "SEND MESSAGE": "ENVIAR MENSAJE", + "Send Password reset": "Enviar reinicio de Contraseña", + "Sequence": "Secuencia", + "Sequence Editor": "Editor de Secuencia", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Secuencias", + "Server Port": "Puerto del Servidor", + "Server URL": "URL del Servidor", + "SHUTDOWN": "APAGAR", + "SHUTDOWN FARMBOT": "APAGAR FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Conexión con el Socket Establecida", + "Speed": "Velocidad", + "Started": "Iniciado", + "Starts": "Inicios", + "STATUS": "ESTADO", + "Steps per MM": "Passos para MM", + "Sync Required": "Sincronización Requerida", + "Take a Photo": "Tomar una Foto", + "Take Photo": "Tomar Foto", + "TAKE PHOTO": "TOMAR FOTO", + "TEST": "PRUEBA", + "Time": "Tiempo", + "Time in milliseconds": "Tiempo en milisegundos", + "TIMEOUT AFTER (seconds)": "TIMEOUT DESPUES DE (segundos)", + "TOOL": "HERRAMIENTAS", + "TOOL NAME": "NOMBRE DE LA HERRAMIENTA", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Se intentó eliminar el Farm Event", + "Tried to delete plant": "Se intentó eliminar la planta", + "Tried to save Farm Event": "Se intentó guardar el Farm Event", + "Tried to save plant": "Se intentó guardar la planta", + "Tried to update Farm Event": "Se intentó actualizar Farm Event", + "Unable to delete sequence": "No se pudo eliminar la secuencia", + "Unable to download device credentials": "No se pudieron descargar las credenciales del dispositivo", + "Until": "HASTA", + "UP TO DATE": "ACTUALIZADO", + "UPDATE": "ACTUALIZAR", + "Value": "Valor", + "Variable": "Variable", + "Verify Password": "Verificar Contraseña", + "Version": "Version", + "Wait": "Esperar", + "WAIT": "ESPERAR", + "Weed Detector": "Detector de Hierba", + "Week": "Semana", + "Write Pin": "Escribir Pin", + "WRITE PIN": "ESCRIBIR PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "EJE X", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "EJE Y", + "yes": "yes", + "Your Name": "Tu nombre", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "EJE Z", + "Day {{day}}": "Día {{day}}", + "Enter Password": "Introducir Contraseña" +} diff --git a/frontend/public/app-resources/languages/fi.js b/frontend/public/app-resources/languages/fi.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/fi.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/fr.js b/frontend/public/app-resources/languages/fr.js new file mode 100644 index 000000000..4af4c1588 --- /dev/null +++ b/frontend/public/app-resources/languages/fr.js @@ -0,0 +1,199 @@ +module.exports = { + "Add Farm Event": "Ajouter un évènement sur la ferme", + "Age": "Age", + "Agree to Terms of Service": "Accepter les condition d'utilisation", + "CALIBRATE {{axis}}": "CALIBRER {{axis}}", + "Choose a species": "Choisir une espèce", + "Confirm Password": "Confirmer le mot de passe", + "Crop Info": "Information sur la culture", + "days old": "jours", + "Delete this plant": "Supprimer cette plante", + "Drag and drop into map": "Glisser/déposer sur la carte", + "Edit Farm Event": "Editer l'évenement sur la ferme", + "Enter Email": "Entrez votre e-mail", + "Execute Script": "Exectuter le script", + "EXECUTE SCRIPT": "EXECUTER LE SCRIPT", + "Execute Sequence": "Executer la séquence", + "EXECUTE SEQUENCE": "EXECUTER LA SEQUENCE", + "Factory Reset": "Retour aux paramètres d'usine", + "Farm Events": "Evènements sur la ferme", + "Forgot Password": "Mot de passe oublié", + "GO": "GO", + "I Agree to the Terms of Service": "J'accepte les Conditions du Service", + "I agree to the terms of use": "J'accepte les Conditions d'utilisation", + "If Statement": "Condition Si", + "Import coordinates from": "Importer les coordonées depuis", + "Location": "Location", + "Move Absolute": "Deplacer en valeur Absolue", + "Move Relative": "Deplacer en valeur Relative", + "NAME": "NOM", + "Operator": "Operateur", + "Package Name": "Nom du paquet", + "Plant Info": "Information sur la plante", + "Problem Loading Terms of Service": "Problème avec le chargement des Conditions du Service", + "Read Pin": "Lire le code PIN", + "Regimens": "Régime", + "Reset": "Réinitialiser", + "RESET": "REINITIALISER", + "Reset Password": "Réinitiliser le mot de passe", + "Reset your password": "Réinitiliser votre mot de passe", + "Send Message": "Envoyer un message", + "Send Password reset": "Envoyer la réinitialisation du mot de passe", + "SLOT": "FENTE", + "Started": "Démarré", + "STATUS": "STATUT", + "Steps per MM": "Pas par MM", + "Take a Photo": "Prendre une Photo", + "Take Photo": "Prendre une Photo", + "TAKE PHOTO": "PRENDRE UNE PHOTO", + "TEST": "TEST", + "TOOL": "OUTIL", + "TOOL NAME": "NOM DE L'OUTIL", + "TOOLBAY NAME": "NOM GROUPE OUTIL", + "Tried to delete Farm Event": "A tenté de supprimer l'évènement sur la ferme", + "Tried to save Farm Event": "A tenté de sauvegarder l'évènement sur la ferme", + "Tried to update Farm Event": "A tenté de mettre à jour l'évènement sur la ferme", + "UP TO DATE": "A JOUR", + "UPDATE": "MISE A JOUR", + "Variable": "Variable", + "Wait": "Attendre", + "Weed Detector": "Detecteur de mauvaise herbe", + "Write Pin": "Ecrire le code PIN", + "X": "X", + "Y": "Y", + "Z": "Z", + "ACCELERATE FOR (steps)": "Accélérer pour (étape)", + "ALLOW NEGATIVES": "AUTORISER NEGATIFS", + "Account Settings": "Options du compte", + "Add": "Ajouter", + "BACK": "Retour", + "Bot ready": "Robot près", + "CALIBRATION": "CALIBRAGE", + "CONTROLLER": "CONTROLLER", + "Camera": "Caméra", + "Copy": "Copier", + "Could not download sync data": "Echec de la synchronisation des données", + "Create Account": "Créer compte", + "Create An Account": "Créer un compte", + "DELETE ACCOUNT": "SUPPRIMER LE COMPTE", + "DEVICE": "APPAREIL", + "DRAG STEP HERE": "DEPLACER L'ETAPE ICI", + "Data Label": "Nom des données", + "Day {{day}}": "Jour {{day}}", + "Delete": "Supprimer", + "Designer": "Designer", + "EDIT": "MODIFIER", + "ENABLE ENCODERS": "Activer l'encodeur", + "Edit": "Modifier", + "Email": "Email", + "Enter Password": "Entrer le mot de passe", + "Error establishing socket connection": "Erreur durant l'établissement de la connexion", + "FIRMWARE": "LOGICIEL", + "IF STATEMENT": "SI DECLARATION", + "INVERT ENDPOINTS": "INVERSER LES EMBOUTS", + "INVERT MOTORS": "INVERSER LES MOTEURS", + "LENGTH (m)": "LONGUEUR (m)", + "Login": "Identifiant", + "Logout": "Déconnexion", + "MOVE ABSOLUTE": "DEPLACEMENT ABSOLUS", + "MOVE AMOUNT (mm)": "LONGUEUR DU DEPLACEMENT (mm)", + "MOVE RELATIVE": "DEPLACEMENT RELATIF", + "Message": "Message", + "NETWORK": "RESEAU", + "New Password": "Nouveau mot de passe", + "Not Connected to bot": "Pas connecté au robot", + "Old Password": "Ancien mot de passe", + "Parameters": "Paramètres", + "Password": "Mot de passe", + "Pin Mode": "Mode Pin", + "Pin Number": "Numéro de Pin", + "Pin {{num}}": "Pin {{num}}", + "Plants": "Plantes", + "READ PIN": "LIRE LE PIN", + "RESTART": "REDEMARRER", + "RESTART FARMBOT": "REDEMARRER FARMBOT", + "Regimen Name": "Nom du régime", + "Repeats Every": "Répéter", + "Request sent": "Demande envoyée", + "SAVE": "SAUVEGARDER", + "SEND MESSAGE": "ENVOYER UN MESSAGE", + "SHUTDOWN": "ETEINDRE", + "SHUTDOWN FARMBOT": "ETEINDRE FARMBOT", + "Save": "Sauvegarder", + "Sequence": "Séquence", + "Sequence Editor": "Editeur de Séquence", + "Sequence or Regimen": "Séquence ou Régime", + "Sequences": "Séquences", + "Server Port": "Port du serveur", + "Server URL": "URL du serveur", + "Socket Connection Established": "La connexion est établie", + "Speed": "Vitesse", + "Starts": "Démarrer", + "Sync Required": "Sync Neécessaire", + "TIMEOUT AFTER (seconds)": "TIMEOUT APRES (secondes)", + "Time": "Temps", + "Time in milliseconds": "Temps en millisecondes", + "Tried to delete plant": "Suppression de la plante en cours", + "Tried to save plant": "Sauvetage de la plante en cours", + "Unable to delete sequence": "Impossible de supprimer la séquence", + "Unable to download device credentials": "Impossible de télécharger les certificats", + "Until": "Jusqu'à", + "Value": "Valeur", + "Verify Password": "Vérifier le mot de paasse", + "Version": "Version", + "WAIT": "ATTENDEZ", + "WRITE PIN": "ECRIRE LE CODE PIN", + "Week": "Semaine", + "X (mm)": "X (mm)", + "X AXIS": "AXE X", + "Y (mm)": "Y (mm)", + "Y AXIS": "AXE Y", + "Your Name": "Votre Nom", + "Z (mm)": "Z (mm)", + "Z AXIS": "AXE Z", + "calling FarmBot with credentials": "contact de FarmBot avec vos certificats", + "downloading device credentials": "téléchargement des certificats de l'appareil", + "initiating connection": "lancement de la connexion", + "never connected to device": "jamais connecté à l'appareil", + "no": "non", + "yes": "oui", + "13 Plants": "13 Plantes", + "142 Plants": "142 Plantes", + "18 Plants": "18 Plantes", + "22 Plants": "22 Plantes", + "459 Plants": "459 Plantes", + "68 Plants": "68 Plantes", + "Add Group": "Ajouter un groupe", + "Add Zone": "Ajouter une zone", + "Add parent groups": "Ajouter des groupes parent", + "CALIBRATE {{target}}": "CALIBRER {{target}}", + "COORDINATES": "COORDONEES", + "Calendar": "Calendrier", + "Change Password": "Changer le mot de passe", + "Clear Logs": "Vider les Logs", + "Delete Account": "Supprimer le compte", + "EXECUTE": "EXECUTER", + "FARMBOT NAME": "NOM DU FARMBOT", + "Farmbot encountered an error": "Farmbot a rencontré une erreur", + "Groups": "Groupes", + "LHS": "LHS", + "Loading": "Chargement", + "Logs": "Logs", + "MESSAGE": "MESSAGE", + "My Groups": "Mes Groupes", + "Name": "Nom", + "OPERATOR": "OPERATEUR", + "OS Auto Updates": "Mise à jour automatique du SE", + "Plants in this group": "Plantes dans ce groupe", + "RHS": "RHS", + "Reset password": "Réinitialiser le mot de passe", + "STEPS PER MM": "ETAPE PAR MM", + "Select from map to add": "Choisir parmi la carte à ajouter", + "Size": "Taille", + "Start": "Démarrer", + "Stop": "Arrêt", + "Sub Sequence": "Sous Séquence", + "TIME": "TEMPS", + "Test": "Test", + "Zones": "Zones" +} diff --git a/frontend/public/app-resources/languages/hu.js b/frontend/public/app-resources/languages/hu.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/hu.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/it.js b/frontend/public/app-resources/languages/it.js new file mode 100644 index 000000000..47d62cfd6 --- /dev/null +++ b/frontend/public/app-resources/languages/it.js @@ -0,0 +1,199 @@ +module.exports = { + "Add Farm Event": "Aggiungi Evento agricolo", + "Age": "Età", + "Agree to Terms of Service": "Accetto i Termini di servizio", + "CALIBRATE {{axis}}": "CALIBRA {{axis}}", + "Choose a species": "Scegliere una specie", + "Confirm Password": "Confermare la password", + "Crop Info": "Info coltivazione", + "days old": "giorni", + "Delete this plant": "Eliminare la pianta", + "Drag and drop into map": "Clicca e trascina sulla mappa", + "Edit Farm Event": "Modifica Evento agricolo", + "Enter Email": "Inserisci indirizzo email", + "Execute Script": "Esegui script", + "EXECUTE SCRIPT": "ESEGUI SCRIPT", + "Execute Sequence": "Esegui sequenza", + "EXECUTE SEQUENCE": "ESEGUI SEQUENZA", + "Factory Reset": "Ripristino impostazioni di fabbrica", + "Farm Events": "Eventi agricoli", + "Forgot Password": "Password dimenticata", + "GO": "PROCEDI", + "I Agree to the Terms of Service": "Ho compreso ed accetto i Termini di servizio", + "I agree to the terms of use": "Ho compreso ed accetto le Condizioni d'uso", + "If Statement": "Comando if", + "Import coordinates from": "Importa coordinate da", + "Location": "Posizione", + "Move Absolute": "Fai Movimento assoluto", + "Move Relative": "Fai Movimento relativo", + "NAME": "NOME", + "Operator": "Operatore", + "Package Name": "Nome pacchetto", + "Plant Info": "Informazioni pianta", + "Problem Loading Terms of Service": "Si è verificato un problema durante il caricamente dei Termini di Servizio", + "Read Pin": "Leggi Pin", + "Regimens": "Regimi", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Recupero password", + "Reset your password": "Recupera la tua password", + "Send Message": "Inviare messaggio", + "Send Password reset": "Invia richiesta di Recupero password", + "SLOT": "SLOT", + "Started": "Avviato", + "STATUS": "STATUS", + "Steps per MM": "Passi per MM", + "Take a Photo": "Scatta una foto", + "Take Photo": "Scatta foto", + "TAKE PHOTO": "SCATTA FOTO", + "TEST": "TEST", + "TOOL": "STRUMENTO", + "TOOL NAME": "NOME STRUMENTO", + "TOOLBAY NAME": "NOME SCOMPARTO STRUMENTI", + "Tried to delete Farm Event": "Eseguito tentativo di eliminare Evento agricolo", + "Tried to save Farm Event": "Eseguito tentativo di salvare Evento agricolo", + "Tried to update Farm Event": "Eseguito tentativo di aggiornare Evento agricolo", + "UP TO DATE": "AGGIORNATO", + "UPDATE": "AGGIORNARE", + "Variable": "Variabile", + "Wait": "Attendere", + "Weed Detector": "Rilevatore infestanti", + "Write Pin": "Inserire Pin", + "X": "X", + "Y": "Y", + "Z": "Z", + "ACCELERATE FOR (steps)": "ACCELERA PER (steps)", + "ALLOW NEGATIVES": "PERMETTI VALORI NEGATIVI", + "Account Settings": "Impostazioni Account", + "Add": "Aggiungi", + "BACK": "INDIETRO", + "Bot ready": "Bot pronto", + "CALIBRATION": "CALIBRAZIONE", + "CONTROLLER": "CONTROLLER", + "Camera": "Fotocamera", + "Copy": "Copia", + "Could not download sync data": "Impossibile scaricare dati di sincronizzazione", + "Create Account": "Crea account", + "Create An Account": "Creare nuovo account", + "DELETE ACCOUNT": "ELIMINA ACCOUNT", + "DEVICE": "DISPOSITIVO", + "DRAG STEP HERE": "TRASCINARE QUI I COMANDI", + "Data Label": "Etichetta dati", + "Day {{day}}": "Giorno {{day}}", + "Delete": "Elimina", + "Designer": "Designer", + "EDIT": "MODIFICA", + "ENABLE ENCODERS": "ATTIVA ENCODER", + "Edit": "Modifica", + "Email": "Indirizzo email", + "Enter Password": "Inserisci password", + "Error establishing socket connection": "Errore durante la connessione dei socket", + "FIRMWARE": "FIRMWARE", + "IF STATEMENT": "COMANDO SE ", + "INVERT ENDPOINTS": "INVERTI FINECORSA", + "INVERT MOTORS": "INVERTI MOTORI", + "LENGTH (m)": "LUNGHEZZA (m)", + "Login": "Accedi", + "Logout": "Esci", + "MOVE ABSOLUTE": "FAI MOVIMENTO ASSOLUTO", + "MOVE AMOUNT (mm)": "QUANTITÁ MOVIMENTO (mm)", + "MOVE RELATIVE": "FAI MOVIMENTO RELATIVO", + "Message": "Messaggio", + "NETWORK": "RETE", + "New Password": "Nuova password", + "Not Connected to bot": "Non connesso al robot", + "Old Password": "Vecchia password", + "Parameters": "Parametri", + "Password": "Password", + "Pin Mode": "Modalità PIN", + "Pin Number": "Numero PIN", + "Pin {{num}}": "PIN {{num}}", + "Plants": "Piante", + "READ PIN": "LEGGI PIN", + "RESTART": "RIAVVIO", + "RESTART FARMBOT": "RIAVVIO FARMBOT", + "Regimen Name": "Nome regime", + "Repeats Every": "Ripeti ogni", + "Request sent": "Richiesta inviata", + "Save": "SALVA", + "SEND MESSAGE": "INVIA MESSAGGIO", + "SHUTDOWN": "ARRESTO", + "SHUTDOWN FARMBOT": "SPEGNI FARMBOT", + "Save": "Salva", + "Sequence": "Sequenza", + "Sequence Editor": "Editor di Sequenze", + "Sequence or Regimen": "Sequenza o Regime", + "Sequences": "Sequenze", + "Server Port": "Porta del server", + "Server URL": "URL del server", + "Socket Connection Established": "Connessione stabilita con socket", + "Speed": "Velocità", + "Starts": "Starts", + "Sync Required": "Sincronizzazione richiesta", + "TIMEOUT AFTER (seconds)": "TIMEOUT DOPO (secondi)", + "Time": "Durata", + "Time in milliseconds": "Durata in millisecondi", + "Tried to delete plant": "Eseguito Tentativo di eliminare pianta", + "Tried to save plant": "Eseguito tentativo di salvare pianta", + "Unable to delete sequence": "Impossibile eliminare la sequenza", + "Unable to download device credentials": "Impossibile scaricare credenziali del dispositivo", + "Until": "Fino al", + "Value": "Valore", + "Verify Password": "Confermare la password", + "Version": "Versione", + "WAIT": "ATTENDI", + "WRITE PIN": "SCRIVI PIN", + "Week": "Settimana", + "X (mm)": "X (mm)", + "X AXIS": "ASSE X", + "Y (mm)": "Y (mm)", + "Y AXIS": "ASSE Y", + "Your Name": "Il tuo nome", + "Z (mm)": "Z (mm)", + "Z AXIS": "ASSE Z", + "calling FarmBot with credentials": "autenticazione su FarmBot con credenziali", + "downloading device credentials": "scaricamento in corso credenziali del dispositivo", + "initiating connection": "inizializzazione connessione in corso", + "never connected to device": "mai connesso al dispositivo", + "no": "no", + "yes": "sì", + "13 Plants": "13 piante", + "142 Plants": "142 piante", + "18 Plants": "18 piante", + "22 Plants": "22 piante", + "459 Plants": "459 piante", + "68 Plants": "68 piante", + "Add Group": "Aggiungere gruppo", + "Add Zone": "Aggiungere zona", + "Add parent groups": "Aggiungere gruppi genitori", + "CALIBRATE {{target}}": "CALIBRARE {{target}}", + "COORDINATES": "COORDINATE", + "Calendar": "Calendario", + "Change Password": "Modificare password", + "Logs": "Leggere i log", + "Delete Account": "Cancellare account", + "EXECUTE": "ESEGUI", + "FARMBOT NAME": "NOME PROPRIO DEL FARMBOT", + "Farmbot encountered an error": "Si è verificato un errore su Farmbot", + "Groups": "Gruppi", + "LHS": "LHS", + "Loading": "Caricamento in corso", + "Logs": "Log", + "MESSAGE": "MESSAGGIO", + "My Groups": "Gruppi personalizzati", + "Name": "Nome", + "OPERATOR": "OPERATORE", + "OS Auto Updates": "Aggiornare automaticamente SO", + "Plants in this group": "Piante in questo gruppo", + "RHS": "RHS", + "Reset password": "Resettare la password", + "STEPS PER MM": "PASSI PER MM", + "Select from map to add": "Per aggiungere selezionare dalla mappa", + "Size": "Dimensione", + "Start": "Avviare", + "Stop": "Arrestare", + "Sub Sequence": "Sottosequenza", + "TIME": "DURATA", + "Test": "Test", + "Zones": "Zone" +} diff --git a/frontend/public/app-resources/languages/ja.js b/frontend/public/app-resources/languages/ja.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/ja.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/nl.js b/frontend/public/app-resources/languages/nl.js new file mode 100644 index 000000000..73f2c36c7 --- /dev/null +++ b/frontend/public/app-resources/languages/nl.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELEREER VOOR (stappen)", + "Account Settings": "Instellingen", + "Add": "Toevoegen", + "Add Farm Event": "Evenement Toevoegen", + "Age": "Leeftijd", + "Agree to Terms of Service": "Ga akkoord met de Algemene Voorwaarden", + "ALLOW NEGATIVES": "NEGATIEVEN TOESTAAN", + "BACK": "TERUG", + "Bot ready": "Bot gereed", + "CALIBRATE {{axis}}": "CALIBREER {{axis}}", + "CALIBRATION": "CALIBRATIE", + "calling FarmBot with credentials": "FarmBot aanroepen met credentials", + "Camera": "Camera", + "Choose a species": "Kies een soort", + "Confirm Password": "Bevestig Wachtwoord", + "CONTROLLER": "CONTROLLER", + "Copy": "Kopieer", + "Could not download sync data": "Kon sync data niet downloaden", + "Create Account": "Account Aanmaken", + "Create An Account": "Maak Een Account", + "Crop Info": "Gewas Info", + "Data Label": "Datalabel", + "Day {{day}}": "Dag {{day}}", + "days old": "dagen oud", + "Delete": "Verwijder", + "DELETE ACCOUNT": "VERWIJDER ACCOUNT", + "Delete this plant": "Verwijder deze plant", + "Designer": "Ontwerper", + "DEVICE": "APPARAAT", + "downloading device credentials": "apparaatcredentials aan het downloaden", + "Drag and drop into map": "Sleep en laat vallen in kaart", + "DRAG STEP HERE": "SLEEP STAP HIER", + "Edit": "Wijzig", + "EDIT": "WIJZIG", + "Edit Farm Event": "Wijzig Evenement", + "Email": "Email", + "ENABLE ENCODERS": "ENCODERS INSCHAKELEN", + "Enter Email": "Voer Email In", + "Enter Password": "Voer Wachtwoord In", + "Error establishing socket connection": "Fout bij opzetten van socket-verbinding", + "Execute Script": "Script Uitvoeren", + "EXECUTE SCRIPT": "SCRIPT UITVOEREN", + "Execute Sequence": "Actiereeks Uitvoeren", + "EXECUTE SEQUENCE": "ACTIEREEKS UITVOEREN", + "Factory Reset": "Fabrieksinstellingen", + "Farm Events": "Evenementen", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Wachtwoord Vergeten", + "GO": "GA", + "I Agree to the Terms of Service": "Ik ga Akkoord met de Algemene Voorwaarden", + "I agree to the terms of use": "Ik ga akkoord met de gebruiksvoorwaarden", + "If Statement": "Conditionele Keuze", + "IF STATEMENT": "CONDITIONELE KEUZE", + "Import coordinates from": "Importeer coördinaten van", + "initiating connection": "verbinding initialiseren", + "INVERT ENDPOINTS": "EINDPUNTEN OMKEREN", + "INVERT MOTORS": "MOTOREN OMKEREN", + "LENGTH (m)": "LENGTE (m)", + "Location": "Lokatie", + "Login": "Inloggen", + "Logout": "Uitloggen", + "Message": "Bericht", + "Move Absolute": "Absoluut Verplaatsen", + "MOVE ABSOLUTE": "ABSOLUUT VERPLAATSEN", + "MOVE AMOUNT (mm)": "VERPLAATSAFSTAND (mm)", + "Move Relative": "Relatief Verplaatsen", + "MOVE RELATIVE": "RELATIEF VERPLAATSEN", + "NAME": "NAAM", + "NETWORK": "NETWERK", + "never connected to device": "nooit verbonden met apparaat", + "New Password": "Nieuw Wachtwoord", + "no": "nee", + "Not Connected to bot": "Niet Verbonden met bot", + "Old Password": "Oud Wachtwoord", + "Operator": "Operator", + "Package Name": "Package Naam", + "Parameters": "Parameters", + "Password": "Wachtwoord", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Modus", + "Pin Number": "Pin Nummer", + "Plant Info": "Plant Info", + "Plants": "Planten", + "Problem Loading Terms of Service": "Probleem Bij Laden Van Algemene Voorwaarden", + "Read Pin": "Lees Pin", + "READ PIN": "LEES PIN", + "Regimen Name": "Naam Regime", + "Regimens": "Regimes", + "Repeats Every": "Herhaal Elke", + "Request sent": "Verzoek verstuurd", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Wachtwoord", + "Reset your password": "Reset je wachtwoord", + "RESTART": "HERSTARTEN", + "RESTART FARMBOT": "HERSTART FARMBOT", + "Save": "Opslaan", + "SAVE": "OPSLAAN", + "Send Message": "Stuur Bericht", + "SEND MESSAGE": "STUUR BERICHT", + "Send Password reset": "Stuur Wachtwoord-reset", + "Sequence": "Actiereeks", + "Sequence Editor": "Actiereeks Ontwerper", + "Sequence or Regimen": "Actiereeks of Regime", + "Sequences": "Actiereeksen", + "Server Port": "Serverpoort", + "Server URL": "Server URL", + "SHUTDOWN": "UITZETTEN", + "SHUTDOWN FARMBOT": "FARMBOT UITZETTEN", + "SLOT": "SLEUF", + "Socket Connection Established": "Socket-verbinding Opgezet", + "Speed": "Snelheid", + "Started": "Gestart", + "Starts": "Begint", + "STATUS": "STATUS", + "Steps per MM": "Stappen per MM", + "Sync Required": "Sync Vereist", + "Take a Photo": "Neem een Foto", + "Take Photo": "Neem Foto", + "TAKE PHOTO": "NEEM FOTO", + "TEST": "TEST", + "Time": "Tijd", + "Time in milliseconds": "Tijd in milliseconden", + "TIMEOUT AFTER (seconds)": "AFBREKEN NA (seconden)", + "TOOL": "KOPPELSTUK", + "TOOL NAME": "NAAM KOPPELSTUK", + "TOOLBAY NAME": "HOUDER NAAM", + "Tried to delete Farm Event": "Probeerde een Evenement te verwijderen", + "Tried to delete plant": "Probeerde een plant te verwijderen", + "Tried to save Farm Event": "Probeerde een Evenement op te slaan", + "Tried to save plant": "Probeerde een plant op te slaan", + "Tried to update Farm Event": "Probeerde een Evenement bij te werken", + "Unable to delete sequence": "Kan actiereeks niet verwijderen", + "Unable to download device credentials": "Kan apparaat-credentials niet downloaden", + "Until": "Tot", + "UP TO DATE": "BIJGEWERKT", + "UPDATE": "BIJWERKEN", + "Value": "Waarde", + "Variable": "Variabele", + "Verify Password": "Verifieer Wachtwoord", + "Version": "Versie", + "Wait": "Wacht", + "WAIT": "WACHT", + "Weed Detector": "Onkruid Detector", + "Week": "Week", + "Write Pin": "Schrijf Pin", + "WRITE PIN": "SCHRIJF PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AS", + "yes": "ja", + "Your Name": "Jouw Naam", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AS" +} diff --git a/frontend/public/app-resources/languages/pt.js b/frontend/public/app-resources/languages/pt.js new file mode 100644 index 000000000..0c34298b6 --- /dev/null +++ b/frontend/public/app-resources/languages/pt.js @@ -0,0 +1,210 @@ +module.exports = { + //WARNINGS & Capitalized text + "ACCELERATE FOR (steps)": "ACELERAR n (passos)", + "ALLOW NEGATIVES": "PERMITIR NEGATIVAS", + "BACK": "VOLTAR", + "CALIBRATE {{axis}}": "CALIBRAR {{axis}}", + "CALIBRATION": "CALIBRAÇÃO", + "CONTROLLER": "CONTROLADOR", + "DELETE ACCOUNT": "EXCLUIR A CONTA", + "DEVICE": "DISPOSITIVO", + "DRAG STEP HERE": "COLOQUE AS ETAPAS AQUI", + "EDIT": "EDITAR", + "ENABLE ENCODERS": "HABILITAR CODIFICADORES", + "EXECUTE SCRIPT": "EXECUTAR ROTINA", + "EXECUTE SEQUENCE": "EXECUTAR SEQUÊNCIA", + "FIRMWARE": "FIRMWARE", + "IF STATEMENT": "DECLARAÇÃO DO TIPO `SE` (PROGRAMAÇÃO)", + "INVERT ENDPOINTS": "INVERTER EXTREMIDADES", + "INVERT MOTORS": "INVERTER MOTORES", + "LENGTH (m)": "COMPRIMENTO (m)", + "MAX SPEED (mm/s)": "VELOCIDADE MÁXIMA (mm/s)", + "MOVE ABSOLUTE": "MOVER COM PRECISÃO", + "MOVE AMOUNT (mm)": "DISTÂNCIA DO MOVIMENTO (mm)", + "MOVE RELATIVE": "MOVER (MENOR PRECISÃO)", + "NAME": "NOME", + "NETWORK": "REDE", + "READ PIN": "EFETUAR LEITURA DO PIN", + "RESET": "RESETAR TUDO", + "RESTART FARMBOT": "REINICIAR O FARMBOT", + "RESTART": "REINICIAR", + "SAVE": "SALVAR", + "SEND MESSAGE": "ENVIAR MENSAGEM", + "SHUTDOWN FARMBOT": "DESLIGAR O FARMBOT", + "SHUTDOWN": "DESLIGAR", + "TEST": "TESTAR", + "TOOL NAME": "NOME DA FERRAMENTA", + "TIMEOUT AFTER (seconds)": "TEMPO LIMITE DE X (segundos)", + "UP TO DATE": "ATUALIZADO", + "UPDATE": "ATUALIZAR", + "WAIT": "AGUARDAR", + "WRITE PIN": "GRAVAR Nº PIN", + "X AXIS": "EIXO X", + "Y AXIS": "EIXO Y", + "Z AXIS": "EIXO Z", + + //ACCOUNT & LOGIN TEXTS + "Account Settings": "Configurações de Conta", + "Change Password": "Alterar Senha", + "Confirm Password": "Confirmar Senha", + "Create Account": "Criar conta", + "Create An Account": "Criar uma conta", + "Email": "E-mail", + "Enter Email": "Digite seu e-mail", + "Enter Password": "Digite sua Senha", + "Enter your password to delete your account.": "Digite sua senha pra excluir a conta.", + "Forgot Password": "Esqueci minha senha", + "Login": "Entrar", + "Logout": "Encerrar Sessão", + "New Password": "Nova Senha", + "Old Password": "Senha Anterior", + "Password": "Senha", + "Pin {{num}}": "PIN - Número de Identificação Pessoal {{num}}", + "Please enter a valid label and pin number.": "Por favor insira um marcador e um número PIN válidos.", + "Reset Password": "Redefinir Senha", + "Send Password reset": "Solicitar nova senha", + "Verfy Password": "Verifique sua senha", + "You have been logged out.": "Sessão encerrada.", + "Your Name": "Seu Nome", + + //UPDATE TEXT + "Auto Updates?": "Atualizações Automáticas?", + + //STATUS & ERROR TEXTS + "Add a div with id `root` to the page first.": "Primeiramente adicione um elemento div com a id `root` á página.", + "Bot ready": "Robô pronto", + "calling FarmBot with credentials": "conectando ao Fambot com as credenciais", + "Camera": "Câmera", + "Could not download firmware update information.": "Não foi possível transferir as informações de atualização do Firmware do dispositivo.", + "Could not download OS update information.": "Não foi possível transferir as informações de atualização do Sistema Operacional.", + "Could not download sync data": "Não foi possível transferir os dados de sincronização", + "Could not fetch bot status. Is FarmBot online?": "Não foi possível verificar o estado do farmbot. Verifique se o mesmo se encontra conectado", + "Couldn\'t save device.": "Não foi possível salvar dados sobre o o dispositivo", + "downloading device credentials": "transferindo credenciais do dispositivo", + "Error establishing socket connection": "Erro ao estabelecer conexão com os soquetes", + "Error while saving device.": "Erro ao salvar detalhes do dispositivo.", + "Factory Reset": "Redefinir Todas as Configurações para o padrão de Fábrica", + "Farmbot Didn't Get That!": "Comando inválido!", + "FarmBot sent a malformed message. ": "O FarmBot está enviando mensagens truncadas. ", + "initiating connection": "iniciando conexão", + "never connected to device": "nunca conectado ao dispositivo", + "No logs yet.": "Sem registros para exibir.", + "Not Connected to bot": "Não está conectado ao FarmBot", + "Please upgrade FarmBot OS and log back in.": "Por favor faça um upgrade do Sistema Operacional e tente novamente.", + "Socket Connection Established": "Conexão com os soquetes estabelecida", + "ToolBay saved.": "Compartimento de Ferramentas salvo comm sucesso.", + "Tools saved.": "Ferramentas salvas com sucesso.", + "Tried to delete plant, but couldn't.": "Não foi possível excluir esta planta.", + "Tried to move plant, but couldn't.": "Não foi possível mover esta planta.", + "Tried to save plant, but couldn't.": "Não foi possível salvar os dados desta planta.", + "Unable to download device credentials": "Não foi possível transferir as credenciais do dispositivo", + "User successfully updated.": "Usuário atualizado.", + "You may need to upgrade FarmBot OS. ": "Talvez você tenha efetuar um upgrade do Sistema Operacional do Farmbot. ", + + //OTHERS/GENERAL WORDS + "Add": "Adicionar", + "Copy": "Copiar", + "Day {{day}}": "Dia {{day}}", + "Data Label": "Etiqueta de Dados", + "Delete": "Excluir", + "Edit": "Editar", + "Execute Script": "Executar Rotina", + "Execute Sequence": "Executar Sequência", + "If Statement": "Declaração do Tipo `Se` (Programação)", + "Message": "Mensagem", + "Move Absolute": "Mover com Precisão", + "Move Relative": "Mover (Sem precisão)", + "no": "não", + "Operator": "Operador", + "Package Name": "Nome do Pacote", + "Parameters": "Parâmetros", + "Pin Mode": "Modo PIN", + "Pin Number": "Número PIN", + "Read Pin": "Efetuar a leitura do PIN", + "Repeats Every": "Repete a cada", + "Reset": "Redefinir", + "Save": "Salvar", + "Save & Run": "Salvar & Executar", + "Send Message": "Enviar Mensagem", + "Sequence": "Sequência", + "Sequence Editor": "Editor de Sequências", + "Sequences": "Sequências", + "Server Port": "Porta do Servidor", + "Server URL": "URL do Servidor", + "Speed": "Velocidade", + "Starts": "Inicia em", + "Steps per MM": "Passos por unidade MM", + "Time": "Tempo", + "Time in milliseconds": "Tempo em milisegundos", + "Until": "Até", + "Variable": "Variável", + "Value": "Valor", + "Version": "Versão", + "Wait": "Aguardar", + "Weed Detector": "Detector de Ervas Daninhas", + "Week": "Semana", + "We're sorry to see you go. :(": "É uma pena que você tenha de ir. :( ", + "Write Pin": "Gravar Nº PIN", + "X (mm)": "X (mm)", + "X-Offset": "Deslocamento do Eixo X", + "Y (mm)": "Y (mm)", + "Y-Offset": "Deslocamento do Eixo Y", + "yes": "sim", + "Z (mm)": "Z (mm)", + "Z-Offset": "Deslocamento do Eixo Z", + + + //REGIMEN & SEQUENCES + "Could not download regimens.": "Não foi possível transferir a programação para o FarmBot.", + "Sequence or Regimen": "Sequência ou Regime", + "Regimen Name": "Nome da Programação", + "Regimen deleted.": "Programação excluída.", + "Regimen saved.": "Programação Salva.", + "Saved '{{SequenceName}}'": "'{{SequenceName}}' Salvo(a) com sucesso", + "Select a regimen or create one first.": "Selecione uma programação. Você deve criar a sua, se ainda não tiver feito isso.", + "Select a sequence from the dropdown first.": "Selecione uma sequência da lista primeiro.", + "This regimen is currently empty.": "Esta programação não possui nenhuma sequência agendada.", + "Unable to delete regimen.": "Erro ao deletar programação.", + "Unable to delete sequence": "Erro ao deletar sequência.", + "Unable to save '{{SequenceName}}'": "Não foi possível salvar '{{SequenceName}}'", + "Unable to save regimen.": "A programação não pode ser salva.", + + + + // BELOW LINES ARE FOR TEST PURPOSES ONLY - DO NOT UNCOMMENT UNLESS YOU KNOW WHAT YOU ARE DOING! + + //ACCOUNT MESSAGES + //`User could not be updated: ${e.message}` : "`Não foi possível atualizar o usuário: ${e.message}`, + //"saves new user password" : "salva a nova senha do usuário", + + //GENERAL TEXTS + //"Absolute movement" : "Movimento Preciso" + //`Change settings` : `Alterar configurações`, + //`Detect Weeds` : `Detectar Ervas Daninhas`, + //"Impossible" :"Impossível", + //"Relative movement" : "Movimento Simples" + //"Setting toggle" : "Configuração de alternadores", + //`This widget` : `este widget`, + + //TIPS & ERRORS + //`Use these manual control buttons to move FarmBot in realtime. Press the arrows for relative movements or type in new coordinates and press GO for an absolute movement. Tip: Press the Home button when you are done so FarmBot is ready to get back to work.` : `Utilize estes botões de controle manual para movimentar o FarmBot em tempo real. Pressione as setas para movimentar ou insira novas cordenadas e aperte o botão IR para um movimento mais preciso. Dica: Aperte o botão de Início quando terminar para que o Farmbot saiba que deve voltar ao trabalho.`, + //`Press the edit button to update and save your webcam URL.` : `Pressione o botão de editar para atualizar e salvar a URL de sua webcam.`, + //`Use these toggle switches to control FarmBot's peripherals in realtime. To edit and create new peripherals, press the EDIT button. Make sure to turn things off when you're done!` : `Use esses controles para controlar os periféricos do Farmbot em tempo real. Para editar e criar novos periféricos, pressione o botão EDITAR. Tenha certeza de desligar tudo quando acabar!` + //`Tried to connect to null bot.You probably meant to set a bot first.` : `Tentou conectar a um farmbot inexistente. Você provavelmente esqueceu de configurar seu farmbot.` + //"request sent to device." : " solicitação enviada ao dispositivo." + //`This will restart FarmBot's Raspberry` : `Isto irá reiniciar o equipamento Raspberry do FarmBot`, + //`This will shutdown FarmBot's Raspberry Pi`. : `Isto irá desligar o Raspberry Pi do FarmBot`. + //`ToolBay could not be updated: ${e.message}` : `O Compartimento de Ferramentas não pode ser atualizado: ${e.message}` + //`Toolbays are where you store your FarmBot Tools. Each Toolbay has Slots that you can put your Tools in, which should be reflective of your real FarmBot hardware configuration.` : `Toolbays (Compartimento de Ferramentas) é onde você armazena as Ferramentas do FarmBot. Cada Compartimento tem um slot (fendas) nas quais você pode colocar suas Ferramentas. Essas ferramentas devem ser iguais às da configuração de hardware do seu FarmBot.` + //`This is a list of all your FarmBot Tools. Click the Edit button to add, edit, or delete tools.` : `Esta é uma lista de todas as suas Ferramentas do FarmBot. Clique em Editar para adicionar, editar ou excluir ferramentas.` + + //REGIMEN & SEQUENCES + //`Use this tool to schedule sequences to run on one or many days of your regimen.` : `Use esta ferramenta para agendar sequências a serem executadas em um ou mais dias de sua programação.`, + //`You don't have any Regimens yet. Click "Add" from the Regimens widget to create and edit your first Regimen.` : `Você ainda não criou nenhuma programação. Clique em "Adicionar" a partir do widget de programações para criar e editar sua primeira programação.`, + //`Regimens allow FarmBot to take care of a plant throughout its entire life. A regimen consists of many sequences that are scheduled to run based on the age of the plant. Regimens are applied to plants from the farm designer (coming soon) and can be re-used on many plants growing at the same or different times. Multiple regimens can be applied to any one plant.` : `As programações permitem que o FarmBot cuide de uma planta ao longo de toda a vida dela. Uma programação consiste em várias sequências que tem sua execução agendada de acordo com a idade da planta. As programações são aplicadas às plantas a partir do Planejador de hortas (disponível em breve) e podem ser reutilizadas em várias plantas de idades iguais ou diferentes. Várias programações podem ser atribuídas à uma mesma planta.`, + //`Add sequences to this Regimen by using the "scheduler"` : `Adicione Sequências à esta programação utilizando o "agendador"`, + //`This is a list of all of your regimens. Click one to begin editing it.` : `Esta é uma lista de todas as suas programações. Clique em uma delas para editá-la.`, + //`Here is the list of all of your sequences. Click one to edit.` : `Aqui fica a lista de suas sequências. Clique em uma para editá-la.` + //`Drag and drop commands here to create sequences for watering, planting seeds, measuring soil properties, and more. Press the Test button to immediately try your sequence with FarmBot. You can also edit, copy, and delete existing sequences; assign a color; and give your commands custom names.` : `Arraste e solte comandos aqui para criar sequências de irrigação, plantio de sementes, medição de propriedades do solo e outras. Aperte o obtão Testar para testar sua sequência com o FarmBot. Você também pode editar, copiar e excluir sequências existentes; atribuir cores; e dar nomes personalizados aos seus comandos.` + +} diff --git a/frontend/public/app-resources/languages/ru.js b/frontend/public/app-resources/languages/ru.js new file mode 100644 index 000000000..faa8b8443 --- /dev/null +++ b/frontend/public/app-resources/languages/ru.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "УСКОРЕНИЕ (шаги)", + "ALLOW NEGATIVES": "РАЗРЕШИТЬ ОТРИЦАТЕЛЬНЫЕ", + "Account Settings": "Настройки Аккаунта", + "Add": "Добавить", + "Add Farm Event": "Добавить событие", + "Age": "Возраст", + "Agree to Terms of Service": "Я согласен с правилами и положениями", + "BACK": "НАЗАД", + "Bot ready": "Робот Готов", + "CALIBRATE {{axis}}": "КАЛИБРОВАТЬ {{axis}}", + "CALIBRATION": "КАЛИБРОВКА", + "CONTROLLER": "Контроллер", + "Camera": "Камера", + "Choose a species": "Выберите вид", + "Confirm Password": "Повторите пароль", + "Copy": "Копировать", + "Could not download sync data": "Невозможно загрузить синхронизированную информацию", + "Create Account": "Создать Аккаунт", + "Create An Account": "Создать Аккаунт", + "Crop Info": "Инфо об Урожае", + "DELETE ACCOUNT": "УДАЛИТЬ АККАУНТ", + "DEVICE": "УСТРОЙСТВО", + "DRAG STEP HERE": "ПЕРЕТЯНИ СЮДА", + "Data Label": "Data Label", + "Day {{day}}": "день {{day}}", + "Delete": "Удалить", + "Delete this plant": "Удалить это растение", + "Designer": "Дизайнер", + "Drag and drop into map": "Перетащи на карту", + "EDIT": "РЕДАКТИРОВАТЬ", + "ENABLE ENCODERS": "ВКЛЮЧИТЬ ЭНКОДЕРЫ", + "EXECUTE SCRIPT": "ВЫПОЛНИТЬ СЦЕНАРИЙ", + "EXECUTE SEQUENCE": "ВЫПОЛНИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ", + "Edit": "Редактировать", + "Edit Farm Event": "Редактировать событие", + "Email": "Email", + "Enter Email": "Введите Email", + "Enter Password": "Введите пароль", + "Error establishing socket connection": "Ошибка нестабильное соеденение", + "Execute Script": "Выполнить Скрипт", + "Execute Sequence": "Выполнить Последовательность", + "FIRMWARE": "ПРОШИВКА", + "Factory Reset": "Сброс устройства", + "Farm Events": "События", + "Forgot Password": "Забыл пароль", + "GO": "СТАРТ", + "I Agree to the Terms of Service": "Я согласен с правилами и положениями", + "I agree to the terms of use": "Я согласен с правилами использования", + "IF STATEMENT": "ЕСЛИ STATEMENT", + "INVERT ENDPOINTS": "ИНВЕНТИРОВАТЬ ENDSTOPS", + "INVERT MOTORS": "ИНВЕНТИРОВАТЬ МОТОРЫ", + "If Statement": "Если Statement", + "Import coordinates from": "Импортировать координаты из", + "LENGTH (m)": "Длинна (м)", + "Location": "Координаты", + "Login": "Войти", + "Logout": "Выход", + "MOVE ABSOLUTE": "АБСОЛЮТНОЕ ПЕРЕМЕЩЕНИЕ", + "MOVE AMOUNT (mm)": "Переместить на (мм)", + "MOVE RELATIVE": "ОТНОСИТЕЛЬНОЕ ПЕРЕМЕЩЕНИЕ", + "Message": "Сообщение", + "Move Absolute": "Абсолютное Перемещение", + "Move Relative": "Относительное Перемещение", + "NAME": "ИМЯ", + "NETWORK": "NETWORK", + "New Password": "Новый пароль", + "Not Connected to bot": "Нет соеденения с роботом", + "Old Password": "Текущий пароль", + "Operator": "Оператор", + "Package Name": "Имя пакета", + "Parameters": "Параметры", + "Password": "Пароль", + "Pin Mode": "Режим Pin", + "Pin Number": "Номер Pin", + "Pin {{num}}": "Pin {{num}}", + "Plant Info": "Инфо о растении", + "Plants": "Растения", + "Problem Loading Terms of Service": "Проблема загрузки правил и соглашений", + "READ PIN": "СЧИТАТЬ PIN", + "RESET": "СБРОС", + "RESTART": "ПЕРЕЗАГРУЗКА", + "RESTART FARMBOT": "ПЕРЕЗАГРУЗИТЬ РОБОТА", + "Read Pin": "Считать Pin", + "Regimen Name": "Название режима", + "Regimens": "Режимы", + "Repeats Every": "Повторять каждые", + "Request sent": "Запрос отправлен", + "Reset": "Сброс", + "Reset Password": "Сброс Пароля", + "Reset your password": "Сбросить ваш пароль", + "SAVE": "СОХРАНИТЬ", + "SEND MESSAGE": "ОТПРАВИТЬ СООБЩЕНИЕ", + "SHUTDOWN": "ВЫКЛЮЧИТЬ", + "SHUTDOWN FARMBOT": "ВЫКЛЮЧИТЬ РОБОТА", + "SLOT": "СЛОТ", + "STATUS": "СТАТУС", + "Save": "Сохранить", + "Send Message": "Отправить сообщение", + "Send Password reset": "Send Password reset", + "Sequence": "Последовательность", + "Sequence Editor": "Редактор Последовательностей", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Последовательности", + "Server Port": "Порт сервера", + "Server URL": "Сервер URL", + "Socket Connection Established": "Соеденение не стабильно", + "Speed": "Скорость", + "Started": "Запущено", + "Starts": "Запускается", + "Steps per MM": "Шагов за мм", + "Sync Required": "Требуется синхронизация", + "TAKE PHOTO": "СДЕЛАТЬ ФОТО", + "TEST": "ТЕСТ", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (секунд)", + "TOOL": "НАСАДКА", + "TOOL NAME": "НАЗВАНИЕ НАСАДКИ", + "TOOLBAY NAME": "ДЕРЖАТЕЛЬ НАСАДОК", + "Take Photo": "Сделать фото", + "Take a Photo": "Сделать фото", + "Time": "Время", + "Time in milliseconds": "Время в миллисекундах", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "До", + "Value": "Значение", + "Variable": "Переменная", + "Verify Password": "Повторите Пароль", + "Version": "Версия", + "WAIT": "ОЖДИНАИЕ", + "WRITE PIN": "ЗАПИСАТЬ PIN", + "Wait": "Ожидание", + "Weed Detector": "Детектор Сорняков", + "Week": "Неделя", + "Write Pin": "Записать Pin", + "X": "X", + "X (mm)": "X (мм)", + "X AXIS": "Ось X", + "Y": "Y", + "Y (mm)": "Y (мм)", + "Y AXIS": "Ось Y", + "Your Name": "Ваше Имя", + "Z": "Z", + "Z (mm)": "Z (мм)", + "Z AXIS": "Ось Z", + "calling FarmBot with credentials": "запрос данных", + "days old": "дней", + "downloading device credentials": "загрузка данных устройства", + "initiating connection": "установка соеденения", + "never connected to device": "никогда не подключалось к устройству", + "no": "нет", + "yes": "да" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/sk.js b/frontend/public/app-resources/languages/sk.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/sk.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/th.js b/frontend/public/app-resources/languages/th.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/th.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/app-resources/languages/zh.js b/frontend/public/app-resources/languages/zh.js new file mode 100644 index 000000000..da9d22c3f --- /dev/null +++ b/frontend/public/app-resources/languages/zh.js @@ -0,0 +1,160 @@ +module.exports = { + "ACCELERATE FOR (steps)": "ACCELERATE FOR (steps)", + "Account Settings": "Account Settings", + "Add": "Add", + "Add Farm Event": "Add Farm Event", + "Age": "Age", + "Agree to Terms of Service": "Agree to Terms of Service", + "ALLOW NEGATIVES": "ALLOW NEGATIVES", + "BACK": "BACK", + "Bot ready": "Bot ready", + "CALIBRATE {{axis}}": "CALIBRATE {{axis}}", + "CALIBRATION": "CALIBRATION", + "calling FarmBot with credentials": "calling FarmBot with credentials", + "Camera": "Camera", + "Choose a species": "Choose a species", + "Confirm Password": "Confirm Password", + "CONTROLLER": "CONTROLLER", + "Copy": "Copy", + "Could not download sync data": "Could not download sync data", + "Create Account": "Create Account", + "Create An Account": "Create An Account", + "Crop Info": "Crop Info", + "Data Label": "Data Label", + "Day {{day}}": "Day {{day}}", + "days old": "days old", + "Delete": "Delete", + "DELETE ACCOUNT": "DELETE ACCOUNT", + "Delete this plant": "Delete this plant", + "Designer": "Designer", + "DEVICE": "DEVICE", + "downloading device credentials": "downloading device credentials", + "Drag and drop into map": "Drag and drop into map", + "DRAG STEP HERE": "DRAG STEP HERE", + "Edit": "Edit", + "EDIT": "EDIT", + "Edit Farm Event": "Edit Farm Event", + "Email": "Email", + "ENABLE ENCODERS": "ENABLE ENCODERS", + "Enter Email": "Enter Email", + "Enter Password": "Enter Password", + "Error establishing socket connection": "Error establishing socket connection", + "Execute Script": "Execute Script", + "EXECUTE SCRIPT": "EXECUTE SCRIPT", + "Execute Sequence": "Execute Sequence", + "EXECUTE SEQUENCE": "EXECUTE SEQUENCE", + "Factory Reset": "Factory Reset", + "Farm Events": "Farm Events", + "FIRMWARE": "FIRMWARE", + "Forgot Password": "Forgot Password", + "GO": "GO", + "I Agree to the Terms of Service": "I Agree to the Terms of Service", + "I agree to the terms of use": "I agree to the terms of use", + "If Statement": "If Statement", + "IF STATEMENT": "IF STATEMENT", + "Import coordinates from": "Import coordinates from", + "initiating connection": "initiating connection", + "INVERT ENDPOINTS": "INVERT ENDPOINTS", + "INVERT MOTORS": "INVERT MOTORS", + "LENGTH (m)": "LENGTH (m)", + "Location": "Location", + "Login": "Login", + "Logout": "Logout", + "Message": "Message", + "Move Absolute": "Move Absolute", + "MOVE ABSOLUTE": "MOVE ABSOLUTE", + "MOVE AMOUNT (mm)": "MOVE AMOUNT (mm)", + "Move Relative": "Move Relative", + "MOVE RELATIVE": "MOVE RELATIVE", + "NAME": "NAME", + "NETWORK": "NETWORK", + "never connected to device": "never connected to device", + "New Password": "New Password", + "no": "no", + "Not Connected to bot": "Not Connected to bot", + "Old Password": "Old Password", + "Operator": "Operator", + "Package Name": "Package Name", + "Parameters": "Parameters", + "Password": "Password", + "Pin {{num}}": "Pin {{num}}", + "Pin Mode": "Pin Mode", + "Pin Number": "Pin Number", + "Plant Info": "Plant Info", + "Plants": "Plants", + "Problem Loading Terms of Service": "Problem Loading Terms of Service", + "Read Pin": "Read Pin", + "READ PIN": "READ PIN", + "Regimen Name": "Regimen Name", + "Regimens": "Regimens", + "Repeats Every": "Repeats Every", + "Request sent": "Request sent", + "Reset": "Reset", + "RESET": "RESET", + "Reset Password": "Reset Password", + "Reset your password": "Reset your password", + "RESTART": "RESTART", + "RESTART FARMBOT": "RESTART FARMBOT", + "Save": "Save", + "SAVE": "SAVE", + "Send Message": "Send Message", + "SEND MESSAGE": "SEND MESSAGE", + "Send Password reset": "Send Password reset", + "Sequence": "Sequence", + "Sequence Editor": "Sequence Editor", + "Sequence or Regimen": "Sequence or Regimen", + "Sequences": "Sequences", + "Server Port": "Server Port", + "Server URL": "Server URL", + "SHUTDOWN": "SHUTDOWN", + "SHUTDOWN FARMBOT": "SHUTDOWN FARMBOT", + "SLOT": "SLOT", + "Socket Connection Established": "Socket Connection Established", + "Speed": "Speed", + "Started": "Started", + "Starts": "Starts", + "STATUS": "STATUS", + "Steps per MM": "Steps per MM", + "Sync Required": "Sync Required", + "Take a Photo": "Take a Photo", + "Take Photo": "Take Photo", + "TAKE PHOTO": "TAKE PHOTO", + "TEST": "TEST", + "Time": "Time", + "Time in milliseconds": "Time in milliseconds", + "TIMEOUT AFTER (seconds)": "TIMEOUT AFTER (seconds)", + "TOOL": "TOOL", + "TOOL NAME": "TOOL NAME", + "TOOLBAY NAME": "TOOLBAY NAME", + "Tried to delete Farm Event": "Tried to delete Farm Event", + "Tried to delete plant": "Tried to delete plant", + "Tried to save Farm Event": "Tried to save Farm Event", + "Tried to save plant": "Tried to save plant", + "Tried to update Farm Event": "Tried to update Farm Event", + "Unable to delete sequence": "Unable to delete sequence", + "Unable to download device credentials": "Unable to download device credentials", + "Until": "Until", + "UP TO DATE": "UP TO DATE", + "UPDATE": "UPDATE", + "Value": "Value", + "Variable": "Variable", + "Verify Password": "Verify Password", + "Version": "Version", + "Wait": "Wait", + "WAIT": "WAIT", + "Weed Detector": "Weed Detector", + "Week": "Week", + "Write Pin": "Write Pin", + "WRITE PIN": "WRITE PIN", + "X": "X", + "X (mm)": "X (mm)", + "X AXIS": "X AXIS", + "Y": "Y", + "Y (mm)": "Y (mm)", + "Y AXIS": "Y AXIS", + "yes": "yes", + "Your Name": "Your Name", + "Z": "Z", + "Z (mm)": "Z (mm)", + "Z AXIS": "Z AXIS" +} \ No newline at end of file diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..41374401570f6709261b5ece378a6e8982ecb186 GIT binary patch literal 99678 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 CH93g@ literal 0 HcmV?d00001 diff --git a/frontend/public/images/favicon.png b/frontend/public/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..229b6acf5c5491769f3d48be4ac6221f41e7e51a GIT binary patch literal 6298 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 -=DCui-UXq?T8XO^aa+%93F) zBGl1uU>V9o!`tdXHVq;H|A}_!HJ@#)7)-e;FtjG#Kdmm#g{Dj-h7Ds3Q7{=`V^p%A zVTM$M*;#6h(rfg0*<0Q|#ZxH<_(Dw647rDskQ;bdnvaEX7tv_{$uX7=z3lE9ba_JW z=<3L{aTMBCzy~{xmJp>c8Sk1n5{PAI%U*-pm}WHTDYkS&j92K@-r{PNrS-v|t+y1k zWX_)wL9b$GztYcShxnig{I3szkt16K!a#ryPq?>w13^T)M+iF&)2=vD_Xb5pQ4}kK zuY!WRBca*w<54%)cxBi6CdEkniX0P$X9*g2J;(q6D?Kgo^(FVsrZCNxd~SU{x8y5u z_1|B=9ImbiW33%Jfke*4!77Nv#7;1jPjW!DFRF`MJCdWi;HIPYMeo=_FO{enDV`v} zMlFtNWMPN%j*U^x>EiU;*6HwYjX#(F=9uIv8s1Idj$5~q20Ik4!8%}XxXZyO2#q~&!< zERp#)RVn(x6PX5up#7IFaXA16zk1B1#NM?WTVC4)CxC^8V@2PDu0aE6*D=PxrgiaL&mSVf)q#%HQdAC7=IW8@9 zz&ySr+cnYl4BRA+&o?BU8Hr6;-j-&RPzL~HLb<#PMi8Y_Tft6irAr?nC7l2pyHH)Sd0RC0w7jI}RZQe2L}sr849gC9|~^B=cGF zqY+~j#%pbS?y)|R;s6D@Hjx$sfMKCF-hNhtNL>p2*(?{lJ^WoNfB7^0;rx9s2RuE{ zS=cX-A#r^6VTjk%8$E2WrJlHKiD3LX4pTj0Oo&2+G$Y|+uojdYPg2d9Nz`z^(9Ih# zUu;;?g5pw=&q5*-z1Jc}seCruQLixU8wX{B;F!nPa-T4Z2|#CpTAl)~DUU7V45BI3%)tGGwgl1o znJv+fc;%-#D_{00V?fHwzepj;u=m+d{ZHCZs|5oiL$%<}LGER=pZMMtLRlw!N1`a7 ze=imQNI|f5!E+WOZq8_qi_o1twxA*sDV%k>vp9 ze5H}zgp$%n;l$3`Hm*VNkO4>qxO~94u%+x1?&P6ltE1v3jYy>-(2YfYNBa*t3<0y2 zden7zV1VR$3D%e~zx(=K43kk!+WMNFAJD;M>;yw)H5iuUBpzDZ86g6aJd)~qTN10C z$rDY%Vi_nik;Ux2F(52$iauDf$i{Lx-1tqIzf+Q9ng)ceI6qcI+oAUYeuvrb*~G3G zN2_A7PjS2!`#~tsv4ZajcIzDuj+u>zafrvmQ==xJriMU~V8jMUajXu|PrMI&p4^nI z8EL`nk(u@bkpsF=Zt7#++@@OGHj3Ikh6^;vtOT(iz*>s(#N8bee;5S-OfeXgSbM-^ zfEG-B;338H@rW9*EL^Bi6LQVCS8WoC#n%e3%Nc8y4GGK0c3M#nMXJ``_2~bJ&`$$= zvwmI0&R~p22Ibd}X6*|&yP$Y_o&Myg_h~;N0@$RqP%z&?XZBE&uB%|kE^%|^b4|hJ zyvU~wmW2?fMjrbAOq$V%>VA5gaf9YHe+MuE-hklOeI*Ppu>NlESVqo!n$ zQYN({QwPZL2ghcYQZOKn!%&PqJifBv$v(wSMSi9($)i^oJSw`8hkbAuz~o>o>1Vb- zj6j7b#suQTZ>gK$QS~@c;qtgmsKy0f1FiVaJ_0Pjjme-DZxR9M`1Cb$>~26L)Iic2ZPPv@zm#}ASSl5;gp zypp>()J9wK;;5?|%-8q;Ff0yp3EVEPzwnGORYD0|II6jeVaJL?kq@Iat}M8zS&G)) z45B3zV|T%CQtl8iJ@`9rTOw;tp>l9P%)aFusA>t;IEI!4i=pcp@bZ`K}c;- zDP8XNL}1CgR#9eA1u7*JR0_G$$mSujgSH4GKADP*LrKd=9KbH`Mu_8b{Vc}c(*}4K zOA7c%=vGz-F`5yJGiKKt=@wNxtei>gre1zdX$Eqr?H9hKc+j>yKS}Tq;aXOQ2yc-E zqgV^dJO--ulOTUr4)pcS*FshdGrJ6l2(Y(3Gui9O#}@A_58kz5*nt;HX|h60OXWW> zfpjY~23=CP=FLH*ThwB~VNt~p80-T>*b`^52mS#2cQ*%(rU{5+@1#}oL9}4iuis2j zmGW4rD^W-Axpq2uRCs7etOm=KW85@DH$gl^RavU14@W6pxmeqhAKsAMytoKS!<30=k;GOLzAW(lWb79OFIAI1T8tE4`FFSxY+7=bkwYh>m*bLDF zDL={LJhgMUIpjDvGP*RI@Z-?*$r);OKKUM&mOE(4~R-GiI9whb2Ka zu?-m6>AJYhY4;r;ZMIl!j--7R9UAY?9<;GXR&$V8ti6^^_n6{+eaTb@H8>Zeui>=d zrV*Flt!O)`BAd3K1SI#EK6rF?hj7(Rx~%QAxRy;uFC)+g2x_7|*e=oi72$A;Q#y{_ zcZJ;7sXzRr^JiL1Yfj?VvL?~bj~Po`cs;dq12~|UQ$g7$qcPyKAN4zNpsJvX^z@6E zgqwF9iQPp>&$t?qO+ zig+K2=*+k1!2?FeLP76gsZ;?>7aip0gPPX3UkQMmgy!m}D^POTqvbsKW z0bo?Q$c+fmfLBO>#|K-TU9nmniry>;gnOA;LeG}zj}xk&CDZFotq5&1$0L5B{V+$Z{JoR)C4Uf{HT1E-(ogN^HdjlmFi@g}+BVpcnjjlwD$_ zOScbvFYD4vAX)$31La~j#A=$@)|MkzkcCXcyKEiME9^+4X5HeeSyNU9pQVXC}oG+j7VsB=gewP9V zaT+ANcXWMpT5LZuhVt1OkshD@L+Cax$dn_kvVyFaM)8UqFRc#_yM;WNUJQ?d)joIm zBi2uSC_BaKnj^mt7QHGbo{hUpnS6a3@OO6$q=rcZW!;OgCKYh-T3ikW82A}yXQ|f}KBWSZggv^m&6~QiU#F8W|^NQ{3#-t7iy!5-b= zEV@6{8R;RoS<&-tmbO<{9BID? z9Sy^AVH}Kw;*@?rzSo03MAux#ZO*qe;9wr{H2sf@h6C_}DHx|0YD2Hc?eIUk`ofXM z{)b-$f#9-m2BjyZbCUf*nwCK;C1>qO4BBVx^l4pIW9}kC2sfLxISj4UzkKMr-;cfo zU(m(vQa?}y;N}!rDfGpu>jpu8O8Iv<;Hv5|T6CwlOLUtu+u&&JCR5noALoNafspc- z71!I~>7jPnAE*H|qG`00`^KWBCiX#80GI*;wCZ-QPzIjUOzZk?$t2M&Kgnn&b|Cz| zL1>N8is_l+_`zLm9po1Gplzi6>)*SY2WmcQ+=u_I32l8HhbWhL+IlB!S{-yyIW!ho z!=P12q0CFM5kBAG4r)Nin7#lU^Qc(K@?F4#g2f)<2@4_jm2^s>5$Hjb0PPBw7Lx$? z%`(gk?R7Q-+S(HaC{zG6zgJC14;gUrTs?cHN0MFx#U`>Sf*r0)eS+=$L;e+MCvbPj5?s=4l zCLm=NcOA8AQY!C*?g0SzifDw_JD1(gPd~Ak7fNnAgjNO}V55w_%m@I&tVyWHUL9m` z#RM$Qf;;koJRrWZT>e{by`LmR!=fi)wbDk(7)1*f&WP7;?rVy|D3t6TP*qBAeN7Sb zew6)fLThRNI^q?1BD%)?!{6HII?-ehtP^*lSS2(1nqiXBg4E|5#Mg#V*XU7s7-DLg z)g&%1B@KXS_wv<-iHE2U?!jW|r+xv9JW0PI{QP;sf&#P~g-mwZpXb042s=b|PcNgF zCico`4i1#@kI>K>zOauxlwEh&6ISc&q78~xWGDel`&oU#5k-$Z;{^bIz6kLl3L>i? zvG?_%_(%KWBn;hE$+!;KED#W$g#z>Z0+V4djkREv3lQJQV*9i9(LgtuNjQ>Fj?1RO zNesRO$K3q*#2lTc?IuTg_bdp&dj9@hoylMLKrR_kLmZdvA|;<6$nSO;eOPg&P#d9F zE`k-=u69C5e$)D{RD`>eD-<4N8kqY?ly5_RwuhMATky zckJh%5X}KlH8__PxM3kb&!R^-HnP*%aMyK^Vbz%!@up5&W69$N( zLC2@M)mTk=MmsG}#|hbH5}mq^$j_7Wqk6!JGPt6rx<{?Ud3vSK#%HhhXCF{fC4>uO zf1I)=`+;DXfts-aMvQw}s*vAxf>xDj%(Ni+SO5ZtYj7mN%`43EOLZ}l@8t)M;oeGp z+2^Ew=PNnZ#c3%Mbbf0WDoQidL$7CWS*wrQdcvhw}$=f7~5Lr%uB$J_ka; zGO+W(OQ97kwq#+jF4RO~2c|J3*u#OH>Ex ze<0NZ2aon(_xD!PQ+5OJ1Lv`IL5+ZgbJI@YtZ^8;TWCRTwC@C1BI6}T5jGae07dr^ zcb5)6N#e9!8jz8tt~+-Rr1uAdB+8(#VH`$D95@flz+uyX>yx8M$l_hOR`~MKuT0Tb z9%3N)VSgI$=lNLdOI^kDZD!4RyA+@rRb#iMTMi`mM}v^S{w@hyX@kqO!MiEfkAPrZ zEH%2$7Tzr&=*o>?7$k#1;9x|!C<`#3P&FI%fM0Aa?#hm%LHYXZpyJS0^?BYA`3pz; zBNre*!Wv8;{Oij90Fk(nE~~yeq*w!8&Qwjes4{IA z4N_L*K@i^|b|8^I9hB6Lu~JCqtgOI25DcB!vMPXYiK{9IzA1t;Ay`SzaN4skNxl`C zwu^_O)H8dpUN87SDt|F}6d$jWsnWbiiS7@I95}?PZW_UjxP@r4U}NYqZmr_!8k`;C zy}R1_H9Z|+w3x+>TLp0=h85g>I5n?|~>~tZAnP5cPA;mLYnh*00XE|cI zN{l?GTi3I}FY4|BoDp%~d_$PF+xy2qDc8~GkS7D$(|#Z>rjHSOvBhtVWBfv{32Ll+ zFgr=$--%ZT(gYy71L!5+Jb1~#VLD7((_A5LPGyl3PV##sc4Cqh-9JC&-$cOBLo>}~ zm-IO>G{EGSLaR;q@4B^E$cgPD^%c2&F#YRH;Twko8kh_NhB)r8bu$h;95|*Loa;B- z1h0JKi8Z}GJ$-7A{{i&=))0oa5SaGnvr9zr{|pZ+Q<^1u&{oaHv!hz5EKdJY`1EVq zpCSL*2nlr^E?Ak3a{2s(hbc*?f#yJYa*)U%{GGpXaA+2s>6^ z_bWrFM$Opm^9SnxpRzofDGqwfp0po@hshTgIg%wXqUp);yM5UBtuzhY{@0IqE+z4z zLLuvqDY0b1Bv|V2yq>`_wCs0TNcH*GymkpFs=ppP&p}b({~f)3`o!v8e=^PUZw&D} z$^eW~4ef#kGsMZ5f1iOeYL5y8cO!iO0RQppwU_Y9-{<~qOXB8HboCxuwZCHieG4JN z-rN(T5+LXQ?19ot?$mu2v{A-iiPCA=n_eyIU~+HYjs(@wpk2-S+wRl|HJE)uR#CeGd~l3RDBUQ_RcDVxX_jg?bk3E`>x*+`T6T< z|AN;JDz@t0?c{Fq@QokE8+08m^>4`^fDgSH3Z^S57nuNEaQ5p4QhBy{{)4*U0J?uT z1Xa>PpBo|Bee4!p7JeJG@cBcWe>H)LkKGSmIycjaWq>9xIDLjkM*ogzb=too`X|UI z&a3l+<)gYLJ9s=V*L(D(O$)>Kxq&}H{hy}rE~i;p>JiTd7Eett763$QWf$@xH}i|vGIXsqOE(v$fn zH;c>fEx0dJDE}s^!x@;A_wrLjN-FsK-S7ayfGu$cqNB>wUJuIaIa!gyL^9ud7sM^BQLBxwndw z8r-(Il7aYIz8*g9AB-i+MmE{T;m!*^Pxl&jieuRA zg_gPZ8~6qF-&FVo;18O0kk780KEKBNB!3-s^eH1k=9u`JvtHAi4xKX-*_9Ipc^AF< zyj(UTTj#z2L`L%AceYl|T~GJZe(Gt)&%&$Ajk#M@MBHIf?Kbx@^p3aisceV30uRgK zqv>Ysg_m9COp+aD>SH*q95|ftopEhhGgU8RXS;QKsT3Mf5P8KpU``}YIcB5UZ55=K zl3V%t3vPUNc?t4i_q*mlN`5E~5%vW*)$OJF(gpe<_HBh))#!@(g3S3z07E)@dlLU(UFiGzlC=S2~pKez>^4eAG}ZE3{+ZYoXHG|61bapd_j4gY>xVAqJdr;yx>}u z2=^C2pbIJ6o}{L|?DvM=%#J+qi4tmF5+fVnbvwO1x3l&`Qb&TX-QIlf;68h!LW%Kw z%>{|t2gt{Eb=Fc+iEbZ{Enja)nPKaYd8&#loSC~Vs+V72FBr8U`vpjM2)Zj`SKXh) zd8;7p!TRmbU3Ir#=3Win0CgbB8V=I5C@7UoUJdhQd}!}FU{_0MQl6to`7bPUZm?`~WDrd()tD$h2!z0_J_6$Eap%Rl#lq+W^(`k3BSKBQQ# zLT`bh;gqwV_>8uTYrouLmJe%T1wZS`lFrl+xnVmu8b)!{+;-fR4^~DwM>}f zh=El3~BfmPw z)^T2eE!~sBA|8bL~4C_4@#B%2fqL(w%F?F z#1ENN>lda8WTuzS&D0T8N(}dX0n8uwxhXD|gvg(WajxFoFy&UZ}_cWv@ zd!qB!x+o6=ucr2uY$8|R?Au#UwT9Y{ODV8M2MEc@sU3^cXLI7-kj|XZ!dF|DHAvu9 zUwmiWdYL>&yK$3xj9{(WXfUm=jVnBnhMe%ExE#<}eX*X9mF6XlAl zBS&VuOx{)Vcb(2*>9IlxvOgMMlZ?V!3m5 z8Z?)VZfrGD^XiE%y|lAGRXd(BVtPjtbA*>inLaE^ASrlJfS3I9=`X;9n}*~>W=;<2 zi@cBTO5MBUk2h~ULL^~(K4FVau|E=`aF@NaBUiiUGzr^OfD&)|CTTf~pvEI4>S`sp z4XD&Q`73SBPo2!lI;NCP)0!(OEE}5FH6)c}P|DemgF^D$0vla~kx|G=^r{AR6A-60Y%`h5k=b&OW?7Ywt2gUCrz(!E z6=q(sF;!dFqOs>qj^$&|u^SR~v##q>5tgTCwLLH64Eq1{%dR`ii9POhhY{Rla!sv^ z`A$ojDdtWkB|@tuPb(0-%M;H{?A;|Y63spzSE7p!XeW(%-CR;qtvzQ}-kdq(Ty-Y6 z;?Vs*r=?u=Wmc4LTY#MSwby|vlkG{PA!t*s&-*y<&I)R%+M`&m!)2hahOe{Z!tIQn zF0Q)8F`=NU3O@cix=_v7!^)(OvYx$RmxO~`TkB!PIdhRH7-DnnZ9{S!U9f->Bk%FH zuorG$0EKTPi;`HD73;RDoIe(iDxByucf(8s^{%PdJo)A~_3qnE`KejYoB|j~Bx}Yp zmWn%bXO0Avt+Tr2+>fAnLh``u?)CXXx2nChlZm`AwMZF?QHl%EIrpFz!S;F+QETy7 zZ=sC8TDzcNVHn@kfBgOxRS`<(Xdi-p;vpJuMH^Ap5gM(t_xngb$_Mn=>uk`9-TFq5 zw2O_-4k>I&XP?i~+qJo-EkB#uxrSR=?%DNbxqbqroo5nR))Up&y1ZiUAiK;IB-6rp zSd?CIbBynqrowo0FI|Eb#)z36GDRxNoo=9q)|GcVZ*5uhy^%aaG9#JpI&KcUv zl{=Sjhr}WuoZy#yVpJzXHV{TI$osBAipBuWI~*M(sH(1}*;;cLZuH|k?S(@_zT4RVm@)UFP9jbivb-`PPP=D}IV zmuU9%o>a7Q3a(AAiTzc?peBo;8G-txj>+4kQH6!zrm?7uvYH~=Z0-r!n?HK|*=Q~E zW$avDVSH#2^MKzQI6sH#FA()Fm8EIQ=k;E^Gn7nur>&GwYa@NzAD<}Kxfr^ymFp}_v3K^= zRU>p03~41w4i%(!vNZWct{~1(D|Decr@}mErJd>E^l?N{U2NOxYZsr*STUuc7)+21 z0s@TYf%d4Ek~eeW%A_u+l6uMWnC9KQ5b%WF)UHC*B&d99dEv>sE?mDx8=w}>%NJ#G zuJO$$GdkCg=!0-M8g&s$fHI6%vN6*z>GVH}Xq{>EbVh!L=tDyb91d zdt;NgJYP^_IHrndiK?MkMOs=<$A(7|TG}gn9%hh(Eq|7i=YqI8?&R|mrR2;F%P*|( zrPmNwtYb$w?7ZYpVkuGkJ)KylB4(&ljB6#P)H!K4 zH3aaTHI{O25ZsH6jlPWQmSN|EuckT7Ez{gHTjVQ&eGWFf=M&A`Hp!Wv@xZybPRdY4 z7oEGnc+HdTF8ipGaJ74UR@4L+a^#YGs>2Hk_A;i+LX%+%j2uvjwZR$D*d4dv83iArk)Uxno)16Uh08HO)4Hba zx}5}W=s78HNA0wt%jwSLO1D$HxK}t-YtMI#MFa=XnDeHz+>p7YLHwD5WB#UWY!Q@` z69EAF_o?`Jax(ban%5{0%A44tUjPP(h+NzSc**q)nP>MRue}ve-@38gGYYz;u4M#U zWs$1INd|+}#OYC;SId_9f(GewD!lS&=OnGfE-%V*TGLBDrK6ljypMzZG{s#jb=4m1 zmWS?h5-`5215TyJK^tW<&E~cV&2*Q+$o8`4ev#dfus2Tmy3N9q0n=CMSxAI@(jqw< zarnnB9PA@`cucO(u`cJ%gcB5<<;;G z`Wz>wNo4ZseToPGdKhQJkR&ixp#L3$E!>l>*5ZcsNY&{w{`*&kD{@~gyMfE?Q5Of7 z`$0b{x`)`3G@iu<7GgetICSQOq3R>SOx65cVM<|3@>ll~tQNwAN=$5OoqF4KIi`aY zk+S{<(zY_q#!hCT(bF2r@YJsncn~FNUJ~AXuiF#Fy;e)Dc^1YT`+)7eN(7@<`Jlu3yv%Rb5N~1JYPs?7e zgD-|~c=MYar6W;nezHW$Qi*L_-N}OCx|N)8@3;#JY+a`<&(J<~an$p%*IQvLkP5IHk<0wHZmNpJNv;A8o&ztW2ar+Fn(nq1MC` zeN$HydG%I;P75wuTyeagrYleLvPWyr8o3~^lIl_=Q&$Vfrv=SNtG(!6*iK+F-wRB~ zQe@kNj~Durgq1?#*FtGMixi1y~%e5(s*9o+(^<_4auc`s`;V z^-=M%9{3#^asete773BJ?hgumJ%3_%R_2mc64-avlT>IC8&vi3aJfZqfG;F}f`$`x zBcM(Lf(6(fWfbIvMXrma7u_`Hy*%9dEQrSrN+VJuA{In!FlSJlnPR52ExAMO9omM` z+2@kExg3M4@G#ob5~*KWzIl>+6|`SAr#Y?3dWDRt81*iy>DTl=hoiz1uiK*?sq2^$ z^$KT0md=|ErMJh>uIEw(8xuOmH1~|m&xsNBMQNQpd{te&4~{Mbrix-WeN$f7VN+m; zRHe# z$>=Mctd;{*)Xj%7KyUOR|H4>@zy#QBdr-I|O%mF^7t5Wx!91zg z#N4h&sU$Fyj8P&wfGeMwRd?5~;RevSD%ySl@@B?Fp)ko{_6O0c6Xs?dNEyXBr7A|D z36EN|Xp>an$qoX)-elv&~L^RYS{| zBm5zL*h{NGxWL^zfITI~F;%Bd^n_{)>AF0blx&y*G9(f{&|A)M8^QMBJ<~^{c{6lj zFrSE-t3BKc=Gl{jy;;vHUxHa+;%&S#wk32mMFQ3Z$bjQSIUcr&>zRe)6BJq)+ctNO z&rSt+E_T)hHd#t&lg0M`CL`K)r+7zuHM`ysOqZ%&nwYz!^H-D8E6E9>Gr@vANja?} z0yWEyF&m5tQ(cjsIw$(usNjuCns|E5pt)LX`8kW}+u?oxGFnF1pwndeGw3xmyv-=YO>DCm50lWAs2^-FxV44R!CFCSmlDV`T^wYBH# z9u)1!)Z$c5)B4Op+kT{6wz+c&YHxN#IV&qc?omvPD|bmSIxg0(a<5aOn76W|(9SCV z!rRTurK?e4O$z8_*rEK5I@-=_9kk`QTa^)M;{A3>I%hO&C-0yu(8yZ3CL7AzRI@sx zQ&A(Dl9@9lYGXsPH(*wRemv%qr#3sk05zErBhfCU(oC5|l0?~H@-~$Oo{YR$^zk2Z zMLrPS6|b|obHSf=X*xwp4y>Zd7#VkbRQp)N>EpzCCfA8yV1%-jU!oSQzc*O;d5FT7 zz_k^H5VC-`NwmgXlor6}1gkl4*||H*p4c&~ONf9=F61`m1}_xvn0x^`&?U2wTvNf( znUK@EMLr^yin z=u~N^C}tyJn zvX82n-i*@$J;G!2#d)-gb_ZR<`w#4$-E4kojQMEuZ}{E(N7$8Z;~lC;=h!=+U445k zL}zRJP24b8%r1&CHxHXQ(T43gzKHWXr}_zF@g8(Wmt-`@YMrf; zmJ=oSXzsAQ^~{+0qt7ohMn0cgasidc$6c9unElcqIzQ4c`~X3(^N9`{V;Osx$Su0T z^yp=-R<$5BB)m;Jj+>|4B4QT;O7Dw84FWt26rs{EdBkJ(VV6&t1{C(V5sv_PwC zaH($seE_4A>*bG(XeD{QyfQ3HSYVhZEjaxkjOL@@IElW!MFd7?zx;Ud~=Ok**Ogx_z6QQf_Er5TO6;{9FyS{lpUff;j`r#YtDS7 z`gsTY<%9!V%Iq z7M>b5k+A`UhgZjmSTY$DbjL=J2`4SKjXsvt@tmP0 z&rPcLY}arK3tyYe_*-#jBD_G!j(BU_tqmAcauC-P8Wh=1f`;AYio|$=3U`gB2oD$) za{|TMw0Y3BSqSEe)xvPz%){JwZC%T2I7a1{&mNv)+fbPK+#u`OugRuypVBs0ie3jS z^iK!FTZ$UWA5J7Wsz9ur{mv)LDLY|EsKV#>BwMQ9mCW#HVyF~6YDcmJ&Jpf405$zF zQX;x#+bi;2wItK{Q7W;B`KypLw?g_Dsx}b_+PyEhS zR^+y%DvT#PuMpTj(qsrC6>(cFBzA;?NOyotnQkZc5<)aktI zIXeM+&smqT!tpqrU;BaUabLfIf-k`F(ba}*;C(+S!$yr>*9)-2MYfT?}VGCgTtO|cg|4P+^HIw_F~yApti9rtKY)wN5emENjYpvJY{P#mD`K4gn?3qr%dm@q2C+I40dD!{ z=VoqWZ6AoXm_@`l`(Zp%c?Nnh#SGZw&C%fqWed?==hUSigpv=oJvu`YY5)wsS@z}b;QbIsU z@@DRLdtx(3dzc72K+Y7y#kt65TM*P;<>IV|H%v;@*CLmD_05AbxZHPv1s`EH@U)f? z1QatrA_{BL-*qQ%lk^Pq8Xx0E!nb8X%=!^o2c?mbwmZ`FPM<}FGNSH(JZj{Fk6pKjd#y;nI*|m|+h;2?>fEhnjYUfv zXX-wk8n+)0B51fJ2L6+`{27BKm$gZ^jdh;YQ#g?)j4d)- zDXfTtTnsBfgRFKoc#_0?>`i*W5S+WLW+DrETMA=n%lVNPiOee1sXTU+k}%<6P$S8K zyIvW*yc_zBeljDkqrGmaxGQokC#3w!J!Jbjm>bosh$~u%VMSPrVrQv5TUE(O3G{tp zya~E~azk87wE(!FwJX|lbaoBQ<~l#jzA6>r$iN+Ux9;g_PV4gqkFc4cGp$&Q20q(1 z9*Xx%^{8*3$B5qYeB{N`wn_zt&5?)wmHWdgc;KadaveQs%2^4d&lj`H1jX{bhf3LaO!eyvhX*iwpw&auv* zRYcU6{A9m8$t?1m@x*R~vz8_V1MN5Q9GU7XODk()U*26#Ug4}GF?SsGJ*22NTGp`U z&3;7XS;uBY#W+9OW!Gqs$aBSfjU`|bw)~Lukh<6r?@iDm`;%zT>7~ZB*Ln5~lr3!% z)}qZ)`mHAx7|_7156oU9xCM8D2Y5}jnV&Pzi%)QwQK%gsZId=0Dqao9L%FZ!J|HGm zsW`y0Gby_yREhb~*I?>UjyTdE?pYaqEf6$9E2Vz;woy)MjLgfi7V4l+qI9>h#8Yp=_J5bA-T`54wY) z%&qHa4_`}$e85Im?SHf6K`|add|6o716br?Z)#A9y(+nh=nZ&iQEuJuqZW{T)F4C_ zed!@RQ)YGSN}buoI-&8xYn7y}W`Na}(5n`@>qjnvMwGW>M70(pW&N##q1fP8wEG=o zTeZTYeCJxRtQHWE55t?aUd&=n-lQOxmpHGKj+fe%?A%ZXq-El&hIdTp{ziVo#(P)G z2G=OO2-|NrCEk`gLxh<-P89$aMluLW4ip>vn92xncW4N^fri62dePYF`jNxjku}Eq?6Qj!iJD1j}wa zcKe7soRE3C&CK$c+g9)4y2er(=r>^>-OQ01nt8_^p^_HRu}Q)w zDnzkDv~^A*HF{QO5WP*e70!q#E*oFfFCX>em`jtUyi5>y6v2GjX;}wuB{hnJ6iGy5lHlxdE?lomy z!)IAi7*k1{+GpaTb4$l>XbgJIe9#4Dj9#*|LnWt5T0;K7{luyg z&-|q%jV3jCG}1Nfh@Lcssob>IKAN(3P!Hipu2sd9^5I-yqD zzw@;g5a1l-3y^8h@SaFgPw&*d)>tWws1b3i+%+TFfW|g`1*x~=Hzip`1vK?eRW@_0 zy{`KVM{T2cQ~4i=hZo>VoiiTFX|UPWDIa`NBAwDVVOn7RKsSud`CSRqg^?Mu<7zp$ z3Q}|*?9S7{$6ns=3^gszejpcUqHp2RDx8NL@FwQ1d%vzTSR$jTr+-c?jPErfbtJqR z6|&&rQgC%ycUyqIfP>?Gy|rd)_?3cYk5$*o$_w0qW)i=N;Jq+fp;5DH&?jsUsM^%1 z7A7wr@X7(n6)rB=xrACG2cJYsrwj>(WcUtv-Q<1CJyLf<+^RuRqNj>(_6H$l5?^K7L+;jzhgS7QT6sgNA7008t z6V_Jc?St<`XSlJ1^ElvYl-5sQ>rAyWztz(hVoDK&nXIDWukqdy#4~lstE{1vl$iWD z-WId;gZox$E7jaK z)oRoRuH%N-a>&*3kGkFCpzMa5cCJzxGp4JV{2(UjJGDj-gk{ZC*pq_;4h7qsCr70{ zcF=?~2B(=skyoU>=1h-u8CPofW(-{B-XtkM-BuMI3Q}oIZRQkM>uv9i-=e!xmoYen z6CMcCzBarX`dq4o5Z}%p^tGro(A4Yd{}q{6px%_y6quF=See1aH}(a!zxk&mv;9FgGF$t z>2d1wbmTC~GRrb}$WZ76F7m`!?-rjaJ1EyCy-@1Wp*E}{SM<&qM5QQi4Rv4@1&rWE zE#!rrEw$;O*wW+FNm6bP=)o#V88zLayLh>NQ1+&z^TWbi)5eLpN~!FO8F&BlWSLa@+Svyj-oQ*o%AR^1>w(8xPC4)hu z=1BE&&U7KrGU8%}`BO#H#>Z+_cjG@cvvRLD3%`GpqfOX$<9=YJ#*?yFGI%l-Jf*E? z@x${f4HUgYM?yVKy<{p*2bMhrjb^>!KJLwvb`ozbwOQMIcQm`XYC3T?>R5L#4~VoX zaqjAE)wUK=qwe0by8sWadE;|m5dD8ly>&oTU9>(-N(oW}2!hhxEg(5`Geb#858YjY zlpx(8HT2M((nup+(j_gDO8Fgp@4dh8PlkQ=UiqwN?b&Bf{V;=(EU-#SRP?Rm1Q76t z%H?^0dXJuXSs6OA9Z?)>WI^T9$i41p0R+(%DX}%Mis?X5%`8b&ZrW-({+IOGjG9#8o|jfc2%qO3eZu_~-Rv{KFq}uypTpvQviFc{m?qQ>@AT(~|^G1^!b;EmGyR zfBH-ZJ|O3#uhXt&v<9kPcaS~)joFk!?aM1pVAiz&Btr*g=+S6r6!*GAiA>L8@xrNc zXEb*#iW$G1RgQijR_d=^?)7+i;CBeB61cC=4?5%JY~siAKve*H@}&D0Bx8B#kZ8b4%1430i!7xo z#|>TQ`YfzXG(5>3$iA_V=60Z_cJI zEy%>F5mm2*>bfdG#P9Sv(Tnf)UW`#5Di#a3m`ybLLO%yW-7T?C>$;bn4?cY zJ#`a<%BvqzCe#6lsjjLYGGt@LO%Eu>x%e0O`Q2$B{9v^)`Nm`zxWT^ce(r&D(KGUNI-ER=J zt?yl}N=oV>+K)5AlCc6_xfUZz>WOt+g>Fh8z40Sf7Z@#Wx2wfbVC_n@j`7B4^WS8# zC0pEk7*+qqGROV)KC%Ua{faa$?DD4#hK@$Sn8n9{3nvhd=J!!b5i12e6`wBmjUo@U zJS@gPM70E;1XlS2cO%wz9u4suI>BZKffm!{M#R7#mKyt&Y}d2EpUN#ndnM(&TI~FN zRHyB6Y5l}HfO*ONWoQ6HUCd+pF1`0E$%_QcXcqaV2MCPj-qj?1G;t6JSiLvL{@+|x zZrAZea;e*Qk@n2r!`|Eg!|Lbj1F+?SSZ<};iyg>L6=?z4PZ`@vzM$B*FAaFBE^}`r zFAtmZ&FGi)U3U786bj>t@<@L zWs(MXR}@Py z!vfn7LtHTP>yes_@}kvf;Da4v4L8zFOTgsw(W>8X+#Q*|r)juu^^^clit*1Wcu*Ar zqjqOBT+O{v#pu69z~|{z?qhe6S_vaLLjU}8`?$~% ze41Y6xTzd#wd_0gT<|-pXBla{+nOf3&4Oy;>wHvW*-*! znyCWRe9v(Q|0k4>BD;nS;!47qGYD`M!M}Or6%kip&JAp{$;ZeqYL7M=EWG0fPt1n_ z!5s~(S(Fn|0^d`7#8mGzmGFvo;;KmC1Dg{I3YOXZZ5z^_AN!cNgI zEr^XKYR-|nNavC?d^QILF-YfUjB;y!73I`2!7tEbL;3Ct!3Z`7=3ASzemJ}KxfjZ9 zWF#lG`6#mgA{f*a=x4mo2$ZNdk0<1jpCIF)13d)F6I9^nI}!>3H7Y(K4Y#w#E82fY z-m21tiQ@EA&@=f^txP~UUK+@HMnBFx@}Xr^Rhbac(6zgj z>T}nPsjRBJ%AR%t`=PP@MLL*wG-4MkT95pVHJ9^{KOd!L-AofphW|mx=a==d;FEd< zISP4g6^y&g`^#Nm36dJF&h?`GDp+1URXZ^6g>JpB;haN9`#bWEn-WYX_h(hOFkT|j zSi0`T!wzY*G_ApyzOOew-%ox3zlgw!zFf@{MC#=&rXf!g@%MVS7LN)U=ba>_>VHc2 zjHdPEs(EZ7`yIN1Me3!i$2gU2+2=YmXLO4Un`h;t6lbE-&+IOEG-_)OuCfI&NIqbI zqj$_2@_i}XlGAi*5L3!&RCQc(R5C?W?^||}be}7UAI~&fO@q@EClJzEH>4tqhrB}b z@$_70zm`Dyd@y08whC~>vU7-M%UtIc!M}fUC>IKA9{ZvUz&uEy*v$RgHOF8~gX1~I z$dOviVdx!6YcCxSS^v(nMxrG;yk zu=4xfIpNn==pTO~HtPgHFW?94AP$norN2niLjl)R5-n5dC)xoUha?2(KQ5w1wv*E% zV?xxU5FDHDVd*M$mR3Ys!vWV67g9eMZj*DGeR}N5^GSbM5;k+x=bC^DXIMy{L{=4z zsUj$jzpI}nrTsJR+u#;zH zeNpVihx8KreA+(lqVx*A?N%Qi?N3^hLU17JOpcv!Fo`LNfUz8;!v7?g9aR%Sk7)Kr zPp>U8ky!&I)|s!LuI9YLi+;2%PS$DWqX7=qNGVY`{VgC;!-pY;@H{B6Ss7UG=D51$ z)NJrGWX+}S`k8igR+jOd7VK&EZ1Qj}2u=;PX*DN}j ze^p&CVXP$EbOpaM`LhyO?UwxRw;Jrox!C~pB07^IZPLuc>eog81ikv1i+=L>;)mM9 zjcaD>oc6Ex#8)2Zk3N-*IsjoKk}uh1jk^0KNToBd9jA+!<9)f(HvttDJlct}`VyU5 z8lyk3^2)EgUSeVr;}NjqQtbI<6s)_sl4AO@^#|G8TZ5Hcac6qcoKUIeQq=foXh)(V|lIR$Huzeud>D^~lJ3=kQWZM`O9CSM$fN!y_jn*f`Z@63ztr?*KT z#9?e1W+Y7>B^vJ7B@hYh1f3awUy*d5 zX#Yj>Mtj%K2*u+*!Im}~E6b?IaL*Y0i{$e(mVMDO{G{b;O2E7z47dMBHQNz}MLDxI zMgg6&Aj^BpBPA%X5Zv1#IB~>e^$Ivm0DHJF6)`B8GE21DPhm{f7pyjXZSO9X*QzhS z2nlzntBzfojCrWE-|1|SpsWq&i@MyNnz^fVuRqh%7mp&L+w@hFH9AM4@g`>hVUrLf zf6%PvlGs_iTV4EZd_?)Y&eMj*JWH|unxg1XT-jm`*)*_g!!OBk7Q*g00t>LITO1#L zAv+GJvDDHg;i-2NEByh}Roh9oR+Q=kWuE4NV6_X2Loz$QQ1S;X+9CeW7!uuIj-e%qYL-iZ<*vbxw4{)yW!22KQ@6rdrV1mEo;eSvwxX1_E^i&IBP2>`B4}6qnl? znp6HGS+##`3Ueu@<2g!?a47Q@T&$uOj**`}l(XYw$N+O^4|86{q)Y>8rgvi;JYM<0 z{5mtQ{o`H(6zA>P(#woWmv5)l&C#EU>rJjI?Kjp6vqxh-Wcmh=qXLJ}>C*>(z`vez z2o6DXKS+lsl&NjtD4A66zsaU5wqNQ24o$%J?Zv)sxaSnEsSfPSPpgVsNaI9SfH(#> zSCUOegxIx0!!5>^2wD#|7bVf$_|=OE|A=wd|3xBQX8T@htVVoQA%6G%qA`2RsrB2` z5G#5X#X$6fPS>ppRBCP?QqSn~C|_QGn-E*=N~*x=gax|agdb)N)GxSDx+egO)abRhj-EEBU=5l=F*_WB7}_D_p@e0P1;sJ;71OWO7%39> z$;MHi*EkX$!-S{%IA%z1^~sLXi)RI$sv}0zJ-;1)v=m$rv*bB-(&yobNOvkyrn*z- zdsNy?pOsmv&hB)4kjQL>5B5n4NBO*%`>^4vZTu(2R`)93BX!d|p{9C6!gOF;N7#yj z$-c~=y4&1(>2SaB^v%QP$crQcD3G0C0YkgD(559jB2RrM zD2w)6t+STzTposgZ+2b{_gw>L{IOV~ZFPiUKUi>fy|o}6mQXfdN%BS=ku z+p9yfh`j=r))56vR0Yk9t0hTR2IuXTuLOcJC7~btwZO=#JOZo_d4G{ydTo})8{#*; zd^kVuXh$EBj&zcC-Tn%}-H{N~3I4kKEuo~Rr752eRqG030F_~(l6+S0grTq4HPL%- z@I5NfmQBRsnYI0eprm?9nLF-RTVNIAQv zHaoFid!_UHqt;)|kPAh_s&~3Mzjpkxe3RZ2w?l2}8c>E}W>G#ImjG#V*BE~DsH4z8 zVsPBTRi(oO<(x0=NM?2atj0nH+f9wCMkd4jkmlqts@1qQDJHdIA{0A{C<#6Jt9pOP zNnL$#VJybP9>^0t`l~|glP@E1G8DS{;DU?_j^1kse6tKJ?VBn!2|tT!8=kk0gY8EzTl zQavd(Fk*Y;|jx=h{T40nTL+xlaP_dH@Vz%Os{j)KR*9yrD2X4YtyX6~I zTJ{Jb7_lPkY{$e^94FJee>bW+(uoDck;-I0wKGOYVoG^h$3LcL^eneiweRF`zt~l& z7&|Pkpj`Ff3U8j-)AB>Oi+UwXy#W+E^lg5A`dy{R$X_Iu!jeD5lJGRz9qAVf=eh>p z3%!|a`gXQ+vGd0F>J|e?@7_C+_I&tbCL3KqC;nc`3wi}yV@wXt1?%WSap(_3a&#ZY9Z!la1} zB1N>(i;aVy8N&kT(oF-DOmqxwEWZ9jfUM2l@d4}h`{Cdjpp8=N@`=GhM~!Uzmz^Dx(OPcyu7J^LOd%G zdA0#%;J2Uc`Zn|yz)S4jKI~A^jK294#K`xqa)FB8-Ri~(#bA1pdoIx)`o@N%xXw+% zO@0HEuyR!+rObLafRWVa(KT(D+6GZE-+0J=DGohd`{p(GeMR2Z z(`L6K@SJ6Fe0I+r+Qzw~0MY!eqk3RyKEpfE(>ML9)IC#SQQjH04j(nc!OaaW+Cx@M zg!jyrCeLBGlYFAJh<~8(Hh1~86_|V~`c}QfAzlS|x8d+}9j%1{-WoJ6^kUt)k_S4w8pdzB}mQ;mv-PK`3!g|deR4}rs%ahUR;GT`3 zRcZhnCGy3apgKzHUOk}@7ao25x_S{CCJ$qmxXCshe(OJa<=^^!^x3pR?sasIk1r^9#XLll%F>Ye6$e}9IweyBF)=nxUL2KPf)C<==nLA}yB z#2#vZ_wWzYtB+G(_lPS!B*%A^v!HuJ)j$KC0EMMTB;J--yXYRjtuuJsUQYOleFwCbG3Hq(9HlygveLH_cMtzuAGD_(s zjBGLM;Zc@^eo3lCUHN1Rk)Y5XjvTxVP$2rpM=a}jKj{pG=WUaU6X($9Qvy&t5@_>Y z$eYPkexIpu1e6|Pa86gsTtB>&gXb^ux-Ax+@hw1>E^wgg4V~BoCpap#!OK+3j(%V~o?(a4&P4TVy z&USfYuP&&=zGB=XQr%hp%K!pB7I-pAa)-?bqq(0aG0}=ZZpy~pA zjITzCin3uRG>NjTf&%dpW7GS6vtZ~HB&YvW3_s5R3M=)HBRQ&*PI1yN#=#rOtfzIK z>8}mO6m3Bd9Ew`b-|yb6QJ^=KP!aK?{J0kS@h=i;=-J`j7ZAW-9g>w4R)Ot?J0@p` zaU8ZLi?Mc*i@L>lk0>LR7uupiZ6v1u2v<94|4NXlH$YJ#S^h8b40O@Gd+U#M?=eAz*5&T)a znHJM8?I$ohoM)5QnWF$yzl{L7xH>+Oi@d3onXsn+7>bpMPHswq0Mvth?giO15Ieta z_`~4G5z2GQkoi=p<_a;USs+{sG~9oXmKG7&~D;}Dx zD9MYRthvBHE#jX+r?QL&5s`&D*-6=ZKZQ)XG6jS z)rDhQd{vR#|06p8lM`#u`2Nm@l$W*trLfCV&i}P|PaLVo3J{`x*Jl3n1Lze?hG31s z`Kbet#^4A{+XJ;WTx+?2@0q|O0jtw{8F@iCKu|mOY{evaoZehKl=d%@`5y+_*6%0! z`4Q^OTkfPFeHNgh);BILy!a;u&<)v8wvP7*07n@yfUaV5ZD|B=QF`eu;B947t_W8K zU!A-76HSq#zf0|+ zB&Rd=-8jd&1Bx7jX`|i1g~!qZF*a5@ZF!F%oRvepf#xLtPY!;w5@F*2a*&{Ll*Nm9dJOYZS_KUju z1{_(ExD)KKt>Y7``wpNUxJwnzUZfb9Xmpi>Q&oXF0*zimXDnNIB>yi+XB@xL0tnC% z3d?$YU>1AQsS_+!-wBr9JLZSpBWk3Buq$vHl!5C|%T>#&;%7w>WH{C3U7;#OU%rg~ zMe2BrF9ZmCvuyA9$r)+JiuYbe`i7u$;C|V+SQ_k}0AWJ6&LOm)j;`X(Fd&8p0Z+m6 zF4Qoggtg6~Gqyc{kr-a`E0#wmKr-6Pi@sE<3#*HWIHo>w1Shrn-zQer^rRr5K9oSj zT_wu4#-LKOPbzIT;Ku1&$=AolcD zOU}x_m$(Pf4|3q2i``0Z_%CkVhOFpRY58a>Q zP1T2;wyK=@ysCI3l74@SC}|B##XroSz`||~gyaPE>0LYd=t50`HIHko@pIOynj>7pUXX)G6V(|194@4F^k}`U*Vn7dnU|?C>g2-_P?}Q@~)Qct?Bm&T|w*R`}%ZY!3>)Yy}7g z^SaijWC4!^#A?ovL@ULgTg&%!NzUYLUBV04gPXG{Kw?JUq5k6z^$=Dy)L}$;JzGI& zza%Ab7Kr2Q*6t~x4yp4gyUybZ1t)cSIkCu(IH7&O67v@+EOZvSt?}ew4^q~qhR!|{ zaP!>#a{9Qs?z~$%KrOhg8uW;^|2BPqRTMdZ68&HN{OJwV7=~-d*XH+>&FFpfB+M)J zbXMoMiJops<(T{9`CT*mm=y=(L+(dI0}&4U^~Z((tqWmcVTrlP(=~JxtkdcSxKw)t z>)`(2`{Kr*{EWtpeFwZZd2poDY+tVbE&g4=%2JO&bPU3tx+nRvLf4ar4h@eN3$n%C z>W4_nM(;?^P~;k;8aEBtFfXhD=6vE~E-7shHJk{0j;ix&&| zRW^1+cE3`t_0@ttUGm4-!1F$?-QW@&54{&J0H(0c{;x&=4)kR3NHjJ~h6k zS*L$i#C25DS?-1t^%qIS$j@Qmfm%nkkBkJry2*Gmuh@FaGx@>TJ_tCDz^JupH)pot z>XDN?la)m7^&}M541nPyAl}|X#BwW3C_+Pn6^Ct?c2MKTMb?>Mp}5?AmADTp#{B>h z8u%{l26#&@GVd52=vHcl01i|A7$zXxSs-t&F+(d$Os12|1#ikuITHQaj*DfTH-TN) zU;cIjJ-f%^tfeAMr?}W9+Y^YW3y8QkhN=vJeH8ts9%W++bN}+7QA84VqhI1zwg*b> zh_>bnV1A@Y+s8Zr5V&gfp7)nqvW8K2x5BK%+;4|Y$4mCGv0r0)6dVq~Zi$tM7j`Iw z-J6&tKfda_Vuj(o@pT|a*c$HLeLXT=xno&pw%B-=wv>KtZ;D5J=X+Q)K#U&i=QS}` zNonCfBPnJX4or|&7TC44sSQ`8|2_r%2XcVawpaX9`z)>gjU;~A*c4~}Pk_1PND$JE zdP}ko$c3aJ4eT%=_NI?4mex3KZ8W|Vn!GE{gW{Au?$V*Qj#>JlKX$U}%`8xe8_3X% zR6^6eZA@YQxaRezhw@hv7vf@RthA4$S;PVl&2gQa45;rV4nWZrcH#^|oZs4cz_X$+ zG%=H9Hx^wTfqmS^xYe!zDii!;38GM&jYUdOI#3)iiqFc2@O~|Abf;J=cFVZ(TlP-|N+uFhPo$S$AWR+g`?eL}bcU8YM3l98g z#w4wb_Y=!4uboYLM7R!&g?lB(up8UA;*X)h(&*ac z6O)aUpe+czP4`XJwHlO^QeM5272+AOUtO(WV7TP}=0Fx;-FJw^oR||zj{k9j)ITRY zjx2CokuE5t=r?&6bin`rU@YbbB^4v^WfPLbC8r3o-ix=l5ajPbPqNlL0FGJEs_7_^ zBy4T=F!6`z+8B&>qV%P!wD1>WZ0$^Zk!;vqJpiwiWWl z%K!`Modb~ZUp29w#`(20*)DXm_zcDh^aXLi&V~oUWK>6C^nSh!b zIOgPxpBEJ0{fbKhxNogy@^s_Z|9yFkEKdCwY2>X;N@#P2g0*qLT5dU86PyGFz27v_ zb@t%QBs2^?q{^s#_OtI?zLM4LH&x1%l2bfYZ7;1Dc74L^o7?er?pzOfrgYs`2|Goy zvrKq;R;MX~eUw5>4+4Syf04fAB}&nAu*sXTsgA9#kghpBT!ksE&BhLjfF}zShoXyr zc3#)>@TjosOo=lc6R@05$6g=^KiaKy-2O%Km8NS>Fknv0(~d~l?Roz>fBr@h*|}`O z4yWu z3}?PFBT`FVp{!u?+c9$`_EU2$J`zn$Y+cEsoxN-J0=tmPuL}J+OMS$d_-R9|#5B5k zegr))k28thdt%VvP}E|_{rt8H1Mg^Uo2wK{vOU*@*2G^EZVFuEC>eZzE)2TMnONll zu4^;Ueqygu)Z6XoHKBv)6A1sDsTt}%+T?MjdvtfdTNs#YuKFT!fkaLVwbVvbtZ9$6 zZ9PHsKzyF!FVY7JyBamN*9XkC)`h64(zJUe2dKJ~EjOg-F_*5f?URvfdD1k_Ohn4q zA4|fTwr$#dwcZ$wEpGhQqpo4nByKE7SkokIlwG!y*YqR;UQ8Gc7Gl_>WDt~m(e#1y zj4qyr@OF58M?Iz7Bdu}hIk5`(=`#f%nik^Md_uE|HUb()TGPk*@s}%33yC_#QbT(ND^>IQcX)>I@94 zLo|11KG;Wpk(lYjMqsgOi?6*?iA+A)sqy}n&hrVv(sQ>8;39kX5Z!S>JwX@mD@o#Q zH^7s;hW2W)*VTowVEaW+N;gvn&M!K9n z%>7HCL`OE^UgOR08_!RDCP9haD=${7{vy%R$YK#}Mzs7FlLGGJ}$z{Mok z$E~O*ABorE#;(NAf_Sr6l{oTK_9se4whO%cO+um|lWKhMz1VA1mTaHUWDD1SDsVOGsYf4$9s=Xb=kMnFI57mZ@&HenIkOGH)6Zf+vrGrOXeGYX z4*ofZj}ysR>A9nf*togA$mytZSCLDl`2{r?_6ElsogUhUAN<5{XTlC(oZNS18o z9wyJKVMI>+c_dFYpZsfWQs}i5rH6c^%e>>Uc$Gue7B_PXanYhwZdvZ4!0W!b7Yq^giA(zoI zOC(+S;dHwt9a}OaPVqU|=k4ZSB>Lrt4@IkDPd{pzjrp%yNs`)`H5=yqCbWfrqNlKt zr>r#mn%GswMNiQ?nuURyuVKl*_M4D+BkO*cg8ZQpkd4ehhDAY`SlYIR(yoENMiY3! z`l)gnqXJWd&dMC-`ph?W;7jht53nZk{I45@>$)lQA>%K*hl*Qx7^(~Qdi$fC;<0?I ze*QD|OhSU*06hJdc$ua6$*ljft*oEyTX)Mr$Ei@(7~6(Y*3Zcf6$;?ph}E`)sr7>- zR}@Nyrq{Q%%$iN*U)C;<0p(~9FbydAT~_=eN--q-Et^N0`~ zq$T=7yku{R2Xsj=OGnzToyntMR_C zwra*r6nde^IaoZ_=$HKQBfZDafC&N-lF4RY(aQho>ny6v3aqbwcuN$P&a4ql`j!uT zzpuMUH=;fIv4Kv{yl}|oHv5>&TH~uaqOg0Fmxxbghfg%Y$VCmPJhRv~jf6Mdu9=)0zG zKB(3$Xcoj^=XFI|XCxE8?GU;(ZFM7e;G^bB7|>-yhaE&dIXG4S{^lcP|AZFg$JWag zIS=~R8Y3o+t)%-r!}dcO+hOM*W)mgJu_x8ap8DaDyfc_ebR`M<*s9SA3@mvLRtJv8XgQksu6{Qga$_3!NfOYg7gKA?G`tcaZPX`W?OsEL(<) z^c{g-me$eeGD%r*Z6W0<;=>S??anVu_kzL%hUiHFndA#|CgLFS@er^+_1Q#e{#{s# zlkZcz1`qXGhaL~%EA3boSS&3avU4HcruqZR7of7$g_=b3YICs4M8LY2#7D?gHx-x^ z-z+K{xW_X$4`ea$TTUuyagg1BTZ834hcKGZ$8xlj(H0`J(7JX@RTRG5K#@P|AQ-R_ z+Ed@%aZ$BV!gYxi06#b7Zo0#0q2*tuvxwt2=7bFnNG6c#+WlT!{$#civZ==*$yeJ# zKgswxshL(bBw3ZiwZ zZjC5JehoWCf>qKv$WULYqMt-y&;lzp&T!p&9)2vxO(6@v`Po9qQ2MRC*hN%bvFi|@ zVKsRDgdVO?Z$;7;D}nFTqxrpdTZ%nT!Q)=6!5Ks?{zN9@Gmc*&0=OaY+JtTr?GKMu zgkn#PBx|9C28&<7Q_B3i&PKIKLWY?fz(RX!SWem2z1w;rjPLv@YgZ<8bu9cQ zJFG^oSnTTEKo%nR&uIdpC292cK2#?hltK(mr)q*Dg&N(7G!s4ggrXe;$HrHW@f|7f zcWt(VRiES1^i$piEB%paN=>^A9!xgWYr8a6=Iv~%fL%N%e4lzZn`fGHWpn~DqYt9Y zN_z!=c3h*ZU|>5YlO`hfC(zEapvm;;vmeQx?A1|(D_iG)2G+VZmCr|`i24|LK;*Aq zm^=yKO`;y=w2Xh=NxP2((&W__@S?dZ>SWNDCmVt+u|RU+3N~Z$eFeSwOeam6q2~jg zPK)R!7N<&>>>tVVY3b4yWfVNQctR29l)*LfgBlF-B-)y#0%|r5!rz+BRpeo3Jap?a zscA{;A!fgASAna6wUEQ`CLfHyqt%o-YEcyn@1q6>B1=__7)H-Bs6lG^yOO<*NO-Z9 z86=jBPJ%;57N6Dph&ItqM-(4HU+!zNlo&pQ&0v)csZL-=Qvl%(~*pt3?K`z@+Z z&ATBP?uHJNbsmtmLHUI5gdz1T2b#okvTu@Xs{bN&#e@bM?e7zgoSJK{$FBF#Kie$( zClbLwk(Mq*qFB4j?4xJwf8=M5rRFBojoRt($f@Tr8OS6kh?zL+diVWBD$ve0#T<$y z*95_-e(v?n8}HDR@{FjL9go9@Mz~qW2xkxnDlu5TR0gFJaE@~#_7|X_tO^r43xCWw zg>F}T2S|H@iYF`{G{Z?6PnSfm<|!{JqMykl^&puTOsxq2qD1qX6p>8NWUEVUIQEok_X_=!yNM?;JS7tKX`bcP(=W^bfyiV~g>4Pit4 z_l9i)=sk#L+`arG!zOBV&1QepaHz(F)M>Vru+$}xce^Y<;Kr*42J>zc@O`u(6}&gO z%&h82&ZzbBc`hIc{%W)R6{PCKEqL8IJ=16MFBNMr7ZP;Ld#MaMhiq{R3ZuVtrrS{0 zijSPU3gR1T!BJ08xT1E}SBno!(ni6otWe~M#v0CMz2RmR79R%lRII7)s8Ge^kG*Ez zWtah1?9#0e2zWIfPhMV$(QD@q%hjcwl~+}8NT-XDIKI?B7IW7NB_MlxVjxJ^4?KF zERc9K6Q8ZMKV%ot{==dMeibEQ*8YX&eVFC~VR>Rnye<1Do9}8tv8I^pCazd$F{24S z>^9t|@9Y%p0u+yxs#ie~t5QUuaOOQV zuHh>IzTwKc%7Y1wsaD34((!(Xumyt%!MnOo+&tWqt+NYO%6h536kC#9(fZT0#NTX| zvd?dP(mru{#GXCO=nI;?2wO7U?}*9ygO-`uMuFdOM)s|jwj5s~KHgReJC(wIXCeWl zux`U7$fwj5r5@_8ieBl$?z0K6@nQR5Q!*?S4o;Yi@=SPIK54sLTDv%WBH!RE7JXM5Pm+`*;%>~__@F=mW4~tL~AEoz>~FZV~C!sW;eu9AzRCwM=Lv; zdo;IL-kDm|jfyKo`o79l&17GTD&HG+q>SJscO@L4Y+*B5~8OW6ypdD@b|J`??}^C881hz{WI3)Yd1>4XV{R?sD+o=VfJ z6gqp6>CAVKA2d-7e8GWY>`LcO@nd>Q!#` zy@}s+qj>Qb=~D&xx9(k}V%eV-O~?G)QW{Sm9w+-5Li)-Gu7s}WAxUf{8h8J2LymjU z`y0jzC@FPqzOET>nFJ4PP8Fz|@&#@-@;}_oXKboCG?;=6cXg0!CG?3};3-)kYUhZ8 z3|5JdDM~GuC`ZSjWu-1mBJ=60Mdng=)1z$nUP|oMmADM6oGv>lB`03f>8(|k&paB@ zjk@*wLYH@u1^w(5DU74{2zZ{-x<|sE5G@m*g0IGrBsw&m9leV|fi7{f;FLA|D_jl^ z8~5SMnsh9alXFS$5cQy0ddoSHaG3HS1^Q0%lvz(v$5j87UgY$Gg864f%EglX1S7`6 zWK+Hilh}~4nFsGX4h+TW* zCZrirO}ent)aH|Rk1(VGE=NW-aCbPelNupc`h!)!7d%lQKlj0DcWe>wWIY7|Q!N?v zkK)M~yPxsJmy@q$mj@~&U4l;`=^GT4t!mw;tjHIhoPv@jlyP^HifhT}i&>?&cq-cp zvpBxDx~*&QLxGe<660qwq6YkLLTCBtrZqoTesb^j0-+si9%iTbzq7sy`LxgSyS7jQ z0W(e7&|_p$NTjf&u|+#2FWzL?(~{JnyQC6s45s3`M+>zwc_+=HlCzK`63aSp!^-|2 zwK&fXR$vm~%>E$o2fw*YV33C|Yskw)EJ6v_M>Pi-C??E$^hxyV$_WaL1?VO}h^izY zNiGs|`rP@7=p~kXSUOlzCFb{~KW6)WeJXynNjA&t4<$vDhpozLDei66Fl+!X-rJCa zh(m2(rTCE0Ta$pulCkHN?It8MxJ5=`yyxFu@VD2$5-c4pf_OAN>;7Rd6E&T!C3gk- zbVU_R7!#eh#Xy%pNWl)$)81LzR>%GTrVk>)Us7NSgMzl6O-vKpKIuL0`~XxIA;OS! zDLG3ZGNwLhIW-ejQHFhtm?qK@wPEGTMyqrdqJujZ>-|_~kZG6!=?&qURX}x2f3ZZO z^|$#DL#aXo?Z=Z`eW(cOSS?-)1l{_JXpWX7LsVLe_?a};nfm2zX3DTbqev4zkt@6F zwRFTQ7eQ%KUZtqmU)~ZCDjp|CZ+ipRzDg`9zNPRDx~D zy=h^6+;yb6Tx)yB=Zi1NY{@W8QctKrcNsdQq?Y)gp(!0EO}t) z&B`Va$ExuDrGC*N8_5-d55fNL&Nfs-u{_iA#}`>^h_&~xDSUD_KF#vY*3!Oa{c@`O zUUjT2wMzsBW!hF~|BS_yte7@gvQ8T{Y`QgicI3erXjsGYDVCLQxEbcNld z${rYR*|X{~4{$=Ev`%(koWQ3XdQWwz6&-&}`3}#p1$N3uTF45Oa@JJ%T6vJo_l0D& zA0}8&$9A;aprQko^r19@^=Zp0^_hfRAVkTp*N8nWe1<74auWpxn6yn~j%2LEc3fru zW-WP71Nvz!HX4ut_x5yNipMGIsn4Y5{b(q>>nH4_G#742hm_0Ab)OhKLu_l)Bx>R^ z$+ZqSejTVmBTT1%Bt!dj7okUVw%huhD1#vcx*7*jT^S_epnJ4fd~u5ahke80;6Se4 zuS>;g>G+;lj0r~lZEopCQo75a=PWy4@z6`M#y|lmTMse|uOr^2G!ZFclkv3Ryp_T# zDimfVUka-gh|h}xbEPXMn~*A?VE9A$6d7371*GXGz>07&6rky*CEuBGQYg0Rty%|* zD&342pza@Wyw)dfM8{4nvC|(Rn{CWtT87%XxG>Sx6V{%s_iJY8Hf<9ebwf><{)bfV zW3AxOghUk(Rf&e;mBxp88y2h4tUZ{fwKL1CBbuVc-%XYv7}G3#DPF|QeR-EstJ0zX z3R~{W(x;y7Tn}l3Clr3bkCknXzs!3sjz&->>xm(Q1H8~2`8^{7mTkGIPh-kIMc9CU z_J00nw$SIwa-lproPH_!grU7Rp$xxn-&EGG#7Nr-yRFHo0qvmc2nBxf8QI9;ONOqZ zQpJ329(Imp+o!Lw<7pz2&miu>nDjgjQgZ+sKEy#d(H(5-U-pCTLP*gBwa@XJ&Tyx| zn}SQ~HH7Migkrz0KC&fb_3?+K)<6-=vS>{JIa~A_qN8JTkXj`ZCJe{h)+jHyq^U5% zdl&!Zqm3+~C?9p=skD?IS}r3F4nB;2!v5(to^G6tfyK0DArsN*dm0r!(@z>2wo;_} zdTIx0#o&v#@vA?LK24d^CEzb0pt|3!9XeUtRSK3mWygez%b`$fUFbGmoW{m?GKl4Yfk$Rfuuotl~hvuL2$OpAZ{q8dY7&FYE(L&lqq(`T2L@62Z0sbX)f4Km}a3HMD#6YCdJ!o zs|9()-K@qh=v4BU6lV>}CyGcM3f?==GbG?P(Ttwi3kP3*+I<@OLNZbKK!ELlLWXcO zVy0$n@;5H)2y@ay-s29c%a7@A91#j8V{Y#nC@2`qHswYf_jDq^?d)B>3P$t{(h&i* zQ6A`;JaYyU6N7k8ggH%0TSd!@bX+1b^@EuWDid<@WZZUQPg|81{WV;bj3=O)Mce5+ zqE8WrPq2!DE!;IkVzc_{R0!b3DF$ythmz(@1*KUbQcnemu@bWAe9(u9z;7YlmdYuq zc>E@OBEz?Mm%=ZSoEiif*8{YN$mHE@TW|cAc0DcutkccW17rUHG3$PqzVbSU9L(DoPUxw_{zOZ>IYP$UChg-8Sz zzg!TxOh4UE9hrs~-_g@P9-?Hvz?z+bH>{MisSq~-dFbTR7FOBvAfUG8#^$9O6cNm4}hoEz4WxNV1p&nGh#U`Z^5xOtv478M<=iSBg@NBr604QR9O&#+k9 zJ_)!Ki%Q`i7vk?q&7I=P3W}y+;`daDOh5zr2g>s|#x)ui`MG6|ocVNWlO=S(4hx2* zf_rd@QqEu<=Y?-7di<6tp|EwEV<{eSE|c|26>`$I!B zmKuXFh+*toWN*RPX6%$KiL5DWQbg9qGPcH&Es-tR3T>7|wk#?IDcT>IlcJ<@dNQQveM3>cR@a4|Jf{y_&A`oV z%JyJV7Jen~5m3^d*x@a*EGn1Id)cUiMhh!+=a5JAtCjc+R;);y(~$0?VaL^Xt?S&4 zs{mPrh)GN{9d;jIflye@IpDrpOyS--I+F|VwHC_;qVsagl=gmC+)d=p&{HCnb3g*ZHaO*eP6Wetp+x&qb7%`~}H{oFtx@{73>%7q}?nDRxIm z#?ka$y*hRF%Q@qfdbAe0JP$R|?o^CCCDJ0cQ9$V;#ex)H+Z*SP7Sqw-*^^LnsgZmq zwVUCh2}etGffqqG5zchD&x+){6gZcBvB!|b1Ub)=f2d_&E24YJT05ZRfpF*SMIh^R z=)$rd3XB+T=PPZMF^c7PclTKfG*Ib0ud+>rpPKQCj?UJ&N#})@WWsm!zk@J()6RCv?NXHys^;>o=vuoL@$BDM(ws^=Uu!IwK&N=7{a*F4LA zxa69WP`m)O)hnPVV?ip)?A9w}R2x4=n3l*lFG&Z=SUa3@RXy^ql%0vS5KH#seNxaj zev~q~oc@HNyIY{Gk!hjI3ZY40nf^WXI@ba0M*|^1QuTRF&zKp&Cqzh)m@*D|sw?DV zN~0}lq2KHrw^fPz*ec^OUvxgJ`~DaFK#|3i#Pj;)ks{0M7m@PL7bp;S@EjvlnAtRw z)0ig7M#QTyjuwTx$GT3RKXH}Uo)}O*-XNm1CsuS+#EP_HGF6F}e;^R+M!yfg=(I{T zW3s9SEV={>_*zv`sFl|%o}Tpg7CJRss*@6l!^ihz^c{+9p3=V?A1si1k4FKW{9f2E zP)f7cy3FXLgL1LR31@67+U%lfDm(9me!Zl_NJ730YLSj1@}A73S9M-sZ#Kqw@kq{W zgnKM-dlNn0JcCZP)fHtU-BUZq z|0sT_lLCD%aH5C|(hgP-(w>BTb|vGs^iq15i#z3Y-cKMoLG3wrMjM@XYFd$ipf245 zE+f%e7uYL{w#VKnPVdP?`S8P0_?(Ngi8@b9@8)v&A3T16{=$jv{n7=ko@V8%z3#Mz+&zI*`4V2#{yM-?dd_~mcG2az zBdKW%c7S;~TeD1Y$b1jXNhD!hd;Ri92}&Z9!dAfCKEA{mn{s7Z;^BwwbSV}6{5Mku zA*Qw7ZM*aLO3gYCb=psbYQ5^emBfPJymy8g8pMP;Ki9F!J@+`qgmVg6NbXR;Xo_Ei z!^@vEz5^12M|WTMyaBt1_TzvmERZGIoC7Cggw=o&k3zzwD@9R_zV=xz&4I&@^U{iq zoU*q(Iz1Je~Bo1>}1Pv3joEbi8#!U&^(V54}xG_H`Q2tiCN z-rIQtMp^?-0^Ui#ds6q|QIfkz3>A{n5$!lpG6^r^VZ#t7{VIAo=i4uL;;VI+bf3$s zHAo&;GzjZoi%@r8GvJFAzD;$tL$Bx{X@(Lru$vH{-Pxh+<#{9a%v#36j@WXz2PSah z47KnqgM1DOL4ST#;^iRwdJWcCQ>Vz#M)yiWPg?i`lJIS-OdhaXXXDZx(8u}2i@J4G zRL>P@yd!%9rZWlj%3~OFvzuq=?*S?Xfen`O5ov0%O`MtP1Im*Y7w|`LR#a2UWPOGV zLPj|xuFnaJIfKJBV^0kW*>Dzb@sLE?TNg?4rQc^UZ+M83>VgViB1FF`SW#PdSdpbc z`IfoKAn$q#%5&M<4Ch&Q2(~OYDmR-`APlntv$dPn)TCpwjf-M}43pn=F)?N>(yv9E zLPV*roHyFyx=)ihP<8D-GHZ(GB>G7EwB}i&es8p-eOn66YEbJE)+TNW8K_wRf0mfW zZ(gqe4O|QIELbZSWE>9+jAb%nboA^GYIZRwsv~N|&BR=Lf6(nY@JEX~O$OM@vg6Hu z;}Sk0+s2kUxz{wgDhlzpU+^L+RzGuTBbr+sogeE~daWRk8YXjc2hT9Vo!cztSyCmh zQSk^6nKCf_xQ-_#3qtFGX}mPnFbO4ioZ9%*W0@GU=hlrBCByEWRKtOy9!ko)|EOR1%yx@AcS`NatAa=VuPb-^^P3Q z!aD%v$cM%}1+mRc#k%*`V{c(IjmBv>uF%H2^q}Q3SVAOBG{@kPac=TNg&6XM^>_#c zPx)akus7zB$=#CiJ3z5>yNd8_h!c&l`wSYtT_d zetzuUeXX~vsVL4uWFBLtR^vrBz^+1 z6`%HEr+QCw%fjTzO=Em|l|75X1OswMi^!v4TxabU8HwVl;oRGYoB(%#ZzP$;}hb1xP|z5sMA6)lc)OP#l~P2zN0ow6m;25!KuL9 z!&7i6F6By+Vb`@Z)NV8)zCkzs+ClqZ<--Ico7j%F^%(N-jkH##sT4(r&+DNKaG{Lo zIz#=%85VGinPxtLn71dlv2ZVWVx%!98h!gYYcao5%n?FGRRD$aKu_?K zl@Me_)v>!GW3$IxUW>&mZ4KD-BvN%Ldbc`?Rv6Qo4ed`lC9f4<9+(dmJ{_PSeZlJG z&{?pyD27c1jRoEhdc`1$NI|ocWx`#k-tO>+!a^k}fh8uUy`7&xN_4g+XwgO1-8%BF z^N8$_%sn8ab78N9g4Y@c9ZzLNrP|$>`@lR($cn`PDE0HVEoaXq^(}?Jq~ihVcG&|ms!K1rAanN=%tb7A4-oFAm;wzt zh-njy!q-_eXH`z0ipL}--{cBoO)M0a+Rhz#?&2s_0Wr9^i-4MMbA~TIt;Be zN>ZY-1O#&2>egp=RApEJzAnSz^~Wy8lg5Y_ig~f|vncdCUy9oNBg>Eb?Pa?1YHyZwpF~3P2FGV;@OWMn+*Add~9_QD>Km zKZJH2H$rn5P~LsD4~!D??u(yY)Z8m|(3-Iau5pppT*XD;)(MU_T0VEw6fD*~_}(o4 z>y$`sge2bnMGS9Hoyajd+rH9Y>vT=}k)cP{z0b*o6go+GS>N$O3CuQ}3rQNUa7NOK18 z$1abSgG&_G1s=dwLo+HV^};29SdeiRf7=eo(+oU=4IR3!C6#LLolCo#eiwRB$6};i z^Zt$uyZ4sIr%BK*A#}!kwiZ(ALVYxr=?&an$Gha8JZ?)AYhzr}l)t#2>vTU5-^ycY z*$`LCt1wW9&^>@x2bwnRP2V#SN-wM_(==DaQ*q8MALIh=ePXyB6n6dflD?@dS2GdSSP|A}!=x%nw;sFbJ?-X_9z$mhPv;e- z#jqfQb)V{q(YGA{Zfo!O1me8hIOo+&KkVvM!@AX@C8f4BAdMerqL zfrc2Iw&b9gZDu)x^Fn9182K6N)JPy0#X);)t5xwa-Fk*6fu(?k%^+?n#^{xM{qTvR zShvaBc{i#ouWCgwj6aM?f?za9^l$USO}KN*O^y4;cM`|1mAqFq*!GzDwd}!jy;)PZ zu))_{FH7O>MBzaCA_?lS(A9>l;gC396TxzIS(M>UcEO-W%98Z$vG23y*fq-!y;jRR zOI-EOL|+PGLb!pSb$ryVTfyNWrUgzKS1VOw^m3=K!ObAauE1?A>82E@LrAm4@An6@Ptcp1Hvspw9Q+ad8tt?NE^#_UF4yS0t&&3b?ZFy1g5}vCBU9 zVBcj5Rh`!{sL2ag5GtyVQ09~YxG8$hinF?N+Smt8zMHEgvKh!P z!QtE6bg8skSoe<_0?%A{ts1E@%p#rsep1B}SFRbDFFDk=0?kn^C}CaH)D5nEH5)XJ z_hCzg+qWAWI5B-t`rvu!X~QGs2d~`sriB*20#YYq!!injwFy!vRJ;M#Vfc~`(Y#o{d{T<5Q*>r7K?UGZXH;hd2Hf9axhvzUR^Z#6+vlEi z$YX8J1B>irk*>U&mvDLo-Yd7CUp)4@=&mlgS9<4Vk&A+?W5o<zR%}C!!yd1Q`zdWQIhtEVRG)(DLWXWQPW)X9seq*ZF)GujU| z4Wtj#c83w0_`Zu^?@`CgeVuW2{V_0weNL zJcf@)A3m4g-AX0!Y7R_So&%OI+mTa!sD>KWFlAq&h>kFe-62ye)I*Yz=NzV~47$^o zH)blUwJDR`Jk+VBTq|465O4Fgv=>$2o0+#QUReX8aiZJd{)MBH*^9Q-2Ww%ruZjrC zTrwUqQEI0&6ISR|p~yQ=9-$2k`jL;HJQ>NejSr7ah)v7QhfAd=2p<+s-ksmrVb5y6 z<`3MjVWW4^-7Y7w5|}(%S*o8rHyg^ZjRC4LP*I?!KyT0My}%h&{1o^4y|DHxg=hhY z@0R>E@&H~FAxNJQG@;ZALDWvbYX4t-XL2^F#RhO?1aOs8TH8J>fy{a?JMCnqfTGM{YFzy+ikxRf$ zihVSBd$+%ihX>_C+0!1Vo5tU|_rMEYF2GG4-h11`&dJahtoICckB-`c;##cZf+-YY z`fLPxsr70at)Pb3IJG8Mlh2Wxf+zObTZs-bT!{_%QL)u+}-&2fPR*EFNdN& z9w;7ERGU;^4j@>B`JK)COtR7dD;pdjIU?^?I6*TR))}`nd7&;DCLFKqCvbeaXV;ou zCEfmdBu=U<-}D}&`>63QT|>jZab|Ntq3!!rK7k5M)loZ?fV!Dk&?8kq!k;fGUu(KS z9et2xg%~#=BvRK3zH?0b2%YNlMy>w$3+E(NR-ep@qQZIR_pg}NYuqekr#K=yvO)^f zoY(oFg`p1j)Ck*>!_vjWNM{&VqeiFTAKEIPg{ zA|tX!O9uM3W2;vK`D`v8bRNwJ2c8+-uB&kQ>F#4{mXac;(tMIsbCRx`9k?CDW|&Dw+o;Eph;&yB+r1B}Q2OeE8asbN|_gEc8vs``KM0C!`n6*>3nD z)p>B}>zY-iM|#`!ZC{2Ju&0RMa^+uCW4qxauI$%o9_rJe1WE3HcKJ9gPg>YxSBq(a z#>$0lMwQXA9tw@6CHyhV2`_0Gg)RWML^JNm6OWs`Kp1KMcoMk6T7-{&eR#^t6Pu}u z)y{vQ*K0t-^Gv{kJw#|g<4%n90Ng~NEzSQE$l|m!#T!OJR$5GPh6@MQ9kWm%XZ})b zB#XQ3$VAC{+%RrJS-8GHW5Ob+_Tm)EJs}}V#r)3Op@GTHXZjJ{Hdr-8 zav7I)rv9|2TV^4J?ZyeYf{0iCVS&O4 zgI;x!hRm(TcT6OY0V-GQQ-8N>%$x3ML6BP1xjTSz&=y`@N*)FWv!-&~uBSaZn{!)t zf86}^m^XqlPb~e(5Osg8uR_In%CN1DQE7&UFogFm5^LWWYq-V#& zfYR&#fB#I8r*gsC4}Pa`AO^ov zvncqMy5A@q3<~u-HA_&``;Ek7ISJ6;saYj3{C5f`5c4~U$D%;LllT}c=kF8_PZ8vI z3I}tP(DWPO`zvz(R%TB4 zDuxX1yo2~VfX6_Pa4aY`Qfu39pd26=rUVdA9*1@REyODi!;-*o5GVZi5KjQ10zn{x z-mll`x->Xx7&t+SU`{3QZxN2t`yCKYe~2PM@wd<)cuEln`2N7E=C=qR90&mdK8PIp zdm;}AOb$U2KwuDHpTC}d5F83h#d3mRpuk@b92Elr`;*zkD1nNdeuL#;z;H4Y7>gp1 zsn|n*y>J3Soa+Vy29f*!4#~%SPI4fi-(&Wixn=>$V?m@O2g6DJJ0@HV zieO6eCIX0-^Ou{w5-Jc1E+Qit42VVazni`PM%x1%ilAIavK%E)-l6|)mZ0^N;|m;& z3IU2@T+h$~6?r87yJpEaLEq31f}qIBzyJy$$pQV6Bw2CYPCnDA2!dfya4hK?qZ9E9 z%uHil zhp7VQBoWFP_rybf^vcU`~#3BF1d z|4z^gHdM^^6>ED=AdU^MQyT~+k-fp){uLJ-Wr4OfS(CaTf*Z3_6F3I+?MfWh*FX=6`&K_ozU{K;6;BCmi9{sTV(#xv4s-(z`E zjb(mxgMCH%*aH}q7{Cw`LH`O9 z_tqafm#Dq8DcOX0+r(bt}RL%@gv*6K>c>R^5hff8#`Inr;)8^ zM(r&v9KwUbfJb%$`I-_L=g)EUr%y!lKMari7R%T6e2eeb&ga%iGVj=@$mqvOm5N|e z+6=Hr28KibCl}kg;7WGkd%&Ojt4l3I-|umw-)fS8q7L1vNCtwDar%S6{@CM${{?05 zsV#4Jd=K_Ze>AkB>P!3Uc8crRnLWbr(6Me1Wek)V28b34OoTtrXQqTP_a+AO8N(fR zb-%B;zP6@RIA83vk+?v-vxO5xhJq^r41=#I{VdjtTi%hge}(paYYlt#`=KxWw{@nA z3BsJR3R2S`IEa(9T36yH6=Z(Om>~DA=lw-(UqF8XEpsY;?R?)_ZKPr2Ya=K=4)ktzViy+LqCsS6v`K&!N@^0#aylz`g*V`U!zQXJBz$k8eK${0Y=Y z*ffA_JfWDbrT*}hpeARtN#;6$6p8kI`Xk3>1-vr z!H8v+4p6}H2Ug-gk$ATx_(lVP@b5p)iVA;!z?Z%AB~rdnIE*LY$h{siPLl2aqXe+X z6Fv-I&i~PNt>6D|?c>|?)`-d;3Re^%8B!<^87DdBpN(I0@tN&EGPqjy4?_Bu24H@! zQx!XX2Fv6U1OvnX|3~Lns@Q3BU?YglddqHPn+^ZnSic5_*a_7Z4^9D!C*(?;Tz{*Q z$r1l!|0s)3pnr%3o72d0Z%)uspz#0vkNd+78>Ndq(gKYxBAG;9WBIh2aw ze!$UT2_rZN75aDT;pI8mwDKXI;XCEe^@>dWD#lM>ucO7eCgLrHP;jd#q z88rTSB5C9#ZAES)&vrhtn)M+1c`5l9b#Yz{?4kN8$$SF+bO_m;AQx^w{yNTJ_wyJC z2nGd7Y-Yp$#US5Ov!9~pe~BlX6EuYq^YjJ>^eo5%GY$2oF^0AW#L4DEwa#^At0F;=IRwiI z!vGlp>N|>f=&&k^xbwkmVqZ_%to5&=&1QgBBO=$tjQyFDE#CqKK@g~EBSjbuR61w^ zgbJ|k_(4kj8R)-^Ih#=gR3;)h1Sd-(Iy{F#dPy%-RbbEDGu5Qk6PJ46fufeHMzCpSMIs8Vna{b<*}8~;eC#baZX zdX(P+%iE3aru+6zpVKWW*;zRl`PM{nh0PFbQ>xl*_`i(J&oV6<<3oK9j23+tAJh7r z0E!M@3JR?Q5y0}!f1zlN?Y!TALH(n1IrT@19#IaRTcFt(AQb>|NZ<1>w=)50>6Fgh zjSyDkwrw2vRlT**VXs~1l-MpiZge!ib#nTga>c#b4LA{GPemSni*mt@<=gJBY=5j< zx!X^PeQdwc_18WN2>5N=J1RH~Qe?MP|B7~jDD$=RYg$7jFny=;NQSWLc#d(Sldb-t zus)~Ew=P%a4w9?vnOOLO_)#P9AoE}KS^Em;ZlydgKvr$XQ|=Agie3IgTkAwQM5uT| z6t_f2a<~~ji}{48$8XM+$zWG131T?Zo4(=}Xhiqk+o@U<8 zdGmio^4H_5z8@+Y6;&`1se0n;8@E9{>jCFa4c&Pz>=v2|f`Y~ZZj35fd=KPT^f^LH zectwQKL$)iV1sHtN1Css~7~^Jp{*emONhNz$KPDjn$P*hxg8CX#zDmWujbpz*8E5#d9seUGn^E`u*reD_m|0maLMs`fA$7@jrs8QD+OQ0 z;xv4U3Rs4L&^!J%?fNmsAMIJlJnHjh-^N(NTk#G0uQWZ+SdpAl#ek~iFS~p>@mFkT zu%JJrytXlxV0qCzo6F>idFL4c6v(pY7lgJiER4qfnQ4C)Nn)_qMK+a4pFKxkBGqI8 zXe;-`7cl>ITd|V%1;lrO1h5uP-ED-g3i*bnTZc!*t@Q{rvPpm1;vX{o0_^9v#QHxe z_)7#?cjK2M-%fg8+iwyzu#%XP;LO~h6XN_| zF?~Ct8a=R#pjPf8*^$Pw3s#=GeRene;-({X-dTHxdB&1gTKWXa^i869r zFWgj$S;gn;t3fd*tGbt}NB|cWyGWY~>J7`ak3{%ps@Y7OTU9nS%Dxlkgu1y#Xm3pE$5V%Za}msvl+x6 z;YNFif6Gx1$xts*S)tJ99aiN2Vef6b7+RnWF5zx)YBSkN6%F`{ATC%l3a;<(q zeycAqE8D+C@?PYB;RZk~dGFGu3_0a5tM9zd30GX_VeNMG27g_FZcg*xAdg1HP;F`v z7ubgRLebc&t^T(-zGY=m{%@fDXjgTn;if{X^m9BOX9L1w=+(c)@d-4x{6BL7;3i0w zZZf9>?6s@ItV&QyeH)^{V)2j2{fBY-%~f+J=grPNgH&Q0Iaz7_H=K|tu;Kc_G!3%5 zjoFA~LG&L;{+sZ?^#g7K?rELgh-K>CzhwnL53ZUJ+6>d6A@#Rd7UupvCjb^5txfGL z*PiKHBrpC(96z&5@%GN;zw)Ag?@!gQKDYT#Yyd=PW~2Y=mqFteU-(#c`WZ_9{um5L z4zBP!f!+0ApJ;$tS|#hh@<75a8TvgNE@XeW;c{@(e=w-8tnqzZ+sMTr`DZDux&9Is z03rp`s5dD5-XBY~)jhw41(F=*2fv+JJlEY~O_%s9lt2O>gUvdu`wbJ*>n^dZ`Bjde zkNQu)=BDL;+S4%L4r}|eejWV)WzzYUf3i>w_`*WTFD0KuYlrFQunRcCn#_L^#%7%J z#@c??GT;TvroWtc0H8sh2HOFPk#sT08A>w32M)9(vAMV z<(o_u+BL)byNCy9Rz37#;Z#7_r2><9SQ z*A`&2g^Uci+zle5gNY+KcPZ&99(C2XJn2tJzfuG|83;lK>{oyR7jDw;8LZ9rJmY10 zw>#bUy%*Cvv2?M;cMzA4&0<3w?|@}nYP{Gob+*_$?K!bQ4vp2`5yZGfdB1ru&vMNX z>iILG@uD58i@pOVRr~zz>PN19EcRVg7>Ay@@$LpRGW=r#K4`h0Z}px2IeCl0zHy6^ zk`?U5Wg(_|8~`~Ydu24V-KZ^{V)6Di$_RTsVs~{F`?>7Jj2p%Td-yKxy$YNy{HLP4 zMd(LMd{g2B7w^ez+Z*|)D;#*^kfgP{^pUb<`mG@$!%E{mFwcU(0x55f8P@b^i{8P0 z=nkCxFrlqi!#q`I8&&;EbLxe;K*~YNDw{iX!FOa-8+Jk^V2RliiS4xrb)v6Qd;x&R z;{(D?vqtiWxSF(m4v#=BlFH!a=*wHi$;{6X;^hd3y9&B%_}S@xnc``gt!Pzgp4|{P zgILMzi7q-{j3^@bP4>N^j^VR0o354A~Rz!^BLL-Px4Id%EYq zm(J=yclEPoDBCR;h42VKlg+M5%XA!xG#+5+8E`+<>vQUTK?G}tv8#+q@NmL|UWl1; z3`1tXouz}+O9IeyggK04;|KTli%}jW9N} zm~Gtg?m&i5o<$2EwHi^d!DuB+T>AiD&k7SFeC4&3L*s zJF9>P@l(6CGPTI{89Ou3Wm+8|ItH;$XyBDHMhXlPu8%b8IV>W?s{$Hk8rUcI*Q{JR z$GV+%(j`TPveCXLZjs;7(QG6xBjP#oBs2_=pLNXEkM!o^+)5?fM?!G>FD?pdzY)h> zpY9nzX1ctLVXfhhIHH1VI=NfJ{4z|d3U#&?V?QUOY8}lI?jw-|Vmn65;KLzTd+o?fWi=^fKlV!(pZOtrR>D2hiiWLJ;fpt^+ZvYJf&@zF z8M4QdN)3b4qBGgpV6SrBZwD=OVufXfG4|GWVLba!S<@V$n6})eVT!hjD=Wo?@No3F zN{Y}*J*}Xhxv+<`UqsRXLB|QO^-g&L?Y9G#Eo;*%;Fa!X(>v~rU%AA={9@+Go?2Hx zsuf|58eUt|=dx$@LbzPBkQ(Ntm_uSj$)qhupV4-|V6D-fN$hWNb;es;9ca6+##!v^ z2FsR4TP0kz8#&O0*cWNsODh%S#{m5VQVSlAXJyS|4PNC&$kvz#0alg*YuD`2E@bdS zHXtHbwy6ORHhTo=p#20Q*K^t8j&Y{%@I=hD5`qMvmwE^{!5y{g#W?{b+yZ{oct2*B zY7NT=_HnH6xpCiI02m=Ld(uJmEHZ6`#$Arhmo`(i3?8(T#@&&Sai9~q)YXWN!|@7e zcAHCC-n6NtC3LQAdwEMn+V2HzgtA&)POkDizjDk)Sa6tm>NeNBwkshw1JZK>ssf%2 zCCEQ=rf;ErP;TE|EbyAJnrS0xK)?x{bTPFJbpHfWC$jjGv&|W-wu(^9db*0eqkT|} zyyRQFy&t(v!x2|6X2IjY5HWlrlDU^Q%$4UOuf3g|fOC!T�GtE$A}aXe8srD0jl z6M|^5I?$cI3WeBbBOwNHcQdS2tuD(HFH+v8TzECvMI3@yege^mx39&};&qRP%-J9{ zWB~=qh!P5lrGl@uM=ERk;QhdIp3bbj84t=)2dobCq_6S-63qY%ZDPz0FIao#;fkj6 zaAn`zT+mTx%lGM}GTJY!4)h{dr67k61Ovq9#GVhVB41P0a*ie*A9j@LOViPs<5Tjp zcGa+~9)JT%&*12Uh42V+0fuHL$*Z#4^Tb1WR?#TmOxH+=j5|;8FmP0$`Lpe>L(wS& zKxjs?r3`WiE&FDGJPe8*z9YgB<7nQy{q?to7q>-2n9l*+``b|Em^fU$fY%fg?U6|4q3RdM_P08QYOqd(Yz3qE0|!_UH2WWq=$NErdbpT@UAj;a~y86fD$6Uup zf(uS&=5t+;z)+CW>kd5a^a-9GNkGu9>B;y1k~qs;k(9qk_~2i$d^ zPO2)O)G2esoMV+$Ho9@pg`_5@0(8kX$O`OXU%v>Kfab>?ypmGjDWmB}3vl@4XC!ai z9s?=HbirN`C86g9N>X74s}IBlc;PvhOLjod`c&#yT|LZ4;XA8^4oj_zX`4=Ke6UA` z3WtuQe(R|Giqc*Y<7|&vKMcLgWuU)f6``vxv{jZ0a|~JCd&U8#%aFaS44XTMGL=cM zNay+}rM8wUOSm>R>fJ2PRYH|Sd4r2}$UG=8nxV>;(5oayb2xkeV6R!Pa<0zJ6&-i5 zl^{RPP-#RRcEHc-O2Rbo_V@=|2cNMngX@DcgvGtf(P+XV^bjBV#r2UxR`p9mOMZzq zthm_)`AolKO=tm@s7K zoG|^vEk}XJ_+rkno$eQuvrRSoPgpz z45bDMuW9jMM^hQ_y}L62XN%$tvNpy<&E5qWgl8J?3Xa-9KU8rEB4l6K^j(Hm12@H} zDk`cmO68*acSfm%n#}D~sS)6~-A)g`d~moOQrEj0v}@W_s@GV+r$w2zy&0x9Uvq$| zn&3zKj_S_+h(zFxhD{h{^I3u}btvA8wE!_`5O?*lPq+$7Wc;kEB9c6*Pt~v7|jt-p}=>5FWB&Ze}smYgM zH=;Q^;lr(S) zVyDyZ7!N#T$6#(=?USkzd&nu{+iIK=Exz2mJCJID{{nAgu<@}Y;XNE?NC=u176KMe z>dAbyOZV8^1)_$Z<_o(aUWd14r(BKERo>LQa+V|$Yu)zOSXC!sv2FP0=k>I3%;(O) z%Q=pJ`CQv0HK)~kG9Gwq8T+Zf zha#i_TMMhB?DJWB5iJuYFywOxnSqNS;-eZkY+Wm9+vP5X%)-vGO1g{`Pclz1Kcx>lVp(={Flzx*mW9ZH#Ypi&!RmSZqP?G!AZm zpQ;+9UuAkb`1nAgmcr1J1N4h2bzw%=1dQ02mO?WZ-5Wnzf2myrc_>9MTBM^ zkmVKp;_XlF|2t%9_f3&9>VYh#@ARf?M$Of_n?F;wGb5UvK}h;8xPx^?AV^;7^FYlKy$gP5ybweG{#$ zf?6I!$|Zbk9ryFCx^JYsJZ4*Uf5Lao@8hV&6jL!5{kyDkjv*tlcfsZ%AFoH!r_-*! z&CpR>^7tshp}~=Le^q(8Ot?zhr@s#6(5XB17FY(fu@n4!xJFhN{f4}@uR?AiSC`gS zs@}BIzwvU6xvFeImd(6&Yh>F)E*n1dAwikx9SQ~ghsA0HidYjUBBgMJ)U)*EvU3Oc zyKmp0S+(gWo~k<-#__e z5(>N-$Yvic;k8t{5PGFq`Qr{V7%b~sW;{I;APz@Jl&uekg4$lwR$cgeou9Z7v24p>H zyONj$tt-%0&{_2=r0i)+V2tcP;OW?XH(P)f@7|+#Su955ZCG8p*h%j0g6?eS2dlB! zR=mg^-x)1GZST7B!sgTM={~{9y{q(v(B)9E^j$+{dn;ti%HVRz2;F7v zSe5d_=iRkV#O{XZ~-w5a5t<9ty6d_8Msa>Y4pBlnd@T9gjDBpI5?btPZ*q#qsmd5?qGjS!jmsRuKl9$F;<+B^0%W_vp6>c}wdld%6tv!^bfW-KDs3Po#W?&xOeXK1p8HZ6_aI zjf|a0t#+F92-J)fA@|3b)L$8 z0fM5mqn8?{2R^>Bno!zTD2k-sz3Z|OEJEd?qsmR?VYAh}1HwG+4r+Bckw}80^8#4d zOn({R39veGd4ZDcZCCnvpo2}`OV;Y##~pK+HScA>-GkxN#~&yr#`9GjuvX_UP2#iI zUc4H)e?jXOAG{L36F1QyTfemD{+16l7Sl5BT!GZPhH&V!F4egzGur@4dC%6%dLv`n zSH*_4a0MFm98akal+{>7mm?!ISmCK0rK$WYTnV&RFKlW~>u1dzFW@t!FT`)%%3P&N zIrU^b;Y`DnpndNRSp8^c7KwAD_)dY!$UQU;R!&e{0cI^^klrKK<`YPmi+L!_YUWL- zJ&D9&v7(N{HMZ&UJ&6Zr_WR$Y_J-%I74I^3boRU|#+40dT~%6(Ps>);+9-oL!;=5n z(38VK3W*wNSL#i+Sgk}Z+z}JZt~Ji)#pqnZ*hWhFskES>K}TS?#Y-m*dP-z^AqP>a z8Opxm;jIGOGz{pW9Ze>c(LGM#k|?Ng^k~9MOuzFh1k*{ZN`{`5vaeM5<6O!pP5gPS z%P0M)y|}0J0oQJ}*Le})GIn{bLCV?(7as2tYpX-&IuvE~{ zziz*V;Nr34#TAt)c%I@r^L|wCSZh5V7N4WlKr;aB8fHm6)L(&v>8aj7Y~rpV#R`;P z#wwwAMJD(i!D>NnZ;t`t{KToS#>7rXT-|dx4)Dn6^>}ehD*aTkpfb$)EUy?YR|CzK zKo6ObuLAWI@BAFThH@Y5-`Ue$XsI_uhhT*96NX}~7EUCL$6TlU2i>U)qRE@DGx7}T;n1%YhSF4Ioj5nzGx>Fkqd3# zb%8#6R@bV+s+iLv@#4hN`^P%*v4~14ENwXLSv#@F+>?;znXPR);TVolwW7<%@yp?* zeAAv%<7j$XLaKK7i`NG9O!N?)!bldope1^wua)}ssJ*i-o3dq3MDrxK2*-9Rl`QW%|ux67{uY^9@XsC33H4I z=B*0=0$G>9KJ1Gf!q(lpmDac`>zC-$8489n$@|C)XkqI?%e+7Dwe71p8{C zPebe=-H1e6k|U$`>?q%hA@4mTyf;x{tC1Fl6!-)zUfmvlnyFZF%qw%5flTfL9 z$YpIdPQ;ie%I##n=KLn}Scv4Fg|ZdKo(pBwNsw%-<4e0CqPte<7h{zmNn#QLI>EuH z$GD@c@RZ2G%c*Q_??&y;KBOTU$e|sz0q6e!>-BZZwsI8Z)tj-iVRiJy_siTp^kkd8 z$E@Cr!|cf(44sa^!;Fx&>F(B^A&bd0i1Wn^rHbx#I^#TZXrix1sSIC+GDk06*!{9F znf1nW{l#W>WQOwKn#~F1b9YUXLqS4Zc)N*tZiCf!&H>X?`A(1oooK8o> z)s2f9?(XcRcNPhqT_xD_x%ThzVbF+tyl-DBo0sHc>X%QGg4J$G57q_eqbpGl(%VPG zR|+jp2Fi(7MB#feYPT1clgqjWMapxTj!ZDv?VvaZaWUaisNfOw4;%d zV?3^BDF0?XEnJ3MRaW->Opl}6dc3qYo#Ta#vC*B2ztrG7>zFq7W^$&^YK`m$E%yh6 zefyTEX7D#eW*a$>~rC$$1F&&usFAGDB7(3xII?9E$6*D6yV z9*dKGkidJ7D9}{TATC~TORYxDaQqPxq8srh{)8}32FIIT$JtQ?%B3g5Gu3G!#A+l@ zlKB!mXc50t?#+2)8O_CJ&Em3^dGEcw0?bv?zB&t;hde~Mj*Y9~hEsI=F&1cg z2>P57cPR@l)5E;uSQ;X;p+iW3?%d@FGgbaUoOtokl(r|m+35KJbE zo!9X@&qf{nbl=@7#Vedgs}VhiQ%~$@aJi(;s8*-c# zel>VC|7SH;M7YHDSdhR%g zcUu#HbvjC`-6P5g%gMew|ABpqZ-E{OgvNAe?17pqGy5fyx-}0vM7zmQQmdLpm6~_k zlr^l06lWsN2ov3h!yiAFOl*r}$WE8&iNZ`euo!Mpru)1}0*WLyt?3 zy}29Pi`Xb4hkt>V7Uzxj%aqfV7p93?NFONhZcS|pTu|F!WuY8{Y0ZH#k)6VB2Lc!S zusHiQXj>Ti`e4M)ZP=iM|D)=!!`h0PwQ)GO71!d0;_fZ(?(Xgm#a)V9p|}QuyF+m+ zZo%E%tvK|TKJPi-cb@#0eO<}kvu4(sx$lvE4Caegftv!Z=nWJ=q9?BN_NfER57(b> zn~0M^hvul@p7adFio0JJ-T_qv6FvyeLa?Rl3vs?0%tjO1rUYAi@&O)f29WT$7Ye7c zEIZqMobv0Zp)#59;x??0b>bzIp39d=Jhx>Sb54g2)L(@n(5=`LN3oIGqa+MtKaszE zOdh29=x9#lka84b(mv8{i+Q^Xid@<&A@!M|3Ef5dku5vwvdAt^an}@q2_p@q0W zRn(kftfKRCCsX2vr@QajvR?;Saw9_3P-nS^mKnE8ps-jBVz5!N0=k$aEkN~8CcmXzJIYHTsLzmOEs z#1E-1Jg|ei`Z^mvM^JYGHy9fyT`*s7X#>y(LwEuvCsFL>P8{Jwnf(@Benpsx5OrIv znHp&{a-H#zcW1loEoHDea8i1nS(!Wfo6h3zy?pwO&nS7hM5TDut;;1@xx+a+DsDtr zD|xwS=1ikhZQRf7=h{out+P$_=ehuX&$@CeroR%i{g3Z9-966e>sRBr%@R7ZuzNL| zY~pM$ILI@^Pb4i14j;0iO1?$FcRoXYEa58WwYfZOJqU8;cXqkZL|lJH5)ho7V)bBu z8-e_RktL;4b1o?j4Z>%dI&DhN*;lew(D_j~$R(e}6!Iv=*_}vK1^xrz*g8_Wp<>7t zQ0x2QR#a^L;=eEK`&ln_)4x9zfRgSQxobZUYB(TsUgkOUIe`ZLdDKr$!zYiSLe=_Y*0L)KpB9Ih&esE$P2KY+ZxtAQm0c>CY zPre-r@SlA9epSAhhO$_g0%qOY3vooytMeQ{R&YhGVVm+^*ir<+%b`+0y9I@Yp9 zx=JbG;$?5l$j_`t-q+SJyVb^4^vO=FT`}nS9$^eSNvoY^A!5;CHIWIl8lz1Y6--;< z4ha=i=%Dk7uKG7Z@z5OhT?1!Km?DWLG1op-PU7E`nr=4Oj%W3?I5WXLOYxgBmoJwA zWXXZa9ThldDQ|B}16c%a^0%+dbTWN zU4H=)`+}E|&af73I|!Y(R$YPVP5AXFEx6rM9Yq!-9wu<>6-Kge53fRW4}KzL)7Z5% zd<54xi1lzu&zz4z8tlEq+!fPTmzY$bdQbGON(7n33WC5*NK{NbhXPY?hO;osvZweJL2$vj@r96n{11>Y?MqHjk0zpFHo0eq3c_DE~N z7m2@WXD%+Do8Mm{0={%n$>A9rP%Y+@j`{n{f)9{-JPjqJ@;3AOZ}L0`bfu)^8tqP* zdUz<^yu|6$pcEL*9uBWwOV+R92&Suj#X=%9p&U)ikqY=EnB@_g_lF^G4*pXacLl#M+Dt53{5S#;q9?wy{4LM{H2S+F}e>{WrO6S)GRAnvmB5iu*n(T5zx%ZkMDdD_w3NY2HlMR zwF%bFYymOV3EfPWRTf1O?&LUs_6b~+y?(uaKtDES4e4r@c4Gc$Rg^8%F?ki;)@^oK_(n{qsCX^`FRQL812qzh||GgTNFS$LW`PKvggoJS%cet2aG(rq0 zYfU6(YxIi8_rH*cIG^uT-hQb>zL3q$;#yP zeT67rTk{(!A`f1(G|^a4UI&p-tvAIOtQgMl_Q^X2l*kv}&I3y_*h%&!%?dXbd34QY zie)<@UXAeH3miIGR`v;CI!2Q+Ds0i0zKK1i0)KNJc_*-OEVbb3wSIj&06U{<@{mPA zG+$?{FBT`3jh$0Ogz2L!mK1aMUP-Gz-rc)E)zXXr;O4!={8pU(>OWwfa(k?aF}$S`os=ub9gWfv}OA&)rQ@x6DZEvy@+FG(L}T>IU5#Nu!3tsKjXTm-l`Vhw&LS{=N_b(A|#P zF$EzHcHNTpuPZxDi9O_K5~2t%@E3%*D5o=o3sHNtI|86>V53v)(g(T4v>X5rLCuTq zBcS5P=d+Flt@utNrva-d&5m2&IxYBjlP$?r5h4&M5;gF5kbffJc$&QH<`QIYwfoh$ zTOPB{XTbTEf2jW<4=OB7eNQ~->Rlsi6>!S zVP8lQvJlFEF|hC8O-A;3z}ckNz06*U1{T#InL2>233=)D(%B3k_-TKuspX~PIM>1e zSGpIs5Wth_r?x9471(i0hQ1Lqyzr5s;7yw(%rhxxvT z!FbFt!WPVC&9xjdGtZ;yI5)r*s~sNGLs*Kq+`Kll>uvR0kkifcWzb+qp@-A?c!XGK z5dR|7jWJcQyJIp_QJYG@BB^w&_lo_jH7-wr_D_JmaFMf1PrE!hA^}o`TM;+D(Y+B- zB=gBJ0lpgy(3BF*(}L0PFo}3*Qbr7I+iW`$&bo!-?NhH12i`1UC0Eb~i|neU6iIbL zTyKvi%O?7PxdR*K$nS5!%|up!Cwj$$T8lH~*xW9d$u&lO&s$7-UaWbA@A8!M z@)}WDV*p>6nsrE!p;0hqq3S}Ed~cdfWv*G3g{HpxLo#U3+vkml2w$2Iw#!s~AdtZ_ ze)$>%>fRvI=&Y4$jeN|YueM8T_S zA)z|O&i^fbLZXa(RH}l~C~_i)U|JAf)-f8sH1V{7+?+f08DxxBBrwwUvtL^8lct#R z4qVU$+{uL>P*WEf=Jd%QljiW3W&DDl_0i=+!g7EGgT!j~XVqD1AQ8dh7hY@$R=iNP zwEl-A3>vr8n&Jo@^<7xyD_NGkpC3v-shnUl(i$JFTYg&0DB4tvkoI%V@5Y9Y^qhX- zP=Di6TCr{FS-;DCjRgkMTtcHHLa2Mp z;pm>I|U77V<;a0*r2@KRR3wlIQM2BI2qiQhd!l39^6 z>rTb&*M0kM<)X(x`gbYV?5=B%-5bbQ!FC~r^hAz*P>IQIrLXivEsECew5tc2_P2I|q3mM+2b zByilUHAvZU2cJOmC9nr+X??p}e7(s_KX6Hg9-~Kcf%FxPJ$S*z6$B;Uq(VtPC^c+Y zVQib`2w+*R!{B0Dq<9Tcx&A9qNlvM@9rr*{!{>|Y8}!9nEm#b-Pr0Ln{s zUmT?jHa0=L4Wbc}lP-g2@ejW3akZboKvrGB`0w-YF$Wg136YZL+-+Awh--Ue@1qO$ zfReRjmI~uG#h6N6sH^^Dfqj>5XkF)q+kT6kHW z&Pf!Cl?&)}Sou{F^(K_XRals*?@MdbX^D=k?;trGK2_jny2dMzja+c|hfaXO2Uxgy zdIy*3jh1s%Br#gx%H8|M&+Gr6i2rjRV-#Zc9pcpT8Z~~Si+x0X7OVWKMN_ijqc2PN zby!-mxbSrf$zx>5gtf{jXj~=iQ8$L4-05oGKe;}(OVADZK%{X`8Z$6a&eU&-tzv*f z{0&nlaA^?OQu%5^VzvLD-6xa(G_JAwZu;!9^B3T8WMB-J+GfNeU4p#aIgTth4EWzYmnIAvTy4dz__+!%mP>K!h>6W-lnIPMTN_0 z@W}Fu)p`cD1V}*^FBhUWZD^kI!Ef3lPNFZed*oD>Teaz|cE>f5c%p4Edgly#Q1IjR z?g{uW4Wd1Ij33qY5KwaKq^k!iMr+YtZI~`Mm!Wmkkqml%_2uUzV0}WJr{g_Jap1 zDg`m9BH?pU%0;U056h+syUt`LVoIXom~@KFyI#tyLO9-nrYOrd4TpJ~)Ud&TIn zW#BUi>|vIgO{-}+4^XE;8J@+^!9^vN`5YPMl*Ixrw|)@W#d7)HVBmkgWrQ8=mu0iY$l}u-@yhD z-$3rV{(LiKW>v`~3((rdNU*0<_id7qITTSGyq9{CXT>ov+on|*T=soT9Wf9(AEu&8 zgrhOai-4qlmxBSD{7{t;=R;T_h4;$~=Q(qzPqWWf(_76_66E3XL z_1W%&@!8N>Y>U(gZ3)tuf}5r9YP?zo;9dgE}p?wVdX5XvfDAWsAVk_BZeNe=p` z0F7#xWmZwa7VAoo1;%R}2ewfVG$iqj$*&=4*7BztXII4LUWw3Huq;zsvep{R4X!th ztUU7f3*X@&fH}|#NKF=50i~MXLT57`{Dh}b288>{e0b2Mu=PVF4teq}0QyCIM8A66 zjfnwsaGWpy>%-AfCo`lgw`bFBOc#@{Zi&@VB~V&lH}A(#7U(c2qQB82e+bf;wX!6H z^-h(C9hvtxO_~;;!|t*qNstch2JvR%b;vsBlt17e?4$5(nOq|<<}^NV?7oKAC+9$h zvx`?DzfSz-9{M1a;98{3Rzx+8)59WdBG-*EOf=WZiQ!=UGWK;awesF%sZ1g+8vKnpiAN|d2ijy3)1th6wfuh3fP@n`t&L(`@8`?!*?Lf$%| z@aKNNgGC1l2O#0m8yp}=N+sw!Dgbmp0;LRJ(MWPiTZ?z*7S?UjX*SW9ohd527Xx5uC|Jak8SK&0FUO9O8D; zDv^e|3G@A_jslM4Sg6G$Sg^n;N%xnOaxtw&h=}hi$ZWyZKq}z6ip-dgo9`$fpSzTc z%mwhY%0I;Sr8Y<{nxpHcG77MWoGS*ekD!Kdf@RS

r(FRqKuOgARIb=>FX+Uol)S#>9L<(w^JKOVRBnXVG{XBSrFJ;3Strk0Zk&gyQ=g zk=d`+t_P1%@5g}&50V<}`?lD&cNYq$zN$p2K~Ta|Tl_2{I46@FtSS~Cd1^(cal&2s z3(q4hpJ`;GU!DnMiFJIgH;V7-)OSuvWs^K(i2T$=DX4A$q|hC~W~QMLCRpL=x! z_M&(1fU|(1s{IiEbU%HcHlpz>VUm%bmtMBZ=A0`y}u0vdMl{ znuc~oG8lJYy{v3-&2~d&g6EN{cNfA`uxy<%vrqf7qAPk*hvE(6Pk4*~qJ#w;E|sL4 zf%d|P-BaFuGXzT4S2ijbSodP-6QIb!n<=9;6U_K9=T5ul8I*aFcHySEbhyLlzR9y+ zNy1__+8&xJeOuKsT{n&W*yV~5zME@&+=72Ur3NQ*NNwjf=PR_zGULsc71fI081|@X zVAD^M4DB#@LZ=Ds#A>&EWNR8aY{l8u9S#E*m0kl!bh;M*BhbAX5NfVkha76LCPS%O zN_h_eS+ySa$#I&v!8uP~7BV)?4I9u@;hU3>!3zHoaF^mLum$jPTg+!nd43%dKaA3n zoUX>ja}^P)ItpnmI%en8sY(l2lp<%{+YNYSIZvMW?z%9tX+FT6*T)`J6#09ZUD;KH zJjdrVvVG{sYShE5(p&9~rXEv2h~PM{{(tcVrjU{O9rf0ZNRm6|3Khl8Aha=aD~G^K0@1 z9awq%q+@)*@MS`ZpuDIzFX7t>>G{dIZ1)!i7MQmX(gu&+r0Z_g=-PN?>AgeqbcN4! zEPMDcjKE`AQtd^D^S}=xs5mPjL@?r1vZuQV7=r1Y4!Qc5>At3Y(~lJ&5BH9wkGFWY z`qq50LBc+vJO*{cHl)uS;g|iA9YcfmMTJ!0(ThVhhxTCldi?i=uFt#&Rp(6kc%8fh7?{MY$f`v)a&G}$Ktj3Y^LIGPH_Ffw7muX*kD$=b5DPae?rHPB zBA$-Y)Xl1C+1cr{Ks<8!Q5@>p$)!*G&y~Gw%RWGu+7t-|EJoy_Z8-zUshPqx<{}D+ zx;%U%eCOzfJ7QSg)RJ&y4|(E!y_Oc@!;A;0x2Nad!{q920 zac)e_^AEiHg0S|P{Y8E-oE$)AK#69kS5?_p^u(Bs3Aw?u?_f@QH=~o0-13ZauD3^^Tjp z`ArrvOS{7-z0WqUg3Qy>o=;SQ7+2md6-}h9%2SM-cd0(x*=n*4-?N`A=*5npZbxz@ zg@q6BjDYgtq*lBA{bd^etu`~S{)K0Fp+P`#lB?Uz&%ANv6Y}3$`##VL8X6*VQWWS@ zlqtT~ZoWr+jl};gGm3q)TZt%8{~BGQlB-JqXa^)N5Jt%j(19s*<(Z_bGy#u zp0%qz&op}3z~Lk3nro1hRCJrMZ3@dl0)YJHiPsi*&%%~BI^5fHLO~7l5&OC~($K(t zyA#1^=C8%!%|M}7{iO1l$1$(dgEPv{d)ExLZ`X&(O!T|3QAKqJ1NC{)!jg!`*YI9H z>mOWg4IA!aHlDf9pS3Q~45U0MupV@u9DUED|B97_Hs=wujWR`2fKs!2G|f&hUClbq z7fTAi?70JC48Rr#dJVRBj=&1F&(tH;ALpr3@I1DbQE!e<@KT!8ay{G0E%ElK6XL|n z`z>XsxXNe5$YVd3U}?s-)a;85%6`(ZxBwG2Mo`hi#p*P8UbMZ0OXjxI9gmUD3q<-671+)!}wUWz3s)n zCZOmP=RE}pc6MhxteA;^3l7$z`}1wT80ShM;$Be!-qgo9?#um0fbuO7(zq!`{WdGk z|J-vA)t}Qbq3)mj>k$I}!IXu9_0gyI^N%QKb44e8lnBq;`3~Z$IY%4M{d?FJx2+dzD}C za5#B#gW?*zFYlBXKCuBi@#GR|+%-JPdAP#%rVVq7UtElQVFFynQW$mV@@E*c?i`*$ zoP4MK$T|ot4W3Kg((pm*#vH~tLI>0Xu^e}4K9Gh&hB5C=T7@mNLD68z-YGAz4Z14W zTO5dOQI=G&g6`zpt-bDjg7AG(yje=!&hs;czW0G`>V<4Ul1{R!sz19EGF;ImPjYK$ zyW%HMu&1N%KLV09ujs-MQl^Xip~NqHWlAa;%)B*=bpsWLRca4}eLeQ8f<67W`ldR6 z#%BLHP0AV>*$(j&pO%&0hyjLR`Ro<8>r=sC#||r9oa6C`-&eoiuoQ1yb9v-JFx}%-hwEkg3N0T=CVErGP^lSm+>{{Z)b$JXB6do*BK&c@8w;ef68ZCqq zHb^pF+OsttcbnHLh!*mB?Z>xKpsw{LsO{6A97`t#LB99y68-l?A)lq)rh0LG^>m`* z!?tuEHoJX4;h~#l&30;%9}p8|wP~s&!_RF$18wBQx}S+p#(44;$(*w@71H;#7mHot z*lyOUt$}+OCuM9e>fNX{etg)ZhHDDqaSkuzeVaa3V79GeyGg>9@{U zsV`;5Ez2i)L9NAE#c%bI)B3W0I|$mMC(nolkzcM5Vtuft%-lNntLYD@lJH~E`en%~ z-&)R#-<8%YqYba`a#U!I*r{J4#STkC4)UGLb#}8p9B(XrxspMP6}3Z6Z;sH90DqhC zbq&xJiJ%fF$F4u{5Vbv@ zO*&MeYlm}{o|lx@Md?~ob5f1O0FTEni6r6_T_ zXD*a|Cw_ik?<2hImk_qH8{pd?xYbYpI9Tf5e> zp$=u=JParAFYqu;c(d2UviW6;itfrz*g1WvgNj2aN8y_XPkK@KTq1sX6XAzMt!;?` z>6fGjXCwAp<7`z$X~ihXq$UiH#r>?LMz@a>JXjrN&$e(Q(zM!?w&Al^T&<|<461IX zXjp)Ime;V&(7;mL%S1F+>J^nJt&o82{hAyST@toR&j__)HO0KIrYk8_x1S{6WDJJG z!i37uUh=}Q4K)Pie)gKR4H5;C=$c#exV${e`uV!!Y=?g##$uk7~A;ymMIvdZ}VQ3>~@~*5>b(bSs~&tc|hP4iUU{26AkrR7rBz z>Z?iVgg*3#s%p7sI$!*KX!iiEvwc3?bc387LD?NDT3|qh68jQmVt=(#x8ONle;^Ja zA*_~Fp=AEgp|-DHs9Lq$J1E|Fl=aDB|L#7>FlFa{(=*fc<<JDQJ(yaM5GW+D!mbk!(@gAk zwwwVtgB}t)l^k=8Fjt1@-%gJ{sgqT>McQ-@q#n}Rk?=GD@0aOC1Srb#LPg06UVq6` z;LMw#2@6G?O^s=gqw&OUbL1r(5>YH+1$wH{eJq2dJkz00rNNY-T=Mm&AEK=#kL5?vaUs zs*i)_^#?K_MP+G&WX{(MQjcF2Cut)6R{n$JQ}yeyuLb?hZKHw{myaG7JR~%C=vNZR za_~|d$f5B9X6Ga97Vq%41jqNQMxw7e#yL4GM_D#CIA!ZSonJjIkYn`8&fl3P>hkGQ@n3hsNhu(r8bSJWmTU~ zK!TfR{6=1O-(T84-OuuRa(xBFpbkpBRsIiHpRN-h8{V}@r0Ul8EQEe{iMHf$B_-G4 zH=tbY3pMgs?=fEn_msE(p;Tkw(?ky!DqF-n{29#5T_;iheku3Skft@YQq4VwAjV1d zSiu>8vB8!#Lp)J*GC%dVSu(C3&`JN81RzXBrTH0 zq6y;lT-MqNkf8L!Vqw{TT}A#Kk)Pg+9$f_$W;d|ehZ-d+?X6*SADD;*M3pnTFri2C9BC?SQa zTeh&X)D4CJ=CI&b!CKBVcDzG?|%GqAJ&kRQ7~(<%n+AoFAE?;m*gb*Bug z5@mNZpp<_CKt)FfUAX(AuTcNO9;6-aBsJ)N|3I#D{Ca%68J5KP)t)NiN_5`SDY@kE z#^&Y-?^B4ob6AOF;UTKz6>-5yBt#@YR(as0mvn?~keHYBz$*&=~ zmxNGz?1d5s3%e(cV$e;(8kdG7TFzGVapv`7?8Gnbygd@6oE_;6EeXO+2;O!Pm(O>`Z z^&uhJK>nL!OAoeagZPJ$@d&H*RDGVZrNn)1(Wf{XtS{2;Jq@&)>q8^X3}Vug&0;%D z;p8Wh)6j7+T)CF!i->KNV#4MeQ+N;n|pT!j;6C z0m5uxD<@iHqTLsDjc0GK!zij-taQW>-oaGKnbr&+2>LSR-kbdc=Z#iyKf3Ut*e=Gn zioOuM+}o{1Y?Tcr2g<|Nu9diOQ4=}<6uOTsWMDy>Bjpq4%Z7V9svB3A@PLMNb|Y$= zRw41yB5e%NbQ{%E2{*#Q;P>qL54d)5ectzd?sHy;zojOb2;xrGme4@T zRPpLpFk)4=VBr|B4JMu-QovFf{c2no3c|tjXW>NwP$UZWti1b@kh)E>LSsab3DGiG_^rzF> z@g|1tDtwX$N^J2+TMs?p-p=Q6PHuH#nXR$WFCY>}XS=#z$$*uj57lcog zoS{uR_Qfg<*I;9N2c97fw^BkkJ z>A)OEa`KxQ{J^p=97_R1m@QNzBuDXIkPnCu!Bzqe=f*75offOF7MP(P9W^nIFmFUkC;qBcL{^}Jn%0sEi3x5J^qSMRK9EJ<5E55pdpaiTO z!3)ZmQEFowDsva=O>i{wjMjWU5})iG45#v*(6M(W{NbX%9EYi6 z`cVYeSc&c0lf~s0>pCyt8)$HE3`@hC(2xApKF9ZSQB7Z+oHfuyfTF{*3qbjTeV(piNbMg|db?0mn&hSmFN(D}}I`oSzQ*Ni<+OPBNd4r-*> zUwrya2bmg}fDH?S4pDBp%YOi=FwXY0n2 z4j2;)yN04}y7tp2_?Z??4j|T9#g09xdh)rz1GL984|mZb_V2)r33o?&l|#`#>eqN| zah7dAMDSMTR0Iqg88Q6`&uMG^qhdb>uywY7U*}^3dG^`)AfjO1ldfz4kv4fb_QRA* zQE82Il@Q)KZR@Bq!QoI{G^1y`(R5whT^$yUf#K1?~1a+&_4owJ(iJt!K`=DWTOJ{FWXRW+)rGt${w8+yhL zLn*xaGD)4T2)I{@9;m=gu0l z&pCh2|I(Ihsp;KZ&cEIPm_3v4Eumc< zn~~reHyO86%Mh-mkD$*>3Lb5dT`hBxJLartoA*;p|d}1p_+;@&| zC0Xjk(%%6ic(g|5GuV4P=kICCg*B{nKQG8@xm<3a0AWC*hnzUej=}c`U5))?Th9b> z9Ss7`z|1byH>R-klzXYnePW7h-I+kYGwaDPl0?ToKIeC6?=5(D)-DShR&OyEE^g zqexTWR!EoV_jg0$4{vP4+4f1ki8G|QuN~aCrl_Wa923!8=qarDva@l4qSVJ0VQ;#Q z-|^{JWY6Wtx&82PG^&!V7xpGeFXa@W2^@7&@`-dq%g>xOxRLrWMiKH(bSgZZA; z@Ow*ne0tH~zQ@w6L1)DVvi5-ydlgH0=*RK$z`c)yGLK#psBUDG@q-9j8{N)P0H{OEDw>*K za9CN5yEiTW`zqir$|%X&GM>t$Y8i2wzq9enwd}vTh!nLHTaM$~)G;Y40M|hUGsmYA z6C_~)miz|TM$nl|e{flq9?qW~+=)b7#l^9vu)8oU#!wpf2>WH*vyv)&qfV??Iasx6 z=vzzN;?S<0s>({?tF&_Ws+~ut+W0kx*}Dw6t;h>@4C)}@SCc!h7eC1=uzGEnnQMCR zfn*HFzt)ShCQVP&#Bg1HpZF5{UgF;a_EIOquAlML%w8+DME5gj1UrIho=|`Z;cnrO zGZUrml?xz)wAE?)oph8sFT~~3_wvzXnj9b}M?!+*qqG5@q4(&SZK`bJuHOFN5iX7* zpCgE0iL@IqARW^L8w@~}6AGfkjy?ROI(m}Fs+wm1fOYBmEkr-fG%_lc$R@ z!onI2gi?z7(3dogz)ILPO~`x3QTNVsZC}9Sr>jNwAOGZnF+&SbNWrt*1K}aMJ^`?rmggMP=a6kM}KvhF3S{SW{V@^ zlG=jv0`dn&d`dy!DPmI#EQLd!e+z5su1tKjwvqdfWoPG?e6C02iue8_bo3@)^kHbwY(kEYX3ZG>EDv> zoPM6dncrM=QHqOQQNmS@=*6@SAkG#D5h;KnmAXsKv=)?5?UtLWx2np5)} z1QLQlXZW1rQ>utR`p{dRQSGz!3Xow6`?1AK&1eWRR&TKa`QkRCQ)XDe`SD{i`|{qP zTMsJ;K4k7I%&dmT?f_8brm?>!jtTh;&GVvueO^jnvOX0--|V8Aj;Sd_2l1SO0GkAJ zk+4+ZZP3Vc9c@G4hE*kt{h+4s42^xR7pyI)*6@jGNPdby$hmqXnozdl~a*HQywwQ=3%* zKFl1J(%+-*mxpG%if|FqW?Lxb{|eKS(j!&?;}7wRq!8nnIGQY#?tWYcm{!npoxu?W zu5t#L@2Ih?{Bn?^Jgaj?objqg?^oZ3*zWi&-c>FyKOP!oniPH>jSxn-swU@}Fvpg^ zUvCXHgD(4j<=DT#KpzE@SShw2M9H=Bui%7IsFQI1?uds4Cd0~_ntmq}<%NbShbN3A~S*3A5@R=vW2R!DTF6I@T$%EVcZqhyn%v1`w}-xp|7(hoMZF z$%=x%TQ@TylJRoXtS>!Ox6XX+DCt=o?IY~8Hu}?$VQiy z64M7B8|OexH!@^*H9t!hu?paeUi!D@U6ja=r$YaYDtm;jGJO9Xk#!M$%fI5gdD^5R zFTRc?qHI`a@mCZhHX%6F9MJ7oqFz&eUK6)If={y^%vyxSMx>&6?qUUEGn*kv)b2EN z+h!c_>ei+(WjAS)B0$6Itqr%JEE<7gKm`Jl%hEwZ)+!1%)|&p|;gAk{O>KJe*3}PU z$7#QxboW#h4-v$`v@@@rWG8XkRw4|NK^h=4=fL?}t5!}cAqD6r_NoRn;k5Yb`{^Y$ zW&)cryLhmJp^3oA5&e8Xe!+M_l^(2^cFs?j0EQr44oykUS3qw?~NwCi=`N@RsB3zU(eTrCow6mG@a^(ue3$vwE)^4T8rf4(jafQ z`C5^;G)_ygd4vWmn{l zLLw*bXNelBpS9_;2ao!gQ4}FOJl75>0dC<~`E=D_R)tc2sLc2(@#?jF8F6~WYnlkc zpRYZ;K2@q{Iq`P2zXORwsIt^$JYVq5oq^o}44{A~R&H6r?*#Zx7udur*V@0^d-ynr{-h zyaf|7@^Em+;M%Nme4%a|&3)pAfZ-_>liy)K?Vo&kSQD1?S30c)EnG=mh7>v$cUL-! z&ke6R@*k-V3`py1U+KP6mPT-iJR7AIn?VkLMkAf1iS~xnhIz~sz2F4$)4K)v-ssHt z3pE91i(;BN`6npVd}9yc3DHvT-@oHOdfIkUr_=cc2!UTR_csb-Ix7BS`~;%6x=nZt zJPNb@)%l!4{0_IkSF_*2K4oK0^03FuWpq*OSr9ZsTSPz|%mUm)u8>aV@1`gRm{zjVjS8#S{%}aMYR^~Z z^x7xvuQnls%EXdgI~v6IoiIZyy(3xCG_P&c9BUHVq!Wb&Hs2AVJ z?RO)mqXxIqWKU6L(=(MaxkIApe&a=_E?ec%Pduw>TOr@lY8*MdYPKjslet#pt|ud) zM!XKDsufdB=g?(-wWCm^VQyCFHr8CNILF$*nfZ5ZweE*H*HaOQkz3h&SCVMYm|ULm zr3uLGVGXq;*2(kiEb6Pf?m~(Nl4oTg@E2h}8P|j56mA-m4wRvRj3>{JY}?UOx3sK! zt*NXM%5NFhlMeeA*v-!2>HfE>gW4~1G(rOR-m8)mKqBj``DP8zWN9}Y%Nkw*iV{0- z3{G|xPi-#c1ke|*z(OM@BdFy=!WFMs}}nxDv2kgeO+iMqD7qsw>JZ ztg(|(dp%bIN_{DcXWm0w%Y^bd(!q1%^(g%{^+{3QpP@_@JL&!0lVD6#W-7kjMId=+ z`m=16{RB#B9g3@MCOvu3d-?P*_Lh_J3D(SYO>=O{r3Y z*$$^}Ctx+0-%XGG0Ge3Do92Aw_7;gR1_}zjdcm1%`2EO=mbGmHA+W>|VMaJdI94DR zsGyJz%fIDL?1=opjOe6YLwfe*<>1?LN(El32&ig?N^dyiaF(}6KjbprbIYEna~w~@ zu~DEW>YY3f!W*73y78Mnz_Z;?^#;JeLo5(~9|DGu8xcF_ir0VkjcT!}HcYY!JBgW!@R$Z3f%mF=tV1Tp;u7R5P+*??B@w+#~ zX6(oLJUHt(>Qj=60=Qj8W`Yg6uW4p5Bx3aG49SpEsDJd2Ht}I-P-K>u6L?PReQ_PF+@qGrt{B2TWFgMXj(UtUdCE6a^{VH;J5WTfTc(7Kl9hvzl# zyPo*i_T6R=%pZnBE+F%Apf7yXfMIun4tkGYyqA5hF#E9sqB+ir%Xww+;ZQ(5B7D3I9qR&QvuzmK3 zu6{4xS-Qc(0HHXKvadIiE=EW82%c?2$FEv%pTF`W(WYL&`U7S89JF6 z5_BqZVouI{`Jw;_Qc4@$kmV>|+>fr~41)yVcO%J?t#B+)1w`$?ppx2?oJtdUut-SeOk^wfbp@V zpeb@I0NjJ#ScL?67Mu^1IeCJr-MXh7yCi7K&E0r<&Jxx~Z0oFWg!E?Kv3}@{EVPFt zCRo08kW_+d&S55OYEE}^us+xDyhCw%n^xr6+Op@fyKXQrd%U`xXxim{aVpbvfiL9J z)q_6L_OA0MJ=6wlY`ctQ1oC@Agn4O%mf__q1V7HBTKT}8%&9ojuGyboEvY zEWOP$|3e~~^)!ov4;qi4Rnos8x3(*)U9=xLNn4jd4X1^)qSMjY*c2Joy%SG%?1U&l zmz&k7yVoG@LgFT$`#RLiys^-=7%8lx#``N&++`3Emms~1s?crqoFmYk4ssYA&cbAd zWytmNhE>vpj%r^&{R8v1_s}2+3TfK{dcBOBw1`^^=*0i2=u!BKCLDHqxSAVM0CI11 zGoiP~x-qu>VyvVMEl|962hSkZslP!&JEDz3B%>t*Cw|$BrHvwgLc7y-g0!sX-8C{ z118YvHL6u7;dwibp)AvPWC5RbNz67>H0M2R#T>|AUZ!+5TR9LCE%c0y|8kKhVgZjv|7Ouu!d<-Y%SWk2t#D7f}{q29Yw zB!zc?vhxKtG#oyC-!khdv<^C)Yw&YIxO2~61((KuQCktZOh7s+jzlRdi`}c_`nam# zI}vU1Gwf)@pUh#d(cuI+jj32x93Zm$42{kmucV_mJt?7l5m+lNzzA{eXE(FkL0u|z3Wo&_F< z`_(@8>_Cq`Re%My%!yfdY9n$0(3h? z-cP5=&fkCggf+YxoQ^Rndm{+P#tPq&sr=c6SZ5eZ$5g?3JOTIc7Rg5=msPMtx0UCD zddeN}-7IZDen_-BX~G3CY7J2$;0#F`iCqcPq5bPV!50B)fgi$?$7|3cggFCK_B&RK z_9&c&Iz^sQrMsfSfH$8WB;UO-F3LDO+ z)Ifz!Wb+TK%Vop0gE%^&kKH_y-Ps2Fh2-1|Uvv#Fi_zei_r~1E%@JIb#eh7qRmAh% z>>(HYjgWjF*C4Aw>&9b~KC3gjQA)2*RkKDFHhQ78J`xn9Ea5(U3RK^5>v55rCYbN7 zi^D>gc-CYWv>8Rl>WbHf1lA}0AFJiY43DZth~h}IqIluUg)PzJ_DRy8E(B<7ZQEh8 zye{hXoPci$H^_C5R0Tyhe8Dfk&#^-++~fC>X|u*EmTNYLh*{2BU}c?N%Ax^mvVQsK za&iaGxk^@?4T@dylVwNl8oP0&nab zc;aM}CA$05&|C|p=P#SiGES_s(>BqR5OF!9uYT5ZyCTP@%`WuXtJI!ssY_K@+V&0+ zmEsSC(BeSqMz!5OgwrX@hj2SeX`;XQ7HPNl`I7`2E2bB-WJWm?p2biA96OGJ1W;J- z%?6#nbZ?$(_d5|$e)XJ>%$db@#*`Ca(ty9}Ut;%OtZ9)rcuV1tc=hb|+S_+6se()G zg8s2ee7F;tB%KQWGc2o9=^k?7y+W^uwKESUfpcJ*oH62q!`IArS#hI0qtV@G-e-Bz zpL*L5M3&M&Q*us5eDXYI7?;DxFJl(p%kY9XkuXeI2BUBxkLK8o;0tOur@AZsQ^+!w z*2=fx=D6rWJk;Xl5E{m6n@~UYz8ANSnl~Tqh9jl>Mv8QWBW6OMiQZ)Q-L1s$*?cOP z>LQ{3>dp<}Ov%hJWR@0fFx}nvFrPnwJ(RCVTU8)!42TvpV{em^jvUv1BiH-@2~4{NDHStIAnsnw?Dzu z(;9bPBzj>?!7htx_(P5IJuXlNm`&8naHMDngu0itJ7M6Vt zTR1MgJucru_n2NCuqC&VrhwQ%#B<9nGyRhl&m@oa?+%Q%dqrhdh;67m_00v%=L1_$>xGVl=e$3w@xwP!Y3a2wnTxS{Hv& zb->asmo&--B#T$ z0$)4aj^|mnw!eMJ=<6sG3A1H4KCMS|O*YtY}^2 zuTz?_MtWD|GPWSt!QJRh)ph*u*8X+^&%hQBV{vo8Y)!?vLSQz>o`h}WRO$$Qo^^o! z(*9%#j(@1tl{s2Q3o|*KiK3k4sX*(hw=MC@RiNW5M*Ebrm)pu4-98&cf6hE+X40F5 zbcdwiX{mlOnFj|`ANG3vc?A-0Z*;jMXe>6yEH7fW+K^$|eRk;H65BHW`5t#E*4Nk8 z{$$3v5=vu|q61)w%e_6pzImE!dNJxkZg zDsZ3($f-&xttvXp>=if{ z-|GE3cd_VE{5kGK#OXu%LGCxGXNmC>s_5yCrg^F)nsj!@ynhv&pEzN#L_Tz$9azv& z0xNjhcD_C(_M<6=VBkL2Lm-KoouBoqq{^ z(dX426Gib%rK>XsbFWinch>a$5XL(VklrfiqGR-6z;(!GhzO_G(_#ho;qs#)3lv2Z ze07CnAE~)le(Hto3rsS)W{ymGxMlXzhqe18LHxKB4NOU$2Ow8nCpRY$fQy!T>&>22b4 zBU@)ej!6%aXv)k-pvw)-Fd`=&(Xh*7flbxU(2+c9`&jn{da#)Nju6fHGfno>FyZ;f z|8QLqEzyXuC=O^I+#3`Q_uK8zwWqIGuXk#`Sk>iWaWk5_s@uy zU)^W+o!+@6L|YW=@T`cW%<$>?Y0EbU^Ibd66nY%#qI~lD*vv~x>*YXX2T-)j=KC5% zg3L%3MC+x?ZXP|i0N-jG8~^Wkcly&wRCF=K~shg+OYOcwE~+jNx1 zWEM2inCo9ymF6Rq@a-7i{H3GSr*F(eDNfQ17x)VBgT`--7YShL<}Nf_U1Gy(=OZtl zbng>@vg&i5=88u$T5oMJYZK3^9P0OXccN|@N`qGOQ_~QwJ*XE=XWwE%Ri@1Y53)ws zq!^S0yqVV#FPuROrr}q|rHe6Jx(~f7;(Ywma7ub}eZ>Y|}%-u3L!&jc~ z`0fmmR!={vGd2dwPOx!DlEbAKRb%+dw-uqym$q32j9FY2bxZfK6Tg) zPu|LPO3TLWM(gUJQVP>IEYJ|Om2+FYQ(rqb5?gs2_y;8O>L^j~vSQZ(;e|3G^B=*R z$i7^Mpa2AUVM2*%pSoIxnte}fdXhTnXFn1>9=+QSDjuR61E7Pkly|Xi_?J_YnzZrVFV`H+?h0v~ z4>h%7e<3)|#mD6(DmMd?6;|SfD^wL7BOG~z)|{bNLrrAYqyzTQ!Qs`q)D_kn zqB%#ZDW{@NM=U%-)nuxIWB5UaKX!P~A8l@a4@RuIcV)-lNz$(0`0B2*BVqDk08Z}S=YE%>vD9ZRSB9@8Y4(lx-AC6aJADf`QFl2gRsO0h@*)8#lW5xSP z>$7&gCl^}o#yB}v?)Y9*P~#fcq*pO_OKf_%Mh#mG6=VVr?Ds7-Z=+Vf5DaBTsw=j} zIKnxo5(6(1DDL!d_ZiavR&%=Alf5dityiy1tgd;g!1y3VQbiRqfCJZl>uSREN#6zD zm2Q%sqqJ`L>UxxX-yUd^*17#*k8#mA{=#zdwUTSNRvTlnLK?-L$kZ?@t|V8^E`wT( z$EyM;`x?wZPUv9O31Nv*{$`sVT7VA4K23Ho?H9j$SM9)-eIM{NqsAFk6H+?S@B=bj z2^RW-!Rxt5IH3UApR8-a7h)+cxf+o|X813JkoazDiaG)|frsBQotE%QjBAvx`*9|6 za)(7dbf?ALoh(zG@qns<#t?clt)ub|5H(Yhr%t|{l3BB%TYDrSijc^7>6qTyzk-{!t2H;S8KPF4!}rpBmolH z5@P~d@ppr}cCoybDbM;ZWC^F~6_&3EJoQ&uzWiH96B?B0LGdkSE4`&mD_<|xw=xWW zI=H4%gHHOkYRkMGI-K5M$lzn_U}}|&5tcLjcFMTF5E$JS|O&1x$w9b zHj0WDML2vO0MtQJ^uO-bgL5gk>})NanmCVNZGL#_&K+=8yRmLP?gp#P-WkiGe&lHHKNQtiou1Xlg=VZ`sv-trTn2DCYFh{}8 zrI0d^M2nLH+fT9WnVV_KXct~bNoc;vi?W%4prpIrXW;1RXSw8dIS*%+6@;%M z#5EaBRoVoTKI2c9dfOqX3u>T+YcMyks&>X>`Hk)@frR=ZrpCQ)#790CuzT3n*EBYZ z)#&*rQ?GcWX!Y{UlP&z7B(=03JbUI?_)|qv<*xin)(+dsQ2|R#Hc@$CajUkr=H6BQ zTdC2FcT6xMK0Oj9DJEtAq}ilDHIswL*8e67W9La|QqUy)IFEa1(tOpPaLuV1Vq`bx5gg~hDVlNS)QZy<9=Usv(oCm35&BH-vuY&1!k zn$;?%Od>8=i1;UQ@b!>d=^EXZX%hx^p+55xcK1DOMd5+v04nmW+W+bp!*7)4#AyenSaJJ!y?@}3mM%!%X8F%n5_$_*}JP}cP@$7 zRq=3xDJWnXa%yeu_Ic6$14`eySD89P!l>&?ZS75O{1-jevy+E6UQ5$nxQ+r|@CU^y zaTIk4Rm@%12$DPGZ9_ZcE8=H7TGP~)>f3U<5x7tMquVFc8dQS&|b zn@k2Jc<}=Aq2W_O^bIb}phRTb#ng`NV4CR&+Npj^Z1zfM6ffocDl6_+YGM_k*2FYZ zEPh1M7trl}p+)XY@?|bst}vWk^H7)j2+yXkYtip@9RGEwC3wNND|J6rXX&g>ewI;^w;jQZ5*$q{3K7L}nf~=v6Z5WZ24N@0=n>TO>Pc#n=Fj~GY!28|avEZcq z4O`CU`QfcO=>1QsnlQ^Y>Z@KASV)j0Dus4S>{@oj66KMI_JWnnnCmj5b=*H#3+TEN z=GsB^CY~yKC(v4O?r~b{W_)QFugP{Pn4A9bAHys2X~h%%6&hkM)(DwcYoFh`64;;Y zkwXolu;F zCoi(IGkK*VH|gYV;aIO&Fg?rNz|Te5W_iDUj`X{;Xgd&Mj=um6=bZ!o zVnbIfWoU%82-<^z=g|j*Bii1B!l#&ZVaT=qNO8wTpZ@v9^S_IOH#13~2`4QTjzsEX z%&w1z#e&dpIMcssAG9t!m;pVJ%6?QFjQN-5w&UX_HT;8Kalz5$tht=vQoPEK=wMu2 zbYEM=)i1vX0o5?=N-dF(YJ{**St(vR9S37CR`(Q{AU_a&{A=L!M)FxFpYJyFifU~v z^q;~3RcZC1z-3u1B^jusAWj5gAba!QZ>vD0HQXdqRI>}&+)6R%*K+#Jbi=Ky^Qn2< z8f)DsVG^mnem+{o%=J6&ZxKbl^2HeXz|==?hWRx_6EgStuT`DQa(rv*E#s4maWEZL{AbLwKJ z9S%_S2ugLKcQE6^2uld$dm8@r{qKp%->LNx z+GLfF5%;f`kR=b+PWQC(JHg@q4zbm>;mA9LHL}?ATK>#CJX7$0PwELLe*AAaax2W> z(FyGcf!yT`qg4^+7ouq6m%h4ephS~_?xEhc82FTkRC2ZY`_%Kb+K&<}07tqSP7Ozq zSo~YYr!P|ZOMGH^hAVg3tObt3^U{GX;_~3)fF(d8x(cpFzj83M(TIZ70we+mSyNc; z?bCDH4W$mO28A1o+M~#lu8BmF?z`TGj%;lR&r{O^jx#{rDAXK~Jf{eDG21c?DVYiN zcu=kYrA!~FEwg4Wv~YQN@_lV9&078<#3XGZ8hFoxQ|%3@hN_aOV1)N+@BTYsA99!( z+YpYV5I7rVjR>;`x?u(UX=#u2Dm1PF3SWPMJ>HY9b8K+Dj2vH^^@GLiD~k|$ca7EF zA85e8$w@~C)#3wBzQ{_a6;*w{au%4(&hg!_Y%Lf8zI!A)X>7sd9CebC-peA8lM7-H^-6iN{?x`F@QzyTC!vzjhXF-s*(!oYhEl@`u(Ir2Hi{=bfL0>l&Qw@S1- z;elry*g~;|p=rlSdd^g}{&v2p;c#xd%)kZMSCmsxC$?jqL1X2j!`*d$o*_Rde+}!K z#Z|p)DlRE=4ziD|>8CaPK{GS*3rEMXleyAF_}lO3%E0O;blMl^C*c(9_+CW4elQyB z)uRe2Ul?-80?ITmMnS^CK;wRF#DsR$N4MVe1hw%xE`gf ztor&0M*53Dbg#rqyEqP;U?Ee$yiNV1#R-;iMDJ9*sjn>;D5lG$?ksE0vuP(Huv`pJ z5cMv<a&iria=UejKY?=r7Oe#9h%_-Qcbi;bKIvK|y8t8J@RXFR; zGs0@$5xJ0!{)X{x@{b*X;H43~;phL$%@{&+O^j2!o5{T(HqXC(TKnj<1RLtUY981; zq!Wf!tW%3xDio*%$Ip*U8^3!0?ZFIOl^WwD2)c#^(8g{-@y6vAQ9Rf+ai|^LjYjRTi7tVjtA6Jjt%~`#G{d5}J zmWGB)`LQ%Qmt+p-NDuBJbh_)EC4zFg;l4fQO>Eb1yK!EtbM(-z@HihEC4MP)w`}_Z z{P6kTdZ^Gh{_f_=FbRJ9G8!`dpzZCwUioYqRakY=p_J&e7b|7F%%Vv6SLlhpquVRv z&lyT(N|8~X%KrjrIP-Q)=c5x3LsSnCG(NwxR7u4Kk=A))uQknvB{8!Mxni$nB)?+@ z+f0{q;xrk5d$?C5>l*5Ab%-I@W@2GDfw?=M;;8vKll;nR& zYO+@Mhr80rgmVin8=YrWu^GNHvf@&2HC!BW6#yYNq~tYK%(aNUF+;yu-m56d+Hsgi zpEu^yxU~_zRw58pl7(dkgSe^qVNeImNa_b+t2HICe|XuxJw-sk$AnC#k6Yj}a!Db7 zbxF94kYEGl3|joxsM5Zb0nAefh^0i&+__^vBnL~rxBb2OkB_^0y_!-U*@T4e$Bl^V zCpk5_Ugzbts{M|m7MRAe3FUSEIAzV8M-MGyAi)7mXc^rUORs@h#FXdNDfDa3+%z6F z1sR>blE75_^Oh0IJ4cJ>LI+P}^mb=%F+e0u8gcipzWL%|KI|~-`?iD$ZD%dLTI~Kw zc{T5PN7y?*a9ts}%7MJ0r@Td>cb99L-Ii5lbSaS0EPZznv76C=kd;TKK&HS;;@Qn% zpU{QMO_gL4CXq$eDKk72jNElSVAofivOWU(0FbbnE$iri!~LFXP|i?^KJ7yph`Y}m z&24tGN5Ks9mGvel$f4j={pI3Wl*CF9(I2viC#A09quemXBZ*?e zaBk-*_Rgy9Bf*j8QyTpg@r;vcYJ#!R94`{3R9cHIuK&8K75R1PLF^z%W@dR_vBFqq z5%fY}*8n;!=vN>hwu_FM1U^>Y^s!g?d9oKTZd&wTD#hqknWvYonGD$+EKS75M5NJ4 zY(vhTNve&i<dGOB$K`M z2et282z&MN=bt8jA+dmj)|%(f55@^qWNEVP40z>Ny5#AR?ipJ z)@!xEI1(wV&=>wP^m!qF?bFM}Q^u3e4>bj-DmtHUTA`G|SuGwNgi|Hh?{>^Joi|I9 z=HYUVRI{i1_MjO(=eDLiiCSqXSq)7-Jo>MaCet_ZmJO(|g|l1~vXK;YbGM6ne|})G z=+TiWaw08PW=CJ*?&F&FI?w~ixluCgKEa45`$9y$X=(CKJ-!b<7-9kF`3@$>^vVUJ z+-DDS2UcyWPsMW_?hhH*t{}YQ< zu*AnjulMuATUP|~W|$t#Jf^o}<*LYMZpauj)!*5()F`^iW@eM{_T^h>+E!UI`qv-H zUv*{FIu*EZ?+7Ia!vOej#v5+R+5h0dvYNAD>I-60esu3oReyc#iy6`Di~PenG$@>9 zt#8T%(1BfX2=~-PF)_xKu(T&A#j=KH^8;qfES!st`=RI8vf&@{9gAERX2U6sBF2NpS>StXSd!V9llM{ zv1IJ*IbKUR7<>@^ksE!v5r7rHjF$KnItGKKp6mlVfpp2rZ$|w#`Dlu-@O=$#Q4T{D zua57kGha+kLj8$f%D(r%C(u{?BfOBNo_-EG%=_OHc6m0y0&i0&oJTq4O!alYhWQ+A zY8){grDMw{R}v)OhcOr$3jsuZ4F|8HAROS3vC!(tv->!HBgdp*6FaT;AGqmW@Mypx zHZ5AngMlvn>WXUKIH5Q;An#K%41Klyj3E*Xn}Ot2z1Ipma?S-^_)xV)*c$aK^9XF-C5_=SxdwD4`Qx+Jn9 zOfAg8t-O;-59U1n7et|?_^a02g19R!Qpgd#jN1`HRb8kS>R8H~l|G+)c)V<*oG{2X zX_Fr8iI>_-YxvK<-E_og8O>7vDUWph9`MEW61z=jvrvN`Z8*R$cT=yzOq@k4bTW>8 zSanGkB@|h6l5|s5S6m1;8++4{r2r~LYz#oynh?~uhFFsxz zA$cjZfanzbu?HPDMwg4*liGh-$Zcr{%n`6tpD%|-$#5-nP|j8tyQWzGZMS_!uuuhz z^#Xerhjp5?U##_J_@`b_24hQmeI&Fco? z+-#_|I5H+(4np9X(sNbzCIZV0@5A7ELDBr>dS5N7tKyXa@QqkN_4Lr|p5qJ5$K9mG;^@UH3<8yi zbwT0Pta137fk+6f=HOP0?ZuUQOs0721Gai#B*MSbP)uxdw(oSTWs4=u6d%9ye&-mHvu$AWbt(uTf zbb8L$At0^LBg`}sSO7>xDhgqz4N_H?FFkzTwzkgn)*MeW)l^%o-hbQhk=7FY(su7N zwLB)cwEgRZ1qX#%sq$~v;i708xz?{siei9Wtk1qSIb!QqG5NSL)l&^WUL$k4hPN^7 zC7$oc&fYiL)!7nT4z(PSM@tVdsG5`gwm>jckS?eUXi@3L{&4!9|Lxn z`hrrFI$Vv*DeElIEF@9JHd}sv(3W2;bh^e6_dA8k0p`*i8h*W z6<43N7s@_IFRDC0!XycTN#LJ}4r@v9eV}l$i-0&Cp5xsLQpHzE`@R1oFv&1lX{}(^ z&ESzGT~@bENXX*J2(`R2H{MyTX+*GYleiOe>|(ezvP|zx4mK??q(QL_HlXJvfuspw z2TJp?*&eeufvJWAZM;GAwOf3#fvWmcMDY@;(8Dkt0Lo5D7(omVn(DAYRbmhr^E=C* zZvM-#YLA7UO8+w`rCAv;xyoL*lAIzxFwiUgM+BlH~KsUynMCQTFe*MYV1HHldD{_49ZpkZxtt1(1utyut zp942q=p6-N^XtMaZ*L`2o6tz%mXem+mks(4I-@<`E<~>+O)UJ9E&fiR8Cn!?Pa%g1 z6hhwMZBn>MY~TJCf?OO6((7*NH@)I*erq5BU2-(Obb=P^rfSPX(cd~UJMYulF!;+0 zv}U2C_HOCXqmx_tdh2cq{xg6!FbWZF(h@!=6$DOE{{rpJEP_6eqvCo0R*kRYOViKl z*~!VDE50V0vENjdCDl0bTk8K`zK3Mit*rf!OscW!gwA(7$+zdPb=IPa)p^zTtYu5m zkKZnyDOg74%A|sdf*x~31Ion>V8ZOTED%T-|3MsFR<#O@oUL8s+pwOnB{_r}`tR_z zR4Fy-2|OCQCm*tM*r7ir?f;y1zvzl5WPeXl02_?RZAMuJnFq&p%(P1iIzS^z-a#gr zqgz|gq~Pu8MI2fxYIQ;?RddP;bYlSx&#`V3|L1bJbi`NTU>NEu;+*rAofBS;A3 zTUUIt`h(55Rr2N?-^D8?0(6y%n0bll*y~gg>y_;RRZ$k7rlfF-E_`%M_$n|H!_TOQ zxD8B!zgrU8{>1)S;^X(m3jupw5_?nn=8!QO6%d78rWW^(M~3;UFgtv{LU$AV0(Xe| zXP}FYE9l6(Oy$S+uO5j<(b|`P$6P$5FiDg8DkE_spHC@f_lGWZyh;@@!#5zmVB^F4qO4x=X*@A6(5hQc9$R-DrKWw9z^se$5nqn7 zYSs;Mgzl%xhZ!80sVrg+xAKCXo)w70MAn7frp-80V?1@{%KZMS|B6_wCJmC-aSCJF zue$h+93*_NdgTWTMm{yf_51D$W>c*VLv$QMc`{np*a^R-3DG|H-AvvsM98qrN?Dp9 zv$*&}@`{^t`vN%Y*ld zk;Io#B`f-qKaNe4 z;p&wmD>GPNMOW`+RwwP*}<9k%cK4TlV)#DA~V1morZV zIe`+ZYhb7@dNX@Z{kiwTeaOaTqK5p7v^xDy0dkQ=+xEb0IY$-N~1d-YOr*=0d#H$4U5(MI$tMUYtozIYAwR0YjJEg@k{{^@2C6 zu+8$v&StK6rWz11^^Q=jV(w*wT)f9#S_&KLH6ziGr(4T${zfjqdvu6HgI~g%tzOQT zy@3%uQoN_giw*m0xg65w#~7D$)lk^SHx*c*;hsF_eW}mY%=N%sV=_Aa;#N)Su}mO; ztlAzqf?iSN&f?A%nrqv?*r929*9QuqqOtFcwfn9T0P6J~A`G!4bCm-=)B^SzJXP?L zp_Jk$9$#%P!XcjDS>dM8n`Nt#kv_Ky@b~S!Pv_twe~cDHcsX8cE4g}X37z~S)zYfq zQ%rFKc*jfLY+=W&#~Gz2OLI!h@WYA4>0F{d2j}_luKNOl)k!bFbUQ0KMyx?;{xZe1 zOLMSjPlmur9#73_T%-bC#EpH8O?5#E2tfP_i&;+!PESX+Mq2yU)o6)QEqj z$inyCQ_M+v`&Vt`P?*j4;WXL{#=1*mB=Lfx1a1`D(Qs$K>8fB}2ru&8V4m!DPpagT zcJ3F03G>hoIi@P)y$R7v&Y2a-l*C0NE`{J+nHc|lqjn4e8Dkc#QRh}LJiM02)~Uh~ zA~?*qTXutJYK}(ld!R&too0@m{u@g+e z>Ypfc);Ml@dk1uJ5%3=YqvC%{6peRwV4%SaD{Q$vRfL@PJ4d1_dbuEEXelU0Uxk&T zBNkGFV3<`Z?|nO>V?99>2%bB#Q&b}XjNc#qHezY!P{P%8ya{10x;&T4Gaf6b7)Cvn zood7HxF$}*(tLNcG;5C9CUSBe#)uQM(#RPGQ<9#dOEvCTZ`Fjy#h9W6yN@8KBG?6j+*{W4mciQjuS*@xkd-By7$ zVw~~QGhi?`hIya71eYD|R_C&d?s?tYdL>vfbGbn#*_E;S;))aOSrOlEUt{zXO)McT zcIOIs;J|X~|Bz~9YY&!}Lxsm+seN@bTdG5m3t&?b{jQic%OJDRs+r$q53ebhBb0`DL=L9M+(&@!W}feYB%-PoiTL<1WKPYjW8KEM&fJvJT?;xE(v%zDd>N$TU|Sh@FuTC?1l|>NUdVr|xPGcf ze7O1JM%qg7*F0w~`s{q1xq$8_xA`*k)l>mjlYMVHhN*k#n8c;d>s!Wx_1eSkOCvF5 z<1&1~*k<=sESDw{z~P~sj(6ah%TNlrk+xx|$??Mwacs}HY|5AYK67}`bXt3&HuuD) z`ckpMMESrUk3v9ZC8X8-|~(tvPPl&jtV#@5WsWjJc+GtCr{-0H)(^;v_f>{;p4xb_Nu3PoH?RHaREB#Et+J)3 zXAJ2SJkh}lF8wXIcJ#{}{@&f%I~z+#Q;p-?KR2zJ(;da zlO=BLw||J$gC$Jal9zavWbS20@zp)fvNg}x&MDE0Q3a}(sjklhLf*jVJz=leQ|mOtw3Xg3!<=fz{zOr*$ByQU#Q(YH zKuB6~BqxF&VNQ#Ose`S;#SRM$A;WQ~=KRb3`5g>Xp~rJ?S9QXU^``-pjn7&Lf|8$E z*`IcZ(%58*^OwF==dc?5wrr&L>r+XCuSV~0Kr_~>CQR4))-kfdbxF7xB~((G;0SA* z{grqez$0k6XR=G0#r+{{>BRfs$R;)E-83eMOfUw|PO{5R%ikdaWP$`6y`>5~+gFcD zK#Q!GfE0#D5cUit??dF8hN-7Rb_3f`8QZD;sEri^mo4(*{6=<-1q+Bn|Am{S7IjFq zb}sh9J@!-ij$V0SO9SL53zP!p3@dXSW4TM5-sty&%bAXdfB3Du0+)*oUJujXLK}NdO)M5svn$w@3Ib^LrK)hCf=#I{=`To8K$4^zX(KpR}JurhP!Fn`T_U$??S8~0>>uSNv5M*x;f zUMSSt3~ugT8%I4+*WX`+GE8>rQkp0Haox;E0`FxV`TZ`MtRV15?r;8N2w{V;&MLCQ zL_+3~eF55W6BnaTtFF%4Y)~?NnzrbN=@eX~?#+XP}4K#W#%z4}o1zyRzSsp-)}|8Z9| zGK-xdE*NP!N%}gHyKojJA~>20INu|ew;Wi$Q%A=ZUU~R0(j?+lcRQ^#pSw%mRDNk1 zt*d4LKMeFcN`JAjI7X4glMY>t!Dx@BgT(Q0)S0WqeY8`L?i!e(jCjXPi1Qq3;<-LQ(V1t)s3EMpmqNO#mBC+*y3JOx#_-M# zP=luXHe0MDpO$mIg6K#G$6gynEJdpMI`m?Qakty+;axHIl?UWCid@8{pcF;w1rM$| zNLRa69fdzmZyucFam;xaqB;H^YU?GO6UIby3$_;II&``q8i=>Qwn$e?CwjXU{M?4%K-bK!{7n*#0C(+OA!;IjbKJ!j`5Xms6{vQEv z$aTSW4|0p^IKWHEqr(7L030pyH5QP@pbSHDps%Jhb6<*l0;rdhwew9oX9LW}M$7ALOW(;`D>}R)T zmw9sT?5*{CpFRMs$X$QE_VxEQPs~M>bn?dyoRN!S-n=$mkJIw4bLr&Dli8^2E4lE) z&Rv#d^GISl%gFQM2NEk)lfVCNlF3&jVSXM40ZVc=Z=Y19gv#Eo$42?q_iF#l`uxm? zJ4roAyDJYpV!pwXIRGQEr6VdMcT7Wu1+8e>ih;Ff}?qXN9C(YA(tjd!wh}tl`|}jDN6iUOusE9=i8Sn2Lz->7`cT zo!1RI!9Lkw{QB(F3OH6k-t$O$AY5qgGiX8x{xIKD@kfrT;p5%{VaeA+p#@~o_oRO& zF=;huqKT2WEWwI=E@{6NDT8>vmr_~8JrB+wC2$}wKlJAebn)+e?L7Wmm+!s59I1l1 zGW#bc2a@~hk>&U{?31nUAuSgJs(i`fBC*u++EuD5_E=SnJ?l*Sp9L{32n zv`diUq1!iy&iOq@^(H#W%BFhr7++?3U0>Q}#A;B8YL!UnI^4+OVw8!Ou~Z7|bmuL) zHia)P>S3wWzf!kwq&HRJff9AqYP9~l2bJ#4e+T%~Bn|%`msz`*Kg4P2?Qk7Wb>s77 zNO#9KA`G`^hpj^D00o_nSvK7GtZG%GIh+)q)wK!daH%&}7QqXT7~6X-If>GgNG!Xg zQov2t&VQ9VL_ZF)jy}H9WektI#uX_yeclP4V{ewzy?*Lo{ZrMp?JHQqA@(wahNLWuX#p6uyLZ@dc)uSy zbTl0%B2j1_YOK_*V2ci+b1`qoSBVhta^d$LXLvhR=0)_5h;hXIs+ED_nU^qd*=L36 zZ132-53N?%(L8Z#VAbB&KigZ%5fuB$BY-7mbxE_$yzuXu+eaf8+Z{^b`oL0mQp*4Z2f7N-9x0Wiq6wQT&|KU& zHWRhdzQym{DXRk6&lbA;b`GjC%9tZI_IJ*&csSk=!zKc^_3ocfp`jlS;aV3^(75nY zZQ}6RyR;;Rhk2G_q!85j==gT2IHNxJG-PtRVQaOcciExfHA^>?>>3ArcBZLc9Vd~` zUPBX8#YVQyLZAW$A$kBYXj;3K%*~?aEW!3*ggN?p->MCU{|&MQsjTKNX*OlTnr7dw z+s&_(IoT?E8OfcvWbaHXuqd?#UHyS3p?~9KLOIq*<~q)K@tB+7$uQ7=1XSxysZB@t zSlKO6qn0t1#flnt!@=OYcz{jR(4mHB3oK1fq`F-LF2pC*YZdudUF6=d5qvxg_!{>6*HdUW zX{Kc&{LX06uP0m%`~{!p_hfo1DkD(c-8wtSRw?PN!E`XCZQf&)uk=G+Rf*{44^)vN zDZd7P#PVaF*n$hO-Wi!6QkR(GuhhL)OA91O2$Gu#YYTzuMMe$s_VVESQtOU`+T?HJ zbocBg#nBHU5!?8j`>Mxi&aVXtW(iA6S1ErR&y#lV@9P$gtd$I0t`}F&pZOnJGo+96 z7H@=EIC4z)_N^h9Y=JW7U}lVudA}3>mp!XQpA|lEAuG12Q7S!r-13<1LDEbHAJAg# z85IL-{Ft{VkbBDN9U6+_%0-b+1vAR&=DeB~wLYRtiEJ>FjTiJlKK{V_P5jbCmvq5@ zN-Io(vG&m{wqrnahsFJ>nHyWEfu1gaeZPe?A1*_?@ZXXB*KKj~S6;8j%O?|&UA2q> zlLnQ^`ApUU-a2};zy0{FF^3)CaDEOn2&q~aa%VbwPKd3)mHub`v-xa4!?ddS*~>?E zX?*k5-%ktsr+;nw(BJV=J?CLnBqUMcaXq;!`+M`GZ=bBAkN+ib@B8DihB=##T{GeWK+WaeHEcxrja4W5 z&u0>eQ&Z;Il!pbCd8~%aCIu06dagchRax8gIWwsvQOJmTl>RxsABq5qft&Glhb+Jv z>iC}#kl)p%?1-dVPNn8a1-&{yB%7`z#+TP%Aqr?QwBQoUy8AJL`x|jFQx(Oy%&pVx z@upU;PNK@J`<2mx??1QkrDZ4`S3c7J-^r|aom$4B^rt#;SCDqCk6sj2^5Xl{okHOO zk$ypUWdy9q>O*1{zg1!lTih{#nlC<5-fMi*)^%u<&z>fFJz#M zPft4ejj<(|2n_TG7ljuHVeR&X*nZx*L7;^=1PTupnNo1?cpsQCXpqKPTvZrBO!LUm zk-kGrL86YDXfV@Ci%qol%-}EHV%%?vTfhjMCDuu0;3sXpS>Y;&o6eb9QRt=XCwW6@ z*|FPZG7ctVtn<5inZE(DNc~O7^!yQez4gC^;~^58p-2 z?gw?^s`0PfAbel*Q;dQm?)&1JaV8MGT+6gA-T)43ooS5rx>E@WaxA6EU!*(Z9+oOj_dQcm4j`&wgijTmBK^ z5~Io$u`$3{z$>}h%58p~vL)g-Dtrp2 z02%4MP!5Xgzj>%xO~#M!&TG7lAtnNMiIuJjIvBzH8gM3hZGK*>)pGRVRioci57OMx zg@3;U-U?}V)=d_Hk9Jgt;iIX7%ncQ?Gp9|y5M|&}xD;+7?I_^lcgM__=GYZcz#hc! zK()H?>|$m&XaDi&4b*Ou%TomzR9YgwH3_F0;vFqYK5_)RzN#q}der z*Nn2|F&r~z0 zr3XO%fOU|zUg;Uqe2or6-B*XG9%a04_Ia7b&rMe3LHEn-Re^@MYhjvfnw+Ek?f_}I zpmp%;e71xYv2*q?D>nuA#ojJIq81ObJkULBNuuP-F8&AZ=f0ny$f3~8Z*q=AI`g9` z^iiA}sPAw0B$$$<(EF3W-4rotOm6dl7Kzb;z*QDi4(= zJ*?wuVjRQw$)q-aSD#^`2I7i)Qs~s8NqKNV zOQYK(7b5?8UixeyeZnqU@)y+|ym@6S;~AWpk~?TG6{Ci0vKCwchnsdTTxnCGF&dp$ zSFg-T%;;f_ah`fx97?fo`f#EUQo9;r2J-sb8|hi@m^aEFqVUCU?o6TZed>;L;U_uY z(tEdU+-f&jJ(bq!c#I!l^tH)Azg^Ip^Ih4@OWTgKq%l7!f`#zMl7p==Mfe&>di?<6 zVYd%!IDlsGc_+^y2jU)h7}mfxd=uUMHabJ}$Zxbh zQ_cyBa^(CCnrLW)-X|G9==fGq)l+8>Rzai@p?aq!iFvcwK`w?ZoC?ZDq*OVCB1h+N z*^p88Vd<;9+XjicKR-^^-F8HKLn|1{n6y_tCrj_;GfJLg0rPM?9=>2JXEhs^$3E{1 z;&r)xq^RsB`mzuDL4|LmN=*p8K#|{dk!&yhAj0<#vh=}ty%tP7Bo*6-9j!VH2nsJz z99TWcj4RcfkJ5PY9h8`^@jNJuJz4Z_YVPndZdqT!=^8p=`smxJ_gE7yfgCxSeo}$i z+ON*9JfcfpP&93g6@pkCQS$5{#J!jrCAmBG_=R`5W61uT^Vo_o;;W4ku!?Yg97 zKm8j}k2QU?`&@72jljD)yD`}fPi=c5ON&SXH1c;xz>wkt z4tSaRu8b-vMVLcv^kV$vM!{kcCcJtx8J<((9u3EUJ9)SkLXgPd+Ky@d9`j}j8%`}_ z|BDxENna!1C8yXYQT$*hP3L&Rz_lwB4%<1YzV|X|MqYJ$j}C?mFH+>!KYouJou?j| zMo0;M9Y*rt0b*+nPzGCs#!1XceQ!L(1e;JY0Vq6wSCHtt2@aYnBTm`NIO`OHih2fV~DRi~6U!a~o);prB z!Zoua0wYZy-#2_O`8}k~x<1R>DXTvX$T|ZSgXg>@z+M1K>)bYNzjk95b91*bh69|X zOEvZ}?fRvgt7~h@EJ+b0f5HSSi^gL;NgZhdV+8R+b#K=DN)+Wm{hyZFwH2lW*j1Kb zBJEqeM=wJl?PI496IZ5BjmRd_H&+zquB=)28}tnmzEBLZ(p-F8`OA;)9JkBr6M2xu zf-Xgt=0JK8Urg~L0FBPXzN38)mDyiDJFF*H=!1+iEf^vwAN@I6c3uqJNNL|L^_l|a#}EL;z}ak zsCcWh*E0D}chTuSxc>U=Z=k=c2$vi+al=p704C>UKrZSC3(Pr@^NQsoH@!gOIVc%Gm!1p3QNJ9F`0sjyE-6GveX!<7R>I zDVfRD*y753ww_#FQ`??pMYaF?1&&%R=l?OSrBi&Lkf9`zkqdpCE}o^ri!`k){c%CHM-ke(&i~Hz&pN7s|7?# zoN?mwc#*z%0+4-emePaVjzig|Pe?qI3ji*hT&-FNGA?Krnw7oIuGT!X07rJ+wteg( zETVW9`Qj%*hLZZj_shZ(`C#&@VFnQn^uwKQwf%?vFo?28BbM+TI^wHT0#>TRT$|&a z$Cu=l-k@+UK6d>;_#z^3@sp}n`*%C41W}1&`G=RB2}ut3cw#dV{mxKHE7jR>zDr9! z$Jt+f3s;M?cth22oh9N}x|1reYmV&+rK>$xpHwf9HZ`6@=gRn~O!g~R^w0lyHvhTp zhca8^8Zat1i{gPLpx;yd_30`#n`?Df*`Es@Su9o3327}K*~pM7GS@VIs)8uVCw0kSh?@4X5;L@<82`XiZr;Elehr^1@)zs}$lc}HLcGq4tg5LBW z7q%@+BRNM32?I={OnVW`xqAz}8(gJ$9^>Gw=hL^6DkY7D9SuPYSTcH(L^U zZEpjaivdc+AQKBPFSWE(X{|bE2^@NEg16qgzHSKfIKr>qHR&!q*f%s zD2HJ;LRY6gKO{=5aS>LwbxdiTX3)4#{pbC?6i;|c4hPL>;&cFgim?S$ySEs7E^(9V z%PjTgTES?}&qL#+x_iMc82-bD@SpjOCTkT9Zvat*RLGC%pRJ>X1L8WPo|dOrNx75d zlJ?R`X85W9t_o1mwKTuP6{89zRj`8g*r!u3-A2(GJ+k6Re$Ql8{HR82!$O;af{rOv zAvmWoCOMiCP1X`#by!-c@V;|Nd`s$B(#kHu=*_(8Kb_kNCMl7Tvsjs!Pviqny#d7(_-3uvpr}R6IBiWmR8njlo>X(3O?qb1T-LlL} zJeyhDkBl51C0)EC`*2O~_*aRQ*1qrPySzMpBOsg<7%yai+0T@Kgiqxv1f}@*qM6gg z;g*5}cT^lY%d?{suT>1w2<~x*4impaQ7opC$11*0UHPsQ-8ROGaW{izhwP-Q-liUY zGm%L8+&V0oPukEuQQ9Na@}VrM$0KKFmO-XGD5W>K@s}5Uzxyq=w~sqJB(ed|U2|b+ zL-!>Yy%aQUMi~~UrE>wkm1?^h1}@P3*$dW89AQ&~ENi+gXok^s;HNy}p_*e%&Ki(Q z2*FQfrv?|PL$-v~kK|9X9c#%tR;tu2VhaEvdThv<8v^9+IF(i5&jY;aG&ekVDU%;h z<)4_BC}fs)o;eCo%%w2XGJp5&TjspE0iaRllOJiLl-V;^-n@LY!|9*f@1WN4 z$d@kCpKnts_FmG8uH_5m;Zb{~_{Qu6z8j2JF(Ws0Zp;>%JW4QT3#8*t0z(unw z(%wUZA1|KURJA_?N0^B*ilR`@9E@D}J~)NPG`{V-_a|aar2P*}Oorx!1lyzys1f7| ziaeghaD>^#VT|GZHl4WnMHN_a2gF?a>pX7P;Q{nrx9^R@*RKT=QhE$F!=&-Obvhw+ z7Hjqq^AiBV4HNYfNkVo)l7KB18kWwo~5qSr3K!GNU_0AQ=0qgV5 z-I6JRaDn2a1=AYA1~%~ViWw!(k`5QI}Iz( zjd?j~6^H>9hcuTvcXnQ2xhD$TWkWwrW!JSg?)X|87kUR;w55KD>&+#pD7n7>W{^;^^B zpvQ1AAX_%_m$$6@@3BCYd@AT6G(Jb{p7-7;Ot?2Q6lvmT8LW&EY-?~X&C9uq%jz9} zI@zjb@2MC<5y#T<@!jta_o_Ek9pD@l18Tnuo36_os9J<*@U`%ezZK56s)gJrS*zjz zbIG7LuGbBHcN;`MTjQJ^FJ8qC*?FIHU(4k6s0p+9l-(MSSr;>@ zEMG~?T#Y&Pb1CiLE5 zM3|2YqZVqI1d2V{s|E#)7NvQO}&6=9-_|n2B-G<2gc>8owsT?IjoQv3Q3B zcEngpx9FMT^X~I0x{|b}TWE$~p>z488v_+5@vkaJ%`B;GRfGmxqLIXhX^PZ8N*+FO z!S*1*oGB_9n!JI}K9q17?Viv)MJoaO+8swsjf$}_)PeUoWsBg(JMxfJF$e>#bN68k>6_Q)!RnNswP`p!Li zFKlAXgMF`X8Y6nZ+{2YXO4WNJo7FZtc#DzZrB?1vK&f_TW_(vtds<_X($3?B_XX~v zbw|Iy&*s5`-*-swPQ6wgM9`Hq`$?A8thR29lIA{i`Zvw_=|M`}k*?T7i5;m)0iegB z@6NtZ&MCL$=WEFk-)4mQS}9^f4($upzqPbB3^sU~?`UtyTi&hvBS*zkdx+B6*ACSLTuHPbBusl0i1|)LH4Pc!r~CT`_r!^i*mbDx?G{WA#FON zDY-5VtnWW%8#Qi&7v}TeZP&4uj>6nxw3fy^%itP%!I11LOU#YD9EN*}8Qp@b!WvL_ zga+)5pcgd2C=x%H{<@kCBE4tO9zQO9OLbiv)eowFi)IclrWw$>ZLCT+;MCR9XA>+; z7ITVRVA&@EI%`vsTRE++Ocs{F<*qK^DBZeer?tcXf1OSFf z2VW`lO<3-u?}0H9mzMhTKukaZs2q1Ne-3~<_#h$gjCxwr4wnlYzp&R2<-B}u7$v>K zdjEax^VKpGRC72!e^)#(?%Q(U5$e!^kZ*!N;EG&s)_U6N^->6O@1GpPEW8B9AM(TP zAta@x(b60q>f%GyxD=(TaYliB=q%l`w)5h!aJF_h=e{Zj5JCbbCw;ZL2xo6~j zwbeJgI2z>-j=cAKaay4pw4@-6WnPN=G%Lw3i9!CNu#Ik z!sDXq6&>J9udh=?EKH!Pa6r|JB0p@OS=^c%tOkTph1r0+cl9tYrgI@xuY8<4@6x}0 z3mkqE;G-+KP>oesr6cDi%kBfkH!B`UpJ`futHXRn+Ps3RZabGBp?rax($0bH{ zt_I%}s1`G}*1-Z-X2kjo$@ZjP7cxzM_j2SGnj_k+lNuk4xGy!y64Hel7Y7Q20nH9p z;}&~o>#?;*xtNjBM2Vs|tHdP|%+HWwB8&);MJ4-Dx%&;xeYH9fjL2K|Jxg|YNjRP+ ze|nP%n9OhuvemxhUoiN0-!z6-xc8|((=%@6jsQkXTFz(PG3km8<*_TQoV*}mUOFQj znW#GBm(z-Or!_EDZvwkI|0AG2)F+Z!GI;n$Mh@p*DK((tV+WbFkC9wShZd4tc(d|g zIBN7TBdJUA!}-r~(@18PJ6mi8ya6dsrM-ZfzXJFEVEZ}lCA!HUuaj&SEq)q9;P;914)laL#Tkc|rK(nH#`K130!o$s-qaC9XgRGiA zD-nG+%Kt%#eJwR|&Ee;23Tcs=^D_LJdr-QT$^H^7SfnV`3&+mmvsj|XvVaoXD00D$ zrUa}5-&_4lmkfO#gC+h4=D+Bd*-Tue22I0l%>M>Lo-YS(m}wT z3B-+kn+y4Yl)ryX!rnCp*++tE&14l0*jYQ}LTTSlvD5s<&|8NW`Ues|K6{H@nxB*f zA-PfHNapm@;k$|^$ttcmKof+g#p&fs>dpx~z$~SNM*Qap|3%haAz2UbbGiBk{!?Zs z*x>m=E?6fd!f_LI{C?)F8oFp7sUYGe|E*wEmJvQsk-$WoxE4)aZv3=%<)5O0J7>n; z1Lak~G1cpGHEbMp>5IgJn}k|r|EtDl7!ixxNTaf^oa$>$2DNk3DWWOAl9%xNq32zI zWwh~hNeDWiC}blT{J_d~R>;G?E9GL3fmt;_kZ&>!K2FPWKTIeDz8f1j8g@Z z$RXqH7K`cLc#J(8q0MsN5tEsv+Bg+hbRI+II~&sXqEc2n`-Ebg0a~N~1mL6b>b>IP z?2ijbh-eZAS&w;QJu%a$?J!LGKLWPi!^$udm#tho!?~;HGoa>TIuiX571b)r3sKFLBs6WV)U8UE&_?i1&<)8guwYVddA0;^$;a7q_P z0X5|w=r{bM22a&9TUDd{_Jw;}52~C`V)tejhYW%hniZv()r;Y_# z6(eC{&U02Sn-0qz1{3C*2Nh3UI9s|wf8BcjT?RS1%D1yJ8c|>dziS8BMnPY`? z<`jk6L2}rXEB2P2a_p#K)DG?WUjBl&UtI3U_p=x>Inu@J$Uz3^U|)c**D=1KJqN;C zHy+$F=lL#TH>p^a$DFFD+8k23?Ob-$yfKurd-5^QPDo5Xs+jpGS&h7bhN) z3pw|jFz1;~rS38Fjv^U-CJynw^8*7j4hmO&tz(H3gLT6`!*BW~A_U7JITk%?b#j!b z@0zJTP*oAHy$z{pD~DN$b9i1{J^;GEVPjx1i|UBg3?&gr6s+;6&8r>iAz=3`JJ%OA z6+;eb>C6)Ddd_?p1cdl-=-fR=3uv0+nsI%&IgC_(Zx`0x^YW=Cp3SoOp{+ZBE^BF- zXu^aODq%{;`|$NgmzK%F&!)b!qH-A1o!>}a%g^udFAx}4N9ynEPY`DX#|W&s5ryT! zZ4ML=pW`M#CqiH0L!{U`w)ui6|0%PZUGk9X*w5vBJBn{3pGEI@a9#WIVybf;Ccc&i z)7_NJ5{C(-Vy0^0jz)5^;CIlfs~ClH`2b>paR|-poY!B^{@?1hkDwTFOSENj3Pxs< z=i(2%kHVq`NCx z;te5=XyoEj#lAYA&HftM*lr*vFIt zv@|04++aC#9n-ntBE7{XMdqLYNwY`V!+Nn#r!8@(b-CZ*kfA z=(*}SORmy#hqex5@Ecen+6lcg_wz$XU&^F5DseGA>wtRdqm^MRliHqjvNe!qS*pX;*xD_4=O)-WWVsi2S*FAEiWMti{ ziR&h4VZ5~k)o#?XGdVS>O;9Cufl#>^F=!xD2^BtO2SUQxInq|GoS6dp=gKkR8GhFF zF3n>)2sB$x{j|t2J0sc-5Ula)VQ}&1Y9Wj0bVWI0P)o!wC z#Z7)2VLZND{Es#_Hzgo+w6=Z>kt~b3qTE$9zew%O!=9AZ6B3B_2x;Pm&^is+)OuI{ z5{n)T-hf!((Yz=jAZkvu4Cr8A^`g8#OC>I%6_>{O?xxzHYMDWlP46qwLbzu0bi`i7 z_!M^QB#0;zYp^d*HjUw1o_cx!4mtR(fz)=>smvL%E$iLR$kGjpx<}Y)gIo$j13sKD ze&^=RO9ED5uB+^jBFN%b6Lblt5-!^r8X^A?RIcPph_OS@{-~ZRzi_38g{&$wRBJ`H ztatf*3{v0fOIi6*3l>7d3}=id$5C={W|85K(9E}Nuof4kM|#y}7j|s|E_qnLe6NWZ z=Wp}hxl`WyI&5~f;a{0E;l1Jb2$ElTU-JqcsY1L;PeQ{J$A0q!2GSV;?~W z%IGbw`nfT2J*c+;!0cM6Jy06%t*ZFWsDdXWkf?r)+r~MacH)tUMnw znDG%H{egf{2j2()tb9kAoaJ&QpoD~+p#e+!SaP@~$ErhTg+h;uhl7(Df5Grx+YeJN zQfa}xf7KlKEEE`!f>iq4;gvt{;;SQ7n{CejS|yi<+20u-(fx^CLu6VXcE1{}aghzk z^Zj_;UED4bWMFB&z8VA#D<0WjNaHJgY_G^l`eO86|K1Q9eb%yGEq!kLgd}s!I+Kn& z-+Gccw+t+JeFTE6T4J3h=MO(xh`8oe`--Ztl@wV@(YBXV`-~3q_nPZc#b*a6tcU!M zqO*=_`fbBF3L=V#fYRMaw{({@(%l`>j2bAZbd2tn5*Um|rP=6|RA8f-Y=pzX@7;UO z{@vO4>^#r?e4qQiuFpl5LJ!nfn-C|Ji1xrq)r<(yuaB?SQD8qm#48AB2Dt>>QoCy8 zc1QI7fo(;JlQq>+itpdk&__dq%mU`a^R6nW4;cV7)!#a4!9(?xeB!&BuCpnrC@jzZc!*EuU9p5At?dV9RycuV4VMO$7P z_tARg*LOaO9Hokh)r(-J=5m)k8MzZhR2l9~_&^X|oB6y-MhR1}|Fdoh(Z5n{T0kw% zrY%#i-Belz;h%nb`6Jju$XO^>oJGAiU3e2QqHahKc#J0H-BSDiX`MI~9gH0ZFGTi5 ze5sb#oClv^7R?6}PPr*VjbJVOaqU^5jgJl+yIkOL!Q{y?Id!T~pZMU78naQx7j%|3 z`^$6iW#pCJ4AWE%sssWbE2mRLGo&upY~|)>dgdAF)`tg7E8@RQ{<%5#-l@w9 z@Ti1xi;Z7%MdMJNCZ=5X~iqYx$@5Y&rd6GO(Q)P#B$`%e(`dx&~;e5W`x}#CpA$X7?_yH&KXfk z3@^a`iTqx7)SFivbmym*w(g^%pQS4tY}MEeY0`>1Y;rfBe?(8|7iT6xBl?Sa@>j#d z$I|%NZD2!_Qz}WvGb8$f^3g%R;Nv3C>hnL&R*J%g3d4Of5hPx^C}iIK5C8+LsX=4{58IEf zvpxOMgGqmaBq^+`Q=AO?%~GSe*ir(HRLeOvuV`Br_xTk4)^F+XgKhMfKI!}*YWPe~Hc~YiruqO0 zX^-{-0H^aHpx$aNKll!>yM%&q#J_`2l70Q9s+of|6y(%I%Vq_SKPAYG8FD{cl<}wg z8)>bRU#)vdeA?+J;9h7NZ!hi@R%AG|aM`FU@nc(@_@y6bg~)VNu;7EmCE5O$ z^lL8ILB2>4PL1+*prc!%hCSIJa0sQJb1A2X)R+?&gfU52X{g*a?9)807z8<* znxBIY-{&;+Hv(t`z*DdMf%qwqB( zwh_o1_|##ac1#?vJy1=i!xX&1pOEB~Sijku^U-ZGak>I`?SFFzC-L2x3|*1t!Ubkt zHOad#_760@6=;pDtJ$vh*QWn5_qJ`8HQ*9ftl9D}rS2V%-usJ6J=q9rVA8pU!l+at z)5jN5D6G*FKaW+zmlhTD2%91Py0dZS<96y z)oE(I^Af z#OWpyN#mU}^7mLYrbF_5PilmFnp@a>{X7qMInL=;<=0ZDH#=hVv&?;0G@X`=$qv5C+jt2 zQRD$(Dk6RmTQwvN+csLt)>*|?IfU{1w1A6Z&aG!+he}z#XUTX-+L!$pEm45b9)eLLgR<+?1mP{se)a1(zHQw~i~Z2w=DiQ=_No=D z>2iZij6ZX0ip4Hi?K9K0`9 zYIG!pmN)+cd81L-nX-m=6@8fhTL4!eyIBNZ4+}_cM9yecqYH(|jN<61E&k&HF)KBQ z*nUpAOB>Go?aEb8U!9ra_q)QBte!Mp)|(sg-5Ac>#p(Wy{VfW;EDPDY@@+3#1;q3G zLHm!>3f9i-#$WE|X1&m0GsPbuWMFrp4vQd`o!x8X`wG%c z_=U4iazwjWA1V|8^CW$-F3c(1tW(R)VJ|U>b7Ds^xcOee_&UM zlOTSDCtR7&=%#yXEB0sQ#0N@~BM|&g_v{w+AaEM~{UxzJ^Hb;7Gh~J8X^v3XOMK6; zMUe=3|58zMRZYTl9=gMgkMHP&Whd#^hRPyq5TtJa!?@9!yy^0O3?{Rag#4@t>7re~ zuI`fdGD#%Z6YX=Pq_gJUt*W$3_eoxFQyVWfE~yW<{Y$)1jj%yKltjsawj6~eYPGa~ zKxjccoo{PHL_6v*^T+x26Gl#F_ZfI-JuDKyRyE;3&OtG7BaH>XWAaBfwJ=-?x-muXkxcEY?B{Ox}0_NRLG!$*1XC2e$|D_S; z3$4A7GwV=T#kKA#^Q}Flhx)O|Qq9x9N)2#u`hp@kmW^ z;IED6J^TWN6ftDo&kLA9fFlwXI%HTeP5@eNt8){Z5@28s;d1olI{E%I`qQCLf^SrLLeNF4p}jF(15vfvH$^=EcX2RTs^g zZVpk`zb<*i9Xec@n40sqL%1U1JZj_00YsKke~R8Ry|G)Bg$VS)C;hHG`ZoYBweG!4 zG#u?6Su2@#Qw>6Y!{X~bA8aC~-U#oBXL~-5uB+c)9&z@nS{dROCxtDc>hfg=T86z4 ze%zhVqh?>~TQlLi8h55tQ}<)jDyRIP9ZtDKH^Im|9i7JPu~uvm{Lad%l%GqdAZV6* zOS$WZvpe+G`h&r{df-rtvQ)ccN-9!tVMRiMVs_Gp16(4B{$vN^=VwM;jirk(SXum$ zZiY8?JaTaImEX|(#uD=PWyy31G&ox{K{V#JivXIV50Lx*b!qGle^Wu^)Jh#?gYzFC zn=An;>NtU`@1lEnWahZvezyf)TY`2wt<_17C&^UmjjSTEHT)m11Yhr$af&QMt|cWd zmg6vB0)8bCm!s4G{!Ce3*Pt;FGu9_($)I64FP5)9(CT4YcH|oMdRrtepiu1@Dyjze z`sq4IV=7xUG8?4R_1IzHBlNd6H9q&p36V0Hdv~>iS#b=|5_MhR6}ZnJ8n<2?+Lm84 z2i|xysb-SW-XW6qNNX3SNRwEx@W(YXlX+!p0SV#G_xa&-D7*v={2sUOgJOhW`Y@1Y%#P{`do%cchO3+nCc@(tNmDKKCrEBE9ddbdxl;_d0U(7)vN+&rw zxI94`uGhhy`o#O1my{E_&pX7A`3N(k^r|{+@CP*f^dh(XhD*vEIir5Cdeb&C)-V>c zkec7?ySy~zD(f;0^8O&7ec@E{-kGXU>IOddwWtq7q zLq)P_Kjh*n^~Aw)aa)|L?oA#k4h#h$dnAqR!!Du(^MR}iV&btC8_lDwId%pMS3fi8 z`aGsj!+{D$YWvzf3Qrf)y-PdLZ_r~0yypWwQf2x1ajoS}b|88CIdC&2(rQ&K)em+% z1Q#O%6j?8VwYz;*c6W@;Ou(X>Dk5($lvSh|V?G)dZmt*C8tfL36|eyX1`%BEj>tP8 z5*|1hGa1HZ-%c7w$#2veL_ddAXhpy$#1(kmC41FY8oi!{e?)7wxGWA*usr^RWgTc= zI~LiEt4ALU{)b2W&$7J;kKFw-oGM>|r~ltR^7Y|5X&&9>G)`q6G%|?Vf}h88WIvfV zf6FRKN=0t+uhilrgF$k~O-CA!^JQ#zm_RyLp_rZ6k$mvb$~ngpwq4+0S?uR7FZ;<0 z;sAZdx0${M{se7nVF-wPWKYXpC^TA+Q*(-<#rO&+_VcJKw2%rRn3u9%bA}UBupPD} zU!4gMXK89Vi92&QO|^uRprR@g0v7);q_XQl0D=hD)|$h@@MV5 z4sA$Ek^cUE2M@{t2se3a9D!Ld=d2Sbc3kcc9>CpA8pO_!0D<4x{{}C%oC0eOYQ#>{pxd~zf z%jKXf0<+2HF|L*)@Hsd*_ZZQXFwZOg4^QH1O9MI>h%PHu5Q?0v!nmoz%kND9%DX6_ zhRrgOYB%7lB!@Y~q>>MayU z{QACuy@n)o8&7P*u_H_DjMl5T-1C|f39?~2{?s2ZOLM+ccUJhHxu93#PDQwURqDMo z>T#X|J0sayNzzeS@%ds56`D>jTN}-lEenC?piJZasF(Q5msqcY8KNH&X$ksGp;Rp% zkFessc)0Xz{=NDOZ#=g=G|+wLJ>}sHp_=0-+@Zc{x#E_Z{@3zzB(Im z&77U^r1TF+ooGFcRVMl~B_p6r!zn`iH9Cs8fCitTw{4?9wg$nEQ>N5;&U+fd5_XK2 zn^=O{JeoKjC;rgjw4b(%SM=Ugq2`J^TMY`AsPdGQe%|B77rG*^tIr9bfaV2Qd&&o+ z3I0^C7Qej}K3X|swC`Vfl~z&hGiK8G{Q)^ai^g9?I8w)dxFmXfIXq}6cTl+v?U$z@ z+*!2p87(@6(rWRPw|rJu$#F=+hx9DNQ*Fi<=13AV5-lFB&de`+^}e*f>+ZR4p|uEC zZd&oS8-fKBQSRO`gzGjQR5QARm#b(aLAG|Nf7T}ui2EVG53ivpD(c3>N7S-)&Oud@d8YPQrK z6nfROWMuQjx<7J%JS#3tKBbe~x`^}~Pyb|!#~xWwJJbwFoY_IAOAj{SD!!e3pG&LU zH(fD*$xI~|*{|vj?A)B{^hz%YbEaF0^dDp|D@IL6^VP~}M1)accmKmf1m7T1A=$Ev zlvO^0C9;WMqEqM1U|RIe>?d^95(_gA4fj(@8Aw8CzMjd?(0b%+XKs%NhUHwmP`}!~ z7Q{^Gv)|hSkj4xB%XNS;1t{sX9qY!%F_o>Ehih9$Z!rX4M3)FLSe&LZX0>Z*=@KrQ zN48$`kQet5(mlH>LhY)WTPU|8@iJJSocbb;pl$26L^T`j93xTCVzr+9+vY{L?3tf6 z0k62Oi>a^p1?<$3lhYq>BnbWYP4Ao&^XphTK!O%x4X0a#2~OCAPAlX|>wxU?fjKxY zDH+DUP=&d0K~8|Z=wOIV7|Ms(3lROV~EGA@OeYS zy~$5Z@(5!fc=L0~Rqph8B3c>n683gsa(o(iDW>QGXckD!^gTKhqsTgVWlO9S3 z%O50Q@@5%bP*ew0rF>U5`X~2>=wgb)dmmKI2_ZNcZi4H|EYNtVyfthr5vW_P!_)BZ zX1naBD0wQ21F+`xch&)bioJ6!&4^_%iSF;-)qB!8PFlwJ#_!D@M92J9y$eQ<$aU^3c4u06+nRZH z_$~;!m*OD^GWH~t1MWW|2gsj8yRi{=a7-#frd{7!xC-SIVPY#!l`EE#Vc z<42XV-{oVfLrDG#|1GvUe^HiSs?>`Uwhay;cBC*ak!9@b^4|chKRB@$6^N|wn^Ia4>Lgyl@T>LQ`2MU7smY88voW(acq6*-;fLMf4Xp;Zk zVK-wsdcjuD^wJw2_=Q{4rhZD;@rCe}CblpAH1Ll{T1T{fz&d+^6?_m2)XAo z>pp@;ONlR8Po|pUEyLKKa!`@=it>9voeF3=H8k0FNe$1@A$1)hOH~Q>BY{k5t#T;R z%$5q+)r@a7Z$Mg|sD zad~gHDZAqPU_UX;5X#BS&Imm#5o-DXSGD^kEOX0Ey813%o`GL6f4olc4%kbU1^)PT z67X$rEqw5@@_e!q+qm2mtj$$;Gga8@URc}c_jChnr1E;2e)m;1h7y`2eBSzva+uL876w;BYs++*!;+6P80xV=CE@derG2SXexn^kz?` zwP4Vr*lkoJbkz=o3zvU}TdxD-CCyGN8;Xk{CP7ah?sQ{qt9)31#j%i43%6%l$i^XT za%4)3zSt;(Ij2Jr6Dl@{C8DluOt|CpO@TLPM;fPN=RM(AtyT=7XWM0+Xo{qW&X8FL>u4R&B6smpuv>@tM@`+#SpS#qrr{E~YIJfIfn@g=?f3B!0`f`~HBEa^hT8WR3E-?azb zFTGk2^f{GNS4O{=wyV{zPQ3Cn2UpoDOH9AR-xw)>8r#Sb#ZOi9LxdDXoa3%`n6?9j zsdOp#U%D6|WkH37{;R=UgdDE{xveL;HH%+rSW~_62O^(-kpW6TYRcr`z1?F$PV?W% z4^!o3(5vveBJd9MXYdf0<;lG{wz{iNdsh5-!IS&OGJc?gikD>QHA*@B%V{7mQC@)M zIb9|a?pr0#_wz3J2pRQYA30;k0zk~nC`|sYJAU^Q6L3tT01fXPSfaA@**A=j=|OMK-!9Y(?d#3#H=*QXS;T(B5O+|NgvMNuoshs+RQpF!>ayIygJ8SB4aT|2VL>yV$6AR- z4}|H@t|e+*;Chm_q04oP%v}o(R!o9Nm8q|-wW+fJORdNk54}wOz^D=9X|Gu6Pcf|Q z9E@)j@nV&L0f+7vrr;(CmZ;Lnqt__Z#2z2Gbbz!i9ZLFyt2`TZ9AfD^Dq%|_vz(F zOK720HVcHuuICfh3`WI|-6usJ?jl4_rWEha#X8?0KS&1m;WXV;fW-S|GbUuH;JMWu zPC^qIe1a_8nH@g!?|-+6ORJx!IhdUx<*))Y>R>Zbvw7aTOJW7*t*v0q7Jxh?;1}3H zSGHrLyQI<1;LXz|ak^)JDt`7Bs9V(PKVi0^C8DX|uasm;FOoy)BWgcmruXG!rpofA z_3A1ub&t(GNMbkio-t=TyFgk6+m#83OM*A zBK813b1Op|(@^7q+rOsa)rFz(tP{!rD?sh7q(aTPRGH@`GSo>_V?UI9hy6Vca2oyhb0>ksqRqPN@fVH| zHU{Kr1SzNn+xvBJaTiC=)h%f$hqO9^Xq7tCaAc+LVO52^pl9%|XYjYkYo0-m1Nt6j zJ?>1}j+v8&jj93?7W`#q(%}1eQh86yt(m&YZ9t$cIxVsF(DIWt#)zjCOt?U99BkZq zJMckymLTpwyb#K!@ayr8n)FAv_TGlK-FMeo4{alh{C`15kN$aFakkan8%2jl+t}{l z7Y_*UzQrrHF+y>Zs@h| zJu>D(9`xo8tbH{RS&7lygUrJuQp|=7RsjlfJhBnCY*I^F$_B z9IESDnXDlF@Y=iQ&#ROiArh^xHD8A7{R#$k)<{mKI#)FO9(l8`_WTd9>fq+hw{M?M z{#NS^cp$deW*?423w;KV@R{UFj|BiJ43yb?RaSuXvt^V_7jqOhN%b@(8f7)%i+=6w z_&!CE?m{R11y@+??Z1E5$Uv_8$wCwMJlHLy5Qo}$jfI4AG|yy4)BswI7R6mwQj!+e z#3wG1u4#_e9gT(_md5YACqZQdZsa7l;i0R7D|;?bKKngN)^MRdIv*M6wl7NW;}`b@ zYZZS67;WhQXJw(YDJ7_3y46?EWtUBJ{=`g`(_j^oqI|1T8o%J)3dmBRECHs5*!iXsfSls6Q#yd*;%?j%C(; z)o-B2|4322GOcKlu#9NxNgFLvKsHr7n*=SG5&4nfI=S^kLOOT0k!vNWS#bL1HWhhm z(HOT}3(}H*TK`u$CSc74%BmW&QI5Yq&i-Hve(&Fl-9fjcS8_J&=VIrUu4I0eo|~4_N?9QM?*Okg8smu|M2>LCAxn{ZU{Nm59vS30^G-t`!5$c*cB*% zESHxNiH#U-wL~MdMh+MnF)gCKrTm5!(pRD)zW;q+Em!dsK^Cc^Bu-TH_rjW8Go=f( zvHIR~xQ+SBVBtSJw#e~1K%P3m8{ zxRrRZmyg@0@8g{DI8`qz3?B})|1*!#~xlUR5@-tr5C7R3INPcS%Rey#@%K@b?Tsi5G7>u28ZOR{4k4 zY)pDN9O+CU53|Sg*h1LqPjaTLxdM97=5#h~NU4pZ-o*SX2CK>Fw|O>b&VriJy2D=I zy7zx9?5uTidb57ExLc|lSS&rAn+u+Hm4fm#=qIovm1nj!bMQd3oU6XhIL}ap#+PH$ z@Pxjwwxe4}ZhwoV7qRvSPn7luw|rcbQVmZ*KC=rx^+%Nm(AbdYb6It3_5nMyMPyx` zD!AtpZXH-dAXzilfTBg!G`zHOp*luCW{itJ?qTsVFLO@NY*Y8@(vnMN)0MmY9_YeGJ2Sh%!W=GnWloS&K+&54Pn0ybu87Qt3@*Lli!v6{Uq>o{!0fJ`2(XZLYqWmp)AK| z-LbE3WEkW#5E&iA6wAzL1q3J&V?&jHuKqFT-f5*}Nh!Eq_WHffVR`2WUn<+1j29b^ zTC@q%$20Kjq!H&1i7NE2CKLmH+jXR+3Q}i+vZ)9e1rbc5^#{~{c$Wh>kwzAODk#TC zxj%GeF8q^0sVe2)cu(Dc?t@{9H{P$s5iU`Te((4gxmf-jCYIU|zn#Ml91MusEX&rB z^$o7Lp{|kuSC6|h4{O8D=@Ki{_S3Atu08np@<1woBAFrnCZd0p($63^b!V+8+8QuB z2`rpF&>jdxP5o1rcSz=w{oYb-1g$#G-k|V*xnA?7K24^O_mw@=(6%SHd018m&-pf# zVQ(`cKb!j@+r)r^-W{J69XxNvOPthFf%lp+gZzu6R1LIY zm$7dbsSxHdnPxz#2(UKt46MT7m=sW2x8h4(RW-`oy0uN}YT6H)ridji!tF|O?)C@o z@~yYzq*MWnu1Cw5@D|0hC02qQ3TH?$P_F)F&F?9H0pc(6kt zN8_tfc9nS7a@b{=jmCIjMRS1*`9ff#%inBn!2M5xtrYe z<;XsUwDLb%flsP^=!ljFC)ZjjHiW;4CerkwpUYlkh7hmwaiMf9&GHqv`_TxVARAn~ z_M?`DN_Wb{r9N=!_HU^#)3m&#Cd7<uaB zZn!Iy@D^8|m{;TDMelR=>h~VkwOWD#Y{_Bz*DoQ{tBS7zmk&)@nF&O}YyZG^>|t@9rog}Y0g`~u&PzLr@? zgg43it_BT|%ehUgcg1?)%dUnNo_#*T5`;cGp#iz*8*SB7*SC1dn3<*P))j}vX1;tA ziugg0*{vlD$N1xVd5FX;hiq7Y4aV#3s*$et)S~4;k9L6zq4vqRY2gou%FLG8>6 zc{3mNy!iY%&5(js?#Uy%q{rhDVG%OV%haE1mQkvF{`8&kJR<6}l9dqgSsZsBgMn;E z7al0$&o*4sz1FnRRW%lB&%WMXQLvwg#l1|l52tMT*?5YX6;GP~Js5d6Je?3oM1l*W zhn51+|L3^uTOGE$Q_^m254EhVVRV%zVk~SoI&8Ip>?S<4nX|cS>RSP89)F$nS=7K3 z-yT`b>|$%Wa1495d|&Jyu=cnqFE1QNrMmp+c0669NLIWRP*RwBxT-(ZlF{@X|?myTse7**s6t@G#%H}?4h4%pD7Z*uQms~Rto(0+MRj( zsVJ{5(|HE_)xQwQ6Qu)l1W2FQxY30>+;c8?!Q+Y=xzw!h8I6G_zT({ATy|;VBow zEXRzF;5IOL0ms6S2?O%Vmep%Zl);hQTXAmaAhWmR7JRsgW0R&lSAd-8*8@dD4=ndS zd8$7H0hRlJ8B$TNLI_Cg9}}M)v4Q{wsFARuO=|MH0Q6Ku`-mLB zQRtU+Y}Pc(3&F}jXj;r6W>tML@_XZ^SK(M6WuHJ@<@b|;W>{gIGL5S-q$`0=fV(>K zm8rerX3FYur%K`n@#CAQb6Gd;qOHrvSwn)Zc098U$I&*+q1g@RL1R4@KnVo%Q$C ztXaF?1~)HlyLNsc)!9~WrWH|mc)s~Drs;Hq-oSPfx#97l0Lw2aZK;(V3+Z`N1-^Fg20A+B@hbX2XruqW;7Xgv=J%TZA6&d`E*-qP=fD*j@csV@&< zucQJH18<5C0^B>)9|p-ee> WMh=2C%+)kuJcDl{=`sWfK3>xXG#`And=0DfBAqy_W-lafTv9D9k0UTNw{kziWC z22Q67V)7>M70cAoz8`{+LgV6~&U%kOPzG4-)*cnBCOj@DLx@2ma+REmJHL!mIz?oR zBo*^@4c8NNZePW*(wrJ+Ru|m^Jf?kQ@~pg~-aZho%JIA~f$NFY_%DsK%wOO=Q$4*o zYjaOxHKiHK#SVKl0q|kh5ONQkI2GEJb#x!nH3)_~F$?==?QZ5|u7v52WpPp1CKR*| z*SE*x~EOlhkpZ#rle_V`B2QQ_C^HP?>@DItyC3iV8iRu6cvKNkkQXAN;AsCg1m>z9C zLW<}%Me9Tx6cuf0tF$Ls7F@A@`|f}8T2!0&(Qf&>q)qRD&1I0ad5w__V`T4YrcavY zA0mct+x^>sFY+a|UZ$n~Lnw>xUNpE(i?H(xl>NS@S8(}^Kh8c)c$B)rw@lBo-&aBH zR6+kl)luV1Px}zRr!+6d^I$f_4xP5nS>{FEL%E*fF9*)E%# zA=KeH5)fvT$tu2b2q5L8{`z-h!bj%>8qRL(KZpyypYIgp5Qh=oOv`(>qwzm`Y2+m~ zx;x}kzMl$u9&7GjTgT z_D)Dwx77=0HU3d&GH@lhHNoW=+~aRgP{h8nBk%JSKgnPVP1(5bBY5wRMs*=!z4D&} zT@HXSTtwkO89bq=aqP>;`ZkU8vNPC>b&HbiU#_c2*T_XH{Y>oSm;4J3|2U0T5nX9_ zeq|bxd~GSAM96IeCUl0p|3E(ql!b$MapPup(|x?3ojA_o1o%0=_WNCiwX)i(+7P(> z&Hi2Sw{6}7hIkX54RllZSPxPXa@3_*juR{d`$=Q`OiGe|@?41T{*h@+z)Nplw``s=8V<;Me6IL}&IFjhu2!5_0o?l~FWf{0B~IQahNl zPJ;!ZVU+K-yV8L&$4^ALmsoE5;p9Pv*SVuwwVRsL-gm5uv_qLU;P=avk1=hxT*hd4 zU5Q&;qABWp2!U&rli970p`eGVyzcEWPw?c&2Bo4uzvIiw7hy}ly$dY-qc(q-ZgfM0 zbY8wBI~ZV7w=tXGY1M@fSiv;g2F^1>83-aPT3PV3zvu0HWK5RT_u7C4;2!IApOa1nIWvaE0%2f-c)AP{ONLPq^5O~$wy(Ks z$m+kDLOCQ^ud{STXDGLWaO4Dd&`$M+9%?8Hyk*G{GBfg~^pu;}iQ-Y6^ne;~=lk6i z#gVm2&(^vKe)(F1SFcKqaNo)AFKEziIuS}`m*_!6l)OgK>XXX+budXYF;H@2<}p$* zwGK89R5xI&Gb^9>BqVyPx}4sbdn9xM312BfctLpw#2;4#t#aDLpQf=P>^+Bm_v5rF>TFV$(BL!bvnWNLB(ctMId z2xc*L`~G(_QE+&u_*-T5^X(q^orO4Z$`~EoRVKB7g*rHK6*l?Rk^&gE2CG{HocHVu zEg1IP7$5dnUo43zB4_%qy^`@h+=^PF&EU0d)d0kfQmG*Ckv@T?4G7n>%W86OE3lj~ zpc$7mdL+T_CR|6cxJ$1*0kL;_c3T2hysBlY^c>W}9$^R5ZBcs?MVR>gZndE!T_t#1 zU*88-CxPbgWMkhJnn-QZGz_I2GdkMn08Ae(#z%-4Xz&#B?ee4FEpF&^+r4&YbY125 z!D8DjKd%*=SA6<4?!o=?b`}qtZ}5(LbY1@W!sdMIxEUqDZFrc`^xBUHum_da!%0io zapZQ(kk+bon~kH4=DpiI0rY4mn0)M|cc{sxfR9tHXiRZD#ZV7)G0i?8+6$95j;2LV z+eV>Xs~UBm*TIj@Sr^1h^w_kj5{%LvH_c-IhJWA=ESGiDZzoo$*4qbpE@ zQT72!HedAw&x!#$V0Pu$?{Mz5S^T493Vr`6+E;kYl`kZi?axSri@i}yH3?}Hag&eB z6h1sgOB&DhqXG3Nx6exp#cS(MI7@15e-3-2#hzK6kh8w{BDwa-Y*-k)`GQq$Cfak7 zLLeT2qp_!FD+vEax3tv)Bo5x8pXb$%mv65_C71bq>l!RL;;Gx73;lCRY7&>;ZS7XOk;q@ zj-X7W*JE=gU4ZZ9y?jKn4ZyTwsNjd4Pz8)R?O4%%W`j=KdbIVAcLpmfyz%>OLv;gS zrvQD3^;FOA@%QUJOcJLM+p@Pz6AC#i(R%5#y^sR2jdW&=`j2((R63X%y+GANTD8L- z0!^6G%U0|8>y|Qsrr`h}UH95$CUbVjF#{6{f~rMA$-Ve74IUhWZFL&;7Kj=MSPJ^FVNfi2Ps+l2j&3zhtTD#?XtVe_Ho4wo{)dsS(>~Q+=)E+4^K3k()L-VNV@V9uhHW4 zYT_GNB-Wz=_hY8n_t%U6+U^ei-PEoBhsPxE1|3MVjvLU3O5!Z~1f&u}J6J(dm4DzG~x0r7*MKEjG<7yW;{R z+(L=+Jfs$=$K@WN=PaWlq1^uy7aZh@4%c4u$*W07Zc!0-vxt~LKN zQOZ9$Sb%cd*X!H|a%U9u7XzdeEW9OGCxV9Qdl( z?OE7#&VI^c89ZYAzU!MlrU@t``f{iANWEd7l-**@L%J>x%&(4CUf2re5i8+*^&u*F zKbqKw;cQc%SwrDv)|d2zp;v*FQH?wk-!cT9*rLm%8MbiZiM!{rWSPZ@wKA&~krsl8 zM8sGfz@cRgBdFPdiw%SmoskS>%eFoUuT?B!xArZ{u^<|gVWF&8_J+uKuqn6YLnOPmIU z_U0fFq0{W+RcBSx*}R=wSDABL`PoHPITP!a#6;n@C|Ouha}hJ5$})AscDr%D)39{$ z%@&>&ZF>|h(YlYxhJhS$v2YId1M&`?CDUWwE`%0mj5I@id4+KS&nL7PL`^=?!x{GV zCr7xF%#^O%Y`APzB1fAsC$n>&ZdPrOEL=DMws-mRvzLwRhGnv2FF4IbBz)?RNcl?w zgLkzWvKRTv%tRUb^$gRf8>8Kfz8X0d?KUhFyvl!d!UJxF0&&zc{aL%5Tk*z82llSK z6(m8g>_xSvs{dPKp_->zk6-Ay90eOJZpQX!b;LzMhZxoyKCA)MBh(;JdWDJ)s!w zK+0o@$p?huFk_%nUDVkbR=TV}oFm3sH`uwxMPj~D1TVGo;c{|~s7Lwy1YJs4s<-q` z^o#@#^;F_)Whf>;vZB%aP*lFAiG=d_hnCnRxcR|3@%k~I3VnQ(v6`#$E0y5KG$Y^A zRQBw=;)^pyBk#S@(0i>#TyewJ1rjhi`$*ahES!O%{{~!*!9_Y9g>?(Jxpj?fo7M*N zin5`9rrO~kZMKFkdjp5Ea%>x1sX01ixXDwYFxnkeoBQ~0=)@;E-Z$hzMqc^NcXr9U z>WzFca!+KvK)cHnWO08+H1F(!OW|a#5=?Mi;#peAa^xLgzf9Qc+OFVw?pWd+va+yl zX|+inrJ7(smla=GPxl;?;Vg8aJYMJ3;;p0e{LX0F5jibMJJ6X2>Q8qMwl%rqt^cW- z>Ao@_`Lw30qR_(JES>pfG^Qg^n)Wsjtnq36kpA94v*~XT8jnC^wcVNG?2>7YKE1o~zH zxdsl@C4to>$3A*m_~G%eZhIBCI$089IUud7cI!9D;|EX;^KttFnyXN}3`#<$+9`50 z=pC^oaKweCOf$FgxQ%4_72#6c7F?1Lq&Y0V}d+ zk5LKIwt6MiNhFpWah`X7^@? zzcd!(Bw6TFjvmkNhtzq7Us{41{i?>Rl-oyZG{i1)z_(|^3*uiIWjc&v^(;kI-z%PV z?$}A+J?N#LAV@uuLLn;POx)4-NB8g0rB$3A4qwDa$BQC=R#;10TdGYv-HuR9u@egO zFm1&=b4rp@qL>8`etYqFpih5zHwpUw>dZ|It%HNzOG9$XlZL%oJ!!it++=zg47SzT z3P*i>_nv{SQDfi-x}+@DU##(-M_QQ#v_K9fVUu(d%7IRBI(-ogp#QGPN{M^^s-xN# z(9WspO9Jyc`K(oC{3N7)Ng3yZ5N^5akmO6?PP_HQwh4*0sF(5|lqfG@B8*mQx=Vs} zRjhnoST{xf)r|H`qL11n>zCHwKhLfF zX>lCjAJ5;~`9yblm;Eh)`+4kZ#b&!m=!@=TivE`IzU-hx#;pk?AN0VE)2poH+Vpi$ zQSQK^;3;;}yP2(bmY5pw1j;6+Lqx=#dzRnZLP2lrjkLe4y0uifxHbAF3I*S;@kdqUIyYLf;;awED)t8?b2` zv=p z*WXL}6UwQx8G*K50^u6l05g;B71>UNRTS|A?e{C$>Cl!RVr!2U@YzE%XHSUZvnbgq zP2`68pG-&VS_u7O`=s2hi(;DoUjTh9g43?z&m4%c(D$SCPbFJ^TSIlO=pJ&t^P2go zZ*_|u56T+9*EC!EiD?_R3pm)zNfa{%0IuL>Hm^Qu)H1{l8Wu;YhneKRM>A+`d&@p% z(LA-}pDyb0Tj(0!n(wYAm2M=H^zN-S+foQ@bky}OmMGG!^2!ka6|UKK36lw&Ad))t z1K+m(Lz@$f%77@ZKI*z}QiW04SmHRko7CVonJr^%n3zGD2({J_+7;V+ooVbIL;3yX+S zP`_9+TOnqRRa8cUtu`5htk(>hXkw2`ztHPt5@I6Glgj=?{L$7fbnC4%>)v0|b<2n@ zG~4JdZJO_dl@TmJ$0r_O6$jxy`KHH{CJFJx`m3cLWAWw~V;-^ZdGF@vztX=lzb|y_ zeL}-P(B4an?LzkCHMH^lQN^@S+d!3WNT!@Xr;RgXqa(tcqz@L%5wET~X~ zcB%Bi+pcL&DZ&C+tP#(>mFPQb;G}&sC z`IA?bmN;Sc~t#fCl*Wwc-@)tnw&%6gB z&D=xM{{ZJGzbm7?RJrpnnB%$DCx*vDShRXy+{G=Vezo1J5aKZ`g@YD(1$+)wr_U%( zGKjD{_6)O1>dVM)Z8fhq>wZ!4ALZMH&^*6xbx%KPcM`*FmUc))QK;tYS0EpSRIxtQ z%(EEB9H*4-c8DGAP{R^QJG~oK^WTvCzo$jy{{SQTlS{VMZ;L!S{q?$C+sAPM^p;5^ zk~tDG9FQbvo`?3SL7Mn!rgxY%+=>y{C3bp#r>k4}ck>7H7RJ-gdY6;0-%X!Ymr=Q% zVvOU?NoctIFT=l)ikA&K_~{ zf0r+ z$u0I~eqqsd4QpC?zr|XG&zR;dJ83iB+)T4XyNi^HZb)QaRH-|SvmEJXD2Ry-z6adQ zPu`sQ4^6hdx{A-tdbAogucvA@@#;F9c9AK&uvYbvJ$j)HDPAnBcK6#M;L0!#$TZMo_jAP`D@Htq9pQIYId`E zrsL|YR@HBvVum2~sc@j|Nub|sz{5Dim`AYr1=Ke$8T{Z zzPsklPC#RV&fRFCnpRM(yiuwFKP=A0;Y6I74@!vdDZ(N;Zl6i#{TK7$u757grg^d$)hsXWZB+q+U=$dHrH`h`ve0r|)^?7U^0FF(%vYrTkJ86chQ|G0NqMtf z)O^|HEkn(6>Y7xZaD&Rm81(6`1>}&WgllKQ?85|5#~}i$s43jjH1O2GM8cLyP55t+8D?U#fSg{Ry*yOy8Sfr z#ACn-l#al29bJw%)$Oy-{H?F(&#aAWPLj?$twI;_=aS=qyDhDRF_Q4wMJMj!j4gf` zkw^)*;f6tY1~S1}2!I z02!4?HT|5?={0#Jt{CWW%#b=?#g;$N&p#*pz4>cpr}-z%K7aFetE*{Kc`_)Xw{~l^ zXPQfkxgJRwi}Q%ap+b$u+h#UxW?Z>4h(Hb*knFVh<2*caC)2Ya{Pz6Xv;P1EXpQ7e zZpZS=$lh|e(;@R;<_@b2^V?Z8EA^zlv$c&FtgS$tO=`xJ8JDH(m}JxgD4dcYkq~On zneJ`V>LUUSb|g{0N$-<2FUvp8@5>)EdHcw*NvCY25t$SN2g2ZPm^_HIL_O#A1mrURQ~{+RMNcn`HA_F=cK;;!1Ggo zxs3uKrbM=yt7R1G2f&NCjTr7vC+stO2M;0-#AKHE{6okOx9G-3E?=)C`dC8^z zdwy)`H!|v9lyO{M`DgO(-fmXX$s|oZgmMPs%5sEBBCpycSEVy}aSR+-F&(9`J^lXx zYBg7iA|!)i{m(J{-t&E@oS@R<)KE*Ueqlp%s9UiNjwL9s6m6%xVyt8k1U1C_|x7DGzj^6EOwZbN)MC@k^2xcnjbsRoaMb56XJxM1-K@7Z*OJRbx0VXJDMBh;Ux}tT z2Z&BMZfKhF8{h0lS`c(e*ziYaUv?*5DTYY_yyFHRcP;vkZED#Ht*#xGhB@ zyLPVB%rnLalx46t%Ir4j$QC3n{>DG8UrGM}IO+LgZ{%xTV@{Lv5A!WXm!|ofPPvYF z^t}uK&n>;p4P?0_0PRL1syEEMBg7_i76(s1)EhG5I3vSi%4_5gIQeVxTk_9ay}t8( z&BvI(GOw&tNz^pR(WEJ-x7H+rb-Lt|!!vvmR9A^3CNb~>Bgvu?;OotvYgz`0=RYUu zzIgny^5oVxR~ochhn}=J<`Djgxss(W5x9?1#zGi{B|@E>HKvZ;{G7TpB@o6xNowDg zg8u+kw(@?LuV~lP+}sK7k~WSxCIAVo)Hf8A?#f6t%y@(1S?J_o;?2)+z#q(d^wyI3 zr_Fcs>oR#`TGH(&k}|g9M!dL51TPeORs~W?9kXh4jKm0vEmFZoz}T~$cgPRs*ncoT zF+9cQ+Y3z!Z6j2g(^a`C2k7f*AQ5nh6M`^mHzG}ImHvA3_%Zr{9G%zl7Ej5INFu0| zw%Wt;{{Zs4%U_dP)}yGi>AHS_du91;<>!`Fo_=K9UEN+=sXUTkprDXY({0XX<}=78 zEQW>IJ^uiYCz_Dqt9!SS{NMRqt;wz@ny#Am>hngj)HJBIemZWC1kxYe+N9R#(vETf zDeps?4Qvee2XD2{(r`|7CUNH9%-g#^BeuVzUT9&wm2(A-t@&}K+q61uPr|od`k;j%sM`{-Nw#V{U^DFY>$bLw* z^5%zQr7xByYwcbZ)W1l->B(d~u9EUp^(X~E2W|5^Q`?ZskmcS$`BvRF8#uZ6ut<&` zUCC#d^;?fO>KboF;~+;}Z2MJh9O*}bST{_}v*>sP`P zrq$y!Gmt#C_q>Nq(tj}j04uKi&#vG3cj~&9vtarqmcH^N(As@wKTZiBiDDC#E4M>j z-em0!E~)|%m5^?z+ipCfXKtu{GQnl?4wd<(6q?S1uK7P!wtqGLTyEMlu`izW(J-Zr|Z4h{!1n}aFBSV(Q4?PNYng}=KG&1YPyb$Vg<~(b^E)a0(1J%Ac9OVzAbKD)p@&%zD3>e3$1- zxg+yMwwW;~(Ar7LDK1DV>Q{(OkI_uC^4<b=w?{{@5iC|3XpM_BGEK4MK(EgT)_CM$9HYzhmuHtwaeB$-_E9FQ z<*UsL@|#i8G~dkM%Zslr#ee2)8_ZMNz_t=hd8tX}U?YAT@$v9EvBSb5Y#CX@#?vBN|O zT|0iwoTC{N%cIA<-K=?MU-Flie7)u!B0nlwN2|>avmLbO)rKaEly_F>S-2x}R{#6?8Y79wRG%e>R-apnRt+kNTh{zd$a{JLE$&K8=l=TDWcZ#78d)1%{aCZlx-lj4o0 zR6s+Op#r(G&#K}P^pW1`^)QqtAz=4Ci}H)|JMuqD{JHbzm9PH*Hzo7Um(z zSZX?L)umZ}s%yoHo}i8TW}jFGjU0eettW`o_e=bT`2+b2XQWH#y)*L%P}hGj{J~;4 z`IF6eCd}PJpvN05D54V$lseV*wsT;UDs*e=I-cgH!(id+YY3 z{`>j9*Z2P4XAkA2-_z{wYy7-E*ZA=es@p# zS(=rgeJ{!{tY3Lz()C>O0$8PcqFD6fwN7fYMv%86+;CD)MqkH3GSkJ3CFN!**nP zQ87OnPCY@CxMV1I(l1`tysPFrIW_Mo+T3ZnR;4qISI%)o`VtqlfDrP1Uf~*hiqeX) zLJ2?Q@0yI-c*7yZWXdC9^=^7t+vZxb&i)F!uvtY>skC5|==vM~pGu*}T8m76SNXCQnygSOxjYlL*avBHj6ilBW*@L5&f zlliIngK?>8URS!g^0u3;mXBJyoqcUm>L}abTWdvBG-_9rvZ|kamuEvyrv2`DUk@NT ze1BkUtdrU%ywG-*Q2BSvdKcx!qpkVN&7Nn18|gg3rRjI;tZRl(L@kVZjr71;X%P*` zR9%fWdRI3P)g3^VXyO?0>;WT$bKit>pPx4TaspK%ejEP)W7@o#rg?WjxxVr_@(!PG z=i{JHt83Sqwf)DLuVRkdi$@LR?dvNRkiRcYQB%JWwrh2Ha%Mb6UYpv0i1+}`d3d(m z?bP4e!|c4%uKDN8+RmGn=hT|b8uGyKPKfD=a z0TC1d<=of6K%i)qU&}8gU29%O^No(Je7;OAwK$N;J%?PT-mn(yY9lYcY($s7&!uP>x`eoq$391}qmts__f zo))QawPI9;27u*SokV{%301&tksB6i4UEu{{Y0AowWK??ujL~oivd=j~P|?rKzQU5-XWqjim=Pr##~s#x6dH z$VW+m5Xh?DQGtYC#F} z@!a3YA%@t6ByqR5<;{a`%|X*Qei0@ny&LcD=H=s%lu4AV@&nECeYc(DWSH}Bh_z~OLznV;RMmlc*iFaYP6vGb9gkE@o6KTTS%Ra^hP+D8DWYej2NBkV0^s$mj-EL;{XC>-@PRob&aQ%Y)70txvbiGitk-(eJjj5 zwvAZrCwq9MQzQ|qy&22#Vk$@!?U~u}UOx_~biQKRL6DV{<6Qi;n@+RU{Nd%DLgM1$ z$it{!!F_9Wclt4-fFh{V?Maqcp(d^AkM)OK!ow_)lyS@g0q8*cPS@{ek^)BFJ*atu zSF_UmwW?^IXwm${o?x*0uD|8^?PikST2`E?zO`0SEK-*QZ?g9QW!ZF?@)^c(lw=Ol z2h|hYdJ*^xVGdx6zp*`+^5a<67sy)0&!3Y=^52r+p6ch!cIVc#xwX7Jq0{t;%CFW+ zK}gM1(TOFqFBYSKN(MGa1AcZopLyN3MsT7JC!yZ?;t90jYjNf6GgADIwYrYiR+r4$ z1Iyurw-L@9>|6Q2Pmj<%t9@A7QLgC?LESEP02yDR+JZ!9gIyI^%+ zFaBxya#L@4ZKByt44T{%M+kUgx02Yp+^dxZUw!)IB|My5GW7JmUSHbRnjRj~d6t3Z zJ1;1CPQvbADQa3*=FgaQ19PJvH_dNleLk5KBmEjURz>x_J}v~3tV4+v8&@Hh5smQ3 z9B~_%*&hD@EADC%1~fN4?Rhmc-!S=}+V5W1zerj6no4UPO@c^dNFfZ$w|6(O$r`Gw zQCc|1O~W=}ODsf8L`{RvkIIpZf-QHLypbGV;z#_$yR^}Kr=?qcUr+K6lnS$5z)v{i zhIykzw`-0g)RE+nuseZ_bHqv}KULom>G$1q*fvI9k`CVP&{{U0+mzpPNAIUnMztrzFJLniap@!)hqA{&F6Y10~Xe*f- z{FuZC0I5f;PQX_Fckya62X2o~kASl4l>JnkQlUTg-T6@MNB6{KdY}Y`nO9iKOdVte0M7)6TzimeMw- zd*!I56;3N1V@BgvD?nG+W=@X`PI|~k(rdcgu})l87x_=iUSzh9%l`nET5W_D{z%aL z+pPJT{#mb(D%vlo)|?}DXP0*sYKjqBW_F}UByL>x4nfO0;2%x0oe#;{^qL;CZRWj8 z%9_pfubUUlK2x*Nuf2Iz8%16*G*U*Kt|`!Hi;m!mfk}jrjf-E1kmr7V3a2cm!yG1@!s2~ zA~NEZ;p(1b*0lX`{NrJ-&vMT6HKxy`l{H+ z0l9gA0Ygg^bg6DZMsKltC`@x7e*+ zuH4*P=!xZTbXVEg}VGGyg&k!+c3$1!yX-{d;7L>H51~+jy=QeNj$}W zfBA83Cz|i9Y#`F*^Akb&SLLyJ13{?i(b_Ces9a2y3^}vP5y;}>dQ&ZoA(R0NJ8o;O zw9f&IxCj?k`EOpkz4Oku<~?IU)33b3Cb=<9kWB7}7;Gkc-LaN!Y{ zqUB+MlzCk~m;9CU`PRJA=#JnV9Qfliw>BT;56nL>`D<3we7E_~_Rn+YEkn@LbX&w(Z(xgb zlKW6)Dv|Pf08|Q|*@vp^_~piDglq=?0P)vZJVp|t^_et{Z&BCdy0pHy^7fN-KSB9+ z53N0l+`^B^(Iu8e;Z5NPy zk*`Y;nA>06+5>YnoLkhyhJlCDXmc+Ko^UY0SSO0R>%Gf_DnyOnKKaMXpO9af-c$Up zlU4lYrRI}kJQrSyqh0b@6ONJv_Lz|H-J{}mJWRq`3z4CGV zr2L|_()^$2i~G$(%>H4ISJ6=NwbTZOZmh|t!y+&=o^lI20a3QYeAa3;{{Wbsn2W9( z>1X)94k4YMDSkYjm8`Cht=wv!O!BtBX{vr`=^Aysnw{ON7}nzYSOdu&oy2Y%83|Gvae0@r9%G*6TSIQrlo=(#|#iRMBTJr>^-$}gC znlzru;V#j)mJ%L{s%y9h;u*No<0di{cU4@$>+mh{lz2xE*T2d2cjiBkw6D*9$ZsZU z-eEeN`fiP(Tls@skIJz$Q~9Gzv{JQz%&8%W)HxKc)$N*%HgllW5^C&?{{V#kwz}co zi{`J)-!$m4Px(KgXg*CBzn9)_@-CloZKq9WX1vnn;@*r)%sIGP#l^$)BoIN&_{2=k zTwbtxay|R8o?$7*`qRiY?=onfdh?~8zh`r)eqUZ`H`2n|Zn33azL%=Pkp*jbE`0;_ zS%^{;Fymj^rW~39*xdF#$&c!ktgPb-G2i%8ebvtYRqN zm1)UTlQf$v%PV{6X1~)e^u1SBwM1@S zi3rg@QnE2Ts)CJQ9M(f$IbSWLD0KeEA1OHZ4`}>=^0R2)mHOA0e==gd{ROJnN2+ML z#nrPJl6xrwi)4v{vdtt!)UcrUIP0>Ek|qFdcLR`Y#S4it+W9>`H*aAHH5q|I5+dWLB zhlX3%F8=_V;{O09=xOF(HdyFdE{r^{C+JzU`E)Bb62Yn4C+`s>1-(%$MHKUT)OXFa zwIjkL%ZlZ9)E~Qk=NlBfV?b{Evq010(mc1Xd52K9iTuT`TD;m$p4@$ZO3p4MfJovD zqLk@Tn&|qoj^NvjZt-s|*j@f=c_T=?v^Kgs>QPCq>YikVE4Z!I?NNkNT_N?F-;;u& zN5kJTJ4zDAB1qhATQl&4&2lK8C2C81XXm(|%J)8M)rGyc=}kvNo(l=(I&7j#R*p%Q zFRY}p)yfgLPz`fi9NbwU$FS+;ef7zZk&H+j*?xzlYImMgztD8QG3pjNpPAC~4Q|+! zv(#g?za-CZ1h%%#9BLk%sl>NNX3g2pRA_BqW0R)K8}$qOA2w*;l|PmqQ;_~v`OD54 zubi~Wuaff1%bILcG@n{lE&h{qiRh}K>^D90D^=Q=WqG4fHC;X155+X*$q_w)-;>oY zJf-HZ%pWq}*`>9|mOm`?oi(FP4JhI%lIbOD$xx8e&oUuZCwgq40hm~_$HExE^%Hi| zVnlZ2^}o(=!60jA&YzQik=|233 zJ8EM&;E6OxUUnOG6B#Inrt1rL<(c$YFEpi+#`YU)4Q42dtWa4+BD9jA74A#n^x0=qMsCmQ5`i;JsX=$asZ!Iroy_KS~os=+? zEK+g`RMx)dGISm+veXX=7r!oC*~IN@q0z5&pE3Sk=!Z;uRnXE%XN6iJHMETbFRaTf z$ufh>Z-J^h+s<9C}biG>V|f zCBv@-Dz$1B-n|ZUIi(m%604)}Zqsc$JeGNr%6?Gtu7RNWFUdY~vi!vJKa`~t`GV~u zXe`wtW>IL2e$xog#K2JaZ;-=}A5>dxIoxW{L7^3SAUVZ4W_Lflp0(Y z-llQkvMH>v(Xth$&NN!9{z~14-l*G>} z4}ov|>F3)&%k6&G%(nK;d*tN$>%(JYwxylrbdFf!h|z*48Xl#0Ioe>JEZGNzu$Ot| z?{VdfztznopiQx#kTAQQ>_R?v(>%p}r`p_Gy0{bDL>@(lk>o9!Y|d=G8r4=(C2qw1PcHBP0a-CMMB`ooO_@;&yhY7QYH zVnc3+KdzWh`Sm~9xwbo$tgEg#H?8>m+MCfT6o$K)L zOwG|`jn3h@9M41F?rfeYP?dsG&&wTh!}AM8^9Plz{Jp5^mY<}Z;vQnMHp$FY8AiF%bbO_&`CCob^swu$$Qs*Ox6z=K2_kb;0yUuK zj0eP^ZPPXQ%!uI)BZynf>~uQ`^{cI4&v0GL+Vs)MVGZB!Y%JE;QaE9VZk#Dv9qXG9 z%z7gk4iYxM)>ukJb47WG+D~xzmc{j(3x#zlt$SZ@BRh3*pC)p(d1+zQjHE)F4F z0PM~aC*JoD%RPJZ8_a)|`iwda@0V;WptF0G@|EL79;fCFI_V0_6gKm`O+j8;Hp5^m znDiq$BXRN+?=f*p7c`#dRl2(J%4j#XkzDHn^3qK{DOI3oR@{#A5Gxfp)4po;8n}$T zYus9JR6(=5(*FQCw2v(7-dNJKXgt8S<4?A>^AF|@y{1J3EqSgaN{XzcmQPMK3d_cg zQr+_}Mf;*;di{afW+cQ?N%?`UTiSj?c|*%SS<|ij!>5=ep6b!9t>(MBze)X86u1R= zAYn@NIgg~$0d<|PIB6q*6R_Xs@_fnpd#71lYxn+f*7OZt>|3X2>nIt2oY&}P$Lsmqi{8JIDN+J#@~dBRNhFRb*h%`49;Sa~zb{%7*` zo%(yunx(`#Xw%(<`g~^Iu{Sa)$>alKDV0JTX2_rh?q-@?G5(R{p2H=^hpky@jigNu zkL4R?)$V-JF^|`~OOYXxIaC0$`cj(GoP{%AlPqv$Fb2fWKJO-R$v>M9i&FD9<&M4O z@5~P@YboXp7tHbnk!^}8w!MXqF(g3zVnrjD9mj@dYqSuSBXPLMZ~EMkGapoTkb5_p z{L^84=g!`Jj_%{mTI4R?NAkUu$DtL<`b9;(%fJk=B#l5%0s-9bnoSm(5CR;c4(G4! zawCxHBfiI#1b^lphvki5$Ua@S^InBxC+0r8rM>mP<$jZ?MX7m<;7&}iaahFd2;5eT z-33nBxzpjE2?@e{FehWn<`Q%gk0V5Vzpd~lk1w8lv-z|6ZLez(>YteYMAUT;K{za) zrH|EtQwF1C;JhywARa=3nbzUUk3J*x*!z9WI*gKpcuz9)Yd8BG&RC{3lf^q@Z3rh~LL9j++>X;5$7ApR~;K4-i@C^-svnV@vbRrm^IG zXUp1M*A!i+x*Cu)EVN;qwi@m>{(`7WVf8 zZ$kLQ3-EvVQ@&G@0}(SE%ctYx^gW~UtIKz?>Rx*P0GxaC{kQ3n`J3cx&OTr(#0hN0 zB8CO81H_(cMGZz#8O)wCea>b%aGnnK3+KPd8#|pBP0{tcXs6VUoev3DPKT7F&m<3*2A@}{M2cdGdoYncAEd~M|Y z9R3cU?*YV~LMhd!vmjz=IjxGe9>-$asc80~_oXy=6UB8^Z5E1K;3*yM)}-v(I(hGQ;38w}G>Z^<1OP4g$0yyrHp z`GY<5cUp~xo2Ecg!S2ZQ9u!mxV?5fSR8y{FVTMV1xd(9*lO;-72M=)kb9ir){L}es zrRln_lUvJ=<>|cEwvQF~mC@~PmOy<6M&v+bJ$!Qc#KuvOJ9QoIA;%5)ugUZ$_#Wf_ eT4nzLj>ptL-l6{Ue?LyX{c|hx5paAjz5m$?%$N57 literal 0 HcmV?d00001 diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100755 index 000000000..1a3a5e4dd --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/frontend/src/404.tsx b/frontend/src/404.tsx new file mode 100644 index 000000000..d3dba9ea5 --- /dev/null +++ b/frontend/src/404.tsx @@ -0,0 +1,22 @@ +import * as React from "react"; +import { t } from "i18next"; + +// No reusability here. Why not just keep it from taking up sass? +const STYLES = { + "textAlign": "center", + "marginTop": "5rem" +}; + +export class FourOhFour extends React.Component<{}, {}> { + render() { + return ( +

+ ); + } +} diff --git a/frontend/src/__test_support__/fake_state.ts b/frontend/src/__test_support__/fake_state.ts new file mode 100644 index 000000000..c799593e2 --- /dev/null +++ b/frontend/src/__test_support__/fake_state.ts @@ -0,0 +1,25 @@ +import * as React from "react"; +import { noop } from "lodash"; +import { Everything } from "../interfaces"; +import { location } from "./fake_state/location"; +import { peripherals } from "./fake_state/peripherals"; +import { auth } from "./fake_state/token"; +import { bot } from "./fake_state/bot"; +import { config } from "./fake_state/config"; +import { draggable } from "./fake_state/draggable"; +import { resources } from "./fake_state/resources"; + +/** Factory function for empty state object. */ +export function fakeState(dispatcher: Function = noop): Everything { + return { + dispatch: jest.fn(), + router: { push: jest.fn() }, + location, + peripherals, + auth, + bot, + config, + draggable, + resources + } +} diff --git a/frontend/src/__test_support__/fake_state/bot.ts b/frontend/src/__test_support__/fake_state/bot.ts new file mode 100644 index 000000000..eaac05d70 --- /dev/null +++ b/frontend/src/__test_support__/fake_state/bot.ts @@ -0,0 +1,32 @@ + +import { Everything } from "../../interfaces"; + +export let bot: Everything["bot"] = { + "stepSize": 100, + "controlPanelState": { + "homing_and_calibration": false, + "motors": false, + "encoders_and_endstops": false, + "danger_zone": false + }, + "hardware": { + "mcu_params": {}, + "location": [ + -1, + -1, + -1 + ], + "pins": {}, + "configuration": {}, + "informational_settings": {}, + "user_env": {}, + "process_info": { + "farmwares": {} + } + }, + "x_axis_inverted": false, + "y_axis_inverted": false, + "z_axis_inverted": false, + "dirty": false, + "currentOSVersion": "3.1.6" +}; diff --git a/frontend/src/__test_support__/fake_state/config.ts b/frontend/src/__test_support__/fake_state/config.ts new file mode 100644 index 000000000..39efa55b3 --- /dev/null +++ b/frontend/src/__test_support__/fake_state/config.ts @@ -0,0 +1,6 @@ +import { Everything } from "../../interfaces"; + +export let config: Everything["config"] = { + "host": "localhost", + "port": "3000" +}; diff --git a/frontend/src/__test_support__/fake_state/draggable.ts b/frontend/src/__test_support__/fake_state/draggable.ts new file mode 100644 index 000000000..ffe1f8ee3 --- /dev/null +++ b/frontend/src/__test_support__/fake_state/draggable.ts @@ -0,0 +1,5 @@ +import { Everything } from "../../interfaces"; + +export let draggable: Everything["draggable"] = { + "dataTransfer": {} +}; diff --git a/frontend/src/__test_support__/fake_state/images.ts b/frontend/src/__test_support__/fake_state/images.ts new file mode 100644 index 000000000..1b7fc404f --- /dev/null +++ b/frontend/src/__test_support__/fake_state/images.ts @@ -0,0 +1,55 @@ +import { TaggedImage } from "../../resources/tagged_resources"; + +export let fakeImages: TaggedImage[] = [ + { + "kind": "images", + "body": { + "id": 9, + "device_id": 8, + "attachment_processed_at": "2017-06-01T14:16:55.709Z", + "updated_at": "2017-06-01T14:16:55.715Z", + "created_at": "2017-06-01T14:15:50.666Z", + "attachment_url": "imgur.com", + "meta": { + "x": 632, + "y": 347, + "z": 164 + } + }, + "uuid": "images.9.3" + }, + { + "kind": "images", + "body": { + "id": 8, + "device_id": 8, + "attachment_processed_at": "2017-06-01T14:16:45.899Z", + "updated_at": "2017-06-01T14:16:45.903Z", + "created_at": "2017-06-01T14:14:22.747Z", + "attachment_url": "imgur.com", + "meta": { + "x": 632, + "y": 347, + "z": 164 + } + }, + "uuid": "images.8.4" + }, + { + "kind": "images", + "body": { + "id": 7, + "device_id": 8, + "attachment_processed_at": "2017-06-01T14:16:34.839Z", + "updated_at": "2017-06-01T14:16:34.984Z", + "created_at": "2017-06-01T14:14:22.726Z", + "attachment_url": "imgur.com", + "meta": { + "x": 266, + "y": 330, + "z": 53 + } + }, + "uuid": "images.7.5" + } +] diff --git a/frontend/src/__test_support__/fake_state/location.ts b/frontend/src/__test_support__/fake_state/location.ts new file mode 100644 index 000000000..f4ef2559d --- /dev/null +++ b/frontend/src/__test_support__/fake_state/location.ts @@ -0,0 +1,11 @@ +import { Everything } from "../../interfaces"; + +export let location: Everything["location"] = { + pathname: "/app/designer", + /** EX: */ + search: "?id=twowing-silverbell&p1=SpeciesInfo", + hash: "¯\_(ツ)_/¯", + action: "PUSH", + key: "jhedoi", + query: { query: "string" } +}; diff --git a/frontend/src/__test_support__/fake_state/peripherals.ts b/frontend/src/__test_support__/fake_state/peripherals.ts new file mode 100644 index 000000000..c8fa7cca2 --- /dev/null +++ b/frontend/src/__test_support__/fake_state/peripherals.ts @@ -0,0 +1,5 @@ +import { Everything } from "../../interfaces"; + +export let peripherals: Everything["peripherals"] = { + "isEditing": true +}; diff --git a/frontend/src/__test_support__/fake_state/resources.ts b/frontend/src/__test_support__/fake_state/resources.ts new file mode 100644 index 000000000..2389637c5 --- /dev/null +++ b/frontend/src/__test_support__/fake_state/resources.ts @@ -0,0 +1,4 @@ +import { Everything } from "../../interfaces"; +import { buildResourceIndex } from "../resource_index_builder"; + +export let resources: Everything["resources"] = buildResourceIndex(); diff --git a/frontend/src/__test_support__/fake_state/token.ts b/frontend/src/__test_support__/fake_state/token.ts new file mode 100644 index 000000000..450ec1f58 --- /dev/null +++ b/frontend/src/__test_support__/fake_state/token.ts @@ -0,0 +1,17 @@ +import { Everything } from "../../interfaces"; + +export let auth: Everything["auth"] = { + "token": { + "unencoded": { + "iat": 1495569084, + "jti": "b38915ca-3d7a-4754-8152-d4306b88504c", + "iss": "//localhost:3000", + "exp": 1499025084, + "mqtt": "10.0.0.6", + "os_update_server": "https://api.github.com/repos/farmbot/farmbot_os/releases/latest", + "fw_update_server": "https://api.github.com/repos/FarmBot/farmbot-arduino-firmware/releases/latest", + "bot": "device_403" + }, + "encoded": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbkBhZG1pbi5jb20iLCJpYXQiOjE0OTU1NjkwODQsImp0aSI6ImIzODkxNWNhLTNkN2EtNDc1NC04MTUyLWQ0MzA2Yjg4NTA0YyIsImlzcyI6Ii8vbG9jYWxob3N0OjMwMDAiLCJleHAiOjE0OTkwMjUwODQsIm1xdHQiOiIxMC4wLjAuNiIsIm9zX3VwZGF0ZV9zZXJ2ZXIiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2Zhcm1ib3QvZmFybWJvdF9vcy9yZWxlYXNlcy9sYXRlc3QiLCJmd191cGRhdGVfc2VydmVyIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9GYXJtQm90L2Zhcm1ib3QtYXJkdWluby1maXJtd2FyZS9yZWxlYXNlcy9sYXRlc3QiLCJib3QiOiJkZXZpY2VfNDAzIn0.Gie_-X5F_CrnmrF8AGxnXcfOHS1sK3eFqLectr3Wa-TnIZbIFMr3bVrRT53GPPb7C4HKIdMwfgGYxpaGSOD77qa0qnxw1FraXTnJgbIJXKipBVN9UQ4PqcYgjAVdZ678A-XqXV6SGE624zdr7S7mQ6uj7qpa2LMH4P37R3BIB26G7E8xDcVOGqL5Oiwr9DPajBX3zdhXSbH3k4PyxqvPOLYso-R7kjfpOnfFCMfMZLW8TQtg-yj82zs93RP2DHOOx-jxek69tmgNyP3FJaoWHwHW7bXOEv09p3dhNVTCSVNKD9LZczLpuXV7U4oSmL6KLkbzsM6G0P9rrbJ9ASYaOw" + } +}; diff --git a/frontend/src/__test_support__/farm_event_calendar_support.ts b/frontend/src/__test_support__/farm_event_calendar_support.ts new file mode 100644 index 000000000..074d87d44 --- /dev/null +++ b/frontend/src/__test_support__/farm_event_calendar_support.ts @@ -0,0 +1,30 @@ +import * as moment from "moment"; +import { + FarmEventWithExecutable +} from "../farm_designer/farm_events/calendar/interfaces"; + +export const TIME = { + MONDAY: moment("2017-06-19 01:30:00 -0500"), + TUESDAY: moment("2017-06-20 02:00:00 -0500"), + WEDNESDAY: moment("2017-06-21 03:45:00 -0500"), + THURSDAY: moment("2017-06-22 14:00:00 -0500"), + FRIDAY: moment("2017-06-23 00:05:37 -0500"), + SATURDAY: moment("2017-06-24 23:00:00 -0500") +}; + +export let fake_fe = (): FarmEventWithExecutable => { + return { + id: 1, + start_time: "---", + repeat: 5, + time_unit: "daily", + executable_id: 23, + executable_type: "Sequence", + executable: { + color: "red", + name: "faker", + kind: "sequence", + args: { version: 0 } + } + } +}; diff --git a/frontend/src/__test_support__/locastorage.js b/frontend/src/__test_support__/locastorage.js new file mode 100644 index 000000000..6b2dc60e2 --- /dev/null +++ b/frontend/src/__test_support__/locastorage.js @@ -0,0 +1,26 @@ +// https://stackoverflow.com +// /questions/32911630/how-do-i-deal-with-localstorage-in-jest-tests + +// https://github.com/facebook/jest/issues/2098 + +//browserMocks.js +var localStorageMock = (function () { + var store = {}; + + return { + getItem: function (key) { + return store[key] || null; + }, + setItem: function (key, value) { + store[key] = value.toString(); + }, + clear: function () { + store = {}; + } + }; + +})(); + +Object.defineProperty(window, 'localStorage', { + value: localStorageMock +}); diff --git a/frontend/src/__test_support__/resource_index_builder.ts b/frontend/src/__test_support__/resource_index_builder.ts new file mode 100644 index 000000000..a0fdca081 --- /dev/null +++ b/frontend/src/__test_support__/resource_index_builder.ts @@ -0,0 +1,275 @@ +import { resourceReducer } from "../resources/reducer"; +import { TaggedResource } from "../resources/tagged_resources"; +import * as _ from "lodash"; +import { createStore } from "redux"; + +let FAKE_RESOURCES: TaggedResource[] = [ + { + "kind": "device", + "body": { + "id": 415, + "name": "wispy-firefly-846", + "webcam_url": undefined + }, + "uuid": "device.415.0" + }, + { + "kind": "farm_events", + "body": { + "id": 21, + "start_time": "2017-05-22T05:00:00.000Z", + "end_time": "2017-05-30T05:00:00.000Z", + "repeat": 1, + "time_unit": "daily", + "executable_id": 23, + "executable_type": "Sequence", + "calendar": [ + "2017-05-25T05:00:00.000Z", + "2017-05-26T05:00:00.000Z", + "2017-05-27T05:00:00.000Z", + "2017-05-28T05:00:00.000Z", + "2017-05-29T05:00:00.000Z" + ] + }, + "uuid": "farm_events.21.1" + }, + { + "kind": "farm_events", + "body": { + "id": 22, + "start_time": "2017-05-22T05:00:00.000Z", + "end_time": "2017-05-29T05:00:00.000Z", + "repeat": 2, + "time_unit": "daily", + "executable_id": 24, + "executable_type": "Sequence", + "calendar": [ + "2017-05-26T05:00:00.000Z", + "2017-05-28T05:00:00.000Z" + ] + }, + "uuid": "farm_events.22.2" + }, + { + "kind": "images", + "body": { + "id": 415, + "device_id": 415, + "attachment_processed_at": undefined, + "updated_at": "2017-05-24T20:41:19.766Z", + "created_at": "2017-05-24T20:41:19.766Z", + "attachment_url": "https://placehold.it/640%3Ftext=Processing...", + "meta": { + "x": 928, + "y": 428, + "z": 144 + } + }, + "uuid": "images.415.3" + }, + { + "kind": "images", + "body": { + "id": 414, + "device_id": 415, + "attachment_processed_at": undefined, + "updated_at": "2017-05-24T20:41:19.691Z", + "created_at": "2017-05-24T20:41:19.691Z", + "attachment_url": "http://placehold.it/640%3Ftext=Processing...", + "meta": { + "x": 853, + "y": 429, + "z": 165 + } + }, + "uuid": "images.414.4" + }, + { + "kind": "peripherals", + "body": { + "id": 11, + "pin": 13, + "mode": 0, + "label": "LED" + }, + "uuid": "peripherals.11.5" + }, + { + "kind": "points", + "body": { + "id": 1392, + "created_at": "2017-05-24T20:41:19.804Z", + "updated_at": "2017-05-24T20:41:19.804Z", + "device_id": 415, + "meta": { + + }, + "name": "fenestrate-flower-3632", + "pointer_type": "Plant", + "radius": 46, + "x": 347, + "y": 385, + "z": 0, + "openfarm_slug": "radish" + }, + "uuid": "points.1392.6" + }, + { + "kind": "points", + "body": { + "id": 1393, + "created_at": "2017-05-24T20:41:19.822Z", + "updated_at": "2017-05-24T20:41:19.822Z", + "device_id": 415, + "meta": { + + }, + "name": "alate-fire-7363", + "pointer_type": "Plant", + "radius": 36, + "x": 727, + "y": 376, + "z": 0, + "openfarm_slug": "garlic" + }, + "uuid": "points.1393.7" + }, + { + "kind": "points", + "body": { + "id": 1394, + "created_at": "2017-05-24T20:41:19.855Z", + "updated_at": "2017-05-24T20:41:19.855Z", + "device_id": 415, + "meta": { + "color": undefined, + "created_by": "plant-detection" + }, + "name": "untitled", + "pointer_type": "GenericPointer", + "radius": 6, + "x": 1245, + "y": 637, + "z": 5 + }, + "uuid": "points.1394.8" + }, + { + "kind": "points", + "body": { + "id": 1395, + "created_at": "2017-05-24T20:41:19.889Z", + "updated_at": "2017-05-24T20:41:19.889Z", + "device_id": 415, + "meta": { + "color": "gray", + "created_by": "plant-detection" + }, + "name": "untitled", + "pointer_type": "GenericPointer", + "radius": 10, + "x": 490, + "y": 421, + "z": 5 + }, + "uuid": "points.1395.9" + }, + { + "kind": "points", + "body": { + "id": 1396, + "created_at": "2017-05-24T20:41:20.112Z", + "updated_at": "2017-05-24T20:41:20.112Z", + "device_id": 415, + "meta": { + + }, + "name": "Slot One.", + "pointer_type": "ToolSlot", + "radius": 25, + "x": 10, + "y": 10, + "z": 10, + "tool_id": 14 + }, + "uuid": "points.1396.10" + }, + { + "kind": "regimens", + "body": { + "id": 11, + "name": "Test Regimen 456", + "color": "gray", + "device_id": 415, + "regimen_items": [ + { + "id": 33, + "regimen_id": 11, + "sequence_id": 23, + "time_offset": 345900000 + } + ] + }, + "uuid": "regimens.11.46" + }, + { + "kind": "sequences", + "body": { + "id": 23, + "name": "Goto 0, 0, 0", + "color": "gray", + "body": [ + { + "kind": "move_absolute", + "args": { + "location": { + "kind": "coordinate", + "args": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "offset": { + "kind": "coordinate", + "args": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "speed": 800 + } + } + ], + "args": { + "is_outdated": false, + "version": 4 + }, + "kind": "sequence" + }, + "uuid": "sequences.23.47" + }, + { + "kind": "tools", + "body": { + "id": 14, + "name": "Trench Digging Tool", + "status": "active" + }, + "uuid": "tools.14.49" + } +]; + +export + function buildResourceIndex(resources: TaggedResource[] = FAKE_RESOURCES) { + const KIND: keyof TaggedResource = "kind"; // Safety first, kids. + let store = createStore(resourceReducer); + _(resources) + .groupBy(KIND) + .pairs() + .map((x: [(TaggedResource["kind"]), TaggedResource[]]) => x) + .map(y => ({ type: "RESOURCE_READY", payload: { name: y[0], data: y[1] } })) + .map(store.dispatch); + return store.getState(); +} diff --git a/frontend/src/__test_support__/wrapper.tsx b/frontend/src/__test_support__/wrapper.tsx new file mode 100644 index 000000000..4c896782d --- /dev/null +++ b/frontend/src/__test_support__/wrapper.tsx @@ -0,0 +1,7 @@ +import * as React from "react"; + +export class Wrapper extends React.Component { + render() { + return
{this.props.children}
; + } +} diff --git a/frontend/src/__tests__/spinner_test.tsx b/frontend/src/__tests__/spinner_test.tsx new file mode 100644 index 000000000..bac491381 --- /dev/null +++ b/frontend/src/__tests__/spinner_test.tsx @@ -0,0 +1,11 @@ +import * as React from "react"; +import { Spinner } from "../spinner"; +import { render } from "enzyme"; + +describe("spinner", () => { + it("renders a circle", () => { + let spinner = render(); + let circles = spinner.find("circle"); + expect(circles.length).toEqual(1); + }); +}); diff --git a/frontend/src/__tests__/test_404.tsx b/frontend/src/__tests__/test_404.tsx new file mode 100644 index 000000000..8f31d145a --- /dev/null +++ b/frontend/src/__tests__/test_404.tsx @@ -0,0 +1,10 @@ +import * as React from "react"; +import { mount } from "enzyme"; +import { FourOhFour } from "../404"; + +describe("", function () { + it("renders helpful text", function () { + let dom = mount(); + expect(dom.html()).toContain("Page Not Found"); + }); +}); diff --git a/frontend/src/__tests__/test_history.ts b/frontend/src/__tests__/test_history.ts new file mode 100644 index 000000000..6dde496a0 --- /dev/null +++ b/frontend/src/__tests__/test_history.ts @@ -0,0 +1,12 @@ +import { history, push } from "../history"; + +describe("push()", () => { + it("calls history with a URL", () => { + const URL = "/wow.html"; + let oldFn = history.push; + history.push = jest.fn(); + push(URL); + expect(history.push).toHaveBeenCalledWith(URL); + history.push = oldFn; + }); +}); diff --git a/frontend/src/__tests__/test_util.ts b/frontend/src/__tests__/test_util.ts new file mode 100644 index 000000000..eb3080ebd --- /dev/null +++ b/frontend/src/__tests__/test_util.ts @@ -0,0 +1,136 @@ +import { + prettyPrintApiErrors, + defensiveClone, + getParam, + betterCompact, + safeStringFetch, + oneOf, + semverCompare, + SemverResult +} from "../util"; +describe("util", () => { + describe("safeStringFetch", () => { + let data = { + "null": null, + "undefined": undefined, + "number": 0, + "string": "hello", + "boolean": false, + "other": () => { "not allowed!" } + }; + + it("fetches null", () => { + expect(safeStringFetch(data, "null")).toEqual(""); + }); + + it("fetches undefined", () => { + expect(safeStringFetch(data, "undefined")).toEqual(""); + }); + + it("fetches number", () => { + expect(safeStringFetch(data, "number")).toEqual("0"); + }); + + it("fetches string", () => { + expect(safeStringFetch(data, "string")).toEqual("hello"); + }); + + it("fetches boolean", () => { + expect(safeStringFetch(data, "boolean")).toEqual("false"); + }); + + it("handles others with exception", () => { + expect(() => safeStringFetch(data, "other")).toThrow(); + }); + }); + + describe("betterCompact", () => { + it("removes falsy values", () => { + let before = [{}, {}, undefined]; + let after = betterCompact(before); + expect(after.length).toBe(2); + expect(after).not.toContain(undefined); + }); + }); + + describe("defensiveClone", () => { + it("deep clones any serializable object", () => { + let origin = { a: "b", c: 2, d: [{ e: { f: "g" } }] }; + let child = defensiveClone(origin); + origin.a = "--"; + origin.c = 0; + origin.d[0].e.f = "--"; + expect(child).not.toBe(origin); + expect(child.a).toEqual("b"); + expect(child.c).toEqual(2); + expect(child.d[0].e.f).toEqual("g"); + }); + }); + + describe("getParam", () => { + it("gets params", () => { + Object.defineProperty(window.location, "search", { + writable: true, + value: "?foo=bar&baz=wow" + }); + expect(getParam("foo")).toEqual("bar"); + expect(getParam("baz")).toEqual("wow"); + expect(getParam("blah")).toEqual(""); + }); + }); + + describe("prettyPrintApiErrors", () => { + it("handles properly formatted API error messages", () => { + let result = prettyPrintApiErrors({ + response: { + data: { + email: "can't be blank" + } + } + }); + expect(result).toEqual("Email: can't be blank."); + }); + }); + + describe("oneOf()", () => { + it("determines matches", () => { + expect(oneOf(["foo"], "foobar")).toBeTruthy(); + expect(oneOf(["foo", "baz"], "foo bar baz")).toBeTruthy(); + }); + + it("determines non-matches", () => { + expect(oneOf(["foo"], "QMMADSDASDASD")).toBeFalsy(); + expect(oneOf(["foo", "baz"], "nothing to see here.")).toBeFalsy(); + }) + }); + + describe("semver compare", () => { + it("knows when RIGHT_IS_GREATER", () => { + expect(semverCompare("3.1.6", "4.0.0")) + .toBe(SemverResult.RIGHT_IS_GREATER); + + expect(semverCompare("2.1.6", "4.1.0")) + .toBe(SemverResult.RIGHT_IS_GREATER); + + expect(semverCompare("4.1.6", "5.1.9")) + .toBe(SemverResult.RIGHT_IS_GREATER); + + expect(semverCompare("1.1.9", "2.0.2")) + .toBe(SemverResult.RIGHT_IS_GREATER); + }); + + it("knows when LEFT_IS_GREATER", () => { + expect(semverCompare("4.0.0", "3.1.6")) + .toBe(SemverResult.LEFT_IS_GREATER); + + expect(semverCompare("4.1.0", "2.1.6")) + .toBe(SemverResult.LEFT_IS_GREATER); + + expect(semverCompare("5.1.9", "4.1.6")) + .toBe(SemverResult.LEFT_IS_GREATER); + + expect(semverCompare("2.0.2", "1.1.9")) + .toBe(SemverResult.LEFT_IS_GREATER); + }); + }) +}); diff --git a/frontend/src/account/__tests__/test_change_password.tsx b/frontend/src/account/__tests__/test_change_password.tsx new file mode 100644 index 000000000..8fb51d2fe --- /dev/null +++ b/frontend/src/account/__tests__/test_change_password.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; +import { mount } from "enzyme"; +import { ChangePassword } from "../components"; +import { ChangePwPropTypes } from "../interfaces"; + +describe("", function () { + it("saves new user password", function () { + let props: ChangePwPropTypes = { + password: "wow", + new_password: "wow", + new_password_confirmation: "wow", + set: jest.fn(), + save: jest.fn() + }; + let dom = mount(); + expect(props.save).not.toHaveBeenCalled(); + dom.find("button").simulate("click"); + expect(props.save).toHaveBeenCalled(); + expect(dom.html()).toContain("password"); + }); +}); diff --git a/frontend/src/account/__tests__/test_change_settings.tsx b/frontend/src/account/__tests__/test_change_settings.tsx new file mode 100644 index 000000000..820323c4a --- /dev/null +++ b/frontend/src/account/__tests__/test_change_settings.tsx @@ -0,0 +1,19 @@ +import * as React from "react"; +import { mount } from "enzyme"; +import { Settings } from "../components"; +import { SettingsPropTypes } from "../interfaces"; + +describe("", function () { + it("saves user settings", function () { + let props: SettingsPropTypes = { + name: "new_name", + email: "new_email", + set: jest.fn(), + save: jest.fn() + }; + let dom = mount(); + expect(props.save).not.toHaveBeenCalled(); + dom.find("button").simulate("click"); + expect(props.save).toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/account/actions.ts b/frontend/src/account/actions.ts new file mode 100644 index 000000000..c166946c4 --- /dev/null +++ b/frontend/src/account/actions.ts @@ -0,0 +1,28 @@ +import * as axios from "axios"; +import { Thunk } from "../redux/interfaces"; +import { API } from "../api"; +import { DeletionRequest } from "./interfaces"; +import { toastErrors } from "../util"; +import { Session } from "../session"; + +export function deleteUser(payload: DeletionRequest): Thunk { + return (dispatch, getState) => { + let state = getState().auth; + if (state) { + // https://github.com/mzabriskie/axios/issues/312 + axios<{}>({ + method: "delete", + url: API.current.usersPath, + data: payload, + params: { force: true } + }) + .then(resp => { + alert("We're sorry to see you go. :("); + Session.clear(true); + }) + .catch(toastErrors); + } else { + throw new Error("Impossible"); + } + }; +} diff --git a/frontend/src/account/components/change_password.tsx b/frontend/src/account/components/change_password.tsx new file mode 100644 index 000000000..3bdf87e06 --- /dev/null +++ b/frontend/src/account/components/change_password.tsx @@ -0,0 +1,57 @@ +import * as React from "react"; +import { t } from "i18next"; +import { BlurableInput, Widget, WidgetHeader, WidgetBody } from "../../ui"; +import { ChangePwPropTypes } from "../interfaces"; + +export class ChangePassword extends React.Component { + render() { + let { set, save, password, new_password } = this.props; + let npc = this.props.new_password_confirmation; + let npcString = "new_password_confirmation"; + return + + + + +
+ + + + + + + +
+
; + } +} diff --git a/frontend/src/account/components/delete_account.tsx b/frontend/src/account/components/delete_account.tsx new file mode 100644 index 000000000..cd916cc07 --- /dev/null +++ b/frontend/src/account/components/delete_account.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { t } from "i18next"; +import { + BlurableInput, + Widget, + WidgetHeader, + WidgetBody, + Col, + Row +} from "../../ui"; +import { DeleteAccountPropTypes } from "../interfaces"; +import { Content } from "../../constants"; + +export class DeleteAccount extends React.Component { + render() { + let { set, deletion_confirmation, save } = this.props; + return + + +
+ {Content.ACCOUNT_DELETE_WARNING} +

+ {t(`If you are sure you want to delete your account, type in + your password below to continue.`)} +

+
+
+ + + + + + + + + + + +
+
+
; + } +} diff --git a/frontend/src/account/components/index.ts b/frontend/src/account/components/index.ts new file mode 100644 index 000000000..ed6f8099f --- /dev/null +++ b/frontend/src/account/components/index.ts @@ -0,0 +1,3 @@ +export * from "./change_password"; +export * from "./delete_account"; +export * from "./settings"; diff --git a/frontend/src/account/components/settings.tsx b/frontend/src/account/components/settings.tsx new file mode 100644 index 000000000..67ee7217d --- /dev/null +++ b/frontend/src/account/components/settings.tsx @@ -0,0 +1,43 @@ +import * as React from "react"; +import { t } from "i18next"; +import { BlurableInput, Widget, WidgetHeader, WidgetBody } from "../../ui"; +import { SettingsPropTypes } from "../interfaces"; + +export class Settings extends React.Component { + render() { + let { name, email, set, save } = this.props; + return + + + + +
+ + + + + +
+
; + } +} diff --git a/frontend/src/account/index.tsx b/frontend/src/account/index.tsx new file mode 100644 index 000000000..2736cbdf4 --- /dev/null +++ b/frontend/src/account/index.tsx @@ -0,0 +1,67 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { Settings, DeleteAccount, ChangePassword } from "./components"; +import { State, Props } from "./interfaces"; +import { Page, Row, Col } from "../ui"; +import { mapStateToProps } from "./state_to_props"; + +@connect(mapStateToProps) +export class Account extends React.Component { + constructor(props: Props) { + super(); + this.state = {}; + } + + componentDidMount() { + if (this.props.user) { + let { name, email } = this.props.user.body; + this.setState({ name, email }); + } + } + + set = (event: React.FormEvent) => { + let { name, value } = event.currentTarget; + this.setState({ [name]: value }); + } + + savePassword = () => { + this.props.saveUser(this.props.dispatch, this.state); + + this.setState({ + password: "", + new_password: "", + new_password_confirmation: "" + }); + } + + render() { + return + + + this.props.saveUser(this.props.dispatch, this.state)} /> + + + + + + this + .props + .enactDeletion(this.props.dispatch, this.state.deletion_confirmation)} /> + + + ; + } +} diff --git a/frontend/src/account/interfaces.ts b/frontend/src/account/interfaces.ts new file mode 100644 index 000000000..a3aa56e64 --- /dev/null +++ b/frontend/src/account/interfaces.ts @@ -0,0 +1,47 @@ +import { AuthState, User } from "../auth/interfaces"; +import { TaggedUser } from "../resources/tagged_resources"; + +export interface Props { + user: TaggedUser; + dispatch: Function; + saveUser(dispatch: Function, update: Partial): void; + enactDeletion(dispatch: Function, deletion_confirmation: string | undefined): void; +} + +/** JSON form that gets POSTed to the API when user updates their info. */ +export interface UserInfo { + name: string; + email: string; + password: string; + new_password: string; + new_password_confirmation: string; + /** User must enter password confirmation to delete their account. */ + deletion_confirmation: string; +} + +export type State = Partial; + +export interface DeletionRequest { + password: string; +} + +export interface DeleteAccountPropTypes { + deletion_confirmation: string | undefined; + set: React.EventHandler>; + save: React.EventHandler>; +} + +export interface ChangePwPropTypes { + password: string | undefined; + new_password: string | undefined; + new_password_confirmation: string | undefined; + set: React.EventHandler>; + save: React.EventHandler>; +} + +export interface SettingsPropTypes { + name: string; + email: string; + set: React.EventHandler>; + save: React.EventHandler>; +} diff --git a/frontend/src/account/state_to_props.ts b/frontend/src/account/state_to_props.ts new file mode 100644 index 000000000..2b2bcdb93 --- /dev/null +++ b/frontend/src/account/state_to_props.ts @@ -0,0 +1,23 @@ +import { Everything } from "../interfaces"; +import { deleteUser } from "./actions"; +import { Props } from "./interfaces"; +import { getUserAccountSettings } from "../resources/selectors"; +import { User } from "../auth/interfaces"; +import { edit, save } from "../api/crud"; + +export function mapStateToProps(props: Everything): Props { + let user = getUserAccountSettings(props.resources.index); + + return { + user, + saveUser(dispatch: Function, update: Partial) { + dispatch(edit(user, update)); + dispatch(save(user.uuid)) + }, + enactDeletion(dispatch: Function, password: string | undefined) { + dispatch(deleteUser({ password: password || "NEVER SET" })); + }, + dispatch: () => { throw new Error("NEVER SHOULD HAPPEN"); } + }; +} + diff --git a/frontend/src/api/api.ts b/frontend/src/api/api.ts new file mode 100644 index 000000000..e282d8e7f --- /dev/null +++ b/frontend/src/api/api.ts @@ -0,0 +1,127 @@ +type ProtocolString = "http:" | "https:"; +let current: API | undefined; +/** Record of all the relevant stuff in a string URL, except without all the + * stringly typed nonsense. */ +interface UrlInfo { + protocol: string; + hostname: string; + port: string; + pathname: string; + search: string; + hash: string; + host: string; +} + +/** Store all API endpoints in one place for the sake of DRYness. + * API.current is probably the instance you want to use. */ +export class API { + /** Guesses the most appropriate API port based on a number of environment + * factors such as hostname and protocol (HTTP vs. HTTPS). */ + static inferPort(): string { + + // ATTEMPT 1: Most devs running a webpack server on localhost + // run the API on port 3000. + if (location.port === "8080") { return "3000"; } + + // ATTEMPT 2: If they provide an explicit port (as in ://localhost:3000) + // use that port. + if (location.port) { return location.port; } + + // ATTEMPT 3: If that doesn't work, check for HTTPS:// and use the + // default of 443. + if (API.parseURL(location.origin).protocol === "https:") { + return "443"; + } + + // All others just use port 80. + return "80"; + } + + static fetchBrowserLocation() { + return `//${window.location.hostname}:${API.inferPort()}`; + } + + static fetchHostName() { + // Figured we could centralize this in case we change the method. + return window.location.hostname; + } + + static parseURL(url: string): UrlInfo { + // Such an amazing hack! + var info = document.createElement("a"); + info.href = url; + return info; + } + + static setBaseUrl(base: string) { + current = new API(base); + } + /** The base URL can't be known until the user is logged in. + * API.current will give URLs is the base URL is known and throw an + * exception otherwise. + */ + static get current(): API { + if (current) { + return current; + } else { + throw new Error(` + Tried to access API before URL was resolved. + Call API.setBaseUrl() before using API.current .`); + } + }; + + /** "https:" or "http:". NO "//"! */ + private readonly protocol: ProtocolString; + /** "localhost", "yahoo.com" */ + private readonly hostname: string; + /** "80", "443" or "" */ + private readonly port: string; + /** "/pathname/x/whatever" or "/foo/" */ + private readonly pathname: string; + /** "?foo=bar" */ + private readonly search: string; + /** "#hashfragment" */ + private readonly hash: string; + /** "example.com:3000" */ + private readonly host: string; + + constructor(input: string) { + let url = API.parseURL(input); + this.protocol = url.protocol as ProtocolString; + this.hostname = url.hostname; + this.port = url.port; + this.pathname = url.pathname; + this.search = url.search; + this.hash = url.hash; + this.host = url.host; + } + + /** http://localhost:3000 */ + get baseUrl() { return `${this.protocol}//${this.host}`; }; + /** /api/tokens/ */ + get tokensPath() { return `${this.baseUrl}/api/tokens/`; }; + /** /api/password_resets/ */ + get passwordResetPath() { return `${this.baseUrl}/api/password_resets/`; }; + /** /api/device/ */ + get devicePath() { return `${this.baseUrl}/api/device/`; }; + /** /api/users/ */ + get usersPath() { return `${this.baseUrl}/api/users/`; }; + /** /api/peripherals/ */ + get peripheralsPath() { return `${this.baseUrl}/api/peripherals/`; }; + /** /api/farm_events/ */ + get farmEventsPath() { return `${this.baseUrl}/api/farm_events/`; }; + /** /api/regimens/ */ + get regimensPath() { return `${this.baseUrl}/api/regimens/`; }; + /** /api/sequences/ */ + get sequencesPath() { return `${this.baseUrl}/api/sequences/`; }; + /** /api/tools/ */ + get toolsPath() { return `${this.baseUrl}/api/tools/`; }; + /** /api/images/ */ + get imagesPath() { return `${this.baseUrl}/api/images/`; }; + /** /api/points/ */ + get pointsPath() { return `${this.baseUrl}/api/points/`; }; + /** /api/points/search */ + get pointSearchPath() { return `${this.pointsPath}/search/`; }; + /** /api/logs */ + get logsPath() { return `${this.baseUrl}/api/logs/`; }; +} diff --git a/frontend/src/api/crud.ts b/frontend/src/api/crud.ts new file mode 100644 index 000000000..ba8f26557 --- /dev/null +++ b/frontend/src/api/crud.ts @@ -0,0 +1,192 @@ +import { + TaggedResource, + ResourceName, + isTaggedResource, + TaggedSequence, +} from "../resources/tagged_resources"; +import { GetState, ReduxAction } from "../redux/interfaces"; +import { API } from "./index"; +import * as Axios from "axios"; +import { updateOK, updateNO, destroyOK, destroyNO } from "../resources/actions"; +import { UnsafeError } from "../interfaces"; +import { findByUuid } from "../resources/reducer"; +import { generateUuid } from "../resources/util"; +import { defensiveClone } from "../util"; +import { EditResourceParams } from "./interfaces"; +import { ResourceIndex } from "../resources/interfaces"; +import { SequenceBodyItem } from "farmbot/dist"; + +export function edit(tr: TaggedResource, update: Partial): + ReduxAction { + return { + type: "EDIT_RESOURCE", + payload: { uuid: tr.uuid, update: update } + }; +} + +/** Rather than update (patch) a TaggedResource, this method will overwrite + * everything within the `.body` property. */ +export function overwrite(tr: TaggedResource, update: typeof tr.body): + ReduxAction { + return { + type: "OVERWRITE_RESOURCE", + payload: { uuid: tr.uuid, update: update } + }; +} + +interface EditStepProps { + step: Readonly; + sequence: Readonly; + index: number; + /** Callback provides a fresh, defensively cloned copy of the + * original step. Perform modifications to the resource within this + * callback */ + executor(stepCopy: SequenceBodyItem): void; +} + +/** Editing sequence steps is a tedious process. Use this function in place + * of `edit()` or `overwrite`. */ +export function editStep({ step, sequence, index, executor }: EditStepProps) { + // https://en.wikipedia.org/wiki/NeXTSTEP + let nextStep = defensiveClone(step); + let nextSeq = defensiveClone(sequence); + // Let the developer safely perform mutations here: + executor(nextStep); + nextSeq.body.body = nextSeq.body.body || []; + nextSeq.body.body[index] = nextStep; + return overwrite(sequence, nextSeq.body); +} + +/** Initialize (but don't save) an indexed / tagged resource. */ +export function init(resource: TaggedResource): ReduxAction { + resource.body.id = 0; + resource.dirty = true; + /** Technically, this happens in the reducer, but I like to be extra safe. */ + resource.uuid = generateUuid(resource.body.id, resource.kind); + return { type: "INIT_RESOURCE", payload: resource } +} + +export function initSave(resource: TaggedResource) { + return function (dispatch: Function, getState: GetState) { + let action = init(resource); + if (resource.body.id === 0) { delete resource.body.id; } + dispatch(action); + let nextState = getState().resources.index; + let tr = findByUuid(nextState, action.payload.uuid); + return dispatch(save(tr.uuid)); + } +} + +export function save(uuid: string) { + return function (dispatch: Function, getState: GetState) { + let resource = findByUuid(getState().resources.index, uuid); + dispatch({ type: "SAVE_RESOURCE_START", payload: resource }); + return dispatch(update(uuid)); + } +} + +function update(uuid: string) { + return function (dispatch: Function, getState: GetState) { + return updateViaAjax(getState().resources.index, uuid, dispatch); + } +} + +export function destroy(uuid: string) { + return function (dispatch: Function, getState: GetState) { + let resource = findByUuid(getState().resources.index, uuid); + let maybeProceed = confirmationChecker(resource); + return maybeProceed(() => { + if (resource.body.id) { + return Axios + .delete(urlFor(resource.kind) + resource.body.id) + .then(function (resp) { + dispatch(destroyOK(resource)); + }) + .catch(function (err: UnsafeError) { + dispatch(destroyNO({ err, uuid })); + return Promise.reject(err); + }); + } else { + dispatch(destroyOK(resource)) + return Promise.resolve(""); + } + }) || Promise.reject("User pressed cancel"); + } +} + +export function saveAll(input: TaggedResource[], + callback: () => void = _.noop, + errBack: (err: UnsafeError) => void = _.noop) { + return function (dispatch: Function, getState: GetState) { + /** Perf issues maybe? RC - Mar 2017 */ + let p = input.filter(x => x.dirty).map(tts => dispatch(save(tts.uuid))); + Promise.all(p).then(callback, errBack); + } +} + +export function urlFor(tag: ResourceName) { + const OPTIONS: Partial> = { + sequences: API.current.sequencesPath, + tools: API.current.toolsPath, + farm_events: API.current.farmEventsPath, + regimens: API.current.regimensPath, + peripherals: API.current.peripheralsPath, + points: API.current.pointsPath, + users: API.current.usersPath, + device: API.current.devicePath, + images: API.current.imagesPath, + logs: API.current.logsPath + } + let url = OPTIONS[tag]; + if (url) { + return url; + } else { + throw new Error(`No resource/URL handler for ${tag} yet. + Consider adding one to crud.ts`); + } +} + +/** Shared functionality in create() and update(). */ +function updateViaAjax(index: ResourceIndex, + uuid: string, + dispatch: Function) { + let resource = findByUuid(index, uuid); + let { body, kind } = resource; + let verb: "post" | "put"; + let url = urlFor(kind); + if (body.id) { + verb = "put"; + url += body.id; + } else { + verb = "post"; + } + return Axios[verb](url, body) + .then(function (resp) { + let r1 = defensiveClone(resource); + let r2 = { body: defensiveClone(resp.data) }; + let newTR = _.assign({}, r1, r2); + if (isTaggedResource(newTR)) { + dispatch(updateOK(newTR)); + } else { + throw new Error("Just saved a malformed TR."); + } + }) + .catch(function (err: UnsafeError) { + dispatch(updateNO({ err, uuid })); + return Promise.reject(err); + }); +} + + +let MUST_CONFIRM_LIST: ResourceName[] = ["farm_events", "points"]; +let confirmationChecker = (resource: TaggedResource) => + (proceed: () => T): T | undefined => { + if (MUST_CONFIRM_LIST.includes(resource.kind)) { + if (confirm("Are you sure you want to delete this item?")) { + return proceed(); + } else { + return undefined; + } + } + return proceed(); + } diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts new file mode 100644 index 000000000..d158c5764 --- /dev/null +++ b/frontend/src/api/index.ts @@ -0,0 +1 @@ +export * from "./api"; diff --git a/frontend/src/api/interfaces.ts b/frontend/src/api/interfaces.ts new file mode 100644 index 000000000..13f3763d7 --- /dev/null +++ b/frontend/src/api/interfaces.ts @@ -0,0 +1,4 @@ +export interface EditResourceParams { + uuid: string; + update: object; +} diff --git a/frontend/src/app.tsx b/frontend/src/app.tsx new file mode 100644 index 000000000..611896538 --- /dev/null +++ b/frontend/src/app.tsx @@ -0,0 +1,89 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import * as _ from "lodash"; +import { init, error } from "farmbot-toastr"; +import { NavBar } from "./nav"; +import { Everything, Log } from "./interfaces"; +import { Spinner } from "./spinner"; +import { BotState } from "./devices/interfaces"; +import { ResourceName, TaggedUser } from "./resources/tagged_resources"; +import { selectAllLogs, maybeFetchUser } from "./resources/selectors"; + +/** Remove 300ms delay on touch devices - https://github.com/ftlabs/fastclick */ +let fastClick = require("fastclick"); +fastClick.attach(document.body); + +/** For the logger module */ +init(); + +/** + * If the sync object takes more than 10s to load, the user will be granted + * access into the app, but still warned. + */ +const TIMEOUT_MESSAGE = `App could not be fully loaded, we recommend you try  +refreshing the page.`; + +interface AppProps { + dispatch: Function; + loaded: ResourceName[]; + logs: Log[]; + user: TaggedUser | undefined; + bot: BotState; +} + +function mapStateToProps(props: Everything): AppProps { +  return { + dispatch: props.dispatch, + user: maybeFetchUser(props.resources.index), + bot: props.bot, + logs: _(selectAllLogs(props.resources.index)) + .map(x => x.body) + .sortBy("created_at") + .reverse() + .value(), + loaded: props.resources.loaded + }; +} + +/** + * Relational resources that *must* load before app starts. + * App will crash at load time if they are not pre-loaded. + */ +const MUST_LOAD: ResourceName[] = [ + "sequences", + "regimens", + "farm_events", + "points" +]; + +@connect(mapStateToProps) +export default class App extends React.Component { + + get isLoaded() { + return (MUST_LOAD.length === + _.intersection(this.props.loaded, MUST_LOAD).length); + } + + componentDidMount() { + setTimeout(() => { + if (!this.isLoaded) { + this.props.dispatch({ type: "SYNC_TIMEOUT_EXCEEDED" }); + error(TIMEOUT_MESSAGE, "Warning"); + } + }, 10000); + } + + render() { + let syncLoaded = this.isLoaded; + return
+ + {!syncLoaded && } + {syncLoaded && this.props.children} +
; + } +} diff --git a/frontend/src/auth/actions.ts b/frontend/src/auth/actions.ts new file mode 100644 index 000000000..179ca918b --- /dev/null +++ b/frontend/src/auth/actions.ts @@ -0,0 +1,136 @@ +import * as Axios from "axios"; +import { t } from "i18next"; +import { error, success } from "farmbot-toastr"; +import { connectDevice, fetchReleases } from "../devices/actions"; +import { push } from "../history"; +import { AuthState } from "./interfaces"; +import { ReduxAction, Thunk } from "../redux/interfaces"; +import * as Sync from "../sync/actions"; +import { API } from "../api"; +import { toastErrors } from "../util"; +import { Session } from "../session"; +import { UnsafeError } from "../interfaces"; +import { + responseFulfilled, + responseRejected, + requestFulfilled +} from "../interceptors"; +import { Actions } from "../constants"; + +export function didLogin(authState: AuthState, dispatch: Function) { + API.setBaseUrl(authState.token.unencoded.iss); + dispatch(fetchReleases(authState.token.unencoded.os_update_server)); + dispatch(loginOk(authState)); + + Sync.fetchSyncData(dispatch); + dispatch(connectDevice(authState.token.encoded)); +}; + +// We need to handle OK logins for numerous use cases (Ex: login & registration) +function onLogin(dispatch: Function) { + return (response: Axios.AxiosXHR) => { + let { data } = response; + Session.put(data); + didLogin(data, dispatch); + push("/app/controls"); + }; +}; + +export function login(username: string, password: string, url: string): Thunk { + return dispatch => { + return requestToken(username, password, url).then( + onLogin(dispatch), + (err) => dispatch(loginErr()) + ); + }; +} + +function loginErr() { + error(t("Login failed.")); + return { type: "LOGIN_ERR" }; +} + +/** Very important. Once called, all outbound HTTP requests will + * have a JSON Web Token attached to their "Authorization" header, + * thereby granting access to the API. */ +export function loginOk(auth: AuthState): ReduxAction { + Axios.interceptors.response.use(responseFulfilled, responseRejected); + Axios.interceptors.request.use(requestFulfilled(auth)); + + return { + type: Actions.LOGIN_OK, + payload: auth + }; +} + +/** Sign up for the FarmBot service over AJAX. */ +export function register(name: string, + email: string, + password: string, + confirmation: string, + url: string): Thunk { + return dispatch => { + let p = requestRegistration(name, + email, + password, + confirmation, + url); + return p.then(onLogin(dispatch), + onRegistrationErr(dispatch)); + }; +} + +/** Handle user registration errors. */ +export function onRegistrationErr(dispatch: Function) { + return (err: UnsafeError) => { + toastErrors(err); + dispatch({ + type: "REGISTRATION_ERROR", + payload: err + }); + }; +} + +/** Build a JSON object in preparation for an HTTP POST + * to registration endpoint */ +function requestRegistration(name: string, + email: string, + password: string, + confirmation: string, + url: string) { + let form = { + user: { + email: email, + password: password, + password_confirmation: confirmation, + name: name + } + }; + return Axios.post(API.current.usersPath, form); +} + +/** Fetch API token if already registered. */ +function requestToken(email: string, + password: string, + url: string) { + let payload = { user: { email: email, password: password } }; + // Set the base URL once here. + // It will get set once more when we get the "iss" claim from the JWT. + API.setBaseUrl(url); + return Axios.post(API.current.tokensPath, payload); +} + +export function logout() { + // When logging out, we pop up a toast message to confirm logout. + // Sometimes, LOGOUT is dispatched when the user is already logged out. + // In those cases, seeing a logout message may confuse the user. + // To circumvent this, we must check if the user had a token. + // If there was infact a token, we can safely show the message. + if (Session.get()) { success("You have been logged out."); } + Session.clear(true); + // Technically this is unreachable code: + return { + type: "LOGOUT", + payload: {} + }; +} diff --git a/frontend/src/auth/interfaces.ts b/frontend/src/auth/interfaces.ts new file mode 100644 index 000000000..e06e6eec7 --- /dev/null +++ b/frontend/src/auth/interfaces.ts @@ -0,0 +1,38 @@ +export interface Token { + unencoded: UnencodedToken; + encoded: string; +} + +export interface AuthState { + token: Token; +} + +export interface UnencodedToken { + // /** SUBJECT - The user's email. STOP USING THIS! */ + // sub: string; + /** ISSUED AT */ + iat: number; + /** JSON TOKEN IDENTIFIER - a serial number for the token. */ + jti: string; + /** ISSUER - Where token came from (API URL). */ + iss: string; + /** EXPIRATION DATE */ + exp: number; + /** MQTT server address */ + mqtt: string; + /** BOT UNIQUE IDENTIFIER */ + bot: string; + /** Where to download RPi software */ + os_update_server: string; + /** Where to download firmware. */ + fw_update_server: string; +} + +export interface User { + id: number; + device_id: number; + name: string; + email: string; + created_at: string; + updated_at: string; +} diff --git a/frontend/src/auth/reducer.ts b/frontend/src/auth/reducer.ts new file mode 100644 index 000000000..864e0f277 --- /dev/null +++ b/frontend/src/auth/reducer.ts @@ -0,0 +1,8 @@ +import { AuthState } from "./interfaces"; +import { generateReducer } from "../redux/generate_reducer"; +import { Actions } from "../constants"; + +export let authReducer = generateReducer(undefined) + .add(Actions.LOGIN_OK, (s, { payload }) => { + return payload; + }); diff --git a/frontend/src/config/__tests__/actions_test.ts b/frontend/src/config/__tests__/actions_test.ts new file mode 100644 index 000000000..1e00672fc --- /dev/null +++ b/frontend/src/config/__tests__/actions_test.ts @@ -0,0 +1,17 @@ +jest.unmock("../../auth/actions"); +const actions = require("../../auth/actions"); +let didLogin = jest.fn(); +jest.mock("../../session", () => ({ Session: { get: () => false } })); +actions.didLogin = didLogin; +import { ready } from "../actions"; + +const STUB_STATE = { auth: "FOO BAR BAZ" }; +describe("Actions", () => { + it("fetches configs and calls didLogin()", () => { + let dispatch = jest.fn(); + let getState = jest.fn(() => STUB_STATE); + let thunk = ready(); + thunk(dispatch, getState); + expect(didLogin.mock.calls.length).toBe(1); + }); +}); diff --git a/frontend/src/config/actions.ts b/frontend/src/config/actions.ts new file mode 100644 index 000000000..ef346e2c9 --- /dev/null +++ b/frontend/src/config/actions.ts @@ -0,0 +1,11 @@ +import { didLogin } from "../auth/actions"; +import { Thunk } from "../redux/interfaces"; +import { Session } from "../session"; + +/** Lets Redux know that the app is ready to bootstrap. */ +export function ready(): Thunk { + return (dispatch, getState) => { + let state = Session.get() || getState().auth; + if (state) { didLogin(state, dispatch); }; + }; +} diff --git a/frontend/src/config/interfaces.ts b/frontend/src/config/interfaces.ts new file mode 100644 index 000000000..00baf6247 --- /dev/null +++ b/frontend/src/config/interfaces.ts @@ -0,0 +1,11 @@ +/** Payload of CHANGE_API_HOST */ +export interface ChangeApiHost { host: string; }; + +/** Payload of CHANGE_API_PORT */ +export interface ChangeApiPort { port: string; }; + +/** This is a subset of attributes found on window.location. */ +export interface ConfigState { + host: string; + port: string; +} diff --git a/frontend/src/config/reducer.ts b/frontend/src/config/reducer.ts new file mode 100644 index 000000000..4341216fc --- /dev/null +++ b/frontend/src/config/reducer.ts @@ -0,0 +1,22 @@ +import { generateReducer } from "../redux/generate_reducer"; +import { ChangeApiHost, ChangeApiPort, ConfigState } from "./interfaces"; +import { API } from "../api"; +import { Actions } from "../constants"; + +let initialState: ConfigState = { + host: location.hostname, + // It gets annoying to manually change the port # in dev mode. + // I automatically point to port 3000 on local. + port: API.inferPort() +}; + +export let configReducer = generateReducer(initialState) + .add(Actions.CHANGE_API_PORT, (s, { payload }) => { + s.port = payload.port.replace(/\D/g, ""); + return s; + }) + .add(Actions.CHANGE_API_HOST, (s, { payload }) => { + s.host = payload.host; + return s; + }); + diff --git a/frontend/src/constants.ts b/frontend/src/constants.ts new file mode 100644 index 000000000..a1048259d --- /dev/null +++ b/frontend/src/constants.ts @@ -0,0 +1,321 @@ +/** + * Seems like a better idea to keep content and tooltips centralized. If we have + * the ability to keep the app safer from possible accidental breakages by + * avoiding going into components for copy changes, why not right? ¯\_(ツ)_/¯ + */ + +export namespace ToolTips { + + // Controls + export const MOVE = + `Use these manual control buttons to move FarmBot in realtime. Press the + arrows for relative movements or type in new coordinates and press GO for an + absolute movement. Tip: Press the Home button when you are done so FarmBot + is ready to get back to work.` + + export const WEBCAM_SAVE = + `Press the edit button to update and save your webcam URL.` + + export const PERIPHERALS = + `Use these toggle switches to control FarmBot's peripherals in realtime. To + edit and create new peripherals, press the EDIT button. Make sure to turn + things off when you're done!` + + // Device + export const OS_SETTINGS = + `View and change device settings.` + + export const HW_SETTINGS = + `Change settings of your FarmBot hardware with the fields below. Caution: + Changing these settings to extreme values can cause hardware malfunction. + Make sure to test any new settings before letting your FarmBot use them + unsupervised. Tip: Recalibrate FarmBot after changing settings and test a + few sequences to verify that everything works as expected. Note: Currently + not all settings can be changed.` + + // Hardware Settings: Homing and Calibration + export const HOMING = + `(Alpha) If encoders or end-stops are enabled, home axis (find zero).` + + export const CALIBRATION = + `(Alpha) If encoders or end-stops are enabled, home axis and determine + maximum.` + + export const SET_ZERO_POSITION = + `Set the current location as zero.` + + export const FIND_HOME_ON_BOOT = + `If encoders or end-stops are enabled, find the home position when the + device powers on.` + + export const STOP_AT_HOME = + `Stop at the home location of the axis.` + + export const STOP_AT_MAX = + `Don't allow movement past the maximum value provided in AXIS LENGTH.` + + export const NEGATIVE_COORDINATES_ONLY = + `Restrict travel to negative coordinate locations. Overridden by disabling + STOP AT HOME.` + + export const LENGTH = + `Set the length of each axis to provide software limits. Used only if + STOP AT MAX is enabled.` + + export const TIMEOUT_AFTER = + `Amount of time to wait for a command to execute before stopping.` + + // Hardware Settings: Motors + export const MAX_MOVEMENT_RETRIES = + `Number of times to retry a movement before stopping.` + + export const MAX_SPEED = + `Maximum travel speed after acceleration in motor steps per second.` + + export const MIN_SPEED = + `Minimum movement speed. Also used for homing, calibration, and movements + across home.` + + export const ACCELERATE_FOR = + `Number of steps used for acceleration and deceleration.` + + export const STEPS_PER_MM = + `The number of motor steps required to move the axis one millimeter.` + + export const ALWAYS_POWER_MOTORS = + `Keep power applied to motors. Prevents slipping from gravity in certain + situations.` + + export const INVERT_MOTORS = + `Invert direction of motor during calibration.` + + export const ENABLE_X2_MOTOR = + `Enable use of a second x-axis motor. Connects to E0 on RAMPS.` + + // Hardware Settings: Encoders and Endstops + export const ENABLE_ENCODERS = + `(Alpha) Enable use of rotary encoders during calibration and homing.` + + export const ENCODER_POSITIONING = + `[EXPERIMENTAL] Use encoders for positioning.` + + export const INVERT_ENCODERS = + `(Alpha) Reverse the direction of encoder position reading.` + + export const MAX_MISSED_STEPS = + `(Alpha) Number of steps missed (determined by encoder) before motor is + considered to have stalled.` + + export const ENCODER_MISSED_STEP_DECAY = + `(Alpha) Reduction to missed step total for every good step.` + + export const ENCODER_SCALING = + `(Alpha) encoder scaling factor = 100 * (motor resolution * microsteps) / + (encoder resolution)` + + export const ENABLE_ENDSTOPS = + `Enable use of electronic end-stops during calibration and homing.` + + export const INVERT_ENDPOINTS = + `Swap axis end-stops during calibration.` + + // Farmware + export const FARMWARE = + `Manage Farmware (plugins).` + + export const PHOTOS = + `Take and view photos with your FarmBot's camera.` + + export const WEED_DETECTOR = + `Detect weeds using FarmBot's camera and display them on the Farm Designer + map.` + + export const CAMERA_CALIBRATION = + `Calibrate FarmBot's camera for use in the weed detection software.` + + // Sequences + export const SEQUENCE_COMMANDS = + `These are the most basic commands FarmBot can execute. Drag and drop them + to create sequences for watering, planting seeds, measuring soil properties, + and more.` + + export const SEQUENCE_EDITOR = + `Drag and drop commands here to create sequences for watering, planting + seeds, measuring soil properties, and more. Press the Test button to + immediately try your sequence with FarmBot. You can also edit, copy, and + delete existing sequences; assign a color; and give your commands custom + names.` + + export const SEQUENCE_LIST = + `Here is the list of all of your sequences. Click one to edit.` + + export const MOVE_ABSOLUTE = + `The Move Absolute step instructs FarmBot to move to the specified + coordinate regardless of the current position. For example, if FarmBot is + currently at X=1000, Y=1000 and it receives a Move Absolute where X=0 and + Y=3000, then FarmBot will move to X=0, Y=3000. If FarmBot must move in + multiple directions, it will move diagonally. If you require straight + movements along one axis at a time, use multiple Move Absolute steps. + Offsets allow you to more easily instruct FarmBot to move to a location, + but offset from it by the specified amount. For example moving to just + above where a peripheral is located. Using offsets lets FarmBot do the + math for you.` + + export const MOVE_RELATIVE = + `The Move Relative step instructs FarmBot to move the specified distance + from its current location. For example, if FarmBot is currently at X=1000, + Y=1000 and it receives a Move Relative where X=0 and Y=3000, then FarmBot + will move to X=1000, Y=4000. If FarmBot must move in multiple directions, + it will move diagonally. If you require straight movements along one axis + at a time, use multiple Move Relative steps. Move Relative steps should be + preceded by a Move Absolute step to ensure you are starting from a known + location.` + + export const WRITE_PIN = + `The Write Pin step instructs FarmBot to set the specified pin on the + Arduino to the specified mode and value. A Pin Mode of 0 is for on/off + control, while a Pin Mode of 1 is for PWM (pulse width modulation) (0-255).` + + export const READ_PIN = + `The Read Pin step instructs FarmBot to read the current value of the + specified pin. A Pin Mode of 0 is for digital (on/off), while a Pin Mode + of 1 is for analog (0-1023 for 0-5V).` + + export const WAIT = + `The Wait step instructs FarmBot to wait for the specified amount of time. + Use it in combination with the Pin Write step to water for a length of + time.` + + export const SEND_MESSAGE = + `The Send Message step instructs FarmBot to send a custom message to the + logs (and toast message and/or email, if selected). This can help you with + debugging your sequences.` + + export const FIND_HOME = + `The Find Home step instructs the device to perform a homing command to + find and set zero for the chosen axis or axes.` + + export const IF = + `Execute a sequence if a condition is satisfied. If the condition is not + satisfied, chose to do nothing or execute a different sequence.` + + export const EXECUTE_SCRIPT = + `The Run Farmware step runs a Farmware package. The weed detection script + is the only script supported at the moment, but user definable script + support is coming soon!` + + export const TAKE_PHOTO = + `Snaps a photo using the device camera. Select the camera type on the + Device page.` + + // Regimens + export const BULK_SCHEDULER = + `Add sequences to your regimen by selecting a sequence from the drop down, + specifying a time, choosing which days it should run on, and then clicking + the + button. For example: a Seeding sequence might be scheduled for Day 1, + while a Watering sequence would be scheduled to run every other day.` + + export const REGIMEN_EDITOR = + `Regimens allow FarmBot to take care of a plant throughout its entire life. + A regimen consists of many sequences that are scheduled to run based on the + age of the plant. Regimens are applied to plants from the farm designer + (coming soon) and can be re-used on many plants growing at the same or + different times. Multiple regimens can be applied to any one plant.` + + export const REGIMEN_LIST = + `This is a list of all of your regimens. Click one to begin editing it.` + + // Tools + export const TOOL_LIST = + `This is a list of all your FarmBot Tools. Click the Edit button to add, + edit, or delete tools.` + + export const TOOLBAY_LIST = + `Toolbays are where you store your FarmBot Tools. Each Toolbay has Slots + that you can put your Tools in, which should be reflective of your real + FarmBot hardware configuration.` + +} + +export namespace Content { + + // Account + export const ACCOUNT_DELETE_WARNING = + `WARNING! Deleting your account will permanently delete all of your + Sequences , Regimens, Events, and Farm Designer data.Upon deleting your + account, FarmBot will cease to function and become inaccessible until it is + paired with another web app account. To do this, you will need to reboot + your FarmBot so that is goes back into configuration mode for pairing with + another user account. When this happens, all of the data on your FarmBot + will be overwritten with the new account's data. If the account is brand + new, then FarmBot will become a blank slate.` + + // Controls + export const FACTORY_RESET_WARNING = + `Factory resetting your FarmBot will destroy all data on the device, + revoking your FarmBot's abilily to connect to your web app account and your + home wifi. Upon factory resetting, your device will restart into + Configurator mode. Factory resetting your FarmBot will not affect any data + or settings from your web app account, allowing you to do a complete restore + to your device once it is back online and paired with your web app account.` + +} + +export namespace Actions { + + // Resources + export const DESTROY_RESOURCE_OK = `DESTROY_RESOURCE_OK` + export const INIT_RESOURCE = `INIT_RESOURCE` + export const SAVE_SPECIAL_RESOURCE = `SAVE_SPECIAL_RESOURCE` + export const SAVE_RESOURCE_OK = `SAVE_RESOURCE_OK` + export const UPDATE_RESOURCE_OK = `UPDATE_RESOURCE_OK` + export const EDIT_RESOURCE = `EDIT_RESOURCE` + export const OVERWRITE_RESOURCE = `OVERWRITE_RESOURCE` + export const SAVE_RESOURCE_START = `SAVE_RESOURCE_START` + export const RESOURCE_READY = `RESOURCE_READY` + + // Auth + export const LOGIN_OK = `LOGIN_OK` + + // Config + export const CHANGE_API_PORT = `CHANGE_API_PORT` + export const CHANGE_API_HOST = `CHANGE_API_HOST` + + // Devices + export const TOGGLE_CONTROL_PANEL_OPTION = `TOGGLE_CONTROL_PANEL_OPTION` + export const CHANGE_STEP_SIZE = `CHANGE_STEP_SIZE` + export const SETTING_UPDATE_START = `SETTING_UPDATE_START` + export const SETTING_UPDATE_END = `SETTING_UPDATE_END` + export const BOT_CHANGE = `BOT_CHANGE` + export const FETCH_OS_UPDATE_INFO_OK = `FETCH_OS_UPDATE_INFO_OK` + export const FETCH_FW_UPDATE_INFO_OK = `FETCH_FW_UPDATE_INFO_OK` + export const SET_SYNC_STATUS = `SET_SYNC_STATUS` + export const INVERT_JOG_BUTTON = `INVERT_JOG_BUTTON` + + // Draggable + export const PUT_DATA_XFER = `PUT_DATA_XFER` + export const DROP_DATA_XFER = `DROP_DATA_XFER` + + // Designer + export const SEARCH_QUERY_CHANGE = `SEARCH_QUERY_CHANGE` + export const SELECT_PLANT = `SELECT_PLANT` + export const TOGGLE_HOVERED_PLANT = `TOGGLE_HOVERED_PLANT` + export const UPDATE_BOT_ORIGIN_QUADRANT = `UPDATE_BOT_ORIGIN_QUADRANT` + export const UPDATE_MAP_ZOOM_LEVEL = `UPDATE_MAP_ZOOM_LEVEL` + export const OF_SEARCH_RESULTS_OK = `OF_SEARCH_RESULTS_OK` + + // Regimens + export const PUSH_WEEK = `PUSH_WEEK` + export const POP_WEEK = `POP_WEEK` + export const TOGGLE_DAY = `TOGGLE_DAY` + export const SELECT_REGIMEN = `SELECT_REGIMEN` + export const SET_SEQUENCE = `SET_SEQUENCE` + export const SET_TIME_OFFSET = `SET_TIME_OFFSET` + + // Sequences + export const SELECT_SEQUENCE = `SELECT_SEQUENCE` + + // Farmware + export const SELECT_IMAGE = `SELECT_IMAGE` + +} diff --git a/frontend/src/controls/axis_input_box.tsx b/frontend/src/controls/axis_input_box.tsx new file mode 100644 index 000000000..c0178223a --- /dev/null +++ b/frontend/src/controls/axis_input_box.tsx @@ -0,0 +1,67 @@ +import * as React from "react"; +import { isNaN } from "lodash"; +import { AxisInputBoxProps, AxisInputBoxState } from "./interfaces"; + +export class AxisInputBox + extends React.Component { + constructor() { + super(); + this.state = { value: undefined }; + } + + whatToDisplay() { + if (this.state.value === undefined) { + return this.props.value; + } else { + return this.state.value; + } + } + + style() { + let border = "1px solid red"; + return (this.state.value === undefined) ? {} : { border }; + } + + componentWillReceiveProps(nextProps: AxisInputBoxProps) { + if (this.props.value !== nextProps.value) { + this.reset(); + } + } + + blur = (e: React.FormEvent) => { + switch (this.state.value) { + case undefined: + return; + case "": + return this.reset(); + default: + let num = parseFloat(this.state.value); + if (isNaN(num)) { + return this.reset(); + } else { + return this.props.onChange(this.props.axis, num); + } + } + } + + reset() { + this.setState({ value: undefined }); + this.props.onChange(this.props.axis, undefined); + } + + change = (e: React.FormEvent) => { + this.setState({ value: e.currentTarget.value }); + } + + render() { + return
+ + +
; + } +} diff --git a/frontend/src/controls/axis_input_box_group.tsx b/frontend/src/controls/axis_input_box_group.tsx new file mode 100644 index 000000000..063437e0d --- /dev/null +++ b/frontend/src/controls/axis_input_box_group.tsx @@ -0,0 +1,66 @@ +import * as React from "react"; +import { AxisInputBox } from "./axis_input_box"; +import { t } from "i18next"; +import { Row } from "../ui"; +import { + AxisInputBoxGroupProps, + AxisInputBoxGroupState, + Vector +} from "./interfaces"; + +export class AxisInputBoxGroup extends React.Component> { + constructor() { + super(); + this.state = {}; + } + + change = (axis: keyof Vector, val: number) => { + this.setState({ [axis]: val }); + } + + get vector() { + let { x, y, z } = this.state; + let [x2, y2, z2] = this.props.bot.hardware.location; + + return { + x: _.isNumber(x) ? x : x2, + y: _.isNumber(y) ? y : y2, + z: _.isNumber(z) ? z : z2 + }; + } + + clicked = () => { + this.props.onCommit(this.vector); + this.setState({ x: undefined, y: undefined, z: undefined }); + } + + render() { + let [x, y, z] = this.props.bot.hardware.location; + return + + + +
+ +
+
; + } +} diff --git a/frontend/src/controls/controls.tsx b/frontend/src/controls/controls.tsx new file mode 100644 index 000000000..fe621349f --- /dev/null +++ b/frontend/src/controls/controls.tsx @@ -0,0 +1,118 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { t } from "i18next"; +import { changeStepSize, moveAbs } from "../devices/actions"; +import { Peripherals } from "./peripherals"; +import { EStopButton } from "../devices/components/e_stop_btn"; +import { JogButtons } from "./jog_buttons"; +import { AxisInputBoxGroup } from "./axis_input_box_group"; +import { Row, Page, Col, Widget, WidgetBody, WidgetHeader } from "../ui"; +import { mapStateToProps } from "./state_to_props"; +import { StepSizeSelector } from "./step_size_selector"; +import { MustBeOnline } from "../devices/must_be_online"; +import { ToolTips } from "../constants"; +import { WebcamPanel } from "./webcam_panel"; +import { Props } from "./interfaces"; +import { Xyz } from "../devices/interfaces"; +import { Popover, Position } from "@blueprintjs/core"; + +@connect(mapStateToProps) +export class Controls extends React.Component { + + toggle = (name: Xyz) => () => + this.props.dispatch({ type: "INVERT_JOG_BUTTON", payload: name }); + + render() { + let { sync_status } = this.props.bot.hardware.informational_settings; + let { x_axis_inverted, y_axis_inverted, z_axis_inverted } = this.props.bot; + let xBtnColor = x_axis_inverted ? "green" : "red"; + let yBtnColor = y_axis_inverted ? "green" : "red"; + let zBtnColor = z_axis_inverted ? "green" : "red"; + + return + + + + + + +
+ +
+ +
+
+ +
+
+ +
+
+
+ +
+ + + + this.props.dispatch(changeStepSize(num))} + selected={this.props.bot.stepSize} + /> + + moveAbs(input)} + /> + + +
+ + + + + +
+
; + } +}; diff --git a/frontend/src/controls/direction_button.tsx b/frontend/src/controls/direction_button.tsx new file mode 100644 index 000000000..60a777219 --- /dev/null +++ b/frontend/src/controls/direction_button.tsx @@ -0,0 +1,28 @@ +import * as React from "react"; +import { Farmbot } from "farmbot"; +import { moveRelative } from "../devices/actions"; +import { DirectionButtonProps, Payl } from "./interfaces"; + +export class DirectionButton extends React.Component { + sendCommand = () => { + let { direction, isInverted } = this.props; + let isNegative = (direction === "up") || (direction === "right"); + let inverter = isInverted ? -1 : 1; + let multiplier = isNegative ? -1 : 1; + let distance = (this.props.steps || 250) * multiplier * inverter; + let payload: Payl = { speed: Farmbot.defaults.speed, x: 0, y: 0, z: 0 }; + payload[this.props.axis] = distance; + moveRelative(payload); + } + + render() { + let { direction, axis } = this.props; + let klass = `fb-button fa fa-2x arrow-button radius fa-arrow-${direction}`; + let title = `move ${axis} axis`; + return +
+
+ + {t("Menu")} + + +
+
+
+ + +
+
+ + + + +
+
+ +
+
+
+
+
+
+
+
+
+} diff --git a/frontend/src/farm_designer/map/garden_plant.tsx b/frontend/src/farm_designer/map/garden_plant.tsx new file mode 100644 index 000000000..aea07f667 --- /dev/null +++ b/frontend/src/farm_designer/map/garden_plant.tsx @@ -0,0 +1,47 @@ +import * as React from "react"; +import { GardenPlantProps, GardenPlantState } from "../interfaces"; +import { cachedIcon, DEFAULT_ICON } from "../../open_farm/index"; +import { Circle } from "./circle"; +import { round, getXYFromQuadrant } from "./util"; + +export class GardenPlant extends + React.Component> { + + state: GardenPlantState = { icon: DEFAULT_ICON } + + componentDidMount() { + let OFS = this.props.plant.body.openfarm_slug; + cachedIcon(OFS).then((icon: string) => this.setState({ icon })); + } + + render() { + let { selected, plant, onClick, dispatch, quadrant } = this.props; + let { radius, x, y } = plant.body; + let { icon } = this.state; + + let action = { type: "TOGGLE_HOVERED_PLANT", payload: { plant, icon } }; + let { qx, qy } = getXYFromQuadrant(round(x), round(y), quadrant); + + return + + + onClick(this.props.plant)} + onMouseEnter={() => dispatch(action)} + onMouseLeave={() => dispatch(action)} + height={radius * 2} + width={radius * 2} + x={qx - radius} + y={qy - radius} + /> + + } +} diff --git a/frontend/src/farm_designer/map/garden_point.tsx b/frontend/src/farm_designer/map/garden_point.tsx new file mode 100644 index 000000000..af297a48e --- /dev/null +++ b/frontend/src/farm_designer/map/garden_point.tsx @@ -0,0 +1,23 @@ +import * as React from "react"; +import { GardenPointProps } from "../interfaces"; +import { defensiveClone } from "../../util"; +import { getXYFromQuadrant } from "./util"; + +const POINT_STYLES = { + stroke: "green", + strokeOpacity: 0.3, + strokeWidth: "2", + fill: "none", +}; + +export function GardenPoint(props: GardenPointProps) { + let { point, quadrant } = props; + let { x, y } = point.body; + let styles = defensiveClone(POINT_STYLES); + styles.stroke = point.body.meta.color || "green"; + let { qx, qy } = getXYFromQuadrant(x, y, quadrant); + return + + + ; +} diff --git a/frontend/src/farm_designer/map/interfaces.ts b/frontend/src/farm_designer/map/interfaces.ts new file mode 100644 index 000000000..31d73fde5 --- /dev/null +++ b/frontend/src/farm_designer/map/interfaces.ts @@ -0,0 +1,33 @@ +import { + TaggedPlantPointer, + TaggedCrop +} from "../../resources/tagged_resources"; +import { State, BotOriginQuadrant } from "../interfaces"; + +export interface PlantLayerProps { + plants: TaggedPlantPointer[]; + currentPlant: TaggedPlantPointer | undefined; + dragging: boolean; + editing: boolean; + visible: boolean; + crops: TaggedCrop[]; + dispatch: Function; + botOriginQuadrant: BotOriginQuadrant; +} + +export interface CropSpreadDict { + [key: string]: number | undefined; +} + +export interface GardenMapLegendProps { + zoom: (value: number) => () => void; + toggle: (property: keyof State) => () => void; + updateBotOriginQuadrant: (quadrant: number) => () => void; + botOriginQuadrant: number; + zoomLvl: number; + legendMenuOpen: boolean; + showPlants: boolean; + showPoints: boolean; + showSpread: boolean; + showFarmbot: boolean; +} diff --git a/frontend/src/farm_designer/map/layer_toggle.tsx b/frontend/src/farm_designer/map/layer_toggle.tsx new file mode 100644 index 000000000..ab7e4789c --- /dev/null +++ b/frontend/src/farm_designer/map/layer_toggle.tsx @@ -0,0 +1,18 @@ +import * as React from "react"; + +interface LayerTogleProps { + label: string; + value: boolean | undefined; + onClick(): void; +} + +/** A flipper type switch for showing/hiding the layers of the garden map. */ +export function LayerToggle({ label, value, onClick }: LayerTogleProps) { + let klassName = "fb-button fb-toggle-button " + (value ? "green" : "red"); + return
+
; +} diff --git a/frontend/src/farm_designer/map/layers/farmbot_layer.tsx b/frontend/src/farm_designer/map/layers/farmbot_layer.tsx new file mode 100644 index 000000000..6944c03ed --- /dev/null +++ b/frontend/src/farm_designer/map/layers/farmbot_layer.tsx @@ -0,0 +1,20 @@ +import * as React from "react"; +import { VirtualFarmBot } from "../farmbot_position_point"; +import { BotOriginQuadrant } from "../../interfaces"; +import { BotState } from "../../../devices/interfaces"; + +interface FarmBotLayerProps { + visible: boolean; + botOriginQuadrant: BotOriginQuadrant; + bot: BotState; +} + +export function FarmBotLayer(props: FarmBotLayerProps) { + let { visible, botOriginQuadrant } = props; + return visible ? + + : ; // fallback +} diff --git a/frontend/src/farm_designer/map/layers/hovered_plant_layer.tsx b/frontend/src/farm_designer/map/layers/hovered_plant_layer.tsx new file mode 100644 index 000000000..5c47d6acf --- /dev/null +++ b/frontend/src/farm_designer/map/layers/hovered_plant_layer.tsx @@ -0,0 +1,77 @@ +import * as React from "react"; +import { TaggedPlantPointer } from "../../../resources/tagged_resources"; +import { DesignerState, BotOriginQuadrant } from "../../interfaces"; +import { getXYFromQuadrant, round } from "../util"; +import { push } from "../../../history"; + +/** + * PROBLEM: The plants are rendered via svg in a certain order. When a user + * hovers over part of a plant they'd like to select that was rendered *prior* + * to a different plant, it will cause an overlap and a less-than-desirable ux. + * + * SOLUTION: Use props to tell this component what plant is currently being + * hovered over and make a "copy" to display on top of the rest of the layers. + * + * NOTE: This layer MUST be rendered LAST in its parent component to properly + * achieve this effect. + */ + +interface HoveredPlantLayerProps { + currentPlant: TaggedPlantPointer | undefined; + designer: DesignerState; + botOriginQuadrant: BotOriginQuadrant; + hoveredPlant: TaggedPlantPointer | undefined; + dispatch: Function; + isEditing: boolean; +} + +interface HoveredPlantLayerState { isHovered: boolean; } + +export class HoveredPlantLayer extends + React.Component> { + + state: HoveredPlantLayerState = { isHovered: false } + + onClick = () => { + let plant = this.props.hoveredPlant; + if (plant) { + push("/app/designer/plants/" + (plant.body.id)); + let action = { type: "SELECT_PLANT", payload: plant.uuid }; + this.props.dispatch(action); + } + } + + toggle = (bool: keyof HoveredPlantLayerState) => () => + this.setState({ isHovered: !this.state.isHovered }) + + /** Safe fallbacks if no hovered plant is found. */ + get plantInfo() { + if (this.props.hoveredPlant) { + let { x, y, radius } = this.props.hoveredPlant.body; + return { x, y, radius }; + } else { + return { x: 0, y: 0, radius: 1 }; + } + } + render() { + let { icon } = this.props.designer.hoveredPlant; + let { botOriginQuadrant } = this.props; + let { x, y } = this.plantInfo; + let { qx, qy } = getXYFromQuadrant(round(x), round(y), botOriginQuadrant); + let scaleFactor = (this.state.isHovered) ? "1.3, 1.3" : "1, 1"; + + return + } +} diff --git a/frontend/src/farm_designer/map/layers/plant_layer.tsx b/frontend/src/farm_designer/map/layers/plant_layer.tsx new file mode 100644 index 000000000..b110ff581 --- /dev/null +++ b/frontend/src/farm_designer/map/layers/plant_layer.tsx @@ -0,0 +1,64 @@ +import * as React from "react"; +import { Link } from "react-router"; +import * as _ from "lodash"; +import { GardenPlant } from "../garden_plant"; +import { PlantLayerProps, CropSpreadDict } from "../interfaces"; +import { defensiveClone } from "../../../util"; + +let cropSpreadDict: CropSpreadDict = {}; + +export function PlantLayer(p: PlantLayerProps) { + let { + crops, + plants, + dispatch, + visible, + currentPlant, + dragging, + editing, + botOriginQuadrant + } = p; + + crops + .filter(c => !!c.body.spread) + .map(c => cropSpreadDict[c.body.slug] = c.body.spread); + + if (visible) { + return + {plants + .filter(x => !!x.body.id) + .map(p => defensiveClone(p)) + .map(p => { + p.body.spread = cropSpreadDict[p.body.openfarm_slug] || p.body.radius; + return p; + }) + .map(p => { + return { + selected: !!(currentPlant && (p.uuid === currentPlant.uuid)), + plantId: (p.body.id || "IMPOSSIBLE_ERR_NO_PLANT_ID").toString(), + uuid: p.uuid, + plant: p + } + }) + .map(props => { + let action = { type: "SELECT_PLANT", payload: props.uuid }; + return + dispatch(action)} + dispatch={p.dispatch} + /> + ; + })} + + } else { + return ; + } +} diff --git a/frontend/src/farm_designer/map/layers/point_layer.tsx b/frontend/src/farm_designer/map/layers/point_layer.tsx new file mode 100644 index 000000000..6006cabd2 --- /dev/null +++ b/frontend/src/farm_designer/map/layers/point_layer.tsx @@ -0,0 +1,23 @@ +import * as React from "react"; +import { TaggedGenericPointer } from "../../../resources/tagged_resources"; +import { GardenPoint } from "../garden_point"; +import { BotOriginQuadrant } from "../../interfaces"; + +interface PointLayerProps { + visible: boolean; + points: TaggedGenericPointer[]; + botOriginQuadrant: BotOriginQuadrant; +} + +export function PointLayer(props: PointLayerProps) { + let { visible, points, botOriginQuadrant } = props; + return visible ? + {points.map(p => + + )}} + : ; // fallback +} diff --git a/frontend/src/farm_designer/map/layers/spread_layer.tsx b/frontend/src/farm_designer/map/layers/spread_layer.tsx new file mode 100644 index 000000000..77613ed69 --- /dev/null +++ b/frontend/src/farm_designer/map/layers/spread_layer.tsx @@ -0,0 +1,53 @@ +import * as React from "react"; +import { TaggedPlantPointer } from "../../../resources/tagged_resources"; +import { BotOriginQuadrant } from "../../interfaces"; +import { + round, + scale, + getXYFromQuadrant +} from "../util"; + +interface SpreadLayerProps { + visible: boolean; + plants: TaggedPlantPointer[]; + currentPlant: TaggedPlantPointer | undefined; + botOriginQuadrant: BotOriginQuadrant; +} + +export function SpreadLayer(props: SpreadLayerProps) { + let { plants, visible, currentPlant, botOriginQuadrant } = props; + + return + { + plants.map((p, index) => { + let isSelected = p === currentPlant; + return (visible || isSelected) ? + : ; + }) + } + +} + +interface SpreadCircleProps { + plant: TaggedPlantPointer; + quadrant: BotOriginQuadrant; +} + +export function SpreadCircle(props: SpreadCircleProps) { + let { radius, x, y, spread } = props.plant.body; + let { quadrant } = props; + let { qx, qy } = getXYFromQuadrant(round(x), round(y), quadrant); + return ; +} diff --git a/frontend/src/farm_designer/map/layers/tool_slot_layer.tsx b/frontend/src/farm_designer/map/layers/tool_slot_layer.tsx new file mode 100644 index 000000000..7da8e0378 --- /dev/null +++ b/frontend/src/farm_designer/map/layers/tool_slot_layer.tsx @@ -0,0 +1,23 @@ +import * as React from "react"; +import { SlotWithTool } from "../../../resources/interfaces"; +import { ToolSlotPoint } from "../tool_slot_point"; +import { BotOriginQuadrant } from "../../interfaces"; + +interface ToolSlotLayerProps { + visible: boolean; + slots: SlotWithTool[]; + botOriginQuadrant: BotOriginQuadrant; +} + +export function ToolSlotLayer(props: ToolSlotLayerProps) { + let { slots, visible, botOriginQuadrant } = props; + return visible ? + {slots.map(slot => + + )} + : ; // fallback +} diff --git a/frontend/src/farm_designer/map/tool_slot_point.tsx b/frontend/src/farm_designer/map/tool_slot_point.tsx new file mode 100644 index 000000000..32ef9ed41 --- /dev/null +++ b/frontend/src/farm_designer/map/tool_slot_point.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { SlotWithTool } from "../../resources/interfaces"; +import { getXYFromQuadrant } from "./util"; +import { BotOriginQuadrant } from "../interfaces"; + +interface TSPProps { + slot: SlotWithTool; + quadrant: BotOriginQuadrant; +} + +interface TSPState { + hovered: boolean; +} + +export class ToolSlotPoint extends + React.Component> { + + state: TSPState = { + hovered: false + }; + + get slot() { return this.props.slot; } + + render() { + let { x, y } = this.slot.toolSlot.body; + let { quadrant } = this.props; + let { qx, qy } = getXYFromQuadrant(x, y, quadrant); + return + this.setState({ hovered: true })} + onMouseLeave={() => this.setState({ hovered: false })} + cx={qx} + cy={qy} + r={35} + fillOpacity={0.5} + fill={this.state.hovered ? "#434343" : "#666666"} /> + + + } +} diff --git a/frontend/src/farm_designer/map/util.ts b/frontend/src/farm_designer/map/util.ts new file mode 100644 index 000000000..85f716441 --- /dev/null +++ b/frontend/src/farm_designer/map/util.ts @@ -0,0 +1,112 @@ +import { BotOriginQuadrant, isBotOriginQuadrant } from "../interfaces"; + +const SNAP = 10; +const SCALE_FACTOR = 9.8; +const FARMBOT_DEFAULT_LENGTH = 3002; +const FARMBOT_DEFAULT_WIDTH = 1502; +const LEFT_MENU_WIDTH = 320; +const TOP_NAV_HEIGHT = 110; + +export function scale(radius = 0) { + return (radius * SCALE_FACTOR / 2); +} + +/** + * Used for snapping. + * Rounds units to nearest 10 (or whatever SNAP is set to). + */ +export function round(num: number) { + return (Math.round(num / SNAP) * SNAP); +} + +export interface ScreenToGardenParams { + quadrant: BotOriginQuadrant; + pageX: number; + pageY: number; + zoomLvl: number; +} + +interface GetMouseXYPayl { + mx: number; + my: number; +} + +/** + * NOTE: This is the mouse position *CONSIDERING* the offset of the surrounding + * elements that are also on the farm designer page. + */ +export function getMouseXY(e: MouseEvent): GetMouseXYPayl { + + let { clientX, clientY } = e; + let { scrollLeft, scrollTop, clientLeft, clientTop } = document.body; + + let mx = (clientX + scrollLeft - clientLeft) - LEFT_MENU_WIDTH; + let my = (clientY + scrollTop - clientTop) - TOP_NAV_HEIGHT; + + return { mx, my } + +} + +export function translateScreenToGarden(params: ScreenToGardenParams) { + let { pageX, pageY, zoomLvl, quadrant } = params; + + let rawX = round((pageX - 320) / zoomLvl); + let rawY = round((pageY - 110) / zoomLvl); + + let x = calculateXBasedOnQuadrant({ value: rawX, quadrant }); + let y = calculateYBasedOnQuadrant({ value: rawY, quadrant }); + + return { x, y }; +} + +interface CalculateQuadrantParams { + value: number; + quadrant: BotOriginQuadrant; +} + +function calculateXBasedOnQuadrant(params: CalculateQuadrantParams) { + let { value, quadrant } = params; + if (isBotOriginQuadrant(quadrant)) { + switch (quadrant) { + case 1: + case 4: + return FARMBOT_DEFAULT_LENGTH - value; + case 2: + case 3: + return value; + default: + throw new Error("Something went wrong calculating the X origin."); + } + } else { + throw new Error("Invalid bot origin quadrant."); + } +} + +function calculateYBasedOnQuadrant(params: CalculateQuadrantParams) { + let { value, quadrant } = params; + if (isBotOriginQuadrant(quadrant)) { + switch (quadrant) { + case 3: + case 4: + return FARMBOT_DEFAULT_WIDTH - value; + case 1: + case 2: + return value; + default: + throw new Error("Something went wrong calculating the Y origin."); + } + } else { + throw new Error("Invalid bot origin quadrant."); + } +} + +export function getXYFromQuadrant( + x: number, + y: number, + q: BotOriginQuadrant +): { qx: number, qy: number } { + return { + qx: calculateXBasedOnQuadrant({ value: x, quadrant: q }), + qy: calculateYBasedOnQuadrant({ value: y, quadrant: q }) + } +} diff --git a/frontend/src/farm_designer/openfarm.ts b/frontend/src/farm_designer/openfarm.ts new file mode 100644 index 000000000..580dc50a6 --- /dev/null +++ b/frontend/src/farm_designer/openfarm.ts @@ -0,0 +1,78 @@ +export namespace OpenFarm { + + /** An OpenFarm.cc crop entry. NOT a farmbot.cc Crop. */ + export interface OFCrop { + name: string; + slug: string; + binomial_name: string; + common_names: string[]; + description: string; + sun_requirements: string; + sowing_method: string; + svg_icon?: string | undefined; + // Unsure of this. Def not an object tho. + spread?: number | undefined; + row_spacing?: number; + height?: number; + processing_pictures: number; + } + + export interface Self { + api: string; + website: string; + } + + export interface Links { + self: Self; + } + + export interface Links2 { + related: string; + } + + export interface Datum2 { + type: string; + id: string; + } + + export interface Pictures { + links: Links2; + data: Datum2[]; + } + + export interface Relationships { + pictures: Pictures; + } + + export interface Datum { + id: string; + type: string; + attributes: OFCrop; + links: Links; + relationships: Relationships; + } + + export interface ImageAttrs { + id: string; + image_url: string; + small_url: string; + thumbnail_url: string; + medium_url: string; + large_url: string; + canopy_url: string; + } + + export interface Included { + id: string; + type: string; + attributes: ImageAttrs; + } + + export let cropUrl = "https://openfarm.cc/api/v1/crops"; +} +/** Returned by https://openfarm.cc/api/v1/crops?filter=q */ +export interface CropSearchResult { + data: OpenFarm.Datum[]; + included: OpenFarm.Included[]; +} + diff --git a/frontend/src/farm_designer/plant.ts b/frontend/src/farm_designer/plant.ts new file mode 100644 index 000000000..a20a216f6 --- /dev/null +++ b/frontend/src/farm_designer/plant.ts @@ -0,0 +1,21 @@ +import { PlantOptions } from "./interfaces"; +import { PlantPointer } from "../interfaces"; + +export const DEFAULT_PLANT_RADIUS = 25; + +/** Factory function for Plant types. */ +export function Plant(options: PlantOptions): PlantPointer { + let openfarm_slug = options.openfarm_slug || "not-set"; + return { + id: options.id, + pointer_type: "Plant", + created_at: (options.created_at || ""), + name: (options.name || "Untitled Plant"), + meta: {}, + x: (options.x || 0), + y: (options.y || 0), + z: 0, + radius: (options.radius || DEFAULT_PLANT_RADIUS), + openfarm_slug + }; +} diff --git a/frontend/src/farm_designer/plants/__tests__/plant_panel_test.tsx b/frontend/src/farm_designer/plants/__tests__/plant_panel_test.tsx new file mode 100644 index 000000000..9ad9b5a40 --- /dev/null +++ b/frontend/src/farm_designer/plants/__tests__/plant_panel_test.tsx @@ -0,0 +1,27 @@ +import * as React from "react"; +import { PlantPanel } from "../plant_panel"; +import { shallow } from "enzyme"; + +describe("", () => { + it("renders", () => { + let info = { + x: 12, + y: 34, + id: undefined, + name: "tomato", + uuid: "444-555-666-777-888", + daysOld: 1, + plantedAt: "2017-06-19T08:02:22.466-05:00", + slug: "tomato" + }; + + let onDestroy = jest.fn(); + + let el = shallow(); + let txt = el.text().toLowerCase(); + expect(txt).toContain("1 days old"); + expect(txt).toContain("(12, 34)"); + el.find("button").simulate("click"); + expect(onDestroy.mock.calls.length).toEqual(1); + }) +}) diff --git a/frontend/src/farm_designer/plants/crop_catalog.tsx b/frontend/src/farm_designer/plants/crop_catalog.tsx new file mode 100644 index 000000000..d6ad7c680 --- /dev/null +++ b/frontend/src/farm_designer/plants/crop_catalog.tsx @@ -0,0 +1,59 @@ +import * as React from "react"; +import { BackArrow } from "../../ui"; +import { Everything } from "../../interfaces"; +import { connect } from "react-redux"; +import { t } from "i18next"; +import { OpenFarmResults } from "./openfarm_search_results"; +import { CropCatalogProps } from "../interfaces"; +import { OFSearch } from "../util"; + +export function mapStateToProps(props: Everything): CropCatalogProps { + return { + OFSearch, + cropSearchQuery: props.resources.consumers.farm_designer.cropSearchQuery, + dispatch: Function, + cropSearchResults: props + .resources + .consumers + .farm_designer + .cropSearchResults || [] + }; +} + +@connect(mapStateToProps) +export class CropCatalog extends React.Component { + handleChange = (e: React.SyntheticEvent) => { + let { value } = e.currentTarget; + this.props.OFSearch(value)(this.props.dispatch) + } + + render() { + return
+
+

+ {t("Choose a crop")} +

+
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+
+
; + } +} diff --git a/frontend/src/farm_designer/plants/crop_info.tsx b/frontend/src/farm_designer/plants/crop_info.tsx new file mode 100644 index 000000000..7a5f6b67a --- /dev/null +++ b/frontend/src/farm_designer/plants/crop_info.tsx @@ -0,0 +1,168 @@ +import * as React from "react"; +import { BackArrow } from "../../ui"; +import { t } from "i18next"; +import * as _ from "lodash"; +import { DATA_URI, DEFAULT_ICON } from "../../open_farm/index"; +import { CropInfoProps, DraggableEvent } from "../interfaces"; +import { history } from "../../history"; +import { connect } from "react-redux"; +import { findBySlug } from "../search_selectors"; +import { Everything } from "../../interfaces"; +import { OpenFarm } from "../openfarm"; +import { OFSearch } from "../util"; + +export function mapStateToProps(props: Everything): CropInfoProps { + return { + OFSearch, + dispatch: Function, + cropSearchResults: props + .resources + .consumers + .farm_designer + .cropSearchResults || [] + }; +} + +@connect(mapStateToProps) +export class CropInfo extends React.Component { + + componentDidMount() { + let crop = history.getCurrentLocation().pathname.split("/")[5]; + OFSearch(crop)(this.props.dispatch); + } + + handleDragStart = (e: DraggableEvent) => { + let icon = e.currentTarget.getAttribute("data-icon-url"); + let img = document.createElement("img"); + icon ? img.src = DATA_URI + icon : DEFAULT_ICON; + + // TODO: Setting these doesn't work by default, needs a fix + // https://www.w3.org/TR/2011/WD-html5-20110405/dnd.html#dom-datatransfer-setdragimage + img.height = 50; + img.width = 50; + + e.dataTransfer.setDragImage && e.dataTransfer.setDragImage(img, 50, 50); + } + + render() { + let crop = history.getCurrentLocation().pathname.split("/")[5]; + let result = + findBySlug(this.props.cropSearchResults, crop || "PLANT_NOT_FOUND"); + + let basePath = "/app/designer/plants/crop_search/"; + + let backgroundURL = `linear-gradient( + rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url(${result.image})`; + + return
+ +
+
+ +
+ {t("Drag and drop into map")} +
+
+ + {t("Edit on")}  + + + OpenFarm + +
+ +
    + { + _(result.crop) + .omit([ + "slug", + "processing_pictures", + "description", + "main_image_path", + "tags_array" + ]) + .pairs() + .map((pair: string, i: number) => { + let key = pair[0]; + let value = pair[1]; + switch (key) { + case "svg_icon": + /** + * If there's a value, give it an img element to render the + * actual graphic. If no value, return "Not Set". + */ + return
  • + {t("SVG Icon")}: + {value ? +
    + +
    + : + + {t("Not Set")} + + } +
  • + /** + * Need to convert the `cm` provided by OpenFarm to `mm` + * to match the Farm Designer units. + */ + case "spread": + case "row_spacing": + case "height": + case "guides_count": + return
  • + + {_.startCase(key)}:  + + + {(parseInt(value) * 10) + t("mm") || t("Not Set")} + +
  • + /** + * Default behavior for all other properties. + */ + default: + return
  • + + {_.startCase(key)}:  + + + {value || t("Not Set")} + +
  • + } + }).value() + } +
+
+
+
; + } +} diff --git a/frontend/src/farm_designer/plants/dnd_crop_mobile.tsx b/frontend/src/farm_designer/plants/dnd_crop_mobile.tsx new file mode 100644 index 000000000..9ef797464 --- /dev/null +++ b/frontend/src/farm_designer/plants/dnd_crop_mobile.tsx @@ -0,0 +1,100 @@ +import * as React from "react"; +import * as _ from "lodash"; +import { BackArrow } from "../../ui"; +import { Everything } from "../../interfaces"; +import { connect } from "react-redux"; +import { t } from "i18next"; +import { isMobile } from "../../util"; +import { history } from "../../history"; +import { DEFAULT_ICON } from "../../open_farm/index"; +import { + CropInfoProps, + DNDCropMobileState, + DraggableEvent +} from "../interfaces"; +import { findBySlug } from "../search_selectors"; + +@connect((state: Everything) => state) +/** DND => "drag and drop" */ +export class DNDCropMobile + extends React.Component { + constructor() { + super(); + this.state = { isDragging: false }; + } + + handleDragStart(e: DraggableEvent) { + // TODO: Take suggestions from the community about user preference + let img = document.createElement("img"); + // Stub until we figure out dynamic drag images + img.src = DEFAULT_ICON; + + // Because of Android and MS Edge. + _.get(e, "dataTransfer.setDragImage", _.noop)(img, 50, 50); + } + + toggleDesignerView() { + this.setState({ isDragging: !this.state.isDragging }); + } + + render() { + let crop = history.getCurrentLocation().pathname.split("/")[5]; + + let result = + findBySlug(this.props.cropSearchResults, + crop || "PLANT_NOT_FOUND"); + + /** rgba arguments are a more mobile-friendly way apply filters */ + let backgroundURL = isMobile() ? `linear-gradient( + rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)), url(${result.image})` : ""; + + return
+
+

+ {result.crop.name} + { }}> + {t("Save and finish")} + +

+
+ {t("plant + {t("Drag and drop")} {t(`the icon onto the map. You can add + multiple plants and make adjustments as many times as you need to + before you save and finish.`)} +
+
+
+
+ +
    + { + _(result.crop) + .omit(["slug", "processing_pictures", "description"]) + .pairs() + .map((pair: string, i: number) => { + let key = pair[0]; + let value = pair[1]; + return
  • + + {_.startCase(key) + ": "} + + {value || "Not set"} +
  • ; + }).value() + } +
+
+
+
; + } +} diff --git a/frontend/src/farm_designer/plants/edit_plant_info.tsx b/frontend/src/farm_designer/plants/edit_plant_info.tsx new file mode 100644 index 000000000..961ec86a4 --- /dev/null +++ b/frontend/src/farm_designer/plants/edit_plant_info.tsx @@ -0,0 +1,32 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { t } from "i18next"; +import { BackArrow } from "../../ui"; +import { TaggedPlantPointer } from "../../resources/tagged_resources"; +import { mapStateToProps, formatPlantInfo } from "./map_state_to_props" +import { PlantInfoBase } from "./plant_info_base"; +import { PlantPanel } from "./plant_panel"; + + +@connect(mapStateToProps) +export class EditPlantInfo extends PlantInfoBase { + default = (plant_info: TaggedPlantPointer) => { + let info = formatPlantInfo(plant_info); + return
+
+

+ + + {t("Edit")} {info.name} + +

+
+ +
; + } + + render() { + let plant_info = this.plant; + return plant_info ? this.default(plant_info) : this.fallback(); + } +} diff --git a/frontend/src/farm_designer/plants/map_state_to_props.tsx b/frontend/src/farm_designer/plants/map_state_to_props.tsx new file mode 100644 index 000000000..63e7cd88c --- /dev/null +++ b/frontend/src/farm_designer/plants/map_state_to_props.tsx @@ -0,0 +1,54 @@ +import * as moment from "moment"; +import { Everything } from "../../interfaces"; +import { EditPlantInfoProps } from "../interfaces"; +import { maybeFindPlantById } from "../../resources/selectors"; +import { history } from "../../history"; +import { TaggedPlantPointer } from "../../resources/tagged_resources"; + +export function mapStateToProps(props: Everything): EditPlantInfoProps { + let findPlant = (id: string | undefined) => { + let num = parseInt(id || "NOPE", 10); + if (_.isNumber(num) && !_.isNaN(num)) { + return maybeFindPlantById(props.resources.index, num); + } + }; + + return { + findPlant, + push: history.push, + dispatch: props.dispatch, + }; +} + +/** + * All of the info a user would need to know about a plant, formatted and ready + * to use by the UI. + */ +export interface FormattedPlantInfo { + x: number; + y: number; + id: number | undefined; + name: string; + uuid: string; + daysOld: number; + plantedAt: string; + slug: string; +} + +export function formatPlantInfo(rsrc: TaggedPlantPointer): FormattedPlantInfo { + let p = rsrc.body; + let t = p.created_at ? moment(p.created_at) : moment(); + let currentDay = moment(); + let plantedAt = p.created_at || moment(); + let daysOld = currentDay.diff(moment(plantedAt), "days") + 1; + return { + slug: p.openfarm_slug, + id: p.id, + name: p.name, + daysOld, + x: p.x, + y: p.y, + uuid: rsrc.uuid, + plantedAt: moment(t).format("MMMM Do YYYY, h:mma") + }; +} diff --git a/frontend/src/farm_designer/plants/openfarm_search_results.tsx b/frontend/src/farm_designer/plants/openfarm_search_results.tsx new file mode 100644 index 000000000..297c43354 --- /dev/null +++ b/frontend/src/farm_designer/plants/openfarm_search_results.tsx @@ -0,0 +1,28 @@ +import * as React from "react"; +import { Link } from "react-router"; +import { OFSearchProps } from "../interfaces"; + +export class OpenFarmResults extends React.Component { + render() { + return
+ {this.props.cropSearchResults.map(resp => { + let { crop, image } = resp; + return +
+ +
+
+ ; + })} +
; + } +} diff --git a/frontend/src/farm_designer/plants/plant_info.tsx b/frontend/src/farm_designer/plants/plant_info.tsx new file mode 100644 index 000000000..5091dccc2 --- /dev/null +++ b/frontend/src/farm_designer/plants/plant_info.tsx @@ -0,0 +1,44 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { t } from "i18next"; +import { Link } from "react-router"; +import { TaggedPlantPointer } from "../../resources/tagged_resources"; +import { mapStateToProps, formatPlantInfo } from "./map_state_to_props"; +import { PlantInfoBase } from "./plant_info_base"; +import { PlantPanel } from "./plant_panel"; + +@connect(mapStateToProps) +export class PlantInfo extends PlantInfoBase { + + default = (plant_info: TaggedPlantPointer) => { + let action = { type: "SELECT_PLANT", payload: undefined }; + let info = formatPlantInfo(plant_info); + let { name, id } = info; + return
+
+

+ + this.props.dispatch(action)} + /> + + + {name} + + + {t("Edit")} + +

+
+ +
; + } + + render() { + let plant_info = this.plant && this.plant + return plant_info ? this.default(plant_info) : this.fallback(); + } +} diff --git a/frontend/src/farm_designer/plants/plant_info_base.tsx b/frontend/src/farm_designer/plants/plant_info_base.tsx new file mode 100644 index 000000000..38ba92782 --- /dev/null +++ b/frontend/src/farm_designer/plants/plant_info_base.tsx @@ -0,0 +1,27 @@ +import * as React from "react"; +import { EditPlantInfoProps } from "../interfaces"; +import { history } from "../../history"; +import { destroy } from "../../api/crud"; +import { error } from "farmbot-toastr"; + +export abstract class PlantInfoBase extends + React.Component { + + get stringyID() { + // TODO: ("We should put this into a query object incase the URL changes") + return history.getCurrentLocation().pathname.split("/")[4] || ""; + } + + get plant() { return this.props.findPlant(this.stringyID); } + + destroy = (plantUUID: string) => { + this.props.dispatch(destroy(plantUUID)) + .then(() => history.push("/app/designer/plants")) + .catch(() => error("Could not delete plant.", "Error")); + } + + fallback = () => { + return Redirecting...; + } + +} diff --git a/frontend/src/farm_designer/plants/plant_inventory.tsx b/frontend/src/farm_designer/plants/plant_inventory.tsx new file mode 100644 index 000000000..13c24a37c --- /dev/null +++ b/frontend/src/farm_designer/plants/plant_inventory.tsx @@ -0,0 +1,81 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { Link } from "react-router"; +import { t } from "i18next"; +import { selectAllPlantPointers } from "../../resources/selectors"; +import { PlantInventoryItem } from "./plant_inventory_item"; +import { TaggedPlantPointer } from "../../resources/tagged_resources"; +import { Everything } from "../../interfaces"; + +interface Props { + plants: TaggedPlantPointer[]; + dispatch: Function; +} + +interface State { + searchTerm: string; +} + +function mapStateToProps(props: Everything): Props { + let plants = selectAllPlantPointers(props.resources.index); + return { + plants, + dispatch: props.dispatch + }; +} + +@connect(mapStateToProps) +export class Plants extends React.Component { + + state: State = { searchTerm: "" }; + + update = ({ currentTarget }: React.SyntheticEvent) => { + this.setState({ searchTerm: currentTarget.value }); + } + + render() { + return
+
+
+ + {t("Designer")} + + + {t("Plants")} + + + {t("Farm Events")} + +
+
+ +
+ +
+
+ + +
+ { + this.props.plants + .filter(p => p.body.name.toLowerCase() + .includes(this.state.searchTerm.toLowerCase())) + .map(p => ) + } +
+ +
+ + +
+ +
+ + +
; + } +}; diff --git a/frontend/src/farm_designer/plants/plant_inventory_item.tsx b/frontend/src/farm_designer/plants/plant_inventory_item.tsx new file mode 100644 index 000000000..9ba13821c --- /dev/null +++ b/frontend/src/farm_designer/plants/plant_inventory_item.tsx @@ -0,0 +1,77 @@ +import * as React from "react"; +import { t } from "i18next"; +import * as moment from "moment"; +import { DEFAULT_ICON, cachedIcon } from "../../open_farm/index"; +import { push } from "../../history"; +import { TaggedPlantPointer } from "../../resources/tagged_resources"; + +type IMGEvent = React.SyntheticEvent + +interface PlantInventoryItemProps { + tpp: TaggedPlantPointer; + dispatch: Function; +} + +interface PlantInventoryItemState { + icon: string; +} + +// The inidividual plants that show up in the farm designer sub nav. +export class PlantInventoryItem extends + React.Component { + + state: PlantInventoryItemState = { icon: "" } + + render() { + let plant = this.props.tpp.body; + let { tpp, dispatch } = this.props; + let plantId = (plant.id || "ERR_NO_PLANT_ID").toString(); + + let toggle = () => { + let { icon } = this.state; + dispatch({ type: "TOGGLE_HOVERED_PLANT", payload: { plant: tpp, icon } }); + }; + + let click = () => { + push("/app/designer/plants/" + plantId); + dispatch({ type: "SELECT_PLANT", payload: tpp.uuid }); + }; + + // See `cachedIcon` for more details on this. + let maybeGetCachedIcon = (e: IMGEvent) => { + let OFS = tpp.body.openfarm_slug; + let img = e.currentTarget; + OFS && cachedIcon(OFS) + .then((i: string) => { + i !== img.getAttribute("src") && img.setAttribute("src", i); + this.setState({ icon: i }); + }); + } + + // Name given from OpenFarm's API. + let label = plant.name || "Unknown plant"; + + // Original planted date vs time now to determine age. + let plantedAt = plant.created_at || moment(); + let currentDay = moment(); + let daysOld = currentDay.diff(moment(plantedAt), "days") + 1; + + return
+ + + {label} + + + {daysOld} {t("days old")} + +
; + } +} diff --git a/frontend/src/farm_designer/plants/plant_panel.tsx b/frontend/src/farm_designer/plants/plant_panel.tsx new file mode 100644 index 000000000..2e1504404 --- /dev/null +++ b/frontend/src/farm_designer/plants/plant_panel.tsx @@ -0,0 +1,73 @@ +import * as React from "react"; +import * as _ from "lodash"; +import { t } from "i18next"; +import { FormattedPlantInfo } from "./map_state_to_props"; + +interface PlantPanelProps { + info: FormattedPlantInfo; + onDestroy?(uuid: string): void; +} + +export function PlantPanel({ info, onDestroy }: PlantPanelProps) { + let { name, slug, plantedAt, daysOld, x, y, uuid } = info; + let destroy = () => onDestroy && onDestroy(uuid); + return
+ +
    +
  • + + {t("Full Name")}:  + + + {_.startCase(name)} + +
  • +
  • + + {t("Plant Type")}:  + + + {_.startCase(slug)} + +
  • +
  • + + {t("Started")}:  + + + {plantedAt} + +
  • +
  • + + {t("Age")}:  + + + {daysOld} {t("days old")} + +
  • +
  • + + {t("Location")}:  + + + ({x}, {y}) + +
  • +
+
+ +
+ +
; +} diff --git a/frontend/src/farm_designer/reducer.ts b/frontend/src/farm_designer/reducer.ts new file mode 100644 index 000000000..63d956b33 --- /dev/null +++ b/frontend/src/farm_designer/reducer.ts @@ -0,0 +1,69 @@ +import { CropLiveSearchResult } from "./interfaces"; +import { generateReducer } from "../redux/generate_reducer"; +import { + DesignerState, + HoveredPlantPayl, + BotOriginQuadrant, + isBotOriginQuadrant, + ZoomLevelPayl +} from "./interfaces"; +import { cloneDeep } from "lodash"; +import { TaggedResource } from "../resources/tagged_resources"; +import { localStorageNumFetch } from "../util"; +import { Actions } from "../constants"; + +export const BOT_ORIGIN_QUADRANT = "bot_origin_quadrant"; +export const ZOOM_LEVEL = "zoom_level"; + +let botOriginVal = localStorageNumFetch(BOT_ORIGIN_QUADRANT); +let botOriginQuadrant = isBotOriginQuadrant(botOriginVal) ? botOriginVal : 2; + +let zoomLevelVal = localStorageNumFetch(ZOOM_LEVEL); +let zoomLevel = zoomLevelVal ? zoomLevelVal : 1; + +export let initialState: DesignerState = { + selectedPlant: undefined, + hoveredPlant: { + plantUUID: undefined, + icon: "" + }, + botOriginQuadrant, + zoomLevel: zoomLevel || 1, + cropSearchQuery: "", + cropSearchResults: [] +}; + +export let designer = generateReducer(initialState) + .add(Actions.SEARCH_QUERY_CHANGE, (s, { payload }) => { + let state = cloneDeep(s); + state.cropSearchQuery = payload; + return state; + }) + .add(Actions.SELECT_PLANT, (s, { payload }) => { + s.selectedPlant = payload; + return s; + }) + .add(Actions.TOGGLE_HOVERED_PLANT, (s, { payload }) => { + s.hoveredPlant = payload; + return s; + }) + .add(Actions.UPDATE_BOT_ORIGIN_QUADRANT, (s, a) => { + localStorage.setItem(BOT_ORIGIN_QUADRANT, JSON.stringify(a.payload)); + s.botOriginQuadrant = a.payload; + return s; + }) + .add(Actions.UPDATE_MAP_ZOOM_LEVEL, (s, { payload }) => { + let value = s.zoomLevel + payload; + s.zoomLevel = value; + localStorage.setItem(ZOOM_LEVEL, value.toString()); + return s; + }) + .add(Actions.OF_SEARCH_RESULTS_OK, (s, a) => { + let state = cloneDeep(s); + state.cropSearchResults = a.payload; + return state; + }) + .add(Actions.DESTROY_RESOURCE_OK, (s, { payload }) => { + if (payload.uuid === s.selectedPlant) { s.selectedPlant = undefined; } + return s; + }); diff --git a/frontend/src/farm_designer/search_selectors.ts b/frontend/src/farm_designer/search_selectors.ts new file mode 100644 index 000000000..f7a35eb68 --- /dev/null +++ b/frontend/src/farm_designer/search_selectors.ts @@ -0,0 +1,21 @@ +import * as _ from "lodash"; +import { CropLiveSearchResult } from "./interfaces"; + +export function findBySlug(crops: CropLiveSearchResult[], slug?: string): CropLiveSearchResult { + let crop = _(crops).find((result) => result.crop.slug === slug); + return crop || { + crop: { + binomial_name: "binomial_name", + common_names: "common_names", + name: "name", + row_spacing: "row_spacing", + spread: "spread", + description: "description", + height: "height", + processing_pictures: "processing_pictures", + slug: "slug", + sun_requirements: "sun_requirements" + }, + image: "https://placehold.it/350x150" + }; +} diff --git a/frontend/src/farm_designer/state_to_props.ts b/frontend/src/farm_designer/state_to_props.ts new file mode 100644 index 000000000..2ba8f52aa --- /dev/null +++ b/frontend/src/farm_designer/state_to_props.ts @@ -0,0 +1,35 @@ +import { Everything } from "../interfaces"; +import { + selectAllGenericPointers, + selectAllPlantPointers, + selectAllCrops, + joinToolsAndSlot, + findPlant +} from "../resources/selectors"; + +export function mapStateToProps(props: Everything) { + + let plants = selectAllPlantPointers(props.resources.index); + let selectedPlant = plants + .filter(x => x.uuid === props + .resources + .consumers + .farm_designer + .selectedPlant)[0]; + let { plantUUID } = props.resources.consumers.farm_designer.hoveredPlant; + let hoveredPlant = plantUUID ? + findPlant(props.resources.index, plantUUID) : undefined; + + return { + crops: selectAllCrops(props.resources.index), + dispatch: props.dispatch, + selectedPlant, + zoomLevel: 1, + designer: props.resources.consumers.farm_designer, + points: selectAllGenericPointers(props.resources.index), + toolSlots: joinToolsAndSlot(props.resources.index), + hoveredPlant, + plants, + bot: props.bot + }; +} diff --git a/frontend/src/farm_designer/util.ts b/frontend/src/farm_designer/util.ts new file mode 100644 index 000000000..e5dc87e77 --- /dev/null +++ b/frontend/src/farm_designer/util.ts @@ -0,0 +1,29 @@ +import * as Axios from "axios"; +import * as _ from "lodash"; +import { OpenFarm, CropSearchResult } from "./openfarm"; +import { DEFAULT_ICON } from "../open_farm/index"; + +let url = (q: string) => `${OpenFarm.cropUrl}?include=pictures&filter=${q}`; + +let openFarmSearchQuery = _.throttle((q: string) => + Axios.get(url(q)), 800); + +export let OFSearch = (searchTerm: string) => + (dispatch: Function) => { + dispatch({ type: "SEARCH_QUERY_CHANGE", payload: searchTerm }); + openFarmSearchQuery(searchTerm) + .then(resp => { + let images: { [key: string]: string } = {}; + _.get(resp, "data.included", []) + .map(item => { + return { id: item.id, url: item.attributes.thumbnail_url }; + }) + .map((val, acc) => images[val.id] = val.url); + let payload = resp.data.data.map(datum => { + let crop = datum.attributes; + let id = _.get(datum, "relationships.pictures.data[0].id", ""); + return { crop, image: (images[id] || DEFAULT_ICON) }; + }); + dispatch({ type: "OF_SEARCH_RESULTS_OK", payload }); + }); + }; diff --git a/frontend/src/farmware/camera_calibration.tsx b/frontend/src/farmware/camera_calibration.tsx new file mode 100644 index 000000000..1c6b7339a --- /dev/null +++ b/frontend/src/farmware/camera_calibration.tsx @@ -0,0 +1,65 @@ +import * as React from "react"; +import { t } from "i18next"; +import { Widget, Row, Col } from "../ui/index"; +import { CameraCalibrationState, CameraCalibrationProps } from "./interfaces"; +import { TitleBar } from "../images/weed_detector/title"; +import { ImageWorkspace } from "../images/weed_detector/image_workspace"; +import { ToolTips } from "../constants"; +import { envSave } from "../images/weed_detector/remote_env/actions"; +import { WDENVKey } from "../images/weed_detector/remote_env/interfaces"; + +export class CameraCalibration extends + React.Component { + + calibrate = () => { + console.log("TODO: Send RPC / farmware activation message here."); + } + + render() { + return + + + + + + { console.log("TODO. Stub.") }} + images={this.props.images} + currentImage={this.props.currentImage} + onChange={(key, value) => { + let MAPPING: Record = { + "iteration": "CAMERA_CALIBRATION_iteration", + "morph": "CAMERA_CALIBRATION_morph", + "blur": "CAMERA_CALIBRATION_blur", + "H_HI": "CAMERA_CALIBRATION_H_HI", + "H_LO": "CAMERA_CALIBRATION_H_LO", + "S_HI": "CAMERA_CALIBRATION_S_HI", + "S_LO": "CAMERA_CALIBRATION_S_LO", + "V_HI": "CAMERA_CALIBRATION_V_HI", + "V_LO": "CAMERA_CALIBRATION_V_LO" + }; + envSave(MAPPING[key], value); + }} + iteration={this.props.iteration} + morph={this.props.morph} + blur={this.props.blur} + H_LO={this.props.H_LO} + S_LO={this.props.S_LO} + V_LO={this.props.V_LO} + H_HI={this.props.H_HI} + S_HI={this.props.S_HI} + V_HI={this.props.V_HI} + /> + + + + + + } +} diff --git a/frontend/src/farmware/farmware_panel.tsx b/frontend/src/farmware/farmware_panel.tsx new file mode 100644 index 000000000..404cdb6b6 --- /dev/null +++ b/frontend/src/farmware/farmware_panel.tsx @@ -0,0 +1,146 @@ +import * as React from "react"; +import { t } from "i18next"; +import { devices } from "../device"; +import { FWProps, FWState } from "./interfaces"; +import { MustBeOnline } from "../devices/must_be_online"; +import { ToolTips } from "../constants"; +import { + DeprecatedFBSelect, + Widget, + WidgetHeader, + WidgetBody, + Row, + Col +} from "../ui"; +import { betterCompact } from "../util"; + +export class FarmwarePanel extends React.Component> { + constructor() { + super(); + this.state = {}; + } + + /** Keep null checking DRY for this.state.selectedFarmware */ + ifFarmwareSelected = (cb: (label: string) => void) => { + let { selectedFarmware } = this.state; + selectedFarmware ? cb(selectedFarmware) : alert("Select a farmware first."); + } + + update = () => { + this + .ifFarmwareSelected(label => devices + .current + .updateFarmware(label) + .then(() => this.setState({ selectedFarmware: undefined }))); + } + + remove = () => { + this + .ifFarmwareSelected(label => devices + .current + .removeFarmware(label) + .then(() => this.setState({ selectedFarmware: undefined }))); + } + + run = () => { + this + .ifFarmwareSelected(label => devices + .current + .execScript(label) + .then(() => this.setState({ selectedFarmware: undefined }))); + } + + install = () => { + if (this.state.packageUrl) { + devices + .current + .installFarmware(this.state.packageUrl) + .then(() => this.setState({ packageUrl: "" })); + } else { + alert("Enter a URL"); + } + } + + fwList = () => { + let { farmwares } = this.props; + let choices = betterCompact(Object + .keys(farmwares) + .map(x => farmwares[x])) + .map((fw, i) => { + let hasVers = (fw.meta && _.isString(fw.meta.version)); + // Guard against legacy Farmwares. Can be removed in a month. + // -- RC June 2017. + let label = hasVers ? `${fw.name} ${fw.meta.version}` : fw.name; + return { value: fw.uuid, label }; + }); + return choices; + } + + render() { + return + + + + + +
+ + { + this.setState({ packageUrl: e.currentTarget.value }); + }} + /> + + + + +
+
+ + + { + let selectedFarmware = x.value; + if (_.isString(selectedFarmware)) { + this.setState({ selectedFarmware }); + } else { + throw new Error(`Bad farmware UUID: ${x.value}`) + } + }} + placeholder="Installed Farmware Packages" /> + + + + + + + +
+
+
; + } +} diff --git a/frontend/src/farmware/index.tsx b/frontend/src/farmware/index.tsx new file mode 100644 index 000000000..99eeaca3f --- /dev/null +++ b/frontend/src/farmware/index.tsx @@ -0,0 +1,53 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { Page, Col, Row, Widget, WidgetHeader, WidgetBody } from "../ui/index"; +import { FarmwarePanel } from "./farmware_panel"; +import { mapStateToProps } from "./state_to_props"; +import { Photos } from "./photos"; +import { CameraCalibration } from "./camera_calibration"; +import { FarmwareProps } from "../devices/interfaces"; +import { detectWeeds } from "../images/actions"; +import { WeedDetector } from "../images/weed_detector/index"; +import { envGet } from "../images/weed_detector/remote_env/selectors"; + +@connect(mapStateToProps) +export class FarmwarePage extends React.Component { + render() { + return + + + + + + + + + + + { this.props.dispatch(detectWeeds(id)); }} + currentImage={this.props.currentImage} + images={this.props.images} + env={this.props.env} + iteration={envGet("CAMERA_CALIBRATION_iteration", this.props.env)} + morph={envGet("CAMERA_CALIBRATION_morph", this.props.env)} + blur={envGet("CAMERA_CALIBRATION_blur", this.props.env)} + H_LO={envGet("CAMERA_CALIBRATION_H_LO", this.props.env)} + S_LO={envGet("CAMERA_CALIBRATION_S_LO", this.props.env)} + V_LO={envGet("CAMERA_CALIBRATION_V_LO", this.props.env)} + H_HI={envGet("CAMERA_CALIBRATION_H_HI", this.props.env)} + S_HI={envGet("CAMERA_CALIBRATION_S_HI", this.props.env)} + V_HI={envGet("CAMERA_CALIBRATION_V_HI", this.props.env)} /> + + + + + + ; + } +}; diff --git a/frontend/src/farmware/interfaces.ts b/frontend/src/farmware/interfaces.ts new file mode 100644 index 000000000..e6798e1c1 --- /dev/null +++ b/frontend/src/farmware/interfaces.ts @@ -0,0 +1,51 @@ +import { BotState } from "../devices/interfaces"; +import { TaggedImage } from "../resources/tagged_resources"; +import { SyncStatus, Dictionary, FarmwareManifest } from "farmbot/dist"; +import { WD_ENV } from "../images/weed_detector/remote_env/interfaces"; + +export interface FWState { + selectedFarmware: string | undefined; + packageUrl: string | undefined; +} + +export interface FWProps { + syncStatus: SyncStatus; + farmwares: Dictionary; +} + +export interface Props { + bot: BotState; + dispatch: Function; + images: TaggedImage[]; + currentImage: TaggedImage | undefined; +} + +export interface PhotosProps { + dispatch: Function; + images: TaggedImage[]; + currentImage: TaggedImage | undefined; +} + +export interface CameraCalibrationState { + settingsMenuOpen: boolean; +} + +export interface CameraCalibrationProps { + images: TaggedImage[]; + currentImage: TaggedImage | undefined; + onProcessPhoto(id: number): void; + env: Partial; + iteration: number; + morph: number; + blur: number; + H_LO: number; + S_LO: number; + V_LO: number; + H_HI: number; + S_HI: number; + V_HI: number; +} + +export interface FarmwareState { + currentImage: string | undefined; +} diff --git a/frontend/src/farmware/photos.tsx b/frontend/src/farmware/photos.tsx new file mode 100644 index 000000000..29d042fa0 --- /dev/null +++ b/frontend/src/farmware/photos.tsx @@ -0,0 +1,37 @@ +import * as React from "react"; +import { t } from "i18next"; +import { success, error } from "farmbot-toastr"; +import { Widget, WidgetHeader, WidgetBody } from "../ui/index"; +import { ImageFlipper } from "../images/index"; +import { PhotosProps } from "./interfaces"; +import { devices } from "../device"; +import { ToolTips } from "../constants"; +import { selectImage } from "../images/actions"; + +export class Photos extends React.Component { + + takePhoto = () => { + let ok = () => success(t("Processing now. Refresh page to see result.")); + let no = () => error("Error taking photo"); + devices.current.takePhoto().then(ok, no); + } + + render() { + return + + + + + { this.props.dispatch(selectImage(id)) }} + currentImage={this.props.currentImage} + images={this.props.images} /> + + + } +} diff --git a/frontend/src/farmware/recursion_idea.tsx b/frontend/src/farmware/recursion_idea.tsx new file mode 100644 index 000000000..677629c29 --- /dev/null +++ b/frontend/src/farmware/recursion_idea.tsx @@ -0,0 +1,45 @@ +import * as React from "react"; +import { DropDownItem } from "../ui/index"; +import { MenuItem, Menu, Popover, Position, Classes, MenuDivider } from "@blueprintjs/core/dist"; + +let RECURSIVE_LIST: DropDownItem = { + label: "Top Level", + value: 0, + children: [ + { label: "0.1", value: 0 }, + { label: "0.2", value: 0 }, + { label: "0.3", value: 0 }, + { + label: "1.1", + value: 0, + children: [ + { label: "2.1", value: 0 }, + { label: "2.2", value: 0 } + ] + }, + ] +}; + +function renderDDI(parent: DropDownItem, key = "TOP_LEVEL"): JSX.Element { + if (parent.children) { + if (parent.children.length) { + return + {parent.children.map((item, index) => renderDDI(item, key + `_CHILD_${index}`))} + ; + }; + } + // base case + return ; +} + +export function DeleteMe(props: any) { + return + + ; +} diff --git a/frontend/src/farmware/reducer.ts b/frontend/src/farmware/reducer.ts new file mode 100644 index 000000000..40d7b0a82 --- /dev/null +++ b/frontend/src/farmware/reducer.ts @@ -0,0 +1,18 @@ +import { generateReducer } from "../redux/generate_reducer"; +import { FarmwareState } from "./interfaces"; +import { TaggedResource } from "../resources/tagged_resources"; +import { Actions } from "../constants"; + +export let farmwareState: FarmwareState = { currentImage: undefined }; + +export let famrwareReducer = generateReducer(farmwareState) + .add(Actions.SELECT_IMAGE, (s, { payload }) => { + s.currentImage = payload; + return s; + }) + .add(Actions.DESTROY_RESOURCE_OK, (s, { payload }) => { + let thatUUID = payload.uuid; + let thisUUID = s.currentImage; + if (thisUUID === thatUUID) { s.currentImage = undefined; } + return s; + }); diff --git a/frontend/src/farmware/runner_button.tsx b/frontend/src/farmware/runner_button.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/farmware/state_to_props.ts b/frontend/src/farmware/state_to_props.ts new file mode 100644 index 000000000..7e6834b35 --- /dev/null +++ b/frontend/src/farmware/state_to_props.ts @@ -0,0 +1,29 @@ +import { Everything } from "../interfaces"; +import { selectAllImages } from "../resources/selectors"; +import { FarmwareProps } from "../devices/interfaces"; +import { prepopulateEnv } from "../images/weed_detector/remote_env/selectors"; + +export function mapStateToProps(props: Everything): FarmwareProps { + let images = _(selectAllImages(props.resources.index)) + .sortBy(x => x.body.id) + .reverse() + .value(); + + let currentImage = images + .filter(i => i.uuid === props.resources.consumers.farmware.currentImage)[0]; + let { farmwares } = props.bot.hardware.process_info; + let syncStatus = props + .bot + .hardware + .informational_settings + .sync_status || "unknown"; + return { + farmwares, + syncStatus, + env: prepopulateEnv(props.bot.hardware.user_env), + dispatch: props.dispatch, + currentImage, + images + }; +} + diff --git a/frontend/src/front_page/front_page.tsx b/frontend/src/front_page/front_page.tsx new file mode 100644 index 000000000..4b564bba0 --- /dev/null +++ b/frontend/src/front_page/front_page.tsx @@ -0,0 +1,323 @@ +import * as React from "react"; +import * as axios from "axios"; +import { t } from "i18next"; +import { error as log, success, init as logInit } from "farmbot-toastr"; +import { AuthState } from "../auth/interfaces"; +import { prettyPrintApiErrors } from "../util"; +import { API } from "../api"; +import { Session } from "../session"; +import { FrontPageState } from "./interfaces"; + +export class FrontPage extends React.Component<{}, Partial> { + constructor() { + super(); + this.state = { + regEmail: "", + regName: "", + regPassword: "", + regConfirmation: "", + email: "", + loginPassword: "", + showServerOpts: false, + serverURL: "", + serverPort: "", + forgotPassword: false, + agreeToTerms: false + }; + this.toggleServerOpts = this.toggleServerOpts.bind(this); + } + + componentDidMount() { + logInit(); + API.setBaseUrl(API.fetchBrowserLocation()); + this.setState({ + serverURL: API.fetchHostName(), + serverPort: API.inferPort() + }); + } + + set = (name: keyof FrontPageState) => + (event: React.FormEvent) => { + let state: { [name: string]: string } = {}; + state[name] = (event.currentTarget).value; + // WHY THE 2 ms timeout you ask???? + // There was a bug reported in Firefox. + // I have no idea why, but the checkbox would uncheck itself after being + // checked. Some sort of race condtion. ¯\_(ツ)_/¯ + setTimeout(() => this.setState(state), 2); + }; + + submitLogin(e: React.FormEvent<{}>) { + e.preventDefault(); + let { email, loginPassword, showServerOpts } = this.state; + let payload = { user: { email, password: loginPassword } }; + let url: string; + if (showServerOpts) { + url = `//${this.state.serverURL}:${this.state.serverPort}`; + } else { + url = API.fetchBrowserLocation(); + } + API.setBaseUrl(url); + axios.post(API.current.tokensPath, payload) + .then(resp => { + Session.put(resp.data); + window.location.href = "/app/controls"; + }).catch(error => { + if (_.get(error, "response.status") === 451) { + window.location.href = "/tos_update.html"; + } + log(prettyPrintApiErrors(error)); + }); + } + + submitRegistration(e: React.FormEvent<{}>) { + e.preventDefault(); + let { regEmail, regName, regPassword, regConfirmation, agreeToTerms } = this.state; + let form = { + user: { + name: regName, + email: regEmail, + password: regPassword, + password_confirmation: regConfirmation, + agree_to_terms: agreeToTerms + } + }; + axios.post(API.current.usersPath, form).then(resp => { + let m = "Almost done! Check your email for the verification link."; + success(t(m)); + }).catch(error => { + log(prettyPrintApiErrors(error)); + }); + } + + toggleServerOpts() { + this.setState({ showServerOpts: !this.state.showServerOpts }); + } + + toggleForgotPassword() { + this.setState({ forgotPassword: !this.state.forgotPassword }); + } + + submitForgotPassword(e: React.SyntheticEvent) { + e.preventDefault(); + let { email } = this.state; + let data = { email }; + axios.post<{}>(API.current.passwordResetPath, data) + .then(resp => { + success("Email has been sent.", "Forgot Password"); + this.setState({ forgotPassword: false }); + }).catch(error => { + log(prettyPrintApiErrors(error)); + }); + } + + maybeRenderTos() { + const TOS_URL = process.env.TOS_URL; + if (TOS_URL) { + const PRV_URL = process.env.PRIV_URL; + return
+
+ + +
+ +
; + } + } + + render() { + let buttonStylesUniqueToOnlyThisPage = { + marginTop: "1.5rem", + padding: ".5rem 1.6rem", + fontSize: "1.2rem", + borderBottom: "none" + }; + + let { showServerOpts, forgotPassword } = this.state; + let expandIcon = showServerOpts ? "minus" : "plus"; + let { toggleServerOpts } = this; + return ( +
+

+ {t("Welcome to the FarmBot Web App")} +

+

+ {t("Setup, customize, and control FarmBot from your computer")} +

+

+ {t("Setup, customize, and control FarmBot from your tablet")} +

+

+ {t("Setup, customize, and control FarmBot from your smartphone")} +

+
+
+ + +
+
+ {!forgotPassword && ( +
+
+
+
+
+
{t("Login")}
+ + +
+
+
+
+
+
+
+
+ + + + + + + + {t("Forgot password?")} + + {this.state.showServerOpts && ( +
+ + + + + + +
+ )} +
+
+
+ +
+
+
+
+
+
+
+
+ )} + {forgotPassword && ( +
+
+
+
+
+
{t("Forgot Password")}
+ +
+
+
+
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ )} +
+
+
+
+
+
{t("Create An Account")}
+
+
+
+
+
+
+
+
+ + + + + + + + + + + {this.maybeRenderTos()} +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ ); + } +} + diff --git a/frontend/src/front_page/index.tsx b/frontend/src/front_page/index.tsx new file mode 100644 index 000000000..6864a3e75 --- /dev/null +++ b/frontend/src/front_page/index.tsx @@ -0,0 +1,15 @@ +import * as React from "react"; +import { detectLanguage } from "../i18n"; +import { FrontPage } from "./front_page"; +import * as i18next from "i18next"; +import "../css/_index.scss"; +import "../npm_addons"; +import { stopIE, attachToRoot } from "../util"; + +stopIE(); + +detectLanguage().then((config) => { + i18next.init(config, (err, t) => { + attachToRoot(FrontPage, {}); + }); +}); diff --git a/frontend/src/front_page/interfaces.ts b/frontend/src/front_page/interfaces.ts new file mode 100644 index 000000000..f03add21e --- /dev/null +++ b/frontend/src/front_page/interfaces.ts @@ -0,0 +1,14 @@ +export interface FrontPageState { + regName?: string; + regEmail?: string; + regPassword?: string; + regConfirmation?: string; + email?: string; + loginPassword?: string; + showServerOpts?: boolean; + serverURL?: string; + serverPort?: string; + forgotPassword?: boolean; + forgotPasswordEmail?: string; + agreeToTerms: boolean; +} diff --git a/frontend/src/history.tsx b/frontend/src/history.tsx new file mode 100644 index 000000000..5dee1d860 --- /dev/null +++ b/frontend/src/history.tsx @@ -0,0 +1,3 @@ +import { browserHistory } from "react-router"; +export let history = browserHistory; +export let push = (url: string) => history.push(url); diff --git a/frontend/src/i18n.ts b/frontend/src/i18n.ts new file mode 100644 index 000000000..42b5f9eda --- /dev/null +++ b/frontend/src/i18n.ts @@ -0,0 +1,27 @@ +import * as axios from "axios"; + +function generateUrl(langCode: string) { + let lang = langCode.slice(0, 2); + let url = "//" + location.host.split(":") + [0] + ":" + location.port + "/app-resources/languages/" + lang + ".js"; + return url; +}; + +function getUserLang(langCode = "en_us") { + return axios.get>(generateUrl(langCode)) + .then((resp) => { return langCode.slice(0, 2); }) + .catch((error) => { return "en"; }); +}; + +export function detectLanguage() { + return getUserLang(navigator.language).then(function (lang) { + // TODO: Possiblly requires optimization using Webpack chunking. + let langi = require("../public/app-resources/languages/" + lang + ".js"); + return { + nsSeparator: "", + keySeparator: "", + lng: lang, + resources: { [lang]: { translation: langi } } + }; + }); +}; diff --git a/frontend/src/images/__tests__/image_flipper_test.tsx b/frontend/src/images/__tests__/image_flipper_test.tsx new file mode 100644 index 000000000..0e62cbb24 --- /dev/null +++ b/frontend/src/images/__tests__/image_flipper_test.tsx @@ -0,0 +1,31 @@ +import "../../unmock_i18next"; +import * as React from "react"; +import { ImageFlipper } from "../image_flipper"; +import { fakeImages } from "../../__test_support__/fake_state/images"; +import * as freeze from "deep-freeze"; +import { TaggedImage } from "../../resources/tagged_resources"; +import { defensiveClone } from "../../util"; + +describe("", () => { + let images: TaggedImage[] = []; + + fakeImages.forEach((item, index) => { + let image = defensiveClone(item); + image.uuid = `Position ${index}`; + images.push(image); + }); + + it("defaults to index 0", () => { + let onFlip = jest.fn(); + let x = new ImageFlipper(); + let currentImage = undefined; + x.props = { images, currentImage, onFlip }; + let up = x.go(1); + up(); + expect(onFlip).toHaveBeenCalledWith(images[1].uuid); + }); + + it("stops at end"); + it("Flips down"); + it("Flips up"); +}); diff --git a/frontend/src/images/__tests__/selector_tests.ts b/frontend/src/images/__tests__/selector_tests.ts new file mode 100644 index 000000000..65068d69c --- /dev/null +++ b/frontend/src/images/__tests__/selector_tests.ts @@ -0,0 +1,47 @@ + +import { prepopulateEnv, envGet } from "../weed_detector/remote_env/selectors"; +import { DEFAULTS } from "../weed_detector/remote_env/constants"; +import { WD_ENV } from "../weed_detector/remote_env/interfaces"; + +describe("populateEnv()", () => { + it("sets values", () => { + let env = { CAMERA_CALIBRATION_calibration_object_separation: "12" }; + let result = prepopulateEnv(env); + expect(result.CAMERA_CALIBRATION_calibration_object_separation).toEqual(12); + }); + + it("Falls back on defaults", () => { + let result = prepopulateEnv({}); + let actual = result.CAMERA_CALIBRATION_calibration_object_separation; + let expected = DEFAULTS.CAMERA_CALIBRATION_calibration_object_separation; + expect(actual).toEqual(expected); + }); +}); + +describe("envGet()", () => { + let myEnv: Partial = { + "CAMERA_CALIBRATION_H_LO": 30, + "CAMERA_CALIBRATION_S_LO": 50, + "CAMERA_CALIBRATION_V_LO": 50, + "CAMERA_CALIBRATION_H_HI": 90, + "CAMERA_CALIBRATION_S_HI": 255, + "CAMERA_CALIBRATION_V_HI": 255, + "CAMERA_CALIBRATION_blur": 15, + "CAMERA_CALIBRATION_morph": 6, + "CAMERA_CALIBRATION_iteration": 4, + "CAMERA_CALIBRATION_camera_offset_x": 0, + "CAMERA_CALIBRATION_camera_offset_y": 0, + "CAMERA_CALIBRATION_coord_scale": 0, + "CAMERA_CALIBRATION_calibration_object_separation": 29, + "CAMERA_CALIBRATION_total_rotation_angle": 0, + "CAMERA_CALIBRATION_invert_hue_selection": 0, + "CAMERA_CALIBRATION_calibration_along_axis": 6, + "CAMERA_CALIBRATION_image_bot_origin_location": 4 + }; + + it("grabs current value", () => { + let result = envGet("CAMERA_CALIBRATION_calibration_object_separation", + myEnv); + expect(result).toEqual(29); + }) +}) diff --git a/frontend/src/images/__tests__/weed_detector_slider_test.tsx b/frontend/src/images/__tests__/weed_detector_slider_test.tsx new file mode 100644 index 000000000..c54a335a5 --- /dev/null +++ b/frontend/src/images/__tests__/weed_detector_slider_test.tsx @@ -0,0 +1,16 @@ +import { WeedDetectorSlider } from "../weed_detector/slider"; + +describe("Weed detector slider", () => { + it("sets props", () => { + let results = WeedDetectorSlider({ + onChange: jest.fn(), + onRelease: jest.fn(), + highest: 99, + lowest: 1, + lowValue: 3, + highValue: 5, + }); + + expect(results.props.labelStepSize).toEqual(99); + }); +}); diff --git a/frontend/src/images/__tests__/weed_detector_title_test.tsx b/frontend/src/images/__tests__/weed_detector_title_test.tsx new file mode 100644 index 000000000..c904a73fd --- /dev/null +++ b/frontend/src/images/__tests__/weed_detector_title_test.tsx @@ -0,0 +1,24 @@ +import "../../unmock_i18next"; +import * as React from "react"; +import { mount } from "enzyme"; +import { TitleBar } from "../weed_detector/title"; + +describe("", () => { + it("Has a progress bar", () => { + let props = { + onSave: jest.fn(), + onTest: jest.fn(), + onSettingToggle: jest.fn(), + onDeletionClick: jest.fn(), + settingsMenuOpen: false, + title: "Test", + help: "help text", + env: {} + } + let tb = mount(); + expect(tb.text().toLowerCase()).toContain("clear weeds"); + tb.setProps({ deletionProgress: "10%" }); + expect(tb.text().toLowerCase()).toContain("10%"); + expect(tb.text().toLowerCase()).not.toContain("clear weeds"); + }); +}); diff --git a/frontend/src/images/actions.tsx b/frontend/src/images/actions.tsx new file mode 100644 index 000000000..87ec14261 --- /dev/null +++ b/frontend/src/images/actions.tsx @@ -0,0 +1,71 @@ +import * as Axios from "axios"; +import { t } from "i18next"; +import { success, error } from "farmbot-toastr"; +import { Thunk, GetState } from "../redux/interfaces"; +import { API } from "../api"; +import { Progress, ProgressCallback } from "../util"; +import { GenericPointer } from "../interfaces"; +import { devices } from "../device"; +const QUERY = { meta: { created_by: "plant-detection" } }; + +export function selectImage(uuid: string | undefined) { + return { type: "SELECT_IMAGE", payload: uuid }; +} + +export function resetWeedDetection(cb: ProgressCallback): Thunk { + return async function (dispatch, getState) { + const URL = API.current.pointSearchPath; + try { + let { data } = await Axios.post(URL, QUERY); + let ids = data.map(x => x.id); + // If you delete too many points, you will violate the URL length + // limitation of 2,083. Chunking helps fix that. + let chunks = _.chunk(ids, 179 /* Prime numbers, why not? */); + let prog = new Progress(chunks.length, cb); + prog.inc(); + let promises = chunks.map(function (chunk) { + return Axios + .delete(API.current.pointsPath + chunk.join(",")) + .then(function (x) { + prog.inc(); + return x; + }); + }); + Promise + .all(promises) + .then(function () { + dispatch({ + type: "DELETE_POINT_OK", + payload: ids + }); + success(t("Deleted {{num}} weeds", { num: ids.length })); + prog.finish(); + }) + .catch(function (e) { + error(t("Some weeds failed to delete. Please try again.")); + prog.finish(); + }); + } catch (e) { + throw e; + } + }; +}; + +const value = "PLANT_DETECTION_selected_image"; + +export function detectWeeds(imageId: number) { + return function (dispatch: Function, getState: GetState) { + let dictionary = getState().bot.hardware.process_info.farmwares; + let processes = Object + .keys(dictionary) + .map(key => dictionary[key]) + .filter(fw => fw.name === "take-photo") + .map(proc => { + devices + .current + .execScript(proc.uuid, [{ + kind: "pair", args: { value, label: "" + imageId } + }]); + }) + } +} diff --git a/frontend/src/images/farmbot_picker.tsx b/frontend/src/images/farmbot_picker.tsx new file mode 100644 index 000000000..7920ac605 --- /dev/null +++ b/frontend/src/images/farmbot_picker.tsx @@ -0,0 +1,94 @@ +import * as React from "react"; +import { Hue, Saturation } from "react-color/lib/components/common"; +import { FarmbotPickerProps } from "./index"; + +/** Wrapper class around `react-color`'s `` and ``. + * Add an extra white box feature for showing user weed detection settings. + */ +export class FarmbotColorPicker extends React.Component { + BASE_CSS: React.CSSProperties = { + position: "absolute", + border: "2px solid white", + boxShadow: "0 0 2px 2px rgba(0, 0, 0, 0.3) inset" + }; + + constructor() { + super(); + this.state = {}; + } + + hueCSS = (): React.CSSProperties => { + let position = "relative"; + let width = "100%"; + let paddingBottom = "10%"; + let overflow = "hidden"; + return { position, width, paddingBottom, overflow }; + } + + saturationCSS = (): React.CSSProperties => { + let position = "relative"; + let width = "100%"; + let paddingBottom = "35%"; + let overflow = "hidden"; + return { position, width, paddingBottom, overflow }; + } + + hueboxCSS = (): React.CSSProperties => { + let l = ((this.props.h[0] * 2) / 360) * 100; + let w = ((this.props.h[1] * 2) / 360) * 100 - l; + let width = `${w}%`; + let left = `${l}%`; + let height = "100%"; + let top = 0; + return { ...this.BASE_CSS, width, height, top, left }; + } + + saturationboxCSS = (): React.CSSProperties => { + const MAX = 255 + let [s0, s1] = this.props.s; + let [v0, v1] = this.props.v; + + let l = ((s0 / MAX) * 100); + let w = ((s1 / MAX) * 100) - l; + let t = 100 - (v1 / MAX) * 100; + let h = (100 - (v0 / MAX) * 100) - t; + + let [width, height, left, top] = [w, h, l, t].map(x => `${x}%`); + + return { ...this.BASE_CSS, width, height, top, left }; + } + + customPointer = () =>
; + + render() { + let H_AVG = ((this.props.h[1] * 2 + this.props.h[0] * 2) / 2); + /** 💥💥💥SURPRISING CODE AHEAD: + * I think the typings for `react-color` might be missing `hsv` and `hsl` + * as mandatory props. I don't have time to send a patch right now. Failing + * to add these props is a runtime error. + * TODO: Update `definitely-typed/react-color` typings + */ + let dontTouchThis = { + hsv: { h: H_AVG, s: 0, v: 0 }, + hsl: { h: H_AVG, s: 0, l: 0 } + }; + return
+
+
+ +
+
+
+
+ +
+
+
; + } +} diff --git a/frontend/src/images/hsv_slider.tsx b/frontend/src/images/hsv_slider.tsx new file mode 100644 index 000000000..651301640 --- /dev/null +++ b/frontend/src/images/hsv_slider.tsx @@ -0,0 +1,92 @@ +import * as React from "react"; +import { HSV, HiLo, EnvSliderProps, EnvSliderState } from "./interfaces"; +import { RangeSlider } from "@blueprintjs/core/dist/components/slider/rangeSlider"; + +/** Max HSV allowed by farmbot weed detector. */ +const RANGE: Record = { + H: { lo: 0, hi: 179 }, + S: { lo: 0, hi: 255 }, + V: { lo: 0, hi: 255 } +}; + +/** Default HSV if none found on bot. */ +const DEFAULTS: Record = { + H: { lo: 30, hi: 90 }, + S: { lo: 50, hi: 255 }, + V: { lo: 50, hi: 255 } +}; + +export class HsvSlider extends React.Component { + constructor() { + super(); + this.state = { + sliding: false + }; + } + + componentDidMount() { + this.onRelease(); + } + + onChange = (range: [number, number]) => { + this.setState({ + hi: range[1], + lo: range[0], + sliding: true + }); + } + + get name(): HSV { + switch (this.props.name) { + case "H": case "S": case "V": this.props.name + default: throw new Error("HSV is bad.") + } + } + + /** Triggered on componentDidMount() and when the user snaps the slider to a + * position. */ + onRelease = () => { + let cb = this.props.onChange; + if (cb) { cb(this.name, [this.lo, this.hi]); } + this.setState({ sliding: false }); + } + + /** Retrieves the pair of hi/lo values from the remote end (bot). + * Returns [number, number] if bot is online running the farmware. + * Returns undefined otherwise. + */ + get remoteValues() { + console.error(`FIX THIS!`); + return []; + } + + /** The slider's high value */ + get hi() { + let { hi } = this.state; + if (this.state.sliding) { + return hi || 1; + } else { + return this.remoteValues[1] || DEFAULTS[this.name].hi || 0; + } + } + + /** The slider's low value */ + get lo() { + let { lo } = this.state; + if (this.state.sliding) { + return lo || 1; + } else { + return this.remoteValues[1] || DEFAULTS[this.name].lo || 0; + } + } + + render() { + return ; + } +} diff --git a/frontend/src/images/image_flipper.tsx b/frontend/src/images/image_flipper.tsx new file mode 100644 index 000000000..6a1563e29 --- /dev/null +++ b/frontend/src/images/image_flipper.tsx @@ -0,0 +1,123 @@ +import { ImageFlipperProps, ImageFlipperState } from "./interfaces"; +import * as React from "react"; +import { safeStringFetch } from "../util"; +import { t } from "i18next"; +import * as moment from "moment"; + +export const PLACEHOLDER_FARMBOT = "/placeholder_farmbot.jpg"; + +export class ImageFlipper + extends React.Component> { + + state: ImageFlipperState = { isLoaded: false }; + + imageJSX = () => { + if (this.props.images.length > 0) { + let i = this.props.currentImage || this.props.images[0]; + let url: string; + url = (i.body.attachment_processed_at) ? + i.body.attachment_url : PLACEHOLDER_FARMBOT; + return
+ {!this.state.isLoaded && ( +
+

{t(`Image loading (try refreshing)`)}

+ +
)} + this.setState({ isLoaded: true })} + className={`image-flipper-image is-loaded-${this.state.isLoaded}`} + src={url} /> +
; + } else { + return
+

{t(`You haven't yet taken any photos with your FarmBot. + Once you do, they will show up here.`)}

+ +
; + } + } + + metaDatas() { + let i = this.props.currentImage; + if (i) { + let { meta } = i.body; + return Object.keys(meta).sort().map(function (key, index) { + return ; + }); + } else { + return ; + } + } + + go = (increment: -1 | 1) => () => { + let { images, currentImage } = this.props; + let uuids = images.map(x => x.uuid); + let currentIndex = currentImage ? uuids.indexOf(currentImage.uuid) : 0; + let nextIndex = currentIndex + increment; + let tooHigh = nextIndex > (uuids.length - 1); + let tooLow = nextIndex < 0; + if (!tooHigh && !tooLow) { this.props.onFlip(uuids[nextIndex]); } + } + + render() { + let image = this.imageJSX(); + let i = this.props.currentImage; + return
+
+
+
+ {image} + + +
+
+
+
+ {/** Separated from for stylistic purposes. */} + {i ? +
+ + + {moment(i.body.created_at).format("MMMM Do, YYYY h:mma")} + +
+ : ""} +
+ {this.metaDatas()} +
+
+
; + } +} + +interface MetaInfoProps { + /** Default conversion is `attr_name ==> Attr Name`. + * Setting a label property will over ride it to a differrent value. + */ + label?: string; + attr: string; + obj: any; /** Really, it's OK here! See safeStringFetch */ +} + +function MetaInfo({ obj, attr, label }: MetaInfoProps) { + let top = label || _.startCase(attr.split("_").join()); + let bottom = safeStringFetch(obj, attr); + return
+ + {bottom || "unknown"} +
; +} diff --git a/frontend/src/images/index.ts b/frontend/src/images/index.ts new file mode 100644 index 000000000..694188873 --- /dev/null +++ b/frontend/src/images/index.ts @@ -0,0 +1,2 @@ +export * from "./interfaces"; +export * from "./image_flipper"; diff --git a/frontend/src/images/interfaces.ts b/frontend/src/images/interfaces.ts new file mode 100644 index 000000000..42a2f7ba4 --- /dev/null +++ b/frontend/src/images/interfaces.ts @@ -0,0 +1,59 @@ +import { TaggedImage } from "../resources/tagged_resources"; +import { WD_ENV } from "./weed_detector/remote_env/interfaces"; + +export interface Image { + id: number; + device_id: number; + attachment_processed_at: string | undefined; + updated_at: string; + created_at: string; + attachment_url: string; + meta: { + x: number | undefined; + y: number | undefined; + z: number | undefined; + }; +} + +/** Hue, Saturation, Value */ +export type HSV = "H" | "S" | "V"; + +/** A simple range object. */ +export interface HiLo { + hi: number; + lo: number; +} + +export interface DetectorState { + isEditing: boolean; + deletionProgress: string; + settingsMenuOpen: boolean; + /** Defined only if the bot is online AND its been setup */ + remoteFarmwareSettings: Partial; +} + +export interface FarmbotPickerProps { + h: [number, number]; + s: [number, number]; + v: [number, number]; +} + +export interface EnvSliderProps { + name: HSV; + env: Partial; + onChange?: (key: HSV, val: [number, number]) => void; +} + +export interface EnvSliderState extends Partial { + sliding: boolean; +} + +export interface ImageFlipperProps { + onFlip(uuid: string | undefined): void; + images: TaggedImage[]; + currentImage: TaggedImage | undefined; +} + +export interface ImageFlipperState { + isLoaded: boolean; +} diff --git a/frontend/src/images/weed_detector/__tests__/actions_tests.ts b/frontend/src/images/weed_detector/__tests__/actions_tests.ts new file mode 100644 index 000000000..6981c03c2 --- /dev/null +++ b/frontend/src/images/weed_detector/__tests__/actions_tests.ts @@ -0,0 +1,34 @@ +jest.mock("../../../device", () => { + return { + devices: { + current: { + setUserEnv: jest.fn() + } + } + }; +}) +import { devices } from "../../../device"; +import { translateImageWorkspaceAndSave } from "../actions"; + +describe("actions", () => { + it("Saves environment variables", () => { + /** This test is just here to make sure that envSave() is actually + * triggering side effects. */ + jest.clearAllMocks(); + let translator = translateImageWorkspaceAndSave({ + "iteration": "WEED_DETECTOR_iteration", + "morph": "WEED_DETECTOR_morph", + "blur": "WEED_DETECTOR_blur", + "H_HI": "WEED_DETECTOR_H_HI", + "H_LO": "WEED_DETECTOR_H_LO", + "S_HI": "WEED_DETECTOR_S_HI", + "S_LO": "WEED_DETECTOR_S_LO", + "V_HI": "WEED_DETECTOR_V_HI", + "V_LO": "WEED_DETECTOR_V_LO" + }); + translator("H_HI", 45); + expect(devices.current.setUserEnv).toHaveBeenCalledTimes(1); + expect(devices.current.setUserEnv) + .toHaveBeenLastCalledWith({ "WEED_DETECTOR_H_HI": "45" }); + }); +}); diff --git a/frontend/src/images/weed_detector/__tests__/image_workspace_test.tsx b/frontend/src/images/weed_detector/__tests__/image_workspace_test.tsx new file mode 100644 index 000000000..6a6bda36c --- /dev/null +++ b/frontend/src/images/weed_detector/__tests__/image_workspace_test.tsx @@ -0,0 +1,34 @@ +import * as React from "react"; +import { ImageWorkspace } from "../image_workspace"; + +describe("", () => { + function fakeProps() { + return { + onFlip: jest.fn(), + onProcessPhoto: jest.fn(), + onChange: jest.fn(), + currentImage: undefined, + images: [], + iteration: 9, + morph: 9, + blur: 9, + H_LO: 2, + S_LO: 4, + V_LO: 6, + H_HI: 8, + S_HI: 10, + V_HI: 12 + } + } + + it("triggers onChange() event", () => { + jest.clearAllMocks(); + let props = fakeProps(); + let iw = new ImageWorkspace(); + iw.props = props; + iw.onHslChange("H")([4, 5]); + expect(props.onChange).toHaveBeenCalledTimes(2); + expect(props.onChange).toHaveBeenCalledWith("H_HI", 5) + expect(props.onChange).toHaveBeenCalledWith("H_LO", 4); + }); +}); diff --git a/frontend/src/images/weed_detector/__tests__/selector_test.ts b/frontend/src/images/weed_detector/__tests__/selector_test.ts new file mode 100644 index 000000000..8f6427400 --- /dev/null +++ b/frontend/src/images/weed_detector/__tests__/selector_test.ts @@ -0,0 +1,22 @@ +import { translateSpecialValue } from "../selectors"; +import { NULL_CHOICE } from "../../../ui/index"; +import { SPECIAL_VALUES } from "../remote_env/constants"; + +describe("translateSpecialValue()", () => { + it("converts SPECIAL_VALUES to DropDownItems", () => { + let result = translateSpecialValue(SPECIAL_VALUES.X); + expect(result.label).toEqual("X"); + expect(result.value).toEqual(SPECIAL_VALUES.X); + }); + + it("converts all others to NULL_CHOICE", () => { + let result = translateSpecialValue(999); + expect(result).toEqual(NULL_CHOICE); + }); +}); + +describe("getDropdownSelection", () => { + it("selects SPECIAL_VALUES", () => { + + }); +}); diff --git a/frontend/src/images/weed_detector/actions.ts b/frontend/src/images/weed_detector/actions.ts new file mode 100644 index 000000000..1a9d42a3b --- /dev/null +++ b/frontend/src/images/weed_detector/actions.ts @@ -0,0 +1,11 @@ +import { WDENVKey } from "./remote_env/interfaces"; +import { NumericValues } from "./image_workspace"; +import { envSave } from "./remote_env/actions"; +type Key = keyof NumericValues; +type Translation = Record; + +export let translateImageWorkspaceAndSave = (map: Translation) => { + return (key: Key, value: number) => { + envSave(map[key], value); + }; +} diff --git a/frontend/src/images/weed_detector/config.tsx b/frontend/src/images/weed_detector/config.tsx new file mode 100644 index 000000000..5364f8165 --- /dev/null +++ b/frontend/src/images/weed_detector/config.tsx @@ -0,0 +1,110 @@ +import * as React from "react"; +import { t } from "i18next"; +import { DropDownItem } from "../../ui/fb_select"; +import { Row, Col, NULL_CHOICE } from "../../ui/index"; +import { FBSelect } from "../../ui/new_fb_select"; +import { SettingsMenuProps } from "./interfaces"; +import * as _ from "lodash"; +import { BlurableInput } from "../../ui/blurable_input"; +import { SPECIAL_VALUE_DDI, CALIBRATION_DROPDOWNS, ORIGIN_DROPDOWNS } from "./constants"; +import { WD_ENV } from "./remote_env/interfaces"; +import { envGet } from "./remote_env/selectors"; +import { SPECIAL_VALUES } from "./remote_env/constants"; + +export function WeedDetectorConfig(props: SettingsMenuProps) { + let NumberBox = ({ conf, label }: { + conf: keyof WD_ENV; + label: string; + }) => { + return
+ + props.onChange(conf, parseInt(e.currentTarget.value, 10))} + placeholder={label} /> +
+ }; + + let setDDI = (k: keyof WD_ENV) => (d: DropDownItem) => { + if (_.isNumber(d.value)) { + props.onChange(k, d.value); + } else { + throw new Error("Weed detector got a non-numeric value"); + } + } + + let find = (needle: keyof WD_ENV): DropDownItem => { + let wow = envGet(needle, props.values); + let ok = SPECIAL_VALUE_DDI[wow]; + return ok || NULL_CHOICE; + } + + return
+ +
+ props.onChange("CAMERA_CALIBRATION_invert_hue_selection", + e.currentTarget.checked ? + SPECIAL_VALUES.TRUE : SPECIAL_VALUES.FALSE)} + /> +
+ + + + + + + + + + + + + + + + + + + + + +
; +}; diff --git a/frontend/src/images/weed_detector/constants.ts b/frontend/src/images/weed_detector/constants.ts new file mode 100644 index 000000000..3d8884acf --- /dev/null +++ b/frontend/src/images/weed_detector/constants.ts @@ -0,0 +1,42 @@ +import { DropDownItem } from "../../ui/index"; +import { SPECIAL_VALUES } from "./remote_env/constants"; + +/** Mapping of SPECIAL_VALUE numeric codes into corresponding drop down items. */ +export const SPECIAL_VALUE_DDI = { + [SPECIAL_VALUES.X]: { + label: "X", + value: SPECIAL_VALUES.X + }, + [SPECIAL_VALUES.Y]: { + label: "Y", + value: SPECIAL_VALUES.Y + }, + [SPECIAL_VALUES.TOP_LEFT]: { + label: "Top Left", + value: SPECIAL_VALUES.TOP_LEFT + }, + [SPECIAL_VALUES.TOP_RIGHT]: { + label: "Top Right", + value: SPECIAL_VALUES.TOP_RIGHT + }, + [SPECIAL_VALUES.BOTTOM_LEFT]: { + label: "Bottom Left", + value: SPECIAL_VALUES.BOTTOM_LEFT + }, + [SPECIAL_VALUES.BOTTOM_RIGHT]: { + label: "Bottom Right", + value: SPECIAL_VALUES.BOTTOM_RIGHT + }, +} + +export const CALIBRATION_DROPDOWNS: DropDownItem[] = [ + SPECIAL_VALUE_DDI[SPECIAL_VALUES.X], + SPECIAL_VALUE_DDI[SPECIAL_VALUES.Y] +]; + +export const ORIGIN_DROPDOWNS: DropDownItem[] = [ + SPECIAL_VALUE_DDI[SPECIAL_VALUES.TOP_LEFT], + SPECIAL_VALUE_DDI[SPECIAL_VALUES.TOP_RIGHT], + SPECIAL_VALUE_DDI[SPECIAL_VALUES.BOTTOM_LEFT], + SPECIAL_VALUE_DDI[SPECIAL_VALUES.BOTTOM_RIGHT], +]; diff --git a/frontend/src/images/weed_detector/image_workspace.tsx b/frontend/src/images/weed_detector/image_workspace.tsx new file mode 100644 index 000000000..de68a8a40 --- /dev/null +++ b/frontend/src/images/weed_detector/image_workspace.tsx @@ -0,0 +1,161 @@ +import * as React from "react"; +import { FarmbotColorPicker } from "../farmbot_picker"; +import { BlurableInput } from "../../ui/index"; +import { ImageFlipper } from "../image_flipper"; +import { HSV } from "../interfaces"; +import { WeedDetectorSlider } from "./slider"; +import { TaggedImage } from "../../resources/tagged_resources"; +import { t } from "i18next"; + +const RANGES = { + H: { LOWEST: 0, HIGHEST: 179 }, + S: { LOWEST: 0, HIGHEST: 255 }, + V: { LOWEST: 0, HIGHEST: 255 }, + BLUR: { LOWEST: 0, HIGHEST: 100 }, + MORPH: { LOWEST: 0, HIGHEST: 100 }, + ITERATION: { LOWEST: 0, HIGHEST: 100 }, +}; + +/** Number values that the panel deals with. */ +export interface NumericValues { + iteration: number; + morph: number; + blur: number; + H_LO: number; + H_HI: number; + S_LO: number; + S_HI: number; + V_LO: number; + V_HI: number; +} + +type NumericKeyName = keyof NumericValues; + +interface Props extends NumericValues { + onFlip(uuid: string | undefined): void; + onProcessPhoto(image_id: number): void; + currentImage: TaggedImage | undefined; + images: TaggedImage[]; + onChange(key: NumericKeyName, value: number): void; +} + +/** Mapping of HSV values to FBOS Env variables. */ +let CHANGE_MAP: Record = { + H: ["H_LO", "H_HI"], + S: ["S_LO", "S_HI"], + V: ["V_LO", "V_HI"] +}; + +export class ImageWorkspace extends React.Component { + /** Generates a function to handle changes to blur/morph/iteration. */ + numericChange = (key: NumericKeyName) => + (e: React.SyntheticEvent) => { + this.props.onChange(key, parseInt(e.currentTarget.value, 10) || 0); + }; + + maybeProcessPhoto = () => { + let img = this.props.currentImage || this.props.images[0]; + if (img && img.body.id) { + this.props.onProcessPhoto(img.body.id); + } + }; + + /** This will trigger onChange callback twice. Once for (H|S|L)_HI and again + * for (H|S|L)_LO */ + onHslChange = (key: keyof typeof CHANGE_MAP) => + (values: [number, number]) => { + let keys = CHANGE_MAP[key]; + [0, 1].map(i => this.props.onChange(keys[i], values[i])); + }; + + render() { + let { H_LO, H_HI, S_LO, S_HI, V_LO, V_HI } = this.props; + + return
+
+
+

+ {t("Color Range")} +

+ + + + + + +
+
+ +
+
+
+
+

+ {t("Processing Parameters")} +

+
+ +
+ + +
+ +
+ + +
+
+ + +
+
+ {/** CHRIS HELP!!! */} + + +
; + } +} diff --git a/frontend/src/images/weed_detector/index.tsx b/frontend/src/images/weed_detector/index.tsx new file mode 100644 index 000000000..9e54756f0 --- /dev/null +++ b/frontend/src/images/weed_detector/index.tsx @@ -0,0 +1,105 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { Pair } from "farmbot"; +import { DetectorState } from "../interfaces"; +import { TitleBar } from "./title"; +import { devices } from "../../device"; +import { Row, Col, Widget } from "../../ui/index"; +import { t } from "i18next"; +import { resetWeedDetection, selectImage, detectWeeds } from "../actions"; +import { Progress } from "../../util"; +import { HSV } from "../index"; +import { FarmwareProps } from "../../devices/interfaces"; +import { mapStateToProps } from "../../farmware/state_to_props"; +import { ToolTips } from "../../constants"; +import { ImageWorkspace } from "./image_workspace"; +import { WD_ENV, WDENVKey as ENVKey, WDENVKey } from "./remote_env/interfaces"; +import { envGet } from "./remote_env/selectors"; +import { envSave } from "./remote_env/actions"; +import { translateImageWorkspaceAndSave } from "./actions"; + +@connect(mapStateToProps) +export class WeedDetector + extends React.Component> { + constructor() { + super(); + this.state = { remoteFarmwareSettings: {} }; + } + + clearWeeds = () => { + let progress = (p: Readonly) => { + let percentage = `${Math.round((p.completed / p.total) * 100)} %`; + this.setState({ deletionProgress: p.isDone ? "" : percentage }); + }; + this.props.dispatch(resetWeedDetection(progress)); + this.setState({ deletionProgress: "Deleting..." }); + } + + /** Mapping of HSV values to FBOS Env variables. */ + CHANGE_MAP: Record = { + H: ["CAMERA_CALIBRATION_H_LO", "CAMERA_CALIBRATION_H_HI"], + S: ["CAMERA_CALIBRATION_S_LO", "CAMERA_CALIBRATION_S_HI"], + V: ["CAMERA_CALIBRATION_V_LO", "CAMERA_CALIBRATION_V_LO"] + } + + test = () => { + let settings = this.props.env; + let pairs = Object + .keys(settings) + .map(function (value: keyof typeof settings, index) { + let label = JSON.stringify(settings[value]) || "null"; + return { kind: "pair", args: { value, label } }; + }); + devices.current.execScript("plant-detection", pairs); + } + + /** Maps props to weed detector ENV vars. */ + translateValueAndSave = translateImageWorkspaceAndSave({ + "iteration": "WEED_DETECTOR_iteration", + "morph": "WEED_DETECTOR_morph", + "blur": "WEED_DETECTOR_blur", + "H_HI": "WEED_DETECTOR_H_HI", + "H_LO": "WEED_DETECTOR_H_LO", + "S_HI": "WEED_DETECTOR_S_HI", + "S_LO": "WEED_DETECTOR_S_LO", + "V_HI": "WEED_DETECTOR_V_HI", + "V_LO": "WEED_DETECTOR_V_LO" + }); + + render() { + return + + + { throw new Error("NEVER @@") }} + onTest={this.test} + title={"Weed Detector"} + help={t(ToolTips.WEED_DETECTOR)} + env={this.props.env} + /> + + + { this.props.dispatch(detectWeeds(id)); }} + onFlip={(uuid) => this.props.dispatch(selectImage(uuid))} + currentImage={this.props.currentImage} + images={this.props.images} + onChange={this.translateValueAndSave} + iteration={envGet("WEED_DETECTOR_iteration", this.props.env)} + morph={envGet("WEED_DETECTOR_morph", this.props.env)} + blur={envGet("WEED_DETECTOR_blur", this.props.env)} + H_LO={envGet("WEED_DETECTOR_H_LO", this.props.env)} + H_HI={envGet("WEED_DETECTOR_H_HI", this.props.env)} + S_LO={envGet("WEED_DETECTOR_S_LO", this.props.env)} + S_HI={envGet("WEED_DETECTOR_S_HI", this.props.env)} + V_LO={envGet("WEED_DETECTOR_V_LO", this.props.env)} + V_HI={envGet("WEED_DETECTOR_V_HI", this.props.env)} /> + + + + + ; + } +} diff --git a/frontend/src/images/weed_detector/interfaces.ts b/frontend/src/images/weed_detector/interfaces.ts new file mode 100644 index 000000000..8a9216b7f --- /dev/null +++ b/frontend/src/images/weed_detector/interfaces.ts @@ -0,0 +1,6 @@ +import { WD_ENV } from "./remote_env/interfaces"; + +export interface SettingsMenuProps { + values: Partial; + onChange(key: keyof WD_ENV, value: number): void; +} diff --git a/frontend/src/images/weed_detector/remote_env/__tests__/actions_test.ts b/frontend/src/images/weed_detector/remote_env/__tests__/actions_test.ts new file mode 100644 index 000000000..14110b4a8 --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/__tests__/actions_test.ts @@ -0,0 +1,23 @@ +jest.mock("../../../../device", () => { + return { + devices: { + current: { + setUserEnv: jest.fn() + } + } + }; +}) +import { envSave } from "../actions"; +import { devices } from "../../../../device"; + +describe("actions", () => { + it("Saves environment variables", () => { + /** This test is just here to make sure that envSave() is actually + * triggering side effects. */ + jest.clearAllMocks(); + envSave("CAMERA_CALIBRATION_blur", 24); + expect(devices.current.setUserEnv).toHaveBeenCalledTimes(1); + expect(devices.current.setUserEnv) + .toHaveBeenLastCalledWith({ "CAMERA_CALIBRATION_blur": "24" }); + }); +}); diff --git a/frontend/src/images/weed_detector/remote_env/__tests__/constants_test.ts b/frontend/src/images/weed_detector/remote_env/__tests__/constants_test.ts new file mode 100644 index 000000000..ee932c631 --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/__tests__/constants_test.ts @@ -0,0 +1,30 @@ +import { DEFAULT_FORMATTER } from "../constants"; + +describe("DEFAULT_FORMATTER", () => { + it("crashes on bad inputs", () => { + expect(() => { + DEFAULT_FORMATTER.parse("CAMERA_CALIBRATION_H_HI", "_XYZ-"); + }).toThrow(); + }); + + it("crashes on data types other than string,num,bool", () => { + expect(() => { + DEFAULT_FORMATTER.parse("CAMERA_CALIBRATION_H_HI", JSON.stringify({})); + }).toThrow(); + }); + + it("parses OK inputs (number)", () => { + let result = DEFAULT_FORMATTER.parse("CAMERA_CALIBRATION_blur", "23"); + expect(result).toEqual(23) + }); + + it("parses OK inputs (special)", () => { + let result = DEFAULT_FORMATTER.parse("CAMERA_CALIBRATION_morph", "true"); + expect(result).toEqual(1); + }); + + it("formats outputs", () => { + let result = DEFAULT_FORMATTER.format("CAMERA_CALIBRATION_coord_scale", 12); + expect(result).toEqual(12); + }); +}); diff --git a/frontend/src/images/weed_detector/remote_env/__tests__/translators_test.ts b/frontend/src/images/weed_detector/remote_env/__tests__/translators_test.ts new file mode 100644 index 000000000..2a712b981 --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/__tests__/translators_test.ts @@ -0,0 +1,82 @@ +import { formatEnvKey, parseEnvKey } from "../translators"; +import { SPECIAL_VALUES, getSpecialValue } from "../constants"; +import { WD_ENV, WDENVKey } from "../interfaces"; +import { getDropdownSelection } from "../../selectors"; +import { prepopulateEnv } from "../selectors"; + +describe("getSpecialValue()", () => { + it("translates values", () => { + expect(getSpecialValue(JSON.stringify("TRUE"))) + .toEqual(SPECIAL_VALUES.TRUE); + + expect(getSpecialValue(JSON.stringify("FALSE"))) + .toEqual(SPECIAL_VALUES.FALSE); + + expect(getSpecialValue(JSON.stringify("Bottom_LEft"))) + .toEqual(SPECIAL_VALUES.BOTTOM_LEFT); + + expect(getSpecialValue(JSON.stringify("ToP_LeFT"))) + .toEqual(SPECIAL_VALUES.TOP_LEFT); + }); + + it("crashes on malformed inputs", () => { + expect(() => { + getSpecialValue("FOo_bar!!") + }).toThrow(); + }); +}); + +describe("formatEnvKey()", () => { + + it("translates the things", () => { + [ + { + k: "CAMERA_CALIBRATION_invert_hue_selection", + v: SPECIAL_VALUES.TRUE, + r: "TRUE" + }, + { + k: "CAMERA_CALIBRATION_invert_hue_selection", + v: SPECIAL_VALUES.FALSE, + r: "FALSE" + }, + { + k: "CAMERA_CALIBRATION_calibration_along_axis", + v: SPECIAL_VALUES.X, + r: "X" + }, + { + k: "CAMERA_CALIBRATION_calibration_along_axis", + v: SPECIAL_VALUES.Y, + r: "Y" + }, + { + k: "CAMERA_CALIBRATION_image_bot_origin_location", + v: SPECIAL_VALUES.TOP_LEFT, + r: "TOP_LEFT" + } + ].map(t => { + expect(formatEnvKey(t.k as WDENVKey, t.v)).toEqual(t.r); + }); + }); +}); + +describe("parseEnvKey()", () => { + it("makes stuff a number again", () => { + let val = "\"Y\""; + let r = parseEnvKey("CAMERA_CALIBRATION_calibration_along_axis", val); + expect(r).toEqual(SPECIAL_VALUES.Y); + }); +}); + +describe("getDropdownSelection()", () => { + it("unpacks special string values", () => { + let key: WDENVKey = "CAMERA_CALIBRATION_calibration_along_axis"; + let stubs = { [key]: "\"Y\"" }; + let fakeEnv = prepopulateEnv(stubs); + expect(fakeEnv[key]).toEqual(SPECIAL_VALUES.Y); + let finder = getDropdownSelection(fakeEnv); + let result = finder(key); + expect(result.value).toEqual(SPECIAL_VALUES.Y); + }); +}); diff --git a/frontend/src/images/weed_detector/remote_env/actions.ts b/frontend/src/images/weed_detector/remote_env/actions.ts new file mode 100644 index 000000000..e47a7184b --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/actions.ts @@ -0,0 +1,10 @@ +import { devices } from "../../../device"; +import { WDENVKey } from "./interfaces"; +import { formatEnvKey } from "./translators"; + +/** Send a number to FBOS for storage on the device. */ +export function envSave(key: WDENVKey, value: number) { + devices + .current + .setUserEnv({ [key]: JSON.stringify(formatEnvKey(key, value)) }); +} diff --git a/frontend/src/images/weed_detector/remote_env/constants.ts b/frontend/src/images/weed_detector/remote_env/constants.ts new file mode 100644 index 000000000..ddde92323 --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/constants.ts @@ -0,0 +1,134 @@ +import { box } from "boxed_value"; +import * as _ from "lodash"; +import { WDENVKey, WD_ENV, Translation, FormatTranslationMap } from "./interfaces"; + +/** I would rather not deal with all the weird edge cases that come with + * supporting strings and numbers right now. It adds too many edge cases for the + * FE to validate against. Example: Needing to conditionally determine if an ENV + * key is string vs. number vs. bool. Using only numbers (and translating values + * when transmitting) allows us to minimize the use of such conditionals. + * When we need to support text that users will read, I can re-visit this. */ +export enum SPECIAL_VALUES { + FALSE = 0, + TRUE = 1, + TOP_LEFT = 2, + TOP_RIGHT = 3, + BOTTOM_LEFT = 4, + BOTTOM_RIGHT = 5, + X = 6, + Y = 7 +} + +/** The runtime equivalent for WeedDetectorENVKey. + * Good for iterating and whatnot. */ +export const EVERY_KEY: WDENVKey[] = [ + "CAMERA_CALIBRATION_blur", + "CAMERA_CALIBRATION_calibration_along_axis", + "CAMERA_CALIBRATION_calibration_object_separation", + "CAMERA_CALIBRATION_camera_offset_x", + "CAMERA_CALIBRATION_camera_offset_y", + "CAMERA_CALIBRATION_coord_scale", + "CAMERA_CALIBRATION_H_HI", + "CAMERA_CALIBRATION_H_LO", + "CAMERA_CALIBRATION_image_bot_origin_location", + "CAMERA_CALIBRATION_invert_hue_selection", + "CAMERA_CALIBRATION_iteration", + "CAMERA_CALIBRATION_morph", + "CAMERA_CALIBRATION_S_HI", + "CAMERA_CALIBRATION_S_LO", + "CAMERA_CALIBRATION_total_rotation_angle", + "CAMERA_CALIBRATION_V_HI", + "CAMERA_CALIBRATION_V_LO", + "WEED_DETECTOR_blur", + "WEED_DETECTOR_H_HI", + "WEED_DETECTOR_H_LO", + "WEED_DETECTOR_iteration", + "WEED_DETECTOR_morph", + "WEED_DETECTOR_S_HI", + "WEED_DETECTOR_S_LO", + "WEED_DETECTOR_V_HI", + "WEED_DETECTOR_V_LO" +]; + +/** Sometimes, ENV var values are not available but rendering must still be + * performed. This map provides a set of defaults for every ENV var. */ +export const DEFAULTS: WD_ENV = { + CAMERA_CALIBRATION_calibration_along_axis: SPECIAL_VALUES.X, + CAMERA_CALIBRATION_image_bot_origin_location: SPECIAL_VALUES.BOTTOM_LEFT, + CAMERA_CALIBRATION_invert_hue_selection: SPECIAL_VALUES.FALSE, + CAMERA_CALIBRATION_blur: 15, + CAMERA_CALIBRATION_calibration_object_separation: 0, + CAMERA_CALIBRATION_camera_offset_x: 0, + CAMERA_CALIBRATION_camera_offset_y: 0, + CAMERA_CALIBRATION_coord_scale: 0, + CAMERA_CALIBRATION_H_HI: 90, + CAMERA_CALIBRATION_H_LO: 30, + CAMERA_CALIBRATION_iteration: 4, + CAMERA_CALIBRATION_morph: 6, + CAMERA_CALIBRATION_S_HI: 255, + CAMERA_CALIBRATION_S_LO: 50, + CAMERA_CALIBRATION_total_rotation_angle: 0, + CAMERA_CALIBRATION_V_HI: 255, + CAMERA_CALIBRATION_V_LO: 50, + WEED_DETECTOR_blur: 15, + WEED_DETECTOR_H_HI: 90, + WEED_DETECTOR_H_LO: 30, + WEED_DETECTOR_iteration: 4, + WEED_DETECTOR_morph: 6, + WEED_DETECTOR_S_HI: 255, + WEED_DETECTOR_S_LO: 50, + WEED_DETECTOR_V_HI: 255, + WEED_DETECTOR_V_LO: 50, +}; + +export const DEFAULT_FORMATTER: Translation = { + format: (key, val): number | string => { + switch (key) { + case "CAMERA_CALIBRATION_calibration_along_axis": + case "CAMERA_CALIBRATION_image_bot_origin_location": + case "CAMERA_CALIBRATION_invert_hue_selection": + return ("" + (SPECIAL_VALUES[val] || val)); + default: + return val; + } + }, + parse: (key, val) => { + try { + const b = box(JSON.parse(val)); + switch (b.kind) { + case "number": + return b.value; + case "boolean": + case "string": + return getSpecialValue(val); + default: + throw new Error("BAD DATA TYPE"); + } + + } catch (error) { + throw new Error(`An input from FarmWare caused a crash. + This is the value we got: ${val} + This is the error: ${error} + `); + } + } +}; +/** If we hit any "special cases", we can register them here. */ +export const TRANSLATORS: FormatTranslationMap = {}; +/** We only expect certain string values from the weed detector. + * Tokens like "BOTTOM_RIGHT" or "X" all have a numeric counterpart. + * This function converts such strings to their numeric equivalent. + * If a matching numeric code is not found, throws an exception. + */ +export function getSpecialValue(key: string | number): + SPECIAL_VALUES { + + let k = _.snakeCase(("" + key).toUpperCase()).toUpperCase(); + let v = _.get(SPECIAL_VALUES, k, NaN); + + if (_.isUndefined(v) || _.isNaN(v)) { + throw new Error("Not a SPECIAL_VALUE: " + k); + } else { + return v; + } +} diff --git a/frontend/src/images/weed_detector/remote_env/interfaces.ts b/frontend/src/images/weed_detector/remote_env/interfaces.ts new file mode 100644 index 000000000..3dbdb0f6f --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/interfaces.ts @@ -0,0 +1,55 @@ +/** Name of every env var that the weed detector farmware needs. */ +import { Primitive } from "../../../util"; + +/** Weed detector ENV key. */ +export type WDENVKey = + | "CAMERA_CALIBRATION_blur" + | "CAMERA_CALIBRATION_calibration_along_axis" + | "CAMERA_CALIBRATION_calibration_object_separation" + | "CAMERA_CALIBRATION_camera_offset_x" + | "CAMERA_CALIBRATION_camera_offset_y" + | "CAMERA_CALIBRATION_coord_scale" + | "CAMERA_CALIBRATION_H_HI" + | "CAMERA_CALIBRATION_H_LO" + | "CAMERA_CALIBRATION_image_bot_origin_location" + | "CAMERA_CALIBRATION_invert_hue_selection" + | "CAMERA_CALIBRATION_iteration" + | "CAMERA_CALIBRATION_morph" + | "CAMERA_CALIBRATION_S_HI" + | "CAMERA_CALIBRATION_S_LO" + | "CAMERA_CALIBRATION_total_rotation_angle" + | "CAMERA_CALIBRATION_V_HI" + | "CAMERA_CALIBRATION_V_LO" + | "WEED_DETECTOR_blur" + | "WEED_DETECTOR_H_HI" + | "WEED_DETECTOR_H_LO" + | "WEED_DETECTOR_iteration" + | "WEED_DETECTOR_morph" + | "WEED_DETECTOR_S_HI" + | "WEED_DETECTOR_S_LO" + | "WEED_DETECTOR_V_HI" + | "WEED_DETECTOR_V_LO"; + +/** The entirety of ENV keys that the weed detector app needs to function. + * Keys like HSV and whatnot. */ +export type WD_ENV = Record; + +/** Takes an internally formatted ENV var and formats it in a way that is useful + * for the weed detector. Eg, convert 0 to "true". */ +export type FormatterFn = (key: WDENVKey, val: number) => Primitive; + +/** Takes a value from the outside world and parses it for use within this app. + * Example: Turn "TOP_RIGHT" into the number 3. */ +export type ParserFn = (key: WDENVKey, val: string) => number; + +/** Object that contains two functions for translation of ENV variable keys. */ +export interface Translation { + /** Translate to output. FE => FBOS */ + format: FormatterFn; + /** Translate to input. FBOS => FE */ + parse: ParserFn; +} + +/** List of "special case" ENV vars from the weed detector that require + * extra translation. */ +export type FormatTranslationMap = Partial>; diff --git a/frontend/src/images/weed_detector/remote_env/selectors.ts b/frontend/src/images/weed_detector/remote_env/selectors.ts new file mode 100644 index 000000000..217160f89 --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/selectors.ts @@ -0,0 +1,30 @@ + +import { WDENVKey, WD_ENV } from "./interfaces"; +import { DEFAULTS, EVERY_KEY } from "./constants"; +import { Dictionary } from "farmbot/dist"; +import { defensiveClone, betterParseNum } from "../../../util"; +import * as _ from "lodash"; +import { parseEnvKey } from "./translators"; +/** Given a half formed set of weed detector environment variables, creates a + * fully formed set of environment variables. When a variable is missing, it is + * replaced with a default value. */ +export function prepopulateEnv(env: Dictionary): WD_ENV { + let output = defensiveClone(DEFAULTS); + EVERY_KEY.map(key => { + let initial = env[key]; + let val: string; + if (_.isString(initial)) { + val = initial; + } else { + val = "" + DEFAULTS[key]; + }; + output[key] = parseEnvKey(key, val); + }); + return output; +} + +/** Given a half-formed set of ENV vars, makes a best effort attempt to find + * the corresponding value. When lookup fails, provide a sane default value. */ +export function envGet(key: WDENVKey, env: Partial): number { + return betterParseNum(JSON.stringify(env[key] || ""), DEFAULTS[key]); +} diff --git a/frontend/src/images/weed_detector/remote_env/translators.ts b/frontend/src/images/weed_detector/remote_env/translators.ts new file mode 100644 index 000000000..05335d303 --- /dev/null +++ b/frontend/src/images/weed_detector/remote_env/translators.ts @@ -0,0 +1,15 @@ +import * as _ from "lodash"; +import { TRANSLATORS, DEFAULT_FORMATTER } from "./constants"; +import { WDENVKey } from "./interfaces"; + +/** Translate values before sending to weed detector. FE => FBOS. */ +export function formatEnvKey(key: WDENVKey, value: number) { + return (TRANSLATORS[key] || DEFAULT_FORMATTER).format(key, value); +} + +/** Translate values that came from Weed Detector. FBOS => FE. */ +export function parseEnvKey(key: WDENVKey, value: string) { + return (TRANSLATORS[key] || DEFAULT_FORMATTER) + .parse(key, value); +} + diff --git a/frontend/src/images/weed_detector/selectors.ts b/frontend/src/images/weed_detector/selectors.ts new file mode 100644 index 000000000..5b693bd9a --- /dev/null +++ b/frontend/src/images/weed_detector/selectors.ts @@ -0,0 +1,18 @@ +import { DropDownItem, NULL_CHOICE } from "../../ui/fb_select"; +import { SPECIAL_VALUE_DDI } from "./constants"; +import { WD_ENV } from "./remote_env/interfaces"; +import { envGet } from "./remote_env/selectors"; + +/** Convert values like SPECIAL_VALUES.TRUE to drop down items with friendly + * label/value pairs. */ +export let translateSpecialValue = (input: number): DropDownItem => { + return SPECIAL_VALUE_DDI[input] || NULL_CHOICE; +}; + +/** Generates a lookup function to convert WeedDetector ENV items to + * DropDownItems. Used to display currently selected options within dropdown + * menus. */ +export let getDropdownSelection = (env: Partial) => + (key: keyof WD_ENV): DropDownItem => { + return translateSpecialValue(envGet(key, env)); + }; diff --git a/frontend/src/images/weed_detector/slider.tsx b/frontend/src/images/weed_detector/slider.tsx new file mode 100644 index 000000000..a8f7b59d3 --- /dev/null +++ b/frontend/src/images/weed_detector/slider.tsx @@ -0,0 +1,28 @@ +import * as React from "react"; +import { RangeSlider } from "@blueprintjs/core/dist/components/slider/rangeSlider"; + +interface SliderProps { + onChange(value: [number, number]): void; + onRelease(value: [number, number]): void; + highest: number; + lowest: number; + lowValue: number; + highValue: number; +} + +export function WeedDetectorSlider({ + onChange, + highest, + lowest, + lowValue, + highValue, + onRelease +}: SliderProps) { + return ; +} diff --git a/frontend/src/images/weed_detector/title.tsx b/frontend/src/images/weed_detector/title.tsx new file mode 100644 index 000000000..219a058a0 --- /dev/null +++ b/frontend/src/images/weed_detector/title.tsx @@ -0,0 +1,67 @@ +import * as React from "react"; +import { t } from "i18next"; +import { WeedDetectorConfig } from "./config"; +import { WidgetHeader } from "../../ui/index"; +import { WD_ENV } from "./remote_env/interfaces"; +import { envSave } from "./remote_env/actions"; +import { Popover } from "@blueprintjs/core"; + +interface Props { + onSave?(): void; + onTest?(): void; + onDeletionClick?(): void; + onCalibrate?(): void; + deletionProgress?: string | undefined; + title: string; + help: string; + env: Partial; +} + +export function TitleBar({ + onSave, + onTest, + deletionProgress, + onDeletionClick, + onCalibrate, + env, + title, + help +}: Props) { + return + + + + + + + + + ; +} diff --git a/frontend/src/interceptor_support.ts b/frontend/src/interceptor_support.ts new file mode 100644 index 000000000..0bd97149d --- /dev/null +++ b/frontend/src/interceptor_support.ts @@ -0,0 +1,65 @@ +import * as Axios from "axios"; +import { ResourceName, DataChangeType, Dictionary } from "farmbot/dist"; +import { devices } from "./device"; +import { box } from "boxed_value"; + +export type Xhr = Axios.AxiosXHR<{}>; +export let METHOD_MAP: Dictionary = { + "post": "add", + "put": "update", + "patch": "update", + "delete": "remove" +}; +export let METHODS = ["post", "put", "patch", "delete"]; +export let RESOURCES: ResourceName[] = [ + "images", "plants", "regimens", "peripherals", "logs", "sequences", + "farm_events", "tool_slots", "tools", "points", "device"]; + +// PROBLEM: The bot doesn't know if the user has changed any of the data. +// GOOD SOLUTION: Create a push notification system on the API. +// FAST SOLUTION: Ping the bot every time we push "save" or "update". +// Our hope is to eventually move this logic into the API. +export function notifyBotOfChanges(url: string | undefined, action: DataChangeType) { + if (url) { + url.split("/").filter((chunk: ResourceName) => { + return RESOURCES.includes(chunk); + }).map(async function (resource: ResourceName) { + devices.current.dataUpdate(action, { [resource]: inferUpdateId(url) }); + }); + } +} + +/** More nasty hacks until we have time to implement proper API push state + * notifications. */ +function inferUpdateId(url: string) { + try { + let ids = url + .split("/") + .filter(x => !x.includes(",")) // Dont allow batch endpoints to participate. + .map(x => parseInt(x, 10)) + .filter(x => !_.isNaN(x)); + let id: number | undefined = ids[0]; + let isNum = _.isNumber(id); + let onlyOne = ids.length === 1; + return (isNum && onlyOne) ? ("" + id) : "*"; + } catch (error) { // Dont crash- just keep moving along. This is a temp patch. + return "*"; + } +} + +/** The input of an axios error interceptor is an "any" type. + * Sometimes it will be a real Axios error, other times it will not be. + */ +export interface SafeError { + response: { + status: number; + }; +} + +/** Prevents hard-to-find NPEs and type errors inside of interceptors. */ +export function isSafeError(x: SafeError | any): x is SafeError { + return !!( + (box(x).kind === "object") && + (box(x.response).kind === "object") && + (box(x.response.status).kind === "number")); +} diff --git a/frontend/src/interceptors.ts b/frontend/src/interceptors.ts new file mode 100644 index 000000000..fd68fed7f --- /dev/null +++ b/frontend/src/interceptors.ts @@ -0,0 +1,70 @@ +import { t } from "i18next"; +import { error } from "farmbot-toastr"; +import { + Xhr, + METHODS, + notifyBotOfChanges, + METHOD_MAP, + SafeError, + isSafeError +} from "./interceptor_support"; +import { API } from "./api/index"; +import { AuthState } from "./auth/interfaces"; + +export function responseFulfilled(input: Xhr): Xhr { + let method = input.config.method; + if (method && METHODS.includes(method)) { + notifyBotOfChanges(input.config.url, METHOD_MAP[method]); + }; + return input; +} + +export function responseRejected(x: SafeError | undefined) { + + if (x && isSafeError(x)) { + let a = ![451, 401, 422].includes(x.response.status); + let b = x.response.status > 399; + // Openfarm API was sending too many 404's. + let c = !_.get(x, "response.config.url", "").includes("openfarm.cc/"); + + if (a && b && c) { + setTimeout(() => { + // Explicitly throw error so error reporting tool will save it. + let msg = `Bad response: ${x.response.status} ${JSON.stringify(x.response)}`; + throw new Error(msg); + }, 1); + } + switch (x.response.status) { + case 404: + // Log 404's, but don't generate any noise for the user. + break; + case 500: + error(t("Unexpected error occurred, we've been notified of the problem.")); + break; + case 451: + // DONT REFACTOR: I want to use alert() because it's blocking. + alert(t("The terms of service have recently changed. You must " + + "accept the new terms of service to continue using the site.")); + window.location.href = "/tos_update.html"; + break; + } + return Promise.reject(x); + } else { + console.warn("GOT MALFORMED HTTP REJECTION?? This shouldn't happen!"); + return Promise.reject(x); + } +} + +export function requestFulfilled(auth: AuthState) { + return (config: Axios.AxiosXHRConfig<{}>) => { + let req = config.url; + let isAPIRequest = req.includes(API.current.baseUrl); + if (isAPIRequest) { + config.headers = config.headers || {}; + let headers = (config.headers as + { Authorization: string | undefined }); + headers.Authorization = auth.token.encoded || "CANT_FIND_TOKEN"; + } + return config; + }; +} diff --git a/frontend/src/interfaces.ts b/frontend/src/interfaces.ts new file mode 100644 index 000000000..5a3b04e1e --- /dev/null +++ b/frontend/src/interfaces.ts @@ -0,0 +1,109 @@ +import { AuthState } from "./auth/interfaces"; +import { ConfigState } from "./config/interfaces"; +import { BotState } from "./devices/interfaces"; +import { Color as FarmBotJsColor } from "farmbot"; +import { DraggableState } from "./draggable/interfaces"; +import { PeripheralState } from "./controls/peripherals/interfaces"; +import { RestResources } from "./resources/interfaces"; + +/** Regimens and sequences may have a "color" which determines how it looks + in the UI. Only certain colors are valid. */ +export type Color = FarmBotJsColor; + +export interface SelectOptionsParams { + label: string; + value: string | number | undefined; + disabled?: boolean; + field?: string; + type?: string; + x?: number; + y?: number; + z?: number; +} + +export interface Log { + id?: number | undefined; + message: string; + meta: { type: string; }; + channels: string[]; + created_at: number; +} + +interface Location { + /** EX: /app/designer */ + pathname: string; + /** EX: ?id=twowing-silverbell&p1=CropInfo */ + search: string; + hash: string; + // /** ¯\_(ツ)_/¯ */ + // state: void; + /** EX: "PUSH" */ + action: string; + /** EX: jhedoi */ + key: string; + /** URL ?Query=string, converted to JS object. */ + query: { [name: string]: string }; +} + +export interface Everything { + config: ConfigState; + auth: AuthState | undefined; + dispatch: Function; + bot: BotState; + location: Location; + draggable: DraggableState; + peripherals: PeripheralState; + resources: RestResources; + router: { + push(url?: string): void; + }; +} + +/** There were a few cases where we handle errors that are legitimately unknown. + * In those cases, we can use the `UnsafeError` type instead of `any`, just to + * quiet down the linter and to let others know it is inherently unsafe. + */ +export type UnsafeError = any; + +interface BasePoint { + id?: number | undefined; + dirty?: boolean | undefined; + created_at?: string | undefined; + updated_at?: string | undefined; + radius: number; + spread?: number | undefined; + x: number; + y: number; + z: number; + // device_id: number; + pointer_id?: number | undefined; + meta: { [key: string]: (string | undefined) }; + name: string; +} + +export interface PlantPointer extends BasePoint { + openfarm_slug: string; + pointer_type: "Plant"; +} + +export interface ToolSlotPointer extends BasePoint { + tool_id: number | undefined; + pointer_type: "ToolSlot"; +} + +export interface GenericPointer extends BasePoint { + pointer_type: "GenericPointer"; +} + +export type AnyPointer = + | GenericPointer + | ToolSlotPointer + | PlantPointer; + +export type PointerTypeName = AnyPointer["pointer_type"]; + +export const POINTER_NAMES: Readonly[] = [ + "Plant", + "GenericPointer", + "ToolSlot" +]; diff --git a/frontend/src/nav/__tests__/test_nav_links.ts b/frontend/src/nav/__tests__/test_nav_links.ts new file mode 100644 index 000000000..61677bd62 --- /dev/null +++ b/frontend/src/nav/__tests__/test_nav_links.ts @@ -0,0 +1,7 @@ +import * as React from "react"; + +describe("", function () { + it("renders nothing when not given a bot", function () { + let dispatcher = jest.fn(); + let result = render(); + expect(result.hasClass("nav-sync")).toBeFalsy(); + expect(result.html()).toEqual(""); + }); +}); diff --git a/frontend/src/nav/index.tsx b/frontend/src/nav/index.tsx new file mode 100644 index 000000000..d4a06f304 --- /dev/null +++ b/frontend/src/nav/index.tsx @@ -0,0 +1,202 @@ +import * as React from "react"; +import { Link } from "react-router"; +import { DropDownProps, NavBarState, NavBarProps } from "./interfaces"; +import { EStopButton } from "../devices/components/e_stop_btn"; +import { t } from "i18next"; +import { Session } from "../session"; +import { Markdown } from "../ui"; +import * as moment from "moment"; +import { SyncButton } from "./sync_button"; +import { history } from "../history"; +import { updatePageInfo } from "../util"; + +let DropDown = ({ user, onClick }: DropDownProps) => { + // Just checking if user is logged in, otherwise nothing is returned. + if (!user) { + return ; + } else { + // Displaying the user's name in the top right of the screen if available. + let hasName = user && user.body.name; + let fullName = hasName ? `${hasName}` : ""; + let firstName = fullName.split(" ")[0] + " ▾"; + + // The bit shown while hovering over username in top right of screen. + return
+ + {firstName} + +
+ +
+ {t("Frontend")}: + + {process.env.SHORT_REVISION} + + +
+
+
; + } +}; + +// Easier way to keep track of links in the navbar. +let links = [ + { name: "Farm Designer", icon: "leaf", url: "/app/designer" }, + { name: "Controls", icon: "keyboard-o", url: "/app/controls" }, + { name: "Device", icon: "cog", url: "/app/device" }, + { name: "Sequences", icon: "server", url: "/app/sequences" }, + { name: "Regimens", icon: "calendar-check-o", url: "/app/regimens" }, + { name: "Tools", icon: "wrench", url: "/app/tools" }, + { name: "Farmware", icon: "crosshairs", url: "/app/farmware" } +]; + +export class NavBar extends React.Component { + + state: NavBarState = { mobileNavExpanded: false, tickerExpanded: false }; + + toggleMobileNav = () => { + let { mobileNavExpanded } = this.state; + /** Don't let user scroll when nav is open */ + // document.body.classList.toggle("freeze"); + this.setState({ mobileNavExpanded: !mobileNavExpanded }); + } + + toggleTicker = () => { + let { tickerExpanded } = this.state; + this.setState({ tickerExpanded: !tickerExpanded }); + } + + logout = () => Session.clear(true); + + render() { + // Class for toggling the left sliding menu on mobile and tablets. + let mobileMenuClass = this.state.mobileNavExpanded ? "expanded" : ""; + + // Class for toggling the black bar, top of the screen containing logs. + let tickerClass = this.state.tickerExpanded ? "expanded" : ""; + + // The way our app is laid out, we'll pretty much always want this bit. + let pageName = history.getCurrentLocation().pathname.split("/")[2] || ""; + + // Change document meta title on every route change. + updatePageInfo(pageName); + + let { toggleMobileNav, toggleTicker, logout } = this; + let user = this.props.user + return
+ +
; + } +} diff --git a/frontend/src/nav/interfaces.ts b/frontend/src/nav/interfaces.ts new file mode 100644 index 000000000..66e335d47 --- /dev/null +++ b/frontend/src/nav/interfaces.ts @@ -0,0 +1,27 @@ +import { BotState } from "../devices/interfaces"; +import { Log } from "../interfaces"; +import { TaggedUser } from "../resources/tagged_resources"; + +export interface NavButtonProps { + user: TaggedUser | undefined; + dispatch: Function; + bot: BotState; + onClick?: () => void; +} + +export interface DropDownProps { + user: TaggedUser | undefined; + onClick?: () => void; +} + +export interface NavBarState { + mobileNavExpanded?: boolean; + tickerExpanded?: boolean; +} + +export interface NavBarProps { + logs: Log[]; + bot: BotState; + user: TaggedUser | undefined; + dispatch: Function; +} diff --git a/frontend/src/nav/sync_button.tsx b/frontend/src/nav/sync_button.tsx new file mode 100644 index 000000000..16af28c51 --- /dev/null +++ b/frontend/src/nav/sync_button.tsx @@ -0,0 +1,41 @@ +import * as React from "react"; +import { SyncStatus } from "farmbot/dist"; +import { NavButtonProps } from "./interfaces"; +import { sync } from "../devices/actions"; + +const COLOR_MAPPING: Record = { + "synced": "green", + "sync_now": "yellow", + "syncing": "yellow", + "sync_error": "red", + "locked": "red", + "maintenance": "yellow", + "unknown": "red" +}; + +const TEXT_MAPPING: Record = { + "synced": "SYNCED", + "sync_now": "SYNC NOW", + "syncing": "SYNCING", + "sync_error": "SYNC ERROR", + "locked": "LOCKED", + "unknown": "DISCONNECTED", + "maintenance": "MAINTENANCE DOWNTIME" +}; + +export function SyncButton({ user, bot, dispatch }: NavButtonProps) { + if (!user) { + return ; + } + let { sync_status } = bot.hardware.informational_settings; + sync_status = sync_status || "unknown"; + let color = COLOR_MAPPING[sync_status] || "red"; + let text = TEXT_MAPPING[sync_status] || "DISCONNECTED"; + return ; +}; diff --git a/frontend/src/npm_addons.tsx b/frontend/src/npm_addons.tsx new file mode 100644 index 000000000..d2f396cac --- /dev/null +++ b/frontend/src/npm_addons.tsx @@ -0,0 +1,10 @@ +// This module dynamically loads an NPM module of the author's choosing. +// In the case of FarmBot, Inc (the "public servers"), we use this file +// to load non-opensource tools, such as RollBar error reporting. +declare var SHORT_REVISION: string; +// Global variable so that the NPM_ADDON knows the version number of the FE. +SHORT_REVISION = process.env.SHORT_REVISION; + +if (process.env.NPM_ADDON) { + require(process.env.NPM_ADDON); +} diff --git a/frontend/src/open_farm/__tests__/index_test.tsx b/frontend/src/open_farm/__tests__/index_test.tsx new file mode 100644 index 000000000..20dac1d08 --- /dev/null +++ b/frontend/src/open_farm/__tests__/index_test.tsx @@ -0,0 +1,37 @@ +const FAKE_SVG = "Wow"; +jest.mock("axios", function () { + return { + get: function () { + return Promise.resolve({ + data: { + id: 0, + data: { + attributes: { + svg_icon: FAKE_SVG, + slug: "lettuce" + } + } + } + }); + } + } +}) + +import { cachedIcon, DATA_URI, OpenFarmAPI } from "../index"; +describe("cachedIcon()", () => { + it("does an HTTP request if the icon can't be found locally", (done) => { + cachedIcon("lettuce") + .then(function (item) { + expect(item).toContain(DATA_URI); + expect(item).toContain(encodeURIComponent(FAKE_SVG)); + done(); + }) + .catch(() => { + fail(); + }); + }); + + it("has a base URL", () => { + expect(OpenFarmAPI.OFBaseURL).toContain("openfarm.cc"); + }) +}); diff --git a/frontend/src/open_farm/index.ts b/frontend/src/open_farm/index.ts new file mode 100644 index 000000000..db6c27088 --- /dev/null +++ b/frontend/src/open_farm/index.ts @@ -0,0 +1,41 @@ +import * as axios from "axios"; +import { Dictionary } from "farmbot/dist"; +import * as _ from "lodash"; + +const BASE = "https://openfarm.cc/api/v1/crops/"; +export const DATA_URI = "data:image/svg+xml;utf8,"; + +export const DEFAULT_ICON = "/app-resources/img/generic-plant.svg"; + +let cache: Dictionary> = {}; + +export interface OFCropResponse { + id?: undefined; // TODO: Convert this to use Partial instead + data?: { // using `| undefined` all over the place. + attributes: { + svg_icon?: string | undefined; + spread?: number | undefined; + slug: string; + } | undefined; + } | undefined; +} + +export namespace OpenFarmAPI { + export let OFBaseURL = BASE; +} + +/** PROBLEM: You have 100 lettuce plants. You don't want to download an SVG icon + * 100 times. + * SOLUTION: Cache stuff. */ +export function cachedIcon(slug: string): Axios.IPromise { + cache[slug] = cache[slug] || (axios + .get(BASE + slug) + .then(cacheTheIcon(slug), cacheTheIcon(slug))); + return cache[slug] as Axios.IPromise; +} + +let cacheTheIcon = (slug: string) => + (resp: Axios.AxiosXHR) => { + let text = _.get(resp, "data.data.attributes.svg_icon", ""); + return (text) ? DATA_URI + encodeURIComponent(text) : DEFAULT_ICON; + }; diff --git a/frontend/src/password_reset/index.tsx b/frontend/src/password_reset/index.tsx new file mode 100644 index 000000000..63923782b --- /dev/null +++ b/frontend/src/password_reset/index.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; +import { render } from "react-dom"; +import { detectLanguage } from "../i18n"; +import { PasswordReset } from "./password_reset"; +import * as i18next from "i18next"; +import "../css/_index.scss"; +import "../npm_addons"; + +detectLanguage().then((config) => { + i18next.init(config, (err, t) => { + let node = document.createElement("DIV"); + node.id = "root"; + document.body.appendChild(node); + + let reactElem = React.createElement(PasswordReset, {}); + let domElem = document.getElementById("root"); + + if (domElem) { + render(reactElem, domElem); + } else { + throw new Error(t("Add a div with id `root` to the page first.")); + }; + }); +}); diff --git a/frontend/src/password_reset/interfaces.ts b/frontend/src/password_reset/interfaces.ts new file mode 100644 index 000000000..1fdf418a7 --- /dev/null +++ b/frontend/src/password_reset/interfaces.ts @@ -0,0 +1,8 @@ +export interface State { + password?: string; + passwordConfirmation?: string; + serverURL?: string; + serverPort?: string; +} + +export interface Props { }; diff --git a/frontend/src/password_reset/password_reset.tsx b/frontend/src/password_reset/password_reset.tsx new file mode 100644 index 000000000..762a11fbd --- /dev/null +++ b/frontend/src/password_reset/password_reset.tsx @@ -0,0 +1,100 @@ +import * as React from "react"; +import * as axios from "axios"; +import { t } from "i18next"; +import { error as log, init as logInit } from "farmbot-toastr"; +import { prettyPrintApiErrors } from "../util"; +import { API } from "../api"; +import { State, Props } from "./interfaces"; +import { hardRefresh } from "../util"; +hardRefresh() +export class PasswordReset extends React.Component { + constructor() { + super(); + this.state = { + password: "", + passwordConfirmation: "", + serverURL: "", + serverPort: "" + }; + } + + componentDidMount() { + logInit(); + API.setBaseUrl(API.fetchBrowserLocation()); + this.setState({ + serverURL: API.fetchHostName(), + serverPort: API.inferPort() + }); + } + + set = (name: string) => (event: React.FormEvent) => { + let state: { [name: string]: string } = {}; + state[name] = (event.currentTarget).value; + this.setState(state); + }; + + submit(e: React.SyntheticEvent) { + e.preventDefault(); + let { password, passwordConfirmation } = this.state; + let token = window.location.href.split("/").pop(); + axios.put<{}>(API.current.passwordResetPath, { + id: token, + password, + password_confirmation: passwordConfirmation, + }).then(resp => { + window.location.href = "/"; + }).catch(error => { + log(prettyPrintApiErrors(error)); + }); + } + + render() { + return
+

{t("Reset your password")}

+
+
+
+
+
+
+
{t("Reset Password")}
+
+
+
+
+
+
+
+
+ + + + + + +
+
+
+ +
+
+
+
+
+
+
+
+
+
; + } +} diff --git a/frontend/src/redux/generate_reducer.ts b/frontend/src/redux/generate_reducer.ts new file mode 100644 index 000000000..ac8589c43 --- /dev/null +++ b/frontend/src/redux/generate_reducer.ts @@ -0,0 +1,48 @@ +import { ReduxAction } from "./interfaces"; +import { defensiveClone } from "../util"; + +export function generateReducer(initialState: State, + /** For passing state down to children. */ + afterEach?: (s: T, a: ReduxAction) => T) { + /** A function that responds to a particular action from within a + * generated reducer. */ + interface ActionHandler { + (state: State, action: ReduxAction): State; + } + + interface GenericActionHandler { + (state: State, action: ReduxAction): State; + } + + interface ActionHandlerDict { + [actionHandler: string]: ActionHandler; + } + + interface GeneratedReducer extends ActionHandler { + /** Adds action handler for current reducer. */ + add: (name: string, fn: GenericActionHandler) => GeneratedReducer; + // Calms the type checker. + } + + let actionHandlers: ActionHandlerDict = {}; + + let reducer: GeneratedReducer = function (state = initialState, + action: ReduxAction): State { + let NOOP: ActionHandler = (s, a) => s; + afterEach = afterEach || NOOP; + let handler = (actionHandlers[action.type] || NOOP); + let clonedState = defensiveClone(state); + let clonedAction = defensiveClone(action); + let result: State = handler(clonedState, clonedAction); + result = afterEach(defensiveClone(result), action) + return defensiveClone(result); + } as GeneratedReducer; + + reducer.add = function addHandler(name: string, + fn: GenericActionHandler) { + actionHandlers[name] = fn; + return reducer; + }; + + return reducer; +} diff --git a/frontend/src/redux/interfaces.ts b/frontend/src/redux/interfaces.ts new file mode 100644 index 000000000..52b34fc18 --- /dev/null +++ b/frontend/src/redux/interfaces.ts @@ -0,0 +1,20 @@ +import { Everything } from "../interfaces"; +import { Store } from "redux"; + +export type Store = Store; + +export interface ReduxAction { + readonly type: string; + readonly payload: T; +} + +/** The "getState()" function, typically passed in by Redux Thunk Middleware. */ +export type GetState = () => Everything; + +/** A Redux Thunk function. */ +export interface Thunk { + // TODO: CONVERT THIS TO A GENERIC (Thunk) + (dispatch: Function, getState: GetState): any; +} + +export type EnvName = "test" | "production" | "development" | "*"; diff --git a/frontend/src/redux/middlewares.ts b/frontend/src/redux/middlewares.ts new file mode 100644 index 000000000..8cd0571f6 --- /dev/null +++ b/frontend/src/redux/middlewares.ts @@ -0,0 +1,32 @@ +import thunk from "redux-thunk"; +import { applyMiddleware, compose, Middleware } from "redux"; +import { EnvName } from "./interfaces"; + +interface MiddlewareConfig { + fn: Middleware; + env: EnvName; +} + +/** To make it easier to manage all things watching the state tree, + * we keep subscriber functions in this array. */ +export let mwConfig: MiddlewareConfig[] = [ + { + env: "*", + fn: thunk + } + , { + env: "development", + fn: require("redux-immutable-state-invariant")() + } +]; + +export function getMiddleware(env: EnvName) { + let middlewareFns = mwConfig + .filter(function (mwc) { return (mwc.env === env) || (mwc.env === "*"); }) + .map((mwc) => mwc.fn); + let dtCompose = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__; + const composeEnhancers = dtCompose || compose; + let middlewares = applyMiddleware(...middlewareFns); + + return composeEnhancers(middlewares); +} diff --git a/frontend/src/redux/root_reducer.ts b/frontend/src/redux/root_reducer.ts new file mode 100644 index 000000000..f50f36f48 --- /dev/null +++ b/frontend/src/redux/root_reducer.ts @@ -0,0 +1,27 @@ +import { authReducer as auth } from "../auth/reducer"; +import { botReducer as bot } from "../devices/reducer"; +import { configReducer as config } from "../config/reducer"; +import { draggableReducer as draggable } from "../draggable/reducer"; +import { combineReducers } from "redux"; +import { ReduxAction } from "./interfaces"; +import { Session } from "../session"; +import { resourceReducer as resources } from "../resources/reducer" + +export let reducers = combineReducers({ + auth, + bot, + config, + draggable, + resources +}); +/** This is the topmost reducer in the application. If you need to preempt a + * "normal" reducer this is the place to do it */ +export function rootReducer( + /** Sorry for the `any` here. */ + state: {} | any, + action: ReduxAction<{}>) { + if (action.type === "LOGOUT") { + Session.clear(true); + } + return reducers(state, action); +}; diff --git a/frontend/src/redux/store.ts b/frontend/src/redux/store.ts new file mode 100644 index 000000000..45c09e9cc --- /dev/null +++ b/frontend/src/redux/store.ts @@ -0,0 +1,39 @@ +import { createStore } from "redux"; +import { Store } from "./interfaces"; +import { rootReducer } from "./root_reducer"; +import { registerSubscribers } from "./subscribers"; +import { getMiddleware } from "./middlewares"; + +let ENV = process.env.NODE_ENV as string; + +function dev() { + store = createStore(rootReducer, + maybeFetchOldState(), + getMiddleware("development")); + return store; +} + +function prod() { + return createStore(rootReducer, ({} as any), getMiddleware("production")); +} + +export function configureStore(options = {}) { + let store: Store = (ENV === "production" ? prod() : dev()); + // Make store global in in case I need to probe it. + (window as any)["store"] = store; + registerSubscribers(store); + return store; +} + +export let store = configureStore(); + +/** Tries to fetch previous state from `sessionStorage`. + * Returns {} if nothing is found. Used mostly for hot reloading. */ +function maybeFetchOldState() { + try { + return JSON.parse(sessionStorage["lastState"] || "{}"); + } catch (e) { + return {}; + } + +} diff --git a/frontend/src/redux/subscribers.ts b/frontend/src/redux/subscribers.ts new file mode 100644 index 000000000..dac2b05c8 --- /dev/null +++ b/frontend/src/redux/subscribers.ts @@ -0,0 +1,44 @@ +import { Everything } from "../interfaces"; +import { Store } from "./interfaces"; +import { EnvName } from "./interfaces"; +import { all } from "../resources/selectors"; + +function stopThem() { return "You have unsaved work."; } +function dontStopThem() { } + +/** Subscribe to the store. Stop the user from exiting if any part of the + * state tree contains `dirty: true`. */ +export function dontExitIfBrowserIsOnHold(state: Everything) { + let unsavedWork = + !!all(state.resources.index).filter(r => r.dirty).length; + window.onbeforeunload = (unsavedWork) ? stopThem : dontStopThem; +} + +interface Subscription { + fn: (state: Everything) => void; + env: EnvName; +}; + +/** To make it easier to manage all things watching the state tree, + * we keep subscriber functions in this array. */ +export let subscriptions: Subscription[] = [ + // { + // env: "development", + // fn: function storeState(state: Everything) { + // sessionStorage["lastState"] = JSON.stringify(state); + // } + // }, + { + env: "*", + fn: dontExitIfBrowserIsOnHold + } +]; + +export function registerSubscribers(store: Store) { + let ENV_LIST = [process.env.NODE_ENV, "*"]; + subscriptions.forEach(function (s) { + if (ENV_LIST.includes(s.env)) { + store.subscribe(() => s.fn(store.getState())); + }; + }); +}; diff --git a/frontend/src/regimens/__tests__/reducer_test.ts b/frontend/src/regimens/__tests__/reducer_test.ts new file mode 100644 index 000000000..6c949ad2c --- /dev/null +++ b/frontend/src/regimens/__tests__/reducer_test.ts @@ -0,0 +1,28 @@ + +import { regimensReducer } from "../reducer"; + +const STATE = { + "dailyOffsetMs": 300000, + "selectedSequenceUUID": "sequences.71.167", + "weeks": [ + { + "days": { + "day1": true, + "day2": true, + "day3": true, + "day4": true, + "day5": true, + "day6": true, + "day7": true + } + } + ] +} + +describe("Regimens reducer", () => { + it("initializes", () => { + const ACTION = { type: "TOGGLE_DAY", payload: { week: 0, day: 4 } }; + let nextState = regimensReducer(STATE, ACTION); + expect(nextState.weeks[0].days["day4"]).toBeFalsy(); + }) +}) diff --git a/frontend/src/regimens/actions.ts b/frontend/src/regimens/actions.ts new file mode 100644 index 000000000..8d3ff6165 --- /dev/null +++ b/frontend/src/regimens/actions.ts @@ -0,0 +1,44 @@ +import { Regimen } from "./interfaces"; +import { destroy, save, init, edit } from "../api/crud"; +import { TaggedRegimen, isTaggedRegimen } from "../resources/tagged_resources"; + +export function editRegimen(r: TaggedRegimen | undefined, + update: Partial) { + return (dispatch: Function) => { + r && isTaggedRegimen(r) && dispatch(edit(r, update)); + } +} + +export function saveRegimen(uuid: string) { + return save(uuid); +} + +export function deleteRegimen(uuid: string) { + return destroy(uuid); +} + +export function selectRegimen(payload: TaggedRegimen) { + if (isTaggedRegimen(payload)) { + return { type: "SELECT_REGIMEN", payload }; + } else { + throw new Error("Not a regimen.") + } +} + +let copy = 1; + +function emptyRegimen(): TaggedRegimen { + return { + kind: "regimens", + uuid: "NEVER", + dirty: true, + body: { + name: ("New regimen " + copy++), + color: "gray", + regimen_items: [] + } + } +} + +export let newRegimen = () => init(emptyRegimen()); + diff --git a/frontend/src/regimens/bulk_scheduler/__tests__/actions_test.ts b/frontend/src/regimens/bulk_scheduler/__tests__/actions_test.ts new file mode 100644 index 000000000..6685ca3a9 --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/__tests__/actions_test.ts @@ -0,0 +1,16 @@ +let errorStub = jest.fn(); +jest.mock("i18next", () => ({ t: (i: string) => i })) +jest.mock("farmbot-toastr", () => ({ error: errorStub })); + +import { commitBulkEditor } from "../actions"; +import { fakeState } from "../../../__test_support__/fake_state"; + +describe("commitBulkEditor()", () => { + it("does nothing if no regimen is selected", () => { + let getState = () => fakeState(); + let dispatch = jest.fn(); + let results = commitBulkEditor()(dispatch, getState); + expect(dispatch.mock.calls.length).toEqual(0); + expect(errorStub.mock.calls.length).toEqual(1); + }); +}); diff --git a/frontend/src/regimens/bulk_scheduler/actions.ts b/frontend/src/regimens/bulk_scheduler/actions.ts new file mode 100644 index 000000000..016bf4e57 --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/actions.ts @@ -0,0 +1,76 @@ +import { isNaN, isNumber } from "lodash"; +import { t } from "i18next"; +import { error, warning } from "farmbot-toastr"; +import { ReduxAction, Thunk } from "../../redux/interfaces"; +import { ToggleDayParams } from "./interfaces"; +import { assertUuid, findSequence, findRegimen } from "../../resources/selectors"; +import { groupRegimenItemsByWeek } from "./group_regimen_items_by_week"; +import { defensiveClone } from "../../util"; +import { overwrite } from "../../api/crud"; + +export function pushWeek() { + return { + type: "PUSH_WEEK" + }; +} + +export function popWeek() { + return { + type: "POP_WEEK" + }; +} + +/** Sets daily offset of a regimen */ +export function setTimeOffset(ms: number) { + if (isNaN(ms) || !isNumber(ms)) { + warning("Time is not properly formatted.", "Bad Input"); + throw new Error("Bad time input on regimen page: " + JSON.stringify(ms)); + } else { + return { type: "SET_TIME_OFFSET", payload: ms }; + }; +} + +export function toggleDay({ week, day }: ToggleDayParams) { + return { + type: "TOGGLE_DAY", + payload: { + week, + day + } + }; +} + +export function setSequence(uuid: string): ReduxAction { + assertUuid("sequences", uuid); + return { type: "SET_SEQUENCE", payload: uuid }; +}; + +export function commitBulkEditor(): Thunk { + return function(dispatch, getState) { + let res = getState().resources; + let { weeks, dailyOffsetMs, selectedSequenceUUID, currentRegimen } = + res.consumers.regimens; + + // If the user hasn't clicked a regimen, initialize one for them. + if (currentRegimen) { + // Proceed only if they selected a sequence from the drop down. + if (selectedSequenceUUID) { + let seq = findSequence(res.index, selectedSequenceUUID).body; + const regimenItems = groupRegimenItemsByWeek(weeks, dailyOffsetMs, seq); + // Proceed only if days are selcted in the scheduler. + if (regimenItems.length > 0) { + let reg = findRegimen(res.index, currentRegimen); + let update = defensiveClone(reg).body; + update.regimen_items = update.regimen_items.concat(regimenItems); + dispatch(overwrite(reg, update)); + } else { + return error(t("No day(s) selected.")); + } + } else { + return error(t("Select a sequence from the dropdown first.")); + } + } else { + return error(t("Select a regimen first or create one.")); + } + }; +} diff --git a/frontend/src/regimens/bulk_scheduler/add_button.tsx b/frontend/src/regimens/bulk_scheduler/add_button.tsx new file mode 100644 index 000000000..ef46d50b4 --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/add_button.tsx @@ -0,0 +1,12 @@ +import * as React from "react"; +import { AddButtonProps } from "./interfaces"; + +export function AddButton({ active, click }: AddButtonProps) { + if (!active) { return
; } + return ; +} diff --git a/frontend/src/regimens/bulk_scheduler/group_regimen_items_by_week.ts b/frontend/src/regimens/bulk_scheduler/group_regimen_items_by_week.ts new file mode 100644 index 000000000..87c1c989e --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/group_regimen_items_by_week.ts @@ -0,0 +1,51 @@ +import { Week } from "./interfaces"; +import { Sequence } from "../../sequences/interfaces"; +import { RegimenItem } from "../../regimens/interfaces"; + +/** Calculates correct time_offset for a group of RegimenItem[]s based on a + * set of weeks and a desired offset. */ +export function groupRegimenItemsByWeek(weeks: Week[], OFFSET: number, + seq: Sequence) { + const ONE_WEEK = 604800000; + const ONE_DAY = 86400000; + + let keys = ["day1", "day2", "day3", "day4", "day5", "day6", "day7"]; + + return weeks + // Collect all of the true/false values in weekX.days. These indicate + // wether we should add a sequence on that day or not. + .map((week) => + keys.map((key) => + (week.days as { [day: string]: boolean })[key])) + // [[true,false,false,true] . . . ] + // Convert true values to an offset, in milliseconds from the + // start point. + // Convert false values to -1. + .map((weekArray, weekNum) => { + let tweeks = ONE_WEEK * (weekNum); + return weekArray.map((shouldExecute, dayNum) => { + let days = ONE_DAY * dayNum; + return (shouldExecute) ? (tweeks + days + OFFSET) : -1; + // lol, In band signaling. + }); + })// [[-1, 99999, -1, -1],[.....]] + // "flatten" the array into a 1d structure (its an array of + // number arrays right now) + .reduce((arr, acc) => acc.concat(arr)) + // Remove -1 values (days that don't execute a sequence). + .filter((i) => i !== -1) + // Sort the array. Using a comparator function because failing to do so + // results in funny execution times on day 0. + .sort(function (a, b) { + if (a < b) { return -1; }; + return (a > b) ? 1 : 0; + }) + // Transform the sorted array of values into a regimenItem[] array. + .map(time_offset => { + if (seq.id) { + return { time_offset, sequence_id: seq.id }; + } else { + throw new Error("Impossible???"); + } + }); +} diff --git a/frontend/src/regimens/bulk_scheduler/index.tsx b/frontend/src/regimens/bulk_scheduler/index.tsx new file mode 100644 index 000000000..0dd34a73c --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/index.tsx @@ -0,0 +1,61 @@ +import * as React from "react"; +import { BulkEditorProps } from "./interfaces"; +import { AddButton } from "./add_button"; +import { SequenceList } from "./sequence_list"; +import { WeekGrid } from "./week_grid"; +import { commitBulkEditor, setTimeOffset } from "./actions"; +import { ToolTip, Row, Col } from "../../ui/index"; +import { BlurableInput } from "../../ui/blurable_input"; +import { duration } from "moment"; +import { t } from "i18next"; +import { ToolTips } from "../../constants"; + +export function BulkSchedulerWidget(props: BulkEditorProps) { + let { dispatch, sequences, selectedSequence, dailyOffsetMs } = props; + let active = !!(sequences && sequences.length); + return
+

+ {t("Scheduler")} +

+ + { dispatch(commitBulkEditor()); }} /> + + + + + +
+ + { + dispatch(setTimeOffset(timeToMs(currentTarget.value))); + }} /> +
+ +
+ +
; +} + +function msToTime(ms: number) { + if (_.isNumber(ms)) { + let d = duration(ms); + let h = _.padLeft(d.hours().toString(), 2, "0"); + let m = _.padLeft(d.minutes().toString(), 2, "0"); + return `${h}:${m}`; + } else { + return "00:01"; + } +} + +function timeToMs(input: string) { + let [hours, minutes] = input + .split(":") + .map((n: string) => parseInt(n, 10)); + return ((hours * 60) + (minutes)) * 60 * 1000; +} diff --git a/frontend/src/regimens/bulk_scheduler/interfaces.ts b/frontend/src/regimens/bulk_scheduler/interfaces.ts new file mode 100644 index 000000000..10eb88361 --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/interfaces.ts @@ -0,0 +1,65 @@ +import { RegimenItem } from "../interfaces"; +import { TaggedSequence } from "../../resources/tagged_resources"; +import { ResourceIndex } from "../../resources/interfaces"; + +export interface BulkSchedulerOutput { + index: number; + regimenItems: RegimenItem[]; +} + +export interface BulkEditorProps { + selectedSequence?: TaggedSequence; + dailyOffsetMs: number; + weeks: Week[]; + resources: ResourceIndex; + sequences: TaggedSequence[]; + dispatch: Function; +} + +export interface Week { + days: { + day1: boolean; + day2: boolean; + day3: boolean; + day4: boolean; + day5: boolean; + day6: boolean; + day7: boolean; + }; +} + +export interface ToggleDayParams { + week: number; + day: number; +} + +export interface AddButtonProps { + active: boolean; + click: React.EventHandler>; +} + +export interface SequenceListProps { + sequences: TaggedSequence[]; + current: TaggedSequence | undefined; + dispatch: Function; +} + +export interface WeekGridProps { + weeks: Week[]; + dispatch: Function; +}; + +export interface WeekRowProps { + week: Week; + index: number; + dispatch: Function; +} + +export interface DayProps { + day: number; + week: number; + dispatch: Function; + id: string; + active: boolean; +} + diff --git a/frontend/src/regimens/bulk_scheduler/sequence_list.tsx b/frontend/src/regimens/bulk_scheduler/sequence_list.tsx new file mode 100644 index 000000000..26ccab581 --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/sequence_list.tsx @@ -0,0 +1,51 @@ +import * as React from "react"; +import { setSequence } from "./actions"; +import { DeprecatedFBSelect, DropDownItem } from "../../ui"; +import * as _ from "lodash"; +import { t } from "i18next"; +import { SequenceListProps } from "./interfaces"; +import { TaggedSequence } from "../../resources/tagged_resources"; + +let options: DropDownItem[] = []; +let selectedSequence: DropDownItem; + +export function SequenceList({ sequences, + current, + dispatch }: SequenceListProps) { + + sequences + .filter(x => !!x.body.id) // Don't show unsaved. + .map((sequence, index) => { + // Need for initialValue to match DropDownItem interface. + if (current && (sequence.body.id === current.body.id)) { + selectedSequence = { label: sequence.body.name, value: index }; + } + let target = { label: sequence.body.name, value: index.toString() }; + if (!_.some(options, target)) { + options.push({ + label: sequence.body.name, + value: index.toString() + }); + } + }); + + return
+ + +
; +} + +function change(dispatch: Function, sequences: TaggedSequence[] | undefined) { + // TODO: Solve react-select types issue. Everything breaks. + return (event: DropDownItem) => { + let i = _.parseInt((event.value || "-999").toString()); + if (sequences && sequences[i] && sequences[i].uuid) { + dispatch(setSequence(sequences[i].uuid)); + } + }; +} diff --git a/frontend/src/regimens/bulk_scheduler/week_grid.tsx b/frontend/src/regimens/bulk_scheduler/week_grid.tsx new file mode 100644 index 000000000..39128676e --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/week_grid.tsx @@ -0,0 +1,32 @@ +import * as React from "react"; +import { WeekRow } from "./week_row"; +import { WeekGridProps } from "./interfaces"; +import { pushWeek, popWeek } from "./actions"; +import { t } from "i18next"; +import { Row, Col } from "../../ui/index"; + +export function WeekGrid({ weeks, dispatch }: WeekGridProps) { + return
+ + + + {weeks.map(function (week, i) { + return ; + })} + + + + + + + + +
; +}; diff --git a/frontend/src/regimens/bulk_scheduler/week_row.tsx b/frontend/src/regimens/bulk_scheduler/week_row.tsx new file mode 100644 index 000000000..551a32bd9 --- /dev/null +++ b/frontend/src/regimens/bulk_scheduler/week_row.tsx @@ -0,0 +1,42 @@ +import * as React from "react"; +import { WeekRowProps, DayProps } from "./interfaces"; +import { toggleDay } from "./actions"; +import { t } from "i18next"; + +let DAYS = [1, 2, 3, 4, 5, 6, 7]; + +export function WeekRow({ index, dispatch, week }: WeekRowProps) { + return
+ + { + DAYS.map(function (day) { + let id = `${index}-${day}`; + let lookup = `day${day}`; + return ; + }) + } +
; +} + +let select = (dispatch: Function, day: number, week: number) => () => + dispatch(toggleDay({ day, week })); + +function Day({ day, id, dispatch, week, active }: DayProps) { + return
+ + +
; +} diff --git a/frontend/src/regimens/editor/__tests__/copy_button_test.tsx b/frontend/src/regimens/editor/__tests__/copy_button_test.tsx new file mode 100644 index 000000000..ef5398919 --- /dev/null +++ b/frontend/src/regimens/editor/__tests__/copy_button_test.tsx @@ -0,0 +1,51 @@ +jest.unmock("../../../api/crud"); +import * as React from "react"; +import { mount } from "enzyme"; +import { CopyButton } from "../copy_button"; +import { TaggedRegimen } from "../../../resources/tagged_resources"; + +describe("Copy button", () => { + function fakeRegimen(): TaggedRegimen { + return { + uuid: "Whatever", + kind: "regimens", + body: { + name: "Foo", + color: "red", + regimen_items: [] + } + }; + } + it("Initializes a new regimen on click", () => { + let dispatch = jest.fn(); + let regimen = fakeRegimen(); + let el = mount(); + expect(el.find("button").length).toBe(1); + el.simulate("click"); + expect(dispatch.mock.calls.length).toBe(1); + let action = dispatch.mock.calls[0][0]; + expect(typeof action).toEqual("object"); + expect(action.type).toEqual("INIT_RESOURCE"); + let reg = action.payload.body; + expect(action.payload.dirty).toBeTruthy(); + expect(reg.name).toContain("Foo copy"); + }); + + it("Render a button when given a regimen", () => { + let dispatch = jest.fn(); + let regimen = fakeRegimen(); + let el = mount(); + expect(el.find("button").length).toBe(1); + el.simulate("click"); + expect(dispatch.mock.calls.length).toBe(1); + }); + + it("renders nothing if not given a regimen", () => { + let dispatch = jest.fn(); + let el = mount(); + expect(el.find("button").length).toBe(0); + el.simulate("click"); + expect(dispatch.mock.calls.length).toBe(0); + }); + +}); diff --git a/frontend/src/regimens/editor/active_editor.tsx b/frontend/src/regimens/editor/active_editor.tsx new file mode 100644 index 000000000..80038eb3e --- /dev/null +++ b/frontend/src/regimens/editor/active_editor.tsx @@ -0,0 +1,37 @@ +import * as React from "react"; +import { RegimenNameInput } from "./regimen_name_input"; +import { ActiveEditorProps } from "./interfaces"; +import { t } from "i18next"; +import { RegimenItem, RegimenItemCalendarRow } from "../interfaces"; +import { TaggedRegimen } from "../../resources/tagged_resources"; +import { defensiveClone } from "../../util"; +import { overwrite } from "../../api/crud"; +/** The bottom half of the regimen editor panel (when there's something to + actually edit). */ +export function ActiveEditor(props: ActiveEditorProps) { + return
+ +
+ {props.calendar.map(function (group, index1) { + return
+ + {group.items.map(function (row, index2) { + let { item, regimen } = row; + let click = () => props.dispatch(removeRegimenItem(item, regimen)); + let klass = `${row.color} block-header regimen-event` + return
+ {row.name} + {row.hhmm} + +
; + })} +
; + })} +
; +} + +function removeRegimenItem(item: RegimenItem, r: TaggedRegimen) { + let copy = defensiveClone(r); + copy.body.regimen_items = r.body.regimen_items.filter(x => x !== item); + return overwrite(r, copy.body); +} diff --git a/frontend/src/regimens/editor/copy_button.tsx b/frontend/src/regimens/editor/copy_button.tsx new file mode 100644 index 000000000..797c66f7d --- /dev/null +++ b/frontend/src/regimens/editor/copy_button.tsx @@ -0,0 +1,27 @@ +import * as React from "react"; +import { CopyButtnProps } from "./interfaces"; +import { t } from "i18next"; +import { init } from "../../api/crud"; +import { TaggedRegimen } from "../../resources/tagged_resources"; +import { defensiveClone } from "../../util"; + +export function CopyButton({ dispatch, regimen }: CopyButtnProps) { + if (regimen) { + return ; + } else { + return ; + }; +} + +let count = 1; +function copy(regimen: TaggedRegimen | undefined) { + if (regimen) { + let r = defensiveClone(regimen); + r.body.name = r.body.name + " copy " + (count++); + return regimen && init(r); + } +} diff --git a/frontend/src/regimens/editor/empty_editor.tsx b/frontend/src/regimens/editor/empty_editor.tsx new file mode 100644 index 000000000..50c363663 --- /dev/null +++ b/frontend/src/regimens/editor/empty_editor.tsx @@ -0,0 +1,9 @@ +import * as React from "react"; +import { t } from "i18next"; + +/** The bottom half of the regimen editor panel (when there's something to + actually edit). */ +export function EmptyEditor({ }: {}) { + return

{t(`You don't have any Regimens yet. Click "Add" from the Regimens + widget to create and edit your first Regimen.`)}

; +} diff --git a/frontend/src/regimens/editor/index.tsx b/frontend/src/regimens/editor/index.tsx new file mode 100644 index 000000000..a9ad0f0bc --- /dev/null +++ b/frontend/src/regimens/editor/index.tsx @@ -0,0 +1,82 @@ +import * as React from "react"; +import { CopyButton } from "./copy_button"; +import { EmptyEditor } from "./empty_editor"; +import { ActiveEditor } from "./active_editor"; +import { RegimenEditorWidgetProps, DeleteButtonProps } from "./interfaces"; +import { ToolTip, SaveBtn } from "../../ui/index"; +import { saveRegimen, deleteRegimen } from "../actions"; +import { RegimenProps, MiddleSectionProps } from "../interfaces"; +import { isTaggedRegimen } from "../../resources/tagged_resources"; +import { t } from "i18next"; +import { ToolTips } from "../../constants"; + +function MiddleSection({ regimen, dispatch, calendar }: MiddleSectionProps) { + if (regimen && isTaggedRegimen(regimen) && calendar) { + return ; + } else { + return ; + } +} + +function save({ regimen, dispatch }: RegimenProps) { + if (regimen) { + return (event: React.FormEvent<{}>) => { + dispatch(saveRegimen(regimen.uuid)); + }; + } else { throw new Error("Tried to save regimen, but there wasn't one."); }; +} + +function remove({ regimen, dispatch }: DeleteButtonProps) { + if (regimen) { + return (event: React.FormEvent<{}>) => + regimen && dispatch(deleteRegimen(regimen.uuid)); + } else { + // Technically unreachable, but I'll keep TS happy... + throw new Error("Tried to delete non-existant regimen"); + } +} + +export function RegimenEditorWidget({ current, dispatch, auth, calendar }: + RegimenEditorWidgetProps) { + if (auth) { + let regimen = current; + let baseUrl = (auth.token && auth.token.unencoded.iss) || + "CANT_FETCH_TOKEN_ISS"; + + let isSaving = regimen && regimen.saving; + let isDirty = regimen && regimen.dirty; + let isSaved = !isSaving && !isDirty; + + return
+

+ {t("Regimen Editor")} +

+ + {regimen && ( + + )} + + + + {regimen && ( + + )} + +
; + } else { + throw new Error("Must log in first"); + } +} diff --git a/frontend/src/regimens/editor/interfaces.ts b/frontend/src/regimens/editor/interfaces.ts new file mode 100644 index 000000000..cb2879946 --- /dev/null +++ b/frontend/src/regimens/editor/interfaces.ts @@ -0,0 +1,48 @@ +import { + RegimenItem, + RegimenProps, + CalendarRow, + RegimenItemCalendarRow, + Regimen +} from "../interfaces"; +import { AuthState } from "../../auth/interfaces"; +import { BotState } from "../../devices/interfaces"; +import { TaggedRegimen } from "../../resources/tagged_resources"; + +export interface ActiveEditorProps { + regimen: TaggedRegimen; + calendar: CalendarRow[]; + dispatch: Function; +} + +export interface RegimenItemListProps { + calendar: RegimenItemCalendarRow[]; + dispatch: Function; +} + +export interface RegimenItemStepProps { + item: CalendarRow; + dispatch: Function; +} + +export interface RegimenItemDayGroupProps { + row: CalendarRow; + dispatch: Function; +} + +export interface RegimenEditorWidgetProps { + current: TaggedRegimen | undefined; + dispatch: Function; + auth: AuthState | undefined; + calendar: CalendarRow[]; + bot: BotState; +} + +export interface CopyButtnProps { + dispatch: Function; + regimen?: TaggedRegimen; +} + +export interface DeleteButtonProps extends RegimenProps { + baseUrl: string; +}; diff --git a/frontend/src/regimens/editor/regimen_name_input.tsx b/frontend/src/regimens/editor/regimen_name_input.tsx new file mode 100644 index 000000000..ff72219d4 --- /dev/null +++ b/frontend/src/regimens/editor/regimen_name_input.tsx @@ -0,0 +1,32 @@ +import * as React from "react"; +import { RegimenProps } from "../interfaces"; +import { t } from "i18next"; +import { ColorPicker } from "../../sequences/color_picker"; +import { Row, Col } from "../../ui/index"; +import { editRegimen } from "../actions"; + +function write({ dispatch, regimen }: RegimenProps): + React.EventHandler> { + if (regimen) { + return (event: React.FormEvent) => { + dispatch(editRegimen(regimen, { name: event.currentTarget.value })); + }; + } else { + throw new Error("Regimen is required"); + } +} + +export function RegimenNameInput({ regimen, dispatch }: RegimenProps) { + let value = (regimen && regimen.body.name) || ""; + return + + + + dispatch(editRegimen(regimen, { color }))} /> + ; +} diff --git a/frontend/src/regimens/index.tsx b/frontend/src/regimens/index.tsx new file mode 100644 index 000000000..e4fc665b2 --- /dev/null +++ b/frontend/src/regimens/index.tsx @@ -0,0 +1,43 @@ +import * as React from "react"; +import { BulkSchedulerWidget } from "./bulk_scheduler/index"; +import { RegimensList } from "./list/index"; +import { RegimenEditorWidget } from "./editor/index"; +import { connect } from "react-redux"; +import { isMobile } from "../util"; +import { MobileRegimensNav } from "./mobile_nav"; +import { Props } from "./interfaces"; +import { Page, Row, Col } from "../ui/index"; +import { mapStateToProps } from "./state_to_props"; + +@connect(mapStateToProps) +export class Regimens extends React.Component { + render() { + return + + + + + + + + {isMobile() && } + + + + + ; + } +} diff --git a/frontend/src/regimens/interfaces.ts b/frontend/src/regimens/interfaces.ts new file mode 100644 index 000000000..e63ca1cc3 --- /dev/null +++ b/frontend/src/regimens/interfaces.ts @@ -0,0 +1,89 @@ +import { Color } from "../interfaces"; +import { Week } from "./bulk_scheduler/interfaces"; +import { AuthState } from "../auth/interfaces"; +import { BotState } from "../devices/interfaces"; +import { TaggedRegimen, TaggedSequence } from "../resources/tagged_resources"; +import { ResourceIndex } from "../resources/interfaces"; +import { JSXChildren } from "../util"; + +export interface MiddleSectionProps { + regimen: TaggedRegimen | undefined; + calendar: CalendarRow[]; + dispatch: Function; +} + +export interface CalendarRow { + day: string; + items: RegimenItemCalendarRow[]; +} + +export interface Props { + dispatch: Function; + sequences: TaggedSequence[]; + auth: AuthState | undefined; + bot: BotState; + current: TaggedRegimen | undefined; + regimens: TaggedRegimen[]; + resources: ResourceIndex; + selectedSequence: TaggedSequence | undefined; + dailyOffsetMs: number; + weeks: Week[]; + calendar: CalendarRow[]; +} + +export interface RegimenItemCalendarRow { + regimen: TaggedRegimen; + item: RegimenItem; + name: string; + hhmm: string; + color: string; + /** Numeric field that can be used for sorting purposes. */ + sortKey: number; + day: number; + dispatch: Function; +} + +/** Used by UI widgets that modify a regimen */ +export interface RegimenProps { + regimen?: TaggedRegimen; + dispatch: Function; +} + +/** A list of "sequences" scheduled after a starting point (epoch). */ +export interface Regimen { + id?: number; + /** Friendly identifier for humans to easily identify regimens. */ + name: string; + color: Color; + regimen_items: RegimenItem[]; +} + +export interface RegimenListItemProps { + regimen: TaggedRegimen; + dispatch: Function; + index: number; +} + +/** Individual step that a regimen will execute at a point in time. */ +export interface RegimenItem { + id?: number; + sequence_id: number; + regimen_id?: number; + /** Time (in milliseconds) to wait before executing the sequence */ + time_offset: number; +} + +export interface AddRegimenProps { + dispatch: Function; + className?: string; + children?: JSXChildren; +} + +export interface RegimensListProps { + dispatch: Function; + regimens: TaggedRegimen[]; +} + +export interface RegimensListState { + searchTerm: string; +} diff --git a/frontend/src/regimens/list/__tests__/add_button_test.tsx b/frontend/src/regimens/list/__tests__/add_button_test.tsx new file mode 100644 index 000000000..fa678d8f5 --- /dev/null +++ b/frontend/src/regimens/list/__tests__/add_button_test.tsx @@ -0,0 +1,27 @@ +jest.unmock("../../actions"); +import * as React from "react"; +import { AddRegimen } from "../add_button"; +import { AddRegimenProps } from "../../interfaces"; +import { shallow } from "enzyme"; + +describe("", () => { + function btn(props: AddRegimenProps) { + return shallow(React.createElement(AddRegimen, props)); + } + it("transfers class name", () => { + expect(btn({ className: "foo", dispatch: jest.fn() }).hasClass("foo")).toBeTruthy(); + }); + + it("dispatches a new regimen onclick", () => { + let dispatch = jest.fn(); + let b = btn({ dispatch }); + b.find("button").simulate("click"); + expect(dispatch.mock.calls.length).toEqual(1); + let action = dispatch.mock.calls[0][0]; + expect(action.type).toEqual("INIT_RESOURCE"); + expect(action.payload).toBeTruthy(); + expect(action.payload.kind).toEqual("regimens"); + }); + + it("has children (or defaults)"); +}); diff --git a/frontend/src/regimens/list/add_button.tsx b/frontend/src/regimens/list/add_button.tsx new file mode 100644 index 000000000..7c4b47c94 --- /dev/null +++ b/frontend/src/regimens/list/add_button.tsx @@ -0,0 +1,16 @@ +import * as React from "react"; +import { AddRegimenProps } from "../interfaces"; +import { newRegimen } from "../actions"; + +export function AddRegimen(props: AddRegimenProps) { + props.className ? props.className : ""; + let classes = "fb-button green " + props.className; + let { dispatch } = props; + return ; +} + diff --git a/frontend/src/regimens/list/index.tsx b/frontend/src/regimens/list/index.tsx new file mode 100644 index 000000000..f3bff9d32 --- /dev/null +++ b/frontend/src/regimens/list/index.tsx @@ -0,0 +1,53 @@ +import * as React from "react"; +import { RegimenListItem } from "./regimen_list_item"; +import { AddRegimen } from "./add_button"; +import { Row, Col, ToolTip } from "../../ui/index"; +import { RegimensListProps, RegimensListState } from "../interfaces"; +import { sortResourcesById } from "../../util"; +import { ToolTips } from "../../constants"; +import { t } from "i18next"; + +export class RegimensList extends + React.Component { + + state: RegimensListState = { + searchTerm: "" + }; + + rows = () => { + let searchTerm = this.state.searchTerm.toLowerCase(); + return + {sortResourcesById(this.props.regimens) + .filter(regimen => regimen.body.name.toLowerCase().includes(searchTerm)) + .map((regimen, index) => { + return ; + })} + + } + + onChange = (e: React.SyntheticEvent) => { + this.setState({ searchTerm: e.currentTarget.value }); + } + + render() { + return
+

+ {t("Regimens")} +

+ + + + + {this.rows()} + +
; + } +} diff --git a/frontend/src/regimens/list/regimen_list_item.tsx b/frontend/src/regimens/list/regimen_list_item.tsx new file mode 100644 index 000000000..cbbb2090a --- /dev/null +++ b/frontend/src/regimens/list/regimen_list_item.tsx @@ -0,0 +1,37 @@ +import * as React from "react"; +import { RegimenListItemProps } from "../interfaces"; +import { isMobile } from "../../util"; +import { selectRegimen } from "../actions"; +import { Link } from "react-router"; +import { TaggedRegimen, isTaggedRegimen } from "../../resources/tagged_resources"; + +export function RegimenListItem({ regimen, dispatch }: RegimenListItemProps) { + let name = regimen.body.name || "-"; + let color = (regimen.body.color) || "gray"; + let style = `block block-wrapper full-width text-left ${color} + block-header fb-button`; + let link = name ? name.replace(/ /g, "_").toLowerCase() : "-"; + if (isMobile()) { + return + {name} + ; + } else { + return ; + } +} + +function select(dispatch: Function, regimen: TaggedRegimen) { + return function (event: React.MouseEvent<{}>) { + if (regimen && isTaggedRegimen(regimen)) { + dispatch(selectRegimen(regimen)); + } + }; +} diff --git a/frontend/src/regimens/mobile_nav.tsx b/frontend/src/regimens/mobile_nav.tsx new file mode 100644 index 000000000..50d1c27c4 --- /dev/null +++ b/frontend/src/regimens/mobile_nav.tsx @@ -0,0 +1,18 @@ +import * as React from "react"; +import * as _ from "lodash"; +import { history } from "../history"; + +export function MobileRegimensNav(props: {}) { + // TODO: This is definitely not right, figure out query objects + let name = history.getCurrentLocation().pathname.split("/")[3]; + return ; +} diff --git a/frontend/src/regimens/reducer.ts b/frontend/src/regimens/reducer.ts new file mode 100644 index 000000000..a4f36c88a --- /dev/null +++ b/frontend/src/regimens/reducer.ts @@ -0,0 +1,84 @@ +import * as _ from "lodash"; +import { Dictionary } from "farmbot"; +import { Week } from "./bulk_scheduler/interfaces"; +import { generateReducer } from "../redux/generate_reducer"; +import { TaggedResource, TaggedRegimen } from "../resources/tagged_resources"; +import { Actions } from "../constants"; + +export interface RegimenState { + dailyOffsetMs: number; + weeks: Week[]; + selectedSequenceUUID?: string | undefined; + currentRegimen?: string | undefined; +} + +function newWeek() { + return { + days: { + day1: false, + day2: false, + day3: false, + day4: false, + day5: false, + day6: false, + day7: false + } + }; +} + +function newState(): RegimenState { + return { + dailyOffsetMs: 300000, + weeks: _.times(10, newWeek), + selectedSequenceUUID: undefined, + currentRegimen: undefined + }; +} + +export let initialState: RegimenState = newState(); + +export let regimensReducer = generateReducer(initialState) + .add(Actions.DESTROY_RESOURCE_OK, (s, { payload }) => { + switch (payload.uuid) { + case s.selectedSequenceUUID: + s.selectedSequenceUUID = undefined; + break; + case s.currentRegimen: + s.selectedSequenceUUID = undefined; + break; + } + return s; + }) + .add(Actions.INIT_RESOURCE, (s, { payload }) => { + if (payload.kind === "regimens") { + s.currentRegimen = payload.uuid; + } + return s; + }) + .add(Actions.PUSH_WEEK, (s, a) => { + s.weeks.push(newWeek()); + return s; + }) + .add(Actions.POP_WEEK, (s, a) => { + s.weeks.pop(); + return s; + }) + .add<{ week: number, day: number }>(Actions.TOGGLE_DAY, (s, { payload }) => { + let week = s.weeks[payload.week]; + let day = `day${payload.day}`; + let days = (week.days as Dictionary); + days[day] = !days[day]; + return s; + }) + .add(Actions.SELECT_REGIMEN, (s, { payload }) => { + s.currentRegimen = payload.uuid; + return s; + }) + .add(Actions.SET_SEQUENCE, (s, { payload }) => { + s.selectedSequenceUUID = payload; + return s; + }) + .add(Actions.SET_TIME_OFFSET, (s, { payload }) => { + s.dailyOffsetMs = payload; + return s; + }); diff --git a/frontend/src/regimens/serializers.ts b/frontend/src/regimens/serializers.ts new file mode 100644 index 000000000..547713a5c --- /dev/null +++ b/frontend/src/regimens/serializers.ts @@ -0,0 +1,29 @@ +import { Regimen } from "./interfaces"; +import * as _ from "lodash"; + +/** + * Transforms local Regimen object into format suitable for use with FarmBot + * API's "/api/regimens" endpoint. + */ +export function regimenSerializer(input: Regimen) { + const regimen = _.clone(input); + const regimen_items = regimen + .regimen_items + .map(function wow(r) { + if (r && r.sequence_id) { + return { + time_offset: r.time_offset, + sequence_id: r.sequence_id + }; + } else { + throw new Error(`Array regimen.regimen_items may only contain + objects with an "id" property.`); + } + }); + + return { + name: regimen.name, + color: regimen.color, + regimen_items + }; +} diff --git a/frontend/src/regimens/state_to_props.ts b/frontend/src/regimens/state_to_props.ts new file mode 100644 index 000000000..19761312f --- /dev/null +++ b/frontend/src/regimens/state_to_props.ts @@ -0,0 +1,81 @@ +import { Everything } from "../interfaces"; +import { Props, RegimenItem, RegimenItemCalendarRow, CalendarRow } from "./interfaces"; +import { + selectAllSequences, + selectAllRegimens, + maybeGetSequence, + maybeGetRegimen, + findId, + findSequence +} from "../resources/selectors"; +import { TaggedRegimen } from "../resources/tagged_resources"; +import { duration } from "moment"; +import * as moment from "moment"; +import { ResourceIndex } from "../resources/interfaces"; +import { randomColor } from "../util"; + +export function mapStateToProps(props: Everything): Props { + let { resources, dispatch, bot } = props; + let { weeks, dailyOffsetMs, selectedSequenceUUID, currentRegimen } = + resources.consumers.regimens; + let { index } = resources; + let current = maybeGetRegimen(index, currentRegimen); + let calendar = current ? + generateCalendar(current, index, dispatch) : []; + + return { + dispatch: props.dispatch, + sequences: selectAllSequences(index), + resources: index, + auth: props.auth, + current, + regimens: selectAllRegimens(index), + selectedSequence: maybeGetSequence(index, selectedSequenceUUID), + dailyOffsetMs, + weeks, + bot, + calendar + }; +} + +/** Formatting of calendar row dates. */ +const FMT = "h:mm a"; +const SORT_KEY: keyof RegimenItemCalendarRow = "sortKey"; + +/** Does all the heavy lifting related to joining regimen items with their + * appropriate sequence meta data like "sequence name" and the like. + */ +function generateCalendar(regimen: TaggedRegimen, + index: ResourceIndex, + dispatch: Function): CalendarRow[] { + let mapper = createRows(index, dispatch, regimen); + let rows = regimen.body.regimen_items.map(mapper); + let dict = _.groupBy(rows, "day"); + let makeRows = (day: string): CalendarRow => ({ day: day, items: dict[day] }); + let days = _(dict) + .keys() + .map(x => parseInt(x)) + .sort((a, b) => a - b) + .map(x => "" + x) + .value(); + return days + .map(makeRows) + .map((x) => { + x.items = _(x.items).sortBy(SORT_KEY).value(); + return x; + }); +} + +let createRows = (index: ResourceIndex, dispatch: Function, regimen: TaggedRegimen) => + (item: RegimenItem): RegimenItemCalendarRow => { + let uuid = findId(index, "sequences", item.sequence_id); + let sequence = findSequence(index, uuid); + let { time_offset } = item; + let d = duration(time_offset); + let { name } = sequence.body; + let color = sequence.body.color || randomColor() + let hhmm = moment({ hour: d.hours(), minute: d.minutes() }).format(FMT); + let day = Math.floor(duration(time_offset).asDays()) + 1; + return { name, hhmm, color, day, dispatch, regimen, item, sortKey: time_offset }; + } + diff --git a/frontend/src/resources/actions.ts b/frontend/src/resources/actions.ts new file mode 100644 index 000000000..fb959eebd --- /dev/null +++ b/frontend/src/resources/actions.ts @@ -0,0 +1,28 @@ +import { TaggedResource } from "./tagged_resources"; +import { UnsafeError } from "../interfaces"; +import { toastErrors } from "../util"; + +export function createOK(payload: TaggedResource) { + return { type: "SAVE_RESOURCE_OK", payload }; +} + +export function updateOK(payload: TaggedResource) { + return { type: "UPDATE_RESOURCE_OK", payload }; +} + +export function destroyOK(payload: TaggedResource) { + return { type: "DESTROY_RESOURCE_OK", payload }; +} + +/** Generalized error handler when there are not special error handling + * requirements */ +function generalizedError(payload: UnsafeError) { + toastErrors(payload); + return { + type: "*_RESOURCE_NO", payload + }; +} + +export let destroyNO = generalizedError; +export let createNO = generalizedError; +export let updateNO = generalizedError; diff --git a/frontend/src/resources/interfaces.ts b/frontend/src/resources/interfaces.ts new file mode 100644 index 000000000..959818bec --- /dev/null +++ b/frontend/src/resources/interfaces.ts @@ -0,0 +1,39 @@ +import { Dictionary } from "farmbot/dist"; +/** Like Dictionary, except more cautious about null values. */ +import { SequenceReducerState } from "../sequences/interfaces"; +import { DesignerState } from "../farm_designer/interfaces"; +import { CowardlyDictionary } from "../util"; +import { + TaggedResource, + ResourceName, + TaggedToolSlotPointer, + TaggedTool +} from "./tagged_resources"; +import { RegimenState } from "../regimens/reducer"; +import { FarmwareState } from "../farmware/interfaces"; + +type UUID = string; + +export interface ResourceIndex { + all: UUID[]; + byKind: Record; + byKindAndId: CowardlyDictionary; + references: Dictionary; +} + +export interface RestResources { + /** Tells you if the sync finished yet. */ + loaded: ResourceName[]; + index: ResourceIndex; + consumers: { + sequences: SequenceReducerState; + regimens: RegimenState; + farm_designer: DesignerState; + farmware: FarmwareState; + } +} + +export interface SlotWithTool { + toolSlot: TaggedToolSlotPointer; + tool: TaggedTool | undefined; +} diff --git a/frontend/src/resources/reducer.ts b/frontend/src/resources/reducer.ts new file mode 100644 index 000000000..fac90eeaa --- /dev/null +++ b/frontend/src/resources/reducer.ts @@ -0,0 +1,291 @@ +import * as _ from "lodash"; +import * as moment from "moment"; +import { generateReducer } from "../redux/generate_reducer"; +import { RestResources, ResourceIndex } from "./interfaces"; +import { + TaggedResource, + ResourceName, + sanityCheck, + isTaggedResource +} from "./tagged_resources"; +import { generateUuid, arrayWrap } from "./util"; +import { EditResourceParams } from "../api/interfaces"; +import { + initialState as sequenceState, + sequenceReducer as sequences, +} from "../sequences/reducer"; +import { + initialState as regimenState, + regimensReducer as regimens +} from "../regimens/reducer"; +import { combineReducers } from "redux"; +import { ReduxAction } from "../redux/interfaces"; +import { + designer as farm_designer, + initialState as designerState +} from "../farm_designer/reducer"; +import { ResourceReadyPayl } from "../sync/actions"; +import { OFCropResponse } from "../open_farm/index"; +import { + famrwareReducer as farmware, + farmwareState +} from "../farmware/reducer"; +import { Actions } from "../constants"; + +let consumerReducer = combineReducers({ + regimens, + sequences, + farm_designer, + farmware +}); + +export function emptyState(): RestResources { + return { + consumers: { + sequences: sequenceState, + regimens: regimenState, + farm_designer: designerState, + farmware: farmwareState + }, + loaded: [], + index: { + all: [], + byKind: { + device: [], + farm_events: [], + images: [], + logs: [], + peripherals: [], + crops: [], + points: [], + regimens: [], + sequences: [], + tools: [], + users: [] + }, + byKindAndId: {}, + references: {} + } + }; +} + +let initialState: RestResources = emptyState(); + +let afterEach = (state: RestResources, a: ReduxAction) => { + state.consumers = consumerReducer({ + sequences: state.consumers.sequences, + regimens: state.consumers.regimens, + farm_designer: state.consumers.farm_designer, + farmware: state.consumers.farmware + }, a); + return state; +}; + +/** Responsible for all RESTful resources. */ +export let resourceReducer = generateReducer + (initialState, afterEach) + .add(Actions.SAVE_SPECIAL_RESOURCE, (s, { payload }) => { + let data = arrayWrap(payload); + let kind = payload.name; + data.map((body: ResourceReadyPayl) => { + let crop = body.data as OFCropResponse; + if (crop.data) { + let cropInfo = crop.data.attributes; + addToIndex(s.index, kind, cropInfo, generateUuid(undefined, kind)); + } + }) + return s; + }) + .add(Actions.SAVE_RESOURCE_OK, (s, { payload }) => { + let resource = payload; + resource.dirty = false; + resource.saving = false; + if (resource + && resource.body) { + switch (resource.kind) { + case "device": + case "users": + case "farm_events": + case "logs": + case "peripherals": + case "crops": + case "regimens": + case "sequences": + case "tools": + case "points": + reindexResource(s.index, resource); + s.index.references[resource.uuid] = resource; + break; + default: + whoops(Actions.SAVE_RESOURCE_OK, payload.kind); + } + } else { + throw new Error("Somehow, a resource was created without an ID?"); + } + return s; + }) + .add(Actions.DESTROY_RESOURCE_OK, (s, { payload }) => { + let resource = payload; + switch (resource.kind) { + case "device": + case "users": + case "farm_events": + case "logs": + case "peripherals": + case "crops": + case "regimens": + case "sequences": + case "tools": + case "points": + removeFromIndex(s.index, resource); + break; + default: + whoops(Actions.DESTROY_RESOURCE_OK, payload.kind); + } + return s; + }) + .add(Actions.UPDATE_RESOURCE_OK, (s, { payload }) => { + let uuid = payload.uuid; + s.index.references[uuid] = payload; + let tr = s.index.references[uuid]; + if (tr) { + tr.dirty = false; + tr.saving = false; + sanityCheck(tr); + reindexResource(s.index, tr); + return s; + } else { + throw new Error("BAD UUID IN UPDATE_RESOURCE_OK"); + } + }) + .add("*_RESOURCE_NO", (s, { payload }) => { + let uuid = payload.uuid; + let tr = _.merge(findByUuid(s.index, uuid), payload); + tr.dirty = true; + tr.saving = false; + sanityCheck(tr); + return s; + }) + .add(Actions.EDIT_RESOURCE, (s, { payload }) => { + let uuid = payload.uuid; + let { update } = payload; + let source = _.merge(findByUuid(s.index, uuid), + { body: update }, + { dirty: true }); + sanityCheck(source); + payload && isTaggedResource(source); + return s; + }) + .add("OVERWRITE_RESOURCE", (s, { payload }) => { + let uuid = payload.uuid; + let original = findByUuid(s.index, uuid); + original.body = payload.update as typeof original.body; + original.dirty = true; + sanityCheck(original); + payload && isTaggedResource(original); + return s; + }) + .add("INIT_RESOURCE", (s, { payload }) => { + let tr = payload; + let uuid = tr.uuid; + // TEMPORARY STUB: + // Problem: Old versions of FBOS send timestamp as 8601 string. + // New versions send it as a unix timestamp + // This creates backwards compat issues. + // SOLUTINON: Convert strings to unix timestamps at runtime. + // NOTE: Remove this in June 2017. + if (tr.kind === "logs" && (typeof tr.body.created_at === "string")) { + tr.body.created_at = moment(tr.body.created_at).unix(); + } + reindexResource(s.index, tr); + if (tr.kind === "logs") { + // Since logs don't come from the API all the time, they are the only + // resource (right now) that can have an id of `undefined` and not dirty. + findByUuid(s.index, uuid).dirty = false; + } else { + findByUuid(s.index, uuid).dirty = true; + } + sanityCheck(tr); + return s; + }) + .add(Actions.SAVE_RESOURCE_START, (s, { payload }) => { + let resource = findByUuid(s.index, payload.uuid); + resource.saving = true; + if (!resource.body.id) { delete resource.body.id; } + return s; + }) + .add(Actions.RESOURCE_READY, (s, { payload }) => { + let { name } = payload; + /** Problem: Most API resources are plural (array wrapped) resource. + * A small subset are singular (`device` and a few others), + * making `.map()` and friends unsafe. + * Solution: wrap everything in an array on the way in. */ + let unwrapped = payload.data; + let data = arrayWrap(unwrapped); + let { index } = s; + s.loaded.push(name); + index.byKind[name].map(x => { + let resource = index.references[x]; + resource && removeFromIndex(index, resource); + }); + addAllToIndex(index, name, data); + return s; + }); + +interface HasID { + id?: number | undefined; +} + +function addAllToIndex(i: ResourceIndex, + kind: ResourceName, + all: T[]) { + all.map(function (tr) { + return addToIndex(i, kind, tr, generateUuid(tr.id, kind)); + }); +} + +function addToIndex(index: ResourceIndex, + kind: ResourceName, + body: T, + uuid: string) { + let tr: TaggedResource = { kind, body, uuid } as any; // TODO: Fix this :( + sanityCheck(tr); + index.all.push(tr.uuid); + index.byKind[tr.kind].push(tr.uuid); + if (tr.body.id) { index.byKindAndId[tr.kind + "." + tr.body.id] = tr.uuid; } + index.references[tr.uuid] = tr; +} + +export function joinKindAndId(kind: ResourceName, id: number | undefined) { + return `${kind}.${id || 0}`; +} + +let filterOutUuid = (tr: TaggedResource) => (uuid: string) => uuid !== tr.uuid; +function removeFromIndex(index: ResourceIndex, tr: TaggedResource) { + let { kind } = tr; + let id = tr.body.id; + index.all = index.all.filter(filterOutUuid(tr)); + index.byKind[tr.kind] = index.byKind[tr.kind].filter(filterOutUuid(tr)); + delete index.byKindAndId[joinKindAndId(kind, id)] + delete index.byKindAndId[joinKindAndId(kind, 0)] + delete index.references[tr.uuid]; +} + +function whoops(origin: string, kind: string) { + let msg = `${origin}/${kind}: No handler written for this one yet.` + throw new Error(msg); +} + +export function findByUuid(index: ResourceIndex, uuid: string): TaggedResource { + let x = index.references[uuid]; + if (x && isTaggedResource(x)) { + return x; + } else { + throw new Error("BAD UUID- CANT FIND RESOURCE: " + uuid); + } +} + +function reindexResource(i: ResourceIndex, r: TaggedResource) { + removeFromIndex(i, r); + addToIndex(i, r.kind, r.body, r.uuid); +} diff --git a/frontend/src/resources/selectors.ts b/frontend/src/resources/selectors.ts new file mode 100644 index 000000000..9f74d88ff --- /dev/null +++ b/frontend/src/resources/selectors.ts @@ -0,0 +1,536 @@ +import { error } from "farmbot-toastr"; +import { ResourceIndex, SlotWithTool } from "./interfaces"; +import { joinKindAndId } from "./reducer"; +import { + isTaggedFarmEvent, + isTaggedPlantPointer, + isTaggedGenericPointer, + isTaggedRegimen, + isTaggedResource, + isTaggedSequence, + isTaggedTool, + isTaggedToolSlotPointer, + ResourceName, + sanityCheck, + TaggedCrop, + TaggedFarmEvent, + TaggedGenericPointer, + TaggedImage, + TaggedLog, + TaggedPeripheral, + TaggedPlantPointer, + TaggedRegimen, + TaggedResource, + TaggedSequence, + TaggedTool, + TaggedToolSlotPointer, + TaggedUser +} from "./tagged_resources"; +import { CowardlyDictionary, betterCompact, sortResourcesById } from "../util"; +type StringMap = CowardlyDictionary; + +export let findId = (index: ResourceIndex, kind: ResourceName, id: number) => { + + let uuid = index.byKindAndId[joinKindAndId(kind, id)]; + assertUuid(kind, uuid); + if (uuid) { + return uuid; + } else { + throw new Error("UUID not found for id " + id) + } +} + +export function findResourceById(index: ResourceIndex, kind: ResourceName, + id: number) { + return findId(index, kind, id); +} + +export let isKind = (name: ResourceName) => (tr: TaggedResource) => tr.kind === name; + +function findAll(index: ResourceIndex, name: ResourceName) { + let results: TaggedResource[] = []; + + index.byKind[name].map(function (uuid) { + let item = index.references[uuid]; + (item && isTaggedResource(item) && results.push(item)); + }) + return sortResourcesById(results); +} + +export function selectAllFarmEvents(index: ResourceIndex) { + return findAll(index, "farm_events") as TaggedFarmEvent[]; +} + +export function selectAllPoints(index: ResourceIndex) { + return findAll(index, "points") as + (TaggedGenericPointer | TaggedPlantPointer | TaggedToolSlotPointer)[]; +} + +export function groupPointsByType(index: ResourceIndex) { + return _(selectAllPoints(index)) + // If this fiails to compile.... + .tap(x => x[0].body.pointer_type) + // ... this line must be updated: + .groupBy("body.pointer_type") + .value(); +} + +export function findPointerByTypeAndId(index: ResourceIndex, + type_: string, + id: number) { + let p = selectAllPoints(index) + .filter(({ body }) => (body.id === id) && (body.pointer_type === type_))[0]; + if (p) { + return p; + } else { + // We might have a sequence dependency leak if this exception is ever + // thrown. + throw new Error(`Tried to fetch bad point ${type_} ${id}`); + } +} + +export function selectAllGenericPointers(index: ResourceIndex): + TaggedGenericPointer[] { + let genericPointers = selectAllPoints(index) + .map(p => (isTaggedGenericPointer(p)) ? p : undefined); + return betterCompact(genericPointers); +} + +export function selectAllPlantPointers(index: ResourceIndex): TaggedPlantPointer[] { + let genericPointers = selectAllPoints(index) + .map(p => (isTaggedPlantPointer(p)) ? p : undefined); + return betterCompact(genericPointers); +} + +export function selectAllToolSlotPointers(index: ResourceIndex): + TaggedToolSlotPointer[] { + let genericPointers = selectAllPoints(index) + .map(p => (isTaggedToolSlotPointer(p)) ? p : undefined); + return betterCompact(genericPointers); +} + +export function selectAllTools(index: ResourceIndex) { + return findAll(index, "tools") as TaggedTool[]; +} + +export function selectAllPeripherals(index: ResourceIndex) { + return findAll(index, "peripherals") as TaggedPeripheral[]; +} + +export function selectAllLogs(index: ResourceIndex) { + return findAll(index, "logs") as TaggedLog[]; +} + +interface Finder { + (i: ResourceIndex, u: string): T; +} +/** Generalized way to stamp out "finder" functions. + * Pass in a `ResourceName` and it will add all the relevant checks. + * WARNING: WILL THROW ERRORS IF RESOURCE NOT FOUND! + */ +let find = (r: ResourceName) => + function findResource(i: ResourceIndex, u: string) { + assertUuid(r, u); + let result = i.references[u]; + if (result && isTaggedResource(result) && sanityCheck(result)) { + return result as TaggedResource; + } else { + error("Resource error"); + throw new Error(`Tagged resource ${r} was not found or malformed: ` + + JSON.stringify(result)); + } + }; + +export function findToolSlot(i: ResourceIndex, uuid: string): TaggedToolSlotPointer { + let ts = selectAllToolSlotPointers(i).filter(x => x.uuid === uuid)[0]; + if (ts) { + return ts; + } else { + throw new Error("ToolSlotPointer not found: " + uuid); + } +} +export let findTool = find("tools") as Finder; +export let findSequence = find("sequences") as Finder; +export let findRegimen = find("regimens") as Finder; +export let findFarmEvent = find("farm_events") as Finder; +export let findPoints = find("points") as Finder; + +export function findPlant(i: ResourceIndex, uuid: string): + TaggedPlantPointer { + let point = findPoints(i, uuid); + if (point && sanityCheck(point) && point.body.pointer_type === "Plant") { + return point; + } else { + throw new Error("That is not a true plant pointer"); + } +} +export function selectCurrentToolSlot(index: ResourceIndex, uuid: string) { + let x = index.references[uuid]; + if (x && isTaggedToolSlotPointer(x)) { + return x; + } else { + throw new Error("selectCurrentToolSlot: Not a tool slot: "); + } +} + +export function selectAllImages(index: ResourceIndex) { + return findAll(index, "images") as TaggedImage[]; +} + +export function selectAllRegimens(index: ResourceIndex) { + return findAll(index, "regimens") as TaggedRegimen[]; +} + +export function selectAllCrops(index: ResourceIndex) { + return findAll(index, "crops") as TaggedCrop[]; +} + +export function getRegimenByUUID(index: ResourceIndex, uuid: string) { + assertUuid("regimens", uuid); + return index.references[uuid]; +} + +export function getSequenceByUUID(index: ResourceIndex, + uuid: string): TaggedSequence { + assertUuid("sequences", uuid); + let result = index.references[uuid]; + if (result && isTaggedSequence(result)) { + return result; + } else { + throw new Error("BAD Sequence UUID;"); + } +} + +export function selectAllSequences(index: ResourceIndex) { + return findAll(index, "sequences") as TaggedSequence[]; +} + +export function indexSequenceById(index: ResourceIndex) { + let output: CowardlyDictionary = {}; + let uuids = index.byKind.sequences; + uuids.map(uuid => { + assertUuid("sequences", uuid); + let sequence = index.references[uuid]; + if (sequence && isTaggedSequence(sequence) && sequence.body.id) { + output[sequence.body.id] = sequence; + } + }); + return output; +} + +export function indexRegimenById(index: ResourceIndex) { + let output: CowardlyDictionary = {}; + + let uuids = index.byKind.regimens; + uuids.map(uuid => { + assertUuid("regimens", uuid); + let regimen = index.references[uuid]; + if (regimen && isTaggedRegimen(regimen) && regimen.body.id) { + output[regimen.body.id] = regimen; + } + }); + return output; +} + +export function indexFarmEventById(index: ResourceIndex) { + let output: CowardlyDictionary = {}; + + let uuids = index.byKind.farm_events; + uuids.map(uuid => { + assertUuid("farm_events", uuid); + let farmEvent = index.references[uuid]; + if (farmEvent && isTaggedFarmEvent(farmEvent) && farmEvent.body.id) { + output[farmEvent.body.id] = farmEvent; + } + }); + return output; +} + +export function indexByToolId(index: ResourceIndex) { + let output: CowardlyDictionary = {}; + + let uuids = index.byKind.tools; + uuids.map(uuid => { + assertUuid("tools", uuid); + let Tool = index.references[uuid]; + if (Tool && isTaggedTool(Tool) && Tool.body.id) { + output[Tool.body.id] = Tool; + } + }); + return output; +} + +export function indexBySlotId(index: ResourceIndex) { + let output: CowardlyDictionary = {}; + + let uuids = index.byKind.points; + uuids.map(uuid => { + assertUuid("points", uuid); + let tool_slot = index.references[uuid]; + if (tool_slot && isTaggedToolSlotPointer(tool_slot) && tool_slot.body.id) { + output[tool_slot.body.id] = tool_slot; + } + }); + return output; +} + +export function assertUuid(expected: ResourceName, actual: string | undefined) { + if (actual && !actual.startsWith(expected)) { + console.warn(` + BAD NEWS!!! You thought this was a ${expected} UUID, but here's what it + actually was: + ${actual} + `) + return false; + } else { + return true; + } +} + +export function toArray(index: ResourceIndex) { + return index.all.map(function (uuid) { + let tr = index.references[uuid]; + if (tr) { + return tr; + } else { + throw new Error("Fund bad index UUID: " + uuid); + } + }); +} + +/** Search for matching key/value pairs in the body of a resource. */ +export function where(index: ResourceIndex, + body: object): (TaggedResource | undefined)[] { + return _.where(toArray(index), { body }); +} + +/** Search for matching key/value pairs in the body of a resource. */ +export function findWhere(index: ResourceIndex, + body: object): TaggedResource | undefined { + /** TODO: Find a way to add type safety. + * currently, this method will accept any old object, which might be + * unsafe. */ + return _.findWhere(toArray(index), { body }); +} + +export function findSlotWhere(index: ResourceIndex, body: object): + TaggedToolSlotPointer | undefined { + /** TODO: Find a way to add type safety. + * currently, this method will accept any old object, which might be + * unsafe. */ + let x = _.findWhere(toArray(index), { kind: "tool_slots", body }); + return (x && isTaggedToolSlotPointer(x)) ? x : undefined; +} + +/** GIVEN: a slot UUID. + * FINDS: Tool in that slot (if any) */ +export let currentToolInSlot = (index: ResourceIndex) => + (toolSlotUUID: string): TaggedTool | undefined => { + let currentSlot = selectCurrentToolSlot(index, toolSlotUUID); + if (currentSlot + && currentSlot.kind === "points") { + let toolUUID = index + .byKindAndId[joinKindAndId("tools", currentSlot.body.tool_id)]; + let tool = index.references[toolUUID || "NOPE!"]; + if (tool && isTaggedTool(tool)) { + return tool; + } + } + }; + +/** FINDS: all tagged resources with particular ID */ +export function findAllById(i: ResourceIndex, ids: number[], k: ResourceName) { + let output: TaggedResource[] = []; + findAll(i, k).map(x => x.kind === k ? output.push(x) : "") + return output; +} + +/** FINDS: All tools that are in use. */ +export function toolsInUse(index: ResourceIndex): TaggedTool[] { + let ids = betterCompact(selectAllToolSlotPointers(index).map(ts => ts.body.tool_id)); + return findAllById(index, ids, "tools") as TaggedTool[]; +} + +export let byId = (name: ResourceName) => + (index: ResourceIndex, id: number): T | undefined => { + let tools = findAll(index, name); + let f = (x: TaggedResource) => (x.kind === name) && (x.body.id === id) + // Maybe we should add a throw here? + return tools.filter(f)[0] as T | undefined; + }; + +export function hasId(ri: ResourceIndex, k: ResourceName, id: number): boolean { + return !!ri.byKindAndId[joinKindAndId(k, id)]; +} + +export let findFarmEventById = (ri: ResourceIndex, fe_id: number) => { + let fe = byId("farm_events")(ri, fe_id); + if (fe && isTaggedFarmEvent(fe) && sanityCheck(fe)) { + return fe; + } else { + let e = new Error(`Bad farm_event id: ${fe_id}`); + throw e; + } +}; + +export let maybeFindToolById = (ri: ResourceIndex, tool_id?: number): + TaggedTool | undefined => { + let tool = tool_id && byId("tools")(ri, tool_id); + if (tool && isTaggedTool(tool) && sanityCheck(tool)) { + return tool; + } else { + return undefined; + } +}; + +export let findToolById = (ri: ResourceIndex, tool_id: number) => { + let tool = maybeFindToolById(ri, tool_id); + if (tool) { + return tool; + } else { + throw new Error("Bad tool id: " + tool_id); + } +}; + +export let findSequenceById = (ri: ResourceIndex, sequence_id: number) => { + let sequence = byId("sequences")(ri, sequence_id); + if (sequence && isTaggedSequence(sequence) && sanityCheck(sequence)) { + return sequence; + } else { + throw new Error("Bad sequence id: " + sequence_id); + } +}; + + +export let findRegimenById = (ri: ResourceIndex, regimen_id: number) => { + let regimen = byId("regimens")(ri, regimen_id); + if (regimen && isTaggedRegimen(regimen) && sanityCheck(regimen)) { + return regimen; + } else { + throw new Error("Bad regimen id: " + regimen_id); + } +}; + +export let findSlotById = byId("points"); +/** Find a Tool's corresponding Slot. */ +export let findSlotByToolId = (index: ResourceIndex, tool_id: number) => { + let tool = findToolById(index, tool_id); + let filter = (x: TaggedResource) => { + if (x && isTaggedToolSlotPointer(x)) { + return x.body.tool_id === tool_id; + } + } + let tts = where(index, { tool_id: tool.body.id }).filter(filter)[0]; + if (tts && isTaggedToolSlotPointer(tts) && sanityCheck(tts)) { + return tts; + } else { + return undefined; + } +} + +export function maybeGetSequence(index: ResourceIndex, + uuid: string | undefined): TaggedSequence | undefined { + if (uuid) { + return getSequenceByUUID(index, uuid); + } else { + return undefined; + } +} + +export function maybeGetRegimen(index: ResourceIndex, + uuid: string | undefined): TaggedRegimen | undefined { + let tr = uuid && getRegimenByUUID(index, uuid); + if (tr && isTaggedRegimen(tr)) { return tr; }; +} + +/** Unlike other findById methods, this one allows undefined (missed) values */ +export function maybeFindPlantById(index: ResourceIndex, id: number) { + let uuid = index.byKindAndId[joinKindAndId("points", id)]; + let resource = index.references[uuid || "nope"]; + if (resource && isTaggedPlantPointer(resource)) { return resource; } +} + +export function getDeviceAccountSettings(index: ResourceIndex) { + let list = index.byKind.device; + let uuid = list[0]; + let device = index.references[uuid || -1]; + if ((list.length === 1) && device && device.kind === "device") { + sanityCheck(device); + return device; + } else { + throw new Error(` + PROBLEM: Expected getDeviceAccountSettings() to return exactly 1 device. + We got some other number back, indicating a hazardous condition.`); + } +} + +export function maybeFetchUser(index: ResourceIndex): +TaggedUser | undefined { + let list = index.byKind.users; + let uuid = list[0]; + let user = index.references[uuid || -1]; + + if (user && sanityCheck(user) && list.length > 1) { + throw new Error("Index is broke. Expected exactly 1 user."); + }; + if ((list.length === 1) && user && user.kind === "users") { + return user; + } else { + return undefined; + } +} +export function getUserAccountSettings(index: ResourceIndex): TaggedUser { + let user = maybeFetchUser(index); + if (user) { + return user; + } else { + throw new Error(`PROBLEM: Expected getUserAccountSettings() to return + exactly 1 device. We got some other number back, indicating a hazardous + condition.`); + } +} + +export function all(index: ResourceIndex) { + return betterCompact(index.all.map(uuid => index.references[uuid])); +} + +/** For those times that you need to ref a tool and slot together. */ +export function joinToolsAndSlot(index: ResourceIndex): SlotWithTool[] { + return selectAllToolSlotPointers(index) + .map(function (toolSlot) { + return { + toolSlot, + tool: maybeFindToolById(index, toolSlot.body.tool_id) + } + }); +} + +export function mapToolIdToName(input: ResourceIndex) { + return selectAllTools(input) + .map(x => ({ key: "" + x.body.id, val: x.body.name })) + .reduce((x, y) => ({ ...{ [y.key]: y.val, ...x } }), {} as StringMap); +} +/** I dislike this method. */ +export function findToolBySlotId(input: ResourceIndex, tool_slot_id: number): + TaggedTool | undefined { + let wow = input + .byKind + .points + .map(x => input.references[x]) + .map((x) => { + if (x + && (x.kind === "points") + && x.body.pointer_type === "ToolSlot" + && x.body.tool_id) { + return maybeFindToolById(input, x.body.tool_id); + } else { + return undefined; + } + }) + .filter(x => x)[0]; + if (wow && wow.kind === "tools") { + return wow; + } else { + return undefined; + } +} diff --git a/frontend/src/resources/tagged_resources.ts b/frontend/src/resources/tagged_resources.ts new file mode 100644 index 000000000..431561ae5 --- /dev/null +++ b/frontend/src/resources/tagged_resources.ts @@ -0,0 +1,138 @@ +import { Sequence } from "../sequences/interfaces"; +import { Tool } from "../tools/interfaces"; +import { Regimen } from "../regimens/interfaces"; +import { FarmEvent, Crop } from "../farm_designer/interfaces"; +import { + Log, + GenericPointer, + PlantPointer, + ToolSlotPointer, +} from "../interfaces"; +import { Peripheral } from "../controls/peripherals/interfaces"; +import { User } from "../auth/interfaces"; +import { assertUuid } from "./selectors"; +import { DeviceAccountSettings } from "../devices/interfaces"; +import { isObject, isString, get } from "lodash"; +import { Image } from "../images/interfaces"; + +export type ResourceName = + | "users" + | "device" + | "farm_events" + | "images" + | "logs" + | "peripherals" + | "crops" + | "points" + | "regimens" + | "sequences" + | "tools" + | "users"; + +export interface TaggedResourceBase { + kind: ResourceName; + /** Unique identifier and index key. + * We can't use the object's `id` attribute as a local index key because + * unsaved objects don't have one. + */ + uuid: string; + body: object; + dirty?: boolean | undefined; + saving?: boolean | undefined; +} + +export interface Resource + extends TaggedResourceBase { + kind: T; + body: U; +} + +export type TaggedResource = + | TaggedCrop + | TaggedDevice + | TaggedFarmEvent + | TaggedGenericPointer + | TaggedImage + | TaggedLog + | TaggedPeripheral + | TaggedPlantPointer + | TaggedRegimen + | TaggedSequence + | TaggedTool + | TaggedToolSlotPointer + | TaggedUser; + +export type TaggedRegimen = Resource<"regimens", Regimen>; +export type TaggedTool = Resource<"tools", Tool>; +export type TaggedSequence = Resource<"sequences", Sequence>; +export type TaggedCrop = Resource<"crops", Crop>; +export type TaggedFarmEvent = Resource<"farm_events", FarmEvent>; +export type TaggedImage = Resource<"images", Image>; +export type TaggedLog = Resource<"logs", Log>; +export type TaggedPeripheral = Resource<"peripherals", Peripheral>; +export type TaggedGenericPointer = Resource<"points", GenericPointer>; +export type TaggedPlantPointer = Resource<"points", PlantPointer>; +export type TaggedToolSlotPointer = Resource<"points", ToolSlotPointer>; +export type TaggedUser = Resource<"users", User>; +export type TaggedDevice = Resource<"device", DeviceAccountSettings>; + +/** Spot check to be certain a TaggedResource is what it says it is. */ +export function sanityCheck(x: object) { + if (isTaggedResource(x)) { + assertUuid(x.kind, x.uuid); + return true; + } else { + throw new Error("Bad kind, uuid, or body: " + JSON.stringify(x)); + } +} + +export function isTaggedResource(x: object): x is TaggedResource { + return (isObject(x) + && isString(get(x, "kind")) + && isString(get(x, "uuid")) + && isObject(get(x, "body"))) +} + +let is = (r: ResourceName) => function isOfTag(x: object): x is TaggedResource { + let safe = (sanityCheck(x) && isTaggedResource(x) && x.kind == r); + if (!safe) { + if (x) { + throw new Error("Possible bad index"); + } + } + return safe; +}; + +export type PointerType = + | TaggedToolSlotPointer + | TaggedGenericPointer + | TaggedPlantPointer; + +function isTaggedPoint(x: any): x is PointerType { + return (is("points")(x)) && (x.kind === "points"); +} + +export let isTaggedRegimen = + (x: object): x is TaggedRegimen => is("regimens")(x); +export let isTaggedSequence = + (x: object): x is TaggedSequence => is("sequences")(x); +export let isTaggedTool = + (x: object): x is TaggedTool => is("tools")(x); +export let isTaggedCrop = + (x: object): x is TaggedCrop => is("crops")(x); +export let isTaggedFarmEvent = + (x: object): x is TaggedFarmEvent => is("farm_events")(x); +export let isTaggedLog = + (x: object): x is TaggedLog => is("logs")(x); +export let isTaggedToolSlotPointer = + (x: object): x is TaggedToolSlotPointer => { + return isTaggedPoint(x) && (x.body.pointer_type === "ToolSlot") + }; +export let isTaggedPlantPointer = + (x: object): x is TaggedPlantPointer => { + return isTaggedPoint(x) && (x.body.pointer_type === "Plant") + }; +export let isTaggedGenericPointer = + (x: object): x is TaggedGenericPointer => { + return isTaggedPoint(x) && (x.body.pointer_type === "GenericPointer") + } diff --git a/frontend/src/resources/util.ts b/frontend/src/resources/util.ts new file mode 100644 index 000000000..5f8ddb048 --- /dev/null +++ b/frontend/src/resources/util.ts @@ -0,0 +1,19 @@ +import { ResourceName } from "./tagged_resources"; +import { joinKindAndId } from "./reducer"; +import { Dictionary } from "farmbot/dist"; +import { betterCompact } from "../util"; + +var count = 0; +export function generateUuid(id: number | undefined, kind: ResourceName) { + return `${joinKindAndId(kind, id)}.${count++}` +} + +export function arrayWrap(input: T | (T[])): T[] { + return _.isArray(input) ? input : [input]; +} + +export function entries(input: Dictionary): T[] { + let x = Object.keys(input).map(key => input[key]); + let y = betterCompact(x); + return y; +} diff --git a/frontend/src/routes.tsx b/frontend/src/routes.tsx new file mode 100644 index 000000000..7a90ff893 --- /dev/null +++ b/frontend/src/routes.tsx @@ -0,0 +1,287 @@ +import "./css/_index.scss"; +import * as React from "react"; +import { Provider } from "react-redux"; +import { Router, RedirectFunction, RouterState } from "react-router"; +import App from "./app"; +import { store } from "./redux/store"; +import { history } from "./history"; +import { Store } from "./redux/interfaces"; +import { ready } from "./config/actions"; +import { Session } from "./session"; +import { isMobile } from "./util"; +import { hardRefresh } from "./util"; +hardRefresh() +interface RootComponentProps { + store: Store; +} +declare const System: any; +let errorLoading = (cb: any) => function handleError(err: any) { + console.error("Dynamic page loading failed", err); + var container = document.getElementById("root"); + let stack = _.get(err, "stack", "No stack.") + if (container) { + let message = _.get(err, "message", "No message available."); + _.get(window, "Rollbar.error", (x: string) => { })(message); + container.innerHTML = (` +
+

Something went wrong!

+

We hit an internal error while rendering this page.

+

We have been notified of the issue and will investigate a solution shortly.

+
+

In the mean time, you can try the following:

+
    +
  • Refresh the page and log in again.
  • +
  • Send the error information (below) to our developer team via the + FarmBot software + forum. Including additional information (such as steps leading up + to the error) help us identify solutions more quickly.
  • +
    +
    +      
    + ${JSON.stringify({ + message, + stack: stack.split("\n").join("
    ") + }, null, " ")} +
    +
+ `); + } + sessionStorage.clear(); + if (!location.hostname.includes("localhost")) { + // Clear cache for end users, but not developers. + localStorage.clear(); + } + let y = document.querySelectorAll("link"); + for (var x = 0; x < y.length; x++) { + var element = y[x]; + element.remove(); + } +} +let controlsRoute = { + path: "app/controls", + getComponent(location: any, cb: any) { + System.import("./controls/controls.tsx").then( + (module: any) => cb(null, module.Controls) + ).catch(errorLoading(cb)); + } +}; +export class RootComponent extends React.Component { + + requireAuth(_: RouterState, replace: RedirectFunction) { + let { store } = this.props; + if (Session.get()) { // has a previous session in cache + if (store.getState().auth) { // Has session, logged in. + return; + } else { // Has session but not logged in (returning visitor). + store.dispatch(ready()); + }; + } else { // Not logged in yet. + Session.clear(true); + } + }; + + /** These methods are a way to determine how to load certain modules + * based on the device (mobile or desktop) for optimization/css purposes. + * Open to revision. + */ + maybeReplaceDesignerModules(next: RouterState, replace: RedirectFunction) { + if (next.location.pathname === "/app/designer" && !isMobile()) { + replace(`${next.location.pathname}/plants`); + } + }; + + // replaceSequencesModules(next: RouterState, replace: RedirectFunction) { + // if (next.location.pathname === "/app/sequences" && isMobile()) { + // replace(`${next.location.pathname}/`); + // } + // }; + + /* + /app => App + /app/account => Account + /app/controls => Controls + /app/device => Devices + /app/designer?p1&p2 => FarmDesigner + /app/regimens => Regimens + /app/sequences => Sequences + /app/tools => Tools + /app/404 => 404 + */ + + routes = { + component: App, + indexRoute: controlsRoute, + childRoutes: [ + { + path: "app/account", + getComponent(location: any, cb: any) { + System.import("./account/index.tsx").then( + (module: any) => cb(null, module.Account) + ).catch(errorLoading(cb)); + } + }, + controlsRoute, + { + path: "app/device", + getComponent(location: any, cb: any) { + System.import("./devices/devices.tsx").then( + (module: any) => cb(null, module.Devices) + ).catch(errorLoading(cb)); + } + }, + { + path: "app/farmware", + getComponent(location: any, cb: any) { + System.import("./farmware/index.tsx").then( + (module: any) => cb(null, module.FarmwarePage) + ).catch(errorLoading(cb)); + } + }, + { + path: "app/designer", + onEnter: this.maybeReplaceDesignerModules.bind(this), + getComponent(location: any, cb: any) { + System.import("./farm_designer/index.tsx").then( + (module: any) => cb(null, module.FarmDesigner) + ).catch(errorLoading(cb)); + }, + childRoutes: [ + { + path: "plants", + getComponent(location: any, cb: any) { + System.import("./farm_designer/plants/plant_inventory.tsx").then( + (module: any) => cb(null, module.Plants) + ).catch(errorLoading(cb)); + }, + }, + { + path: "plants/crop_search", + getComponent(location: any, cb: any) { + System.import("./farm_designer/plants/crop_catalog.tsx").then( + (module: any) => cb(null, module.CropCatalog) + ).catch(errorLoading(cb)); + }, + }, + { + path: "plants/crop_search/:crop", + getComponent(location: any, cb: any) { + System.import("./farm_designer/plants/crop_info.tsx").then( + (module: any) => cb(null, module.CropInfo) + ).catch(errorLoading(cb)); + }, + }, + { + path: "plants/crop_search/:crop/add", + getComponent(location: any, cb: any) { + System.import("./farm_designer/plants/dnd_crop_mobile.tsx").then( + (module: any) => cb(null, module.DNDCropMobile) + ).catch(errorLoading(cb)); + }, + }, + { + path: "plants/:plant_id", + getComponent(location: any, cb: any) { + System.import("./farm_designer/plants/plant_info.tsx").then( + (module: any) => cb(null, module.PlantInfo) + ).catch(errorLoading(cb)); + }, + }, + { + path: "plants/:plant_id/edit", + getComponent(location: any, cb: any) { + System.import("./farm_designer/plants/edit_plant_info.tsx").then( + (module: any) => cb(null, module.EditPlantInfo) + ).catch(errorLoading(cb)); + }, + }, + { + path: "farm_events", + getComponent(location: any, cb: any) { + System.import("./farm_designer/farm_events/farm_events.tsx").then( + (module: any) => cb(null, module.FarmEvents) + ).catch(errorLoading(cb)); + } + }, + { + path: "farm_events/add", + getComponent(location: any, cb: any) { + System.import("./farm_designer/farm_events/add_farm_event.tsx").then( + (module: any) => cb(null, module.AddFarmEvent) + ).catch(errorLoading(cb)); + } + }, + { + path: "farm_events/:farm_event_id", + getComponent(location: any, cb: any) { + System.import("./farm_designer/farm_events/edit_farm_event.tsx").then( + (module: any) => cb(null, module.EditFarmEvent) + ).catch(errorLoading(cb)); + } + } + ] + }, + { + path: "app/regimens", + getComponent(location: any, cb: any) { + if (!isMobile()) { + System.import("./regimens/index.tsx").then( + (module: any) => cb(null, module.Regimens) + ).catch(errorLoading(cb)); + } else { + System.import("./regimens/list/index.tsx").then( + (module: any) => cb(null, module.RegimensList) + ).catch(errorLoading(cb)); + } + }, + }, + { + path: "app/regimens/:regimen", + getComponent(location: any, cb: any) { + System.import("./regimens/index.tsx").then( + (module: any) => cb(null, module.Regimens) + ).catch(errorLoading(cb)); + } + }, + { + path: "app/sequences", + getComponent(location: any, cb: any) { + System.import("./sequences/sequences.tsx").then( + (module: any) => cb(null, module.Sequences) + ).catch(errorLoading(cb)); + }, + }, + { + path: "app/sequences/:sequence", + getComponent(location: any, cb: any) { + System.import("./sequences/sequences.tsx").then( + (module: any) => cb(null, module.Sequences) + ).catch(errorLoading(cb)); + }, + }, + { + path: "app/tools", + getComponent(location: any, cb: any) { + System.import("./tools/index.tsx").then( + (module: any) => cb(null, module.Tools) + ).catch(errorLoading(cb)); + } + }, + { + path: "*", + getComponent(location: any, cb: any) { + System.import("./404").then( + (module: any) => cb(null, module.FourOhFour) + ).catch(errorLoading(cb)); + } + } + ] + }; + + render() { + return + + {this.routes} + + ; + } +} diff --git a/frontend/src/sequences/actions.ts b/frontend/src/sequences/actions.ts new file mode 100644 index 000000000..161c9a93a --- /dev/null +++ b/frontend/src/sequences/actions.ts @@ -0,0 +1,97 @@ +import { CeleryNode as Step, SequenceBodyItem } from "farmbot"; +import { ChangeStepSelect, SelectSequence } from "./interfaces"; +import { DropDownItem } from "../ui"; +import { GetState } from "../redux/interfaces"; +import { edit, init, overwrite } from "../api/crud"; +import { TaggedSequence } from "../resources/tagged_resources"; +import { defensiveClone } from "../util"; + +export function pushStep(step: SequenceBodyItem, + dispatch: Function, + sequence: TaggedSequence) { + let next = defensiveClone(sequence); + next.body.body = next.body.body || []; + next.body.body.push(defensiveClone(step)) + dispatch(overwrite(sequence, next.body)); +} + +export function editCurrentSequence(dispatch: Function, seq: TaggedSequence, + update: Partial) { + dispatch(edit(seq, update)); +} + +let count = 1; +export function copySequence(payload: TaggedSequence) { + return function (dispatch: Function, getState: GetState) { + let copy = defensiveClone(payload); + copy.body.id = undefined; + copy.body.name = copy.body.name + ` copy ${count++}`; + copy.uuid = "HEY REDUCER! Set this!"; + dispatch(init(copy)); + } +} + +export function moveStep(step: Step, + from: number, + to: number) { + return function (dispatch: Function, getState: GetState) { + return { + type: "MOVE_STEP", + payload: { step, from, to } + }; + } +} + +export function changeStepSelect( + value: string | number, + index: number, + field: string): ChangeStepSelect { + return { + type: "CHANGE_STEP_SELECT", + payload: { value, index, field } + }; +} + +export function changeMoveAbsStepSelect( + index: number, + tool: DropDownItem, + step: Step) { + return { + type: "CHANGE_MOVE_ABS_STEP_SELECT", + payload: { index, tool, step } + }; +} + +// Would be nice to factor this down to fit with CHANGE_STEP +export function changeMoveAbsStepValue(value: string, + kind: string, + index: number) { + return { + type: "CHANGE_MOVE_ABS_STEP_VALUE", + payload: { value, kind, index } + }; +} + +export function updateSubSequence( + value: string | number, + index: number, + field: string, type: string): ChangeStepSelect { + return { + type: "UPDATE_SUB_SEQUENCE", + payload: { value, index, field, type } + }; +} + +export function selectSequence(uuid: string): SelectSequence { + return { + type: "SELECT_SEQUENCE", + payload: uuid + }; +} + +export function addComment(step: Step, index: number, comment: string) { + return { + type: "ADD_COMMENT", + payload: { comment, index } + }; +} diff --git a/frontend/src/sequences/color_picker.tsx b/frontend/src/sequences/color_picker.tsx new file mode 100644 index 000000000..8f8eee8a7 --- /dev/null +++ b/frontend/src/sequences/color_picker.tsx @@ -0,0 +1,33 @@ +import * as React from "react"; +import { Saucer } from "../ui"; +import { Color } from "../interfaces"; +import { PickerProps, PickerState } from "./interfaces"; +import { colors } from "../util"; + +export class ColorPicker extends React.Component { + constructor() { + super(); + this.state = { isOpen: false }; + } + + render() { + let actual = this.props.current; + let cb = this.props.onChange || function () { }; + let isOpen = this.state.isOpen ? "active" : ""; + + function renderColors(color: Color, key: number) { + let isActive = color === actual; + return
cb(color)} > + +
; + } + + return
{ this.setState({ isOpen: !this.state.isOpen }); }}> + +
+ {colors.map(renderColors)} +
+
; + }; +} diff --git a/frontend/src/sequences/inputs/__tests__/input_default_test.tsx b/frontend/src/sequences/inputs/__tests__/input_default_test.tsx new file mode 100644 index 000000000..bf223a42c --- /dev/null +++ b/frontend/src/sequences/inputs/__tests__/input_default_test.tsx @@ -0,0 +1,70 @@ +jest.unmock("../../step_tiles/index"); +import * as React from "react"; +import { InputDefault } from "../input_default"; +import { mount } from "enzyme"; +import { TaggedSequence } from "../../../resources/tagged_resources"; +import { MoveAbsolute } from "farmbot/dist"; +import { updateStep } from "../../step_tiles/index"; +import { fakeState } from "../../../__test_support__/fake_state"; +import { Wrapper } from "../../../__test_support__/wrapper"; + +describe("", () => { + it("updates the step", () => { + let dispatcher = jest.fn(); + let state = fakeState(); + let step: MoveAbsolute = { + "kind": "move_absolute", + "args": { + "location": { + "kind": "coordinate", + "args": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "offset": { + "kind": "coordinate", + "args": { + "x": 0, + "y": 0, + "z": 0 + } + }, + "speed": 800 + } + }; + + let tr: TaggedSequence = { + "kind": "sequences", + "body": { + "id": 74, + "name": "Goto 0, 0, 0", + "color": "gray", + "body": [step], + "args": { + "version": 4 + }, + "kind": "sequence" + }, + "uuid": "sequences.74.145" + }; + let c = mount( + + ); + let x: jest.Mock<{}> = (updateStep as any).mock; + let input = c.find("input").first(); + input.simulate("change"); + expect(dispatcher.mock.calls.length).toEqual(1); + let action = dispatcher.mock.calls[0][0]; + let { payload } = action; + expect(action.type).toEqual("OVERWRITE_RESOURCE"); + expect(payload.uuid).toContain("sequences"); + expect(payload.update.name).toEqual(tr.body.name); + }); +}); diff --git a/frontend/src/sequences/inputs/input_default.tsx b/frontend/src/sequences/inputs/input_default.tsx new file mode 100644 index 000000000..09fe53934 --- /dev/null +++ b/frontend/src/sequences/inputs/input_default.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; +import { updateStep } from "../step_tiles/index"; +import { isString, isNumber } from "lodash"; +import { StepInputProps } from "../interfaces"; + +export function InputDefault({ + step, + field, + dispatch, + sequence, + type_, + index +}: StepInputProps) { + let raw = (step.args as any)[field]; + let notUndefied = (isString(raw) || isNumber(raw)); + let val = notUndefied ? raw : ""; + + return ; +} diff --git a/frontend/src/sequences/inputs/input_unknown.tsx b/frontend/src/sequences/inputs/input_unknown.tsx new file mode 100644 index 000000000..a71cfda7b --- /dev/null +++ b/frontend/src/sequences/inputs/input_unknown.tsx @@ -0,0 +1,7 @@ +import * as React from "react"; +import { StepInputProps } from "../interfaces"; + +export function InputUnknown({ field }: StepInputProps) { + return ; +} diff --git a/frontend/src/sequences/inputs/step_input_box.tsx b/frontend/src/sequences/inputs/step_input_box.tsx new file mode 100644 index 000000000..1cffc6b04 --- /dev/null +++ b/frontend/src/sequences/inputs/step_input_box.tsx @@ -0,0 +1,23 @@ +import * as React from "react"; +import { InputUnknown } from "./input_unknown"; +import { InputDefault } from "./input_default"; +import { StepInputProps } from "../interfaces"; + +type ArgType = "speed" | "pin_number" | "pin_value" | "pin_mode" | "operator" + | "x" | "y" | "z" | "stub" | "variable" | "label" | "milliseconds" | "message" + | "lhs" | "op" | "rhs" | "sequence_id" | "location"; + +export function StepInputBox(props: StepInputProps) { + switch (props.field) { + case "label": case "lhs": case "message": case "milliseconds": case "op": + case "pin_mode": case "pin_number": case "pin_value": case "rhs": + case "sequence_id": + case "x": case "y": case "z": + return ; + // This is a stub due to some bugs found in the 4.0.0 release. + case "speed": + return ; + default: + return ; + } +}; diff --git a/frontend/src/sequences/interfaces.ts b/frontend/src/sequences/interfaces.ts new file mode 100644 index 000000000..dec8a5fad --- /dev/null +++ b/frontend/src/sequences/interfaces.ts @@ -0,0 +1,163 @@ +import { Color } from "../interfaces"; +import { AuthState } from "../auth/interfaces"; +import { + Sequence as CeleryScriptSequence, + SequenceBodyItem, + LegalArgString +} from "farmbot"; +import { StepMoveDataXfer, StepSpliceDataXfer } from "../draggable/interfaces"; +import { + TaggedSequence, + TaggedTool, + TaggedToolSlotPointer +} from "../resources/tagged_resources"; +import { ResourceIndex } from "../resources/interfaces"; +import { JSXChildren } from "../util"; + +export interface Props { + dispatch: Function; + sequences: TaggedSequence[]; + tools: TaggedTool[]; + slots: TaggedToolSlotPointer[]; + sequence: TaggedSequence | undefined; + auth: AuthState | undefined; + resources: ResourceIndex; +} + +export interface SequenceEditorMiddleProps { + dispatch: Function; + sequence: TaggedSequence | undefined; + /** @deprecated Use props.resources now. */ + sequences: TaggedSequence[]; + /** @deprecated Use props.resources now. */ + tools: TaggedTool[]; + /** @deprecated Use props.resources now. */ + slots: TaggedToolSlotPointer[]; + resources: ResourceIndex; +} + +export interface ActiveMiddleProps extends SequenceEditorMiddleProps { + sequence: TaggedSequence; +} + +export type CHANNEL_NAME = "toast" | "ticker"; + +export const NUMERIC_FIELDS = ["milliseconds", "pin_mode", "pin_number", + "pin_value", "rhs", "sequence_id", "speed", "x", "y", "z"]; + +export interface Sequence extends CeleryScriptSequence { + id?: number; + color: Color; + name: string; +} + +export interface SequenceReducerState { + current: string | undefined; +} + +export interface SequencesListProps { + sequences: TaggedSequence[]; + dispatch: Function; + auth: AuthState | undefined; +} + +export interface SequencesListState { + searchTerm: string; +} + +/** Used when dispatching an updated message type. */ +export interface MessageParams { + value: string | number; + index: number; +} + +export interface PickerProps { + current: Color; + onChange?: (color: Color) => any; +} + +export interface PickerState { + isOpen: boolean; +} + +export interface MoveAbsState { + isToolSelected: boolean; +} + +export interface StepButtonParams { + current: TaggedSequence | undefined; + step: SequenceBodyItem; + dispatch: Function; + children?: JSXChildren; + color: "blue" + | "green" + | "orange" + | "yellow" + | "brown" + | "red" + | "purple" + | "pink" + | "gray"; +} + +export interface CopyParams { + dispatch: Function; + step: SequenceBodyItem; +} + +export interface RemoveParams { + index: number; + dispatch: Function; +} + +export interface StepInputProps { + step: SequenceBodyItem; + sequence: TaggedSequence; + field: LegalArgString; + dispatch: Function; + type_?: "text" | "hidden" | undefined; + index: number; +} + +export interface StepTitleBarProps { + step: SequenceBodyItem; + index: number; + dispatch: Function; +} + +export type CHANGE_STEP = "CHANGE_STEP"; + +export type CHANGE_STEP_SELECT = "CHANGE_STEP_SELECT" | "UPDATE_SUB_SEQUENCE"; + +export interface ChangeStepSelect { + type: CHANGE_STEP_SELECT; + payload: { + value: number | string; + index: number; + field: string; + type?: string; + }; +} + +export interface SelectSequence { + type: "SELECT_SEQUENCE"; + payload: string; +} + +export type DataXferObj = StepMoveDataXfer | StepSpliceDataXfer; + +export type dispatcher = (a: Function | { type: string }) => DataXferObj; + +export interface StepParams { + currentSequence: TaggedSequence; + currentStep: SequenceBodyItem; + dispatch: Function; + index: number; + /** @deprecated Use props.resources now. */ + sequences: TaggedSequence[]; + /** @deprecated Use props.resources now. */ + tools: TaggedTool[]; + /** @deprecated Use props.resources now. */ + slots: TaggedToolSlotPointer[]; + resources: ResourceIndex; +} diff --git a/frontend/src/sequences/mobile_nav.tsx b/frontend/src/sequences/mobile_nav.tsx new file mode 100644 index 000000000..ab3e955b6 --- /dev/null +++ b/frontend/src/sequences/mobile_nav.tsx @@ -0,0 +1,18 @@ +import * as React from "react"; +import * as _ from "lodash"; +import { history } from "../history"; + +export function MobileSequencesNav(props: {}) { + // TODO: This is definitely not right, figure out query objects + let name = history.getCurrentLocation().pathname.split("/")[3]; + return ; +} diff --git a/frontend/src/sequences/reducer.ts b/frontend/src/sequences/reducer.ts new file mode 100644 index 000000000..1a34e4a85 --- /dev/null +++ b/frontend/src/sequences/reducer.ts @@ -0,0 +1,32 @@ +import { SequenceReducerState } from "./interfaces"; +import { generateReducer } from "../redux/generate_reducer"; +import { TaggedResource } from "../resources/tagged_resources"; +import { Actions } from "../constants"; + +export const initialState: SequenceReducerState = { + current: undefined +}; + +export let sequenceReducer = generateReducer(initialState) + .add(Actions.DESTROY_RESOURCE_OK, (s, { payload }) => { + switch (payload.uuid) { + case s.current: + s.current = undefined; + break; + } + return s; + }) + .add(Actions.INIT_RESOURCE, (s, { payload }) => { + if (payload.kind === "sequences") { + s.current = payload.uuid; + } + return s; + }) + .add("SELECT_SEQUENCE", function (s, { payload }) { + s.current = payload; + return s; + }) + .add("RESOURCE_READY", function (s, a) { + s.current = undefined; + return s; + }); diff --git a/frontend/src/sequences/sequence_editor_middle.tsx b/frontend/src/sequences/sequence_editor_middle.tsx new file mode 100644 index 000000000..da8b83fda --- /dev/null +++ b/frontend/src/sequences/sequence_editor_middle.tsx @@ -0,0 +1,30 @@ +import * as React from "react"; +import { SequenceEditorMiddleProps } from "./interfaces"; +import { isTaggedSequence } from "../resources/tagged_resources"; +import { SequenceEditorMiddleInactive } from "./sequence_editor_middle_inactive"; +import { SequenceEditorMiddleActive } from "./sequence_editor_middle_active"; + +export class SequenceEditorMiddle + extends React.Component { + render() { + let { + dispatch, + sequence, + sequences, + tools, + slots, + resources + } = this.props; + if (sequence && isTaggedSequence(sequence)) { + return ; + } else { + return ; + } + } +} diff --git a/frontend/src/sequences/sequence_editor_middle_active.tsx b/frontend/src/sequences/sequence_editor_middle_active.tsx new file mode 100644 index 000000000..b9fa670ed --- /dev/null +++ b/frontend/src/sequences/sequence_editor_middle_active.tsx @@ -0,0 +1,145 @@ +import * as React from "react"; +import { SequenceBodyItem, LegalSequenceKind } from "farmbot"; +import { DataXferObj, ActiveMiddleProps } from "./interfaces"; +import { execSequence } from "../devices/actions"; +import { editCurrentSequence } from "./actions"; +import { renderCeleryNode, splice, move } from "./step_tiles/index"; +import { ColorPicker } from "./color_picker"; +import { t } from "i18next"; +import { BlurableInput, Row, Col, SaveBtn, ToolTip } from "../ui"; +import { DropArea } from "../draggable/drop_area"; +import { stepGet } from "../draggable/actions"; +import { pushStep } from "./actions"; +import { StepDragger, NULL_DRAGGER_ID } from "../draggable/step_dragger"; +import { copySequence } from "./actions"; +import { TaggedSequence } from "../resources/tagged_resources"; +import { save, edit, destroy } from "../api/crud"; +import { GetState } from "../redux/interfaces"; +import { ToolTips } from "../constants"; + +let onDrop = (index: number, dispatch: Function, sequence: TaggedSequence) => + (key: string) => { + dispatch(function (dispatch: Function, getState: GetState) { + let dataXferObj = dispatch(stepGet(key)); + let step = dataXferObj.value; + switch (dataXferObj.intent) { + case "step_splice": + return dispatch(splice({ step, sequence, index })); + case "step_move": + let action = + move({ step, sequence, to: index, from: dataXferObj.draggerId }); + return dispatch(action); + default: + throw new Error("Got unexpected data transfer object."); + } + }); + }; + +let copy = function (dispatch: Function, sequence: TaggedSequence) { + return (e: React.SyntheticEvent) => + dispatch(copySequence(sequence)); +}; + +export let performSeq = (dispatch: Function, s: TaggedSequence) => { + return () => { + dispatch(save(s.uuid)).then(() => execSequence(s.body)); + }; +}; + +export class SequenceEditorMiddleActive + extends React.Component { + render() { + let { sequences, dispatch, tools, sequence, slots, resources } = this.props; + let fixThisToo = function (key: string) { + let xfer = dispatch(stepGet(key)) as DataXferObj; + if (xfer.draggerId === NULL_DRAGGER_ID) { + pushStep(xfer.value, dispatch, sequence); + } else { + pushStep(xfer.value, dispatch, sequence); + }; + }; + + let isSaving = sequence.saving; + let isDirty = sequence.dirty; + let isSaved = !isSaving && !isDirty; + + return
+

+ {t("Sequence Editor")} +

+ + { dispatch(save(sequence.uuid)); }} + /> + + + + + + { + dispatch(edit(sequence, { name: e.currentTarget.value })) + }} /> + + editCurrentSequence(dispatch, sequence, { color })} /> + + {(sequence.body.body || []).map((currentStep: SequenceBodyItem, index, arr) => { + /** HACK: If we wrote `key={index}` for this iterator, React's diff + * algorithm (probably?) loses track of which step has changed (and + * sometimes even mix up the state of completely different steps). + * To get around this, we add a `uuid` property to Steps that + * is guaranteed to be unique and allows React to diff the list + * correctly. + */ + let wow = (currentStep as any).uuid || index; + let currentSequence = sequence; + return
+ + + {renderCeleryNode(currentStep.kind as LegalSequenceKind, { + currentStep, + index, + dispatch: dispatch, + sequences: sequences, + currentSequence, + slots, + tools, + resources + })} + +
; + })} + + + + {t("DRAG COMMAND HERE")} + + + +
; + } +} diff --git a/frontend/src/sequences/sequence_editor_middle_inactive.tsx b/frontend/src/sequences/sequence_editor_middle_inactive.tsx new file mode 100644 index 000000000..c80ddd160 --- /dev/null +++ b/frontend/src/sequences/sequence_editor_middle_inactive.tsx @@ -0,0 +1,11 @@ +import * as React from "react"; +import { Col } from "../ui/index"; +import { t } from "i18next"; + +export function SequenceEditorMiddleInactive(props: {}) { + return +

+ {t("No sequence selected.")} +

+ ; +} diff --git a/frontend/src/sequences/sequences.tsx b/frontend/src/sequences/sequences.tsx new file mode 100644 index 000000000..ab629a31a --- /dev/null +++ b/frontend/src/sequences/sequences.tsx @@ -0,0 +1,41 @@ +import * as React from "react"; +import { SequencesList } from "./sequences_list"; +import { StepButtonCluster } from "./step_button_cluster"; +import { SequenceEditorMiddle } from "./sequence_editor_middle"; +import { MobileSequencesNav } from "./mobile_nav"; +import { connect } from "react-redux"; +import { isMobile } from "../util"; +import { Page, Col } from "../ui/index"; +import { Props } from "./interfaces"; +import { mapStateToProps } from "./state_to_props"; + +@connect(mapStateToProps) +export class Sequences extends React.Component { + render() { + return + + + + + + + {isMobile() && } + + + + ; + } +}; diff --git a/frontend/src/sequences/sequences_list.tsx b/frontend/src/sequences/sequences_list.tsx new file mode 100644 index 000000000..7400017d3 --- /dev/null +++ b/frontend/src/sequences/sequences_list.tsx @@ -0,0 +1,97 @@ +import * as React from "react"; +import { selectSequence } from "./actions"; +import { SequencesListProps, SequencesListState } from "./interfaces"; +import { isMobile, sortResourcesById } from "../util"; +import { Link } from "react-router"; +import { Row, Col, ToolTip } from "../ui/index"; +import { TaggedSequence } from "../resources/tagged_resources"; +import { init } from "../api/crud"; +import { ToolTips } from "../constants"; +import { t } from "i18next"; + +let buttonList = (dispatch: Function) => + (ts: TaggedSequence, index: number) => { + let css = [ + "fb-button", + "block-wrapper", + "block", + "full-width", + "text-left", + `${ts.body.color || "purple"}`, + "block-header"].join(" "); + let click = () => { dispatch(selectSequence(ts.uuid)); }; + let name = ts.body.name + (ts.dirty ? "*" : ""); + let { uuid } = ts; + if (isMobile()) { + return + {name} + ; + } else { + return ; + } + }; + +export class SequencesList extends + React.Component { + + state: SequencesListState = { + searchTerm: "" + }; + + onChange = (e: React.SyntheticEvent) => { + this.setState({ searchTerm: e.currentTarget.value }); + } + + emptySequence = (): TaggedSequence => { + return { + kind: "sequences", + uuid: "REDUCER_MUST_CHANGE_THIS", + body: { + name: "new sequence " + (this.props.sequences.length + 1), + args: { version: -999 }, + color: "gray", + kind: "sequence", + body: [] + } + } + } + + render() { + let { sequences, dispatch } = this.props; + let searchTerm = this.state.searchTerm.toLowerCase(); + + return
+

+ {t("Sequences")} +

+ + + + + + { + sortResourcesById(sequences) + .filter(seq => seq.body.name.toLowerCase().includes(searchTerm)) + .map(buttonList(dispatch)) + } + + +
; + } +} diff --git a/frontend/src/sequences/state_to_props.ts b/frontend/src/sequences/state_to_props.ts new file mode 100644 index 000000000..d67928e33 --- /dev/null +++ b/frontend/src/sequences/state_to_props.ts @@ -0,0 +1,21 @@ +import { Everything } from "../interfaces"; +import { Props } from "./interfaces"; +import { + selectAllSequences, + selectAllTools, + findSequence, + selectAllToolSlotPointers +} from "../resources/selectors"; + +export function mapStateToProps(props: Everything): Props { + let uuid = props.resources.consumers.sequences.current; + return { + dispatch: props.dispatch, + sequences: selectAllSequences(props.resources.index), + tools: selectAllTools(props.resources.index), + slots: selectAllToolSlotPointers(props.resources.index), + sequence: (uuid) ? findSequence(props.resources.index, uuid) : undefined, + auth: props.auth, + resources: props.resources.index + }; +} diff --git a/frontend/src/sequences/step_button_cluster.tsx b/frontend/src/sequences/step_button_cluster.tsx new file mode 100644 index 000000000..70f768e03 --- /dev/null +++ b/frontend/src/sequences/step_button_cluster.tsx @@ -0,0 +1,167 @@ +import * as React from "react"; +import { StepButton } from "./step_buttons/index"; +import { t } from "i18next"; +import { Farmbot } from "farmbot"; +import { smoothScrollToBottom } from "../util"; +import { Row, ToolTip } from "../ui/index"; +import { TaggedSequence } from "../resources/tagged_resources"; +import { ToolTips } from "../constants"; + +interface StepButtonProps { + dispatch: Function; + current: TaggedSequence | undefined; +} + +export function StepButtonCluster({ dispatch, current }: StepButtonProps) { + const ALL_THE_BUTTONS = [ + + {t("MOVE ABSOLUTE")} + , + + {t("MOVE RELATIVE")} + , + + {t("WRITE PIN")} + , + + {t("READ PIN")} + , + + {t("WAIT")} + , + + {t("SEND MESSAGE")} + , + + {t("Find Home")} + , + + {t("IF STATEMENT")} + , + + {t("EXECUTE SEQUENCE")} + , + + {t("Run Farmware")} + , + + {t("TAKE PHOTO")} + + ]; + + return
+

+ {t("Commands")} +

+ +
+ + { + ALL_THE_BUTTONS.map(function (el, inx) { + return
{ smoothScrollToBottom(); }}> + {el} +
; + }) + } +
+
+
; +} diff --git a/frontend/src/sequences/step_buttons/index.tsx b/frontend/src/sequences/step_buttons/index.tsx new file mode 100644 index 000000000..99d82b81e --- /dev/null +++ b/frontend/src/sequences/step_buttons/index.tsx @@ -0,0 +1,38 @@ +import * as React from "react"; +import { SequenceBodyItem as Step } from "farmbot"; +import { error } from "farmbot-toastr"; +import { StepDragger, NULL_DRAGGER_ID } from "../../draggable/step_dragger"; +import { pushStep } from "../actions"; +import { StepButtonParams } from "../interfaces"; +import { Col } from "../../ui/index"; +import { TaggedSequence } from "../../resources/tagged_resources"; + +let click = (dispatch: Function, step: Step, seq: TaggedSequence | undefined) => + (event: React.FormEvent) => { + if (seq) { + pushStep(step, dispatch, seq); + } else { + error("Select a sequence first") + } + }; + +export function StepButton({ children, step, color, dispatch, current }: + StepButtonParams) { + return +
+ + + +
+ ; +} diff --git a/frontend/src/sequences/step_tiles/index.tsx b/frontend/src/sequences/step_tiles/index.tsx new file mode 100644 index 000000000..829466427 --- /dev/null +++ b/frontend/src/sequences/step_tiles/index.tsx @@ -0,0 +1,132 @@ +import * as React from "react"; +import { SequenceBodyItem as Step } from "farmbot"; +import { NUMERIC_FIELDS } from "../interfaces"; +import { ExecuteBlock } from "./tile_execute"; +import { StepParams, StepInputProps } from "../interfaces"; +import { defensiveClone, move as arrayMover } from "../../util"; +import { TileIf } from "./tile_if"; +import { TileWait } from "./tile_wait"; +import { TileMoveAbsolute } from "./tile_move_absolute"; +import { TileMoveRelative } from "./tile_move_relative"; +import { TileReadPin } from "./tile_read_pin"; +import { TileSendMessage } from "./tile_send_message"; +import { TileWritePin } from "./tile_write_pin"; +import { TileExecuteScript } from "./tile_execute_script"; +import { TileTakePhoto } from "./tile_take_photo"; +import * as _ from "lodash"; +import { CeleryNode, LegalSequenceKind, LegalArgString, If, Execute, Nothing } from "farmbot"; +import { TaggedSequence } from "../../resources/tagged_resources"; +import { overwrite } from "../../api/crud"; +import { TileFindHome } from "./tile_find_home"; + +interface MoveParams { + step: Step; + to: number; + from: number; + sequence: TaggedSequence +} + +export function move({ step, sequence, to, from }: MoveParams) { + let copy = defensiveClone(step); + let next = defensiveClone(sequence); + let seq = next.body; + seq.body = seq.body || []; + let both = [from, to]; + // WEIRD EDGE CASE: TODO: + // Works when from > to but not the other way around. + // Wish I could use one function for both cases, but don't have + // time to debug right now. + if (from > to) { + // wtf ? + seq.body = arrayMover(seq.body, from, to) + } else { + seq.body.splice(to, 0, defensiveClone(copy)); + delete seq.body[from]; + seq.body = _.compact(seq.body); + } + return overwrite(sequence, next.body); +}; + +interface CopyParams { + step: Step; + index: number; + sequence: TaggedSequence +} + +export function splice({ step, sequence, index }: CopyParams) { + let copy = defensiveClone(step); + let next = defensiveClone(sequence); + let seq = next.body; + seq.body = seq.body || []; + seq.body.splice(index, 0, copy); + return overwrite(sequence, next.body); +}; + +interface RemoveParams { + index: number; + dispatch: Function; + sequence: TaggedSequence; +} + +export function remove({ dispatch, index, sequence }: RemoveParams) { + let original = sequence; + let update = defensiveClone(original); + update.body.body = (update.body.body || []); + delete update.body.body[index]; + update.body.body = _.compact(update.body.body); + dispatch(overwrite(original, update.body)); +} + +export function updateStep(props: StepInputProps) { + return (e: React.FormEvent) => { + let { dispatch, step, index, sequence, field } = props; + let stepCopy = defensiveClone(step); + let seqCopy = defensiveClone(sequence).body; + let val = e.currentTarget.value; + let isNumeric = NUMERIC_FIELDS.includes(field); + seqCopy.body = seqCopy.body || []; + + if (isNumeric) { + numericNonsense(val, stepCopy, field); + } else { + _.assign(stepCopy.args, { [field]: val }); + }; + + seqCopy.body[index] = stepCopy; + dispatch(overwrite(sequence, seqCopy)); + }; +}; + +function numericNonsense(val: string, copy: CeleryNode, field: LegalArgString) { + // Fix negative number issues. + let num = (val == "-") ? "-" : parseInt(val, 10); + return _.assign(copy.args, { [field]: num }); +} + +export function renderCeleryNode(kind: LegalSequenceKind, props: StepParams) { + switch (props.currentStep.kind) { + case "execute": return ; + case "_if": return ; + case "move_relative": return ; + case "move_absolute": return ; + case "write_pin": return ; + case "wait": return ; + case "send_message": return ; + case "read_pin": return ; + case "execute_script": return ; + case "take_photo": return ; + case "find_home": return ; + default: return

? Unknown step ?
; + } +}; + +let checkBranch = (branch: Execute | Nothing, + step: If, + sequence: TaggedSequence) => { + return (branch.kind === "execute") + && (branch.args.sequence_id === sequence.body.id); +} +export function isRecursive(step: If, sequence: TaggedSequence) { + return checkBranch(step.args._else, step, sequence) + || checkBranch(step.args._then, step, sequence); +} diff --git a/frontend/src/sequences/step_tiles/step_title_bar.tsx b/frontend/src/sequences/step_tiles/step_title_bar.tsx new file mode 100644 index 000000000..806a1d51c --- /dev/null +++ b/frontend/src/sequences/step_tiles/step_title_bar.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { SequenceBodyItem as Step, Dictionary } from "farmbot"; +import { addComment } from "../actions"; +import { t } from "i18next"; +import { CowardlyDictionary } from "../../util"; + +function translate(input: Step): string { + // We load translations async. If I put this const outside of the function, + // i18next might not have the correct translation loaded. To get around this, + // I had to put the translations in the function. + const TRANSLATIONS: CowardlyDictionary = { + "move_absolute": t("Move Absolute"), + "move_relative": t("Move Relative"), + "write_pin": t("Write Pin"), + "read_pin": t("Read Pin"), + "wait": t("Wait"), + "send_message": t("Send Message"), + "_if": t("If Statement"), + "execute": t("Execute Sequence"), + "execute_script": t("Run Farmware"), + "take_photo": t("Take a Photo"), + "find_home": t("Find Home") + }; + + return TRANSLATIONS[input.kind] || input.kind; + +} + +interface StepTitleBarProps { + step: Step; + index: number; + dispatch: Function; +} + +export class StepTitleBar extends React.Component { + + onChange(e: React.FormEvent) { + let target = e.currentTarget; + let { step, index, dispatch } = this.props; + dispatch(addComment(step, index, target.value)); + } + + render() { + return ; + }; +}; diff --git a/frontend/src/sequences/step_tiles/tile_execute.tsx b/frontend/src/sequences/step_tiles/tile_execute.tsx new file mode 100644 index 000000000..200fc21b6 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_execute.tsx @@ -0,0 +1,119 @@ +import * as React from "react"; +import { splice, remove } from "../step_tiles/index"; +import { StepParams } from "../interfaces"; +import { t } from "i18next"; +import { DropDownItem } from "../../ui"; +import { selectAllSequences, findSequenceById } from "../../resources/selectors"; +import { Execute } from "farmbot/dist"; +import { TaggedSequence } from "../../resources/tagged_resources"; +import { ResourceIndex } from "../../resources/interfaces"; +import { defensiveClone } from "../../util"; +import { overwrite } from "../../api/crud"; +import { FBSelect } from "../../ui/new_fb_select"; + +export function ExecuteBlock(p: StepParams) { + if (p.currentStep.kind === "execute") { + return ; + } else { + throw new Error("Thats not an execute block!"); + } +} + +interface ExecBlockParams { + currentStep: Execute; + currentSequence: TaggedSequence; + dispatch: Function; + index: number; + resources: ResourceIndex; +} +export class RefactoredExecuteBlock extends React.Component { + changeSelection = (input: DropDownItem) => { + let { props } = this; + if (_.isNumber(input.value)) { + let step2 = defensiveClone(props.currentStep); + step2.args.sequence_id = input.value; + let seq2 = defensiveClone(props.currentSequence); + seq2.body.body = seq2.body.body || []; + seq2.body.body[props.index] = step2; + props.dispatch(overwrite(props.currentSequence, seq2.body)); + } else { + throw new Error("Never not a number;"); + } + } + + sequenceDropDownList = () => { + let p = this.props; + let output: DropDownItem[] = []; + selectAllSequences(p.resources) + .map(function (x) { + let { id, name } = x.body; + if (_.isNumber(id) && (id !== p.currentStep.args.sequence_id)) { + output.push({ label: name, value: id }) + } + }) + return output; + } + + SequenceSelectBox = () => { + return + } + + selectedSequence = () => { + let p = this.props; + let { sequence_id } = p.currentStep.args; + if (sequence_id) { + let s = findSequenceById(p.resources, sequence_id); + return { label: s.body.name, value: (s.body.id as number) } + } else { + return undefined; + } + } + + render() { + let props = this.props; + let { dispatch, currentStep, index, currentSequence } = props; + return (
+
+
+
+
+ + + dispatch(splice({ + index, + step: currentStep, + sequence: currentSequence + }))} /> + remove({ + dispatch, + index, + sequence: currentSequence + })} /> +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
); + } +} diff --git a/frontend/src/sequences/step_tiles/tile_execute_script.tsx b/frontend/src/sequences/step_tiles/tile_execute_script.tsx new file mode 100644 index 000000000..6fb747e3b --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_execute_script.tsx @@ -0,0 +1,51 @@ +import * as React from "react"; +import { StepParams } from "../interfaces"; +import { StepTitleBar } from "./step_title_bar"; +import { Help } from "../../ui"; +import { splice, remove } from "./index"; +import { t } from "i18next"; +import { ToolTips } from "../../constants"; + +export function TileExecuteScript({ dispatch, currentStep, index, currentSequence }: StepParams) { + if (currentStep.kind === "execute_script") { + return (
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + index, + sequence: currentSequence + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+ +
+
+
+
+
+ + + NOTE: Support for customizable scripts is coming soon. +
+
+
+
+
+
+
); + } else { + return

ERROR

; + } +} diff --git a/frontend/src/sequences/step_tiles/tile_find_home.tsx b/frontend/src/sequences/step_tiles/tile_find_home.tsx new file mode 100644 index 000000000..a6f225fb2 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_find_home.tsx @@ -0,0 +1,109 @@ +import * as React from "react"; +import { t } from "i18next"; +import { splice, remove } from "./index"; +import { StepTitleBar } from "./step_title_bar"; +import { Help } from "../../ui"; +import { FindHome, ALLOWED_AXIS } from "farmbot"; +import * as _ from "lodash"; +import { StepParams } from "../interfaces"; +import { TaggedSequence } from "../../resources/tagged_resources"; +import { ResourceIndex } from "../../resources/interfaces"; +import { edit, overwrite } from "../../api/crud"; +import { defensiveClone } from "../../util"; +import { ToolTips } from "../../constants"; + +export function TileFindHome(props: StepParams) { + if (props.currentStep.kind === "find_home") { + return ; + } else { + throw new Error("TileFindHome expects send_message"); + } +} +interface FindHomeParams { + currentStep: FindHome; + currentSequence: TaggedSequence; + dispatch: Function; + index: number; + resources: ResourceIndex; +} + +const AXIS_CHOICES: ALLOWED_AXIS[] = ["x", "y", "z", "all"]; + +class InnerFindHome extends React.Component { + + isSelected = (axis: ALLOWED_AXIS) => { + return this.props.currentStep.args.axis === axis; + }; + + handleUpdate = (axis: ALLOWED_AXIS) => { + let update = defensiveClone(this.props.currentStep); + let nextSequence = defensiveClone(this.props.currentSequence).body; + update.args.axis = axis; + (nextSequence.body || [])[this.props.index] = update; + this.props.dispatch(overwrite(this.props.currentSequence, nextSequence)); + } + + render() { + let { dispatch, index, currentStep, currentSequence } = this.props; + + return
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + sequence: currentSequence, + index + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+
+
+
+ {AXIS_CHOICES.map((axis, index) => { + return
+ +
; + })} +
+
+
+
+
+
+
+
+
+
; + } +} diff --git a/frontend/src/sequences/step_tiles/tile_if.tsx b/frontend/src/sequences/step_tiles/tile_if.tsx new file mode 100644 index 000000000..fb3ef5f5a --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_if.tsx @@ -0,0 +1,16 @@ +import * as React from "react"; +import { StepParams } from "../interfaces"; +import { InnerIf } from "./tile_if/index"; + +export function TileIf(props: StepParams) { + if (props.currentStep.kind === "_if") { + return ; + } else { + return

Expected "_if" node

; + } +} diff --git a/frontend/src/sequences/step_tiles/tile_if/else.tsx b/frontend/src/sequences/step_tiles/tile_if/else.tsx new file mode 100644 index 000000000..60c50051a --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_if/else.tsx @@ -0,0 +1,26 @@ +import * as React from "react"; +import { + IfParams, + seqDropDown, + IfBlockDropDownHandler +} from "./index"; +import { t } from "i18next"; +import { FBSelect } from "../../../ui/new_fb_select"; + +export function Else(props: IfParams) { + let { onChange, selectedItem } = IfBlockDropDownHandler(props, "_else"); + return
+
+

ELSE...

+
+
+ + +
+
; +} diff --git a/frontend/src/sequences/step_tiles/tile_if/if.tsx b/frontend/src/sequences/step_tiles/tile_if/if.tsx new file mode 100644 index 000000000..88ff48c0d --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_if/if.tsx @@ -0,0 +1,71 @@ +import * as React from "react"; +import { IfParams, LHSOptions, operatorOptions } from "./index"; +import { t } from "i18next"; +import { StepInputBox } from "../../inputs/step_input_box"; +import { FBSelect, NULL_CHOICE } from "../../../ui/new_fb_select"; +import { DropDownItem } from "../../../ui/fb_select"; +import { defensiveClone } from "../../../util"; +import { overwrite } from "../../../api/crud"; +import { Col } from "../../../ui/index"; +import { ALLOWED_OPS } from "farmbot/dist"; + +const IS_UNDEFINED: ALLOWED_OPS = "is_undefined"; +const label_ops: Record = { + "is_undefined": "is unknown", + ">": "is greater than", + "<": "is less than", + "is": "is", + "not": "is not" +} +export function If_(props: IfParams) { + let { + dispatch, + currentStep, + index + } = props; + let step = props.currentStep; + let sequence = props.currentSequence; + let { op, lhs } = currentStep.args; + function updateField(field: "lhs" | "op") { + return (e: DropDownItem) => { + let stepCopy = defensiveClone(step); + let seqCopy = defensiveClone(sequence).body; + let val = e.value; + seqCopy.body = seqCopy.body || []; + if (_.isString(val)) { stepCopy.args[field] = val; } + seqCopy.body[index] = stepCopy; + dispatch(overwrite(sequence, seqCopy)); + }; + } + + return
+ +

IF...

+ + + + x.value === lhs)[0] || NULL_CHOICE} + /> + + + + + + + + + +
; +} diff --git a/frontend/src/sequences/step_tiles/tile_if/index.tsx b/frontend/src/sequences/step_tiles/tile_if/index.tsx new file mode 100644 index 000000000..05456f51d --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_if/index.tsx @@ -0,0 +1,165 @@ +import * as React from "react"; +import { t } from "i18next"; +import { DropDownItem, Help } from "../../../ui"; +import { TaggedSequence } from "../../../resources/tagged_resources"; +import { If, Execute, Nothing } from "farmbot/dist"; +import { ResourceIndex } from "../../../resources/interfaces"; +import { selectAllSequences, findSequenceById } from "../../../resources/selectors"; +import { splice, remove, isRecursive } from "../index"; +import { StepTitleBar } from "../step_title_bar"; +import { If_ } from "./if"; +import { Then } from "./then"; +import { Else } from "./else"; +import { defensiveClone } from "../../../util"; +import { overwrite } from "../../../api/crud"; +import { NULL_CHOICE } from "../../../ui/fb_select"; +import { range } from "lodash"; +import { ToolTips } from "../../../constants"; + +export interface IfParams { + currentSequence: TaggedSequence; + currentStep: If; + dispatch: Function; + index: number; + resources: ResourceIndex; +} + +export type Operator = "lhs" + | "op" + | "rhs" + | "_then" + | "_else"; + +export const LHSOptions: DropDownItem[] = [ + { value: "x", label: "X position" }, + { value: "y", label: "Y Position" }, + { value: "z", label: "Z position" } +].concat(range(0, 70).map(x => ({ value: `pin${x}`, label: `Pin ${x}` }))) + +export const operatorOptions: DropDownItem[] = [ + { value: "<", label: "is less than" }, + { value: ">", label: "is greater than" }, + { value: "is", label: "is equal to" }, + { value: "not", label: "is not equal to" }, + { value: "is_undefined", label: "is unknown" } +]; + +export function seqDropDown(i: ResourceIndex) { + let results: DropDownItem[] = []; + selectAllSequences(i) + .map(function (x) { + let { body } = x; + if (_.isNumber(body.id)) { + results.push({ label: body.name, value: body.id }); + } + }) + return results; +} + +export function initialValue(input: Execute | Nothing, index: ResourceIndex) { + switch (input.kind) { + case "execute": + let id = input.args.sequence_id; + let seq = findSequenceById(index, id).body; + if (_.isNumber(seq.id)) { + return { label: seq.name, value: seq.id } + } else { + throw new Error("Failed seq id type assertion.") + } + case "nothing": + return { label: "None", value: 0 } + default: + throw new Error("Only _else or _then"); + } +} + +export function InnerIf(props: IfParams) { + let { + index, + dispatch, + currentStep, + currentSequence + } = props; + let stuff = { dispatch, step: currentStep, sequence: currentSequence, index }; + let recursive = isRecursive(currentStep, currentSequence); + return
+
+
+
+
+ + + splice(stuff)} /> + remove(stuff)} /> + + {recursive && ( + + +  Recursive condition. + + )} +
+
+
+
+
+
+
+ + + +
+
+
+
+
+
; +} + +/** Creates a function that can be used in the `onChange` event of a _else or + * _then block in the sequence editor. + */ +export let IfBlockDropDownHandler = (props: IfParams, + key: "_else" | "_then") => { + + let { dispatch, currentSequence, currentStep, index } = props; + let step = props.currentStep; + let sequence = props.currentSequence; + let block = step.args[key]; + let selectedItem = () => { + if (block.kind === "nothing") { + return NULL_CHOICE; + } else { + let value = (block.kind === "execute") && block.args.sequence_id; + let label = value && findSequenceById(props.resources, value).body.name; + if (_.isNumber(value) && _.isString(label)) { + return { label, value } + } else { + throw new Error("Failed type assertion"); + } + } + } + + function overwriteStep(input: Execute | Nothing) { + let update = defensiveClone(step); + let nextSequence = defensiveClone(sequence).body; + update.args[key] = input; + (nextSequence.body || [])[index] = update; + dispatch(overwrite(sequence, nextSequence)); + } + + function onChange(e: DropDownItem) { + if (e.value) { + let v = _.isNumber(e.value) && e.value; + v && overwriteStep({ kind: "execute", args: { sequence_id: v } }) + } else { + overwriteStep({ kind: "nothing", args: {} }); + } + }; + + return { onChange, selectedItem }; +} diff --git a/frontend/src/sequences/step_tiles/tile_if/then.tsx b/frontend/src/sequences/step_tiles/tile_if/then.tsx new file mode 100644 index 000000000..163b6bda9 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_if/then.tsx @@ -0,0 +1,22 @@ +import * as React from "react"; +import { IfParams, seqDropDown, IfBlockDropDownHandler } from "./index"; +import { t } from "i18next"; +import { FBSelect } from "../../../ui/new_fb_select"; + +export function Then(props: IfParams) { + let { onChange, selectedItem } = IfBlockDropDownHandler(props, "_then"); + return
+
+

THEN...

+
+
+ + +
+
+} diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute.tsx b/frontend/src/sequences/step_tiles/tile_move_absolute.tsx new file mode 100644 index 000000000..662b71aed --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute.tsx @@ -0,0 +1,231 @@ +import * as React from "react"; +import { Component } from "react"; +import { StepParams } from "../interfaces"; +import { splice, remove } from "./index"; +import { MoveAbsState } from "../interfaces"; +import { + Tool, + Coordinate, + LegalSequenceKind, + Point +} from "farmbot"; +import { + Row, + Col, +} from "../../ui"; +import { StepInputBox } from "../inputs/step_input_box"; +import { t } from "i18next"; +import { StepTitleBar } from "./step_title_bar"; +import { + isTaggedSequence, + TaggedTool, + TaggedToolSlotPointer +} from "../../resources/tagged_resources"; +import { + findToolById, + findSlotByToolId, + findPointerByTypeAndId +} from "../../resources/selectors"; +import { defensiveClone, betterMerge } from "../../util"; +import { overwrite } from "../../api/crud"; +import { Xyz } from "../../devices/interfaces"; +import { TileMoveAbsSelect } from "./tile_move_absolute/select"; +import { InputBox } from "./tile_move_absolute/input_box"; +import { ToolTips } from "../../constants"; + +interface Args { + location: Tool | Coordinate | Point; + speed: number; + offset: Coordinate; +} +type LocationArg = "location" | "offset"; + +export class TileMoveAbsolute extends Component { + get resources() { return this.props.resources; } + get step() { return this.props.currentStep; } + get tool(): TaggedTool | undefined { + let l = this.args.location; + if (l && l.kind === "tool" && l.args.tool_id) { + return findToolById(this.resources, l.args.tool_id); + } + } + get tool_id() { return this.tool && this.tool.body.id; } + get slot(): TaggedToolSlotPointer | undefined { + return (this.tool_id) ? + findSlotByToolId(this.resources, this.tool_id) : undefined; + } + get args() { + // Incase we rename it later: + const MOVE_ABSOLUTE: LegalSequenceKind = "move_absolute"; + if (this.step.kind === MOVE_ABSOLUTE) { + return this.step.args; + } else { + throw new Error("Impossible celery node detected."); + } + } + get location(): Tool | Coordinate { + if (this.args.location.kind !== "point") { + return this.args.location; + } else { + throw new Error("A `point` node snuck in. Still WIP"); + } + } + + get xyzDisabled(): boolean { + let isPoint = this.args.location.kind === "point"; + let isTool = this.args.location.kind === "tool"; + return !!(isPoint || isTool); + } + + getOffsetValue = (val: Xyz) => { + return (this.args.offset.args[val] || 0).toString(); + } + + updateArgs = (update: Partial) => { + let copy = defensiveClone(this.props.currentSequence).body; + let step = (copy.body || [])[this.props.index]; + if (step && step.kind === "move_absolute") { + step.args = betterMerge(step.args, update); + this.props.dispatch(overwrite(this.props.currentSequence, copy)); + } else { + throw new Error("Impossible condition."); + } + } + + getAxisValue = (axis: Xyz): string => { + let number: number | undefined; + let l = this.args.location; + switch (l.kind) { + case "coordinate": + number = l.args[axis]; + break; + case "tool": + number = (this.slot) ? this.slot.body[axis] : undefined; + break; + case "point": + let { pointer_id, pointer_type } = l.args; + number = findPointerByTypeAndId(this.resources, + pointer_type, + pointer_id).body[axis]; + } + return (number || 0).toString(); + } + + updateInputValue = (axis: Xyz, place: LocationArg) => + (e: React.SyntheticEvent) => { + let num = parseInt(e.currentTarget.value, 10); + let update = { [place]: { args: { [axis]: num } } }; + this.updateArgs(_.merge({}, this.args, update)); + } + + render() { + let { currentStep, dispatch, index, currentSequence } = this.props; + if (currentSequence && !isTaggedSequence(currentSequence)) { + throw new Error("WHOOPS!"); + } + + return
+ + +
+ + + dispatch(splice({ + step: currentStep, + index, + sequence: currentSequence + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> +
+ +
+ {t(ToolTips.MOVE_ABSOLUTE)} +
+
+
+ +
+ + +
+ + + + this.updateArgs({ location: x })} /> + + + + {t("X (mm)")} + + + + + {t("Y (mm)")} + + + + + {t("Z (mm)")} + + + + {/* + + + */} + + + + {t("X-Offset")} + + + + + {t("Y-Offset")} + + + + + {t("Z-Offset")} + + + +
+ +
+
; + } +} diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute/format_selected_dropdown.ts b/frontend/src/sequences/step_tiles/tile_move_absolute/format_selected_dropdown.ts new file mode 100644 index 000000000..22cb7e4cb --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute/format_selected_dropdown.ts @@ -0,0 +1,45 @@ +import { ResourceIndex } from "../../../resources/interfaces"; +import { LocationData } from "./interfaces"; +import { NULL_CHOICE } from "../../../ui/index"; +import { dropDownName } from "./generate_list"; +import { + findToolById, + findPointerByTypeAndId, + findToolBySlotId +} from "../../../resources/selectors"; +import { DropDownItem } from "../../../ui/fb_select"; +import { Point, Tool } from "farmbot/dist"; + +export function formatSelectedDropdown(ri: ResourceIndex, ld: LocationData): DropDownItem { + switch (ld.kind) { + case "tool": return toolbar(ri, ld); + case "point": return point(ri, ld); + case "coordinate": default: return other(); + } +} + +function toolbar(ri: ResourceIndex, ld: Tool): DropDownItem { + let tool = findToolById(ri, ld.args.tool_id).body; + let label = dropDownName("Tool", tool.name); + return { label, value: tool.id || -999 } +} + +function point(ri: ResourceIndex, ld: Point): DropDownItem { + let p = + findPointerByTypeAndId(ri, ld.args.pointer_type, ld.args.pointer_id).body; + let label: string; + switch (p.pointer_type) { + case "ToolSlot": + let tool = p.tool_id && findToolBySlotId(ri, p.tool_id); + label = dropDownName(p.pointer_type, + tool ? ("using " + tool.body.name) : "no tool", + { x: p.x, y: p.y, z: p.z }); + break; + default: + label = dropDownName(p.pointer_type, p.name, { x: p.x, y: p.y, z: p.z }); + break; + } + return { label, value: p.id || -999 } +} + +function other() { return NULL_CHOICE; } diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute/generate_list.ts b/frontend/src/sequences/step_tiles/tile_move_absolute/generate_list.ts new file mode 100644 index 000000000..7c1a31c25 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute/generate_list.ts @@ -0,0 +1,65 @@ +import { ResourceIndex } from "../../../resources/interfaces"; +import { + selectAllPoints, + selectAllTools, + mapToolIdToName +} from "../../../resources/selectors"; +import { CowardlyDictionary } from "../../../util"; +import { PointerTypeName } from "../../../interfaces"; +import { PointerType, TaggedTool } from "../../../resources/tagged_resources"; +import { DropDownItem } from "../../../ui/index"; +import { Vector3 } from "farmbot/dist"; +import { TOOL } from "./interfaces"; + +export function generateList(input: ResourceIndex): DropDownItem[] { + let toolNameById = mapToolIdToName(input); + let SORT_KEY: keyof DropDownItem = "headingId"; + return _(selectAllPoints(input).filter(x => !!x.body.id)) + .filter(x => (x.body.pointer_type !== "ToolSlot")) + .map(formatPoint(toolNameById)) + .sortBy(SORT_KEY) + .reverse() + .concat(selectAllTools(input).map(t => formatTools(t))) + .value(); +} + +export const NAME_MAP: Record = { + "GenericPointer": "Map Point", + "Plant": "Plant", + "ToolSlot": "Tool Slot", +} + +let formatPoint = (toolNames: CowardlyDictionary) => + (p: PointerType) => { + let { id, pointer_type, name, x, y, z } = p.body; + + // Special formatting rules for tool slots + if (p.body.pointer_type === "ToolSlot") { + let tool = (p.body.tool_id && toolNames[p.body.tool_id]) || undefined; + name = tool ? `using '${tool}'` : "no tool"; + } + + return { + label: dropDownName(NAME_MAP[pointer_type], name, { x, y, z }), + value: "" + id, + headingId: pointer_type + }; + } + +let formatTools = (t: TaggedTool) => { + let { id, name } = t.body; + + return { + label: dropDownName("Tool", (name || "untitled")), + value: "" + id, + headingId: TOOL + }; +} + +/** Uniformly generate a label for things that have an X/Y/Z value. */ +export function dropDownName(kind: string, name: string, v?: Vector3) { + let formattedKind = _.get(NAME_MAP, kind, kind); + let label = `${formattedKind}: ${name || "untitled"}`; + if (v) { label += ` (${v.x}, ${v.y}, ${v.z}) `; } + return label; +} diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute/handle_select.ts b/frontend/src/sequences/step_tiles/tile_move_absolute/handle_select.ts new file mode 100644 index 000000000..96cbd508c --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute/handle_select.ts @@ -0,0 +1,38 @@ +/** Given a dropdown item and a ResourceIndex, + * figures out the corresponding Tool | Coordinate | Point */ +import { DropDownItem } from "../../../ui/index"; +import { ResourceIndex } from "../../../resources/interfaces"; +import { KnownGroupTag, LocationData, CALLBACK } from "./interfaces"; +import { findPointerByTypeAndId, findToolById } from "../../../resources/selectors"; + +/** Takes a DropDownItem and turns it into data suitable + * for MoveAbsolute["args"]["location"] */ +export let handleSelect = (index: ResourceIndex, input: DropDownItem): LocationData => { + let tag = input.headingId as KnownGroupTag; + let id = parseInt("" + input.value); + switch (tag) { + case "ToolSlot": + case "GenericPointer": + case "Plant": + let p = findPointerByTypeAndId(index, tag, id); + if (p && p.body.id) { + return { + kind: "point", + args: { pointer_type: tag, pointer_id: p.body.id } + }; + } else { + return bail("Bad point_id: " + JSON.stringify(p)); + } + case "Tool": + let tool_id = findToolById(index, id) + .body + .id || bail("No id"); + return { kind: "tool", args: { tool_id } }; + default: + return { kind: "coordinate", args: { x: 0, y: 0, z: 0 } }; + } +} + +function bail(msg: string): never { + throw new Error(msg); +} diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute/input_box.tsx b/frontend/src/sequences/step_tiles/tile_move_absolute/input_box.tsx new file mode 100644 index 000000000..923f78e70 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute/input_box.tsx @@ -0,0 +1,17 @@ +import * as React from "react"; +import { BlurableInput } from "../../../ui/blurable_input"; +import { InputBoxProps } from "./interfaces"; + +export function InputBox(p: InputBoxProps) { + return
+ + +
; +} diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute/interfaces.ts b/frontend/src/sequences/step_tiles/tile_move_absolute/interfaces.ts new file mode 100644 index 000000000..54eb8032b --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute/interfaces.ts @@ -0,0 +1,27 @@ +import { ResourceIndex } from "../../../resources/interfaces"; +import { MoveAbsolute, PointType } from "farmbot/dist"; +import { JSXChildren } from "../../../util"; +export const TOOL: "Tool" = "Tool"; + +export type CALLBACK = (out: LocationData) => void; + +export interface TileMoveAbsProps { + resources: ResourceIndex; + selectedItem: LocationData; + onChange: CALLBACK; +} + +export interface InputBoxProps { + onCommit(e: React.SyntheticEvent): void; + children?: JSXChildren; + disabled?: boolean; + name: string; + value: string; +} + +/** Union of all types found in a move_abs "args" attribute. */ +export type LocationData = MoveAbsolute["args"]["location"]; + +/** Union of all possible `headingId` values in the move abs dropdown. */ +export type KnownGroupTag = PointType | typeof TOOL; + diff --git a/frontend/src/sequences/step_tiles/tile_move_absolute/select.tsx b/frontend/src/sequences/step_tiles/tile_move_absolute/select.tsx new file mode 100644 index 000000000..6d922cf68 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_absolute/select.tsx @@ -0,0 +1,15 @@ +import * as React from "react"; +import { FBSelect } from "../../../ui/new_fb_select"; +import { generateList } from "./generate_list"; +import { handleSelect } from "./handle_select"; +import { formatSelectedDropdown } from "./format_selected_dropdown"; +import { TileMoveAbsProps } from "./interfaces"; + +export function TileMoveAbsSelect(props: TileMoveAbsProps) { + let i = props.selectedItem; + return props.onChange(handleSelect(props.resources, x))} />; +} diff --git a/frontend/src/sequences/step_tiles/tile_move_relative.tsx b/frontend/src/sequences/step_tiles/tile_move_relative.tsx new file mode 100644 index 000000000..537e9646c --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_move_relative.tsx @@ -0,0 +1,75 @@ +import * as React from "react"; +import { StepTitleBar } from "./step_title_bar"; +import { Help } from "../../ui"; +import { splice, remove } from "./index"; +import { t } from "i18next"; +import { StepInputBox } from "../inputs/step_input_box"; +import { StepParams } from "../interfaces"; +import { ToolTips } from "../../constants"; + + +export function TileMoveRelative({ dispatch, currentStep, index, currentSequence }: StepParams) { + return (
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + index, + sequence: currentSequence + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+ {/*
+ + +
*/} +
+
+
+
+
+
); +} diff --git a/frontend/src/sequences/step_tiles/tile_read_pin.tsx b/frontend/src/sequences/step_tiles/tile_read_pin.tsx new file mode 100644 index 000000000..d34eba377 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_read_pin.tsx @@ -0,0 +1,66 @@ +import * as React from "react"; +import { StepTitleBar } from "./step_title_bar"; +import { splice, remove } from "./index"; +import { Help } from "../../ui"; +import { t } from "i18next"; +import { StepInputBox } from "../inputs/step_input_box"; +import { StepParams } from "../interfaces"; +import { ToolTips } from "../../constants"; + +export function TileReadPin({ dispatch, currentStep, index, currentSequence }: StepParams) { + return (
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + index, + sequence: currentSequence + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
); +}; diff --git a/frontend/src/sequences/step_tiles/tile_send_message.tsx b/frontend/src/sequences/step_tiles/tile_send_message.tsx new file mode 100644 index 000000000..8a29f0e11 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_send_message.tsx @@ -0,0 +1,160 @@ +import * as React from "react"; +import { splice, remove } from "./index"; +import { StepTitleBar } from "./step_title_bar"; +import { Help, DropDownItem } from "../../ui"; +import { t } from "i18next"; +import { StepInputBox } from "../inputs/step_input_box"; +import { SendMessage, ALLOWED_CHANNEL_NAMES } from "farmbot"; +import * as _ from "lodash"; +import { StepParams } from "../interfaces"; +import { TaggedSequence } from "../../resources/tagged_resources"; +import { ResourceIndex } from "../../resources/interfaces"; +import { editStep } from "../../api/crud"; +import { FBSelect } from "../../ui/new_fb_select"; +import { ToolTips } from "../../constants"; +import { + MESSAGE_STATUSES, + EACH_CHANNEL, + channel +} from "./tile_send_message_support"; +type ChannelName = ALLOWED_CHANNEL_NAMES; +export function TileSendMessage(props: StepParams) { + if (props.currentStep.kind === "send_message") { + return ; + } else { + throw new Error("TileSendMessage expects send_message"); + } +} + +interface SendMessageParams { + currentStep: SendMessage; + currentSequence: TaggedSequence; + dispatch: Function; + index: number; + resources: ResourceIndex; +} + +class RefactoredSendMessage extends React.Component { + get args() { return this.props.currentStep.args; } + get message() { return this.args.message }; + get message_type() { return this.args.message_type } + get step() { return this.props.currentStep; } + get dispatch() { return this.props.dispatch } + get sequence() { return this.props.currentSequence; } + get index() { return this.props.index } + get currentSelection() { + return { label: _.capitalize(this.message_type), value: this.message_type }; + }; + get channels() { return (this.step.body || []).map(x => x.args.channel_name) } + hasChannel = (name: ChannelName) => { + return this.channels.includes(name); + } + + add = (name: ChannelName) => (s: SendMessage) => { + s.body = s.body || []; + s.body.push(channel(name)); + } + + remove = (name: ChannelName) => (s: SendMessage) => { + s.body = (s.body || []).filter(x => x.args.channel_name !== name); + } + + toggle = (n: ChannelName) => () => { + this.dispatch(editStep({ + sequence: this.sequence, + step: this.step, + index: this.index, + executor: this.hasChannel(n) ? this.remove(n) : this.add(n) + })); + } + + setMsgType = (x: DropDownItem) => { + this.dispatch(editStep({ + sequence: this.sequence, + step: this.step, + index: this.index, + executor: (step: SendMessage) => { + if (_.isString(x.value)) { + step.args.message_type = x.value + } else { + throw new Error("Strings only in send_message."); + } + } + })); + }; + + render() { + let { dispatch, index, currentStep, currentSequence } = this.props; + + return
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + sequence: currentSequence, + index + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+ + + {this.message.length}/300 + + +
+
+ +
+
+
{EACH_CHANNEL.map((chan, inx) => { + return
+ + +
; + })}
+
+
+
+
+
+
+
+
+
; + } +} diff --git a/frontend/src/sequences/step_tiles/tile_send_message_support.tsx b/frontend/src/sequences/step_tiles/tile_send_message_support.tsx new file mode 100644 index 000000000..d76d485b8 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_send_message_support.tsx @@ -0,0 +1,29 @@ +import { ALLOWED_CHANNEL_NAMES, Channel } from "farmbot/dist"; + +/** All the attributes/config you need to render a Channel */ +interface ChanInfo { + /** Always check it? */ + alwaysOn: boolean; + /** CeleryScript name */ + name: ALLOWED_CHANNEL_NAMES; + /** Human readable name */ + label: string; +} + +export const EACH_CHANNEL: ChanInfo[] = [ + { alwaysOn: true, name: "ticker", label: "Ticker Notification" }, + { alwaysOn: false, name: "toast", label: "Toast Pop Up" }, + { alwaysOn: false, name: "email", label: "Email" } +]; + +export const MESSAGE_STATUSES = [ + { value: "success", label: "Success" }, + { value: "busy", label: "Busy" }, + { value: "warn", label: "Warning" }, + { value: "error", label: "Error" }, + { value: "info", label: "Info" } +]; + +export function channel(channel_name: ALLOWED_CHANNEL_NAMES): Channel { + return { kind: "channel", args: { channel_name } } +} diff --git a/frontend/src/sequences/step_tiles/tile_take_photo.tsx b/frontend/src/sequences/step_tiles/tile_take_photo.tsx new file mode 100644 index 000000000..bee471c51 --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_take_photo.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { StepParams } from "../interfaces"; +import { StepTitleBar } from "./step_title_bar"; +import { Help } from "../../ui"; +import { splice, remove } from "./index"; +import { t } from "i18next"; +import { Link } from "react-router"; +import { ToolTips } from "../../constants"; + +export function TileTakePhoto({ dispatch, currentStep, index, currentSequence }: StepParams) { + return (
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + index, + sequence: currentSequence + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+

+ Photos are viewable from the + devices page. +

+
+
+
+
+
+
+
); + +} diff --git a/frontend/src/sequences/step_tiles/tile_wait.tsx b/frontend/src/sequences/step_tiles/tile_wait.tsx new file mode 100644 index 000000000..75ee8ab1e --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_wait.tsx @@ -0,0 +1,51 @@ +import * as React from "react"; +import { StepTitleBar } from "./step_title_bar"; +import { Help } from "../../ui"; +import { splice, remove } from "./index"; +import { t } from "i18next"; +import { StepInputBox } from "../inputs/step_input_box"; +import { StepParams } from "../interfaces"; +import { ToolTips } from "../../constants"; + +export function TileWait({ dispatch, currentStep, index, currentSequence }: StepParams) { + return (
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + sequence: currentSequence, + index + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
); + +} diff --git a/frontend/src/sequences/step_tiles/tile_write_pin.tsx b/frontend/src/sequences/step_tiles/tile_write_pin.tsx new file mode 100644 index 000000000..29a0b1b7d --- /dev/null +++ b/frontend/src/sequences/step_tiles/tile_write_pin.tsx @@ -0,0 +1,66 @@ +import * as React from "react"; +import { StepTitleBar } from "./step_title_bar"; +import { Help } from "../../ui"; +import { splice, remove } from "./index"; +import { t } from "i18next"; +import { StepInputBox } from "../inputs/step_input_box"; +import { StepParams } from "../interfaces"; +import { ToolTips } from "../../constants"; + +export function TileWritePin({ dispatch, currentStep, index, currentSequence }: StepParams) { + return (
+
+
+
+
+ + + dispatch(splice({ + step: currentStep, + index, + sequence: currentSequence + }))} /> + remove({ dispatch, index, sequence: currentSequence })} /> + +
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
); +} diff --git a/frontend/src/session.ts b/frontend/src/session.ts new file mode 100644 index 000000000..f0d6cc28a --- /dev/null +++ b/frontend/src/session.ts @@ -0,0 +1,33 @@ +import { AuthState } from "./auth/interfaces"; +import { box } from "boxed_value"; + +export namespace Session { + const KEY = "session"; + + /** Replace the contents of session storage. */ + export function put(nextState: AuthState) { + localStorage[KEY] = JSON.stringify(nextState); + } + + /** Fetch the previous session. */ + export function get(): AuthState | undefined { + try { + let v: AuthState = JSON.parse(localStorage[KEY]); + if (box(v).kind === "object") { + return v; + } else { + throw new Error("Expected object or undefined"); + } + } catch (error) { + clear(); + return undefined; + }; + } + + /** Clear localstorage and sessionstorage. */ + export function clear(_redirectToFrontPage = false) { + localStorage.clear(); + sessionStorage.clear(); + window.location.href = window.location.origin; + } +} diff --git a/frontend/src/spinner.tsx b/frontend/src/spinner.tsx new file mode 100644 index 000000000..1183ca6bf --- /dev/null +++ b/frontend/src/spinner.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; + +interface SpinnerProps { + /** Radius of the spinner in pixels. */ + radius: number; + strokeWidth: number; +} + +// TODO: Keep accurate proportions when scaling up or down +export function Spinner(props: SpinnerProps) { + let { radius, strokeWidth } = props; + return
+ + + + +
; +} diff --git a/frontend/src/static/app_index.hbs b/frontend/src/static/app_index.hbs new file mode 100644 index 000000000..71540d042 --- /dev/null +++ b/frontend/src/static/app_index.hbs @@ -0,0 +1,17 @@ + + + + + + + {{#if isProd}} + {{/if}} + + + + {{#each wantedAssets}} + + {{/each}} + + + \ No newline at end of file diff --git a/frontend/src/static/front_page.hbs b/frontend/src/static/front_page.hbs new file mode 100644 index 000000000..8ba5281d9 --- /dev/null +++ b/frontend/src/static/front_page.hbs @@ -0,0 +1,21 @@ + + + + + + + + FarmBot + + + + + + + + {{#each wantedAssets}} + + {{/each}} + + + \ No newline at end of file diff --git a/frontend/src/static/password_reset.hbs b/frontend/src/static/password_reset.hbs new file mode 100644 index 000000000..71540d042 --- /dev/null +++ b/frontend/src/static/password_reset.hbs @@ -0,0 +1,17 @@ + + + + + + + {{#if isProd}} + {{/if}} + + + + {{#each wantedAssets}} + + {{/each}} + + + \ No newline at end of file diff --git a/frontend/src/static/tos_update.hbs b/frontend/src/static/tos_update.hbs new file mode 100644 index 000000000..71540d042 --- /dev/null +++ b/frontend/src/static/tos_update.hbs @@ -0,0 +1,17 @@ + + + + + + + {{#if isProd}} + {{/if}} + + + + {{#each wantedAssets}} + + {{/each}} + + + \ No newline at end of file diff --git a/frontend/src/static/verification.hbs b/frontend/src/static/verification.hbs new file mode 100644 index 000000000..864aaf2ae --- /dev/null +++ b/frontend/src/static/verification.hbs @@ -0,0 +1,15 @@ + + + + + + + +

Verifying email address...

+ + {{#each wantedAssets}} + + {{/each}} + + + \ No newline at end of file diff --git a/frontend/src/sync/actions.ts b/frontend/src/sync/actions.ts new file mode 100644 index 000000000..c686f2544 --- /dev/null +++ b/frontend/src/sync/actions.ts @@ -0,0 +1,60 @@ +import * as axios from "axios"; +import { warning } from "farmbot-toastr"; +import { Log, AnyPointer } from "../interfaces"; +import { API } from "../api"; +import { Sequence } from "../sequences/interfaces"; +import { Tool } from "../tools/interfaces"; +import { Regimen } from "../regimens/interfaces"; +import { Peripheral } from "../controls/peripherals/interfaces"; +import { FarmEvent } from "../farm_designer/interfaces"; +import { Image } from "../images/interfaces"; +import { DeviceAccountSettings } from "../devices/interfaces"; +import { ResourceName } from "../resources/tagged_resources"; +import { User } from "../auth/interfaces"; +// import { OpenFarmAPI } from "../open_farm/index"; + +export interface ResourceReadyPayl { + name: ResourceName; + data: object[]; +} + +export interface SyncResponse { + type: "RESOURCE_READY"; + payload: ResourceReadyPayl; +} + +export function fetchSyncData(dispatch: Function) { + let fetch = (name: ResourceName, url: string, type = "RESOURCE_READY") => + axios + .get(url) + .then((r): SyncResponse => dispatch({ + type, payload: { name, data: r.data } + }), fail); + + let fail = () => warning("Please try refreshing the page.", + "Error downloading data"); + + fetch("users", API.current.usersPath) + fetch("device", API.current.devicePath) + fetch("farm_events", API.current.farmEventsPath); + fetch("images", API.current.imagesPath); + fetch("logs", API.current.logsPath); + fetch("peripherals", API.current.peripheralsPath); + fetch("points", API.current.pointsPath) + fetch("regimens", API.current.regimensPath); + fetch("sequences", API.current.sequencesPath); + fetch("tools", API.current.toolsPath); +} + +export function fetchSyncDataOk(payload: {}) { + return { + type: "FETCH_SYNC_OK", payload + }; +} + +export function fetchSyncDataNo(err: Error) { + return { + type: "FETCH_SYNC_NO", + payload: {} + }; +} diff --git a/frontend/src/tools/components/__tests__/tool_form_test.tsx b/frontend/src/tools/components/__tests__/tool_form_test.tsx new file mode 100644 index 000000000..965d57746 --- /dev/null +++ b/frontend/src/tools/components/__tests__/tool_form_test.tsx @@ -0,0 +1,27 @@ +import * as React from "react"; +import { ToolForm } from "../tool_form"; +import { mount } from "enzyme"; +import { mapStateToProps } from "../../state_to_props"; +import { fakeState } from "../../../__test_support__/fake_state"; + +describe("", () => { + function bootstrapTest() { + let state = fakeState(); + let toggle = jest.fn(); + let props = mapStateToProps(state); + return { + state, + toggle, + props, + component: mount() + } + } + it("renders", () => { + let test = bootstrapTest(); + expect(test.component.find("input").length) + .toEqual(test.props.tools.length); + }); + +}); diff --git a/frontend/src/tools/components/index.ts b/frontend/src/tools/components/index.ts new file mode 100644 index 000000000..9dcea62c6 --- /dev/null +++ b/frontend/src/tools/components/index.ts @@ -0,0 +1,4 @@ +export * from "./toolbay_form"; +export * from "./toolbay_list"; +export * from "./tool_list"; +export * from "./tool_form"; diff --git a/frontend/src/tools/components/tool_form.tsx b/frontend/src/tools/components/tool_form.tsx new file mode 100644 index 000000000..569d2a25e --- /dev/null +++ b/frontend/src/tools/components/tool_form.tsx @@ -0,0 +1,83 @@ +import * as React from "react"; +import { ToolFormProps } from "../interfaces"; +import { t } from "i18next"; +import { + Row, + Col, + Widget, + WidgetBody, + WidgetHeader, + BlurableInput, + SaveBtn +} from "../../ui"; +import { TaggedTool } from "../../resources/tagged_resources"; +import { edit, destroy, init, saveAll } from "../../api/crud"; +import { ToolTips } from "../../constants"; + +export class ToolForm extends React.Component { + emptyTool = (): TaggedTool => { + return { + uuid: "ERROR: GENERATED BY REDUCER - UUID SHOULD BE UNSEEN", + kind: "tools", + body: { name: "Tool " + (this.props.tools.length + 1) } + } + } + + render() { + let toggle = () => this.props.toggle(); + let { dispatch, tools } = this.props; + + let isSaving = tools && tools.filter(x => x.saving).length !== 0; + let isDirty = tools && tools.filter(x => x.dirty).length !== 0; + let isSaved = !isSaving && !isDirty; + + return + + + { dispatch(saveAll(tools, () => { toggle(); })) }} + /> + + + + + + + + + {tools.map((tool: TaggedTool, index: number) => { + return + + { + dispatch(edit(tool, { name: e.currentTarget.value })); + }} + /> + + + + + ; + })} + + ; + } +}; diff --git a/frontend/src/tools/components/tool_list.tsx b/frontend/src/tools/components/tool_list.tsx new file mode 100644 index 000000000..f474a4c4f --- /dev/null +++ b/frontend/src/tools/components/tool_list.tsx @@ -0,0 +1,40 @@ +import * as React from "react"; +import { Row, Col, Widget, WidgetBody, WidgetHeader } from "../../ui"; +import { t } from "i18next"; +import { ToolListProps } from "../interfaces"; +import { TaggedTool } from "../../resources/tagged_resources"; +import { ToolTips } from "../../constants"; + +export class ToolList extends React.Component { + render() { + let toggle = () => this.props.toggle(); + let { tools } = this.props; + + return + + + + + + + + + + + + + {tools.map((tool: TaggedTool) => { + return + {tool.body.name || "Name not found"} + {this.props.isActive(tool) ? "active" : "inactive"} + ; + })} + + ; + } +}; diff --git a/frontend/src/tools/components/toolbay_form.tsx b/frontend/src/tools/components/toolbay_form.tsx new file mode 100644 index 000000000..214fac50c --- /dev/null +++ b/frontend/src/tools/components/toolbay_form.tsx @@ -0,0 +1,128 @@ +import * as React from "react"; +import { ToolBayFormProps } from "../interfaces"; +import { + Widget, + WidgetBody, + WidgetHeader, + Col, + Row, + BlurableInput, + SaveBtn +} from "../../ui"; +import { t } from "i18next"; +import { TaggedToolSlotPointer } from "../../resources/tagged_resources"; +import { edit, destroy, saveAll, init } from "../../api/crud"; +import { FBSelect } from "../../ui/new_fb_select"; +import { ToolBayHeader } from "./toolbay_header"; +import { ToolTips } from "../../constants"; + +export class ToolBayForm extends React.Component { + + emptyToolSlot = (): TaggedToolSlotPointer => { + return { + uuid: "ERROR: GENERATED BY REDUCER - SHOULD BE UNSEEN", + kind: "points", + body: { + x: 0, + y: 0, + z: 0, + radius: 25, + pointer_type: "ToolSlot", + meta: {}, + tool_id: undefined, + name: "Tool Slot" + } + } + } + + render() { + let { toggle, dispatch, toolSlots } = this.props; + + let isSaving = toolSlots && toolSlots + .filter(x => x.saving).length !== 0; + + let isDirty = toolSlots && toolSlots + .filter(x => x.dirty).length !== 0; + + let isSaved = !isSaving && !isDirty; + return
+ + + + { + dispatch(saveAll(toolSlots, () => { toggle(); })) + }} + /> + + + + + {this.props.getToolSlots().map( + (slot: TaggedToolSlotPointer, index: number) => { + return + + + + + { + dispatch(edit(slot, { x: parseInt(e.currentTarget.value, 10) })); + }} + type="number" + /> + + + { + dispatch(edit(slot, { y: parseInt(e.currentTarget.value, 10) })); + }} + type="number" + /> + + + { + dispatch(edit(slot, { z: parseInt(e.currentTarget.value, 10) })); + }} + type="number" + /> + + + + + + + + + })} + + +
+ } +} diff --git a/frontend/src/tools/components/toolbay_header.tsx b/frontend/src/tools/components/toolbay_header.tsx new file mode 100644 index 000000000..05c273d40 --- /dev/null +++ b/frontend/src/tools/components/toolbay_header.tsx @@ -0,0 +1,23 @@ +import * as React from "react"; +import { Col, Row } from "../../ui/index"; +import { t } from "i18next"; + +export function ToolBayHeader(props: {}) { + return + + + + + + + + + + + + + + + + ; +} diff --git a/frontend/src/tools/components/toolbay_list.tsx b/frontend/src/tools/components/toolbay_list.tsx new file mode 100644 index 000000000..4ccd099df --- /dev/null +++ b/frontend/src/tools/components/toolbay_list.tsx @@ -0,0 +1,43 @@ +import * as React from "react"; +import { t } from "i18next"; +import { Row, Col, Widget, WidgetBody, WidgetHeader } from "../../ui"; +import { ToolBayListProps } from "../interfaces"; +import { TaggedToolSlotPointer } from "../../resources/tagged_resources"; +import { ToolBayHeader } from "./toolbay_header"; +import { ToolTips } from "../../constants"; + +export class ToolBayList extends React.Component { + render() { + let toggle = () => this.props.toggle(); + let { getToolSlots, getToolByToolSlotUUID } = this.props; + + return + + + + + + {getToolSlots().map((slot: TaggedToolSlotPointer, index: number) => { + let tool = getToolByToolSlotUUID(slot.uuid); + let name = (tool && tool.body.name) || "None"; + return + + + + {slot.body.x} + {slot.body.y} + {slot.body.z} + + {name} + + ; + })} + + + } +}; diff --git a/frontend/src/tools/index.tsx b/frontend/src/tools/index.tsx new file mode 100644 index 000000000..4db1183a5 --- /dev/null +++ b/frontend/src/tools/index.tsx @@ -0,0 +1,58 @@ +import * as React from "react"; +import { connect } from "react-redux"; +import { ToolsState, Props } from "./interfaces"; +import { Col, Row, Page } from "../ui"; +import { ToolBayList, ToolBayForm, ToolList, ToolForm } from "./components"; +import { mapStateToProps } from "./state_to_props"; + +@connect(mapStateToProps) +export class Tools extends React.Component> { + + state: ToolsState = { editingBays: false, editingTools: false }; + + toggle = (name: keyof ToolsState) => + () => this.setState({ [name]: !this.state[name] }); + + render() { + let isEditingBays = this.state.editingBays; + let isEditingTools = this.state.editingTools; + return + + + {!isEditingBays && + } + {isEditingBays && + } + + + {!isEditingTools && + } + {isEditingTools && + } + + + + } +} diff --git a/frontend/src/tools/interfaces.ts b/frontend/src/tools/interfaces.ts new file mode 100644 index 000000000..153b7fe7c --- /dev/null +++ b/frontend/src/tools/interfaces.ts @@ -0,0 +1,57 @@ +import { DropDownItem } from "../ui/fb_select"; +import { + TaggedTool, + TaggedToolSlotPointer, +} from "../resources/tagged_resources"; + +export interface ToolsState { + editingTools: boolean; + editingBays: boolean; +} + +export interface Props { + toolSlots: TaggedToolSlotPointer[]; + tools: TaggedTool[]; + getToolOptions(): DropDownItem[]; + getChosenToolOption(toolSlotUuid: string): DropDownItem; + getToolByToolSlotUUID(uuid: string): TaggedTool | undefined; + getToolSlots(): TaggedToolSlotPointer[]; + dispatch: Function; + isActive: (tool: TaggedTool) => boolean; + changeToolSlot(t: TaggedToolSlotPointer, dispatch: Function): (d: DropDownItem) => void; +} + +export interface Tool { + id?: number | undefined; + name: string; +} + +export interface ToolBayListProps { + dispatch: Function; + toggle(): void; + getToolByToolSlotUUID(uuid: string): TaggedTool | undefined; + getToolSlots(): TaggedToolSlotPointer[]; +} + +export interface ToolBayFormProps { + dispatch: Function; + toolSlots: TaggedToolSlotPointer[]; + toggle(): void; + getToolOptions(): DropDownItem[]; + getChosenToolOption(uuid: string): DropDownItem; + getToolSlots(): TaggedToolSlotPointer[]; + changeToolSlot(t: TaggedToolSlotPointer, dispatch: Function): (d: DropDownItem) => void; +} + +export interface ToolListProps { + tools: TaggedTool[]; + dispatch: Function; + toggle(): void; + isActive(tool: TaggedTool): boolean; +} + +export interface ToolFormProps { + dispatch: Function; + tools: TaggedTool[]; + toggle(): void; +} diff --git a/frontend/src/tools/state_to_props.ts b/frontend/src/tools/state_to_props.ts new file mode 100644 index 000000000..3dc1762ea --- /dev/null +++ b/frontend/src/tools/state_to_props.ts @@ -0,0 +1,78 @@ +import { Everything } from "../interfaces"; +import { Props } from "./interfaces"; +import * as _ from "lodash"; +import { NULL_CHOICE } from "../ui/fb_select"; +import { + selectAllToolSlotPointers, + selectAllTools, + currentToolInSlot, + findSlotWhere +} from "../resources/selectors"; +import { + isTaggedTool, + TaggedTool, + TaggedToolSlotPointer +} from "../resources/tagged_resources"; +import { edit } from "../api/crud"; +import { DropDownItem } from "../ui/index"; + +export function mapStateToProps(props: Everything): Props { + let toolSlots = selectAllToolSlotPointers(props.resources.index); + let tools = selectAllTools(props.resources.index); + + /** Returns sorted tool slots specific to the tool bay id passed. */ + let getToolSlots = (/** uuid: string */) => { + // TODO: three things: + // 1. We don't support multiple bays. Therefore, no need to filter. + // 2. If we add an index to this resource, we don't need to perform + // filtering. + // 3. Once we do support multiple bays, re-add the slot's UUID param. + return toolSlots; + }; + + /** Returns all tools in an compatible format. */ + let getToolOptions = () => { + return _(tools) + .map(tool => ({ label: tool.body.name, value: (tool.body.id as number) })) + .filter(ddi => _.isNumber(ddi.value)) + .compact() + .value(); + }; + + let activeTools = _(toolSlots).map(x => x.body.tool_id).compact().value() + + let isActive = (t: TaggedTool) => activeTools.includes(t.body.id); + + let getToolByToolSlotUUID = currentToolInSlot(props.resources.index); + + /** Returns the current tool chosen in a slot based off the slot's id + * and in an compatible format. */ + let getChosenToolOption = (toolSlotUUID: string | undefined) => { + let chosenTool = toolSlotUUID && getToolByToolSlotUUID(toolSlotUUID); + if (chosenTool && isTaggedTool(chosenTool) && chosenTool.body.id) { + return { label: chosenTool.body.name, value: chosenTool.uuid }; + } else { + return NULL_CHOICE; + } + }; + + let changeToolSlot = (t: TaggedToolSlotPointer, + dispatch: Function) => + (d: DropDownItem) => { + let tool_id = d.value ? d.value : (null as any); // Move "" to undefined; + dispatch(edit(t, { tool_id })); + } + + return { + toolSlots, + tools, + getToolSlots, + getToolOptions, + getChosenToolOption, + dispatch: props.dispatch, + getToolByToolSlotUUID, + changeToolSlot, + isActive + }; + +} diff --git a/frontend/src/tos_update/index.tsx b/frontend/src/tos_update/index.tsx new file mode 100644 index 000000000..955828d57 --- /dev/null +++ b/frontend/src/tos_update/index.tsx @@ -0,0 +1,207 @@ +import * as React from "react"; +import { render } from "react-dom"; +import * as axios from "axios"; +import { t, init } from "i18next"; +import { fun as log, init as logInit } from "farmbot-toastr"; +import { AuthState } from "../auth/interfaces"; +import { Session } from "../session"; +import { prettyPrintApiErrors } from "../util"; +import { detectLanguage } from "../i18n"; +import { API } from "../api"; +import "../css/_index.scss"; +import "../npm_addons"; +import { hardRefresh } from "../util"; +hardRefresh() +interface Props { }; +interface State { + hideServerSettings: boolean; + email: string; + password: string; + agree_to_terms: boolean; + serverHost: string; + serverPort: string; +}; + +export class Wow extends React.Component> { + constructor() { + super(); + this.submit = this.submit.bind(this); + this.toggleServerOpts = this.toggleServerOpts.bind(this); + this.state = { + hideServerSettings: true, + agree_to_terms: true, + serverHost: API.fetchHostName(), + serverPort: API.inferPort() + }; + } + + toggleServerOpts = () => { + this.setState({ hideServerSettings: !this.state.hideServerSettings }) + } + + set = (name: keyof State) => (event: React.FormEvent) => { + let state: { [name: string]: State[keyof State] } = {}; + state[name] = (event.currentTarget).value; + this.setState(state); + }; + + submit(e: React.SyntheticEvent) { + e.preventDefault(); + let { email, password, agree_to_terms } = this.state; + let payload = { user: { email, password, agree_to_terms } }; + let url = `//${this.state.serverHost}:${this.state.serverPort}`; + API.setBaseUrl(url); + axios + .post(API.current.tokensPath, payload) + .then(resp => { + Session.put(resp.data); + window.location.href = "/app/controls"; + }) + .catch(error => { + log(prettyPrintApiErrors(error)); + }); + } + + serverOpts() { + if (this.state.hideServerSettings) { + return
; + } else { + return
+ + + + + + +
; + } + } + + componentDidMount() { + logInit(); + let body = t("Before logging in, you must agree to our latest Terms" + + " of Service and Privacy Policy"); + log(body, "New Terms of Service"); + } + + render() { + if (!process.env.TOS_URL && !process.env.PRIV_URL) { + return
+
+
+
+
+
+
+
{t("Problem Loading Terms of Service")}
+
+
+
+
+
+
+
+
+

+ {t("Something went wrong while rendering this page.")} +

+

+ {t("Please send us an email at contact@farmbot.io or see")} + + {t("the FarmBot forum.")} + +

+
+
+
+
+
+
+
+
+
; + } + return
+
+
+
+
+
+
+
{t("Agree to Terms of Service")}
+ + +
+
+
+
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
+ {this.serverOpts()} +
+
+
+
+
+
+
+
+
; + } +} + +detectLanguage().then((config) => { + init(config, (err, t) => { + let node = document.createElement("DIV"); + node.id = "root"; + document.body.appendChild(node); + + let reactElem = React.createElement(Wow, {}); + let domElem = document.getElementById("root"); + + if (domElem) { + render(reactElem, domElem); + } else { + throw new Error(t("Add a div with id `root` to the page first.")); + }; + }); +}); diff --git a/frontend/src/ui/back_arrow.tsx b/frontend/src/ui/back_arrow.tsx new file mode 100644 index 000000000..516adc2eb --- /dev/null +++ b/frontend/src/ui/back_arrow.tsx @@ -0,0 +1,7 @@ +import * as React from "react"; + +export function BackArrow() { + return + + ; +}; diff --git a/frontend/src/ui/blurable_input.tsx b/frontend/src/ui/blurable_input.tsx new file mode 100644 index 000000000..a026ff1b2 --- /dev/null +++ b/frontend/src/ui/blurable_input.tsx @@ -0,0 +1,60 @@ +import * as React from "react"; + +interface BIProps { + value: string; + onCommit(e: React.SyntheticEvent): void; + min?: number; + max?: number; + type?: "text" | "number" | "email" | "password" | "time" | "date"; + name?: string; + id?: string; + /** Allow the user to empty out the form control. If unset, form control + * will reset itself to previous value. */ + allowEmpty?: boolean; + disabled?: boolean; + className?: string; + placeholder?: string; + hidden?: boolean; +} + +interface BIState { + buffer: string; + isEditing: boolean; +} + +export class BlurableInput extends React.Component> { + + state: BIState = { buffer: "", isEditing: false }; + + /** Called on blur. */ + maybeCommit = (e: React.SyntheticEvent) => { + let shouldPassToParent = (this.state.buffer || (this.props.allowEmpty)); + if (shouldPassToParent) { this.props.onCommit(e); } + this.setState({ isEditing: false, buffer: "" }); + } + + focus = () => { + this.setState({ isEditing: true, buffer: this.props.value || "" }); + } + + updateBuffer = (e: React.SyntheticEvent) => { + let buffer = e.currentTarget.value; + this.setState({ buffer }); + } + + render() { + let value = this.state.isEditing ? this.state.buffer : this.props.value; + return ; + } +} diff --git a/frontend/src/ui/column.tsx b/frontend/src/ui/column.tsx new file mode 100644 index 000000000..e4932c1ad --- /dev/null +++ b/frontend/src/ui/column.tsx @@ -0,0 +1,33 @@ +import * as React from "react"; +import { parseClassNames } from "./util"; +import { JSXChildren } from "../util"; + +interface ColumnProps { + children?: JSXChildren; + /** {xs-col-size} */ + xs?: number; + /** {sm-col-size} */ + sm?: number; + /** {md-col-size} */ + md?: number; + /** {lg-col-size} */ + lg?: number; + /** {xs-col-size-offset} */ + xsOffset?: number; + /** {sm-col-size-offset} */ + smOffset?: number; + /** {md-col-size-offset} */ + mdOffset?: number; + /** {lg-col-size-offset} */ + lgOffset?: number; + hidden?: boolean; + key?: string | number; + className?: string; +} + +export function Col(props: ColumnProps) { + let classNames = parseClassNames(props, ""); + return ; +} diff --git a/frontend/src/ui/custom_fb_select.tsx b/frontend/src/ui/custom_fb_select.tsx new file mode 100644 index 000000000..65f21361d --- /dev/null +++ b/frontend/src/ui/custom_fb_select.tsx @@ -0,0 +1,74 @@ +import * as React from "react"; +import * as _ from "lodash"; +import { + TaggedResource, + TaggedPlantPointer +} from "../resources/tagged_resources"; + +interface Props { + /** Allow user to select no value. */ + allowEmpty?: boolean; + /** Value to show. */ + selectedItem?: TaggedResource | undefined; + /** Event emitter for user typing. */ + onChange?(selection: TaggedResource): void; + /** All possible select options in TaggedResource format. */ + resourceList?: TaggedResource[]; + /** Text shown before user selection. */ + placeholder?: string | undefined; + /** Determines whether the list of options should remain open. */ + forceOpen?: boolean; + /** Custom component to be rendered. */ + optionComponent(tr: TaggedResource): JSX.Element; + /** Sometimes `dispatch` is needed. */ + dispatch?: Function | undefined; +} + +type State = { + isOpen: boolean; + input: string; +} + +type OptionComponent = + | React.ComponentClass + | React.StatelessComponent; + +export class CustomFBSelect extends React.Component> { + + state: State = { isOpen: true, input: "" }; + + handleChange = (input: string) => this.setState({ input }); + + toggle = (name: keyof State) => + () => this.setState({ [name]: !this.state[name] }); + + render() { + let { isOpen } = this.state; + let placeholder = this.props.placeholder || "Search..."; + let val = this.props.selectedItem && this.props.selectedItem.body.id; + let shouldToggle = this.props.forceOpen ? _.noop : this.toggle("isOpen"); + let list = this.props.resourceList; + + return
+
+ this.handleChange(e.currentTarget.value)} /> +
+
+ {list && list.map((x: TaggedPlantPointer) => { + let comp = this.props.optionComponent; + let name = x.body.name.toLowerCase(); + let input = this.state.input.toLowerCase(); + let condition = name.includes(input); + return condition && comp && comp(x); + })} +
+
; + } +} diff --git a/frontend/src/ui/fallback_img.tsx b/frontend/src/ui/fallback_img.tsx new file mode 100644 index 000000000..ae9b6daba --- /dev/null +++ b/frontend/src/ui/fallback_img.tsx @@ -0,0 +1,50 @@ +import * as React from "react"; +import { defensiveClone } from "../util"; +import { t } from "i18next"; +type ImgTag = React.HTMLProps; +interface Props extends ImgTag { + src: string; + fallback: string; +} + +type State = Partial<{ needsFallback: boolean }>; +/** Like a normal ``, but it has a `fallback` URL if the image does not + * load*/ +export class FallbackImg extends React.Component { + get imgProps() { + let imProps: ImgTag = defensiveClone(this.props); + // React will complain at runtime if has extra props. + // Typescript will compile at compile if I don't use `any` here: + delete (imProps as any).fallback; + return imProps; + } + constructor() { + super(); + this.state = { needsFallback: false }; + } + + componentWillReceiveProps(next: Props) { + // Sorry. The webcam page needs live updates. tag was acting wonky. + (next.src !== this.props.src) && this.setState({ needsFallback: false }); + } + + fallback = () => { + return
+ + + {t("Unable to load webcam feed.")} + +
; + } + + dontFallback = () => { + let imgProps = defensiveClone(this.props); + delete imgProps.fallback; // React will complain otherwise. + return this.setState({ needsFallback: true })} + src={this.props.src} style={{ maxWidth: "100%" }} />; + } + + render() { + return ((this.state.needsFallback) ? this.fallback : this.dontFallback)(); + } +} diff --git a/frontend/src/ui/fb_select.tsx b/frontend/src/ui/fb_select.tsx new file mode 100644 index 000000000..f44f8b8b6 --- /dev/null +++ b/frontend/src/ui/fb_select.tsx @@ -0,0 +1,193 @@ +import * as React from "react"; + +type OptionComponent = + | React.ComponentClass + | React.StatelessComponent; + +export interface DropDownItem { + /** Name of the item shown in the list. */ + label: string; + /** Value passed to the onClick cb and also determines the "chosen" option. */ + value: number | string; + /** To determine group-by styling on rendered lists. */ + heading?: boolean; + /** A unique ID to group headings by. */ + headingId?: string | undefined; + /** This is just an idea. */ + children?: DropDownItem[] | undefined +} + +export interface SelectProps { + /** The list of rendered options to select from. */ + list: DropDownItem[]; + /** Determines what label to show in the select box. */ + initialValue?: DropDownItem | undefined; + /** Determine whether the select list should always be open. */ + isOpen?: boolean; + /** Custom JSX child rendered instead of a default item. */ + optionComponent?: OptionComponent; + /** Optional className for `select`. */ + className?: string; + /** Fires when option is selected. */ + onChange?: (newValue: DropDownItem) => void; + /** Fires when user enters text */ + onUserTyping?: (userInput: string) => void; + /** Placeholder for the input. */ + placeholder?: string; + /** Allows user to have a non-selected value. */ + allowEmpty?: boolean; + /** Id for the input. Used for accessibility and expected ux with labels. */ + id?: string | undefined; +} + +export interface SelectState { + touched: boolean; + label: string; + isOpen: boolean; + value: string | number | undefined; +} + +/** Used as a placeholder for a selection of "none" when allowEmpty is true. */ +export const NULL_CHOICE: DropDownItem = Object.freeze({ + label: "None", + value: "" +}); + +/** Wow. TSC 2.4 is neat. It found a bunch of subtle issues relating to the ES7 + * object spread operator. For now, I've quieted the errors down by making + * `FixMe` a strict union of the three interfaces. This is *actually* what FB + * Select was using for data internally, but TSC did not catch it till now. + * - RC + */ +type FixMe = SelectProps & SelectState & DropDownItem; + +export class DeprecatedFBSelect extends React.Component, Partial> { + constructor() { + super(); + this.state = { touched: false }; + } + + componentDidMount() { + let defaults: Partial = { isOpen: !!this.props.isOpen }; + let { initialValue } = this.props; + if (initialValue) { + defaults = { ...defaults, ...initialValue }; + } + let { allowEmpty } = this.props; + this.setState(allowEmpty ? { ...NULL_CHOICE, ...defaults } : defaults); + } + + updateInput = (e: React.SyntheticEvent) => { + let { value } = e.currentTarget; + this.setState({ label: value }); + this.props.onUserTyping && this.props.onUserTyping(value); + } + + open = () => this.setState({ isOpen: true, label: "" }); + + /** Closes the dropdown ONLY IF the developer has not set this.props.isOpen to + * true, since that would indicate the developer wants it to always be open. + */ + maybeClose = () => { + let { list, isOpen } = this.props; + let { label } = this.state; + let noLabel = !label; + let noMatch = (label) ? !this.filterByInput().length : false; + if (noLabel || noMatch) { + if (this.props.allowEmpty) { + this.setState({ ...NULL_CHOICE }); + } else { + this.setState({ label: "", value: "" }); + } + }; + this.setState({ isOpen: (isOpen || false) }); + } + + handleSelectOption = (option: DropDownItem) => { + (this.props.onChange || (() => { }))(option); + this.setState({ + touched: true, + label: option.label, + isOpen: false, + value: option.value + }); + } + + custItemList = (items: DropDownItem[]) => { + if (this.props.optionComponent) { + let Comp = this.props.optionComponent; + return items + .map((p, i) => { + return
{ this.handleSelectOption(p); }} key={p.value}> + +
; + }); + } else { + throw new Error(`You called custItemList() when props.optionComponent was + falsy. This should never happen.`); + } + } + + normlItemList = (items: DropDownItem[]) => { + return items.map((option: DropDownItem, i) => { + let { heading, label } = option; + let classes = "select-result"; + if (heading) { classes += " is-header"; } + // TODO: Put this in a shared function when we finish debugging callbacks. + return
{ this.handleSelectOption(option); }}> + +
; + }); + } + + list = () => { + if (this.props.allowEmpty) { + return [NULL_CHOICE].concat(this.props.list); + } else { + return this.props.list; + } + + } + + filterByInput = () => { + return this.list().filter((option: DropDownItem) => { + let query = (this.state.label || "").toUpperCase(); + return (option.label.toUpperCase().indexOf(query) > -1); + }); + } + + value = () => { + if (!this.state.touched && this.props.initialValue) { + return this.props.initialValue; + } else { + return this.state; + } + } + + componentWillReceiveProps() { + setTimeout(() => this.forceUpdate(), 3) + } + + render() { + let { className, optionComponent, placeholder } = this.props; + let { isOpen } = this.state; + // Dynamically choose custom vs. standard list item JSX based on options: + let renderList = (optionComponent ? this.custItemList : this.normlItemList); + return
+
+ +
+
+ {renderList(this.filterByInput())} +
+
; + } +} diff --git a/frontend/src/ui/filter_search.tsx b/frontend/src/ui/filter_search.tsx new file mode 100644 index 000000000..e5d7c235f --- /dev/null +++ b/frontend/src/ui/filter_search.tsx @@ -0,0 +1,101 @@ +import * as React from "react"; +import { t } from "i18next"; +import { Button, Classes, MenuItem } from "@blueprintjs/core"; +import { ISelectItemRendererProps, Select } from "@blueprintjs/labs"; + +import { DropDownItem } from "./fb_select"; + +const SelectComponent = Select.ofType(); + +type PossibleReferences = + | "Sequences" + | "Regimens" + +interface ParentMenu { + title: string; + value: string | number; + subMenus: DropDownItem[]; + reference: PossibleReferences; +} + +interface Props { + items: DropDownItem[]; + selectedItem: DropDownItem; + onChange: (item: DropDownItem) => void; + placeholder?: string; + isASubMenu?: boolean; + isFilterable: boolean | undefined; +} + +interface State { + item?: DropDownItem | undefined; + isFilterable: boolean | undefined; + filterable?: boolean; + minimal?: boolean; + resetOnSelect?: boolean; + parentMenus: ParentMenu[]; + subMenus: DropDownItem[]; +} + +export class FilterSearch extends React.Component> { + + public state: State = { + item: this.props.selectedItem, + filterable: true, + minimal: false, + resetOnSelect: false, + parentMenus: [], + subMenus: [], + isFilterable: this.props.isFilterable || true + }; + + render() { + const { item, minimal, ...flags } = this.state; + let renderer = this.props.isASubMenu ? this.default : this.subMenu; + return } + onItemSelect={this.handleValueChange} + popoverProps={{ popoverClassName: minimal ? Classes.MINIMAL : "" }} + > + ; +} + diff --git a/frontend/src/ui/tooltip.tsx b/frontend/src/ui/tooltip.tsx new file mode 100644 index 000000000..37d0306a3 --- /dev/null +++ b/frontend/src/ui/tooltip.tsx @@ -0,0 +1,20 @@ +import * as React from "react"; +import { t } from "i18next"; +import { JSXChildren } from "../util"; + +interface ToolTipProps { + children?: JSXChildren; + className?: string; + helpText: string; +} + +export function ToolTip(props: ToolTipProps) { + let { className, helpText } = props; + let cn = className ? className += " title-help" : "title-help"; + return
+ +
+ {t(helpText)} +
+
; +} diff --git a/frontend/src/ui/util.ts b/frontend/src/ui/util.ts new file mode 100644 index 000000000..adc4f0aef --- /dev/null +++ b/frontend/src/ui/util.ts @@ -0,0 +1,30 @@ +interface ParseClassNamesProps { + xs?: number; + sm?: number; + md?: number; + lg?: number; + xsOffset?: number; + smOffset?: number; + mdOffset?: number; + lgOffset?: number; +} + +export function parseClassNames(props: ParseClassNamesProps, base: string) { + + // Base class + let classNames = base; + + // Refactor? Add classes as needed. + // This is the place that would change most if we switched ui libs. + if (props.xs) { classNames += ` col-xs-${props.xs}`; } + if (props.sm) { classNames += ` col-sm-${props.sm}`; } + if (props.md) { classNames += ` col-md-${props.md}`; } + if (props.lg) { classNames += ` col-lg-${props.lg}`; } + if (props.xsOffset) { classNames += ` col-xs-offset-${props.xsOffset}`; } + if (props.smOffset) { classNames += ` col-sm-offset-${props.smOffset}`; } + if (props.mdOffset) { classNames += ` col-md-offset-${props.mdOffset}`; } + if (props.lgOffset) { classNames += ` col-lg-offset-${props.lgOffset}`; } + + return classNames; + +} diff --git a/frontend/src/ui/widget.tsx b/frontend/src/ui/widget.tsx new file mode 100644 index 000000000..6f15f79b7 --- /dev/null +++ b/frontend/src/ui/widget.tsx @@ -0,0 +1,16 @@ +import * as React from "react"; +import { JSXChildren } from "../util"; +// import { parseClassNames } from "./util"; + +interface WidgetProps { + children?: JSXChildren; + className?: string; +} + +export function Widget(props: WidgetProps) { + let finalClass = `widget-wrapper `; + if (props.className) { finalClass += props.className; } + return
+ {props.children} +
; +} diff --git a/frontend/src/ui/widget_body.tsx b/frontend/src/ui/widget_body.tsx new file mode 100644 index 000000000..80e433534 --- /dev/null +++ b/frontend/src/ui/widget_body.tsx @@ -0,0 +1,13 @@ +import * as React from "react"; +import { JSXChildren } from "../util"; + +interface WidgetBodyProps { + children?: JSXChildren; + className?: string; +} + +export function WidgetBody(props: WidgetBodyProps) { + return
+ {props.children} +
; +} diff --git a/frontend/src/ui/widget_button.tsx b/frontend/src/ui/widget_button.tsx new file mode 100644 index 000000000..1e6db690e --- /dev/null +++ b/frontend/src/ui/widget_button.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; +import { t } from "i18next"; + +interface ButtonProps { + /** Default styles + whatever user wants */ + className?: string; + /** Text inside Button */ + text: string; + onClick: () => {}; +} + +export function WidgetButton(props: ButtonProps) { + let classes = props.className + " fb-button"; + + return ; +} diff --git a/frontend/src/ui/widget_header.tsx b/frontend/src/ui/widget_header.tsx new file mode 100644 index 000000000..675fe0685 --- /dev/null +++ b/frontend/src/ui/widget_header.tsx @@ -0,0 +1,23 @@ +import * as React from "react"; +import { t } from "i18next"; +import { JSXChildren } from "../util"; + +interface WidgetHeaderProps { + children?: JSXChildren; + helpText?: string; + title: string; +} + +export function WidgetHeader(props: WidgetHeaderProps) { + return
+ {props.children} +
{t(props.title)}
+ {props.helpText && + +
+ {props.helpText} +
+
+ } +
; +} diff --git a/frontend/src/unmock_i18next.ts b/frontend/src/unmock_i18next.ts new file mode 100644 index 000000000..5efee16ec --- /dev/null +++ b/frontend/src/unmock_i18next.ts @@ -0,0 +1 @@ +jest.mock('i18next', () => ({ t: (i: string) => i })); diff --git a/frontend/src/util.ts b/frontend/src/util.ts new file mode 100644 index 000000000..89d860815 --- /dev/null +++ b/frontend/src/util.ts @@ -0,0 +1,456 @@ +import * as React from "react"; +import { render } from "react-dom"; +import { t } from "i18next"; +import * as _ from "lodash"; +import { Dictionary } from "farmbot"; +import { error } from "farmbot-toastr"; +import { Color, UnsafeError } from "./interfaces"; +import { box } from "boxed_value"; +import { TaggedResource } from "./resources/tagged_resources"; +import { Session } from "./session"; + +// http://stackoverflow.com/a/901144/1064917 +// Grab a query string param by name, because react-router-redux doesn't +// support query strings yet. +export function getParam(name: string): string { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + let regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + r = regex.exec(location.search); + return r === null ? "" : decodeURIComponent(r[1].replace(/\+/g, " ")); +} + +export let colors: Array = [ + "blue", + "green", + "yellow", + "orange", + "purple", + "pink", + "gray", + "red" +]; + +/** Picks a color that is compliant with sequence / regimen color codes */ +export function randomColor(): Color { + return _.sample(colors); +} + +export function defensiveClone(target: T): T { + let jsonString = JSON.stringify(target); + return JSON.parse(jsonString || "null"); +} + +export interface AxiosErrorResponse { + response?: { + data: { + [reason: string]: string + }; + }; +}; + +export function toastErrors({ err }: UnsafeError) { + return error(prettyPrintApiErrors(err)); +} + +/** Concats and capitalizes all of the error key/value + * pairs returned by the /api/xyz endpoint. */ +export function prettyPrintApiErrors(err: AxiosErrorResponse) { + return _.map(safelyFetchErrors(err), + (v, k) => `${(k || "").split("_").join(" ")}: ${v.toString()}.`.toLowerCase()) + .map(str => _.capitalize(str)).join(" "); +} + +function safelyFetchErrors(err: AxiosErrorResponse): Dictionary { + // In case the interpreter gives us an oddball error message. + if (err && err.response && err.response.data) { + return err.response.data; + } else { + console.warn(t("Last error message wasn't formatted like an API error.")); + console.dir(err); + return { problem: t("Farmbot Web App hit an unhandled exception.") }; + } +} + +/** Moves an array item from one position in an array to another. Note that this + * is a pure function so a new array will be returned, instead of altering the + * array argument. + * SOURCE: + * https://github.com/granteagon/move/blob/master/src/index.js */ +export function move(array: T[], fromIndex: number, toIndex: number) { + + let item = array[fromIndex]; + let length = array.length; + let diff = fromIndex - toIndex; + + if (diff > 0) { + // move left + return [ + ...array.slice(0, toIndex), + item, + ...array.slice(toIndex, fromIndex), + ...array.slice(fromIndex + 1, length) + ]; + } else if (diff < 0) { + // move right + return [ + ...array.slice(0, fromIndex), + ...array.slice(fromIndex + 1, toIndex + 1), + item, + ...array.slice(toIndex + 1, length) + ]; + } + return array; +} + +export function isMobile() { + if (window && + window.innerWidth <= 568 && window.innerHeight <= 600 && + navigator.userAgent.match(/Android/i) + || navigator.userAgent.match(/webOS/i) + || navigator.userAgent.match(/iPhone/i) + || navigator.userAgent.match(/iPod/i) + || navigator.userAgent.match(/BlackBerry/i) + || navigator.userAgent.match(/Windows Phone/i) + ) { + return true; + } else { + return false; + } +} +/** USAGE: DYNAMICALLY plucks `obj[key]`. + * * `undefined` becomes `""` + * * `number` types are coerced to strings (Eg: "5"). + * * `boolean` is converted to "true" and "false" (a string). + * * All other types raise a runtime exception (Objects, functions, + * Array, Symbol, etc) + */ +export function safeStringFetch(obj: any, key: string): string { + let boxed = box(obj[key]); + switch (boxed.kind) { + case "undefined": + case "null": + return ""; + case "number": + case "string": + return boxed.value.toString(); + case "boolean": + return (boxed.value) ? "true" : "false"; + default: + let msg = t(`Numbers strings and null only (got ${boxed.kind}).`); + throw new Error(msg); + } +} + +export function localStorageNumFetch(key: string): number | undefined { + let output = JSON.parse(_.get(localStorage, key, "null")); + return (_.isNumber(output)) ? output : undefined; +} + +export function localStorageBoolFetch(key: string): boolean { + let output = JSON.parse(_.get(localStorage, key, "false")); + return !output; +} + +/** We don't support IE. This method stops users from trying to use the site. + * It's unfortunate that we need to do this, but the site simply won't work on + * old browsers and our error logs were getting full of IE related bugs. */ +export function stopIE() { + function flunk() { + // DO NOT USE i18next here. + // IE Cannot handle it. + const READ_THE_COMMENT_ABOVE = "This app only works with modern browsers."; + alert(READ_THE_COMMENT_ABOVE); + window.location.href = "https://www.google.com/chrome/"; + } + try { + let REQUIRED_GLOBALS = ["Promise", "console", "WebSocket", "Intl"]; + // Can't use Array.proto.map because IE. + // Can't translate the text because IE (no promises) + for (var i = 0; i < REQUIRED_GLOBALS.length; i++) { + if (!window.hasOwnProperty(REQUIRED_GLOBALS[i])) { + flunk(); + } + } + let REQUIRED_ARRAY_METHODS = ["includes", "map", "filter"]; + for (i = 0; i < REQUIRED_ARRAY_METHODS.length; i++) { + if (!Array.prototype.hasOwnProperty(REQUIRED_ARRAY_METHODS[i])) { + flunk(); + } + } + } catch (error) { + flunk(); + } +} + +export function pick(target: T, key: K): T[K] { + return target[key]; +} + +/** _Safely_ check a value at runtime to know if it can be used for square + * bracket access. + */ +export function hasKey(base: (keyof T)[]) { + return (target: T | any): target is keyof T => { + return base.includes(target); + }; +} + +/** Usefull for calculating uploads and progress bars for Promise.all */ +export class Progress { + constructor(public total: number, + public cb: ProgressCallback, + public completed = 0) { }; + + get isDone() { + return this.completed >= this.total; + } + + bump = (force = false) => { + if (force || !this.isDone) { this.cb(this); } + } + + inc = () => { this.completed++; this.bump(); } + + finish = () => { this.completed = this.total; this.bump(true); } +} +/** If you're creating a module that publishes Progress state, you can use this + * to prevent people from directly modifying the progress. */ +export type ProgressCallback = (p: Readonly) => void; + +/** Used only for the sequence scrolling at the moment. + * Native DOM methods just aren't standardized enough yet, + * so this is an implementation without libs or polyfills. */ +export function smoothScrollToBottom() { + let body = document.body; + let html = document.documentElement; + + // Not all browsers for mobile/desktop compute height the same, this fixes it. + let height = Math.max(body.scrollHeight, body.offsetHeight, + html.clientHeight, html.scrollHeight, html.offsetHeight); + + let startY = window.pageYOffset; + let stopY = height; + let distance = stopY > startY ? stopY - startY : startY - stopY; + if (distance < 100) { + scrollTo(0, stopY); + return; + } + + // Higher the distance divided, faster the scroll. + // Numbers too low will cause jarring ui bugs. + let speed = Math.round(distance / 14); + if (speed >= 6) { speed = 14; }; + let step = Math.round(distance / 25); + let leapY = stopY > startY ? startY + step : startY - step; + let timer = 0; + if (stopY > startY) { + for (let i = startY; i < stopY; i += step) { + setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed); + leapY += step; + if (leapY > stopY) { leapY = stopY; } + timer++; + } return; + } + for (let i = startY; i > stopY; i -= step) { + setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed); + leapY -= step; if (leapY < stopY) { leapY = stopY; } + timer++; + } +} + +/** Fancy debug */ +var last = ""; +export function fancyDebug(t: any) { + console.log(Object + .keys(t) + .map(key => [key, t[key]]) + .map((x) => { + let key = _.padRight(x[0], 20, " "); + let val = (JSON.stringify(x[1]) || "Nothing").slice(0, 52); + + return `${key} => ${val}`; + }) + .join("\n")); +} + +export type CowardlyDictionary = Dictionary; +/** Sometimes, you are forced to pass a number type even though + * the resource has no ID (usually for rendering purposes). + * Example: + * farmEvent.id || 0 + * + * In those cases, you can use this constant to indicate intent. + */ +export const NOT_SAVED = -1; + +export function isUndefined(x: any): x is undefined { + return _.isUndefined(x); +} + +/** Better than Array.proto.filter and _.compact() because the type checker + * knows what's going on. + */ +export function betterCompact(input: (T | undefined)[]): T[] { + let output: T[] = []; + input.forEach(x => x ? output.push(x) : "") + return output; +}; + +/** Sorts a list of tagged resources. Unsaved resource get put on the end. */ +export function sortResourcesById(input: T[]): T[] { + return _.sortBy(input, (x) => x.body.id || Infinity); +} + +/** Light wrapper around _.merge() to prevent common type errors / mistakes. */ +export function betterMerge(target: T, update: U): T & U { + return _.merge({}, target, update); +} + +/** Like parseFloat, but allows you to control fallback value instead of + * returning NaN. */ +export function betterParseNum(num: string | undefined, + fallback: number): number { + try { + let maybe = JSON.parse("" + num); + if (_.isNumber(maybe) && !_.isNaN(maybe)) { + return maybe; + } + } catch (_err) { + } + return fallback; +} +/** Determine if a string contains one of multiple values. */ +export function oneOf(list: string[], target: string) { + let matches = 0; + list.map(x => target.includes(x) ? matches++ : ""); + return !!matches; +} + +/** Dynamically change the meta title of the page. */ +export function updatePageInfo(pageName: string) { + if (pageName === "designer") { pageName = "Farm Designer"; } + document.title = _.capitalize(pageName); + // Possibly add meta "content" here dynamically as well +} + +export function attachToRoot

(type: React.ComponentClass

, + props?: React.Attributes & P) { + let node = document.createElement("DIV"); + node.id = "root"; + document.body.appendChild(node); + + let reactElem = React.createElement(type, props); + let domElem = document.getElementById("root"); + + if (domElem) { + render(reactElem, domElem); + } else { + throw new Error(t("Add a

with id `root` to the page first.")); + }; +} + +/** The firmware will have an integer overflow if you don't check this one. */ +const MAX_INPUT = 32000; +const MIN_INPUT = 0; + +interface High { outcome: "high"; result: number; } +interface Low { outcome: "low"; result: number; } +interface Malformed { outcome: "malformed"; result: undefined; } +interface Ok { outcome: "ok", result: number; } +export type ClampResult = High | Low | Malformed | Ok; + +/** Handle all the possible ways a user could give us bad data or cause an + * integer overflow in the firmware. */ +export function clampUnsignedInteger(input: string): ClampResult { + let result = Math.round(parseInt(input, 10)); + + // Clamp to prevent overflow. + if (_.isNaN(result)) { return { outcome: "malformed", result: undefined }; }; + if (result > MAX_INPUT) { return { outcome: "high", result: MAX_INPUT }; } + if (result < MIN_INPUT) { return { outcome: "low", result: MIN_INPUT }; } + + return { outcome: "ok", result }; +} + +export enum SemverResult { + LEFT_IS_GREATER = 1, + RIGHT_IS_GREATER = -1, + EQUAL = 0 +} +// CREDIT: https://github.com/substack/semver-compare +export function semverCompare(left: string, right: string): SemverResult { + var pa: Array = left.split("."); + var pb: Array = right.split("."); + for (var i = 0; i < 3; i++) { + var num_left = Number(pa[i]); + var num_right = Number(pb[i]); + + if (num_left > num_right) { + return SemverResult.LEFT_IS_GREATER; + } + + if (num_right > num_left) { + return SemverResult.RIGHT_IS_GREATER; + } + + if (!isNaN(num_left) && isNaN(num_right)) { + return SemverResult.LEFT_IS_GREATER + }; + + if (isNaN(num_left) && !isNaN(num_right)) { + return SemverResult.RIGHT_IS_GREATER + }; + + } + + return SemverResult.EQUAL; +}; + +/** TODO: Upgrading to TSC 2.4, maybe we don't need this? + * - RC 20 June 2016 */ +type JSXChild = JSX.Element | string | undefined; +export type JSXChildren = JSXChild[] | JSXChild; + +/** HACK: Server side caching (or webpack) is not doing something right. + * This is a work around until then. */ +export function hardRefresh() { + // Change this string to trigger a force cache reset. + let HARD_RESET = "NEED_HARD_REFRESH4"; + if (localStorage && sessionStorage) { + if (!localStorage.getItem(HARD_RESET)) { + console.warn("Performing hard reset of localstorage and JS cookies."); + Object.keys(localStorage) + .concat(Object.keys(sessionStorage)) + .filter(x => x !== "session") // Avoid endless logout loop. + .map(x => { + delete localStorage[x]; + delete sessionStorage[x]; + }); + deleteAllCookies(); + localStorage.setItem(HARD_RESET, "DONE"); + window.location.reload(true); + } else { + console.warn("Not running hard reset. Key was present: " + HARD_RESET); + } + } else { + console.log("Local storage not supported."); + }; +} + +/** Tim reported some issues Chrome. I don't think it is cookie related, + * but to be extra certain, we clear all client side cookies when busting + * cache. + * NOTE: We will need to remove this if we ever add google analytics. + * -RC 23 jun 17 */ +function deleteAllCookies() { + var cookies = document.cookie.split(";"); + + for (var i = 0; i < cookies.length; i++) { + var cookie = cookies[i]; + var eqPos = cookie.indexOf("="); + var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; + document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; + } +} + +export type Primitive = boolean | string | number; diff --git a/frontend/src/verification.ts b/frontend/src/verification.ts new file mode 100644 index 000000000..41baf14e0 --- /dev/null +++ b/frontend/src/verification.ts @@ -0,0 +1,32 @@ +import { getParam } from "./util"; +import { put } from "axios"; +import { API } from "./api/api"; +import { Session } from "./session"; +import { AuthState } from "./auth/interfaces"; +// THIS ONE IS IMPORTANT, EVEN THOUGH IT DOESN'T LOOK LIKE IT. + +/** Function called when the Frontend verifies its registration token. + * IF YOU BREAK THIS FUNCTION, YOU BREAK *ALL* NEW USER REGISTRATIONS. + */ +export async function verify() { + const token = getParam('token'); + const url = API.fetchBrowserLocation(); + try { + let { data } = await put(url + "/api/users/verify/" + token); + Session.put(data); + window.location.href = window.location.origin + "/app/controls"; + } catch (e) { + document.write(` +

+ We were unable to verify your account. +

+

+ Please try again or ask for help on + the FarmBot Forum. +

+ `); + throw new Error("USER VERIFICATION FAILED!"); + } +} + +verify(); diff --git a/frontend/tools/farmBotRenderer.js b/frontend/tools/farmBotRenderer.js new file mode 100644 index 000000000..4a22db269 --- /dev/null +++ b/frontend/tools/farmBotRenderer.js @@ -0,0 +1,70 @@ +var merge = require("lodash").merge; +var hbs = require("handlebars"); +var fs = require("fs"); + +function FarmBotRenderer(options) { + this.options = merge({}, { + path: "/", + filename: "index.html", + outputPath: "/", + isProd: false, + include: "bundle" + }, options); +} + +FarmBotRenderer.prototype = { + + constructor: FarmBotRenderer, + + apply: function (compiler) { + var self = this; + + compiler.plugin("after-emit", function (compilation, callback) { + var options = compiler.options; + var stats = compilation.getStats().toJson({ + hash: false, + publicPath: true, + assets: true, + chunks: false, + modules: false, + source: false, + errorDetails: false, + timings: false + }); + + var wantedAssets = []; + + stats + .assets + .map(function (asset) { + var name = asset.name; + var isIncluded = asset.name.includes(self.options.include); + var notMapFile = !asset.name.endsWith(".map"); + if (isIncluded && notMapFile) { + asset.name = "/" + asset.name.replace("../", ""); // Unacceptable. :( + wantedAssets.push(asset); + } + }); + + var finalPath = self.options.path; + console.dir(self.options); + fs.readFile(finalPath, "utf-8", function (err, source) { + + var data = self.options; + data.wantedAssets = wantedAssets; + var template = hbs.compile(source); + + var html = template(data); + var outputDest = self.options.outputPath + "/" + self.options.filename; + + fs.writeFile(outputDest, html, function (err, data) { + if (err) { console.error("error in writing file", err); } + }); + }); + + callback(); + }) + } +} + +module.exports = FarmBotRenderer; \ No newline at end of file diff --git a/frontend/tools/webpack.config.base.js b/frontend/tools/webpack.config.base.js new file mode 100644 index 000000000..987697954 --- /dev/null +++ b/frontend/tools/webpack.config.base.js @@ -0,0 +1,130 @@ +var path = require("path"); +var webpack = require("webpack"); +var exec = require("child_process").exec; +var execSync = require("child_process").execSync; +var webpack = require("webpack"); +var fs = require("fs"); + +var FarmBotRenderer = require("./farmBotRenderer"); + +// WEBPACK BASE CONFIG +exec("mkdir -p public/app"); +exec("echo -n > public/app/index.html"); +exec("touch public/app/index.html"); +exec("touch public/app/index.html"); +exec("rm -rf public/dist"); +exec("rm -rf public/*.eot"); + +var isProd = !!(global.WEBPACK_ENV === "production"); + +module.exports = function() { + return { + entry: { + "bundle": path.resolve(__dirname, "../src/entry.tsx"), + "front_page": "./src/front_page/index.tsx", + "verification": "./src/verification.ts", + "password_reset": "./src/password_reset/index.tsx", + "tos_update": "./src/tos_update/index.tsx" + }, + output: { + path: path.resolve(__dirname, "../public"), + libraryTarget: "umd", + publicPath: "/", + devtoolLineToLine: true + }, + devtool: "eval", + + // Allows imports without file extensions. + resolve: { + extensions: [".js", ".ts", ".tsx", ".css", ".scss", ".json", ".hbs"] + }, + + // Shared loaders for prod and dev. + module: { + rules: [ + { test: /\.tsx?$/, use: "ts-loader" }, + { + test: [/\.woff$/, /\.woff2$/, /\.ttf$/], + use: "url-loader" + }, + { + test: [/\.eot$/, /\.svg(\?v=\d+\.\d+\.\d+)?$/], + use: "file-loader" + } + ] + }, + + // Shared plugins for prod and dev. + plugins: [ + new webpack.DefinePlugin({ + "process.env.REVISION": JSON.stringify(execSync( + "git log --pretty=format:'%h%n%ad%n%f' -1").toString()) + }), + new webpack.DefinePlugin({ + "process.env.SHORT_REVISION": JSON.stringify(execSync( + "git log --pretty=format:'%h' -1").toString()) + }), + // FarmBot Inc related. + new webpack.DefinePlugin({ + "process.env.NPM_ADDON": JSON.stringify( + process.env.NPM_ADDON || false).toString() + }), + // Conditionally add "terms of service" + // Eg: Servers run by FarmBot, Inc. + new webpack.DefinePlugin({ + "process.env.TOS_URL": JSON + .stringify(process.env.TOS_URL || false).toString() + }), + // Conditionally add privacy policy. + // Eg: Servers run by FarmBot, Inc. + new webpack.DefinePlugin({ + "process.env.PRIV_URL": JSON + .stringify(process.env.PRIV_URL || false).toString() + }), + new FarmBotRenderer({ + isProd: isProd, + path: path.resolve(__dirname, "../src/static/app_index.hbs"), + filename: "index.html", + outputPath: path.resolve(__dirname, "../public/app/") + }), + new FarmBotRenderer({ + isProd: isProd, + path: path.resolve(__dirname, "../src/static/front_page.hbs"), + filename: "index.html", + outputPath: path.resolve(__dirname, "../public/"), + include: "front_page" + }), + new FarmBotRenderer({ + isProd: isProd, + path: path.resolve(__dirname, "../src/static/verification.hbs"), + filename: "verify.html", + outputPath: path.resolve(__dirname, "../public/"), + include: "verification" + }), + new FarmBotRenderer({ + isProd: isProd, + path: path.resolve(__dirname, "../src/static/password_reset.hbs"), + filename: "password_reset.html", + outputPath: path.resolve(__dirname, "../public/"), + include: "password_reset" + }), + new FarmBotRenderer({ + isProd: isProd, + path: path.resolve(__dirname, "../src/static/tos_update.hbs"), + filename: "tos_update.html", + outputPath: path.resolve(__dirname, "../public/"), + include: "tos_update" + }) + ], + + // Webpack Dev Server. + devServer: { + historyApiFallback: { + rewrites: [ + { from: /\/app\//, to: "/app/index.html" }, + { from: /password_reset/, to: "password_reset.html" }, + ] + } + } + } +} \ No newline at end of file diff --git a/frontend/tools/webpack.config.dev.js b/frontend/tools/webpack.config.dev.js new file mode 100644 index 000000000..c500b9d41 --- /dev/null +++ b/frontend/tools/webpack.config.dev.js @@ -0,0 +1,52 @@ +var webpack = require("webpack"); +var fs = require("fs"); +var path = require("path"); + +var WebpackNotifierPlugin = require("webpack-notifier"); + +var generateConfig = require("./webpack.config.base"); +var exec = require("child_process").execSync; +var configPath = path.resolve(__dirname, "../src/config.json"); +var FarmBotRenderer = require("./farmBotRenderer"); + +global.WEBPACK_ENV = "development"; + +c = function() { + var conf = generateConfig(); + + conf.output.filename = "dist/[name].js"; + + conf + .module + .rules + .push({ + test: [/\.scss$/, /\.css$/], + use: ["style-loader", "css-loader", "sass-loader"] + }); + + conf + .plugins + .push(new webpack.DefinePlugin({ + "process.env.NODE_ENV": JSON.stringify("development"), + "process.env.REVISION": JSON.stringify( + exec("git log --pretty=format:'%h%n%ad%n%f' -1").toString()) + })); + + conf + .plugins + .push(new WebpackNotifierPlugin({ + title: "Webpack", + excludeWarnings: false + })); + + if (fs.existsSync(configPath)) { + var config = require(configPath); + conf.plugins.push(new webpack.DefinePlugin({ + "process.env.CONFIG": JSON.stringify(config) + })); + } + + return conf; +}; + +module.exports = c(); \ No newline at end of file diff --git a/frontend/tools/webpack.config.prd.js b/frontend/tools/webpack.config.prd.js new file mode 100644 index 000000000..93c09958d --- /dev/null +++ b/frontend/tools/webpack.config.prd.js @@ -0,0 +1,61 @@ +global.WEBPACK_ENV = "production"; + +var webpack = require("webpack"); +var exec = require("child_process").execSync; +var path = require("path"); + +var ExtractTextPlugin = require("extract-text-webpack-plugin"); +var OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin"); +var UglifyJsPlugin = require("webpack-uglify-js-plugin"); + +var generateConfig = require("./webpack.config.base"); +var FarmBotRenderer = require("./farmBotRenderer"); + +c = function () { + + var conf = generateConfig(); + + conf.module.rules.push({ + test: [/\.scss$/, /\.css$/], + loader: ExtractTextPlugin.extract("css-loader!sass-loader") + }); + + conf.output.filename = "dist/[name].[chunkhash].js"; + + // PLUGINS: + [ + new webpack.DefinePlugin({ + "process.env.NODE_ENV": JSON.stringify("production"), + "process.env.REVISION": JSON.stringify( + exec("git log --pretty=format:'%h%n%ad%n%f' -1").toString()) + }), + new ExtractTextPlugin({ + // Temporary hotfix for some issues on staging. + // - RC 12 MAY 17 + filename: "dist/styles.css", + // filename: "dist/styles.[chunkhash].css", + disable: false, + allChunks: true + }), + new OptimizeCssAssetsPlugin({ + assetNameRegExp: /\.css$/g, + cssProcessor: require("cssnano"), + cssProcessorOptions: { discardComments: { removeAll: true } }, + canPrint: true + }), + new UglifyJsPlugin({ + cacheFolder: path.resolve(__dirname, "../public/dist/cached_uglify/"), + debug: true, + minimize: true, + sourceMap: true, + screw_ie8: true, + output: { comments: false }, + compressor: { warnings: false } + }) + ].forEach(function (x) { conf.plugins.push(x) }); + + return conf; + +} + +module.exports = c(); diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 000000000..fedf0ee4f --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "lib": [ + "es7", + "dom", + "es2017.object" + ], + "target": "es5", + "module": "commonjs", + "jsx": "react", + "experimentalDecorators": true, + "noImplicitAny": true, + "noImplicitThis": true, + "allowUnreachableCode": false, + "strictNullChecks": true, + "sourceMap": true, + "allowJs": true + }, + "exclude": [ + "node_modules", + "typings" + ], + "compileOnSave": false, + "buildOnSave": false +} diff --git a/frontend/tslint.json b/frontend/tslint.json new file mode 100644 index 000000000..a813e5af5 --- /dev/null +++ b/frontend/tslint.json @@ -0,0 +1,72 @@ +{ + "rules": { + "max-line-length": [ + true, + 100 + ], + "no-inferrable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "cyclomatic-complexity": [ + true, + 21 + ], + "indent": [ + true, + "spaces" + ], + "no-invalid-this": true, + "no-switch-case-fall-through": true, + "no-string-literal": true, + "no-eval": true, + "no-any": true, + "no-duplicate-variable": true, + "no-arg": true, + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-bitwise": true, + "no-var-requires": false, + "no-shadowed-variable": true, + "no-unused-variable": true, + "eofline": true, + "one-line": [ + true, + "check-catch", + "check-else", + "check-open-brace", + "check-whitespace" + ], + "quotemark": [ + true, + "double", + "avoid-escape" + ], + "semicolon": [ + true, + "ignore-interfaces", + "ignore-bound-class-methods" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "curly": true, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} diff --git a/frontend/typings/READ_THIS.txt b/frontend/typings/READ_THIS.txt new file mode 100644 index 000000000..dda13041a --- /dev/null +++ b/frontend/typings/READ_THIS.txt @@ -0,0 +1,7 @@ +I hope that we can someday not use this folder and use all the @types/* repositories. + +Some (legacy) libraries don't work with the newer typings (eg: Karma). + +In those rare circumstances, we can put them in here. + +Hopefully, this folder will go away some day. diff --git a/frontend/typings/axios.d.ts b/frontend/typings/axios.d.ts new file mode 100644 index 000000000..1358f9d36 --- /dev/null +++ b/frontend/typings/axios.d.ts @@ -0,0 +1,294 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/axios/axios.d.ts +// Type definitions for axios 0.9.1 +// Project: https://github.com/mzabriskie/axios +// Definitions by: Marcel Buesing +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace Axios { + + interface IThenable { + then(onFulfilled?: (value: R) => U | IThenable, onRejected?: (error: any) => U | IThenable): IThenable; + then(onFulfilled?: (value: R) => U | IThenable, onRejected?: (error: any) => void): IThenable; + } + + interface IPromise extends IThenable { + then(onFulfilled?: (value: R) => U | IThenable, onRejected?: (error: any) => U | IThenable): IPromise; + then(onFulfilled?: (value: R) => U | IThenable, onRejected?: (error: any) => void): IPromise; + catch(onRejected?: (error: any) => U | IThenable): IPromise; + } + + /** + * HTTP Basic auth details + */ + interface AxiosHttpBasicAuth { + username: string; + password: string; + } + + /** + * Common axios XHR config interface + * - request body data type + */ + interface AxiosXHRConfigBase { + /** + * will be prepended to `url` unless `url` is absolute. + * It can be convenient to set `baseURL` for an instance + * of axios to pass relative URLs to methods of that instance. + */ + baseURL?: string; + + /** + * custom headers to be sent + */ + headers?: Object; + + /** + * URL parameters to be sent with the request + */ + params?: Object; + + /** + * optional function in charge of serializing `params` + * (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) + */ + paramsSerializer?: (params: Object) => string; + + /** + * specifies the number of milliseconds before the request times out. + * If the request takes longer than `timeout`, the request will be aborted. + */ + timeout?: number; + + /** + * indicates whether or not cross-site Access-Control requests + * should be made using credentials + */ + withCredentials?: boolean; + + /** + * indicates that HTTP Basic auth should be used, and supplies + * credentials. This will set an `Authorization` header, + * overwriting any existing `Authorization` custom headers you have + * set using `headers`. + */ + auth?: AxiosHttpBasicAuth; + + /** + * indicates the type of data that the server will respond with + * options are 'arraybuffer', 'blob', 'document', 'json', 'text' + */ + responseType?: string; + + /** + * name of the cookie to use as a value for xsrf token + */ + xsrfCookieName?: string; + + /** + * name of the http header that carries the xsrf token value + */ + xsrfHeaderName?: string; + + /** + * Change the request data before it is sent to the server. + * This is only applicable for request methods 'PUT', 'POST', and 'PATCH' + * The last function in the array must return a string or an ArrayBuffer + */ + transformRequest?: ((data: T) => U) | [(data: T) => U]; + + /** + * change the response data to be made before it is passed to then/catch + */ + transformResponse?: (data: T) => U; + } + + /** + * - request body data type + */ + interface AxiosXHRConfig extends AxiosXHRConfigBase { + /** + * server URL that will be used for the request, options are: + * GET, PUT, POST, DELETE, CONNECT, HEAD, OPTIONS, TRACE, PATCH + */ + url: string; + + /** + * request method to be used when making the request + */ + method?: string; + + /** + * data to be sent as the request body + * Only applicable for request methods 'PUT', 'POST', and 'PATCH' + * When no `transformRequest` is set, must be a string, an ArrayBuffer or a hash + */ + data?: T; + } + + /** + * - expected response type, + * - request body data type + */ + interface AxiosXHR { + /** + * Response that was provided by the server + */ + data: T; + + /** + * HTTP status code from the server response + */ + status: number; + + /** + * HTTP status message from the server response + */ + statusText: string; + + /** + * headers that the server responded with + */ + headers: Object; + + /** + * config that was provided to `axios` for the request + */ + config: AxiosXHRConfig; + } + + interface Interceptor { + /** + * intercept request before it is sent + */ + request: RequestInterceptor; + + /** + * intercept response of request when it is received. + */ + response: ResponseInterceptor + } + + type InterceptorId = number; + + interface RequestInterceptor { + /** + * - request body data type + */ + + use(fulfilledFn: (config: AxiosXHRConfig) => AxiosXHRConfig): InterceptorId; + + use(fulfilledFn: (config: AxiosXHRConfig) => AxiosXHRConfig, + rejectedFn: (error: any) => any) + : InterceptorId; + + eject(interceptorId: InterceptorId): void; + } + + interface ResponseInterceptor { + /** + * - expected response type + */ + + use(fulfilledFn: (config: Axios.AxiosXHR) => Axios.AxiosXHR): InterceptorId; + + use(fulfilledFn: (config: Axios.AxiosXHR) => Axios.AxiosXHR, + rejectedFn: (error: any) => any) + : InterceptorId; + + eject(interceptorId: InterceptorId): void; + } + + /** + * - expected response type, + * - request body data type + */ + interface AxiosInstance { + + /** + * Send request as configured + */ + (config: AxiosXHRConfig): IPromise>; + + /** + * Send request as configured + */ + new (config: AxiosXHRConfig): IPromise>; + + /** + * Send request as configured + */ + request(config: AxiosXHRConfig): IPromise>; + + /** + * intercept requests or responses before they are handled by then or catch + */ + interceptors: Interceptor; + + /** + * equivalent to `Promise.all` + */ + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>, T5 | IPromise>, T6 | IPromise>, T7 | IPromise>, T8 | IPromise>, T9 | IPromise>, T10 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>, T5 | IPromise>, T6 | IPromise>, T7 | IPromise>, T8 | IPromise>, T9 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>, T5 | IPromise>, T6 | IPromise>, T7 | IPromise>, T8 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>, T5 | IPromise>, T6 | IPromise>, T7 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>, T5 | IPromise>, T6 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>, T5 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>, T4 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>, T3 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR, AxiosXHR]>; + all(values: [T1 | IPromise>, T2 | IPromise>]): IPromise<[AxiosXHR, AxiosXHR]>; + + /** + * spread array parameter to `fn`. + * note: alternative to `spread`, destructuring assignment. + */ + spread(fn: (t1: T1, t2: T2) => U): (arr: ([T1, T2])) => U; + + /** + * convenience alias, method = GET + */ + get(url: string, config?: AxiosXHRConfigBase): IPromise>; + + + /** + * convenience alias, method = DELETE + */ + delete(url: string, config?: AxiosXHRConfigBase): IPromise>; + + /** + * convenience alias, method = HEAD + */ + head(url: string, config?: AxiosXHRConfigBase): IPromise>; + + /** + * convenience alias, method = POST + */ + post(url: string, data?: any, config?: AxiosXHRConfigBase): IPromise>; + + /** + * convenience alias, method = PUT + */ + put(url: string, data?: any, config?: AxiosXHRConfigBase): IPromise>; + + /** + * convenience alias, method = PATCH + */ + patch(url: string, data?: any, config?: AxiosXHRConfigBase): IPromise>; + } + + /** + * - expected response type, + */ + interface AxiosStatic extends AxiosInstance { + /** + * create a new instance of axios with a custom config + */ + create(config: AxiosXHRConfigBase): AxiosInstance; + } +} + +declare var axios: Axios.AxiosStatic; + +declare module "axios" { + export = axios; +} diff --git a/frontend/typings/i18n.d.ts b/frontend/typings/i18n.d.ts new file mode 100644 index 000000000..8dce8c849 --- /dev/null +++ b/frontend/typings/i18n.d.ts @@ -0,0 +1,134 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/1fb90278ce678b668e0bed069095b1920dc658ec/i18next/i18next.d.ts +declare namespace I18next { + interface ResourceStore { + [language: string]: ResourceStoreLanguage; + } + + interface ResourceStoreLanguage { + [namespace: string]: ResourceStoreKey; + } + + interface ResourceStoreKey { + [key: string]: any; + } + + interface InterpolationOptions { + escapeValue?: boolean; + prefix?: string; + suffix?: string; + prefixEscaped?: string; + suffixEscaped?: string; + unescapeSuffix?: string; + unescapePrefix?: string; + nestingPrefix?: string; + nestingSuffix?: string; + nestingPrefixEscaped?: string; + nestedSuffixEscaped?: string; + defaultVariables?: any; + } + + interface TranslationOptions { + defaultValue?: string; + count?: number; + context?: any; + replace?: any; + lng?: string; + lngs?: string[]; + fallbackLng?: string; + ns?: string | string[]; + keySeparator?: string; + nsSeparator?: string; + returnObjects?: boolean; + joinArrays?: string; + postProcess?: string | any[]; + interpolation?: InterpolationOptions; + } + + interface Options { + debug?: boolean; + resources?: ResourceStore; + lng?: string; + fallbackLng?: string; + ns?: string | string[]; + defaultNS?: string; + fallbackNS?: string | string[]; + whitelist?: string[]; + lowerCaseLng?: boolean; + load?: string + preload?: string[]; + keySeparator?: string; + nsSeparator?: string; + pluralSeparator?: string; + contextSeparator?: string; + saveMissing?: boolean; + saveMissingTo?: string; + missingKeyHandler?: (lng: string, ns: string, key: string, fallbackValue: string) => void; + parseMissingKeyHandler?: (key: string) => void; + appendNamespaceToMissingKey?: boolean; + postProcess?: string | any[]; + returnNull?: boolean; + returnEmptyString?: boolean; + returnObjects?: boolean; + returnedObjectHandler?: (key: string, value: string, options: any) => void; + joinArrays?: string; + overloadTranslationOptionHandler?: (args: any[]) => TranslationOptions; + interpolation?: InterpolationOptions; + detection?: any; + backend?: any; + cache?: any; + } + + type TranslationFunction = (key: string, options?: TranslationOptions) => string; + + class I18n { + constructor(options?: Options, callback?: (err: any, t: TranslationFunction) => void); + + init(options?: Options, callback?: (err: any, t: TranslationFunction) => void): I18n; + + loadResources(callback?: (err: any) => void): void; + + language: string; + + languages: string[]; + + use(module: any): I18n; + + changeLanguage(lng: string, callback?: (err: any, t: TranslationFunction) => void): void; + + getFixedT(lng?: string, ns?: string | string[]): TranslationFunction; + + t(key: string, options?: ResourceStoreKey): string | any | Array; + + exists(): boolean; + + setDefaultNamespace(ns: string): void; + + loadNamespaces(ns: string[], callback?: () => void): void; + + loadLanguages(lngs: string[], callback?: () => void): void; + + dir(lng?: string): string; + + createInstance(options?: Options, callback?: (err: any, t: TranslationFunction) => void): I18n; + + cloneInstance(options?: Options, callback?: (err: any, t: TranslationFunction) => void): I18n; + + on(event: string, listener: () => void): void; + on(initialized: 'initialized', listener: (options: I18next.Options) => void): void; + on(loaded: 'loaded', listener: (loaded: any) => void): void; + on(failedLoading: 'failedLoading', listener: (lng: string, ns: string, msg: string) => void): void; + on(missingKey: 'missingKey', listener: (lngs: any, namespace: string, key: string, res: any) => void): void; + on(added: 'added', listener: (lng: string, ns: string) => void): void; + on(removed: 'removed', listener: (lng: string, ns: string) => void): void; + on(languageChanged: 'languageChanged', listener: (lng: string) => void): void; + + off(event: string, listener: () => void): void; + } +} + +declare module 'i18next' { + var i18n: I18next.I18n; + + export = i18n; +} diff --git a/frontend/typings/index.d.ts b/frontend/typings/index.d.ts new file mode 100644 index 000000000..acc0cde52 --- /dev/null +++ b/frontend/typings/index.d.ts @@ -0,0 +1,4 @@ +/// +/// +/// +/// diff --git a/frontend/typings/lodash.d.ts b/frontend/typings/lodash.d.ts new file mode 100644 index 000000000..6f4ad9c3a --- /dev/null +++ b/frontend/typings/lodash.d.ts @@ -0,0 +1,15828 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/e12c8e3bcdd77fb05d498ec61525be6ad112dfd6/lodash/lodash-3.10.d.ts +// Type definitions for Lo-Dash +// Project: http://lodash.com/ +// Definitions by: Brian Zengel , Ilya Mochalov +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare var _: _.LoDashStatic; + +declare module _ { + interface LoDashStatic { + /** + * Creates a lodash object which wraps the given value to enable intuitive method chaining. + * + * In addition to Lo-Dash methods, wrappers also have the following Array methods: + * concat, join, pop, push, reverse, shift, slice, sort, splice, and unshift + * + * Chaining is supported in custom builds as long as the value method is implicitly or + * explicitly included in the build. + * + * The chainable wrapper functions are: + * after, assign, bind, bindAll, bindKey, chain, chunk, compact, compose, concat, countBy, + * createCallback, curry, debounce, defaults, defer, delay, difference, filter, flatten, + * forEach, forEachRight, forIn, forInRight, forOwn, forOwnRight, functions, groupBy, + * indexBy, initial, intersection, invert, invoke, keys, map, max, memoize, merge, min, + * object, omit, once, pairs, partial, partialRight, pick, pluck, pull, push, range, reject, + * remove, rest, reverse, sample, shuffle, slice, sort, sortBy, splice, tap, throttle, times, + * toArray, transform, union, uniq, unshift, unzip, values, where, without, wrap, and zip + * + * The non-chainable wrapper functions are: + * clone, cloneDeep, contains, escape, every, find, findIndex, findKey, findLast, + * findLastIndex, findLastKey, has, identity, indexOf, isArguments, isArray, isBoolean, + * isDate, isElement, isEmpty, isEqual, isFinite, isFunction, isNaN, isNull, isNumber, + * isObject, isPlainObject, isRegExp, isString, isUndefined, join, lastIndexOf, mixin, + * noConflict, parseInt, pop, random, reduce, reduceRight, result, shift, size, some, + * sortedIndex, runInContext, template, unescape, uniqueId, and value + * + * The wrapper functions first and last return wrapped values when n is provided, otherwise + * they return unwrapped values. + * + * Explicit chaining can be enabled by using the _.chain method. + **/ + (value: number): LoDashImplicitWrapper; + (value: string): LoDashImplicitStringWrapper; + (value: boolean): LoDashImplicitWrapper; + (value: Array): LoDashImplicitNumberArrayWrapper; + (value: Array): LoDashImplicitArrayWrapper; + (value: T): LoDashImplicitObjectWrapper; + (value: any): LoDashImplicitWrapper; + + /** + * The semantic version number. + **/ + VERSION: string; + + /** + * An object used to flag environments features. + **/ + support: Support; + + /** + * By default, the template delimiters used by Lo-Dash are similar to those in embedded Ruby + * (ERB). Change the following template settings to use alternative delimiters. + **/ + templateSettings: TemplateSettings; + } + + /** + * By default, the template delimiters used by Lo-Dash are similar to those in embedded Ruby + * (ERB). Change the following template settings to use alternative delimiters. + **/ + interface TemplateSettings { + /** + * The "escape" delimiter. + **/ + escape?: RegExp; + + /** + * The "evaluate" delimiter. + **/ + evaluate?: RegExp; + + /** + * An object to import into the template as local variables. + **/ + imports?: Dictionary; + + /** + * The "interpolate" delimiter. + **/ + interpolate?: RegExp; + + /** + * Used to reference the data object in the template text. + **/ + variable?: string; + } + + /** + * Creates a cache object to store key/value pairs. + */ + interface MapCache { + /** + * Removes `key` and its value from the cache. + * @param key The key of the value to remove. + * @return Returns `true` if the entry was removed successfully, else `false`. + */ + delete(key: string): boolean; + + /** + * Gets the cached value for `key`. + * @param key The key of the value to get. + * @return Returns the cached value. + */ + get(key: string): any; + + /** + * Checks if a cached value for `key` exists. + * @param key The key of the entry to check. + * @return Returns `true` if an entry for `key` exists, else `false`. + */ + has(key: string): boolean; + + /** + * Sets `value` to `key` of the cache. + * @param key The key of the value to cache. + * @param value The value to cache. + * @return Returns the cache object. + */ + set(key: string, value: any): _.Dictionary; + } + + /** + * An object used to flag environments features. + **/ + interface Support { + /** + * Detect if an arguments object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). + **/ + argsClass: boolean; + + /** + * Detect if arguments objects are Object objects (all but Narwhal and Opera < 10.5). + **/ + argsObject: boolean; + + /** + * Detect if name or message properties of Error.prototype are enumerable by default. + * (IE < 9, Safari < 5.1) + **/ + enumErrorProps: boolean; + + /** + * Detect if prototype properties are enumerable by default. + * + * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 (if the prototype or a property on the + * prototype has been set) incorrectly set the [[Enumerable]] value of a function’s prototype property to true. + **/ + enumPrototypes: boolean; + + /** + * Detect if Function#bind exists and is inferred to be fast (all but V8). + **/ + fastBind: boolean; + + /** + * Detect if functions can be decompiled by Function#toString (all but PS3 and older Opera + * mobile browsers & avoided in Windows 8 apps). + **/ + funcDecomp: boolean; + + /** + * Detect if Function#name is supported (all but IE). + **/ + funcNames: boolean; + + /** + * Detect if arguments object indexes are non-enumerable (Firefox < 4, IE < 9, PhantomJS, + * Safari < 5.1). + **/ + nonEnumArgs: boolean; + + /** + * Detect if properties shadowing those on Object.prototype are non-enumerable. + * + * In IE < 9 an objects own properties, shadowing non-enumerable ones, are made + * non-enumerable as well (a.k.a the JScript [[DontEnum]] bug). + **/ + nonEnumShadows: boolean; + + /** + * Detect if own properties are iterated after inherited properties (all but IE < 9). + **/ + ownLast: boolean; + + /** + * Detect if Array#shift and Array#splice augment array-like objects correctly. + * + * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array shift() and splice() + * functions that fail to remove the last element, value[0], of array-like objects even + * though the length property is set to 0. The shift() method is buggy in IE 8 compatibility + * mode, while splice() is buggy regardless of mode in IE < 9 and buggy in compatibility mode + * in IE 9. + **/ + spliceObjects: boolean; + + /** + * Detect lack of support for accessing string characters by index. + * + * IE < 8 can't access characters by index and IE 8 can only access characters by index on + * string literals. + **/ + unindexedChars: boolean; + } + + interface LoDashWrapperBase { } + + interface LoDashImplicitWrapperBase extends LoDashWrapperBase { } + + interface LoDashExplicitWrapperBase extends LoDashWrapperBase { } + + interface LoDashImplicitWrapper extends LoDashImplicitWrapperBase> { } + + interface LoDashExplicitWrapper extends LoDashExplicitWrapperBase> { } + + interface LoDashImplicitStringWrapper extends LoDashImplicitWrapper { } + + interface LoDashExplicitStringWrapper extends LoDashExplicitWrapper { } + + interface LoDashImplicitObjectWrapper extends LoDashImplicitWrapperBase> { } + + interface LoDashExplicitObjectWrapper extends LoDashExplicitWrapperBase> { } + + interface LoDashImplicitArrayWrapper extends LoDashImplicitWrapperBase> { + pop(): T; + push(...items: T[]): LoDashImplicitArrayWrapper; + shift(): T; + sort(compareFn?: (a: T, b: T) => number): LoDashImplicitArrayWrapper; + splice(start: number): LoDashImplicitArrayWrapper; + splice(start: number, deleteCount: number, ...items: any[]): LoDashImplicitArrayWrapper; + unshift(...items: T[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper extends LoDashExplicitWrapperBase> { } + + interface LoDashImplicitNumberArrayWrapper extends LoDashImplicitArrayWrapper { } + + interface LoDashExplicitNumberArrayWrapper extends LoDashExplicitArrayWrapper { } + + // join (exists only in wrappers) + interface LoDashImplicitWrapper { + /** + * @see _.join + */ + join(separator?: string): string; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.join + */ + join(separator?: string): string; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.join + */ + join(separator?: string): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.join + */ + join(separator?: string): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.join + */ + join(separator?: string): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.join + */ + join(separator?: string): LoDashExplicitWrapper; + } + + /********* + * Array * + *********/ + + //_.chunk + interface LoDashStatic { + /** + * Creates an array of elements split into groups the length of size. If collection can’t be split evenly, the + * final chunk will be the remaining elements. + * + * @param array The array to process. + * @param size The length of each chunk. + * @return Returns the new array containing chunks. + */ + chunk( + array: List, + size?: number + ): T[][]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.chunk + */ + chunk(size?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.chunk + */ + chunk(size?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.chunk + */ + chunk(size?: number): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.chunk + */ + chunk(size?: number): LoDashExplicitArrayWrapper; + } + + //_.compact + interface LoDashStatic { + /** + * Creates an array with all falsey values removed. The values false, null, 0, "", undefined, and NaN are + * falsey. + * + * @param array The array to compact. + * @return (Array) Returns the new array of filtered values. + */ + compact(array?: List): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.compact + */ + compact(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.compact + */ + compact(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.compact + */ + compact(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.compact + */ + compact(): LoDashExplicitArrayWrapper; + } + + //_.difference + interface LoDashStatic { + /** + * Creates an array of unique array values not included in the other provided arrays using SameValueZero for + * equality comparisons. + * + * @param array The array to inspect. + * @param values The arrays of values to exclude. + * @return Returns the new array of filtered values. + */ + difference( + array: T[]|List, + ...values: (T[]|List)[] + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.difference + */ + difference(...values: (T[]|List)[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.difference + */ + difference(...values: (TValue[]|List)[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.difference + */ + difference(...values: (T[]|List)[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.difference + */ + difference(...values: (TValue[]|List)[]): LoDashExplicitArrayWrapper; + } + + //_.drop + interface LoDashStatic { + /** + * Creates a slice of array with n elements dropped from the beginning. + * + * @param array The array to query. + * @param n The number of elements to drop. + * @return Returns the slice of array. + */ + drop(array: T[]|List, n?: number): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.drop + */ + drop(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.drop + */ + drop(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.drop + */ + drop(n?: number): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.drop + */ + drop(n?: number): LoDashExplicitArrayWrapper; + } + + //_.dropRight + interface LoDashStatic { + /** + * Creates a slice of array with n elements dropped from the end. + * + * @param array The array to query. + * @param n The number of elements to drop. + * @return Returns the slice of array. + */ + dropRight( + array: List, + n?: number + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.dropRight + */ + dropRight(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.dropRight + */ + dropRight(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.dropRight + */ + dropRight(n?: number): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.dropRight + */ + dropRight(n?: number): LoDashExplicitArrayWrapper; + } + + //_.dropRightWhile + interface LoDashStatic { + /** + * Creates a slice of array excluding elements dropped from the end. Elements are dropped until predicate + * returns falsey. The predicate is bound to thisArg and invoked with three arguments: (value, index, array). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * match the properties of the given object, else false. + * + * @param array The array to query. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the slice of array. + */ + dropRightWhile( + array: List, + predicate?: ListIterator, + thisArg?: any + ): TValue[]; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + array: List, + predicate?: string, + thisArg?: any + ): TValue[]; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + array: List, + predicate?: TWhere + ): TValue[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropRightWhile + */ + dropRightWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + //_.dropWhile + interface LoDashStatic { + /** + * Creates a slice of array excluding elements dropped from the beginning. Elements are dropped until predicate + * returns falsey. The predicate is bound to thisArg and invoked with three arguments: (value, index, array). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param array The array to query. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the slice of array. + */ + dropWhile( + array: List, + predicate?: ListIterator, + thisArg?: any + ): TValue[]; + + /** + * @see _.dropWhile + */ + dropWhile( + array: List, + predicate?: string, + thisArg?: any + ): TValue[]; + + /** + * @see _.dropWhile + */ + dropWhile( + array: List, + predicate?: TWhere + ): TValue[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.dropWhile + */ + dropWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + //_.fill + interface LoDashStatic { + /** + * Fills elements of array with value from start up to, but not including, end. + * + * Note: This method mutates array. + * + * @param array The array to fill. + * @param value The value to fill array with. + * @param start The start position. + * @param end The end position. + * @return Returns array. + */ + fill( + array: any[], + value: T, + start?: number, + end?: number + ): T[]; + + /** + * @see _.fill + */ + fill( + array: List, + value: T, + start?: number, + end?: number + ): List; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.fill + */ + fill( + value: T, + start?: number, + end?: number + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.fill + */ + fill( + value: T, + start?: number, + end?: number + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.fill + */ + fill( + value: T, + start?: number, + end?: number + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.fill + */ + fill( + value: T, + start?: number, + end?: number + ): LoDashExplicitObjectWrapper>; + } + + //_.findIndex + interface LoDashStatic { + /** + * This method is like _.find except that it returns the index of the first element predicate returns truthy + * for instead of the element itself. + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param array The array to search. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the index of the found element, else -1. + */ + findIndex( + array: List, + predicate?: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.findIndex + */ + findIndex( + array: List, + predicate?: string, + thisArg?: any + ): number; + + /** + * @see _.findIndex + */ + findIndex( + array: List, + predicate?: W + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.findIndex + */ + findIndex( + predicate?: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: string, + thisArg?: any + ): number; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: W + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.findIndex + */ + findIndex( + predicate?: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: string, + thisArg?: any + ): number; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: W + ): number; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.findIndex + */ + findIndex( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: W + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.findIndex + */ + findIndex( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findIndex + */ + findIndex( + predicate?: W + ): LoDashExplicitWrapper; + } + + //_.findLastIndex + interface LoDashStatic { + /** + * This method is like _.findIndex except that it iterates over elements of collection from right to left. + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param array The array to search. + * @param predicate The function invoked per iteration. + * @param thisArg The function invoked per iteration. + * @return Returns the index of the found element, else -1. + */ + findLastIndex( + array: List, + predicate?: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.findLastIndex + */ + findLastIndex( + array: List, + predicate?: string, + thisArg?: any + ): number; + + /** + * @see _.findLastIndex + */ + findLastIndex( + array: List, + predicate?: W + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: string, + thisArg?: any + ): number; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: W + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: string, + thisArg?: any + ): number; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: W + ): number; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: W + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastIndex + */ + findLastIndex( + predicate?: W + ): LoDashExplicitWrapper; + } + + //_.first + interface LoDashStatic { + /** + * Gets the first element of array. + * + * @alias _.head + * + * @param array The array to query. + * @return Returns the first element of array. + */ + first(array: List): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.first + */ + first(): string; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.first + */ + first(): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.first + */ + first(): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.first + */ + first(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.first + */ + first(): T; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.first + */ + first(): T; + } + + interface RecursiveArray extends Array> {} + interface ListOfRecursiveArraysOrValues extends List> {} + + //_.flatten + interface LoDashStatic { + /** + * Flattens a nested array. If isDeep is true the array is recursively flattened, otherwise it’s only + * flattened a single level. + * + * @param array The array to flatten. + * @param isDeep Specify a deep flatten. + * @return Returns the new flattened array. + */ + flatten(array: ListOfRecursiveArraysOrValues, isDeep: boolean): T[]; + + /** + * @see _.flatten + */ + flatten(array: List): T[]; + + /** + * @see _.flatten + */ + flatten(array: ListOfRecursiveArraysOrValues): RecursiveArray; + } + + interface LoDashImplicitWrapper { + /** + * @see _.flatten + */ + flatten(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.flatten + */ + flatten(isDeep?: boolean): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.flatten + */ + flatten(isDeep?: boolean): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.flatten + */ + flatten(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.flatten + */ + flatten(isDeep?: boolean): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flatten + */ + flatten(isDeep?: boolean): LoDashExplicitArrayWrapper; + } + + //_.flattenDeep + interface LoDashStatic { + /** + * Recursively flattens a nested array. + * + * @param array The array to recursively flatten. + * @return Returns the new flattened array. + */ + flattenDeep(array: ListOfRecursiveArraysOrValues): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flattenDeep + */ + flattenDeep(): LoDashExplicitArrayWrapper; + } + + //_.head + interface LoDashStatic { + /** + * @see _.first + */ + head(array: List): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.first + */ + head(): string; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.first + */ + head(): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.first + */ + head(): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.first + */ + head(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.first + */ + head(): T; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.first + */ + head(): T; + } + + //_.indexOf + interface LoDashStatic { + /** + * Gets the index at which the first occurrence of value is found in array using SameValueZero for equality + * comparisons. If fromIndex is negative, it’s used as the offset from the end of array. If array is sorted + * providing true for fromIndex performs a faster binary search. + * + * @param array The array to search. + * @param value The value to search for. + * @param fromIndex The index to search from or true to perform a binary search on a sorted array. + * @return The index to search from or true to perform a binary search on a sorted array. + */ + indexOf( + array: List, + value: T, + fromIndex?: boolean|number + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.indexOf + */ + indexOf( + value: T, + fromIndex?: boolean|number + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.indexOf + */ + indexOf( + value: TValue, + fromIndex?: boolean|number + ): number; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.indexOf + */ + indexOf( + value: T, + fromIndex?: boolean|number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.indexOf + */ + indexOf( + value: TValue, + fromIndex?: boolean|number + ): LoDashExplicitWrapper; + } + + //_.initial + interface LoDashStatic { + /** + * Gets all but the last element of array. + * + * @param array The array to query. + * @return Returns the slice of array. + */ + initial(array: List): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.initial + */ + initial(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.initial + */ + initial(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.initial + */ + initial(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.initial + */ + initial(): LoDashExplicitArrayWrapper; + } + + //_.intersection + interface LoDashStatic { + /** + * Creates an array of unique values that are included in all of the provided arrays using SameValueZero for + * equality comparisons. + * + * @param arrays The arrays to inspect. + * @return Returns the new array of shared values. + */ + intersection(...arrays: (T[]|List)[]): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.intersection + */ + intersection(...arrays: (TResult[]|List)[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.intersection + */ + intersection(...arrays: (TResult[]|List)[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.intersection + */ + intersection(...arrays: (TResult[]|List)[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.intersection + */ + intersection(...arrays: (TResult[]|List)[]): LoDashExplicitArrayWrapper; + } + + //_.last + interface LoDashStatic { + /** + * Gets the last element of array. + * + * @param array The array to query. + * @return Returns the last element of array. + */ + last(array: List): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.last + */ + last(): string; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.last + */ + last(): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.last + */ + last(): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.last + */ + last(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.last + */ + last(): T; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.last + */ + last(): T; + } + + //_.lastIndexOf + interface LoDashStatic { + /** + * This method is like _.indexOf except that it iterates over elements of array from right to left. + * + * @param array The array to search. + * @param value The value to search for. + * @param fromIndex The index to search from or true to perform a binary search on a sorted array. + * @return Returns the index of the matched value, else -1. + */ + lastIndexOf( + array: List, + value: T, + fromIndex?: boolean|number + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.lastIndexOf + */ + lastIndexOf( + value: T, + fromIndex?: boolean|number + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.lastIndexOf + */ + lastIndexOf( + value: TResult, + fromIndex?: boolean|number + ): number; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.lastIndexOf + */ + lastIndexOf( + value: T, + fromIndex?: boolean|number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.lastIndexOf + */ + lastIndexOf( + value: TResult, + fromIndex?: boolean|number + ): LoDashExplicitWrapper; + } + + //_.object + interface LoDashStatic { + /** + * @see _.zipObject + */ + object( + props: List|List>, + values?: List + ): TResult; + + /** + * @see _.zipObject + */ + object( + props: List|List>, + values?: List + ): TResult; + + /** + * @see _.zipObject + */ + object( + props: List|List>, + values?: List + ): _.Dictionary; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashImplicitObjectWrapper<_.Dictionary>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashImplicitObjectWrapper<_.Dictionary>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashExplicitObjectWrapper<_.Dictionary>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + object( + values?: List + ): _.LoDashExplicitObjectWrapper<_.Dictionary>; + } + + //_.pull + interface LoDashStatic { + /** + * Removes all provided values from array using SameValueZero for equality comparisons. + * + * Note: Unlike _.without, this method mutates array. + * + * @param array The array to modify. + * @param values The values to remove. + * @return Returns array. + */ + pull( + array: T[], + ...values: T[] + ): T[]; + + /** + * @see _.pull + */ + pull( + array: List, + ...values: T[] + ): List; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.pull + */ + pull(...values: T[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.pull + */ + pull(...values: TValue[]): LoDashImplicitObjectWrapper>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.pull + */ + pull(...values: T[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.pull + */ + pull(...values: TValue[]): LoDashExplicitObjectWrapper>; + } + + //_.pullAt + interface LoDashStatic { + /** + * Removes elements from array corresponding to the given indexes and returns an array of the removed elements. + * Indexes may be specified as an array of indexes or as individual arguments. + * + * Note: Unlike _.at, this method mutates array. + * + * @param array The array to modify. + * @param indexes The indexes of elements to remove, specified as individual indexes or arrays of indexes. + * @return Returns the new array of removed elements. + */ + pullAt( + array: List, + ...indexes: (number|number[])[] + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.pullAt + */ + pullAt(...indexes: (number|number[])[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.pullAt + */ + pullAt(...indexes: (number|number[])[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.pullAt + */ + pullAt(...indexes: (number|number[])[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.pullAt + */ + pullAt(...indexes: (number|number[])[]): LoDashExplicitArrayWrapper; + } + + //_.remove + interface LoDashStatic { + /** + * Removes all elements from array that predicate returns truthy for and returns an array of the removed + * elements. The predicate is bound to thisArg and invoked with three arguments: (value, index, array). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * Note: Unlike _.filter, this method mutates array. + * + * @param array The array to modify. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the new array of removed elements. + */ + remove( + array: List, + predicate?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.remove + */ + remove( + array: List, + predicate?: string, + thisArg?: any + ): T[]; + + /** + * @see _.remove + */ + remove( + array: List, + predicate?: W + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.remove + */ + remove( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: W + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.remove + */ + remove( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: W + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.remove + */ + remove( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: W + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.remove + */ + remove( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.remove + */ + remove( + predicate?: W + ): LoDashExplicitArrayWrapper; + } + + //_.rest + interface LoDashStatic { + /** + * Gets all but the first element of array. + * + * @alias _.tail + * + * @param array The array to query. + * @return Returns the slice of array. + */ + rest(array: List): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.rest + */ + rest(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.rest + */ + rest(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.rest + */ + rest(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.rest + */ + rest(): LoDashExplicitArrayWrapper; + } + + //_.slice + interface LoDashStatic { + /** + * Creates a slice of array from start up to, but not including, end. + * + * @param array The array to slice. + * @param start The start position. + * @param end The end position. + * @return Returns the slice of array. + */ + slice( + array: T[], + start?: number, + end?: number + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.slice + */ + slice( + start?: number, + end?: number + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.slice + */ + slice( + start?: number, + end?: number + ): LoDashExplicitArrayWrapper; + } + + //_.sortedIndex + interface LoDashStatic { + /** + * Uses a binary search to determine the lowest index at which value should be inserted into array in order to maintain its sort order. If an iteratee function is provided it’s invoked for value and each element of array to compute their sort ranking. The iteratee is bound to thisArg and invoked with one argument; (value). + * + * If a property name is provided for iteratee the created _.property style callback returns the property value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that have the properties of the given object, else false. + * + * @param array The sorted array to inspect. + * @param value The value to evaluate. + * @param iteratee The function invoked per iteration. + * @return The this binding of iteratee. + */ + sortedIndex( + array: List, + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + array: List, + value: T, + iteratee?: (x: T) => any, + thisArg?: any + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + array: List, + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + array: List, + value: T, + iteratee: W + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + array: List, + value: T, + iteratee: Object + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.sortedIndex + */ + sortedIndex( + value: string, + iteratee?: (x: string) => TSort, + thisArg?: any + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: W + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee?: (x: T) => any, + thisArg?: any + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: W + ): number; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: Object + ): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.sortedIndex + */ + sortedIndex( + value: string, + iteratee?: (x: string) => TSort, + thisArg?: any + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: string + ): LoDashExplicitWrapper; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: W + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee?: (x: T) => any, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: string + ): LoDashExplicitWrapper; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: W + ): LoDashExplicitWrapper; + + /** + * @see _.sortedIndex + */ + sortedIndex( + value: T, + iteratee: Object + ): LoDashExplicitWrapper; + } + + //_.sortedLastIndex + interface LoDashStatic { + /** + * This method is like _.sortedIndex except that it returns the highest index at which value should be + * inserted into array in order to maintain its sort order. + * + * @param array The sorted array to inspect. + * @param value The value to evaluate. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the index at which value should be inserted into array. + */ + sortedLastIndex( + array: List, + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + array: List, + value: T, + iteratee?: (x: T) => any, + thisArg?: any + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + array: List, + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + array: List, + value: T, + iteratee: W + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + array: List, + value: T, + iteratee: Object + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: string, + iteratee?: (x: string) => TSort, + thisArg?: any + ): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: W + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee?: (x: T) => any, + thisArg?: any + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: string + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: W + ): number; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: Object + ): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: string, + iteratee?: (x: string) => TSort, + thisArg?: any + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: string + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: W + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee?: (x: T) => TSort, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee?: (x: T) => any, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: string + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: W + ): LoDashExplicitWrapper; + + /** + * @see _.sortedLastIndex + */ + sortedLastIndex( + value: T, + iteratee: Object + ): LoDashExplicitWrapper; + } + + //_.tail + interface LoDashStatic { + /** + * @see _.rest + */ + tail(array: List): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.rest + */ + tail(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.rest + */ + tail(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.rest + */ + tail(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.rest + */ + tail(): LoDashExplicitArrayWrapper; + } + + //_.take + interface LoDashStatic { + /** + * Creates a slice of array with n elements taken from the beginning. + * + * @param array The array to query. + * @param n The number of elements to take. + * @return Returns the slice of array. + */ + take( + array: List, + n?: number + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.take + */ + take(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.take + */ + take(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.take + */ + take(n?: number): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.take + */ + take(n?: number): LoDashExplicitArrayWrapper; + } + + //_.takeRight + interface LoDashStatic { + /** + * Creates a slice of array with n elements taken from the end. + * + * @param array The array to query. + * @param n The number of elements to take. + * @return Returns the slice of array. + */ + takeRight( + array: List, + n?: number + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.takeRight + */ + takeRight(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.takeRight + */ + takeRight(n?: number): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.takeRight + */ + takeRight(n?: number): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.takeRight + */ + takeRight(n?: number): LoDashExplicitArrayWrapper; + } + + //_.takeRightWhile + interface LoDashStatic { + /** + * Creates a slice of array with elements taken from the end. Elements are taken until predicate returns + * falsey. The predicate is bound to thisArg and invoked with three arguments: (value, index, array). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param array The array to query. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the slice of array. + */ + takeRightWhile( + array: List, + predicate?: ListIterator, + thisArg?: any + ): TValue[]; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + array: List, + predicate?: string, + thisArg?: any + ): TValue[]; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + array: List, + predicate?: TWhere + ): TValue[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeRightWhile + */ + takeRightWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + //_.takeWhile + interface LoDashStatic { + /** + * Creates a slice of array with elements taken from the beginning. Elements are taken until predicate returns + * falsey. The predicate is bound to thisArg and invoked with three arguments: (value, index, array). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param array The array to query. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the slice of array. + */ + takeWhile( + array: List, + predicate?: ListIterator, + thisArg?: any + ): TValue[]; + + /** + * @see _.takeWhile + */ + takeWhile( + array: List, + predicate?: string, + thisArg?: any + ): TValue[]; + + /** + * @see _.takeWhile + */ + takeWhile( + array: List, + predicate?: TWhere + ): TValue[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.takeWhile + */ + takeWhile( + predicate?: TWhere + ): LoDashExplicitArrayWrapper; + } + + //_.union + interface LoDashStatic { + /** + * Creates an array of unique values, in order, from all of the provided arrays using SameValueZero for + * equality comparisons. + * + * @param arrays The arrays to inspect. + * @return Returns the new array of combined values. + */ + union(...arrays: List[]): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.union + */ + union(...arrays: List[]): LoDashImplicitArrayWrapper; + + /** + * @see _.union + */ + union(...arrays: List[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.union + */ + union(...arrays: List[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.union + */ + union(...arrays: List[]): LoDashExplicitArrayWrapper; + + /** + * @see _.union + */ + union(...arrays: List[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.union + */ + union(...arrays: List[]): LoDashExplicitArrayWrapper; + } + + //_.uniq + interface LoDashStatic { + /** + * Creates a duplicate-free version of an array, using SameValueZero for equality comparisons, in which only + * the first occurrence of each element is kept. Providing true for isSorted performs a faster search + * algorithm for sorted arrays. If an iteratee function is provided it’s invoked for each element in the + * array to generate the criterion by which uniqueness is computed. The iteratee is bound to thisArg and + * invoked with three arguments: (value, index, array). + * + * If a property name is provided for iteratee the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @alias _.unique + * + * @param array The array to inspect. + * @param isSorted Specify the array is sorted. + * @param iteratee The function invoked per iteration. + * @param thisArg iteratee + * @return Returns the new duplicate-value-free array. + */ + uniq( + array: List, + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + iteratee?: string, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + isSorted?: boolean, + iteratee?: Object + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + isSorted?: boolean, + iteratee?: TWhere + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + iteratee?: Object + ): T[]; + + /** + * @see _.uniq + */ + uniq( + array: List, + iteratee?: TWhere + ): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: Object + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: Object + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: Object + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: Object + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + uniq( + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + } + + //_.unique + interface LoDashStatic { + /** + * @see _.uniq + */ + unique( + array: List, + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + iteratee?: string, + thisArg?: any + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + isSorted?: boolean, + iteratee?: Object + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + isSorted?: boolean, + iteratee?: TWhere + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + iteratee?: Object + ): T[]; + + /** + * @see _.uniq + */ + unique( + array: List, + iteratee?: TWhere + ): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: Object + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: Object + ): LoDashImplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: TWhere + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: Object + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + isSorted?: boolean, + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: Object + ): LoDashExplicitArrayWrapper; + + /** + * @see _.uniq + */ + unique( + iteratee?: TWhere + ): LoDashExplicitArrayWrapper; + } + + //_.unzip + interface LoDashStatic { + /** + * This method is like _.zip except that it accepts an array of grouped elements and creates an array + * regrouping the elements to their pre-zip configuration. + * + * @param array The array of grouped elements to process. + * @return Returns the new array of regrouped elements. + */ + unzip(array: List>): T[][]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.unzip + */ + unzip(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.unzip + */ + unzip(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.unzip + */ + unzip(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.unzip + */ + unzip(): LoDashExplicitArrayWrapper; + } + + //_.unzipWith + interface LoDashStatic { + /** + * This method is like _.unzip except that it accepts an iteratee to specify how regrouped values should be + * combined. The iteratee is bound to thisArg and invoked with four arguments: (accumulator, value, index, + * group). + * + * @param array The array of grouped elements to process. + * @param iteratee The function to combine regrouped values. + * @param thisArg The this binding of iteratee. + * @return Returns the new array of regrouped elements. + */ + unzipWith( + array: List>, + iteratee?: MemoIterator, + thisArg?: any + ): TResult[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.unzipWith + */ + unzipWith( + iteratee?: MemoIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.unzipWith + */ + unzipWith( + iteratee?: MemoIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + //_.without + interface LoDashStatic { + /** + * Creates an array excluding all provided values using SameValueZero for equality comparisons. + * + * @param array The array to filter. + * @param values The values to exclude. + * @return Returns the new array of filtered values. + */ + without( + array: List, + ...values: T[] + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.without + */ + without(...values: T[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.without + */ + without(...values: T[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.without + */ + without(...values: T[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.without + */ + without(...values: T[]): LoDashExplicitArrayWrapper; + } + + //_.xor + interface LoDashStatic { + /** + * Creates an array of unique values that is the symmetric difference of the provided arrays. + * + * @param arrays The arrays to inspect. + * @return Returns the new array of values. + */ + xor(...arrays: List[]): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.xor + */ + xor(...arrays: List[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.xor + */ + xor(...arrays: List[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.xor + */ + xor(...arrays: List[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.xor + */ + xor(...arrays: List[]): LoDashExplicitArrayWrapper; + } + + //_.zip + interface LoDashStatic { + /** + * Creates an array of grouped elements, the first of which contains the first elements of the given arrays, + * the second of which contains the second elements of the given arrays, and so on. + * + * @param arrays The arrays to process. + * @return Returns the new array of grouped elements. + */ + zip(...arrays: List[]): T[][]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.zip + */ + zip(...arrays: List[]): _.LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.zip + */ + zip(...arrays: List[]): _.LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.zip + */ + zip(...arrays: List[]): _.LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.zip + */ + zip(...arrays: List[]): _.LoDashExplicitArrayWrapper; + } + + //_.zipObject + interface LoDashStatic { + /** + * The inverse of _.pairs; this method returns an object composed from arrays of property names and values. + * Provide either a single two dimensional array, e.g. [[key1, value1], [key2, value2]] or two arrays, one of + * property names and one of corresponding values. + * + * @alias _.object + * + * @param props The property names. + * @param values The property values. + * @return Returns the new object. + */ + zipObject( + props: List|List>, + values?: List + ): TResult; + + /** + * @see _.zipObject + */ + zipObject( + props: List|List>, + values?: List + ): TResult; + + /** + * @see _.zipObject + */ + zipObject( + props: List|List>, + values?: List + ): _.Dictionary; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashImplicitObjectWrapper<_.Dictionary>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashImplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashImplicitObjectWrapper<_.Dictionary>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashExplicitObjectWrapper<_.Dictionary>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashExplicitObjectWrapper; + + /** + * @see _.zipObject + */ + zipObject( + values?: List + ): _.LoDashExplicitObjectWrapper<_.Dictionary>; + } + + //_.zipWith + interface LoDashStatic { + /** + * This method is like _.zip except that it accepts an iteratee to specify how grouped values should be + * combined. The iteratee is bound to thisArg and invoked with four arguments: (accumulator, value, index, + * group). + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @return Returns the new array of grouped elements. + */ + zipWith(...args: any[]): TResult[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.zipWith + */ + zipWith(...args: any[]): LoDashImplicitArrayWrapper; + } + + /********* + * Chain * + *********/ + + //_.chain + interface LoDashStatic { + /** + * Creates a lodash object that wraps value with explicit method chaining enabled. + * + * @param value The value to wrap. + * @return Returns the new lodash wrapper instance. + */ + chain(value: number): LoDashExplicitWrapper; + chain(value: string): LoDashExplicitWrapper; + chain(value: boolean): LoDashExplicitWrapper; + chain(value: T[]): LoDashExplicitArrayWrapper; + chain(value: T): LoDashExplicitObjectWrapper; + chain(value: any): LoDashExplicitWrapper; + } + + interface LoDashImplicitWrapper { + /** + * @see _.chain + */ + chain(): LoDashExplicitWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.chain + */ + chain(): LoDashExplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.chain + */ + chain(): LoDashExplicitObjectWrapper; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.chain + */ + chain(): TWrapper; + } + + //_.tap + interface LoDashStatic { + /** + * This method invokes interceptor and returns value. The interceptor is bound to thisArg and invoked with one + * argument; (value). The purpose of this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @param value The value to provide to interceptor. + * @param interceptor The function to invoke. + * @parem thisArg The this binding of interceptor. + * @return Returns value. + **/ + tap( + value: T, + interceptor: (value: T) => void, + thisArg?: any + ): T; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.tap + */ + tap( + interceptor: (value: T) => void, + thisArg?: any + ): TWrapper; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.tap + */ + tap( + interceptor: (value: T) => void, + thisArg?: any + ): TWrapper; + } + + //_.thru + interface LoDashStatic { + /** + * This method is like _.tap except that it returns the result of interceptor. + * + * @param value The value to provide to interceptor. + * @param interceptor The function to invoke. + * @param thisArg The this binding of interceptor. + * @return Returns the result of interceptor. + */ + thru( + value: T, + interceptor: (value: T) => TResult, + thisArg?: any + ): TResult; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any): LoDashImplicitWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any): LoDashImplicitWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any): LoDashImplicitWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any): LoDashImplicitObjectWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult[], + thisArg?: any): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.thru + */ + thru( + interceptor: (value: T) => TResult[], + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + //_.prototype.commit + interface LoDashImplicitWrapperBase { + /** + * Executes the chained sequence and returns the wrapped result. + * + * @return Returns the new lodash wrapper instance. + */ + commit(): TWrapper; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.commit + */ + commit(): TWrapper; + } + + //_.prototype.concat + interface LoDashImplicitWrapperBase { + /** + * Creates a new array joining a wrapped array with any additional arrays and/or values. + * + * @param items + * @return Returns the new concatenated array. + */ + concat(...items: Array>): LoDashImplicitArrayWrapper; + + /** + * @see _.concat + */ + concat(...items: Array>): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.concat + */ + concat(...items: Array>): LoDashExplicitArrayWrapper; + + /** + * @see _.concat + */ + concat(...items: Array>): LoDashExplicitArrayWrapper; + } + + //_.prototype.plant + interface LoDashImplicitWrapperBase { + /** + * Creates a clone of the chained sequence planting value as the wrapped value. + * @param value The value to plant as the wrapped value. + * @return Returns the new lodash wrapper instance. + */ + plant(value: number): LoDashImplicitWrapper; + + /** + * @see _.plant + */ + plant(value: string): LoDashImplicitStringWrapper; + + /** + * @see _.plant + */ + plant(value: boolean): LoDashImplicitWrapper; + + /** + * @see _.plant + */ + plant(value: number[]): LoDashImplicitNumberArrayWrapper; + + /** + * @see _.plant + */ + plant(value: T[]): LoDashImplicitArrayWrapper; + + /** + * @see _.plant + */ + plant(value: T): LoDashImplicitObjectWrapper; + + /** + * @see _.plant + */ + plant(value: any): LoDashImplicitWrapper; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.plant + */ + plant(value: number): LoDashExplicitWrapper; + + /** + * @see _.plant + */ + plant(value: string): LoDashExplicitStringWrapper; + + /** + * @see _.plant + */ + plant(value: boolean): LoDashExplicitWrapper; + + /** + * @see _.plant + */ + plant(value: number[]): LoDashExplicitNumberArrayWrapper; + + /** + * @see _.plant + */ + plant(value: T[]): LoDashExplicitArrayWrapper; + + /** + * @see _.plant + */ + plant(value: T): LoDashExplicitObjectWrapper; + + /** + * @see _.plant + */ + plant(value: any): LoDashExplicitWrapper; + } + + //_.prototype.reverse + interface LoDashImplicitArrayWrapper { + /** + * Reverses the wrapped array so the first element becomes the last, the second element becomes the second to + * last, and so on. + * + * Note: This method mutates the wrapped array. + * + * @return Returns the new reversed lodash wrapper instance. + */ + reverse(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.reverse + */ + reverse(): LoDashExplicitArrayWrapper; + } + + //_.prototype.run + interface LoDashWrapperBase { + /** + * @see _.value + */ + run(): T; + } + + //_.prototype.toJSON + interface LoDashWrapperBase { + /** + * @see _.value + */ + toJSON(): T; + } + + //_.prototype.toString + interface LoDashWrapperBase { + /** + * Produces the result of coercing the unwrapped value to a string. + * + * @return Returns the coerced string value. + */ + toString(): string; + } + + //_.prototype.value + interface LoDashWrapperBase { + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @alias _.run, _.toJSON, _.valueOf + * + * @return Returns the resolved unwrapped value. + */ + value(): T; + } + + //_.valueOf + interface LoDashWrapperBase { + /** + * @see _.value + */ + valueOf(): T; + } + + /************** + * Collection * + **************/ + + //_.all + interface LoDashStatic { + /** + * @see _.every + */ + all( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + collection: List|Dictionary, + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + collection: List|Dictionary, + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.every + */ + all( + predicate?: ListIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.every + */ + all( + predicate?: ListIterator|DictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + all( + predicate?: TObject + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.every + */ + all( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + all( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + all( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.every + */ + all( + predicate?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + all( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + all( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + //_.any + interface LoDashStatic { + /** + * @see _.some + */ + any( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + collection: NumericDictionary, + predicate?: NumericDictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + collection: Object, + predicate?: ObjectIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + collection: List|Dictionary|NumericDictionary, + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + collection: Object, + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + collection: List|Dictionary|NumericDictionary, + predicate?: TObject + ): boolean; + + /** + * @see _.some + */ + any( + collection: List|Dictionary|NumericDictionary, + predicate?: Object + ): boolean; + + /** + * @see _.some + */ + any( + collection: Object, + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.some + */ + any( + predicate?: ListIterator|NumericDictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.some + */ + any( + predicate?: ListIterator|DictionaryIterator|NumericDictionaryIterator|ObjectIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + any( + predicate?: TObject + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.some + */ + any( + predicate?: ListIterator|NumericDictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + any( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + any( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.some + */ + any( + predicate?: ListIterator|DictionaryIterator|NumericDictionaryIterator|ObjectIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + any( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + any( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + //_.at + interface LoDashStatic { + /** + * Creates an array of elements corresponding to the given keys, or indexes, of collection. Keys may be + * specified as individual arguments or as arrays of keys. + * + * @param collection The collection to iterate over. + * @param props The property names or indexes of elements to pick, specified individually or in arrays. + * @return Returns the new array of picked elements. + */ + at( + collection: List|Dictionary, + ...props: (number|string|(number|string)[])[] + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.at + */ + at(...props: (number|string|(number|string)[])[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.at + */ + at(...props: (number|string|(number|string)[])[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.at + */ + at(...props: (number|string|(number|string)[])[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.at + */ + at(...props: (number|string|(number|string)[])[]): LoDashExplicitArrayWrapper; + } + + //_.collect + interface LoDashStatic { + /** + * @see _.map + */ + collect( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): TResult[]; + + /** + * @see _.map + */ + collect( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): TResult[]; + + /** + * @see _.map + */ + collect( + collection: List|Dictionary, + iteratee?: string + ): TResult[]; + + /** + * @see _.map + */ + collect( + collection: List|Dictionary, + iteratee?: TObject + ): boolean[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.map + */ + collect( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: string + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: TObject + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.map + */ + collect( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: string + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: TObject + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.map + */ + collect( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: string + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: TObject + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.map + */ + collect( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: string + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + collect( + iteratee?: TObject + ): LoDashExplicitArrayWrapper; + } + + //_.contains + interface LoDashStatic { + /** + * @see _.includes + */ + contains( + collection: List|Dictionary, + target: T, + fromIndex?: number + ): boolean; + + /** + * @see _.includes + */ + contains( + collection: string, + target: string, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.includes + */ + contains( + target: T, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.includes + */ + contains( + target: TValue, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.includes + */ + contains( + target: string, + fromIndex?: number + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.includes + */ + contains( + target: T, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.includes + */ + contains( + target: TValue, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.includes + */ + contains( + target: string, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + //_.countBy + interface LoDashStatic { + /** + * Creates an object composed of keys generated from the results of running each element of collection through + * iteratee. The corresponding value of each key is the number of times the key was returned by iteratee. The + * iteratee is bound to thisArg and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the composed aggregate object. + */ + countBy( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.countBy + */ + countBy( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.countBy + */ + countBy( + collection: NumericDictionary, + iteratee?: NumericDictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.countBy + */ + countBy( + collection: List|Dictionary|NumericDictionary, + iteratee?: string, + thisArg?: any + ): Dictionary; + + /** + * @see _.countBy + */ + countBy( + collection: List|Dictionary|NumericDictionary, + iteratee?: W + ): Dictionary; + + /** + * @see _.countBy + */ + countBy( + collection: List|Dictionary|NumericDictionary, + iteratee?: Object + ): Dictionary; + } + + interface LoDashImplicitWrapper { + /** + * @see _.countBy + */ + countBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.countBy + */ + countBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: W + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.countBy + */ + countBy( + iteratee?: ListIterator|DictionaryIterator|NumericDictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: W + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.countBy + */ + countBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.countBy + */ + countBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: W + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.countBy + */ + countBy( + iteratee?: ListIterator|DictionaryIterator|NumericDictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.countBy + */ + countBy( + iteratee?: W + ): LoDashExplicitObjectWrapper>; + } + + //_.detect + interface LoDashStatic { + /** + * @see _.find + */ + detect( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.find + */ + detect( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): T; + + /** + * @see _.find + */ + detect( + collection: List|Dictionary, + predicate?: string, + thisArg?: any + ): T; + + /** + * @see _.find + */ + detect( + collection: List|Dictionary, + predicate?: TObject + ): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.find + */ + detect( + predicate?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.find + */ + detect( + predicate?: string, + thisArg?: any + ): T; + + /** + * @see _.find + */ + detect( + predicate?: TObject + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.find + */ + detect( + predicate?: ListIterator|DictionaryIterator, + thisArg?: any + ): TResult; + + /** + * @see _.find + */ + detect( + predicate?: string, + thisArg?: any + ): TResult; + + /** + * @see _.find + */ + detect( + predicate?: TObject + ): TResult; + } + + //_.each + interface LoDashStatic { + /** + * @see _.forEach + */ + each( + collection: T[], + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.forEach + */ + each( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): List; + + /** + * @see _.forEach + */ + each( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forEach + */ + each( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + + /** + * @see _.forEach + */ + each( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.forEach + */ + each( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.forEach + */ + each( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forEach + */ + each( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.forEach + */ + each( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.forEach + */ + each( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forEach + */ + each( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper; + } + + //_.eachRight + interface LoDashStatic { + /** + * @see _.forEachRight + */ + eachRight( + collection: T[], + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.forEachRight + */ + eachRight( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): List; + + /** + * @see _.forEachRight + */ + eachRight( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forEachRight + */ + eachRight( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + + /** + * @see _.forEachRight + */ + eachRight( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.forEachRight + */ + eachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.forEachRight + */ + eachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forEachRight + */ + eachRight( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.forEachRight + */ + eachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.forEachRight + */ + eachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forEachRight + */ + eachRight( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper; + } + + //_.every + interface LoDashStatic { + /** + * Checks if predicate returns truthy for all elements of collection. The predicate is bound to thisArg and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @alias _.all + * + * @param collection The collection to iterate over. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns true if all elements pass the predicate check, else false. + */ + every( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + collection: List|Dictionary, + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + collection: List|Dictionary, + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.every + */ + every( + predicate?: ListIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.every + */ + every( + predicate?: ListIterator|DictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.every + */ + every( + predicate?: TObject + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.every + */ + every( + predicate?: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + every( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + every( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.every + */ + every( + predicate?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + every( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.every + */ + every( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + //_.filter + interface LoDashStatic { + /** + * Iterates over elements of collection, returning an array of all elements predicate returns truthy for. The + * predicate is bound to thisArg and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @alias _.select + * + * @param collection The collection to iterate over. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the new filtered array. + */ + filter( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.filter + */ + filter( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): T[]; + + /** + * @see _.filter + */ + filter( + collection: string, + predicate?: StringIterator, + thisArg?: any + ): string[]; + + /** + * @see _.filter + */ + filter( + collection: List|Dictionary, + predicate: string, + thisArg?: any + ): T[]; + + /** + * @see _.filter + */ + filter( + collection: List|Dictionary, + predicate: W + ): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.filter + */ + filter( + predicate?: StringIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.filter + */ + filter( + predicate: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + filter( + predicate: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + filter(predicate: W): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.filter + */ + filter( + predicate: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + filter( + predicate: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + filter(predicate: W): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.filter + */ + filter( + predicate?: StringIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.filter + */ + filter( + predicate: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + filter( + predicate: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + filter(predicate: W): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.filter + */ + filter( + predicate: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + filter( + predicate: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + filter(predicate: W): LoDashExplicitArrayWrapper; + } + + //_.find + interface LoDashStatic { + /** + * Iterates over elements of collection, returning the first element predicate returns truthy for. + * The predicate is bound to thisArg and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @alias _.detect + * + * @param collection The collection to search. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the matched element, else undefined. + */ + find( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.find + */ + find( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): T; + + /** + * @see _.find + */ + find( + collection: List|Dictionary, + predicate?: string, + thisArg?: any + ): T; + + /** + * @see _.find + */ + find( + collection: List|Dictionary, + predicate?: TObject + ): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.find + */ + find( + predicate?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.find + */ + find( + predicate?: string, + thisArg?: any + ): T; + + /** + * @see _.find + */ + find( + predicate?: TObject + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.find + */ + find( + predicate?: ListIterator|DictionaryIterator, + thisArg?: any + ): TResult; + + /** + * @see _.find + */ + find( + predicate?: string, + thisArg?: any + ): TResult; + + /** + * @see _.find + */ + find( + predicate?: TObject + ): TResult; + } + + //_.findWhere + interface LoDashStatic { + /** + * @see _.find + **/ + findWhere( + collection: Array, + callback: ListIterator, + thisArg?: any): T; + + /** + * @see _.find + **/ + findWhere( + collection: List, + callback: ListIterator, + thisArg?: any): T; + + /** + * @see _.find + **/ + findWhere( + collection: Dictionary, + callback: DictionaryIterator, + thisArg?: any): T; + + /** + * @see _.find + * @param _.matches style callback + **/ + findWhere( + collection: Array, + whereValue: W): T; + + /** + * @see _.find + * @param _.matches style callback + **/ + findWhere( + collection: List, + whereValue: W): T; + + /** + * @see _.find + * @param _.matches style callback + **/ + findWhere( + collection: Dictionary, + whereValue: W): T; + + /** + * @see _.find + * @param _.property style callback + **/ + findWhere( + collection: Array, + pluckValue: string): T; + + /** + * @see _.find + * @param _.property style callback + **/ + findWhere( + collection: List, + pluckValue: string): T; + + /** + * @see _.find + * @param _.property style callback + **/ + findWhere( + collection: Dictionary, + pluckValue: string): T; + } + + //_.findLast + interface LoDashStatic { + /** + * This method is like _.find except that it iterates over elements of a collection from + * right to left. + * @param collection Searches for a value in this list. + * @param callback The function called per iteration. + * @param thisArg The this binding of callback. + * @return The found element, else undefined. + **/ + findLast( + collection: Array, + callback: ListIterator, + thisArg?: any): T; + + /** + * @see _.find + **/ + findLast( + collection: List, + callback: ListIterator, + thisArg?: any): T; + + /** + * @see _.find + **/ + findLast( + collection: Dictionary, + callback: DictionaryIterator, + thisArg?: any): T; + + /** + * @see _.find + * @param _.pluck style callback + **/ + findLast( + collection: Array, + whereValue: W): T; + + /** + * @see _.find + * @param _.pluck style callback + **/ + findLast( + collection: List, + whereValue: W): T; + + /** + * @see _.find + * @param _.pluck style callback + **/ + findLast( + collection: Dictionary, + whereValue: W): T; + + /** + * @see _.find + * @param _.where style callback + **/ + findLast( + collection: Array, + pluckValue: string): T; + + /** + * @see _.find + * @param _.where style callback + **/ + findLast( + collection: List, + pluckValue: string): T; + + /** + * @see _.find + * @param _.where style callback + **/ + findLast( + collection: Dictionary, + pluckValue: string): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.findLast + */ + findLast( + callback: ListIterator, + thisArg?: any): T; + /** + * @see _.findLast + * @param _.where style callback + */ + findLast( + whereValue: W): T; + + /** + * @see _.findLast + * @param _.where style callback + */ + findLast( + pluckValue: string): T; + } + + //_.forEach + interface LoDashStatic { + /** + * Iterates over elements of collection invoking iteratee for each element. The iteratee is bound to thisArg + * and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early by explicitly returning false. + * + * Note: As with other "Collections" methods, objects with a "length" property are iterated like arrays. To + * avoid this behavior _.forIn or _.forOwn may be used for object iteration. + * + * @alias _.each + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + */ + forEach( + collection: T[], + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.forEach + */ + forEach( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): List; + + /** + * @see _.forEach + */ + forEach( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forEach + */ + forEach( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + + /** + * @see _.forEach + */ + forEach( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.forEach + */ + forEach( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.forEach + */ + forEach( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forEach + */ + forEach( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.forEach + */ + forEach( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.forEach + */ + forEach( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forEach + */ + forEach( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper; + } + + //_.forEachRight + interface LoDashStatic { + /** + * This method is like _.forEach except that it iterates over elements of collection from right to left. + * + * @alias _.eachRight + * + * @param collection The collection to iterate over. + * @param iteratee The function called per iteration. + * @param thisArg The this binding of callback. + */ + forEachRight( + collection: T[], + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.forEachRight + */ + forEachRight( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): List; + + /** + * @see _.forEachRight + */ + forEachRight( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forEachRight + */ + forEachRight( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + + /** + * @see _.forEachRight + */ + forEachRight( + collection: T, + iteratee?: ObjectIterator, + thisArgs?: any + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.forEachRight + */ + forEachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.forEachRight + */ + forEachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forEachRight + */ + forEachRight( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.forEachRight + */ + forEachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.forEachRight + */ + forEachRight( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forEachRight + */ + forEachRight( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper; + } + + //_.groupBy + interface LoDashStatic { + /** + * Creates an object composed of keys generated from the results of running each element of collection through + * iteratee. The corresponding value of each key is an array of the elements responsible for generating the + * key. The iteratee is bound to thisArg and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the composed aggregate object. + */ + groupBy( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: List|Dictionary, + iteratee?: string, + thisArg?: TValue + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: List|Dictionary, + iteratee?: string, + thisArg?: any + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: List|Dictionary, + iteratee?: TWhere + ): Dictionary; + + /** + * @see _.groupBy + */ + groupBy( + collection: List|Dictionary, + iteratee?: Object + ): Dictionary; + } + + interface LoDashImplicitWrapper { + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: string, + thisArg?: TValue + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: TWhere + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: string, + thisArg?: TValue + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: TWhere + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: Object + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: string, + thisArg?: TValue + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: TWhere + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: string, + thisArg?: TValue + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: TWhere + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.groupBy + */ + groupBy( + iteratee?: Object + ): LoDashExplicitObjectWrapper>; + } + + //_.include + interface LoDashStatic { + /** + * @see _.includes + */ + include( + collection: List|Dictionary, + target: T, + fromIndex?: number + ): boolean; + + /** + * @see _.includes + */ + include( + collection: string, + target: string, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.includes + */ + include( + target: T, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.includes + */ + include( + target: TValue, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.includes + */ + include( + target: string, + fromIndex?: number + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.includes + */ + include( + target: T, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.includes + */ + include( + target: TValue, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.includes + */ + include( + target: string, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + //_.includes + interface LoDashStatic { + /** + * Checks if target is in collection using SameValueZero for equality comparisons. If fromIndex is negative, + * it’s used as the offset from the end of collection. + * + * @alias _.contains, _.include + * + * @param collection The collection to search. + * @param target The value to search for. + * @param fromIndex The index to search from. + * @return True if the target element is found, else false. + */ + includes( + collection: List|Dictionary, + target: T, + fromIndex?: number + ): boolean; + + /** + * @see _.includes + */ + includes( + collection: string, + target: string, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.includes + */ + includes( + target: T, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.includes + */ + includes( + target: TValue, + fromIndex?: number + ): boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.includes + */ + includes( + target: string, + fromIndex?: number + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.includes + */ + includes( + target: T, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.includes + */ + includes( + target: TValue, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.includes + */ + includes( + target: string, + fromIndex?: number + ): LoDashExplicitWrapper; + } + + //_.indexBy + interface LoDashStatic { + /** + * Creates an object composed of keys generated from the results of running each element of collection through + * iteratee. The corresponding value of each key is the last element responsible for generating the key. The + * iteratee function is bound to thisArg and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the composed aggregate object. + */ + indexBy( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.indexBy + */ + indexBy( + collection: NumericDictionary, + iteratee?: NumericDictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.indexBy + */ + indexBy( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.indexBy + */ + indexBy( + collection: List|NumericDictionary|Dictionary, + iteratee?: string, + thisArg?: any + ): Dictionary; + + /** + * @see _.indexBy + */ + indexBy( + collection: List|NumericDictionary|Dictionary, + iteratee?: W + ): Dictionary; + + /** + * @see _.indexBy + */ + indexBy( + collection: List|NumericDictionary|Dictionary, + iteratee?: Object + ): Dictionary; + } + + interface LoDashImplicitWrapper { + /** + * @see _.indexBy + */ + indexBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.indexBy + */ + indexBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: W + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.indexBy + */ + indexBy( + iteratee?: ListIterator|NumericDictionaryIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: W + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: Object + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.indexBy + */ + indexBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.indexBy + */ + indexBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: W + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.indexBy + */ + indexBy( + iteratee?: ListIterator|NumericDictionaryIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: W + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.indexBy + */ + indexBy( + iteratee?: Object + ): LoDashExplicitObjectWrapper>; + } + + //_.invoke + interface LoDashStatic { + /** + * Invokes the method named by methodName on each element in the collection returning + * an array of the results of each invoked method. Additional arguments will be provided + * to each invoked method. If methodName is a function it will be invoked for, and this + * bound to, each element in the collection. + * @param collection The collection to iterate over. + * @param methodName The name of the method to invoke. + * @param args Arguments to invoke the method with. + **/ + invoke( + collection: Array, + methodName: string, + ...args: any[]): any; + + /** + * @see _.invoke + **/ + invoke( + collection: List, + methodName: string, + ...args: any[]): any; + + /** + * @see _.invoke + **/ + invoke( + collection: Dictionary, + methodName: string, + ...args: any[]): any; + + /** + * @see _.invoke + **/ + invoke( + collection: Array, + method: Function, + ...args: any[]): any; + + /** + * @see _.invoke + **/ + invoke( + collection: List, + method: Function, + ...args: any[]): any; + + /** + * @see _.invoke + **/ + invoke( + collection: Dictionary, + method: Function, + ...args: any[]): any; + } + + //_.map + interface LoDashStatic { + /** + * Creates an array of values by running each element in collection through iteratee. The iteratee is bound to + * thisArg and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property value + * of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * Many lodash methods are guarded to work as iteratees for methods like _.every, _.filter, _.map, _.mapValues, + * _.reject, and _.some. + * + * The guarded methods are: + * ary, callback, chunk, clone, create, curry, curryRight, drop, dropRight, every, fill, flatten, invert, max, + * min, parseInt, slice, sortBy, take, takeRight, template, trim, trimLeft, trimRight, trunc, random, range, + * sample, some, sum, uniq, and words + * + * @alias _.collect + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the new mapped array. + */ + map( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): TResult[]; + + /** + * @see _.map + */ + map( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): TResult[]; + + /** + * @see _.map + */ + map( + collection: List|Dictionary, + iteratee?: string + ): TResult[]; + + /** + * @see _.map + */ + map( + collection: List|Dictionary, + iteratee?: TObject + ): boolean[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.map + */ + map( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: string + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: TObject + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.map + */ + map( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: string + ): LoDashImplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: TObject + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.map + */ + map( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: string + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: TObject + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.map + */ + map( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: string + ): LoDashExplicitArrayWrapper; + + /** + * @see _.map + */ + map( + iteratee?: TObject + ): LoDashExplicitArrayWrapper; + } + + //_.partition + interface LoDashStatic { + /** + * Creates an array of elements split into two groups, the first of which contains elements predicate returns truthy for, + * while the second of which contains elements predicate returns falsey for. + * The predicate is bound to thisArg and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for predicate the created _.property style callback + * returns the property value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback + * returns true for elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns + * true for elements that have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param callback The function called per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the array of grouped elements. + **/ + partition( + collection: List, + callback: ListIterator, + thisArg?: any): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: Dictionary, + callback: DictionaryIterator, + thisArg?: any): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: List, + whereValue: W): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: Dictionary, + whereValue: W): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: List, + path: string, + srcValue: any): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: Dictionary, + path: string, + srcValue: any): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: List, + pluckValue: string): T[][]; + + /** + * @see _.partition + **/ + partition( + collection: Dictionary, + pluckValue: string): T[][]; + } + + interface LoDashImplicitStringWrapper { + /** + * @see _.partition + */ + partition( + callback: ListIterator, + thisArg?: any): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.partition + */ + partition( + callback: ListIterator, + thisArg?: any): LoDashImplicitArrayWrapper; + /** + * @see _.partition + */ + partition( + whereValue: W): LoDashImplicitArrayWrapper; + /** + * @see _.partition + */ + partition( + path: string, + srcValue: any): LoDashImplicitArrayWrapper; + /** + * @see _.partition + */ + partition( + pluckValue: string): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.partition + */ + partition( + callback: ListIterator, + thisArg?: any): LoDashImplicitArrayWrapper; + + /** + * @see _.partition + */ + partition( + callback: DictionaryIterator, + thisArg?: any): LoDashImplicitArrayWrapper; + + /** + * @see _.partition + */ + partition( + whereValue: W): LoDashImplicitArrayWrapper; + + /** + * @see _.partition + */ + partition( + path: string, + srcValue: any): LoDashImplicitArrayWrapper; + + /** + * @see _.partition + */ + partition( + pluckValue: string): LoDashImplicitArrayWrapper; + } + + //_.pluck + interface LoDashStatic { + /** + * Gets the property value of path from all elements in collection. + * + * @param collection The collection to iterate over. + * @param path The path of the property to pluck. + * @return A new array of property values. + */ + pluck( + collection: List|Dictionary, + path: StringRepresentable|StringRepresentable[] + ): any[]; + + /** + * @see _.pluck + */ + pluck( + collection: List|Dictionary, + path: StringRepresentable|StringRepresentable[] + ): TResult[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.pluck + */ + pluck(path: StringRepresentable|StringRepresentable[]): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.pluck + */ + pluck(path: StringRepresentable|StringRepresentable[]): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.pluck + */ + pluck(path: StringRepresentable|StringRepresentable[]): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.pluck + */ + pluck(path: StringRepresentable|StringRepresentable[]): LoDashExplicitArrayWrapper; + } + + //_.reduce + interface LoDashStatic { + /** + * Reduces a collection to a value which is the accumulated result of running each + * element in the collection through the callback, where each successive callback execution + * consumes the return value of the previous execution. If accumulator is not provided the + * first element of the collection will be used as the initial accumulator value. The callback + * is bound to thisArg and invoked with four arguments; (accumulator, value, index|key, collection). + * @param collection The collection to iterate over. + * @param callback The function called per iteration. + * @param accumulator Initial value of the accumulator. + * @param thisArg The this binding of callback. + * @return Returns the accumulated value. + **/ + reduce( + collection: Array, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + collection: List, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + collection: Dictionary, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + collection: Array, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + collection: List, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + collection: Dictionary, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + collection: Array, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + collection: List, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + collection: Dictionary, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + collection: Array, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + collection: List, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + collection: Dictionary, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + collection: Array, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + collection: List, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + collection: Dictionary, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + collection: Array, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + collection: List, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + collection: Dictionary, + callback: MemoIterator, + thisArg?: any): TResult; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.reduce + **/ + reduce( + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + callback: MemoIterator, + thisArg?: any): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.reduce + **/ + reduce( + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + reduce( + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + inject( + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduce + **/ + foldl( + callback: MemoIterator, + thisArg?: any): TResult; + } + + //_.reduceRight + interface LoDashStatic { + /** + * This method is like _.reduce except that it iterates over elements of a collection from + * right to left. + * @param collection The collection to iterate over. + * @param callback The function called per iteration. + * @param accumulator Initial value of the accumulator. + * @param thisArg The this binding of callback. + * @return The accumulated value. + **/ + reduceRight( + collection: Array, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + reduceRight( + collection: List, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + reduceRight( + collection: Dictionary, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + reduceRight( + collection: Array, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + reduceRight( + collection: List, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + reduceRight( + collection: Dictionary, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + foldr( + collection: Array, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + foldr( + collection: List, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + foldr( + collection: Dictionary, + callback: MemoIterator, + accumulator: TResult, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + foldr( + collection: Array, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + foldr( + collection: List, + callback: MemoIterator, + thisArg?: any): TResult; + + /** + * @see _.reduceRight + **/ + foldr( + collection: Dictionary, + callback: MemoIterator, + thisArg?: any): TResult; + } + + //_.reject + interface LoDashStatic { + /** + * The opposite of _.filter; this method returns the elements of collection that predicate does not return + * truthy for. + * + * @param collection The collection to iterate over. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the new filtered array. + */ + reject( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.reject + */ + reject( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): T[]; + + /** + * @see _.reject + */ + reject( + collection: string, + predicate?: StringIterator, + thisArg?: any + ): string[]; + + /** + * @see _.reject + */ + reject( + collection: List|Dictionary, + predicate: string, + thisArg?: any + ): T[]; + + /** + * @see _.reject + */ + reject( + collection: List|Dictionary, + predicate: W + ): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.reject + */ + reject( + predicate?: StringIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.reject + */ + reject( + predicate: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.reject + */ + reject( + predicate: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.reject + */ + reject(predicate: W): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.reject + */ + reject( + predicate: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.reject + */ + reject( + predicate: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.reject + */ + reject(predicate: W): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.reject + */ + reject( + predicate?: StringIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.reject + */ + reject( + predicate: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.reject + */ + reject( + predicate: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.reject + */ + reject(predicate: W): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.reject + */ + reject( + predicate: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.reject + */ + reject( + predicate: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.reject + */ + reject(predicate: W): LoDashExplicitArrayWrapper; + } + + //_.select + interface LoDashStatic { + /** + * @see _.filter + */ + select( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.filter + */ + select( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): T[]; + + /** + * @see _.filter + */ + select( + collection: string, + predicate?: StringIterator, + thisArg?: any + ): string[]; + + /** + * @see _.filter + */ + select( + collection: List|Dictionary, + predicate: string, + thisArg?: any + ): T[]; + + /** + * @see _.filter + */ + select( + collection: List|Dictionary, + predicate: W + ): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.filter + */ + select( + predicate?: StringIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.filter + */ + select( + predicate: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + select( + predicate: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + select(predicate: W): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.filter + */ + select( + predicate: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + select( + predicate: string, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.filter + */ + select(predicate: W): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.filter + */ + select( + predicate?: StringIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.filter + */ + select( + predicate: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + select( + predicate: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + select(predicate: W): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.filter + */ + select( + predicate: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + select( + predicate: string, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.filter + */ + select(predicate: W): LoDashExplicitArrayWrapper; + } + + //_.sample + interface LoDashStatic { + /** + * Gets a random element or n random elements from a collection. + * + * @param collection The collection to sample. + * @return Returns the random sample(s) of collection. + */ + sample( + collection: List|Dictionary|NumericDictionary, + n: number + ): T[]; + + /** + * @see _.sample + */ + sample( + collection: O, + n: number + ): T[]; + + /** + * @see _.sample + */ + sample( + collection: Object, + n: number + ): T[]; + + /** + * @see _.sample + */ + sample( + collection: List|Dictionary|NumericDictionary + ): T; + + /** + * @see _.sample + */ + sample( + collection: O + ): T; + + /** + * @see _.sample + */ + sample( + collection: Object + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.sample + */ + sample( + n: number + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sample + */ + sample(): string; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sample + */ + sample( + n: number + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sample + */ + sample(): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sample + */ + sample( + n: number + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sample + */ + sample(): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.sample + */ + sample( + n: number + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sample + */ + sample(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sample + */ + sample( + n: number + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sample + */ + sample(): TWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sample + */ + sample( + n: number + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sample + */ + sample(): TWrapper; + } + + //_.shuffle + interface LoDashStatic { + /** + * Creates an array of shuffled values, using a version of the Fisher-Yates shuffle. + * + * @param collection The collection to shuffle. + * @return Returns the new shuffled array. + */ + shuffle(collection: List|Dictionary): T[]; + + /** + * @see _.shuffle + */ + shuffle(collection: string): string[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.shuffle + */ + shuffle(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.shuffle + */ + shuffle(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.shuffle + */ + shuffle(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.shuffle + */ + shuffle(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.shuffle + */ + shuffle(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.shuffle + */ + shuffle(): LoDashExplicitArrayWrapper; + } + + //_.size + interface LoDashStatic { + /** + * Gets the size of collection by returning its length for array-like values or the number of own enumerable + * properties for objects. + * + * @param collection The collection to inspect. + * @return Returns the size of collection. + */ + size(collection: List|Dictionary): number; + + /** + * @see _.size + */ + size(collection: string): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.size + */ + size(): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.size + */ + size(): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.size + */ + size(): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.size + */ + size(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.size + */ + size(): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.size + */ + size(): LoDashExplicitWrapper; + } + + //_.some + interface LoDashStatic { + /** + * Checks if predicate returns truthy for any element of collection. The function returns as soon as it finds + * a passing value and does not iterate over the entire collection. The predicate is bound to thisArg and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @alias _.any + * + * @param collection The collection to iterate over. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns true if any element passes the predicate check, else false. + */ + some( + collection: List, + predicate?: ListIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + collection: Dictionary, + predicate?: DictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + collection: NumericDictionary, + predicate?: NumericDictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + collection: Object, + predicate?: ObjectIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + collection: List|Dictionary|NumericDictionary, + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + collection: Object, + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + collection: List|Dictionary|NumericDictionary, + predicate?: TObject + ): boolean; + + /** + * @see _.some + */ + some( + collection: List|Dictionary|NumericDictionary, + predicate?: Object + ): boolean; + + /** + * @see _.some + */ + some( + collection: Object, + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.some + */ + some( + predicate?: ListIterator|NumericDictionaryIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + predicate?: TObject + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.some + */ + some( + predicate?: ListIterator|DictionaryIterator|NumericDictionaryIterator|ObjectIterator, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + predicate?: string, + thisArg?: any + ): boolean; + + /** + * @see _.some + */ + some( + predicate?: TObject + ): boolean; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.some + */ + some( + predicate?: ListIterator|NumericDictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + some( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + some( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.some + */ + some( + predicate?: ListIterator|DictionaryIterator|NumericDictionaryIterator|ObjectIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + some( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.some + */ + some( + predicate?: TObject + ): LoDashExplicitWrapper; + } + + //_.sortBy + interface LoDashStatic { + /** + * Creates an array of elements, sorted in ascending order by the results of running each element in a + * collection through iteratee. This method performs a stable sort, that is, it preserves the original sort + * order of equal elements. The iteratee is bound to thisArg and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property + * valueof the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the new sorted array. + */ + sortBy( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): T[]; + + /** + * @see _.sortBy + */ + sortBy( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): T[]; + + /** + * @see _.sortBy + */ + sortBy( + collection: List|Dictionary, + iteratee: string + ): T[]; + + /** + * @see _.sortBy + */ + sortBy( + collection: List|Dictionary, + whereValue: W + ): T[]; + + /** + * @see _.sortBy + */ + sortBy( + collection: List|Dictionary + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sortBy + */ + sortBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(iteratee: string): LoDashImplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(whereValue: W): LoDashImplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sortBy + */ + sortBy( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(iteratee: string): LoDashImplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(whereValue: W): LoDashImplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sortBy + */ + sortBy( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(iteratee: string): LoDashExplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(whereValue: W): LoDashExplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sortBy + */ + sortBy( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(iteratee: string): LoDashExplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(whereValue: W): LoDashExplicitArrayWrapper; + + /** + * @see _.sortBy + */ + sortBy(): LoDashExplicitArrayWrapper; + } + + //_.sortByAll + interface LoDashStatic { + /** + * This method is like "_.sortBy" except that it can sort by multiple iteratees or + * property names. + * + * If a property name is provided for an iteratee the created "_.property" style callback + * returns the property value of the given element. + * + * If a value is also provided for thisArg the created "_.matchesProperty" style callback + * returns true for elements that have a matching property value, else false. + * + * If an object is provided for an iteratee the created "_.matches" style callback returns + * true for elements that have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param callback The function called per iteration. + * @param thisArg The this binding of callback. + * @return A new array of sorted elements. + **/ + sortByAll( + collection: Array, + iteratees: (ListIterator|string|Object)[]): T[]; + + /** + * @see _.sortByAll + **/ + sortByAll( + collection: List, + iteratees: (ListIterator|string|Object)[]): T[]; + + /** + * @see _.sortByAll + **/ + sortByAll( + collection: Array, + ...iteratees: (ListIterator|string|Object)[]): T[]; + + /** + * @see _.sortByAll + **/ + sortByAll( + collection: List, + ...iteratees: (ListIterator|string|Object)[]): T[]; + + /** + * Sorts by all the given arguments, using either ListIterator, pluckValue, or whereValue foramts + * @param args The rules by which to sort + */ + sortByAll( + collection: (Array|List), + ...args: (ListIterator|Object|string)[] + ): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * Sorts by all the given arguments, using either ListIterator, pluckValue, or whereValue foramts + * @param args The rules by which to sort + */ + sortByAll(...args: (ListIterator|Object|string)[]): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByAll + **/ + sortByAll( + iteratees: (ListIterator|string|Object)[]): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByAll + **/ + sortByAll( + ...iteratees: (ListIterator|string|Object)[]): LoDashImplicitArrayWrapper; + } + + //_.sortByOrder + interface LoDashStatic { + /** + * This method is like _.sortByAll except that it allows specifying the sort orders of the iteratees to sort + * by. If orders is unspecified, all values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created _.property style callback returns the property + * value of the given element. + * + * If an object is provided for an iteratee the created _.matches style callback returns true for elements + * that have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratees The iteratees to sort by. + * @param orders The sort orders of iteratees. + * @return Returns the new sorted array. + */ + sortByOrder( + collection: List, + iteratees: ListIterator|string|W|(ListIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): T[]; + + /** + * @see _.sortByOrder + */ + sortByOrder( + collection: List, + iteratees: ListIterator|string|Object|(ListIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): T[]; + + /** + * @see _.sortByOrder + */ + sortByOrder( + collection: NumericDictionary, + iteratees: NumericDictionaryIterator|string|W|(NumericDictionaryIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): T[]; + + /** + * @see _.sortByOrder + */ + sortByOrder( + collection: NumericDictionary, + iteratees: NumericDictionaryIterator|string|Object|(NumericDictionaryIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): T[]; + + /** + * @see _.sortByOrder + */ + sortByOrder( + collection: Dictionary, + iteratees: DictionaryIterator|string|W|(DictionaryIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): T[]; + + /** + * @see _.sortByOrder + */ + sortByOrder( + collection: Dictionary, + iteratees: DictionaryIterator|string|Object|(DictionaryIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): T[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|(ListIterator|string)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|W|(ListIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|W|(ListIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|Object|(ListIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: NumericDictionaryIterator|string|W|(NumericDictionaryIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: NumericDictionaryIterator|string|Object|(NumericDictionaryIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: DictionaryIterator|string|W|(DictionaryIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: DictionaryIterator|string|Object|(DictionaryIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|(ListIterator|string)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|W|(ListIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|W|(ListIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: ListIterator|string|Object|(ListIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: NumericDictionaryIterator|string|W|(NumericDictionaryIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: NumericDictionaryIterator|string|Object|(NumericDictionaryIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: DictionaryIterator|string|W|(DictionaryIterator|string|W)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + + /** + * @see _.sortByOrder + */ + sortByOrder( + iteratees: DictionaryIterator|string|Object|(DictionaryIterator|string|Object)[], + orders?: boolean|string|(boolean|string)[] + ): LoDashExplicitArrayWrapper; + } + + //_.where + interface LoDashStatic { + /** + * Performs a deep comparison of each element in a collection to the given properties + * object, returning an array of all elements that have equivalent property values. + * @param collection The collection to iterate over. + * @param properties The object of property values to filter by. + * @return A new array of elements that have the given properties. + **/ + where( + list: Array, + properties: U): T[]; + + /** + * @see _.where + **/ + where( + list: List, + properties: U): T[]; + + /** + * @see _.where + **/ + where( + list: Dictionary, + properties: U): T[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.where + **/ + where(properties: U): LoDashImplicitArrayWrapper; + } + + /******** + * Date * + ********/ + + //_.now + interface LoDashStatic { + /** + * Gets the number of milliseconds that have elapsed since the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @return The number of milliseconds. + */ + now(): number; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.now + */ + now(): number; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.now + */ + now(): LoDashExplicitWrapper; + } + + /************* + * Functions * + *************/ + + //_.after + interface LoDashStatic { + /** + * The opposite of _.before; this method creates a function that invokes func once it’s called n or more times. + * + * @param n The number of calls before func is invoked. + * @param func The function to restrict. + * @return Returns the new restricted function. + */ + after( + n: number, + func: TFunc + ): TFunc; + } + + interface LoDashImplicitWrapper { + /** + * @see _.after + **/ + after(func: TFunc): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.after + **/ + after(func: TFunc): LoDashExplicitObjectWrapper; + } + + //_.ary + interface LoDashStatic { + /** + * Creates a function that accepts up to n arguments ignoring any additional arguments. + * + * @param func The function to cap arguments for. + * @param n The arity cap. + * @returns Returns the new function. + */ + ary( + func: Function, + n?: number + ): TResult; + + ary( + func: T, + n?: number + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.ary + */ + ary(n?: number): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.ary + */ + ary(n?: number): LoDashExplicitObjectWrapper; + } + + //_.backflow + interface LoDashStatic { + /** + * @see _.flowRight + */ + backflow(...funcs: Function[]): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.flowRight + */ + backflow(...funcs: Function[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flowRight + */ + backflow(...funcs: Function[]): LoDashExplicitObjectWrapper; + } + + //_.before + interface LoDashStatic { + /** + * Creates a function that invokes func, with the this binding and arguments of the created function, while + * it’s called less than n times. Subsequent calls to the created function return the result of the last func + * invocation. + * + * @param n The number of calls at which func is no longer invoked. + * @param func The function to restrict. + * @return Returns the new restricted function. + */ + before( + n: number, + func: TFunc + ): TFunc; + } + + interface LoDashImplicitWrapper { + /** + * @see _.before + **/ + before(func: TFunc): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.before + **/ + before(func: TFunc): LoDashExplicitObjectWrapper; + } + + //_.bind + interface FunctionBind { + placeholder: any; + + ( + func: T, + thisArg: any, + ...partials: any[] + ): TResult; + + ( + func: Function, + thisArg: any, + ...partials: any[] + ): TResult; + } + + interface LoDashStatic { + /** + * Creates a function that invokes func with the this binding of thisArg and prepends any additional _.bind + * arguments to those provided to the bound function. + * + * The _.bind.placeholder value, which defaults to _ in monolithic builds, may be used as a placeholder for + * partially applied arguments. + * + * Note: Unlike native Function#bind this method does not set the "length" property of bound functions. + * + * @param func The function to bind. + * @param thisArg The this binding of func. + * @param partials The arguments to be partially applied. + * @return Returns the new bound function. + */ + bind: FunctionBind; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.bind + */ + bind( + thisArg: any, + ...partials: any[] + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.bind + */ + bind( + thisArg: any, + ...partials: any[] + ): LoDashExplicitObjectWrapper; + } + + //_.bindAll + interface LoDashStatic { + /** + * Binds methods of an object to the object itself, overwriting the existing method. Method names may be + * specified as individual arguments or as arrays of method names. If no method names are provided all + * enumerable function properties, own and inherited, of object are bound. + * + * Note: This method does not set the "length" property of bound functions. + * + * @param object The object to bind and assign the bound methods to. + * @param methodNames The object method names to bind, specified as individual method names or arrays of + * method names. + * @return Returns object. + */ + bindAll( + object: T, + ...methodNames: (string|string[])[] + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.bindAll + */ + bindAll(...methodNames: (string|string[])[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.bindAll + */ + bindAll(...methodNames: (string|string[])[]): LoDashExplicitObjectWrapper; + } + + //_.bindKey + interface FunctionBindKey { + placeholder: any; + + ( + object: T, + key: any, + ...partials: any[] + ): TResult; + + ( + object: Object, + key: any, + ...partials: any[] + ): TResult; + } + + interface LoDashStatic { + /** + * Creates a function that invokes the method at object[key] and prepends any additional _.bindKey arguments + * to those provided to the bound function. + * + * This method differs from _.bind by allowing bound functions to reference methods that may be redefined + * or don’t yet exist. See Peter Michaux’s article for more details. + * + * The _.bindKey.placeholder value, which defaults to _ in monolithic builds, may be used as a placeholder + * for partially applied arguments. + * + * @param object The object the method belongs to. + * @param key The key of the method. + * @param partials The arguments to be partially applied. + * @return Returns the new bound function. + */ + bindKey: FunctionBindKey; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.bindKey + */ + bindKey( + key: any, + ...partials: any[] + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.bindKey + */ + bindKey( + key: any, + ...partials: any[] + ): LoDashExplicitObjectWrapper; + } + + //_.compose + interface LoDashStatic { + /** + * @see _.flowRight + */ + compose(...funcs: Function[]): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.flowRight + */ + compose(...funcs: Function[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flowRight + */ + compose(...funcs: Function[]): LoDashExplicitObjectWrapper; + } + + //_.createCallback + interface LoDashStatic { + /** + * Produces a callback bound to an optional thisArg. If func is a property name the created + * callback will return the property value for a given element. If func is an object the created + * callback will return true for elements that contain the equivalent object properties, + * otherwise it will return false. + * @param func The value to convert to a callback. + * @param thisArg The this binding of the created callback. + * @param argCount The number of arguments the callback accepts. + * @return A callback function. + **/ + createCallback( + func: string, + thisArg?: any, + argCount?: number): () => any; + + /** + * @see _.createCallback + **/ + createCallback( + func: Dictionary, + thisArg?: any, + argCount?: number): () => boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.createCallback + **/ + createCallback( + thisArg?: any, + argCount?: number): LoDashImplicitObjectWrapper<() => any>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.createCallback + **/ + createCallback( + thisArg?: any, + argCount?: number): LoDashImplicitObjectWrapper<() => any>; + } + + //_.curry + interface LoDashStatic { + /** + * Creates a function that accepts one or more arguments of func that when called either invokes func returning + * its result, if all func arguments have been provided, or returns a function that accepts one or more of the + * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curry(func: (t1: T1) => R): + CurriedFunction1; + /** + * Creates a function that accepts one or more arguments of func that when called either invokes func returning + * its result, if all func arguments have been provided, or returns a function that accepts one or more of the + * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curry(func: (t1: T1, t2: T2) => R): + CurriedFunction2; + /** + * Creates a function that accepts one or more arguments of func that when called either invokes func returning + * its result, if all func arguments have been provided, or returns a function that accepts one or more of the + * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curry(func: (t1: T1, t2: T2, t3: T3) => R): + CurriedFunction3; + /** + * Creates a function that accepts one or more arguments of func that when called either invokes func returning + * its result, if all func arguments have been provided, or returns a function that accepts one or more of the + * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curry(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): + CurriedFunction4; + /** + * Creates a function that accepts one or more arguments of func that when called either invokes func returning + * its result, if all func arguments have been provided, or returns a function that accepts one or more of the + * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curry(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): + CurriedFunction5; + /** + * Creates a function that accepts one or more arguments of func that when called either invokes func returning + * its result, if all func arguments have been provided, or returns a function that accepts one or more of the + * remaining func arguments, and so on. The arity of func may be specified if func.length is not sufficient. + * @param func The function to curry. + * @param arity The arity of func. + * @return Returns the new curried function. + */ + curry( + func: Function, + arity?: number): TResult; + } + + interface CurriedFunction1 { + (): CurriedFunction1; + (t1: T1): R; + } + + interface CurriedFunction2 { + (): CurriedFunction2; + (t1: T1): CurriedFunction1; + (t1: T1, t2: T2): R; + } + + interface CurriedFunction3 { + (): CurriedFunction3; + (t1: T1): CurriedFunction2; + (t1: T1, t2: T2): CurriedFunction1; + (t1: T1, t2: T2, t3: T3): R; + } + + interface CurriedFunction4 { + (): CurriedFunction4; + (t1: T1): CurriedFunction3; + (t1: T1, t2: T2): CurriedFunction2; + (t1: T1, t2: T2, t3: T3): CurriedFunction1; + (t1: T1, t2: T2, t3: T3, t4: T4): R; + } + + interface CurriedFunction5 { + (): CurriedFunction5; + (t1: T1): CurriedFunction4; + (t1: T1, t2: T2): CurriedFunction3; + (t1: T1, t2: T2, t3: T3): CurriedFunction2; + (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1; + (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.curry + **/ + curry(arity?: number): LoDashImplicitObjectWrapper; + } + + //_.curryRight + interface LoDashStatic { + /** + * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight + * instead of _.partial. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curryRight(func: (t1: T1) => R): + CurriedFunction1; + /** + * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight + * instead of _.partial. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curryRight(func: (t1: T1, t2: T2) => R): + CurriedFunction2; + /** + * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight + * instead of _.partial. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curryRight(func: (t1: T1, t2: T2, t3: T3) => R): + CurriedFunction3; + /** + * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight + * instead of _.partial. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curryRight(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): + CurriedFunction4; + /** + * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight + * instead of _.partial. + * @param func The function to curry. + * @return Returns the new curried function. + */ + curryRight(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): + CurriedFunction5; + /** + * This method is like _.curry except that arguments are applied to func in the manner of _.partialRight + * instead of _.partial. + * @param func The function to curry. + * @param arity The arity of func. + * @return Returns the new curried function. + */ + curryRight( + func: Function, + arity?: number): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.curryRight + **/ + curryRight(arity?: number): LoDashImplicitObjectWrapper; + } + + //_.debounce + interface DebounceSettings { + /** + * Specify invoking on the leading edge of the timeout. + */ + leading?: boolean; + + /** + * The maximum time func is allowed to be delayed before it’s invoked. + */ + maxWait?: number; + + /** + * Specify invoking on the trailing edge of the timeout. + */ + trailing?: boolean; + } + + interface LoDashStatic { + /** + * Creates a debounced function that delays invoking func until after wait milliseconds have elapsed since + * the last time the debounced function was invoked. The debounced function comes with a cancel method to + * cancel delayed invocations. Provide an options object to indicate that func should be invoked on the + * leading and/or trailing edge of the wait timeout. Subsequent calls to the debounced function return the + * result of the last func invocation. + * + * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only + * if the the debounced function is invoked more than once during the wait timeout. + * + * See David Corbacho’s article for details over the differences between _.debounce and _.throttle. + * + * @param func The function to debounce. + * @param wait The number of milliseconds to delay. + * @param options The options object. + * @param options.leading Specify invoking on the leading edge of the timeout. + * @param options.maxWait The maximum time func is allowed to be delayed before it’s invoked. + * @param options.trailing Specify invoking on the trailing edge of the timeout. + * @return Returns the new debounced function. + */ + debounce( + func: T, + wait?: number, + options?: DebounceSettings + ): T & Cancelable; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.debounce + */ + debounce( + wait?: number, + options?: DebounceSettings + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.debounce + */ + debounce( + wait?: number, + options?: DebounceSettings + ): LoDashExplicitObjectWrapper; + } + + //_.defer + interface LoDashStatic { + /** + * Defers invoking the func until the current call stack has cleared. Any additional arguments are provided to + * func when it’s invoked. + * + * @param func The function to defer. + * @param args The arguments to invoke the function with. + * @return Returns the timer id. + */ + defer( + func: T, + ...args: any[] + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.defer + */ + defer(...args: any[]): LoDashImplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.defer + */ + defer(...args: any[]): LoDashExplicitWrapper; + } + + //_.delay + interface LoDashStatic { + /** + * Invokes func after wait milliseconds. Any additional arguments are provided to func when it’s invoked. + * + * @param func The function to delay. + * @param wait The number of milliseconds to delay invocation. + * @param args The arguments to invoke the function with. + * @return Returns the timer id. + */ + delay( + func: T, + wait: number, + ...args: any[] + ): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.delay + */ + delay( + wait: number, + ...args: any[] + ): LoDashImplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.delay + */ + delay( + wait: number, + ...args: any[] + ): LoDashExplicitWrapper; + } + + //_.flow + interface LoDashStatic { + /** + * Creates a function that returns the result of invoking the provided functions with the this binding of the + * created function, where each successive invocation is supplied the return value of the previous. + * + * @param funcs Functions to invoke. + * @return Returns the new function. + */ + flow(...funcs: Function[]): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.flow + */ + flow(...funcs: Function[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flow + */ + flow(...funcs: Function[]): LoDashExplicitObjectWrapper; + } + + //_.flowRight + interface LoDashStatic { + /** + * This method is like _.flow except that it creates a function that invokes the provided functions from right + * to left. + * + * @alias _.backflow, _.compose + * + * @param funcs Functions to invoke. + * @return Returns the new function. + */ + flowRight(...funcs: Function[]): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.flowRight + */ + flowRight(...funcs: Function[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.flowRight + */ + flowRight(...funcs: Function[]): LoDashExplicitObjectWrapper; + } + + + //_.memoize + interface MemoizedFunction extends Function { + cache: MapCache; + } + + interface LoDashStatic { + /** + * Creates a function that memoizes the result of func. If resolver is provided it determines the cache key for + * storing the result based on the arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the cache key. The func is invoked with + * the this binding of the memoized function. + * + * @param func The function to have its output memoized. + * @param resolver The function to resolve the cache key. + * @return Returns the new memoizing function. + */ + memoize: { + (func: T, resolver?: Function): T & MemoizedFunction; + Cache: MapCache; + } + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.memoize + */ + memoize(resolver?: Function): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.memoize + */ + memoize(resolver?: Function): LoDashExplicitObjectWrapper; + } + + //_.modArgs + interface LoDashStatic { + /** + * Creates a function that runs each argument through a corresponding transform function. + * + * @param func The function to wrap. + * @param transforms The functions to transform arguments, specified as individual functions or arrays + * of functions. + * @return Returns the new function. + */ + modArgs( + func: T, + ...transforms: Function[] + ): TResult; + + /** + * @see _.modArgs + */ + modArgs( + func: T, + transforms: Function[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.modArgs + */ + modArgs(...transforms: Function[]): LoDashImplicitObjectWrapper; + + /** + * @see _.modArgs + */ + modArgs(transforms: Function[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.modArgs + */ + modArgs(...transforms: Function[]): LoDashExplicitObjectWrapper; + + /** + * @see _.modArgs + */ + modArgs(transforms: Function[]): LoDashExplicitObjectWrapper; + } + + //_.negate + interface LoDashStatic { + /** + * Creates a function that negates the result of the predicate func. The func predicate is invoked with + * the this binding and arguments of the created function. + * + * @param predicate The predicate to negate. + * @return Returns the new function. + */ + negate(predicate: T): (...args: any[]) => boolean; + + /** + * @see _.negate + */ + negate(predicate: T): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.negate + */ + negate(): LoDashImplicitObjectWrapper<(...args: any[]) => boolean>; + + /** + * @see _.negate + */ + negate(): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.negate + */ + negate(): LoDashExplicitObjectWrapper<(...args: any[]) => boolean>; + + /** + * @see _.negate + */ + negate(): LoDashExplicitObjectWrapper; + } + + //_.once + interface LoDashStatic { + /** + * Creates a function that is restricted to invoking func once. Repeat calls to the function return the value + * of the first call. The func is invoked with the this binding and arguments of the created function. + * + * @param func The function to restrict. + * @return Returns the new restricted function. + */ + once(func: T): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.once + */ + once(): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.once + */ + once(): LoDashExplicitObjectWrapper; + } + + //_.partial + interface LoDashStatic { + /** + * Creates a function that, when called, invokes func with any additional partial arguments + * prepended to those provided to the new function. This method is similar to _.bind except + * it does not alter the this binding. + * @param func The function to partially apply arguments to. + * @param args Arguments to be partially applied. + * @return The new partially applied function. + **/ + partial: Partial; + } + + type PH = LoDashStatic; + + interface Function0 { + (): R; + } + interface Function1 { + (t1: T1): R; + } + interface Function2 { + (t1: T1, t2: T2): R; + } + interface Function3 { + (t1: T1, t2: T2, t3: T3): R; + } + interface Function4 { + (t1: T1, t2: T2, t3: T3, t4: T4): R; + } + + interface Partial { + // arity 0 + (func: Function0): Function0; + // arity 1 + (func: Function1): Function1; + (func: Function1, arg1: T1): Function0; + // arity 2 + (func: Function2): Function2; + (func: Function2, arg1: T1): Function1< T2, R>; + (func: Function2, plc1: PH, arg2: T2): Function1; + (func: Function2, arg1: T1, arg2: T2): Function0< R>; + // arity 3 + (func: Function3): Function3; + (func: Function3, arg1: T1): Function2< T2, T3, R>; + (func: Function3, plc1: PH, arg2: T2): Function2; + (func: Function3, arg1: T1, arg2: T2): Function1< T3, R>; + (func: Function3, plc1: PH, plc2: PH, arg3: T3): Function2; + (func: Function3, arg1: T1, plc2: PH, arg3: T3): Function1< T2, R>; + (func: Function3, plc1: PH, arg2: T2, arg3: T3): Function1; + (func: Function3, arg1: T1, arg2: T2, arg3: T3): Function0< R>; + // arity 4 + (func: Function4): Function4; + (func: Function4, arg1: T1): Function3< T2, T3, T4, R>; + (func: Function4, plc1: PH, arg2: T2): Function3; + (func: Function4, arg1: T1, arg2: T2): Function2< T3, T4, R>; + (func: Function4, plc1: PH, plc2: PH, arg3: T3): Function3; + (func: Function4, arg1: T1, plc2: PH, arg3: T3): Function2< T2, T4, R>; + (func: Function4, plc1: PH, arg2: T2, arg3: T3): Function2; + (func: Function4, arg1: T1, arg2: T2, arg3: T3): Function1< T4, R>; + (func: Function4, plc1: PH, plc2: PH, plc3: PH, arg4: T4): Function3; + (func: Function4, arg1: T1, plc2: PH, plc3: PH, arg4: T4): Function2< T2, T3, R>; + (func: Function4, plc1: PH, arg2: T2, plc3: PH, arg4: T4): Function2; + (func: Function4, arg1: T1, arg2: T2, plc3: PH, arg4: T4): Function1< T3, R>; + (func: Function4, plc1: PH, plc2: PH, arg3: T3, arg4: T4): Function2; + (func: Function4, arg1: T1, plc2: PH, arg3: T3, arg4: T4): Function1< T2, R>; + (func: Function4, plc1: PH, arg2: T2, arg3: T3, arg4: T4): Function1; + (func: Function4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function0< R>; + // catch-all + (func: Function, ...args: any[]): Function; + } + + //_.partialRight + interface LoDashStatic { + /** + * This method is like _.partial except that partial arguments are appended to those provided + * to the new function. + * @param func The function to partially apply arguments to. + * @param args Arguments to be partially applied. + * @return The new partially applied function. + **/ + partialRight: PartialRight + } + + interface PartialRight { + // arity 0 + (func: Function0): Function0; + // arity 1 + (func: Function1): Function1; + (func: Function1, arg1: T1): Function0; + // arity 2 + (func: Function2): Function2; + (func: Function2, arg1: T1, plc2: PH): Function1< T2, R>; + (func: Function2, arg2: T2): Function1; + (func: Function2, arg1: T1, arg2: T2): Function0< R>; + // arity 3 + (func: Function3): Function3; + (func: Function3, arg1: T1, plc2: PH, plc3: PH): Function2< T2, T3, R>; + (func: Function3, arg2: T2, plc3: PH): Function2; + (func: Function3, arg1: T1, arg2: T2, plc3: PH): Function1< T3, R>; + (func: Function3, arg3: T3): Function2; + (func: Function3, arg1: T1, plc2: PH, arg3: T3): Function1< T2, R>; + (func: Function3, arg2: T2, arg3: T3): Function1; + (func: Function3, arg1: T1, arg2: T2, arg3: T3): Function0< R>; + // arity 4 + (func: Function4): Function4; + (func: Function4, arg1: T1, plc2: PH, plc3: PH, plc4: PH): Function3< T2, T3, T4, R>; + (func: Function4, arg2: T2, plc3: PH, plc4: PH): Function3; + (func: Function4, arg1: T1, arg2: T2, plc3: PH, plc4: PH): Function2< T3, T4, R>; + (func: Function4, arg3: T3, plc4: PH): Function3; + (func: Function4, arg1: T1, plc2: PH, arg3: T3, plc4: PH): Function2< T2, T4, R>; + (func: Function4, arg2: T2, arg3: T3, plc4: PH): Function2; + (func: Function4, arg1: T1, arg2: T2, arg3: T3, plc4: PH): Function1< T4, R>; + (func: Function4, arg4: T4): Function3; + (func: Function4, arg1: T1, plc2: PH, plc3: PH, arg4: T4): Function2< T2, T3, R>; + (func: Function4, arg2: T2, plc3: PH, arg4: T4): Function2; + (func: Function4, arg1: T1, arg2: T2, plc3: PH, arg4: T4): Function1< T3, R>; + (func: Function4, arg3: T3, arg4: T4): Function2; + (func: Function4, arg1: T1, plc2: PH, arg3: T3, arg4: T4): Function1< T2, R>; + (func: Function4, arg2: T2, arg3: T3, arg4: T4): Function1; + (func: Function4, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function0< R>; + // catch-all + (func: Function, ...args: any[]): Function; + } + + //_.rearg + interface LoDashStatic { + /** + * Creates a function that invokes func with arguments arranged according to the specified indexes where the + * argument value at the first index is provided as the first argument, the argument value at the second index + * is provided as the second argument, and so on. + * @param func The function to rearrange arguments for. + * @param indexes The arranged argument indexes, specified as individual indexes or arrays of indexes. + * @return Returns the new function. + */ + rearg(func: Function, indexes: number[]): TResult; + + /** + * @see _.rearg + */ + rearg(func: Function, ...indexes: number[]): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.rearg + */ + rearg(indexes: number[]): LoDashImplicitObjectWrapper; + + /** + * @see _.rearg + */ + rearg(...indexes: number[]): LoDashImplicitObjectWrapper; + } + + //_.restParam + interface LoDashStatic { + /** + * Creates a function that invokes func with the this binding of the created function and arguments from start + * and beyond provided as an array. + * + * Note: This method is based on the rest parameter. + * + * @param func The function to apply a rest parameter to. + * @param start The start position of the rest parameter. + * @return Returns the new function. + */ + restParam( + func: Function, + start?: number + ): TResult; + + /** + * @see _.restParam + */ + restParam( + func: TFunc, + start?: number + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.restParam + */ + restParam(start?: number): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.restParam + */ + restParam(start?: number): LoDashExplicitObjectWrapper; + } + + //_.spread + interface LoDashStatic { + /** + * Creates a function that invokes func with the this binding of the created function and an array of arguments + * much like Function#apply. + * + * Note: This method is based on the spread operator. + * + * @param func The function to spread arguments over. + * @return Returns the new function. + */ + spread(func: F): T; + + /** + * @see _.spread + */ + spread(func: Function): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.spread + */ + spread(): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.spread + */ + spread(): LoDashExplicitObjectWrapper; + } + + //_.throttle + interface ThrottleSettings { + /** + * If you'd like to disable the leading-edge call, pass this as false. + */ + leading?: boolean; + + /** + * If you'd like to disable the execution on the trailing-edge, pass false. + */ + trailing?: boolean; + } + + interface LoDashStatic { + /** + * Creates a throttled function that only invokes func at most once per every wait milliseconds. The throttled + * function comes with a cancel method to cancel delayed invocations. Provide an options object to indicate + * that func should be invoked on the leading and/or trailing edge of the wait timeout. Subsequent calls to + * the throttled function return the result of the last func call. + * + * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only if + * the the throttled function is invoked more than once during the wait timeout. + * + * @param func The function to throttle. + * @param wait The number of milliseconds to throttle invocations to. + * @param options The options object. + * @param options.leading Specify invoking on the leading edge of the timeout. + * @param options.trailing Specify invoking on the trailing edge of the timeout. + * @return Returns the new throttled function. + */ + throttle( + func: T, + wait?: number, + options?: ThrottleSettings + ): T & Cancelable; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.throttle + */ + throttle( + wait?: number, + options?: ThrottleSettings + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.throttle + */ + throttle( + wait?: number, + options?: ThrottleSettings + ): LoDashExplicitObjectWrapper; + } + + //_.wrap + interface LoDashStatic { + /** + * Creates a function that provides value to the wrapper function as its first argument. Any additional + * arguments provided to the function are appended to those provided to the wrapper function. The wrapper is + * invoked with the this binding of the created function. + * + * @param value The value to wrap. + * @param wrapper The wrapper function. + * @return Returns the new function. + */ + wrap( + value: V, + wrapper: W + ): R; + + /** + * @see _.wrap + */ + wrap( + value: V, + wrapper: Function + ): R; + + /** + * @see _.wrap + */ + wrap( + value: any, + wrapper: Function + ): R; + } + + interface LoDashImplicitWrapper { + /** + * @see _.wrap + */ + wrap(wrapper: W): LoDashImplicitObjectWrapper; + + /** + * @see _.wrap + */ + wrap(wrapper: Function): LoDashImplicitObjectWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.wrap + */ + wrap(wrapper: W): LoDashImplicitObjectWrapper; + + /** + * @see _.wrap + */ + wrap(wrapper: Function): LoDashImplicitObjectWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.wrap + */ + wrap(wrapper: W): LoDashImplicitObjectWrapper; + + /** + * @see _.wrap + */ + wrap(wrapper: Function): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.wrap + */ + wrap(wrapper: W): LoDashExplicitObjectWrapper; + + /** + * @see _.wrap + */ + wrap(wrapper: Function): LoDashExplicitObjectWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.wrap + */ + wrap(wrapper: W): LoDashExplicitObjectWrapper; + + /** + * @see _.wrap + */ + wrap(wrapper: Function): LoDashExplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.wrap + */ + wrap(wrapper: W): LoDashExplicitObjectWrapper; + + /** + * @see _.wrap + */ + wrap(wrapper: Function): LoDashExplicitObjectWrapper; + } + + /******** + * Lang * + ********/ + + //_.clone + interface CloneCustomizer { + (value: TValue): TResult; + } + + interface LoDashStatic { + /** + * Creates a clone of value. If isDeep is true nested objects are cloned, otherwise they are assigned by + * reference. If customizer is provided it's invoked to produce the cloned values. If customizer returns + * undefined cloning is handled by the method instead. The customizer is bound to thisArg and invoked with + * up to three argument; (value [, index|key, object]). + * + * Note: This method is loosely based on the structured clone algorithm. The enumerable properties of + * arguments objects and objects created by constructors other than Object are cloned to plain Object + * objects. An empty object is returned for uncloneable values such as functions, DOM nodes, Maps, Sets, + * and WeakMaps. + * + * @param value The value to clone. + * @param isDeep Specify a deep clone. + * @param customizer The function to customize cloning values. + * @param thisArg The this binding of customizer. + * @return Returns the cloned value. + */ + clone( + value: any, + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + value: T, + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + + /** + * @see _.clone + */ + clone( + value: any, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + value: T, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + value: T, + isDeep?: boolean + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + isDeep?: boolean + ): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + isDeep?: boolean + ): T[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.clone + */ + clone( + isDeep?: boolean + ): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.clone + */ + clone( + isDeep?: boolean + ): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.clone + */ + clone( + isDeep?: boolean + ): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.clone + */ + clone( + isDeep: boolean, + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.clone + */ + clone( + customizer: CloneCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.clone + */ + clone( + isDeep?: boolean + ): LoDashExplicitObjectWrapper; + } + + //_.cloneDeep + interface CloneDeepCustomizer { + (value: TValue): TResult; + } + + interface LoDashStatic { + /** + * Creates a deep clone of value. If customizer is provided it's invoked to produce the cloned values. + * If customizer returns undefined cloning is handled by the method instead. The customizer is bound to + * thisArg and invoked with up to three argument; (value [, index|key, object]). + * + * Note: This method is loosely based on the structured clone algorithm. The enumerable properties of + * arguments objects and objects created by constructors other than Object are cloned to plain Object objects. + * An empty object is returned for uncloneable values such as functions, DOM nodes, Maps, Sets, and WeakMaps. + * + * @param value The value to deep clone. + * @param customizer The function to customize cloning values. + * @param thisArg The this binding of customizer. + * @return Returns the deep cloned value. + */ + cloneDeep( + value: any, + customizer: CloneDeepCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.cloneDeep + */ + cloneDeep( + value: T, + customizer: CloneDeepCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.cloneDeep + */ + cloneDeep( + value: T + ): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.cloneDeep + */ + cloneDeep(): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.cloneDeep + */ + cloneDeep(): T[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.cloneDeep + */ + cloneDeep(): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep( + customizer: CloneDeepCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.cloneDeep + */ + cloneDeep(): LoDashExplicitObjectWrapper; + } + + //_.eq + interface LoDashStatic { + /** + * @see _.isEqual + */ + eq( + value: any, + other: any, + customizer?: IsEqualCustomizer, + thisArg?: any + ): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isEqual + */ + eq( + other: any, + customizer?: IsEqualCustomizer, + thisArg?: any + ): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isEqual + */ + eq( + other: any, + customizer?: IsEqualCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + } + + //_.gt + interface LoDashStatic { + /** + * Checks if value is greater than other. + * + * @param value The value to compare. + * @param other The other value to compare. + * @return Returns true if value is greater than other, else false. + */ + gt( + value: any, + other: any + ): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.gt + */ + gt(other: any): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.gt + */ + gt(other: any): LoDashExplicitWrapper; + } + + //_.gte + interface LoDashStatic { + /** + * Checks if value is greater than or equal to other. + * + * @param value The value to compare. + * @param other The other value to compare. + * @return Returns true if value is greater than or equal to other, else false. + */ + gte( + value: any, + other: any + ): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.gte + */ + gte(other: any): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.gte + */ + gte(other: any): LoDashExplicitWrapper; + } + + //_.isArguments + interface LoDashStatic { + /** + * Checks if value is classified as an arguments object. + * + * @param value The value to check. + * @return Returns true if value is correctly classified, else false. + */ + isArguments(value?: any): value is IArguments; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isArguments + */ + isArguments(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isArguments + */ + isArguments(): LoDashExplicitWrapper; + } + + //_.isArray + interface LoDashStatic { + /** + * Checks if value is classified as an Array object. + * @param value The value to check. + * + * @return Returns true if value is correctly classified, else false. + */ + isArray(value?: any): value is T[]; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isArray + */ + isArray(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isArray + */ + isArray(): LoDashExplicitWrapper; + } + + //_.isBoolean + interface LoDashStatic { + /** + * Checks if value is classified as a boolean primitive or object. + * + * @param value The value to check. + * @return Returns true if value is correctly classified, else false. + */ + isBoolean(value?: any): value is boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isBoolean + */ + isBoolean(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isBoolean + */ + isBoolean(): LoDashExplicitWrapper; + } + + //_.isDate + interface LoDashStatic { + /** + * Checks if value is classified as a Date object. + * @param value The value to check. + * + * @return Returns true if value is correctly classified, else false. + */ + isDate(value?: any): value is Date; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isDate + */ + isDate(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isDate + */ + isDate(): LoDashExplicitWrapper; + } + + //_.isElement + interface LoDashStatic { + /** + * Checks if value is a DOM element. + * + * @param value The value to check. + * @return Returns true if value is a DOM element, else false. + */ + isElement(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isElement + */ + isElement(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isElement + */ + isElement(): LoDashExplicitWrapper; + } + + //_.isEmpty + interface LoDashStatic { + /** + * Checks if value is empty. A value is considered empty unless it’s an arguments object, array, string, or + * jQuery-like collection with a length greater than 0 or an object with own enumerable properties. + * + * @param value The value to inspect. + * @return Returns true if value is empty, else false. + */ + isEmpty(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isEmpty + */ + isEmpty(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isEmpty + */ + isEmpty(): LoDashExplicitWrapper; + } + + //_.isEqual + interface IsEqualCustomizer { + (value: any, other: any, indexOrKey?: number|string): boolean; + } + + interface LoDashStatic { + /** + * Performs a deep comparison between two values to determine if they are equivalent. If customizer is + * provided it’s invoked to compare values. If customizer returns undefined comparisons are handled by the + * method instead. The customizer is bound to thisArg and invoked with up to three arguments: (value, other + * [, index|key]). + * + * Note: This method supports comparing arrays, booleans, Date objects, numbers, Object objects, regexes, + * and strings. Objects are compared by their own, not inherited, enumerable properties. Functions and DOM + * nodes are not supported. Provide a customizer function to extend support for comparing other values. + * + * @alias _.eq + * + * @param value The value to compare. + * @param other The other value to compare. + * @param customizer The function to customize value comparisons. + * @param thisArg The this binding of customizer. + * @return Returns true if the values are equivalent, else false. + */ + isEqual( + value: any, + other: any, + customizer?: IsEqualCustomizer, + thisArg?: any + ): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isEqual + */ + isEqual( + other: any, + customizer?: IsEqualCustomizer, + thisArg?: any + ): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isEqual + */ + isEqual( + other: any, + customizer?: IsEqualCustomizer, + thisArg?: any + ): LoDashExplicitWrapper; + } + + //_.isError + interface LoDashStatic { + /** + * Checks if value is an Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, or URIError + * object. + * + * @param value The value to check. + * @return Returns true if value is an error object, else false. + */ + isError(value: any): value is Error; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isError + */ + isError(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isError + */ + isError(): LoDashExplicitWrapper; + } + + //_.isFinite + interface LoDashStatic { + /** + * Checks if value is a finite primitive number. + * + * Note: This method is based on Number.isFinite. + * + * @param value The value to check. + * @return Returns true if value is a finite number, else false. + */ + isFinite(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isFinite + */ + isFinite(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isFinite + */ + isFinite(): LoDashExplicitWrapper; + } + + //_.isFunction + interface LoDashStatic { + /** + * Checks if value is classified as a Function object. + * + * @param value The value to check. + * @return Returns true if value is correctly classified, else false. + */ + isFunction(value?: any): value is Function; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isFunction + */ + isFunction(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isFunction + */ + isFunction(): LoDashExplicitWrapper; + } + + //_.isMatch + interface isMatchCustomizer { + (value: any, other: any, indexOrKey?: number|string): boolean; + } + + interface LoDashStatic { + /** + * Performs a deep comparison between object and source to determine if object contains equivalent property + * values. If customizer is provided it’s invoked to compare values. If customizer returns undefined + * comparisons are handled by the method instead. The customizer is bound to thisArg and invoked with three + * arguments: (value, other, index|key). + * @param object The object to inspect. + * @param source The object of property values to match. + * @param customizer The function to customize value comparisons. + * @param thisArg The this binding of customizer. + * @return Returns true if object is a match, else false. + */ + isMatch(object: Object, source: Object, customizer?: isMatchCustomizer, thisArg?: any): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.isMatch + */ + isMatch(source: Object, customizer?: isMatchCustomizer, thisArg?: any): boolean; + } + + //_.isNaN + interface LoDashStatic { + /** + * Checks if value is NaN. + * + * Note: This method is not the same as isNaN which returns true for undefined and other non-numeric values. + * + * @param value The value to check. + * @return Returns true if value is NaN, else false. + */ + isNaN(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.isNaN + */ + isNaN(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.isNaN + */ + isNaN(): LoDashExplicitWrapper; + } + + //_.isNative + interface LoDashStatic { + /** + * Checks if value is a native function. + * @param value The value to check. + * + * @retrun Returns true if value is a native function, else false. + */ + isNative(value: any): value is Function; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isNative + */ + isNative(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isNative + */ + isNative(): LoDashExplicitWrapper; + } + + //_.isNull + interface LoDashStatic { + /** + * Checks if value is null. + * + * @param value The value to check. + * @return Returns true if value is null, else false. + */ + isNull(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isNull + */ + isNull(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isNull + */ + isNull(): LoDashExplicitWrapper; + } + + //_.isNumber + interface LoDashStatic { + /** + * Checks if value is classified as a Number primitive or object. + * + * Note: To exclude Infinity, -Infinity, and NaN, which are classified as numbers, use the _.isFinite method. + * + * @param value The value to check. + * @return Returns true if value is correctly classified, else false. + */ + isNumber(value?: any): value is number; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isNumber + */ + isNumber(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isNumber + */ + isNumber(): LoDashExplicitWrapper; + } + + //_.isObject + interface LoDashStatic { + /** + * Checks if value is the language type of Object. (e.g. arrays, functions, objects, regexes, new Number(0), + * and new String('')) + * + * @param value The value to check. + * @return Returns true if value is an object, else false. + */ + isObject(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isObject + */ + isObject(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isObject + */ + isObject(): LoDashExplicitWrapper; + } + + //_.isPlainObject + interface LoDashStatic { + /** + * Checks if value is a plain object, that is, an object created by the Object constructor or one with a + * [[Prototype]] of null. + * + * Note: This method assumes objects created by the Object constructor have no inherited enumerable properties. + * + * @param value The value to check. + * @return Returns true if value is a plain object, else false. + */ + isPlainObject(value?: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isPlainObject + */ + isPlainObject(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isPlainObject + */ + isPlainObject(): LoDashExplicitWrapper; + } + + //_.isRegExp + interface LoDashStatic { + /** + * Checks if value is classified as a RegExp object. + * @param value The value to check. + * + * @return Returns true if value is correctly classified, else false. + */ + isRegExp(value?: any): value is RegExp; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isRegExp + */ + isRegExp(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isRegExp + */ + isRegExp(): LoDashExplicitWrapper; + } + + //_.isString + interface LoDashStatic { + /** + * Checks if value is classified as a String primitive or object. + * + * @param value The value to check. + * @return Returns true if value is correctly classified, else false. + */ + isString(value?: any): value is string; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isString + */ + isString(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isString + */ + isString(): LoDashExplicitWrapper; + } + + //_.isTypedArray + interface LoDashStatic { + /** + * Checks if value is classified as a typed array. + * + * @param value The value to check. + * @return Returns true if value is correctly classified, else false. + */ + isTypedArray(value: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isTypedArray + */ + isTypedArray(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isTypedArray + */ + isTypedArray(): LoDashExplicitWrapper; + } + + //_.isUndefined + interface LoDashStatic { + /** + * Checks if value is undefined. + * + * @param value The value to check. + * @return Returns true if value is undefined, else false. + */ + isUndefined(value: any): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * see _.isUndefined + */ + isUndefined(): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * see _.isUndefined + */ + isUndefined(): LoDashExplicitWrapper; + } + + //_.lt + interface LoDashStatic { + /** + * Checks if value is less than other. + * + * @param value The value to compare. + * @param other The other value to compare. + * @return Returns true if value is less than other, else false. + */ + lt( + value: any, + other: any + ): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.lt + */ + lt(other: any): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.lt + */ + lt(other: any): LoDashExplicitWrapper; + } + + //_.lte + interface LoDashStatic { + /** + * Checks if value is less than or equal to other. + * + * @param value The value to compare. + * @param other The other value to compare. + * @return Returns true if value is less than or equal to other, else false. + */ + lte( + value: any, + other: any + ): boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.lte + */ + lte(other: any): boolean; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.lte + */ + lte(other: any): LoDashExplicitWrapper; + } + + //_.toArray + interface LoDashStatic { + /** + * Converts value to an array. + * + * @param value The value to convert. + * @return Returns the converted array. + */ + toArray(value: List|Dictionary|NumericDictionary): T[]; + + /** + * @see _.toArray + */ + toArray(value: TValue): TResult[]; + + /** + * @see _.toArray + */ + toArray(value?: any): TResult[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.toArray + */ + toArray(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.toArray + */ + toArray(): LoDashImplicitArrayWrapper; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.toArray + */ + toArray(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.toArray + */ + toArray(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.toArray + */ + toArray(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.toArray + */ + toArray(): LoDashExplicitArrayWrapper; + } + + //_.toPlainObject + interface LoDashStatic { + /** + * Converts value to a plain object flattening inherited enumerable properties of value to own properties + * of the plain object. + * + * @param value The value to convert. + * @return Returns the converted plain object. + */ + toPlainObject(value?: any): TResult; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.toPlainObject + */ + toPlainObject(): LoDashImplicitObjectWrapper; + } + + /******** + * Math * + ********/ + + //_.add + interface LoDashStatic { + /** + * Adds two numbers. + * + * @param augend The first number to add. + * @param addend The second number to add. + * @return Returns the sum. + */ + add( + augend: number, + addend: number + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.add + */ + add(addend: number): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.add + */ + add(addend: number): LoDashExplicitWrapper; + } + + //_.ceil + interface LoDashStatic { + /** + * Calculates n rounded up to precision. + * + * @param n The number to round up. + * @param precision The precision to round up to. + * @return Returns the rounded up number. + */ + ceil( + n: number, + precision?: number + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.ceil + */ + ceil(precision?: number): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.ceil + */ + ceil(precision?: number): LoDashExplicitWrapper; + } + + //_.floor + interface LoDashStatic { + /** + * Calculates n rounded down to precision. + * + * @param n The number to round down. + * @param precision The precision to round down to. + * @return Returns the rounded down number. + */ + floor( + n: number, + precision?: number + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.floor + */ + floor(precision?: number): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.floor + */ + floor(precision?: number): LoDashExplicitWrapper; + } + + //_.max + interface LoDashStatic { + /** + * Gets the maximum value of collection. If collection is empty or falsey -Infinity is returned. If an iteratee + * function is provided it’s invoked for each value in collection to generate the criterion by which the value + * is ranked. The iteratee is bound to thisArg and invoked with three arguments: (value, index, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property value + * of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the maximum value. + */ + max( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + collection: List|Dictionary, + iteratee?: string, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + collection: List|Dictionary, + whereValue?: TObject + ): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.max + */ + max( + iteratee?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + iteratee?: string, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + whereValue?: TObject + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.max + */ + max( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + iteratee?: string, + thisArg?: any + ): T; + + /** + * @see _.max + */ + max( + whereValue?: TObject + ): T; + } + + //_.min + interface LoDashStatic { + /** + * Gets the minimum value of collection. If collection is empty or falsey Infinity is returned. If an iteratee + * function is provided it’s invoked for each value in collection to generate the criterion by which the value + * is ranked. The iteratee is bound to thisArg and invoked with three arguments: (value, index, collection). + * + * If a property name is provided for iteratee the created _.property style callback returns the property value + * of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for iteratee the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the minimum value. + */ + min( + collection: List, + iteratee?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + collection: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + collection: List|Dictionary, + iteratee?: string, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + collection: List|Dictionary, + whereValue?: TObject + ): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.min + */ + min( + iteratee?: ListIterator, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + iteratee?: string, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + whereValue?: TObject + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.min + */ + min( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + iteratee?: string, + thisArg?: any + ): T; + + /** + * @see _.min + */ + min( + whereValue?: TObject + ): T; + } + + //_.round + interface LoDashStatic { + /** + * Calculates n rounded to precision. + * + * @param n The number to round. + * @param precision The precision to round to. + * @return Returns the rounded number. + */ + round( + n: number, + precision?: number + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.round + */ + round(precision?: number): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.round + */ + round(precision?: number): LoDashExplicitWrapper; + } + + //_.sum + interface LoDashStatic { + /** + * Gets the sum of the values in collection. + * + * @param collection The collection to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the sum. + */ + sum( + collection: List, + iteratee: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.sum + **/ + sum( + collection: Dictionary, + iteratee: DictionaryIterator, + thisArg?: any + ): number; + + /** + * @see _.sum + */ + sum( + collection: List|Dictionary, + iteratee: string + ): number; + + /** + * @see _.sum + */ + sum(collection: List|Dictionary): number; + + /** + * @see _.sum + */ + sum(collection: List|Dictionary): number; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.sum + */ + sum( + iteratee: ListIterator, + thisArg?: any + ): number; + + /** + * @see _.sum + */ + sum(iteratee: string): number; + + /** + * @see _.sum + */ + sum(): number; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.sum + **/ + sum( + iteratee: ListIterator|DictionaryIterator, + thisArg?: any + ): number; + + /** + * @see _.sum + */ + sum(iteratee: string): number; + + /** + * @see _.sum + */ + sum(): number; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.sum + */ + sum( + iteratee: ListIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sum + */ + sum(iteratee: string): LoDashExplicitWrapper; + + /** + * @see _.sum + */ + sum(): LoDashExplicitWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.sum + */ + sum( + iteratee: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.sum + */ + sum(iteratee: string): LoDashExplicitWrapper; + + /** + * @see _.sum + */ + sum(): LoDashExplicitWrapper; + } + + /********** + * Number * + **********/ + + //_.inRange + interface LoDashStatic { + /** + * Checks if n is between start and up to but not including, end. If end is not specified it’s set to start + * with start then set to 0. + * + * @param n The number to check. + * @param start The start of the range. + * @param end The end of the range. + * @return Returns true if n is in the range, else false. + */ + inRange( + n: number, + start: number, + end: number + ): boolean; + + + /** + * @see _.inRange + */ + inRange( + n: number, + end: number + ): boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.inRange + */ + inRange( + start: number, + end: number + ): boolean; + + /** + * @see _.inRange + */ + inRange(end: number): boolean; + } + + interface LoDashExplicitWrapper { + /** + * @see _.inRange + */ + inRange( + start: number, + end: number + ): LoDashExplicitWrapper; + + /** + * @see _.inRange + */ + inRange(end: number): LoDashExplicitWrapper; + } + + //_.random + interface LoDashStatic { + /** + * Produces a random number between min and max (inclusive). If only one argument is provided a number between + * 0 and the given number is returned. If floating is true, or either min or max are floats, a floating-point + * number is returned instead of an integer. + * + * @param min The minimum possible value. + * @param max The maximum possible value. + * @param floating Specify returning a floating-point number. + * @return Returns the random number. + */ + random( + min?: number, + max?: number, + floating?: boolean + ): number; + + /** + * @see _.random + */ + random( + min?: number, + floating?: boolean + ): number; + + /** + * @see _.random + */ + random(floating?: boolean): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.random + */ + random( + max?: number, + floating?: boolean + ): number; + + /** + * @see _.random + */ + random(floating?: boolean): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.random + */ + random( + max?: number, + floating?: boolean + ): LoDashExplicitWrapper; + + /** + * @see _.random + */ + random(floating?: boolean): LoDashExplicitWrapper; + } + + /********** + * Object * + **********/ + + //_.assign + interface AssignCustomizer { + (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}): any; + } + + interface LoDashStatic { + /** + * Assigns own enumerable properties of source object(s) to the destination object. Subsequent sources + * overwrite property assignments of previous sources. If customizer is provided it’s invoked to produce the + * assigned values. The customizer is bound to thisArg and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * Note: This method mutates object and is based on Object.assign. + * + * @alias _.extend + * + * @param object The destination object. + * @param source The source objects. + * @param customizer The function to customize assigned values. + * @param thisArg The this binding of callback. + * @return The destination object. + */ + assign( + object: TObject, + source: TSource, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see assign + */ + assign( + object: TObject, + source1: TSource1, + source2: TSource2, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see assign + */ + assign( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see assign + */ + assign + ( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.assign + */ + assign(object: TObject): TObject; + + /** + * @see _.assign + */ + assign( + object: TObject, ...otherArgs: any[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.assign + */ + assign( + source: TSource, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see assign + */ + assign( + source1: TSource1, + source2: TSource2, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see assign + */ + assign( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see assign + */ + assign( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.assign + */ + assign(): LoDashImplicitObjectWrapper; + + /** + * @see _.assign + */ + assign(...otherArgs: any[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.assign + */ + assign( + source: TSource, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see assign + */ + assign( + source1: TSource1, + source2: TSource2, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see assign + */ + assign( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see assign + */ + assign( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.assign + */ + assign(): LoDashExplicitObjectWrapper; + + /** + * @see _.assign + */ + assign(...otherArgs: any[]): LoDashExplicitObjectWrapper; + } + + //_.create + interface LoDashStatic { + /** + * Creates an object that inherits from the given prototype object. If a properties object is provided its own + * enumerable properties are assigned to the created object. + * + * @param prototype The object to inherit from. + * @param properties The properties to assign to the object. + * @return Returns the new object. + */ + create( + prototype: T, + properties?: U + ): T & U; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.create + */ + create(properties?: U): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.create + */ + create(properties?: U): LoDashExplicitObjectWrapper; + } + + //_.defaults + interface LoDashStatic { + /** + * Assigns own enumerable properties of source object(s) to the destination object for all destination + * properties that resolve to undefined. Once a property is set, additional values of the same property are + * ignored. + * + * Note: This method mutates object. + * + * @param object The destination object. + * @param sources The source objects. + * @return The destination object. + */ + defaults( + object: Obj, + ...sources: {}[] + ): TResult; + + /** + * @see _.defaults + */ + defaults( + object: Obj, + source1: S1, + ...sources: {}[] + ): TResult; + + /** + * @see _.defaults + */ + defaults( + object: Obj, + source1: S1, + source2: S2, + ...sources: {}[] + ): TResult; + + /** + * @see _.defaults + */ + defaults( + object: Obj, + source1: S1, + source2: S2, + source3: S3, + ...sources: {}[] + ): TResult; + + /** + * @see _.defaults + */ + defaults( + object: Obj, + source1: S1, + source2: S2, + source3: S3, + source4: S4, + ...sources: {}[] + ): TResult; + + /** + * @see _.defaults + */ + defaults( + object: {}, + ...sources: {}[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.defaults + */ + defaults( + source1: S1, + ...sources: {}[] + ): LoDashImplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults( + source1: S1, + source2: S2, + ...sources: {}[] + ): LoDashImplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults( + source1: S1, + source2: S2, + source3: S3, + ...sources: {}[] + ): LoDashImplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults( + source1: S1, + source2: S2, + source3: S3, + source4: S4, + ...sources: {}[] + ): LoDashImplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults(): LoDashImplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults(...sources: {}[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.defaults + */ + defaults( + source1: S1, + ...sources: {}[] + ): LoDashExplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults( + source1: S1, + source2: S2, + ...sources: {}[] + ): LoDashExplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults( + source1: S1, + source2: S2, + source3: S3, + ...sources: {}[] + ): LoDashExplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults( + source1: S1, + source2: S2, + source3: S3, + source4: S4, + ...sources: {}[] + ): LoDashExplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults(): LoDashExplicitObjectWrapper; + + /** + * @see _.defaults + */ + defaults(...sources: {}[]): LoDashExplicitObjectWrapper; + } + + //_.defaultsDeep + interface LoDashStatic { + /** + * This method is like _.defaults except that it recursively assigns default properties. + * @param object The destination object. + * @param sources The source objects. + * @return Returns object. + **/ + defaultsDeep( + object: T, + ...sources: any[]): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.defaultsDeep + **/ + defaultsDeep(...sources: any[]): LoDashImplicitObjectWrapper + } + + //_.extend + interface LoDashStatic { + /** + * @see assign + */ + extend( + object: TObject, + source: TSource, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see assign + */ + extend( + object: TObject, + source1: TSource1, + source2: TSource2, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see assign + */ + extend( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see assign + */ + extend + ( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: AssignCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.assign + */ + extend(object: TObject): TObject; + + /** + * @see _.assign + */ + extend( + object: TObject, ...otherArgs: any[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.assign + */ + extend( + source: TSource, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see assign + */ + extend( + source1: TSource1, + source2: TSource2, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see assign + */ + extend( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see assign + */ + extend( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.assign + */ + extend(): LoDashImplicitObjectWrapper; + + /** + * @see _.assign + */ + extend(...otherArgs: any[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.assign + */ + extend( + source: TSource, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see assign + */ + extend( + source1: TSource1, + source2: TSource2, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see assign + */ + extend( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see assign + */ + extend( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: AssignCustomizer, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.assign + */ + extend(): LoDashExplicitObjectWrapper; + + /** + * @see _.assign + */ + extend(...otherArgs: any[]): LoDashExplicitObjectWrapper; + } + + //_.findKey + interface LoDashStatic { + /** + * This method is like _.find except that it returns the key of the first element predicate returns truthy for + * instead of the element itself. + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param object The object to search. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the key of the matched element, else undefined. + */ + findKey( + object: TObject, + predicate?: DictionaryIterator, + thisArg?: any + ): string; + + /** + * @see _.findKey + */ + findKey( + object: TObject, + predicate?: ObjectIterator, + thisArg?: any + ): string; + + /** + * @see _.findKey + */ + findKey( + object: TObject, + predicate?: string, + thisArg?: any + ): string; + + /** + * @see _.findKey + */ + findKey, TObject>( + object: TObject, + predicate?: TWhere + ): string; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.findKey + */ + findKey( + predicate?: DictionaryIterator, + thisArg?: any + ): string; + + /** + * @see _.findKey + */ + findKey( + predicate?: ObjectIterator, + thisArg?: any + ): string; + + /** + * @see _.findKey + */ + findKey( + predicate?: string, + thisArg?: any + ): string; + + /** + * @see _.findKey + */ + findKey>( + predicate?: TWhere + ): string; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.findKey + */ + findKey( + predicate?: DictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findKey + */ + findKey( + predicate?: ObjectIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findKey + */ + findKey( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findKey + */ + findKey>( + predicate?: TWhere + ): LoDashExplicitWrapper; + } + + //_.findLastKey + interface LoDashStatic { + /** + * This method is like _.findKey except that it iterates over elements of a collection in the opposite order. + * + * If a property name is provided for predicate the created _.property style callback returns the property + * value of the given element. + * + * If a value is also provided for thisArg the created _.matchesProperty style callback returns true for + * elements that have a matching property value, else false. + * + * If an object is provided for predicate the created _.matches style callback returns true for elements that + * have the properties of the given object, else false. + * + * @param object The object to search. + * @param predicate The function invoked per iteration. + * @param thisArg The this binding of predicate. + * @return Returns the key of the matched element, else undefined. + */ + findLastKey( + object: TObject, + predicate?: DictionaryIterator, + thisArg?: any + ): string; + + /** + * @see _.findLastKey + */ + findLastKey( + object: TObject, + predicate?: ObjectIterator, + thisArg?: any + ): string; + + /** + * @see _.findLastKey + */ + findLastKey( + object: TObject, + predicate?: string, + thisArg?: any + ): string; + + /** + * @see _.findLastKey + */ + findLastKey, TObject>( + object: TObject, + predicate?: TWhere + ): string; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.findLastKey + */ + findLastKey( + predicate?: DictionaryIterator, + thisArg?: any + ): string; + + /** + * @see _.findLastKey + */ + findLastKey( + predicate?: ObjectIterator, + thisArg?: any + ): string; + + /** + * @see _.findLastKey + */ + findLastKey( + predicate?: string, + thisArg?: any + ): string; + + /** + * @see _.findLastKey + */ + findLastKey>( + predicate?: TWhere + ): string; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.findLastKey + */ + findLastKey( + predicate?: DictionaryIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastKey + */ + findLastKey( + predicate?: ObjectIterator, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastKey + */ + findLastKey( + predicate?: string, + thisArg?: any + ): LoDashExplicitWrapper; + + /** + * @see _.findLastKey + */ + findLastKey>( + predicate?: TWhere + ): LoDashExplicitWrapper; + } + + //_.forIn + interface LoDashStatic { + /** + * Iterates over own and inherited enumerable properties of an object invoking iteratee for each property. The + * iteratee is bound to thisArg and invoked with three arguments: (value, key, object). Iteratee functions may + * exit iteration early by explicitly returning false. + * + * @param object The object to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns object. + */ + forIn( + object: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forIn + */ + forIn( + object: T, + iteratee?: ObjectIterator, + thisArg?: any + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forIn + */ + forIn( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forIn + */ + forIn( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashExplicitObjectWrapper; + } + + //_.forInRight + interface LoDashStatic { + /** + * This method is like _.forIn except that it iterates over properties of object in the opposite order. + * + * @param object The object to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns object. + */ + forInRight( + object: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forInRight + */ + forInRight( + object: T, + iteratee?: ObjectIterator, + thisArg?: any + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forInRight + */ + forInRight( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forInRight + */ + forInRight( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashExplicitObjectWrapper; + } + + //_.forOwn + interface LoDashStatic { + /** + * Iterates over own enumerable properties of an object invoking iteratee for each property. The iteratee is + * bound to thisArg and invoked with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning false. + * + * @param object The object to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns object. + */ + forOwn( + object: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forOwn + */ + forOwn( + object: T, + iteratee?: ObjectIterator, + thisArg?: any + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forOwn + */ + forOwn( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forOwn + */ + forOwn( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashExplicitObjectWrapper; + } + + //_.forOwnRight + interface LoDashStatic { + /** + * This method is like _.forOwn except that it iterates over properties of object in the opposite order. + * + * @param object The object to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns object. + */ + forOwnRight( + object: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.forOwnRight + */ + forOwnRight( + object: T, + iteratee?: ObjectIterator, + thisArg?: any + ): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.forOwnRight + */ + forOwnRight( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.forOwnRight + */ + forOwnRight( + iteratee?: DictionaryIterator, + thisArg?: any + ): _.LoDashExplicitObjectWrapper; + } + + //_.functions + interface LoDashStatic { + /** + * Creates an array of function property names from all enumerable properties, own and inherited, of object. + * + * @alias _.methods + * + * @param object The object to inspect. + * @return Returns the new array of property names. + */ + functions(object: any): string[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.functions + */ + functions(): _.LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.functions + */ + functions(): _.LoDashExplicitArrayWrapper; + } + + //_.get + interface LoDashStatic { + /** + * Gets the property value at path of object. If the resolved value is undefined the defaultValue is used + * in its place. + * + * @param object The object to query. + * @param path The path of the property to get. + * @param defaultValue The value returned if the resolved value is undefined. + * @return Returns the resolved value. + */ + get( + object: TObject, + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult + ): TResult; + + /** + * @see _.get + */ + get( + object: any, + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult + ): TResult; + } + + interface LoDashImplicitWrapper { + /** + * @see _.get + */ + get( + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult + ): TResult; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.get + */ + get( + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.get + */ + get( + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult + ): TResult; + } + + interface LoDashExplicitWrapper { + /** + * @see _.get + */ + get( + path: StringRepresentable|StringRepresentable[], + defaultValue?: any + ): TResultWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.get + */ + get( + path: StringRepresentable|StringRepresentable[], + defaultValue?: any + ): TResultWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.get + */ + get( + path: StringRepresentable|StringRepresentable[], + defaultValue?: any + ): TResultWrapper; + } + + //_.has + interface LoDashStatic { + /** + * Checks if path is a direct property. + * + * @param object The object to query. + * @param path The path to check. + * @return Returns true if path is a direct property, else false. + */ + has( + object: T, + path: StringRepresentable|StringRepresentable[] + ): boolean; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.has + */ + has(path: StringRepresentable|StringRepresentable[]): boolean; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.has + */ + has(path: StringRepresentable|StringRepresentable[]): LoDashExplicitWrapper; + } + + //_.invert + interface LoDashStatic { + /** + * Creates an object composed of the inverted keys and values of object. If object contains duplicate values, + * subsequent values overwrite property assignments of previous values unless multiValue is true. + * + * @param object The object to invert. + * @param multiValue Allow multiple values per key. + * @return Returns the new inverted object. + */ + invert( + object: T, + multiValue?: boolean + ): TResult; + + /** + * @see _.invert + */ + invert( + object: Object, + multiValue?: boolean + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.invert + */ + invert(multiValue?: boolean): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.invert + */ + invert(multiValue?: boolean): LoDashExplicitObjectWrapper; + } + + //_.keys + interface LoDashStatic { + /** + * Creates an array of the own enumerable property names of object. + * + * Note: Non-object values are coerced to objects. See the ES spec for more details. + * + * @param object The object to query. + * @return Returns the array of property names. + */ + keys(object?: any): string[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.keys + */ + keys(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.keys + */ + keys(): LoDashExplicitArrayWrapper; + } + + //_.keysIn + interface LoDashStatic { + /** + * Creates an array of the own and inherited enumerable property names of object. + * + * Note: Non-object values are coerced to objects. + * + * @param object The object to query. + * @return An array of property names. + */ + keysIn(object?: any): string[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.keysIn + */ + keysIn(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.keysIn + */ + keysIn(): LoDashExplicitArrayWrapper; + } + + //_.mapKeys + interface LoDashStatic { + /** + * The opposite of _.mapValues; this method creates an object with the same values as object and keys generated + * by running each own enumerable property of object through iteratee. + * + * @param object The object to iterate over. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the new mapped object. + */ + mapKeys( + object: List, + iteratee?: ListIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.mapKeys + */ + mapKeys( + object: Dictionary, + iteratee?: DictionaryIterator, + thisArg?: any + ): Dictionary; + + /** + * @see _.mapKeys + */ + mapKeys( + object: List|Dictionary, + iteratee?: TObject + ): Dictionary; + + /** + * @see _.mapKeys + */ + mapKeys( + object: List|Dictionary, + iteratee?: string, + thisArg?: any + ): Dictionary; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: ListIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: TObject + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: TObject + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: string, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: ListIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: TObject + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: ListIterator|DictionaryIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: TObject + ): LoDashExplicitObjectWrapper>; + + /** + * @see _.mapKeys + */ + mapKeys( + iteratee?: string, + thisArg?: any + ): LoDashExplicitObjectWrapper>; + } + + //_.mapValues + interface LoDashStatic { + /** + * Creates an object with the same keys as object and values generated by running each own + * enumerable property of object through iteratee. The iteratee function is bound to thisArg + * and invoked with three arguments: (value, key, object). + * + * If a property name is provided iteratee the created "_.property" style callback returns + * the property value of the given element. + * + * If a value is also provided for thisArg the creted "_.matchesProperty" style callback returns + * true for elements that have a matching property value, else false;. + * + * If an object is provided for iteratee the created "_.matches" style callback returns true + * for elements that have the properties of the given object, else false. + * + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration. + * @param {Object} [thisArg] The `this` binding of `iteratee`. + * @return {Object} Returns the new mapped object. + */ + mapValues(obj: Dictionary, callback: ObjectIterator, thisArg?: any): Dictionary; + mapValues(obj: Dictionary, where: Dictionary): Dictionary; + mapValues(obj: T, pluck: string): TMapped; + mapValues(obj: T, callback: ObjectIterator, thisArg?: any): T; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.mapValues + * TValue is the type of the property values of T. + * TResult is the type output by the ObjectIterator function + */ + mapValues(callback: ObjectIterator, thisArg?: any): LoDashImplicitObjectWrapper>; + + /** + * @see _.mapValues + * TResult is the type of the property specified by pluck. + * T should be a Dictionary> + */ + mapValues(pluck: string): LoDashImplicitObjectWrapper>; + + /** + * @see _.mapValues + * TResult is the type of the properties on the object specified by pluck. + * T should be a Dictionary>> + */ + mapValues(pluck: string, where: Dictionary): LoDashImplicitArrayWrapper>; + + /** + * @see _.mapValues + * TResult is the type of the properties of each object in the values of T + * T should be a Dictionary> + */ + mapValues(where: Dictionary): LoDashImplicitArrayWrapper; + } + + //_.merge + interface MergeCustomizer { + (value: any, srcValue: any, key?: string, object?: Object, source?: Object): any; + } + + interface LoDashStatic { + /** + * Recursively merges own enumerable properties of the source object(s), that don’t resolve to undefined into + * the destination object. Subsequent sources overwrite property assignments of previous sources. If customizer + * is provided it’s invoked to produce the merged values of the destination and source properties. If + * customizer returns undefined merging is handled by the method instead. The customizer is bound to thisArg + * and invoked with five arguments: (objectValue, sourceValue, key, object, source). + * + * @param object The destination object. + * @param source The source objects. + * @param customizer The function to customize assigned values. + * @param thisArg The this binding of customizer. + * @return Returns object. + */ + merge( + object: TObject, + source: TSource, + customizer?: MergeCustomizer, + thisArg?: any + ): TObject & TSource; + + /** + * @see _.merge + */ + merge( + object: TObject, + source1: TSource1, + source2: TSource2, + customizer?: MergeCustomizer, + thisArg?: any + ): TObject & TSource1 & TSource2; + + /** + * @see _.merge + */ + merge( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: MergeCustomizer, + thisArg?: any + ): TObject & TSource1 & TSource2 & TSource3; + + /** + * @see _.merge + */ + merge( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: MergeCustomizer, + thisArg?: any + ): TObject & TSource1 & TSource2 & TSource3 & TSource4; + + /** + * @see _.merge + */ + merge( + object: any, + ...otherArgs: any[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.merge + */ + merge( + source: TSource, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.merge + */ + merge( + source1: TSource1, + source2: TSource2, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.merge + */ + merge( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.merge + */ + merge( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.merge + */ + merge( + ...otherArgs: any[] + ): LoDashImplicitObjectWrapper; + } + + //_.methods + interface LoDashStatic { + /** + * @see _.functions + */ + methods(object: any): string[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.functions + */ + methods(): _.LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.functions + */ + methods(): _.LoDashExplicitArrayWrapper; + } + + //_.omit + interface LoDashStatic { + /** + * The opposite of _.pick; this method creates an object composed of the own and inherited enumerable + * properties of object that are not omitted. + * + * @param object The source object. + * @param predicate The function invoked per iteration or property names to omit, specified as individual + * property names or arrays of property names. + * @param thisArg The this binding of predicate. + * @return Returns the new object. + */ + omit( + object: T, + predicate: ObjectIterator, + thisArg?: any + ): TResult; + + /** + * @see _.omit + */ + omit( + object: T, + ...predicate: (StringRepresentable|StringRepresentable[])[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.omit + */ + omit( + predicate: ObjectIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.omit + */ + omit( + ...predicate: (StringRepresentable|StringRepresentable[])[] + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.omit + */ + omit( + predicate: ObjectIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.omit + */ + omit( + ...predicate: (StringRepresentable|StringRepresentable[])[] + ): LoDashExplicitObjectWrapper; + } + + //_.pairs + interface LoDashStatic { + /** + * Creates a two dimensional array of the key-value pairs for object, e.g. [[key1, value1], [key2, value2]]. + * + * @param object The object to query. + * @return Returns the new array of key-value pairs. + */ + pairs(object?: T): any[][]; + + pairs(object?: T): TResult[][]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.pairs + */ + pairs(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.pairs + */ + pairs(): LoDashExplicitArrayWrapper; + } + + //_.pick + interface LoDashStatic { + /** + * Creates an object composed of the picked object properties. Property names may be specified as individual + * arguments or as arrays of property names. If predicate is provided it’s invoked for each property of object + * picking the properties predicate returns truthy for. The predicate is bound to thisArg and invoked with + * three arguments: (value, key, object). + * + * @param object The source object. + * @param predicate The function invoked per iteration or property names to pick, specified as individual + * property names or arrays of property names. + * @param thisArg The this binding of predicate. + * @return Returns the new object. + */ + pick( + object: T, + predicate: ObjectIterator, + thisArg?: any + ): TResult; + + /** + * @see _.pick + */ + pick( + object: T, + ...predicate: (StringRepresentable|StringRepresentable[])[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.pick + */ + pick( + predicate: ObjectIterator, + thisArg?: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.pick + */ + pick( + ...predicate: (StringRepresentable|StringRepresentable[])[] + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.pick + */ + pick( + predicate: ObjectIterator, + thisArg?: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.pick + */ + pick( + ...predicate: (StringRepresentable|StringRepresentable[])[] + ): LoDashExplicitObjectWrapper; + } + + //_.result + interface LoDashStatic { + /** + * This method is like _.get except that if the resolved value is a function it’s invoked with the this binding + * of its parent object and its result is returned. + * + * @param object The object to query. + * @param path The path of the property to resolve. + * @param defaultValue The value returned if the resolved value is undefined. + * @return Returns the resolved value. + */ + result( + object: TObject, + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult|((...args: any[]) => TResult) + ): TResult; + + /** + * @see _.result + */ + result( + object: any, + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult|((...args: any[]) => TResult) + ): TResult; + } + + interface LoDashImplicitWrapper { + /** + * @see _.result + */ + result( + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult|((...args: any[]) => TResult) + ): TResult; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.result + */ + result( + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult|((...args: any[]) => TResult) + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.result + */ + result( + path: StringRepresentable|StringRepresentable[], + defaultValue?: TResult|((...args: any[]) => TResult) + ): TResult; + } + + interface LoDashExplicitWrapper { + /** + * @see _.result + */ + result( + path: StringRepresentable|StringRepresentable[], + defaultValue?: any + ): TResultWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.result + */ + result( + path: StringRepresentable|StringRepresentable[], + defaultValue?: any + ): TResultWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.result + */ + result( + path: StringRepresentable|StringRepresentable[], + defaultValue?: any + ): TResultWrapper; + } + + //_.set + interface LoDashStatic { + /** + * Sets the property value of path on object. If a portion of path does not exist it’s created. + * + * @param object The object to augment. + * @param path The path of the property to set. + * @param value The value to set. + * @return Returns object. + */ + set( + object: Object, + path: StringRepresentable|StringRepresentable[], + value: any + ): TResult; + + /** + * @see _.set + */ + set( + object: Object, + path: StringRepresentable|StringRepresentable[], + value: V + ): TResult; + + /** + * @see _.set + */ + set( + object: O, + path: StringRepresentable|StringRepresentable[], + value: V + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.set + */ + set( + path: StringRepresentable|StringRepresentable[], + value: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.set + */ + set( + path: StringRepresentable|StringRepresentable[], + value: V + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.set + */ + set( + path: StringRepresentable|StringRepresentable[], + value: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.set + */ + set( + path: StringRepresentable|StringRepresentable[], + value: V + ): LoDashExplicitObjectWrapper; + } + + //_.transform + interface LoDashStatic { + /** + * An alternative to _.reduce; this method transforms object to a new accumulator object which is the result of + * running each of its own enumerable properties through iteratee, with each invocation potentially mutating + * the accumulator object. The iteratee is bound to thisArg and invoked with four arguments: (accumulator, + * value, key, object). Iteratee functions may exit iteration early by explicitly returning false. + * + * @param object The object to iterate over. + * @param iteratee The function invoked per iteration. + * @param accumulator The custom accumulator value. + * @param thisArg The this binding of iteratee. + * @return Returns the accumulated value. + */ + transform( + object: T[], + iteratee?: MemoVoidArrayIterator, + accumulator?: TResult[], + thisArg?: any + ): TResult[]; + + /** + * @see _.transform + */ + transform( + object: T[], + iteratee?: MemoVoidArrayIterator>, + accumulator?: Dictionary, + thisArg?: any + ): Dictionary; + + /** + * @see _.transform + */ + transform( + object: Dictionary, + iteratee?: MemoVoidDictionaryIterator>, + accumulator?: Dictionary, + thisArg?: any + ): Dictionary; + + /** + * @see _.transform + */ + transform( + object: Dictionary, + iteratee?: MemoVoidDictionaryIterator, + accumulator?: TResult[], + thisArg?: any + ): TResult[]; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.transform + */ + transform( + iteratee?: MemoVoidArrayIterator, + accumulator?: TResult[], + thisArg?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.transform + */ + transform( + iteratee?: MemoVoidArrayIterator>, + accumulator?: Dictionary, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.transform + */ + transform( + iteratee?: MemoVoidDictionaryIterator>, + accumulator?: Dictionary, + thisArg?: any + ): LoDashImplicitObjectWrapper>; + + /** + * @see _.transform + */ + transform( + iteratee?: MemoVoidDictionaryIterator, + accumulator?: TResult[], + thisArg?: any + ): LoDashImplicitArrayWrapper; + } + + //_.values + interface LoDashStatic { + /** + * Creates an array of the own enumerable property values of object. + * + * @param object The object to query. + * @return Returns an array of property values. + */ + values(object?: any): T[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.values + */ + values(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.values + */ + values(): LoDashExplicitArrayWrapper; + } + + //_.valuesIn + interface LoDashStatic { + /** + * Creates an array of the own and inherited enumerable property values of object. + * + * @param object The object to query. + * @return Returns the array of property values. + */ + valuesIn(object?: any): T[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.valuesIn + */ + valuesIn(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.valuesIn + */ + valuesIn(): LoDashExplicitArrayWrapper; + } + + /********** + * String * + **********/ + + //_.camelCase + interface LoDashStatic { + /** + * Converts string to camel case. + * + * @param string The string to convert. + * @return Returns the camel cased string. + */ + camelCase(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.camelCase + */ + camelCase(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.camelCase + */ + camelCase(): LoDashExplicitWrapper; + } + + //_.capitalize + interface LoDashStatic { + capitalize(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.capitalize + */ + capitalize(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.capitalize + */ + capitalize(): LoDashExplicitWrapper; + } + + //_.deburr + interface LoDashStatic { + /** + * Deburrs string by converting latin-1 supplementary letters to basic latin letters and removing combining + * diacritical marks. + * + * @param string The string to deburr. + * @return Returns the deburred string. + */ + deburr(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.deburr + */ + deburr(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.deburr + */ + deburr(): LoDashExplicitWrapper; + } + + //_.endsWith + interface LoDashStatic { + /** + * Checks if string ends with the given target string. + * + * @param string The string to search. + * @param target The string to search for. + * @param position The position to search from. + * @return Returns true if string ends with target, else false. + */ + endsWith( + string?: string, + target?: string, + position?: number + ): boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.endsWith + */ + endsWith( + target?: string, + position?: number + ): boolean; + } + + interface LoDashExplicitWrapper { + /** + * @see _.endsWith + */ + endsWith( + target?: string, + position?: number + ): LoDashExplicitWrapper; + } + + // _.escape + interface LoDashStatic { + /** + * Converts the characters "&", "<", ">", '"', "'", and "`", in string to their corresponding HTML entities. + * + * Note: No other characters are escaped. To escape additional characters use a third-party library like he. + * + * Though the ">" character is escaped for symmetry, characters like ">" and "/" don’t need escaping in HTML + * and have no special meaning unless they're part of a tag or unquoted attribute value. See Mathias Bynens’s + * article (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in Internet Explorer < 9, they can break out of attribute values or HTML + * comments. See #59, #102, #108, and #133 of the HTML5 Security Cheatsheet for more details. + * + * When working with HTML you should always quote attribute values to reduce XSS vectors. + * + * @param string The string to escape. + * @return Returns the escaped string. + */ + escape(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.escape + */ + escape(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.escape + */ + escape(): LoDashExplicitWrapper; + } + + // _.escapeRegExp + interface LoDashStatic { + /** + * Escapes the RegExp special characters "\", "/", "^", "$", ".", "|", "?", "*", "+", "(", ")", "[", "]", + * "{" and "}" in string. + * + * @param string The string to escape. + * @return Returns the escaped string. + */ + escapeRegExp(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.escapeRegExp + */ + escapeRegExp(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.escapeRegExp + */ + escapeRegExp(): LoDashExplicitWrapper; + } + + //_.kebabCase + interface LoDashStatic { + /** + * Converts string to kebab case. + * + * @param string The string to convert. + * @return Returns the kebab cased string. + */ + kebabCase(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.kebabCase + */ + kebabCase(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.kebabCase + */ + kebabCase(): LoDashExplicitWrapper; + } + + //_.pad + interface LoDashStatic { + /** + * Pads string on the left and right sides if it’s shorter than length. Padding characters are truncated if + * they can’t be evenly divided by length. + * + * @param string The string to pad. + * @param length The padding length. + * @param chars The string used as padding. + * @return Returns the padded string. + */ + pad( + string?: string, + length?: number, + chars?: string + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.pad + */ + pad( + length?: number, + chars?: string + ): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.pad + */ + pad( + length?: number, + chars?: string + ): LoDashExplicitWrapper; + } + + //_.padLeft + interface LoDashStatic { + /** + * Pads string on the left side if it’s shorter than length. Padding characters are truncated if they exceed + * length. + * + * @param string The string to pad. + * @param length The padding length. + * @param chars The string used as padding. + * @return Returns the padded string. + */ + padLeft( + string?: string, + length?: number, + chars?: string + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.padLeft + */ + padLeft( + length?: number, + chars?: string + ): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.padLeft + */ + padLeft( + length?: number, + chars?: string + ): LoDashExplicitWrapper; + } + + //_.padRight + interface LoDashStatic { + /** + * Pads string on the right side if it’s shorter than length. Padding characters are truncated if they exceed + * length. + * + * @param string The string to pad. + * @param length The padding length. + * @param chars The string used as padding. + * @return Returns the padded string. + */ + padRight( + string?: string, + length?: number, + chars?: string + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.padRight + */ + padRight( + length?: number, + chars?: string + ): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.padRight + */ + padRight( + length?: number, + chars?: string + ): LoDashExplicitWrapper; + } + + //_.parseInt + interface LoDashStatic { + /** + * Converts string to an integer of the specified radix. If radix is undefined or 0, a radix of 10 is used + * unless value is a hexadecimal, in which case a radix of 16 is used. + * + * Note: This method aligns with the ES5 implementation of parseInt. + * + * @param string The string to convert. + * @param radix The radix to interpret value by. + * @return Returns the converted integer. + */ + parseInt( + string: string, + radix?: number + ): number; + } + + interface LoDashImplicitWrapper { + /** + * @see _.parseInt + */ + parseInt(radix?: number): number; + } + + interface LoDashExplicitWrapper { + /** + * @see _.parseInt + */ + parseInt(radix?: number): LoDashExplicitWrapper; + } + + //_.repeat + interface LoDashStatic { + /** + * Repeats the given string n times. + * + * @param string The string to repeat. + * @param n The number of times to repeat the string. + * @return Returns the repeated string. + */ + repeat( + string?: string, + n?: number + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.repeat + */ + repeat(n?: number): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.repeat + */ + repeat(n?: number): LoDashExplicitWrapper; + } + + //_.snakeCase + interface LoDashStatic { + /** + * Converts string to snake case. + * + * @param string The string to convert. + * @return Returns the snake cased string. + */ + snakeCase(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.snakeCase + */ + snakeCase(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.snakeCase + */ + snakeCase(): LoDashExplicitWrapper; + } + + //_.startCase + interface LoDashStatic { + /** + * Converts string to start case. + * + * @param string The string to convert. + * @return Returns the start cased string. + */ + startCase(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.startCase + */ + startCase(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.startCase + */ + startCase(): LoDashExplicitWrapper; + } + + //_.startsWith + interface LoDashStatic { + /** + * Checks if string starts with the given target string. + * + * @param string The string to search. + * @param target The string to search for. + * @param position The position to search from. + * @return Returns true if string starts with target, else false. + */ + startsWith( + string?: string, + target?: string, + position?: number + ): boolean; + } + + interface LoDashImplicitWrapper { + /** + * @see _.startsWith + */ + startsWith( + target?: string, + position?: number + ): boolean; + } + + interface LoDashExplicitWrapper { + /** + * @see _.startsWith + */ + startsWith( + target?: string, + position?: number + ): LoDashExplicitWrapper; + } + + //_.template + interface TemplateOptions extends TemplateSettings { + /** + * The sourceURL of the template's compiled source. + */ + sourceURL?: string; + } + + interface TemplateExecutor { + (data?: Object): string; + source: string; + } + + interface LoDashStatic { + /** + * Creates a compiled template function that can interpolate data properties in "interpolate" delimiters, + * HTML-escape interpolated data properties in "escape" delimiters, and execute JavaScript in "evaluate" + * delimiters. Data properties may be accessed as free variables in the template. If a setting object is + * provided it takes precedence over _.templateSettings values. + * + * Note: In the development build _.template utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) for easier + * debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @param string The template string. + * @param options The options object. + * @param options.escape The HTML "escape" delimiter. + * @param options.evaluate The "evaluate" delimiter. + * @param options.imports An object to import into the template as free variables. + * @param options.interpolate The "interpolate" delimiter. + * @param options.sourceURL The sourceURL of the template's compiled source. + * @param options.variable The data object variable name. + * @return Returns the compiled template function. + */ + template( + string: string, + options?: TemplateOptions + ): TemplateExecutor; + } + + interface LoDashImplicitWrapper { + /** + * @see _.template + */ + template(options?: TemplateOptions): TemplateExecutor; + } + + interface LoDashExplicitWrapper { + /** + * @see _.template + */ + template(options?: TemplateOptions): LoDashExplicitObjectWrapper; + } + + //_.trim + interface LoDashStatic { + /** + * Removes leading and trailing whitespace or specified characters from string. + * + * @param string The string to trim. + * @param chars The characters to trim. + * @return Returns the trimmed string. + */ + trim( + string?: string, + chars?: string + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.trim + */ + trim(chars?: string): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.trim + */ + trim(chars?: string): LoDashExplicitWrapper; + } + + //_.trimLeft + interface LoDashStatic { + /** + * Removes leading whitespace or specified characters from string. + * + * @param string The string to trim. + * @param chars The characters to trim. + * @return Returns the trimmed string. + */ + trimLeft( + string?: string, + chars?: string + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.trimLeft + */ + trimLeft(chars?: string): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.trimLeft + */ + trimLeft(chars?: string): LoDashExplicitWrapper; + } + + //_.trimRight + interface LoDashStatic { + /** + * Removes trailing whitespace or specified characters from string. + * + * @param string The string to trim. + * @param chars The characters to trim. + * @return Returns the trimmed string. + */ + trimRight( + string?: string, + chars?: string + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.trimRight + */ + trimRight(chars?: string): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.trimRight + */ + trimRight(chars?: string): LoDashExplicitWrapper; + } + + //_.trunc + interface TruncOptions { + /** The maximum string length. */ + length?: number; + /** The string to indicate text is omitted. */ + omission?: string; + /** The separator pattern to truncate to. */ + separator?: string|RegExp; + } + + interface LoDashStatic { + /** + * Truncates string if it’s longer than the given maximum string length. The last characters of the truncated + * string are replaced with the omission string which defaults to "…". + * + * @param string The string to truncate. + * @param options The options object or maximum string length. + * @return Returns the truncated string. + */ + trunc( + string?: string, + options?: TruncOptions|number + ): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.trunc + */ + trunc(options?: TruncOptions|number): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.trunc + */ + trunc(options?: TruncOptions|number): LoDashExplicitWrapper; + } + + //_.unescape + interface LoDashStatic { + /** + * The inverse of _.escape; this method converts the HTML entities &, <, >, ", ', and ` + * in string to their corresponding characters. + * + * @param string The string to unescape. + * @return Returns the unescaped string. + */ + unescape(string?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.unescape + */ + unescape(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.unescape + */ + unescape(): LoDashExplicitWrapper; + } + + //_.words + interface LoDashStatic { + /** + * Splits string into an array of its words. + * + * @param string The string to inspect. + * @param pattern The pattern to match words. + * @return Returns the words of string. + */ + words( + string?: string, + pattern?: string|RegExp + ): string[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.words + */ + words(pattern?: string|RegExp): string[]; + } + + interface LoDashExplicitWrapper { + /** + * @see _.words + */ + words(pattern?: string|RegExp): LoDashExplicitArrayWrapper; + } + + /*********** + * Utility * + ***********/ + + //_.attempt + interface LoDashStatic { + /** + * Attempts to invoke func, returning either the result or the caught error object. Any additional arguments + * are provided to func when it’s invoked. + * + * @param func The function to attempt. + * @return Returns the func result or error object. + */ + attempt(func: (...args: any[]) => TResult, ...args: any[]): TResult|Error; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.attempt + */ + attempt(...args: any[]): TResult|Error; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.attempt + */ + attempt(...args: any[]): LoDashExplicitObjectWrapper; + } + + //_.callback + interface LoDashStatic { + /** + * Creates a function that invokes func with the this binding of thisArg and arguments of the created function. + * If func is a property name the created callback returns the property value for a given element. If func is + * an object the created callback returns true for elements that contain the equivalent object properties, + * otherwise it returns false. + * + * @param func The value to convert to a callback. + * @param thisArg The this binding of func. + * @result Returns the callback. + */ + callback( + func: Function, + thisArg?: any + ): (...args: any[]) => TResult; + + /** + * @see _.callback + */ + callback( + func: string, + thisArg?: any + ): (object: any) => TResult; + + /** + * @see _.callback + */ + callback( + func: Object, + thisArg?: any + ): (object: any) => boolean; + + /** + * @see _.callback + */ + callback(): (value: TResult) => TResult; + } + + interface LoDashImplicitWrapper { + /** + * @see _.callback + */ + callback(thisArg?: any): LoDashImplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.callback + */ + callback(thisArg?: any): LoDashImplicitObjectWrapper<(object: any) => boolean>; + + /** + * @see _.callback + */ + callback(thisArg?: any): LoDashImplicitObjectWrapper<(...args: any[]) => TResult>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.callback + */ + callback(thisArg?: any): LoDashExplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.callback + */ + callback(thisArg?: any): LoDashExplicitObjectWrapper<(object: any) => boolean>; + + /** + * @see _.callback + */ + callback(thisArg?: any): LoDashExplicitObjectWrapper<(...args: any[]) => TResult>; + } + + //_.constant + interface LoDashStatic { + /** + * Creates a function that returns value. + * + * @param value The value to return from the new function. + * @return Returns the new function. + */ + constant(value: T): () => T; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.constant + */ + constant(): LoDashImplicitObjectWrapper<() => TResult>; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.constant + */ + constant(): LoDashExplicitObjectWrapper<() => TResult>; + } + + //_.identity + interface LoDashStatic { + /** + * This method returns the first argument provided to it. + * + * @param value Any value. + * @return Returns value. + */ + identity(value?: T): T; + } + + interface LoDashImplicitWrapper { + /** + * @see _.identity + */ + identity(): T; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.identity + */ + identity(): T[]; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.identity + */ + identity(): T; + } + + interface LoDashExplicitWrapper { + /** + * @see _.identity + */ + identity(): LoDashExplicitWrapper; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.identity + */ + identity(): LoDashExplicitArrayWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.identity + */ + identity(): LoDashExplicitObjectWrapper; + } + + //_.iteratee + interface LoDashStatic { + /** + * @see _.callback + */ + iteratee( + func: Function, + thisArg?: any + ): (...args: any[]) => TResult; + + /** + * @see _.callback + */ + iteratee( + func: string, + thisArg?: any + ): (object: any) => TResult; + + /** + * @see _.callback + */ + iteratee( + func: Object, + thisArg?: any + ): (object: any) => boolean; + + /** + * @see _.callback + */ + iteratee(): (value: TResult) => TResult; + } + + interface LoDashImplicitWrapper { + /** + * @see _.callback + */ + iteratee(thisArg?: any): LoDashImplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.callback + */ + iteratee(thisArg?: any): LoDashImplicitObjectWrapper<(object: any) => boolean>; + + /** + * @see _.callback + */ + iteratee(thisArg?: any): LoDashImplicitObjectWrapper<(...args: any[]) => TResult>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.callback + */ + iteratee(thisArg?: any): LoDashExplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.callback + */ + iteratee(thisArg?: any): LoDashExplicitObjectWrapper<(object: any) => boolean>; + + /** + * @see _.callback + */ + iteratee(thisArg?: any): LoDashExplicitObjectWrapper<(...args: any[]) => TResult>; + } + + //_.matches + interface LoDashStatic { + /** + * Creates a function that performs a deep comparison between a given object and source, returning true if the + * given object has equivalent property values, else false. + * + * Note: This method supports comparing arrays, booleans, Date objects, numbers, Object objects, regexes, and + * strings. Objects are compared by their own, not inherited, enumerable properties. For comparing a single own + * or inherited property value see _.matchesProperty. + * + * @param source The object of property values to match. + * @return Returns the new function. + */ + matches(source: T): (value: any) => boolean; + + /** + * @see _.matches + */ + matches(source: T): (value: V) => boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.matches + */ + matches(): LoDashImplicitObjectWrapper<(value: V) => boolean>; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.matches + */ + matches(): LoDashExplicitObjectWrapper<(value: V) => boolean>; + } + + //_.matchesProperty + interface LoDashStatic { + /** + * Creates a function that compares the property value of path on a given object to value. + * + * Note: This method supports comparing arrays, booleans, Date objects, numbers, Object objects, regexes, and + * strings. Objects are compared by their own, not inherited, enumerable properties. + * + * @param path The path of the property to get. + * @param srcValue The value to match. + * @return Returns the new function. + */ + matchesProperty( + path: StringRepresentable|StringRepresentable[], + srcValue: T + ): (value: any) => boolean; + + /** + * @see _.matchesProperty + */ + matchesProperty( + path: StringRepresentable|StringRepresentable[], + srcValue: T + ): (value: V) => boolean; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.matchesProperty + */ + matchesProperty( + srcValue: SrcValue + ): LoDashImplicitObjectWrapper<(value: any) => boolean>; + + /** + * @see _.matchesProperty + */ + matchesProperty( + srcValue: SrcValue + ): LoDashImplicitObjectWrapper<(value: Value) => boolean>; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.matchesProperty + */ + matchesProperty( + srcValue: SrcValue + ): LoDashExplicitObjectWrapper<(value: any) => boolean>; + + /** + * @see _.matchesProperty + */ + matchesProperty( + srcValue: SrcValue + ): LoDashExplicitObjectWrapper<(value: Value) => boolean>; + } + + //_.method + interface LoDashStatic { + /** + * Creates a function that invokes the method at path on a given object. Any additional arguments are provided + * to the invoked method. + * + * @param path The path of the method to invoke. + * @param args The arguments to invoke the method with. + * @return Returns the new function. + */ + method( + path: string|StringRepresentable[], + ...args: any[] + ): (object: TObject) => TResult; + + /** + * @see _.method + */ + method( + path: string|StringRepresentable[], + ...args: any[] + ): (object: any) => TResult; + } + + interface LoDashImplicitWrapper { + /** + * @see _.method + */ + method(...args: any[]): LoDashImplicitObjectWrapper<(object: TObject) => TResult>; + + /** + * @see _.method + */ + method(...args: any[]): LoDashImplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.method + */ + method(...args: any[]): LoDashImplicitObjectWrapper<(object: TObject) => TResult>; + + /** + * @see _.method + */ + method(...args: any[]): LoDashImplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.method + */ + method(...args: any[]): LoDashExplicitObjectWrapper<(object: TObject) => TResult>; + + /** + * @see _.method + */ + method(...args: any[]): LoDashExplicitObjectWrapper<(object: any) => TResult>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.method + */ + method(...args: any[]): LoDashExplicitObjectWrapper<(object: TObject) => TResult>; + + /** + * @see _.method + */ + method(...args: any[]): LoDashExplicitObjectWrapper<(object: any) => TResult>; + } + + //_.methodOf + interface LoDashStatic { + /** + * The opposite of _.method; this method creates a function that invokes the method at a given path on object. + * Any additional arguments are provided to the invoked method. + * + * @param object The object to query. + * @param args The arguments to invoke the method with. + * @return Returns the new function. + */ + methodOf( + object: TObject, + ...args: any[] + ): (path: StringRepresentable|StringRepresentable[]) => TResult; + + /** + * @see _.methodOf + */ + methodOf( + object: {}, + ...args: any[] + ): (path: StringRepresentable|StringRepresentable[]) => TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.methodOf + */ + methodOf( + ...args: any[] + ): LoDashImplicitObjectWrapper<(path: StringRepresentable|StringRepresentable[]) => TResult>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.methodOf + */ + methodOf( + ...args: any[] + ): LoDashExplicitObjectWrapper<(path: StringRepresentable|StringRepresentable[]) => TResult>; + } + + //_.mixin + interface MixinOptions { + chain?: boolean; + } + + interface LoDashStatic { + /** + * Adds all own enumerable function properties of a source object to the destination object. If object is a + * function then methods are added to its prototype as well. + * + * Note: Use _.runInContext to create a pristine lodash function to avoid conflicts caused by modifying + * the original. + * + * @param object The destination object. + * @param source The object of functions to add. + * @param options The options object. + * @param options.chain Specify whether the functions added are chainable. + * @return Returns object. + */ + mixin( + object: TObject, + source: Dictionary, + options?: MixinOptions + ): TResult; + + /** + * @see _.mixin + */ + mixin( + source: Dictionary, + options?: MixinOptions + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.mixin + */ + mixin( + source: Dictionary, + options?: MixinOptions + ): LoDashImplicitObjectWrapper; + + /** + * @see _.mixin + */ + mixin( + options?: MixinOptions + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.mixin + */ + mixin( + source: Dictionary, + options?: MixinOptions + ): LoDashExplicitObjectWrapper; + + /** + * @see _.mixin + */ + mixin( + options?: MixinOptions + ): LoDashExplicitObjectWrapper; + } + + //_.noConflict + interface LoDashStatic { + /** + * Reverts the _ variable to its previous value and returns a reference to the lodash function. + * + * @return Returns the lodash function. + */ + noConflict(): typeof _; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.noConflict + */ + noConflict(): typeof _; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.noConflict + */ + noConflict(): LoDashExplicitObjectWrapper; + } + + //_.noop + interface LoDashStatic { + /** + * A no-operation function that returns undefined regardless of the arguments it receives. + * + * @return undefined + */ + noop(...args: any[]): void; + } + + interface LoDashImplicitWrapperBase { + /** + * @see _.noop + */ + noop(...args: any[]): void; + } + + interface LoDashExplicitWrapperBase { + /** + * @see _.noop + */ + noop(...args: any[]): _.LoDashExplicitWrapper; + } + + //_.property + interface LoDashStatic { + /** + * Creates a function that returns the property value at path on a given object. + * + * @param path The path of the property to get. + * @return Returns the new function. + */ + property(path: StringRepresentable|StringRepresentable[]): (obj: TObj) => TResult; + } + + interface LoDashImplicitWrapper { + /** + * @see _.property + */ + property(): LoDashImplicitObjectWrapper<(obj: TObj) => TResult>; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.property + */ + property(): LoDashImplicitObjectWrapper<(obj: TObj) => TResult>; + } + + interface LoDashExplicitWrapper { + /** + * @see _.property + */ + property(): LoDashExplicitObjectWrapper<(obj: TObj) => TResult>; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.property + */ + property(): LoDashExplicitObjectWrapper<(obj: TObj) => TResult>; + } + + //_.propertyOf + interface LoDashStatic { + /** + * The opposite of _.property; this method creates a function that returns the property value at a given path + * on object. + * + * @param object The object to query. + * @return Returns the new function. + */ + propertyOf(object: T): (path: string|string[]) => any; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.propertyOf + */ + propertyOf(): LoDashImplicitObjectWrapper<(path: string|string[]) => any>; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.propertyOf + */ + propertyOf(): LoDashExplicitObjectWrapper<(path: string|string[]) => any>; + } + + //_.range + interface LoDashStatic { + /** + * Creates an array of numbers (positive and/or negative) progressing from start up to, but not including, end. + * If end is not specified it’s set to start with start then set to 0. If end is less than start a zero-length + * range is created unless a negative step is specified. + * + * @param start The start of the range. + * @param end The end of the range. + * @param step The value to increment or decrement by. + * @return Returns a new range array. + */ + range( + start: number, + end: number, + step?: number + ): number[]; + + /** + * @see _.range + */ + range( + end: number, + step?: number + ): number[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.range + */ + range( + end?: number, + step?: number + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.range + */ + range( + end?: number, + step?: number + ): LoDashExplicitArrayWrapper; + } + + //_.runInContext + interface LoDashStatic { + /** + * Create a new pristine lodash function using the given context object. + * + * @param context The context object. + * @return Returns a new lodash function. + */ + runInContext(context?: Object): typeof _; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.runInContext + */ + runInContext(): typeof _; + } + + //_.times + interface LoDashStatic { + /** + * Invokes the iteratee function n times, returning an array of the results of each invocation. The iteratee is + * bound to thisArg and invoked with one argument; (index). + * + * @param n The number of times to invoke iteratee. + * @param iteratee The function invoked per iteration. + * @param thisArg The this binding of iteratee. + * @return Returns the array of results. + */ + times( + n: number, + iteratee: (num: number) => TResult, + thisArg?: any + ): TResult[]; + + /** + * @see _.times + */ + times(n: number): number[]; + } + + interface LoDashImplicitWrapper { + /** + * @see _.times + */ + times( + iteratee: (num: number) => TResult, + thisArgs?: any + ): LoDashImplicitArrayWrapper; + + /** + * @see _.times + */ + times(): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitWrapper { + /** + * @see _.times + */ + times( + iteratee: (num: number) => TResult, + thisArgs?: any + ): LoDashExplicitArrayWrapper; + + /** + * @see _.times + */ + times(): LoDashExplicitArrayWrapper; + } + + //_.uniqueId + interface LoDashStatic { + /** + * Generates a unique ID. If prefix is provided the ID is appended to it. + * + * @param prefix The value to prefix the ID with. + * @return Returns the unique ID. + */ + uniqueId(prefix?: string): string; + } + + interface LoDashImplicitWrapper { + /** + * @see _.uniqueId + */ + uniqueId(): string; + } + + interface LoDashExplicitWrapper { + /** + * @see _.uniqueId + */ + uniqueId(): LoDashExplicitWrapper; + } + + interface ListIterator { + (value: T, index: number, collection: List): TResult; + } + + interface DictionaryIterator { + (value: T, key?: string, collection?: Dictionary): TResult; + } + + interface NumericDictionaryIterator { + (value: T, key?: number, collection?: Dictionary): TResult; + } + + interface ObjectIterator { + (element: T, key?: string, collection?: any): TResult; + } + + interface StringIterator { + (char: string, index?: number, string?: string): TResult; + } + + interface MemoVoidIterator { + (prev: TResult, curr: T, indexOrKey?: any, list?: T[]): void; + } + interface MemoIterator { + (prev: TResult, curr: T, indexOrKey?: any, list?: T[]): TResult; + } + + interface MemoVoidArrayIterator { + (acc: TResult, curr: T, index?: number, arr?: T[]): void; + } + interface MemoVoidDictionaryIterator { + (acc: TResult, curr: T, key?: string, dict?: Dictionary): void; + } + + //interface Collection {} + + // Common interface between Arrays and jQuery objects + interface List { + [index: number]: T; + length: number; + } + + interface Dictionary { + [index: string]: T; + } + + interface NumericDictionary { + [index: number]: T; + } + + interface StringRepresentable { + toString(): string; + } + + interface Cancelable { + cancel(): void; + } +} + +declare module "lodash" { + export = _; +} diff --git a/frontend/typings/react-redux.d.ts b/frontend/typings/react-redux.d.ts new file mode 100644 index 000000000..15241d4ef --- /dev/null +++ b/frontend/typings/react-redux.d.ts @@ -0,0 +1,66 @@ +// Type definitions for react-redux 2.1.2 +// Project: https://github.com/rackt/react-redux +// Definitions by: Qubo +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module "react-redux" { + import { Component } from 'react'; + import { Store, Dispatch, ActionCreator } from 'redux'; + + export class ElementClass extends Component { } + export interface ClassDecorator { + (component: T): T + } + + /** + * Connects a React component to a Redux store. + * @param mapStateToProps + * @param mapDispatchToProps + * @param mergeProps + * @param options + */ + export function connect(mapStateToProps?: MapStateToProps, + mapDispatchToProps?: MapDispatchToPropsFunction | MapDispatchToPropsObject, + mergeProps?: MergeProps, + options?: Options): ClassDecorator; + + interface MapStateToProps { + (state: any, ownProps?: any): any; + } + + interface MapDispatchToPropsFunction { + (dispatch: Dispatch, ownProps?: any): any; + } + + interface MapDispatchToPropsObject { + [name: string]: ActionCreator; + } + + interface MergeProps { + (stateProps: any, dispatchProps: any, ownProps: any): any; + } + + interface Options { + /** + * If true, implements shouldComponentUpdate and shallowly compares the result of mergeProps, + * preventing unnecessary updates, assuming that the component is a “pure” component + * and does not rely on any input or state other than its props and the selected Redux store’s state. + * Defaults to true. + * @default true + */ + pure: boolean; + } + + export interface Property { + /** + * The single Redux store in your application. + */ + store?: Store; + children?: Function; + } + + /** + * Makes the Redux store available to the connect() calls in the component hierarchy below. + */ + export class Provider extends Component { } +} \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 000000000..e9dde3f31 --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,6291 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@blueprintjs/core@^1.18.0", "@blueprintjs/core@^1.20.0": + version "1.20.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-1.20.0.tgz#3a95cb4b854b0687c6ca60ef26a39b4e016b42b0" + dependencies: + "@types/dom4" "^1.5.20" + "@types/tether" "^1.1.27" + classnames "^2.2" + dom4 "^1.8" + normalize.css "4.1.1" + pure-render-decorator "^1.1" + tether "^1.4" + tslib "^1.5.0" + +"@blueprintjs/labs@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/labs/-/labs-0.1.0.tgz#fedcbd7dd694f13903b25953e04df265ed20158f" + dependencies: + "@blueprintjs/core" "^1.18.0" + classnames "^2.2" + pure-render-decorator "1.2.1" + tslib "^1.5.0" + +"@types/cheerio@*": + version "0.22.1" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.1.tgz#740c4cd8c4d3f3074f83b9ab62e711eac2c764ce" + +"@types/deep-freeze@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@types/deep-freeze/-/deep-freeze-0.1.0.tgz#93eff1f571efc57fc449e83c3e0499bd0a5867e3" + +"@types/dom4@^1.5.20": + version "1.5.20" + resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-1.5.20.tgz#ccf636d3b794fe65a4191ebc7ff979a78efea6c2" + +"@types/enzyme@^2.7.8": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-2.8.0.tgz#84c6204cf89831223a89ab6dc3f490b1e0886352" + dependencies: + "@types/cheerio" "*" + "@types/react" "*" + +"@types/fastclick@^1.0.28": + version "1.0.28" + resolved "https://registry.yarnpkg.com/@types/fastclick/-/fastclick-1.0.28.tgz#db4b3f6f079235324b264338e229f9cdd98a6c4e" + +"@types/handlebars@^4.0.31": + version "4.0.32" + resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.32.tgz#637e8d945a9354aab47df7125005490fe9f8e592" + +"@types/history@^2.0.39": + version "2.0.48" + resolved "https://registry.yarnpkg.com/@types/history/-/history-2.0.48.tgz#7e2868c3ad73d83c482f1d68f148c4fdc79c8a79" + +"@types/history@^3": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/history/-/history-3.2.1.tgz#0039ab0e0be2a0cc22bac171d27a44588103d123" + +"@types/i18next@^2.3.32": + version "2.3.38" + resolved "https://registry.yarnpkg.com/@types/i18next/-/i18next-2.3.38.tgz#eb9bd4f579aefb7a2e86b15e2b8024edaaf4a4c9" + +"@types/jest@^19.2.2": + version "19.2.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-19.2.3.tgz#61748040e8589a891dfc2ec1d16a2dd74482980e" + +"@types/lodash@^4.14.64": + version "4.14.64" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.64.tgz#979cf3a3d4a368670840bf9b3e448dc33ffe84ee" + +"@types/markdown-it@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-0.0.1.tgz#486c3cb3cab057d1f63c8558516eb402eb6bbf29" + +"@types/mqtt@0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/mqtt/-/mqtt-0.0.32.tgz#b1ffbc7cadc42e4a90ec19a2eefe4968544c2ea3" + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^6.0.63": + version "6.0.73" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.73.tgz#85dc4bb6f125377c75ddd2519a1eeb63f0a4ed70" + +"@types/react-color@^2.11.0": + version "2.11.1" + resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-2.11.1.tgz#bb1bc7615cf9c18ea02b7648eb88dcafaffc5538" + dependencies: + "@types/react" "*" + +"@types/react-dom@^0.14.18": + version "0.14.23" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e" + dependencies: + "@types/react" "*" + +"@types/react-redux@^4.4.32": + version "4.4.40" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-4.4.40.tgz#268d1a9b9a42e52562450e2c306630fa38db36ad" + dependencies: + "@types/react" "*" + redux "^3.6.0" + +"@types/react-router@^3.0.0": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-3.0.11.tgz#fbb1965e5cc1786d2cbb0f1fa49d4856e2e579f6" + dependencies: + "@types/history" "^3" + "@types/react" "*" + +"@types/react@*", "@types/react@^0.14.57": + version "0.14.57" + resolved "https://registry.yarnpkg.com/@types/react/-/react-0.14.57.tgz#1878a8654fafdd1d381b8457292b6433498c5b62" + +"@types/redux@^3.6.31": + version "3.6.31" + resolved "https://registry.yarnpkg.com/@types/redux/-/redux-3.6.31.tgz#40eafa7575db36b912ce0059b85de98c205b0708" + +"@types/tether@^1.1.27": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@types/tether/-/tether-1.4.1.tgz#828b38034b01edce44dc42935229067aec736f4a" + +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.3, acorn@^4.0.4: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +acorn@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + +ajv-keywords@^1.1.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +amdefine@>=0.0.4, amdefine@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + +async@1.x, async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.1, async@^2.1.2, async@^2.1.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" + dependencies: + lodash "^4.14.0" + +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.14.0.tgz#40f24f2f4e913b9faa43d3a7b2e40ab8729afa90" + dependencies: + follow-redirects "0.0.7" + +babel-code-frame@^6.11.0, babel-code-frame@^6.20.0, babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.0.0, babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^19.0.0" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.1" + test-exclude "^4.1.0" + +babel-plugin-jest-hoist@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" + dependencies: + babel-plugin-jest-hoist "^19.0.0" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.0.0, babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" + +balanced-match@^0.4.1, balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +bl@^0.9.1: + version "0.9.5" + resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" + dependencies: + readable-stream "~1.0.26" + +bl@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" + dependencies: + readable-stream "^2.0.5" + +blamer@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/blamer/-/blamer-0.1.13.tgz#61f215f2361bd054e6258c0c5e0086f04074e670" + dependencies: + bluebird "~2.3.x" + xml2js "~0.4.x" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.0.5: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + +bluebird@~2.3.x: + version "2.3.11" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.3.11.tgz#15bb78ed32abf27b090640c0f85e4b91f615c8b6" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boxed_value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boxed_value/-/boxed_value-1.0.0.tgz#b78368a08b505a6f7b575fd310aade0c88eedf17" + dependencies: + typescript "^2.0.9" + +boxen@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^1.1.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^0.1.0" + widest-line "^1.0.0" + +brace-expansion@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" + +bytes@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.5.0.tgz#4c9423ea2d252c270c41b2bdefeff9bb6b62c06a" + +callback-stream@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/callback-stream/-/callback-stream-1.1.0.tgz#4701a51266f06e06eaa71fc17233822d875f4908" + dependencies: + inherits "^2.0.1" + readable-stream "> 1.0.0 < 3.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000666" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000666.tgz#951ed9f3d3bfaa08a06dafbb5089ab07cce6ab90" + +capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + +cardinal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" + dependencies: + ansicolors "~0.2.1" + redeyed "~1.0.0" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chain-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chokidar@^1.4.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +clap@^1.0.9: + version "1.1.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" + dependencies: + chalk "^1.1.3" + +classnames@^2.2: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + dependencies: + colors "1.0.3" + +cli-usage@^0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" + dependencies: + marked "^0.3.6" + marked-terminal "^1.6.2" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cli@>=0.10.x: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + dependencies: + exit "0.1.2" + glob "^7.1.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +cmd-shim@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +codemirror@>=4.10.x: + version "5.25.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.25.2.tgz#8c77677ca9c9248d757d3a07ed1e89a8404850b7" + +color-convert@^1.0.0, color-convert@^1.3.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@1.0.3, colors@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.0.3, colors@^1.1.2, colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/commist/-/commist-1.0.0.tgz#c0c352501cf6f52e9124e3ef89c9806e2022ebef" + dependencies: + leven "^1.0.0" + minimist "^1.1.0" + +compressible@~2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" + dependencies: + mime-db ">= 1.27.0 < 2" + +compression@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" + dependencies: + accepts "~1.3.3" + bytes "2.3.0" + compressible "~2.0.8" + debug "~2.2.0" + on-headers "~1.0.1" + vary "~1.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.7: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-history-api-fallback@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" + +connect@1.x: + version "1.9.2" + resolved "https://registry.yarnpkg.com/connect/-/connect-1.9.2.tgz#42880a22e9438ae59a8add74e437f58ae8e52807" + dependencies: + formidable "1.0.x" + mime ">= 0.0.1" + qs ">= 0.4.0" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +coveralls@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" + dependencies: + js-yaml "3.6.1" + lcov-parse "0.0.10" + log-driver "1.2.5" + minimist "1.2.0" + request "2.79.0" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +create-react-class@^15.5.1: + version "15.5.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.3.tgz#fb0f7cae79339e9a179e194ef466efa3923820fe" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn-async@^2.1.1: + version "2.2.5" + resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + dependencies: + lru-cache "^4.0.0" + which "^1.2.8" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.25.0.tgz#c3febc8ce28f4c83576b6b13707f47f90c390223" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.6.0" + cssnano ">=2.6.1 <4" + loader-utils "~0.2.2" + lodash.camelcase "^3.0.1" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.4" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4", cssnano@^3.4.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^1.0.11: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +death@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + +debug@2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" + dependencies: + ms "0.7.3" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.6: + version "2.6.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" + dependencies: + ms "0.7.3" + +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-freeze@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.0, depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + +diff@^3.0.0, diff@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-helpers@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +dom4@^1.8: + version "1.8.3" + resolved "https://registry.yarnpkg.com/dom4/-/dom4-1.8.3.tgz#2b0aa096b46368e33bbd2c2767f0e32dbb3394cd" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@1.5.1, domutils@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" + dependencies: + is-obj "^1.0.0" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexify@^3.1.2, duplexify@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" + dependencies: + end-of-stream "1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +electron-to-chromium@^1.2.7: + version "1.3.9" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.9.tgz#db1cba2a26aebcca2f7f5b8b034554468609157d" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" + dependencies: + once "~1.3.0" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" + dependencies: + once "^1.4.0" + +enhanced-resolve@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +enzyme@^2.8.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" + dependencies: + cheerio "^0.22.0" + function.prototype.name "^1.0.0" + is-subset "^0.1.1" + lodash "^4.17.2" + object-is "^1.0.1" + object.assign "^4.0.4" + object.entries "^1.0.3" + object.values "^1.0.3" + prop-types "^15.5.4" + uuid "^2.0.3" + +"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.8.x, escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +execa@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" + dependencies: + cross-spawn-async "^2.1.1" + is-stream "^1.1.0" + npm-run-path "^1.0.0" + object-assign "^4.0.1" + path-key "^1.0.0" + strip-eof "^1.0.0" + +exit@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express@2.5.x: + version "2.5.11" + resolved "https://registry.yarnpkg.com/express/-/express-2.5.11.tgz#4ce8ea1f3635e69e49f0ebb497b6a4b0a51ce6f0" + dependencies: + connect "1.x" + mime "1.2.4" + mkdirp "0.3.0" + qs "0.4.x" + +express@^4.13.3: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.1" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.3" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.14" + utils-merge "1.0.0" + vary "~1.1.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0, extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +external-editor@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.1.tgz#4c597c6c88fa6410e41dbbaa7b1be2336aa31095" + dependencies: + tmp "^0.0.31" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extract-text-webpack-plugin@^2.0.0-beta.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.0.tgz#69315b885f876dbf96d3819f6a9f1cca7aebf159" + dependencies: + ajv "^4.11.2" + async "^2.1.2" + loader-utils "^1.0.2" + webpack-sources "^0.1.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + +fancy-log@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +farmbot-toastr@^1.0.0, farmbot-toastr@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/farmbot-toastr/-/farmbot-toastr-1.0.2.tgz#a8fbc744e6d706d9539c0cf180e2ab50f4ea422e" + dependencies: + farmbot-toastr "^1.0.0" + typescript "^2.3.4" + +farmbot@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/farmbot/-/farmbot-4.0.7.tgz#f2cda1a4b38102e99818fb06cee73a70218f40a5" + dependencies: + mqtt "^1.7.4" + typescript "^2.1.5" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastclick@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fastclick/-/fastclick-1.0.6.tgz#161625b27b1a5806405936bda9a2c1926d06be6a" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs@^0.8.0, fbjs@^0.8.4, fbjs@^0.8.9: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" + dependencies: + loader-utils "^1.0.2" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a" + dependencies: + debug "2.6.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +findup-sync@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" + dependencies: + glob "~5.0.0" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +follow-redirects@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919" + dependencies: + debug "^2.2.0" + stream-consume "^0.1.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +formidable@1.0.x: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +fs-extra@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +function.prototype.name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + is-callable "^1.1.2" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-all@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" + dependencies: + glob "^7.0.5" + yargs "~1.2.6" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob@>=5.0.x, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^5.0.15, glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +globule@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" + dependencies: + glob "~7.1.1" + lodash "~4.16.4" + minimatch "~3.0.2" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growly@^1.2.0, growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +gulp-util@3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^1.0.11" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +handlebars@^4.0.1, handlebars@^4.0.3, handlebars@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +help-me@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/help-me/-/help-me-1.1.0.tgz#8f2d508d0600b4a456da2f086556e7e5c056a3c6" + dependencies: + callback-stream "^1.0.2" + glob-stream "^6.1.0" + through2 "^2.0.1" + xtend "^4.0.0" + +history@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c" + dependencies: + invariant "^2.2.1" + loose-envify "^1.2.0" + query-string "^4.2.2" + warning "^3.0.0" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-errors@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.1: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +i18next@^3.4.3: + version "3.5.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-3.5.2.tgz#930390d5c318ceaa4858b52dd0e40e6b203f9f41" + +iconv-lite@0.4.13, iconv-lite@~0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +icss-replace-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +imports-loader@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253" + dependencies: + loader-utils "^1.0.2" + source-map "^0.5.6" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" + dependencies: + ansi-escapes "^1.1.0" + chalk "^1.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.1" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx "^4.1.0" + string-width "^2.0.0" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + +invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-absolute@^0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-ci@^1.0.10, is-ci@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-my-json-valid@^2.12.4: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-regex@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + dependencies: + is-unc-path "^0.1.1" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + dependencies: + unc-path-regex "^0.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@0.1.x, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.0-alpha.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.0" + istanbul-lib-hook "^1.0.6" + istanbul-lib-instrument "^1.7.1" + istanbul-lib-report "^1.1.0" + istanbul-lib-source-maps "^1.2.0" + istanbul-reports "^1.1.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" + +istanbul-lib-hook@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.2.0, istanbul-lib-instrument@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" + dependencies: + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" + dependencies: + handlebars "^4.0.3" + +istanbul@0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jest-changed-files@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" + +jest-cli@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.1" + graceful-fs "^4.1.6" + is-ci "^1.0.9" + istanbul-api "^1.1.0-alpha.1" + istanbul-lib-coverage "^1.0.0" + istanbul-lib-instrument "^1.1.1" + jest-changed-files "^19.0.2" + jest-config "^19.0.2" + jest-environment-jsdom "^19.0.2" + jest-haste-map "^19.0.0" + jest-jasmine2 "^19.0.2" + jest-message-util "^19.0.0" + jest-regex-util "^19.0.0" + jest-resolve-dependencies "^19.0.0" + jest-runtime "^19.0.2" + jest-snapshot "^19.0.2" + jest-util "^19.0.2" + micromatch "^2.3.11" + node-notifier "^5.0.1" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.1.1" + worker-farm "^1.3.1" + yargs "^6.3.0" + +jest-config@^19.0.0, jest-config@^19.0.2: + version "19.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.4.tgz#42980211d46417e91ca7abffd086c270234f73fd" + dependencies: + chalk "^1.1.1" + jest-environment-jsdom "^19.0.2" + jest-environment-node "^19.0.2" + jest-jasmine2 "^19.0.2" + jest-regex-util "^19.0.0" + jest-resolve "^19.0.2" + jest-validate "^19.0.2" + pretty-format "^19.0.0" + +jest-diff@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" + dependencies: + chalk "^1.1.3" + diff "^3.0.0" + jest-matcher-utils "^19.0.0" + pretty-format "^19.0.0" + +jest-environment-jsdom@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" + dependencies: + jest-mock "^19.0.0" + jest-util "^19.0.2" + jsdom "^9.11.0" + +jest-environment-node@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" + dependencies: + jest-mock "^19.0.0" + jest-util "^19.0.2" + +jest-file-exists@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" + +jest-haste-map@^19.0.0: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.2.tgz#286484c3a16e86da7872b0877c35dce30c3d6f07" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.6" + micromatch "^2.3.11" + sane "~1.5.0" + worker-farm "^1.3.1" + +jest-jasmine2@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" + dependencies: + graceful-fs "^4.1.6" + jest-matcher-utils "^19.0.0" + jest-matchers "^19.0.0" + jest-message-util "^19.0.0" + jest-snapshot "^19.0.2" + +jest-matcher-utils@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" + dependencies: + chalk "^1.1.3" + pretty-format "^19.0.0" + +jest-matchers@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" + dependencies: + jest-diff "^19.0.0" + jest-matcher-utils "^19.0.0" + jest-message-util "^19.0.0" + jest-regex-util "^19.0.0" + +jest-message-util@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" + dependencies: + chalk "^1.1.1" + micromatch "^2.3.11" + +jest-mock@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" + +jest-regex-util@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" + +jest-resolve-dependencies@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" + dependencies: + jest-file-exists "^19.0.0" + +jest-resolve@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" + dependencies: + browser-resolve "^1.11.2" + jest-haste-map "^19.0.0" + resolve "^1.2.0" + +jest-runtime@^19.0.2: + version "19.0.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330" + dependencies: + babel-core "^6.0.0" + babel-jest "^19.0.0" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.6" + jest-config "^19.0.2" + jest-file-exists "^19.0.0" + jest-haste-map "^19.0.0" + jest-regex-util "^19.0.0" + jest-resolve "^19.0.2" + jest-util "^19.0.2" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^6.3.0" + +jest-snapshot@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" + dependencies: + chalk "^1.1.3" + jest-diff "^19.0.0" + jest-file-exists "^19.0.0" + jest-matcher-utils "^19.0.0" + jest-util "^19.0.2" + natural-compare "^1.4.0" + pretty-format "^19.0.0" + +jest-util@^19.0.0, jest-util@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" + dependencies: + chalk "^1.1.1" + graceful-fs "^4.1.6" + jest-file-exists "^19.0.0" + jest-message-util "^19.0.0" + jest-mock "^19.0.0" + jest-validate "^19.0.2" + leven "^2.0.0" + mkdirp "^0.5.1" + +jest-validate@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" + dependencies: + chalk "^1.1.1" + jest-matcher-utils "^19.0.0" + leven "^2.0.0" + pretty-format "^19.0.0" + +jest@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10" + dependencies: + jest-cli "^19.0.2" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-base64@^2.1.8, js-base64@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@3.6.1, js-yaml@>=3.4.x: + version "3.6.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +js-yaml@3.x, js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jscpd@^0.6.10: + version "0.6.11" + resolved "https://registry.yarnpkg.com/jscpd/-/jscpd-0.6.11.tgz#3ac3fe808c6e4d7885c5f1fc76c1925f923c79c9" + dependencies: + blamer "^0.1.9" + bluebird "^3.0.5" + cli ">=0.10.x" + cli-table "^0.3.1" + codemirror ">=4.10.x" + colors "^1.1.2" + glob ">=5.0.x" + js-yaml ">=3.4.x" + shelljs ">=0.5.x" + underscore ">=1.8.x" + winston ">=1.0.x" + +jsdom@^9.11.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" + dependencies: + is-buffer "^1.1.5" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lazy-req@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +lcov-parse@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + +leven@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" + +leven@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +linkify-it@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" + dependencies: + uc.micro "^1.0.1" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.6, loader-utils@~0.2.2: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + +lodash._arrayeach@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._baseclone@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._baseassign "^3.0.0" + lodash._basefor "^3.0.0" + lodash.isarray "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basefor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createcompounder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" + dependencies: + lodash.deburr "^3.0.0" + lodash.words "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + +lodash.camelcase@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" + dependencies: + lodash._createcompounder "^3.0.0" + +lodash.clonedeep@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" + dependencies: + lodash._baseclone "^3.0.0" + lodash._bindcallback "^3.0.0" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.deburr@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" + dependencies: + lodash._root "^3.0.0" + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.partition@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.partition/-/lodash.partition-4.6.0.tgz#a38e46b73469e0420b0da1212e66d414be364ba4" + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash.words@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" + dependencies: + lodash._root "^3.0.0" + +lodash@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lodash@~4.16.4: + version "4.16.6" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" + +log-driver@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0, loud-rejection@^1.2.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lowercase-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lru-cache@^4.0.0, lru-cache@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +make-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + dependencies: + pify "^2.3.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +markdown-it-emoji@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.3.0.tgz#903ae1a9968c3f17d4e142f115d4ec575e56d2cb" + +markdown-it@^8.2.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.3.1.tgz#2f4b622948ccdc193d66f3ca2d43125ac4ac7323" + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.3" + +marked-terminal@^1.6.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" + dependencies: + cardinal "^1.0.0" + chalk "^1.1.3" + cli-table "^0.3.1" + lodash.assign "^4.2.0" + node-emoji "^1.4.1" + +marked@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + +material-colors@^1.2.1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.5.tgz#5292593e6754cb1bcc2b98030e4e0d6a3afc9ea1" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mime@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.4.tgz#11b5fdaf29c2509255176b80ad520294f5de92b7" + +mime@1.3.4, mime@1.3.x, "mime@>= 0.0.1", mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +moment@2.15.2: + version "2.15.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.15.2.tgz#1bfdedf6a6e345f322fe956d5df5bd08a8ce84dc" + +mqtt-connection@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mqtt-connection/-/mqtt-connection-2.1.1.tgz#7b2e985a74e196619430bebd35da162c34c4e56a" + dependencies: + inherits "^2.0.1" + mqtt-packet "^3.0.0" + reduplexer "^1.1.0" + through2 "^0.6.3" + +mqtt-packet@^3.0.0, mqtt-packet@^3.4.7: + version "3.4.8" + resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-3.4.8.tgz#965774aa45952f16392f9accaac5d0bf511fa1a5" + dependencies: + bl "^0.9.1" + inherits "^2.0.1" + +mqtt@^1.7.4: + version "1.14.1" + resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-1.14.1.tgz#7e376987153d01793e946d26d46122ebf0c03554" + dependencies: + commist "^1.0.0" + concat-stream "^1.4.7" + end-of-stream "^1.1.0" + help-me "^1.0.0" + inherits "^2.0.1" + minimist "^1.1.0" + mqtt-connection "^2.0.0" + mqtt-packet "^3.4.7" + pump "^1.0.1" + readable-stream "~1.0.2" + reinterval "^1.0.1" + split2 "^2.0.1" + websocket-stream "^3.0.1" + xtend "^4.0.0" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stream@0.0.7, mute-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +nan@^2.3.0, nan@^2.3.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-emoji@^1.0.4, node-emoji@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.5.1.tgz#fd918e412769bf8c448051238233840b2aff16a1" + dependencies: + string.prototype.codepointat "^0.2.0" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-gyp@^3.2.1, node-gyp@^3.3.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.1.tgz#19561067ff185464aded478212681f47fd578cbc" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-notifier@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" + dependencies: + cli-usage "^0.1.1" + growly "^1.2.0" + lodash.clonedeep "^3.0.0" + minimist "^1.1.1" + semver "^5.1.0" + shellwords "^0.1.0" + which "^1.0.5" + +node-notifier@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +node-pre-gyp@^0.6.29: + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-sass@^3.10.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.1.tgz#7240fbbff2396304b4223527ed3020589c004fc2" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.3.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "^2.61.0" + sass-graph "^2.1.1" + +"nopt@2 || 3", nopt@3.0.x, nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize.css@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-4.1.1.tgz#4f0b1d5a235383252b04d8566b866cc5fcad9f0c" + +npm-run-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" + dependencies: + path-key "^1.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +object-keys@^1.0.10, object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object-path@^0.11.2: + version "0.11.4" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" + +object.assign@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + +object.entries@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.values@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +open@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" + +optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optimize-css-assets-webpack-plugin@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-1.3.1.tgz#e2f198cdf63fe92ac2e3e321f1ade8faf1b59179" + dependencies: + cssnano "^3.4.0" + underscore "^1.8.3" + webpack-sources "^0.1.0" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + dependencies: + readable-stream "^2.0.1" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@0, osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-key@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + dependencies: + postcss "^5.0.4" + +postcss-modules-local-by-default@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-scope@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-values@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + dependencies: + icss-replace-symbols "^1.0.2" + postcss "^5.0.14" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" + dependencies: + ansi-styles "^3.0.0" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@~15.5.7: + version "15.5.9" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + +proper-lockfile@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-2.0.1.tgz#159fb06193d32003f4b3691dd2ec1a634aa80d1d" + dependencies: + graceful-fs "^4.1.2" + retry "^0.10.0" + +proxy-addr@~1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.3.0" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +pump@^1.0.0, pump@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + dependencies: + duplexify "^3.1.2" + inherits "^2.0.1" + pump "^1.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +pure-render-decorator@1.2.1, pure-render-decorator@^1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pure-render-decorator/-/pure-render-decorator-1.2.1.tgz#568870eeca17a1cee536b4fe94a3477fcd31eeb9" + dependencies: + fbjs "^0.8.0" + +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + +qs@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.4.2.tgz#3cac4c861e371a8c9c4770ac23cda8de639b8e5f" + +qs@6.4.0, "qs@>= 0.4.0", qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +query-string@^4.1.0, query-string@^4.2.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-addons-css-transition-group@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/react-addons-css-transition-group/-/react-addons-css-transition-group-15.6.0.tgz#69887cf6e4874d25cd66e22a699e29f0d648aba0" + dependencies: + react-transition-group "^1.2.0" + +react-addons-test-utils@^15.5.1: + version "15.5.1" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.5.1.tgz#e0d258cda2a122ad0dff69f838260d0c3958f5f7" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.0" + +react-color@^2.11.1: + version "2.11.7" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.11.7.tgz#746465b75feda63c2567607dfbcb276fc954a5b7" + dependencies: + lodash "^4.0.1" + material-colors "^1.2.1" + prop-types "^15.5.4" + reactcss "^1.2.0" + tinycolor2 "^1.1.2" + +react-dom@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "~15.5.7" + +react-redux@^4.4.1: + version "4.4.8" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.8.tgz#e7bc1dd100e8b64e96ac8212db113239b9e2e08f" + dependencies: + create-react-class "^15.5.1" + hoist-non-react-statics "^1.0.3" + invariant "^2.0.0" + lodash "^4.2.0" + loose-envify "^1.1.0" + prop-types "^15.5.4" + +react-router@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.5.tgz#c3b7873758045a8bbc9562aef4ff4bc8cce7c136" + dependencies: + create-react-class "^15.5.1" + history "^3.0.0" + hoist-non-react-statics "^1.2.0" + invariant "^2.2.1" + loose-envify "^1.2.0" + prop-types "^15.5.6" + warning "^3.0.0" + +react-test-renderer@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.5.4.tgz#d4ebb23f613d685ea8f5390109c2d20fbf7c83bc" + dependencies: + fbjs "^0.8.9" + object-assign "^4.1.0" + +react-transition-group@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.0.tgz#b51fc921b0c3835a7ef7c571c79fc82c73e9204f" + dependencies: + chain-function "^1.0.0" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.6" + warning "^3.0.0" + +react@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.7" + +reactcss@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.2.tgz#41b0ef43e01d54880357c34b11ac1531209350ef" + dependencies: + lodash "^4.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + +"readable-stream@> 1.0.0 < 3.0.0", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: + version "2.2.9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2, readable-stream@~1.0.26, readable-stream@~1.0.26-2: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redeyed@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" + dependencies: + esprima "~3.0.0" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +reduplexer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reduplexer/-/reduplexer-1.1.0.tgz#7dfed18a679e749c1d7ad36de01acb515f08e140" + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.26-2" + +redux-immutable-state-invariant@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/redux-immutable-state-invariant/-/redux-immutable-state-invariant-1.2.4.tgz#e8bc4a37e22815375d5a04f8ecbb807054ea8bbb" + dependencies: + invariant "^2.1.0" + json-stringify-safe "^5.0.1" + +redux-thunk@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" + +redux@^3.3.1, redux@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.2" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +registry-auth-token@^3.0.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +reinterval@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" + +remap-istanbul@^0.9.5: + version "0.9.5" + resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.9.5.tgz#a18617b1f31eec5a7dbee77538298b775606aaa8" + dependencies: + amdefine "^1.0.0" + gulp-util "3.0.7" + istanbul "0.4.5" + minimatch "^3.0.3" + source-map ">=0.5.6" + through2 "2.0.1" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +request-capture-har@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/request-capture-har/-/request-capture-har-1.2.2.tgz#cd692cfb2cc744fd84a3358aac6ee51528cf720d" + +request@2, request@^2.79.0, request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@2.79.0, request@^2.61.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +requires-port@1.0.x, requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve@1.1.7, resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.0, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + +roadrunner@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/roadrunner/-/roadrunner-1.1.0.tgz#1180a30d64e1970d8f55dd8cb0da8ffccecad71e" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sane@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sass-graph@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.1" + yargs "^6.6.0" + +sass-loader@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.1.1.tgz#79ef9468cf0bf646c29529e1f2cba6bd6e51c7bc" + dependencies: + async "^2.0.1" + loader-utils "^0.2.15" + object-assign "^4.1.0" + +sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +scss-tokenizer@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz#07c0cc577bb7ab4d08fd900185adbf4bc844141d" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" + dependencies: + debug "2.6.1" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "0.7.2" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-index@^1.7.2: + version "1.8.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + dependencies: + accepts "~1.3.3" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.5.0" + mime-types "~2.1.11" + parseurl "~1.3.1" + +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sha.js@^2.3.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shelljs@>=0.5.x: + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sockjs-client@^1.0.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@^0.3.15: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^0.1.4, source-list-map@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-list-map@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + +source-map-support@^0.4.2, source-map-support@^0.4.4: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@>=0.5.6, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split2@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.1.1.tgz#7a1f551e176a90ecd3345f7246a0cfe175ef4fd0" + dependencies: + through2 "^2.0.2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-trace@0.0.x: + version "0.0.9" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-cache@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" + +stream-consume@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + +stream-http@^2.3.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + +string.prototype.codepointat@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" + +string_decoder@^0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + dependencies: + buffer-shims "~1.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@^0.13.0: + version "0.13.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" + dependencies: + loader-utils "^1.0.2" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.1.2, supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +symbol-observable@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +tapable@^0.2.5, tapable@~0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" + +tar-fs@^1.15.1: + version "1.15.2" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.15.2.tgz#761f5b32932c7b39461a60d537faea0d8084830c" + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar-stream@^1.1.2, tar-stream@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.2.tgz#fbc6c6e83c1a19d4cb48c7d96171fc248effc7bf" + dependencies: + bl "^1.0.0" + end-of-stream "^1.0.0" + readable-stream "^2.0.0" + xtend "^4.0.0" + +tar@^2.0.0, tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +term-size@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" + dependencies: + execa "^0.4.0" + +test-exclude@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +tether@^1.4: + version "1.4.0" + resolved "https://registry.yarnpkg.com/tether/-/tether-1.4.0.tgz#0f9fa171f75bf58485d8149e94799d7ae74d1c1a" + +throat@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" + +through2-filter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@2.0.1, through2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" + dependencies: + readable-stream "~2.0.0" + xtend "~4.0.0" + +through2@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +time-stamp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + dependencies: + setimmediate "^1.0.4" + +tinycolor2@^1.1.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + +tmp@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-absolute-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.1.tgz#70c375805b9e3105e899ee8dbdd6a9aa108f407b" + dependencies: + extend-shallow "^2.0.1" + is-absolute "^0.2.5" + is-negated-glob "^1.0.0" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +ts-jest@^19.0.9: + version "19.0.14" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-19.0.14.tgz#88674b956e048f61b0ab28d421bfdabbb641be5c" + dependencies: + babel-jest "^19.0.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + fs-extra "^2.1.2" + glob-all "^3.1.0" + istanbul-lib-instrument "^1.2.0" + jest-config "^19.0.0" + jest-util "^19.0.0" + lodash.assign "^4.2.0" + lodash.includes "^4.3.0" + lodash.partition "^4.6.0" + lodash.pickby "^4.6.0" + remap-istanbul "^0.9.5" + source-map-support "^0.4.4" + tsconfig "^6.0.0" + yargs "^7.0.2" + +ts-loader@^1.0.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-1.3.3.tgz#30c6203e1e66b841a88701ed8858f1725d94b026" + dependencies: + colors "^1.0.3" + enhanced-resolve "^3.0.0" + loader-utils "^0.2.6" + object-assign "^4.1.0" + semver "^5.0.1" + +tsconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" + dependencies: + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.5.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.0.tgz#6e8366695f72961252b35167b0dd4fbeeafba491" + +tslint@4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" + dependencies: + babel-code-frame "^6.20.0" + colors "^1.1.2" + diff "^3.0.1" + findup-sync "~0.3.0" + glob "^7.1.1" + optimist "~0.6.0" + resolve "^1.1.7" + tsutils "^1.1.0" + update-notifier "^2.0.0" + +tsutils@^1.1.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.8.0.tgz#bf8118ed8e80cd5c9fc7d75728c7963d44ed2f52" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.14: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +typescript@2.3, typescript@^2.0.9, typescript@^2.1.5, typescript@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.4.tgz#3d38321828231e434f287514959c37a82b629f42" + +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + +uc.micro@^1.0.1, uc.micro@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" + +uglify-js@^2.6, uglify-js@^2.6.4, uglify-js@^2.8.5: + version "2.8.23" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.23.tgz#8230dd9783371232d62a7821e2cf9a817270a8a0" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +underscore@1.7.x: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +underscore@>=1.8.x, underscore@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unique-stream@^2.0.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" + dependencies: + json-stable-stringify "^1.0.0" + through2-filter "^2.0.0" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +update-notifier@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" + dependencies: + boxen "^1.0.0" + chalk "^1.0.0" + configstore "^3.0.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + lazy-req "^2.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +url-loader@^0.5.7: + version "0.5.8" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5" + dependencies: + loader-utils "^1.0.2" + mime "1.3.x" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" + dependencies: + querystringify "~1.0.0" + requires-port "1.0.x" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.2, uuid@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +v8-compile-cache@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.0.tgz#1dc2a340fb8e5f800a32bcdbfb8c23cd747021b9" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + +watchpack@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" + dependencies: + async "^2.1.2" + chokidar "^1.4.3" + graceful-fs "^4.1.2" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +webpack-core@^0.6.8: + version "0.6.9" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" + dependencies: + source-list-map "~0.1.7" + source-map "~0.4.1" + +webpack-dev-middleware@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1" + dependencies: + memory-fs "~0.4.1" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-dev-server@^1.14.1: + version "1.16.5" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz#0cbd5f2d2ac8d4e593aacd5c9702e7bbd5e59892" + dependencies: + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + express "^4.13.3" + http-proxy-middleware "~0.17.1" + open "0.0.5" + optimist "~0.6.1" + serve-index "^1.7.2" + sockjs "^0.3.15" + sockjs-client "^1.0.3" + stream-cache "~0.0.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.10.2" + +webpack-notifier@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.5.0.tgz#c010007d448cebc34defc99ecf288fa5e8c6baf6" + dependencies: + node-notifier "^4.1.0" + object-assign "^4.1.0" + strip-ansi "^3.0.1" + +webpack-sources@^0.1.0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750" + dependencies: + source-list-map "~0.1.7" + source-map "~0.5.3" + +webpack-sources@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + +webpack-uglify-js-plugin@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/webpack-uglify-js-plugin/-/webpack-uglify-js-plugin-1.1.9.tgz#ecd4c27843a4ac17ee318f45229cdf1d2fb5e103" + dependencies: + chalk "^1.1.3" + uglify-js "^2.6.4" + webpack-core "^0.6.8" + +webpack@^2.2.0-rc.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.5.1.tgz#61742f0cf8af555b87460a9cd8bba2f1e3ee2fce" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^4.7.0" + ajv-keywords "^1.1.1" + async "^2.1.2" + enhanced-resolve "^3.0.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^0.2.16" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^3.1.0" + tapable "~0.2.5" + uglify-js "^2.8.5" + watchpack "^1.3.1" + webpack-sources "^0.2.3" + yargs "^6.0.0" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +websocket-stream@^3.0.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-3.3.3.tgz#361da5404a337e60cfbc29b4a46368762679df0b" + dependencies: + duplexify "^3.2.0" + inherits "^2.0.1" + through2 "^2.0.0" + ws "^1.0.1" + xtend "^4.0.0" + +weinre@^2.0.0-pre-I0Z7U9OV: + version "2.0.0-pre-I0Z7U9OV" + resolved "https://registry.yarnpkg.com/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz#fef8aa223921f7b40bbbbd4c3ed4302f6fd0a813" + dependencies: + express "2.5.x" + nopt "3.0.x" + underscore "1.7.x" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@1, which@^1.0.5, which@^1.1.1, which@^1.2.12, which@^1.2.8, which@^1.2.9: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +widest-line@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +winston@>=1.0.x: + version "2.3.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + stack-trace "0.0.x" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.0.0.tgz#bb99a5440d0d31dd860a68da392bffeef66251a1" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +ws@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xml2js@~0.4.x: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + +xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs@^6.0.0, yargs@^6.3.0, yargs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + dependencies: + minimist "^0.1.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yarn@^0.23.4: + version "0.23.4" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-0.23.4.tgz#f428c75ca27ad4910bc822174f586187c790c5db" + dependencies: + babel-runtime "^6.0.0" + bytes "^2.4.0" + camelcase "^4.0.0" + chalk "^1.1.1" + cmd-shim "^2.0.1" + commander "^2.9.0" + death "^1.0.0" + debug "^2.2.0" + detect-indent "^5.0.0" + ini "^1.3.4" + inquirer "^3.0.1" + invariant "^2.2.0" + is-builtin-module "^1.0.0" + is-ci "^1.0.10" + leven "^2.0.0" + loud-rejection "^1.2.0" + minimatch "^3.0.3" + mkdirp "^0.5.1" + node-emoji "^1.0.4" + node-gyp "^3.2.1" + object-path "^0.11.2" + proper-lockfile "^2.0.0" + read "^1.0.7" + request "^2.81.0" + request-capture-har "^1.2.2" + rimraf "^2.5.0" + roadrunner "^1.1.0" + semver "^5.1.0" + strip-bom "^3.0.0" + tar-fs "^1.15.1" + tar-stream "^1.5.2" + v8-compile-cache "^1.1.0" + validate-npm-package-license "^3.0.1"

EtfHUS=P!;3pE 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 FHVCGch^oq(<(*AWq#0UhFeecgUi#iV5 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�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⪙R!~{%CP`O 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

+Sg4CuK>DG|JX9-It+YVU zR%BtCQ3f`EII%L@fT03!JpgdYB*7H9rU1d7t{%oV49Bu;T^ZEnDHSDOl`QOLdTAN2 zN{`~GT$LW1dfqB9nZpWR>B-w`u+x7q|1!a4VQ-?Hzcjbtz;w->p;X#>CKxYLG8UIH z!qn{Wm^^fl6vHsQm6KwsTW0Xk|&t=1_qL1an%}gtVPB!q~IO3LGalc(svE!JMEgZ2H#HGC9qur+a+)_ zmB6iKCVwAlCQC3CR#!HV8GBD>`&a+P|Mp|Q|HNINgz>VBv;{k$?R4D|_~@?x0k#P& z#_e=NmcUA(X#e)fC$0Owfw%G}M!NK4i@4T)_lZ~R(fbeE_n&#gF*)0~Z-=`hR$hjM zLXymjfXhl2AnWxd8#oGk2=JEFZv3o5JDrdu=?Yh z{kd~6ym0Lu+J`|Boy!J5k^+lK^58$d@~Zv%op*4~x3G!p7MZ~D7*ZJxT)-8~uagEd z18k74PpwQ5>~RK$QBQ(RFh6)?-+mkI>ayo&F1nvP9dznh9uw>iT)lz2xa8yh0tC&v zI)LcrH$VH|=iWH?j)M^a03c#Ip)D(2t)u&n18>wfDntixUwM8jp90aZyaCPDO9kqV z1Aq;M)*Sfkf#K8+vZ)T@k_|xVSm}P`DuM#Z0hVEZIXNJH{8ms>v6jSK_pw=%!(eVo zat5H)gU-5_a`Q)16dSJRF{DT64=N|!p9Am#YQ1P{djRyM!S09IOv859@nSIW@;T@( zjZcOSJO^NZPGpbUO6ah)qdTcD%1J11ryk#`+gtNR9*}mOVATOYZg~P+oIYpiOvVzW z9&4l|xgtQIX2s}&O{TK8vwQ^OOv4sS)7DPZ@MuUeUZJUdiuvv^;1V7bgNfZ1lypla z@8-NP9x4s$CU=>>AsQbV!roZb{KEkNaHJ`iTNAXMeLMG3w+UNVzGSJ)KHC7O^Y<=V zeGcG#1P17k+O>y3sW7<#saDp-$d#eQ2f1^ab^usKz|#mGFdn3{a!6wMU}#FF%7-*p zY>jvZYWz1~>OvZ-A0t;8R(aDg!s&<1L6VD*F``~15G-Z5M1A~E&;N!{OQdTT={#pNI-0U6MzZ- zm4$EE%p^gz6Ug+$8DCliaGzYTBpTgaV-o~6U9@6;kv0@@^Myd>(^LHx!{g+45C6(L z&bt-gs7yVKtufHeF!M$Z>5eW8DDWEy#LN1G`k6yQX@PNDOR*9j0Uz7*h&|nY7N)r5 z!vw7=U@z+pPByuiBW~4*9e?vNsy0CEfGISzGmPPJyX&7kfY;oLz5Z{RuUT3&>4zK0 zek`A=+Cux7`FD72=gyG*<@df#eK9w%{zxa0|6q*x903J+QO zq@RGI8_4XGsPhd7IQck+u!6@jhk9)NDKx$Dkh^^0l&z0u2$N8^?kKT=kYMwM2{anS zfK8_#Ab*RD;qr!Pu;q-W$s_V5h4vibS!zh00Kj83@5X>rta=OpazKs033eojmhqrj zw{B#>+zoEAie9he?3oMSx1A%q-Tvls?jnJ*F-|mxtm@5U+{@A@F*?T^Hc3F(k;-lh z)FXC&`Ly-+5iA?SQj+m5JGX*Sq-?8r^>bb$`-1+!}?6N!Qgw zsgs|7Xq(W!K;?Jseg33;Y=8H`mcTZk{&SY^g@rdQ*cf3E_Q4e0HkkgCD*iCd| zd5W)OdxfjX5s6R=(jR96zX90aV0z=)Dou|QWzyf{`m_giHn9R{3G8i8Rgcl3Ff zHJ`44bljjRgX`*nT-07oRP$!irUC*rpu$ifi)%06!wdzHrXkUBWWV7du@bc_{_+g?1-nzA zphprVEVjK!y12H(;cZx*P8P*6$?+m!Qw!BlD3)WDgBtU_POMCD4uNU%PN4oB101;& z6zplcl8aHmT^$QUn6ai!0J1RSiU&|#T&Z(_0V`tC1Io8xm}>DWuZZb$`lVnT_nGa6@@Q*xcj8-t!KyBR)HBZJ%pB!4X%gltXXXBrlc` z7^rQu%!|}d0HaEncIqLpZ8=Q)V~prZcC)!55Gi$<4;GLC0i0PUCWq#T)&|}?RSS;S zZE3b@gClXg3|0t$2~tD5Y*AMY`oqF3?MUp~RXlsi`U z9-|6vlzLoWz=#RZpFTn`M#j)aBMeZH1L&Z2AVs3)y|{!|6lBtusv#P;jh_BB>>Zr`ByW%8#n;B>1$OU`b?VTl2v+f z@uXV=+|j$&2BY*H%2Y{3StTBaf@HTSx(`r^Bh-GQDfF^Uo_I9US(9;}% zo<<1;E3FrTwmY%U-tZnrG6MbVo(P{Y=CHw4()vJIQs=5OCPgD0A9?3|Gf#lk2K5(- zConn}2^fqqE=WL4jKsoR@>5HUH!ZZ>SFLnv-GbCxm_XfLt`|hAs)`g;8Gy0_^1BOf z(Lbu+Zhzb!Ebp@nWSZG_&Q1g`0+1t%gkg3kjN!@EIr&^Ky){EAD z3&5M6gglbu>G*>Fp#Y(?c>gFEus$CjI)bML^}xKeiX2HaN$i5sreVE=XV8TclgPZ# zPGBD&-nGa6{5yYP)kWIOSb{*p1XLs+r9#`DKX=(GP3jC|>d@dWBm>cv<}?)oW`~h7 zOkf0fjIo?y4C56%0o1=kX|EmG&mMt5va2xI%h}V!kXW|E6Svv9vokh%8Ka~ED-Tz>p5hv82duYbTHWDqY!iWF0l?E&X`xnn<3ca zq0JzN#rUvV#bEC#A+Kb%7aQZ5B7nLFt#1tH3Rqll@+4Z{v}~Sw>|-nmbG(9W`l@)2 zDRSo)OHr8pcMjjn{wL1bXTy2tg#=u#0iv?UnZ<()RAfOZp#R zWSyR#cK37i=uy1o7-+ZCFT4acTiY)@8#hk|QcT#N|IqKlNZD?{zld5>6nIGpY^NKu z1fE>DfUhNaV@1>f(_6Sy-f>{uUOaxz0Z#%bhx#&h-|c(ssb}A0^8ter_OAeS2W|@} zlGrjEk&T6-12o%!@(Na}v2%Pih0TJF_+B$9UtM0*p z>;T%%MSi6O-~$WnUBGmehd@WMzgryBWYb$`gEEgHqE@ImJ<@>#eGbIbCBoF3K=qa4 zk2Bn_$^vzxAVy+|HSFnECv9YKm_?Kr$O1fhrd~V2YqjyoqCq}ms}GIhO8}N)=Lr1&Y<$9iUdN1|+^hG1YO|r0=ClHhVgzZ+5TZ@0fOJ^sYJ(k6SM5hY zF{l+gF2(`$(>)DXXE4;;JRG17Xwj1XFn}iXV2%Y?RuEF!M_WLe<_%>`06nZmsPF)6 zcq9N^)d8Fpps-ov8Mdw$jpEBNMc+sRP=)gn zD9q~;vNM2ai%7RzSX!|V(i+^9#gUf?!-Q*M=#$J$i(rr~WMCRF(iN_sTDeYf<*#`ieB#@sc`>HizOBV_FCeH#HId1h7_Trun7*`8mFivG` zb#2}zXJ4_ddY@GYwA}&_jZwc|Pt>v)QsAw_Twet|C(Z^g@M5ZZX#eeo-*R&sHqehr zr{RNXowuI80e-JwmgqJk7uE#qix`12kuC5LXxU3!^3gt{7>ZS&O^unzvuNI{z{C!w z8?Z3}>+yEbT;yl$%Os;#LiZp|aBpujZbSVk<|4mM%~dU04%#|e#c||Ae6;@3OA56})~sl4Abj=!*U(#{h2 z?(W|G_VDm#{GvEa=ZWY9^9`EI%-QO%>-lx_QIDXn^nYR{)D!k#@IKoap0=lpL>Zy1 z)`?;8-0DetD83gRddd_wD`qxIjT~qw(^NuNlR-}gxKPB0v_!}rjeO)CMf&9Iajsmz zDBo+vX9gzB5qZ?Xb3rXK>E|zi(QY;FCUpQ4fX^sK@33Ol^dSpD~bt4PQhC5GkJJ zfMtdgfFpx;`<{LD-Cm3wSqvaKi_r!>ZMCO7{dm9zyHdnM*swffdzCfT1&nQL%tiOL zk_5Qjy8FoRP_Mn(_k94y(ZCH@Gee(Pqy$Ep<80AIA+4c1Raca`G28+GH_gV{V2>8N~o>w6G zoW@gh@6&h}U6$ur(LzX0)!Ebd=;K|mvwLV~FPD&XA`e=2RPh+|$QyMF0_s7G$i2Z4 zD+dbJg$&j5+Kf#v&RW-MFEX5p@4`HY6pR;Se4TN%#rQSveTsU*Ac9wxVNCMIF?cbz zRq&i@K;&-`7omg{OxI8kYi+!Gv>s#)c(bResVRH$#TP9>FlmA40&))?Jm_BE?DzIw z@-L8CK=Sj?Kks75Xn+028*eyc!`*k^{a#LuQ4UYiwKW%)P_H{lK>LXkC+zg;(+6%Qikf{tp7wb?&95 zrMFoA?|bIAPxy0}z&4=%a~9d|fjfTAUu+-#ewIK0rlLn+$acEnO5lm&lx2Ign`Ds$ zD1=Y8-M)7R?zAw-VK(gAF<@uT%PsbU?_I-|NW+T7urg0zKLsg0c5c#cCpc*a z7x#Hd60jKEM*zPIE1PXX0Be)YuNF-maMOBycKq}u8y-kImV1cBeEN!~z>nqY$_H=G ziP@$+(Oh}%fidp|gc0*zI`Co}7P4=*zjr&&Px?HC^vK5(WA=l>WxKF^CFt~)iCLwM z4~6Ga=Xvv;z;x_nHUvW{?FZzBUFi;`&Ky8aCl$bm9u&_sI$VW~AbV)-Aj`tBI-Ya1 z(KC1KbAjnx&S{(js_AhO)%EsC& z1~Rv-b`u0_Z(<-q+S$(0X2X@19RN^Ga!w!TFLNwn+PJs#%;vvcA-@W`<_vRex&)#} zGv*f?J;oy#r7d%Q84+q_Ky&~ecI|o=knR9+*f?&$bc))A;tq&Y0ih>%4?o(vE+ivVgziX z2`h((1Z?3lny-tcdGk**4-I%N3gfg<2mEPA(b_IpALHkE@Dwy>B2562GVhk*1P=vjC<&lmK}R}=M2tLV zzy|@_o3uydT^M7U6_0J;F;PZ;KN$660Fp;V&2I01)cl1g=bo`O-+7DY#%Vfd3GA1G zg^jla!7>M%d#TZP_TL+|iVrmJwG)98NVQ-f!rP)oBUY1E(i~k?0AKY9h892lnWk-P zwY+_A`UT{1DmIZEw1Zs}HflR;I&_BdKZZ;JhB^KzE{JsPu~q=W&sh7?GxqB{AF@a~ zU{400Lc<d!NT?W3FI7wRZl?6Xe7-TN85l{ za4Vz@?)9n0Ym}Max_rI1r$n3p0Cn$b-R5Azc4uUy^kS!_OaQaH;$4=)kWocWtnS7~ z)(e29@;Y*Hur`qOKq6_^(O&92VQY)(M=)!VK$^dJ3Zp8XMKWYX=|ju|MAEeA2q5cA zb?b?ZTAN_CUEO^ICO%{X1eLB3haenAil~BQm&*eIGNXNX5@DE$d2Ag6PZI-L4CZ@~ zHd#PS=qzLU5HUbpo7sYuxRRc?snbXzuHpGn!{~*~Um1|Pm0&DF0*ffk%;9*eF=xjZ zuUg1ZjSq}bJ|&x3x?ugyK8#(k*YOw|86B|2vs0{JI3= zoUjzuSZ&)JGJ|>gX@GJMpo3q)5H7=fa=70L0KgGQ5;3|>4!!giG9zICwT;<}gJ)F$V?$qUuMJR! zi|tDou~sbu!6b~KF~}pIL;ev@oq>G>C1pMehw#FY?B2~W75&8e6a#sDeB3_#;SW1z za_3+Hz5-UY-^gQh8yp<8{rmSjfK{yHA{s;bTx(=~F3@$3eM$jQa~ zhiCD1`XvF(lK|YrDtbSYfaHr8FFJPkr#|&5w-0>nwb$(Y`ST_~UEj+Xp|TL8TV;@B zy``jbICt)xW1jEXv&VXSMf&hKrnbOx?Gwd%*YB=P+Ha~pKJ%H+I0pMmFTG@sJ@%OW z-tYaM`<(#lvuDq`vKNbd*REaeI(6Ez&b>m+Eiu}6@80bg;bOu|Ze?+C(bbhc9~i*% zl>Bs(&Z+MOpzFI0`p#ef^b2wbs9I;esnmm5tc&%Exy4U`k*Uo%&$Ty?xg05_sQB z0BnH;=-UI<`+kA#6aIrs;8u31;`}Go3!OO*z8^=@T+gmV;{Nq zpba$B_R7>{T5a%R>Jj11X56XT9m+sop8I*Yb63sHfY0^TL}qW8RYNes;*k~@RQ zCPdi~b=c|G%iGEMIT(kV`Cgf2@krhR(n{xdem3r^HyKC#bKtT-X4p+)ZMOt8 zH(`5ojKFj;-n|5{mGp~pi^v0i0jmTq^Syg8&NKx=v*@go$CH4b*&#omNSMuY-DcO; zVNo@#uUiZ(G3MBOW3chD!FC${G(bOXT0p13vj(U5Ei76X z2BU)FN!}<3;Np+qmL5qFc(9L6dzaHy_XeVFmU93)n|=>~QVReUB%X5O8DOyO?o~{5 z0s7n-i)S}p>RIK)b!F6qv<+`Nm+~JPCw4?|!_t6$tp-3KQU{6n5IXDqwo$$WXpYxJp86&* zpT-}tZd>c>Dn6T8m`9GFN?^rafI>8x2@n@RwkVGgr-J@>3g9n^|W1DZ6ott^ppYQHD;*;QIurC;z^%< zD*X{V96az=cWD5SU)Y!@XdivCNFQac@*pi%g%#^0OR@yNWKNVEjC8?$^0q?n*^6$x zPF!tvTd_i%33+%SiT3NGAAalHTlvKj%a&>~Yfuah8s=I6*b?rNJeNE#s*H&<7)rP9b z`2=jN53f5qZ-I6b!3dH9q?e&N#JVcXJlDkI$-f2IxIfnRxW~Ed_sqMPq0h+p%$&qr z=WQYbQXX#p}x?YL*Kj#tev6mF@7#1%~gQxlAu#LV>Wa3 zDjp$Y1RN&_upjw1Ki@?G`^Pfl1W?6mtPPO_!+4su*2P?%2B7c7_~OU-?Wg_*(?{%L zZq|xu#rUgukdemXc%wh`|i7sfW>_d5Pj;YryL_&Am{hL|9uD03IKim_1BrNN)EIY zKzj1zNgEp@&@#ZQ0B3>i4?q0y2UjvR_PL9HY3;&srW<)@vj#~&^uAtC_ne`wb*}<@ zb$O?H^P6_~oE68FBFx-KNoiDC=7U;Pm9brJlrKwe` z5@bqXi0U>3D@`DJPz*H|e<2J(x&?Vk%%5Je-b20DobAWoO7DLHgV7he4mmJgM`YL} z=y59~;Yw*hr%Y?jf!SEgTo6($71Td<&)DFVQGqt$LAnA|k9q|}#6!W;0-OSPQmr}= zLsBsEr54qcdJ~(yEjBxnF9LfVur8SwF}-!1q+mFQ(-2oT7C<7eCa$vy-qXivGXj(q zzhQ#_f>qd!O$;e*+SppCYE#2OG;eXoXAf9}eYl7*MIIRm7Rc-~T<|i11T+)Q$z|0* zXs>?QZ+cxtceg?th)Zh}Anq@a-}rT;U-cu)fC#eca@+8YMY@82T6^-G|gLI3`zp9v9FbPyI0e0rmJ+D zH^%t40V5iKFj!_h%UKrzlc&*GPt9V`-H#MjQM%7u7v1Pfb5np%Xf}ttAT?KQgKP9K zugc!h8$D#}p4Y7>6DGJKFn<&f9od3xeg(F6j`ou@UonQ3Fw8C5M~{tA$2V^!j!GJL=#bT@6!fUn(f+4J>CK-Kz+23=_wHSx5*r#D)#}- z6&UX&7r4$i?#0m5!YI<4L|O}wRK}H%JU^HZ+O&zfBSBzjY9a%Yp0M4A*DSl_wO(YE zLI9;38>eYMU9hMDFUI<8a%Bpy0V*2#uPW!LNYGGmZU0{9~Z#W?E+aM@}} z`?L~X8+CN(D>6K5%4O}ANh1w{F{{YhAXM$cc*LC}pBRCe9LE4%r97)XM~n-U{U7)Kt0|XLA!bF$=g)q4I4`j*s0|UtYy%=r>yZS0=&cn7|EYR zn0XL@w9cGX!gIu}72V3@<}NyEbPFuiLm=^2zxq}CgFpBK#*n51$OY(1`&z)N0Nh{u zwO?~11Fzx{0oo(h0f5|}Efl7EQi_D?O%+Jd!a{{-)wr|GP87Un|+wV(R4 zpZ5Umsg4{WXglTb_~VZ=U$^Y`+i$n~@4w%%(eTpjuB`r&|T+}0mFG={*;W#$f0r-SlwaG3+&c4bbf*0l7ms*=yT;s<*vGv zr+|Rs}cZ2?~IOacNt1a}nZs$FGE3r~`O z>otP4bV{cpZz|Kpc`)BY9D3Upb787|FBxnD}3JJKC>n(2}w@S#!c^vthZN}E!5 zPM&qWXdk-Urv;G1y4(u`f(`UnvnL$LRf6Stbz00{?1}(IfVyPL zo%^xyoc%_52X6K^*O04?Q5va=PP(tsZR?Smtq@cy_5>`TN03*cj2n0iNY@_fPUlef ztn!j9&-D^}5cVN$``AZsxB11aO`&H#y9m4G3fuiKazF#UY5V>UU$Y7>rcpLOG0IvJ z6`MdhU?RZl^^$-U0jO7l>dQIYykRYE0KPV0A?}5FcJ>rOg820l}>vL zQHNU82vqMT5N_9amlbKdB{p-N^yS`r+{+V{75jS_=}Q0U&}~lR7;zBy{+9YfcM1Z^ z_IR>vp4g2Ncn=E{ZA1M*Z9#zq851-psOzb&*a%C$Ws``>hk#NZ`jAKNr>bKC#(dV& z0v`a`qX48Zx7~LF=5-wP>U7m%ri&rShwk(=P{twE1MP;(wAe^%3@WpmF9N1l0A^a~ zleYk0>YQUXSw`w4=Hy$-Fi4kjEJ`_lCKa(R0CJs5;Ir<)0odFIxCnio@dqPJ7&cuV zV_%VldX3*_x-)DnTlO*xk%yW{JHXUS!d8s*j#-#TDAA3vN$fWA>ttPMTkd`V0?4qB zj?#8PR{_{nPJE}bX^CMDXy_HAmIXPmxii{17CLt>t$s;`sILe_RbLQ@&IitzP-DDO z;7e!xWRu*~HThbAyz&zQL`vt**U*hXv4ag;M@)T**biyiNf-%(RASIp z*3jIiep-#Jb%iGE(CBZXRh+UeWG2>&=dEY;QA=l=HjZw(a;m!gY(cXD4qk|7H_Kg>(?BG2LoVRJ{eW^5QJ-EUj3Xj?yfx~uj;Fzu9 zA>e@(Esv}yY}Zf4KY;<`?X~K~{G5I5(o?W9G2C%p^`j>JxtLqA<~kBqppIVRHuwSW zg0Uow&K`?m014sc5DIVDQXxh)61~M zXM^K=EVp#RUis!Z`}BWyl(oUKEiH>_PW+g2C(yS~nKuIwWSt=M7+0%|=|}E+z?Lcm z*ktY~vo7!{peB8`jm%RTCiTKJdeVbEHa8jB-{p8@l@7eSle~O_Shf*fXG+s5KXbPjlB0zfER#q4B3c;Y@L0W|l z;m1l6jkPR}CVIZyg18~jJ7+U*RP4-R(GGo-`5$n+Wpj4oO(b5B)SB4Y3p?Fxgcud2 zRKsSD0qYLZkI>tXpn+e((6Y9HRy*b2!jRS;CQ$V0hLy1^b{*)qJBRk72aX3pb((kw z7)S9Y*l2HHWXHQl>kjrV1F4q1#+ZBwhP#h_PGKEmIpaH2YE70_V?8S8*%E8u6zhhu z&~A(3byPF2 z5j!^b7=~nIneb2;Il#(=r;SU|QuWHulew1e~kPWz-OWE@>4dt(jGS`doGP$AA3CZ+$K=0|D?# zx~9N<$?@p5&Zm5Bl2ceau#OhXePUw5CPp zuXBljqt7~qm8*ZJ*J9<1y)LG{lFlWM2Ql8~=jZJY|L_l8K2+xKb`JN$?LY6S1a9&n z>pk83_K$DE5(xR&pxkN)Jg6$z2Tz@y6SpJ8(08P zc5=YuO!un{z+d|K}RL&^5)rDd*k%1Gl=Lg0p_ZA$@*w9rFN{k79c97ddDk4 zcyJOqnHm9A>$v{@3&3>01BbbnNS}Lju6wIKtBlexL_-AU!Y`gxXWTq2I-RJ9z;l4! z%|xH(MVn0mh=_SAe2xb6rcnz(Qpd3&YhC#sN+*ETCfM8(BBj>=C#qWy8?iR$Xv1>y zh^b9u5P-~xL#O2k>QbLMj0`q_rpCoV*$)d-Io`@P4}c>RZMsW6bJaI?YCjIf<@3?0d@kE z0p-+YJX0W10g3utjC6tMYS&FF#%(s%Zwfm%Mk5CW}5`ynTB7 z3%0VnV8`ZvWRS}3Q}=z|N{KA(riL_0!gllyQAd=0(+30hqV-K5uqmWRlKm|}2K3VT zt_v-0DxUcZ_EQP(7mR@!K*Hiik`3K3fKb*JmI3S=hb+8-i#_!%!_`(!YQv+gT{djv z_Cok6d%1oZi8a77*SFD?Cy;L{kg?Jln_M4#0~r;M^o&SMAN&EF01)yK^e_|zm0McD zU^>BO88$MYd|P_uuqZ28)*nc7oP24`1`nXK&3QruRowKlVtApS?$7?3oeqDU{(}jX z@1uw`Kh=EMVlCp5cm>3_-JDdXO@PKyr(OVa#zokgg?Z4r5c6RSW;z}Z;W$!wu|A6- zV-oRK9Y}C`4p|8;B^XZ{=tKW^xBo6!pFYs_3D^!7t96FHfC+60PfmedOSM_QdHI@Z7*a$~;oY67sd5xgHMyfvNHYnO%CBIuBVE-R1_~ zOxfkj76<%ZZ7tj7C78xApa*vVsxRbh9WRj@%;f>RhpNmmjPmHK$L!phla|^G3$ik6 z%Y|XPV{|7mf~t04ViZG;mjH~!+JT{d&+a|;?D^*a3RBD<)Quk|WO)rXb=!_acG_N8 zrUB-ht(-h(=J3+kYcp$aSc!HUV1F=k?hNrBHc)Kz*mRk(t&WaxunSo%#RiF4IqS9B zYQfH(T(*br!CPkrxi!Yg;z_#5V8Hr!&!XWSFv8^E?aG)*dFKJZ>&Qwjb>mesUbW0^ zE$a;s3x~cJLT|r_1doV0?aPyPdV;kEOG6J>cM!>}Vx(*%!#nNN;yH_8(25X?>FnHd zjLpo`;EHjG9Q}BizK&rs6U3iM@i<~m z-=eA9&LfkP1>7~}HP&A|_YxbVYj3xC7T9;OwplL~VV&b`Kp(19@V;q%(|%*$KeKsQ zx5t;Cw6!U-2k(0n!!kw4qNB~Yl@1S3DXhaVIB!bJ-Mj@T7WvG~j00N5c-Edmz_`F+ zCB4@}NuaHO)L&$37vHef+GETwSN2Ulyd`)1OE+G=-}w^gE$~+oFM3FOTtNCazxhp* zrn<`O6QB5m1GH5}0^sL&Eu_@tuJH_+E->?!!+u%Sr*Dy zvy!EqEpSqjEkQPc@iZ)QG!4f_dI3}SIaa62tjtF9cmI<|ZGI_hFTFD9Sn3M2=2++g ze*k)Pu1&y=xgNk;>~(>k`dpgoSEqP}1q|#WKj2ubKk6o$$8qz9facEiCo8X_5CLF^ zTk6n}0a%Bd0AC&bR4^>`RNFR5K$uT|@=p8yizlu=wFA|<(+LO2FQKoj0ISke)Ctf^BTYwdU+jtfx zn=^!PZfU5;VZ&Eg{K*(1Mzt9D6}cH_B9`n+*!l`?+(J5UwX|8}?|Ro^z~v-5nf?ey zs4zQU^uZYrs1t$USYYHSBA}Q$a}0ApCTfy?BT$F}9_PF63DfFUls(fPq51VSdKqyNPv;Zq5eIi_SIRG>EjA*>wULHfu-& z0J;})LGv>f)c`V!)OQuOnv8(G3BYgKk-#uXLFrKioDQ)GEE2$Wy->nkJZVFHNhfdB z;CF#4nxnXl@63hl0J0!a3~X>>F$4gZ1K_u-u$ck*yj-`fdjimJh^f!ByKn94#adSz zL>HQzawiO6&fDk8@(tN4S6;ebLFJOrVeHXAd5@?cc(_NkRF$V=sq;>+wLqu3+~Ql; z;6oL!8@B}7`(VZglqV-ubPKk1%B+(zzClY76Ce;PG459^of@KvqTh``m^^dBfg}M6 z#bn*E+6CgBiL98gzV$>pIL0bu4vVPd9v+MJg3HQ<7Y5laJHVjQqbr`x4 z?OH(c?jBEaG)&Zung&X#y_n7@w`;!3uMf>w}kGru${i=yIIbT~vwu1f#D?O+H>ukmo zu>s^t@DPCs8)#9FcuUO#pho~?)#nwkwjV=*?o%NBq7`kXvSiO-?0G1%&+ZIQY`MzT z_@#fb1nr$5kP6(IUq=>@e+i5dMS=rgSe>+q%($Jne3mk+!x+YRNI90OCDxY#=J7H* z-J{g!5^_z%tnlr$#hF1lX>Ahrf1b7P>p;-N3aH{SQfXQy){orL2S%|1L< zwqgokG>l;gt}?!PAqaRHtn-LlP-8FUs}Xw$0!m+N*w%8(7&jqSB-415u&!cE%P;2f z(#6|zXqb8^V-)VSOVd*}+_Rgt4{U$24cZCn;pR3rY0MH}tM#emHY7tLkX^wh1+)uf z74uorP?9*2Y{)M(A@^cc`jiZ^Aq@NjUo=m2{|AyKl}#rwt0YPUmJ94v*@)3Ct#AeW z6o4+ET4g7R7=hA~eG#Ky$LSp7o*VZ-FzQm$enF?gz zP9IDO{LG^k+B?5a7LI-}+4$Md`deT8{ErJzHHs{CA>+}?a2Wf z^(XB4m1!4XRN0oKhk*1Ztg*2{0;$2~+`DrKt@OMtAoKD1o0sh6*Csa~$Isi;r6n64 z=?1Kb*%|@5q;ag8?nRHfg#N7Fv^b~0xByI0SL`%XH+cyu2Dw}P9jP!5{*<}SH+w2np!5veXw~|cgLX)#hKJu_& zI@KIvlXY7n>NA1$gl3gMgX&$X<1{zz<6UM@$U$5Fkkod6oTp zM=1ZAEuwWEfJt7%^;)c88A>`yL1HTai!%#Lb{>hIGZz+dgM$fG2AG0nn9G&zsh7@J z2C(x7&%X(i57$%r?xoAic5v4)+QSK(SkYarFoU}Ib7QIm!)n?BU>*{ew|00SG(0@&r+-F7FDYzps7J}UuYHJ8`` zvRPjNY?BLl5-A2rq=>mLt>YXf3}d0K1`6tY}~sfMvd%)^yMfaqDX(Zz@z1W3IH z7uOL0p$GvaQG~Go%q<@QM!mH)KvY1x3cz{^=?6CCZ9pJ_-I9=DC~`xNfPb+o-5WNW zjDBvj#vh^In_xVJAV6IYf$m-m&rQ+VWz3+BZi4B+P~3wvOmnvis;bx8Y&cd6pYf8_ z0r$@fw#-(F4j_S(=B%9e7H;Yy=~p9csHngoy7Gncx(j9~eP$nJDkixXFm;_e9qjJ6 zp7bE`H_R4KW-Whe(Sjow^Ae*3)k`y9P&c&kLJ`0Yj~Pi()d5Sx%PE_hU$MTCG#EXa z>l=%#Z9NVIl#E1QY6L@{B!ZALfMF^2Y#Lw+?FnA50~lk>U60ehG#B1lX*!QI8{>K; zjO-G@Aw#f}>#TL_1UvQue8q_05+znacQOMY6muHC@i1{&=puCtW)1p*9}kcWdt8uh@m^EHOi(wu_*)Jp^Ffib=-HWdP9W666Ki zyu6VVFg^kkIExHSg|g~HQbeopB0*@o0KR2-QcQ~)MwJ|88}KG=_sC9M-eDLoUbLZ+ z0ptcIofle|Hj{`Gm=>Tg!MxSg6}5BcX8}lh_&t(Mc%U=^1)Bil34)TA2|`+LmTd+w z<@Bp3sjsY!^!M0-UHk1jKYH3~1=<^iWG}KLvhnmWmflk%wt+m8SX&5e);jS<*~fek zZKe<@+8Zm++k9@3`hqP9le;0wHjL(hI)QbQjCs7@z<7;af|&*a1AD18VpI(DqxDN4 zI*&nPow-d_!=`Q#B)Zv$tQLVarB=CorewLxct9i>BUppP0e2O^_Cp6G zRb%$zT!a42IKmjw7w@&P?m=Yj>NbdxJmL}ihIS?+JK%c-Ih6hBgBGhZXKOOONmGS2 zwbr&F2qsr255dkY_U1n*uy%O*S*N zV!4+uS#%UxADI403{3%y5gRbsi5SdUk?{`C5&UdyXW|a(;l>@yJlv-rZ=!cg9eEA` zvtlU=c$M6Sq)C<`X`MN9#{KltrArRD{m4f?;>H3=l?ap-;40u#4>7m}!U~XA5>P5o z_x((YIV5(vCwADp{a-)}{{h$M-p^}v&ZWEyC{{2~0mK5Nb$?=>3-HywOTt9osoZp| z0>pKny0*Y= zU0c7Eq|3y_g!4kvz3V>pdx7A(hT4k&e;H@=TeT0}`@;`E?8-uU9~>NXwz6n<`P6t0J=JF8-T$9zSN})5X$z+ zgX{uyY{)So%AI4>X{1pK@+8p~87(;h4*+B8SU|G_nAxOn%Kh*oz-GD|5-5U#N&Lhm zKu*A_G@)-ipaTBQ(ukEU4Y*@8okv>OeCF{=_66oTu;RX?0WSkNIDdI>c5eIR9Zj31#CK?bGijP|cDBUmUwxi#4MT(mOnCB#q|MC&_} z>O)?nn>l5UaZg4K41L6nsL?J07jKq@1N3n0>~7pB>(Zrgve*4rIsd8P5!HRH#$HTQSh9fTrad06gQ- zo2wV>vALIEDKqZCTvtD;10qVJOhMM$l_;9;IRf1B4PzzC6S^hLd9?E-Wq}WZb;;9* z4S0-uIqip-(ahTV#tijdA($foA_@~>59i#Pq*xae{h+tk&V~T8DdPZvAr%uPMnG9< zp35M(R9MDa12Ar65QcgH<4K$ViL1_Vu5oT5HwD{y$;L5Or2)@lpZ@iS-99OfF9brs{Akv`!`2iCB%yIq00~leFwsT_G zo_OJ9`f&!ZFl605!+0AcY>eQ3M;k%uuV1_Z{#3dU!z z`X2HuR10!O@&bVzfwYw`NPlS{#Zv)zXE86ezR`gm2LP?-=tDu~OGwMHofx(I(CdaM zvAO_oP2ZxLjc(4m&tt>Ev|S1?*wU{OJ_6G=qo`wHurF?4q_bprfxt>)QtQ42HtRE$U1zM6Q9_@qtn`~sS$*h3 zA9}0oRL&xYbk3)9s(hu1E+AXy66k(4sI2pdbuNHjp#9bPQ9XS6)1P+N)w%WPA-jL)A?N2R8n23P8Bdz_bP4kPCL+js(t7f$QOVPT73?;~#eh0(~yfemi||C9n;se{f~Hedg^FxaCUV`^71D&zfL1 zS*V-rM=`ukUz~I7zP2>f^*w;NfSzlUHXCOFSs!`mHhccq878>8jShFi5REb+L~Is4 zQ60l690OdFj-Q3xzDLF#vnT-jtHTAtV^HwAFSoT7vSZv`+*~xICB&m%eix&ahS0@E`eF7GF7ZMwO z*r1a0kynBi1U^6s5A`e9G{3TG^q6^Z)^4R@oqsGJs#Z z0Ar#o$~x`LeQ~S*p+BnVv>)(D>szdJ0AD&Q58gYFSar{VFq1q2$)!We4%(0Qv|^U} zaq(`$-qu$F!WkfFD1g4yX&bh6ON?ufV+SMyOfw4b03>I@EHD^6%Dva;?zgVz2{h(} zl2vi5VO*)O;jYuR8jK$;&MPg?CO0vx;ebpG0*VE4F+09SJEgwk+|Py3hOML+ z8`3bcIA@)4B}!n^-ep{wrvm`!ewb?s8ysTsE#|vGX;@uBEqrOYVlw+>bRe&8QP1}v zW4u-tHD1!*%j6M2Uu=FcXXQ>VDHji5xZH9*fP;FtyH|5%BkHAHis>&6c`r=47P2HN zOBy)iBuE=Y>CVmlY3y{2bY+6;>Ae=3xn(zd7D2Z|-9X=hjQ1X3AEu ztmRs(){pE%5Z84tbr7n9&Hy4**D6*5WLw9WczgP=H2`vgFc>R6d8=f)EZ4Pe^R*cV zl8!b8Fg)Q2*dovvLBKN6e%fKx%Ci`c2X`Si#2hC>?8cadc64EU?4s<6=>Ygsr_FZ9 zM$|eil8IAa1mc99zO;Vc#;QlaFg7<~w^|L|*|#5Ql(7AO7as@A4zqcsUxI%|0pvFD z2FRBSND$09K-LE!mR%%R2i8Zx@>J=$xRkFT-bsM_Gj7=TaOMlo(V?-M}!p21-k>*7bpo+n;L#dho^*tB;T z<80N|%d9EdJ(fuAbmPAmyjp+g-&RhE{kPfdtAE41#Jq>WQA%!M#>yICbR0Ps4<22f z4Q87NM#>sMd){ZucppTOV`-N0Eb}VxCEh^D?)Ai32lgSCfo$W{;_H@*`Yf@Quw}+P zx;BOrgG3Xs0%V;!I_MsZVqT0}>y0%6l4h+sy@(j2xTAkpn`G zMv`6DOCP2opde&9CgVi1ZHI;uHcc>7$pXb(oWmsZI&wpgkme>8J>#oEMu=#C?UhF?tHyM$2zi4MFrnsbz4FWy&_ z&xB`~z_S>U0%77j6bT&5S_`AYRQUo@ctPu74<(?mNxTF2*hpT%&}ID8ntUrH0k;B9 zuTBC~lSyRT09UUD$F;xF@tvggSO4FY$LdtaVKRP=VgFQ@uhPon!1@O!4mR()G$oz;g$%?i_dRv&#GGGVgqUy?T@a+u~*ah&5IWL?;??3aI&$!E7uRW+;U7J+S*Zch130r7wva~f>NaI}39%LBW1kH2$=j?Fctiz}ji1Y4?CVeAdG$eO;0MSee?aJPi zjqm7lfVv9YX#lghJNUqE>w%dZBDh!;S51LNV#DkA)2jr31CTAS0ox3MDv*keHY{XG z8eE+;@dzN5#XQXU()|frx(LGw_NO*NaontlS@c%YXR}Ld_S%`Lw?5O02&~i(AKqin zzj+P@Ja;P)UqIk3lvDQ=fKYC=sUO#ggR?%jA zQG2>Jg?eBx$c3J-q*Z?bBZk^qjm3x9w*l%}@;i%pf;ixab&r8X5)J}Yl&0C({SuqwAVB5;q!zADJ7GlKlIh2*fIdY@@VQ_e8Lfnlw^^hM z_{NGx{lMTA5G?=q&L&eR1_9iJdU%j!@JL!kfdbJrb-_mYo~}xLsn0T&up##X)azVc zXM+eak@vW|dto-hg7>p=3Ie(Zq3Z>>A1LDvXpzpdGa&HX0N9p?kAj0b zI{^9D*u;l`YGv+?KB4jfELZUhbXO&)jQp^Ae4!pBC6Kk@cn_}BURcZsodU`t&BJds z)_Db^$!5WxKa| zp8?U@WbUk`DoC&(FEUUbvmO2sOIH*(AO%nda~2SGqdRZaD4O}yUk?E%<>3^n!%PD( zYEXacPUfR%cQlXC&RcfYbJ^xG%(N?OHn2fJyhai|`v}q%=&{4j4V9=Lz9+se^@jE= zMx9(`!9rEQ3D@Sgc3r&N-5ux}xB5vmj+^u=v)F+T3DzQdc zWzL-V>3jQkE4mx{a~bsFaGiH}61I>k7#v_L5r-lfC6Fb+Xo)dbTKJwg@lr5sv;kxS z%oj!KD#Cb`tz|g|z!rx82J6vOs%aN4pCdTpnjJcH$fnj$G4~JH0Ic$mKWgO{}1y63_@hYT6oI|&|hDy*wFX@=VlfnFH_W8 zskLHngxBo0^bmnEQw|W*xVzQI&m8@zoChSW0-`r0=|MkZ>JNf`d%eh^0kAf)e)k~1 zR0jN>Trb(>sl4q#=AdgBnHI`aWu5FpBOQ>a(O$OE_^|!|?7at&rdM{JcmAA1=iEKr zlV^ZI7-V1(wz$|Omt0aya+joJQlv?%EXj72U8S<*P_nIZnRb;eljV{`(Uxo`Eu$nZ zNs*fq78zK~3^1{$r*r;uPJZ6o-Gc!Z3xM1uiRu3DOn3j`3->$Uchh^`^PbJ-MH?HL zLccp>*-Kelg~t-=CnAifq4Tkf1qwtc_8vx~eP>SCX3kzjw>`Ajv_=@mHh`J(JGC<0 ztFff5!mO@uFgB-&PK@DvCb4Xgr$FD# zq{VuDleS8tRpON_!+IoI$Elt^X?~mp&XN6rZdrf+$_3Hqi3ie_!{O0j>>6(mTeUM_ z7mKf1Z!uxfa)2CCN&3YJTn&okBIgWqpZwOU)eb{&iIR97hoGMaLi2Uc7Lgk`hO0>5 z6-os@15oePtYm){>2ix@ya$@@&#T=3SEU51w>m`rGOk!ayV&iDXb_+-0RHU`n!k+m zc8~cNvp^S6|BKnJyI0o&T?@R;0()Tk-p3A17xRN6fK%_`Ub@#}7u{OI0Ox<}(@)y3 z{(qml`SCN)zF~j=Kl!-*@~?c>0X}{fNdnk!7Uo=cJ$1q+N6V6!(ewsv{VhVC44-#hjYz+VF}Hp;>}-Jh_Pi);23 zBwc<8t@Ld)y`}fPR|E(bmBDDYeC$Ja+i*|H{@`mbvZ#Y`0GJy>9^xPtKP1V&K z>^u=~e)wo=!X8YH*>9q8xk~c3ufKfBg~zXKWno?BogTkHh&>0)o}|v+5klzWJGq|S z4;lg`If)qSVm60(ZdhHzDAiK{Lx#njnC^9e$~koJrHQuAMKn#`BowKvZL)H^OQ>-8ohvI0dpq<_%TBS``dJFx}7Ge5uN_ljGu;2hU zd7cIA@bJJukJ&@hBp{N*fIh|tE8GL9BdL`ZK#qHebbPLvQ#nvPc!)@Hm9 z*fPlxUn}20(y7EfB?%cU-IEhf*pqkuq+R*upTMw<+P|%S-6{d1=NOy7;q2AwC2Irh zXKw(s!_>V-(#sR+`)qUw&2;KhB3i0NoAsfSAN1BN)r*5JShmY^IQ;^L?e3AI`|)Ue_PKlTRw|(yc4qxSm{xsK#q=*aFo8xPk)>*6#z(DO&qc3FFa@4s|_1HjGPmoZ0t8-3%5qHWr?I#;&xe83Wq;^bm(R@xwmJbho!VB8KL8L@4W zcy1CE+8AY<&K40RP4s`6TQ8UG*i?_DIcA{~MSAfHIhmY$35SLV6KQ+tTHe~PknsMA z6e=r3Bj&bkp}6UsDm9!^i4F3Gaj0gR{u0@x2oY&U6lt)B`N0bNM(dDp!cIy{GXzZ= zrurG8ahQq#G?c&>EWEZGaM0Tr9WRQ~8W<6D&nO+i;uXApXK4uOCK%s6%LPCRTE^3PeKI&R4(QB~ym*eh#2}^M>s|_4GsbtN-#((Fg>Dh2b6+2nbVkuLKVmOMUOU-|;W^AcFV( zbZo$$Oi#H@0=xEk?%Y+k=#+^Ek#1@5yhxK>pt^Ku->b;xkvP!=teG6MogIQm{5Y8* zZd?OBV--0&wC#sa9koAx;k6pv6)bTV3xtvXdKP+{{}DEnsj~pcj%@_X2iayo?j0VzWrS3~UVBV9$u%SYNO^2JSTv5-}YF z_5%P#A@1i!@S-hyuQB$Kyb$JXvB14VrmBX#K&KN2;6+25d>gOMw_(^+a^;`BI7QSj7z|8!O*>@}QU zRZHP;O2K6Rk9t34e-?huvZ<_HdSL+>i4ptZ@h5C1H)3DC`rG!&M}N`2g)V*%?PIvr zZx4n}kU0I4<&r_C)gHppMkt8gXe?P0XIp9s$2|EN;^b(V9yw`0_1HhO|NG1T*uM7a zYgQ%cXp^X%qxYPm4&-Xsg3-&pF5_5q4#OsOBAoof#b;okCy=`vAVRK(M9oCIbV&H@ zK_=na5*<*-grIMYIL*O8Q>FRtMjLm+=Bo7f%oxmV-__|Gx1#Ny2Cqph_#i6>T zVCi1Jyk%?ID;CAEp*h0(GSM1Dw)r1N109EPw1hJXJ@P~nNgwYe+6^*%%-t&_DrMRZ zBN_mkTu663NHoGVqO6E2X+dzQz#MOrINskkY`rku^ZAP6x)I5}bE z?SlD`c4?E`bRyEQEgbr}D)S2@*Je29La}BSGaA8LHZXRCF*ReErDbM1jH^V`dFk&{ zTw|@WhC?3hc5!ELsw;Uq$u#zD8Eud541v3AIhrTTbPvvEw4z%$>megR*(YZO%=9F= zXKpOuSgF~y8slJg1n1*0{coOo%={jbL8D1r50QGQXdGYj9CLJ>n)cR+(0yyn?uB(N z(6zw6us|13-xs&Bdl6j=eDE#c5)-ocSJJxNnD`d+Wtc)WJNm#BjFv$_h#hcM;CPWqaAg~PSy<}f!5CV$fbo2;B5X>F zF#+vLBG?q8m6F{i85v+*3cy^)*t)t+=pmE30g~gey+CsTZ*dZw>R5mH)tBw(Klzkh zonLj}x;x(Pg!0jQj@$43{xcRDev?@tjbfEO_Vg#J6Yl*%|0ULXXS;4cbLzggnBr`M zuy?@BrckQg(#bWfOky@M2Hy{uE@z7pk#@MxDm^Je!dcv;NPs0^z7-<$9!B7;j(5W@zY|l+#xY!i+)N`Hcp1dvB0Uf^e?rsu9-g_qFg*& zx5B>R-SY?oPIDMJd5Dp=P6Wm>EG{o~?XZxS-mG+%J4gkb0CeOAHP}b|!K7i$b{T+by267`UwozXs2742yR0F-&S~kP8uEeLP zyb5FoEa&OxIGjV5$~8D0bpij5`41zWb2d1RLb%mGDqP!bv->O@)IWMAlin205;Re9 zII@3GH6}HHl7%nCLn=`hbo}pq0`*|sx>C%2tk^MXR?md#$)I^(={dg z3N|tZTM}uC?M)modS-Z@>N!BDg+ALD%vnk@NU*6ZL{gM!KSzUSY$%VzsaxJ+fzv&Q zofh*_8_5^!?5+7oWSJy_BX7Wb+^vLtB>kWriVnN|KGuBLzR`Q$?tSu3yQ4FG^H`6s ze9GRq^vCwoANo0q)cUOO@+^rKxerT6EpjKC-6JFcYh6Q@ZUjZ)djN#!>zZ4ZLeu-i zjyJc6?xyLL<00$mGq zEpR(opbMzqPIs$Y*RBO_Qwun`4%QRWDc9;o@(v=q)C31EXm|x&hq*tcn2dei+D(l}u8}{=p<6!3~&| zh#7ERmFgL6?l74SV?=={a$~6diV@kq`rNt(^KOx(8j;*i&wAQusJj; zJ4lJB)L`je15n*7lO(zl(^t1u_hOiYbX!X~D+d~cgL|zH?cv8-!?q2$_$Pg(iv`|%yxoUdGpY=DvM}`&*@3+TrVCVtVJ3}H5M6+7Sl0Y? zn&#+vTde?-jKwTk;Br_=>y=u1rGoa3{{nA^x<9Y~VZ`Y86A@o}qw_|)G5#Wo#rq?2x?VKcwKyb0Xshikp zZGqZKic3A)JingZj?cp)AIc-=0_3N{P9le6D9NhoU01H-7#fa_18M^ZvA<8u#295#v;iDDAqu}z=hH*QBRY|KNQV}j&LhU zJMdPm*VAKt=&P?UFIpsr^I}wS6eLyTIrj3LRT`TFKERknHll*_qKs~T2Pca+1Y55} zt_P%uD@RFu*MiN543d}c(#XD~h=v-h@;#20Zh5N(QpkaPeDp(a{g8Kh_Py#L-d2Jz z%Acy<^R`cS-VRtVJKlne}pPc(&%yS*-i1i`+0ndl+TyoA{?eW=iecc{8bizf!ESI zM#icD>s#4PbiPN3A_2_DF;=eUY%@PgAKkP+`T99Kb8^BmnIdg7YEMTWveTX!=Y-r( z_v5{;rF{JcWCU(TB8YrT4>@Rv6Dz~+E|-wmA>n8-XoXhUCVLLq(UT+g(n~K|eQkr0 zPI-*Hwng98ffN%!OFPyJ$py#b>*whkk5|bjf!_HzDJOZqFwqA zuiNPTM{r^!tbn|WCWZb*#%i|f#2Cewh~~hV9c8Z4Ku)k-!r@6G3UUM6dR6@?i8fi7 z93Sx52qcRyEEE`5ad=awSO9snDD~l5LPVl;aIU8y50qFhY#|@zlhPO86-gxA8irjh zW;@QF15wmKiMaDI#|n9nmcw3oqT+mzA-p&zVtM8squ7XlDG&KYn1?mCiL}`w*AZT1 z&8Gs)fuf-#YcS+_+(hF*Sgw1KT?=$Auum+|1=RP+jqF}V*8(2|3)~$Zw5x?J8vtOs z&O$>)V2-2}Twx6>(Ah~Zyvtnk`IoQQefJ!(NA5pi7nj#q^qAfK=nM;@w{}@#mJ3i1 zzyOM(gPf}YSTU)M0yqd>;3c7_U|WDsRVKcYblKD5K6dYft-^Y*^Ie_AR9!&SZmE#C zPi&`v!njrVDgmhe{FUqW&>0erz6Q|Gv810qGd^gui|aR!tI*y%k4)I?#^%nxyT32` zb9Qgzox>O#fO=w@cFVV0;O?VScK0nGmsuD;Us&GxgnN4?K4`1bgT{tp#>`Z;nCi1; z0v-Ii-_ii&Dp5e&wF~IwpB~!TclY;=Z_ZmU8l6+fDvXgFZV1iQ(bk)h25;H;Aivpd z!X6rxV|ee{B805UNF-^JWm$J%TDM7#sf3%7ck#j; z^+DwereJ0!d(9JO!NrfFL)3sBuUp5|>KK^>E2GJZ)QJaBzJpZCP9s;_p{+ImM*tjM z1~fU{04h5y)I5Zd3!HAV2yWq6X%zS&v8Y(r0?_^F97{{zi*rpH{T_fDB|k+I$bl`w z>Oo}qVH?=wZ7~j2J?iKO;PIi0?TPmBUhH@JC@sRPn@BXk_!g+HgrG=!H040x`4uwV z25=V>+$-Rk>y<=~nCBiOYP>wN?l>$=1=_b^oXdfr`tXHYMJGp;#9J+?_p%<2Gf=t z9<|)u0^s1RUF-dv0|I@p%qt6vkZt{TU+|b6d+=%d#-(4i%Ij-3Ss*fjk{X+^r-$yf zlPB)5*J|Ig6ZL7L3~E+dxZps$QmtsK>lMpIOE_DQqeFhe17NIn>aFMPt`r)@-XWwB z2JHJL?!Tpm`}?Jn<)Yt}yxy?C$C602V0}wMFHb00G|c5H_V4#5kyt^ViatM^TZbhc zAuqvBUYt^y1g^~4#->LhL|nGJXC5LNGC%~$)UIVm&R(ZEjhuRKof2B>7aH0w0dVMm3H!3flC+Z7Vfb!P)z*3_E$Px^7eB!`3&`Ys=SH7$O;m50RgO zd=!n`vSpDEDYv&__$$$G$1XnGu}6-Rh!@GL_Au>&c|$Ei1S#WIAmz1<#-e4;m26;& z#HKWd4wUf_V`m+(yc5M~4uC$0W2yv0y@s=Q7IwqT6=9AGZyf)*z`zz*0N0J?P21*nTr-cJ(IxoaDin2Fos5{s>&gbl)6uK=d2 zNTx+4i7tDB5X2Ib>Rbi3Dy-JMB1r?CL+vCi8HZa+qAzCsz9g0?z%_d8*J0_fvjz8=k243X}9Sd4u?0YTkds@#7jTI0=rw@ z+X7LX9DBO!dt3K50ULLV(nzVi9TX1&PCf1&v%We~BDa)jw5?N}gbkDMYOq1yu)K68C)ENA+v%h8S%*-450WJ`C{Dw13C9-_ECAer%`E7M)n`u_ z?Xc24Fx;i%qU4QjfT{+%s`VnwQNVN^U+hwU6wOvKepxgNAa_8zu2Bdx|J@}4Y)ht! zlQ82N?qoz>uLU4{x4&&=-lCuJehxFDC>2mILLfpFnS~0Dak8 z-5KAjyYm7Nh+!wtfK^%_o%T0TgkK0rU5Of~MQl3hp9QP1QvfE2V1bel^!f=Y~4WpaafHnV7IM=jBg zpfo!O0sgIR@<88|_i^z#q6g09uUbhU7zo%d?njJdxsIAnmS?T2! zn=GBSNKeuR?>c5nZKBz7L?%>ycDg#PW@}|~NL&VJY$5UFqFx{!RFR`-5aA;~Bn_8m zqh@!f4%y@Jla_?}X>T3ITwUJ&Yn#6EnbmWyjRztjdn9$jQp{g&$D)2%b2H^|h|pgj z%MaM953r6td#jj1f4%|3c)*skt2WUyh`ktp0MZpPG~PdEnZlagC?dntlZJ4SBynuc zK6&<(YgdOxW^8`tDxf${R)`M~9Gr{1&u{0fr@s#k_E8HXR}v2)^8(`;!nDPa1nC(F zS+K;ts*-HDmqeSJtM>f)8!pnRC!IhXWM?jUJKFoZt+SF;HajUh;ajkobYMj=WZxgv3K68$X_$A?Z8`Wf?LP8-6RqA=o9Uh1Q{zu+US<91-cgKTHtoF zz`g*~>&!Sa?YFW)Z>O8^S6NqqgmOTH-C?f_ta)o0o*uAqfbb@A12HDO0){Gp-!&%SKEP=| z`!+dFk%{>pNG@i0syA*=^o_v&V*<}k!H9r!7%T+<4}o^8PHK$5`Fn?$99VlF>*3GM1ikR-z8%6$_g&1^`_e-yYb} z9U?x&-fhx`rSC1~xR(TrzE}bvn|6t0h9q4)LYLULgZ8a;0Ic{-y61d@ObqX(z3v#^ z$dCw}=6nuIR;8qOu0)$KoCK~57?7aY=0CfT1%3jJfdD`fi1FGm> zM~rvr%e&*1(bI-Oj;48A40g0b6&~(KKhy&wQg-yvH+W#lVIckjG@$9vMe$nKrSoAE zT?jTp^u_Jt18kBhR4GZr=pIN4$0cF)knmNVAKyz~z0=`4y{G;``cvI9G1wJ(qr9sv zj^BnUR$>2uL-llEw(pjk7Vsev5wE8$=jGW%`(L(GX=TbbM&iSqchzRb&RC2b4zX6; z8fXU(ADywq`1l_01bF zV#78yd;+HsEcSXIPD8Ycak#j9ezR8l_r>S(ui8c}N7IU6ZjwnVYJ)b=AX{NByUsIA zGRcu6`0uK=xj9dgy8(dJx=qd810(hVl5a$$;mFDWz^>$0ab^&aQ3hmd58BU$j@Sv$ zQQ8H0HgH%~3M*C|DcYH*K5kdP_^0$6Rm;Pu-CA9=Gks56@YE>a+PZC`V}CmQQx-p2 zwy(^-WOKEbY+z#2T1VRU($#-sN6Yt7*SJkS_L#k~`X|=8!knehq)j1@K);|8BS%Pg02+7hFFMhk4f{;_3%tK&)~QEMO>?)nHofa)l>YZRNo;)( z2*N~Q-IJKPZ2@&%o|`w)F9}rdK~kl!h`dBHWLZE}bxlh69OAo;+$JFVwoML>*j8@E zas|LX=3)<@e9&^pj$FKP!A6HBnWtU0$=R#HBSKbBQTy zjDOqAi4ohe<*h}VNRHV^JZbBL2iB`VgCDwgbP4O>Msr2M)?YoOoMhRaN0s7R<15@TXdR)rJ*vc z^}MYvHi)_jSaPyuaguoRkQ@N3buY1NfvyGilLhugZ?A=IQ>)r;`JPz7LBvehyQOP^ zzla4E8U_1mapC5!0?t(gaNi21>$BE7ICn-4_1met#w`wWbZ;>tFnxVPG7Sxj^rD^2 zzn$k)tR;{21B`{4(GHQwFjGJZ0uX3&Vo;}Gz0LV~oC~G0WA%kYfM@!QqGVA%*z+?Z z15BvR0OI@`gwfayBkk3Id6{i{Fv zDz7*p6YRZ&r20-ptxERUE1B7h71456@jT)~o&<2DTe=qbAY0%TfS?c1JIMmHpoOC( zQ2?P`LRf+50&{6c(&<)0vbMluHc@-@(WV@b4X7?4T+$?td0t2M1OTif{c(p>%lW34 zk|YsJ6rdWQSirYXUpeWtfk1bVC|(0J^V+L~n=HyYw6!K+TPwFsQpY^WL~H1JvTz4X z4_pi`uw?pTa%VgB=-i=L{|-yn(PG}h^ZTi8gB21&q3*Ii6^ ztzW$Y={Od52bQ`LHM1Mngdhn3@4VGxgXASpzJfO&PJMst`!~Ni7_YoIhx!ZsNKlLc zf^NfZMdoEQV9n`}CAU+AyRX=Qk}YGW0Qa!P^VQ@zt`+OHyig*^ot_b%ujRNMnK_C1GPrc;&H&JcHF|*gEd|hf<%;&Sh|Q^ODmUg z1cfb0BF_>mSe|T4lf>}i`c*3cB8SkI_xA&qZD;J_H$G#D0lEyH z>&y#6B+83aL-b;_(cMz#nEq_r{vi8b+u!`;FWbvs{?`^+Nm$=Xj}4tTYH9Bgd-2?F zx#+X!a=&CBANuDj?>;fcIJmaZNKx7a#2OtLT` zoDG^+NsdU7capNgm&OVBxuxy$?zStklcN1Zp3r>n_(q>yAM*f$#x2OWvW)|x$~dFM zt#?k`m)}rB05FRB9A} zuW1uAeiByF7jqk4dEv6<(MGRh`^WEp)LvX6Q6_WE-gMghn^nu?Hr%shfP`Tf(xqtC zUaVcT$HRBsc6R<=R9KH%FHYtG+ULa>t&_el2#KYMV0pDh^k=^hUGlOs$ zj-3=!nXx-qHc}8+rzdDDfZe&5R_ySd5#$>q)-&a?8*dP;_7D+N-ii&J2wP&VV+*s0 zq^OFld=LqvbYCYH}vEi5g4r zY#r+%`Dw6aYdJZ)k(WVQEl#3oFZVRF#JT{D@TnQ(yZREgI==uLojyE;Haj44h(TD1 zZSOkvQ43uxa?BmV%=f~cALwJy#*WwTGUcF9BxsdfARc7M{AoXIbT43f(k4Aq7HB{U zAgVapi?koie;*9?txYCZ+z;;viDAqAHX69oLSD3%x}|G@t_8XlxQ#5ZJ6pSrYTT`A z*8*J&e4s7R0tlN2}VwvkEUc)_ zQw1PX;@Qf!bqcF2&WJ!GsadCzN1L1kb0nFQHhTx)T8vTw!EG_Pkuz|~N?90pkcers zPdmSj^m-0JpG3vdR864Qo+kMz@(i9xiaLnZ4ntn8PONYMPf4&i9ZwxkjBrg2|Jsnjgub&7&o|;JJbWhX@45lJrQ(M(>GQV`Yiw4KVk$ zoV9*;*s}8gc!hwInHUb;ZM~a!S#x#9@?VQu?>T_rR1JM!o=x2=n2}1fSPOEmJ+L{s z_vtdo&jBl+4Buxb`_e?44Oj}mJdAWlrJ8Y$>spTXLmyO?!-)1d*gtMdD_3lJ?t-=B z70c6B`g@OA6{&|DeL{l7o_**pPn{gMPo+Ne7BGF!tX?$kPcA%c|Mcr0wKE_6F~<1- z`>xozwcp3_ex1$8+d+g&Bpjz72-@9~KWe=*-FJCL-e|IR_BiKqpV zVdP|D7D*#J1?x7H3|h1wc?!1i#F%F#(0xuJM}&mXchZjEtHf zI5j+EGoyoc;rV$70B>a0U>JKX!SglRKT6LTwma@UY`sHa`|p1KAKK@he-0;1-9C2b zW7b@6*}~kK{lp{RZ<{M5S_GJX`o5pA-oC@;i8KD)4o3Y;s$+!vGcy4AjHA4^RkzJc zI3&vSXK0xZkmsgI#MbgMV;;k>1$ow!6$=hz7_X5Xy~^{B6bNegHg}190`-(V@?^|L zjv%vxcKzle(~OAMUYW00>@W#MnL>|d{5I|H!>L403nEjC+epN5tO~$+da-FK?)9;} z-v*gl_~a+$4!gk24Rt z4IIULlc4V3oylO=4qZFEpJ(7NX{`Am99Eo#Zs}T}Yk{r>{z@z$W~2aZr=t$TN}#$} z>#=0Sj^BHT1uqLE!X}&On(CiQ4mMv?U=tJG24Gfz?{f=TON}ILfP|p8E?7da&s7Al zpI@J~V|^2Ld27La_MLv!0sNYTfp5W7E5n*$WeoETole;4dnH05xEjpa2WF=2xog*~ zjILv8v1q9yY1mOA`=KY#x_ZRN5-{Ktul=2i7JsF6m^t~Hg;F6qJUL_;d z|NF)Zb|TbgA4wd7N!RV7zq2K~-~3fuK=UOPfvo|UdU5neoeYZmloqRJUveU}6$h;I zw}C8^b`z&tK(e1ueXmQf$)X7W#EArpB25@|hlFtg%0WnIhpbX*?_y*-y>JKn?o>b^ zcN-AjPhwyWc0CKf#m}lAy#169Xj>AjZ;;x=D3ZOL`vn8*C92+LF7Y~etZ6pTA3_HWS# z3ME(GhamC@VzetMra*ehU=8Kz_agnal|1aOl`jr_5x7@dDOhH13y>GaILZ?@R<9x_ zhJyy6CPpMd6={*mH6$nE6Bez(_g}{`bhKrUw4SsWTEV@gNejn%xa}lce)&)B-pHg? zk0y{(3IjH+S{#XjFbv$-pYRM1h0fp4=Y+CIbx%!(;VYraw1>CVb>seY{k|q z=k5D`{C~9HzVcIc`oc%va`+B;A;Pf~Q42)0P=W}eKSe+Ja^*QdZ?nf*kC0CyV85RD zP1~S9Qs3!;0jqY~j=@65(O1Q(-@qvliYEw)sQ{WsY18QMS1Q)uH^6K50(4KNQZ@)v z_tDzneUT$X40T2LC?7=(38emOC0m|sT7>&58x@K8i6HqG;{LRlYi4sLJ2rgG&F}I! zrTj!Gl#nF+<i1rp}TEV+W!~kPp5l1eAV0*S>>q+EZUdmYdaKI9M zjAz_WvD;sIW!~<&KV}nS5u2SwehJ5z5_c8jEG(&!e=jL**j+_f!iwFZm zHDr;hIXZdBVmLV$b62f`d}9iBdYn8AAvFDyjI&7?_|$~Hh-9>ob0p_>5Q^qdzJkX# zUYNC!-aczAZxEfehWysJ1&~7uL0HHyZdqq_j@%GKmSo=2Apb`towZLyf6`XA&e@5^ zL&)&;B9)|h*av%TYm?)oJiB%fZf*A(yB6qL;C))4i`KkPLv=UnTA*uz_h*49VAqjQ z589#?G{Seq$F(a9MM*S>@hDJT6IEeXaTbEd?wKMaH{ihZG7HNL$)TFk9H59ju2KV_ zXjNO*JC?TT6T?i>1QWe`sRB;DSCPDdexd*vc>ujUi(!QnYtg2<>ZgZEG)np)Xl3MU!aX~H z{VUI0vB5Kg761s_D=RRn7LltsiXFS9Yk?1f1!x94pz>~I;znXU7L%@Bi=i#a5>0-0HHU{VpBdkNHz7r6ZvkjRGEo|M|3J}F3 zKw8_=t^_Q(1e^fk9b^w2iySAIK=BTMW1D1rZ8Tf!j+qWXjqE`n9tYnh!D9>w4i;`5 zz${6(bO7I7B>|4T0CSR4kPMAj>vU4?ygH`?%efd%&G`kM@37Q&0BN;d>IHZ%aL?(u z>p0K)t%ls{aqUdrC7FY*|7}(j@o=zFV3B;8=+QLm2VA#fzNbUio* zlqgn?MEMAOfR%OKH@aWdYe%Yv>&3QXYcE+T*l*?VPQRpEaZrl-azC~S@}s1BlH7^n zlxb(Hw#9Q6#Odl~?07PF#DTZ7XrxEMOG8KiRP+6eV}5I&TQD*vT5LXTBVHJqX*8cF z)7;vMZ6G)HSnoX+J3ir_xrP@Y=|7W1-c-XS%aF)j+v@pjkpRXM+~D~e zr4~5*_CfJ6j|_6nQIOO=>`}s@pdm$5#Z(jqGvh+Oylt1)uGl?eCwYwo1@4bASkX=T z$>q%qvLkt0!RA6&!+~KN9XM>Cc#_=jx9JF*X~{oP$cg2;$?9PV})2RzXi zL7Y6L?TXa_&)Yo1-bfi8beu{R9KWA$S@p=aRd8I~_v8^5-L`aPow1uCHR-W)w2za$ z{We0RY7S7HKsMOSBBCJGGHo^os7@RjvPpwPrABS7y}}#-2^jEuZx8JBa)5P7-7axS zH;_+~v%8e70n(e{m$7jiCF3MERg%mc5egmpkZ6?tg}!BYB*in*V@u^(s}|?&7}s&7 zOwJ3m-_wz_{m9Js+gLb_Gbd`Ht)1lS-<{dz+aLD29Y@UWa^l`nq9T8Hx{id`sHqM z+P$zJg*^#Wk0+xxIMicF!1O4f*N(gklWM>o2f71dG$b3r-#8)7T1fc;*Ag)?*~JEV z=Taf`FwEqAKKK4u1Vyx!1*D6uuH=;gfQ%3zyVy_y)YnO7I11Bis;|$+d(u1Xs8rmJ z%?!YxFWWa>xkM5xX5>c=4JxAV~zhW-o!lG#;>PASXa8w;h1AXAkU_R0}I@NxbYdA5bTN=8j}i z08pAFs*`k!58%ZQGu=;8Gj9|y9gy2XY3cyWRjfH2e*){Jqb@yi2cok`)c0bU>mMnQ zsj3!vs)wq_XDqhG+;;LWawf=mD8S!sr%gGgzNBX0VweJ(~E++!#g|!aO?|^WO#5p-HOnU>I z=wLJHu}fx#3uYGtUxYppK_GbqNx-;mIk!s;%X^p5m235K3?+Y6!Zv@4WSg1uHaqf& zW5KhzEAEnZUhcc!0>YC>KSbJo2b#yx1g>Vw05|9W*MoK~ltI^Ummt*2+6V~wEPE#tl%%$NFim-iLgZvabE!u>ab`BCdbg6<(}~@ssv!$ zP8d4CZ4zB?o`+$ZwZYy)b|U(awYT0JQ}><0-{XQll6b`aXv=3WZoUDSiL*P=u?l@n zgSHVOVkY889tx4R?pgExefLfEz| z8&=?%OZ$hM1WgTqP>Ii5bR?aYpCs%!4ShuB@VPYDd!ki2uZSuLbt)zfxR8#-$%Azz!^FqL$iuWOW9KUdY)3Z1iYg z)Xn$$5=vmYVCSA+vbz9!liaWVo<5S8YHR~IBmr^XaNNq+baF6?gA46`q(frNUHv$B zn&jpPrdoD#>~8awH*LBxvLDR-U0*{7=WLiUag@lgmVi~FZMLJER$n5T0Ew2|D))u4 zrI&Wo3&|$bhlI=BAmAw^VzL>lB-++PUpYzC&Kgo@=Uy*aZz4`oUl{1*@{W^-LV1vK zILpG*4aEpGpo#CBCD#b;wvM#j3?8WZRFB1HdPvw!jvMT5I7~dZL_MZj1 zfcpNsr`;>+THpg=fupb(Ut3$UBKn1njZUo`JDr7JC=s&lYuh$F*lRH~L1W0c6i7HK zfTqF3S0yZY2qv_WS`qLhFg?FkfYE>k^6;Bomk;1Ud$eKnsVKv|p9LgqD?p%*m0`mS zj}R^oYc}F1c@+TH`t~YXemjit5@7oERTin53{#}dsiOV0P}(cYxg2`!2||itAOQ-N zOBH+R!mP~^-ndu%I179LWBM!RsZTobw*cx9v{CDYx3VwZ4yNxNtNXWWfe)$$0_cp# z(U6rQw`;Tli%D?lp{)u~$1^3I7f^$CL>ush!>Fr>@lAUYh%QuGAT+PthTy)$=L3KV zVAf7*6@u+)g)o90Kn$p>b9MCIvA|gc!%i3b-GRUYBB_UT*js>)EyB%(8T%uE=?NH} z$Ub~}X`{2fG}FbX7nlz|4%nhovlC!Cs5O1!y_}4k3u-Ex!W0wGPC`sCiS%}4Y*^&V&VUIzUmMv1FN{jgg1L7gTRfb*BH-b@mnJY%_h>vau1ia96Rj<39W?Fnz@OtfvvP zD7LN_c&6$kRZGOIMzXrrW*NZJXEzuVmZ3``$;~)I66+r9$D>ij+1eqIp_gY((E>&3 zpI9D*ya3!#Q{tsUY=n+hzGcQwC6q> z=)`TMma&)Tu9CI@$R-v?Z7K+xAK;GXIfsKh5+X7Hn-;TKdkXgdQ@!{9g{`J!!m)Ld z>A|`TO+*?0)uQ9})aXC3FZ|lSvrqrRe}U}J3utOrNL-$=Eca{h+DX?&dhhPTi9Td2 z)yua1ts54}AnDUMcC#+wcFd*$_qvWM^&Fo3W>3XY7I4opz})YX!P0uNTGe zz@TNz%wNb~5#d^WXo5F!)HPvCSHu`aW-3Ns(E&In0Ky&!oUj2;FAg7)YwnXG2P8fO z=4!C=0r$?-0OlBvvOzgVWkwvT^ovdU?h^g*(b%+=i15kMPU}q)%>$$+h+3#{oGRPK zBR$BwpvjM8tiXJ*j#IWbHO}iI(jJP$BGD_6IVZS9^GFHi%VqTLXKa0biLTgdg$}YZ zWB1eF!iH{z>_}zI4I%r)+~3t@l##_L<1lPh>de9E3-K8)O=W66FK#mLT_m$d`Jy$<(_a;tK2j&U; ztoU)xPx#1NfxK4COW(Iuv;a=0j-)WLQ3nE38mIAf#>UH=TXqQIQGol^Pn2DUc}kUb zC%bouFo4-$EuwRyH;U#vJpu3@vf}(Ik%L4i@OcL!l%`4D(zQU>0$mH-P8N6*ExMg* z-K}fa0$mIIwOe4`SF+3gyxrUAg#pDZdADqPYxZ)0SXzBF9fNfuNd}K)*78pOJW1kF z0ql`uEPhEoDoK|tOouYr-&F+Qw3wK6q$3QV9wv#OWCFx9WHh#Dm^+AA9wTVLMV`^xLn(VZz~U;J!W%g@onadwsm>ShVB}2TU-N(`Yl^?Ut?uJ|GrA z2^w}f;H`i?+DscTeTSLO-?|cFvTzk$nzkcWw13-TW2!4EW^$aXHfT zS_m`yL8Jzh&=dvd811;DMkxoEKzTkhwAiKJ?f`jlyU9b)QPNJB=}i)PD#YIha^geg z#Tz97slfCgpt{)N>IINuk&KGKYt_T)oeEf{-jag>!sc_a&Ox#q@Gdq!brPjqy~8f( z@7V21s48$-$7TU3*0*~PLtdKj0@<~&6j;6kLi4=?&v6;-0_^UPT%)2}-0}IK#iG7N z?ucd;5SF@m!zAF74X}Afy6(HcdRu?Bm-~!9Oilwi4A{;Cs4kGHgZzWGk?p;*wdw^Z zEKPX#v222Vsr2aOq>z@nkNQYkU7L%kuIPX!$Lz^owM-O1ozGoy2i|?XPyQ%T>_9GJ zNmz5i07=x4il`tJ5f1Teq1T)ohi#10Vrpi@A|o;MyPH@0Jgqc*hgcP7@g2vgXxW=a^Te{Z`vvw(KlU zeux;W_aT>+uGk^Zoz_^|z;VHIL3n_NM6-%UWV+KWT?=$A(6zvAX92BDyQOP^t_8Xl z_;Xoc#aFR!qRUxhai2xkm#Nat{efhx>=D>TNyGTqd1V7*=AGY84?XT`6Dutm@V1ln7mAaU>-O{zd2gm|pz{Q}zTY=wVaSPCu>_rwRPb?po~Ped8D; z++;B>a9%$h`WbPk1rm2iz}aEp-XsoOK(fy32So7^?(ab}9f~Mmv{>@6pc>l%>Lhri z(-EBPBvYt|hXtLSceMPSrmEw@{_b#1u1=gvas#SlTL_C->LCA}CQK~1za(uEI06V+ zSIy9Jb_{jc?OwK3B2`h+9jNYr^c{GeFZrC;IyOvo$;mh-Kdk*0Aa_gk04VbUatES4 zZaW|Sf*9=h8(rzta1LOf4l*zv7QK#jE-iKTRb7+>wSyM7Hz`059dKCu9$2g%jw!%j zR`%jlbmkPGAm+P{4EP|nyPS)P1(H-uqPU8r3HMsEGW)a)wb3}gu>^CKB)Z51Y;I+_ z&utrknODi@VLhVFuiJ@K*$87&J+6Z|>^O(c``KatZMYj~xCl0c;@(9C^{Q9spR9%%0!)tUWsO zv$j0(*PDwh)mH?^a%K&D&CEg)Tt-P0h{~FQLC*v>%&#!aU4X z-soJxXBR>0W)ha{Wx9wh`dIo468tG@F5R0%bz;k&h``_{wt{co?R2;Gcj_vob55s5 zgd?d5I%)i#9Xsz|;$BqfPU)-ocYJirF3jJstM%*XYKJX@#`)&PhCO!I!z3p~yS{jX zcKifVeaN@q6p5tRXX3DZ^U6!iBVpw7jIC^}6LC-r2fTb^{WooM0p@ulWk{Nv_ga-)07x`JzVU>8Houy&-q8ed zW;H7oaZ+9|>tE~GAU40u)c3|Sfa>HDN)M)Oj3lF#&>9X+MlK=%dV6|sq%fw^A6Da8 z^Pyuu_)@f7+_k zhpbk}S#^2dp8etl8y^`m?{L;$>AzyN@sjlyMu_ghp?qqb=tb6Ctn(DT+$~)TbS==e z!0l>*{nPW`u6LkY@2&-IGYben|6FMKX0306=Qlt3PA_1M%w??q$WG|7faDrUy`q5M z0({E#9m$m-E1P&UYEw=QW*04bheL*7ULF}ea`PMMB#Tu^K(CW5SR!%QV0xJF!@Efm zw*&kzz+hU#ICbATFMZ9&&1lt!c+;bl&JKbN`UVwFz6Su0_ECP zC#g{o?b{#>u^k|Nhh-XYV9CxAyvV>H4F7G1n_XJBiQzu`z0W=i7Us2$*EekZq4AsB z{c!TA4M;1xTe=qb09hbH%SC8_MG$}n?YIMjS`76z3(Y1Vub>Pe6h7ErULh4Q2_^I5 zfLp*>2V(<7J1|@hBmN6o7OR>#eRrh-&XsIWgly0vR^)_o3vd@RUGe?`@>$4%cJor~ z^a^3+MM&jZ>;k2rJMINcmtMLU+laW+#t1jAB79rk010J3&gau@i8av=Bs!X^FUu5tv??+%>##5rj2D3;V-_D6w9o?s_BZZ4ZC5T_we1UYcHgnnw$WU+o-d7B>B&*6 z$>|{{(e6FpA6EP8xrzu*9sS%|{;M-Tee2ur>FdGJ367Vu848sMbFFGM^ztA5#NV^?tzWkJUtOZ@3DbXfFkO{wF}I3DS^&9Tq)7l3krcXA zTCm@_`bGQ6qfgttcGg|XmVep)fM^Hlfv2K8NuDTu3|wj=P6*($srq5HXt(Wt{-ybv za@OqhoMtn%UK`HE?YT6vRN88O16!(-^A2OyY!VW+L1FYOVmipTtL2w_J8k* zlU7-;+1Zs-2EJ&6Jt_KJ*_}5BylgKQEm4`VmGX7QW*osteWVpd5vp7MLd|-P_Aw+C zt+_=+TPk2pK=;wwAdwz8&6hIPTBz9QnUEcOc$#sZ#G~laZ!FgB@B<-;FhM&s`jBm| zT(tQLksPtI-B%t0!1dUqf6O9`x36Z_Ed%h|SSFfo!sm!EeGHYIH6o1|=dN!8_Q%>* zgk}EFq|YX~fzi+a(lZ@9HCVQKux>AJZ&@^U+zyZ8uxhNL*I%$}vmM(k?2LGt2l)9l z6&tsoocu9M<`^sYQ3*AP&?q(-2hlh$*KI3HL@p$v2;-of@9X(3qH8lYbM`25oLRf^ z%4Kpmkd*b%h$VXmEqVXAed5kjcJ77OZSDMZB5h9DY7Xb(!V#;TMy4su978joE||WL zo|^8ZbS-c&Euf`pw{$JgwLsSb?`Z)|dIYBbVR-S)ZCS}Q0l?Y-IZD8J>pH?|00VHV z1jM>To3QWj4w(Mt0hr)&+zMcvfb>LU2RzP4G10nr))n|7CAIztmMt+88AomWXoZ^|&Z zV}JWE$DA8p!c zobw#-fa&ZbCbyca+8pdLF{JtB0ADZQu7F@i{RI-zcLH(IG~j!fOn~ZQNsAQ@U6>Df z&GDp#-l~=WrV01=k@zes&2T``2vRS|y$FmKh}?!r?kO)*S9Hl8dz*b}|LS8ro*n0% z0A(u2HNiUPxE-;>SikSS`SD20i`F)BO(Dlj2I6QO>=mL9!u&!Aoi}|jkYS3WK z55rwf44p^YbBnn}0@&$Ov5~VA_q0L(>L)rN)+!mU30G%#@_q74eZOzBVzu?EH3}{3 zbI%bBJU>wxI1{!v)+~$zwGCTu`HcnJK%M|{x^3~?+>z|Hz{ae5HVn{b`s_&?gyp#Y zxtDG0OC&A*5r9r2nD(F5_Q}oXG9>Zgq5$Naq7gXf+3w}Zp+?Y*`L2%>0TZ^|#0}a= z&4#CrI|r)M;kmw+ zfkJb-2Q!DPf)nz~gBKZ3YIdWH0~ihLD3UKR{xy*PsOP!2p0WjqWKz_T@+HJ*>od$z zH*$+O(Qc5>nFuFBq?VRetbYV1b31KM-20UE`H$Q0&HXET>i)-&BB5WHLp~%8GacfD z#svKw=)!Y26FY0yDsM3KRxCgg(RLqBNahNmJg?C{k6#K|CDXB$JdrxR0%*+^3ad7; zfkSC1ZAYI<+3>)KO%5EkmCB+8meRKIY~Akq@g5r;Ize<6didFv#XK=0f9m$7(G~k! z>oYbK89-*zXZK|1EpiHHC-Zap`zMkEmK-4e#j7{$8Txo7mt7ZUhMx@gt0#iG zn&4Z+cVvk?IXyULNyhFJ$&SzAKzVkBI zKPpsgS#uTQP>G0Qhzt=q*pV`$QP}#{8nRM;@u-g zQtL270{{+tML9PK<`RiFpUZ(%48R)D#=E1J z-Xa9k2T-)Uw8diAYajc;54&(&cOdsmD;Q)L0Qm$02`EZLB6iokk1%KJfcv4Y3h>kd zghP#;iX$0;2DFm$Z4?T2eO=IyjsQNzLb?S=*Cv#Bua54^-CrR4^b=F^?^5Y~KXa^}Ujo-dZ*Q0D~?$qS+x>likv_ zz+a~Y)aHGF%>g7uKy%%*?xn3c{d8Dg4!mUxs-{MgOfqm=h)!97X#DnMBgP7I=~xX!n|er4!{W|Vs%ad_NQ-gEP5p=rEl}{S56Dn zQKyx@JvRv(aBidw0yrI|$=-t9z9&Zmr;ol(8pJz}$rd2HoTe(eJ8jjC`Bs3wN%hrn zWrqDylxL%|l}D4eKsr)DpV9_^4E?Z@rs3EapBS?Zn2R^&m(XMGv7uNJ*)n9t_)c2) znS2f~4|ea4$G;DV30?9>> zx;{(+K03zFJ^2gv8{havq+Za5F6FII0xVCW=S^Q-B(dfi(M?aE{X6#R>>t~3ngp?c zxfWG!g@Bs}s_#DV1rw}py=L>pZ!t$kq72P{Kk|=-Le_e4<{r9t&?;->O(MFp0!ZD< z(Azghzepm>4YbX}4>JlOpXB3<)zTvC(Y$4HMeCccSuTb&Biih>tqM`3Nh>7CQBkhi zCT-->Ovz5I#I4GFqR5yv_iWx0!$BLHh}aZkV{LB5ybQ&jfu@a2;Yf+{8DnCA+$MhV zRN!Y}?h>>zkqP4@i5{iSUj;1ABlVKQA)g!wS`z6WW(g?Awe3iJ)PCXKUjR%e;%%Rm zB>h$(U$+{Gvw_F0LW1pDsca$SjY8O>e{jgwGh4Pr64LSEv?Xx#HHoaD6(aYNw>*xl z20w`^l0W3HsL2TrD}D27%jwo5ytmIR_W!f@oY9&*=t-FiA-i7%=D;=;?6IdCz;EbKdlS{_p?kTu#RV9SdB` z7T6Xe`xl=%ZYPeNyq53dPkilzBZGF&XFm9b`%h2K*i(-@hm(SlM<>0Z1ybphed?F* zg`NGAPnzB^!*}V%6ASb9_-Nr$=>D!#ubbK3tP9BI*k_-%vl>|05*sgsy8T|I{ z>;|aVbUb!p;CY$pM!PC z9u2^<3c86Z$7{*HqyPvSdt0 zEJ1$qS$pW=V-{^`t+%fwK4%Q18cfeW~7nDE5wRj*^-o?mwP+nzZA}%I6;_Yl# zIa`3eR`PaQxbhTm?`OlG07G1x>N<{g7JIuRflz1y<-^jJ z2RL`8zMKoXF14YYuSq~=XS+LC54cCZ4LLBdL8w@;20>0k2^^eEh8xIcL|FdbfT=DZ zUQW`W1QZini`}k&wA$`4iSi7{x#0JhzuP6nN+Iha_~&MImDLx32uP7>wMCeKlxZBi zDZrOCG}H%)$6R4 z)YEj*yTJlYBs(HhiPR)j2O>$DVCzX%f;48)CqI7%XA+W4|KU?GGo!W^FWIi48>r?R z_UPnS?dF}I1^hl^V;ck`r0(3l;}?kclDGBc1)EAgZv&CNma5?hhcFO5wP2AxR?Ot{ ztPqJ=IZRt5N8Dv;02cIsAyY*{&;*Ha>LJxxi+FxG`z+5+(>}iQ4nVD7Ma^Z0U$b8| zmIQ)rf$Fqe*r|e(cYJLKrt~=*?HRFNVrrb2zF@aZG0|;MtX_B zmr<+GA8u|C?`Z9u6{gDscV4rxgBiedR=OhJmV!}UN|$Vi>M^?n2+ka0eJo;`g)F!{ zO!RP)`mZULMZ5u%J#4@E{-3v=+3g3Wd&@(omak$Q`nU?Q zY05`!)?8pEFpJT|Dh$XN|+y@1FEiop#cwyECVE6a# z8no)@4kXiSIlS8{wV9Pd6XCv$OXk?xNP_UeqdCDcwSYUdarS5V8eAh%K z44X?y4E0n#1!0o`F7JIe=g~@+Kj0pioYJg;<*>!**u|wHU zlb?J7=@!^9tE)_)x|2+x0npe_LB7OD6pLLcrAaW?w}PXo0AqG{U$5=z?X#uAx`SRC zOiD+6YuZ>YS`m%ic1oub_MTg>v&jn!{|ZdM_rtf?H^2L2d)Ll;#{%y{3s64+ff6{W zc-+0N2~d}gw*XiEvyueJwGHa38sae18#R{CdNBhQ@T+$Y5I7wG>;T5jP*=VH%5qWy zqKn-vt#1c!1;p#TAnO6sn{xwtHj02=)Xgw;Ig$ZHhdCBX4|04iC}RTFIe|3AVpjlB zYa)@tIn+K#l7)tf62dzpC>^kxGt?;{<)IwBynK{d0n0*w_+DoABopP}`$>O10<#@0 z0UD3IUxQyK=h3mhEp`^vt zH(__J;OhfWQy{w<&-v8c9Kj3;R)<_!8At32u{bWEvCcze%Qzi+31B?{sNOT)Z%f1; zkVC?ydbW+luHFkN9bd5e)614e)+5Tj>?VkEj#VFtJi!u&ae|CbSn>2(t3PznLZ94i z)sY@Mn7<9b+_IGxrY#B(IFo+C?r!{&&6l6Hh0RGjefFY_p}TzB;3r^X&Rgb*^HkH4 zMSpO{k_Qi2WH%8Av=A-KxB$WPVn6NA>!f;vwm|{jdDdL^j%V?a`R9?TtJ~-Hd{94k z(iRH{(56AfE;u4^a8znY=#(?oSL(AJ-J^6jH9+;8y>#J>ed@h;*h?4B()M9v)k-%e zI@&lyhPx*SY`JO2k#8y>7gK?Bk%Oh4W<}3PW&+?nVWYkK?A%NLVnnU9WI7SZ8oI}K zOM$N0kMwowOIdA^UMJ8eplfXjhB9qr1xc00a>_PRYgPo{P6Cb>kq=uR#0iOZ*6vNl z+_M@-S6Dp?hz%)a^HJ%5+FXPxO6>9`XWx-plVWq{U^}0-B0w)zcJnj6+Wk7xUyYj_8 zd+-TX<;LkN>3{W%gm|u4lte)8CeH>@QY~0Y|P)KGyO^!4@DnRGMYmV63pn7;Sj(sLN!o za8v49S=UJ&3v?{dvA{O50JEY_>R6y-fsO@U+XCkR)1QnlT4M}$=%rm+?DRI64&dYg z1R01*<6I5~pP(@LOLwJM4xO|N?*iKTb2&S|xadp*)NxGo(w=oBkaLCTQ zG-WTIJ#UBZ+)Z8#5*->6oMqP4ow3_)*^4e>*-ox3TLHjC;J5~bl3Qp4>SEFh5>rxn z&al+6SSs2@G;{^-X+9<vyQuz*bla~0QI^88pAq|Wcy&J zil$}F}y z|CF7a2a;|HSnB*h*%i0J^M%zO56A9Rg>bI_AEOo8PysigH4^LAtNHX9$!+YjGtXP4$|tiO+Tk#74&`OV=BH$}^V>81lkTQ}w zh$bbGREkSN5iq@k9(@ELx9>;mRz*Um(!GIpJ=)#i>ruw}RaT-k_R6y-fos+R9YFn>z4e_7?^xiC zEpQ>SX^+Jhtf+}YD^&q}1xD3dddcIkv=`AfTmhI-Fd7GWVDUL-!|Wp0-vZV+UX#N) zmdYnIaclud%2vTWm1<%`GNBPeM6Y&Q15jIC55RT(ya_vffk^Q^1l5a3x6loHecs=fx6?m7ZYu;9 z3}=;RFuC#%tv?FJ*G^((?C$NghmN1{pR^RxWgl8Q_(Yh`UBfvmF*v{dhCTMo3oIW8 zu(}*f|9QalW5=fe+F`u0^i(YOB(gG+iiwGi-%9^&>6qOc8MnT!4$$7VN$36Tw1B`| zs;*etOse#}t1WOAG{Cd8yhm#6n+rT-+ z1Xo~1LtwAk3Nfm^p0f{NW&;3Rax)E0umzH{PlOgFQaN0cCsv!v*4hsNx?5k7AEZ8(kTObyD6MHag z*V=6_0lj@vIO&d7&!YOETDjX-mG7jR0X&*hHDwEt0pt-g=o=bUL5{7&ml5T-f zEzn)e&M=^`|g*`@6Q(9c(UiU5+YSJ#jaShIDS+4GA9 z>*o1N1DFrvtZniPWmuskX`v$EPnuN}1Nko3;cfD4)M2Q@o3uRg4+ZQBKI2Z?b#!Rg z&dgi-)?K!$2ydPAj#{8}deP?o>PZW;3NwY{KZCO^L0c06Ai}FpH3Im{5WfXkH$##l zmPJGR;m2&@E6-cw-yfmsL~Lxb3s&r+U7tBjR6~L$u5H-a7hbSKqo0Iz8?`bF_UwOt z7=~xcdhYnJW$rj)A+&~z&pcz1lP9eXz*JdS^4K#gk8D_EXU=*)b;GOdl8Di|P?jVP z#WE{jLM37@Fun>UYj(0SZ?$FGH0t2z_T2rdG5g6$ZR0<*dA0Sm@v!(v9!$vD!}hKm6j&fv{ctmu2or({dv_EIYP+IHJ$DvOr-n(YAm&2f*)@_BYk&JiCnzgG*jw;^Bi z$~AA7Pof%?AsB5|SL`CvNUH$o*-e}n#0-fM+&s&;B+b002J>92KC;v?)wd$DFj~{5 zxm*Rg&tAqZs{{v@Oxk+1VQcei)}3K|MLeibhH=bxF<9q1Iu__y;F`BU2T;F4k3bLF zdeSzPwq_^2wgtp|8yFyZI-$|kS$ERA*8+>-vVA`RV|vSwrwyi82|g+?O;Rss(U%lE z{O8|$ll_nT9tD4TWr*Y~&{w|tGUbtOw8sYq?a@;wTi_8u5)+YBB580)sY3$QCHo@w zxd1HS8s;g(Jvmr_=r5vQ$f>P|iH$Si`5XdZiXib)gn3>I7c2p8^w75-w!1!e0ARji zE2TLG>?<1@L`8DY-Zk2kGhWeSu&w-^esDzdCgzI}Tcsau>N?P4)_Egw+6?TZ!y*8M4T0X|r9jS-%@GqlED#;r)d}Pp6~@kX z0sA$;U`*qTb!TmoiR-AV94b0DxXQU?jwpb!f|crewo_7{l?rEU5$)ZzrJ}6@&cMq9 zL?;#o{fht}-M0#oWMP0ejEv3Y> zA;McHy@M90E^gS=AKY(I+9VY1t%vv2CUp?mmrxr0WLAzS7IGMgkMKusMjRiokG?$A zztc*Oz&8I+u)}YF(b|W!)C>%BR?N-JJ!`SeitV52we|FI>l%Y`{{K8~(Yd6h@4Um3 zyLLi@N9yI=w1oho!mNNu!ctGb+(cK%ifDP4U!3$NulEzLfa-T;Zn3X#K0~#|X+s+p zNm7S7HiFYV3PrXFWBRG36M(}}`_%6Dy@OVLcb+;%{Y)X_6N5SX-h+3ejMcE`CLczs zZ865zbbuke;*bEwq>A9xFUOWAO_} zw9!^JMqrR*!kz)1>$z3H*rpN7(n>2$n|@~5=1;BJzT2{PU@!OW*=g$@O5?OD+r=}i z0-9SVXldOxMzgkiBW@eXstq!M=&r+{rjN>yZ=U;_A&@2_>6RR(?_6gLKwIC751qxc zmP?Mp?8(zkuOkuJL}rrl&BYal0(ey!2lNoY9NN15QtvI+=($NG^}pLdl* zwy_||ovN<_7Bf9e8&|^N97?7TFQfNon(i)7e`T2SK{`bFc zXU?1nCiGX}ZocO|?{P5wp@$yw+%z!z*vCF*Q&Us+0<4womVWt{f7!0P?z&4(ghwBJ z)PD4%AHAVHlK_Mt|MYo8w z{_cB^+i!g0E(g_1?DJYF0SLB$-uNoa$|wNV9eXD16#BE906CIs5zA+TfN;7Nu_86m zDFeDyUo2Yo)@~*@1Tg{x()Fj4EYB1`>DuSU zL%U(%WbK)g=i7%6oXl)(H!K?lwuwvEera>(L&pMdp#`YxR80Qzt`7jr)WbmH2oOSz z4j`{Pp{Or`<4C{xLDVbiCXOa5HWO69X0Lye&Jb`+o=l*Fpa>j;jDf)6I_-pm!z?ov zu+F-0PJ>hmZGx2CL$KOv0O~qLIF2(+axZB>E|zYKNga~xN@>MH3PK8itnvz@7a*)j zvR8H9{rG5_?J$sWyoJ1717K5oqL<39-}vm3D6O_bY;_$=Vf;GvIV9FOb`V27Bw(I0 zG;!*=Gz!}V$9wQm>Ti=aqe-O>!GPlmC=Yhz9I~;%YPC;VO{1WvYO@>==Q!z?H(-24 zWJ1L zfBdGRBpBjO_%@J_;~9=n-@-ia5rFdu_d29N;(*-t)G2g?X-8%jtpXr)yoVckY|^sF z(B}Rs+RBL+teUG>1?N?0JZt%T_E_^j+-C*udtas3a{CWkd}6oR(Y*lY#9BcnE=(+# z5JCLH09A>lRm-ohR>oPEyLXy-n(N!WS_h3SM8~VS$pXGcOjUBX-Xld%oD&F9hc7F-G5Xab?4%pCjlijPa52wC&i_ZBaU;`i^xgF4MlwrtHFW$Y!Xg zxXQ_U*~U`)(Eg_HW;~FtBLPEujQAU?4zi5(0n_QTN}0N4HNK~r57YmTcQFqDAdUe5 zuhZ368tZmo;DZD=MPicemlB_~PEK-Pmy){fZJ0DZYsSL_cjbQ3A7;^@FR-#NOMErW zYwEO#75Y9A9pY&4_^gfbLlF)7d58<@2b0*iNjn!|{FG+w)>mUi0giq3gE__$4Ai!v zMEP*=o zY6k>W8N_D4nv-nxt#5tHo_OL3+p%MZec}_Ja7V=)0BLtO10N>t%VX0n|a{IZvr zA6t`bB5?i7U;eVm?w|bRC++?3f4}|HKmC*2S;xx8vb)Zyd!qdWWXdt3<8$b8>vuUZ z78Z~wVM(_3kpo4)=~(5V`=)XUyjR(-mZUM;1^~8RO7imOVZ{ZL0RIVDlR80Ps@9K0 zNU8+{2U~vnzX=9CA1MvnH)50ET9QX$a0PHv1q^6|>3SDyvd($^9kA>#zwrb6*qw*% z{wH4KKF829XCm54asY_=onzoS(KlensdFVju0YRMpm)f2_V=SxI0rjLV0w(YsDl|C zUzf1|?~nhh-T3i?_JIR8!)A@aJQt%(lSaw`3sXV59Q$IhD{N1IxOD#n1_|^LBVC}7 z1Ad$<%r*WvOhat+Fbs62 zJGW&E!$<-&-FRS^P3#!7@BPcOR^`44Oy8QGdEu-j3Dg?TAzQH}O(P-kzZQ?%y}8{4 z{{eXHq>csNMhiGjOPy1agN+K{0Jr)xO{$!E9qhyo?5BNHAvG`6XC14<)&H?wd8jRM z(AwVtdzlOiBn}Z+%vY2Y0mNyy1>$o8z!83BGDpP$2nO^LYnbKv;dBpy!vu^6ONpCE zBs5Dn$p}R1WzlJ<_b!tn<~DixDaBk1=V-_Ht+eWO+c!A4O_@1Pm!LYYSjPgmy|Ljk zJo$A54#y@;?`B=WMya=wl#%nmZKJkF0J^SMjB=fxYm&aXE`coDN&4(cYQwy}#THS5 zg$4WWBCOz8SH zwA>rNpB!gwV$K4#Hf16J0;5Ww-mcP0sP$apQfZn@!cR+Mn>C0nJF4nnzop0Ni3 zE(P9)3Kfe2s;8)vy=+zsx`qUe%9z^QZ(-!$G$K{S%m#>gr<^ z+>%8z#8)Us?B&uV<9d#E+h^ z&m8?YzB5gO8N=zN19(pZz~))$lqRV4P2=|vn{mmi-C>(tK=P@!$`~|GJ_ELaW_NIm zj_ah$EucQLw!UIX`ioq#-`0`Z(dw@#t9&HoQe0}-N^-$=4)39!;KaBema`SC#(fB} zdSllJt9=e8?A%JxUVe7Q_Fdm?yT*6e`qG+Rcn-jQaTCCoYLVyphdI4LpBs}CyFx$9 z9i+ll)tf&N#Ey&*C!mxzycj zFll^JqqEnXv&NSkF&wJ2TbWFbxFV7^!;#E;1$%|~jHNBQ3DF5@tO0CUXi4?uVXaHD zs$62#0CRsi^>aDy0sWyU0G-saK*s_d3v3q)ToZu$)|(|Dc4=wJ0a&r4-}k=v*`NH$ zpE%fh%PqG!Abb7w*IS{0bcB}u0m_PHF3?soB|rGV59}9z@fYpFg$oYO3b=jn!3X^m z0(TD`I%EeA9<*lw5 zfQ{ZuE@u$3p*x3dc6G_V|H2b?%dR~(h7P8lgG!^|wkZPM&s|tzlF50xS|B>WkN_Xq z$!&$XqD-C?cuGLHQrm_Nm=tvej1dAC1rsFS?9Z^uCMNCHB#^ztv#EED3!M$s+M&3# zX-ALj@oReG>62Rz^SrgK2`lwa{`8v;m`gXkos>_U`&`C(Q7$l0C74pJL_i?Gbqecg zp}1ieZLI^Sw~f|$e_Je|_FON?jp$)iz4hM&PSZXJ#0@#{&34r<>V_|cSKFjx`OS5= zeSh`^vJ@LolQ&I%nbjiI0>mYzIDvtgwJ`zXOaM-_axQt|40GBN9a}H0d)our3HX$? zur$yGnn>ma0NK!27w9hLwO1a>E$B?2DNgXt2|@%eYm#wDdgqi!z{ifJE;>b`NGxHbhNRhhI3 zh>t?(@X`Xp>(s=;(0%o@aehCRpFPN|Y(smm{zieve1Fa#wkrXa*RXw+`+)>6J_w$#B(eoC{o`T}^IMJQtblE)A(jU`U=s{V`WE)9 zMD;v$(mQ2=ssHx@Ky(4>+%{eTm@WvFK3?|-t>Eb70{4?G#A<0?ShNcOf~TK+#?k<( zdG^W2(w0RICOHH_WB(4bBYQ1|HhOb<(UP;fEq!6aRwvKd>R1osk(dpioZ>+ds7`IY zIB%gj@c2R&)F`kiBzIXG;|y?vA^VjpUL+)l%SJ{3R3cmqco zuT%m}bpqlxkY&hpWg!d&vOt1N9~G5~?y_RoJ(=u+oT8PA+#%Y>GHmt_9l6WCbk}dQ zKZ_IMd0VS-Kgrwsg?G&rzq<+&lMQhO#gRP9cJ*2_yMc@dF@lQp;jF5#c~+jHslGH^ zu__wt!;AFNwWRG{#TnIyq(~}cgY@fD%fu8~MX#IZJ&fMjiv)=#?j?!)OCPsM!+L`F z6z@|M3kW_<>YHlRi0U>@%y1LUZya1&NQ%;$WqHq2uF(v!n5fecmVDJ&RhEqoShAG! zx#zpfl5byWe4NKTB$fmar_YzHUA_^leiJ#ZqV@*6sxOm{dJXB9OeV#OH?2N~oz9$5 ztL!%DCuy;~A1u?>Rp}r@8OA4yGV4dbeb>}EQ^x`w3v?{-R$72A<=RLBV#Q3~w{M?= zQ_y-dkTTJ&G zZ@dxwpkW6N9B_bFpu5=b?fe9&3+NS)e$PGkI54~&0QJL%4?7!Oy6C!INw&zo0rgW<3L`mgC=(W`{1etGJL=_AL6>?J^6;Q4L0-R7+RAO7%%rt>IY0p@aK z$i92`?zNA6XVaU z)FPb42kscp@u`*(eWK6cQ8FlT1~FG6Y07^xvF;Ozt@$YcnK(Z5Bga(k^l+Xj$><%o+pAx*dVFw!U7p zC!RUgKIGDSLj!%jJ@(wmf5kr6PIscwDR#P2WgTY{7gE_kPo2q#%B{4ktH*9&LfA)NbdcE`geG6N0 zxOoLZ%0;^6`r<)EVYLa60xgzsIN1YsQU`UI7}#Mz5(Vz`@&ID{c?4$D)_{=kAApRP zbjZDB@cJ*O0HAbKU^0{NIsr}rOubO;>+<$NdhKj)A>r!lu5351!7COMmF?TWqRR$=0%?+Opuf_%8VwfdjO| zazcn@9*F_N(FUoElD26OOj_+=h{-I*;+k7+o%#ojZvgK+u%WVb`^u@oHoyk4+UtPC zAsCp_8*YGDXz9MLk6lTWx#eF7i}~JaKec7Mq-GR(uq;8=xVDYbrsc446#FXRs8%@@ zaCWXDJthtHG&iTf^B7WKwn&C!aG2mkmgU7tm$;4qhp1NOjRBdmjGmjiT}*Y=U5Cam zaqbU-N8A}b&8kHL)2Y+68c{&Eh*qV}FZ1k+xDd7%7bY!FotEA@VHJG^pjO~T(%jP= zu>20jwC_Izvwg*4&mLzVWT+xY2NA??5>57@C(uowW1PYmDTH2nWOB|Tb1O*80IIjo zOIgI0$0g`3!`cteSbPUTmRmA%QNX_53|huW5XmnVWfjWe@_Ea5@1PB#jpbQW#SCX@ zi$b(vNHlzH=3(L`ZrX67$M&a2uey8nvlck$ugHaQlUDe+Oci%qW5-1Apk22sYv-0u z*)0?5M1rfRR`oo>T0*eRb>EutkX@)3=+7mdM4cv|1QI0uw9^3}8a;Lb zY-*Sg;y0!rmIbr#P7HF70gu_g%5t%;*o3936V$_3<}Ta%2EES3RS}v$tUQ{as8IMKfxERPG_oLR= zdr8l~^QU8hjs-dvxY{jn%>e3}1S?>uKyrbr0%ipSzgCh5R^YGzV1c!I>AUi1gIdZ< z-vyM5eJwy)z_37JvD+_Ck{OZgj6i%zmu!b58%Sbh|Ni}U;=~CD0OXw(@GS?0G}Q%i z%b_54zTRbn%ad5>x-Z&SV7y*pnCthUp&_@wnCo(6v?X|ypUx$z7ui(zr=5q+F9y3- z7^oc6Frl@N^1CX7#%jFZ8t@B}V%+Bge%Z0cKvK)f1^kwn^y@u=9ktJ!O%Ekz?OcRO zWh)6VR&ctPFV4Ee3!_h$G7++W!>&=wXH)j{@$ z$z)Y>0=nm#%1E2M0xNZRc*tf6T!7_p4l1RA-1XPkH;>3<2n@5v*R`r^b zsP5M|zRJ6vp*EYrPu+8?oj85bjvb%!yxV`e z@@XpovP(Yau^*ji|NN@=FZ}%b9852kf@P*LVNdQMq`X-p_K#~!1XF`H z#**Yt>R8~dwm`cs3#6z6{PI{bK?a(oKKKe1^^Ful?UX;Ls;Hze&pW$2Fzmkr@``Qk z3~d4I?5BxWh?N*YBgb)ae4)b`iKxF-eFh*03}IoMy|H2lPD>>ZK z!bAhmM*9Za{2=nxcU_y3#taTfW23r)qVk(>Vsj`0AQw*iY9L>7&Ncyj?c`2A?Z-i4 zunP?kTr0bT00*TF9D%8>_R8-EZDdHcbGE)FwS1Qy#k1Buqpj1)1;D#xme4uc!#11V z+4%zJr0b6CmH>I#N%AiIfIV0n!0{f4Re7mk+boI6pW8WL`I9~N^4T*WYuKE=A&;FB zTyLH2x(gfhVVP7CiEUVUm|>m%FU>P1NwPG|#|UGR8sIx4M@#PMv-%L)v!V`n(mQ5> zSYMW)hpfWjuJF+FL<>+Cm@bw&40So6nkB1mtgyO{b_n1tgWN?2lKbZEtGC^SD<3sBg&SMdS%s>Ke}tW%4fVA&08Q%Cf)r8hmCi{R!$Z zkuvkC9vg^fZRg+->(2}UyatX(bavQHj#~9Lo%BW)80a3f9-hU8jVbSAb4!qEaQ77B zHS3nd8`>>AJtHv zZN(*^U#e&&2>aI5_fr>p8J`cxA<8|42XBQQeI{{>X!SJ6$5+aiYJ=@_oH_{PZasVLoz!cCnB6E&j|i2B`>OrvfDyGic>;l6I&FTfIbl zhZOx_0uokT^ETO*dlBwWTWv_uNUm-$JuD|d@AklP-l*PowskCUB`r`#Qm;^I&b{%!-I2z??24n5A@8MpS*zU`10ktHrB7j^V{6c~ITU)m0PnYbLTMqi*j+Kel z*B$3GaFhTeO_VQzJvE=3X(HLcHV4r;Ub|fa z%lNEvynp{bd+_C#bwz$|v0aot@!?zSS=i-gV4!VHAG+(X2PKt0ss{$#y0P{7S3m!L zd+4#3Z1TdwYix!1F%M&xq_WJzf?v&+ZBM+b1E{~IwK_juX$$b!dD1)8-Zf5XfE^qc zI4h96T~AbhRR5snTBC(lcs-)+Q1bma78E$BKfwWP(QpLL=B9LuVMz;#2hCOx&wwG# zF>;uRg$<}A@TvirE^S<;hQM?tc+R4ttuR1PqL#8n6F@j?s?P#}IftBX3Pz`G%`&Vu z%5$w&jQ*t3HMkDYGZW0m)aNhWtV`luQK`(eh#%QnoP^RtQP% zr6$&yj@P}CO?A#~mAJk^*yXHhRPP{(7X?}aT}7HhBs^kg@a)BLXeelQljpAj>v@%D zZ3$*_5A5M0_q>aHU1$QXk09MK!59X{eTZABoO`iQrZHj~1s@{Tms2`?P z89eg@Cw-c+kb?3_Z(Tq-wShXqqd;A45}+@%uwwS|q&21i{UFj*StVClLvOpV>P{#0 z+iYQ9xAi=69?*_KijG6FEevQM<-B@1o0jKHHHnr2AReL!<2tY7Eps6kxe1qS8p>bKuWHYff_BXvptPHDoSi9FKIM@F$;A^E4@t5Rk`9^RDzQ^5Kd_zl zVUF8=Eufp@3jRss6i?AVS9=qz+yF4APY>tn_R)zuY;~n%(=*ey-dnO1fUWu!S(v7k zn?(T212rqbM2}BZ(DVkdZEnIMHyfb4zlfBXH_CDVvwyZp>@)f#)u|9GK>ApbmP4v1 z)C4fcvAmLl4bL{>MALS|PG{~EX51g8Zid42gX|X%ciUz$7;j%e6I^v!ssE1+65O@7 z%aZ4C53)jFnV1h@0QDqwNb@tT%G0W!I_+f`XMcq`;u>R!5RQpFZBQO(R)!n1$#1#g z0ZSYju}VtLigum5>dX=pn6Xq8B3UPOEYPvQPi}#R8r=?{{*xQ*YT8rGWr451_j|v` z%US$yq@ljm4g%*T8S|wteaRXBl628My8ZUsU7KDk|F3`j z>kiOQOiXxSROS7RZ+ye|msE_j?!{aeSpUp3&uq>9s`{+qdKN}?5f+BnfoU-l`7y>H zy(a|1kh)3H!(Y`JmnVxequ%F7QhKyZ{{Inwc%o zE2ky=4ESQ$t|&G2Hvj-Y07*naRIM$c3E4`zH%dQz{3V{l0MrV8dG+64`P}>MfrpRT#Tk~n zzD_!NaKavM>9I@OzJk7b4G_(RU|;8$&d(hSTuBS4{Z;!@Wv2u7uk!x|u7p_%|{w5BI zT8-t^GN0}f@A_SZlbnm|;DcD`N(7?2emm`(KG%@jk+W1Q5nK{WyKvhCsLLpdZ^0HT z!-5a4$8X`b`cq-G!ob*0o1dPu82wlZ8G#xTfd>7DoJ7m?AL3G0ct%$F9>cyV0C;W) zA@z_aKw=__qrVHC?a%?7!`w&?MXhMzm*5|_mv&FUU4tNdP2^jea)7h4PJxbV8wHr-MJpp4QNo#5;#sK!MxEF* zYDd5KEcws|P3^oZ?DefV0o?oWK} zRmD3gELmc{Xz6CgB7+(G{O8Tz_LIWEX z%i-AM+1^-$sZJD9`OeEle&d~6N?qc<(JwN}=Z(IXzDhAd2AOwcXsPA&Y&Ifx7Jz<; zF-aB&C?U+PpCFnsq)g(}yDIwYRiu)VRoaM7atk!**m?$sEt@-UIkeA9IF0LCm7}(; zN?(VK;V7Y%ZnnlP(CV5PbG($C{CpN+DVECG@IbFc-?P&;6Ubqya&=P20v!u2vpa1!#a?6phm60!2xd3%B_?4tb|LCKS z`fp;XZ%ty6fBDN_-ujb&mR-N{m9IGa+~qeIIo)u>4bFmp;e{8Ru`c@`Ida57d*v_Z zi1t-__~D1$xuJ5j&-wem|NFk}YW$-~Kt@aPx1iQ~MHD%OXlF1(I$uLWibv*(gGB8XxeN?Pm7#Q>Wh2<3oZGvBXZeugBzv6%t z5hgMbm?TwzEk4+eyLK=^Rqi?#0G#{XmLw?ED%cE=qqR+gJF$~qVXpfo|D!C#f~hmW z7jIR8OQT#}%h8jOXvQ_ZJ)WGatX* zo`3P2P0t2e@a=p9rmETJKXs>r?E=%I+;3^LSJ5eyJD}MUTzC7J&U?oKZ?y$f*Tk*d z#LXpb^a#(SK;@cP&YH+lmjyt9SnzShqr zfc;dD0h#?c_b4HyLq#y0k$U|LqL_DA@NGLdGwmrXJ)0@3*%I0o2E`5cE4Tbt{W<3QIS)_g>H zV}m9Pc)uR@4YT~&9TI9g$Y0l@<6O&}V24fQ8bIBt-{@`AwyJNFja+JlU4aQWzHL{2 z;Je!s`$Yg6B%3Tf^#)E$N@P_W6G;HJFgB8O1s6Tz*294>Rf|X z&{H&U3YO5ToyC3un>PT{b;;6jucms**K_vwZS{v6KRTe_0FQV4IMje)db`bC&K06uouKiqWfgb=?C7y!X1p)SA!3Qs$QIapzFFjeb7Y!KDA!LMN!$_1c zK6tGpWq!RrUHvV`;MJb^pryUDhH+{HI?2r-hI%#=u=Ldv=w3>;B?r)#B!F|Zz5*zS zy=60P6hcd%5QCw2Hjg4?W!*Y1=FA+`K=WqA}TRAt)Av&gGaE$P}N#p6U z;T=}(uUTQOZXX}I3t&BB>(qn{_o7ennesdB0VH*5p-D^C6cjdLn-`FE9D-p^Uw(Zr zbD-{$otTa=UPft2BpvFAbkfB-m&8#o4EB1JZ`_k6+xh^=bE4!#)vqBrnph*&Mc8f{ zW_4{p?K*njF&rn-Pv2zKNIcR-%^Ko5g0cSVUeGnNp^0rzojq=g#Dgeotl2;!Z5jHv z7~`QD1BD{}V2Jw^X6%th_pC=m3!jIva+>*_`oZi#m(^|`v&-26 zqU#80x2ybOt8Y!K1qO_0oV!*!gK=pD%K;#uP(b|T(lX5X9=q@P7cQ~!C4o~b*DcYK zwE3-H|0vf*fI*IX_SiZ5yMKJxPmzV$p_iOH?Noy0F+SRFVRM1MTV>N%eiK+NR=M=ksTllcVkQuty6PY_6f{YwGyt{25~$W; z)I|Z^b)0fFz~^u#i#BmDOiTnB0IZd-0+veVrLl>lkATQQAkbiv$AO-w+7k*(6(T<| z+Jzod=R=%FPBGyl4tN8;Ky3^1Re7}=Wfh~*0dHlbIBJA;+YjIf@r~ zh;m08B(}VMl}35+djO|}6G_;1?9GzMrmk6VHWOBr(j{#;FQ@fG1+=-=xisPVQ32Hi zmdhC++ewB+(llbp-o9- z0UXz8@0_JhG4P~VF*``SMr70a;(SRh%Q1~w#Ytt}9!bOrmYA@8BMFkJu) zbyf%@a%rR`(gZxr1KjSgVwW609Wedf^k_tPGai^7wh+tp8|PN7x(JZA0lZB+Bv4K) za@7m1{zC?zyG>o-pV|>655}zeFUc6%zQ&rK2&yvxY?*sq!n0KjRcw>@HR}4(8u6HB z#eNlFFEE`kga6ZKH5-D|wd#RYBS^P2k&%<$EUH zXPGoiWZKPAh4@Y}@s<6C^Be6mslm#H&FUh+AdWXgtolRSe)j8=K$894i(qX3`yoMj6&ZT!Oa7|d?)u_@namhdX zMT(7mHEVMJ>=t-uau5q$V0|0dQ7I%hBVGKCbK}k5lL!EHcnjvO34#E!sB}D;2nrw; zcq~vx8pAFJ0O*@$0QKI(`<%)B-AAAI0*I-;f9J4+!Y3wY8O#PtY{eRvhHw?YW)fX{ z0oMxfb`nrs5&}vJ09xj?6-?LfBWUPfgdHwm8$klg0jvuIlLmXD7PV|w%6hvLTnZqm z_0nKjV3Y>(nPdRYXOn4r8EQ)uhH938we7S)(6Q&vz(z#7xh?OaZ36ED_E89}#gsjF ze$oo96)A;<4J$4etuS4%!GnW<<9&AK__R%@;^+w0>}%hA%zAsWwnV_P@v(k8bYPs- z7P4n>)@7t&j-R|}|Lq?hw7JP;`~2tM%XKrMX7lp$x;^^j3E1vY8y)YnMe@)+2&1Dc z@Gcw&j01RgJ?9|1&fks&-dYP#fAwst?bWNyq_u|h3y-2FUkVS%=xsA~SWB!Oc@SVr zB@~-o55I5c_@E*PY}QBqs-o(PBv@!8_yew?S+Bq>!CJv~myFT=FbhL~#UYmCdtgzu zO&)-hcBTTQxVY@HCqXb%9ZUisfdbB(g2|D;$|!(Dr>9=&{3?;^nppP^>;u9JbazK0 zEsFM0+v9DanA?2UbviqpcFbj01pGT_%{KCP-FDu|BzWl{m|qRr32keze-nwCP#qZv z+E-=j|Hw~LE-stHZz_-M8j>?ppV{u^RNH_v!dKvM9S+<95Jo6_6?@7F5EjtyMb&jt z4E^D}&X8xDYp9c-oYG?VxvUL&$kCy;TL(GokB{z5fcajRb~D***R=b{^)@>*Z-v^r z6|q%>dvkty-kqNqo;WUf8yp+9bQj(;VTao)G zU!ZiytFXRSJ!jX~SU4Q3Af`taG)}$5IYmDf;eM^szi09_%iwrE zup?wI&zMaC?rw5FBJ`(DM3#+F)ACw1+_NzseL5?QJutzaj0EYPt)#{$=a1v-HGo4Csh3xVv#n>e&{$j@K_1uwlk z$+58=of`^3s$u;yTAgoo%GQ!Bi>xsC0jD|#WW6iK1VobsCKXH|t4Nl(o;o0I1CT|! z>S=%;f$0KuA9(U5D@s?7bY$PSZ8AX>m_9bpV{!BjS2hc_HnVP{M}}cIl0SpslQT2c z3rl?@owL%KRA&{dqHHHOHaT~Tk?lE}9UdETKwV#ZVH#!Fz9Bgw$s7RcEdqphZ^oSA znNJg-)+a^`l9?bY-y-q{`PP!(JbBnC>L;ekx1V>>##ci~|hh^VI``SN0@e1RN{JUT? zUN3y5Vn{I#VA-`{TRhTm+;G*d~|Oqfn#A>Uw z1IGZEi?Y_F&I_0ixqi3+Zno3*P_d!25p-F53lOew3_p2bVSaQ5y7F>HIbb$ycrS~# z2^{Bo)HVo!R~|v>gX@(6yk+sswNU^%`se^=zGn+m_dEdG9MC5(w-*3k2$olvwn@x7 zT_-!VjuS{OTLAos;Vve>wzamiliNTna_PX6Gi6g-%_r>9fPJTOdU8Vs`wJkCa2@Wf z<1<%HKG;P7Ki8rg2l3BY>QpJ(ZdsTe*l9h{V@qPwxAP5h-&TJ^u#dIyVUs{?l}yT} z(a7e>vUoaSgF6PTA7^KJyx-zo(!eKBG~2AE=kBdBg95^K+O(hDwqyAo{B0{%9Y~}2 zl(R6w!o##_l9v)IJdA9c$ONhzMShpFu!x*QOsG0wIwJ_$J+(vBU0xD!sqm5uMWY~U zT0m*=s9|F{oQm78#Al%z$jq#l8@`v7rvER>b&3A7O zYQxlDr3eNb_cl;{3e6Y&M}&%EoNk{|3_gY3`b~Z*0Hi z(?kAQ-Iv-)-Tex6a;2p9Qmtnv{j?S+YfRzoT5x2wn1JofS`jK!9YaUmlZEp#(T8)n zYMBh6GZK#Tx3VCOsa&TqyhD`6v$B+8rX*q%`rF}zB&Vao(u zM!wz>se}#f8n*7SUQ6yCVl|wq4#BxqffNw_O-@}ST0WpWI;mrUjs-dvxQZ;$0o1Re zo7E}mwPOM1a-IYZztw3c0b{xdFjoRN|50q_5+0xliNN#!fwU9ZlBuahTUuDNjd=id6QB+t4Z z|MJ|0i#|(H#CWB#?k-yah~C%|{4)_|aThjTp)o+H+s z4FLHFOipLT0}z#1qMZQX);P`CnSPew&+u@c-IKY=j$NFxS)4Xno~_AlV0tte0k_I9 z*#xAulYs9qj2KP8<#dq5%m4Oo@3m)6Pr7rV%sJ0b&D$Q>8X*OX%>euXnzhpgVBeE3 zo^jwx;QNQ)d)WT@htILO1wfMj$#XLfusgWL76oc;Fv*A@`=S&&1${@)LJ;L%w6&q12A-j?n=<1KPAP9hFeW5-`{zPD_0O}y|8}&zzRtDwgL`kc**x z)QMaoifeUNdYcWY?|^b*sJCsacW3Ua9OSFx8X)0yG5cg2*mnZS*^7UzE6}}=O)0Yn zQ*E_vl9vf&)^zXK&V5o_D12YL=ot_jzL6W^n%nobZIJEte(|N#9$+%bv$h7)zlbBI zcWl6R9o}W#BVE?a1Eh2RFp@vZZ~4`8>pE@P&u-;3E7sPKd8rQ(Fnygd!6wpCr&-CN zwt%`BiPByGwy7Uk1JH}ZZZ4`lq5{;ZFG)ak#OJ6>5}uP9I_)9f6lPTJH*E>tsXuI+ z57QPV}0K0Y_*FV4&&XV)!Oo7p6AY{5pFS?+fNcC^+HlzFi_L2^oD7KbD>n5DkKPg$pGjnFU0SsB9F zz2B@OX;NM7jH%mqP<2MD-qs6iwpd)XzI4`>i8ZG6t0v!vyvliGEfcovX-);x@A9-gjc~zX9C9CNlf6I4I?6$sN zWFX1Xx=wmy3q$}_eL3kH@Agw~O#m!wSdj;eeLE5hAMKIwyj4bZK88mOK&vniYtBw@ z+R;5btqXnF?>zB>P0cM?7Iwli%&xPoAf+nf4ZBC}e%R{mbnNs658&B1)@_5k`uuuQ zNUdbhot2EsGFs`U<`yiK2$t2li~^&$VFKAGxM)RdvRf&IPWvvj*H0l4Q{?xAOSTXI zjL!ni3+1Bi>g}^+JOFvNO24$nXPfBlCz%{et9UCoo~Jy0xjb69348Da0eH~lZvvj> zl7MRDU1FkL1d!J;8w;D3=}SA1*G9!tT6vzkUCq7rfMxXt}t!VjsBv zpoJGAHosD6UyjD`t_>|mMFq6##N-Tl5!{Z6^%DCDs}cYy31`qVKkhUv`Y6wX_ESm| zyzuRMKKz7N$sau*V5uG3T*3QQ1N@ORlitO|Y}69SGtov#-<*2j&LRLP51i?bE5A`M zRQDV_S6MVeRtjcn!mfgsc5`iU9SFe7!_TyrZRAIuejLXNG*%sKD)288y?|B7cd^>* zVx^;*t~_B!NmIOu(@GO*3QIl#@Yw_)3sG;xY{y&Z^;^a9<5V<(F960atHSCh0ns4< zHaYA#c_0ZzebkB_zwQ?B!l6Mqsmo%88=$_oJ37B#Pf%wyS!`K>b5eGJ@cb6$m?loQ zI?L0=lvDkelDf(jhArEaF09%af$45XwLL1QUhD_(FYw4&>ikwy1@QdI*Uu>cUe_74 zeTpIB_Mxu0lY~5F>bA2{*XNq{DlPfSSwKYZkcf5MVf#!Q2NjFhe3>i0d9&Yz#! z0%|8k;E2=Sx0+1PLt{gYHPb1W&3=mlM~B*GT2*gfgI{Rdf*p_s>0wNY%$Vn(ziJKf znbIb!PO2^Mq@Ugb;R<9G`sQ}KR_lo%@q&Ij{Wp<2EKPq}BJgjeS+IC&l)7_0eeiPx z6Qy2_WbD|vq74oA3z4^tGZ$c=(^skQ#OW0dvD%eRO-*%Jpn7Z_;t=fg3Sc|8E0@l2 z|B|dyKtfVu8BvKUIm)s<`?Q|`z(7C0_U~AEb#WAb#GnyJ?HTqJ1o6BU=O^-r@HF1 zFEg57s+I6`xn+SmAkTbdnyJ*)J)nLxK5r+Zl3oc0lL|m5 zDS$RR`uX!0eGVbOWny#?ZP1cE_0m}f%w>wte()$@+baP0b?B%^0Dfl)ER;s$Toafi zQY~46Zp9Vgjbp|J`)v-nmnCFgly4t^{Q{pCc{wYxHA(qjk3MN1y78brH96%VyL8SK zB&w|;t^lb!@&m4g7!$xp()qT&>vIxNz6NkreT~Ua3b}Kz({; z>eRGNgft6HR&M}6L~w3}ngGZ`EgYFv8zKN4P*xSC)uwomJ=)6vU>C5g9NEXcMttUY zX9seK>aX;@K{50t@F}s~wZmD)EiheelQYzrJiG3?&PV+b{ZsNuVYZ7qD&j`9h3R^vt< zVXl=QxL&>Uo4|Aa%aUTcLiZ*Y^5LWUkr3MMN=*PYm!1&lugRs@^5m^!f_5!{esq2X z50ySWS@480jGg)oD!}NEe_E-`!XG?c+CTIM;B9_0F%_D)ns{#(D%NJ!(`I8tk>^b%Pce zN?YzW0+G^?!~pzqz2mmHGU@g7YP9pat;~uE!LSkgs;!oDGHS_Wj=Q9ONWXc@?=?GM zsK2_7M6!VLtq0BRPP%dyNab1kk!AG{0iRJgw-nCs1i?sa1Q?Hx za1TS*aqo^X)~_;ufHA$gf%6GzE&|NPLpl0R0&z2DsNi6S3Ikw{$H_>=LNpMo?b8L`{dE@!fc3s%}>Wfs9m*N9Ei)t9&1 zK5?fdGK^`ww!HhVp;N++1v(b!Sm5ojz_vhS#L$v{S||N@3uprW+WzX>4>>3%Ku1Yn_}3qN$^j<- zfj`I36ETR?I|2)ce@aDk4vXbwW;JFrOe_-s+!2_m*AEZdksZ>p4B6?KIeYB%S?lh4 z1+e+_?YG!JzjWO5&>zVXh-qGdnW}W=yJzg+ukVCK^v2I?5f*z!64S{ncf$0LY76~3I$(07oeSzVzbRaFGeH64+Xw`rEqrdmM^9lnVwi@|- z_4|+8U|$#d@?ynqF)p@nP@R^zM!vGMUSgtOo}^oU$6BxDdjZ-ysbhh+*#ZHWtLiHd zf@xdGZQ>#i&5FBpDuqxA1P4H%crxDhw}I8 z4frBBUwZJ$Q^$FM*hkkaVB1;m{4BWu4^CR%An-6O$OfP-Xj_A8jZg+qa?XNH$U|ct z*OA9IY6qQx@0SNiglS|k1u~5xg;mGtSwTxalEfC$i+3p**^@HSUd52iso_9ukY^wx z1N6W?S{W3DfUmPA^%dmlb8m8LZ>TudS{D?*%dx zs=rMfiZ#_wjsbc{CQhKb0Ck02M0?$Tr;a02vCddU?L`H^K1_Ye;C!#`=&{_tJ!;YZ ze+|eMVr5QCTf;G(^s`w&CX}axIc*;PSjL!msG)AoA9%DdWEerfkjE;knZ zLR*VOn74V_iTM#u;QfO~Z1Fr}#!k9o7O0k1ZQ`b*w()~+(T~Aar(aKQHZ6nfR+JkQ z4PVc=zaIx@-Fk_6G&UHqjnyAnSN$&QS_gcGp59~?NS$Dq?l(uANgY)*6t@eBvhCoT z`pG0L^c(>+qvWgkjZ4E7CkVe1j25og1zqJCojrZdrkKn1;!rNo4}SEcM=ei8*Yf7O zJ8)|-25pTi8N0OGQq^sJ_OYH1U^Mnp8}Qbp_Br3WGhAIc>)yOp66WM>FB|o~!AkKM z7(o)L*QKQ;%Mr9&-+!9a&aZv{w;rpQd|K%qtajhJ<@G|5hW}65aMq;qFm>i}7l*P=x{e}tK#j?x)`YnKV<{M(Sx6=~KsKxSBpwY#t zC5r)Ibq{yBPPqa`g+dj3=G+-OIXi0~J#>&flb67BG0Jb+G5RVnUHQhL8cB*p=Th4J zvE6_@07S4(lo|k3K0?|uN>azvb^!QJTmA?zUrv{;2ACcbjftfF#ndbm8JIHw5ZEoI zW;;dEF_+ARz;M~ZJ4O*o8Jz#_zx#~+-~ah<`NDQd&ze3=UFO zfcbGLv5Oe*O3F(|$c}*|g#QeKCSnJW)#;>;1>PwO@MyN`R>-DmS-S!7cQDK#le!|H zNp(zYZY43%!#uNKO+3eP(rPfN4Ga=_6BryELwmvOHw0iEjsiYYWt!6eZsq4xPJzHo zs2kMJcKxU$*%Fn`x+I+Vj6M~aBDTQ3UgtD$=hYxD4>-uVRTUdejsbWMvF=+8ZvCY>h?sMAD-DhvSb8t1$lD^Rp+h^TC0n^Pzq!n=;=99|CX5KIaMxNBvQ?7)w- zM}T+EtcRJ0t?IOe4Fx%EG6CRN>HVtAQI4x4W2H9E+fuiYz(F>1!dfeKMHsmgISXY5 znro{w0jcK2;!}CHXTl|6jmGr>5>7P9zw{CZ zrjpO1Es?b*pnZ))D{_=|MJ#*A=xc)M?Xu0yP1?l4TkXuTC)+=D-ruAJ4##0q^RJVxtOa(y z?|t^8AN-?r(|0CuT$IYxv&tf!Rud8qfqN^vusQ)p(vsNV4o+t zkY2i>hrp&|7JFolzLnmKzWH3TVS6F+#9|HWWv-CPbaSVZ{L|{I4f5V$D|6FV_F}H$ z+)@N{%@JFxhjwfg5O3eUaqB-k^sWcf7gm<+Z~yrl_U}LYMF>nqd+FRM+rM+dV`x46 z?34DMBS-DQrylchm>g>dcJH(C;VV0@QoA7#ba{E%jvqg6M~)n^zP`Sz_-VLuMgRN1 z|9j7@!q``KY6IH$+;fl3f&_&0 z_uY4UY?U`W@HIAm>s#Nl08GFeKJ4Cm z@3s5yzu%v&U-*Szc#Si3etIV@pjlWabu7@az%_1x<{C`ToRF4RfRY@V;xQ(S&z-+u zPZMm@b#?hJP0AcHE*V&yaXN-aUp&nm12BrgYO@6{yS6x!O95<)Q!5UnN6{n~vwLHW zrI#sKlr0V33V>Jw34#};1`{McDlqHB#IQ}GFE5bJQ=&5Oi{22mZtN)=~&9Aci)3;94K(j0T{sPChYe>W`%M947hzbKDZVc zAuxpC8_BPDFj20x4r8uaR=I-Tls{LkQr9Xo45(Pz#``~IZyZWbk2Qq@b7s~-5`YoyftQv+4*t6lgOf0aN3}69Kr&&NA8xEo_OcUeCuZ*~1RI z!8WTw5QufP@%*qT&+{9B8Jii*TB85z?6L}Dt~PYn7bYjJSmyBLl`T-CKbV`Dvh|E7 zTfzNKX!+3F%T_x^gD7xaZKi|limh`TYqhJiooXX1_~}R_yMl9y7KZC)fkI?h{<@u^ zp1?795}oxJ^NL#a7*a0yNvU!_@NXe!!R?(X8-%b~1vpDhby>AsFCfp3u_i37f{ZlVmcx z`a0}^FF(w%VFd~3CavGWlgDiDw%zQKK4BaC*S)Wlqb!z6HuQ;yKWh`T3x&(RY$smu?wQ*ZeZr$;cuspmG*@QIQ`scC50qQbF$;>xrE$GDiVt zu=>60`)Ut&-F27O>794p@p=h77oaTGw_cr{omZ`*Y$e+Xm~PolHrMqnJLo-={rn>KAapNBwp*;v==npRLcvisM*_B99OH*DC@I^}@2@)OX$@|rU8 zuq*HB`3sgm96x^C7Yq9O`fOxm#GZQUDZA&Md+g3T@ANXZeitf_?zcd9)iDgK!vf)* zS{?T(EM;hc8)|{|^GO@al&#ci5tu;C(P2o7Sd&a`i&XIKlCaHtI&yYw1oj7$i%kPP z_WJQN41nV>wdmvksKiW_LsJ1kI-Zb&Pr&v0a|_lsm?yoM#c{UhX%i_ScBT?r5f;c_ z&PnBrROd=17?n(DMrLswMu#KG7)cT+lwezqPR>|oR}PTBiUxX$Nl$QYMUwCPSZ3fd z42wWP9jF872Yg`N~V0ECYot+d%B}7MuLy1O>8x@A)_FfxSB{jgvt+ZFMFT z=_qVn-)AS!O*oj|z}eFJbv?ESQ(c<$3d;Af+(x@6GvMF#=V!%}R>?%{iMFlhkA)vX z3w)dw5Hzc2LBP0xV|^Ale5#zYZJAjHl{6g7zj4PPn7A?{a4=VKJuE-ofo}jE696r+ zmlFWI0*9Tw?R)Q;4Eq*)kLEZ>Yln&F&$AlUwSdt=d>hC=MFqw)`HScnX)0S^1SGDW zZ6zxJTU+@Baw~5+A5}?O&OTL7m7Bfad?Fn+d%D&W)77e`SmUJO;ET>FlF}su)q!iR zIBQL{X)xvm{3~af#N)^gDj(Memmrmc)Qbu%SB7=5`kh73;9hA{PBo+v*sZ?U!1c1e z>?7OB5vh(Su1YBRJ2};iMrgm6%jNm1@DxJ-RAOZ=Fi;@7s;6t+4!mpEj;@vLj5Nd> zDyzW$zMXtmeyYUU3$p3-@pD#OKsOs(?F3Bk*dS(W7*@LlGT93Vs6i6YE}LjSM1yVZmfY5bY!uJpJQorv zRzWro-!QfX>7{E7XG`O@Zu4GmXO~#?55tGEfHTx*C(mE3HeS1iN+pDK+=MyfGZ zJIFh&oyS+)p#KWqy|3b2O>$vsPZffw!RPSrN47wQT^(`)t9y{3FV2*)JUUQe<0!*hh~Z zJrCNSJbBXPWEK|}O@O)B>Mej=!1#+VzG&m)<96`i!ShV|bLY<48*jW}x<-KagAYFF z*PK0j)=r!_;efj8bKiaUIpBVAJp|^f%&ND_q_XNhi@C1y2&fm}u45{LkKHd$B>a9; zT3~tDcvF@wEL3QL&;lQm1$OoITMkX#R?uWY9k`f00*UoXX4obRs9d4LIyo`r%OCsWAAlnLx-^c>48&F54nzdOY9KgS#*zlcUjsLlInWM8IgI3?9e8|Rpw`g5drfe!(Tn+thv&mUvZtU;m!7hDsx13IP|FlmsH zfbcrNxHC2s-xtm}!AaM_1!j`dP%*hdg*EeAegOkJI1fY}*&2r+% zfvR7n&x)st1ALYTY)@jL*+D4=g5jT;^|#&og`Ygny+3S-4C~;tg8wVRo95w zuQpgV*Ts^f30|@ZFCABWl}X8ay@EQ5ov$?N*xDKD0_rJG6Lxwv-^Z1FR}yP5RA*~8 zjq^w?(C*l`!v^>Et-)H}npKKkc{t!k@%Al)pMbocoA-vymQKswHDKv`2Q0ciXN{h; zMR&twziX2%JjfX6i7l3We6ywZc3YGMaDNurRMu#xz3fX{$EHE_pqIxh?@ju$-^Pv~ zw!!UtE_*&aadivSX^-b;*e$3Vq8AOG?sFATJh;nh0E2YYBr14Y8hl*-9yEBtX)Q#G z&8+m^AJ-3te?GhgkYXEr@L}~brV(-yFg;HH8%JI)8AFDvG6LhAv#feWSnL(UH`%pd zm0udL;#QdJx{f}a{i)m>`cwL`1~MLlfHa!wD)LS>L zFjcVelVWcdZO6Uatz+ZrSX4eWGHe}f?fA-K7c_*1iJ57}X7T}6^EsU)?s_^pZDewc z-v_=fAWe--Tz@CD0#qgC(cX?kkp@`HLG6lwWPzw+PYWD><&{?)6 z*Is+g7b_&QbL!M7UyzXYy3UE^E#|vyzEX?51&ZhKuc7OwrjV9e4$4F9cCqJmA6vTv z#AsI<8#iurz+E7{^3=W2Vu0?I@>hCS3Igt1?0MBiz`d?fd)D3E?TZAmg%$+DusSU8 z!A5thqfTKdLkol!_z)Hlh_x~}8Y|bPCVxVkx@Fg14WphGy(3!n#rp(%~^C~mg?68 ztUgssiD+`ci-+v|agI4q;pfzpXyU6yt6&=}NHBx@fWfYe1WY%Xd_*Lz0yABVbbS^I z9Dvv2&XeXc_#NaWR`&9>VzUEIt0d?1B5&0zf;O_nSd6Qx42t2URYYF8VEN7S(qS(- z?*gNBJ}84bG*)1V;>B(&ss6bL}q$##I*G%!?IfC2eCa1hvs5^*th z#`em~v!je!wD9lz5tCfksMPMLUB_exA}deXCy;z0HNQx<;xuuzsHt*jV%KEiDd(ir zfTHsf$lkFIxfd}yNh~M|pVv;%Z*J-g+uTQ|EYH^JE%$Arp0aWn)`A79NY`C0=ys>j z&%a#ILU?*hhh>p-$)mO2wz=ODn=`Ou)4XRb+J5ONRTY+Ov@2_w?yGNSUzxX_%kkrf zXc7c1hT(%)z}s^gDz(iONrU;LtUt7k{7WVoi>eLuwoHH2&gvh5Ki)jjzBX92l^+Uy zr}gEfxEd?-?g#w@-@|Y{ETBd0!ABnO9cVFpc*LtnUtr=Gj<(me{k*lev9JpfCKl_Y zze8s|-({U!@>c6Pg0pf!a;WLaH1}4Iv37@WpQ^Ca`#7XEY4L_~5OUaus#RkmA>U*R z%vb1p!+^D7R-R{Jd2G^p`nqky9qX@Y&T})EP7C3?w`{j9>o&4W_->nlt=wS<{L9|Gd!5C+W5*7Y{E31uEr>|+=W3zFhHtU*1+YKz$Ro~RzuL9o`J2xI z+PfQu&;p?aLJQdEYwPS=@nNf?H>e;yNm_H7H@I#wvy3|1nl;HwLh}&7CP$rboEnDd z4O^58((Ne+q6L7p!r~0T_(foSsyl5E%O5zWV_Fp8nd4(!?UUkZ_X(e+u^vHd)lX_N4})BdV3nOR zV!f#z4R*i?`64;bv^%>>2eXqGFj-1Kq)9uP+Lcd(qg)JZ1_OI=bjda-K9 zsbb(~ zw`g^$BcoTXd8Vfq>A0)MOZT^1Cf#X^kwu=Bt5e_Aj+L4?QS9Gn&5^3j))uZ>7Dey{ zF2*;TKlPBEeEr#Lx+aYDehWx0O#O_2bZ`7R0Wkui3Nb|c@BjCWW^;uml(_$}*f z+roWG(`Uu4r*|Fmhj#$dA4CRb!0K~oP*>@*cMMpiuw?Utb=!n5gh&G751KEjH2Ue{ zzXQm#M+_nk0DVL(?2n(7`w@+G-7hafBpP}54C4i}{yl@1=@j_5I)3MO?AXn3B-kOH zhK<|>sG4B>+20lT=1Q~RqIu-Kx83QCbv^fDvVYt`q=;Y)9C6@R%xnc67m%wUR<#(_ zI;NoGK7RCX*Z0r-#IPND{@XTu5NEB+ZQ85f`4ijsh2O&8*)>R|UEktdQ)&X#pLymP z8yXs7{9bnlqjF@bMF|1u0?#GGa;2~mU(o$%)%{A>=)U;)ok$u}D{q1Nl4=pCF6kEC zGlBG13nH&5=svgJTld=!gnw3*1vKRhLui4}0-*&g-%QwV6t~)c&Yrkn4WU2;$Ay?i z!~vqJ6$Yg(sTEEX=}aUAlg=}^r892t%iF>fo`RNx13#@V%kMEHUk1QAb!-_rqbl3eDx{~NZGEi{Z#ld3Zvp`amKg~>xwQQ^ z`|e&I*aT7P0+v;GcTHt20fZ70GU;;SSpf64vpjU~B>ob*gc6*eCF7!x2E}XqCraBP;h5^8toV6U5 zYHsFZcFhy`AaK_K3Nla}oeL%pTu;ywsW!y@WU4LTS#Q<^7K>%Bk%7%osbM%fygoKqO3C*WB!PderxHQ=)*j!}T~7Je!U;J%4w zI%om;QfCJ4iYvCI?4aEN0eDW`IPPtd(gIwlSC^#>0P#5KHc;mJ=RP9H#}^VfmVmC; z5Zg}+0;(rvud$dQ-ntel#7;-E%bLAgt(NQYG`M^XhKLnr7GUL#+n#;9Y!Dr6%o&C? zWPzg#C$CzY^(?L*e)`8(jTeJ$UTTy8>n`-=SG%YDd4PKmbWZK~w`j74>?7wr_bF%rP1` zg4%P%3ZV0-b}eb4(;ILdrvFo11&<$m4F6s~3)JbW>yTyA>c8sPem-Jbcl?^oO_z~+ z+yxmY&zQf=d<3AhS+GoQ8@r0mS}Ata2Dg66rX~(p>35#AdB88L;SZ&7$U06Qu_m`N z11UzpJa>^k6hNKMzM=PMI~BN~wSWC;vzk&8KRs@X3yYTB)o(qw4XmnuFs5me*104;KIx$GP*i#)qwc%hiG5PonH%j*HR#lb`&= z!E3R@HE)oP`Th6b&-4884d4XKYuABx6ATQzU$_5K_7Rw_#Q=@nRSz-U!?3z7@bUfP zR=1tP(uWqfB`hFd={JhoEXQOc%Rn|(W>T>XRJRO}VB2#mXj&l|7zfxvg{o+yuLRRu z@y@?90g)bY6=rs2p@Q$fnjQJsaVss9ZU1)lW3UCxUHs3(@+9k^PV*d;zE zkhppDuHElD)24|TA)iUx-MhEg1KB~lmzO4If(Bc!_gxqs2rY1vSb(3Z|6XGN$Npl_ zs)6g2Wo)b=CKG_NgT-*0d9L)E7RW6L6fw3h$h;7hwm{FUwwsCt=s+^p2sjp-yatdg zFkCVw0-PPY08p-1a0tf%ms4RP906dDaGgM5f%6Sm>dIH(u)ys)3v_<5%0=5Fg1MYe z3QQLW?qE7sIKVA$gj~~PmyTH5imx*2Ly@%FN5SNtblO=^(qhF zU6zGw91y2o0ho?${2$LgHgsTLjQlzhP`(1841nr6CzicH9tV14AJUYaG$>cSmA~vL zwyf7jHp7M>M#S^N1Ii;;1u$R3J^}L|ZBcgXRPbFPFkSZz^TN#6P9S&5$~&M_GH2CX zuhrOouM(}rz?zI@>RA}XUDgGd9!-Zs!%w_SvqkLKB3m9+*0o(O&oQWk#;nK%$go`?q|g32i)vNzzqHf#a{K7Mp!_Po~_&F zjRV#_(21m<7_@7(*Z+8Kmq6Z&!QIoRPrF{W9BCdoa>O2f_+c-M?;>Qpr=V-ZhHiz6 zzqgKGkN1xLO}6Qdhb`0ANqdMK7CX5&?7q)>Hte__$zL*!OVy`!ESS>=et>kb0P9Q5 zy|-=K<`OTGdr=(8v1m-(a@?x)WPb&{D-D6za`GzM>bycLzf0vI#`}Q-2Rt9$AH7;Z zY3jS!@_LsOQ#mjdQ~pOk`cW&|`FF+Nzkk0y|NQgzt#5tHwe)rGwK&kKdn@wFGOf&a z<>yx1@crhnz=dDNRmy{dg{`Q6=R^ngnhLKF$F(t|Ibh%kU{psU^}p{-sdO~5K`!PU9y zY{@ol>azq`Qu{!g4R&_e%ZHEK_C6RWifznR67wWIg0pzVD%0eApVtuO>b;N=r1yi*kb*S#4{#`W#iy|L3W?P(aF zloKf#vbv@quxn`Sf^(DBMgOShE<1;_!^uj)MyKX%1Cz3C$q%Nf+Da>Yzq|!%*uMfm zm_v#q4Ac#j~_fDBDD_X?^huPQjRjaW1O!+zW3ZxJaL*i|z+F=-@i% z_58H}0BB;l4pbhndf#;F~ z05<}|701h>GAVzxp1flz6-5U2^S(1+c>%-A$N3ob0`>Dh@|$D&}!aXdW$$})muK@Q8KeWHP&clhwC&Tl>cK%=I(uK5Ms1^DI&c^pWc0nRLe)OE=1+ z0O;%Km%DuDT8y|__^(!vvv~ZD4KR<1(>G_*y(|@Ppu^-|qNQI+)a}%p7v==5^4)6h z&4q{^c=dqwZ|}F%b{vp{7o@P?#~JDoIqTdGyFAdj{y6i#*1SYIh_@rtc@05hGy$%X z_0ZT(PAsL>EsgK_`FVTv(MN6T)~((y3FH-9xux-)qpuL-S>USDkuyx`b6@Wuaz=aK zMu7A@?P1>bJ^7pV_<#Ec_({8QIF{J!Kc!K;X09RcDMh*s#IBD?J^PgIEFXx(9OhDmHn`wz9S2>AY+$xtLaHl}AoT<=zi;W zp**#dL3yhDdabrlFEV~%tn@*`@zW>m`PX0mAeY>bxaj2n(bW=Oo|RrLT6q3)7Fev$ z+4si()Lt3=iJd$)ZqZ!Cc1P~BKl;M|$!d8x`MI3kKAz)EJ3D>MUOoA3n^-tuJNoap zM|XeO(uv&1ll>aV<<1T3?M~|Pw+vp#BPH8iZMXL6roEcIFo}?4!Q%L$wQab()>;El zIztCpaL|hcnVAR_YJ%tptnTQ@+1>lLTX$ERr90D1Y60?@Y(BOBpgq2KkJWQ5nlXs! zp>q_Nei{(G4Dcp!Tprw=(Y}oK%uO%YncTe9`XjKxVz#mO!l1yxs@ANDVu+c3j=_zj zEXsunjH41A7T3YLPvuh1zVF@CWu>LEmFWn|ybG+m)-Vvyp{-W29#}GQ1}(qQv)6vO zaLO-V2kR*ep#@fh1sK~g8316=^UCwlgvl+iIuQr#=D8G$8dpGevYNBo0M*s=HCfCI z80lQh#5KY-&f0cp7myq9R?;jERFkegD!zloJj;5f^`te`PUzXzOABW(-lg>|u*2Df zG9c}M($O)+6U-b)wFCoGT`!in;wvhsl<%rho_>k)Qr>{|%?c4nCMXBTxmL0(TC{69 zO4VRDC_nMUX7n6`y!hf}3DV`WfEd6qm5&O0`2=J;qC=W+=9Z5K^)(oGF1G@Jsxm8w zXpDMe2bDqbsf`b~Ii-XsqwWnQA$@1d2Zw_?vk;*;Dx>NoX1{~@q$S8m%y>V~ImvLT zr~>dCEIv2W9ait$06SfbKAl*D0ao7hsRfJSV7qf8lN9a1a+|Edy553S(rGeImQJoC9o^qsH$=fJj=XS)u~mb)T$j!1w;zU&Yyq*SFAf5Y<$Q7_Kr8@RPBL3T zz_4DeAYk=Ifa$ID+k4mBqrd*oT3>JIdkY}HI1?>Aw8BbT$X1sM0?QwK@WJz^1URph z&k;D?0;mO;%h_uythB9wYdL|vR1jFN*QJ6SleR+Zp0>VU>itr`g;qQP?0U6=($h;p zj#OJ=`}XavkKy}GW`Ph;{|GlkgRQahDSLbFSr~Q+YtLtFsaUWdAN-c}HP_ki|I+_V z>Kdel;ghg{z}7d9J!8)w{VN8{B|9_yCJg6{Jp!n{7TEV6r%iX)I&32Y(>tr3Hq#5s z(k=k%Do6iqeKtR}2si^9XoY_I$});6BJ2pf2*5gU_~}mbV5y8w&e@Nje%tQ9Ylp2L z=(e--vv%UhS-Q-58g%N(pHev@PF zuvH6-s-N^&jQwL(zF zWm^zm_KR_i$|-^_yTPMOtyiY*AfV09KA#89ud4_Yh>&v0Gb2Djt5vffXPkAA|n{$#Tses#!BpFV4Q z?%8h9cIHhY7ObM6vCcH}#xdH-V!3R&H0<8)9_#Mt($juEEaIg0?8KN$2E`$R^mcSx zFT0N9y!1u~wMUX85#v~Fc}U%|t8K4uHJ?Q~gpw4m}IV5X8_U*D%6?sO3>k z4f&U3B5qH7_AYz*)uZ;-+b89V&!%UCw0`4DkK12<^EvB0(P3TdJFE?_^O9~+8e*~5 zopSpAT!FQ?=K;9ZI$MCHRzY^50B}}ikd1$CTi=$m*H2Ek{=3Hm=PEg126zX!RRd&C z0Hmh?)iXF=RS@W|1%y_(A1(9^%Z&4{zWTCt>|)y)-)~R#ptpKq3t20E_#RqdwON42 z4NyVgvYuaI-AqRTytQ*glMzi$3XP;4qfN*qYt|i=bPEp?K|13+QUsy3!7-8wjxiAu zI4r52n$TRn3-Hi1naA5|py2{~B_ZQrJ3vNEpJ9zhSuAvE7xHhw-Yg^a zQjtWCZp0c4^1X5NrK9ewE{D`ut%iGSH_{rc>@8X)IrXgJcj0QGcl$1zIDX`^(Ii3D zw|$R|o)jzgqld{;$Ei|0a1edB^ZPFIkX`2%%cI^Q8o;&j9 zEpFKxTm8(s4VGq}Hj`em`U&6X7|)a#^&_N^^-`s%)vsRv&!OA zmdJbw)wD%hEWC+?#{E_=o})`e;)R~FP%R+4Q6in1EfygM+~P<`q#U!OZ=66wJ86S= zAen=-l>D*y=C&Jqo3BgiRpyolP8_v24!vtrb2Cn~(r%)jj!wJ(j(xUw`)=>nPo5pJ z=iYk7CT6DKD=@ZVtd!3}6x+GS?!E0(mIZ{rkwJv6O`A5kJcvN`FoYHeEwFYh5I)f# z>0U-`Aid3gd+Q(CH){XEesJ#VR+1A(CZJ_BSpUt>{=oj#7ytAl7 zmy9%pm+E6fC#;%+I|?{Bg z0A3D&hY3#%@JjDuuL?j~8Tz}KbTav=)M3*v|3(C^OTS&$h>y%% z#aZ+uR3|;LOog%Or>3|HscZn`3s_$oTe8zQN_z6KeRh9x(At+h%>Uk`AZ*<#Ax0&kn|W{^ScvqVhN}PWc47>vI%VcD1kwKu@Wb8SJW)z-fWsil?To;p}zQ ziu&+Zl2%?V{z#T30M#i=JTRIhV`!uR$h|S)Jm1x(kWYg)s)@Xc@4S(mjbNU5*3%P9 ztch)9cR3R!l9yA98LFfh=1NO>N5x=Qy9S`|_2QuFtg_1;vYfTnNk|KjT4GT9sYL)e zapH|OQT3vql)MWX!F9m&GK+#Py`v1)V0h-i!U4wV;>Q(AS z7go>tQi*oxDxq)Nl>zk~gS&0$*a0go&R->^Yd<}G_7u-`#r8b>1v~u0_pf^4*vJXn ze9vQ6e)lD-K;Q|()h!SJ>e@{ewIgr5V4X-C^sL`ZTS*)0JC72Op=K@14rA|AmfLXk zOzKN~=MdS{Am(WIN;1;}P+PLGQwOe|c^KnETcDO>fxeyHQ|kXO3UUZr#&1*ghCp1)4*dDgfpWf_VjBnI#9lC{U+<_?6SkB zPcZ*K#WUNq-p+0(Vg2;g=k3JVGu8%(zI)4dn_HN-lYF0^n+1IDvOQaOcpGpdt1M}k zFoYHeEwJ`15CZBS@t($+d~WWz&3<$5@8fWA!d^P?l$E1JCan=WHG0CG4#^qjdxAQv zRnk$tr`)UPiv|Sa(<655%yH|41=Q2qx(7`=G4_TPDzlbLUC<|6MOC{gikbve?`{TQ zaax@7We}nZsg-}e>EZKb{O06gJ63$Z-lzbuI$+VSJn;aU_Hp|+|Jyh0zRz6HkNZ1c ze9+$6f67js8Mkwz)Bd>Vu@P9L_cGuVq;VfCtpw9+V>rEF7#-oBmjqf}BE0kT3A^L| z?J$#)wryRX4Rm$b>xWO-k>PRVU2ssy#7p%_=P!WaI_Afh)6?VIyS>{oJsImoi?Ic! z>+}X#5n%`|u$C+!P(i`LbbSyO0jLYy5Xd4y@k+30S!c2!0Cu>NwJtQkZ%Yf{#xDVr zGd(kEmj(KI5`1=l1Uy?xUZ5_>vZpP%E>Q!u@D(t;VQ>>kENw}q2qY2vUCec{)de(@ zf-+DdR>4WCp6{m8R(u^MjzDpN(Jt)-gUO?lu|W5x9|vRyOh!|I)WkXm1m`;KP^lup zBKTZ>A5>Uh90&>x$WQtBECUx>gqakZo5r5ysYtJ#?F;+mP%* zN4Z{puaw!Es`4#XnYMuqmg?=d(F51UB+hpXUeQ9y+qYZkN7o-jogare%agzBp(oib z@xv>Yp#n4d#OqIcyL82f;mHdYpv`lMGWr5J5Y++(T46MVYD+6DUg9eUsgPP_fj$EV zr8IaA*ywBx;=a)0dK+K2QsJy+JGL=youmIC3EI#w+&BwV0lupZc57WGl&Xu?v2_4v zf{RvUmn&-=sKQKJ8b^v9y=iXoA)6UVSf(9EwB@+9wf}Q#Bu0^pnX+j4b#9;**)Ht7 zy-YT1`mm(z&b)TkhL4Wf6aU}|OLagh;&~9Wf3<`%&-1B~AqUg90;d1n&war?1wKtWBb{eGz2KWW8)TfON)LG zhR_0`1wspaFbjl$`UkVua%^U~Y#F21@mF;ItPRYcvE9*{J;Ta*E}cR$qGBWGhV0+H z@GtD2KJYxd(H0U*Ms!2;dUS{7?B4A)=*p)(4Xn(cE= zvK~X@r|jIsh?T&52iIlU_Lp)1r`9al`1~o`))xZmff29YU)`0ISdIh%HOqI&zqkGf z40`0=-8McxYk%{DzS zYO7(}5`Yr)m309bJllF;NhIE93gY>GkknD>e2Ur&{+yDeoT0r1{)dJwPipGwZ zB97!>XZyBUfMv1CUB_H80XiJqhj9h+tp92v9E9ef#_6b_YrX@1I}oq*m9NgxZ%EKx z@+?u+OO81OKC^%)WPMdw9Ne-jgS%UR0RjZq;0^(TySux)TY?iHxVy{Xt`pqdJ-EB; z<==asbMCqKZN7P%HLH77S9e#T>lS>^i;o;WF7;?59l~Q7fyyDN)`#H7$V{!Y&?4QO z%aIwD4wvW`drjUdCDN)cccAZ2$$`ybn$-0=fjkB-Dtf}KmS<4pehu?w1bQdC=jQR8 zSvu)pi7zRDJL>2kE3X>HkJlydg7dyo{?+1ElsBn}F8E{gZda!v{HU@b6CI$y z`?6(7cw*P28*>J2VoXn!K#y$Q4XMROJ3g`4y|`puDNppylZ@!-mgRed*J)z!^W3F( zbmPi3U*FcNc@0Ecy7;4RN&JK3NGaS}eY}|X4TtyUDP~dA-Br9iS!!F2rzlDK zRB!W|+=|KPdE)d^|2e`H&F;2Q{nS3AuU@NR(5^(R-!E_>QVwWjU1+0MOhoJXv2 zh$uj@b$+_y_GG=AiR-ZrIoa^@@v5saQ9U^OpIJqCh6}%c!tmMF>5&|{0A14D)qC9N z+;5I-;63TfB@Kb0tT_1{1@LADxgT|0g?@c5XiA}`<}>WTu3+uXEWkWW40nKD>s#v< zNN|^ya?_@?^3uxAYc{Q|Dm8v>Tes)8>2^C=fC`YMyUm_8UYX}Aj)urr+I1c4<|Yt7Xz>H zM<-l;Gw1`9t!wX8ImidR)qTrpYTX}VZo6OHu--5> zmd5dJVA(N6ehbWtuc<^n%BS$!$T+Q>B zD3Jr+b8PPsm!!YxVL6$bk(3 zCvcbB-ippup{v}vQP~Lh;l)FVbf-&$>tdzs%5U6YmH&PO;s1#~_D@mK$p9~ByTLs3 zEVD>%tSi07SW`f^{L3O)pCe@j`^xvwwdATr-e18BXhpVHGGqPU(UwY|eyq(mU{P5i zkEV1Ex5PF^S;tvN<@NQZ@ZJF?&LZtL%53uQA`(t@nw&A_+_PkyPvR(QUB(5>z?jOO1CiIlG zMtHJF(`W@r1USEVaR8+p_I?uN--U^$GFIyyQYa#~4L4bByt~t=0gcI#kkmEBptcl5 zZrQ9Ynio&VRnJvzK9Y#-nMO~naNev?L^6KtlhE-UBS5$Ut{w4nGr6=@0k^)@wqQNW z=tan<$nzx1)A5HKUzU!w;Q+mVVOj>#r9|nE=|jjg7^CAt7*@cjms{EiG7W@)pkQ*{ z2St+<1NDN~Zi<)eV4|20rJ(EICyMt$2c*YS(BigDJAt&%=^pdXzkxg%fdPBEhinJ_ zPzKtY%{wv%cH3Bg2oY}Ad@yr}06X)QNnTX9?BkYvos>er}vas_C||XBY&6@$6{>~Ba?-^gNk12a6cOv z<&50_oc^0FMV8dbM5K)R=%tX_&R@{}Q~?u$ODCYwyh%*0OW~m+k2Be@U!x1<)&&)v zpl-w_J8iQm(E-WoOVJhOmmnAKRfgi$bJ?i&&9KHMR8PPVX$I+Tuu7nJLZa)}2Z9Ko z>(RK{s$`T=eeeDPmW=+w}k zrZkexXk2@yUq0Ih%r!8l4Z5#H^PV9~V1I&_tDc?mtNnIJv<+t5+Rj-5+?3#$?Vk=J z3ATn1^-y!x!Qd7x#=0PdB6b$s3HoC*`;OoFUfNk7>+w!=5}*OOeW(5I`bUyrZ8o5+ zJG!1b+QR&=hOh7T{=U8;{nl9*abGw7Iry{G7XCkzeFDE=z6rfbspT7@7HDPF>`iNy z%L50phcf288nuYfwx>EfMmbaCqT5Zzx|`*Lnu;QmerTr%< z+6rTjJgEC>7;W)2O6^mgsi+CKe@A`Uui>lqQudSj{OV;vAMqQ1oej10RhD)yKaJeP zBH{Zz$;#5X&q7{)Ptp&5B?y~LGeUO&B}oRRH(p(mX3fEn*yOnMvjKMpenXf0yxpzmnch`2 z#z;SZn_k+b(%*n#L!yS$hyl;L<)q%I5?f|0K%A>G#`Gkj)J$G_8(}tTOOLAo8 zDWTR6Bm;x2a!0Qfv@v?g5JMqy0hiomRqMp1HYf~n$GrN`cD%>B(Grj9aHKJa66&V# zmB1>F=wyv^)DUGfCPBrc-l*;*JTQr&%_PJPuD1X++JYgeCW^=E^{oD3!7~}mqxIDE zib6x;;-IiUgF$oPP=Mse8$2{I=a{D_!s}6K+!iGcR}lphz=ecd7O747u(_djo$Zus z1qYbHTjFjwclMqVL0!I|(E7(B6W5Wr1`gZ#P$neLI&W`Mr8nu7CnhUu<%E*{y6Wn;@pE3l5unN5#N zhHfp<%e|%BY(sc%y?V}jhP{)JoZ&D92Tlib@f@5@Cf+1Vwz{vUoRUKVUMy^_JYIVR zzUM93)x51X_v?PeYtAc~d=mi0^2DCXv6bI%lEM{Q)qiU+*cL-=@#Lg-CuhUqKw*Eq z|2_X&IR*JS$B#yY<#SY)H`dtod4Aon+WDpXs6oMZ5>_LVUcG(46bCEH3<%{Sxx{&}S#%jL^@6e63ht0$yrn*}aLEl8tD=_6Ui!MO za-;0@O3~I>P;MP~T;ceBuF%c?HNPVPRJEHjiI~d?ZF~8?MDi-ld&{{|d#3e=XGJOL zZ(;`h3NH|6Wn-ltTj)=XoklQo9B->wK%&Ts|9a*7Ymk;kGX;lcPInSsibjo3tR?_m}s>{1of_ToiVo#_p;%%z~W$ zrN)6bQD`1r&meL-Z;L>>6!@+zM={M|z6@3uq+r?sRuCWn-Yjpx7{uQ>X{FN^mEaUEgMaTvizHrZ4pswxZrGr?pi{3GH|z6Z7}w@h#7{}P zSao3VI6sHq*1_Y8^HBTl~&Jh9Ujbadr(Olo(XrT8A2ix2}9^T2}f}Ts`)7y5at;jp6 zKocoX$me>Ye{F6~LY|A|2yFI!P>CWXQh&BW->38HLLtugQklL2#`b@sN@`cA)vL6C z-5j~f2jsPlj!Fufa;}jL>@3^!Av*Vsu9MEgwJpmGPx%$oKb5mk!rI{NqLxOO(Zc;i z1FEq}NngjSHXbGp5^prNqr2MfWL^PQ^-f;?2ZZn0 zz^8uB-xH-PkaxXDt1)GnXNFYZqOvHHMN~9p;B@Bgy=V#-IRLWF{yHXN{!$AAbmD&w zbp-0V#Ssd>*nbDu^`JyOp}`865>B2+(a)du4aIe|z6aqTUkpsp$qDGFVECv^&K({h7 zp;*9!C^6gq7ePiWV^TZ*v6MC*&%xP=W964-qR4DA)Y#r=r4!1#o;A9mZ&b#RH-;Hun;M#>=2}JM0w;#9!d~mP1LUBWJH^}9qS$^b@BEV3c>l!)2;q&S~70#w; z-b(K{TB&A3^-|9)MaSTnYLH6TD{npfg-KCAe-y?^28@Z6|-*C+0e+PwyI_j>tv zh7#O?__&!&;@=HSc58Ci;(WuxHpAP?Ty#)PXTA&Hd>$FXSC1n44$pwDC4{SxO*d-F z5Q?s-%puVyQ}VKzdb-5c5ndbzitCdz{G!3`UDUzCE}L<_&$H ztaC1be@;E}Rj!7dJNQg*S-IHPu2RJ6GRJ>uE3Rtq<=2UMpqEQa-_2*ga`PDyEdl1~ zA-R63LRi5b-;E0O6s1rNTs+|dW``QZLFS~Ur`0poHrGr84qsKQwF1ZQz$EW*Betss zuktTONZie)HlB4V^&!U1H>I_{hn3zAm@EC?R6h3oLH1yQbm|pnq@Ht{vVfwo!q@lbOz_Mpi%;B7>VMH1C0>D4WXuDH3*?N{b4erW3YJTkB|9iYVrYz)3l{ z?uTY!`fv)Uqqaj71*xn>@N@^+rD0^NV zjvbxRP)$0i2df@I%Y6RE>2W!D*;$NGRk2V zYB;a;G6Q01Quc+@W711BK$LLq%dx};t8z}5;3ny6=b1%bZ>#aGh{j-1bg3ga$StjkM3i2QNte6Uc2?J1z&so|pTcF^(1JiWF{;s`6UtH? z&SARce-iv|b(!q3_9iCncZtR@-4E>%^-j$+*J*+D*5?0Yj!Pn7b6QQ9{;_+4b=Pk& zhstjPV1tt;P9w(p*PK|Ej$fi~u!%!l`mR zx!JY?M)~3`r9V7JAAv%*ZhJ1id!!F3%X z6$CS?=u|jxr_Tr;q9EZ{&SXcjpBYpw!#5xmkOO78iCpg*Q`V=yQ0dp~AKx5fu*`hP z?B22-`(tbRE056hPH00Zc!)T7mtiOc-V&z5Wf%fV#}7|vl?K6dSBYgU><+rxzUX&Z>?aHQ@{AI=p#ECf2N-cU~8X8!Lov*y!&)M z8?dm?M^exkhxEF;>$;xV{6wZipIrA4;;Kf%?a(4EkhD#u=QBU8sc{99Ve;PqnYsxl>PYd6uuu>a#Y=eqKy_}!X$cFX0&*YZ3T??xTeJCmU&425Ms|EbJ&_x&BzRo}vNYxWD)2W!lbnJ~g|27KY(|D7OSCK)mRIkF>=K7rNnq|td zFFT<>JUT_8H$lxCisTNj69)$i(r<-29}W?!HWQ{*^(Lx&aa#lI)twuJbnjcS08S@im1PWyAd#U44GnrMirYas?SFEJA{LLe@1cJ2!ynEEN@33BaZ|2 z*!55m%imGZ^*4qE%F83RO*4qa{i`P=@Mk?J8&=do^M z`PCBp51LkuLq+_H29xpVWgcF0E}r{77_i7m$(6OzAre+u<$kr!>F&h2cf4&o>^U#i z$F5X$8GW_u29(>`qA*+SzK^B-Boq-ykkU&rPp`kYt^ z#(2l-7bnyBXfH(D8~x`Ore!4iE;I3zcXj-8%NN$k8FRFC&lp<*h-X70?Eh*F;v=o5 z1w2K3XH~+l+X;LRqQu2gk~LVeTB830Zy16!J8pxWnzTi+$)WwtlU=%wtyRWmmks$& zoi7)`X^9eV>&{HSJLEUn5b38_x$hvEpP4eEr|gUS`k85URD_x-bet4~Y@p~@ET?uk~j_~qH zN$;Yq1dvjHDE7rx`S*;U36eqPx>6lgk0pPKnkv|hh77n+9q@-gpgi7Gf0YIdL_QCX)rYs8#&wtlk2`Ul^ zd59M4iufX2Ni41*3(F*F4$7>c4q0s`X1&)u4e4%g7@Yx%wW0**$?LM%PF@OCA3f4x zVs!(LATbVZe%Cwh$=dq4xm1fhRlKl@S{6ohBppl!#3Sc~#utv}Xx?f2h{8TEz*}q9 zx5u_C1sySmSC?s0*9}*4QXM%FS3byRok+l+#9DHuEslElkA?;MX4O-(PSo^{0a#(b zZVR5?Jg_UA^%fHqS6-tF7=x-XKoM;i`zNomvpL6O_WZ>pF7HS{kGsU=AHw&Ep_=Wh znd?gfwWuYXleYWP&WbUoSl>71*P><=!_WUhZITS6hl$?y?+IO%YQ4~0BUoqxX4!4$ zhExI(zescV|C3H1N^qNRAzWqcwCltuOTx+Z#h(*~YEt%P_|hfn7H@>J3$$<)+M4dV=OiAQ-M@k~Y$$6=^lhpf`CPr@%>69^R7C;$1cvN+cV+yJN@MB&g^}VZD8v;#WNQ zDxW?VcdFU-;y5^UN#dd+94#St)cC5D4T$-Jc+MHmEmFArT8}4)?HxLFeQ?t{6kMKB zfU@0qI0K`o{xoZrzyS0GXTjJwds=%bz37(Uu1YJ2$Fn6N_{n7szHR6?PgOGF!BFI9 z`KJ*XSA@}njD?>mQgy-vW!Cgb-9?%{A7cF~1q0)vPmZE#MmCTs;~L*~@#xn6xU45? z|8DYc?#?#Q!Av+uoa$Eo;7Fa2cD&(i-7FCW#eW?lG)N7}b-kX*>K#>k{5#!!v{DTj zNYMq7TVU5F(9(rHbpIh3nlfPQ_=SA?7@|>LN4H#su5RxkjFhx=Eb4qJJaT6K69bwh@OfT39ZzZ`0u_Az2rbSI@?bn)%fpu>O z@X+m?sr5+c8g%hmOXYpPXZEiHCuXSRuXt=N1>AcUCyaj3BVn`D+_O54kR8Tl&@Aov z)!~sc+?&GLw6mE2odb@|V?$GIH8A`AqchJWH9Vy{1HaqW7UOOHo!3aEn@V+B#kCFTG?G{Xgw@cu>1D_kX{CuW9&27)y79lsmgR=I2lqkt zY3AVGlnXS&mShB^o>_2Nav#tO5x^B6N#Dr(hVvenJV#`N9JTS{eaQ;2%2fW?DzcO! z*Bw2DC-umLalZZ2`h7~pfo1SkS05-ug#tH!m`@%s%ky{CHFrj*fKh87c%Vi#?g9RE zl=XuQ#&Vb`C}rQM6Db2teJe z+DZLP18TaoOLbVR7|%CDal)EEfob`nmGZ?Aje*mq%ZE8?IbLR1SzmWWLzh-PsEYG*0cQmYY+He#6$^!{1CP=#gAJSXFVC>e z$)CSgMgR8* z*vUHS`2!PC&$#QD(IIKGx7jUYruxyM~BOMR6U4R|D^?>1>unT zDN&gI-M~=zmk-?EQhVs?c1+n7$X_>N1yx05nuJYmA&j<3QiY4l8O*kxxV+^sMFY(O z@FVBKHAykS_PH?gl`u}e5^Yn&szpp(ucK&WX!qmGAZLxbfAHo%2lWq6^RIhzY#peL zrhsPlC=+d1xZAe0yoNB+vaw}5*n#b+#>HtBwPcyBXQ{EgwInc-XGomr&TL)*<+2bP zYzd}_fo!Cj`Uzt{!Jq;v&ZypywyFP$wY3Ppj!bS@{=HbD&1%UFV)G!*b=Nv+9IC#U zS3)FSgYr}+A<@m&YgCGhT31J?I1|C^>xNmzr@oB?OL!I5ocB#Y^ZiPNxL^|mvnbLtzHBzfRe=Y9yC*Cf;AIg89f++wl)N&xO z0H}heO-Mw9;u7H2@xa*cg0km@0lqIZ>P4-Q@YNSz;@I}&K^$LxY=;a$&xeewT>ff|v%coQ_QadV?!txhzxz1<>tfJpZO%i@ zvge!brTCos!ySyX+>b$IjT}-}+&J57n?8_=))f?TtQ$^6x##yR+un8uu}`Ts4T<1_ zWLQhZFexG1_?8SEQ|!XO5AiH-B@MFMFxNugMSj2EVb&gv$2|p08W9=@6&g7TZBWS6 znP@?PA)kse3#PCv3ZeF>9Eg&JT(ugp7l9Oxz`>BP6kh?<9*z)r@fu{=dSQ3*$ zfyUqEeAyoL@^iK5wHyf~iO@!{{C#n&vj!fm?U$vZFqD2eE&L~`32Y4`MWMdz*KrpC-kP`g?N?hg8nU-Wy_D;0sW8E6pD_^*=tP#YE`Y=v; z4iqDDZZzvy%FWW0lrCMJ;X3P5lAPBl-uKypzxUz%NsuylnVQrJD8LE-M`N* z8?&zj9B#gDSfL@n|qP+$%k4ch`&40Gx$2AkSAn)NGlS@I@ntALY>hhdciH0vuWc z2Emjt$$J=^``JwOu?isI4z2~1>WC3jOtr0Jt{tZg)^>Q?2x2WjS(M8Ek*I>qgNmR^ zDKU!;FU70ib6YJ#LP|P4Z}c$#m;>NqHvO^oYYUlvTohQ{7R@I4wGCr8*^csVu)nuX z=7_a=K^(;6yNs#1BRagm-bxuAaf z1ipnImq}+8!984mF+6)NYboLrv_~S}PkD+I#)rWBV8<-J5P_q8-l;hvY6cY=j1aWh zYq&2YARP)d!Hy@$;759`_Ae>nIXF?YlL!!!6p7()m>>afPl|{aee-X~Q5l1a@&h+9;j?DeVvw>bM zZ=s}C_*vEiZpKrcFYs_oW4efth8LFAmnF@VNZ3CKpdi0TpCwg`M2aCXMGtj|S_IWk z_lhp#P9Eg{zg~$+$b~sbG6Q->#vcr-3_n|i7~v|hV71ZhlE!#SMMa0n+PVvrF04kAC?)sX5;*gcuUa%;LwGB|%WEC{?azFb z{(Ba^ig~8B_}&r%=Q%f_pC$@!a|49yT5KUgz>z1Be-h|($khun&zfw&ji1EUfen+~ zmPNw04V`#9P7!_@NRs#jdYT?$U10#k!(xJ>anLfhLcfdvp|4#}Ny^D)LD@F#BPJz^ z2_SMFtOM4l3^u!jGSfPL1tMjEAHi<&Z=sgC6=f1$@`^h-&@)1U~END))Jlpg-fRw50e-kGxGN(bUyH75aM4A^#1{>o8($T24^+K12!HWivxO) zj^`f^6vyWShqnyGdOnw8ZLfDLzysXs5952LrAFHon-7r+0XqSY3(}pbpf$$rMZtBE72m~6tJKwPX zPAsCKC7750-$ z!(&c>W!6ouv}{kdSLxl95;vBmKF5Pm=H`dELO4$Cc6&VSD#Mmo+;0q{e^M7A zyGJb3gzOLN;IYlLkTkMFJLGs|eix<_gsR$BZ&~lCn_?1ARkJU zP)m8kqIQuM1(SUd$z5DP2yxW_#eC{6U{-UQt%oDnNQa|@lL5n3xO_&~Uy)DC7+C`9r)iHu==GK*|7vDf)g$&bBsaS}F&%v@H$9 zelH%F88~nU*gE%j^|{O!Tj^Sh`^I7$`9@JRnU!e!c-Y8Y7XYdqr=_x`Tww6l=;?(^1hRn$@5 zc(INg!u<2{`_AtSpiKewHW-1fw*RR)RW+uH+gq;0AM_SjL zBH8qlU_8BQlGg+AJL#?)=}5RZCtZrNghiI~+$dV(h#=KRCN*2>K885WnM6d{(!&^{ z8rc0T(Jz@TuWq6QBywLmS6k%dlm&lSejf~Q@+&v(~nH9_1FSel$!`PNMJ0s=+Z`h?Kq zYq{3WFXeu-IUJ$1KGQaS^JO#0$jejamReC2flq{yi4ZU?!X=^TyW=5+#tf+uVGguM z*YV9&o3;YYLvc`THGzR9*@DEU()X@TPsQkatcZ63gTaY}{%JNi3<7IiNaII>NqDNr@QFY@Pap3F|@7sO1S%#&!- ztw7s`RfqTsr3D|e)rEG~xR$~;Zymn(0rE|Z3wRIcN=isZD#`^jxi?U|e#C7-n91($ z&N+>QYwR&iXCVzN%a{XQ3jj=gZ-5qYkEnF*}4OS8z!Ew-Nwmq|y zJ7WHm6SZ%#5Y;PBP@}|22=>8?8#M0*;oFSE*nN<1=2)a0#@@+KAGW;I%KM?HhMhx<%L2}9WT?LXLger$#l7#7!jwE<5~n_1w5enAc+An z0pj3){aPIiXfH3XjOpgCt__U6T4K+)$9>&Tibp&D$YjSBu(Gl?8uq|GkD3c?hs|Wa z>`)cCk{OD%ucMawo-EdgX(xyid+z9}eNNtn6fH{5_Uw;6qzOBvEpWR91CC$%^y?w^ zLq;>@G&&B!n@hVw?5ZpzgCdv6u$T$7AD&m z8vemJ%6@;@&jgJxE~cEWwJm6#h6Uk9kHBbN*lcvJ!NS4eah79$@R8yJAsX1vck7D}fYsw(Aoy)lkjW4su# zMUVVXt@WMvi;aD6@=07*?oLS#q{|-@QyG(?i z7>bTtr=P!8d(c%aeN)+PH4E*6g)8b`rDxPIMYhI!k#y$&eMr_qXF6!#o~}?DY8vJW z3$n4;VWRC;@l}kvCgjC01y3K_x#Q@k^9=fZnOpljRulOd$|gZH+M1b-w)#pK$5a2O zioF4l{0lF%eHe-imKmdw(T#yA@t_1vYT{kTYPG9|-OWS93n zk9bA75xrG&zvlvX*D+(*Dk-b)<^4N)_6^2J_t(j#wWVe*C(%(jn;=31)QjWZM1R{K zuH#gh-X||7EllGg>duXpn)fQAUhhz7Km0}8_1zyHk*+>Mf)A1o7ckZDIC(F=sD&4s)q|y@EG}TJ`-^;fMYZ}ZOOEj1w3dgz8kyNuD8 z{dQ9fEPa_(mgiP_RnC4&s3Z6M5UZ~olw6R{s^=N76I!R8oye%6++IlJJ|6)#+O1iU zg>N73rQ5rqz>=kk2}#3~ZD|y=IKL8^j}<5uZTqvlhqbFExclRf}Tm)Jy*H% zoUtw65AtJ{CntZ`IVmn9^5C&U4z7Pc^41)_`MRF>W7=mk5RNFea$k5rUBNh#K#2{= z?={QL;dADk?L0B|_WJ8k;#Fjy4A~`WrOCc2ezk2k;ek>3eZP#%q0-D<70ufgwJ20k zpeWpH4n>A$;)YbL$x`A{$c>I{;L{7e;?J9+Z!4R*V=h;a%+!`p8@H5d^r^P)nu{HM zHaDu)GC;AyaiKz2KAm!p9L~t3-_yV^UP5~Z@cI&$*hempHQ&`3ONKALH5mjB`^I{> zSQqoQ>2!@CU8~GrxA&?X4|!lwulDd*dHT%Sy8VjqNXBXP0&%ee!gcBp_g6ExP!!P& zW0X$4K4_O;?N?>MhrOm=-5dqHv0Q&E2@7M`UL$leOlU~qt8XxB){*2Gt3R{}U;nyC z$W$hej=}vWRcau>i$3zU+!=KOOXvIaZF3aYsJ9DiiabZ;yCCShiL;S zm}faWBDyJP|JM`nPjsuJ05EpQM#Wl(MR-w_Xd@kx*CJI8lnf&w=Ixhy!|2yLecQ+r z*^`&Gj&aVVpkw!GDlFru8}T|HWk>wCu#&X8)`tb(YL<*+bmv9-^|r23)KfKvk8D>O zxgj+RTH)Pe=gAs%J=5|d3-mq=S~@;}KPo59)Pl30R@G~^-;?Dt^gjK!7jlxvu$7{C z+|Qjl3fp28dg^Q68fnQ!3%@1X&VDXmLsI$=MpaKaa6c&2$%gDwy&17c}g&}!y5XMCvBC*X8Nqf>&)o`7tyGToS zi?f0j8OOBpV(@%VK?Q-YBi$v}TJk~>3nF|OB?lq(Jh`^y3@-^Pe{lmR3``AC=AKro z$=9JqG&}mk`VkT=U9OW_$7trREoTo)#?7f1Sej7;T_1~-|Bkyb!+*lr-TI~4FYhcz zw!b*RV zZjlIThUyj7BMa}C%6|= z#AAznkBwW;0#CC*%DGnT@4GRw3mh8`aP|?KmWmQ{{c6f zR-~j(s_`m=XaWy8g39ktcSKF>3d zjc4w{Cz{a|ig55)K{)9O90_|yaK&a@m(>k)hqFj-m*|!M07-EM3B3o5$xn`%IV~dc zAM5n#CsfnU37hwSRi!zJhz`@=EVRn0c1GlicF~1i3`pIkI^lg^dACy@kT=d>sYj*= zy?Ji!exSXTZnj`_ww`nv>R1oKi$bx*_ZDGmUi$eStG^gIA$a1LlmStg-5` zu}vIGY6M7rp+az``diX@SLak3bx=86Dle~Z+vn-rWy^XT0I{!owUhf!>$p@wtM&-@ z(6bJ7D`nI+OXyWQ^k+Sj4;B6LaqV{(3@fuLksReMhmA8ta_i)a@G9ZW@=yX8%xOuH zERllz68SujnAux4YG>OiuxPC-w|GH0_%u3qyBR5LpGTSGf5GUFq5&833Of0#?vZnB zBboLt6fqo49((BvWjYo{-@?}dPWwh4lUBr7t)ybFpVvoVkyoeC6a_qC&~Xw&MA)Uh z&o*JSLNcblu#^MF>{S$Ah*A`tL@5L0Yv=QsGn8+H171?MhLl6;f>?<3E5i@pmYiF% z4&!p{HMq>5D(AKFQ!PUaI>P(BY-~Gxmtrs0B;&&iPTdNL=4D z9oY090sBWw4zSY1KxtZU_HPf>U(uTl;a&fLl7-efM8;GfcK~=Sa{3NoE=h`@()r5D zO}W(dgha$%+b}6zU65iZ;XEV2%JoT4Sv%w?F+%p-#<#z81+%?GYDM+skzC#l->KNA ziHD+n_UN-Nr`2rZ=UG+f7@ptCYyH{$Gkv5`%JD><7E63CZFjk~x>X{b=8ENp*Lil^ z!w^K5lVV6@`;BE#3)4G#8GU=Z#qa0mONZH8KZDm~18>*RacSU@V~^!l;2KR#86tj| zu8HT!V2VRWl50PV`JbW1lg|4p?1_85*5lu=`DbgZVgLJo0`Gn|NT^{gyP;TKmFy`& zV}RDF^Z~GK*AxWa2xTHMc%FuYy@d8$01%Y)?JKzZGUB9Co(&Kism zGfpWHZbEI*&tI9<;jf<3YMq-LLR+w9@Jp+KaKZ^wvNZwOKvcTu{NE&|G(86KeWjjS?%?1vc4M!8Nu(X8jfRZ znhJgYS6A`cVG-@0I%UYkuPSfKVF*SH*6H(+%$=B@12K6A9$WrMe4fWz48wlNG;x?5 z0jlUF%SPJBm~7{5v@&8Gc8fLAA=ZkKCYF7$0?P+YiSpISo!p{K@M4a zp-*yzHnh(#(`R;g_1MW}!G7gtX~jwx7hup)`$Z(Pn_fIkSt@z3xy3iE&Aqf7{^t=z6ZFv4zzSO* zZ{#)1j@M+DaeJVMw?6=*4&&|0u@4r;kuaJg$#i>9OK|CUFabN{Qv!ls+@-X7l4H2x z0*~siu(m?T))~>)pan`G7?!sxejJf-<=@uS7%6TD;N8cex~& zCM--mC-_rOD+EIrig>a%Gb}j$ns7qy_2WI5c*8OBpl9vZz)(yAYVUtiWXi_?w-4&u zlUGu_?1F)rl4GtnHo!HT6#h1rqXG9{=x&)*`yC&2l<5=nGbB?!`bg)V`X^skB=cx< ze3AMFz#O;4S-13_A^hB8?JaqMVxncLm)8v(So}=)P5l?z+^oM|BaZ32=qYln_AXAo z1&X%{Y19*0iqWZ5Fy%pqS6sYK zTU&>jQXY8aK0bE_WMncJ_d27J+B=Xp z3F~Nf{=7My3%929A{(v+r<(!xlGtr!GjS=BW?C(og(Z&8)KRu?;817W18bURUE)E1 zydE@z1^-DzCkPPf9TP-AG>d@gB-W!q=fEz3Ad0z4Q6es|?)Um^>mzGxZJ->t|8|Rf zr|#PxF|R9E!Gn^L?oQjcLygSJZLnS+SCmEyZgk@1IY-22Xr;@QbTQECWx?tkc?TQ7JSz}M~AiHJct zuMQWE&Vne)5X0R3p+(+57t75eqGP0+z8g9-kSw*#vJ-bYgeOn3nFbhL$N#2xhXN;m zQSFw8tL-2+Z9^-OZm@-(^ISCYs5TqI7{NGoxtS3%7e-jB41G6ym9#}9?bQ-%&-jNc z(P~byAWck70;5BgrwTdl;5=f4`FZ#CO8@x8&KI;7Lo6B1WXeKmF2mgjR8L-?7ef8sf(+4Bm@$@zl#|QE*<@c_u5r00WYH)o=!66&!0UM9` zb%lxE%t{=1%5L9j_>?*t$lifi_s84dEHiDX%v@uLu?`|Z?mTA= zs@cNZ=IhxI@Yw|zP?cQPT|odD_3T^i$I^gp5n;8jY0E+5Zq3dGxv@dsXW}iSdG9x( z^q-8{(pY_Z*x~xrIF^6I!NRUOEzR@^;|V)h3>Fa+E)84!R9RXZ0_j>ZQeAJeJv|*! z*!N-_1**=IZWUw}Aa_F3b~cb0t&~it`nm3KfQl1&8@{f|8mg0;a9!C(1W=lN{87*K zo)&qyqFX9msCc9X$IA3+;oJn(a3m>*PA)B;tjE%2bY?jz7ne@g?45GBOSyiUT-y{j z#=~79917o_3ZTuvGDg)(R=c9jf8QPR{qglloA;u(ox{!XgAG1PktdFi8F%;(oK~3z_|MMi_|YVBh*LU#d0vBYTH1?D zP{F@DF;R1KwDTsp>&Jkv+kSt1b`VB0wCU5bJ^p4S=)qlL9-eWs=EbOpNmOP)R><-? z;gU7;_mjHs6+Vl$hilgX)15VLN-w0lrz~iYOMhuyC(aVd53g@hqQdv#c-a2tjwy;^ ze436&B`>z{?Y)PwMlI9|IRqC*utFtElZ))_wP7ZLEqj*r6RxE1CBG|&ag0W6#Q8U$ z%2QpjK=4!UX`=jW!S1-GUoId?D7Ok}xWYsHo^Tl;o&Vd0D_fn00Iys(3N|SNgq$ zw?jU4rub_PdPgqDI`P$wio|JJbV*j4UEwC*Cw*E2POYG1aLwBT{aRQQEPr=P6KYib z&bLig%--KEs61l&#GK@u@?rFSsdEaGC2czf>D8yC7YWsJfkEk9o!}8KJFg1T4N3%e7)r587V_2#P858#3CIR)lM z!Wz<4;7g01zBi9pW$OgXI-X=@l+ZpQPTYQ4BOKXW%RI+IowQ|j%4GhphXdEGYQb^C8A|34tT zS{mc0mWPGK(0!1Xh)>c=eH7oAfcF8re<`?s#OLjES$ULPQo$+diVX60$~zRq9MAX& z{*}e~eb4qDZZ%r`ieP)~y3HGh?1m9Gn+n*FElq0)paZsi)(n~>xA;civLJLE94>;3 zN9uNGnnFmro5VbMEwZ=o$I5fAg?#a z{sgVdciZ|ph30)LwM;=5^W{6D_U8*WF4LwCoV$bU>X}LV_aO0X&MqOa7^6WFc+Un_ zF`S;dBGxxTEQ0zP8{=0zv5s})Q@WpV(47;v3lHdDeIO;!|Kc|ie>{%T&aEW@Pae^s z4jogh(n~&yrBt}O>ixSX$fjW3>-OGyHN<&8UgKpy1XE%BWlgxL?3{f-Kh+vZ*Y0bB zuB1tel0$wA<=6z~K4t{T^IlahWBd{1<$QmIf8Jqb`CCXO;Ax(K(~hxK?21N!ma%31 zA#e9{G;qwe0#saJ;q){!!T;Y|749%<7TCE>Qf}uaBn8~Q`(L&o9*8WQ_#Tx!9{xu>I;pj0fo$Y4;$PrDgA$4-)9*q! zMZ!Nuw?s7J6>Ux@YcVP1rBvv3Q-odyAluX3!ZG-Y2m8KCi~^c0`{$d|7pMPhUbFdb z__seu`Wc0FhEcSaTH|BBpBi&H*aUCHR%)j?Zq7NQKp~gMd9^@(3|${!&r*`=@?ogBk$^ zj~u|)o6-LzBmVodnicaeMycvM*Dnzyl(Br4S`aH>*BrO7(M8^`i9S>Ms!~Jgr&>fk zXx|<{^@DPz*^fNGML5^Gx)y_CHG>$1gAwDvehtN>5UCYTEU%W~n(&e9@x!;fPb3HA zhnDXe3Mp5Xj*e#cZ3AvF4l{zU1wVNtS#w>PJy)~ts{)eRJXH;Ln!Vnh zbglxYne}X8wrun?J30icQ&?5UCOm~W508B@wnz@K!*?oM!iuN$($yg(k~#i?=2pBNsHb8A{e~YBh*O=3#1pK}-&_JTldlLqaiM zT3x}DNv@IJ-3hy%DqlU|*aZp9xhU6pPY662eeG=){zj>`+qT`*_eA=4O@5ox@%4V# zbpu4ym3DGp)TxM&SjT8Uf7IHs`Ev>iF+n}Ll(8)l*)&gE6gw$}gVJWr*x*ixT(ESI<+ zqY$QoKBCdwB)`uUFdF!Yfl!a_^T9{wdew>)Y3-eAF%XX#^xJCwT=~IHw@c!ApTQ#S zdS`F?suS;*KOeoW1z+*Kz;BZ=rI#oxNXZx6>fsScC4aU}EAT7yoQOO?aK6m0?fWfn zF5qe3@moBh;JN`vT#m}a!06f@DJ;9O=i5cb&hzg!&)cMRIMFmw0f2u)SVnjQz9>uo zM~4pHMdr3(O&G_j<@(3h_t~hdC%ZkcwOK_2S=Yf2j_&s^|M#)}=__k&BCIF`x45I; z7vm!l1I?bPd0W5K?HDZb(UA>0G|qBhIk|)s*9G*7|JfQ_$|=v1UeV ziu3&74fY(1BW})Ah>D# z7TvEWrU0D{t?y(w_)6>ny5405Rlc69 zS9slK73bt8W&8_VWyCjV%=PMw+E>;*%$7dAfM2RWI+Zrxf4mN*UG8kx#}@8VxCSur zjNIq80hVB%rT-^}{C|!3x9Y|QgQ@}L9?L5V_v5TJ~4gQoTFPj+i7Br{vs*E zVTO?=n%sNOQEd`e5RL%((sxV5n*bwluvM4teC`HQ6YjRu(RDoETUs#fp|Vqbrc@?+ z#j&I=Y{~JVoGs4mi}DRB`9gs~%0t^yaJiIFZJx;jS#gByh!rlJct~}XdUe<)UyqOp zPcR>hFZ+yPQ0IAAvL0{!Hx57hFHDzN6s^Co42Yn9G8puQzWD@^FXB^rW}bCCE#B`H zU*gT>Hvz2ctAvsyTeiq0QVRGaxN`~|JwR8B6N`XXaFzBev71(DopRj25(g<#0O#9% zL)fUQTjargi4W<$HuAEb$)N%~jJlue9l07cQG>t#-~(i9-Y$mZK3@O-1=|@yxeyG+ zyc=xRViFJ4QdpnfQBaVz4XDCx$!)=BIBf|km@%2T8i<-7f*XDvxvfOzNUpjQz(jfp zW70Hxh}tH7l*DRf6H1P|jvP?lEk#%jVPCXE9F33{n>V~v5^dJaG^bN7htkyRHKPvx zh}K(Ad1iV}f!m66EC(k5kRBVCF6k^IFCDCONq&v4(#Z8gj*#H^td5i?BgfhOyHcCP zXO`p+|8=E>6CiScPB%WX=MANM$D`H`SOX$_WEK(V8>dQBvSkY46*`ila{OF{Km8qV z8hBmUC4|`jl<6+8e9Uf{aYEWpVLOufzKT%#oFD`>fD>!XZ_wk;M;ycAh0m ztaf}dL;1}Fu}(xK~p8pYKL{M2q8V-$p**_&Wv?%S3X=k-9qU_~FpzwKkY*t%P z)mp&j$MDx4k3)CL$y%w7zPk!77)=xdrsq&`3I!B#Mu{y#pMH$fuN7IOz883xy5@#n|llMf(Mlf={j8*%&ahu zq>lCJehH*E-y;=1yMZKHPt^V9 zLIuvbWz6D2k%B(JkLf~<64Ng4yn6mkItvhHKYaFVV>?m1HQ}vbUN{*r{Tct%-ZOpd zCfBK%1Go##0sQa@u=4TFxS69OYM&@rL)PpZ`=6p#7iBdR1_n)>9Jj3nY(}&oY;4z& z@P^OPblJX0vfvD1yaGNBMFG2zrMY?|V5M!$YHsjk?%9kp7E-YA5>6;I8+T++Yipp$ za#T$!$2Z4_so4{5lM<;IWHMh9ifL)1(auJ;fLTvi$VgOTI4n!h;1MlOJHDjv=p0kk ztpI(jn7@Z-xz1qpu?xtf#yUo3c>P3>zIG`-y7Cw`&)GCQjd2_4MUvAI_~9dJ^>V9E zEB{l~Ytrh=?P~|I&jlhO=(cby_J@|K)iPb(SGCOaI?o8ObMhC14ZSZ*{nd0WEWbbK zsvuE$CcignTTdHJ2oNoZmOnBw(zD2&fVZ1`A%DY@WU}9D zLKA46R{Fe8qK&(8(QeE8jr>;dMKK^1Q$wlagMG&(vdw?ZOVkCrCAkvYbBi8 z(%otIw>@Uj|4t|UH@Vw>48va=VHANnh5kUlF5v?H2BF*=hG4-XHVS@7pwrMWa`PilSn*tBGI-hdC$u&XUQ980^%@pr>oqs}K~C%d=o-SxzW6 zi8FFWsKoaZp7)VTtjU^ilp?FYBuZ{du*l!e=sa*v#=jt^=sSkbvxiP|CP-InseR6hu2kuBr3~a*i_e@x#x+;&r*E^ zaI?ROsX>dt=XZmu{WFX^M}kD#@W@0K$WYwA3>eB7&YSmb~X`?HomNd(Is>9>z zmzqsodv8@jc38f$t`0tPoBB=9;!rZc8mzq%276y_O{l5wtoI<+rfzgT{_p4d4^93r zH2IcmyCOw4LaAq6X!7so$qIaYo|A?3xMEy}?bn&gVvp-0W(FCw34q^=&71o#wZca^L$yxG2kF z0{!W(OQ^nvZDJ!Yj{Z;l;^?c*M1ff0?N*gQgtTsSjg&m(ygOUdSF&^df9Hh%ykh`v zR2S;^V(@rhe#ni^)OVHfQP-BJD0^Mtn+EAq7f0d4RFgIwOM(f-ixBSD- zRF5l5K0Dn3#F_l2ZfM6f-)-*0iJ3_1xK&P=#~^MePF66{qFC(BaCk{G3!$iH4#{&= zOj+(uUlnCd0Vnw$ZJqPi75!VLYQeUf8f%t=eT+6XFDW1N|3~e9 zqwzCKmf(uJhgG^Z7t*6ddZ~dVN)y5*^rV>erN5uDoEnBNXRSqBNv%jhk|u%Jd2~Vx z-{dCE1q^T;J_3M*6-W{&Ctxjv@b{oChzwY!;M}iLkKfeQOI| z@<>5NTMbly@C0{Jh~u%9Nhhs^=IH-}FBY%@g5lso?kXEGS5NkpbKX1WvdWP7*#hF3 z4M~*R+19iqN%TaevQ}N0ozP9tMOUlRp6+(zm@DJ;SKv4a!V-)tSu28d3hM9bYy?^P#d!*42I}i6M8+AW3zj|7xxT(uVhT2J9ztFLn%xo0SwzRG8FPR)|%nA zaYti|TDqU^S&eS`Gm>FBZA-#!0}*by2wffO^^DT{iE*NYS{&Le`kOn)=`*X!hn$wp zKKenMdeQQ9mQGt26g|G)ebFc;uoH({Lwh%AX8Guz8} zmceSMMQ|mxMS&S`#7?eq`>hoA9r678)jxkur|9iLo_%b~pXS&j4)8Wt=jKfRLeCbD zXxgc-#f%JpmX_|h>A$jDn?@qJ7Z|stOPXdK9@jMJwgaj3yO4S^2J>UaQ4~VykSqTR%6fQ%$o+oa@cD6~s!zer_Du&*EUNVGi1+N9A|=>+Wz#U%j6_ zuB%`ZFQh;7=(^?Cn%Bp?Ps`%JECrk{+32zjJp3p3{)KxD3Mk1=kEve@x!dZ*i(9jn zGn`AafYP~EgFNz!1Jj=LY~#^64bxS_+3Wq}Uk1B`n&Co@?mE7zA5^-6hI=e!6c^XD zR){LD{QlM=yIjKkX=a%(3J3aHhU_$Jon2kEj19W18VI11<}=M(yk~I5BI$jRwshuM zPD(FRzu3`CZoA-n&&fdO!Y?s0QN;<9hBBZhpHi-H-qC{Z zV>f)3rh8vmB%S*?fPbGSItTX5J!3|2eTLUShY#=^-bwQXHq&F-Q zKuGldd$Il&G}#5O+OM!gJh4jaN{k8Pz$cMQ8NU43e=w%428&gK6Qe!eu(f*?Es9(UGo_#I(e(Yu@AZ6u{ihOQ6!h8J-chn99^7sdBU8ggv)8W$NMakQITyK0YmMSng6pG>Eh*f67 zil|Au|H1sr-l)K5fvxp{!9jqP)rc!(#q#pvMRs)U0YRX|tYu3i{qNqq0U zD7*0>)T1BrPiQ|Ov~k?TJdeeZGQ}U_^N5sI{7KBczzgH+*j2SrTOK}jPsiDA8q!dg z`9yW$h2+TJy{O5OQ`uDOfoM8M5yI`#X)wH~Rf-j^V26HTWrtcKj9xgjRe&b7uIJNq zn>=occ-_f!75qFv?AOT8-Fb}JWQ)PI)Vxj|X{-~w7D~lD?&6e`aw{^97qe(@zX(Bx z=;7GvtWoOtm5eP0XCi!Gu84R3sI3sB#PG?BU2dZziYTQk?P>QAn|LAIb7PrwW= z&#d<3F$V{|Ty~r-&0FDjmUcNI%2n7;A)Y|t^-4`xssq+E zXE9DaYN8X|$nOQOsx7^A3|?TW;X#4$fQvajEM<=9s+DRUS|*GgP zmu$89mfsHToG&}XCiNED@eTYA*gXOdhzQoK0^V~Feav;Ee%KZMi7V_d5H?y56! zXMzD?AtA6{7sE7|UsZ{z9o^mUHp2ijg>s~k-?4Li_uh2D{Y*C-dShY;sBwaahv#^l z_tZHCbAd4C#Z!$0Doa7%D}Q61Vm|4KZPeq)jUZ7)SdE#Sg1$&$!8e~do)1kE;l|6Y@VMW{ zh2F6gCE7u6=(qbRr2i(wvj>XqZZ|N7w<%z|_H?mtcsKXXg(N^VR;WwpbYkAuz`B>w zcH_prIk{5R@9on;LD6kJrdKVw+w=95uks#UkQ_ZoMN7;{cbILvF5}r0;r@Vp6KG?G zN*a$GTg;D!lO&&Y>#*}C4Y&|0?D?Hu+s5@rd0u>bELyt)QjC8LY)(JEj&Uo;DNfH8 zGf&LcP~w)oyf+!9%b7(nOK7GAqg?=#pK;Lgzc2mj%LjZz6KTN%IQgKC@l-&lF0ch!*%Tz`IdjjAN^`5k`aJC}&L2rdx=q2nMp+hwp7LAguq(;_3 z;_kIz`zo5Z{KAwpcWZ8B)bnPrInMHeILO15NqcK@2ZbN_!xFnq&-eSQq_DKzEL(HD zIcN3ndhm&IUV4z37r*;GC_gr5KXP+cZiI0s4&6Kc8X+L3o;IyI4w8JEY_;F^y|036 zdHL`!s-pte5U3Bjp`Su}Yd+a$k|}^IHC2OPi(?Y@z89RBHp^F@JL*d?sskMh zO$dm%|NKNu;xju9bKtHq7`%9sMvbTUdT7JtzZZ9snk~PW*;avVU2-pCPA-BU`i0EQ zl?QDoT$XzVidT&=f;q`@1d_ArMeng=xY|t(!}!0rg|%l2T2a#45cd^g8HqgGI2y&7 z%t@ET(*R%8rV%QDgp0h4Q?CobJZaQo%_Ec z7Ed4$;5B%G7mO)xJNbcW_ezGj-K0Qin6~sUU+ZIt{vGV?mVa0cQj9`3i#yUr4K+ygm%%Iq}eTy;)Ru6*605v)1&y={#N_Io-XJjn?oacmNJ zJg&PrvGW7PofC4}>U`S8)wkrk+X%Wz@w-ovuV6Yh<-Ba3@EK=!wvg>>_quIyHsz<3 z$85J{7jOL!Mw{hFN%tE&VqsqDcT_gWrSh5kJ{fAwZ(e z4Efpvj=JD66dhmUoygY7)hI_wS~UuHpSSNgk2FagGV}o6#e|XMR17DYcKohHiP=)m{(Jal+J2f3}AZdbq$ zpv9@r8j|fnp&^!Dur4iK-@+`_Lye}edP3Y3P3x7VkPNh>!skX&amFr|Z0lz+T=rZj zVqp?01B|}dl%VFWKCR;h3;8v~X2CgeB&F7oy0qI2Q*)+2mTBvl8{~ZQ4Zrq$=cCsc zi9^E&T>(0+6al-e>;B5{ctR=vEz`E6jOkD*HDZkkM4}ixZ2>b$W<=TGM=+h93El+> z+UMVA@q5XZ-nfA0mr^>POtBT8uB-f3U#0{fByZ4PHwEke@~UBussB)@n$U8(yDc8% z>*g1s3cf8kc4u|Vd$hle0}e!hsVcE z&WD-rf`HCz?ap2A!v^nzNpi_7 z6*Y9Ibl!!f7Lj$2ovV=Xtc%}ee@X|}ao%pyk~KUqfZ@sKydD+nzYZ0Dv%~!eii(C+ zIpX%7DN;-t6gWWi{1m3h4X~_*G!8v_t0lq5u!xK2y85y?a64#0Qh5wO3ysfrwi9j@ zT!Q?sqmx@yN<8)d2c;>R;Rgg-a~fO7k^_c7odMMT~t{ujNe zXATStGlCnDO~lbj`vjC)wLyup5?e_Doe%GA#`NgCC(;gCVa)IxDXpVzcu!n5b?p`z zy*nrNVnCaJ=$(O6b;)&bN6UmPIBDGAs%s75dB&f`6q2JF-WHX$u_K~s)`9DemlB}U zyy3dOD$%AoX0RzSYuLnEPM_vQJ0bSW+yxP!q_Pg;nPNI*;c{xVc&}nf6mi-(baj{2 z>QeE@ygOZk~vLGFg zwvrcCKIY~{m#=tJOr-X5qN1YmjEo^IaNO+_?@c|q?(;)te!f!7;MRWL^b*8l)F0?1 zkxeTcxO$#98!lY!!2uNU+i$I>}LZ-z6SnSE!art>Zly^Gd*|JWj|^KY(=&RSyHHpW*vDNb9CPN zGSlw8(IiW5)^JqW7HmmnA^Fs(s>)Hmes`npo7?D~%VHI3#F>h+M-QfrE|SO1qna5` zd{WHa3nEm%@uvQ(aYH5P4C_hpLn|&gE9+XZ=k1P$AyZ6#TR1U+{EUX}y=o)3Bd<$k zXT>93!w&dr9kT@`fTliEO;E1O7@+k9LuS7>1S1tf(lB-PIl3(;>HIVD{oPzX_4Q^T z!t69IFUSjOj?oP7stM8ZthC5>W#7gLP_e4GY^kf^S1gNzU3$*PRK$pN7)j}fO92R| z>Smzq(QJp`t+v*Bu(pD?arTL2$g4t`!zf31+iD$ zP!;H1JTX}t7p=Uf>f*|ahC|gj*{OPfWo4r!RWpb6%7sz0NlKoUlb&${qam)Zr}T&2 zB*`%%g@WRv3(n32B_uL7ciD_XwmOh{fmxooU5ZY@$E67#Bi%?Z+L;0}`~U$So}<~r zw5S6-M5YVv4zN;%wV%h#sI(+F(c)0W8y(nj<^bM1Iqc<T_REXOsUHLT@&Kd``( zX=C%HeH#6EuabYc|1G{s#mTxv58ZFIQP|Y#aI$1o2{LO@uzyMLKLrHpJvdwRUnR-~ zQ)2kFo!tTVust$rIW-HXO~;mDwK@eR-&b|Z>ueLLVVNTjX3_wN3&}Cf$}zm{!O*A( z+M~GS=@SNu!fsh)J0vDHUo`A=8(h?wos8AqMzj_H`bXR{vrRygEc1%t-)^+U{^m{bR}h}#uY`ttm}a+w%v0`Wqy3~KMoub zBe0f$u3tDjr0LNW1{H`6UiHR-nFRdko=6(GLAYCjV+o(PuHCr|TLT+#l9F+{bfn8p zzeij1#Pb<*E;MT3rc>#9;iYHH5zMoB0VG`#qNkAobg8_jYYSEZ*d@ic2hFGfnMl+W zrk>tY{tD8G8C9NbR_x=ZycYw6c8h83);710RStIcT?PX&wAk2K-s^^~@GpWcM~SGY zsJfuh@|bDpTW4pqCB|fpM=E4bl6H#yPp|GJeS!~Dv1uwtwa(n0I3n4yB9Y#4yMG&S z^%4>i#vgTnUyvv^6TA}|1k%S^;G)#^Jo?$cg=?gkju*gS-c0aa{!o4a>xI{!D(p`D zm5_wGu#ZUJv2{lMON(@fVRrIfegV)yq>$GZ+!W6e25#7+-<4gJdQnb`tqOW|Zken(vu%b9>-sWe|tm%;#z-dIz5plL622IXXAQlut_TmDW8s?AdiJ^}ly_a9~uY%!Vji zXJ`q(-3YH-FORQKgOoa)uH*ZD(6v`Rex&D=Ngg%PNzTlflK7;W@80I_$mRbjlUa7T zdq<#cQL-W#s_wUi69sGnt#&p97$X*Y!f;$aR-k=&Q@=xLk9fPECb28Z76=$#nnjeM z`XK*RGpvijK3YnKL#$k%&#WcJKXyCknBKL?x5tcZK5dvgJ|gi#OQs`91Gy zDv<1JG}-Tw#omBxMf(p34~+2DZf@(={7&f=H5zA4vy{4-cR?uB%b?@>tlu+x&`ZFK z08v1TBZfSxEz@-^@}B~Ew-M)x4YxL0J8rOnCk>xW?_rxuJ$u*qLg~&u6(|>K4ha$4 zS=8If_Yd4x50L7C+v%iZkt^$mMqzO6^Kb&k*kjyobh`Zb@`FStpjZ-`ovCqMT0bRM z(M#Khc*44IY--4dK{!b3%PFK035c~_#!xQB+1#D2NFcYI4GWkiD@?1}Bdb-1wi|)g zfi@f|(+;wTiYp21DV;#6;-}^^;u$|{^5T5huSnb8@D5;6V z<%-k9lK%6YJ~ut#(xOEs!ui{_hCa40VD-)i)rCbeiszTdQ?~>-`niV>+NeaO1Ch}1 zXk4HVn~dvMGK%G+t-7wPe&_gpn{Z!}3VzJrZ(!b${UsL%{ocDh{|`;*%31^5e1|-F zxmx-5bvSMyy6MDCpBTm!t8HeYDh0%5vT8S?inPk1(2IK@?s~L&5yzX@Q+8^y%*|7N zMPH}M)y?M#L@H8BiEWARfg@0&TP}JgO4e3uv4ZEiNM4dVQ#}(I8-{UpxL$o7H}AcLZyHq~a8+vS19)cg$^S`mSEa3&Uco=y~suAJ=1ezD^~jPot$ zinXi3E(O7yn*4I(iMn!NWkF_fUkN2Ydz|^HF#KI>;f@+7t}LplY-iN<(=&CSNH~?s zGMx#>+yI~Sg$(5^_I>^{+bw`lDjR6Li=JtT^e)DwKtZIJ_GzoM1?(pTNhk~Bn zPqlBfwu?BHQyWAtQ9*O?dIlUKRRyT9SG9rbXm@*Q?-QcL7+H_CIxO z-l%yOr?Mms*xkIq!o~?mvERytlTTZA8T?oNaO@x&K)y$0XnJ6)e92ilMx>CNRL&y1 z@uTC!QrsRUVHNYD!w6ODp(>|H)}H&N3T%>K5Li(;dyn|!_!zkAS_jZ=njlD$;ajB2 zTndZQDU@0NaDP=1%{V`ETutez{-wOsQMZ||Jt|T$VlV=gED`z>cuXzgPh2ID-pEz_ z+%W*b<=)Yc)dQIYN_%7J;i!i5{0{xN`$3|$JvNJC;d4e-cFq2%`N?@D;AXWh48Wt? z(4!MCkr!AoX6)13iTy*ZlkxYvB_#7hL?sKeVLMAc!`02%FZU|F4{4-rw~84z4OwMH z-7ud#$p0*_Mic97C!V0ovmkg}`S$)2p^!9}0?Kxxc`wi+({ttWXH``mcV+rLk}fr^ zyqP@4YsEfQ*@*9;GPyJaCW0yA3PzGCw8dJFB?Vp_E<{WG5iU?(m$IKVC3)!mk_7LP z2!65+p=wrd`ca(j!%?X+B?KOf1n1Q<+An9~^vbo^HlbAef_B&s#v)2}AFrlFm*Ud&}crAup#5KN02BH=d# zI?!}7D@f$}no-h_57WxnE)taVs%BxGcf_%Uh9zO4m3%o&!%$gz81It*9;`+c1JslK z8QbFCPEE&w$>;E^!sqoSK;iWEO}FVf+AcSMi6s8Yp`F?_O3;eGfK%XBX!dakf|B3U zA1dZH-LZ6D!-GJlfTg zd0MAs0b;+-J-OI5&x+q9-MD!qeV~0YJ6)V(6Vg|YIPxKyV_Y221nw^@elbArUGT6=6+XcPjCbd#^9`D-}4EKnIu3XbGu3@ugCZbFUnlHOi_c z$wCpp_VM5+(p^6maLlAP2BpJPu;TfrO~+Q&R{``GSwU3H*-@wYZpP1DQQvgslJ7dgh)#u|g*oeJO)g3os>c|Wv`G{6-9R#pqhXS{^K%n$qQlQ$22 zslCbPC-#NEa3hdLbrEcxuIbt9mi?3#?y~IKMDLwIE-9Iwuy`Q5T=EC8)#oJBb+pg? zUJdy$i4?0EBq-;DT>iEyg{r&K($srz`YO07F|@Tg#?q_#ZR2wpF-%=yv~uN7<3C)f zV;43RyPEX%7i{NodF&T#iGPf{Kk}}6EkZu~t{`2uW!LzPu=_*24%OWkwB)`qSZMmq zhqSw5@y3RT^+S-|mY<__Z)%Af3>{754!3aGv!Wf3q3E13_r|^uRI|t%XB2iII^M!9 zEcE+VnP!c3a}z$DdNO&reBriF2km6-&V-!cA^uf zRH+l{c!t0oNY@$_waSA~+6m&1JH0#`cfpwCghdWidxMr_fee#IbL}?&` z2`uI@g)1)28a0-BpC=Jc(dxQ(UtJ+RmRNq#IPqg7QC?DUpsLt|ddCH>*VUAy?)Uea11p~3iYQc4 z>A^R&*-v4wi*e-HeKiqwEBY>xDfevm?3125Io#1RniDhtz5mBsnLR_$;eZ)oU9t&L zp*U>G1@99&*(oj!#wJOd$Bz^i?)FS?xohNVKPo07wtg(ERDIPVfEUhE4vv_FXy*lH zlo4u1k1&d0!i^w)hEclPUPMggW021b4azQ#%Dv-BX)?kv&xCFi8fiQd-ZrOz^>!qF z1fJwQubgY(pH{gH)6ecISw3!HHccbI@a@n92D$R^NgtM5TB`K!J|u>qc&FxGWLHEH zbs$W~IKNOo78P6UAG@>U2d??wg`k+->NSO-s!Z1g%gVMz31xCns zryduK7HR(>(gGb{l!un%8&`TxjXq5{tPUt=HHNp?S&Ntij$hWx8;6`_91^SAVUdWI z9cW@3q}}n48e|Cq+Dr!FW0q(L{3Zes8Q{e}BQ4?*n88U9n|U%PNF~liGprxQyL|nr zZy#r3@XfmS1Ba|+I?eGr<~_U-9Be*iQQe<_w!9ykHqbkEEwBVmJ(>b3Km<7kh6+=hqlY>k?6_ddq?*_kOp$EF4yI? zGqPyf3tF^8m)?F18aeJT8K;Go)EK4^n5*yiB8HQ>X=W+XVpIUJ9s(S{wX!d^3ZaMRWm2!&4W7h zgd3KcF;YnJ4BXcXs_4KXY0O4+U9w#Gqg@;H`G)-ieY#5su&WD5F)v=Id4H5;CMYrQK7==4 zy3urn458}Z>Tcejh4b5RvQ$bn`rt(s(e(Hv%g$VeM9trcwOr`UP6iI2^pK8)$j~E- zYhCAL;>_26bEVBI$g*7r9x-1*>vV-wzP<^!;k!V_Mu?HTtzX23Qq0%N7R>E$@gpMNi#MzYE z%qe{H{wmlQT>OGouQvsPT4LLjV7mrMj#U{dKFe2cP}Pzj*SREz&PV-~4rjw=BKo)} z>7&*K)8oudE0v8Rg{osY-4f#aiqEoG!^7I`d2^2(1=5U3+Q*6jTf9}0PXX=_w#$<* z(3E|d%*xz4A`pCzT68F#-R7f~%xx}fPB`k$n?*-z;S-JhvP%VVO{eFW-d`as+UqPs zEjJD4YJ#^2zJz=DI2IOzfP+CAq3^FVk3{b{U$Wb29>=db5is* z=vC=}Aa^hX4to#A-GPm@!spo>I%LXHgdAItmY!%s&+{U-?F75kI!Q zuZ4Utkw9;{s%EeWE+L?3sZmgnr(E&Ju*$c!<5;ileTG-~<=fLj!>Iw6%RVBs{z_D7 z_G5F!(A#TJSN)XQO06=LHemlrtA75jLC53{`0W37*Q}5{EaVa{+_^8GO63u?K~Or~SL=hE3});Y8&*l8o4I1cIx z{jisIA3tR;YK-rSnvTVJnGU~6(K9oay~rn)MPN1_I0IRmoIjT@#gFi`zrM_fz(^KF z6eK6~kn}JV58p!AB`NwyVBeAc5D5tVu-b5j5$s5FL+gp8uIK)>HD#bRzTj*G&An5^ zJD0^?6yQbJZr`*Rh0t4^oDFD0AfYA1_Q*m7(0HVA?R_=i>e5N2UB@wdGWqF3Twp5G z70DXp0g>|s!7aGvslC>_FkMZZ!8WP0tW2+nd^P_S!DFn=|Ls09aIg0VbX={nD|Qg6 zAki`KG|X;kRyGcf$di6bL47x~`^#WIV4Yd|9Te--3CBWr2#YWXHPPIJAYCYX zg^jb9pQB`C*2HpeU|WCzY5_K9?f;|co1!y|mTqI)cE`4D+qP||V|HxYw$X9E*y-4| zb#u=7@9TQnV~??FRn3|x4$)DgS_z;09aw4Wh8|bD@Mql&c${MIKhL*2nE&%*ov4-a zj=Um=pOJH4&zNez%^~at!BE(a(EI(G16QLqas#ILX+wK7dPO!pJc@?0K}(rIwYC8! z7}UF~v6!wfU{&asdU2;PyiqsI{hOXuhsXoM9z0JZcfw;+{4vV{5{T_j>g0prdn5Wh z-ZNj87VbJ69AUWj6njc)sZ~T6ys-}2ON~==vF}PIx$JUgZ?YVq@M12L6?wJP^ZTo% zZk6Hct+;0VdF@CZN^nW|N0?EK0v0uHg{y$Lz&RrrUN7>hyDSY0toJO_{RjN{!eFYT zdp6mdGSo~8dl2nT=!0w+H9^UT`*tTpgn9vqys-&Lst6ceq#G5)`b-K!+jjP|c*2<) zb+zIqUG7j}t#%Q#wV`p;8J1?I?TIn>-;y>eO)5?*3jR-WhujRErbFR%Arr1W!a~Xy zSu0a=bW#EQ?+iHiqj5Nn!^CCK3S@3JI(0(EVPzzWd@G#tXEA4Lk3=>Jh`lCJtsCrj z9o(}GlZ|LZO^p)5z1kEj>N7TkMxPAX>=9|;6h=g-HM*HBZ)T^jRYF(6FI`!vM%EY8 z6QO~7Wr$!lUYi_V6&6j`n#0%2Bdw}7v@xya=qtH<22;TaI6f#{5C11rD!%a1H-%t| zi`IenY6s`0n!4-3(wJ~}@KA_}WhtJ?9z(+t!_>v`MK$~Mp2v}%rh2d(BLmf`OV)^~DAmxg!ogXe&BGltEmr?J&l;DI4 zB{tn%Ok=cdNZ@Y*Way2*Z@gBPL>g?J=eai%gGH60`X+Tds_?kuB*DGxO1=uK&+`G6 zhzR~ase#K{4t{*C&Kk#BL*;)7cC?Jr#WL%q;Rrg3to@KdQUcK83N`bBEVl^Y)-MOh zeL9_H6DlXHrwcU|PK?uw<<%pe&t(oSmlwUyOA{_gaoIO$NGZ2p%L)}CNc4i`SBRIN zXX4g;ON}`m#nqANe=?sf5Qd%;CVqcjj(gB9r4>LzTtED!x&tP-Q%_GO$<9_gCOvGy zAxAwxry^Pnwi{lE1*I=d-YCP?$uBJhrB`xtySz;*9N?iqb)m0e(Ike3w9^=K+P3k9 zC9n5S2#ju37d8y%`9rsNund(1fjF-Q!(;WAGG8?2QJna2Un7~H-LMo412{` zqkeg9%eK|OI#3*aNUIC4U&~;dcyqy%kS*q?5&q9!Lmd}{rcAYaJ^udq{J#ghAZdia z69*6c0yFa^vWG`i6uGXWi2>X_l5~jJTZmjac2y#>Dz`B-B$pJe`3SOTixlQ3=Iihk z$pg+HB?|bkkydYyRXcT`s!Y^H-fmVmpyw76duBVPSSAzZr9?9pKW3AKB%=*GhPEym z^UE&$qoug)?1XOnYTQma>eAUL=rss?;=#^J1&h9pZUI(CH9PJ2RhY$M!A++zlOo z9gmjSq${#J<6KJxUSy)O6{-u9g+S|FL!7}#93Jngb-d)89eJH%R3Y{YHLl#4^?_v6gCWb($grSP)WcQDVejVd8> z6tdWZ8J2looeC@M6Yvv$jlFffU&gKPFAFGOc2LrAev8)j*RfixP690y29_xS!i|17 zBE|G=)_~C=FNyZ;Y)yxrQhg%W|{tD;0=$Hoas@ljwA8h7x+WYtWh}G2yVCs^m_HKcPGxPsPdZ^_Ek@=jfcxHfj1k(t$rpl;=^20>RmQJbFKEZ>z zw}QGIqBu_#Y3OtlNtC99R&L++sJGv2NKe?VEFSw3vo4gMzYLvG<}fP}>p}jOm;Rn= zx!Tp~q)VXLcqvHSDCIsJq_wJdFzR^;M|vbn5nmc6Ldo8Yt`b5D2R-#Z*snE#An7Ms z+;?>LpZa=FxZYs6{Gye9bi1_{=$nB0%O9&0%GBwlT{h8xc>EK@NLDU;XYa}gWQC(_ zO61XmUmiQVU%2vy*_z!avQekqY0d)5f}|P`inN0*8DWhIB3-GmIEasQr6mbqF4m12 zXlC}Lam#PC7pDD1464#y4-Mh6;FsWx?+?C54vRcEDT}04vPI>fw%s5F;j)4M&$g=y zQA?!ymJOjocsU9Hj(c)qWY`74PRm0~G_zNw+s4+CMepf;*OjZyVy}s#Q>!27n-N}a zS_sYn2?1_eZn|xZ!m=DkRlcDk=CGMzNfCKyk{lhOY@&7g*9pAaY{p%_FLhdu`DbX zNaC94Qg!6(R*ocCAyPxIuoJviINbCc_DFDow6h)3n$+O7EB1##aZ5io+gk3t#-w(w zW||*_3S){qV!!rXQp~>(l9^>8fownkzf3fd)v$G`mkavPEeG)E7EkK|HFX?J+Sd>B z_z=`@b=d}QnB$ZBh&(E| zv|+Aih1W-m{I?2+6J80EwM7u%SGaIBX}haMyV|g3#iN<=Ta$svz1+Ai(X4)CjGjEd zBvr=aeQT|48vex#Y%)1cJX}i1k7<{ScW$A4lOvVq(tbiC$9NRl1_oaf(d_2S!{TaL zZobPp)i)8+hv}qyUwn-A`6})oPFELVo^9?a`TN;Nrmjgww=n;Sa(dORQ2X#;6fMJ& zY`x%hc&HfOi){xd%Y%Ex9bfdb4RHsS0>!)mK|P(X3LE?Q5}a~r-zM*5%k9N^|J8bG zMw2zfWFxq?muTw3)g_6V>dBI_OiSMWe2%L>yWfmABbDkc9lXUE8WyUm|gD)$a;7|a|rURxkEQkGr}%MUmomb6>Sz# zo_n-fBNI+If4**9&@vPREemT}=OB6h$1Bc}Dy64gHRTV_XzIQK zkLTFlm6YN)k>qbBGBG7G^cqf_SP6o)#^tVk7xNw-7xS5`m+Z})o9&CWwa44(byVBS z)l9?KVADC(e90&jDil#7=7<=G&N(i%X|;EszB3RUL5^9X1U1a^+RD1#7ysw2>#bwI ztz)|Ba?L4Dh7ZIjpof=`X--N-AflOT`;iRD4UCu4z)g@+*jV!*%s&xKtM`^fUG+KR zK&g0q?)@y+$a0<|kEZ9NOGxL$IQ=_$8!CyeS1gP~ev2JI7w<&l#QU#K=~b%mj&{ig z7<6Xk^VphAk?iS3u2;CP94WCtxu9u{Mj=(fkzs*5uk^gt}LUaaDQF zxFZ+H$D1g?@;3zWWu|%DJ8*E$lxv9od?DO6cbG{+;Vyb=$l!GZD4=D=D~!9mIDfG>)^ArU|~~B&l_5o-<8Sk_>cl^?N|( zK{y|4Ry~n*q#nJN2=J>$VF=mbGnt_f0xyKVnANe5N3aVQyPb8qpE2Jyw0AB$jGo^| zrhcu$%>IqRWKw671#+79j{3cuhxLG`RsxiPI^9E5W+xlbcf$j@SCI{C>ez(XT zcXt`!5Ng*uevuxiW|eTEGQHd8cgiU$BdMcSMCtobR4MSn_y2XmPoy?^wOT!7Sy+Oe ztz23P{++cN(?6%@00y=S=IP=Hhk(seJajDCIMyh^!G8WP5}Vvy_V>jL9t9!||3KOi z8#}PDKnivN@C&;cqhKpA-_j!}znpv-v;(9s@QDr@Xk~8LWsCk9M*ArSqn-5)^YE;{ zUF1MzOH}WaarF?2^RLpZ>?uG2D&D-Pby;S_!`KuC-qAKnOSU`cI|?gnQjWOrDH@Tm z*1534DKS=q7q1TbL8dY>p2n#MTLKRxC1eCn1W4)N9a(o#!+g=!gmsH46hoUklq2NP zVW2eq0S`=|QPCDOd?~_-tgXN+7B#mzcQx_~wp}EDDg5vyNjR06e`?>9O>GT^ZHzUe zvv|+GCH4%iIp6U(w_mW7CD}w$B^Z#K6oD47B-OMN{|jO&b$=RA7kW+}_uhjW z{+C)O;pG*KGBWw6vTf{{>sNc6Q5y-7a(r3IV~g8fO13tYLztttEHfZh~%xJ zcG;{Ff7)sdXTQ}JOAzWY#aW2or|d)3-E_v^QOGI_cfN{TsoI7=;xKlv+%gC=PQ8kS z)5Xd6xhgQ%B8-a49@ax@8=Y2DX$>y4Y?Z1wsc!jV&*#YN6o9EY)_pAu*)vCPikMv~ zFG1O0;4^IO-l5v^H@_a7^6JBGFQlQ$)^m?D>;PR!7PAN}9s}O0g;TxR_CfK}#L z1avmC4lcn;<(|lixxx42@>G&7VOj6yyW>FJu=&4zR|pFjJ7)~h`jhE+QP*Dy ztTHkS>G%121^m07SkZq-A5jzo44VjOU6mb9ZS!-FaX#1c)++8ZOyba_`w2(ZfOX*= zw=Z-mQc7Zf=m{FX!~^;TMyUq6f+k9q8G(*MSvijOr? z%(}9aqIfaIlccg)#A=8d%_ZKdnFsJpuxc|Z^{Td}EqH=n&+Hwz0@WB0K%)T*3*nv!KUsY*rmu?_@oh9nZ^xp_F$T;VU4{PfXSYKDjsjkX#{IWzc~Kp* zDExhMwdiGMBQ{B}9L`ijXH~|>ZL`y6$Ke2Stc5w~bn1~n8gk#}?&#IPKMZ}hqiJSZ zW{Y*w-PE|SUC+Bey|*)=q>yP(l}|7lMuF0V1I58J9r!GLoZu2Od z!$*ib3b{cUP$xQ@ijw-UEmU}18E_pXcog_gm2&jZ+OeJ;-gNu**i`eMI@SsPQyHr0 zc8tu;?klym=)-K=Q-V&%vZ$jjf|&l=fIhGHT3?Gt*Z@&Bk4uJi(0V5I_62Kc!dLHk zKn7>r>226E44`;K zGVI1)OB^u_4l{wA6Lgq+LG$inq)MZ998DNc2P5T0^lX*WbNRf_t;I7H!a?wKh(9Qu zIg<)ZFT2qMW}c19iR5wR0IjPGMaO>`(ABsPZM{+enq7cdIrZu<$6UiVRL{?6&180W zu#hTV4GHU@>8q!xyxh^grtdiqzz+OM$KlR;aNX5F%YkN?G;g(#v0MWJ(h7QQD>R}( zrYQr~G0ZOFgB5pLN^}`!Mdv92iac#C%}b&&%5M(}bMG6&W=dUBhqtV)4(WHwVQ~f)2B=gw) z(X3gJ#QR5e*#1*i-?T-4DnPD43#)Uo+@h7IYXiBT26SPWBLE`o+sSdg97l4xJ@?*? zI;N&wk_xy~;V%&5WUM#m?Qh*8L5o1^r78(XJdAgB;Kr^mgf6BmrIm8aBi%}I=GB%` zwK&j+H4$SYA?-5!ml{2thY;9!0;?pD9iuSOFslA0Xp+J=9&Xj_biMYaMuDym`yO?# z9LuT~r7Bs8GGUAF5KD_Z|7;|Q0fa@+z8V)@|TWbbgPf5DG+ zyXTpQ3+IT{7(HxtOt%0O;wfMK$TXd`Rn{lCRJ<@fLKi^fNO_BPGeB`}>{c=(=_=FH zd4YOPO@lio^5{>j&Z;JRawrK3MI)k`nktuDwDU%UElx|0&t;A+*W|i$3+w{mys*eJ zfoNFtP1$b{;$HU7tgV%aA)blh(Az42;Qc@tvVymnn0&*|*U(x4Un;)`l>! z6!H6s4c&%F?rn2o{m)RZgV(t5<>by!NBr3^erE!Ry+mrkaBYwmkCRE*d2tn}7V%uy ztEINngG<3~d}|sxc;Zytqk#8^-Rw5>iiUtz?fsZKrEGr3Qp*yZn`#+RvHYtGH4}4? zIu4@?5YaN3T^o%iok$urW&@Q4T@)B;x`teP&XKd;Y4dZk9q4>ePLw2%&MA%WP4Y@XQ#n*}8oaDp>)ah<^f3^KzmD;E4KPmfZWd7TK z{kLv?V!U7~d_BJzAbuO1)D+@-zn;=+8YWR^4dI407&Z`LaHG~v^AiC>X+fm(B*nk_ z(dnjr=ryiPfhBSEKfsE3>Qs>Pun0IcnaIf}%gcwAsg2NWsog z!IZf4qKmu(1oYbtGndEU{E%I{-xMY8;Ll0OHI!qNMAeT*ai9fTy*X6ypU?2ok;tJD ztEtPn##d+@`{g1iK*7q;JEyQi8&qqr(@K_J_{Y(e1>DfwJ@i^6t5t+&`dcwz<8!+) zp(R8NCWZf6fh30j6wO~eVQmD~a5KdQw_a+ zU_8&p2Y7TKRQ_~=FZuHqz$>nbkSgJ-0$3uJsARJWnt01EXoBqHcbro%&8ZH6wlm#I$xa5Dtt()nkz>zCIN zr|;wM(oNjgPZfS%Wd*YJE=sL|R$xQp;UQ%u{@E97NQa7P)HI?{%kO!6Pkh(4)k)== z^0S=uXEd!c+l3`?X#PrDJ<^U=nZq8Ake5n}ub~=!EZhCjW5aWj?jh2oBkbuiPtvM6 z7Lvr6x&a`e@E+Sxb{o`+Zaoe%_jh|$O~Kh|I8r;#!TCxVXnb=mIq^JXQbK{=9@nRy ztk^j+NcSO;FoC8Vf)Oh@oHaO#SdpGArXEn?qG*-M(JlTNKj+P;Zv(K?MQcZ_gnhq! z?4FSaRF`ufyx>PoV4NE1(-DO5ezgL&PL+BH^A=_6^GjWUUh}N+@4{&dLHm&7=x6{B zYoQnd)4|rU_1lTfuPl~xb@rsr{f!$8N;p!L7egY-{kMuV(_Hy;z4g_!;%uxlk_Mcs ztZEIuic$aH3jh;zfljFs7ig>B*CbtFcD8~&{Y*V`*3aX{h<`%~PO`QmUOS@Hdv>Xg zgJ!h-1-$QeO_Fd#nnNmkuX`$XZ8246EnZ717xIqaCSD(?MkAm*G=PKE!}9rnOfBzV z?ZNJ-%#Ggl3t;L~ij|z^sJZJgryUTTYk#)TF`xZZD#7NO%Ni!qEQyP!zs2n zDcy{zW54URh^W>k_@BAVR}*&e?Fq3f@9pV-L)!mNEn#`*-gZ*n)AJ-3{TcCHL0d3s zFx>d31vdqspX>!O%=brh4JsdMO%-PjLO;}}{~ir`hhfvl7ljZV)-6uI( z%}v_DbUi+lLIoo57!Eeu1PF)6kw3=vtyH|X0@*Sq2v)9Sn8pn(W=Xji%QE_&lm>%y zO;v;0&Xe_Tu{^isqd6X$bVSFmLp-RRA3kXj>5ZK_-lc=6Vjyb2p#~xUFsJ`*RRy}Y zUAqcABy8GIiUuR4tJja$CU1h{-(AmVZ3-yU^7<`(`i$ZILvjFPw_SF1hnh7F&rI0S zJYUb>Nfv^QPIIO~q2sfEl-(}7X>Mo~pmc40`Eq!gHwNXtl-zvjhUorLvL5`&73$f% ztDI)b6DIA1funOHh;3?idDxmHv*%@dh6PHus=2Kba)wOhX#|N*aZdh+ScQ6~;Gl7= zNND)BsYXa4W$o46j_X5QGUx`GaFgK{d;U1mH!q2a&oy;bmGblf({g0g0-~K4{i%EU zQO+*PZtZhu^!D>;KscAFt|XHjvbX%H2}Jg7A^jKB7gXDm`d&8{-Z9rNp@Tz4b1Y{q zaWcxi?kAbDvt)N96lE-OgiK#ueL6*@FR>UW|4KoV=ZrNMt=AyNhSt>>#rDT~>0}5Y zy?52yZkFh5z*Y{rhobTS;Q|gI|c#31(@mI`tiXTESCPsovDDR2= zv8DWSYjn}z$|9QPJTs`;3=fGV$HGaJzkJp+klO3eTL$l{R!epQJW(=<23bu%-8V%u4*HBy-?K0)bF%>4feLL_tn-*G1I}`SVpWDet2$Q!QX9k3wQocZ79SaD#CJom*Xej|bb4sD$ zPj_IC2X?-_L2QFbq!fPY+u-)GKo&j4e9iPValNI96c_hNT8+ufhMzLI}%K`d|GoUB3DRjeW``>$%MM$)pV)0p5D`6a~P^5EXE&&MRG5 zE!UP3`?rEYOF07%`gCf^@liQF5A7Wg4;z&g9TOHTxviTWLI3jF8qiGb=_9G7U7b&2j& zk8G;AgSf6$7gK64)t?`HLWs?qd!QUdIzf`?nyV~jE!-$a13M`#&$=SGJw_izCXRiA zrRSpH^suX=X1k2kgp4z`fFgRD30laH5wnJ&p&RKijAUF`2Yo_YPixgkkN1$-(DP?) zb>s*&=o)$Rd~Z$TR&M4VigKV~iJ))ouwh{ZzP?o<{u*{_2xr$ZDLutgrV_;RumFq) zO?Jm>P5$Jx|5pfADE3MpoVmHEJI+*%F*42V*NhYR|KSOP2cA zb{a{AiRLa-;w=3zZLjZ8m2aL{Y1Jb}+>$Qu!`9Qcu#y38l!WA>A&m@?4Rl@fZgOFP zK3l1yBsNH!WWyWgRH!36sg4=~RgicGy6o=_bH^-ET3Ph~f z`mv6G7h({a<|l19Ry@I9LcijVD3M|IKw=&XlNvmCi*GXlS$=$TfLhF@XBo^`VRoaZc&At!A2M4yYv_7mT;R zc(SVxxJ2s^-+Gs5g69C1lR@6db%ZZ7f4!Zm@?Tk2a3D1&kWV;ZyyD2*WC$INc1nRV z1aq!u?+|pUxq{z^xB*%AUwBbOz^1yQb<{4Kzrkg<>6Ku-1r2AQQOwS7{7Ln5;Vf2q zxS5RpcSk8@&@~1y%DvSHAxU=FBXpX!NmbG5fXCFT#6{K}ezN|Dp4RztL3@a&?o#rQUP+R8ClLA7rMT zFME~beD$^pTQ;3Lw{d-`dxUJiWxc<@|NWuu)0SY<^BwQ-f7M5$bBT~*w`AE}{v?=_*K&cU1uDx6p7a6JG9G@2Q zR=r);7;EyuxQ~h7lWxa+^@~|cLWK>vAJkr!t_w91OBE@w%bDM+5TFE%n;xlQp<#D= zTJ>v^Uh$L|58csDaz#t_%tGXdb0|{fC45y)cJGq2Z{?XujFm1Q2v|;De34VEm29g) z7tsp4k>ZK0ape*I55IPq&58Ppq&cjoC9~Q`Dr`JV+=?7AkK*pKA|CJCGKZ1wapApKjcvt3-Wv;kqZzZsc@spxi zf|6w`@?(&wjgUUZ#qj`@NAO7ZstptCRi{d^x_zI?)+Alw_iHF@<6Az zRYZ+U3?5+2Jmj1@PNG>>r<0HpUQb90;Qmbp2WSdoURG}p-{LW(_5Hh0rxsegm5EQn z5X(hdxl=iwdLSziAjCB5x57F-NJ+r5%wiD2Hq7f9`W)?*Xrm9KepG(lGA~JxHBRNz zJB{gY9kJe2@f$2pVqxJSlB|ZGo2}&3Q2di@iHYw%lnX%{TN8gu?$p)!uaO7?dn-31 zOX<5|79`LizE)ajKl5nyrhJl@m9TLIsNLtnVLG{qm0xp-0WnEe_2P1sUXWS^X$n(q zi=;p}8G@~AQ%b{P)7qIf!q=38drHe?b`Ib>D8gWg=GX^k)DGcz79^Th_pvmqP%chHdlqpcCQL(Aj3*Zx63hRYcABK zR^uT(vk=&0c-c(ZExC4R5a4 z#lL)8zLoyZEs~8s0FNi1`wVsD=JcXko*#~~Epc~K%GE3#9h^(OAD3JJ=mtU+SBDQ6 zdMkCqWoxj{4y6A>+m3PBj)Vm|&;(B9z+5ZH3@M7}g1fMGM{nBwm-?ztW2J(1{+o+J z%gLz2)X57~v;O45+uzakmPUc%Bo&~uiw%9M!Mtsr@V4B@gm5rp^j<>FbY;j0e+k^m zqL?LIZbQLXC*SD>qdBKl?~X@|dT&Kz2p(3B0&Ig`?gWy516Prul?w6AO=)1>`m96O zDSO5!yzrn4`v2@;*hYMsS&}KDD6GQi>Axs; z^}!+krf<#k6iqwUvCI3ZHt|U?BEuU3%kD&ar(DWS_@s)r(K3F{UtXhS;p#AhGse@y zGwn_%5g}0E`%Q+BhAM`oV5&rk=9#KZ)Bk5wV!SvFH7>BLP9E)I ziR1FQ*ktuKghl{xH_&z&FzP50y1UF@r|w_Gt1oIUldl;YwA`ZPcDVVB>X5!YT1Vg(%~3 zHHa%HMKV`wI_T%pH(z-vYVA!b*2)E8RnK6}pu0#rdO<&j#2szVjm!?6DezY$>>#_H z_MVx|eABt#5ZT>~afpHqIIo&{Sn5r_RT^Jhp~M^rXMS1t`rXBN4B6Ye3`f#qqs*U> zt;87THVT)Rhoaa4?JZ);yja^s*nfS_>wGMilnv$mRW>~?LYGNA>ZI; z;*|ELLA1eoFpmdxt9*zOfU^-QvgkE+QSgmV5P}R3#4m3=E9)h1(Ikamw*!z&dGOG1 z=&7H)atv-w>wHu{?7_A^)GKopK*eCmnayy#7x7c+}L;|3_j+ z@3%T=3kTt^^R3zfvjT0iVc!NkT}qf6d}_bqknf*XrBwB=n7P)Fb)(jO#Fz2-qTOQI zi!a&W`os9W!Hwi0vd!hA!NYzkA%mH`Q!hFN!n59{IeS{;)cL-uttjaArt@%@ z=0HciX17aZlS>#b!@g0-WFLz1UZ4aw`R0=C+x@OW@TY$%zeQ_oxdqlU^xdRq;=nJ%nkQAyF&%ZX4#mYqS25sC;L>c4+)VRSX$sFT|2R#Uh8@P%&;#UE1wETDR*QUjga_V9wTTL@Kxi~R4j(`DAIntcAi|{lgZyyvJk2%+JXAd3O`Wrko z7HzF(L62VeII>)$#w(dZI`iq05V<~*_L=FVTzO1ERDE}z;r{I=%H*gH$4mmxj{a5O z9YGlVUzp~d(U+;)H8q$(y2h_)QucFy31rI4D1>v0NECsUCF#)&m%$4h=|^03Y}-6O zm<#Fu9ZLNIo{i}D0O|k$_||JNmy$`K59;-(fR9w=IZ{?*WyAZZDpfbq%{vj3nwu5m z$Qba6t3PeMb&uCHdilUfF-Aczh6+RV6lJAJ);MZ*Jd1Q?4n#FAt3c*4wE8PYc*oDJ zoxWi;+H>*-1W$zG`3pDaSFqyev90G}<^EWyx$}(^z%m*i+d&NOjbQJ?57^sHTKQi3 z$P53ijl7JwfIHQ^BkKqGlzC8tk8iJ4vSDxsafKM6o_+@ghm=~Ew)|?D(4;Kc5=Ir= z15rKK#@+nAO*6~WbmjDmnZhf@uq?@v5pDMVlEIp&S9z-fZyLuoY-r>x<1zRP2}h4H za#Z7b$oyA}yu+g9Zisl4NhZB%bK9ND%f%m>RNM|Q#b>wBWHE{j4h`yt3Gj6I4OcT|qOmz+%FGK)CzC*~h(Kxu-k@ zi~U|L6jv%{gLNifIR~6$C&kx+!YK%=MHCFci<^x8lQlo6;-bamr&Fx4GWEVcRymg| z$5p+u<8d-2L0PWcz)4$@ixnI9`X5h$npQIT0VmMcN_LksoK{#?Wa4>lkvwN z35~O!ei=??=jQEu?us7CV^?b3IDN3ihPJMiVA8~f9WsMj;Le5Gi|3I`Ev;Ex|5ZS5#AuVf*C&luPD>_amXV>YfrCUuC}~9&SBV+rY4Z2 zE!R=4xUDH1!H37OqSupi5Kr5SQ}6NizX;>YH7VjXG*48*Xp1?j{L2l}*RqHP^=Ua- ze7SNMqj=PD_XG5S$^)s9DC^Hue^DcO8F7!Lx^YNJ?)BsL%Juy|9sUFE{j0)gr%>#l zGtyLi|Fc>3d=jRw@m-0&0=8(v!j!}5D_ucmzwg~q30@dN%m4VX?+l^duuPHXEg0}L z}92`(OusDWZW;{ihRlPQuezZe_W71M@b*)bpqqjOuZapH~_GnQ7VYfLpyc!Y% z4tzw(2U>4Nl(jLre9MBpx+}WDEaSX^myNi=t87{(j<3A3NZPN^ zkj)lHX7^p=GeY}F@Qbgj4BjEW@Y`{}Oe}@UCc3CAij)|T<+u=_l&JRr1~fwLukGpY zT+n(pY)e?A$Nb#ow};?*qhpKVXkAODP~SmImfe2}RsYmxcT>~cJkR{F9gUqC9scB~ za(k(N7w=;i5%Hu1)V_EBuE6Lpx3s(u{7cf+TTcny^$`0)uz9Rk6)Ot^pNEsB@`Wz6c*- z*3#ql`n-(_Yj4ei-Rm|y{Ep~rB6x-k|@C)x$%*VHMHFza)-25#>5SQ!$X0Rnk2-e3y)I~%mvH0KcP#PYjLP$g{1g(rzaOiA;#reoGJm_ z4F*j>K?aY0!fXP)kdS{pcbd859vNVXs&5>>w_ej8W4{c*oBMo5wGSzgcM5%^KwL z7S5IL8+DkXZ>*fI#%OPNGthE4wgbI%#s4x`fUK)YKEnGpK1%m*ItKpaYm4vg+0vbSZV5Q9z<|ic@gsV&7_hwo6eX>$9_n=BbNo z&X4ZxsgS@wWwa|Q2OT?2r|$tiRloQk{a1zdyfwiP53YS}Cte#CQu#0gUYO8*Qr`!~ zpAf5KuwSkIt@1xe;vXAE`@Q!OqIIV?WVh@j-HKv$+ds85uLB<^wlIn3J+sY}mE`fm z$C~Tjf|X}H_d$9;vY3w%fp3ve93!6Z5%%NEZdzDTzqc0-!o`*EHNq2v&*?g@$)QNG^6fW^Z+*Zfvfndcleu(a{gQ9}A;F)uBbu7|<^41dZ#FI9nd+Exr1FL+ z;U@aqThrjXEFk}T-=nt_>fI(P1W4pMhyKZ36$Z4>*7*KeBS3DO|5*bEATJ0*PlbRw z2XXq*_tJQM4;zDR;>>_d&PXR0Vw!X?pX)%GX4jZ zGJIPL6CyV_hmzt8CkqWNpC%mfYJ>h`^@Vd{H#(DWP&;)ozS`CI*h27msI$+_l&!2F zqnHB#js+n{qR7%)`0OVh?Bp<^zJBHXgYi5h^M71M8SC>K9JAu z^uQEAtR{HtJbp0Wsb>#uv*8XvQ*1-#%7R}<3cw=Ur5;nc^q*Cyh2s|y$P6ET7TsZS z_L!bfx+azz^MvvfrRAOz&`Kndz3g-#aH0XQ^|( z$-5cWu^jq6dF5;d!Qa5ANus&pjtE~&aXijStdu7KN0Y$V>ht(^sy+@w;cTr{B0j#* zq#ICjKy@Oxp^*ICl3%_Jp3PoH&|G!>hp)sj4&g=HY|FfKGcSswrShY^wY7+VK;BYi zqwf59|65nWF_3@zVstKZL2}Z_EpNM-mvJ)=;KC!3KEL}xP~+}aB}aDD4k!Vs6u{c7 zlS+)MrF|gIidV!$MtauZuifeZ7M$>UII}*M%4&`X18H_QQ4}D2)1ltYKDF`I7P#*z z>EnKj`{+?ROoA>MWSIbtYX#H*-BdBh)wSBZ*Py^#g@pWpj1GTfwEK{!>==V%mhqV# zv?m*2xWgkztb5B_4pYjOnQX+ax}9YJ-XVu!;;X8wn01M|HAd9illHTj>02QicU%c- zRgd4`T51-tnc*AfH1oP-flT0wEnS|Wb~tBwJIOI@MD#`AhoEM$yt*7$pza49_Uct9 zjG5*~mExH9HCtUHvne%THSe6%JYUZBVp*%6N2-Cxt~VGqdU{*TFXfXw1_)^I@KAH} zsOt4)+;)n=t|=jl{uJCC}#d)DKU;Iu&JtZJrHI8eTig2WZf@%a;w?zLx<#T2fN=;7W!xf%I_U@{KLiK48( za@UjqLCRxYOR|YuoXD)Ht8HvZ%Z$5)zfcQCu?TW=zKk_N=jctVYF&SPC7SB4d;Z6u zcyYuiFXAJd_J6E7$7nahsAnom84h#4-=8~!=_?KhXnptVxqA}gdm4tHD6na_#?1#U z*u3s@yZSBG+EXw7)Ogph{jW6OuI8FEudPm}rtErS2k6cvB_^|z-w7RTUJ4f(q|NC8_vaV0fz<&>!@BPGY`s+M^ zzZ<-l|HjOM!X>o*>+SlGxAFY~>jmB@ULOq8U(?j!! zeMA8eFUzbVmubf1O3u*=oeq3Y9gb{@iVHfPMa1r9B!#_-4_5q4vg{vs3ELWwx;EK= z6PQ-Lae%6@`RChG{{Bn^r6YXu?#YGM|W|gt|$+c^uMVn`ccs)W?Py`CidX8dOt+fwYAmy|9@P;2>`WhTd*aDle0Gj<^ zVQmHwd^*WviOsip`lPg(_7(HdG$t1B%CM3>Yr6t%XX&socgv!!vR17tqnu%^3|QEd z|8B_cNdsai3?h*iPE6B=G{O3|qouEXv_0qHj_0j0Pb1uX1-W=IuNk*fBeR%UG6NcF z#kg2myCHilP_T=nS0k?wu{+VB_>!Ed@sSqbZ`Pn9^c}xx7Cux@*(bX?*mj;!jXdtL zkd7r=bZph!qN1}{A+*Iup_k{#UVg6?VdP}t-Jjr1idx6;7w%D^0j^Fx*AzA{s-5*wQZC^W_4@xZ+ z5+aMGkQs=9#N80=^PY2C!KB&zX82bSZY?nS__6f*ytIY0+p9hrnab*x z`Hw{R_q}tV3w!rRg@xKY-UepcMtfZ$*h>9|Thy11cYe1rT}n9)@YQwk{LbUKiyrR7 z*#!~zt%ka(3z?^uZL1`i-g*vpS~wKlU=rO{~@~eO@jD}eHU@B zj=vy-g@luor$ycy^Ue(%ioicS`$11w$WWleKdpi*4N{F0QMLLBa4o?z(B6-L+23=+ z`I0yS|I82%y7IAGzyG3AX@b7wcV6#UAEF3fn#Wc8Nl@*TQ%s;5@$@nz5cI&Hec2yS zC;V)wkp`H#UG0Q?odEKzZ0(nUM|v#%;Qk)~fk1x09hsC5Fd`k#IqTV`Z7Zrk`r}{P z!c3g_tCwu}>hzm> zW9Hop6On~2;KaEMp}|$gi!sN;uv$A><^gf`V(gjW@oW`HXF~(I?PdE&GPbvbr;wr0 z>U1d*Bxxz%2dArT&cJk=994nwDhN-of)1UIJIhv~wH@+%)k~t$v*Q`wLwaOGtLBn< z&5=dUv|0`0vgU02v26`pAD_;st1YZ;>zkB|O=~tgs$@B?=zJ2dOD?|t<@znaP0!Dz zG_(7t()&*-6i+D3y{w?$l3>zo?hdL74wQ;UTABQV#x%fA3o`kOLH8z`-opCpFMEe0m#n(}JR^vmNUWrdYU<@3(~n&bx5+AykM zIIe8@oQ4{5T0j0#`mE)Hoa4S}?7q%neU>eAynROUoHWXC(Z?@ zwQl?Yr>}EP1ZBt0+yfd)zo+%B1?{f9qWhy8Q7{6 zHOBta3;NlBf(wgvKh7dP9CV*0r$$&C%Dw6?-~Py%h3DDnkLZ&vt93j*1Dn326LAD= z=GpzWUOMA)5-8jF$?m6joVWt5>g9V`HPHbaJcNldIk)+dRtWDV~YtlZ@k!+xE_2b+~Nj+UQd6v4HyqZoGG?NCDXO?4avi5So zalRM`e;ii)D(Y1An4A8D)VN*ttovcbdes6>fA8=5<4(ABGhP{?bg=50;R1qK>R$hgZ(&Kg0>%;!R<{j{DD` z|2;w*@+d}l2bXzrEW~C(2>~o^(nmBIoz!gf9rYJJg(G44V7dX=la)!W>DYwaMUcMi%KNh5 za5w#9Iy9x-`FGF?hN;N?%+tSi_y*LLSt(E68WBG%r?8zH;!E2sOnpmYu%MKQVAwSG zF{PWzI^%wq>wZB2qy&~*D%h+s+^W_7wInxPsX*oS_P0eOFV6T5YA`p9^q2<{GvgJ1 ziv}uNcu%MA>}0Gn5*WwH*r{BwK>vs{ zn`q$k7u8ZO3g@=R*T zJvWb%S68uPm<`MTw#x-q$}*ebRg3)=hp~Uqa~5lr)mOg0`N{llZrWQLVSG>Wvbkv| z$y4(r9v#ahbq=RWk+Fv5#Wsh5C8@1MkOe}v%dRPh^P(A+`W!hz%HB)+r<-=N^&QtO zP`5zc0yoG47yIlRw8J}bH>PE~ZQC|QqfxC`u|ft0Td6Ue4RE)0tb{@#b$55eK)dK` zSoqmlss2Y>w{Dd&#)pT8mC0oE)KgCZ{#04PHkhdmcI@3)|Cg7=Y-;zRww*og(8}oWv%P%=dlo z%{kAZww8c8THT5R5ER@?T-b#xtbbU{0?tHr{s)_w&K)|V={?6(MC01S%`;ga7r2?9 zel!LU_s+V!-WzafXFp;5=Bta86m9mxP@|84N7uS9t=3nkl>g~Lm4+v(GvI{>S?nb4 z&}9kt48Y@2rsn7iGuv%Pm)TWLYQ6vCuv9MsNY^}lI!zaVUpT%r0NEVt)b`M`0I2|6 zrRsR$n)_u17Y%nfIwL;}zebV@w&p)rpS+x7EpHv#r|%7=0VWNsbGcyjQ;+&R56WM- zGHPk*ecBV;4f7Rlrcp2#DdBXZwz;1K5GpHLXkTQF#TQw$z*Hz<8b$IMb3WCx_=>k^ zsWC|hUB{4Ahy!w!G>05pSFlm;oJSqmmGfxQ@=nGZ#37m>V$U=f7Ad}bK&$hcs4wi6 zB!X_E!7it83)0AY%)m(Q0Q_psN0+=W%h}zBUWfB3AO~{1bjXQH%mL!I;4v!XhqEg7C6ULk zapWZ{-NG-vNI>rue!;WV<{qSbL@OgqAJUZWQivp#%Pr=R@*+#*vS=G@e|a%5wKd%f zP~Qz$2=IDkZp+Izx$wQrGk%=N0~b&^2r?A^Ss6Z-UNrG3E8|neN40zCil*j zfcmcNkcPrU7+DL#FX=#he8*=&alM+N%@2@J%FawK9@OX%Z>9H0v0UY+Kmt!e?8?%lSV4 z+1T8+toE|sayTYVcu0D0!2C@t@0W+PV|wtqj!?o8w>vTBL=nu8@5u67H575U`PBg-7+~+>$0O-b4-?eKO`e+vc3j@|a|M|~5!0q7Rpx%C)(B8`!?YHY% z?u6qSn11NcA+@!&Y0H)^4%oeM<3_DowMvH%AJ%~b2ORsEvtoLBT5rDjro;OGi<%W+V1<}9+&lN9dZ#1j#^=32!TMboQbS0<< z)Sre<5^CYth?w@zWKrF_VO34$(c>Ri`N!|7>8sB(b0;zBU1lx=UGssgW;MlR*5mLm z-87yYY|h@)YM>|p*<}_lAXX_(!?TCgQiX?C|Li7>w4-lLSa=vE+-ntA(5Iif{|44t zi~56G)ESEa_Fd%|*V^F?_&q?IJVWBepeL$SKH&f^)E2d5d*p-CieS*Pj^d_caq-M9 zT}`JNd-lZFDbgDNm^w=!)-s$4bV8^6L=AdJi8j~>v%Lqc`h{uYmUVhJbfv6+Rx_Sa zC#7C2i|kgY5eH66{l0d&oWvK)Kb)IR+y#KPWTASrl)AM#utnt%Neux+UDp6chnKws_tBqB3VL`u7jn$xP%>{KM!9y~NE7rS} z3#LLxG?$GlLUP#|^64~@Bwn=35DZw$ud>`?Z4)#eug22b;2YF{Ym;K3L6w7ixk|OH z9oL*=Cn85R?Mtf3*RSr`M(XF%$Ea<0yWVr$*V)DyWQS4;kSMtgK>1o_$K*M!incN* z@o9f%!Wm=J_%VMHE$uX8C!7_K6AH#u=6M@JZ#;wS%YPa<=p^-QY6>eEiRodaO^QSZ zctX<(2g(X};?g!*5ZXo?vcS#l*r8+lgKhFi*wiusY;V;p5|8r&Xf5hOE}*9L#< zC8uq~q}kw{qxoN?VWg?IL3b4vv1j?(NQ=CKr^qyllo{;wKKlE|n|sylBN~Z;f$iV+ zF-P8kIauS~@vtVDlP+vyrVHOd^o?Eb8?$G1EIY%Qa8gv23=$}I-Nxs$rLMD~;#wYjpwNm6R7-K;X_L!zcDt=BRMJ@4Ck&BKhQ zS-+4|2T5lRrze#pM+PU%ILf8d#W?b4C7kKp7usbW2`U?3!DG}A`~UgOS#4wt?=8&_ z+OK)EJ9C8s#Ds-dlAWd16(a>MBnjS`XMc0g%50O%RrTFi943SbX!F-_*W+`y6SO#~yo327=c*oKyG9$h8GAi~m*1du(^7|I?W})K*S4U zw7_`$tu0^FA07UlN=$4sRZLpsyraLUZpy8=q%8by?X1A$IRS;nK*eIVKY#D9!#fUI$%0XD+d&J-WhxmPG6!P+OsACv+{{89eVHR zlpf#GiyVwk=_Co@(6L>=1`Sq@X+XS{&1>M|zWca`#$mG1FX?H?r zKjPEC7?VMgYGuxjEAaX|3VrV5+`QV5%9#pZ_j%sx4JssH%SGl$;#>gS1fU4Fkt8mz zR#>{e=0+7`%LmlUIRINjFRoF_*vv~Z&zNUO9j-MOZ_Faw<(n${N%2qR33O;}^Cp$k z+_yPEvD(dCWSd*DD2G0GHqJ8_FdfBQH4)-oa%JSVoEjuzbx@pToJa+)T*ZL2Yh4dK zj|lbhtoJRgbUnoCOWWBJoF0uH(DCB?THW}#1J*<*4M?r_E6X^oo3hGOWmG97dy>d4 zr8xagq!@Al#97xgkqrP-))<#jd`z|rNjl7Hlwc0&kxY-K!f0rFk_wXZV5wrj>CWa? zbs~34o7!Gfi@Oy~_o!Ugk&Jh#eSetcmN(!8>~t3_={an7>k_Bfx*o<>tZZc92 z`p{+A{1qnt*D8IJ59oCJ8;S+S)ST*Ga&>dYodLMsQ+`L?4G$}Te)5{!3b`}OK$Mr< z>y7#0Xzn2LY#~i1VegVG(TA?J3lO%L=iC-P46brG19r@Ag=LU-T9N}ufklZTn^4I5 zr>m5LFRxcae?@;0)j;H7^_F`S&eCUGrA=RDcemuH5`9z&;JXxs6+Jbfeep3p-@Wws z_@%-3iF!)loSLSN(ypz2+nLe@rA(LHzHrF}097l-;?AN2)z((l;L%zA09JDoQ4UY` zbmDSlJjL8*Y9z@0Ac3jvgzaa_X^p#*j!IS;ARa8s(Ns48+c_R@c4(*9Lo(&#zV&ML zR&(jtF;C@ZbW|j>_h%JkJrDh33p(cui$(o@^S+1mlh7U|hobs?$9f_bs^{#i$IcJ5 zA5wU_U5)W}ou55JJ-c+A-k$a8zOGJvckHN=J`-u-VDqJbTxW5%sKypAy5Y5@*aFb` zvw+vH(ud~(`O}O~`qZMwcwYL9z3*HX_0x=alZ)MZ5Pg-%D0*-N0s%63+gf@SJ?c2p zEcdiyY6}bl&BzJ6>WVC;l8(ZClER4sW)6S`3H1A#7%HaJ{*Tg;mBhTg`H>(^!eq2VH{Oo5x>nI)6 zj$?`uzxR8;=cq{h#&7&aZSghVhlYk6jLGmN!|x1WH!|jp#E0yh4bw7$t%2%>YrXQy zEBf8v{axq$PM<#QoP!ZVO`3SIVkFTsXU;e{;*C7F#g0{9c6%&PoBiFMqu;`#8bE6v zB&*2l*ROXN)TX~}ENcUGjR|cY#hUbsX{=krc=E|79U#QyVhoJ0mx~s#hlXjV8$iBA-(eU0X^}RP3m6Ps^m;&Nif|&qF4Ui9zFec?$^}0n704QdIgZ) z@GclFm_*EDeH$Hft$DbI_K#(G{mt*atC4lnI=O2^ANkw&Ilmj@#RiGjTZ(7|TJlrd zcL@OH3;*N4(t{fY^xI#3QQ!WXH}#9X#~Dlli+dTdU|`W-rhB)*Wb))`~5!k zASYv+u^T3u)B)H!&48Peg?$R;x)jaz@oT+YuLW#MpBtT4Vb4J|cwv+_L9Kr!Ctr-DbqCHU z@Z_}I-3+Fk%42u%&M!F_Z|5r~sFzrW^Y%d(Ya=YXHMA0$gTp0$Ui3 z=!!%Mg$emr0@?z?0uC+r?q5izd5sG)P^z`OTIYkiI&mVqS0!K}<2@+TpCwruuB_)pCIaExfTP2TM$Kh zwX-tTzl&#TI&vQ1K8}-Y5kQ^xUxK{6BmBB1DpT6p`59&Narw!i;g6fmZf`O6>lDBr zoeFs#T96q-27|uop|-E6GQ517m6q8y?P?1%u;F_On)JO-EX3k~dWB)f*~l3ZBp%j^ z$fG>xNXpBzDl}pW@3+4sN*QFOk`7C`r)hwED5Dw(-KWmN20Y?d_BV^2v9-BE=3>P1 zV(VO3h7^b&pmiwlmbzSP=LZrOeyx6>t`!^H`ibXd7|}>ygw`V`ME@~kkpOo#BR5hC zskP9oOeCSx<#9FidG-HIzO7$te%!e>7Xuxy4O9W8|8!`d;y6rQd@o+ZNnnpkb0}tU zvQe$^DfqQ=Lr`Pqk%UUP^p1B-yZn<1Ah%*{ZX1u)>X&V6vM0uP&LQh$3Bu+gUm3;(KTQr^0;c-_yBqOGKfPkLzH|OC(UMn^A)@H} zf4p&>b|r_D3e)a*?%8XcXB`N?zTn*kQ+-zZNJxEJlj^UuDui?GRu<2AROJ;sb2*4X*wc?BkIhl%V5R?;iNiR*t8Wi|wPJwm4}bVW2TU(I1RJ|XVk`iW4U@8$)8Bxb)Rx<}#(1vE z%~3)C06+jqL_t)oZ`hQ5uVGZRec#CUJPw|>j+gZG29sO5k$b+lFT3WMnHd@WW4KO@ z(Ot`lXUY(@V%Kh1lG((ry(Sf0BWBuqwvO%7_Vds~4>@WHww^J_?cJ8!_BH&^KHK)T zjlF7iwcqW#-3!~!+PxKfH^#gDHak1(+(WychI1L1Z!*$`CE9w1QPqxR$FP0d{_MA@ zsVT>iV9o*~q1tb?>$Bt3*zI;4JD1w=ZF%jptyeF1t_5yVlezOQ*ebkrXvRu6c@k^T zR{39e;RXHSAO4}kmNuRBTCv7pVD6qhdz^P`l(tR1T(rQ%#Dq?rI^}c}HL(2RujC~o zsjJ!8Y##^&oQ}po^I8XC%dBImb#&Hg7{lE&Y%=Hk1{d&350-spBsqE+URfX$myv^0<_bdW@i#=X>MSW&qkE{*SBkIVn$uJ(*ov~ z-7|*Q3e8HZ_Mv&-lvmQrV3u}j_r0|}2w>`WqDx$8?+1ge=;=3*94)EA#)=wS%Nm#i zh^8-g?R#IYPa=1~XM2X-4aLId(|`zNK#BHn7kCJh7g*-`QcUTw`37-=FT@Kt)0Nz+ zk{72EM^m<4Wg-jigpw&EAW+PZ_aLB_a69b& zN$QecnHj*J;_`LQujg7?C!f|>|8B(qh#OK@9wUM5z`n*EN}}5l^t1x*l#vB!lLv_^ z1G;W^snDMmXmj=qZ1*>5CO-#=HOsOz?Pd8P-q&*-p>nhQgcZ3Urn($JZb7?b5S0of zbtt@3bMBa0{VN={e4DRFJ#*N%vJAbG>p7VZye`=dj6Lh4FM>g9&#^p_BbCZUw(SSr z^~y;%H+3x! zFz097+=%qVY{^d)4$&m!%%CPLcGVwhne~}bl0(jtJl3@8OWDgDUex)S=%jWBe#UWd zzy+D-z_#v54JeW`Ry5w-JGg`ag&J}pO($Y#l2^f|&Mu#RI(kw@>bAaStE(S9^9XG_ z0`X_gk;HQzgEm=Nq|nW)-4m_?RgB9_zdTD{HHj=yOS2ojaxh$;!G7d%OaUSbV}0Rc z)mrjsApz5$h$p~a3y$jag*3)~9W0l_nojp-f2YpmXB7bWwWQm-%BQu7W&9{htzgqi z9xnjtB$;-f(S7cfmz?c^%CN#?Z8+AePLCY*eLOU&8Gzu2<}3lV%SpC+su06bf`i!V z0x~yiea$M9kL53Cjx7qN+d=G@FC|Vn$MbM~0iuhHBf}6vFX!IZmTYH? zqZ@DvbaU^gyctad*dhOua|Om%$ZC){d5J3H*y(QjV}P*9-G2PzA9w1yF`Z2g*YFLK z!tLzr)Qc~^h+Qjs}D^sr9})p{q)lg5N`XlZ4Bf#9Lli28c4o& z?OK^4h25W8F=-b&mSI_jQ5p7S_rkU@49l=VBjwt9MgZNpbEgBoTTVuE8dy|QkR`urXuQ8!^?+#qPCTzY%wT{No=xHnM%%wb-%i<<7Uj&1o@r;B{N4W+1tB zX4V+2;+hxAIxYi)tr1y6uX&A3Ze;)d{aU$lrBkt6NZoDg*Gts`W>4z~%_C^Gw9d>} z=GO69=U~Mi4%QjiI+je-9tzfhm{z(;xLBuUGCOuZ?4e@I?4e^ex6aiZAGWRCAM5z6 zGpd2=HLqp$Z0`NP2BsUR9%X`4OFnAftr)0o$x1_fXSI92tbe>uZ7Zq_l2h-EYUs$M zbIk^>8!O$)vA2iy)Zf{1fnDw_yv{!%5=TDqw>GP-zftQRrT!kDQEKkm6Gj_QkDa>c zd^^5lSn*x|w)nG6i+EN1a>{yo*Y zuQ^9(_8y-C)QK|dyZIL|a0IZ~O9Y9>??;9#3&87ES8uD@Q-1lUkr7~$4umf6$zdcS z?i3L2>h`Gp%2g?h^niH}q5yUQLgI@&%bR`Ic0ktlaoz9er+P?Sn)Sk1_FNkEXSnYS zV8sE?TN=-wrZHu4p28TSL3U1FWDQ>TF>mk&jh+_a!v^3)OBYEAH_|0R7cz9Ni<7V$ zd`M+RVWh0Fu=CiK_5XPn+V%T@>z&VZO1L>G_;Gmdc+~ z$Q_2&8b(dv!{sWu!Wat{MDr`uSQ>z(oO8@8Zi{V5#|?9l1L0e(w4kts9>q$WTJ z(|1lgu9Q8Fv!+r(n;GYW*Bw%%(zf7AZtO=F;URtLr&K{AB^S7iq0KXBIC@fhO0OZ` zFoBje;1^(MOM!Y1YxPbkCGujJBu>QFLXLxBbg}8%h*0p}M9H+?%#-v7#^R1&Y6fgJ zOSH|7%8xXWI}0HLM{dxA7CB?~6cx@ok~_Ri=8`&{n!!=vR)NSZ9ubaQTBaqg7#ZN> zXu%&Tk0@TssVf>%2Y_4%klhDs+yheQhWT2Pbh7tecSIY}310HPgLMtiYqO4~?K zY!1OB*EzxSDUc5$OR|#Zl3T}PQ~L4vDF;l)^Q9tlkpG{(_l%P3I9WIR`Xy zCIM0;!6b^3D9NOfWlNfIkfZ#=&-U`zGwaQpx84uU{CHmWtTi(pdt{HF%^62ol9eMx ziU}lO7mBZ zYSqMj)d)`@#YsPvNmU}xeup&I567n1XUSugwUIeTc(c9B_9k`B%WOkZ%tImh7x_Ku zNMYVi7Co=;DaQy-rlvUg!G2NLjWA`}JiH!Exe8Wwrc>aBka0Uc@zHAy(4WniCds5P zNHPhNzv{Ol`vqy%FFOfKcN5einGfL>0#?-z6}BW`Rv@nO$z8Z`!GOcUP^tj$M?Ufq z^!4@O#TQ>R_{XO|{b@$(1&!25#hJJN?-V1l_6$&pkN4X54>Lk3UcC!$|FHy03sjdp zi_TjhwA2lR2USg=w|pZEN&Zm2J}nc@q#S)!{|OMUnp7sl9M?WI5mC*tr|(ip5QwjJ zgheTW;8UOalmXjcef3oXwhM3{92_*;R`;oQ5km!z3pm&BQm+tRB|u%*Q~T8UXpE-o zEdc#9pZSbA#{T{L4NG2D8XfkQ3>!G7?89f-~Uo|Xx=xA228UavUCQx1LojiGRaXsx{ zvOL;W%ywNrnXa1v_L|*09vCH?cmMJ8m}2O7TR)Q>vGb-RqHUCZk6ntMX%SlfUzwiz7!&IL3F16bGBj{Da4-s~>#`t6==`6%|p_K<-*i8D!pt7IiJ zQul4fF`B{CMFvtGQnxZe(cj(i7&^$%=^$&lyTyb1HVWXg;H?7@CbOdShXK_Iq7z6L zn6B^Z`|a3&tbn7ZD1o(x0Gx-cR_dtRNkh^AB1yKi&+kGilfvpgve&Jx`04I(96pgp zdy5Te`#cAJr_nmH9`-H*YGee3>jRjK9zaX#zPFXVw&3j^(ETWuWny#&Im(OJ7_J@U z;JA*1S>hVzdTCs%@bvHihk*eb_B~8_I7)hWsF#>wo8}@zM0G*;e}a=DAw~rS+5@nu z3dA`25i8vz$1f`~boAA_uxbTify#oEOBFr*9bs zQlg%)`UBNT_<}u;(`2qE3Zy4;RP7~`lhdTwVA;mRoth21GprL^u#eFrgkmW1!u#FI z0hhIo0P)4a-R&-Ejx4KsbRpqnfWQdhLnxcf*llzXog}WNh@8&1HZBr!`1GPd;0? z{rrY;B4!^$19}&a5cel>)b>*fZLob~8)j#p+|Ih#l4vqdyu}sY;}0GJ zwqmLKTwxURlLY&m1hDzMW}CZQPi4l|WCOsY0jEM!S@r5V-a;Y{cRpFlAs&19BV z0n~m*?v+wDYNk_?B`q+#j3zS3d%Ynh3nnq35M_eSSpxD|)HB)l&Tu>4oE;&7Adid` zM)+J~x0Vw~OjW_|w19QB!67Du&XSd`GRX7{R(=TmrWdg@)AWkv?Ql{Gg8ewTILC?f zI?mmRwa)k}BMVbv|IfyWqZ9%BVv6NugxWby6g8EZM4tECIMa2vrCW?{_@tW&HhF%{ z*#^`t53AjjzF%t%Kii6~)^JU7(ECI{)QPGhmI8naittp-?Z|1v?H##wm%( z>&%=&gbD5n6P6@qvhu=GWkiM zw|g+3Hy_ubsUvP<%znIo8ATd>-@xG*SjVMgnR%wnl8B5UhK$e5P-ZBe$BuO&GI6MfzCDDQ z2-T>`IFFNsUIo)NxNB=>&JHr3&t53t_?bMWX5(1Dri{LxCWI&*5{;69PBx^EgG3#0 zJtv0*-hS&xoLC&lV_iR!mfEKfPqiVOp>zS6rw#RCL@fgtKVM+T_ycb{huVTmJ)rB5 znc)z6hB67tGeIyT$PTTa*OOykGhiptj2gHE*jY!moho6ZuZU!)9YGIia-|rP8fM{S zB!ZiRZpNl_fF46WMDUs6@1;>fA{>R-0vzzN(_b0sS8LCuWx3P7S;>B_OE;m(*UoxN z5Q-qDgDhz4GUJKPVgP=!0j)kpRmBJnYeYxO1Q||mISr8&U2cZVTNy==3!-k0(g1e| z$fZk*X1btZGGOfmPP!};#;Ie}33Lh+NtDJ^tHL?m{zqks)m{pP%ADoh*9(vojfCx0ooRS2G31ky+Tuv*}2NoM;FCCP6;5Dn51qWR(GXf$>K!7Y%4`t9SIW)!V;h={2 zBEq?__IvrZ#quyB_8Iue7>`npNl~3V9azMaUZ#Q-C`V|gxO{|@H=WRAcjZVUb`rI$ z69k`mf7;w^A_%Oo&2Ne}5@@_wCzq*Mw`I4IYMN!=rcks~7Kz|i6C>z&$qQ^xU4Bi7 z(!Xp^GeoE}oS0RFm%!mHfz-~RAH9Jl0~*yy>Vx;%_af(TJ`=5gtt{c0)I9h!MFRnM z>5*%DC2J3`k?!cUl9fsZI;CI=M0206?~R{d7bH61~(ZH zSir9)GX%m5Fcbq?AidsYlJ|4?vp8iLrPxtD+AWp-`E+m+o8xP7!9PT)r2-l3tq7Lb z?sH$e3H~2WPB8}q4@|R*NWuPDfKqS*lEwF`&UvaPTr69q3@VGNh~CskG2i)FCO}y) zCuc0yb5dxPk23-9k)+j0EdX8km?i|YU)hH~^daLD>9p&3HCuTe zxF-Phm3LWcCBD}^5Y0#z3>aZ2_FlDvN6#`@<1sWm6f!PoAOoU}AV!V}!`w{p)4iqH zFw|fCn?r`JE-95j!}92ghTAI1Ms|Po1f^NF^V*a#Hx@@zHvzZH?A5Da-&LZ8Lu?ZAXThoiH{7dO?QNc|fRquMo)C^F=ElFZuu zmU#kLR@}d#0WI~E$|$%nOR1L(2i9VB=>8Q*zN%X?O&l~508gchn44$9z}5zWI5xvZ z7# zIdCq7sdhUOx4@HI~4 z-TaxiUBBnUNcNsXvP3Ba0!~>byPJroVNKs$9lloavjnfQ!#yaidI_V}aTMZ}wr<{g z4n^wvx(TGaSg+;3^lSuCO2ou+WcuGBCJBxf|N9W}3@~YG)BrD8CXXDCPfLQ`yu3Q^ZRxtRU-v9alAFylSJ01l>c<@JeC-)%ISG3RoFySwhyo#|dqcpbwu`v}>rq6+Mo zanEw{o(bofH^4zTk!(H!N2C=~W1{a~yUo1rgD>NXGnAbhbWAeZk`u0K!_}zLG*O|p zR*z=AA4*Oj#dDJ6ua;RoO!}ubmKyeBmN~Y$4vZzT7@>sB(l)Yz5e2i9U`f+w0#nt$ zX6z551f}cEqhTS6i92-_yo_KXxK9jH8tAe`AcN&1*3ErzJq8P@PoU2pYI7^N*_2gn zHMg-*cU@qYepf9GZv3vkzj%bGQ73;?fsAojWd^_s0r4=lDrE3^2uQrA3icX}W| zNda|Q+I;L4-Xj)Erg33xn#mfw@ISx$B7U^{h-o}O{KEp(Mn=A{n% z!5dRYW-;r1IE`r2KJ+A>xLDZt=#w=|)*T1K*D_rf^?m&koL^#M z;xv1m2;ao>&UB^qhu3D|wll}5?p_`0Q6?lU6SO1z&B3?yJ$Zbw(n37u{VfP@X@{f1 z%RzOConq>BpC5-O&m?IBGidrDWp+3jQb)ioz~k7c4=O8*sm}eS)M2MSw5z8L?E!Zs z|6^qpv)M@~zxVzTFc9J0PdAYlM=IE8-Slgn0gg^WkQkb2iJn*6Kb2P29&5dUFn z51KtXmYP3<2qtwExHP8(M~2T@vA$`T1h)#yIDBK>N#=M=GIX2kd7LD(MED%Y5Xi7F z@u-`?u#?dcUGYBj*t*ymTY?_mpzoGzbqgbJdI?;gV%s^8-^)B1c{BwX<;BUo2}Y*|-IM<}+Pjto$5c z{eLBU4k`Af()_;8QxBUYZM2gGJ60U$j0UyinFC9cEXI%3A6M|Zq-w>cmfXwbY-%yH z|MqYHb`j)NKDqbO{B8@jciS+<`)!;|br5};U#b5kIqhBs5;D7q3e=?xC0PCgO>evFTC8hJyOD~yRh>}ye z)x@3x{{`qvE=J(FOrW?xaLLE0%sPgod%pIyubE{!u2}Xeqa=;>S=U|K?Mgx_M*f$- z{AE*qf%KpJc(FwW2Y;eTaP zA9c*gOkqd*zK`_d*?)88PKG+dRr}VTyn#>r;Um?r%laZQ|llk7t&o9FeT zzA15ZO@=8v-9|>5t&XYc);Gb=oD41kxrre%p((8HA*-?HMFMUU5%@U3pgK15g*f4E z_QKy5r^dk2Q&{@RyY|l|S-Y-f3ndIM+Ve z$s~Kf!V1L#Dk_G6!g827eF769tU->t%+jir&p4-xIHR^oj^hLjn^B0&VpaAdC|Fb} zm!l-NxKDy!ZIf;I8OyJuOiOYxW)-nSNKoN_4R1f1C)V;BS9>8VRNpJijUUb{Ccj^cRDPJZ3(@sM`tq^ub-~x z1Hm?AnOJ+@^l0URUCCkZp)YRc(2_I}Kw1S~m+nIV@)J)yVOZ({V+9DS{wVoo75MG# z?KQgI`c3zhwz-;g%+mee=x1JLtZlQQzr~7)D4+3^d12GMEVg#-TIk$ldjE~z_zeS$ z>l`JeQcX-M@L7pHCBZCt6lt7See=vS&zOk{?L*q;Vuq{lEs$D3y6nLRA2bYdvC6fr z){&06SnZoOZCbo8Pd@pi@x8XuF`s?*S+kzLFExSb&pr1X`&}f@a6dAw|HUtUaq+v( zLF{xT6O}%?l9!4Zuk}^-U-*SzFy|wA7=8cT=RRlhHtJbWU8Z$^>6d7i?%SBMAh z3P3%?8%i@pHM_P48X7t6eGT(0%(!KOmxg9tW3zkmXSbKkOolSo?8ZDWA4@_n>7z#& z>M7>-W1rh>0P2B#V`N%iAGNN9dg||%ZGL|*@;P<%)%~bgD}lHVe=!U<*;`fH^Nmxu z@0ry`n&!fxNyAPTbNprp>(%{U?Y(z%}>|! z+Y=o-8Sa|H3&U?x#-Wl3tGb;A7*2Mmf*kOqiz$NKMSTA!89cem#ZIphGA9_`>1Aih zhWG>D#p;6}w* ze2a2DbxAaKHljH4AVwYg36kY-;`ABHz^sAC_+3ZR*tDLmV=E;YtN83hO0Cq#^ zI$fCc?oCV@e1x@_5f~*7B&8&wYj>v`2SmgL-W3aHR$a+&!`_9WbCAFd z6C)Eva%3q##R2G@ZUPWMpmDjcZjqDrE+!eAahxM_wK8dMrF4On&uBYAzEUxR?&5Ym z0`7P-J|loFU}`x{(hE`}u{ap9Lx2ouG`jqp`XbPx2~kRz6d1B!CepbAtjso`yoBhm zTt&_&Q}EjADf^;iu6>j{AqY&6)k?i-rQa#!l2}`K|8gCE+4rla?NR4i>e6SZcb&xH z;wWrXo=UQ^NCHG!|QvINn|gf@?Am4(ZdjMQIt;|0e6?(?*xfuQ*zIL+)0D9c~<$8%LfR;{w)`40FsAfR+gW%y8o1 zA#WRc$VwMToeLD-Q&#%r=eP8`lLU{CJMO2PQ4$w&bC|Zrkg?`DNkY(_NuJYuE=^M| z%T1mA923*(@jl6h-J(baQvvACD@c$@qVcWSQS=1D*dA)d#7b!ImpbMhK38Q&F8^78 ztUz)xo~yvD))5#hwsY0Aj$Tz009yr=tIKZpyC(TM!n|I~XiNQ~a~4otwWYslnSK{2 zeYxr05#zgRRX<+7y_oEJ$@E**mVRD(eC^jqqS8Cr((9vjRK6>%FBW^%EP{W zz{A^iapw81s2*26*IWIuNS4l2X0#Hfc&j_RN4A$_%Qs)zhZl|4LIqospL+vl)ptpnZB_uy&Kul1R?{h12M8}jSjR9tk-1)S}aZNL)8OTGKX!H3M%n}#VrK!*`G-{#nYxa|-o$pW<%nY7r_ zNf*`X-_m+gm+M2)J4b++fI25F>nJkR@9tr8=RpGMdGwXG5MSeiyk?6Ya2EXp8#&>n zupT~8OYGk~)Nns8l=m`T#|~dUNI<=rHEsEr@{5I8As^Ha3+4L}b4<}?tZST{>~OU* zDJkkQ9;Sd6?v@OvW-oHor4#$CkR5s~l;`LEq(%IfDMP z#RQ53&69;3_QXceL+PUXtlbzdMJeSohZLoHG?@~jY@d(1>7!-Mkkgm!C#i4N#pJ+) zl+{v%f=u^`z(`|!voWIfLSh~n%9?eBI_^k6R0?}*e+AfzEiDjNz9 z6h~h?Z#s{DCa2Uo0^kGu+_AoaKq!;0HS(O6u-I=$xh~lU>!HB?#9SKNKG=`ZQ!|Lq zrm=Qs>m{qzzFfZtKHRg*to*I>FL83wioUu|YzVJf+(9>4QdNrTax=$?oX?{%+(?Ey2OS(3 z>aj97GzLqj18oi6u(ZX=c&kTzdXfn+vqo0v{O}NyV)Y;#48z%&!u0%cw8wXnU3^zG z>s8m@@_RnPiMl8yGT5YvEhTV3{xy$o{z(naBRv&|mCqatL8BbO_Z;tS0c_G-cW})z z6U3IN@mY%JDq-Oo+^0A=)PJ!bxj(CqOq*J>dEM8m%$x*PvNux%I=xl_7Y?{$WbCx{ zAmtcGW1$*tH0Bw3E4bmx2Fb1_q$oK)vW4%@ zJ;kKm`{84PQb&UAjIuG;>=F<76YYq*r(mZ9Tt1a%^ut<$t%p%^&U0dyk!)-?R$5hy zQ8)iUeh4#G_Dy&j6`4##@+fcQFQBc!z6~QloMi__3o#TqGrFfZ!sOjfw`sy=!6A9JvjSW7HARVrs>LWn5nw{p*nE+4Y<5nDg)p#0 zHbncMX2MIEg2eKqO-s^6rWz_>-KNPjzBB01u+;sGfO5JC*gM3g=J{ydh3ec;3ZRJ~ zxTNT=WN}6?ifuibi(@Do!=sHI7$)(;oXe68bl<#|7)1kfHSDCU$@aQdCbD->rYna? zE=zEqQV;Zrm&@){J6D*-iQ)vKBia99A+1c*I>H3ANhU{bECjF?EjW}KW0Vvh2aJ-6 zk%e!gY@!nJ%HLA&(YgDrE*wZsn$r~d$i`U>0n9QA@*`V)Np%{_3fbtBwH>4YVw&W4!kOF`=; zKQDe1fSn?v^w`UTW_&=;%gcM;zH)8J4SC?%z9;d~-p4Ni(=XpaoxKiQ9gm_t`Y60PvG&TCpNlg= zshB!sMfqZIc0|#REpQep(NrV;*D-EC4Cna`u+4~_WMNX%W&`kOAd)A$ZIDTMrsk&k zixn-6o#-t*#z99V5mqLf!z`2DSUJF~uWN*NbqeP^FJE4?d*(ZD0o{t`RXu49l(X}3 z%DN;7*H)&AiyU!lz^1`rl_6IqST44@k$|D5s;-%x&lM*};&$#-4EM;f35>sR8gs9m z$Lt$}n0jLfv9q(3e91AKn~92B8>)vj+b{W2`*;Np$oKX#xnO*1%HX&edgrC~iHM`UU7EU_Y zNkh%nFMw{G1gpBFb)p!oJkykCVU=wwlWw=8-|{|!$SaT0Uu9{lo#X$?q%tqPAlCDi zSqy;kXI$yTcmOAk=CML@mG zLD@%#+hL?sA_UT#n+b^X-?7xJVW2B9s!XyldInZaNky9xFu=JMtBSIzp_GDAGc(bK zxjd6-T2e?`sqM~{%sO1pUT~nF(SSRh-3VDPN>NnzJx_N16eTK8q-XIencBxwGn`W@ zqR!@`^wy>0nd&w?eIz)0d?q%Fxtui2Kmgr|c5eV({<=FFOjlW*^k=TbD@`BDpN4hL z<+GL~jxeEU)R97f32R*oNs^UERXwbVPnm3#?bX4=BvX)E(dh`7Yh9#trY2LW*F9); zVx5=$C;Cdcv~-M`)jUx1K+OXy$pbYi+e*4xwX)Vcu!231qx8ZLUO$YM_4U~K$eK&e zq`(f=TmNzjjom@CuU!gEU9y__;-jp}$=8Q5NLiJS|C@)|DPuS)^}=t56~&lQ_M?UV zoB;DwEQ{7PVRH;69CeY2)3%z~>e=zDYxY5`bTQRKEq;Vs{RlL8(XuLxvD34LC9dS9 z9x~&6AtuFQk5mbWZq@|a3!Go~aE0L@kbcvXJtje_%F?y52{}r=^lWW0lMEHj_nSRh zZMz%wfH&6yM}e{{WU9-e%oD&d2!ZkjN?QOlOBAIpahtSx{|jIaojN9FBOtX7)QDjbM6ima;GHXb!i* zxtRd|TjtQUKlDJ6jJMd(H1bS~cD{1WXijTnyc|ZKd-4rP zF)f>smEbWfya4_T8IR6Q@MY^)Bw#1joq&SnG9`@k7n>P^&w8dAB>K@6bD=e`9^Q$L z6$#ia&Vun=mcvTv67OX%Vs5fU7cvUgQNQ0poo7qbNvW)rISFB8MMTM64kHL^&D)W# zn3=6I^E> zse#b!U?#@%tvo9Xn7;7X5a6CALwbhe31Rzched)m{cZvLycSBX>)^9f^3>W)k80_x z^GV7xki1C>ZPW%2Uk0d4uHK*GFjYQ44edAc$-FBmgsI7mC9_WldZh%5n6%F8G(Ilp)=gq*O>`lP7eh3@l zpEO4)B8PGJ0gPD>Q`?tG7+JxB{s11>{DApggO&^v3?3Uein+)fWebW-n?idAANf zedbv{X1$eC1-^VsWfFn_mQ3tUf1v~6NY5>o|Gn6Oq#<%1qHgB?x&0+jQc4GPth3Hp zw$Tg29!kGB)0C=6kXfo3vK45taNK}W%TaXIDNBiyhYmjD2ryR78nMAsXofYlGKY_` zI?AzWGHRJjiGuBnAjvrAE*>GqEG+sWJ9ZYUD7Z|T2`o?xd7ZTnU1%*A|DewoMwE$d4KrOA>dJ0hu2Zb-x8{MG2WlR; zWe=>(*8P@GyS9Ux2WlR8w>^-^XYt(cKZNyn9tijxC*Ug z%Byoauy0HSH>{5{dq#2g%~8{tJ#}FmpZJ|WHes!1quQTk_kf)Vs@6?^jv%fWeH=9K zy39von3;|6E9-%igT@D$EOzEMO%*6|Ff!zMgIfFz9RTxrR!2S~l5lbWull_TZPjSDM`m*dNdj}oh^82t%R{7k~3rI0% zgPl`((`s_Ep*@x21>3RJJ$wPr02(2K}YW+%(RdzO*g`JB1s z%(nLac351lJIEWiUK9apak9^5L(`NPS*BpdI6X{1mRtnvD$b_&UGS8em|%1Hfc#tc z&O7fxn*A4=8CBw3rurc8cb;`rpddkvs`)M5ux6JJ$gdt}Io>^FgOrj_Ti@VvSF_gnogx40R3Q)V{I>g0_kWxeGN_R09; z3N{Ck==!V=t*Ib3722>9T}&j&$S&SK72vwkCJI=U)JvMlMAbls3C8;^4g-3p7^(Wh z$pLkY41g*iyw_camuCi<44i!ljd$ zliyYF-Oh+m^_L|nA}w{5OXcHX`I+T1uSz+qmm^6qmufB;adftd^&cuzg}HO?^-X*La3Z8(E_{%jmZFdGWFO& zxu=GV-%MKYbd8TI@4DWM=p#E_$zgS-l6lefED&Ws&%~nxaYm$(oo=oXuiq}_Ci>3! z>BZ}A{IfD$v=T3Ct;{tK)I4yTJWvDFZ<8ZyyQz7g=7D$iz!(|2l03PZdHhZzS#tS0 zO0+2!`fLAm%p~0mk`eA=Hu(oXvEBgil2qy4-eNWzV1m+HWvajOcSrGoFKjnJ_1tJ2 z-~5v|&2gXlm2F1aGM#Ihi4SE*esUh) z`7du_o-z|Z{)+=9S?l-y+aB!x>T$E4))hdXoX;5G{|EnLAAa=Z{kT9WoSo0D#V7yW zBj)7}I`O;z`FZMXC(M3pf8HGr1~rlz002M$Nkl9eo@Y%p^xqXq~riBbS`^Hr!%$W^`q1~)+MS@2qE6g`J9vMS(OIC+B+()k zp9ztmpX3|)O8%3t3SxII@tKxi(QmAG76KMlMmm+AKtpOw8<`m8{ov0g3IGx=@NXO&xcvEEhd**p4-z6dabh11R_0sSVkIPLIyDWOGe z^_6P*nKZ0nPW1KhJ`7PR!=-vgpXvTo{V_h{J*)eW&nzudJ*(cE)%)~{^^BW4EdeGB z4pH8N87LMWX)Y$(_Sq{@cq`Fwg=r$El=?}m<@2T4gA(r{-JkFDOq0*#uj(_d$b1i~ zZ)!%~$^2GIzp>q3)B_KC5pXuY)9Nc`x!B4(!ku`!aV=JR8}WK}2o65qgfFYfbg`8U zT096dH%34cFO2X~Gu!R0!{<9UW3`9%hHdU_CWRKKkF6w~$o6?YlSYO~NCl=EkeoYH z6T3OkjGyb-f?wXWlhGsr_`H+}<2b@chWZoXZqo*98%c;%HMvU!ZUx|KxsqQN`Po7A zT}qC^=+%~&3HFNdE+(~JD*wDAfr(NAe>rjh`(qP`p;Bz$0YhPF9`%_2QSiwo*36fg~qP)Ti>Wjo0WHa^iqruTU~^IJPjr>=pLDzg3^*OoYuWQx%- zUos$4=S~)%O&fjk2__R2&^@qs9DVn<;=T{}o8NEOA1fI(?duxg4Z85^KODvO5B0-O zZTKJmee(x7QimpqNC*H0zs_o}W9#}u~^Eey+CK8Sb z^Yi5N4C}8IP4x{NY}lxmz8Yr-FCdv>4ge0a&J7Lm-GYwhUUK!fIg0VLiRh0bXU5iW8RJ|6C&7*CKZycAeI{Xxwq-@vyk4GT^K1z(Tnf zYb(LbCHq@kaixDC!_PHrgO@T}Im!*i+;K7ksdH*|p`0g3QLvJEC;eO|Lnc7s=3qK% z#+7 z(#4Tu?u}BAjQvZscP&Em>_uu@XIQtH?u`)yWhRa*WT<1ZB8{Ne3?p+AE?64uh_uAW z=FE~ou0(&VXF1)Mlw2yu$aKszv9pWSs>s@vfRpvHXcHKxi7@$$^^nYJe_0W07wejh z+t>-@l-#VSWV>qO(LyPSrS);8xz57N?K|(G6qp;SP!h=?wXMmxw^-RmP<}#s`e^~#V)Jk`7SzVbCZ%c4P$qU(eXX?MIoH0%cSyI(6 zE6ro75@mQVxZxnko#$jk%&TV?qX`KJmL=a+-~<>M%L&#sNdY;SC^^FfmL(#wnv~7j zQcPlN_DPRt zfpw|C=gryq8FV}OOea9S(oCKmOh<4sF^zzWZ9UtyEXPw>CUyU0=SDQS)P^&65SJfL zPhtqu_-^zhJ`>)8PqeMW_j&E7v%KFl(Z?}Mox@`$Q_M!yKkCd@E@5>^?Y-uKng?ng zxZ^!g1Jv*MOH?ah%>ygj13%qM)~z~8Gy&rRlg0dYkSP{mLeHwXd=7+|)N}awG?aX^ zdvmj4a6kIl%|>5+?9^;Uubds{rtUhEBy@l};bMKatfGb?^~~SN1eE8q1Uaa4F0gI* z*tF?zcW!7xj0sJpYo3Z`3E(G@N#qQW?yGmh9dMXqz0-bgcDdwa^pdr$X~5W-IjntO z2i88^VOaW+$pregx4v!nN`Ct2&u_v66O#(`7dyRYOOshotoIGOy56>pSR^`D%9F=m zeElc*!n04HuXE+IrQUX;ci;kB*@?dBhcOs<5mD!m87PcTPI92f>)zZ7m(z_^U41w| zGDyjmxEYh59UL^QsowUr1RHHkII1vW2M(V;$T6cJ5o(x{?b8(O!}>KG$ezhzE;?sG zbtNyg@;3_^g^X-RZu$;%%5oG*gJZO%6 z2p3D8k0cJl#k3-5$A9`OW|iK}OFO15WtEvl8o+a4ZtHF(+m(pZCAP59CCgUk7x}Xg zArm&jJP~B8+T1Q=y?LYw=4LHvGV}=;uznV81tgigFk6ZvX^&x+{>v1oS4>HxTseU} zwV2m99>AL1CX^^)BrB6y=qP)Ub4t!NXER^`-S_LLY%oHOCk|DghxEW3Pi*0CjBn1cC^rD}UJkyLeVPu=8&IH1( zWYaxVnBj!f3<%OupP2oqw5w9jibBVU z0;cMca!%3896V)39EkFDJWN+&+`IQxk?wZZEdh zGjTAF+L4K4Bo(9YSs&S-ok}M#O8~pWqr4^5@aANijd?gEjVB8_7+Ga?V4C22MQ)L8 z5&Or6wQkn0FyYnS_}B-_@H#5#sP?60G8dmUFU}1bsTMtRbX>JbV!cb_-Db0)j!gMB zCe(Z-I*dp;!*loGK}wh;IU#)3K8-r|#hd{$(s_!Cj`OE|=(p7~pM&XznB%OJKbojG z8lR>XI@|Ot6Jv7{DM9(W3}x^%8S%>0AU?uAtH;J%PW1m{j&AIYJ8|4Gg2S0HJnZYi zGi__|!o&a*oN{u6*F4TTr1u8;t=a82+Xgr};bvW^S3aH{SH~|^VLX}yqhwW_czFl{)YYR?GExEk zU7MN=Yg|D6c50Lh*mo`f-%+sU#&`qBk_`JZ3FZ~goS(cRYgPOI0J-$oBOive`S9|!!eVBR^X z@dL)DCe0wEyRD15pd5g9uEM$D^N7V`9JGO~b%E+uZ0Om>fvF9h%{>H!UGTaC93U!D zCRxH<-WpyFbh)uV{TAlZ(*|gl#;w)M#Bp7em6_&9?jA7tRHgy*+_6E7d~c7DLn78& zVW<-z=STWdYiZQ1yIyd)zKYdG#uNwf0@wwn8*taGsSWgXlkIgC_^^_U4WbM_2kOavKo%n@vl zV4$=YUJka~a+T+t018(wfJ`99=Py}=#5C*#DY%n6=A3W2AUwySfCK&~M;#uEmsLkT zBg7&tSz;?sZ1JM$u@SC{RBfRlMr_5 z_giBGQg6Aicg_x~KGPYyIccE#O?5!M{{4f-}Xv=(lb~FHWx%rZqXIhdIhQ!x>atb{sP*vxtx~6+9Yo2M8aAH)1x+)V7Rwp9`CRX;{nJDHkl#bzSY7WDE7fI%LVusH%-c9V2 zD4&BQJzkp{LIb1Z>IhWJTFKyk5Z!n!F^K)CF+Ab#!=sGAlYGo;Gkmf+oLK8?Afr2o z7LOnG1XnM&ZFMaMeBaIWFOqXOUzv-Urdbn-M)HMhdC7@vuWLmQWoBMajADwDl}XlD z5oxSErZ$kQh#GTEpsT+n7P>kJyy|9|jz7sHnp)S&cFnBI6$PfNZU|794d>$K#YH4X zlvx+@rc6q(?BsaD%E%h+!_GQX;N@TCYQTB|#xgOrHA&w>Ao)(WkxY#9oC%ys&SIX4 zMK!SzWdxC?BpZ3HC)06UNJOx2b`KLK5(bJ5lT36vm z;{zBcs4gj>Re^c~sLKyx?Psk40_v9&6z+5n)yh}%K+Oa9x(C#Is9DVeH4oH0uzVh1 zhjMx-iU_s9s{py!=jW(*9&Yn5g6avfttZL4-uW|YQP)xl9lTbdRzJ{gnB`)%i_z_^ zbK%tM!|2@DbctrW_7@=NeEN+M%#6ga<0ESfv;FuhgN6xz=!J7wbzhqS(*WMx)O~(@a$Tn5x?u_Hr>c>7S|OEN9_BnnVZZqO+qNC z>m;QxYJmFHymfnja~DJCN<0R?vjgMqgNEHUF+I(J9S2zi(*qn#uI*We6X#AYFxAV3 zwN7p|Huv4nv7Q}W&3zmYDnMGH`wZ!)P9+sP(cD->V5|-^NhXgZLtPRYR>{Js5)*d1 zS4_a!{E-V7d+`toObkhQmVK}{vyE&`4fCXgF1S`{O7%%_nm$*C(`3PNnHhKs zVCPc4nL#oC8q>B~R@QzynLM+DiDU^@-IGQ@Kn!-hjFFV>q6b}|R<0O*1X)7XIuv}p z81f#%e6fIm#6GlJdJNl7+c@(9hW8W7^0)~)WZ?+-ke^!F;8VpJ@95fR@cMx7@yo<5CMbT01DN*M|dLB6b$Y-@rS&ZYoz1dQ)$ zV_ho=_|l7$6T0I9oYoO&%$u9?H+eLYp&bv+<3eE{r6F>Nm7`2X>aDni+k5N;lU=N& z22kfD8iBQys?~p8*LvywNuS9)oSx82^+tN@VH+pFDAh6QJ4&!@5>v%VG^8sMdfc4y z7%oaOk(I5e9RZTk`6sY=_nJUfzRW~R$zJgr#4gzA0gXbiA;+m*{B;(Y4x>FO}VoTQ(e%Fz{Bc!VQ21z%T4_V&GXqgJ9;iR zi-bLGw%3G;dKO}HuXeUD!pn;TxnX1+8AdDR;AH-g7OXS-mrn)WOO7T(V4gc*yC}$7 zXZYUQ@#GA_^f{gj+opv{qb#o-=Oc|j<(?eB@0}TCR9YVQH*_pcjBN8a!_Dh=Fgd}= z6+hY-Rj{k63op!Fz~e2wD`G<7a_=kQeRhITbv3Jbpyq+=_P|PS1FvH-QUG)uf2v3{`&p+(O>Mx&Ye5)XMgr* z)t_tccd7^2*_t{R!4to*#jwvGcy66xpRawW69>M37Lt0A)XIGyUX64jO9_;V%9eP)vZ(@(!Sij%L8;M{=;eDF8!$E$yT6i@u?t%iYq{@?^oygH0Plh?4( z#p)JITv9SEtHP8}nZw~9pCb#Uh!6bgeWs2{n|;T}E`~r~t322HyBOm+GV9$u_x807 zMj!q4ubjBv&EK}3!ciM3gL5sDyp3Kpd-pvcP`xFy72zBs1p;3ovoek8`B^fXJk+)C zVe-cywynJnZyk9HNhawMNO^XMNi_wk_wV3Xo{TvIlvfz)RDI<@odB@Ifd{udhWTWK z7^ah~R_YLQJy)Ft?q-sGr|x`ET?1By4#$@0%wBC6>5`<4gWVTCTV#b~7L$~CnSSFW z3QR^S=~@aCz)K{QnpqE3k!W$uI6BLNtTflR>^y?zA0JeO15@a z0M9h`<44oyIEldLwAw@cr%w#9&2tpkEMR?zeUX`T62tKbKGL<$oOUy%Q9c%4i*L`L zMvp5*DHsp>f?>=SQ&$Dkt3C@k-1v0w2Ar=yhoon1}Lz1LVt( z*(7f!@SOM2oC{;VC=QngnKR0QjfHNUOi#d4mo<|EUgkqsmFPASHkG}-H-8_djE&@b zzCM1^TyN7($zMFVM2XQDCYpnh9J~exX2x(XHjigI*Pz=UGQL}@y0QIUT7T(7vhw#V$-~WM==k}nE zjeR`H#?Leyz~`U+1AO*lzhfHX%QmZhy-5!oK71G-c={cw2wPWKa8u5QU{~LJo zYbP0gS&!YjcjHHUzJag&^si88DVX2??BD$(p8NfWsdqStr~lRa@a%)1$M5{k@7!bw zYMZ?q9(eZm-e+{Ym$IlObt1j;`#-wI$f}54^1e^3zoFth@Np)(`R{uSm@dFv9pYzy z?;*1fNw{o$tOtXK+1X|1HplQ~f%T&&X4p9{W6gu@SiQ5|tb69IQ8<{qND?pie`Gbm z^aD`&^m)0gdrLD1rtEmLoIm^@`|$B=ByGJ?IbM4H5FY;7jb_5&2Y&P+)JYnD6@9N>DW)OHd2Gl6b5FfAh?E-)cZwwFPV&tqmbG zga~Bw$80o#(I4-}?4Hv`vc*LPCDZf~qNVH&H>|MJ#S=44xfu(KOjr3%z=$6x{y?8; z;le1GPVs~0Q8)573B%rB1)am{3nxVN4v#}0#5{RGjS`l`;;bVEW+MBU~6B(+J&!66J@*=FQ)6657%#@QrjyzmV zMXZ|d=j5&f-<&>ea!)u|j|IT1|7Du|g(3(z*ZJvP-GMwc$V_eLb0wF`F{cuv4ft8- z*yXOnN9$LaKFUCZV+^iXiQ+JaU+lNom>9UgN#mpLF(e&KEYD-9M-eyq35wX?$cR|> zS*GTI8QW?27~EyZ`rIGo%CX(4KHht40X{E}GZCpG1=e^&*x+x%NhX#(8ks~+$*>uD zruuDs!)uykd-RWkM;X)Mz!x^`G|>Y6?l36}CG00teTT1&;~t*V^97CfzmpZ`L`UN~^mea7 zYg6}DYS2>$LfdLxOoL!EV6;#@mxQC`oE9h>0fvN$6p>a z`q@2OTOg^7PyFE{i-+pk(tv+>;V;qD-hd|`eG08Dt-Nj(@MLkN+K2bd1F=M!oh>GI zBA8tu2#}6v@y1sxOl)a-OX5TwSb@s2YC@pvEwDiNe7cA?$W))Bl*>9!%vATKeKhxl z%&v^?q6XV!r0k}aqB?R$CvyP{Q<76{C!O{e|K<=r`EMT~gS=o^DK^vdyWSGr*m_p7 zG1b9V`M&>W`|z>fe(;8N@bITM8Zcgy2)mf9^!O`7Mh9MrTCZf%lF#ua?M4k0YWCiE zfWt`aiu^Vw1?O?F^v^gqavrO@nb^!|q&x8OCw>m!f9=~4pq^o(t+$T72Dd$cwOv~| z_@bPPU}7flv)McxtZ=|ZDzE^L5+yUnzWFx>FtSsxvS{7R6TI^^I?YwkfOMf!US2n~ zT=&W1?@GkSL}1cH;geDza4f08&(O4H}HK% zQ5TXA-~hd5iykPl-3&w?#Ms)SXtk_^dye-yB`K`+Y(E&~B*tS=;84vLJzyiS**w>e z*~U>mXX9|sQ-_}NFE&b_xf<%=_EY|4W@d5y+6Pu6-k<)FI&^hx!$iwjG)?uvR$!h8 zve<2YGXFzNkWGE?nl1GJ^CHXz&}ZZQ*?tP0V_S?L9Yso4QE%PTTn|f*{V_9nvvj+a z_qo;O$G_^>vRLpxAK1(0kC9;1Etk|sUVyvWL;lZ^ER$uw*3LfnTa=19myhD9#y1=8M#rTN?&#T@$WjbxoOA-HMbfiJAvf#>HBnQwDsy~o{AG}cqn zXs!iA(+T`|cmOWH%jlqI;u+4}@|y6!wpRjGX}K#wYMSSv-f^SHi|Jg_uG{}GQr{`fnsT3h}udSHq=-GB1@cagN_vG2QQ$hN4k(I5N#W=g(zjr7Q& zAD@HWVKprEn<<*K*+XqU!zN!^moDFzfcHvQ7KYJ%`S0}|7iAmX|4ZA<&*u-0Bh>0g zOCKpC%V6!hXiQ!q&$VvxC6`?DTrHH957}D~ZJ4HyJSa{O)LO?oKBW7a&yraBn)|rtR^VgKIYEv7wh)r_ z5qOeJILzdV7N)ha*SiooGK@6+uZv zj=Rjh*uRsYc>(9+^LTxF7?Y`m2s1su`CpPA8$!)^u%(lP08Mq5aX7;?p`|Q(opm^p zoj|{{o=L3p@KPe@dd!w~VcI>7#!S;f%YAVx58L}pIgg=21SxM4&G7&ZoS(&1A!PvZ zOpM?++iQ_&R2EB#U)Wa&Q%>fowpEzVX7JX`2=n@~En<0Q#h&MR*eNgPCE(uW3R0up zjc-n!rmzcp1`7bV$HQw~SylKlAIt0)@aJ`|RvhpQ!|CLYi&jQ3Ecw2L1?;<*_(hze z0=wo7%qKECT*R)HM15m;oo%!B6SPShuGn0$vy#SWW7~Eb+idJ+#kLyTwr$(CzdY}L z_x}Ff|L?hunG-YTn9+=?s>bSL)MI5NAYSt+jOE+rShD_UVMNrclGiVA-uh10Oq|!R z8|8i#hdzWT(?|UM(k>(BC?U?^CIi&7Q49J1bwA{LWPL5V`G%SFkI~0f;#Ge(QTGmc zc;G*oCSiTovy$#*>J&V7Olf?Bd7{%g^=b#Un}>L2R_82{Hxd=F7bZ^~FKZXu{BH{% zzM@ph@@x=C)u9eI(4nhwOqF`up3u@#tBaF>-cvLDt0N%ScUFazo#8nZjoFV0pLdtX z?oFHIyafH<+0{Ih0*(ZI0tp#gDm64(BUf7G=Ux%s> zZ<>SKPFeex6Uig!7bJg3}f%Ts6@P+ zf^CoZc~j*`jrx-thf|9S?Vroz*j!x3iytuU?43h}m&&oRTx-sd)eG#lO;g*m^BtVX zvluItyl>P}a+&s)VDa?l;HqX*sHFp>TbI&-lyQ1|OXj&;@$bh%&)w=m_ig6b3D!s| zX)=r}WLW#iXMR0f2I$e59f6DGfiY_0_D{Hfl%+GV`oTeWz4z?AXo6s=+ulKRo*KKy zp+_`D-5y8wp1*x^4Oe{yE0(3QU}tsg6~@!bYQ>?>!CRLj$)3~W>*E%^KlW^N>1Yo3 z%4e0lQkbNBZsyJogmR=}E~CL}C;0a52slyRyQku=*uN4|OMF?_8xC4LN)+gV<+3oC zA$udgOL)jn4=tUFX27*c3wN~0eiV$40~|Vg4vg9ZU0Cw5N~LZ^*?zm&CMOa|X&(9#v+K?GLUIzBA@T#b9rbdoybu|wA;=&jDHBVsC4M0a)l#9Bm^w$?jG5Odg;xfu{XKa1ZAkA(V3z8CP9qDs zQb0$`=ekwL`z!73G)LRcj{b8H2G-SdV?Fw;F4&HVJE-d#;rJT5myDeC`K?H@F~<3T zSs{Y7sZ&6Am6LJAk>VGs`Tdu{JnN&b@SOuDaD)PK`UHYAl_Q21bZGF5d|qtLsg2$5 z&&95HPL5v&qmDq>2nU4?aW@?9fz;q(veVe31(vWl<>{1R;m$1WC{fyI%bLtUZKey_ zZX-MPm(?IPn|qJocX?TJnjWLp)^i?SilaLNnt0-w4ZpE1Odc^yV51P(=bc*h%*zL2 zkuU$S=Z{uPS+_*PX{^8&F*@FzPlC!YO8%?p*Ta-YNa=XAw3tVBJP#+@nmqoquebv} z`v$E&r>0_3HK!o9F^4U>|DC1q?$T5a?R%NmKaA(^xZPbUmMf1;4Vq>c7c>{E@3Bw0 z{Lf^!{PPAB482L|BqNKOqMacmP6nx}RtI3CKd}b~G2+#V!%MHU$w|W>{2m(+*aylc z9!e&xx$7n5B}>(-9^vVWcBqBHK$KwyU|e9Jabjg$AU)6G!}|G7mu7-C@vK~|04~Zj zp4~RbxwF<@fq`b*LJTYJQM$tbS)`FVn1H+f^kpfxW9>6$j^BrW!)1b!_w+AWr0eFD zO-xb55BvI!8+u4Zr*Jvs9Z7k0;ZF~vUE@K9he*lrI5#pZK50yQOCJ7|c$|ps^;nEb z=T0nl#fDgv8JEqE=C7t!$0Xa~_*}?&k>1&*Z9{^H_Zn!znY^I*=O9zj_h`$7_J!fG z@J7^35z6KmiQpJ1B%+~hvFSt0v$I4A=D?_e*TADz5%;mT6Dg-bI1(#Yi$p@mqjsFh zi{7oa!+h2sMloRhtM>efCSMb-;4$tEqX&KV7RG_8;N>OO=)*(1s$ul(kxi0BDk;|V~w65g62dNy+a}$IDyfbPut&R zw`VdtqyB-eK8~Jy>V6T;gjH33P%qU3al>31`ILAvbmlV*BVqSdn!L6=RL0ch;u5FH zwlqC>((!(RP-ix-!G|JBK#aYm)um}FQwSVOw9Y4j5k$eP?y!WBqUG>=k`pgf9!c@M z|I%_H6i?QE+qH#Ll~Sz_Ls<%`>Cj{y*X8dOJekwl_PXFugurn zKMF>rKRMEay~=f5y=I5&lOmC@4`{B;ev*;76tWU?GNb~n;ad^7&pRT>OLK6V+IYzE zaL%#u&C5hNbLUK1Xn3P9NR}K=qfOjJ4mh@xcX~sucn9RCHbUb3sCok;KD^VTTx$c_ zNU3*k*Ik;*U3m^TVcBm6fy~iAkz#czm_MXk?Wvl@HVG}Px)Su(=-` zIx9p)+w-rjWrrA%V%?1EuahbL>E$|s-{KCZYvsrPWodz*yUW|!59FK?H61moJgOR! zVj3nUEW~3wO-Jc^sQ%Im%8Y^&Ka4P`@>JDEiTQPV>*5}5SkZv$K;TWCJT<)Hh6xew zE3C&tY};1^*#@x}P%B6BW;;HO$qy2?LIb@uT(R1~Iu@ zY^_SF8t++rgl{o!Rsq-&F0}iOxHm{A@spu$-hZsCXw_Fd^X%+PS zV|m;Ca;E_|4>D|=^85}=hZmgJ6_i?Iy)Cw1$vV-wBBO?AgL3wk5H02gm)9T1%)x!d z0+t*Zf9N?c4NYNUiIAxLZfp$Ql_Z z_u>VrxBDy72Pa*w$7j1^`up71GYzqy{ad&%!mayipxYYfBho)>{4l)vujdBV|A^AX zqRPaYaFIdZ#pb~c4Zw={G#O$Ct`kM~L$$(i;ci+D{WOWf8oP_Rbnls(az8rX8B7S} zNA@fI%uEdM2JtK!vjyrTr|4qdo58@1pFOFPMLZ)D;=cyUZQ z`tk%Qd6rgxpOXs}yOSNkW-8Elyz$w!PhhrE>}{>z&gqrhWxD~Sc!mKlvF*$q7#nrD`On{$TU-58uja%h_{&LLoUcq0#OC^_@O z2bYUrZ*Sai7gB?kdllB%#a!=dr<2JB=}dAV`;(7_w-4>Jxogn?`Z`>0ZEmCQmY#HDS>|{ zHR5jP^t@faXPy~$^l*tMlpqA21rfk_r7rX;ljg7^e9;$AIuZ+J9fiUaKfC7?KcWhe z?7n?O$G0pOgd_OJD$cEm*`oQWKu%qJMu;oDfUKihgap)pP zrium86|S~@$aUP4?~+bMMs>7`4stSu0jZ67^47MbDxK@^3|||qj%bA;D-usD;mOK4 zW9k=K{_~19(@B}!&X+G7We3!Br?SUkMZ{>I(-^;|$cWh*NXYOwTb2-NDPF|5L#P7X zwJdQZN*->Suw@t>vHl|AgBa6_Llys|ShkfxOyc6xB6hQ(3ptQAV@#Fl!Gjt%Q>e4Lg*H~eM5#rA!33@Gpee8;XURCDo)CZ06`y`qQq`kiTv~WO z!l?DG7lP_X@eJ=hJ#UozN%Q`FyN2~~jSqu1w0lX<=HAh|=8mwX9~AQvQk3eIdLNae zcV$ojMb17)E^KmbT>hg&?%!2mHx^+Xo#q#({siXhs)jnKvpqI5+6oa_P_A{0*Sl%? z6C?&;{D84T5Q;zQ`gvEBw&UmB4=V~K=MVrpQL6?j@lIV-fwA`&Cp67|>W@_c`htHJ zjt_4544nB^EwD)G#G`a;ls^n!9tcQ?3uC;kZr>mAt?*TPw(xkX&j_pz?KP6MDV|r7 zO4R_dvp2|BjHx<{AQU;|t@r`A_{*HIi@ zp4QYa#vH#GNZ3|4q{mE5B?+_el7>hjmy>}5+(^Xl5WbSr zN#8t#$dJR~yZ&8p=bB{N?21S-8r^T}77nE%*G8nYD}6wUc@pK3jw`+rEp18j4Bu=C zE*z)`w_ay_9Gje9j8+a+jOiEpj6oiB+n7D+D&LoI-EmJo5Ml7jV349(!=3U&J(snS z{c7K%_&b&RS3gFvcYOi|Zg2^~Or=lOH}TVK6mfMyi~sf;Ql{@OEI1E`bStGrb;6*9 z?A_he5L@H!Ps%fmh&tmO0(>mEHu3xf2A>cNykMz;r&}*UAGF%>(VV7??Bd=>&Cnht#9v7c;1|i*BU)@b|b{>?e_xHK4 z(=3PkjEdUmA+znx;bUwvG3f#hQZRp%4?2BjbseIUOgx2&Ex?>lYT&Bkj8XQMDmEXH z%+A{Go01%BfR93@%JZ$B!jr4-C%A=t2PoUQ(WI@E&Fn6IkfIUy;{Y;U)GmzM-J!{z zzw&GqAuqu-P%a5QKJ~#e-Vpe}v>cq|A^0zZiiqUjJF$|a?8evGq3B&SK*;hFXlt9D za7P4;|Jo_l!-DsF|GxjKw_9VHMaWEm6LMB_u&ieK)v%+AwDvR9Jc_sv%inB2fHU{% z>E!Hz`QYmYn#`AXBFFd~P&L%rSm^-sUWAdmZ8{i;LoJ!JyLShroiuKA;jmUbI>h3r zI#;b=USxC55y~fujBl-jN05DZo^OPs3lHodX9Kp0x_ZE%VC)MOHek_9b>jYD(XqO} zYTG}4^aM7O7O$-TK)kZo+RF%PD^r%bJo;hu8^}^odNE}r@i2-w)J>wK|NRvyYIDbE zfFAO*;yaB5Hp3`pTX@b~FE%hp`A7g)b~sY!{Q+LDp`OPkSW}6*R6SwJikJPFv{KU@ zoe*q9kFSQPaP~z$j(V|l=j?DYb?;f@8hZJ(W{Xo(es}EJ(HIYylMnz2@oz-=a7AbM z=%K5U+75*tr{!K`B#OKi7wHy2=G*P+hdGvB&{ff;3iQR&vFrikXy>}BguHVWD#&3e ze#3k-I^Z>}z$H;>GvDw0`74H3KG@_79k)qdc9|RFZ0X*bx}-Yo)UK{B?m*X@?v67WL!cXG*1Bo2}PRJ2YI6|=yFcH#KWmU zv^u0W^UP0q7f7S9A{+8T)_R+FCkqdgDWr)WR$Z zF5FA}^$Rs-DY=2sr|9JRhpQ^FeNT$@H?3?+83% z?mCJRVzK8Oj)rbV^`SJXz}Apkv^A^6S?&G@H;HCjytlTk)4iYKK$QX) zwClag>n~%is+V6Vy2sctL^6nwif2yXIt(9Ex>&B!Zf|fkrsKnZ$x{zHPq2@vr`j8H z|3!7J^$=|1Kvf7VhC~(M<6e4Q^?jaWwAPa?Gkerz$vL5O5MK ze(H4LB#TK%gTeyo=~CZ6=sw}Is5VE$1+$K`^Shx~@Uhq|o=Y|h1G7T9)rRFFOw-GF z7oUSs(bVx02?L#o(xWY&O1M_V?5hYtss~9lDb%^lDtXp=+kv1S8W6oiFTXH9RfYl-_#&ON)fmZHbmmFfMyo)k~MFUj?b3p;~clEJ= zbr7`=SnMDa93bJM9V*UfWKVZxx01>E6DQt4P~)V>ex9vqe?e<){P4=ZOPbHBHNPHB zv|h>J$RjN4(4EtxnQDPly|@wG=ORMkJQsY%(Bcpj)4^E=Rs_v^x}I<5tbBMsZMy0S zT{G%%rIO~{y7RB*$r4Sh6O&#@x~S|NeXNG{VPFIs;rHC=KfY8El4OwU6MyxIo;I!%3~ebY-|+2<$a(=`clKA4p>058XDsr zuP8_;cce#kQ6L(~m>LH_n+c%XV4{pY{+I6?hyl_*OzJ4r?>VF)W_M^0kkeRK#|)Uf zq3TZ*fDt0ic>x3F8Lx+Y#-p3IG1@DmdGQTVlfC?=-rB8E?dSW2I~UgBO|^(f2|^D~ zs-F=1zeIe=1O*T>xDsl8{J}%f%pa(P3|aoPS=fiicA$70t_CU-$u$z$Y=unv>iF#UsUli-+nj zrOO(I77OS(ywS6`cizdL&owjlhYfxNA2!VUrHK8xX4f%*| z#E8thsrQDmVE%VjA+Z%kJ1)Uo3lsEN71^L_nYe}$UaNXuqL&oPObkdLmF%v_Zifm4 zp~|Z)8w@)t>ip=~-4$bHb;LogA6zOLgnm8G{}2#VWXo83gx?932^;CvUB4$U)v?DL zV)a`6{JvkYA*%{$Zcq0fGd(gaWJxZP>NVg%Ym<2JT%M-$zqxvIN@}B6pd&h&h@q#H z4mgY32GTXY$JrKXMk@A44`;%UAP;0TsXqTIXeM-HzNmEoLi3 z+&R@j$NlhlY+ATb4l*5*GtM>!(;XCQ`)iQ)#}RiGJK<7rDqqWOEe#N_CT7IC%?GDp zZEPKTZ%{0BfO4Y+2?Sq|rm{X>3ERpI8*+KC+foKIEXH>`MRXR8tvXqh@ccmoSDa=w zE&cGh`TxsFJIg<@BV)xM?Y&MsWn?tL^(>5OA+9)6Ic0)v{M(+pm)74yj$l;emZU#) zyl~9$;hRaCz92y^0+b&o<&rJ9FkvvDT2#@wG`N(LnedQ(~JdzQ_eNkNx#4C&iME9 zRY54NYuf&KlT=2*1BQMeEO~@D!|_vQ`mU{RT#EhWMfI*{suf42 z|8&pe4??uq5dMpIf{}vMVDE+j|3clD{7?l(1}zRh73p)*&s*zMI?KP%|CJgRq1lA0YW_v1dC5xPQH@KoJ2mrHd$1QySy5nVpTIp=q1 zKvB6(|9qP$faUHs()i&&0IC z{|8J?v!ZPQG}zU1-wIwCW6SnR6|)HgSs%_qYEy0%=Da$sOUj7LUy3%U;#~8&z6JKV zjpD>$@r*=iLNh=@wmw~poQ9C%h>1GD5=?u~9Iz%neIVCK66H7B!ARvA0H6wvBc2Wd z4=ob*88L}x$LM@`wX&jhz98M>k*>k1%CO{wFQ(ElqUj$=MVK5Dl`eKvzj^#X`NJan z)2JX`n;Xy3&0Hj??}#P`?e~S!JVk(jk{T(`cmiB}UEnKhqgzH_vjV67MKBsKWp}cr zB5&*pj-AEXDT*yJN6cJiz~4U#P97=%G8zJ3MCMK1A zfA;vNlEQfWb$M#Y!=z@yUxWfHG5{WwhOnLOzt%-)E)$vp6)brsAqF}QOmeHgA z5*N^BtAi6MQ9ce?w(w*ZPHK`*&3A0VD+$L-E5X&Ji?PKPJcD=gWOpj?l{D z2-|zd`|KDNa*-E~&jXbO!sB6d-+wr~q75Kyhp7?4l5q}V`5y;;Q&LLM6X}9Xn4)~& zvqF;CHsg$Kg!C%q{O;a!SpJsR}WGx=qC}$Hgb`p=dTZp>^eml3Zeun|!-jkR04qX$ zDsJ1T_4#H^ieZIQEbQdC$RtPoXooQeYVUGCHmQ!ng^9Va_8Mw__(V>qdOWcSxXc*v z%j1{Z6&1N(xrGLW=~PSujWnqiXGFDWK@xORv+VAe^>#_M-DTuA z2cP8rqPN~r?7aQ{7p!*w4j6XAf!jU7sr_MfIo+u+vQ%2Y1Tfzo+v;ORe`ZHyVfP$t z|9Vi7*+*c3MP?Jm_oqx9ngJ6MDug~`*dmW8Jy;eO?(0!f_}9c5he_9UqzF%I^W{(9 zqc2iKCaLFdI42A}DZCRU68CmxB5}ttWQUp14ABEsJ3i9Fyv`puc_?r>NGZeWEt9Ya zlQr45HqWM32C#?CQ%(jB`ceoL0@OtQ`f(BK%e{b0<}6|(A;zrG3NPaX{LL2wpNh83 z^ph!5AGzK@r))r3$e~LoHNaj&Q!SWq%QNT&W#xoY7rr=^5bj%CW|z!;T@GJu;DQ&w z)*FBh2V%h&Dml)22wpPh-W@vUC)Grc3pC*VtX=0;;ahny?>u`$d@{Z{6d@5R>8ejod0!9geHxX?L1C z8V)49{S%($=%3*vN{t8}HaqJ6bp;%DN60=0CS%E5bLcUM)X^3fOPw^-yB@}$_oe0Z zsc~3DCi^sfP^-m-USA@_M#xta=x^x{X2i3I6~J74%r+GtTJrH$AMbX375r1r?woDl zLQqY0LyD6annL=8rpS$P&0P3LvUPR>E{&c{xcPCtH(_DaRX$p~vv~L*HaK$Yixu;nA+ETGmf@Is9N@Iu_o{wl1{f zG*%Vji#Aag7GJzf<&8r*W*PdmC&sB;zqR0DJ4StWZN_Enm?1>@IOMs8g}K3p2!q3! z$;k^?$>5T5Bk{rN+wnMYydraH*RAfy*kc6?dgxFKe%%Y5wGgakBy-xCs9VFC0cYKd z-y6RpJ}q92%I96CUFdrlP>Yj?=A*rw#0-Qy&G~Sy)RqN^Ygd^6Y6y64`fa_yZ37!H zz?8lH`cr7CX+~Y%|2yC$LuUqF81Kq~HZ*sobG zd@LLyR0(-3a=bkldsu$^p2yXwF`1vIzeyXbXSPCe1JKF#WXnvB*?b`J@KOv182*8L z1Cqa9^KrS(Q~dT7ALJ%x5Af!hpsWVd`@a)1l8FtR^P1}8M)^iJ<^L?jGT@-vkqVU~ zy1XuT4ud5uY}Dp~^pjg(QAncP&MUzs(An=lR85*NJOS?{;Vl~VkT7N|3vZA@XwAUOUxEHFcf%F_TZPzCQ~+y1NLzUez`#YYieTj zjgY@}0OgRG*|X5vu$B|8$U>cQgL1c!-44{RI?-Y$OLe!F97;}ufb?~F>@&1Jffm6- z?5_v4X*IFIH~d|sS+s>e1McEg|AX@AAY*a;Xfx!nI1{jCs}qooz5WDT8*18@y|#n$ zTp4ro?hJs-4XHcgQdw?ecTKKOONJEF^pA(MTUn$_f=l_M15t)=Z#s^SbEHu$OmKG8 zL0QNQK24GQua`ZKXCUP4=9~=q8g-G}*S*a1Zl_E&rsMK&FPkAd0@)V)`;3f`H~kX~ z-{l7}B1~k7t7z74u11fL*oTN^nVR;@=0&_Q|FVJNNglQl_P}Aq%F}WjllFSjUl=jFWwW)6q+5ht zJ4GQURhCO0CVxCHy1Xfn`7#6CCFE`!#q7jesbZ{Xa_2H%-oJy&*O8|Mu+#}G-FcB@ z`j4}r%8UQ{%LL#Hmct}^74CqAmY-)yxU#NM`c8yh!-TLvjgc`&EAOs@w;9Q8&VPOQ z*r|e*kA}EL(=!C!XeH@dXAJcgd`w{jn$loLq<+(~5z2o_KBOu6v2dkv%M31wp3u>j z4Wi<&!;y||r9E6fyFlnZV5f}RR4RB9CYXodMj5`MjxQoy6kQnVi8-eY5Qb?Dlj|ULzH2?p zYx*wUx*UG9O5%hNKvu|&MqX~;_@ezPoHcMna>VPagu08w*OKccZ;SkxJHrj*UIlLq z8+|4c#tsnXRkyum(eNaWaMKun7r_~KVo95F_36@jz3u#7TkD);gIcJ0ff!+OvF{Kb z(cErq*iH6l)4qpbzq304!P1gmRM&_|X&|CVX}57(d^@<4;Fzh$LA0;@*MA5HI>Z znRGDlU}j_OwKFFUH=0m}?7l2^lS`xYV0=+5j1^kSjyS4AC8a5y+LwKuO$c zTs6+tcFlR!2T{0*>~g4Oe#@|-qU+#&f{~irzPHtpf~D%fqrLT-H3^uVM|HA2$0-8E zW4kI#%V7`{VsR&==KkV1VH6Hx&_-mlK z53%LI+UbJU!5{dD>%Qkulu5QO2Q{Kqn*~2hUlw0C`z~CyG;V^-cG;?L?@3>;R&4a| zU`$hsKD37M#J`Cyi0j($pFd8A>954bZf}{g>kpkm?rJV2>Mt&ahWq>SiFK`Om)8ot zqoQ;a!Fs*Ao|RjP$ZCJ8mt0c2%@wKozeFP9m``4l&M5)3q4mDK;jrq$5utXf&?)}n zB0W2#fcW@`#~jN>cor1QA)x6pA$;mJUAeMI9f$$Dt~T9m9QJZ8RE<`=v<{9m>qeE5 zi4h{ZK;B}9jCk}JN85ajeaDbZ?Kf6ow7iHukfTf*1;U_zCSsvTOqK6XX*wFDKCq|o zZdXt6LcbJ|QN%PvSE3438=SHyAA)VGZzxNRpG?1rp1=+&%6ogwC>$!MT20W5;E%gt zml<7WXb-;p^B1O`wm*>Y>s{@O`{Yu720jVL@|;l+HSnbin~7W-Ys-3!RPR4E#~=$m zexYazHb9pcn;jg?>xw>+6LEcR_EHl_4o+VwNv5KOW{~Jeincx9(Zq{3?E70ht97uV z@W;vdzFV+3@Yf7AK~D%$@?gpMxytK;&G|s~^xESHcY8om(Uh^+@4qRIxp?0#JE4$2 zU@*Zv2uY+}?06~UQtsu;Ph$vmRZKwbYrqs{s@w9u zG?2%lsE1%=9U3CGR*Gnaq}q`-*BNVri@++5NWNPPkb90zk-cSC@BEHpW_8hx?EQkO z(Mp(WtlJn6lO4(+_&YL!ClNu=UZzxBs05g5YRF~H)gZ(2;}=XUtf`bFD=*P*Ehm=8 zmFOoUFewpIa);TG!IF}Q7ymowPlyQq!Oo4G&db4AE z6^Pt3skP=8gcb}#w!7ftKJ{yETsu*;IGthjV@!8z=;PIc>uDUZaE7KHL{U;s&@3OWLSg}T-Zoc{PuMi!p;lgL7Ogmmd z1_-7#!x*|M4|}%9QZE-1syz5;P`=vvKdEEUx?RmJE)XCn*=DhN^Ym3!o1TL5kO|r% zlx$$jM6s5cD0v9%BAK9pr z9<2T+rP?B}m!6Z{f7$+ZUu?r-9)3&PA}8X`beOrZ-nyh;ih2x9*_hL2Lry447bA4BMy*V zW7~6#jQx9)g}3ml%gIE?sy}yo<*M2ELVO)@8&lVy%q}zBk^C`-tWdjgB}MS}0UZcsAQ@c1SD&k^L^D{@nhQ_H=m(d02W9L}W*_NjC_WOByQ}lwo z%#eFff(O)Px1G07xWml(MujnU3|vpIj7QTR9cMQqV-yK%oIOG_vgr=*x4RRnD^|Ri zeju{WVB^XwoKtqELd>CYQ)+&-^s6ZW&xlZy`87{p7G{<^DY(+?X&sqbJDJoBcxkJk z0(N$6MfX$wPvRXf6TT)+iC`oBRrI;ra?8F{`JnA6#*Xv+GYp+lxaj2q%a6PN%kreL zO4+s2pdV=J<oh+1*#3#JI;`FLE@6_iRa{Y{sb4Yfu_cAkbZo_uBkX1PAf1MvETu?V>mj)zygM~4LU47=Gz@>7MS$|zMO7Rv(6Hs7sMP_MQ zU5$V*m~j-&c<8pqHv*ZMlOzsyW%=ocUY0g*XtGUcn=qPJ)dg;H`TPK9@(MMd@nRH* zSkXkTj(aEY%%FA|3iNoswRiO({xXmv-1(o5qg4;9brsMYbvpfIaW%#L@udb{HLI{? z#5I+TpN0#v3OI7-AfMP2ERIeqmPeGcDo9Oc{=lM87ntWh6#*3d``~<+9o%twxkYpW zp|I8k+d`g^$x|-Yvy=wdMOOW&CB54S&XAdPJdGb! zx@PjrB$d4HP|+{gQOITb2!gz2G1r+ovgyzY<2-9mms{ zKo#s#(|Wy{w570PPu?8hGQsLdPgH=vMaq3BmVXmYR1jpWst=f2qDOQBoXme3WvIv* zgU{>GG!G;gF}g20CqpLnAv9FEC@vg7Qt`_WwD5dOCIa)$9X@0@5Q0C~g6#7-k3x@@gPFxQ<6_-wgkEl%<4Jxegp) zi$EUkUR_E`?!azAw(+$Putz&p5aGl^vm(4*Cm=WzaA6nM^d3C)dfg3m&MOcmixkr1 z&ev_m4kVCio1ck5-jK^7KuZmwhtXkS{1P>}P+Yg}&t3ikBu$Iu)*pI(y16>ZsjV?TO>uFa6@_oiR=}A0n`+nu+Op5X6k3Fm^)p|)dp5Cy7>dt%59{hU zDw1i4NOpRt%D2~)5RE0uR6-+J=a1f?xbQ6voVgOuN}u8FAX)TgxbEw=tMcOB4soTW z49Pt{U({QLszA*8$VG}iII3TMK_}*r?DN#V3$IT^HQyJGt_&y%=)Z=J^#wZ{u3-7C zxCePudCr>O($KZzlH$Wf>|tq)T=!o_6HzRyPD4peechQ)-SS7%I#P7(R~$t$WJ|RP zMe0-utXZc;jsaIPV?PRG@Wmj4d$Oe|<*JKO!eN+b`^F2S($385TmSR6I4)oj zn81pmV`RVA>&9P17#hAkLDGc&kVME_^E*_sWV^!QOT^uNvaTaiyeX)LZKgH1SDVoy#%W?+$lF!N#fM%@Ho_*hLy-QqFfMlvr z)ATy+QqE~$&qI@GdHW^`IB}O?EJQYK4$n%!)0fbq;!~yocL71(N5{(>_gNDcF0n?? z&mf|oI>+q%H~ow#7&!i^6-^JU*Nm=jl3qN_%m740L=LSsEcjw422yPyW8|8Qj`vAI z!Jl7akCroMwL0F*P($kHTnwJCsSD3cwB5pEAgFcX{S#7<1cUA!J&LU^u%%@FQthCd zJG2KQrb5juA=_nSNXZR`8Mr}8|ot5C@RNt z?74`Cd;vQ9(>j%*DlxUPB+BB2%ObjqhHaxc?Gd-CU{N#ReH;mspzSRWkh1|KXAZzs za;6QW2Ib9RuyHnj*?(C;o@H`Z=YB9CW6DZocqgh+?CP`LC9n4q-=!+r7}U@;uxg1* zotaoS34vY3V%SU2;j%h8Xb5ZKV@#*ezNW{~>kMMi&y;|$A8L3|u+gJ@Y?lzr#YY-7 zqi&=cb7FpE;HQ}4DPVbABg8mo-EGd95iWwU)YtlI(wj$|Fk?wS@%6LY+w(jvR zL3)m^pf{Lw0*b=Rcu4ZFcy(bRl!*5p+4XdZsFNTgMAqlg$H4juEHEX`CY6jCxWA7X zAaaK+k`pe~x_6O~ZpSYKRy{2a1XD-VI*ZiVynDgrg_nux3V*lpIIbl5;Xfi#F5Gc- zdURpkRhFq~0`4EiF*xfcy}W9f&uPy7f<$pR+oV%THG_Zhyi-OYUYrK(g4ivq(_Xw? z{K2JCjY7yQ!5Gb)vND!ILP&8UH5lQS$}9Q()tu4V^rzNP4s>dH8>hw1Xz3>~cD>%% zzz43!hb;E2qpSLuMa2}$SAyu*7J z^M!SGWE);Pl$g`_>=Oz3eRZi`u9P#qoVBoq6WbkAOpxEvr5NE5^xzb^!CH#2-Ze2X z>Zs4S`RMYVzW{d2)Pqxf)qu{$UX3D_tL$uz!t*E}e!RTuSD ziU4dB8MnsuavcuA)n2I#MvEO16bbbaKPGQkmIrBUq0(gwN1oAsjrGlwP1D|gmQ%kj z#vZ*w7e~~!f#_pr!=R2YlFq zfyugp>!bd{+){Y+vNJ22Gf8N3pSsjP*y5-qHD$=>Vw9v*9mH@!w&uH`mbARn0SVuc z%Qa#JQ71k+=h&la6QPXUMNC-JfZsgg3(_z}5J$z#tMdy#jgBnn8Gl4P&t6=1-X11| z1Rd`3pz7YmC{a;&025;CGRFlcl+!XsjYc4m8Z`-DvE`jh6A?t1C3ybTs3akF>yKCa zPp$zH?X2Z0=8dAbXbKULretbNmXH;2N@jwbir(}W7^nH+3QN1L$zz#Jahu_|Q;3!M zePf)%1^WFd)@6GTM0vUT(17Fh;we!g2KD;b?yhv*3Y!GG*;p&K`ut?Pk4>^z&-fWnA?;Ix&G=??P&qe?_7nGH`u>9SiLf6z=#k$>r_)k(SrlY3{=eh zvfn>fZ_5?;Nmi6bat1W~5Gx;!y+B@q`q)AW%r%~|+K0Q~hm3kPqvqSSeqwXr z+rrZiK0^CBqFYpxLnsdukjy(l@hvrR!{5uJWy=!08tkPZjotu?kFAxEo%pA^1vH`5 zJO1DH@u@Tj|L8gaPerhEZSj&24Ay2P3LjE-Ahu~(Lajox%$LeB`fzBh9>AGKam;#uY42d_($&rE5p>4&+XsK%UTM?5DAMT|;{ zidd}4P5dtS>%7Y-Ch8?zGFAIM@Ubu*35}COsCO7wW)ayPs@Lt^p@$MHIRk06YH!vf5xcg1CtJ}!)b%oZA@NT=0=uF^grLN#_WXD?Y z$%nZgX9KbvkT{pPx z>0DQBgy>G9rby~OLBJ`5L3?$c{$d@oJps2BpwSTp1ps*bqJfb#&!pG2N*is*VVUaa&eSbs!j=g3v{Xc4Bnv4m6-H{*y`+eNIS3BaZFt@*?*q^&c2=B1p_( zGe_aPXx5lxQV5JDLcD{YD$YEy*&NQ#x*$l&$)o;#B_EUc|=@%8iMiV7A< z$4j4r2>t^$4uLSSB(f&76==`Mh;&Jo&@u}IMAyvZF+wdc_m;E@7Qd$2c38ubwKxFy&4rs_7bo^;(o`MnRm)rG*geQaLjYF%0`f3CPDJR5cobQrrIoGvaY)_B zIn`QQF?(EfzDQluliuXdR0QOKvB9U)f00LX7<^ELq8j9vsh!MO=RfA8JRg1Ng&kYb zMlJ?H2Z69QNVoGEvHeW6!UkK+!$ZE28_Y-)A#Y{PWLHVAlU`|Gip;s zO9}LJcbUetErsp>Q&ax$Z#Mz~REHDY(nAgmL-k7{(tOa*o?dYe=~_R+W08$l48l9( z{W~AKXH=0eO=N}tPNdXBZ)F1x56unjr>VZd27zzy(Kbjsq2}lI1SKW$@V6qEOoiMn z(`Np-%Ev{+l8I-epav>)R@b zxobL6T>Y$cj(db>RJY$O_#kwZV7%W;VC3Ceafm)nxh z^xcZjlP~OXiWO6)1!Rkw_VdTdX&1d!+ILhM89`;TF>&N3A(erSvTIb_#=PA@E&9`mPi%^|(vOGT90+_{Vd2-?^%YBBh%CuU?23JD3dmRPwq z+&i(@44@w8;Jl9~D@Je?kgTd3gZE_Ugfn0%aRf zI?$91TNxJ(&9BYMNlYw6Kt~^vZNrnpt$I!eP5HQKaxQ2 zYWH$6sWJ1rv|DQRZSU!8W_^$~{+f=>@o;KlK)|gST`M0RXJ6>!j!%2!QVBQ)L<^`2 zt+||ac_1d4>)Ja4(!C_DUi+$7EbNfqX9tZ=q{ngAOl1;dvf5L2V@o(sH?Rj|tVoglj*DR|pZB*s22W$rqSvk=fx7 zxhveDN(nt|jm1m(rpV-Q+u14$=Lai-w0UvYy^CkfvQ9MSYj+imzQBWH*cW7zkjt@I ztB*50jWGIlB1I)9*UtNy9c_NHiM2>1QyLi_$%_l3cR>BplV&*OG)e0uk7hEaE15) zzy0F0+aq#jvL^hq3MnTObP8PXzu_a=wev2xq;G$pX2#y=hvzqk;RgR#qYoi-a22rh@bq{(|H6CP)lPCp@s# z8A?o8Pp?bTs4~)}SZL!En5@K1Ajff0o5B(>LMcuz@R$HK5QUk1ihc0+su9u z>7I8h*@wP29se!)s_Fb;+Tr`K_5|U1^YMlkE8K3d|FH?f-&ywm`1;GRsM~jY99BR; zk(MrLknUy_7`jmbNu|3P8tDe<25F?bVWg$IyE}#)YUV$F`&pi|CPl_{5GWkLlXFn7r^V^rJSCd#(=jXg+8W~VI%eMOM?WRL zfJFXJuIse$hBx5*qH^gt+3i+Gj5n-oe7_t4>sY?&0T^kcy1PdKm<%-D zYaQP64K`$lhll4AF+S6HhegqW04BbkA3J<}d^oX`Z(D)9AXnEK(Dk#$MW!wJO}+f4 zP?y*>Gb;x3=xdb2m3k{8b#-;sj~@ePKko{pzt4OHO<>b$7_L(~VrqHPEh{T~jfPFh ztBho0(9=YYO0zFX0wuAwtR1Dr-6ti&<1gZ(prZj2nWR}Siwh|`GlJ_;NYw_>2n)^`1xLMkv&6|8|NB=5;Rp zlbxkzPTv!A%;pg}o}HaydBi(?k<$vuI=iA17}sbSf_wNb-~76;Bqu-5j{tnYQiyb`_x8v8j#>rjRE!LWc=zB~mZ(DyG5 zpyKVx6Kzw;HK(lTh{FA9Gtyasncklgc8}F|QM+QADr=KUDSr$9#wK@;KAq68QIx%A zybE~v{hZDODA`Vp#Bi5@E{}2Td@uWbF7Jr89XcsF$5XQs0Ke}+)hILc;jZv7@N=jc z`I7k6BQMff5J9hS0AX#$UOS+KfR|-#Y_EHI z^K(=;gXUdYr{QMSnzjHu>G0yQbbzQMApSN*)3=%oVd*iWSt_{eSnor+`~mBRuNc!A z(78BGmAFHpdRFdZFKZn+`~s{){`WzRs1Ea`-Wz*h(2im!QFKnk@1%&>FbQZHhV-03 z+w`y8JgYC)#haM(svTE1e{WuLzu7o+ZFP7!Y1|59%p%?vy*gP~U9}BWk1Ysq866tp znHYV(sfB57Y02HDqO6Q1EG+!mFD)a(`p@3w~6V0c)ds3E|09>B7q=nr6{4|cC#6%km z+QchT(OjD!jqiUtXuAp47qY}`lxK2$orxnuBT~AFjrI8SaC_DdzdN(z>=H#y_x%)p zV5MH|YxGM_HZ8Ulsh4GHMCE}ZdD9f7axH>U$r&^}u5|kZulplaXmAU;yP`zOj1qIZ z?99``SqKiT$901QC09A_$n)}Lzn^H~g?=G-i&%Q-6Mzv=J+7lMij>7SJVl@9SV@Rb ze|w^BEZ^;}!d3w^59t!MB-!2{f7^N;`!TMuC`Qh!o4J0w`*Lk9I=_iY6bgVZ8lFFB zHf*S@E&J)fzw#Hd$#u_Vx057>=$xMmG#EjmgtS~#p3^pmGzbOZvHL=zdfl$pK#+{f zJKC|G^G!acc$DFKD)ufXfT$tm_p~BP#;{birZa@+c&O5Pqkh!AXmsdDPRS?d@h-XG zQf1A$?m9V)27o8|7##YnaUq7tw`nS2=4n0k%=SaJrr77lECJjNzrem#+sXm9AL3Eb zs1+NL`H`<7xYFUObN3{=gw`cR*{jF%<^mVBQ?L6vhfbRQgN^?MO#X{gQX&zV0hzxi z7chRvO7Jj8H8f+HhyR`>lH7B&k0wjmhp6}O*WNrjDN z*CX*1i3P>LrgZgnZJnyGcp~e9@i=NC%ZT&UE(O_Fd&!Kj2Zz2)OmBYRrhnJ6_}~^B zc+vMFuTlTK&6bi~2Aw;hRADWaWM1`;fczGgE*o2CS`PWz>Y??qGVR*)h%>-9Tc%RY zN`6wcTkbRg;fbI#Uk_y1DWg@f!ivq!RRcKF=xTxwK~(w6UKx5GbOto-Ow~fteHWtZ z6>Ph+v3v#GxcF@rjVYCH*L(pmH|X`(q2r!{pzpcG5BtXN#177OT^DWUhpCF$t zlQq90`Wk|LIpk_ng;-+Nr@Dj z2fh=;j_6IpCfGC?L`k&%#m6my8@sheN-vWqoMt7~mx|w;-;<{;5uC1eS~S-P-6fw+ zs3(!jOIozenz9uRqpA9V$A`8i>X)Zesz`U2#He6@xyH^nN=MI}slJRh5^rRUD!4K)~A9@|5u81d=!&S#)M^jQZ^;Qce9vckc<$J0lAaHWCa*@<%* zY(4o$5@1iS-!zvjf&D4nuEXNu3IVibiuUb+VJx8Rd}E~N8Km+xK(&)_Ce5oxbVs=n zuZ#F>-nJj;E+ZHW)ATxJ`Y7DM$q3#UgBLdd*hBWgL5fLMhcdV?uJNdq_ zEh_lD;QMWIq4+M0a*Jj@0(TLp;rk@QTLIJq^w160}NlKB+XwI4ZVLvD>Dg>(GF$CTpMV1uIanOpPQYgy5!z%-4d&uf%hj9`N zuw#E^qSbbBIyyc09eEs-B4X5QL0JLvF5);xop~V(NNw|8Ek22Cy3Psp*so~`ca^>k zCeFOFQAsu;*x`EAuydFO6AI|CZ+0()H<3yN$lv+L=K<3IRNB{P}cp zMIZXzxdVB2deIMlJ7i{m{^zCQ(AT-LQKtNn3{%22_(nQ%FKWo76?}INCba@NaN9`^ zQTnFLW^H#Wa|h!$ChVi8<-l{Qyaqi@y2qseS0H98hBKZR^XbNqI!2^BX`h!9LyBNd z92d+F+=`TSBtuqe1w@a3m<4cky|9I4V_)#PN=2 zK2hxMnL75+N$aT$gm)(lYfVo#KqS<;TznzP${==QH-+NIZZNu4ubMZSvFD>zUqc*iEhZ#ed_=AT4@-5s@$)W9Oy{Ph)aKb#)xH>QMIAi2*$cr+x5;3& z_;5!#AQr?u+4g(*=;TzgH|q;RZfta;$#eS%-V%iNIShZ{nGt(xC2bOeCyx$W)*1{gvN?(sE>Egl`mGt`>0@^qre{-W>bwDtPRyaN}OkEYNRo zyOaPpmDSlMC8>tqC~$cXKA zh+7iy9O_aQ8EWKC%of_lyIsv!OK%hQ(K3oqW}Y1HelXQiJBYJD2Nd`nW6QYwtk1Jh zwPJ4S81jBR{p4%pI?*i)i;8&=YZTLKk8E@Kwz^pM0j($1z6oKQgl;*-q;JQe@qadg z43{c(h43UcUNWK~rT%&e{jJ2(Pd8Q1SZN19H|TkWAOQ}m`DgYf;`?{!W*`#FMgdL9-pJ)`1sGk4D?L(K(FprQ0@W0= zcV4=WzWd-}C|AGCHL6h$cP|_#dAEsX5@@IZqZbzT;G6`g%6z|?brj-a`1Tz5YM>+Z zQ9M4ZO_S`Sa!(8IBsQg}In9ntMV`6qwJZ(<-bZGaLRZikrX-WpI2DiPms4tXQFj+- z{)@ftx)cytRwr@141UgGeNT@FjtGrXC}^Ajs*t1)a6j7R8!Aq!T^uvUG?K|B3te(M z)Z}8GGKB!tGk1)A*u@j@xby_IS_lLTE;qia{er0{uNfSKK5a7sxI}LD^I|s7W7ksh z^Lkk(N7|sgM0me|nIa-zKQ<>DN_AWp7_3L#EuDv$QFh0GAJQXWRj+K*DZuvV)<(wn zTO8KXKo{iQ)i^uyPn9q)fo~dlRZv2(XkwA^avQYOGU`}LE9c2P{1wyo6%NWg9}1HwbNQCE>=cP2KX}_* z8<6J`QVxdWbex}rj7!KdYp?n{Z;z-HEe~z#opn=JpDgYyc*kSZ_d0(46LHvd(p7~0RGs4eZrsR(YraE==j~}H-OuOl zgo!i!3B0cP7TyDcf9`T_&TZ zH522J-@nx6qb$}LD!}Kc(ZAli5LFlX)QGnjT_)lt;`+Gx*6`&u=zD9xLf+n3+bf<| zgqvb>Z~~tj=v=kKE!B?<-XLum3Iy;B(*h9GRiNJl7wR9c8FaIbTTFkw&8aC|q0{`R zv58MJp|#fOBAJqKH7F=LCVKgr()$TKLA2)I9=ZIqkTllaD~c7qs4^JNEyI*CplfnU z43ARWLd3jmtQUSMgO`3&B7KPQH0a!m5%+IB8}1$vST(i%=tpMtGm=6-3!S&VZp++- z%>d<+{7o}LW+&LuxGGv4B;k~Z#sNEidkVWiLJp6ML>;ZK z{ctc};gOf;Q`nPVa`fQ))DmlUaB#tWP?4>;hG>W&x)u`cTE+tqF6f~_dw(PvoOxKT z{}u)je;k3snp2-{A`0doEQP$;G!n|JOoV zr9iQ5+CY``N3~PhK0)xSMzWu9^ZoWM=ttl9vE#d!h8{h0C}A?CUu;uNQsbloc|rR3 z&n~%{hU8$qe6sQep*EIlfs%&sI?UKV@=#{Qi;IgN3V7OXq0^MV9)DhZaeca;!=9z~ z_ns;F6hK@uj3$2mTv9y(Os_^1S>|b>aGGF5R{CaYSHE zvY*m*4~7(fe6PebKh1o|IQn-wbpGg?e)R{zVWbra!nJM--6DTxZ%5s^N0yi zJ=}4V;fNQ9a$50ojGp6soO2zQoH48GG}>C;zj6MVZ;i%(>PE;yv@bzQ6UVWB+E)6h z6k{Z|2G8r#%s}dkKC5{3p#t>J*%__rS1r#m)@4{T^#aCM`pkV*VN#?dL=$46H>{_6 zP3lH?<*R)l6yIY%nE5QHo(0YCT609wNC9ofry)J_vu(h3zWF0j*gl}6g#!FE%dpF2 zSb+>;62GmjcZ+wFNY7&8nfuBqAC?*mT_6(J*jm#U67-xsbWS*}pvu6aY(DLv5xqGR zA-O*7OhtD&$n;!nx0eq7Z~;_-@0l{tnc{8w;WUwNKuWtK4z{7FflKtKvD6#J@5$%rTHl?q6w$De zclhk+g3}l?kPAIVKhCA@mX5A(@y>EhKrqCE{Z3GWjcg2-UfLf0@qT$+w2Rh~CgOXBXqu>v>W1D$!QM6wc$GNz|&xo#LQ)?5{iWTYRk9dTSxD-j}XLj;n z8W=U)Tl4MxekEyG3{3kwK!QG(+=-cmptHwKr)g6-VTGQ=wcK$~#FHFDcEeR&02=T8|2{S7J52m2{yBGp>jL{jwn|;9v0-c8&x_N3-Ubs z`b)mZN!#R3RO8eP{lA&~x6K9d({G5tuOXVht<8k?hFnP2;TdBFU0Lbjk^Qmpi;#M) zMrVSsQBLdm4idZLRZGKAN0~UC10IuTN{;?=O@olSd}CBTEZpWjG7bl+@W7<2P`3+w-%@huA{L0aNi3RF9Tn1j>Y77m%CgF{KX#u$zN(& z)Rm%IDMLt^7rA=_YDnYkSD3JGqtNwhZ7(OR`1pI5fq>GC=67sv7a4uD`?4Cwo_%$K z!`kseWzjdgl!{Txy2Pu?jERGTPA9u#Y2Wu$;Vk6_Gw3f%{+k6LMC8B) zbL@1P|K}5_fO@@P7bHNhkC)o!;GrzOtCSrko4h336smf5aPlF!2m>-vt;KCc*_@=$ zn!!aDuBxJ-C~cyLd6-T%F}v_Q_VTrH?Ipg6H~s1^%+_pLsM~6 zM8wcI>{hMnMuEjc-!zv0WX1>5E*&BIDVw!xUYo>)Y~MB$m|;={!h5cwpbR;CGpwl# zz!afToG!6aFBsw4z7}b<-=YCnaCqMq2^{zAiph+REMpX$@a=lc-%1n6gZRH493vsV z@};rJ+W&2XHRa;it2VX>`jXa6)#7yju_N-l86wq5A5op68H*?OuE;J+&i7!HyJ^`) z#V?>#rhkT?Nol#@jQrzY0{09)q>ncZuGBcHcoU_Bs}c*z&tYD}k0Q?w0&g`$wC@K@ z+hQc~Kt7fTdS)@kLwYQU+)`>cf!Nq2KH6zIuban%y9Z<96jVEEHCG|o+rglinHehP zThXJ$BL3a|ayM!z@L4LQ?)ey4D6+4FecAhVrLz`63>y+7-7Z&=lgPaccu&h@Pg_1^8$B=o1nq z`>XLH!r3mXL-M*uh6nR|$hV7$OO{3G&bb*G@mU@XHkDY7UO>-DJamddoA1W$5h}MGWVKsVlUa_^41S?(Vf@Fq5m|9Rp_s&e@f+neXoTw%1Wixtwoc@v}F^Y z`NnL&|5Z3km{D9_IIV#1;o%WE9q|YB@64NZUEC_r4=124(h;-#(|xJ|g9-nW-O#{PVJ9K<`zBe5aaW4FTGfNeOy>`BqVqnjB zk1CuhxTWR=AMiZC1U#|jeet||womI0GIg{=8fo1JB6?4d?aJ(aDzFOSge6Y zS;xG9FtYyI%t&I`gqc2256Gfhfo^PU9N8GI=MzMWvll4^$kcis{}@3oVsoAKo0TU) z!whb2ZqEB%8jDUAXZVe5Y=W%Z$DcMPIyGV!UN!w& zkg~QlH;`!?KB!M*>w0+6Y9UD`$;AD$km?&?c)lzW-G}dQ5fmzE)Tq!W&5A`Q+iR;g zq$^Rj=sDd_euo~{tB7p^I&J63fP?pPzj~t^+~4OFTc&t%r^)~tSFdzVG|c%}!qqyq z)mvxzl@ujQD32)1`_6ofL}phFMg}7Em~y0sRYBwi4@9ky{n-)dvP^?hgGcG$r_dt3 zhW`l<{|hRxkOn@!0(hL52|Bbs82aIHptuds;N#z{f$SMMHAHn(AMK`wta2u9r zPRA!6_*VOteX|(*O(RRWr8Yt;;e~5;TCw5vQqz`0mlg@m12-k}7>(Q<6MrCGeF&;I zZ>z;SFedbcEQ!eFda9~%3pp61ApGh7G`tZ6e#EpRpwp!&qdn#H&?{`fqfeQELzv`` z*OB6zmhXt0*?*<<-4kr9E{@NxgcUXrF4sF?uTK^`yJ=T!u!JyN;VUkSq;ZKT{4whunU^H7FU1c!t~p=!yg zVK&&o^vFf8xjm#2(Y*wy` z?VzKKouqi=LJp+lP$#dK^=nT;fG^;Gf|((Y>yEyHOQ*&sy?{NELT$ zz!;Aii*3+e;zK#Uka+Az(4=L%;+lMscb#sE{?O9dBMRkWT(+vlM76iKx29D3T%yef z7h~GAR;;&awwmsI2qDV(cfs`h9Mcn zwcPALf4bnsT=K1@?U?_cMzd-j=a2gRjrGurHm9o})I$n_^6h3nu`7?goyf!c3NTGK zC!ZxguRB?oGw6GVciKIHn_(etxBc}B0ZuF>6A@M^|R&34Z zi-dO)-!9G$O&=rP_Tb<`h237>HDaMcPx3W|WA`b?c4EuF04DN>R<%F^VRz-krup}> zHBrtUN!`iI39&EPizB?8-}-rT@EXo2#xvjR2z0; z!UYp|=pgWgA0N$MI8&_NrXNkr@e}&toEzp_qSz!_h~C5$GW1al=VlmRWoGjmNEch_ z@W%(_8&u2;GVg8vI8dg{zW!&aR+v`kh``ecr0cH zlZB+&2XI3v7K(AgX1nBSP^d-`K5sOQ%BC__>Zr8R!_?!-EK1SB3~vW3#}#|>Cm zYW;3cqU!$M<8i_F{#_Tn5BZ@NNxPuyf(7PH&-tXL%KG|HIdpi+;HR$ilgZLaOmEol zv0HKkZNN!8b=EBaUlB1Eo;LfA^HRT-+dp^mnfM3qE35jw4lfj{yY{6@7f@^VKi}zy zQ*KgXt|e#{ z?-?A#ewx8atI{*B4}Kw(4-FjIEt0)Hux{}#TC!`gd6#U9g%PAU*Gx!2u+iyB#Z}a9 zdu{qS1h^-fZv}B=x$lyQ!XGc8^n<34FnrruZ$zs+^t{l*214^THQ5(BaMT2^Wr3(5 z?zfJ6wAS$%UjIae((@1l=)NE)$CRfC!^MZcztLikAL*ebI>#n|=}pZvRcH55!^jEJ(xmqPk1_f8mAH$Gv?)3m zt}wh;(rdanSmSuvZ22Yq-&)^cB)@}&Y;EJZ`8Z`6U6lk|ZR`2v&`Zn*`ST+9!4QL$ z5SGu$7P$Ur2ATj;ZEu{J<{AzR0)8TMYKigoVLNq;qa_fOm29~;c=V<0D)sdsR45(l zUmDs2)KFwUoV$8mXu?EbJGa>xc!h>NA(+_uB-cNbR8BeLXTiq+-%a4-RHdl@=Ebw< z_65JM(fRWi^W1^q-o%IU>jqC}Dk|=ZtzUg;&!;X$AnKP($(cQ{QzPh}4gj zONjsQMSgb?2<~OiZiTHSj>s}eX>VN1`8Vq(zWBm)uMAHy+L+pjc~KB@*24v!zV#RzM^I z-}}mIUDAgJZkqUUFlyUyA}q^VcD6zha=uBNdb;_W#Fu$2=A?`w6WZPF>yO5A_8To( z6bZZpu2Oy^%usT-K%tL4XA`Uu%m3#EtcCJSp?K-@-x(ZMKvCwe-!gbS5U9S}ppTC` z7?qnTXYSpfVipBI=!ri479%Is+O}>fJR97(d*b;;o-1h~g|Eu6aKH!(beC@&T)6gQ*WE%9p6miT09iAs#&NeA)R^UVW`jdrtN}Mv*jtiuW<}h+06i|& zHC?W(%{*}93uKBsL8qTowg%`YX7}SOyrG!bd_P@XUZ_{|-iU$l$f!!X^$eCH`IbsX zI@X@X9w0C@Te7i!c2-4{wvRB}U;5@)jUBa~R6mecH6JLYOCDau&zt^==i=9C>_sxkuUWdrohVFV<&otS=kckk;GTB2R z{WJ%~$wfhYYpbf#L2~)oRDJ=wW&Q)?rdG-AUO}g7M@>0gI7qH_W${sB-AcwcP*Ti{ zgXQWjhw$;fFD8doRkWi+Ts`1Z!O-~R8kgFMiD;CzAsO_;5(YGifC`LgADH~}vikd< z+uncIDAKO|7Z$xF^2>(p#6r5}Dp>o%8ik`2BR-o>YS(3u_cSQ6Kypq%(M3~T52xUk zM|q$g?(C{JbIHoUTiwlWGgwS(byy91I^`GtJ~jgAxSd_sNert?-2B-K|KC#FdPOt5 z(|%ylM;l|uH^Wps0%kO98G;Miz6-Z0k~=;2QzoS+*#Cc)4)))r18^}>uta=`;`?rC^R@|3pYWj|M#`$UU=a!$VKL&c}Be!#w zFCA^tXHNwiMgZS3&8eml=ahChr8IvkWpZ6XPO)=1=7TVd9Pcf(atMfpGbly zX`!vNXX;~sZ0AYBpNaVVk0JQJKH94{A^-PW;q=8NCL!s}67xKd&wfPdkETcmGdgA} z_}m<8XNY@yh|cZqnwsnJr)OVUySWjcbv&?ttDbjDv(kfhV*7k=_q^3_@D$GM%aIH@ zzZl|(@pV0(_lqFn&`&y*ej+9(?*YT+;G~k0lA7e3+XL}}E{D?uMYn%>qG91#jXmvZ_a z53^mtVPx@;E5Qw6hx8{g0o>4ntx&TI?NxPQim0@|n3RDW>mn3mG^t8@`eX4p z2ct0N!utP)$^DPBYSM@j|6&))u+D{#u$-}N& zY0}T_HOBOKQUFJqDRrhcCiIeJya#esIa* zmkW7E8xXIskUiX-1pM(TcN%rs6nA8}y1h+5&h$={&JNox15GL|+xo6~p_B#RkMu87 zPW&ZiqtPEBfG1X;qcyJ=8|qZz7oLqIm@bSDQ=YAmC%E%7@FTQ+v_#uC25U!dhBI%4 z;vp04Hm{v=qcbMuZKFn4ywg#bLpbn}lr7U+tNvJ?B-MhahRjYF$rp4?@|rGp3->^S zU|r?L7x@F$H$g!!yaTnt*AVUL5s^}>@YYiN;tI5!8#kgu{{}Y2pmIIC|Gj@xu+gRD zSqx7x#>ZppgpDl5lun!>+nwiGBNlWsP)x373v`7XrKEBxG9 zUDcPO!DZEHc%7rV-y->gb|PIIgcXL2_JexkFMcFManfOyW}2J zOd3~Q$*vrXg@LXhXXm%X+vYbHj5Huoi8*@W&`q(10nX^C9jK7%x^2JirfqR zHR!oJOj6rkScnP)0)s!E9Un_6C`4$ljgK47mip*LuEycNUkZvE{Qyq1)7DNE3Lebe zI$RD)9o35_JFz;MrRMBqftR!V5Ucsu?o44rqM2H|O((POH%ewe5o^oC9D5x2>a`j6 zaGr`SCTNjV9s4E?>-O8uNn*V1oP6v>sv;psY=YAy?H9ju23ePruLBD06SL@3kLjav zzfarM?AOOT@S~EOnCtiPk4+;%*Q6_)OMCcsf(DLM-W(sqZ{PJ9A1}D&ZemQ*O@pT{ zSbcm)h<3XU7PenP6Glag_F;oE!lxreq79Hl`(^cs$N4@T4PNDJ}2W=fcETaz#yU+-r~c|`QEv$ON(*V9b7_-r{fuKD4+TF|ZY8kPd3l)yY~UO7>6rV2dH@ z!5Z-0h~4I`FZ@<1)fJzLLdB)z9{NW{+#g}@Szj>A?j;qb{K$`cj(7*GlKSwI0cpYc zc{es0w|@UbbJ$N!&Y6ww5KJ|WO|Pj!B~t*fx|DTMhL-fBH15HoN{ZOi)l^?+E-p6B z`KMimX#e@DugH|%S8BCq`HWVYt8f0=d^8NR6wsP^Bh5?H^~8EVda`$16P7ls?I9>H z4%)U`anSQI_zag9ta}MEbe1kEte180iJ*R37XV<(p^Pc~L7yY8Lv|>)zP%L5TKulB zW<=q<-VF3s=`Pj4`!I)$Kf|`cr0$>+fJA>a^5%sf4uBgV!_M&QlsgSuc%ZWGZ@%&W z0tJ3ALf-4>q)+q^PTUWu_&7d3zWMct2vi~7y!Bjr$cjbA4J!%Vnkm)XqKsQaOej_a z6QLi=0uF9dxFdKqiTdjijrK9UMfy+j@buVmed(`OcOLkMH2$TfrI@MZ=q^CLp}V(F z_Ch3Yyvx_(#3zJfdrM^xBXnU1!-}yiNQnLowa=U$i24KLZv)tl!KT=mJ9d6QyM(TB zW2nUr->2z@$#?fUO9XuEG`jgsSIhM6xy6nYnpn?pR|Ylb6_%cK*6s=Ej%dH>E+JHp z*y*Al34sNr!!j|HL4O`?mKsuPN<~Sl-%9BBf23gH)*B^=J;dkRLgYz#)MF%GH}7Tf zj1pS3TTOTEiQfuM`P8k3)qqz|x^@LbPzX_S#0TXzCY!I0N4;VTmB-#U3IIp^sjs?E zYH;f`tr${|mB#s7zfcq2-F&M_rt*QZTNaqDW4Kj4q+YsRQz>tN#P57W@79x;Cnoaq zRRBKN9p3BL%u^|twdBCWNVD@xFd!%qG@VnNOPrqcDaCr#d*gM-)gAT*jLpie7TnRj zUkG^KdToiGzYt^4bk0Dpe}Uh-+_>%9W_R~w9w8oK{*LS5)Qf?8*XsyvuVZJsaeY7F zk^gCiNeuN{3i|a>?o6}qMo02ZmBRm?cLb2~l6v3M9I6%jE6z*1!>d^cQ!X@A6tpcb zwK{mEvt6M$F-{Xz50<=Fo<ni^n5#Oq|mNJZS^@Q<1vJHP(;q;h5q zzF}tX`Z9l*@-8{l3wML&@~?g?gEB4|cY}>ace_#1Ws_XzLCA#x>8T$8t6t!r2vgU> zLdd2!$(JT1ITZ7}2>jT;>0uG{J7)>Y?4>N4zH~v$)Ol!si+*j)@Ar|v(#gweBjZ6P zIkIy`aWw38=9}4y==YQ(rA8jt8P?%ez_)MCw>J3F$7k1~U}?{F1(!p{#O^p(L2#QX z(_iV@KnvK0NlRe*nnsaXBne`9O)P17!e7zhv!iq+GkjM2Tdp|t-OUFIVEZYu2V|B% z{2=%IE((|r|K>{^HoSdHz@I6nG_fCK+!7x;Chdj3S^Ex6xQFS;%(XGF1v%#bvNXe1 zD2Tqo>z6Dw^RZCq68LFJZcMJHN-|nGZJnX)>c_hBkN2*zZI~MB^nK<~K>&~n`r8H2 zf}hjjw5KfT79l!!7eTjLYZgOYpD0a*I~V5{TiBv_WK1&*^ig;Ryg?*9rikWeSM1xw zo_TX2W~?(d1f zhlP=GR?Vvn7i-j)iH)N(i_7l~Kj0ktJ2FT?mcM)XBy?>G0S*U}xMSXrZ}ksO2)EtM z?b%zZ5WyhHS>HqA*yp-wcKozWoFH0&#b24Ho8bD}S)-?bp{k?S{&NHPLgnZ?s&uzq z^v7Ee*e`4THx$dGXM8K+Qt`TD2YWsCzO}zm1jE4YiBh~{oB4513~rR6IM=WWt-2F@ z5IMLOTWEot7>(J}XH1!<^iI@9UurStu5^o3+<*o@pAM;T^K^jq{zoj`hW@ zK3#J&Li#QBGlG@q13QuqgQM;R{a??Zr!{0}i8CJL!ahYL6VzCvhR#eCkRjP?Rl>_^hoM z5=O8p_*!)l@9#z4i1!>c8Z{D`kq^$T@UD z`?wrL;c}zBAZGg(iNrEvup-&%9+hy$)aJif(@!V*dv4KL>zQ~Pq>s!E;gZ4pg&1rf z*EZcaTU-ds9bQ5FZUfB>!A6<6dFr-&{z17Joi`oaftDs~q!SvqMGL7M8{y2{$^@-i z{Bf2UmD+CF)_XI-fu9Q7j#nYQxUYoYS1N7aq5+^EBzqLjbZ-!Gg8fn{3IIK~0Sjum z1R?{k38^1LsT(*qrf4wS=JNa4&n@EIvD-95i0a8Uv??j7wQkHro+C~-_VDk0rKD#* zsg8S75+4@WZfx+;U{V33ILQrw-;Gs+&h+zUDjr=FQ+c=fgi8N_gmACeUJ?mmN~H{K zd*QGTYVKV^w_>)g=L`f=ioKNe8LFS0hHz3MF;eO{t;r3x6vpioTObS-kEcWMO9sjj z%0U|YOq_L0-U02h2Ne}%n38LPH<4#`#WzdLs)3v8Bh!%IK@GN#9Pk|~`?IMbNDq;1 zqyQ|$*8>O5z_xb|)@_$p!wRqBZB<{K)}ZFpkZ8AuM-i}`cYa!e$ivBkRpU~*HzX| z&tx)A-&qIp0-`!SymD{4nJ|BJW*5yah=iWP+F*~)ML0@3dl{in4$xb44l&knX~xbdcb$6PAP*bz*pix>(!l8 zSGmEW6~oCSAO|eny@DOBJ%Vc&_oV4|={oO-ep_%i+Hp>OHxl?u0b`K)P0FUk2UbWE z{tEKWjo3MM8*)Ot3jq>8NYo&GdL^<7dTtg+w9a;J!_*#fwv<|ZCsR8uG*_WO%6@XX ztVE&}{Z4+%M6RhQwb=e1tH5D0Oc6WIC~R+UWWcN^Dvg7&e77)g+hh!@anrM!2vWTh zllQJpmfleIvsK)BsyL1ZNuooo6812@O^plw6l>oaE!|`cD6225qLz4D3anpA)|>n-SVasv=koneT^G(@89F zu~1dtpnrWU9*Qe0zTB2lvH+fH#IE0vZ}T0YE#6|v=31Nl7G%4ceQRz=ywNk_B0K6i ze*AKn)UQk=B9al=U=VM&7Io~jY8^*aH8{7n04z3Tw(9FY_+ zaLmdlcZetfl(yTF2;$(Q zBf6Q`)3i}4{@m((&7GcVPDrio9SR43M zGR6KbODvi?`UP4Fkhg7u9F2^+Ac8hwK$n>0jJ6()5-uD8nf`UynhGv_{13Y2?8j*; zcVtt(5y-J}9#0sio+5Zbxe==7n9ZQR!px6sHnFz#IOr>4EQD;jVI<|AX53ho8@%1- z6hap--+|2@MGA7|`~{U!JNW_#lT&C<`LIVb9-b8SFj`*EYgiOz}# zdVF7mqxOL?R*gOm_fS6&>56?=O@r4%r-6d)ltGeacIQxSuOuV{UZy9pZdN43{Bey$ zIJyM!+D4(*>vWN&mb&+Rjn4|aYaEqSKQj|?eo3&6YiV6tlV00@<`ImFWBOpAt{b&< z#Q(F#JT`if6MZEGuqP7*HJw^TXxEM)HKEkDBNCla!e zEAGrFGVxtHA_QnSLHpCQlwo_if3ZvA_k<~!#Ekye&#=W4fvu(+;wjqo@fTA?H9G%( zXc9?!eR@ex%M-*$de+3%;tjrnu7m~_8R`*nR?J;aclbQ^PhV3^so)a5_cTBFj6cC9 zp%))I*fa3Cmb8D@YoK!5;3Ri_=-XjtgeVom00mXNn;Ola2-yNrh-wU{YQ_h&KT-B% zcQ&IGujaI_JR>KL(kjQ^7?n&6FB8-H>1!**=|5aFMsu*R4N=Rpx%6+NpI5QQ<%JdD zM?|ZF>{Eu;m@WOOh=l@m`N&X?e0W8W?D|5!%;7a4PvPx4LhR%hax=7!+|J}A3q!hq zoW{Zfj`iLj@&|GQKEzd%XT{1F%FQ~`3$>$*q-U$sW~P2MCYe|zp?a^NLxx=N)YQ7+ zDqW{CGhjPt!B!kV_e;RV;U}hpW}2}Fz1Q@gL`lhLtklC{sy|>-x?g$eAfG0jpA1R; z8UZLArrOd)R@0raS@BKtYtg|M1xze8w6At0C50&GLlkWjM!#{K$$UPv?Q<#g1h12l zY4dMA5n6Q7#R(oSM1{8ckA1d9<^S7Bltyp*)3|HO$S0cTWkd5HO1g;)u{ECh)-9dt z5vLNObv78k6`!c|;GhhwQG7JO;T4zQUUdh&5vpVwb#TJs zZ|IWo2bbZ6V(n>~U-tZeJe^}>UC|n?+a?Vf+uGT&?WEz3**Mv;ZQE|#*tTt(jcpr^ zZ_YXQ-Y@G1%r*JGV~nSem|2I&!U4-~(v%@=gK*xhw~&B5fT^BLQ$C$qFm}VYV!Nma z3{W@}`jas(yzUq??1 ztIgHwVzBDR)%e_arI?l$!@aPOc4zL9)Si+@NU~Tg_}ZBWNAMXZ(Of7)$E(TaO*FWm zJ#BO`*z<~}VE?VWs->g|p(rPxep|GmXTYw?|)Z3`PwF>ZKy?XGnJ)e43*2{*L zeKSV;Z{5s~%h%T{C<`J{H{w6Vvo#G!*7|jk9SqdGI@;N(_XF&>>yf_Xvp|wMNC#T3 z@6cBh@d5*F>qV8sbBTrtD9%)<{FzM0R^Qd*C>SwwRJa1bMXaLHArf&M@)wnU@sXcz z=L?b6!^OR@yYgY%4LXNNz#<4T-e4!k6K%tzG{xjiGTYiMlTwZ`SNn#+AU$#UKI@Gd zjxns@TxuRzytbl@116Ha2aB*K`G@4^Cg>>^G)-t~j%vC%-p|o8oya}J zW*3k*8G_+cCav>iOFmvr)iBy&hhKw-N_C;&XXUDSamk83*kGwHFRl zleyCS?z>m=tgUwL#nitz+6PMrS(!muz3#I%1R1}4Y)<(3en-PWr-Tl7{=VKlmgPZE?XO0uD9sFfB)ry*}xfs?WQ)yyS!v@hdIQ99( zh}F_izE%E)R_A7OXrI*hUrz|r@5%2=7Gn8-``&&75kD!9Kz5v=d{gY(d#f2oW;ojv z+!m;ZuQ_1EoX&K00s?>&N`r##;z}#ndLxQ2Qn4e|&Rf_Z*OBwOr6!hSH0_p8wu)?5 z14u&}5?HX;#I{(F#ATC45??<-rf#ERk@OTMK6R}Y1eqmX6dLMkt;AU5 zT5#bkHpQ_oux!s*sxCaInZQkDsq3#I90N77TE|{(#+NoBfj((#9T_rYkMQ@M8tlD*p@Zkw9 zyejyNL_JajjH*E^ZjR*NCjO>ylsJhKpDsp%s>o~1$NgHBINC}`S7MP5y~%TfpUHEJ zY6SLlR1-fjI^!-1&)$cd>rislludhGOSv&};hz;9s<-&Xea0P5 zl1Tt*8J9l-pCTkUonztuYW{V>#MQ(=oo5dyMrILhB@0ziV&os$g_Z6rjx(_eh`R)P zaPxaJjdK_6!|d+E-E`_IQbObWuj7lQo2`0e?;}NJ1`dwAwz9&Y^V>fTYz-IC6-m#>3 zt=40v4S+~Bmd5w8Ce=8Ga_$?UV!c*Da`E`3hv?Wla=x~vG?dF)LDbWrmD2>`!4(WJ zK5xn(CFyd(HX(hn_4o85a-4I|haH&GF}|bYDdOHcBjBA;U!7GgkC{X6{8Jl4uSy zI+hYkGQpIzC0B6BorCDk2rH^Mng(~_@Bynpr!V6K2xP*nKC5Cjk3lEsQ%(dC=Dj;l zOc$f?gHp=1TRqp5;d%Br55xM{v`vKQNhHV}9dLJnfsv@VK$cKNx-j<7DbY%MQQqqY z_Yu+U4@)#sGL4jwmt~wf7;Vlm`=5Af;y(bVfUBQVTop#)PhoYwcKx%8b$iIYY;JHn z9_a>ngQCP|>K%Ik=5*aCUAw8>*P-Q0|B>Yd41KN#XO@pM^05f!=_Qc?H{4|9`5kdm<$if$eZD7&#H)aQvCElwh#&%=Vu_=YzFy)6>c9*505Cela>MOI7!Y7xv!Q-t;;-U`xMS5T@g+l6K$ z0?lX=fH$Ks-r>tjR2IGm4&j1~nM6fO;C$Z^2;>c7rhf_piTWy7hvdtqf=7U-B3ABe z|AZAzjDcTI*>t+-4LMtmFQWNOBbsWWIcEyeNy;~%aW4j+N7;&#IObO9M0F|WBlvxg z>?`4U&$I|*Ht(8xPcp2&^4p%`7i7chkh9_iH) zjMb9{LlTdhw*Q8En`zN@AH)+&98oEerRix>llt+$L*la*z6R12K8H?`24aXasyP$n^q<5dAMZq9*NXREmQK#9`c zA#t}@>;>bPZh}+QpF~3|t}9+$lePlqw3JoJ)bfB%xZLNg%rJ}B}Ya1oL%9k`TuHFj5p zr*Y@2Odgc>7AVAWyZi&=IXU)SK*HxU8mo#wwt7f9TT*Az$e62mY^&K$06uSTTCy~u zM)=x2b-ROk4C?_nverat#vCV|olhGAxrhWGnOj(zn(r4Q%dz0JV1_LV=BONYpgM#n zeGEhH-H7AGp>M&Q)BF4YP`X-d=t?5Cb_Pfurlbs8CkO7ndl#YNJjifpW1i7Css!Sk z^QTG@cS|7n(>oKQo=7b8`~-w&Wvzy_nP2uV7^NY{VU2$lX^v7zMk10!9r&uSM=-TZ zr8TE``05?h-KLMSErez_HkKe|9LbG4%zKyc1;X!z8q70WgUUAvBNOLmv z2#T%_2Ab?@x(H&}I-whkoE6peJf$Kv49|1O;oY946UV4_L_@v8ISAOImvLPz9teaz zDxph$;!ALVU~V&2dee*~3M1b|iEwK$V_l<2piI)@ z&`fQt-Ny77k4ed7c(S_*A78522&4U{-{uCKF#+E%)`(2NBI_VAVPRAIjBa0^U`Ji# zurdClE}Bg z{lz)I|8BI=%ji#0sf`Ztz+b9& z$00-d*8CCOkZ_I7+*Ktdh-pVYCUrvjBF{#bLoXyNCL0o8VdsYyH7HRj2b{m}B-3_^ zJt^380V3pu+MR>NY5x7Ypm;mrgmq#Opd6vNDcl-1V%~X`)|Vh`rc4mlZooTVPiWHJ z2nuWk>g?cO-QDv3MallAfOQG)Pg{1kAD)U8FyGEVV6YYgBJ1wN z0pCBh>v(Az%*~YvG2QOXprme`xL79cl5aKFq9x={}|bDWtxz7fl^ zjuar2Eiaktqm1?@y1YE@@t6E$ug(FlA7cRsYAMV9(~Kd(+84rUf9-6Hc8XnK4uwF! z?XN|atCbw3TUbfP5|e8*)yKIU&I)r$kAyj@;MJkv0{`LT2W7bn3yK&k4@NRXu?$@9 z(8}gfEgJzBUoA~7TRktJRAys}7Smx&@^pj_WesM`%f+olt(%F%^;AIZ4Pj0n<_MXh zO;w4D5@0_t#{QFmy`AGmOBEKy;$KQ(+Ii-<8>Ydkd zg$H35Z^$t80N^!XR^oCa3Qq*;Kwy+cq&I7JE&(JDr0+h6YwDF9v)VL&BJ{44>Wlo=7vkuwkm+0t>d?&j0`in#2KSapm~NNV zpE~+?iSw1yrge=oD{}E&?JqJ^`y0^4EtkuEZX)D-T`Q~d+;E=5v*(N5-L)Gq!jV^& zs^DpA+9SN<2 z6j4T7SQt!#tq~*cz6b2~djhC&7IhevC~gOyE7Ekr^~IDrcxhF%&fGL1D}%eg`Fu%# z9eFa(9`8GMC#I#Q_TRi5y1J^yiQ`^2gBQwBTy|i6#tjLjBT2!{ z0AfRX6xCp-fNX{)`Ys!86sf7H@SQhTvW+?h2675gztmBIik{asDJzc-?RiGD4-~Kk;e?6`o}eD4V9PJ`@7SXGI4p0VWzJ2Z>q9h*hR2D6Zx%gc#n| zZ#>|Rt#bC2VAkSIUfs=G#*UhallmqrIQ-% z@g|sF@qQ3Abe>C#%+p>}KM6xKmARaY$SQ)HY2G}6rS;_Fm#{m7jrBns{3`{_fY>St zcNZyblwbR$>Y*tpF<3NmJDywUhb*Cbd<5MmHR{ebPgCY@Pc+-0b4Ie>0U}14lvcVQh)VxFS_vGLawHtX4o&^ zru09K>E+66MH4Zid;tMkO_3;-fk1&DwhRNP#DV6#kUsJ+xK*L^EWkcih^qTF<(+%T8;ap?}%IIxyVmgj0d4~a?? zKhbOQV!aYM-fPH(3QdsJdNGMbme0FeeSQ7awt$b`d=q~Z(80po{OU8B1Djb31@cCO zdo`%e`&3_pa}U&Yui(BMfW#lFR3wYj+ia^-XZQ8>sh@)1ue9_NMvNGzOBpLIz#t!W~PjI8IG6|W-K=bF54fqO%Yv`-}>1XHUg3^ zFMl#(Qs5*AhtACVX}Ie`?F>H*Tn!EaCs|%+CtjWyNe^D%;e~*4l2YH&VdAq2(Q&<3 zqAbtN_6UFUh{nBz|9BG};|h7i3hUTivp&1z?nc4VLw9Hf`JzD{@zYmWkA!d*zPMYm z4tOVsx-2qUuPO$RLUTQ7q$?Vs;m5D2T5U2NZe(53oRI*o>obmpwiSVKOA8e?#QIogRK07`U>I+*@;_L@?pXGeHI{o5zjfP=V!T69F=eJ(5ZU>TO{#)jauL36=IP{@N3+ZXJl$zxaNw_X#!go!H!kY_i$U3mSr^5 zlOKJ&5T^`L$Sj@G9S+*z^6DvQHmbikHF?N6N^#ejqo6;UT*J2a-ejqJ}RpHsf(Waiw>$6C^a{Y!{- zj_u0{7DUn89w;n*7^32m#()7mSq8iwRcN}T124a4{QrVDwFBFS6;ijtO1m>gpb4&CNXvOb8CS$PkO<8+4h37rdLzhnMKI{b+kA+p*h zbwGG2kGah_3n%K;yHr?HXo8K(d%WWAev+FNu{j7yg(zMI{IB@k66AX!2)7|pyy>*4 z{qH8ZYn-G4qWMz*0gqFD4{-PL?4IxQwy>aqO>n-uw>!chowwp;XTXWurL1+7At~hUhVCNMP{qi>w*~!!F96# z7*rhU=%|>r(PE5owD%}dvVCAXzq~w&aP@9SNpuc~a6&0EFoauH8>6U+!_<>;U%x9q zUW?KMbaB6W35(<5V4!?AC^W8$At`SdzwZDRVf3KSyw+$ig*mZ=f?g6?bQwm+BE_8w z5^ci0`R*Ls1v7)yDFY%~IfDBStG6Ha%Ozmy@5L{{%`o+ zU0p{_r@CAsd^xRNy`usOjSX=?0gu=gSK{DR(5`g1bM2dK^RF6N(F3Fg-H%2@M}3>s zuN$jl*bO>@anUaMOmYgpC&OrARrr)(AAd1hiK|!eT*+cxc-c~^lv56*%)J3O>F)_+ z#B^(v3}IT))+>$n6--a2xRc12ekC|1JWK2Y7b~=*yLBzGp?MIMczB|2W{s|{pNMrp zy<8t>7UVel-$Bt)*f`XG)jdvOKz(lTC4>Z$S5L~0${RP$4v1g>vQ-ohn}{J(5)I8y z{W5uS&t*l;s(ae&HA!Gi9?CyS?|*n1BPJjP7+IiI}T$_G-Q9EIGfkvp4{Fx*a`EUT< zc_pNnIqHDJxQ1$uV<~Ssj&SvAsudUB=3jWif%<*hdIpQ!$9YI5u7Kx#9~rX`K=j&Q zccp*Sc3qPFJ1O?G?Gun!=pMH#D5y#gh1|bP@koKR8+yseuDllZyd706O(#rW5dHtN zyo@8dbBX6MdVskq`R)!5EV7xrX5tqyo_nO9@B@z6>4t`e;3bT&S_%q&pPrGO+pG^> zu;;btt&qHm3KYulfAV+@ZD=w33}X0#Z9I4J$Zxy`!ZCt%RUsc7ruc@EU6R!qP&?vm zc5OPJ$UmJG0;|s{bH~C!WPIoV#v}**Pc?RWe)viX@5f{3W5>S})vg~So4-_59dgU) z@2S*%MiE*;Zm9qA~a3=fvQ*H4GR)hJEXxEZar;Wi9en8T#&R8ul! zR%-;h`k)hFcI+SVz~LS5_GD8kzEe8e8u&%64u%#Taxxm+J>{`!2#M-cQQ}3<;(q)+ zT%+9*n_0tZ)AOIwCWN-9&b|xDA$yHS=$AO!&m90|Wo1gF>6WZ1d1gP{66uC4?e;0Q zKsQib9918`baf08jl}?U$bbLoi27}zKOZ(}af(Ca9B?Cea8_v`xw)QlI$U*qw@}IR zt&c(zna?ejVb|K83xB<@X%gSbXIE7HtU`8M{(Fd)(vIj2OebqzMT9+N#m$X6$v74m zDK}3cp9(kq&enfO4OQ49x<^U-+Xn&OE%?tVc&8E0u z56^cJcM>fs!T=9I@WWS;glN3>8P}VAjHy(_f?V#l%` zzlWlKz-KFe#8HB?Le~eO8o|{y13#LEAsRPlBjTB2H+E^0Y_9*Ie_V(c{6}MjN^JPi zB&2$?17b{yr-s@aIy|Hlfr?u~!FstAu3%`qW}kAp9XTAQ@F%LM4rgz`hp|4B4gOFs z$d37Mp1=qUJJ;&NX_i)k#JhS;O2k8b$`?h9P2%|*g^ZuAxYR>+1mdJ}KgyoDml+6a5 zl0g9zmKW|Ifw^vQeY0e$`zEQJq+7?AbHrreGT;<-2r-&{+r{C)S0Vx~Kp~5%Bu5U# zydRsNM-6i;?1ln={{)E=kriSVV}Da+ggd!(^%{vBWTIG{nQ_qhkNX|@Ei16*RVPJBx@V z^?#KMwhkz2=z*<(JkiMiU{^k=^o%f4v!dkopYeS<9D7Z79iWn;lRtn-(Oeo04ODtS zjA-+zs0hlL2E(js;H4h~wDf$#jochw6_!NoO?df6r`HQ-?Acxia_7DlvRIsH>|O-m z)d(=SFYbC$QWQD){Apvk{&c?uy7y;H--w`Pl9G}hU0krc!nPF_k_+c<+6@t?b$P$_ zYh$k4#0tD4XZikP>_3z@z<}qO)>rSjdKQI_DR#4mc;r?Q_2E|)qnDId z6u&AsOC0@Xp}VD@GcsjWoN_);TTQ5A`)z3FiN9o$^I-#fi=UQ$7{kwRB9zfT`2-!9 zd;^T14ckjT#@1lnG&miHdO2(*+0tT}6VAi-yd?%4jD#p8@Cy0cB+@yG5bj%%x6TIy z{|r2R+L1^i9Z7z)?T?z(7dRa@f+_jBNEy9>*Uf!$v_L4^BgGfAH0iRfvra7Yr-nI( zE%4MC%7G?t-{_u`$m*aDnI|fx_)_r+K1_CJm`NhckX2%BsT7h)8U60W$x}A_mpT!d zGw%-$e3p(gBt&wFq`k@fZGpNcGh5@t{IMv09LLr3WLk=MyhCASA!&{BXb#h%vBH=`tOE#1x%m zuwGQ`HDzCO`4@w(r!dt?O||0(S?bf`ijyGmn1x2u>9_CzQ6QFt`AZT2(?%@%Rw%Hx zT~NlTT`l?-$Sr1!cvK3@lL_f)-zFz(OSs;pb=>5yJqJ%&RL*!cBdSTe?F z_<|Ckf)K-2z@qwqJrL^}hb=SLAad2oO2&2{Ws&6W#l42QHgguuWiH3Th$o{ol*7J5 ze1mj@L!9@fRhU~fk7>{j`D8GEWus z;&M>Jd7-bDcvFdfkP_C6s@eBB^$uK;bE=WkaO{u^SvHE)%zsicg8Sf=hV}GwN z_1lXd#4r0|phH-gywRG^19FR?I)ICerl|dFB8GaPv5cMr7TiX5IX?a@X1;EJTr9B^ z$INfNjS*op#Ar7=L)w?HLOBzOwRVjCJ_=vBsn(;EEDJ@9f0iA^W@SEUpC5DImEzX< z3>b@r`~HTF8%;7Oe*76U7AP!uXSj2DF4<-UCBvz&U0H7cx$5M(1D(YfGFseE}axSh6lae-H6gGKx9b!Li0aD1kQ zW@#8`NC3MggsLi03)E5s?yLg|{d@HJecTus=Yzep-?Sd`%G(!^`@);~S3FR$o;4ND zK8R07kJmLsRCF2x6*-Meaa)Eh!&iV$u(|wB6$qL%gl%dvZhT&lT3zy1+_QzJ zcLo9YY|h+pFu0hpg%GKT%l|-w6()%VItu(}c}W&ls;Sz4SqQJ^zxWF^^)(qFad>!7 z-2HFWSGAUGE#x$TeI&wnZ$g8)0{iAZk6|f;P?n z5pTNfvT#TseQLPI#kgbk*kYu&51xvfjqv#}RN?Lem;UU9?3_e=E<|p5ak}hhgnR%( zsPRK~rd1U{Q@~APLdI{;RUK73$2!oSOf69($TT-5k84evze;mGm{tYhlQO z7j%5Hl64RY+bA-c9C<@H$(6sf!IFS+(;}4MrNA?H1cUluIY||b%(>6w-}#egp*48s zPiF==5*EojKKUlNQYHzwgcWyn?J4QX5I{3}C^VQnM#83HJC|OF-m!rKJPY&@m~ZMseL(O(w47HzoEd!SnR&0*iTWb-=k zNE$quT$&-;{8v2xDNFhC-;0U)a{$pR@qc1n5H~N`Ae+U(>cYYhpP^>jdDnD1D(;7X zbqbba9~#`ZPbLw$koL+6AWjt1B2Ff@k9!i&rk!c|0?s;PQZ;t3_Oa{ZEf_wz{nIMT zMH5(*4hL9bBPl1x!7z?CYskRLWDpW!e?%~D=g$_q55&jr!Pm&> zOR?^V+j~@2F;G8*rL~sNguh|IJ^3Mo>XsR9R~g+f!0Bw=pFeecLunm*IR@P-w=43& zg@3{o20FRyS#L;dh;OhE(cSC+4u2*PMH#Xh5lyK-pA&;1Gv-&1_Zd&7pP>*)_b7Sd zdp}_kXv^8nZNzsS1V)UZq_Co;q4NjX6l6q}<88AyO5BiL5pV^ZEv!GXX1fmo-D6}0YkzdG$u2n`WHP+VGW!V0J{2w1#N^qFW$8+JU@SN08# zA*q81uxoF*{YL0&+G1yk&o`_6+drb+lblP4bQosunp^P)A;?pmvG?$&{)PP$CzUyw zKK##XckF=^gqrB3I&8)qSRarWRCSRPQIh;~K~3%UjREbB4t>K1s#q1Gcm%IcRVo#} zdR$A~bJ*zdz7!y{Q~Z#)MmE2O-VVBMJIe6~+;2|Vw%sG_^PRV(Xps-aa;oLgcja(3 z?r4Xw-6NUC8x^)6ST9{-l#rA)dk_6fokxL&hITb=nENfb4@#Y;%;w8Or@1MX%pf;p zRhnms3nYp*#!>MdgJt2P@dkw~FH#kw3sKpfvpU{QDp{k2G9Dq586 zm{#()LO*X4(>KpqX{U2M8WxNJyWe~HSyt`LzuEg+z>WL)+EQ`+veE?u^fITARSxzi z6mCe8_6g$AvhdG@<6b2R;D6Z%|8_d9Op9*yu$>C9YPjARwMZAQ`SWVy_oimQ?i{?$ zaK%VWIrK_O#bs^EpnKuAcxiHCofIZn#SM+|zR>YMYuu_TbxHtG-S zZ;g0_Xnb*{4<~Fa`HHoQ2QnUhT0O+;SzXRBb;=qz--eb?DmKZG1~<}3dAu#ABXssj ztH)SktKZps2N1ugf-^-)MaVC&C;4c*l;fmjQrNjg(9ZJO5AE1?dDSuq=c{!JvCl8A z<#jTj25@>W3wLS6ocSuC&33E+AItBh;d|*xo$fylwMG)6=Kh~_G z|EHWIA*rT>aT*B|4|wS#daovNWFsl8Z!0S;jYJ>A>iQ>|=kq=*#ef5g)^SC}{Cu`t zS6GQLP#NlYTy60-#Q(q~JWeFwz4rU~KPa)h82<3h=Za0{y>@XA8KKg*1aN$EDLmW= zaC0X;9`IK#owFyzyeihq?fJL}L8TXT>U_Qugygveu~cgm5$mY1*O~hoyM>94*DiyjN`A^8BF@*tR%|yK- zgrUgVG4d)XnE`tgq@H5)K2uB1mU!9F8jWHIYzuk0SBw)*V8E6E{yk>y@1QBJ7!}XT zW(deTcVkZSbKSi#?;l$`uvm7AwY}vzGVs+auZ1NB5|t(20iR zgQQDeJLNI)7Q6979NrPT;Cw81p^WxJ$y`$&-#!n%XI9n4#lfU_TF$~?TwHb}*{86p z$B{q{bZ=pp2?@Ee^ZKLF%}$4lAq;Tryh(ULn3y%iNL&U@XVg+u?2wV2^ zO31s8PdG8+%Q%l=2E-&*BJv~2pv6o*c=wfz*0eg(Al|h{zx%QOQklo|Z}TUq``h3M zA6tzOge@p5LAv=TKu8gU%QWri?K@>=*Z2rOnRy}jHp|RfN!|D4;09d;n2vXJ{-h-}aX!^JHB#ct});ZD;?ivlP2>{+X6kK{@tEH#ROoZ&1&tJ%hk9oqp6b zQ!UQQxzULwUJ0%|yZx6b1)x%r_R<|$B6{Udjhic4>E4=Hdvs8TQGXM`Sj6cJ-{(H; z5RI*TbO9{9Q1~Sg$Fd=HxJyi$+w@giwEfUX91X7#<8KRFaj*HL2eL1NG(el<*TWoq zi0yz_ikOr2+Ge>AVL%-<_H(9zKXNbgyaCn6{t`!kt?KvbRIaFtc_#cqkqNiUFG+0| zfiA^Mkzy(Np>-N$AV{0#(1|Pc){YCx%l-K+a=o;%VDU+nn+@Acluj-r9Jz zYp9JODu?(MY(Y>xTuHdBSk5i?NMjEO0#e*IxE%$kls=t$%F@2ocp5BowqMgyp#+KM^XEpQ}T`w{?aa4?>*cO86(a z)D(=(1|C8oBo%w%l^}R>u(XKhnsKzEZHbXFAog{o0R_3DIjTfWbH(SX2xMuxN+e20 z$7I2;Mn}jJ=ORAU%E znm!&j$7>y@MSqO3mK+-%cfFn4q@7P@U3wn!Oaea1!YrNb@|fPwb5gZ%;j_tz9R@*T z8XUa5kyW1iG?T`+bV3_UGCQR)2H~DA(y|CcHQVKy@S7Nsk-V3GcY4ohu!F|Eyl>p`3-Grk=|g{gnd5>!fYTCqq#?!n zHE!@MF4Pht!F`<}Too3=&HOJBdbB#B--0r(xAQH%KFzP{(QTqKh+QX!vH~5}VYb{b(#$W4McjsX0`1{`Oa#hr{ECw*7-Y$t9 z%O!*>kaD&i?jKFW z*c^r8?dDW?8)mCnmWxY8qtcq^{=yi7v zZt|b_RMCelKgHp_-f({i zt0QwWz)u=L$JGI(iv}d)4mB^zneyA%OR|0?g)nMmh?uNiEqN!eG^be&G5|81lub+P zcxx&(aLY)+oD)n>EMpc~FzVVL=0~1pv}7aZywO1|0EfC`I&xJ>!(9<;5q5 zk`e`*w3@DT$`<Ga|tT`LDgCY(FGCBPHqH9Rh^i zUr#7|*0=KXq>%_=2>9O@gMa!*10N6`;Kg(wS-x?KKgF4Y4cOdCMRR#aI`{MT6ylnq zQTWsHj{@gm8TqO#0kiw*(!cNTTRS4(Wl4{Dg0`tgnG(HV$P}Va*wB1reXQrK2mmwg zOJ09&SObp2Uqf%y?p@_}46YuTsMGf@9FqzP-2mOU21Jz+!!DaTUwZ)YPu^0 z)+Fhu7gIxQt4vwT;kAI9N^>alI=V#Z8G2=ykUcD3l7q4-OUv#l6=$r+>5vrLz!V(t zLj>>O={Hr^uNh`;OB|cze&7?hyl_$n$@a0CG0L}WpD#{fP6yna$|@UvsQ6VINIo(! zPP4@^i`f;6!fqM*qcq=_tbyBX-5z@1GyWJAzBO~U1A3s9h(K}uPZ@hP$`>$~Y2b|} zvfsj~8}$R}G$ZF+cSU)wi(P1CDy+MmOGC$r02G0EF33Xa<~r~_$G|;}p4dOCo>z9h zLvEr&X>!RQJf~Q@O{7uf9&h)pn-Ql*X6llr*h9SzO zjdb;epqQNpxx`ZfNJfiY?WEt}cVMrKgw`rUn~_PY&__tuZ;A89MGvajg_X*`!$~IlXce_))M^l zSYqelILvb82XiRXUsY{6HOJ#z$>ke@BPz zm|gp|9IWYgk_r&P{<|?PAGr&C9EQvC*Q~hTCRaGaDQFW{5cx-hsp`IxcSxV0*b%z? z-_|?ODYljBNfoA7?U8i#kJymA~A4QBQfg>3G@TS#0;{a+q{MjL$KJH+W)-)`^@Zk*iy& zX#c=kjEkn4{j^u<&$ri8-lJ0b9Q}kI65!!JS|-fMu448R2zzLJK-DQSI)JQ89EVV0Z<7yBMA-$&$Di2PXbz;|=|K*0!{9Lq#iL$CsGyaKfo!baO80@TGMt=ns#kJ!*bIb*1N}nL8-G6^rzGouaS;oeJYPB(84IH#z$CnJ41K$E=2NR3?_2 zOwmS!Mai_Go-x-F51NsKc^SWune^^8Lu`r4#%qI=g4p?H+jZ&Sy#5>J@wyJl-zaFk zRBr6QeJ{353I#x&Xn;bd{w5W%jLjZ?&poB!%w=L%c*r;CnfPUBfu3I;DPLG#7SBU* zcp#h`t5}Z}v112(&=Lh-I}Sg3E-r+ZSlnO`ala>_;q|=!jBOD;``TD{EA5TfJ-N`w zx`JR}k&c#ix{xGFR&737AMI(L5T+{nyKYDH9FCTph>D_!2AMM>;J zSReahW&|n3oMr4aTihE~5M?Eo6E2q^&@z8qX;Wt(T~=JBML)={B$VYu;mp`26%^bk z!tOURj%9~`F3 zD=?GjJ4v!f)vkp-`12U)+VE=Ebo7p~glP!q=G{)TeM@|}Es_>Y?*iub5C|&&FxbQ9 zWMwtXbU86_C*XCpebf1;-6_QPQGmx)6t1t%g(%uV+p5cg>E(M{w)US4L})~OMlPfQ z>Kc=&OsL}buZ}C6j`z5(*L5W2hZjM7FESKx3bA}1`mig=0q(}?of(P8fAAc8(u5_hcNB@g6W5zOFW zGow*2<8xOvvY*Ud<$-dV-~!&g+l0v?T~Y=Pw%nvt)~Yy1xwxH!d`iK%7J zC7iRO4EDic41AsHyzl)`mS?ae>=^?`)u_*~wrZW|*X(V_GB!u##SV7C5f`HKWN!Yb zM&DGPzExO3E+9FbWoeev>1@1dSe3#ZAMI)ignxKGGo*Zkq^~$5`j$h~O&>-rij}6Z z5qE3jAAffz?|h#Vyt9Ti7)v6*yMDuenuo(L!)K+RL{j8PCV3`0)Dj8L@RbcxfC&FZ ziE@RWt^;IL0~Xyah!f@6rXHLeAJ`Mt)2XYb8pu>Xv?G5sx67L4MDd8%EM3zhCT9gl z-6@TQeYqDdk=rW$01hf9bFmIgi#@}EjE|W{N4cqOD2Z*xvORQ>UJf;UkH^+0PMTCZ zjMCv5M=Hny=%lx(GA-d8vdYCy-g-oJ*F>kl0tlr+KOCBVE3L#ykyCv9WqkcMNUUYHDF^(`bX1j0!t*L?awm1olj9T4w722 z__^O8FWMxQQ45$H1E0|UfVRO2`ji1#t=@soa(M16nlryl1C(JsR7lJ%@Da^^U3VAt zZ|pJG$A0OM3?~OgDO)@#y6Wa&gZMMWEbP!$;P`CwC4eHAYqE_E1g{o3HRNM0qtb4{ zzqv|UmV(#W8F~l4SblfEnXNNCZmbPDU-v^_HDAdbkUpl?AMeU;!|#^B zeFBM%uZ-W^#x`vgqznk_+HHQuH_&C9qr_ z>AWri>UEK)dyXKy0QL+MQB(;KXR=W;Iph)Y1mSghOnue&e~{m&tRrZ0Y{qEz6w-{m zC{R~q#DS&El$T8jTxx#{eN*(rON%<`<}pXy$-$Wxbh~yURB48rM(1oeTC@2r!Y{3S zV3oQHq#G;3f3=xm^YZtTY_lVT=Pq~a*@p}j=ZO}(_3Z-@~(z^2T0bf&g5-=kpZ8&PN_?qpH| z8a5dAW?uE9^Ts>4{%xsuJ;zF!w3w`zhO^bYYR?-zcGv?+ony*h>fjZ&RS36EF?pxU z62WAy9~pW)t3&(TjKZoik!NU(i9v1Xn%&CCERG;cv^7`Oi>7!tN-a5*Q(F+C_jAm3 zjc46{)0wS&juti%%#G2wJ?5o%wi=`E>fRC=N8WM1j0}Ot_p1FE^y@~Et zp3};)r#y55mG|!5%LtXCp|=&_ESh1}^R{is3#(()NtLQmY$Q|X?SckkDK{nt$%L*>a+{zBvTE|=>E<-?->0{w*vJyZro_fzN0tZDD1x1zL@Vl;j zh!Tmq8K$^Y$o9%dK6t-s&^D9V2k+J!cihmx9oN9~8y|yn%8Kueb3(UR7OYR`h`?|` zF8a8}U9i~z*l7aQt~tP*d8`P^EiP#OyGO@s4o`4AR$u$7Kw&_Nww8kf*T9_HaUw$&3i(-bu?(E`t$*f~nhnYZhu!x@)X7T(-n3$2gqA$D>Bd;*eG54Cy zRuLw!9w7CLK=~rCZD6>F?rtSjwBeyXKcdN5#FzCM<@Ge=CJk`yv7~6b;Z;;PIVaPK zG!W3MIv3!iw6Zon6P?X&loLnT$Xf`)als(40F*qj{V?HG$oG+f8Cq>k4jq0^#eP=_*9$a?$HK9xoCwW@n{1 z$aU-|uYJ5Yfw#wwqJu7;o=m)LihoR`m-B5B3MzA{Omt=(Tn3(@h*rE9RZl?knO5Snd*t3b++ zB*(E7^Hdm+Qc5f{$#4`oW`gKRK7x4U46LHwAw5Z5%vfe%v(es9){{4PMfchXQUgYgw;>1dc)0K36 zI9eigO9^S$5IxUFQSHhgOd11ffgo*?if3a%${#C zhYZJmQhU@zhUi>h9Cqr+KE}_BjIj0n?uB;?sp9(C2SIOcnG~a#V)O|Add9Ikdl;QF z8^~?1$>q|bq`+-V?3=g6Ni%pJ0oP$Bw{OL+G=b%13=Hb4=^g@|JY&arH|!}pNA!99 zE`6puv{m)Y*ZXg2ybgLZ#H`k?6JoTkSiLPx88aS`}gmsVcCgSUU|iU{KXevM0kgXVrl?)sG!JhHyA+%9XdgJlnTy*cPY)A~asLwx!5yC} z;fFt&!RJ2R27kbc@BTPSB(VniWmtZHw2UBuJ}1L=8C}hg@+wZ8NgJ={-gXaM0-XrZ zi{o7)KP_kt+^cCl{y1Xb!XVveiOA zpCD)GKnx{Pj>wDFLJ-R;dI~->y-ecQLhtF$r+eXOb(^w$eL++*MWiO^HJC1;5+l8c zS#D|({ehO9H{IWQ-7ub*!kdF9kRn(W@VB$A&V#iAysLb9NC}cBRZgJ}(k@VqC|wrP zx(w1d;UJImmTj%{P6{weLzb(KF>xxaEb-bi=BEAD^9FY7Vr3RtM)W8!LB8Tj zOntz%4@azf;hW@rGxA5?)NT*^JIC{MXdL*!am-FW zbPxMR!a9jd;nRkO#me@utgx-^9)AK?y5A%P&;<-8UnKATHUtSMb6I(l7{krxIC;+_ z@D7o(%S2x;vExlguAdDRD?RC1r+N-o_|miA&F8({S-_RbX#(pZv`3dVT&z-?`91_1ur*S?0|{LSAqK(IWa1tz=6KPli>9@fu2_nZNHH*el-IKTxw3j{uN z=#T+-Wqg*G_1%(c@+2ygUt<{4Ri1+FigZ*K=4ZImB2W8Ied<$&4(A6y_<;e;pM3I3 z=)NysW;751?dP9=p3WF{(Py6i>wC-ySI8^G`RSjo^KWfW)b@Sxgf&|Ld3gzvq|P=%0PG6@QzZpa-~in`3n%6_B`@{4 z2p|%UVi|5`t#t!f3cCNB+`wH*f17@=R?;aNby8IIx#=BFoP~GHLQX=Su`+9p=2^OwZ83VZ>BL z4LrAT0iVbx@TVvK3pRLr@WiHv(d@r548DF%_v5?T`}wJhT&$B9n&7KV7RCi4{oASM zSsIsuL8e0_C^S8lxxR;;UgnA-m=_DCCb9(9vuNvJLNRxcpwiOw9|7fwc#dV-OteBS z$1wLa0Vwr9H5Jtp&#$&%A=vW6EB^rZRWF|Dc?#Rxdu#j5pZJ0Jq&_qfI)#x8A6x`c z#5uns(20GOr_f5SYI~l5HUVQJs$3~DR$)R(9~@Q>$0-N-snfW$?VA{wnq-1PhHO#J zr-m@bD69SSW*23Mr0OH+5GlbnMKC?RbRC)<7yKEZfoe84goD;S3%0J0j}{udTl`xv zR+=PmlE(-RKMDMoObfZ5t(5BuRU&Wx^QvNThdj0qWrIsO~#S!nxqke z&kyNY`d%OvdZkxe*nh^!GfdjId(Dn2L-N_s4=|M?IL_Pi^84=K0qjT<#LIE~&2fUI zTdv=CN*$KKv6U1;q=>QcnHldIz)<)EF4AKmMMGJRuUGTO(U;zZN1VGE?Nw7)xr5&9 zoUmE0vbbf&iv_Bs7ju>%>j>Gv!)VteY@JEgl|+x{5Uyrlr?HqGu}oIZryZ%Q@`!XN z@Mh|$i5Rq53s7@rJ zFcDy^my&UwIdjHr*S;yDpJx{*FayCS+5@yvhw+uz2Qzx-vB#8p7~U;Wizne)nXT%P+fItWDn>Q}#Nwu{z9 z`V~jIbSVr_I?`w9a4C_eyL2j`UDqI8&d$yniWnI^Zgu=pWj3}oG_X(u_XVK7@P-^r_mRmZ#^2~Yq_VWO6UL+kr6kNnxh9p&Pgz?>61%W8@iX_= ze3n$U<~aS)o-xvbeE+R!eEQ)QJoRXVAYT<1uja@NT%)?!w84Wfe7qU2ou0)M7hRGP zfx{QiBmL?YJTiz(8sVpfY3p65=7hREA1gz}bK~2HIf<=K*n9L$^Y8>uPKPq1G zz>-foPr8dNlgSFkb#>Mj{kjf$VDazD7knT5DqvKU0fa}*OSh!E);Il?*a(_i3CLc# z6vbzLX*;GS(~K-}ke11Tp}{x?2jT?3YW+g{$76Y1y*P`#`#b14&B%h~Dwg|-<2yy* zO#75dK2w(}L+7>-_>s{h65c>Q_I^@dWN|Kb9%rX7;OBRK0=wF_u2^=hocrT%nS-1R zL8=zhD)mPL=$vk)KPBkR5b)kWL&olXt!6CpE9{2y)|;b-?nQmYv}_)F?DbK6_VYU! z{lRgL+XafNJuDV&%Zaaq;`P#dn0@ZL@Vu%g4-JN8h8?BTam0!-eDl(G;O`IOpFi?N zE|3?3`PYxUFF#l~F1_P<8CjnVJ6ydW^AzhOif1hU7~Z&|HR`&nziSge^FPfJ9M9zlN2{q zx~Wq}88M=)n9Xq_AYIljc-!=2`1{De!;a7+*cyEpR<>JF}%uXV^z( z*OwlyU*ifNZ1f)Zp6k!i;oE~kIOEW)BlREF4 ziC6GZ-yw9kTUOmZZ&mJ{`u(!?G}25YS}2ico`x#TBQtDo4(cZ{JI#p26i#(~8$Esd z5zMy28FOz>aG-vuhmJ9;gpnmLPV;u!lj8?h!$zK3A#{0)BQoZ$|O0CZ8XJonsl zhIU2X>7sTS8yjPOmWZKf`O=rZWaef9zcn|J7kVfZ!teaf?-(##`qOKg3qXPE@6&v|=#*yOxp`u?h?h@A z+&cyj002M$Nkl5 zFYbZ(;I_LN9q2Rk4;41(3iV>}PZ|`Y3bl2K7DX;*RQ$=0`)eEK{`U5Tv1?BYhKG{W zF_A9<N267V$$eQ7JljH`R_8V6XWwG? zK}&O=0f-Cv0{5T68>Fe}474HQtu3e)6nkHO47($k%1=-SjIg0`L%6ra7>?%aNH;Fe zz_IbPdDRu6DtzSeZYF0=(|DOhp2w%TP4)HtZ=S~|KFb7*IScj@gg<|7W}ezd<*_mJ z^aL25O{13b49pp@>SgO)W2lIN{QhQmd7UNFOJvd<^HVXrJ#-3>Y}#+y&%$Hw$In$; z8CSe-A?}VNNo#M(!eqz%_o(Z6L%XqB_F}`c+)n>qhC==P%)c<6(=*u%*xcbKb=Y3K zJ8=P@b3Bi%huqD!QF1-+=C~#E;;ltSnUVYz^ai?6A{CZ>0ls|eqwn$_Y^cdf3^V!j z1TB*Y$SBS0wO2!M6kBnq%w(a7PI!}~%b^jc~>CQtkY<-yr@pHHb&DFH5#qGlwElo zb^Q(e%vW$V`UayKTnIC9>z4dZ*hpu$TB$NpFVmbuZ}Kn>B|A_hfB&`oH}DI)KZl{{ zSMhG@UF>o6VZwh2?nDr-ocor#GUw(1ULv22#Sv#740`PHNvtHB>qc0O@p2T&{3TK^ zRT1Jm(#fzzOPRdPwvE`8>qAqfgZIp5BaIbl?+m7c6R5Tp;j6a86$_z4j`}>4F&}sQ z2xIA4R0Bt`7Y}m`E|AuxX2?`?vjlk8K^n?N`1!h_V+BnRye*KM+)3lwx)R-O>_QzuZldN2L}fYEy%a8UOC~Yv=qTsm{H~;}DnryUO8(m4-*1wa zuJ*D8sH=>ZUw#?;_U*gv<5zp0#(ocm23Bo;Vx#>fs^q|0tK}bm>GL;Tg4^aLA1a^h z4Y{QT%1oA%DT(WKd2x_C%VqP>V{@H7ke9#YHTy+LjMC-gttW{@TFT_?%0-FTty0Fw z>Dx>%zJ{zn4G54(liM-qYS<+2R_!#qB6zI%AjcvnhBG7dR2x$; z*dO;`{mAQ_Ki?ptg2^xfS6<&rz9nyVKiR@+`_aRazjH2JJD%?$7Z-NKVdXKdcX6Iu zHPNS+RVYA^oZEDM;&w=K0iGks)Dm)H=N2F0i6SPsXd0#W+m=orTDg5XUNGM2I){LC zd3EZugRamvF4DbRV6+lc-_hg4g~2qvp9K^G+d{qA=G-*{bIRTq1OHmz% z;xwr1{JvU%_`USja?LFy=YLw&C)I(#Y`sg&XTIm@oj&&ZITXfb;pJ}*h62zD6fW*a z8;056fZ)Q~`Ju!Y{hf`ct-RBj+KX({b zx2~W2>wtSul5D>|dX%eeu0}lMDNpCK7)^{CJvnHx5_lv4y;g!eke4q>Ah~$9ySoEu zZS$eC+s_2^;_9t+;wD2X!2aV|lsn%yls;CFEWxx)3;%UTcbao%It{r=_y&2EO3PhKF9UgY9cVbM&Z zr*Y2Q`^t5sdl#4!uGfS0mlc zw7(zkTHnA>b{ygwhOLM`7s0uiCs#$0QE#KANCi>L7<#6*)sCaR&zou`z#c<}{MLho z865T=Kqfqk04Zb~=~XWSktYiFUg-=yw>z-4yp4#m2F`UL@^JO0Fyy$3Nz%P!_+Ym2 zVSUhf2v1l(iJsVY^j6y7&beSyZVV0+_9VxdXc+#<4tNNr=a^736&WG;dle@L1l!F- z!iBL6X{|W92o;#*xKiVnQxej=Hv`X5a8-3vV!!=S@--86V60hdsIm$YXWePaZiN%a-l zK&lr$-;*?06mRUu1&#@dZt?P&vrv@FbK0Fk)HZ=#PJ+`VdMm5^bs$wo3A6rb3|THS z=MLv+yoZRR36D9S#O;T=dhFVZ#fb5h`g;uU!nw>q9ze&u5AK?<-IPiY5~T(cI`4e>GH;w zXS;x90li9Us(t$U`Z%`|bzaS(KnY9lv{-CD@?CC*rTJ5^Hhr8EC3*|pB~e0BQM8;t zf8Ow-OE*tE@dOR;Jq9Ef#mm{VXN_*OZyijR9%OvDbm@}uO4oMjNnG_;u3RzO&slrw?K&_3~a+yL=POe*>r)set>U5lt;l;Bk7ZpfY0Ksj4LMVzO% zAy=;T`v%kF51*E$;XDksIFLH5hz&9T6CcyTQJw0&N^oEJJ~#7At?d-4=rTQbrEUj*V4yBPQFuU! zbzNq7X&oy!hv{JMZ|`g&-=w_nRPuu(9)}A%Nu81+urQduMpY1y_XXLuohIQJApt7m zW}VpB$<$|5M>C|((MyJlwl*)5N0A1JomL6UV&wJiAc&hwme5CU^#nbn<-soFlRT|w zrZZ^gG1X;~mtF_eS)r;^U5z-xtxSYgriDa{tLyvRr`4u@(L)Zbhr15q;_M|Pl2Ztf zN89ZopSpa*rI^K?hntMCPlF+KR3f-?^-9d_79b5wGov(APt55>kIGs-gu@IBoockgH7O9wgi7fbEbyh#3}U#mPPiD67VRmmr;erkSLeBgcbJ#SCr zqWvAr=F=Q^WV|h*m3g7I=ANQwF2|fzijB{Wls!eSa{&kQV7EA{!!x~1N?OHWcmih~ zFTqnJUv~17>=Wu0tCJD?Bp&U05&_nUh5W~>KXP^DzpuSG2IqpaxZ)zfNw48%a&AZ5 zMS_yMu|N43jobxfD$6h8O_)E8bDne?`Q+JF9W&TbJOW>Y#&m+GLoq9kkG+RJM+dpQ z+fnfsFdLji_s9-D4_3!taxp)M*Agf3bn_vElWXVvr7?Hfa}Af7K-7$T1ew%MTCJVv zBIo&PxXtTzWTgSA!05rS!1M(zp~CjMVeC<)!)4@}PU5QbI64xWX~>{U|0+eX8F^0` z`vMQcms*|CVwFXIpxr8tJYwM~oVQ%y+<@aC-N!pPu5C>}j$RrPYJG0`UQr>f6{0jc z#CKw{qn}BDo!D!67>*Egv^auz=}JGwa;I?6ve(p4HW)XCNZ*X29#=OGycmBI$709u zboYKZ89B5bBomy%P+$a;xiK`mnhwiDjAW!U1eBu){ zIM+D4RYsiyU7pxV%qj3zV7Wvb>5o7DxcRI<+DEUt^!D~bue&1l5F;Uu+?Api7pnW+ zvSo{T)hS&T&cOtf_x0)dB^tT;`9gbpJ3jyU&)=X=l`TDg;R|25X}f-t_qs%2y_@G;q5bXaMTBtFgxZ4GlCj(9l3b10Sje9&0*i z&ezQFP))tZbCY;$_B{jDY003MfYPU$9>Gt!m?$$0H^;TE!1KoskWZEzsPCMor%zpo zHPErvysAw4X3F3nIiYO`rKkcu{ zyJ&gjp{@;9zG}-neitrf+QWinpLXN6DvuE&>Db*{3uCyxFw_Cu={^_T{>Dfrz1qDP zN^Hcd!$*;1xOq6-#r91ds)I-sb7Cj>>ZMn?7D@ta1*j{LXo23>;@TdkC-lg05(Sdc z3P`mRfE^o2;?N_cm>{Uzw|9k@hL{Zirz^-qsog6eAW zYN|CoQAZkw2$ngSNL2NtR<9_6lsIp>UxFE%<8el2u#SrKKvf;d^L)pyX0){WAsQdi z@Fcj8>b^|iwoH%2P}oI}GB=Z%a{Cfu&aXN$4aUl`m*r&Rcxmue_-*9<4s1Y2sKppt zmN@*L-BhJFdelEc&+#EcDN^BJA9nZncz2zILkyOE}?pnUqEawjFwL(zCzU zx)-~%hdI8i4usT+)4l|~)U()gsgLlPWI@hGs;sso9`7#Vg)8rp zdV|kLHhg_BP#p#=<8??*jXlNU$Az@oBH*ZLTQ|EzQ|ldOnh8PGx{cr zZH`0OmN{U+^!k4H>-$1bSio_BIV=PM*XBT40X(>}P&W&;AU!Pv*%$t{+%d~-UwG_N zpGCWK_3G8@#*W>)cQ*j_r4-fJc1sO30QFm{sIfys0}Tx{G|KM z_UkCnHzvN1L^*@Y*=q#Wc%=e}_$FGHvsd!?<&U?*Pl^J`6ak&fgBb%L3B=KU=A9oz zuaYB2x^O^&Py$mGjjY@}&0z}{#hiRiGCMrEEbIH|UAyXC4xQP21@B&t;|YR%cJhmC z-{8jxsVI&!(V~Mp9N8YhE2pLmS1{K<1mg+F3rLzfeu_yMRiKL}KD;MHD#-+z#wN}VAUQBWkVRlRJ=9s#TE6h-+FvbzxtJB0E~K!;154&R>%^dp zYDNOqYe$$$HplAl8t|aqEL>FEdg)1|6F-2Wg-8%ntle`z~y6-OQ@2 zU-kV{p$;w_x3p|Ri!Xx8a0SEpNg5o<`^&+tcDIbQppn8)&vPfK%ml30MRii+s;_O4 zew-XnWz@*0Nui@evX`Sg*2xG3CmuS~fj3_pHazPk(g-Pe?960_K!Vo*@bz+UerFx2 zZ}Hq7PmpwaCDzSp_D6?FCaXFM+5`CX?vI&%c|TNBnTe23S6|~ZfN(H*=DkeLk)^?P zgL5x|@teWQn{`&(VrBhSsq3n8IxH(yY$4Ejsp~~XNyV1k>xLhwr*afCmaRA z_bkD58irRZMJB~{a~|iLVIN|Dmw2XI+3vh_sJP1UGlvRs@KN_EgfsH&*ZtS#8)oMf z{*>tS(Zc!2wn!i6jiMx3{dKKS?EC)7&gb}>_8;OZDH}!ISYopGb|$ZFNq3O?h8B}m z-q-uSfOU4D`k*|pMN1-Dn1-yq26pb;X(9m%jARloyPsiq?-!h3`@3me!CGpd0jRH~ z_8aHEZ4LaJul);*#fGu9y#xRA&;O^}KE824Ljw&B-1{2v)2nK$zwi2u{IiW;B#>Ul ze;D{Pvu)v0dTgqUKmXR`bzrY4Y{MZY4{Zs}J^nb!73c5K6Eg>H3TN%gbDg)kLa<*H2I3nFDR4K(J#^ZxC;tk71I) z)9y_{eDdK={OH)&4L~}vsq4p|JU4}dyIRpq-t}>?F9|+QKAvUM*f1irHh~hWq-n7K);2*%axS^E#h}o8FIHKT~}*ZzJ)Y z3$R@%q5_e3dR+oRCxKgfnsPsvz;_op?didO@mv(WTbmFdkGFtcfj<|S08=8cc4{<( zhYqehomHKxVg;%@d2NwMw*lkjC7&hN=2UVRBgs*I&SP)Kj{D9NTDsEs6e3XFOfTar z$$l;%1N8D|k6?4vc;_IH?jql_(UlIElNf2M>f$1ZDL!;X3^@2%lrI9!XQO$HGrDH` z?iPBqSMbd9oA8tGUp0pr0~ZaMsw=y!hs%i0YxccnyRr z38~B4T63)b~ zu}w2)3Ax*X1nsutF+|8geLGm4JkzU;dU0mR1GhjO7V==XPw&KTQoLOAynzIx37(36 z#f(3zy`>@_4Z9)_V+@xO$hi0%StH#sX^8H#P+?+WCjJe1156N^Kxc3hlgkR+oF9j8 zb#E56wUkm5uONJ2I_Q;bZ)Oydb(%YFT4867Ka7YuYX2@Kt8wfIKTkewCWlXvgHKk| zHI|Ykhj$%6CS^&2<7Lf|=-?RjSmjq>p##P0h4Tz@*t=tl2ABiW&9Ur*jBI!Uu7gi0bPlQ*w$8Ge%zDAv!P#L{SL#KWb)}7W-Y6~$~(2^Y4;EDUUC2}G*(3! z657Nzx3Rn%Eyazu9;fcqMXaN8G*1#}t5-wThXw?mi`%{-4Gnxy4J<#i{h%c`j&Eq- zeQ7{`9}8x*b7g$%LUWF4X!t*(@3-DCNN!~c#%{hqI#)IB1RsjInms0jOIr)a7+)m_Pl6!V5`ErUvSDB8IdnMbRcj&eLLU0niiMfc$1F3*y9(Im-iJzN z?Q~bPGI6*w4&lFfj?ZBxZSgRo$YJv$)ZDq+TQd63H)BUUDvbyu<1^$5p;wKYVznw+?t zA4b^gXQI`V8N*xct?=e_|Eupqt5$Af$A$(P8fa)>4K=X(S;rb)WaHEih6du98T@bG z`Yn9w|G1HFuUICJFg-hB^bpNtlE|e}^irR}G&7$kvbQ;-c`#JjxXXqH9!L%RuSb3Z z=`k)C8O<)oriEY&Bf-(bb)#NP0*@BHN7{hzADzV4|6$C$zQOlzzBq=7cp0H4E;b1& zh$HyvBTl5It9bol5wBdxQ9 zd=;3)wf`HhAwQLr?>G$1Yy}4EB`<3mEnI<6Gt2bjhnGc(F%Rx9F6UnVuBd?u>%i2JLU3-bB6Ew1+?k#v z-||9Pu)C=vd8^YyJ;%h3c_xf~^XL$!Ce!do2!x9gp=X{0SxrH8u#%WM(mwp4da~5( z$J7z~F+EvZnm3WMB8Hz`Q-BA#9pnKaeO2VLv7ap?2I8`sm$}Zrqx=?VkPV_ujg%lk$!uzgZ#5-o9GCE@O z2EbJue#duV#sg&N{cUGk3wT3}9x9NhKg{tugY4zI)7G3N(&*$iBI}JIPyYRzgkIh$ ze-g($FQMSDGt!_98T%AGB|F^FwFQJ1UhB(+zvf)RhGLoC4`${ouwA(IV9A22oU~-UMf}YDCQ9B4qw#DAP2FOUUFibu z$ZrR9QkG+f&gGVtvHj6?ki!wc=W@lz_ZtM*H^yS}0lynFU zX=tFKfrbXeX}K}bhDy$Y>=c1gE`-bZ+N*tToqc_&as9)*-VA`l?H32qc=h-+eVgea z>2YJ6j0amc*-@M&5X;=A@if6c;yA?Q2+Y;I*6ZHs@?e+uxs%@JHZFDshRC@|z)7-; z)GvKqKAgNbZ9v;2JKN#mLbA%WqnF@-k6^k-FM{~tpdGe!gq(gJa{L9c$+92L%Gxf< z=QXvCKCvDuT&bn5O``wnM-e|aXh3l{YtKV;*GX?Td8&&`y)ODBY6;b^fOJXilPF*K ztH2clu*@H0c3SYq!b-O9>Vc(c9xz<+^8@?QMGk1ua|qy`2i51*A&^#Jx{_Qj76I)# zM*Qgl(Df>0izcb1%1p)!xI`nBgMdR5`MA3n`Ju$5rapOGkd!ft#elx@#$NEMn(HH8 zAyA#K8fYtzXj08E96N&~2I7ObMtZrS*-^g6FqvfHxYA++z~Zyr8{e7o&VY!jBmS=$ zJ*4}&<}RHTIc7zt=c!)mccy*xyFA>pNrH4tJ}NL>pt^J{W6FgyQ=}{**h$az-rg|6 z5w|&9=aUgcI$tO%)3liz>WFp5dQ#;YkX^vKUK|?*s#{1mGm;y^Kx_zuG1bv1Mq=Z1 zvf!Y94~fU(CEXMdAh)oKbQ0tTEVA_7C9x(**V54DhEk%7^xd>#XYH_!) zTa}UFgvM*@WS?Cb79Nb<;7qE}_ z#WvK&q#KV|lW#UURm_xUX>1oAlagsG5wnxt{eheM&Po?(<+fI`l`!EO!!ZX95}q>i?zpiz)y4Vb+8QG?_GfA65`|To_Y+_r$d{9(vSL4A zq)S5@8fa*sp@I8N1FN5T+;4Zj2KRI9+{@(9rTZl1vycDk8eGBpJ>}rc87_u~xhUg0 zj{wLYeD!znfBp~OFc&mh?&44!CF0bS|ZObK6 z7exNUa{>cJ1_E|7AP^2d``P3r-$d8Erj-GJ#_6gu_d!b0K8i9`l1tsyOG zv2#;|9_cnr&!(B^)Q>j4&R&=$S2UA^wb>aOOMs9dQcs5;o@@J%-g6XzfEN=j@4%n# zgQwVByP5m!ukP6(qw{YDNYiba-}tUNxXqb@p)aJss%$_$8ZrRScYS#yrL-)onoV{6Bo&Dw!4E4|Zg+cuEyN_W8B9#Ju^{R`LpqPN#5`ld?`=LN}8~dpYEUIO{kDU1Y z@WS9vU?r$&G5o?7lW?_{9PwM4`p^|>W1CXTxi_WF)5_$HVS?rbjyE)b(CuHCT3t_B z8ZoljLJiPfbc^bXA=0}g9ab74_v~xKxwBKIya4HYthSUf zxae4cm7>Sex%Ig&;@p?vMF5*P^{pI~4G^#H$8j_qYR7bP3g5c)Jy^?J%2bpm!G`W& zCpOcAeRE_Z{7f9U-o=^qv+XHzhSXHn5F=+Y2s-J-Y1*t>!-b2To&XkOmSmGm&`Jhd`Wd zcWv=>*sBDANo~WP#%nKfei9(pb{S31&Fni%_v0mR@-{XKsCN{7G!*$!aS-Iyz&iIZ z&y#}Yvh!VxlrOT4S<&Y8vM#ge^X@^FIZ)P%SOd%vA)cIaj&s2f!UTuOM$hD*J#2aE z6Z3s%rE3-i%iOK6w3{ifH~B24{1=g-XTK-Ew86e?uVBz~4gJo`92n#JZ@f&%%2@L|dcH@=r`U&HyaHwY>@>1E=< zd;KR&*%R@Lc!vwyDt&g`J`V~pg6hmpZ!42^lKZ7{w1DT<&qV)@DWp+QLjw&Bye|!e zoIyOd;c29}z#dGFZKCcJ&A!s?@Mijk>W7wNl|i4chc!p4N8jsj^yxR}~T54}fr zh7hGk=Ek-hE)8T5BQ1=(RUl4{>O~;Ds9p?^KKDL2RKnhEPI5&PM9k(H%1ci={@c{) z$J9&)@py_9G(i+;D17VPIKLOMZL@ov1ft<|LpuXS$raTm;-i-6CHoE29Jm$(e&x zdi@OAAdhGz9@W_loLWCEw_o2+AOL^8zJ*^!@nYN31#1V58|HVF))1-UP|qH`J$an; zY)s%r-dsDu+H{HuDOq0vY6XxslT*D+@YF?+-Ros7@i+nDlOsviRFwuWMuQMgw6RmE zOjB=jz-xjY(P!SB#DRx9=q2dHCK{-mEJr)JnVX<40%+B*7J?Z50OuEOhSM`aruG-0 zW+-5E5+%aqy9{bRpFHUp*HA7Q5LjNhBpFD;B*+J}W-Hjs~_i}e0cMnQ;xC8C} zHe8BdB`>{)fQ&fREvy3qS-d5ArwcUK{pmN=kqi-{=$T~VQ6=ov_acFC2Mvy^|NT zx#z7OdJ;2fp>AB2aTml|wV^e&7vr8&1l4J@AjO8n%KmiH@ee#J4aTfrCvysvnZ&Xq z*#w+hbe%m`7Ur6D_q_VVyaq!^$D!PGi_4=Xm ztgwHO9S0>EUKK&2)>Yy7WskCd-bR(Kww?QibbxmPeSdl7a;zVbQz=P&*N&e4nVu^rFjA3gpXYkz@jdqP^bLp{)IL!h0@?L594{T6xAd36gg3Jo&}dQj%*Ff%vg!0IEI zZZIN&tppi3V84AOg_d9e4{c`hQzn+`Yy42_j=?otZbd;w1!c5wlh$At4e zw4^qX_Jzsnd{zLWKwZCNd#BM~{Q)*dKeJxceCMu1^)d&vEvO<>{@iBsSzd4H;b}}C zKabS#tno^>GQ`=%ot&&hK^IOUaCW|A>=0ix{iF5RrPNE-yMT0Ut$8Ld{I#}Q?bq6I zI=)^4{bM`GoqlLXgF9VHTO{%dezx}symIYzf+be?1N4MuJ(LMZi&9DTk)xNo=syhT zP4HC`qk*Zt(}xYrH4tg_VW2<8=XkcQ*6Ex2-+MsTXlD_Q%w)LX^FP@t*6fZp+!|)ZET$V)FsZ3$6 zCsA!YU@@4k{+%L)jG`Ho?9_nzs-rnQtJmtQdZU90OGUpR@LA`swJCD$6ZkqCy}PS``K7Hy+F>3K#D-(GLam2`Wja( zkIkvAunD_-Phi$Ija(_iXC$Lj^7CWnipRgtAMH60oYX_sH%qT&8a|9+rivNg6eGzT z1cJTrdE1#RHHqys^5iC>@AFJ|=P+l*MZ-;%1`;m~Bo1VYNg5^E$cKJ+&Zkl<8PXS# z_9^Kc=2-kF$G7>ur}6NZ`-iw#xJYV1AKFPhV|7%~nh3+X#g|auKp@D`58XCCIG|&Ll??Q$Cvp@JOlW5N3tN-S;8%n1Gg;^A6 zU65xu^s8rnh-QL44dJqZ9urks*g3tT#|$TUT<}V`jAJ4g2f0h>3FUJ#*&rXr{K@8U zVR~c?-besr@nOWdFlr6k3Q(7-vq}A2Gn~^YQNO}*0*V&Iac+#O{8WB(UbJ)1F*KR zfv9mbWA>6^pSQ}j?T62#5(cfa3( z1BcoPVB2x#y(v;A55eab-HlO#F?!T*ATy^|)lXR-<fdo$le4-lZj)`UW3M;;mK^ND_~6Llu`Q@0l^pPC(s4N(no!%@-q$ zL|$gf^&`rWqV-gc9?d=O4$Nd?G_rVjy`H-Y{5KbOVbXsYV15%s=f|+DuZ*j<^K|^- zHX9?+ygn0Q7AX5+=e0_=>p|RQFSaK4V;JlTjR5gNElI8!(VtCxM8hE37sl{xPU&C0`iedwyLkaCjG4bJ;CbMrbv$W+MnZl`Ak z@5u~0^&RivyPh|l)x(%{_0wv^lk@pjmx<5}E*Hn}(lunoWZ^uN4e`-AqS!Vp)x zouS9HxLY|vC=_d66Y^$rG8EQstsqBF3L6($@?dwmTwKu6>xfhe1zP3hLADynF+BKR z{m~cjfB*O2UCr)|eHt2QXy884K&!I_EoerceFu(Czm8WE$Ckb`u3bobjv^hU6rEfX zj!EQUKW$0j!cZDd?1`YGiQ^Bq{mRd`MjCF;!YRcfuCOGa!%_XD$@f! zhrQcNICOwqrtTU5G&(wq4I4-s!sVKm-k87q>8<$7ub(HdUP3%sCe4ctGp-A8jW>~3 zw-cqN2~xsr!s+5)VDI#o>KAukyc8u@b$ek_E$^Jvot~!O4z&5498Mbz*!hg)^rG+Ny1EUcmlx`SL8m+5nn6+?X28 zvcI`Fk4Pgg4|r4O^XE`=va??n={dKO)Bsy^p`6E6jORNq*ns;k&OfFnnDjEzjp?aD zTpAn3j_w{7w{n>)oo}sv6L8*4YMXz0=!^KX6MsQE9_EYigh^*0K5t!>3=213oxGOw z1l99QP(S?!H?&j?=^;!^Yluejb_cUqIb!206cek3I`5%7_Rgt^4t&6uu-Cu zgt+w=i;N`}A@;YB>-EIS5$%i&IjZsveGyEJCHXmED0{|Yli1qSOHbyxL>jj!cP)Na zPN2wa6OLFu&N;3NNq?SDdTso>Ti0W+dJ(iT`J*T;SWguKUDMep`acKWR{0H^O?fd#cQ( z;J8W5Q4+IGeyK8NYW_y`+Yryc` zGc>hN9maV0EYi+tcr!Hvp(xZ|#ozKd$3(ByG>wkb7su@x@gaO&<`ydQPLwx$o&d5kbl(s1 z@4ogw;xmW7z(jtJa#6L!ifqwM78oL#FU@lCZ9_C3g^Qk2namV^_4l5^|MHdJ=c0(5 zYvfIr8z+}~=0Tl_W)Rub%COHA_e~qmwnfF>^fj4@;}gHT9UuAFFWvN8V?#p&4GrA? z8W5za3I0b~o-wb*cYHQ_1%GkwI|PB|C(DsJ3f=;7w3$p50pj0po@Hn}pPnB**h+q3 zJDxezffzkl$0t(^VJ2WZhlM!lQTsGK&EKS#dZ}2&J7?&@W*Nhyhc_}D)=uh}HjIzY zpskIbp(N_Gld9m$|70Jp(u%+Q+Pm1di(rwXf?@w_=qC8#X9SP9o;Pl9!bQtBuzC73 z^vdJ5`${?Qo{^%1iOKXjxM&wjLr zV0qcl!9=4uGdFnc=n$U!STCB|-AF_&*t#Wxb7!WExAHad z`V_aaqB?|6E@k*oJ=HsrC|0Dip}`~u2NLLDZiqd5T4;Q*VU&FM*SJjv5K-}*XOhyL zyIYW$Dd4e3H{kW34IxY8$zn+{dZDE~h?(hS64%wbEDx*oY1O4(&4%`eUYo41NQ>yS z1QgqFE_x9=+P9$B#RS5&=C$~g>*l+a9^q9|==eW`yg-hU4^5ffNO@_bBF&3{&TzRI ziuD43a2Rb8uE{@F)FD0y0HW=vl<7ru%M;k{K!jb?8OtYYWJE)5MdG*H(-dA(1->KFPx z-he-o!FALkun`d9apM3k@V>o&h(dk((^0d>uuJrNGfASyjv-3Zi-*^vy znof=(o}a<*{K>E3?F+Bo@=o%lEWUH{ukkmp{Sk5ndU?{bEi*;>7JA5-2_IcWi-v=N zzzMw(ZCoG;G_li*XLkA;sTqn$ae-Sd-?}OPyZ`rJ!qpxkaBsy_^4cx0t+7Kx0}Ty4 zSQ^;fv;`mE`1lPsJv$AKH3S)$xK#8ov*QH%W-E-0A+S!5*(3p=EJ40-(2Wi41YPO9 zA}Sa~w#pML=(pnFUOT;%=FG^9>W#!bRT<&vl^buIYi&+H?h zM+m*d#gss#{td8BF~J`}7dt(Fn>X1p6u9*md&AAF*Dpfl_$ue}$WF{+;@DZ7{?l*c z(qH@-$tz5}MRZTr{~AX+fpCJE4!s0}3rOd4m1(fZmCr~5g6lad-n{rjp4({4FuyTH zrHMMIEj{JEUW1D0Aj*CC8((@C%X96e;|M%NNQd$HXW`tr$y{emjjT@|*N~+(pm|V$ zyt7`m?`$S%ywuC$K$jP(^u|BteeQ4HK6N&V;?Q zU-xHCGP!c%5P~@$6RZa50GDPk#JtnR-MHE+pGRJ_qUazXJqIdGlb%WWfb8}lpFd0t zO$Q8rf=P{YGJ35qsbovoMV)UqAI@oF01<-sTXlj-JG~Py8AF+h>3O#seDP8X9P5prL^! zG@$j2!1P3nAcXnMMIpzljT>#a7Kp)1FsX}Pm4SeVFE2TtlL)4IxDNq%&jmC`Y}mC8 zxNy0I43jVa;3s2v{+TLvZi^rkWFCm|9EOIc5Q*f_-a_tZa@hI_Fn;=pgNP1gF<3p0 z5&s*g3_pryO9v{gQzk){-Oute3<)mHxzR6i?dxyTjZaGPg%(m-#HV6N&m<7LNY7P* z>J@^o^*w9vGBwPLel5*;l~?&tt$97yj!`7jb(uqLwPhiwCYZ?V%>}-Wt^Kdtyl8ReWn0%MXe*(96i{PAXZ?fB+d8o(xC`1tg(3qtOIS4xMxEie2%qb*gK+r!`5^wA9^GXQsMt z-Ei)```mlNI%}_8V8Lr$0gOG9^hlNrL_sFn-$BN8l;_tq=$e#ldbv-fSr>k4-Qro0 zTuKeKs0YKtv?C>yB&o+ho>tmkbzlC&Nd#4Xb5e@Hk67UXum#4a`8ym=;rX4M#|bH=Gd{Ox`K71%j6ZLPWtFz0&CY-;l;iE25c{6tH~2TC4LG?y67q=|)#Nhu;2OGyniV07*naRGy95&(^8qFX07AFXS|7mwNs9hG;3qq>8fPMfVBfw&7972s+in};gU86 zFQ@$EB*!eA)QyoPpUl$3jFKkNscuvxmJ=Xem=h86Y@Rb_pJhx0YsQ9zZ-Nswlz$;3 zJs4&%((+PDOvO->+dxr}Ig@B-%;|Mn$;Zkw;l*bA4VYq#uU;Hy@a5AdfG_ryQFIAq z$<>It#wdfDmpYB|8H=zZ>g7{sw{WUIkwhq2!+LRnK5LOI)>*b2iIje8J10Z)Qmz-< zR>k~^7ARVvXo1(;0<%X1ulKbq%JUD7_u{`E{j$0CgB^QLy9aghm8QSwlFUYVnvkRR zZ;Ttllo2rd6?V!WvS|Oh9dYr3t{%>hx2gC)Dm z0b7z~#ev^^%pw zP-my|{?Xp=;?B+Q#KF!NaR1(W@oRT}694&=&w?Iu98+bQTmE=137pUBygbHP8G`qkjc~1Mq~ch9(pKePOc!PW*=l|DYEzcS z>7~~-+0C#g2?DDXe7-5(!vaw`i|K8?rj4rrq5^3J$P2I)xIR0nSO*7V<|7vJ!~_Ed z^V>(ZbVUW>h9m=uRtJpi$MDd!o4Gl`OfG4<$fu_WDw=0xX8qhHy^l$Hps=f90A;g3 z^U}5DCt~#cEbe5p+HmXg>#=w60J_3mn4Aiebx!FP26>dUO=0pwCR9P0SBA^dl(!LN z*E=h~TkqiPl;)(^v7@7=Y(w-8C@o`fI+jyoQxF2x$A{u*Y%W3D3CbQ4bW@UD3&6ed zHGxpi!;)4JYCrX>HTjXB^x!kaYctnuE=(7v8z`oN1?*YsLR;OGEurmcDAk+WQ@7yx z%5KWPRH8gpSJ-voeyi~5RZ@-D=31TOA=oSJh;bs_HR*vf!|_MTjud4$e3Va$C5CZr z=6$r+%$Q{18t=8aG6B90PSC_0L#ED`Y1~=LLs>7Q9{p}qjWs|4Q(sbnyf&A2!Dq=) zH`|%EqXla&_?TC^qs7SJ)FKufL&`lxZxJhkWXES13^kRRAc?~bXUvYObR$o3di(fF z&p98*slCk6YpCiqdOzpm9*TJuEl{*T(E{hQKoL+si-kV(U!TIjSkI}g>W1I8{q4Bv zvY$J(?oYn+VGQ+*Q8)cjvrZj%di|lY3K-}*wVPQWPRx#Lex34?x1iq-kaTT2{93mZ z(&nZ+@$`}B7)5@Pj3IWQA`yJ`!O!5az4zn&xBohB+;Zos+e~E=c;wJOaHgFgH+xt~ zy8AmRXW(#pkR-!178$|*qxbBvYpMDwr=)vdi`!qWGPr^x^Vz1i)k7JbVN1|cHRJ1_R0!0hVu|P|( z9`9Ij8@_e)M;Ksyi`hwa{I;sKSX;WxU^6|jUcA6bKdoQU%1P3(2!TL5ndbDKsXt2g zUjn7cATYWKL%w|mR2Sp5X83wM(DyK&+Btx0cGOZ9M&Mrzlbm549;G}+x(myin(3`W z2^lipn_OGbMo=$mA7K5q4^w?*Xs&Byea2uUNbO;aYnJl+PB)#WwrD|6x`8arF$zSQUu(V!zYNP!Hg$H;dFWl(0UD+>LlCPNwC&{?JO+=)}H0`VxYIT(RGB$ zNtXLE%8S%D5P0DFWy{Ja)ih-^&kX~f`{+BzZD|6q1uR|fub9yq{2MSf|6rIr^``*r ziiORK&-d9*J*%g7TeJ(h|C*8t1U*-Eij=DYq%!m4;xZ;`y1WP$f!E-0-GU(_Srw2j44p3fN zj!_yWJ8LpUWu!?MO>(GA=B5lMNthjM3{q+)JorPGS4?NNfIaPnI~`;oRBDjZusM=c zJYgT|OV+|OOyD@KA>vEzeCFIPjkUQb!C^ZkC*3DdgAH({=s`no6_JB{wg8Dh<6x}K zqSfX+4xUs6BGyr|tsT_+=GZM`M@6auS??rVeU#yn?piU;Sb*lRL@CKsnLyMri~u3& z%2X+wtaGQRi{-TjIR2%_6{T{DmYXqKaj9s5q6LZ;cs(po1k}%9^?$tQllab~Ut(aH zJm{*yhSKh1PvR>-`dfVZBVWX4fBbvcdF*kzrsucWI4;nqk}Pz|y13at=s0S|3g%CW zzQY<9(8CSkX^e(m&j=C!xOU}x(Ok8f9kMh*_r+Z#wd{!3geu@4Isz95$T>#&mb-5E zWC#A~-ajFj?Zp-AZ!|`;SsmEi_!ffdducQ`BAIc-Mk4T5vvcaA!6>mH1jK2Lpfo@? z;$atEQ>VxbC5%GGLzbP^Y)Kq-B`qlR(H)=Z;r;iayr~ku|HTiZC*DaWy9LK$Cy)-( z9hid!H(76V3P+X7|bJ@)VXGxe`Y*k0N22BZ>!CVV0c*#_hY+DV_ zwVPlo<75b#)W!75Euj9B80VG#GL-p3h$iBAyyq#?FL3g?Pco2TIuj>=8fO2f1)S3` z0J{1|nh()LOQ8>TuB#BhIypXtL;DAfe!7u?8O-5|s~hm-V}#}hP+a1W(;1bz#=RvGJCzt5GVPv6H$jwc>z!*w^e z8hcCDCru6aK?WjKIcPG($^0VhGz&zx&jQF*Ryu_yMZ`*jtRO*uZJYaKf<=IG(?7)q?wTxX_wPd{)0|I&TPJ2;c%plhD4-IFYb)4~Z; zKfQ~ie4hC}+Q~|u~i zxffN2#Z#a6fN+&T41sDFJBX5bq<_31*XqF;o#T+4z%yZFaFgn*meAI!<1n_ zcaySg_{s>D3ryEw%|pDUh4_oBk_{p~*`__v5y=y&*vTjOP7IiReLVc)ck#de?H1hj zJFQ0Zd-gdOKRo{#ZTz%cP&H%y;PWNQjb6lsV zYVjul;+j~h57prIWw*eYby9|^k3mEy7`veoE4^zNA7X^TOQS}LXPk_4>B>*CjHEHI zcQh1o8M&S_StG@=DR>)<3@7l^W9^K8L#8`5uvf3CKvhkCqEdB&@lxP=ZPR3k$|*15 zBJkdVx&|L^eq$@Hx~>5mHdhhkpC+TQD3T&wFb_MK#C9@W9%essBEiUli!5b0uxJk+ z;eF3jJw$-cnxI^XGlq;!3>GE615;J-B^IHCSpEj){clBd9iK@)Z__ehp@|S0907#f zby%NyiB~gV=~?Ra!j6~d zw>{&AFHM#n>pN4Sv7A~*R-++gLz%r5b;-4tsAY<`U9>>a0!0ffEDJ1dI`l=fWtst~ z6u?r+K~{?fSkhK?64Vt_%E9(*awvboL^4Wgl6=2|Bx`V7g%l4JkgmQ+hW&PW{uyGM z>6^?VI%(Wh+f4n>UgpJpHAqYo7>-jrR=T>^|3(9L{o6F^o+5N^kB z|HoT!{pJs%fttZzd*budoo65x{>zcg?_=Pq+6wA?a?li?iXoB;BTM?>So<*iHKmvu znnW^1H{}TiaH02rJ2Zhw4j{@yRS5W4u*FogK+yt43tWH&92ej@WFaV9H*qae)+hs! zazc;HwYK&?v^3YTJ;@@~bOQA!HXzN4e!|&h_S;{2H`Wcki*3$oWS6%YNh*iUfhoG@ zu%^WD*a(iaAH^EZ&RW+0j-Xj*tizCD$Gji^VKr%+WG(v9~{AO zf5d?2vv%P-&0l;d4e-qUeO~r6=*2R{Kye0xmCgb!HSiU@j&dy2merfVg5-mpKT!lC*jgC&? z_>p0>P?{$)mc;tCmDsy)z&sD?Ga3n)S^H~IlOS8SR%1de_eVP^6`1#4nZ29NXJ>t> za&mF9F&>X0PL_Ah%Qss$xL6YJqcOM)lO+k143^L%g3qs>KN&|!{b{AbJ?ZzUWvw?` zXZD-^S@;sWI!8~8lqW(!y##iKCRGx-#klemb}W9MW&zh^Ic%jI{CW61i`7rFH+!za zgzG3OhAJgsdD{L9{fFLRDsm%JP1&ZP9gbnXvm^z`MM(clI@hx{`vwd9&0fdlOd>ya zO9mqhf14kFIVcC_aL|i68=tdx@uw_cW&9miGK91z1uMO)vq{!A_U-T32`g0ua+=IbXC*A3( zEm@N-Jh$V93i#KzSdu|+aEhk+-#EA z=YtF~8Y*$}-JvKqKJ&S@ z42@h0SJstQ;&#`Kc)I&Jv`=g(247=XSIq;$6F)Nj7wh9(?4HinM&36sa{?WZkI z7lp&&=CfwU{@%l=EvYmzfT!)Zkblsg)(#6o6{U#RO>t5n0sE8_o(u;j^wP{uO|fjK z8_&95-)WInxJ+Yna5A$#%l@}5!$8*X5u`i)8MRxaS2;=SboyQ7`zBz0YI1BLTjuQ7 z#s@G%LXYGz@(sz^cYUQ>GUG`&swiFJCeS%STQdbSWLl>so3gmT^nwj6QA(Zl1d**` zz}1#0lF_Kq*LQGYle%2IFV=}Nsp?u1mGs-_GW)=nkL6XTSGpSeyi(*g3IV+yvqoj4GT$$Ke5#HMsFq9+Ew!jB&$DA*&fT~74iU8U;$-(A5}YZU49D=F|MLXa zwbtXt9qUY1Ti3S0@6A7xFDLKfzDvsjwUbwwf&75)1y=B!`r`y(|G)^Ut194jQ8Rkw z0W3Sd4Q)}%DL9W~(%yrUzDLm*T@H7WTDEKhwyfETgU1iB4H+@uV0+I=ln1L(R~dl! z@=26Eu?)kulg4m81JrIMgLFmXYJ&E5^wvI&)jf-&j#HcKswjc?x)6e#aK({s#CnG@ zH9~f4f`fLA!kJF7gh*s_HJ{QbsWe93B(#4HgZ=Cb^S#`%qs{=|(XfJ=vW)lNytc|{p2{YJLV;6mkUgaQKaiyY)PP5 zW+2K5M+>FBLdg0oh`T7YVLg zg+C(Z@C*5qi8E79$|l_eof$4t$x7fkkZ9!TGzeUrDHA7R+mU3zOB({7N+dZ(i%~0n z%FZzr$FFHy5;3}9C+H2FY3_;d&v4l=D#tmQlHdz;vFjI3RPgmhs*JK{4o-^k zpOP&dfGg(Xd!F~IH!By*AKGZbKMr@s2XBOZuj#g6v0VOzT&Mb@X}QVGNs@D1R31`u zuK!~E)VnU*D44lTGvu?9?3R(&BH5=e$4*^cU8t+8Gsh@z9dClA&&vDNEb5wdZOXH7 zT`A%Kv#+yoPZ#sNujZPI$G-L!xa0x#vzffmxtt`6JV;<&<0Qsw()fUEYk)WhUo2{R zl0Y@a?-={(VxSk2_SZ+r3`V#;GC>wP^BARcOpwRXTb6?dU`?xs`;x&;=@%zEEf4Jb z9NxI;*YXE1^1mOx_AeQT^pp7U{_hYRDMQQ>M1)$F^e%;$AcvcSCYwEjMAAzD#er31 zspZH--yJ>50dNjpcF1nO{;g=KT!!79k0R)eQD@yp+sCMhIf8?I&*HJ24`a{ar(k!p zg0|+!M)x6+$l?T_dS89jvPbnsxmC==|+WKGA28pzqj9d`P@Uz?|UA2`n2^g z5Rkv@+GX@)kyJ+p$EeZk=Dy|dG*XM0k`!x~ zZGffi2nI&_*~tWYhkED@QOEktjZIaz;KhC?`fZ2J7_Pmi1ND`ytWN{DZ0+SpS|}RR zeGZ^_p_K?5Qx9cVLaQ2)92!TQ6IaRM2_z>O3~`d4Mv*u)*v}GV7aNW+xw(VW2I6Ep ziSSf_%+x;1P1+Igz*QQc2Ur09M%urj3U)T!7EV6Qw9*UBAeYAV6hKr z)t6M`;MhTW`H=}qmO+73E705o3uPg9v`v_gjpsdV8raHYLxJ}QHi<;^IdMtFd4iecB zp<#D<5OszzhJMB{61#m2hjLGugPSAEr|+16dcq55n#^_fhg23efP8S3YJ2^O}& zN~VICqQ`H-PdTV)2F`I8y(LIox>%D0d=_o=zDU_-0CguPnkqcA1JQrD~1!?wwQ&~=8@W>{ehLtN$$?_6LO=iF_QKwx`& zI~p4s*>@~6=lRJ`eu5o4cA%1Dx&+5}hYue{b#*mm18dKk*Vxz?`>9S65b_wrS$8aM zSd%V9hJ?ot|d5TG{&i6Pc(*>w2X?!3MJQo(TCcjR7P?Ft55@Cmf>*O^) zr!wOB4K`L%B=Qh!<1&wlak;c252!0Af$sr&$Z7k1yZ?U40O~G>AD1`1ANM_WAA;ph z_^UFojRrUn;Goy%qHbmfs!B>J3lnGO-_4Fg7OUunf5R1jg0KDH&-iQ0_ zk2BC*6~6ZDm+<6~hq1ACJ+57So6KKKOTYqr1@YwW!+8E+8{gF&M*P%G-Ic}@2M%M~ zn^&Q-sRYBF6Zr2R?80*D=^lB!`;374*Y0~9_dfI-F1urevC3fkxN)}}Vt!3Ks<7{o zHrP3c-SURz^fa;a8BU;#QUQ=&@-omS~Kuu%^>wOoxf{z=3 zE*6WEsXl~ycDUTsTh6w2pwdYRim^P-Gh%N;dMu8WHTCd1N{oK=>Xx+}blTC`*M-jh zPONF(0w2LY|7u{RWj%5|R`gg8nEa1)9KjXquO%?zfU_yNr~q}ff9hCUon(;LSHM+U zhMe5Y381H=98A))DZ@{i;JN|US=VPdXf@l!WGC2e+@I-oZlO!Mw71=5LAa|*$VLys z5%M$EiHEFBx~R`##hkN@bz#Nynpr^oFg*uBXAnWox@%HhG9i+L5s<5TS8nzy7S;C! z;!GBiJGBZGXr?b~}}o>H>&NCNVlf<|W&T47HFw z^locvDM3}W4+^$9&=)a)`|O)nzPd*B1$A63K8{*9gA)5Wc)Nt26_t^V&LAK)bUHrIr$;DH+l4J&K8}743-^&|+n9Y!eWGrk=8r zIqac#r`v#|4xbmc)Z!i*S|e5pjxZJpnfWey7G|lPKW2$gqBBY+xsBsBCnD)lL{npI zqa6e)SubQK7%Pk83qHCj2KTn-$UV1|p(0ZYI~o0YmI_JrjnhU@P|_8g1k{9$DE<~P ztCnC=+nUy71SfMeywy~_L|r&doqwm2HrCgEBq@KA@W;{Ne1VL02RdW>QD(W3w#$Rd z4o==k+S5+2uxy$^)=4hNp5gsnOeS=W(HfLfO7qL6dZ}cJ&lNrF7+b?e=^Mojn@kRo z(H|o`;H7jadF5HkT-i#=FlR7ef(s4nyoq?F$Pd@o1C(N4+KwX$%Q2i>9IuePX zwYBwS0qWh|3}(;zNge>9P{@2=tm{=ix@H0OV$=&zS9xkuz~k}Yrkiepfbye9kDeDO zf9|>G4B)W&Ya(5Jsz4|Yo{#k9k0Ray z8-a9HMkLoD$Kxyn#|tUO-^xofe}01Vr^fTlSm##$CG;93E|C9GIB_J6$Jx4kI#EjnT+XeCmDwihupl@8IsI z{}CsnKV!$$hA{Q^}?W}5a;bXV_H+CL=4By{- zFVb`!h~(mMvQQp;;XY1=Ou|jg$TfAfs0%eM5i1vOW9R_yqb_9NE#z9en>Yd#^Sl--9-Dm1}*G19btVdU0j~TF!<@#`-Z4z78 zZsvf!glu*fRyS`XCx3ukZ3mY1TO0Xw=n^X*dK5E~={CN_Zr1ghLE z^!#b(?Cl~*0?JHdIDM@a*7X)LjIC}4Eh89i5*t_z?2Z1l2Iy>WHHm5h>#=b)>?YqN*gZyW^o~5{6w!OajN__L+J?wi;Fi1Q*#`F-B zon$*>d}Ft>-@PU}Vq}*L55?hOoh6x<`i1~1*fuMF^|zO=D8;eEBMd$(raA%gsWkd2 z&68wXn@na&cyV#SOI|Pmb|ryNdPW4mCm2U3o|wdr+RG4d`SU>k*)L~FZBboGQY*th zvRpW}@H@9)G|+`(&ZiOe#Ndq*0c4UEvy~c^0t2)C1d>T~$&4*d_Uowver@nkYirZovYjPGQ#GH@*c&Ul6ai8XLc}qWZ(sNvS~+2tp%mbymdr#0C%-)e*F6>wf>QyMc&)W&zggBOKIxs$2p0R;ByuwxSpeTNg_3YDU!cb(e-BAIk{uUCfhaeCi7zo zt+!`o*O2ibF;*mip!zi>iM+*}!kpxeu&+iEUB*t9x|P!nZr-uq%K+G7hhKBeHAZG-VqyZjckecKTE2X_=@%#yr%D$?jR0dkF zd=4Bq0C@~ZDn=l=nC1fm17;sF%(rjfjzAzkzE{3tlzTbxBj8+l9Y1~?D^{$481(|w z#b8%H!D;sG!Gi~}ckf=)7uv94gJI0;x2{?H=sLD+*@BUg5eQ`0eTr2tpj{01haP&! z+^3!ivGv7*FQ$cWfyG^GT?G58^Z%9Kf8ey7)R9*bOFc<8Q-24UA;fxxOnJ$fi;Zgj* z-*|T+>qY4~K zIMTZxy9d8Pz4KZwOU7CpAH4Hd@X=rRFly?` z(XzgYdXWx%?x9cNf#<)C-u4bwOfKUh=L!a>jmm(1_EEaD4v|gF0x6~?VF5LAqhznL z`-)0}>0+a6Q0?U)u>htQZZuTw=b)SHI_l~+++KsK>niZn&pGlplIAgRx8~D4;?>7TL7~_Ouq3S%5+jElE=%ZG0xm7QYsj1>6oNDt(pUJUMl=DfdILJ3Gx*Hxnm(QS>h9ebMJ^N!!F) zA0ZRHof0vRKiq*Xdb9;f*@+__aWw;6+SyK2R(TDu-rX@lIX{AHoQTyqM;YW?Ns}}V z7l91!t28muO9o;RZ)(01jg%6Zt*vQxxJ3Ra$fw8R=fE}0zH!Ph$&FV5K_(-~V#+9A zPUkX-WL-3wAsL=sl!$rcfn)Sww8P6!b)_H8lvJxD(C(&3*okAK1mI()yri)%4SfZx zRgwpTgZrq;NG4<4Hi*sT8?mK&6ZA|im7uZbvgH}K@jY_IJ*Xa9h8=hZIzrDO=g;%0 za*RJfHVZP;Wha6R2jg_)qHIu>LgMq6m8VlA3kSh<$0#Ks2RXUc&3B#wIGcKFuzaWm zYsc5&isVh$YP}J4ZpsC?>KP!J?=?Lg!uAmybL_;hrDw(>l;Lmtf9X*^eED`b6{fa7?UQ!1Z^J%#j`6b6dj6I`QoE#g z$rfW<5n(+vn1ye^j*@N%YI;i1(qE62!!6hpxeV84-+*tdGg?c51sg&ubA@IvC3!X&YkmC z=6pZ>=}*mZ0?h@s>sTdCBItg#Z&4n`m}F7>$@i!h#ih>QMQ&bk zB|h_;-^Ty*&+pC;-KWRe1z=tBEQ|?jrIEdo9I$)T@Kxv{=-jjnqe#k}_ z7NBg*SZ`K-g*H%n>ieGq)?dZ}Bbhb|&NRIntkh)tv-f{{{%-hn$l2}m;Md;v$L90v zU;24;(Vem^;AfD>Zqx>A@yoaTA#T`sCqDP+?_gcswYX{ZTdCm~LB}S#$hbDapDV|( z^(aDFy2X`w@ofLytO%WW!}brO-0Q)Q4*xe@xTi24k5cNRk~7`|sI6~7bEuL4)&v=# z#}J|$K#;7*-k~h6YJD3%e#a+Y2TK%Bd9f^zqU6I}zx^4ah%-5^yP+9kpQhEGzAGdEM)&x#Wx~jNutO596g!HkR#i2_kn%bwtg#FadtG< zHM0YkL(gC@JAgUFr;_;D?q_iQwi^iexhVzaz)jokFhIK1BK=W1_tQ-{L?W zrqI@Vf`AdhW_~!NV}LL{ZA)O#H7}3EIZ)VnIbSi;mtz5e2A9>ZM_+gV2S*qufCqcM zoCu`{h9*PRH&g#h-y$O9$QUj3*Uoevj;9FRq>Z-s!Tm#ILpwO2^Re$1$D7`|ih(hc z1kyPjt4`c>(lHsniw2~f288r(n#7Z7kfs3Drd~hS$qN}S!Ea3@eCV>f@Wq{9=b(~g z1q*7DNc$GHzHa&j`4~ClnvJsa8_VH zYT1_)P#i^xE@k5^PDO{Dflu8Pl^i{ha9@`K;v#>Ny#oZ8`s0I0+aIaf})~ zLgqSc74PMH$o=!UBC_!pR4XbsQv8D8@nISzbzJ(>VEhQhM8Daq~vu^Sp1%*2N5dc_r281}dTbxmG~ z?Jm13>3Ri*YcfQvc7gJetZ8X!F=e8%k!HKfSPb}&e)OZ}90L6%LnFXl* z(f#Yb1ez;vG2R8j>ljU<=>Cdn@mOGf-j+ph|9vB!h|wKX$?x;yvk(4nc&cA|;if@k z1(TpxRw8Vn1}B*u(_=2Zo8!ZIrn&}q>csc=kU!{AkSn0cVc~#~`zu>z#708WFj}T} zpxH+q{RG_wrT?iEVI!M|?99(4`R8AL>HnVbzLJa*|M46DlG9J=U~m6DD08jC-`w>CvhT{^&+dB{qSEN>?m%zfNz#-! z0HfQTn-x}>J58Ox9dLzW2%BLGPDy?Fw)= z6{G82+c*wC*@XnzZc2PDvG%&Amt35`Xlee%BGq# z?_6BF9@Z1t!KRpv6{t7S5m)2 z{hGqEfYm}OfV+j?7xR0Zu^-wj)_o~xf7O=DY&ogT6m^Gx}?1Z)eS)`WqW;{u!u zlMaQmNlRUfZG8&&E-+f`b2}$6FBWrK;QDO4>-+`ay>Ko1*15G_axpC}E#?@>w1_P) zz`wp;jN3d*{{H*#Hw<(E?4z8VmMqQeq&iRcA^D##eBlcwFKu77YSrxBipz`40+%G9 zo}#PnpMLdM@!X*&48Z-5zy2+}as3DImB;>?OoMz0GG+>Ap{7eylT?&@3HVsqvA#*O z(@*TeBx&1HiUcTdGJ<%O_oB=YqOk4xa8~}8iIalt^V?D&vbdII~T?W}+s_wLL zkf8}_d8ae(8oL`)cx=y)=;B|GHBFoICt5^*kM$qK1X08;5MgxsFZX|wo!khSn_)P84D>?E)3Lq* z{Pi!s|CA+vw(r4H%VvRv;HIw6nud+=6QC-lg=>M&efvS=_zqol^V*knkrRXL$WwE5 zv^Q)zs(uDUJN&aQth%ZJn{Qi&u7g9AX37JQP3td?ZrS=9TTrv24F7V^gZS{9ug8`( zEidbui#snZ3oMV^h8)|HLB}E1iHr{4b`-0c*V2%$uTlM${@SX zWBb}`7-yoKb*eygvIzMRfX?nNCue=QeC-YF1=`_Y5QzeyPAvuk>SV(&YC!#BmOa~? zVp>!du#wI9b8BzM)9o*yJKDnl<7DtLcp2%S1pjPg1ToHlC&++pWUjOQ789DiGk%|b zo0;i4y|8wQOvx8^_F~%=^^B+CMtCeqRuBVDReCwlVW;jaN!gmGh$jfp6D~!~&xu$B z6+wAL%{l2=@>puCH5jc4R^ctH-iY0l>Kjdr(k6rSkV&(zOX&lG0J8!^1pbZlx zgD9J*C7Yc#;`1r3=PdP~os=Cj%qgxbra2a1UF(|+AzH;iog_OsZC*^dC*ZHC!bF@h zL&cQ00A)|=6Km<^Q^^3rds(NhfiD~~F=8}PlXEhL1nW&#Z7Griba5}H1#JO=uaa;P zV_EFw*{Q%(7qBX}_3N#XP1PODRjZ;CE!%MhYj@@W{@K@mF_y*F7DK$C5r5ZRcb%54 z0P|(bmf`yAuQ!Z-*-Rk2bj4*`>8;Ct2})?5DQRLt`xcV+6A=GOlK^!k0sQhNP`{_H zuFgo$=vvFm^D)qt>9t2UG0dTM3fLL!^!qRincMOsLyeRc1j$y%iHxIR@LL zI|?N^bDVUH@>nk$M-iYbtQ-P#XPqK*$`Z^W+#kUw{^dPb*RmPE|K7jD#$~UZfqUAG zzeYcPxaS*qzHc|RPdPwhke(Ga1S$u*&_CLVU{xJwLBnuU``qtiaL2)J#0J9HwBl-f z;uroB<#u-HnI=-b)KPx`D=M!M@>eL#2Ne z1G>1;)Vv*&WU~Fc<*S^q;7leB93CAp=7ROj$1k1P88fKk>kgmKuKjS<%&kOw>8I7a=#F)`s z-~VVkufc=wy}0{~fO<#YFq&&C2pGjE?_tM*B;1x!*d)1*~2*2dCY+7K>{2bS8O5U)rn&rN7?yeyED|qHs%@D zk=s#K+H62|3uk3*1k`N`ex->?22s0a>G(*i1fv6HTDWzeqlCY+>a;XrJFcvcGC;ciTX84rb% zNDfZatFLC{V7M?BR4=g8XWwNsn!$_v2C;fwIZ8u5qkX$_Wf@MK977~LGY~5rqrj#) zGAgnJ=k-+Sy%T`1b|n8)7WTaKzU66IAF46H`rzaU+Q+*nUl1Y2n8tzOL$p`kyFk(` zoFkcj9cSKSS zl$Yl@dtGtqm6z_=lH!EJ1Z6iWIq~5qGo9^;XGJ*@CrHgMrWp(HnRLcHXv%HGXjw19 z6{9E_By);Ma&1#~O1`kqmYgKOQ*d9NIl8z+3pm1@{14cWsiX(DorCMl1f2CjBzF!L z?K8^)s-prEg>3j?6l$xVR84AojJG=hEd? zpvl=uQXhNv>@jVVq(9#DrZ>&r{F*P9G63nS8Y}uI2vn1NNNxdE@^@u$e!%p?4N4}P7*wa@C7aH; zB22dQ6Ni3?@e~_#j*QsfW``*MEg-#=pn3@>6lEM@9`KM!PPuQm=xHUuoRV*FGdR_% zCbF&huXj>2PTa;oH5yr|?koveOyJFd2=`!}w4&C9DK3w6(*>X4JLT<~gWmuEKmbWZ zK~!&1Mqu8eXz|oWYpC&&O`So1n4mp@d`ZjUw6j)cqJ<{1d(HD%@mwH zISA&sI7k)4{FS7j$B)jjCowuP0B4{a1JOPt+2OP@SZGp_z&J4Vx~&+EBv9+Ez%SnL z`?zDrU0Bz&_0;J~oOKvUbs&))!n&&4>FO52gryrLt`HvD|5*kz-G;W*{it>?r^|qk zae-!LfW<`WnIL05Gk|T&Zh+0q{3!BHm-_)X`Ka-Di z9m}gU@2XW+cXmL1|08YY#f}po5uh#bUB@XPX*I!gxsLlwJqB=h`JC`kJ6#O+$G^TG z%Py-$2LYFJZ(8Uz!40Og{keI#P=TFiCqUy zqTdz9Q%@Yhcp!lXf4mpZceJ5>bOgKipTx<`2#y};#r@Cj#lYZ%*^aMeUy3$Vt9NA z`Nf!c5llyleJ27gWVGC!0ZIpWn@86Bcp}okAQ3G(23Z=19)=cw1 zZyt?L@p&$|be-Mksc8nEbIx-sW`<%7cqn~SOs}5>!UT);-q=_#E|g^YXS^QOb>+TN zG=&<_5@IknvLCv~`>1am<$z_%fLodz7l5i`3X?IqkAm0H+qEWs(b6D*HYW0yOH|OLzm>Z{52DRR6x4=Q>)9mxjJ}2<( z{nQSxp!9}yin2Pi+eyAptk0K9%J2b+^PLSiUu8Qe5>zUPXz4hz4ub3{jvoj*Wl5a! zd25lHj3E_0Gh1@0*z(ofhs)wcv|^G0p-bp7GKyTpg$M~QiYMb;;C;1MbKkG%Sd#BN zxe|oSMyQwWg3ISZE<{i6VK;(g^+rzgyrOJh&Or&jGpf&BbNXs8Cy!UMZ-&ITs;Xt| z3zFHmK$C*q+k*sz&XL53762@*ZLyJ+1jb6@M1Z=0SOvJ0PPX*5mBgSHTfHD>qT>ZD zt6j^tZ2@zf+4&;=VfPy$g6cITR#edQdsCwwmo?kimd{T=Q1>a2Tp+ZV>XJ?oz^r=| zfkMo6Z4)>xI|?+Hr(0`ls{yqIYzrjUHZ6-OE?E`jTL8HQR_hpn+FGwXbx!4}_0`qY zrd)JRjXzXQ1!)<9@j8AkV_Xv>Di7tQJk7X;`tMq&kCFneDo^REtNa9zYqCK1BdvH% z0_a=k*FEbQ&`0Z(Z$W}ao((#FDWy!D-UaL{y_|G{SjbbmpL;on%*(#ixc~I|GJcgk zjPqr`Ft;zOTZ6Jvx@Qb?&^7B4NzgbY<-&gWG>ay`gM;;x{i-nP zO6icw^|P-jfA+=ocU}Dzh&^f}z>+|nub1=$KN55SaFCT=Vz-cG1WdByX`iy;kKX$) zSXDOzq!;d#RUEcey&K_74;g7MauDXmK)4HKQ{xCb`Y~iXjE$l9uv1$Gx6Q$AFCyiM z;Mw+X;kL$4p|-|_YuA4oD@%9aTTgxlhx_*tU?Th99z}Jio-FwoJq4)4MXjF1)C6T{ z*l8i##DyX|r%(n9@w=^O5S@J^xcb_)Mn>gq*SP1w69&lcJTQnmf9-O*i>FToAU)eL z!HSv2>*{x{LyE^7e7pmF$MS5Db=NhcjPB+angrDQw|UU@;*dE`0o6>0$~TFh{ot?x z5M2#!)RGnHDD&WCc9>v+4bQi?7k*ZA!3)XVxN_t5oN#nwWh0+KG9MZ%SFnR-Cz#Go z9Nnsgyfg#Ocb_<>}6Qva?>r(%GOglASa$ zp+K>c?76aWJ3Q1g-!rfu;nXkz_5?w1$yaGFmE;VlekMy~3GBq!e?ED9oMn~5`pvbN zif2#}qHcAo1t$s0%>?M9lnEzaTx7IQk)V>LCxf&&QY4ZX&qOg|is_UEavZZz&YB(> z6R`Q?oJ8t@GkoEFoKqQHA`3Zs-Ifm3qQ9;UAqFqC^VzbM`&lOh5bYYI6=u!uTp~8P z;M*jjEK5LTd~ytF2SKt#FETF=Te;v zi?|eSb_w2t091j!b3s|%s=(SUTecWbR$#l@O@X!2(AKh&fZy523uqV6J6}o43mY12 zWU5o9jm_lrWnA>r={^+@RN%GlwJ@0=JLw}ve*xImq=P_bNw>&O1zXBCJ9g|a%x~o< zhPXg-?V||_?WeqT9)a%Kr(jooEAVF_FP%#PNd=HANoGd-6t>ScfPi}e=Y{Ljx5{kx z`zR3n^2;wbflGDX*-6K$>~);-7tpRUEnI&gU)@__dG_(e<%Mm5OOoE0ch${TTBnL< z&QAlVbEDi-%c}B~iwN7=P47qr1DK|5IgCd09Vo_D0sHuzeInT2PI(vV6CUl$qNT!y z71cJnn`GGOvf)GTtwe}eKF1eiQ8FMZF}x6EVd9fnG}Z+1t{bZ0qI7d$dQ8aodQql7 ze9PyN=uM)lBTlCJ7-zW|BrlsGL!AL>GB!j9BKXp;K5#}by>P>Jg6QM%ejFNlj7;{; zxT^XW7`$%+x2^nD1e2}!S;v={rvnMcfC*MsW!s3G8-E9WXDQyg{tsZwgmB-^Z{f{b zK7{(eZRi~K6eI9Wn=iQTR&GgeervNT443n4X9|A zW-ajJFFb$RRUUn&8xMSb7fNe5+q?UJzZDgtQIVM}DscHp*!hGP-{s;aG>Cs`hynce`rIbSm5V+!uFXL5s z{A59t)=(F^fzR*!b-ovyjf>a2bS$7gkp?_A4oDhGY8klnX1r(ZyWr(}G!>5-_P9WC zj&ja>(*;&^nBE)*Iq})oJIRSyC+Jy^ty^l?ub62!Ol~}{%OhqI`)=$vMCk4JokREH zn|toX@uBwfp6^oHAwMXkPPfy8%j!1auC+gpwI!=rMp46BR~cPE5t)6|rX~rHceID` z^b_sy1|0D5Q&!?ZYYW>*F;SRIeq2>QhW-wg9Us2U+}1w+HD`O%zi0r98{HWX1menGLqE)(S8c zD5`d_khCl&vOraVtpzr6VS52+)o;_s;qir3$gl8wzP{ziGwYJ))i5I<{a}C*Y?@zZ0ic= z)&8@O(KXLLpO*C;%-%=q3imMkT*c*uZGoAmcwt}XMZdbweC+$EFKc{BzGI^V#tDiS z5;0(m4)GW3#F=W5FC8l#0qd3W`q2hiQgJN#Uegl=t0@OFPO$y>PzIN^`WfibgC9Id zH#hG4YagkDh51J5y4pFKMF~6p8o=H6%m@QO(3OaROjWw8C-WoDYn0972VcZkxVDulh}0^0{%{cGj zI1_>LIs~g5IbmCe-u4+Va8Vkhc+o`*oW}yHFN1s+ssk0cvgQf{)TS9JUW{eoruulj zHdIwpK8bbsxl)3Rh&|8uW1ugLvKoT((KI%0s4~auxGA!ulayUicP~Fs3vyuG3JWFf z2I9lm(|d?9btcbsic4~v`mt`ttSM)GwWV?ky%a-a_>(-9u6DQEsPl-F$nMFc>!7^w5woVajBsni(j~nbDJT;8?(8QT{F0Nhh77+Nl zVZ#R8dh4wQP+#yDT)e=d1&S89U<=HkITw7$(%4Z0qI>`FMZDv$)}wc<`?Q-Hpyyr< z8R(qYLJcu@1qvP`s7^0>5Uaoh`vDxYaYl(u1(E>W{p^s^Gnihf$WY2VI|lsEV{y6y z0wZ*DJ3yxPRohEA*vsMD-y6hx-d=^$CMyYrSqz04goNy9Ct2#5PK^M8o417UgWfTe z_&AdpT)Zqpc>+{0P}Sp~>pacA`f>Il)7)Jx*g5buHa;$FD!Gd`?!@zBU&9jzzevsX z6&TGN!UoTW<{pHu(PQ|*-hV-TsRjS^gWsi;iwFPyOHbkPqhG}R`@X}0Zx09Im6TAZ z!`pX!0_*E<<{~)qPHHH7ms)02Mpx0_PQnx04X6vx9%T)<~h9W z53c3_ov{ZP5K6kL8o=NBk(bH{z2bXfegfxrP=-ap(ax7_jIVIjJJ*@r4*jf?0J#g{ zk(dd7s+INYDvYGd`SLl}_BGeABAQN~pc7wi{~2ER=285~ue`&o4f;JrJ?esi7Tq@= zIJN_$_miE(b|JKt^%7|#HcCw-x;psWy9uU;44^(S>cPN1Hb~MhL*1-9osp`TwX(Qa zw7`IjO-;&^FADn%WA1vzjz@ zvrZSoxsmZLT33`&CWOaOL%p)Wi?M+OS||fkLeHT#N{b|udasx_Us1I)0)L%kV0-92 za%}7bHbz%di&UN@OU}%%`i7*(t1@!gotR{&T7hJW5rl6 z305HyZ^KVcJc?hcd_UzCi-n{@6-&5gYB~CyFQCM_{#BRrrI106Ek#K>efJqR<1 zj`qWnC_Yc;EBh=5&J9zmFks(}vg|T?EVH9iOlP%#-c1V$=`qUtrLAP)F(8{|pvdY! ztHBn@2DMAYRJ1_R0!zyR=SPQ@*8RTZZoW%U{p0_78}_&FJO%Qqt{WmgLHQTk#I-}z?hRDTz@ZTRh_Xv!sXPscm^@h6}AE?kui9LvG9 z0*2NQ@EGe2qvz-dn$}ZOjv&Y&fsQbxSf)52Uw=dMyxsrqA09*Psxq?HYs@*svMVs< zXP@-M^9+j7dmUO{3j>0uCH`_IEM zJRIlx2nM(>d9!3w71Mbw;2*2Ts*Tse)#D+c zKFb~ayhmP|J2(@x)7T`&>|MyEt*D$*@a()d&ZTLQ;$0UlP_#hN0t?Rqmpq`ZLD=7X z@Z0#(gMW^;fkW8W{_OOCiR^NM>Xb5~TPeYEMnCouI3EvZFfp1hNcR6tXPq9$WJR%4 z%GIq5GTO_ymP2HwtFx|;jXn2c-Eqo`Sa97{r5x-{VCRtuykUDKo<2B67q}$%(SE?= zyTQr6DCnA(g$i4#G}fu%SRxtlUCYJUnzlaunV-@9j!QX(Y;)qV6%%unh{w|$&o zZ9GnvyTI6KKsHA~aIc+u-Ha8(gJ(7rGA({jTfl;qWy{eU?xPpL1eyIlxGZj3i~u*w zMib|Xwd12ak2KR8*nVmyU>b}@+e zB+DrlO|ppcWt$_AuKswXckz0C&evnaIUrQ|Rv{gyrz~O4VmglnXt2!W6q1usjNv32 zQ+~=$76JA1SS`PqMC-cHCZIpBdwfC1T*5o$l5CF{<73p`YbI0G|{6lX)^|~1*5?N7G_5}8I?L^yu9c3`m1n#)x7t)YdjZMsy4<3<_OY;X@f?6}TwB}G56&uj~*zr4A29l`Jn9_xIPGKevxvjijQ@@cU+2&hxCjb){_)xp?8Jw0I~ z`!YKZv&?+#lz~Ze@*rFWPme=;a=b*Riu;0qEcfFE!ZCSD;Tb5)iS(GSB6h(?TfdGh{fl0t5Ob*@C z)A^mhdU^sdGnhdf4E_RoZmOzV_f&^_Pn|md?C}}qQs4EGM}oIXWEj%Kn&yH4Kbzi> zOgL$6mE@ptO1d|ff|^GWPy`eKMc_&ypoID)r0Yx9LSE@qR_<@^iX+D z!7TcRl88i;@VG75xLl?Srvg@uh9WrH$Z5rnBsNqz;N*ir1A~$pvYcF;lMi#9oUXdI zE*mQCsL~3(Bfz z^HBAGlImCO{q*FEyKv}aD|Q`fq98Ddo8GsA)3zfR=orP?yK9Wa%lR5tP@Q$YESKzf zMxKYWOZY(^OCI{_7IHfhilLkj@`qn(G5+q`e{>WP2C&=w&gDiuf0_!q7(F*@H(owM zJtNO+0;dj4!tzJ{WfTyILIQZeDx?N_7Hu8ROG(3#^YVJXCRsoNZ zI@WG7*vTKG;TJqLj?g$J=Uw4@EQ@hV?0HVO`l+DOG$#aPHi|`ptm}JiPIyTsOW1}| z?;6BhVpTQq3^L~mG@~M*2q*%Iz-2{13H4dvy>0nJkU->epYNhjRvx0lB*tK2KpO5F zjU*W;kwh-{%guRx1-)NEn7BZXtj9d%17VAnKNS`C!n9aGW9K7h(G89UnpT*a?(VtKg#-y?r1II|m%l z(GSZDdl93DcFUXl;RubQEISMSlf#HQhY;Ge4+CH6Moz{S_&%`~mL;V~yh+;^4n%m` zx{)>5i>9x9$8^}HzxWLDGOfrZ))5YPcs$u8Z(|sZM(~eMe;(g|@$2}b4}K1-YtFS5 zS%i=;m`nQkD|_(Wr{ADbFoN4YvYLuCPXFZR<@DihY`DM9ki&Cn>wT;+g*X4-Xk%cOkb|GLWi^wltS3 z<(1QyimCNTk9mn2bA+F#A3nQX3H8eby4I@*C;|%#0hvjdOHw_{or%M}M-Wbic@HH7 z4lQ3eXls6CrnH#*44XJ;s(K9fmWYMCkCb1I>k1gmU!1xDR67_8r2`i@Wp6ahtGp&>w8Skr6>Jn@&i z@vcAHh&b(Q^C&R&lQTCzXL3Iv)@Jl<6gwADmp8NqQI=)FJ?}2Wcc1NIU`^V|l%-VX z4l2(jFsaAMf|R9qkTfnS&4bs?$!{ES&hb02cW)54Y;>_cTE=A1{)K@z6Cz<>q<6VP z$4-(=r_!HOuTyD|Wp0DvA@s$j`_{X8kJI)@`PleFm~h>(PIz ziB>!T`UK--RH$e|L}7d8g0f?yI-fzsh5FZ z=|vY|fB2I)9csbv|NRH>oj-dKC3zLIy%qG>B|>2LktRIxs~uQ=SEaEivCBvkQ<&4X zvY&MEJOW)e^Isx?LEVn8}C1EWp8pDn1&!r@m>;q;+y z40Hzg(N5su-`fHkRgA0esD>OD#hpxJzualCD~R2{IEkfO%Mj=vW#GL8{^EDud$~`m z^(z93fFiJ95D-#b;#DL`5Dt&@((=X6-xXmD`PFR|gW3(O+5JI`426(w$&`Yc=74}G)m?TMA`!;S zVIWzn_|LPSgjAQM=>pax-DCPF)lp+Lr}{;*%5GDHf25y6!5A9(``6hKz$(T&$>9BT zbkq;$syNzC&=)_uJk`f@XybL2#Q>c~{kppH3%^(nv|0EpG4_RV;q_ckCHa9B#1itM z)iiemC_1ysz~dt21Lh8d=2Qd}0YzZpA)s@I&eJEAg>~5d^+Ejgr@ukvQ$AJZDJ88G zi}44p<1|&F%|J^hgDUpKNzyVfCT|oz$-tudWi~`<6JzJLn}oWM>0Z8Gem%^o$oyHP zB1fjZiO*w2NgnRsmW}7kF&T|sg?0IVjzY5d4tJbWm80ir>9u#*XX7+q{*zH1J7Of& zM_~)}Ax72u(1Ann#={KslO%Qw2*xP^mRvp0-l1pex)PoQvJt_kj$CeuYl*u3|Q@lZVZ<(1&JEMp9g6OF`DuV|FpG3Jx|GXge7;)Fk| zdZ-V=m+c_Y9>Hi;Hx9Y?p@TL(G5!<#2~8;kMA*amu?ojL5U_A2i_OK^Dr&?}fa6wDWT~*vi1AEVpa_ zA*`xeg@HgXP7g9LCS}%d9T=u3bN~}x0m_QPcx6Wjo7cZh_0A7aS#mdCZ~SwFilbOr`a!Cz7S9i= zgM$dkt^p+ZpkztPLueG#dBG91;JYKkxD77eb~%yc18kzJAGX)_Bfj$xm0;Z%9pnrE z3Y#Mg>>4@V&8H~(qsNB$I1phOs+_py;LV5KK7rStKKwi)41)EAU;HQbSpa>beHa)C zGXU&;hy>^OM$l{*jKIK95TEfMqw8PpOA|1&Zo&kX^(nAm>SS4DPw}r^ivU zB*!St9yz-RNQ0!dfA>ZW_&qrD@J=Z|nmwFtcU;4wp zzXcs9`$(2Y&AO26GC&}{?zet$HM&Upi}g#%l3eV0<|M=(X44}}jiUX=hnG^3H-Cjr zEF3pJ^I|b0NzR#(??s%!*9;Cezp2=H5L zHlcU47svZfB0IYnP8aVdct4P~`w%iU77LT8jWVcZ4_sEpY@xzAYDpj?qk!=;s6aO} zi;@gFN>M{1fe62Ujb#D(@_qY{q4{Jd?zm|ay}A+Kr+_ zG296c+!przbxw+!!3pA{Y3>LlXaSlWkvH4i%VLiW2Oa10UWoIzC&AwtO$z`4 zzJC+6E7hb3C<1dwAW5EPF()O|=h?gO+4N_Sm!$7x{|!ER=O5$Qoj<~#eD&Aq15Mi! z!`~+Hi&uM*>9b-RN%bx3b1*M1~=Y55XM`(Nx(5!W_?`&AI7-OV5aYS zpb9U(-o*#JIGTH2gvB19*ZOMg>G&KUEMiz!@yU6%c;RMuuA+Oo)rQ!aBvoIO`|}CP zfjHbG)_oi}5Y>lyrXpFMXgx!Joe}cpBN(v+F_aueug48vluGsBfO$}&GrBw?vmQ>1 zqx#*N#o(ry-YEb$Y5DTUkNgYk8OGk0r_tQI9e1wyEfi%go03mAE^qLk0?#;E zJ^2h0wDawsAIIIlzG3q2bJj(<*4IAFi1&6wW((O}wYJEp!v`2_F0U-*C4Nr9IqndG ze5gBUEK|ys=AnfOb5VYmuPA_vvl*6fs=uA8q?_Nn($pwqc{*j$r(cqg>5>X-7Tb7H_}Ji{z26125xZzpl|A)lmw+p%7Fh=-6w(iX9L z$;fq^wr+poh*8GBwDU0T*pzDTELH0vML-cy1Qrbf5_t0AW%uIg<2E$(HzDM-!|mcM zw=t4j6zC%iis`fYuq2}%CEgOw?6I0)rorGa{8XMx5F86_UlJm1=NGw@5#mvPhh$f7 zq7d1grRa5bA>kQ8#KKufR8)63+R$Zfhd-Q!JWDPdF&DfRZ;B{hGzee(g~%XvX=VxT zuDKnro!XAUfiAc`8SDqDCFCGU@o1Fyb+IUlyag!m6=GSz671>Pj}t>Di6?*Sc;juA zQFZpy5bv{79?fGaclL#!0~`7M73{bOg7zSZcu~725VQr*WN&~o>_(xrzzlx);~8*H z5@B5Y6<#|v$N*DZMj|xL837s(@t=(7$dihuxga1PRT-R=nI)R$j)1(wEVO*lboCKP zkgphR>%005(H1BIiok+FKneAW=n5gzCDoO!#O4*ZVaJhI5oT-}c@9Xl&~MWb$1d9- zHm~!eINwLLD6L(5AHbgGuVeLc2acYIVei2J)leDmduK>lsrh0P>=D!H9`Y> z>p&;vxSiCmhY=v*K4b}@hot+c#e+dE1P8