From b4328d1c6d5ad5480395719deae807f97ac13182 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 3 Aug 2022 18:56:00 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BB=98?= =?UTF-8?q?=E5=88=B6=E8=BD=A8=E8=BF=B9=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxi/model/NaviToDestinationModel.java | 17 +- config.gradle | 2 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 7 +- .../hmi/ui/widget/SteeringWheelView.java | 20 +- .../function/overview/vm/OverViewModel.kt | 4 +- .../core/function/smp/AMapCustomView.java | 522 ++++++++++++------ .../core/function/smp/MarkerDrawerManager.kt | 169 ++++++ .../function/smp/OverviewMapFragment.java | 6 + .../amap_bus_corner.png | Bin 0 -> 42264 bytes .../amap_bus_smooth_route.png | Bin 0 -> 879 bytes .../arrow_arrived_img.png | Bin 0 -> 443 bytes .../drawable-xhdpi-2560x1440/map_bus_icon.png | Bin 0 -> 7059 bytes .../res/drawable-xhdpi/amap_bus_corner.png | Bin 0 -> 42264 bytes .../drawable-xhdpi/amap_bus_smooth_route.png | Bin 0 -> 879 bytes .../res/drawable-xhdpi/arrow_arrived_img.png | Bin 0 -> 443 bytes .../main/res/drawable-xhdpi/map_bus_icon.png | Bin 0 -> 7059 bytes .../res/layout/module_overview_map_view.xml | 4 +- 17 files changed, 544 insertions(+), 207 deletions(-) create mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MarkerDrawerManager.kt create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/amap_bus_corner.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/amap_bus_smooth_route.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/arrow_arrived_img.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/map_bus_icon.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/amap_bus_corner.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/amap_bus_smooth_route.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/arrow_arrived_img.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/map_bus_icon.png diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java index e4e3a0f113..84a387ead4 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java @@ -14,7 +14,6 @@ import com.amap.api.navi.model.AMapLaneInfo; import com.amap.api.navi.model.AMapModelCross; import com.amap.api.navi.model.AMapNaviCameraInfo; import com.amap.api.navi.model.AMapNaviCross; -import com.amap.api.navi.model.AMapNaviInfo; import com.amap.api.navi.model.AMapNaviLocation; import com.amap.api.navi.model.AMapNaviRouteNotifyData; import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo; @@ -23,7 +22,6 @@ import com.amap.api.navi.model.AimLessModeCongestionInfo; import com.amap.api.navi.model.AimLessModeStat; import com.amap.api.navi.model.NaviInfo; import com.amap.api.navi.model.NaviLatLng; -import com.autonavi.tbt.TrafficFacilityInfo; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; @@ -279,6 +277,11 @@ public class NaviToDestinationModel implements AMapNaviListener { } + @Override + public void onGpsSignalWeak(boolean b) { + + } + @Override public void updateCameraInfo(AMapNaviCameraInfo[] aMapCameraInfos) { @@ -289,21 +292,11 @@ public class NaviToDestinationModel implements AMapNaviListener { } - @Override - public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) { - - } - @Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) { //已过时 } - @Override - public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) { - - } - @Override public void showCross(AMapNaviCross aMapNaviCross) { //显示放大图回调 diff --git a/config.gradle b/config.gradle index 183c9f761d..7a7963b54e 100644 --- a/config.gradle +++ b/config.gradle @@ -38,7 +38,7 @@ ext { // amapnavi3dmap : "com.amap.api:navi-3dmap:8.0.1_3dmap8.0.1", // amapsearch : "com.amap.api:search:7.9.0", // amaplocation : "com.amap.api:location:5.5.0", - amapnavi3dmap : "com.amap.api:navi-3dmap:7.2.0_3dmap7.2.0", + amapnavi3dmap : "com.amap.api:navi-3dmap:7.7.0_3dmap7.7.0", amapsearch : "com.amap.api:search:7.1.0", amaplocation : "com.amap.api:location:5.3.1", // json 转换 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 901e32a7bb..e4e5faa093 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -172,10 +172,11 @@ import java.util.* } } - /*ivCameraIcon?.setOnLongClickListener { - activity?.let { it1 -> CarcorderPreviewView.show(it1) } + ivCameraIcon?.setOnLongClickListener { + showSmallFragment() +// activity?.let { it1 -> CarcorderPreviewView.show(it1) } true - }*/ + } ivToolsIcon?.setOnClickListener { if (toolsViewFloat == null) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java index 7fb56ed8d9..67594f090e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java @@ -129,14 +129,26 @@ public class SteeringWheelView extends ConstraintLayout { if (autopilotIV != null) { Log.d(TAG, "autopilotIV != null"); if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + // TODO - autopilotIV.setImageResource(R.drawable.bg_auto); - + } else { + autopilotIV.setImageResource(R.drawable.bg_auto); + } } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - autopilotIV.setImageResource(R.drawable.bg_auto_nor); + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + // TODO + } else { + autopilotIV.setImageResource(R.drawable.bg_auto_nor); + } } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - autopilotIV.setImageResource(R.drawable.bg_auto_nor); + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + // TODO + + } else { + autopilotIV.setImageResource(R.drawable.bg_auto_nor); + } } } else { Log.d(TAG, "autopilotIV=null"); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/vm/OverViewModel.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/vm/OverViewModel.kt index 6b5fb5c6fd..59440482c8 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/vm/OverViewModel.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/vm/OverViewModel.kt @@ -1,15 +1,17 @@ package com.mogo.eagle.core.function.overview.vm import androidx.lifecycle.* +import com.amap.api.maps.model.LatLng import com.mogo.eagle.core.data.map.Infrastructure import com.mogo.eagle.core.function.overview.OverviewDao +import io.reactivex.disposables.CompositeDisposable import kotlinx.coroutines.launch -import java.lang.Exception class OverViewModel( private val overviewDao: OverviewDao ) : ViewModel() { private val _infStructures = MutableLiveData>() + val infStructures get() = _infStructures diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java index bc506d5711..41b6c130dc 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java @@ -2,9 +2,7 @@ package com.mogo.eagle.core.function.smp; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; -import android.location.Location; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; @@ -20,26 +18,27 @@ import androidx.annotation.Nullable; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; -import com.amap.api.maps.CoordinateConverter; +import com.amap.api.maps.TextureMapView; import com.amap.api.maps.UiSettings; +import com.amap.api.maps.model.BitmapDescriptor; import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.CustomMapStyleOptions; import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.Polyline; -import com.amap.api.navi.AMapNavi; +import com.amap.api.maps.model.PolylineOptions; import com.amap.api.navi.AMapNaviListener; -import com.amap.api.navi.AMapNaviView; import com.amap.api.navi.AMapNaviViewListener; -import com.amap.api.navi.AMapNaviViewOptions; -import com.amap.api.navi.enums.NaviType; import com.amap.api.navi.model.AMapCalcRouteResult; import com.amap.api.navi.model.AMapLaneInfo; import com.amap.api.navi.model.AMapModelCross; import com.amap.api.navi.model.AMapNaviCameraInfo; import com.amap.api.navi.model.AMapNaviCross; -import com.amap.api.navi.model.AMapNaviInfo; import com.amap.api.navi.model.AMapNaviLocation; +import com.amap.api.navi.model.AMapNaviPathGroup; import com.amap.api.navi.model.AMapNaviRouteNotifyData; import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo; import com.amap.api.navi.model.AMapServiceAreaInfo; @@ -47,9 +46,7 @@ import com.amap.api.navi.model.AimLessModeCongestionInfo; import com.amap.api.navi.model.AimLessModeStat; import com.amap.api.navi.model.NaviInfo; import com.amap.api.navi.model.NaviLatLng; -import com.amap.api.navi.model.RouteOverlayOptions; -import com.autonavi.tbt.TrafficFacilityInfo; -import com.elegant.utils.UiThreadHandler; +import com.amap.api.navi.model.NaviPoi; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.Infrastructure; @@ -67,9 +64,9 @@ import com.mogo.eagle.core.function.overview.InfStructureManager; import com.mogo.eagle.core.function.smp.view.ISmallMapDirectionView; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils; -import com.mogo.eagle.core.utilcode.util.ThreadUtils; -import com.mogo.module.common.utils.DrivingDirectionUtils; -import com.zhidao.support.adas.high.AdasManager; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; +import com.zhidaoauto.map.sdk.open.tools.MapTools; import org.jetbrains.annotations.NotNull; @@ -79,6 +76,7 @@ import java.util.List; import java.util.Map; import ch.hsr.geohash.GeoHash; +import kotlin.Pair; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; import system_master.SystemStatusInfo; @@ -94,8 +92,7 @@ public class AMapCustomView extends RelativeLayout implements IMoGoMapLocationListener, ISmallMapDirectionView, AMapNaviListener, AMapNaviViewListener { public static final String TAG = "AMapCustomView"; - private AMapNaviView mAMapNaviView; - protected AMapNavi mAMapNavi; + private TextureMapView mAMapView; private AMap mAMap; protected NaviLatLng mStartLatlng = new NaviLatLng(); protected NaviLatLng mEndLatlng = new NaviLatLng(); @@ -116,6 +113,27 @@ public class AMapCustomView private Map> pathMap = new HashMap(); private Map> posInfMap = new HashMap(); + // 独立路径导航 + private NaviPoi mStartPoi = null; + private NaviPoi mEndPoi = null; + private AMapNaviPathGroup mIndependentPathGroup = null; + private List mIndependentPointList = new ArrayList<>(); + + // =============绘制轨迹线相关============= + private Marker mCarMarker; + private Marker mStartMarker; + private Marker mEndMarker; + private Polyline mCustomPolyline; + // 计算索引并设置对应的Bitmap + BitmapDescriptor arrivedBitmap; + BitmapDescriptor unArrivedBitmap; + // 绘制轨迹线的集合 + private List textureList = new ArrayList<>(); + private List texIndexList = new ArrayList<>(); + + private MogoLocation mLocation; + private boolean isFirstLocation = true; + public AMapCustomView(Context context) { this(context, null); } @@ -136,16 +154,18 @@ public class AMapCustomView private void initView(Context context) { mContext = context; View smpView = LayoutInflater.from(context).inflate(R.layout.module_overview_map_view, this); - mAMapNaviView = smpView.findViewById(R.id.aMapNaviView); + mAMapView = smpView.findViewById(R.id.aMapView); overLayerView = findViewById(R.id.overLayer); - if(AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { + if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { overLayerView.setBackground(getResources().getDrawable(R.drawable.amap_reset)); - }else { + arrivedBitmap = BitmapDescriptorFactory.fromResource(R.drawable.arrow_arrived_img); + unArrivedBitmap = BitmapDescriptorFactory.fromResource(R.drawable.amap_bus_smooth_route); +// unArrivedBitmap = BitmapDescriptorFactory.fromResource(R.drawable.amap_custom_smooth_route); + } else { overLayerView.setBackground(getResources().getDrawable(R.drawable.amap_reset_bus)); + arrivedBitmap = BitmapDescriptorFactory.fromResource(R.drawable.arrow_arrived_img); + unArrivedBitmap = BitmapDescriptorFactory.fromResource(R.drawable.amap_bus_smooth_route); } - mAMapNavi = AMapNavi.getInstance(context); - mAMapNavi.addAMapNaviListener(this); - mAMapNaviView.setAMapNaviViewListener(this); CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); initAMapView(context); @@ -153,18 +173,32 @@ public class AMapCustomView CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); //设置全览模式 overLayerView.setOnClickListener(v -> { - mAMapNaviView.displayOverview(); +// mAMapView.displayOverview(); + CallerHmiManager.INSTANCE.hideSmallFragment(); }); - // 注册定位监听 - CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); - CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); } private void initAMapView(Context context) { Log.d(TAG, "initAMapView"); mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); - mAMap = mAMapNaviView.getMap(); + mAMap = mAMapView.getMap(); + mAMap.setOnMapLoadedListener(() -> { + Log.d(TAG, "---onMapLoaded---"); + CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions(); + // 加载自定义样式 + customMapStyleOptions.setEnable(true); + if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { + customMapStyleOptions.setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext(), "over_view_style.data")); + customMapStyleOptions.setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext(), "over_view_style_extra.data")); + } else { + customMapStyleOptions.setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext(), "over_view_style_bus.data")); + customMapStyleOptions.setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext(), "over_view_style_extra_bus.data")); + } + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions); + // 实时路况图层关闭,必须添加在loaded结束之后,其他位置不生效 + mAMap.setTrafficEnabled(false); + }); setUpMap(); customOptions(); } @@ -195,43 +229,68 @@ public class AMapCustomView * 自定义导航View和路况状态 */ private void customOptions() { - AMapNaviViewOptions options = mAMapNaviView.getViewOptions(); +// AMapNaviViewOptions options = mAMapView.getViewOptions(); //关闭自动绘制路线,自行绘制路线 // options.setAutoDrawRoute(false); //不显示导航界面 - options.setLayoutVisible(false); - options.setTilt(60); - //黑夜模式 - options.setNaviNight(true); - //导航全程光柱 - options.setTrafficBarEnabled(false); - //隐藏摄像头 - options.setCameraBubbleShow(false); - //转向箭头 - options.setNaviArrowVisible(false); +// options.setLayoutVisible(false); +// options.setTilt(60); +// //黑夜模式 +// options.setNaviNight(true); +// //导航全程光柱 +// options.setTrafficBarEnabled(false); +// //隐藏摄像头 +// options.setCameraBubbleShow(false); +// //转向箭头 +// options.setNaviArrowVisible(false); +// // 算路成功后自动进入全览模式 +// options.setAutoDisplayOverview(true); //指南针 // options.setCompassEnabled(false); // options.setTilt((int) tilt); - //自车车标 - options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.map_car_icon)); - options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.amap_custom_corner)); - options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); - options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.icon_module_small_map_four_corners)); - options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); - //与走过的路线 - options.setAfterRouteAutoGray(true); //路线纹理自定义 - RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); - routeOverlayOptions.setTurnArrowIs3D(false); - // 未知路段和导航路段颜色一样 - routeOverlayOptions.setUnknownTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_smooth_route));//未知路段 - routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_smooth_route)); - routeOverlayOptions.setJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_bad));//拥堵路段 - routeOverlayOptions.setVeryJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_grayred));//超级拥堵路段 - routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_pass_route));//走过的路段 - options.setRouteOverlayOptions(routeOverlayOptions); - mAMapNaviView.setTrafficLightsVisible(true); - mAMapNaviView.setViewOptions(options); +// RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); + if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { + // TODO:("导航的配置需要删除") + mCarMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.map_car_icon)) + .anchor(0.5f, 0.5f)); + +// //自车车标 +// options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.map_car_icon)); +// options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.amap_custom_corner)); + // 未知路段和导航路段颜色一样 +// routeOverlayOptions.setUnknownTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_smooth_route));//未知路段 +// routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_smooth_route)); + } else { + // TODO:("导航的配置需要删除") + mCarMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.map_bus_icon)) + .anchor(0.5f, 0.5f)); + +// options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.map_bus_icon)); +// options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.amap_bus_corner)); +// routeOverlayOptions.setUnknownTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_bus_smooth_route));//未知路段 +// routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_bus_smooth_route)); + } + + mStartMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_start))); + mEndMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_end))); + +// options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); +// options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.icon_module_small_map_four_corners)); +// options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); +// //与走过的路线 +// options.setAfterRouteAutoGray(true); +// routeOverlayOptions.setTurnArrowIs3D(false); +// routeOverlayOptions.setJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_bad));//拥堵路段 +// routeOverlayOptions.setVeryJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_grayred));//超级拥堵路段 +// routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_pass_route));//走过的路段 +// options.setRouteOverlayOptions(routeOverlayOptions); +// mAMapView.setTrafficLightsVisible(true); +// mAMapView.setViewOptions(options); } private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() { @@ -263,27 +322,24 @@ public class AMapCustomView @Override public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autoPilotStatusInfo) { - ThreadUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - if (autoPilotStatusInfo == null) return; - int state = autoPilotStatusInfo.getState(); - //0 不能自动驾驶 1 可以自动驾驶,但是在人工干预 2 自动驾驶中 - if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - Log.d(TAG, "自动驾驶中 state=" + String.valueOf(state)); - if (sList.size() == 0 && eList.size() == 0 && mWayPointList.size() == 0) { - Log.d(TAG, "sendGlobalPathReq"); - AdasManager.getInstance().sendGlobalPathReq(); - } - } else { - int type = mAMapNavi.getNaviType(); - Log.d(TAG, "非自动驾驶状态,导航类型==" + String.valueOf(type)); - if (type == NaviType.GPS || type == NaviType.EMULATOR) { - mAMapNavi.stopNavi(); - } - } - } - }); +// ThreadUtils.runOnUiThread(() -> { +// if (autoPilotStatusInfo == null) return; +// int state = autoPilotStatusInfo.getState(); +// //0 不能自动驾驶 1 可以自动驾驶,但是在人工干预 2 自动驾驶中 +// if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { +//// Log.d(TAG, "自动驾驶中 state=" + String.valueOf(state)); +// if (sList.size() == 0 && eList.size() == 0 && mWayPointList.size() == 0) { +// Log.d(TAG, "sendGlobalPathReq"); +// AdasManager.getInstance().sendGlobalPathReq(); +// } +// } else { +// int type = mAMapNavi.getNaviType(); +// Log.d(TAG, "非自动驾驶状态,导航类型==" + String.valueOf(type)); +// if (type == NaviType.GPS || type == NaviType.EMULATOR) { +// mAMapNavi.stopNavi(); +// } +// } +// }); } }; @@ -307,37 +363,62 @@ public class AMapCustomView calculate = true; Log.d(TAG, "onAutopilotRotting"); List list = globalPathResp.getWayPointsList(); - int minCount = 2; - if (list.size() >= minCount) { - calculate = true; - MessagePad.Location sLocation = (MessagePad.Location) list.get(0); - MessagePad.Location eLocation = (MessagePad.Location) list.get(list.size() - 1); - mStartLatlng = new NaviLatLng(sLocation.getLatitude(), sLocation.getLongitude()); - mEndLatlng = new NaviLatLng(eLocation.getLatitude(), eLocation.getLongitude()); - sList.clear(); - eList.clear(); - sList.add(mStartLatlng); - eList.add(mEndLatlng); +// int minCount = 2; +// if (list.size() >= minCount && sList.size() == 0 && eList.size() == 0 && mWayPointList.size() == 0) { +// calculate = true; +// MessagePad.Location sLocation = (MessagePad.Location) list.get(0); +// MessagePad.Location eLocation = (MessagePad.Location) list.get(list.size() - 1); +// mStartLatlng = new NaviLatLng(sLocation.getLatitude(), sLocation.getLongitude()); +// mEndLatlng = new NaviLatLng(eLocation.getLatitude(), eLocation.getLongitude()); +// mStartPoi = new NaviPoi("", new LatLng(sLocation.getLatitude(), sLocation.getLongitude()), ""); +// mEndPoi = new NaviPoi("", new LatLng(eLocation.getLatitude(), eLocation.getLongitude()), ""); +// sList.clear(); +// eList.clear(); +// sList.add(mStartLatlng); +// eList.add(mEndLatlng); +// +// mWayPointList.clear(); +// mIndependentPointList.clear(); +// for (int i = 1; i < list.size() - minCount; i++) { +// MessagePad.Location wayLoc = (MessagePad.Location) list.get(i); +// NaviLatLng way = new NaviLatLng(wayLoc.getLatitude(), wayLoc.getLongitude()); +// NaviPoi naviPoi = new NaviPoi("", new LatLng(wayLoc.getLatitude(), wayLoc.getLongitude()), ""); +// mWayPointList.add(way); +// mIndependentPointList.add(naviPoi); +// } +// } +// int strategy = 0; +// try { +// //再次强调,最后一个参数为true时代表多路径,否则代表单路径 +// strategy = mAMapNavi.strategyConvert(true, false, false, false, false); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// Log.d(TAG, "全局路径" + list.size() + ",起点:" + sList.toString() + ",终点:" + eList.toString() + ",经点:" + mWayPointList.toString()); +// //指定路径绘制导航路线 +// mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy); - mWayPointList.clear(); - for (int i = 1; i < list.size() - minCount; i++) { - MessagePad.Location wayLoc = (MessagePad.Location) list.get(i); - NaviLatLng way = new NaviLatLng(wayLoc.getLatitude(), wayLoc.getLongitude()); - mWayPointList.add(way); - } - } - int strategy = 0; - try { - //再次强调,最后一个参数为true时代表多路径,否则代表单路径 - strategy = mAMapNavi.strategyConvert(true, false, false, false, false); - } catch (Exception e) { - e.printStackTrace(); - } - Log.d(TAG, "全局路径" + list.size() + ",起点:" + sList.toString() + ",终点:" + eList.toString() + ",经点:" + mWayPointList.toString()); - //指定路径绘制导航路线 - mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy); - - drawInfrastructureMarkers(globalPathResp); + // 转成高德坐标系并存储 + MarkerDrawerManager.INSTANCE.updateRoutePoints(list, mContext); + List planningPointList = MarkerDrawerManager.INSTANCE.getPlanningPoints(); + UiThreadHandler.post(() -> { + displayCustomOverView(); + drawStartAndEndMarker(planningPointList); + }); + MarkerDrawerManager.INSTANCE.setCallback((points, locIndex) -> { + UiThreadHandler.post(() -> { + // 每1s刷新一下轨迹线 + if (points.size() > 0) { + drawPolyline(points , locIndex); + } else { + clearCustomPolyline(); + } + }); + }); + MarkerDrawerManager.INSTANCE.startLoopCalCarLocation(); + UiThreadHandler.post(() -> { + drawInfrastructureMarkers(globalPathResp); + }); } }; @@ -358,53 +439,19 @@ public class AMapCustomView @Override public void onLocationChanged(@org.jetbrains.annotations.Nullable MogoLocation location, int from) { - - } - - private void removeLocation(Location latLng) { - for (LatLng l : mCoordinatesLatLng) { - if (!isPointOnCarFront(latLng, l)) { - mCoordinatesLatLng.remove(l); - } + mLocation = location; + MarkerDrawerManager.INSTANCE.setLonLat(new Pair(location.getLongitude(), location.getLatitude())); + drawCarMarker(location); + if (isFirstLocation) { + displayCustomOverView(); + isFirstLocation = false; } } - public static boolean isPointOnCarFront(Location carLocal, LatLng pointLocal) { - double carLon = carLocal.getLongitude(); - double carLat = carLocal.getLatitude(); - double poiLon = pointLocal.longitude; - double poiLat = pointLocal.latitude; - float carAngle = carLocal.getBearing(); - - // 计算车辆与点之间的夹角 - int diffAngle = DrivingDirectionUtils.getDegreeOfCar2Poi( - carLon, carLat, poiLon, poiLat, (int) carAngle); - - return diffAngle <= 90; - } - - @Override public void drawablePolyline() { } - - public LatLng CoordinateConverterFrom84(Context mContext, MogoLatLng mogoLatLng) { - CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); - mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); - mCoordinateConverter.coord(new LatLng(mogoLatLng.lat, mogoLatLng.lon)); - return mCoordinateConverter.convert(); - } - - public List CoordinateConverterFrom84ForList(Context mContext, List mogoLatLngList) { - List list = new ArrayList<>(); - for (MogoLatLng m : mogoLatLngList) { - LatLng mogoLatLng = CoordinateConverterFrom84(mContext, m); - list.add(mogoLatLng); - } - return list; - } - @Override public void clearPolyline() { if (mPolyline != null) { @@ -412,6 +459,12 @@ public class AMapCustomView } } + public void clearCustomPolyline() { + if (mCustomPolyline != null) { + mCustomPolyline.remove(); + } + } + public void resetPolyLine() { mCoordinatesLatLng.clear(); if (mPolyline != null) { @@ -420,34 +473,34 @@ public class AMapCustomView } public void onCreateView(Bundle savedInstanceState) { - if (mAMapNaviView != null) { - mAMapNaviView.onCreate(savedInstanceState); + if (mAMapView != null) { + mAMapView.onCreate(savedInstanceState); } } public void onResume() { - if (mAMapNaviView != null) { - mAMapNaviView.onResume(); + if (mAMapView != null) { + mAMapView.onResume(); } } public void onPause() { - if (mAMapNaviView != null) { - mAMapNaviView.onPause(); + if (mAMapView != null) { + mAMapView.onPause(); } } public void onDestroy() { - if (mAMapNaviView != null) { - mAMapNaviView.onDestroy(); + if (mAMapView != null) { + mAMapView.onDestroy(); } - //since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行 - if (mAMapNavi != null) { - mAMapNavi.stopNavi(); - mAMapNavi.destroy(); - } - if (mAMapNaviView != null) { - mAMapNaviView.onDestroy(); +// //since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行 +// if (mAMapNavi != null) { +// mAMapNavi.stopNavi(); +// mAMapNavi.destroy(); +// } + if (mAMapView != null) { + mAMapView.onDestroy(); } } @@ -542,11 +595,6 @@ public class AMapCustomView Log.d(TAG, "onNaviInfoUpdate"); } - @Override - public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) { - Log.d(TAG, "onNaviInfoUpdated"); - } - @Override public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) { Log.d(TAG, "updateCameraInfo"); @@ -612,11 +660,6 @@ public class AMapCustomView } - @Override - public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) { - - } - @Override public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) { @@ -636,16 +679,10 @@ public class AMapCustomView @Override public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { Log.d(TAG, "onCalculateRouteSuccess aMapCalcRouteResult" + aMapCalcRouteResult.toString()); - //提测修改为EMULATOR - mAMapNavi.startNavi(NaviType.GPS); - UiThreadHandler.postDelayed(() -> { - mAMapNaviView.displayOverview(); - }, 2000); - //停止导航测试代码 +// mAMapNavi.startNavi(NaviType.GPS); // UiThreadHandler.postDelayed(() -> { -// mAMapNavi.stopNavi(); -// Log.d(TAG, "stop------------"); -// }, 20000); +// mAMapView.displayOverview(); +// }, 500); } @Override @@ -658,6 +695,11 @@ public class AMapCustomView Log.d(TAG, "onNaviRouteNotify"); } + @Override + public void onGpsSignalWeak(boolean b) { + + } + @Override public void onNaviSetting() { @@ -727,6 +769,10 @@ public class AMapCustomView } + /** + * 绘制新基建Markers(比如:摄像头) + * @param globalPathResp + */ private void drawInfrastructureMarkers(MessagePad.GlobalPathResp globalPathResp) { if (globalPathResp != null) { if (!pathMap.isEmpty()) { @@ -734,7 +780,11 @@ public class AMapCustomView } String geoHash; ArrayList infList; + StringBuilder sb1 = new StringBuilder(); for (MessagePad.Location location : globalPathResp.getWayPointsList()) { + LonLatPoint p = new LonLatPoint(location.getLongitude(), location.getLatitude()); + p = MapTools.INSTANCE.switchLonLatWGS84(p); + sb1.append(p.getLongitude()).append(",").append(p.getLatitude()).append("\n"); geoHash = GeoHash.withCharacterPrecision(location.getLatitude(), location.getLongitude(), 7).toBase32(); // 网格内的轨迹点只取一次 if (!pathMap.containsKey(geoHash)) { @@ -745,6 +795,7 @@ public class AMapCustomView } } } + String str1 = sb1.toString(); drawInfMarkers(pathMap); } } @@ -782,7 +833,7 @@ public class AMapCustomView }); } - private Bitmap getBitmap(int count) { + private Bitmap getBitmap(int count) { MakerWithCount marker = new MakerWithCount(getContext()); marker.setCount(count); @@ -793,4 +844,107 @@ public class AMapCustomView marker.draw(new Canvas(bitmap)); return bitmap; } + + /** + * 进入自定义全览模式 + */ + private void displayCustomOverView() { + ArrayList linePointsLatLng = MarkerDrawerManager.INSTANCE.getPlanningPoints(); + MogoLocation location = mLocation; + if (linePointsLatLng.size() > 1){ + //圈定地图显示范围 + //存放经纬度 + LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); + for (int i = 0; i < linePointsLatLng.size(); i++) { + boundsBuilder.include(linePointsLatLng.get(i)); + } + LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude()); + boundsBuilder.include(currentLatLng); + //第二个参数为四周留空宽度 + mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),50,50,50,50)); + }else { + //设置希望展示的地图缩放级别 + CameraPosition cameraPosition = new CameraPosition.Builder() + .target(mCarMarker.getPosition()).tilt(0).bearing(location.getBearing()).zoom(zoomLevel).build(); + mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); + } + } + + /** + * 绘制自车 + * @param location + */ + private void drawCarMarker(MogoLocation location) { + if (location == null) return; + if (mCarMarker != null) { + LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude()); + mCarMarker.setRotateAngle(360 - location.getBearing()); + mCarMarker.setPosition(currentLatLng); + mCarMarker.setToTop(); + } + } + + /** + * 绘制起始点、终点 + */ + private void drawStartAndEndMarker(List coordinates) { + if (mStartMarker != null) { + mStartMarker.setVisible(false); + } + if (mEndMarker != null) { + mEndMarker.setVisible(false); + } + if (coordinates.size() > 2) { + // 设置开始结束Marker位置 + + LatLng startLatLng = coordinates.get(0); + LatLng endLatLng = coordinates.get(coordinates.size() - 1); + + mStartMarker.setPosition(startLatLng); + mEndMarker.setPosition(endLatLng); + mStartMarker.setVisible(true); + mEndMarker.setVisible(true); + } + } + + /** + * 绘制轨迹线 + * @param coordinates + * @param locIndex + */ + private void drawPolyline(List coordinates,int locIndex) { + if (textureList.size() > 0) { + textureList.clear(); + } + if (texIndexList.size() > 0) { + texIndexList.clear(); + } + for (int i = 0; i < coordinates.size(); i++){ + if (i <= locIndex){ + // 已走过的置灰 + textureList.add(arrivedBitmap); + } else { + // 未走过的纹理 + textureList.add(unArrivedBitmap); + } + texIndexList.add(i); + } + + if (mCustomPolyline != null) { + mCustomPolyline.remove(); + } + if (mAMap != null && coordinates.size() > 2) { + //设置线段纹理 + PolylineOptions polylineOptions = new PolylineOptions(); + polylineOptions.addAll(coordinates); +// polylineOptions.useGradient(true); + polylineOptions.width(12); //线段宽度 + polylineOptions.isUseTexture(); + polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); + polylineOptions.setCustomTextureList(textureList); + polylineOptions.setCustomTextureIndex(texIndexList); + // 绘制线 + mCustomPolyline = mAMap.addPolyline(polylineOptions); + } + } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MarkerDrawerManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MarkerDrawerManager.kt new file mode 100644 index 0000000000..9d4771f2f2 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/MarkerDrawerManager.kt @@ -0,0 +1,169 @@ +package com.mogo.eagle.core.function.smp + +import android.content.Context +import android.util.Log +import com.amap.api.maps.CoordinateConverter +import com.amap.api.maps.model.LatLng +import com.mogo.cloud.commons.utils.CoordinateUtils +import io.reactivex.Observable +import io.reactivex.ObservableOnSubscribe +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.schedulers.Schedulers +import mogo.telematics.pad.MessagePad +import java.util.concurrent.TimeUnit + +/** + * 自定义高德地图画线管理者 + */ +object MarkerDrawerManager { + + interface Callback { + fun onLocationChanged(planningPoints: List, locIndex: Int) + } + + private val routeWipeDisposable by lazy { + CompositeDisposable() + } + + // 自主画线的所有高德坐标系的轨迹点 + val planningPoints by lazy { + ArrayList() + } + + @Volatile + var lastArrivedIndex: Int = -1 + + @Volatile + var lonLat = Pair(0.0, 0.0) + + var callback: Callback? = null + + fun startLoopCalCarLocation() { + getLoopCalCarObservable().delay(1000L, TimeUnit.MILLISECONDS, true) + .subscribeOn(Schedulers.io()) + .repeat() + .retry() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe().let { + routeWipeDisposable.add(it) + } + } + + fun stopLoopCalCarLocation() { + if (!routeWipeDisposable.isDisposed) { + routeWipeDisposable.dispose() + } + } + + private fun getLoopCalCarObservable(): Observable { + return Observable.create(ObservableOnSubscribe { emitter -> + if (emitter.isDisposed) return@ObservableOnSubscribe + synchronized(this) { + loopRouteAndWipe(planningPoints, lonLat.first, lonLat.second) + } + emitter.onComplete() + }) + } + + private fun loopRouteAndWipe(routePoints: List?, lon: Double, lat: Double) { + if (routePoints != null && routePoints.isNotEmpty()) { + val arrivedIndex: Int = getArrivedPointIndex(routePoints, lon, lat) + Log.d("cff", "thread is:${Thread.currentThread().name},arrivedIndex is:$arrivedIndex") + if (arrivedIndex != -1 && lastArrivedIndex != arrivedIndex) { + callback?.onLocationChanged(routePoints, arrivedIndex) + lastArrivedIndex = arrivedIndex + } + } + } + + fun updateRoutePoints(routePoints: List?, context: Context) { + if (routePoints == null || routePoints.isEmpty()) return + val latLngModels = coordinateConverterWgsToGcjListCommon(context, routePoints) + synchronized(this) { + planningPoints.clear() + planningPoints.addAll(latLngModels) + } +// float remainingSumLength = calculateRemainingSumLength(mRoutePoints); + } + + /** + * @param routePoints + * @param realLon + * @param realLat + * @return 返回已经到达点的index + */ + private fun getArrivedPointIndex( + routePoints: List, + realLon: Double, + realLat: Double + ): Int { + var currentIndex = 0 //记录疑似点 + if (routePoints.isNotEmpty()) { + //基础点 + val baseLatLng = routePoints[0] + var baseDiffDis = CoordinateUtils.calculateLineDistance( + realLon, realLat, baseLatLng.longitude, baseLatLng.latitude + ) // lon,lat, prelon, prelat + for (i in 1 until routePoints.size) { + val latLng = routePoints[i] + val diff = CoordinateUtils.calculateLineDistance( + realLon, realLat, latLng.longitude, latLng.latitude + ) + if (baseDiffDis > diff) { + baseDiffDis = diff + currentIndex = i + } + } + return currentIndex + } + return currentIndex + } + + /** + * + * @param points + * @return 剩余的总距离 + */ + private fun calculateRemainingSumLength(points: List?): Float { + if (null == points || points.isEmpty()) return 0F + var sumLength = 0f + + //计算全路径总距离 + var i = 0 + while (i + 1 < points.size) { + val preLat = points[i].latitude + val preLon = points[i].longitude + val laLat = points[i + 1].latitude + val laLon = points[i + 1].longitude + val length = CoordinateUtils.calculateLineDistance(laLon, laLat, preLon, preLat) + sumLength += length + i++ + } + return sumLength + } + + private fun coordinateConverterWgsToGcjListCommon( + mContext: Context, + models: List + ): List { + //转成MogoLatLng集合 + val list: MutableList = java.util.ArrayList() + for (m in models) { + val mogoLatLng = coordinateConverterWgsToGcj(mContext, m) + list.add(mogoLatLng) + } + return list + } + + private fun coordinateConverterWgsToGcj( + mContext: Context, + mogoLatLng: MessagePad.Location + ): LatLng { + val mCoordinateConverter = + CoordinateConverter(mContext) + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS) + mCoordinateConverter.coord(LatLng(mogoLatLng.latitude, mogoLatLng.longitude)) + return mCoordinateConverter.convert() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/OverviewMapFragment.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/OverviewMapFragment.java index e8a3d3bf49..c864632956 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/OverviewMapFragment.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/OverviewMapFragment.java @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.smp; import android.content.Context; +import android.location.Location; import android.os.Bundle; import android.view.View; @@ -19,7 +20,11 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListen import com.mogo.eagle.core.function.map.R; import com.mogo.eagle.core.function.overview.InfStructureManager; import com.mogo.eagle.core.data.map.Infrastructure; +import com.mogo.eagle.core.function.overview.ViewModelExtKt; +import com.mogo.eagle.core.function.overview.vm.OverViewModel; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.navi.IMogoCarLocationChangedListener2; +import com.mogo.module.common.MogoApisHandler; import org.jetbrains.annotations.NotNull; @@ -27,6 +32,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import kotlin.Pair; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; import system_master.SystemStatusInfo; diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/amap_bus_corner.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/amap_bus_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..840089ceab140470ebed4098344fe2711ddc436f GIT binary patch literal 42264 zcmYJbXIK-@7dD&%0i+2?uZn<3?+O8eNE0c76e*$i-UFco5YQhbDAFN-qKNdO6zM3v zw@?$1-aDc5@PDuCeVz}qGrKz2zJw=>qT*U|z!zHO5NfH6)0qW^WdEiAVM008F#0pQyj z_`hqpp#OV!FBkm(+W+e~zV^5m0Du8Bo-4gZ0Jj>?%7iq$@kXmS0$gNNo;>DXpC_}r zsD^&7klsVfbOs)>vbT`a`5Ez=f}w9R=*eRQNa&*`f9i&ztGn}OorK@l5QQksrE zo6LXIO2kh^N!D)n2O`$0dCt|EQBkhTKr-?;iN5BsOBu)6;~BX5q+uy z`Ui9y@M_?l=bS{{gSg3<&0;D4Xa;F!=#N5Gsb< zY>uIeys(z@j=c_}?)#y79Q%v)E9mvZ1+ph(V^moZxx(Rf{c~|1Rtk*R*$~F-4})AX zI-3`<|E{v2*B;#qVJqtk>v#lcLmcU$?`4)>Q`k(flerlPz1ebzF$zUDtn(2^m%S2h zfs_AUH%LWI!~UJIC>8Dn2%6$v%5+n{=zUC4CM}jij#mdy(q*q*o%__MSmrf0{ zMJhJW@Joh$(o<%Hin-Zp4i#+#vz@L&okRS2}VC_u8+`E zgO?rdB)FXXn5SSh#$zl0BRG~v1WE8|7qF;d6%H$-ifA&tFk+XaL~4}}J=xL!f?KhM z7@mH_aFqbEry~{tMCM5SFxjLB?>X{67|!sa_-f~Vfi{L-L8}vgBh6!Mn(H}BL)UHE zeR5I)Ca%vl>bGwv6vp zp8wRCuf7!;=yvo%X)SkF&qC&E*34W-Be|lKs-yDBXV+=k?*h5~F=jxC@fzXiSc^I~ zj>~_4_bv;51~g>^h3UyUKsNqmaTA(Wu6C|mEUH*Jf{UP=GNg$*F5*85D0Q8zyNQ=5 zVyc=*CwuUblGABh-_ZYx*@&(RIcBPD&WM`cYi7rv==T0&T7Ue!t{QzYudzyur3t1S z;-;>@lV*Tx%sUs^jgeC%B>i^y85a6+AU)j6YJet4@gQ{dS|+DaF8GvSPH6<%+50U? zlBwk4=~T(X!daXt9;V9TH=1plB8}V2YbV2gqz1W^({#oB9475dISKp|X8-jDeEqptXFac-q39uv2KH~;;S)sfe_%Mr+n z;wwj^>PdXpU^T5T%f{pei_a0Ch0@6zJu5H1#x5M^Tvg1eg@q`L@conpFFr8%mvkT+ zjJ=Kz(-RT8QVKsw%0TlBiEGh3aG|wJnkE)O8B(4rj*wcPVq2VZzYW|gwtH19lB`W) z+a0`Off{`u=jZ3ED_x!nbGuH7DZZZMR?C)-Os@>@V-m!MpGgGeZFyXd?W{NB;}10q zBt(UWlBSrVb+!osp`nQF%;S~O8YgRoA5Y(ac7TrQa{Im4eK~fcrlvCm+PI%2MQ1~i zf`wU@4pQH3!b+s=R63sveuaE|)@`kpn(>moCDI+fimC_I2RR<9n<7>XWxmJoh-Mam z-c%26_Lnyw3$<4@?-kDNgm)4`2RoyJ6m{OBko!LEF8Cjb$JAuvoMUFLAa}6lBD)f! z-}H}Ezb6!qnX{xpD@_1{Um1mqY_N9Id4IS>*y@ z*bCFq(WQc*9vZTx&?)%TC4HCP;YW9duq)FThcImzJR{EQayRCgc^aYpc%YPKzGpEs zsc$6*%Ry*&Zs7McQZj8U<~5a0hwTDqrYSZ^yL`&&p7bxq)+X!<)%vGpHUk$D^Ii!< znpQ=>J`IbQZSl|a(TH-TcC69C1v2;1a)ihC8KR5j4;ag0=5F}WmjU=e7)EHe`t9!3 zNWhN8wQBlU^P?|k;^uDDW+A4XgDwupnT}N0*pdcRur|;%{nJuPgDbIXvU2Fb4>H3V zBUDDpl~(RI?H}73Pp`3nA~Ss^Hb&m$bc#KVl}F!|OM%n#wx8SN95`pGI+TkX^>s+@ z`%~Mm&kJ)ky<$km4+r0PC^jOm8D~84MpL!wyQxLjxGPOg`n2m>=#FBZ%TBm}?biEc zTY=7Sa-HZdI>&V7HGYwYIwUWZT#g`Rq-e~v_PcfXnQz^ekc z$=F+z&@9!kza0U{AvdoDPQZeF=0C@xSB7NM2WYCt+octNAIdhPdHyRS@mc#ExbjAb zypcq_dM4j*UK=H?15Si6i^#Yb*LF~}S5bD73K6Q~6&>Z%hNqBrhnn**xelZLi_JMZ z-8&j=uz-)pY1mcbd)JW!kKjg}&b3XD;1P{^!B%8cX)d=}6BYUg*(>C)LeZ2w0taKp zS!NBpQg1M?r^G!xX!4s2(Kbz@c&XSM_lK^6>hGUB6qczi-uKksNmL;5-N5tvG8E7r zPdFfSK76LyHsf+>`pWHo?~As3-`bcB-xXKuUyIwRk2XJR-d(P)wcJf6zs6iK9tki6 z+@wLXFzYOz_9IjPlNV;F&+il2)A@QUqc=-(?FNRtD5^`)dl+Fk3xL2PS@x24@*rl$ zO{SlngPS_>2L|#)U84SMRvYfr7@*xmO&WXdiBs}sxIt+YLU!5dfEQDCE-b|hV+`&-^n%z=8S0CF;#dlY~xbX+fvX$ao6}j3M{T;6u^P zCT{N%A1o5;WNn6WTF1?O-JNMZ87IUP?T$x{Gm1^O-t&LV$1l-Y^5LE-iZGS5xn{ke>?H_)fd>_AseU%P-Q58}pCg|L9y%YDun`3p>tluy>46EnV% zCqz>nPS}t$er;}yF!wh9(6ZXNwxpqgmfj~q(2W^Uw$S0l&@*6}R>hu#d0UD;!4T#? zKuZ1k(n;<&taQ)0IPp~4W4t=_OYXo|>lf$Zt;U6J!Xn}Ipy^;e+Mw0>V>lyfIrJ=; z%VHxs(aL)>Hgv4tw+hvC*Dyxw(c=r3^NCSBo5+DVJWUAq``G04+mQR|JmC)cIdL2j z_5E^Ts`&(Tl(?Wja%p%aq%`n@vJP?SGq2%by0n-sIxhX1O%C$IjFyxaJV!MOpmJfk zm`+%UB+_w{YjEekO32=F0BE8gD= zQD>xs8!-Z5uOXhJ>)s=@Stbipz+{Hsz$@td3kOsMD&;AgQ)6lg2g92*WI4-scO49W zT&eH0x@NWOn`@Wy@rf5jFqt{bgkNMvy;G7}d@P-O>+G~t-%C0K8o4aRrTGEX9nTwH ze3sh7C7L2uJfX#Omqci$Q3e;H;Tm=}cg?=!^=zi0sYtx>)Bd)s{W+s3l{qPg4^iF^ z6aB_gF~$7<{1MwU5;F5|2t*bKW>Q=nL1xn>1zOX_Wq_BMPci6oTFbmqxcqmg0jJbt z2&dgg(8e42!kL@LmMQ1_P6{3M_td7Inn9$id0?5Tvz8dg7)u;zDRzMt(4nS0WWq;U zg=SM5|Dr^KVlB%!3Y+EAi)pMlJ(0aW#~&Yb4!&D3Pw)5}Bop5h)rT)QyD^D3-F$+1 zC{yNwVo9@FGAZufobarR$WmE;r^)pxMuD@ot03Y0a|c^B{X9fayg1w^UTQ-gHiy|f zE^qqe!#BPzlFKCUm}wsJYbG1)m=u|92a&BY;Ft(cm%+q6+;*~Md!|)*I+RI+WO5}g8dXzB!) zaVx*RvRNJ-y%;r%-~OiaG=Y+7QhzfwhgA_Z0acNcRG_K~kx-x3D5DTrSUw5~zvlo_kC)z@)AObUM zgx`z&KHw7~&qh4X=Dn`Wa6Li&&(oh$$7j(8O1@fKZB>a-o>W~e#+))e@hdI7W=V~@T)*w|%i^K$i zApRvw9=Zx)V98CFY4izNVX@~MoE1je`sne_Mz1Eo=S|8)m)Z{n z*n|f`rZb4z<8?GO=V=b-s)w{+tP$fuw$M$>H5L=-aymra!_{OG34KyL@{FjZQb?)9 z8^zF$wU$I@`MN;1ERIvWCw#hIYkd$`pH?XhSdR7D}3rlz*d}o;RcQ zSs2&6n8$Kvn~#>uC>cS!r}hTmwJqD)VP28n4B{8`U1V`d0TX{?IwyXTbOlGM%N7i` z|D-M$016+d$UJ&i-5SKj92m1z znr=th77O2$7X9e2kSLX~f5gl#Ra{yxRSx#plBpAaT}on>I+BF!lTItffTe6=42?o0Ab+xmYo<0h zN4F?gO*{|^n#$2X|f{j`{cGPp5o3 zyav5{EJm_DX75=aLN??++RRvteZoQ7LbtZAhLr|o{tC^Bg9ZmXJDN8X+LpF$ehZFB z*#BaB0168Fw}n>IJ_C`uS#QFSwIV55zIPQm7Yxap!E3W@@Mbx)%b~@i_-|AH#-oCN z_o4{SlQ)|OX#~kfZ7cr*u`T45yy*YpI_6GF&Jd5}%apBSMu8szrpNUsBPaEMP|fcY z?@qrTc2&6#i6>Em(&($>G8x_&EI|Y-leMQLdkDuCS}A4KK0Pc|V>;_Qo&m*W!J)N?D#ytyvM0I%p}_tC%HzwcNF z9@Pln0j6P0bR9f?1i*O?W*&s(nI*8dn8m_~5K^W*X7uXRbnjEazqBSI*ol=r(4t6~eBYAv9QeF#8lMl4BJzcAp2EKs@5ZU%D{~mV188hC! zOdnL5J?9|QjFF}G8ow@vS)BYCq{N0Tc##%#{_WvGUfg(F9v|$DH4CvG7kvQgh3lj0 z7}Q6LoNbk`sP<96c{c!k0*`}E{atYq(%7x8SnM%357L}D7rNJvlI!k%CdmtPEcc@9 zlax%|ev>zBFKgF(?7Q)>*VgUA0$lpSa;VhEGt)i&j^k*bjp!n9n3!FZ4}S)mFoSTh z8!mpRLD(G2kQeTEutY zRL99WczPD~&Ox3EUh;NAt&2%{+a>%y;Wy;-QM7{C4^k1on9+6fBJ9sjVkqi?(kV

9oTwDL0lOX=*om-1aAktzPCvrR;Xhb?Lwn?t@28G;^pXxwohUxu#N+e>1< zBJx?szO`0C?7``9fQ0xe=*`X6+M`Hl&QVw4;Dt?053{s{N>U7Vei0%nFM%U_NB3@F z+|N_jFNH4!hi{Sz-WO>~LZ@{^S$)J0e7gC3)q4}oJ3APNj*yY}Qs5ogaBQM$__SFQ z11MvtThEB;gGk4ibh+)4LX1+G^(k<-)oP zS@;4BRn6Xy@;vZefzgLkqbvPfn=uR3Y;9#>u88aAumbo=n$Yw@r2Z}n@HSk&bCl_GxCq@d$5S1HnL3CJDX$L7}~ z@2CU(6>%Hg1T{W>PAZJ&CBVmJ^Ix0W{b-T?E~PZQGkXb`wwvDT8xzQBJYe7|N&;{+ zC{#eq*OWcxSUH3KQN;e`qY;xaPe)n=3*4pCmY`b4hn$;6Q(x{C;KH%OHutAZ8r`M> zb}i1~LOn8thgGec@)h=4m;l-0w%^WHGi1I@{;1CRpL{q(c^rI1uolY$h-4KVP8Ks834e# zOh9A^k(5%o?#18Un>DqlSB7KYP}n=l{kcVJITvk4{M7HGpWXkys`3|1Swk5M*p+?q zYj=reKPMch+P%go8n>Ig@CG7&feTKcpyup1eOr6d;pZVZCp(tW=0H`OJFf5CpZEG@ zkRB&;0lI*@V;!#&*IE}@N2glhNRNXZOz~uBgL~HoF?cqp?P-s?3Js92rSN* z-*&=U6kccLOP<+f4XL@4jHttrnHdq0St<1;<7Z zaRrVSPjg-t2%qchO^mMjmCf8*u#`KckRUJ0Wl&>=#j(E%Vz~KSr2F#C?=uVVAd4g) zi~Tnf>F@nHE=~iNXY8Z%Qy|;Z^~m5U*41t)z}px!gb}6X;W}ki5GVw*$3v+LfJG~J z*$0#vkH(NZ=a*5`@j`9uyo{Cg)~CubV}<;FJ;i_Iwst84u7B5Trpk9jWuz=Dq)vMn zUm@#%O;y3i*?%}=JgKZsl_U^(K+FD*YYpP-sRG)OHTd1n$~kYk`m|6QMym_-g$|RM zNb})#x`J7#85}I!(DwjFWV==X4=3*jn1PD@xEvIE2rh#fW);%bO!&oMmkUuGmd^HCuBC9?@}<;s1klFOiPt-L{dypPCg3Ocn$ z=4Wew3|KB);AiA6 zla*wM(}VT1J_iRJk$vwM07y28+Lwm+P8ZblOLxqSz-QtC{N7BgL5ah`36_m4JMHZ= z@Ga)g@#Pt#)ZG;mK<9p`UE?AQ&X~QI+?$&ucMoqRe5^<_!NZjzzx{lbC%bp(ONf~4 zK4y~TDP7Sqx~VNP!@@zlzIL-Cb30}6GmYJBoYI8_O@zhMUkUxxH(wOcl7FqCJshX& zM%!*p%Ir>{LqD~KB3@po%Lo|8jY!YxPz-`Qq9hnypSu1EfHXWUeCZkF%0R}Ru?Mi* z&@>qVUQ3q=+>J_A)h6$G=DZ#)_BvXan@ZNLJI0M=Hi<$qUTS*FoN~f7^GFaldex3h z%8#AcTPXxJ{*uupcU=Dptb6`j69N$lyZ8vw~}kxpKA>PryrCVL(;+ z{7S4!2b_^Z;iPs-8d$n65@STa*PE-txvAUgoPq5`1vIYEUncKVDy;?eOO3J|e4=>y z2=dcuqKe4=a8h9Pya30;)lRJwHbfl%>!@SzB_@DBpP>wpY@rP^Wc1OzJD5YK=>Xnt zHKGBQoM*rU^&^ZPq~2_Qx!gaUiqO&wxS+kj#V$nN2rv9$YXES|7Y8}zLS}vTy!Y>z z?4@ucJ|u~;27dszjA8V6~``dDbMLh@nyo_@^ z)Y#|3k@m*$L(9x{U6SZOKsfI^v#AG&{XeY%R0yd^(A<$7QJcL`vExzlJn`BFqvZUQ zN={2r>)i|)Eq^cE=H^GF<6`i!ppA6d3F zJB8ko#!pIfDKEF5xYXPA(C3BGGKA~OotzzIie<8!9-_?Mt&x}ZfzjsH@%OGRvJ6*r zO0Zr!>tBRIY}ait>B{{^Sxe#;cdQnp7>79>Rd!?Y5FW*>-%oy0r(FzDD*8NN&$z|1 zvENuOcH}_!9N4}5^XQzflJK%!ZB*5NKVmfF`5kBT0h~daR5?vgzQ5{X0E#tsxlf*3 zakBkaA#YQFp~Eg2kn2_1h_*D(NL}8gq?QY8<@kZyoo+rM`AHG>yodW9FIwuBs(i!_ zvmTMWKf3t&Q+k+KIGGDwU;bMP@`{x}JEo%fWGH!oJ2l~VNLNSfXw&7RjY+a&^&i5bm7_J>Se zEBANhD@*eNr`Lz+f-~Y){8o{REP5{5fW{6aAK<^Z#|wURX`^I6J07BLoz1a)g>Q6$ z7W-K{pr0-_R4b<^^_CnOS^CO2FvQZfY;jdMR~6QNcwTV*o@4#M?><5v zxb2BA5-=euJ0&g;Hv7bt-BKjhF(z_-RPj@COO`)NU30IDwY0O7RzodZQO=?=ATjTHs%M~cW~I2! zV;{TY5ZXVt+dHx2m}PTwun%GxpZZNC_1|98Jj^cqV|lWaIYoA) zQ4+82U~6nKFGXEdi_31Dpe#Th_2)1{mDDxy4i{F+_Ls~=n)I#dY6A)P9EV#Uzb-$4 zmALI`ug`L71>4gK@qowj@3_`DiAjFlH7Jo~&;S?HMaisrvgE!C;z zrKp&&%dx%LurqEs+|$4(8a_vRBc|=W=On)ZxDkF{K3kBFjma$N~3ElWV^n}=o)%Ps>nxhEwQDpaIq zp0hXIrM+Dt6C-)>oadS?;;3YSc}3ZYIdSUOH37F*FYNTy^u@?x}I6IJNE8NSW>99Wf`CjJem>Z@A@pMrhu=U~Pt6sIf@t@&By zsriWQ#7j9;C7K*8O4#%OWIQ03CL}=z{f#X2Y9~ZKo8J{D51t`3$|G(G zd5GZadfP&UrJfKG$;i}723-_JJCg_7uqKYE%LIS=)X0gWf$3x4ni0@3CSfG-8g|`y z%)K%fUDkI9v!3%l6uG0+4nWK;owk~6;wS?0gM?kTECV#$4E*M!B{5si- zcB76iP^O-jkjWj`?5UvNWy4GbFP-#&Doe#0pVaSlfxJeu3nqNHbPC4ZLTlfwYd5t^ zbP4zzWO1a()E<53cW(kP>=qXeQ?lNjnelec#ymM*T9=eHHey4yIUSM5y)530aOx2Q zRuF%JQYjzp+sZZ+HD%}DSjW8`_(%4eo(Ed?8NikijD&a3xmc+PDi#lxjMhG>89r*f zkZFP^ot3>{W+Xzia4~`&)nan(W-bFg;CsRN8Q%N0hpH$8@rpV%`v+&jB7Scoe0Amx z!i+_6KEsC~cz67K6duP^-&&+3v14qz?tJ7|7AqLsWw~@4=uMC86}0nVx1EY&esb6% z%S(Z;MRZj0U9K8Ig?g!>X+bC#1yu!rk zp42Wsj3q~yn@e)JV@z(r_%J1xRHuYa@qmru%S?GO$^F>WoT4a*!le*c zMg2!R(pYq8!GObY`ToSEkdS#lqoM-zaMk@nADR(6^A*nlKT{srqoHK*c%*4Yp1o+X zK+iSboho%uQw$PZp!v!N+hm*95a|%&>WF3GMht(^PymQr$^grr<&qW&Ao7M~azVBb z58_god4o%IZ#8T2+n!IyuYTMYmq8H;pF5RU5*34b(;PL~xz}6dbcAL!Pms{=4?&W-m#r`8@Xk#b89wkUO- zDTzk*;B0fwR1Yf2SuO*?p|G_dUU+QQEW496wjXh)fOx1}g!1|2+WXa7FK$)(1u?Fa z5{zi95=}gf3lTqCM{@bA(^>C=ym#?a_Rl3KLk*B<$3%8&w@MkKfVZC^I3do zE~9h)xlN6}r|06|y!URe)UwKR(rKtTCNQgkwCWIqjv3giPErKiv+TI&dAIiEIH|e* zK2h9u=np^FA-X<&M7)~xyPy8AR&vQRTAe*8ZfOW@ z4+^H?k~7LOit^#VBxOZp?<;fYjdY5YH2kkCW0oE!?P?c&sHrE~I*a94j{UFXEYYEJ;D29W^Hxspp+TU_BJ&c%D-)`x*y0P5ae zoe~JC;UB$A(+bAqG{Mz5V7M4JOTE5B(6rQEkLhzohz>OzY*Y{WL+6?E=J*#?Y*EZM zaPzuB&x2xcu%T+brjMXQEkbh2E3f}E$a$r+CFJq$8(IwD9~ER?jNZxS zzs|l$ZGP3Jn5%>OXlAq2#w3dEEOS%~kySb22)yPYE{#Lm)>;a^ZEisYhf0+zR<}tM z<#Y`8-`AG?Ld7n!p^~>F@^F&1NaFkru}DYdJ@H#gEVWPq(e3h`LU9|y1Cw&pcgJBG zG`>(6cdxE52Oj5*V-$y8E15S|%a?}7abc$XYQUl~6VU%?PhTtISw*&ErLfz3JzN-Q z1@*5nPQH;i0cf@B{o8H1hDu=Dg6bfn{C8yw*|CwIM9spT2rShP$4qc)-K{P) zWDFpj`_*;6-d&du&*DhkI*qhlN*!@2!8^3$Ql6|--x(^j105TR%Kd@##lRFOihkN7 z#`p7ChLkszH*C1zcM4Kr#Zus0D3v}Z-FN;XA$QWs7=YM!S?Z$#1>Hq-cEPz-70HHO@J zz6GoX6A}#r;(1ar<|iFgMNgN!f83X1c$LG9Z5Num=S#~zXudd5=BInw5vaEFfnD2W zo1S^u$6Cb(#EfPQcmfWK)i_~-OKm-B{h?}J;Kp>}{Z0@zidIc&Va%DHS0w$qoL2xA zGGF+P9(v`x?qN zjGj6|*Us`Ja7N^Rp09`XIIohP3}DOWyuWA`ju}-NGCBj`7JOk#Hke zZ7GSt2z|;1-HKG%?-eh~o~MpJz}b~$V^C4J6DB4ZZ?QMlNWdW1Y5J_x+^evDPqv4q zeSu%2#`V?vrRJl4CVY{ZK(v{jV3^K`yb!~C874_nttq}gho0gmKbNY|l^>Abtt4Jw zSw=&vM~L5I|0bL%=$yM! zUv}(G*N{HqoFKm27L6TaR|)uf)=FP%fJCV<4nw`6?UX}~d7rq;-sozJ`LraXI;2{jV$a)>I1S+PzctG3g??8Y_Gc<_gYXP1YnHsHmYON`Bu}~U zaAL^4LIQ4Fb4KnWh_|fR;J-f`m41^>VS*A9S+>UVfs5B4^hwur4m(`qPp>PqzxuK2 zI%AAYlh}3cBm`Oyz;3w-Z}{)$j8@_@UQ>PACmoxqY@y3}48Nix0ZUmqx;m^4ZM?+( zH#5VNk4atu=gXgF#caJgI_-qC270iB?o>IOi-1n+s~ch+uEv2J74JlGk3He<5@w5$G=vEm5<7khQyRxp4|adhRTU zk-cBO91?kEmNbKxUNn9!aa2P7dtB{pY=;ej)4^;F5MjC);mDexxlB+Es5+%lo$#;H z9EmtHwL<%Zj0<4BkNZv<+RJx7q&A3QKH)CAG+ZP&JiF6Wbtu^3;fSN5(7x)W_v6^p z${1VX>0r4c1$aaOaBp6hoLV6BJ_nidQ5uI+7zSm4_1YQi>UTE#BC?%_oP3M=~@m%$8WeiU9?n>^GAGG0CnSua!`wOA&_p$=T-pUPrHY#P zOk|M$8y(yw(D;j*aQ3>>aC|&J`jMV@rNO_-qFRaj1wG&CE>d4iM`*u6ypkjEn7<1R zeJmz@srbX=g#*wSIqC7`aBD0w=a~cW8KbCTZ4dcFN2{_IX&+h^?i@VhwJePqxH^P0 zsF>mU8sq&sr zUqsG-YmH0>XoirEWsb4*b%qzyzpqwg);sJ&YVGIPP-kQsWMvSK zMo0YQoD11Y{p%y{cG4o7h)q3SeDy(Y#L^yT#Q2oZ#L}o5bUFW6ULyFc4Fa%JZUK41 zq6l^)zC1nYo%=P#wa9qOZSAZtTKy@Md(MJD*Cpr4*%r-ahsYZ0^dhW0W9>M(aJVzM z?(wJOIuos+$*3z8lTniLi)$(ASf>KHs2NSG6WT<15i;B8#P%&^XGLdO;6Im=sVMCN zWik@e)M;6<7PCdKu-<+PcpBJQyKc&UIWOg;z2E;IeV@H1^@E1x7P3rDduapOY zH>4PR!+&KAFYK>i0%9#b_%j0C5++7Ss(*yE z*cMqu;(2z-v(iZ+tFz!#5|WpB9zwpDmh6SS7i(J9Pv zsGD!|@)YTO|MMnAHS&;Y9#l5yd+Da5EDv?dMJN&$U)=p4_@N4#9QS3ekkoDCC*fqkBTDQpPwB6kPB6-6~!22QUXsu9E`$fiq z5QS?==v$xxb))Dv>Kvlu^c?kGno!!ltI3@&&7~(_oRUcXKMj5TSgmsH=tf9h_F@RL zSnhp_`)aq@5u?)7+1nwF&HL2D_g7P;9&zW)_t#W?lvda@KysL@r;>EY6yNLNfUX{Y z`TVn-d5|2jZO1PDn+n1HKn@R@<$$`NF1GfjzK|o`7x|)f-m2p*sMqe?Dsqgt@0)JG zb=SK@)?H0)Brcp8dytphqDjhtVT4}=J%2lhQk3`FiQ*(iYKnnh!Xc=w@-q<>m9&2vY|4ibjsy*Cd2 zBM}MiqMF2aaDUT`8s5`gwWH1+UJKm4y!ewPDZz0?2KQcPvN%}d6ym`j{rC#$`tlGM zcwKr_(fOh)->k{H8#(gez4Xn$<~~vQ-%s&snZ@)*bEm>@lSHlx3PSH*=aV%3FBfCo zfDDIUqT;sPf8scO!RvO2GYVh;dsPv5wrCKYBCBfbxx+Q~yc@zrEWQksECDu%Qv}|$ zHI}17^`dV6xGAAi8G&OFC%_5!JduMnMAMm|*&^yT4joP2C%SmY5?)@e=#I?=Wb@oSoz0ji5f zvwRPJHkJjJ*tqTf_VtV+QKjPYrpq-`b}(0ma#+9O!?77fT<)yd(G88hmsmLZ0@{7r zQi8JjI{`QW&hn!FomvH+NO8n!kNcOB=F>-5DZB+3&04tBo3(t`DkflThW}6S5pdP2__A zDLr(cmnDRnbc_RWU|2vcraU*qGON9 zX_aPZrDuFz54xZ=cN*QP;W0hqNn#iDZ1M<4MdHap%H|7I)b->ZHM+DJ*w2);m0egC zHAz*H+P0yP@BbuT;n_yXLUlq4sT=pF6Kb$}N|F-=Ol;GXMjZTl3Sd>2!U-#j8PRuS zzp(3G{XH^5GC3^Mlt=7A`6Y=DKM^5wk-kLQx}4T=_vx94X>DKm^@Xpc9~Gi;P|9;1 zJ71C;g#!nWRm%`RK2IIVPyqib9Z4dcNAJy z!T;G zU_mU3mkn}39J9XbT}L%~g!um9qV3!NN*w<OC;4ff~nQss{bkbpv zq{SX;)eeIc3$E#{ZH0&|cA=@iS0qRp2tLV>>Qtd^xVWtJ&M31ZA$I8LzjM?yypc)#4He`Cgk%&{KxY`vaS z8=0kO(#Bz%>eaqVj1HC-tl^WD)}hMvsAZ&TTyF?|KxuinEf{E=99f!$k_ZG3%|J8!w4h;OP=cwO!zllwf$1-PxJBBDE#O!UD8CaxVLW{&OWYVnFrOX8# zTij|I-wXm{IG{u7t0;r!%DXO!A4l;be=1-4rKb2A>0-s$!BydAgsz>)ti+6`vc%Si zLoYT$@>y#N$G!Kb^-%ZgmuMw3Lc58J_E#IK5y(^TemSrXbOfB-$Cw@ zw%8BMT+aAp)%?0Gfo}H9z1nL;l;HzN`_*^k9l;k{sl!7B1^{v{e3uuBHd`%bfcf?< zx|PKkQGB24PTPl#xHXCdO*E8s&|DqmNx=NpT=!PyGDN3wh&$QCRiDIto0t(EpjjT> zKrSFb|LyZ$j)5Ep9N{_Zh6u%^b3_%cf!qU>kLY~nlYKCJ|t&t zP$`gDli{A0c!!P}*;eJe?Eht7_QrZuX1{Iz+f*<>EZli$rObFE1Ehb_2HK#osjfj+ zhyRrTWHldOZeVMa)b*nW7w{&XjyW(E>d(X@6!cqX-+sT)CIZ*T6Ox19%A7R4$w68i zGefJHzY9KN)gSs^BW>P6gp=C65N$>FES|J1$Z7+rIYx{&>MMOOcRe~9cM=PB9ms}E z!)K9;tP#eMOK?#_+wF+qtNtp}P)?vfOa`oY8t%az5&8u%ntMzwX zbeERsrE`nr;MqT2Bf#_Hp4rUy{BMq0yG4t|Lta=w`rk(U3vcZ4$UKz zPgL0< z>Odh^g=N3(?jb*6#~Kj*oTigj6Nx`@b*owDowN}4aqcq2ViG2;VnXfZEh+e8+=6&N zSh3;Wi{@;2TI;uv#iIjur(t{loN+SE7Up!wd`rd_=Ap^kVM0s(28m*D4XNdo+&6r# z8Z-~UbI)6s>{-m9u8Fw;&ja3j5KEndr2%>xFw15TWPo`T^KJTCVlj1 z!Dse9K!EZj;js*wZ3!UjT`gcFFTIo3yCAVmwy}+q@w2ngng~(Bok)zZE|Ok#=?2us zu`Sn1`Q=G8bbiFUNhA7uzkCj|97n=g59?aCTbHi8bi%6-PL^#d1r#>TLIqop@i?3oYbckRWs#vLA5NV`{EgFCKp-HRhe;mT2vM7DTOwx!R5@ZS!Sq| z1RDawt8 zSV35ZaN8gC4A?}fnurdrC3w~JD1rTPgLy)`AI}6> zeP?+^0ktb33obY#HD(gL_(GR^vw<&d3!hS{9=V_C2KP7EYh-$-16p)0=&^gBVOc_wA zByZnSQ(dk`RekAd41dy+aUzwiPJlCI|Ed#0E-<}4ca|1@p3lgTO@7ByIv0W##%gRW!@|ivwaBw_osXuO^*0m03slS_0tnuiM9X&#GLE>d#8{1%@*8!z?1z>k(Un&g1&|B3WVa>9(V+d`N#DC<~a!L>~9y`aO{;kM0nD(vyo?0 z;w;BFp(?~8xEh7W2i%`=hZCMt(H`0KY~MZ*P(R#+$!#$&k_LLlV^SQR*4^B(eIkD= z6}gaQHxvnHV#idSXQg#&Uegl66o{>vJ>s%g3D+7Ng&gwkDPTo1dYW>wI@TsAjr6x} z)1x+_xRmFz)caDIS;z&;p`7adv(4mctC?!6s(k+q!3;uUMW>WGTapBYfA?dwl>1~B zkSW-2y%jrr|9RUg)3Z-LTx0T&y1Fy1#O-?R11Z!fo;&^j{{qNa1kF*UJ@P@QD7q9L zfZY$5=OjASpSEToEf9PEhpo2^YAfuzhH*-<7FwJDrG-LqEp7!$ara=w32q4lDFxc% z#T|+jcPNnH?jGD-g9J(_@N(bJGxL7)&iC{Dx#mo=ue0}Fd+oJaU$+lt`m*mXXNtP> z1tD9f)!&4VO4fa8`$BnoTh&hJN|aULhG`U-v@n)yNP3gDwBSqhd1!_n;M`kGjuDZLS? zQXqVv4h)L2Gm#D>187X9@W@)9#z1pPvUB~&&RXZQ;=41a?&7qIxViDj4G%eT>}PH} zJ>tiyo0?AxoI~=R)} z%#CLHT>584lsgI$&)ewCAUQ|0mCUSv&pN?5+b9NxmlX@WKRI<7E&Zmed+G+Xz0;xm z04I-utB(F@=Qi<1`}!{Cn|9zHR{SsMFN+s1;{;mS_J5gdt_x+(jQ(q9C!`NkUqZOgZVmBv>VJ4TS0dshPMl3}fB>l^@c@W#|%5J||UNlf*nl)Q)wEkXGPfV8GQT zV#gPjjp;bE&s5oF6oLSpdgME3U|+{F=+T$+|2j18$5*Sn-WgyDtmS23WJ)hxNy)hQ ze4fKv>VGDw9N8WV!5S}g%qfJ9h!yWZlhNxSMR*|<#M!g ziC1{8^1iR=%21XiZ)~5{ZbaHRY~oD0T*euiGc2vgi!N{}Si+xbW0z6p*x6*Z5->p7 z;#9Ssxt@-!*H^~k{KyLtcO#iC6yMjNlJ@h@=VOxb6-#q4Tyejumst?}pq8$fN+GFU zG?pdK@+b5i6G9vmSpc4Y>k|`=RX4*Nj=WqFE)hO!eKH$TTBaUB{sXmJxK`g-n^o`+ zcVvL|jyJMaDCoj;6s{CMWLW%UOSULjzsd?v zSyH2>FJ5I3;<-1NN zYwaf~B@pA0E#A_a#0|#tb$n|_Y86v!(|%$_fZ^(Cuv1&F_m`x8D!`w(;!3bJqAy@CEKkAGXP`u*6dNbg<bi3w z&Mu7{+5&!U=1HJu*M$%lmxaJxTNz_t35@>z~PAo=COwGFr#^YfZ#b!+4fTB&={TsVr}y^q4aJ zD>u9%uj6LuV-jm)hP~lfzfecI)yZ`S8(~8svM=0O1wLlD zx8)5j!#Qm62lv8ki}!r?t;(-t=E+Z<{XPkdw>?OUMgM$$L*O&aR-{lWknuhU zUt-QcG+n8*(Y@|WW)uwBvOlydo{o0`$Qm!=8{5VcI=w8zY{<#&AfV<^mcW2906v7` zwTYKEusm6OYhpK^XPrM2eTV++PCeJ8$aAbS`hoLUmBY3Q!Zh1y%bl`KC;6x#Q@s0i zY_>LOadR9f@f@|HEyE1wNk7d8-S}xsujri28QeOSB7nPF(_SEgyz&r1lc#xx7xg?e zhKrG)CkvB?5jS>HiDU*Iw0-XowK+fHjJTRwszx-uVa7ZT6NL z$Y~hBd}3DX(03y=dTH|Yv@0|B&t$Rl<9FBAJy0M@eb%3 z_&6O)*QpqRziw+%Ilhs4QMo#jhhWA}>*|Bw>Euw;a>SN51!CLdTr#0F7f6hm?5Rgu zH%$T}e&YCV9CNw)D!p#`!){V_c3OyNxR-NNSingmP`_=q0e4ZMvag}e#>Mzp5aj1< ztJ}~JLfuHM963bAzjI(PLQ0xaplTKEBpy5pfv62$^-_#p(S0sJZ5v%+(tiWyK}r8>Sh95vrzs!Pz> zCX1g$S`=)^J>ib*$UK@_$Bh`ooc)oe>)wWccx_kug|vE|j!~l9S#Cyb!bhs_j>f5} zx2tP#fWnFSKVKgT_>K&|&>~g$|>~&$Xk7i&)vbo|9N&UL&tB#Av(H+Nq`SRNHH-(Y*MSb^AmjuiErN&fDsI zAoD^4M zLwa}DF2rKJ_b<{9Z2KrVfbdQitZ2{$Rb-E7U#0!?NUuaERavSqIhN_R1`rL@Vz{d9GP5?!JKp5`mZ8^v71pVU`cZTlP&Tvj_mxEm$P z;`cmuelO_M3mzKOC^g1a&R^2tvBQ%})du@`ej8jdAmzwmMha!66lE`6Cqe<(>Bd&bT#10%_DuzA;K7R>*^Gqz}eh>5_+$s zuWzFtQ~7WTz~vbsU3%Y9#{X4asKN-D@_ zPkV9r;dLM%wlcr@W1g5xTJu``xumxMa=J@#TE+98-#S=3xhmEV@QaE8hO}YB>Wk1R zR;9z_trs?H86sChbh{|zsD~6sSCuqb>_D~9P@CC#dTT5)AT`?xar614 za9$*=xL&9#0w0Kj%ttHj4-ko`2KTw)wO7dAv;NPM&mqyC>E8L~$mwjUFW(6(KTX4}JM~^d9&LROP0+L0j96*6?uF zqtdN9YvcN9;tNTf@`lt0rTfo#NjB{bmW$P#9fu8Xn#$`I=g_?Kt;9zMlp?*)AUJ)q z!B_t1Yb{0kJ2sPa zC~iv(fi@cY9f~6GlAU0dxt86~B}P(O?3Smw+=bax1{0nq@@2mX&h<oX)i%SLAjSn4g#>pdj zn2@vIb74ZyFL*zX)I9D~<;65Vc_ane-er-i?H`8o&$ph&5I-R8T5cYH3Kq!=vDJ)yL9O`G~NMd6NQHk=W5C>w%UA& zN&hXJ{4P>0NbGa-*DVY*^A(u=G#2ftF7|UxDj^leA^jfnM|JjhD`Ta;W8tLb*)IDE zN`?^L48ZotdqB8j%LtABVu=u9te4GC^}cCDAF6D?TNo=i%WftWwl$BvHh|rwV{#Q- zjgT?OeL;tun7shdMtX5>-Ws*w=3i3CCWn8u0{CPkrj)e*M>Trl`Eig_tQ>N9xlW2deQy%Lr9c#j?kii1EP% zRg|EpzqgdxkkxtJf0Ikw|8H_xftZd3bDNb%mD7DY6)QUa;-Ug5JR3y}ahUp({3Tia zHIA$9Gt%;J;k5JhxM}85OP8@#V7Oc=#kU44rk6fP+T0#x620&1ZH;M??YR$VOam&n ziYkg%rqPbT^r8AD#T9Nh4zTHArK8JubNN`Qs;)7A_Awc)SEu)s@?oP|1bqv<@s5NR zU#RM9`K#LYz?+hQxXlehn}tM~Z!H9oLG&+E+QKmE{pX<_1osiltYdfUL9A;!C-_KU z#?4pN7~=QS@2_=!w%$&S-Fse6{{<-Ag2dNAw}GtalifdNA)JUub`@z2i*Z%doQ;#5 z@nsr5eIJQ&wU<>l-%IkB@3?&a@gJ!g;3VuL*YI1gko;zztf|V@$xGk+nZJ!_iDf0T zjv0X?xZ?FaqAyC-4(_lnJAqVtsLMFCzh-V((fzcCy?U7Ea#y*%@zXbECMiRLH$GS& zcQ2bfIh7GhW~&QJsK4GBO3LR;)u}y|8ZNI)YL53JFm?V|W5@PEbVuE{p6FoUG7`3Q(| zuTgbQVQF?Twr_GVV}EO|WSbqzzIzjWC;=!bSKnr{6a-QGML#2}#WZjF%dI+=HN190 z?aD4p%6V1iY2!nhEf!vsRGW1yk=Y>G(e)bq%f9I7ducd{?(8w}Z6hi-alhz1fK>0= z&M};OcHR##<=EO2q8l(6gVilO(PVv8w39Pxk!f5}o9$<3to6T5P1pZ4H7_NtdZ0S< z3nVs6HXKY=ktm2Azm&KGX%Q{P3bB40c1V0&C3^0A=m6Ac)~lu#1}@eHru|9CRQpA* zb^CguIqAG)Ec_WTU*y5l7xND3YBjoyK*RNy(`RDG{F(~Js}4*qRE&c(P#OUSE9Zrf z*AKoq)D z;#cVC8JDN+>4UsU_0?Ahy-N7#K=om6dA8$epyOXB`heiPRhH@9GnJAP1HpXQf;!@L_^e{W~^AybkyK+u^3r>S~_Z)sr?r%a%$}{l4Q2_+cAnb zqxPYv7k%eauf14waoIa1G`XoFF@A@qyV* zDJE6>tUF`%le^;RvYOh#etiJP(#QSnHjL@DuOT%uhj3-$(4V%=(H1GPZ^I4l0QOD0 z`B(q9)we{wpCQk!zt*XLpd6ynL8}fn;ySMGR#&4QhZgf5>rH1Sxo!Um#|3m#ctcVW z!rRDiF>)L9SngVR+oWoP6*7cH+S976hM)1Z9KlfP!*KlCY3z2<=m2GFDN^7I&-X{F z4M$Fwb)IW2c>eWrgY{}fg)@YOM`D@R9l8}s6YIFeK%vuyqPEnpur9m7{Cfek4wb2d z0_t_~G15iQ&d4vMlB_RC>t<#2y!sK}oisa~e1DiR)3ih;iTL*29rfqLk<>ENczXruxX9bC)7qHl|6gFS8vOqNivhKLiv4=+3t>s4Mr&PoyLViO5|I8K zm?EKJ-jxjfmiG59ow;D7!r$SK`K6+*;pMWS^a{tF8W4i0D^t&%cK@yGmo|9SDVWeDcbN+yo5@q5VZjb-*h-DYT$4xj z6dm}94HcoyX#C&`A&m?dlP0`HGq-%ZlCXpATl9IFB!8BWzA=w^?hJBXw3_!K1&_O7 zw9oon`*xKe$K%$lgZOZ17V`Ct+!G^-cCFQ5T^hpO%rSu;{x>Dv?X(__$~kfup_(kH zkWy4L>B+Vh1Z~`9$5MK5g_BP55ndEL#u|m^F{zfRkR4E*cTFUCnMe9lB2q$4tEg?J zUDXup%VNKo6T-|srrH00LGaB>6JO_pxm%H=U8)rb`lzckJxel=)VLZn7v`khpug9k z>Ey0xko@nib&~bMFd{{GBIDM^4;Y}#wuV)Nr>OkmK-#{iuzP0EB8;QmF_<|na0be5P6i<2*4Bk%OQNnDq`;d8&qNBcuG+qn^9a(@7{~NZ&fagZSEuDo&GA>W-B;WV zWheyFnJ~YVAH?2N^@Z`*T}9jhulev;2`(aU%>`=l|I9vzNU9A!Y6X$D5=o*hEdO|D z*!=1@Hk`yjN0*S~T_aCCc(3;6Y^k6wW0|Pdq&ChJ-|;A;N&YjHza2==Y4F;E%`m|X zedXr3>OAOba zN+O`m>0#_u_zs3qY*iq?|Uvp7|gB30*%QG0;4S1X}mP;GH)kk!JZi0 z3`2stxmNr0l=0ndc2D;>ZBx@cH2XU3e49LWuv7@QAjEl4R)w(dn`%&F?xoYvW6dKA zI#V@EP*ka5n5*zz&cOs7W(70;nTCp|_Q~TI$S^tb}u=PUL?7VYtDb4?t>CIuW zy+q`H=M23o-`oW~5Aq)eX86*MjKA(Q3#{(AqUwR#aJ{kM-LGe}O(h;57iZ&beKRpK zK$u3SP{Tl{?r?o-N!D*AblWQ{RecWeb;7Q+u7gF2c}=>*NNSN@k8cFBrv!wO+JohL zbr13l`%fgM#Uj;^g=b@@-cEOtV)(Xii8LV6y7tg8Yo1>bIICJuI!wzR$3ojIs}|qj zNDHbF`kLr2rdY~O!nJ0~m@|zl;QPay^ADeh1yngCXD`Q=JobxTsKka|pJ zV`AEnN(FVXb^|PY5Z-hi&c**ja6nCq9KyMe7q46Q-@~p)1hZh=%}#`H5XU^3xP6Sh zAG!I|Eue7`hXYzMAAs%QsLweyTqyq(w$5X(p#R1HA)Ppnt)MM0ERJvKrVjJxSV+8l zni1>S({M2-a2QsrtEV*>@aoU1a}}^nu`Se*VQ&OT#WO3kN9?I z<4Gv*?-fET-z!F{e2EC+nJ`B=83K^B7g6G>Z#Iw)o&tkyj8px)+bNXcmxM*dyAr(V=l z0g+XOXK86S3RCp|a=_1k9&pi&krB!h1E|)0R&R@tl z(icO_g3ruPBSw%)i~W+w)`mnIWhTW`bunq;yM9?_b=Sw4J%HzUdEdkH^CC+!jDoMr zc05ES!kd=fsmD?=P*vFQMTZU1?|*SCVD!X#>T2w{@T7GSUyHk2m}QRA?sS|t74Zmm zn3{xr)4ES)gGZ;`-=YD2^T$01{~1E&u2(4F93lSNyp$?l9Evm7^TCNK#M9u<&UfnU zU=`{ZU3gO01c31>XfzJ`VgQ|qc%;|N#2WeU}j;xgN{6JEH2suCsJB zLK<-HJLy_P!!_>sOz$whIp#8(U+C)9@*-?8GRlb|xA9By{tywt`7*6Jxv3z%uen6# zLg3hay;)-8zoPEnVmQKNcmAFU#A}xoL^zP0;O(q)JHI1igWxPx?}$Nt$3g>Kk;tvG#PR#KIu3{VC~GTP1mxukTdx^$XjEz0;L z{Or_=oqkWv+5ySML2)-S-DGZCU+!)_+J)YRjEIpEgcTfW1g{kQxTp3^yQ8TdfI=HEcT)m z$7MNtfROxCX-r0*6=NZ3_;f-HX6lt7&(th7P1=+QMt$UkVEg1s2*m>1TIZ(SXJVMw zs`2iX?_Olo`)#o?&?zmW^NMiL*XtRnHtJpGJ)B{*)Ye%^nOM+HSP%&Fa;c^%>ycb1 zsx?-l-<}#?(O-uYk^WXb6$4_pEsW&PB`z(v%Rm~=q2HLfjZk8i%(itvxBffLZurGK>pEl3u!7zE=NlAL`=lVPNHF#$aMW zsJ%BVDYDZ16xpdRCiHXV{c&RR@iSv5ztt+`sR4EHYMqC)J>3W1*(^tomLC(+qxhm@ zkZbS;od8|F8=`Z!QBuf%&HUlrjfQMM>m#85V$;(wU38^PCV$U(xxd)$Xi zN7eiKlZ^AdTSr(G`uPLk1}?r+598s6Vwj`)-X-5Ug4c62DT5}8xy&e+vMp485<-1- zFBRxdha8ha{&8+2F3)l)L@JFozNda5Y54auoV4Ldu@WkA=suJ*h)(4=CfLND>pDp2 zuHlBvyxilR>v|)sM37G31mwfAdD}{JQxjCP|V< z0G0nH)M=-dwr=%>Mv75UK|hJ9;b4>g`}d-|=a6+@#Wanyo^C?!(8;Bdvu+ydF0qf| z3@59JcrcRNS#e&*t98B8sQqr~23G!9zjhsI25cHp1V+Fo62qd_z$pne#IalPb$h6{ zHu6y}P!}Q=t`%U)tzqv0<&s6Whii)blSMpVF>WH?7B~;(1jQ@0SGd5aLb34; z%eaws$FGJ@2AggzzVh${Iu_&e9-~C6NgH#9+BX$6f{E^4q^uVQ6$U)@eUvgl1<5O- z>Zae>J^oXwSpp`HRM*^_y3}(zm_|zYKU>-4c0!C}=wWMPd4UsS$B*!kS=rqxV%@HL zI%-S)%V3EM`&^HNxNwE6XiLaR=|@e_)Ija_z;~WF`vw5xaC+xJS7|%B=p5jUX98-8)-zJ{j3&XQbLR{ z^@^bVuA`E8chaL)Xn8Bn^q_H{d2`=>bFlJV3Zei?54$=1Y1|=(DHOZ_bD8T%8mCSl zckRq7z3y?Y2@pGta9)JnGF395jl^JNc?;(vu9g}<-w_ljPCZJW-t!+E4dG7rba4>t z;H#s8BH;J+{(%6S8}m=13z!CUd_6MBkHa*&ed!paWj_}A+5i1OXvgh+1i7aM0@Q6r~jQ9P6a$NIi_v>x0L~i4+ zO$SB3He;hFB*b99IKk&gf~>90ady(mXU}>1LfA=~wQO#XpUxltvigiY81C3|(xcj+ zur)k1;djln<^Q_eHjRkLLZs%14}TeDOTQ*Yo=<$}-CB8Et@*jh<(Qe~3m&~?WK<*b z;?1yelp&GZA6jpv*sVyD3%_?K2#-mEFGl^a1BMCnHy_&C?UJYyxoRDOl(+dD~tBd^KQwX?_~FzNtP=eqqI$xut*$U%95&w zS?5H+7v8R{&0K-_@wTknClw;b@YyqHt3}Yx_xI>*7kBlZnvz< zrO%^xrE%WpD%l%g)qNWcQV!Su;#4P0WEw2d8^F=iLvNK+E>0fJV=(1b5D~rG;^3U? z7B<;z9@K)+Ddy?kcBVS-Rr29TPOX4a+`d;o<*|LK6J~UO-gn@0X`*r z0DfB@&}Z9+Jj9yF%N|^x=V?a%ynf|0oA+kfm*i1Mgy=kLvCDqvwy}-1- zv8de5!~rEiSRqi(=|Bzo2ZUC=0F=#YOK{e`8JE3gdbxezRV?-NF##4NKNA4XF=p)G z5%1N_K4;O!`{S!4YgO)rBxh%pkh2|JXfBR&6_&GoCBGjn>N$Y5h#RI5%|KqgNttEemQJ>Es@3v+_qb!InFf|{29tOc zcA~tRbh6}zR zTCOSs6x8+G6rK{~2`a3>u%6vK&q)<9ZLgyo4WFep^4mDyc(!rER#Gu<=DwFrxNE9e z>2{d()jv#RiG9Od7GM2_!@vvkrv&!c1z*BWr-4eRGk61|nt^ko#ST*-i}acs{7r%^ zCb=P)>S}-4-a#_A5cWb#j#Z?t@CeGc4HzCz!XSpTV8bRIzyvwF!78iA=nGfh622EXk;qD8{Uj#8hYg|$ns_CC-t%yqU zlvjQxUC#tm?k&JGz3{y!~F>!_oxWd~}%k$zLbQ#`W3eT1&On(&M?|!vB2N4}B?;Bjn%X zJO&9WtpIj{y`Kt1#_rnw{kn4S&Y8v>x$oY4it{p_v2X{;~3h3ZLgdW8=p#9&iKZ{KloHgk0@BBPBv zls#tvlsy2-(;-zXj9XnL&)S_m9o~gBY~z@D+I`p9j+JlApQ-v}cgIif z$+{aaT5H@aK*kG1YuO7Dch_wm59hlDN#W_uJS;X>mf`I_oUS8q*Q}3y6X2k?!7s=M zySpa!lpv;wI`S>vx$iFY)G9%rN;zxdlzyDCX3ePSxRJLb*zb>#U#BjTt>=I#A zkh#Oc@p|lH91T?eW5AV0(Jme~pGc~qZFZiLc&gL%=mpmpL;=M1J#n*7m0AtelCwG3 z{X!|t6(k(gzaU!U;K&_2dJTtFS@b_>* z-sBA3V<9l9o~JIi^0M^tP+t%sw?`cX z-xSH)#?TR10>8u|D627u5>}J=sWQtkTUv>>Qx3oX`*i0;Dd61uNuAXrsl1qQaf|a^ zyJVoX*7ACA*NT=<)?~k)tr>M>fC#vC7Bdkil79O}pwDl$n~J8fpcdobf9>!tx=I5L zf;MMA9aVx;!4^%{uwymp^s7!4z{9RRea9J4I{LflerT#W!IPBz`H7ybgP>17ry1|1 zi*dh=-$b8Ok$!f#>NFz4pfCr88+{=7bu6#E8OQYTmBd*SW75<8iQfXP1l=0(3Ir}H zgYgG)j8hFeiH<4648_;uO7Oc?K$V?1u8}XsTQKU+v`Ql)bT)i=-1#YRwz}LUh|rW6 zcKl*NdO*Xl;rTyeSoQ7)K&t0!qi(%k$!dv(shvVPd|Z0KLjS|V)g!Fy#VYr+`QzSW#Kdy>D5a@Vwa_L}Kc zL>dPB6T+6-u2DX*3;OKU+gWYh<)X2h(Hm!v`QqW5k^{J|m#)N}p056NJ{?e)1cXCx zY#&2q-ltNxa0shZ`8xcD=PHM9F>DgK_=B{IHrednTX##b;BBlsR5^2eVe0a)4m2Zw z0mJ;RQ#YKh&MPKya@L!*?zJ)CjYSNC0$Wlg9yOKi{%NR^evsdzxdfSXwx`r?cI&HD zvt**D=9sFs1mK-;F0Fheo5-Nwq$6m9`DPRr9Lb;>FsXF$m+jj&DaOe~{;r*NYRHyf zl~LfQ+Qv|qAZIKtca?a|iYW{lB=sMq)jEs%1Moz0W@4ZGqaX=819x$DL=k-(%aghM z7*-wq+FleJyLcrL{*y*Aw>Q{9!cGMv=(&$|sznuRxxJ2IY(@XFrRsdIq^1CiVVUAQ z3T>eG54kZ!W&!ZRx-m^XN?PHPiD-eScFgFd4rP6us6Y`ofd0h%>!*N+Vo&GmKHi}} z5!PKEWj~kq8UTfxb+Z#_A>sNIU}*)Go3kas*L8S7-U*?4S#Z_3!rUBrt=I_tr>Xr! zMHLf2EDe@q} zOx?S2)*YiX=fyu?^!^G21<{<|;t>PdHlUkfaY7U^aD_R@lRUAnzq?7!nMxEtRq6`E z3WvmS+(xE&aNjEf)=D$P-<6+lLC^l81NS2+ z6$+)eqf`b#r{AG-a@*Y^_M>WJepbg1?3WC9j4_nGv|_46?fg4rd@Aso{pJoG>ZwBD z!lk{Fx&;1kF~<#?L2eW#p*7J0(1zYs8?T+}kA|KZfeO#9m8Xb=^Hs!a18HIgd zouBE=+1Cz430^MKY%tcE5{6rj{kYd5A$FIZA8R;o&W6x5wl&F9yG?Smb1HBoauOd< zRQ)KSc;~m)(Nim>GIT`debr8d5Wh2%5;qA5c{Z^-yWGNwFKr!*_ZF!CHqj)n5u3K|i|=|Iym(s<03_F*V^QbG zQnQcpDLU&0r=|-xRz=xX3$w%k9Ia$ebm9m77hbQ<4&>9OU}^w}f=_r*lZEP5ey1Yl zYSsglUtT(3CA}DPl{h}N-VKTn2h541lu^wCi{jRWZAELkshHx#3xBA2xIFneH(!DG zMuHp5{IE0nbNb$Qh8>XG2Pv#raZW|nzeN5DK|DoTh0ohya_3wc=+fnh54Hn4o@6!U z5u5p!^VAP5B%c###;KfK>Bl4h-)uJ?=u1@M+4!2;)#yoPhY(iVqC}gZkRpudvA;rE z2rAPQc|4XQBeRG%CFIn6v<5OsPBYH;!CuM4(8MvcwrJD+8!1#bd!)N1XC#1cOK`1I zxmNpF{rtBHiQn&cT6m;OewIdD_Q!wU2>4k&y4AoH!z4{vi#U?wa`9{J@id1RbW4I~ zD9Gzl7jcYUi|ew$pPKx(sw9-Z(IQ6hikwGz0xV7LV7-VIMZ#e6qNfKgJ7 z`xXW=zD_dTB}oALlR>;<;;A~Qv6ltuJxuoS-(Cs_8omhW>zY___J4?^%i4-2*=j8HJ_XB@W$EqkAYW2 zkcCbs?{|maNtB_1rVB#l3F|gYId6P18wOw6_1R{o$`>xRYVTrH;^7x6?*7UZJWcne z3P?M<+s)?Wg2f+7ebh*&6aOt6m}~KmR_B8@F1Y#+FK_dV-p!Bz%s~CyZ&r(DN%gqf z;<^eN($P$1J{3s={XSZnB}~s`cm+AH+b3oB8xf;{;^&?G_}Qj=;$M_rBL9K4N+p25 zyy96TXf&jwV;1e7?MQduIxr^1+7^L_yO~+`pLpIB8_iRC`MV$1E#zPr3R;Imcz?@0 zs7j8>_^2fXORC`L{PK{=%|`_E+v$AAN1aK{bwM@!gLy@U|4~{ZuDRpM1jd`FB2+u? zat+2)YHXhaFMBJDUcnkod8b%4c*TA{HZW2C!ef&|d%7Q+>y7(JdQJM{@()`_1nY?; zDeYS5>8eb7DINytfyzIl+8GHUGE+Hzx>YZWy)`D9+qHu(WZ`z==@cC8R~*M)ew7|r zhO^12Z9ks~T%5L)Q`R5l7JutKqf_^SS#%?ziNb}uLwTP6`51U(t1*gm0oxCQ7I>e= z$|9Ail{ckcis?2fUe1CLYVI$;7(^1;On&9fi7%9)xBh&x7D(K>@+H_ljR8AOcno4S z{wkMz{wcvEjwe<0Aujp&GYmk1rMvqv z5`AE~)ywO_Z(OmxHlOH$B1Wc+-PT+1N zWq-ek?;J9-^6h6@Mycr4>y$H(Dr)4Py|)?{A|=koc-zaTw7Ol{F?VX3 zS>d?C*#W_i%LV_u_DT_wiLj1rw_PYpmB#oXG~PzVu!sEtO)h$z4uZ{J(7*zw4SMy1 zw5(X2D2;n=qt%VyXwdpn=au|8%;)XgXQ%lEGSRf3z`Fcdxu)u5aDAEFPJ-}Ck+vqG zKQWd>Jq3~7)kTI2Ldo11Ac^u$*46P>`?G+!MRvg{j59%><(Bc!Jl*DcIJ7jFSIL(NN>Aw zh-cGS+DNLjW1@}<$Ni>(&QJG5+FzZfYmhGFv;Ib4Qc?$v<*aUbk>?Y`9ORt$tm)~p z#7XRbyLpliDay|cZ)-wE2z-fuW3BvqpNURR4|VF%R0@9Ic5IU5-<)!cfX`VDB#*w6 zj*%naR-gHpUL^XkeizXqCF4iO@_RUsz{LbOoBnCYMT>sO=B0Vs>iB{SJ28630);oe z<+0neI*n!SK$X~|xJKTcN}AK7cG8(V{0C{1Kn!~**zUz<*rh}*(sovDF^?&ki%MNR;}pX{i`r_o2ZUbNfIRMA3%ay83x8{2c-`( zIzH*5w+cD46V8_#s|-daf0-*Ds$@X!0y3)^5Cdb;)tt~%& zHDNnbWNRc{;mrSiVP6ULT4am)r-KKraT)`GlMM%CEFvLQjISjE@j;5YnUVYX=jn+c z1HHZ}dq2}G^22Tl>{nY2TMZ&RcV9GLJZic zoh{7;P|F_@xE0_6iO&1!!vn1pzHmjnoGqw!j+xg)kOD%is{6b6TA~V!;z_oEz+iIO zWVbEW)>d5H`g7m7T)Gg-)CAgK;RB+(Z;!?X0SEiqT{Gd!Vc}7EU%~|~?}WLz_g(uo z@ITk7BsWo?N+u>rhA`yxs$WGUNBy4wE+f(0mmoxIn_9@SX{8Pk0P&Xldt!9tslq#> zN1n6O3Ecct4{3fHG<99fb(XrVOsU~br`6EXPTR;bkX5cOFZsmI+cWnx(izf2J4f6D zyQgoPUIi+exd~+(40NXfEosww&_bW{xX@RDtA>}Y1l{-%5%Ove0c^b9O(5lq34Se5 z^$74H3m?5L!HWY39YBuv#j~nDqOmhg*Cp^tw;RFezy|tdYQEjnS#IsU4=gUek83=N zaAY2s%A6hU`QTTE%ip4l`YKJIH9~2F00KznLSxh>kLmFIqov|y%N;SMOn{7r6?pU2 zLp8W;(wJ;ewZ}{L#Ig~cpt_7au>g);fwy{R>ZQ|HadujF+G~;5AW)TKx{6n$98ald zy)i)5R1grO=0{GfkMRl&)bPlsl`miouM7~#i_cwNH;a4>6-Gqs0S&NecZRn8+BoG$#6U(`Avv8zL_|(eKQ7@W_;v zZPPZZ0IzHX_|hBqUN&Z1w0ZDz+|af;ZN@&jQ}Aj`a7`+E4Bkc;BgUK8$ax4O?aza^ z=xRKrtn7aQjBuSt6`~`K${2RuvV8Kz`liM&W##uj;L+B%DXR);FwcJsPv*lDr*|H& zhf{Cf6T?$|!qeid%f4^qeRdid0MtKbVw!Ebl$cT*#4;B>9-zcalSe;)ZIjD%HoBb7 zm@4(2H>cP=K(U1kp{J7{0~^ZWf<3FP05+!qkkh93o)#WAsf<(Bz=ej+6u8h6plzed z;Ki1%9d8(52Bd0;0J2{RB+v7H0GDZ+zrCEG$^?J`@;2a2@7o?1$r$BvGY{`;@KTn3 z0m|fKzsZ^>=cW3^O+@T?2Us`f)9-lC;{0d0_M-~5V~)xocHX>v@^yNw^g}W(kD0*K zSk(1~R|YsSHRj4h)JTr!tyNa*VF4vR_zpluvgo376d+dlQ7J&2>3mkKGGa=t0Tt71 z^6>cq)=fZ0hBip~wmt@c=JjC47V-px)YI&qM%wzM9jxR0uCW2x>#2Qp$r*b76tqYH zHp>Irq~-dObPrtfHUYQyx@s7C_VId`vX~_i175XBq>lo;vK8PYmi-D|d27m2e*IBN zH5fOH0Jb7sYJ%6^SD%#l%Lf+ckJS6pp0%UM9A$XZ^77j>W?!xXDlnA~@Ig~q1;_xr zK3dXfw$~n?mzDwmsQQ@)+-)33G($oMpoAnkDr_-CK%8?Fnd5F)APvp0lR&EnpTBX&H2!S6$t~Dw0ZWl z&}?h!ZQ*STTx40!5bMvZ*PX6+DYpl&+9UD+UKh8O=Ph5>5a3w%rWXZ(szZP`V?eul zSfiCQKXsOg3TA97|Hy-j3-96@k2>gvcRXP^T)O|%aPimVT`#Hx1`T(&=qYu88YV~D zWIZe(kKK*e#41BK1iWhQP8X0e@B}p8TFS3_$fk~H zE^vjK=EQC^_0uDzyO=Vo1pZHAcCq7&modM##p>c++D5@Wn;8vXd5u)sARN1&i%3z|y5M8p3V zxhP#T-ccTN_4%;q#q(BA99~-;BCx89rIVgEr_;!*0{~ZeWIQkYq~}NCGo3V*UwG)` zPIl1;XfaKmu8UQ+${0_np<%c8#?a=b)if%y0DQVeh6kM(FcTY`*dy<0HfhsH6RexL z@n72+Q(Mm9Y?PJ)Of9EI%YhiADQIm6&>~=6bgVa>DkHZIaM8EdCEZV%)i_jAO)}oB z5}^aH!IR#23f{D_>UnKj*HS%iIccT*?50)JMS6w5y6)8#|Bj~4pXS<+BaAxiI10FL zdFi`#*VKQ_5>x2_-5iM30RhJ3B{-Q*C;fT==O{s}`hcJSHfe8esXT5DqPHnEeCWhX zt2GEmYh&6C{(eA4ZaTeA-FYx4uT6=2P{SioZl(_Q*I?_l4OVD9e-mgeo8A_^wmAiF z4!G6}Of*Y__jzMtzn zuApl_{-E{n&uE;zOofGKC00HFt8@W1ySxp=q*b%<%t_xJ#Mn*`o3AA@*kx4zIDMSn z85wm<0W#}iPIKk)%dFe{1{b#APrWg%xe3Vdr(QW}3B=yJ+B?G+094HuD8J>#sX3q{ z(F1d=5sjkDX~AHHVlPX&_q3Uh>0;echQ>fACQN|~O&t(k8aYpwp>6WI*zxmSfQqgP zDZnM2A7EFz#5!8`1fV<~iR}24)p*ToTg~&1!K*5VcV|~w_Ded-j`E>VgzQvLt^6mo z?)?L<_c()Yn8zQq9)8baxcKX=hjn*S2j@vGz@>&J(BaWAY7EhQQVU@5a&&$DFa`&F z>5>NY3R|*5*3rzhdbp>AC4C32o6*SnVf7J()<>Xb`m+lI96X2GQMh-AyLk$}nS)^5M zT~qVC@gOexN&NQ9*05-`(1pwF^P@B|zp9YA? zSzeW{a?k;gX~-aNePVb9F8SW$nwN6vVGYQ%n>6H9Xn?q%G9#mYD&UTt;{amH_b0BR z9<$&Dqxb6Yyeb)zJNBtD}6?_fSQ|CQxKzPAg3JQ8BeKI zaNI1g0U+T6Bm>!xkNQn6+HT!rCwS-skbU?s0RXZOiVc)>@MioF+-74si@sv5!J#YaTGo0~@ z3D8tg$^miJp6V>mnE+o0Ueo}y%0fS4Y-HK#ebq`qziT-CunuedBiC~hVbmEXQJ~ht zKPXUsw+g0D@Q7L$=gzdI%Etm?0X6{HKP&d@i0X&}%sfMF;Hz@sQB^<1>(|D;$3>Pl zoB|mdJj&un-hebnt;w$+3(l7 z_pi9dlL{*xbP@&YrHA{}sNbT(+0+Wq8pP>&V-Oc`AKVi&@Y61Fd&~qK&kcx4YtYmw z^_(|u@~hss0Dfiaj7|?^+SOnuy$Q_l(I=h*G;{~cIlpVnpx>l31uU}bKno9hfYNDz z>Zvlc&A_ED^J`t~_Fk8IdCI(Qvnq80WYnkL1oCFEyXVD5dgAuDNO^8B^5V;X)k_M; z_Pm$2n+v*eo_u)iaL)t!FIvtETso<>2Z-4uQ0L>3nTi0~n5u~CRu z$ZL~^vLtscylV$itpW2ONN#pf_BEz)0d@^OJc?8k%o#Hls&|$sJj`c6*J)zFEkelk z^j*^isr7oBY(klCFROge7!PXn1+_P|L9x`q+?8 zjLm9SdCC!Q@yKh33lBU%K_?ud15UWiDDGF6%ey`|Jn{4DoENJSe!Qds*$#S0Q0+6n zCWZ&l)p}Y3tIMUAQ{{HpL(1Tp&KqrRt(#IyZYyt$9N?Z?A46B23NOlzJUZ0HUb)mO zXlW;9p`+i&q^Hy59@y|5T#ob8ScWCC8thfg>A)IbgbtX9ZKLJknN2G;6iG-;nzjIc+=ykH_`u*TU=GjwnHLWC{N8Ua zbinQggxStKsd~J1`RQ|4hkJiXjr#&sUc^GUBDJU z*S>%V4~J)!cL>0mhdrk^0hxA8JNfv@d2~r{0yBKeVS~KGG!K0WaLcZXdw^Od0p;8( zVBu^7TI5vW>TNT>8*l;ibghd`e(8DBUhjF6Ki;f@rgpTaW)>CTEiWbn5LLfjJZ}fy z;qzyQ$KLVo#Y=X5my;$rlAvq5vEgmYM=w4xJnL7~<$6Y3K`bx>wEQHGYN&olPt2eO zK_d+4r#zlFgQ(z zW)Drer;{gGCv)5XodOn32D~j8tUcX2Q%~E=^xoF=Z9T4m%XFE#pr;#Y0FbpVG<#jr zITg0IUccV8EGj*CMK9hNk6b;!k~Ay!>$I7&W2#Lo)}?!ful&}#7SF%LHQuODJL^VO zfO3CodFiVz52t=v1O1#T)B$pSI?W)S0Wn|*51P+?0V*C9KqsA;@{mKn088oI%(5Qz zEF(R#daHP2##Fo*5xU5vT*jFnPpv60J$aT#KJBp~7IldjTAw$dp_$k7NfUZ-CuO(4 zJxI}1C3G1X3|4YIV9A?jd4m?7r^A4+$!?x1&jFV*uW254-46<#}fX+Wy83cv#_0lszKSapz{wo{$?g8-SUYtNC% zVT(GE)<}uiK!n%RNt;Hx2R3=@lRii=5Up#Vl2=7kbOy_rX5cq^PHBI+x}=+UF10%m}J z>Z-OpfB&do%%`0W5^4t>MER(70P)kq-rF>|XFc&eh~s~K=)7zXVokPU8l4_?W=hQn zo%P0|%gg5pF4BJFL>kc8tM2EKX(Paz0M$xW!TO}Jm+?HHdl}N`5<6Jm`CVfMe6M3b zLhE^RfbC@(XrVT5YZ+{*?iHBnH8%qnos`Q%8EIqQ>tY)aW}Kk*de@s(s*8bGz{`Jg zyH|lN{zmYsE?0Eu^IbO!cxl^F=Rvs9f$8*ON@XMBz-H}S+db%w6r2(-G>#&Lat(~(9p4S0k^*2ERWg=R40dGqKcGAW;jL{cZG)CtUH2f!B) zGm@(}MyG)u;Ofa`*xeq;v}fwn8%510&z_lF^UmZ9XwujqCU7IkRQ~P3-P5;C_aH?F z09cp7?erXA;Q@H-Aa9)>w8$Z|-&8sE8*pvU)8Mp`K*J_wG(hI&R(f54UA^|odKb+C zOoKPpxUO>nZ`D&HeE!04^_@3*!-{L3hT1_>#*NPBBc|uPO`YcF!~sgxOZ{43fG~(7 z*2RQJ?Y(R{6jIj3>hAEseq6NP8v|wT^M!VI-wgy=dj0ThcEx6 zhQrHM2iiOks7iw`{qmGn@}PNhE7!#c0YK=UQcG8g^WGSq3PGO0O+oqe)~T0kY0~=v z83WUGGBj=q=w~`_I8OI*rl+8W+JH^22RHd$gDzIp=|ch)$`q{780>wl@~hW{XJAjg zEjpByGW!G9a-PacJ<8Rek+*CIGe%xFrpM^0%rY%rUGKuj6GtmbU1cgwIe98e$wyu^ zJo}Gt)FBPkW#15uvai$)6nMLw;D?7N-mH##4K1rS*3VO9z_2GkwyCl@p{$SRr_|`G zm*iE$j1bbivFrzciN%$v2!)owOWtN6qlFwll_jueI?d%{sFX>7B4-_9mp!G!BXASQ zRQ_#VyQl7-Hb5=&2n; zMimGEQ&;4?)}44=cp=9P0PV??Ir!a9bL3Tw%;%#bZFqi!BfoEt7on)Z%^9LYZqBNW zYt_HSq)KZ9dy}fIXQ9&r>b!`_0|o{>F~F78s+;`gjmdkbnzZ$)iPEF>aq?DyoU*Iy zWatKS$}q;$n=;L|UgJfXL5F5g_k7Y0)W_*p^S!bgFFGoOXwvst|1!HsDhyJZ`4*P)E1cE#9>Ex|^rW*s+HcrnF;#v<9 zY9}2;`J{DtpIB4ZAIe4ssACW_%)RDS-2$xYbODb(U)|u6%*Y!9g6Sp~w4^6MlwJ#D z+5_3?^cs4q35Fr~}*h~|9nmD9tbnbT}! zyk=I}p${$T{2zBwY30WoQ>ITnF7=YGqE+Bxv!5<2D?sO2W{Csd&_&K(clwB^$jQEL z(?u@h^t!6BzEpbpFHiD)Uas{pVbp1dF?3S8eA(kG!}Xug(D2dA@U|*neSxE8a=bdF z)`hO~#-X45z`Q*4cv=lG;M+#I)|&UaHu+<(jBM(*wXeZ!9fbi0&>?S7ld`8K zO)$7K*Zwx$MkB>w9aA#bgA_^wD!B$$a&v%%j%_@x(*`a1Exavyp<6&4H-VO3oi09}vxd`ua#CN?P$iBeM57&vr4uyr#^wK< z*EhD_qG9tg6-)aE@^mpgYU+R$po=Lra_XfyZyZx<_|h-By4MTuK4NKr?h0g@#5VED zEw3UA4=_93$Es`4H}5)+H?+_{SZEtpDs(g^HUXBhJUu484z%#rcw5Sf@<0$}^K0n@ zZtCXSLzY3WoA%CnT^SCL_crC7gO=si&8koG4XcM1U;Cu!w^SH))-6?YRhCcI3Tod^ z2kAoU+Ey%)(i?k9o&50u4uIK#k}0|LdLWP2$GZTTwxmpcz7d$#gE?tq?+lHAZXc62 zut^i908i@ne+^J;s6A9{2HKUBW71PE+w<*dP3u9MwB{X^58Dl_>wpWrKGQ`9;7)+q z>{3?=#X7mjstEmSUKjn~OO8E{zd7ztzpC(K3(<(jX8i;V=f~ssenOttC$|{%0H=84 zx=USX0g90~2AEQc-D`AvAp0a2ooyiQ17xnc0GGId(>4$w&5!gPpe;j8u%{+%J<<+y zH1prs^X$EbhH*kqo%iIRI5*OI=Bo(>L4BRjLnCH8JW=K8Re_7a%bAP+A+J;gS;r01I1bYj93)X=yY5EE=SbM0>r^hRx| z9+-_9m6XX01}Zrf7<7ZRr@;fTrdbw!0BXA8NcW(H*Yf>T8QJx~rHp=)ioAY4ltDQF zU8ZL@s)8?(NBFOQZpA4x?be5A*q(4Jr{A=E^7VQy_yeUw`zdkp#xbups3Zoi5@c$K z0J8KIHyZrjBd1)b6|j2KYGv(>{QxepLgZ85>9Kc42ro~J95JC!8`#Mi^Gw?%Rv|Lq z!W>ZHTCNAI=?1(3S*(R!XiaYYG+AN-eS)r(1rX5}3sfMpkO&&7*62PPN zap>*>WZJU75s-#fLZnNbD#-0&O?PZiTiNt=dDHicRSB7DVVa)AzL~Vc^x_iPve%<$JV-y-OD&O27Yqp{$;!HQfD#G+SqdLFvtd;=|d zX?uI%QgRPQ6En+$PsEx{M!Ne(B!p z!(IB2{PLT`us05`OWr^>K$}beX=S6!a%wbdzCNc&SX@FStDwwT9+=G_9 z0%cTClP2_X26u7}{&x{;vn=w9f7gFc^YEW7p8FW(-Hu_@DYxSVa!vOwpL&HpJp04C6F*m3 z`dK(gKocjB+itaa64bwxQ$q=mc=0^ZC3=7hIxoNo#;ky3|X+rqfg4_B_k% z5*H9u6@wH)&+|0fG_R$d2U9@MdW9b2YYJLqC?{X|!U0W_2ZtwCuo-OFaW zftx(RI+@%5Zv$SFHAtcK{5h~9(*w5Ci80lK*1S2;nx}Yns@!>8yexMJ$=TzE&KGr4 zd+$Swdp?G(XIhBHex_ZtulMbG*Z8Buldq9C{vQ4A6@3b1jTuno4JdqPyeJWLK%+!W zlTRR1LY$|LDKqi-8MXkq61wet4`E%uA85pd;kAJgyeUp<`v$lGu7cXqk%;|d!)_P7eY z+3fPz>8at#Z)iCrq|4*kx|5N1<=q6zsArSu*o^BdSr7p z#|h3}#$FYgLFl;1#h94_*75*0)7Zvgu7Vbtm=&1VpR8}OQTe^c6j6Hvu@Lox%j5=&HC39ryx_P{$s&P=a39rIrml z`eP7B9-DKZ#ZoD6G*woKpSo+f{=q+8T>LmPcfz;@YG;kfcXDolw=5rh@!oLmJG4gr zW`UU(XXn7&0U6EFS{Z`9H-l9F;#YyGPJmWCbf)<0$4iA0GNcLC$z1-OqxF2JWoV_} zr!)f54JDqNL*^U?Gz&B{k>keNaGX?E6t#AMB)NtjW-m`fAXVAG5=38K; zBj?5LPt%v((|~+|T4V%dT1bs4R(j=@PcXOq7`##l9r%P|qsGls!?J%9e)B?^z*ON!|UgifKWanpXieEs02*)@}mnv7r~hVypt2bO&0pSGCpk34PY~W2c6D z9=WrdOmiJ9^qq4s3wN}l1vsktzr*EMXbSjBox6USrnl$B=sh!XbuCOf2(izlAzi^Z z1~oE`M{X6g6MhJ7^T$A($ks8@^XI^dUJqFEMJH@@pcR-GS9Cu4lUjm&{A-2_pLnJm zb)-#>Gt|yH&O)APw)KIY#g7kHzV6zv&=*3k@s*ITp$!bQZs#~aY`R1ukC#TC(D9UO zYhZir5SsZj)~mppkxWtpDEYPqE`SW7HDHCO;`kHioDE_~|EsTBKBBKiKk}!;x&PL8 zHtKc3yb})J0@3h?H*?3rrWTNQJ}>Y5^#aCAHOOD0_=N&vpah_GfW}M=a_F7Sn(o03 zeQ}VL^B`HR)9>{20JS`ufW3DY>HueIX5zi4?0xe+I4x{2>*SNZX0i8pg7x|r7sHv) z>G|yEP7mk)?+#eqS~oVn1K=Cm{#%tUa9vZG=V~M9*;-p`gKY1-Agy1-=LE#F zn*K76!0)bG@jTB}}B8DCZz pdLjPYV*=^rttxm&=!Uhx{{yJRr*+?29Z>)P002ovPDHLkV1ixFj_ literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/amap_bus_smooth_route.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/amap_bus_smooth_route.png new file mode 100644 index 0000000000000000000000000000000000000000..99d8bd7b56e80b8e4dec18c733d42e944d62d9d7 GIT binary patch literal 879 zcmeAS@N?(olHy`uVBq!ia0vp^3PAjfgAGV-Io%!$q!^2X+?^QKos)S9@YLn{4h9CMo1QL? zAr*{oZ+m-$1j-!$c)!QE@4TZ{)r5uIonmPb7rHf;w8*(#RJ*=5Dn&rItH~)!B}^|{ z(q*mEqzh9V%=fBx1c|8JP6-TiyE{kn`NI;o4Li@-#qsyUzb;NH&X|98*-Z<$_h ztLL!p5J;=_NgAD@@(DrJ0n_Oocs&YD+S*Q+hyZf{x@^X&48 zh?uqfy0#UvCsVa5H~qY^wrZ>YS@)(}aiSjDW(HEh-piNHJ9u(SwV!wlYlPgFS8p1F zWbejktiS%)Wd5&v?xi~qU+SK?;_?5qJS#Si8EmrawF84|H+C`KG~HdUu}DmKNxg|( zu=eBka~S#ZbuRpDcATnjxLWu4L?5-QAJrCxU7l5*+}X2v3G0frA6`#-`FYu?KRx_U ziVO{>Ub(w(!@AP{*Iw{f3*6R=h<_LSeC5(l6?1;i$?dS&oF}ziY~`*y>wjtA&*{G{ zCHV)LDi-m%*86b$qg9cQukUONdTZ1kq^G=^;qd(A zti0`4tiR;1-~U%2_;GLH+lblrvP-rp?cVxW>%fmAQ`VJ5?)qx7g7QEuqV*N4jlM1L*yEH0W=ob2cpxX*pzirS*t4mVWdP8ja4 tSQYl{m`+MpWU(*Eakt5%>1$Mz6yTGVBlb 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/amap_bus_corner.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/amap_bus_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..840089ceab140470ebed4098344fe2711ddc436f GIT binary patch literal 42264 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/amap_bus_smooth_route.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/amap_bus_smooth_route.png new file mode 100644 index 0000000000000000000000000000000000000000..99d8bd7b56e80b8e4dec18c733d42e944d62d9d7 GIT binary patch literal 879 zcmeAS@N?(olHy`uVBq!ia0vp^3PAjfgAGV-Io%!$q!^2X+?^QKos)S9@YLn{4h9CMo1QL? zAr*{oZ+m-$1j-!$c)!QE@4TZ{)r5uIonmPb7rHf;w8*(#RJ*=5Dn&rItH~)!B}^|{ z(q*mEqzh9V%=fBx1c|8JP6-TiyE{kn`NI;o4Li@-#qsyUzb;NH&X|98*-Z<$_h ztLL!p5J;=_NgAD@@(DrJ0n_Oocs&YD+S*Q+hyZf{x@^X&48 zh?uqfy0#UvCsVa5H~qY^wrZ>YS@)(}aiSjDW(HEh-piNHJ9u(SwV!wlYlPgFS8p1F zWbejktiS%)Wd5&v?xi~qU+SK?;_?5qJS#Si8EmrawF84|H+C`KG~HdUu}DmKNxg|( zu=eBka~S#ZbuRpDcATnjxLWu4L?5-QAJrCxU7l5*+}X2v3G0frA6`#-`FYu?KRx_U ziVO{>Ub(w(!@AP{*Iw{f3*6R=h<_LSeC5(l6?1;i$?dS&oF}ziY~`*y>wjtA&*{G{ zCHV)LDi-m%*86b$qg9cQukUONdTZ1kq^G=^;qd(A zti0`4tiR;1-~U%2_;GLH+lblrvP-rp?cVxW>%fmAQ`VJ5?)qx7g7QEuqV*N4jlM1L*yEH0W=ob2cpxX*pzirS*t4mVWdP8ja4 tSQYl{m`+MpWU(*Eakt5%>1$Mz6yTGVBlb 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_overview_map_view.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_overview_map_view.xml index cd97415ef1..dedfa69132 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_overview_map_view.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_overview_map_view.xml @@ -17,8 +17,8 @@ android:layout_height="match_parent" android:layout_centerInParent="true"> -