diff --git a/404.html b/404.html index a978bc72..e1c3b6d3 100644 --- a/404.html +++ b/404.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

404

頁面不存在

看起来你訪問了一個失效的鏈結

- +
跳至主要內容

404

頁面不存在

這裡什麼也沒有

+ diff --git a/article/index.html b/article/index.html index d3fcc4a1..8fb2f25e 100644 --- a/article/index.html +++ b/article/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
代碼筆記

此處是 Ven2s 存放的筆記。

+
跳至主要內容
使用GitHub Actions自動部署前端到伺服器

使用GitHub Actions自動部署前端到伺服器

@@ -96,6 +96,6 @@

开始部署

wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 

Ven2s...大约 5 分鐘Home Network Layoutkmstools
2
3
- + diff --git a/assets/1.html-34e00da5.js b/assets/1.html-3c0f3351.js similarity index 90% rename from assets/1.html-34e00da5.js rename to assets/1.html-3c0f3351.js index 5831a8cc..9a19613f 100644 --- a/assets/1.html-34e00da5.js +++ b/assets/1.html-3c0f3351.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-973a2b21.js";const c={},h=t('

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-5193279e.js";const c={},h=t('

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1.html-a1684c00.js b/assets/1.html-676afadb.js similarity index 90% rename from assets/1.html-a1684c00.js rename to assets/1.html-676afadb.js index 5831a8cc..9a19613f 100644 --- a/assets/1.html-a1684c00.js +++ b/assets/1.html-676afadb.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-973a2b21.js";const c={},h=t('

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-5193279e.js";const c={},h=t('

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1.html-a2e04397.js b/assets/1.html-727349ba.js similarity index 90% rename from assets/1.html-a2e04397.js rename to assets/1.html-727349ba.js index 5831a8cc..9a19613f 100644 --- a/assets/1.html-a2e04397.js +++ b/assets/1.html-727349ba.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-973a2b21.js";const c={},h=t('

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as a,c as r,f as t}from"./app-5193279e.js";const c={},h=t('

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

',5),d=[h];function n(i,o){return a(),r("div",null,d)}const f=e(c,[["render",n],["__file","1.html.vue"]]);export{f as default}; diff --git a/assets/1993.html-5a4229bc.js b/assets/1993.html-453d75dd.js similarity index 71% rename from assets/1993.html-5a4229bc.js rename to assets/1993.html-453d75dd.js index a10331ac..4ccd3345 100644 --- a/assets/1993.html-5a4229bc.js +++ b/assets/1993.html-453d75dd.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-973a2b21.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-5193279e.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; diff --git a/assets/1993.html-8d6c2031.js b/assets/1993.html-b7912761.js similarity index 71% rename from assets/1993.html-8d6c2031.js rename to assets/1993.html-b7912761.js index a10331ac..4ccd3345 100644 --- a/assets/1993.html-8d6c2031.js +++ b/assets/1993.html-b7912761.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-973a2b21.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-5193279e.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; diff --git a/assets/1993.html-13671436.js b/assets/1993.html-bc74c78d.js similarity index 71% rename from assets/1993.html-13671436.js rename to assets/1993.html-bc74c78d.js index a10331ac..4ccd3345 100644 --- a/assets/1993.html-13671436.js +++ b/assets/1993.html-bc74c78d.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-973a2b21.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-5193279e.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","1993.html.vue"]]);export{f as default}; diff --git a/assets/404.html-9e5988c5.js b/assets/404.html-471bc6b0.js similarity index 71% rename from assets/404.html-9e5988c5.js rename to assets/404.html-471bc6b0.js index dfe67f66..3022280e 100644 --- a/assets/404.html-9e5988c5.js +++ b/assets/404.html-471bc6b0.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-973a2b21.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","404.html.vue"]]);export{f as default}; +import{_ as e}from"./plugin-vue_export-helper-c27b6911.js";import{o as t,c}from"./app-5193279e.js";const o={};function r(_,n){return t(),c("div")}const f=e(o,[["render",r],["__file","404.html.vue"]]);export{f as default}; diff --git a/assets/app-5193279e.js b/assets/app-5193279e.js new file mode 100644 index 00000000..8c3c4feb --- /dev/null +++ b/assets/app-5193279e.js @@ -0,0 +1,796 @@ +const e0="modulepreload",t0=function(e){return"/"+e},ql={},v=function(t,n,o){if(!n||n.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(n.map(a=>{if(a=t0(a),a in ql)return;ql[a]=!0;const l=a.endsWith(".css"),i=l?'[rel="stylesheet"]':"";if(!!o)for(let d=r.length-1;d>=0;d--){const p=r[d];if(p.href===a&&(!l||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${a}"]${i}`))return;const c=document.createElement("link");if(c.rel=l?"stylesheet":e0,l||(c.as="script",c.crossOrigin=""),c.href=a,document.head.appendChild(c),l)return new Promise((d,p)=>{c.addEventListener("load",d),c.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${a}`)))})})).then(()=>t()).catch(a=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=a,window.dispatchEvent(l),!l.defaultPrevented)throw a})};function qa(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const ke={},Dn=[],mt=()=>{},n0=()=>!1,o0=/^on[^a-z]/,Ro=e=>o0.test(e),Ga=e=>e.startsWith("onUpdate:"),Be=Object.assign,Wa=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},r0=Object.prototype.hasOwnProperty,ve=(e,t)=>r0.call(e,t),Y=Array.isArray,xn=e=>Oo(e)==="[object Map]",Yn=e=>Oo(e)==="[object Set]",Gl=e=>Oo(e)==="[object Date]",re=e=>typeof e=="function",se=e=>typeof e=="string",Mn=e=>typeof e=="symbol",Ae=e=>e!==null&&typeof e=="object",Ls=e=>(Ae(e)||re(e))&&re(e.then)&&re(e.catch),Ps=Object.prototype.toString,Oo=e=>Ps.call(e),a0=e=>Oo(e).slice(8,-1),Ds=e=>Oo(e)==="[object Object]",Ua=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,vo=qa(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Lr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},l0=/-(\w)/g,ct=Lr(e=>e.replace(l0,(t,n)=>n?n.toUpperCase():"")),i0=/\B([A-Z])/g,Jn=Lr(e=>e.replace(i0,"-$1").toLowerCase()),Bo=Lr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Gr=Lr(e=>e?`on${Bo(e)}`:""),hn=(e,t)=>!Object.is(e,t),pr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},hr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},s0=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let Wl;const ma=()=>Wl||(Wl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Pr(e){if(Y(e)){const t={};for(let n=0;n{if(n){const o=n.split(u0);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Dr(e){let t="";if(se(e))t=e;else if(Y(e))for(let n=0;nmn(n,t))}const e5=e=>se(e)?e:e==null?"":Y(e)||Ae(e)&&(e.toString===Ps||!re(e.toString))?JSON.stringify(e,Cs,2):String(e),Cs=(e,t)=>t&&t.__v_isRef?Cs(e,t.value):xn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,r])=>(n[`${o} =>`]=r,n),{})}:Yn(t)?{[`Set(${t.size})`]:[...t.values()]}:Ae(t)&&!Y(t)&&!Ds(t)?String(t):t;let Qe;class m0{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Qe,!t&&Qe&&(this.index=(Qe.scopes||(Qe.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Qe;try{return Qe=this,t()}finally{Qe=n}}}on(){Qe=this}off(){Qe=this.parent}stop(t){if(this._active){let n,o;for(n=0,o=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Os=e=>(e.w&en)>0,Bs=e=>(e.n&en)>0,b0=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o{(d==="length"||!Mn(d)&&d>=u)&&i.push(c)})}else switch(n!==void 0&&i.push(l.get(n)),t){case"add":Y(e)?Ua(n)&&i.push(l.get("length")):(i.push(l.get(pn)),xn(e)&&i.push(l.get(_a)));break;case"delete":Y(e)||(i.push(l.get(pn)),xn(e)&&i.push(l.get(_a)));break;case"set":xn(e)&&i.push(l.get(pn));break}if(i.length===1)i[0]&&ba(i[0]);else{const u=[];for(const c of i)c&&u.push(...c);ba(Ya(u))}}function ba(e,t){const n=Y(e)?e:[...e];for(const o of n)o.computed&&Kl(o);for(const o of n)o.computed||Kl(o)}function Kl(e,t){(e!==vt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function y0(e,t){var n;return(n=mr.get(e))==null?void 0:n.get(t)}const A0=qa("__proto__,__v_isRef,__isVue"),Ms=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Mn)),Yl=w0();function w0(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=de(this);for(let a=0,l=this.length;a{e[t]=function(...n){Zn();const o=de(this)[t].apply(this,n);return Qn(),o}}),e}function k0(e){const t=de(this);return Ke(t,"has",e),t.hasOwnProperty(e)}class $s{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,o){const r=this._isReadonly,a=this._shallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return a;if(n==="__v_raw"&&o===(r?a?M0:Fs:a?Hs:Ns).get(t))return t;const l=Y(t);if(!r){if(l&&ve(Yl,n))return Reflect.get(Yl,n,o);if(n==="hasOwnProperty")return k0}const i=Reflect.get(t,n,o);return(Mn(n)?Ms.has(n):A0(n))||(r||Ke(t,"get",n),a)?i:Oe(i)?l&&Ua(n)?i:i.value:Ae(i)?r?zt(i):So(i):i}}class zs extends $s{constructor(t=!1){super(!1,t)}set(t,n,o,r){let a=t[n];if($n(a)&&Oe(a)&&!Oe(o))return!1;if(!this._shallow&&(!gr(o)&&!$n(o)&&(a=de(a),o=de(o)),!Y(t)&&Oe(a)&&!Oe(o)))return a.value=o,!0;const l=Y(t)&&Ua(n)?Number(n)e,xr=e=>Reflect.getPrototypeOf(e);function Yo(e,t,n=!1,o=!1){e=e.__v_raw;const r=de(e),a=de(t);n||(hn(t,a)&&Ke(r,"get",t),Ke(r,"get",a));const{has:l}=xr(r),i=o?Za:n?el:Ao;if(l.call(r,t))return i(e.get(t));if(l.call(r,a))return i(e.get(a));e!==r&&e.get(t)}function Jo(e,t=!1){const n=this.__v_raw,o=de(n),r=de(e);return t||(hn(e,r)&&Ke(o,"has",e),Ke(o,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Zo(e,t=!1){return e=e.__v_raw,!t&&Ke(de(e),"iterate",pn),Reflect.get(e,"size",e)}function Jl(e){e=de(e);const t=de(this);return xr(t).has.call(t,e)||(t.add(e),Mt(t,"add",e,e)),this}function Zl(e,t){t=de(t);const n=de(this),{has:o,get:r}=xr(n);let a=o.call(n,e);a||(e=de(e),a=o.call(n,e));const l=r.call(n,e);return n.set(e,t),a?hn(t,l)&&Mt(n,"set",e,t):Mt(n,"add",e,t),this}function Ql(e){const t=de(this),{has:n,get:o}=xr(t);let r=n.call(t,e);r||(e=de(e),r=n.call(t,e)),o&&o.call(t,e);const a=t.delete(e);return r&&Mt(t,"delete",e,void 0),a}function Xl(){const e=de(this),t=e.size!==0,n=e.clear();return t&&Mt(e,"clear",void 0,void 0),n}function Qo(e,t){return function(o,r){const a=this,l=a.__v_raw,i=de(l),u=t?Za:e?el:Ao;return!e&&Ke(i,"iterate",pn),l.forEach((c,d)=>o.call(r,u(c),u(d),a))}}function Xo(e,t,n){return function(...o){const r=this.__v_raw,a=de(r),l=xn(a),i=e==="entries"||e===Symbol.iterator&&l,u=e==="keys"&&l,c=r[e](...o),d=n?Za:t?el:Ao;return!t&&Ke(a,"iterate",u?_a:pn),{next(){const{value:p,done:f}=c.next();return f?{value:p,done:f}:{value:i?[d(p[0]),d(p[1])]:d(p),done:f}},[Symbol.iterator](){return this}}}}function jt(e){return function(...t){return e==="delete"?!1:this}}function D0(){const e={get(a){return Yo(this,a)},get size(){return Zo(this)},has:Jo,add:Jl,set:Zl,delete:Ql,clear:Xl,forEach:Qo(!1,!1)},t={get(a){return Yo(this,a,!1,!0)},get size(){return Zo(this)},has:Jo,add:Jl,set:Zl,delete:Ql,clear:Xl,forEach:Qo(!1,!0)},n={get(a){return Yo(this,a,!0)},get size(){return Zo(this,!0)},has(a){return Jo.call(this,a,!0)},add:jt("add"),set:jt("set"),delete:jt("delete"),clear:jt("clear"),forEach:Qo(!0,!1)},o={get(a){return Yo(this,a,!0,!0)},get size(){return Zo(this,!0)},has(a){return Jo.call(this,a,!0)},add:jt("add"),set:jt("set"),delete:jt("delete"),clear:jt("clear"),forEach:Qo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=Xo(a,!1,!1),n[a]=Xo(a,!0,!1),t[a]=Xo(a,!1,!0),o[a]=Xo(a,!0,!0)}),[e,n,t,o]}const[x0,C0,R0,O0]=D0();function Qa(e,t){const n=t?e?O0:R0:e?C0:x0;return(o,r,a)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(ve(n,r)&&r in o?n:o,r,a)}const B0={get:Qa(!1,!1)},S0={get:Qa(!1,!0)},V0={get:Qa(!0,!1)},Ns=new WeakMap,Hs=new WeakMap,Fs=new WeakMap,M0=new WeakMap;function $0(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function z0(e){return e.__v_skip||!Object.isExtensible(e)?0:$0(a0(e))}function So(e){return $n(e)?e:Xa(e,!1,I0,B0,Ns)}function js(e){return Xa(e,!1,P0,S0,Hs)}function zt(e){return Xa(e,!0,L0,V0,Fs)}function Xa(e,t,n,o,r){if(!Ae(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=r.get(e);if(a)return a;const l=z0(e);if(l===0)return e;const i=new Proxy(e,l===2?o:n);return r.set(e,i),i}function Cn(e){return $n(e)?Cn(e.__v_raw):!!(e&&e.__v_isReactive)}function $n(e){return!!(e&&e.__v_isReadonly)}function gr(e){return!!(e&&e.__v_isShallow)}function qs(e){return Cn(e)||$n(e)}function de(e){const t=e&&e.__v_raw;return t?de(t):e}function Gs(e){return vr(e,"__v_skip",!0),e}const Ao=e=>Ae(e)?So(e):e,el=e=>Ae(e)?zt(e):e;function tl(e){Qt&&vt&&(e=de(e),Vs(e.dep||(e.dep=Ya())))}function nl(e,t){e=de(e);const n=e.dep;n&&ba(n)}function Oe(e){return!!(e&&e.__v_isRef===!0)}function W(e){return Ws(e,!1)}function Ne(e){return Ws(e,!0)}function Ws(e,t){return Oe(e)?e:new N0(e,t)}class N0{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:de(t),this._value=n?t:Ao(t)}get value(){return tl(this),this._value}set value(t){const n=this.__v_isShallow||gr(t)||$n(t);t=n?t:de(t),hn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Ao(t),nl(this))}}function fn(e){return Oe(e)?e.value:e}const H0={get:(e,t,n)=>fn(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Oe(r)&&!Oe(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Us(e){return Cn(e)?e:new Proxy(e,H0)}class F0{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:o}=t(()=>tl(this),()=>nl(this));this._get=n,this._set=o}get value(){return this._get()}set value(t){this._set(t)}}function Ks(e){return new F0(e)}class j0{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return y0(de(this._object),this._key)}}class q0{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Xn(e,t,n){return Oe(e)?e:re(e)?new q0(e):Ae(e)&&arguments.length>1?G0(e,t,n):W(e)}function G0(e,t,n){const o=e[t];return Oe(o)?o:new j0(e,t,n)}class W0{constructor(t,n,o,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new Ja(t,()=>{this._dirty||(this._dirty=!0,nl(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const t=de(this);return tl(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function U0(e,t,n=!1){let o,r;const a=re(e);return a?(o=e,r=mt):(o=e.get,r=e.set),new W0(o,r,a||!r,n)}function Xt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(a){Vo(a,t,n)}return r}function lt(e,t,n,o){if(re(e)){const a=Xt(e,t,n,o);return a&&Ls(a)&&a.catch(l=>{Vo(l,t,n)}),a}const r=[];for(let a=0;a>>1,r=He[o],a=ko(r);aLt&&He.splice(t,1)}function Z0(e){Y(e)?Rn.push(...e):(!St||!St.includes(e,e.allowRecurse?sn+1:sn))&&Rn.push(e),Js()}function ei(e,t=wo?Lt+1:0){for(;tko(n)-ko(o)),sn=0;sne.id==null?1/0:e.id,Q0=(e,t)=>{const n=ko(e)-ko(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Zs(e){Ea=!1,wo=!0,He.sort(Q0);const t=mt;try{for(Lt=0;Ltse(h)?h.trim():h)),p&&(r=n.map(hr))}let i,u=o[i=Gr(t)]||o[i=Gr(ct(t))];!u&&a&&(u=o[i=Gr(Jn(t))]),u&<(u,e,6,r);const c=o[i+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,lt(c,e,6,r)}}function Qs(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(r!==void 0)return r;const a=e.emits;let l={},i=!1;if(!re(e)){const u=c=>{const d=Qs(c,t,!0);d&&(i=!0,Be(l,d))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!a&&!i?(Ae(e)&&o.set(e,null),null):(Y(a)?a.forEach(u=>l[u]=null):Be(l,a),Ae(e)&&o.set(e,l),l)}function Rr(e,t){return!e||!Ro(t)?!1:(t=t.slice(2).replace(/Once$/,""),ve(e,t[0].toLowerCase()+t.slice(1))||ve(e,Jn(t))||ve(e,t))}let et=null,Xs=null;function br(e){const t=et;return et=e,Xs=e&&e.type.__scopeId||null,t}function e2(e,t=et,n){if(!t||e._n)return e;const o=(...r)=>{o._d&&pi(-1);const a=br(t);let l;try{l=e(...r)}finally{br(a),o._d&&pi(1)}return l};return o._n=!0,o._c=!0,o._d=!0,o}function Wr(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:a,propsOptions:[l],slots:i,attrs:u,emit:c,render:d,renderCache:p,data:f,setupState:h,ctx:g,inheritAttrs:y}=e;let T,b;const L=br(e);try{if(n.shapeFlag&4){const I=r||o;T=ft(d.call(I,I,p,a,h,f,g)),b=u}else{const I=t;T=ft(I.length>1?I(a,{attrs:u,slots:i,emit:c}):I(a,null)),b=t.props?u:t2(u)}}catch(I){_o.length=0,Vo(I,e,1),T=De(it)}let E=T;if(b&&y!==!1){const I=Object.keys(b),{shapeFlag:B}=E;I.length&&B&7&&(l&&I.some(Ga)&&(b=n2(b,l)),E=tn(E,b))}return n.dirs&&(E=tn(E),E.dirs=E.dirs?E.dirs.concat(n.dirs):n.dirs),n.transition&&(E.transition=n.transition),T=E,br(L),T}const t2=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ro(n))&&((t||(t={}))[n]=e[n]);return t},n2=(e,t)=>{const n={};for(const o in e)(!Ga(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function o2(e,t,n){const{props:o,children:r,component:a}=e,{props:l,children:i,patchFlag:u}=t,c=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return o?ti(o,l,c):!!l;if(u&8){const d=t.dynamicProps;for(let p=0;pe.__isSuspense;function tc(e,t){t&&t.pendingBranch?Y(e)?t.effects.push(...e):t.effects.push(e):Z0(e)}function nc(e,t){return rl(e,null,t)}const er={};function ue(e,t,n){return rl(e,t,n)}function rl(e,t,{immediate:n,deep:o,flush:r,onTrack:a,onTrigger:l}=ke){var i;const u=Rs()===((i=Se)==null?void 0:i.scope)?Se:null;let c,d=!1,p=!1;if(Oe(e)?(c=()=>e.value,d=gr(e)):Cn(e)?(c=()=>e,o=!0):Y(e)?(p=!0,d=e.some(I=>Cn(I)||gr(I)),c=()=>e.map(I=>{if(Oe(I))return I.value;if(Cn(I))return dn(I);if(re(I))return Xt(I,u,2)})):re(e)?t?c=()=>Xt(e,u,2):c=()=>{if(!(u&&u.isUnmounted))return f&&f(),lt(e,u,3,[h])}:c=mt,t&&o){const I=c;c=()=>dn(I())}let f,h=I=>{f=L.onStop=()=>{Xt(I,u,4)}},g;if(Hn)if(h=mt,t?n&<(t,u,3,[c(),p?[]:void 0,h]):c(),r==="sync"){const I=ed();g=I.__watcherHandles||(I.__watcherHandles=[])}else return mt;let y=p?new Array(e.length).fill(er):er;const T=()=>{if(L.active)if(t){const I=L.run();(o||d||(p?I.some((B,x)=>hn(B,y[x])):hn(I,y)))&&(f&&f(),lt(t,u,3,[I,y===er?void 0:p&&y[0]===er?[]:y,h]),y=I)}else L.run()};T.allowRecurse=!!t;let b;r==="sync"?b=T:r==="post"?b=()=>We(T,u&&u.suspense):(T.pre=!0,u&&(T.id=u.uid),b=()=>Cr(T));const L=new Ja(c,b);t?n?T():y=L.run():r==="post"?We(L.run.bind(L),u&&u.suspense):L.run();const E=()=>{L.stop(),u&&u.scope&&Wa(u.scope.effects,L)};return g&&g.push(E),E}function s2(e,t,n){const o=this.proxy,r=se(e)?e.includes(".")?oc(o,e):()=>o[e]:e.bind(o,o);let a;re(t)?a=t:(a=t.handler,n=t);const l=Se;Nn(this);const i=rl(r,a.bind(o),n);return l?Nn(l):vn(),i}function oc(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;r{dn(n,t)});else if(Ds(e))for(const n in e)dn(e[n],t);return e}function t5(e,t){const n=et;if(n===null)return e;const o=Sr(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let a=0;a{e.isMounted=!0}),ll(()=>{e.isUnmounting=!0}),e}const ot=[Function,Array],ac={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ot,onEnter:ot,onAfterEnter:ot,onEnterCancelled:ot,onBeforeLeave:ot,onLeave:ot,onAfterLeave:ot,onLeaveCancelled:ot,onBeforeAppear:ot,onAppear:ot,onAfterAppear:ot,onAppearCancelled:ot},c2={name:"BaseTransition",props:ac,setup(e,{slots:t}){const n=bn(),o=rc();let r;return()=>{const a=t.default&&al(t.default(),!0);if(!a||!a.length)return;let l=a[0];if(a.length>1){for(const y of a)if(y.type!==it){l=y;break}}const i=de(e),{mode:u}=i;if(o.isLeaving)return Ur(l);const c=oi(l);if(!c)return Ur(l);const d=To(c,i,o,n);Io(c,d);const p=n.subTree,f=p&&oi(p);let h=!1;const{getTransitionKey:g}=c.type;if(g){const y=g();r===void 0?r=y:y!==r&&(r=y,h=!0)}if(f&&f.type!==it&&(!cn(c,f)||h)){const y=To(f,i,o,n);if(Io(f,y),u==="out-in")return o.isLeaving=!0,y.afterLeave=()=>{o.isLeaving=!1,n.update.active!==!1&&n.update()},Ur(l);u==="in-out"&&c.type!==it&&(y.delayLeave=(T,b,L)=>{const E=lc(o,f);E[String(f.key)]=f,T[Yt]=()=>{b(),T[Yt]=void 0,delete d.delayedLeave},d.delayedLeave=L})}return l}}},u2=c2;function lc(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function To(e,t,n,o){const{appear:r,mode:a,persisted:l=!1,onBeforeEnter:i,onEnter:u,onAfterEnter:c,onEnterCancelled:d,onBeforeLeave:p,onLeave:f,onAfterLeave:h,onLeaveCancelled:g,onBeforeAppear:y,onAppear:T,onAfterAppear:b,onAppearCancelled:L}=t,E=String(e.key),I=lc(n,e),B=(M,S)=>{M&<(M,o,9,S)},x=(M,S)=>{const H=S[1];B(M,S),Y(M)?M.every(Q=>Q.length<=1)&&H():M.length<=1&&H()},z={mode:a,persisted:l,beforeEnter(M){let S=i;if(!n.isMounted)if(r)S=y||i;else return;M[Yt]&&M[Yt](!0);const H=I[E];H&&cn(e,H)&&H.el[Yt]&&H.el[Yt](),B(S,[M])},enter(M){let S=u,H=c,Q=d;if(!n.isMounted)if(r)S=T||u,H=b||c,Q=L||d;else return;let j=!1;const te=M[tr]=Pe=>{j||(j=!0,Pe?B(Q,[M]):B(H,[M]),z.delayedLeave&&z.delayedLeave(),M[tr]=void 0)};S?x(S,[M,te]):te()},leave(M,S){const H=String(e.key);if(M[tr]&&M[tr](!0),n.isUnmounting)return S();B(p,[M]);let Q=!1;const j=M[Yt]=te=>{Q||(Q=!0,S(),te?B(g,[M]):B(h,[M]),M[Yt]=void 0,I[H]===e&&delete I[H])};I[H]=e,f?x(f,[M,j]):j()},clone(M){return To(M,t,n,o)}};return z}function Ur(e){if(Mo(e))return e=tn(e),e.children=null,e}function oi(e){return Mo(e)?e.children?e.children[0]:void 0:e}function Io(e,t){e.shapeFlag&6&&e.component?Io(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function al(e,t=!1,n){let o=[],r=0;for(let a=0;a1)for(let a=0;aBe({name:e.name},t,{setup:e}))():e}const ho=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function A(e){re(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:a,suspensible:l=!0,onError:i}=e;let u=null,c,d=0;const p=()=>(d++,u=null,f()),f=()=>{let h;return u||(h=u=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),i)return new Promise((y,T)=>{i(g,()=>y(p()),()=>T(g),d+1)});throw g}).then(g=>h!==u&&u?u:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),c=g,g)))};return V({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return c},setup(){const h=Se;if(c)return()=>Kr(c,h);const g=L=>{u=null,Vo(L,h,13,!o)};if(l&&h.suspense||Hn)return f().then(L=>()=>Kr(L,h)).catch(L=>(g(L),()=>o?De(o,{error:L}):null));const y=W(!1),T=W(),b=W(!!r);return r&&setTimeout(()=>{b.value=!1},r),a!=null&&setTimeout(()=>{if(!y.value&&!T.value){const L=new Error(`Async component timed out after ${a}ms.`);g(L),T.value=L}},a),f().then(()=>{y.value=!0,h.parent&&Mo(h.parent.vnode)&&Cr(h.parent.update)}).catch(L=>{g(L),T.value=L}),()=>{if(y.value&&c)return Kr(c,h);if(T.value&&o)return De(o,{error:T.value});if(n&&!b.value)return De(n)}}})}function Kr(e,t){const{ref:n,props:o,children:r,ce:a}=t.vnode,l=De(e,o,r);return l.ref=n,l.ce=a,delete t.vnode.ce,l}const Mo=e=>e.type.__isKeepAlive;function d2(e,t){ic(e,"a",t)}function p2(e,t){ic(e,"da",t)}function ic(e,t,n=Se){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Or(t,o,n),n){let r=n.parent;for(;r&&r.parent;)Mo(r.parent.vnode)&&f2(o,t,n,r),r=r.parent}}function f2(e,t,n,o){const r=Or(t,e,o,!0);$o(()=>{Wa(o[t],r)},n)}function Or(e,t,n=Se,o=!1){if(n){const r=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Zn(),Nn(n);const i=lt(t,n,e,l);return vn(),Qn(),i});return o?r.unshift(a):r.push(a),a}}const Nt=e=>(t,n=Se)=>(!Hn||e==="sp")&&Or(e,(...o)=>t(...o),n),v2=Nt("bm"),be=Nt("m"),h2=Nt("bu"),sc=Nt("u"),ll=Nt("bum"),$o=Nt("um"),m2=Nt("sp"),g2=Nt("rtg"),_2=Nt("rtc");function b2(e,t=Se){Or("ec",e,t)}function n5(e,t,n,o){let r;const a=n&&n[o];if(Y(e)||se(e)){r=new Array(e.length);for(let l=0,i=e.length;lt(l,i,void 0,a&&a[i]));else{const l=Object.keys(e);r=new Array(l.length);for(let i=0,u=l.length;ie?Ac(e)?Sr(e)||e.proxy:ya(e.parent):null,mo=Be(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ya(e.parent),$root:e=>ya(e.root),$emit:e=>e.emit,$options:e=>il(e),$forceUpdate:e=>e.f||(e.f=()=>Cr(e.update)),$nextTick:e=>e.n||(e.n=rn.bind(e.proxy)),$watch:e=>s2.bind(e)}),Yr=(e,t)=>e!==ke&&!e.__isScriptSetup&&ve(e,t),E2={get({_:e},t){const{ctx:n,setupState:o,data:r,props:a,accessCache:l,type:i,appContext:u}=e;let c;if(t[0]!=="$"){const h=l[t];if(h!==void 0)switch(h){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return a[t]}else{if(Yr(o,t))return l[t]=1,o[t];if(r!==ke&&ve(r,t))return l[t]=2,r[t];if((c=e.propsOptions[0])&&ve(c,t))return l[t]=3,a[t];if(n!==ke&&ve(n,t))return l[t]=4,n[t];Aa&&(l[t]=0)}}const d=mo[t];let p,f;if(d)return t==="$attrs"&&Ke(e,"get",t),d(e);if((p=i.__cssModules)&&(p=p[t]))return p;if(n!==ke&&ve(n,t))return l[t]=4,n[t];if(f=u.config.globalProperties,ve(f,t))return f[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:a}=e;return Yr(r,t)?(r[t]=n,!0):o!==ke&&ve(o,t)?(o[t]=n,!0):ve(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:a}},l){let i;return!!n[l]||e!==ke&&ve(e,l)||Yr(t,l)||(i=a[0])&&ve(i,l)||ve(o,l)||ve(mo,l)||ve(r.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ve(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ri(e){return Y(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Aa=!0;function y2(e){const t=il(e),n=e.proxy,o=e.ctx;Aa=!1,t.beforeCreate&&ai(t.beforeCreate,e,"bc");const{data:r,computed:a,methods:l,watch:i,provide:u,inject:c,created:d,beforeMount:p,mounted:f,beforeUpdate:h,updated:g,activated:y,deactivated:T,beforeDestroy:b,beforeUnmount:L,destroyed:E,unmounted:I,render:B,renderTracked:x,renderTriggered:z,errorCaptured:M,serverPrefetch:S,expose:H,inheritAttrs:Q,components:j,directives:te,filters:Pe}=t;if(c&&A2(c,o,null),l)for(const ne in l){const J=l[ne];re(J)&&(o[ne]=J.bind(n))}if(r){const ne=r.call(n,n);Ae(ne)&&(e.data=So(ne))}if(Aa=!0,a)for(const ne in a){const J=a[ne],xe=re(J)?J.bind(n,n):re(J.get)?J.get.bind(n,n):mt,wt=!re(J)&&re(J.set)?J.set.bind(n):mt,nt=k({get:xe,set:wt});Object.defineProperty(o,ne,{enumerable:!0,configurable:!0,get:()=>nt.value,set:Ve=>nt.value=Ve})}if(i)for(const ne in i)cc(i[ne],o,n,ne);if(u){const ne=re(u)?u.call(n):u;Reflect.ownKeys(ne).forEach(J=>{gt(J,ne[J])})}d&&ai(d,e,"c");function U(ne,J){Y(J)?J.forEach(xe=>ne(xe.bind(n))):J&&ne(J.bind(n))}if(U(v2,p),U(be,f),U(h2,h),U(sc,g),U(d2,y),U(p2,T),U(b2,M),U(_2,x),U(g2,z),U(ll,L),U($o,I),U(m2,S),Y(H))if(H.length){const ne=e.exposed||(e.exposed={});H.forEach(J=>{Object.defineProperty(ne,J,{get:()=>n[J],set:xe=>n[J]=xe})})}else e.exposed||(e.exposed={});B&&e.render===mt&&(e.render=B),Q!=null&&(e.inheritAttrs=Q),j&&(e.components=j),te&&(e.directives=te)}function A2(e,t,n=mt){Y(e)&&(e=wa(e));for(const o in e){const r=e[o];let a;Ae(r)?"default"in r?a=me(r.from||o,r.default,!0):a=me(r.from||o):a=me(r),Oe(a)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:l=>a.value=l}):t[o]=a}}function ai(e,t,n){lt(Y(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function cc(e,t,n,o){const r=o.includes(".")?oc(n,o):()=>n[o];if(se(e)){const a=t[e];re(a)&&ue(r,a)}else if(re(e))ue(r,e.bind(n));else if(Ae(e))if(Y(e))e.forEach(a=>cc(a,t,n,o));else{const a=re(e.handler)?e.handler.bind(n):t[e.handler];re(a)&&ue(r,a,e)}}function il(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:a,config:{optionMergeStrategies:l}}=e.appContext,i=a.get(t);let u;return i?u=i:!r.length&&!n&&!o?u=t:(u={},r.length&&r.forEach(c=>Er(u,c,l,!0)),Er(u,t,l)),Ae(t)&&a.set(t,u),u}function Er(e,t,n,o=!1){const{mixins:r,extends:a}=t;a&&Er(e,a,n,!0),r&&r.forEach(l=>Er(e,l,n,!0));for(const l in t)if(!(o&&l==="expose")){const i=w2[l]||n&&n[l];e[l]=i?i(e[l],t[l]):t[l]}return e}const w2={data:li,props:ii,emits:ii,methods:fo,computed:fo,beforeCreate:je,created:je,beforeMount:je,mounted:je,beforeUpdate:je,updated:je,beforeDestroy:je,beforeUnmount:je,destroyed:je,unmounted:je,activated:je,deactivated:je,errorCaptured:je,serverPrefetch:je,components:fo,directives:fo,watch:T2,provide:li,inject:k2};function li(e,t){return t?e?function(){return Be(re(e)?e.call(this,this):e,re(t)?t.call(this,this):t)}:t:e}function k2(e,t){return fo(wa(e),wa(t))}function wa(e){if(Y(e)){const t={};for(let n=0;n1)return n&&re(t)?t.call(o&&o.proxy):t}}function P2(e,t,n,o=!1){const r={},a={};vr(a,Br,1),e.propsDefaults=Object.create(null),dc(e,t,r,a);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=o?r:js(r):e.type.props?e.props=r:e.props=a,e.attrs=a}function D2(e,t,n,o){const{props:r,attrs:a,vnode:{patchFlag:l}}=e,i=de(r),[u]=e.propsOptions;let c=!1;if((o||l>0)&&!(l&16)){if(l&8){const d=e.vnode.dynamicProps;for(let p=0;p{u=!0;const[f,h]=pc(p,t,!0);Be(l,f),h&&i.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!a&&!u)return Ae(e)&&o.set(e,Dn),Dn;if(Y(a))for(let d=0;d-1,h[1]=y<0||g-1||ve(h,"default"))&&i.push(p)}}}const c=[l,i];return Ae(e)&&o.set(e,c),c}function si(e){return e[0]!=="$"}function ci(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function ui(e,t){return ci(e)===ci(t)}function di(e,t){return Y(t)?t.findIndex(n=>ui(n,e)):re(t)&&ui(t,e)?0:-1}const fc=e=>e[0]==="_"||e==="$stable",sl=e=>Y(e)?e.map(ft):[ft(e)],x2=(e,t,n)=>{if(t._n)return t;const o=e2((...r)=>sl(t(...r)),n);return o._c=!1,o},vc=(e,t,n)=>{const o=e._ctx;for(const r in e){if(fc(r))continue;const a=e[r];if(re(a))t[r]=x2(r,a,o);else if(a!=null){const l=sl(a);t[r]=()=>l}}},hc=(e,t)=>{const n=sl(t);e.slots.default=()=>n},C2=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=de(t),vr(t,"_",n)):vc(t,e.slots={})}else e.slots={},t&&hc(e,t);vr(e.slots,Br,1)},R2=(e,t,n)=>{const{vnode:o,slots:r}=e;let a=!0,l=ke;if(o.shapeFlag&32){const i=t._;i?n&&i===1?a=!1:(Be(r,t),!n&&i===1&&delete r._):(a=!t.$stable,vc(t,r)),l=t}else t&&(hc(e,t),l={default:1});if(a)for(const i in r)!fc(i)&&l[i]==null&&delete r[i]};function Ar(e,t,n,o,r=!1){if(Y(e)){e.forEach((f,h)=>Ar(f,t&&(Y(t)?t[h]:t),n,o,r));return}if(ho(o)&&!r)return;const a=o.shapeFlag&4?Sr(o.component)||o.component.proxy:o.el,l=r?null:a,{i,r:u}=e,c=t&&t.r,d=i.refs===ke?i.refs={}:i.refs,p=i.setupState;if(c!=null&&c!==u&&(se(c)?(d[c]=null,ve(p,c)&&(p[c]=null)):Oe(c)&&(c.value=null)),re(u))Xt(u,i,12,[l,d]);else{const f=se(u),h=Oe(u);if(f||h){const g=()=>{if(e.f){const y=f?ve(p,u)?p[u]:d[u]:u.value;r?Y(y)&&Wa(y,a):Y(y)?y.includes(a)||y.push(a):f?(d[u]=[a],ve(p,u)&&(p[u]=d[u])):(u.value=[a],e.k&&(d[e.k]=u.value))}else f?(d[u]=l,ve(p,u)&&(p[u]=l)):h&&(u.value=l,e.k&&(d[e.k]=l))};l?(g.id=-1,We(g,n)):g()}}}let qt=!1;const nr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",or=e=>e.nodeType===8;function O2(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:a,parentNode:l,remove:i,insert:u,createComment:c}}=e,d=(E,I)=>{if(!I.hasChildNodes()){n(null,E,I),_r(),I._vnode=E;return}qt=!1,p(I.firstChild,E,null,null,null),_r(),I._vnode=E,qt&&console.error("Hydration completed but contains mismatches.")},p=(E,I,B,x,z,M=!1)=>{const S=or(E)&&E.data==="[",H=()=>y(E,I,B,x,z,S),{type:Q,ref:j,shapeFlag:te,patchFlag:Pe}=I;let Ie=E.nodeType;I.el=E,Pe===-2&&(M=!1,I.dynamicChildren=null);let U=null;switch(Q){case zn:Ie!==3?I.children===""?(u(I.el=r(""),l(E),E),U=E):U=H():(E.data!==I.children&&(qt=!0,E.data=I.children),U=a(E));break;case it:L(E)?(U=a(E),b(I.el=E.content.firstChild,E,B)):Ie!==8||S?U=H():U=a(E);break;case go:if(S&&(E=a(E),Ie=E.nodeType),Ie===1||Ie===3){U=E;const ne=!I.children.length;for(let J=0;J{M=M||!!I.dynamicChildren;const{type:S,props:H,patchFlag:Q,shapeFlag:j,dirs:te,transition:Pe}=I,Ie=S==="input"&&te||S==="option";if(Ie||Q!==-1){if(te&&It(I,null,B,"created"),H)if(Ie||!M||Q&48)for(const J in H)(Ie&&J.endsWith("value")||Ro(J)&&!vo(J))&&o(E,J,null,H[J],!1,void 0,B);else H.onClick&&o(E,"onClick",null,H.onClick,!1,void 0,B);let U;(U=H&&H.onVnodeBeforeMount)&&rt(U,B,I);let ne=!1;if(L(E)){ne=mc(x,Pe)&&B&&B.vnode.props&&B.vnode.props.appear;const J=E.content.firstChild;ne&&Pe.beforeEnter(J),b(J,E,B),I.el=E=J}if(te&&It(I,null,B,"beforeMount"),((U=H&&H.onVnodeMounted)||te||ne)&&tc(()=>{U&&rt(U,B,I),ne&&Pe.enter(E),te&&It(I,null,B,"mounted")},x),j&16&&!(H&&(H.innerHTML||H.textContent))){let J=h(E.firstChild,I,E,B,x,z,M);for(;J;){qt=!0;const xe=J;J=J.nextSibling,i(xe)}}else j&8&&E.textContent!==I.children&&(qt=!0,E.textContent=I.children)}return E.nextSibling},h=(E,I,B,x,z,M,S)=>{S=S||!!I.dynamicChildren;const H=I.children,Q=H.length;for(let j=0;j{const{slotScopeIds:S}=I;S&&(z=z?z.concat(S):S);const H=l(E),Q=h(a(E),I,H,B,x,z,M);return Q&&or(Q)&&Q.data==="]"?a(I.anchor=Q):(qt=!0,u(I.anchor=c("]"),H,Q),Q)},y=(E,I,B,x,z,M)=>{if(qt=!0,I.el=null,M){const Q=T(E);for(;;){const j=a(E);if(j&&j!==Q)i(j);else break}}const S=a(E),H=l(E);return i(E),n(null,I,H,S,B,x,nr(H),z),S},T=(E,I="[",B="]")=>{let x=0;for(;E;)if(E=a(E),E&&or(E)&&(E.data===I&&x++,E.data===B)){if(x===0)return a(E);x--}return E},b=(E,I,B)=>{const x=I.parentNode;x&&x.replaceChild(E,I);let z=B;for(;z;)z.vnode.el===I&&(z.vnode.el=z.subTree.el=E),z=z.parent},L=E=>E.nodeType===1&&E.tagName.toLowerCase()==="template";return[d,p]}const We=tc;function B2(e){return S2(e,O2)}function S2(e,t){const n=ma();n.__VUE__=!0;const{insert:o,remove:r,patchProp:a,createElement:l,createText:i,createComment:u,setText:c,setElementText:d,parentNode:p,nextSibling:f,setScopeId:h=mt,insertStaticContent:g}=e,y=(m,_,w,P=null,C=null,R=null,q=!1,$=null,F=!!_.dynamicChildren)=>{if(m===_)return;m&&!cn(m,_)&&(P=D(m),Ve(m,C,R,!0),m=null),_.patchFlag===-2&&(F=!1,_.dynamicChildren=null);const{type:O,ref:X,shapeFlag:K}=_;switch(O){case zn:T(m,_,w,P);break;case it:b(m,_,w,P);break;case go:m==null&&L(_,w,P,q);break;case Xe:j(m,_,w,P,C,R,q,$,F);break;default:K&1?B(m,_,w,P,C,R,q,$,F):K&6?te(m,_,w,P,C,R,q,$,F):(K&64||K&128)&&O.process(m,_,w,P,C,R,q,$,F,N)}X!=null&&C&&Ar(X,m&&m.ref,R,_||m,!_)},T=(m,_,w,P)=>{if(m==null)o(_.el=i(_.children),w,P);else{const C=_.el=m.el;_.children!==m.children&&c(C,_.children)}},b=(m,_,w,P)=>{m==null?o(_.el=u(_.children||""),w,P):_.el=m.el},L=(m,_,w,P)=>{[m.el,m.anchor]=g(m.children,_,w,P,m.el,m.anchor)},E=({el:m,anchor:_},w,P)=>{let C;for(;m&&m!==_;)C=f(m),o(m,w,P),m=C;o(_,w,P)},I=({el:m,anchor:_})=>{let w;for(;m&&m!==_;)w=f(m),r(m),m=w;r(_)},B=(m,_,w,P,C,R,q,$,F)=>{q=q||_.type==="svg",m==null?x(_,w,P,C,R,q,$,F):S(m,_,C,R,q,$,F)},x=(m,_,w,P,C,R,q,$)=>{let F,O;const{type:X,props:K,shapeFlag:ee,transition:oe,dirs:ie}=m;if(F=m.el=l(m.type,R,K&&K.is,K),ee&8?d(F,m.children):ee&16&&M(m.children,F,null,P,C,R&&X!=="foreignObject",q,$),ie&&It(m,null,P,"created"),z(F,m,m.scopeId,q,P),K){for(const Ee in K)Ee!=="value"&&!vo(Ee)&&a(F,Ee,null,K[Ee],R,m.children,P,C,Ce);"value"in K&&a(F,"value",null,K.value),(O=K.onVnodeBeforeMount)&&rt(O,P,m)}ie&&It(m,null,P,"beforeMount");const we=mc(C,oe);we&&oe.beforeEnter(F),o(F,_,w),((O=K&&K.onVnodeMounted)||we||ie)&&We(()=>{O&&rt(O,P,m),we&&oe.enter(F),ie&&It(m,null,P,"mounted")},C)},z=(m,_,w,P,C)=>{if(w&&h(m,w),P)for(let R=0;R{for(let O=F;O{const $=_.el=m.el;let{patchFlag:F,dynamicChildren:O,dirs:X}=_;F|=m.patchFlag&16;const K=m.props||ke,ee=_.props||ke;let oe;w&&an(w,!1),(oe=ee.onVnodeBeforeUpdate)&&rt(oe,w,_,m),X&&It(_,m,w,"beforeUpdate"),w&&an(w,!0);const ie=C&&_.type!=="foreignObject";if(O?H(m.dynamicChildren,O,$,w,P,ie,R):q||J(m,_,$,null,w,P,ie,R,!1),F>0){if(F&16)Q($,_,K,ee,w,P,C);else if(F&2&&K.class!==ee.class&&a($,"class",null,ee.class,C),F&4&&a($,"style",K.style,ee.style,C),F&8){const we=_.dynamicProps;for(let Ee=0;Ee{oe&&rt(oe,w,_,m),X&&It(_,m,w,"updated")},P)},H=(m,_,w,P,C,R,q)=>{for(let $=0;$<_.length;$++){const F=m[$],O=_[$],X=F.el&&(F.type===Xe||!cn(F,O)||F.shapeFlag&70)?p(F.el):w;y(F,O,X,null,P,C,R,q,!0)}},Q=(m,_,w,P,C,R,q)=>{if(w!==P){if(w!==ke)for(const $ in w)!vo($)&&!($ in P)&&a(m,$,w[$],null,q,_.children,C,R,Ce);for(const $ in P){if(vo($))continue;const F=P[$],O=w[$];F!==O&&$!=="value"&&a(m,$,O,F,q,_.children,C,R,Ce)}"value"in P&&a(m,"value",w.value,P.value)}},j=(m,_,w,P,C,R,q,$,F)=>{const O=_.el=m?m.el:i(""),X=_.anchor=m?m.anchor:i("");let{patchFlag:K,dynamicChildren:ee,slotScopeIds:oe}=_;oe&&($=$?$.concat(oe):oe),m==null?(o(O,w,P),o(X,w,P),M(_.children,w,X,C,R,q,$,F)):K>0&&K&64&&ee&&m.dynamicChildren?(H(m.dynamicChildren,ee,w,C,R,q,$),(_.key!=null||C&&_===C.subTree)&&gc(m,_,!0)):J(m,_,w,X,C,R,q,$,F)},te=(m,_,w,P,C,R,q,$,F)=>{_.slotScopeIds=$,m==null?_.shapeFlag&512?C.ctx.activate(_,w,P,q,F):Pe(_,w,P,C,R,q,F):Ie(m,_,F)},Pe=(m,_,w,P,C,R,q)=>{const $=m.component=W2(m,P,C);if(Mo(m)&&($.ctx.renderer=N),U2($),$.asyncDep){if(C&&C.registerDep($,U),!m.el){const F=$.subTree=De(it);b(null,F,_,w)}return}U($,m,_,w,C,R,q)},Ie=(m,_,w)=>{const P=_.component=m.component;if(o2(m,_,w))if(P.asyncDep&&!P.asyncResolved){ne(P,_,w);return}else P.next=_,J0(P.update),P.update();else _.el=m.el,P.vnode=_},U=(m,_,w,P,C,R,q)=>{const $=()=>{if(m.isMounted){let{next:X,bu:K,u:ee,parent:oe,vnode:ie}=m,we=X,Ee;an(m,!1),X?(X.el=ie.el,ne(m,X,q)):X=ie,K&&pr(K),(Ee=X.props&&X.props.onVnodeBeforeUpdate)&&rt(Ee,oe,X,ie),an(m,!0);const Re=Wr(m),dt=m.subTree;m.subTree=Re,y(dt,Re,p(dt.el),D(dt),m,C,R),X.el=Re.el,we===null&&r2(m,Re.el),ee&&We(ee,C),(Ee=X.props&&X.props.onVnodeUpdated)&&We(()=>rt(Ee,oe,X,ie),C)}else{let X;const{el:K,props:ee}=_,{bm:oe,m:ie,parent:we}=m,Ee=ho(_);if(an(m,!1),oe&&pr(oe),!Ee&&(X=ee&&ee.onVnodeBeforeMount)&&rt(X,we,_),an(m,!0),K&&pe){const Re=()=>{m.subTree=Wr(m),pe(K,m.subTree,m,C,null)};Ee?_.type.__asyncLoader().then(()=>!m.isUnmounted&&Re()):Re()}else{const Re=m.subTree=Wr(m);y(null,Re,w,P,m,C,R),_.el=Re.el}if(ie&&We(ie,C),!Ee&&(X=ee&&ee.onVnodeMounted)){const Re=_;We(()=>rt(X,we,Re),C)}(_.shapeFlag&256||we&&ho(we.vnode)&&we.vnode.shapeFlag&256)&&m.a&&We(m.a,C),m.isMounted=!0,_=w=P=null}},F=m.effect=new Ja($,()=>Cr(O),m.scope),O=m.update=()=>F.run();O.id=m.uid,an(m,!0),O()},ne=(m,_,w)=>{_.component=m;const P=m.vnode.props;m.vnode=_,m.next=null,D2(m,_.props,P,w),R2(m,_.children,w),Zn(),ei(),Qn()},J=(m,_,w,P,C,R,q,$,F=!1)=>{const O=m&&m.children,X=m?m.shapeFlag:0,K=_.children,{patchFlag:ee,shapeFlag:oe}=_;if(ee>0){if(ee&128){wt(O,K,w,P,C,R,q,$,F);return}else if(ee&256){xe(O,K,w,P,C,R,q,$,F);return}}oe&8?(X&16&&Ce(O,C,R),K!==O&&d(w,K)):X&16?oe&16?wt(O,K,w,P,C,R,q,$,F):Ce(O,C,R,!0):(X&8&&d(w,""),oe&16&&M(K,w,P,C,R,q,$,F))},xe=(m,_,w,P,C,R,q,$,F)=>{m=m||Dn,_=_||Dn;const O=m.length,X=_.length,K=Math.min(O,X);let ee;for(ee=0;eeX?Ce(m,C,R,!0,!1,K):M(_,w,P,C,R,q,$,F,K)},wt=(m,_,w,P,C,R,q,$,F)=>{let O=0;const X=_.length;let K=m.length-1,ee=X-1;for(;O<=K&&O<=ee;){const oe=m[O],ie=_[O]=F?Jt(_[O]):ft(_[O]);if(cn(oe,ie))y(oe,ie,w,null,C,R,q,$,F);else break;O++}for(;O<=K&&O<=ee;){const oe=m[K],ie=_[ee]=F?Jt(_[ee]):ft(_[ee]);if(cn(oe,ie))y(oe,ie,w,null,C,R,q,$,F);else break;K--,ee--}if(O>K){if(O<=ee){const oe=ee+1,ie=oeee)for(;O<=K;)Ve(m[O],C,R,!0),O++;else{const oe=O,ie=O,we=new Map;for(O=ie;O<=ee;O++){const Ze=_[O]=F?Jt(_[O]):ft(_[O]);Ze.key!=null&&we.set(Ze.key,O)}let Ee,Re=0;const dt=ee-ie+1;let yn=!1,Hl=0;const lo=new Array(dt);for(O=0;O=dt){Ve(Ze,C,R,!0);continue}let Tt;if(Ze.key!=null)Tt=we.get(Ze.key);else for(Ee=ie;Ee<=ee;Ee++)if(lo[Ee-ie]===0&&cn(Ze,_[Ee])){Tt=Ee;break}Tt===void 0?Ve(Ze,C,R,!0):(lo[Tt-ie]=O+1,Tt>=Hl?Hl=Tt:yn=!0,y(Ze,_[Tt],w,null,C,R,q,$,F),Re++)}const Fl=yn?V2(lo):Dn;for(Ee=Fl.length-1,O=dt-1;O>=0;O--){const Ze=ie+O,Tt=_[Ze],jl=Ze+1{const{el:R,type:q,transition:$,children:F,shapeFlag:O}=m;if(O&6){nt(m.component.subTree,_,w,P);return}if(O&128){m.suspense.move(_,w,P);return}if(O&64){q.move(m,_,w,N);return}if(q===Xe){o(R,_,w);for(let K=0;K$.enter(R),C);else{const{leave:K,delayLeave:ee,afterLeave:oe}=$,ie=()=>o(R,_,w),we=()=>{K(R,()=>{ie(),oe&&oe()})};ee?ee(R,ie,we):we()}else o(R,_,w)},Ve=(m,_,w,P=!1,C=!1)=>{const{type:R,props:q,ref:$,children:F,dynamicChildren:O,shapeFlag:X,patchFlag:K,dirs:ee}=m;if($!=null&&Ar($,null,w,m,!0),X&256){_.ctx.deactivate(m);return}const oe=X&1&&ee,ie=!ho(m);let we;if(ie&&(we=q&&q.onVnodeBeforeUnmount)&&rt(we,_,m),X&6)kt(m.component,w,P);else{if(X&128){m.suspense.unmount(w,P);return}oe&&It(m,null,_,"beforeUnmount"),X&64?m.type.remove(m,_,w,C,N,P):O&&(R!==Xe||K>0&&K&64)?Ce(O,_,w,!1,!0):(R===Xe&&K&384||!C&&X&16)&&Ce(F,_,w),P&&Je(m)}(ie&&(we=q&&q.onVnodeUnmounted)||oe)&&We(()=>{we&&rt(we,_,m),oe&&It(m,null,_,"unmounted")},w)},Je=m=>{const{type:_,el:w,anchor:P,transition:C}=m;if(_===Xe){xt(w,P);return}if(_===go){I(m);return}const R=()=>{r(w),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(m.shapeFlag&1&&C&&!C.persisted){const{leave:q,delayLeave:$}=C,F=()=>q(w,R);$?$(m.el,R,F):F()}else R()},xt=(m,_)=>{let w;for(;m!==_;)w=f(m),r(m),m=w;r(_)},kt=(m,_,w)=>{const{bum:P,scope:C,update:R,subTree:q,um:$}=m;P&&pr(P),C.stop(),R&&(R.active=!1,Ve(q,m,_,w)),$&&We($,_),We(()=>{m.isUnmounted=!0},_),_&&_.pendingBranch&&!_.isUnmounted&&m.asyncDep&&!m.asyncResolved&&m.suspenseId===_.pendingId&&(_.deps--,_.deps===0&&_.resolve())},Ce=(m,_,w,P=!1,C=!1,R=0)=>{for(let q=R;qm.shapeFlag&6?D(m.component.subTree):m.shapeFlag&128?m.suspense.next():f(m.anchor||m.el),G=(m,_,w)=>{m==null?_._vnode&&Ve(_._vnode,null,null,!0):y(_._vnode||null,m,_,null,null,null,w),ei(),_r(),_._vnode=m},N={p:y,um:Ve,m:nt,r:Je,mt:Pe,mc:M,pc:J,pbc:H,n:D,o:e};let Z,pe;return t&&([Z,pe]=t(N)),{render:G,hydrate:Z,createApp:L2(G,Z)}}function an({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function mc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function gc(e,t,n=!1){const o=e.children,r=t.children;if(Y(o)&&Y(r))for(let a=0;a>1,e[n[i]]0&&(t[o]=n[a-1]),n[a]=o)}}for(a=n.length,l=n[a-1];a-- >0;)n[a]=l,l=t[l];return n}const M2=e=>e.__isTeleport,Xe=Symbol.for("v-fgt"),zn=Symbol.for("v-txt"),it=Symbol.for("v-cmt"),go=Symbol.for("v-stc"),_o=[];let ht=null;function $2(e=!1){_o.push(ht=e?null:[])}function z2(){_o.pop(),ht=_o[_o.length-1]||null}let Lo=1;function pi(e){Lo+=e}function _c(e){return e.dynamicChildren=Lo>0?ht||Dn:null,z2(),Lo>0&&ht&&ht.push(e),e}function o5(e,t,n,o,r,a){return _c(Ec(e,t,n,o,r,a,!0))}function N2(e,t,n,o,r){return _c(De(e,t,n,o,r,!0))}function Ta(e){return e?e.__v_isVNode===!0:!1}function cn(e,t){return e.type===t.type&&e.key===t.key}const Br="__vInternal",bc=({key:e})=>e??null,fr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||Oe(e)||re(e)?{i:et,r:e,k:t,f:!!n}:e:null);function Ec(e,t=null,n=null,o=0,r=null,a=e===Xe?0:1,l=!1,i=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&bc(t),ref:t&&fr(t),scopeId:Xs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:et};return i?(cl(u,n),a&128&&e.normalize(u)):n&&(u.shapeFlag|=se(n)?8:16),Lo>0&&!l&&ht&&(u.patchFlag>0||a&6)&&u.patchFlag!==32&&ht.push(u),u}const De=H2;function H2(e,t=null,n=null,o=0,r=null,a=!1){if((!e||e===a2)&&(e=it),Ta(e)){const i=tn(e,t,!0);return n&&cl(i,n),Lo>0&&!a&&ht&&(i.shapeFlag&6?ht[ht.indexOf(e)]=i:ht.push(i)),i.patchFlag|=-2,i}if(Q2(e)&&(e=e.__vccOpts),t){t=F2(t);let{class:i,style:u}=t;i&&!se(i)&&(t.class=Dr(i)),Ae(u)&&(qs(u)&&!Y(u)&&(u=Be({},u)),t.style=Pr(u))}const l=se(e)?1:i2(e)?128:M2(e)?64:Ae(e)?4:re(e)?2:0;return Ec(e,t,n,o,r,l,a,!0)}function F2(e){return e?qs(e)||Br in e?Be({},e):e:null}function tn(e,t,n=!1){const{props:o,ref:r,patchFlag:a,children:l}=e,i=t?j2(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:i,key:i&&bc(i),ref:t&&t.ref?n&&r?Y(r)?r.concat(fr(t)):[r,fr(t)]:fr(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Xe?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&tn(e.ssContent),ssFallback:e.ssFallback&&tn(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function yc(e=" ",t=0){return De(zn,null,e,t)}function r5(e,t){const n=De(go,null,e);return n.staticCount=t,n}function a5(e="",t=!1){return t?($2(),N2(it,null,e)):De(it,null,e)}function ft(e){return e==null||typeof e=="boolean"?De(it):Y(e)?De(Xe,null,e.slice()):typeof e=="object"?Jt(e):De(zn,null,String(e))}function Jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:tn(e)}function cl(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(Y(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),cl(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Br in t)?t._ctx=et:r===3&&et&&(et.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else re(t)?(t={default:t,_ctx:et},n=32):(t=String(t),o&64?(n=16,t=[yc(t)]):n=8);e.children=t,e.shapeFlag|=n}function j2(...e){const t={};for(let n=0;nSe||et;let ul,An,fi="__VUE_INSTANCE_SETTERS__";(An=ma()[fi])||(An=ma()[fi]=[]),An.push(e=>Se=e),ul=e=>{An.length>1?An.forEach(t=>t(e)):An[0](e)};const Nn=e=>{ul(e),e.scope.on()},vn=()=>{Se&&Se.scope.off(),ul(null)};function Ac(e){return e.vnode.shapeFlag&4}let Hn=!1;function U2(e,t=!1){Hn=t;const{props:n,children:o}=e.vnode,r=Ac(e);P2(e,n,r,t),C2(e,o);const a=r?K2(e,t):void 0;return Hn=!1,a}function K2(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Gs(new Proxy(e.ctx,E2));const{setup:o}=n;if(o){const r=e.setupContext=o.length>1?J2(e):null;Nn(e),Zn();const a=Xt(o,e,0,[e.props,r]);if(Qn(),vn(),Ls(a)){if(a.then(vn,vn),t)return a.then(l=>{vi(e,l,t)}).catch(l=>{Vo(l,e,0)});e.asyncDep=a}else vi(e,a,t)}else wc(e,t)}function vi(e,t,n){re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ae(t)&&(e.setupState=Us(t)),wc(e,n)}let hi;function wc(e,t,n){const o=e.type;if(!e.render){if(!t&&hi&&!o.render){const r=o.template||il(e).template;if(r){const{isCustomElement:a,compilerOptions:l}=e.appContext.config,{delimiters:i,compilerOptions:u}=o,c=Be(Be({isCustomElement:a,delimiters:i},l),u);o.render=hi(r,c)}}e.render=o.render||mt}{Nn(e),Zn();try{y2(e)}finally{Qn(),vn()}}}function Y2(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Ke(e,"get","$attrs"),t[n]}}))}function J2(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Y2(e)},slots:e.slots,emit:e.emit,expose:t}}function Sr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Us(Gs(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in mo)return mo[n](e)},has(t,n){return n in t||n in mo}}))}function Z2(e,t=!0){return re(e)?e.displayName||e.name:e.name||t&&e.__name}function Q2(e){return re(e)&&"__vccOpts"in e}const k=(e,t)=>U0(e,t,Hn);function s(e,t,n){const o=arguments.length;return o===2?Ae(t)&&!Y(t)?Ta(t)?De(e,null,[t]):De(e,t):De(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Ta(n)&&(n=[n]),De(e,t,n))}const X2=Symbol.for("v-scx"),ed=()=>me(X2),td="3.3.8",nd="http://www.w3.org/2000/svg",un=typeof document<"u"?document:null,mi=un&&un.createElement("template"),od={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?un.createElementNS(nd,e):un.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>un.createTextNode(e),createComment:e=>un.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>un.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,r,a){const l=n?n.previousSibling:t.lastChild;if(r&&(r===a||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{mi.innerHTML=o?`${e}`:e;const i=mi.content;if(o){const u=i.firstChild;for(;u.firstChild;)i.appendChild(u.firstChild);i.removeChild(u)}t.insertBefore(i,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Gt="transition",io="animation",Fn=Symbol("_vtc"),nn=(e,{slots:t})=>s(u2,Tc(e),t);nn.displayName="Transition";const kc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},rd=nn.props=Be({},ac,kc),ln=(e,t=[])=>{Y(e)?e.forEach(n=>n(...t)):e&&e(...t)},gi=e=>e?Y(e)?e.some(t=>t.length>1):e.length>1:!1;function Tc(e){const t={};for(const j in e)j in kc||(t[j]=e[j]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:i=`${n}-enter-to`,appearFromClass:u=a,appearActiveClass:c=l,appearToClass:d=i,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,g=ad(r),y=g&&g[0],T=g&&g[1],{onBeforeEnter:b,onEnter:L,onEnterCancelled:E,onLeave:I,onLeaveCancelled:B,onBeforeAppear:x=b,onAppear:z=L,onAppearCancelled:M=E}=t,S=(j,te,Pe)=>{Kt(j,te?d:i),Kt(j,te?c:l),Pe&&Pe()},H=(j,te)=>{j._isLeaving=!1,Kt(j,p),Kt(j,h),Kt(j,f),te&&te()},Q=j=>(te,Pe)=>{const Ie=j?z:L,U=()=>S(te,j,Pe);ln(Ie,[te,U]),_i(()=>{Kt(te,j?u:a),Rt(te,j?d:i),gi(Ie)||bi(te,o,y,U)})};return Be(t,{onBeforeEnter(j){ln(b,[j]),Rt(j,a),Rt(j,l)},onBeforeAppear(j){ln(x,[j]),Rt(j,u),Rt(j,c)},onEnter:Q(!1),onAppear:Q(!0),onLeave(j,te){j._isLeaving=!0;const Pe=()=>H(j,te);Rt(j,p),Lc(),Rt(j,f),_i(()=>{j._isLeaving&&(Kt(j,p),Rt(j,h),gi(I)||bi(j,o,T,Pe))}),ln(I,[j,Pe])},onEnterCancelled(j){S(j,!1),ln(E,[j])},onAppearCancelled(j){S(j,!0),ln(M,[j])},onLeaveCancelled(j){H(j),ln(B,[j])}})}function ad(e){if(e==null)return null;if(Ae(e))return[Jr(e.enter),Jr(e.leave)];{const t=Jr(e);return[t,t]}}function Jr(e){return s0(e)}function Rt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Fn]||(e[Fn]=new Set)).add(t)}function Kt(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[Fn];n&&(n.delete(t),n.size||(e[Fn]=void 0))}function _i(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ld=0;function bi(e,t,n,o){const r=e._endId=++ld,a=()=>{r===e._endId&&o()};if(n)return setTimeout(a,n);const{type:l,timeout:i,propCount:u}=Ic(e,t);if(!l)return o();const c=l+"end";let d=0;const p=()=>{e.removeEventListener(c,f),a()},f=h=>{h.target===e&&++d>=u&&p()};setTimeout(()=>{d(n[g]||"").split(", "),r=o(`${Gt}Delay`),a=o(`${Gt}Duration`),l=Ei(r,a),i=o(`${io}Delay`),u=o(`${io}Duration`),c=Ei(i,u);let d=null,p=0,f=0;t===Gt?l>0&&(d=Gt,p=l,f=a.length):t===io?c>0&&(d=io,p=c,f=u.length):(p=Math.max(l,c),d=p>0?l>c?Gt:io:null,f=d?d===Gt?a.length:u.length:0);const h=d===Gt&&/\b(transform|all)(,|$)/.test(o(`${Gt}Property`).toString());return{type:d,timeout:p,propCount:f,hasTransform:h}}function Ei(e,t){for(;e.lengthyi(n)+yi(e[o])))}function yi(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Lc(){return document.body.offsetHeight}function id(e,t,n){const o=e[Fn];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const dl=Symbol("_vod"),l5={beforeMount(e,{value:t},{transition:n}){e[dl]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):so(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),so(e,!0),o.enter(e)):o.leave(e,()=>{so(e,!1)}):so(e,t))},beforeUnmount(e,{value:t}){so(e,t)}};function so(e,t){e.style.display=t?e[dl]:"none"}function sd(e,t,n){const o=e.style,r=se(n);if(n&&!r){if(t&&!se(t))for(const a in t)n[a]==null&&Ia(o,a,"");for(const a in n)Ia(o,a,n[a])}else{const a=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),dl in e&&(o.display=a)}}const Ai=/\s*!important$/;function Ia(e,t,n){if(Y(n))n.forEach(o=>Ia(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=cd(e,t);Ai.test(n)?e.setProperty(Jn(o),n.replace(Ai,""),"important"):e[o]=n}}const wi=["Webkit","Moz","ms"],Zr={};function cd(e,t){const n=Zr[t];if(n)return n;let o=ct(t);if(o!=="filter"&&o in e)return Zr[t]=o;o=Bo(o);for(let r=0;rQr||(hd.then(()=>Qr=0),Qr=Date.now());function gd(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;lt(_d(o,n.value),t,5,[o])};return n.value=e,n.attached=md(),n}function _d(e,t){if(Y(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const Li=/^on[a-z]/,bd=(e,t,n,o,r=!1,a,l,i,u)=>{t==="class"?id(e,o,r):t==="style"?sd(e,n,o):Ro(t)?Ga(t)||fd(e,t,n,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ed(e,t,o,r))?dd(e,t,o,a,l,i,u):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),ud(e,t,o,r))};function Ed(e,t,n,o){return o?!!(t==="innerHTML"||t==="textContent"||t in e&&Li.test(t)&&re(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Li.test(t)&&se(n)?!1:t in e}const Pc=new WeakMap,Dc=new WeakMap,wr=Symbol("_moveCb"),Pi=Symbol("_enterCb"),xc={name:"TransitionGroup",props:Be({},rd,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=bn(),o=rc();let r,a;return sc(()=>{if(!r.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!Id(r[0].el,n.vnode.el,l))return;r.forEach(wd),r.forEach(kd);const i=r.filter(Td);Lc(),i.forEach(u=>{const c=u.el,d=c.style;Rt(c,l),d.transform=d.webkitTransform=d.transitionDuration="";const p=c[wr]=f=>{f&&f.target!==c||(!f||/transform$/.test(f.propertyName))&&(c.removeEventListener("transitionend",p),c[wr]=null,Kt(c,l))};c.addEventListener("transitionend",p)})}),()=>{const l=de(e),i=Tc(l);let u=l.tag||Xe;r=a,a=t.default?al(t.default()):[];for(let c=0;cdelete e.mode;xc.props;const Ad=xc;function wd(e){const t=e.el;t[wr]&&t[wr](),t[Pi]&&t[Pi]()}function kd(e){Dc.set(e,e.el.getBoundingClientRect())}function Td(e){const t=Pc.get(e),n=Dc.get(e),o=t.left-n.left,r=t.top-n.top;if(o||r){const a=e.el.style;return a.transform=a.webkitTransform=`translate(${o}px,${r}px)`,a.transitionDuration="0s",e}}function Id(e,t,n){const o=e.cloneNode(),r=e[Fn];r&&r.forEach(i=>{i.split(/\s+/).forEach(u=>u&&o.classList.remove(u))}),n.split(/\s+/).forEach(i=>i&&o.classList.add(i)),o.style.display="none";const a=t.nodeType===1?t:t.parentNode;a.appendChild(o);const{hasTransform:l}=Ic(o);return a.removeChild(o),l}const on=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Y(t)?n=>pr(t,n):t};function Ld(e){e.target.composing=!0}function Di(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const st=Symbol("_assign"),xi={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e[st]=on(r);const a=o||r.props&&r.props.type==="number";Vt(e,t?"change":"input",l=>{if(l.target.composing)return;let i=e.value;n&&(i=i.trim()),a&&(i=hr(i)),e[st](i)}),n&&Vt(e,"change",()=>{e.value=e.value.trim()}),t||(Vt(e,"compositionstart",Ld),Vt(e,"compositionend",Di),Vt(e,"change",Di))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},a){if(e[st]=on(a),e.composing||document.activeElement===e&&e.type!=="range"&&(n||o&&e.value.trim()===t||(r||e.type==="number")&&hr(e.value)===t))return;const l=t??"";e.value!==l&&(e.value=l)}},Pd={deep:!0,created(e,t,n){e[st]=on(n),Vt(e,"change",()=>{const o=e._modelValue,r=jn(e),a=e.checked,l=e[st];if(Y(o)){const i=Ka(o,r),u=i!==-1;if(a&&!u)l(o.concat(r));else if(!a&&u){const c=[...o];c.splice(i,1),l(c)}}else if(Yn(o)){const i=new Set(o);a?i.add(r):i.delete(r),l(i)}else l(Cc(e,a))})},mounted:Ci,beforeUpdate(e,t,n){e[st]=on(n),Ci(e,t,n)}};function Ci(e,{value:t,oldValue:n},o){e._modelValue=t,Y(t)?e.checked=Ka(t,o.props.value)>-1:Yn(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=mn(t,Cc(e,!0)))}const Dd={created(e,{value:t},n){e.checked=mn(t,n.props.value),e[st]=on(n),Vt(e,"change",()=>{e[st](jn(e))})},beforeUpdate(e,{value:t,oldValue:n},o){e[st]=on(o),t!==n&&(e.checked=mn(t,o.props.value))}},xd={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const r=Yn(t);Vt(e,"change",()=>{const a=Array.prototype.filter.call(e.options,l=>l.selected).map(l=>n?hr(jn(l)):jn(l));e[st](e.multiple?r?new Set(a):a:a[0])}),e[st]=on(o)},mounted(e,{value:t}){Ri(e,t)},beforeUpdate(e,t,n){e[st]=on(n)},updated(e,{value:t}){Ri(e,t)}};function Ri(e,t){const n=e.multiple;if(!(n&&!Y(t)&&!Yn(t))){for(let o=0,r=e.options.length;o-1:a.selected=t.has(l);else if(mn(jn(a),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function jn(e){return"_value"in e?e._value:e.value}function Cc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const i5={created(e,t,n){rr(e,t,n,null,"created")},mounted(e,t,n){rr(e,t,n,null,"mounted")},beforeUpdate(e,t,n,o){rr(e,t,n,o,"beforeUpdate")},updated(e,t,n,o){rr(e,t,n,o,"updated")}};function Cd(e,t){switch(e){case"SELECT":return xd;case"TEXTAREA":return xi;default:switch(t){case"checkbox":return Pd;case"radio":return Dd;default:return xi}}}function rr(e,t,n,o,r){const l=Cd(e.tagName,n.props&&n.props.type)[r];l&&l(e,t,n,o)}const Rd=Be({patchProp:bd},od);let Xr,Oi=!1;function Od(){return Xr=Oi?Xr:B2(Rd),Oi=!0,Xr}const Bd=(...e)=>{const t=Od().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=Sd(o);if(r)return n(r,!0,r instanceof SVGElement)},t};function Sd(e){return se(e)?document.querySelector(e):e}const Vd={"v-8daa1a0e":()=>v(()=>import("./index.html-e58f3897.js"),[]).then(({data:e})=>e),"v-184f4da6":()=>v(()=>import("./intro.html-208ed657.js"),[]).then(({data:e})=>e),"v-2e3eac9e":()=>v(()=>import("./slides.html-ebe0e0e3.js"),[]).then(({data:e})=>e),"v-146a1089":()=>v(()=>import("./index.html-53b9e015.js"),[]).then(({data:e})=>e),"v-cd69af9a":()=>v(()=>import("./best-emoji.html-a1fc8cbf.js"),[]).then(({data:e})=>e),"v-4f276fe1":()=>v(()=>import("./build-sub.html-559e9a4e.js"),[]).then(({data:e})=>e),"v-28c690c8":()=>v(()=>import("./chatgpt-porxy.html-7d545cfc.js"),[]).then(({data:e})=>e),"v-ef3ead22":()=>v(()=>import("./chatgpt.html-59d219eb.js"),[]).then(({data:e})=>e),"v-d46b396a":()=>v(()=>import("./ddns.html-cf0df908.js"),[]).then(({data:e})=>e),"v-d7b7dc3e":()=>v(()=>import("./github-actions-deploy.html-3b61e44c.js"),[]).then(({data:e})=>e),"v-0d806e9f":()=>v(()=>import("./github-tools.html-07298bc8.js"),[]).then(({data:e})=>e),"v-63fa6bda":()=>v(()=>import("./hackintosh.html-21fc8619.js"),[]).then(({data:e})=>e),"v-63ab6aeb":()=>v(()=>import("./hello-world.html-f9c4c97e.js"),[]).then(({data:e})=>e),"v-621503b1":()=>v(()=>import("./kms.html-97385c0c.js"),[]).then(({data:e})=>e),"v-0a098e32":()=>v(()=>import("./nginx-proxy-manager.html-81ba2bea.js"),[]).then(({data:e})=>e),"v-1381a68e":()=>v(()=>import("./port-forwarding.html-60228250.js"),[]).then(({data:e})=>e),"v-e2a540b8":()=>v(()=>import("./server-building.html-593df673.js"),[]).then(({data:e})=>e),"v-1473bf53":()=>v(()=>import("./index.html-4686c0ad.js"),[]).then(({data:e})=>e),"v-4e65ec78":()=>v(()=>import("./disable.html-78a046cc.js"),[]).then(({data:e})=>e),"v-c151bf32":()=>v(()=>import("./encrypt.html-a049ffaa.js"),[]).then(({data:e})=>e),"v-438ffe52":()=>v(()=>import("./markdown.html-46872f94.js"),[]).then(({data:e})=>e),"v-6e19edb7":()=>v(()=>import("./page.html-e5bbf2ec.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>v(()=>import("./index.html-981ce121.js"),[]).then(({data:e})=>e),"v-5aa3d8ba":()=>v(()=>import("./intro.html-ff7ca9d0.js"),[]).then(({data:e})=>e),"v-367b840a":()=>v(()=>import("./slides.html-79167dbc.js"),[]).then(({data:e})=>e),"v-50451b6c":()=>v(()=>import("./1.html-a3870386.js"),[]).then(({data:e})=>e),"v-68175033":()=>v(()=>import("./1993.html-374cccee.js"),[]).then(({data:e})=>e),"v-2d0ad528":()=>v(()=>import("./index.html-22055b67.js"),[]).then(({data:e})=>e),"v-858cfdd6":()=>v(()=>import("./intro.html-d88a371c.js"),[]).then(({data:e})=>e),"v-269ae70f":()=>v(()=>import("./slides.html-4bd7292f.js"),[]).then(({data:e})=>e),"v-39702e16":()=>v(()=>import("./index.html-2dfa6706.js"),[]).then(({data:e})=>e),"v-5ce82b72":()=>v(()=>import("./best-emoji.html-de3f72b8.js"),[]).then(({data:e})=>e),"v-617c1b4d":()=>v(()=>import("./build-sub.html-88ef2265.js"),[]).then(({data:e})=>e),"v-60bfa634":()=>v(()=>import("./chatgpt-porxy.html-d6193e4a.js"),[]).then(({data:e})=>e),"v-20813fdb":()=>v(()=>import("./chatgpt.html-2203548d.js"),[]).then(({data:e})=>e),"v-35fb445f":()=>v(()=>import("./ddns.html-f097e966.js"),[]).then(({data:e})=>e),"v-25d20966":()=>v(()=>import("./github-actions-deploy.html-2dcd30e6.js"),[]).then(({data:e})=>e),"v-3898fbb3":()=>v(()=>import("./github-tools.html-12705a80.js"),[]).then(({data:e})=>e),"v-c789a424":()=>v(()=>import("./hackintosh.html-4ec9a70c.js"),[]).then(({data:e})=>e),"v-3382eb57":()=>v(()=>import("./hello-world.html-14612bf7.js"),[]).then(({data:e})=>e),"v-4e79b01d":()=>v(()=>import("./kms.html-f7dffb41.js"),[]).then(({data:e})=>e),"v-6f9ce55a":()=>v(()=>import("./nginx-proxy-manager.html-40164e33.js"),[]).then(({data:e})=>e),"v-14489725":()=>v(()=>import("./port-forwarding.html-6f72a5c7.js"),[]).then(({data:e})=>e),"v-a6926be0":()=>v(()=>import("./server-building.html-02a009b5.js"),[]).then(({data:e})=>e),"v-395cd082":()=>v(()=>import("./index.html-deb345b1.js"),[]).then(({data:e})=>e),"v-70eda030":()=>v(()=>import("./disable.html-3ec8de69.js"),[]).then(({data:e})=>e),"v-3777b6d3":()=>v(()=>import("./encrypt.html-4826ee8c.js"),[]).then(({data:e})=>e),"v-4a2a37eb":()=>v(()=>import("./markdown.html-9c531858.js"),[]).then(({data:e})=>e),"v-0e4acecb":()=>v(()=>import("./page.html-f2efc410.js"),[]).then(({data:e})=>e),"v-5881f2d8":()=>v(()=>import("./1.html-71ec92f4.js"),[]).then(({data:e})=>e),"v-08483147":()=>v(()=>import("./1993.html-b9574b86.js"),[]).then(({data:e})=>e),"v-2b5b33ba":()=>v(()=>import("./index.html-adffd729.js"),[]).then(({data:e})=>e),"v-7f09c63c":()=>v(()=>import("./best-emoji.html-23b639b4.js"),[]).then(({data:e})=>e),"v-1edea952":()=>v(()=>import("./build-sub.html-208e4fa0.js"),[]).then(({data:e})=>e),"v-6e71a9b9":()=>v(()=>import("./chatgpt-porxy.html-90deec36.js"),[]).then(({data:e})=>e),"v-4ec98b20":()=>v(()=>import("./chatgpt.html-b5b5b6f3.js"),[]).then(({data:e})=>e),"v-eb01718c":()=>v(()=>import("./ddns.html-3e6eb8f7.js"),[]).then(({data:e})=>e),"v-04b8ac5c":()=>v(()=>import("./github-actions-deploy.html-6d1afc09.js"),[]).then(({data:e})=>e),"v-2885f38e":()=>v(()=>import("./github-tools.html-8b4ce6f7.js"),[]).then(({data:e})=>e),"v-e9ab3eee":()=>v(()=>import("./hackintosh.html-c6c6b92c.js"),[]).then(({data:e})=>e),"v-227a0c1c":()=>v(()=>import("./hello-world.html-09e3060a.js"),[]).then(({data:e})=>e),"v-9767343c":()=>v(()=>import("./kms.html-f259ef24.js"),[]).then(({data:e})=>e),"v-76b21918":()=>v(()=>import("./nginx-proxy-manager.html-806aac15.js"),[]).then(({data:e})=>e),"v-7d87cd6a":()=>v(()=>import("./port-forwarding.html-d463d325.js"),[]).then(({data:e})=>e),"v-15f60055":()=>v(()=>import("./server-building.html-0150874e.js"),[]).then(({data:e})=>e),"v-2b64e284":()=>v(()=>import("./index.html-0e085ef0.js"),[]).then(({data:e})=>e),"v-c1942916":()=>v(()=>import("./disable.html-61d68028.js"),[]).then(({data:e})=>e),"v-65c00218":()=>v(()=>import("./encrypt.html-6bd3e91c.js"),[]).then(({data:e})=>e),"v-36295574":()=>v(()=>import("./markdown.html-fe0c1a9c.js"),[]).then(({data:e})=>e),"v-62ced1a6":()=>v(()=>import("./page.html-a33894fd.js"),[]).then(({data:e})=>e),"v-48a155dd":()=>v(()=>import("./1.html-efd29e37.js"),[]).then(({data:e})=>e),"v-5ccc3422":()=>v(()=>import("./1993.html-d22c985e.js"),[]).then(({data:e})=>e),"v-3706649a":()=>v(()=>import("./404.html-a1286a25.js"),[]).then(({data:e})=>e),"v-15054f24":()=>v(()=>import("./index.html-36b05b52.js"),[]).then(({data:e})=>e),"v-3839b0e0":()=>v(()=>import("./index.html-28f6ce88.js"),[]).then(({data:e})=>e),"v-2bf67255":()=>v(()=>import("./index.html-23d51dea.js"),[]).then(({data:e})=>e),"v-5bc93818":()=>v(()=>import("./index.html-bb914c66.js"),[]).then(({data:e})=>e),"v-744d024e":()=>v(()=>import("./index.html-049a994e.js"),[]).then(({data:e})=>e),"v-e52c881c":()=>v(()=>import("./index.html-dd92bd1d.js"),[]).then(({data:e})=>e),"v-154dc4c4":()=>v(()=>import("./index.html-f562a673.js"),[]).then(({data:e})=>e),"v-01560935":()=>v(()=>import("./index.html-0cea9727.js"),[]).then(({data:e})=>e),"v-9c48d85a":()=>v(()=>import("./index.html-c2ce1b78.js"),[]).then(({data:e})=>e),"v-484552dc":()=>v(()=>import("./index.html-24712add.js"),[]).then(({data:e})=>e),"v-54d7ff21":()=>v(()=>import("./index.html-44d88349.js"),[]).then(({data:e})=>e),"v-2c3ee7f5":()=>v(()=>import("./index.html-9ddc3ed1.js"),[]).then(({data:e})=>e),"v-27b02be6":()=>v(()=>import("./index.html-5927d627.js"),[]).then(({data:e})=>e),"v-2836033f":()=>v(()=>import("./index.html-2331c347.js"),[]).then(({data:e})=>e),"v-506407f4":()=>v(()=>import("./index.html-5ef04573.js"),[]).then(({data:e})=>e),"v-37a8c5a0":()=>v(()=>import("./index.html-54df182a.js"),[]).then(({data:e})=>e),"v-0379cba1":()=>v(()=>import("./index.html-a6b949a6.js"),[]).then(({data:e})=>e),"v-b7f3a660":()=>v(()=>import("./index.html-bccb4373.js"),[]).then(({data:e})=>e),"v-07d58212":()=>v(()=>import("./index.html-631906af.js"),[]).then(({data:e})=>e),"v-1f004e24":()=>v(()=>import("./index.html-185f3271.js"),[]).then(({data:e})=>e),"v-3a8afeec":()=>v(()=>import("./index.html-ea05b96a.js"),[]).then(({data:e})=>e),"v-99cacd98":()=>v(()=>import("./index.html-cc9e8f9d.js"),[]).then(({data:e})=>e),"v-284e8cfc":()=>v(()=>import("./index.html-b651158f.js"),[]).then(({data:e})=>e),"v-03d57386":()=>v(()=>import("./index.html-f5761f6a.js"),[]).then(({data:e})=>e),"v-49627fe2":()=>v(()=>import("./index.html-0b420705.js"),[]).then(({data:e})=>e),"v-40b68770":()=>v(()=>import("./index.html-3a9f157a.js"),[]).then(({data:e})=>e),"v-95f987f4":()=>v(()=>import("./index.html-724b4ad1.js"),[]).then(({data:e})=>e),"v-fbb94a6e":()=>v(()=>import("./index.html-2becdb8e.js"),[]).then(({data:e})=>e),"v-1fdcff68":()=>v(()=>import("./index.html-9461e2e9.js"),[]).then(({data:e})=>e),"v-53c32dc4":()=>v(()=>import("./index.html-26e8aee0.js"),[]).then(({data:e})=>e),"v-6fecf66a":()=>v(()=>import("./index.html-97eaede9.js"),[]).then(({data:e})=>e),"v-1fbd0d01":()=>v(()=>import("./index.html-45e9da17.js"),[]).then(({data:e})=>e),"v-6a4c233e":()=>v(()=>import("./index.html-359da05e.js"),[]).then(({data:e})=>e),"v-352da056":()=>v(()=>import("./index.html-1400c126.js"),[]).then(({data:e})=>e),"v-b30d1368":()=>v(()=>import("./index.html-bcbca2ae.js"),[]).then(({data:e})=>e),"v-55023325":()=>v(()=>import("./index.html-7e066fc5.js"),[]).then(({data:e})=>e),"v-0527fcfc":()=>v(()=>import("./index.html-be1ca739.js"),[]).then(({data:e})=>e),"v-2a32a3a8":()=>v(()=>import("./index.html-d18f86c2.js"),[]).then(({data:e})=>e),"v-19485e48":()=>v(()=>import("./index.html-679ffb3a.js"),[]).then(({data:e})=>e),"v-072edc12":()=>v(()=>import("./index.html-3747f491.js"),[]).then(({data:e})=>e),"v-5decfa84":()=>v(()=>import("./index.html-574c4b96.js"),[]).then(({data:e})=>e),"v-83e1f92e":()=>v(()=>import("./index.html-4243404d.js"),[]).then(({data:e})=>e),"v-17c6d53f":()=>v(()=>import("./index.html-085f29ed.js"),[]).then(({data:e})=>e),"v-1e447d61":()=>v(()=>import("./index.html-7e8dd85b.js"),[]).then(({data:e})=>e),"v-713c813c":()=>v(()=>import("./index.html-d756f031.js"),[]).then(({data:e})=>e),"v-a378ad66":()=>v(()=>import("./index.html-8e047b1f.js"),[]).then(({data:e})=>e),"v-91be36e0":()=>v(()=>import("./index.html-8f7c302c.js"),[]).then(({data:e})=>e),"v-7b167472":()=>v(()=>import("./index.html-acbf4d5d.js"),[]).then(({data:e})=>e),"v-1905daa0":()=>v(()=>import("./index.html-4cceb0c3.js"),[]).then(({data:e})=>e),"v-0f1d0e94":()=>v(()=>import("./index.html-ece582ad.js"),[]).then(({data:e})=>e),"v-0fe52c37":()=>v(()=>import("./index.html-4d2562e7.js"),[]).then(({data:e})=>e),"v-3ceeab45":()=>v(()=>import("./index.html-0a046f13.js"),[]).then(({data:e})=>e),"v-495c2a5c":()=>v(()=>import("./index.html-d981c09f.js"),[]).then(({data:e})=>e),"v-301b24f4":()=>v(()=>import("./index.html-626f6ba3.js"),[]).then(({data:e})=>e),"v-6a59b3bf":()=>v(()=>import("./index.html-83c28d60.js"),[]).then(({data:e})=>e),"v-d13d5aa8":()=>v(()=>import("./index.html-bcc19798.js"),[]).then(({data:e})=>e),"v-540234fd":()=>v(()=>import("./index.html-c9256ac9.js"),[]).then(({data:e})=>e),"v-2e14b8c3":()=>v(()=>import("./index.html-cbdb6146.js"),[]).then(({data:e})=>e),"v-4e9025f0":()=>v(()=>import("./index.html-4cce6341.js"),[]).then(({data:e})=>e),"v-62a85daf":()=>v(()=>import("./index.html-17df3c26.js"),[]).then(({data:e})=>e),"v-1434d78e":()=>v(()=>import("./index.html-1f569943.js"),[]).then(({data:e})=>e),"v-4ea8afad":()=>v(()=>import("./index.html-17082b8f.js"),[]).then(({data:e})=>e),"v-230c5884":()=>v(()=>import("./index.html-bcc52ef6.js"),[]).then(({data:e})=>e),"v-6d724c00":()=>v(()=>import("./index.html-a1d071f7.js"),[]).then(({data:e})=>e),"v-bb53961e":()=>v(()=>import("./index.html-7ec5ada2.js"),[]).then(({data:e})=>e),"v-69f11ebc":()=>v(()=>import("./index.html-f9a257f5.js"),[]).then(({data:e})=>e),"v-6de7b97b":()=>v(()=>import("./index.html-ce7f8a63.js"),[]).then(({data:e})=>e),"v-409d800e":()=>v(()=>import("./index.html-91ae13a7.js"),[]).then(({data:e})=>e),"v-03ba1c5a":()=>v(()=>import("./index.html-1218967e.js"),[]).then(({data:e})=>e),"v-05bf9c12":()=>v(()=>import("./index.html-e650b7d7.js"),[]).then(({data:e})=>e),"v-d4827004":()=>v(()=>import("./index.html-e06a6a85.js"),[]).then(({data:e})=>e),"v-ac203710":()=>v(()=>import("./index.html-065e1981.js"),[]).then(({data:e})=>e),"v-03d1f283":()=>v(()=>import("./index.html-b37fb657.js"),[]).then(({data:e})=>e),"v-31a38f34":()=>v(()=>import("./index.html-036d5575.js"),[]).then(({data:e})=>e),"v-24d008e3":()=>v(()=>import("./index.html-06b5c0ab.js"),[]).then(({data:e})=>e),"v-056557ee":()=>v(()=>import("./index.html-6f058255.js"),[]).then(({data:e})=>e),"v-e7d392ca":()=>v(()=>import("./index.html-b6b3695f.js"),[]).then(({data:e})=>e),"v-075c6c62":()=>v(()=>import("./index.html-2ffe42fc.js"),[]).then(({data:e})=>e),"v-6f7bfa04":()=>v(()=>import("./index.html-dd2110a7.js"),[]).then(({data:e})=>e),"v-2a59c5ab":()=>v(()=>import("./index.html-16bee170.js"),[]).then(({data:e})=>e),"v-7288faaa":()=>v(()=>import("./index.html-ea7a11a1.js"),[]).then(({data:e})=>e),"v-3bced2c4":()=>v(()=>import("./index.html-55a01c7e.js"),[]).then(({data:e})=>e),"v-2a724f68":()=>v(()=>import("./index.html-892ef4ff.js"),[]).then(({data:e})=>e),"v-4aa653ba":()=>v(()=>import("./index.html-24204360.js"),[]).then(({data:e})=>e),"v-079f963b":()=>v(()=>import("./index.html-b5dd3af1.js"),[]).then(({data:e})=>e),"v-3fc08c96":()=>v(()=>import("./index.html-1cd2d2a2.js"),[]).then(({data:e})=>e),"v-2df4c637":()=>v(()=>import("./index.html-cb260c51.js"),[]).then(({data:e})=>e),"v-1e449340":()=>v(()=>import("./index.html-05ee54d1.js"),[]).then(({data:e})=>e),"v-9d2e1698":()=>v(()=>import("./index.html-735eaea7.js"),[]).then(({data:e})=>e),"v-c6edb6ae":()=>v(()=>import("./index.html-1d3874dd.js"),[]).then(({data:e})=>e),"v-0017792c":()=>v(()=>import("./index.html-6fb777f3.js"),[]).then(({data:e})=>e),"v-7e751551":()=>v(()=>import("./index.html-b3e66cf8.js"),[]).then(({data:e})=>e),"v-29e33f95":()=>v(()=>import("./index.html-dbbb87a9.js"),[]).then(({data:e})=>e),"v-a16420b0":()=>v(()=>import("./index.html-dafb6d64.js"),[]).then(({data:e})=>e),"v-45c0e74e":()=>v(()=>import("./index.html-75b05eae.js"),[]).then(({data:e})=>e),"v-5f67f3f0":()=>v(()=>import("./index.html-387816c0.js"),[]).then(({data:e})=>e),"v-7c52c05a":()=>v(()=>import("./index.html-9f4f6e38.js"),[]).then(({data:e})=>e),"v-379233c0":()=>v(()=>import("./index.html-9362b72a.js"),[]).then(({data:e})=>e)},Md=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[],"locales":{"/":{"lang":"zh-TW","title":"風至萬始蘇","description":"炆途博客"},"/zh/":{"lang":"zh-CN","title":"风至万始苏","description":"炆途博客"},"/en/":{"lang":"en-US","title":"SpringVen2s","description":"Ven2s`Blog"}}}');var $d=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),zd=e=>{const t=new Set,n=[];return e.forEach(o=>{const r=$d(o);t.has(r)||(t.add(r),n.push(o))}),n},Nd=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Hd=e=>e.startsWith("ftp://"),En=e=>/^(https?:)?\/\//.test(e),Fd=/.md((\?|#).*)?$/,Po=(e,t="/")=>!!(En(e)||Hd(e)||e.startsWith("/")&&!e.startsWith(t)&&!Fd.test(e)),Rc=e=>/^mailto:/.test(e),jd=e=>/^tel:/.test(e),zo=e=>Object.prototype.toString.call(e)==="[object Object]",pl=e=>e[e.length-1]==="/"?e.slice(0,-1):e,Oc=e=>e[0]==="/"?e.slice(1):e,qd=(e,t)=>{const n=Object.keys(e).sort((o,r)=>{const a=r.split("/").length-o.split("/").length;return a!==0?a:r.length-o.length});for(const o of n)if(t.startsWith(o))return o;return"/"};const Bc={"v-8daa1a0e":A(()=>v(()=>import("./index.html-f03a35a3.js"),["assets/index.html-f03a35a3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-184f4da6":A(()=>v(()=>import("./intro.html-6ebdf9a2.js"),["assets/intro.html-6ebdf9a2.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2e3eac9e":A(()=>v(()=>import("./slides.html-568095eb.js"),["assets/slides.html-568095eb.js","assets/logo-a60c622a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-146a1089":A(()=>v(()=>import("./index.html-e326ce86.js"),["assets/index.html-e326ce86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-cd69af9a":A(()=>v(()=>import("./best-emoji.html-f5e14856.js"),["assets/best-emoji.html-f5e14856.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4f276fe1":A(()=>v(()=>import("./build-sub.html-d1d13ab0.js"),["assets/build-sub.html-d1d13ab0.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-28c690c8":A(()=>v(()=>import("./chatgpt-porxy.html-32746637.js"),["assets/chatgpt-porxy.html-32746637.js","assets/1-2e05d854.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-ef3ead22":A(()=>v(()=>import("./chatgpt.html-357a6111.js"),["assets/chatgpt.html-357a6111.js","assets/3-47e785b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d46b396a":A(()=>v(()=>import("./ddns.html-abab0619.js"),["assets/ddns.html-abab0619.js","assets/10-4225b4c6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d7b7dc3e":A(()=>v(()=>import("./github-actions-deploy.html-6e7badfd.js"),["assets/github-actions-deploy.html-6e7badfd.js","assets/4-8d3c8c2c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0d806e9f":A(()=>v(()=>import("./github-tools.html-b3178297.js"),["assets/github-tools.html-b3178297.js","assets/Everything.Search.Window-f42390fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-63fa6bda":A(()=>v(()=>import("./hackintosh.html-9cdfb880.js"),["assets/hackintosh.html-9cdfb880.js","assets/Python-d31beb86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-63ab6aeb":A(()=>v(()=>import("./hello-world.html-abf2de65.js"),["assets/hello-world.html-abf2de65.js","assets/gitlab-240b439b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-621503b1":A(()=>v(()=>import("./kms.html-736e097a.js"),["assets/kms.html-736e097a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0a098e32":A(()=>v(()=>import("./nginx-proxy-manager.html-b3b6c5b7.js"),["assets/nginx-proxy-manager.html-b3b6c5b7.js","assets/3-834f457d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1381a68e":A(()=>v(()=>import("./port-forwarding.html-be77039c.js"),["assets/port-forwarding.html-be77039c.js","assets/5-8aad1104.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e2a540b8":A(()=>v(()=>import("./server-building.html-b6c80695.js"),["assets/server-building.html-b6c80695.js","assets/live-torrent-6fc3c6a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1473bf53":A(()=>v(()=>import("./index.html-3ac7383c.js"),["assets/index.html-3ac7383c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4e65ec78":A(()=>v(()=>import("./disable.html-7e48c7f3.js"),["assets/disable.html-7e48c7f3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c151bf32":A(()=>v(()=>import("./encrypt.html-ed7b14c0.js"),["assets/encrypt.html-ed7b14c0.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-438ffe52":A(()=>v(()=>import("./markdown.html-ebed2a18.js"),["assets/markdown.html-ebed2a18.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6e19edb7":A(()=>v(()=>import("./page.html-852d4be9.js"),["assets/page.html-852d4be9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2d0a870d":A(()=>v(()=>import("./index.html-4aabda47.js"),["assets/index.html-4aabda47.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5aa3d8ba":A(()=>v(()=>import("./intro.html-df9b015f.js"),["assets/intro.html-df9b015f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-367b840a":A(()=>v(()=>import("./slides.html-3d907260.js"),["assets/slides.html-3d907260.js","assets/logo-a60c622a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-50451b6c":A(()=>v(()=>import("./1.html-727349ba.js"),["assets/1.html-727349ba.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-68175033":A(()=>v(()=>import("./1993.html-b7912761.js"),["assets/1993.html-b7912761.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2d0ad528":A(()=>v(()=>import("./index.html-cbe606b9.js"),["assets/index.html-cbe606b9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-858cfdd6":A(()=>v(()=>import("./intro.html-2274b65a.js"),["assets/intro.html-2274b65a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-269ae70f":A(()=>v(()=>import("./slides.html-71d1e827.js"),["assets/slides.html-71d1e827.js","assets/logo-a60c622a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-39702e16":A(()=>v(()=>import("./index.html-39670ee2.js"),["assets/index.html-39670ee2.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5ce82b72":A(()=>v(()=>import("./best-emoji.html-6a31ff37.js"),["assets/best-emoji.html-6a31ff37.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-617c1b4d":A(()=>v(()=>import("./build-sub.html-16ae7c2b.js"),["assets/build-sub.html-16ae7c2b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-60bfa634":A(()=>v(()=>import("./chatgpt-porxy.html-4a9c24e4.js"),["assets/chatgpt-porxy.html-4a9c24e4.js","assets/1-2e05d854.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-20813fdb":A(()=>v(()=>import("./chatgpt.html-4bbde2c8.js"),["assets/chatgpt.html-4bbde2c8.js","assets/3-47e785b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-35fb445f":A(()=>v(()=>import("./ddns.html-a48038e9.js"),["assets/ddns.html-a48038e9.js","assets/10-4225b4c6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-25d20966":A(()=>v(()=>import("./github-actions-deploy.html-4dcdd1af.js"),["assets/github-actions-deploy.html-4dcdd1af.js","assets/4-8d3c8c2c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3898fbb3":A(()=>v(()=>import("./github-tools.html-4328cbff.js"),["assets/github-tools.html-4328cbff.js","assets/Everything.Search.Window-f42390fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c789a424":A(()=>v(()=>import("./hackintosh.html-4aab07d9.js"),["assets/hackintosh.html-4aab07d9.js","assets/Python-d31beb86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3382eb57":A(()=>v(()=>import("./hello-world.html-450b4892.js"),["assets/hello-world.html-450b4892.js","assets/gitlab-240b439b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4e79b01d":A(()=>v(()=>import("./kms.html-580362eb.js"),["assets/kms.html-580362eb.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6f9ce55a":A(()=>v(()=>import("./nginx-proxy-manager.html-9159e0e6.js"),["assets/nginx-proxy-manager.html-9159e0e6.js","assets/3-834f457d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-14489725":A(()=>v(()=>import("./port-forwarding.html-f0135199.js"),["assets/port-forwarding.html-f0135199.js","assets/5-8aad1104.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-a6926be0":A(()=>v(()=>import("./server-building.html-95e665ff.js"),["assets/server-building.html-95e665ff.js","assets/live-torrent-6fc3c6a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-395cd082":A(()=>v(()=>import("./index.html-83f6a8bf.js"),["assets/index.html-83f6a8bf.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-70eda030":A(()=>v(()=>import("./disable.html-21e498a5.js"),["assets/disable.html-21e498a5.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3777b6d3":A(()=>v(()=>import("./encrypt.html-693d91fe.js"),["assets/encrypt.html-693d91fe.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4a2a37eb":A(()=>v(()=>import("./markdown.html-dd11fbe6.js"),["assets/markdown.html-dd11fbe6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0e4acecb":A(()=>v(()=>import("./page.html-c503185d.js"),["assets/page.html-c503185d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5881f2d8":A(()=>v(()=>import("./1.html-676afadb.js"),["assets/1.html-676afadb.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-08483147":A(()=>v(()=>import("./1993.html-453d75dd.js"),["assets/1993.html-453d75dd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2b5b33ba":A(()=>v(()=>import("./index.html-02de0cf7.js"),["assets/index.html-02de0cf7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7f09c63c":A(()=>v(()=>import("./best-emoji.html-3f3f1358.js"),["assets/best-emoji.html-3f3f1358.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1edea952":A(()=>v(()=>import("./build-sub.html-c643eed8.js"),["assets/build-sub.html-c643eed8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6e71a9b9":A(()=>v(()=>import("./chatgpt-porxy.html-ae746c62.js"),["assets/chatgpt-porxy.html-ae746c62.js","assets/1-2e05d854.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4ec98b20":A(()=>v(()=>import("./chatgpt.html-639b1603.js"),["assets/chatgpt.html-639b1603.js","assets/3-47e785b4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-eb01718c":A(()=>v(()=>import("./ddns.html-148c5382.js"),["assets/ddns.html-148c5382.js","assets/10-4225b4c6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-04b8ac5c":A(()=>v(()=>import("./github-actions-deploy.html-d9d65e2a.js"),["assets/github-actions-deploy.html-d9d65e2a.js","assets/4-8d3c8c2c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2885f38e":A(()=>v(()=>import("./github-tools.html-b42d411f.js"),["assets/github-tools.html-b42d411f.js","assets/Everything.Search.Window-f42390fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e9ab3eee":A(()=>v(()=>import("./hackintosh.html-74d5a9d4.js"),["assets/hackintosh.html-74d5a9d4.js","assets/Python-d31beb86.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-227a0c1c":A(()=>v(()=>import("./hello-world.html-2069cfce.js"),["assets/hello-world.html-2069cfce.js","assets/gitlab-240b439b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-9767343c":A(()=>v(()=>import("./kms.html-10e8bcfc.js"),["assets/kms.html-10e8bcfc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-76b21918":A(()=>v(()=>import("./nginx-proxy-manager.html-8a1ffc7b.js"),["assets/nginx-proxy-manager.html-8a1ffc7b.js","assets/3-834f457d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7d87cd6a":A(()=>v(()=>import("./port-forwarding.html-f0c2ae40.js"),["assets/port-forwarding.html-f0c2ae40.js","assets/5-8aad1104.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-15f60055":A(()=>v(()=>import("./server-building.html-51e01df8.js"),["assets/server-building.html-51e01df8.js","assets/live-torrent-6fc3c6a8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2b64e284":A(()=>v(()=>import("./index.html-6b8655fc.js"),["assets/index.html-6b8655fc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c1942916":A(()=>v(()=>import("./disable.html-6a1dfb27.js"),["assets/disable.html-6a1dfb27.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-65c00218":A(()=>v(()=>import("./encrypt.html-75a09588.js"),["assets/encrypt.html-75a09588.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-36295574":A(()=>v(()=>import("./markdown.html-2acd7b6b.js"),["assets/markdown.html-2acd7b6b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-62ced1a6":A(()=>v(()=>import("./page.html-508558bd.js"),["assets/page.html-508558bd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-48a155dd":A(()=>v(()=>import("./1.html-3c0f3351.js"),["assets/1.html-3c0f3351.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5ccc3422":A(()=>v(()=>import("./1993.html-bc74c78d.js"),["assets/1993.html-bc74c78d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3706649a":A(()=>v(()=>import("./404.html-471bc6b0.js"),["assets/404.html-471bc6b0.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-15054f24":A(()=>v(()=>import("./index.html-0b93cf73.js"),["assets/index.html-0b93cf73.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3839b0e0":A(()=>v(()=>import("./index.html-02e30421.js"),["assets/index.html-02e30421.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2bf67255":A(()=>v(()=>import("./index.html-62864cb6.js"),["assets/index.html-62864cb6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5bc93818":A(()=>v(()=>import("./index.html-b6450762.js"),["assets/index.html-b6450762.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-744d024e":A(()=>v(()=>import("./index.html-b065e4f3.js"),["assets/index.html-b065e4f3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e52c881c":A(()=>v(()=>import("./index.html-39386421.js"),["assets/index.html-39386421.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-154dc4c4":A(()=>v(()=>import("./index.html-6c52891c.js"),["assets/index.html-6c52891c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-01560935":A(()=>v(()=>import("./index.html-bd16ec94.js"),["assets/index.html-bd16ec94.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-9c48d85a":A(()=>v(()=>import("./index.html-4bdeafeb.js"),["assets/index.html-4bdeafeb.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-484552dc":A(()=>v(()=>import("./index.html-a20b3d0e.js"),["assets/index.html-a20b3d0e.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-54d7ff21":A(()=>v(()=>import("./index.html-a541ef4d.js"),["assets/index.html-a541ef4d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2c3ee7f5":A(()=>v(()=>import("./index.html-7a84a663.js"),["assets/index.html-7a84a663.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-27b02be6":A(()=>v(()=>import("./index.html-54132655.js"),["assets/index.html-54132655.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2836033f":A(()=>v(()=>import("./index.html-e5df3af0.js"),["assets/index.html-e5df3af0.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-506407f4":A(()=>v(()=>import("./index.html-36281664.js"),["assets/index.html-36281664.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-37a8c5a0":A(()=>v(()=>import("./index.html-16c0cf62.js"),["assets/index.html-16c0cf62.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0379cba1":A(()=>v(()=>import("./index.html-c96e429f.js"),["assets/index.html-c96e429f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-b7f3a660":A(()=>v(()=>import("./index.html-4500dd49.js"),["assets/index.html-4500dd49.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-07d58212":A(()=>v(()=>import("./index.html-f6ec000b.js"),["assets/index.html-f6ec000b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1f004e24":A(()=>v(()=>import("./index.html-3a508f30.js"),["assets/index.html-3a508f30.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3a8afeec":A(()=>v(()=>import("./index.html-8d8257bc.js"),["assets/index.html-8d8257bc.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-99cacd98":A(()=>v(()=>import("./index.html-8f26f2d3.js"),["assets/index.html-8f26f2d3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-284e8cfc":A(()=>v(()=>import("./index.html-c60565cf.js"),["assets/index.html-c60565cf.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-03d57386":A(()=>v(()=>import("./index.html-073a9728.js"),["assets/index.html-073a9728.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-49627fe2":A(()=>v(()=>import("./index.html-7c51d3f3.js"),["assets/index.html-7c51d3f3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-40b68770":A(()=>v(()=>import("./index.html-261dd89d.js"),["assets/index.html-261dd89d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-95f987f4":A(()=>v(()=>import("./index.html-fe6e42f6.js"),["assets/index.html-fe6e42f6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-fbb94a6e":A(()=>v(()=>import("./index.html-86e35b37.js"),["assets/index.html-86e35b37.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1fdcff68":A(()=>v(()=>import("./index.html-f398ebba.js"),["assets/index.html-f398ebba.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-53c32dc4":A(()=>v(()=>import("./index.html-88dbc9d8.js"),["assets/index.html-88dbc9d8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6fecf66a":A(()=>v(()=>import("./index.html-373fa2d6.js"),["assets/index.html-373fa2d6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1fbd0d01":A(()=>v(()=>import("./index.html-7c0117ee.js"),["assets/index.html-7c0117ee.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6a4c233e":A(()=>v(()=>import("./index.html-4880676f.js"),["assets/index.html-4880676f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-352da056":A(()=>v(()=>import("./index.html-28771830.js"),["assets/index.html-28771830.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-b30d1368":A(()=>v(()=>import("./index.html-48d65c05.js"),["assets/index.html-48d65c05.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-55023325":A(()=>v(()=>import("./index.html-9ad28e4f.js"),["assets/index.html-9ad28e4f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0527fcfc":A(()=>v(()=>import("./index.html-6a716d78.js"),["assets/index.html-6a716d78.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2a32a3a8":A(()=>v(()=>import("./index.html-75915da5.js"),["assets/index.html-75915da5.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-19485e48":A(()=>v(()=>import("./index.html-56e839dd.js"),["assets/index.html-56e839dd.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-072edc12":A(()=>v(()=>import("./index.html-3cff08a1.js"),["assets/index.html-3cff08a1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5decfa84":A(()=>v(()=>import("./index.html-caa8e43b.js"),["assets/index.html-caa8e43b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-83e1f92e":A(()=>v(()=>import("./index.html-de38beb1.js"),["assets/index.html-de38beb1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-17c6d53f":A(()=>v(()=>import("./index.html-fb9d8961.js"),["assets/index.html-fb9d8961.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1e447d61":A(()=>v(()=>import("./index.html-b39c26c9.js"),["assets/index.html-b39c26c9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-713c813c":A(()=>v(()=>import("./index.html-5acbda73.js"),["assets/index.html-5acbda73.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-a378ad66":A(()=>v(()=>import("./index.html-eef29ce6.js"),["assets/index.html-eef29ce6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-91be36e0":A(()=>v(()=>import("./index.html-07c528ef.js"),["assets/index.html-07c528ef.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7b167472":A(()=>v(()=>import("./index.html-1a9527ef.js"),["assets/index.html-1a9527ef.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1905daa0":A(()=>v(()=>import("./index.html-8d32521b.js"),["assets/index.html-8d32521b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0f1d0e94":A(()=>v(()=>import("./index.html-608346e5.js"),["assets/index.html-608346e5.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0fe52c37":A(()=>v(()=>import("./index.html-6ad0176f.js"),["assets/index.html-6ad0176f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3ceeab45":A(()=>v(()=>import("./index.html-bd1fb3ae.js"),["assets/index.html-bd1fb3ae.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-495c2a5c":A(()=>v(()=>import("./index.html-bbb4236a.js"),["assets/index.html-bbb4236a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-301b24f4":A(()=>v(()=>import("./index.html-fda5505f.js"),["assets/index.html-fda5505f.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6a59b3bf":A(()=>v(()=>import("./index.html-930797b5.js"),["assets/index.html-930797b5.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d13d5aa8":A(()=>v(()=>import("./index.html-7124ef39.js"),["assets/index.html-7124ef39.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-540234fd":A(()=>v(()=>import("./index.html-13c3140b.js"),["assets/index.html-13c3140b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2e14b8c3":A(()=>v(()=>import("./index.html-583de4b9.js"),["assets/index.html-583de4b9.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4e9025f0":A(()=>v(()=>import("./index.html-6fe215a7.js"),["assets/index.html-6fe215a7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-62a85daf":A(()=>v(()=>import("./index.html-bb63b3b1.js"),["assets/index.html-bb63b3b1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1434d78e":A(()=>v(()=>import("./index.html-1085f47b.js"),["assets/index.html-1085f47b.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4ea8afad":A(()=>v(()=>import("./index.html-3b004269.js"),["assets/index.html-3b004269.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-230c5884":A(()=>v(()=>import("./index.html-78351cfa.js"),["assets/index.html-78351cfa.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6d724c00":A(()=>v(()=>import("./index.html-0962ddc6.js"),["assets/index.html-0962ddc6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-bb53961e":A(()=>v(()=>import("./index.html-47e2cdf7.js"),["assets/index.html-47e2cdf7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-69f11ebc":A(()=>v(()=>import("./index.html-f42618c7.js"),["assets/index.html-f42618c7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6de7b97b":A(()=>v(()=>import("./index.html-d4c32911.js"),["assets/index.html-d4c32911.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-409d800e":A(()=>v(()=>import("./index.html-1fc979a3.js"),["assets/index.html-1fc979a3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-03ba1c5a":A(()=>v(()=>import("./index.html-a1e8ab4c.js"),["assets/index.html-a1e8ab4c.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-05bf9c12":A(()=>v(()=>import("./index.html-bb5500b1.js"),["assets/index.html-bb5500b1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-d4827004":A(()=>v(()=>import("./index.html-365613d1.js"),["assets/index.html-365613d1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-ac203710":A(()=>v(()=>import("./index.html-a31bc246.js"),["assets/index.html-a31bc246.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-03d1f283":A(()=>v(()=>import("./index.html-4f08450d.js"),["assets/index.html-4f08450d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-31a38f34":A(()=>v(()=>import("./index.html-5270fd54.js"),["assets/index.html-5270fd54.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-24d008e3":A(()=>v(()=>import("./index.html-71b608e6.js"),["assets/index.html-71b608e6.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-056557ee":A(()=>v(()=>import("./index.html-104129a3.js"),["assets/index.html-104129a3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-e7d392ca":A(()=>v(()=>import("./index.html-3ac27e0d.js"),["assets/index.html-3ac27e0d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-075c6c62":A(()=>v(()=>import("./index.html-d90acc18.js"),["assets/index.html-d90acc18.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-6f7bfa04":A(()=>v(()=>import("./index.html-60791d78.js"),["assets/index.html-60791d78.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2a59c5ab":A(()=>v(()=>import("./index.html-07f69664.js"),["assets/index.html-07f69664.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7288faaa":A(()=>v(()=>import("./index.html-66a72ee8.js"),["assets/index.html-66a72ee8.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3bced2c4":A(()=>v(()=>import("./index.html-20cc7c70.js"),["assets/index.html-20cc7c70.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2a724f68":A(()=>v(()=>import("./index.html-700169d1.js"),["assets/index.html-700169d1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-4aa653ba":A(()=>v(()=>import("./index.html-9b813aa3.js"),["assets/index.html-9b813aa3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-079f963b":A(()=>v(()=>import("./index.html-4950996a.js"),["assets/index.html-4950996a.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-3fc08c96":A(()=>v(()=>import("./index.html-fbcc03c4.js"),["assets/index.html-fbcc03c4.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-2df4c637":A(()=>v(()=>import("./index.html-5173c95d.js"),["assets/index.html-5173c95d.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-1e449340":A(()=>v(()=>import("./index.html-c40db2ae.js"),["assets/index.html-c40db2ae.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-9d2e1698":A(()=>v(()=>import("./index.html-bc2145f7.js"),["assets/index.html-bc2145f7.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-c6edb6ae":A(()=>v(()=>import("./index.html-3ac0b5b5.js"),["assets/index.html-3ac0b5b5.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-0017792c":A(()=>v(()=>import("./index.html-99532e34.js"),["assets/index.html-99532e34.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7e751551":A(()=>v(()=>import("./index.html-cc563571.js"),["assets/index.html-cc563571.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-29e33f95":A(()=>v(()=>import("./index.html-79a61e18.js"),["assets/index.html-79a61e18.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-a16420b0":A(()=>v(()=>import("./index.html-8f865cf1.js"),["assets/index.html-8f865cf1.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-45c0e74e":A(()=>v(()=>import("./index.html-54d9c5b2.js"),["assets/index.html-54d9c5b2.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-5f67f3f0":A(()=>v(()=>import("./index.html-5c29d4b3.js"),["assets/index.html-5c29d4b3.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-7c52c05a":A(()=>v(()=>import("./index.html-2892c469.js"),["assets/index.html-2892c469.js","assets/plugin-vue_export-helper-c27b6911.js"])),"v-379233c0":A(()=>v(()=>import("./index.html-bd48a4a1.js"),["assets/index.html-bd48a4a1.js","assets/plugin-vue_export-helper-c27b6911.js"]))};var Gd=Symbol(""),Sc=Symbol(""),Wd=zt({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),ce=()=>{const e=me(Sc);if(!e)throw new Error("pageData() is called without provider.");return e},Vc=Symbol(""),ge=()=>{const e=me(Vc);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Mc=Symbol(""),Ud=()=>{const e=me(Mc);if(!e)throw new Error("usePageHead() is called without provider.");return e},Kd=Symbol(""),$c=Symbol(""),fl=()=>{const e=me($c);if(!e)throw new Error("usePageLang() is called without provider.");return e},zc=Symbol(""),Yd=()=>{const e=me(zc);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Jd=W(Vd),vl=Symbol(""),Dt=()=>{const e=me(vl);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Ln=W(Md),Nc=()=>Ln,Hc=Symbol(""),eo=()=>{const e=me(Hc);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},Zd=Symbol(""),Qd="Layout",Xd="NotFound",Ot=So({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=Jd.value[e];return await(t==null?void 0:t())??Wd},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const o=se(t.description)?t.description:n.description,r=[...Y(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:o}]];return zd(r)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const o=e.frontmatter.layout;se(o)?n=o:n=Qd}else n=Xd;return t[n]},resolveRouteLocale:(e,t)=>qd(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Vr=V({name:"ClientOnly",setup(e,t){const n=W(!1);return be(()=>{n.value=!0}),()=>{var o,r;return n.value?(r=(o=t.slots).default)==null?void 0:r.call(o):null}}}),Fc=V({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=ce(),n=k(()=>Bc[e.pageKey||t.value.key]);return()=>n.value?s(n.value):s("div","404 Not Found")}}),At=(e={})=>e,Le=e=>En(e)?e:`/${Oc(e)}`;const ep={};/*! + * vue-router v4.2.5 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const Tn=typeof window<"u";function tp(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const _e=Object.assign;function ea(e,t){const n={};for(const o in t){const r=t[o];n[o]=bt(r)?r.map(e):e(r)}return n}const bo=()=>{},bt=Array.isArray,np=/\/$/,op=e=>e.replace(np,"");function ta(e,t,n="/"){let o,r={},a="",l="";const i=t.indexOf("#");let u=t.indexOf("?");return i=0&&(u=-1),u>-1&&(o=t.slice(0,u),a=t.slice(u+1,i>-1?i:t.length),r=e(a)),i>-1&&(o=o||t.slice(0,i),l=t.slice(i,t.length)),o=ip(o??t,n),{fullPath:o+(a&&"?")+a+l,path:o,query:r,hash:l}}function rp(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Bi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ap(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&qn(t.matched[o],n.matched[r])&&jc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function qn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function jc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!lp(e[n],t[n]))return!1;return!0}function lp(e,t){return bt(e)?Si(e,t):bt(t)?Si(t,e):e===t}function Si(e,t){return bt(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function ip(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),r=o[o.length-1];(r===".."||r===".")&&o.push("");let a=n.length-1,l,i;for(l=0;l1&&a--;else break;return n.slice(0,a).join("/")+"/"+o.slice(l-(l===o.length?1:0)).join("/")}var Do;(function(e){e.pop="pop",e.push="push"})(Do||(Do={}));var Eo;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Eo||(Eo={}));function sp(e){if(!e)if(Tn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),op(e)}const cp=/^[^#]+#/;function up(e,t){return e.replace(cp,"#")+t}function dp(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Mr=()=>({left:window.pageXOffset,top:window.pageYOffset});function pp(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=dp(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Vi(e,t){return(history.state?history.state.position-t:-1)+e}const La=new Map;function fp(e,t){La.set(e,t)}function vp(e){const t=La.get(e);return La.delete(e),t}let hp=()=>location.protocol+"//"+location.host;function qc(e,t){const{pathname:n,search:o,hash:r}=t,a=e.indexOf("#");if(a>-1){let i=r.includes(e.slice(a))?e.slice(a).length:1,u=r.slice(i);return u[0]!=="/"&&(u="/"+u),Bi(u,"")}return Bi(n,e)+o+r}function mp(e,t,n,o){let r=[],a=[],l=null;const i=({state:f})=>{const h=qc(e,location),g=n.value,y=t.value;let T=0;if(f){if(n.value=h,t.value=f,l&&l===g){l=null;return}T=y?f.position-y.position:0}else o(h);r.forEach(b=>{b(n.value,g,{delta:T,type:Do.pop,direction:T?T>0?Eo.forward:Eo.back:Eo.unknown})})};function u(){l=n.value}function c(f){r.push(f);const h=()=>{const g=r.indexOf(f);g>-1&&r.splice(g,1)};return a.push(h),h}function d(){const{history:f}=window;f.state&&f.replaceState(_e({},f.state,{scroll:Mr()}),"")}function p(){for(const f of a)f();a=[],window.removeEventListener("popstate",i),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",i),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:u,listen:c,destroy:p}}function Mi(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?Mr():null}}function gp(e){const{history:t,location:n}=window,o={value:qc(e,n)},r={value:t.state};r.value||a(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(u,c,d){const p=e.indexOf("#"),f=p>-1?(n.host&&document.querySelector("base")?e:e.slice(p))+u:hp()+e+u;try{t[d?"replaceState":"pushState"](c,"",f),r.value=c}catch(h){console.error(h),n[d?"replace":"assign"](f)}}function l(u,c){const d=_e({},t.state,Mi(r.value.back,u,r.value.forward,!0),c,{position:r.value.position});a(u,d,!0),o.value=u}function i(u,c){const d=_e({},r.value,t.state,{forward:u,scroll:Mr()});a(d.current,d,!0);const p=_e({},Mi(o.value,u,null),{position:d.position+1},c);a(u,p,!1),o.value=u}return{location:o,state:r,push:i,replace:l}}function _p(e){e=sp(e);const t=gp(e),n=mp(e,t.state,t.location,t.replace);function o(a,l=!0){l||n.pauseListeners(),history.go(a)}const r=_e({location:"",base:e,go:o,createHref:up.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function bp(e){return typeof e=="string"||e&&typeof e=="object"}function Gc(e){return typeof e=="string"||typeof e=="symbol"}const Bt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Wc=Symbol("");var $i;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})($i||($i={}));function Gn(e,t){return _e(new Error,{type:e,[Wc]:!0},t)}function Ct(e,t){return e instanceof Error&&Wc in e&&(t==null||!!(e.type&t))}const zi="[^/]+?",Ep={sensitive:!1,strict:!1,start:!0,end:!0},yp=/[.+*?^${}()[\]/\\]/g;function Ap(e,t){const n=_e({},Ep,t),o=[];let r=n.start?"^":"";const a=[];for(const c of e){const d=c.length?[]:[90];n.strict&&!c.length&&(r+="/");for(let p=0;pt.length?t.length===1&&t[0]===40+40?1:-1:0}function kp(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Tp={type:0,value:""},Ip=/[a-zA-Z0-9_]/;function Lp(e){if(!e)return[[]];if(e==="/")return[[Tp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=0,o=n;const r=[];let a;function l(){a&&r.push(a),a=[]}let i=0,u,c="",d="";function p(){c&&(n===0?a.push({type:0,value:c}):n===1||n===2||n===3?(a.length>1&&(u==="*"||u==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:c,regexp:d,repeatable:u==="*"||u==="+",optional:u==="*"||u==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=u}for(;i{l(L)}:bo}function l(d){if(Gc(d)){const p=o.get(d);p&&(o.delete(d),n.splice(n.indexOf(p),1),p.children.forEach(l),p.alias.forEach(l))}else{const p=n.indexOf(d);p>-1&&(n.splice(p,1),d.record.name&&o.delete(d.record.name),d.children.forEach(l),d.alias.forEach(l))}}function i(){return n}function u(d){let p=0;for(;p=0&&(d.record.path!==n[p].record.path||!Uc(d,n[p]));)p++;n.splice(p,0,d),d.record.name&&!Fi(d)&&o.set(d.record.name,d)}function c(d,p){let f,h={},g,y;if("name"in d&&d.name){if(f=o.get(d.name),!f)throw Gn(1,{location:d});y=f.record.name,h=_e(Hi(p.params,f.keys.filter(L=>!L.optional).map(L=>L.name)),d.params&&Hi(d.params,f.keys.map(L=>L.name))),g=f.stringify(h)}else if("path"in d)g=d.path,f=n.find(L=>L.re.test(g)),f&&(h=f.parse(g),y=f.record.name);else{if(f=p.name?o.get(p.name):n.find(L=>L.re.test(p.path)),!f)throw Gn(1,{location:d,currentLocation:p});y=f.record.name,h=_e({},p.params,d.params),g=f.stringify(h)}const T=[];let b=f;for(;b;)T.unshift(b.record),b=b.parent;return{name:y,path:g,params:h,matched:T,meta:Rp(T)}}return e.forEach(d=>a(d)),{addRoute:a,resolve:c,removeRoute:l,getRoutes:i,getRecordMatcher:r}}function Hi(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function xp(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:Cp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function Cp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function Fi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Rp(e){return e.reduce((t,n)=>_e(t,n.meta),{})}function ji(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}function Uc(e,t){return t.children.some(n=>n===e||Uc(e,n))}const Kc=/#/g,Op=/&/g,Bp=/\//g,Sp=/=/g,Vp=/\?/g,Yc=/\+/g,Mp=/%5B/g,$p=/%5D/g,Jc=/%5E/g,zp=/%60/g,Zc=/%7B/g,Np=/%7C/g,Qc=/%7D/g,Hp=/%20/g;function hl(e){return encodeURI(""+e).replace(Np,"|").replace(Mp,"[").replace($p,"]")}function Fp(e){return hl(e).replace(Zc,"{").replace(Qc,"}").replace(Jc,"^")}function Pa(e){return hl(e).replace(Yc,"%2B").replace(Hp,"+").replace(Kc,"%23").replace(Op,"%26").replace(zp,"`").replace(Zc,"{").replace(Qc,"}").replace(Jc,"^")}function jp(e){return Pa(e).replace(Sp,"%3D")}function qp(e){return hl(e).replace(Kc,"%23").replace(Vp,"%3F")}function Gp(e){return e==null?"":qp(e).replace(Bp,"%2F")}function kr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Wp(e){const t={};if(e===""||e==="?")return t;const o=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ra&&Pa(a)):[o&&Pa(o)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+n,a!=null&&(t+="="+a))})}return t}function Up(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=bt(o)?o.map(r=>r==null?null:""+r):o==null?o:""+o)}return t}const Kp=Symbol(""),Gi=Symbol(""),$r=Symbol(""),ml=Symbol(""),Da=Symbol("");function co(){let e=[];function t(o){return e.push(o),()=>{const r=e.indexOf(o);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Zt(e,t,n,o,r){const a=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise((l,i)=>{const u=p=>{p===!1?i(Gn(4,{from:n,to:t})):p instanceof Error?i(p):bp(p)?i(Gn(2,{from:t,to:p})):(a&&o.enterCallbacks[r]===a&&typeof p=="function"&&a.push(p),l())},c=e.call(o&&o.instances[r],t,n,u);let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(p=>i(p))})}function na(e,t,n,o){const r=[];for(const a of e)for(const l in a.components){let i=a.components[l];if(!(t!=="beforeRouteEnter"&&!a.instances[l]))if(Yp(i)){const c=(i.__vccOpts||i)[t];c&&r.push(Zt(c,n,o,a,l))}else{let u=i();r.push(()=>u.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${l}" at "${a.path}"`));const d=tp(c)?c.default:c;a.components[l]=d;const f=(d.__vccOpts||d)[t];return f&&Zt(f,n,o,a,l)()}))}}return r}function Yp(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function xa(e){const t=me($r),n=me(ml),o=k(()=>t.resolve(fn(e.to))),r=k(()=>{const{matched:u}=o.value,{length:c}=u,d=u[c-1],p=n.matched;if(!d||!p.length)return-1;const f=p.findIndex(qn.bind(null,d));if(f>-1)return f;const h=Wi(u[c-2]);return c>1&&Wi(d)===h&&p[p.length-1].path!==h?p.findIndex(qn.bind(null,u[c-2])):f}),a=k(()=>r.value>-1&&Xp(n.params,o.value.params)),l=k(()=>r.value>-1&&r.value===n.matched.length-1&&jc(n.params,o.value.params));function i(u={}){return Qp(u)?t[fn(e.replace)?"replace":"push"](fn(e.to)).catch(bo):Promise.resolve()}return{route:o,href:k(()=>o.value.href),isActive:a,isExactActive:l,navigate:i}}const Jp=V({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:xa,setup(e,{slots:t}){const n=So(xa(e)),{options:o}=me($r),r=k(()=>({[Ui(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Ui(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const a=t.default&&t.default(n);return e.custom?a:s("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},a)}}}),Zp=Jp;function Qp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Xp(e,t){for(const n in t){const o=t[n],r=e[n];if(typeof o=="string"){if(o!==r)return!1}else if(!bt(r)||r.length!==o.length||o.some((a,l)=>a!==r[l]))return!1}return!0}function Wi(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ui=(e,t,n)=>e??t??n,e3=V({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=me(Da),r=k(()=>e.route||o.value),a=me(Gi,0),l=k(()=>{let c=fn(a);const{matched:d}=r.value;let p;for(;(p=d[c])&&!p.components;)c++;return c}),i=k(()=>r.value.matched[l.value]);gt(Gi,k(()=>l.value+1)),gt(Kp,i),gt(Da,r);const u=W();return ue(()=>[u.value,i.value,e.name],([c,d,p],[f,h,g])=>{d&&(d.instances[p]=c,h&&h!==d&&c&&c===f&&(d.leaveGuards.size||(d.leaveGuards=h.leaveGuards),d.updateGuards.size||(d.updateGuards=h.updateGuards))),c&&d&&(!h||!qn(d,h)||!f)&&(d.enterCallbacks[p]||[]).forEach(y=>y(c))},{flush:"post"}),()=>{const c=r.value,d=e.name,p=i.value,f=p&&p.components[d];if(!f)return Ki(n.default,{Component:f,route:c});const h=p.props[d],g=h?h===!0?c.params:typeof h=="function"?h(c):h:null,T=s(f,_e({},g,t,{onVnodeUnmounted:b=>{b.component.isUnmounted&&(p.instances[d]=null)},ref:u}));return Ki(n.default,{Component:T,route:c})||T}}});function Ki(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Xc=e3;function t3(e){const t=Dp(e.routes,e),n=e.parseQuery||Wp,o=e.stringifyQuery||qi,r=e.history,a=co(),l=co(),i=co(),u=Ne(Bt);let c=Bt;Tn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=ea.bind(null,D=>""+D),p=ea.bind(null,Gp),f=ea.bind(null,kr);function h(D,G){let N,Z;return Gc(D)?(N=t.getRecordMatcher(D),Z=G):Z=D,t.addRoute(Z,N)}function g(D){const G=t.getRecordMatcher(D);G&&t.removeRoute(G)}function y(){return t.getRoutes().map(D=>D.record)}function T(D){return!!t.getRecordMatcher(D)}function b(D,G){if(G=_e({},G||u.value),typeof D=="string"){const w=ta(n,D,G.path),P=t.resolve({path:w.path},G),C=r.createHref(w.fullPath);return _e(w,P,{params:f(P.params),hash:kr(w.hash),redirectedFrom:void 0,href:C})}let N;if("path"in D)N=_e({},D,{path:ta(n,D.path,G.path).path});else{const w=_e({},D.params);for(const P in w)w[P]==null&&delete w[P];N=_e({},D,{params:p(w)}),G.params=p(G.params)}const Z=t.resolve(N,G),pe=D.hash||"";Z.params=d(f(Z.params));const m=rp(o,_e({},D,{hash:Fp(pe),path:Z.path})),_=r.createHref(m);return _e({fullPath:m,hash:pe,query:o===qi?Up(D.query):D.query||{}},Z,{redirectedFrom:void 0,href:_})}function L(D){return typeof D=="string"?ta(n,D,u.value.path):_e({},D)}function E(D,G){if(c!==D)return Gn(8,{from:G,to:D})}function I(D){return z(D)}function B(D){return I(_e(L(D),{replace:!0}))}function x(D){const G=D.matched[D.matched.length-1];if(G&&G.redirect){const{redirect:N}=G;let Z=typeof N=="function"?N(D):N;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=L(Z):{path:Z},Z.params={}),_e({query:D.query,hash:D.hash,params:"path"in Z?{}:D.params},Z)}}function z(D,G){const N=c=b(D),Z=u.value,pe=D.state,m=D.force,_=D.replace===!0,w=x(N);if(w)return z(_e(L(w),{state:typeof w=="object"?_e({},pe,w.state):pe,force:m,replace:_}),G||N);const P=N;P.redirectedFrom=G;let C;return!m&&ap(o,Z,N)&&(C=Gn(16,{to:P,from:Z}),nt(Z,Z,!0,!1)),(C?Promise.resolve(C):H(P,Z)).catch(R=>Ct(R)?Ct(R,2)?R:wt(R):J(R,P,Z)).then(R=>{if(R){if(Ct(R,2))return z(_e({replace:_},L(R.to),{state:typeof R.to=="object"?_e({},pe,R.to.state):pe,force:m}),G||P)}else R=j(P,Z,!0,_,pe);return Q(P,Z,R),R})}function M(D,G){const N=E(D,G);return N?Promise.reject(N):Promise.resolve()}function S(D){const G=xt.values().next().value;return G&&typeof G.runWithContext=="function"?G.runWithContext(D):D()}function H(D,G){let N;const[Z,pe,m]=n3(D,G);N=na(Z.reverse(),"beforeRouteLeave",D,G);for(const w of Z)w.leaveGuards.forEach(P=>{N.push(Zt(P,D,G))});const _=M.bind(null,D,G);return N.push(_),Ce(N).then(()=>{N=[];for(const w of a.list())N.push(Zt(w,D,G));return N.push(_),Ce(N)}).then(()=>{N=na(pe,"beforeRouteUpdate",D,G);for(const w of pe)w.updateGuards.forEach(P=>{N.push(Zt(P,D,G))});return N.push(_),Ce(N)}).then(()=>{N=[];for(const w of m)if(w.beforeEnter)if(bt(w.beforeEnter))for(const P of w.beforeEnter)N.push(Zt(P,D,G));else N.push(Zt(w.beforeEnter,D,G));return N.push(_),Ce(N)}).then(()=>(D.matched.forEach(w=>w.enterCallbacks={}),N=na(m,"beforeRouteEnter",D,G),N.push(_),Ce(N))).then(()=>{N=[];for(const w of l.list())N.push(Zt(w,D,G));return N.push(_),Ce(N)}).catch(w=>Ct(w,8)?w:Promise.reject(w))}function Q(D,G,N){i.list().forEach(Z=>S(()=>Z(D,G,N)))}function j(D,G,N,Z,pe){const m=E(D,G);if(m)return m;const _=G===Bt,w=Tn?history.state:{};N&&(Z||_?r.replace(D.fullPath,_e({scroll:_&&w&&w.scroll},pe)):r.push(D.fullPath,pe)),u.value=D,nt(D,G,N,_),wt()}let te;function Pe(){te||(te=r.listen((D,G,N)=>{if(!kt.listening)return;const Z=b(D),pe=x(Z);if(pe){z(_e(pe,{replace:!0}),Z).catch(bo);return}c=Z;const m=u.value;Tn&&fp(Vi(m.fullPath,N.delta),Mr()),H(Z,m).catch(_=>Ct(_,12)?_:Ct(_,2)?(z(_.to,Z).then(w=>{Ct(w,20)&&!N.delta&&N.type===Do.pop&&r.go(-1,!1)}).catch(bo),Promise.reject()):(N.delta&&r.go(-N.delta,!1),J(_,Z,m))).then(_=>{_=_||j(Z,m,!1),_&&(N.delta&&!Ct(_,8)?r.go(-N.delta,!1):N.type===Do.pop&&Ct(_,20)&&r.go(-1,!1)),Q(Z,m,_)}).catch(bo)}))}let Ie=co(),U=co(),ne;function J(D,G,N){wt(D);const Z=U.list();return Z.length?Z.forEach(pe=>pe(D,G,N)):console.error(D),Promise.reject(D)}function xe(){return ne&&u.value!==Bt?Promise.resolve():new Promise((D,G)=>{Ie.add([D,G])})}function wt(D){return ne||(ne=!D,Pe(),Ie.list().forEach(([G,N])=>D?N(D):G()),Ie.reset()),D}function nt(D,G,N,Z){const{scrollBehavior:pe}=e;if(!Tn||!pe)return Promise.resolve();const m=!N&&vp(Vi(D.fullPath,0))||(Z||!N)&&history.state&&history.state.scroll||null;return rn().then(()=>pe(D,G,m)).then(_=>_&&pp(_)).catch(_=>J(_,D,G))}const Ve=D=>r.go(D);let Je;const xt=new Set,kt={currentRoute:u,listening:!0,addRoute:h,removeRoute:g,hasRoute:T,getRoutes:y,resolve:b,options:e,push:I,replace:B,go:Ve,back:()=>Ve(-1),forward:()=>Ve(1),beforeEach:a.add,beforeResolve:l.add,afterEach:i.add,onError:U.add,isReady:xe,install(D){const G=this;D.component("RouterLink",Zp),D.component("RouterView",Xc),D.config.globalProperties.$router=G,Object.defineProperty(D.config.globalProperties,"$route",{enumerable:!0,get:()=>fn(u)}),Tn&&!Je&&u.value===Bt&&(Je=!0,I(r.location).catch(pe=>{}));const N={};for(const pe in Bt)Object.defineProperty(N,pe,{get:()=>u.value[pe],enumerable:!0});D.provide($r,G),D.provide(ml,js(N)),D.provide(Da,u);const Z=D.unmount;xt.add(D),D.unmount=function(){xt.delete(D),xt.size<1&&(c=Bt,te&&te(),te=null,u.value=Bt,Je=!1,ne=!1),Z()}}};function Ce(D){return D.reduce((G,N)=>G.then(()=>S(N)),Promise.resolve())}return kt}function n3(e,t){const n=[],o=[],r=[],a=Math.max(t.matched.length,e.matched.length);for(let l=0;lqn(c,i))?o.push(i):n.push(i));const u=e.matched[l];u&&(t.matched.find(c=>qn(c,u))||r.push(u))}return[n,o,r]}function Fe(){return me($r)}function ut(){return me(ml)}var qe=Uint8Array,Pn=Uint16Array,o3=Int32Array,eu=new qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),tu=new qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),r3=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),nu=function(e,t){for(var n=new Pn(31),o=0;o<31;++o)n[o]=t+=1<>1|(Te&21845)<<1;Wt=(Wt&52428)>>2|(Wt&13107)<<2,Wt=(Wt&61680)>>4|(Wt&3855)<<4,Ca[Te]=((Wt&65280)>>8|(Wt&255)<<8)>>1}var yo=function(e,t,n){for(var o=e.length,r=0,a=new Pn(t);r>u]=c}else for(i=new Pn(o),r=0;r>15-e[r]);return i},No=new qe(288);for(var Te=0;Te<144;++Te)No[Te]=8;for(var Te=144;Te<256;++Te)No[Te]=9;for(var Te=256;Te<280;++Te)No[Te]=7;for(var Te=280;Te<288;++Te)No[Te]=8;var au=new qe(32);for(var Te=0;Te<32;++Te)au[Te]=5;var s3=yo(No,9,1),c3=yo(au,5,1),oa=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},pt=function(e,t,n){var o=t/8|0;return(e[o]|e[o+1]<<8)>>(t&7)&n},ra=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},u3=function(e){return(e+7)/8|0},gl=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new qe(e.subarray(t,n))},d3=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],at=function(e,t,n){var o=new Error(t||d3[e]);if(o.code=e,Error.captureStackTrace&&Error.captureStackTrace(o,at),!n)throw o;return o},p3=function(e,t,n,o){var r=e.length,a=o?o.length:0;if(!r||t.f&&!t.l)return n||new qe(0);var l=!n,i=l||t.i!=2,u=t.i;l&&(n=new qe(r*3));var c=function(pe){var m=n.length;if(pe>m){var _=new qe(Math.max(m*2,pe));_.set(n),n=_}},d=t.f||0,p=t.p||0,f=t.b||0,h=t.l,g=t.d,y=t.m,T=t.n,b=r*8;do{if(!h){d=pt(e,p,1);var L=pt(e,p+1,3);if(p+=3,L)if(L==1)h=s3,g=c3,y=9,T=5;else if(L==2){var x=pt(e,p,31)+257,z=pt(e,p+10,15)+4,M=x+pt(e,p+5,31)+1;p+=14;for(var S=new qe(M),H=new qe(19),Q=0;Q>4;if(E<16)S[Q++]=E;else{var U=0,ne=0;for(E==16?(ne=3+pt(e,p,3),p+=2,U=S[Q-1]):E==17?(ne=3+pt(e,p,7),p+=3):E==18&&(ne=11+pt(e,p,127),p+=7);ne--;)S[Q++]=U}}var J=S.subarray(0,x),xe=S.subarray(x);y=oa(J),T=oa(xe),h=yo(J,y,1),g=yo(xe,T,1)}else at(1);else{var E=u3(p)+4,I=e[E-4]|e[E-3]<<8,B=E+I;if(B>r){u&&at(0);break}i&&c(f+I),n.set(e.subarray(E,B),f),t.b=f+=I,t.p=p=B*8,t.f=d;continue}if(p>b){u&&at(0);break}}i&&c(f+131072);for(var wt=(1<>4;if(p+=U&15,p>b){u&&at(0);break}if(U||at(2),Je<256)n[f++]=Je;else if(Je==256){Ve=p,h=null;break}else{var xt=Je-254;if(Je>264){var Q=Je-257,kt=eu[Q];xt=pt(e,p,(1<>4;Ce||at(3),p+=Ce&15;var xe=i3[D];if(D>3){var kt=tu[D];xe+=ra(e,p)&(1<b){u&&at(0);break}i&&c(f+131072);var G=f+xt;if(f>4>7||(e[0]<<8|e[1])%31)&&at(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&at(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function h3(e,t){return p3(e.subarray(v3(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var Yi=typeof TextEncoder<"u"&&new TextEncoder,Ra=typeof TextDecoder<"u"&&new TextDecoder,m3=0;try{Ra.decode(f3,{stream:!0}),m3=1}catch{}var g3=function(e){for(var t="",n=0;;){var o=e[n++],r=(o>127)+(o>223)+(o>239);if(n+r>e.length)return{s:t,r:gl(e,n-1)};r?r==3?(o=((o&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|o>>10,56320|o&1023)):r&1?t+=String.fromCharCode((o&31)<<6|e[n++]&63):t+=String.fromCharCode((o&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(o)}};function _3(e,t){if(t){for(var n=new qe(e.length),o=0;o>1)),l=0,i=function(d){a[l++]=d},o=0;oa.length){var u=new qe(l+8+(r-o<<1));u.set(a),a=u}var c=e.charCodeAt(o);c<128||t?i(c):c<2048?(i(192|c>>6),i(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|e.charCodeAt(++o)&1023,i(240|c>>18),i(128|c>>12&63),i(128|c>>6&63),i(128|c&63)):(i(224|c>>12),i(128|c>>6&63),i(128|c&63))}return gl(a,0,l)}function b3(e,t){if(t){for(var n="",o=0;o{var o;return s("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":`${e} icon`},(o=n.default)==null?void 0:o.call(n))};ae.displayName="IconBase";const _l=({size:e=48,stroke:t=4,wrapper:n=!0,height:o=2*e})=>{const r=s("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,preserveAspectRatio:"xMidYMid",viewBox:"25 25 50 50"},[s("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",keyTimes:"0;1",repeatCount:"indefinite",values:"0;360"}),s("circle",{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":t,"stroke-linecap":"round"},[s("animate",{attributeName:"stroke-dasharray",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"1,200;90,200;1,200"}),s("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"0;-35px;-125px"})])]);return n?s("div",{class:"loading-icon-wrapper",style:`display:flex;align-items:center;justify-content:center;height:${o}px`},r):r};_l.displayName="LoadingIcon";const lu=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},bl=(e="")=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},zr=(e,t)=>{let n=1;for(let o=0;o>6;return n+=n<<3,n^=n>>11,n%t},iu=Array.isArray,E3=e=>typeof e=="function",y3=e=>typeof e=="string";var A3=e=>e.startsWith("ftp://"),El=e=>/^(https?:)?\/\//.test(e),w3=/.md((\?|#).*)?$/,k3=(e,t="/")=>!!(El(e)||A3(e)||e.startsWith("/")&&!e.startsWith(t)&&!w3.test(e)),su=e=>Object.prototype.toString.call(e)==="[object Object]";function T3(){const e=W(!1);return bn()&&be(()=>{e.value=!0}),e}function I3(e){return T3(),k(()=>!!e())}const $t=e=>typeof e=="string",Wn=(e,t)=>$t(e)&&e.startsWith(t),wn=(e,t)=>$t(e)&&e.endsWith(t),to=Object.entries,L3=Object.fromEntries,Ye=Object.keys,P3=e=>(e.endsWith(".md")&&(e=`${e.slice(0,-3)}.html`),!e.endsWith("/")&&!e.endsWith(".html")&&(e=`${e}.html`),e=e.replace(/(^|\/)(?:README|index).html$/i,"$1"),e),cu=e=>{const[t,n=""]=e.split("#");return t?`${P3(t)}${n?`#${n}`:""}`:e},Ji=e=>su(e)&&$t(e.name),xo=(e,t=!1)=>e?iu(e)?e.map(n=>$t(n)?{name:n}:Ji(n)?n:null).filter(n=>n!==null):$t(e)?[{name:e}]:Ji(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],uu=(e,t)=>{if(e){if(iu(e)&&e.every($t))return e;if($t(e))return[e];console.error(`Expect ${t||"value"} to be \`string[] | string | undefined\`, but got`,e)}return[]},du=e=>uu(e,"category"),pu=e=>uu(e,"tag"),Nr=e=>Wn(e,"/");let D3=class{constructor(){this.messageElements={};const t="message-container",n=document.getElementById(t);n?this.containerElement=n:(this.containerElement=document.createElement("div"),this.containerElement.id=t,document.body.appendChild(this.containerElement))}pop(t,n=2e3){const o=document.createElement("div"),r=Date.now();return o.className="message move-in",o.innerHTML=t,this.containerElement.appendChild(o),this.messageElements[r]=o,n>0&&setTimeout(()=>{this.close(r)},n),r}close(t){if(t){const n=this.messageElements[t];n.classList.remove("move-in"),n.classList.add("move-out"),n.addEventListener("animationend",()=>{n.remove(),delete this.messageElements[t]})}else Ye(this.messageElements).forEach(n=>this.close(Number(n)))}destroy(){document.body.removeChild(this.containerElement)}};const fu=/#.*$/u,x3=e=>{const t=fu.exec(e);return t?t[0]:""},Zi=e=>decodeURI(e).replace(fu,"").replace(/(index)?\.(md|html)$/,""),yl=(e,t)=>{if(t===void 0)return!1;const n=Zi(e.path),o=Zi(t),r=x3(t);return r?r===e.hash&&(!o||n===o):n===o},Qi=e=>{const t=atob(e);return b3(h3(_3(t,!0)))},C3=e=>El(e)?e:`https://github.com/${e}`,vu=e=>!El(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Un=(e,...t)=>{const n=e.resolve(...t),o=n.matched[n.matched.length-1];if(!(o!=null&&o.redirect))return n;const{redirect:r}=o,a=E3(r)?r(n):r,l=y3(a)?{path:a}:a;return Un(e,{hash:n.hash,query:n.query,params:n.params,...l})},R3=e=>{var t;if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)&&!(e.currentTarget&&((t=e.currentTarget.getAttribute("target"))!=null&&t.match(/\b_blank\b/i))))return e.preventDefault(),!0},ze=({to:e="",class:t="",...n},{slots:o})=>{var l;const r=Fe(),a=(i={})=>R3(i)?r.push(e).catch():Promise.resolve();return s("a",{...n,class:["vp-link",t],href:Le(cu(e)),onClick:a},(l=o.default)==null?void 0:l.call(o))};ze.displayName="VPLink";const hu=()=>s(ae,{name:"github"},()=>s("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));hu.displayName="GitHubIcon";const mu=()=>s(ae,{name:"gitlab"},()=>s("path",{d:"M229.333 78.688C223.52 62 199.895 62 193.895 78.688L87.958 406.438h247.5c-.188 0-106.125-327.75-106.125-327.75zM33.77 571.438c-4.875 15 .563 31.687 13.313 41.25l464.812 345L87.77 406.438zm301.5-165 176.813 551.25 176.812-551.25zm655.125 165-54-165-424.312 551.25 464.812-345c12.938-9.563 18.188-26.25 13.5-41.25zM830.27 78.688c-5.812-16.688-29.437-16.688-35.437 0l-106.125 327.75h247.5z"}));mu.displayName="GitLabIcon";const gu=()=>s(ae,{name:"gitee"},()=>s("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));gu.displayName="GiteeIcon";const _u=()=>s(ae,{name:"bitbucket"},()=>s("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));_u.displayName="BitbucketIcon";const bu=()=>s(ae,{name:"source"},()=>s("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));bu.displayName="SourceIcon";const _t=(e,t)=>{const n=t?t._instance:bn();return su(n==null?void 0:n.appContext.components)&&(e in n.appContext.components||ct(e)in n.appContext.components||Bo(ct(e))in n.appContext.components)},O3=()=>I3(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),B3=()=>{const e=O3();return k(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},no=e=>{const t=Dt();return k(()=>e[t.value])};function Xi(e,t){var n;const o=Ne();return nc(()=>{o.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!=null?n:"sync"}),zt(o)}function Hr(e,t){let n,o,r;const a=W(!0),l=()=>{a.value=!0,r()};ue(e,l,{flush:"sync"});const i=typeof t=="function"?t:t.get,u=typeof t=="function"?void 0:t.set,c=Ks((d,p)=>(o=d,r=p,{get(){return a.value&&(n=i(),a.value=!1),o(),n},set(f){u==null||u(f)}}));return Object.isExtensible(c)&&(c.trigger=l),c}function Et(e){return Rs()?(_0(e),!0):!1}function Me(e){return typeof e=="function"?e():fn(e)}const gn=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const S3=Object.prototype.toString,V3=e=>S3.call(e)==="[object Object]",_n=()=>{},es=M3();function M3(){var e;return gn&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent)}function Al(e,t){function n(...o){return new Promise((r,a)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(r).catch(a)})}return n}const Eu=e=>e();function $3(e,t={}){let n,o,r=_n;const a=i=>{clearTimeout(i),r(),r=_n};return i=>{const u=Me(e),c=Me(t.maxWait);return n&&a(n),u<=0||c!==void 0&&c<=0?(o&&(a(o),o=null),Promise.resolve(i())):new Promise((d,p)=>{r=t.rejectOnCancel?p:d,c&&!o&&(o=setTimeout(()=>{n&&a(n),o=null,d(i())},c)),n=setTimeout(()=>{o&&a(o),o=null,d(i())},u)})}}function z3(e,t=!0,n=!0,o=!1){let r=0,a,l=!0,i=_n,u;const c=()=>{a&&(clearTimeout(a),a=void 0,i(),i=_n)};return p=>{const f=Me(e),h=Date.now()-r,g=()=>u=p();return c(),f<=0?(r=Date.now(),g()):(h>f&&(n||!l)?(r=Date.now(),g()):t&&(u=new Promise((y,T)=>{i=o?T:y,a=setTimeout(()=>{r=Date.now(),l=!0,y(g()),c()},Math.max(0,f-h))})),!n&&!a&&(a=setTimeout(()=>l=!0,f)),l=!1,u)}}function N3(e=Eu){const t=W(!0);function n(){t.value=!1}function o(){t.value=!0}const r=(...a)=>{t.value&&e(...a)};return{isActive:zt(t),pause:n,resume:o,eventFilter:r}}function H3(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const o=t;t=void 0,o&&await o},n}function F3(...e){if(e.length!==1)return Xn(...e);const t=e[0];return typeof t=="function"?zt(Ks(()=>({get:t,set:_n}))):W(t)}function c5(e,t=200,n={}){return Al($3(t,n),e)}function j3(e,t=200,n=!1,o=!0,r=!1){return Al(z3(t,n,o,r),e)}function q3(e,t,n={}){const{eventFilter:o=Eu,...r}=n;return ue(e,Al(o,t),r)}function G3(e,t,n={}){const{eventFilter:o,...r}=n,{eventFilter:a,pause:l,resume:i,isActive:u}=N3(o);return{stop:q3(e,t,{...r,eventFilter:a}),pause:l,resume:i,isActive:u}}function Ho(e,t=!0){bn()?be(e):t?e():rn(e)}function W3(e){bn()&&$o(e)}function U3(e,t=1e3,n={}){const{immediate:o=!0,immediateCallback:r=!1}=n;let a=null;const l=W(!1);function i(){a&&(clearInterval(a),a=null)}function u(){l.value=!1,i()}function c(){const d=Me(t);d<=0||(l.value=!0,r&&e(),i(),a=setInterval(e,d))}if(o&&gn&&c(),Oe(t)||typeof t=="function"){const d=ue(t,()=>{l.value&&gn&&c()});Et(d)}return Et(u),{isActive:l,pause:u,resume:c}}function K3(e,t,n={}){const{immediate:o=!0}=n,r=W(!1);let a=null;function l(){a&&(clearTimeout(a),a=null)}function i(){r.value=!1,l()}function u(...c){l(),r.value=!0,a=setTimeout(()=>{r.value=!1,a=null,e(...c)},Me(t))}return o&&(r.value=!0,gn&&u()),Et(i),{isPending:zt(r),start:u,stop:i}}function Tr(e=!1,t={}){const{truthyValue:n=!0,falsyValue:o=!1}=t,r=Oe(e),a=W(e);function l(i){if(arguments.length)return a.value=i,a.value;{const u=Me(n);return a.value=a.value===u?Me(o):u,a.value}}return r?l:[a,l]}function Pt(e){var t;const n=Me(e);return(t=n==null?void 0:n.$el)!=null?t:n}const yt=gn?window:void 0,wl=gn?window.document:void 0,yu=gn?window.navigator:void 0;function $e(...e){let t,n,o,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,o,r]=e,t=yt):[t,n,o,r]=e,!t)return _n;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const a=[],l=()=>{a.forEach(d=>d()),a.length=0},i=(d,p,f,h)=>(d.addEventListener(p,f,h),()=>d.removeEventListener(p,f,h)),u=ue(()=>[Pt(t),Me(r)],([d,p])=>{if(l(),!d)return;const f=V3(p)?{...p}:p;a.push(...n.flatMap(h=>o.map(g=>i(d,h,g,f))))},{immediate:!0,flush:"post"}),c=()=>{u(),l()};return Et(c),c}function Y3(){const e=W(!1);return bn()&&be(()=>{e.value=!0}),e}function oo(e){const t=Y3();return k(()=>(t.value,!!e()))}function J3(e,t={}){const{immediate:n=!0,fpsLimit:o=void 0,window:r=yt}=t,a=W(!1),l=o?1e3/o:null;let i=0,u=null;function c(f){if(!a.value||!r)return;const h=f-(i||f);if(l&&hn&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const a=W(!1),l=c=>{a.value=c.matches},i=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",l):r.removeListener(l))},u=nc(()=>{o.value&&(i(),r=n.matchMedia(Me(e)),"addEventListener"in r?r.addEventListener("change",l):r.addListener(l),a.value=r.matches)});return Et(()=>{u(),i(),r=void 0}),a}function ts(e,t={}){const{controls:n=!1,navigator:o=yu}=t,r=oo(()=>o&&"permissions"in o);let a;const l=typeof e=="string"?{name:e}:e,i=W(),u=()=>{a&&(i.value=a.state)},c=H3(async()=>{if(r.value){if(!a)try{a=await o.permissions.query(l),$e(a,"change",u),u()}catch{i.value="prompt"}return a}});return c(),n?{state:i,isSupported:r,query:c}:i}function Z3(e={}){const{navigator:t=yu,read:n=!1,source:o,copiedDuring:r=1500,legacy:a=!1}=e,l=oo(()=>t&&"clipboard"in t),i=ts("clipboard-read"),u=ts("clipboard-write"),c=k(()=>l.value||a),d=W(""),p=W(!1),f=K3(()=>p.value=!1,r);function h(){l.value&&i.value!=="denied"?t.clipboard.readText().then(b=>{d.value=b}):d.value=T()}c.value&&n&&$e(["copy","cut"],h);async function g(b=Me(o)){c.value&&b!=null&&(l.value&&u.value!=="denied"?await t.clipboard.writeText(b):y(b),d.value=b,p.value=!0,f.start())}function y(b){const L=document.createElement("textarea");L.value=b??"",L.style.position="absolute",L.style.opacity="0",document.body.appendChild(L),L.select(),document.execCommand("copy"),L.remove()}function T(){var b,L,E;return(E=(L=(b=document==null?void 0:document.getSelection)==null?void 0:b.call(document))==null?void 0:L.toString())!=null?E:""}return{isSupported:c,text:d,copied:p,copy:g}}const ar=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},lr="__vueuse_ssr_handlers__",Q3=X3();function X3(){return lr in ar||(ar[lr]=ar[lr]||{}),ar[lr]}function e4(e,t){return Q3[e]||t}function t4(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const n4={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ns="vueuse-storage";function ro(e,t,n,o={}){var r;const{flush:a="pre",deep:l=!0,listenToStorageChanges:i=!0,writeDefaults:u=!0,mergeDefaults:c=!1,shallow:d,window:p=yt,eventFilter:f,onError:h=S=>{console.error(S)},initOnMounted:g}=o,y=(d?Ne:W)(typeof t=="function"?t():t);if(!n)try{n=e4("getDefaultStorage",()=>{var S;return(S=yt)==null?void 0:S.localStorage})()}catch(S){h(S)}if(!n)return y;const T=Me(t),b=t4(T),L=(r=o.serializer)!=null?r:n4[b],{pause:E,resume:I}=G3(y,()=>B(y.value),{flush:a,deep:l,eventFilter:f});return p&&i&&Ho(()=>{$e(p,"storage",M),$e(p,ns,z),g&&M()}),g||M(),y;function B(S){try{if(S==null)n.removeItem(e);else{const H=L.write(S),Q=n.getItem(e);Q!==H&&(n.setItem(e,H),p&&p.dispatchEvent(new CustomEvent(ns,{detail:{key:e,oldValue:Q,newValue:H,storageArea:n}})))}}catch(H){h(H)}}function x(S){const H=S?S.newValue:n.getItem(e);if(H==null)return u&&T!==null&&n.setItem(e,L.write(T)),T;if(!S&&c){const Q=L.read(H);return typeof c=="function"?c(Q,T):b==="object"&&!Array.isArray(Q)?{...T,...Q}:Q}else return typeof H!="string"?H:L.read(H)}function z(S){M(S.detail)}function M(S){if(!(S&&S.storageArea!==n)){if(S&&S.key==null){y.value=T;return}if(!(S&&S.key!==e)){E();try{(S==null?void 0:S.newValue)!==L.write(y.value)&&(y.value=x(S))}catch(H){h(H)}finally{S?rn(I):I()}}}}}function o4(e){return Au("(prefers-color-scheme: dark)",e)}function r4(e,t,n={}){const{window:o=yt,...r}=n;let a;const l=oo(()=>o&&"MutationObserver"in o),i=()=>{a&&(a.disconnect(),a=void 0)},u=ue(()=>Pt(e),p=>{i(),l.value&&o&&p&&(a=new MutationObserver(t),a.observe(p,r))},{immediate:!0}),c=()=>a==null?void 0:a.takeRecords(),d=()=>{i(),u()};return Et(d),{isSupported:l,stop:d,takeRecords:c}}function a4(e,t,n={}){const{window:o=yt,...r}=n;let a;const l=oo(()=>o&&"ResizeObserver"in o),i=()=>{a&&(a.disconnect(),a=void 0)},u=k(()=>Array.isArray(e)?e.map(p=>Pt(p)):[Pt(e)]),c=ue(u,p=>{if(i(),l.value&&o){a=new ResizeObserver(t);for(const f of p)f&&a.observe(f,r)}},{immediate:!0,flush:"post",deep:!0}),d=()=>{i(),c()};return Et(d),{isSupported:l,stop:d}}function l4(e,t={width:0,height:0},n={}){const{window:o=yt,box:r="content-box"}=n,a=k(()=>{var p,f;return(f=(p=Pt(e))==null?void 0:p.namespaceURI)==null?void 0:f.includes("svg")}),l=W(t.width),i=W(t.height),{stop:u}=a4(e,([p])=>{const f=r==="border-box"?p.borderBoxSize:r==="content-box"?p.contentBoxSize:p.devicePixelContentBoxSize;if(o&&a.value){const h=Pt(e);if(h){const g=o.getComputedStyle(h);l.value=Number.parseFloat(g.width),i.value=Number.parseFloat(g.height)}}else if(f){const h=Array.isArray(f)?f:[f];l.value=h.reduce((g,{inlineSize:y})=>g+y,0),i.value=h.reduce((g,{blockSize:y})=>g+y,0)}else l.value=p.contentRect.width,i.value=p.contentRect.height},n);Ho(()=>{const p=Pt(e);p&&(l.value="offsetWidth"in p?p.offsetWidth:t.width,i.value="offsetHeight"in p?p.offsetHeight:t.height)});const c=ue(()=>Pt(e),p=>{l.value=p?t.width:0,i.value=p?t.height:0});function d(){u(),c()}return{width:l,height:i,stop:d}}const os=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function kl(e,t={}){const{document:n=wl,autoExit:o=!1}=t,r=k(()=>{var b;return(b=Pt(e))!=null?b:n==null?void 0:n.querySelector("html")}),a=W(!1),l=k(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(b=>n&&b in n||r.value&&b in r.value)),i=k(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(b=>n&&b in n||r.value&&b in r.value)),u=k(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(b=>n&&b in n||r.value&&b in r.value)),c=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(b=>n&&b in n),d=oo(()=>r.value&&n&&l.value!==void 0&&i.value!==void 0&&u.value!==void 0),p=()=>c?(n==null?void 0:n[c])===r.value:!1,f=()=>{if(u.value){if(n&&n[u.value]!=null)return n[u.value];{const b=r.value;if((b==null?void 0:b[u.value])!=null)return!!b[u.value]}}return!1};async function h(){if(!(!d.value||!a.value)){if(i.value)if((n==null?void 0:n[i.value])!=null)await n[i.value]();else{const b=r.value;(b==null?void 0:b[i.value])!=null&&await b[i.value]()}a.value=!1}}async function g(){if(!d.value||a.value)return;f()&&await h();const b=r.value;l.value&&(b==null?void 0:b[l.value])!=null&&(await b[l.value](),a.value=!0)}async function y(){await(a.value?h():g())}const T=()=>{const b=f();(!b||b&&p())&&(a.value=b)};return $e(n,os,T,!1),$e(()=>Pt(r),os,T,!1),o&&Et(h),{isSupported:d,isFullscreen:a,enter:g,exit:h,toggle:y}}function aa(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function u5(e={}){const{controls:t=!1,interval:n="requestAnimationFrame"}=e,o=W(new Date),r=()=>o.value=new Date,a=n==="requestAnimationFrame"?J3(r,{immediate:!0}):U3(r,n,{immediate:!0});return t?{now:o,...a}:o}function la(e,t=_n,n={}){const{immediate:o=!0,manual:r=!1,type:a="text/javascript",async:l=!0,crossOrigin:i,referrerPolicy:u,noModule:c,defer:d,document:p=wl,attrs:f={}}=n,h=W(null);let g=null;const y=L=>new Promise((E,I)=>{const B=M=>(h.value=M,E(M),M);if(!p){E(!1);return}let x=!1,z=p.querySelector(`script[src="${Me(e)}"]`);z?z.hasAttribute("data-loaded")&&B(z):(z=p.createElement("script"),z.type=a,z.async=l,z.src=Me(e),d&&(z.defer=d),i&&(z.crossOrigin=i),c&&(z.noModule=c),u&&(z.referrerPolicy=u),Object.entries(f).forEach(([M,S])=>z==null?void 0:z.setAttribute(M,S)),x=!0),z.addEventListener("error",M=>I(M)),z.addEventListener("abort",M=>I(M)),z.addEventListener("load",()=>{z.setAttribute("data-loaded","true"),t(z),B(z)}),x&&(z=p.head.appendChild(z)),L||B(z)}),T=(L=!0)=>(g||(g=y(L)),g),b=()=>{if(!p)return;g=null,h.value&&(h.value=null);const L=p.querySelector(`script[src="${Me(e)}"]`);L&&p.head.removeChild(L)};return o&&!r&&Ho(T),r||W3(b),{scriptTag:h,load:T,unload:b}}function wu(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const ir=new WeakMap;function ku(e,t=!1){const n=W(t);let o=null,r;ue(F3(e),i=>{const u=aa(Me(i));if(u){const c=u;ir.get(c)||ir.set(c,r),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const a=()=>{const i=aa(Me(e));!i||n.value||(es&&(o=$e(i,"touchmove",u=>{i4(u)},{passive:!1})),i.style.overflow="hidden",n.value=!0)},l=()=>{var i;const u=aa(Me(e));!u||!n.value||(es&&(o==null||o()),u.style.overflow=(i=ir.get(u))!=null?i:"",ir.delete(u),n.value=!1)};return Et(l),k({get(){return n.value},set(i){i?a():l()}})}function Tu(e,t,n={}){const{window:o=yt}=n;return ro(e,t,o==null?void 0:o.sessionStorage,n)}let s4=0;function d5(e,t={}){const n=W(!1),{document:o=wl,immediate:r=!0,manual:a=!1,id:l=`vueuse_styletag_${++s4}`}=t,i=W(e);let u=()=>{};const c=()=>{if(!o)return;const p=o.getElementById(l)||o.createElement("style");p.isConnected||(p.id=l,t.media&&(p.media=t.media),o.head.appendChild(p)),!n.value&&(u=ue(i,f=>{p.textContent=f},{immediate:!0}),n.value=!0)},d=()=>{!o||!n.value||(u(),o.head.removeChild(o.getElementById(l)),n.value=!1)};return r&&!a&&Ho(c),a||Et(d),{id:l,css:i,unload:d,load:c,isLoaded:zt(n)}}function c4(e={}){const{window:t=yt,behavior:n="auto"}=e;if(!t)return{x:W(0),y:W(0)};const o=W(t.scrollX),r=W(t.scrollY),a=k({get(){return o.value},set(i){scrollTo({left:i,behavior:n})}}),l=k({get(){return r.value},set(i){scrollTo({top:i,behavior:n})}});return $e(t,"scroll",()=>{o.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:a,y:l}}function u4(e={}){const{window:t=yt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:o=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:a=!0}=e,l=W(n),i=W(o),u=()=>{t&&(a?(l.value=t.innerWidth,i.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,i.value=t.document.documentElement.clientHeight))};if(u(),Ho(u),$e("resize",u,{passive:!0}),r){const c=Au("(orientation: portrait)");ue(c,()=>u())}return{width:l,height:i}}const Iu=({type:e="info",text:t="",vertical:n,color:o},{slots:r})=>{var a;return s("span",{class:["vp-badge",e,{diy:o}],style:{verticalAlign:n??!1,backgroundColor:o??!1}},((a=r.default)==null?void 0:a.call(r))||t)};Iu.displayName="Badge";var d4=V({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=k(()=>{const o=["font-icon icon"],r=`fas fa-${e.icon}`;return o.push("fa-fw fa-sm"),o.push(e.icon.includes(" ")?e.icon:r),o}),n=k(()=>{const o={};return e.color&&(o.color=e.color),e.size&&(o["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),Ye(o).length?o:null});return()=>e.icon?s("span",{key:e.icon,class:t.value,style:n.value}):null}});const Lu=()=>s(ae,{name:"back-to-top"},()=>[s("path",{d:"M512 843.2c-36.2 0-66.4-13.6-85.8-21.8-10.8-4.6-22.6 3.6-21.8 15.2l7 102c.4 6.2 7.6 9.4 12.6 5.6l29-22c3.6-2.8 9-1.8 11.4 2l41 64.2c3 4.8 10.2 4.8 13.2 0l41-64.2c2.4-3.8 7.8-4.8 11.4-2l29 22c5 3.8 12.2.6 12.6-5.6l7-102c.8-11.6-11-20-21.8-15.2-19.6 8.2-49.6 21.8-85.8 21.8z"}),s("path",{d:"m795.4 586.2-96-98.2C699.4 172 513 32 513 32S324.8 172 324.8 488l-96 98.2c-3.6 3.6-5.2 9-4.4 14.2L261.2 824c1.8 11.4 14.2 17 23.6 10.8L419 744s41.4 40 94.2 40c52.8 0 92.2-40 92.2-40l134.2 90.8c9.2 6.2 21.6.6 23.6-10.8l37-223.8c.4-5.2-1.2-10.4-4.8-14zM513 384c-34 0-61.4-28.6-61.4-64s27.6-64 61.4-64c34 0 61.4 28.6 61.4 64S547 384 513 384z"})]);Lu.displayName="BackToTopIcon";var p4=V({name:"BackToTop",props:{threshold:{type:Number,default:100},noProgress:Boolean},setup(e){const t=ge(),n=no({"/zh/":{backToTop:"返回顶部"},"/en/":{backToTop:"Back to top"},"/":{backToTop:"返回頂部"}}),o=Ne(),{height:r}=l4(o),{height:a}=u4(),{y:l}=c4(),i=k(()=>t.value.backToTop!==!1&&l.value>e.threshold),u=k(()=>l.value/(r.value-a.value));return be(()=>{o.value=document.body}),()=>s(nn,{name:"fade"},()=>i.value?s("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,"data-balloon-pos":"left",onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[e.noProgress?null:s("svg",{class:"vp-scroll-progress"},s("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*u.value*100}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}})),s(Lu)]):null)}});const f4=At({enhance:({app:e})=>{_t("Badge")||e.component("Badge",Iu),_t("FontIcon")||e.component("FontIcon",d4)},setup:()=>{la("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/brands.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),la("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/solid.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),la("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/fontawesome.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}})},rootComponents:[()=>s(p4,{})]});function v4(e,t,n){var o,r,a;t===void 0&&(t=50),n===void 0&&(n={});var l=(o=n.isImmediate)!=null&&o,i=(r=n.callback)!=null&&r,u=n.maxWait,c=Date.now(),d=[];function p(){if(u!==void 0){var h=Date.now()-c;if(h+t>=u)return u-h}return t}var f=function(){var h=[].slice.call(arguments),g=this;return new Promise(function(y,T){var b=l&&a===void 0;if(a!==void 0&&clearTimeout(a),a=setTimeout(function(){if(a=void 0,c=Date.now(),!l){var E=e.apply(g,h);i&&i(E),d.forEach(function(I){return(0,I.resolve)(E)}),d=[]}},p()),b){var L=e.apply(g,h);return i&&i(L),y(L)}d.push({resolve:y,reject:T})})};return f.cancel=function(h){a!==void 0&&clearTimeout(a),d.forEach(function(g){return(0,g.reject)(h)}),d=[]},f}const h4=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:o=5})=>{const r=Fe(),l=v4(()=>{var y,T;const i=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(i-0)f.some(L=>L.hash===b.hash));for(let b=0;b=(((y=L.parentElement)==null?void 0:y.offsetTop)??0)-o,B=!E||i<(((T=E.parentElement)==null?void 0:T.offsetTop)??0)-o;if(!(I&&B))continue;const z=decodeURIComponent(r.currentRoute.value.hash),M=decodeURIComponent(L.hash);if(z===M)return;if(p){for(let S=b+1;S{window.addEventListener("scroll",l)}),ll(()=>{window.removeEventListener("scroll",l)})},rs=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},m4=".vp-sidebar-link, .toc-link",g4=".header-anchor",_4=200,b4=5,E4=At({setup(){h4({headerLinkSelector:m4,headerAnchorSelector:g4,delay:_4,offset:b4})}});let Pu=()=>null;const Du=Symbol(""),y4=e=>{Pu=e},A4=()=>me(Du),w4=e=>{e.provide(Du,Pu)};var k4=V({name:"AutoCatalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=A4(),n=no({"/zh/":{title:"目录",empty:"暂无目录"},"/en/":{title:"Catalog",empty:"No catalog"},"/":{title:"目錄",empty:"暫無目錄"}}),o=ce(),r=Fe(),a=Nc(),l=p=>p?s(t,{icon:p}):null,i=({title:p,path:f,icon:h,class:g})=>s(ze,{class:g,to:f},()=>[l(h),p||f]),u=p=>{const f=p.I;return typeof f>"u"||f},c=()=>{const p=e.base||o.value.path.replace(/\/[^/]+$/,"/"),f=r.getRoutes(),h=[];return f.filter(({meta:g,path:y})=>{if(!Wn(y,p)||y===p)return!1;if(p==="/"){const T=Ye(a.value.locales).filter(b=>b!=="/");if(y==="/404.html"||T.some(b=>Wn(y,b)))return!1}return(wn(y,".html")&&!wn(y,"/index.html")||wn(y,"/"))&&u(g)}).map(({path:g,meta:y})=>{const T=g.substring(p.length).split("/").length;return{title:y.t||"",icon:y.i||null,base:g.replace(/\/[^/]+\/?$/,"/"),order:y.O||null,level:wn(g,"/")?T-1:T,path:g}}).filter(({title:g,level:y})=>g&&y<=e.level).sort(({title:g,level:y,path:T,order:b},{title:L,level:E,path:I,order:B})=>y-E||(wn(T,"/index.html")?-1:wn(I,"/index.html")?1:b===null?B===null?g.localeCompare(L):B:B===null?b:b>0?B>0?b-B:-1:B<0?b-B:1)).forEach(g=>{var b;const{base:y,level:T}=g;switch(T){case 1:h.push(g);break;case 2:{const L=h.find(E=>E.path===y);L&&(L.children??(L.children=[])).push(g);break}default:{const L=h.find(E=>E.path===y.replace(/\/[^/]+\/$/,"/"));if(L){const E=(b=L.children)==null?void 0:b.find(I=>I.path===y);E&&(E.children??(E.children=[])).push(g)}}}}),h},d=k(()=>c());return()=>{const p=d.value.some(h=>h.children),f=d.value.map(({children:h=[],icon:g,path:y,title:T})=>{const b=i({title:T,path:y,icon:g,class:"vp-catalog-title"});return p?[s("h3",{id:T,class:["vp-catalog-child-title",{"has-children":h.length}]},[s("a",{href:`#${T}`,class:"header-anchor","aria-hidden":!0},"#"),b]),h.length?s(e.index?"ol":"ul",{class:"vp-child-catalogs"},h.map(({children:L=[],icon:E,path:I,title:B})=>s("li",{class:"vp-child-catalog"},[s("div",{class:["vp-catalog-sub-title",{"has-children":L.length}]},[s("a",{href:`#${B}`,class:"header-anchor"},"#"),s(i,{title:B,path:I,icon:E,class:"vp-catalog-title"})]),L.length?s(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},L.map(({icon:x,path:z,title:M})=>{const S=s(i,{title:M,path:z,icon:x,class:""});return e.index?s("li",{class:"vp-sub-catalog"},S):s(i,{title:M,path:z,icon:x,class:"vp-sub-catalog-link"})})):null]))):null]:s("div",{class:"vp-catalog-child-title"},b)});return s("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:s("h2",{class:"vp-catalog-main-title"},n.value.title),d.value.length?e.index?s("ol",{class:"vp-catalogs"},f.map(h=>s("li",{class:"vp-catalog"},h))):f:s("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),T4=At({enhance:({app:e})=>{w4(e),_t("AutoCatalog",e)||e.component("AutoCatalog",k4)}});const I4=s("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[s("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),s("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),xu=V({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Dt(),n=k(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>s("span",[I4,s("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),L4={},P4=At({enhance({app:e}){e.component("ExternalLinkIcon",s(xu,{locales:L4}))}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const fe={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=fe.isStarted();e=ia(e,fe.settings.minimum,1),fe.status=e===1?null:e;const n=fe.render(!t),o=n.querySelector(fe.settings.barSelector),r=fe.settings.speed,a=fe.settings.easing;return n.offsetWidth,D4(l=>{sr(o,{transform:"translate3d("+as(e)+"%,0,0)",transition:"all "+r+"ms "+a}),e===1?(sr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){sr(n,{transition:"all "+r+"ms linear",opacity:"0"}),setTimeout(function(){fe.remove(),l()},r)},r)):setTimeout(()=>l(),r)}),fe},isStarted:()=>typeof fe.status=="number",start:()=>{fe.status||fe.set(0);const e=()=>{setTimeout(()=>{fe.status&&(fe.trickle(),e())},fe.settings.trickleSpeed)};return fe.settings.trickle&&e(),fe},done:e=>!e&&!fe.status?fe:fe.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=fe.status;return t?(typeof e!="number"&&(e=(1-t)*ia(Math.random()*t,.1,.95)),t=ia(t+e,0,.994),fe.set(t)):fe.start()},trickle:()=>fe.inc(Math.random()*fe.settings.trickleRate),render:e=>{if(fe.isRendered())return document.getElementById("nprogress");ls(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=fe.settings.template;const n=t.querySelector(fe.settings.barSelector),o=e?"-100":as(fe.status||0),r=document.querySelector(fe.settings.parent);return sr(n,{transition:"all 0 linear",transform:"translate3d("+o+"%,0,0)"}),r!==document.body&&ls(r,"nprogress-custom-parent"),r==null||r.appendChild(t),t},remove:()=>{is(document.documentElement,"nprogress-busy"),is(document.querySelector(fe.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&x4(e)},isRendered:()=>!!document.getElementById("nprogress")},ia=(e,t,n)=>en?n:e,as=e=>(-1+e)*100,D4=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),sr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(l){return l.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(i,u){return u.toUpperCase()})}function o(l){const i=document.body.style;if(l in i)return l;let u=e.length;const c=l.charAt(0).toUpperCase()+l.slice(1);let d;for(;u--;)if(d=e[u]+c,d in i)return d;return l}function r(l){return l=n(l),t[l]??(t[l]=o(l))}function a(l,i,u){i=r(i),l.style[i]=u}return function(l,i){for(const u in i){const c=i[u];c!==void 0&&Object.prototype.hasOwnProperty.call(i,u)&&a(l,u,c)}}}(),Cu=(e,t)=>(typeof e=="string"?e:Tl(e)).indexOf(" "+t+" ")>=0,ls=(e,t)=>{const n=Tl(e),o=n+t;Cu(n,t)||(e.className=o.substring(1))},is=(e,t)=>{const n=Tl(e);if(!Cu(e,t))return;const o=n.replace(" "+t+" "," ");e.className=o.substring(1,o.length-1)},Tl=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),x4=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const C4=()=>{be(()=>{const e=Fe(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||fe.start()}),e.afterEach(n=>{t.add(n.path),fe.done()})})},R4=At({setup(){C4()}}),O4=JSON.parse(`{"encrypt":{"config":{"/demo/encrypt.html":["$2a$10$AjjvUFQzjmjYjYJbD7ZVh.EwVgRmQcURHyqZq3jPwIc7oSCuz0Sqq"],"/zh/demo/encrypt.html":["$2a$10$9PY4etgWxudGgQjQxggWOe.cvEZ1s8Upkoi502mlUSuYfRJUlRyxS"],"/en/demo/encrypt.html":["$2a$10$kcRW3ZIne6BM3r.QUKg9B.6TYdBmT6O0VDiPjNsSPmBEp57nkZN0W"]}},"author":{"name":"Ven2s","url":"https://luvsia.com"},"logo":"/images/pinkbitch.png","repo":"ventusoon","docsDir":"src/","blog":{"medias":{"GitHub":"https://github.com/ventusoon","Gitlab":"https://gitlab.com/ventusoon","Gitee":"https://gitee.com/ventusoon","Steam":"https://steamcommunity.com/id/ventusyu","Email":"mailto:sia@ik.me"}},"locales":{"/zh/":{"lang":"zh-CN","navbarLocales":{"langName":"简体中文","selectLangAriaLabel":"选择语言"},"metaLocales":{"author":"作者","date":"写作日期","origin":"原创","views":"访问量","category":"分类","tag":"标签","readingTime":"阅读时间","words":"字数","toc":"此页内容","prev":"上一页","next":"下一页","lastUpdated":"上次编辑于","contributors":"贡献者","editLink":"在 GitHub 上编辑此页","print":"打印"},"blogLocales":{"article":"文章","articleList":"文章列表","category":"分类","tag":"标签","timeline":"时间轴","timelineTitle":"昨日不在","all":"全部","intro":"个人介绍","star":"收藏"},"paginationLocales":{"prev":"上一页","next":"下一页","navigate":"跳转到","action":"前往","errorText":"请输入 1 到 $page 之前的页码!"},"outlookLocales":{"themeColor":"主题色","darkmode":"外观","fullscreen":"全屏"},"encryptLocales":{"iconLabel":"文章已加密","placeholder":"输入密码","remember":"记住密码","errorHint":"请输入正确的密码"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"页面不存在","notFoundMsg":["这里什么也没有","我们是怎么来到这儿的?","这 是 四 零 四 !","看起来你访问了一个失效的链接"],"back":"返回上一页","home":"带我回家","openInNewWindow":"Open in new window"},"navbar":["/zh/",{"text":"代码笔记","icon":"code","prefix":"/zh/code/","children":[{"text":"精选","icon":"pen-to-square","prefix":"","children":[{"text":"从0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},{"text":"搭建订阅转换链接","icon":"turn-down","link":"build-sub"}]},{"text":"教程","icon":"pen-to-square","prefix":"","children":[{"text":"搭建ChatGPT","icon":"robot","link":"chatgpt"},{"text":"搭建ChatGPT代理","icon":"headset","link":"chatgpt-porxy"},"hackintosh","nginx-proxy-manager"]}]},{"text":"随笔","icon":"note-sticky","prefix":"/zh/note/","children":[{"text":"1993","icon":"cake","link":"1993"}]},{"text":"个人简介","icon":"bolt","prefix":"/zh/","link":"intro"}],"sidebar":{"/zh/code/":["/code/#實用教程",{"text":"實用教程","icon":"linux","prefix":"/code/","link":"/code/","children":[{"text":"從0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},"build-sub"]},{"text":"Windows","icon":"laptop-code","prefix":"/code/","children":["github-tools.md","kms"]}],"/zh/note/":["",{"text":"實用教程","icon":"laptop-code","prefix":"note/","link":"note/","children":"structure"},{"text":"文章","icon":"book","prefix":"posts/","children":"structure"},"intro","slides"]},"footer":"默认页脚","displayFooter":true,"blog":{"description":"一个前端菜鸟/爱好者/折腾家","intro":"/zh/intro.html"}},"/en/":{"lang":"en-US","navbarLocales":{"langName":"English","selectLangAriaLabel":"Select language"},"metaLocales":{"author":"Author","date":"Writing Date","origin":"Original","views":"Page views","category":"Category","tag":"Tag","readingTime":"Reading Time","words":"Words","toc":"On This Page","prev":"Prev","next":"Next","lastUpdated":"Last update","contributors":"Contributors","editLink":"Edit this page on GitHub","print":"Print"},"blogLocales":{"article":"Articles","articleList":"Article List","category":"Category","tag":"Tag","timeline":"Timeline","timelineTitle":"Yesterday Once More!","all":"All","intro":"Personal Intro","star":"Star"},"paginationLocales":{"prev":"Prev","next":"Next","navigate":"Jump to","action":"Go","errorText":"Please enter a number between 1 and $page !"},"outlookLocales":{"themeColor":"Theme Color","darkmode":"Theme Mode","fullscreen":"Full Screen"},"encryptLocales":{"iconLabel":"Page Encrypted","placeholder":"Enter password","remember":"Remember password","errorHint":"Please enter the correct password!"},"routeLocales":{"skipToContent":"Skip to main content","notFoundTitle":"Page not found","notFoundMsg":["There’s nothing here.","How did we get here?","That’s a Four-Oh-Four.","Looks like we've got some broken links."],"back":"Go back","home":"Take me home","openInNewWindow":"Open in new window"},"navbar":["/en/",{"text":"Code Note","icon":"code","prefix":"/en/code/","children":[{"text":"Featured","icon":"pen-to-square","prefix":"","children":[{"text":"Since 0 to 1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},{"text":"Build subscription conversion","icon":"turn-down","link":"build-sub"}]},{"text":"Tutorial","icon":"pen-to-square","prefix":"","children":[{"text":"Create a ChatGPT Website","icon":"robot","link":"chatgpt"},{"text":"Set up ChatGPT Proxy","icon":"headset","link":"chatgpt-porxy"},"hackintosh","nginx-proxy-manager"]}]},{"text":"Note","icon":"note-sticky","prefix":"/en/note/","children":[{"text":"1993","icon":"cake","link":"1993"}]},{"text":"Personal Profile","icon":"bolt","prefix":"/en/","link":"intro"}],"sidebar":{"/en/code/":["/code/#實用教程",{"text":"實用教程","icon":"linux","prefix":"/code/","link":"/code/","children":[{"text":"從0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},"build-sub"]},{"text":"Windows","icon":"laptop-code","prefix":"/code/","children":["github-tools.md","kms"]}],"/en/note/":["",{"text":"實用教程","icon":"laptop-code","prefix":"note/","link":"note/","children":"structure"},{"text":"文章","icon":"book","prefix":"posts/","children":"structure"},"intro","slides"]},"footer":"Default footer","displayFooter":true,"blog":{"description":"A FrontEnd noob/Enthusiast/Tinkerer","intro":"/en/intro.html"}},"/":{"lang":"zh-TW","navbarLocales":{"langName":"繁體中文","selectLangAriaLabel":"選擇語言"},"metaLocales":{"author":"作者","date":"寫作日期","origin":"原創","views":"訪問量","category":"分類","tag":"標籤","readingTime":"閱讀時間","words":"字數","toc":"此頁內容","prev":"上一頁","next":"下一頁","lastUpdated":"上次編輯於","contributors":"貢獻者","editLink":"在 GitHub 上編輯此頁","print":"打印"},"blogLocales":{"article":"文章","articleList":"文章列表","category":"分類","tag":"標籤","timeline":"時間軸","timelineTitle":"昨日不在","all":"全部","intro":"個人介紹","star":"收藏"},"paginationLocales":{"prev":"上一頁","next":"下一頁","navigate":"跳轉到","action":"前往","errorText":"請輸入 1 到 $page 之前的頁碼!"},"outlookLocales":{"themeColor":"主題色","darkmode":"主題模式","fullscreen":"全屏"},"encryptLocales":{"iconLabel":"頁面已加密","placeholder":"輸入密碼","remember":"記憶密碼","errorHint":"請輸入正確密碼"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"頁面不存在","notFoundMsg":["這裡什麼也沒有","我們是怎麼來到這兒的?","這 是 四 零 四 !","看起来你訪問了一個失效的鏈結"],"back":"返回上一頁","home":"帶我回家","openInNewWindow":"Open in new window"},"navbar":["/",{"text":"代碼筆記","icon":"code","prefix":"/code/","children":[{"text":"精選","icon":"pen-to-square","prefix":"","children":[{"text":"從0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},{"text":"搭建訂閱轉換鏈接","icon":"turn-down","link":"build-sub"}]},{"text":"教程","icon":"pen-to-square","prefix":"","children":[{"text":"搭建ChatGPT","icon":"robot","link":"chatgpt"},{"text":"搭建ChatGPT代理","icon":"headset","link":"chatgpt-porxy"},"hackintosh","nginx-proxy-manager"]}]},{"text":"隨筆","icon":"note-sticky","prefix":"/note/","children":[{"text":"1993","icon":"cake","link":"1993"}]},{"text":"個人簡介","icon":"bolt","prefix":"/","link":"intro"}],"sidebar":{"/code/":["/code/#實用教程",{"text":"實用教程","icon":"linux","prefix":"/code/","link":"/code/","children":[{"text":"從0到1","icon":"0","link":"server-building"},{"text":"Hello World","icon":"blog","link":"hello-world"},{"text":"GitHub Actions","icon":"code-compare","link":"github-actions-deploy"},"build-sub"]},{"text":"Windows","icon":"laptop-code","prefix":"/code/","children":["github-tools.md","kms"]}],"/note/":["",{"text":"實用教程","icon":"laptop-code","prefix":"note/","link":"note/","children":"structure"},{"text":"文章","icon":"book","prefix":"posts/","children":"structure"},"intro","slides"]},"footer":"默認業腳","displayFooter":true,"blog":{"description":"一个前端麻瓜/愛好者/折騰家","intro":"/intro.html"}}}}`),B4=W(O4),Ru=()=>B4,Ou=Symbol(""),S4=()=>{const e=me(Ou);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},V4=(e,t)=>{const{locales:n,...o}=e;return{...o,...n==null?void 0:n[t]}},M4=At({enhance({app:e}){const t=Ru(),n=e._context.provides[vl],o=k(()=>V4(t.value,n.value));e.provide(Ou,o),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return o.value}}})}}),$4="2.15.8",z4={"Content-Type":"application/json"},N4=({serverURL:e,lang:t,paths:n,signal:o})=>(({serverURL:r,lang:a,paths:l,type:i,signal:u})=>fetch(`${r}/article?path=${encodeURIComponent(l.join(","))}&type=${encodeURIComponent(i.join(","))}&lang=${a}`,{signal:u}).then(c=>c.json()))({serverURL:e,lang:t,paths:n,type:["time"],signal:o}).then(r=>Array.isArray(r)?r:[r]),H4=e=>(({serverURL:t,lang:n,path:o,type:r,action:a})=>fetch(`${t}/article?lang=${n}`,{method:"POST",headers:z4,body:JSON.stringify({path:o,type:r,action:a})}).then(l=>l.json()))({...e,type:"time",action:"inc"}),ss=e=>{const t=((n="")=>n.replace(/\/$/u,""))(e);return/^(https?:)?\/\//.test(t)?t:`https://${t}`},F4=e=>{e.name!=="AbortError"&&console.error(e.message)},cs=e=>e.dataset.path||e.getAttribute("id"),us=(e,t)=>{t.forEach((n,o)=>{n.innerText=e[o].toString()})},Bu=({serverURL:e,path:t=window.location.pathname,selector:n=".waline-pageview-count",update:o=!0,lang:r=navigator.language})=>{const a=new AbortController,l=Array.from(document.querySelectorAll(n)),i=c=>{const d=cs(c);return d!==null&&t!==d},u=c=>N4({serverURL:ss(e),paths:c.map(d=>cs(d)||t),lang:r,signal:a.signal}).then(d=>us(d,c)).catch(F4);if(o){const c=l.filter(p=>!i(p)),d=l.filter(i);H4({serverURL:ss(e),path:t,lang:r}).then(p=>us(new Array(c.length).fill(p),c)),d.length&&u(d)}else u(l);return a.abort.bind(a)},p5=Object.freeze(Object.defineProperty({__proto__:null,pageviewCount:Bu,version:$4},Symbol.toStringTag,{value:"Module"}));const j4={provider:"Waline",dark:'html[data-theme="dark"]',serverURL:"https://waline-comment.vuejs.press"};let q4=j4;const Su=Symbol(""),Vu=()=>me(Su),G4=Vu,W4=e=>{e.provide(Su,q4)},U4={"/zh/":{placeholder:"请留言。(填写邮箱可在被回复时收到邮件提醒)"},"/en/":{placeholder:"Write a comment here (Fill in the email address to receive an email notification when being replied)"},"/":{placeholder:"請留言。(填寫信箱可在被回覆時收到郵件提醒)"}};v(()=>import("./waline-meta-56fbc549.js"),[]);var K4=V({name:"WalineComment",props:{identifier:{type:String,required:!0}},setup(e){const t=G4(),n=ge(),o=fl(),r=no(U4);let a;const l=!!t.serverURL,i=k(()=>{if(!l)return!1;const c=t.pageview!==!1,d=n.value.pageview;return!!d||c!==!1&&d!==!1}),u=k(()=>({lang:o.value==="zh-CN"?"zh-CN":"en",locale:r.value,dark:"html.dark",...t,path:e.identifier}));return be(()=>{ue(()=>e.identifier,()=>{a==null||a(),i.value&&rn().then(()=>{setTimeout(()=>{a=Bu({serverURL:t.serverURL,path:e.identifier})},t.delay||800)})},{immediate:!0})}),()=>l?s("div",{id:"comment",class:"waline-wrapper"},s(A({loader:async()=>(await v(()=>import("./component-d7774244.js"),[])).Waline,loadingComponent:_l}),u.value)):null}}),Y4=V({name:"CommentService",props:{darkmode:Boolean},setup(e){const t=Vu(),n=ce(),o=ge(),r=t.comment!==!1,a=k(()=>o.value.comment||r&&o.value.comment!==!1);return()=>s(K4,{identifier:o.value.commentID||n.value.path,darkmode:e.darkmode,style:{display:a.value?"block":"none"}})}}),J4=At({enhance:({app:e})=>{W4(e),e.component("CommentService",Y4)}});const Z4=800,Q4=2e3,X4={"/zh/":{copy:"复制代码",copied:"已复制",hint:"复制成功"},"/en/":{copy:"Copy code",copied:"Copied",hint:"Copied successfully"},"/":{copy:"複製代碼",copied:"已複製",hint:"複製成功"}},ef=!1,tf=['.theme-hope-content div[class*="language-"] pre'],ds=!1,sa=new Map,nf=()=>{const{copy:e}=Z3({legacy:!0}),t=no(X4),n=ce(),o=B3(),r=i=>{if(!i.hasAttribute("copy-code-registered")){const u=document.createElement("button");u.type="button",u.classList.add("copy-code-button"),u.innerHTML='
',u.setAttribute("aria-label",t.value.copy),u.setAttribute("data-copied",t.value.copied),i.parentElement&&i.parentElement.insertBefore(u,i),i.setAttribute("copy-code-registered","")}},a=()=>rn().then(()=>new Promise(i=>{setTimeout(()=>{tf.forEach(u=>{document.querySelectorAll(u).forEach(r)}),i()},Z4)})),l=(i,u,c)=>{let{innerText:d=""}=u;/language-(shellscript|shell|bash|sh|zsh)/.test(i.classList.toString())&&(d=d.replace(/^ *(\$|>) /gm,"")),e(d).then(()=>{c.classList.add("copied"),clearTimeout(sa.get(c));const p=setTimeout(()=>{c.classList.remove("copied"),c.blur(),sa.delete(c)},Q4);sa.set(c,p)})};be(()=>{(!o.value||ds)&&a(),$e("click",i=>{const u=i.target;if(u.matches('div[class*="language-"] > button.copy')){const c=u.parentElement,d=u.nextElementSibling;d&&l(c,d,u)}else if(u.matches('div[class*="language-"] div.copy-icon')){const c=u.parentElement,d=c.parentElement,p=c.nextElementSibling;p&&l(d,p,c)}}),ue(()=>n.value.path,()=>{(!o.value||ds)&&a()})})};var of=At({setup:()=>{nf()}});const Mu=({title:e,desc:t="",logo:n="",color:o="",link:r=""})=>{const a=[s("img",{class:"vp-card-logo",src:Le(n)}),s("div",{class:"vp-card-content"},[s("div",{class:"vp-card-title",innerHTML:e}),s("hr"),s("div",{class:"vp-card-desc",innerHTML:t})])],l={class:"vp-card"};return o&&(l.style={background:o}),Po(r)?s("a",{href:r,target:"_blank",...l},a):s(ze,{to:r,...l},()=>a)};Mu.displayName="VPCard";const cr=ro("VUEPRESS_CODE_TAB_STORE",{});var rf=V({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:{type:String,default:""}},slots:Object,setup(e,{slots:t}){const n=W(e.active),o=Ne([]),r=()=>{e.tabId&&(cr.value[e.tabId]=e.data[n.value].id)},a=(c=n.value)=>{n.value=c{n.value=c>0?c-1:o.value.length-1,o.value[n.value].focus()},i=(c,d)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),n.value=d):c.key==="ArrowRight"?(c.preventDefault(),a()):c.key==="ArrowLeft"&&(c.preventDefault(),l()),e.tabId&&(cr.value[e.tabId]=e.data[n.value].id)},u=()=>{if(e.tabId){const c=e.data.findIndex(({id:d})=>cr.value[e.tabId]===d);if(c!==-1)return c}return e.active};return be(()=>{n.value=u(),ue(()=>cr.value[e.tabId],(c,d)=>{if(e.tabId&&c!==d){const p=e.data.findIndex(({id:f})=>f===c);p!==-1&&(n.value=p)}})}),()=>e.data.length?s("div",{class:"vp-code-tabs"},[s("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:c},d)=>{const p=d===n.value;return s("button",{type:"button",ref:f=>{f&&(o.value[d]=f)},class:["vp-code-tab-nav",{active:p}],role:"tab","aria-controls":`codetab-${e.id}-${d}`,"aria-selected":p,onClick:()=>{n.value=d,r()},onKeydown:f=>i(f,d)},t[`title${d}`]({value:c,isActive:p}))})),e.data.map(({id:c},d)=>{const p=d===n.value;return s("div",{class:["vp-code-tab",{active:p}],id:`codetab-${e.id}-${d}`,role:"tabpanel","aria-expanded":p},[s("div",{class:"vp-code-tab-title"},t[`title${d}`]({value:c,isActive:p})),t[`tab${d}`]({value:c,isActive:p})])})]):null}});const $u=({active:e=!1},{slots:t})=>{var n;return s("div",{class:["code-group-item",{active:e}],"aria-selected":e},(n=t.default)==null?void 0:n.call(t))};$u.displayName="CodeGroupItem";const af=V({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=W(-1),o=Ne([]),r=(i=n.value)=>{n.value=i{n.value=i>0?i-1:o.value.length-1,o.value[n.value].focus()},l=(i,u)=>{i.key===" "||i.key==="Enter"?(i.preventDefault(),n.value=u):i.key==="ArrowRight"?(i.preventDefault(),r(u)):i.key==="ArrowLeft"&&(i.preventDefault(),a(u))};return()=>{var u;const i=(((u=t.default)==null?void 0:u.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return i.length===0?null:(n.value<0||n.value>i.length-1?(n.value=i.findIndex(c=>"active"in c.props),n.value===-1&&(n.value=0)):i.forEach((c,d)=>{c.props.active=d===n.value}),s("div",{class:"code-group"},[s("div",{class:"code-group-nav"},i.map((c,d)=>{const p=d===n.value;return s("button",{type:"button",ref:f=>{f&&(o.value[d]=f)},class:["code-group-nav-tab",{active:p}],"aria-pressed":p,"aria-expanded":p,onClick:()=>{n.value=d},onKeydown:f=>l(f,d)},c.props.title)})),i]))}}}),lf=()=>{$e("beforeprint",()=>{document.querySelectorAll("details").forEach(e=>{e.open=!0})})};const sf='',cf='',uf='';const ca={useBabel:!1,jsLib:[],cssLib:[],codepenLayout:"left",codepenEditors:"101",babel:"https://unpkg.com/@babel/standalone/babel.min.js",vue:"https://unpkg.com/vue/dist/vue.global.prod.js",react:"https://unpkg.com/react/umd/react.production.min.js",reactDOM:"https://unpkg.com/react-dom/umd/react-dom.production.min.js"},ps={html:{types:["html","slim","haml","md","markdown","vue"],map:{html:"none",vue:"none",md:"markdown"}},js:{types:["js","javascript","coffee","coffeescript","ts","typescript","ls","livescript"],map:{js:"none",javascript:"none",coffee:"coffeescript",ls:"livescript",ts:"typescript"}},css:{types:["css","less","sass","scss","stylus","styl"],map:{css:"none",styl:"stylus"}}},df=(e,t,n)=>{const o=document.createElement(e);return zo(t)&&Ye(t).forEach(r=>{if(r.indexOf("data"))o[r]=t[r];else{const a=r.replace("data","");o.dataset[a]=t[r]}}),n&&n.forEach(r=>{o.appendChild(r)}),o},Il=e=>({...ca,...e,jsLib:Array.from(new Set([...ca.jsLib||[],...e.jsLib||[]])),cssLib:Array.from(new Set([...ca.cssLib||[],...e.cssLib||[]]))}),On=(e,t)=>{if(e[t]!==void 0)return e[t];const n=new Promise(o=>{var a;const r=document.createElement("script");r.src=t,(a=document.querySelector("body"))==null||a.appendChild(r),r.onload=()=>{o()}});return e[t]=n,n},pf=(e,t)=>{if(t.css&&Array.from(e.childNodes).every(n=>n.nodeName!=="STYLE")){const n=df("style",{innerHTML:t.css});e.appendChild(n)}},ff=(e,t,n)=>{const o=n.getScript();if(o&&Array.from(t.childNodes).every(r=>r.nodeName!=="SCRIPT")){const r=document.createElement("script");r.appendChild(document.createTextNode(`{const document=window.document.querySelector('#${e} .vp-code-demo-display').shadowRoot; +${o}}`)),t.appendChild(r)}},vf=e=>{const t=Ye(e),n={html:[],js:[],css:[],isLegal:!1};return["html","js","css"].forEach(o=>{const r=t.filter(a=>ps[o].types.includes(a));if(r.length){const a=r[0];n[o]=[e[a].replace(/^\n|\n$/g,""),ps[o].map[a]||a]}}),n.isLegal=(!n.html.length||n.html[1]==="none")&&(!n.js.length||n.js[1]==="none")&&(!n.css.length||n.css[1]==="none"),n},zu=e=>e.replace(/
/g,"
").replace(/<((\S+)[^<]*?)\s+\/>/g,"<$1>"),Nu=e=>`
+${zu(e)} +
`,hf=e=>`${e.replace("export default ","const $reactApp = ").replace(/App\.__style__(\s*)=(\s*)`([\s\S]*)?`/,"")}; +ReactDOM.createRoot(document.getElementById("app")).render(React.createElement($reactApp))`,mf=e=>e.replace(/export\s+default\s*\{(\n*[\s\S]*)\n*\}\s*;?$/u,"Vue.createApp({$1}).mount('#app')").replace(/export\s+default\s*define(Async)?Component\s*\(\s*\{(\n*[\s\S]*)\n*\}\s*\)\s*;?$/u,"Vue.createApp({$1}).mount('#app')").trim(),Hu=e=>`(function(exports){var module={};module.exports=exports;${e};return module.exports.__esModule?module.exports.default:module.exports;})({})`,gf=(e,t)=>{const n=Il(t),o=e.js[0]||"";return{...n,html:zu(e.html[0]||""),js:o,css:e.css[0]||"",isLegal:e.isLegal,getScript:()=>{var r;return n.useBabel?((r=window.Babel.transform(o,{presets:["es2015"]}))==null?void 0:r.code)||"":o}}},_f=/
  1. 这是脚注内容 ↩︎

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/demo/page.html b/demo/page.html index 09373dd5..f11d3baa 100644 --- a/demo/page.html +++ b/demo/page.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
页面配置

页面配置

Ms.Hope...大约 1 分鐘使用指南页面配置使用指南

more 注释之前的内容被视为文章摘要。

页面信息

你可以在 Markdown 的 Frontmatter 中设置页面信息。

  • 作者设置为 Ms.Hope。
  • 写作日期为 2020 年 1 月 1 日
  • 分类为 “使用指南”
  • 标签为 “页面配置” 和 “使用指南”

页面内容

你可以自由在这里书写你的 Markdown。

提示

  • 你可以将图片和 Markdown 文件放置在一起,但是你需要使用相对链接./ 进行引用。

  • 对于 .vuepress/public 文件夹的图片,请使用绝对链接 / 进行引用。

主题包含了一个自定义徽章可以使用:

文字结尾应该有深蓝色的 徽章文字 徽章。 徽章文字

页面结构

此页面应当包含:

你可以通过主题选项和页面 Frontmatter 自定义它们。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
跳至主要內容
页面配置

页面配置

Ms.Hope...大约 1 分鐘使用指南页面配置使用指南

more 注释之前的内容被视为文章摘要。

页面信息

你可以在 Markdown 的 Frontmatter 中设置页面信息。

  • 作者设置为 Ms.Hope。
  • 写作日期为 2020 年 1 月 1 日
  • 分类为 “使用指南”
  • 标签为 “页面配置” 和 “使用指南”

页面内容

你可以自由在这里书写你的 Markdown。

提示

  • 你可以将图片和 Markdown 文件放置在一起,但是你需要使用相对链接./ 进行引用。

  • 对于 .vuepress/public 文件夹的图片,请使用绝对链接 / 进行引用。

主题包含了一个自定义徽章可以使用:

文字结尾应该有深蓝色的 徽章文字 徽章。 徽章文字

页面结构

此页面应当包含:

你可以通过主题选项和页面 Frontmatter 自定义它们。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/article/index.html b/en/article/index.html index b569e1f4..6dc1e4e0 100644 --- a/en/article/index.html +++ b/en/article/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Code Notes

Here is where Ven2s stores his notes.

+
Skip to main content
Automated Deployment of Frontend to Server using GitHub Actions

Automatically deploying the Front End to the server using GitHub Actions

@@ -94,6 +94,6 @@

开始部署

wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 

Ven2s...About 5 minHome Network Layoutkmstools
2
3
- + diff --git a/en/category/guide/index.html b/en/category/guide/index.html index a6b717c7..7d7e8f5e 100644 --- a/en/category/guide/index.html +++ b/en/category/guide/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Page Config

Content before more comment is regarded as page excerpt.

+
Skip to main content
Page Config

Content before more comment is regarded as page excerpt.


Ms.Hope...Less than 1 minuteGuidePage configGuide
Markdown Enhance

VuePress basically generate pages from Markdown files. So you can use it to generate documentation or blog sites easily.

You should create and write Markdown files, so that VuePress can convert them to different pages according to file structure.


Ven2s...About 3 minGuideMarkdown
- + diff --git a/en/category/home-network-layout/index.html b/en/category/home-network-layout/index.html index b478265c..b4b14a1b 100644 --- a/en/category/home-network-layout/index.html +++ b/en/category/home-network-layout/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
KMS 服務端安裝部署教程
+ - + diff --git a/en/category/index.html b/en/category/index.html index 6e6431a2..5908107e 100644 --- a/en/category/index.html +++ b/en/category/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/en/category/linux/index.html b/en/category/linux/index.html index 2b08a7e7..e8378eb6 100644 --- a/en/category/linux/index.html +++ b/en/category/linux/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Automated Deployment of Frontend to Server using GitHub Actions
+ - + diff --git a/en/category/macos/index.html b/en/category/macos/index.html index 12a6e24b..6ff23e3d 100644 --- a/en/category/macos/index.html +++ b/en/category/macos/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Hackintosh
+
Skip to main content
Hackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

@@ -51,6 +51,6 @@

闲话 回忆与现在

刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。


Ven2s...About 3 minMacOSHackintosh
- + diff --git a/en/category/windows/index.html b/en/category/windows/index.html index 40825bc2..13599fa7 100644 --- a/en/category/windows/index.html +++ b/en/category/windows/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Productivity Tools on GitHub
+ - + diff --git "a/en/category/\350\213\271\346\236\234/index.html" "b/en/category/\350\213\271\346\236\234/index.html" index dd1c5bb0..cc3e10af 100644 --- "a/en/category/\350\213\271\346\236\234/index.html" +++ "b/en/category/\350\213\271\346\236\234/index.html" @@ -30,15 +30,15 @@ } - + -
Skip to main content
苹果 1

苹果 1

+ - + diff --git a/en/code/best-emoji.html b/en/code/best-emoji.html index 44f58a83..bb39c9c4 100644 --- a/en/code/best-emoji.html +++ b/en/code/best-emoji.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

超酷的Emoji表情!

Ven2s...About 6 minMarkdownBlog

Best Markdown Emoji !

Emoji表情

风至万始苏

原文open in new window

将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
如"😊",显示为😊

人物

syntaxpreviewsyntaxpreviewsyntaxpreview
:bowtie::bowtie::smile:😄:laughing:😆
:blush:😊:smiley:😃:relaxed:☺️
:smirk:😏:heart_eyes:😍:kissing_heart:😘
:kissing_closed_eyes:😚:flushed:😳:relieved:😌
:satisfied:😆:grin:😁:wink:😉
:stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
:kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
:sleeping:😴:worried:😟:frowning:😦
:anguished:😧:open_mouth:😮:grimacing:😬
:confused:😕:hushed:😯:expressionless:😑
:unamused:😒:sweat_smile:😅:sweat:😓
:disappointed_relieved:😥:weary:😩:pensive:😔
:disappointed:😞:confounded:😖:fearful:😨
:cold_sweat:😰:persevere:😣:cry:😢
:sob:😭:joy:😂:astonished:😲
:scream:😱:neckbeard::neckbeard::tired_face:😫
:angry:😠:rage:😡:triumph:😤
:sleepy:😪:yum:😋:mask:😷
:sunglasses:😎:dizzy_face:😵:imp:👿
:smiling_imp:😈:neutral_face:😐:no_mouth:😶
:innocent:😇:alien:👽:yellow_heart:💛
:blue_heart:💙:purple_heart:💜:heart:❤️
:green_heart:💚:broken_heart:💔:heartbeat:💓
:heartpulse:💗:two_hearts:💕:revolving_hearts:💞
:cupid:💘:sparkling_heart:💖:sparkles:
:star::star2:🌟:dizzy:💫
:boom:💥:collision:💥:anger:💢
:exclamation::question::grey_exclamation:
:grey_question::zzz:💤:dash:💨
:sweat_drops:💦:notes:🎶:musical_note:🎵
:fire:🔥:hankey:💩:poop:💩
::💩:+1:👍:thumbsup:👍
:-1:👎:thumbsdown:👎:ok_hand:👌
:punch:👊:facepunch:👊:fist:
:v:✌️:wave:👋:hand:
:raised_hand::open_hands:👐:point_up:☝️
:point_down:👇:point_left:👈:point_right:👉
:raised_hands:🙌:pray:🙏:point_up_2:👆
:clap:👏:muscle:💪:metal:🤘
:fu:🖕:walking:🚶:runner:🏃
:running:🏃:couple:👫:family:👪
:two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
:dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
:information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
:person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
:couplekiss:💏:couple_with_heart:💑:massage:💆
:haircut:💇:nail_care:💅:boy:👦
:girl:👧:woman:👩:man:👨
:baby:👶:older_woman:👵:older_man:👴
:person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
:construction_worker:👷:cop:👮:angel:👼
:princess:👸:smiley_cat:😺:smile_cat:😸
:heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
:scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
:pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
:see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
:guardsman:💂‍♂️:skull:💀:feet:🐾
:lips:👄:kiss:💋:droplet:💧
:ear:👂:eyes:👀:nose:👃
:tongue:👅:love_letter:💌:bust_in_silhouette:👤
:busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
:feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
:godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
:rage2::rage2::rage3::rage3::rage4::rage4:
:suspect::suspect::trollface::trollface:

自然

syntaxpreviewsyntaxpreviewsyntaxpreview
:sunny:☀️:umbrella::cloud:☁️
:snowflake:❄️:snowman::zap:
:cyclone:🌀:foggy:🌁:ocean:🌊
:cat:🐱:dog:🐶:mouse:🐭
:hamster:🐹:rabbit:🐰:wolf:🐺
:frog:🐸:tiger:🐯:koala:🐨
:bear:🐻:pig:🐷:pig_nose:🐽
:cow:🐮:boar:🐗:monkey_face:🐵
:monkey:🐒:horse:🐴:racehorse:🐎
:camel:🐫:sheep:🐑:elephant:🐘
:panda_face:🐼:snake:🐍:bird:🐦
:baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
:chicken:🐔:penguin:🐧:turtle:🐢
:bug:🐛:honeybee:🐝:ant:🐜
:beetle:🪲:snail:🐌:octopus:🐙
:tropical_fish:🐠:fish:🐟:whale:🐳
:whale2:🐋:dolphin:🐬:cow2:🐄
:ram:🐏:rat:🐀:water_buffalo:🐃
:tiger2:🐅:rabbit2:🐇:dragon:🐉
:goat:🐐:rooster:🐓:dog2:🐕
:pig2:🐖:mouse2:🐁:ox:🐂
:dragon_face:🐲:blowfish:🐡:crocodile:🐊
:dromedary_camel:🐪:leopard:🐆:cat2:🐈
:poodle:🐩:paw_prints:🐾:bouquet:💐
:cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
:rose:🌹:sunflower:🌻:hibiscus:🌺
:maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
:herb:🌿:mushroom:🍄:cactus:🌵
:palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
:chestnut:🌰:seedling:🌱:blossom:🌼
:ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
:sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
:new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
:full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
:waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
:moon:🌔:earth_africa:🌍:earth_americas:🌎
:earth_asia:🌏:volcano:🌋:milky_way:🌌
:partly_sunny::octocat::octocat::squirrel::squirrel:
:waxing_gibbous_moon:🌔

物体

syntaxpreviewsyntaxpreviewsyntaxpreview
:bamboo:🎍:gift_heart:💝:dolls:🎎
:school_satchel:🎒:mortar_board:🎓:flags:🎏
:fireworks:🎆:sparkler:🎇:wind_chime:🎐
:rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
:santa:🎅:christmas_tree:🎄:gift:🎁
:bell:🔔:no_bell:🔕:tanabata_tree:🎋
:tada:🎉:confetti_ball:🎊:balloon:🎈
:crystal_ball:🔮:cd:💿:dvd:📀
:floppy_disk:💾:camera:📷:video_camera:📹
:movie_camera:🎥:computer:💻:tv:📺
:iphone:📱:phone:☎️:telephone:☎️
:telephone_receiver:📞:pager:📟:fax:📠
:minidisc:💽:vhs:📼:sound:🔉
:speaker:🔈:mute:🔇:loudspeaker:📢
:mega:📣:hourglass::hourglass_flowing_sand:
:alarm_clock::watch::radio:📻
:satellite:📡:loop::mag:🔍
:mag_right:🔎:unlock:🔓:lock:🔒
:lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
:bulb:💡:flashlight:🔦:high_brightness:🔆
:low_brightness:🔅:electric_plug:🔌:battery:🔋
:calling:📲:email:📧:mailbox:📫
:postbox:📮:bath:🛀:bathtub:🛁
:shower:🚿:toilet:🚽:wrench:🔧
:nut_and_bolt:🔩:hammer:🔨:seat:💺
:moneybag:💰:yen:💴:dollar:💵
:pound:💷:euro:💶:credit_card:💳
:money_with_wings:💸:e-mail:📧:inbox_tray:📥
:outbox_tray:📤:envelope:✉️:incoming_envelope:📨
:postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
:mailbox_with_no_mail:📭:door:🚪:smoking:🚬
:bomb:💣:gun:🔫:hocho:🔪
:pill:💊:syringe:💉:page_facing_up:📄
:page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
:chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
:clipboard:📋:calendar:📆:date:📅
:card_index:📇:file_folder:📁:open_file_folder:📂
:scissors:✂️:pushpin:📌:paperclip:📎
:black_nib:✒️:pencil2:✏️:straight_ruler:📏
:triangular_ruler:📐:closed_book:📕:green_book:📗
:blue_book:📘:orange_book:📙:notebook:📓
:notebook_with_decorative_cover:📔:ledger:📒:books:📚
:bookmark:🔖:microscope:🔬:telescope:🔭
:name_badge:📛:newspaper:📰:football:🏈
:basketball:🏀:soccer::baseball:
:tennis:🎾:8ball:🎱:rugby_football:🏉
:bowling:🎳:golf::mountain_bicyclist:🚵
:bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
:swimmer:🏊:surfer:🏄:ski:🎿
:spades:♠️:hearts:♥️:clubs:♣️
:diamonds:♦️:gem:💎:ring:💍
:trophy:🏆:musical_score:🎼:musical_keyboard:🎹
:violin:🎻:space_invader:👾:video_game:🎮
:black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
:dart:🎯:mahjong:🀄:clapper:🎬
:memo:📝:pencil:📝:book:📖
:art:🎨:microphone:🎤:headphones:🎧
:trumpet:🎺:saxophone:🎷:guitar:🎸
:shoe:👞:sandal:👡:high_heel:👠
:lipstick:💄:boot:👢:shirt:👕
:tshirt:👕:necktie:👔:womans_clothes:👚
:dress:👗:running_shirt_with_sash:🎽:jeans:👖
:kimono:👘:bikini:👙:ribbon:🎀
:tophat:🎩:crown:👑:womans_hat:👒
:mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
:handbag:👜:pouch:👝:purse:👛
:eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
:tea:🍵:sake:🍶:baby_bottle:🍼
:beer:🍺:beers:🍻:cocktail:🍸
:tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
:pizza:🍕:hamburger:🍔:fries:🍟
:poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
:curry:🍛:fried_shrimp:🍤:bento:🍱
:sushi:🍣:fish_cake:🍥:rice_ball:🍙
:rice_cracker:🍘:rice:🍚:ramen:🍜
:stew:🍲:oden:🍢:dango:🍡
:egg:🥚:bread:🍞:doughnut:🍩
:custard:🍮:icecream:🍦:ice_cream:🍨
:shaved_ice:🍧:birthday:🎂:cake:🍰
:cookie:🍪:chocolate_bar:🍫:candy:🍬
:lollipop:🍭:honey_pot:🍯:apple:🍎
:green_apple:🍏:tangerine:🍊:lemon:🍋
:cherries:🍒:grapes:🍇:watermelon:🍉
:strawberry:🍓:peach:🍑:melon:🍈
:banana:🍌:pear:🍐:pineapple:🍍
:sweet_potato:🍠:eggplant:🍆:tomato:🍅
:corn:🌽

地点

syntaxpreviewsyntaxpreviewsyntaxpreview
:house:🏠:house_with_garden:🏡:school:🏫
:office:🏢:post_office:🏣:hospital:🏥
:bank:🏦:convenience_store:🏪:love_hotel:🏩
:hotel:🏨:wedding:💒:church:
:department_store:🏬:european_post_office:🏤:city_sunrise:🌇
:city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
:tent::factory:🏭:tokyo_tower:🗼
:japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
:sunrise:🌅:stars:🌠:statue_of_liberty:🗽
:bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
:ferris_wheel:🎡:fountain::roller_coaster:🎢
:ship:🚢:speedboat:🚤:boat:
:sailboat::rowboat:🚣:anchor:
:rocket:🚀:airplane:✈️:helicopter:🚁
:steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
:bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
:mountain_cableway:🚠:tractor:🚜:blue_car:🚙
:oncoming_automobile:🚘:car:🚗:red_car:🚗
:taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
:bus:🚌:oncoming_bus:🚍:rotating_light:🚨
:police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
:ambulance:🚑:minibus:🚐:truck:🚚
:train:🚋:station:🚉:train2:🚆
:bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
:monorail:🚝:railway_car:🚃:trolleybus:🚎
:ticket:🎫:fuelpump::vertical_traffic_light:🚦
:traffic_light:🚥:warning:⚠️:construction:🚧
:beginner:🔰:atm:🏧:slot_machine:🎰
:busstop:🚏:barber:💈:hotsprings:♨️
:checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
:moyai:🗿:circus_tent:🎪:performing_arts:🎭
:round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
:kr:🇰🇷:cn:🇨🇳:us:🇺🇸
:fr:🇫🇷:es:🇪🇸:it:🇮🇹
:ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
:de:🇩🇪

符号

syntaxpreviewsyntaxpreviewsyntaxpreview
:one:1️⃣:two:2️⃣:three:3️⃣
:four:4️⃣:five:5️⃣:six:6️⃣
:seven:7️⃣:eight:8️⃣:nine:9️⃣
:keycap_ten:🔟:1234:🔢:zero:0️⃣
:hash:#️⃣:symbols:🔣:arrow_backward:◀️
:arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
:capital_abcd:🔠:abcd:🔡:abc:🔤
:arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
:arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
:arrow_double_down::arrow_double_up::arrow_down_small:🔽
:arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
:arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
:arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
:rewind::fast_forward::information_source:ℹ️
:ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
:repeat_one:🔂:new:🆕:top:🔝
:up:🆙:cool:🆒:free:🆓
:ng:🆖:cinema:🎦:koko:🈁
:signal_strength:📶:u5272::u5272::u5408::u5408:
:u55b6::u55b6::u6307::u6307::u6708::u6708:
:u6709::u6709::u6e80:🈵:u7121::u7121:
:u7533::u7533::u7a7a::u7a7a::u7981::u7981:
:sa:🈂️:restroom:🚻:mens:🚹
:womens:🚺:baby_symbol:🚼:no_smoking:🚭
:parking:🅿️:wheelchair::metro:🚇
:baggage_claim:🛄:accept:🉑:wc:🚾
:potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
:congratulations:㊗️:m:Ⓜ️:passport_control:🛂
:left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
:cl:🆑:sos:🆘:id:🆔
:no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
:do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
:no_pedestrians:🚷:children_crossing:🚸:no_entry:
:eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
:vs:🆚:vibration_mode:📳:mobile_phone_off:📴
:chart:💹:currency_exchange:💱:aries:
:taurus::gemini::cancer:
:leo::virgo::libra:
:scorpius::sagittarius::capricorn:
:aquarius::pisces::ophiuchus:
:six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
:b:🅱️:ab:🆎:o2:🅾️
:diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
:on:🔛:soon:🔜:clock1:🕐
:clock130:🕜:clock10:🕙:clock1030:🕥
:clock11:🕚:clock1130:🕦:clock12:🕛
:clock1230:🕧:clock2:🕑:clock230:🕝
:clock3:🕒:clock330:🕞:clock4:🕓
:clock430:🕟:clock5:🕔:clock530:🕠
:clock6:🕕:clock630:🕡:clock7:🕖
:clock730:🕢:clock8:🕗:clock830:🕣
:clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
:copyright:©️:registered:®️:tm:™️
:x::heavy_exclamation_mark::bangbang:‼️
:interrobang:⁉️:o::heavy_multiplication_x:✖️
:heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
:white_flower:💮:100:💯:heavy_check_mark:✔️
:ballot_box_with_check:☑️:radio_button:🔘:link:🔗
:curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
:trident:🔱:black_large_square::white_large_square:
:white_check_mark::white_square_button:🔳:black_square_button:🔲
:black_circle::white_circle::red_circle:🔴
:large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
:small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
:small_red_triangle_down:🔻:shipit::shipit:
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content

超酷的Emoji表情!

Ven2s...About 6 minMarkdownBlog

Best Markdown Emoji !

Emoji表情

风至万始苏

原文open in new window

将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
如"😊",显示为😊

人物

syntaxpreviewsyntaxpreviewsyntaxpreview
:bowtie::bowtie::smile:😄:laughing:😆
:blush:😊:smiley:😃:relaxed:☺️
:smirk:😏:heart_eyes:😍:kissing_heart:😘
:kissing_closed_eyes:😚:flushed:😳:relieved:😌
:satisfied:😆:grin:😁:wink:😉
:stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
:kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
:sleeping:😴:worried:😟:frowning:😦
:anguished:😧:open_mouth:😮:grimacing:😬
:confused:😕:hushed:😯:expressionless:😑
:unamused:😒:sweat_smile:😅:sweat:😓
:disappointed_relieved:😥:weary:😩:pensive:😔
:disappointed:😞:confounded:😖:fearful:😨
:cold_sweat:😰:persevere:😣:cry:😢
:sob:😭:joy:😂:astonished:😲
:scream:😱:neckbeard::neckbeard::tired_face:😫
:angry:😠:rage:😡:triumph:😤
:sleepy:😪:yum:😋:mask:😷
:sunglasses:😎:dizzy_face:😵:imp:👿
:smiling_imp:😈:neutral_face:😐:no_mouth:😶
:innocent:😇:alien:👽:yellow_heart:💛
:blue_heart:💙:purple_heart:💜:heart:❤️
:green_heart:💚:broken_heart:💔:heartbeat:💓
:heartpulse:💗:two_hearts:💕:revolving_hearts:💞
:cupid:💘:sparkling_heart:💖:sparkles:
:star::star2:🌟:dizzy:💫
:boom:💥:collision:💥:anger:💢
:exclamation::question::grey_exclamation:
:grey_question::zzz:💤:dash:💨
:sweat_drops:💦:notes:🎶:musical_note:🎵
:fire:🔥:hankey:💩:poop:💩
::💩:+1:👍:thumbsup:👍
:-1:👎:thumbsdown:👎:ok_hand:👌
:punch:👊:facepunch:👊:fist:
:v:✌️:wave:👋:hand:
:raised_hand::open_hands:👐:point_up:☝️
:point_down:👇:point_left:👈:point_right:👉
:raised_hands:🙌:pray:🙏:point_up_2:👆
:clap:👏:muscle:💪:metal:🤘
:fu:🖕:walking:🚶:runner:🏃
:running:🏃:couple:👫:family:👪
:two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
:dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
:information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
:person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
:couplekiss:💏:couple_with_heart:💑:massage:💆
:haircut:💇:nail_care:💅:boy:👦
:girl:👧:woman:👩:man:👨
:baby:👶:older_woman:👵:older_man:👴
:person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
:construction_worker:👷:cop:👮:angel:👼
:princess:👸:smiley_cat:😺:smile_cat:😸
:heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
:scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
:pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
:see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
:guardsman:💂‍♂️:skull:💀:feet:🐾
:lips:👄:kiss:💋:droplet:💧
:ear:👂:eyes:👀:nose:👃
:tongue:👅:love_letter:💌:bust_in_silhouette:👤
:busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
:feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
:godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
:rage2::rage2::rage3::rage3::rage4::rage4:
:suspect::suspect::trollface::trollface:

自然

syntaxpreviewsyntaxpreviewsyntaxpreview
:sunny:☀️:umbrella::cloud:☁️
:snowflake:❄️:snowman::zap:
:cyclone:🌀:foggy:🌁:ocean:🌊
:cat:🐱:dog:🐶:mouse:🐭
:hamster:🐹:rabbit:🐰:wolf:🐺
:frog:🐸:tiger:🐯:koala:🐨
:bear:🐻:pig:🐷:pig_nose:🐽
:cow:🐮:boar:🐗:monkey_face:🐵
:monkey:🐒:horse:🐴:racehorse:🐎
:camel:🐫:sheep:🐑:elephant:🐘
:panda_face:🐼:snake:🐍:bird:🐦
:baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
:chicken:🐔:penguin:🐧:turtle:🐢
:bug:🐛:honeybee:🐝:ant:🐜
:beetle:🪲:snail:🐌:octopus:🐙
:tropical_fish:🐠:fish:🐟:whale:🐳
:whale2:🐋:dolphin:🐬:cow2:🐄
:ram:🐏:rat:🐀:water_buffalo:🐃
:tiger2:🐅:rabbit2:🐇:dragon:🐉
:goat:🐐:rooster:🐓:dog2:🐕
:pig2:🐖:mouse2:🐁:ox:🐂
:dragon_face:🐲:blowfish:🐡:crocodile:🐊
:dromedary_camel:🐪:leopard:🐆:cat2:🐈
:poodle:🐩:paw_prints:🐾:bouquet:💐
:cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
:rose:🌹:sunflower:🌻:hibiscus:🌺
:maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
:herb:🌿:mushroom:🍄:cactus:🌵
:palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
:chestnut:🌰:seedling:🌱:blossom:🌼
:ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
:sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
:new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
:full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
:waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
:moon:🌔:earth_africa:🌍:earth_americas:🌎
:earth_asia:🌏:volcano:🌋:milky_way:🌌
:partly_sunny::octocat::octocat::squirrel::squirrel:
:waxing_gibbous_moon:🌔

物体

syntaxpreviewsyntaxpreviewsyntaxpreview
:bamboo:🎍:gift_heart:💝:dolls:🎎
:school_satchel:🎒:mortar_board:🎓:flags:🎏
:fireworks:🎆:sparkler:🎇:wind_chime:🎐
:rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
:santa:🎅:christmas_tree:🎄:gift:🎁
:bell:🔔:no_bell:🔕:tanabata_tree:🎋
:tada:🎉:confetti_ball:🎊:balloon:🎈
:crystal_ball:🔮:cd:💿:dvd:📀
:floppy_disk:💾:camera:📷:video_camera:📹
:movie_camera:🎥:computer:💻:tv:📺
:iphone:📱:phone:☎️:telephone:☎️
:telephone_receiver:📞:pager:📟:fax:📠
:minidisc:💽:vhs:📼:sound:🔉
:speaker:🔈:mute:🔇:loudspeaker:📢
:mega:📣:hourglass::hourglass_flowing_sand:
:alarm_clock::watch::radio:📻
:satellite:📡:loop::mag:🔍
:mag_right:🔎:unlock:🔓:lock:🔒
:lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
:bulb:💡:flashlight:🔦:high_brightness:🔆
:low_brightness:🔅:electric_plug:🔌:battery:🔋
:calling:📲:email:📧:mailbox:📫
:postbox:📮:bath:🛀:bathtub:🛁
:shower:🚿:toilet:🚽:wrench:🔧
:nut_and_bolt:🔩:hammer:🔨:seat:💺
:moneybag:💰:yen:💴:dollar:💵
:pound:💷:euro:💶:credit_card:💳
:money_with_wings:💸:e-mail:📧:inbox_tray:📥
:outbox_tray:📤:envelope:✉️:incoming_envelope:📨
:postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
:mailbox_with_no_mail:📭:door:🚪:smoking:🚬
:bomb:💣:gun:🔫:hocho:🔪
:pill:💊:syringe:💉:page_facing_up:📄
:page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
:chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
:clipboard:📋:calendar:📆:date:📅
:card_index:📇:file_folder:📁:open_file_folder:📂
:scissors:✂️:pushpin:📌:paperclip:📎
:black_nib:✒️:pencil2:✏️:straight_ruler:📏
:triangular_ruler:📐:closed_book:📕:green_book:📗
:blue_book:📘:orange_book:📙:notebook:📓
:notebook_with_decorative_cover:📔:ledger:📒:books:📚
:bookmark:🔖:microscope:🔬:telescope:🔭
:name_badge:📛:newspaper:📰:football:🏈
:basketball:🏀:soccer::baseball:
:tennis:🎾:8ball:🎱:rugby_football:🏉
:bowling:🎳:golf::mountain_bicyclist:🚵
:bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
:swimmer:🏊:surfer:🏄:ski:🎿
:spades:♠️:hearts:♥️:clubs:♣️
:diamonds:♦️:gem:💎:ring:💍
:trophy:🏆:musical_score:🎼:musical_keyboard:🎹
:violin:🎻:space_invader:👾:video_game:🎮
:black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
:dart:🎯:mahjong:🀄:clapper:🎬
:memo:📝:pencil:📝:book:📖
:art:🎨:microphone:🎤:headphones:🎧
:trumpet:🎺:saxophone:🎷:guitar:🎸
:shoe:👞:sandal:👡:high_heel:👠
:lipstick:💄:boot:👢:shirt:👕
:tshirt:👕:necktie:👔:womans_clothes:👚
:dress:👗:running_shirt_with_sash:🎽:jeans:👖
:kimono:👘:bikini:👙:ribbon:🎀
:tophat:🎩:crown:👑:womans_hat:👒
:mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
:handbag:👜:pouch:👝:purse:👛
:eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
:tea:🍵:sake:🍶:baby_bottle:🍼
:beer:🍺:beers:🍻:cocktail:🍸
:tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
:pizza:🍕:hamburger:🍔:fries:🍟
:poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
:curry:🍛:fried_shrimp:🍤:bento:🍱
:sushi:🍣:fish_cake:🍥:rice_ball:🍙
:rice_cracker:🍘:rice:🍚:ramen:🍜
:stew:🍲:oden:🍢:dango:🍡
:egg:🥚:bread:🍞:doughnut:🍩
:custard:🍮:icecream:🍦:ice_cream:🍨
:shaved_ice:🍧:birthday:🎂:cake:🍰
:cookie:🍪:chocolate_bar:🍫:candy:🍬
:lollipop:🍭:honey_pot:🍯:apple:🍎
:green_apple:🍏:tangerine:🍊:lemon:🍋
:cherries:🍒:grapes:🍇:watermelon:🍉
:strawberry:🍓:peach:🍑:melon:🍈
:banana:🍌:pear:🍐:pineapple:🍍
:sweet_potato:🍠:eggplant:🍆:tomato:🍅
:corn:🌽

地点

syntaxpreviewsyntaxpreviewsyntaxpreview
:house:🏠:house_with_garden:🏡:school:🏫
:office:🏢:post_office:🏣:hospital:🏥
:bank:🏦:convenience_store:🏪:love_hotel:🏩
:hotel:🏨:wedding:💒:church:
:department_store:🏬:european_post_office:🏤:city_sunrise:🌇
:city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
:tent::factory:🏭:tokyo_tower:🗼
:japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
:sunrise:🌅:stars:🌠:statue_of_liberty:🗽
:bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
:ferris_wheel:🎡:fountain::roller_coaster:🎢
:ship:🚢:speedboat:🚤:boat:
:sailboat::rowboat:🚣:anchor:
:rocket:🚀:airplane:✈️:helicopter:🚁
:steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
:bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
:mountain_cableway:🚠:tractor:🚜:blue_car:🚙
:oncoming_automobile:🚘:car:🚗:red_car:🚗
:taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
:bus:🚌:oncoming_bus:🚍:rotating_light:🚨
:police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
:ambulance:🚑:minibus:🚐:truck:🚚
:train:🚋:station:🚉:train2:🚆
:bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
:monorail:🚝:railway_car:🚃:trolleybus:🚎
:ticket:🎫:fuelpump::vertical_traffic_light:🚦
:traffic_light:🚥:warning:⚠️:construction:🚧
:beginner:🔰:atm:🏧:slot_machine:🎰
:busstop:🚏:barber:💈:hotsprings:♨️
:checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
:moyai:🗿:circus_tent:🎪:performing_arts:🎭
:round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
:kr:🇰🇷:cn:🇨🇳:us:🇺🇸
:fr:🇫🇷:es:🇪🇸:it:🇮🇹
:ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
:de:🇩🇪

符号

syntaxpreviewsyntaxpreviewsyntaxpreview
:one:1️⃣:two:2️⃣:three:3️⃣
:four:4️⃣:five:5️⃣:six:6️⃣
:seven:7️⃣:eight:8️⃣:nine:9️⃣
:keycap_ten:🔟:1234:🔢:zero:0️⃣
:hash:#️⃣:symbols:🔣:arrow_backward:◀️
:arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
:capital_abcd:🔠:abcd:🔡:abc:🔤
:arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
:arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
:arrow_double_down::arrow_double_up::arrow_down_small:🔽
:arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
:arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
:arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
:rewind::fast_forward::information_source:ℹ️
:ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
:repeat_one:🔂:new:🆕:top:🔝
:up:🆙:cool:🆒:free:🆓
:ng:🆖:cinema:🎦:koko:🈁
:signal_strength:📶:u5272::u5272::u5408::u5408:
:u55b6::u55b6::u6307::u6307::u6708::u6708:
:u6709::u6709::u6e80:🈵:u7121::u7121:
:u7533::u7533::u7a7a::u7a7a::u7981::u7981:
:sa:🈂️:restroom:🚻:mens:🚹
:womens:🚺:baby_symbol:🚼:no_smoking:🚭
:parking:🅿️:wheelchair::metro:🚇
:baggage_claim:🛄:accept:🉑:wc:🚾
:potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
:congratulations:㊗️:m:Ⓜ️:passport_control:🛂
:left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
:cl:🆑:sos:🆘:id:🆔
:no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
:do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
:no_pedestrians:🚷:children_crossing:🚸:no_entry:
:eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
:vs:🆚:vibration_mode:📳:mobile_phone_off:📴
:chart:💹:currency_exchange:💱:aries:
:taurus::gemini::cancer:
:leo::virgo::libra:
:scorpius::sagittarius::capricorn:
:aquarius::pisces::ophiuchus:
:six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
:b:🅱️:ab:🆎:o2:🅾️
:diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
:on:🔛:soon:🔜:clock1:🕐
:clock130:🕜:clock10:🕙:clock1030:🕥
:clock11:🕚:clock1130:🕦:clock12:🕛
:clock1230:🕧:clock2:🕑:clock230:🕝
:clock3:🕒:clock330:🕞:clock4:🕓
:clock430:🕟:clock5:🕔:clock530:🕠
:clock6:🕕:clock630:🕡:clock7:🕖
:clock730:🕢:clock8:🕗:clock830:🕣
:clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
:copyright:©️:registered:®️:tm:™️
:x::heavy_exclamation_mark::bangbang:‼️
:interrobang:⁉️:o::heavy_multiplication_x:✖️
:heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
:white_flower:💮:100:💯:heavy_check_mark:✔️
:ballot_box_with_check:☑️:radio_button:🔘:link:🔗
:curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
:trident:🔱:black_large_square::white_large_square:
:white_check_mark::white_square_button:🔳:black_square_button:🔲
:black_circle::white_circle::red_circle:🔴
:large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
:small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
:small_red_triangle_down:🔻:shipit::shipit:
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/code/build-sub.html b/en/code/build-sub.html index e06f5fe6..e8214d97 100644 --- a/en/code/build-sub.html +++ b/en/code/build-sub.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Building Your Own Subscription Conversion Link

Building Your Own Subscription Conversion Link

Ven2s...About 4 minlinuxServer

Front-end Construction of Sub-Web-Modifyopen in new window

This projectopen in new window is based on CareyWang/sub-webopen in new window, with remade CSS styles, solving most layout details, adding "Dark Mode" with automatic switch between light/dark modes (manually switchable by clicking the "sun/moon" icon), adding "Advanced Functions" toggle, adding short link selection/customization functionality, incorporating nearly a hundred remote configurations, introducing sub-web aggregate APIopen in new window, and adding features like uploading custom remote configurations/JS advanced sorting nodes/JS advanced filtering nodes!

Update the system and install Node and Yarn

Run the following four lines of code in order. If you are using CentOS, please replace apt with yum in the first two commands.

apt update -y
+    
Skip to main content
Building Your Own Subscription Conversion Link

Building Your Own Subscription Conversion Link

Ven2s...About 4 minlinuxServer

Front-end Construction of Sub-Web-Modifyopen in new window

This projectopen in new window is based on CareyWang/sub-webopen in new window, with remade CSS styles, solving most layout details, adding "Dark Mode" with automatic switch between light/dark modes (manually switchable by clicking the "sun/moon" icon), adding "Advanced Functions" toggle, adding short link selection/customization functionality, incorporating nearly a hundred remote configurations, introducing sub-web aggregate APIopen in new window, and adding features like uploading custom remote configurations/JS advanced sorting nodes/JS advanced filtering nodes!

Update the system and install Node and Yarn

Run the following four lines of code in order. If you are using CentOS, please replace apt with yum in the first two commands.

apt update -y
 apt install -y curl wget sudo nodejs git
 apt install npm
 npm install -g yarn
@@ -71,6 +71,6 @@
 

At this point, the backend is also set up. You can now access our backend in the browser by visiting the backend domain. Backend setup successful!

Method Two: Docker Container Setup

If your server has Docker installed, you can use the following command:

docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest
 

Then, use the following command to confirm the status:

curl http://localhost:25500/version
 

If it outputs the current subconverter container version, the setup is successful.

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/chatgpt-porxy.html b/en/code/chatgpt-porxy.html index d38a9e47..5e7ca2ca 100644 --- a/en/code/chatgpt-porxy.html +++ b/en/code/chatgpt-porxy.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

ChatGPT-Proxy

Ven2s...About 1 minlinuxChatGPT

Build ChatGPT Reverse Proxy

  • Due to the free proxy of the ChatGPT-Web project being down, we choose this project open in new window to address the proxy issue.

Build Steps

1. Install Docker and Docker-compose

  • Install Docker
# Update and install essential software
+    
Skip to main content

ChatGPT-Proxy

Ven2s...About 1 minlinuxChatGPT

Build ChatGPT Reverse Proxy

  • Due to the free proxy of the ChatGPT-Web project being down, we choose this project open in new window to address the proxy issue.

Build Steps

1. Install Docker and Docker-compose

  • Install Docker
# Update and install essential software
 
 apt-get update && apt-get install -y wget nano
 
@@ -79,6 +79,6 @@
 docker logs -f chatgpt-proxy-server
 docker logs -f go-chatgpt-api
 

Completed

1
😏

Tutorial Source: open in new window

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/chatgpt.html b/en/code/chatgpt.html index 1db0dd92..b8c0586a 100644 --- a/en/code/chatgpt.html +++ b/en/code/chatgpt.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Wonderful ChatGPT

Ven2s...About 2 minlinuxChatGPT

3 Steps to Build Your Own ChatGPT Web

  • ChatGPTopen in new window (full name: Chat Generative Pre-trained Transformer) is a chatbot program developed by OpenAI and was released on November 30, 2022.

  • ChatGPT is an AI-powered natural language processing tool. It engages in conversations by understanding and learning human language. It can interact based on the context of the conversation, simulating human-like chat interactions. It can even complete tasks such as writing emails, video scripts, copywriting, translation, coding, paper writing, and more.

ChatGPT-Webopen in new window

  • Supports dual models and provides two unofficial ChatGPT API methods.

Introduction

MethodFree?ReliabilityQuality
ChatGPTAPI(gpt-3.5-turbo-0301)NoReliableRelatively simple
ChatGPTUnofficialProxyAPI(Web AccessToken)YesRelatively unreliableSmart
  • Comparison:
  1. ChatGPTAPI(gpt-3.5-turbo-0301)open in new window uses gpt-3.5-turbo-0301 to simulate ChatGPT through the official OpenAI API (the most robust method but not free and does not use models fine-tuned for chat).
  2. ChatGPTUnofficialProxyAPIopen in new window accesses ChatGPT's backend API through an unofficial proxy server, bypassing Cloudflare (uses the actual ChatGPT, lightweight, but depends on a third-party server, and has rate limitations).

Thanks to the original author Chanzhaoyu for his hard work

Building Steps

Step One: Install Docker and Docker-compose

  • Install Docker
# Update and install necessary software
+    
Skip to main content

Wonderful ChatGPT

Ven2s...About 2 minlinuxChatGPT

3 Steps to Build Your Own ChatGPT Web

  • ChatGPTopen in new window (full name: Chat Generative Pre-trained Transformer) is a chatbot program developed by OpenAI and was released on November 30, 2022.

  • ChatGPT is an AI-powered natural language processing tool. It engages in conversations by understanding and learning human language. It can interact based on the context of the conversation, simulating human-like chat interactions. It can even complete tasks such as writing emails, video scripts, copywriting, translation, coding, paper writing, and more.

ChatGPT-Webopen in new window

  • Supports dual models and provides two unofficial ChatGPT API methods.

Introduction

MethodFree?ReliabilityQuality
ChatGPTAPI(gpt-3.5-turbo-0301)NoReliableRelatively simple
ChatGPTUnofficialProxyAPI(Web AccessToken)YesRelatively unreliableSmart
  • Comparison:
  1. ChatGPTAPI(gpt-3.5-turbo-0301)open in new window uses gpt-3.5-turbo-0301 to simulate ChatGPT through the official OpenAI API (the most robust method but not free and does not use models fine-tuned for chat).
  2. ChatGPTUnofficialProxyAPIopen in new window accesses ChatGPT's backend API through an unofficial proxy server, bypassing Cloudflare (uses the actual ChatGPT, lightweight, but depends on a third-party server, and has rate limitations).

Thanks to the original author Chanzhaoyu for his hard work

Building Steps

Step One: Install Docker and Docker-compose

  • Install Docker
# Update and install necessary software
 
 apt-get update && apt-get install -y wget nano
 
@@ -86,6 +86,6 @@
 tcp_nodelay on;
 keepalive_timeout 65;
 
ChatGPT
ChatGPT

Mission accomplished, Enjoy

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/ddns.html b/en/code/ddns.html index 7c05399e..601db2f0 100644 --- a/en/code/ddns.html +++ b/en/code/ddns.html @@ -30,12 +30,12 @@ } - + -
Skip to main content

Using DDNS to Achieve Remote Access to Devices on an Internal Network

Ven2s...About 3 minHome Network LayoutDDNSNetwork

Using DDNS and Port Forwarding to achieve remote access to devices on an internal network

Introduction

  • Recently, I got into an AI drawing software called stable-diffusion-webui. Due to its heavy reliance on GPU, I could only use my home computer for this purpose (which has a 6-year-old GTX 1060😥). However, as I work remotely, I decided to explore the realm of Dynamic Domain Name System (DDNS) to achieve remote control of my home computer and other network devices.

    Z
    D
    B

  • This tutorial (memo) serves two purposes: to showcase achievements and to provide guidance for others with similar needs. Many tutorials I found didn't explain DDNS clearly or how to use it.

  • DDNSopen in new window (Dynamic Domain Name System) is a service that maps the dynamic IPv4 address of a home network to a fixed domain name resolution service.

  • Cloudflareopen in new window is a globally renowned DNS service provider.

  • DDNS-GOopen in new window is an excellent DDNS resolution service tool. Many thanks to the author for solving my crucial problem.

  • Public IPopen in new window - I must say, the service level of the telecom company is impressive. They provided me with a public IP within half a day. Although there are many ways to bypass the public IP for accessing the internal network, through my testing, using more advanced methods like remote connection services and tunneling tools, the most straightforward method still offers the best cost-effectiveness and user experience.

    RDP
    You can see the latency here is very low

Getting Started

  • Before we begin, let me briefly explain my home network layout. There is a weak current box with a fiber optic modem in bridge mode, a main router responsible for dialing, a K2P router in the bedroom in AP mode, an old laptop acting as a secondary router (secondary route), which is installed with PVE, PVE uses openWRT, and a desktop computer. I forgot to draw it on visio.

    Network Layout
    Network Layout Diagram
  • Don't ask me why I don't use DHCP on openWRT. I tried many times but couldn't connect to the internet. It might be because the network port is bound to the MAC address. I don't know how to unbind it. So, I can only bind the MAC of my computer on the main router to connect to the internet. (Maybe it's not the reason; even binding the WAN port address on openWRT doesn't allow me to connect to the internet.) My home network environment is really too complicated😥

Let's Begin

  • Download DDNS-GOopen in new window to your local machine and unzip it. Then, use administrator privileges to navigate to the root directory.

Installation

.\ddns-go.exe -s install
+    
Skip to main content

Using DDNS to Achieve Remote Access to Devices on an Internal Network

Ven2s...About 3 minHome Network LayoutDDNSNetwork

Using DDNS and Port Forwarding to achieve remote access to devices on an internal network

Introduction

  • Recently, I got into an AI drawing software called stable-diffusion-webui. Due to its heavy reliance on GPU, I could only use my home computer for this purpose (which has a 6-year-old GTX 1060😥). However, as I work remotely, I decided to explore the realm of Dynamic Domain Name System (DDNS) to achieve remote control of my home computer and other network devices.

    Z
    D
    B

  • This tutorial (memo) serves two purposes: to showcase achievements and to provide guidance for others with similar needs. Many tutorials I found didn't explain DDNS clearly or how to use it.

  • DDNSopen in new window (Dynamic Domain Name System) is a service that maps the dynamic IPv4 address of a home network to a fixed domain name resolution service.

  • Cloudflareopen in new window is a globally renowned DNS service provider.

  • DDNS-GOopen in new window is an excellent DDNS resolution service tool. Many thanks to the author for solving my crucial problem.

  • Public IPopen in new window - I must say, the service level of the telecom company is impressive. They provided me with a public IP within half a day. Although there are many ways to bypass the public IP for accessing the internal network, through my testing, using more advanced methods like remote connection services and tunneling tools, the most straightforward method still offers the best cost-effectiveness and user experience.

    RDP
    You can see the latency here is very low

Getting Started

  • Before we begin, let me briefly explain my home network layout. There is a weak current box with a fiber optic modem in bridge mode, a main router responsible for dialing, a K2P router in the bedroom in AP mode, an old laptop acting as a secondary router (secondary route), which is installed with PVE, PVE uses openWRT, and a desktop computer. I forgot to draw it on visio.

    Network Layout
    Network Layout Diagram
  • Don't ask me why I don't use DHCP on openWRT. I tried many times but couldn't connect to the internet. It might be because the network port is bound to the MAC address. I don't know how to unbind it. So, I can only bind the MAC of my computer on the main router to connect to the internet. (Maybe it's not the reason; even binding the WAN port address on openWRT doesn't allow me to connect to the internet.) My home network environment is really too complicated😥

Let's Begin

  • Download DDNS-GOopen in new window to your local machine and unzip it. Then, use administrator privileges to navigate to the root directory.

Installation

.\ddns-go.exe -s install
 

Uninstall

.\ddns-go.exe -s uninstall
 
DDNS-GO
DDNS-GO
  • After installation, you can see the ddns-go service in the services, and set it to start automatically.

    DDNS-GO Service
    Enable DDNS-GO service
  • Open http://127.0.0.1:9876open in new window, you can see that ddns-go supports many dynamic resolution service providers as shown below.

    DDNS-GO Configuration 1
    DDNS-GO Page
  • Go to cloudflare and get the API token, which is the Token in the image below. Pay attention to selecting all regions for zone resources.

    Cloudflare Configuration 1
    Cloudflare Configuration 2

  • Return to DDNS-GO as shown in the image below. Configure it as shown below. If you have a public network, only select IPv4. If you don't have a public network, select IPv6 (I have both, so I selected both; you can do the same without any issues). Enter your domain name after the hostname. For information on how to obtain IPv6, I'll do a detailed tutorial next time. (I recommend a handy CF domestic APIopen in new window that can accurately obtain your local IP address, regardless of whether you use a scientific Internet access tool).

    DDNS-GO Configuration 2
    DDNS-GO Configuration 3
    DDNS-GO Configuration 4

  • After clicking saveOnce saved successfully, you will see the A record (IPv4 address) or AAAA record (IPv6 address) that you have resolved on Cloudflare in your domain's DNS service, and you can also see the successful resolution prompt in ddns-go.

  • At this point, you have finally successfully resolved your dynamic IP. Set up port forwarding services on the main router and secondary router, and you can access your home devices anytime, anywhere.

Take some time to record how to effectively forward ports to prevent me from forgetting again

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/github-actions-deploy.html b/en/code/github-actions-deploy.html index 7c39da76..018028a9 100644 --- a/en/code/github-actions-deploy.html +++ b/en/code/github-actions-deploy.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Automated Deployment of Frontend to Server using GitHub Actions

Ven2s...About 4 minlinuxServerFrontEnd

Automatically deploying the Front End to the server using GitHub Actions

Introduction to GitHub Actions and Principles

  • I've been using GitHub Actions for a while now, and the current blog is automatically deployed to GitHub hosting using GitHub Action Auto-deploy to a public repository. Today, I'll detail the steps to successfully deploy the frontend to the server and share some insights based on my understanding. I'll complete the writing when I have some free time (after work 😭).

  • GitHub Actions Official Documentationopen in new window: Automate, customize, and execute software development workflows in your GitHub repository. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and integrate actions into completely customized workflows.

  • The documentation reveals the powerful capabilities of GitHub Actions in code management, run deployment, test pushing, and more, eliminating a lot of repetitive work. Deploying the frontend directly to the server through an ssh client requires installing various dependencies, which significantly reduces server efficiency and is not easy to correct.

  • This tutorial is an extension of Deploying a Static Website with Nginx Proxy Manager, eliminating the need to install node environments and various dependencies, and directly deploying the frontend in GitHub Action. After making changes to the backend files locally, deploy the frontend to the server. It achieves a one-time setup effect.

GitHub Action Successful Screenshot
GitHub Action Success Interface
GitHub Action Success Interface
name: luvsia-hugo-blog-autodeploy # Workflow name, name it yourself
+    
Skip to main content

Automated Deployment of Frontend to Server using GitHub Actions

Ven2s...About 4 minlinuxServerFrontEnd

Automatically deploying the Front End to the server using GitHub Actions

Introduction to GitHub Actions and Principles

  • I've been using GitHub Actions for a while now, and the current blog is automatically deployed to GitHub hosting using GitHub Action Auto-deploy to a public repository. Today, I'll detail the steps to successfully deploy the frontend to the server and share some insights based on my understanding. I'll complete the writing when I have some free time (after work 😭).

  • GitHub Actions Official Documentationopen in new window: Automate, customize, and execute software development workflows in your GitHub repository. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and integrate actions into completely customized workflows.

  • The documentation reveals the powerful capabilities of GitHub Actions in code management, run deployment, test pushing, and more, eliminating a lot of repetitive work. Deploying the frontend directly to the server through an ssh client requires installing various dependencies, which significantly reduces server efficiency and is not easy to correct.

  • This tutorial is an extension of Deploying a Static Website with Nginx Proxy Manager, eliminating the need to install node environments and various dependencies, and directly deploying the frontend in GitHub Action. After making changes to the backend files locally, deploy the frontend to the server. It achieves a one-time setup effect.

GitHub Action Successful Screenshot
GitHub Action Success Interface
GitHub Action Success Interface
name: luvsia-hugo-blog-autodeploy # Workflow name, name it yourself
 
 on:
   push: # When the request is triggered
@@ -123,6 +123,6 @@
       # Target directory
           TARGET: "/data/docker_data/npm/data/sub.ven2s.cn/"
 

If you like, please share this page, if you have any questions, please leave a comment.

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/github-tools.html b/en/code/github-tools.html index eb96591f..36165356 100644 --- a/en/code/github-tools.html +++ b/en/code/github-tools.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Productivity Tools on GitHub

Ven2s...About 2 minWindowsTools

Productivity tools on GitHub

Technology is the Primary Productivity

  • In today's fast-paced world, technology has become the cornerstone for boosting productivity. It has transformed the way we work, communicate, and collaborate. Open-source software, with its transparency and collaborative nature, has been a driving force in this transformation. Platforms like GitHubopen in new window, hosting millions of open-source projects, have created a dynamic ecosystem where developers can share their ideas and collaborate on code development.

  • By harnessing open source and platforms like GitHubopen in new window, developers can work more efficiently, reduce development time, and build better software.

  • Everyone can freely provide valuable suggestions and opinions to the authors on issues, or submit BUGs to help authors improve their projects. It has also become a platform for beginners ("newbies") to seek advice from experts, significantly reducing the time cost of software development and addressing the dilemma of scarce internet tool resources.

  • In my eight years on GitHub, immersed in learning and using git, most of the time was spent diving deep or searching for essential resources. From initially not knowing where to start, to now being proficient in setting up basic local and server running environments, mastering git methods, and making use of projects from the experts. During this period, I have used countless projects and software from various platforms. Sometimes, I even stay up all night, pulling all-nighters, just to set up a simple environment. Perhaps this is the charm of code and the allure of open source.

  • Today, let's briefly document some of the exceptional productivity tools I have used, facilitating better work and study for everyone.

    1
    Time of entry

Enticing Chaos Gradually

xplorer

ToolWebsiteFunctionDownload
xploreropen in new windowEnhanced version of Windows File Explorer with aesthetic improvementsopen in new window
Demo
Demo
View More Screenshots

Demo
Demo
Demo
Demo
Demo
Demo

openai-translator

ToolWebsiteFunctionDownload
openai-translatoropen in new windowWord highlighting translation browser extension and cross-platform desktop app based on ChatGPT APIopen in new window
Demo
Demo
View More Screenshots

Demo
Demo

OcrHelper

ToolWebsiteFunctionDownload
OcrHelperopen in new windowDesktop image real-time text conversion toolopen in new window
View More Screenshots

Demo
Demo
Demo
Demo

Everything

ToolWebsiteFunctionDownload
Everythingopen in new windowQuickly locate files and folders based on nameopen in new window
EverythingToolbaropen in new windowIntegrated management tool for Windows taskbar based on Everythingopen in new window
Demo
EverythingToolbar
View More Screenshots
Demo
Everything

More...

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content

Productivity Tools on GitHub

Ven2s...About 2 minWindowsTools

Productivity tools on GitHub

Technology is the Primary Productivity

  • In today's fast-paced world, technology has become the cornerstone for boosting productivity. It has transformed the way we work, communicate, and collaborate. Open-source software, with its transparency and collaborative nature, has been a driving force in this transformation. Platforms like GitHubopen in new window, hosting millions of open-source projects, have created a dynamic ecosystem where developers can share their ideas and collaborate on code development.

  • By harnessing open source and platforms like GitHubopen in new window, developers can work more efficiently, reduce development time, and build better software.

  • Everyone can freely provide valuable suggestions and opinions to the authors on issues, or submit BUGs to help authors improve their projects. It has also become a platform for beginners ("newbies") to seek advice from experts, significantly reducing the time cost of software development and addressing the dilemma of scarce internet tool resources.

  • In my eight years on GitHub, immersed in learning and using git, most of the time was spent diving deep or searching for essential resources. From initially not knowing where to start, to now being proficient in setting up basic local and server running environments, mastering git methods, and making use of projects from the experts. During this period, I have used countless projects and software from various platforms. Sometimes, I even stay up all night, pulling all-nighters, just to set up a simple environment. Perhaps this is the charm of code and the allure of open source.

  • Today, let's briefly document some of the exceptional productivity tools I have used, facilitating better work and study for everyone.

    1
    Time of entry

Enticing Chaos Gradually

xplorer

ToolWebsiteFunctionDownload
xploreropen in new windowEnhanced version of Windows File Explorer with aesthetic improvementsopen in new window
Demo
Demo
View More Screenshots

Demo
Demo
Demo
Demo
Demo
Demo

openai-translator

ToolWebsiteFunctionDownload
openai-translatoropen in new windowWord highlighting translation browser extension and cross-platform desktop app based on ChatGPT APIopen in new window
Demo
Demo
View More Screenshots

Demo
Demo

OcrHelper

ToolWebsiteFunctionDownload
OcrHelperopen in new windowDesktop image real-time text conversion toolopen in new window
View More Screenshots

Demo
Demo
Demo
Demo

Everything

ToolWebsiteFunctionDownload
Everythingopen in new windowQuickly locate files and folders based on nameopen in new window
EverythingToolbaropen in new windowIntegrated management tool for Windows taskbar based on Everythingopen in new window
Demo
EverythingToolbar
View More Screenshots
Demo
Everything

More...

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/code/hackintosh.html b/en/code/hackintosh.html index 2fa092d5..b9706d3d 100644 --- a/en/code/hackintosh.html +++ b/en/code/hackintosh.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Hackintosh

Ven2s...About 3 minMacOSHackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

  • 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

  • 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

  • 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

  • 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

主机及配置

  • 在网上看了很多视频和教程,左挑右选,最终选择了惠普的 800-G4-DM 准系统主机,外加 I5 8500T 的8代 cpu。基本配置如下:
主机惠普 HP EliteDesk 800 G4 DM
主板惠普Q370
CPU酷睿 i5 8500T
显卡集成 Intel UHD Graphics 630
内存DDR4 2400MHz 三星16GB(2X8GB)
无线网卡博通 BCM94352Z 无线/蓝牙网卡
固态硬盘台电 256G SSD (加装2T SATA SSD)
OpenCore0.9.1
MacOSVentura 13.3.1 (22E261)

  • 完美主义的黑苹果完美度:
状态完美
CPU睿频Yes✔︎
VDA 解码器完全支持✔︎
IGPU硬件加速(QE/CI)Yes✔︎
Metal支持Yes✔︎
USB定制/完整识别Yes✔︎
网卡内建Yes✔︎
WIFI免驱Yes✔︎
蓝牙全功能YesHackintool无法识别,使用正常(又不是不能用.jpg)
AirDrop全功能No仅支持从iOS端投送到Mac
核显输出定制/全功能No截编时只完美一个“DP-HDMI”,其余两个输出口等有测试显示器再折腾
声音全功能Yes✔︎
序列号有效没有被用过的序列号Yes✔︎
iMessage全功能Yes✔︎解放手机 Get
随航功能Yes✔︎新功能真爽,iOS和 macOS无缝衔接
HiDPi开启No能开,显示器物理分辨率太低,再开启HiDPi的分辨率更低,就很难受(有了4K显示器再说吧)
睡眠开启Yes✔︎随睡随醒
  • 系统图鉴

View More Screenshots

1
1

1
图鉴
View More Screenshots

工具及配参

所需工具

名称用途下载
SSDTTime获取DSDT、SSDTDownloadopen in new window
ACPICA编译和反编译DSDTDownloadopen in new window
OpenCorePkgOpenCore引导加载程序Downloadopen in new window
ProperTree跨平台GUIPlist编辑器Downloadopen in new window
gibMacOSMacOS恢复镜像下载工具Downloadopen in new window
GenSMBIOS生成SMBIOSDownloadopen in new window

环境搭建

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content

Hackintosh

Ven2s...About 3 minMacOSHackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

  • 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

  • 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

  • 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

  • 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

主机及配置

  • 在网上看了很多视频和教程,左挑右选,最终选择了惠普的 800-G4-DM 准系统主机,外加 I5 8500T 的8代 cpu。基本配置如下:
主机惠普 HP EliteDesk 800 G4 DM
主板惠普Q370
CPU酷睿 i5 8500T
显卡集成 Intel UHD Graphics 630
内存DDR4 2400MHz 三星16GB(2X8GB)
无线网卡博通 BCM94352Z 无线/蓝牙网卡
固态硬盘台电 256G SSD (加装2T SATA SSD)
OpenCore0.9.1
MacOSVentura 13.3.1 (22E261)

  • 完美主义的黑苹果完美度:
状态完美
CPU睿频Yes✔︎
VDA 解码器完全支持✔︎
IGPU硬件加速(QE/CI)Yes✔︎
Metal支持Yes✔︎
USB定制/完整识别Yes✔︎
网卡内建Yes✔︎
WIFI免驱Yes✔︎
蓝牙全功能YesHackintool无法识别,使用正常(又不是不能用.jpg)
AirDrop全功能No仅支持从iOS端投送到Mac
核显输出定制/全功能No截编时只完美一个“DP-HDMI”,其余两个输出口等有测试显示器再折腾
声音全功能Yes✔︎
序列号有效没有被用过的序列号Yes✔︎
iMessage全功能Yes✔︎解放手机 Get
随航功能Yes✔︎新功能真爽,iOS和 macOS无缝衔接
HiDPi开启No能开,显示器物理分辨率太低,再开启HiDPi的分辨率更低,就很难受(有了4K显示器再说吧)
睡眠开启Yes✔︎随睡随醒
  • 系统图鉴

View More Screenshots

1
1

1
图鉴
View More Screenshots

工具及配参

所需工具

名称用途下载
SSDTTime获取DSDT、SSDTDownloadopen in new window
ACPICA编译和反编译DSDTDownloadopen in new window
OpenCorePkgOpenCore引导加载程序Downloadopen in new window
ProperTree跨平台GUIPlist编辑器Downloadopen in new window
gibMacOSMacOS恢复镜像下载工具Downloadopen in new window
GenSMBIOS生成SMBIOSDownloadopen in new window

环境搭建

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/code/hello-world.html b/en/code/hello-world.html index 084af699..1a047007 100644 --- a/en/code/hello-world.html +++ b/en/code/hello-world.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Hello World

Ven2s...About 15 minServerBlog

Build this site Hugo Blog 实战

+ 2022.02.11 add 侧边栏 鼠标指针 样式
+    
Skip to main content

Hello World

Ven2s...About 15 minServerBlog

Build this site Hugo Blog 实战

+ 2022.02.11 add 侧边栏 鼠标指针 样式
 
+ 2022.01.26 Update autodeploy.yml 实现 Hugo Blog 源码github  gitee  gitlab三端同步 (可以没有 | 就很帅)
 
+ 2022.01.26 Done 😎
 
+ 2022.01.26 <争取一口气把剩下的内容填完> 并没有 | Markdown的排版比码字更费事 💦
@@ -133,6 +133,6 @@
             ${{ secrets.GITLAB_KEY }}  # 新建的GILAB_KEY
 
  • Gitee
gitee
gitee
  • Gitlab
gitlab
gitlab
  1. 新增 小康博客open in new window 鼠标指针、侧边栏样式。
  • extended_head.html 中添加以下
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/static-butterfly/dist/css/index.min.css">
 

写在最后

本篇文章的部署流程对网上教程进行了整合,再加上自己的理解而成。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/index.html b/en/code/index.html index 011f211b..845b7f55 100644 --- a/en/code/index.html +++ b/en/code/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Code Notes

Ven2s...Less than 1 minute

Here is where Ven2s stores his notes.

Table of Contents

Useful Tutorials

Windows

Hackintosh

Home Network

Code Learning Websites

High-Quality Websites

Miscellaneous Websites

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content

Code Notes

Ven2s...Less than 1 minute

Here is where Ven2s stores his notes.

Table of Contents

Useful Tutorials

Windows

Hackintosh

Home Network

Code Learning Websites

High-Quality Websites

Miscellaneous Websites

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/code/kms.html b/en/code/kms.html index 54e3ef13..d55d4d69 100644 --- a/en/code/kms.html +++ b/en/code/kms.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

KMS 服務端安裝部署教程

Ven2s...About 5 minHome Network Layoutkmstools

KMS Server Installation and Deployment Tutorial

关于脚本

  • KMS 服务安装完成后会加入开机自启动。
  • 默认记录日志,其日志位于 /var/log/vlmcsd.log。

开始部署

  • 使用 root 用户登录,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
+    
Skip to main content

KMS 服務端安裝部署教程

Ven2s...About 5 minHome Network Layoutkmstools

KMS Server Installation and Deployment Tutorial

关于脚本

  • KMS 服务安装完成后会加入开机自启动。
  • 默认记录日志,其日志位于 /var/log/vlmcsd.log。

开始部署

  • 使用 root 用户登录,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 
  • 安装完成后,输入以下命令查看端口号 1688 的监听情况
netstat -nxtlp | grep 1688
 
  • 返回值类似于如下这样就表示 OK 了:
tcp    0    0 0.0.0.0:1688   0.0.0.0:*   LISTEN   3200/vlmcsd         
 tcp    0    0 :::1688        :::*        LISTEN   3200/vlmcsd 
@@ -50,6 +50,6 @@
 
  • 使用管理员权限运行 cmd 注册 KMS 服务器地址:
cscript ospp.vbs /sethst:Your IP or Domain
 
  • 使用管理员权限运行 cmd 手动激活 Office,命令如下:
cscript ospp.vbs /act
 

主要步骤

  1. 设置服务 slmgr -skms Your IP or Domain
  2. 安装密钥 slmgr -ipk 版本对应秘钥
  3. 激活系统 slmgr -ato

可用服务

  • Your IP or Domain 维护 CNAME 指向有效的服务
  • telnet Your IP or Domain 1688 测试服务是否可用
  • tcping Your IP or Domain 1688

密钥

https://learn.microsoft.com/zh-cn/windows-server/get-started/kms-client-activation-keysopen in new window

kms-client-activation-keys.mdopen in new window

Windows Server(LTSC 版本)

Windows Server 2022

操作系统版本KMS 客户端安装密钥
Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33
Windows Server 2022 Datacenter Azure EditionNTBV8-9K7Q8-V27C6-M2BTV-KHMXV
Windows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7H

Windows Server 2019

操作系统版本KMS 客户端安装密钥
Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG
Windows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464C
Windows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726

Windows Server 2016

操作系统版本KMS 客户端安装密钥
Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG
Windows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Windows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63B

Windows Server (半年频道版本)

Windows Server 版本 20H2、2004、1909、1903 和 1809

操作系统版本KMS 客户端安装密钥
Windows Server Datacenter6NMRW-2C8FM-D24W7-TQWMY-CWH2D
Windows Server StandardN2KJX-J94YW-TQVFB-DG9YT-724CC

Windows 11 和 Windows 10 (半年频道版本)

操作系统版本KMS 客户端安装密钥
Windows 10/11 专业版W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows 10/11 专业版 NMH37W-N47XK-V7XM9-C7227-GCQG9
Windows 10/11 专业工作站NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
Windows 10/11 专业工作站 N9FNHH-K3HBT-3W4TD-6383H-6XYWF
Windows 10/11 专业教育版6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
Windows 10/11 专业教育版 NYVWGF-BXNMC-HTQYQ-CPQ99-66QFC
Windows 10/11 教育版NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows 10/11 教育版 N2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows 10/11 企业版NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows 10/11 企业版 NDPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows 10/11 企业版 GYYVX9-NTFWV-6MDM3-9PT4T-4M68B
Windows 10/11 企业版 G N44RPN-FTY23-9VTTB-MP9BX-T84FV

Windows 10 (LTSC/LTSB 版本)

Windows 10 LTSC 2019

操作系统版本KMS 客户端安装密钥
Windows 10 企业版 LTSC 2019M7XTQ-FN8P6-TTKYV-9D4CC-J462D
Windows 10 企业版 N LTSC 201992NFX-8DJQP-P6BBQ-THF9C-7CG2H

Windows 10 LTSB 2016

操作系统版本KMS 客户端安装密钥
Windows 10 企业版 LTSB 2016DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
Windows 10 企业版 N LTSB 2016QFFDN-GRT3P-VKWWX-X7T3R-8B639

Windows 10 LTSB 2015

操作系统版本KMS 客户端安装密钥
Windows 10 企业版 2015 LTSBWNMTR-4C88C-JK8YV-HQ7T2-76DF9
Windows 10 企业版 2015 LTSB N2F77B-TNFGY-69QQF-B8YKP-D69TJ

早期版本的 Windows Server

Windows Server 版本 1803

操作系统版本KMS 客户端安装密钥
Windows Server Datacenter2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG
Windows Server StandardPTXN8-JFHJM-4WC78-MPCBR-9W4KR

Windows Server 版本 1709

操作系统版本KMS 客户端安装密钥
Windows Server Datacenter6Y6KB-N82V8-D8CQV-23MJW-BWTG6
Windows Server StandardDPCNP-XQFKJ-BJF7R-FRC8D-GF6G4

Windows Server 2012 R2

操作系统版本KMS 客户端安装密钥
Windows Server 2012 R2 Server StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJX
WindowsServer 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
WindowsServer 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWM

Windows Server 2012

操作系统版本KMS 客户端安装密钥
Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4
Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
Windows Server 2012 单语言版2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
Windows Server 2012 特定国家/地区版4K36P-JN4VD-GDC6V-KDT89-DYFKP
Windows Server 2012 Server StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4
Windows Server 2012 MultiPoint StandardHM7DN-YVMH3-46JC3-XYTG7-CYQJJ
Windows Server 2012 MultiPoint PremiumXNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
Windows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83P

Windows Server 2008 R2

操作系统版本KMS 客户端安装密钥
Windows Server 2008 R2 Web 版6TPJF-RBVHG-WBW2R-86QPH-6RTM4
Windows Server 2008 R2 HPC 版TT8MH-CG224-D3D7Q-498W2-9QCTX
WindowsServer 2008 R2 StandardYC6KT-GKW9T-YTKYR-T4X34-R7VHC
WindowsServer 2008 R2 企业版489J6-VHDMP-X63PK-3K798-CPX3Y
WindowsServer 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648
面向基于 Itanium 系统的 Windows Server 2008 R2GT63C-RJFQ3-4GMB6-BRFB9-CB83V

Windows Server 2008

操作系统版本KMS 客户端安装密钥
Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249D
Windows Server 2008 StandardTM24T-X9RMF-VWXK6-X8JC9-BFGM2
不带 Hyper-V 的 Windows Server 2008 StandardW7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
Windows Server 2008 企业版YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
不带 Hyper-V 的 Windows Server 2008 企业版39BXF-X8Q23-P2WWT-38T2F-G3FPG
Windows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HP
Windows Server 2008 Datacenter7M67G-PC374-GR742-YH8V4-TCBY3
不带 Hyper-V 的 Windows Server 2008 Datacenter22XQ2-VRXRG-P8D42-K34TD-G3QQC
面向基于 Itanium 系统的 Windows Server 20084DWFP-JF3DJ-B7DTH-78FJB-PDRHK
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/nginx-proxy-manager.html b/en/code/nginx-proxy-manager.html index 1bbdb865..0bf28449 100644 --- a/en/code/nginx-proxy-manager.html +++ b/en/code/nginx-proxy-manager.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

用Nginx Proxy Manager部署靜態網頁

Ven2s...About 2 minlinuxServerBlog

Deploying Static Web Pages with Nginx Proxy Manager

  • 搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

  • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
+    
Skip to main content

用Nginx Proxy Manager部署靜態網頁

Ven2s...About 2 minlinuxServerBlog

Deploying Static Web Pages with Nginx Proxy Manager

  • 搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

  • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
 
 apt-get update && apt-get install -y wget nano
 
@@ -76,6 +76,6 @@
     error_page 404 /index.html;
 }
 

大功告成

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/code/port-forwarding.html b/en/code/port-forwarding.html index 9b2b7dfb..1504861c 100644 --- a/en/code/port-forwarding.html +++ b/en/code/port-forwarding.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

記錄“複雜”的家庭內網端口轉發

Ven2s...About 3 minHome Network Layoutport forwardnetwork

Internal network port forwarding

前言

  • 在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 pingopen in new window 了下端口,果然,状态显示是关闭了的。

    1
    😏
  • 来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

  • 其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

  • 综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

    2
    😏
    2
    😏

端口映射

服务名称设备IP外部端口(主机)内部端口(主路由)外部端口(主路由)
内部端口(主机)内部端口(openWRT)外部端口(openWRT)
RDP192.168.123.1103389338933893389
Alist192.168.123.1105244524452445244
SSH192.168.123.11022212121212121
openWRT192.168.123.380225132251322513
  • 可以看到,由于我家里的网络布局,对端口进行了两次映射,先把最外面的主路由端口映射到 openWRT 上,再把第二层设备 openWRT 端口映射到主机上,如此就形成了完整的端口映射方案,这下再避开一些电信封禁的端口,是可以完美访问内网设备的。

域名访问

  • 按理说,我在上篇文章的 ddns-go 中添加了域名, web 服务是可以直接通过域名+端口的形式访问的,但是此时会跳转错误。通过分析,其实也不难得出答案,访问 web 服务时,因为域名要占用80端口,但是80端口又是被封禁了,所以是无法用此方法的。

  • 来到宝塔面板,添加站点,输入域名+已经映射完成的端口号,访问成功

    4
    5

  • 访问网页时,即使加上了 SSL 也是显示的“不安全”,从研究服务器这么久可以知道,访问内网实际上是一样的,加上 SSL 是可以成功的。这里一直没有搞懂原因,还是闲下来再测试和折腾吧。。。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content

記錄“複雜”的家庭內網端口轉發

Ven2s...About 3 minHome Network Layoutport forwardnetwork

Internal network port forwarding

前言

  • 在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 pingopen in new window 了下端口,果然,状态显示是关闭了的。

    1
    😏
  • 来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

  • 其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

  • 综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

    2
    😏
    2
    😏

端口映射

服务名称设备IP外部端口(主机)内部端口(主路由)外部端口(主路由)
内部端口(主机)内部端口(openWRT)外部端口(openWRT)
RDP192.168.123.1103389338933893389
Alist192.168.123.1105244524452445244
SSH192.168.123.11022212121212121
openWRT192.168.123.380225132251322513
  • 可以看到,由于我家里的网络布局,对端口进行了两次映射,先把最外面的主路由端口映射到 openWRT 上,再把第二层设备 openWRT 端口映射到主机上,如此就形成了完整的端口映射方案,这下再避开一些电信封禁的端口,是可以完美访问内网设备的。

域名访问

  • 按理说,我在上篇文章的 ddns-go 中添加了域名, web 服务是可以直接通过域名+端口的形式访问的,但是此时会跳转错误。通过分析,其实也不难得出答案,访问 web 服务时,因为域名要占用80端口,但是80端口又是被封禁了,所以是无法用此方法的。

  • 来到宝塔面板,添加站点,输入域名+已经映射完成的端口号,访问成功

    4
    5

  • 访问网页时,即使加上了 SSL 也是显示的“不安全”,从研究服务器这么久可以知道,访问内网实际上是一样的,加上 SSL 是可以成功的。这里一直没有搞懂原因,还是闲下来再测试和折腾吧。。。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/code/server-building.html b/en/code/server-building.html index ef6b3c2f..16ca98f6 100644 --- a/en/code/server-building.html +++ b/en/code/server-building.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

从零开始的服务器搭建纪实

Ven2s...About 6 minlinuxServer

Hello World

LuvSia

Server Building

准备工作

VPSDomain
dmitopen in new windowexample.comopen in new windownginxopen in new windowmysqlopen in new windowphpopen in new windowphpmyadminopen in new windowcloudflareopen in new window

更新软件源

apt update
+    
Skip to main content

从零开始的服务器搭建纪实

Ven2s...About 6 minlinuxServer

Hello World

LuvSia

Server Building

准备工作

VPSDomain
dmitopen in new windowexample.comopen in new windownginxopen in new windowmysqlopen in new windowphpopen in new windowphpmyadminopen in new windowcloudflareopen in new window

更新软件源

apt update
 

搭建思路

预留一级域名搭建网站给各个应用添加前端网页根路径。

后因部分应用无法添加二级目录(网页根路径),所以这里只能使用添加二级域名的思路,区别各个应用。

再通过添加反向代理,实现分域名访问不同前端应用。

开始搭建

宝塔面板

WorkWeb
宝塔面板btopen in new window

1.使用一键配置工具。
一键脚本集成工具

wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
 

wget -O install.sh http://io.bt.sy/install/install-ubuntu_6.0.sh && bash install.sh
 

2.安装nginx-1.21mysql-5.5php-7.4phpmyadmin-5.0四件套

3.添加站点。

WorkDomain
alista.example.comopen in new window正常
宝塔面板b.example.comopen in new window正常
Transmissiont.example.comopen in new window正常
X-UIx.example.comopen in new window正常

4.设置,添加SSL,强制开启https

记录证书路径,证书可以直接在宝塔面板进行更新,或是设置定时任务自动更新;

宝塔面板申请的证书在如下目录:/www/server/panel/vhost/cert/你的域名/ 目录之下。

强制开启https

5.关闭面板安全入户,即删除二级目录

rm -f /www/server/panel/data/admin_path.pl
@@ -158,6 +158,6 @@
 

IPv6 网络

bash <(curl -fsSL git.io/warp.sh) 6
 

WARP 官方客户端 SOCKS5 代理

bash <(curl -fsSL git.io/warp.sh) s5
 

后记

感谢

@guodongxiarenopen in new window
@HostCLiopen in new window
@jinwypopen in new window
@Xhofeopen in new window
@vaxiluopen in new window
@enwaiaxopen in new window
@XIU2open in new window
@helloxzopen in new window
@moeratsopen in new window
@P3TERXopen in new window


Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- + diff --git a/en/demo/disable.html b/en/demo/disable.html index e9ecb113..454b4b65 100644 --- a/en/demo/disable.html +++ b/en/demo/disable.html @@ -30,10 +30,10 @@ } - +
Skip to main content

Disabling layout and features


You can disable some function and layout on the page by setting the Frontmatter of the page.

This page is an demo that disables the following features:

  • Navbar
  • Sidebar
  • Breadcrumb
  • Page information
  • Contributors
  • Edit link
  • Update time
  • Prev/Next link
  • Comment
  • Footer
  • Back to top button
- + diff --git a/en/demo/encrypt.html b/en/demo/encrypt.html index b59e77a3..fbfba79f 100644 --- a/en/demo/encrypt.html +++ b/en/demo/encrypt.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/en/demo/index.html b/en/demo/index.html index 5308a65f..ed88e4a0 100644 --- a/en/demo/index.html +++ b/en/demo/index.html @@ -30,10 +30,10 @@ } - + - - +
Skip to main content

Features demo

Ven2s...Less than 1 minuteGuide

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/demo/markdown.html b/en/demo/markdown.html index 2d4bb2c1..f65881c0 100644 --- a/en/demo/markdown.html +++ b/en/demo/markdown.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

Markdown Enhance

Ven2s...About 3 minGuideMarkdown

VuePress basically generate pages from Markdown files. So you can use it to generate documentation or blog sites easily.

You should create and write Markdown files, so that VuePress can convert them to different pages according to file structure.

Markdown Introduction

If you are a new learner and don't know how to write Markdown, please read Markdown Introopen in new window and Markdown Demoopen in new window.

Markdown Config

VuePress introduce configuration for each markdown page using Frontmatter.

Info

Frontmatter is a important concept in VuePress. If you don't know it, you need to read Frontmatter Introductionopen in new window.

Markdown Extension

The Markdown content in VuePress will be parsed by markdown-itopen in new window, which supports syntax extensionsopen in new window via markdown-it plugins.

VuePress Enhancement

To enrich document writing, VuePress has extended Markdown syntax.

For these extensions, please read Markdown extensions in VuePressopen in new window.

Theme Enhancement

By using vuepress-plugin-md-enhanceopen in new window, the theme extends more Markdown syntax and provides richer writing functions.

Custom Container

Safely use {{ variable }} in Markdown.

Custom Title

A custom information container with code, link.

const a = 1;
+    
Skip to main content

Markdown Enhance

Ven2s...About 3 minGuideMarkdown

VuePress basically generate pages from Markdown files. So you can use it to generate documentation or blog sites easily.

You should create and write Markdown files, so that VuePress can convert them to different pages according to file structure.

Markdown Introduction

If you are a new learner and don't know how to write Markdown, please read Markdown Introopen in new window and Markdown Demoopen in new window.

Markdown Config

VuePress introduce configuration for each markdown page using Frontmatter.

Info

Frontmatter is a important concept in VuePress. If you don't know it, you need to read Frontmatter Introductionopen in new window.

Markdown Extension

The Markdown content in VuePress will be parsed by markdown-itopen in new window, which supports syntax extensionsopen in new window via markdown-it plugins.

VuePress Enhancement

To enrich document writing, VuePress has extended Markdown syntax.

For these extensions, please read Markdown extensions in VuePressopen in new window.

Theme Enhancement

By using vuepress-plugin-md-enhanceopen in new window, the theme extends more Markdown syntax and provides richer writing functions.

Custom Container

Safely use {{ variable }} in Markdown.

Custom Title

A custom information container with code, link.

const a = 1;
 

Custom Title

A custom tip container

Custom Title

A custom warning container

Custom Title

A custom danger container

Custom Title

A custom details container

Tabs

apple

Apple

Code Tabs

npm
npm i -D vuepress-theme-hope
@@ -124,7 +124,7 @@
   <input v-model="msg" />
 </template>
 

:::

Presentation

@slidestart

Slide 1

A paragraph with some text and a linkopen in new window


Slide 2

  • Item 1
  • Item 2

Slide 3.1

const a = 1;
-

--

Slide 3.2

J(θ0,θ1)=i=0

@slideend


  1. This is footnote content ↩︎

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +

--

Slide 3.2

J(θ0,θ1)=i=0

@slideend


  1. This is footnote content ↩︎

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/demo/page.html b/en/demo/page.html index cb9bc575..f36cfe3b 100644 --- a/en/demo/page.html +++ b/en/demo/page.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Page Config

Page Config

Ms.Hope...Less than 1 minuteGuidePage configGuide

Content before more comment is regarded as page excerpt.

Page Information

You can set page information in Markdown's Frontmatter.

  • The author is Ms.Hope.
  • The writing date is January 1, 2020
  • Category is "Guide"
  • Tags are "Page Config" and "Guide"

Page Content

You are free to write your Markdown here.

Assets

  • You can place images besides your Markdown files, but you should use relative links (i.e.: starting with ./) for them.

  • For images in .vuepress/public directory, please use absolute links (i.e.: starting with /) for them.

The theme contains a custom badge:

A dark blue badge text badge at the end of line. Badge text

Page Structure

This page should contain:

You can customize them in theme options and page frontmatter.

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content
Page Config

Page Config

Ms.Hope...Less than 1 minuteGuidePage configGuide

Content before more comment is regarded as page excerpt.

Page Information

You can set page information in Markdown's Frontmatter.

  • The author is Ms.Hope.
  • The writing date is January 1, 2020
  • Category is "Guide"
  • Tags are "Page Config" and "Guide"

Page Content

You are free to write your Markdown here.

Assets

  • You can place images besides your Markdown files, but you should use relative links (i.e.: starting with ./) for them.

  • For images in .vuepress/public directory, please use absolute links (i.e.: starting with /) for them.

The theme contains a custom badge:

A dark blue badge text badge at the end of line. Badge text

Page Structure

This page should contain:

You can customize them in theme options and page frontmatter.

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/index.html b/en/index.html index 935aafed..45e7e886 100644 --- a/en/index.html +++ b/en/index.html @@ -30,7 +30,7 @@ } - +
Skip to main content
SpringVen2s

SpringVen2s

One thing truely Everthing done

Chat to AI
Advanced ChatGPT API of language model bot
Subscription Conversion
Secure and Confidential Sub-Conversion Service
Hackintosh
Unfinished Hackintosh installation tutorial
Hello World
A journey of a thousand miles begins with a single step
Sia
Fever Lover
Code Notes

Here is where Ven2s stores his notes.

@@ -94,6 +94,6 @@

开始部署

wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 

Ven2s...About 5 minHome Network Layoutkmstools
2
3
- + diff --git a/en/intro.html b/en/intro.html index d4c90e6b..e1584127 100644 --- a/en/intro.html +++ b/en/intro.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Intro Page

Intro Page

Ven2s...Less than 1 minute

Intro Page

Place your introduction and profile here.

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content
Intro Page

Intro Page

Ven2s...Less than 1 minute

Intro Page

Place your introduction and profile here.

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/note/1.html b/en/note/1.html index e644c6ef..2a980e4e 100644 --- a/en/note/1.html +++ b/en/note/1.html @@ -30,10 +30,10 @@ } - + -
Skip to main content

苹果 1

Ven2s...Less than 1 minute苹果

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
Skip to main content

苹果 1

Ven2s...Less than 1 minute苹果

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/note/1993.html b/en/note/1993.html index ef928890..d82b5a36 100644 --- a/en/note/1993.html +++ b/en/note/1993.html @@ -30,10 +30,10 @@ } - + - - +
Skip to main content

一九九三

Ven2s...Less than 1 minuteMy Birthday

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/en/note/index.html b/en/note/index.html index cdb5f2b3..401aaa8c 100644 --- a/en/note/index.html +++ b/en/note/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/en/slides.html b/en/slides.html index 8084cd0e..d1b6f5b9 100644 --- a/en/slides.html +++ b/en/slides.html @@ -30,10 +30,10 @@ } - +
- + diff --git a/en/star/index.html b/en/star/index.html index c3f394d8..49de2e99 100644 --- a/en/star/index.html +++ b/en/star/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Code Notes

Here is where Ven2s stores his notes.

+
Skip to main content
Building Your Own Subscription Conversion Link

Front-end Construction of Sub-Web-Modify

This project is based on CareyWang/sub-web, with remade CSS styles, solving most layout details, adding "Dark Mode" with automatic switch between light/dark modes (manually switchable by clicking the "sun/moon" icon), adding "Advanced Functions" toggle, adding short link selection/customization functionality, incorporating nearly a hundred remote configurations, introducing sub-web aggregate API, and adding features like uploading custom remote configurations/JS advanced sorting nodes/JS advanced filtering nodes!


Ven2s...About 4 minlinuxServer
Page Config

Content before more comment is regarded as page excerpt.


Ms.Hope...Less than 1 minuteGuidePage configGuide
- + diff --git a/en/tag/blog/index.html b/en/tag/blog/index.html index 0934d35a..4281d853 100644 --- a/en/tag/blog/index.html +++ b/en/tag/blog/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
用Nginx Proxy Manager部署靜態網頁
+ - + diff --git a/en/tag/chatgpt/index.html b/en/tag/chatgpt/index.html index 63f2c651..04bcfe1e 100644 --- a/en/tag/chatgpt/index.html +++ b/en/tag/chatgpt/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
ChatGPT-Proxy
+
Skip to main content
ChatGPT-Proxy

Build ChatGPT Reverse Proxy

    @@ -49,6 +49,6 @@

    ChatGPT is an AI-powered natural language processing tool. It engages in conversations by understanding and learning human language. It can interact based on the context of the conversation, simulating human-like chat interactions. It can even complete tasks such as writing emails, video scripts, copywriting, translation, coding, paper writing, and more.


Ven2s...About 2 minlinuxChatGPT
- + diff --git a/en/tag/ddns/index.html b/en/tag/ddns/index.html index d7425567..351366e8 100644 --- a/en/tag/ddns/index.html +++ b/en/tag/ddns/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Using DDNS to Achieve Remote Access to Devices on an Internal Network
+ - + diff --git a/en/tag/disable/index.html b/en/tag/disable/index.html index b137ea09..ac480287 100644 --- a/en/tag/disable/index.html +++ b/en/tag/disable/index.html @@ -30,11 +30,11 @@ } - + -
Skip to main content
Disabling layout and features

You can disable some function and layout on the page by setting the Frontmatter of the page.

+ - + diff --git a/en/tag/encryption/index.html b/en/tag/encryption/index.html index b284c5bb..1e22c92e 100644 --- a/en/tag/encryption/index.html +++ b/en/tag/encryption/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/en/tag/frontend/index.html b/en/tag/frontend/index.html index b83c96e4..454f3f13 100644 --- a/en/tag/frontend/index.html +++ b/en/tag/frontend/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Automated Deployment of Frontend to Server using GitHub Actions
+
Skip to main content
Automated Deployment of Frontend to Server using GitHub Actions

Automatically deploying the Front End to the server using GitHub Actions

Introduction to GitHub Actions and Principles

@@ -51,6 +51,6 @@

Introduction to GitHub Actions and Principles

This tutorial is an extension of Deploying a Static Website with Nginx Proxy Manager, eliminating the need to install node environments and various dependencies, and directly deploying the frontend in GitHub Action. After making changes to the backend files locally, deploy the frontend to the server. It achieves a one-time setup effect.


Ven2s...About 4 minlinuxServerFrontEnd
- + diff --git a/en/tag/guide/index.html b/en/tag/guide/index.html index 0ddb50b6..c8f1597d 100644 --- a/en/tag/guide/index.html +++ b/en/tag/guide/index.html @@ -30,11 +30,11 @@ } - + -
Skip to main content
Page Config

Content before more comment is regarded as page excerpt.

+ - + diff --git a/en/tag/hackintosh/index.html b/en/tag/hackintosh/index.html index a91eb2db..4ccd2bcb 100644 --- a/en/tag/hackintosh/index.html +++ b/en/tag/hackintosh/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Hackintosh
+
Skip to main content
Hackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

@@ -51,6 +51,6 @@

闲话 回忆与现在

刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。


Ven2s...About 3 minMacOSHackintosh
- + diff --git a/en/tag/index.html b/en/tag/index.html index f7d845c6..acc36424 100644 --- a/en/tag/index.html +++ b/en/tag/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/en/tag/kms/index.html b/en/tag/kms/index.html index 939fc828..29251836 100644 --- a/en/tag/kms/index.html +++ b/en/tag/kms/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
KMS 服務端安裝部署教程
+ - + diff --git a/en/tag/markdown/index.html b/en/tag/markdown/index.html index a48f884f..8a953753 100644 --- a/en/tag/markdown/index.html +++ b/en/tag/markdown/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Markdown Enhance

VuePress basically generate pages from Markdown files. So you can use it to generate documentation or blog sites easily.

+
Skip to main content
Markdown Enhance

VuePress basically generate pages from Markdown files. So you can use it to generate documentation or blog sites easily.

You should create and write Markdown files, so that VuePress can convert them to different pages according to file structure.


Ven2s...About 3 minGuideMarkdown
超酷的Emoji表情!

Best Markdown Emoji !

@@ -43,6 +43,6 @@

原文

将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
如"😊",显示为😊


Ven2s...About 6 minMarkdownBlog
- + diff --git a/en/tag/my-birthday/index.html b/en/tag/my-birthday/index.html index c101aceb..fefbabce 100644 --- a/en/tag/my-birthday/index.html +++ b/en/tag/my-birthday/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/en/tag/network/index.html b/en/tag/network/index.html index cc560538..1eee6e9a 100644 --- a/en/tag/network/index.html +++ b/en/tag/network/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Using DDNS to Achieve Remote Access to Devices on an Internal Network
+ - + diff --git a/en/tag/page-config/index.html b/en/tag/page-config/index.html index c11f48c2..f8b1bc70 100644 --- a/en/tag/page-config/index.html +++ b/en/tag/page-config/index.html @@ -30,11 +30,11 @@ } - + -
Skip to main content
Page Config

Content before more comment is regarded as page excerpt.

+ - + diff --git a/en/tag/port-forward/index.html b/en/tag/port-forward/index.html index 83190a40..594191a8 100644 --- a/en/tag/port-forward/index.html +++ b/en/tag/port-forward/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
記錄“複雜”的家庭內網端口轉發
+ - + diff --git a/en/tag/server/index.html b/en/tag/server/index.html index afd4178f..797daec9 100644 --- a/en/tag/server/index.html +++ b/en/tag/server/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Automated Deployment of Frontend to Server using GitHub Actions
+ - + diff --git a/en/tag/tools/index.html b/en/tag/tools/index.html index 98208e96..7f0b55fd 100644 --- a/en/tag/tools/index.html +++ b/en/tag/tools/index.html @@ -30,10 +30,10 @@ } - + -
Skip to main content
Productivity Tools on GitHub
+ - + diff --git "a/en/tag/\345\234\206/index.html" "b/en/tag/\345\234\206/index.html" index 46385e19..cdf414ee 100644 --- "a/en/tag/\345\234\206/index.html" +++ "b/en/tag/\345\234\206/index.html" @@ -30,15 +30,15 @@ } - + -
Skip to main content
苹果 1

苹果 1

+ - + diff --git "a/en/tag/\345\244\247/index.html" "b/en/tag/\345\244\247/index.html" index 9eca3d05..da8e3b5f 100644 --- "a/en/tag/\345\244\247/index.html" +++ "b/en/tag/\345\244\247/index.html" @@ -30,15 +30,15 @@ } - + -
Skip to main content
苹果 1

苹果 1

+ - + diff --git "a/en/tag/\346\230\223/index.html" "b/en/tag/\346\230\223/index.html" index 701de4de..3bb4c914 100644 --- "a/en/tag/\346\230\223/index.html" +++ "b/en/tag/\346\230\223/index.html" @@ -30,10 +30,10 @@ } - + - - + + diff --git "a/en/tag/\347\272\242/index.html" "b/en/tag/\347\272\242/index.html" index cd37ccb2..9104cb8b 100644 --- "a/en/tag/\347\272\242/index.html" +++ "b/en/tag/\347\272\242/index.html" @@ -30,15 +30,15 @@ } - + -
Skip to main content
苹果 1

苹果 1

+ - + diff --git a/en/timeline/index.html b/en/timeline/index.html index e1f26a49..71ff0c30 100644 --- a/en/timeline/index.html +++ b/en/timeline/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/index.html b/index.html index db41358e..f7e2d6a2 100644 --- a/index.html +++ b/index.html @@ -30,7 +30,7 @@ } - +
跳至主要內容
風至萬始蘇

風至萬始蘇

思得一隅天下濟 道慰平生萬事謀

對話AI
先進的ChatGPT語言模型機器人
訂閱轉換
安全隱密的訂閱轉換服務
Hackintosh
未完工的黑蘋果安裝教程
Hello World
千里之行始於足下
Sia
愛人
代碼筆記

此處是 Ven2s 存放的筆記。

@@ -96,6 +96,6 @@

开始部署

wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 

Ven2s...大约 5 分鐘Home Network Layoutkmstools
2
3
- + diff --git a/intro.html b/intro.html index e0b100bb..37b2c895 100644 --- a/intro.html +++ b/intro.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
介绍页

介绍页

Ven2s...小於 1 分鐘

介绍页

将你的个人介绍和档案放置在此处。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
跳至主要內容
介绍页

介绍页

Ven2s...小於 1 分鐘

介绍页

将你的个人介绍和档案放置在此处。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/note/1.html b/note/1.html index c65aaa88..8840bf24 100644 --- a/note/1.html +++ b/note/1.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

苹果 1

Ven2s...小於 1 分鐘苹果

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
- +
跳至主要內容

苹果 1

Ven2s...小於 1 分鐘苹果

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/note/1993.html b/note/1993.html index ad205fe2..c2e85af8 100644 --- a/note/1993.html +++ b/note/1993.html @@ -30,10 +30,10 @@ } - + - - +
跳至主要內容

一九九三

Ven2s...小於 1 分鐘My Birthday

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8
+ diff --git a/note/index.html b/note/index.html index b617d0a4..f898c530 100644 --- a/note/index.html +++ b/note/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/slides.html b/slides.html index f06411c6..af4caaf1 100644 --- a/slides.html +++ b/slides.html @@ -30,10 +30,10 @@ } - +
- + diff --git a/star/index.html b/star/index.html index 1fbe5234..c3650728 100644 --- a/star/index.html +++ b/star/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
代碼筆記

此處是 Ven2s 存放的筆記。

+
跳至主要內容
搭建屬於自己的訂閱轉換鏈接

Sub-Web-Modify前端搭建

本項目基於CareyWang/sub-web,重製CSS樣式,解決大部分布局細節問題,增加“暗黑模式”,默認自動切換亮/暗模式(點擊“太陽/月亮”圖標可手動切換),增加“高級功能”點擊顯示/隱藏,添加短鏈接選擇/自定義功能,增加近百條遠程配置,新增sub-web聚合API,增加上傳自定義遠程配置/JS進階排序節點/JS進階篩選節點等功能!


Ven2s...大约 5 分鐘Linux伺服器
页面配置

more 注释之前的内容被视为文章摘要。


Ms.Hope...大约 1 分鐘使用指南页面配置使用指南
- + diff --git a/tag/blog/index.html b/tag/blog/index.html index ba48ae0a..3683389a 100644 --- a/tag/blog/index.html +++ b/tag/blog/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
用Nginx Proxy Manager部署靜態網頁
+ - + diff --git a/tag/chatgpt/index.html b/tag/chatgpt/index.html index a884dc9a..542555f5 100644 --- a/tag/chatgpt/index.html +++ b/tag/chatgpt/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
ChatGPT-Proxy
+
跳至主要內容
ChatGPT-Proxy

構建ChatGPT反向代理

    @@ -49,6 +49,6 @@

    ChatGPT是由人工智能技术驱动的自然语言处理工具,能够通过理解和学习人类语言进行对话。它还可以根据聊天上下文进行互动,真正像人类一样聊天交流,甚至能够完成撰写邮件、视频脚本、文案、翻译、代码编写、写论文等任务。


Ven2s...大约 2 分鐘linuxChatGPT
- + diff --git a/tag/ddns/index.html b/tag/ddns/index.html index db3425fb..ac9c3637 100644 --- a/tag/ddns/index.html +++ b/tag/ddns/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
記錄使用ddns實現內網穿透遠程訪問內網設備
+ - + diff --git a/tag/hackintosh/index.html b/tag/hackintosh/index.html index 235100cf..eb9d2386 100644 --- a/tag/hackintosh/index.html +++ b/tag/hackintosh/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Hackintosh
+
跳至主要內容
Hackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

@@ -51,6 +51,6 @@

闲话 回忆与现在

刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。


Ven2s...大约 3 分鐘MacOSHackintosh
- + diff --git a/tag/index.html b/tag/index.html index 66007190..675c4350 100644 --- a/tag/index.html +++ b/tag/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/tag/kms/index.html b/tag/kms/index.html index fbadc30b..5aae40b2 100644 --- a/tag/kms/index.html +++ b/tag/kms/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
KMS 服務端安裝部署教程
+ - + diff --git a/tag/markdown/index.html b/tag/markdown/index.html index 83409270..9696b10b 100644 --- a/tag/markdown/index.html +++ b/tag/markdown/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Markdown 展示

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

+
跳至主要內容
Markdown 展示

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。


Ven2s...大约 3 分鐘使用指南Markdown
超酷的Emoji表情!

Best Markdown Emoji !

@@ -43,6 +43,6 @@

原文

將對應的emoji表情的符號碼複製後輸入你的markdown文本即可顯示emoji表情。
如"😊",顯示為😊


Ven2s...大约 6 分鐘MarkdownBlog
- + diff --git a/tag/my-birthday/index.html b/tag/my-birthday/index.html index 6161c879..1184cd52 100644 --- a/tag/my-birthday/index.html +++ b/tag/my-birthday/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/tag/network/index.html b/tag/network/index.html index c89a370a..ce8c2502 100644 --- a/tag/network/index.html +++ b/tag/network/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
記錄使用ddns實現內網穿透遠程訪問內網設備
+ - + diff --git a/tag/port-forward/index.html b/tag/port-forward/index.html index 048fc65a..80658b89 100644 --- a/tag/port-forward/index.html +++ b/tag/port-forward/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
記錄“複雜”的家庭內網端口轉發
+ - + diff --git a/tag/server/index.html b/tag/server/index.html index cff88e33..ba67684f 100644 --- a/tag/server/index.html +++ b/tag/server/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
用Nginx Proxy Manager部署靜態網頁
+ - + diff --git a/tag/tools/index.html b/tag/tools/index.html index 43feecf2..10423368 100644 --- a/tag/tools/index.html +++ b/tag/tools/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
KMS 服務端安裝部署教程
+ - + diff --git "a/tag/\344\274\272\346\234\215\345\231\250/index.html" "b/tag/\344\274\272\346\234\215\345\231\250/index.html" index 085f24f6..1772a17f 100644 --- "a/tag/\344\274\272\346\234\215\345\231\250/index.html" +++ "b/tag/\344\274\272\346\234\215\345\231\250/index.html" @@ -30,10 +30,10 @@ } - + -
跳至主要內容
使用GitHub Actions自動部署前端到伺服器
+
跳至主要內容
搭建屬於自己的訂閱轉換鏈接

Sub-Web-Modify前端搭建

本項目基於CareyWang/sub-web,重製CSS樣式,解決大部分布局細節問題,增加“暗黑模式”,默認自動切換亮/暗模式(點擊“太陽/月亮”圖標可手動切換),增加“高級功能”點擊顯示/隱藏,添加短鏈接選擇/自定義功能,增加近百條遠程配置,新增sub-web聚合API,增加上傳自定義遠程配置/JS進階排序節點/JS進階篩選節點等功能!


Ven2s...大约 5 分鐘Linux伺服器
- + diff --git "a/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" "b/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" index 3724e866..09df77f2 100644 --- "a/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" +++ "b/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" @@ -30,11 +30,11 @@ } - + -
跳至主要內容
页面配置

more 注释之前的内容被视为文章摘要。

+ - + diff --git "a/tag/\345\211\215\347\253\257/index.html" "b/tag/\345\211\215\347\253\257/index.html" index c019253a..e4f60a14 100644 --- "a/tag/\345\211\215\347\253\257/index.html" +++ "b/tag/\345\211\215\347\253\257/index.html" @@ -30,10 +30,10 @@ } - + -
跳至主要內容
使用GitHub Actions自動部署前端到伺服器
+
跳至主要內容
使用GitHub Actions自動部署前端到伺服器

使用GitHub Actions自動部署前端到伺服器

GitHub Actions介紹及原理

@@ -51,6 +51,6 @@

GitHub Actions介紹及原理

本教程是在《用Nginx Proxy Manager部署靜態網頁》基礎上延伸出的思路,省去了安裝node環境和各種依賴的步驟,直接在GitHub Action中部署前端。每次在本地對後端文件進行修正後,直接將前端發布到伺服器。起到一勞永逸的效果。


Ven2s...大约 6 分鐘linux伺服器前端
- + diff --git "a/tag/\345\234\206/index.html" "b/tag/\345\234\206/index.html" index 3481ba01..92d2a11c 100644 --- "a/tag/\345\234\206/index.html" +++ "b/tag/\345\234\206/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git "a/tag/\345\244\247/index.html" "b/tag/\345\244\247/index.html" index d93d5de4..ac4a5624 100644 --- "a/tag/\345\244\247/index.html" +++ "b/tag/\345\244\247/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git "a/tag/\345\267\245\345\205\267/index.html" "b/tag/\345\267\245\345\205\267/index.html" index e1acbe38..b97dc9e2 100644 --- "a/tag/\345\267\245\345\205\267/index.html" +++ "b/tag/\345\267\245\345\205\267/index.html" @@ -30,10 +30,10 @@ } - + -
跳至主要內容
GitHub上的生產力工具
+ - + diff --git "a/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" "b/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" index 3a8fe2af..09f80404 100644 --- "a/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" +++ "b/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" @@ -30,10 +30,10 @@ } - + - - + + diff --git "a/tag/\346\230\223/index.html" "b/tag/\346\230\223/index.html" index 7c4581b6..5b227cd0 100644 --- "a/tag/\346\230\223/index.html" +++ "b/tag/\346\230\223/index.html" @@ -30,10 +30,10 @@ } - + - - + + diff --git "a/tag/\347\246\201\347\224\250/index.html" "b/tag/\347\246\201\347\224\250/index.html" index c2fd872d..b7fb37f7 100644 --- "a/tag/\347\246\201\347\224\250/index.html" +++ "b/tag/\347\246\201\347\224\250/index.html" @@ -30,11 +30,11 @@ } - + -
跳至主要內容
佈局與功能禁用

你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。

+ - + diff --git "a/tag/\347\272\242/index.html" "b/tag/\347\272\242/index.html" index 7aa3d320..8cc4b45f 100644 --- "a/tag/\347\272\242/index.html" +++ "b/tag/\347\272\242/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git "a/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" "b/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" index cce61d78..62b7917b 100644 --- "a/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" +++ "b/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" @@ -30,11 +30,11 @@ } - + -
跳至主要內容
页面配置

more 注释之前的内容被视为文章摘要。

+ - + diff --git a/timeline/index.html b/timeline/index.html index 629ff30e..d704b54b 100644 --- a/timeline/index.html +++ b/timeline/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/zh/article/index.html b/zh/article/index.html index a1ce27fe..c56c14ee 100644 --- a/zh/article/index.html +++ b/zh/article/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
代码笔记

这里是 Ven2s 存放的笔记。

+
跳至主要內容
利用GitHub Actions自动部署前端到服务器

Automatically deploying the Front End to the server using GitHub Actions

@@ -96,6 +96,6 @@

开始部署

wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 

Ven2s...大约 5 分钟Home Network Layoutkmstools
2
3
- + diff --git a/zh/category/home-network-layout/index.html b/zh/category/home-network-layout/index.html index a5fd9234..7cf56928 100644 --- a/zh/category/home-network-layout/index.html +++ b/zh/category/home-network-layout/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
KMS 服務端安裝部署教程
+ - + diff --git a/zh/category/index.html b/zh/category/index.html index 1f6ea457..4ff71ef3 100644 --- a/zh/category/index.html +++ b/zh/category/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/zh/category/linux/index.html b/zh/category/linux/index.html index abc12bbe..bac3f2ec 100644 --- a/zh/category/linux/index.html +++ b/zh/category/linux/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
利用GitHub Actions自动部署前端到服务器
+ - + diff --git a/zh/category/macos/index.html b/zh/category/macos/index.html index 51a289a1..9b3a66c7 100644 --- a/zh/category/macos/index.html +++ b/zh/category/macos/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Hackintosh
+
跳至主要內容
Hackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

@@ -51,6 +51,6 @@

闲话 回忆与现在

刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。


Ven2s...大约 3 分钟MacOSHackintosh
- + diff --git a/zh/category/windows/index.html b/zh/category/windows/index.html index f12b2f9f..c2a08487 100644 --- a/zh/category/windows/index.html +++ b/zh/category/windows/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Github上的生产力工具
+ - + diff --git "a/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" "b/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" index f22683e7..6e5b05fc 100644 --- "a/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" +++ "b/zh/category/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" @@ -30,10 +30,10 @@ } - + -
跳至主要內容
页面配置

more 注释之前的内容被视为文章摘要。

+
跳至主要內容
页面配置

more 注释之前的内容被视为文章摘要。


Ms.Hope...大约 1 分钟使用指南页面配置使用指南
Markdown 展示

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。


Ven2s...大约 3 分钟使用指南Markdown
- + diff --git "a/zh/category/\350\213\271\346\236\234/index.html" "b/zh/category/\350\213\271\346\236\234/index.html" index aaa38718..47768d44 100644 --- "a/zh/category/\350\213\271\346\236\234/index.html" +++ "b/zh/category/\350\213\271\346\236\234/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git a/zh/code/best-emoji.html b/zh/code/best-emoji.html index 16cc766f..2c5b53f6 100644 --- a/zh/code/best-emoji.html +++ b/zh/code/best-emoji.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

超酷的Emoji表情!

Ven2s...大约 6 分钟MarkdownBlog

Best Markdown Emoji !

Emoji表情

风至万始苏

原文open in new window

将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
如"😊",显示为😊

人物

syntaxpreviewsyntaxpreviewsyntaxpreview
:bowtie::bowtie::smile:😄:laughing:😆
:blush:😊:smiley:😃:relaxed:☺️
:smirk:😏:heart_eyes:😍:kissing_heart:😘
:kissing_closed_eyes:😚:flushed:😳:relieved:😌
:satisfied:😆:grin:😁:wink:😉
:stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
:kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
:sleeping:😴:worried:😟:frowning:😦
:anguished:😧:open_mouth:😮:grimacing:😬
:confused:😕:hushed:😯:expressionless:😑
:unamused:😒:sweat_smile:😅:sweat:😓
:disappointed_relieved:😥:weary:😩:pensive:😔
:disappointed:😞:confounded:😖:fearful:😨
:cold_sweat:😰:persevere:😣:cry:😢
:sob:😭:joy:😂:astonished:😲
:scream:😱:neckbeard::neckbeard::tired_face:😫
:angry:😠:rage:😡:triumph:😤
:sleepy:😪:yum:😋:mask:😷
:sunglasses:😎:dizzy_face:😵:imp:👿
:smiling_imp:😈:neutral_face:😐:no_mouth:😶
:innocent:😇:alien:👽:yellow_heart:💛
:blue_heart:💙:purple_heart:💜:heart:❤️
:green_heart:💚:broken_heart:💔:heartbeat:💓
:heartpulse:💗:two_hearts:💕:revolving_hearts:💞
:cupid:💘:sparkling_heart:💖:sparkles:
:star::star2:🌟:dizzy:💫
:boom:💥:collision:💥:anger:💢
:exclamation::question::grey_exclamation:
:grey_question::zzz:💤:dash:💨
:sweat_drops:💦:notes:🎶:musical_note:🎵
:fire:🔥:hankey:💩:poop:💩
::💩:+1:👍:thumbsup:👍
:-1:👎:thumbsdown:👎:ok_hand:👌
:punch:👊:facepunch:👊:fist:
:v:✌️:wave:👋:hand:
:raised_hand::open_hands:👐:point_up:☝️
:point_down:👇:point_left:👈:point_right:👉
:raised_hands:🙌:pray:🙏:point_up_2:👆
:clap:👏:muscle:💪:metal:🤘
:fu:🖕:walking:🚶:runner:🏃
:running:🏃:couple:👫:family:👪
:two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
:dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
:information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
:person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
:couplekiss:💏:couple_with_heart:💑:massage:💆
:haircut:💇:nail_care:💅:boy:👦
:girl:👧:woman:👩:man:👨
:baby:👶:older_woman:👵:older_man:👴
:person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
:construction_worker:👷:cop:👮:angel:👼
:princess:👸:smiley_cat:😺:smile_cat:😸
:heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
:scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
:pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
:see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
:guardsman:💂‍♂️:skull:💀:feet:🐾
:lips:👄:kiss:💋:droplet:💧
:ear:👂:eyes:👀:nose:👃
:tongue:👅:love_letter:💌:bust_in_silhouette:👤
:busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
:feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
:godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
:rage2::rage2::rage3::rage3::rage4::rage4:
:suspect::suspect::trollface::trollface:

自然

syntaxpreviewsyntaxpreviewsyntaxpreview
:sunny:☀️:umbrella::cloud:☁️
:snowflake:❄️:snowman::zap:
:cyclone:🌀:foggy:🌁:ocean:🌊
:cat:🐱:dog:🐶:mouse:🐭
:hamster:🐹:rabbit:🐰:wolf:🐺
:frog:🐸:tiger:🐯:koala:🐨
:bear:🐻:pig:🐷:pig_nose:🐽
:cow:🐮:boar:🐗:monkey_face:🐵
:monkey:🐒:horse:🐴:racehorse:🐎
:camel:🐫:sheep:🐑:elephant:🐘
:panda_face:🐼:snake:🐍:bird:🐦
:baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
:chicken:🐔:penguin:🐧:turtle:🐢
:bug:🐛:honeybee:🐝:ant:🐜
:beetle:🪲:snail:🐌:octopus:🐙
:tropical_fish:🐠:fish:🐟:whale:🐳
:whale2:🐋:dolphin:🐬:cow2:🐄
:ram:🐏:rat:🐀:water_buffalo:🐃
:tiger2:🐅:rabbit2:🐇:dragon:🐉
:goat:🐐:rooster:🐓:dog2:🐕
:pig2:🐖:mouse2:🐁:ox:🐂
:dragon_face:🐲:blowfish:🐡:crocodile:🐊
:dromedary_camel:🐪:leopard:🐆:cat2:🐈
:poodle:🐩:paw_prints:🐾:bouquet:💐
:cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
:rose:🌹:sunflower:🌻:hibiscus:🌺
:maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
:herb:🌿:mushroom:🍄:cactus:🌵
:palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
:chestnut:🌰:seedling:🌱:blossom:🌼
:ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
:sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
:new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
:full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
:waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
:moon:🌔:earth_africa:🌍:earth_americas:🌎
:earth_asia:🌏:volcano:🌋:milky_way:🌌
:partly_sunny::octocat::octocat::squirrel::squirrel:
:waxing_gibbous_moon:🌔

物体

syntaxpreviewsyntaxpreviewsyntaxpreview
:bamboo:🎍:gift_heart:💝:dolls:🎎
:school_satchel:🎒:mortar_board:🎓:flags:🎏
:fireworks:🎆:sparkler:🎇:wind_chime:🎐
:rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
:santa:🎅:christmas_tree:🎄:gift:🎁
:bell:🔔:no_bell:🔕:tanabata_tree:🎋
:tada:🎉:confetti_ball:🎊:balloon:🎈
:crystal_ball:🔮:cd:💿:dvd:📀
:floppy_disk:💾:camera:📷:video_camera:📹
:movie_camera:🎥:computer:💻:tv:📺
:iphone:📱:phone:☎️:telephone:☎️
:telephone_receiver:📞:pager:📟:fax:📠
:minidisc:💽:vhs:📼:sound:🔉
:speaker:🔈:mute:🔇:loudspeaker:📢
:mega:📣:hourglass::hourglass_flowing_sand:
:alarm_clock::watch::radio:📻
:satellite:📡:loop::mag:🔍
:mag_right:🔎:unlock:🔓:lock:🔒
:lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
:bulb:💡:flashlight:🔦:high_brightness:🔆
:low_brightness:🔅:electric_plug:🔌:battery:🔋
:calling:📲:email:📧:mailbox:📫
:postbox:📮:bath:🛀:bathtub:🛁
:shower:🚿:toilet:🚽:wrench:🔧
:nut_and_bolt:🔩:hammer:🔨:seat:💺
:moneybag:💰:yen:💴:dollar:💵
:pound:💷:euro:💶:credit_card:💳
:money_with_wings:💸:e-mail:📧:inbox_tray:📥
:outbox_tray:📤:envelope:✉️:incoming_envelope:📨
:postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
:mailbox_with_no_mail:📭:door:🚪:smoking:🚬
:bomb:💣:gun:🔫:hocho:🔪
:pill:💊:syringe:💉:page_facing_up:📄
:page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
:chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
:clipboard:📋:calendar:📆:date:📅
:card_index:📇:file_folder:📁:open_file_folder:📂
:scissors:✂️:pushpin:📌:paperclip:📎
:black_nib:✒️:pencil2:✏️:straight_ruler:📏
:triangular_ruler:📐:closed_book:📕:green_book:📗
:blue_book:📘:orange_book:📙:notebook:📓
:notebook_with_decorative_cover:📔:ledger:📒:books:📚
:bookmark:🔖:microscope:🔬:telescope:🔭
:name_badge:📛:newspaper:📰:football:🏈
:basketball:🏀:soccer::baseball:
:tennis:🎾:8ball:🎱:rugby_football:🏉
:bowling:🎳:golf::mountain_bicyclist:🚵
:bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
:swimmer:🏊:surfer:🏄:ski:🎿
:spades:♠️:hearts:♥️:clubs:♣️
:diamonds:♦️:gem:💎:ring:💍
:trophy:🏆:musical_score:🎼:musical_keyboard:🎹
:violin:🎻:space_invader:👾:video_game:🎮
:black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
:dart:🎯:mahjong:🀄:clapper:🎬
:memo:📝:pencil:📝:book:📖
:art:🎨:microphone:🎤:headphones:🎧
:trumpet:🎺:saxophone:🎷:guitar:🎸
:shoe:👞:sandal:👡:high_heel:👠
:lipstick:💄:boot:👢:shirt:👕
:tshirt:👕:necktie:👔:womans_clothes:👚
:dress:👗:running_shirt_with_sash:🎽:jeans:👖
:kimono:👘:bikini:👙:ribbon:🎀
:tophat:🎩:crown:👑:womans_hat:👒
:mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
:handbag:👜:pouch:👝:purse:👛
:eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
:tea:🍵:sake:🍶:baby_bottle:🍼
:beer:🍺:beers:🍻:cocktail:🍸
:tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
:pizza:🍕:hamburger:🍔:fries:🍟
:poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
:curry:🍛:fried_shrimp:🍤:bento:🍱
:sushi:🍣:fish_cake:🍥:rice_ball:🍙
:rice_cracker:🍘:rice:🍚:ramen:🍜
:stew:🍲:oden:🍢:dango:🍡
:egg:🥚:bread:🍞:doughnut:🍩
:custard:🍮:icecream:🍦:ice_cream:🍨
:shaved_ice:🍧:birthday:🎂:cake:🍰
:cookie:🍪:chocolate_bar:🍫:candy:🍬
:lollipop:🍭:honey_pot:🍯:apple:🍎
:green_apple:🍏:tangerine:🍊:lemon:🍋
:cherries:🍒:grapes:🍇:watermelon:🍉
:strawberry:🍓:peach:🍑:melon:🍈
:banana:🍌:pear:🍐:pineapple:🍍
:sweet_potato:🍠:eggplant:🍆:tomato:🍅
:corn:🌽

地点

syntaxpreviewsyntaxpreviewsyntaxpreview
:house:🏠:house_with_garden:🏡:school:🏫
:office:🏢:post_office:🏣:hospital:🏥
:bank:🏦:convenience_store:🏪:love_hotel:🏩
:hotel:🏨:wedding:💒:church:
:department_store:🏬:european_post_office:🏤:city_sunrise:🌇
:city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
:tent::factory:🏭:tokyo_tower:🗼
:japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
:sunrise:🌅:stars:🌠:statue_of_liberty:🗽
:bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
:ferris_wheel:🎡:fountain::roller_coaster:🎢
:ship:🚢:speedboat:🚤:boat:
:sailboat::rowboat:🚣:anchor:
:rocket:🚀:airplane:✈️:helicopter:🚁
:steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
:bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
:mountain_cableway:🚠:tractor:🚜:blue_car:🚙
:oncoming_automobile:🚘:car:🚗:red_car:🚗
:taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
:bus:🚌:oncoming_bus:🚍:rotating_light:🚨
:police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
:ambulance:🚑:minibus:🚐:truck:🚚
:train:🚋:station:🚉:train2:🚆
:bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
:monorail:🚝:railway_car:🚃:trolleybus:🚎
:ticket:🎫:fuelpump::vertical_traffic_light:🚦
:traffic_light:🚥:warning:⚠️:construction:🚧
:beginner:🔰:atm:🏧:slot_machine:🎰
:busstop:🚏:barber:💈:hotsprings:♨️
:checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
:moyai:🗿:circus_tent:🎪:performing_arts:🎭
:round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
:kr:🇰🇷:cn:🇨🇳:us:🇺🇸
:fr:🇫🇷:es:🇪🇸:it:🇮🇹
:ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
:de:🇩🇪

符号

syntaxpreviewsyntaxpreviewsyntaxpreview
:one:1️⃣:two:2️⃣:three:3️⃣
:four:4️⃣:five:5️⃣:six:6️⃣
:seven:7️⃣:eight:8️⃣:nine:9️⃣
:keycap_ten:🔟:1234:🔢:zero:0️⃣
:hash:#️⃣:symbols:🔣:arrow_backward:◀️
:arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
:capital_abcd:🔠:abcd:🔡:abc:🔤
:arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
:arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
:arrow_double_down::arrow_double_up::arrow_down_small:🔽
:arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
:arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
:arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
:rewind::fast_forward::information_source:ℹ️
:ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
:repeat_one:🔂:new:🆕:top:🔝
:up:🆙:cool:🆒:free:🆓
:ng:🆖:cinema:🎦:koko:🈁
:signal_strength:📶:u5272::u5272::u5408::u5408:
:u55b6::u55b6::u6307::u6307::u6708::u6708:
:u6709::u6709::u6e80:🈵:u7121::u7121:
:u7533::u7533::u7a7a::u7a7a::u7981::u7981:
:sa:🈂️:restroom:🚻:mens:🚹
:womens:🚺:baby_symbol:🚼:no_smoking:🚭
:parking:🅿️:wheelchair::metro:🚇
:baggage_claim:🛄:accept:🉑:wc:🚾
:potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
:congratulations:㊗️:m:Ⓜ️:passport_control:🛂
:left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
:cl:🆑:sos:🆘:id:🆔
:no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
:do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
:no_pedestrians:🚷:children_crossing:🚸:no_entry:
:eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
:vs:🆚:vibration_mode:📳:mobile_phone_off:📴
:chart:💹:currency_exchange:💱:aries:
:taurus::gemini::cancer:
:leo::virgo::libra:
:scorpius::sagittarius::capricorn:
:aquarius::pisces::ophiuchus:
:six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
:b:🅱️:ab:🆎:o2:🅾️
:diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
:on:🔛:soon:🔜:clock1:🕐
:clock130:🕜:clock10:🕙:clock1030:🕥
:clock11:🕚:clock1130:🕦:clock12:🕛
:clock1230:🕧:clock2:🕑:clock230:🕝
:clock3:🕒:clock330:🕞:clock4:🕓
:clock430:🕟:clock5:🕔:clock530:🕠
:clock6:🕕:clock630:🕡:clock7:🕖
:clock730:🕢:clock8:🕗:clock830:🕣
:clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
:copyright:©️:registered:®️:tm:™️
:x::heavy_exclamation_mark::bangbang:‼️
:interrobang:⁉️:o::heavy_multiplication_x:✖️
:heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
:white_flower:💮:100:💯:heavy_check_mark:✔️
:ballot_box_with_check:☑️:radio_button:🔘:link:🔗
:curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
:trident:🔱:black_large_square::white_large_square:
:white_check_mark::white_square_button:🔳:black_square_button:🔲
:black_circle::white_circle::red_circle:🔴
:large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
:small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
:small_red_triangle_down:🔻:shipit::shipit:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容

超酷的Emoji表情!

Ven2s...大约 6 分钟MarkdownBlog

Best Markdown Emoji !

Emoji表情

风至万始苏

原文open in new window

将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
如"😊",显示为😊

人物

syntaxpreviewsyntaxpreviewsyntaxpreview
:bowtie::bowtie::smile:😄:laughing:😆
:blush:😊:smiley:😃:relaxed:☺️
:smirk:😏:heart_eyes:😍:kissing_heart:😘
:kissing_closed_eyes:😚:flushed:😳:relieved:😌
:satisfied:😆:grin:😁:wink:😉
:stuck_out_tongue_winking_eye:😜:stuck_out_tongue_closed_eyes:😝:grinning:😀
:kissing:😗:kissing_smiling_eyes:😙:stuck_out_tongue:😛
:sleeping:😴:worried:😟:frowning:😦
:anguished:😧:open_mouth:😮:grimacing:😬
:confused:😕:hushed:😯:expressionless:😑
:unamused:😒:sweat_smile:😅:sweat:😓
:disappointed_relieved:😥:weary:😩:pensive:😔
:disappointed:😞:confounded:😖:fearful:😨
:cold_sweat:😰:persevere:😣:cry:😢
:sob:😭:joy:😂:astonished:😲
:scream:😱:neckbeard::neckbeard::tired_face:😫
:angry:😠:rage:😡:triumph:😤
:sleepy:😪:yum:😋:mask:😷
:sunglasses:😎:dizzy_face:😵:imp:👿
:smiling_imp:😈:neutral_face:😐:no_mouth:😶
:innocent:😇:alien:👽:yellow_heart:💛
:blue_heart:💙:purple_heart:💜:heart:❤️
:green_heart:💚:broken_heart:💔:heartbeat:💓
:heartpulse:💗:two_hearts:💕:revolving_hearts:💞
:cupid:💘:sparkling_heart:💖:sparkles:
:star::star2:🌟:dizzy:💫
:boom:💥:collision:💥:anger:💢
:exclamation::question::grey_exclamation:
:grey_question::zzz:💤:dash:💨
:sweat_drops:💦:notes:🎶:musical_note:🎵
:fire:🔥:hankey:💩:poop:💩
::💩:+1:👍:thumbsup:👍
:-1:👎:thumbsdown:👎:ok_hand:👌
:punch:👊:facepunch:👊:fist:
:v:✌️:wave:👋:hand:
:raised_hand::open_hands:👐:point_up:☝️
:point_down:👇:point_left:👈:point_right:👉
:raised_hands:🙌:pray:🙏:point_up_2:👆
:clap:👏:muscle:💪:metal:🤘
:fu:🖕:walking:🚶:runner:🏃
:running:🏃:couple:👫:family:👪
:two_men_holding_hands:👬:two_women_holding_hands:👭:dancer:💃
:dancers:👯:ok_woman:🙆‍♀️:no_good:🙅
:information_desk_person:💁:raising_hand:🙋:bride_with_veil:👰‍♀️
:person_with_pouting_face::person_with_pouting_face::person_frowning::person_frowning::bow:🙇
:couplekiss:💏:couple_with_heart:💑:massage:💆
:haircut:💇:nail_care:💅:boy:👦
:girl:👧:woman:👩:man:👨
:baby:👶:older_woman:👵:older_man:👴
:person_with_blond_hair::person_with_blond_hair::man_with_gua_pi_mao:👲:man_with_turban:👳‍♂️
:construction_worker:👷:cop:👮:angel:👼
:princess:👸:smiley_cat:😺:smile_cat:😸
:heart_eyes_cat:😻:kissing_cat:😽:smirk_cat:😼
:scream_cat:🙀:crying_cat_face:😿:joy_cat:😹
:pouting_cat:😾:japanese_ogre:👹:japanese_goblin:👺
:see_no_evil:🙈:hear_no_evil:🙉:speak_no_evil:🙊
:guardsman:💂‍♂️:skull:💀:feet:🐾
:lips:👄:kiss:💋:droplet:💧
:ear:👂:eyes:👀:nose:👃
:tongue:👅:love_letter:💌:bust_in_silhouette:👤
:busts_in_silhouette:👥:speech_balloon:💬:thought_balloon:💭
:feelsgood::feelsgood::finnadie::finnadie::goberserk::goberserk:
:godmode::godmode::hurtrealbad::hurtrealbad::rage1::rage1:
:rage2::rage2::rage3::rage3::rage4::rage4:
:suspect::suspect::trollface::trollface:

自然

syntaxpreviewsyntaxpreviewsyntaxpreview
:sunny:☀️:umbrella::cloud:☁️
:snowflake:❄️:snowman::zap:
:cyclone:🌀:foggy:🌁:ocean:🌊
:cat:🐱:dog:🐶:mouse:🐭
:hamster:🐹:rabbit:🐰:wolf:🐺
:frog:🐸:tiger:🐯:koala:🐨
:bear:🐻:pig:🐷:pig_nose:🐽
:cow:🐮:boar:🐗:monkey_face:🐵
:monkey:🐒:horse:🐴:racehorse:🐎
:camel:🐫:sheep:🐑:elephant:🐘
:panda_face:🐼:snake:🐍:bird:🐦
:baby_chick:🐤:hatched_chick:🐥:hatching_chick:🐣
:chicken:🐔:penguin:🐧:turtle:🐢
:bug:🐛:honeybee:🐝:ant:🐜
:beetle:🪲:snail:🐌:octopus:🐙
:tropical_fish:🐠:fish:🐟:whale:🐳
:whale2:🐋:dolphin:🐬:cow2:🐄
:ram:🐏:rat:🐀:water_buffalo:🐃
:tiger2:🐅:rabbit2:🐇:dragon:🐉
:goat:🐐:rooster:🐓:dog2:🐕
:pig2:🐖:mouse2:🐁:ox:🐂
:dragon_face:🐲:blowfish:🐡:crocodile:🐊
:dromedary_camel:🐪:leopard:🐆:cat2:🐈
:poodle:🐩:paw_prints:🐾:bouquet:💐
:cherry_blossom:🌸:tulip:🌷:four_leaf_clover:🍀
:rose:🌹:sunflower:🌻:hibiscus:🌺
:maple_leaf:🍁:leaves:🍃:fallen_leaf:🍂
:herb:🌿:mushroom:🍄:cactus:🌵
:palm_tree:🌴:evergreen_tree:🌲:deciduous_tree:🌳
:chestnut:🌰:seedling:🌱:blossom:🌼
:ear_of_rice:🌾:shell:🐚:globe_with_meridians:🌐
:sun_with_face:🌞:full_moon_with_face:🌝:new_moon_with_face:🌚
:new_moon:🌑:waxing_crescent_moon:🌒:first_quarter_moon:🌓
:full_moon:🌕:waning_gibbous_moon:🌖:last_quarter_moon:🌗
:waning_crescent_moon:🌘:last_quarter_moon_with_face:🌜:first_quarter_moon_with_face:🌛
:moon:🌔:earth_africa:🌍:earth_americas:🌎
:earth_asia:🌏:volcano:🌋:milky_way:🌌
:partly_sunny::octocat::octocat::squirrel::squirrel:
:waxing_gibbous_moon:🌔

物体

syntaxpreviewsyntaxpreviewsyntaxpreview
:bamboo:🎍:gift_heart:💝:dolls:🎎
:school_satchel:🎒:mortar_board:🎓:flags:🎏
:fireworks:🎆:sparkler:🎇:wind_chime:🎐
:rice_scene:🎑:jack_o_lantern:🎃:ghost:👻
:santa:🎅:christmas_tree:🎄:gift:🎁
:bell:🔔:no_bell:🔕:tanabata_tree:🎋
:tada:🎉:confetti_ball:🎊:balloon:🎈
:crystal_ball:🔮:cd:💿:dvd:📀
:floppy_disk:💾:camera:📷:video_camera:📹
:movie_camera:🎥:computer:💻:tv:📺
:iphone:📱:phone:☎️:telephone:☎️
:telephone_receiver:📞:pager:📟:fax:📠
:minidisc:💽:vhs:📼:sound:🔉
:speaker:🔈:mute:🔇:loudspeaker:📢
:mega:📣:hourglass::hourglass_flowing_sand:
:alarm_clock::watch::radio:📻
:satellite:📡:loop::mag:🔍
:mag_right:🔎:unlock:🔓:lock:🔒
:lock_with_ink_pen:🔏:closed_lock_with_key:🔐:key:🔑
:bulb:💡:flashlight:🔦:high_brightness:🔆
:low_brightness:🔅:electric_plug:🔌:battery:🔋
:calling:📲:email:📧:mailbox:📫
:postbox:📮:bath:🛀:bathtub:🛁
:shower:🚿:toilet:🚽:wrench:🔧
:nut_and_bolt:🔩:hammer:🔨:seat:💺
:moneybag:💰:yen:💴:dollar:💵
:pound:💷:euro:💶:credit_card:💳
:money_with_wings:💸:e-mail:📧:inbox_tray:📥
:outbox_tray:📤:envelope:✉️:incoming_envelope:📨
:postal_horn:📯:mailbox_closed:📪:mailbox_with_mail:📬
:mailbox_with_no_mail:📭:door:🚪:smoking:🚬
:bomb:💣:gun:🔫:hocho:🔪
:pill:💊:syringe:💉:page_facing_up:📄
:page_with_curl:📃:bookmark_tabs:📑:bar_chart:📊
:chart_with_upwards_trend:📈:chart_with_downwards_trend:📉:scroll:📜
:clipboard:📋:calendar:📆:date:📅
:card_index:📇:file_folder:📁:open_file_folder:📂
:scissors:✂️:pushpin:📌:paperclip:📎
:black_nib:✒️:pencil2:✏️:straight_ruler:📏
:triangular_ruler:📐:closed_book:📕:green_book:📗
:blue_book:📘:orange_book:📙:notebook:📓
:notebook_with_decorative_cover:📔:ledger:📒:books:📚
:bookmark:🔖:microscope:🔬:telescope:🔭
:name_badge:📛:newspaper:📰:football:🏈
:basketball:🏀:soccer::baseball:
:tennis:🎾:8ball:🎱:rugby_football:🏉
:bowling:🎳:golf::mountain_bicyclist:🚵
:bicyclist:🚴:horse_racing:🏇:snowboarder:🏂
:swimmer:🏊:surfer:🏄:ski:🎿
:spades:♠️:hearts:♥️:clubs:♣️
:diamonds:♦️:gem:💎:ring:💍
:trophy:🏆:musical_score:🎼:musical_keyboard:🎹
:violin:🎻:space_invader:👾:video_game:🎮
:black_joker:🃏:flower_playing_cards:🎴:game_die:🎲
:dart:🎯:mahjong:🀄:clapper:🎬
:memo:📝:pencil:📝:book:📖
:art:🎨:microphone:🎤:headphones:🎧
:trumpet:🎺:saxophone:🎷:guitar:🎸
:shoe:👞:sandal:👡:high_heel:👠
:lipstick:💄:boot:👢:shirt:👕
:tshirt:👕:necktie:👔:womans_clothes:👚
:dress:👗:running_shirt_with_sash:🎽:jeans:👖
:kimono:👘:bikini:👙:ribbon:🎀
:tophat:🎩:crown:👑:womans_hat:👒
:mans_shoe:👞:closed_umbrella:🌂:briefcase:💼
:handbag:👜:pouch:👝:purse:👛
:eyeglasses:👓:fishing_pole_and_fish:🎣:coffee:
:tea:🍵:sake:🍶:baby_bottle:🍼
:beer:🍺:beers:🍻:cocktail:🍸
:tropical_drink:🍹:wine_glass:🍷:fork_and_knife:🍴
:pizza:🍕:hamburger:🍔:fries:🍟
:poultry_leg:🍗:meat_on_bone:🍖:spaghetti:🍝
:curry:🍛:fried_shrimp:🍤:bento:🍱
:sushi:🍣:fish_cake:🍥:rice_ball:🍙
:rice_cracker:🍘:rice:🍚:ramen:🍜
:stew:🍲:oden:🍢:dango:🍡
:egg:🥚:bread:🍞:doughnut:🍩
:custard:🍮:icecream:🍦:ice_cream:🍨
:shaved_ice:🍧:birthday:🎂:cake:🍰
:cookie:🍪:chocolate_bar:🍫:candy:🍬
:lollipop:🍭:honey_pot:🍯:apple:🍎
:green_apple:🍏:tangerine:🍊:lemon:🍋
:cherries:🍒:grapes:🍇:watermelon:🍉
:strawberry:🍓:peach:🍑:melon:🍈
:banana:🍌:pear:🍐:pineapple:🍍
:sweet_potato:🍠:eggplant:🍆:tomato:🍅
:corn:🌽

地点

syntaxpreviewsyntaxpreviewsyntaxpreview
:house:🏠:house_with_garden:🏡:school:🏫
:office:🏢:post_office:🏣:hospital:🏥
:bank:🏦:convenience_store:🏪:love_hotel:🏩
:hotel:🏨:wedding:💒:church:
:department_store:🏬:european_post_office:🏤:city_sunrise:🌇
:city_sunset:🌆:japanese_castle:🏯:european_castle:🏰
:tent::factory:🏭:tokyo_tower:🗼
:japan:🗾:mount_fuji:🗻:sunrise_over_mountains:🌄
:sunrise:🌅:stars:🌠:statue_of_liberty:🗽
:bridge_at_night:🌉:carousel_horse:🎠:rainbow:🌈
:ferris_wheel:🎡:fountain::roller_coaster:🎢
:ship:🚢:speedboat:🚤:boat:
:sailboat::rowboat:🚣:anchor:
:rocket:🚀:airplane:✈️:helicopter:🚁
:steam_locomotive:🚂:tram:🚊:mountain_railway:🚞
:bike:🚲:aerial_tramway:🚡:suspension_railway:🚟
:mountain_cableway:🚠:tractor:🚜:blue_car:🚙
:oncoming_automobile:🚘:car:🚗:red_car:🚗
:taxi:🚕:oncoming_taxi:🚖:articulated_lorry:🚛
:bus:🚌:oncoming_bus:🚍:rotating_light:🚨
:police_car:🚓:oncoming_police_car:🚔:fire_engine:🚒
:ambulance:🚑:minibus:🚐:truck:🚚
:train:🚋:station:🚉:train2:🚆
:bullettrain_front:🚅:bullettrain_side:🚄:light_rail:🚈
:monorail:🚝:railway_car:🚃:trolleybus:🚎
:ticket:🎫:fuelpump::vertical_traffic_light:🚦
:traffic_light:🚥:warning:⚠️:construction:🚧
:beginner:🔰:atm:🏧:slot_machine:🎰
:busstop:🚏:barber:💈:hotsprings:♨️
:checkered_flag:🏁:crossed_flags:🎌:izakaya_lantern:🏮
:moyai:🗿:circus_tent:🎪:performing_arts:🎭
:round_pushpin:📍:triangular_flag_on_post:🚩:jp:🇯🇵
:kr:🇰🇷:cn:🇨🇳:us:🇺🇸
:fr:🇫🇷:es:🇪🇸:it:🇮🇹
:ru:🇷🇺:gb:🇬🇧:uk:🇬🇧
:de:🇩🇪

符号

syntaxpreviewsyntaxpreviewsyntaxpreview
:one:1️⃣:two:2️⃣:three:3️⃣
:four:4️⃣:five:5️⃣:six:6️⃣
:seven:7️⃣:eight:8️⃣:nine:9️⃣
:keycap_ten:🔟:1234:🔢:zero:0️⃣
:hash:#️⃣:symbols:🔣:arrow_backward:◀️
:arrow_down:⬇️:arrow_forward:▶️:arrow_left:⬅️
:capital_abcd:🔠:abcd:🔡:abc:🔤
:arrow_lower_left:↙️:arrow_lower_right:↘️:arrow_right:➡️
:arrow_up:⬆️:arrow_upper_left:↖️:arrow_upper_right:↗️
:arrow_double_down::arrow_double_up::arrow_down_small:🔽
:arrow_heading_down:⤵️:arrow_heading_up:⤴️:leftwards_arrow_with_hook:↩️
:arrow_right_hook:↪️:left_right_arrow:↔️:arrow_up_down:↕️
:arrow_up_small:🔼:arrows_clockwise:🔃:arrows_counterclockwise:🔄
:rewind::fast_forward::information_source:ℹ️
:ok:🆗:twisted_rightwards_arrows:🔀:repeat:🔁
:repeat_one:🔂:new:🆕:top:🔝
:up:🆙:cool:🆒:free:🆓
:ng:🆖:cinema:🎦:koko:🈁
:signal_strength:📶:u5272::u5272::u5408::u5408:
:u55b6::u55b6::u6307::u6307::u6708::u6708:
:u6709::u6709::u6e80:🈵:u7121::u7121:
:u7533::u7533::u7a7a::u7a7a::u7981::u7981:
:sa:🈂️:restroom:🚻:mens:🚹
:womens:🚺:baby_symbol:🚼:no_smoking:🚭
:parking:🅿️:wheelchair::metro:🚇
:baggage_claim:🛄:accept:🉑:wc:🚾
:potable_water:🚰:put_litter_in_its_place:🚮:secret:㊙️
:congratulations:㊗️:m:Ⓜ️:passport_control:🛂
:left_luggage:🛅:customs:🛃:ideograph_advantage:🉐
:cl:🆑:sos:🆘:id:🆔
:no_entry_sign:🚫:underage:🔞:no_mobile_phones:📵
:do_not_litter:🚯:non-potable_water:🚱:no_bicycles:🚳
:no_pedestrians:🚷:children_crossing:🚸:no_entry:
:eight_spoked_asterisk:✳️:eight_pointed_black_star:✴️:heart_decoration:💟
:vs:🆚:vibration_mode:📳:mobile_phone_off:📴
:chart:💹:currency_exchange:💱:aries:
:taurus::gemini::cancer:
:leo::virgo::libra:
:scorpius::sagittarius::capricorn:
:aquarius::pisces::ophiuchus:
:six_pointed_star:🔯:negative_squared_cross_mark::a:🅰️
:b:🅱️:ab:🆎:o2:🅾️
:diamond_shape_with_a_dot_inside:💠:recycle:♻️:end:🔚
:on:🔛:soon:🔜:clock1:🕐
:clock130:🕜:clock10:🕙:clock1030:🕥
:clock11:🕚:clock1130:🕦:clock12:🕛
:clock1230:🕧:clock2:🕑:clock230:🕝
:clock3:🕒:clock330:🕞:clock4:🕓
:clock430:🕟:clock5:🕔:clock530:🕠
:clock6:🕕:clock630:🕡:clock7:🕖
:clock730:🕢:clock8:🕗:clock830:🕣
:clock9:🕘:clock930:🕤:heavy_dollar_sign:💲
:copyright:©️:registered:®️:tm:™️
:x::heavy_exclamation_mark::bangbang:‼️
:interrobang:⁉️:o::heavy_multiplication_x:✖️
:heavy_plus_sign::heavy_minus_sign::heavy_division_sign:
:white_flower:💮:100:💯:heavy_check_mark:✔️
:ballot_box_with_check:☑️:radio_button:🔘:link:🔗
:curly_loop::wavy_dash:〰️:part_alternation_mark:〽️
:trident:🔱:black_large_square::white_large_square:
:white_check_mark::white_square_button:🔳:black_square_button:🔲
:black_circle::white_circle::red_circle:🔴
:large_blue_circle:🔵:large_blue_diamond:🔷:large_orange_diamond:🔶
:small_blue_diamond:🔹:small_orange_diamond:🔸:small_red_triangle:🔺
:small_red_triangle_down:🔻:shipit::shipit:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/code/build-sub.html b/zh/code/build-sub.html index 5080adb4..f4e90538 100644 --- a/zh/code/build-sub.html +++ b/zh/code/build-sub.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
搭建属于自己的订阅转换链接

搭建属于自己的订阅转换链接

Ven2s...大约 5 分钟linuxServer

Sub-Web-Modify前端搭建open in new window

本项目open in new window基于CareyWang/sub-webopen in new window,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合APIopen in new window,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!

更新系统并安装 Node 与 Yarn

依次运行下面四行代码,若是 CentOS 系统,请自行替换下面前两行命令中的 aptyum

apt update -y
+    
跳至主要內容
搭建属于自己的订阅转换链接

搭建属于自己的订阅转换链接

Ven2s...大约 5 分钟linuxServer

Sub-Web-Modify前端搭建open in new window

本项目open in new window基于CareyWang/sub-webopen in new window,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合APIopen in new window,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!

更新系统并安装 Node 与 Yarn

依次运行下面四行代码,若是 CentOS 系统,请自行替换下面前两行命令中的 aptyum

apt update -y
 apt install -y curl wget sudo nodejs git
 apt install npm
 npm install -g yarn
@@ -71,6 +71,6 @@
 

到这里,后端也就搭建完毕了,我们现在可以在浏览器里面访问我们的后端了,访问后端域名后端搭建成功!

方法二 Docker容器搭建

如果服务器安装了Docker可以使用命令:

docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest
 

然后再用下面的命令确认一下状态

curl http://localhost:25500/version
 

如果输出当前 subconverter 容器版本几位搭建成功。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/chatgpt-porxy.html b/zh/code/chatgpt-porxy.html index c27ab2a0..799e1460 100644 --- a/zh/code/chatgpt-porxy.html +++ b/zh/code/chatgpt-porxy.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

ChatGPT-Porxy

Ven2s...大约 2 分钟linuxChatGPT

Build ChatGPT Reverse Proxy

  • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 open in new window 来解决代理问题。

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
+    
跳至主要內容

ChatGPT-Porxy

Ven2s...大约 2 分钟linuxChatGPT

Build ChatGPT Reverse Proxy

  • ChatGPT-Web 项目的免费代理挂了,故此,选择本项目 open in new window 来解决代理问题。

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
 
 apt-get update && apt-get install -y wget nano
 
@@ -81,6 +81,6 @@
 docker logs -f chatgpt-proxy-server
 docker logs -f go-chatgpt-api
 

完工

1
😏

本教程来源:open in new window

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/chatgpt.html b/zh/code/chatgpt.html index a48aa38f..aa915182 100644 --- a/zh/code/chatgpt.html +++ b/zh/code/chatgpt.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

Wonderful ChatGPT

Ven2s...大约 2 分钟linuxChatGPT

3 Steps Build Your Own ChatGPT Web

  • ChatGPTopen in new window(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。

  • ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

ChatGPT-Webopen in new window

  • 支持双模型,提供了两种非官方 ChatGPT API 方法

介绍

方式免费?可靠性质量
ChatGPTAPI(gpt-3.5-turbo-0301)可靠相对较笨
ChatGPTUnofficialProxyAPI(网页 accessToken)相对不可靠聪明
  • 对比:
  1. ChatGPTAPI(gpt-3.5-turbo-0301)open in new window 使用 gpt-3.5-turbo-0301 通过官方 OpenAI 补全 API 模拟 ChatGPT (最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型)
  2. ChatGPTUnofficialProxyAPIopen in new window 使用非官方代理服务器访问 ChatGPT 的后端 API,绕过 Cloudflare(使用真实的的 ChatGPT,非常轻量级,但依赖于第三方服务器,并且有速率限制)

感谢原作者Chanzhaoyu的辛苦付出

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
+    
跳至主要內容

Wonderful ChatGPT

Ven2s...大约 2 分钟linuxChatGPT

3 Steps Build Your Own ChatGPT Web

  • ChatGPTopen in new window(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。

  • ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

ChatGPT-Webopen in new window

  • 支持双模型,提供了两种非官方 ChatGPT API 方法

介绍

方式免费?可靠性质量
ChatGPTAPI(gpt-3.5-turbo-0301)可靠相对较笨
ChatGPTUnofficialProxyAPI(网页 accessToken)相对不可靠聪明
  • 对比:
  1. ChatGPTAPI(gpt-3.5-turbo-0301)open in new window 使用 gpt-3.5-turbo-0301 通过官方 OpenAI 补全 API 模拟 ChatGPT (最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型)
  2. ChatGPTUnofficialProxyAPIopen in new window 使用非官方代理服务器访问 ChatGPT 的后端 API,绕过 Cloudflare(使用真实的的 ChatGPT,非常轻量级,但依赖于第三方服务器,并且有速率限制)

感谢原作者Chanzhaoyu的辛苦付出

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
 
 apt-get update && apt-get install -y wget nano
 
@@ -87,6 +87,6 @@
 tcp_nodelay on;
 keepalive_timeout 65;
 
ChatGPT
ChatGPT

大功告成,Enjoy

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/ddns.html b/zh/code/ddns.html index 22ca0457..22468e52 100644 --- a/zh/code/ddns.html +++ b/zh/code/ddns.html @@ -30,12 +30,12 @@ } - + -
跳至主要內容

記錄使用ddns實現內網穿透遠程訪問內網設備

Ven2s...大约 4 分钟Home Network LayoutDDNSNetwork

Using DDNS and Port forwarding to achieve remote access to devices on an internal network

前言

  • 最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

    Z
    D
    B

  • 写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

  • DDNSopen in new window(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

  • Cloudflareopen in new window 全球知名的DNS服务商。

  • DDNS-GOopen in new window 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

  • 公网 IPopen in new window 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

    RDP
    可以看到这里的延迟十分之低

开工

  • 开始之前先简单说下我家里的网络布局,弱电箱一个光猫桥接模式,一个主路由负责拨号,卧室一个 K2P 路由 ap 模式,一个旧笔记本电脑充当软路由(旁路由),安装了 PVEPVE 上使用了 openWRT,还有一台台式电脑,忘了在 visio 上画出来。

    网络布局
    网络布局图
  • 不要问我为什么不在 openWRTDHCP ,我试了很多次都无法联网,可能是因为网口绑定了 MAC 地址,我也不知道怎么取消绑定,所以我只能在主路由上绑定我电脑的 MAC 才能上网。(可能也不是这个原因,我在 openWRT 上绑定 WAN 口地址也不能上网。)我家的网络环境真的太复杂了😥

正式开始

安装

.\ddns-go.exe -s install
+    
跳至主要內容

記錄使用ddns實現內網穿透遠程訪問內網設備

Ven2s...大约 4 分钟Home Network LayoutDDNSNetwork

Using DDNS and Port forwarding to achieve remote access to devices on an internal network

前言

  • 最近迷上了AI画图软件 stable-diffusion-webui ,由于它对 GPU 的依赖很大,我只能使用家里的电脑来炼丹(也就一张6年前的1060😥),奈何又在外地上班,只能走进了我一直望而却步的动态域名解析服务,来实现远程控制家中电脑,以及其他网络设备的目的。

    Z
    D
    B

  • 写本篇教程(备忘录),一是彰显成就感,二是带给大家一些思路,让有相同需求的朋友少走弯路(毕竟我找了很多教程都没有说清楚DDNS到底是个什么,又要怎么使用)。

  • DDNSopen in new window(全名:Dynamic Domain Name Server),动态域名服务,说人话就是将家中内网的动态 ipv4 地址映射到一个固定的域名解析服务上。

  • Cloudflareopen in new window 全球知名的DNS服务商。

  • DDNS-GOopen in new window 超好用的DDNS解析服务工具。感谢作者大大解决了我最关键的问题。

  • 公网 IPopen in new window 不得不说电信的服务水平,半天时间真就给我开通了,这里就不说这玩意儿怎么用了,接触网络的人基本都知道,虽然现在有很多办法可以绕过公网 IP 来访问内网,但是通过我的测试,用了很多的远程连接服务和内网穿透工具,还是最原始的办法性价比更高,体验更是一流。

    RDP
    可以看到这里的延迟十分之低

开工

  • 开始之前先简单说下我家里的网络布局,弱电箱一个光猫桥接模式,一个主路由负责拨号,卧室一个 K2P 路由 ap 模式,一个旧笔记本电脑充当软路由(旁路由),安装了 PVEPVE 上使用了 openWRT,还有一台台式电脑,忘了在 visio 上画出来。

    网络布局
    网络布局图
  • 不要问我为什么不在 openWRTDHCP ,我试了很多次都无法联网,可能是因为网口绑定了 MAC 地址,我也不知道怎么取消绑定,所以我只能在主路由上绑定我电脑的 MAC 才能上网。(可能也不是这个原因,我在 openWRT 上绑定 WAN 口地址也不能上网。)我家的网络环境真的太复杂了😥

正式开始

安装

.\ddns-go.exe -s install
 

卸载

.\ddns-go.exe -s uninstall
 
DDNS-GO
DDNS-GO
  • 安装好后,在服务中可以看到 ddns-go 服务,并设置自启动

    DDNS-GO服务
    DDNS-GO服务开启
  • 打开 http://127.0.0.1:9876open in new window,可以看到 ddns-go 支持很多家动态解析服务商

    DDNS-GO配置1
    DDNS-GO页面
  • cloudflare 获取 API 令牌既上图中的 Token ,重点注意区域资源要选所有区域

    cloudflare配置1
    cloudflare配置2

  • 回到 DDNS-GO 中如下图,像我一样配置即可,有公网的只勾选 IPv4 ,没有公网的选 IPv6 (我两个都有,所以都选了,你也可以,经测试无伤大雅),在主机名后面填上你的域名。至于如何获得 IPv6 ,这个我下次再做一个详细的教程。(推荐一个好用的CF国内APIopen in new window,可以准确获取你的 IP 本地地址,无论你是否使用科学上网工具)

    DDNS-GO配置2
    DDNS-GO配置3
    DDNS-GO配置4

  • 点击保存后,成功后,你会在 Cloudflare 上你的域名 dns 服务中看到你已经解析了的A记录(IPv4地址)或者AAAA记录(IPv6地址),ddns-go 中你也可以看到解析成功的提示

  • 到此,你终于成功解析你的动态IP,在主路由、旁路由上设置好端口转发服务,就可以随时随地访问家中的设备。

抽时间,再把如何有效的进行端口转发记录下来,以防我这个狗脑子又忘了

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/github-actions-deploy.html b/zh/code/github-actions-deploy.html index 68b1bd4a..75569261 100644 --- a/zh/code/github-actions-deploy.html +++ b/zh/code/github-actions-deploy.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

利用GitHub Actions自动部署前端到服务器

Ven2s...大约 6 分钟linuxServerFrontEnd

Automatically deploying the Front End to the server using GitHub Actions

GitHub Actions介绍及原理

  • 接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

  • GitHub Actions 官方文档open in new window:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

  • 通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

  • 本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

GitHub Action 成功示图
GitHub Action成功界面
GitHub Action成功界面
name: luvsia-hugo-blog-autodeploy # 工作流程名称,自行命名
+    
跳至主要內容

利用GitHub Actions自动部署前端到服务器

Ven2s...大约 6 分钟linuxServerFrontEnd

Automatically deploying the Front End to the server using GitHub Actions

GitHub Actions介绍及原理

  • 接触 GitHub Actions 也有一段时间了,目前此blog就是利用 GitHub Action 自动部署到GitHub托管的。今天把此次前端页面成功部署到服务器端的操作方法详细记录下来,顺便按自己理解写些心得。抽空再码字完善(下班时间开工😭)。

  • GitHub Actions 官方文档open in new window:在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

  • 通过文档可以看出 GitHub Action 其强大的代码管理、运行部署、测试推送等一体化自动发布部署功能,省去了大量的重复性工作。由于通过ssh客户端连接到服务器,直接进行前端部署,需要安装各种各样的依赖,很大程度上降低了服务器运行效率,且不易对代码进行修正。

  • 本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。

GitHub Action 成功示图
GitHub Action成功界面
GitHub Action成功界面
name: luvsia-hugo-blog-autodeploy # 工作流程名称,自行命名
 
 on:
   push: # 什么时候请求触发
@@ -123,6 +123,6 @@
       # Target directory
           TARGET: "/data/docker_data/npm/data/sub.ven2s.cn/"
 

如果喜欢请分享此页面,如有疑问请按F5,再进行评论。哈哈

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/github-tools.html b/zh/code/github-tools.html index 819c8063..7c002fc0 100644 --- a/zh/code/github-tools.html +++ b/zh/code/github-tools.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

Github上的生产力工具

Ven2s...大约 3 分钟WindowsTools

Productivity tools on Github

技术是第一生产力

  • 在当今快节奏的世界中,技术已经成为提高生产力的基石。它改变了我们工作、沟通和协作的方式。开源软件以其透明和协作的特性成为这种转变的推动力。像 Githubopen in new window 这样托管数百万开源项目的平台,创造了一个充满活力的生态系统,让开发人员可以分享他们的想法并协作开发代码。

  • 通过利用开源和 Githubopen in new window 这样的平台,开发人员能够更有效地工作,减少开发时间,构建更好的软件。

  • 大家可以尽情地在 issues 上给作者提出宝贵的建议和意见,或是提交 BUG 帮助作者完善项目,或是成为一些初学者(小白)们咨询大佬的平台,极大地缩短了软件开发的时间成本,也解决了人们面对互联网工具资源匮乏的窘境。

  • Github 上8年的学习、 git 中,大部分时间都在潜水,或是找一些必要资源。从最开始的无从下手,到现在基本上能熟练的在本地和服务器搭建基本运行环境,熟练掌握 git 方法,将大佬们的项目 为我所用 。这期间我使用了无数的、各个平台上的项目、软件,有时候甚至会为了一个简单地环境搭建彻夜难眠、通宵达旦。也许这就是代码的魅力、开源的魅力。

  • 今天就来简单记录一些我使用过的 神一般的生产力工具 ,方便大家更好地工作、学习。

    1
    入坑时间

乱花渐欲迷人眼

xplorer

ToolWebFunctionDownload
xploreropen in new windowwindows 文件资源管理器美化版open in new window
Demo
Demo
View More Screenshots

Demo
Demo
Demo
Demo
Demo
Demo

openai-translator

ToolWebFunctionDownload
openai-translatoropen in new window基于 ChatGPT API划词翻译浏览器插件和跨平台桌面端应用open in new window
Demo
Demo
View More Screenshots

Demo
Demo

OcrHelper

ToolWebFunctionDownload
OcrHelperopen in new window桌面图像实时转文字工具open in new window
View More Screenshots

Demo
Demo
Demo
Demo

Everything

ToolWebFunctionDownload
Everythingopen in new window基于名称快速定位文件和文件夹open in new window
EverythingToolbaropen in new window基于 EverythingWindows 任务栏的一体化管理工具open in new window
Demo
EverythingToolbar
View More Screenshots
Demo
Everything

More...

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容

Github上的生产力工具

Ven2s...大约 3 分钟WindowsTools

Productivity tools on Github

技术是第一生产力

  • 在当今快节奏的世界中,技术已经成为提高生产力的基石。它改变了我们工作、沟通和协作的方式。开源软件以其透明和协作的特性成为这种转变的推动力。像 Githubopen in new window 这样托管数百万开源项目的平台,创造了一个充满活力的生态系统,让开发人员可以分享他们的想法并协作开发代码。

  • 通过利用开源和 Githubopen in new window 这样的平台,开发人员能够更有效地工作,减少开发时间,构建更好的软件。

  • 大家可以尽情地在 issues 上给作者提出宝贵的建议和意见,或是提交 BUG 帮助作者完善项目,或是成为一些初学者(小白)们咨询大佬的平台,极大地缩短了软件开发的时间成本,也解决了人们面对互联网工具资源匮乏的窘境。

  • Github 上8年的学习、 git 中,大部分时间都在潜水,或是找一些必要资源。从最开始的无从下手,到现在基本上能熟练的在本地和服务器搭建基本运行环境,熟练掌握 git 方法,将大佬们的项目 为我所用 。这期间我使用了无数的、各个平台上的项目、软件,有时候甚至会为了一个简单地环境搭建彻夜难眠、通宵达旦。也许这就是代码的魅力、开源的魅力。

  • 今天就来简单记录一些我使用过的 神一般的生产力工具 ,方便大家更好地工作、学习。

    1
    入坑时间

乱花渐欲迷人眼

xplorer

ToolWebFunctionDownload
xploreropen in new windowwindows 文件资源管理器美化版open in new window
Demo
Demo
View More Screenshots

Demo
Demo
Demo
Demo
Demo
Demo

openai-translator

ToolWebFunctionDownload
openai-translatoropen in new window基于 ChatGPT API划词翻译浏览器插件和跨平台桌面端应用open in new window
Demo
Demo
View More Screenshots

Demo
Demo

OcrHelper

ToolWebFunctionDownload
OcrHelperopen in new window桌面图像实时转文字工具open in new window
View More Screenshots

Demo
Demo
Demo
Demo

Everything

ToolWebFunctionDownload
Everythingopen in new window基于名称快速定位文件和文件夹open in new window
EverythingToolbaropen in new window基于 EverythingWindows 任务栏的一体化管理工具open in new window
Demo
EverythingToolbar
View More Screenshots
Demo
Everything

More...

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/code/hackintosh.html b/zh/code/hackintosh.html index d7f3b062..9166d3e2 100644 --- a/zh/code/hackintosh.html +++ b/zh/code/hackintosh.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

Hackintosh

Ven2s...大约 3 分钟MacOSHackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

  • 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

  • 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

  • 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

  • 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

主机及配置

  • 在网上看了很多视频和教程,左挑右选,最终选择了惠普的 800-G4-DM 准系统主机,外加 I5 8500T 的8代 cpu。基本配置如下:
主机惠普 HP EliteDesk 800 G4 DM
主板惠普Q370
CPU酷睿 i5 8500T
显卡集成 Intel UHD Graphics 630
内存DDR4 2400MHz 三星16GB(2X8GB)
无线网卡博通 BCM94352Z 无线/蓝牙网卡
固态硬盘台电 256G SSD (加装2T SATA SSD)
OpenCore0.9.1
MacOSVentura 13.3.1 (22E261)

  • 完美主义的黑苹果完美度:
状态完美
CPU睿频Yes✔︎
VDA 解码器完全支持✔︎
IGPU硬件加速(QE/CI)Yes✔︎
Metal支持Yes✔︎
USB定制/完整识别Yes✔︎
网卡内建Yes✔︎
WIFI免驱Yes✔︎
蓝牙全功能YesHackintool无法识别,使用正常(又不是不能用.jpg)
AirDrop全功能No仅支持从iOS端投送到Mac
核显输出定制/全功能No截编时只完美一个“DP-HDMI”,其余两个输出口等有测试显示器再折腾
声音全功能Yes✔︎
序列号有效没有被用过的序列号Yes✔︎
iMessage全功能Yes✔︎解放手机 Get
随航功能Yes✔︎新功能真爽,iOS和 macOS无缝衔接
HiDPi开启No能开,显示器物理分辨率太低,再开启HiDPi的分辨率更低,就很难受(有了4K显示器再说吧)
睡眠开启Yes✔︎随睡随醒
  • 系统图鉴

View More Screenshots

1
1

1
图鉴
View More Screenshots

工具及配参

所需工具

名称用途下载
SSDTTime获取DSDT、SSDTDownloadopen in new window
ACPICA编译和反编译DSDTDownloadopen in new window
OpenCorePkgOpenCore引导加载程序Downloadopen in new window
ProperTree跨平台GUIPlist编辑器Downloadopen in new window
gibMacOSMacOS恢复镜像下载工具Downloadopen in new window
GenSMBIOS生成SMBIOSDownloadopen in new window

环境搭建

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容

Hackintosh

Ven2s...大约 3 分钟MacOSHackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

  • 从大学接触黑苹果开始,算起来已经有了8、9年的时光了,想起那会的“废寝忘食”,真是让人觉得虚度光阴、浪费精力。也许也是从那时候开始,养成了爱折腾的习惯。

  • 之前家里闲置的笔记本被我拿来做软路由,最开始只是在 pve 上跑 openWRT ,满足一些魔法需求,刚好最近又在搞内网穿透,这台单网口、传输速率低得吓人的设备实在无法满足现在愈来愈强的需求。

  • 故此,本意是在网上选购一台性价比较高的软路由,选着选着不知道怎就看到了一台十分合心意的小主机,实在按捺不住折腾的心情,就对老婆先斩后奏买了下来(幸得老婆宽厚,又加上我整天闹着要 NAS ,对比之下,这台小主机的价格还是让她允了下来)

  • 刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。

主机及配置

  • 在网上看了很多视频和教程,左挑右选,最终选择了惠普的 800-G4-DM 准系统主机,外加 I5 8500T 的8代 cpu。基本配置如下:
主机惠普 HP EliteDesk 800 G4 DM
主板惠普Q370
CPU酷睿 i5 8500T
显卡集成 Intel UHD Graphics 630
内存DDR4 2400MHz 三星16GB(2X8GB)
无线网卡博通 BCM94352Z 无线/蓝牙网卡
固态硬盘台电 256G SSD (加装2T SATA SSD)
OpenCore0.9.1
MacOSVentura 13.3.1 (22E261)

  • 完美主义的黑苹果完美度:
状态完美
CPU睿频Yes✔︎
VDA 解码器完全支持✔︎
IGPU硬件加速(QE/CI)Yes✔︎
Metal支持Yes✔︎
USB定制/完整识别Yes✔︎
网卡内建Yes✔︎
WIFI免驱Yes✔︎
蓝牙全功能YesHackintool无法识别,使用正常(又不是不能用.jpg)
AirDrop全功能No仅支持从iOS端投送到Mac
核显输出定制/全功能No截编时只完美一个“DP-HDMI”,其余两个输出口等有测试显示器再折腾
声音全功能Yes✔︎
序列号有效没有被用过的序列号Yes✔︎
iMessage全功能Yes✔︎解放手机 Get
随航功能Yes✔︎新功能真爽,iOS和 macOS无缝衔接
HiDPi开启No能开,显示器物理分辨率太低,再开启HiDPi的分辨率更低,就很难受(有了4K显示器再说吧)
睡眠开启Yes✔︎随睡随醒
  • 系统图鉴

View More Screenshots

1
1

1
图鉴
View More Screenshots

工具及配参

所需工具

名称用途下载
SSDTTime获取DSDT、SSDTDownloadopen in new window
ACPICA编译和反编译DSDTDownloadopen in new window
OpenCorePkgOpenCore引导加载程序Downloadopen in new window
ProperTree跨平台GUIPlist编辑器Downloadopen in new window
gibMacOSMacOS恢复镜像下载工具Downloadopen in new window
GenSMBIOS生成SMBIOSDownloadopen in new window

环境搭建

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/code/hello-world.html b/zh/code/hello-world.html index 9b8afc57..dc95fe82 100644 --- a/zh/code/hello-world.html +++ b/zh/code/hello-world.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

Hello World

Ven2s...大约 15 分钟ServerBlog

Build this site Hugo Blog 实战

+ 2022.02.11 add 侧边栏 鼠标指针 样式
+    
跳至主要內容

Hello World

Ven2s...大约 15 分钟ServerBlog

Build this site Hugo Blog 实战

+ 2022.02.11 add 侧边栏 鼠标指针 样式
 
+ 2022.01.26 Update autodeploy.yml 实现 Hugo Blog 源码github  gitee  gitlab三端同步 (可以没有 | 就很帅)
 
+ 2022.01.26 Done 😎
 
+ 2022.01.26 <争取一口气把剩下的内容填完> 并没有 | Markdown的排版比码字更费事 💦
@@ -133,6 +133,6 @@
             ${{ secrets.GITLAB_KEY }}  # 新建的GILAB_KEY
 
  • Gitee
gitee
gitee
  • Gitlab
gitlab
gitlab
  1. 新增 小康博客open in new window 鼠标指针、侧边栏样式。
  • extended_head.html 中添加以下
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/static-butterfly/dist/css/index.min.css">
 

写在最后

本篇文章的部署流程对网上教程进行了整合,再加上自己的理解而成。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/index.html b/zh/code/index.html index ae0db20c..ad8a9d67 100644 --- a/zh/code/index.html +++ b/zh/code/index.html @@ -30,10 +30,10 @@ } - + - - +
跳至主要內容

代码笔记

Ven2s...小于 1 分钟

这里是 Ven2s 存放的笔记。

目录

实用教程

Windows

Hackintosh

家庭网络

代码学习网站

优质网站

杂牌网站

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/code/kms.html b/zh/code/kms.html index 53191d83..e301007c 100644 --- a/zh/code/kms.html +++ b/zh/code/kms.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

KMS 服務端安裝部署教程

Ven2s...大约 5 分钟Home Network Layoutkmstools

KMS Server Installation and Deployment Tutorial

关于脚本

  • KMS 服务安装完成后会加入开机自启动。
  • 默认记录日志,其日志位于 /var/log/vlmcsd.log。

开始部署

  • 使用 root 用户登录,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
+    
跳至主要內容

KMS 服務端安裝部署教程

Ven2s...大约 5 分钟Home Network Layoutkmstools

KMS Server Installation and Deployment Tutorial

关于脚本

  • KMS 服务安装完成后会加入开机自启动。
  • 默认记录日志,其日志位于 /var/log/vlmcsd.log。

开始部署

  • 使用 root 用户登录,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 
  • 安装完成后,输入以下命令查看端口号 1688 的监听情况
netstat -nxtlp | grep 1688
 
  • 返回值类似于如下这样就表示 OK 了:
tcp    0    0 0.0.0.0:1688   0.0.0.0:*   LISTEN   3200/vlmcsd         
 tcp    0    0 :::1688        :::*        LISTEN   3200/vlmcsd 
@@ -50,6 +50,6 @@
 
  • 使用管理员权限运行 cmd 注册 KMS 服务器地址:
cscript ospp.vbs /sethst:Your IP or Domain
 
  • 使用管理员权限运行 cmd 手动激活 Office,命令如下:
cscript ospp.vbs /act
 

主要步骤

  1. 设置服务 slmgr -skms Your IP or Domain
  2. 安装密钥 slmgr -ipk 版本对应秘钥
  3. 激活系统 slmgr -ato

可用服务

  • Your IP or Domain 维护 CNAME 指向有效的服务
  • telnet Your IP or Domain 1688 测试服务是否可用
  • tcping Your IP or Domain 1688

密钥

https://learn.microsoft.com/zh-cn/windows-server/get-started/kms-client-activation-keysopen in new window

kms-client-activation-keys.mdopen in new window

Windows Server(LTSC 版本)

Windows Server 2022

操作系统版本KMS 客户端安装密钥
Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33
Windows Server 2022 Datacenter Azure EditionNTBV8-9K7Q8-V27C6-M2BTV-KHMXV
Windows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7H

Windows Server 2019

操作系统版本KMS 客户端安装密钥
Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG
Windows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464C
Windows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726

Windows Server 2016

操作系统版本KMS 客户端安装密钥
Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG
Windows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Windows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63B

Windows Server (半年频道版本)

Windows Server 版本 20H2、2004、1909、1903 和 1809

操作系统版本KMS 客户端安装密钥
Windows Server Datacenter6NMRW-2C8FM-D24W7-TQWMY-CWH2D
Windows Server StandardN2KJX-J94YW-TQVFB-DG9YT-724CC

Windows 11 和 Windows 10 (半年频道版本)

操作系统版本KMS 客户端安装密钥
Windows 10/11 专业版W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows 10/11 专业版 NMH37W-N47XK-V7XM9-C7227-GCQG9
Windows 10/11 专业工作站NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
Windows 10/11 专业工作站 N9FNHH-K3HBT-3W4TD-6383H-6XYWF
Windows 10/11 专业教育版6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
Windows 10/11 专业教育版 NYVWGF-BXNMC-HTQYQ-CPQ99-66QFC
Windows 10/11 教育版NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows 10/11 教育版 N2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows 10/11 企业版NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows 10/11 企业版 NDPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows 10/11 企业版 GYYVX9-NTFWV-6MDM3-9PT4T-4M68B
Windows 10/11 企业版 G N44RPN-FTY23-9VTTB-MP9BX-T84FV

Windows 10 (LTSC/LTSB 版本)

Windows 10 LTSC 2019

操作系统版本KMS 客户端安装密钥
Windows 10 企业版 LTSC 2019M7XTQ-FN8P6-TTKYV-9D4CC-J462D
Windows 10 企业版 N LTSC 201992NFX-8DJQP-P6BBQ-THF9C-7CG2H

Windows 10 LTSB 2016

操作系统版本KMS 客户端安装密钥
Windows 10 企业版 LTSB 2016DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
Windows 10 企业版 N LTSB 2016QFFDN-GRT3P-VKWWX-X7T3R-8B639

Windows 10 LTSB 2015

操作系统版本KMS 客户端安装密钥
Windows 10 企业版 2015 LTSBWNMTR-4C88C-JK8YV-HQ7T2-76DF9
Windows 10 企业版 2015 LTSB N2F77B-TNFGY-69QQF-B8YKP-D69TJ

早期版本的 Windows Server

Windows Server 版本 1803

操作系统版本KMS 客户端安装密钥
Windows Server Datacenter2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG
Windows Server StandardPTXN8-JFHJM-4WC78-MPCBR-9W4KR

Windows Server 版本 1709

操作系统版本KMS 客户端安装密钥
Windows Server Datacenter6Y6KB-N82V8-D8CQV-23MJW-BWTG6
Windows Server StandardDPCNP-XQFKJ-BJF7R-FRC8D-GF6G4

Windows Server 2012 R2

操作系统版本KMS 客户端安装密钥
Windows Server 2012 R2 Server StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJX
WindowsServer 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
WindowsServer 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWM

Windows Server 2012

操作系统版本KMS 客户端安装密钥
Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4
Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
Windows Server 2012 单语言版2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
Windows Server 2012 特定国家/地区版4K36P-JN4VD-GDC6V-KDT89-DYFKP
Windows Server 2012 Server StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4
Windows Server 2012 MultiPoint StandardHM7DN-YVMH3-46JC3-XYTG7-CYQJJ
Windows Server 2012 MultiPoint PremiumXNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
Windows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83P

Windows Server 2008 R2

操作系统版本KMS 客户端安装密钥
Windows Server 2008 R2 Web 版6TPJF-RBVHG-WBW2R-86QPH-6RTM4
Windows Server 2008 R2 HPC 版TT8MH-CG224-D3D7Q-498W2-9QCTX
WindowsServer 2008 R2 StandardYC6KT-GKW9T-YTKYR-T4X34-R7VHC
WindowsServer 2008 R2 企业版489J6-VHDMP-X63PK-3K798-CPX3Y
WindowsServer 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648
面向基于 Itanium 系统的 Windows Server 2008 R2GT63C-RJFQ3-4GMB6-BRFB9-CB83V

Windows Server 2008

操作系统版本KMS 客户端安装密钥
Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249D
Windows Server 2008 StandardTM24T-X9RMF-VWXK6-X8JC9-BFGM2
不带 Hyper-V 的 Windows Server 2008 StandardW7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
Windows Server 2008 企业版YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
不带 Hyper-V 的 Windows Server 2008 企业版39BXF-X8Q23-P2WWT-38T2F-G3FPG
Windows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HP
Windows Server 2008 Datacenter7M67G-PC374-GR742-YH8V4-TCBY3
不带 Hyper-V 的 Windows Server 2008 Datacenter22XQ2-VRXRG-P8D42-K34TD-G3QQC
面向基于 Itanium 系统的 Windows Server 20084DWFP-JF3DJ-B7DTH-78FJB-PDRHK
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/nginx-proxy-manager.html b/zh/code/nginx-proxy-manager.html index 1b67fda3..245c660f 100644 --- a/zh/code/nginx-proxy-manager.html +++ b/zh/code/nginx-proxy-manager.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

用Nginx Proxy Manager部署靜態網頁

Ven2s...大约 2 分钟linuxServerBlog

Deploying Static Web Pages with Nginx Proxy Manager

  • 搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

  • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
+    
跳至主要內容

用Nginx Proxy Manager部署靜態網頁

Ven2s...大约 2 分钟linuxServerBlog

Deploying Static Web Pages with Nginx Proxy Manager

  • 搭建的 web 服务因使用了 宝塔面板 抽风不能 CDN ,导致访问失败,一气之下重装了系统,重新搭建了所有 web,并使用 Nginx Proxy Manager 管理 web 服务。

  • 某些 web 服务需要在 Nginx Proxy Manager 的目录下构建,故在此记录下部署静态网页的流程备忘。

搭建步骤

一、安装 DockerDocker-compose

  • 安装 Docker
#更新、安装必备软件
 
 apt-get update && apt-get install -y wget nano
 
@@ -76,6 +76,6 @@
     error_page 404 /index.html;
 }
 

大功告成

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/code/port-forwarding.html b/zh/code/port-forwarding.html index ba673e1b..a9354eb9 100644 --- a/zh/code/port-forwarding.html +++ b/zh/code/port-forwarding.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

記錄“複雜”的家庭內網端口轉發

Ven2s...大约 3 分钟Home Network Layoutport forwardnetwork

Internal network port forwarding

前言

  • 在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 pingopen in new window 了下端口,果然,状态显示是关闭了的。

    1
    😏
  • 来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

  • 其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

  • 综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

    2
    😏
    2
    😏

端口映射

服务名称设备IP外部端口(主机)内部端口(主路由)外部端口(主路由)
内部端口(主机)内部端口(openWRT)外部端口(openWRT)
RDP192.168.123.1103389338933893389
Alist192.168.123.1105244524452445244
SSH192.168.123.11022212121212121
openWRT192.168.123.380225132251322513
  • 可以看到,由于我家里的网络布局,对端口进行了两次映射,先把最外面的主路由端口映射到 openWRT 上,再把第二层设备 openWRT 端口映射到主机上,如此就形成了完整的端口映射方案,这下再避开一些电信封禁的端口,是可以完美访问内网设备的。

域名访问

  • 按理说,我在上篇文章的 ddns-go 中添加了域名, web 服务是可以直接通过域名+端口的形式访问的,但是此时会跳转错误。通过分析,其实也不难得出答案,访问 web 服务时,因为域名要占用80端口,但是80端口又是被封禁了,所以是无法用此方法的。

  • 来到宝塔面板,添加站点,输入域名+已经映射完成的端口号,访问成功

    4
    5

  • 访问网页时,即使加上了 SSL 也是显示的“不安全”,从研究服务器这么久可以知道,访问内网实际上是一样的,加上 SSL 是可以成功的。这里一直没有搞懂原因,还是闲下来再测试和折腾吧。。。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容

記錄“複雜”的家庭內網端口轉發

Ven2s...大约 3 分钟Home Network Layoutport forwardnetwork

Internal network port forwarding

前言

  • 在进行好上篇文章的所有操作后,通过远程 ping 域名,是可以 ping 通家里的 IPv4 地址的,但不知为何,通过域名+端口进行远程访问,是失败的,这说明很有可能是端口没有映射成功,于是我又 pingopen in new window 了下端口,果然,状态显示是关闭了的。

    1
    😏
  • 来到主路由上的设置,可以看到这是我对 openWRT 这个设备进行了端口映射,以及设置为 DMZ 主机。网上很多人说只要设置了 DMZ 主机,是可以不用设置端口映射的,经我测试,我这里的设备是行不通的,所以我依然进行了端口映射到 openWRT

  • 其实在设置 openWRT 为端口映射的设备之前,我一直映射的是台式主机的内网地址。我的思路是,既然要在电脑上使用 stable-diffusion-webui ,那我肯定只需要映射外网端口到电脑主机的内网端口就行了,事实证明,由于我家里网络的复杂程度,这种思路是完全错误的,这也是导致了我频繁映射失败,而无法访问内网的直接原因,因为我跳过了电脑主机网关是 openWRT 这一情况。所以当我把映射设备改成 openWRT 后,一下就成功了。(当然, openWRT 上也必须要对端口进行映射,映射到电脑主机的内网地址)

  • 综上,因为我自己大脑宕机,花了超过24个小时的时间来研究内网穿透,实际上就是一个小小的思路上的错误而导致的,这也是为什么我给标题的“复杂”二字加了引号。

    2
    😏
    2
    😏

端口映射

服务名称设备IP外部端口(主机)内部端口(主路由)外部端口(主路由)
内部端口(主机)内部端口(openWRT)外部端口(openWRT)
RDP192.168.123.1103389338933893389
Alist192.168.123.1105244524452445244
SSH192.168.123.11022212121212121
openWRT192.168.123.380225132251322513
  • 可以看到,由于我家里的网络布局,对端口进行了两次映射,先把最外面的主路由端口映射到 openWRT 上,再把第二层设备 openWRT 端口映射到主机上,如此就形成了完整的端口映射方案,这下再避开一些电信封禁的端口,是可以完美访问内网设备的。

域名访问

  • 按理说,我在上篇文章的 ddns-go 中添加了域名, web 服务是可以直接通过域名+端口的形式访问的,但是此时会跳转错误。通过分析,其实也不难得出答案,访问 web 服务时,因为域名要占用80端口,但是80端口又是被封禁了,所以是无法用此方法的。

  • 来到宝塔面板,添加站点,输入域名+已经映射完成的端口号,访问成功

    4
    5

  • 访问网页时,即使加上了 SSL 也是显示的“不安全”,从研究服务器这么久可以知道,访问内网实际上是一样的,加上 SSL 是可以成功的。这里一直没有搞懂原因,还是闲下来再测试和折腾吧。。。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/code/server-building.html b/zh/code/server-building.html index 67cafc2d..08d344e2 100644 --- a/zh/code/server-building.html +++ b/zh/code/server-building.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

从零开始的服务器搭建纪实

Ven2s...大约 6 分钟linuxServer

Hello World

LuvSia

Server Building

准备工作

VPSDomain
dmitopen in new windowexample.comopen in new windownginxopen in new windowmysqlopen in new windowphpopen in new windowphpmyadminopen in new windowcloudflareopen in new window

更新软件源

apt update
+    
跳至主要內容

从零开始的服务器搭建纪实

Ven2s...大约 6 分钟linuxServer

Hello World

LuvSia

Server Building

准备工作

VPSDomain
dmitopen in new windowexample.comopen in new windownginxopen in new windowmysqlopen in new windowphpopen in new windowphpmyadminopen in new windowcloudflareopen in new window

更新软件源

apt update
 

搭建思路

预留一级域名搭建网站给各个应用添加前端网页根路径。

后因部分应用无法添加二级目录(网页根路径),所以这里只能使用添加二级域名的思路,区别各个应用。

再通过添加反向代理,实现分域名访问不同前端应用。

开始搭建

宝塔面板

WorkWeb
宝塔面板btopen in new window

1.使用一键配置工具。
一键脚本集成工具

wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
 

wget -O install.sh http://io.bt.sy/install/install-ubuntu_6.0.sh && bash install.sh
 

2.安装nginx-1.21mysql-5.5php-7.4phpmyadmin-5.0四件套

3.添加站点。

WorkDomain
alista.example.comopen in new window正常
宝塔面板b.example.comopen in new window正常
Transmissiont.example.comopen in new window正常
X-UIx.example.comopen in new window正常

4.设置,添加SSL,强制开启https

记录证书路径,证书可以直接在宝塔面板进行更新,或是设置定时任务自动更新;

宝塔面板申请的证书在如下目录:/www/server/panel/vhost/cert/你的域名/ 目录之下。

强制开启https

5.关闭面板安全入户,即删除二级目录

rm -f /www/server/panel/data/admin_path.pl
@@ -158,6 +158,6 @@
 

IPv6 网络

bash <(curl -fsSL git.io/warp.sh) 6
 

WARP 官方客户端 SOCKS5 代理

bash <(curl -fsSL git.io/warp.sh) s5
 

后记

感谢

@guodongxiarenopen in new window
@HostCLiopen in new window
@jinwypopen in new window
@Xhofeopen in new window
@vaxiluopen in new window
@enwaiaxopen in new window
@XIU2open in new window
@helloxzopen in new window
@moeratsopen in new window
@P3TERXopen in new window


评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- + diff --git a/zh/demo/disable.html b/zh/demo/disable.html index bf838d0d..b9344b58 100644 --- a/zh/demo/disable.html +++ b/zh/demo/disable.html @@ -30,10 +30,10 @@ } - +
跳至主要內容

布局与功能禁用


你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。

本页面就是一个示例,禁用了如下功能:

  • 导航栏
  • 侧边栏
  • 路径导航
  • 页面信息
  • 贡献者
  • 编辑此页链接
  • 更新时间
  • 上一篇/下一篇 链接
  • 评论
  • 页脚
  • 返回顶部按钮
- + diff --git a/zh/demo/encrypt.html b/zh/demo/encrypt.html index 4f4419c4..cf7cafb0 100644 --- a/zh/demo/encrypt.html +++ b/zh/demo/encrypt.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/zh/demo/index.html b/zh/demo/index.html index 6494b2e4..d3353a0d 100644 --- a/zh/demo/index.html +++ b/zh/demo/index.html @@ -30,10 +30,10 @@ } - + - - +
跳至主要內容

主要功能与配置演示

Ven2s...小于 1 分钟使用指南

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/demo/markdown.html b/zh/demo/markdown.html index e54f6b5a..69ecd1a2 100644 --- a/zh/demo/markdown.html +++ b/zh/demo/markdown.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

Markdown 展示

Ven2s...大约 3 分钟使用指南Markdown

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

Markdown 介绍

如果你是一个新手,还不会编写 Markdown,请先阅读 Markdown 介绍open in new windowMarkdown 演示open in new window

Markdown 配置

VuePress 通过 Frontmatter 为每个 Markdown 页面引入配置。

相关信息

Frontmatter 是 VuePress 中很重要的一个概念,如果你不了解它,你需要阅读 Frontmatter 介绍open in new window

Markdown 扩展

VuePress 会使用 markdown-itopen in new window 来解析 Markdown 内容,因此可以借助于 markdown-it 插件来实现 语法扩展open in new window

VuePress 扩展

为了丰富文档写作,VuePress 对 Markdown 语法进行了扩展。

关于这些扩展,请阅读 VuePress 中的 Markdown 扩展open in new window

主题扩展

通过 vuepress-plugin-md-enhanceopen in new window,主题扩展了更多 Markdown 语法,提供更加丰富的写作功能。

自定义容器

安全的在 Markdown 中使用 {{ variable }}。

自定义标题

信息容器,包含 代码链接

const a = 1;
+    
跳至主要內容

Markdown 展示

Ven2s...大约 3 分钟使用指南Markdown

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。

Markdown 介绍

如果你是一个新手,还不会编写 Markdown,请先阅读 Markdown 介绍open in new windowMarkdown 演示open in new window

Markdown 配置

VuePress 通过 Frontmatter 为每个 Markdown 页面引入配置。

相关信息

Frontmatter 是 VuePress 中很重要的一个概念,如果你不了解它,你需要阅读 Frontmatter 介绍open in new window

Markdown 扩展

VuePress 会使用 markdown-itopen in new window 来解析 Markdown 内容,因此可以借助于 markdown-it 插件来实现 语法扩展open in new window

VuePress 扩展

为了丰富文档写作,VuePress 对 Markdown 语法进行了扩展。

关于这些扩展,请阅读 VuePress 中的 Markdown 扩展open in new window

主题扩展

通过 vuepress-plugin-md-enhanceopen in new window,主题扩展了更多 Markdown 语法,提供更加丰富的写作功能。

自定义容器

安全的在 Markdown 中使用 {{ variable }}。

自定义标题

信息容器,包含 代码链接

const a = 1;
 

自定义标题

提示容器

自定义标题

警告容器

自定义标题

危险容器

自定义标题

详情容器

代码块

npm
npm i -D vuepress-theme-hope
@@ -124,7 +124,7 @@
   <input v-model="msg" />
 </template>
 

:::

幻灯片

@slidestart

幻灯片 1

一个有文字和 链接open in new window 的段落


幻灯片 2

  • 项目 1
  • 项目 2

幻灯片 3.1

const a = 1;
-

--

幻灯片 3.2

J(θ0,θ1)=i=0

@slideend


  1. 这是脚注内容 ↩︎

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +

--

幻灯片 3.2

J(θ0,θ1)=i=0

@slideend


  1. 这是脚注内容 ↩︎

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/demo/page.html b/zh/demo/page.html index 8cf8ef2f..2f4c1501 100644 --- a/zh/demo/page.html +++ b/zh/demo/page.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
页面配置

页面配置

Ms.Hope...大约 1 分钟使用指南页面配置使用指南

more 注释之前的内容被视为文章摘要。

页面信息

你可以在 Markdown 的 Frontmatter 中设置页面信息。

  • 作者设置为 Ms.Hope。
  • 写作日期为 2020 年 1 月 1 日
  • 分类为 “使用指南”
  • 标签为 “页面配置” 和 “使用指南”

页面内容

你可以自由在这里书写你的 Markdown。

提示

  • 你可以将图片和 Markdown 文件放置在一起,但是你需要使用相对链接./ 进行引用。

  • 对于 .vuepress/public 文件夹的图片,请使用绝对链接 / 进行引用。

主题包含了一个自定义徽章可以使用:

文字结尾应该有深蓝色的 徽章文字 徽章。 徽章文字

页面结构

此页面应当包含:

你可以通过主题选项和页面 Frontmatter 自定义它们。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容
页面配置

页面配置

Ms.Hope...大约 1 分钟使用指南页面配置使用指南

more 注释之前的内容被视为文章摘要。

页面信息

你可以在 Markdown 的 Frontmatter 中设置页面信息。

  • 作者设置为 Ms.Hope。
  • 写作日期为 2020 年 1 月 1 日
  • 分类为 “使用指南”
  • 标签为 “页面配置” 和 “使用指南”

页面内容

你可以自由在这里书写你的 Markdown。

提示

  • 你可以将图片和 Markdown 文件放置在一起,但是你需要使用相对链接./ 进行引用。

  • 对于 .vuepress/public 文件夹的图片,请使用绝对链接 / 进行引用。

主题包含了一个自定义徽章可以使用:

文字结尾应该有深蓝色的 徽章文字 徽章。 徽章文字

页面结构

此页面应当包含:

你可以通过主题选项和页面 Frontmatter 自定义它们。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/index.html b/zh/index.html index 6391fdcb..7b452488 100644 --- a/zh/index.html +++ b/zh/index.html @@ -30,7 +30,7 @@ } - +
跳至主要內容
风至万始苏

风至万始苏

思得一隅天下济 道慰平生万事谋

对话AI
先进的ChatGPT语言模型机器人
订阅转换
安全隐密的订阅转换服务
Hackintosh
未完工的黑苹果安装教程
Hello World
千里之行始于足下
Sia
爱人
代码笔记

这里是 Ven2s 存放的笔记。

@@ -96,6 +96,6 @@

开始部署

wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
 

Ven2s...大约 5 分钟Home Network Layoutkmstools
2
3
- + diff --git a/zh/intro.html b/zh/intro.html index 63b38fa5..158a5e73 100644 --- a/zh/intro.html +++ b/zh/intro.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
介绍页

介绍页

Ven2s...小于 1 分钟

介绍页

将你的个人介绍和档案放置在此处。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容
介绍页

介绍页

Ven2s...小于 1 分钟

介绍页

将你的个人介绍和档案放置在此处。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/note/1.html b/zh/note/1.html index 7cdaab8d..ede404fb 100644 --- a/zh/note/1.html +++ b/zh/note/1.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容

苹果 1

Ven2s...小于 1 分钟苹果

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
- +
跳至主要內容

苹果 1

Ven2s...小于 1 分钟苹果

苹果 1

标题 2

这里是内容。

标题 3

这里是内容。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/note/1993.html b/zh/note/1993.html index 6f75def9..9e4c0a9c 100644 --- a/zh/note/1993.html +++ b/zh/note/1993.html @@ -30,10 +30,10 @@ } - + - - +
跳至主要內容

一九九三

Ven2s...小于 1 分钟My Birthday

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
+ diff --git a/zh/note/index.html b/zh/note/index.html index b2954169..00ec96e5 100644 --- a/zh/note/index.html +++ b/zh/note/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/zh/slides.html b/zh/slides.html index b5265232..18ccce1a 100644 --- a/zh/slides.html +++ b/zh/slides.html @@ -30,10 +30,10 @@ } - +
- + diff --git a/zh/star/index.html b/zh/star/index.html index f3995650..d7b68afa 100644 --- a/zh/star/index.html +++ b/zh/star/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
代码笔记

这里是 Ven2s 存放的笔记。

+
跳至主要內容
搭建属于自己的订阅转换链接

Sub-Web-Modify前端搭建

本项目基于CareyWang/sub-web,重制CSS样式,解决大部分布局细节问题,增加“暗黑模式”,默认自动切换亮/暗模式(点击“太阳/月亮”图标可手动切换),增加“高级功能”点击显示/隐藏,添加短链接选择/自定义功能,增加近百条远程配置,新增sub-web聚合API,增加上传自定义远程配置/JS进阶排序节点/JS进阶筛选节点等功能!


Ven2s...大约 5 分钟linuxServer
页面配置

more 注释之前的内容被视为文章摘要。


Ms.Hope...大约 1 分钟使用指南页面配置使用指南
- + diff --git a/zh/tag/blog/index.html b/zh/tag/blog/index.html index 06c59c6d..98351575 100644 --- a/zh/tag/blog/index.html +++ b/zh/tag/blog/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
用Nginx Proxy Manager部署靜態網頁
+ - + diff --git a/zh/tag/chatgpt/index.html b/zh/tag/chatgpt/index.html index 174a0459..b98f9b47 100644 --- a/zh/tag/chatgpt/index.html +++ b/zh/tag/chatgpt/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
ChatGPT-Porxy
+
跳至主要內容
ChatGPT-Porxy

Build ChatGPT Reverse Proxy

    @@ -49,6 +49,6 @@

    ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。


Ven2s...大约 2 分钟linuxChatGPT
- + diff --git a/zh/tag/ddns/index.html b/zh/tag/ddns/index.html index 926a9a45..cffb62d5 100644 --- a/zh/tag/ddns/index.html +++ b/zh/tag/ddns/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
記錄使用ddns實現內網穿透遠程訪問內網設備
+ - + diff --git a/zh/tag/frontend/index.html b/zh/tag/frontend/index.html index 49b54041..19486cc5 100644 --- a/zh/tag/frontend/index.html +++ b/zh/tag/frontend/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
利用GitHub Actions自动部署前端到服务器
+
跳至主要內容
利用GitHub Actions自动部署前端到服务器

Automatically deploying the Front End to the server using GitHub Actions

GitHub Actions介绍及原理

@@ -51,6 +51,6 @@

GitHub Actions介绍及原理

本教程是在《用Nginx Proxy Manager部署静态网页》基础上延伸出的思路,省去了安装node环境和各种依赖的步骤,直接在 GitHub Action 中部署前端。每次在本地对后端文件进行修正后,直接将前端发布到服务器。起到一劳永逸的效果。


Ven2s...大约 6 分钟linuxServerFrontEnd
- + diff --git a/zh/tag/hackintosh/index.html b/zh/tag/hackintosh/index.html index 30e4a5e3..102a341f 100644 --- a/zh/tag/hackintosh/index.html +++ b/zh/tag/hackintosh/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Hackintosh
+
跳至主要內容
Hackintosh

Hackintosh Reboot Plan

闲话 回忆与现在

@@ -51,6 +51,6 @@

闲话 回忆与现在

刚好因工作原因经常奔波两地,加上最近频繁地码字建站,用这台小主机组一台黑苹果,重温下精美的 MacOS ,既能在家里和单位用,也能提高码字的效率,办公、开发两不误。


Ven2s...大约 3 分钟MacOSHackintosh
- + diff --git a/zh/tag/index.html b/zh/tag/index.html index 713d4efe..a45dc02e 100644 --- a/zh/tag/index.html +++ b/zh/tag/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/zh/tag/kms/index.html b/zh/tag/kms/index.html index f4160c0f..a83e72de 100644 --- a/zh/tag/kms/index.html +++ b/zh/tag/kms/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
KMS 服務端安裝部署教程
+ - + diff --git a/zh/tag/markdown/index.html b/zh/tag/markdown/index.html index c6e8ec3f..4797d822 100644 --- a/zh/tag/markdown/index.html +++ b/zh/tag/markdown/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Markdown 展示

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

+
跳至主要內容
Markdown 展示

VuePress 主要从 Markdown 文件生成页面。因此,你可以使用它轻松生成文档或博客站点。

你应该创建和编写 Markdown 文件,以便 VuePress 可以根据文件结构将它们转换为不同的页面。


Ven2s...大约 3 分钟使用指南Markdown
超酷的Emoji表情!

Best Markdown Emoji !

@@ -43,6 +43,6 @@

原文

将对应emoji表情的符号码复制后输入你的markdown文本即可显示emoji表情。
如"😊",显示为😊


Ven2s...大约 6 分钟MarkdownBlog
- + diff --git a/zh/tag/my-birthday/index.html b/zh/tag/my-birthday/index.html index 6a4aa0f5..5fc53ef4 100644 --- a/zh/tag/my-birthday/index.html +++ b/zh/tag/my-birthday/index.html @@ -30,10 +30,10 @@ } - + - - + + diff --git a/zh/tag/network/index.html b/zh/tag/network/index.html index 7d05bde5..6155915e 100644 --- a/zh/tag/network/index.html +++ b/zh/tag/network/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
記錄使用ddns實現內網穿透遠程訪問內網設備
+ - + diff --git a/zh/tag/port-forward/index.html b/zh/tag/port-forward/index.html index 08b7a230..f618f580 100644 --- a/zh/tag/port-forward/index.html +++ b/zh/tag/port-forward/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
記錄“複雜”的家庭內網端口轉發
+ - + diff --git a/zh/tag/server/index.html b/zh/tag/server/index.html index 43642065..704141ee 100644 --- a/zh/tag/server/index.html +++ b/zh/tag/server/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
利用GitHub Actions自动部署前端到服务器
+ - + diff --git a/zh/tag/tools/index.html b/zh/tag/tools/index.html index c0c73584..c34a5dc9 100644 --- a/zh/tag/tools/index.html +++ b/zh/tag/tools/index.html @@ -30,10 +30,10 @@ } - + -
跳至主要內容
Github上的生产力工具
+ - + diff --git "a/zh/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" "b/zh/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" index be645887..5a29c61c 100644 --- "a/zh/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" +++ "b/zh/tag/\344\275\277\347\224\250\346\214\207\345\215\227/index.html" @@ -30,11 +30,11 @@ } - + -
跳至主要內容
页面配置

more 注释之前的内容被视为文章摘要。

+ - + diff --git "a/zh/tag/\345\234\206/index.html" "b/zh/tag/\345\234\206/index.html" index aa13bae6..0bfdedab 100644 --- "a/zh/tag/\345\234\206/index.html" +++ "b/zh/tag/\345\234\206/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git "a/zh/tag/\345\244\247/index.html" "b/zh/tag/\345\244\247/index.html" index 50ab125f..786225e2 100644 --- "a/zh/tag/\345\244\247/index.html" +++ "b/zh/tag/\345\244\247/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git "a/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" "b/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" index 21f7df6d..579060ff 100644 --- "a/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" +++ "b/zh/tag/\346\226\207\347\253\240\345\212\240\345\257\206/index.html" @@ -30,10 +30,10 @@ } - + - - + + diff --git "a/zh/tag/\346\230\223/index.html" "b/zh/tag/\346\230\223/index.html" index c6d8ef14..aba0d798 100644 --- "a/zh/tag/\346\230\223/index.html" +++ "b/zh/tag/\346\230\223/index.html" @@ -30,10 +30,10 @@ } - + - - + + diff --git "a/zh/tag/\347\246\201\347\224\250/index.html" "b/zh/tag/\347\246\201\347\224\250/index.html" index 270e031c..3b991783 100644 --- "a/zh/tag/\347\246\201\347\224\250/index.html" +++ "b/zh/tag/\347\246\201\347\224\250/index.html" @@ -30,11 +30,11 @@ } - + -
跳至主要內容
布局与功能禁用

你可以通过设置页面的 Frontmatter,在页面禁用功能与布局。

+ - + diff --git "a/zh/tag/\347\272\242/index.html" "b/zh/tag/\347\272\242/index.html" index ba0bc7a9..8e1a30fa 100644 --- "a/zh/tag/\347\272\242/index.html" +++ "b/zh/tag/\347\272\242/index.html" @@ -30,15 +30,15 @@ } - + -
跳至主要內容
苹果 1

苹果 1

+ - + diff --git "a/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" "b/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" index fac9a5e5..13fcdc13 100644 --- "a/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" +++ "b/zh/tag/\351\241\265\351\235\242\351\205\215\347\275\256/index.html" @@ -30,11 +30,11 @@ } - + -
跳至主要內容
页面配置

more 注释之前的内容被视为文章摘要。

+ - + diff --git a/zh/timeline/index.html b/zh/timeline/index.html index acae8553..82d2fc71 100644 --- a/zh/timeline/index.html +++ b/zh/timeline/index.html @@ -30,10 +30,10 @@ } - + - - + +