From 9320dfdcc878a8bef3cb5376f891d12c7f67ea5c Mon Sep 17 00:00:00 2001 From: hellcat <> Date: Wed, 16 Jul 2025 18:55:53 +0800 Subject: [PATCH] no message --- app/Models/Option.php | 51 ++++++ app/Services/TG/Hook/Mod/Blade.php | 203 ++------------------- app/Services/TG/Hook/Mod/BladeOld.php | 207 +++++++++++++++++++++ app/Services/TG/Hook/Mod/DDT.php | 154 ++++++++++++++-- app/Services/TG/Hook/Mod/Db.php | 44 +++++ app/Services/TG/Hook/Mod/Jctj.php | 2 +- app/Services/TG/Hook/Mod/JctjOption.php | 1 + app/Services/TG/Hook/Mod/Upload.php | 231 ++++++++++++++++++++++++ public/upload/clash.xcf | Bin 16992 -> 0 bytes public/upload/qweqwe.xcf | Bin 14105 -> 0 bytes public/upload/xcvxcv.xcf | Bin 9404 -> 0 bytes public/upload/无标题.xcf | Bin 12305 -> 0 bytes resources/views/cmd.blade.php | 59 +++--- 13 files changed, 721 insertions(+), 231 deletions(-) create mode 100755 app/Models/Option.php create mode 100644 app/Services/TG/Hook/Mod/BladeOld.php create mode 100644 app/Services/TG/Hook/Mod/Db.php create mode 100644 app/Services/TG/Hook/Mod/Upload.php delete mode 100644 public/upload/clash.xcf delete mode 100644 public/upload/qweqwe.xcf delete mode 100644 public/upload/xcvxcv.xcf delete mode 100644 public/upload/无标题.xcf diff --git a/app/Models/Option.php b/app/Models/Option.php new file mode 100755 index 00000000..3cc7d429 --- /dev/null +++ b/app/Models/Option.php @@ -0,0 +1,51 @@ +where("k", $k)->first()?->v; + + return $v; + } + + public static function _list($sThisName) + { + $oSelf = self::where("this_name", $sThisName)->get(); + + return self::_filterList($oSelf); + } + +// public static function _limit($sThisName, $iSkip, $iTake) +// { +// $oSelf = self::where("this_name", $sThisName)->skip($iSkip)->take($iTake)->get(); +// +// return self::__filterList($oSelf); +// } + + public static function _filter($oOption) + { + $arr = []; + $arr[$oOption->this_name."#".$oOption->k] = $oOption->v; + + return $arr; + } + + public static function _filterList($oOption) + { + $arr = []; + foreach ($oOption as $oOptionRow) { + $arr[] = self::_filter($oOptionRow); + } + + return $arr; + } + +} diff --git a/app/Services/TG/Hook/Mod/Blade.php b/app/Services/TG/Hook/Mod/Blade.php index bd310b09..1496d4c4 100644 --- a/app/Services/TG/Hook/Mod/Blade.php +++ b/app/Services/TG/Hook/Mod/Blade.php @@ -1,207 +1,30 @@ $length) { - return mb_substr($string, 0, $length) . '...'; // 添加省略号 - } - return $string; - } - - private function _filter($oBladeRow) - { - $oBladeRow->content = $this->subStr($oBladeRow->content); - unset($oBladeRow->id); - - return $oBladeRow; - } - - private function filter($oBlade, $sMod = "row") + private $oDDT; + + public function __construct($aUpdate) { - if ($sMod == "row") { - - $oBlade = $this->_filter($oBlade); - - } else if ($sMod == "list") { - foreach ($oBlade as &$oBladeRow) { - $oBladeRow = $this->_filter($oBladeRow); - } - - } - return $oBlade; + $this->oDDT = new DDT(new ModelBlade()); + $this->oDDT->_setPrimaryKey("code"); // 可选,默认id + $this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段 + $this->oDDT->_setThisName("blade"); // 必须,me用,正常就是类名,只不过后期没准改名,所以就这里写死 + } - public function List() + public function __call($sName, $aArg) { - $oBlade = ModelBlade::all(); - $oBlade = $this->filter($oBlade, "list"); - return $this->toJson($oBlade); - } - - public function Find($aParam) - { - $sField = $aParam["aOption"][1] ?? "id"; - $sValue = $aParam["aArg"][1] ?? false; + return $this->oDDT->$sName($aArg[0]); - if ($sValue == "?") { - return "/blade#find__{field?} {value}"; - } - - $oBlade = ModelBlade::where($sField, $sValue)->first(); - - return $this->toJson($oBlade); - } - - public function Content($aParam) - { - $sField = $aParam["aOption"][1] ?? "code"; - $sValue = $aParam["aArg"][1] ?? false; - - if ($sValue == "?") { - return "/blade#content__{field?} {value}"; - } - - $oBlade = ModelBlade::where($sField, $sValue)->first(); - - return $oBlade->content; - } - - public function Like($aParam) - { - $sField = $aParam["aOption"][1] ?? false; - $sValue = $aParam["aArg"][1] ?? false; - - if ($sValue == "?") { - return "/blade#like__{field} {value}"; - } - - if (!$sField) { - return "需要field"; - } - - if (!$sValue) { - return "需要value"; - } - - $oBlade = ModelBlade::where($sField, "like", "%".$sValue."%")->get(); - - $oBlade = $this->filter($oBlade); - - return $this->toJson($oBlade); - } - - public function Add($aParam) - { - $sCode = $aParam["aArg"][1] ?? false; - - if ($sCode == "?") { - return "/blade#add "; - } - - if (!$sCode) { - return "需要code"; - } - - $bExists = ModelBlade::where("code", $sCode)->exists(); - if ($bExists) { - return "code以存在"; - } - - $oBlade = new ModelBlade(); - $oBlade->code = $sCode; - $oBlade->save(); - - $aParam["aOption"][1] = "code"; - $aParam["aArg"][1] = $sCode; - return $this->Find($aParam); - } - - public function Del($aParam) - { - $sCode = $aParam["aArg"][1] ?? false; - $sWhereField = $aParam["aOption"][1] ?? false; - - if ($sCode == "?") { - return "/blade#del__ "; - } - - if (!$sCode) { - return "需要code"; - } - - $oBlade = ModelBlade::where("code", $sCode); - - if (!$oBlade->exists()) { - return "没有这个code"; - } - - $r = $oBlade->delete(); - - return $r; - } - - public function Set($aParam) - { - $sSetValue = $aParam["aArg"] ?? false; - $sSetValue = implode(" ", $sSetValue); - - if ($sSetValue == "?") { - $tmp = "/blade#set______ "; - $tmp .= "\n /blade#set____ "; - return $tmp; - } - - // 有第三参数说明是findSet模式 - if (isset($aParam["aOption"][3])) { - $sWhereField = $aParam["aOption"][1] ?? false; - $sWhereValue = $aParam["aOption"][2] ?? false; - $sSetField = $aParam["aOption"][3] ?? false; - $sMod = "findSet"; - } else { - $sWhereField = "code"; - $sWhereValue = $aParam["aOption"][1] ?? false; - $sSetField = $aParam["aOption"][2] ?? false; - $sMod = "set"; - } - - if (!$sWhereField) { - return "需要whereField"; - } - - if (!$sWhereValue) { - return "需要whereValue"; - } - - if (!$sSetField) { - return "需要setValue"; - } - - $oBlade = ModelBlade::where($sWhereField, $sWhereValue)->get(); - - if ($oBlade->isEmpty()) { - return "没找到这个blade"; - } - - $i = 0; - foreach ($oBlade as $oBladeRow) { - $oBladeRow->$sSetField = $sSetValue; - $oBladeRow->save(); - $i++; - } - - if ($i == 1) { - $aParam["aOption"][1] = "code"; - $aParam["aArg"][1] = $oBladeRow->code; - return $this->find($aParam); - } - - return "影响".$i."条数据"; } } diff --git a/app/Services/TG/Hook/Mod/BladeOld.php b/app/Services/TG/Hook/Mod/BladeOld.php new file mode 100644 index 00000000..bd310b09 --- /dev/null +++ b/app/Services/TG/Hook/Mod/BladeOld.php @@ -0,0 +1,207 @@ + $length) { + return mb_substr($string, 0, $length) . '...'; // 添加省略号 + } + return $string; + } + + private function _filter($oBladeRow) + { + $oBladeRow->content = $this->subStr($oBladeRow->content); + unset($oBladeRow->id); + + return $oBladeRow; + } + + private function filter($oBlade, $sMod = "row") + { + + if ($sMod == "row") { + + $oBlade = $this->_filter($oBlade); + + } else if ($sMod == "list") { + foreach ($oBlade as &$oBladeRow) { + $oBladeRow = $this->_filter($oBladeRow); + } + + } + return $oBlade; + } + + public function List() + { + $oBlade = ModelBlade::all(); + $oBlade = $this->filter($oBlade, "list"); + + return $this->toJson($oBlade); + } + + public function Find($aParam) + { + $sField = $aParam["aOption"][1] ?? "id"; + $sValue = $aParam["aArg"][1] ?? false; + + if ($sValue == "?") { + return "/blade#find__{field?} {value}"; + } + + $oBlade = ModelBlade::where($sField, $sValue)->first(); + + return $this->toJson($oBlade); + } + + public function Content($aParam) + { + $sField = $aParam["aOption"][1] ?? "code"; + $sValue = $aParam["aArg"][1] ?? false; + + if ($sValue == "?") { + return "/blade#content__{field?} {value}"; + } + + $oBlade = ModelBlade::where($sField, $sValue)->first(); + + return $oBlade->content; + } + + public function Like($aParam) + { + $sField = $aParam["aOption"][1] ?? false; + $sValue = $aParam["aArg"][1] ?? false; + + if ($sValue == "?") { + return "/blade#like__{field} {value}"; + } + + if (!$sField) { + return "需要field"; + } + + if (!$sValue) { + return "需要value"; + } + + $oBlade = ModelBlade::where($sField, "like", "%".$sValue."%")->get(); + + $oBlade = $this->filter($oBlade); + + return $this->toJson($oBlade); + } + + public function Add($aParam) + { + $sCode = $aParam["aArg"][1] ?? false; + + if ($sCode == "?") { + return "/blade#add "; + } + + if (!$sCode) { + return "需要code"; + } + + $bExists = ModelBlade::where("code", $sCode)->exists(); + if ($bExists) { + return "code以存在"; + } + + $oBlade = new ModelBlade(); + $oBlade->code = $sCode; + $oBlade->save(); + + $aParam["aOption"][1] = "code"; + $aParam["aArg"][1] = $sCode; + return $this->Find($aParam); + } + + public function Del($aParam) + { + $sCode = $aParam["aArg"][1] ?? false; + $sWhereField = $aParam["aOption"][1] ?? false; + + if ($sCode == "?") { + return "/blade#del__ "; + } + + if (!$sCode) { + return "需要code"; + } + + $oBlade = ModelBlade::where("code", $sCode); + + if (!$oBlade->exists()) { + return "没有这个code"; + } + + $r = $oBlade->delete(); + + return $r; + } + + public function Set($aParam) + { + $sSetValue = $aParam["aArg"] ?? false; + $sSetValue = implode(" ", $sSetValue); + + if ($sSetValue == "?") { + $tmp = "/blade#set______ "; + $tmp .= "\n /blade#set____ "; + return $tmp; + } + + // 有第三参数说明是findSet模式 + if (isset($aParam["aOption"][3])) { + $sWhereField = $aParam["aOption"][1] ?? false; + $sWhereValue = $aParam["aOption"][2] ?? false; + $sSetField = $aParam["aOption"][3] ?? false; + $sMod = "findSet"; + } else { + $sWhereField = "code"; + $sWhereValue = $aParam["aOption"][1] ?? false; + $sSetField = $aParam["aOption"][2] ?? false; + $sMod = "set"; + } + + if (!$sWhereField) { + return "需要whereField"; + } + + if (!$sWhereValue) { + return "需要whereValue"; + } + + if (!$sSetField) { + return "需要setValue"; + } + + $oBlade = ModelBlade::where($sWhereField, $sWhereValue)->get(); + + if ($oBlade->isEmpty()) { + return "没找到这个blade"; + } + + $i = 0; + foreach ($oBlade as $oBladeRow) { + $oBladeRow->$sSetField = $sSetValue; + $oBladeRow->save(); + $i++; + } + + if ($i == 1) { + $aParam["aOption"][1] = "code"; + $aParam["aArg"][1] = $oBladeRow->code; + return $this->find($aParam); + } + + return "影响".$i."条数据"; + } + +} diff --git a/app/Services/TG/Hook/Mod/DDT.php b/app/Services/TG/Hook/Mod/DDT.php index 6dcccd97..e86bb10b 100644 --- a/app/Services/TG/Hook/Mod/DDT.php +++ b/app/Services/TG/Hook/Mod/DDT.php @@ -6,6 +6,7 @@ namespace App\Services\TG\Hook\Mod; //use App\Services\TomTool\Http; //use App\Models\BladeJctj as ModelBladeJctj; use App\Models\Me as ModelMe; +use App\Models\Option as ModelOption; class DDT extends Base { @@ -13,15 +14,16 @@ class DDT extends Base { public $sPrimaryKey = "id"; public $iStrMaxLen = 50; public $aStrField = []; - public $sMe; + public $sThisName; - public function __construct($oModelSelf) + public function __construct($oModelSelf = false) { $this->_setModel($oModelSelf); } + //// 定义系列 public function _setStrMaxLen($iStrMaxLen) { $this->iStrMaxLen = $iStrMaxLen; @@ -32,11 +34,130 @@ class DDT extends Base { $this->aStrField = $aStrField; } - public function _setMe($sMe) + public function _setThisName($sThisName) { - $this->sMe = $sMe; + $this->sThisName = $sThisName; } + + public function _setModel($oModelSelf) + { + $this->oModelSelf = $oModelSelf; + } + + public function _setPrimaryKey($key) + { + $this->sPrimaryKey = $key; + } + //// 定义系列 end + + //// option 系列 + public function option($aParam) + { + + $aOption = ModelOption::_list($this->sThisName); + + return $this->toJson($aOption); + } + + public function optionAdd($aParam) + { + $k = $aParam["aArg"][1] ?? false; + $v = $aParam["aArg"][2] ?? false; + + if ($k == "?") { + return "#optionAdd {k} {v}"; + } + + if (!$k) { + return "需要k"; + } + + if (!$v) { + return "需要v"; + } + + $oOption = new ModelOption(); + $oOption->this_name = $this->sThisName; + $oOption->k = $k; + $oOption->v = $v; + $oOption->save(); + + return $this->toJson(ModelOption::_filter($oOption)); + } + + public function optionSet($aParam) + { + $k = $aParam["aOption"][1] ?? false; + $v = $aParam["aArg"][1] ?? false; + + if ($v == "?") { + return "#optionSet__{k} {v}"; + } + + if (!$k) { + return "需要k"; + } + + if (!$v) { + return "需要v"; + } + + $oOption = ModelOption::where("this_name", $this->sThisName)->where("k", $k)->first(); + + if (!$oOption) { + return "没找到这个"; + } + + $oOption->v = $v; + $oOption->save(); + + return $this->toJson(ModelOption::_filter($oOption)); + } + + public function optionDel($aParam) + { + $k = $aParam["aArg"][1] ?? false; + $is_done = $aParam["is_done"] ?? false; + + if ($k == "?") { + return "#optionDel {k}"; + } + + if (!$k) { + return "需要k"; + } + + $oOption = ModelOption::where("this_name", $this->sThisName)->where("k", $k)->first(); + + if (!$oOption) { + return "没找到这个"; + } + + if ($is_done === false) { + + $sMsg = "匹配以下,确认用optionDelDone()。"; + $sOption = $this->toJson($oOption); + + return $sMsg."\n\n".$sOption; + + } else if ($is_done === true) { + + $r = $oOption->delete(); + + return $r; + } + } + + public function optionDelDone($aParam) + { + $aParam["is_done"] = true; + + return $this->optionDel($aParam); + } + //// option 系列 end + + //// 辅助系列 private function filterList($oSelfList) { foreach ($oSelfList as &$oSelfListRow) { @@ -67,10 +188,16 @@ class DDT extends Base { return $str; } + //// 辅助系列 end + //// me系列 public function me() { - $oMe = ModelMe::where("class", $this->sMe)->get(); + $oMe = ModelMe::where("class", $this->sThisName)->get(); + + if ($oMe->isEmpty()) { + return "空"; + } return $this->meToStr_list($oMe); } @@ -89,7 +216,7 @@ class DDT extends Base { } $oMe = new ModelMe(); - $oMe->class = $this->sMe; + $oMe->class = $this->sThisName; $oMe->rag = $sRag; $oMe->save(); @@ -184,6 +311,7 @@ class DDT extends Base { return "删除".$i."条数据"; } } + //// me系列 end private function filterRow($oSelfRow) { @@ -205,16 +333,6 @@ class DDT extends Base { return $input; } - - public function _setModel($oModelSelf) - { - $this->oModelSelf = $oModelSelf; - } - - public function _setPrimaryKey($key) - { - $this->sPrimaryKey = $key; - } public function list() { @@ -434,7 +552,9 @@ class DDT extends Base { // tomd($sTable, 1); // $columns = \DB::select("SHOW FULL COLUMNS FROM blade"); $columns = \DB::select("SHOW CREATE TABLE `{$sTable}`"); - tomd($columns[0]->{"Create Table"}, 1); + + return $this->toJson($columns[0]->{"Create Table"}); +// tomd($columns[0]->{"Create Table"}, 1); } } diff --git a/app/Services/TG/Hook/Mod/Db.php b/app/Services/TG/Hook/Mod/Db.php new file mode 100644 index 00000000..47c5b6d2 --- /dev/null +++ b/app/Services/TG/Hook/Mod/Db.php @@ -0,0 +1,44 @@ +{"Create Table"}; + } + +} diff --git a/app/Services/TG/Hook/Mod/Jctj.php b/app/Services/TG/Hook/Mod/Jctj.php index 5beb1394..6357848d 100644 --- a/app/Services/TG/Hook/Mod/Jctj.php +++ b/app/Services/TG/Hook/Mod/Jctj.php @@ -16,7 +16,7 @@ class Jctj extends Base { $this->oDDT = new DDT(new ModelBladeJctj()); $this->oDDT->_setPrimaryKey("id"); // 可选,默认id $this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段 - $this->oDDT->_setMe("jctj"); // 必须,me用,正常就是类名,只不过后期没准改名,所以就这里写死 + $this->oDDT->_setThisName("jctj"); // 必须,me用,正常就是类名,只不过后期没准改名,所以就这里写死 } diff --git a/app/Services/TG/Hook/Mod/JctjOption.php b/app/Services/TG/Hook/Mod/JctjOption.php index 61b83005..24d0d5ff 100644 --- a/app/Services/TG/Hook/Mod/JctjOption.php +++ b/app/Services/TG/Hook/Mod/JctjOption.php @@ -16,6 +16,7 @@ class JctjOption extends Base { $this->aUpdate = $aUpdate; $this->oDDT = new DDT(new ModelBladeJctjOption()); $this->oDDT->_setPrimaryKey("k"); + $this->oDDT->_setThisName("jctj_option"); // $this->oDDT->_setStrField(["content"]); } diff --git a/app/Services/TG/Hook/Mod/Upload.php b/app/Services/TG/Hook/Mod/Upload.php new file mode 100644 index 00000000..fc27023c --- /dev/null +++ b/app/Services/TG/Hook/Mod/Upload.php @@ -0,0 +1,231 @@ +oDDT = new DDT(); + $this->oDDT->_setPrimaryKey("id"); // 可选,默认id +// $this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段 + $this->oDDT->_setThisName("upload"); // 必须,me用,正常就是类名,只不过后期没准改名,所以就这里写死 + + } + + public function __call($sName, $aArg) + { + + return $this->oDDT->$sName($aArg[0]); + + } + + public function limit($aParam) + { + $iSkip = $aParam["aArg"][1] ?? 0; + $iTake = $aParam["aArg"][2] ?? 0; + $sLike = $aParam["like"] ?? ''; + $isDel = $aParam["is_del"] ?? false; + + if ($iSkip == "?") { + return "#limit {skip} {take}"; + } + + if (!$iTake) { + $iTake = ModelOption::_hit("upload", "limit"); + } + +// if (!$iSkip) { +// return "需要skip"; +// } + + if (!$iTake) { + return "需要take"; + } + + $t = $this->getFileList($iSkip, $iTake, $sLike, $isDel); + + return $t; + + } + + public function page($aParam) + { + $iPage = $aParam["aArg"][1] ?? 1; + $sLike = $aParam["like"] ?? ''; + + if ($iPage == "?") { + return "#page {page:defaut=1}"; + } + + $iLimit = ModelOption::_hit("upload", "limit") ?? 0; + + if (!$iLimit) { + return "需要option里的limit值"; + } + + $iPageTrue = $iPage - 1; + + $iSkip = $iPageTrue * $iLimit; + + $aParam["aArg"][1] = $iSkip; + $aParam["aArg"][2] = $iLimit; + + return $this->limit($aParam); + } + + public function like($aParam) + { + $iPage = $aParam["aOption"][1] ?? 1; + $sLike = $aParam["aArg"][1] ?? false; +// $is_del = $aParam + + if ($sLike == "?") { + return "#like {like}"; + } + + if (!$sLike) { + return "需要like"; + } + + $aParam["like"] = $sLike; + $aParam["aArg"][1] = $iPage; + $aParam["aOption"] = []; + + return $this->page($aParam); + } + + public function list($aParam) + { + return $this->page($aParam); + } + + public function del($aParam) + { + $sName = $aParam["aArg"][1] ?? false; + + if ($sName == "?") { + return "#del {name}"; + } + + if (!$sName) { + return "需要name"; + } + + $filePath = 'upload/'.$sName; // 替换为你要删除的文件路径 + + if (file_exists($filePath)) { + if (unlink($filePath)) { + return "文件已成功删除。"; + } else { + return "删除文件时出错。"; + } + } else { + return "文件不存在。"; + } + } + + public function show($aParam) + { + $sName = $aParam["aArg"][1] ?? false; + + if ($sName == "?") { + return "#show {name}"; + } + + if (!$sName) { + return "需要name"; + } + + $str = ""; + $str .= $sName."\n\n"; + $str .= ""; + + return $str; + } + + public function likeDel($aParam) + { + $aParam["is_del"] = true; + + return $this->like($aParam); + } + + private function getFileList($skip = 0, $take = 10, $searchTerm = '', $is_del = false) // 添加 is_del 参数 + { + $directory = 'upload'; + + if (is_dir($directory)) { + $str = ""; + $str .= ""; + $str .= ""; // 添加表头 + + $files = scandir($directory); + $count = 0; // 计数器 + $id = 1; // ID 从1开始 + $countDel = 0; + + foreach ($files as $file) { + // 排除当前目录(.)和上级目录(..) + if ($file !== '.' && $file !== '..') { + // 如果提供了搜索关键字,检查文件名是否包含该关键字 + if ($searchTerm && stripos($file, $searchTerm) === false) { + continue; // 不包含关键字则跳过 + } + + // 如果 is_del 为 true,删除匹配的文件 + if ($is_del) { + $filePath = $directory . '/' . $file; + if (file_exists($filePath)) { + unlink($filePath); // 删除文件 + $countDel++; + } + continue; // 删除后跳过当前循环 + } + + // 跳过指定数量的文件 + if ($count < $skip) { + $count++; + continue; // 跳过当前循环 + } + + // 检查是否超过取的限制 + if ($count >= $skip + $take) { + break; // 超过限制则退出循环 + } + + $str .= ""; + $str .= ""; // 输出 ID + $str .= ""; + $str .= ""; + $str .= ""; + + $count++; // 增加计数 + $id++; // 增加 ID + } + } + + $str .= "
NO文件名预览
".$id."".$file."
"; + + if ($is_del === true) { + return $countDel; + } else { + return $str; + } + + } else { + return "目录不存在。"; + } + } + + + + +} diff --git a/public/upload/clash.xcf b/public/upload/clash.xcf deleted file mode 100644 index 8e0ee8975f13fa224e8ed75af53f202fd8d69489..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16992 zcmd6uTZmm*TE};#DyjP=sp{&gTq>ulDs@d&>efjmsZ?UT;0#UM%yf@EBBRww?d+1I z5|ZknM+Z*hgU-k>G{Z2A;)9AKDDxmbNh{h6B7z7agAXFoB90@>!#s$HY}o$(Ykhm4 zea>0uq#9|M6aM+u-e>Q1)_<*UeV4UXJveyur1H+axbpe6_4O!`aB_9|=c-})k7zZLj;z2g4q>vx_#*}Hde_@J`B z#?=?z>mOE|$4WdN?H}#k-#gmVeYkY| z+s^HG9zCple*fvSgU5%r=GRx(<}3S$_a5J;Nw?SkVw&!o}_U+^^?)FtGJ4bsD zDu;WI_HRx9L=7it9K8Mp1rpJ^wWEfo;=*2-rcV7Z|4e+wtmIE_{#p_gQH}6 zcXMm)IFJAA!TsYs{WDJw_79Ktj^H)DyZ)T2Kef+jzO859ps%NQH=gtSo3$6Fcdu<+ zd0zdWJ@)gjC6A9Dul~3+>eFZjJsGU~%|}mGj}GE^HAr*kN^QI})TK}7CrcL;H~yq{ z-C02;zGK&Y_a5#&OIDv8KF|$K5`9hqO_~h6r1I@|`JagebRVUPdaaCzrc34XrE*`X zTq%|NOXY!5d9YL-rreWd*)sS$%H8&z>c3=VL^P{1�|4rE+=Vb36ZZVL9?o(G#8i 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 diff --git a/public/upload/qweqwe.xcf b/public/upload/qweqwe.xcf deleted file mode 100644 index 4b2811f3cac8fef3acba8e3aad03e2dbd1768aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14105 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 SH^=Dz2z^~Q`K*B}s{9{@ySzdG diff --git a/public/upload/xcvxcv.xcf b/public/upload/xcvxcv.xcf deleted file mode 100644 index b75c826c0eedad2847e2737e9b3909941157ec9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9404 zcmb_hcU%)$*Pb*w0)p5zV!^T?_Jk6WU;!K0%Qj;O5TzLsNG1tMXezLFSw&qt_TIZ< zTYE3Nt}YgApwbB`bH6haKz6@0GbCh8VydK&>VzIFpO+)ctK+}Ht)tOiE9IMRB&~T1=W7yq=W=Xq8#oq za?p8_SSFDqro<&tT`p3w*e_X@6eEq7kPrq;b0?c9IXRvVQbM9!HgS}YJ$=SZw*3c; z4u4*l6V^c_PDvI-MU5pVHC;*h>rwZZS`d5SN9y|8|6fTS(UKG~SR4iD+0iND1dtCy zD;Forz;MO}=WTAj%YOb3{Z2if!H8yD8`jbl#s6&7M7H( zl1XFZzE(x#9k`FHVGE zCs`Qgp7*t{cQJ6ubqu?(OstTl+VoM+5(_xM4Va)k)&=X1^~U_bwxL)M#>Ylrqp?VA zGByMI0TW|!SOO-)(l8BXz;duWYzej!E5z1go3ZWK9_%1?3_Fcoz^-67u)EkJ>={;q zm11RB1y+ZdX*8NW&6Va!YftM+>q+ZJ8%X2Oc(f6;v9yV_8MIlnSXv@YLDSGOX?e6| zv_jfO+78+Q+6meP+BMoe+HbU%v=6i@nu*S!yU@Mpo$0;k{plRKfIfyknf^UJmOhV; z)3fM{=&R_P=)37h=@;lX=#S_n^fG!a17kQdycyjXehdyHj1kG0$%tXd80m~$Mge0J zV=v<*<0|6;ql8h;XkgkgJ(+B#A2Wy<&YZ#&Gv_hWnfc5@=62>$<|XC>=1XP;lVG{B zI8w~*8Y_oYz$#)LVO?fDVwJM$?Ck8k?R@Qq*@fH9u$yD2w#&C$XSdJp zyxl#!*LJn`_V(@V``L%sN7{?*<@P!DtL=B&pR>PjUuti3aCYeGFwkM7!%T-nhYW`T zhn)^*9qv24b1*x)JN9%8bc}S2c2qeocHH84((#UCsiWD+!^zhv#A&kA94CX*DyO|p zm!1A_s&;mE_HpJqPjHqx>z!9Q?|1&y`K5D%OKX?DE@3X;xhPx~xomSe@A8{VwX3UZ zFIT?nOjo(4D%FwW_oV%yzE)(W#{GV72!3*KMzgHm%zXZZoxwvdx+{XWEo_ zGrW6wM|j73FZMp@{n*>owsTuSTS?o6ZTGgl-?qM8$9DX7l6JZ6_O*M|&eWdWenk7Z z?U%Mc*8X`1W{18VCUi*a@Jolw9m+d;bqwk#?wH&0V8`D((L43+G_jMq)8^7O>;ltJs&=72P^@ z3-6}rwz1poZe|}}pD8{WKKp#0cX#T}=^oR4Mfc+F6+OE47}rD7V^@#gdph>y^o;BI zbI+?i>wEe3n$~N6uVcO5`?m9q@Wp+1`To({wRdRmdA&FFe%QyZ52w%EKI{72?Mv@F zq;Fi`HGS{&qxT!yPug!?zkA=XzTtk8_|2wop7^==3H(z1cKN;Z_x2y_pW%PZ|8xHy z{b%-H+W%^QB49{Be884~X9HRf7(F0kz{vqs1N#mX4_q_w;UL#RBM0dQ9UoLVxZhyO z;9mwm9pX7;+>rT0iicQ-4jU>Px_9V@VLgV;8n$-W6OI=rij&XzmCND^xjOD?ZbRVE zKzZQ7z%N05L34w42E7mV4VDCN34R^o6Cw)P7*fJx^Jeij@Jd3vg^EHqg}&l<=STC4 z`0oUL1akzt1)qfhLYeT0us$p>OdEE7IAi#z;kmNBxQv-Jrf|%wv3Rnk{IN(ZG9q$$fbNjoRiO%_gGJo(v_ z-cuA)il@3w{ch@xsrA!_Pg^#vWP1PU+UYlDbeJKXaeSuz%&9YrX4ZZ?;@g$qmVP(n zyPWSHfA9Of^80H)boe3uhciFA{V4kJ&@9%hX|s0DvWOx@n?$vQjv`|_(Cw$KOIrVcR=Wd&e;-|&$ zOK?b-m2e`lb>iH_OG#allu7rJ`z7Zjm&^;Cw{l*EY>ccZg_iPt%5k|D6h=1{y%pJt zm#MteHL1q5scDCl9?C@JO;umjLe)EbB)(P6REyQcnr<3{=A~Ak-Iz{GpPgQ;>#obv zmFh?7w;P-ca}BpL0y36m)MQS}Jek!wOP}>RdsOzWoK`uqoG0^x=C5DCTp(R=d*Psk zs}~Zv(Ye?20`dy-EcxR6>puwe{o!95BH*Jt^c)D@a#-p2hZ7SGow>fq5+bvVKT;0mqx}&H=QC^XCTjI8o z?Gv|O+A(a$j-8!$F5X4orP%dh_jkMR?is%4_+G!g8~1td%iE9bSM2|IVAg@h2ge*N zKEye+_i)d{Ymayy$vsLtsybS6Ebdsz@fpYOofv(h_+-$@Bd7dNZ9CoV^qMnm&MZFb zbT;cOI)|UDJ)eBO{6g%7*Tp{;Kf5^n;=@Z5F5SL7=JKysMqasiRdDs(uOYvlz7}}x z#C6W~V>gE0IC^u)%_Fyl+&Xf5=3ZD-R5k z{DuGJX2tZ1(n?t+s>-i!U%jnna7}S-RPBqpggSG5uCcvwdjqH8s%e_(ojJ{7Z&_vS zV?9ZXA^t!K2qlYTP%FRzZwnYbCI-W*w!u5Y40uJki(yXR+UjWvL9@LBfJ|#_WcS}> zTg^=lKn;NvoyV}LdJLP$$FOzKd_i`HYZSD}e2hM5P;&p zrQSCB^=zx*;l9c4zhA+dL4yX96aIenXz`xpmnce*kRWopb3|AeJF58w%AI=Wk|u~^ zC4R9oTY*h_ySsOaTm>asN>aQux{p)um{@UAe3Fdao4WYPVrPrk0o31sJ}^A{ABG38 zsXua9nUX9LOA}++0|MYq^_RQG8$U&&RL+(risK|H3#IauD2Z&6C;{qMA0CGdf5H6$`k$wevnPvU zeRu?Vyq-FRvzcW8$9g4K~IxLQ{aD79VwH-JGDp-{`>F-{EOy^64-SGiJby_ z0*3z!e)`u5KDACeY_M@5U9CJ{&uBUy$dhVE|{>?}R7n0#sT3mE7Z zFo^x;cwXsG3kLWP9O6HCpnq~Ad`191B2RGGK_g$l5VUTj9IA&i^?pe8lPVpdQ7>t5 z^=Tn@Y9Twdkl8I{=N7U{3)!`W>;|#}LdXJ*0NK8AjMU$=QHBfFgOmY7+S_y7Z zntTG0JUl&ZSL)mpqDDVF`~SljIcHQ;e;U{_7}2Z@L|Cl;$YidssWw{tP|fFSTbJc7 zT)Oja6(V|~F9foj&(&xQ85st(cF7&G&tyHMO*iNmng(5_)^HyYK8QwC{HoFGv_GG@ zcfWX*HeH|n&K?m&wKF2jbJFvSR zz0zmlM?t*@`dpo_&(!I)8eF5x&>J-8Z4e_sGV%S0XpI^GVKC_RbOTLKGgvgB#2#!x zWjO}j>IP3rgF%PuG7Sc;MsL6`leX3qrh@d0bnw{&Re%EBk^_r%2HnPO27~4{Y&b-s z)?z)18`772gt)k&ikf^~)^qc38QLv14Lh}(r?5$cm5J&I^fF6lNMHWA)*XE`=Ie4k zp^rJ*{Rkb=WR?O3JY}I8!h8ld7<9UV180j}FIJoe+t!?4tutgEJf5vvUPmdjN2cn6 zbZ~{PX{ALPx}iE6r#|hIWIQOeg}v-9RAgZ##4K9SmlD_De)i-7d&#xvcI0fxAR{4M1nm zLtN6dg~)()yptI zX|NE+tq@Aksn5`BHkCP}hWd37)x4_K$U>l}TF{-Y$-7`A!%;;voGw~d_{F+cZ9`OA ziL)v&CsU`%Kl~m+_^XJDg-X@pYIFhDQ%b6=#1S=U*Zq9u3qodlR9%*MU+}2Dq4dJq+kkkVsZ$?Bs6mk@n5oSuXCTvc z9N*pu+NM_DBSG&obn`1oP-XS11=}Di3G{kd_F)oLX|){7SyB!?$Xt|DQ00ZJHJ^-3 z*s7{eb@s?={8Rvapb;GWjMr z3=gf9C@2D$*}7`5Fz_ev)Cz9jO4WY?+dqE_k1T<8tfUiY^MG{}nOcqFApV3m6qyo6 z6R_!*3EY@6VAF&AVE_RVCeWJ*VIU4u85E^jEI_GWCWHp2-8ojY<;d;gF}z{xNxrOw z$L|4uIA<}$$pbY2M8M+*(z(V^VJM&T3kj(sA%fwY`4pv+2!1G^E-;4j1p>|n8|l`e zR}li9#0U$zQws@r9G*bP59IRsoUNqQbwr&gD2#U))^SG_poKSe{$!qjmz)M#4ma|u z*}8a$Fl5RL00FN8NO;3^Nf?~+sa6vhbde$@CTx%K{s_JxWajw_;MMvGyzo-=B0Mk$ zp+(%VM`RX}WLRr8t>y{@Jl+or*1B%`u(@!wfETx3!s8ELxI8>~W~B{hkLo}F5G3FW zg1FpP@L3033gQF{1pGh_KQOZev(}?$-*NZ=6u1eQ0>ozu>cT>6i)ATSAoLbkL#I){*%Z~*$pZz#HUg6{hzxHd)tW!RP6@pP7JlgX z4;0w~pIXs=uFy_^gm!!+VDf3?XjGYvY%N5sB*albr^e~zNaRP7XU%AHkdSXDFopz& z1ai3?4ufk9BMwo%qu; z@Q(?Y_u~c*ocbAU;Mg!#7VF|+5LVvoZ9r>ApvjkGdE9v>bS6;1BbNa{Hb)pb=4@5n z*f&7pdtV~4CM!IMd-z7en=Flfv_e84u>5= z$2h{k^%RZ%3i)y#p^9&LA!Mkkt+7F2VRsRFEC}VS0)!QvDvS2mUS5?-VpTJdGN?_P)Dj7haUM<(-icKx*)#_}OV#D)W7tY=Irn}=NjU)e$$B+grB^^a9qW}X(}3Sk%J1VTK$lY zr!6y))hY}tQ!vyovl>=ZhojvT~}q?tVn%C@eNh2mS~iCTHb>ivRchn>dMhOodSN~_sKO-5jL_a zVL2wpaiwz6t`n`!Rvg#i%9W>=D{;;4!|7>xwUjP!s(Mi>IFc%tyD8{+b*elSSApNS zd`AmLZ9s4H!3|Y=yc)b#D<6|71Y}D2{C-oKLWR3SERc$co7IZdrk17Z<1HDg4!BvB z{wJBPuz66bnlH#ZK-A7Pm#XlZa$epRCgY02`X>IgS`Nx_wKr~6F8utpRQ)9tSGU1U zYQ+su)>Nu~$yTXIVCI(=rRr6=+73r*mWqxupuuQ!scKx7re?ty9hyCERO7Hw%B%`o zsd`SKVc~=dr>D^rEICcl0O?AO0)c+WQi7&;kP>)m_WA3@r;Z-lzi0p9lf@S@l`7Eh z2~S=91_&gmgv61r{RjkFw-RESRY4KxlT;SokS5PMT~9`%iZC8uzjDPV>kb93%B+C2 zfZy*EGB8J-rpVs+)>f*1G0aO|P>oK@Ner-?mDryG>Xl22KO2_X{4pV zpoI#J0toY#T&=JbqEAy*_ydG$^3$kDRa;jm)S4Fvy@K?GLKKSG+bOEdH^88UsWyaZ zQJQiQ)EQrLlqm-&2E8OtTUrYYx?2vec%sU>`M7*9B$K&N0rrvnX(f&;6u{gBI;X(1 zz#Ax4D>88TU6MZ!q@)ztP?kNZ@?&JC-%G_a00lpNAGE3JkHDW-WioIKR9VcM6e+hz zP${0O|3Xo5)iV7?c&j8(NnU#6f|i52+>a!Gn%3)AQB)9-dg&o#%GvLKpUDKg&->x|@WkJl)%ISyt+m(M3yVw3s}dar z3loKY{reOAO>FrXz7by(K90jr48EX@2)P6MfXCv~w0!X`khO~=Bs>K$tQe|$7gUy) z7gf}NCQKNeVJ*t5DJo2~m)4Xdnk?hla3r*}prCh^wQ^x;SrMbv=$*j6ysD})RU{$h z6*bn$rg4cgXU$I3UmzhEB#5*lv3Uj6Rp}Ea=CDoy$nblAcYajHCC7U+UHAC^D=ez8 zsJZ|XXOqk?tS%@Az6al(f+{PPq<#(jZuXighJOb<)`|%N|BK@{dm*1*0FR!>2_pb##F>q#SbyZoOs1W~`KjmdM?3eP#OdzzxYMu-jjXnEoabH>I)%{(oD7gT3pFa3S1%cfWYcwt^yv3}iNK}Qj&vg3 zNGj<~29P0SBpFMLB#Y#dsbm(JPYOs0DaXw1#6^~pm1He>lsri`lV`~bWG8u@yiMLC zACQm9XXGpL9XUaMC8xN@or^+xq}^=|ck^%3=P^=b7Lb+bmNiP0o#dTT~%%$jMM0?iUloo1b8vu3Ae zuja7kxaN%Jx<=N9X%n<*+7VidcBZyiYuB#SZq)A3zN`IIdqR6odq=0!#p_aZLv?1| zEZriVQ@2jHRriMOpzfINtgcb7*SFKB=||~v^?CXl{Yw4Q`q%Uy>A%;X)87pW3F;g) zAczl|9aIstENElUt3d~Xz7IMdh~S8% zi1dj05mLm)h<75sjkppS9GM)M5t$cR7r73>P`bXtPl}D|MdNt~cs0-2h z=;UZ)bYb+0=og|ti9Q>nj_DSY5mOMeJm$riPh-x->S9x3EwPJY*T%jcdo=cXTy)%^ zxao0@xGixX#+{B=$0x^I;>+S6iGMr($9Q*}j&0K06t!91W_O$K+cdT9&~|LwqPA<= zzR~tXTX(y}cE)y#+dbCqy>`E~*R=21eo}jT`)%z%ZGWXhY=@B@3OcOm@OFn^5>yF2 z6DB7(6JAL8I-#*+r;etMRUM!1_({hro#H!>-4<}yllF-H6#n$EdE=Rj~x~6oU)^%CeH@g1T&CqRFw}suF=ys^v_3oX! zkMHj4zN`B$Nx@0Ol1h@EN;;C%l$?@0BY9Qwd&w74+NM}iq?BDLr&7aG$D}Sv-JbeG z4_%L8Jr?)a+T**Ps-A;;mh{}x^V>94+K{x;w5@5!dTDzN?^V%jd#|5*hxShIE%e^i z`%ItsJ~@4s^?9$))xO>P&hGnI-y?nHeuMj!^?R}3ul=L@XZ2s!e}Dg*19}c97_eo) z4+Fyn@&oG!?i+YxP}-oPLE8rXJUC|X_`$0N9~$f%GIWS_$nGH*hjt&jVCXYLe;O7$ zY~rwW!#*Fb9X@V&{qPTlH;))HqGrU~Bd(3?J#z8LS4UoWAmxFg2VQ*O?5M7z@h$Qu(F;aDH~RFLE@Se>Y#;OI*luGB$L<(=KD|f!qV(6&ua4_C&N}YhaZMQ`GHNpp zW~wtynQJnS8l#QVjGK+W^IiF3eiwh;G}z=c9W-mr+2+U0KUq3j3M{W!u4fI+s?9o_ z9hyBQdvo@mIX!c%Is3<}#%GOxeEg{iNfRn2yq8OIExC{9{x&gX;*yE~o}`;JanhDa ze^2f|*){pdl$a?GPI-08ovGudJ~H*!X{pm}(+*9Km_B#t|1&y<>Lc9OIlP=bW26c<#!%Kh8^;=a~1!{Py$9=70EL#DjSczOz8P zV8()17kKk>^S0+T=3DZg$-iEZQSem3<-)OrPZVA(8dbER=={P_3pXshP&}&m@#2dm zV@fubTq(^c-CTNOk$KUxi<%baE`E72Et^sHMtM;Ag7Wt(qAM0x9IotC>8Lzbl~%Q~ z>hzKkOP*YE-I{IPQO#A)tKL@=izMl5TdM6L+ZkcButm6QpKgE05#^|Gd@c4ASBvK* zUV6!?aTYiaxw^QPy3W+5*FImz)#cY6s_$06qW)ZisbS|*!_vh|zggCA*@k7em(N(f ze?`X?4J*z*WO``V%J7xel|QW-x$4=6H4m3Qe024|)laXM*A%Y#a&5o08`pZ*6|DR6 zU;Y2J>0fmH!u3ZV8S==sM|F=@Jo@8fV;uP;q2q%AK&{#;uCA0xc%gVPkym+ z(8gzhz|ZP5Yki{`8|ydpDPCKCxxomN%YBcxLr8OcfT3@&AUg39Nqiv&~NvBH~hQ(#~wI#;QKM(e|$Xi_-8*@e)#Id zgcHYpoc80-Kh6E=^v{JqUpQHI^2RU1FP>i;PH9iA`7QFdjlU=SzWt9Lf4p&e$mtKy zWS;r@&nbWYdbZ%~<-e-`@}67qci7(>&v!om%7pYi(3uYG-e=Jj(otT*V*b+_8xdinOC+lLw_HvWF6{Enw-&E0l)cQy}eKH{F? zKJT%6_1;as9=`o@wtR|~Q(Bd0%~Ns#yc~#X;X*=gzKr+7EWBEfmmB8zb8Dpq=YJ0X z=UP6-{x960e=`Ac2(lZ1r9~MB33(G=aszbZV=2+pu|zd+VCx4C`}61Q4AVst^4wU4 zooHLwz~KFV{(K&sz`Xw(Vl@K?B6<3sFj9G5m6qof7xgZ-`jcq3iq}%BYeb}8)s{ ze|yt~J$ue?UU6>Afpc#yW6f0T2Y)(zEElBsx-fi91Ag(`!N>SaMQ{raK)T+Cbt$5;nc*uQt=zVzDeRu@$Af&NP_@VUiKU97LTf*AmFXDtB_S5>I@*8LaBC>_w@seMjB>Q3S1%60KJ=cNyDwaGrgx>tp zF4zU(Nr?!8t$I&i+IZdWaM~RLxOTPRvoE=kMm?9-J4A;;;Ov|r*OOH0t*{C9NJ#4| zlBsW@(-8w)$m>q!MtfVK8=OcQiT}m8ztIOg*YmA zu%!rXu(!$V*TsHi$({s|BE(Z!1|MLxLjg{JI7%KOz zuvfrB*qMV%O_2iUkX^P2Dhsee3dC38vWG#1)NnbHaxfLhme@mtI}Xu)a*2JGLxf2O z3B;y&R_~Dnp0(FxH1m8}7U6kg`c`Xc)S;eBQ!=}x^q6K{&+sR`cIBexwdFH^iL+ic)DlLtC^QxH$b z!N0hiahQy+zr|$Wn@q+`lPM#IH)(m<#KXe~8qQn_50XtL9q%z`@uQfB_0P&S>zRBw z&zo{5K>nZ^eY|E%IrA`*qvNR&do)6Yx$)!SV`d#Na}u1)Jq^pTcp zn9MorWcZrGgBfK9^UY=)rfK4!_I>FXEe~E&I7aEp!`qDg@#`g-7IPnLs*mJY`tUd! zVlLS|jmbQm&CGt~TvHMQ zIc5e@_;?(l87w$mp(UAt30cYLMNhH5G(DAvw~v3+XH#JhN^*%ZS!ns_5`WG6Utyq5P&oC7L~`Yc(dXqb&DC!<+Q71~BC&zInV*NP$xy*On8?ILxuyt+EWCLL ztjEYs5DrKbo+UQ}US@)w(M&WQm}?5d$>dDG3lD@HQ6r=em_ztG81u*|6UiFSe2^!Z ziVrTa6~G6-mPAPuH`NkRblCU82d_!aI>{-5E2%}FRC66Zc=1uE%V`ifi4);f@WCYx zQHq3gnH4^`sLmM!Tr6VIO=>H`|H|vziSo;e|49<-=o1;Fb{uh$i(Lh>0EKrQxI!^- ztzMKR5x$j&QCB?2qMIb?M33YWZOr$oTrNouIjvTSa(x}-t0hS*dL`$R%=f0abRu;y zu|}k|Fh?|&rNwZ(YfG^PXZ<`T(~59B@M~FgtAQeEC>)PGd>(TC211E3xJ&H<_x zuF^v3*!%({=hXg#tkq!kE*1-w)?6){O@LA~waTa?NTkDCM-f0ttyFWcNQ>Zh%1ncx zbGZ}IO`&Lmo~_p5fY13E?+0UhoV7bybOQ&znsyyH1r7n%b zE!NlN=jFk_?6KG-my{3x%7IloC6!2B%!#a0G$i6G7T%zf4MHUdEOk-@+ecBd!bI4i zgG+NFMb0VLJK#Pd%#Z@{S?i@RsHk0j3C;yufviRf5$`x%(l0gAJg1AfmPj1++#DjS zLWYsshF*(mU5~xBrna(wct3Jg+etd|*R7@|x7^%x`}{XjJ53sKbL|_hdSwH)`=_!F zs#N0Dj^F3Sf%x7Xqe><|RsP@DsvkzFx)UFle?^B2&E2HBE#LL&sQl~D?nKT$r=_>$ z^PfHZVBfSMWv`yTqowkX(OrqJ^ZPO!r}+(wUQ4{Hk*<>(D&Mh1K+pIQ;l!t_YSvKS zb+K(Q#vJ^SPlX`$Xaw+mC&q>mIpH{@?xng=(%kuAqtEx(pa|m8f9U(5T?mmmBL;at zBAmDl^Iv^!HWxwM`VXo1<&Fj-Yj!ZTJSNO|)b|p2LBC?`J@H9I)_M z99o5^rr=~Wsj2MAPiBo2#;j&A{x;uZZ193{Hsc;+F>B#oaF3A*9X@Zl>Yi5PT@3wF z^gTx0Sbv=yV8Pukfpe`w-?fz!x5YW5 z@?Uoq1~>dhABs~^7hLO2aSFPk)4ntsNqqWopQh0$)Y&`PuE?o0hPbtTU-;v?H;Kj* zUzZ2>B+<5nPEMk2a4OUMV1@$pE(L@?uYl-%3g~i8>Br?L{bkjY$xtK5{iJ}(yU8?; z$Q`~-p|QjlyrPLgdFU@O)az~bQnegRRdNiP?~0+GE8D8KeX2eze|uVcM*iaq)!`UI zozc`Q|5~Ki5jkeCc9=X+2X$Fj5JW#4p@T6;{M#2nJ@SnW30x>?;?x?g!4RV7qKG{6 z3QWG~fJqllniBJiYu`C=&}qQx)lbUd)OTEJ8%gAeip8u$@j%vW4aJszZtbH+-`Tfd z1dV0DqIU-)N4WFl%qShExy1wi<>}z39o18}`_$`GqBu37S}1rPmgM`T4<32XB5z&l zOu!YYa!`AF>Mq5z&MqJT+zqGlK~V!#uD*$z^PuEFP7JE{DB{WnhYmRM@p%T8aWjG? z%v$!2t79p#pJtCDM-Yhk`@UE~cHlh~ixfJT#vysewC(@e_sNScjo^9cjZbzoXccDj z!>2Kg_mGV@ulT`B-3K6Njpf&66>UDh46nkSx8b)})@blx?X^4L-dM-p zZw>=(UjH9ic7Ms#tUK+Kz27vjnc{|YJp03`gCN|tjo+R6Y&DdF>k$wFYP5pKh8Khl zyj2Do%@l<&;HV9uF#@$JguQ(TWiMR877EDODG8-f0$mhF!x>c<4(PKxuY}Vu^mIki zP>>G00wr-zBsJi<;EVmNFo&K< zUrj6z_ref&Wg+{+{%1799(Ikl;Ee)m;vU$;5{nKvXQD{$RuW^T@>% z8VMwtSb{*s-}lAxoEi4O%N78Z_OT=n>3Aj#!(6s=&-zIk-jnyt-bZI30R{6~(MeQO zc4Xq!H2*6vZGIDS#+NtY8gKp+X=vu-H(>%7OEq|F$Xl6VoGSqLX=W~0%aC50%m#X` z@}f^}{wM=#7XRXvJ)g|Nlua-U%c`$WyfZ`1yECLCC-#>>xdmK4!;~}Dh%`9UH$Ed% z#a5CB+kh@h2#sRTj)^c1o{olbuqO!#a=}=itx*viu<14=n#+LdKc!iZQ_+jF~}f z!N5pF0P``P8C`vNaNsq@#6YtdYJqW#wJ7f}Gtfah*m;aximm!;RfvFP^}Zm2B?N(u#+d8I^f83uyx2~7{M|TEz6LXvRuPY zvvkuL1S0;vFIJSD$W&vIo8aC+Rs!>o9@&3*N1aCWta|Iyoy)Wevw6)KN}Kl~&1qhF z!bja7)g#44V|ll7Z#;y2`&DKL|5>L&Ml8Rr+#9P=zIvVA8#mXp%-D&0<56~Re8tqP zKZASY=yEnw7=rV;6Tck-;dX2~_S=!QEPuwmAv&ZwyH@l#kefNcTMgS_ieL?xcLPjA zq&9_+QeYY^+jGD)uyEzx5NSC~gHa7I4M^)Q!!*#d9wq_ODJihlwHKzrQsLUWxHlkw z4wfM*_Xb9*g%JR_{sEl-O>uaM#Go_9H6!O2BkM*J*^Sg(=_(TkSdjUM=t6?-gb@f% z_B>#i^$5cx<=XJKujig4l<#e5Cab4 zHi1O0S0iiadjxyVNY4$sP8*_)a0lyEkuQ1zTzaj3$t#+Z?jN=;pZ+M41*I*AI}5iB z5(EzJsfdC}u1fniMPsi=kDa2q`MTgF>IJ zER0n|9jIo}svuTZvn{bY5a(%?A}CwL1Sm9CQ{)Y(gjI!7#2(}U4(w3{IBvU;L>(eR z4Memi2sK2xNa5QqQ@axxg2T!LI*f@I%;F$~UP_CsS{6GcXtQB7SwuHlhM7neDpc24 z$qgcbiR@KO#Prx<9{zG16rxlYg?byURwKE==x9%E=x4`KE<^T02SRZCJ^_1OIiOjK zXH<)Rmr~z$)J9RJ-iaM@qOi+Uq2DcqYcB)$u@){%f2bTq73kGbrRs~KDjPN$Tf z^*`7QQlqlTLPfnwLvbb}5H1j{JraibbSM+EWBCO-3lFrbW{*pR9p6Nyaf5Av0k5vZKBw4hf zh@PzG6XhQ>9Y>aqu@x@MC2(ZZk$F&peDc+XT(A)#;iWWATx|tm)gLreY>S7kA%jRmvi2`KfM8VBQH4mgE7bl9H zqZT+ND{mooW45f}V4T|o3(ka&#+l||+;l8XnbCNhX*1!Cna0eKLG&&elW8<&j`=+l z%nb01gIf-@IurpyC3>8aearz4hP>3P}98;tM4pYGBXipvJC*i~% zLV7?)Lh!?V0v7~MXvRSX^w%k+IcEb766))4Vs)rVF;(byQ{hUL;6Bm9W%-5Tm<%$< z#2Q?v2eDysj4Y1f7+aVioyfO12~pgMqjIt`U`uN&4zbR~swXx`u$`3s%ZW0ZTIQI! zl8A>?4RcIE?T~F(u^Gg!a>$~Uogv;{X-BoFb{uaQq*oJe8D2)%aHf^o(07% zY9fz34NQ?H9)R`6>2x{IM^DU0Bzv zkq}Ns-9Ua*1!)5-JNz*k(wy_az6G2eJsA$E>a&1!7P?X+<{P>Z!iRMbay5z&#RKhfR;+0r3USzGi07%bDC*2Y7Kcfp zbfbR+Eq{zr#K8Vc(G$5d%j|w{mF|lONIyz|G;$xLe`g2!t_coER|P>D_8g?13Pq~I z9xT#Elje}scN-heU)ei?{$RUMYwyuzycvEV+b*Jcjw^IS@Jg zOyXy@QGy9rs7#7XXlIxbt?fWu2y1On)nff9V|bK+BG$FVNGzXDQ06~Jd+t%F79hgw3%I&evU`ECbK4ErkQAE%xFuS|59$rvHrO#&jrj8mkUrJ zb_Ky?;mod9z%CkvmPJ;>W)iuK-Bk?p5_YrpVHtqo`uvw~zJpBe-Ov$$fUJhXKCl#y>p 图片上传 - +
- +
- - - + + + +
- - - +
@@ -250,7 +246,8 @@ a{