From b4ed1f8585cbcc79be6be971f9e601e6021e0197 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 19 Aug 2024 12:11:57 +0800 Subject: [PATCH] =?UTF-8?q?[6.6.0]=E6=8E=A5=E7=AE=A1=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevaToolsProvider.kt | 8 + .../badcase/BadCaseManager.kt | 33 +++- .../workorder/ReportTypeWindow.kt | 122 ++++++++++++- .../workorder/TakeOverReasonWindow.kt | 52 ++---- .../workorder/TakeOverRecordView.kt | 11 +- .../workorder/WorkOrderManager.kt | 26 +++ .../main/res/drawable/bg_take_over_reason.png | Bin 124858 -> 110469 bytes .../src/main/res/layout/view_report_type.xml | 17 +- .../main/res/layout/view_take_over_reason.xml | 165 ++++++------------ .../src/main/res/values/strings.xml | 9 +- .../core/function/hmi/ui/setting/ToolsView.kt | 8 + .../hmi/ui/tools/AutoPilotAndCheckView.kt | 10 +- .../main/res/layout/view_auto_pilot_check.xml | 31 ++++ .../src/main/res/values/strings.xml | 1 + .../api/devatools/IDevaToolsProvider.kt | 5 + .../CallerAutoPilotControlManager.kt | 22 +-- .../call/devatools/CallerDevaToolsManager.kt | 7 + 17 files changed, 339 insertions(+), 188 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 7a6bdf1fcd..d1cc73df59 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -82,6 +82,7 @@ import com.zhjt.mogo_core_function_devatools.tts.TtsManager.Companion.ttsManager import com.zhjt.mogo_core_function_devatools.upgrade.UpgradeManager.Companion.upgradeManager import com.zhjt.mogo_core_function_devatools.weaknetwork.DetectResultImpl import com.zhjt.mogo_core_function_devatools.weaknetwork.WeakNetworkStrategy +import com.zhjt.mogo_core_function_devatools.workorder.WorkOrderManager import com.zhjt.service.chain.ChainLog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay @@ -449,6 +450,13 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener { BadCaseManager.showBadCaseManagerWindow(context) } + /** + * 展示接管记录页面 + */ + override fun showTakeOverRecordView(context: Context) { + WorkOrderManager.workOrderManager.showTakeOverRecordView(context) + } + /** * 启动调用SSM停服命令超时检测 */ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index 030e2fe3ce..ebd9af2845 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -13,6 +13,7 @@ import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle.Event import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner +import com.mogo.commons.env.ProjectUtils import com.mogo.commons.module.status.IMogoStatusChangedListener import com.mogo.commons.module.status.MogoStatusManager import com.mogo.commons.module.status.StatusDescriptor @@ -53,6 +54,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord import com.zhjt.mogo_core_function_devatools.badcase.util.RecordBitmapUtils import com.zhjt.mogo_core_function_devatools.ext.enqueuePop +import com.zhjt.mogo_core_function_devatools.workorder.ReportTypeWindow import com.zhjt.mogo_core_function_devatools.workorder.WorkOrderWindow import me.jessyan.autosize.utils.AutoSizeUtils import record_cache.RecordPanelOuterClass @@ -189,15 +191,28 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis view.setOnClickListener{ if (ClickUtils.isFastClick()){ if (NetworkUtils.isConnected()){ - if (BadCaseConfig.dockerVersion != null){ - //展示工单上报弹窗 - val workOrderWindow = WorkOrderWindow(activity) - workOrderWindow.setClickListener(object: WorkOrderWindow.ClickListener{ - override fun closeWindow() { - workOrderWindow.hideFloatWindow() - } - }) - workOrderWindow.showFloatWindow() + //TODO 更改dockerVersion是否为空 + if (BadCaseConfig.dockerVersion == null){ + if(ProjectUtils.isSaas()){ + //660版本数据闭环增加统一上报问题入口(仅限于saas渠道) + //TODO 已存在WIndow再次点击会再次创建WIndow + val reportTypeWindow = ReportTypeWindow(activity) + reportTypeWindow.setClickListener(object: ReportTypeWindow.ClickListener{ + override fun closeWindow() { + reportTypeWindow.hideFloatWindow() + } + }) + reportTypeWindow.showFloatWindow() + }else{ + //展示工单上报弹窗 + val workOrderWindow = WorkOrderWindow(activity) + workOrderWindow.setClickListener(object: WorkOrderWindow.ClickListener{ + override fun closeWindow() { + workOrderWindow.hideFloatWindow() + } + }) + workOrderWindow.showFloatWindow() + } }else{ ToastUtils.showShort("工控机连接状态异常") } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt index 89c1c8e403..76132ee3d0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/ReportTypeWindow.kt @@ -2,11 +2,27 @@ package com.zhjt.mogo_core_function_devatools.workorder import android.annotation.SuppressLint import android.app.Activity +import android.graphics.PixelFormat +import android.os.CountDownTimer +import android.os.SystemClock +import android.util.DisplayMetrics +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.WindowManager +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.widget.AppCompatTextView +import androidx.constraintlayout.widget.Group +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.utilcode.util.BarUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.zhjt.mogo_core_function_devatools.R -import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager +import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig +import java.util.Random +import kotlin.math.absoluteValue +import kotlin.math.round /** * 上报类型选择,包括一键上报及上报类型选择:故障类、接管类 @@ -22,6 +38,18 @@ class ReportTypeWindow constructor(activity: Activity) { private var mWindowParams: WindowManager.LayoutParams? = null private var mWindowManager: WindowManager? = null private lateinit var mFloatLayout: View + private var clickListener: ClickListener? = null + + private lateinit var tvOneClickReportTitle: TextView + private lateinit var ivOneClickReport: ImageView + private lateinit var oneClickGroup: Group + private lateinit var tvReportTypeFault: AppCompatTextView + private lateinit var tvReportTypeTakeOver: AppCompatTextView + private lateinit var reportTypeGroup: Group + private lateinit var tvReportSuccess: AppCompatTextView + + private var isOneClickType: Boolean = false //是否是一键上报类型 + private var hasReportOperate: Boolean = false //是否点击了一键上报按钮 init { initFloatWindow() @@ -30,13 +58,105 @@ class ReportTypeWindow constructor(activity: Activity) { @SuppressLint("InflateParams") private fun initFloatWindow(){ mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_report_type, null) as View + initView() + initEvent() + mWindowParams = WindowManager.LayoutParams() + mWindowManager = mActivity.windowManager + mWindowParams?.let { + it.format = PixelFormat.RGBA_8888 + it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + it.gravity = Gravity.START or Gravity.TOP + it.width = 457 + it.height = 333 + it.alpha = 1.0f + } + } + private fun initView(){ + tvOneClickReportTitle = mFloatLayout.findViewById(R.id.tvOneClickReportTitle) + ivOneClickReport = mFloatLayout.findViewById(R.id.ivOneClickReport) + oneClickGroup = mFloatLayout.findViewById(R.id.oneClickGroup) + tvReportTypeFault = mFloatLayout.findViewById(R.id.tvReportTypeFault) + tvReportTypeTakeOver = mFloatLayout.findViewById(R.id.tvReportTypeTakeOver) + reportTypeGroup = mFloatLayout.findViewById(R.id.reportTypeGroup) + tvReportSuccess = mFloatLayout.findViewById(R.id.tvReportSuccess) + } + private fun initEvent(){ + if(isOneClickType){ + oneClickGroup.visibility = View.VISIBLE + reportTypeGroup.visibility = View.GONE + tvReportSuccess.visibility = View.GONE + tvOneClickReportTitle.text = String.format(mActivity.resources.getString(R.string.identified_vehicle_malfunction),5) + val oneClickTimer = object : CountDownTimer(5000, 1000) { + override fun onTick(count: Long) { + ThreadUtils.runOnUiThread { + tvOneClickReportTitle.text = String.format(mActivity.resources.getString(R.string.identified_vehicle_malfunction),round((count.toDouble()/1000)).toInt()) + } + } + override fun onFinish() { + //如果有页面操作,则不自动关闭窗口 + if(!hasReportOperate){ + clickListener?.closeWindow() + } + } + } + oneClickTimer.start() + }else{ + oneClickGroup.visibility = View.GONE + reportTypeGroup.visibility = View.VISIBLE + tvReportSuccess.visibility = View.GONE + } + //一键上报 + ivOneClickReport.setOnClickListener { + hasReportOperate = true + //TODO + } + //故障类 + tvReportTypeFault.setOnClickListener { + val faultReasonWindow = FaultReasonWindow(mActivity) + faultReasonWindow.showFloatWindow() + clickListener?.closeWindow() + } + //主动录包 + tvReportTypeTakeOver.setOnClickListener { + val response = CallerAutoPilotControlManager.recordPackage( + BadCaseConfig.type, Random(SystemClock.elapsedRealtime()).nextInt().absoluteValue, + BadCaseConfig.totalDuration, BadCaseConfig.previousDuration) + if(response){ + ToastUtils.showShort("主动录包命令下发成功") + }else{ + ToastUtils.showShort("主动录包命令下发失败") + } + clickListener?.closeWindow() + } } + fun showFloatWindow() { + if (mFloatLayout.parent == null) { + val metrics = DisplayMetrics() + // 默认固定位置,靠屏幕右边缘的中间 + mWindowManager!!.defaultDisplay.getMetrics(metrics) + mWindowParams!!.x = metrics.widthPixels-2257 + mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-420 + mWindowManager!!.addView(mFloatLayout, mWindowParams) + } + } + fun hideFloatWindow() { + if (mFloatLayout.parent != null){ + mWindowManager!!.removeView(mFloatLayout) + } + } + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener { + fun closeWindow() + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt index bc28279525..588ed999dd 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt @@ -1,6 +1,5 @@ package com.zhjt.mogo_core_function_devatools.workorder - import android.annotation.SuppressLint import android.app.Activity import android.graphics.PixelFormat @@ -21,6 +20,7 @@ import android.widget.EditText import android.widget.ImageView import android.widget.TextView import androidx.appcompat.widget.AppCompatEditText +import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.Group import androidx.recyclerview.widget.RecyclerView import com.iflytek.cloud.ErrorCode @@ -43,7 +43,7 @@ import kotlin.math.absoluteValue /** * 接管原因编辑窗口 */ -class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener{ +class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener { companion object{ const val TAG = "TakeOverReasonWindow" @@ -71,21 +71,17 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene private var clickListener: ClickListener? = null - private lateinit var tvTakeOverTitle: TextView private lateinit var tvTakeOverTime: TextView - private lateinit var tvFaultType: TextView - private lateinit var ivFaultTypeSelect: ImageView - private lateinit var tvFaultReason: TextView - private lateinit var ivFaultReasonSelect: ImageView - private lateinit var ivTimeReduce: ImageView - private lateinit var tvOccurrenceTime: TextView - private lateinit var ivTimeAdd: ImageView + private lateinit var tvTakeOverType: TextView + private lateinit var ivTakeOverTypeSelect: ImageView + private lateinit var tvTakeOverReason: TextView + private lateinit var ivTakeOverReasonSelect: ImageView private lateinit var etNoteInput: AppCompatEditText private lateinit var ivNoteAudio: ImageView private lateinit var tvTakeOverReport: TextView private lateinit var tvTakeOverCancel: TextView - private lateinit var rvFaultList: RecyclerView - private lateinit var tvUploadSuccess: TextView + private lateinit var rvTakeOverList: RecyclerView + private lateinit var tvUploadSuccess: AppCompatTextView private lateinit var takeOverReasonGroup: Group init { @@ -115,44 +111,27 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene } private fun initView(){ - tvTakeOverTitle = mFloatLayout.findViewById(R.id.tvTakeOverTitle) tvTakeOverTime = mFloatLayout.findViewById(R.id.tvTakeOverTime) - tvFaultType = mFloatLayout.findViewById(R.id.tvFaultType) - ivFaultTypeSelect = mFloatLayout.findViewById(R.id.ivFaultTypeSelect) - tvFaultReason = mFloatLayout.findViewById(R.id.tvFaultReason) - ivFaultReasonSelect = mFloatLayout.findViewById(R.id.ivFaultReasonSelect) - ivTimeReduce = mFloatLayout.findViewById(R.id.ivTimeReduce) - tvOccurrenceTime = mFloatLayout.findViewById(R.id.tvOccurrenceTime) - ivTimeAdd = mFloatLayout.findViewById(R.id.ivTimeAdd) + tvTakeOverType = mFloatLayout.findViewById(R.id.tvTakeOverType) + ivTakeOverTypeSelect = mFloatLayout.findViewById(R.id.ivTakeOverTypeSelect) + tvTakeOverReason = mFloatLayout.findViewById(R.id.tvTakeOverReason) + ivTakeOverReasonSelect = mFloatLayout.findViewById(R.id.ivTakeOverReasonSelect) etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput) ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio) tvTakeOverReport = mFloatLayout.findViewById(R.id.tvTakeOverReport) tvTakeOverCancel = mFloatLayout.findViewById(R.id.tvTakeOverCancel) - rvFaultList = mFloatLayout.findViewById(R.id.rvFaultList) + rvTakeOverList = mFloatLayout.findViewById(R.id.rvTakeOverList) tvUploadSuccess = mFloatLayout.findViewById(R.id.tvUploadSuccess) takeOverReasonGroup = mFloatLayout.findViewById(R.id.takeOverReasonGroup) } + @OptIn(DelicateCoroutinesApi::class) @SuppressLint("SetTextI18n") private fun initEvent(){ //弹窗展示时间 tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) + millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat()) - //发生时间 - tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat()) - ivTimeReduce.setOnClickListener { - workOrderOccurrenceTime -= 60000 - tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat()) - } - ivTimeAdd.setOnClickListener { - if(workOrderOccurrenceTime + 60000 > System.currentTimeMillis()){ - ToastUtils.showShort("发生时间应在当前时间之前") - return@setOnClickListener - } - workOrderOccurrenceTime += 60000 - tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat()) - } //补充描述 etNoteInput.onFocusChangeListener = OnFocusChangeListener { v, hasFocus -> val edit = v as EditText @@ -187,9 +166,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene } //取消 tvTakeOverCancel.setOnClickListener { - clickListener?.closeWindow() + hideFloatWindow() } - } private fun setAudio(status: Boolean){ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt index 1033bc99ed..91b665f12e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverRecordView.kt @@ -28,6 +28,7 @@ class TakeOverRecordView @JvmOverloads constructor( } private var takeOverListAdapter: TakeOverListAdapter ?= null + private var clickListener: ClickListener? = null init { LayoutInflater.from(context).inflate(R.layout.view_take_over_record, this, true) @@ -37,7 +38,7 @@ class TakeOverRecordView @JvmOverloads constructor( private fun initView(){ //关闭窗口 ivTakeOverRecordClose.setOnClickListener { - + clickListener?.onClose() } takeOverListAdapter = TakeOverListAdapter() val linearLayoutManager = LinearLayoutManager(context) @@ -50,4 +51,12 @@ class TakeOverRecordView @JvmOverloads constructor( } + fun setOnClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener { + fun onClose() + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt index bd871cbb5e..d6d6b012ca 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/WorkOrderManager.kt @@ -1,8 +1,11 @@ package com.zhjt.mogo_core_function_devatools.workorder import android.content.Context +import android.view.WindowManager import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager +import com.zhjt.mogo_core_function_devatools.ext.enqueuePop +import me.jessyan.autosize.utils.AutoSizeUtils /** * @author XuXinChao @@ -20,11 +23,34 @@ class WorkOrderManager{ private var mContext: Context? = null private val workOrderNetWorkModel = WorkOrderNetWorkModel() + private var hideFloat: (() -> Unit)? = null fun init(context: Context){ mContext = context } + /** + * 展示接管记录页面 + */ + fun showTakeOverRecordView(context: Context){ + val takeOverRecordView = TakeOverRecordView(context) + takeOverRecordView.setOnClickListener(object: TakeOverRecordView.ClickListener{ + override fun onClose() { + hideFloat?.invoke() + hideFloat = null + } + + }) + context.enqueuePop( + takeOverRecordView, + AutoSizeUtils.dp2px(context, 960f), + WindowManager.LayoutParams.MATCH_PARENT, + key = "BadCaseManagerView" + ).also { + hideFloat = it + } + } + /** * 工单上报 */ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_take_over_reason.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_take_over_reason.png index 778b364988d5a53b601133c1abd30e1b63726566..a54e6efd2f6e4c4dd13946329ed998cbd8755c52 100644 GIT binary patch delta 14871 zcmY*=Wk4I@(sc*~30kDM7x&_BEe^#Uic4{)Sg_*m?(S0Do#N8s?(VKH?S1bje^mmScQ$k2Ft<20ssIqm9W-mQe_0Wx7PrG1+R>cSDhDBs1xL|Uf!af zuDtDL`{|WiGLP4pGsn^Lr!X_2nTI@a9Ykr(*H)7j83U>0K$6)&-j}go`Lbu(7>4#0kE=69C6(VsG-|);ej6*%sB3o`Te#%t z=WIV8)u>fHE@|_UZReI9~>Do9HAk0 zolJp9A}p8V-4=9wBRPd6EgB(3uuR>23r<*w`FFx z;X=VS%YmvUv5$@r0#sJEkc^ z5uCcQ4yMtHz*}}PCu?9>^MWoa(ZU;bh}1A8QHPK-aZoZ7&G*P`> zdL2{+%R40TF=ep9J~u56B{>_8O?}iydn)Bt;9Uk!@@?TxM@85`wso$2E}n z_zZlDBLHM-Y#gK9cbkd@%R|vtl>+Ce^M9_kpc~rK3W16`+ach+V}+!wHYPf;Lf|BL z?FdEuRPhF{G1@lz!wK#wGpTw7`aFa7$u>A1VZbB=X==@9N2Du>q@{nFOw8R!j1k-^ zEg{`P*(hG<#g6i^p}x_bs&aPGKh^QKgj=|oglo(Z-o!||J^>t^vgP~Kydb4Drxo** z*p-ZsMh^KNN(kDF9gFr19u0jx;t$VwnyS8^2RJcaTNjfj(G>-A2h}Ki8HxUd@atdL zeeDR^Sz1N#Wq9|+HEhgEtJ!u({$@eSsa6V9 z1i&iNg*y7GxNv&#E0zQ+3#hDz52{j;V$)fr~>hO@=eRf{9r8!GP>d5MnjLCD7BEz2nw|y zo(on??}s3#kdp@9G#YZ;yV>1I?Vmv#RimFL8g7=Y@sM*dCM9%*Y{wuGP>Otff+D;| z5=pN!2e5){!cR3Sz>NMRB z&1ctU$H{3KnKG!9Mm#E?r^VF~YV7vHzW<5pLxKdh<45i!^Nind#rfnrL@=BA^2+Zt z+nR5DB2GseFy!E2tHUIQ?py{KvWG~NgsS{28yd{c7fOnQLWwZRx2h5Xbz@B|W>y4} zPsD(gvjGW}Iy;oJ%la|YENV6kp}17cH|t$;RUY+Lt;xil8h$L$#|L6K{!a6~H^`8r zB6y)O0I9!fukJctcNm8+C7`HP~Fv#If zYAkOEoP<>&%mcMLkvHF*?`d9dbp^?F^aBso^evhCpVO1#=xs)H>(bhKg3pqY#_qG( zp}x~7WEKo&D1(YDO6;%RFh)-tKH_f9V2dv41jEbg>bmB1UXfSdL*vK&9=A$T>&qB6Mu@_%B)KnzZ9?O=!sHV!C>)smHoFZ; zo1HJ4)LDu6CarikBx-~#`Dk2HYR(y80?2wQf51?_E!I2|O;&D@^N&~>_)23M97?=q zRo%&8?N~no%a3+kd-7rsbMNFxmw-Zl2e+P1Zk*3GjVwf?hxQu6>Yk~nMB~yTe$L3G zxBF1A!+TW+7xshj(8zx68if=DnXLUzok>Cwb5J_jE;+!g-cKBF9)AnUS>ooKuI0pn z&AMp2czw2^stn=JTk5}h1^&1MfLnCHLPofu=^wClv)e<8v4)bWa)EBq2M=alnuUOf zSae$M>hyF96T|&9b+Q#cO2v$ZB15C(LL!E0O>I1q9o2Jfg1Lqtz-5`?Sq6z?|I1}2 zV-F;3*=G%&83+U%0Zr*BXV)+)$OOOfi+-YPld8W!YWSpPx23{|hwZ618R~djQ9P{< z>0`?EilNYO$)UTgz6`A`JZOt~_Ea+a_buPq{L8EUv!3#1GjRlTMXDHb^5L2z-(X%Em5$Q#iKo`XTy8 zM)E%7bl%5u_EF8&#N3t2ClhN6P7;4?W>C9Be6+M(PU-dTI>BrEi2__bQvP#ahERyF z11;BI>D$JvgGGzdS-X0iMc#R~IGa4@Z^LT@3YjyL>cW%O!{cv=rygTYT;}Xr@WQf2 z*I>jRL0~X7a?*mo3g6zre|pvy-JY5TXRh-G=jED}JlqDq46t`H)jMwEgjUBtyHyBL z^Vms6ly4SKh?fohEQ>)Ji}83O=vmwk?qV}LU$~055fs~yQ{m(8QX5Hl5}1&HM6#?ogK@SYHSi(4vOvnOve8f7%Q3K7M{41`I2G!MblQZUo^;$G z`~AfXw~+~%A0!&}L>}yvpUkIn(tt^&1(unn(awUANn`e1!7`w+w?e~@q|v~&ku zc3nn*E?jdvQ8N6$s^9`$Q4T+w>GGQS*{{Tq&lU(Rq%;nM!`?D6*y=a|Se#xg%q+f! zC+qlH0ZFAQl)b6!k&?#7iuHUfm;+ zf@B8VnLfAR{RftENz0X7oA6hT=|Ss1D@%eIf#R2+>^kIvj%)pwKYmNXngN!1R=c|= zHDFHI-Vdp-R@%Ha$_P{BLylvT?y6nygu$3OMfRpnqtp z4LV{Nw^mEV4azA?pbjSdKg|g?X!+}xK1^_S?N`4Yn z)}%}q?uwevKF4=`5)*I-02O^OsIww%JeM*_*b8ihKv!-{8Ibk}ul8JF(*`juVmX#= z7GB zB>B|BRDMgq6M$@AD}AL``TEdO1_#S7DF4Sr!InH)$ChLKf0x4%T0JvxWoKvx!B&He{xf{@WZv zRlvEGsz3YA%n}R%9N&Lhtcw$|(`B77uP>ONxDQrCsthVN3@k;Bq}I`V@ojQhp-Wxk zK&UYCYY`Q&oy#rWd`MkNJjzK3TV>1My;2&Wu=!tTw3uJUJp!ryjjfC!MC@idlT2lc=GBW97gxPW^zk4Zl7*RIlTC6IaU=F=PHx}Er!0fpfvB} z0#3`_oJH4Iwu~0*e4q~%)4gn_ML<9h{uiUz)JTKA!_2 zmz4wzaCz{f3+sn_;LoMgCymd8{=M2u|12J<+8Xt2kN__V8ne?Qr^K3jzAIuj$od0=17aWDJfZOZzBE@kwJ)l%JK^C4;H`p zDxDGiezfJwb{yfRaK^Pi+dou+aE%;7jnZ42vn(4xO|BwhJ zkw@JSKPwM1Yu{VLZYbI;YlZO7OFfI<% z$6O@G-1&1%97ul0peMwdV&t01*RF~ZWb1^}jZp85yU{WuHt@-lf%3UnNEKux7>7Mn z(UqwB$7nFQ;X=afj`R!8|uHTFN!A8k*^noxVY%i)* zw|s#eK|%0`=LYI8PH4woplvu29&^YVS&wD8iSuIz8-cY7l$AkV7nj<=X z>`KDiyTjIbdktSuvBF$irzDT`&*2Y(Ys=Z;gb_$lXBkj^XhF|T<8bwJLd)V-PCiXW zX+^CLrXY`1xMfE5MSn15eYD@0Ah)3%CJ7)*I~{s1+6F7APg$^ z@QSOy@?-&%+1bQ0iwp=`A&a&n{f4#aV9b?Rw$_SSnt(tobfJBg-7|A69O7U2ioa*& zxrr#u-s8^To`fS;=lKd3^CBB%9V9|b%4=ypH-F;Od${Y7vv*i5h_xg_1qN@KYfl5`##xrmg?DUZ;gSB8s zC99+71ERq??KrFDr>+G}Z`LDD3-2VDvWTTta7u}s{z}gvAyeE)NXA|qXmr`Q^0w8bVYgq>|5<-4!VSG=Fsegx5x zO|v`2sv;OcpB<2Wfem65r>S$nWUXJR~(68|>c~-cU44zWRFE zYBBFu-PM|atP=&8W@XZr{)44&GXAeTrBwl7gB3Rzl%3iX57vK1eLzRN&D(wt-n-Yp zKJ{vaP{W$_QdBj5O5!ahD?_U2vj+jZ5G>VN;{XK}*V+ga?)q(Sy{%tyrPcj_Ze z(Az!GO2TEC$1*F05(bnF2Q79D=J#^b%%4T`A9|+{-j7Tov^{i!4!&hMj)u6BF(I#P z7m3Hzz842j_?cOoJm+-!t#^qRUCVW~i@Kge0P?N301TCRYTbHfK+K1RDR^JTzUfvy z!LO7{`ZYlH(R+D>Q2;}svwK@e#8PjO097=oKVJ!IUJYpQS;;t)KD_U^7f4^D;;Xoe43 z)s6Lzj@qo>T;BTnsZ)N25{kJ53U<-`DDNQ)xY`~Q9?)+y05PAtv6N*Ya`_CxH2IEJ zl}XDBmrzvAZpo~kyTm7^ZZmmjsp^CE%2TOAWauC;nK9p|{E|0hbCqXf)9NJRjtD5B z*D}L|&U7*$G=uFpM3>cHEqY~t87 zsEiv0vQDG{?W+!M)0QX3bKRqSv1r#6h3dI2ov7h>9p|?7I>G-0F958EDxLSOW%2lv zdb3U_kODib|KuQpSEeyz=xWeA;`C``8UN>Jo3)?P>PRbd2uWCtLPVa!j!${-zo5B7 zHi{`6NV}ZNmz7X|3m_kWdj)7GXuabD;$1#!L}ldFX@#gnan1M2O;6IUF0Jv=IVX?R zO-B_Tu{b&A7cqbdm3jQ_W{x(oz=uOOww^iRGfcIr)@ClJS?Q*(Rizd7${Xxw?@?a* z3SABk3Nrow(cL1oDKhszgw2BdZ7tCza6{B5h?Bn(0x4-+G1t|ilFtc>(iFkB z!niNx8<`u4N)>h7TU+)b^fHwR+-fPEpST0HVtTY?ZW_RP-Zdyt?)-80M)E_5wu zjv@6|#hXD0L!~ws_XQ?nyT``eM$1|EDKmnA!Pa0fjMDLBQF?dxwn}VN*C!CBeJv%U^2eu=vI`zf5CAAM2Cpr zJwVU*=#F5?B)Ryr%H$f}B?Hh&pNNbZYR;g7S}09&7N5Qqt(%$BtFNY{bHTG7D4qV-ztJOc>$#@&0ZGO&u?W>x76PyAd{w+u z2Hwi2*6bL<`(l5Ivk@IsWiA!`5T7^3_K!I0fpf6c6bJQI?nO7|=-hD!+`r^HRJC{5 zAXg=J0B*D3Z%48Rn#8N3r)9^uK~hgEdeQ|ehDlUyq-{XAEBsC~c68(IbPu^Po(g0f7x8IeJ2Lu}W9!g;oelHybut0BiEse2F zEITijl$%p2VTnUQ-mbL&hpD?O-Fd;tg)!k{Yn+zW(NdqYu7*;72XGh z|7E{_fyAi*GF|d}wa5e@hX8ER?0w!=0ce z%37%Qgvq{ImcVG|9unPDrWQ&T8|&rK zqT&2Ua^=g&RYyf#l6dwf1CO{C6;R5bQA#W`tSFU!_U=CU24Iaywc_Pb==Y1hXeA6P zNILFacBN{@8n)&^pwJx%ExUwpcucpYTfpGCo4-3>&NC{=L`_RE#n5W$r!`y&eoT(O z1@CN!RfZcUBQ|bRLa5MI8)j#7{czh|8XF@DDa|pbVgT|2J)Jxt*0%;I_16dnU~!cJ z-I(Iv>`V?C(u!DaS;fGNcd4yzA1WcqB+qbG_4$7?Qpc!pI|EIRS!XM)90{Sc)%)LV zuuVu%m59cfOKE}%<7f3kaDPw3Se$a)2nRBO5$q$_L{P?H$g5FIB7Q40?=gip9W@;E zI9d&$zN6?l&f&R^I}j_(*t{Uz?@)Mt>W0;<`Om3%PVATZ!Jt@I@ zG1MoY@SJ}ab~+|b5?qt@ch78=Wh(h>tJsaDCI8{Z>Lg02f|T2qD@lLIo2S^zSuQOl z7pI}%jQjIWM;M+PxPjxa*RB_`Lv##?SGUgd&LDL!w*J&byo2`P*&MP}<4vGwFkI$* zVoxEPCI=z95(`6(WbxOEugOLH zg#sUB%uWuP>?26IVx*PO57G)zpBI!^U7hBL(%}Nsukbz}LG^5K*&loX63d zfX48a#2)`RuIqG0$3*_eqRwi}&Y>MC!I{?4+IZaf`QDK+Eo(tv70T$#3%bD8HmPm$ z4VUzRhYL9Vfo*mkEtqoMt?ELZI{Iklg}RdFt!#%S9wvwf)Taa{NRgCAi~?A1Rz;^w z@on|y189pcdmO9TE01pw3#Ai1$T!CPY_}HPS|V1la=>ER=l<=0Yx12dm{s~*GV`C`{OT^O&U3GvO^-&j zBL~PPVVSSR?+&jw{W?>xVYX5ikgDhq3B2>e!zH(#4yHN@v$G-pn1Rg{>67pd>5?Q- z7;05p+lR_B{QD?Y7RcI5A}cM)x8*^o#E&Khx<;{{f8|qeUCmb_EMG&O99tPAkA1VfhYlv*&)FD^+#C)qrnSRgB zCwqKtz4&E>$lM@0d&v*lkVp>dh?E*NQOK*C%lGIbzv~?sZaq_+aC__pJCf*W4 zT(J^W0>Xt5vm2~Iy!vJ;+2qW*B3HL~V@SqY82To?DP|{Go*pZ(I`yrWl%Oo}rnGwc zt9{48YD%$A3=JT@8{+^~!`WiJJV(2XZYP*-N9$8CJb)v_V>4h1x=Mti4-9jc;$(S3Vzt{$h;mXfF z9GNURIQoeI6HMBGl(ZiWzU}Kgq8!0^Aakyjbp=U9^{eH1>#C@mvlpU9P$N40;9Id} z#uU)q?9M}gIOG!J%)cU%Tpe(|9+50+M)+ZQtkK4*O7qYlN;FC{4npO_A@0MaFl9kW z%FN_4z?3*j>_WcM^hszQ6H-bJdm)ZRF~a(F!c~%3;Jxvkycm?{hXc1{vri0#025T> zCW%i4e>0ON0%e)#{5@nVsh0@+^D7{U@;U6Y$kqmPj`O4?^ zpn*mUBrgRDKpzeM9uS&vTz?1G*|n%*Qp5D)4Xu(Yq*4S*11<^DMp;4jo$|XGsLGlm z7;mOx$H7crvb_rEmjAoT9dO}qxCeAA%B^6RaInNoPj@;~)975Ix#pXmb zm>P5y(~YOvQtQ6812PZ30m<586tu8L>i+}VyZ;`G8uIR z;6@kWgOe`ced1FX)CpB+p^o~OWp>Njq6LVUByRE{62xeMFNIUX-|a_=Zg~`rGt&K! z00+b3jvsoRikn^HupY2zg5i3IdT_jN>!0lHU@?_weJ>*{f0e&$inf?*Mbr|SffLuh zq)_4X`E7P)@_J3hz=Ne$eeJd}4kRse>LP{3cW}C7S|pr}Fez%Bq}_{y!g%7cCZ(u?~XqW!~e38EeNbf9T;otg;Qvhh`;a*vY=QmGdtqIKQGA1_IWWGHVpqvnO3K_IuGR^I!;D@)p zeb+J@5Fy#JM8;wGcCi0UT)-yG2~+#u4*IhZejW-C>n`kS>(%CtwxyS|zR^v%LVbPz z==NogU)`}weBV;0rdPxjIb)UUSidcguGA0TLa*yo;9!KEXwl?-)Xl{eVCLZQoP4yq zgG~uc0*S)n2Yf=VpQPP30E}q6^5E)8e?{;hJS=jWl=$hRN*$Sk`u%Ou60HRABJ=%Z zRR*aKqEWxO(vlacS~#=J>0{_S93xd19xsVnWHIA&2Oh%CxcZ$=(HTsm;2Yu*v71il>IsUncmydh7BZwcA<&cY0#YDkxcdW;jRL} z^o;e`aPSwWbd~6S?KsOyU$eG#hl9Jj%PnN#qY+niXcC7F&Eq#j2B*s(lPePh$_%bK z%A!9?d2)U`wb<@;pYdSmFcH*$bKN7MI8ec$-BB+hK_e4Z^0$UGzc*>~uOc|R<(9bpXuF?bpaPpeV87FTr1j1N7DgTFsQSC^8`w2xoff4^L; ze7!2Pw$b&xKEHWchvel)?x)))R1t0E0s-y04n0??DE-exR=?|L-gV0TZbD z>?pME;1xHi#vm~^puRRaQr-nIP^?%TwJ-MvDlAq(^w9G8+uM znO9<1ogl|YEXuj^8&fAf*ok-B=O0P_*Eyyx?Oa}dhD5_3gQjbDnVv%nR$dqh3nT8Q znd$LRad5weQbjRXDn-2MuXDe+hf)tm`%v#phEBqvCC&^NO+YKbiNTH7ji~` zcGpVeNTh$Ml>xb!zKoAnOZ*(q?wnL*z1tZ~$5CFB0Q0rEy53wsI^OpmpWH8YoS#>& zEDJsw{K9OGUFvJJ?jkLcw%t3Lj6vtGnlb!-z~dW{1oxL2AfT%LACgVv=C6F?qeA0p z8IumCqeuUpaV?8GkB^@dSMDwfJ1AKKzjErFWInf?=j34$KB@lfvKhM^oxMV4dgfKa zRZj4eJ%dp3d1RQKPvYn=vCr*KStYNedRsMSMUQ!B%$9o#RE!v&G&||vyg}K20c--i zwAyiXI!VNswBokw`Fgc;bK!|35gfT|HP6R0BfwvP?BQg`rfV`V7sLBy8N!^XT8-G~ zJCPNRW*9MO8HrAR^wCFpve$@vBfT>m!l(get?2yWsCyP#+EocCvL zj*HUy&?{;lb%{}$eCq4!Hw;o)o{1co(3A?sc#AM%)f z>ah-o^A=X#=0$r;$Lv$8j37ZJNkL}X0Ak8-ELa&GU%A`Dkz+&A(JHec*ebokpIcXE<$B*{9t^u)E&h9t+i@Rp=~CKLE_d^=4v@9QMbTAFTMJn|9pQCgR@ zC0ANHKIs`o%s=Ch1AR>DMjn)0sNk7mz>G=y(cpmxSg%h~IcOlwZ0ysJ{>Q%wAh%FtF^U|?4NKtUB4JWBR??=R6;&)xO=$Cm>0APfX42S>~A{ksAA5Nk^q8;ggAV?|=3Vhg}R z{Z-Qn@{8W0pe|h5d#+p5t-RqR99Ni$UFauVUNaU}j}hxF`h2%^2DLoXL|S9j;!YJ> zZ-zH5y2@g{7r}2XPKzY_HV2VnzTN*)aej98WaD{Lo9Q{5;9}qP0k#sd6Z?ApGCxe* z5I#`9z^L$<8}Iu!ACv^#6h*n!^~hZWZoTh8M3y)j*?c&jQ-qkEpf(*8*s}jN$Ulqb z6ZKl_mHG4ODY3x$=&Zo2B=%g{?DVkUg_;d9(F#r_?E~tX;vhC7WUjKkl(2rlWbsbk z#yz{kg&-hs2(y~-n}m9WlIS157OrOHo-UP%DdVbIoNwa4a{+NIJN<&B4~XoTLLyjc z`DqXY^48sQ`!N4=4Se%d?U|aqS98oc6OEQ_5zAX@_kZ?ZDoy9H8Ef$uyuBZ+l{@3n zE3S=Ca|3C9vb&HY&@?Ax^AG1&x4X`-W*OV=7LEzVv`le2!$;kU&U4fb5Oxq8i^4;0 z+BmQ&mrpt%CekaDf@w$iuNeKWtyUEdjF8S8-Y$O(eC&97IP55>_%6eNQaQP1k@t`Of4XLLeBp3;8B=S&>Oy@UdG++TP0zGRIXEgT!80moVU6zk@tL~E)j|gH zJF#DnoZ=`i%oA754Y@OK8Su@6F5u5m?jnk_J6o)+=C)Taz20=3BH>q)(&N(>0`k$b zIo_H6lM|+HF~@MK>&e2(y3d!nvIbZ9$6{2uHq3=*4wenZz;4DC1f$Vh@v{?p$sUxR2XE9D(H){-RZ$CF1{0xB#;J* z*j*7Lp=cq(qDzbTz)CfT2-Gq_Ilu}_aN@KvrAt0^nlr4Ov~!O4hXx)#H)34uEn3gd z<7S`bcr#?i*a-c+a@Wn|9Z3dxp=1~X?(N>1tobknlJ8_|W{E6a<`#4S_T!h!x?_iG z!Jfm({z?#oTpj@1xzk7_Z_X0}?FB{ZE9*7_Z#J#0d7<_++Bfw){JNG}33(w7^hasd zL(e+(d@SvFaTmN=Kjm+~y~#9Bxd_v_{PpvlTI{Sh7(wiTfnu2Do&ynIBF_EE*L*P6&vo za6;f4B_E4~@y9gfFK!FPb}(Ru-pXe7IiEuf9XB-%6BlP`HN>Zxw51OdSF`+0zEJ95 zOY*ExCLDfYu95`eYl6_% z1z4PEaCL+;Uu5eh-9GlO@oDb0iVcoc)+)+**3lfLd^{k#dFLi^zDFg~j+yO3yczB( z)V{Rhd6=J=@w|cm_5O&8ZE?=+_bPK!XUF65>dVEKmtNvms>tz-mDi0vcjBh+Zf<7B z0qIUf>L&@5qebdt8W63qY05M$09%2H7);Xs)b_?c>ylGX1+Q(d(Rn@#QqP#fnae_W zx?j4_Bxj1S!;MIqp>M99YyBO18~2vMldw@n|C9q$tOQ>jFi zNju9-)S-%!KO~HOQ(rq3npYvyz0>I5$X|f^VE^bB7-;%>B))Qchuv|Z^?KaUeK)3c z-#zNiBPMVaEqI&zrQ!4`eV}3GiS7$$Bys1TbbX$na<3NSQMcJoR70?zRd`1v1OM=| zTBF4T%mri0;zAC{te=O`Ce1nx+O;`s#1=y@znAJ8744}T?y663%C-@nX&bO{w`NH`LR(XuY3*^?K?d_I#yd;`cZ@Pj`7yyhL4jkrA~IV=dw$cO$>Za?rxp`qmlU zFf4b?&6lQA%UBCd%T2CC)w+y(yS{Rx+8qI=%dK`OE7mW*Q6sM1EDsOKt+Ddlf@4bh zlrO7WzT}zrD@~RMlfvR&3S(y`%6_4snWr7Pa}rX=n5@5=(p?rpG3KV|?#i^&s|RZ) zHM^JGiIW>4_R~-A12?yCpi};*o@(asC|{1x#kHn81g%2Ox`iMrl<$~a-FVV#NoyPL zzI|+^_22g?q;&4;->iR9=<#K!0w}ZIv zb$tv;Tz%eMz3;~MVzwVwqHBMBUKhMU6ns9}-27_M9`dxCvEqIkDZt<6+LSLa68H0W zztz?7+}yeU!yEaIE{-Id2(*W_k_oLYnxHHP7P1 z5?EMn2InJTpVBY4cmDZ?SU|uZM)6N$(Pc$o>{lvOKp-||(f9E3wfb%+VR}PqX?Q4z z`Ry9>Pi8uc*;FoBp0L*U_(OH2B@v$o_Se>M9lc6VefRC%A9s$oPoxtcTfXRIbUY1z zeLc-|vq~{;&yc6|*&Q2Y`?x<`Ea?97y9e>-( zZy|MfS`t8GCD-EVc~lc;i-e>j+IIm#uu6Gp@@HlIj4m{K=>Oe&KANbLTfh;IK3*@} z=ZR?wss0;|3VQ%8Qxb`sHqC=RMZKnoJTX$58!x}{OcW~33P608XGNGQ&d%D` z4?*D#q;nHr-|A>k)Cjm)P5eG{d<-Wt!oaoC{EqAqm6*62&)NO)!q@y1ch6>HwzXf? zR%;!PhpAK~sJ8kxAp3`g#;)(*j$$*0ZWNUqz~l29v*Fcd*2y4BEzDZ67Vv3zYSQ*{ zb!d9NSw7ybD|qS1V06j!+8lWc6YxG*DKa{{|eQaUJ^k*7*X% z-JqY+bPN-j`FDMHmT!#OoC!BRMlj#^BNH|R*;%k#BO>dqD~A9TVoYF!IKU^`%V~Y4MN&unQ4;yJ;Q?!Cf5_p@(3nV8>fm30!Dpr~l6U!V;Zou)#$eG2tLBc^OHyo^Y`>x&O6j+XE1GX)i=a7m zVUrGsOlf)G$MVs6BHn`+KRa^<511zM z9I_(8!iJp`8|1^dvMbs!gq3d9>aSrs-jR$249IAGU+nVy7f})_078XIGmmu-4ptXV z1XYH9E}Z?btgVyL?h^UZ3Q2G#ikXr@cR@ngf6>tdrqkzNbtu#HZ9+9*&&PJb9V?VJ z^*?JWP0oN=Fu}AvUPv`KPjyOlDaHljf9?vj$k)?oaBk6N)TAK!#=tm-h{1^pcJa3z zaTrP_1rz1d102M4-?@r=y6-7tliM7Ge{w(b?qF#Q&6b?_Bq81zZgvC1i&EU+^~&C; z;mwn1eIc|HUl4Qo1XbIN^h>RWosJHfdfDXFF5*G#A{iWes`p9Me7CR1*HW^}=l1PL zJwGke3P>VDzsE+H_iW4fpKgBE^JCRnf0$DQ5Dgy%Bw57l#JNz;{v-_b>@r6`?lc#LC3pzBWZnFu-s zK*(2< z*y9=znGOV~Hg0qBz8YN3MEu-{&luaI#FgwAQMbFdg1>xWjlEf#Pwr&HNM7PG;8$6N z+}0Ac8QN+EjUH}O{k{+=>Vjio6;1acJQ`oRv{s6QyrgcRBa^rSGQ;HW)Lo0NRhBpc zx2CiW?l8$R5-qA}cxhtaxq#i0#IsQh*8*P}^^=Wuf#3zJwF;hgSSP&)>O>N8v%q}n zvn=%kh)E&x&#k`Mnlf$YPrlUxIx$;nnk=uaX$Cu?#i%pWVz@x`TtbHt7dP}Cf*Zz%?LZnwf(EyX7Bh^yy(2X|=m6Ic#{Me{m(F zE%NQjRhZN-QzHunTOIwwQuII{H^3}PPahEz47 zC>y3*dn=@R4t+W@aFW()QF^~dA9FdVtc+9Wvh|M%FzMs6)#o9A z&~H)yNe^cVO?UVqvf>2FZ4~WNu|Bjf`nVR2UyoQrWkyhJ7Wtwi&;%Bl5v0X<`WbSX ztW$oM&js|d9yd;u8PWn59cXP4JTnYD6mq(?DslEj+q~6#lNJ2?(Y=g3!=@cmFPu%7 z#z7EP^DjUT^jXSjyi17RyK7ev7r!l}XCJtr_U;$Mn;^G4ZzF!bPl$z*29AFSye|i3 zcRYGU5o-c$qU+H|w!R3-wC|Z$sgdcUR3)zvc^R&frPq-}4)2}2{$jdJfAtc}T)eWF z&8eeNIt1ZpR#n7-r_}T9p=ddunH+^9j=EDOgao>#FYx7izBB%`0u5Y6vgJpwM&N9< zhC)2r5@W@oSSEuAI=3#Am&Dboh75;B4yl>jjl#U%cD>KB3RG;mDacIfQB7A zu>f~ciia&A`oZog(LRSoU_h`R3qfr#Hfmq1QgZyjK!%B&4^{$zhE?qaME0dMTv5LK z0ZoMp{G4d$nj+u2%RN~6H5h4gK^m*~kX6o|hNSO@6Ps`HT^FDhRT%q~hnZ|^nS=M@ zv+PYiHt$x5`8)_mv(OI!j2t_1v`_lx2pU%PIIsbZq!t-GBO3kgDMn3&IbC3ztQ+*& z#6bnnFN>C-U^}T}&NX9%ZL^7Lp0imgP5kyi;L0{~$;=v-F1=O5JLVn;>XsYoXOTGx zJ`l8jZx9?_a0X?JeCz=C!(=Xbe$F52R2etS@d3%^4? zsw*k(C)>fVz2d;sWjZzR-dSR^&X|j4bPP{>!ytyA^8i%^@1Al(Gz1*90*!RZEUp$3 zUMZ>mWvKE}fRcw=z~$BL4>!9lbhJ#vFJ<@O4f0anx%K%Oa+CWW^wnpaBwN#nA172} z=03%+Jbufcoi1~dxq6G*T8bIA+h6DR*ia@l@Q!94F&--jXFa@@!ReAu3E0N!-4ctgv3GaW=5c=oe{^pXZB@7+38^dzj)o!|Ahwx~IP6g^X>4z&{h1*73 z5R6FPP;Es_%3w$K2uhz6wZ;Q_WP4qy9>Ze#pkIxC=EDy0+bmuGG<`LxQ_csB7WqDC zP*&Y9v0&pMWlB!1~}7(|+l7z=Hb zbyyOp+qxUS=SSgQWXt|7z<9>7r>YDr)ttRPv5Y-yjM5qP9t>3g9~T0mh--O!j z`@k7rBJbC`PreqEDt}RNjx$E5n;G3TFG^f%syr%?23ol8;TN!~gj)MOd`Ar_K3Eag z@BcWwjztoWtSgrQ5{NbL;*6B<#9B)9L(&iK-##ZdBv95Q8}{FuR~7MvTJjwR7&;Wk z_*Z6JcB-_hP-Cus5B1*e|KQR)(L`sLFl3W({$=H@5T(P43McEd8)qBN1y^RG{Se_OX-nJO-Y@Z!@dD>*slg*+unP;BrODkS<8Noc5 zZ+0 zhO<(%C@&J|fNbc`Wi{@WJ+p0Piq|H_;Yd#3~wp|Vzu zeO|(-u+guE+TkNK;hoUcmHKPuX`{QsLnKigu@IAD`cY;cY*1h9&(N0Xi2Xfzor?6=k`GcTBUr30Vc34^ac_a&1NYorJd|cm~ zBt%zZ`MrQFvbh23-N0U{VtE7_sbGsS2Qjn4a?t2Lj!Z&Wp?15-yuN4%caHf6k!dkT zPN-}36jJ_I4Qpd^?FgMiuD6jhDMm4y3h4IsY>f3Xte>|q=d_i~yY!pFzaz6zcg1jnsYmOOO^-c^|vKcX%dai>0y zD^RM<5*s68Ed`JG-_+Lx^8G&ZVT>gjbh2-;^W&1BqJ36;y}0nEBHl{WB4xK-DlR>q zoKDP;`y;9EuwMkeKP#PckmH_&^xs?sLamW-i|KE)?4;iXla;|b8n@6x^b(Lau66IH z8~WzfH%`DE!SBpRHc1d;n>TrU&IxC%sE&6O#CsEQUeM7y19*h<^Oh5|{w%X!qN7dq z*Ry~t3Ek~rh;m}2SyGMySrtD%o*oT|qm(?cDm5ca?&3zqmNXwOIZ zqeoOCf?A%IT@O)#MlJWFib^@RotC(k23%9*#OBa#*8HM~^74byO95kG+nZ5KZ1b#N zctRp(#n?Ms-90hgOPu{VjF4m)0?yGIt`QH#jMP&?$DK`d48Nm>)ePNsWDh2pIfgJw z_}ysg;ht=tbIN5!-*siPB(ud8bU`1dpYl15&m#HR2>=-@wSfkA_eVyH>KhK4!^LvT zTwYJu1+t+T9`vPB6Bg9@VDe} zemKRdFX4JYVv62xhIqu@44YNKmm=mRuSMum&*6pmn`NF7>sb;G_|Q@aawb`O$iz*ofb5Xf zh7yv$o$q05HdOYz)4qq6EQ<3}SQvvhEaV}p$815^pC7qt+$*9-L!XQk`qce$AOm+Q z?PKUvPkDbMlwK&ZbrBmp`*;CajwJ-kg!|Gi_EiouN4AIy*G5h%<|W-GwuT#K@1s40 zb@qOgF%X$lOnR5-kUTu5nQMabime~dp`XZ1dV_H+1mWA)SI{%nCd?o8xZqOBsg`ow zOfD~z0B)TIqfAQyx^3o`8Hm%MeAtTUeghFgp1sX@dD z15+np3H;)faVcpQ5eEulFE!tT1Zq@G=%*%3s5>bsiwb7&psU8%<&)TZc_g)Fa-o#K zFw$n;mN&Ep0Z?i&4v*kmIyJzO z5}M5uObNiJu3z6NxS{!a4Ni3$zk;XiaXwC!EV1fCIdVaw;L3!$?*00ij_}f(+QFQB zhUJoq5<^_!7Td_fcC&<$c*VmkfZ?C*Fd7vY0Osz2X2OHO%7P->M=nqq6GF&N@dUtc zVO?mJqifOH+*L^s*(J-3U$4|Nn9p;>lW_dDq64&<{eV~WbKjbISMsl5n9G5s7hc}r zy@d7&_<@<%MW7yRKq&O;IQ70mB?_>jcg&Ny+#R&b?Z+HInG@dnL zTGneaLqhpy7f{2nnx5hW!o_4ev-PhudM?lN8d>LjvfT&1X=V~S*??M152Y0?zdIH$ z_0W5=?>+h`&5FT3!ItLgta~PE_XPn8P|nAE-Gh%GW6NVPlG&e5;g16vEpJ2zX`{nk`_Q z#OqfSLYPdNxi95kU2wIeszsjh@7gs)7+~?PD?c#$vq*mB|Aqge4$x=6<#(|PzRL!e zxwR^|k4~YQLhJaPa#9KJund>C|4$__M7C>tAV_me!wqE(xv;q>2AA_clC}u03ppie zFKE@0?$8M~ca@k6hrZP-yb~fTa!CZT2-Qyt7ar+fdyDtId4>MURgWGkC|`Qw0vUXHe>ikw z-wtI!wCZE2476xW(}>lgy)n~8ff*w#{AlP!v|mjPsG{Sh!|*8W^c_-L~nQK)#JoLWGW`fdcjKEtG!NO5-wiB-h|!EUxxj(UG$RXo!B zgUd7)a@GiWYT5#n{?x+r6!W9Giu2)DBT6XX>ubSI3pey1+RSLMyn$R!|16t3&NsJT z7SNQFTVE`*rH8%!Pi6S0w6j3Ug|K$5ukB>UdM^z_j*Xj(h-2S0&=NldGvwvQ=(WV7 z_6jDELK5`5i0GE)*;cJ%N?wmS5CVOdY^*>~zA(`t5DT zfVi}Tr|08LsQ`A6d<

pe~XMRxXmqc8+8?pOa@%?ATfnP!H9~x@Yx9yq3nWpFU|- z;fyMgikd4kgyNhA?@M?%A+$uqpf-Oz%CG3hXD$?Y&k}N+^ix9O|E_%%9der#^K^^O zr8GOJw#b57+9)?ROM)m+$<;;K1nGFT5xS3o(?xLn7dt=9&u|rG zO%cs~`uO4Scgv6dv?~l)mXTSnDN@FuB){wYVW z;azFwUs*8*13iTjedSKC^r0tofB^%z^>IRHm|j6Y#M~5^`X1vEBOKj*9PZeD7ZKi} zjxIkeK>^-0nO>pj7#z+06z5OMXu?2V$d|r9rsT_Zd$b8h|EpM5L6B9F`q=NUkE40I zI1Y7jikeJ0ug9VVOuHU6vKwCR{@&)g*&XA_4cKcieJkPO0JkN7alR{EaFL)VB)Te_ zmk1pe^FJ}_n8hrD@)RY6a5IiE!7_p~Jl^W6WPWwi3ssD1{ME%eG|t%J6)>xN#&oII zqTnSTUXrVsb6w=BvWGKTvYlL^rdKjQ^h<)c%-FQd)@tFMHGWFw@6-c>1W(k~Ao0%^ zdvD!bhLpuL$cq5i-1AvfbpI!~pnlsp@Ve?}f{3f+k@jSwzzK9`Lf;tGF!AiFwMKIr zODxd}UBS{;D{tfay6G&=%v_P!q>%!bAnqy~r1%O?#jf>kldYA^Cp zP*FT1Zes?B7u_vQms$*yc0=DMo4nS@30Sk^7Qf~ej<(2#OJ4-&QFKQd`p1VaaNwb8 zdY1_0oa%qwENeCtFlyPXNF6nqwL%-*aNyqJKcCQyRpX)4b!9v?WmgsM!u zV65QpUc=5jNy``AT>R4MDCDt}WU8~d$gg3@(^`-cCjIEB>V~9N!E@L-Yr5D$m}c`w zzAoeaCT~*h=?)=>HvNrXr~JbSvkSZfWdi4y@(hMlWKN4v@VRx3@&mG-?X7N@gC_IGT#65U!TE_L_G|u(LO8kkq+tu`5JFz-S4W_s|$)f zGN5}=LA>VOG}yxf`q=ydeW^@85H*j&`Koj;<~YFNJ$W@&4I! zS@*I{Zu$xe?f>d7zMqI8>S$p1n1cnGpqNlb*3FOMERIJ9MxVu_-$3=qkjcN`aN;3i z8=x2C4$c+O!)lzv-uV0<(Ena{5nKtpi7pDQfUkY%a?lnlXLp0P_?J^WNF`2U7u;FH zKkM^9X3W}h*q^@dObC#Dkw&>)7|>7f=s>U;Xj7!}x;EX*E`nyN9bM)#V3+jO8Fl}s zDdrN|>oYlab6xPIUtmUD4A7L20;R|`8>C?p0OBR#2|Ru|o)Z0zklfNtsPQ3zHu%9* zI+E*XMB|^Bgu07kF5E___Etzgc5&m>5>=PYYYx=VdL-loG~k_jcGD^7*O`<2pFMg$ zgoq*7v5kqPohJ8q_Pq*-Ea=rL$!H3knpoNyrBJG*jwj53m^zSN2)Ou#5=vW@#iBK?9Io{ zWIF@DYfgk*{=yuO^vp)}FOD{Xr#9<#W3Wp~;IH?KREsa|n8^8Y`0IwfsubFIo%Po9n4k#4 zb9!4SzQtv}*vP^FO3gZ(ySq=?bC!q3ftG=_#TbzBLp>%r7u(3RnIkbDX|KM03D9%3sBt18Q<)6!C z5{q2OftkJfRK9i(UBz{B`UGl5ymj(oZ572JXIaT*-RCRbgB1s(2kS|8?;}H$k@H;yPjRR{ssBWDL1e2R z9*%x?!VuDv+Hy(zoYRUkZjsQ3neV&4%*VRhq*uxedf)skL8-I0hI?MXWk;GAb!}}x zf8B~vTRGzG23wr_5wXTv^x1p;j=3Sc3C#YStTtzsO{Kqtz^mbxfRFGeeLoswOP7-H zBW`Iq^v+w(Y636V8`@=o*&Vj_aqis7E`*?z!`XZ(mbm5p=JtX=JUIxYLmk!<6C8Yv zqm%ibQ@Sm*s_IJM;YP#6M|-j6gO-~z*b#lf@o64&z95lare+~49NnQjnkYYEevDh% z6^UXBImD(k+o${Mh#)_Ju}V+|*e3R*B^V+mFhV2KH$=Y$g!1L}GSvL4W76bwLIhWi z&Aph)=L1(tj9^k_Lm(z~ULuLF@IOLkK1iN*A&aH?0UR^%?za+bB?xJ6#9eg8c(E4{r&<-S6d6bsg&3bOMv#_69SD{e*y-LEf+ zW@mTp32VJm`ZLj|t1Y^A#|rM%zLcNsHlG4tNkWBwXEVH)m12O^lyg-5HFXI%F|#O- zdf5-!-vbP?0a|0my2H=?-M<>xPt@;NAe0zS#$TPj&$d_u2yX2#jWbO2v?=GYFq27k zkXmL#w#-xn9`ajX`F`dm)p_$Aj9}1{ERgPHcLMF-idPPZx*;arnT%Z3A^v8f30=%R zdwjdXcGbQl6@JVm@D&wd}MrERB?Mm*e@Kq&C7t2eIi{SSGGR1WXS~ zZHiwAI^Kw5CG_Ad8X7Cc{?Z(L^snOf_E@fv)6!4|9%gwHI>(-QGdpF^ZW;_%KOI@u z7YZ4Ur0ighAY9q5A|#__4>UJ`q2Nxw@IE|r_XxYC@>qJxWJ`vcj5|R}!=tNT?gq(k zfAr9be?mmsZcPXAe#vSx0B)gdAfGRsr-aD-h4yn%&w3VWK^Sj*#pG{@b5fMR;M<^l zsPJ`?!};0E5;)J5nEMvJK+T>sWr z5k`InG}k@$vAesU^?50!8pASIBk(S4pP2+(tr8~kS23(I!s3H<^m&~QS8J%IrY%;G zIk`(h;Y%XK2O>r&NJ)_@S6$9BU9*gcE{gaz1N5zB-Y>O(ZVH;7f5^zD9tZKouXP5; zu+2Swu=sU(^T=o+36*Aqb&ohiZ>k93hcTcli2O&zH%5Za^~V1!DX$PdG!#b#rI*4{ z%O%H-cg!gw(>#QEF^k}=;LDM{`W5y=xt}JCm7>6O^>KTc3G&~Ntft_=_po?WtQvl= z|4DH*FB1hXujOFcjlK0ULz8u9+pbDuSCVDx+f~MdCU^PK@y4?QAS=nnZ!x> zE>A@IAK)u*k431PiXBsbC%O=Ff}~A;It#H(qdZFy(C!857F}~i7EspUI=77aqpRHP z3VknBLGKZpmSN}*UV5>C0t%mN0WnOZqWrY2)I0C#ea*EiiY^f1ASgORyE$Ul+CQ!?{kCovqy79^|=m}M!3=Rmay z!S}?p%rx_3W{xR8LX>bA9RooZXC&`(qD?wU;z2sEGG*vw=bq&R45Fb8*fEl&_E`pK zCH;;*<XR961av>A>wJI_rA1>E3$jWNS5=LzRmy(ARRNRxPm+J-K^irZaY^hb6mL?kq*OOBs*a}`LD=M)?W z+jzR_)18)oNWM26-*#=*szZFddWqV_ZhUSGGIrA`=eNrw zBMp7Ct+}rHW}eFPXOotY)@OGj`pAuAaXcgF*0>rEj{KjmvVtGgmO6_u+{@Y+t`YXi zREAN4eVHf@l_IPo-oM_#Oxw*|Pkfnjm>kFTOIlt#49F(Gwr2)osVBO9H>>%O6KjP~ zHfB^uc3uF|AlC%`R^q&LpeNN#q}2%^vH|S1o*zS$XU_+}&0B zj!8NGz4(V=hU&ey0iWA@Ps7k-ZKVY$r+{k=-eUnu{QuLqF}VPv<;VJd7&}r-yEG%4 z@BtskL3+t2`Apk50NUYe7rlP88^iT$&kIu#^~s7x~soxMYUW){iS1XEjo`UpiG}_mrTfYf0}21 zv=4k`MN)=x&L}yT58}s#m%sDo*%?EW4z*6PR8q{X_)4{v&0I^IMUaCF&*YOE%e_FW zqZKe!%Yo%`?6DT)yLEga96m_adPrsZXq~|1^>2*+pCSc=l+wdc`8y0z)^KoPpp#06 z(}RcEJ#idp&-+&WuQzj7-!5U5ms+pLsG@vM7+$g=a1-2gx^TSDjNGNr>dVbFC2D1_ zf*`LxvP?+E#*yaAJdkt=)SA`L+6JB2{^}1K*T`xHdDoaBXe*%jaNJ{;s# z1eQ8)S|sl#CQe?9K~f?stAOa0WFu#dpW{$|?fb%@3d0i1HuT0=~vP&;z%jJdHF)U6Hu_bPVd>RQNZi`D;Y1!F|L9_xSJua+dadf~9Zv zCL@eo{(F@RyOwZI9yZ|f*^9mdMyaeyX!%JEv^ktI&6J=Px8bEqCi)P zE_HL0ofz6zrILvs6J+Ui$pM{i2=||TZ@Syg-7s`FI$U0#)|n)|oZ&%ZqpxkU^}5^; zV>p8py@0kY1>OuR#vK`2?lx0S9Ev_8i5wu)XGxno(ml0|V&@N^Ff$<7 zxLSx=8IWGWG0V0w6koW8$|HACLyu%~Isa>T&>cj$M#Zg0Kt`7w7}>6|+-Wau)#~_I zAKS=LcCC`we{)asyI&l+6M%3bmrH8-}I{ z+7&z)y&ugqLr%J&rXktM7tXmasPo3lUZ7pf4+ZLR?OUz>oGZz``8MUh*rBKOKZyo| z2*iULk-w(8{Yl|8Dbt0trY%<*U5(vkPcJJl3@NLG+I3=))xhijaKu6$&Drx>4r)zrel&u9$5A~qqQ#dWN zDk3N7ZRxWn%84FYA}1sKvxD<`sv;+iGe3j1*NJqEeX8(deLSWCA)BFW+n3)#pP&+n zbGPd+zr}rt#J*|RE7+b&hlxGLM)v)-%wg@B+>?zN*#m?7$goyK}=QP&!33Qq#4ejT`5{oyXN|C&^4 zxXHqoz&GpLy+}smYdHR2j7@|%(RAK6gx58;C!2|{nhX5CU%Tz=IzIXw^-HnNp%$O_ zYQ;Ki(=QLR!KaRll$3tkzD_P>?u61Q>o9lPQi##98N`d{IQ&g%7b=S^azn?E^tV$~ zsSos-X}l)<)NcCYo~sa<4G*2=D}&-n58$U_q5k$+dJ=jRSSRZ29Kp)*=RRwP03mpF zijqZ}OPsg)pRM{2K;ar9nbkYOrmyXj?`>=hGS|dfh)a%L2N8`M1BQ9s#n|v|d-Xw& z^mF}iYj5a2Gv-5aY~WA3Jwct)Lf$Hj*vd+gp;YSW$TVMH{LKzRu;;txVKpu}&OaYy zA$u#s%xM^}cLXoRxy;gXG=1YykmE)9wp<%l$)R-f>7PB$B#*34G?JzQPgF8JR%F7oJ-{$T6nQpX^r$CNfPEtQRAr z$?@(UIfUF*Uk*c$gO*}QkBn~Bct3efMc#M}x@Z_`tLF%}fbQwfqbn_Ep}|+`ekF{K zH|BRm_fbDwrhR5;9d3e)JIv(_WxPZ=KO<~s{~mZiG_R;i=9zeR-lZJDZcJB6%;job6RB@XTfES$*<k(eb-nVPnGYEg6R$n2cuX?f~qA~GLeY6Bui2E+hlHT-t5p0xwdHj9b?J?=X zb)VIMyAXZ+=sGSPGJk}@(jsm^cpy(e(Kdq@L<)c52 zWy;Ye8+2UD7)J+)rvLxy{PVcF4CdWMjUUnYlK2f-VIjXaI-lvm{CL|p;ETnALh^Wu zIp8pek|3M*6?4JU>reaqKY)f#ByV>K6dYuZ;k*d2V=MJD1>woYfQZ1vF3#g=4-S5z z)~|R@+t4@^{kO@}sW7z8GmXptJv0kv6*UAaH|3b2#93~_KklTFR*gp?ECvupZ#At^ z#PnzE=)hHW=aXOdoP2SH=xAY0&RV@S;zou;K>)hPum%`k}#KMW+F8+R-pBB#P&o6bO4`oyGWE!ioxH00yU-&UD zb{1Y#U+Z`*8LO^m2oT0q%sw4?7}g>tBd)U_m+skl|Jc3_HEe$eH5q|splpwn_{z_G zp|JSP_koCQY8YPiR-y4@^$w4c0sx5qZg|h*Ouh7N6#;cK%X%WB<}gU(B}YecvS~Vl zCEJ7Tk)oq|zo<8<*RPtW17JW(keaJv69O-3j2Y_#%tFDGAuCDbL~tmn{vNVf`sKRp z=V3Ep(WKj~{p$F1%hWu+U{<|~-HDFU-cb$CMP>Vd|f;#WfW-d^W zZHdiv#i}^iGxED-S^Js|P(Qnb8y10UO3z+JS@*`d$7~hqp<&}>FqCo75u6~%Lpw_( z*YTndi{RIlfGliAt70ksE3}TI%3y>AHzYJ`Bv!wiW7i0_A1A=VqXpwX?+YKAu>THk zc@pzDnnP<_4_ON9?(moz`Nf)x+emqMdEI(k=H;&PMtE7M2)hLbu&?)EauK$CPTZO# zjAUz}Gx{28_iG@}_?t#Ku?t}N<*Y+*VD3t)U%Pr;)iN%Fg7aeuCREErm%0u4=XZpI zXKMw69BQrVDiv5x=~5P&oJu;}a2taiuX^1~eoP-Q9#+L?`PgcGc#AV8pZySQqfZ-? zfcIEWP+oPW-0i%Iz1Ipx^FO9+Xr0PigF`a)3S7Y+8Jo zN6hP`Sr~sKT=npLZNpn&ZgVG%XXA09`|%aBqJz>q2>}sjg6n+dv*|q7!b^1|^e7x} z6VFlhs!UAVWC5J+ZZ$UZxefBaszq5*$U9U>6i;96?^nYthD*tuE16n4x zV@N(r1kE7q*D2!s9?*!q4E1Qfcl^n>@_D~_1+!8W?uG0hPf|;X`R?dkk18^!IP?Ex z8+stJ*5lS3)nT@mOqRs+%TFH=2K-p1D6gI(q^LSf7k(Z?8t)bfX2vE|VadaD?DSvA z6U;vcxv>-!q|6(%#>#Zy&l{vG<18wEbHX;5)ZVMZ%4{@*1nt=R+-fgMuu&hFh64Wq z==s`1IQcex9h@5#bQDpKLPmyS#lVtxVW5@|`g*JXD%m&iJ?GtBH&Dw5DDawO zQU}K3W93%#LsJ}G-xR|BOdLcHy{E+bU!e_Wg5k?{w0Y|0K_fun&@aW%PbA!vmjtG? zxxyH$xF`ADNN+Bk8dEbx`b?k#=1PKZHC85rj$dH%QjGAG6~~5gZBdbMl*{x4bC3x9n)z1XqZ@Av7QWtLAD^>;h#6T2I*k;9#Wi-Jns+S*kG4p7?*s^VkwaEQH#xH{B#|yQS)FP=jaCa%!O) z=Bqn*03uRrkV=cb57m_OTf1h&$?O7l_9kEGd-iuaxi8@o&4eL^P5Ue^xz$RO@u3Hd zFv0IPc1sZw!p44IXMbMk#)-;;Jp+?8-lEtv&nTV?4Te5IDWz`%OY~dw7^5bCpinmeyvIJDlS&z4S5q;V{G*a@t97 z*8~0V*{_7%t-#tOn#fGyrEqtx$XR~u8Ku3!mmnWMtpP`!9I?;QetwKP91&%Q-snC( zx=*$LX>7ppz@q{+Wa$s9uKHT$$_n0IdzqhZYw;gQ+}=Eo*4_jf$d*mNPBS)Ce37d; znk!3mvoCO}tr)QJva-+X`d#ggI&*3(l(x~tMzCb_J4jDsoe8%09;=-LouOpscO%o3 zT-5*AG7)l$YgdfILW5iBkbFPHVslYkvilTP`ap3qnLeye*Hwja{Q0Y}!iT)4Ax0;9 zH-!B2G%sTI@{j5{EK084dmVE@juIm zx%GGQXUk4Jgnn3^$m-L+%CU|;V{Nmdc)_ov(+uyt!@3*~2Fr!{g-zw= zB{H#tt!l1fMDEl|5aTV6m(c$JIl@-fNPY*dZZ3F4fYszKvmc>nQ8>NgooHn#BFg*i zd!JFM+!^&sik_#L-|Cs@vu+wLn|^5Pa5+D-_$mOr=^CQGnXeQ{?#nQN#JtPLP(V!k zxxKTN`8>_%Y7_Y~m`*KV_AvZcIjQi~S~h@Ac&mPy<^0Y$U*1w465hO_as_;%1iu_Pou!_v_woC9*wxhj=?zUc`q6-o_vQz zxKDdW%`!KhXWDY+d<^ecjz9d;M9EoCGMO&il;QEiCEDkkSM%5h@!QG&?ZCoGaf>`L zYiMT~td(V(3%YoDPE#vHvBlI3^jLU;9-u)!oBNY-zU`(Q-{|+kwMfxFSst`3VKf0J zSbv!T)#ovhX*;pvQ?VwKKkt6Wd~$xDs&lYQV&jYA0?x*&wsZ9hrl_X)^t@>dr+3a2 zFNF(mdK*8#CHipm4&N~E!^FSpx2WewO6UA1)d^{;3d=b0wu&Po#;)BoZgWWyIw`(H zsr*pVkwWzAN;$YWmZ(aMH4L*7WR+W zKX)=-o9?;!qKG01DzR~#R){f_8NX6N0g_DXxk#@)7bB7NSs8HQfz2cCug zrzS#wUQaF5kRVcEWBao8kS1yWkqk~zNeQk~fH}yadj)!i8Nphx&&-9W= z+&}B~{9eUsyYEs~79F!`vtyI>k#Ei2n&2}b7w>nhb?-bP~8u_q6<8BYHQxWruCX84PqDm zE&Aowhm^@>N#{vNHsvwovI;hUuji_b=k)&jm*x!&Xjxqxqt3@LWwyqA6dd0)e?6=u zgHaU`hdoPyq>OAnmuHvihyivS?V$no-4sP>K2HK$o|bHu&_-)37L`Bj?wOtpuHy2% z@qAb`Ieff-EjV`jJzC^5ATUhSS=>3N9MJy z-_Ou-=vI!v6urxCg=xWUY43vzdgj|x!5ycZ1rk`7dU!h3?5AH6Gix75#Xy5j6!Tm( zO`O~_*hiwhyJaqp`vHs=M2wD_U?N^h;;fij?|TVaAjfjAAUp3kOL6cICHx#c-O$gs z&+lORe$RVACv!KGu(wsIMemydIv;rUiYteEL1}JIPk5|JN-8SL_GWCGjmm;fFZ<=i zZKf?wMc2Y9-?FWjKiL`o>hW9THSP3dNfbJNT0G1!!fNHJU-KzPr#^=8lavdnL(pHZP3 zN<(7%u7beaODvnp%lZYSMmW0inIAOjjoENLK}@L7QJRqAO)m6&cjvO78>j4lh%V2D z&)9tFn#Rpn#VK{nCOVeMjFT@njYtoct+Dvy34Z291NUp2sSai388)}x?cFB2-UzDJ zUVFgn?<97~Smqz=fg-+?#Cp)6tmc|O|d#@$&T` zbg3ce|9PyVI{1=lP*L8twlp_E_?@xOuM=%mpOM9v&!lOy{4P#j&qh`3y39+=X+N&{ zM9)C1iqIWSnGrGm6P9fw;Vw@O8A>rph$+k}zO>lHbEr$_zUry-}9rd?UEYm|0L3%%yH}L;2QJ(5_!-#?fGzUZ_ zr8qhyUsvR+-XcRrvesq_`K5vzQ3l8FF~vS^?kPJN==i~jM0^!qJJ)D5a(4Z{sn-=Q z{5>&;;%p*Y?To+Ug@itKIib)A*+!7{E`wS!L%HLY76Mee$$3S3|#Ykp<;6PVo%Ug_icNvkw-|oY`(6%u5)Rut8w)A`TbUEZkN1r~K~1$Qfqf za8Ez+&y^qjv%?X8Q^juyG9~0S)A#dL76qfw0Xf&7_Xd5UmZF9k|6f&C8BkT*Y~d)< zA>AcNNrQ94kg`4H%K=en!~wA-}`>wy?^<^-p}lLX4cHC zH3u@~tbjy_)})+FIK>&fQd0wr@E@DoTG!R!7Y!dYTjPcAX$pbY%s6ApeahvFenDRh zt|Uup9@47wY4&sc+xh22Qfl=-GYVJE$5pdx*U_W-!9~yqZtmm#tlVOp-tGY_q1died9W)0;Z>+y(jki~9E^rtn^lA8zm9Ddhpln zk350X8%p3tcH3Q>qN=-qdxMVdox)DByjC4`Y+K3oL03d*F9GAl2|KUh2YPQ_4}Zl& zOlKY`h7wSEb`J^En4&WxUmd;Z13!*r8hMkClc2`(9>cv$U#cX%(32{}*cBAP#<8-*v%u7F^0?8YpHvL8wM>kt zDN6t5f57>XJEa@^7IHO;ug4i=&~?jljhru?Utu9n_L-jnigH5CGh=L318(U*yx!;HnQE{d{=qvhax-p3MDwBg?WEPmrjODj~rLS;cbto{m7EI`FrH&DRF zCbW9%Ay4~7CoNc6NspAB;reqG80u`bf3q}4pqrix!eq|&@Ck;$g?oAoqJpxpO^j;;V?P*c1zahsqYYn6fn4nZA&kkdDqAd%(M-)g^z0$u9tGRnp; zOfz0sP*u%_?eblDy~peMb%vlCDq5A0?3(2U5or~|de&qj$KaF8kkG^o!z(b`$HVUs z{n;)O*mcJAzV3s6X;*AgDv3N}hoY{;JJa+6@!m&X1I109pFCL}?IvjN6Nx&ecnoAK zjglpo0E!jCjue!4t5aCA_2dGH_R&KFZ;Y5vhtbxECGUHR$}Co%m1m#{w}G6Gg`mPH zxWdoH?){@yIVu<-#949$z)kS8?)Myvl(9~d?jxe zFR2X~V);1760o3=DyGyH$o`bQ9D4bM1cB1WdQ?HygBb^|k(EB2u*9J#?wDd4Uz?bq zF1TqRmfh@mQIR~}i}>0{U%4`vSlOyj>FuUE7$wRp>v?2}7}&d8T@0#20yw_?rn^+T z|E1NVbW4FECGCI9*1y8yAFrnPWWx*!DZcHhd!_icfUNiwnqDRe&t!fcaaco^+1VqE zdTA&l&+~N5=9JQek zl*_`)U6Awj-*TLuplR+vaCbu$d$V*w9v3itqLFxGzV^;Oxw`LN+AXVV*r8`VIR(1n z+mRcCrbM%*m`}cN zl-D26@ikW3Wyo(D*%OfdJIVG?K_G%mZs_d?wOL2Y5%A7{BRKv@ecK*IlHD=?5 z+m`%JY_$!$x6EIDw9uQ!7@k>NkdS%qQ4(kPl zTvXKeLo+v@@W*yRI%MSrRj%DUWa=>qe+LQDOxa_ac;Pq%77~lzI0rXE7{T;*N`=fddu7BI6f*vP7 zR{HAVdjFe~9q~_%{L%;9ktOuNDw-^kPYxd6Os0Q1&mPQVR-D9)ug%Kn{Hz(1MM+&a zLXpt@>-?SDN4)_$?*em$X?IL^0!ik2$H|TQq{xjJx}gWX9250(22X7r`E8n+X#DXs z0Eui@YO4kxZV|R@@!FkCj+#>i);6c_--aithuGWnJLaeYx%(`h@6v&O+etOy`%Xc-B{&t+~&OxQ&EObsZ)Lx}x$+GrSVy3uc$_ z$)hx$OdE!9>Z~)OY6{zn1MLl8Q_7N5U4H4FQ82nQNmJgNWpz=vnV@3zYyl*QiR$ht z!Uw{o!tCu|bU8yzU+U%AwU*(;<<&-qldH}0 zp54EC47;4|4SLgQzsUEIfAtu)D412BGhz&w&H-G}tt>6!OE(tGQR9dSWK^>2{g!aE z6xcRmh-!w%FGE1Y3vMTp=483fGHs1AxU1>Qm{Wl)=%TtyPo@s)?5A98o9G?EmX_x0he!1P z))=^Gy9bVY2Tp{dAdkQgAM?2haFDhef16-aR>&XHQm1HPFxFH{a74@}=w+*PANr3Y zQe#Lf*x6ff22jF`Lj=r~B6sIafy<@lP+|%z8a@6C7a(OCrQuqmygAO5wNjPB>lr~u zS01LIa}d0wS!5pXIa>vxw%+B8Y$oi892T;2UWvX6`>;t=Z5XhjGwTMg+7UBQYorkc zZpIc$_|I-0#x^!D){@bLYe4+G*?y)>+JbOT7^@7>Pdfc@bJ(&Lb>{_iyN2#-IM470 zq7?d`^;(V7z=|}nthe(x;1B)dh?&ZWP&DVxeW*{`$QJ&SQaBHZ^gzul)DNvyzJ*ZK z8ksmLA=JuffK{68r&3`8Z*uw$tq1gM6@&ZQH3nY^HzHXbX2&Tm-H=kdICME>t4|kG z4BtPs+ZN+z5I->i+*;2_*fJZlIQD$~U|~Po{2nizBcA}JZa#z%VL@Bs_4K=r_Ytv! zwT!1$7!TuNL$7$1h?8g(a{qjTzZa#WmN~%26Ff50joiUc7LKTHTnoCTVzEC|>rN0a z4j~I5YJS0Meq0`5S-#I>dLh z{`zN?VxDmQx?XMtQ-A?7)x4jtJmoLrw44BNB9}zgoCX#@6xyR&4WUI_19dq>2H*jo z;NMn_pu@?JIl^v$*KJu@LNZ|W<)5uH>T1T9sCW%F=R&=-JPfVjMwWsi?c+#(G|4I= zwSM&PA(CX}bIGcb!v|(pX)5MZ3d)xd2tGITnGAV-7~1e5Xe+1MNcvEq3iGpeO7!gl z%4|*U49jc;X=R=_i$cx*TxZe`;=Lw6z4f@aC)pL`45I zd<6z(6~(}xc!j%9FyA39>ZH&bJZw{MeB*6Hbdl^=u#$IdS5<4T#|G?n)2j{HSVVM( z>~5^4-b&!^b?Qq_|AGyjiBjz>;g zq%V)}-a2=7!RL8uCWk748c2{)qCWKF$LTwM_`1Ok5rVZJ`~R&DK(bzTWX_E00mlW80_`!$ zweN1;7Fv)mFXHDTYTlL1x!21ZhZKo6nVh>ACpes}DU^QcJbCV|`jl9xwfi};53Z)T zf-Ih3IDwWg!c)-)lWO_^o_*SSyNMp=zUhH;AUhf@K?A`@>qLb63He8^eOuab86;t( zQPZ;|(srt@B#hF0S49Z%f49uwZpv2<-c?GY2G*=kzUZN)Z8j4Rw&? z7Q3&nqR^HU0&8RR2J~*MR6AACB$jQ#!WIHkm{WJX$rd}AC^H>fb1%`n-q?=}MaP9T zL}jrOs_MEQU52+SI*c|QT49m8LDZ+N7$Au61(d+NUFoY`v;8|Q<}rcc7&)iN3{koC+CZ;`tDSyq2EGIDZyx-o zLlTIOOM)9mC~j(H_5}C)yt-7w!NvGU+t2-wqpf*WYPKlBBlTIb;f^W2b8|c& zb>lM7oO8ItA^8`S^)mq*36FE^Ae-l zaa49Ag7T(WB{~Cwq@7*pN#j=fy8gS8FML9I{uBBTnNP{l*7k{yT+~OHuNebcSn7PL z&&~Q8f6K0k8xPG)D-*v&i@3BM;M?lorQ4DHo$=M%8PiEy(Ml1J%EC}&Y9YHqT&r21 zF}SF=9M;*UG&O~9BI!>)i4wiW0n@und5u!m#qY=dQr>B+Jiji^&42X9exDIHi2GM( z;fRQIN~;1zLO>m7t4AbAacbk()J;OE4hJ6y`R@kXd}>*wO|jVuN8>3GAN;l=x75Yv z>WSh?Q(Q643B;f+sUseAv{{wB`sbesAyF=0KCg^3Y+FpZ`)TegM`>v5DWC=DB-7|2 z+KwG|NFefuqIcXDoQAVdGt>NIgzQ$(UHuqv=KQ_WX?h@HEdZ@9zr(fr!)jTDQE7#} z&yJt>i`ZsX%v3i?u=^*-8DIUxk7`Q-S0K)uw56<39@&0ogaf1Gs`fN1L3g0#?c(m}Iv)|Ro zGnLC~Garf8lziI=L4-WrQ$HrmJa0;y_%!-fr{)``Cs*TEH`^ zJtd&ld+zNWMa_dg1z@SiSf7j0>5G_vGy;&Ek>o%B3^}zd0xc4B2#KZ5`SE{p6;Q;P z`gAB-Z1kzppeLh3o7k#G+oLk69vKA683SY zs0p(u`77}E7d`X3+#C5@voDb7&bY@~6_K(< zkquq;eP93x9=bx6hiZY!m4{$BE6%>5lS|)xwa%?**&Y997*WxW< zR(6y{z4Of;BNZ>QMHTzXB++JovT4-)NR+LS!R=wojO3^2M#2FBc;Ij*81EyA5kY=} zwVl5?&?$>%9HAsPR`(}yOCb6cHua(!XrtLY2%_1QF0J5|013HjzN%A3)5<&nSi1)` z8bsTiJFzAfa3$=2{RVCaaV8|k$S^Xhx{{j{!?R?BSP#lO3CdH^r8RCbsBFX;Cx?{n zHT!lpi(1Yv6nT3@QbYw;vPqD9&^R&;fZ@|gs4pbrdTq`cQmaYt93DHQHHLvw-Q;fr z?0REOEHtc0zkNmZ@YHUEZ`vV)z~cY$YeqHK3_PZ<+gtYiZSXojW;t1fGf^}-;uVFw zmoD~?sX`MfD2tr+E4h?&OQ$vTS7mkbcU^q$Zx`52KT&a{I}r0PP&L5spkFoEH=)P` zHBra2RL@>7uL2w*{^M@#{9d=U(o8 zI&5Fn=nL6jM9u4NJZw^%COSvWXE)d^0de16z?TZf?UbY@ss>)+chrP8h=hJ{%?CZc zivhDkTE#r*#sp?J&(4EAV)mY)37$wt<8aD9#f499(O6!S zZf^CHSwmW7jw;>{H`j6B{}W&SH+|2lArN`pbvalN#P)60CLLGqUEf6-BgO=UkxKwq z85rzDSQPn}-~!?~HZ5Y*|3{xz2`o~}Zb80(Y~gdDTJ?gS-r=nm(dMGV3k7@F0LHR* z%CjxU+5pt3t=EVRo!k#DF)6tGFEL&T52H%+RyD7;29k&$ccO?hq;=8=bhxF9PA>Lv zM&luv{#^4V?EhVJ2q4tlqr`6If8U+w^-_aAvplMZ`{>HsMamxd$)Pl>r^okan31}1 zEXX_7B=)#-krbWM!g+2GI=@k^Ii|^X02gM9 z`l6iCokzqtPTA=OE!RI^%SEF*0!Pk#lhdPO-!1B${6on9lWYGsg(QR6*<&5tv*NCA z7C;kV%OfiGHFwALBN95#pN&~FsG7baAF%W^#jC7n$1rIk`mbFs>Q%#{6-w5j)~niI z+2^H*L;s8a#>zW3M;zLH?yojsN77ZR2Oo&p*(sL`lDsZMhGLz*Qw?IDjA%gth;df^ zrRh!tXI0{OAF%=bj2EEIs7cTJva~Vd2D+Q*Wym~zETm*=8pz zxk>}`AV)NFMnUw?{_iEUTrKSE&auCiS!DJ3Zj3_Fn+Wis3&gFx=t@l;vfB1C30Wtj zPHAYn^$zjtyxLxZ`#F%?zboakL98q)SGkp2a!!k!jdr#4Ld@9&o?h2iK%x`S4Y@*( zg_R$8%<429PF4o`p9tQ`*WM900gnDYV6-|P=MTaf-Vjd@#1Vv>L8Nf{W~5vzrT5}I z+eu{zyiS*E;r|A)ErO2ta%mU@8|)rX@9R}X1^-q908JAVb7~g2h0`gM8mVBq!0IH4 zQ?$_K0~x7)R6x!J4MwtholnPc822<;qMF=nc%ZBcPtMCeFJOj4kyn{He2T;}xUin?> z8Qmv3peX@B_b(68yDmWFNifQSm-+qxe&K{*{FJyGVT^UmvJ1i5LVB6le>5FU$)LMt z-D`HuXM2Y45N)~Y+`PbkUe~L%-LBn`0xJKjELUI{(sB`;cns35%$cps%kZ+`c&6J) zBQ`|D1D)wR-7YF(&GaKBJ>%GOU$0^S3XJxL`Y?^t>^VZ4h%exO#Nbn)SsS2?B@yoO zPfnqJqUW&3C;jWFz+CCFYzRIG$fiL0{SkBZsG1fJe$>y5)a>3jlYVogRwrIq5*m}F zMqjO7YAy#$MAXvfb*3cfKuWKBu+~Ft)6}nuw$YI0 zZ{v~eX-2pmDqgS3gVR>8&-wt^^oj2l%Q^P+l@XlA5@iUi_Q4FV9k`$?99ytqPsAXb zRd+ECcWTAF%}&JsAjv<7AP;TV#$eeYfz9eYyf~zEFl@h`I2Z!5{Z{uoJ;2bkEWcX@ z*dzF$dnXGvY&_dyblq1xz~i>Wk$g}11TI64z4fy%AEQV7#8y=Q_=hZhY|GWE*u{3 z?%81?z@gp=0J#OP31T-oUwo`wD*Qp&ZOJ3(;yr$O=@_Ka+g{cik1e>l)b-IsykjnO zLzpiu`vkw(Y|lM`Ueiw$+oFEwbY6I|)i5ElEBr2Ij#JFXkp7&1pT=}zANZjHjCj~p z_HmPAs4>=m-+AW-R`>c`Rj0wu`0nykoH${XcWzKF4zp39+3dBf67ubk;{l3}n=cWY ztDB_BcUAiYkY|1{wD_vLReCxpqbQe}EN3fX^5Ju{Zx>{sDC^+>3|~{+H~XMU#HX-v z+Sq;(T?Or=f|c04p)$c6k*A4UbH%uTu|mU&~%sYuKwD{$`IK75DPE8dvv} z_~|qE<`p{~$ztpfg+;rgdlp8Mp~OqW0Q-ju_aR|)rCWqfB&9j!G3~i; ztb}c_yG9xiq57S9}UAK?a`84i)VByLf6wnb&fWG%YBr1whTgMj&r&aI@fv zI8a*ful8~k_P2EP}9LmuO#}9{opZkeE;H=6I$_~>htNy8Xz6M#3T!m>FuCzl5 zdxtcY4#|{{&udoC>rsq|pMkB#Vn?+qzCN{_0||8_^hQn2^z_5l1av4a3ebPrq?lU);K%(U`d z6Z?%b7gP51Jh9K}iO|NXa~K97M=tJu6wObMUoGUAuPTTVGgNkYJYY2kn~l>rnRXzi z)?FmoWo+N?9ZUDHZU>yA&hA6NPP@V%9WGZh0KAw`6&8NKbR^;i`ZLs!7upMFLmVd7 z1@C@+MlV8R6wg2p=co9rX3_1W6@<+B7b=yYtxeJ#QeC6;ZIAWTl2C>+iEsxMP_%y| z9LBel53E}2?>ks41Ka>%(R)aw18i&c@yO@~!ySyd!V$5_2b+XJ5|!I;JRX(~Hi1jO z8|OFXTwomBXNm}iLC<4f6Vqc|!-6m@8?}UK5&9i!1CiFU+4Ii@s-iwUhpJsSV->&-$*pGHx>P1Pdrhh?_ z@(DE-I8U(do(&+1#oWGhuDmmGa6KwD3L{Cop1hJ|F*m_`;>q|WBr7%E-gd<~yw_6z z_xmf_m-e><3gv3iXLg>vWxV$aD4DazU2U48<2>Qo) z3o)l?ZB002lY8F*yT;nriko#Y>n|yN?>#h|@izN^qV0G<={(or5Ny9?l?&R`Judp< zNpf$_az{zuo^h}HSLxjKvM(6%sctPL?GuunA(v7mI=#-5%WcBslx5=R==H*yvD0hE z^ZR=&Ekz*|zh=-3#S_t04rkRHDjh2tLlzeVUy{B0R>$fKXskWyxAc;i*3M@=uYYdY zY_jk0t^LLV47~(Hs0vPHn@w=DPyBb%z&B=MXMN!NN9YdBlh4;_tX0&;q1FA8DE)v# zI5~%UwKBsMd~p>j+4@N0rZURX-kV^es$H_2&aJ%Eh{52Pbur&`Axx_PF3>x%zXQqC zbAsm{5a&s;pXR!mY6r0{a~~ ze&l$U5{ZpZdI+H8?i26OGD$!-I_)omu3bR|r5Ehc|gaMZee z#b+mvwa0lWDnU2?a0XXD8H(QD#IIgg`Q0}@Uc+!Rne1jT;}QHD@6!s!AZoxl;0aro zhN)kp+5r|>`3%vn-r4udzG4ttl=ucPaH{^y$?wSjl|+Kcz7hqtIA(#(4*|CK$bBup zsYPm6s7WyHIQU+RSm-VZl3VC*nA_6u! znfDZcJpOotr7Jvl=J*UtWh%J;wRNhG;EzZ)CGS8X;gj!A_NU<|H}m1-F$&xb1%jU} zJm5!pIwRdx1Ve+}4dNReR{aj9l)(l))Y9}CP^(9zV6LcnG-mTIoPdnSVdpFMK8edXsB!htEug5FUp(fLT z%o)Mj_0WJ#l=rCABRn@^Qj9zafV*ZjJPqH-|513rqgmjeDVFcTrSE*Jawy?9&ty1A zV}L=WtHiFjjbPD622h^XFSaHRDxWN117c9+2N$usbqm<~!Tq(^in3z(t_+J74{qD@%Y*yxu zX^t<^)YYC}3)3tS$_qY*UnEU2%a#Nd>lK(mEE8<)_3wxTa9%4lT^!3;V2oL^R~7!E zCNd>2Kw@u&?|ppGH*2 -Pj`8^B4qBKg?tv5rdd3Z zBv`^(#de?Fg3{kOuYB2j$+Jo7fYg_vT65eJv@R@i4H-)QepOS|{oA-mAqof=F2=z>wk~T{aK1R zo2^8U^V|LI*4fQU3%ra_hIJ5$!ia#2S=boNrpj~(LkI`hSBBOCrZ)_An}^AXM3IHtOX6j7c4XA@AaFhYC;(cDX|`eDk$Af*u{(9Oe$ zldb}a7B!e+Poc`~Evskj*-JtlENn3$mwj0)Ia!@0RqG+|crVMS>ROTUqHo`MZ~f@B zAkRt`-O!U2t%|pUrml9+!uPC6HA<(CD~<8y?>}bm z;qd|Ab_m9Fx`UOIC)HWoRtnB0OC8&2$!Vw9G>?lpnmVG3SVlgi(61E-%Uvc7xF{8% z6Fyt&vM}KYR@kKFF`o;`RqA5lUoYWYaaVzzMrHJ2FG4@sXs!41(9b1s5q1ECu9jzLLG9+mNd$)-2SiGehl9w?tF}^u>XyzmfBM= z+rne0OHirxEDS@7PufzQSY_?ETX*nfC}ql}&Y0J|O2PYO+g8OI^DkDyq1fMx<4@7j zPJa_EjA zOr-~1Dm+)}>vVk%0nAS zA&d_7EV!j@pCcLf4 zWhyJb^^t=x0{;Khi#I3lk0Bo7QqUoQJ^xCWxc0~WPL4jLCDV>SQ_}w6HOkB zCxzJw2-utwFv|XxEOjc4t7%*cToN>VI7yt@{QA*e@-g0TpO}+t)`n;7M;nAeA>3tB z;ECt&IwypwZl3Mm%g1G-M~iR1znBhfFnuwFBI_F5VqFu_{Q60cD{nOOw6%v;b%egT z2%P`PHK56N3^oxw8!xXM<$4qCRu%Z;17&0Rsdmce&0b-&AoK)V8SF{2m`}DgQFd3Y zUwb*;nKbq&WKXOWcRvkL@_$O(qM7kY%dtx>(LR|ncJ{g|Hi^nrZ?`sP>qNwG#eZk( z?22r8>(0pU-t%E_7JMb`e>Req1ynJYEI \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml index 078d14811e..8a1a7bb2c9 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml @@ -1,7 +1,7 @@ @@ -41,7 +41,7 @@ /> - - - - - - - - - - + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml index 4d4fd6d16f..15a42e6840 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml @@ -33,11 +33,11 @@ 应急停车 关闭考试车辆控制 - 识别到车辆故障%d + 识别到车辆故障(%ds) 一键上报 上报类型 故障类 - 接管类 + 主动录包 已发起上报 已发起录包 接管记录关闭按钮 @@ -45,13 +45,16 @@ 一键上传 删除 接管记录状态标签 - 故障原因 + 接管原因 时间: + 接管类型选择 + 接管类型 故障类型 故障类型选择 故障原因 故障原因选择 发生时间 + 时间: 发生时间前溯 发生时间后置 补充描述 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt index cb26d3823b..2d6a9095bb 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt @@ -58,6 +58,14 @@ class ToolsView private constructor() { dismissToolsFloatView() CallerDevaToolsManager.showBadCaseManagerView(it) } + + /** + * 展示接管记录页面 + */ + override fun showTakeOverRecordView() { + dismissToolsFloatView() + CallerDevaToolsManager.showTakeOverRecordView(it) + } }) } toolsViewFloat = WarningFloat.with(it) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index 916d6a2d5f..1664812221 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -10,6 +10,7 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.widget.FrameLayout +import com.mogo.commons.env.ProjectUtils import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig @@ -144,7 +145,13 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( ivDebugPanel.setOnClickListener { clickListener?.showDebugPanelView() } - + //接管记录 + if(ProjectUtils.isSaas()){ + takeOverRecordLayout.visibility = View.VISIBLE + takeOverRecordLayout.setOnClickListener { + clickListener?.showTakeOverRecordView() + } + } if (AppConfigInfo.isConnectAutopilot) { CallerAutoPilotControlManager.getCarConfig() } @@ -300,6 +307,7 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( fun showFeedbackView() fun showSOPSettingView() fun showBadCaseManagerView() + fun showTakeOverRecordView() } override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml index 30f8565c4c..3b92f5af1b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml @@ -159,6 +159,7 @@ android:layout_height="150dp" android:layout_centerHorizontal="true" android:background="@drawable/debug_icon_bag_manager" + android:contentDescription="@string/debug_bad_case" /> + + + + + + + + 录包设置 运营面板 录包 + 接管记录 录包管理 上报 车速设置 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index 0a22f55751..12a3cc421f 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -142,6 +142,11 @@ interface IDevaToolsProvider : IProvider { */ fun showBadCaseManagerView(context: Context) + /** + * 展示接管记录页面 + */ + fun showTakeOverRecordView(context: Context) + /** * 启动调用SSM停服命令超时检测 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 37eac823c6..0b9082de1c 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -256,36 +256,26 @@ object CallerAutoPilotControlManager { } fun recordPackage(type: Int, id: Int) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - providerApi?.recordPackage(type, id) - } + providerApi?.recordPackage(type, id) } fun recordPackage(type: Int, id: Int, duration: Int) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - providerApi?.recordPackage(type, id, duration) - } + providerApi?.recordPackage(type, id, duration) } - fun recordPackage(type: Int, id: Int, duration: Int, bduration: Int) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - providerApi?.recordPackage(type, id, duration, bduration) - } + fun recordPackage(type: Int, id: Int, duration: Int, bduration: Int): Boolean{ + return providerApi?.recordPackage(type, id, duration, bduration) == true } fun recordPackage(type: Int, id: Int, duration: Int, bduration: Int, topics: List) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - providerApi?.recordPackage(type, id, duration, bduration, topics) - } + providerApi?.recordPackage(type, id, duration, bduration, topics) } /** * 停止录制bag包 */ fun stopRecord(type: Int, id: Int) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - providerApi?.stopRecord(type, id) - } + providerApi?.stopRecord(type, id) } /** diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index adfc58737c..52c2dd58a8 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -192,6 +192,13 @@ object CallerDevaToolsManager { devaToolsProviderApi?.showBadCaseManagerView(context) } + /** + * 展示接管记录页面 + */ + fun showTakeOverRecordView(context: Context){ + devaToolsProviderApi?.showTakeOverRecordView(context) + } + /** * 启动调用SSM停服命令超时检测 */