From b876685f821b54c872a208b6084dd3b8d52437c1 Mon Sep 17 00:00:00 2001 From: wanghao Date: Mon, 24 Mar 2025 19:22:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 ++ app/src/main/assets/litepal.xml | 3 +- .../com/example/as_trak/LoadMainActivity.java | 22 +++- .../com/example/as_trak/MainActivity.java | 11 +- .../com/example/as_trak/SettingActivity.java | 94 ++++++++++++++++++ .../adapter/ContainerTypesAdapter.java | 71 +++++++++++++ .../example/as_trak/dialog/EditDialog.java | 40 ++++++++ .../example/as_trak/entity/ContainerType.java | 52 ++++++++++ .../as_trak/fragment/LuggageFragment.java | 24 +++-- .../as_trak/fragment/been/LuggageBeen.java | 15 +++ .../main/res/layout/activity_load_main.xml | 23 ++++- app/src/main/res/layout/activity_main.xml | 5 +- app/src/main/res/layout/activity_setting.xml | 74 ++++++++++++++ app/src/main/res/layout/dialog_edit.xml | 66 ++++++++++++ app/src/main/res/layout/fragment_luggage.xml | 24 +++++ app/src/main/res/layout/item_cargo.xml | 6 -- app/src/main/res/layout/item_info_add.xml | 65 ++++++++++++ app/src/main/res/mipmap-xhdpi/ic_user.png | Bin 0 -> 877 bytes .../main/res/mipmap-xhdpi/icon_setting.png | Bin 0 -> 18476 bytes app/src/main/res/mipmap-xhdpi/icon_tip.png | Bin 0 -> 2873 bytes app/src/main/res/mipmap-xhdpi/info_add.png | Bin 0 -> 5784 bytes 21 files changed, 574 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/com/example/as_trak/SettingActivity.java create mode 100644 app/src/main/java/com/example/as_trak/adapter/ContainerTypesAdapter.java create mode 100644 app/src/main/java/com/example/as_trak/dialog/EditDialog.java create mode 100644 app/src/main/java/com/example/as_trak/entity/ContainerType.java create mode 100644 app/src/main/res/layout/activity_setting.xml create mode 100644 app/src/main/res/layout/dialog_edit.xml create mode 100644 app/src/main/res/layout/item_info_add.xml create mode 100644 app/src/main/res/mipmap-xhdpi/ic_user.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_setting.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_tip.png create mode 100644 app/src/main/res/mipmap-xhdpi/info_add.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5965732..2bf3234 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,10 @@ + + + @@ -32,6 +37,7 @@ android:exported="true"> + diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml index 95bd173..4c80f3e 100644 --- a/app/src/main/assets/litepal.xml +++ b/app/src/main/assets/litepal.xml @@ -1,10 +1,11 @@ - + + \ No newline at end of file diff --git a/app/src/main/java/com/example/as_trak/LoadMainActivity.java b/app/src/main/java/com/example/as_trak/LoadMainActivity.java index efeea4b..485788e 100644 --- a/app/src/main/java/com/example/as_trak/LoadMainActivity.java +++ b/app/src/main/java/com/example/as_trak/LoadMainActivity.java @@ -20,6 +20,7 @@ import com.example.as_trak.base.BaseActivity; import com.example.as_trak.databinding.ActivityLoadMainBinding; import com.example.as_trak.dialog.AddFlightDialog; import com.example.as_trak.entity.CargoInfo; +import com.example.as_trak.entity.ContainerType; import com.example.as_trak.entity.FlightInfo; import com.example.as_trak.entity.LoadOperation; import com.example.as_trak.toast.LoadToast; @@ -70,6 +71,23 @@ public class LoadMainActivity extends BaseActivity implements AddFlightDialog.Ad intent = new Intent(this, LoadScanActivity.class); + List list = LitePal.findAll(ContainerType.class); + Log.e("TAG", "onCreate:" + list.toString()); + if (list!=null){ + int size = list.size(); + List list1 = new ArrayList<>(size); + List list2 = new ArrayList<>(size); + list.forEach(t -> { + if (t.getType().equals("1")) { + list1.add(t.getTypeName()); + } else { + list2.add(t.getTypeName()); + } + }); + binding.setList1(list1); + binding.setList2(list2); + } + } @@ -102,7 +120,7 @@ public class LoadMainActivity extends BaseActivity implements AddFlightDialog.Ad cargoInfo.setCount(0); cargoInfo.setCargoCode(cargoCode); cargoInfo.setFlightId(id); - cargoInfo.setState("待装载"); + cargoInfo.setState("未装载"); cargoInfo.save(); cargoInfoList.add(cargoInfo); cargoInfoAdapter.notifyDataSetChanged(); @@ -203,7 +221,7 @@ public class LoadMainActivity extends BaseActivity implements AddFlightDialog.Ad String.valueOf(flightInfoTag.getId())).find(CargoInfo.class); if (!cargoInfoList.isEmpty()) { cargoInfoList.forEach(cargoInfo -> { - int countNum = LitePal.where("cargoId = ? and type ='正常' and (state IS NULL or state = '修改')",String.valueOf(cargoInfo.getId())).count(LoadOperation.class); + int countNum = LitePal.where("cargoId = ? and type ='正常' and (state IS NULL or state = '修改')", String.valueOf(cargoInfo.getId())).count(LoadOperation.class); cargoInfo.setCount(countNum); }); } diff --git a/app/src/main/java/com/example/as_trak/MainActivity.java b/app/src/main/java/com/example/as_trak/MainActivity.java index 8687a8c..5214de3 100644 --- a/app/src/main/java/com/example/as_trak/MainActivity.java +++ b/app/src/main/java/com/example/as_trak/MainActivity.java @@ -12,6 +12,7 @@ public class MainActivity extends AppCompatActivity { private Intent intent1; private Intent intent2; private Intent intent3; + private Intent intent4; @Override @@ -21,17 +22,21 @@ public class MainActivity extends AppCompatActivity { intent1 = new Intent(this, LoadMainActivity.class); intent2 = new Intent(this, UnLoadActivity.class); intent3 = new Intent(this, InfoActivity.class); + intent4 = new Intent(this, SettingActivity.class); } + public void homeLoad(View view) { startActivity(intent1); } + public void homeUnLoad(View view) { + startActivity(intent2); + } public void homeinfo(View view) { startActivity(intent3); } - - public void homeUnLoad(View view) { - startActivity(intent2); + public void homeSetting(View view) { + startActivity(intent4); } public void homeClose(View view) { diff --git a/app/src/main/java/com/example/as_trak/SettingActivity.java b/app/src/main/java/com/example/as_trak/SettingActivity.java new file mode 100644 index 0000000..c32a4c2 --- /dev/null +++ b/app/src/main/java/com/example/as_trak/SettingActivity.java @@ -0,0 +1,94 @@ +package com.example.as_trak; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.view.View; + +import androidx.databinding.DataBindingUtil; + +import com.example.as_trak.adapter.ContainerTypesAdapter; +import com.example.as_trak.base.BaseActivity; +import com.example.as_trak.databinding.ActivitySettingBinding; +import com.example.as_trak.dialog.EditDialog; +import com.example.as_trak.entity.ContainerType; +import com.google.android.material.tabs.TabLayout; + +import org.litepal.LitePal; + +import java.util.ArrayList; +import java.util.List; + +public class SettingActivity extends BaseActivity implements EditDialog.EditDialogCall, ContainerTypesAdapter.ContainerTypesAdapterCall { + private EditDialog editDialog; + private List list; + private ContainerTypesAdapter adapter; + private String type; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActivitySettingBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_setting); + editDialog = new EditDialog(this); + editDialog.setCall(this); + adapter = new ContainerTypesAdapter(this, this); + adapterSetList("1"); + binding.setAdapter(adapter); + + binding.infoTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @SuppressLint("NotifyDataSetChanged") + @Override + public void onTabSelected(TabLayout.Tab tab) { + String string = tab.getText().toString(); + type = string.equals("种类维护") ? "1" : "2"; + adapterSetList(type); + + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }); + + + } + + @SuppressLint("NotifyDataSetChanged") + private void adapterSetList(String type) { + list = LitePal.where("type = ?", type).find(ContainerType.class); + if (list==null) { + list=new ArrayList<>(); + } + adapter.setList(list); + adapter.notifyDataSetChanged(); + } + + @SuppressLint("NotifyDataSetChanged") + @Override + public void saveInfo(String info) { + ContainerType containerType = new ContainerType(); + containerType.setTypeName(info); + containerType.setType(type); + containerType.save(); + list.add(containerType); + adapter.notifyDataSetChanged(); + editDialog.dismiss(); + } + + @SuppressLint("NotifyDataSetChanged") + @Override + public void deleteCargoInfo(int index) { + ContainerType containerType = list.get(index); + containerType.delete(); + list.remove(index); + adapter.notifyDataSetChanged(); + } + public void settingAdd(View view){ + editDialog.show(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/as_trak/adapter/ContainerTypesAdapter.java b/app/src/main/java/com/example/as_trak/adapter/ContainerTypesAdapter.java new file mode 100644 index 0000000..7dde01b --- /dev/null +++ b/app/src/main/java/com/example/as_trak/adapter/ContainerTypesAdapter.java @@ -0,0 +1,71 @@ +package com.example.as_trak.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.as_trak.R; +import com.example.as_trak.databinding.ItemCargoBinding; +import com.example.as_trak.databinding.ItemInfoAddBinding; +import com.example.as_trak.entity.CargoInfo; +import com.example.as_trak.entity.ContainerType; + +import java.util.List; + +public class ContainerTypesAdapter extends RecyclerView.Adapter { + private Context context; + private LayoutInflater inflater; + private List list; + private ContainerTypesAdapterCall call; + public ContainerTypesAdapter(Context context, ContainerTypesAdapterCall call) { + this.context = context; + inflater=LayoutInflater.from(context); + this.call=call; + } + + public void setList(List list) { + this.list = list; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ItemInfoAddBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_info_add, parent, false, null); + return new MyViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { + ContainerType containerType = list.get(position); + containerType.setTag(position+1); + ItemInfoAddBinding binding = holder.binding; + binding.setData(containerType); + binding.itemCargoD.setOnClickListener(v -> call.deleteCargoInfo(position)); + + } + + @Override + public int getItemCount() { + return list == null ? 0 : list.size(); + } + + + static class MyViewHolder extends RecyclerView.ViewHolder { + private ItemInfoAddBinding binding; + + public MyViewHolder(ItemInfoAddBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + + } + + public interface ContainerTypesAdapterCall { + void deleteCargoInfo(int index); + } +} diff --git a/app/src/main/java/com/example/as_trak/dialog/EditDialog.java b/app/src/main/java/com/example/as_trak/dialog/EditDialog.java new file mode 100644 index 0000000..e840c9b --- /dev/null +++ b/app/src/main/java/com/example/as_trak/dialog/EditDialog.java @@ -0,0 +1,40 @@ +package com.example.as_trak.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; + +import com.example.as_trak.R; +import com.example.as_trak.databinding.DialogEditBinding; + +public class EditDialog extends Dialog { + private String info; + private EditDialogCall call; + private DialogEditBinding binding; + public void setCall(EditDialogCall call) { + this.call = call; + } + + public EditDialog(@NonNull Context context) { + super(context, R.style.dialog_style); + + binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.dialog_edit, null, false); + setContentView(binding.getRoot()); + binding.editFalse.setOnClickListener(v -> dismiss()); + binding.editTrue.setOnClickListener(v -> call.saveInfo(binding.editInfo.getText().toString())); + } + public interface EditDialogCall{ + void saveInfo(String info); + } + + @Override + public void show() { + super.show(); + binding.editInfo.setText(null); + } +} diff --git a/app/src/main/java/com/example/as_trak/entity/ContainerType.java b/app/src/main/java/com/example/as_trak/entity/ContainerType.java new file mode 100644 index 0000000..32d789b --- /dev/null +++ b/app/src/main/java/com/example/as_trak/entity/ContainerType.java @@ -0,0 +1,52 @@ +package com.example.as_trak.entity; + +import org.litepal.crud.LitePalSupport; + +public class ContainerType extends LitePalSupport { + private int id; + private int tag; + private String typeName; + private String type; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getTag() { + return tag; + } + + public void setTag(int tag) { + this.tag = tag; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + @Override + public String toString() { + return "ContainerType{" + + "id=" + id + + ", typeName='" + typeName + '\'' + + ", type='" + type + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/as_trak/fragment/LuggageFragment.java b/app/src/main/java/com/example/as_trak/fragment/LuggageFragment.java index 2782959..0b7194e 100644 --- a/app/src/main/java/com/example/as_trak/fragment/LuggageFragment.java +++ b/app/src/main/java/com/example/as_trak/fragment/LuggageFragment.java @@ -28,12 +28,13 @@ import org.litepal.LitePal; import java.util.List; import java.util.stream.IntStream; -public class LuggageFragment extends Fragment implements View.OnClickListener { +public class LuggageFragment extends Fragment implements View.OnLongClickListener { private FragmentLuggageBinding binding; private LuggageBeen luggageBeen; private LoadOperation loadOperationFrist; private AlertDialog.Builder builder; + @SuppressLint("ClickableViewAccessibility") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -48,9 +49,8 @@ public class LuggageFragment extends Fragment implements View.OnClickListener { luggageBeen.setVisbleState(true); } } - builder=new AlertDialog.Builder(getContext()); - builder.setTitle("拉下确认") - .setMessage("是否确定拉下行李").setNegativeButton("取消", null); + builder = new AlertDialog.Builder(getContext()); + builder.setTitle("拉下确认").setMessage("是否确定拉下行李").setNegativeButton("取消", null); binding.setData(luggageBeen); @@ -74,14 +74,16 @@ public class LuggageFragment extends Fragment implements View.OnClickListener { return false; }); - binding.luggageUnLoad.setOnClickListener(this); + binding.luggageUnLoad.setOnLongClickListener(this); return binding.getRoot(); } private void selectInfo(String code) { - loadOperationFrist = LitePal.where("luggageCode=? and (state IS NULL or state = '修改')", code).findFirst(LoadOperation.class); + loadOperationFrist = LitePal + .where("luggageCode like ? and (state IS NULL or state = '修改')", code+"%") + .order("loadTime desc").findFirst(LoadOperation.class); if (loadOperationFrist == null) { Toast.makeText(getContext(), "查询失败,条码错误", Toast.LENGTH_SHORT).show(); luggageBeen.clear(); @@ -91,6 +93,7 @@ public class LuggageFragment extends Fragment implements View.OnClickListener { luggageBeen.setCargoCode(loadOperationFrist.getCargoCode()); luggageBeen.setState(loadOperationFrist.getType()); luggageBeen.setLoadTime(loadOperationFrist.getLoadTime()); + luggageBeen.setLuggageCode(loadOperationFrist.getLuggageCode()); List loadOperationList = LitePal.where("flightId = ? and cargoId = ? and (state IS NULL or state = '修改') ", String.valueOf(loadOperationFrist.getFlightId()), String.valueOf(loadOperationFrist.getCargoId())).order("id asc").find(LoadOperation.class); Log.e("TAG", "全部数据:" + loadOperationList.toString()); FlightInfo flightInfo = LitePal.where("id=?", String.valueOf(loadOperationFrist.getFlightId())).findFirst(FlightInfo.class); @@ -99,12 +102,11 @@ public class LuggageFragment extends Fragment implements View.OnClickListener { } - - @Override - public void onClick(View v) { + public boolean onLongClick(View v) { + if (loadOperationFrist == null) { - return; + return false; } builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override @@ -115,6 +117,6 @@ public class LuggageFragment extends Fragment implements View.OnClickListener { luggageBeen.setState("拉下"); } }).show(); - + return true; } } \ No newline at end of file diff --git a/app/src/main/java/com/example/as_trak/fragment/been/LuggageBeen.java b/app/src/main/java/com/example/as_trak/fragment/been/LuggageBeen.java index 703f5b1..9513211 100644 --- a/app/src/main/java/com/example/as_trak/fragment/been/LuggageBeen.java +++ b/app/src/main/java/com/example/as_trak/fragment/been/LuggageBeen.java @@ -25,6 +25,21 @@ public class LuggageBeen extends BaseObservable { private String State; private boolean visbleState = false; + /** + * 行李编码 + */ + private String luggageCode; + + + public String getLuggageCode() { + return luggageCode; + } + + public void setLuggageCode(String luggageCode) { + this.luggageCode = luggageCode; + notifyChange(); + } + public boolean isVisbleState() { return visbleState; } diff --git a/app/src/main/res/layout/activity_load_main.xml b/app/src/main/res/layout/activity_load_main.xml index 2553863..4c2c35c 100644 --- a/app/src/main/res/layout/activity_load_main.xml +++ b/app/src/main/res/layout/activity_load_main.xml @@ -16,6 +16,11 @@ + - + - + + android:layout_weight="1" + android:onClick="homeSetting" + android:drawableTop="@mipmap/icon_setting" + android:text="信息维护"/> diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..acf5ac5 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_edit.xml b/app/src/main/res/layout/dialog_edit.xml new file mode 100644 index 0000000..bbcc67a --- /dev/null +++ b/app/src/main/res/layout/dialog_edit.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_luggage.xml b/app/src/main/res/layout/fragment_luggage.xml index d9e71b0..9b6049f 100644 --- a/app/src/main/res/layout/fragment_luggage.xml +++ b/app/src/main/res/layout/fragment_luggage.xml @@ -60,6 +60,30 @@ android:layout_height="61dp" android:background="@drawable/main_menu_bg"> + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xhdpi/ic_user.png b/app/src/main/res/mipmap-xhdpi/ic_user.png new file mode 100644 index 0000000000000000000000000000000000000000..538be38973159df878fa967c640d5881b5568c27 GIT binary patch literal 877 zcmV-z1CsoSP)Px&CrLy>RCr$PTT5#cK@hI$$w1hHkDPMx0Ui|}h$5&MAs+GBkljoT>}6|fs=KzU zzIru6!6%BMDI$8TVSk2*3qQ%X$(z$uN)2fpvGnq&q+a8U^HTmzqNDdl|=pH%^27%pvL z`c=(KC#00`OfQY1XuOO#KuWn_kvTy`Z#DEK&-1d_L;J7-Y&OX!fK8y{J|K#svq_R1 z%A1Mnx?dWN#!r*^v|6phh`0ki0N_{V$%7ym)A9PgzZe9;IRH4ArwJ4R3TsyXU7&U%t0xAJR6#IeRmm}Z0kV4_fSloh}yfK8whKET)$<-S4N3K={ToMR2MGpC8I@%P3{W7%C!maJ@k*G0?ZN~ip6sXQC=q?z^$Qba zRAKw=orSx@d~uR5PV&XcfteP!`5pEFMZNNVae{vV4)V@=AD;{500000NkvXXu0mjf D&UB4Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icon_setting.png b/app/src/main/res/mipmap-xhdpi/icon_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1124ccbcd534c9eb757531fc88dce9ec542068 GIT binary patch literal 18476 zcmbq)_g52L*sV$vsfzSa1O=5EBTY&~RBV8XN+%Qr0jUu}2?@P7MUfr>1(Yr#ozMbE zNs!(`fB>O~9zp`Syx;x)fVJ)d| zf9-Uqd*SO-r}SGM-qn5KYrP&gIk+(T%<33r6X*UhZl2>$T;CP;%YKqPITx<0Jy*Z{ zqgDMPyZg26iowLQ;qziARrt_`zo`e1)xHr>VVeMWZS zL5<~Ogz@_QqbQQOnpK^ukRw%hP#_UuZ8X17(^J{}yAD37Ei*m}2%e`LY>e<^E$?pxB>15G=w=g<=Wf&zN%&a`W=y%bO4YNauaF-Inv?|y7F3IBMu_A%$aCK3D0=EDk;8g>E}Tn(D=pJ z%<@;n$StAD*5c_T>5;y%R3??Dj7+A$pJRbS#pF$wfc~{|NtXZ5r#$A^P6Oe5>KBgq zC1v1n*bYs&VS5Wl*54jHv`SsDuzkxd7Z!-Fs{g)~K2->8lo3eO;MXwcoVjFpQ&YJP zH>5Zn#5CMG1q6G|!>4#g9JhykyVRyX=x@F@?Byqp(|*&f z^LaG>rVh}ds(mkkVuvk|ibd>YyV2{*2Yzpwz3cIYFHt(8E0U;kGlsu&VRTo+H2-!z@SiZ<#WS z@+w5{awdP#lEP}Rcl)?{Iry#mYKtlTqcQ|c48fYkOvuYn%pLpY)H}=n@CE8lZ{>jS z4*=32wVsThL1S+j?{b5>`k!2GX;a^s*fuS_T*}ErwJ1Fh5N^1w`-g zbs5>>j-dO2=liDI7qiq;1BR|@T;ym>ndL2q;9=9t^N6|o8ZS7VkQ>e77a2BR%x zGtFB~TN~>TcPN!!OX$_~RHhU@^SYDp4E8qY7B%Fma#q&Y5Yf}}b^;t>eED{JpmQa# z^uamLnNU6FPZ(*Ps2lKuOcAt@a)(x}+bmD0O6{Pq^Ng)6_DF0lGD7)X>qE9~dIjVn z39zkce>*bKCIV-_GPyIH#+q{^U9*Qf?@7*9zF)kfUNmiegG|Jp9Ac+h1?$ zwf@k(Jn*5-x=pkwCI0Bj7ih`qT?jaoiemkg9O*d}g?!Fjy_u%c8o1OB3kGtcr{Yk~ zh2Bf8eJrP2XX3(>)HfrJHy*>1!=ifozR2{bsV|fZ&Hnz~sH3i&S1}Rx!v01_b8w|d zi5Y(1qjhmIO{E_`e!+3@PqCm%whpK>h5OhKbeD1L<;^t}q@ByPD&s$m9hK$mJ{b*A;BOs~Oo=w_gy~AbGF(&%%8x2>oyG zxt5Rv#T`?#McA(~KmkV*)w4n68qab!uaT=a_({`?Qn^3-gF?l|gr>khMzVv@Oruu& z$f?d@`bX4ua2Nj0AXBzoh64W){)?6Fr6MV~VDSN=HfGYF-vkqb;YB4@>Dk zH7nXe&TcIJKV7-&&dXNxu8FZki^NQ(Ii=mEJZ`$j*(4_c@2rj~^UT=K!vw_WPOTJc zm{48~(qcvG#%WS8VdKV(l&$Cb2C+G#zQe#}VU8gU z7lXlro`=9+NdL*0L0|QPhJ!b0zA=kFiXK~vdqdmmDSMKXAySV9f8ZtVZXhiItovI$U9{x)Re>Ki%`Ez-=eTB@x`cpyY4UGSF)Iz`8mTHujOy_7M*f)VpV$xnM{d7N& z1dvEv3)?KT7!q0t& zNS14^du|%s9M7p6YD*dT#v1~cKmIy&HlJo983!)-+VULtl5%x@do2M_q3*d zxzC?l7wZYSnVn}AhpsC35}fZ?7xKIfsTH-ZUSb^# z72$dz^B&uINiJpu2zn>yY6QmD;PgZ0w)XqY7hJHwQt&87be~^U*6kE* zhr`64WE7^^b4VYV>H)3~MzLX>GkQ3fmf%4qa}nmoT&DI`Oe-;mJ`$@7#Y)4mb*FgB zhDpFV{f$)cyz*i&kX6Tnxp%g+(%Up?{I>hISm9V(^k?ajmNuvO4-tPw@F>1$w1 zo6Av#1@D8WoX%$*f`H6gXDtCV%#Dh#Q)l^9l?xbfQG*!EXO?H}5Wp8fj*sWbmE+Gt zNp0z~ZkxaTNs@Ptu!AnQiT4vk?!X4a_E_LQ#8&s}J}%mta(I55e$*$B$Psc3x=-VU zJ7#^8dpiidE1_@rFX|Aak*+Ep36L?GF%;^L4VGvuNA#m4727WxoyncKnx6EyjWq-# z9DBzuWpLZHr7QGaId0yCi&dvLEh9{24+^|34n8XR(R*!^HSw*(kgG;b{(*Kz>SpuT z+BkP|CV|?v9S7?LdMiu(ba%c4Yadq`Y`SOATlrIW$5XL=UuW)u=El%yiq8l!)f%<+ z+A!6gE-iNUE>J$`^vt-(!}fc(HOqh+vI46t$r4`Are>0HMZWyk(9*A}Z(aoyd9P^b z*mGk`RC3UGAPig3P@?t^)EDb_>Pt%8$z67~JTu~GPXEj7kIetEbYy714o#A@y(K`> z<-YY!tzK#7*>qG#6!HQ6D4cw z2zQgY$VtH)L4D9>zYj!Z+bbjPifJ{pGfhiJ?7(zB+Rw~9_tLpFiKl0Zxcv9!FBjpL z#pPZ4SDwBD)bzvNa#oqc=gxb2jsRNOcL)3)1bT|UwAPx0_iDY;OP8j%iUI9)KkcqG zNIgA&9>wd!U#}c!Lby&zVd&)L++J%nfjVm+rYWnC*|EQZ;&K47pzTXwQM;%g&Ph=7 zv%g!xw2PTD+Dh+&(QNiY+(&Vj0z1;S4K(GWCTw+uAoer#&`QbF+k8$*+)3vAm2b?S zppkG&#|c?Yq5t&tM}_==Tv+(_C#u3SS?*AntcLJNrNw?1LA$$rQa)(T(N6que#nQoV-3ik>=!jSlYA#68LtWrmXcF=X1QtcO@#+ z*76NsY}k~b@mZ95DP0YIu^NRT5N?OQS6j^y`uRbn%@SV+IT*`2tT$V~hHMj3H`TYn z)TdKL9b+p-jAS_*{2-b-$@ySRxV(5KCM;d;C+!sXZ1oP`zq_;gRDlCLM13FD zvZL-a=9{7S5H`o5bwR1;l8UpU`|lM8tvxsDHoO^;Mg`7!i>E?`Ih+7!^tDL#dF7B}12;fSIC3 z*2WIuFA3<(e&uQspH(H~ZK|_kdGVJVTkBl6WGG7XUxtTf0sVVIDyUTyC)TStTUHk(vfq;2QR(nD;I2I zEhjSEwq2wBQmgIaK_f!m7{{9nf;!#&&{1_jk&eo%g^bO{$Ss5^Z+Eb%fP1JI;Bj1A zNPpJibHr?(B@h)E4>an z2!%|Any&EFM(`%_h^~4AWrXLA2{$4~FH{h#hh6c$6+xjtC6N$!AhKGN5Gp|kbQXM)(f#~GM*8cH$>Y6am!_<{Xy4+F2u0T zZB|q$`;9kTMWaycovb|@w!vDY_Q!yr4EC=TuO{Ip*f$Mlaa9(95lZAzSr=QfUUFBO zXjx`+r}HVsF?UatiaP2W6L%D~Qn90t-ti?16T{jXd~nP0U&wTYc$)%N-2#-da^Em4 z-rEA=s>Ad}u$`sSL8S1eAYXJB{1u>4twHFFV6r^jAgq^NhbRnme-3vJ8+t$& z*fRroo!80c**XOpUejqKP?I4G;8lG@_TzYsD!@PENzsgpytjMRr!w-8p06KqJNJJhutav(ylQ4?gtQlt}$kI$6)YqQeU6m{FDwl(zd_W z*_>OQxHz>$27JsxhPU|eEr=o10)OK}A+)KD{6wezRaS7IiDh3_{FeHkepza3Mu$8- zl(Y-emTIEau+EIq%2IowOBSQzw@k?9N-IyP7QOxD$9%6Zg`oRz|4eypul%%2ayqY} z#FN2k#5Xn_9w1=7c^W!{z192f>v?F45;oU<7H2SUzsmocOz&`ov_nky@GQrI=w96%Loz1!!v&hBq@#d$UL_@~vN6h2O$fTz)I$LtO`W|xF$k+*i+lje3 zhNKG(OwuG}?v^(z%BwQmOJu6|=97&6PL%=r&(kB!-p^d;AzPs1BnWHZ--mr$_NqyG z*4b0U4IUL6g+7TLklTfl1Q{q&Ollo7AsIV@TvXp^leA2)ARokUo)--vjzyjazv}DP!z{c6$ms z;MxQQ50|)^=@KOO6o1MzF-`peS4{ZCHG#S1`fQB|?;rGQSbxXHFxnyg^}o?G=v1y< z?T7fT*}Itv$M%sd8uAZj!P6(1E=S1Un;I<3<0V{c$rU#xTrfPr>+c@FX=RHBu5EFj z!QNYfzq@9TG%Q^EN;Qz05SbRviom-c+Sz|C^%O_EkUpS!2qBA^sC+#Cy1bS%FuGbD zyyDrioxUh-W5YuGmWQ;(${ZoD1WIaF3}}1^kA3*%j^6JJ5W8*`_SpH;ylpx$LuXO}tbcmBzG&V&Tx?32Xy9CyL+GvggWHXUqMu5IQYakf5s( zqvOvBZ!zMU@T2p`KFD3pk_oE6BCK*zE#ec$@2T*Ic^{Ry1?GEUqU0;?J9=WT@*8fV zZN~)JJLYHKLmKn6GL@8~IughF8*fDYI4oV%1B}H8wiOEjESzscpYPe&O+5c@+86C< zY691hf3Ro0tqLBpebfDTN3_FMS6$Hbdkdu_M605HIS~bT#oSKrzKOW^_1EXb>>|y$ zmxE*BM-^$92k-!k+5KuMnY4BbL!>dG1T@zN+V7){>bPW5rSFHM7u?ND=JpKzUK|UV zv_oKV=}pn#K6-hru<(vXZHA87IUl0BGAbOdJx!mmcO<%Ub~<`F00ejj|_Y}I$h{m{waD-#K1>8sXD6;F@m<^>D1OQi9t#HS~)UrD%I zInTo0vUmDE@H%~48_vmb)RA^X@FtDBp?8K0e0apH@M7Aql1XEwhFvCm!BXoTj4GX`JwKfgDvQ|qifm7dSL&Uy zfzJ6J%SLggjoa!rq1VeLM;j$S%3t{ftCw(paCPH*Go~>{7`Zlb+``1QIirT?5SgZJ zZfy+gjMj-E=16qts1MoipvHpHntt@d|He&6Jkikca_3H?LfEvPMBw?Gf?ns`)cNS* z0F~^6UQ2sjo#VUJqTu7#)y!iXhuTU()Q;yb|C-Coz8PQwdlfY&X9)JSIyGS0X}_t* z8-s%H6}iC}oKjZPRi;pF*UHv5mEVc=`-YHwXvA|!dw(LWP^-g|3)~>u^r3#y37UK) zT&DD(N(f*4)`C~ApUq2`H=@cMz~5RiwfMYc;Fceeot&Z;b}xarv0jZ@-*0_<>s%yi zg;XmDnP^ZV+ykpJ@1d3xyv`Nua*y#QlG;K5 zh;CF{NE}EZ%KQQ*IoJpo_sm0;A}Dd;4t=okT(xZ*DH=~c9yiACA7uvaPi#!l*=Ura zszdWE8Un#sH40taDf{zP&fL4Ku`BQ|^tMjF;|>Xgq~21r@qs{Ck5;K6Oqo<8UfNN# ztuI7?OJ~6kLie6pujFrP)b?2pcN@liQPe@xYK>52pB`67n0wv&+D2b>M%HBG!amdk zyPx9Z&lm-^)=Q(+tf|~~Uw|b4z!EGPiTk&43^l2L2`0c-Fy9v9CESreZw>}jEXZfB zr;z0caFeEL%UC$liU`)#vBiX*J;F{;l24M!w#M@&aW9@UL|zSvj^L;W4%bk!ZX78& zqz1qwuFzkb>fP`gOqZJ+_!g*p1*x->lx48B#$)~wH;ylXao4}15AQ4sT2D0Y?N{O- zpdQIJmQ6o)Yjb<#|B$?82;5r(vg8v44+{?3LUvF7EI=S^yO~rWxiiOlWq3omMpP{y zEqg}e8Ql8fxCfU7Ff4gNY|0^X@y7W@JV>c&$N*Vt9pFTQG~QZwsqIW{ZmF77 zxo0a7^WoJuK?>hwMH1D$V0y&pR9>)PnCR^3bKC~v@#3Dq;=cF3vf1nll+0xEP*Q02 zC_O3p2ra&9L@QGvAI@vw-T(m*Jik_cxgK~yU@we2j=yfPA=CY_M69qjAn^A@ZdnI; z9hSZNO5wraqO4KYYKONVlRPMIZ*;5WM|yQ(eRrhqmf6mP7=?eQLg$G4a7?iMlv~Zo zBu7kMlq{C5Rk)o27SMo8&Bm|ek7V!T&VTzW;n|GyyjA_q^er)wx`wEdTsKNWsbAqZ zt&{2I9w+}=`Kp`RAg@=^iS%4vvfk(mg;LIxdm7_MZftg zD>EYvZr}wxxd9`d8Ghdku zsR~ZPf3W9=4i}2_;>@L0&mSt!mCX9^&=)nmerZ)tdzV^RupT)vJQ&OMiFG;q`7Fb0 zfGulBmYW|$XyZ^DC41Fp(v;72zz!A9tVn?$qdps!Us)MyQL@=Ae)f^PrY}x~FHN6K z{Ch|8+Vyj>tPn=#-K>x+?<|J?vW2+|WpH?nK1&c(EY@=q@_GRUkH+JIT{(o997JFM zQ-LD6-4E%fjRKb7;H~+MMNO=a3j^~AIT6yZkWh(FCG~z$_6#1oucT*UAw{`1SGfN| z@9q6tX*y6~ZzN4rMBTk#yfzN3n{<_nE%{vYuvyHs^5utqZe?&P{+{*BtBRA+e=0m^ zd6S*yc((ELmvR&upHBV85{gmh6c{Yv3gN|tO@rhq${NI-kh^f`t3I1ZR;Qd`LTlZ-KQlw&}Ioyk8BDG;(TDpJV&%RAFa z8<@!?VOQ>#+Cx9g;!0Y~ph&Ilhh&C!eBJ!u&iQ%BR;Fz+x1M2nucz>Y3ii-*R@+eq}u+aIbr#R5p8c-y+e@J26fwr!>jFo4{l9MLg>3(^JKZmF%6?h9iP;9_c%!Nw%jb)7<|V*{{cw>siG zwZQ>ekiR*Xb!;H(PDhNQO=*@wri(_ez(@5dgb$^n6SbNTMpH;e9Qxuu7H6w`D{tL{ z?p|Ry<+4)?%dn5s`m2ev?;MckynHedm~@9wXC@wIx+^zYr9~l%&96_e?Su0BYrLZs zIbCU?0xpD*sX%6WChaP;BC>TurkpiwU&-(Un2)tp&7DgGb3p+q;6IbMZT?9w=}%HMf!rAJFvv$7B-<$p|Ml1M@_R%SMpIIF8(k zG029r;_zmh$a&fFz!@(4xtW1wc)&(9SRgC{r-REqmp7ZA`|T}dw$)U!hwocm%?4!V z$JG=Qj9 zHNmi;W^1qk8QO~|ekZ$!Z|$Sd1jCLP7`;w>LaFsC<8k&R*}cHZ|M)u|W#yMMX)%es z{6OWk#j4w%?|)YUr;hLeN}m|W{Vh`B@yhraKF>2oek*=&%E%Sn=SzO(`0MMe@V(lJ zIjEIfQC?5pv;b3fF4|=q--r$Vwo%#aL3m>r56KMgoM!m|SBX^J z7g14@c+18?e69br{oy!-vDyGsLu@P4Ima-6inh*#Q&uB;7*#i}21YJ||{ zzj^mU%@1Gp?erbVfwOdrU^&Lb#A708^$~~N>7(i^DAak*({wKSXUS=Auw=>Q(5uAn zQXH0@9TdN5^CStzd-(^r9F>>er+J3ryfmw&7vnrz3B+finz;4jg|^OmBa<%duEQyjXcsRq~!$XGw31PtV(Qp)zyH#jpCk!Er0;zmTRO zfA)|A)g&qN`jNV55zB$2>=eCK5I7}~ey{JIJUS7L;6!QJJT}BwRF<&#kqQ)dGuv(; z`<63farkpq%1w)DE)CS7XVsC4T1J`R!vkngBVM{e4^hIlUS?ncUN5t9uO}5+giqpX zKJB_SM3nA3004S+(T?31k(Usy5k2Bl+v^B#M~c1f%=R9v#qnyw>DsMhAHk0qEWFv& z3FUOgCX^7C{I|1lt1uGt4yrq2l;jp4JHnbt@G!}WJSs@xlS7w@I#n=;E=Jx(h-pTN zqw%zQkIj24vq8qu7u?m$N52`9caWr}olkj;>_Cw*Wu~VEq=;z>?yH=0o7QN$q|Sma zxXinwhwh!+Bq^}`{>u@6k;+uM+nFc4=0Z#nFqa54g`kf=>!>@B(!y$abaPtt^_a*Y zR6262>4ZgZjvqLe-;dEIv}SjdhcyK zhvB9JL_LpPgrjDs?A^LyJpZlWjE!q{O zx)tm;Z7a;Z@^KE(MZgIm^5pz9w{;k!VJ-?7Vhh6@xg)$8YR6^tzi<9V3hCEFe0>?Y zMhsOxAHbEb2B-LAu9iZ75e=AMu{R{_t4<+m5y~#R2ed%mM=O)qOV0Stc z*&EKKvg3(Nt3Egrt|UVIUiHnaZ$z*?62zs&?O_#mlyHf}tp4qwRKr9gVnI_7TkCAt zM5vbRD!?3dDnXX_@dth;7EgaZR5@qew_!#nT>OpNF)3R={ukO=KPZ?@{&VQJ*3FS? zw%D9PEB80aJcnj91(@ziz~{w@{GzzG?+IJGv0_Ji?>Gj|aOC>@kvgnB%8uVwla>|= zQ?ox$=o++|C04xUO%#gWffFo~Xo{DoAc6B<)#Q1j9y~+N+=91%tSY6h+>-}l$#eV= zfz=9drQ{oB8P(al4ZIA&z)6`?As4XOGY^BdP#=y{2#D63Y4gF191S$E{ zPowscuImLGE)2ud^fVZR=Lo*i-~njdX*!jUDS+P-C+7{7QX$B5q&En~8Y1Uq7Zu6< z-Fw(w*{CaeY+OQQ(=hq77i+~mEW?_w6dTwlT-tyuiO_~(mAnTfEO<+{v=gm2P9~+c z>PYnM;!D>R9Zpn7{kZ2A65_E+LIobHJH<>;pPqbGtiHzggYcK+;j9HwzpuD1mc>Wt z2fgTyX-7SixG!kCESuYtNKar97IWsFv0xv?bSD{p5si{w$k?*r*iP8zQuJ=1PVe9+ zKGGxgmB@&y@h>fFrIVlM6xSLL_ZNEVA&l+McqPQv^J*+5`!9dh5-cZg#OW9uaOg{! z%4Wn(A`lBF^k-$ZMN2(uFtc;wIVym2KdwS0g;-E46Y*o`%m^VyNKMoQDrl%O#<@ad8*z?!tXP{f@GkU!+!D{iznf6M+r}+i-_cKJtytSJg^VAiXM5 z?wxnzcR49OuMBr1WVR@Pb?ewIEXN#>p-qB;(In)j`9KKLd^0S0w1Cp}&nr)624d&J za|JaT28fFsn!=4q?3VaGi1YLyyu_V>$)9ERu%8fSlFvC`(cWgg$}Fv0mvQXscX%dP z>3n2$g0B0kObk2sMV%Fmzaf&2^Y+x>%4jpy5%r!lk%A8Ir;Tr|D-UodidWZyn>mSb zxCnZqQ@j(8YAUDor;&V+duvs0>pNWQXs>8&e8!e>R^9Zb+pRFjcOGarX_*8HBX5pC z+pN$M$K5ShMD-fcGHDdCLRWt1cIw<)DNerU7s|*AIA74EopJc40{bBRmZOd+p-XLU zU-9hhOX{2=4R8-Je=4>8uP2ag{*lHm9-hk<#lX^()(}T>CO%+FKgKOMd@EVMX!V5J z8)>C6BqZE51FBXXMWjd{_`DuN;&~_<>O6fltn*`@1u5`E-wPm@EuqzdsYq*6{gHx3 ziT`r-NS24G!P>_$Z%#oU!fnf!WrA+PqqNv^V*irGnI0E%+`ePLnRsQ(L07~*mK1T_scII09==MTb1W>2X^7j;l%R#``$Li3tcs|WoVv}{+;U&S zFV@%M=A`K+^oD@(X2~0f(vD8A zRU-l_bB`0g*eR=_>(L6I->y&O$o%|}c_OgkX9ryz8z90>2 z5=_hE5}bpZ-}+7QzjVIsR~xbwAKFs*BRxu@J0=}1lJ=1wb&(UuTZm33!TNg*T>F0% z5Az)x9H-%>^j#|);0x`kZSe{B{SW24BDTN-wi?|t&c5%;W2!vsj(HWWK(FZi?VFYF)NbSpMSw@KCgJP{%@rw{AW zo$d&Efd$Q|q?W+4<0M9%od)%LbKd1yFXZgwBtNZ{XSRL?-GHgV8 z(%;UbKQfo7Rss9{#&4rrCdJVV zmqhL1{|20u&5mtZ_OB+GRaR?xC*}4?Jd-HNfsCQN0188Neq^u{FD1U0C|)HVmyOjK*WS%M zbPipvgQ6Nobz;4;J+mjFeOjrp&YiG>cRO?5aavBg5vPMSl+)W;*#i}_`3#W($+?#D z?O!WZq(m-im1qp8^ASXR$j2QPevF&kE)1__`fuaGXJgD>tD04xU#}Vy*Cj+e=iu zn7#?*+5U!p*_!oE+DKl%R`21cz`R}cUI+j-S>QLb?YKsa(NoLd0_zu3pof0h%LN+e znKXoPDvniDl;7Sjo?`%l;mS&S#yd9W#`{N;4oJQAl@=34xuz(u;+Z{`!7;#Uv+ZOc zWV)^vrL`515dE<4j$1ya-NU*$TD|+rS?XoNk4p=pj-z*vFcE~Vy~RPn`gIFl#;-eK zNtMIJpxX_#WjSS89PxpFJ(svLR{y9MgZ4U!o3TvJyx0?de*0YC=}l`~Qa=%1Q#@Yx z{?}#v?V#-w<=lgx+^s4&|K1`g4Q+2i?|AB6Iic*(bHZz7`=;$*W(}#eZ|NrCguohE z?{(GPo+YPpYoULL$AHnML#2A4)~pm|8Z9^Rf5L>V?gaUsgsbjATQxpr-g(rbreh^* zY%yf!l>9og%36g)T0TYg7vIo<*IJ$6Jiq(sXs4a7;((*`Qs6m{iWU znR?fU;zW=dAfI$0n9kNQ&!`6TtFDsSgaqpFKzmaF^H*@W;!39hoq0i`!ii(2Y zxLPK~+tGHqp~10gNnV|`b0X%s?m0!P9rsN)zu!oSRk_1>#8ejS?84zSwLXx|@~lsq zXY|`t;19eY(NCQnWw#mo)_KLdkh|t}aU;#oaE*QFRP4x!Byf%8a?bZ>l*hJGuV$G4 zZpNMg>>T%oYUpl60Czf%+UwD__ohIj)+_nolVW^^kp!E#M`g$RC(S>r(x=FsHO+UC zlr%t|&x!N%HGSj&lQnYs#6aiZUV}8Pk~|^oK4jme=W0Y0w2=FsU~IJdVhNeH`7Fbe zt#R4?-jmi((^1nADu;p3P9XiEIg?|hs}0*Vv$IUq9q0Z6&k8tpT&}T^?>=Y4Ee%#| zmQTT+cL#PVHJqp=6MaTnQztj6RJ^@f$dwxFdTTsmRbY>JBaAVBU8H=v;dYzgmKiC# zb8B1D)V(|Zxt3!05WC@o62|V8=;O*S?^LDfm=-_JOU!Jmzb3-kEP1a~ zk{jNv$TD%j;E5U+rHfndFnk>w7*xUkay#h$N)^7ARJNYblvpxMc}-*M$VL%pBb8sJ z_w#SL5NaZ8-6v!>>=B~@0mhtrwc-rVj&Msx7QrFe{pn%X|ew814z3q-k!R5sjTCG zs-f=rVODdKaP-+^gCSc;Uc{k~yN&-ZlD;(%wYI5e4n*1B22~ zSD%)ARr*OA@gp2fQwBTPC60)$2UIhM2f#nrqtfA3O6UKE*DfR>q{bNbdw!jAQ?lGp z8Gh7+NnO4WeBeu2k>QOBtL>_$RWF#@TuEqCbIxQ^c7Vsa_mlMMR`bZHLc=&7TQd*poC-59ee6vIbPKd+|#(}b5|EhTnF1CS{9 zr9=$_`&}|e?)>1m>p2wyEk$oDuU}&fdUZ1}K9=jW{6(y1UnJDj{@qilQ2@95#Zg|S z&fH59q*=@Fe{Qgbt7b_F9`ZB*chwIZ@C!CJ%cuS|Kyg%(P%aETQ zZ)`7!NW`gs6=NeT_p03IYCZoRFY@PxI4}xnx>=Q~AW`yTpGWit;7iIFmGrf4Yt4*37T8U5**sD-{DIRytxuanjufycHFxd1- z4xm=ZLX>f!zFFPlMAu46Ez;?2eZ}h1@mx8$K~xN{?$a*6V_W}95N{TltJ?l?1L}$q z5npTX+AcaLWHh!35Rz%TN zpDg|+a%V?}L%rd>+m4NAj4fU2OJhK9`zC;>pt-thrCtN3fv743SiVbW&5St>&$4_VhH~|FiYnOClu~SsLeF0NGE->D zr9|qYbQx8AKvRWK%RGJE{+Qa1o{{(LuBM?wYp;t>&mNA~I3xS@Ia!q_b*$tvRAzZ| z(S*wUf3p8D#4(sAW2AQA%J#{=m(vo(Of;%4t3Jf&*d{^Rb~2z-*rDxr_c+&1FRlgV z@%%W|2XMjIRZf`4dzw9o^<1+q!l=3Se$5VHTI5tP1-0`?Bv9aCeBQ46=E~Q_Q1~Fsah8KKcL0$3pDqg{5nH~*m)B;S=0Wux+^e0xEgWD z8RreEESrZvZ5n@i@aSUUGnf9;_pN?={+EFmbg*bhS${8DeKnLQWa$`Bax5H;6xk4C z13$JVOV6D)ntuZLCQu@$ZrB$TIUEbu%vK0OrSWa&nhy7oUH|3bB3V9&aC1nZu8?`= zLwMiv7vIy(-O@Q-F-Bd)=+54K3T2Nx*3W0RVKG7BQ8?j5m+iWGY=IMZ30d<60spJ6>@YYYorC7jK zSq~@jvJvmOtIdBl9^H|8{rNGFA01;s{qgU%ZZXfGl(?tLX!lRw_NRs`dNMlVY~$f`#_zYoAiZM9j|X_NEx6*i^ssTa|m10jV>=}qXvOM&R$0egC1 z9(>x;I}GuIPpYEjfXob&qJ!l1aC@70f! zKo+BcAe~P2jTFLt?CXHQv=d_k7u}ShE{g~fb?-MmC_#1l9sbc+s#JrXE@%rmI4K_e zb(ePh)!0N};~2;~Z1b281_r6?XL1|N{5WOF*-rCQ;d~^nG3KZ^wp#IKTYZ-ExZO!E zU%mby8ohL7(cd@k;E7I(+N?5SF$k_(@K+%vsn#ETu?)%n)jGMr$pK^K2XeOV%+uo}DM68rLgc^Ha*fyK zd~@asn;KkaHXjjYTKyUXGrMpHc?r)Ub3(`1KKO^kg%?`Ak;g@u&M!h&iks3Ul&>Q( zCV6$YA;?a6AtQusE*}tOU&YQ0kHl|CQ8bF^!h(TtEAc z$s%!ps!l9gHN^Q^xd~9^#Fh#LVPMz|u$2!+YcivadVZQ;2!;xA{JzLn+>6 zP5tmn@SmZQ)_ZHinoYA=(~leEdu?@lzj)0B1UJ@!<xQbIxlkIIX5gpd6_1RReDxyYI`gR(@6t=I{=tb}{)DboG9to%#MoC_H(zeoe zraACoN3Mr`r{;&f9OFw4agFC$6>lp}Pp^q>)t1i89OLH{XrkhX^P3mqaaxwUZtm;V zF5zR%qPRi#swbb6_O8(EQ1X$szFJMfurh_!^MJc*b4-nw==~w@feDo+(uuZrP?z-w z@P5LwLz0^#Dq|?g`xB=Ro)EC9m!nmq|83q&zLn;OW$F&k{Ws&XqaDe9saD|?vu!EI z6PMoNjQ6*ZII*TU(CU4iUt>hENG6XfZXVGxqCT5MkzxnjFiqLzHu^Z?aiqIyJG?V6 zTle@>VG3POL@G>rQZZ#WL`=&{LaA*~f@CjWkBRt(y%B@`N8 z?n?=m;e)(;fzGI#a73bN->Ki8Yz~V!^eD#`J~ZRmYHu=3zy#gJE;AkD_1UJ>$E-wj zhJv8BWaFbhuPYtqd4+OAdu=vU4sT~oyJ$vY8%_+rcC}B%4EH*vHn|^MNHN>PHl#|& zeAFnvhA6%C+a?&akxtyy&vcdVLsfXa8^4YKK{V8 zbmUz>P6in=0HZ{l(@s`&y_% z`#AQiG(Ohvh$H@`M8cPa3TuBzv2_if;)_AjJV6p)A=xp{q!o4|oh6>M#dnVVA2u*e zvV!f&8I^3?LWUKu2br6!z5yOA9jD`23V~n2+eQ$nmEy8BH?@MG(;velv9({iPP1t_aUGcN)I=(o^nv4VR=w#@4SxyuKaSUl z2kUL@3 zlsXpHMx5mX|9$4wpULuSPSX9#V(U+hOA>3bO)qtvZ-K>#+cM}a*(k^pQtLm$pw*u@ z_Nu^%qZLK&;b)+n-1bJi(zae6oA}#DzCxOT?;pg7%Os=@ zs#rFxHa78fusi6YQz50NtNZ0oEXxC&B9(wMjmDf+HyqyFn{M2?hY;#$3(4#cnq(Jf zUt?x2>(nWOO-Ke3ey#4AWNgJJ@6E4`R3>` zEu+xZMRgCc;6fP|oiycrw?=|W6Xk;jNAD`K?6W?(qjTG5oB3iq#wVt+i85z!QzDN{$VzjP^vm{Z;%m@cAn8|2x-8DRGo`$2j|+}u>h z>0=ft!_%gre|S2ia>(XZs$%n-&1ZczThb#3%~p`?{!lDOg6U5G)$JUa98@FJU|(a? z<40;iV+FGPU)tdXZSnM1kA*cdaF$6z`ER@5-+j&v_&)*p1_t@(MBEbL5Q@)89y!=A z=ftAe4;vW^tBpp?6c2e!v}|)2q5c>e(_v}|!)5XM?HP4MO;n=|wc;Zt)xiE(r)iJ= zfrmN`3FP^?27?6e3 zV(c@T5#nM42T5Rq#%CmFIJr@X#qSvNsxJg4<8nObuksle&L8Lgt7`u*-7&VPC{J0N(oU^J4Yhcdkhx{=g`)SQ~hq<-(+JE-#3;b>z(GCkDn32!8 zaQ?`*%7e!GWK8tq_wn1T!a#iHz}R(s#HeYE;m3XO*T$*M@p$JtnBcsVVJ`zSuAK;#6S|`ax23f<*1tJG7lnW$5K!D6S?hUhB z;%507v(=F}H(qj&Z=93yiT~6Hb?APeWv+=eBV8sZ#?zW6&a6TE+I^iD@N0bLmy~iq zj($ID@LZw+V)r|#nd_c@=!0LFbH=&G+y{K03o-$5aIIJeHt+!GO@WA>9pYe4i}yjroW-|2n&Qc9Q9kmU zIj266gMCd?({a=;IV9$=AeDiii;B5jX!AKNi0W%KbIw=jf}oHpFp`Ql7(Qr>7T_Y! z;_Tf78-!=`{2hkK3*q77<{59k$KgUw#s}jEZoHXr^^j;hXyTj!8#TpuI*&WnU_0Ob z;flAY$21rJ!fc2MgK|o(emCP6S|A?fb05Rw*>g_hFSYw;%nb|RI!AAHL6kH78)Rh; zXasy%D?e;BlFFhu7R1F}U?S-Xqq^H`)a>G&Z00|yKZ%WBBpXYY;`ohggyzq0%J{sHbB0hYR--2uN-Mb(vioTnV6;Tg> z3c1I=$gy=%wN?2s{(7)ZYJs^`qkIXJraJNGb^P#g{Yk%-Ep%x^+Dq2ylfURB&tynX&6h$8q6qr|x$Q_gzEd%aWZKD-e01=E@jb)`n*aCp9nRpqbl z?0!`Tnc$u%W&>aE${M7P6;`<CrBb8clr+Yx4~9E!$uLwufQhEeOBfS z5gntdr;L3WK6YX|SbdeuIHqa@=@NceD3u=vQG?XTU7;&d(`d zg+(_1k$&T!TV?j<`dZF8jOcKS1 z$3()<3nFSbfS9Al02VdHFgb3S1M9Hbrtc=6#+wh-lj~(nsL^v?i7yn*k!;PWVd9(HyVsENPV9-Fc#+Lzu5uQfeK1L5=9l8s7r9sbOM@?($=BZ6PV@z_pZ|8| zxj{g_HFTJXOmU~h)3<@Y&tWMBEmZF8Vj-r*MU6I~>-v;a z&+7}!jl$fkdPoDnvHZjlF;ZVN$GV0dL%DcXlqYgj9LJM)n#IDGF=HO8n#y?bZ}z@3 z&vk1*hXv{JhXq;ZSl7^FevlTV{oHlwh21ZF{poIRX#a30&?tPB6yFn(GG@C0m7fi^ zVKF}XT-p85m)PIqzBFu{BfoNIeB^2iHqVZg<0E!;W?gfv`Gj%J>@&`w(d35y8iV(> zMZK!O){%LsPp;u)#(h#etpl~-eBs-y&3Usn^X;!y`1Ah(hsnyOa*Jwu00000NkvXX Hu0mjfrbFl& literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icon_tip.png b/app/src/main/res/mipmap-xhdpi/icon_tip.png new file mode 100644 index 0000000000000000000000000000000000000000..9c52e026c75ad6b89ac5d921ffa81a169153a757 GIT binary patch literal 2873 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/info_add.png b/app/src/main/res/mipmap-xhdpi/info_add.png new file mode 100644 index 0000000000000000000000000000000000000000..83082aaf7bc4e2d407c1c8007db9fe608e6095a0 GIT binary patch literal 5784 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