+
+
+
+```
+
+### 4. 通信
+因为 `proload.js` 是 `electron` 的 `renderer` 进程的,所以如果需要使用部分 `main` 进程的能力,则需要使用通信机制:
+```js
+// main process
+ipcMain.on('msg-trigger', async (event, arg) => {
+ const window = arg.winId ? BrowserWindow.fromId(arg.winId) : mainWindow
+ const operators = arg.type.split('.');
+ let fn = Api;
+ operators.forEach((op) => {
+ fn = fn[op];
+ });
+ const data = await fn(arg, window);
+ event.sender.send(`msg-back-${arg.type}`, data);
+});
+
+// renderer process
+ipcRenderer.send('msg-trigger', {
+ type: 'getPath',
+ name,
+});
+ipcRenderer.on(`msg-back-getPath`, (e, result) => {
+ console.log(result)
+});
+```
+
+## 插件加载原理
+### rubick 使用插件
+首先我们需要实现一个插件,必须要有个 `plugin.json`,这玩意就是用来告诉 `rubick` 插件的信息。
+```json
+{
+ "pluginName": "helloWorld",
+ "description": "我的第一个uTools插件",
+ "main": "index.html",
+ "version": "0.0.1",
+ "logo": "logo.png",
+ "features": [
+ {
+ "code": "hello",
+ "explain": "hello world",
+ "cmds":["hello", "你好"]
+ }
+ ]
+}
+```
+接下来是将写好的插件用 `rubick` 跑起来,复制 `plugin.json` 到 `rubick` 搜索框即可,所以当 `rubick` 检测到输入框内执行
+`ctrl/command + c` 时,读取剪切板内容,如果剪切板复制的是文件类型的 `plugin.json`,那么就将构造插件的 `pluginConfig` 配置文件,用于后续搜索
+时使用。
+
+```js
+// 监听 input change
+// 读取剪切板内容
+const fileUrl = clipboard.read('public.file-url').replace('file://', '');
+// 复制文件
+if (fileUrl && value === 'plugin.json') {
+ // 读取 plugin.json 配置
+ const config = JSON.parse(fs.readFileSync(fileUrl, 'utf-8'));
+ const pluginConfig = {
+ ...config,
+ // index.html 文件位置,用于webview加载
+ sourceFile: path.join(fileUrl, `../${config.main || 'index.html'}`),
+ id: uuidv4(),
+ type: 'dev',
+ icon: 'image://' + path.join(fileUrl, `../${config.logo}`),
+ subType: (() => {
+ if (config.main) {
+ return ''
+ }
+ return 'template';
+ })()
+ };
+}
+```
+实现效果如下:
+
+
+
+
+### rubick 内搜索插件原理
+
+接下来就是进行命令搜索插件:
+
+
+
+
+实现这个功能其实也就是对之前存储的`pluginConfig`的里面的 `features` 进行遍历,找到相应的 `cmd` 后进行下拉框展示即可。
+
+```js
+state.devPlugins.forEach((plugin) => {
+ // dev 插件未开启
+ if (plugin.type === 'dev' && !plugin.status) return;
+ const feature = plugin.features;
+ feature.forEach((fe) => {
+ // fe.cmds: 所有插件的命令; value: 当前输入框内搜索的名称
+ const cmds = searchKeyValues(fe.cmds, value);
+ options = [
+ ...options,
+ ...cmds.map((cmd) => ({
+ name: cmd,
+ value: 'plugin',
+ icon: plugin.sourceFile ? 'image://' + path.join(plugin.sourceFile, `../${plugin.logo}`) : plugin.logo,
+ desc: fe.explain,
+ type: plugin.type,
+ click: (router) => {
+ // 跳转到指定插件页面
+ actions.openPlugin({ commit }, { cmd, plugin, feature: fe, router });
+ }
+ }))
+ ];
+ });
+});
+```
+
+当点击 input 内插件时,需要跳转到插件 `webview` 加载页面:
+
+```js
+// actions.openPlugin
+router.push({
+ path: '/plugin',
+ query: {
+ ...plugin,
+ _modify: Date.now(),
+ detail: JSON.stringify(feature)
+ }
+});
+```
+
+
+
+本页写的插件demo已上传 [github](https://github.com/clouDr-f2e/rubick-plugin-demo)
diff --git a/src/renderer/App.vue b/src/renderer/App.vue
index 3a83b14..4d8fc88 100644
--- a/src/renderer/App.vue
+++ b/src/renderer/App.vue
@@ -39,11 +39,15 @@
class="icon-more"
type="more"
/>
-
![]()
+
+
+
+
+
![]()
+
@@ -163,7 +167,18 @@ export default {
feature.forEach((fe) => {
const cmd = searchKeyValues(fe.cmds, args)[0];
const systemPlugin = fileLists.filter(
- (plugin) => plugin.name.indexOf(args) >= 0
+ (plugin) => {
+ let has = false;
+ plugin.keyWords.some(keyWord => {
+ if (keyWord.toLocaleUpperCase().indexOf(args.toLocaleUpperCase()) >= 0) {
+ has = keyWord;
+ plugin.name = keyWord;
+ return true;
+ }
+ return false;
+ });
+ return has;
+ }
)[0];
if (cmd) {
config = {
@@ -325,6 +340,7 @@ export default {
"searchValue",
"subPlaceHolder",
"pluginInfo",
+ "pluginLoading",
]),
showOptions() {
// 有选项值,且不在显示主页
@@ -449,5 +465,10 @@ export default {
font-weight: bold;
cursor: pointer;
}
+ .loading {
+ position:absolute;
+ top: 0;
+ left: 0;
+ }
}
diff --git a/src/renderer/pages/plugins/index.vue b/src/renderer/pages/plugins/index.vue
index 6f4f48e..04af1ef 100644
--- a/src/renderer/pages/plugins/index.vue
+++ b/src/renderer/pages/plugins/index.vue
@@ -1,6 +1,11 @@
-
+
@@ -29,6 +34,14 @@ export default {
this.webview.addEventListener('dom-ready', () => {
this.webview.send('onPluginReady', this.pluginInfo);
this.webview.send('onPluginEnter', this.pluginInfo);
+ this.commonUpdate({
+ pluginLoading: true,
+ });
+ });
+ this.webview.addEventListener('did-finish-load', () => {
+ this.commonUpdate({
+ pluginLoading: false,
+ });
});
this.setSubPlaceHolder('Hi, Rubick');
this.webview.addEventListener('ipc-message', (event) => {
@@ -83,10 +96,6 @@ export default {
methods: {
...mapMutations('main', ['setSubPlaceHolder', 'commonUpdate']),
},
- beforeRouteUpdate() {
- this.path = `File://${this.pluginInfo.sourceFile}`;
- this.webview.send('onPluginEnter', this.pluginInfo);
- },
beforeDestroy() {
const webview = document.querySelector('webview');
webview && webview.send('onPluginOut', this.pluginInfo)
@@ -97,10 +106,13 @@ export default {
return (this.devPlugins.filter(plugin => plugin.name === this.pluginInfo.name)[0] || {}).features
},
path() {
+ this.$nextTick(() => {
+ this.webview && this.webview.send('onPluginEnter', this.pluginInfo);
+ });
return `File://${this.pluginInfo.sourceFile}`
},
templatePath() {
- return `File://${path.join(__static, './plugins/tpl/index.html')}?code=${JSON.parse(this.pluginInfo.detail).code}&targetFile=${encodeURIComponent(this.pluginInfo.sourceFile)}&preloadPath=${this.pluginInfo.preload}`;
+ return `File://${path.join(__static, './plugins/tpl/index.html')}?code=${this.pluginInfo.detail.code}&targetFile=${encodeURIComponent(this.pluginInfo.sourceFile)}&preloadPath=${this.pluginInfo.preload}`;
}
}
}
diff --git a/src/renderer/store/modules/main.js b/src/renderer/store/modules/main.js
index 252ab97..c55eb81 100644
--- a/src/renderer/store/modules/main.js
+++ b/src/renderer/store/modules/main.js
@@ -22,9 +22,9 @@ const state = {
searchValue: '',
devPlugins: mergePlugins(sysFile.getUserPlugins() || []),
subPlaceHolder: '',
+ pluginLoading: true,
pluginInfo: (() => {
try {
- console.log(window.pluginInfo);
return window.pluginInfo || {};
} catch (e) {}
})()
diff --git a/static/preload.js b/static/preload.js
index ffad797..b7d329b 100644
--- a/static/preload.js
+++ b/static/preload.js
@@ -252,6 +252,10 @@ window.rubick = {
isWindows() {
return os.type() === 'Windows_NT';
},
+
+ shellOpenPath(path) {
+ shell.openPath(path)
+ }
}
const preloadPath = getQueryVariable('preloadPath') || './preload.js';
From 39422860d7f2475c9560f97f1a263254dd1b0657 Mon Sep 17 00:00:00 2001
From: muwoo <2424880409@qq.com>
Date: Tue, 17 Aug 2021 17:38:44 +0800
Subject: [PATCH 2/2] =?UTF-8?q?ref:=20=E8=B6=85=E7=BA=A7=E9=9D=A2=E6=9D=BF?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/common/listener.js | 4 ++++
static/plugins/superPanel/assets/logo.png | Bin 8013 -> 15361 bytes
static/plugins/superPanel/index.html | 4 ++--
static/plugins/superPanel/index.js | 2 ++
4 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/main/common/listener.js b/src/main/common/listener.js
index 1ede511..a832123 100644
--- a/src/main/common/listener.js
+++ b/src/main/common/listener.js
@@ -215,6 +215,10 @@ class Listener {
});
const pos = this.getPos(robot.getMousePos());
win.setPosition(parseInt(pos.x), parseInt(pos.y));
+ win.setAlwaysOnTop(true);
+ win.setVisibleOnAllWorkspaces(true, {visibleOnFullScreen: true});
+ win.focus();
+ win.setVisibleOnAllWorkspaces(false, {visibleOnFullScreen: true});
win.show();
});
}
diff --git a/static/plugins/superPanel/assets/logo.png b/static/plugins/superPanel/assets/logo.png
index 5373de3fd364cf516d057605d38f26dc010ee007..65efaa3d8b9aca03a074eb439439d13a13496798 100644
GIT binary patch
literal 15361
zcmcIr^;aBS51w7z-EEN~#S4@I1r{p~#kIH=m*TQ$u@-A_cZ$0^rN!Od-Jv*q`~DH%
zIeX6R{E#R2K9gjUOm6r`C21^la&!Oyuw-Q
MA8=OT;$?p#!*#ewn>
z%6$NU0J4%|>KF!DD(|3P5PMh2ph_waLUmJ-bspqKVeh}kgOekWG>`RjL|8Vr-
z8)_eEToElXmo`4=+b5m8A{A3Mt0>0txfawg2)G49uW;FW^x?s@eyEzKMa_P3+b83z
zWh2jS#^uP7@TvEJ_X^2JW@SL)7tLKDh}D)yN+Cau?G;UZF&+RTtI{%dRNE@H@-56b;TnkON)O
z-Hz}6kvLn4A!P|r=_N($lfnH^fX)TTolaZ%i?-!_-&Re3Usi)~ESGitL^+sm9XXm*
z6_F%@a7muMt`<|DG9v7ke%bLOhbSNLV%D#7X3q0WLZlJz%#Ly8LS3)7pIsdzyGd@DjgBHyrAxS!tv@}fT!34r5Z>R)ek8Ho@E
z_axm3AuiO_nA@>0)k)pVTsRa)y=hz32`@t)#|XST4O4$iAITtXSZC6JvH+{y8k{~T
zo!mo7h&l8;?&P)ZI|jygu?6b&YIIiCTF#iAt005&{=WpS`%YNDA4lekQU>v|{=ETb
z_N<8*=@R4K^A+l^RE&iGYZYe!GCSp8nh56Jp(*^~8tj*xDqK_=KV%mbWNuLyKwGoy
z+)()@p}dff`Rim!H5Ac+X{_#
z6-aX`Yx$hiXklvF19CA-$*=5g&g$PEu`By8)=BE^O6oR^q_f6Ljg09C>A0RO_1FB6
z?~ngnnESqr_?@CiKb7G5zY90pLRNu#tx9X-gDSud{OYlEg`d+qaoc|iSJi(mJ$9~9JCYh3Q>k1sD^?e
zaR4`j6q4+P1jrWqL!juD47dakzL;!;a9n1*;3yQa(3J}zdr@)RKW}ce59@zbK%Bmg
z4W67hmqB%N#gb9_FjpvH&+5j?L82;Z01BKMs?n^$Fh_+Ck@d@!b=w?Qp#q{v8&C%H
z;8bV;A}-g0P;I;nmT`Uug&Q&J4vVkHS?QN
zD8v^U2%Jfwbc7r-BN-92I-8T~ovXph5zjNA_83~iej_vy2xukarG|?F*8BUYBiWwj|3_)TStdFqKR4HDmlHiW6`Ahl48C
znB_o(XchWoeQ%p%Xf1KAWD1OhKwNAf3~(re%#4vXSiyRkWjK%kR6K!+g-?#!oRq
zO&F8$vb+lcy|zZCyUvo~f#k7v)Yy@dH?n}sIg$8(0F0l--mATA??>uJst=cueOPM(
zw7B-_fc;DF#bi671e{MO$)%OnAZLvOivI$A;IgXVBExWKCu`+
zCTU~CQgD6s>X$dXH|a8A!DA#XC`ox3|6V!mS#o|rhv&1Fca21wRnUgHgbcf
z61#szw^lIK)mZoKJ9x7vq%tFoVQIJ=KG?kBo|&+6Fga4h?-}Un=f>(^BdstWL=ht%
zkOb$`1-xO0|GtaR1vrAX^~Okpa0i~qx~yB9m2LQrmqwxQLNw<
z%L_Tt(_1Kk&|a0Fnl{%yC^$;b>Vl8PoBezI(HMHxXM^E!hHW!sDy3c&ka}FPzP5G=
zgR%O=1aE`+Rh&!~8qs>$o}uoy=U04thSf+Q_We5T@-C;U(C!O*uF=B&8iO-kYNokt
zLg@5TiZMil8ebH+O)6b6VBhP0WMkg?TSSK0{3>^q1#3FjKd(TFRz24+k68R_gGF3C
zlFn)xR*CiBf`-1f689^4wShez>r*7OHxNVL2S8D_oN>?$sPOs&RCuOlt?#@LBnJ46
zc0~-0J$?%YUlq-6%tbSV=HX-yIstEiTLQUFjJ>h>?`e{*@dm{Jb;p-MCrrWQE++i(
zG5u51tZX(TTbsAw76BGRhXO-czR>GWUyXfdv)@k*x{cu9C!!|P1Hcd#L>GwM8NVrC
z*{d=`nzVs$%x*f@_*{Wb-6D0+T}nnfQ#)#$(WdQlz^J@j;J3N_Q}Uw)2lo39pWBH4
z5Wk~MVKL%^jwxB6J|{2^ryQrNhfHn~L8n_&a%s0Q=>+Rz9*{g-7-BH_D6-L8%++cq
znOceH?|lP4Jyd*X{Hjba2azS$6g%7d$6tk>wabC%@y~16FVE>e5*Kxnu2$J!
zuFx1nzUcYjSeBNjaJGSjP%t$sL8q4!IQ)4xU33++oIjN#5cf2$M0
zD52^fs>zWo$F{fLNcQ@hUhLZjnQxd!s#V0^*!PXQN_d#(++gQb>{IS~@iPtAtJ0yb
z5k8X9DuBFwnMgpmf99c_-`m&V^Os&7p?CJkKjue4%WqU-ZMg=@b{xRAe%<|RqVGm3
zzIS|iObwaQ;cKu+>Z=`G8{=oH>62zOcdV!+jy!s6q~YQ5GA(>^+U;~s8?rq&LbGN#
zwl!+K!I$X;(NwxM0I3fz3u0H=Gp!YEeBL-nmruc`$ldN~;cVGdO|VMvjoK+QroZFt
z?QKI@sqV1ZT}>P*p{Uck``SUJ-+ul#qCM3O4LPUXUqo*`*dtN=O{CKXh1Eo<&GJuX
zexD}<&SX6ogw9z)y=bM2whO4qsa?O!U+g9?0x|jkvHs>znK#eTMxVC$P3>tmF=n+4
z1ccaZP?iEmk&%~wW|ZstIg)E4C;7R(I$rn
zByz1QwpL#SoaibFRZV(5ta2AXtkyhxXL-{F@OfBzX(DN&yB-JYD3ykeO=T(?8O
zXawZ$!LCf}IGv8-IHxU_f39LM7)KX%ynIU6oC$`YmtRg~BuHFh3e`?{kmbOPFgnCw~&Q@p~u
z$LSlQsF}9$Z0*$bdia*Z=EdjwZ~AXEmaaUAI$5G$ir0E(G(EA1K7$4JtLgeFJicOn
z{B97TU-8=qu3a_%wvepYPNk{^f1F>3E=zwGKX|ogZSl2UDHEuqcu<4(D>~WnGsU;g
z(s(k0h((hbN8H#Ss=lIU-FF~T>e~u$2bg`z#aqh8zSt`W_+&EeAa!tcdR#;-O7VDW
zh%Iitd5EeDsxY_iVZdm%1(;E0UHs7KoLcqdIth?I@-^HGg8lSth0VJpP1W8^@uW%G
zLTlJCqwNi*`TGf^R~ju-gxjH<<{W3G^}x>-BKo#cBs
z4s+bJnxnUYB!dSXm0L)z)7&RRF5|)GiaEi1MEqePx!qF=hw6W2I#2$qP4+Kczb<#N
z(>>1xKco6lg!+$AsD=Fryc?v9R2FB8RTG~yar}Z
zYn{0A_Y3W;359DoHkE8?|0!d}Fz1R#!g5aI8*oudO&upvSsRj4la1y#jr3Kifen-zH2*E$=*Y+V+b}t!f$di3dON+;a%R9npPk<1A+H-{u`3>(V
z2i_7H2=_u22t4}+``H7E$oOiJOgdR>G5$PDrGG_+DrIa{__X1^g!{N;BLD!hv7>TE
z7_K56SASUCcuyPQ;mt*!>_XsR(28x6;3;19=CP=HIXDWj?`^q=|LP&O)6-O94n0F}
zELZS$9VO~u7jz{TfL@6Eo$Tb0^igR6bOlry%6DR~#`}=zrw#+%6PQvww+h%-R}S5!
zmyYY$&|ymVzb$kqI0UcKs2p7~Y(M~X4`=wb;3;eq9g6SIKU?i95zb#?`btQMC7MKC
zl47ffecC%J^``8_lRYwr>Uc=rf5>V0QUwU{BmwSDu0m+YWizrADd~{DS%lh9=l6)`zwXVf_?Z@O0@LHZxU?pS#fr8HTxi+I$NMcK=Qb%7<^Hbk@S8RXWipG9s@;?sJ=E>JI1VZf4z`#1bfdJ<&
z^ZW=0*x7<9asqZPJB9i0mxe#EN8+%wZhCp6ZuM{8=`eL{k*oCvx=U)u`e^?;C~7y&
za8d;cGJZGril?5u`qm8Mmsb(>G;2dfDAjq@w6xLoi7qnYI?4@hUwXjC#U_1Ub9!
zGs~LIIHzgPo+tS#PZ%N=rBQ8w!sN3Sn?gtt*_`R5!||K)si6Dd9T*-NF(aRT)(>;s
zOQt4KzptOS5g-idQQ$)ieC&I$2AGQfy1Mf+BnF9(D1mDK2`hr0t5;B?ovVd8S@;Oh
zD$G9;q7XQkS{TLS6o5hm5%PO{tlgz3H2^gZnp@e!7glj@nanK<$G|M!R5hKRdE@;*}H!a6cM^Sok`Ys1DLX`;V0cTwQwrAPb<
zvJ!+{*7zQ^rqKJ$FvXzGQmh-KcMBob$k-iY?YvT^bdbILU|+yJ^Lk<-`YSFefDi;k
zfgHst8(;gaOlat8KeKW99~`d89%IV(ZwJELPUUC_-d?4ELK$Kg9RewVRt^Tz+HKN%
z<}I)I-{ndTn|#gY<=48QK5NPThlxq;SE7ByclA|^Erjs
za~E;V$asQ)zsv!tt)D6_Fg)+BEkp0mBVGJrj@AAUb%tHo#ai&}x$bv}Z!R^8WQC?nwxig$7gA5*Tp+84$KpC5kCMJk9|g4%
zXgq^vQwby)W-hMh#q-bu@=Bkti$41>Uo8o0_a&a>(tx39M(64o{0Lo44&jB7*I*nThKhdaYp@-aqAr$9)@+(9HxM
zaOX$@)tyNF-3WVS{V!Zad0~X0{h&eu^ho;G{%+BL;(Z!2*L(wx?B3|ht*PFW@dFWX
z>9?r&Jad=@U;5MoF~ZY3BnZau&;*XsWk|ipxIHat%6Z8NoUI_t`MpLO4NaK^M@Lqw
zZ#NE46;EnF|7Lx|m`(`VFr_FK5bLA_xa$W>_2+#
zcG;U$x5jLt)bx8t5Nw3Z@0|;vzKsS*y=$LmR~*ceTFh!5?Pd|9*ycam)EM*_(O3vp
zJFPPp?vSpF%#fAW>p1tvOQ
zj^v@R@s;n~11O*|by&rJ(>lewPsqMr2eqFJV+6(O#fME)H+>;zg&Dv%JGJKNUeio8
zO8vvzYNM4P>f7-}-TIUq=@x6k)|KYCyey0iW0i0CrV8Y_lPL{do0-x$fp78$1it)(
zWTD+TwiHPdQlkcN4C&abYvuEGTo`ZTB?3mJ=E_}CF%7qN2TjzERA*|q
z>_Q12fO{nBU~lpcE(eKQ)_I;8!6zhkL%aD7?@!SD0=f>Dtv=A0JqkKL6mvF?YjQJK
za3mqD{S{~P|3w;*`hEdPM%IFp0U2B$4b1J0Tol?Y2+Mi*Gk5wg(?HfeqQtp7wJDPf
zJ%c8X3FS8qkO~RtiEyfb!PRxXooAXUDKC(g8?TF=hay5Z|&!q-6S&TRFDcV?@3xjbb>Q?ifXoH
z0uLS1iC3hfeyNC$4Ms**_Q`q>YYZgs8d
z20g9UCZ&A@hMKgWr_2w$3LS+9ylxX9503cIhRmbCs8EWeRvyMadbUK7004F2ohuXN4($Uf2bf3pg#QY3vws-w!k-*?M|czW}3*ea^4K7eq@wDC`EH!to2`fm8f)g-UWj7SMhfOy80bub{07Bi}opysa=67_hn>iJj
zLm@yOae;(OTf#CmyO3&Ma^=6<;iKXow8aV$TtXXEwwjM}_r!vwh8r6?$J9nNAy$3@
zIV$>z%upHLu;2A*IxPj-$*o%O2R5Ds=jZS2tQC#nHs?B*eWMcq8#Y-rn04Ocz|QMO
z?mK*XJW_rV9C*nlXd6j
zdAn_Pr#IN-!3cA8vq0~Z0lS@o0i!-9$t3NwU#vXs8qL%dyixUfynkZ4FEOj<(VW5I
zClYeu0pSng?iqgd6m&!ghAuZsp;DuPo-aOb$rlF44sAHr2_5-qC4T~gu+tC~@DM0T
zL8$ndgeG^3yj-XVSIC$cS84Hq31_=>5CFPqzgeLox_Or|c1NJap7L3HLjv~iru!l{
zpK|FvF=dP|WpQF9mLmgC%rzb?ZTB%vO6^qZp6CcWc!N+C_qKFb4xWP$Q5xwT&
z4}MX-6K>dI`LPuh;?LNnVI|PJagf%LuYc%U-Jgy}!w<$a;s5%175!Z{0M6#esC%>%
z6@=j%8=Za}b;L^$N4RHvkJhuyE^e{fN5Cdgz}F>ZjZWuz-Tgr8=yxz6F}SLVjRx4;
zYQ9=uQqf_A2YL-9Tkz##h%Wrm`O+EEFGsLB~_gxntb2Lr%_ut1L{SKm;G
zG{L)V)D51&)q3QQr=^_0EG?Sz>oy99TvLk~1f_2PV8xKZHggd~R+IokIy%4h`tdvM
zB7%*YxEPhyFPLv-=1ws)!wB3Nr+i+r?GTI0)juAbZ5HeDolC)Pf05D$wYCtp!6phM
zr7lYUTGjn@yZ*MYD$J(|0|3MwcM*u=I!Qztr9(F|dL&zJr!NWzX-m=%MJP>BCao?X
z%3fTKD8`h(-yz0b&VFA50E&wLW&yNFKHur_H7`xrBi-}zn~q|MEE7S7$)eeX#$uhG
z&8&M4qF?K
ziHKtzh=66!1HlnO5@=u)22IO~Z+P=pGz=e`yG3FU(A4$(1$dn}@{KXsP`1O>kCoY2
zL~hOQPTLRADf1UZDZj&9&l8P{(4Klq_U6PBw0z7iZTx52VBQ~+RlJOuHD8g?ar~w~
zhT`b(gMK7)*oQey<6Ytm#SUkE(AX70?$G0|KD&Pja>AEoR$!U;{CJe7+@a~alZuOP#)r_3QAPmrz0k;I-n
z3l^z;w7%(A1nXNyTW0NTu8Em;Po^)plvZ82`8yvG|f9q+8-h=?O0KNoyhK!5cBvTmVA&K+6a^WP^o>oU`CA#~jF&k(c<5mb(BtqR
z>-^+b`?y~*BN&i_bE@hTuHPJ5Vm(osSnof}hXmdAd%=)tZ-5T~{0cDleMW~iuu(qV
zF^#b~bcgAPUzR!eqOXii7iy}fo+L2b;alaE0J?|LgR2HKM!xz>Y#*YR_@Ry+*!(4%+?xf?OK{uRJwCV*-E5QO1ww*+fZUh-2Cw6hd}o
zeJ6%O@8SjmWuG;H=Dua>oEXJ>BKyCps9lR3UL->#|5@*rY`^gn(?{*rPSt%QK*2y<
zdid|2$l-mZhRh){*Pk~!e!vt14IB>*Hu_Bg#(oAqmE`hP9=@wiMVw#$
zNEz0!rCp5j%kQ)J?@Vs8W|EVx8o3>s45V!Rbv%;ePhZ$h2}oq%Xt~6qyLbBQDC%y>QQaWn(l?CYF
zvJ`+BLNZ5ifM7Jp60)q#U5EhdU5My&ZHpdaxcr;pwj+fWLf*J{S2Z}$nFPs^>#|;|)9@brRbw<|}H03vEK7~zMF6TDD{*S&*
zxYp9_bGzTD!5^9@J_c0iiuMn5iEV&v?>u4^={fUUJ+A%1{n!e!f{Q5%4e6ns-v{
z)-D#CG1COMV#yvLSVkdVdIkUHY++>tU@!bFh*^WS#M$7r`Izv!$L_SKFE+vZkcbAQ
z@^{GZV$rK|ia{vl_e0MS4fNU8J(Lc4s4`pUhm3U}O(bsTPcXcs9iKxS&;sJ&W~ny_
z!mLK^TjkTvbk_tE<{asyMo68Jx%N&kpA_bQ0I<5w|GLj*3K2n;`Z$L?Eg!~#r^l~0
zT|QJ}Iowq5=NcwwK1Vsd3x%0om^;U4$~YRh(Ar}v$|(3VAA;j(P=`8hrMi3&Yf2Fw
zP460R+__&^jh;(=(lDR?V)%*vTXN8?w7VfP$xe1#Y9j1+Jk1k<$l=H|mm8zm1U-T+#Wr
zZDn>P*P>Bf3{qvA7(TAw5VxJ%ccvUv!Zu>%zn8BOWLA|FNCNjLEk5}DE9UC+t3&Sj
zT%8%of-JxHL{&WZ)>#kn$nh(!c(~wmBEiI*?A}PEC|%B}Tz|1>xiZ_!zh|`S1mku(
zKTI>XVfMHXUeBGMcS~#4^thH+WLf*7KB>^zDtS-npNeNniTVY9uQAw}os}c7_D>?|
zZkYtjkJV`HlSpIjaRYV>y=!fDUhLcMq)7)v?U8ySb@ut-y+{t%qhPse9(=-F0bSzWO}lx&5kBzDX9pxz;DsZv;b#e^`wf
z)~Zn!X0>oE5b{c_B5i^?wEZkv@zD8SisDPZe!|O@ttkfvxq%CXnSsd8x#;ihJN=LT
zuWAP|0Jz-}LDJN%q&}T7rSM*oG!aH=a`>z6y@RnIZNMmXJRP<&v_(B+#;=d`wWvfN
z-5>5X(RxR;Eug9@v8>E#w_H9i`7J-(UeW+=N$Bv7P}iMN2}@%ip};o
zs~?aDrimJbiX5&+*O4p@tfW8Lcap3$%Xd%E&~DJ9UmrV&s>N6e^nJ;OJ7yb-p%BwT
zXfUtSOd{kNiS+unMt=qLLNbNdMqDJF20;C>@Lj>^o!orWRv6iw`%|LS0~*6M%poZ7
zEO~S;p*f18n}nf2ly|uNJ}va5+1dB@WUzg((|l-N7{%_>v1OAA0?qpF2#%Q`X6;1*
z0;Fsa5PW^}*@Fto3hDLbb?R%`&+IK^7ZQ7;NY~vp)XD?}0Tl-fmMA2d_ikSER@)bL
zlGfO=#!7Tb6-|w
zdBRH&kiKozLuSqX>ZgvGEZ-3qWxFC^r3zYNr+E@%Z~Bi%hD98Uy|{7Y7Ox+|ih|OEh(p
z$+VY~81rQroRKSQ?Ox=Sjfr|GSf4@-~HGCiLWGThCz7kgc8>$k3hUXB_&87{%F$Pme49*3@Rq5q+Ii
z$!Iq4kQ0^_+v_g!gqw-8NR){)TDEV+am?LH&x89p4&*w7mLfe&i8v;8jA&&lz2%twV*NVv*xMFd~R)(dRh}qR|gK7ErP21*qblZZS|;}YiST-uH0pPUpn_22jmd0GQAK)-FJKOA=H>ODJ0`2U?g6zdZ0#*3ZQikX*
zc=HGmrlS?Jrri&xS!^?D=a=l}2uzyGO}|M{f^IEYd(u#k_H~02%9(OrIh-|N_)<|T
z#^x|1L9|(KA6qzjv3}PMJH0OCdUFFMVUFbc55@>yca7C!2$JIjTUpr+Q&5M`1R&ZK
z2Qp|qG0&lf5}aS)+~x=&H_n&S`A4V%wAii7zQveaCs-nGs+JYJBRotW(|FNkM}Gi7
z)LboI{Hixbi@LkQQFW8;m`KI*^QECD12F*OEFvGS>O{+^wF{ObxJH=$uea7_Wf)5#
z#RBL$KQiu&uzYO^Ozyz0aneYLz7$LyT;tjZluQ!-(utac{LkHF=T?+>ZP>+ymK
zzuAua#nI6-xpHkn&Vc2*=lx2&1A>$bBI0(xY<@>HU*}ep;dIh;Ve)gZ0x5g%a*}XM`JLv`*!$QURHuqLA
z(ud~@{zlN04Sd$KpSi;K
zSwe=G>Vu9kk1CFw&V7PP)2&Q})I1)1a1KJZNCc%o?XePAzIXmL
z8+T-Ns{}%w6odD=8IR?`nG!DaM8$NL+Ndl&^7xh_3oPE>y9In2P*H)Z0rM{qXWl?8
z*(oP&Ifjr?p8FFkE(zXD63;8PMXG%C{Db;~@fcV1q>lKEcVA%+z;hU>a;Dq1QQ_pF
zK%gj5XRUcO*tMDU+x{cB!ouv&dP0HjQtK+0!05DnN%Z5^q7=O+dNB1#IVH~u!v^br
zqxu^BTh$n=iXdH&nYsjpg~TusV_K})1$9@1So6?RKEJJ}ZX*tO!Vq?52Yc4xb04Hh
zOXyefDF(Xf&Z1I}xi3Xxrer{a<@(1FCbVLqgrk>JmdKv0sJq*_(5z(n9SvniIr5hC
zd~lYuaw+IizPujoU^Mh?Tqg}wEf*vTEk!Za%`I$stKe$Aaw8+Mgr<|$nFv1+L+aWf
zef&L$Wn;{|(A5(Ch87z;D)X+ggudJLH7CtgE#w##*;(o4RgzbfWv&AeRCbz0Bh4}x
zvIzOnLr72RjOEHlen$SbN0e*iagd>6LG=3KxdMc6gKYdZs0CBEXN?n?7fb&n!S?sY
z;3t?S-1Z$1jT2^_A&}WF+;)ZAs$6Km!tnan5vqeaO5h`3#l44#0@#r>NE*)ym-HKi
z4RvrVjlh5Y4@Hj#(5?x*zfKl&ik;i2qhz_YLG*;geX`_IeHT1~iMPVb>Uzq#JEvi8
zyKvExbjJ(+P3jR1!wL5^_vrtzd;GcQ^i~%>C{*iw=R>Ct2e3oj(oN#+9yCf7Vlacr
zwSUG;UXNu*6ON=4xegy^+bT>JG2QtrcGYsWp?1PtPt~!x$OqG;6Q3(Mx9h^Cr)@$O
z8;pM+BE(h-%DQL_dztutAdah}{1ty3f@~kHsQ0YV>O6nvR=ca^6-*SVsOKgO&FGsO
zMa1*}EB-w=|EHUwt_mh5L5?d`r#jX1;m@GsA|A~qAF85qN;%Wvzqb;lT9!SELBH>U!4qc13L4o4L+q>lzRccGiHg1QfP5TMgmzCO3I
zV02U-IcHtk?}
znHHqy1Kt}aunD_Mcy!1+{Uf;%G`Bw}e5qI&36}=4%+7zLcBS!Eg>ga-dWgSSWPNwF
zVb?`2kDwb%SttM`5eJM{GFWL5TrNgr(O@uIqgLD!eFIlgZ_a%cxQTYl3I-+n(kw(m
zpXR1M;O9~|*R@MaG5sULr_;u;hkpqwFfg@Tww1qk(iO>12sp&30A~AMC${}%;;g8Y
zpl;ZALWgOlsWNG&_I6rSnD-+ws&`Jg1>}90DAT}I^
zC90=86TrG9CJ3mga5ma{r-=S5PT0NDzyRzlE?$Hn^nEE)6ygHp%2;iYAR!E|A17NU
zqk!)e&+3~|88)OOAkB9}E`e!DO7`8=%npBrX
z(ExnA!ih9-KvT=Y*6E9+518da}|#)e2*8~
zX9ZxiCj6%T&^aO9H6aHvr=S9GL#V6^3pq;k_sn+wm!_#{&aM7t@
z={0=^f;4XZXyDCOwAcwWha|LLW9?1DK~2;WPLR_r0<4;6s~bTzOALqy5HqySr~Ijb
zu(q)q{4okz@U@XK3`)i3i#+(kTh+>W)j1vQ4YAeyPc#&G!pf>bT6#7zJ7*EC`ov5z
zXG{oX9cPjMss*!UI+{IXM%)A
zT$`-m4#g~fhAoP9t9gIxekmRLYY!~tve%K}owoaF)@NCC2V)L??ckXN`?;C(Detd&`T
zF5MKD8CJkA9cMn+HM#Zap6nBq*X;x{PP_GZZvp!QJG9AOfIm27E|OZfKhaXl%?fEu
z&UIj7Jufm7^bQ44PbvAB8MiWH?!E!Dca`XsUIr$)1^Y6;Y5c6S09NL6?}$?ZKX9v~
zwH>zqu>LDP(?zzlRR!HhDCeg#C5McX@frir;>{jSV{F6&dV#P|<8TV>%T{ck$8Ak*
zqi6?mS{7`Eb7dVP>~z>D)chAwXC=;?rC4AbG76unDx}`ULX;6zqWf$OvB6-1&?5`XJ$aw1>(LK&hoUxbqDI&~
zema*xR5=(2xycCAnnD->KPO
z#;xFw=$!-}pEXvK@_%A%pzhO2#)%hvparA2RD`f$$#iEi942%@{9jMGqKD9ZdqEjQ_ED0dvxUDd;iJh?N|NQ`MuGnWIs^#A
literal 8013
zcmV-TAF|+yP)bC
z@t^^KPaJ{<02%=J#CzZqZ+?RYXaL|7?}1Oe`3)L?0RT8!S~?mV%PbS}KE%{@b#w-x
zy|tM;h9Nxw0B3mu$+^0&xS^KUp39kp0WcW=;0OR1R#iJN42eMy48jngP_S?DMIsSh
z?bQhYCobm<0APVyrT72i>LCcSJu$z~P2bg}1c18m&6+fgJ9z4Rmo$FTlaq(`
zwHFEnt<@?ARhG9x!QM^>wfgP^I`V60Wxg6gu)}J3i-&*x&ELyiTup6k?M4ECb*ib{
zd)_x<4(!+hhgkTC6$*9_I{K0{0P4cGv9)`<)BX4t>J7-t$%#1k_a8`N{F`1H4Lkd(
zfuN}+m$|rlPnk8>)Y!!2YcjBD3ZKP7htV}bBn5zagW9(15dX({kB*W;F({HqfLt!C
z(5BMjl9!jy{Dr&-3+|=~0#6`WNTve}HI1XCr6r4nK0y!+|8g6fHhFdB?xQ#6md$38
zZBtzeAJ$1L0P4c;+^y&PV`r~?Ml?nylLB!;0Vt9b0;yD5p^Y+`G|A7~GxLu3jX}f@
z3I)3@9cqkh=hB%@Q}~^__KY}s=8`>j+z?Ze0tXEC3ix*n7ahoc+g7H?OWSq5=UZ
z6p27-X=z0eq-9AzE}Y#CFN~&%4A~B*Go2Hc;|0o>cVOMGyIzi;JgqyG^6EqQWC1t}
z0GJOG-+%Tp&e)_;mzo+@{GkX4^7BDS@ds71fB!g=9R4(@EdYSe6G-5{AJx;&%G?D(
zFu2SEQ)kbMSh;RfZz>I}FX58{K)IAjhKXk{S{A%y)tbR%8dp+M0@CxIjj5?AxOP7{-i*WPNVc-|Equ}d
zw6``JhGEDP_=4-U-J#gRLwsrS`O1K{5Z1-seDU?}Qf)3gVQ
zvf$SbR=I8rpYq-OK4kg@rlCXl?XAs*%H>8WR3_S5R{=zWoVc6-0KiZHfaq~lJSlUg
zTqXnjqy&JX82C_B`26Q(3;V(RFbr9fBrH@nl925;Mx|5NjCVt$BTO4NCN=icA$+yf
z8l`y_X#mu~D26Kl`OZyibJO|!me97HBrNR7C}~ox3|#iH
z*$Ox}vK%^U?7eOKkBlRe12IZ3#0+7jMKp~gK
zt(-rLSVoFiEOaOV!*!I;ev{3jbF5JMpJuW63Ke%TiEQBYJkdiH_
zMCuK5;&N14phxe%Mbo}tkkEJFpcY2PCe@leONxs@S_*DTz@NzHVQ)?yJw)t=86*Tw
zTuuQT|N9Rfc6rZ{KWA4be5tf7tttV;N7HmhSo{2Sk8v!{Fm-y>TN
zWdPvh$B3l}fO7%$3Qn9lGiCamMFRUaZHTYCLjB=90L}+K76_cU9Na{{bk!QK?-ng{
zu4(w$@3t|;@3t2K0ra5Kc~h)9;luJp1;VH)BM0LBPj-$)833Z8N=*Q@0bClY9&<}e
z@cp7?FUC)vX4%w?quMxv2|gwW2mm(kIrL=Y*As@<1OPOB?A@|H&HwIg=mrKKogk=5
z_%KtMR4N+VzZJ!iSlOMFp|WBL?7p
z7Co?8a_I9$Dw1I-cL2MfMJ+$%jy*cPeTHn
zYSIK$gb(xa^}6o&`_8TSa75cOkPPMOX+AaxG(CT&e?LEP#m^fnOoYkw5!@l&uyRRZ
z#Iw-$RY5>i_%M&%o7ROr^79=C07&5pB*cWX#_H(23Lw+Sk4+OOcmJUI7w_BwLx$bi
z<$j_gg0P4$nM$_+6h*UKmoF-U);o0wbP>K>E{_<~w~KN!iY8MqrPgUAHgrv(6h7P%
z$7k8&CQtQWzioF<3yO_l
z(~)+%sS^!g=$b&e6AHh4T=uh+0Fxom6#ljQ0Z*)L>~NodCO!UlZlBw`bvwaMobwsknlm&*~g&X0bmLQng$*_yH;<`-MU|3
zY-~iz1G+BZc>C(*qm}b#j#QSZv+(O>6;NGA)#t=eQ}`Xbbc;B8`brZcBX*5Pxa(5r
z%Chn=oI3IT%*ms0xd$IH0KkPOkic^rIz5cg07T8}0|HG0kJ7^z+V)%N)T1=KgdiaQ
z^~;#3qx*MtdH*J^rLu?=77LwRTc1is0Z`Y&fu`^$PMh_3%_cYK-`AK1Ia1D2E|tc=
zcorIaY~S_)Ioa8&030yFh#X}Pqq5wqu5iWyP*)HrwGBMbiCg!6-m>eT2~(ymp)4gG
zUdT*O4SVTFlT%niOA>6pBM84eJLF#i)Gt0
zxrN2+-R^%D+1cCo<67I)rte6-i=t@i(pi%~BqzQnCUlGuK5T%&0H6;D?Ax@B-@NMp
zhOiJ^7}mD7z=}&J1X%IU%NJ!tzj&&2_8{-6Ly9gvBr+%fY72p*las`C+g=fy%~q|c
zZJIX+&8%wW)Kje(_WruzmA~(;uF3?AjErJ%0MG$}t(_gPY{u2Y_w-*DXHOmrIe+Rn
z5f|wePat93Zlb{r0qPQ}joG*=O`r<|Ff5*Flg7Zrq)`QUyslo1IJSQmzEh`9tDRm6
zRc2<88i42s{X@_KK5XJ(neO@Ms}S7rsGj0J@BmbE
ze*rBJXoPtIeFqFlTDbBjQ-wlS?7Cu+O-XSHH1rsZ@C|wh&~)GG-m6dIsBsh15AFI@
zf104BJutT@H{PiWe{_HI68~p~_?Gb(U3(^o1i8(#GBb#vS&TCDXwxPJsR1-Scm@v}
z&7ZwwSrY_7Y*UhX{(HBqC*l#*S`)yrJ>>BN)#VM}47N<0|E+cF8xIAc9`_40-Ng(_
z_y(x~G=)FGdB(f>%U87)=I1pbXirP#J>I=#{Rrj%YX!lp=*U;c5AMMyd=rOSrY@Ys
zbxA^Gaf2*SAEME4dk+Crl3i3dH
zZmz0tGE(^gJ2(DZtKlFnCQ^Lz_uue|-Nd05sY{$~9HbTR#{iy>g<)6k32`4i<>gMp
z4G98+0YFpuE7txJH)YnGE^MR!qO(+PU-aW+}fe
zZ_y?_TLwy{cx7|=04rDWgnQ>hMZoH|pP0gDQRAU8Wp^-6ATPWZ2DejuWpR~Qbioca6N
zsbjz6f~!gRL}pTX`EXEDR(Vd~6Ik%Lfl{BqMw>5cmcZJU@3wK-`Z2uYP6Z>VQ!I
zXs+>xj~Soxqw8ifOD?xooAvN&yPWL*AQ0r_#%x}@qJlFfRpFC?;9ijE`DvegMnk|D
z05pX^dHU@1g)3d`IOgWnM&Tx{1^~dXw9C%QP`x6|&wsgT^)gkwW3peqNng)kfEX!c
zuh-dQMG1I>ubPH~J3*rGvp)Iwu*1YT0V4o_YkY-*eTKMkbLmfOqbJXp)3b3Cm2r=X
ztgB61C>De4%yj(sJ2$U~_;_B$w{FP_ADG%FoAkX_9_kg9Cdy)#0s;b=3dme~$f5UHHlhu)o+9$hH|#
zZiAoz!M$Kn_-O`0P_F=JM&H`twkLkngh?IQY_`7ST`8ZFzwZsWe(@Y`A}0OiYviI0
zg0x&ID5*jd_=SnX|Mkja)NoL50B9O`cDkR4{c7k4Qfqu&>ClJpiL!NuAVeJg?=9v)
zP%i*z3jg=N&L#Bd(~k(0sH=Qyd{3XkuPp>jniJGH0PU^K+%XKnZ?s~uSmM7fd*?ZQ
z_8Ac`mlok4-@h}+^XjD`RMfulm*+x&Y0F0P*dLk^6TPY`SCb}?%Q29aQ}x8~Ua;u-
z>D%?cM66Q))D1k=w#_B(f1m%*%ApPE>(zCk<9SGM?8cv#;zP@~LoM?5t!_=~D3HmJ
z(0l+8Yt4zCJ|SR&v8YY}&~)GG)U{{Awgc`hZEWpuhf2Dhl%zx;m6qk~-MYRBpU30C
za(s_=2ybWKNb9ASHGSFogrL67#rLzGkxI)zR(hJjKydT1FziYlyO+@dfTr+&
zaNWq8H0?VlV`G!LlD(=NbqH82R>t9dJBr`Dj8-i<>tjw(lP0+FND%7bSMF_G7kdYK
z2SC$(Ys;R4@k2+Cqt&{njVcI1Mrx|$)bZc*o&`Q3E^AV~#xw}7KNN&sQ@Whf4S`+(
z&@}KIJb60#%YFlid-Al&iPqnbAJ`q_dF29b3jhF|W3kY~D9VDjm*Xct>IDK61L-+3
zP*hxbPH^LaAjHGJ0N<>l69T;fpc#GZKZ^r%ht2(aD
zbO^587X;sYSb%#g(V+=y4S>4vEv>8yPhPmuxOt0~#w^l#b`iDR#05lCeeFh9l*}VH;o9fQglNXzQQi?^Q$Ic`A
z6K4ap3ZE#I2@s$tz&(qqg5aXBFz{BO5O+q=mnNVLK&8W(Q>KM4clo7HQ!_LDNUxT;
ze2^4IP8`}7UgU^Jcwn*6o>W4uG97~RKKTJYK_Xo1>H`AG061|us%RY3=Pr1?VEO9K
zjjOTlVHhTsh{eeq3kwGXL1>>8mX(zxOdm7Ywn$P`tB9OThv1yA;E8Ww!Ek**KnVc#
z3E$As6TdmMZJXS)&w$Jxz52+8jvhz(
zawBbu0Y%ZwrL!i9lM@s45|NWB5M<;@L19tlIl&np!IQf|wTFN-080No`1OMxz4|5`
z{OfE77OUdLnO;{f#vR+gi-?m`t;}Z3TNJ5rc*!D2Ti;@fkYV*T-O{czsGb4{=S*}$p2{}
zaf{elo#}riU~FVKaaNzyt<~+UIo}`{
z@PU==)~iq8;Zql?JnOHm5$b`P=nl%rbO^SdOnV=nR7PArO*&Q)NdP#>@JjP3-_4C!
z<+_=;tPuFzxcbO_j~h-N2EfK7fn=XHp%K5UZyc@JPI*nG8W;u{?J1Ha_kEOZFCVtpKQx|2~1?@0xNr_@oU*(cDqJJ1NI*>?luA1aIV^
z^t89)EWr?P3cmC(;!Q4##nL(#$jQ!%{BHbk;&?Y{D<7qbX-Uik2%yC!44cIh7I{$ZWG5@m
zK!AWy_@1YK=*wnYuIjXIRe6;Z7sXB()EjCFXyvOH;WKGCC@w{D2vGDtG3E;7Q7iZH
zzbw}R*l=xk5NQRVy|uX;hGE-ahL5A-p^C@-x+0&41-hK8_or0
ztm7%8mTJGDgem|60017WAvHNEc)`^1_--45uzDrti=(J?9!%Tb*1`!>po#GBvz~W@
z9on`dcJC@=g<)9U$X;JSlOrK~(z9Hub)uTSJ|Mt8Bu2<0=i!raI20sjlvM~{cl2`h
ztKjG&7~E3pmGUG2FdK$p2yOwq8yb~l+PDesQzw;{C4Ak#d%5Ke0j|7!$w8`}=fveW
z0|0Kq_xzr{OfWHNRMq)F`P5N^;tPcNxZw%IkTrB%ph&gu>gnqm0{P43uTXKUDqOu#
zEC*Tn|7n414}>qT`wP26>!3En5G4RE-hL3)(%yl%xf)Cv^;MooD6jzt@Z;r6@JkY?
zJngK^+z{5yG5$?QWxli+dZ^U7y0mo#K~?3$;1usu%g;Z+
z=f&%yfCFc<@%pNa`*s%HuesV>F2!s
zOb`U9j5Y^$ZjQR=<%zF7@dpEcBLI8IW|{iE%g>i|0>Gry+I%!X(LQj@Cz6eGo*L!4
zb@zYo0RW<&Kl53)V!=d16+Y26y+9xn$4H-!tMLma%FD`=0b!v6AOOpo=E_sfr}VH4
zR0BYz1%6z=CCGW!9O94#o+LRj!F%O`nL|p8i#0uepx-?_;7}pl+u?sMcy#-+&rJ0%
z@7>$iK`XwWO5|Iwh8}%rgjzvh*~>znum_;|!K46yOFP6|yRl6uy2H9Vzm?dA;e_iIa-D_v~YCVPyqF!Bh(V
zm!6UwG|zb)+{Dnyk&{Xr>LabLnt*IwOQk5_rAdLHP#(8@Cm*+$=xsAdvl8mNgYdVl
z``iPDkI~)7FEsG6-_|uh5KBFnC1b37WCcJb9i0&53S}TiD3feHmVqRul|lFH6orD_
zLoeIGRW(kzLkO3KxcBYwvEL-ET(=?Hiff}X5^3ucp&&2pPxphIhj&$%D~kaD3wQzv
z%=e>w=zstoHIL_)fh{M}-@i*PB^*LX?~{;P2392v*ceQ~I!nw6V45ML#wIz>oSXhd
z*Dh^MOiU|9_m)aa)84*{OZM`(U?24GzUr7ZTRJK6c)&uuKQ+Ot_lKqiZEA{$-Bz@U_a-51&XqGUJ2^?NZ5&=
zB_(btg?$L;PA)uw2K&`ru{+A&XGMO=7AHuGxwhaK#FGEI`&;S6V
z#Y2DP8UUcbj~QJ;0|1N`5B-&E0D%5JW^@S+05DoS^jEF{0Q&ow(IxyJjx$)xpBw7i
P00000NkvXXu0mjfyUiWd
diff --git a/static/plugins/superPanel/index.html b/static/plugins/superPanel/index.html
index 535464a..3643071 100644
--- a/static/plugins/superPanel/index.html
+++ b/static/plugins/superPanel/index.html
@@ -40,8 +40,8 @@
background: #314659;
}
.top .img img {
- width: 22px;
- height: 22px;
+ width: 26px;
+ height: 26px;
}
.top .text {
color: #999;
diff --git a/static/plugins/superPanel/index.js b/static/plugins/superPanel/index.js
index c72243b..8b7148f 100644
--- a/static/plugins/superPanel/index.js
+++ b/static/plugins/superPanel/index.js
@@ -181,6 +181,8 @@ new Vue({
...JSON.parse(res),
src: msg,
});
+ }).catch(() => {
+ this.$set(this.selectData, 'translate', null);
}).finally(() => {
this.loading = false;
})