From c70e4de7b5688a63b669136fcc638da256ea2937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Mastrangelo?= Date: Tue, 9 Apr 2024 15:17:16 -0400 Subject: [PATCH 1/2] added documentation for assisted teleop feature --- .../api/api_endpoints/autonomy_api.mdx | 45 +++++++- .../api/api_endpoints/definitions.mdx | 33 ++++++ .../features/assisted_teleoperation.mdx | 101 ++++++++++++++++++ .../features/collision_avoidance.mdx | 2 +- docs_outdoornav_user_manual/release_notes.mdx | 37 ++++++- .../assisted_teleop_twist_mux.png | Bin 0 -> 56052 bytes 6 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 docs_outdoornav_user_manual/features/assisted_teleoperation.mdx create mode 100644 static/img/outdoornav_images/assisted_teleop_twist_mux.png diff --git a/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx b/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx index ee7a9147..7607edc5 100644 --- a/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx +++ b/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx @@ -16,6 +16,49 @@ The OutdoorNav software publishes to the topics in this section either all the time or while an autonomous navigation missions is running. They can be used to monitor the behaviour of OutdoorNav. + +#### /assisted_teleop/cmd_vel + +  **Message Type:** geometry_msgs/Twist + +  **Description:** The safe output velocity from the assisted teleop node +computes. If assisted teleop is enabled the UGV will use this velocity. + +#### /assisted_teleop/footprint + +  **Message Type:** geometry_msgs/Polygon + +  **Description:** The sfootprint that the assisted teleop node uses to compute +if it is in a collision state. + +#### /assisted_teleop/obstacle_map + +  **Message Type:** [clearpath_safety_msgs/ObstacleMap](definitions.mdx#msg-obstacle-map) + +  **Description:** The radial mapping of detected obstacles used to populate the joystick +on the OutdoorNav UI. + +#### /assisted_teleop/safe_path + +  **Message Type:** nav_msgs/Path + +  **Description:** The path used by assisted teleop to lookahead for collisions. + +#### /assisted_teleop/safety_footprints + +  **Message Type:** nav_msgs/Path + +  **Description:** Footprint sets used for detecting obstacles and slowing +down the robot to a standstill. The footprints are modular in size +according to the current velocity of the robot. + +#### /assisted_teleop/state + +  **Message Type:** [clearpath_safety_msgs/AssistedTeleopState](definitions.mdx#msg-assisted-teleop-state) + +  **Description:** The current state of the assisted teleop node including +any error conditions that may occur. + #### /control_selection/control_state   **Message Type:** [clearpath_control_msgs/ControlSelectionState](definitions.mdx#msg-control-selection-state) @@ -116,7 +159,7 @@ Unknown space that the robot uses to detect obstacles. #### /navigation/local_plan -  **Message Type:** nav_msgs/msg/Path +  **Message Type:** nav_msgs/Path   **Description:** The MPC local plan that the navigation uses to control the robot along the reference path. diff --git a/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx b/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx index 11eb314d..96b7bd89 100644 --- a/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx +++ b/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx @@ -588,6 +588,36 @@ uint8 trigger_type string message ``` +#### clearpath_safety_msgs/AssistedTeleopState.msg {#msg-assisted-teleop-state} + +``` +# Assisted teleoperation message indicating the current state of the protection + +uint8 STATE_ACTIVE = 0 +uint8 STATE_DISABLED = 1 +uint8 STATE_COLLISION_IMMINENT = 2 +uint8 STATE_STOPPED = 3 +uint8 STATE_COLLISION = 4 +uint8 STATE_ERROR = 5 +uint8 state + +uint8 ASSIST_ON = 100 +uint8 ASSIST_OFF_SERVICE = 101 +uint8 ASSIST_OFF_JOYSTICK_OVERRIDE = 102 +uint8 ASSIST_OFF_SENSOR_TIMEOUT = 103 +uint8 assist_off_trigger + +string error_message +``` + +#### clearpath_safety_msgs/ObstacleMap.msg {#msg-obstacle-map} + +``` +# Assisted teleoperation message indicating the threat level of obstacles surrounidng the platform + +float32[] threat_level +``` + #### clearpath_safety_msgs/WatchdogStatus.msg {#msg-safety-watchdog} ``` @@ -947,6 +977,9 @@ bool ok ``` # A list of UUIDs of items we want to delete string[] uuids + +# An optional ID of the parent object we're deleting from +string parent_id --- # A list of UUIDs that we were asked to delete, but failed to string[] failed_uuids diff --git a/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx b/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx new file mode 100644 index 00000000..8f87982c --- /dev/null +++ b/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx @@ -0,0 +1,101 @@ +--- +title: Assisted Teleoperation +sidebar_label: Assisted Teleoperation +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables will decrease system safety. It is recommended that users +only modify these parameters in consultation with [Clearpath Robotics Support](../support.mdx). + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + + +As of version 0.12.0, the OutdoorNav software contains an assisted teleoperation feature that will help users +teleoperate their UGV safely, without worry of colliding into obstacles. + +
+
+ +
Block Diagram of Assisted Teleoperation Twist Mux
+
+
+ + +The assisted teleoperation features is intended to work with on the following sources of velocity input: + +| Input source | Topic | +|--------------|--------| +| UI Joystick | `/ui_teleop/cmd_vel` | +| PS4 Controlller | `/bluetooth_teleop/cmd_vel` or `/joy_teleop/cmd_vel`| +| Logitech Controller | `/joy_teleop/cmd_vel` | + + +The Assisted teleop feature will **NOT** work on the following sources of velocity input: + +| Input source | Topic | +|--------------|-------| +| External Command | `/cmd_vel` | +| Keyboard Command | `/kb_teleop/cmd_vel` | +| Interactive Marker | `/twist_marker_server/cmd_vel` | + +The Assisted Teleoperation feature can be activated/disactivated according to your required application requirements. +This can be done by setting the **ENABLE_ASSISTED_TELEOP** environment variable in the +`/opt/onav//config/autonomy.env` file, where *onav_version* +is the currently running version of OutdoorNav. + +## Functionality + +The intended use for + +For visualization details of the assisted teleoperation feature, please consult the [UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) page. + + +### Enable/Disable from the UI + +From the OutdoorNav UI you are able to enable/disable the "Teleop Assist" by using the toggle that is located by the UI joystick. + +### Enable/Disable using Joystick + +To disable the "Teleop Assist" when driving the UGV with the PS4 or Logitech controllers, you will need to press and hold the following button: + +| Controller Type | Button | +|--------------|-------| +| PS4 controller | **O** | +| Logitech controller | **B** | + +### Error/Warnings + +OutdoorNav will throw warnings and display them on the UI related to the status of the assisted teleoperation feature. +Below are the errors/warnings you may see: + +| Error/Warning | Reason | +|---------------|--------| +| **"Error: Failed to communicate with the Assisted Teleop node"** | The assisted teleoperation node is not running or has crashed | +| **"Error: No sensors configured"** | The assisted teleoperation node is running but no sensors have been configured to be used as obstacle detection sources | +| **"Error: Invalid twist_mux configuration"** | The twists mux configuration has been modified and does not satisfy the requirements for safe operation under the requirements of assisted teleoperation | +| **"Error: Unknown platform type"** | The assisted teleoperation node cannot determine the type of platform you are on | +| **"WARNING: Assisted teleoperation OFF due to service"** | The UI toggle switch or the `/assisted_teleop/enable` service has disabled assited teloperation | +| **"WARNING: Assisted teleoperation OFF due to joystick override"** | The enable/disable button on the UGV remote joystick has been pressed | +| **"WARNING: Assisted teleoperation OFF due to sensor timeout"** | Communication has been lost between the assisted teloperation node and one of the configured 2D/3D detection sensors. | +| **"Warning: Robot is in a collision state and cannot be driven while assisted teleop is enabled. Please disable assisted teleop to recover."** | The robot is is a state where is is too close to an obstacle. This will mostly occur when you are at a charge dock but may also occur if you are driving/rotating in a tight space. You may need to disable the Teleop Assist to continue remote operation | + + +## Limitations + +The assisted teleoperation features has similar limitations to those of our collision avoidance features. +Performance degradation will be experiences in rain and/or snow conditions, as well as in tall grass environments. +The assisted teleoperation feature also only work if obstacles are detected by the 3D sensors. If obstacles appear +in any of the UGVs blind spots, the assisted teleoperation feature will not prevent collision with these obstacles. diff --git a/docs_outdoornav_user_manual/features/collision_avoidance.mdx b/docs_outdoornav_user_manual/features/collision_avoidance.mdx index e9a983d6..bec48f5f 100644 --- a/docs_outdoornav_user_manual/features/collision_avoidance.mdx +++ b/docs_outdoornav_user_manual/features/collision_avoidance.mdx @@ -9,7 +9,7 @@ toc_max_heading_level: 4 :::danger SAFETY WARNING Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. +only modify these parameters in consultation with [Clearpath Robotics Support](../support.mdx). ::: diff --git a/docs_outdoornav_user_manual/release_notes.mdx b/docs_outdoornav_user_manual/release_notes.mdx index 8638b24a..97c739d8 100644 --- a/docs_outdoornav_user_manual/release_notes.mdx +++ b/docs_outdoornav_user_manual/release_notes.mdx @@ -6,6 +6,41 @@ toc_min_heading_level: 2 toc_max_heading_level: 4 --- +## 0.12.0 + +### New Features +- Modified mission planning modes. Now includes: + - Map mode (which allows the user to create maps of an environment + and send mission using said map) + - Waypoint mode (which allows the user to create more direct mission + by placing waypoints directly on the Aerial overlay) +- Added an Assisted teleoperation feature to prevent robot collisions with + obstacles when it is being teleoperated. +- Added the upgrade command to the CLI tool. Customers can now upgrade their + software as long as they are eligible to be upgraded to the newest version. + Please contact [Support](./support.mdx) for more information. +- New visualization of status command in CLI tool +- Added a filebrowser extension to access/view the robot filesystem + +### API Features + +- Added new message definitions and service calls for the storage/editing of Maps + +### Bug Fixes + +- 1973: Fixed python “machineid” error during installation +- 2089: Fixed the no serial number on /platform/id topic +- 2169: Fixed the mission manager/scheduler still requesting during Teleop only mode + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect +- 2332: upgrading from 0.11 to 0.12.0 in teleoperation only configuration and Q62 + installed causes duplication of axis driver. Please contact [Support](./support.mdx) + if you run into this issue. +- 2344: Autonomy not going down during low-power mode + ## 0.11.0 ### New Features @@ -44,7 +79,7 @@ toc_max_heading_level: 4 ### API Features -- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api)) +- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)) - Mission.action added from_start and *start_waypoint_uuid* fields - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields - Message Definition changes diff --git a/static/img/outdoornav_images/assisted_teleop_twist_mux.png b/static/img/outdoornav_images/assisted_teleop_twist_mux.png new file mode 100644 index 0000000000000000000000000000000000000000..2d818b2889f7b1646326272fcc266193bfd0dc3e GIT binary patch literal 56052 zcmeEu_dnI||G!lk^|B*HWJXbhGO|J_BO$~|Lb57*kEoDQk(FJkjFX*pG_1^HZ<2NF zb&QVneLP98_xJnxd~V4dVKJlAmSk2&Y2T31NS_6k6`&>owu^+8_K6o^0+LbT(Q) zzv}eFv$1>pwdcxa#(0rNp?jzC_i>}uflZ^ik^!A6J{lh)GIkXJZg0(PXQ0ZxW>f7@#^nziyq+<^ z>}26Xi zjkl7{9Y9v(1_L$co)q!>V_EiE_&}>b(Ebr(D{}ZPJF_L(UrXM33cpoIn%Iv_YnDzH zH=Z@ad|_|sx6ffF=M3U6C?F3;zRGd)`r|(%6OriifHiW6acszs*T9tD?KqXl|5{^< z6MRW@cYPEvi&M0JohMuk{w}(6x(cx!y8!&5|5ZKhUuz*-$n|xB87AV}0=s~6vu?Pu zXRW6sunLBZnq$bRc@qh<%5l|i?DGj5FcAUc> zeoOQ09Le7)3xk^{a$p@uk!d+2&e7@gY;S1amdh{`mdwW2JI;Z8l}3;sG0pClpQ4w= zS#%RQ?0D7&tZAr_mec>QwYK5N<+ALY^dvG8a?e-fduFDo;f7h=%sFhj<5!IEN5-u* z?SHMs1q*)h)8!yy=LrrUtdMkp`MW)9UGjxhQ0m_K2l=2y6=tPddhVaUOCo_yqGsl6 zKo$Q*Xh8Zm6rfrAla$e)+OU?4X!Go`<#jDZhoJIrj64@kh!)MT6? zI}VKe-uEEvpauE4e&mxHBUn*iJ}c+HL+_1Z4W7}Ivf~qfcVXvo$N`eCy2HQs#lIuN z@~!sVh?snY-`5WFyNa+fWA*(BbyNGvGqyXfK%M}$%*nS76&OVb$^`@Z?Lc7-6%Z*CTyJ z_L&M#{wZ){lCh)M(Modd=Odf1e*2sV6KSw_oYOOfg9YhmOpk8H4U;(A z;t$JngM*%SKfm~jnbk4~7#3u#YaS7^j@HS#c|qb<48_jVUBGQJ_WkS2DkKfDqPeZ= zk`02GwcCcd<{_eX1AT#;D>J=J7oLgP^mLg#VI31AA8SgSD_zsL`1?(zJAQj@m^xi2 z{Z$ByXlxqApUG!3wUD4<(-CXmly?0(-J@%q}i%_R7y?p)Xxx1RrpBj5CD3;(- zf-_9MKb{?)&TT4ym0wK6Mpa|nS7*iCSEg@Besum7$SXm;ouU{#omDdXaB%(SBkJjT zktT=RiMs*iImExP*D5hId%KX#ouujM+9tD!*Y34%lI}n6y*?w(WM1B`Yse^R8?aGM zm`oS5Y~gYrjntbS4wEUMmf1Mtq=Z7vb?2s)tq!jqP%BP$aiZk8doq*OX|Dn`Q zLghuWK#TQ3mcI#R@7QXdhjS}H`d>b$;eheUkG%Zw_luO|8-v@MiOW-+O`iCf-a>}@ z=#x7Sm-Pb!QIMoc>`j)IH>qS2oPGq`NSA!vp!Lidg39>`+MQ6 zzxW_q;{O`X#>oELE_*@gPPEVXSvzc!@6{M#?(bz$eXMMoFOFy-%alFI3lV>m%4cFP z>1p~`-$dEAe~gq~suxMV?T@97yuf@AX6btdYKbS!{Ld)+*b>>V0Q_vpoUKhy-h)TX5RUR~dc~GV`LUexGE+Ra zh<0qG4mNV4I(u=?M#5@IN#U58g5KK$8-et^2B}IR!jfPnUDsBm8uC2`xvohr_3WL! zAGBOfIurK0T@PjBJm8vUliMIB<~VsBiI}bD{eHz&r6!8v9S$Nh)I%!2%4^T)_bgFQ z!>4+=(6+xP!HZytL^b+#$=T1Q=KHTFG5t+-zBiHF%WZX5_wN%mlFoDVe=<>sgP6_g z-1lH-KOum(Ap2Q$q?Kc5qOe6x4@iYQ_I^gfqxl+(%DEHB>b7 zK|CHQC~6eJ)okjl zE2W>|*_&gIGCM7Y^!=Z*Qv+osN2k{ohG+6x)z#L&&>und98fs0lR_uCAW11S|@iGWBDG&CzA%;6?+TP12p# z6;FQ!U=k&K8=qC}td*S|cE?Ay1qmBFOQ+=s|A=LJoR;X-V^C;2^YkFAM4MnSF69f3 zK@wAaT->U+Bjcf2uJgdzUNffLSEn1Qo}IO7shF;0TB=HJ@X@%~EZeZszgnKHgHBk@ z7?kjB2ztExBw2V8kx2`~-zTxt_`{PV=So|%Fob)`cltg*K#H9M@@ZWQ(%YroB2Ce( z_kHvSF|M1^_;CH|Q1b(15n3Fc0Z&d28NloxAXPqmAN@*q>Iyk{!xU z((AE%#XtKK3Nmhdz|UB#tn6O9@_v5Z44m*nXQrXJnJ`5d+S5JPxV&QP^CEGo0WUP{WD)*a(q#_ zx@PRkJ$G~KqmH?rv8B^$zpHd(^mAu1@9}uXhvBQ9W+RDW4H*wibF)o1+f^QJ>{RYh zoI|M6ki0FiS1Gfnk*^(Yp{SpP4B^~4+YlpC-3T7)gBlKI`ptCn)=HPD zxmn%e{xs)MRP%nS!wkkv8u4!|Dj)40KX#bA&lyX~z0g8VGtd3zW%M{85n~lwkmaqT zP+mn)J9(<)-PZlJ7GZ6bXEt|y{KyytzpnNZO)Wrf|zPsT!qw$>XYoEz(^ zwil|+y(YOt-Pm?x*g+_=Er^7T_Og7q0+}j9%gK603%thpA+k>S?XAsB=eYrjLfz@L zt&P?UC!5^4@+P&Ph>-BE~jCc{45e&s~RQeq?Ct~pRnbq2^Mj22v>&MVcB!D zjHv9;x~FrSWW?7e1w_oYQ3a=jjwA+&kvny9%n{1sofh?YleM&u?2ZqiHBqk1VGk*h z{fFjqA&g%#TU@ubTE2aO#kA^Kwn*do@8U7HtJ9_yjNLO`lF@Uj*wslhF{@YIlkKi- zo079NRO72bi4qv)tBO0mRDOi-<@b96wEo8I(;9)=E`csTDwXX(_XgR&1Ha+2~G>h)83m_5BidI#%}oKpb|15O=sGM;TPV zR!|Cgt_?lu$g|XT9|~Z)eP?@PNh2M{UBAAXUKxV^M4%O=Z{2l?6sQ&TS@!~^EPI0N zy8sMf3!0VqE^wdYGdXpFxd+%>z8q3HLZ}WoYT-%1XB*VU+L;H0%moW!?xXA=0-Z{g z(cO*i*VF)TxOcUwVy~;_i;xxb$LwFMI%?OoQ0ujgj*j{ah*{Z8$sA^7Gzw)9eE9S< zlzD~CsmjpFZT2a@Rla-8mJPH>;Sz`Iy>q6s6l1_gd$FVTGMOO1<`io10*BeyXp%Gm7(^ji`o3spx& zdN$ui8Q)WQeDFcSTkCr1)R%8X0264VuPMMr5xcESTSAAC9w~$xc&8qJFPKTlDUcAv z@3N$}nX?b+NPJxYhv^_C+n{5X@hVk&c+O+(zEyv5{$Mpp`V%bmLGD9{_wl`wWd@^n zVLaWBLOBUVqU~&t^d{>X)F@&sk^>%xcjF`jM12bt*)KxAY|?IBKE$NfTN}T1QA(sBP06*DEw#JjlZ z$#irjc;c*YGa0)iA3Am(TN^1b-qW$Hs(152fO}Ev z<`2R~yz@ZzS<|YufBF;8nm%TAY}3lRny**%(5!O>AcjoiGPi=t!-k*Hc4f;Qv$N(Q zO9&=#y0EXM@%-??lFgM~oAsGO=O&usIp;`CYN!y;`|9V`6YyuogbI{>D!IZR zzEEV`ENUs}cQTAxzA?_OBPA5r zj*JH<+@VY>;0!(g&FqG8p>4b*DSBy}fSL4y^7fs@YM;HvIvkpQwZ6&rbWbYJ5UrS) z$miWwhA3@6UT(K*x)%LS8FP@XJ6{PQ-HwjE=LVc2W~h{)r(o5=`}f!TV&tx@w&>#s52CvS7po7xK|w2QQq!6SE6a+I-$>> z6$?JO8#H{+BfuayB#jGH&NH8fLxU;I=e8GL)hP&?%o=%LFLAPQ-`-r!^xocTOhq3e z30SYQA9#25sP@yhrTCzO;Za6HcYCBXyWV2b{M{FOE_Z1pUhEIBa@(}b2;>@W?XUgl z{f&aR%L-jKCUzq4;3c9R+b7dr-yW_Cv6n|RQ!OsK4<(U%%B1^CK&q*t z$g{FQ(rz`I70<%@c%th!?=6qqlG&C<^J@x}aoA2SymOM=qy5=~!&HY)-S3FSnk`F4#ODN zzq=CiV$O=LrS;v_x>eD@btIgjjmxHA8QMO$-J6~o)N=*9U;czVO2|+37rtqkMX*nM zxYNa{?}4)6=ljW$V(dfcrn#c=gd0j0o>|z<0-N6AOPb`Hw>oGuAzu^IV-Imr_S+2( z)Yo119&j~pk}`D~jWl;2jKBWGgnz*y& z_KLbc0WeCKXeMUlfyO1=)DXRfRI}?+`@2w5oLlMk=A5@vHLLUI0)gxAe?C0Gpvxj= zefK4=h7v9f<9`>@TMe1-@|2_bkLf9N10<2@oVpj2q8ak2mqk$FBkh^3G2y7zjfa>w zJPisv4n>0i%Y6DTi{3o(ky?)A*AWgJfW!aQ@s}%}`oaj!xS3w}CzD4=G1NFLq*0zi zgdd_SU_drTdRx0d*52S$ZvBvnR zZ!3{)Di-rPPJ^D#&d+3>#nQvpQd0M+_B~OSk+urfUY96}z9*?bI9NxfIe} z(96><7af4%c~ed*5u5*eEUv_A74IJV2aA7-a0eG;lekFeDxa{qz3&I;r|~74&fDB; zx+}Zm^8-`oMq@vNz!fjT1g|qAN?6{z<&BDZgk3?mc_S%WB$^IKH>TPX^&X4Lz8yf- z-dW!B?EFt3QtQUo7qTq{#J|iBeV^&GZ*tt`uP=v~D%hHvvngpiyMroNu%m$Su*S2N)D zI1Wz1PfX!K;TgE`^-+U_!)43!MeKM{IUC_A=4h`cb-C!&8-M2Kv$>?VaD3cIMuw}F zL2u%?P%_KJR2s*mEPE$8-@^0RTvV~c2Q}kyMvCEqGWQaJNw3Xiy(qjo+u?p?^t0as zM>a1hthR5>m2b~B-r~QIIGb-bh$$;^(ioqlU&f_NyShjCYYgl8Vd9;7P9`34u=nYS z7qxmd!9!ejZZb$#QTRRJAU5s7#^ezvNLKqToGKYzPk7_7r4=40U)`i7^xW#mcdzB3 zPo(CloLJhWw?-~P@i^NXe&kP)t$LDp^zwyYw{8MphMtseKTW zdD)~-0<}`kb57;Ml3r%BoeRX2NNI7I?nZ8v^;BkqZWf*!@7OmPp{<@RfG%w@Qqg<; zvq>~rh^R?=^>zN;=5N_p$B&S#g5Gq;?6#(BFx%CDK-Jx(0E~bX@hDrfPRcqMUxtFP z&UkXoUJK_=Qf@!q*r*OIO=;ZmKeOUSW_3>TTGq#hKYb4v3}QSp zEnDCHmf9%d$BXg?%nrH?hs^G0H2Wn(z@@4szl{+_W`9isD$mI%gaqFyhu=Q+ao)7t zh@h6hvGcAqNlcyMU9;E6SsAO=iaX#m3qNpVqphy(W--l=Pz$O>7R8*}E%}oo=x<;= zie`$ZvSwLY{S?`}Tq|ULkI*yqps8($Ms8miekNiKb+2xrt&wx(M>^VTI}c52qajzq zp`aRi38^QHp6Yh*CzJ0=T;K7chXk(-pR_(zbf)Sit8-RPgU*1LcSp*dsQ0}=zc*KT z8|MiBxR>#5ZZL{7agVhsYrVbK{&A&MLuNE@Cme|0#eNy^Ts5-l`3$SB~BK2EwHU-%-TWg$Y0T}CfD1eHsRu7-L zaf=D%kuAM3|GmhTr3xVdiAc7{$vE*(4jx(T`c)a+%P^h$Dc$PZmS}_T*)e@#`eVZF z8d!UizU|Gt0}Tc51<=CH8d%Ry>Nj}3wghw3g-g`82vb6>F&p3HR{F)6zdr_2~fgJ#a67S)ijvaehHW_q%RzyfM;$~C{C|xFnHLq-3~4diDBQ}2_h0U zUqjoX%D~@iIlZ*VVt`?k^29RBRjC6t$v|Wund3A3M#Z@lEL)jI?3qYNcY0#hU4fp zi!z#qC|g*z(i0r8n`N32f+pc=4DH^!_EBs=f}R!pokHhT)ftup(LU~+q}J1QGau^xGvLsARqM=g`&}4C#Q$RYE?|I6vx1)Qv^>h*3uqMN z)Y}ps?LU+wXjJ@(d3O=32)Qx%xPI>!zU&kcJjp_~2%T0ZSW?e%?83u0`PSXSmtX&p zP{bhkvXs5sUudhIOf?Q0b(*j|Wf5Cw%N;G@_^};Ipn9I$);oKpDTS~k|B|~fr4V`4 zQj{KQU=uRM52F&jblua3_wTHCga^WxZBK~S9>EYUNb*((7o65OHPyGp@#NUAiY>8T z>z9J{c~m=|I00Lzaoo`0FaFF#5n-N;KDbd^fqu3DbYTvl`C};*M?_$J-xh%VQ9XJ@ zOM9d(yNqwkDZJusXw=lFo8rWqdJ1f;K+R&hE4`7mh5l>&RT=Z?Jr9}S(d-GptTo1p z)&*`x3g{Vxu}LFUsfxH$&(5H}KOy)%GF4IAi`_f)d{YqOLp)bwKR3-`)@@4`YXwqo z8IK{SDd`--VDA?YQQmWm4d}|Zt0y6U<%F_I77IxMx6<)ZM_`-%1I5mw|5Js648i^y zeDU{8OS!lA6jasgDZ&c^Z~l;w$q4D_^JoYU|mU3k^D}~7ueWL>+T$VwtfA`raVP5@{pKqM@CEtn{>}VkPpVY z(bqp*!!wbJAWjh;2a_qX6jzG3B+)Z+j8waXhbE(oQSYV+lBf`z*l9RK{IEoXO<{k> z*4l8Gto$*i(*`4S?90>Lt&?pZhTSI@3p~JO^<}h=G})#BP9?pS#P3!Rea`YlyvwgZ zIZ?ygk`RAWU6+hXU9yojiTk1gaLnw-;MoDaCeTa^T5ltrDH0Qmy?&40XMU!&8y@A5 zmY)ndtn<^KzFSYUyj=kj2Z>Q4{P@D2djjiAO)@i35a&brML3d`PJcN0cvIu*PtuI1 zSZW%ct8z&ZuwhI#xP4TI&u1eK=?P#mz8fa9<#JM=@e0E7$f_f56H&x$txJCSj)2sH zAC=%I<>Q{`hULqz#0c9C6!GDya_Sxv(-OLq)DvlHY#^Ndnn^2Hrd#(0B+|&fK~(J4 z7oR?{^Qnka(d?;M_Fa|b801a#$T@UWtR7sofj~b#xyR@4I!+8z6*6cXTS*X@k6{ z`9{&o+pu4G2+bd0WD6v@Q`HfRE?A~5q#Mua3yP=l6Rp(%C5akBQfIyYg?P407Wy<( zM~25+kYl@njvom?k(qVLzU&RRqCh8h+xO=q`_v_e7ViJUqHj z``wiXgG*wU@UC)BbU5DE_x&bbrzJE;BjSVfn?*UE(90mfzQP|7Zm)F9p!h3BFp) zl+lrCSQ0{RbNM|317ULe2XCSSMFayQd$JJ6X`ynaK=!$3rRR{&^XlvK%@p$pqW8s@ zG*do+QVgIEUaWL7y5O7)g{|un2uTk2LVIch0u0-O`?@E#Yuipe?wJq2-@#m=H(+0O z#*NLhUFW**32p?n?i@of=+fV}Q@rwAPc)U65{z5Q0mtqFT-8G7|1ZCa8Kw3=NmVQl6hN8`%YZYR{Bje4zz z$ zH8Lg!LVLPiA)-f-UhSi&`rbKC+28rx|H*N$u0Yp(j_ko3LJj7&3bH1P04g<;Ct$rN zKcu~0HB{u-Mxf;No13^87pL2AFQjh*Z)^zJ*T^V8-T%=*yKe%vGq`}ar3_s;=vnd_I!^rVuH&-I6k_w^psWcUJVgIOvsxn#8c zI3iJa-lV#*V;8!GMO`Lcu42ZVtf+I5kRiHO2EDg$=y+~{yLACx)~D~PfvdJ7-+)3o zJ9mpRt@FWS7pLO7D-Q6v#4v(!+BFun^JbX=jjLha_pic5(5r39IhmTRQ;&@ z+AGac+itP+Gr;!nWpAhSM|7G&&IL%dmwSL*V>d@?La>v2{wDq|on}q3|J%ke_aDEc zlF>9y0S*Gh373-mKaDr9_+xVLg;t%7Ul+s<;fosIx~CL!J=_<7$r65Xz}VQ`HJa-1 z=)rL2(|q{+Y<9bHx~U)Qtf=cKlZjgHr27QGm_PIFk8}ycM3H`>CnSg)EmvF~-_+rH z>Uf1C!KhRjrLs}VrB2u0L)I+n@oSvIQ{zi@u$$s>hpCQ+Wi3ryCmJ=Vc%F|^R%n7> zKrhQdi;{910oC+{Wc;SnN=dKAp37z$J$=r;Qzh~asiGjXqz3%}m=M#t>@c9)=rOQfAP znWeCWz<-4RQG0}L%9Vpa(5s{;EDG1X;;(+X>M%OETB_58e}3tsvsQHJ1DumN3T^HeFOxbixKdm(D_Hg40_9H@GsSn+2&$zj5V1NSa<7h7I4ZajGS64D;*4=r;$w-;k zH!Ivzk&N$&Ph-76U{dKXeu?ksJ|cdI6^x#XYg4Fzv2?znL^{&LRe~3%Fa*8hNShS6 zbP=RE9{Q^QRS5*ip5poxS*p=YOt(7FKn!T6qRe~NOi~-$_nr&$sw!gaM^Ne;(IPc` zH0P&Ibz-x)w%=D2WH4DPiCQlKK?V_A2S;iWpU%jI9Dj6 zZdUl*rCMBbs*#dwzahG$Z`nK0G+%(anCyL)pZ3`H6uNwXl~eO1AAUJMM#Ms*sVJ28 z?y&4Plyg^gVpOM&=i(iKa-SF76SWf3!vQ_jRG$6k<^kcX982300?1MzC_X_4?>jkR zrg@aC=SDd1KpjPRhBC^=N<<-!H8!!aJ-9Gb9JdYD$RB5=1`mKPo;|T!HHTPU=DCi# z5&0WgS-q)-7*mLb<}O{BZ4@LU{0v-{!?` zLbj$?T`hMe~4$gg8F!Y17vBg^`mxcj$fOv5T%w0gyf{V{geumA1L$0_)Ra3Ii}vTf6Bp5c>r zU&%w{0X%E23+fH^^J*ce;>4G~B}Ug+&trGbUu|((c!6u>2btNn=Pl~(jQ24#zPJ3h!Z{S!3`<=e#Clq4iO=ULLDpyYkJB z*mIWGaO;6t0`2)J^gLJCFX+n8MQrORedeMNR0uOkJm|a9eQ0H#BIsTq9bkincbk7L z1H#0bcz3RCucZgIB=`Ns3*%kDj((FU#fDN1(HXRU_BBbo-+jQ{zmAQTOZh9EW+roW`3Txmuf}j)lIjA?`#u8s_BQHVYkQMCJoBO zz7dk$Gpdhl7sWGZoB_2fXg(vLn{gK)f5#KvU!WwL<+Z%*ulC}nFrInk2hH8Y{#(?E zN$+3rLC2j^@qQOkgzj>d?gmi)?O8^>P-QQ5aUt4UvaLvv-hdG4P;$e`Sf-&DC%&AM z3H59_c>e2HwzA)s_p?z%@`FMrC-)Gu@O3goeu%K$aWyNwc6Ly?WEwejn-z?{GOXgM z4tBoh^!Weon(Fj7fKQ!)7PJ7g5>w5oPaG%PeiU@w4h|WsfHBPfpT>wj{~!gC`Z`U# zjWU3~Dfl&&(7=b7BfAH`i?`pO-s-qJS5o(Rbv z0byH0xUFW!W2JNU2Zhoj7a$^-m-pQ7sTi?wsdlc=#kyPzw!BRGSKyZ{9L-5^Mrt%|UE%jG`O9QAc=E@HwC!6IXlO`yC}ewq2nytXK3~yHF-H7rn$CyqVl%2x9bxx zrs;+7)EC!oA?{Zr^ zT8?rt;cb5nG{MRP6<2m)IzTl25fjp6h4Am@19$=hFJ80&k>o>FPk(gGZy!~LLH@l; z%1!9TyP<`(X?w4QKwdFh2%4=w)03YGvCwJ2b-ZW=xLm6P$L`A}lPiU>*)+t77lI4e z;5|qGSp!te6qP7$m(UMgxtQ06OY2%5M>5XeX{JYisv{GD2(ydb)J?Ut1bq-aB?6?P zJQf0U(8m3F+4t*C7j_|9l*zjrBIfmHScNqGA1yMx25q0y_e0{JYy3cj+s@`beRh55 z$#Lt|erM+*QVBpF-smGM?B5diKPnB$bJ5kC(W#yy_4x!~I zJ2HN$`8LMQ+D9e102S|*>=m-h4 z5Zsyc3IU}OyInyp38}+W9_1Ku4B^4et! zu&DUX9s#;e;2j=rpH{^Qd`OVT0n^ACrLz5$GxYv)XO_`a&q~gC9qC*EmdRNOHGqG2 zHLh5U>tk61$tEgc6>!rw&$;)hp*ecSu9b*#b_;|Glj)c5TYZ;h+kgfVlXfToQ9-u9 zJdXxfznF{;@rR(%88BfbA{$3yO!kF>_w_9hQaH^_IT3}$_q3RQ|3`BAQ}ZvrA8bR$ zSDy)1KxM}v_K(8fO9WJ8E(_|1+}hTFDr6UB=kPG-{Ds`!fIC?w&A1I?H1AhIttkr2 z@*it?TJr<$bKQudrg3J9vdmBZynZs8oK)zJcTb)rB9tAE8?;P|KOC$yA4&yaQ)`-r za~##_QntYTYs>{T-3=JrQHE}B|-U*RbDVyTCk6fQmS$A-N(i8;KN z@l@!Z#%f-rQ)mfO3_+O;b*Ox&`1*)a5>z6H@QH`R2<|jRxuR6Y025s5dKN@akf;`- zJw?6#`hq>>)%UA#kmLNbRY8W}*W+$%b5|i5Fs_xyl8TzV(&)dJU_mUXB2Vs7N&l2Z#@~w*rH0{477{8co#7wQ@gQu# z$#zVh9@rn0m9M=h!5E(jC~RT>IOVF|mKPgW?h0h0l8-^mE^xuh=&?7WrxyTb z#Z6`au5Y%j05s^JeU0Spy2(LH+I=v(}yiAqY#v7ebc8b6v#d z`}+k5fjoG}{`ki4Ou7vB=3Lhq2ZV%5gXqRiJ}~wu8V;45_TFAcWy_dGa-H-NsOs_0F+W} zBNn;2h*|G+6zVCP?aEF)#3t3XYA>hf0d?gxh({kfw-wxL=f{nyS!;M&9dz@hslIYJ zfE=Mm_2b-m##K=?HD)AQ^dDmi6#p2{z-SopnYAyQy4)59_Y^5s08?wQ{XDea3XtJIc~sNXjW2ME&k8!5`^}`F zA&6mxLc{3?cT|__czl#lH=DdnYdHr_NCCpp5t6Io7p};zW>41N06t?H(qdyVwln`U zqR{g`xUAf4M-hyjgIg~p;^G%CHO(FKdk>OTzY{jH>^-~2&wRfiU;{%=z0F%?f@9iZ z+eFiFJo)$u(=!p_bn`C?aS|-?)UB>L(9PU{3d@wjSong&97`1R&JvPoB@gp^6GHs3 zP5T`Q{=kI(gtpUNF$C`7=P!S01qbhGqFVXq5G204SH8;1tI2WPT7&0~+1PgGP zQ6TF2SbnE*?r2?9$(yrC|A~ZlSCt495L}2vb3{!l6+PjusxIQSu|{{KVzB*VZ7o-N zxCmoFA#%4Av$3ew>L>~~=A4Hn;;eH5*S$>GJh?NA;0l6~xncg>yTl6qlNh zCyyt%Hy#!;wg$<1day0FtE_<04=wV*&1tr;NX!j?7s1~UbuEOH!lLjCi~+wUq!PZ3 zIXpqvZv0-F>9IoR>!Cc`jVx2&NV61@71bi;ta!h}%cJ9fh#a?AZ zOegT7v%riNhfp-AoG?sqqA&E}+*$Y1}m4SqHR}6BT7ay!gVd+f>f= zayGzvR#Gg&tEiV>qvY|KeL700jnH5}T)Md7{UnisWd7c3+G)D4Q$;3A_m|-&}`*W>X(m zVIox&xO`q9Ssgl)zOup~`Ece{e=i^ujZ)%OBl#~-m-Tc|y$F@W1szp926s)xd7{g< zr`Y-t$j~WX(%I=Y!Xg&J#pX&tABPz0;9_Nu4cpyki!D}OZjEtaRhe_HD%)JsX&Q;M zVy6Z?maeu|g#@9J(Z$8F7ND`T-3VgWyr!hcc2`?ji}crU^?veA&8=vW_h;zCpJ0@! zbBDffA2pLpE}z4g7Z*kH?r&1T*fJ4cNECtV`8wice z_fV`R)Trq95pbc_>sP%?$~oF_*)|;^Xwj1BYxx)C%K_w3udj1ImKcCaaecz-bl-T3 zmQ$$>^05q(a=Mm>F{sp|^OgprsRHicD+y#PE`h&6QhOzBHO^ znU7K8DdAVq!Z1yC_3Q<=e?Jy;Oi@J z38su!AtkNBRh@qt$vAIZ~7pK zCQrF!8S`iQFL_)o7WFb~-RCz~8H-=8{)WCl=fjIL*NjW)m0r#H?o@6CY%awvBwFjP zUk8$rJLn-NnJ?qWaR-aZ(Ece>6~-rBlm_X`BvR2LQxailJ|YU!c#bIY>n|=a&hhzl zzA9~8e8qc>VN1}igsk||CovYT9`11NVs4E0_NFtF6Z#O5**l>txT#Ym@{^3e(B8`@ zQZ?}i<2{XEOme3^B=IOqWRh-j@n?F%S}ACzW;cq*o1<_#@5?Ll8oRCRQh*<|~%<6tF~{VDk)VmmCyQ zk1b)Ic>gF!OcdeM6Khn{1j#6A_^#jtYL&$upeOJq{FokmpMJ>&@&S2f$kgBT3vGq$ z-V1!}{d_8tOKTt(kqDS7X4pJIH6KJnEJ3d`|0bd)6u6=9)oJas9k z@vDGUS&)BzR;TtgY4maKq1GcV+-t4lAQw*vX6D1e>e_9HDF>r2>loIuCf#wC_?~rY zIrilwp9e~DXlo#ZM8Yk}O9$dog`b*J>w)9PYjxM-fzjJx0e!pj*A2a+Qj4Q~{g0&)6040o6Q&TqB7eg!h0(s>NJ$%e?qkuUZL&?bDYWKxuJ0O6D3 zK^(dNBFWt=66;wnz#VdXu4{UcagVq1TmneN=+`AhLoR-NdxG;F*(0lE4Pk3V5qF?m zNJ)<;&^+Y?QzVKD2@xkkeP}LvFIsv%qx-`62=~PLszKYO3*Z@i*&EBLRn%c#|81B_ z@R4fEwPx`?BOd8-YQ0hltC}*MZU?dcff{`3yH3$j{S|U39^9d7}b=08-cf_%)A)jzQ*toeQ=#}P#5<( z>(f%uw*|(3jBh^2>T$_2t7TDo+VxeQUC!b?$mv`~25;a>f{vM-TI$xjIJv`u=Xx!U z=Mt0FLqqjMxig%9F38I}iVLBzY|Q@0W@NAFzkHO~sPaRqUafM92WxGsR>UrMc4@DY z{?DVl*TC1DC*~$=&pg3jNwM{wqWua0e$dFj)6<-o6uKuP^tR3|IpMUtOxu{r{XHm> zOi5P!{yBIL3(CEiE+6Rcr~%(dPV8~}X(>g>@XbI3?bJtvN3tt}nF>!@ zQw|7KU&2Jyi`*-JKYn*khVbLl<*_5v&smm|esi0Czmq`m{qy%T`@2Rnw{MPyrw^OY zM3v57SCHRE#Cf>;-*-x|hu4vDtsw;tNa_y5Ta^@)u73X6tnrXzK3WKg`wOC${APZ#{~KY( zIRG!AcuudfNAJB}T?TD&%*D_PW6Y~seIi~xR6&ZxV|8mm#`ImQ53^1?!fBFqAL0{j+VfPIVG&Ov_Z`Gm*ps3V5w8*O6E8J> zE~(QzQ=uVzy?;edU|~f??|5DuGw};=9)!*UO5}IytW~n+pZBDMw~_(6WQG9DR6?a# zvko*w)#porv6>BeLn&24AK5mqps5G~2}Fe+pX8Budnw}%l)kz9&yH@Foko~M;-%1n zD^f{_5V#|6(tZSRJ{R7S^m)Q1&|fXqkOz|}u(6TzGzGgV={#u$U5l&vE9VM#1so@y z6H^hxwu_jt%aNEce3WnltP6Q1l&7^=9b6k`mA(ObTgexiU=uQnqaMp=7S+sNY0(ot zeEJEmBVf0H<K_h%SRvTt11m4Qq!Dt5>QjTj+z{SRt`nS7UiEqZO=S!I7O z8U{<)z?w6l6qlFzt`<7`=Kyo?((oh~L#c$kMsO^y3wf;zbVq?U*_DSei4?`Rk>88| zUw&@@43S~}y-3iZeg#g%w3rSn0QE=V(n`7%T-L}&i(7YLxz=)ZzEud3Lo>t9*8*bn za1$Wm{kH4x%LfNucMmX$s7#-IA`Z&+;b^m_X@4D{$@#t~>aX!wo<2XK__jtXY z>vf9-`-?FC1K8|bKzYoD{Z&?OjbtYx=zJ1E11EOobDES_dHAL49l>5cCPH`8x(=}U z*U-MW!5*;tM2Q~%)?pgjbN}k@onOf&pbr&kjV%GJ67pD|Rs%LpU3Eu8a$P}UJ~Ji{ zgth5r44l4lvT~R+a?zqdMV$q1iVb_E<`3pSi_sb1j3PI+g{lO6#v=$n4fyd32A3{5 znxij5Eaxcem@7dm|5oJ^+&wRV*d@nZFmZN4QkRhXP|RP5s1Fgh_7|Emv6X{Ea0Eaw z2XIIx?`7*1rrLuxIi2+)e1~WMf8U|*=&%}iJ42*ou8c(BO;CT*vQ>gp`X1QqjAsvu zVujX80*FvDgdv~6^kNB-icINglN`!!{~YrEQIv$GTE-BgGv?IH@Dwb#)pmO(EEi01 zG}I^=AG=2oq5!uIvVQGDLtp%RnTV;vlJSG)T=dDTdJ;Gz_PXW(glcPch1<6n;#~Nz z=6!=z$Nhg;b*GeMt&mN3N#85*TI`B+&zSGM$u6+PLEt4kR>0J*2m2Jp^67P)2PRVj zq@@;2h(bHtj{N`pNSuqR<6p6H_1n?Gf<&PNucHQ=!YilNSGn7G9_*+CI3- zUDyX+D6>w<%`iAAes;1w%GvBu6C5(IN{K6Ta$j@=9AU*KU;TB_Aal%<4~0F-@SMu- z_a7i0SR`lx5gg0gCcrzvr}!W5B;H~SLcrR9nU=5}C`dsZSLtN9s=JSXJ9`RfAfVM_ zJt!9hin5Y{{c0TlhsQeIRDaKxlY%CC2+T&8ZaBWZY*g8WFk&+Dq@T{CWVDj6p7swX zgx#46_8n2DDFwqSmq)cucR${3*O2~eiLCn37p4g{II}6*#to(avFe@ksv%co2nmt% z0$ceqU}k!u~aY7y@OCmD$jYR{VgmTgsUCCdA>m{T_0tUZ$bM5t}gyo1?2Y zRLpQ2YbNjn93BP&594?Ece__da|oE>Wy!C+8$VkmOv`L^cfvvn)T<_6Trvu(5#duC zv^fhd0mt7v3bik_+_=09;mHONDmV4T@M4yUWEvz?xFwsz4|dhQ zh-mHd>={ncfqTj8Kj`l-gFzC3%6fPT;2D;}F( ze_YrGzMz7t1zyCXKX$QK|I>UX8#}lX5RLdEcp)SP_7F69xSy^}DMA`&J>aLhSjc^8 zS41+7ne3`RBr{#SCi076bLMAazH!oke7wNJ=cnKI8V&~L`YL;7nARD7BA4wyh*dXP z`bKzwEq?z1Ze4pQV;F~vjb6(ONn zO|XpE9B%Li$4RaYlWBDqlEv*qiZWMl`n=9AO?+c8&ckagFR=gZcL&n?Vt{R z+O0?{=AU;I`d*aQvJgR8hLp>r!x2PT<&N!v$`WF2kUO?E6lI5>PN|DyKs-!_|8X|x zw1l!oaqsY9T^nVSE?rErD+du@b?r6faBVT#Sg-WVtt_hs3f)Pod~L2Nf(WU8yWy)> z4t%TU7$L(cR$ZYw?jeq$d~ZedWXpTE0FZl+1#WxQ$;70(JR_Z@kdgVNgxO11V1U{AZ^jxc_k2y@VN}aEfK%jlE$(WWU&|-x$Mg^tG_|;N|P^8rD zZ-j0>R2x-oCh(*=buOYoxP%#G}AYf3tyjAKkHkdn)aTs0h$|g3vT>b;kyNnhd$sFFgHS3E{h@^?erqH#hc53`Wz`Y9f zA&+pBGXS@4NL(&Rp6`*%y+2l+Gl2vcu76*xpz_=Km8V7KAydU3Oyf5d3=(r7%7#uw*ERnO$N!I_j>C~+|_)| z^7{i+L|tXJdRA&fnn|?ldOV&LH0-Qc*R!Zg+{4^jNyA0adVWAK3KaVPMizHzLrx4i z#I5rdzf9bSlEh^{t#x7KDqJKH5b~M|&U{J!!3`hn+w<`3k{sIiKKCO+Xtd}-Dcmfs z?$>+8%FmNG;+f?16{`*x)%6;g4Y20`@n^hS9rEh^{MpJ7$r*7<6D^Dv%d9w`;MeR7 z^}`KuFVye7x|(g1l-+eWsyl;SI^~xijK%92e8&GXw4;!e8VcY%eU(D0^Lc9l@n7>` zn`u4*^}^>{C+iG$o>Sn~lQ_f+m{~5Fx_mHVI;HplHBUYN7VW&@+e}+baYgWxv~P^! zR;-t71uu8-)JalFG7z!+e5>Hi8#IS;KEAb6^aKkd|j)Z?bFFnuwMh0NZq?Tv1xLb=r{T~Sg~7q&cyDvdfn&Wj6i&^ zk-*8iMbh-n)%Gs3F0p-aS1Q!z@2K+89=q?vrK0w2hqqoQwz+@9YP>zCCZnjg#Di10 zl*IekGvvm9v;a82@|)23eFfFw|J(Sj;zbTKy+13M+2YCtV*$9+IXbJs4b`w-PCGO{&LUxy**aGp5yv4j)$UUWEY=t)iWjL8{iCV=$n~|Q#L$M zq2hb;B?Q;q%mP#;Zb_n^#VowB-5H2ZBIeFdB@VpRnJy zPBzbU&6#pLV8OEOEDBU`u@?haD6=0G@9(#yUn*?TMkV%SE=9HTa@Z;XE^%vdOw)4; zPl`^-H%A>vL}IB_$Z05n&|B!VdwNJbDv15#yY7le1UiF`2}+1k5O_MUIA&a z-$BIwj+?QF3N#kf!kKl7!?L}rwumR=CcLDpA5k)`@am7SL;MRI4{ctc$8vVZQa6Avu(N<@v%aKU@u{mJz9 z$sk3`2BFvFpK*Gsf`ZLK6HY6S3`j(u^|soht|}<~LoqBKS#WfQ2TNjWI<2!?*->mO zuu;!vmMXbnaz3Cz;X{O;b!thR=t)b#F;XT!6B9m&H21lL zTZO(*T3^xbzBQcCw`y;1X`|CWQq((}L6ONT&d1N8z8`Qu;2-7A3H%Gkh@O@Ek8TD6 z)J-tP-3-bO$A>@}GH3i>S#u9YOzTWoZa(~YcjjCrq_@`kY@RboatrD0Ih~zG!I_>L zZf4As%VzYmA|qVdW0U$XhbG7)Tlnm8FW#erP07^3*Qb?v4yw;@P<;{}oD~$S3gyRR zc+gem2yr|uUoxG|PDX!(1hCT~6Wj$Z0GTNYYcZ3F;j<|vY^@gZX|_Eb>&sK4Eo~JP zba@lfq3sfx@xg`tLnZRz@65$nKUlMmZKR{~e_Ca*DOM5RAvfOGUZm60KRzD`{_FYp z4=`5ULeUkCANV|;9lM3P*z^iMTUptqF{5(IxSdXE1@fa4StmG>?-Ya}PPKO$KfmAB zCyLSPD`q)J7Su1QpV82cprmF{?2&Y7RJ(+yXngGrPwn~v@?$pv8vVaOQ&AlFKObk% zbDL-f+#)&*U_2Be(hc_J_|v=01OI+sKs^2kY0tswZk(aV!FF(0`y2}oH2wq>|Fs1R2gUrTP=w49( zOvC(NkgNa34cM%GAKSb5dX-1#voyqj>0_>4OJvN_e^}MoGs;xcO0`%0vP}DG8g~)T z@?zRw<)hVGHQ{lNI@j+~-G!v!Nrw+~kc_#f$F#9)Rf_qk#WC`$EOlJ6DT2WkVUnw< z70vc2ximfjFlY57;V(`J^RkKREQEA$e?j1N=<(fsKquZDZxYe=zs6r=lVwA7SKV;+ zEXq`!x?IM6?S8zvR`(g_o9?E18SPV|^rdE$XkXFnUr6@4|Grnj(Y`%q?xkw+N^M7q zL}b3vXXojRiy@@ZeEMAczkf-UnKbYQHa;*J2vv{pB}s5aO{ z$tn6H;?#$uz;&8!FMfjpNj)s6*xFvCRV*FW%)cPxC=V5+_&NSY62LDcz@ivB)f-n) zb=hf|(8+!;=;K=&``$@nBEGgXQSiFHSRd2iiaH z*6~bD{S*8AOtynuAMEzakRMm>IElKx?d~s_o+sopc8jU0t{rmLu7&#@;I@QUHr57m zbz2Wi2UZ_RgS@`I%DACLkeWNWTQiWc69V21kQ}FatHsFM<+%2qfOm%fqQL!x-1`TR z1=>1L*DwJbnLU7-MoWukxRE^dy_@B8_8PGSnsYmst_z5?lw>xa{OgMV-7NnfYmd3; zVf)38(9Qb*@=)OBvGN#nhw+$#`>U?J1miNVyCU*ARde-DVq&L>ZK2Oko~%I-ir)u0nOny# zwN)$7T-n9x-WA>moUwtQTZj0bl#(`PQteZapiw6gB5ft0|Jt|9^9uRU^8Iml`U5F& zzBS))TErj6f4-Sp$R`YXMi?Z^LCO4R3=#`$VHuTzg`zKn^=4W-VktmiY5|YOo;@bp z%hw%7!EOJ6AinHrWecrBu&Hp>-IOjQu*)9avfI?~rBFdco`~T32Nq78w0sJfUlEA2 z+WQ>g0r=Afh_1{Ygzyz4s9kZcEvG}JsZc2#tNy^+;YPx+IoIj7DRUDE9RwHGm>r<9 z{Q%h|C*4(t0VZ8bL#5%Oal`CbwOf^#88wU=hSukHjx0GD9`YyXn!ivWFJl9O&?B@! zbJxq|>GbAmrmKxosgia8&WE1e6#5&7kK#;65=Cyz3fAqHtn?nt~N1Hh+G5lwV~ zQ}0wa1fwFw8Pc*M`3lFgFaWO8@b>hA6hq_KGok0%o&Jb#=-2@-cuna-vTMJ=Q^2|3 zYh;*zBpIJYVnNHopHd3fPYpq8lO?UOOZ4UHrIObISV2gW8pwkFzD++*98!3W)85-3 zv1+FRd0z4T52TigE~E&V1%y_~EdkOz=Fp9gWI3rtdGx4q4at*A{fUV8255x7@ayw4 zBjBX`$ndnu9AsAolKRtuFIz=g`E@S0zJGo1Cy~3xw0U08oopD)k>ayGBybdHYV_{* z;R`OQc;Nz74B)eKPa%eQ1PONmlhP-|@|1G;mEN+(TkgFIYK&zXvTZVxg*Fk$+K%IZLCG*o^g9%&#a1Us6A& z8?pFICT1CjQ7i2sF}ni}uY&Im$ar8w4_7$S1=CHjs_*d?WeF7E4|6|3168hfx^isX zH+j8WIpP>o9$c&{<~ImzHH=tZlgS6&BamVAJ)Degs&Q0S*;*MJ3BIF16^id@1Ly>0 z5up`ol{`I2sX*D0Ex~|{`G*0-zCTOzSL4; z-#q$GYibuMjmr+bX#gQR;WdB}q32lpvE=V!N!I(jidKAvz#15M;|EL@G25 z7?P34`t__6SHP^DR~J+HO&i?7=?U zy(uIVD%?QSLegX7&mEZyS#RrS+-9jVk}PD+&OWA*C&SrI`_o!{`g;1(AgD7|X-*!@ zUrLpCJ$P{emG=EY!{KD7v0nVu=OBAlb4zspOqQ;Q_M;BK`X8+a=iBkJC-~QexhpzCCgQt zUT)i=lJ|(U?qE}lqNd9aHemAg3x+TjCS}40Qc^}&32kap`B#`BToE~i?V$$W2K;(3 z_hZ3A`5ETgA%SQ03eU{XFt|k7o+Ll*?)yA_ucm`Mj8L2P+~7%#8+v(`Xzt;DjMz%1k?BDQiPzd&fp z%CGN2^kQXBya^mIx0KQ&*IrykjdJ}`7`(#Be}V-&PeQ^;w`{Re%pB#=x0ST5BTd3t z#P0m;`$Zb#AbK4^4E3@@zm13du^ex5~h1W$VB?=^l(3I-}1p_XJZ;Q@GFU@h}AYROEUUvHlx zc+me4eGo$$P~?OvBadbGws69a6eT%9C&R{VKnOpdk|rW6!5Y6|1=P?|TtC;bthlvI zwhi)FewvA8uCx=WF7O5Bt{Y=yzzOD1{Iw!fYIk^DFIamqJiJQ)EQSwYLmM6n}xAphdd`^C~uz* zW#^}QK!Hodg|C5B$+~gh67QwhR}}t}sPC+)rj6nwtk%EaI+%L(40kGL7%gqj!W#G; zpOq9N7=1#hFvpJqS0_ql%-GHaAIK9FeV9`^)Fdxev$6OPB-y_Z9r zhqd%}7x`6+VY@>f?mlB6#O%VP-R%1a)%H16%jO1a!CK37^f;VJ=hk0jH;0C0#R<7I zWDxmqg&oywc0BPou{KE2qbVXyz%nIDD^E}doF>9S&Iv2gzk;wdAJo93m!$1hPHfy* z19w?EHvP{px_k&`z@suP*|Rj1wX7gV_F2};K8H5N2Suv3OOQ?k>s+I0aY9d;ioc50` z^Xf^GtNWc9=j|qfyR7gUA1|`>JRd!SRfysk|-MC?P8q`$^Inij~)svCrEQNmDe zfzK@=l4fEKISA5PDc|&!QQ#dVx*@orH99t zaLTin42T;OP;5k2#CAPGm6FT6Q;vMPx8*~3gEgV9xG;I|$H`}t9N(`*IGUITb0k|O zT6!xGMU9^K*GycB`3;ugC(`4cJI!8?$#;TO!<6a6nxBzbACNa1WFJE8^rVHM#4~>XV@x@tsn_x=cKVK%Zv$!wJi9Dg2 zQfi!?jM;inAUy>Yh1A#mHdu#_ihFCbG54ePgnbJNkTupmn`|2272nnA(StetZ(XBu z73!MYZH)3`8(p^=6YRY=qcqXyQVCCX6#9XUD7l5xEKQw2;q5(GiWE3cN#r6t{u4mJ zjwMMVHQV6Jn@L>Nc+=Ia7Pcc9Qyib7@+|uTqmMKFM6eZ;7|RUZUfU0ys2|=9b=g}S zM9VC5_@8Ne!ZUsBzD6kqJVV!_ec3rPF0%al%A#42(_2|aaR3^~@hWu_QeBe!4 zS%~{O-D{;P^1MUqJ4R?bJfYo{3$4-;E4#XQ|YY#yX(lV;A>OlT4Fky2HhB_Ln-Ra zg`&FzPbGRICSI5w~-!cmd33e_L>Fw zUTdU)Y%=)03EtUZC~GkVbNqeOclB8oy+VB^Aw%ggLir#S^ml=({*4gvN8br*&aI3cGG75x*v>*|p_K6Q( z7fbu#kl4d$*S%2JbhK}=N-jM-8sxEnHm&05LM*~gemN@5_J(xpp?8te3)1o#=E!&8 z{6BsNd&sulMsnv6BY|rxVz5Ho(s^KkgY)WF-bxZA_9JU&C@qMlaZW%zp^Ie$o7|Eait2Q;mX`tSN9qT0Pg`&6Bf1 z7Fs$}G0%ncS+Wkd;A>k!DOrYu{vo#QL8#59P8nfy6Z z?TZ-7g?uH&dflM@9Y$>E&`mytSuRy!ZThZ^NY>W~62c8Bdrs*GXPCT;Qal%O?t;(g z&NamN5l$!E05PYJyn~0pI<<_9en2`JV|l_u=pE)+FCgOsC18xg5`26a)b!2ZP@Nv0 z3NPVVd`>D|q~GVzI6)fo^5E82I9W-+~oUg3%V??3bI%EU322j+=xZ3An(%Sn(nbs z%qnczT@ zs^;VqyG#8JPWJz?gO&Ow$(h7mvXOeTAEp7kBJzo{BpyqH-p%lSJsXm z9_Z>BZ!x7uUcVSAp0OKtr9;JI5)q%Ew*g+lNDdKNHNp@jRk{{ib_Oi#5xfXBBA?-x zSw|4??G%c~?<)ynDlnM|($3e%-=bk9YayKVfT=Qh5 zR;%4}B$E)HV|4XIC_P;$f%}nx&#_|-9GQ93 z!N29;b(-WnyHO1YiR=9eljP? zG$ebilT9)-Q%0yXlkK3tTEwcQ;;j}R0T7kEL(j&3gs@#(WcLss(lGQ&^9_qc>3-03 zB)?4CFpy{ttI)W@73Y(+cc4=ctVikbx&q)B`12;M}M z!I^zDe`X{s2>;u=-+2aCDilMkv$OSK4LuJ=`wDaCo`w5R1n$F~`hO4{5zSA7y2{pn zLCa?E{S`%EZh~R*S}K0}^%QMo-CwO$)HX&(gELaP;R#s(FANnAFp?(=VAub66{pTC z)$9k&Kx5y$97p=_$*fhzX(3iZGK>kP6Xslb)D}a|3XDbZdR!4V0YV$qz$EsnIjegXK=XWK!gqHd*2pVOX@7zM1PATNq<8 z!&S+_(dW%6f&%VCUzF2~@T4ahyw=yZyab1j zy&8_zIl;!x82JmqFe9cm)AtD7(~P?O5?P(UlI*4);Y@LU4?>Lv51t6yq{5|&Ff<)k8h zSzTF8t1;d5rJ)X`tg}l{#aPL!4nX0e5C(+{Q&f?3Y(wsKb4p?7cDbd=&!iz;u&sxY z;Sh5^4_QtWt8#jvT1d7qduu!3mlbzvizh~V!bqmPTS=k?(gd3T2HArgSwNd%Z}3;3 zbov}JaLIHR2{4Cjif_pY%4BTTL-<_)uHJd*f#zq~VPAytfh6Y<8J1eYTS?RX=&F!^JB&b-qd9g;n7xK$C17G`WeTpnEeaX1# zwfKY@XQbJIMdA5~8WDIyR_Ck45%a zT`~Kc7`D&NA5sz*vLogMd;cvnzI9^fYan`V#$h^ z(@g{S$Lnyu#btgvmbTLp)iIwK+qTPN#OnZ=z(9pwYQme4qaRTKEd* zoS(4PnEsCzfb`(SB?s#riqjW`wp}72gM}lJ?bjZ;GW{f~8x%-CW+1*_=fSjD>$XTo180<>KT&CBzQpMWfLU%^8l zED_Dm#2+Kbyh^?eSkg}`JJ)0z7zIjaoq_bUDy8HltC`Sj=);)t2&8c>fXcV2NZ)H$ zWwP6vth|$U=To@}*RAaS{@>8_L47vZRazTi!Lu1gl zm%jidGq|#lfSV?I*JQLzjz`||yk18$5mDflydQeWbk|T8rf7^trvcEX$&;JYHnBJc&&e+QT7MB=K_x2%>Ig`uQmO61Z;%^gfrP6%G*&cEZn`~j`0 zcp0IUZX9o!HOg~}`z+d<|EzTi*$JTADxfDALAnUf=W~ZhU2bnm@>DoaaaTQI=w3oN zkBiKun}3bjB7J>FUE-mU%0Axf99VfD0^QI5KqLl)MjkV9{V*tD1lo|4Gj$)PF&XUG zA6#8E9-9|004>&eg4vXG3`9;m~MmBMPEI^lZNazJN@hc+w%(d|nFM71lhV0h8DuKgt$n`1s}@ z@D7}UPCrZLKTzjLW~9oOy~MgZ<8z79=|)JR1#L=7uNKtYyg9uoj8>@pbNH zrbvKe)UW+-r8`o*ztrdpKK^XiuLO>JXp|X&{@d$%91V*TRCTGyWM$}u`R$%7a)F)?h(tFTchI# zcCXI9CUHZ0!Os8I3)TT}oVX+QP=)hfaE*2Cx<5A&f;$Z&R*c~?1m=J+9xFsQ#^Bt- z0?+*F&JI}eh5*4}z2f~p5u&==fzrwgDNaonR)U~~5|MfOpSRcZ@7sfnAiMqD^>PsM zW(`ix%njB9@u_OCqjm$1TQx#GMYt?uLl86!o_9{FKpfm0K-`dN!t=&KFn`|hpbg2j z`Y<6Rsc~+s4)`FplM>Lh;VGi(=%{pGz-mtf^bdJb@qg2GT>m-Y$+^hjVgW~o0T@Tv zH1cdVk(WI2iW7T*$>1sx%vHYn=A6#QDV1ZK%NbpJ^fqETCRa36mW2R&S@Me0lNa)>6J_=!SDAoL_$yiU&HfG+y-lrdc4OG%=+g0X&2(j zLLsTm#8OsBMR0XhO-}a#XUel$cUsW~)oGx_2EDt+u2HHCZ)U7VoJCF-*kmn|5jH`D zvCp2NeTm-Ywlq?9(XKYUxbbNJ7{jeHgrPaiRL9UJ98r>i z9A7nQqUuJkWS1zjv8hRo1kI}l@avyg(bT{TWyfCWd|B3iuN9QzW(aLbOQnN>0XoBop8y##Zx6hE zIgBd(aB&^rBxIN^GOthfqNrsHnZ?TY_E+0Ajp2R)BYf$mIjA(b!L{K$8gbv$iVe8M);o7+eXkZxIyI|3Y$BPBk4rVde(bX~AHRxwrx(|;562bIB zw=?7_BEa{tM;74j^1{a&(+y>=f3!@OfpcSV^z#!NR2$qWh}31D!O*2!aSZ=NSjc>L zp(;ibvSzBDE-x%(+1FkUY#&}*iTJj;0af7VWpcPiNJ(RDI^zC46bdxM3uygsKm`~1 z%Q`1tn}zJ9;JCI~Tn+=Wz>f;MtZI-lY{c=~IURXqmW4hjRc!uA@k@adThwF2G6~Ag z^}SbW0*}B#QqBNjHsydnf8IdQJ+RRkH_iJ%5jz4|hW4;Nn*B_;-0I;6==dGMC9#|l zDo_Gzr`ei`ghGJ}nE(T$4Ezi&qZMxtI5XLQZ8;?beDdO0b;U8lR^#!+!fX<-o^oV* zq_O-SoOq8cyzt1+|KS+~#&8*~Z^!6UY|0VGgJzIvAuzQou9d;DkzD!CUJK2phk?&l zpYhRPlUB^}Xqbm>bOWR`x;7#-j)>Z1APq#{!?lMv+xT~g?$~WAO=P#OR}@UKi!cJ| z0KPK}oPYjGx0xQ0>56%x+0t&I7R>Bh> zbf)}b<_MBw)acB~*S{G+W(oz$GR%sufT6l2O)tf1(?0`dIRdEd5`ie{=-(96dmxku zlP>l7Cd2mKhb!maFwDj>hsvTBY7P1Kc}KxVSp|A#&^vqd$VrBlB9_Lh8ZxGvj=2SELY}b30G8Fnd`izP6P?B5c_h zK<j2j2o(!8Xda9~Z9Q^7a5tl?tuN9^t6L;|Pc)OgT@j0Zaq zcp%n6pbDHU8d!hA?Y#tZhOW}k!$=~ld6XZ_US1KWv8U5P?<3=zkb!654rK1Di_sAO zp~&yP*p>bqVVgSk+UE&_9BY<^xB}im%mIvv)vMZeq&SK1nc~_HlNTg90W!BhARD7U z1l@QF&dER(6&z1loiTjI5~`vP4*W6wn9OxZ+A2XXq8X?AONlWG=3N!g#tZ`pZv%E# zmr%8~%NsX}PBbPXV+j#=T@(K4COToa8#DgjNoF^J)6oB@TnEwshyBlyRlZ1q&JajV z!UJhp#aej2dS?}41ZQOhNG_kMxzhS>b&`6KrPWoaAy*G2GZ5Xgh13(^yr92cCT@fe zHT}zx#i>5%jpO*SouAQLSMfiv!Mq;3Al=;ebF`T87BPT>j_fd zsxB)ze<7!{P7(U&U{6qxeL&Bb($!}?i###tP`#Wy_}*LN%-Rxn==T?JJRi!C-YZU} z#T^1@Fa%ZlTsb3H!~1|ex>hbV3gR~h5`1$h?yKuPPXh2qg!Rud596($7aT-t?{Enc zJfXl<0M{3tueoEFk}-dNOvHRSeC`a+#oNM4839$*`=I$=(1z+q6wKN3PLv4L9L8%AH}b1Z(k| zFMzvm!%wYFGaxk6elFc*l2_j4!z!6T+p9X}D@QWEZ;@IDC7;0Uz(e6I44F~=Xw!7;$&YX+P*Bqa#Aju>-KwNr6 z!*5Ro9>UDbc}c1<&xHdM?(OL;zh}R{Jr- z!iT<)W_e@1HPsh=h>(L#mn`7&2A9JVnzKs>n)169JPBEAj)@ zk6SUfNWT8x^Va3^2Zn4wKJ=PSyP7M-?$E5a36%@n3ah=qBQ)P=#XnSAjmMK|%ZZk0wM1 zM#?t_LS-ePP;P!Q+PmOLgx(sWcPI?i^Xl1E#T-dpCk$0mp+tpef4y=+J>+go7Z*D{ zdDu$^L8}jF&mal3@M~B&T6=puCs`_>a?(p2JlqrX!?N-lW2R>~Y9y@X($fTH$+OUo z7T_Vzf_ujy$8ae3Sv&(*6UI1?F9Af(*r= zi#fM2Ix zo@XQvVnQy-@Wgxc(#MzNs)y6PsN>c7D{|oDqZhqYRgwBwgLU${APWWZR42iDvW2Aw z%^T!6=vqJ&L}#JoGmm2Gyga!`m%c*S19ZU7H6KAAEzFrymuCPyWbIr%m@RV#G7a5K z|00=tB2YTjv1ZjhVLgfsCw7g6`zraEdu#XUHI_L9jJwU~!-^j?x<=YfS0B&q~* zcws`#r4d~_^$)aTXzhyPORAA2QoQ+%9B z&1Vk%p_G$2A+I zwzuY3v1UrKr-HF6WGcO*R1 zk+3(J~|i=jpMx{Wx$&0Betx!45o|T=SK&e4^`JjsoobXs{-AfJbs~##Vuqx=*yE_l|F7XDRJ(mT@@~|hG;#a z==ES@p}(+n;41xyaooI-+r$>_c?-o#! z@gTFNE}O}KvTNOwQTO;AEC$wg-gvVW8@wJ!At}r#c}?mu{+k_-cfZ1^)sfH7WY$DV z+Xl3Ba0j75hb4O0>#@w_f%~LzZQ6$MHEZ{vNI(}a21*aaw1wjWnopc=HS@dPT>Mud zfC8uLF~{Q|6NFwP!imJG57x;zWmI0H&A&=?aFZG*eF13GZbnXOcKm3hxcp(J{f>Dqh#2QmAW6ey&8wO!lTpawL81*37@|DNd7`& z>eCxZoNqztaQ4cgUo)0Mxs=eIbPJ#w(? z{11-A*6%}f#H|zoZ8c*=*F}MQ@6D`RPKZXf@)Eh$ffM^%!STTGd&o^eE6U{J)=mK3 zsCA7Rl6xMFPJSiZ7%HPt^5!B3uwWcmwVfM)x)Y`WzOZZYmZmZC7>{`PzwihO+?$i% zS?Y^@lBvED;ep2@vvu6``2-?Hi-dMgQ&&J$h}}J8lk?r}DMi^$X_M*q{YuY|!GRpk zaDetdTWLM$i~ltDzC@{T|H~KfHs|XVn&gDolIr}!dy;QI~Lh3cz+n$5E(m- z#Y_ZGbAN0Pr0A*+y0t4p^r$I<(!zKj5X&?ZzX=)|=i{9K> z9C-W()HunyO`o3u4RzR1PG*av#K^xc0V07Xg3uj`Y zRBjo68^auU+3_KHKW~X3cT`Nn)kpg^T`*YMll27#dI8}MLMBnWgmVlR7YkQ|=}3=i z*fXvyC|DAL8rpgV;LMtcM4vl`fXmsk#m+67`OtAHVy62ZLvI?L+;EA{!17(=H>R`m z@e@Cuyjm#Nr|hbU+*-?7XCWtCEEUUKq4_eLxlWS$*~CSkg(_&k9VAI`4i;dyi@Dx%c^mz(*uwT^U9I9REy|9XkIU00^k{! z7S2+R8`p=bl53TLc*Y^HcLhf^1d6$scwrBy2p3sMKAH$(WBwA}S*B+6rO-KhL8S4p zqCJzMDo;8@7J(!=p96w}oEoEs7uzKo1>a0lY`cwH>kt*XdYUv?Fg3p^1d{*~aD4j~ zm+)W6`mjM-DUiJh55m<@^c&mYS;;4d@$%P!>FyGsez5~z83oSCTUjTGgca^jGU+j+ zbb5Gxp;mWaw&#(I-yvIbpgt%Fg`>JWa8(M=-~0A(P)vI;F;h+gkZc)fdFeFYhkX zDfl44Tkn-jEdFXUL~5mHZ-fyP)E#=5Zb=lcy1A(OpJ0@zr{9gQBP} zfv*r+F@S5_BENr58FsOZL)FI;B21{8*|eZ<;5y&dm^MRNfpPU+F%i4=YXhHP3I`jY zS@Tl}NXEg0HPIwGxZNofXUYqyeqbEzng?4hkKm;$H6=xH!OY-eA!AI8drM^Eq^?PfQv5m}GFlsRo9w@-*E{ahqWS=X=| zhg;!}=tQ_Pil75*nATPPB- z90{bGE?oGq!G@A$Jm`JZe6;7ck`V2j#&hxe^^qX;j(bV#KnLD~9-?jaE7#;Wlq06g zJ`|E=tbM15*x!1j)ywI|-_(#zYY$|h`Cs1!z?{cOJous~MD#9$g0sb;(~tjBmXn+Wx$_36FxwJEl>=U#=m zd^ZEQNL#8nwxPSSkU=lV0{P92M%72T#ZARuuPPa(`@YUna|lijmxDR)HKeg6`03q= zB082pbc}_uWxGYtm){wXpenAnZ%Me{$h zV0XV6q8F$f`)t-n;fzvy$W{MrqI8vSKf7+g)(TRz_r~q4K886e@1H-N45S?vZl<@m zKI-`Vc#895z)fm5JD~m>O8X7!?>iW2ay)zahp4fNz13DQIBbDe3c8X6nQzrTQDR<~h| zh5qc=xNDO3c?@ZKv52qlfH$3K`EO1?bvS~4`gU{b{2_TY5xh^9 zUq4o#!bRs+e?v6~0wH6D2TL@N^DZ46e%S) z4N6#`q*6*LpaRlJN(qRBgosLsbP7_^(x8NN3P?!z_fGKK?~Z$h;|zbe_g-twx#oQ5 z^FGmB?21@J;wzokQ)b|lBA-NjE^Pnlj(>;mX`nM-S=NW!k0!ysyzHJ#nD9%RF%VXJ z`cZY=bMN>i01);e?%+JdG|E*9PH($O^~i-W&!VTDy{C$BTpv2<{m^M^i!(LTo!Wl^ zW#T=J&D}6+J?d%i2q|EfY&A$elf^<#z;c2?i;n&*l!>KW0f+)&h|(Gk=K+e>1B6&) zD_2kW8Ni-1Y7z?b))=TwawjA2&=BoUy^u&>;|HD?wcGq@p}y#AyWNsSvzXD>603Jz zyaw~(nFehD4;l$k*yef8m2FJP2bKYd* z);`Q;-{5`cq?|9zY0o1vSN%xbxd;=w%NttNVOmdliA$i@Aw9QUc@-$wm(`Ih>kphw zx^S#pyHK-Ocy1ZO5}x=67^&!Kn3(CV?>~*Ico2-bW7LWi)8e?$Ww+l?=CNiW&nJID zoHX5g2A+m=pjvK?!YD=hqN2JvVp36Ej5YuL0;5(^`wWn`TcFRhx5Ik=Fdy*2)4f>} zw_i_sj%d=BT^meaJR>;#tKp~pSdEINDO9Y`8k(u6+#(L+wioI)IE=W046LEOnXc(j z1|$U1S+2tz)7gQZffsQ`<4+X(1-zC51gVR>NV*|pGp2ZXV=PQ}5tN}ZsDbbyHTBat zhw;E3tj_s$SpQeyy3dR??#m?OolUlZ4b~#FI)mTk!&mLm>t>Zj;Tel{ff1jZqxYxS zk1+OC8VcCwxrBMD~Wh~Pw(8peoY^LjjB1_DNwAaVaflAsrv&r^s6vBlyg08WGK`_gT7bpB z7^5(r?c})&wyy>#>VyZ5+wzYU5&&~*DIn1R6lHHahbQOzg&&a2Krf(8(~w`h1qTf| zq2h7nLRmYD`%yKVcSaKzeSg@qB@3d3nkc$C?=ia{ZV!6fwzxq44U|*=Xa~s1qSi2X z=WjzY?mh8xIF^&?e{?8=c3%%v0+xuNFnn@M9X~3}6(SE194!d#thCFf(6&2$`Drfu zYc1@>g!qRH@371BAfSwB+l1OW>pAHqu5)w$BnG1zuRT?AYn4W+(ihw8WzEGXJL%Cb ziMcv??8K($)K;sxSU6!ah)yq23VLx!f^=61I!KN{&<`}U(qg+0(nK&)>iP3rZLJ(G z!v_W8^`I_D<aTx{NhDOefGY9HW?|zpwOt! z@o33sE+E{UoOFQEd0As}#T9hHmcZc8Z#bJqJGm4G8B{-#H4^u}zkmnT=Y5=RWD{zY zvTh*qO}!&n=)F}5J)eSzJ7#CVU~^{{ni@}?tiaLFaHbLg<}Uh%fr7upx>3D(7f6dO1bwyI zDu(gvKj64G6h{^ykme9n=(G3>cFn zeaJ#o@|q5N&G{_R@eNawu34COtsAMNiv4^b)=*W1ZywUR_MGvD4E3$jlOjC=-u$(( zRY;gkCbr-PtQUZ)Y^loQGUu+d?e7z=dq#M9JDmAJHB@~9pWQ` zYTWQfrN1>#4-e+EagIK(hkKmFXb*mMKAni{3%wEkuf1&`DY|rIxD50cm)dG+S(W>8 zAB>8O#G2kEqzE*&y;|I=P>5Bhc<8H0?TTVl3R-1zD`44~^ThhA`0Dmn-a9@L_GlNS z+VR}s*DQ?if)o>{ww1#b_1I=`_@1WDUT1jsI?IIDSbi|1mT8-#}TugDTqqcBnv+P^-p_k0pM0wXS_ z)?WANKEVQ@%AJGv&2|?YKa1q}Yr=%G*R!F?O|Nl?`>(o?tAf*#F!j0a!!1QWfV*}2 zbwgPz&;*5_F08h=<~uIek3Iq&wC0&NYlWy%t|l4i8@kpf_Og|1^1AAvW#w?3WjcMl zg;MzBr9cG-5lsUgFhOXodRAANT7b{#IN~Xx-@Dkn$j)@vvo?@#$f-y^#*ppwe)V?T z4x0YIXk0Lt^mM*4U>So4LF+#DndAjC&KaFF*X+bn2#u$|`PaTX^m;C(k!`t%@vh&n z`0QX=8F6h5t6Kjnr8oB(=vMtihWy3-Noj}s2yalIAZH=G^mS~MMGkXKXrLKU?Zf?8 z)aQz4c-I8RJ2YF41P?>O)?bRkwYE#xZ%^5J92&TZ;js1cbb>Zeps$CNI#vqh7II2Z z6d`TPwn44=cCeO_HDFFMzdOvRjTP#)X$J+!WLMJ(q4`Nlzd1$u z`t7yK1=JfIu!(>4@)-*G;k=jPf2m{A-g4e&BcBDD2*V}`7{ef|yslfS%&-dYrg#xz z&f};To8q2@Qe!Lqo-ShJy{P$?&-fEiVR>mU$5F)5ty5%4J8*k5zfAELDi3!$YQI~* zSfK@-(q1c;Lu#ThAHNrbRm)(#4E$LZqWD}+X>m*0cbL?8KINB;RO2_OAgG8>SBSr) z^=RnX0M$1B;Wm};N(~>jEhgMOT`Y6HT+EpHa`izWbz0}p`iZnF;n%^toMb7u#WafW zgdc41N9lg}T+>>iet=({8u|WD8|QWe`D1R{X4Um{NpD`R$3>(S16 z!pcYysC5-4UJWSse}0+qU<%6hC%_Ynj-<&oTBx-Rv7vEcSbw(OnmQKePe7w?0)l{44nd@r@&wcv^ijjVDMU%|uL9q;pgoZt%ODdybczn||*oKa2KFf5Mvf?>KsB0aI&wFYktuce| zwAa_Ss!1CrcgmTne%o@Ydz1Ae4jXaAnxz9gH^}qKD`kb2fSuG}sF$z5-2c%cc`3CnSWQoO<|AVL z^3nAw^Jw7)gPr#AVQoJF2_@X1&u!NG{GPZS_)2AlA7g)^jtbK;*zJ;C69jcTD`j#!ehJ2m)NPPo-HXXbzFO@XB+u}sY%{m)SpKuzDe*mF23}K1?$~;*H&OwnsR^V55C}M zAsat<;pMJgO^j*V6y%8V=RalM_4~U39k(w%pa;~=Y;E~S@*B4YnQnsAC8+}6B>Ol- z=)=+l?CVMwb6R2#nPZA+HZ9~TmIB*;!Zq||RSC>jEtiU{4$pgzZF!|Hui77KxkXq* zxHMY6ZD57jt8pv`uJ07qsZOw*8cXT zsDaVw{e7#Q21et(Juz?0Vu)Oro7iUCsffsYW!xZ{&i+s^bP#E)=Y+8>KOcBdV(Pp6 zb~vg!(R=ubDO0X6hA~cER=0SOAXfY@;k}Xp+O6CT55^OxcO}H0`X0;2%XAy!fevK_ z^}7LuqnMf1`Wo^nIOI7@f0zb6y{R;|V_LbgpB1&0|d@&qPAcF4s$! z?^-cslMwSc-JY#@gXijELdtUGHeQ86lLuu&KcV!hwc&R;$vv|#AB#s<7Vc4z21T-s z#TDUlj~U{8FaIGj>F0bOJ4J=PMcAVzyxY9<-MO-P=N9Q_!@K@p$4AI~PY4M^rNA!V;)+$U?Hb+dsHqkk~o@*ZS14n$<|dAf;FaGGeSX`OYi4 zUtisP*NDy$`As@_lNFI^c`o6{T@v6aTrb<0+1{cg_AS|4m#dn7ch1aFhO@zU>L~Sj z#3L#2wFXF|c=vA4chEWYaz#u$aV|JRq8WY`u_;B#LB*9>x$nbsibLrh@72&&wYBV@ z7Zsf}I4B~>!Y1!v7(Co&N9{-21I4Q(xZ{2-A|Vi)FN}pL?-OF5+i3(B>#gg^Em&5L5cf zOb}_Gj7-dp|Fq40VjR1?WGPeJTDzngs zCCwt2iNou~*oLxCOt&SSmL&<{54GmJ^W5^7*gUPairJf^fcWnba*lXZi`M8R)QwMO z&?EDhAtpG^yPWl8FRV%}pk#7?Pw4!O6zji}*FzsCE2~z_Vo(0V^Eg%W>>5eci)V!M zSA{W0JPrr*){aqd1X@cft!4rpDU(~4oKd;~_kO7KTglP5c=KcZoB=%wbj&xLLUX1g zhq@HH4SbcRkJGaZEFV=#ZB?in4fM$ygrH%;ZE_Proa-i@|7A9F88Iv`MW8Gu^AX1O zLeJ<`6ZfQi^M!_wu-&{3mQn}^izH3(n~WY@#Icf7Je9bEAv;fuXFpRk^5d)`1D^*9sL)8yihVIOPMNHk2uc-t)@QqzA z$(k36WR$|$%(6^N-~}R-rRB4@Te%e=Y(vl~LlX`xa42_Pl~S& zV3*_UU81?nX%gdNFP#V1JS7+EDlZtrf` zFr6UT4&XA1FBQ%|zFzwCw;pRr)$(BqH}z_Nj}ZY|llq9qxW?PGEW?a?Hq_2_KU#2v4is8O!#}`0Yz3^a4VTS zGbWgM**V3MQE@6_{&~cj+Qb=RGwu@`iTaH{@w*PJILMiq6Xx&!H~*i*{1;2zZFGH< z@nkb{v(l%6Rlvdi0?Tb-#oQt=IoU*j@n@cr2*7{Ma6I)vpW1cr0(|GBaRz8|)k>wxC zz*68#eEJptA=ZVYh#+%_;`wi9>Gemkl4LPI{W#w0&q|WfuMAr+6Jvm6Eg6@^<;F!r z+0tdSYvh~!gbVg$LvlaLlzI`XR-YN4YF(V9@Za56#P4M4Qpm*!*b71*=N$+_LeQ)6 z@~(5T&&`J+9O}u{M1yn6IK{So8O2h}%+=GUf@yN6SEs0inhIHx{b-pj zVqTh2^C|Kx-s9o>>+Imk5+)l&u8V6SvgI)P#W0)z)V?R&giNN^&vyo9r6;(`A1Cg} zQe{R~+&k(#B*H+uE(Z+{#xJ5qEYyjBSdnE|L`f5HBMdu5aNPY>(6kgb>8CXWbQy6GO7CNQyN4ei38f1?o+VTPLY2## z001|#&wc|ief)1h-GSl<3r017VqOS4pW!{!#mN@Szwp+Wa+^}jf#t{5^QZ&5bm+#C zzq}h2BchRM4gf$frfQe0x}Y-kGay!n*r?QTn0#C`Z?R zjN9|&_vz5fEbB^AJ`wSW??g70IPk*}$v;$H+d172FJTKQa%<_IrJ*m?R0}QP^>qsR zcAU{CwdbEA<_!8eip`K{Y9fo{eiMol90~E|6*nWyfc=m`gvE#0t!FFGb;!4U9YbyJ zfgh473DHf8jTm2i0afdefAXAAXjPs7&zB_m0QwbBmKU-1T%eo$vi7I%r}G1C2()Hj zHoW-R%*-0>cZoD!!>6{LXStH>zsFt{W)0GP+EXpg2UL~dt$5d%29~WiQH!fuLOT_N`8HJqB;1pFP-PLvQ?c?z6FrLjDx3-Jh zbLNEax0ZwQN!`x-665w;AWg)VDF;X#a#&83lsCJ(LC6hy9r<8J-E;+4us_K|RDMt> zL8r+;OC+USL1?I+(@Fo|BJ%*AGv#JT+*?5*(uWd^UeFNk14g_+~Jj6L?QJ}zD^y<`}{}cdx1&0nFDU`et zeX;)8>TFbrUjic<5vjlXt)W`GTfkFZQT;^*;`YqlWc&^x%wLW zp8!oAg`-){nR=;Dcs9otK0--h7;Vr}s`hWgVd*wxjsKbl^r;xx=oFniwV0+NKF>Pf zEU1P#b*N+`?Njy(#~PpGboT%V{uFZM1Mv=c>ecyegOf@tq^DSdt8C{L%6&zlFU|hm zVBge@yQ6JZ!J437H}z_DKuu!f8&9YhOxgS#WWP#3lLx1y4)7HTna0w3PGE$~J#fD{cYRo&MLlAJmz z{s_?S0|{9FJRBbZjLkxZ0j2r9W@!k0j?rhQC{62Jl6cpDD<@RmEpzd@>c$sM_@{pg znl7APp(fuf8c8-v7);j|{sQ6l7Jyd>Uzp_sVOh~g$I8K*GQ4lGMCMBUI*nkQS`5+V z1t9>ss}xMGYd{5Gc`ayr2D3LuPZ07V#?Lo8PK*B@-lli#C8v6y|d+tnBa0C!v!&Vw6k zMn~;{@7=Br5V+EV`gooNwpUncub@usf7+1LUq@vS$q*$A6+K19rAU!<8}gR>&k&+k z4xH$kPI=Wass%m3-uMdGYCd3=ePA(Y0iR00*7BdT(3f!AH;dV}79-G5c^G581LD}? zEutzWU?Pcw*TpJacJYN*4q%lvs zD*|*lz+(y=5KSOAOFwwGHNm9H=gn!`fF3UzY64aEW6nV|?*~gvGfVxrE}|XRJ*-m( z50BnNNmlv>tSlA>-P@;sCw?v15XS+r5*z-~=9^(LOD9FCXS8FQ>J$}^luZgWVZ>P@ zz*=RHX!mVDytDZL*Y^TDDQ1x|TO%x&baB3k*uF%}(-xcGL9!Ucwd$=t0G){#t!5*_ zQJC9ZesO`Kk=MaD_s~7ixUH zPL}bwnS0=n;HLm!*Ja59n-gsQN6w|^UTa9@O@POdzdqt{=<~&dV48TZJF_5Nc{=a-?@XeFY*nf> zA23a4#pOE)ef{N;B$S|bkE>)TezAImiNc@L5tKJi!NIebd(r*_G+r%{F=fAC7tsz9 z&Rb3Te_qrrNJk<~-b;87cR;`!Q}9O43;EINE8YT?kgtfZzq6d^9ct0D>P!yVirV7?Tcn6KI$~Z~jMrBtv(05-(ulN( zP#n%Z%@T}A68Yn=wTttw)9loUD4P$JyU)GCZ}#v`nLnq2Irk~k1KQ0Q^1%`~XGkKO zlh|y&-N%h>)ug?r!ky)bxDRK@fbG1rDbHYOggi5yp>4VE9b;X+FdaX#c4|^IDW@p? z*OJ5=q2KfrbUs&nJSex)q{6(n{p1rN|Q(ATrxm-^>~Y*(oo4u3BV=(RJ!8S ziR|V9KL5fS)`~c!=NIsp_LQz}4o-AiUZyKpjk=EDnCbQpD$|M|Aius){I3?c#z?Ia5hUcnf$0TVTVGP z;(8nPb<18XuE7R#FZZ^wuarDKyk1vma(E{E`Mzsu&GZSIz71c9b=&6WzL1j~#aJ3H zz~2vL4E!M%gi6Lm_Uy2XxLHoduRmuBhCo+9^%wEve!g&Torl{V(2Y<+fw$k-s~c+; zUa)Rb^be4a`6vA`WT#-pXCihvbo|)P#?quV=uNMUql$26Zmq)=HX>eADIh>)KZvGU zx37PWiyw2epX(rjrD~J&YV;UwXaHZomdN73u9K&P24>eKbPg5zH&e?G9}ynZ$1RB( zvv4ghcIUhuwQP8G2H7AL={xJ^cw8@+8;@HfxOlVRg;W#f0+F*#z=A{r_FlZi-aw1v zsd-|fvAxNtMuLa!WmF5IZk+K1D%4Mv>dsQ_7c`0|prDbAQQA{i>x4H-;NKfHW%RlB zwcfMeXWxl-%a!~ZP>BWYot$W8$NXfAClQ~Rp6PUzfycTU&8Fw0xTd16J>*7ftN-&xyt=vJTrylQ!-u2U$VYiJy7Zm4AxYiKUYA`A8FA;g`2rp_qU zQ1oc`n_!ksqAet@fJc|zmZJt8-A=QXghp z9R7ycQ;IQ+r7n(lVY<7C&Qd=^QkdGVitJvR`82vK@9hw8pZPJL0O;!3OeMR(byJcf z%B+p&OJVy_g@VIESMIXC!e*TS1_Tq3e5c=gT=_%jJ(nZy(dtYs0BWk`@>E(1MNW0y zDT%(gU8U&XvXW72SsiM7TivB%-1UP*hy*ENtH|B3Wy%mr2MTWFoe~P_>A~Rpp^}|p zLgq_<)H*#S;wFKF+y2DIIh0WAp|5#p8B6G*o~_B{*D#P_^&y_~PzRn5dRVpK&FXZ< z=lF(;G;<`ATfhq8-PNch|9g?80GFl&{FM%t@IMqo6I@vB!T4w}9))WXIh6^=k3HEf zl(NBCfS{UpRC2Q0)?0w_@7q>WGD%BfdcCL9mF;WctKg0OxoCoZjozZZGB~SjK!Mr< z?3Pm$kLdv{G6-Jm*Ea|XNgtM|Stxd&t0mh!PduUVvbAN6sLL6vPV7GIx$8mT%JiW& zXRl3RB72E-*CBqrY_E~n{8||mDE&LV$(ZJX1jctF*IfUB0az$Uw(ee?_IZX)vW$y; z0gk1I130Uhj`~C@bW;6oiE~_aGh~~PAvf$golz@c&v$9jX0(apxj5Y`=bEjzrg4eC zxjKHjb4u8kFyfzPt!L7+dHB0_CPWhN;TjwyQweQ?Hf0v>EqjUK(}rLWr;};2nu6VD-%08+Xb0E|T>S3kR=P)c2 zquYMI23iq+;!{MCR}rYin6`Zl->Q>zUwNtb~W00kL4;>g9=e z4m(k+)&t_+N8=V;T-)(n4b{$;X->9H((6q+{Wi#z%T#SJ*zy94UO}Rru@ci{&Ttjx z2ZKZ&eo{LjAHpvePZuGW<^~2WGvAfA)H8g4zcJ)Ygi;RQ?S7L z@8|P@H>vsC7}P}mib24AnJgl=U2U{wI~`}$T%gcudg)z|;qUc!JIKkq)FS!w6C@PO zmDsIrB{?oUFUygV;@AZ8O>wJ}Sg!@i(7^JRFM0Ww=0zI|0;%l+VD|al3(6#p!&iUP znv{V^EwLaq+t0l%zRkvr37@nNyDDT|OPDPst%{c~V6ecR!dS`Zu8J?2&-jR&S^H=v zRQmlpj2A=qLd2QoCF==>zYpB1@%}rd(8{)K>%{-0h*0*WROnZ#m&@VDx1ibmC8T8K zyFg0-v$deozQ@tqx_y3?zt{(?j!u!6i>Jm|f9_kiNtMLG_;@?_;;b=5pbXMF$@WqT z5N-b=Ungpt=Y3I>B1Y4p2YA=b{nK{%(iO#p6B0jw=p?{xM-;s_&hdFOREn7h7oU8N zG7;40OS}$KaKaAvOweFDSS7Oe?N8(TuP9aCq!jZCh8&CGXS)hrazBX;{e`J{tM z|CG-5eROt{xgzW|r*1emfOYlsYAYYbFe6;c6sxByUa+jg0e|6d`8A${Bdo^3VY1rc zcC?Vv!Yl7IWhE7;1@aRoBTMl9s*p}1Y9JXFp|GAy6jF;iEG|}`2 zoChBBp%+-_@s#@HaElS8ShO^Z_tIBN1zl&}S5lp2R59S5D+J6hls~aFhT^ikp59&q zYZ+Kk*!-dQ>>`%9n-KTOL9=AwIOIY)EIrQ$?d;`>GN5MN*!Y4`TP#d_zYcWb;1;cv z4{a>u4 zPB3B8G^X-RZ3Wk@Y(%-WdQ=n0U<#-H`^IFip6yRrtomtyv>zvA6orc6doC}1AR*fW z)GfS(G*tnsei(-6DjAx;C%ksS4`lAbECSki%>sRe4z@5@D-Uqu4YJy^X`k*vN__qS z`L>?PYK0#W$oDNsn9cT~9Bb?z3|uC_e%(NCd+nI?*ymtIvI9#Z<9(azJ$<5n&e4S! zQQO^)($_rNy=RhQ?m2HRXCdNb!1muMPHXC9H9?pcKex%W1eof>HpIyO{r$iwgf#ZK>c3H1=#*E?;0%EoL8)-l`K+LOrq^!ddBa&~`djyx0Fv}8 z<@~`>3rzRi0ShP1eEh(Z@MR1zGUY|{Kxe?IQ!K&)cSUvK<+S{5BF{6+FuP4=dUBFx z_gUWurU1m=0bQMIcrZ{TMKrXCv-P!Xz30evfxw@N~uq5Cz* ze;*NpwP^Ct)q-!Y;3HR#sy6W=^0)N*V_PpuLYXNr>+e$?LkALMV%7r$={pI_U6u!h z1{R(oAHM8K3MzaMTGDX|<|M;a`oFmDb(7HDhIj{dmJO)O{QZoQ0kd!?U7VmNv-o>!=h{3B$$t=i6Mg!aT(ched%Cz!GdqRB>wZa z9IyP~j-#Z~q7@M#z4KA>`SUF5ya}%D5L^R(B!=*&6r!{aWC$Heeof%t$6=|H969`c z;$#SXoZ@b3ayMErn$%MgD6s0J3I9>4XI2o86|7gZJqeS~9PAnAfoZ?rwy|Y~jpi`7 zZZs{-eLp(oC+`C=$~?<(vNHnyZv0FefV@`FX5urPzwvL+Ab@9`;U;~HW{-urA~8kX z51#Zn>&~u89MP+5;LPRj~~&k!fx?K?9p_{!Gd%Hrlo>0TW3%^)yttX;)Y%1 z;_#^27^w2NHZd=FmdPNp8ro(vpI~0qFz!G!o*a|MorAy^a#OfyYew-rabcKQMT_lS z^&p#x53s($*P!w?5{Cp{xllW{K(5@B>@I*&HwK!Mg$`z=GVJU6eu;W1&aa13IzuvM zUCakGSJ%_lHYm7Wqhr`BfWxgnQ-Ft00WwtI5LC4LZ&R>>8@3(&kT!Zn%7e2xF)4o% zp0$L&O>ssj(FvI;1pnsm?QUHTK()`xpT2_7kkt8usWHwDKdU#8%5w!S`EI*r|6Q1r zWd0@7fdcM0uU!D%Er5DmD)R`e6nlZ(Pj7n4?90KU+J;9}`|x|`h!c_G!kCKcT6Gk> z!7&PImSo^#hC>!OcC}N;#O5h@3w1+FsA}4K`oIA)8FgdAFRzCGv;`FmgY8Q96_^}S zFgadkwC({y0%HpZD~*T02T1+o6IgWAU1~zYJ6n zBByRD8&lNDO~nKIfAKTg-)A- zqf=+`eagC9Q&g#HbrRsmhneX}QoDHh{jGy}aRX|F9c6|^<+%)u8hfzI_^R&GSDRWr z@s@ZgA>_@=HdrMeKzkSX$u_$ur&agoA-Hz(!pBDb-guzF0arTSrqQPiI_R%AjBZ+m z5_NJcg9z*9Om|kIb<6-b5*ZuT1Snk~UAelyRWiH4OdJ(9F|+;(Pv|du($>fon2Bgg z`pCV7I5N=rb)(n*VacNR%2Znw2tGb$MyEXc?gjC|xt{Q1%O99Hv( zNFJ09Qbr-en&aAcy-s3(5ept%^ji;@QJM=wnmRw(?ax}(b=?)1wA=>1_%|H5+#bb` z+ILhj1yizYlo#f=4gEPjAIc{w`>z2w2*R<$<+gQNwmQ5Ao-g#neURLcZ6Q_Y2d3R? z7i{Xy5wX@e8ngr`q58+p_0fa-rBs78eNpBU=|{r*OdmL8K2W|?D7&Vhx6>RUr9M?) z*3|&z&-jaI5$ku5;B|TM-jn$MeiKb(5H&IW8#Hovdvd~KJ77*9ql?SuC8zd~;u zZ6h&Rx77ZPv=kJxQM2zXD8_*$H&Gpx3># zwfd*(VZfb(e+M0MDz4PlmeOba|An?-$)Di68s8tYIDoEUV_HPUhT7=b&3S5!0WBD#Ogf>p^wyCdwHMAX61X;tMTAJB{@~u J&o~2*{|9pdd%pkx literal 0 HcmV?d00001 From 6e19433d91a2b25e9f69cab8e7a7f9bc2b23b17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Mastrangelo?= Date: Tue, 9 Apr 2024 17:11:13 -0400 Subject: [PATCH 2/2] review fixes --- .../api/api_endpoints/autonomy_api.mdx | 2 +- .../api/api_endpoints/definitions.mdx | 2 +- .../features/assisted_teleoperation.mdx | 16 ++++++++++------ docs_outdoornav_user_manual/release_notes.mdx | 4 +++- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx b/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx index 7607edc5..43eb0e51 100644 --- a/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx +++ b/docs_outdoornav_user_manual/api/api_endpoints/autonomy_api.mdx @@ -28,7 +28,7 @@ computes. If assisted teleop is enabled the UGV will use this velocity.   **Message Type:** geometry_msgs/Polygon -  **Description:** The sfootprint that the assisted teleop node uses to compute +  **Description:** The footprint that the assisted teleop node uses to compute if it is in a collision state. #### /assisted_teleop/obstacle_map diff --git a/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx b/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx index 96b7bd89..76842af3 100644 --- a/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx +++ b/docs_outdoornav_user_manual/api/api_endpoints/definitions.mdx @@ -613,7 +613,7 @@ string error_message #### clearpath_safety_msgs/ObstacleMap.msg {#msg-obstacle-map} ``` -# Assisted teleoperation message indicating the threat level of obstacles surrounidng the platform +# Assisted teleoperation message indicating the threat level of obstacles surrounding the platform float32[] threat_level ``` diff --git a/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx b/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx index 8f87982c..74f5e010 100644 --- a/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx +++ b/docs_outdoornav_user_manual/features/assisted_teleoperation.mdx @@ -34,7 +34,7 @@ teleoperate their UGV safely, without worry of colliding into obstacles. -The assisted teleoperation features is intended to work with on the following sources of velocity input: +The assisted teleoperation feature is intended to work with the following sources of velocity input: | Input source | Topic | |--------------|--------| @@ -51,18 +51,22 @@ The Assisted teleop feature will **NOT** work on the following sources of veloci | Keyboard Command | `/kb_teleop/cmd_vel` | | Interactive Marker | `/twist_marker_server/cmd_vel` | -The Assisted Teleoperation feature can be activated/disactivated according to your required application requirements. +The Assisted Teleoperation feature can be activated/deactivated according to your required application requirements. This can be done by setting the **ENABLE_ASSISTED_TELEOP** environment variable in the `/opt/onav//config/autonomy.env` file, where *onav_version* is the currently running version of OutdoorNav. ## Functionality -The intended use for +The intended purpose for the assisted teleoperation feature is to provide some software level safety for users while they are teleoperating the UGV. +This feature is intended to solely provide software level safety and does not use any hardware level PLCs to trigger a motor disconnect. It is to be +treated as a tool that provides a sense of security to the user, such that they will not accidentally crash the UGV any obstacles. The feature +constantly monitors the 2D/3D LiDAR sensor data that it is provided and uses this information to control the velocity of the UGV. As the UGV +approaches obstacles, it will decrease the velocity of the UGV and will bring the UGV to a complete stop if the user continues to drive +towards the oncoming obstacle. For visualization details of the assisted teleoperation feature, please consult the [UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) page. - ### Enable/Disable from the UI From the OutdoorNav UI you are able to enable/disable the "Teleop Assist" by using the toggle that is located by the UI joystick. @@ -84,10 +88,10 @@ Below are the errors/warnings you may see: | Error/Warning | Reason | |---------------|--------| | **"Error: Failed to communicate with the Assisted Teleop node"** | The assisted teleoperation node is not running or has crashed | -| **"Error: No sensors configured"** | The assisted teleoperation node is running but no sensors have been configured to be used as obstacle detection sources | +| **"Error: No sensors configured"** | The assisted teleoperation node is running but no sensors have been configured to be used as obstacle detection sources | | **"Error: Invalid twist_mux configuration"** | The twists mux configuration has been modified and does not satisfy the requirements for safe operation under the requirements of assisted teleoperation | | **"Error: Unknown platform type"** | The assisted teleoperation node cannot determine the type of platform you are on | -| **"WARNING: Assisted teleoperation OFF due to service"** | The UI toggle switch or the `/assisted_teleop/enable` service has disabled assited teloperation | +| **"WARNING: Assisted teleoperation OFF due to service"** | The UI toggle switch or the `/assisted_teleop/enable` service has disabled assisted teloperation | | **"WARNING: Assisted teleoperation OFF due to joystick override"** | The enable/disable button on the UGV remote joystick has been pressed | | **"WARNING: Assisted teleoperation OFF due to sensor timeout"** | Communication has been lost between the assisted teloperation node and one of the configured 2D/3D detection sensors. | | **"Warning: Robot is in a collision state and cannot be driven while assisted teleop is enabled. Please disable assisted teleop to recover."** | The robot is is a state where is is too close to an obstacle. This will mostly occur when you are at a charge dock but may also occur if you are driving/rotating in a tight space. You may need to disable the Teleop Assist to continue remote operation | diff --git a/docs_outdoornav_user_manual/release_notes.mdx b/docs_outdoornav_user_manual/release_notes.mdx index 97c739d8..12b41fe2 100644 --- a/docs_outdoornav_user_manual/release_notes.mdx +++ b/docs_outdoornav_user_manual/release_notes.mdx @@ -20,7 +20,8 @@ toc_max_heading_level: 4 software as long as they are eligible to be upgraded to the newest version. Please contact [Support](./support.mdx) for more information. - New visualization of status command in CLI tool -- Added a filebrowser extension to access/view the robot filesystem +- Added a filebrowser extension to access/view the robot filesystem for easier + media access ### API Features @@ -40,6 +41,7 @@ toc_max_heading_level: 4 installed causes duplication of axis driver. Please contact [Support](./support.mdx) if you run into this issue. - 2344: Autonomy not going down during low-power mode +- 2360: Waypoint/Map modes use different mouse click to open context menus ## 0.11.0