w-web-perm 1.1.13 → 1.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -7
- package/dist/css/{app.f09c7433.css → app.f24c5e50.css} +1 -1
- package/dist/index.tmp +1 -1
- package/dist/js/app-legacy.307bef4f.js +1 -0
- package/dist/js/app.307bef4f.js +1 -0
- package/dist/js/{chunk-vendors.ece5a361.js → chunk-vendors-legacy.6cc4d11e.js} +1 -1
- package/dist/js/{chunk-vendors-legacy.ece5a361.js → chunk-vendors.6cc4d11e.js} +1 -1
- package/dist/w-web-perm.umd.js +2 -2
- package/dist/w-web-perm.umd.js.map +1 -1
- package/docs/WWebPerm.html +15 -7
- package/docs/global.html +11733 -5078
- package/docs/index.html +2 -2
- package/docs/server_WWebPerm.mjs.html +154 -345
- package/docs/server_adminCheck.mjs.html +92 -0
- package/docs/server_cascadeWrite.mjs.html +5 -26
- package/docs/server_dataChannel.mjs.html +4 -4
- package/docs/server_keyCheck.mjs.html +150 -23
- package/docs/server_lockSave.mjs.html +2 -2
- package/docs/server_maskLog.mjs.html +2 -2
- package/docs/server_procCore.mjs.html +261 -65
- package/docs/server_staLogs_resolveShellWorker.mjs.html +2 -2
- package/docs/server_syncCore.mjs.html +533 -0
- package/docs/server_syncKeep.mjs.html +27 -20
- package/docs/server_tools_authRefsAudit.mjs.html +30 -10
- package/docs/server_tools_authRefsClean.mjs.html +2 -2
- package/docs/server_tools_fromTools.mjs.html +2 -2
- package/docs/server_tools_isMain.mjs.html +2 -2
- package/docs/server_tools_nameDupReport.mjs.html +40 -7
- package/docs/server_validateRows.mjs.html +2 -2
- package/docs/server_wrapInjected.mjs.html +2 -2
- package/docs/src_fetchJson.mjs.html +2 -2
- package/docs/src_getPermUserInfor.mjs.html +175 -0
- package/docs/src_js_applySaved.mjs.html +128 -0
- package/docs/src_js_cellEditing.mjs.html +163 -0
- package/docs/src_js_cvKpToArr.mjs.html +2 -2
- package/docs/src_js_cvKpToObj.mjs.html +2 -2
- package/docs/src_js_draftSync.mjs.html +83 -7
- package/docs/src_js_eachOwn.mjs.html +2 -2
- package/docs/src_js_editorRefRows.mjs.html +2 -2
- package/docs/src_js_externalRows.mjs.html +34 -10
- package/docs/src_js_externalUi.mjs.html +4 -8
- package/docs/src_js_findRefRows.mjs.html +2 -2
- package/docs/src_js_findTouchedDup.mjs.html +2 -2
- package/docs/src_js_fmtLossyMsg.mjs.html +2 -2
- package/docs/src_js_fromAudit.mjs.html +2 -2
- package/docs/src_js_getAddImpact.mjs.html +2 -2
- package/docs/src_js_getAuthWarn.mjs.html +2 -2
- package/docs/src_js_getCascadePreview.mjs.html +2 -2
- package/docs/src_js_getDelRefCount.mjs.html +2 -2
- package/docs/src_js_getEffMode.mjs.html +2 -2
- package/docs/src_js_getKpLossy.mjs.html +2 -2
- package/docs/src_js_getNameErrs.mjs.html +2 -2
- package/docs/src_js_getOwn.mjs.html +2 -2
- package/docs/src_js_getPropKey.mjs.html +2 -2
- package/docs/src_js_getRuleEnable.mjs.html +2 -2
- package/docs/src_js_isAuthMode.mjs.html +2 -2
- package/docs/src_js_joinNames.mjs.html +2 -2
- package/docs/src_js_legendFit.mjs.html +2 -2
- package/docs/src_js_pairRowsToSnapshot.mjs.html +2 -2
- package/docs/src_js_refAudit.mjs.html +2 -2
- package/docs/src_js_refCascade.mjs.html +2 -2
- package/docs/src_js_refIdentity.mjs.html +500 -0
- package/docs/src_js_relDialogSend.mjs.html +2 -2
- package/docs/src_js_rowDigest.mjs.html +75 -145
- package/docs/src_plugins_dataReloadGuard.mjs.html +2 -2
- package/docs/src_plugins_reuseDeletedIds.mjs.html +2 -2
- package/docs/src_plugins_submitGuard.mjs.html +2 -2
- package/g_provideGrups.mjs +1 -1
- package/g_providePemis.mjs +1 -1
- package/g_provideTargets.mjs +1 -1
- package/g_provideUsers.mjs +1 -1
- package/package.json +2 -2
- package/server/WWebPerm.mjs +152 -343
- package/server/adminCheck.mjs +20 -0
- package/server/cascadeWrite.mjs +3 -24
- package/server/dataChannel.mjs +2 -2
- package/server/keyCheck.mjs +148 -21
- package/server/procCore.mjs +259 -63
- package/server/procLang.mjs +78 -4
- package/server/provideTabs.mjs +6 -4
- package/server/syncCore.mjs +461 -0
- package/server/syncKeep.mjs +25 -18
- package/server/tools/authRefsAudit.mjs +28 -8
- package/server/tools/nameDupReport.mjs +38 -5
- package/src/App.vue +6 -1
- package/src/components/LayoutContentGrups.vue +57 -8
- package/src/components/LayoutContentPemis.vue +57 -8
- package/src/components/LayoutContentTargets.vue +38 -7
- package/src/components/LayoutContentUsers.vue +57 -8
- package/src/components/LayoutState.vue +12 -0
- package/src/components/VeGrupBlngUsers.vue +128 -20
- package/src/components/VePemiBlngGrups.vue +128 -20
- package/src/getPermUserInfor.mjs +10 -0
- package/src/js/applySaved.mjs +56 -0
- package/src/js/cellEditing.mjs +91 -0
- package/src/js/draftSync.mjs +81 -5
- package/src/js/externalRows.mjs +32 -8
- package/src/js/externalUi.mjs +2 -6
- package/src/js/refIdentity.mjs +428 -0
- package/src/js/rowDigest.mjs +73 -143
- package/src/plugins/mUI.mjs +5 -0
- package/src/schema/contracts/grups.mjs +8 -0
- package/src/schema/contracts/index.mjs +17 -0
- package/src/schema/contracts/pemis.mjs +8 -0
- package/src/schema/contracts/targets.mjs +8 -0
- package/src/schema/contracts/users.mjs +13 -0
- package/src/schema/tables/grups.mjs +4 -0
- package/src/schema/tables/pemis.mjs +4 -0
- package/src/schema/tables/targets.mjs +4 -0
- package/src/schema/tables/users.mjs +4 -0
- package/src/store/mutations.mjs +1 -1
- package/srv.mjs +43 -0
- package/dist/js/app-legacy.8af87052.js +0 -1
- package/dist/js/app.8af87052.js +0 -1
package/dist/w-web-perm.umd.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* w-web-perm v1.1.
|
|
2
|
+
* w-web-perm v1.1.15
|
|
3
3
|
* (c) 2018-2021 yuda-lyu(semisphere)
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
6
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("path"),require("fs"),require("@hapi/hapi"),require("@hapi/inert"),require("stream"),require("http"),require("worker_threads"),require("util"),require("url"),require("pino"),require("module"),require("readline")):"function"==typeof define&&define.amd?define(["path","fs","@hapi/hapi","@hapi/inert","stream","http","worker_threads","util","url","pino","module","readline"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-web-perm"]=t(e.path,e.fs,e["@hapi/hapi"],e["@hapi/inert"],e.stream,e.http,e.require$$0$1,e.util$2,e.url,e.pino,e.module$1,e.readline)}(this,function(e,t,r,n,s,i,o,u,l,a,c,d){"use strict";var w="undefined"!=typeof document?document.currentScript:null,D=Array.isArray,y="object"==typeof global&&global&&global.Object===Object&&global,M="object"==typeof self&&self&&self.Object===Object&&self,g=y||M||Function("return this")(),m=g.Symbol,I=Object.prototype,f=I.hasOwnProperty,p=I.toString,C=m?m.toStringTag:void 0;var h=Object.prototype.toString;var L=m?m.toStringTag:void 0;function b(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":L&&L in Object(e)?function(e){var t=f.call(e,C),r=e[C];try{e[C]=void 0;var n=!0}catch(e){}var s=p.call(e);return n&&(t?e[C]=r:delete e[C]),s}(e):function(e){return h.call(e)}(e)}function N(e){return null!=e&&"object"==typeof e}function A(e){return"symbol"==typeof e||N(e)&&"[object Symbol]"==b(e)}var x=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,E=/^\w*$/;function T(e,t){if(D(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!A(e))||(E.test(e)||!x.test(e)||null!=t&&e in Object(t))}function S(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Z(e){if(!S(e))return!1;var t=b(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}var v,Y=g["__core-js_shared__"],X=(v=/[^.]+$/.exec(Y&&Y.keys&&Y.keys.IE_PROTO||""))?"Symbol(src)_1."+v:"";var j=Function.prototype.toString;function z(e){if(null!=e){try{return j.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var G=/^\[object .+?Constructor\]$/,W=Function.prototype,K=Object.prototype,k=W.toString,F=K.hasOwnProperty,V=RegExp("^"+k.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function H(e){return!(!S(e)||(t=e,X&&X in t))&&(Z(e)?V:G).test(z(e));var t}function U(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return H(r)?r:void 0}var B=U(Object,"create");var R=Object.prototype.hasOwnProperty;var Q=Object.prototype.hasOwnProperty;function O(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function P(e,t){return e===t||e!=e&&t!=t}function J(e,t){for(var r=e.length;r--;)if(P(e[r][0],t))return r;return-1}O.prototype.clear=function(){this.__data__=B?B(null):{},this.size=0},O.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},O.prototype.get=function(e){var t=this.__data__;if(B){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return R.call(t,e)?t[e]:void 0},O.prototype.has=function(e){var t=this.__data__;return B?void 0!==t[e]:Q.call(t,e)},O.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=B&&void 0===t?"__lodash_hash_undefined__":t,this};var $=Array.prototype.splice;function _(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}_.prototype.clear=function(){this.__data__=[],this.size=0},_.prototype.delete=function(e){var t=this.__data__,r=J(t,e);return!(r<0)&&(r==t.length-1?t.pop():$.call(t,r,1),--this.size,!0)},_.prototype.get=function(e){var t=this.__data__,r=J(t,e);return r<0?void 0:t[r][1]},_.prototype.has=function(e){return J(this.__data__,e)>-1},_.prototype.set=function(e,t){var r=this.__data__,n=J(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var q=U(g,"Map");function ee(e,t){var r,n,s=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?s["string"==typeof t?"string":"hash"]:s.map}function te(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}te.prototype.clear=function(){this.size=0,this.__data__={hash:new O,map:new(q||_),string:new O}},te.prototype.delete=function(e){var t=ee(this,e).delete(e);return this.size-=t?1:0,t},te.prototype.get=function(e){return ee(this,e).get(e)},te.prototype.has=function(e){return ee(this,e).has(e)},te.prototype.set=function(e,t){var r=ee(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function re(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,s=t?t.apply(this,n):n[0],i=r.cache;if(i.has(s))return i.get(s);var o=e.apply(this,n);return r.cache=i.set(s,o)||i,o};return r.cache=new(re.Cache||te),r}re.Cache=te;var ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,se=/\\(\\)?/g,ie=function(e){var t=re(e,function(e){return 500===r.size&&r.clear(),e}),r=t.cache;return t}(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(ne,function(e,r,n,s){t.push(n?s.replace(se,"$1"):r||e)}),t}),oe=ie;function ue(e,t){for(var r=-1,n=null==e?0:e.length,s=Array(n);++r<n;)s[r]=t(e[r],r,e);return s}var le=m?m.prototype:void 0,ae=le?le.toString:void 0;function ce(e){if("string"==typeof e)return e;if(D(e))return ue(e,ce)+"";if(A(e))return ae?ae.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function de(e){return null==e?"":ce(e)}function we(e,t){return D(e)?e:T(e,t)?[e]:oe(de(e))}function De(e){if("string"==typeof e||A(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function ye(e,t){for(var r=0,n=(t=we(t,e)).length;null!=e&&r<n;)e=e[De(t[r++])];return r&&r==n?e:void 0}function Me(e,t,r){var n=null==e?void 0:ye(e,t);return void 0===n?r:n}function ge(e){var t=this.__data__=new _(e);this.size=t.size}ge.prototype.clear=function(){this.__data__=new _,this.size=0},ge.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},ge.prototype.get=function(e){return this.__data__.get(e)},ge.prototype.has=function(e){return this.__data__.has(e)},ge.prototype.set=function(e,t){var r=this.__data__;if(r instanceof _){var n=r.__data__;if(!q||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new te(n)}return r.set(e,t),this.size=r.size,this};function me(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new te;++t<r;)this.add(e[t])}function Ie(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function fe(e,t){return e.has(t)}me.prototype.add=me.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},me.prototype.has=function(e){return this.__data__.has(e)};function pe(e,t,r,n,s,i){var o=1&r,u=e.length,l=t.length;if(u!=l&&!(o&&l>u))return!1;var a=i.get(e),c=i.get(t);if(a&&c)return a==t&&c==e;var d=-1,w=!0,D=2&r?new me:void 0;for(i.set(e,t),i.set(t,e);++d<u;){var y=e[d],M=t[d];if(n)var g=o?n(M,y,d,t,e,i):n(y,M,d,e,t,i);if(void 0!==g){if(g)continue;w=!1;break}if(D){if(!Ie(t,function(e,t){if(!fe(D,t)&&(y===e||s(y,e,r,n,i)))return D.push(t)})){w=!1;break}}else if(y!==M&&!s(y,M,r,n,i)){w=!1;break}}return i.delete(e),i.delete(t),w}var Ce=g.Uint8Array;function he(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function Le(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var be=m?m.prototype:void 0,Ne=be?be.valueOf:void 0;function Ae(e,t){for(var r=-1,n=t.length,s=e.length;++r<n;)e[s+r]=t[r];return e}function xe(e,t,r){var n=t(e);return D(e)?n:Ae(n,r(e))}function Ee(e,t){for(var r=-1,n=null==e?0:e.length,s=0,i=[];++r<n;){var o=e[r];t(o,r,e)&&(i[s++]=o)}return i}function Te(){return[]}var Se=Object.prototype.propertyIsEnumerable,Ze=Object.getOwnPropertySymbols,ve=Ze?function(e){return null==e?[]:(e=Object(e),Ee(Ze(e),function(t){return Se.call(e,t)}))}:Te;function Ye(e){return N(e)&&"[object Arguments]"==b(e)}var Xe=Object.prototype,je=Xe.hasOwnProperty,ze=Xe.propertyIsEnumerable,Ge=Ye(function(){return arguments}())?Ye:function(e){return N(e)&&je.call(e,"callee")&&!ze.call(e,"callee")},We=Ge;var Ke="object"==typeof exports&&exports&&!exports.nodeType&&exports,ke=Ke&&"object"==typeof module&&module&&!module.nodeType&&module,Fe=ke&&ke.exports===Ke?g.Buffer:void 0,Ve=(Fe?Fe.isBuffer:void 0)||function(){return!1},He=/^(?:0|[1-9]\d*)$/;function Ue(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&He.test(e))&&e>-1&&e%1==0&&e<t}function Be(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var Re={};function Qe(e){return function(t){return e(t)}}Re["[object Float32Array]"]=Re["[object Float64Array]"]=Re["[object Int8Array]"]=Re["[object Int16Array]"]=Re["[object Int32Array]"]=Re["[object Uint8Array]"]=Re["[object Uint8ClampedArray]"]=Re["[object Uint16Array]"]=Re["[object Uint32Array]"]=!0,Re["[object Arguments]"]=Re["[object Array]"]=Re["[object ArrayBuffer]"]=Re["[object Boolean]"]=Re["[object DataView]"]=Re["[object Date]"]=Re["[object Error]"]=Re["[object Function]"]=Re["[object Map]"]=Re["[object Number]"]=Re["[object Object]"]=Re["[object RegExp]"]=Re["[object Set]"]=Re["[object String]"]=Re["[object WeakMap]"]=!1;var Oe="object"==typeof exports&&exports&&!exports.nodeType&&exports,Pe=Oe&&"object"==typeof module&&module&&!module.nodeType&&module,Je=Pe&&Pe.exports===Oe&&y.process,$e=function(){try{var e=Pe&&Pe.require&&Pe.require("util").types;return e||Je&&Je.binding&&Je.binding("util")}catch(e){}}(),_e=$e&&$e.isTypedArray,qe=_e?Qe(_e):function(e){return N(e)&&Be(e.length)&&!!Re[b(e)]},et=Object.prototype.hasOwnProperty;function tt(e,t){var r=D(e),n=!r&&We(e),s=!r&&!n&&Ve(e),i=!r&&!n&&!s&&qe(e),o=r||n||s||i,u=o?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],l=u.length;for(var a in e)!t&&!et.call(e,a)||o&&("length"==a||s&&("offset"==a||"parent"==a)||i&&("buffer"==a||"byteLength"==a||"byteOffset"==a)||Ue(a,l))||u.push(a);return u}var rt=Object.prototype;function nt(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||rt)}function st(e,t){return function(r){return e(t(r))}}var it=st(Object.keys,Object),ot=Object.prototype.hasOwnProperty;function ut(e){if(!nt(e))return it(e);var t=[];for(var r in Object(e))ot.call(e,r)&&"constructor"!=r&&t.push(r);return t}function lt(e){return null!=e&&Be(e.length)&&!Z(e)}function at(e){return lt(e)?tt(e):ut(e)}function ct(e){return xe(e,at,ve)}var dt=Object.prototype.hasOwnProperty;var wt=U(g,"DataView"),Dt=U(g,"Promise"),yt=U(g,"Set"),Mt=U(g,"WeakMap"),gt="[object Map]",mt="[object Promise]",It="[object Set]",ft="[object WeakMap]",pt="[object DataView]",Ct=z(wt),ht=z(q),Lt=z(Dt),bt=z(yt),Nt=z(Mt),At=b;(wt&&At(new wt(new ArrayBuffer(1)))!=pt||q&&At(new q)!=gt||Dt&&At(Dt.resolve())!=mt||yt&&At(new yt)!=It||Mt&&At(new Mt)!=ft)&&(At=function(e){var t=b(e),r="[object Object]"==t?e.constructor:void 0,n=r?z(r):"";if(n)switch(n){case Ct:return pt;case ht:return gt;case Lt:return mt;case bt:return It;case Nt:return ft}return t});var xt=At,Et="[object Arguments]",Tt="[object Array]",St="[object Object]",Zt=Object.prototype.hasOwnProperty;function vt(e,t,r,n,s,i){var o=D(e),u=D(t),l=o?Tt:xt(e),a=u?Tt:xt(t),c=(l=l==Et?St:l)==St,d=(a=a==Et?St:a)==St,w=l==a;if(w&&Ve(e)){if(!Ve(t))return!1;o=!0,c=!1}if(w&&!c)return i||(i=new ge),o||qe(e)?pe(e,t,r,n,s,i):function(e,t,r,n,s,i,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!i(new Ce(e),new Ce(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return P(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var u=he;case"[object Set]":var l=1&n;if(u||(u=Le),e.size!=t.size&&!l)return!1;var a=o.get(e);if(a)return a==t;n|=2,o.set(e,t);var c=pe(u(e),u(t),n,s,i,o);return o.delete(e),c;case"[object Symbol]":if(Ne)return Ne.call(e)==Ne.call(t)}return!1}(e,t,l,r,n,s,i);if(!(1&r)){var y=c&&Zt.call(e,"__wrapped__"),M=d&&Zt.call(t,"__wrapped__");if(y||M){var g=y?e.value():e,m=M?t.value():t;return i||(i=new ge),s(g,m,r,n,i)}}return!!w&&(i||(i=new ge),function(e,t,r,n,s,i){var o=1&r,u=ct(e),l=u.length;if(l!=ct(t).length&&!o)return!1;for(var a=l;a--;){var c=u[a];if(!(o?c in t:dt.call(t,c)))return!1}var d=i.get(e),w=i.get(t);if(d&&w)return d==t&&w==e;var D=!0;i.set(e,t),i.set(t,e);for(var y=o;++a<l;){var M=e[c=u[a]],g=t[c];if(n)var m=o?n(g,M,c,t,e,i):n(M,g,c,e,t,i);if(!(void 0===m?M===g||s(M,g,r,n,i):m)){D=!1;break}y||(y="constructor"==c)}if(D&&!y){var I=e.constructor,f=t.constructor;I==f||!("constructor"in e)||!("constructor"in t)||"function"==typeof I&&I instanceof I&&"function"==typeof f&&f instanceof f||(D=!1)}return i.delete(e),i.delete(t),D}(e,t,r,n,s,i))}function Yt(e,t,r,n,s){return e===t||(null==e||null==t||!N(e)&&!N(t)?e!=e&&t!=t:vt(e,t,r,n,Yt,s))}function Xt(e){return e==e&&!S(e)}function jt(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function zt(e){var t=function(e){for(var t=at(e),r=t.length;r--;){var n=t[r],s=e[n];t[r]=[n,s,Xt(s)]}return t}(e);return 1==t.length&&t[0][2]?jt(t[0][0],t[0][1]):function(r){return r===e||function(e,t,r,n){var s=r.length,i=s,o=!n;if(null==e)return!i;for(e=Object(e);s--;){var u=r[s];if(o&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++s<i;){var l=(u=r[s])[0],a=e[l],c=u[1];if(o&&u[2]){if(void 0===a&&!(l in e))return!1}else{var d=new ge;if(n)var w=n(a,c,l,e,t,d);if(!(void 0===w?Yt(c,a,3,n,d):w))return!1}}return!0}(r,e,t)}}function Gt(e,t){return null!=e&&t in Object(e)}function Wt(e,t){return null!=e&&function(e,t,r){for(var n=-1,s=(t=we(t,e)).length,i=!1;++n<s;){var o=De(t[n]);if(!(i=null!=e&&r(e,o)))break;e=e[o]}return i||++n!=s?i:!!(s=null==e?0:e.length)&&Be(s)&&Ue(o,s)&&(D(e)||We(e))}(e,t,Gt)}function Kt(e){return e}function kt(e){return function(t){return null==t?void 0:t[e]}}function Ft(e){return T(e)?kt(De(e)):function(e){return function(t){return ye(t,e)}}(e)}function Vt(e){return"function"==typeof e?e:null==e?Kt:"object"==typeof e?D(e)?function(e,t){return T(e)&&Xt(t)?jt(De(e),t):function(r){var n=Me(r,e);return void 0===n&&n===t?Wt(r,e):Yt(t,n,3)}}(e[0],e[1]):zt(e):Ft(e)}var Ht,Ut=function(e,t,r){for(var n=-1,s=Object(e),i=r(e),o=i.length;o--;){var u=i[Ht?o:++n];if(!1===t(s[u],u,s))break}return e};var Bt=function(e,t){return function(r,n){if(null==r)return r;if(!lt(r))return e(r,n);for(var s=r.length,i=t?s:-1,o=Object(r);(t?i--:++i<s)&&!1!==n(o[i],i,o););return r}}(function(e,t){return e&&Ut(e,t,at)}),Rt=Bt;function Qt(e,t){var r=-1,n=lt(e)?Array(e.length):[];return Rt(e,function(e,s,i){n[++r]=t(e,s,i)}),n}function Ot(e,t){return(D(e)?ue:Qt)(e,Vt(t))}var Pt=Array.prototype.join;function Jt(e,t){return null==e?"":Pt.call(e,t)}function $t(e){return"[object Object]"===Object.prototype.toString.call(e)}function _t(e){if($t(e)){for(let t in e)return!0;return!1}return!1}function qt(e){return"[object String]"===Object.prototype.toString.call(e)}function er(e){return!!(qt(e)&&e.length>0)}var tr=/\s/;var rr=/^\s+/;function nr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&tr.test(e.charAt(t)););return t}(e)+1).replace(rr,""):e}var sr=/^[-+]0x[0-9a-f]+$/i,ir=/^0b[01]+$/i,or=/^0o[0-7]+$/i,ur=parseInt;function lr(e){if("number"==typeof e)return e;if(A(e))return NaN;if(S(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=S(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=nr(e);var r=ir.test(e);return r||or.test(e)?ur(e.slice(2),r?2:8):sr.test(e)?NaN:+e}var ar=1/0;function cr(e){return e?(e=lr(e))===ar||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function dr(e){var t=cr(e),r=t%1;return t==t?r?t-r:t:0}function wr(e){return!0===(t=e)||!1===t||N(t)&&"[object Boolean]"==b(t);var t}function Dr(e){if(e!=e)return!0;if(null!==e&&"object"==typeof e)try{let t=Number.prototype.valueOf.call(e);return Number.isNaN(t)}catch(e){return!1}return!1}function yr(e){let t=!1;if(er(e)){if(""===e.trim())return!1;t=!isNaN(Number(e))}else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(Dr(e))return!1;t=!0}return t}function Mr(e){if(!yr(e))return 0;return cr(e)}function gr(e,t={}){let r=Me(t,"useLimitSafe",null);return wr(r)||(r=!1),!!yr(e)&&(e=Mr(e),r?Number.isSafeInteger(e):"number"==typeof(n=e)&&n==dr(n));var n}var mr=g.isFinite,Ir=Math.min;var fr,pr=(fr=Math["round"],function(e,t){if(e=lr(e),(t=null==t?0:Ir(dr(t),292))&&mr(e)){var r=(de(e)+"e").split("e");return+((r=(de(fr(r[0]+"e"+(+r[1]+t)))+"e").split("e"))[0]+"e"+(+r[1]-t))}return fr(e)});function Cr(e,t={}){let r=Me(t,"useClampSafe",null);wr(r)||(r=!1);let n=Me(t,"useLimitSafe",null);wr(n)||(n=!1);let s=Me(t,"returnWithStateAndMsg",null);wr(s)||(s=!1);let i=e=>s?{state:"success",msg:e}:e,o=e=>{if(s)return{state:"error",msg:e};throw new Error(e)};if(!yr(e))return i(0);let u=null;try{e=Mr(e),u=pr(e),r&&(u>Number.MAX_SAFE_INTEGER?u=Number.MAX_SAFE_INTEGER:u<Number.MIN_SAFE_INTEGER&&(u=Number.MIN_SAFE_INTEGER))}catch(e){return o(e.toString())}return n&&!Number.isSafeInteger(Number(u))?o(`v[${e}] is not a safe integer`):("0"===String(u)&&(u=0),i(u))}function hr(e,t={}){if(!gr(e,t))return!1;return Cr(e)>0}function Lr(e){return"[object Array]"===Object.prototype.toString.call(e)}function br(e){return"[object Undefined]"===Object.prototype.toString.call(e)}function Nr(e){if($t(e)){for(let t in e)return!1;return!0}return!1}function Ar(e){return!!Lr(e)&&0===e.length}function xr(e){return!!br(e)||(!!function(e){return"[object Null]"===Object.prototype.toString.call(e)}(e)||(!!Nr(e)||(!!function(e){return!(!qt(e)||0!==e.length)}(e)||(!!Ar(e)||!!Dr(e)))))}function Er(e){return!!Lr(e)&&(0!==e.length&&(1!==e.length||!xr(e[0])))}var Tr=st(Object.getPrototypeOf,Object),Sr=Function.prototype,Zr=Object.prototype,vr=Sr.toString,Yr=Zr.hasOwnProperty,Xr=vr.call(Object);function jr(e){if(!N(e)||"[object Object]"!=b(e))return!1;var t=Tr(e);if(null===t)return!0;var r=Yr.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&vr.call(r)==Xr}function zr(e){return function(e){if(!N(e))return!1;var t=b(e);return"[object Error]"==t||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!jr(e)}(e)}function Gr(e){return Z(e)}function Wr(e){let t,r;try{r=Object.prototype.toString.call(e)}catch(e){return!1}if(t="[object Promise]"===r,t)return!0;if("[object Function]"!==r)return!1;try{t="function"!=typeof e.subscribe&&"function"==typeof e.then}catch(e){}return t}function Kr(e,t={}){let r=Me(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:{};if(!er(e))return n("invalid v");let s={};try{s=JSON.parse(e)}catch(e){return n(e.toString())}return r?{state:"success",msg:s}:s}function kr(e,t={}){if(!gr(e,t))return!1;return Cr(e)>=0}function Fr(e,t){return er(e)&&kr(t)?0===(t=Cr(t))?"":e.substring(0,t):""}function Vr(e,t){if(!er(e))return"";if(!kr(t))return"";if(0===(t=Cr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Hr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}let Ur=function(e){if(!Gr(e))throw new Error("fn is not a function");return function(){let t,r=Hr();try{t=e.apply(this,arguments)}catch(e){return r.resolve({state:"error",msg:e}),r}let n=e=>{let t=!1;try{t="cancelled"===Me(e,"reason")}catch(e){}t?r.resolve({state:"cancelled",msg:""}):r.resolve({state:"error",msg:e})};try{Wr(t)?t.then(e=>{r.resolve({state:"success",msg:e})},n):r.resolve({state:"success",msg:t})}catch(e){r.resolve({state:"error",msg:e})}return r}};function Br(e,t={}){let r=Me(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function Rr(e,t={}){let r=Me(t,"fs");if(!Br(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function Qr(e){return Rr(e,{fs:t})}function Or(e,t={}){let r=Me(t,"fs");return!!Br(e,{fs:r})&&(!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink())}function Pr(e){return Or(e,{fs:t})}function Jr(e,t,r){if(!er(e))return"";if(!er(t))return"";if(!qt(r))return"";return String(e).replaceAll(t,r)}function $r(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e}function _r(e,t){var r;return(D(e)?$r:Rt)(e,"function"==typeof(r=t)?r:Kt)}function qr(e,t,r=""){if(!Er(t))return{};let n={};return _r(t,function(t){n[t]=Me(e,t,r)}),n}function en(e,t,r=""){if(!Er(e))return[];if(!Er(t))return[];return Ot(e,e=>qr(e,t,r))}let tn=2147483647;var rn="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function nn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function sn(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var r=function e(){if(this instanceof e){var r=[null];return r.push.apply(r,arguments),new(Function.bind.apply(t,r))}return t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}),r}var on={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function s(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new s(n,i||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0===--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,s=[];if(0===this._eventsCount)return s;for(n in e=this._events)t.call(e,n)&&s.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,i=n.length,o=new Array(i);s<i;s++)o[s]=n[s].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,s,i,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,i),!0;case 6:return c.fn.call(c.context,t,n,s,i,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,D=c.length;for(a=0;a<D;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,s);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return i(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return i(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,s){var i=r?r+e:e;if(!this._events[i])return this;if(!t)return o(this,i),this;var u=this._events[i];if(u.fn)u.fn!==t||s&&!u.once||n&&u.context!==n||o(this,i);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||s&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[i]=1===a.length?a[0]:a:o(this,i)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}(on);var un=nn(on.exports);function ln(){return new un}function an(e,t,r=[],n={}){let s=n.funSettle,i=n.tag||"evem",o=(t,...r)=>e.emit(t,...r);Gr(n.funEmit)&&(o=n.funEmit);try{return o(t,...r)}catch(n){if(Gr(s))try{s(n)}catch(e){}try{"error"!==t&&e.listenerCount("error")>0?o("error",{fun:"listener",name:t,msg:n,args:r}):console.error(`[wsemi ${i}] listener of '${String(t)}' threw:`,n)}catch(e){try{console.error(`[wsemi ${i}] listener of '${String(t)}' threw, and reporting it also threw:`,e,n)}catch(e){}}return!1}}async function cn(e,t={}){let r=null,n=Hr();if(!Gr(e))return n.reject("waitfunction需輸入函數f"),n;let s=async()=>{let t=e();return Wr(t)&&(t=await t),t};if(r=await s(),!0===r)return n.resolve(),n;let i=Me(t,"attemptNum",null);hr(i)||(i=200);let o=Me(t,"timeInterval",null);hr(o)||(o=1e3),o=Math.min(o,tn);let u=0,l=!1,a=setInterval(async()=>{if(u+=1,l)u>i&&clearInterval(a);else{l=!0;try{r=await s()}catch(e){return clearInterval(a),void n.reject(e)}finally{l=!1}if(!0===r)return clearInterval(a),void n.resolve();u>i&&(clearInterval(a),n.reject(`exceeded attemptNum[${i}]`))}},o);return n}function dn(e,t){return!!$t(e)&&(!(!er(t)&&!yr(t))&&t in e)}function wn(e={}){let t=Me(e,"timeExpire",null);hr(t)||(t=18e5),t=Cr(t),t=Math.min(t,tn);let r=Me(e,"timeDetect",null);hr(r)||(r=2e3),r=Cr(r),r=Math.min(r,tn);let n=ln(),s=Object.create(null),i=e=>{if(dn(s,e)){return an(n,"checkWithSet",[{state:"error",msg:`checkWithSet: key in use: ${e}`}],{tag:"cacheSt"}),!1}return s[e]={time:Date.now(),value:!0},an(n,"checkWithSet",[{state:"success",msg:`checkWithSet: ${e}`}],{tag:"cacheSt"}),!0},o=setInterval(()=>{an(n,"detect",[{state:"start"}],{tag:"cacheSt"});let e=Date.now();for(let r of Object.keys(s)){let n=s[r];n&&e-n.time>t&&delete s[r]}an(n,"detect",[{state:"finish"}],{tag:"cacheSt"})},r);return n.checkWithSet=i,n.setWithFree=async(e,t)=>{an(n,"setWithFree",[{state:"start"}],{tag:"cacheSt"});let r=[];for(let t of e){if(!i(t)){for(let e of r)delete s[e];let e=`setWithFree: key in use: ${t}`;return an(n,"setWithFree",[{state:"error",msg:e}],{tag:"cacheSt"}),Promise.reject(e)}r.push(t)}try{let r=await t(),s=`setWithFree: ${e.join(", ")}`;return an(n,"setWithFree",[{state:"success",msg:s}],{tag:"cacheSt"}),r}catch(e){let t="";try{t=`${e&&e.message||e}`}catch(e){}throw an(n,"setWithFree",[{state:"error",msg:`setWithFree: fn threw: ${t}`}],{tag:"cacheSt"}),e}finally{for(let e of r)delete s[e]}},n.set=async(e,t=!0)=>{s[e]={time:Date.now(),value:t},an(n,"set",[{state:"success",msg:`set: ${e}`}],{tag:"cacheSt"})},n.get=async e=>{let t=s[e],r=void 0===t?null:t.value;return an(n,"get",[{state:"success",msg:`get: ${e}`}],{tag:"cacheSt"}),r},n.check=async e=>{let t=dn(s,e);return an(n,"check",[{state:"success",msg:`check: ${e} = ${t}`}],{tag:"cacheSt"}),t},n.del=async e=>{delete s[e],an(n,"del",[{state:"success",msg:`del: ${e}`}],{tag:"cacheSt"})},n.waitExist=async(e,t={})=>{let r=Me(t,"attemptNum",null);hr(r)||(r=30),r=Cr(r);let i=Me(t,"timeInterval",null);hr(i)||(i=100),i=Cr(i),an(n,"waitExist",[{state:"start"}],{tag:"cacheSt"});try{await cn(()=>dn(s,e),{attemptNum:r,timeInterval:i})}catch(t){let s=`waitExist timeout (${r*i}ms): ${e}`;return an(n,"waitExist",[{state:"error",msg:s}],{tag:"cacheSt"}),Promise.reject(s)}an(n,"waitExist",[{state:"success",msg:`waitExist resolved: ${e}`}],{tag:"cacheSt"})},n.waitNotExist=async(e,t={})=>{let r=Me(t,"attemptNum",null);hr(r)||(r=30),r=Cr(r);let i=Me(t,"timeInterval",null);hr(i)||(i=100),i=Cr(i),an(n,"waitNotExist",[{state:"start"}],{tag:"cacheSt"});try{await cn(()=>!dn(s,e),{attemptNum:r,timeInterval:i})}catch(t){let s=`waitNotExist timeout (${r*i}ms): ${e}`;return an(n,"waitNotExist",[{state:"error",msg:s}],{tag:"cacheSt"}),Promise.reject(s)}an(n,"waitNotExist",[{state:"success",msg:`waitNotExist resolved: ${e}`}],{tag:"cacheSt"})},n.clear=()=>{clearInterval(o)},n}function Dn(e,t,r=[],n={}){let s=n.ms;return hr(s)||(s=1),s=Cr(s),s=Math.min(s,tn),setTimeout(()=>{an(e,t,r,n)},s)}function yn(e){try{let t=e();return"string"==typeof t?t:""}catch(e){return""}}function Mn(e,t){try{let r=new WeakSet,n=[],s=JSON.stringify(e,function(e,s){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.length>=t)return"[Deep]";if("bigint"==typeof s)return String(s);if(null!==s&&"object"==typeof s){if(r.has(s))return"[Circular]";r.add(s),n.push(s)}return s});return"string"==typeof s?s:""}catch(e){return""}}function gn(e){if(e.length>=2&&'"'===e[0]&&'"'===e[e.length-1]){let t=yn(()=>JSON.parse(e));if(""!==t)return t}return e}function mn(e,t){if(void 0===e)return"";if(null===e)return"null";let r=function(e){let t=typeof e;return"string"===t?e:null==e?"":"number"===t||"boolean"===t||"bigint"===t||"symbol"===t?String(e):""}(e);if(""!==r)return r;let n=Mn(e,t);if(""!==n&&"{}"!==n)return gn(n);let s=yn(()=>String(e));return""!==s&&"[object Object]"!==s?s:n}function In(e,t){let r=new WeakSet;null===e||"object"!=typeof e&&"function"!=typeof e||r.add(e);let n=e,s=[];for(let e=0;e<t.levelCauseMax;e++){let e=null;try{e=n.cause}catch(e){break}if(null==e)break;if("object"==typeof e||"function"==typeof e){if(r.has(e))break;r.add(e)}let i=pn(e,{...t,useCause:!1,useAggregate:!1});""!==i&&s.push(i),n=e}return s.join(" <- ")}function fn(e,t){let r=null;try{r=e.errors}catch(e){return""}if(!Array.isArray(r)||0===r.length)return"";let n=[];for(let s=0;s<r.length&&s<t.levelCauseMax;s++){if(r[s]===e)continue;let i=pn(r[s],{...t,useCause:!1,useAggregate:!1});""!==i&&n.push(i)}return n.join("; ")}function pn(e,t){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e)return Number.isNaN(e)?"":String(e);if("boolean"==typeof e||"bigint"==typeof e||"symbol"==typeof e)return String(e);let r=null,n=!1;try{r=e.message,n=!0}catch(e){n=!1}if(n&&"string"==typeof r){if(""!==r){let n=r;if(t.useCause){let r=In(e,t);""!==r&&(n=`${n} <- ${r}`)}if(t.useAggregate){let r=fn(e,t);""!==r&&(n=`${n} [${r}]`)}return n}let n=In(e,t);return""!==n?n:""}if(n){let e=mn(r,t.levelJsonMax);if(""!==e)return e}let s=In(e,t);if(""!==s)return s;if(t.useAggregate){let r=fn(e,t);if(""!==r)return r}let i=Mn(e,t.levelJsonMax),o=gn(i);if(""!==o&&"{}"!==o)return o;let u=yn(()=>String(e));if(""!==u&&"[object Object]"!==u)return u;let l=yn(()=>Object.prototype.toString.call(e));return""!==l&&"[object Object]"!==l?l:""!==i?i:""}function Cn(e,t={}){let r=Me(t,"useCause",null);wr(r)||(r=!1);let n=Me(t,"useAggregate",null);wr(n)||(n=!1);let s=Me(t,"levelCauseMax",null);hr(s,{useLimitSafe:!0})||(s=8),s=Cr(s);let i=Me(t,"levelJsonMax",null);hr(i,{useLimitSafe:!0})||(i=6),i=Cr(i);let o=Me(t,"lengthMessageMax",null);hr(o,{useLimitSafe:!0})||(o=0),o=Cr(o);let u={useCause:r,useAggregate:n,levelCauseMax:s,levelJsonMax:i,lengthMessageMax:o},l="";try{l=pn(e,u)}catch(e){return l="",l}return er(l)?(u.lengthMessageMax>0&&l.length>u.lengthMessageMax&&(l=u.lengthMessageMax>3?l.slice(0,u.lengthMessageMax-3)+"...":l.slice(0,u.lengthMessageMax)),l):(l="",l)}function hn(e){if(!(er(e)||yr(e)||A(e)||function(e){return"[object BigInt]"===Object.prototype.toString.call(e)}(e)))return"";let t="";try{t=String(e)}catch(e){}try{t=e.toString()}catch(e){}return t}var Ln={exports:{}};var bn,Nn={exports:{}},An=sn(Object.freeze({__proto__:null,default:{}}));function xn(){return bn||(bn=1,function(e){var t;e.exports=(t=t||function(e,t){var r;if("undefined"!=typeof window&&window.crypto&&(r=window.crypto),"undefined"!=typeof self&&self.crypto&&(r=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(r=globalThis.crypto),!r&&"undefined"!=typeof window&&window.msCrypto&&(r=window.msCrypto),!r&&void 0!==rn&&rn.crypto&&(r=rn.crypto),!r)try{r=An}catch(e){}var n=function(){if(r){if("function"==typeof r.getRandomValues)try{return r.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof r.randomBytes)try{return r.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},s=Object.create||function(){function e(){}return function(t){var r;return e.prototype=t,r=new e,e.prototype=null,r}}(),i={},o=i.lib={},u=o.Base={extend:function(e){var t=s(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},l=o.WordArray=u.extend({init:function(e,r){e=this.words=e||[],this.sigBytes=r!=t?r:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,r=e.words,n=this.sigBytes,s=e.sigBytes;if(this.clamp(),n%4)for(var i=0;i<s;i++){var o=r[i>>>2]>>>24-i%4*8&255;t[n+i>>>2]|=o<<24-(n+i)%4*8}else for(var u=0;u<s;u+=4)t[n+u>>>2]=r[u>>>2];return this.sigBytes+=s,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=u.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],r=0;r<e;r+=4)t.push(n());return new l.init(t,e)}}),a=i.enc={},c=a.Hex={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],s=0;s<r;s++){var i=t[s>>>2]>>>24-s%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n<t;n+=2)r[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new l.init(r,t/2)}},d=a.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],s=0;s<r;s++){var i=t[s>>>2]>>>24-s%4*8&255;n.push(String.fromCharCode(i))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n<t;n++)r[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new l.init(r,t)}},w=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},D=o.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=w.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r,n=this._data,s=n.words,i=n.sigBytes,o=this.blockSize,u=i/(4*o),a=(u=t?e.ceil(u):e.max((0|u)-this._minBufferSize,0))*o,c=e.min(4*a,i);if(a){for(var d=0;d<a;d+=o)this._doProcessBlock(s,d);r=s.splice(0,a),n.sigBytes-=c}return new l.init(r,c)},clone:function(){var e=u.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=D.extend({cfg:u.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){D.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,r){return new e.init(r).finalize(t)}},_createHmacHelper:function(e){return function(t,r){return new y.HMAC.init(e,r).finalize(t)}}});var y=i.algo={};return i}(Math),t)}(Nn)),Nn.exports}!function(e){e.exports=xn().enc.Utf8}(Ln);var En=nn(Ln.exports),Tn={exports:{}};!function(e){var t;e.exports=(t=xn(),function(){var e=t,r=e.lib.WordArray;function n(e,t,n){for(var s=[],i=0,o=0;o<t;o++)if(o%4){var u=n[e.charCodeAt(o-1)]<<o%4*2|n[e.charCodeAt(o)]>>>6-o%4*2;s[i>>>2]|=u<<24-i%4*8,i++}return r.create(s,i)}e.enc.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp();for(var s=[],i=0;i<r;i+=3)for(var o=(t[i>>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,u=0;u<4&&i+.75*u<r;u++)s.push(n.charAt(o>>>6*(3-u)&63));var l=n.charAt(64);if(l)for(;s.length%4;)s.push(l);return s.join("")},parse:function(e){var t=e.length,r=this._map,s=this._reverseMap;if(!s){s=this._reverseMap=[];for(var i=0;i<r.length;i++)s[r.charCodeAt(i)]=i}var o=r.charAt(64);if(o){var u=e.indexOf(o);-1!==u&&(t=u)}return n(e,t,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64)}(Tn);var Sn=nn(Tn.exports);function Zn(e){try{return String(e)}catch(e){}try{let t=e.message;if("string"==typeof t&&""!==t)return t}catch(e){}return"unknown error"}function vn(e){return"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function Yn(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)}function Xn(e){return"[object Uint16Array]"===Object.prototype.toString.call(e)}function jn(e){if(!(vn(e)||function(e){let t=Object.prototype.toString.call(e);if("[object Blob]"===t||"[object File]"===t)return!0;try{if("undefined"!=typeof Blob&&e instanceof Blob)return!0}catch(e){}return!1}(e)||Yn(e)||Xn(e)))return null;try{if(yr(e.byteLength))return e.byteLength}catch(e){}try{if(yr(e.length))return e.length}catch(e){}try{if(yr(e.size))return e.size}catch(e){}return null}function zn(e){if(null===e||"object"!=typeof e)return!1;if(e instanceof Error)return!0;if("function"==typeof Error.isError)return Error.isError(e);if(Symbol.toStringTag in e)return!1;let t=Object.prototype.toString.call(e);return"[object Error]"===t||"[object DOMException]"===t}function Gn(e,t={}){let r=Me(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:{results:"",binarys:[]};if(!$t(e)&&!Lr(e))return n("invalid data, data is not an object or array");if(Nr(e)||Ar(e))return n("invalid data, data is an empty object or empty array");let s=/^(?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,i="",o=[];try{let t=-1;i=JSON.stringify(e,function(e,r){if(Yn(r)){t+=1;let e=`[BlazeForUint8Array]::${t}`;return o.push(r),e}if(Xn(r)){t+=1;let e=`[BlazeForUint16Array]::${t}`;return o.push(r),e}if(vn(r)){t+=1;let e=`[BlazeForArrayBuffer]::${t}`;return o.push(r),e}return er(r=function(e){if(!zn(e))return e;let t=e.toString;return t===Object.prototype.toString||"function"!=typeof t?Error.prototype.toString.call(e):t.call(e)}(r))&&91===r.charCodeAt(0)&&s.test(r)?"[BlazeForPreventEscape]"+r:r})}catch(e){return n(Zn(e))}return r?{state:"success",msg:{results:i,binarys:o}}:{results:i,binarys:o}}let Wn=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/;function Kn(e,t={}){let r=Me(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:new Uint8Array;if(!er(e))return n("invalid str");if(!("function"==typeof e.isWellFormed?e.isWellFormed():!Wn.test(e)))return n("invalid str, contains lone surrogates");let s=null;try{s=(new TextEncoder).encode(e)}catch(e){return n(e.toString())}return r?{state:"success",msg:s}:s}function kn(e,t,r=0,n=!0,s=52,i=8){return function(e,t,r,n,s,i){if(!yr(e))return null;if(!Yn(t))return null;if(!gr(r))return null;if(!wr(n))return null;if(!gr(s))return null;if(!gr(i))return null;let o,u,l;e=Mr(e);let a=8*i-s-1,c=(1<<a)-1,d=c>>1,w=23===s?Math.pow(2,-24)-Math.pow(2,-77):0,D=n?i-1:0,y=n?-1:1,M=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+d>=1?w/l:w*Math.pow(2,1-d))*l>=2&&(o++,l/=2),o+d>=c?(u=0,o=c):o+d>=1?(u=(e*l-1)*Math.pow(2,s),o+=d):(u=e*Math.pow(2,d-1)*Math.pow(2,s),o=0));s>=8;t[r+D]=255&u,D+=y,u/=256,s-=8);for(o=o<<s|u,a+=s;a>0;t[r+D]=255&o,D+=y,o/=256,a-=8);return t[r+D-y]|=128*M,null}(e,t,r,n,s,i)}function Fn(e){let t=0;_r(e,e=>{t+=jn(e)});let r=new Uint8Array(t),n=0;return _r(e,e=>{let t=function(e){return vn(e)?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0)}(e);r.set(t,n),n+=t.length}),r}function Vn(e,t={}){let r=[],n=new Uint8Array,s=Me(t,"returnWithStateAndMsg",null);wr(s)||(s=!1);let i=e=>s?{state:"error",msg:e}:new Uint8Array;if(!(o=e,Lr(o)&&o.length>=1||_t(e)))return i("invalid data, data is not an effective object or a non-empty array");var o;let u=[],l=[];function a(e){u.push(jn(e)),l.push(e)}try{let t=Gn(e,{returnWithStateAndMsg:!0});if("error"===t.state)return i(`obj2stru8arr: ${t.msg}`);let s=t.msg;a(Kn(s.results)),_r(s.binarys,e=>{a(e)});let o=u,c=Kn(JSON.stringify(o)),d=new Uint8Array(8);kn(jn(c),d),r.push(d),r.push(c),_r(l,e=>{r.push(e)}),n=Fn(r)}catch(e){return i(Zn(e))}return s?{state:"success",msg:n}:n}function Hn(e,t=0,r=!0,n=52,s=8){return function(e,t,r,n,s){if(!Yn(e))return null;if(!gr(t))return null;if(!wr(r))return null;if(!gr(n))return null;if(!gr(s))return null;let i,o,u=8*s-n-1,l=(1<<u)-1,a=l>>1,c=-7,d=r?0:s-1,w=r?1:-1,D=e[t+d];for(d+=w,i=D&(1<<-c)-1,D>>=-c,c+=u;c>0;i=256*i+e[t+d],d+=w,c-=8);for(o=i&(1<<-c)-1,i>>=-c,c+=n;c>0;o=256*o+e[t+d],d+=w,c-=8);if(0===i)i=1-a;else{if(i===l)return o?NaN:1/0*(D?-1:1);o+=Math.pow(2,n),i-=a}return(D?-1:1)*o*Math.pow(2,i-n)}(e,t,r,n,s)}function Un(e,t={}){let r=Me(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:"";if(!Yn(e))return n("invalid u8a");let s="";try{s=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(e)}catch(e){return n(e.toString())}return r?{state:"success",msg:s}:s}function Bn(e,t={}){let r=Me(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:{};if(!_t(e))return n("invalid data");let s=null,i=null;try{s=e.results,i=e.binarys}catch(e){return n(Zn(e))}if(!er(s))return n("invalid results");if(!Lr(i))return n("invalid binarys");let o=/^\[BlazeFor(Uint8Array|Uint16Array|ArrayBuffer)\]::(\d+)$/,u=/^\[BlazeForPreventEscape\](?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,l=new Set,a={};try{a=JSON.parse(s,function(e,t){if(!er(t)||91!==t.charCodeAt(0))return t;let r=o.exec(t);if(null===r)return u.test(t)?t.slice(23):t;let n=Number(r[2]);if(n>=i.length)throw new Error(`binary index out of range[${n}], binarys.length[${i.length}]`);if(l.has(n))throw new Error(`binary index referenced more than once[${n}]`);return l.add(n),((e,t,r)=>{if("Uint16Array"===e&&!Xn(r)){if(!Yn(r))throw new Error(`binarys[${t}] can not be restored to Uint16Array`);if(r.byteLength%2!=0)throw new Error(`binarys[${t}] byteLength[${r.byteLength}] is not even, can not be restored to Uint16Array`);let e=0===r.byteOffset&&r.byteLength===r.buffer.byteLength?r:new Uint8Array(r);return new Uint16Array(e.buffer)}if("ArrayBuffer"===e&&!vn(r)){if(!Yn(r))throw new Error(`binarys[${t}] can not be restored to ArrayBuffer`);return r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)}return r})(r[1],n,i[n])})}catch(e){return n(Zn(e))}return r?{state:"success",msg:a}:a}function Rn(e,t={}){let r={},n=Me(t,"returnWithStateAndMsg",null);wr(n)||(n=!1);let s=e=>n?{state:"error",msg:e}:{};if(!Yn(e))return s("invalid u8a");try{let t=8,n=e.slice(0,t),i=e.slice(t,jn(e)),o=Hn(n),u=i.slice(0,o),l=i.slice(o,jn(i)),a=Un(u,{returnWithStateAndMsg:!0});if("error"===a.state)return s(`u8arr2str: ${a.msg}`);let c=a.msg,d=JSON.parse(c),w=function(e,t){if(!Array.isArray(e))return"not an array";for(let t=0;t<e.length;t++){let r=e[t];if(!Number.isInteger(r)||r<0)return"every item must be a non-negative finite integer"}let r=0;for(let n=0;n<e.length;n++)if(r+=e[n],r>t)return"total length exceeds the packet";return e.length>1&&25*(e.length-1)>e[0]?"too many chunks for the main block":""}(d,jn(l));if(""!==w)return s(`invalid pks, ${w}`);let D=function(e,t){let r=0,n=0,s=[];for(let i=0;i<t.length;i++){n=r+t[i];let o=e.slice(r,n);r=n,s.push(o)}return s}(l,d),y=Un(D.shift(),{returnWithStateAndMsg:!0});if("error"===y.state)return s(`u8arr2str: ${y.msg}`);let M=Bn({results:y.msg,binarys:D},{returnWithStateAndMsg:!0});if("error"===M.state)return s(`stru8arr2obj: ${M.msg}`);r=M.msg}catch(e){return s(Zn(e))}return n?{state:"success",msg:r}:r}function Qn(e){let t=!1;try{t=zn(e)}catch(e){}if(t)return e;if("string"==typeof e&&""!==e)return e;let r=Zn(e);return""!==r?r:"unknown error"}function On(e){return function(e,t={}){try{let r=Me(t,"fs");if(Rr(e,{fs:r}))return{success:"input folder is already exists: "+e};if(Br(e,{fs:r}))return{error:"input path already exists: "+e};r.mkdirSync(e,{recursive:!0})}catch(e){return{error:Qn(e)}}return{success:"done: "+e}}(e,{fs:t})}function Pn(e){return function(e,t={}){try{let r=Me(t,"fs");if(!Br(e,{fs:r}))return{success:"file does not exist: "+e};if(!Or(e,{fs:r}))return{error:"input path is not a file: "+e};r.unlinkSync(e)}catch(e){return{error:Qn(e)}}return{success:"done: "+e}}(e,{fs:t})}function Jn(e){return er(e)&&e.length<=128&&/^[A-Za-z0-9]+$/.test(e)}let $n={permission:200,param:200,app:200,output:200,packet:200,internal:200},_n={main:{event:"execute",apiType:"main",api:"apiMain",authFrom:"header",statusOf:$n},ulctr:{event:"upload",apiType:"upload-controller",api:"apiUploadCheck",authFrom:"header",statusOf:$n},slc:{event:"upload",apiType:"upload-slice",api:"apiUploadSlice",authFrom:"header",statusOf:$n},dwgfn:{event:"download",apiType:"download-get-filename",api:"apiDownloadGetFilename",authFrom:"header",statusOf:$n,fields:[{name:"streamRead"},{name:"filename"}]},dwgf:{event:"download",apiType:"download-get-file",api:"apiDownloadGetFile",authFrom:"query",statusOf:{permission:403,param:400,app:404,output:500,packet:500,internal:500},fields:[{name:"streamRead"},{name:"fileSize"},{name:"fileType"},{name:"filename",optional:!0}]},dw:{event:"download",apiType:"download",api:"apiDownload",authFrom:"header",statusOf:$n,fields:[{name:"streamRead"},{name:"filename"},{name:"fileSize"},{name:"fileType"}]}};var qn=kt("length"),es=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");function ts(e){return es.test(e)}var rs="\\ud800-\\udfff",ns="["+rs+"]",ss="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",is="\\ud83c[\\udffb-\\udfff]",os="[^"+rs+"]",us="(?:\\ud83c[\\udde6-\\uddff]){2}",ls="[\\ud800-\\udbff][\\udc00-\\udfff]",as="(?:"+ss+"|"+is+")"+"?",cs="[\\ufe0e\\ufe0f]?",ds=cs+as+("(?:\\u200d(?:"+[os,us,ls].join("|")+")"+cs+as+")*"),ws="(?:"+[os+ss+"?",ss,us,ls,ns].join("|")+")",Ds=RegExp(is+"(?="+is+")|"+ws+ds,"g");function ys(e){return ts(e)?function(e){for(var t=Ds.lastIndex=0;Ds.test(e);)++t;return t}(e):qn(e)}function Ms(e){if(null==e)return 0;if(lt(e))return"string"==typeof(t=e)||!D(t)&&N(t)&&"[object String]"==b(t)?ys(e):e.length;var t,r=xt(e);return"[object Map]"==r||"[object Set]"==r?e.size:ut(e).length}var gs={exports:{}};!function(e){e.exports=function(){var e=1e3,t=6e4,r=36e5,n="millisecond",s="second",i="minute",o="hour",u="day",l="week",a="month",c="quarter",d="year",w="date",D="Invalid Date",y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,M=/\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},m=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},I={s:m,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),s=r%60;return(t<=0?"+":"-")+m(n,2,"0")+":"+m(s,2,"0")},m:function e(t,r){if(t.date()<r.date())return-e(r,t);var n=12*(r.year()-t.year())+(r.month()-t.month()),s=t.clone().add(n,a),i=r-s<0,o=t.clone().add(n+(i?-1:1),a);return+(-(n+(r-s)/(i?s-o:o-s))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:a,y:d,w:l,d:u,D:w,h:o,m:i,s:s,ms:n,Q:c}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},f="en",p={};p[f]=g;var C="$isDayjsObject",h=function(e){return e instanceof A||!(!e||!e[C])},L=function e(t,r,n){var s;if(!t)return f;if("string"==typeof t){var i=t.toLowerCase();p[i]&&(s=i),r&&(p[i]=r,s=i);var o=t.split("-");if(!s&&o.length>1)return e(o[0])}else{var u=t.name;p[u]=t,s=u}return!n&&s&&(f=s),s||!n&&f},b=function(e,t){if(h(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new A(r)},N=I;N.l=L,N.i=h,N.w=function(e,t){return b(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var A=function(){function g(e){this.$L=L(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[C]=!0}var m=g.prototype;return m.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(N.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(y);if(n){var s=n[2]-1||0,i=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)}}return new Date(t)}(e),this.init()},m.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},m.$utils=function(){return N},m.isValid=function(){return!(this.$d.toString()===D)},m.isSame=function(e,t){var r=b(e);return this.startOf(t)<=r&&r<=this.endOf(t)},m.isAfter=function(e,t){return b(e)<this.startOf(t)},m.isBefore=function(e,t){return this.endOf(t)<b(e)},m.$g=function(e,t,r){return N.u(e)?this[t]:this.set(r,e)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(e,t){var r=this,n=!!N.u(t)||t,c=N.p(e),D=function(e,t){var s=N.w(r.$u?Date.UTC(r.$y,t,e):new Date(r.$y,t,e),r);return n?s:s.endOf(u)},y=function(e,t){return N.w(r.toDate()[e].apply(r.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),r)},M=this.$W,g=this.$M,m=this.$D,I="set"+(this.$u?"UTC":"");switch(c){case d:return n?D(1,0):D(31,11);case a:return n?D(1,g):D(0,g+1);case l:var f=this.$locale().weekStart||0,p=(M<f?M+7:M)-f;return D(n?m-p:m+(6-p),g);case u:case w:return y(I+"Hours",0);case o:return y(I+"Minutes",1);case i:return y(I+"Seconds",2);case s:return y(I+"Milliseconds",3);default:return this.clone()}},m.endOf=function(e){return this.startOf(e,!1)},m.$set=function(e,t){var r,l=N.p(e),c="set"+(this.$u?"UTC":""),D=(r={},r[u]=c+"Date",r[w]=c+"Date",r[a]=c+"Month",r[d]=c+"FullYear",r[o]=c+"Hours",r[i]=c+"Minutes",r[s]=c+"Seconds",r[n]=c+"Milliseconds",r)[l],y=l===u?this.$D+(t-this.$W):t;if(l===a||l===d){var M=this.clone().set(w,1);M.$d[D](y),M.init(),this.$d=M.set(w,Math.min(this.$D,M.daysInMonth())).$d}else D&&this.$d[D](y);return this.init(),this},m.set=function(e,t){return this.clone().$set(e,t)},m.get=function(e){return this[N.p(e)]()},m.add=function(n,c){var w,D=this;n=Number(n);var y=N.p(c),M=function(e){var t=b(D);return N.w(t.date(t.date()+Math.round(e*n)),D)};if(y===a)return this.set(a,this.$M+n);if(y===d)return this.set(d,this.$y+n);if(y===u)return M(1);if(y===l)return M(7);var g=(w={},w[i]=t,w[o]=r,w[s]=e,w)[y]||1,m=this.$d.getTime()+n*g;return N.w(m,this)},m.subtract=function(e,t){return this.add(-1*e,t)},m.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return r.invalidDate||D;var n=e||"YYYY-MM-DDTHH:mm:ssZ",s=N.z(this),i=this.$H,o=this.$m,u=this.$M,l=r.weekdays,a=r.months,c=r.meridiem,d=function(e,r,s,i){return e&&(e[r]||e(t,n))||s[r].slice(0,i)},w=function(e){return N.s(i%12||12,e,"0")},y=c||function(e,t,r){var n=e<12?"AM":"PM";return r?n.toLowerCase():n};return n.replace(M,function(e,n){return n||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return N.s(t.$y,4,"0");case"M":return u+1;case"MM":return N.s(u+1,2,"0");case"MMM":return d(r.monthsShort,u,a,3);case"MMMM":return d(a,u);case"D":return t.$D;case"DD":return N.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(r.weekdaysMin,t.$W,l,2);case"ddd":return d(r.weekdaysShort,t.$W,l,3);case"dddd":return l[t.$W];case"H":return String(i);case"HH":return N.s(i,2,"0");case"h":return w(1);case"hh":return w(2);case"a":return y(i,o,!0);case"A":return y(i,o,!1);case"m":return String(o);case"mm":return N.s(o,2,"0");case"s":return String(t.$s);case"ss":return N.s(t.$s,2,"0");case"SSS":return N.s(t.$ms,3,"0");case"Z":return s}return null}(e)||s.replace(":","")})},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(n,w,D){var y,M=this,g=N.p(w),m=b(n),I=(m.utcOffset()-this.utcOffset())*t,f=this-m,p=function(){return N.m(M,m)};switch(g){case d:y=p()/12;break;case a:y=p();break;case c:y=p()/3;break;case l:y=(f-I)/6048e5;break;case u:y=(f-I)/864e5;break;case o:y=f/r;break;case i:y=f/t;break;case s:y=f/e;break;default:y=f}return D?y:N.a(y)},m.daysInMonth=function(){return this.endOf(a).$D},m.$locale=function(){return p[this.$L]},m.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=L(e,t,!0);return n&&(r.$L=n),r},m.clone=function(){return N.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},g}(),x=A.prototype;return b.prototype=x,[["$ms",n],["$s",s],["$m",i],["$H",o],["$W",u],["$M",a],["$y",d],["$D",w]].forEach(function(e){x[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),b.extend=function(e,t){return e.$i||(e(t,A,b),e.$i=!0),b},b.locale=L,b.isDayjs=h,b.unix=function(e){return b(1e3*e)},b.en=p[f],b.Ls=p,b.p={},b}()}(gs);var ms=nn(gs.exports);let Is="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),fs=Is.length;function ps(e=32){let t=[];e=hr(e)?Cr(e):32;for(let r=0;r<e;r++)t[r]=Is[0|Math.random()*fs];return t.join("")}function Cs(e,t,r){var n=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(r=r>s?s:r)<0&&(r+=s),s=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(s);++n<s;)i[n]=e[n+t];return i}function hs(e,t,r){var n=e.length;return r=void 0===r?n:r,!t&&r>=n?e:Cs(e,t,r)}function Ls(e){return e!=e}function bs(e,t,r){return t==t?function(e,t,r){for(var n=r-1,s=e.length;++n<s;)if(e[n]===t)return n;return-1}(e,t,r):function(e,t,r,n){for(var s=e.length,i=r+(n?1:-1);n?i--:++i<s;)if(t(e[i],i,e))return i;return-1}(e,Ls,r)}var Ns="\\ud800-\\udfff",As="["+Ns+"]",xs="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Es="\\ud83c[\\udffb-\\udfff]",Ts="[^"+Ns+"]",Ss="(?:\\ud83c[\\udde6-\\uddff]){2}",Zs="[\\ud800-\\udbff][\\udc00-\\udfff]",vs="(?:"+xs+"|"+Es+")"+"?",Ys="[\\ufe0e\\ufe0f]?",Xs=Ys+vs+("(?:\\u200d(?:"+[Ts,Ss,Zs].join("|")+")"+Ys+vs+")*"),js="(?:"+[Ts+xs+"?",xs,Ss,Zs,As].join("|")+")",zs=RegExp(Es+"(?="+Es+")|"+js+Xs,"g");function Gs(e){return ts(e)?function(e){return e.match(zs)||[]}(e):function(e){return e.split("")}(e)}function Ws(e,t,r){if((e=de(e))&&(r||void 0===t))return nr(e);if(!e||!(t=ce(t)))return e;var n=Gs(e),s=Gs(t),i=function(e,t){for(var r=-1,n=e.length;++r<n&&bs(t,e[r],0)>-1;);return r}(n,s),o=function(e,t){for(var r=e.length;r--&&bs(t,e[r],0)>-1;);return r}(n,s)+1;return hs(n,i,o).join("")}function Ks(e,t){if(!er(e))return[];if(!er(t))return[];let r=function(e,t){return er(e)&&er(t)?e.split(t):[]}(e,t);r=Ot(r,Ws);let n=[];return _r(r,function(e){er(e)&&n.push(e)}),n}const ks=new Uint8Array([0,97,115,109,1,0,0,0,1,48,8,96,3,127,127,127,1,127,96,3,127,127,127,0,96,2,127,127,0,96,1,127,1,127,96,3,127,127,126,1,126,96,3,126,127,127,1,126,96,2,127,126,0,96,1,127,1,126,3,11,10,0,0,2,1,3,4,5,6,1,7,5,3,1,0,1,7,85,9,3,109,101,109,2,0,5,120,120,104,51,50,0,0,6,105,110,105,116,51,50,0,2,8,117,112,100,97,116,101,51,50,0,3,8,100,105,103,101,115,116,51,50,0,4,5,120,120,104,54,52,0,5,6,105,110,105,116,54,52,0,7,8,117,112,100,97,116,101,54,52,0,8,8,100,105,103,101,115,116,54,52,0,9,10,251,22,10,242,1,1,4,127,32,0,32,1,106,33,3,32,1,65,16,79,4,127,32,3,65,16,107,33,6,32,2,65,168,136,141,161,2,106,33,3,32,2,65,137,235,208,208,7,107,33,4,32,2,65,207,140,162,142,6,106,33,5,3,64,32,3,32,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,3,32,4,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,2,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,2,32,5,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,5,32,6,32,0,65,4,106,34,0,79,13,0,11,32,2,65,12,119,32,5,65,18,119,106,32,4,65,7,119,106,32,3,65,1,119,106,5,32,2,65,177,207,217,178,1,106,11,32,1,106,32,0,32,1,65,15,113,16,1,11,146,1,0,32,1,32,2,106,33,2,3,64,32,1,65,4,106,32,2,75,69,4,64,32,0,32,1,40,2,0,65,189,220,202,149,124,108,106,65,17,119,65,175,214,211,190,2,108,33,0,32,1,65,4,106,33,1,12,1,11,11,3,64,32,1,32,2,79,69,4,64,32,0,32,1,45,0,0,65,177,207,217,178,1,108,106,65,11,119,65,177,243,221,241,121,108,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,32,0,65,15,118,115,65,247,148,175,175,120,108,34,0,65,13,118,32,0,115,65,189,220,202,149,124,108,34,0,65,16,118,32,0,115,11,63,0,32,0,65,8,106,32,1,65,168,136,141,161,2,106,54,2,0,32,0,65,12,106,32,1,65,137,235,208,208,7,107,54,2,0,32,0,65,16,106,32,1,54,2,0,32,0,65,20,106,32,1,65,207,140,162,142,6,106,54,2,0,11,195,4,1,6,127,32,1,32,2,106,33,6,32,0,65,24,106,33,4,32,0,65,40,106,40,2,0,33,3,32,0,32,0,40,2,0,32,2,106,54,2,0,32,0,65,4,106,34,5,32,5,40,2,0,32,2,65,16,79,32,0,40,2,0,65,16,79,114,114,54,2,0,32,2,32,3,106,65,16,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,40,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,16,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,32,3,40,2,0,32,4,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,12,106,34,3,32,3,40,2,0,32,4,65,4,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,16,106,34,3,32,3,40,2,0,32,4,65,8,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,20,106,34,3,32,3,40,2,0,32,4,65,12,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,40,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,32,6,65,16,107,77,4,64,32,6,65,16,107,33,8,32,0,65,8,106,40,2,0,33,2,32,0,65,12,106,40,2,0,33,3,32,0,65,16,106,40,2,0,33,5,32,0,65,20,106,40,2,0,33,7,3,64,32,2,32,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,2,32,3,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,3,32,5,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,5,32,7,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,7,32,8,32,1,65,4,106,34,1,79,13,0,11,32,0,65,8,106,32,2,54,2,0,32,0,65,12,106,32,3,54,2,0,32,0,65,16,106,32,5,54,2,0,32,0,65,20,106,32,7,54,2,0,11,32,1,32,6,73,4,64,32,4,32,1,32,6,32,1,107,34,1,252,10,0,0,32,0,65,40,106,32,1,54,2,0,11,11,97,1,1,127,32,0,65,16,106,40,2,0,33,1,32,0,65,4,106,40,2,0,4,127,32,1,65,12,119,32,0,65,20,106,40,2,0,65,18,119,106,32,0,65,12,106,40,2,0,65,7,119,106,32,0,65,8,106,40,2,0,65,1,119,106,5,32,1,65,177,207,217,178,1,106,11,32,0,40,2,0,106,32,0,65,24,106,32,0,65,40,106,40,2,0,16,1,11,255,3,2,3,126,1,127,32,0,32,1,106,33,6,32,1,65,32,79,4,126,32,6,65,32,107,33,6,32,2,66,214,235,130,238,234,253,137,245,224,0,124,33,3,32,2,66,177,169,172,193,173,184,212,166,61,125,33,4,32,2,66,249,234,208,208,231,201,161,228,225,0,124,33,5,3,64,32,3,32,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,3,32,4,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,4,32,2,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,2,32,5,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,5,32,6,32,0,65,8,106,34,0,79,13,0,11,32,2,66,12,137,32,5,66,18,137,124,32,4,66,7,137,124,32,3,66,1,137,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,4,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,2,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,5,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,5,32,2,66,197,207,217,178,241,229,186,234,39,124,11,32,1,173,124,32,0,32,1,65,31,113,16,6,11,134,2,0,32,1,32,2,106,33,2,3,64,32,2,32,1,65,8,106,79,4,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,27,137,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,33,0,32,1,65,8,106,33,1,12,1,11,11,32,1,65,4,106,32,2,77,4,64,32,0,32,1,53,2,0,66,135,149,175,175,152,182,222,155,158,127,126,133,66,23,137,66,207,214,211,190,210,199,171,217,66,126,66,249,243,221,241,153,246,153,171,22,124,33,0,32,1,65,4,106,33,1,11,3,64,32,1,32,2,73,4,64,32,0,32,1,49,0,0,66,197,207,217,178,241,229,186,234,39,126,133,66,11,137,66,135,149,175,175,152,182,222,155,158,127,126,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,32,0,66,33,136,133,66,207,214,211,190,210,199,171,217,66,126,34,0,32,0,66,29,136,133,66,249,243,221,241,153,246,153,171,22,126,34,0,32,0,66,32,136,133,11,77,0,32,0,65,8,106,32,1,66,214,235,130,238,234,253,137,245,224,0,124,55,3,0,32,0,65,16,106,32,1,66,177,169,172,193,173,184,212,166,61,125,55,3,0,32,0,65,24,106,32,1,55,3,0,32,0,65,32,106,32,1,66,249,234,208,208,231,201,161,228,225,0,124,55,3,0,11,244,4,2,3,127,4,126,32,1,32,2,106,33,5,32,0,65,40,106,33,4,32,0,65,200,0,106,40,2,0,33,3,32,0,32,0,41,3,0,32,2,173,124,55,3,0,32,2,32,3,106,65,32,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,200,0,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,32,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,32,3,41,3,0,32,4,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,16,106,34,3,32,3,41,3,0,32,4,65,8,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,24,106,34,3,32,3,41,3,0,32,4,65,16,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,32,106,34,3,32,3,41,3,0,32,4,65,24,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,200,0,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,65,32,106,32,5,77,4,64,32,5,65,32,107,33,2,32,0,65,8,106,41,3,0,33,6,32,0,65,16,106,41,3,0,33,7,32,0,65,24,106,41,3,0,33,8,32,0,65,32,106,41,3,0,33,9,3,64,32,6,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,7,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,7,32,8,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,8,32,9,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,9,32,2,32,1,65,8,106,34,1,79,13,0,11,32,0,65,8,106,32,6,55,3,0,32,0,65,16,106,32,7,55,3,0,32,0,65,24,106,32,8,55,3,0,32,0,65,32,106,32,9,55,3,0,11,32,1,32,5,73,4,64,32,4,32,1,32,5,32,1,107,34,1,252,10,0,0,32,0,65,200,0,106,32,1,54,2,0,11,11,188,2,1,5,126,32,0,65,24,106,41,3,0,33,1,32,0,41,3,0,34,2,66,32,90,4,126,32,0,65,8,106,41,3,0,34,3,66,1,137,32,0,65,16,106,41,3,0,34,4,66,7,137,124,32,1,66,12,137,32,0,65,32,106,41,3,0,34,5,66,18,137,124,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,4,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,1,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,5,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,5,32,1,66,197,207,217,178,241,229,186,234,39,124,11,32,2,124,32,0,65,40,106,32,2,66,31,131,167,16,6,11]);async function Fs(e,t={}){let r=Hr();try{let n=Me(t,"fs"),s=Me(t,"chunkSize");if(hr(s)||(s=67108864),s=Cr(s),s>2**30&&(s=67108864),!Or(e,{fs:n}))return r.reject("fp is not a file"),r;let{create64:i}=await async function(){return function(e){const{exports:{mem:t,xxh32:r,xxh64:n,init32:s,update32:i,digest32:o,init64:u,update64:l,digest64:a}}=e;let c=new Uint8Array(t.buffer);function d(e,r){if(t.buffer.byteLength<e+r){const n=Math.ceil((e+r-t.buffer.byteLength)/65536);t.grow(n),c=new Uint8Array(t.buffer)}}function w(e,t,r,n,s,i){d(e);const o=new Uint8Array(e);return c.set(o),r(0,t),o.set(c.subarray(0,e)),{update(t){let r;return c.set(o),"string"==typeof t?(d(3*t.length,e),r=g.encodeInto(t,c.subarray(e)).written):(d(t.byteLength,e),c.set(t,e),r=t.byteLength),n(0,e,r),o.set(c.subarray(0,e)),this},digest:()=>(c.set(o),i(s(0)))}}function D(e){return e>>>0}const y=2n**64n-1n;function M(e){return e&y}const g=new TextEncoder;function m(e,t=0){return d(3*e.length,0),D(r(0,g.encodeInto(e,c).written,t))}function I(e,t=0n){return d(3*e.length,0),M(n(0,g.encodeInto(e,c).written,t))}return{h32:m,h32ToString:(e,t=0)=>m(e,t).toString(16).padStart(8,"0"),h32Raw:(e,t=0)=>(d(e.byteLength,0),c.set(e),D(r(0,e.byteLength,t))),create32:(e=0)=>w(48,e,s,i,o,D),h64:I,h64ToString:(e,t=0n)=>I(e,t).toString(16).padStart(16,"0"),h64Raw:(e,t=0n)=>(d(e.byteLength,0),c.set(e),M(n(0,e.byteLength,t))),create64:(e=0n)=>w(88,e,u,l,a,M)}}((await WebAssembly.instantiate(ks)).instance)}(),o=i(),u=n.createReadStream(e,{highWaterMark:s}),l=e=>{r.reject(Zn(e));try{u.destroy()}catch(e){}};u.on("data",e=>{try{o.update(e)}catch(e){l(e)}}),u.on("end",()=>{try{let e=o.digest().toString(16).padStart(16,"0");r.resolve(e)}catch(e){l(e)}}),u.on("error",e=>{r.reject(Zn(e))})}catch(e){r.reject(Zn(e))}return r}var Vs={exports:{}};!function(e){var t,r;e.exports=(t=o,r={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function s(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new s(n,i||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,s=[];if(0===this._eventsCount)return s;for(n in e=this._events)t.call(e,n)&&s.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,i=n.length,o=new Array(i);s<i;s++)o[s]=n[s].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,s,i,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,i),!0;case 6:return c.fn.call(c.context,t,n,s,i,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,D=c.length;for(a=0;a<D;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,s);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return i(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return i(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,s){var i=r?r+e:e;if(!this._events[i])return this;if(!t)return o(this,i),this;var u=this._events[i];if(u.fn)u.fn!==t||s&&!u.once||n&&u.context!==n||o(this,i);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||s&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[i]=1===a.length?a[0]:a:o(this,i)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}({get exports(){return t},set exports(e){t=e}});var r=t;let n;return function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(s="J3VzZSBzdHJpY3QnCgoKCjsoZnVuY3Rpb24gKHBhcmVudFBvcnQsIG1kRGVmYXVsdCkgewoKbGV0IGluc3RhbmNlID0gbnVsbApsZXQgaW5pdEZhaWwgPSBudWxsIC8v5Yid5aeL5YyW5aSx5pWXKOW3peW7oOWHveaVuOaLi+mMr+etiSnmmYLkuYt7IGVyciB9LCDku6Xnianku7bljIXoo53lm6DpjK/oqqTlgLzlj6/ngrrku7vmhI/lgLw7IOW+jOe6jOWRvOWPq+S7peWFtuWOn+Wni+mMr+iqpOWbnuaHiQpmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBtZERlZmF1bHQKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEsIGRlc2MpIHsKICAgIHRyeSB7CiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgfQogICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vZGF0YeWQq+eEoeazlee1kOani+WMluikh+ijveS5i+WFp+WuuSjlh73mlbjjgIFTeW1ib2znrYkp5pmCcG9zdE1lc3NhZ2XlkIzmraXmi4tEYXRhQ2xvbmVFcnJvcjog5LiN6JmV55CG5YmH5ouL5pa85ZG85Y+r6Lev5b6R5aSWLCDmlrxub2RlanPmiJB3b3JrZXLmnKrmjZXmjYnpjK/oqqTogIzltKnmvbAo5oyB5LmF6IiH5bel5bug5a+m6auU5b6e5q2k5q275LqhKSwg5pa854CP6Ka95Zmo5oiQ5pyq6JmV55CGcmVqZWN0aW9u6ICM5ZG85Y+r5rC45LmF5oe4572uOwogICAgICAgIC8v5L6d6KiK5oGv6aGe5Z6L5pS56YCB5Y+v6KSH6KO95LmL5a2X5Liy6Kqq5piOKGRlc2PngrrlhaflrrnkuYvmj4/ov7ApLCDkvb/lkbzlj6vnq6/lvpfliLDlhbflkI3ljp/lm6DkuJR3b3JrZXLnuozlj6/mnI3li5k7IOWFnOW6leWGjeWkseaVl+WNs+aUvuajhCwg5LiN5Y+v6YGe6L+0CiAgICAgICAgbGV0IG1zZyA9ICcnCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbXNnID0gZGVzYyArICcgY291bGQgbm90IGJlIGNsb25lZDogJyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgICAgIGxldCBkYXRhU2FmZSA9IG51bGwKICAgICAgICBpZiAoZGF0YS5tb2RlID09PSAncmV0dXJuJykgewogICAgICAgICAgICBkYXRhU2FmZSA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGF0YS5tb2RlID09PSAnZW1pdCcpIHsKICAgICAgICAgICAgZGF0YVNhZmUgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRhdGFTYWZlID0gewogICAgICAgICAgICAgICAgbW9kZTogZGF0YS5tb2RlLCAvL21lc3NhZ2VlcnJvcuS5i+mAmuefpeS4jeWPr+eVpemBjiwg5ZCm5YmH5aSW5bGk5ZG85Y+r5Lit5LmLcGVuZGluZ+aHuOe9rgogICAgICAgICAgICAgICAgbXNnLAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YVNhZmUpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBtZERlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKCiAgICAgICAgICAgIC8vaW5pdEZhaWwKICAgICAgICAgICAgaW5pdEZhaWwgPSB7IGVyciB9CgogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMsICdpbml0IGVycm9yJykKCiAgICAgICAgfQoKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9jaGVjaywg5Yid5aeL5YyW5aSx5pWX5pmCaW5zdGFuY2XngrpudWxsLCDku6XliJ3lp4vljJbkuYvljp/lp4vpjK/oqqTlm57mh4ko5ZCM5bu656uL5aSx5pWX5LmL6JmV572uKSwg5LiN5b6X5bCNbnVsbOWPluWAvOiAjOW+l+iqpOWwjuS5i1R5cGVFcnJvcgogICAgICAgICAgICBpZiAoaW5pdEZhaWwpIHsKICAgICAgICAgICAgICAgIHRocm93IGluaXRGYWlsLmVycgogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2Z1biwg6aCI54K65Ye95pW4LCDlkKbliYfku6XlhbflkI3oqIrmga/mi5LntZUo5LiN5b6X54K65bCNdW5kZWZpbmVk5Y+W5YC85oiW5ZG85Y+r5LmL6Kqk5bCOVHlwZUVycm9yKQogICAgICAgICAgICBsZXQgZnVuID0gKGluc3RhbmNlICE9PSBudWxsICYmIGluc3RhbmNlICE9PSB1bmRlZmluZWQpID8gaW5zdGFuY2VbZGF0YS5mdW5dIDogdW5kZWZpbmVkCiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uWycgKyBkYXRhLmZ1biArICddIGlzIG5vdCBhIGZ1bmN0aW9uIGluIHdvcmtlcicpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjLCDku6Vhd2FpdOWPluWAvDog6Z2eYXN5bmPlh73mlbjlm57lgrPpnZ5wcm9taXNl5pmC5Lqm5Y+v5Lqk5LuYLCDkuI3lvpflm6Dlkbzlj6sudGhlbuiAjOWkseaVlzsg5LulUmVmbGVjdC5hcHBseeaMh+WumnRoaXMo6KaLY3RoaXMpCiAgICAgICAgICAgIG1zZyA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuLCB1bmRlZmluZWQsIGlucHV0KQogICAgICAgICAgICBzdGF0ZSA9ICdzdWNjZXNzJwoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KCiAgICAgICAgLy9kZXNjLCDlm57mh4nlhaflrrnnhKHms5XntZDmp4vljJbopIfoo73mmYLlhZzlupXoqqrmmI7kuYvmj4/ov7AKICAgICAgICBsZXQgZGVzYyA9ICcnCiAgICAgICAgaWYgKHN0YXRlID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgZGVzYyA9ICdyZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluaXRGYWlsKSB7CiAgICAgICAgICAgIGRlc2MgPSAnaW5pdCBlcnJvcicKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2MgPSAncmVqZWN0ZWQgdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQoKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMsIGRlc2MpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZWVycm9yJywgKGVycikgPT4gewogICAgICAgICAgICBzZW5kTWVzc2FnZSh7IG1vZGU6ICdtZXNzYWdlZXJyb3InLCBtc2c6IGVyciB9LCAnbWVzc2FnZWVycm9yIG9mIHdvcmtlcicpCiAgICAgICAgfSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhHdvcmtlcuWFp+acquaNleaNiemMr+iqpCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuipsuS6jOebo+iBveacg+mYu+atondvcmtlcuS+nemgkOioree1guatoiwg5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOiAjOS7pHBlbmRpbmfmsLjkuYXmh7jnva4sIOaureWxjXdvcmtlcuS4puS7pOWuv+S4u+eEoeazlemAgOWHujsKICAgIC8v6Yyv6Kqk6ZuW5bey57aTZXJyb3Lkuovku7blgrPoh7PlpJblsaRyZWplY3QgcGVuZGluZywg5L2G54ShcGVuZGluZ+S4lOWRvOWPq+err+acquebo+iBvWVycm9y5pmCKGV2ZW50ZW1pdHRlcjPnhKHnm6Pogb3ogIXmmYJlbWl05LiN5ouL6YyvKeatpOi8uOWHuueCuuWUr+S4gOeXlei3oSwg5pWF5L+d55WZOwogICAgLy/mnKznm6Pogb3mlrzooqvljIXoo53nqIvlvI/norzln7fooYzkuYvlvozmiY3lronoo50sIOi8ieWFpeacn+S5i+mMr+iqpOS4jee2k+atpOiomOmMhAogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikgLy/oqLrmlrfovLjlh7roh7NzdGRlcnIo5ZCMTm9kZeacquaNleaNiemMr+iqpOS5i+aFo+S+iyksIHdvcmtlcuS5i3N0ZGlv6L2J6YCB6Iez5a6/5Li7LCDkuI3lvpfmt7flhaXlrr/kuLtzdGRvdXTkuYvos4fmlpnmtYEKICAgIH0pCgp9CmNhdGNoKGVycil7fQoKfSkoCi8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwpyZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLnBhcmVudFBvcnQsIC8vaW5uZXLku6VuZXcgV29ya2VyKGNvZGUsIHsgZXZhbDogdHJ1ZSB9KeWft+ihjCwgZXZhbOWtl+S4sumgkOioreS7pUNvbW1vbkpT6Kej5p6QKOiIh3BhY2thZ2UuanNvbuS5i3R5cGXnhKHpl5wsIOWDheeUsS0taW5wdXQtdHlwZeaxuuWumiksIOaVheW+l+S9v+eUqHJlcXVpcmUKLy/oqK3oqIjpmZDliLY6IOWuv+S4u+S7pS0taW5wdXQtdHlwZT1tb2R1bGXllZ/li5XmmYJ3b3JrZXLnubzmib/oqbLlj4PmlbgsIGlubmVy6KKr55W2RVNN6Kej5p6Q6ICMcmVxdWlyZeWkseaViCwg5bGs5LiN5pSv5o+05LmL5Z+36KGM5pa55byPCi8v6Iul6KaB5pa8bm9kZWpzIHdvcmtlcuWFp+S9v+eUqOeEoeazlei9ieitr+eahOWOn+eUn+Wll+S7tuS+i+WmgmZzLCDpgb/lhY3kvb/nlKjpoILlsaRpbXBvcnTliqDovInkvb/nlKgsIOWboOeEoeazlei9ieitr+acg+ebtOaOpeS/neeVmQovL+S4puWboGV2YWzlrZfkuLLngrpDb21tb25KU+iAjOS4jeaOpeWPl2ltcG9ydCwg5pWF5Ye654++6Yyv6Kqk54Sh5rOV6L2J6K2vCihmdW5jdGlvbiAoKSB7CgogICAgLy/kvb/nlKjogIXnqIvlvI/norwoY2pzKSwg5LulQ29tbW9uSlPmqKHntYTljIXoo53lh73mlbjln7fooYw7IOiIh+S4iuaWuWlubmVy5LmL5Ye95pW454K65YWE5byf5L2c55So5Z+fLCDkupLkuI3lj6/oposKICAgIGxldCBtZFVzZXIgPSAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICE9PSBudWxsKSA/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIikscj1yZXF1aXJlKCJmcyIpLGU9cmVxdWlyZSgiZXZlbnRzIiksbj1BcnJheS5pc0FycmF5LG89Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLGk9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1PW98fGl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYT11LlN5bWJvbCxjPU9iamVjdC5wcm90b3R5cGUsZj1jLmhhc093blByb3BlcnR5LHM9Yy50b1N0cmluZyxsPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgcD0iW29iamVjdCBOdWxsXSIseT0iW29iamVjdCBVbmRlZmluZWRdIixnPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gdih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10P3k6cDpnJiZnIGluIE9iamVjdCh0KT9mdW5jdGlvbih0KXt2YXIgcj1mLmNhbGwodCxsKSxlPXRbbF07dHJ5e3RbbF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKHQpe312YXIgbz1zLmNhbGwodCk7cmV0dXJuIG4mJihyP3RbbF09ZTpkZWxldGUgdFtsXSksb30odCk6ZnVuY3Rpb24odCl7cmV0dXJuIGguY2FsbCh0KX0odCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBkPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIF8odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxiKHQpJiZ2KHQpPT1kfXZhciBqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLFM9L15cdyokLztmdW5jdGlvbiBtKHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PXJ8fCJmdW5jdGlvbiI9PXIpfXZhciB3PSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixPPSJbb2JqZWN0IEZ1bmN0aW9uXSIsRT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLE49IltvYmplY3QgUHJveHldIjt2YXIgQSxSPXVbIl9fY29yZS1qc19zaGFyZWRfXyJdLHg9KEE9L1teLl0rJC8uZXhlYyhSJiZSLmtleXMmJlIua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0E6IiI7dmFyICQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBJPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHo9RnVuY3Rpb24ucHJvdG90eXBlLFA9T2JqZWN0LnByb3RvdHlwZSxGPXoudG9TdHJpbmcsTD1QLmhhc093blByb3BlcnR5LFQ9UmVnRXhwKCJeIitGLmNhbGwoTCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gTSh0KXtpZighbSh0KXx8KHI9dCx4JiZ4IGluIHIpKXJldHVybiExO3ZhciByLGU9ZnVuY3Rpb24odCl7aWYoIW0odCkpcmV0dXJuITE7dmFyIHI9dih0KTtyZXR1cm4gcj09T3x8cj09RXx8cj09d3x8cj09Tn0odCk/VDpJO3JldHVybiBlLnRlc3QoZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiAkLmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifSh0KSl9ZnVuY3Rpb24gayh0LHIpe3ZhciBlPWZ1bmN0aW9uKHQscil7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbcl19KHQscik7cmV0dXJuIE0oZSk/ZTp2b2lkIDB9dmFyIFU9ayhPYmplY3QsImNyZWF0ZSIpO3ZhciBDPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIEc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKHQpe3ZhciByPS0xLGU9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytyPGU7KXt2YXIgbj10W3JdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHEodCxyKXtmb3IodmFyIGUsbixvPXQubGVuZ3RoO28tLTspaWYoKGU9dFtvXVswXSk9PT0obj1yKXx8ZSE9ZSYmbiE9bilyZXR1cm4gbztyZXR1cm4tMX1XLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189VT9VKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxXLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPXI/MTowLHJ9LFcucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fO2lmKFUpe3ZhciBlPXJbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09ZT92b2lkIDA6ZX1yZXR1cm4gQy5jYWxsKHIsdCk/clt0XTp2b2lkIDB9LFcucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiBVP3ZvaWQgMCE9PXJbdF06Ry5jYWxsKHIsdCl9LFcucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLGVbdF09VSYmdm9pZCAwPT09cj8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6cix0aGlzfTt2YXIgRD1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIFgodCl7dmFyIHI9LTEsZT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3I8ZTspe3ZhciBuPXRbcl07dGhpcy5zZXQoblswXSxuWzFdKX19WC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxYLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPXEocix0KTtyZXR1cm4hKGU8MCkmJihlPT1yLmxlbmd0aC0xP3IucG9wKCk6RC5jYWxsKHIsZSwxKSwtLXRoaXMuc2l6ZSwhMCl9LFgucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fLGU9cShyLHQpO3JldHVybiBlPDA/dm9pZCAwOnJbZV1bMV19LFgucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gcSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxYLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cShlLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLGUucHVzaChbdCxyXSkpOmVbbl1bMV09cix0aGlzfTt2YXIgQj1rKHUsIk1hcCIpO2Z1bmN0aW9uIEgodCxyKXt2YXIgZSxuLG89dC5fX2RhdGFfXztyZXR1cm4oInN0cmluZyI9PShuPXR5cGVvZihlPXIpKXx8Im51bWJlciI9PW58fCJzeW1ib2wiPT1ufHwiYm9vbGVhbiI9PW4/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lKT9vWyJzdHJpbmciPT10eXBlb2Ygcj8ic3RyaW5nIjoiaGFzaCJdOm8ubWFwfWZ1bmN0aW9uIEoodCl7dmFyIHI9LTEsZT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3I8ZTspe3ZhciBuPXRbcl07dGhpcy5zZXQoblswXSxuWzFdKX19Si5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBXLG1hcDpuZXcoQnx8WCksc3RyaW5nOm5ldyBXfX0sSi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciByPUgodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09cj8xOjAscn0sSi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMsdCkuZ2V0KHQpfSxKLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIEgodGhpcyx0KS5oYXModCl9LEoucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3ZhciBlPUgodGhpcyx0KSxuPWUuc2l6ZTtyZXR1cm4gZS5zZXQodCxyKSx0aGlzLnNpemUrPWUuc2l6ZT09bj8wOjEsdGhpc307dmFyIEs9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIFEodCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihLKTt2YXIgZT1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxvPXI/ci5hcHBseSh0aGlzLG4pOm5bMF0saT1lLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgdT10LmFwcGx5KHRoaXMsbik7cmV0dXJuIGUuY2FjaGU9aS5zZXQobyx1KXx8aSx1fTtyZXR1cm4gZS5jYWNoZT1uZXcoUS5DYWNoZXx8SiksZX1RLkNhY2hlPUo7dmFyIFYsWSxaLHR0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJ0PS9cXChcXCk/L2csZXQ9KFY9ZnVuY3Rpb24odCl7dmFyIHI9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZyLnB1c2goIiIpLHQucmVwbGFjZSh0dCwoZnVuY3Rpb24odCxlLG4sbyl7ci5wdXNoKG4/by5yZXBsYWNlKHJ0LCIkMSIpOmV8fHQpfSkpLHJ9LFk9UShWLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09Wi5zaXplJiZaLmNsZWFyKCksdH0pKSxaPVkuY2FjaGUsWSksbnQ9ZXQ7dmFyIG90PTEvMCxpdD1hP2EucHJvdG90eXBlOnZvaWQgMCx1dD1pdD9pdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gYXQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG4odCkpcmV0dXJuIGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytlPG47KW9bZV09cih0W2VdLGUsdCk7cmV0dXJuIG99KHQsYXQpKyIiO2lmKF8odCkpcmV0dXJuIHV0P3V0LmNhbGwodCk6IiI7dmFyIHI9dCsiIjtyZXR1cm4iMCI9PXImJjEvdD09LW90PyItMCI6cn1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gbnVsbD09dD8iIjphdCh0KX1mdW5jdGlvbiBmdCh0LHIpe3JldHVybiBuKHQpP3Q6ZnVuY3Rpb24odCxyKXtpZihuKHQpKXJldHVybiExO3ZhciBlPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPWUmJiJzeW1ib2wiIT1lJiYiYm9vbGVhbiIhPWUmJm51bGwhPXQmJiFfKHQpKXx8Uy50ZXN0KHQpfHwhai50ZXN0KHQpfHxudWxsIT1yJiZ0IGluIE9iamVjdChyKX0odCxyKT9bdF06bnQoY3QodCkpfXZhciBzdD0xLzA7ZnVuY3Rpb24gbHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxfKHQpKXJldHVybiB0O3ZhciByPXQrIiI7cmV0dXJuIjAiPT1yJiYxL3Q9PS1zdD8iLTAiOnJ9ZnVuY3Rpb24gaHQodCxyLGUpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPTAsbj0ocj1mdChyLHQpKS5sZW5ndGg7bnVsbCE9dCYmZTxuOyl0PXRbbHQocltlKytdKV07cmV0dXJuIGUmJmU9PW4/dDp2b2lkIDB9KHQscik7cmV0dXJuIHZvaWQgMD09PW4/ZTpufWZ1bmN0aW9uIHB0KHQscj17fSl7bGV0IGU9aHQociwiZnMiKSxuPSExO3RyeXtlLnN0YXRTeW5jKHQpLG49ITB9Y2F0Y2h7bj0hMX1yZXR1cm4gbn1mdW5jdGlvbiB5dCh0LHI9e30pe2xldCBlPWh0KHIsImZzIik7cmV0dXJuISFwdCh0LHtmczplfSkmJighZS5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIWUubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCkpfWZ1bmN0aW9uIGd0KCl7bGV0IHQscixlPW5ldyBQcm9taXNlKChmdW5jdGlvbigpe3Q9YXJndW1lbnRzWzBdLHI9YXJndW1lbnRzWzFdfSkpO3JldHVybiBlLnJlc29sdmU9dCxlLnJlamVjdD1yLGV9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBidCh0KXtpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2ZvcihsZXQgciBpbiB0KXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGR0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF90KHQpe2lmKHQhPXQpcmV0dXJuITA7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl0cnl7bGV0IHI9TnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodCk7cmV0dXJuIE51bWJlci5pc05hTihyKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4hIWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IFVuZGVmaW5lZF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KXx8KCEhZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgTnVsbF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KXx8KCEhYnQodCl8fCghIWZ1bmN0aW9uKHQpe3JldHVybiEoIWR0KHQpfHwwIT09dC5sZW5ndGgpfSh0KXx8KCEhZnVuY3Rpb24odCl7cmV0dXJuISF2dCh0KSYmMD09PXQubGVuZ3RofSh0KXx8ISFfdCh0KSkpKSl9ZnVuY3Rpb24gU3QodCl7cmV0dXJuISEoZHQodCkmJnQubGVuZ3RoPjApfXZhciBtdD0vXHMvO3ZhciB3dD0vXlxzKy87ZnVuY3Rpb24gT3QodCl7cmV0dXJuIHQ/dC5zbGljZSgwLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aDtyLS0mJm10LnRlc3QodC5jaGFyQXQocikpOyk7cmV0dXJuIHJ9KHQpKzEpLnJlcGxhY2Uod3QsIiIpOnR9dmFyIEV0PU5hTixOdD0vXlstK10weFswLTlhLWZdKyQvaSxBdD0vXjBiWzAxXSskL2ksUnQ9L14wb1swLTddKyQvaSx4dD1wYXJzZUludDtmdW5jdGlvbiAkdCh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoXyh0KSlyZXR1cm4gRXQ7aWYobSh0KSl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9bShyKT9yKyIiOnJ9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9T3QodCk7dmFyIGU9QXQudGVzdCh0KTtyZXR1cm4gZXx8UnQudGVzdCh0KT94dCh0LnNsaWNlKDIpLGU/Mjo4KTpOdC50ZXN0KHQpP0V0Oit0fXZhciBJdD0xLzAsenQ9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2Z1bmN0aW9uIFB0KHQpe3JldHVybiB0Pyh0PSR0KHQpKT09PUl0fHx0PT09LUl0Pyh0PDA/LTE6MSkqenQ6dD09dD90OjA6MD09PXQ/dDowfWZ1bmN0aW9uIEZ0KHQpe3ZhciByPVB0KHQpLGU9ciUxO3JldHVybiByPT1yP2U/ci1lOnI6MH12YXIgTHQ9IltvYmplY3QgQm9vbGVhbl0iO2Z1bmN0aW9uIFR0KHQpe3JldHVybiEwPT09KHI9dCl8fCExPT09cnx8YihyKSYmdihyKT09THQ7dmFyIHJ9ZnVuY3Rpb24gTXQodCl7bGV0IHI9ITE7aWYoU3QodCkpe2lmKCIiPT09dC50cmltKCkpcmV0dXJuITE7cj0haXNOYU4oTnVtYmVyKHQpKX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KSl7aWYoX3QodCkpcmV0dXJuITE7cj0hMH1yZXR1cm4gcn1mdW5jdGlvbiBrdCh0KXtpZighTXQodCkpcmV0dXJuIDA7cmV0dXJuIFB0KHQpfWZ1bmN0aW9uIFV0KHQscj17fSl7bGV0IGU9aHQociwidXNlTGltaXRTYWZlIixudWxsKTtyZXR1cm4gVHQoZSl8fChlPSExKSwhIU10KHQpJiYodD1rdCh0KSxlP051bWJlci5pc1NhZmVJbnRlZ2VyKHQpOiJudW1iZXIiPT10eXBlb2Yobj10KSYmbj09RnQobikpO3ZhciBufXZhciBDdD11LmlzRmluaXRlLEd0PU1hdGgubWluO3ZhciBXdD1mdW5jdGlvbih0KXt2YXIgcj1NYXRoW3RdO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQ9JHQodCksKGU9bnVsbD09ZT8wOkd0KEZ0KGUpLDI5MikpJiZDdCh0KSl7dmFyIG49KGN0KHQpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKChuPShjdChyKG5bMF0rImUiKygrblsxXStlKSkpKyJlIikuc3BsaXQoImUiKSlbMF0rImUiKygrblsxXS1lKSl9cmV0dXJuIHIodCl9fSgicm91bmQiKSxxdD1XdDtmdW5jdGlvbiBEdCh0LHI9e30pe2xldCBlPWh0KHIsInVzZUNsYW1wU2FmZSIsbnVsbCk7VHQoZSl8fChlPSExKTtsZXQgbj1odChyLCJ1c2VMaW1pdFNhZmUiLG51bGwpO1R0KG4pfHwobj0hMSk7bGV0IG89aHQociwicmV0dXJuV2l0aFN0YXRlQW5kTXNnIixudWxsKTtUdChvKXx8KG89ITEpO2xldCBpPXQ9Pm8/e3N0YXRlOiJzdWNjZXNzIixtc2c6dH06dCx1PXQ9PntpZihvKXJldHVybntzdGF0ZToiZXJyb3IiLG1zZzp0fTt0aHJvdyBuZXcgRXJyb3IodCl9O2lmKCFNdCh0KSlyZXR1cm4gaSgwKTtsZXQgYT1udWxsO3RyeXt0PWt0KHQpLGE9cXQodCksZSYmKGE+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/YT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjphPE51bWJlci5NSU5fU0FGRV9JTlRFR0VSJiYoYT1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpfWNhdGNoKHQpe3JldHVybiB1KHQudG9TdHJpbmcoKSl9cmV0dXJuIG4mJiFOdW1iZXIuaXNTYWZlSW50ZWdlcihOdW1iZXIoYSkpP3UoYHZbJHt0fV0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk6KCIwIj09PVN0cmluZyhhKSYmKGE9MCksaShhKSl9ZnVuY3Rpb24gWHQodCxyPXt9KXtpZighVXQodCxyKSlyZXR1cm4hMTtyZXR1cm4gRHQodCk+PTB9ZnVuY3Rpb24gQnQodCxyKXtpZighU3QodCkpcmV0dXJuIiI7aWYoIVh0KHIpKXJldHVybiIiO2lmKDA9PT0ocj1EdChyKSkpcmV0dXJuIiI7bGV0IGU9dC5sZW5ndGgtcjtyZXR1cm4gZTwwJiYoZT0wKSx0LnN1YnN0cmluZyhlLGUrcil9ZnVuY3Rpb24gSHQodCxyKXtyZXR1cm4gU3QodCkmJlh0KHIpPzA9PT0ocj1EdChyKSk/dDpmdW5jdGlvbih0LHIpe3JldHVybiBTdCh0KSYmWHQocik/MD09PShyPUR0KHIpKT8iIjp0LnN1YnN0cmluZygwLHIpOiIifSh0LHQubGVuZ3RoLXIpOiIifWZ1bmN0aW9uIEp0KHQpe2lmKCFTdCh0KSlyZXR1cm57cGF0aDoiIixpc1Jvb3Q6ITF9O2Zvcig7dC5pbmRleE9mKCJcXFxcIik+PTA7KXQ9dC5yZXBsYWNlKCJcXFxcIiwiXFwiKTtmb3IoO3QuaW5kZXhPZigiLy8iKT49MDspdD10LnJlcGxhY2UoIi8vIiwiLyIpO2lmKCI6Ij09PUJ0KHQsMSkpcmV0dXJue3BhdGg6YCR7dH1cXGAsaXNSb290OiEwfTtpZigiXFwiPT09QnQodCwxKSl7bGV0IHI9SHQodCwxKTtyZXR1cm4iOiI9PT1CdChyLDEpP3twYXRoOnQsaXNSb290OiEwfTp7cGF0aDpyLGlzUm9vdDohMX19aWYoIi8iPT09QnQodCwxKSl7bGV0IHI9SHQodCwxKTtyZXR1cm4gMD09PXIubGVuZ3RoP3twYXRoOnQsaXNSb290OiEwfTp7cGF0aDpyLGlzUm9vdDohMX19cmV0dXJue3BhdGg6dCxpc1Jvb3Q6ITF9fWZ1bmN0aW9uIEt0KHQpe2lmKCFTdCh0KSlyZXR1cm4iIjtsZXQgcj1KdCh0KTtpZihyLmlzUm9vdClyZXR1cm4gci5wYXRoO2xldCBlPXIucGF0aDt0cnl7ZT1lLnNwbGl0KCJcXCIpLnBvcCgpLnNwbGl0KCIvIikucG9wKCl9Y2F0Y2godCl7fXJldHVybiBlfWZ1bmN0aW9uIFF0KHQscj17fSl7bGV0IGU9aHQociwiZnMiKTtpZighcHQodCx7ZnM6ZX0pKXJldHVybiExO2xldCBuPWUubHN0YXRTeW5jKHQpO3JldHVybiFuLmlzRmlsZSgpJiYhbi5pc1N5bWJvbGljTGluaygpfWZ1bmN0aW9uIFZ0KHQpe3RyeXtyZXR1cm4gU3RyaW5nKHQpfWNhdGNoKHQpe310cnl7bGV0IHI9dC5tZXNzYWdlO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yKXJldHVybiByfWNhdGNoKHQpe31yZXR1cm4idW5rbm93biBlcnJvciJ9ZnVuY3Rpb24gWXQodCl7bGV0IHI9ITE7dHJ5e3I9ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4hMTtpZih0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuITA7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEVycm9yLmlzRXJyb3IpcmV0dXJuIEVycm9yLmlzRXJyb3IodCk7aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHQpcmV0dXJuITE7bGV0IHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpO3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1yfHwiW29iamVjdCBET01FeGNlcHRpb25dIj09PXJ9KHQpfWNhdGNoKHQpe31pZihyKXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10KXJldHVybiB0O2xldCBlPVZ0KHQpO3JldHVybiIiIT09ZT9lOiJ1bmtub3duIGVycm9yIn1mdW5jdGlvbiBadCh0LHI9e30pe3RyeXtsZXQgZT1odChyLCJmcyIpO2lmKCFwdCh0LHtmczplfSkpcmV0dXJue3N1Y2Nlc3M6ImZpbGUgZG9lcyBub3QgZXhpc3Q6ICIrdH07aWYoIXl0KHQse2ZzOmV9KSlyZXR1cm57ZXJyb3I6ImlucHV0IHBhdGggaXMgbm90IGEgZmlsZTogIit0fTtlLnVubGlua1N5bmModCl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOll0KHQpfX1yZXR1cm57c3VjY2VzczoiZG9uZTogIit0fX1hc3luYyBmdW5jdGlvbiB0cih0LHIsbj17fSl7bGV0IG89IiI7aWYoIXZ0KGk9dCl8fDA9PT1pLmxlbmd0aHx8MT09PWkubGVuZ3RoJiZqdChpWzBdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoImZwc0luIGluIG5vdCBhbiBlZmZlY3RpdmUgYXJyYXkiKTt2YXIgaTtsZXQgdT1mdW5jdGlvbih0KXtpZighU3QodCkpcmV0dXJuIiI7bGV0IHI9SnQodCk7aWYoci5pc1Jvb3QpcmV0dXJuIHIucGF0aDtsZXQgZT1LdCh0PXIucGF0aCk7aWYoIVN0KGUpKXJldHVybiB0O2xldCBuPUp0KHQ9SHQodCxlLmxlbmd0aCkpO3JldHVybiBuLmlzUm9vdCxuLnBhdGh9KHIpLGE9Z3QoKTthLmNhdGNoKCgoKT0+e30pKTtsZXQgYz1udWxsLGY9bnVsbCxzPSExLGw9Z3QoKTtsLmNhdGNoKCgoKT0+e30pKTtsZXQgaD10PT57bGV0IHI7dHJ5e3I9dC5tZXNzYWdlfWNhdGNoKHQpe31yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/cjpWdCh0KX07dHJ5e2xldCBpPWh0KG4sImZzIikscD1odChuLCJmbk91dCIsIiIpO1N0KHApfHwocD1LdChyKSksUXQodSx7ZnM6aX0pfHxmdW5jdGlvbih0LHI9e30pe3RyeXtsZXQgZT1odChyLCJmcyIpO2lmKFF0KHQse2ZzOmV9KSlyZXR1cm57c3VjY2VzczoiaW5wdXQgZm9sZGVyIGlzIGFscmVhZHkgZXhpc3RzOiAiK3R9O2lmKHB0KHQse2ZzOmV9KSlyZXR1cm57ZXJyb3I6ImlucHV0IHBhdGggYWxyZWFkeSBleGlzdHM6ICIrdH07ZS5ta2RpclN5bmModCx7cmVjdXJzaXZlOiEwfSl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOll0KHQpfX19KHUse2ZzOml9KSxjPWkuY3JlYXRlV3JpdGVTdHJlYW0ociksYy5vbigiZXJyb3IiLCh0PT57cz0hMCxmPXQsbz1oKHQpLGwucmVqZWN0KHQpLGEucmVqZWN0KG8pfSkpLGMub24oImZpbmlzaCIsKCgpPT57bGV0IHQ9e2ZpbGVuYW1lOnAscGF0aDpyfTthLnJlc29sdmUodCl9KSk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHMpdGhyb3cgZjtsZXQgbj10W3JdO2lmKCF5dChuLHtmczppfSkpdGhyb3cgbmV3IEVycm9yKGBmcEluWyR7bn1dIGlzIG5vdCBhIGZpbGVgKTtsZXQgbz1hc3luYygpPT57bGV0IHQ9aS5jcmVhdGVSZWFkU3RyZWFtKG4pLHI9bnVsbDtmb3IgYXdhaXQobGV0IG4gb2YgdCl7aWYocyl0aHJvdyBmO2xldCB0PSExLG89bmV3IFByb21pc2UoKChyLGUpPT57dD0hYy53cml0ZShuLCh0PT57dD9lKHQpOnIoKX0pKX0pKTtvLmNhdGNoKCgoKT0+e30pKSxyPW8sdCYmYXdhaXQgUHJvbWlzZS5yYWNlKFtlLm9uY2UoYywiZHJhaW4iKSxsXSl9aWYobnVsbCE9PXImJmF3YWl0IHIscyl0aHJvdyBmO1p0KG4se2ZzOml9KX07YXdhaXQgbygpfWMuZW5kKCl9Y2F0Y2godCl7bz1oKHQpO3RyeXtjLmRlc3Ryb3koKX1jYXRjaCh0KXt9YS5yZWplY3Qobyl9cmV0dXJuIGF9Y29uc3QgcnI9bmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNDgsOCw5NiwzLDEyNywxMjcsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjcsMCw5NiwyLDEyNywxMjcsMCw5NiwxLDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI2LDEsMTI2LDk2LDMsMTI2LDEyNywxMjcsMSwxMjYsOTYsMiwxMjcsMTI2LDAsOTYsMSwxMjcsMSwxMjYsMywxMSwxMCwwLDAsMiwxLDMsNCw1LDYsMSw3LDUsMywxLDAsMSw3LDg1LDksMywxMDksMTAxLDEwOSwyLDAsNSwxMjAsMTIwLDEwNCw1MSw1MCwwLDAsNiwxMDUsMTEwLDEwNSwxMTYsNTEsNTAsMCwyLDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1MSw1MCwwLDMsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1MSw1MCwwLDQsNSwxMjAsMTIwLDEwNCw1NCw1MiwwLDUsNiwxMDUsMTEwLDEwNSwxMTYsNTQsNTIsMCw3LDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1NCw1MiwwLDgsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1NCw1MiwwLDksMTAsMjUxLDIyLDEwLDI0MiwxLDEsNCwxMjcsMzIsMCwzMiwxLDEwNiwzMywzLDMyLDEsNjUsMTYsNzksNCwxMjcsMzIsMyw2NSwxNiwxMDcsMzMsNiwzMiwyLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiwzMywzLDMyLDIsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDMzLDQsMzIsMiw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDQsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDQsMzIsMiwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiw1LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDYsMzIsMCw2NSw0LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NSwxMiwxMTksMzIsNSw2NSwxOCwxMTksMTA2LDMyLDQsNjUsNywxMTksMTA2LDMyLDMsNjUsMSwxMTksMTA2LDUsMzIsMiw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMSwxMDYsMzIsMCwzMiwxLDY1LDE1LDExMywxNiwxLDExLDE0NiwxLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMSw2NSw0LDEwNiwzMiwyLDc1LDY5LDQsNjQsMzIsMCwzMiwxLDQwLDIsMCw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwxMDYsNjUsMTcsMTE5LDY1LDE3NSwyMTQsMjExLDE5MCwyLDEwOCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMiwxLDExLDExLDMsNjQsMzIsMSwzMiwyLDc5LDY5LDQsNjQsMzIsMCwzMiwxLDQ1LDAsMCw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDgsMTA2LDY1LDExLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NSwxNSwxMTgsMTE1LDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDM0LDAsNjUsMTMsMTE4LDMyLDAsMTE1LDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDM0LDAsNjUsMTYsMTE4LDMyLDAsMTE1LDExLDYzLDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMSw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDEsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDU0LDIsMCwxMSwxOTUsNCwxLDYsMTI3LDMyLDEsMzIsMiwxMDYsMzMsNiwzMiwwLDY1LDI0LDEwNiwzMyw0LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MCwyLDAsMzIsMiwxMDYsNTQsMiwwLDMyLDAsNjUsNCwxMDYsMzQsNSwzMiw1LDQwLDIsMCwzMiwyLDY1LDE2LDc5LDMyLDAsNDAsMiwwLDY1LDE2LDc5LDExNCwxMTQsNTQsMiwwLDMyLDIsMzIsMywxMDYsNjUsMTYsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMTYsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsNCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw4LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDEyLDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSw0MCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsMzIsNiw2NSwxNiwxMDcsNzcsNCw2NCwzMiw2LDY1LDE2LDEwNywzMyw4LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDMzLDIsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDMzLDMsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDUsMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDMzLDcsMyw2NCwzMiwyLDMyLDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiwzLDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDUsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNywzMiw4LDMyLDEsNjUsNCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsMiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsNSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsNyw1NCwyLDAsMTEsMzIsMSwzMiw2LDczLDQsNjQsMzIsNCwzMiwxLDMyLDYsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDk3LDEsMSwxMjcsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDEsMzIsMCw2NSw0LDEwNiw0MCwyLDAsNCwxMjcsMzIsMSw2NSwxMiwxMTksMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDY1LDE4LDExOSwxMDYsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDY1LDcsMTE5LDEwNiwzMiwwLDY1LDgsMTA2LDQwLDIsMCw2NSwxLDExOSwxMDYsNSwzMiwxLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwwLDQwLDIsMCwxMDYsMzIsMCw2NSwyNCwxMDYsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDE2LDEsMTEsMjU1LDMsMiwzLDEyNiwxLDEyNywzMiwwLDMyLDEsMTA2LDMzLDYsMzIsMSw2NSwzMiw3OSw0LDEyNiwzMiw2LDY1LDMyLDEwNywzMyw2LDMyLDIsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsMzMsMywzMiwyLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDMzLDQsMzIsMiw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCwzMyw1LDMsNjQsMzIsMywzMiwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMywzMiw0LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDQsMzIsMiwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywyLDMyLDUsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNSwzMiw2LDMyLDAsNjUsOCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjYsMTIsMTM3LDMyLDUsNjYsMTgsMTM3LDEyNCwzMiw0LDY2LDcsMTM3LDEyNCwzMiwzLDY2LDEsMTM3LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMiw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMiw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwxLDE3MywxMjQsMzIsMCwzMiwxLDY1LDMxLDExMywxNiw2LDExLDEzNCwyLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMiwzMiwxLDY1LDgsMTA2LDc5LDQsNjQsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzIsMCwxMzMsNjYsMjcsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzMsMCwzMiwxLDY1LDgsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwxLDY1LDQsMTA2LDMyLDIsNzcsNCw2NCwzMiwwLDMyLDEsNTMsMiwwLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDIzLDEzNyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMSwzLDY0LDMyLDEsMzIsMiw3Myw0LDY0LDMyLDAsMzIsMSw0OSwwLDAsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjYsMTMzLDY2LDExLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY2LDMzLDEzNiwxMzMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMzQsMCwzMiwwLDY2LDI5LDEzNiwxMzMsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjYsMzQsMCwzMiwwLDY2LDMyLDEzNiwxMzMsMTEsNzcsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDEsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDEsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsNTUsMywwLDExLDI0NCw0LDIsMywxMjcsNCwxMjYsMzIsMSwzMiwyLDEwNiwzMyw1LDMyLDAsNjUsNDAsMTA2LDMzLDQsMzIsMCw2NSwyMDAsMCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQxLDMsMCwzMiwyLDE3MywxMjQsNTUsMywwLDMyLDIsMzIsMywxMDYsNjUsMzIsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMzIsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSw4LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMTYsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwyNCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyMDAsMCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsNjUsMzIsMTA2LDMyLDUsNzcsNCw2NCwzMiw1LDY1LDMyLDEwNywzMywyLDMyLDAsNjUsOCwxMDYsNDEsMywwLDMzLDYsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDMzLDcsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDgsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDMzLDksMyw2NCwzMiw2LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw2LDMyLDcsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNywzMiw4LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDgsMzIsOSwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw5LDMyLDIsMzIsMSw2NSw4LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiw2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiw3LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiw4LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiw5LDU1LDMsMCwxMSwzMiwxLDMyLDUsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNSwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsMTg4LDIsMSw1LDEyNiwzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsMSwzMiwwLDQxLDMsMCwzNCwyLDY2LDMyLDkwLDQsMTI2LDMyLDAsNjUsOCwxMDYsNDEsMywwLDM0LDMsNjYsMSwxMzcsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDM0LDQsNjYsNywxMzcsMTI0LDMyLDEsNjYsMTIsMTM3LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzNCw1LDY2LDE4LDEzNywxMjQsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwxLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwxLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDIsMTI0LDMyLDAsNjUsNDAsMTA2LDMyLDIsNjYsMzEsMTMxLDE2NywxNiw2LDExXSk7YXN5bmMgZnVuY3Rpb24gZXIodCxyPXt9KXtsZXQgZT1ndCgpO3RyeXtsZXQgbj1odChyLCJmcyIpLG89aHQociwiY2h1bmtTaXplIik7aWYoZnVuY3Rpb24odCxyPXt9KXtyZXR1cm4hIVV0KHQscikmJkR0KHQpPjB9KG8pfHwobz02NzEwODg2NCksbz1EdChvKSxvPjIqKjMwJiYobz02NzEwODg2NCksIXl0KHQse2ZzOm59KSlyZXR1cm4gZS5yZWplY3QoImZwIGlzIG5vdCBhIGZpbGUiKSxlO2xldHtjcmVhdGU2NDppfT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06cix4eGgzMjplLHh4aDY0Om4saW5pdDMyOm8sdXBkYXRlMzI6aSxkaWdlc3QzMjp1LGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6Zn19PXQ7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoci5idWZmZXIpO2Z1bmN0aW9uIGwodCxlKXtpZihyLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrZSl7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrZS1yLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ci5ncm93KG4pLHM9bmV3IFVpbnQ4QXJyYXkoci5idWZmZXIpfX1mdW5jdGlvbiBoKHQscixlLG4sbyxpKXtsKHQpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHMuc2V0KHUpLGUoMCxyKSx1LnNldChzLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUocil7bGV0IGU7cmV0dXJuIHMuc2V0KHUpLCJzdHJpbmciPT10eXBlb2Ygcj8obCgzKnIubGVuZ3RoLHQpLGU9di5lbmNvZGVJbnRvKHIscy5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoci5ieXRlTGVuZ3RoLHQpLHMuc2V0KHIsdCksZT1yLmJ5dGVMZW5ndGgpLG4oMCx0LGUpLHUuc2V0KHMuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4ocy5zZXQodSksaShvKDApKSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHk9Mm4qKjY0bi0xbjtmdW5jdGlvbiBnKHQpe3JldHVybiB0Jnl9Y29uc3Qgdj1uZXcgVGV4dEVuY29kZXIsYj0wLGQ9MG47ZnVuY3Rpb24gXyh0LHI9Yil7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxwKGUoMCx2LmVuY29kZUludG8odCxzKS53cml0dGVuLHIpKX1mdW5jdGlvbiBqKHQscj1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLGcobigwLHYuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4scikpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxyPWIpPT5fKHQscikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQscj1iKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHAoZSgwLHQuYnl0ZUxlbmd0aCxyKSkpLGNyZWF0ZTMyOih0PWIpPT5oKDQ4LHQsbyxpLHUscCksaDY0OmosaDY0VG9TdHJpbmc6KHQscj1kKT0+aih0LHIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxyPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCksZyhuKDAsdC5ieXRlTGVuZ3RoLHIpKSksY3JlYXRlNjQ6KHQ9ZCk9PmgoODgsdCxhLGMsZixnKX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShycikpLmluc3RhbmNlKX0oKSx1PWkoKSxhPW4uY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm99KSxjPXQ9PntlLnJlamVjdChWdCh0KSk7dHJ5e2EuZGVzdHJveSgpfWNhdGNoKHQpe319O2Eub24oImRhdGEiLCh0PT57dHJ5e3UudXBkYXRlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVuZCIsKCgpPT57dHJ5e2xldCB0PXUuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIik7ZS5yZXNvbHZlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVycm9yIiwodD0+e2UucmVqZWN0KFZ0KHQpKX0pKX1jYXRjaCh0KXtlLnJlamVjdChWdCh0KSl9cmV0dXJuIGV9bW9kdWxlLmV4cG9ydHM9YXN5bmMoZSxuLG8saSk9PntsZXQgdT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgbj10LnJlc29sdmUobyxgJHtlfV8ke2l9YCk7aWYoIXl0KG4se2ZzOnJ9KSl0aHJvdyBuZXcgRXJyb3IoYGZwSW5bJHtufV0gaXMgbm90IGEgZmlsZWApO3UucHVzaChuKX1sZXQgYT1hd2FpdCBhc3luYyBmdW5jdGlvbih0LGUsbj17fSl7dHJ5e3JldHVybiB0cih0LGUse2ZzOnIsLi4ubn0pfWNhdGNoKHQpe2xldCByO3RyeXtyPXQubWVzc2FnZX1jYXRjaCh0KXt9cmV0dXJuIFByb21pc2UucmVqZWN0KCJzdHJpbmciPT10eXBlb2Ygcj9yOlZ0KHQpKX19KHUsaSk7cmV0dXJuey4uLmEsaGFzaDphd2FpdCBmdW5jdGlvbih0LGU9e30pe3RyeXtyZXR1cm4gZXIodCx7ZnM6ciwuLi5lfSl9Y2F0Y2godCl7cmV0dXJuIFByb21pc2UucmVqZWN0KFZ0KHQpKX19KGkpfX07CgogICAgfSkuY2FsbChtZFVzZXIuZXhwb3J0cywgbWRVc2VyLCBtZFVzZXIuZXhwb3J0cykKCiAgICAvL+mgkOioreWMr+WHujogcm9sbHVw5LulX19lc01vZHVsZeaomeekuumgkOioreiIh+WFt+WQjeS4puWtmOiAhSwg5Y+W5YW2ZGVmYXVsdDsg5ZCm5YmHbW9kdWxlLmV4cG9ydHPljbPpoJDoqK3ljK/lh7oo5Y+q5pyJ5YW35ZCN5Yyv5Ye66ICF54K65ZG95ZCN56m66ZaT54mp5Lu2KQogICAgcmV0dXJuIChtZFVzZXIuZXhwb3J0cyAmJiBtZFVzZXIuZXhwb3J0cy5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtZFVzZXIuZXhwb3J0cykgPyBtZFVzZXIuZXhwb3J0cy5kZWZhdWx0IDogbWRVc2VyLmV4cG9ydHMKCn0pKCkpCgo=",Buffer.from(s,"base64").toString("utf8"));var s;function i(){let n=new r,s=n.emit.bind(n),i={},o=!1,u="worker is dead",l=!1;function a(e){for(let t in i){let r=i[t];delete i[t],r.reject(e)}}function c(e){a(e),s("error",e)}function d(e){o||(o=!0,c(e))}let w=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){u=e,d(e)}}(t);function D(){w?(l=!0,o||(o=!0,u="worker has been terminated"),w.terminate(),w=void 0,a("worker has been terminated")):c("worker has been terminated")}function y(e){return function(){let t=function(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}();if(o)return t.reject(u),t;let r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=r.length;for(let s=0;s<e;s++)t[s]=r[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:r,fun:e,input:[...arguments]};try{w.postMessage(n)}catch(e){return t.reject(e),t}return i[r]=t,t}}w||o||(u="invalid worker",d(u)),w&&(w.on("message",function(e){let t=e,r=t&&t.mode;if("emit"===r||"return"===r||"messageerror"===r){if("emit"===r&&s(t.evName,t.msg),"return"===r){let e=i[t.id];e&&(delete i[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===r&&c(t.msg)}}),w.on("error",d),w.on("exit",e=>{l||d("worker exit, code["+e+"]")}),w.on("messageerror",e=>{c(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{w.postMessage(e)}catch(e){throw D(),e}}([...arguments]));for(let e of["main"])n[e]=y(e);return n.terminate=D,n}n=async function(){let e=[...arguments],t=i();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return r},set exports(e){r=e}}),r)}(Vs);var Hs=nn(Vs.exports);let Us=new Set,Bs=new Map,Rs=(t,r,n="")=>{let s=e.resolve(r,t);return{fp:s,fpm:`${s}.merging`,fpd:`${s}.done`,fpe:`${s}.error`,fpr:er(n)?`${s}.q${n}.ro`:""}},Qs=e=>{let t=Pn(e);if(Pr(e))throw new Error(`can not remove ${e}: ${Cn(Me(t,"error"))}`)},Os=async(e,r)=>{Us.add(r.fp);try{let n=await function(e,r={}){try{return Fs(e,{fs:t,...r})}catch(e){return Promise.reject(Zn(e))}}(r.fp);if(n===e)return t.writeFileSync(r.fpd,"","utf8"),{state:"done"};let s=`merged file[${r.fp}] is incomplete: hash[${n}] != fileHash[${e}], merge was interrupted`;try{t.writeFileSync(r.fpe,s,"utf8")}catch(e){console.log(`can not write ${r.fpe}`,e)}return{state:"mismatch",reason:s}}catch(e){return{state:"error",reason:`verify merged file[${r.fp}] error: ${Cn(e)}`}}finally{Us.delete(r.fp)}},Ps=async(e,r,n)=>{let s=`${function(){if(!Gr(ms))throw new Error("invalid dayjs");return ms().format("YYYYMMDDHHmmss")}()}|${ps(6)}|${e}`,i=Rs(e,n);if(Us.has(i.fp))return s;let o=Pr(i.fpe),u=Pr(i.fp);if(!o&&u){let t=await Os(e,i);if("done"===t.state)return s;if("error"===t.state)throw new Error(t.reason)}return Qs(i.fpd),Qs(i.fpe),Us.add(i.fp),setTimeout(()=>{Hs(e,r,n,i.fpm).then(r=>{let n=Me(r,"hash","");if(n!==e)throw new Error(`merged file hash[${n}] != fileHash[${e}]`);t.renameSync(i.fpm,i.fp),t.writeFileSync(i.fpd,"","utf8")}).catch(e=>{console.log(e),Pn(i.fpm);let r=Cn(e);try{t.writeFileSync(i.fpe,r,"utf8")}catch(e){console.log(`can not write ${i.fpe}`,e)}}).finally(()=>{Us.delete(i.fp)})},1),s},Js=async(e,r,n={})=>{let s=Me(n,"funConsume"),i=Me(n,"funLog");Gr(i)||(i=e=>{console.log(e)});let o=Ks(e,"|"),u=Me(o,0,""),l=Me(o,1,""),a=Me(o,2,"");if(3!==Ms(o)||!Jn(u)||!Jn(l)||!Jn(a)){let t=`invalid queueId[${Cn(e)}]`;return console.log(t),{state:"error",msg:"invalid queueId",reason:t,path:""}}let c=Rs(a,r,`${u}${l}`);if(Pr(c.fpr)){let e=((e,r)=>{try{let n=Rn(new Uint8Array(t.readFileSync(e.fpr)),{returnWithStateAndMsg:!0});if("success"!==Me(n,"state"))return r(`stored result ${e.fpr} is corrupted, treat as not stored: ${Me(n,"msg","unknown error")}`),{ok:!1};let s=n.msg;return $t(s)&&dn(s,"ro")?{ok:!0,ro:s.ro}:(r(`stored result ${e.fpr} has no own 'ro' key, treat as not stored`),{ok:!1})}catch(t){return r(`can not read stored result ${e.fpr}: ${Cn(t)}`),{ok:!1}}})(c,i);if(e.ok)return{state:"success",msg:e.ro,path:c.fp,from:"stored"}}if(Pr(c.fpe)){let e="";try{e=t.readFileSync(c.fpe,"utf8")}catch(e){}return{state:"error",msg:"merge slices failed",reason:e,path:c.fp}}if(Us.has(c.fp))return{state:"merging",msg:"",path:c.fp};let d=Pr(c.fp),w=Pr(c.fpd);if(d&&!w){let e=await Os(a,c);if("done"!==e.state)return{state:"error",msg:"merge slices failed",reason:e.reason,path:c.fp};w=!0}if(d&&w){if(!Gr(s))return{state:"success",msg:"",path:c.fp};let e=await((e,r,n)=>{let s=e.fpr,i=Bs.get(s);return i||(i=Promise.resolve().then(()=>r(e.fp)).then(r=>{r=void 0===r?null:r;try{let n=Vn({ro:r},{returnWithStateAndMsg:!0});if("success"!==Me(n,"state"))return r;t.writeFileSync(e.fpr,Buffer.from(n.msg));let s=Rn(n.msg,{returnWithStateAndMsg:!0});if("success"===Me(s,"state")&&$t(s.msg)&&dn(s.msg,"ro"))return s.msg.ro}catch(t){n(`can not store consumed result to ${e.fpr}: ${Cn(t)}`)}return r}).finally(()=>{Bs.delete(s)}),Bs.set(s,i),i)})(c,s,i);return{state:"success",msg:e,path:c.fp,from:"consumed"}}return!d&&w?{state:"error",msg:"merged file already consumed",reason:`merged file[${c.fp}] no longer exists and no stored result for queueId[${e}]`,path:c.fp}:{state:"error",msg:"no merge task",reason:`no merge task for fileHash[${a}] (never pushed, or artifacts removed)`,path:c.fp}};var $s={exports:{}};!function(e){var t,r;e.exports=(t=o,r={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function s(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new s(n,i||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,s=[];if(0===this._eventsCount)return s;for(n in e=this._events)t.call(e,n)&&s.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,i=n.length,o=new Array(i);s<i;s++)o[s]=n[s].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,s,i,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,i),!0;case 6:return c.fn.call(c.context,t,n,s,i,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,D=c.length;for(a=0;a<D;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,s);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return i(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return i(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,s){var i=r?r+e:e;if(!this._events[i])return this;if(!t)return o(this,i),this;var u=this._events[i];if(u.fn)u.fn!==t||s&&!u.once||n&&u.context!==n||o(this,i);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||s&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[i]=1===a.length?a[0]:a:o(this,i)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}({get exports(){return t},set exports(e){t=e}});var r=t;let n;return function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(s="J3VzZSBzdHJpY3QnCgoKCjsoZnVuY3Rpb24gKHBhcmVudFBvcnQsIG1kRGVmYXVsdCkgewoKbGV0IGluc3RhbmNlID0gbnVsbApsZXQgaW5pdEZhaWwgPSBudWxsIC8v5Yid5aeL5YyW5aSx5pWXKOW3peW7oOWHveaVuOaLi+mMr+etiSnmmYLkuYt7IGVyciB9LCDku6Xnianku7bljIXoo53lm6DpjK/oqqTlgLzlj6/ngrrku7vmhI/lgLw7IOW+jOe6jOWRvOWPq+S7peWFtuWOn+Wni+mMr+iqpOWbnuaHiQpmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBtZERlZmF1bHQKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEsIGRlc2MpIHsKICAgIHRyeSB7CiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgfQogICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vZGF0YeWQq+eEoeazlee1kOani+WMluikh+ijveS5i+WFp+WuuSjlh73mlbjjgIFTeW1ib2znrYkp5pmCcG9zdE1lc3NhZ2XlkIzmraXmi4tEYXRhQ2xvbmVFcnJvcjog5LiN6JmV55CG5YmH5ouL5pa85ZG85Y+r6Lev5b6R5aSWLCDmlrxub2RlanPmiJB3b3JrZXLmnKrmjZXmjYnpjK/oqqTogIzltKnmvbAo5oyB5LmF6IiH5bel5bug5a+m6auU5b6e5q2k5q275LqhKSwg5pa854CP6Ka95Zmo5oiQ5pyq6JmV55CGcmVqZWN0aW9u6ICM5ZG85Y+r5rC45LmF5oe4572uOwogICAgICAgIC8v5L6d6KiK5oGv6aGe5Z6L5pS56YCB5Y+v6KSH6KO95LmL5a2X5Liy6Kqq5piOKGRlc2PngrrlhaflrrnkuYvmj4/ov7ApLCDkvb/lkbzlj6vnq6/lvpfliLDlhbflkI3ljp/lm6DkuJR3b3JrZXLnuozlj6/mnI3li5k7IOWFnOW6leWGjeWkseaVl+WNs+aUvuajhCwg5LiN5Y+v6YGe6L+0CiAgICAgICAgbGV0IG1zZyA9ICcnCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbXNnID0gZGVzYyArICcgY291bGQgbm90IGJlIGNsb25lZDogJyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgICAgIGxldCBkYXRhU2FmZSA9IG51bGwKICAgICAgICBpZiAoZGF0YS5tb2RlID09PSAncmV0dXJuJykgewogICAgICAgICAgICBkYXRhU2FmZSA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGF0YS5tb2RlID09PSAnZW1pdCcpIHsKICAgICAgICAgICAgZGF0YVNhZmUgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRhdGFTYWZlID0gewogICAgICAgICAgICAgICAgbW9kZTogZGF0YS5tb2RlLCAvL21lc3NhZ2VlcnJvcuS5i+mAmuefpeS4jeWPr+eVpemBjiwg5ZCm5YmH5aSW5bGk5ZG85Y+r5Lit5LmLcGVuZGluZ+aHuOe9rgogICAgICAgICAgICAgICAgbXNnLAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YVNhZmUpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBtZERlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKCiAgICAgICAgICAgIC8vaW5pdEZhaWwKICAgICAgICAgICAgaW5pdEZhaWwgPSB7IGVyciB9CgogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMsICdpbml0IGVycm9yJykKCiAgICAgICAgfQoKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9jaGVjaywg5Yid5aeL5YyW5aSx5pWX5pmCaW5zdGFuY2XngrpudWxsLCDku6XliJ3lp4vljJbkuYvljp/lp4vpjK/oqqTlm57mh4ko5ZCM5bu656uL5aSx5pWX5LmL6JmV572uKSwg5LiN5b6X5bCNbnVsbOWPluWAvOiAjOW+l+iqpOWwjuS5i1R5cGVFcnJvcgogICAgICAgICAgICBpZiAoaW5pdEZhaWwpIHsKICAgICAgICAgICAgICAgIHRocm93IGluaXRGYWlsLmVycgogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2Z1biwg6aCI54K65Ye95pW4LCDlkKbliYfku6XlhbflkI3oqIrmga/mi5LntZUo5LiN5b6X54K65bCNdW5kZWZpbmVk5Y+W5YC85oiW5ZG85Y+r5LmL6Kqk5bCOVHlwZUVycm9yKQogICAgICAgICAgICBsZXQgZnVuID0gKGluc3RhbmNlICE9PSBudWxsICYmIGluc3RhbmNlICE9PSB1bmRlZmluZWQpID8gaW5zdGFuY2VbZGF0YS5mdW5dIDogdW5kZWZpbmVkCiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uWycgKyBkYXRhLmZ1biArICddIGlzIG5vdCBhIGZ1bmN0aW9uIGluIHdvcmtlcicpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjLCDku6Vhd2FpdOWPluWAvDog6Z2eYXN5bmPlh73mlbjlm57lgrPpnZ5wcm9taXNl5pmC5Lqm5Y+v5Lqk5LuYLCDkuI3lvpflm6Dlkbzlj6sudGhlbuiAjOWkseaVlzsg5LulUmVmbGVjdC5hcHBseeaMh+WumnRoaXMo6KaLY3RoaXMpCiAgICAgICAgICAgIG1zZyA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuLCB1bmRlZmluZWQsIGlucHV0KQogICAgICAgICAgICBzdGF0ZSA9ICdzdWNjZXNzJwoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KCiAgICAgICAgLy9kZXNjLCDlm57mh4nlhaflrrnnhKHms5XntZDmp4vljJbopIfoo73mmYLlhZzlupXoqqrmmI7kuYvmj4/ov7AKICAgICAgICBsZXQgZGVzYyA9ICcnCiAgICAgICAgaWYgKHN0YXRlID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgZGVzYyA9ICdyZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluaXRGYWlsKSB7CiAgICAgICAgICAgIGRlc2MgPSAnaW5pdCBlcnJvcicKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2MgPSAncmVqZWN0ZWQgdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQoKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMsIGRlc2MpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZWVycm9yJywgKGVycikgPT4gewogICAgICAgICAgICBzZW5kTWVzc2FnZSh7IG1vZGU6ICdtZXNzYWdlZXJyb3InLCBtc2c6IGVyciB9LCAnbWVzc2FnZWVycm9yIG9mIHdvcmtlcicpCiAgICAgICAgfSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhHdvcmtlcuWFp+acquaNleaNiemMr+iqpCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuipsuS6jOebo+iBveacg+mYu+atondvcmtlcuS+nemgkOioree1guatoiwg5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOiAjOS7pHBlbmRpbmfmsLjkuYXmh7jnva4sIOaureWxjXdvcmtlcuS4puS7pOWuv+S4u+eEoeazlemAgOWHujsKICAgIC8v6Yyv6Kqk6ZuW5bey57aTZXJyb3Lkuovku7blgrPoh7PlpJblsaRyZWplY3QgcGVuZGluZywg5L2G54ShcGVuZGluZ+S4lOWRvOWPq+err+acquebo+iBvWVycm9y5pmCKGV2ZW50ZW1pdHRlcjPnhKHnm6Pogb3ogIXmmYJlbWl05LiN5ouL6YyvKeatpOi8uOWHuueCuuWUr+S4gOeXlei3oSwg5pWF5L+d55WZOwogICAgLy/mnKznm6Pogb3mlrzooqvljIXoo53nqIvlvI/norzln7fooYzkuYvlvozmiY3lronoo50sIOi8ieWFpeacn+S5i+mMr+iqpOS4jee2k+atpOiomOmMhAogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikgLy/oqLrmlrfovLjlh7roh7NzdGRlcnIo5ZCMTm9kZeacquaNleaNiemMr+iqpOS5i+aFo+S+iyksIHdvcmtlcuS5i3N0ZGlv6L2J6YCB6Iez5a6/5Li7LCDkuI3lvpfmt7flhaXlrr/kuLtzdGRvdXTkuYvos4fmlpnmtYEKICAgIH0pCgp9CmNhdGNoKGVycil7fQoKfSkoCi8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwpyZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLnBhcmVudFBvcnQsIC8vaW5uZXLku6VuZXcgV29ya2VyKGNvZGUsIHsgZXZhbDogdHJ1ZSB9KeWft+ihjCwgZXZhbOWtl+S4sumgkOioreS7pUNvbW1vbkpT6Kej5p6QKOiIh3BhY2thZ2UuanNvbuS5i3R5cGXnhKHpl5wsIOWDheeUsS0taW5wdXQtdHlwZeaxuuWumiksIOaVheW+l+S9v+eUqHJlcXVpcmUKLy/oqK3oqIjpmZDliLY6IOWuv+S4u+S7pS0taW5wdXQtdHlwZT1tb2R1bGXllZ/li5XmmYJ3b3JrZXLnubzmib/oqbLlj4PmlbgsIGlubmVy6KKr55W2RVNN6Kej5p6Q6ICMcmVxdWlyZeWkseaViCwg5bGs5LiN5pSv5o+05LmL5Z+36KGM5pa55byPCi8v6Iul6KaB5pa8bm9kZWpzIHdvcmtlcuWFp+S9v+eUqOeEoeazlei9ieitr+eahOWOn+eUn+Wll+S7tuS+i+WmgmZzLCDpgb/lhY3kvb/nlKjpoILlsaRpbXBvcnTliqDovInkvb/nlKgsIOWboOeEoeazlei9ieitr+acg+ebtOaOpeS/neeVmQovL+S4puWboGV2YWzlrZfkuLLngrpDb21tb25KU+iAjOS4jeaOpeWPl2ltcG9ydCwg5pWF5Ye654++6Yyv6Kqk54Sh5rOV6L2J6K2vCihmdW5jdGlvbiAoKSB7CgogICAgLy/kvb/nlKjogIXnqIvlvI/norwoY2pzKSwg5LulQ29tbW9uSlPmqKHntYTljIXoo53lh73mlbjln7fooYw7IOiIh+S4iuaWuWlubmVy5LmL5Ye95pW454K65YWE5byf5L2c55So5Z+fLCDkupLkuI3lj6/oposKICAgIGxldCBtZFVzZXIgPSAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICE9PSBudWxsKSA/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpO2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG4mJiExIT09ZSh0W3JdLHIsdCk7KTtyZXR1cm4gdH12YXIgbixvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89LTEsdT1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGM9aVtuP2E6KytvXTtpZighMT09PWUodVtjXSxjLHUpKWJyZWFrfXJldHVybiB0fTt2YXIgdT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9dXx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxjPWEuU3ltYm9sLGY9T2JqZWN0LnByb3RvdHlwZSxzPWYuaGFzT3duUHJvcGVydHksbD1mLnRvU3RyaW5nLGg9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgcD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB2PSJbb2JqZWN0IE51bGxdIix5PSJbb2JqZWN0IFVuZGVmaW5lZF0iLGI9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBkKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/eTp2OmImJmIgaW4gT2JqZWN0KHQpP2Z1bmN0aW9uKHQpe3ZhciBlPXMuY2FsbCh0LGgpLHI9dFtoXTt0cnl7dFtoXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2godCl7fXZhciBvPWwuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtoXT1yOmRlbGV0ZSB0W2hdKSxvfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gcC5jYWxsKHQpfSh0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZyh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWQodCl9dmFyIGo9T2JqZWN0LnByb3RvdHlwZSxtPWouaGFzT3duUHJvcGVydHksdz1qLnByb3BlcnR5SXNFbnVtZXJhYmxlLFM9XyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP186ZnVuY3Rpb24odCl7cmV0dXJuIGcodCkmJm0uY2FsbCh0LCJjYWxsZWUiKSYmIXcuY2FsbCh0LCJjYWxsZWUiKX0sTz1BcnJheS5pc0FycmF5O3ZhciBBPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsej1BJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsRT16JiZ6LmV4cG9ydHM9PT1BP2EuQnVmZmVyOnZvaWQgMCx4PShFP0UuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTj05MDA3MTk5MjU0NzQwOTkxLEY9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIGsodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/TjplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmRi50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9dmFyIEk9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiAkKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD1JfXZhciBMPXt9O0xbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUxbIltvYmplY3QgSW50OEFycmF5XSJdPUxbIltvYmplY3QgSW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IEludDMyQXJyYXldIl09TFsiW29iamVjdCBVaW50OEFycmF5XSJdPUxbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09TFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLExbIltvYmplY3QgQXJndW1lbnRzXSJdPUxbIltvYmplY3QgQXJyYXldIl09TFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1MWyJbb2JqZWN0IEJvb2xlYW5dIl09TFsiW29iamVjdCBEYXRhVmlld10iXT1MWyJbb2JqZWN0IERhdGVdIl09TFsiW29iamVjdCBFcnJvcl0iXT1MWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUxbIltvYmplY3QgTWFwXSJdPUxbIltvYmplY3QgTnVtYmVyXSJdPUxbIltvYmplY3QgT2JqZWN0XSJdPUxbIltvYmplY3QgUmVnRXhwXSJdPUxbIltvYmplY3QgU2V0XSJdPUxbIltvYmplY3QgU3RyaW5nXSJdPUxbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgTSxQPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsVD1QJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUj1UJiZULmV4cG9ydHM9PT1QJiZ1LnByb2Nlc3MsVT1mdW5jdGlvbigpe3RyeXt2YXIgdD1UJiZULnJlcXVpcmUmJlQucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxSJiZSLmJpbmRpbmcmJlIuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCksQj1VJiZVLmlzVHlwZWRBcnJheSxEPUI/KE09QixmdW5jdGlvbih0KXtyZXR1cm4gTSh0KX0pOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpJiYkKHQubGVuZ3RoKSYmISFMW2QodCldfSxXPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQyh0LGUpe3ZhciByPU8odCksbj0hciYmUyh0KSxvPSFyJiYhbiYmeCh0KSx1PSFyJiYhbiYmIW8mJkQodCksaT1yfHxufHxvfHx1LGE9aT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPUFycmF5KHQpOysrcjx0OyluW3JdPWUocik7cmV0dXJuIG59KHQubGVuZ3RoLFN0cmluZyk6W10sYz1hLmxlbmd0aDtmb3IodmFyIGYgaW4gdCkhZSYmIVcuY2FsbCh0LGYpfHxpJiYoImxlbmd0aCI9PWZ8fG8mJigib2Zmc2V0Ij09Znx8InBhcmVudCI9PWYpfHx1JiYoImJ1ZmZlciI9PWZ8fCJieXRlTGVuZ3RoIj09Znx8ImJ5dGVPZmZzZXQiPT1mKXx8ayhmLGMpKXx8YS5wdXNoKGYpO3JldHVybiBhfXZhciBHPU9iamVjdC5wcm90b3R5cGU7dmFyIHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLFY9cSxYPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxHKSlyZXR1cm4gVih0KTt2YXIgZSxyLG49W107Zm9yKHZhciBvIGluIE9iamVjdCh0KSlYLmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufWZ1bmN0aW9uIEoodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9dmFyIEs9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLFE9IltvYmplY3QgRnVuY3Rpb25dIixZPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWj0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIHR0KHQpe2lmKCFKKHQpKXJldHVybiExO3ZhciBlPWQodCk7cmV0dXJuIGU9PVF8fGU9PVl8fGU9PUt8fGU9PVp9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIG51bGwhPXQmJiQodC5sZW5ndGgpJiYhdHQodCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIGV0KHQpP0ModCk6SCh0KX12YXIgbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihudWxsPT1yKXJldHVybiByO2lmKCFldChyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgbz1yLmxlbmd0aCx1PWU/bzotMSxpPU9iamVjdChyKTsoZT91LS06Kyt1PG8pJiYhMSE9PW4oaVt1XSx1LGkpOyk7cmV0dXJuIHJ9fSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmbyh0LGUscnQpfSkpLG90PW50O2Z1bmN0aW9uIHV0KHQpe3JldHVybiB0fWZ1bmN0aW9uIGl0KHQsZSl7dmFyIG47cmV0dXJuKE8odCk/cjpvdCkodCwiZnVuY3Rpb24iPT10eXBlb2Yobj1lKT9uOnV0KX12YXIgYXQsY3Q9YVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sZnQ9KGF0PS9bXi5dKyQvLmV4ZWMoY3QmJmN0LmtleXMmJmN0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIithdDoiIjt2YXIgc3Q9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGx0KHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gc3QuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIGh0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHB0PUZ1bmN0aW9uLnByb3RvdHlwZSx2dD1PYmplY3QucHJvdG90eXBlLHl0PXB0LnRvU3RyaW5nLGJ0PXZ0Lmhhc093blByb3BlcnR5LGR0PVJlZ0V4cCgiXiIreXQuY2FsbChidCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gZ3QodCl7cmV0dXJuISghSih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISFmdCYmZnQgaW4gdH0odCkpJiYodHQodCk/ZHQ6aHQpLnRlc3QobHQodCkpfWZ1bmN0aW9uIF90KHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gZ3Qocik/cjp2b2lkIDB9dmFyIGp0PV90KGEsIkRhdGFWaWV3IiksbXQ9X3QoYSwiTWFwIiksd3Q9X3QoYSwiUHJvbWlzZSIpLFN0PV90KGEsIlNldCIpLE90PV90KGEsIldlYWtNYXAiKSxBdD0iW29iamVjdCBNYXBdIix6dD0iW29iamVjdCBQcm9taXNlXSIsRXQ9IltvYmplY3QgU2V0XSIseHQ9IltvYmplY3QgV2Vha01hcF0iLE50PSJbb2JqZWN0IERhdGFWaWV3XSIsRnQ9bHQoanQpLGt0PWx0KG10KSxJdD1sdCh3dCksJHQ9bHQoU3QpLEx0PWx0KE90KSxNdD1kOyhqdCYmTXQobmV3IGp0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1OdHx8bXQmJk10KG5ldyBtdCkhPUF0fHx3dCYmTXQod3QucmVzb2x2ZSgpKSE9enR8fFN0JiZNdChuZXcgU3QpIT1FdHx8T3QmJk10KG5ldyBPdCkhPXh0KSYmKE10PWZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/bHQocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBGdDpyZXR1cm4gTnQ7Y2FzZSBrdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4genQ7Y2FzZSAkdDpyZXR1cm4gRXQ7Y2FzZSBMdDpyZXR1cm4geHR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX12YXIgVXQ9UnQoImxlbmd0aCIpLEJ0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTtmdW5jdGlvbiBEdCh0KXtyZXR1cm4gQnQudGVzdCh0KX12YXIgV3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsQ3Q9IlsiK1d0KyJdIixHdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLHF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLFZ0PSJbXiIrV3QrIl0iLFh0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixIdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsSnQ9Iig/OiIrR3QrInwiK3F0KyIpIisiPyIsS3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixRdD1LdCtKdCsoIig/OlxcdTIwMGQoPzoiK1tWdCxYdCxIdF0uam9pbigifCIpKyIpIitLdCtKdCsiKSoiKSxZdD0iKD86IitbVnQrR3QrIj8iLEd0LFh0LEh0LEN0XS5qb2luKCJ8IikrIikiLFp0PVJlZ0V4cChxdCsiKD89IitxdCsiKXwiK1l0K1F0LCJnIik7ZnVuY3Rpb24gdGUodCl7cmV0dXJuIER0KHQpP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1adC5sYXN0SW5kZXg9MDtadC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KHQpOlV0KHQpfWZ1bmN0aW9uIGVlKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoZXQodCkpcmV0dXJuInN0cmluZyI9PXR5cGVvZihlPXQpfHwhTyhlKSYmZyhlKSYmZChlKT09VHQ/dGUodCk6dC5sZW5ndGg7dmFyIGUscj1QdCh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOkgodCkubGVuZ3RofWZ1bmN0aW9uIHJlKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99ZnVuY3Rpb24gbmUodCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9ZnVuY3Rpb24gb2UodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihuZSh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciB1ZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIGllKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWllLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGllLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPW9lKGUsdCk7cmV0dXJuIShyPDApJiYocj09ZS5sZW5ndGgtMT9lLnBvcCgpOnVlLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0saWUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9b2UoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfSxpZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBvZSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxpZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPW9lKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBhZT1fdChPYmplY3QsImNyZWF0ZSIpO3ZhciBjZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBmZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHNlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGxlKHQsZSl7dmFyIHIsbixvPXQuX19kYXRhX187cmV0dXJuKCJzdHJpbmciPT0obj10eXBlb2Yocj1lKSl8fCJudW1iZXIiPT1ufHwic3ltYm9sIj09bnx8ImJvb2xlYW4iPT1uPyJfX3Byb3RvX18iIT09cjpudWxsPT09cik/b1sic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpvLm1hcH1mdW5jdGlvbiBoZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1zZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPWFlP2FlKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxzZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoYWUpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gY2UuY2FsbChlLHQpP2VbdF06dm9pZCAwfSxzZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGFlP3ZvaWQgMCE9PWVbdF06ZmUuY2FsbChlLHQpfSxzZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1hZSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfSxoZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBzZSxtYXA6bmV3KG10fHxpZSksc3RyaW5nOm5ldyBzZX19LGhlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9bGUodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0saGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbGUodGhpcyx0KS5nZXQodCl9LGhlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGxlKHRoaXMsdCkuaGFzKHQpfSxoZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bGUodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307ZnVuY3Rpb24gcGUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgaWUodCk7dGhpcy5zaXplPWUuc2l6ZX1wZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBpZSx0aGlzLnNpemU9MH0scGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn0scGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9LHBlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfSxwZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgaWUpe3ZhciBuPXIuX19kYXRhX187aWYoIW10fHxuLmxlbmd0aDwxOTkpcmV0dXJuIG4ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBoZShuKX1yZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemU9ci5zaXplLHRoaXN9O2Z1bmN0aW9uIHZlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBoZTsrK2U8cjspdGhpcy5hZGQodFtlXSl9ZnVuY3Rpb24geWUodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZlLnByb3RvdHlwZS5hZGQ9dmUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx2ZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX07dmFyIGJlPTEsZGU9MjtmdW5jdGlvbiBnZSh0LGUscixuLG8sdSl7dmFyIGk9ciZiZSxhPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoYSE9YyYmIShpJiZjPmEpKXJldHVybiExO3ZhciBmPXUuZ2V0KHQpLHM9dS5nZXQoZSk7aWYoZiYmcylyZXR1cm4gZj09ZSYmcz09dDt2YXIgbD0tMSxoPSEwLHA9ciZkZT9uZXcgdmU6dm9pZCAwO2Zvcih1LnNldCh0LGUpLHUuc2V0KGUsdCk7KytsPGE7KXt2YXIgdj10W2xdLHk9ZVtsXTtpZihuKXZhciBiPWk/bih5LHYsbCxlLHQsdSk6bih2LHksbCx0LGUsdSk7aWYodm9pZCAwIT09Yil7aWYoYiljb250aW51ZTtoPSExO2JyZWFrfWlmKHApe2lmKCF5ZShlLChmdW5jdGlvbih0LGUpe2lmKGk9ZSwhcC5oYXMoaSkmJih2PT09dHx8byh2LHQscixuLHUpKSlyZXR1cm4gcC5wdXNoKGUpO3ZhciBpfSkpKXtoPSExO2JyZWFrfX1lbHNlIGlmKHYhPT15JiYhbyh2LHkscixuLHUpKXtoPSExO2JyZWFrfX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUoZSksaH12YXIgX2U9YS5VaW50OEFycmF5O2Z1bmN0aW9uIGplKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3JbKytlXT1bbix0XX0pKSxyfWZ1bmN0aW9uIG1lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyWysrZV09dH0pKSxyfXZhciB3ZT0xLFNlPTIsT2U9IltvYmplY3QgQm9vbGVhbl0iLEFlPSJbb2JqZWN0IERhdGVdIix6ZT0iW29iamVjdCBFcnJvcl0iLEVlPSJbb2JqZWN0IE1hcF0iLHhlPSJbb2JqZWN0IE51bWJlcl0iLE5lPSJbb2JqZWN0IFJlZ0V4cF0iLEZlPSJbb2JqZWN0IFNldF0iLGtlPSJbb2JqZWN0IFN0cmluZ10iLEllPSJbb2JqZWN0IFN5bWJvbF0iLCRlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsTGU9IltvYmplY3QgRGF0YVZpZXddIixNZT1jP2MucHJvdG90eXBlOnZvaWQgMCxQZT1NZT9NZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBUZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPTAsdT1bXTsrK3I8bjspe3ZhciBpPXRbcl07ZShpLHIsdCkmJih1W28rK109aSl9cmV0dXJuIHV9dmFyIFJlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsVWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxCZT1VZT9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksVGUoVWUodCksKGZ1bmN0aW9uKGUpe3JldHVybiBSZS5jYWxsKHQsZSl9KSkpfTpmdW5jdGlvbigpe3JldHVybltdfTtmdW5jdGlvbiBEZSh0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIE8odCk/bjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWUubGVuZ3RoLG89dC5sZW5ndGg7KytyPG47KXRbbytyXT1lW3JdO3JldHVybiB0fShuLHIodCkpfSh0LHJ0LEJlKX12YXIgV2U9MSxDZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBHZT0xLHFlPSJbb2JqZWN0IEFyZ3VtZW50c10iLFZlPSJbb2JqZWN0IEFycmF5XSIsWGU9IltvYmplY3QgT2JqZWN0XSIsSGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZSh0LGUscixuLG8sdSl7dmFyIGk9Tyh0KSxhPU8oZSksYz1pP1ZlOlB0KHQpLGY9YT9WZTpQdChlKSxzPShjPWM9PXFlP1hlOmMpPT1YZSxsPShmPWY9PXFlP1hlOmYpPT1YZSxoPWM9PWY7aWYoaCYmeCh0KSl7aWYoIXgoZSkpcmV0dXJuITE7aT0hMCxzPSExfWlmKGgmJiFzKXJldHVybiB1fHwodT1uZXcgcGUpLGl8fEQodCk/Z2UodCxlLHIsbixvLHUpOmZ1bmN0aW9uKHQsZSxyLG4sbyx1LGkpe3N3aXRjaChyKXtjYXNlIExlOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSAkZTpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhdShuZXcgX2UodCksbmV3IF9lKGUpKSk7Y2FzZSBPZTpjYXNlIEFlOmNhc2UgeGU6cmV0dXJuIG5lKCt0LCtlKTtjYXNlIHplOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSBOZTpjYXNlIGtlOnJldHVybiB0PT1lKyIiO2Nhc2UgRWU6dmFyIGE9amU7Y2FzZSBGZTp2YXIgYz1uJndlO2lmKGF8fChhPW1lKSx0LnNpemUhPWUuc2l6ZSYmIWMpcmV0dXJuITE7dmFyIGY9aS5nZXQodCk7aWYoZilyZXR1cm4gZj09ZTtufD1TZSxpLnNldCh0LGUpO3ZhciBzPWdlKGEodCksYShlKSxuLG8sdSxpKTtyZXR1cm4gaS5kZWxldGUodCkscztjYXNlIEllOmlmKFBlKXJldHVybiBQZS5jYWxsKHQpPT1QZS5jYWxsKGUpfXJldHVybiExfSh0LGUsYyxyLG4sbyx1KTtpZighKHImR2UpKXt2YXIgcD1zJiZIZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksdj1sJiZIZS5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYocHx8dil7dmFyIHk9cD90LnZhbHVlKCk6dCxiPXY/ZS52YWx1ZSgpOmU7cmV0dXJuIHV8fCh1PW5ldyBwZSksbyh5LGIscixuLHUpfX1yZXR1cm4hIWgmJih1fHwodT1uZXcgcGUpLGZ1bmN0aW9uKHQsZSxyLG4sbyx1KXt2YXIgaT1yJldlLGE9RGUodCksYz1hLmxlbmd0aDtpZihjIT1EZShlKS5sZW5ndGgmJiFpKXJldHVybiExO2Zvcih2YXIgZj1jO2YtLTspe3ZhciBzPWFbZl07aWYoIShpP3MgaW4gZTpDZS5jYWxsKGUscykpKXJldHVybiExfXZhciBsPXUuZ2V0KHQpLGg9dS5nZXQoZSk7aWYobCYmaClyZXR1cm4gbD09ZSYmaD09dDt2YXIgcD0hMDt1LnNldCh0LGUpLHUuc2V0KGUsdCk7Zm9yKHZhciB2PWk7KytmPGM7KXt2YXIgeT10W3M9YVtmXV0sYj1lW3NdO2lmKG4pdmFyIGQ9aT9uKGIseSxzLGUsdCx1KTpuKHksYixzLHQsZSx1KTtpZighKHZvaWQgMD09PWQ/eT09PWJ8fG8oeSxiLHIsbix1KTpkKSl7cD0hMTticmVha312fHwodj0iY29uc3RydWN0b3IiPT1zKX1pZihwJiYhdil7dmFyIGc9dC5jb25zdHJ1Y3RvcixfPWUuY29uc3RydWN0b3I7Zz09X3x8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZyYmZyBpbnN0YW5jZW9mIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgX3x8KHA9ITEpfXJldHVybiB1LmRlbGV0ZSh0KSx1LmRlbGV0ZShlKSxwfSh0LGUscixuLG8sdSkpfWZ1bmN0aW9uIEtlKHQsZSxyLG4sbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IWcodCkmJiFnKGUpP3QhPXQmJmUhPWU6SmUodCxlLHIsbixLZSxvKSl9dmFyIFFlPTEsWWU9MjtmdW5jdGlvbiBaZSh0KXtyZXR1cm4gdD09dCYmIUoodCl9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KHIpKSl9fWZ1bmN0aW9uIGVyKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ydCh0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0sbz10W25dO2Vbcl09W24sbyxaZShvKV19cmV0dXJuIGV9KHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT90cihlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09dHx8ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ci5sZW5ndGgsdT1vLGk9IW47aWYobnVsbD09dClyZXR1cm4hdTtmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIGE9cltvXTtpZihpJiZhWzJdP2FbMV0hPT10W2FbMF1dOiEoYVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHU7KXt2YXIgYz0oYT1yW29dKVswXSxmPXRbY10scz1hWzFdO2lmKGkmJmFbMl0pe2lmKHZvaWQgMD09PWYmJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBsPW5ldyBwZTtpZihuKXZhciBoPW4oZixzLGMsdCxlLGwpO2lmKCEodm9pZCAwPT09aD9LZShzLGYsUWV8WWUsbixsKTpoKSlyZXR1cm4hMX19cmV0dXJuITB9KHIsdCxlKX19dmFyIHJyPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG5yKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Zyh0KSYmZCh0KT09cnJ9dmFyIG9yPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHVyPS9eXHcqJC87ZnVuY3Rpb24gaXIodCxlKXtpZihPKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFucih0KSl8fCh1ci50ZXN0KHQpfHwhb3IudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfXZhciBhcj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gY3IodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihhcik7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsbz1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLHU9ci5jYWNoZTtpZih1LmhhcyhvKSlyZXR1cm4gdS5nZXQobyk7dmFyIGk9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPXUuc2V0KG8saSl8fHUsaX07cmV0dXJuIHIuY2FjaGU9bmV3KGNyLkNhY2hlfHxoZSkscn1jci5DYWNoZT1oZTt2YXIgZnI9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csc3I9L1xcKFxcKT8vZyxscj1mdW5jdGlvbih0KXt2YXIgZT1jcih0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09ci5zaXplJiZyLmNsZWFyKCksdH0pKSxyPWUuY2FjaGU7cmV0dXJuIGV9KChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKGZyLChmdW5jdGlvbih0LHIsbixvKXtlLnB1c2gobj9vLnJlcGxhY2Uoc3IsIiQxIik6cnx8dCl9KSksZX0pKSxocj1scixwcj0xLzAsdnI9Yz9jLnByb3RvdHlwZTp2b2lkIDAseXI9dnI/dnIudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGJyKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZihPKHQpKXJldHVybiByZSh0LGJyKSsiIjtpZihucih0KSlyZXR1cm4geXI/eXIuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tcHI/Ii0wIjplfWZ1bmN0aW9uIGRyKHQpe3JldHVybiBudWxsPT10PyIiOmJyKHQpfWZ1bmN0aW9uIGdyKHQsZSl7cmV0dXJuIE8odCk/dDppcih0LGUpP1t0XTpocihkcih0KSl9dmFyIF9yPTEvMDtmdW5jdGlvbiBqcih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG5yKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1fcj8iLTAiOmV9ZnVuY3Rpb24gbXIodCxlKXtmb3IodmFyIHI9MCxuPShlPWdyKGUsdCkpLmxlbmd0aDtudWxsIT10JiZyPG47KXQ9dFtqcihlW3IrK10pXTtyZXR1cm4gciYmcj09bj90OnZvaWQgMH1mdW5jdGlvbiB3cih0LGUscil7dmFyIG49bnVsbD09dD92b2lkIDA6bXIodCxlKTtyZXR1cm4gdm9pZCAwPT09bj9yOm59ZnVuY3Rpb24gU3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0tMSxvPShlPWdyKGUsdCkpLmxlbmd0aCx1PSExOysrbjxvOyl7dmFyIGk9anIoZVtuXSk7aWYoISh1PW51bGwhPXQmJnIodCxpKSkpYnJlYWs7dD10W2ldfXJldHVybiB1fHwrK24hPW8/dTohIShvPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJiQobykmJmsoaSxvKSYmKE8odCl8fFModCkpfSh0LGUsU3IpfXZhciBBcj0xLHpyPTI7ZnVuY3Rpb24gRXIodCl7cmV0dXJuIGlyKHQpP1J0KGpyKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG1yKGUsdCl9fSh0KX1mdW5jdGlvbiB4cih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/dXQ6Im9iamVjdCI9PXR5cGVvZiB0P08odCk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaXIodCkmJlplKGUpP3RyKGpyKHQpLGUpOmZ1bmN0aW9uKHIpe3ZhciBuPXdyKHIsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1lP09yKHIsdCk6S2UoZSxuLEFyfHpyKX19KHRbMF0sdFsxXSk6ZXIodCk6RXIodCl9ZnVuY3Rpb24gTnIodCxlKXt2YXIgcj0tMSxuPWV0KHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxvLHUpe25bKytyXT1lKHQsbyx1KX0pKSxufWZ1bmN0aW9uIEZyKHQsZSl7cmV0dXJuKE8odCk/cmU6TnIpKHQseHIoZSkpfXZhciBrcj0vXHMvO3ZhciBJcj0vXlxzKy87ZnVuY3Rpb24gJHIodCl7cmV0dXJuIHQ/dC5zbGljZSgwLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJmtyLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9KHQpKzEpLnJlcGxhY2UoSXIsIiIpOnR9ZnVuY3Rpb24gTHIodCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiByPXZvaWQgMD09PXI/bjpyLCFlJiZyPj1uP3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPS0xLG89dC5sZW5ndGg7ZTwwJiYoZT0tZT5vPzA6bytlKSwocj1yPm8/bzpyKTwwJiYocis9byksbz1lPnI/MDpyLWU+Pj4wLGU+Pj49MDtmb3IodmFyIHU9QXJyYXkobyk7KytuPG87KXVbbl09dFtuK2VdO3JldHVybiB1fSh0LGUscil9ZnVuY3Rpb24gTXIodCl7cmV0dXJuIHQhPXR9ZnVuY3Rpb24gUHIodCxlLHIpe3JldHVybiBlPT1lP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci0xLG89dC5sZW5ndGg7KytuPG87KWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfSh0LGUscik6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBvPXQubGVuZ3RoLHU9cisobj8xOi0xKTtuP3UtLTorK3U8bzspaWYoZSh0W3VdLHUsdCkpcmV0dXJuIHU7cmV0dXJuLTF9KHQsTXIscil9dmFyIFRyPSJcXHVkODAwLVxcdWRmZmYiLFJyPSJbIitUcisiXSIsVXI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixCcj0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixEcj0iW14iK1RyKyJdIixXcj0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsQ3I9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLEdyPSIoPzoiK1VyKyJ8IitCcisiKSIrIj8iLHFyPSJbXFx1ZmUwZVxcdWZlMGZdPyIsVnI9cXIrR3IrKCIoPzpcXHUyMDBkKD86IitbRHIsV3IsQ3JdLmpvaW4oInwiKSsiKSIrcXIrR3IrIikqIiksWHI9Iig/OiIrW0RyK1VyKyI/IixVcixXcixDcixScl0uam9pbigifCIpKyIpIixIcj1SZWdFeHAoQnIrIig/PSIrQnIrIil8IitYcitWciwiZyIpO2Z1bmN0aW9uIEpyKHQpe3JldHVybiBEdCh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaChIcil8fFtdfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiIil9KHQpfWZ1bmN0aW9uIEtyKHQsZSxyKXtpZigodD1kcih0KSkmJihyfHx2b2lkIDA9PT1lKSlyZXR1cm4gJHIodCk7aWYoIXR8fCEoZT1icihlKSkpcmV0dXJuIHQ7dmFyIG49SnIodCksbz1KcihlKSx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGg7KytyPG4mJlByKGUsdFtyXSwwKT4tMTspO3JldHVybiByfShuLG8pLGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tJiZQcihlLHRbcl0sMCk+LTE7KTtyZXR1cm4gcn0obixvKSsxO3JldHVybiBMcihuLHUsaSkuam9pbigiIil9ZnVuY3Rpb24gUXIodCl7cmV0dXJuISEoZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpJiZ0Lmxlbmd0aD4wKX1mdW5jdGlvbiBZcih0LGUpe2lmKCFRcih0KSlyZXR1cm5bXTtpZighUXIoZSkpcmV0dXJuW107bGV0IHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUXIodCkmJlFyKGUpP3Quc3BsaXQoZSk6W119KHQsZSk7cj1GcihyLEtyKTtsZXQgbj1bXTtyZXR1cm4gaXQociwoZnVuY3Rpb24odCl7UXIodCkmJm4ucHVzaCh0KX0pKSxufXZhciBacj1OYU4sdG49L15bLStdMHhbMC05YS1mXSskL2ksZW49L14wYlswMV0rJC9pLHJuPS9eMG9bMC03XSskL2ksbm49cGFyc2VJbnQ7ZnVuY3Rpb24gb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG5yKHQpKXJldHVybiBacjtpZihKKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1KKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD0kcih0KTt2YXIgcj1lbi50ZXN0KHQpO3JldHVybiByfHxybi50ZXN0KHQpP25uKHQuc2xpY2UoMikscj8yOjgpOnRuLnRlc3QodCk/WnI6K3R9dmFyIHVuPTEvMCxhbj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gY24odCl7cmV0dXJuIHQ/KHQ9b24odCkpPT09dW58fHQ9PT0tdW4/KHQ8MD8tMToxKSphbjp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gZm4odCl7dmFyIGU9Y24odCkscj1lJTE7cmV0dXJuIGU9PWU/cj9lLXI6ZTowfXZhciBzbj0iW29iamVjdCBCb29sZWFuXSI7ZnVuY3Rpb24gbG4odCl7cmV0dXJuITA9PT0oZT10KXx8ITE9PT1lfHxnKGUpJiZkKGUpPT1zbjt2YXIgZX1mdW5jdGlvbiBobih0KXtsZXQgZT0hMTtpZihRcih0KSl7aWYoIiI9PT10LnRyaW0oKSlyZXR1cm4hMTtlPSFpc05hTihOdW1iZXIodCkpfWVsc2UgaWYoZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpKXtpZihmdW5jdGlvbih0KXtpZih0IT10KXJldHVybiEwO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQpdHJ5e2xldCBlPU51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHQpO3JldHVybiBOdW1iZXIuaXNOYU4oZSl9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITF9KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9ZnVuY3Rpb24gcG4odCl7aWYoIWhuKHQpKXJldHVybiAwO3JldHVybiBjbih0KX1mdW5jdGlvbiB2bih0LGU9e30pe2xldCByPXdyKGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7cmV0dXJuIGxuKHIpfHwocj0hMSksISFobih0KSYmKHQ9cG4odCkscj9OdW1iZXIuaXNTYWZlSW50ZWdlcih0KToibnVtYmVyIj09dHlwZW9mKG49dCkmJm49PWZuKG4pKTt2YXIgbn12YXIgeW49YS5pc0Zpbml0ZSxibj1NYXRoLm1pbjt2YXIgZG49ZnVuY3Rpb24odCl7dmFyIGU9TWF0aFt0XTtyZXR1cm4gZnVuY3Rpb24odCxyKXtpZih0PW9uKHQpLChyPW51bGw9PXI/MDpibihmbihyKSwyOTIpKSYmeW4odCkpe3ZhciBuPShkcih0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygobj0oZHIoZShuWzBdKyJlIisoK25bMV0rcikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK25bMV0tcikpfXJldHVybiBlKHQpfX0oInJvdW5kIiksZ249ZG47ZnVuY3Rpb24gX24odCxlPXt9KXtsZXQgcj13cihlLCJ1c2VDbGFtcFNhZmUiLG51bGwpO2xuKHIpfHwocj0hMSk7bGV0IG49d3IoZSwidXNlTGltaXRTYWZlIixudWxsKTtsbihuKXx8KG49ITEpO2xldCBvPXdyKGUsInJldHVybldpdGhTdGF0ZUFuZE1zZyIsbnVsbCk7bG4obyl8fChvPSExKTtsZXQgdT10PT5vP3tzdGF0ZToic3VjY2VzcyIsbXNnOnR9OnQsaT10PT57aWYobylyZXR1cm57c3RhdGU6ImVycm9yIixtc2c6dH07dGhyb3cgbmV3IEVycm9yKHQpfTtpZighaG4odCkpcmV0dXJuIHUoMCk7bGV0IGE9bnVsbDt0cnl7dD1wbih0KSxhPWduKHQpLHImJihhPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2E9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI6YTxOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmKGE9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKX1jYXRjaCh0KXtyZXR1cm4gaSh0LnRvU3RyaW5nKCkpfXJldHVybiBuJiYhTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGEpKT9pKGB2WyR7dH1dIGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApOigiMCI9PT1TdHJpbmcoYSkmJihhPTApLHUoYSkpfWZ1bmN0aW9uIGpuKHQsZT17fSl7aWYoIXZuKHQsZSkpcmV0dXJuITE7cmV0dXJuIF9uKHQpPj0wfWZ1bmN0aW9uIG1uKHQsZT17fSl7bGV0IHI9d3IoZSwiZnMiKSxuPSExO3RyeXtyLnN0YXRTeW5jKHQpLG49ITB9Y2F0Y2h7bj0hMX1yZXR1cm4gbn1mdW5jdGlvbiB3bih0LGU9e30pe2xldCByPXdyKGUsImZzIik7cmV0dXJuISFtbih0LHtmczpyfSkmJighci5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIXIubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCkpfWZ1bmN0aW9uIFNuKHQpe3JldHVybiB3bih0LHtmczplfSl9ZnVuY3Rpb24gT24odCxlKXt2YXIgcj1bXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxuLG8pe2UodCxuLG8pJiZyLnB1c2godCl9KSkscn1mdW5jdGlvbiBBbih0LGU9e30pe2lmKCF2bih0LGUpKXJldHVybiExO3JldHVybiBfbih0KT4wfWZ1bmN0aW9uIHpuKHQsZT17fSl7bGV0IHI9d3IoZSwiZnMiKTtpZighbW4odCx7ZnM6cn0pKXJldHVybiExO2xldCBuPXIubHN0YXRTeW5jKHQpO3JldHVybiFuLmlzRmlsZSgpJiYhbi5pc1N5bWJvbGljTGluaygpfWZ1bmN0aW9uIEVuKHQsZT0xLHI9e30pe2xldCBuPXdyKHIsInBhdGgiKSxvPXdyKHIsImZzIik7aWYoIXpuKHQse2ZzOm99KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO2xldCB1PVtdO3ZhciBpLGE7cmV0dXJuIHU9ZnVuY3Rpb24odCxlPTEscj17fSl7bGV0IG49MSxvPXdyKHIsInBhdGgiKSx1PXdyKHIsImZzIik7aWYoIXpuKHQse2ZzOnV9KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO3JldHVybiBudWxsIT09ZSYmQW4oZSkmJihlPV9uKGUpKTwxJiYoZT0xKSxmdW5jdGlvbiB0KHIpe2xldCBpPVtdO3JldHVybiB6bihyLHtmczp1fSk/KGl0KHUucmVhZGRpclN5bmMociksKGZ1bmN0aW9uKGEpe2xldCBjPW8ucmVzb2x2ZShyLGEpLGY9bnVsbDt0cnl7Zj11LnN0YXRTeW5jKGMpfWNhdGNoKHQpe31mJiZmLmlzRGlyZWN0b3J5KCk/KGkucHVzaCh7aXNGb2xkZXI6ITAsbGV2ZWw6bixwYXRoOmMsbmFtZTpvLmJhc2VuYW1lKGMpfSksbis9MSwobjw9ZXx8bnVsbD09PWUpJiYoaT1pLmNvbmNhdCh0KGMpKSksbi09MSk6aS5wdXNoKHtpc0ZvbGRlcjohMSxsZXZlbDpuLHBhdGg6YyxuYW1lOm8uYmFzZW5hbWUoYyl9KX0pKSxpKTppfSh0KX0odCxlLHtwYXRoOm4sZnM6b30pLGE9e2lzRm9sZGVyOiExfSx1PShPKGk9dSk/VGU6T24pKGkseHIoYSkpLHU9RnIodSwodD0+KGRlbGV0ZSB0LmlzRm9sZGVyLHQpKSksdX1jb25zdCB4bj1uZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw0OCw4LDk2LDMsMTI3LDEyNywxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNywwLDk2LDIsMTI3LDEyNywwLDk2LDEsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjYsMSwxMjYsOTYsMywxMjYsMTI3LDEyNywxLDEyNiw5NiwyLDEyNywxMjYsMCw5NiwxLDEyNywxLDEyNiwzLDExLDEwLDAsMCwyLDEsMyw0LDUsNiwxLDcsNSwzLDEsMCwxLDcsODUsOSwzLDEwOSwxMDEsMTA5LDIsMCw1LDEyMCwxMjAsMTA0LDUxLDUwLDAsMCw2LDEwNSwxMTAsMTA1LDExNiw1MSw1MCwwLDIsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDUxLDUwLDAsMyw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDUxLDUwLDAsNCw1LDEyMCwxMjAsMTA0LDU0LDUyLDAsNSw2LDEwNSwxMTAsMTA1LDExNiw1NCw1MiwwLDcsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDU0LDUyLDAsOCw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDU0LDUyLDAsOSwxMCwyNTEsMjIsMTAsMjQyLDEsMSw0LDEyNywzMiwwLDMyLDEsMTA2LDMzLDMsMzIsMSw2NSwxNiw3OSw0LDEyNywzMiwzLDY1LDE2LDEwNywzMyw2LDMyLDIsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDMzLDMsMzIsMiw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsMzMsNCwzMiwyLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiwzMyw1LDMsNjQsMzIsMywzMiwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNCwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNCwzMiwyLDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDUsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNiwzMiwwLDY1LDQsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY1LDEyLDExOSwzMiw1LDY1LDE4LDExOSwxMDYsMzIsNCw2NSw3LDExOSwxMDYsMzIsMyw2NSwxLDExOSwxMDYsNSwzMiwyLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwxLDEwNiwzMiwwLDMyLDEsNjUsMTUsMTEzLDE2LDEsMTEsMTQ2LDEsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwxLDY1LDQsMTA2LDMyLDIsNzUsNjksNCw2NCwzMiwwLDMyLDEsNDAsMiwwLDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDEwNiw2NSwxNywxMTksNjUsMTc1LDIxNCwyMTEsMTkwLDIsMTA4LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDEyLDEsMTEsMTEsMyw2NCwzMiwxLDMyLDIsNzksNjksNCw2NCwzMiwwLDMyLDEsNDUsMCwwLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwOCwxMDYsNjUsMTEsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY1LDE1LDExOCwxMTUsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMzQsMCw2NSwxMywxMTgsMzIsMCwxMTUsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMzQsMCw2NSwxNiwxMTgsMzIsMCwxMTUsMTEsNjMsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwxLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsMSw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsNTQsMiwwLDExLDE5NSw0LDEsNiwxMjcsMzIsMSwzMiwyLDEwNiwzMyw2LDMyLDAsNjUsMjQsMTA2LDMzLDQsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQwLDIsMCwzMiwyLDEwNiw1NCwyLDAsMzIsMCw2NSw0LDEwNiwzNCw1LDMyLDUsNDAsMiwwLDMyLDIsNjUsMTYsNzksMzIsMCw0MCwyLDAsNjUsMTYsNzksMTE0LDExNCw1NCwyLDAsMzIsMiwzMiwzLDEwNiw2NSwxNiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwxNiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw0LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDgsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsMTIsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDQwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSwzMiw2LDY1LDE2LDEwNyw3Nyw0LDY0LDMyLDYsNjUsMTYsMTA3LDMzLDgsMzIsMCw2NSw4LDEwNiw0MCwyLDAsMzMsMiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsMzMsMywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsNSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsMzMsNywzLDY0LDMyLDIsMzIsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDMsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNSwzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw3LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw3LDMyLDgsMzIsMSw2NSw0LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiwyLDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwzLDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiw1LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiw3LDU0LDIsMCwxMSwzMiwxLDMyLDYsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNiwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsOTcsMSwxLDEyNywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsMSwzMiwwLDY1LDQsMTA2LDQwLDIsMCw0LDEyNywzMiwxLDY1LDEyLDExOSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsNjUsMTgsMTE5LDEwNiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsNjUsNywxMTksMTA2LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDY1LDEsMTE5LDEwNiw1LDMyLDEsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDAsNDAsMiwwLDEwNiwzMiwwLDY1LDI0LDEwNiwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMTYsMSwxMSwyNTUsMywyLDMsMTI2LDEsMTI3LDMyLDAsMzIsMSwxMDYsMzMsNiwzMiwxLDY1LDMyLDc5LDQsMTI2LDMyLDYsNjUsMzIsMTA3LDMzLDYsMzIsMiw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCwzMywzLDMyLDIsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsMzMsNCwzMiwyLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywzLDMyLDQsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNCwzMiwyLDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDIsMzIsNSwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw1LDMyLDYsMzIsMCw2NSw4LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NiwxMiwxMzcsMzIsNSw2NiwxOCwxMzcsMTI0LDMyLDQsNjYsNywxMzcsMTI0LDMyLDMsNjYsMSwxMzcsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwyLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwyLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDEsMTczLDEyNCwzMiwwLDMyLDEsNjUsMzEsMTEzLDE2LDYsMTEsMTM0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwyLDMyLDEsNjUsOCwxMDYsNzksNCw2NCwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMiwwLDEzMyw2NiwyNywxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMywwLDMyLDEsNjUsOCwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDEsNjUsNCwxMDYsMzIsMiw3Nyw0LDY0LDMyLDAsMzIsMSw1MywyLDAsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMjMsMTM3LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI0LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDExLDMsNjQsMzIsMSwzMiwyLDczLDQsNjQsMzIsMCwzMiwxLDQ5LDAsMCw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNiwxMzMsNjYsMTEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjYsMzMsMTM2LDEzMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwzNCwwLDMyLDAsNjYsMjksMTM2LDEzMyw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNiwzNCwwLDMyLDAsNjYsMzIsMTM2LDEzMywxMSw3NywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsMSw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsMSw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCw1NSwzLDAsMTEsMjQ0LDQsMiwzLDEyNyw0LDEyNiwzMiwxLDMyLDIsMTA2LDMzLDUsMzIsMCw2NSw0MCwxMDYsMzMsNCwzMiwwLDY1LDIwMCwwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDEsMywwLDMyLDIsMTczLDEyNCw1NSwzLDAsMzIsMiwzMiwzLDEwNiw2NSwzMiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwzMiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDgsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwxNiwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDI0LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDIwMCwwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSw2NSwzMiwxMDYsMzIsNSw3Nyw0LDY0LDMyLDUsNjUsMzIsMTA3LDMzLDIsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzMsNiwzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzMsNywzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsOCwzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzMsOSwzLDY0LDMyLDYsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDYsMzIsNywzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw3LDMyLDgsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOCwzMiw5LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDksMzIsMiwzMiwxLDY1LDgsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDcsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDgsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDksNTUsMywwLDExLDMyLDEsMzIsNSw3Myw0LDY0LDMyLDQsMzIsMSwzMiw1LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSwxODgsMiwxLDUsMTI2LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMywxLDMyLDAsNDEsMywwLDM0LDIsNjYsMzIsOTAsNCwxMjYsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzQsMyw2NiwxLDEzNywzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzQsNCw2Niw3LDEzNywxMjQsMzIsMSw2NiwxMiwxMzcsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDM0LDUsNjYsMTgsMTM3LDEyNCwxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDEsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDEsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMiwxMjQsMzIsMCw2NSw0MCwxMDYsMzIsMiw2NiwzMSwxMzEsMTY3LDE2LDYsMTFdKTtmdW5jdGlvbiBObih0KXt0cnl7cmV0dXJuIFN0cmluZyh0KX1jYXRjaCh0KXt9dHJ5e2xldCBlPXQubWVzc2FnZTtpZigic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZSlyZXR1cm4gZX1jYXRjaCh0KXt9cmV0dXJuInVua25vd24gZXJyb3IifWFzeW5jIGZ1bmN0aW9uIEZuKHQsZT17fSl7bGV0IHI9ZnVuY3Rpb24oKXtsZXQgdCxlLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKCl7dD1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV19KSk7cmV0dXJuIHIucmVzb2x2ZT10LHIucmVqZWN0PWUscn0oKTt0cnl7bGV0IG49d3IoZSwiZnMiKSxvPXdyKGUsImNodW5rU2l6ZSIpO2lmKEFuKG8pfHwobz02NzEwODg2NCksbz1fbihvKSxvPjIqKjMwJiYobz02NzEwODg2NCksIXduKHQse2ZzOm59KSlyZXR1cm4gci5yZWplY3QoImZwIGlzIG5vdCBhIGZpbGUiKSxyO2xldHtjcmVhdGU2NDp1fT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06ZSx4eGgzMjpyLHh4aDY0Om4saW5pdDMyOm8sdXBkYXRlMzI6dSxkaWdlc3QzMjppLGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6Zn19PXQ7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpO2Z1bmN0aW9uIGwodCxyKXtpZihlLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrcil7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrci1lLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ZS5ncm93KG4pLHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpfX1mdW5jdGlvbiBoKHQsZSxyLG4sbyx1KXtsKHQpO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHMuc2V0KGkpLHIoMCxlKSxpLnNldChzLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUoZSl7bGV0IHI7cmV0dXJuIHMuc2V0KGkpLCJzdHJpbmciPT10eXBlb2YgZT8obCgzKmUubGVuZ3RoLHQpLHI9Yi5lbmNvZGVJbnRvKGUscy5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoZS5ieXRlTGVuZ3RoLHQpLHMuc2V0KGUsdCkscj1lLmJ5dGVMZW5ndGgpLG4oMCx0LHIpLGkuc2V0KHMuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4ocy5zZXQoaSksdShvKDApKSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHY9Mm4qKjY0bi0xbjtmdW5jdGlvbiB5KHQpe3JldHVybiB0JnZ9Y29uc3QgYj1uZXcgVGV4dEVuY29kZXIsZD0wLGc9MG47ZnVuY3Rpb24gXyh0LGU9ZCl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxwKHIoMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1mdW5jdGlvbiBqKHQsZT1nKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLHkobigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxlPWQpPT5fKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQsZT1kKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHAocigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTMyOih0PWQpPT5oKDQ4LHQsbyx1LGkscCksaDY0OmosaDY0VG9TdHJpbmc6KHQsZT1nKT0+aih0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxlPWcpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCkseShuKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlNjQ6KHQ9Zyk9PmgoODgsdCxhLGMsZix5KX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh4bikpLmluc3RhbmNlKX0oKSxpPXUoKSxhPW4uY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm99KSxjPXQ9PntyLnJlamVjdChObih0KSk7dHJ5e2EuZGVzdHJveSgpfWNhdGNoKHQpe319O2Eub24oImRhdGEiLCh0PT57dHJ5e2kudXBkYXRlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVuZCIsKCgpPT57dHJ5e2xldCB0PWkuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIik7ci5yZXNvbHZlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVycm9yIiwodD0+e3IucmVqZWN0KE5uKHQpKX0pKX1jYXRjaCh0KXtyLnJlamVjdChObih0KSl9cmV0dXJuIHJ9bW9kdWxlLmV4cG9ydHM9YXN5bmMocixuLG8sdSk9PntsZXQgaT10LnJlc29sdmUodSxvKSxhPSExO2lmKGE9U24oaSksIWpuKHIse3VzZUxpbWl0U2FmZTohMH0pKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZVNpemUgaW4gcGF5bG9hZCJ9fXI9X24ocik7bGV0IGM9ITE7aWYoYSl7bGV0IHQ9LTE7dHJ5e3Q9ZS5zdGF0U3luYyhpKS5zaXplfWNhdGNoKHQpe2NvbnNvbGUubG9nKCJjaGVjayB0b3RhbCBmaWxlIHNpemU6IGZzLnN0YXRTeW5jKHBhdGhGaWxlKSIsaSx0KX1jPXI9PT10fWxldCBmPSExO2EmJmMmJmF3YWl0IGZ1bmN0aW9uKHQscj17fSl7dHJ5e3JldHVybiBGbih0LHtmczplLC4uLnJ9KX1jYXRjaCh0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoTm4odCkpfX0oaSkudGhlbigodD0+e2Y9bz09PXR9KSkuY2F0Y2goKHQ9Pntjb25zb2xlLmxvZygiZnNJc0ZpbGUocGF0aEZpbGUpIixpLFNuKGkpKSxjb25zb2xlLmxvZyh0KSxmPSExfSkpO2xldCBzPVtdO2lmKCFmKXtpdChmdW5jdGlvbihyLG49MSl7cmV0dXJuIEVuKHIsbix7cGF0aDp0LGZzOmV9KX0odSksKHQ9PntsZXQgcj10Lm5hbWUuc3RhcnRzV2l0aChgJHtvfV9gKSx1PSExO3RyeXtsZXQgcj1lLnN0YXRTeW5jKHQucGF0aCk7dT1yLnNpemU+MCYmci5zaXplPD1ufWNhdGNoKGUpe2NvbnNvbGUubG9nKCJjaGVjayBlYWNoIGZpbGUgc2l6ZTogZnMuc3RhdFN5bmMocGF0aEZpbGUpIix0LnBhdGgsZSl9aWYociYmdSl7bGV0IGU9WXIodC5uYW1lLGAke299X2ApLHI9KGE9bnVsbD09KGk9ZSk/MDppLmxlbmd0aCk/aVthLTFdOnZvaWQgMDtpZigham4ocikpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coYHNraXAgZmlsZVske3QubmFtZX1dOiBjYW4gbm90IHBhcnNlIGNodW5rIGluZGV4YCk7cj1fbihyKSxzLnB1c2gocil9dmFyIGksYX0pKX1sZXQgbD1lZShzKT4wO3JldHVybntwYXRoOmksYkFsbEV4aXN0OmEsYkFsbFNpemU6YyxiQWxsSGFzaDpmLGJTbHM6bCxzbGtzOnN9fTsKCiAgICB9KS5jYWxsKG1kVXNlci5leHBvcnRzLCBtZFVzZXIsIG1kVXNlci5leHBvcnRzKQoKICAgIC8v6aCQ6Kit5Yyv5Ye6OiByb2xsdXDku6VfX2VzTW9kdWxl5qiZ56S66aCQ6Kit6IiH5YW35ZCN5Lim5a2Y6ICFLCDlj5blhbZkZWZhdWx0OyDlkKbliYdtb2R1bGUuZXhwb3J0c+WNs+mgkOioreWMr+WHuijlj6rmnInlhbflkI3ljK/lh7rogIXngrrlkb3lkI3nqbrplpPnianku7YpCiAgICByZXR1cm4gKG1kVXNlci5leHBvcnRzICYmIG1kVXNlci5leHBvcnRzLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1kVXNlci5leHBvcnRzKSA/IG1kVXNlci5leHBvcnRzLmRlZmF1bHQgOiBtZFVzZXIuZXhwb3J0cwoKfSkoKSkKCg==",Buffer.from(s,"base64").toString("utf8"));var s;function i(){let n=new r,s=n.emit.bind(n),i={},o=!1,u="worker is dead",l=!1;function a(e){for(let t in i){let r=i[t];delete i[t],r.reject(e)}}function c(e){a(e),s("error",e)}function d(e){o||(o=!0,c(e))}let w=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){u=e,d(e)}}(t);function D(){w?(l=!0,o||(o=!0,u="worker has been terminated"),w.terminate(),w=void 0,a("worker has been terminated")):c("worker has been terminated")}function y(e){return function(){let t=function(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}();if(o)return t.reject(u),t;let r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=r.length;for(let s=0;s<e;s++)t[s]=r[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:r,fun:e,input:[...arguments]};try{w.postMessage(n)}catch(e){return t.reject(e),t}return i[r]=t,t}}w||o||(u="invalid worker",d(u)),w&&(w.on("message",function(e){let t=e,r=t&&t.mode;if("emit"===r||"return"===r||"messageerror"===r){if("emit"===r&&s(t.evName,t.msg),"return"===r){let e=i[t.id];e&&(delete i[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===r&&c(t.msg)}}),w.on("error",d),w.on("exit",e=>{l||d("worker exit, code["+e+"]")}),w.on("messageerror",e=>{c(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{w.postMessage(e)}catch(e){throw D(),e}}([...arguments]));for(let e of["main"])n[e]=y(e);return n.terminate=D,n}n=async function(){let e=[...arguments],t=i();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return r},set exports(e){r=e}}),r)}($s);var _s=nn($s.exports),qs={exports:{}};!function(e){var t,r;e.exports=(t=o,r={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function s(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,n,i,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new s(n,i||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,s=[];if(0===this._eventsCount)return s;for(n in e=this._events)t.call(e,n)&&s.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var s=0,i=n.length,o=new Array(i);s<i;s++)o[s]=n[s].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,s,i,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,s),!0;case 5:return c.fn.call(c.context,t,n,s,i),!0;case 6:return c.fn.call(c.context,t,n,s,i,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,D=c.length;for(a=0;a<D;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,s);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return i(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return i(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,s){var i=r?r+e:e;if(!this._events[i])return this;if(!t)return o(this,i),this;var u=this._events[i];if(u.fn)u.fn!==t||s&&!u.once||n&&u.context!==n||o(this,i);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||s&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[i]=1===a.length?a[0]:a:o(this,i)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}({get exports(){return t},set exports(e){t=e}});var r=t;let n;return function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(s="J3VzZSBzdHJpY3QnCgoKCjsoZnVuY3Rpb24gKHBhcmVudFBvcnQsIG1kRGVmYXVsdCkgewoKbGV0IGluc3RhbmNlID0gbnVsbApsZXQgaW5pdEZhaWwgPSBudWxsIC8v5Yid5aeL5YyW5aSx5pWXKOW3peW7oOWHveaVuOaLi+mMr+etiSnmmYLkuYt7IGVyciB9LCDku6Xnianku7bljIXoo53lm6DpjK/oqqTlgLzlj6/ngrrku7vmhI/lgLw7IOW+jOe6jOWRvOWPq+S7peWFtuWOn+Wni+mMr+iqpOWbnuaHiQpmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBtZERlZmF1bHQKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEsIGRlc2MpIHsKICAgIHRyeSB7CiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgfQogICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vZGF0YeWQq+eEoeazlee1kOani+WMluikh+ijveS5i+WFp+WuuSjlh73mlbjjgIFTeW1ib2znrYkp5pmCcG9zdE1lc3NhZ2XlkIzmraXmi4tEYXRhQ2xvbmVFcnJvcjog5LiN6JmV55CG5YmH5ouL5pa85ZG85Y+r6Lev5b6R5aSWLCDmlrxub2RlanPmiJB3b3JrZXLmnKrmjZXmjYnpjK/oqqTogIzltKnmvbAo5oyB5LmF6IiH5bel5bug5a+m6auU5b6e5q2k5q275LqhKSwg5pa854CP6Ka95Zmo5oiQ5pyq6JmV55CGcmVqZWN0aW9u6ICM5ZG85Y+r5rC45LmF5oe4572uOwogICAgICAgIC8v5L6d6KiK5oGv6aGe5Z6L5pS56YCB5Y+v6KSH6KO95LmL5a2X5Liy6Kqq5piOKGRlc2PngrrlhaflrrnkuYvmj4/ov7ApLCDkvb/lkbzlj6vnq6/lvpfliLDlhbflkI3ljp/lm6DkuJR3b3JrZXLnuozlj6/mnI3li5k7IOWFnOW6leWGjeWkseaVl+WNs+aUvuajhCwg5LiN5Y+v6YGe6L+0CiAgICAgICAgbGV0IG1zZyA9ICcnCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbXNnID0gZGVzYyArICcgY291bGQgbm90IGJlIGNsb25lZDogJyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgICAgIGxldCBkYXRhU2FmZSA9IG51bGwKICAgICAgICBpZiAoZGF0YS5tb2RlID09PSAncmV0dXJuJykgewogICAgICAgICAgICBkYXRhU2FmZSA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGF0YS5tb2RlID09PSAnZW1pdCcpIHsKICAgICAgICAgICAgZGF0YVNhZmUgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRhdGFTYWZlID0gewogICAgICAgICAgICAgICAgbW9kZTogZGF0YS5tb2RlLCAvL21lc3NhZ2VlcnJvcuS5i+mAmuefpeS4jeWPr+eVpemBjiwg5ZCm5YmH5aSW5bGk5ZG85Y+r5Lit5LmLcGVuZGluZ+aHuOe9rgogICAgICAgICAgICAgICAgbXNnLAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YVNhZmUpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBtZERlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKCiAgICAgICAgICAgIC8vaW5pdEZhaWwKICAgICAgICAgICAgaW5pdEZhaWwgPSB7IGVyciB9CgogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMsICdpbml0IGVycm9yJykKCiAgICAgICAgfQoKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9jaGVjaywg5Yid5aeL5YyW5aSx5pWX5pmCaW5zdGFuY2XngrpudWxsLCDku6XliJ3lp4vljJbkuYvljp/lp4vpjK/oqqTlm57mh4ko5ZCM5bu656uL5aSx5pWX5LmL6JmV572uKSwg5LiN5b6X5bCNbnVsbOWPluWAvOiAjOW+l+iqpOWwjuS5i1R5cGVFcnJvcgogICAgICAgICAgICBpZiAoaW5pdEZhaWwpIHsKICAgICAgICAgICAgICAgIHRocm93IGluaXRGYWlsLmVycgogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2Z1biwg6aCI54K65Ye95pW4LCDlkKbliYfku6XlhbflkI3oqIrmga/mi5LntZUo5LiN5b6X54K65bCNdW5kZWZpbmVk5Y+W5YC85oiW5ZG85Y+r5LmL6Kqk5bCOVHlwZUVycm9yKQogICAgICAgICAgICBsZXQgZnVuID0gKGluc3RhbmNlICE9PSBudWxsICYmIGluc3RhbmNlICE9PSB1bmRlZmluZWQpID8gaW5zdGFuY2VbZGF0YS5mdW5dIDogdW5kZWZpbmVkCiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uWycgKyBkYXRhLmZ1biArICddIGlzIG5vdCBhIGZ1bmN0aW9uIGluIHdvcmtlcicpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjLCDku6Vhd2FpdOWPluWAvDog6Z2eYXN5bmPlh73mlbjlm57lgrPpnZ5wcm9taXNl5pmC5Lqm5Y+v5Lqk5LuYLCDkuI3lvpflm6Dlkbzlj6sudGhlbuiAjOWkseaVlzsg5LulUmVmbGVjdC5hcHBseeaMh+WumnRoaXMo6KaLY3RoaXMpCiAgICAgICAgICAgIG1zZyA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuLCB1bmRlZmluZWQsIGlucHV0KQogICAgICAgICAgICBzdGF0ZSA9ICdzdWNjZXNzJwoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KCiAgICAgICAgLy9kZXNjLCDlm57mh4nlhaflrrnnhKHms5XntZDmp4vljJbopIfoo73mmYLlhZzlupXoqqrmmI7kuYvmj4/ov7AKICAgICAgICBsZXQgZGVzYyA9ICcnCiAgICAgICAgaWYgKHN0YXRlID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgZGVzYyA9ICdyZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluaXRGYWlsKSB7CiAgICAgICAgICAgIGRlc2MgPSAnaW5pdCBlcnJvcicKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2MgPSAncmVqZWN0ZWQgdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQoKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMsIGRlc2MpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZWVycm9yJywgKGVycikgPT4gewogICAgICAgICAgICBzZW5kTWVzc2FnZSh7IG1vZGU6ICdtZXNzYWdlZXJyb3InLCBtc2c6IGVyciB9LCAnbWVzc2FnZWVycm9yIG9mIHdvcmtlcicpCiAgICAgICAgfSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhHdvcmtlcuWFp+acquaNleaNiemMr+iqpCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuipsuS6jOebo+iBveacg+mYu+atondvcmtlcuS+nemgkOioree1guatoiwg5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOiAjOS7pHBlbmRpbmfmsLjkuYXmh7jnva4sIOaureWxjXdvcmtlcuS4puS7pOWuv+S4u+eEoeazlemAgOWHujsKICAgIC8v6Yyv6Kqk6ZuW5bey57aTZXJyb3Lkuovku7blgrPoh7PlpJblsaRyZWplY3QgcGVuZGluZywg5L2G54ShcGVuZGluZ+S4lOWRvOWPq+err+acquebo+iBvWVycm9y5pmCKGV2ZW50ZW1pdHRlcjPnhKHnm6Pogb3ogIXmmYJlbWl05LiN5ouL6YyvKeatpOi8uOWHuueCuuWUr+S4gOeXlei3oSwg5pWF5L+d55WZOwogICAgLy/mnKznm6Pogb3mlrzooqvljIXoo53nqIvlvI/norzln7fooYzkuYvlvozmiY3lronoo50sIOi8ieWFpeacn+S5i+mMr+iqpOS4jee2k+atpOiomOmMhAogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikgLy/oqLrmlrfovLjlh7roh7NzdGRlcnIo5ZCMTm9kZeacquaNleaNiemMr+iqpOS5i+aFo+S+iyksIHdvcmtlcuS5i3N0ZGlv6L2J6YCB6Iez5a6/5Li7LCDkuI3lvpfmt7flhaXlrr/kuLtzdGRvdXTkuYvos4fmlpnmtYEKICAgIH0pCgp9CmNhdGNoKGVycil7fQoKfSkoCi8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwpyZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLnBhcmVudFBvcnQsIC8vaW5uZXLku6VuZXcgV29ya2VyKGNvZGUsIHsgZXZhbDogdHJ1ZSB9KeWft+ihjCwgZXZhbOWtl+S4sumgkOioreS7pUNvbW1vbkpT6Kej5p6QKOiIh3BhY2thZ2UuanNvbuS5i3R5cGXnhKHpl5wsIOWDheeUsS0taW5wdXQtdHlwZeaxuuWumiksIOaVheW+l+S9v+eUqHJlcXVpcmUKLy/oqK3oqIjpmZDliLY6IOWuv+S4u+S7pS0taW5wdXQtdHlwZT1tb2R1bGXllZ/li5XmmYJ3b3JrZXLnubzmib/oqbLlj4PmlbgsIGlubmVy6KKr55W2RVNN6Kej5p6Q6ICMcmVxdWlyZeWkseaViCwg5bGs5LiN5pSv5o+05LmL5Z+36KGM5pa55byPCi8v6Iul6KaB5pa8bm9kZWpzIHdvcmtlcuWFp+S9v+eUqOeEoeazlei9ieitr+eahOWOn+eUn+Wll+S7tuS+i+WmgmZzLCDpgb/lhY3kvb/nlKjpoILlsaRpbXBvcnTliqDovInkvb/nlKgsIOWboOeEoeazlei9ieitr+acg+ebtOaOpeS/neeVmQovL+S4puWboGV2YWzlrZfkuLLngrpDb21tb25KU+iAjOS4jeaOpeWPl2ltcG9ydCwg5pWF5Ye654++6Yyv6Kqk54Sh5rOV6L2J6K2vCihmdW5jdGlvbiAoKSB7CgogICAgLy/kvb/nlKjogIXnqIvlvI/norwoY2pzKSwg5LulQ29tbW9uSlPmqKHntYTljIXoo53lh73mlbjln7fooYw7IOiIh+S4iuaWuWlubmVy5LmL5Ye95pW454K65YWE5byf5L2c55So5Z+fLCDkupLkuI3lj6/oposKICAgIGxldCBtZFVzZXIgPSAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICE9PSBudWxsKSA/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpLHI9QXJyYXkuaXNBcnJheSxuPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxvPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaT1ufHxvfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHU9aS5TeW1ib2wsYT1PYmplY3QucHJvdG90eXBlLGM9YS5oYXNPd25Qcm9wZXJ0eSxmPWEudG9TdHJpbmcscz11P3UudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIHA9IltvYmplY3QgTnVsbF0iLGg9IltvYmplY3QgVW5kZWZpbmVkXSIseT11P3UudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHYodCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD9oOnA6eSYmeSBpbiBPYmplY3QodCk/ZnVuY3Rpb24odCl7dmFyIGU9Yy5jYWxsKHQscykscj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89Zi5jYWxsKHQpO3JldHVybiBuJiYoZT90W3NdPXI6ZGVsZXRlIHRbc10pLG99KHQpOmZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCl9KHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgZD0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBnKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Yih0KSYmdih0KT09ZH12YXIgXz0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxqPS9eXHcqJC87ZnVuY3Rpb24gUyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX12YXIgdz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsbT0iW29iamVjdCBGdW5jdGlvbl0iLE89IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixBPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gTih0KXtpZighUyh0KSlyZXR1cm4hMTt2YXIgZT12KHQpO3JldHVybiBlPT1tfHxlPT1PfHxlPT13fHxlPT1BfXZhciBFLCQ9aVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sej0oRT0vW14uXSskLy5leGVjKCQmJiQua2V5cyYmJC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrRToiIjt2YXIgeD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gRih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIHguY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIEk9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sTT1GdW5jdGlvbi5wcm90b3R5cGUsUD1PYmplY3QucHJvdG90eXBlLFQ9TS50b1N0cmluZyxMPVAuaGFzT3duUHJvcGVydHksUj1SZWdFeHAoIl4iK1QuY2FsbChMKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBCKHQpe3JldHVybiEoIVModCl8fChlPXQseiYmeiBpbiBlKSkmJihOKHQpP1I6SSkudGVzdChGKHQpKTt2YXIgZX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gQihyKT9yOnZvaWQgMH12YXIgVT1rKE9iamVjdCwiY3JlYXRlIik7dmFyIEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgRz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFcodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcixuLG89dC5sZW5ndGg7by0tOylpZigocj10W29dWzBdKT09PShuPWUpfHxyIT1yJiZuIT1uKXJldHVybiBvO3JldHVybi0xfVcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1VP1UobnVsbCk6e30sdGhpcy5zaXplPTB9LFcucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sVy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoVSl7dmFyIHI9ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1yP3ZvaWQgMDpyfXJldHVybiBDLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH0sVy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIFU/dm9pZCAwIT09ZVt0XTpHLmNhbGwoZSx0KX0sVy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1VJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciBxPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gRCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1ELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9SChlLHQpO3JldHVybiEocjwwKSYmKHI9PWUubGVuZ3RoLTE/ZS5wb3AoKTpxLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0sRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1IKGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX0sRC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMuX19kYXRhX18sdCk+LTF9LEQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1IKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBWPWsoaSwiTWFwIik7ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG4sbz10Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KG49dHlwZW9mKHI9ZSkpfHwibnVtYmVyIj09bnx8InN5bWJvbCI9PW58fCJib29sZWFuIj09bj8iX19wcm90b19fIiE9PXI6bnVsbD09PXIpP29bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06by5tYXB9ZnVuY3Rpb24gWih0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1aLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IFcsbWFwOm5ldyhWfHxEKSxzdHJpbmc6bmV3IFd9fSxaLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9WCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxaLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFgodGhpcyx0KS5nZXQodCl9LFoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gWCh0aGlzLHQpLmhhcyh0KX0sWi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9WCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfTt2YXIgSj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gSyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKEopO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89ZT9lLmFwcGx5KHRoaXMsbik6blswXSxpPXIuY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciB1PXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1pLnNldChvLHUpfHxpLHV9O3JldHVybiByLmNhY2hlPW5ldyhLLkNhY2hlfHxaKSxyfUsuQ2FjaGU9Wjt2YXIgUSxZLHR0LGV0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJ0PS9cXChcXCk/L2csbnQ9KFE9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShldCwoZnVuY3Rpb24odCxyLG4sbyl7ZS5wdXNoKG4/by5yZXBsYWNlKHJ0LCIkMSIpOnJ8fHQpfSkpLGV9LFk9SyhRLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09dHQuc2l6ZSYmdHQuY2xlYXIoKSx0fSkpLHR0PVkuY2FjaGUsWSksb3Q9bnQ7dmFyIGl0PTEvMCx1dD11P3UucHJvdG90eXBlOnZvaWQgMCxhdD11dD91dC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gY3QodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHIodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99KHQsY3QpKyIiO2lmKGcodCkpcmV0dXJuIGF0P2F0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LWl0PyItMCI6ZX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gbnVsbD09dD8iIjpjdCh0KX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiByKHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFnKHQpKXx8ai50ZXN0KHQpfHwhXy50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX0odCxlKT9bdF06b3QoZnQodCkpfXZhciBsdD0xLzA7ZnVuY3Rpb24gcHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxnKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1sdD8iLTAiOmV9ZnVuY3Rpb24gaHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1zdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbcHQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufXZhciB5dD1PYmplY3QucHJvdG90eXBlO3ZhciB2dD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChlKHIpKX19KE9iamVjdC5rZXlzLE9iamVjdCksYnQ9dnQsZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBndCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHx5dCkpcmV0dXJuIGJ0KHQpO3ZhciBlLHIsbj1bXTtmb3IodmFyIG8gaW4gT2JqZWN0KHQpKWR0LmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufXZhciBfdD1rKGksIkRhdGFWaWV3IiksanQ9ayhpLCJQcm9taXNlIiksU3Q9ayhpLCJTZXQiKSx3dD1rKGksIldlYWtNYXAiKSxtdD0iW29iamVjdCBNYXBdIixPdD0iW29iamVjdCBQcm9taXNlXSIsQXQ9IltvYmplY3QgU2V0XSIsTnQ9IltvYmplY3QgV2Vha01hcF0iLEV0PSJbb2JqZWN0IERhdGFWaWV3XSIsJHQ9RihfdCksenQ9RihWKSx4dD1GKGp0KSxGdD1GKFN0KSxJdD1GKHd0KSxNdD12OyhfdCYmTXQobmV3IF90KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1FdHx8ViYmTXQobmV3IFYpIT1tdHx8anQmJk10KGp0LnJlc29sdmUoKSkhPU90fHxTdCYmTXQobmV3IFN0KSE9QXR8fHd0JiZNdChuZXcgd3QpIT1OdCkmJihNdD1mdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0Yocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSAkdDpyZXR1cm4gRXQ7Y2FzZSB6dDpyZXR1cm4gbXQ7Y2FzZSB4dDpyZXR1cm4gT3Q7Y2FzZSBGdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4gTnR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PVR0fSh0Lmxlbmd0aCkmJiFOKHQpfXZhciBSdD0iW29iamVjdCBTdHJpbmddIjt2YXIgQnQsa3Q9KEJ0PSJsZW5ndGgiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W0J0XX0pLFV0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgQ3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsR3Q9IlsiK0N0KyJdIixXdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLEh0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHF0PSJbXiIrQ3QrIl0iLER0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixWdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsWHQ9Iig/OiIrV3QrInwiK0h0KyIpIisiPyIsWnQ9IltcXHVmZTBlXFx1ZmUwZl0/IixKdD1adCtYdCsoIig/OlxcdTIwMGQoPzoiK1txdCxEdCxWdF0uam9pbigifCIpKyIpIitadCtYdCsiKSoiKSxLdD0iKD86IitbcXQrV3QrIj8iLFd0LER0LFZ0LEd0XS5qb2luKCJ8IikrIikiLFF0PVJlZ0V4cChIdCsiKD89IitIdCsiKXwiK0t0K0p0LCJnIik7ZnVuY3Rpb24gWXQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVdC50ZXN0KHQpfSh0KT9mdW5jdGlvbih0KXtmb3IodmFyIGU9UXQubGFzdEluZGV4PTA7UXQudGVzdCh0KTspKytlO3JldHVybiBlfSh0KTprdCh0KX1mdW5jdGlvbiB0ZSh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKEx0KHQpKXJldHVybiJzdHJpbmciPT10eXBlb2YoZT10KXx8IXIoZSkmJmIoZSkmJnYoZSk9PVJ0P1l0KHQpOnQubGVuZ3RoO3ZhciBlLG49UHQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PW58fCJbb2JqZWN0IFNldF0iPT1uP3Quc2l6ZTpndCh0KS5sZW5ndGh9dmFyIGVlPS9ccy87dmFyIHJlPS9eXHMrLztmdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmZWUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0odCkrMSkucmVwbGFjZShyZSwiIik6dH12YXIgb2U9TmFOLGllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHVlPS9eMGJbMDFdKyQvaSxhZT0vXjBvWzAtN10rJC9pLGNlPXBhcnNlSW50O2Z1bmN0aW9uIGZlKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihnKHQpKXJldHVybiBvZTtpZihTKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1TKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1uZSh0KTt2YXIgcj11ZS50ZXN0KHQpO3JldHVybiByfHxhZS50ZXN0KHQpP2NlKHQuc2xpY2UoMikscj8yOjgpOmllLnRlc3QodCk/b2U6K3R9dmFyIHNlPTEvMCxsZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHQ/KHQ9ZmUodCkpPT09c2V8fHQ9PT0tc2U/KHQ8MD8tMToxKSpsZTp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gaGUodCl7dmFyIGU9cGUodCkscj1lJTE7cmV0dXJuIGU9PWU/cj9lLXI6ZTowfXZhciB5ZT0iW29iamVjdCBCb29sZWFuXSI7ZnVuY3Rpb24gdmUodCl7cmV0dXJuITA9PT0oZT10KXx8ITE9PT1lfHxiKGUpJiZ2KGUpPT15ZTt2YXIgZX1mdW5jdGlvbiBiZSh0KXtyZXR1cm4hIShmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkmJnQubGVuZ3RoPjApfWZ1bmN0aW9uIGRlKHQpe2xldCBlPSExO2lmKGJlKHQpKXtpZigiIj09PXQudHJpbSgpKXJldHVybiExO2U9IWlzTmFOKE51bWJlcih0KSl9ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2lmKGZ1bmN0aW9uKHQpe2lmKHQhPXQpcmV0dXJuITA7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl0cnl7bGV0IGU9TnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodCk7cmV0dXJuIE51bWJlci5pc05hTihlKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMX0odCkpcmV0dXJuITE7ZT0hMH1yZXR1cm4gZX1mdW5jdGlvbiBnZSh0KXtpZighZGUodCkpcmV0dXJuIDA7cmV0dXJuIHBlKHQpfWZ1bmN0aW9uIF9lKHQsZT17fSl7bGV0IHI9aHQoZSwidXNlTGltaXRTYWZlIixudWxsKTtyZXR1cm4gdmUocil8fChyPSExKSwhIWRlKHQpJiYodD1nZSh0KSxyP051bWJlci5pc1NhZmVJbnRlZ2VyKHQpOiJudW1iZXIiPT10eXBlb2Yobj10KSYmbj09aGUobikpO3ZhciBufXZhciBqZT1pLmlzRmluaXRlLFNlPU1hdGgubWluO3ZhciB3ZT1mdW5jdGlvbih0KXt2YXIgZT1NYXRoW3RdO3JldHVybiBmdW5jdGlvbih0LHIpe2lmKHQ9ZmUodCksKHI9bnVsbD09cj8wOlNlKGhlKHIpLDI5MikpJiZqZSh0KSl7dmFyIG49KGZ0KHQpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKChuPShmdChlKG5bMF0rImUiKygrblsxXStyKSkpKyJlIikuc3BsaXQoImUiKSlbMF0rImUiKygrblsxXS1yKSl9cmV0dXJuIGUodCl9fSgicm91bmQiKSxtZT13ZTtmdW5jdGlvbiBPZSh0LGU9e30pe2xldCByPWh0KGUsInVzZUNsYW1wU2FmZSIsbnVsbCk7dmUocil8fChyPSExKTtsZXQgbj1odChlLCJ1c2VMaW1pdFNhZmUiLG51bGwpO3ZlKG4pfHwobj0hMSk7bGV0IG89aHQoZSwicmV0dXJuV2l0aFN0YXRlQW5kTXNnIixudWxsKTt2ZShvKXx8KG89ITEpO2xldCBpPXQ9Pm8/e3N0YXRlOiJzdWNjZXNzIixtc2c6dH06dCx1PXQ9PntpZihvKXJldHVybntzdGF0ZToiZXJyb3IiLG1zZzp0fTt0aHJvdyBuZXcgRXJyb3IodCl9O2lmKCFkZSh0KSlyZXR1cm4gaSgwKTtsZXQgYT1udWxsO3RyeXt0PWdlKHQpLGE9bWUodCksciYmKGE+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/YT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjphPE51bWJlci5NSU5fU0FGRV9JTlRFR0VSJiYoYT1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpfWNhdGNoKHQpe3JldHVybiB1KHQudG9TdHJpbmcoKSl9cmV0dXJuIG4mJiFOdW1iZXIuaXNTYWZlSW50ZWdlcihOdW1iZXIoYSkpP3UoYHZbJHt0fV0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk6KCIwIj09PVN0cmluZyhhKSYmKGE9MCksaShhKSl9ZnVuY3Rpb24gQWUodCxlPXt9KXtpZighX2UodCxlKSlyZXR1cm4hMTtyZXR1cm4gT2UodCk+PTB9Y29uc3QgTmU9bmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNDgsOCw5NiwzLDEyNywxMjcsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjcsMCw5NiwyLDEyNywxMjcsMCw5NiwxLDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI2LDEsMTI2LDk2LDMsMTI2LDEyNywxMjcsMSwxMjYsOTYsMiwxMjcsMTI2LDAsOTYsMSwxMjcsMSwxMjYsMywxMSwxMCwwLDAsMiwxLDMsNCw1LDYsMSw3LDUsMywxLDAsMSw3LDg1LDksMywxMDksMTAxLDEwOSwyLDAsNSwxMjAsMTIwLDEwNCw1MSw1MCwwLDAsNiwxMDUsMTEwLDEwNSwxMTYsNTEsNTAsMCwyLDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1MSw1MCwwLDMsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1MSw1MCwwLDQsNSwxMjAsMTIwLDEwNCw1NCw1MiwwLDUsNiwxMDUsMTEwLDEwNSwxMTYsNTQsNTIsMCw3LDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1NCw1MiwwLDgsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1NCw1MiwwLDksMTAsMjUxLDIyLDEwLDI0MiwxLDEsNCwxMjcsMzIsMCwzMiwxLDEwNiwzMywzLDMyLDEsNjUsMTYsNzksNCwxMjcsMzIsMyw2NSwxNiwxMDcsMzMsNiwzMiwyLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiwzMywzLDMyLDIsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDMzLDQsMzIsMiw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDQsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDQsMzIsMiwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiw1LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDYsMzIsMCw2NSw0LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NSwxMiwxMTksMzIsNSw2NSwxOCwxMTksMTA2LDMyLDQsNjUsNywxMTksMTA2LDMyLDMsNjUsMSwxMTksMTA2LDUsMzIsMiw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMSwxMDYsMzIsMCwzMiwxLDY1LDE1LDExMywxNiwxLDExLDE0NiwxLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMSw2NSw0LDEwNiwzMiwyLDc1LDY5LDQsNjQsMzIsMCwzMiwxLDQwLDIsMCw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwxMDYsNjUsMTcsMTE5LDY1LDE3NSwyMTQsMjExLDE5MCwyLDEwOCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMiwxLDExLDExLDMsNjQsMzIsMSwzMiwyLDc5LDY5LDQsNjQsMzIsMCwzMiwxLDQ1LDAsMCw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDgsMTA2LDY1LDExLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NSwxNSwxMTgsMTE1LDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDM0LDAsNjUsMTMsMTE4LDMyLDAsMTE1LDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDM0LDAsNjUsMTYsMTE4LDMyLDAsMTE1LDExLDYzLDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMSw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDEsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDU0LDIsMCwxMSwxOTUsNCwxLDYsMTI3LDMyLDEsMzIsMiwxMDYsMzMsNiwzMiwwLDY1LDI0LDEwNiwzMyw0LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MCwyLDAsMzIsMiwxMDYsNTQsMiwwLDMyLDAsNjUsNCwxMDYsMzQsNSwzMiw1LDQwLDIsMCwzMiwyLDY1LDE2LDc5LDMyLDAsNDAsMiwwLDY1LDE2LDc5LDExNCwxMTQsNTQsMiwwLDMyLDIsMzIsMywxMDYsNjUsMTYsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMTYsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsNCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw4LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDEyLDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSw0MCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsMzIsNiw2NSwxNiwxMDcsNzcsNCw2NCwzMiw2LDY1LDE2LDEwNywzMyw4LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDMzLDIsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDMzLDMsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDUsMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDMzLDcsMyw2NCwzMiwyLDMyLDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiwzLDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDUsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNywzMiw4LDMyLDEsNjUsNCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsMiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsNSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsNyw1NCwyLDAsMTEsMzIsMSwzMiw2LDczLDQsNjQsMzIsNCwzMiwxLDMyLDYsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDk3LDEsMSwxMjcsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDEsMzIsMCw2NSw0LDEwNiw0MCwyLDAsNCwxMjcsMzIsMSw2NSwxMiwxMTksMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDY1LDE4LDExOSwxMDYsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDY1LDcsMTE5LDEwNiwzMiwwLDY1LDgsMTA2LDQwLDIsMCw2NSwxLDExOSwxMDYsNSwzMiwxLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwwLDQwLDIsMCwxMDYsMzIsMCw2NSwyNCwxMDYsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDE2LDEsMTEsMjU1LDMsMiwzLDEyNiwxLDEyNywzMiwwLDMyLDEsMTA2LDMzLDYsMzIsMSw2NSwzMiw3OSw0LDEyNiwzMiw2LDY1LDMyLDEwNywzMyw2LDMyLDIsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsMzMsMywzMiwyLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDMzLDQsMzIsMiw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCwzMyw1LDMsNjQsMzIsMywzMiwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMywzMiw0LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDQsMzIsMiwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywyLDMyLDUsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNSwzMiw2LDMyLDAsNjUsOCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjYsMTIsMTM3LDMyLDUsNjYsMTgsMTM3LDEyNCwzMiw0LDY2LDcsMTM3LDEyNCwzMiwzLDY2LDEsMTM3LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMiw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMiw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwxLDE3MywxMjQsMzIsMCwzMiwxLDY1LDMxLDExMywxNiw2LDExLDEzNCwyLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMiwzMiwxLDY1LDgsMTA2LDc5LDQsNjQsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzIsMCwxMzMsNjYsMjcsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzMsMCwzMiwxLDY1LDgsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwxLDY1LDQsMTA2LDMyLDIsNzcsNCw2NCwzMiwwLDMyLDEsNTMsMiwwLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDIzLDEzNyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMSwzLDY0LDMyLDEsMzIsMiw3Myw0LDY0LDMyLDAsMzIsMSw0OSwwLDAsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjYsMTMzLDY2LDExLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY2LDMzLDEzNiwxMzMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMzQsMCwzMiwwLDY2LDI5LDEzNiwxMzMsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjYsMzQsMCwzMiwwLDY2LDMyLDEzNiwxMzMsMTEsNzcsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDEsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDEsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsNTUsMywwLDExLDI0NCw0LDIsMywxMjcsNCwxMjYsMzIsMSwzMiwyLDEwNiwzMyw1LDMyLDAsNjUsNDAsMTA2LDMzLDQsMzIsMCw2NSwyMDAsMCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQxLDMsMCwzMiwyLDE3MywxMjQsNTUsMywwLDMyLDIsMzIsMywxMDYsNjUsMzIsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMzIsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSw4LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMTYsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwyNCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyMDAsMCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsNjUsMzIsMTA2LDMyLDUsNzcsNCw2NCwzMiw1LDY1LDMyLDEwNywzMywyLDMyLDAsNjUsOCwxMDYsNDEsMywwLDMzLDYsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDMzLDcsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDgsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDMzLDksMyw2NCwzMiw2LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw2LDMyLDcsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNywzMiw4LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDgsMzIsOSwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw5LDMyLDIsMzIsMSw2NSw4LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiw2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiw3LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiw4LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiw5LDU1LDMsMCwxMSwzMiwxLDMyLDUsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNSwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsMTg4LDIsMSw1LDEyNiwzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsMSwzMiwwLDQxLDMsMCwzNCwyLDY2LDMyLDkwLDQsMTI2LDMyLDAsNjUsOCwxMDYsNDEsMywwLDM0LDMsNjYsMSwxMzcsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDM0LDQsNjYsNywxMzcsMTI0LDMyLDEsNjYsMTIsMTM3LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzNCw1LDY2LDE4LDEzNywxMjQsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwxLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwxLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDIsMTI0LDMyLDAsNjUsNDAsMTA2LDMyLDIsNjYsMzEsMTMxLDE2NywxNiw2LDExXSk7YXN5bmMgZnVuY3Rpb24gRWUodCxlPXt9KXtpZighZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpO2lmKCJbb2JqZWN0IEJsb2JdIj09PWV8fCJbb2JqZWN0IEZpbGVdIj09PWUpcmV0dXJuITA7dHJ5e2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmdCBpbnN0YW5jZW9mIEJsb2IpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiExfSh0KSYmKHI9dCwiW29iamVjdCBGaWxlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikpKXJldHVybiBjb25zb2xlLmxvZygiaW5wIix0KSxQcm9taXNlLnJlamVjdCgiaW5wIGlzIG5vdCBhIEJsb2Igb3IgRmlsZSIpO3ZhciByO2xldCBuPWh0KGUsImNodW5rU2l6ZSIpO2RlKG4pfHwobj02NzEwODg2NCksbj1nZShuKTtsZXR7Y3JlYXRlNjQ6b309YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7ZXhwb3J0czp7bWVtOmUseHhoMzI6cix4eGg2NDpuLGluaXQzMjpvLHVwZGF0ZTMyOmksZGlnZXN0MzI6dSxpbml0NjQ6YSx1cGRhdGU2NDpjLGRpZ2VzdDY0OmZ9fT10O2xldCBzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKTtmdW5jdGlvbiBsKHQscil7aWYoZS5idWZmZXIuYnl0ZUxlbmd0aDx0K3Ipe2NvbnN0IG49TWF0aC5jZWlsKCh0K3ItZS5idWZmZXIuYnl0ZUxlbmd0aCkvNjU1MzYpO2UuZ3JvdyhuKSxzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKX19ZnVuY3Rpb24gcCh0LGUscixuLG8saSl7bCh0KTtjb25zdCB1PW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBzLnNldCh1KSxyKDAsZSksdS5zZXQocy5zdWJhcnJheSgwLHQpKSx7dXBkYXRlKGUpe2xldCByO3JldHVybiBzLnNldCh1KSwic3RyaW5nIj09dHlwZW9mIGU/KGwoMyplLmxlbmd0aCx0KSxyPWIuZW5jb2RlSW50byhlLHMuc3ViYXJyYXkodCkpLndyaXR0ZW4pOihsKGUuYnl0ZUxlbmd0aCx0KSxzLnNldChlLHQpLHI9ZS5ieXRlTGVuZ3RoKSxuKDAsdCxyKSx1LnNldChzLnN1YmFycmF5KDAsdCkpLHRoaXN9LGRpZ2VzdDooKT0+KHMuc2V0KHUpLGkobygwKSkpfX1mdW5jdGlvbiBoKHQpe3JldHVybiB0Pj4+MH1jb25zdCB5PTJuKio2NG4tMW47ZnVuY3Rpb24gdih0KXtyZXR1cm4gdCZ5fWNvbnN0IGI9bmV3IFRleHRFbmNvZGVyLGQ9MCxnPTBuO2Z1bmN0aW9uIF8odCxlPWQpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksaChyKDAsYi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9ZnVuY3Rpb24gaih0LGU9Zyl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSx2KG4oMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1yZXR1cm57aDMyOl8saDMyVG9TdHJpbmc6KHQsZT1kKT0+Xyh0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIiksaDMyUmF3Oih0LGU9ZCk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSxoKHIoMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGUzMjoodD1kKT0+cCg0OCx0LG8saSx1LGgpLGg2NDpqLGg2NFRvU3RyaW5nOih0LGU9Zyk9PmoodCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKSxoNjRSYXc6KHQsZT1nKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHYobigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTY0Oih0PWcpPT5wKDg4LHQsYSxjLGYsdil9fSgoYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoTmUpKS5pbnN0YW5jZSl9KCksaT1vKCksdT0wO2Zvcig7dTx0LnNpemU7KXtsZXQgZT10LnNsaWNlKHUsdStuKSxyPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtpLnVwZGF0ZShuZXcgVWludDhBcnJheShyKSksdSs9bn1yZXR1cm4gaS5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKX1tb2R1bGUuZXhwb3J0cz1hc3luYyhyLG4sbyk9PntpZighKGJlKGk9bikmJmkubGVuZ3RoPD0xMjgmJi9eW0EtWmEtejAtOV0rJC8udGVzdChpKSkpe3JldHVybntlcnJvcjoiaW52YWxpZCBmaWxlSGFzaCJ9fXZhciBpO2lmKCFBcnJheS5pc0FycmF5KHIpKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZVNsaWNlSGFzaHMifX1pZigwPT09dGUocikpe3JldHVybntlcnJvcjoibm8gZmlsZVNsaWNlSGFzaHMifX1sZXQgdT1gJHtufV9gLGE9ZS5yZWFkZGlyU3luYyhvKSxjPW5ldyBTZXQ7Zm9yKGxldCB0IG9mIGEpe2lmKCF0LnN0YXJ0c1dpdGgodSkpY29udGludWU7bGV0IGU9dC5zbGljZSh1Lmxlbmd0aCk7QWUoZSkmJlN0cmluZyhPZShlKSk9PT1lJiZjLmFkZChPZShlKSl9bGV0IGY9W10scz1uZXcgU2V0O2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgdT1yW2ldLGE9aHQodSwiaSIpO2lmKCFBZShhKSljb250aW51ZTtpZihhPU9lKGEpLCFjLmhhcyhhKXx8cy5oYXMoYSkpY29udGludWU7cy5hZGQoYSk7bGV0IGw9dC5yZXNvbHZlKG8sYCR7bn1fJHthfWApLHA9IiI7dHJ5e3A9YXdhaXQgRWUobmV3IEJsb2IoW2UucmVhZEZpbGVTeW5jKGwpXSkpfWNhdGNoKHQpe2NvbnRpbnVlfWh0KHUsImgiKT09PXAmJmYucHVzaChhKX1yZXR1cm57c2xrczpmfX07CgogICAgfSkuY2FsbChtZFVzZXIuZXhwb3J0cywgbWRVc2VyLCBtZFVzZXIuZXhwb3J0cykKCiAgICAvL+mgkOioreWMr+WHujogcm9sbHVw5LulX19lc01vZHVsZeaomeekuumgkOioreiIh+WFt+WQjeS4puWtmOiAhSwg5Y+W5YW2ZGVmYXVsdDsg5ZCm5YmHbW9kdWxlLmV4cG9ydHPljbPpoJDoqK3ljK/lh7oo5Y+q5pyJ5YW35ZCN5Yyv5Ye66ICF54K65ZG95ZCN56m66ZaT54mp5Lu2KQogICAgcmV0dXJuIChtZFVzZXIuZXhwb3J0cyAmJiBtZFVzZXIuZXhwb3J0cy5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtZFVzZXIuZXhwb3J0cykgPyBtZFVzZXIuZXhwb3J0cy5kZWZhdWx0IDogbWRVc2VyLmV4cG9ydHMKCn0pKCkpCgo=",Buffer.from(s,"base64").toString("utf8"));var s;function i(){let n=new r,s=n.emit.bind(n),i={},o=!1,u="worker is dead",l=!1;function a(e){for(let t in i){let r=i[t];delete i[t],r.reject(e)}}function c(e){a(e),s("error",e)}function d(e){o||(o=!0,c(e))}let w=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){u=e,d(e)}}(t);function D(){w?(l=!0,o||(o=!0,u="worker has been terminated"),w.terminate(),w=void 0,a("worker has been terminated")):c("worker has been terminated")}function y(e){return function(){let t=function(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}();if(o)return t.reject(u),t;let r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=r.length;for(let s=0;s<e;s++)t[s]=r[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:r,fun:e,input:[...arguments]};try{w.postMessage(n)}catch(e){return t.reject(e),t}return i[r]=t,t}}w||o||(u="invalid worker",d(u)),w&&(w.on("message",function(e){let t=e,r=t&&t.mode;if("emit"===r||"return"===r||"messageerror"===r){if("emit"===r&&s(t.evName,t.msg),"return"===r){let e=i[t.id];e&&(delete i[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===r&&c(t.msg)}}),w.on("error",d),w.on("exit",e=>{l||d("worker exit, code["+e+"]")}),w.on("messageerror",e=>{c(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{w.postMessage(e)}catch(e){throw D(),e}}([...arguments]));for(let e of["main"])n[e]=y(e);return n.terminate=D,n}n=async function(){let e=[...arguments],t=i();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return r},set exports(e){r=e}}),r)}(qs);var ei=nn(qs.exports);function ti(e,t){try{return{ok:!0,value:t()}}catch(t){let r=Cn(t);return{ok:!1,stage:e,cause:er(r)?r:"unknown error"}}}function ri(e,t){try{return i.validateHeaderValue(e,t),!0}catch(e){return!1}}function ni(e,t,r,n={}){let i=!0===Me(n,"forHead",!1);if(null==e)return{error:"invalid streamRead",reason:"streamRead is null or undefined"};let o=ti("identify streamRead",()=>e instanceof s.Readable?{isReadable:!0,objectMode:!0===e.readableObjectMode,done:!0===e.destroyed||!0===e.readableEnded}:{isReadable:!1});if(!o.ok)return{error:"invalid streamRead",reason:`${o.stage} failed: ${o.cause}`};if(o.value.isReadable){if(o.value.objectMode)return{error:"invalid streamRead",reason:"streamRead is in object mode"};if(o.value.done)return{error:"invalid streamRead",reason:"streamRead is already destroyed or ended (each download event must provide a new stream)"};if(i)return{source:e};let n=ti("setup pipeline",()=>{let n=0,i=!1,o=new s.Transform({transform(e,r,s){if(n+=e.length,n>t)return i=!0,void s(new Error(`streamRead sent more than fileSize[${t}] bytes`));s(null,e)},flush(e){if(n!==t)return i=!0,void e(new Error(`streamRead ended at ${n} bytes but fileSize is ${t}`));e()}});return s.pipeline(e,o,e=>{e&&i&&r(Cn(e))}),o});return n.ok?{source:n.value}:{error:"invalid streamRead",reason:`${n.stage} failed: ${n.cause}`}}let u=ti("materialize streamRead",()=>{if(Buffer.isBuffer(e))return{buf:e};if(e instanceof Uint8Array)return{buf:Buffer.from(e)};if(qt(e))return{buf:Buffer.from(e,"utf8")};if("number"==typeof e||wr(e)||"object"==typeof e&&!1===function(e){try{return Gr(e.pipe)}catch(e){return null}}(e)){let t=null;try{t=JSON.stringify(e)}catch(e){return{unserializable:Cn(e)}}return"string"!=typeof t?{unserializable:""}:{buf:Buffer.from(t,"utf8")}}return{unsupported:!0}});if(!u.ok)return{error:"invalid streamRead",reason:`${u.stage} failed: ${u.cause}`};if(dn(u.value,"unserializable")){let e=u.value.unserializable;return{error:"invalid streamRead",reason:er(e)?`streamRead can not be serialized: ${e}`:"streamRead can not be serialized"}}if(!0===u.value.unsupported)return{error:"invalid streamRead",reason:"streamRead must be a readable stream, buffer, string, number, boolean or plain object"};let l=u.value.buf;return l.length!==t?{error:"fileSize mismatch",reason:`streamRead has ${l.length} bytes but fileSize is ${t}`}:{source:l}}let si=e=>"function"==typeof e.toWellFormed?e.toWellFormed():e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"�");function ii(e,t){let r=ti(`check field[${e}]`,()=>{if("fileSize"===e)return function(e){return kr(e,{useLimitSafe:!0})}(t)?{ok:!0,value:Cr(t)}:{ok:!1};if("filename"===e||"fileType"===e){if(!er(t))return{ok:!1};let r=hn(t);return er(r)?"fileType"===e?ri("Content-Type",r)?{ok:!0,value:r}:{ok:!1}:{ok:!0,value:si(r)}:{ok:!1}}throw new Error(`unknown field[${e}]`)});return r.ok?{ok:r.value.ok,value:r.value.value,cause:""}:{ok:!1,value:void 0,cause:r.cause}}function oi(e){try{e&&Gr(e.pipe)&&Gr(e.destroy)&&e.destroy()}catch(e){}}function ui(e){let t=typeof e;return void 0===e||"function"===t||"symbol"===t?null:e}function li(e,t,r={}){let n=new s.Readable;n._read=()=>{},n.push(t),n.push(null);let i=Me(r,"returnType",""),o=Me(r,"returnMsg",""),u=e.response(n).header("Cache-Control","no-cache, no-store, must-revalidate").header("Content-Type","application/octet-stream").header("Content-Length",n.readableLength);return er(i)&&u.header("Return-Type",i),er(o)&&ri("Return-Msg",o)&&u.header("Return-Msg",o),u}function ai(e,t){return 0===e.listenerCount(t)?`no listener for event[${t}]`:""}function ci(i={}){let o={useLimitSafe:!0},u=!!Me(i,"serverHapi"),l=[],a=Me(i,"port");(!hr(a,o)||Cr(a)>65535)&&(a=8080),a=Cr(a);let c=Me(i,"useInert");null==c?c=!0:wr(c)||(u||l.push("invalid useInert: must be a boolean, static files are not served"),c=!1);let d=Me(i,"pathStaticFiles");null==d?d="dist":er(d)||(c&&!u&&l.push("invalid pathStaticFiles: must be a non-empty string, static files are not served"),c=!1,d="dist");let w=Me(i,"pathUploadTemp");er(w)||(w="./uploadTemp");let D="";if(!Qr(w)){let e=On(w);dn(e,"error")&&(D=Cn(e.error))}let y=Me(i,"apiName");er(y)||(y="api");let M=Me(i,"tokenType");er(M)||(M="Bearer");let g=Me(i,"sizeSlice");hr(g,o)||(g=1048576),g=Cr(g);let m=Me(i,"sizeMsg");hr(m,o)||(m=104857600),m=Cr(m);let I=Me(i,"verifyConn");if(null==I)I=()=>!0;else{let e=!1;try{e=Gr(I)}catch(e){}e||(l.push("invalid verifyConn: must be a function (sync or async), all API requests will be denied"),I=()=>!1)}let f="invalid corsOrigins: must be an array of origin strings ('*' must be the only element if present), or false to disable; CORS is disabled",p=Me(i,"corsOrigins"),C=null!=p;C?u?l.push("corsOrigins has no effect with serverHapi: the cross-origin policy is decided by the external server"):!1===p||""===p?p=null:er(p)?p=[p]:Lr(p)?(p=p.filter(e=>""!==e),0===p.length&&(p=null)):(l.push(f),p=null):p=["*"];let h=Me(i,"delayForSlice","");(!kr(h,o)||Cr(h)>2147483647)&&(h=100),h=Cr(h);let L=null;if(u)L=i.serverHapi;else{let e=e=>{let t=!1;return null!==e&&(t={origin:e,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]}),{port:a,routes:{timeout:{server:!1,socket:!1},cors:t}}};try{L=r.server(e(p))}catch(t){if(!C||null===p)throw t;console.log("invalid corsOrigins",t),l.push(f),p=null,L=r.server(e(p))}}let b=ln(),N={tag:"w-converhp"},A=(e,...t)=>an(b,e,t,{...N,funSettle:()=>{let r=t[t.length-1];Wr(r)&&r.reject(`listener of event[${e}] error`)},funEmit:E}),x=(e,...t)=>Dn(b,e,t,{...N,funEmit:E});function E(e,...t){if("error"===e&&_t(t[0])&&"listener"===t[0].fun){let e=Me(t[0],"name",""),r=Me(t[0],"msg");return console.log(`listener of event[${e}] error`,r),b.emit("error",`listener of event[${e}] error: ${Cn(r)}`)}return b.emit(e,...t)}er(D)&&x("error",`create pathUploadTemp[${w}] error: ${D}`);for(let e of l)x("error",e);let T=(e,t,r)=>{let n=Hr(),s=Hr();return s.then(t=>{void 0===t&&(t=null);let s=typeof t;if("function"===s||"symbol"===s)return n.reject("output can not be serialized"),void A("error",`event[${e}] output can not be serialized: output is a ${s}`);n.resolve(Gr(r)?r(t):t)}).catch(e=>{n.reject(e)}),function(e,t,r,n,s,i){let o=ai(e,r);er(o)?(s.reject(o),i(o)):t(r,...n,s)}(b,A,e,t,s,e=>{A("error",e)}),n};async function S(e){return T("upload",[e])}async function Z(e){return T("download",[e])}let v=`${hn(M)} `,Y=(e,t)=>{let r=Me(e,"headers");r=_t(r)?r:"";let n=Me(e,"query");n=_t(n)?n:"";let s="",i="";return"query"===t.authFrom?(i=Me(n,"token",""),i=er(i)?i:"",er(i)&&(s=`${M} ${i}`)):(s=Me(r,"authorization",""),s=er(s)?s:"",i=s.startsWith(v)?s.slice(v.length):""),{headers:r,query:n,authorization:s,token:i}},X=(e,t)=>{let r=(r,n,s)=>function(e,t,r={}){er(t)||(console.log("msg",t),console.log("msg is not an effective string, set msg=''"),t="");let n=Me(r,"retryable",!0),s={error:t};!1===n&&(s.retryable=!1);let i=li(e,Vn(s),{returnType:"error",returnMsg:t});return!1===n&&i.header("Return-Retryable","false"),i}(e,n,s).code(t.statusOf[r]);return{permission:()=>r("permission","permission denied"),param:e=>r("param",e,{retryable:!1}),app:e=>r("app",e),output:e=>r("output",e),packet:e=>r("packet",e),internal:e=>r("internal",e)}},j=async(e,t,r,n)=>!0!==await async function(e){let t=!1;try{t=I(e),Wr(t)&&(t=await t)}catch(r){t=!1,console.log(`verifyConn error for apiType[${Me(e,"apiType","")}]`,r),A("error",`verifyConn error for apiType[${Me(e,"apiType","")}]: ${Cn(r)}`)}return!0===t}({apiType:r.apiType,authorization:t.authorization,query:t.query,headers:t.headers,req:e})?n.permission():(A("handler",{api:r.api,headers:t.headers,query:t.query}),null),z=(e,t)=>{let r=ai(b,e.event);if(!er(r))return null;let n=t.app(r);return A("error",r),n},G=(e,t,r,n)=>{let s=function(e,t){let r={};for(let n of t){let t=ti(`read field[${n}]`,()=>Me(e,n));if(!t.ok)return{ok:!1,field:n,cause:t.cause,fields:r};r[n]=t.value}return{ok:!0,fields:r}}(e,r.fields.map(e=>e.name));if(!s.ok)return oi(Me(s.fields,"streamRead")),A("error",`download fileId[${t}] output error: can not read field[${s.field}]: ${s.cause}`),{ok:!1,res:n.output("invalid streamRead")};let i={streamRead:s.fields.streamRead};for(let e of r.fields){if("streamRead"===e.name)continue;let r=ii(e.name,s.fields[e.name]);if(r.ok){i[e.name]=r.value;continue}if(!0===e.optional&&!er(r.cause)){i[e.name]="";continue}oi(i.streamRead);let o="fileSize"===e.name?`[${Cn(s.fields.fileSize)}]`:"";return A("error",`download fileId[${t}] output error: invalid ${e.name}${o}${er(r.cause)?`: ${r.cause}`:""}`),{ok:!1,res:n.output(`invalid ${e.name}`)}}return{ok:!0,v:i}},W=async(e,t,r,n)=>{let s={},i="";await r.then(e=>{s.success=e,i="success"}).catch(e=>{s.error=e,i="error"});let o=function(e,t){let r={};for(let t of Object.keys(e))r[t]=ui(e[t]);let n=Vn(r,{returnWithStateAndMsg:!0});return"success"!==Me(n,"state")?(t(Me(n,"msg","unknown error")),null):n.msg}(s,e=>{A("error",`${n} output can not be serialized: ${e}`)});return null===o?t.internal("output can not be serialized"):li(e,o,{returnType:i,returnMsg:"need to parse"})},K=e=>(t,r,n)=>{if(413===Me(n,"output.statusCode"))throw n;return A("error",`invalid request packet for ${e.api}: ${Cn(n)}`),X(r,e).packet("invalid request packet").takeover()},k={path:`/${y}/main`,method:"POST",options:{payload:{maxBytes:m,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(e,t){let r=_n.main,n=X(t,r),i=Y(e,r),o=await j(e,i,r,n);if(o)return o;let u=null;try{u=await(()=>{let t=Hr(),r=[],n=0,i=!1,o=new s.Writable({write(e,t,s){if(n+=e.length,n>m)return r=[],i=!0,void s();r.push(e),s()}});return o.on("finish",()=>{}),e.payload.pipe(o),e.payload.on("end",()=>{if(i)return void t.reject("payload too large");let e=Buffer.concat(r);r=[],t.resolve(e)}),e.payload.on("close",()=>{}),e.payload.on("error",e=>{console.log("apiMain req.payload err",e),A("error",`receive payload error: ${Cn(e)}`),t.reject(`receive payload error: ${Cn(e)}`)}),e.payload.destroyed&&(A("error","receive payload error: closed before receive"),t.reject("receive payload error: closed before receive")),t})()}catch(e){if("payload too large"===e)return t.response({statusCode:413,error:"Request Entity Too Large",message:`Payload content length greater than maximum allowed: ${m}`}).code(413);throw e}let l=Rn(new Uint8Array(u),{returnWithStateAndMsg:!0});if("success"!==Me(l,"state")||!_t(l.msg)){let e=Cn(Me(l,"msg",""));return A("error",`invalid request packet for apiMain: ${er(e)?e:"not an effective object"}`),n.packet("invalid request packet")}let a=l.msg;return W(t,n,async function(e){return T("execute",[Me(e,"func",""),Me(e,"input",null)],t=>(e.output=t,delete e.input,e))}(a),`execute func[${Cn(Me(a,"func",""))}]`)}},F={path:`/${y}/ulctr`,method:"POST",options:{payload:{maxBytes:m,maxParts:1e9,timeout:!1,parse:!0,failAction:K(_n.ulctr)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let r=_n.ulctr,n=X(t,r),s=Y(e,r),i=await j(e,s,r,n);if(i)return i;let o=Me(e,"payload.mode","");if("check-total-hash"!==o&&"check-slices-hash"!==o&&"merge-slices-push"!==o&&"merge-slices-get"!==o)return n.param(`invalid mode[${Cn(o)}] in payload`);let u=Me(e,"payload.fileHash","");if(!Jn(u))return n.param("invalid fileHash in payload");let l=Me(e,"payload.chunkTotal","");if("merge-slices-push"===o){if(!hr(l))return n.param("invalid chunkTotal in payload");l=Cr(l)}if("merge-slices-get"!==o){let e=z(r,n);if(e)return e}let a=Me(e,"payload.filename",""),c=function(e,t="unknown"){if(!er(e))return t;let r=e.replace(/\\/g,"/").split("/").filter(e=>""!==e&&"."!==e&&".."!==e).pop()||"";return r=r.replace(/[\x00-\x1f\x7f<>:"|?*]/g,"_"),r=r.replace(/[. ]+$/g,""),/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i.test(r)&&(r=`_${r}`),""===r?t:r}(a,""),d=e=>_t(e)&&dn(e,"error")?`${o}: ${hn(e.error)}`:"",D=async(e,t)=>{try{return await t()}catch(t){return A("error",`upload-controller mode[${o}] ${e} error: ${Cn(t)}`),Promise.reject(`${o} failed`)}};return W(t,n,(async()=>{let t=null;if("check-total-hash"===o){let r=Me(e,"payload.fileSize","");t=await D("check total hash",()=>_s(r,g,u,w));let n=d(t);if(er(n))return Promise.reject(n);if(t.bAllHash){let e={from:"check-total-hash",filename:a,filenameSafe:c,path:t.path},r=await S(e);t={...t,msg:r}}delete t.path,t.sizeSlice=g}else if("check-slices-hash"===o){let r=Me(e,"payload.fileSliceHashs",[]);t=await D("check slices hash",()=>ei(r,u,w));let n=d(t);if(er(n))return Promise.reject(n)}else if("merge-slices-push"===o){t={queueId:await D("push merge task",()=>Ps(u,l,w))}}else if("merge-slices-get"===o){let r=Me(e,"payload.queueId",""),n=await Js(r,w,{funConsume:async e=>await S({from:"merge-slices-get",filename:a,filenameSafe:c,path:e}),funLog:e=>{A("error",e)}});t={state:n.state,msg:n.msg,queueId:r,filename:a},"error"===n.state&&er(n.reason)&&A("error",`${n.msg} for fileHash[${u}]: ${n.reason}`)}return t})(),`upload-controller mode[${o}]`)}},V={path:`/${y}/slc`,method:"POST",options:{payload:{maxBytes:g,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(r,n){let s=_n.slc,i=X(n,s),o=Y(r,s),u=await j(r,o,s,i);if(u)return u;let l=Me(o.headers,"chunk-index",""),a=Me(o.headers,"chunk-total",""),c=Me(o.headers,"package-id","");if(!kr(l))return i.param("invalid chunkIndex in headers");if(l=Cr(l),!kr(a))return i.param("invalid chunkTotal in headers");if(a=Cr(a),!Jn(c))return i.param("invalid packageId in headers");let d=z(s,i);if(d)return d;let D=e.resolve(w,`${c}_${l}`),y=t.createWriteStream(D),M=()=>{let e=Hr(),t=0,n=!1,s=!1,i=!1,o=!1;y.on("error",t=>{s||n||i||(s=!0,r.payload.unpipe(y),r.payload.resume(),console.log(`apiUploadSlice streamWrite chunk[${l+1}/${a}] of packageId[${c}] err`,t),A("error",`write chunk[${l+1}/${a}] of packageId[${c}] error: ${Cn(t)}`),e.reject(`write chunk[${l+1}/${a}] of packageId[${c}] error`))}),y.on("close",()=>{n||s||i?Pn(D):o&&!0===y.writableFinished&&setTimeout(()=>{e.resolve(`chunk[${l+1}/${a}] of packageId[${c}] done`)},h)}),r.payload.on("data",e=>{n||(t+=e.length,t>g&&(n=!0,r.payload.unpipe(y),r.payload.resume(),y.destroy()))}),r.payload.pipe(y),r.payload.on("end",()=>{o=!0,s||n&&e.reject("payload too large")});let u=t=>{i||o||s||(i=!0,y.destroy(),A("error",`receive chunk[${l+1}/${a}] of packageId[${c}] error: ${t}`),e.reject(`receive chunk[${l+1}/${a}] of packageId[${c}] error: ${t}`))};return r.payload.on("error",e=>{console.log(`apiUploadSlice req.payload chunk[${l+1}/${a}] of packageId[${c}] err`,e),u(Cn(e))}),r.payload.on("close",()=>{u("closed before end")}),r.payload.destroyed&&u("closed before receive"),e},m={},I="",f="";try{let e=await M();m.success=e,I="success",f="need to parse"}catch(e){if("payload too large"===e)return n.response({statusCode:413,error:"Request Entity Too Large",message:`Payload content length greater than maximum allowed: ${g}`}).code(413);m.error=e,I="error",f="need to parse"}return li(n,Vn(m),{returnType:I,returnMsg:f})}},H={path:`/${y}/dwgfn`,method:"POST",options:{payload:{maxBytes:m,maxParts:1e9,timeout:!1,parse:!0,failAction:K(_n.dwgfn)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let r=_n.dwgfn,n=X(t,r),s=Y(e,r),i=await j(e,s,r,n);if(i)return i;let o=Me(e,"payload.fileId","");if(!er(o))return n.param("invalid fileId in payload");let u={fileId:o,token:s.token},l={};if(await Z(u).then(e=>{l.success=e}).catch(e=>{l.error=e}),dn(l,"error"))return n.app("can not get file from fileId");let a=G(Me(l,"success"),o,r,n);return a.ok?(oi(a.v.streamRead),W(t,n,Promise.resolve({filename:a.v.filename}),`download fileId[${o}]`)):a.res}},U={path:`/${y}/dwgf`,method:"GET",options:{timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let r=_n.dwgf,n=X(t,r),s=Y(e,r),i=await j(e,s,r,n);if(i)return i;let o=Me(s.query,"fileId","");if(o=er(o)?o:"",!er(o))return n.param("invalid fileId in query");let u={fileId:o,token:s.token},l={};if(await Z(u).then(e=>{l.success=e}).catch(e=>{l.error=e}),dn(l,"error"))return n.app("can not get file from fileId");let a=G(Me(l,"success"),o,r,n);if(!a.ok)return a.res;let c=a.v.streamRead,d=a.v.fileSize,w=a.v.fileType,D=a.v.filename,y=ni(c,d,e=>{A("error",`download fileId[${o}] stream error: ${e}`)},{forHead:"head"===hn(Me(e,"method","")).toLowerCase()});if(y.error)return oi(c),A("error",`download fileId[${o}] output error: ${y.reason}`),n.output(y.error);let M=t.response(y.source).type(w).header("Content-Encoding","identity").header("Content-Length",d).header("Content-Disposition",er(D)?`attachment; filename*=UTF-8''${function(e){let t=Array.from(hn(e)),r="";for(let e of t){let t="";try{t=encodeURIComponent(e)}catch(e){t="%EF%BF%BD"}r+=t}return r.replace(/['()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}(D)}`:"attachment");return M}},B={path:`/${y}/dw`,method:"POST",options:{payload:{maxBytes:m,maxParts:1e9,timeout:!1,parse:!0,failAction:K(_n.dw)},timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let r=_n.dw,n=X(t,r),s=Y(e,r),i=await j(e,s,r,n);if(i)return i;let o=Me(e,"payload.fileId","");if(!er(o))return n.param("invalid fileId in payload");let u={fileId:o,token:s.token},l={};if(await Z(u).then(e=>{l.success=e}).catch(e=>{l.error=e}),dn(l,"error"))return n.app("can not get file from fileId");let a=G(Me(l,"success"),o,r,n);if(!a.ok)return a.res;let c=a.v.streamRead,d=function(e,t={}){let r=Me(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:"";if(!er(e))return n("invalid str");let s="";try{let t=En.parse(e);s=Sn.stringify(t)}catch(e){return n(e.toString())}return r?{state:"success",msg:s}:s}(a.v.filename),w=a.v.fileSize,D=a.v.fileType,y=ni(c,w,e=>{A("error",`download fileId[${o}] stream error: ${e}`)},{forHead:"head"===hn(Me(e,"method","")).toLowerCase()});return y.error?(oi(c),A("error",`download fileId[${o}] output error: ${y.reason}`),n.output(y.error)):t.response(y.source).type(D).header("Content-Encoding","identity").header("Content-Disposition",`attachment; filename="${d}"`).header("Content-Length",w)}};let R=null;if(u)try{L.route([k,F,V,H,U,B])}catch(e){console.log("register routes error",e),x("error",`register routes error: ${Cn(e)}`)}else R=async function(){c&&await L.register(n);let e=[];if(c){let t={method:"GET",path:"/{file*}",handler:{directory:{path:`${d}/`}}};e=[...e,t]}e=[...e,k,F,V,H,U,B],L.route(e),await L.start(),console.log(`Server running at: ${L.info.uri}`)}().catch(e=>{console.log("start server error",e),x("error",`start server error: ${Cn(e)}`)});return b.stop=async()=>{try{Wr(R)&&await R,await L.stop()}catch(e){console.log("stop server error",e),A("error",`stop server error: ${Cn(e)}`)}},b}function di(){if(!Gr(ms))throw new Error("invalid dayjs");return ms().format("YYYY-MM-DDTHH:mm:ssZ")}var wi=function(){return g.Date.now()},Di=Math.max,yi=Math.min;function Mi(e,t,r){var n,s,i,o,u,l,a=0,c=!1,d=!1,w=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function D(t){var r=n,i=s;return n=s=void 0,a=t,o=e.apply(i,r)}function y(e){var r=e-l;return void 0===l||r>=t||r<0||d&&e-a>=i}function M(){var e=wi();if(y(e))return g(e);u=setTimeout(M,function(e){var r=t-(e-l);return d?yi(r,i-(e-a)):r}(e))}function g(e){return u=void 0,w&&n?D(e):(n=s=void 0,o)}function m(){var e=wi(),r=y(e);if(n=arguments,s=this,l=e,r){if(void 0===u)return function(e){return a=e,u=setTimeout(M,t),c?D(e):o}(l);if(d)return clearTimeout(u),u=setTimeout(M,t),D(l)}return void 0===u&&(u=setTimeout(M,t)),o}return t=lr(t)||0,S(r)&&(c=!!r.leading,i=(d="maxWait"in r)?Di(lr(r.maxWait)||0,t):i,w="trailing"in r?!!r.trailing:w),m.cancel=function(){void 0!==u&&clearTimeout(u),a=0,n=l=s=u=void 0},m.flush=function(){return void 0===u?o:g(wi())},m}var gi=function(){try{var e=U(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),mi=gi;function Ii(e,t,r){"__proto__"==t&&mi?mi(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}function fi(e,t,r){(void 0!==r&&!P(e[t],r)||void 0===r&&!(t in e))&&Ii(e,t,r)}var pi="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ci=pi&&"object"==typeof module&&module&&!module.nodeType&&module,hi=Ci&&Ci.exports===pi?g.Buffer:void 0,Li=hi?hi.allocUnsafe:void 0;function bi(e,t){if(t)return e.slice();var r=e.length,n=Li?Li(r):new e.constructor(r);return e.copy(n),n}function Ni(e){var t=new e.constructor(e.byteLength);return new Ce(t).set(new Ce(e)),t}function Ai(e,t){var r=t?Ni(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function xi(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}var Ei=Object.create,Ti=function(){function e(){}return function(t){if(!S(t))return{};if(Ei)return Ei(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();function Si(e){return"function"!=typeof e.constructor||nt(e)?{}:Ti(Tr(e))}function Zi(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var vi=Object.prototype.hasOwnProperty;function Yi(e,t,r){var n=e[t];vi.call(e,t)&&P(n,r)&&(void 0!==r||t in e)||Ii(e,t,r)}function Xi(e,t,r,n){var s=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var u=t[i],l=n?n(r[u],e[u],u,r,e):void 0;void 0===l&&(l=e[u]),s?Ii(r,u,l):Yi(r,u,l)}return r}var ji=Object.prototype.hasOwnProperty;function zi(e){if(!S(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=nt(e),r=[];for(var n in e)("constructor"!=n||!t&&ji.call(e,n))&&r.push(n);return r}function Gi(e){return lt(e)?tt(e,!0):zi(e)}function Wi(e,t,r,n,s,i,o){var u=Zi(e,r),l=Zi(t,r),a=o.get(l);if(a)fi(e,r,a);else{var c,d=i?i(u,l,r+"",e,t,o):void 0,w=void 0===d;if(w){var y=D(l),M=!y&&Ve(l),g=!y&&!M&&qe(l);d=l,y||M||g?D(u)?d=u:N(c=u)&<(c)?d=xi(u):M?(w=!1,d=bi(l,!0)):g?(w=!1,d=Ai(l,!0)):d=[]:jr(l)||We(l)?(d=u,We(u)?d=function(e){return Xi(e,Gi(e))}(u):S(u)&&!Z(u)||(d=Si(l))):w=!1}w&&(o.set(l,d),s(d,l,n,i,o),o.delete(l)),fi(e,r,d)}}function Ki(e,t,r,n,s){e!==t&&Ut(t,function(i,o){if(s||(s=new ge),S(i))Wi(e,t,o,r,Ki,n,s);else{var u=n?n(Zi(e,o),i,o+"",e,t,s):void 0;void 0===u&&(u=i),fi(e,o,u)}},Gi)}var ki=Math.max;var Fi=mi?function(e,t){return mi(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:Kt,Vi=Fi,Hi=Date.now;var Ui=function(e){var t=0,r=0;return function(){var n=Hi(),s=16-(n-r);if(r=n,s>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Vi),Bi=Ui;function Ri(e,t){return Bi(function(e,t,r){return t=ki(void 0===t?e.length-1:t,0),function(){for(var n=arguments,s=-1,i=ki(n.length-t,0),o=Array(i);++s<i;)o[s]=n[t+s];s=-1;for(var u=Array(t+1);++s<t;)u[s]=n[s];return u[t]=r(o),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,u)}}(e,t,Kt),e+"")}function Qi(e,t,r){if(!S(r))return!1;var n=typeof t;return!!("number"==n?lt(r)&&Ue(t,r.length):"string"==n&&t in r)&&P(r[t],e)}var Oi,Pi=(Oi=function(e,t,r){Ki(e,t,r)},Ri(function(e,t){var r=-1,n=t.length,s=n>1?t[n-1]:void 0,i=n>2?t[2]:void 0;for(s=Oi.length>3&&"function"==typeof s?(n--,s):void 0,i&&Qi(t[0],t[1],i)&&(s=n<3?void 0:s,n=1),e=Object(e);++r<n;){var o=t[r];o&&Oi(e,o,r,s)}return e}));let Ji="w-sync-webdata";function $i(e,r={}){let n={},s=!1,i=!1,o=null;if(_t(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=ln()),!dn(e,"emit"))throw new Error("instWConverServer is not an EventEmitter");let u=Me(r,"fpTableTags","");er(u)||(u="./tableTags.json");let l=Me(r,"genTag");Gr(l)||(l=()=>di()+"|"+ps(6));let{emit:a,emitNow:c,clear:d}=function(e,t){let r=t=>Gr(e.listenerCount)?e.listenerCount(t):1,n={emit:(t,...r)=>e.emit(t,...r),listenerCount:r},s=(t,...n)=>{if("error"!==t)return e.emit(t,...n);let s=n[0];return $t(s)&&"listener"===s.fun&&(s={msg:`listener of event[${s.name}] error`,err:s.msg}),0===r("error")?(console.error(`[${Ji}]`,s),!1):e.emit("error",s)},i=new Set,o=(e,t,r)=>{let s=null,o=r.funEmit;s=Dn(n,e,t,{...r,tag:Ji,funEmit:(e,...t)=>(i.delete(s),o(e,...t))}),i.add(s)};return{emit:(e,...r)=>{t()||o(e,r,{funEmit:(e,...r)=>!t()&&s(e,...r)})},emitPm:(n,i,u={})=>{let l=i.pm;if(t())return;let a=!1,c=!1,d=l.resolve,w=l.reject;l.resolve=e=>{a=!0,d(e)},l.reject=e=>{a=!0,w(e)},o(n,[i],{funSettle:e=>{a||(a=!0,c=!0,w(e))},funEmit:(i,...o)=>i!==n?!!c||!t()&&s(i,...o):!t()&&(!Gr(u.beforeDispatch)||!1!==u.beforeDispatch())&&(0===r(i)?(a=!0,c=!0,w(new Error(`no listener for event[${i}]`)),!1):e.emit(i,...o))})},emitNow:(e,...t)=>an(n,e,t,{tag:Ji,funEmit:s}),clear:()=>{i.forEach(e=>{clearTimeout(e)}),i.clear()}}}(e,()=>s);function w(){let e={};try{if(t.existsSync(u)){let r=Kr(t.readFileSync(u,"utf8"));_t(r)&&(e=r)}}catch(e){a("error",{msg:"readTableTags catch",err:e})}return e}let D=()=>{let e=function(e,t=!1,r={}){let n=Me(r,"returnWithStateAndMsg",null);wr(n)||(n=!1);let s=e=>n?{state:"error",msg:e}:"";if(br(e))return s("invalid v");let i="";try{i=t?JSON.stringify(e,null,2):JSON.stringify(e)}catch(e){return s(Zn(e))}return n?{state:"success",msg:i}:i}(n,!1,{returnWithStateAndMsg:!0});if("success"!==Me(e,"state"))return new Error(`can not serialize tableTags: ${Me(e,"msg")}`);try{t.writeFileSync(u,e.msg,"utf8")}catch(e){return e}return o=e.msg,i=!1,null};function y(){if(s)return;let e=D();e&&a("error",{msg:"writeTableTags catch",err:e})}let M=Mi(()=>{y(),a("changeTableTags",n)},200);return e.readTableTags=w,e.writeTableTags=y,e.initTableTags=function(e={},t="useInputFirst"){if(!s)if(null===e&&(e={}),$t(e)){if("useInputOnly"===t)n=e;else if("useStorageOnly"===t)n=w();else if("useInputFirst"===t)n=Pi(w(),e);else{if("useStorageFirst"!==t)throw new Error(`invalid mode[${t}]`);n=Pi(e,w())}y()}else a("error",{msg:"invalid tableTags for initTableTags",err:e})},e.setTableTags=function(e={}){s||(null===e&&(e={}),$t(e)?(n=Pi(n,e),y()):a("error",{msg:"invalid tableTags for setTableTags",err:e}))},e.getTableTags=function(){return n},e.updateTableTag=function(e){s||(er(e)?(n[e]=l(),i=!0,M()):a("error",{msg:"invalid tableName",err:e}))},e.clearSync=function(){if(s)return;M.cancel();let e=null;if(i){let r=null;try{t.existsSync(u)&&(r=t.readFileSync(u,"utf8"))}catch(e){r=void 0}null!==r&&r!==o||(e=D())}s=!0,d(),e&&c("error",{msg:"writeTableTags catch",err:e})},e}var _i=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)Ae(t,ve(e)),e=Tr(e);return t}:Te;function qi(e){return xe(e,Gi,_i)}var eo=Object.prototype.hasOwnProperty;var to=/\w*$/;var ro=m?m.prototype:void 0,no=ro?ro.valueOf:void 0;function so(e,t,r){var n,s,i,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Ni(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Ni(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Ai(e,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(e);case"[object RegExp]":return(i=new(s=e).constructor(s.source,to.exec(s))).lastIndex=s.lastIndex,i;case"[object Symbol]":return n=e,no?Object(no.call(n)):{}}}var io=$e&&$e.isMap,oo=io?Qe(io):function(e){return N(e)&&"[object Map]"==xt(e)};var uo=$e&&$e.isSet,lo=uo?Qe(uo):function(e){return N(e)&&"[object Set]"==xt(e)},ao="[object Arguments]",co="[object Function]",wo="[object Object]",Do={};function yo(e,t,r,n,s,i){var o,u=1&t,l=2&t,a=4&t;if(r&&(o=s?r(e,n,s,i):r(e)),void 0!==o)return o;if(!S(e))return e;var c=D(e);if(c){if(o=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&eo.call(e,"index")&&(r.index=e.index,r.input=e.input),r}(e),!u)return xi(e,o)}else{var d=xt(e),w=d==co||"[object GeneratorFunction]"==d;if(Ve(e))return bi(e,u);if(d==wo||d==ao||w&&!s){if(o=l||w?{}:Si(e),!u)return l?function(e,t){return Xi(e,_i(e),t)}(e,function(e,t){return e&&Xi(t,Gi(t),e)}(o,e)):function(e,t){return Xi(e,ve(e),t)}(e,function(e,t){return e&&Xi(t,at(t),e)}(o,e))}else{if(!Do[d])return s?e:{};o=so(e,d,u)}}i||(i=new ge);var y=i.get(e);if(y)return y;i.set(e,o),lo(e)?e.forEach(function(n){o.add(yo(n,t,r,n,e,i))}):oo(e)&&e.forEach(function(n,s){o.set(s,yo(n,t,r,s,e,i))});var M=c?void 0:(a?l?qi:ct:l?Gi:at)(e);return $r(M||e,function(n,s){M&&(n=e[s=n]),Yi(o,s,yo(n,t,r,s,e,i))}),o}Do[ao]=Do["[object Array]"]=Do["[object ArrayBuffer]"]=Do["[object DataView]"]=Do["[object Boolean]"]=Do["[object Date]"]=Do["[object Float32Array]"]=Do["[object Float64Array]"]=Do["[object Int8Array]"]=Do["[object Int16Array]"]=Do["[object Int32Array]"]=Do["[object Map]"]=Do["[object Number]"]=Do[wo]=Do["[object RegExp]"]=Do["[object Set]"]=Do["[object String]"]=Do["[object Symbol]"]=Do["[object Uint8Array]"]=Do["[object Uint8ClampedArray]"]=Do["[object Uint16Array]"]=Do["[object Uint32Array]"]=!0,Do["[object Error]"]=Do[co]=Do["[object WeakMap]"]=!1;function Mo(e){return yo(e,5)}function go(e={}){let t=ln(),r=Object.create(null),n=null,s=new Set,i=new Set,o=!1,u=Me(e,"timeAlive");hr(u)||(u=1e4),u=Cr(u),u=Math.min(u,tn);let l=Me(e,"timeDetect");return hr(l)||(l=50),l=Cr(l),l=Math.min(l,tn),t.trigger=function(e,a){if(!o)if(er(e)){if(!dn(r,e)){let n=setTimeout(()=>{s.delete(n),dn(r,e)&&i.add(e),an(t,"message",[{eventName:"enter",key:e,data:a,now:Ms(r)}],{tag:"alive"})},1);s.add(n)}r[e]={data:a,time:Date.now()},o||null===n&&(n=setInterval(()=>{_r(r,(e,n)=>{if(Date.now()-e.time>u){let e=Mo(r[n]);if(delete r[n],i.delete(n),an(t,"message",[{eventName:"leave",key:n,data:e.data,now:Ms(r)}],{tag:"alive"}),o)return!1}}),o||_t(r)||(clearInterval(n),n=null)},l))}else console.log("trigger need key")},t.get=function(){let e=[];return _r(r,(t,r)=>{e.push({key:r,data:t.data})}),e=Mo(e),e},t.clear=function(){if(o)return[];o=!0,null!==n&&(clearInterval(n),n=null);for(let e of s)clearTimeout(e);s.clear();let e=[];return _r(r,(t,r)=>{i.has(r)&&e.push({key:r,data:t.data})}),e=Mo(e),r=Object.create(null),i.clear(),e},t}function mo(e,t={}){let r=t.isCleared;Gr(r)||(r=()=>!1);let n=t.onDeliver;Gr(n)||(n=null);let s=e=>{console.error(`[w-serv-broadcast] ${e.msg}`,e.err)},i=t=>(i,...o)=>{let u=o[0];if("error"===i&&_t(u)&&"listener"===u.fun){let t={msg:`listener of event[${u.name}] error`,err:u.msg};return r()?(s(t),!1):e.emit("error",t)}return(!t||!r())&&("error"===i&&0===(t=>Gr(e.listenerCount)?e.listenerCount(t):1)("error")?(s(u),!1):(null!==n&&n(i,o),e.emit(i,...o)))},o=i(!0),u=i(!1),l=(t,...n)=>{r()||Dn(e,t,n,{tag:"w-serv-broadcast",funEmit:o})};return l.final=(t,...r)=>{Dn(e,t,r,{tag:"w-serv-broadcast",funEmit:u})},l}function Io(e,t={}){if(_t(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=ln()),!dn(e,"emit")||!Gr(e.on)||!Gr(e.off))throw new Error("instWConverServer is not an EventEmitter");let r=new Map,n=!1,s=new Map,i=mo(e,{isCleared:()=>n,onDeliver:(e,t)=>{"clientEnter"===e?s.set(t[0],t[1]):"clientLeave"===e&&s.delete(t[0])}}),o=go();o.on("message",function({eventName:e,key:t,data:r,now:n}){"enter"===e?i("clientEnter",t,r):"leave"===e&&(s.has(t)&&s.set(t,r),i("clientLeave",t,r)),i("clientChange",n)});let u=function(e,t,s){if(!n&&"[sys:polling]"===e)try{let e=Me(t,"clientId");if(!er(e))return void s.reject("[sys:polling] invalid clientId");let n=r.get(e)||[];r.set(e,[]),o.trigger(e,t),s.resolve(n)}catch(e){i("error",{msg:"[sys:polling] error",err:e}),s.reject("[sys:polling] error")}},l=null;return e.getClients=o.get,e.getMessages=()=>Object.fromEntries(Array.from(r,([e,t])=>[e,Mo(t)])),e.broadcast=e=>{if(n)return;let t={mode:"broadcast",data:Mo(e)};r.forEach(e=>{e.push(t)})},e.clearBroadcast=()=>{if(n)return;n=!0,null!==l&&(clearInterval(l),l=null),e.off("execute",u);let t=new Map(Ot(o.get(),e=>[e.key,e.data]));o.clear();let a=s.size;for(let[e,r]of Array.from(s))a--,i.final("clientLeave",e,t.has(e)?t.get(e):r),i.final("clientChange",a);s.clear(),r=new Map},e.on("execute",u),l=setInterval(()=>{let e=new Set(Ot(o.get(),"key"));for(let t of Array.from(r.keys()))e.has(t)||r.delete(t)},1e3),e}let fo=(e,t)=>{let r={};return _r(e,e=>{let n=e,s=Me(t,e,"");er(s)&&(r[n]=s)}),r};function po(e){_r(e,({ev:e,name:t,h:r})=>{try{Gr(e.removeListener)?e.removeListener(t,r):Gr(e.off)&&e.off(t,r)}catch(e){}})}function Co(e,t){return 0!==Ms(e)&&(!!_t(t)&&(_r(e,e=>{let r=t[e];if(!r)throw new Error(`invalid kpOrm[${e}]`);if(!Gr(r.on))throw new Error(`kpOrm[${e}] can not listen to change events`)}),!0))}function ho(e,t,r,n={}){if(!_t(e))throw new Error("invalid instWConverServer");if(!Co(t,r))return e;let s=Me(n,"genTag");Gr(s)||(s=()=>di()+"|"+ps(6));let i={};_r(t,e=>{i[e]=s()}),_r(i,e=>{if(!er(e))throw new Error("invalid opt.genTag")});let o=[];try{_r(t,t=>{let n=r[t],s=()=>{e.updateTableTag(t)};try{n.on("change",s)}catch(e){throw new Error(`kpOrm[${t}] can not listen to change events`)}o.push({ev:n,name:"change",h:s})});let n=r=>{e.broadcast({mode:"syncKpTable",data:fo(t,r)})};e.on("changeTableTags",n),o.push({ev:e,name:"changeTableTags",h:n})}catch(e){throw po(o),e}let u=e.clearSync;return e.clearSync=()=>{po(o),o=[],u()},e.initTableTags(i,"useInputOnly"),e}function Lo(e,t){return!!(null==e?0:e.length)&&bs(e,t,0)>-1}function bo(e,t,r){for(var n=-1,s=null==e?0:e.length;++n<s;)if(r(t,e[n]))return!0;return!1}var No=yt&&1/Le(new yt([,-0]))[1]==1/0?function(e){return new yt(e)}:function(){};function Ao(e){return e&&e.length?function(e,t,r){var n=-1,s=Lo,i=e.length,o=!0,u=[],l=u;if(r)o=!1,s=bo;else if(i>=200){var a=t?null:No(e);if(a)return Le(a);o=!1,s=fe,l=new me}else l=t?[]:u;e:for(;++n<i;){var c=e[n],d=t?t(c):c;if(c=r||0!==c?c:0,o&&d==d){for(var w=l.length;w--;)if(l[w]===d)continue e;t&&l.push(d),u.push(c)}else s(l,d,r)||(l!==u&&l.push(d),u.push(c))}return u}(e):[]}function xo(e,t,r,n){for(var s=r-1,i=e.length;++s<i;)if(n(e[s],t))return s;return-1}var Eo=Array.prototype.splice;function To(e,t){return e&&e.length&&t&&t.length?function(e,t,r,n){var s=n?xo:bs,i=-1,o=t.length,u=e;for(e===t&&(t=xi(t)),r&&(u=ue(e,Qe(r)));++i<o;)for(var l=0,a=t[i],c=r?r(a):a;(l=s(u,c,l,n))>-1;)u!==e&&Eo.call(u,l,1),Eo.call(e,l,1);return e}(e,t):e}let So=["__proto__","constructor","prototype"];function Zo(e){return D(t=e)?ue(t,De):A(t)?[t]:xi(oe(de(t)));var t}function vo(e){let t=Zo(e);if(0===t.length)return!1;for(let e of t)if(""===e||So.includes(e))return!1;return!0}const Yo=/^[\p{L}_][\p{L}\p{M}\p{N}_]*$/u,Xo=["prototype","length"];function jo(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return(t===Object.prototype||null===t)&&(0===Object.getOwnPropertySymbols(e).length&&Object.getOwnPropertyNames(e).length===Object.keys(e).length)}function zo(e){return"string"==typeof e?e.length<=1024&&e.indexOf("\0")<0:"boolean"==typeof e||"number"==typeof e&&Number.isFinite(e)}function Go(e,t={}){try{return function(e,t){let r=e=>({ok:!1,reason:e});if(void 0===e)return!0===t.requireKey?r("emptyFind"):{ok:!0,find:e};if(!jo(e))return r("notObject");let n=Object.keys(e);if(n.length>64)return r("tooManyKeys");if(!0===t.requireKey&&0===n.length)return r("emptyFind");let s={},i=0;for(let t of n){if(t.length>128||Xo.includes(t)||t in Object.prototype||!Yo.test(t))return r("badKey");let n=e[t];if(zo(n))s[t]=n;else{if(!jo(n))return r("badValue");{let e=Object.keys(n);if(1!==e.length||"$in"!==e[0])return r("badOperator");let o=n.$in;if(!Array.isArray(o)||Object.getOwnPropertySymbols(o).length>0)return r("badIn");let u=o.length;if(i+=u,i>1e3)return r("tooManyIn");if(Object.getOwnPropertyNames(o).length!==u+1)return r("badIn");let l=[];for(let e=0;e<u;e++){if(!Object.prototype.hasOwnProperty.call(o,e))return r("badIn");let t=o[e];if(!zo(t))return r("badIn");l.push(t)}s[t]=Object.freeze({$in:Object.freeze(l)})}}}return{ok:!0,find:Object.freeze(s)}}(e,t)}catch(e){return{ok:!1,reason:"notObject"}}}let Wo=e=>null!=e,Ko=["select","delAll"];function ko(e={}){let t=Me(e,"getUserIdByToken",null);if(Wo(t)&&!Gr(t))throw new Error("invalid opt.getUserIdByToken");Gr(t)||(t=async()=>"");let r=Me(e,"useDbOrm",null);wr(r)||(r=!1);let n=null;if(r&&(n=Me(e,"operOrm",null),!Gr(n)))throw new Error("invalid opt.operOrm when useDbOrm=true");let s=[];if(r){if(s=Me(e,"tableNames",null),!Lr(s))throw new Error("invalid opt.tableNamesExec when useDbOrm=true");_r(s,(e,t)=>{if(!er(e))throw new Error(`invalid opt.tableNamesExec[${t}] when useDbOrm=true`)}),s=[...s]}let i=[];if(r){if(i=Me(e,"methods",null),null===i)i=["select","insert","save","del"];else if(!Lr(i))throw new Error("invalid opt.methodsExec when useDbOrm=true");_r(i,(e,t)=>{if(!er(e))throw new Error(`invalid opt.methodsExec[${t}] when useDbOrm=true`)}),i=[...i]}let o=null;if(r&&(o=Me(e,"authorizeExec",null),!Gr(o)))throw new Error("invalid opt.authorizeExec when useDbOrm=true");let u=Me(e,"kpFunExt",null);if(Wo(u)&&!$t(u))throw new Error("invalid opt.kpFunExt");$t(u)||(u={}),_r(u,(e,t)=>{if(!Gr(e))throw new Error(`invalid opt.kpFunExt[${t}]`)});let l=Me(e,"kpFunSys",null),a=[];r&&(_r(s,e=>{_r(i,t=>{a.push(`${e}.${t}`)})}),a=Ao(a)),_r(a,e=>{if(!vo(e))throw new Error(`table operation[${e}] can not be bound by the client`)});let c=Ao(Ot(a,e=>Zo(e)[0]));_r(u,(e,t)=>{if(t.startsWith("[sys:"))throw new Error(`kpFunExt[${t}] can not use the reserved prefix [sys:`);if(!vo(t))throw new Error(`kpFunExt[${t}] can not be bound by the client`);let r=Zo(t)[0];if(c.includes(r))throw new Error(`kpFunExt[${t}] conflicts with the table operations of table[${r}]`)});let d=function(e){let t=()=>({leaf:null,kids:new Map}),r=e=>{if(null!==e.leaf)return e.leaf;for(let t of e.kids.values()){let e=r(t);if(null!==e)return e}return null},n=t();for(let s of e){let e=n;for(let r of Zo(s)){if(null!==e.leaf)return[e.leaf,s];e.kids.has(r)||e.kids.set(r,t()),e=e.kids.get(r)}if(null===e.leaf){if(e.kids.size>0)return[r(e),s];e.leaf=s}else if(e.leaf!==s)return[e.leaf,s]}return null}([...a,...at(u)]);if(null!==d){let e=e=>a.includes(e)?"table operation":"kpFunExt";throw new Error(`${e(d[1])}[${d[1]}] conflicts with ${e(d[0])}[${d[0]}] on the client binding path`)}return{getUserIdByToken:t,useDbOrm:r,operOrm:n,tableNames:s,methods:i,authorizeExec:o,kpFunExt:u,kpFunSys:l,pathNames:a}}function Fo(e,t={}){if(!_t(e))throw new Error("invalid instWConverServer");let{getUserIdByToken:r,useDbOrm:n,operOrm:s,tableNames:i,methods:o,authorizeExec:u,kpFunExt:l,kpFunSys:a}=ko(t),c={};async function d(t,n,s){if(!er(t))return s.resolve({state:"error",msg:"invalid func"}),s;let i="";if(!dn(n,"__sysToken__"))return s.resolve({state:"error",msg:"invalid token"}),s;if(i=hn(n.__sysToken__),!dn(n,"__sysInputArgs__"))return s.resolve({state:"error",msg:"invalid input"}),s;if(n=n.__sysInputArgs__,!Array.isArray(n))return s.resolve({state:"error",msg:"invalid input"}),s;let o="";try{o=await r(i)}catch(t){return s.resolve({state:"error",msg:t}),an(e,"error",[t]),s}if(er(o)||(o=""),"[sys:getFuncList]"===t){let e=at(c);e=function(e,t){if(!Er(e))return[];if(($t(t)||yr(t)||qt(t)||wr(t))&&(t=[t]),!Er(t))return e;let r=Mo(e);return To(r,t),r}(e,"[sys:getTableTags]");let t={state:"success",msg:e};return s.resolve(t),s}if(!Object.prototype.hasOwnProperty.call(c,t))return s.resolve({state:"error",msg:`invalid func[${t}]`}),s;let u=c[t];try{let e=await Ur(u)(o,...n);s.resolve(e)}catch(e){s.resolve({state:"error",msg:`call func[${t}] has an error: ${Cn(e)}`})}return s}return n&&(c=function(e,t,r,n){let s={};return _r(e,e=>{_r(t,t=>{s[`${e}.${t}`]=async function(s,i){if(Ko.includes(t)){let e=Go(i);if(!e.ok)return Promise.reject(`invalid find[${e.reason}]`);i=e.find}return!0!==await n({userId:s,tableName:e,methodName:t,input:i})?Promise.reject("permission denied"):await r(s,e,t,i)}})}),s}(i,o,s,u)),_r(l,(e,t)=>{c[t]=e}),_t(a)&&_r(a,(e,t)=>{c[t]=e}),e.on("execute",function(t,r,n){d(t,r,n).catch(r=>{n.resolve({state:"error",msg:`execFun func[${t}] has an error: ${Cn(r)}`}),an(e,"error",[r])})}),e}let Vo=e=>null!=e;function Ho(e,t={}){if(_t(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=ln()),!dn(e,"emit")||!Gr(e.on)||!Gr(e.off))throw new Error("instWConverServer is not an EventEmitter");let{fpTableTags:r,genTag:n,useDbOrm:s,kpOrm:i,tableNamesSync:o,optExec:u}=function(e={}){let t=Me(e,"fpTableTags",null);if(Vo(t)&&!er(t))throw new Error("invalid opt.fpTableTags");er(t)||(t="./tableTags.json");let r=Me(e,"genTag",null);if(Vo(r)&&!Gr(r))throw new Error("invalid opt.genTag");Gr(r)||(r=()=>di()+"|"+ps(6));let n=Me(e,"useDbOrm",null),s=wr(n);s||(n=!1);let i=Me(e,"kpOrm",null),o=Me(e,"operOrm",null),u=Me(e,"tableNamesExec",null),l=Me(e,"methodsExec",null),a=Me(e,"authorizeExec",null),c=Me(e,"tableNamesSync",null),d=Me(e,"getUserIdByToken",null),w=Me(e,"kpFunExt",null);s||_r({operOrm:o,tableNamesExec:u,methodsExec:l,authorizeExec:a,kpOrm:i,tableNamesSync:c},(e,t)=>{if(null!==e)throw new Error(`invalid opt.useDbOrm when opt.${t} is given`)});if(n&&!$t(i))throw new Error("invalid opt.kpOrm when useDbOrm=true");if(n&&Vo(c)){if(!Lr(c))throw new Error("invalid opt.tableNamesSync when useDbOrm=true");_r(c,(e,t)=>{if(!er(e))throw new Error(`invalid opt.tableNamesSync[${t}] when useDbOrm=true`)}),c=[...c]}let D=ko({getUserIdByToken:d,useDbOrm:n,operOrm:o,tableNames:u,methods:l,authorizeExec:a,kpFunExt:w}),y=!1;return n&&(y=Co(c,i)),y&&_r(c,e=>{if(!D.tableNames.includes(e)||!D.methods.includes("select"))throw new Error(`invalid opt.tableNamesSync when table operation[${e}.select] does not exist`)}),{fpTableTags:t,genTag:r,useDbOrm:n,kpOrm:i,tableNamesSync:c,optExec:{getUserIdByToken:D.getUserIdByToken,useDbOrm:D.useDbOrm,operOrm:D.operOrm,tableNames:D.tableNames,methods:D.methods,authorizeExec:D.authorizeExec,kpFunExt:D.kpFunExt}}}(t);e=new Io(e=new $i(e,{fpTableTags:r,genTag:n}));let l={"[sys:getTableTags]":()=>{let t=e.getTableTags();return{mode:"syncKpTable",data:fo(o,t)}}};try{e=new Fo(e,{...u,kpFunSys:l}),s&&(e=new ho(e,o,i,{genTag:n}))}catch(t){throw e.clearBroadcast(),e.clearSync(),t}return e}function Uo(e={}){let t=ln(),s=Me(e,"port");(!hr(s,{useLimitSafe:!0})||Cr(s)>65535)&&(s=8080),s=Cr(s);let i=(t,r,n)=>{let s=Me(e,t);if(null==s)return r;if(!n(s))throw new Error(`invalid opt.${t}`);return s},o=i("corsOrigins",["http://localhost"],e=>!1===e||qt(e)||Lr(e));!1===o&&(o=[]),qt(o)&&(o=[o]),o=o.filter(e=>""!==e);let u=i("useInert",!0,wr),l=i("pathStaticFiles","dist",er),a=Me(e,"apis");Er(a)||(a=[]);let c=Me(e,"fpTableTags",null);null==c&&(c=Me(e,"fnTableTags",null));let d=Me(e,"useShowLog");wr(d)||(d=!0);let w=!0,D=[],y=e=>{w?D.push(e):0!==t.listenerCount("error")?an(t,"error",[e],{tag:"w-serv-hapi"}):console.error("[w-serv-hapi]",e)},M=!1;o.length>0&&(M={origin:o,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]});let g=new r.Server({port:s,routes:{timeout:{server:!1,socket:!1},cors:M}}),m=new ci({serverHapi:g,apiName:Me(e,"apiName"),pathUploadTemp:Me(e,"pathUploadTemp"),tokenType:Me(e,"tokenType"),sizeSlice:Me(e,"sizeSlice"),sizeMsg:Me(e,"sizeMsg"),verifyConn:Me(e,"verifyConn"),delayForSlice:Me(e,"delayForSlice")});m.on("error",y),m.on("clientChange",function(e){d&&console.log(`Server[port:${s}]: now clients: ${e}`)});let I=()=>{for(let e of["clearBroadcast","clearSync"])if(Gr(m[e]))try{m[e]()}catch(e){y(e)}};m=new Ho(m,{...e,fpTableTags:c});let f=new Promise(e=>{setTimeout(()=>{w=!1,e();let t=D;D=[];for(let e of t)y(e)},1)}),p=!1,C=(async()=>{await f,u&&await g.register(n);let e=[];return u&&(e=[{method:"GET",path:"/{file*}",handler:{directory:{path:`${l}/`}}}]),e=[...e,...a],g.route(e),await g.start(),p=!0,d&&console.log(`Server running at: ${g.info.uri}`),g})();C.catch(e=>{I(),y(e)});let h=null;return t.ready=()=>C,t.stop=()=>(null!==h||(h=(async()=>{if(await C.catch(()=>{}),I(),p)try{await g.stop()}catch(e){y(e)}})()),h),t.getServer=async()=>g,t.getInstWConverServer=async()=>m,t}function Bo(e){try{e instanceof Promise&&Promise.prototype.then.call(e,void 0,()=>{})}catch(e){}}function Ro(e,t){let r=Hr(),n=!1;try{let t=function(e,t=!1){let r=[],n=!1;try{if(Array.isArray(e)){let t=e.length;r.length=t;for(let n=0;n<t;n++)n in e&&(r[n]=e[n])}else{if(t||!$t(e)&&!Lr(e))return null;{n=!0;let t=Object.keys(e);for(let n=0;n<t.length;n++)r.push({k:t[n],v:e[t[n]]})}}}catch(e){throw r.forEach(e=>{Bo(n?e.v:e)}),e}return{items:r,useObj:n}}(e);if(null===t)return r.reject("rs is not an array or object"),r;e=t.items,n=t.useObj}catch(e){return r.reject(e),r}Gr(t)||(_r(e,e=>{Bo(n?e.v:e)}),t=function(e){return e});let s=Gr(t),i=-1,o=[];return e.reduce(function(e,r){return e.then(function(e){o.push(e),i+=1;let u=i,l=r;return n&&(u=r.k,l=r.v),s?t(l,u):l})},Promise.resolve()).then(function(e){var t,n,s,i;o.push(e),i=null==(t=o)?0:t.length,o=i?Cs(t,(n=s||void 0===n?1:dr(n))<0?0:n,i):[],r.resolve(o)}).catch(function(e){r.reject(e)}),r}function Qo(e){let t="procOrm does not authorize users, authorize where procOrm is exposed to clients",r=[["useCheckUser",t],["getUserById",t],["useExcludeWhenNotAdmin","procOrm does not filter select results by user, use addFunPostProcessing if needed"]];for(let[t,n]of r){let r=Me(e,t);if(null!=r&&!1!==r)throw new Error(`opt.${t} has been removed, ${n}`)}}let Oo={backup:async function(e){if(!_t(e))throw console.log("woItems",e),new Error("invalid woItems");return await Ro(e,async(e,t)=>(console.log("backup...",t),{name:t,data:await e.select()}))},recover:async function(e,r,n,s=!1){if(!Pr(e))throw console.log("fp",e),new Error("fp is not exist");if(!_t(r))throw console.log("woItems",r),new Error("invalid woItems");Gr(n)||(n=null),wr(s)||(s=!1);let i=t.readFileSync(e,"utf8");i=Ws(i);let o=Kr(i);if(!Er(o))throw new Error("invalid backup data, need a non-empty array");_r(o,(e,t)=>{let n=Me(e,"name");if(!er(n))throw new Error(`invalid backup data, rs[${t}].name is not a string`);if(!Object.prototype.hasOwnProperty.call(r,n))throw new Error(`invalid backup data, table[${n}] is not in woItems`)}),Gr(n)&&n(),await Ro(o,async e=>{console.log("recover...",e.name),s&&(console.log("needCreateStorage"),await r[e.name].createStorage());let t=null;return Ms(e.data)>0&&(t=await r[e.name].insert(e.data)),t})}};var Po=$e&&$e.isRegExp,Jo=Po?Qe(Po):function(e){return N(e)&&"[object RegExp]"==b(e)},$o=/\w*$/;function _o(e,t){var r=30,n="...";if(S(t)){var s="separator"in t?t.separator:s;r="length"in t?dr(t.length):r,n="omission"in t?ce(t.omission):n}var i=(e=de(e)).length;if(ts(e)){var o=Gs(e);i=o.length}if(r>=i)return e;var u=r-ys(n);if(u<1)return n;var l=o?hs(o,0,u).join(""):e.slice(0,u);if(void 0===s)return l+n;if(o&&(u+=l.length-u),Jo(s)){if(e.slice(u).search(s)){var a,c=l;for(s.global||(s=RegExp(s.source,de($o.exec(s))+"g")),s.lastIndex=0;a=s.exec(c);)var d=a.index;l=l.slice(0,void 0===d?u:d)}}else if(e.indexOf(ce(s),u)!=u){var w=l.lastIndexOf(s);w>-1&&(l=l.slice(0,w))}return l+n}function qo(){if(!Gr(ms))throw new Error("invalid dayjs");return ms().format("YYYY-MM-DDTHH:mm:ss.SSSZ")}const eu=[];for(let e=0;e<256;++e)eu.push((e+256).toString(16).slice(1));const tu=new Uint8Array(16);function ru(){return crypto.getRandomValues(tu)}const nu={};function su(e,t,r){let n;if(e)n=iu(e.random??e.rng?.()??ru(),e.msecs,e.seq,t,r);else{const e=Date.now(),s=ru();!function(e,t,r){e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=ou(r),e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++)}(nu,e,s),n=iu(s,nu.msecs,nu.seq,t,r)}return t??function(e,t=0){return(eu[e[t+0]]+eu[e[t+1]]+eu[e[t+2]]+eu[e[t+3]]+"-"+eu[e[t+4]]+eu[e[t+5]]+"-"+eu[e[t+6]]+eu[e[t+7]]+"-"+eu[e[t+8]]+eu[e[t+9]]+"-"+eu[e[t+10]]+eu[e[t+11]]+eu[e[t+12]]+eu[e[t+13]]+eu[e[t+14]]+eu[e[t+15]]).toLowerCase()}(n)}function iu(e,t,r,n,s=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(n){if(s<0||s+16>n.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`)}else n=new Uint8Array(16),s=0;return t??=Date.now(),r??=ou(e),n[s++]=t/1099511627776&255,n[s++]=t/4294967296&255,n[s++]=t/16777216&255,n[s++]=t/65536&255,n[s++]=t/256&255,n[s++]=255&t,n[s++]=112|r>>>28&15,n[s++]=r>>>20&255,n[s++]=128|r>>>14&63,n[s++]=r>>>6&255,n[s++]=r<<2&255|3&e[10],n[s++]=e[11],n[s++]=e[12],n[s++]=e[13],n[s++]=e[14],n[s++]=e[15],n}function ou(e){return(127&e[6])<<24|e[7]<<16|e[8]<<8|e[9]}function uu(){return su()}var lu={exports:{}},au={},cu={exports:{}},du={};function wu(){var e={"align-content":!1,"align-items":!1,"align-self":!1,"alignment-adjust":!1,"alignment-baseline":!1,all:!1,"anchor-point":!1,animation:!1,"animation-delay":!1,"animation-direction":!1,"animation-duration":!1,"animation-fill-mode":!1,"animation-iteration-count":!1,"animation-name":!1,"animation-play-state":!1,"animation-timing-function":!1,azimuth:!1,"backface-visibility":!1,background:!0,"background-attachment":!0,"background-clip":!0,"background-color":!0,"background-image":!0,"background-origin":!0,"background-position":!0,"background-repeat":!0,"background-size":!0,"baseline-shift":!1,binding:!1,bleed:!1,"bookmark-label":!1,"bookmark-level":!1,"bookmark-state":!1,border:!0,"border-bottom":!0,"border-bottom-color":!0,"border-bottom-left-radius":!0,"border-bottom-right-radius":!0,"border-bottom-style":!0,"border-bottom-width":!0,"border-collapse":!0,"border-color":!0,"border-image":!0,"border-image-outset":!0,"border-image-repeat":!0,"border-image-slice":!0,"border-image-source":!0,"border-image-width":!0,"border-left":!0,"border-left-color":!0,"border-left-style":!0,"border-left-width":!0,"border-radius":!0,"border-right":!0,"border-right-color":!0,"border-right-style":!0,"border-right-width":!0,"border-spacing":!0,"border-style":!0,"border-top":!0,"border-top-color":!0,"border-top-left-radius":!0,"border-top-right-radius":!0,"border-top-style":!0,"border-top-width":!0,"border-width":!0,bottom:!1,"box-decoration-break":!0,"box-shadow":!0,"box-sizing":!0,"box-snap":!0,"box-suppress":!0,"break-after":!0,"break-before":!0,"break-inside":!0,"caption-side":!1,chains:!1,clear:!0,clip:!1,"clip-path":!1,"clip-rule":!1,color:!0,"color-interpolation-filters":!0,"column-count":!1,"column-fill":!1,"column-gap":!1,"column-rule":!1,"column-rule-color":!1,"column-rule-style":!1,"column-rule-width":!1,"column-span":!1,"column-width":!1,columns:!1,contain:!1,content:!1,"counter-increment":!1,"counter-reset":!1,"counter-set":!1,crop:!1,cue:!1,"cue-after":!1,"cue-before":!1,cursor:!1,direction:!1,display:!0,"display-inside":!0,"display-list":!0,"display-outside":!0,"dominant-baseline":!1,elevation:!1,"empty-cells":!1,filter:!1,flex:!1,"flex-basis":!1,"flex-direction":!1,"flex-flow":!1,"flex-grow":!1,"flex-shrink":!1,"flex-wrap":!1,float:!1,"float-offset":!1,"flood-color":!1,"flood-opacity":!1,"flow-from":!1,"flow-into":!1,font:!0,"font-family":!0,"font-feature-settings":!0,"font-kerning":!0,"font-language-override":!0,"font-size":!0,"font-size-adjust":!0,"font-stretch":!0,"font-style":!0,"font-synthesis":!0,"font-variant":!0,"font-variant-alternates":!0,"font-variant-caps":!0,"font-variant-east-asian":!0,"font-variant-ligatures":!0,"font-variant-numeric":!0,"font-variant-position":!0,"font-weight":!0,grid:!1,"grid-area":!1,"grid-auto-columns":!1,"grid-auto-flow":!1,"grid-auto-rows":!1,"grid-column":!1,"grid-column-end":!1,"grid-column-start":!1,"grid-row":!1,"grid-row-end":!1,"grid-row-start":!1,"grid-template":!1,"grid-template-areas":!1,"grid-template-columns":!1,"grid-template-rows":!1,"hanging-punctuation":!1,height:!0,hyphens:!1,icon:!1,"image-orientation":!1,"image-resolution":!1,"ime-mode":!1,"initial-letters":!1,"inline-box-align":!1,"justify-content":!1,"justify-items":!1,"justify-self":!1,left:!1,"letter-spacing":!0,"lighting-color":!0,"line-box-contain":!1,"line-break":!1,"line-grid":!1,"line-height":!1,"line-snap":!1,"line-stacking":!1,"line-stacking-ruby":!1,"line-stacking-shift":!1,"line-stacking-strategy":!1,"list-style":!0,"list-style-image":!0,"list-style-position":!0,"list-style-type":!0,margin:!0,"margin-bottom":!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"marker-offset":!1,"marker-side":!1,marks:!1,mask:!1,"mask-box":!1,"mask-box-outset":!1,"mask-box-repeat":!1,"mask-box-slice":!1,"mask-box-source":!1,"mask-box-width":!1,"mask-clip":!1,"mask-image":!1,"mask-origin":!1,"mask-position":!1,"mask-repeat":!1,"mask-size":!1,"mask-source-type":!1,"mask-type":!1,"max-height":!0,"max-lines":!1,"max-width":!0,"min-height":!0,"min-width":!0,"move-to":!1,"nav-down":!1,"nav-index":!1,"nav-left":!1,"nav-right":!1,"nav-up":!1,"object-fit":!1,"object-position":!1,opacity:!1,order:!1,orphans:!1,outline:!1,"outline-color":!1,"outline-offset":!1,"outline-style":!1,"outline-width":!1,overflow:!1,"overflow-wrap":!1,"overflow-x":!1,"overflow-y":!1,padding:!0,"padding-bottom":!0,"padding-left":!0,"padding-right":!0,"padding-top":!0,page:!1,"page-break-after":!1,"page-break-before":!1,"page-break-inside":!1,"page-policy":!1,pause:!1,"pause-after":!1,"pause-before":!1,perspective:!1,"perspective-origin":!1,pitch:!1,"pitch-range":!1,"play-during":!1,position:!1,"presentation-level":!1,quotes:!1,"region-fragment":!1,resize:!1,rest:!1,"rest-after":!1,"rest-before":!1,richness:!1,right:!1,rotation:!1,"rotation-point":!1,"ruby-align":!1,"ruby-merge":!1,"ruby-position":!1,"shape-image-threshold":!1,"shape-outside":!1,"shape-margin":!1,size:!1,speak:!1,"speak-as":!1,"speak-header":!1,"speak-numeral":!1,"speak-punctuation":!1,"speech-rate":!1,stress:!1,"string-set":!1,"tab-size":!1,"table-layout":!1,"text-align":!0,"text-align-last":!0,"text-combine-upright":!0,"text-decoration":!0,"text-decoration-color":!0,"text-decoration-line":!0,"text-decoration-skip":!0,"text-decoration-style":!0,"text-emphasis":!0,"text-emphasis-color":!0,"text-emphasis-position":!0,"text-emphasis-style":!0,"text-height":!0,"text-indent":!0,"text-justify":!0,"text-orientation":!0,"text-overflow":!0,"text-shadow":!0,"text-space-collapse":!0,"text-transform":!0,"text-underline-position":!0,"text-wrap":!0,top:!1,transform:!1,"transform-origin":!1,"transform-style":!1,transition:!1,"transition-delay":!1,"transition-duration":!1,"transition-property":!1,"transition-timing-function":!1,"unicode-bidi":!1,"vertical-align":!1,visibility:!1,"voice-balance":!1,"voice-duration":!1,"voice-family":!1,"voice-pitch":!1,"voice-range":!1,"voice-rate":!1,"voice-stress":!1,"voice-volume":!1,volume:!1,"white-space":!1,widows:!1,width:!0,"will-change":!1,"word-break":!0,"word-spacing":!0,"word-wrap":!0,"wrap-flow":!1,"wrap-through":!1,"writing-mode":!1,"z-index":!1};return e}var Du=/javascript\s*\:/gim;du.whiteList=wu(),du.getDefaultWhiteList=wu,du.onAttr=function(e,t,r){},du.onIgnoreAttr=function(e,t,r){},du.safeAttrValue=function(e,t){return Du.test(t)?"":t};var yu={indexOf:function(e,t){var r,n;if(Array.prototype.indexOf)return e.indexOf(t);for(r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},forEach:function(e,t,r){var n,s;if(Array.prototype.forEach)return e.forEach(t,r);for(n=0,s=e.length;n<s;n++)t.call(r,e[n],n,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},trimRight:function(e){return String.prototype.trimRight?e.trimRight():e.replace(/(\s*$)/g,"")}};var Mu=function(e,t){";"!==(e=yu.trimRight(e))[e.length-1]&&(e+=";");var r=e.length,n=!1,s=0,i=0,o="";function u(){if(!n){var r=yu.trim(e.slice(s,i)),u=r.indexOf(":");if(-1!==u){var l=yu.trim(r.slice(0,u)),a=yu.trim(r.slice(u+1));if(l){var c=t(s,o.length,l,a,r);c&&(o+=c+"; ")}}}s=i+1}for(;i<r;i++){var l=e[i];if("/"===l&&"*"===e[i+1]){var a=e.indexOf("*/",i+2);if(-1===a)break;s=(i=a+1)+1,n=!1}else"("===l?n=!0:")"===l?n=!1:";"===l?n||u():"\n"===l&&u()}return yu.trim(o)},gu=du,mu=Mu;function Iu(e){return null==e}function fu(e){(e=function(e){var t={};for(var r in e)t[r]=e[r];return t}(e||{})).whiteList=e.whiteList||gu.whiteList,e.onAttr=e.onAttr||gu.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||gu.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||gu.safeAttrValue,this.options=e}fu.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,r=t.whiteList,n=t.onAttr,s=t.onIgnoreAttr,i=t.safeAttrValue;return mu(e,function(e,t,o,u,l){var a=r[o],c=!1;if(!0===a?c=a:"function"==typeof a?c=a(u):a instanceof RegExp&&(c=a.test(u)),!0!==c&&(c=!1),u=i(o,u)){var d,w={position:t,sourcePosition:e,source:l,isWhite:c};return c?Iu(d=n(o,u,w))?o+":"+u:d:Iu(d=s(o,u,w))?void 0:d}})};var pu=fu;!function(e,t){var r=du,n=pu;for(var s in(t=e.exports=function(e,t){return new n(t).process(e)}).FilterCSS=n,r)t[s]=r[s];"undefined"!=typeof window&&(window.filterCSS=e.exports)}(cu,cu.exports);var Cu=cu.exports,hu={indexOf:function(e,t){var r,n;if(Array.prototype.indexOf)return e.indexOf(t);for(r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},forEach:function(e,t,r){var n,s;if(Array.prototype.forEach)return e.forEach(t,r);for(n=0,s=e.length;n<s;n++)t.call(r,e[n],n,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},spaceIndex:function(e){var t=/\s|\n|\t/.exec(e);return t?t.index:-1}},Lu=Cu.FilterCSS,bu=Cu.getDefaultWhiteList,Nu=hu;function Au(){return{a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","crossorigin","loop","muted","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],figcaption:[],figure:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height","loading"],ins:["datetime"],kbd:[],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],summary:[],sup:[],strong:[],strike:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","crossorigin","loop","muted","playsinline","poster","preload","src","height","width"]}}var xu=new Lu;function Eu(e){return e.replace(Tu,"<").replace(Su,">")}var Tu=/</g,Su=/>/g,Zu=/"/g,vu=/"/g,Yu=/&#([a-zA-Z0-9]*);?/gim,Xu=/:?/gim,ju=/&newline;?/gim,zu=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a):/gi,Gu=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,Wu=/u\s*r\s*l\s*\(.*/gi;function Ku(e){return e.replace(Zu,""")}function ku(e){return e.replace(vu,'"')}function Fu(e){return e.replace(Yu,function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))})}function Vu(e){return e.replace(Xu,":").replace(ju," ")}function Hu(e){for(var t="",r=0,n=e.length;r<n;r++)t+=e.charCodeAt(r)<32?" ":e.charAt(r);return Nu.trim(t)}function Uu(e){return e=Hu(e=Vu(e=Fu(e=ku(e))))}function Bu(e){return e=Eu(e=Ku(e))}au.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","crossorigin","loop","muted","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],figcaption:[],figure:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height","loading"],ins:["datetime"],kbd:[],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],summary:[],sup:[],strong:[],strike:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","crossorigin","loop","muted","playsinline","poster","preload","src","height","width"]},au.getDefaultWhiteList=Au,au.onTag=function(e,t,r){},au.onIgnoreTag=function(e,t,r){},au.onTagAttr=function(e,t,r){},au.onIgnoreTagAttr=function(e,t,r){},au.safeAttrValue=function(e,t,r,n){if(r=Uu(r),"href"===t||"src"===t){if("#"===(r=Nu.trim(r)))return"#";if("http://"!==r.substr(0,7)&&"https://"!==r.substr(0,8)&&"mailto:"!==r.substr(0,7)&&"tel:"!==r.substr(0,4)&&"data:image/"!==r.substr(0,11)&&"ftp://"!==r.substr(0,6)&&"./"!==r.substr(0,2)&&"../"!==r.substr(0,3)&&"#"!==r[0]&&"/"!==r[0])return""}else if("background"===t){if(zu.lastIndex=0,zu.test(r))return""}else if("style"===t){if(Gu.lastIndex=0,Gu.test(r))return"";if(Wu.lastIndex=0,Wu.test(r)&&(zu.lastIndex=0,zu.test(r)))return"";!1!==n&&(r=(n=n||xu).process(r))}return r=Bu(r)},au.escapeHtml=Eu,au.escapeQuote=Ku,au.unescapeQuote=ku,au.escapeHtmlEntities=Fu,au.escapeDangerHtml5Entities=Vu,au.clearNonPrintableCharacter=Hu,au.friendlyAttrValue=Uu,au.escapeAttrValue=Bu,au.onIgnoreTagStripAll=function(){return""},au.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var r=!Array.isArray(e),n=[],s=!1;return{onIgnoreTag:function(i,o,u){if(function(t){return!!r||-1!==Nu.indexOf(e,t)}(i)){if(u.isClosing){var l="[/removed]",a=u.position+10;return n.push([!1!==s?s:u.position,a]),s=!1,l}return s||(s=u.position),"[removed]"}return t(i,o,u)},remove:function(e){var t="",r=0;return Nu.forEach(n,function(n){t+=e.slice(r,n[0]),r=n[1]}),t+=e.slice(r)}}},au.stripCommentTag=function(e){for(var t="",r=0;r<e.length;){var n=e.indexOf("\x3c!--",r);if(-1===n){t+=e.slice(r);break}t+=e.slice(r,n);var s=e.indexOf("--\x3e",n);if(-1===s)break;r=s+3}return t},au.stripBlankChar=function(e){var t=e.split("");return(t=t.filter(function(e){var t=e.charCodeAt(0);return 127!==t&&(!(t<=31)||(10===t||13===t))})).join("")},au.attributeWrapSign='"',au.cssFilter=xu,au.getDefaultCSSWhiteList=bu;var Ru={},Qu=hu;function Ou(e){var t,r=Qu.spaceIndex(e);return t=-1===r?e.slice(1,-1):e.slice(1,r+1),"/"===(t=Qu.trim(t).toLowerCase()).slice(0,1)&&(t=t.slice(1)),"/"===t.slice(-1)&&(t=t.slice(0,-1)),t}function Pu(e){return"</"===e.slice(0,2)}var Ju=/[^a-zA-Z0-9\\_:.-]/gim;function $u(e,t){for(;t<e.length;t++){var r=e[t];if(" "!==r)return"="===r?t:-1}}function _u(e,t){for(;t<e.length;t++){var r=e[t];if(" "!==r)return"'"===r||'"'===r?t:-1}}function qu(e,t){for(;t>0;t--){var r=e[t];if(" "!==r)return"="===r?t:-1}}function el(e){return function(e){return'"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1]}(e)?e.substr(1,e.length-2):e}Ru.parseTag=function(e,t,r){var n="",s=0,i=!1,o=!1,u=0,l=e.length,a="",c="";e:for(u=0;u<l;u++){var d=e.charAt(u);if(!1===i){if("<"===d){i=u;continue}}else if(!1===o){if("<"===d){n+=r(e.slice(s,u)),i=u,s=u;continue}if(">"===d||u===l-1){n+=r(e.slice(s,i)),a=Ou(c=e.slice(i,u+1)),n+=t(i,n.length,a,c,Pu(c)),s=u+1,i=!1;continue}if('"'===d||"'"===d)for(var w=1,D=e.charAt(u-w);""===D.trim()||"="===D;){if("="===D){o=d;continue e}D=e.charAt(u-++w)}}else if(d===o){o=!1;continue}}return s<l&&(n+=r(e.substr(s))),n},Ru.parseAttr=function(e,t){var r=0,n=0,s=[],i=!1,o=e.length;function u(e,r){if(!((e=(e=Qu.trim(e)).replace(Ju,"").toLowerCase()).length<1)){var n=t(e,r||"");n&&s.push(n)}}for(var l=0;l<o;l++){var a,c=e.charAt(l);if(!1!==i||"="!==c)if(!1===i||l!==n)if(/\s|\n|\t/.test(c)){if(e=e.replace(/\s|\n|\t/g," "),!1===i){if(-1===(a=$u(e,l))){u(Qu.trim(e.slice(r,l))),i=!1,r=l+1;continue}l=a-1;continue}if(-1===(a=qu(e,l-1))){u(i,el(Qu.trim(e.slice(r,l)))),i=!1,r=l+1;continue}}else;else{if(-1===(a=e.indexOf(c,l+1)))break;u(i,Qu.trim(e.slice(n+1,a))),i=!1,r=(l=a)+1}else i=e.slice(r,l),r=l+1,n='"'===e.charAt(r)||"'"===e.charAt(r)?r:_u(e,l+1)}return r<e.length&&(!1===i?u(e.slice(r)):u(i,el(Qu.trim(e.slice(r))))),Qu.trim(s.join(" "))};var tl=Cu.FilterCSS,rl=au,nl=Ru,sl=nl.parseTag,il=nl.parseAttr,ol=hu;function ul(e){return null==e}function ll(e){(e=function(e){var t={};for(var r in e)t[r]=e[r];return t}(e||{})).stripIgnoreTag&&(e.onIgnoreTag&&console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'),e.onIgnoreTag=rl.onIgnoreTagStripAll),e.whiteList||e.allowList?e.whiteList=function(e){var t={};for(var r in e)Array.isArray(e[r])?t[r.toLowerCase()]=e[r].map(function(e){return e.toLowerCase()}):t[r.toLowerCase()]=e[r];return t}(e.whiteList||e.allowList):e.whiteList=rl.whiteList,this.attributeWrapSign=!0===e.singleQuotedAttributeValue?"'":rl.attributeWrapSign,e.onTag=e.onTag||rl.onTag,e.onTagAttr=e.onTagAttr||rl.onTagAttr,e.onIgnoreTag=e.onIgnoreTag||rl.onIgnoreTag,e.onIgnoreTagAttr=e.onIgnoreTagAttr||rl.onIgnoreTagAttr,e.safeAttrValue=e.safeAttrValue||rl.safeAttrValue,e.escapeHtml=e.escapeHtml||rl.escapeHtml,this.options=e,!1===e.css?this.cssFilter=!1:(e.css=e.css||{},this.cssFilter=new tl(e.css))}ll.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this,r=t.options,n=r.whiteList,s=r.onTag,i=r.onIgnoreTag,o=r.onTagAttr,u=r.onIgnoreTagAttr,l=r.safeAttrValue,a=r.escapeHtml,c=t.attributeWrapSign,d=t.cssFilter;r.stripBlankChar&&(e=rl.stripBlankChar(e)),r.allowCommentTag||(e=rl.stripCommentTag(e));var w=!1;r.stripIgnoreTagBody&&(w=rl.StripTagBody(r.stripIgnoreTagBody,i),i=w.onIgnoreTag);var D=sl(e,function(e,t,r,w,D){var y={sourcePosition:e,position:t,isClosing:D,isWhite:Object.prototype.hasOwnProperty.call(n,r)},M=s(r,w,y);if(!ul(M))return M;if(y.isWhite){if(y.isClosing)return"</"+r+">";var g=function(e){var t=ol.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var r="/"===(e=ol.trim(e.slice(t+1,-1)))[e.length-1];return r&&(e=ol.trim(e.slice(0,-1))),{html:e,closing:r}}(w),m=n[r],I=il(g.html,function(e,t){var n=-1!==ol.indexOf(m,e),s=o(r,e,t,n);return ul(s)?n?(t=l(r,e,t,d))?e+"="+c+t+c:e:ul(s=u(r,e,t,n))?void 0:s:s});return w="<"+r,I&&(w+=" "+I),g.closing&&(w+=" /"),w+=">"}return ul(M=i(r,w,y))?a(w):M},a);return w&&(D=w.remove(D)),D};var al=ll;!function(e,t){var r=au,n=Ru,s=al;function i(e,t){return new s(t).process(e)}(t=e.exports=i).filterXSS=i,t.FilterXSS=s,function(){for(var e in r)t[e]=r[e];for(var s in n)t[s]=n[s]}(),"undefined"!=typeof window&&(window.filterXSS=e.exports),"undefined"!=typeof self&&"undefined"!=typeof DedicatedWorkerGlobalScope&&self instanceof DedicatedWorkerGlobalScope&&(self.filterXSS=e.exports)}(lu,lu.exports);var cl=nn(lu.exports);function dl(){return"undefined"!=typeof self?self:"undefined"!=typeof window&&void 0!==window.document?window:"undefined"!=typeof global?global:null}let wl=/<(?=[A-Za-z!/?]|$)/g;function Dl(e){return e.replace(wl,"<")}let yl={getFilterXSS:function(e=cl){if(Gr(e))return e;let t=dl(),r=Me(t,"filterXSS",null);if(Gr(r))return r;let n=Me(t,"xss",null);if(Gr(n))return n;throw new Error("invalid filterXSS, g.filterXSS, use script for import")},getOpt:function(e){return{escapeHtml:Dl,onIgnoreTagAttr:function(t,r,n,s){if("style"===r)return r+'="'+e.escapeAttrValue(n)+'"'}}}};function Ml(e){let t=null,r=null;let n=function e(n){if(Array.isArray(n)){for(let t=0;t<n.length;t++)n[t]=e(n[t]);return n}if($t(n)||Lr(n)){for(let t of Object.keys(n))n[t]=e(n[t]);return n}return er(n)?(s=n,null===t&&(t=yl.getFilterXSS(),r=yl.getOpt(t)),t(s,r)):n;var s}(Mo(e));return n}function gl(e,t){if(!Lr(e))return[];Lr(t)||(t=[t]);let r=[];return _r(e,(e,n)=>{0===Me(e,"ok")&&r.push({k:n,id:Me(t,[n,"id"]),err:Me(e,"err","")})}),r}function ml(e,t){var r,n,s;let i=`${e}: ${Jt(Ot((n=10,(r=t)&&r.length?Cs(r,0,(n=s||void 0===n?1:dr(n))<0?0:n):[]),e=>er(e.ref)?e.ref:er(e.id)||yr(e.id)?`id[${_o(String(e.id),{length:100,omission:"…"})}]`:`data[${e.k}]`),", ")}`;return Ms(t)>10&&(i+=`, ... (${Ms(t)} in total)`),i}function Il(e,t){if(t.indexOf("id")<0)return!1;let r=Me(e,"settings",null);if(_t(r)&&!0!==Me(r,"id.pk"))return!1;let n=Me(r,"id.type","")||Me(e,"kpType.id","");return!(er(n)&&["STRING","TEXT","CHAR","UUID","CITEXT"].indexOf(n.split("(")[0].trim().toUpperCase())<0)}function fl(e,t){return null!==e&&"object"==typeof e&&"string"==typeof t&&Object.prototype.hasOwnProperty.call(e,t)?void 0===e[t]?null:e[t]:null}function pl(e){return"number"==typeof e&&Number.isFinite(e)}function Cl(e){return pl(e)?String(e):e}function hl(e,t){return Object.fromEntries(Object.keys(e).map(r=>[r,t(e[r],r)]))}const Ll=Object.freeze({proto:"unsupported key[__proto__]",accessor:"unsupported accessor property",unreadable:"unreadable value",deep:"too deep",hidden:"unsupported symbol key or non-enumerable property",irregular:"unsupported irregular object or array"}),bl="function"==typeof WeakRef?Function.prototype.call.bind(WeakRef.prototype.deref):null,Nl="function"==typeof FinalizationRegistry?Function.prototype.call.bind(FinalizationRegistry.prototype.unregister):null,Al={};function xl(e){for(let t=e;null!==t;t=Object.getPrototypeOf(t))if(u.types.isProxy(t)||Object.prototype.hasOwnProperty.call(t,Symbol.toStringTag))return!1;return!0}function El(e){return u.types.isMap(e)||u.types.isSet(e)||u.types.isWeakMap(e)||u.types.isWeakSet(e)||u.types.isPromise(e)||u.types.isAnyArrayBuffer(e)||u.types.isArrayBufferView(e)||u.types.isBoxedPrimitive(e)||u.types.isRegExp(e)||u.types.isNativeError(e)||u.types.isGeneratorObject(e)||u.types.isMapIterator(e)||u.types.isSetIterator(e)||u.types.isModuleNamespaceObject(e)}function Tl(e){if("object"!=typeof e||null===e||!xl(e)||!$t(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t===Object.prototype||function(e){if(null!==Object.getPrototypeOf(e))return!1;let t=Reflect.ownKeys(Object.prototype);if(Reflect.ownKeys(e).length!==t.length)return!1;for(let r of t)if(!Object.prototype.hasOwnProperty.call(e,r))return!1;let r=Object.getOwnPropertyDescriptor(e,"constructor");if(void 0===r||"function"!=typeof r.value||u.types.isProxy(r.value))return!1;if(Function.prototype.toString.call(r.value)!==Function.prototype.toString.call(Object))return!1;let n=Object.getOwnPropertyDescriptor(r.value,"prototype");return void 0!==n&&n.value===e}(t)}function Sl(e){return"object"!=typeof e||null===e||!xl(e)||El(e)?null:Array.isArray(e)?"arr":$t(e)?"obj":null}function Zl(e){if(null!==bl)try{return bl(e),!0}catch(e){}if(null!==Nl)try{return Nl(e,Al),!0}catch(e){}return!1}function vl(e,...t){try{console.log(e,...t)}catch(t){try{console.log(e,"(unprintable)")}catch(e){}}}function Yl(e,t={n:0},r=0){if(t.n>=200)return"[...]";if(t.n++,"string"==typeof e)return _o(e,{length:200});if("function"==typeof e)return"[Function]";if("symbol"==typeof e)return"[Symbol]";if("object"!=typeof e||null===e)return e;if(u.types.isProxy(e))return"[Proxy]";if(u.types.isDate(e))return"[Date]";if(El(e))return"[Object]";if(r>=8)return"[...]";let n=e=>void 0===e?"[empty]":void 0!==e.get||void 0!==e.set?"[Getter/Setter]":Yl(e.value,t,r+1);if(Array.isArray(e)){let t=Math.min(e.length,50),r=[];for(let s=0;s<t;s++)r.push(n(Object.getOwnPropertyDescriptor(e,s)));return e.length>t&&r.push(`[${e.length-t} more]`),r}let s=Reflect.ownKeys(e),i={};for(let t of s.slice(0,50)){let r=Object.getOwnPropertyDescriptor(e,t),s="symbol"==typeof t?String(t):t;Object.defineProperty(i,r.enumerable?s:`${s} (non-enumerable)`,{value:n(r),enumerable:!0,writable:!0,configurable:!0})}return s.length>50&&Object.defineProperty(i,"[more]",{value:s.length-50,enumerable:!0,writable:!0,configurable:!0}),i}function Xl(e,t){let r;try{r=Yl(t)}catch(e){r="(unprintable)"}vl(e,r)}function jl(e,t=1/0,r=!1){try{let n=new Set,s=[e,1],i=0,o=[];for(;s.length>0;){let e,l=s.pop(),a=s.pop();if(n.has(a))continue;if(r){if("object"==typeof a&&null!==a){if(!xl(a)||El(a))return"irregular";if(u.types.isDate(a)){if(Reflect.ownKeys(a).length>0)return"irregular";continue}}e=Sl(a)}else e=Array.isArray(a)?"arr":$t(a)?"obj":null;if(null===e)continue;let c="arr"===e;if(l>t)return"deep";if(n.add(a),Object.prototype.hasOwnProperty.call(a,"__proto__"))return"proto";let d=c?null:Object.keys(a);if(r&&!c){if(!Tl(a))return"irregular";if(Reflect.ownKeys(a).length!==d.length)return"hidden";o.push(a)}let w=c?a.length:d.length;for(let e=0;e<w;e++){let t=Object.getOwnPropertyDescriptor(a,c?e:d[e]);if(void 0!==t){if(void 0!==t.get||void 0!==t.set)return"accessor";if(r&&c&&!t.enumerable)return"irregular";r&&(i+=c?0:d[e].length,"string"==typeof t.value&&(i+=t.value.length)),"object"==typeof t.value&&null!==t.value&&s.push(t.value,l+1)}else if(r)return"irregular"}if(r&&c&&Reflect.ownKeys(a).length!==w+1)return"irregular"}if(r&&"object"==typeof e&&null!==e)if(i<=4e6&&"function"==typeof structuredClone){if(function(e){if("function"!=typeof structuredClone)return!1;let t;try{t=structuredClone(e)}catch(e){return!0}let r=new Set,n=[t];for(;n.length>0;){let e=n.pop();if("object"!=typeof e||null===e||r.has(e))continue;r.add(e);let t=Object.getPrototypeOf(e);if(t!==Date.prototype){if(t!==Object.prototype&&t!==Array.prototype)return!0;for(let t of Object.keys(e))n.push(e[t])}}return!1}(e))return"irregular"}else for(let e=0;e<o.length;e++)if(Zl(o[e]))return"irregular";return null}catch(e){return"unreadable"}}function zl(e,t){try{if(void 0!==t&&"object"==typeof t&&null!==t&&u.types.isProxy(t))return`invalid find of ${e}, ${Ll.irregular}`;if(void 0!==t&&!Tl(t))return`invalid find of ${e}, need an object`;let r=jl(t,64,!0);return null!==r?`invalid find of ${e}, ${Ll[r]}`:null}catch(t){return`invalid find of ${e}, ${Ll.unreadable}`}}function Gl(e,t){let r=new Map,n=(e,t)=>{r.has(e)||r.set(e,[]),r.get(e).push({k:t})};if(Array.isArray(t))for(let e=0;e<t.length;e++)try{let r=Object.getOwnPropertyDescriptor(t,e);if(void 0===r)continue;if(void 0!==r.get||void 0!==r.set){n("accessor",e);continue}let s=jl(r.value);null!==s&&n(s,e)}catch(t){n("unreadable",e)}else{let e=jl(t);null!==e&&n(e,0)}return Ot([...r],([t,r])=>ml(`${e}, ${Ll[t]}`,r))}function Wl(e){let t=!Lr(e),r=Ot(t?[e]:e,e=>$t(e)&&pl(e.id)?{...e,id:Cl(e.id)}:e);return t?r[0]:r}function Kl(e){return"obj"!==Sl(e)?e:hl(e,(e,t)=>{return"id"===t?"obj"!==Sl(r=e)?Cl(r):hl(r,(e,t)=>["$eq","$ne","$gt","$gte","$lt","$lte","$in","$nin"].indexOf(t)>=0?"arr"===Sl(e)?Ot(e,Cl):Cl(e):e):["$and","$or"].indexOf(t)>=0&&"arr"===Sl(e)?Ot(e,Kl):e;var r})}function kl(e){let t=[];return _r(Lr(e)?e:[e],(e,r)=>{$t(e)||t.push({k:r})}),t}function Fl(e){let t=Cl(Me(e,"id"));return er(t)?t:null}function Vl(e){let t=[];return _r(Lr(e)?e:[e],(e,r)=>{let n=Me(e,"id");er(n)&&Ml(n)!==n&&t.push({k:r,id:n})}),t}function Hl(e,t){return ml(`${e}, id contains HTML markup`,Ot(t,e=>({k:e.k})))}function Ul(e,t,r,n,s="save"){if(!_t(e))throw console.log("ds",e),new Error("invalid ds");let i=e[t].keys,o=!1;Lr(n)||(o=!0,n=[n]);let u=qo();if(s.indexOf("insert")>=0&&(i.indexOf("userId")>=0&&_r(n,(e,t)=>{n[t].userId=r}),i.indexOf("timeCreate")>=0&&_r(n,(e,t)=>{n[t].timeCreate=u}),i.indexOf("userIdUpdate")>=0&&_r(n,(e,t)=>{n[t].userIdUpdate=r}),i.indexOf("timeUpdate")>=0&&_r(n,(e,t)=>{n[t].timeUpdate=u})),(s.indexOf("insert")>=0||s.indexOf("save")>=0)&&(i.indexOf("userIdUpdate")>=0&&_r(n,(e,t)=>{n[t].userIdUpdate=r}),i.indexOf("timeUpdate")>=0&&_r(n,(e,t)=>{n[t].timeUpdate=u})),n=Ot(n,e=>hl(e,e=>Ml(e))),Il(e[t],i)){(o?_t(n[0]):Er(n))&&_r(n,e=>{er(e.id)||(e.id=uu())})}return n=o?n[0]:n}async function Bl(e,t,r,n,s,i){try{return await async function(e,t,r,n,s,i){let o,u=null;if(!_t(t))return Promise.reject("invalid woItems");let l=fl(t,n);if(null===l)return Promise.reject(`can not find table[${"string"==typeof n?n:""}] in ORM`);let a=function(e,t){let r=fl(e,t),n=Me(r,"keys",null);return!!Lr(n)&&Il(r,n)}(e,n);if("select"===s){let e=zl("select",i);if(null!==e)return Xl(`${n}.select invalid find`,i),Promise.reject(e);if(o=await l.select(a?Kl(i):i).catch(e=>{console.log(`${n}.select catch`,e),u="failed to select data"}),er(u))return Promise.reject(u)}else if("insert"===s||"save"===s){let t=i,c="insert"===s?"failed to insert data":"failed to save data",d=kl(i);if(Ms(d)>0)return console.log(`${n}.${s} data is not an object`,d),Promise.reject(ml(`${c}, not an object`,d));let w=Gl(c,i);if(Ms(w)>0)return console.log(`${n}.${s} data has unsupported key`,w),Promise.reject(Jt(w,"; "));a&&(i=Wl(i));let D=Vl(i);if(Ms(D)>0)return console.log(`${n}.${s} id changed by clearXSS`,D),Promise.reject(Hl(c,D));try{i=Ul(e,n,r,i,s)}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),u="failed to adjust data",Promise.reject(u)}if("insert"===s?o=await l.insert(i).catch(e=>{console.log(`${n}.insert catch`,e),u="failed to insert data"}):"save"===s&&(o=await l.save(i).catch(e=>{console.log(`${n}.save catch`,e),u="failed to save data"})),er(u))return Promise.reject(u);if("save"===s){let e=gl(o,i);if(Ms(e)>0)return console.log(`${n}.save fail`,e),Promise.reject(ml("failed to save data",gl(o,t)))}o=Lr(i)?Ot(i,e=>({id:e.id})):{id:i.id}}else if("del"===s){if(a&&(i=Wl(i)),o=await l.del(i).catch(e=>{console.log(`${n}.del catch`,e),u="failed to delete data"}),!er(u)){let e=gl(o,i);Ms(e)>0&&(console.log(`${n}.del fail`,e),u=ml("failed to delete data",e))}}else if("delAll"===s){let e=zl("delAll",i);if(null!==e)return Xl(`${n}.delAll invalid find`,i),Promise.reject(e);o=await l.delAll(a?Kl(i):i).catch(e=>{console.log(`${n}.delAll catch`,e),u="failed to delete data"})}else if("mix"===s){if(!_t(i))return Promise.reject("invalid input of mix, need the result object of ltdtDiffByKey");for(let e of["add","del","diff"]){let t=Object.getOwnPropertyDescriptor(i,e);if(void 0!==t&&(void 0!==t.get||void 0!==t.set))return Promise.reject(`invalid input of mix, ${Ll.accessor}`)}i={add:i.add,del:i.del,diff:i.diff};for(let e of["add","del","diff"])if(void 0!==i[e]&&!Lr(i[e]))return Promise.reject("invalid input of mix, need the result object of ltdtDiffByKey");let t=[];for(let[e,r]of[["add","failed to insert data"],["diff","failed to update data"]]){let s=kl(Me(i,e,[]));Ms(s)>0&&(console.log(`${n}.mix ${e} data is not an object`,s),t.push(ml(`${r}, not an object`,s)))}if(Ms(t)>0)return Promise.reject(Jt(t,"; "));let s=[];for(let[e,t]of[["add","failed to insert data"],["diff","failed to update data"]])s.push(...Gl(t,Me(i,e,[])));if(Ms(s)>0)return console.log(`${n}.mix data has unsupported key`,s),Promise.reject(Jt(s,"; "));if(a){i={...i};for(let e of["add","del","diff"])Lr(i[e])&&(i[e]=Wl(i[e]))}let c=[];for(let[e,t]of[["add","failed to insert data"],["diff","failed to update data"]]){let r=Vl(Me(i,e,[]));Ms(r)>0&&(console.log(`${n}.mix ${e} id changed by clearXSS`,r),c.push(Hl(t,r)))}if(Ms(c)>0)return Promise.reject(Jt(c,"; "));let d,w=function(e){let t=[];for(let[r,n]of[["add","del"],["del","diff"]]){let s=new Map;_r(Me(e,r,[]),(e,t)=>{let r=Fl(e);null!==r&&s.set(r,[...s.get(r)||[],t])});let i=[],o=[];if(_r(Me(e,n,[]),(e,t)=>{let r=Fl(e);null!==r&&s.has(r)&&(i=[...i,...s.get(r)],o.push(t))}),Ms(o)>0){let e=[...Ot([...new Set(i)].sort((e,t)=>e-t),e=>({ref:`${r}[${e}]`})),...Ot(o,e=>({ref:`${n}[${e}]`}))];t.push(ml(`invalid input of mix, same id in ${r} and ${n}`,e))}}return t}(i);if(Ms(w)>0)return console.log(`${n}.mix same id across steps`,w),Promise.reject(Jt(w,"; "));o=[];let D=[],y=Me(i,"add",[]);if(Ms(y)>0){try{y=Ul(e,n,r,y,"insert+save")}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),u="failed to adjust data",Promise.reject(u)}if(await l.insert(y).catch(e=>{console.log(`${n}.insert catch`,e),u="failed to insert data"}),er(u))return Promise.reject(u);d=Ot(y,e=>({id:e.id})),o=[...o,...d]}let M=Me(i,"del",[]);if(Ms(M)>0){let e=await l.del(M).catch(e=>{console.log(`${n}.del catch`,e),u="failed to delete data"});if(er(u))return Promise.reject(u);let t=gl(e,M);Ms(t)>0&&(console.log(`${n}.del fail`,t),D.push(ml("failed to delete data",t))),d=Ot(M,e=>({id:e.id})),o=[...o,...d]}let g=Me(i,"diff",[]);if(Ms(g)>0){let t=g;try{g=Ul(e,n,r,g)}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),u="failed to adjust data",Promise.reject(u)}let s=await l.save(g).catch(e=>{console.log(`${n}.save catch`,e),u="failed to update data"});if(er(u))return Promise.reject(u);let i=gl(s,g);Ms(i)>0&&(console.log(`${n}.save fail`,i),D.push(ml("failed to update data",gl(s,t)))),d=Ot(g,e=>({id:e.id})),o=[...o,...d]}if(Ms(D)>0)return Promise.reject(Jt(D,"; "))}else u=`invalid mode: ${s}`;if(er(u))return Promise.reject(u);return o}(e,t,r,n,s,i)}catch(e){return"string"==typeof e?Promise.reject(e):(vl(`${"string"==typeof n?n:""}.${"string"==typeof s?s:""} mapOrm catch`,e),Promise.reject("failed to process input"))}}function Rl(e,t){return async(r,n,s,i)=>Bl(e,t,r,n,s,i)}function Ql(e,t,r,n=!1){if(!Gr(t)){let s=`${r} needs a function, but got ${typeof t}`;throw n&&e.push(()=>Promise.reject(s)),new Error(s)}setTimeout(()=>{e.push(t)},1)}function Ol(e,t={}){if(Qo(t),!Gr(e))throw new Error("invalid mapOrm");let r={funChecks:[],funPreProcessing:[],funPostProcessing:[],mapOrm:e};return{addFunCheck:e=>{Ql(r.funChecks,e,"addFunCheck",!0)},addFunPreProcessing:e=>{Ql(r.funPreProcessing,e,"addFunPreProcessing")},addFunPostProcessing:e=>{Ql(r.funPostProcessing,e,"addFunPostProcessing")},procOrm:async(e,t,n,s)=>async function(e,t,r,n,s){await Ro(e.funChecks,e=>e({woName:r,userId:t,mode:n,input:s}));for(let i of[...e.funPreProcessing]){let e=await i({woName:r,userId:t,mode:n,input:s});if(!_t(e)||void 0===e.input)return Promise.reject("invalid return of pre-processing, need an object with input");s=e.input}let i=await e.mapOrm(t,r,n,s);for(let o of[...e.funPostProcessing])i=await o({woName:r,userId:t,mode:n,input:s,output:i});return i}(r,e,t,n,s)}}function Pl(e,t,r,n,s={}){Qo(s);let i=function(e,t,r,n){if(!_t(e))throw console.log("ds",e),new Error("invalid ds");if(!Gr(t))throw console.log("WOrm",t),new Error("invalid WOrm");if(!er(r))throw console.log("url",r),new Error("invalid url");if(!er(n))throw console.log("db",n),new Error("invalid db");let s={};return _r(at(e),e=>{let i=new t({url:r,db:n,cl:e});Object.defineProperty(s,e,{value:i,enumerable:!0,writable:!0,configurable:!0})}),s}(e,t,r,n),o=Ol(Rl(e,i),s);return{...Oo,woItems:i,closeAll:async()=>{await Ro(i,async e=>{e&&Gr(e.close)&&await e.close()})},...o}}function Jl(e,t){if(!$t(e))return{};if(!Er(t))return{};let r={};return _r(t,function(t){dn(e,t)&&(r[t]=Me(e,t))}),r}let $l="grups",_l={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"名稱",type:"STRING"},description:{name:"說明",type:"TEXT"},from:{name:"來源",type:"STRING"},cpemis:{name:"權限清單",type:"TEXT"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"}},ql=(e={})=>{let t=qr(e,at(_l));return t.id=`${uu()}`,t.userIdUpdate=t.userId,t.timeCreate=qo(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t},ea="pemis",ta={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"名稱",type:"STRING"},description:{name:"說明",type:"TEXT"},from:{name:"來源",type:"STRING"},crules:{name:"管控對象清單",type:"TEXT"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"}},ra=(e={})=>{let t=qr(e,at(ta));return t.id=`${uu()}`,t.userIdUpdate=t.userId,t.timeCreate=qo(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t},na="targets",sa={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},description:{name:"說明",type:"TEXT"},from:{name:"來源",type:"STRING"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"}},ia=(e={})=>{let t=qr(e,at(sa));return t.id=`${uu()}`,t.userIdUpdate=t.userId,t.timeCreate=qo(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t},oa="users",ua={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"姓名",type:"STRING"},email:{name:"電子郵件",type:"STRING"},description:{name:"描述",type:"TEXT"},from:{name:"來源",type:"STRING"},cgrups:{name:"權限群組清單",type:"TEXT"},isAdmin:{name:"是否為系統管理員",type:"STRING"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},la=(e={})=>{let t=qr(e,at(ua));return t.id=`${uu()}`,t.isAdmin="n",t.userIdUpdate=t.userId,t.timeCreate=qo(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t};function aa(e,t={}){let r=Me(t,"useCreateStorage");wr(r)||(r=!1);let{keyTable:n,tableNameCht:s,tableNameEng:i,settings:o,parser:u,funNew:l,funTest:a,ext:c}=e;if(!er(n))throw new Error(`invalid keyTable[${n}]`);if(er(s)||(s=n),er(i)||(i=n),!_t(o))throw new Error("invalid settings");_t(c)||(c=null),_t(u)||(u=null),Gr(l)||(l=null);let d=null;Gr(a)&&(d=async e=>{if(!_t(e))throw new Error("invalid wo");if(!dn(e,n))throw console.log(e),new Error(`keyTable[${n}] is not in wo`);let t=[];try{t=a(),Wr(t)&&(t=await t)}catch(e){throw console.log(`keyTable[${n}] funTest catch`,e),new Error(e)}if(0===Ms(t))return;r&&await e[n].createStorage();let s=gl(await e[n].save(t),t);if(Ms(s)>0)throw new Error(`failed to write test data into table[${n}]: ${JSON.stringify(s)}`);return t});let w={},D={};return _r(at(o),e=>{let t=Me(o,`${e}.name`,"");er(t)&&(w[e]=t);let r=Me(o,`${e}.type`,"");er(r)&&(D[e]=r)}),{...e,keyTable:n,tableNameCht:s,tableNameEng:i,settings:o,keys:at(o),kpType:D,kpHead:w,parser:u,funNew:l,funTest:a,funTestAndSave:d,ext:c}}let ca={grups:{keyTable:$l,tableNameCht:"權限群組設定",tableNameEng:"Permission groups",settings:_l,funNew:ql,funTest:()=>{let e=[["權限群組M1","\n {\n '權限P1': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P2': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n }\n "],["權限群組M2","\n {\n '權限P2': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P3': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n }\n "],["權限群組M3","\n {\n '權限P2': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P3': {\n 'mode': 'AND',\n 'isActive': 'y',\n },\n }\n "],["權限群組M4","\n {\n '權限P3': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P4': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n }\n "]];return e=Ot(e,([e,t],r)=>{let n=ql({userId:"id-for-admin",order:r,name:e,description:`${e}的說明`,cpemis:t});return n.id=`id-for-${e}`,n=Jl(n,at(_l)),n}),console.log(`已產生: ${$l} 測試資料`,e),e}},pemis:{keyTable:ea,tableNameCht:"權限設定",tableNameEng:"Permissions",settings:ta,funNew:ra,funTest:()=>{let e=[["權限P1","{ \"專案A/頁A/區塊A\": 'y', \"專案A/頁B/區塊A\": 'n', \"專案A/頁C\": 'n' }"],["權限P2","{ \"專案A/頁C\": 'y', \"專案B/頁A/區塊A\": 'y', \"專案B/頁A/區塊B\": 'y' }"],["權限P3","{ \"專案A/頁C\": 'y', \"專案B/頁A/區塊A\": 'n', \"專案B/頁A/區塊B\": 'y', \"專案B/頁A/區塊C\": 'y' }"],["權限P4","{ \"專案B/頁B/區塊A/待辦事項清單\": 'y', \"專案B/頁B/區塊B/顯示後台按鈕\": 'n' }"]];return e=Ot(e,([e,t],r)=>{let n=ra({userId:"id-for-admin",order:r,name:e,description:`${e}的說明`,crules:t});return n.id=`id-for-${e}`,n=Jl(n,at(ta)),n}),console.log(`已產生: ${ea} 測試資料`,e),e}},targets:{keyTable:na,tableNameCht:"管控對象",tableNameEng:"Targets",settings:sa,funNew:ia,funTest:()=>{let e=["專案A/頁A/區塊A","專案A/頁A/區塊A/執行按鈕","專案A/頁A/區塊A/分析按鈕","專案A/頁B/區塊A","專案A/頁B/區塊A/執行按鈕","專案A/頁B/區塊A/分析按鈕","專案A/頁B/區塊B/展開按鈕","專案A/頁B/區塊B/下載按鈕","專案A/頁C","專案B/頁A/區塊A","專案B/頁A/區塊A/顯示綜合報表","專案B/頁A/區塊A/顯示當前數據","專案B/頁A/區塊B","專案B/頁A/區塊B/下載報表按鈕","專案B/頁A/區塊B/下載數據按鈕","專案B/頁A/區塊C","專案B/頁B/區塊A","專案B/頁B/區塊A/待辦事項清單","專案B/頁B/區塊A/相關資源清單","專案B/頁B/區塊B","專案B/頁B/區塊B/顯示後台按鈕","專案B/頁B/區塊B/轉跳主站按鈕"];return e=Ot(e,(e,t)=>{let r=ia({userId:"id-for-admin",order:t,description:`${e}的說明`});return r.id=e,r=Jl(r,at(sa)),r}),console.log(`已產生: ${na} 測試資料`,e),e}},users:{keyTable:oa,tableNameCht:"使用者",tableNameEng:"Users",settings:ua,funNew:la,funTest:()=>{let e=[["peter","","\n { \n '權限群組M1': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","n"],["mary","","\n { \n '權限群組M2': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","n"],["john","","\n { \n '權限群組M3': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","n"],["admin","","\n { \n '權限群組M4': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","y"]];return e=Ot(e,([e,t,r,n],s)=>{let i=la({userId:"id-for-admin",order:s,name:e,email:`${e}@example.com`,from:t,cgrups:r,isAdmin:n});return i.id=`id-for-${e}`,i.isAdmin=n,i=Jl(i,at(ua)),i}),console.log(`已產生: ${oa} 測試資料`,e),e}}},da={};for(let e in ca)da[e]=aa(ca[e],{useCreateStorage:!1});var wa={exports:{}};!function(e){e.exports=function(){function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t=e(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),r=e(function(e){var t=e.exports={version:"2.6.5"};"number"==typeof __e&&(__e=t)});r.version;var n=function(e){return"object"==typeof e?null!==e:"function"==typeof e},s=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e},i=function(e){try{return!!e()}catch(e){return!0}},o=!i(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),u=t.document,l=n(u)&&n(u.createElement),a=function(e){return l?u.createElement(e):{}},c=!o&&!i(function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}),d=function(e,t){if(!n(e))return e;var r,s;if(t&&"function"==typeof(r=e.toString)&&!n(s=r.call(e)))return s;if("function"==typeof(r=e.valueOf)&&!n(s=r.call(e)))return s;if(!t&&"function"==typeof(r=e.toString)&&!n(s=r.call(e)))return s;throw TypeError("Can't convert object to primitive value")},w=Object.defineProperty,D={f:o?Object.defineProperty:function(e,t,r){if(s(e),t=d(t,!0),s(r),c)try{return w(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},y=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},M=o?function(e,t,r){return D.f(e,t,y(1,r))}:function(e,t,r){return e[t]=r,e},g={}.hasOwnProperty,m=function(e,t){return g.call(e,t)},I=0,f=Math.random(),p=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++I+f).toString(36))},C=e(function(e){var n="__core-js_shared__",s=t[n]||(t[n]={});(e.exports=function(e,t){return s[e]||(s[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),h=C("native-function-to-string",Function.toString),L=e(function(e){var n=p("src"),s="toString",i=(""+h).split(s);r.inspectSource=function(e){return h.call(e)},(e.exports=function(e,r,s,o){var u="function"==typeof s;u&&(m(s,"name")||M(s,"name",r)),e[r]!==s&&(u&&(m(s,n)||M(s,n,e[r]?""+e[r]:i.join(String(r)))),e===t?e[r]=s:o?e[r]?e[r]=s:M(e,r,s):(delete e[r],M(e,r,s)))})(Function.prototype,s,function(){return"function"==typeof this&&this[n]||h.call(this)})}),b=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},N=function(e,t,r){if(b(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,s){return e.call(t,r,n,s)}}return function(){return e.apply(t,arguments)}},A="prototype",x=function(e,n,s){var i,o,u,l,a=e&x.F,c=e&x.G,d=e&x.S,w=e&x.P,D=e&x.B,y=c?t:d?t[n]||(t[n]={}):(t[n]||{})[A],g=c?r:r[n]||(r[n]={}),m=g[A]||(g[A]={});for(i in c&&(s=n),s)u=((o=!a&&y&&void 0!==y[i])?y:s)[i],l=D&&o?N(u,t):w&&"function"==typeof u?N(Function.call,u):u,y&&L(y,i,u,e&x.U),g[i]!=u&&M(g,i,l),w&&m[i]!=u&&(m[i]=u)};t.core=r,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128;var E,T=x,S=Math.ceil,Z=Math.floor,v=function(e){return isNaN(e=+e)?0:(e>0?Z:S)(e)},Y=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},X=(E=!1,function(e,t){var r,n,s=String(Y(e)),i=v(t),o=s.length;return i<0||i>=o?E?"":void 0:(r=s.charCodeAt(i))<55296||r>56319||i+1===o||(n=s.charCodeAt(i+1))<56320||n>57343?E?s.charAt(i):r:E?s.slice(i,i+2):n-56320+(r-55296<<10)+65536});T(T.P,"String",{codePointAt:function(e){return X(this,e)}}),r.String.codePointAt;var j=Math.max,z=Math.min,G=function(e,t){return(e=v(e))<0?j(e+t,0):z(e,t)},W=String.fromCharCode,K=String.fromCodePoint;T(T.S+T.F*(!!K&&1!=K.length),"String",{fromCodePoint:function(e){for(var t,r=arguments,n=[],s=arguments.length,i=0;s>i;){if(t=+r[i++],G(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?W(t):W(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}}),r.String.fromCodePoint;var k,F,V,H,U,B,R,Q,O,P,J,$,_,q,ee={Space_Separator:/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ID_Start:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,ID_Continue:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},te={isSpaceSeparator:function(e){return"string"==typeof e&&ee.Space_Separator.test(e)},isIdStartChar:function(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||"$"===e||"_"===e||ee.ID_Start.test(e))},isIdContinueChar:function(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"$"===e||"_"===e||""===e||""===e||ee.ID_Continue.test(e))},isDigit:function(e){return"string"==typeof e&&/[0-9]/.test(e)},isHexDigit:function(e){return"string"==typeof e&&/[0-9A-Fa-f]/.test(e)}},re=function(e,t){k=String(e),F="start",V=[],H=0,U=1,B=0,R=void 0,Q=void 0,O=void 0;do{R=se(),De[F]()}while("eof"!==R.type);return"function"==typeof t?ne({"":O},"",t):O};function ne(e,t,r){var n=e[t];if(null!=n&&"object"==typeof n)if(Array.isArray(n))for(var s=0;s<n.length;s++){var i=String(s),o=ne(n,i,r);void 0===o?delete n[i]:Object.defineProperty(n,i,{value:o,writable:!0,enumerable:!0,configurable:!0})}else for(var u in n){var l=ne(n,u,r);void 0===l?delete n[u]:Object.defineProperty(n,u,{value:l,writable:!0,enumerable:!0,configurable:!0})}return r.call(e,t,n)}function se(){for(P="default",J="",$=!1,_=1;;){q=ie();var e=ue[P]();if(e)return e}}function ie(){if(k[H])return String.fromCodePoint(k.codePointAt(H))}function oe(){var e=ie();return"\n"===e?(U++,B=0):e?B+=e.length:B++,e&&(H+=e.length),e}var ue={default:function(){switch(q){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void oe();case"/":return oe(),void(P="comment");case void 0:return oe(),le("eof")}if(!te.isSpaceSeparator(q))return ue[F]();oe()},comment:function(){switch(q){case"*":return oe(),void(P="multiLineComment");case"/":return oe(),void(P="singleLineComment")}throw ge(oe())},multiLineComment:function(){switch(q){case"*":return oe(),void(P="multiLineCommentAsterisk");case void 0:throw ge(oe())}oe()},multiLineCommentAsterisk:function(){switch(q){case"*":return void oe();case"/":return oe(),void(P="default");case void 0:throw ge(oe())}oe(),P="multiLineComment"},singleLineComment:function(){switch(q){case"\n":case"\r":case"\u2028":case"\u2029":return oe(),void(P="default");case void 0:return oe(),le("eof")}oe()},value:function(){switch(q){case"{":case"[":return le("punctuator",oe());case"n":return oe(),ae("ull"),le("null",null);case"t":return oe(),ae("rue"),le("boolean",!0);case"f":return oe(),ae("alse"),le("boolean",!1);case"-":case"+":return"-"===oe()&&(_=-1),void(P="sign");case".":return J=oe(),void(P="decimalPointLeading");case"0":return J=oe(),void(P="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return J=oe(),void(P="decimalInteger");case"I":return oe(),ae("nfinity"),le("numeric",1/0);case"N":return oe(),ae("aN"),le("numeric",NaN);case'"':case"'":return $='"'===oe(),J="",void(P="string")}throw ge(oe())},identifierNameStartEscape:function(){if("u"!==q)throw ge(oe());oe();var e=we();switch(e){case"$":case"_":break;default:if(!te.isIdStartChar(e))throw Ie()}J+=e,P="identifierName"},identifierName:function(){switch(q){case"$":case"_":case"":case"":return void(J+=oe());case"\\":return oe(),void(P="identifierNameEscape")}if(!te.isIdContinueChar(q))return le("identifier",J);J+=oe()},identifierNameEscape:function(){if("u"!==q)throw ge(oe());oe();var e=we();switch(e){case"$":case"_":case"":case"":break;default:if(!te.isIdContinueChar(e))throw Ie()}J+=e,P="identifierName"},sign:function(){switch(q){case".":return J=oe(),void(P="decimalPointLeading");case"0":return J=oe(),void(P="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return J=oe(),void(P="decimalInteger");case"I":return oe(),ae("nfinity"),le("numeric",_*(1/0));case"N":return oe(),ae("aN"),le("numeric",NaN)}throw ge(oe())},zero:function(){switch(q){case".":return J+=oe(),void(P="decimalPoint");case"e":case"E":return J+=oe(),void(P="decimalExponent");case"x":case"X":return J+=oe(),void(P="hexadecimal")}return le("numeric",0*_)},decimalInteger:function(){switch(q){case".":return J+=oe(),void(P="decimalPoint");case"e":case"E":return J+=oe(),void(P="decimalExponent")}if(!te.isDigit(q))return le("numeric",_*Number(J));J+=oe()},decimalPointLeading:function(){if(te.isDigit(q))return J+=oe(),void(P="decimalFraction");throw ge(oe())},decimalPoint:function(){switch(q){case"e":case"E":return J+=oe(),void(P="decimalExponent")}return te.isDigit(q)?(J+=oe(),void(P="decimalFraction")):le("numeric",_*Number(J))},decimalFraction:function(){switch(q){case"e":case"E":return J+=oe(),void(P="decimalExponent")}if(!te.isDigit(q))return le("numeric",_*Number(J));J+=oe()},decimalExponent:function(){switch(q){case"+":case"-":return J+=oe(),void(P="decimalExponentSign")}if(te.isDigit(q))return J+=oe(),void(P="decimalExponentInteger");throw ge(oe())},decimalExponentSign:function(){if(te.isDigit(q))return J+=oe(),void(P="decimalExponentInteger");throw ge(oe())},decimalExponentInteger:function(){if(!te.isDigit(q))return le("numeric",_*Number(J));J+=oe()},hexadecimal:function(){if(te.isHexDigit(q))return J+=oe(),void(P="hexadecimalInteger");throw ge(oe())},hexadecimalInteger:function(){if(!te.isHexDigit(q))return le("numeric",_*Number(J));J+=oe()},string:function(){switch(q){case"\\":return oe(),void(J+=ce());case'"':return $?(oe(),le("string",J)):void(J+=oe());case"'":return $?void(J+=oe()):(oe(),le("string",J));case"\n":case"\r":throw ge(oe());case"\u2028":case"\u2029":fe(q);break;case void 0:throw ge(oe())}J+=oe()},start:function(){switch(q){case"{":case"[":return le("punctuator",oe())}P="value"},beforePropertyName:function(){switch(q){case"$":case"_":return J=oe(),void(P="identifierName");case"\\":return oe(),void(P="identifierNameStartEscape");case"}":return le("punctuator",oe());case'"':case"'":return $='"'===oe(),void(P="string")}if(te.isIdStartChar(q))return J+=oe(),void(P="identifierName");throw ge(oe())},afterPropertyName:function(){if(":"===q)return le("punctuator",oe());throw ge(oe())},beforePropertyValue:function(){P="value"},afterPropertyValue:function(){switch(q){case",":case"}":return le("punctuator",oe())}throw ge(oe())},beforeArrayValue:function(){if("]"===q)return le("punctuator",oe());P="value"},afterArrayValue:function(){switch(q){case",":case"]":return le("punctuator",oe())}throw ge(oe())},end:function(){throw ge(oe())}};function le(e,t){return{type:e,value:t,line:U,column:B}}function ae(e){for(var t=0,r=e;t<r.length;t+=1){var n=r[t];if(ie()!==n)throw ge(oe());oe()}}function ce(){switch(ie()){case"b":return oe(),"\b";case"f":return oe(),"\f";case"n":return oe(),"\n";case"r":return oe(),"\r";case"t":return oe(),"\t";case"v":return oe(),"\v";case"0":if(oe(),te.isDigit(ie()))throw ge(oe());return"\0";case"x":return oe(),de();case"u":return oe(),we();case"\n":case"\u2028":case"\u2029":return oe(),"";case"\r":return oe(),"\n"===ie()&&oe(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw ge(oe())}return oe()}function de(){var e="",t=ie();if(!te.isHexDigit(t))throw ge(oe());if(e+=oe(),t=ie(),!te.isHexDigit(t))throw ge(oe());return e+=oe(),String.fromCodePoint(parseInt(e,16))}function we(){for(var e="",t=4;t-- >0;){var r=ie();if(!te.isHexDigit(r))throw ge(oe());e+=oe()}return String.fromCodePoint(parseInt(e,16))}var De={start:function(){if("eof"===R.type)throw me();ye()},beforePropertyName:function(){switch(R.type){case"identifier":case"string":return Q=R.value,void(F="afterPropertyName");case"punctuator":return void Me();case"eof":throw me()}},afterPropertyName:function(){if("eof"===R.type)throw me();F="beforePropertyValue"},beforePropertyValue:function(){if("eof"===R.type)throw me();ye()},beforeArrayValue:function(){if("eof"===R.type)throw me();"punctuator"!==R.type||"]"!==R.value?ye():Me()},afterPropertyValue:function(){if("eof"===R.type)throw me();switch(R.value){case",":return void(F="beforePropertyName");case"}":Me()}},afterArrayValue:function(){if("eof"===R.type)throw me();switch(R.value){case",":return void(F="beforeArrayValue");case"]":Me()}},end:function(){}};function ye(){var e;switch(R.type){case"punctuator":switch(R.value){case"{":e={};break;case"[":e=[]}break;case"null":case"boolean":case"numeric":case"string":e=R.value}if(void 0===O)O=e;else{var t=V[V.length-1];Array.isArray(t)?t.push(e):Object.defineProperty(t,Q,{value:e,writable:!0,enumerable:!0,configurable:!0})}if(null!==e&&"object"==typeof e)V.push(e),F=Array.isArray(e)?"beforeArrayValue":"beforePropertyName";else{var r=V[V.length-1];F=null==r?"end":Array.isArray(r)?"afterArrayValue":"afterPropertyValue"}}function Me(){V.pop();var e=V[V.length-1];F=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}function ge(e){return Ce(void 0===e?"JSON5: invalid end of input at "+U+":"+B:"JSON5: invalid character '"+pe(e)+"' at "+U+":"+B)}function me(){return Ce("JSON5: invalid end of input at "+U+":"+B)}function Ie(){return Ce("JSON5: invalid identifier character at "+U+":"+(B-=5))}function fe(e){console.warn("JSON5: '"+pe(e)+"' in strings is not valid ECMAScript; consider escaping")}function pe(e){var t={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(t[e])return t[e];if(e<" "){var r=e.charCodeAt(0).toString(16);return"\\x"+("00"+r).substring(r.length)}return e}function Ce(e){var t=new SyntaxError(e);return t.lineNumber=U,t.columnNumber=B,t}var he=function(e,t,r){var n,s,i,o=[],u="",l="";if(null==t||"object"!=typeof t||Array.isArray(t)||(r=t.space,i=t.quote,t=t.replacer),"function"==typeof t)s=t;else if(Array.isArray(t)){n=[];for(var a=0,c=t;a<c.length;a+=1){var d=c[a],w=void 0;"string"==typeof d?w=d:("number"==typeof d||d instanceof String||d instanceof Number)&&(w=String(d)),void 0!==w&&n.indexOf(w)<0&&n.push(w)}}return r instanceof Number?r=Number(r):r instanceof String&&(r=String(r)),"number"==typeof r?r>0&&(r=Math.min(10,Math.floor(r)),l=" ".substr(0,r)):"string"==typeof r&&(l=r.substr(0,10)),D("",{"":e});function D(e,t){var r=t[e];switch(null!=r&&("function"==typeof r.toJSON5?r=r.toJSON5(e):"function"==typeof r.toJSON&&(r=r.toJSON(e))),s&&(r=s.call(t,e,r)),r instanceof Number?r=Number(r):r instanceof String?r=String(r):r instanceof Boolean&&(r=r.valueOf()),r){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof r?y(r):"number"==typeof r?String(r):"object"==typeof r?Array.isArray(r)?m(r):M(r):void 0}function y(e){for(var t={"'":.1,'"':.2},r={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},n="",s=0;s<e.length;s++){var o=e[s];switch(o){case"'":case'"':t[o]++,n+=o;continue;case"\0":if(te.isDigit(e[s+1])){n+="\\x00";continue}}if(r[o])n+=r[o];else if(o<" "){var u=o.charCodeAt(0).toString(16);n+="\\x"+("00"+u).substring(u.length)}else n+=o}var l=i||Object.keys(t).reduce(function(e,r){return t[e]<t[r]?e:r});return l+(n=n.replace(new RegExp(l,"g"),r[l]))+l}function M(e){if(o.indexOf(e)>=0)throw TypeError("Converting circular structure to JSON5");o.push(e);var t=u;u+=l;for(var r,s,i=[],a=0,c=n||Object.keys(e);a<c.length;a+=1){var d=c[a],w=D(d,e);if(void 0!==w){var y=g(d)+":";""!==l&&(y+=" "),y+=w,i.push(y)}}if(0===i.length)r="{}";else if(""===l)r="{"+(s=i.join(","))+"}";else{var M=",\n"+u;s=i.join(M),r="{\n"+u+s+",\n"+t+"}"}return o.pop(),u=t,r}function g(e){if(0===e.length)return y(e);var t=String.fromCodePoint(e.codePointAt(0));if(!te.isIdStartChar(t))return y(e);for(var r=t.length;r<e.length;r++)if(!te.isIdContinueChar(String.fromCodePoint(e.codePointAt(r))))return y(e);return e}function m(e){if(o.indexOf(e)>=0)throw TypeError("Converting circular structure to JSON5");o.push(e);var t=u;u+=l;for(var r,n=[],s=0;s<e.length;s++){var i=D(String(s),e);n.push(void 0!==i?i:"null")}if(0===n.length)r="[]";else if(""===l)r="["+n.join(",")+"]";else{var a=",\n"+u,c=n.join(a);r="[\n"+u+c+",\n"+t+"]"}return o.pop(),u=t,r}},Le={parse:re,stringify:he},be=Le,Ne=be;return Ne}()}(wa);var Da=nn(wa.exports);function ya(e,t){var r=[];return Rt(e,function(e,n,s){t(e,n,s)&&r.push(e)}),r}function Ma(e,t){return(D(e)?Ee:ya)(e,Vt(t))}var ga=m?m.isConcatSpreadable:void 0;function ma(e){return D(e)||We(e)||!!(ga&&e&&e[ga])}function Ia(e,t,r,n,s){var i=-1,o=e.length;for(r||(r=ma),s||(s=[]);++i<o;){var u=e[i];t>0&&r(u)?t>1?Ia(u,t-1,r,n,s):Ae(s,u):n||(s[s.length]=u)}return s}function fa(e,t){if(e!==t){var r=void 0!==e,n=null===e,s=e==e,i=A(e),o=void 0!==t,u=null===t,l=t==t,a=A(t);if(!u&&!a&&!i&&e>t||i&&o&&l&&!u&&!a||n&&o&&l||!r&&l||!s)return 1;if(!n&&!i&&!a&&e<t||a&&r&&s&&!n&&!i||u&&r&&s||!o&&s||!l)return-1}return 0}function pa(e,t,r){t=t.length?ue(t,function(e){return D(e)?function(t){return ye(t,1===e.length?e[0]:e)}:e}):[Kt];var n=-1;return t=ue(t,Qe(Vt)),function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}(Qt(e,function(e,r,s){return{criteria:ue(t,function(t){return t(e)}),index:++n,value:e}}),function(e,t){return function(e,t,r){for(var n=-1,s=e.criteria,i=t.criteria,o=s.length,u=r.length;++n<o;){var l=fa(s[n],i[n]);if(l)return n>=u?l:l*("desc"==r[n]?-1:1)}return e.index-t.index}(e,t,r)})}var Ca=Ri(function(e,t){if(null==e)return[];var r=t.length;return r>1&&Qi(e,t[0],t[1])?t=[]:r>2&&Qi(t[0],t[1],t[2])&&(t=[t[0]]),pa(e,Ia(t,1),[])});function ha(e,t){if(Array.isArray(e))for(let r=0,n=e.length;r<n&&!1!==t(e[r],r,e);r++);else if(null!==e&&"object"==typeof e){let r=Object.keys(e);for(let n=0;n<r.length;n++){let s=r[n];if(!1===t(e[s],s,e))break}}return e}function La(e,t,r){return null!==e&&"object"==typeof e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:r}function ba(e){try{return`${e}`}catch(e){return null}}function Na(e,t){let r=[];if(!Array.isArray(e))return r;for(let n=0;n<e.length;n++){let s=e[n];(null==s||void 0===s.name?"":s.name)===t&&r.push(s)}return r}function Aa(e,t,r,n){let s=e=>{let t=Object.create(null);try{t=Da.parse(e)}catch(t){console.log("c",e),console.log(t)}let r=[];try{r=function(e){let t=[],r=Array.isArray(e);return ha(e,(e,n)=>{let s={name:n};_t(e)?(s={...s,...e},r||(s.name=n)):s={...s,isActive:e},t.push(s)}),t}(t)}catch(r){console.log("c",e),console.log("kp",t),console.log(r)}return r},i=(e,t)=>{let r=Object.create(null);return _r([e,t],n=>{ha(n,(n,s)=>{r[s]="y"===La(e,s)&&"y"===La(t,s)?"y":"n"})}),r},o=e=>{if(0===Ms(e))return Object.create(null);let t=e[0];for(let r=1;r<e.length;r++)t=i(t,e[r]);return t},u=e=>{let t=Object.create(null);return _r(e,e=>{let r=ba(e.name);if(null===r)return!0;t[r]=dn(t,r)?"y"===t[r]&&"y"===e.isActive?"y":"n":e.isActive}),t},l=e=>{let t=[];return ha(e,(e,r)=>{t.push({name:r,isActive:e})}),t},a=e=>{let t=[];if(_r(e,e=>{let r=Me(e,"mode",""),n="OR"===r?"OR":"AND";let s=!function(e){return"OR"===e||"AND"===e}(r),i=u(Me(e,"rules",[]));t.push({mode:n,lim:s,kpRule:i})}),0===Ms(Ma(t,{lim:!1})))return[];let r=Ma(t,{mode:"OR"}),n=Ma(t,{mode:"AND"}),s=Ma(n,{lim:!1}),o=null;return Ms(r)>0?o=Me(r,"0.kpRule"):Ms(s)>0&&(o=Me(s,"0.kpRule")),_r(r,e=>{let t=Me(e,"kpRule",{});o=((e,t)=>{let r=Object.create(null);return _r([e,t],e=>{ha(e,(e,t)=>{dn(r,t)||(r[t]="n"),"y"===r[t]||"y"===e?r[t]="y":r[t]="n"})}),r})(o,t)}),_r(n,(e,t)=>{let r=Me(e,"kpRule",{});o=i(o,r)}),l(o)},c=Me(e,"cgrups",""),d=Ma(s(c),{isActive:"y"}),w=[],D=[];{let e=[];_r(d,n=>{let i=Na(t,n.name),c=Ot(i,e=>(e=>{let t=Me(e,"cpemis",""),n=Ma(s(t),{isActive:"y"}),i=[],c=[];return _r(n,e=>{let t=Na(r,e.name),n=Ot(t,e=>s(Me(e,"crules",""))),a=Ot(n,e=>u(e));i.push({mode:e.mode,rules:l(o(a))}),Ms(t)>0&&c.push({...e,data:{...t[0],_rules:n[0]}})}),{rules:a(i),pemisTree:c}})(e)),d=Ot(c,e=>u(e.rules));e.push({mode:n.mode,rules:l(o(d))}),Ms(i)>0&&w.push({...n,data:{...i[0],_pemis:c[0].pemisTree}})}),D=a(e)}{let e=Object.create(null);_r(D,t=>{e[t.name]=t.isActive});let t=[];_r(n,r=>{t.push({name:r.id,isActive:La(e,r.id,"n")})}),D=t}return{grups:w,rules:D}}function xa(e,t){return Yt(e,t)}function Ea(e,t){function r(e){return Lr(e)?e:[e]}if(xr(e))return!1;if(0===(e=r(e)).length)return!1;if(xr(e))return!1;if(0===(t=r(t)).length)return!1;for(let r=0;r<e.length;r++)for(let n=0;n<t.length;n++)if(xa(e[r],t[n]))return!0;return!1}function Ta(e,t,r,n={}){let s=Me(n,"withInfor");wr(s)||(s=!0);let i={del:[],add:[],same:[],diff:[]};if(!er(r))return console.log("invalid key"),s&&(i.infor={}),i;Lr(e)||(e=[e]),Lr(t)||(t=[t]),e=Ma(e,e=>dn(e,r)),t=Ma(t,e=>dn(e,r));let o=new Map(t.map(e=>[e[r],e]));for(let t of e){let e=o.get(t[r]);if(e){JSON.stringify(t)===JSON.stringify(e)?i.same.push(e):i.diff.push(e),o.delete(t[r])}else i.del.push(t)}if(i.add=Array.from(o.values()),s){let e={};for(let t of i.del)e[t[r]]="del";for(let t of i.add)e[t[r]]="add";for(let t of i.diff)e[t[r]]="diff";for(let t of i.same)e[t[r]]="same";i.infor=e}return i}let Sa={csIng:{eng:"Connecting...",cht:"連線中..."},csLogin:{eng:"Logged in",cht:"已登入"},csLogout:{eng:"Logged out",cht:"已登出"},csErrConn:{eng:"Unable to connect",cht:"無法連線"},csErrLogin:{eng:"Login denied",cht:"拒絕登入"},aggridLanguage:{eng:"en",cht:"zh-tw"},systemMessage:{eng:"System message",cht:"系統確認訊息"},ok:{eng:"OK",cht:"確認"},no:{eng:"No",cht:"取消"},yes:{eng:"Yes",cht:"確定"},empty:{eng:"Empty",cht:"無"},waitingData:{eng:"Waiting data...",cht:"等待數據中..."},saveChanges:{eng:"Save changes",cht:"儲存變更"},id:{eng:"Id",cht:"主鍵"},from:{eng:"From",cht:"來源"},save:{eng:"Save",cht:"儲存"},close:{eng:"Close",cht:"關閉"},delete:{eng:"Delete",cht:"刪除"},screenFull:{eng:"Max size",cht:"最大化尺寸"},screenNormal:{eng:"Normal size",cht:"預設尺寸"},checkAllYes:{eng:"Check all",cht:"全選使用"},checkAllNo:{eng:"Uncheck all",cht:"全不選使用"},checkAllInv:{eng:"Reverse all",cht:"全反選使用"},operEnable:{eng:"Enable",cht:"是否使用"},operPemiMode:{eng:"Operator",cht:"合併權限模式"},operGrupMode:{eng:"Operator",cht:"合併權限群組模式"},processing:{eng:"Processing...",cht:"處理中請稍後..."},anUnexpectedErrorOccurred:{eng:"An unexpected error occurred, please contact the administrator",cht:"發生非預期錯誤,請洽管理員"},cannotConnectServer:{eng:"Cannot connect to server",cht:"無法連線至伺服器"},saveRowFieldInvalid:{eng:"Invalid field value in saved data",cht:"儲存資料的欄位值無效"},saveRowFieldDuplicate:{eng:"Duplicate field value in saved data",cht:"儲存資料的欄位值重複"},nameDuplicate:{eng:"Not saved: the name is duplicated. Group names and permission names must be unique. Nothing was changed.",cht:"未儲存:名稱重複。群組名稱與權限名稱不得重複。資料未變更。"},authLossyBlocked:{eng:"Not saved: the authorization settings for {names} contain entries the editor cannot write without changing access (the same name set to both OR and AND, or an entry without a usable name). Nothing was changed. Please correct the source data first.",cht:"未儲存:{names} 的授權設定含有編輯器無法在不改變授權下寫出的項目(同一名稱同時以 OR 與 AND 設定,或項目沒有可用的名稱)。資料未變更,請先修正資料來源。"},warnKindGrup:{eng:"permission group",cht:"權限群組"},warnKindPemi:{eng:"permission",cht:"權限"},warnRefDangling:{eng:"Not found in the {kind} list: {names}. Each is still counted as an entry with no authorization (an OR entry adds nothing; an AND entry leaves nothing granted). Restore it or remove it.",cht:"在{kind}清單中找不到:{names}。仍視為一個沒有任何授權的項目(OR 項目不增加授權;AND 項目使結果為空)。請還原或移除。"},warnRefAmbiguous:{eng:"Matches several {kind}s with the same name: {names}. Only the authorization they all share is used (intersection). Rename or delete the duplicates.",cht:"對到多筆同名的{kind}:{names}。僅採用它們共同擁有的授權(交集)。請將同名項目改名或刪除。"},warnRefModeInvalid:{eng:"The merge mode is missing or invalid: {names}. It is treated as AND, but only as a restriction: it never grants access on its own.",cht:"合併模式缺漏或不合法:{names}。系統視為 AND,且僅作為限制,不會單獨授予任何授權。"},warnRefBothModes:{eng:"Set as both OR and AND: {names}. The editor cannot save this without changing access, so saving is refused until the source data is fixed.",cht:"同時以 OR 與 AND 設定:{names}。編輯器無法在不改變授權下儲存,於資料來源修正前將拒絕儲存。"},warnRefEmptyName:{eng:"An entry has an empty name. It is kept as it is and matches only a {kind} whose name is empty.",cht:"有項目的名稱為空字串。照原樣保留,且僅與名稱為空字串的{kind}相符。"},warnRefNoName:{eng:"An entry has no usable name ({names}). The editor cannot keep it, so saving is refused until the source data is fixed.",cht:"有項目沒有可用的名稱({names})。編輯器無法保留,於資料來源修正前將拒絕儲存。"},warnDataUnparsable:{eng:"The authorization data cannot be parsed (invalid format). It is treated as granting nothing. Correct the source data or set it again and save.",cht:"授權資料的格式無法解析,系統視為沒有任何授權。請修正資料來源,或重新設定後儲存。"},warnRuleConflict:{eng:"Listed more than once, with both checked and unchecked: {names}. It is treated as unchecked (n).",cht:"重複列出且有勾與沒勾並存:{names}。系統視為沒勾選(n)。"},warnNameHistDup:{eng:"This name is shared by {n} rows (existing duplicates, not caused by this edit). Anything that refers to it by name uses only what the rows share. Rename or delete the extra rows.",cht:"此名稱由 {n} 筆資料共用(既有的重複,並非本次編輯造成)。以名稱引用它的授權僅採用各筆共同的部分。請將多餘的資料改名或刪除。"},warnDupRowsInconsistent:{eng:"Not saved: rows with the same name have different settings ({names}). Nothing was changed. Please make them identical, or fix the duplicate names first.",cht:"未儲存:同名的列設定不一致({names})。資料未變更,請先使其一致,或先修正同名資料。"},warnUserNameHistDup:{eng:"This name is shared by {n} users (existing duplicates, not caused by this edit). This does not block saving. If name is the sign-in key, signing in with it is refused until the duplicates are fixed.",cht:"此名稱由 {n} 位使用者共用(既有的重複,並非本次編輯造成),不影響儲存。若以名稱作為登入對應鍵,在重複修正前該名稱將無法登入。"},warnUserEmailHistDup:{eng:"This email is shared by {n} users (existing duplicates, not caused by this edit). This does not block saving. If email is the sign-in key, signing in with it is refused until the duplicates are fixed.",cht:"此 Email 由 {n} 位使用者共用(既有的重複,並非本次編輯造成),不影響儲存。若以 Email 作為登入對應鍵,在重複修正前該 Email 將無法登入。"},warnUserNameHistEmpty:{eng:"This user has no valid name (existing data, not caused by this edit). This does not block saving.",cht:"此使用者尚未給予有效名稱(既有資料,並非本次編輯造成),不影響儲存。"},warnUserEmailHistEmpty:{eng:"This user has no email (existing data, not caused by this edit). This does not block saving. If email is the sign-in key, this user cannot sign in.",cht:"此使用者尚未給予 Email(既有資料,並非本次編輯造成),不影響儲存。若以 Email 作為登入對應鍵,此使用者將無法登入。"},warnUserEmailHistInvalid:{eng:"The email format of this user is invalid (existing data, not caused by this edit). This does not block saving.",cht:"此使用者的 Email 格式錯誤(既有資料,並非本次編輯造成),不影響儲存。"},confirmDelRefsGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用。確定刪除?"},confirmDelRefsPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用。確定刪除?"},confirmDelRefsAndGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). For the {m} user(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用;其中 {m} 位以 AND 引用,移除後其限制解除,授權可能變多。確定刪除?"},confirmDelRefsAndPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). For the {m} group(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用;其中 {m} 個以 AND 引用,移除後其限制解除,授權可能變多。確定刪除?"},confirmDelDupRefsGrup:{eng:"{n} user(s) refer to a group name that is shared by several groups. If you delete one of them, those users' authorization may increase. Delete anyway?",cht:"有 {n} 位使用者引用的群組名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelDupRefsPemi:{eng:"{n} group(s) refer to a permission name that is shared by several permissions. If you delete one of them, the authorization of those groups may increase. Delete anyway?",cht:"有 {n} 個群組引用的權限名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsDupGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). Also, {w} user(s) refer to a group name that is shared by several groups; if you delete one of them, those users' authorization may increase. Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用;另有 {w} 位使用者引用的群組名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsDupPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). Also, {w} group(s) refer to a permission name that is shared by several permissions; if you delete one of them, the authorization of those groups may increase. Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用;另有 {w} 個群組引用的權限名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsAndDupGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). For the {m} user(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Also, {w} user(s) refer to a group name that is shared by several groups; if you delete one of them, those users' authorization may increase. Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用,其中 {m} 位以 AND 引用,移除後其限制解除,授權可能變多;另有 {w} 位使用者引用的群組名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsAndDupPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). For the {m} group(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Also, {w} group(s) refer to a permission name that is shared by several permissions; if you delete one of them, the authorization of those groups may increase. Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用,其中 {m} 個以 AND 引用,移除後其限制解除,授權可能變多;另有 {w} 個群組引用的權限名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmSaveRenameRefsGrup:{eng:"After saving, the group references of {n} user(s) will be updated to the new names of these renamed group(s): {list}. Continue?",cht:"儲存後將一併更新 {n} 位使用者對下列已改名群組的引用:{list}。是否繼續?"},confirmSaveRenameRefsExtGrup:{eng:"After saving, the group references of {n} user(s) will be updated to the new names of these renamed group(s): {list}. The source of {e} of them is an external application; their references may be overwritten by external data at the next external sync. Continue?",cht:"儲存後將一併更新 {n} 位使用者對下列已改名群組的引用:{list}。其中 {e} 位來源為外部應用,下次外部同步時可能被外部資料覆寫。是否繼續?"},confirmSaveRenameRefsPemi:{eng:"After saving, the permission references of {n} group(s) will be updated to the new names of these renamed permission(s): {list}. Continue?",cht:"儲存後將一併更新 {n} 個群組對下列已改名權限的引用:{list}。是否繼續?"},confirmSaveRenameRefsExtPemi:{eng:"After saving, the permission references of {n} group(s) will be updated to the new names of these renamed permission(s): {list}. The source of {e} of them is an external application; their references may be overwritten by external data at the next external sync. Continue?",cht:"儲存後將一併更新 {n} 個群組對下列已改名權限的引用:{list}。其中 {e} 個來源為外部應用,下次外部同步時可能被外部資料覆寫。是否繼續?"},confirmSaveDelRefsTarget:{eng:"The settings for the following target(s) (deleted or renamed) will be removed from the rules of {n} permission(s): {list}. Save anyway?",cht:"將自 {n} 個權限的規則移除對下列管控對象的設定(已刪除或已改名):{list}。確定儲存?"},cascadeListMore:{eng:"… ({n} in total)",cht:"…等 {n} 個"},grupSaveGrupsSuccessCascade:{eng:"Save permission groups successfully. The group references of {n} user(s) were updated to the new name(s).",cht:"儲存權限群組數據成功,已將 {n} 位使用者對已改名群組的引用一併更新為新名稱。"},pemiSavePemisSuccessCascade:{eng:"Save permissions successfully. The permission references of {n} group(s) were updated to the new name(s).",cht:"儲存權限數據成功,已將 {n} 個群組對已改名權限的引用一併更新為新名稱。"},relationRowsStale:{eng:"Not saved: the list changed while this dialog was open (removed or renamed: {names}). Nothing was changed. Please close this dialog, reload the page and try again.",cht:"未儲存:此對話框開啟期間清單已有異動(已刪除或改名:{names})。資料未變更,請關閉對話框並重新整理頁面後再操作。"},externalRowLocked:{eng:'Synchronized from external source "{from}". Read-only here.',cht:"由外部來源「{from}」同步,於此為唯讀。"},externalRowsNotice:{eng:"{n} row(s) are synchronized from an external source. Their identity fields are read-only and they cannot be deleted here; only their assignment settings can be changed.",cht:"有 {n} 筆資料由外部來源同步。其身分欄位於此為唯讀且不可刪除,僅可修改其授權指派設定。"},externalRowsNoticeTarget:{eng:"{n} row(s) are synchronized from an external source. They are read-only and cannot be deleted here.",cht:"有 {n} 筆資料由外部來源同步,於此為唯讀且不可刪除。"},syncWarnIdRenumber:{eng:'The external source "{from}" appears to have renumbered ids ({n} item(s) now carry a name that previously belonged to an item with a different id). Each synchronization removes the old items and cleans up the references to them, which may erase the assignments made here. Please ask the source to keep ids stable or to omit ids.',cht:"外部來源「{from}」疑似重編 id(有 {n} 筆項目的名稱,先前屬於不同 id 之項目)。每次同步會移除舊項目並連帶清理其引用,可能抹掉在此做的指派。請來源端保持 id 穩定或不帶 id。"},externalRowDelBlocked:{eng:"{n} selected row(s) are synchronized from an external source and cannot be deleted here. They were skipped.",cht:"所選資料中有 {n} 筆由外部來源同步,無法在此刪除,已略過。"},nameUsedByExternal:{eng:'External source "{from}" already uses the name "{name}".',cht:"外部來源「{from}」已使用此名稱「{name}」。"},confirmAddRefsGrup:{eng:'Adding the group(s) "{list}": {n} user(s) already refer to the name, so after saving they will get (or be limited by) the permissions of the new group(s). Add anyway?',cht:"新增群組「{list}」後,將有 {n} 位使用者取得或受此群組限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsAndGrup:{eng:'Adding the group(s) "{list}": {n} user(s) already refer to the name, so after saving they will get (or be limited by) the permissions of the new group(s); {m} of them refer to it with AND. Add anyway?',cht:"新增群組「{list}」後,將有 {n} 位使用者(其中 {m} 位以 AND 引用)取得或受此群組限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsPemi:{eng:'Adding the permission(s) "{list}": {n} group(s) already refer to the name, so after saving they will get (or be limited by) the new permission(s). Add anyway?',cht:"新增權限「{list}」後,將有 {n} 個群組取得或受此權限限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsAndPemi:{eng:'Adding the permission(s) "{list}": {n} group(s) already refer to the name, so after saving they will get (or be limited by) the new permission(s); {m} of them refer to it with AND. Add anyway?',cht:"新增權限「{list}」後,將有 {n} 個群組(其中 {m} 個以 AND 引用)取得或受此權限限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsTarget:{eng:'Adding the target(s) "{list}": the rules of {n} permission(s) already contain settings for the name, so after saving those settings will take effect for the new target(s). Add anyway?',cht:"新增管控對象「{list}」後,將有 {n} 個權限的規則取得此管控對象的設定(其規則原已寫有此名稱)。確定新增?"},saveInProgress:{eng:"The previous save is still in progress. Please do not submit again.",cht:"上一次儲存仍在處理中,請勿重複送出"},saveNewRowExists:{eng:"The newly added data has already been saved. Please reload the page before making changes.",cht:"新增之資料已儲存過,請重新整理頁面後再操作"},saveTabItemsSuccess:{eng:"Saved successfully",cht:"儲存成功"},htmlMarkupNotAllowed:{eng:'The input contains HTML markup that is not allowed (such as "<" followed by a letter). Please remove it and try again.',cht:"輸入內容含有不允許的 HTML 標記(如「<」後接英文字母),請移除後再試一次。"},saveWriteFail:{eng:"Not all changes were written, and some may have taken effect. Please reload the page and check before making changes.",cht:"資料寫入未全部完成,部分變更可能已生效,請重新整理頁面確認後再操作"},renameCascadeDupGroup:{eng:"Not saved: a renamed item shares its old name with other existing items, so the references to it cannot be updated safely. Nothing was changed. Please delete or rename the duplicates first (save them separately), then rename it.",cht:"未儲存:被改名的項目與其他既有項目同名,無法安全地連帶更新引用。資料未變更。請先清理同名項目(分次儲存)後再改名。"},renameCascadeNameInUse:{eng:"Not saved: a new name is still referenced by settings of items that no longer exist, so the renamed item would take over those references. Nothing was changed. Please clean up the dangling references first, or choose another name.",cht:"未儲存:新名稱仍被已不存在之項目的授權設定引用,改名後會被這些引用接管。資料未變更。請先清理懸空引用,或改用其他名稱。"},renameCascadeConflict:{eng:"Not saved: a setting contains both the old and the new name, so its references cannot be updated automatically. Nothing was changed.",cht:"未儲存:有授權設定同時含有舊名稱與新名稱,無法自動更新引用。資料未變更。"},renameCascadeUnsupported:{eng:"Not saved: a setting that refers to the renamed or deleted item contains a value that cannot be safely rewritten (such as a non-finite number), so its references cannot be updated automatically. Nothing was changed. Please fix that setting first.",cht:"未儲存:引用此項目之授權設定含有無法安全改寫的內容(如非有限數值),無法自動更新引用。資料未變更,請先修正該授權設定。"},saveCascadePartial:{eng:"The related references may be out of sync with this change (the automatic restore failed). Please do not make further changes and contact the system administrator to run the reference audit.",cht:"相關的授權引用可能與本次變更不一致(自動還原失敗)。請勿再變更資料,並通知系統管理者執行引用稽核。"},saveFromNotAllowed:{eng:'Not saved: rows saved here must have an empty "From" value (rows with a source are managed by the external source). Nothing was changed.',cht:"未儲存:於此儲存之列其「來源」須為空白(有來源之列由外部來源管理)。資料未變更。"},saveExternalRowChanged:{eng:"Not saved: rows synchronized from an external source cannot be deleted here, and only their assignment settings can be changed. Nothing was changed. Please change them at the external source.",cht:"未儲存:由外部來源同步之列不可在此刪除,且僅能修改其授權指派設定。資料未變更,請至外部來源端處理。"},saveStale:{eng:"Not saved: the data changed (by someone else or by an external synchronization) after this page was loaded. Nothing was changed. Please reload the page and try again.",cht:"未儲存:載入此頁面後資料已被他人或外部同步更新。資料未變更,請重新整理頁面後再操作。"},staleDraftNotice:{eng:'The data was updated by someone else or by an external synchronization after you started editing. Your unsaved edits are kept here, but saving now will be rejected. Click "Reload" to get the latest data (your unsaved edits will be discarded).',cht:"資料已被他人或外部同步更新。您尚未儲存的編輯仍保留於此,但現在儲存將被拒絕。請按「重新載入」取得最新資料(未儲存的編輯將被捨棄)。"},staleDraftReload:{eng:"Reload",cht:"重新載入"},staleDraftNoticeDialog:{eng:"The data was updated by someone else or by an external synchronization after this window was opened. Saving from this window will be rejected. Please close this window and open it again to get the latest data.",cht:"資料已被他人或外部同步更新,本視窗內的資料已過期,儲存將被拒絕。請關閉本視窗後重新開啟,以取得最新資料。"},saveBaselineRequired:{eng:"Not saved: changing the assignment settings of rows synchronized from an external source requires the latest loaded data, which this request did not carry. Nothing was changed. Please reload the page and try again.",cht:"未儲存:修改外部來源同步列之授權指派設定須附載入時之資料版本,此次請求未附。資料未變更,請重新整理頁面後再操作。"},cannotGetUserId:{eng:"Cannot get the user id",cht:"無法取得使用者 Id"},cannotGetUserEmail:{eng:"Cannot get the email of user",cht:"無法取得使用者 Email"},cannotGetUserName:{eng:"Cannot get the name of user",cht:"無法取得使用者名稱"},cannotGetUserRole:{eng:"Cannot get the role of user",cht:"無法取得使用者角色"},cannotFindUserFromToken:{eng:"Cannot identify the user from token",cht:"無法由 token 識別使用者"},cannotGetUserProp:{eng:"Cannot get the property of user",cht:"無法取得使用者對應屬性"},cannotGetUserFromPerm:{eng:"Cannot find the user in permission system",cht:"無法於權限系統取得使用者"},ambiguousUserFromPerm:{eng:"Cannot identify the user in permission system: more than one active user matches",cht:"無法於權限系統確認使用者:有多位有效使用者符合"},userNoPermission:{eng:"User does not have permission",cht:"使用者權限不足"},invalidPayload:{eng:"Invalid payload in request",cht:"請求內容無效"},invalidFromInPayload:{eng:"Invalid from in payload",cht:"請求來源欄位無效"},invalidRowsInPayload:{eng:"Invalid rows in payload",cht:"請求資料列無效"},invalidFrom:{eng:"Invalid from",cht:"來源欄位無效"},invalidRows:{eng:"Invalid data format.",cht:"資料格式錯誤。"},cannotGetUserRules:{eng:"Cannot get rules of user",cht:"無法取得使用者權限規則"},tokenNoPermission:{eng:"Token does not have permission",cht:"權限不足"},userIdNoPermrules:{eng:"The user id does not have permission rules",cht:"此使用者沒有權限規則"},invalidKeyTable:{eng:"Invalid key table",cht:"資料表名稱無效"},cannotFindUserId:{eng:"Cannot find the user id",cht:"無法找到使用者 Id"},username:{eng:"Username",cht:"使用者姓名"},email:{eng:"Email",cht:"電子郵件"},name:{eng:"Name",cht:"名稱"},description:{eng:"Description",cht:"說明"},modeEdit:{eng:"Edit mode",cht:"編輯模式"},showTabCols:{eng:"Show columns",cht:"顯示欄位"},belongUsers:{eng:"Use users",cht:"管控所屬使用者"},belongGrups:{eng:"Use groups",cht:"管控所屬權限群組"},belongGrupsNames:{eng:"Use permission groups",cht:"所屬權限群組名稱"},belongPemisNames:{eng:"Use permissions",cht:"所屬權限名稱"},chipsShowAll:{eng:"Show all",cht:"展開全部"},chipsPopupTitle:{eng:"{title} ({n} in total)",cht:"{title}:共 {n} 項"},isAdmin:{eng:"Administrator",cht:"是否為系統管理員"},isActive:{eng:"Active",cht:"是否有效"},errInNames:{eng:"Name errors",cht:"名稱出現錯誤待修復"},errInIds:{eng:"ID errors",cht:"ID 出現錯誤待修復"},errInEmails:{eng:"Email errors",cht:"Email出現錯誤待修復"},menuTreeShow:{eng:"Show menu",cht:"顯示選單"},menuTreeHide:{eng:"Hide menu",cht:"隱藏選單"},menuUser:{eng:"User menu",cht:"使用者選單"},language:{eng:"Language",cht:"語系"},mmTargets:{eng:"Targets",cht:"管理對象"},mmTargetsMsg:{eng:"Targets generally refer to entities such as pages, data, etc., and can also include features or services.",cht:"對象泛指實體的頁面、數據等,亦可為的功能或服務。"},mmPemis:{eng:"Permissions",cht:"管理權限"},mmPemisMsg:{eng:"Permissions are primarily used to set rules for enabling or disabling various objects.",cht:"權限主要為用來設定各種對象之使用或禁用規則。"},mmGrups:{eng:"Permission groups",cht:"管理權限群組"},mmGrupsMsg:{eng:"Permission groups are primarily used to configure combinations of different permissions.",cht:"權限群組主要為用來設定組合各種權限。"},mmUsers:{eng:"Users",cht:"管理使用者"},mmUsersMsg:{eng:"Users are primarily for providing or extending user information and can be configured with combinations of various permission groups.",cht:"使用者主要為提供或擴充使用者資訊,並可設定組合各種權限群組。"},targetId:{eng:"Target",cht:"對象名稱"},targetIdEmpty:{eng:"Invalid name",cht:"尚未給予有效對象名稱"},targetIdDuplicate:{eng:"Duplicate target",cht:"對象名稱出現重複"},targetAddEmpty:{eng:"No target",cht:"尚未新增管理資料"},targetAdd:{eng:"Add target",cht:"新增對象"},targetAddNameNew:{eng:"New target",cht:"新對象"},targetAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},targetCopy:{eng:"Copy target",cht:"複製對象"},targetCopyNameNew:{eng:"copy",cht:"複製"},targetDeleteCheckTargets:{eng:"Delete target(s)",cht:"刪除勾選對象"},targetEnable:{eng:"Enable",cht:"是否使用"},targetSaveTargetsFail:{eng:"Failed to save targets",cht:"儲存對象數據失敗"},targetSaveTargetsSuccess:{eng:"Save targets successfully",cht:"儲存對象數據成功"},pemiName:{eng:"Name of permission",cht:"權限名稱"},pemiNameEmpty:{eng:"Invalid name of permission",cht:"尚未給予有效權限名稱"},pemiNameDuplicate:{eng:"Duplicate name of permission",cht:"權限名稱出現重複"},pemiAddEmpty:{eng:"No permission",cht:"尚未新增權限資料"},pemiAdd:{eng:"Add permission",cht:"新增權限"},pemiAddNameNew:{eng:"New permission",cht:"新權限"},pemiAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},pemiCopy:{eng:"Copy permission",cht:"複製權限"},pemiCopyNameNew:{eng:"copy",cht:"複製"},pemiDeleteCheckPemis:{eng:"Delete permission(s)",cht:"刪除勾選權限"},pemiCrules:{eng:"Rules of permission",cht:"管控對象"},pemiEditBlngGrupsNoPemiId:{eng:"Can not find the id of permission",cht:"無法找到權限Id"},pemiEditBlngGrupsNoPemiData:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},pemiEditCrules:{eng:"Edit rules of permission",cht:"編輯使用對象"},pemiEditCrulesForDisplay:{eng:"Rules of permission",cht:"展示使用對象"},pemiEditCrulesNoPemiId:{eng:"Can not find the id of permission",cht:"無法找到權限Id"},pemiEditCrulesNoPemiData:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},pemiRnderCrulesNoRule:{eng:"No rule",cht:"無使用任何對象"},pemiRnderCrulesHasNRule:{eng:"Has {n} rule(s){nms}",cht:"使用共 {n} 項對象{nms}"},pemiSavePemisFail:{eng:"Failed to save permissions",cht:"儲存權限數據失敗"},pemiSavePemisSuccess:{eng:"Save permissions successfully",cht:"儲存權限數據成功"},pemiBlngEditGrups:{eng:"Edit permission groups",cht:"編輯所屬權限群組"},pemiBlngEditGrupsForDisplay:{eng:"Permission groups",cht:"展示所屬權限群組"},pemiBlngRnderNoGrup:{eng:"No permission groups",cht:"無所屬權限群組"},pemiBlngRnderGrups:{eng:"Has {n} permission group(s){nms}",cht:"共被 {n} 個權限群組{nms}使用"},pemiBlngPemiNow:{eng:"Now permission",cht:"目前權限"},pemiBlngEditNoName:{eng:"Can not find the name of permission",cht:"無法找到權限名稱"},pemiBlngEditNoPemi:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},pemiBlngDeleteCheckPemis:{eng:"Delete permission(s)",cht:"刪除勾選權限"},cruleEditNoTargetId:{eng:"Can not find the id of target",cht:"無法找到對象Id"},cruleEditNoTargetData:{eng:"Can not find the data of target",cht:"無法找到對象資料"},cruleDeleteCheckTargets:{eng:"Delete target(s)",cht:"刪除勾選對象"},grupName:{eng:"Name of permission group",cht:"權限群組名稱"},grupNameEmpty:{eng:"Invalid name of permission group",cht:"尚未給予有效權限群組名稱"},grupNameDuplicate:{eng:"Duplicate name of permission group",cht:"權限群組名稱出現重複"},grupAddEmpty:{eng:"No permission group",cht:"尚未新增權限群組資料"},grupAdd:{eng:"Add permission group",cht:"新增權限群組"},grupAddNameNew:{eng:"New permission group",cht:"新權限群組"},grupAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},grupCopy:{eng:"Copy permission group",cht:"複製權限群組"},grupCopyNameNew:{eng:"copy",cht:"複製"},grupDeleteCheckGrups:{eng:"Delete permission group(s)",cht:"刪除勾選權限群組"},grupCpemis:{eng:"Permissions",cht:"管控使用權限"},grupEditBlngNoGrupId:{eng:"Can not find the id of permission group",cht:"無法找到權限群組Id"},grupEditBlngNoGrupData:{eng:"Can not find the data of permission group",cht:"無法找到權限群組資料"},grupEditCpemis:{eng:"Edit list of permission group",cht:"編輯使用權限"},grupEditCpemisForDisplay:{eng:"List of permission group",cht:"展示使用權限"},grupRnderCpemisNoPermission:{eng:"No permission",cht:"無使用任何權限"},grupRnderCpemisHasNPermissions:{eng:"Has {n} permission(s){nms}",cht:"使用 {n} 項權限{nms}"},grupSaveGrupsEmpty:{eng:"No user",cht:"未有變更權限群組資料"},grupSaveGrupsFail:{eng:"Failed to save permission groups",cht:"儲存權限群組數據失敗"},grupSaveGrupsSuccess:{eng:"Save permission groups successfully",cht:"儲存權限群組數據成功"},grupBlngEditUsers:{eng:"Edit permission group of users",cht:"編輯所屬使用者"},grupBlngEditUsersForDisplay:{eng:"Permission group of users",cht:"展示所屬使用者"},grupBlngRnderNoUser:{eng:"No users",cht:"無所屬使用者"},grupBlngRnderUsers:{eng:"Has {n} user(s){nms}",cht:"共被 {n} 位使用者{nms}使用"},grupBlngGrupNow:{eng:"Now permission group",cht:"目前權限群組"},grupBlngEditNoGrupName:{eng:"Can not find the name of permission group",cht:"無法找到權限群組名稱"},grupBlngEditNoGrupData:{eng:"Can not find the data of permission group",cht:"無法找到權限群組資料"},grupBlngDeleteCheckGrups:{eng:"Delete permission group(s)",cht:"刪除勾選權限群組"},cpemiEditNoName:{eng:"Can not find the name of target",cht:"無法找到對象名稱"},cpemiEditNoTarget:{eng:"Can not find the data of target",cht:"無法找到對象資料"},cpemiDeleteCheckTargets:{eng:"Delete targets(s)",cht:"刪除勾選對象"},userName:{eng:"Name of user",cht:"使用者名稱"},userNameEmpty:{eng:"Invalid name of user",cht:"尚未給予有效使用者名稱"},userNameDuplicate:{eng:"Duplicate name of user",cht:"使用者名稱出現重複"},userEmailEmpty:{eng:"Empty email of user",cht:"尚未給予使用者Email"},userEmailError:{eng:"Invalid email of user",cht:"使用者Email格式錯誤"},userEmailDuplicate:{eng:"Duplicate email of user",cht:"使用者Email出現重複"},userAddEmpty:{eng:"No user",cht:"尚未新增使用者資料"},userAdd:{eng:"Add user",cht:"新增使用者"},userAddNameNew:{eng:"New user",cht:"新使用者"},userAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},userCopy:{eng:"Copy user",cht:"複製使用者"},userCopyNameNew:{eng:"copy",cht:"複製"},userDeleteCheckUsers:{eng:"Delete user(s)",cht:"刪除勾選使用者"},userCgrups:{eng:"Permission groups",cht:"管控使用權限群組"},userEditCgrups:{eng:"Edit list of user",cht:"編輯使用權限群組"},userEditCgrupsForDisplay:{eng:"Permission groups of user",cht:"展示使用權限群組"},userEditCgrupsNoUserId:{eng:"Can not find the id of user",cht:"無法找到使用者Id"},userEditCgrupsNoUserData:{eng:"Can not find the data of user",cht:"無法找到使用者資料"},userSaveUsersEmpty:{eng:"No user",cht:"未有變更使用者資料"},userSaveUsersFail:{eng:"Failed to save users",cht:"儲存使用者數據失敗"},userSaveUsersSuccess:{eng:"Save users successfully",cht:"儲存使用者數據成功"},userEditNoUserId:{eng:"Can not find the id of user",cht:"無法找到使用者Id"},userEditNoUserData:{eng:"Can not find the data of user",cht:"無法找到使用者數據"},userRnderCgrupsNoGroup:{eng:"No permission group",cht:"無使用任何權限群組"},userRnderCgrupsHasNGroups:{eng:"Has {n} permission group(s){nms}",cht:"使用 {n} 項權限群組{nms}"},cgrupEditNoName:{eng:"Can not find the name of permission",cht:"無法找到權限名稱"},cgrupEditNoPemi:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},cgrupDeleteCheckPemis:{eng:"Delete permission(s)",cht:"刪除勾選權限"},show:{eng:"Show",cht:"顯示"},active:{eng:"Active",cht:"啟用"},userId:{eng:"ID of the created user",cht:"創建使用者主鍵"},timeCreate:{eng:"Created time",cht:"創建時間"},userIdUpdate:{eng:"ID of the updated user",cht:"最新變更使用者主鍵"},timeUpdate:{eng:"Updated time",cht:"更新時間"},invalidUrl:{eng:"Invalid url",cht:"網址無效"},invalidTokenTar:{eng:"Invalid target token",cht:"目標 token 無效"},invalidTokenSelf:{eng:"Invalid self token",cht:"自身 token 無效"},invalidUserIdTar:{eng:"Invalid target user id",cht:"目標使用者 Id 無效"},noTokenInUrl:{eng:"Missing token in url",cht:"網址缺少 token"},noTokenUserIdInUrl:{eng:"Missing token or userId in url",cht:"網址缺少 token 或 userId"},cannotGetUserByUrl:{eng:"Cannot get user by url",cht:"無法由網址取得使用者"},cannotGetUserDataByUrl:{eng:"Cannot get user data by url",cht:"無法由網址取得使用者資料"},noUserDataByUrl:{eng:"No user data by url",cht:"該網址無使用者資料"},noUserDataAfterConvert:{eng:"No user data after permission conversion",cht:"權限轉換後無使用者資料"},mmStaInfor:{eng:"Statistics",cht:"統計資訊"},staEventTitle:{eng:"Event Frequency",cht:"事件發生頻率"},staTimeHr:{eng:"Hourly",cht:"每小時"},staTimeDay:{eng:"Daily",cht:"每日"},staTotal:{eng:"Total",cht:"全部加總"},staNoData:{eng:"No event data",cht:"尚無事件資料"},getDataError:{eng:"Failed to load data",cht:"資料載入失敗"},staTableTitle:{eng:"Event Statistics",cht:"事件統計表"},staColEvent:{eng:"Event",cht:"事件"},staColLast1Day:{eng:"Last 1 Day",cht:"最近1日"},staColLast8Hour:{eng:"Last 8 Hours",cht:"最近8小時"},staColLast4Hour:{eng:"Last 4 Hours",cht:"最近4小時"},staColLast1Hour:{eng:"Last 1 Hour",cht:"最近1小時"}},Za=(e={})=>{let t=Me(e,"kpLangExt");_t(t)||(t={});let r=Me(e,"webName");_t(r)||(r={});let n=Me(e,"webDescription");_t(n)||(n={});let s={};s={...s,...Sa},_t(t)&&(s={...s,...t}),_t(r)&&(s={...s,webName:{...r}}),_t(n)&&(s={...s,webDescription:{...n}});let i={};return _r(["eng","cht"],e=>{let t={};_r(s,(r,n)=>{t[n]=r[e]}),i[e]=t}),i};function va(e,t={}){if(!Array.isArray(e))return{reason:"rowsInvalid",k:-1,field:""};let r=!0===Me(t,"idRequired",!1),n=Me(t,"rowsIdOnly",[]);Array.isArray(n)||(n=[]);let s=Object.create(null),i=(e,t)=>{let n=Me(e,"id"),i="number"==typeof n;if(!!(null==n||""===n||i&&!Number.isFinite(n)))return r?{reason:"idInvalid",k:t,field:"id"}:null;if(!er(n)&&!i)return{reason:"idInvalid",k:t,field:"id"};let o=String(n);return er(n)&&Buffer.byteLength(n,"utf8")>1978?{reason:"idTooLong",k:t,field:"id"}:!0===s[o]?{reason:"idDuplicate",k:t,field:"id"}:(s[o]=!0,null)},o=null;return ha(e,(e,t)=>{if(o=i(e,t),null!==o)return!1}),null!==o?o:(ha(n,e=>{if(o=i(e,-1),null!==o)return!1}),null!==o||ha(e,(e,t)=>!(null!==e&&"object"==typeof e&&!Array.isArray(e))||(ha(e,(e,r)=>{return null!=(n=e)&&"string"!=typeof n&&"number"!=typeof n&&"boolean"!=typeof n?(o={reason:"fieldNotScalar",k:t,field:r},!1):er(e)&&Ml(e)!==e?(o={reason:"htmlMarkup",k:t,field:r},!1):void 0;var n}),null===o&&void 0)),o)}let Ya={grups:{holder:"users",field:"cgrups",kind:"ref"},pemis:{holder:"grups",field:"cpemis",kind:"ref"},targets:{holder:"pemis",field:"crules",kind:"rule"}},Xa=e=>"string"==typeof e,ja=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),za=(e,t)=>"rule"===t?ba(e):Xa(e)?e:null,Ga=(e,t)=>{if(null===e||"object"!=typeof e)return null;let r="targets"===t?e.id:void 0===e.name?"":e.name;return Xa(r)?r:null},Wa=e=>{if(!Xa(e)||""===e.trim())return null;let t=null;try{t=Da.parse(e)}catch(e){return null}return null!==t&&"object"==typeof t?t:null},Ka=(e,t)=>{let r=[];return Array.isArray(e)?(e.forEach((e,n)=>{let s=_t(e)&&ja(e,"name")?e.name:n;r.push({key:za(s,t),el:e,i:n,isObj:_t(e),isActive:_t(e)?e.isActive:e})}),r):(Object.keys(e).forEach(n=>{let s=e[n];r.push({key:za(n,t),el:s,i:n,isObj:_t(s),isActive:_t(s)?s.isActive:s})}),r)},ka=e=>"number"==typeof e?!Number.isFinite(e):null!==e&&"object"==typeof e&&Object.keys(e).some(t=>ka(e[t]));function Fa(e,t={}){let r="rule"===t.kind?"rule":"ref",n=t.rename instanceof Map?t.rename:new Map,s=t.del instanceof Set?t.del:new Set,i={str:e,changed:!1,nRename:0,nDel:0,conflict:!1,unsafe:!1};if(0===n.size&&0===s.size)return i;let o=Wa(e);if(null===o)return i;let u=Ka(o,r),l=new Set;u.forEach(e=>{null!==e.key&&l.add(e.key)});let a=e=>null!==e&&s.has(e),c=e=>null!==e&&!a(e)&&n.has(e);for(let e of u)if(c(e.key)){let t=n.get(e.key);if(l.has(t)&&!c(t)&&!a(t))return i.conflict=!0,i}let d=0,w=0,D=null;if(Array.isArray(o)){D=[];let e=-1;"rule"===r&&u.forEach(t=>{e<0&&a(t.key)&&(e=t.i)}),u.forEach(t=>{let r=t.isObj&&ja(t.el,"name");a(t.key)?w++:c(t.key)&&t.isObj?(d++,D.push({...t.el,name:n.get(t.key)})):e>=0&&t.i>e&&!r?D.push(t.isObj?{...t.el,name:t.i}:{name:t.i,isActive:t.el}):D.push(t.el)})}else D=Object.create(null),u.forEach(e=>{a(e.key)?w++:c(e.key)?(d++,D[n.get(e.key)]=e.el):D[e.i]=e.el});return 0===d&&0===w?i:ka(o)?(i.unsafe=!0,i):{str:JSON.stringify(D),changed:!0,nRename:d,nDel:w,conflict:!1,unsafe:!1}}function Va(e){let t=e?e.keyTable:"",r={renames:[],rename:new Map,delNames:[],del:new Set,oldById:new Map,newById:new Map};if(!ja(Ya,t))return r;let n=!(e.opt&&!1===e.opt.cascadeRename),s=Array.isArray(e.rowsOld)?e.rowsOld:[],i=Array.isArray(e.rowsNew)?e.rowsNew:[],o=r.oldById;s.forEach(e=>{null!==e&&"object"==typeof e&&Xa(e.id)&&o.set(e.id,e)});let u=r.newById;i.forEach(e=>{null!==e&&"object"==typeof e&&Xa(e.id)&&u.set(e.id,e)});let l=new Set;return u.forEach((e,s)=>{let i=o.get(s);if(void 0===i)return;let u=Ga(i,t),a=Ga(e,t);null!==u&&u===a&&l.add(u),n&&"targets"!==t&&null!==u&&null!==a&&u!==a&&(r.renames.push({id:s,from:u,to:a}),r.rename.set(u,a))}),o.forEach((e,n)=>{if(u.has(n))return;let s=Ga(e,t);null===s||l.has(s)||r.del.add(s)}),r.delNames=[...r.del],r}function Ha(e){let t=e?e.keyTable:"",r=ja(Ya,t)?Ya[t]:null,n={err:null,keyTable:t,holder:r?r.holder:"",field:r?r.field:"",renames:[],delNames:[],changes:[],nHolders:0,nRenameHolders:0,nDelHolders:0,nExternal:0};if(null===r)return n;let s=Array.isArray(e.holdersOld)?e.holdersOld:[],i=Va(e),{oldById:o,newById:u,rename:l,del:a}=i;if(n.renames=i.renames,n.delNames=i.delNames,0===l.size&&0===a.size)return n;let c=new Set;for(let e of n.renames){if(c.has(e.to))return n.err="renameCascadeConflict",n;c.add(e.to)}let d=s.map(e=>{let t=null!==e&&"object"==typeof e?e[r.field]:void 0;return{h:e,str:t,kp:Wa(t)}}).filter(e=>null!==e.h&&"object"==typeof e.h&&Xa(e.h.id)),w=n.renames.filter(e=>{let r=0;return o.forEach(n=>{Ga(n,t)===e.from&&r++}),r>=2});if(w.length>0){let e=new Set(w.map(e=>e.from));for(let t of d)if(null!==t.kp&&Ka(t.kp,r.kind).some(t=>null!==t.key&&e.has(t.key)))return n.err="renameCascadeDupGroup",n}if(n.renames.length>0){let e=new Set;o.forEach(r=>{let n=Ga(r,t);null!==n&&e.add(n)});let s=new Set;if(n.renames.forEach(t=>{e.has(t.to)||s.add(t.to)}),s.size>0)for(let e of d)if(null!==e.kp)for(let t of Ka(e.kp,r.kind))if(null!==t.key&&s.has(t.key)&&"y"===t.isActive)return n.err="renameCascadeNameInUse",n}for(let e of d){let t=Fa(e.str,{kind:r.kind,rename:l,del:a});if(t.conflict||t.unsafe)return n.err=t.conflict?"renameCascadeConflict":"renameCascadeUnsupported",n.changes=[],n.nHolders=0,n.nRenameHolders=0,n.nDelHolders=0,n.nExternal=0,n;if(!t.changed)continue;let s=Xa(e.h.from)&&""!==e.h.from?e.h.from:"";n.changes.push({id:e.h.id,field:r.field,before:e.str,after:t.str,nRename:t.nRename,nDel:t.nDel,from:s}),t.nRename>0&&n.nRenameHolders++,t.nDel>0&&n.nDelHolders++,""!==s&&n.nExternal++}return n.nHolders=n.changes.length,n}function Ua(e,t,r,n=[]){let s=e=>{let t=null!==e&&"object"==typeof e?e.id:void 0;return Xa(t)&&""!==t?t:"number"==typeof t&&Number.isFinite(t)?String(t):null},i=new Set;r.forEach(e=>{let t=s(e);null!==t&&i.add(t)});let o=new Map;t.forEach(e=>{null!==e&&"object"==typeof e&&Xa(e.id)&&!i.has(e.id)&&Xa(e.name)&&(o.has(e.name)||o.set(e.name,[]),o.get(e.name).push(e.id))});let u=new Set(i);return[...t,...n].forEach(e=>{null!==e&&"object"==typeof e&&Xa(e.id)&&u.add(e.id)}),r.map((t,r)=>{let n=s(t);if(null===n&&"targets"!==e&&null!==t&&"object"==typeof t&&Xa(t.name)&&o.has(t.name)&&o.get(t.name).length>0&&(n=o.get(t.name).shift()),null===n){let e=r;for(;u.has(`__new__${e}`);)e++;n=`__new__${e}`,u.add(n)}return{...t,id:n}})}let Ba=["userId","timeCreate","userIdUpdate","timeUpdate"],Ra={users:"cgrups",grups:"cpemis",pemis:"crules",targets:null},Qa=e=>"string"==typeof e,Oa=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Pa=e=>null!==e&&"object"==typeof e,Ja=e=>JSON.stringify(void 0===e?"":e);function $a(e){return Pa(e)&&Qa(e.from)&&""!==e.from}function _a({keyTable:e,keys:t,r:r,ltdtOld:n,lockExternalRows:s=!0}){let i=new Map;n.forEach(e=>{Pa(e)&&Qa(e.id)&&i.set(e.id,e)});let o=e=>void 0===e?"":e,u=function(e,t){let r=Oa(Ra,e)?Ra[e]:null;return(Array.isArray(t)?t:[]).filter(e=>"id"!==e&&"from"!==e&&"order"!==e&&e!==r&&Ba.indexOf(e)<0)}(e,t),l=[],a=(e,t,r,n)=>{l.push({key:e,reason:t,k:r,from:Qa(n)?n:""})};if(r.add.forEach((e,t)=>{let r=Pa(e)?o(e.from):"";Qa(r)?s&&""!==r&&a("saveFromNotAllowed","addFrom",t,r):a("saveFromNotAllowed","fromType",t,"")}),s&&r.del.forEach((e,t)=>{$a(e)&&a("saveExternalRowChanged","del",t,e.from)}),r.diff.forEach((e,t)=>{let r=Pa(e)&&Qa(e.id)?i.get(e.id):void 0,n=Pa(e)?o(e.from):"",l=void 0===r?"":o(r.from);Qa(n)||n===l?s&&void 0!==r&&($a(r)?n!==r.from?a("saveExternalRowChanged","fromChanged",t,r.from):u.some(t=>Ja(e[t])!==Ja(r[t]))&&a("saveExternalRowChanged","fieldChanged",t,r.from):Qa(n)&&""!==n&&a("saveFromNotAllowed","fromChanged",t,n)):a("saveFromNotAllowed","fromType",t,"")}),0===l.length)return null;let c=[];return l.forEach(e=>{""!==e.from&&c.indexOf(e.from)<0&&c.length<5&&c.push(e.from)}),{key:l[0].key,reason:l[0].reason,k:l[0].k,n:l.length,froms:c}}let qa=e=>"string"==typeof e,ec=e=>null!==e&&"object"==typeof e;function tc(e,t){let r=function(e){return(Array.isArray(e)?e:[]).filter(e=>"order"!==e&&Ba.indexOf(e)<0)}(t),n=r.map(t=>{let r=ec(e)?e[t]:void 0;return void 0===r?null:r});return function(e,t=0){let r=3735928559^t,n=1103547991^t;for(let t=0;t<e.length;t++){let s=e.charCodeAt(t);r=Math.imul(r^s,2654435761),n=Math.imul(n^s,1597334677)}return r=Math.imul(r^r>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(r^r>>>13,3266489909),4294967296*(2097151&n)+(r>>>0)}(JSON.stringify(n)).toString(36)}function rc({keys:e,ltdtOld:t,baseline:r}){let n=function({keys:e,rows:t,baseline:r}){let n=new Map(Array.isArray(r)?r:[]),s=0,i=0,o=new Set;(Array.isArray(t)?t:[]).forEach(t=>{ec(t)&&qa(t.id)&&!o.has(t.id)&&(o.add(t.id),n.has(t.id)?n.get(t.id)!==tc(t,e)&&s++:i++)});let u=0;return n.forEach((e,t)=>{o.has(t)||u++}),{nChanged:s,nRemoved:u,nAdded:i}}({keys:e,rows:t,baseline:r}),s=n.nChanged+n.nRemoved+n.nAdded;return 0===s?null:{key:"saveStale",reason:n.nChanged>0?"rowChanged":n.nRemoved>0?"rowRemoved":"rowAdded",n:s}}let nc=e=>"string"==typeof e;function sc(e,t,r){if(!Array.isArray(e))return-1;let n=new Map,s=new Map;for(let e of Array.isArray(t)?t:[])null!==e&&"object"==typeof e&&(nc(e.id)&&nc(e[r])&&n.set(e.id,e[r]),nc(e[r])&&s.set(e[r],(s.get(e[r])||0)+1));let i=new Map;for(let t=0;t<e.length;t++){let n=e[t],s=null===n||"object"!=typeof n?void 0:n[r];nc(s)&&(i.has(s)||i.set(s,[]),i.get(s).push(t))}let o=-1;for(let[t,r]of i){if(r.length<2)continue;if(!((s.get(t)||0)>=2&&r.length<=s.get(t)&&r.every(r=>{let s=e[r].id;return nc(s)&&n.get(s)===t})&&new Set(r.map(t=>e[t].id)).size===r.length)){let s=r.find(r=>!(nc(e[r].id)&&n.get(e[r].id)===t)),i=void 0===s?r[1]:s;(o<0||i<o)&&(o=i)}}return o}let ic=e=>"string"==typeof e;function oc(e,t,r=()=>!0){if(!Array.isArray(e))return-1;let n=new Set;for(let s=0;s<e.length;s++){let i=e[s];if(!r(i))continue;let o=null===i||"object"!=typeof i?void 0:i[t];if(ic(o)){if(n.has(o))return s;n.add(o)}}return-1}function uc(e){return"tabWrite:"+e}let lc={targets:0,pemis:1,grups:2,users:3};function ac(e,t,r,n=[]){let s=e=>Object.prototype.hasOwnProperty.call(lc,e)?lc[e]:1/0,i=[...new Set(t)].sort((e,t)=>s(e)-s(t)||(e<t?-1:e>t?1:0));if(n.length>0){let e=Math.max(...n.map(s));if(i.some(t=>s(t)<=e))throw new Error("tab lock order violation")}let o=r;for(let t=i.length-1;t>=0;t--){let r=o,n=uc(i[t]);o=()=>e(n,r)}return o()}function cc(e){return"email"===e||"name"===e?e:null}function dc(e,t,r){if(!Array.isArray(e))return null;let n=e=>null!==e&&"object"==typeof e,s=e=>n(e)&&"y"===e.isActive,i=Array.isArray(t)?t.filter(n):[],o=(e,t,r,s,i,o)=>{let u=((e,t,r,s)=>{let i=new Map;for(let e of t)ic(e.id)&&i.set(e.id,e);return e.findIndex(e=>{let t=n(e)?e[r]:void 0,o=n(e)&&ic(e.id)?i.get(e.id):void 0;return(void 0===o||t!==o[r])&&!s(t)})})(e,r,s,i),l=sc(e,r,s);if(u<0&&l<0)return null;let a=u>=0&&(l<0||u<=l);return{key:a?"saveRowFieldInvalid":"saveRowFieldDuplicate",reason:a?`${o}Invalid`:`${o}Duplicate`,field:s,k:t[a?u:l]}},u=o(e,e.map((e,t)=>t),i,"email",e=>ic(e)&&e.length>0,"email");if(null!==u)return u;let l=cc(r);if(null===l)return null;let a=[],c=[];return e.forEach((e,t)=>{s(e)&&(a.push(t),c.push(e))}),o(c,a,i.filter(s),l,e=>ic(e)&&e.trim().length>0,"mapKey")}function wc(e){let t=Array.isArray(e)?e.filter(e=>_t(e)):[];return{user:1===t.length?t[0]:null,count:t.length}}function Dc(e){if(!e||0===e.changes.length)return null;let t=va(e.changes.map(e=>({id:e.id,[e.field]:e.after})));return null===t?null:"htmlMarkup"===t.reason?"htmlMarkupNotAllowed":"saveRowFieldInvalid"}async function yc({plan:e,holdersOld:t,woItems:r,procOrm:n,userId:s,srLog:i,writeMain:o}){if(!e||0===e.changes.length)return await o();let u=Dc(e);if(null!==u)return Promise.reject(u);let l=new Map;t.forEach(e=>{null!==e&&"object"==typeof e&&l.set(e.id,e)});let a=e.changes.map(e=>{let t=l.get(e.id);return t?{...t}:{id:e.id,[e.field]:e.before}}),c=e.changes.map(e=>({id:e.id,[e.field]:e.after})),d=e.changes.map(e=>e.id).filter(e=>"string"==typeof e&&""!==e).flatMap(e=>{let t=_o(e,{length:100,omission:"…"});return t===e?[e]:[e,t]}).sort((e,t)=>t.length-e.length),w=e=>{let t=e;return d.forEach(e=>{t=t.split(`id[${e}]`).join("id[*]")}),t.replace(/id\[[^\]]*\]/g,"id[*]")},D=e=>w("string"==typeof e?e:e&&e.message||String(e)),y=null,M="holder";try{await n(s,e.holder,"save",c),M="main",y=await o()}catch(t){let n=!0,o="";try{let t=await r[e.holder].save(a,{merge:!1});Array.isArray(t)&&t.some(e=>e&&0===e.ok)&&(n=!1,o="save result ok:0")}catch(e){n=!1,o=D(e)}return n?(i.warn({event:"refCascade-restored",raw:D(t),userId:s,keyTable:e.keyTable,holder:e.holder,nHolders:e.changes.length}),"holder"===M?Promise.reject("string"==typeof t?w(t):t instanceof Error?new Error(w(t.message)):t):Promise.reject(t)):(i.error({event:"refCascade-restore-error",msg:"saveCascadePartial",raw:D(t),rawRestore:o,userId:s,keyTable:e.keyTable,holder:e.holder,nHolders:e.changes.length}),Promise.reject("saveCascadePartial"))}return i.info({event:"refCascade-done",userId:s,keyTable:e.keyTable,holder:e.holder,nRename:e.renames.length,nDelName:e.delNames.length,nHolders:e.nHolders,nRenameHolders:e.nRenameHolders,nDelHolders:e.nDelHolders,nExternal:e.nExternal}),y}function Mc(e,t,r,n){let s=t.filter(e=>null!==e&&"object"==typeof e&&e.from!==n),i=t.filter(e=>null!==e&&"object"==typeof e&&e.from===n);return[...s,...Ua(e,i,r,s)]}let gc=e=>null!==e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function mc(e,t,{srLog:r,kmx:n,lockSave:s,mappingBy:i="id",cascadeRename:o=!0,lockExternalRows:u=!0}){let l=e=>{let t=null!==e&&"object"==typeof e?e.baseline:void 0;return null==t?{}:{baseline:t}},a=async(l,a,c,d,w={})=>{if(!Array.isArray(c)||!c.every(gc))return r.error({event:"updateTabItems-validate-error",keyTable:l,msg:"saveRowFieldInvalid",reason:"rowsInvalid",row:-1,field:""}),Promise.reject("saveRowFieldInvalid");let D=Me(w,"baseline",null);if(null!==D&&!function(e){if(!Array.isArray(e)||!e.every(e=>Array.isArray(e)&&2===e.length&&qa(e[0])&&qa(e[1])))return!1;let t=new Set;for(let r of e){if(t.has(r[0]))return!1;t.add(r[0])}return!0}(D))return r.error({event:"updateTabItems-validate-error",keyTable:l,msg:"saveRowFieldInvalid",reason:"baselineInvalid",row:-1,field:""}),Promise.reject("saveRowFieldInvalid");let y=Me(w,"pickKeysOnly",null),M=[];return Er(y)||_r(c,e=>{!0===Me(e,"_isNew")&&M.push(Me(e,"id",""))}),await s(`updateTabItems:${l}`,a,()=>ac(n,[l],async()=>{if(Er(y)){c=Ot(c,e=>{let t=Me(e,"id");return"number"==typeof t&&Number.isFinite(t)?{...e,id:String(t)}:e});let t=await e[l].select();c=function(e,t,r,n){let s=Object.create(null);Array.isArray(t)&&_r(t,e=>{let t=Me(e,r,"");er(t)&&(s[t]=e)});let i=Ca(e,"order");return i=Ot(i,e=>{let t={...e},i=Me(e,r,""),o=La(s,i,null);return null!==o&&_r(n,e=>{dn(o,e)&&(t[e]=o[e])}),t}),i}(t,c,d,y),r.info({event:"updateTabItems-pickKeysOnly",keyTable:l,userId:a,pickKeysOnly:y})}c=Ot(c=en(c,da[l].keys),(e,t)=>(e.order=t+1,e));let s=(e,t,n={})=>{let s=null,i=Object.create(null);return _r(e,(e,o)=>{let u=Me(e,t,"");return er(u)?!0!==n.skipDup&&dn(i,u)?(r.error({event:"updateTabItems-ckKey-error",keyTable:l,key:t,msg:"saveRowFieldDuplicate",row:o,value:u}),s="saveRowFieldDuplicate",!1):void(i[u]=!0):(r.error({event:"updateTabItems-ckKey-error",keyTable:l,key:t,msg:"saveRowFieldInvalid",row:o}),s="saveRowFieldInvalid",!1)}),s},w=null;if(Ea(l,["targets"])&&(w=s(c,"id"),null!==w))return Promise.reject(w);if(Ea(l,["pemis","grups"])&&(w=s(c,"name",{skipDup:!0}),null!==w))return Promise.reject(w);if(c=Ot(c,e=>{let t=Me(e,"id");return"number"==typeof t&&Number.isFinite(t)?{...e,id:String(t)}:e}),Ea(l,["pemis","grups"])){let e=oc(c,"id",e=>er(Me(e,"id")));if(e>=0)return r.error({event:"updateTabItems-ckKey-error",keyTable:l,key:"id",msg:"saveRowFieldDuplicate",row:e,value:Me(c,[e,"id"])}),Promise.reject("saveRowFieldDuplicate")}let g=await e[l].select();if(null!==D){let e=rc({keys:da[l].keys,ltdtOld:g,baseline:D});if(null!==e)return r.error({event:"updateTabItems-stale-error",keyTable:l,userId:a,msg:e.key,reason:e.reason,n:e.n}),Promise.reject(e.key)}u&&(c=function(e,t){let r=new Map;return(Array.isArray(t)?t:[]).forEach(e=>{Pa(e)&&Qa(e.id)&&r.set(e.id,e)}),e.map(e=>{let t=Pa(e)&&Qa(e.id)?r.get(e.id):void 0;return void 0!==t&&$a(t)&&Oa(t,"order")?{...e,order:t.order}:e})}(c,g));let m=Ea(l,["pemis","grups"]);if(m){let e=sc(c,g,"name");if(e>=0)return r.error({event:"updateTabItems-ckKey-error",keyTable:l,key:"name",msg:"nameDuplicate",row:e,value:Me(c,[e,"name"])}),Promise.reject("nameDuplicate")}if("users"===l){let e=dc(c,g,i);if(null!==e)return r.error({event:"updateTabItems-ckKey-error",keyTable:l,key:e.field,msg:e.key,reason:e.reason,row:e.k}),Promise.reject(e.key)}if(Ms(M)>0){let e=Object.create(null);if(_r(g,t=>{e[Me(t,"id","")]=!0}),M.some(t=>!0===e[t]))return Promise.reject("saveNewRowExists")}let I=c,f=null;if(m||"users"===l){let e=I.filter(e=>er(Me(e,"id"))),t=I.filter(e=>!er(Me(e,"id")));f=Ta(g,e,"id"),f.add=[...f.add,...t]}else f=Ta(g,I,d);let p=da[l].keys;u&&(f=function({keys:e,r:t,ltdtOld:r}){let n=new Map;r.forEach(e=>{Pa(e)&&Qa(e.id)&&n.set(e.id,e)});let s=(Array.isArray(e)?e:[]).filter(e=>Ba.indexOf(e)<0),i=[],o=[...t.same];return t.diff.forEach(e=>{let t=Pa(e)&&Qa(e.id)?n.get(e.id):void 0;void 0!==t&&$a(t)&&s.every(r=>Ja(e[r])===Ja(t[r]))?o.push(e):i.push(e)}),{add:t.add,del:t.del,diff:i,same:o}}({keys:p,r:f,ltdtOld:g}),f=function({r:e,ltdtOld:t}){let r=new Map;t.forEach(e=>{Pa(e)&&Qa(e.id)&&r.set(e.id,e)});let n=e.diff.map(e=>{let t=Pa(e)&&Qa(e.id)?r.get(e.id):void 0;if(void 0===t||!$a(t))return e;let n={...e};return Ba.forEach(e=>{Oa(t,e)&&(n[e]=t[e])}),n});return{add:e.add,del:e.del,diff:n,same:e.same}}({r:f,ltdtOld:g}));let C=_a({keyTable:l,keys:p,r:f,ltdtOld:g,lockExternalRows:u});if(null!==C)return r.error({event:"updateTabItems-external-error",keyTable:l,userId:a,msg:C.key,reason:C.reason,n:C.n,froms:C.froms}),Promise.reject(C.key);if(null===D&&u&&function({r:e,ltdtOld:t}){let r=new Map;return t.forEach(e=>{Pa(e)&&Qa(e.id)&&r.set(e.id,e)}),e.diff.some(e=>{let t=Pa(e)&&Qa(e.id)?r.get(e.id):void 0;return void 0!==t&&$a(t)})}({r:f,ltdtOld:g}))return r.error({event:"updateTabItems-stale-error",keyTable:l,userId:a,msg:"saveBaselineRequired",reason:"externalAssignNoBaseline"}),Promise.reject("saveBaselineRequired");let h=va([...f.add,...f.diff],{rowsIdOnly:f.same});if(null!==h){let e="saveRowFieldInvalid";return"htmlMarkup"===h.reason?e="htmlMarkupNotAllowed":"idDuplicate"===h.reason&&(e="saveRowFieldDuplicate"),r.error({event:"updateTabItems-validate-error",keyTable:l,msg:e,reason:h.reason,row:h.k,field:h.field}),Promise.reject(e)}let L=async()=>{Ms(f.del)>0&&await t(a,l,"del",f.del),Ms(f.add)>0&&await t(a,l,"insert",f.add),Ms(f.diff)>0&&await t(a,l,"save",f.diff)},b=Ea(l,["targets","pemis","grups"])?Ua(l,g,I):I,N=Ea(l,["targets","pemis","grups"])?Va({keyTable:l,rowsOld:g,rowsNew:b,opt:{cascadeRename:o}}):null;if(null!==N&&(N.renames.length>0||N.delNames.length>0)){let s=Ya[l].holder;return await ac(n,[s],async()=>{let n=await e[s].select(),i=Ha({keyTable:l,rowsOld:g,rowsNew:b,holdersOld:n,opt:{cascadeRename:o}}),u=null!==i.err?i.err:Dc(i);return null!==u?(r.error({event:"updateTabItems-refCascade-error",keyTable:l,msg:u}),Promise.reject(u)):(await yc({plan:i,holdersOld:n,woItems:e,procOrm:t,userId:a,srLog:r,writeMain:L}),I)},[l])}return await L(),I}))},c=(e,t,n)=>{let s=fc(n),i="string"==typeof n?n:n&&n.message||String(n);return r.error({event:e,userId:t,msg:s,...i!==s?{raw:i}:{}}),s};return{updateTargets:async(e,t,n={})=>{try{await a("targets",e,t,"id",l(n))}catch(t){throw c("updateTargets-error",e,t)}return r.info({event:"updateTargets-success",userId:e}),"saveTabItemsSuccess"},updatePemis:async(e,t,n={})=>{try{await a("pemis",e,t,"name",l(n))}catch(t){throw c("updatePemis-error",e,t)}return r.info({event:"updatePemis-success",userId:e}),"saveTabItemsSuccess"},updateGrups:async(e,t,n={})=>{try{await a("grups",e,t,"name",l(n))}catch(t){throw c("updateGrups-error",e,t)}return r.info({event:"updateGrups-success",userId:e}),"saveTabItemsSuccess"},updateUsers:async(e,t,n={})=>{try{await a("users",e,t,"id",n)}catch(t){throw c("updateUsers-error",e,t)}return r.info({event:"updateUsers-success",userId:e}),"saveTabItemsSuccess"}}}let Ic=null;function fc(e,t="saveWriteFail"){return null===Ic&&(Ic=new Set(Object.keys(Za({}).eng))),"string"==typeof e&&Ic.has(e)?e:t}let pc="w-syslog/src/formatter.mjs";function Cc(r={}){let n=r.fpSelf,s=r.cwd,i=[],o=e.dirname(e.dirname(n)),u=e.join(o,"src","formatter.mjs");if((r=>{try{return"w-syslog"===JSON.parse(t.readFileSync(e.join(r,"package.json"),"utf8")).name}catch(e){return!1}})(o)&&t.existsSync(u))return{fp:u,by:"pkgRoot"};i.push(`package root of ${n}`);try{return{fp:c.createRequire(n).resolve(pc),by:"resolveFromSelf"}}catch(e){i.push(`resolve from ${n}`)}try{return{fp:c.createRequire(e.join(s,"index.js")).resolve(pc),by:"resolveFromCwd"}}catch(e){i.push(`resolve from ${s}`)}throw new Error(`w-syslog: can not resolve transport target ${pc}, tried: ${i.join("; ")}. When bundling, keep w-syslog installed and list "pino" in external`)}let hc="",Lc="wsyslogFormatterError",bc=e=>{try{return t.statSync(e).isDirectory()}catch(e){return!1}};function Nc(r={}){let n=ln(),s=Me(r,"timeZone",null),i=Me(r,"fdLog");er(i)||(i="./_logs");let o=Me(r,"interval");"day"!==o&&"hr"!==o&&(o="day");let u=Me(r,"numKeep");if(hr(u)||(u="day"===o?365:8760),u=Cr(u),"function"!=typeof a.transport)throw new Error('w-syslog: pino.transport is not a function, pino seems to be bundled as its browser build; list "pino" in external when bundling');if(er(s))try{Intl.DateTimeFormat("en-US",{timeZone:s})}catch(e){throw new Error(`w-syslog: invalid timeZone[${s}]`)}let c=e.resolve(i);if(On(c),!bc(c))throw new Error(`w-syslog: can not create fdLog[${i}]`);let d=(""===hc&&(hc=Cc({fpSelf:l.fileURLToPath("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:w&&"SCRIPT"===w.tagName.toUpperCase()&&w.src||new URL("w-web-perm.umd.js",document.baseURI).href),cwd:process.cwd()}).fp),hc),D=a.transport({targets:[{level:"info",target:l.pathToFileURL(d).href,options:{interval:o,fdLog:c,timeZone:s}}]});D.unref();let y=!1,M=e=>{try{n.emit("writeError",e)}catch(e){}},g=e=>{y=!0,console.error("w-syslog transport error:",e),M(e)},m=e=>{let t=new Error(Me(e,"message","w-syslog formatter error"));t.code=Me(e,"code"),t.syscall=Me(e,"syscall"),t.path=Me(e,"path"),M(t)};D.on("error",g),D.on(Lc,m);let I=()=>{D.off("error",g),D.off(Lc,m)},f=a(D),p=()=>{try{if(!bc(c))return;let r="hr"===o?/^\d{4}-\d{2}-\d{2}T\d{2}\.log$/:/^\d{4}-\d{2}-\d{2}\.log$/,s=t.readdirSync(c).filter(e=>r.test(e));s.sort();let l=s.length-u;if(l<=0)return;let a=s.slice(0,l);for(let r of a){let s=e.join(i,r);try{t.unlinkSync(e.join(c,r)),n.emit("delete",{fp:s,fn:r})}catch(e){}}}catch(e){console.error("WSyslog cleanLogs error:",e)}},C=setImmediate(()=>{C=null,p()}),h=setInterval(p,36e5);h.unref();let L=null,b=e=>{let t=f[e].bind(f);return(...r)=>{try{n.emit(e,{args:r})}catch(e){}y||t(...r)}};return n.fatal=b("fatal"),n.error=b("error"),n.warn=b("warn"),n.info=b("info"),n.debug=b("debug"),n.trace=b("trace"),n.cleanLogs=p,n.clear=(e={})=>{if(null!==L)return L;null!==C&&(clearImmediate(C),C=null),clearInterval(h);let t=Me(e,"timeLimit");hr(t)||(t=6e4),L=Hr();let r=!1,n=()=>{r||(r=!0,D.closed?setImmediate(I):D.once("close",()=>{setImmediate(I)}),L.resolve())},s=setTimeout(()=>{console.error("w-syslog clear: timeout, worker terminated, some logs may be lost");try{D.worker.terminate()}catch(e){}n()},t);try{if(D.closed||D.destroyed)return clearTimeout(s),n(),L;D.once("close",()=>{clearTimeout(s),n()}),D.end()}catch(e){clearTimeout(s),n()}return L},n}function Ac(){let e=ln(),t=Object.create(null);function r(t,r){Dn(e,t,[r],{tag:"cache"})}function n(e,n={}){if(dn(t,e))return;let s=Me(n,"fun");Gr(s)||(s=async()=>{});let i=Me(n,"inputs");Lr(i)||(i=[]);let o=Me(n,"timeExpired");hr(o)||(o=5e3),o=Cr(o);let u=Me(n,"timeFrom");"end"!==u&&(u="start");let l=Me(n,"useCacheWhenError");wr(l)||(l=!1);let a=Me(n,"useCloneDeep");wr(a)||(a=!0),t[e]={needExec:!0,fun:s,pm:null,gen:0,inputs:i,value:null,time:null,timeExpired:o,timeFrom:u,useCacheWhenError:l,useCloneDeep:a},r("message",{fun:"set",key:e,timeExpired:o,timeFrom:u,useCacheWhenError:l,useCloneDeep:a})}async function s(e,n={}){if(dn(t,e)){let s=t[e],i=Me(n,"useCloneDeep");if(wr(i)||(i=s.useCloneDeep),s.pm)return r("message",{fun:"get",key:e,msg:"waiting"}),await s.pm,i?Mo(s.value):s.value;let o=Date.now(),u=s.needExec,l=o-s.time;if(u?r("message",{fun:"get",key:e,msg:"execute first"}):s.timeExpired>0&&l>s.timeExpired&&(r("message",{fun:"get",key:e,msg:"execute by timeExpired",timeDiff:l}),u=!0),u){r("message",{fun:"get",key:e,msg:"fun start"}),s.needExec=!1;let t,n,i=s.gen,u=async()=>{try{let t;try{t=await s.fun(...s.inputs)}catch(n){if(r("error",{fun:"get",key:e,msg:n}),!s.useCacheWhenError)throw s.gen===i&&(s.needExec=!0),n;t=void 0}s.gen===i&&(s.value=t,s.time="end"===s.timeFrom?Date.now():o)}finally{s.pm=null,r("message",{fun:"get",key:e,msg:"fun end"})}},l=new Promise((e,r)=>{t=e,n=r});s.pm=l,u().then(t,n),await l}else r("message",{fun:"get",key:e,msg:"use cache"});return i?Mo(s.value):s.value}return r("error",{fun:"get",key:e,msg:"invalid key"}),null}return e.set=n,e.getProxy=async function(e,t={}){return n(e,t),s(e,t)},e.get=s,e.update=function(e,n){dn(t,e)&&(r("message",{fun:"updateValue",key:e}),t[e].value=n,t[e].time=Date.now(),t[e].gen+=1)},e.clear=function(e){dn(t,e)&&(r("message",{fun:"clear",key:e}),t[e].needExec=!0)},e.remove=function(e){dn(t,e)&&(r("message",{fun:"remove",key:e}),delete t[e])},e}function xc(r,n=1){return function(e,t=1,r={}){let n=1,s=Me(r,"path"),i=Me(r,"fs");if(!Rr(e,{fs:i}))throw new Error(`fd[${e}] is not a folder`);return null!==t&&hr(t)&&(t=Cr(t))<1&&(t=1),function e(r){let o=[];return Rr(r,{fs:i})?(_r(i.readdirSync(r),function(u){let l=s.resolve(r,u),a=null;try{a=i.statSync(l)}catch(e){}a&&a.isDirectory()?(o.push({isFolder:!0,level:n,path:l,name:s.basename(l)}),n+=1,(n<=t||null===t)&&(o=o.concat(e(l))),n-=1):o.push({isFolder:!1,level:n,path:l,name:s.basename(l)})}),o):o}(e)}(r,n,{path:e,fs:t})}let Ec=new Map,Tc=new Map;function Sc(e){let t=Me(e,"fdLog");return er(t)||(t="./logs"),t}function Zc(e,r,n){let s=xc(e);s=s.filter(e=>!Me(e,"isFolder",!1)),s=function(e,t,r){let n=t.format(r);return Ma(e,e=>{let t=Me(e,"name","").replace(/\.log$/,"");return!/^\d{4}-\d{2}-\d{2}/.test(t)||t>=n.slice(0,t.length)})}(s,r,n);let i=[];for(let e of s)try{let r=t.statSync(e.path);if(!r.isFile())continue;i.push({path:e.path,name:e.name,size:r.size,mtimeMs:r.mtimeMs})}catch(e){}return i}function vc(e){let t=new Map;return r=>{let n=Math.floor(r/6e4),s=t.get(n);return void 0===s&&(s=ms(6e4*n).format(e),t.set(n,s)),s}}function Yc(e,r){return new Promise((n,s)=>{let i=null,o=t.createReadStream(e,{encoding:"utf8"}),u=d.createInterface({input:o,crlfDelay:1/0});u.on("line",r);let l=e=>{i=e,u.close()};o.on("error",l),u.on("error",l),o.on("close",()=>{i?s(i):n()})})}function Xc(e){let t=null;try{t=JSON.parse(e)}catch(e){return null}return null===t||"object"!=typeof t?null:t}async function jc(e,t,r,n=null){Gr(n)||(n=vc(r));let s={minTimeMs:null,ev:{}};return await Yc(e,e=>{let r=Xc(e);if(null===r)return;let i=r.event;if(!er(i))return;let o=function(e){return"number"==typeof e?e:er(e)?ms(e).valueOf():NaN}(r.time);if(Number.isNaN(o))return;if((null===s.minTimeMs||o<s.minTimeMs)&&(s.minTimeMs=o),!(o>t))return;let u=n(o),l=s.ev[u];void 0===l&&(l={count:0,kp:{}},s.ev[u]=l),l.count+=1,l.kp[i]=(l.kp[i]||0)+1}),s}async function zc(e,t,r){let n=vc(r),s=[];for(let i of e)try{let e=await jc(i.path,t,r,n);s.push({name:i.name,ok:!0,agg:e})}catch(e){s.push({name:i.name,ok:!1,err:String(Me(e,"message",e))})}return s}function Gc(e,t){for(let r in t.ev){let n=t.ev[r],s=e[r];void 0===s&&(s={count:0,kp:{}},e[r]=s),s.count+=n.count;for(let e in n.kp)s.kp[e]=(s.kp[e]||0)+n.kp[e]}return e}async function Wc(t,r={}){let n=!1!==Me(r,"useCache"),s=Me(r,"scanFiles");Gr(s)||(s=zc);let i=Me(r,"srLog",null),o=Zc(t.fdLog,t.tStart,t.fmt),u=function(e){let t=Ec.get(e);return t||(t=new Map,Ec.set(e,t)),t}((l=t.fdLog,a=t.fmt,`${e.resolve(l)}|${a}`));var l,a;let c=[],d={};for(let e of o){let r=n?u.get(e.name):void 0;void 0!==r&&r.size===e.size&&r.mtimeMs===e.mtimeMs&&(null===r.minTimeMs||r.minTimeMs>r.scanTStartMs&&r.minTimeMs>t.tStartMs)?d[e.name]=r.agg:c.push(e)}if(n){let e=new Set(o.map(e=>e.name));for(let t of u.keys())e.has(t)||u.delete(t)}let w=[];if(c.length>0){let e=await s(c.map(e=>({path:e.path,name:e.name})),t.tStartMs,t.fmt),r={};for(let t of e)r[t.name]=t;for(let e of c){let s=r[e.name];if(s&&s.ok)d[e.name]=s.agg,n&&u.set(e.name,{size:e.size,mtimeMs:e.mtimeMs,minTimeMs:s.agg.minTimeMs,scanTStartMs:t.tStartMs,agg:s.agg});else{let t=Me(s,"err","no result");w.push({name:e.name,err:t}),n&&u.delete(e.name),i&&Gr(i.warn)&&i.warn({event:"fun-staLogs",key:"staLogsFileSkipped",name:e.name,err:t})}}}let D={};for(let e of o){let t=d[e.name];t&&Gc(D,t)}let y=function(e,t){let r={};for(let e of t)r[e]={count:0};for(let t in e){let n=e[t];r[t]={count:n.count,...n.kp}}return Object.keys(r).sort().map(e=>({time:e,data:r[e]}))}(D,t.kpTime);return{rs:y,stat:{nFiles:o.length,nScanned:c.length,nCached:o.length-c.length,errors:w}}}function Kc(t=7,r="hr",n={}){let s=function(e=7,t="hr",r={}){let n=Sc(r),s=function(e){return"day"===e?"day":"hr"}(t),i="day"===s?"YYYY-MM-DD":"YYYY-MM-DDTHH",o="day"===s?"day":"hour",u=Me(r,"timeNow"),l="number"==typeof u?ms(u):ms(),a=l.subtract(e,"day"),c=a.valueOf(),d=a.startOf(o),w=l.startOf(o),D=[];for(;!d.isAfter(w);)D.push(d.format(i)),d=d.add(1,o);return{fdLog:n,timeInterval:s,fmt:i,unit:o,tStart:a,tStartMs:c,kpTime:D,timeNow:l.valueOf()}}(t,r,n),i=JSON.stringify([e.resolve(s.fdLog),t,s.timeInterval,Me(n,"timeNow",null)]);if(Tc.has(i))return Tc.get(i);let o=Wc(s,n).finally(()=>{Tc.delete(i)});return Tc.set(i,o),o}function kc(e,t){return null==e?t:"number"==typeof e?e:ms(e).valueOf()}async function Fc(e,t){let r={},n=[];for(let s of e)try{await Yc(s.path,e=>{let n=Xc(e);if(null===n)return;let s=n.event;if(!er(s))return;let i=kc(n.time,t),o=(u=(t-i)/36e5)<0?Math.ceil(u)||0:Math.floor(u);var u;o<0||o>24||(r[s]||(r[s]={last1Day:0,last8Hour:0,last4Hour:0,last1Hour:0}),o<=24&&(r[s].last1Day+=1),o<=8&&(r[s].last8Hour+=1),o<=4&&(r[s].last4Hour+=1),o<=1&&(r[s].last1Hour+=1))})}catch(e){n.push({name:s.name,err:String(Me(e,"message",e))})}return{kp:r,errors:n}}function Vc(r={}){let n=r.fpSelf,s=r.cwd||process.cwd(),i=r.pkgName||"w-web-perm",o=r.rel||"server/staLogs/staLogsCore.shellWorker.mjs",u=r.existsSync||t.existsSync,l=r.readFileSync||t.readFileSync,a=r.createRequire||c.createRequire;if("string"!=typeof n||""===n)throw new Error("invalid fpSelf");let d=[],w=function(t,r){let n=t;for(;;){if(r(e.join(n,"package.json")))return n;let t=e.dirname(n);if(t===n)return"";n=t}}(e.dirname(n),u);if(""===w)d.push(`(a) no package.json above ${e.dirname(n)}`);else{let t="";try{t=JSON.parse(l(e.join(w,"package.json"),"utf8")).name}catch(e){}let r=e.join(w,o);if(t!==i)d.push(`(a) ${e.join(w,"package.json")} name[${t}]`);else{if(u(r))return r;d.push(`(a) ${r}`)}}let D=`${i}/${o}`,y=[["b",n],["c",e.join(s,"noop.js")]];for(let[e,t]of y)try{let r=a(t).resolve(D);if(u(r))return r;d.push(`(${e}) ${r}`)}catch(r){d.push(`(${e}) resolve ${D} from ${t}`)}throw new Error(`cannot resolve ${o} of ${i} (the package must be installed with its server folder), tried: ${d.join("; ")}`)}let Hc="";function Uc(e,t=""){let r=Hr();if("string"!=typeof t||""===t)try{""===Hc&&(Hc=Vc({fpSelf:l.fileURLToPath("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:w&&"SCRIPT"===w.tagName.toUpperCase()&&w.src||new URL("w-web-perm.umd.js",document.baseURI).href)})),t=Hc}catch(e){return r.reject(e),r}let n=new o.Worker(t),s=!1,i=(e,t)=>{s||(s=!0,e(t));try{n.terminate().catch(()=>{})}catch(e){}};return n.on("message",e=>{"done"===e.mode?i(r.resolve,e.payload):"error"===e.mode&&i(r.reject,e.payload)}),n.on("error",e=>{i(r.reject,e)}),n.on("exit",e=>{i(r.reject,new Error(`staLogs worker exited without result, code=${e}`))}),n.postMessage(e),r}async function Bc(e,t,r){return 0===e.length?[]:Uc({kind:"scan",files:e,tStartMs:t,fmt:r})}async function Rc(e,t){return 0===e.length?{kp:{},errors:[]}:Uc({kind:"table",files:e,nowMs:t})}function Qc(e={}){return async function(e={}){let t=Sc(e),r=Me(e,"timeNow"),n="number"==typeof r?ms(r):ms(),s=n.valueOf(),i=Me(e,"scanTableFiles");Gr(i)||(i=Fc);let o=Me(e,"srLog",null),u=Zc(t,n.subtract(25,"hour"),"YYYY-MM-DDTHH"),{kp:l,errors:a}=await i(u.map(e=>({path:e.path,name:e.name})),s);for(let e of a)o&&Gr(o.warn)&&o.warn({event:"fun-staLogs",key:"staLogsFileSkipped",name:e.name,err:e.err});let c=[];for(let e in l)c.push({event:e,...l[e]});return c.sort((e,t)=>t.last1Day-e.last1Day),{rs:c,stat:{nFiles:u.length,errors:a}}}({...e,scanTableFiles:Rc})}async function Oc(e=7,t="hr",r={}){let n=await function(e=7,t="hr",r={}){return Kc(e,t,{...r,scanFiles:Bc})}(e,t,r);return n.rs}let Pc=["verifyConn","updateTargets-success","checkUser-error","api/getPerm-success","getWebInfor-success"],Jc=["api/getPermUserInfor-success","api/getUserByToken-success","getStaEvent-success","getStaEventTable-success","getTokenUser-error","getWebInfor-success","updateGrups-success","updatePemis-success","updateTabItems-pickKeysOnly","updateTargets-success","updateUsers-success","verifyConn","verifyConn-error"];function $c(e="hr",t=!0){let r="day"===e?"YYYY-MM-DD":"YYYY-MM-DDTHH",n="hr"===e?"hour":"day",s="hr"===e?48:7,i=function(e){return"many"===e?Jc:Pc}(t),o=ms("2025-01-01T00:00:00"),u=[];for(let e=0;e<s;e++){let t=o.add(e,n),s={count:0};i.forEach((t,r)=>{let n=Math.round(20+15*Math.sin((e+3*r)/4));s[t]=n,s.count+=n}),u.push({time:t.format(r),data:s})}return u}function _c(e={}){let t=Me(e,"fdLog","");er(t)||(t="./logs");let r=Me(e,"mock",!1),n=Me(e,"srLog",null),s=async(e=7,s="hr")=>{if(r)return $c(s,r);return await Oc(e,s,{fdLog:t,srLog:n})},i=Ac(),o=async()=>{if(r)return function(e=!0){if("many"!==e)return[{event:"verifyConn",last1Day:240,last8Hour:90,last4Hour:50,last1Hour:15},{event:"updateTargets-success",last1Day:180,last8Hour:70,last4Hour:38,last1Hour:11},{event:"checkUser-error",last1Day:120,last8Hour:45,last4Hour:24,last1Hour:7},{event:"api/getPerm-success",last1Day:90,last8Hour:33,last4Hour:18,last1Hour:5},{event:"getWebInfor-success",last1Day:60,last8Hour:22,last4Hour:12,last1Hour:3}];return Jc.map((e,t)=>{let r=400-20*t;return{event:e,last1Day:r,last8Hour:Math.round(.4*r),last4Hour:Math.round(.2*r),last1Hour:Math.round(.05*r)}})}(r);let e=await async function(e={}){return(await Qc(e)).rs}({fdLog:t,srLog:n});return e},u=Ac(),l={getStaEvent:async(e,t=7,r="hr")=>{let n=`${t}:${r}`,o=await i.getProxy(n,{fun:s,inputs:[t,r],timeExpired:3e4,timeFrom:"end",useCacheWhenError:!1}).catch(()=>Promise.reject("cannotGetStaEvent"));return Array.isArray(o)?o:Promise.reject("cannotGetStaEvent")},getStaEventTable:async e=>{let t=await u.getProxy("staEventTable",{fun:o,inputs:[],timeExpired:3e4,timeFrom:"end",useCacheWhenError:!1}).catch(()=>Promise.reject("cannotGetStaEventTable"));return Array.isArray(t)?t:Promise.reject("cannotGetStaEventTable")}};return l}function qc(e){return Array.from(e,e=>{let t=e.charCodeAt(0);return t<32||127===t?"?":e}).join("")}function ed(e){if(Lr(e))return e.map(ed);if(null==e||""===e)return"";if(!er(e))return`(${typeof e})`;let t=e.length,r=Math.min(4,Math.floor(t/8));return 0===r?`(len=${t})`:`${qc(e.slice(0,r))}...${qc(e.slice(-r))}(len=${t})`}function td(e){if(null===e||"object"!=typeof e||Lr(e))return ed(e);let t={};for(let r of Object.keys(e))t[r]="token"===r.toLowerCase()?ed(e[r]):e[r];return t}function rd(e){if(Lr(e))return e.map(rd);if(null==e||""===e)return"";if(!er(e))return`(${typeof e})`;let t=null;try{t=new URL(e)}catch(e){return"(invalid-url)"}return"http:"!==t.protocol&&"https:"!==t.protocol?t.protocol:`${t.origin}${t.pathname}`}let nd=["invalidUrl","invalidTokenSelf","invalidTokenTar","invalidUserIdTar","noTokenKeyValueInUrl","noTokenKeyUserIdInUrl","noTokenInUrl","cannotGetUserByUrl","cannotGetUsersByUrl","cannotGetUserDataByUrl","cannotGetUsersDataByUrl","noUserDataByUrl","noUsersDataByUrl","noUserDataAfterConvert"],sd=/^[A-Za-z]{1,40}$/;function id(e,t={}){let r=Me(t,"failValue",null),n=Me(t,"onFail",null);return async(...t)=>{try{return await e(...t)}catch(e){if(Gr(n))try{n(function(e){let t=er(e)?e:Me(e,"message");if(er(t)&&nd.includes(t))return{upstream:t};let r=null===e?"null":Lr(e)?"array":typeof e,n=Me(e,"name");return{upstreamType:r,upstreamName:er(n)&&sd.test(n)?n:""}}(e))}catch(e){}return r}}}function od({srLog:e}){return({userId:t,tableName:r,methodName:n})=>{let s="";return er(t)?"select"!==n&&(s="userNoPermission"):s="cannotFindUserId",""===s||(e.error({event:"authorizeExec",ok:!1,msg:s,userId:t,tableName:r,methodName:n}),!1)}}function ud(e,{srLog:t}){return async(r,n,s,i)=>{try{return await e(r,n,s,i)}catch(e){let i="string"==typeof e?e:e&&e.message||String(e);return t.error({event:"operOrm-error",msg:"anUnexpectedErrorOccurred",raw:i,userId:r,tableName:n,methodName:s}),Promise.reject("anUnexpectedErrorOccurred")}}}let ld=e=>"string"==typeof e,ad=e=>null!==e&&"object"==typeof e,cd=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),dd=e=>{let t=ad(e)?e.id:void 0;return ld(t)&&""!==t?t:"number"==typeof t&&Number.isFinite(t)?String(t):null};return function(r,n,s,i,o,u,l={}){let a=null;if(!Gr(r))throw console.log("invalid WOrm",r),new Error("invalid WOrm");if(!er(n))throw console.log("invalid url",n),new Error("invalid url");if(!er(s))throw console.log("invalid db",s),new Error("invalid db");if(!Gr(i))throw console.log("invalid getUserByToken",i),new Error("invalid getUserByToken");if(!Gr(o))throw console.log("invalid verifyClientUser",o),new Error("invalid verifyClientUser");if(!Gr(u))throw console.log("invalid verifyAppUser",u),new Error("invalid verifyAppUser");let c=Me(l,"serverPort");hr(c)||(c=11006),c=Cr(c);let d=Me(l,"webName",{}),w=Me(l,"webDescription",{}),D=Me(l,"webLogo",""),y=Me(l,"subfolder","");var M,g;er(y)&&("/"===Vr(y,1)&&(g=1,y=er(M=y)&&kr(g)?0===(g=Cr(g))?M:Fr(M,M.length-g):""),"/"!==Fr(y,1)&&(y=`/${y}`));let m=Me(l,"urlRedirect",""),I=Me(l,"showLanguage","n"),f=Me(l,"language","eng"),p=Me(l,"showModeEditTargets","n"),C=Me(l,"showModeEditPemis","n"),h=Me(l,"showModeEditGrups","n"),L=Me(l,"showModeEditUsers","n"),b=Me(l,"modeEditTargets","n"),N=Me(l,"modeEditPemis","n"),A=Me(l,"modeEditGrups","n"),x=Me(l,"modeEditUsers","n"),E=Me(l,"widthTargetId",""),T=Me(l,"widthTargetDescription",""),S=Me(l,"widthPemisName",""),Z=Me(l,"widthPemisDescription",""),v=Me(l,"widthGrupsName",""),Y=Me(l,"widthGrupsDescription",""),X=Me(l,"widthUsersName",""),j=Me(l,"widthUsersEmail",""),z=Me(l,"widthUsersDescription",""),G=Me(l,"mappingBy","");"id"!==G&&"email"!==G&&"name"!==G&&(G="id");let W=!1!==Me(l,"cascadeRename",!0),K=!("n"===Me(l,"lockExternalRows","y")||!1===Me(l,"lockExternalRows","y")),k=Me(l,"kpLangExt",null),F=Za({kpLangExt:k,webName:d,webDescription:w}),V=((e={})=>{let t=Me(e,"logFd","");er(t)||(t="./logs");let r=Me(e,"logInterval","");er(r)||(r="hr");let n=Me(e,"logNumKeep",null),s={fdLog:t,interval:r};if(null!=n&&""!==n){if(!hr(n))throw new Error(`invalid logNumKeep[${n}], must be positive integer`);s.numKeep=Cr(n)}return Nc(s)})(l);try{Qo(l)}catch(e){throw V.error({event:"WWebPerm-init-error",msg:e.message}),e}let H=e=>t=>{V.warn({event:`inject-${e}-fail`,...t})};i=id(i,{failValue:null,onFail:H("getUserByToken")}),o=id(o,{failValue:!1,onFail:H("verifyClientUser")}),u=id(u,{failValue:!1,onFail:H("verifyAppUser")});let U={};try{U=Pl(da,r,n,s)}catch(e){throw console.log(e),V.error({event:"WServOrm-init-error",msg:e&&e.message||"WServOrmInitFailed"}),e}let{woItems:B,procOrm:R}=U,Q=new function(){let e=new Map,t=new Map;return async(r,n)=>{let s=(e.get(r)||Promise.resolve()).then(async()=>await n(),async()=>await n());e.set(r,s.catch(()=>{})),t.set(r,(t.get(r)||0)+1);try{return await s}finally{let n=t.get(r)-1;n<=0?(t.delete(r),e.delete(r)):t.set(r,n)}}},O=new Map,P=function(e){return async(t,r,n,s={})=>{let i=Me(s,"errKey","");er(i)||(i="saveInProgress");let o=`${t}:${r}`;return await e.setWithFree([o],n).catch(e=>e===`setWithFree: key in use: ${o}`?Promise.reject(i):Promise.reject(e))}}(wn()),J=mc(B,R,{srLog:V,kmx:Q,lockSave:P,mappingBy:G,cascadeRename:W,lockExternalRows:K}),$=Me(l,"logFd","");er($)||($="./logs");let _=_c({fdLog:$,mock:Me(l,"staEventMock",!1),srLog:V}),q=async e=>{let t=null;if(er(e)&&(t=i(e),Wr(t)&&(t=await t)),!_t(t))return console.log("token",ed(e)),V.error({event:"getTokenUser-error",msg:"cannotFindUserFromToken"}),Promise.reject("cannotFindUserFromToken");await(async e=>{if(!er(Me(e,"id","")))return console.log("user",e),V.error({event:"checkUser-error",msg:"cannotGetUserId"}),Promise.reject("cannotGetUserId");if(!er(Me(e,"email","")))return console.log("user",e),V.error({event:"checkUser-error",msg:"cannotGetUserEmail"}),Promise.reject("cannotGetUserEmail");if(!er(Me(e,"name","")))return console.log("user",e),V.error({event:"checkUser-error",msg:"cannotGetUserName"}),Promise.reject("cannotGetUserName");let t=Me(e,"isAdmin","");return"y"===t||"n"===t||(console.log("user",e),console.log("user.isAdmin is not y or n",e.isAdmin),V.error({event:"checkUser-error",msg:"cannotGetUserRole"}),Promise.reject("cannotGetUserRole"))})(t);let r=Me(t,G,"");if(!er(r))return console.log("userSelf",t),console.log("mappingBy",G),V.error({event:"getTokenUser-error",msg:"cannotGetUserProp",mappingBy:G}),Promise.reject("cannotGetUserProp");let n=await B.users.select({[G]:r,isActive:"y"}),{user:s,count:o}=wc(n);return o>1?(console.log("mappingBy",G,"count",o),V.error({event:"getTokenUser-error",msg:"ambiguousUserFromPerm",mappingBy:G,count:o}),Promise.reject("ambiguousUserFromPerm")):_t(s)?s:(console.log("userSelf",t),console.log("mappingBy",G),V.error({event:"getTokenUser-error",msg:"cannotGetUserFromPerm",mappingBy:G}),Promise.reject("cannotGetUserFromPerm"))},ee=async(e,t="")=>{let r=await q(e),n=o(r,t);return Wr(n)&&(n=await n),n?r:(console.log("user",r),V.error({event:"getAndVerifyClientUser-error",msg:"userNoPermission",from:t}),Promise.reject("userNoPermission"))},te=async(e,t="")=>{let r=null;if(er(e)&&(r=i(e),Wr(r)&&(r=await r)),!_t(r))return console.log("token",ed(e)),V.error({event:"getAndVerifyAppUser-error",msg:"cannotFindUserFromToken"}),Promise.reject("cannotFindUserFromToken");let n=u(r,t);return Wr(n)&&(n=await n),n?r:(console.log("user",r),V.error({event:"getAndVerifyAppUser-error",msg:"userNoPermission",from:t}),Promise.reject("userNoPermission"))},re=async(e,t="")=>(await ee(e,t),!0),ne=async(e,t,r)=>await ac(Q,[r],async()=>{let n=Me(t,"from","");if(!er(n))return console.log("inp",t),V.error({event:"syncAndReplaceTabs-error",msg:"invalidFrom",keyTable:r}),Promise.reject("invalidFrom");let s=Me(t,"rows",[]);if(!Er(s))return console.log("inp",t),console.log("keyTable",r),V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",keyTable:r}),Promise.reject("invalidRows");let i=s.findIndex(e=>!gc(e));if(i>=0)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:"rowInvalid",keyTable:r,from:n,row:i}),Promise.reject("invalidRows");let o="users"===r?"cgrups":"grups"===r?"cpemis":"pemis"===r?"crules":null,u=null!==o?(l=o,s.map(e=>ad(e)&&cd(e,l))):null;var l;s=Ot(s,(e,t)=>(e.from=n,e)),s=en(s,da[r].keys);let a={from:!0,userId:!0,timeCreate:!0,userIdUpdate:!0,timeUpdate:!0},c=s.findIndex(e=>!Object.keys(e).some(t=>{return!0!==a[t]&&("string"==typeof(r=e[t])&&""!==r||"number"==typeof r&&Number.isFinite(r)||"boolean"==typeof r);var r}));if(c>=0)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:"rowBlank",keyTable:r,from:n,row:c}),Promise.reject("invalidRows");let d="targets"===r?"id":"grups"===r||"pemis"===r?"name":null;if(null!==d){let e=s.findIndex(e=>!er(Me(e,d)));if(e>=0)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:"id"===d?"idInvalid":"nameInvalid",keyTable:r,from:n,row:e,field:d}),Promise.reject("invalidRows")}if("name"===d){let e=oc(s,"name");if(e>=0)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:"nameDuplicate",keyTable:r,from:n,row:e,field:"name"}),Promise.reject("invalidRows")}if("users"===r){let e=function(e,t){let r=cc(t);if(null===r||!Array.isArray(e))return null;let n=e=>null!==e&&"object"==typeof e&&"y"===e.isActive,s=e.findIndex(e=>n(e)&&!(ic(e[r])&&e[r].trim().length>0));if(s>=0)return{reason:"mapKeyInvalid",k:s};let i=oc(e,r,n);return i>=0?{reason:"mapKeyDuplicate",k:i}:null}(s,G);if(null!==e)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:e.reason,keyTable:r,from:n,row:e.k,field:G}),Promise.reject("invalidRows")}let w=va(s);if(null!==w){let e="htmlMarkup"===w.reason?"htmlMarkupNotAllowed":"invalidRows";return V.error({event:"syncAndReplaceTabs-error",msg:e,reason:w.reason,keyTable:r,from:n,row:w.k,field:w.field}),Promise.reject(e)}let D=e=>{let t=Me(e,"id");return er(t)||"number"==typeof t&&Number.isFinite(t)?String(t):null},y=s.map(D).filter(e=>null!==e);if(y.length>0){let e=null;try{e=await B[r].select({id:{$in:y}})}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),s=fc(e,"anUnexpectedErrorOccurred");return V.error({event:"syncAndReplaceTabs-error",msg:s,raw:t,keyTable:r,from:n,step:"select"}),Promise.reject(s)}let t=new Map;for(let r of e)t.set(String(r.id),r.from);let i=s.findIndex(e=>{let r=D(e);return null!==r&&t.has(r)&&t.get(r)!==n});if(i>=0)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:"idOtherFrom",keyTable:r,from:n,row:i,field:"id"}),Promise.reject("invalidRows")}let M="name"===d?"name":"users"===r?cc(G):null;if(null!==M){let e=null;try{e=await B[r].select()}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),s=fc(e,"anUnexpectedErrorOccurred");return V.error({event:"syncAndReplaceTabs-error",msg:s,raw:t,keyTable:r,from:n,step:"select"}),Promise.reject(s)}let t=function(e,t,r,n,s={}){if(!Array.isArray(e)||!Array.isArray(t))return-1;let i=!0===s.onlyActive,o=new Set;for(let e of t)null!==e&&"object"==typeof e&&e.from!==r&&(i&&"y"!==e.isActive||ic(e[n])&&o.add(e[n]));for(let t=0;t<e.length;t++){let r=e[t];if(null!==r&&"object"==typeof r&&(!i||"y"===r.isActive)&&ic(r[n])&&o.has(r[n]))return t}return-1}(s,e,n,M,{onlyActive:"users"===r});if(t>=0)return V.error({event:"syncAndReplaceTabs-error",msg:"invalidRows",reason:"users"===r?"mapKeyOtherFrom":"nameOtherFrom",keyTable:r,from:n,row:t,field:M}),Promise.reject("invalidRows")}if(null!==u&&u.some(e=>!1===e)){let e=null;try{e=await B[r].select({from:n})}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),s=fc(e,"anUnexpectedErrorOccurred");return V.error({event:"syncAndReplaceTabs-error",msg:s,raw:t,keyTable:r,from:n,step:"select"}),Promise.reject(s)}let t=e=>null===va([{id:"keep",[o]:e}]),i="users"===r?function({rows:e,hasKey:t,rowsOldSameFrom:r,mappingBy:n="id",key:s="cgrups",isKeepable:i=()=>!0}){let o=new Map,u=new Map;r.forEach(e=>{ad(e)&&(ld(e.id)&&o.set(e.id,e),"email"!==n&&"name"!==n||!ld(e[n])||""===e[n]||(u.has(e[n])||u.set(e[n],[]),u.get(e[n]).push(e)))});let l="email"===n||"name"===n,a=0,c=0,d=0;return{rows:e.map((e,r)=>{if(!0===t[r]||!ad(e))return e;let w=dd(e),D=null;if(null!==w){if(D=o.has(w)?o.get(w):null,null!==D&&l&&(void 0===e[n]?"":e[n])!==(void 0===D[n]?"":D[n])&&(D=null,d++),null!==D&&l&&ld(e[n])&&""!==e[n]){let t=u.get(e[n]);void 0!==t&&t.some(e=>e!==D)&&(D=null,d++)}}else if(l&&ld(e[n])&&""!==e[n]){let t=u.get(e[n]);D=void 0!==t&&1===t.length?t[0]:null,void 0!==t&&t.length>1&&d++}return null!==D&&cd(D,s)?i(D[s])?(a++,{...e,[s]:D[s]}):(c++,e):e}),nKeep:a,nSkip:c,nConflict:d}}({rows:s,hasKey:u,rowsOldSameFrom:e,mappingBy:G,isKeepable:t}):function({rows:e,hasKey:t,rowsOldSameFrom:r,key:n,cascadeRename:s=!0,isKeepable:i=()=>!0}){let o=e=>void 0===e.name?"":e.name,u=new Set;e.forEach(e=>{let t=dd(e);null!==t&&u.add(t)});let l=new Map,a=new Map;r.forEach(e=>{ad(e)&&ld(e.id)&&(l.set(e.id,e),ld(e.name)&&!u.has(e.id)&&(a.has(e.name)||a.set(e.name,[]),a.get(e.name).push(e)))});let c=0,d=0,w=0;return{rows:e.map((e,r)=>{if(!0===t[r]||!ad(e))return e;let u=dd(e),D=null;if(null!==u)D=l.has(u)?l.get(u):null,null===D||o(D)===o(e)||!1!==s&&ld(o(D))&&ld(o(e))||(D=null,w++);else if(ld(e.name)&&a.has(e.name)){let t=a.get(e.name);1===t.length?D=t[0]:w++}return null!==D&&cd(D,n)?i(D[n])?(c++,{...e,[n]:D[n]}):(d++,e):e}),nKeep:c,nSkip:d,nConflict:w}}({rows:s,hasKey:u,rowsOldSameFrom:e,key:o,cascadeRename:W,isKeepable:t});s=i.rows,i.nKeep>0&&V.info({event:"syncAndReplaceTabs-keepAssign",keyTable:r,from:n,field:o,n:i.nKeep}),i.nSkip>0&&V.warn({event:"syncAndReplaceTabs-keepAssign-skip",keyTable:r,from:n,field:o,n:i.nSkip,reason:"notKeepable"}),i.nConflict>0&&V.warn({event:"syncAndReplaceTabs-keepAssign-skip",keyTable:r,from:n,field:o,n:i.nConflict,reason:"users"===r?"mapKeyConflict":"identityConflict"})}let g=null,m=null;if(Object.prototype.hasOwnProperty.call(Ya,r)){try{let e=await B[r].select();g={rowsOld:e,rowsNew:Mc(r,e,s,n)}}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),s=fc(e,"anUnexpectedErrorOccurred");return V.error({event:"syncAndReplaceTabs-error",msg:s,raw:t,keyTable:r,from:n,step:"select"}),Promise.reject(s)}if(m=Va({keyTable:r,rowsOld:g.rowsOld,rowsNew:g.rowsNew,opt:{cascadeRename:W}}),"grups"===r||"pemis"===r){let e=function(e,t){let r=new Set;t.forEach(e=>{let t=dd(e);null!==t&&r.add(t)});let n=new Map;e.forEach(e=>{ad(e)&&ld(e.id)&&ld(e.name)&&!r.has(e.id)&&(n.has(e.name)||n.set(e.name,new Set),n.get(e.name).add(e.id))});let s=0;return t.forEach(e=>{null!==dd(e)&&ad(e)&&ld(e.name)&&n.has(e.name)&&s++}),s}(g.rowsOld.filter(e=>null!==e&&"object"==typeof e&&e.from===n),s);((e,t,r)=>{let n=`${e}\0${t}`;r>0?O.set(n,{keyTable:e,from:t,n:r,time:(new Date).toISOString()}):O.delete(n)})(r,n,e),e>0&&V.warn({event:"syncAndReplaceTabs-idRenumber",keyTable:r,from:n,n:e})}}let I=async(t,i)=>{let o=null;try{o=await yc({plan:t,holdersOld:i,woItems:B,procOrm:R,userId:e,srLog:V,writeMain:async()=>(await B[r].delAll({from:n}),await R(e,r,"insert",s))})}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),s=fc(e);return V.error({event:"syncAndReplaceTabs-error",msg:s,raw:t,keyTable:r,from:n}),Promise.reject(s)}return o};if(null!==m&&(m.renames.length>0||m.delNames.length>0)){let e=Ya[r].holder;return await ac(Q,[e],async()=>{let t=null;try{t=await B[e].select()}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),s=fc(e,"anUnexpectedErrorOccurred");return V.error({event:"syncAndReplaceTabs-error",msg:s,raw:t,keyTable:r,from:n,step:"select"}),Promise.reject(s)}let s=Ha({keyTable:r,rowsOld:g.rowsOld,rowsNew:g.rowsNew,holdersOld:t,opt:{cascadeRename:W}}),i=null!==s.err?s.err:Dc(s);if(null!==i){let e="htmlMarkupNotAllowed"===i?"htmlMarkupNotAllowed":"invalidRows";return V.error({event:"syncAndReplaceTabs-error",msg:e,reason:i,keyTable:r,from:n}),Promise.reject(e)}return await I(s,t)},[r])}return await I(null,[])}),se=async e=>{let t=await(async(e,t)=>{let r=await B.users.select({[e]:t,isActive:"y"}),{user:n}=wc(r);return _t(n)?n:null})("id",e);return _t(t)?t:null},ie=async e=>{let t=await se(e),r=await B.grups.select(),n=await B.pemis.select(),s=await B.targets.select(),i=null;try{i=Aa(t,r,n,s)}catch(t){return console.log("userId",e),console.log("getUserRules",t),V.error({event:"getGenUserAndRulesByUserId-error",msg:"cannotGetUserRules",userId:e}),Promise.reject("cannotGetUserRules")}if(!_t(i))return console.log("userId",e),V.error({event:"getGenUserAndRulesByUserId-error",msg:"cannotGetUserRules",userId:e}),Promise.reject("cannotGetUserRules");let o=Ot(Me(i,"grups",[]),"name");return o=Jt(o,";"),{user:{...t,grupsNames:o},rules:Me(i,"rules",[])}},oe="dist",ue="./node_modules/w-web-perm/dist";Qr(ue)&&(oe=ue);let le="index.html";try{let r=e.resolve(oe,"index.tmp");if(Pr(r)||(r=e.resolve(oe,le)),!Pr(r))throw console.log("fpEntryIn",r),new Error("invalid fpEntryIn");let n=e.resolve(oe,le),s=t.readFileSync(r,"utf8");s=Jr(s,"/mperm/","{sfd}/"),s=Jr(s,"{sfd}",y),s=Jr(s,"{urlRedirect}",m),s=Jr(s,"{language}",f),t.writeFileSync(n,s,"utf8")}catch(e){console.log(e),console.log(`can not generate ${le}`)}let ae=[{method:"GET",path:"/api/getUserByToken",handler:async function(e,t){let r=await Ur(async function(){let t=Me(e,"query.token","");if(!er(t))return console.log("req.query",td(Me(e,"query"))),console.log("token",ed(t)),console.log("[API]getUserByToken/check token: invalid token"),V.error({event:"api/getUserByToken-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=await ee(t,"getUserByToken");return _t(r)?(V.info({event:"api/getUserByToken-success",userId:Me(r,"id","")}),r):(console.log("token",ed(t)),console.log("[API]getUserByToken/check user: invalid user"),V.error({event:"api/getUserByToken-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission"))})();return zr(r.msg)&&(r.msg=r.msg.message),r}},{method:"GET",path:"/api/getPerm",handler:async function(e,t){let r=await Ur(async function(){let t=Me(e,"query.token","");if(!er(t))return console.log("req.query",td(Me(e,"query"))),console.log("token",ed(t)),console.log("[API]getPerm/check token: invalid token"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=await ee(t,"getPerm");if(!_t(r))return console.log("token",ed(t)),console.log("[API]getPerm/check userSelf: invalid userSelf"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let n=Me(r,"id","");if(!er(n))return console.log("token",ed(t)),console.log("userSelf",r),console.log("[API]getPerm/check userIdSelf: invalid userIdSelf"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let s=await ie(n);return _t(s)?(V.info({event:"api/getPerm-success",userId:n}),s):(console.log("token",ed(t)),console.log("userSelf",r),console.log("userIdSelf",n),console.log("[API]getPerm/check userWithRulesSelf: invalid userWithRulesSelf"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission"))})();return zr(r.msg)&&(r.msg=r.msg.message),r}},{method:"GET",path:"/api/getPermUserInfor",handler:async function(e,t){let r=await Ur(async function(){let t=Me(e,"query.token","");if(!er(t))return console.log("req.query",td(Me(e,"query"))),console.log("[API]getPermUserInfor/check tokenSelf: invalid tokenSelf"),V.error({event:"api/getPermUserInfor-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");if(!_t(await te(t,"getPermUserInfor")))return console.log("req.query",td(Me(e,"query"))),console.log("tokenSelf",ed(t)),console.log("[API]getPermUserInfor/check userSelf: invalid userSelf"),V.error({event:"api/getPermUserInfor-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=Me(e,"query.userId","");if(!er(r))return console.log("req.query",td(Me(e,"query"))),console.log("tokenSelf",ed(t)),console.log("[API]getPermUserInfor/check userIdFind: invalid userIdFind"),V.error({event:"api/getPermUserInfor-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let n=await ie(r);return _t(n)?(V.info({event:"api/getPermUserInfor-success",userId:r}),n):(console.log("userIdFind",r),console.log("[API]getPermUserInfor/check userWithRulesFind: invalid userWithRulesFind"),V.error({event:"api/getPermUserInfor-error",msg:"userIdNoPermrules"}),Promise.reject("userIdNoPermrules"))})();return zr(r.msg)&&(r.msg=r.msg.message),r}},{method:"POST",path:"/syncAndReplaceTabs",handler:async function(e,t){let r=await Ur(async function(){let t=Me(e,"query.token","");if(!er(t))return console.log("req.query",td(Me(e,"query"))),console.log("token",ed(t)),console.log("[API]syncAndReplaceTabs/check token: invalid token"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=Me(e,"query.keyTable","");if(!er(r))return console.log("req.query",td(Me(e,"query"))),console.log("keyTable",r),console.log("[API]syncAndReplaceTabs/check keyTable: invalid keyTable"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");if(!["targets","pemis","grups","users"].includes(r))return console.log("[API]syncAndReplaceTabs/check keyTable: unexpected keyTable",r),V.error({event:"api/syncAndReplaceTabs-error",msg:"invalidKeyTable",keyTable:r}),Promise.reject("invalidKeyTable");let n=await te(t,"syncAndReplaceTabs");if(!_t(n))return console.log("token",ed(t)),console.log("[API]syncAndReplaceTabs/check user: invalid user"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let s=Me(n,"id","");if(!er(s))return console.log("token",ed(t)),console.log("user",n),console.log("[API]syncAndReplaceTabs/check userId: invalid userId"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let i=await(async e=>{let t=Me(e,"payload");if(er(t)&&(t=Kr(t)),!_t(t))return console.log("payload",t),V.error({event:"parsePayload-error",msg:"invalidPayload"}),Promise.reject("invalidPayload");let r=Me(t,"from","");if(!er(r))return console.log("payload",t),V.error({event:"parsePayload-error",msg:"invalidFromInPayload"}),Promise.reject("invalidFromInPayload");let n=Me(t,"rows",[]);return Er(n)?{from:r,rows:n}:(console.log("payload",t),V.error({event:"parsePayload-error",msg:"invalidRowsInPayload"}),Promise.reject("invalidRowsInPayload"))})(e),o=await ne(s,i,r);return V.info({event:"api/syncAndReplaceTabs-success",userId:s,keyTable:r}),o})();return zr(r.msg)&&(r.msg=r.msg.message),r}}],ce=at(da),de=ce,we={port:c,pathStaticFiles:oe,apiName:"api",apis:ae,tokenType:"Bearer",verifyConn:async({apiType:e,authorization:t,query:r,headers:n,req:s})=>{let i=function(e,t){return er(e)&&kr(t)?0===(t=Cr(t))?e:Vr(e,e.length-t):""}(t,7);if(!er(i))return console.log("apiType",e),console.log("authorization",ed(t)),console.log("invalid token"),V.error({event:"verifyConn-error",ok:!1,apiType:e,msg:"tokenNoPermission"}),!1;let o=!1,u="";await re(i,e).then(()=>{o=!0}).catch(e=>{u="string"==typeof e?e:e&&e.message||"checkTokenFail"});let l=Me(n,"x-forwarded-for","").split(",")[0].trim();er(l)||(l=Me(s,"info.remoteAddress","")||Me(s,"socket.remoteAddress","")||Me(s,"connection.remoteAddress",""));let a=Me(n,"origin",""),c=rd(Me(n,"referer",""));return o?V.info({event:"verifyConn",ok:o,apiType:e,ip:l,origin:a,referer:c}):V.error({event:"verifyConn-error",ok:o,apiType:e,ip:l,origin:a,referer:c,msg:u}),o},getUserIdByToken:async e=>{let t=Me(await i(e),"id","");return er(t)?t:(console.log("token",ed(e)),console.log("userId",t),V.error({event:"getUserIdByToken-error",msg:"cannotFindUserId"}),Promise.reject("cannotFindUserId"))},corsOrigins:["*"],useDbOrm:!0,kpOrm:B,operOrm:ud(R,{srLog:V}),tableNamesExec:ce,methodsExec:["select"],authorizeExec:od({srLog:V}),tableNamesSync:de,kpFunExt:{getWebInfor:e=>(V.info({event:"getWebInfor-success",userId:e}),{webLogo:D,showLanguage:I,language:f,kpLang:F,showModeEditTargets:p,showModeEditPemis:C,showModeEditGrups:h,showModeEditUsers:L,modeEditTargets:b,modeEditPemis:N,modeEditGrups:A,modeEditUsers:x,cascadeRename:W,lockExternalRows:K?"y":"n",syncWarns:[...O.values()],widthTargetId:E,widthTargetDescription:T,widthPemisName:S,widthPemisDescription:Z,widthGrupsName:v,widthGrupsDescription:Y,widthUsersName:X,widthUsersEmail:j,widthUsersDescription:z}),updateTargets:(e,t,r)=>J.updateTargets(e,t,r),updatePemis:(e,t,r)=>J.updatePemis(e,t,r),updateGrups:(e,t,r)=>J.updateGrups(e,t,r),updateUsers:(e,t,r)=>{let n=null!==r&&"object"==typeof r&&void 0!==r.baseline&&null!==r.baseline?{baseline:r.baseline}:{};return"for:grups"===x&&(n.pickKeysOnly=["cgrups"]),J.updateUsers(e,t,n)},getStaEvent:async(e,t,r)=>{try{let n=await _.getStaEvent(e,t,r);return V.info({event:"getStaEvent-success",userId:e}),n}catch(t){throw V.error({event:"getStaEvent-error",userId:e,msg:"string"==typeof t?t:t&&t.message||"cannotGetStaEvent"}),t}},getStaEventTable:async e=>{try{let t=await _.getStaEventTable(e);return V.info({event:"getStaEventTable-success",userId:e}),t}catch(t){throw V.error({event:"getStaEventTable-error",userId:e,msg:"string"==typeof t?t:t&&t.message||"cannotGetStaEventTable"}),t}}},fpTableTags:"tableTags-web-perm.json"};try{a=new Uo(we)}catch(e){throw console.log(e),V.error({event:"WServHapiServer-init-error",msg:e&&e.message||"WServHapiServerInitFailed"}),e}return a}});
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("path"),require("fs"),require("@hapi/hapi"),require("@hapi/inert"),require("stream"),require("http"),require("worker_threads"),require("util"),require("url"),require("pino"),require("module"),require("readline")):"function"==typeof define&&define.amd?define(["path","fs","@hapi/hapi","@hapi/inert","stream","http","worker_threads","util","url","pino","module","readline"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-web-perm"]=t(e.path,e.fs,e["@hapi/hapi"],e["@hapi/inert"],e.stream,e.http,e.require$$0$1,e.util$2,e.url,e.pino,e.module$1,e.readline)}(this,function(e,t,r,n,i,s,o,u,l,a,c,d){"use strict";var w="undefined"!=typeof document?document.currentScript:null,y=Array.isArray,g="object"==typeof global&&global&&global.Object===Object&&global,D="object"==typeof self&&self&&self.Object===Object&&self,m=g||D||Function("return this")(),M=m.Symbol,f=Object.prototype,p=f.hasOwnProperty,I=f.toString,h=M?M.toStringTag:void 0;var C=Object.prototype.toString;var L=M?M.toStringTag:void 0;function b(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":L&&L in Object(e)?function(e){var t=p.call(e,h),r=e[h];try{e[h]=void 0;var n=!0}catch(e){}var i=I.call(e);return n&&(t?e[h]=r:delete e[h]),i}(e):function(e){return C.call(e)}(e)}function N(e){return null!=e&&"object"==typeof e}function A(e){return"symbol"==typeof e||N(e)&&"[object Symbol]"==b(e)}var x=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,E=/^\w*$/;function T(e,t){if(y(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!A(e))||(E.test(e)||!x.test(e)||null!=t&&e in Object(t))}function v(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function S(e){if(!v(e))return!1;var t=b(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}var Z,j=m["__core-js_shared__"],Y=(Z=/[^.]+$/.exec(j&&j.keys&&j.keys.IE_PROTO||""))?"Symbol(src)_1."+Z:"";var X=Function.prototype.toString;function z(e){if(null!=e){try{return X.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var G=/^\[object .+?Constructor\]$/,W=Function.prototype,K=Object.prototype,k=W.toString,F=K.hasOwnProperty,V=RegExp("^"+k.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function H(e){return!(!v(e)||(t=e,Y&&Y in t))&&(S(e)?V:G).test(z(e));var t}function U(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return H(r)?r:void 0}var B=U(Object,"create");var R=Object.prototype.hasOwnProperty;var O=Object.prototype.hasOwnProperty;function P(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function Q(e,t){return e===t||e!=e&&t!=t}function J(e,t){for(var r=e.length;r--;)if(Q(e[r][0],t))return r;return-1}P.prototype.clear=function(){this.__data__=B?B(null):{},this.size=0},P.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},P.prototype.get=function(e){var t=this.__data__;if(B){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return R.call(t,e)?t[e]:void 0},P.prototype.has=function(e){var t=this.__data__;return B?void 0!==t[e]:O.call(t,e)},P.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=B&&void 0===t?"__lodash_hash_undefined__":t,this};var $=Array.prototype.splice;function _(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}_.prototype.clear=function(){this.__data__=[],this.size=0},_.prototype.delete=function(e){var t=this.__data__,r=J(t,e);return!(r<0)&&(r==t.length-1?t.pop():$.call(t,r,1),--this.size,!0)},_.prototype.get=function(e){var t=this.__data__,r=J(t,e);return r<0?void 0:t[r][1]},_.prototype.has=function(e){return J(this.__data__,e)>-1},_.prototype.set=function(e,t){var r=this.__data__,n=J(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var q=U(m,"Map");function ee(e,t){var r,n,i=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?i["string"==typeof t?"string":"hash"]:i.map}function te(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}te.prototype.clear=function(){this.size=0,this.__data__={hash:new P,map:new(q||_),string:new P}},te.prototype.delete=function(e){var t=ee(this,e).delete(e);return this.size-=t?1:0,t},te.prototype.get=function(e){return ee(this,e).get(e)},te.prototype.has=function(e){return ee(this,e).has(e)},te.prototype.set=function(e,t){var r=ee(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function re(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],s=r.cache;if(s.has(i))return s.get(i);var o=e.apply(this,n);return r.cache=s.set(i,o)||s,o};return r.cache=new(re.Cache||te),r}re.Cache=te;var ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ie=/\\(\\)?/g,se=function(e){var t=re(e,function(e){return 500===r.size&&r.clear(),e}),r=t.cache;return t}(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(ne,function(e,r,n,i){t.push(n?i.replace(ie,"$1"):r||e)}),t}),oe=se;function ue(e,t){for(var r=-1,n=null==e?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}var le=M?M.prototype:void 0,ae=le?le.toString:void 0;function ce(e){if("string"==typeof e)return e;if(y(e))return ue(e,ce)+"";if(A(e))return ae?ae.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function de(e){return null==e?"":ce(e)}function we(e,t){return y(e)?e:T(e,t)?[e]:oe(de(e))}function ye(e){if("string"==typeof e||A(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function ge(e,t){for(var r=0,n=(t=we(t,e)).length;null!=e&&r<n;)e=e[ye(t[r++])];return r&&r==n?e:void 0}function De(e,t,r){var n=null==e?void 0:ge(e,t);return void 0===n?r:n}function me(e){var t=this.__data__=new _(e);this.size=t.size}me.prototype.clear=function(){this.__data__=new _,this.size=0},me.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},me.prototype.get=function(e){return this.__data__.get(e)},me.prototype.has=function(e){return this.__data__.has(e)},me.prototype.set=function(e,t){var r=this.__data__;if(r instanceof _){var n=r.__data__;if(!q||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new te(n)}return r.set(e,t),this.size=r.size,this};function Me(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new te;++t<r;)this.add(e[t])}function fe(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function pe(e,t){return e.has(t)}Me.prototype.add=Me.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Me.prototype.has=function(e){return this.__data__.has(e)};function Ie(e,t,r,n,i,s){var o=1&r,u=e.length,l=t.length;if(u!=l&&!(o&&l>u))return!1;var a=s.get(e),c=s.get(t);if(a&&c)return a==t&&c==e;var d=-1,w=!0,y=2&r?new Me:void 0;for(s.set(e,t),s.set(t,e);++d<u;){var g=e[d],D=t[d];if(n)var m=o?n(D,g,d,t,e,s):n(g,D,d,e,t,s);if(void 0!==m){if(m)continue;w=!1;break}if(y){if(!fe(t,function(e,t){if(!pe(y,t)&&(g===e||i(g,e,r,n,s)))return y.push(t)})){w=!1;break}}else if(g!==D&&!i(g,D,r,n,s)){w=!1;break}}return s.delete(e),s.delete(t),w}var he=m.Uint8Array;function Ce(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function Le(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var be=M?M.prototype:void 0,Ne=be?be.valueOf:void 0;function Ae(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}function xe(e,t,r){var n=t(e);return y(e)?n:Ae(n,r(e))}function Ee(e,t){for(var r=-1,n=null==e?0:e.length,i=0,s=[];++r<n;){var o=e[r];t(o,r,e)&&(s[i++]=o)}return s}function Te(){return[]}var ve=Object.prototype.propertyIsEnumerable,Se=Object.getOwnPropertySymbols,Ze=Se?function(e){return null==e?[]:(e=Object(e),Ee(Se(e),function(t){return ve.call(e,t)}))}:Te;function je(e){return N(e)&&"[object Arguments]"==b(e)}var Ye=Object.prototype,Xe=Ye.hasOwnProperty,ze=Ye.propertyIsEnumerable,Ge=je(function(){return arguments}())?je:function(e){return N(e)&&Xe.call(e,"callee")&&!ze.call(e,"callee")},We=Ge;var Ke="object"==typeof exports&&exports&&!exports.nodeType&&exports,ke=Ke&&"object"==typeof module&&module&&!module.nodeType&&module,Fe=ke&&ke.exports===Ke?m.Buffer:void 0,Ve=(Fe?Fe.isBuffer:void 0)||function(){return!1},He=/^(?:0|[1-9]\d*)$/;function Ue(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&He.test(e))&&e>-1&&e%1==0&&e<t}function Be(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var Re={};function Oe(e){return function(t){return e(t)}}Re["[object Float32Array]"]=Re["[object Float64Array]"]=Re["[object Int8Array]"]=Re["[object Int16Array]"]=Re["[object Int32Array]"]=Re["[object Uint8Array]"]=Re["[object Uint8ClampedArray]"]=Re["[object Uint16Array]"]=Re["[object Uint32Array]"]=!0,Re["[object Arguments]"]=Re["[object Array]"]=Re["[object ArrayBuffer]"]=Re["[object Boolean]"]=Re["[object DataView]"]=Re["[object Date]"]=Re["[object Error]"]=Re["[object Function]"]=Re["[object Map]"]=Re["[object Number]"]=Re["[object Object]"]=Re["[object RegExp]"]=Re["[object Set]"]=Re["[object String]"]=Re["[object WeakMap]"]=!1;var Pe="object"==typeof exports&&exports&&!exports.nodeType&&exports,Qe=Pe&&"object"==typeof module&&module&&!module.nodeType&&module,Je=Qe&&Qe.exports===Pe&&g.process,$e=function(){try{var e=Qe&&Qe.require&&Qe.require("util").types;return e||Je&&Je.binding&&Je.binding("util")}catch(e){}}(),_e=$e&&$e.isTypedArray,qe=_e?Oe(_e):function(e){return N(e)&&Be(e.length)&&!!Re[b(e)]},et=Object.prototype.hasOwnProperty;function tt(e,t){var r=y(e),n=!r&&We(e),i=!r&&!n&&Ve(e),s=!r&&!n&&!i&&qe(e),o=r||n||i||s,u=o?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],l=u.length;for(var a in e)!t&&!et.call(e,a)||o&&("length"==a||i&&("offset"==a||"parent"==a)||s&&("buffer"==a||"byteLength"==a||"byteOffset"==a)||Ue(a,l))||u.push(a);return u}var rt=Object.prototype;function nt(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||rt)}function it(e,t){return function(r){return e(t(r))}}var st=it(Object.keys,Object),ot=Object.prototype.hasOwnProperty;function ut(e){if(!nt(e))return st(e);var t=[];for(var r in Object(e))ot.call(e,r)&&"constructor"!=r&&t.push(r);return t}function lt(e){return null!=e&&Be(e.length)&&!S(e)}function at(e){return lt(e)?tt(e):ut(e)}function ct(e){return xe(e,at,Ze)}var dt=Object.prototype.hasOwnProperty;var wt=U(m,"DataView"),yt=U(m,"Promise"),gt=U(m,"Set"),Dt=U(m,"WeakMap"),mt="[object Map]",Mt="[object Promise]",ft="[object Set]",pt="[object WeakMap]",It="[object DataView]",ht=z(wt),Ct=z(q),Lt=z(yt),bt=z(gt),Nt=z(Dt),At=b;(wt&&At(new wt(new ArrayBuffer(1)))!=It||q&&At(new q)!=mt||yt&&At(yt.resolve())!=Mt||gt&&At(new gt)!=ft||Dt&&At(new Dt)!=pt)&&(At=function(e){var t=b(e),r="[object Object]"==t?e.constructor:void 0,n=r?z(r):"";if(n)switch(n){case ht:return It;case Ct:return mt;case Lt:return Mt;case bt:return ft;case Nt:return pt}return t});var xt=At,Et="[object Arguments]",Tt="[object Array]",vt="[object Object]",St=Object.prototype.hasOwnProperty;function Zt(e,t,r,n,i,s){var o=y(e),u=y(t),l=o?Tt:xt(e),a=u?Tt:xt(t),c=(l=l==Et?vt:l)==vt,d=(a=a==Et?vt:a)==vt,w=l==a;if(w&&Ve(e)){if(!Ve(t))return!1;o=!0,c=!1}if(w&&!c)return s||(s=new me),o||qe(e)?Ie(e,t,r,n,i,s):function(e,t,r,n,i,s,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!s(new he(e),new he(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Q(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var u=Ce;case"[object Set]":var l=1&n;if(u||(u=Le),e.size!=t.size&&!l)return!1;var a=o.get(e);if(a)return a==t;n|=2,o.set(e,t);var c=Ie(u(e),u(t),n,i,s,o);return o.delete(e),c;case"[object Symbol]":if(Ne)return Ne.call(e)==Ne.call(t)}return!1}(e,t,l,r,n,i,s);if(!(1&r)){var g=c&&St.call(e,"__wrapped__"),D=d&&St.call(t,"__wrapped__");if(g||D){var m=g?e.value():e,M=D?t.value():t;return s||(s=new me),i(m,M,r,n,s)}}return!!w&&(s||(s=new me),function(e,t,r,n,i,s){var o=1&r,u=ct(e),l=u.length;if(l!=ct(t).length&&!o)return!1;for(var a=l;a--;){var c=u[a];if(!(o?c in t:dt.call(t,c)))return!1}var d=s.get(e),w=s.get(t);if(d&&w)return d==t&&w==e;var y=!0;s.set(e,t),s.set(t,e);for(var g=o;++a<l;){var D=e[c=u[a]],m=t[c];if(n)var M=o?n(m,D,c,t,e,s):n(D,m,c,e,t,s);if(!(void 0===M?D===m||i(D,m,r,n,s):M)){y=!1;break}g||(g="constructor"==c)}if(y&&!g){var f=e.constructor,p=t.constructor;f==p||!("constructor"in e)||!("constructor"in t)||"function"==typeof f&&f instanceof f&&"function"==typeof p&&p instanceof p||(y=!1)}return s.delete(e),s.delete(t),y}(e,t,r,n,i,s))}function jt(e,t,r,n,i){return e===t||(null==e||null==t||!N(e)&&!N(t)?e!=e&&t!=t:Zt(e,t,r,n,jt,i))}function Yt(e){return e==e&&!v(e)}function Xt(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function zt(e){var t=function(e){for(var t=at(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,Yt(i)]}return t}(e);return 1==t.length&&t[0][2]?Xt(t[0][0],t[0][1]):function(r){return r===e||function(e,t,r,n){var i=r.length,s=i,o=!n;if(null==e)return!s;for(e=Object(e);i--;){var u=r[i];if(o&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i<s;){var l=(u=r[i])[0],a=e[l],c=u[1];if(o&&u[2]){if(void 0===a&&!(l in e))return!1}else{var d=new me;if(n)var w=n(a,c,l,e,t,d);if(!(void 0===w?jt(c,a,3,n,d):w))return!1}}return!0}(r,e,t)}}function Gt(e,t){return null!=e&&t in Object(e)}function Wt(e,t){return null!=e&&function(e,t,r){for(var n=-1,i=(t=we(t,e)).length,s=!1;++n<i;){var o=ye(t[n]);if(!(s=null!=e&&r(e,o)))break;e=e[o]}return s||++n!=i?s:!!(i=null==e?0:e.length)&&Be(i)&&Ue(o,i)&&(y(e)||We(e))}(e,t,Gt)}function Kt(e){return e}function kt(e){return function(t){return null==t?void 0:t[e]}}function Ft(e){return T(e)?kt(ye(e)):function(e){return function(t){return ge(t,e)}}(e)}function Vt(e){return"function"==typeof e?e:null==e?Kt:"object"==typeof e?y(e)?function(e,t){return T(e)&&Yt(t)?Xt(ye(e),t):function(r){var n=De(r,e);return void 0===n&&n===t?Wt(r,e):jt(t,n,3)}}(e[0],e[1]):zt(e):Ft(e)}var Ht,Ut=function(e,t,r){for(var n=-1,i=Object(e),s=r(e),o=s.length;o--;){var u=s[Ht?o:++n];if(!1===t(i[u],u,i))break}return e};var Bt=function(e,t){return function(r,n){if(null==r)return r;if(!lt(r))return e(r,n);for(var i=r.length,s=t?i:-1,o=Object(r);(t?s--:++s<i)&&!1!==n(o[s],s,o););return r}}(function(e,t){return e&&Ut(e,t,at)}),Rt=Bt;function Ot(e,t){var r=-1,n=lt(e)?Array(e.length):[];return Rt(e,function(e,i,s){n[++r]=t(e,i,s)}),n}function Pt(e,t){return(y(e)?ue:Ot)(e,Vt(t))}var Qt=Array.prototype.join;function Jt(e,t){return null==e?"":Qt.call(e,t)}function $t(e){return"[object Object]"===Object.prototype.toString.call(e)}function _t(e){if($t(e)){for(let t in e)return!0;return!1}return!1}function qt(e){return"[object String]"===Object.prototype.toString.call(e)}function er(e){return!!(qt(e)&&e.length>0)}var tr=/\s/;var rr=/^\s+/;function nr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&tr.test(e.charAt(t)););return t}(e)+1).replace(rr,""):e}var ir=/^[-+]0x[0-9a-f]+$/i,sr=/^0b[01]+$/i,or=/^0o[0-7]+$/i,ur=parseInt;function lr(e){if("number"==typeof e)return e;if(A(e))return NaN;if(v(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=v(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=nr(e);var r=sr.test(e);return r||or.test(e)?ur(e.slice(2),r?2:8):ir.test(e)?NaN:+e}var ar=1/0;function cr(e){return e?(e=lr(e))===ar||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function dr(e){var t=cr(e),r=t%1;return t==t?r?t-r:t:0}function wr(e){return!0===(t=e)||!1===t||N(t)&&"[object Boolean]"==b(t);var t}function yr(e){if(e!=e)return!0;if(null!==e&&"object"==typeof e)try{let t=Number.prototype.valueOf.call(e);return Number.isNaN(t)}catch(e){return!1}return!1}function gr(e){let t=!1;if(er(e)){if(""===e.trim())return!1;t=!isNaN(Number(e))}else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(yr(e))return!1;t=!0}return t}function Dr(e){if(!gr(e))return 0;return cr(e)}function mr(e,t={}){let r=De(t,"useLimitSafe",null);return wr(r)||(r=!1),!!gr(e)&&(e=Dr(e),r?Number.isSafeInteger(e):"number"==typeof(n=e)&&n==dr(n));var n}var Mr=m.isFinite,fr=Math.min;var pr,Ir=(pr=Math["round"],function(e,t){if(e=lr(e),(t=null==t?0:fr(dr(t),292))&&Mr(e)){var r=(de(e)+"e").split("e");return+((r=(de(pr(r[0]+"e"+(+r[1]+t)))+"e").split("e"))[0]+"e"+(+r[1]-t))}return pr(e)});function hr(e,t={}){let r=De(t,"useClampSafe",null);wr(r)||(r=!1);let n=De(t,"useLimitSafe",null);wr(n)||(n=!1);let i=De(t,"returnWithStateAndMsg",null);wr(i)||(i=!1);let s=e=>i?{state:"success",msg:e}:e,o=e=>{if(i)return{state:"error",msg:e};throw new Error(e)};if(!gr(e))return s(0);let u=null;try{e=Dr(e),u=Ir(e),r&&(u>Number.MAX_SAFE_INTEGER?u=Number.MAX_SAFE_INTEGER:u<Number.MIN_SAFE_INTEGER&&(u=Number.MIN_SAFE_INTEGER))}catch(e){return o(e.toString())}return n&&!Number.isSafeInteger(Number(u))?o(`v[${e}] is not a safe integer`):("0"===String(u)&&(u=0),s(u))}function Cr(e,t={}){if(!mr(e,t))return!1;return hr(e)>0}function Lr(e){return"[object Array]"===Object.prototype.toString.call(e)}function br(e){return"[object Undefined]"===Object.prototype.toString.call(e)}function Nr(e){if($t(e)){for(let t in e)return!1;return!0}return!1}function Ar(e){return!!Lr(e)&&0===e.length}function xr(e){return!!br(e)||(!!function(e){return"[object Null]"===Object.prototype.toString.call(e)}(e)||(!!Nr(e)||(!!function(e){return!(!qt(e)||0!==e.length)}(e)||(!!Ar(e)||!!yr(e)))))}function Er(e){return!!Lr(e)&&(0!==e.length&&(1!==e.length||!xr(e[0])))}var Tr=it(Object.getPrototypeOf,Object),vr=Function.prototype,Sr=Object.prototype,Zr=vr.toString,jr=Sr.hasOwnProperty,Yr=Zr.call(Object);function Xr(e){if(!N(e)||"[object Object]"!=b(e))return!1;var t=Tr(e);if(null===t)return!0;var r=jr.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Zr.call(r)==Yr}function zr(e){return function(e){if(!N(e))return!1;var t=b(e);return"[object Error]"==t||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Xr(e)}(e)}function Gr(e){return S(e)}function Wr(e){let t,r;try{r=Object.prototype.toString.call(e)}catch(e){return!1}if(t="[object Promise]"===r,t)return!0;if("[object Function]"!==r)return!1;try{t="function"!=typeof e.subscribe&&"function"==typeof e.then}catch(e){}return t}function Kr(e,t={}){let r=De(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:{};if(!er(e))return n("invalid v");let i={};try{i=JSON.parse(e)}catch(e){return n(e.toString())}return r?{state:"success",msg:i}:i}function kr(e,t={}){if(!mr(e,t))return!1;return hr(e)>=0}function Fr(e,t){return er(e)&&kr(t)?0===(t=hr(t))?"":e.substring(0,t):""}function Vr(e,t){if(!er(e))return"";if(!kr(t))return"";if(0===(t=hr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Hr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}let Ur=function(e){if(!Gr(e))throw new Error("fn is not a function");return function(){let t,r=Hr();try{t=e.apply(this,arguments)}catch(e){return r.resolve({state:"error",msg:e}),r}let n=e=>{let t=!1;try{t="cancelled"===De(e,"reason")}catch(e){}t?r.resolve({state:"cancelled",msg:""}):r.resolve({state:"error",msg:e})};try{Wr(t)?t.then(e=>{r.resolve({state:"success",msg:e})},n):r.resolve({state:"success",msg:t})}catch(e){r.resolve({state:"error",msg:e})}return r}};function Br(e,t={}){let r=De(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function Rr(e,t={}){let r=De(t,"fs");if(!Br(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function Or(e){return Rr(e,{fs:t})}function Pr(e,t={}){let r=De(t,"fs");return!!Br(e,{fs:r})&&(!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink())}function Qr(e){return Pr(e,{fs:t})}function Jr(e,t,r){if(!er(e))return"";if(!er(t))return"";if(!qt(r))return"";return String(e).replaceAll(t,r)}let $r=2147483647;var _r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function qr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function en(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var r=function e(){if(this instanceof e){var r=[null];return r.push.apply(r,arguments),new(Function.bind.apply(t,r))}return t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}),r}var tn={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,n,s,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new i(n,s||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0===--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,i=[];if(0===this._eventsCount)return i;for(n in e=this._events)t.call(e,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,s=n.length,o=new Array(s);i<s;i++)o[i]=n[i].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,i,s,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,i),!0;case 5:return c.fn.call(c.context,t,n,i,s),!0;case 6:return c.fn.call(c.context,t,n,i,s,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,y=c.length;for(a=0;a<y;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,i);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,i){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return o(this,s),this;var u=this._events[s];if(u.fn)u.fn!==t||i&&!u.once||n&&u.context!==n||o(this,s);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||i&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[s]=1===a.length?a[0]:a:o(this,s)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}(tn);var rn=qr(tn.exports);function nn(){return new rn}function sn(e,t,r=[],n={}){let i=n.funSettle,s=n.tag||"evem",o=(t,...r)=>e.emit(t,...r);Gr(n.funEmit)&&(o=n.funEmit);try{return o(t,...r)}catch(n){if(Gr(i))try{i(n)}catch(e){}try{"error"!==t&&e.listenerCount("error")>0?o("error",{fun:"listener",name:t,msg:n,args:r}):console.error(`[wsemi ${s}] listener of '${String(t)}' threw:`,n)}catch(e){try{console.error(`[wsemi ${s}] listener of '${String(t)}' threw, and reporting it also threw:`,e,n)}catch(e){}}return!1}}async function on(e,t={}){let r=null,n=Hr();if(!Gr(e))return n.reject("waitfunction需輸入函數f"),n;let i=async()=>{let t=e();return Wr(t)&&(t=await t),t};if(r=await i(),!0===r)return n.resolve(),n;let s=De(t,"attemptNum",null);Cr(s)||(s=200);let o=De(t,"timeInterval",null);Cr(o)||(o=1e3),o=Math.min(o,$r);let u=0,l=!1,a=setInterval(async()=>{if(u+=1,l)u>s&&clearInterval(a);else{l=!0;try{r=await i()}catch(e){return clearInterval(a),void n.reject(e)}finally{l=!1}if(!0===r)return clearInterval(a),void n.resolve();u>s&&(clearInterval(a),n.reject(`exceeded attemptNum[${s}]`))}},o);return n}function un(e,t){return!!$t(e)&&(!(!er(t)&&!gr(t))&&t in e)}function ln(e={}){let t=De(e,"timeExpire",null);Cr(t)||(t=18e5),t=hr(t),t=Math.min(t,$r);let r=De(e,"timeDetect",null);Cr(r)||(r=2e3),r=hr(r),r=Math.min(r,$r);let n=nn(),i=Object.create(null),s=e=>{if(un(i,e)){return sn(n,"checkWithSet",[{state:"error",msg:`checkWithSet: key in use: ${e}`}],{tag:"cacheSt"}),!1}return i[e]={time:Date.now(),value:!0},sn(n,"checkWithSet",[{state:"success",msg:`checkWithSet: ${e}`}],{tag:"cacheSt"}),!0},o=setInterval(()=>{sn(n,"detect",[{state:"start"}],{tag:"cacheSt"});let e=Date.now();for(let r of Object.keys(i)){let n=i[r];n&&e-n.time>t&&delete i[r]}sn(n,"detect",[{state:"finish"}],{tag:"cacheSt"})},r);return n.checkWithSet=s,n.setWithFree=async(e,t)=>{sn(n,"setWithFree",[{state:"start"}],{tag:"cacheSt"});let r=[];for(let t of e){if(!s(t)){for(let e of r)delete i[e];let e=`setWithFree: key in use: ${t}`;return sn(n,"setWithFree",[{state:"error",msg:e}],{tag:"cacheSt"}),Promise.reject(e)}r.push(t)}try{let r=await t(),i=`setWithFree: ${e.join(", ")}`;return sn(n,"setWithFree",[{state:"success",msg:i}],{tag:"cacheSt"}),r}catch(e){let t="";try{t=`${e&&e.message||e}`}catch(e){}throw sn(n,"setWithFree",[{state:"error",msg:`setWithFree: fn threw: ${t}`}],{tag:"cacheSt"}),e}finally{for(let e of r)delete i[e]}},n.set=async(e,t=!0)=>{i[e]={time:Date.now(),value:t},sn(n,"set",[{state:"success",msg:`set: ${e}`}],{tag:"cacheSt"})},n.get=async e=>{let t=i[e],r=void 0===t?null:t.value;return sn(n,"get",[{state:"success",msg:`get: ${e}`}],{tag:"cacheSt"}),r},n.check=async e=>{let t=un(i,e);return sn(n,"check",[{state:"success",msg:`check: ${e} = ${t}`}],{tag:"cacheSt"}),t},n.del=async e=>{delete i[e],sn(n,"del",[{state:"success",msg:`del: ${e}`}],{tag:"cacheSt"})},n.waitExist=async(e,t={})=>{let r=De(t,"attemptNum",null);Cr(r)||(r=30),r=hr(r);let s=De(t,"timeInterval",null);Cr(s)||(s=100),s=hr(s),sn(n,"waitExist",[{state:"start"}],{tag:"cacheSt"});try{await on(()=>un(i,e),{attemptNum:r,timeInterval:s})}catch(t){let i=`waitExist timeout (${r*s}ms): ${e}`;return sn(n,"waitExist",[{state:"error",msg:i}],{tag:"cacheSt"}),Promise.reject(i)}sn(n,"waitExist",[{state:"success",msg:`waitExist resolved: ${e}`}],{tag:"cacheSt"})},n.waitNotExist=async(e,t={})=>{let r=De(t,"attemptNum",null);Cr(r)||(r=30),r=hr(r);let s=De(t,"timeInterval",null);Cr(s)||(s=100),s=hr(s),sn(n,"waitNotExist",[{state:"start"}],{tag:"cacheSt"});try{await on(()=>!un(i,e),{attemptNum:r,timeInterval:s})}catch(t){let i=`waitNotExist timeout (${r*s}ms): ${e}`;return sn(n,"waitNotExist",[{state:"error",msg:i}],{tag:"cacheSt"}),Promise.reject(i)}sn(n,"waitNotExist",[{state:"success",msg:`waitNotExist resolved: ${e}`}],{tag:"cacheSt"})},n.clear=()=>{clearInterval(o)},n}function an(e,t,r=[],n={}){let i=n.ms;return Cr(i)||(i=1),i=hr(i),i=Math.min(i,$r),setTimeout(()=>{sn(e,t,r,n)},i)}function cn(e){try{let t=e();return"string"==typeof t?t:""}catch(e){return""}}function dn(e,t){try{let r=new WeakSet,n=[],i=JSON.stringify(e,function(e,i){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.length>=t)return"[Deep]";if("bigint"==typeof i)return String(i);if(null!==i&&"object"==typeof i){if(r.has(i))return"[Circular]";r.add(i),n.push(i)}return i});return"string"==typeof i?i:""}catch(e){return""}}function wn(e){if(e.length>=2&&'"'===e[0]&&'"'===e[e.length-1]){let t=cn(()=>JSON.parse(e));if(""!==t)return t}return e}function yn(e,t){if(void 0===e)return"";if(null===e)return"null";let r=function(e){let t=typeof e;return"string"===t?e:null==e?"":"number"===t||"boolean"===t||"bigint"===t||"symbol"===t?String(e):""}(e);if(""!==r)return r;let n=dn(e,t);if(""!==n&&"{}"!==n)return wn(n);let i=cn(()=>String(e));return""!==i&&"[object Object]"!==i?i:n}function gn(e,t){let r=new WeakSet;null===e||"object"!=typeof e&&"function"!=typeof e||r.add(e);let n=e,i=[];for(let e=0;e<t.levelCauseMax;e++){let e=null;try{e=n.cause}catch(e){break}if(null==e)break;if("object"==typeof e||"function"==typeof e){if(r.has(e))break;r.add(e)}let s=mn(e,{...t,useCause:!1,useAggregate:!1});""!==s&&i.push(s),n=e}return i.join(" <- ")}function Dn(e,t){let r=null;try{r=e.errors}catch(e){return""}if(!Array.isArray(r)||0===r.length)return"";let n=[];for(let i=0;i<r.length&&i<t.levelCauseMax;i++){if(r[i]===e)continue;let s=mn(r[i],{...t,useCause:!1,useAggregate:!1});""!==s&&n.push(s)}return n.join("; ")}function mn(e,t){if("string"==typeof e)return e;if(null==e)return"";if("number"==typeof e)return Number.isNaN(e)?"":String(e);if("boolean"==typeof e||"bigint"==typeof e||"symbol"==typeof e)return String(e);let r=null,n=!1;try{r=e.message,n=!0}catch(e){n=!1}if(n&&"string"==typeof r){if(""!==r){let n=r;if(t.useCause){let r=gn(e,t);""!==r&&(n=`${n} <- ${r}`)}if(t.useAggregate){let r=Dn(e,t);""!==r&&(n=`${n} [${r}]`)}return n}let n=gn(e,t);return""!==n?n:""}if(n){let e=yn(r,t.levelJsonMax);if(""!==e)return e}let i=gn(e,t);if(""!==i)return i;if(t.useAggregate){let r=Dn(e,t);if(""!==r)return r}let s=dn(e,t.levelJsonMax),o=wn(s);if(""!==o&&"{}"!==o)return o;let u=cn(()=>String(e));if(""!==u&&"[object Object]"!==u)return u;let l=cn(()=>Object.prototype.toString.call(e));return""!==l&&"[object Object]"!==l?l:""!==s?s:""}function Mn(e,t={}){let r=De(t,"useCause",null);wr(r)||(r=!1);let n=De(t,"useAggregate",null);wr(n)||(n=!1);let i=De(t,"levelCauseMax",null);Cr(i,{useLimitSafe:!0})||(i=8),i=hr(i);let s=De(t,"levelJsonMax",null);Cr(s,{useLimitSafe:!0})||(s=6),s=hr(s);let o=De(t,"lengthMessageMax",null);Cr(o,{useLimitSafe:!0})||(o=0),o=hr(o);let u={useCause:r,useAggregate:n,levelCauseMax:i,levelJsonMax:s,lengthMessageMax:o},l="";try{l=mn(e,u)}catch(e){return l="",l}return er(l)?(u.lengthMessageMax>0&&l.length>u.lengthMessageMax&&(l=u.lengthMessageMax>3?l.slice(0,u.lengthMessageMax-3)+"...":l.slice(0,u.lengthMessageMax)),l):(l="",l)}function fn(e){if(!(er(e)||gr(e)||A(e)||function(e){return"[object BigInt]"===Object.prototype.toString.call(e)}(e)))return"";let t="";try{t=String(e)}catch(e){}try{t=e.toString()}catch(e){}return t}var pn={exports:{}};var In,hn={exports:{}},Cn=en(Object.freeze({__proto__:null,default:{}}));function Ln(){return In||(In=1,function(e){var t;e.exports=(t=t||function(e,t){var r;if("undefined"!=typeof window&&window.crypto&&(r=window.crypto),"undefined"!=typeof self&&self.crypto&&(r=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(r=globalThis.crypto),!r&&"undefined"!=typeof window&&window.msCrypto&&(r=window.msCrypto),!r&&void 0!==_r&&_r.crypto&&(r=_r.crypto),!r)try{r=Cn}catch(e){}var n=function(){if(r){if("function"==typeof r.getRandomValues)try{return r.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof r.randomBytes)try{return r.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},i=Object.create||function(){function e(){}return function(t){var r;return e.prototype=t,r=new e,e.prototype=null,r}}(),s={},o=s.lib={},u=o.Base={extend:function(e){var t=i(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},l=o.WordArray=u.extend({init:function(e,r){e=this.words=e||[],this.sigBytes=r!=t?r:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,r=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var s=0;s<i;s++){var o=r[s>>>2]>>>24-s%4*8&255;t[n+s>>>2]|=o<<24-(n+s)%4*8}else for(var u=0;u<i;u+=4)t[n+u>>>2]=r[u>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=u.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],r=0;r<e;r+=4)t.push(n());return new l.init(t,e)}}),a=s.enc={},c=a.Hex={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i<r;i++){var s=t[i>>>2]>>>24-i%4*8&255;n.push((s>>>4).toString(16)),n.push((15&s).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n<t;n+=2)r[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new l.init(r,t/2)}},d=a.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i<r;i++){var s=t[i>>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(s))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n<t;n++)r[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new l.init(r,t)}},w=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},y=o.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=w.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r,n=this._data,i=n.words,s=n.sigBytes,o=this.blockSize,u=s/(4*o),a=(u=t?e.ceil(u):e.max((0|u)-this._minBufferSize,0))*o,c=e.min(4*a,s);if(a){for(var d=0;d<a;d+=o)this._doProcessBlock(i,d);r=i.splice(0,a),n.sigBytes-=c}return new l.init(r,c)},clone:function(){var e=u.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=y.extend({cfg:u.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){y.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,r){return new e.init(r).finalize(t)}},_createHmacHelper:function(e){return function(t,r){return new g.HMAC.init(e,r).finalize(t)}}});var g=s.algo={};return s}(Math),t)}(hn)),hn.exports}!function(e){e.exports=Ln().enc.Utf8}(pn);var bn=qr(pn.exports),Nn={exports:{}};!function(e){var t;e.exports=(t=Ln(),function(){var e=t,r=e.lib.WordArray;function n(e,t,n){for(var i=[],s=0,o=0;o<t;o++)if(o%4){var u=n[e.charCodeAt(o-1)]<<o%4*2|n[e.charCodeAt(o)]>>>6-o%4*2;i[s>>>2]|=u<<24-s%4*8,s++}return r.create(i,s)}e.enc.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp();for(var i=[],s=0;s<r;s+=3)for(var o=(t[s>>>2]>>>24-s%4*8&255)<<16|(t[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|t[s+2>>>2]>>>24-(s+2)%4*8&255,u=0;u<4&&s+.75*u<r;u++)i.push(n.charAt(o>>>6*(3-u)&63));var l=n.charAt(64);if(l)for(;i.length%4;)i.push(l);return i.join("")},parse:function(e){var t=e.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var s=0;s<r.length;s++)i[r.charCodeAt(s)]=s}var o=r.charAt(64);if(o){var u=e.indexOf(o);-1!==u&&(t=u)}return n(e,t,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64)}(Nn);var An=qr(Nn.exports);function xn(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e}function En(e,t){var r;return(y(e)?xn:Rt)(e,"function"==typeof(r=t)?r:Kt)}function Tn(e){try{return String(e)}catch(e){}try{let t=e.message;if("string"==typeof t&&""!==t)return t}catch(e){}return"unknown error"}function vn(e){return"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function Sn(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)}function Zn(e){return"[object Uint16Array]"===Object.prototype.toString.call(e)}function jn(e){if(!(vn(e)||function(e){let t=Object.prototype.toString.call(e);if("[object Blob]"===t||"[object File]"===t)return!0;try{if("undefined"!=typeof Blob&&e instanceof Blob)return!0}catch(e){}return!1}(e)||Sn(e)||Zn(e)))return null;try{if(gr(e.byteLength))return e.byteLength}catch(e){}try{if(gr(e.length))return e.length}catch(e){}try{if(gr(e.size))return e.size}catch(e){}return null}function Yn(e){if(null===e||"object"!=typeof e)return!1;if(e instanceof Error)return!0;if("function"==typeof Error.isError)return Error.isError(e);if(Symbol.toStringTag in e)return!1;let t=Object.prototype.toString.call(e);return"[object Error]"===t||"[object DOMException]"===t}function Xn(e,t={}){let r=De(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:{results:"",binarys:[]};if(!$t(e)&&!Lr(e))return n("invalid data, data is not an object or array");if(Nr(e)||Ar(e))return n("invalid data, data is an empty object or empty array");let i=/^(?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,s="",o=[];try{let t=-1;s=JSON.stringify(e,function(e,r){if(Sn(r)){t+=1;let e=`[BlazeForUint8Array]::${t}`;return o.push(r),e}if(Zn(r)){t+=1;let e=`[BlazeForUint16Array]::${t}`;return o.push(r),e}if(vn(r)){t+=1;let e=`[BlazeForArrayBuffer]::${t}`;return o.push(r),e}return er(r=function(e){if(!Yn(e))return e;let t=e.toString;return t===Object.prototype.toString||"function"!=typeof t?Error.prototype.toString.call(e):t.call(e)}(r))&&91===r.charCodeAt(0)&&i.test(r)?"[BlazeForPreventEscape]"+r:r})}catch(e){return n(Tn(e))}return r?{state:"success",msg:{results:s,binarys:o}}:{results:s,binarys:o}}let zn=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/;function Gn(e,t={}){let r=De(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:new Uint8Array;if(!er(e))return n("invalid str");if(!("function"==typeof e.isWellFormed?e.isWellFormed():!zn.test(e)))return n("invalid str, contains lone surrogates");let i=null;try{i=(new TextEncoder).encode(e)}catch(e){return n(e.toString())}return r?{state:"success",msg:i}:i}function Wn(e,t,r=0,n=!0,i=52,s=8){return function(e,t,r,n,i,s){if(!gr(e))return null;if(!Sn(t))return null;if(!mr(r))return null;if(!wr(n))return null;if(!mr(i))return null;if(!mr(s))return null;let o,u,l;e=Dr(e);let a=8*s-i-1,c=(1<<a)-1,d=c>>1,w=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,y=n?s-1:0,g=n?-1:1,D=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+d>=1?w/l:w*Math.pow(2,1-d))*l>=2&&(o++,l/=2),o+d>=c?(u=0,o=c):o+d>=1?(u=(e*l-1)*Math.pow(2,i),o+=d):(u=e*Math.pow(2,d-1)*Math.pow(2,i),o=0));i>=8;t[r+y]=255&u,y+=g,u/=256,i-=8);for(o=o<<i|u,a+=i;a>0;t[r+y]=255&o,y+=g,o/=256,a-=8);return t[r+y-g]|=128*D,null}(e,t,r,n,i,s)}function Kn(e){let t=0;En(e,e=>{t+=jn(e)});let r=new Uint8Array(t),n=0;return En(e,e=>{let t=function(e){return vn(e)?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0)}(e);r.set(t,n),n+=t.length}),r}function kn(e,t={}){let r=[],n=new Uint8Array,i=De(t,"returnWithStateAndMsg",null);wr(i)||(i=!1);let s=e=>i?{state:"error",msg:e}:new Uint8Array;if(!(o=e,Lr(o)&&o.length>=1||_t(e)))return s("invalid data, data is not an effective object or a non-empty array");var o;let u=[],l=[];function a(e){u.push(jn(e)),l.push(e)}try{let t=Xn(e,{returnWithStateAndMsg:!0});if("error"===t.state)return s(`obj2stru8arr: ${t.msg}`);let i=t.msg;a(Gn(i.results)),En(i.binarys,e=>{a(e)});let o=u,c=Gn(JSON.stringify(o)),d=new Uint8Array(8);Wn(jn(c),d),r.push(d),r.push(c),En(l,e=>{r.push(e)}),n=Kn(r)}catch(e){return s(Tn(e))}return i?{state:"success",msg:n}:n}function Fn(e,t=0,r=!0,n=52,i=8){return function(e,t,r,n,i){if(!Sn(e))return null;if(!mr(t))return null;if(!wr(r))return null;if(!mr(n))return null;if(!mr(i))return null;let s,o,u=8*i-n-1,l=(1<<u)-1,a=l>>1,c=-7,d=r?0:i-1,w=r?1:-1,y=e[t+d];for(d+=w,s=y&(1<<-c)-1,y>>=-c,c+=u;c>0;s=256*s+e[t+d],d+=w,c-=8);for(o=s&(1<<-c)-1,s>>=-c,c+=n;c>0;o=256*o+e[t+d],d+=w,c-=8);if(0===s)s=1-a;else{if(s===l)return o?NaN:1/0*(y?-1:1);o+=Math.pow(2,n),s-=a}return(y?-1:1)*o*Math.pow(2,s-n)}(e,t,r,n,i)}function Vn(e,t={}){let r=De(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:"";if(!Sn(e))return n("invalid u8a");let i="";try{i=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(e)}catch(e){return n(e.toString())}return r?{state:"success",msg:i}:i}function Hn(e,t={}){let r=De(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:{};if(!_t(e))return n("invalid data");let i=null,s=null;try{i=e.results,s=e.binarys}catch(e){return n(Tn(e))}if(!er(i))return n("invalid results");if(!Lr(s))return n("invalid binarys");let o=/^\[BlazeFor(Uint8Array|Uint16Array|ArrayBuffer)\]::(\d+)$/,u=/^\[BlazeForPreventEscape\](?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,l=new Set,a={};try{a=JSON.parse(i,function(e,t){if(!er(t)||91!==t.charCodeAt(0))return t;let r=o.exec(t);if(null===r)return u.test(t)?t.slice(23):t;let n=Number(r[2]);if(n>=s.length)throw new Error(`binary index out of range[${n}], binarys.length[${s.length}]`);if(l.has(n))throw new Error(`binary index referenced more than once[${n}]`);return l.add(n),((e,t,r)=>{if("Uint16Array"===e&&!Zn(r)){if(!Sn(r))throw new Error(`binarys[${t}] can not be restored to Uint16Array`);if(r.byteLength%2!=0)throw new Error(`binarys[${t}] byteLength[${r.byteLength}] is not even, can not be restored to Uint16Array`);let e=0===r.byteOffset&&r.byteLength===r.buffer.byteLength?r:new Uint8Array(r);return new Uint16Array(e.buffer)}if("ArrayBuffer"===e&&!vn(r)){if(!Sn(r))throw new Error(`binarys[${t}] can not be restored to ArrayBuffer`);return r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)}return r})(r[1],n,s[n])})}catch(e){return n(Tn(e))}return r?{state:"success",msg:a}:a}function Un(e,t={}){let r={},n=De(t,"returnWithStateAndMsg",null);wr(n)||(n=!1);let i=e=>n?{state:"error",msg:e}:{};if(!Sn(e))return i("invalid u8a");try{let t=8,n=e.slice(0,t),s=e.slice(t,jn(e)),o=Fn(n),u=s.slice(0,o),l=s.slice(o,jn(s)),a=Vn(u,{returnWithStateAndMsg:!0});if("error"===a.state)return i(`u8arr2str: ${a.msg}`);let c=a.msg,d=JSON.parse(c),w=function(e,t){if(!Array.isArray(e))return"not an array";for(let t=0;t<e.length;t++){let r=e[t];if(!Number.isInteger(r)||r<0)return"every item must be a non-negative finite integer"}let r=0;for(let n=0;n<e.length;n++)if(r+=e[n],r>t)return"total length exceeds the packet";return e.length>1&&25*(e.length-1)>e[0]?"too many chunks for the main block":""}(d,jn(l));if(""!==w)return i(`invalid pks, ${w}`);let y=function(e,t){let r=0,n=0,i=[];for(let s=0;s<t.length;s++){n=r+t[s];let o=e.slice(r,n);r=n,i.push(o)}return i}(l,d),g=Vn(y.shift(),{returnWithStateAndMsg:!0});if("error"===g.state)return i(`u8arr2str: ${g.msg}`);let D=Hn({results:g.msg,binarys:y},{returnWithStateAndMsg:!0});if("error"===D.state)return i(`stru8arr2obj: ${D.msg}`);r=D.msg}catch(e){return i(Tn(e))}return n?{state:"success",msg:r}:r}function Bn(e){let t=!1;try{t=Yn(e)}catch(e){}if(t)return e;if("string"==typeof e&&""!==e)return e;let r=Tn(e);return""!==r?r:"unknown error"}function Rn(e){return function(e,t={}){try{let r=De(t,"fs");if(Rr(e,{fs:r}))return{success:"input folder is already exists: "+e};if(Br(e,{fs:r}))return{error:"input path already exists: "+e};r.mkdirSync(e,{recursive:!0})}catch(e){return{error:Bn(e)}}return{success:"done: "+e}}(e,{fs:t})}function On(e){return function(e,t={}){try{let r=De(t,"fs");if(!Br(e,{fs:r}))return{success:"file does not exist: "+e};if(!Pr(e,{fs:r}))return{error:"input path is not a file: "+e};r.unlinkSync(e)}catch(e){return{error:Bn(e)}}return{success:"done: "+e}}(e,{fs:t})}function Pn(e){return er(e)&&e.length<=128&&/^[A-Za-z0-9]+$/.test(e)}let Qn={permission:200,param:200,app:200,output:200,packet:200,internal:200},Jn={main:{event:"execute",apiType:"main",api:"apiMain",authFrom:"header",statusOf:Qn},ulctr:{event:"upload",apiType:"upload-controller",api:"apiUploadCheck",authFrom:"header",statusOf:Qn},slc:{event:"upload",apiType:"upload-slice",api:"apiUploadSlice",authFrom:"header",statusOf:Qn},dwgfn:{event:"download",apiType:"download-get-filename",api:"apiDownloadGetFilename",authFrom:"header",statusOf:Qn,fields:[{name:"streamRead"},{name:"filename"}]},dwgf:{event:"download",apiType:"download-get-file",api:"apiDownloadGetFile",authFrom:"query",statusOf:{permission:403,param:400,app:404,output:500,packet:500,internal:500},fields:[{name:"streamRead"},{name:"fileSize"},{name:"fileType"},{name:"filename",optional:!0}]},dw:{event:"download",apiType:"download",api:"apiDownload",authFrom:"header",statusOf:Qn,fields:[{name:"streamRead"},{name:"filename"},{name:"fileSize"},{name:"fileType"}]}};var $n=kt("length"),_n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");function qn(e){return _n.test(e)}var ei="\\ud800-\\udfff",ti="["+ei+"]",ri="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",ni="\\ud83c[\\udffb-\\udfff]",ii="[^"+ei+"]",si="(?:\\ud83c[\\udde6-\\uddff]){2}",oi="[\\ud800-\\udbff][\\udc00-\\udfff]",ui="(?:"+ri+"|"+ni+")"+"?",li="[\\ufe0e\\ufe0f]?",ai=li+ui+("(?:\\u200d(?:"+[ii,si,oi].join("|")+")"+li+ui+")*"),ci="(?:"+[ii+ri+"?",ri,si,oi,ti].join("|")+")",di=RegExp(ni+"(?="+ni+")|"+ci+ai,"g");function wi(e){return qn(e)?function(e){for(var t=di.lastIndex=0;di.test(e);)++t;return t}(e):$n(e)}function yi(e){if(null==e)return 0;if(lt(e))return"string"==typeof(t=e)||!y(t)&&N(t)&&"[object String]"==b(t)?wi(e):e.length;var t,r=xt(e);return"[object Map]"==r||"[object Set]"==r?e.size:ut(e).length}var gi={exports:{}};!function(e){e.exports=function(){var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",s="minute",o="hour",u="day",l="week",a="month",c="quarter",d="year",w="date",y="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,D=/\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},M=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},f={s:M,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),i=r%60;return(t<=0?"+":"-")+M(n,2,"0")+":"+M(i,2,"0")},m:function e(t,r){if(t.date()<r.date())return-e(r,t);var n=12*(r.year()-t.year())+(r.month()-t.month()),i=t.clone().add(n,a),s=r-i<0,o=t.clone().add(n+(s?-1:1),a);return+(-(n+(r-i)/(s?i-o:o-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:a,y:d,w:l,d:u,D:w,h:o,m:s,s:i,ms:n,Q:c}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},p="en",I={};I[p]=m;var h="$isDayjsObject",C=function(e){return e instanceof A||!(!e||!e[h])},L=function e(t,r,n){var i;if(!t)return p;if("string"==typeof t){var s=t.toLowerCase();I[s]&&(i=s),r&&(I[s]=r,i=s);var o=t.split("-");if(!i&&o.length>1)return e(o[0])}else{var u=t.name;I[u]=t,i=u}return!n&&i&&(p=i),i||!n&&p},b=function(e,t){if(C(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new A(r)},N=f;N.l=L,N.i=C,N.w=function(e,t){return b(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var A=function(){function m(e){this.$L=L(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[h]=!0}var M=m.prototype;return M.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(N.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(g);if(n){var i=n[2]-1||0,s=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,s)):new Date(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,s)}}return new Date(t)}(e),this.init()},M.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},M.$utils=function(){return N},M.isValid=function(){return!(this.$d.toString()===y)},M.isSame=function(e,t){var r=b(e);return this.startOf(t)<=r&&r<=this.endOf(t)},M.isAfter=function(e,t){return b(e)<this.startOf(t)},M.isBefore=function(e,t){return this.endOf(t)<b(e)},M.$g=function(e,t,r){return N.u(e)?this[t]:this.set(r,e)},M.unix=function(){return Math.floor(this.valueOf()/1e3)},M.valueOf=function(){return this.$d.getTime()},M.startOf=function(e,t){var r=this,n=!!N.u(t)||t,c=N.p(e),y=function(e,t){var i=N.w(r.$u?Date.UTC(r.$y,t,e):new Date(r.$y,t,e),r);return n?i:i.endOf(u)},g=function(e,t){return N.w(r.toDate()[e].apply(r.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),r)},D=this.$W,m=this.$M,M=this.$D,f="set"+(this.$u?"UTC":"");switch(c){case d:return n?y(1,0):y(31,11);case a:return n?y(1,m):y(0,m+1);case l:var p=this.$locale().weekStart||0,I=(D<p?D+7:D)-p;return y(n?M-I:M+(6-I),m);case u:case w:return g(f+"Hours",0);case o:return g(f+"Minutes",1);case s:return g(f+"Seconds",2);case i:return g(f+"Milliseconds",3);default:return this.clone()}},M.endOf=function(e){return this.startOf(e,!1)},M.$set=function(e,t){var r,l=N.p(e),c="set"+(this.$u?"UTC":""),y=(r={},r[u]=c+"Date",r[w]=c+"Date",r[a]=c+"Month",r[d]=c+"FullYear",r[o]=c+"Hours",r[s]=c+"Minutes",r[i]=c+"Seconds",r[n]=c+"Milliseconds",r)[l],g=l===u?this.$D+(t-this.$W):t;if(l===a||l===d){var D=this.clone().set(w,1);D.$d[y](g),D.init(),this.$d=D.set(w,Math.min(this.$D,D.daysInMonth())).$d}else y&&this.$d[y](g);return this.init(),this},M.set=function(e,t){return this.clone().$set(e,t)},M.get=function(e){return this[N.p(e)]()},M.add=function(n,c){var w,y=this;n=Number(n);var g=N.p(c),D=function(e){var t=b(y);return N.w(t.date(t.date()+Math.round(e*n)),y)};if(g===a)return this.set(a,this.$M+n);if(g===d)return this.set(d,this.$y+n);if(g===u)return D(1);if(g===l)return D(7);var m=(w={},w[s]=t,w[o]=r,w[i]=e,w)[g]||1,M=this.$d.getTime()+n*m;return N.w(M,this)},M.subtract=function(e,t){return this.add(-1*e,t)},M.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return r.invalidDate||y;var n=e||"YYYY-MM-DDTHH:mm:ssZ",i=N.z(this),s=this.$H,o=this.$m,u=this.$M,l=r.weekdays,a=r.months,c=r.meridiem,d=function(e,r,i,s){return e&&(e[r]||e(t,n))||i[r].slice(0,s)},w=function(e){return N.s(s%12||12,e,"0")},g=c||function(e,t,r){var n=e<12?"AM":"PM";return r?n.toLowerCase():n};return n.replace(D,function(e,n){return n||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return N.s(t.$y,4,"0");case"M":return u+1;case"MM":return N.s(u+1,2,"0");case"MMM":return d(r.monthsShort,u,a,3);case"MMMM":return d(a,u);case"D":return t.$D;case"DD":return N.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return d(r.weekdaysMin,t.$W,l,2);case"ddd":return d(r.weekdaysShort,t.$W,l,3);case"dddd":return l[t.$W];case"H":return String(s);case"HH":return N.s(s,2,"0");case"h":return w(1);case"hh":return w(2);case"a":return g(s,o,!0);case"A":return g(s,o,!1);case"m":return String(o);case"mm":return N.s(o,2,"0");case"s":return String(t.$s);case"ss":return N.s(t.$s,2,"0");case"SSS":return N.s(t.$ms,3,"0");case"Z":return i}return null}(e)||i.replace(":","")})},M.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},M.diff=function(n,w,y){var g,D=this,m=N.p(w),M=b(n),f=(M.utcOffset()-this.utcOffset())*t,p=this-M,I=function(){return N.m(D,M)};switch(m){case d:g=I()/12;break;case a:g=I();break;case c:g=I()/3;break;case l:g=(p-f)/6048e5;break;case u:g=(p-f)/864e5;break;case o:g=p/r;break;case s:g=p/t;break;case i:g=p/e;break;default:g=p}return y?g:N.a(g)},M.daysInMonth=function(){return this.endOf(a).$D},M.$locale=function(){return I[this.$L]},M.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=L(e,t,!0);return n&&(r.$L=n),r},M.clone=function(){return N.w(this.$d,this)},M.toDate=function(){return new Date(this.valueOf())},M.toJSON=function(){return this.isValid()?this.toISOString():null},M.toISOString=function(){return this.$d.toISOString()},M.toString=function(){return this.$d.toUTCString()},m}(),x=A.prototype;return b.prototype=x,[["$ms",n],["$s",i],["$m",s],["$H",o],["$W",u],["$M",a],["$y",d],["$D",w]].forEach(function(e){x[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),b.extend=function(e,t){return e.$i||(e(t,A,b),e.$i=!0),b},b.locale=L,b.isDayjs=C,b.unix=function(e){return b(1e3*e)},b.en=I[p],b.Ls=I,b.p={},b}()}(gi);var Di=qr(gi.exports);let mi="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),Mi=mi.length;function fi(e=32){let t=[];e=Cr(e)?hr(e):32;for(let r=0;r<e;r++)t[r]=mi[0|Math.random()*Mi];return t.join("")}function pi(e,t,r){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(r=r>i?i:r)<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var s=Array(i);++n<i;)s[n]=e[n+t];return s}function Ii(e,t,r){var n=e.length;return r=void 0===r?n:r,!t&&r>=n?e:pi(e,t,r)}function hi(e){return e!=e}function Ci(e,t,r){return t==t?function(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}(e,t,r):function(e,t,r,n){for(var i=e.length,s=r+(n?1:-1);n?s--:++s<i;)if(t(e[s],s,e))return s;return-1}(e,hi,r)}var Li="\\ud800-\\udfff",bi="["+Li+"]",Ni="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Ai="\\ud83c[\\udffb-\\udfff]",xi="[^"+Li+"]",Ei="(?:\\ud83c[\\udde6-\\uddff]){2}",Ti="[\\ud800-\\udbff][\\udc00-\\udfff]",vi="(?:"+Ni+"|"+Ai+")"+"?",Si="[\\ufe0e\\ufe0f]?",Zi=Si+vi+("(?:\\u200d(?:"+[xi,Ei,Ti].join("|")+")"+Si+vi+")*"),ji="(?:"+[xi+Ni+"?",Ni,Ei,Ti,bi].join("|")+")",Yi=RegExp(Ai+"(?="+Ai+")|"+ji+Zi,"g");function Xi(e){return qn(e)?function(e){return e.match(Yi)||[]}(e):function(e){return e.split("")}(e)}function zi(e,t,r){if((e=de(e))&&(r||void 0===t))return nr(e);if(!e||!(t=ce(t)))return e;var n=Xi(e),i=Xi(t),s=function(e,t){for(var r=-1,n=e.length;++r<n&&Ci(t,e[r],0)>-1;);return r}(n,i),o=function(e,t){for(var r=e.length;r--&&Ci(t,e[r],0)>-1;);return r}(n,i)+1;return Ii(n,s,o).join("")}function Gi(e,t){if(!er(e))return[];if(!er(t))return[];let r=function(e,t){return er(e)&&er(t)?e.split(t):[]}(e,t);r=Pt(r,zi);let n=[];return En(r,function(e){er(e)&&n.push(e)}),n}const Wi=new Uint8Array([0,97,115,109,1,0,0,0,1,48,8,96,3,127,127,127,1,127,96,3,127,127,127,0,96,2,127,127,0,96,1,127,1,127,96,3,127,127,126,1,126,96,3,126,127,127,1,126,96,2,127,126,0,96,1,127,1,126,3,11,10,0,0,2,1,3,4,5,6,1,7,5,3,1,0,1,7,85,9,3,109,101,109,2,0,5,120,120,104,51,50,0,0,6,105,110,105,116,51,50,0,2,8,117,112,100,97,116,101,51,50,0,3,8,100,105,103,101,115,116,51,50,0,4,5,120,120,104,54,52,0,5,6,105,110,105,116,54,52,0,7,8,117,112,100,97,116,101,54,52,0,8,8,100,105,103,101,115,116,54,52,0,9,10,251,22,10,242,1,1,4,127,32,0,32,1,106,33,3,32,1,65,16,79,4,127,32,3,65,16,107,33,6,32,2,65,168,136,141,161,2,106,33,3,32,2,65,137,235,208,208,7,107,33,4,32,2,65,207,140,162,142,6,106,33,5,3,64,32,3,32,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,3,32,4,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,2,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,2,32,5,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,5,32,6,32,0,65,4,106,34,0,79,13,0,11,32,2,65,12,119,32,5,65,18,119,106,32,4,65,7,119,106,32,3,65,1,119,106,5,32,2,65,177,207,217,178,1,106,11,32,1,106,32,0,32,1,65,15,113,16,1,11,146,1,0,32,1,32,2,106,33,2,3,64,32,1,65,4,106,32,2,75,69,4,64,32,0,32,1,40,2,0,65,189,220,202,149,124,108,106,65,17,119,65,175,214,211,190,2,108,33,0,32,1,65,4,106,33,1,12,1,11,11,3,64,32,1,32,2,79,69,4,64,32,0,32,1,45,0,0,65,177,207,217,178,1,108,106,65,11,119,65,177,243,221,241,121,108,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,32,0,65,15,118,115,65,247,148,175,175,120,108,34,0,65,13,118,32,0,115,65,189,220,202,149,124,108,34,0,65,16,118,32,0,115,11,63,0,32,0,65,8,106,32,1,65,168,136,141,161,2,106,54,2,0,32,0,65,12,106,32,1,65,137,235,208,208,7,107,54,2,0,32,0,65,16,106,32,1,54,2,0,32,0,65,20,106,32,1,65,207,140,162,142,6,106,54,2,0,11,195,4,1,6,127,32,1,32,2,106,33,6,32,0,65,24,106,33,4,32,0,65,40,106,40,2,0,33,3,32,0,32,0,40,2,0,32,2,106,54,2,0,32,0,65,4,106,34,5,32,5,40,2,0,32,2,65,16,79,32,0,40,2,0,65,16,79,114,114,54,2,0,32,2,32,3,106,65,16,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,40,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,16,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,32,3,40,2,0,32,4,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,12,106,34,3,32,3,40,2,0,32,4,65,4,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,16,106,34,3,32,3,40,2,0,32,4,65,8,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,20,106,34,3,32,3,40,2,0,32,4,65,12,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,40,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,32,6,65,16,107,77,4,64,32,6,65,16,107,33,8,32,0,65,8,106,40,2,0,33,2,32,0,65,12,106,40,2,0,33,3,32,0,65,16,106,40,2,0,33,5,32,0,65,20,106,40,2,0,33,7,3,64,32,2,32,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,2,32,3,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,3,32,5,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,5,32,7,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,7,32,8,32,1,65,4,106,34,1,79,13,0,11,32,0,65,8,106,32,2,54,2,0,32,0,65,12,106,32,3,54,2,0,32,0,65,16,106,32,5,54,2,0,32,0,65,20,106,32,7,54,2,0,11,32,1,32,6,73,4,64,32,4,32,1,32,6,32,1,107,34,1,252,10,0,0,32,0,65,40,106,32,1,54,2,0,11,11,97,1,1,127,32,0,65,16,106,40,2,0,33,1,32,0,65,4,106,40,2,0,4,127,32,1,65,12,119,32,0,65,20,106,40,2,0,65,18,119,106,32,0,65,12,106,40,2,0,65,7,119,106,32,0,65,8,106,40,2,0,65,1,119,106,5,32,1,65,177,207,217,178,1,106,11,32,0,40,2,0,106,32,0,65,24,106,32,0,65,40,106,40,2,0,16,1,11,255,3,2,3,126,1,127,32,0,32,1,106,33,6,32,1,65,32,79,4,126,32,6,65,32,107,33,6,32,2,66,214,235,130,238,234,253,137,245,224,0,124,33,3,32,2,66,177,169,172,193,173,184,212,166,61,125,33,4,32,2,66,249,234,208,208,231,201,161,228,225,0,124,33,5,3,64,32,3,32,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,3,32,4,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,4,32,2,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,2,32,5,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,5,32,6,32,0,65,8,106,34,0,79,13,0,11,32,2,66,12,137,32,5,66,18,137,124,32,4,66,7,137,124,32,3,66,1,137,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,4,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,2,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,5,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,5,32,2,66,197,207,217,178,241,229,186,234,39,124,11,32,1,173,124,32,0,32,1,65,31,113,16,6,11,134,2,0,32,1,32,2,106,33,2,3,64,32,2,32,1,65,8,106,79,4,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,27,137,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,33,0,32,1,65,8,106,33,1,12,1,11,11,32,1,65,4,106,32,2,77,4,64,32,0,32,1,53,2,0,66,135,149,175,175,152,182,222,155,158,127,126,133,66,23,137,66,207,214,211,190,210,199,171,217,66,126,66,249,243,221,241,153,246,153,171,22,124,33,0,32,1,65,4,106,33,1,11,3,64,32,1,32,2,73,4,64,32,0,32,1,49,0,0,66,197,207,217,178,241,229,186,234,39,126,133,66,11,137,66,135,149,175,175,152,182,222,155,158,127,126,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,32,0,66,33,136,133,66,207,214,211,190,210,199,171,217,66,126,34,0,32,0,66,29,136,133,66,249,243,221,241,153,246,153,171,22,126,34,0,32,0,66,32,136,133,11,77,0,32,0,65,8,106,32,1,66,214,235,130,238,234,253,137,245,224,0,124,55,3,0,32,0,65,16,106,32,1,66,177,169,172,193,173,184,212,166,61,125,55,3,0,32,0,65,24,106,32,1,55,3,0,32,0,65,32,106,32,1,66,249,234,208,208,231,201,161,228,225,0,124,55,3,0,11,244,4,2,3,127,4,126,32,1,32,2,106,33,5,32,0,65,40,106,33,4,32,0,65,200,0,106,40,2,0,33,3,32,0,32,0,41,3,0,32,2,173,124,55,3,0,32,2,32,3,106,65,32,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,200,0,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,32,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,32,3,41,3,0,32,4,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,16,106,34,3,32,3,41,3,0,32,4,65,8,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,24,106,34,3,32,3,41,3,0,32,4,65,16,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,32,106,34,3,32,3,41,3,0,32,4,65,24,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,200,0,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,65,32,106,32,5,77,4,64,32,5,65,32,107,33,2,32,0,65,8,106,41,3,0,33,6,32,0,65,16,106,41,3,0,33,7,32,0,65,24,106,41,3,0,33,8,32,0,65,32,106,41,3,0,33,9,3,64,32,6,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,7,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,7,32,8,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,8,32,9,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,9,32,2,32,1,65,8,106,34,1,79,13,0,11,32,0,65,8,106,32,6,55,3,0,32,0,65,16,106,32,7,55,3,0,32,0,65,24,106,32,8,55,3,0,32,0,65,32,106,32,9,55,3,0,11,32,1,32,5,73,4,64,32,4,32,1,32,5,32,1,107,34,1,252,10,0,0,32,0,65,200,0,106,32,1,54,2,0,11,11,188,2,1,5,126,32,0,65,24,106,41,3,0,33,1,32,0,41,3,0,34,2,66,32,90,4,126,32,0,65,8,106,41,3,0,34,3,66,1,137,32,0,65,16,106,41,3,0,34,4,66,7,137,124,32,1,66,12,137,32,0,65,32,106,41,3,0,34,5,66,18,137,124,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,4,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,1,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,5,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,5,32,1,66,197,207,217,178,241,229,186,234,39,124,11,32,2,124,32,0,65,40,106,32,2,66,31,131,167,16,6,11]);async function Ki(e,t={}){let r=Hr();try{let n=De(t,"fs"),i=De(t,"chunkSize");if(Cr(i)||(i=67108864),i=hr(i),i>2**30&&(i=67108864),!Pr(e,{fs:n}))return r.reject("fp is not a file"),r;let{create64:s}=await async function(){return function(e){const{exports:{mem:t,xxh32:r,xxh64:n,init32:i,update32:s,digest32:o,init64:u,update64:l,digest64:a}}=e;let c=new Uint8Array(t.buffer);function d(e,r){if(t.buffer.byteLength<e+r){const n=Math.ceil((e+r-t.buffer.byteLength)/65536);t.grow(n),c=new Uint8Array(t.buffer)}}function w(e,t,r,n,i,s){d(e);const o=new Uint8Array(e);return c.set(o),r(0,t),o.set(c.subarray(0,e)),{update(t){let r;return c.set(o),"string"==typeof t?(d(3*t.length,e),r=m.encodeInto(t,c.subarray(e)).written):(d(t.byteLength,e),c.set(t,e),r=t.byteLength),n(0,e,r),o.set(c.subarray(0,e)),this},digest:()=>(c.set(o),s(i(0)))}}function y(e){return e>>>0}const g=2n**64n-1n;function D(e){return e&g}const m=new TextEncoder;function M(e,t=0){return d(3*e.length,0),y(r(0,m.encodeInto(e,c).written,t))}function f(e,t=0n){return d(3*e.length,0),D(n(0,m.encodeInto(e,c).written,t))}return{h32:M,h32ToString:(e,t=0)=>M(e,t).toString(16).padStart(8,"0"),h32Raw:(e,t=0)=>(d(e.byteLength,0),c.set(e),y(r(0,e.byteLength,t))),create32:(e=0)=>w(48,e,i,s,o,y),h64:f,h64ToString:(e,t=0n)=>f(e,t).toString(16).padStart(16,"0"),h64Raw:(e,t=0n)=>(d(e.byteLength,0),c.set(e),D(n(0,e.byteLength,t))),create64:(e=0n)=>w(88,e,u,l,a,D)}}((await WebAssembly.instantiate(Wi)).instance)}(),o=s(),u=n.createReadStream(e,{highWaterMark:i}),l=e=>{r.reject(Tn(e));try{u.destroy()}catch(e){}};u.on("data",e=>{try{o.update(e)}catch(e){l(e)}}),u.on("end",()=>{try{let e=o.digest().toString(16).padStart(16,"0");r.resolve(e)}catch(e){l(e)}}),u.on("error",e=>{r.reject(Tn(e))})}catch(e){r.reject(Tn(e))}return r}var ki={exports:{}};!function(e){var t,r;e.exports=(t=o,r={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,n,s,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new i(n,s||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,i=[];if(0===this._eventsCount)return i;for(n in e=this._events)t.call(e,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,s=n.length,o=new Array(s);i<s;i++)o[i]=n[i].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,i,s,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,i),!0;case 5:return c.fn.call(c.context,t,n,i,s),!0;case 6:return c.fn.call(c.context,t,n,i,s,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,y=c.length;for(a=0;a<y;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,i);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,i){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return o(this,s),this;var u=this._events[s];if(u.fn)u.fn!==t||i&&!u.once||n&&u.context!==n||o(this,s);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||i&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[s]=1===a.length?a[0]:a:o(this,s)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}({get exports(){return t},set exports(e){t=e}});var r=t;let n;return function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(i="J3VzZSBzdHJpY3QnCgoKCjsoZnVuY3Rpb24gKHBhcmVudFBvcnQsIG1kRGVmYXVsdCkgewoKbGV0IGluc3RhbmNlID0gbnVsbApsZXQgaW5pdEZhaWwgPSBudWxsIC8v5Yid5aeL5YyW5aSx5pWXKOW3peW7oOWHveaVuOaLi+mMr+etiSnmmYLkuYt7IGVyciB9LCDku6Xnianku7bljIXoo53lm6DpjK/oqqTlgLzlj6/ngrrku7vmhI/lgLw7IOW+jOe6jOWRvOWPq+S7peWFtuWOn+Wni+mMr+iqpOWbnuaHiQpmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBtZERlZmF1bHQKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEsIGRlc2MpIHsKICAgIHRyeSB7CiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgfQogICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vZGF0YeWQq+eEoeazlee1kOani+WMluikh+ijveS5i+WFp+WuuSjlh73mlbjjgIFTeW1ib2znrYkp5pmCcG9zdE1lc3NhZ2XlkIzmraXmi4tEYXRhQ2xvbmVFcnJvcjog5LiN6JmV55CG5YmH5ouL5pa85ZG85Y+r6Lev5b6R5aSWLCDmlrxub2RlanPmiJB3b3JrZXLmnKrmjZXmjYnpjK/oqqTogIzltKnmvbAo5oyB5LmF6IiH5bel5bug5a+m6auU5b6e5q2k5q275LqhKSwg5pa854CP6Ka95Zmo5oiQ5pyq6JmV55CGcmVqZWN0aW9u6ICM5ZG85Y+r5rC45LmF5oe4572uOwogICAgICAgIC8v5L6d6KiK5oGv6aGe5Z6L5pS56YCB5Y+v6KSH6KO95LmL5a2X5Liy6Kqq5piOKGRlc2PngrrlhaflrrnkuYvmj4/ov7ApLCDkvb/lkbzlj6vnq6/lvpfliLDlhbflkI3ljp/lm6DkuJR3b3JrZXLnuozlj6/mnI3li5k7IOWFnOW6leWGjeWkseaVl+WNs+aUvuajhCwg5LiN5Y+v6YGe6L+0CiAgICAgICAgbGV0IG1zZyA9ICcnCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbXNnID0gZGVzYyArICcgY291bGQgbm90IGJlIGNsb25lZDogJyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgICAgIGxldCBkYXRhU2FmZSA9IG51bGwKICAgICAgICBpZiAoZGF0YS5tb2RlID09PSAncmV0dXJuJykgewogICAgICAgICAgICBkYXRhU2FmZSA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGF0YS5tb2RlID09PSAnZW1pdCcpIHsKICAgICAgICAgICAgZGF0YVNhZmUgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRhdGFTYWZlID0gewogICAgICAgICAgICAgICAgbW9kZTogZGF0YS5tb2RlLCAvL21lc3NhZ2VlcnJvcuS5i+mAmuefpeS4jeWPr+eVpemBjiwg5ZCm5YmH5aSW5bGk5ZG85Y+r5Lit5LmLcGVuZGluZ+aHuOe9rgogICAgICAgICAgICAgICAgbXNnLAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YVNhZmUpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBtZERlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKCiAgICAgICAgICAgIC8vaW5pdEZhaWwKICAgICAgICAgICAgaW5pdEZhaWwgPSB7IGVyciB9CgogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMsICdpbml0IGVycm9yJykKCiAgICAgICAgfQoKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9jaGVjaywg5Yid5aeL5YyW5aSx5pWX5pmCaW5zdGFuY2XngrpudWxsLCDku6XliJ3lp4vljJbkuYvljp/lp4vpjK/oqqTlm57mh4ko5ZCM5bu656uL5aSx5pWX5LmL6JmV572uKSwg5LiN5b6X5bCNbnVsbOWPluWAvOiAjOW+l+iqpOWwjuS5i1R5cGVFcnJvcgogICAgICAgICAgICBpZiAoaW5pdEZhaWwpIHsKICAgICAgICAgICAgICAgIHRocm93IGluaXRGYWlsLmVycgogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2Z1biwg6aCI54K65Ye95pW4LCDlkKbliYfku6XlhbflkI3oqIrmga/mi5LntZUo5LiN5b6X54K65bCNdW5kZWZpbmVk5Y+W5YC85oiW5ZG85Y+r5LmL6Kqk5bCOVHlwZUVycm9yKQogICAgICAgICAgICBsZXQgZnVuID0gKGluc3RhbmNlICE9PSBudWxsICYmIGluc3RhbmNlICE9PSB1bmRlZmluZWQpID8gaW5zdGFuY2VbZGF0YS5mdW5dIDogdW5kZWZpbmVkCiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uWycgKyBkYXRhLmZ1biArICddIGlzIG5vdCBhIGZ1bmN0aW9uIGluIHdvcmtlcicpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjLCDku6Vhd2FpdOWPluWAvDog6Z2eYXN5bmPlh73mlbjlm57lgrPpnZ5wcm9taXNl5pmC5Lqm5Y+v5Lqk5LuYLCDkuI3lvpflm6Dlkbzlj6sudGhlbuiAjOWkseaVlzsg5LulUmVmbGVjdC5hcHBseeaMh+WumnRoaXMo6KaLY3RoaXMpCiAgICAgICAgICAgIG1zZyA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuLCB1bmRlZmluZWQsIGlucHV0KQogICAgICAgICAgICBzdGF0ZSA9ICdzdWNjZXNzJwoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KCiAgICAgICAgLy9kZXNjLCDlm57mh4nlhaflrrnnhKHms5XntZDmp4vljJbopIfoo73mmYLlhZzlupXoqqrmmI7kuYvmj4/ov7AKICAgICAgICBsZXQgZGVzYyA9ICcnCiAgICAgICAgaWYgKHN0YXRlID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgZGVzYyA9ICdyZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluaXRGYWlsKSB7CiAgICAgICAgICAgIGRlc2MgPSAnaW5pdCBlcnJvcicKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2MgPSAncmVqZWN0ZWQgdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQoKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMsIGRlc2MpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZWVycm9yJywgKGVycikgPT4gewogICAgICAgICAgICBzZW5kTWVzc2FnZSh7IG1vZGU6ICdtZXNzYWdlZXJyb3InLCBtc2c6IGVyciB9LCAnbWVzc2FnZWVycm9yIG9mIHdvcmtlcicpCiAgICAgICAgfSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhHdvcmtlcuWFp+acquaNleaNiemMr+iqpCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuipsuS6jOebo+iBveacg+mYu+atondvcmtlcuS+nemgkOioree1guatoiwg5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOiAjOS7pHBlbmRpbmfmsLjkuYXmh7jnva4sIOaureWxjXdvcmtlcuS4puS7pOWuv+S4u+eEoeazlemAgOWHujsKICAgIC8v6Yyv6Kqk6ZuW5bey57aTZXJyb3Lkuovku7blgrPoh7PlpJblsaRyZWplY3QgcGVuZGluZywg5L2G54ShcGVuZGluZ+S4lOWRvOWPq+err+acquebo+iBvWVycm9y5pmCKGV2ZW50ZW1pdHRlcjPnhKHnm6Pogb3ogIXmmYJlbWl05LiN5ouL6YyvKeatpOi8uOWHuueCuuWUr+S4gOeXlei3oSwg5pWF5L+d55WZOwogICAgLy/mnKznm6Pogb3mlrzooqvljIXoo53nqIvlvI/norzln7fooYzkuYvlvozmiY3lronoo50sIOi8ieWFpeacn+S5i+mMr+iqpOS4jee2k+atpOiomOmMhAogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikgLy/oqLrmlrfovLjlh7roh7NzdGRlcnIo5ZCMTm9kZeacquaNleaNiemMr+iqpOS5i+aFo+S+iyksIHdvcmtlcuS5i3N0ZGlv6L2J6YCB6Iez5a6/5Li7LCDkuI3lvpfmt7flhaXlrr/kuLtzdGRvdXTkuYvos4fmlpnmtYEKICAgIH0pCgp9CmNhdGNoKGVycil7fQoKfSkoCi8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwpyZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLnBhcmVudFBvcnQsIC8vaW5uZXLku6VuZXcgV29ya2VyKGNvZGUsIHsgZXZhbDogdHJ1ZSB9KeWft+ihjCwgZXZhbOWtl+S4sumgkOioreS7pUNvbW1vbkpT6Kej5p6QKOiIh3BhY2thZ2UuanNvbuS5i3R5cGXnhKHpl5wsIOWDheeUsS0taW5wdXQtdHlwZeaxuuWumiksIOaVheW+l+S9v+eUqHJlcXVpcmUKLy/oqK3oqIjpmZDliLY6IOWuv+S4u+S7pS0taW5wdXQtdHlwZT1tb2R1bGXllZ/li5XmmYJ3b3JrZXLnubzmib/oqbLlj4PmlbgsIGlubmVy6KKr55W2RVNN6Kej5p6Q6ICMcmVxdWlyZeWkseaViCwg5bGs5LiN5pSv5o+05LmL5Z+36KGM5pa55byPCi8v6Iul6KaB5pa8bm9kZWpzIHdvcmtlcuWFp+S9v+eUqOeEoeazlei9ieitr+eahOWOn+eUn+Wll+S7tuS+i+WmgmZzLCDpgb/lhY3kvb/nlKjpoILlsaRpbXBvcnTliqDovInkvb/nlKgsIOWboOeEoeazlei9ieitr+acg+ebtOaOpeS/neeVmQovL+S4puWboGV2YWzlrZfkuLLngrpDb21tb25KU+iAjOS4jeaOpeWPl2ltcG9ydCwg5pWF5Ye654++6Yyv6Kqk54Sh5rOV6L2J6K2vCihmdW5jdGlvbiAoKSB7CgogICAgLy/kvb/nlKjogIXnqIvlvI/norwoY2pzKSwg5LulQ29tbW9uSlPmqKHntYTljIXoo53lh73mlbjln7fooYw7IOiIh+S4iuaWuWlubmVy5LmL5Ye95pW454K65YWE5byf5L2c55So5Z+fLCDkupLkuI3lj6/oposKICAgIGxldCBtZFVzZXIgPSAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICE9PSBudWxsKSA/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIikscj1yZXF1aXJlKCJmcyIpLGU9cmVxdWlyZSgiZXZlbnRzIiksbj1BcnJheS5pc0FycmF5LG89Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLGk9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1PW98fGl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYT11LlN5bWJvbCxjPU9iamVjdC5wcm90b3R5cGUsZj1jLmhhc093blByb3BlcnR5LHM9Yy50b1N0cmluZyxsPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgcD0iW29iamVjdCBOdWxsXSIseT0iW29iamVjdCBVbmRlZmluZWRdIixnPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gdih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10P3k6cDpnJiZnIGluIE9iamVjdCh0KT9mdW5jdGlvbih0KXt2YXIgcj1mLmNhbGwodCxsKSxlPXRbbF07dHJ5e3RbbF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKHQpe312YXIgbz1zLmNhbGwodCk7cmV0dXJuIG4mJihyP3RbbF09ZTpkZWxldGUgdFtsXSksb30odCk6ZnVuY3Rpb24odCl7cmV0dXJuIGguY2FsbCh0KX0odCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBkPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIF8odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxiKHQpJiZ2KHQpPT1kfXZhciBqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLFM9L15cdyokLztmdW5jdGlvbiBtKHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PXJ8fCJmdW5jdGlvbiI9PXIpfXZhciB3PSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixPPSJbb2JqZWN0IEZ1bmN0aW9uXSIsRT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLE49IltvYmplY3QgUHJveHldIjt2YXIgQSxSPXVbIl9fY29yZS1qc19zaGFyZWRfXyJdLHg9KEE9L1teLl0rJC8uZXhlYyhSJiZSLmtleXMmJlIua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0E6IiI7dmFyICQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBJPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHo9RnVuY3Rpb24ucHJvdG90eXBlLFA9T2JqZWN0LnByb3RvdHlwZSxGPXoudG9TdHJpbmcsTD1QLmhhc093blByb3BlcnR5LFQ9UmVnRXhwKCJeIitGLmNhbGwoTCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gTSh0KXtpZighbSh0KXx8KHI9dCx4JiZ4IGluIHIpKXJldHVybiExO3ZhciByLGU9ZnVuY3Rpb24odCl7aWYoIW0odCkpcmV0dXJuITE7dmFyIHI9dih0KTtyZXR1cm4gcj09T3x8cj09RXx8cj09d3x8cj09Tn0odCk/VDpJO3JldHVybiBlLnRlc3QoZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiAkLmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifSh0KSl9ZnVuY3Rpb24gayh0LHIpe3ZhciBlPWZ1bmN0aW9uKHQscil7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbcl19KHQscik7cmV0dXJuIE0oZSk/ZTp2b2lkIDB9dmFyIFU9ayhPYmplY3QsImNyZWF0ZSIpO3ZhciBDPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIEc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKHQpe3ZhciByPS0xLGU9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytyPGU7KXt2YXIgbj10W3JdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHEodCxyKXtmb3IodmFyIGUsbixvPXQubGVuZ3RoO28tLTspaWYoKGU9dFtvXVswXSk9PT0obj1yKXx8ZSE9ZSYmbiE9bilyZXR1cm4gbztyZXR1cm4tMX1XLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189VT9VKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxXLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPXI/MTowLHJ9LFcucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fO2lmKFUpe3ZhciBlPXJbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09ZT92b2lkIDA6ZX1yZXR1cm4gQy5jYWxsKHIsdCk/clt0XTp2b2lkIDB9LFcucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiBVP3ZvaWQgMCE9PXJbdF06Ry5jYWxsKHIsdCl9LFcucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLGVbdF09VSYmdm9pZCAwPT09cj8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6cix0aGlzfTt2YXIgRD1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIFgodCl7dmFyIHI9LTEsZT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3I8ZTspe3ZhciBuPXRbcl07dGhpcy5zZXQoblswXSxuWzFdKX19WC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxYLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPXEocix0KTtyZXR1cm4hKGU8MCkmJihlPT1yLmxlbmd0aC0xP3IucG9wKCk6RC5jYWxsKHIsZSwxKSwtLXRoaXMuc2l6ZSwhMCl9LFgucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fLGU9cShyLHQpO3JldHVybiBlPDA/dm9pZCAwOnJbZV1bMV19LFgucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gcSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxYLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cShlLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLGUucHVzaChbdCxyXSkpOmVbbl1bMV09cix0aGlzfTt2YXIgQj1rKHUsIk1hcCIpO2Z1bmN0aW9uIEgodCxyKXt2YXIgZSxuLG89dC5fX2RhdGFfXztyZXR1cm4oInN0cmluZyI9PShuPXR5cGVvZihlPXIpKXx8Im51bWJlciI9PW58fCJzeW1ib2wiPT1ufHwiYm9vbGVhbiI9PW4/Il9fcHJvdG9fXyIhPT1lOm51bGw9PT1lKT9vWyJzdHJpbmciPT10eXBlb2Ygcj8ic3RyaW5nIjoiaGFzaCJdOm8ubWFwfWZ1bmN0aW9uIEoodCl7dmFyIHI9LTEsZT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3I8ZTspe3ZhciBuPXRbcl07dGhpcy5zZXQoblswXSxuWzFdKX19Si5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBXLG1hcDpuZXcoQnx8WCksc3RyaW5nOm5ldyBXfX0sSi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciByPUgodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09cj8xOjAscn0sSi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMsdCkuZ2V0KHQpfSxKLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIEgodGhpcyx0KS5oYXModCl9LEoucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3ZhciBlPUgodGhpcyx0KSxuPWUuc2l6ZTtyZXR1cm4gZS5zZXQodCxyKSx0aGlzLnNpemUrPWUuc2l6ZT09bj8wOjEsdGhpc307dmFyIEs9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIFEodCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihLKTt2YXIgZT1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxvPXI/ci5hcHBseSh0aGlzLG4pOm5bMF0saT1lLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgdT10LmFwcGx5KHRoaXMsbik7cmV0dXJuIGUuY2FjaGU9aS5zZXQobyx1KXx8aSx1fTtyZXR1cm4gZS5jYWNoZT1uZXcoUS5DYWNoZXx8SiksZX1RLkNhY2hlPUo7dmFyIFYsWSxaLHR0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJ0PS9cXChcXCk/L2csZXQ9KFY9ZnVuY3Rpb24odCl7dmFyIHI9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZyLnB1c2goIiIpLHQucmVwbGFjZSh0dCwoZnVuY3Rpb24odCxlLG4sbyl7ci5wdXNoKG4/by5yZXBsYWNlKHJ0LCIkMSIpOmV8fHQpfSkpLHJ9LFk9UShWLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09Wi5zaXplJiZaLmNsZWFyKCksdH0pKSxaPVkuY2FjaGUsWSksbnQ9ZXQ7dmFyIG90PTEvMCxpdD1hP2EucHJvdG90eXBlOnZvaWQgMCx1dD1pdD9pdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gYXQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG4odCkpcmV0dXJuIGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytlPG47KW9bZV09cih0W2VdLGUsdCk7cmV0dXJuIG99KHQsYXQpKyIiO2lmKF8odCkpcmV0dXJuIHV0P3V0LmNhbGwodCk6IiI7dmFyIHI9dCsiIjtyZXR1cm4iMCI9PXImJjEvdD09LW90PyItMCI6cn1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gbnVsbD09dD8iIjphdCh0KX1mdW5jdGlvbiBmdCh0LHIpe3JldHVybiBuKHQpP3Q6ZnVuY3Rpb24odCxyKXtpZihuKHQpKXJldHVybiExO3ZhciBlPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPWUmJiJzeW1ib2wiIT1lJiYiYm9vbGVhbiIhPWUmJm51bGwhPXQmJiFfKHQpKXx8Uy50ZXN0KHQpfHwhai50ZXN0KHQpfHxudWxsIT1yJiZ0IGluIE9iamVjdChyKX0odCxyKT9bdF06bnQoY3QodCkpfXZhciBzdD0xLzA7ZnVuY3Rpb24gbHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxfKHQpKXJldHVybiB0O3ZhciByPXQrIiI7cmV0dXJuIjAiPT1yJiYxL3Q9PS1zdD8iLTAiOnJ9ZnVuY3Rpb24gaHQodCxyLGUpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPTAsbj0ocj1mdChyLHQpKS5sZW5ndGg7bnVsbCE9dCYmZTxuOyl0PXRbbHQocltlKytdKV07cmV0dXJuIGUmJmU9PW4/dDp2b2lkIDB9KHQscik7cmV0dXJuIHZvaWQgMD09PW4/ZTpufWZ1bmN0aW9uIHB0KHQscj17fSl7bGV0IGU9aHQociwiZnMiKSxuPSExO3RyeXtlLnN0YXRTeW5jKHQpLG49ITB9Y2F0Y2h7bj0hMX1yZXR1cm4gbn1mdW5jdGlvbiB5dCh0LHI9e30pe2xldCBlPWh0KHIsImZzIik7cmV0dXJuISFwdCh0LHtmczplfSkmJighZS5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIWUubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCkpfWZ1bmN0aW9uIGd0KCl7bGV0IHQscixlPW5ldyBQcm9taXNlKChmdW5jdGlvbigpe3Q9YXJndW1lbnRzWzBdLHI9YXJndW1lbnRzWzFdfSkpO3JldHVybiBlLnJlc29sdmU9dCxlLnJlamVjdD1yLGV9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBidCh0KXtpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2ZvcihsZXQgciBpbiB0KXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGR0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF90KHQpe2lmKHQhPXQpcmV0dXJuITA7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl0cnl7bGV0IHI9TnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodCk7cmV0dXJuIE51bWJlci5pc05hTihyKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4hIWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IFVuZGVmaW5lZF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KXx8KCEhZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgTnVsbF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KXx8KCEhYnQodCl8fCghIWZ1bmN0aW9uKHQpe3JldHVybiEoIWR0KHQpfHwwIT09dC5sZW5ndGgpfSh0KXx8KCEhZnVuY3Rpb24odCl7cmV0dXJuISF2dCh0KSYmMD09PXQubGVuZ3RofSh0KXx8ISFfdCh0KSkpKSl9ZnVuY3Rpb24gU3QodCl7cmV0dXJuISEoZHQodCkmJnQubGVuZ3RoPjApfXZhciBtdD0vXHMvO3ZhciB3dD0vXlxzKy87ZnVuY3Rpb24gT3QodCl7cmV0dXJuIHQ/dC5zbGljZSgwLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aDtyLS0mJm10LnRlc3QodC5jaGFyQXQocikpOyk7cmV0dXJuIHJ9KHQpKzEpLnJlcGxhY2Uod3QsIiIpOnR9dmFyIEV0PU5hTixOdD0vXlstK10weFswLTlhLWZdKyQvaSxBdD0vXjBiWzAxXSskL2ksUnQ9L14wb1swLTddKyQvaSx4dD1wYXJzZUludDtmdW5jdGlvbiAkdCh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoXyh0KSlyZXR1cm4gRXQ7aWYobSh0KSl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9bShyKT9yKyIiOnJ9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9T3QodCk7dmFyIGU9QXQudGVzdCh0KTtyZXR1cm4gZXx8UnQudGVzdCh0KT94dCh0LnNsaWNlKDIpLGU/Mjo4KTpOdC50ZXN0KHQpP0V0Oit0fXZhciBJdD0xLzAsenQ9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2Z1bmN0aW9uIFB0KHQpe3JldHVybiB0Pyh0PSR0KHQpKT09PUl0fHx0PT09LUl0Pyh0PDA/LTE6MSkqenQ6dD09dD90OjA6MD09PXQ/dDowfWZ1bmN0aW9uIEZ0KHQpe3ZhciByPVB0KHQpLGU9ciUxO3JldHVybiByPT1yP2U/ci1lOnI6MH12YXIgTHQ9IltvYmplY3QgQm9vbGVhbl0iO2Z1bmN0aW9uIFR0KHQpe3JldHVybiEwPT09KHI9dCl8fCExPT09cnx8YihyKSYmdihyKT09THQ7dmFyIHJ9ZnVuY3Rpb24gTXQodCl7bGV0IHI9ITE7aWYoU3QodCkpe2lmKCIiPT09dC50cmltKCkpcmV0dXJuITE7cj0haXNOYU4oTnVtYmVyKHQpKX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KSl7aWYoX3QodCkpcmV0dXJuITE7cj0hMH1yZXR1cm4gcn1mdW5jdGlvbiBrdCh0KXtpZighTXQodCkpcmV0dXJuIDA7cmV0dXJuIFB0KHQpfWZ1bmN0aW9uIFV0KHQscj17fSl7bGV0IGU9aHQociwidXNlTGltaXRTYWZlIixudWxsKTtyZXR1cm4gVHQoZSl8fChlPSExKSwhIU10KHQpJiYodD1rdCh0KSxlP051bWJlci5pc1NhZmVJbnRlZ2VyKHQpOiJudW1iZXIiPT10eXBlb2Yobj10KSYmbj09RnQobikpO3ZhciBufXZhciBDdD11LmlzRmluaXRlLEd0PU1hdGgubWluO3ZhciBXdD1mdW5jdGlvbih0KXt2YXIgcj1NYXRoW3RdO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQ9JHQodCksKGU9bnVsbD09ZT8wOkd0KEZ0KGUpLDI5MikpJiZDdCh0KSl7dmFyIG49KGN0KHQpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKChuPShjdChyKG5bMF0rImUiKygrblsxXStlKSkpKyJlIikuc3BsaXQoImUiKSlbMF0rImUiKygrblsxXS1lKSl9cmV0dXJuIHIodCl9fSgicm91bmQiKSxxdD1XdDtmdW5jdGlvbiBEdCh0LHI9e30pe2xldCBlPWh0KHIsInVzZUNsYW1wU2FmZSIsbnVsbCk7VHQoZSl8fChlPSExKTtsZXQgbj1odChyLCJ1c2VMaW1pdFNhZmUiLG51bGwpO1R0KG4pfHwobj0hMSk7bGV0IG89aHQociwicmV0dXJuV2l0aFN0YXRlQW5kTXNnIixudWxsKTtUdChvKXx8KG89ITEpO2xldCBpPXQ9Pm8/e3N0YXRlOiJzdWNjZXNzIixtc2c6dH06dCx1PXQ9PntpZihvKXJldHVybntzdGF0ZToiZXJyb3IiLG1zZzp0fTt0aHJvdyBuZXcgRXJyb3IodCl9O2lmKCFNdCh0KSlyZXR1cm4gaSgwKTtsZXQgYT1udWxsO3RyeXt0PWt0KHQpLGE9cXQodCksZSYmKGE+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/YT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjphPE51bWJlci5NSU5fU0FGRV9JTlRFR0VSJiYoYT1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpfWNhdGNoKHQpe3JldHVybiB1KHQudG9TdHJpbmcoKSl9cmV0dXJuIG4mJiFOdW1iZXIuaXNTYWZlSW50ZWdlcihOdW1iZXIoYSkpP3UoYHZbJHt0fV0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk6KCIwIj09PVN0cmluZyhhKSYmKGE9MCksaShhKSl9ZnVuY3Rpb24gWHQodCxyPXt9KXtpZighVXQodCxyKSlyZXR1cm4hMTtyZXR1cm4gRHQodCk+PTB9ZnVuY3Rpb24gQnQodCxyKXtpZighU3QodCkpcmV0dXJuIiI7aWYoIVh0KHIpKXJldHVybiIiO2lmKDA9PT0ocj1EdChyKSkpcmV0dXJuIiI7bGV0IGU9dC5sZW5ndGgtcjtyZXR1cm4gZTwwJiYoZT0wKSx0LnN1YnN0cmluZyhlLGUrcil9ZnVuY3Rpb24gSHQodCxyKXtyZXR1cm4gU3QodCkmJlh0KHIpPzA9PT0ocj1EdChyKSk/dDpmdW5jdGlvbih0LHIpe3JldHVybiBTdCh0KSYmWHQocik/MD09PShyPUR0KHIpKT8iIjp0LnN1YnN0cmluZygwLHIpOiIifSh0LHQubGVuZ3RoLXIpOiIifWZ1bmN0aW9uIEp0KHQpe2lmKCFTdCh0KSlyZXR1cm57cGF0aDoiIixpc1Jvb3Q6ITF9O2Zvcig7dC5pbmRleE9mKCJcXFxcIik+PTA7KXQ9dC5yZXBsYWNlKCJcXFxcIiwiXFwiKTtmb3IoO3QuaW5kZXhPZigiLy8iKT49MDspdD10LnJlcGxhY2UoIi8vIiwiLyIpO2lmKCI6Ij09PUJ0KHQsMSkpcmV0dXJue3BhdGg6YCR7dH1cXGAsaXNSb290OiEwfTtpZigiXFwiPT09QnQodCwxKSl7bGV0IHI9SHQodCwxKTtyZXR1cm4iOiI9PT1CdChyLDEpP3twYXRoOnQsaXNSb290OiEwfTp7cGF0aDpyLGlzUm9vdDohMX19aWYoIi8iPT09QnQodCwxKSl7bGV0IHI9SHQodCwxKTtyZXR1cm4gMD09PXIubGVuZ3RoP3twYXRoOnQsaXNSb290OiEwfTp7cGF0aDpyLGlzUm9vdDohMX19cmV0dXJue3BhdGg6dCxpc1Jvb3Q6ITF9fWZ1bmN0aW9uIEt0KHQpe2lmKCFTdCh0KSlyZXR1cm4iIjtsZXQgcj1KdCh0KTtpZihyLmlzUm9vdClyZXR1cm4gci5wYXRoO2xldCBlPXIucGF0aDt0cnl7ZT1lLnNwbGl0KCJcXCIpLnBvcCgpLnNwbGl0KCIvIikucG9wKCl9Y2F0Y2godCl7fXJldHVybiBlfWZ1bmN0aW9uIFF0KHQscj17fSl7bGV0IGU9aHQociwiZnMiKTtpZighcHQodCx7ZnM6ZX0pKXJldHVybiExO2xldCBuPWUubHN0YXRTeW5jKHQpO3JldHVybiFuLmlzRmlsZSgpJiYhbi5pc1N5bWJvbGljTGluaygpfWZ1bmN0aW9uIFZ0KHQpe3RyeXtyZXR1cm4gU3RyaW5nKHQpfWNhdGNoKHQpe310cnl7bGV0IHI9dC5tZXNzYWdlO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yKXJldHVybiByfWNhdGNoKHQpe31yZXR1cm4idW5rbm93biBlcnJvciJ9ZnVuY3Rpb24gWXQodCl7bGV0IHI9ITE7dHJ5e3I9ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4hMTtpZih0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuITA7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEVycm9yLmlzRXJyb3IpcmV0dXJuIEVycm9yLmlzRXJyb3IodCk7aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHQpcmV0dXJuITE7bGV0IHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpO3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1yfHwiW29iamVjdCBET01FeGNlcHRpb25dIj09PXJ9KHQpfWNhdGNoKHQpe31pZihyKXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10KXJldHVybiB0O2xldCBlPVZ0KHQpO3JldHVybiIiIT09ZT9lOiJ1bmtub3duIGVycm9yIn1mdW5jdGlvbiBadCh0LHI9e30pe3RyeXtsZXQgZT1odChyLCJmcyIpO2lmKCFwdCh0LHtmczplfSkpcmV0dXJue3N1Y2Nlc3M6ImZpbGUgZG9lcyBub3QgZXhpc3Q6ICIrdH07aWYoIXl0KHQse2ZzOmV9KSlyZXR1cm57ZXJyb3I6ImlucHV0IHBhdGggaXMgbm90IGEgZmlsZTogIit0fTtlLnVubGlua1N5bmModCl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOll0KHQpfX1yZXR1cm57c3VjY2VzczoiZG9uZTogIit0fX1hc3luYyBmdW5jdGlvbiB0cih0LHIsbj17fSl7bGV0IG89IiI7aWYoIXZ0KGk9dCl8fDA9PT1pLmxlbmd0aHx8MT09PWkubGVuZ3RoJiZqdChpWzBdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoImZwc0luIGluIG5vdCBhbiBlZmZlY3RpdmUgYXJyYXkiKTt2YXIgaTtsZXQgdT1mdW5jdGlvbih0KXtpZighU3QodCkpcmV0dXJuIiI7bGV0IHI9SnQodCk7aWYoci5pc1Jvb3QpcmV0dXJuIHIucGF0aDtsZXQgZT1LdCh0PXIucGF0aCk7aWYoIVN0KGUpKXJldHVybiB0O2xldCBuPUp0KHQ9SHQodCxlLmxlbmd0aCkpO3JldHVybiBuLmlzUm9vdCxuLnBhdGh9KHIpLGE9Z3QoKTthLmNhdGNoKCgoKT0+e30pKTtsZXQgYz1udWxsLGY9bnVsbCxzPSExLGw9Z3QoKTtsLmNhdGNoKCgoKT0+e30pKTtsZXQgaD10PT57bGV0IHI7dHJ5e3I9dC5tZXNzYWdlfWNhdGNoKHQpe31yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/cjpWdCh0KX07dHJ5e2xldCBpPWh0KG4sImZzIikscD1odChuLCJmbk91dCIsIiIpO1N0KHApfHwocD1LdChyKSksUXQodSx7ZnM6aX0pfHxmdW5jdGlvbih0LHI9e30pe3RyeXtsZXQgZT1odChyLCJmcyIpO2lmKFF0KHQse2ZzOmV9KSlyZXR1cm57c3VjY2VzczoiaW5wdXQgZm9sZGVyIGlzIGFscmVhZHkgZXhpc3RzOiAiK3R9O2lmKHB0KHQse2ZzOmV9KSlyZXR1cm57ZXJyb3I6ImlucHV0IHBhdGggYWxyZWFkeSBleGlzdHM6ICIrdH07ZS5ta2RpclN5bmModCx7cmVjdXJzaXZlOiEwfSl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOll0KHQpfX19KHUse2ZzOml9KSxjPWkuY3JlYXRlV3JpdGVTdHJlYW0ociksYy5vbigiZXJyb3IiLCh0PT57cz0hMCxmPXQsbz1oKHQpLGwucmVqZWN0KHQpLGEucmVqZWN0KG8pfSkpLGMub24oImZpbmlzaCIsKCgpPT57bGV0IHQ9e2ZpbGVuYW1lOnAscGF0aDpyfTthLnJlc29sdmUodCl9KSk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2lmKHMpdGhyb3cgZjtsZXQgbj10W3JdO2lmKCF5dChuLHtmczppfSkpdGhyb3cgbmV3IEVycm9yKGBmcEluWyR7bn1dIGlzIG5vdCBhIGZpbGVgKTtsZXQgbz1hc3luYygpPT57bGV0IHQ9aS5jcmVhdGVSZWFkU3RyZWFtKG4pLHI9bnVsbDtmb3IgYXdhaXQobGV0IG4gb2YgdCl7aWYocyl0aHJvdyBmO2xldCB0PSExLG89bmV3IFByb21pc2UoKChyLGUpPT57dD0hYy53cml0ZShuLCh0PT57dD9lKHQpOnIoKX0pKX0pKTtvLmNhdGNoKCgoKT0+e30pKSxyPW8sdCYmYXdhaXQgUHJvbWlzZS5yYWNlKFtlLm9uY2UoYywiZHJhaW4iKSxsXSl9aWYobnVsbCE9PXImJmF3YWl0IHIscyl0aHJvdyBmO1p0KG4se2ZzOml9KX07YXdhaXQgbygpfWMuZW5kKCl9Y2F0Y2godCl7bz1oKHQpO3RyeXtjLmRlc3Ryb3koKX1jYXRjaCh0KXt9YS5yZWplY3Qobyl9cmV0dXJuIGF9Y29uc3QgcnI9bmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNDgsOCw5NiwzLDEyNywxMjcsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjcsMCw5NiwyLDEyNywxMjcsMCw5NiwxLDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI2LDEsMTI2LDk2LDMsMTI2LDEyNywxMjcsMSwxMjYsOTYsMiwxMjcsMTI2LDAsOTYsMSwxMjcsMSwxMjYsMywxMSwxMCwwLDAsMiwxLDMsNCw1LDYsMSw3LDUsMywxLDAsMSw3LDg1LDksMywxMDksMTAxLDEwOSwyLDAsNSwxMjAsMTIwLDEwNCw1MSw1MCwwLDAsNiwxMDUsMTEwLDEwNSwxMTYsNTEsNTAsMCwyLDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1MSw1MCwwLDMsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1MSw1MCwwLDQsNSwxMjAsMTIwLDEwNCw1NCw1MiwwLDUsNiwxMDUsMTEwLDEwNSwxMTYsNTQsNTIsMCw3LDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1NCw1MiwwLDgsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1NCw1MiwwLDksMTAsMjUxLDIyLDEwLDI0MiwxLDEsNCwxMjcsMzIsMCwzMiwxLDEwNiwzMywzLDMyLDEsNjUsMTYsNzksNCwxMjcsMzIsMyw2NSwxNiwxMDcsMzMsNiwzMiwyLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiwzMywzLDMyLDIsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDMzLDQsMzIsMiw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDQsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDQsMzIsMiwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiw1LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDYsMzIsMCw2NSw0LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NSwxMiwxMTksMzIsNSw2NSwxOCwxMTksMTA2LDMyLDQsNjUsNywxMTksMTA2LDMyLDMsNjUsMSwxMTksMTA2LDUsMzIsMiw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMSwxMDYsMzIsMCwzMiwxLDY1LDE1LDExMywxNiwxLDExLDE0NiwxLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMSw2NSw0LDEwNiwzMiwyLDc1LDY5LDQsNjQsMzIsMCwzMiwxLDQwLDIsMCw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwxMDYsNjUsMTcsMTE5LDY1LDE3NSwyMTQsMjExLDE5MCwyLDEwOCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMiwxLDExLDExLDMsNjQsMzIsMSwzMiwyLDc5LDY5LDQsNjQsMzIsMCwzMiwxLDQ1LDAsMCw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDgsMTA2LDY1LDExLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NSwxNSwxMTgsMTE1LDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDM0LDAsNjUsMTMsMTE4LDMyLDAsMTE1LDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDM0LDAsNjUsMTYsMTE4LDMyLDAsMTE1LDExLDYzLDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMSw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDEsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDU0LDIsMCwxMSwxOTUsNCwxLDYsMTI3LDMyLDEsMzIsMiwxMDYsMzMsNiwzMiwwLDY1LDI0LDEwNiwzMyw0LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MCwyLDAsMzIsMiwxMDYsNTQsMiwwLDMyLDAsNjUsNCwxMDYsMzQsNSwzMiw1LDQwLDIsMCwzMiwyLDY1LDE2LDc5LDMyLDAsNDAsMiwwLDY1LDE2LDc5LDExNCwxMTQsNTQsMiwwLDMyLDIsMzIsMywxMDYsNjUsMTYsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMTYsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsNCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw4LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDEyLDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSw0MCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsMzIsNiw2NSwxNiwxMDcsNzcsNCw2NCwzMiw2LDY1LDE2LDEwNywzMyw4LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDMzLDIsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDMzLDMsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDUsMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDMzLDcsMyw2NCwzMiwyLDMyLDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiwzLDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDUsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNywzMiw4LDMyLDEsNjUsNCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsMiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsNSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsNyw1NCwyLDAsMTEsMzIsMSwzMiw2LDczLDQsNjQsMzIsNCwzMiwxLDMyLDYsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDk3LDEsMSwxMjcsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDEsMzIsMCw2NSw0LDEwNiw0MCwyLDAsNCwxMjcsMzIsMSw2NSwxMiwxMTksMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDY1LDE4LDExOSwxMDYsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDY1LDcsMTE5LDEwNiwzMiwwLDY1LDgsMTA2LDQwLDIsMCw2NSwxLDExOSwxMDYsNSwzMiwxLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwwLDQwLDIsMCwxMDYsMzIsMCw2NSwyNCwxMDYsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDE2LDEsMTEsMjU1LDMsMiwzLDEyNiwxLDEyNywzMiwwLDMyLDEsMTA2LDMzLDYsMzIsMSw2NSwzMiw3OSw0LDEyNiwzMiw2LDY1LDMyLDEwNywzMyw2LDMyLDIsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsMzMsMywzMiwyLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDMzLDQsMzIsMiw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCwzMyw1LDMsNjQsMzIsMywzMiwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMywzMiw0LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDQsMzIsMiwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywyLDMyLDUsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNSwzMiw2LDMyLDAsNjUsOCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjYsMTIsMTM3LDMyLDUsNjYsMTgsMTM3LDEyNCwzMiw0LDY2LDcsMTM3LDEyNCwzMiwzLDY2LDEsMTM3LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMiw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMiw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwxLDE3MywxMjQsMzIsMCwzMiwxLDY1LDMxLDExMywxNiw2LDExLDEzNCwyLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMiwzMiwxLDY1LDgsMTA2LDc5LDQsNjQsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzIsMCwxMzMsNjYsMjcsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzMsMCwzMiwxLDY1LDgsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwxLDY1LDQsMTA2LDMyLDIsNzcsNCw2NCwzMiwwLDMyLDEsNTMsMiwwLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDIzLDEzNyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMSwzLDY0LDMyLDEsMzIsMiw3Myw0LDY0LDMyLDAsMzIsMSw0OSwwLDAsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjYsMTMzLDY2LDExLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY2LDMzLDEzNiwxMzMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMzQsMCwzMiwwLDY2LDI5LDEzNiwxMzMsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjYsMzQsMCwzMiwwLDY2LDMyLDEzNiwxMzMsMTEsNzcsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDEsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDEsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsNTUsMywwLDExLDI0NCw0LDIsMywxMjcsNCwxMjYsMzIsMSwzMiwyLDEwNiwzMyw1LDMyLDAsNjUsNDAsMTA2LDMzLDQsMzIsMCw2NSwyMDAsMCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQxLDMsMCwzMiwyLDE3MywxMjQsNTUsMywwLDMyLDIsMzIsMywxMDYsNjUsMzIsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMzIsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSw4LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMTYsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwyNCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyMDAsMCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsNjUsMzIsMTA2LDMyLDUsNzcsNCw2NCwzMiw1LDY1LDMyLDEwNywzMywyLDMyLDAsNjUsOCwxMDYsNDEsMywwLDMzLDYsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDMzLDcsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDgsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDMzLDksMyw2NCwzMiw2LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw2LDMyLDcsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNywzMiw4LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDgsMzIsOSwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw5LDMyLDIsMzIsMSw2NSw4LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiw2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiw3LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiw4LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiw5LDU1LDMsMCwxMSwzMiwxLDMyLDUsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNSwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsMTg4LDIsMSw1LDEyNiwzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsMSwzMiwwLDQxLDMsMCwzNCwyLDY2LDMyLDkwLDQsMTI2LDMyLDAsNjUsOCwxMDYsNDEsMywwLDM0LDMsNjYsMSwxMzcsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDM0LDQsNjYsNywxMzcsMTI0LDMyLDEsNjYsMTIsMTM3LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzNCw1LDY2LDE4LDEzNywxMjQsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwxLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwxLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDIsMTI0LDMyLDAsNjUsNDAsMTA2LDMyLDIsNjYsMzEsMTMxLDE2NywxNiw2LDExXSk7YXN5bmMgZnVuY3Rpb24gZXIodCxyPXt9KXtsZXQgZT1ndCgpO3RyeXtsZXQgbj1odChyLCJmcyIpLG89aHQociwiY2h1bmtTaXplIik7aWYoZnVuY3Rpb24odCxyPXt9KXtyZXR1cm4hIVV0KHQscikmJkR0KHQpPjB9KG8pfHwobz02NzEwODg2NCksbz1EdChvKSxvPjIqKjMwJiYobz02NzEwODg2NCksIXl0KHQse2ZzOm59KSlyZXR1cm4gZS5yZWplY3QoImZwIGlzIG5vdCBhIGZpbGUiKSxlO2xldHtjcmVhdGU2NDppfT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06cix4eGgzMjplLHh4aDY0Om4saW5pdDMyOm8sdXBkYXRlMzI6aSxkaWdlc3QzMjp1LGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6Zn19PXQ7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoci5idWZmZXIpO2Z1bmN0aW9uIGwodCxlKXtpZihyLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrZSl7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrZS1yLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ci5ncm93KG4pLHM9bmV3IFVpbnQ4QXJyYXkoci5idWZmZXIpfX1mdW5jdGlvbiBoKHQscixlLG4sbyxpKXtsKHQpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHMuc2V0KHUpLGUoMCxyKSx1LnNldChzLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUocil7bGV0IGU7cmV0dXJuIHMuc2V0KHUpLCJzdHJpbmciPT10eXBlb2Ygcj8obCgzKnIubGVuZ3RoLHQpLGU9di5lbmNvZGVJbnRvKHIscy5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoci5ieXRlTGVuZ3RoLHQpLHMuc2V0KHIsdCksZT1yLmJ5dGVMZW5ndGgpLG4oMCx0LGUpLHUuc2V0KHMuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4ocy5zZXQodSksaShvKDApKSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHk9Mm4qKjY0bi0xbjtmdW5jdGlvbiBnKHQpe3JldHVybiB0Jnl9Y29uc3Qgdj1uZXcgVGV4dEVuY29kZXIsYj0wLGQ9MG47ZnVuY3Rpb24gXyh0LHI9Yil7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxwKGUoMCx2LmVuY29kZUludG8odCxzKS53cml0dGVuLHIpKX1mdW5jdGlvbiBqKHQscj1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLGcobigwLHYuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4scikpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxyPWIpPT5fKHQscikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQscj1iKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHAoZSgwLHQuYnl0ZUxlbmd0aCxyKSkpLGNyZWF0ZTMyOih0PWIpPT5oKDQ4LHQsbyxpLHUscCksaDY0OmosaDY0VG9TdHJpbmc6KHQscj1kKT0+aih0LHIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxyPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCksZyhuKDAsdC5ieXRlTGVuZ3RoLHIpKSksY3JlYXRlNjQ6KHQ9ZCk9PmgoODgsdCxhLGMsZixnKX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShycikpLmluc3RhbmNlKX0oKSx1PWkoKSxhPW4uY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm99KSxjPXQ9PntlLnJlamVjdChWdCh0KSk7dHJ5e2EuZGVzdHJveSgpfWNhdGNoKHQpe319O2Eub24oImRhdGEiLCh0PT57dHJ5e3UudXBkYXRlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVuZCIsKCgpPT57dHJ5e2xldCB0PXUuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIik7ZS5yZXNvbHZlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVycm9yIiwodD0+e2UucmVqZWN0KFZ0KHQpKX0pKX1jYXRjaCh0KXtlLnJlamVjdChWdCh0KSl9cmV0dXJuIGV9bW9kdWxlLmV4cG9ydHM9YXN5bmMoZSxuLG8saSk9PntsZXQgdT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgbj10LnJlc29sdmUobyxgJHtlfV8ke2l9YCk7aWYoIXl0KG4se2ZzOnJ9KSl0aHJvdyBuZXcgRXJyb3IoYGZwSW5bJHtufV0gaXMgbm90IGEgZmlsZWApO3UucHVzaChuKX1sZXQgYT1hd2FpdCBhc3luYyBmdW5jdGlvbih0LGUsbj17fSl7dHJ5e3JldHVybiB0cih0LGUse2ZzOnIsLi4ubn0pfWNhdGNoKHQpe2xldCByO3RyeXtyPXQubWVzc2FnZX1jYXRjaCh0KXt9cmV0dXJuIFByb21pc2UucmVqZWN0KCJzdHJpbmciPT10eXBlb2Ygcj9yOlZ0KHQpKX19KHUsaSk7cmV0dXJuey4uLmEsaGFzaDphd2FpdCBmdW5jdGlvbih0LGU9e30pe3RyeXtyZXR1cm4gZXIodCx7ZnM6ciwuLi5lfSl9Y2F0Y2godCl7cmV0dXJuIFByb21pc2UucmVqZWN0KFZ0KHQpKX19KGkpfX07CgogICAgfSkuY2FsbChtZFVzZXIuZXhwb3J0cywgbWRVc2VyLCBtZFVzZXIuZXhwb3J0cykKCiAgICAvL+mgkOioreWMr+WHujogcm9sbHVw5LulX19lc01vZHVsZeaomeekuumgkOioreiIh+WFt+WQjeS4puWtmOiAhSwg5Y+W5YW2ZGVmYXVsdDsg5ZCm5YmHbW9kdWxlLmV4cG9ydHPljbPpoJDoqK3ljK/lh7oo5Y+q5pyJ5YW35ZCN5Yyv5Ye66ICF54K65ZG95ZCN56m66ZaT54mp5Lu2KQogICAgcmV0dXJuIChtZFVzZXIuZXhwb3J0cyAmJiBtZFVzZXIuZXhwb3J0cy5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtZFVzZXIuZXhwb3J0cykgPyBtZFVzZXIuZXhwb3J0cy5kZWZhdWx0IDogbWRVc2VyLmV4cG9ydHMKCn0pKCkpCgo=",Buffer.from(i,"base64").toString("utf8"));var i;function s(){let n=new r,i=n.emit.bind(n),s={},o=!1,u="worker is dead",l=!1;function a(e){for(let t in s){let r=s[t];delete s[t],r.reject(e)}}function c(e){a(e),i("error",e)}function d(e){o||(o=!0,c(e))}let w=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){u=e,d(e)}}(t);function y(){w?(l=!0,o||(o=!0,u="worker has been terminated"),w.terminate(),w=void 0,a("worker has been terminated")):c("worker has been terminated")}function g(e){return function(){let t=function(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}();if(o)return t.reject(u),t;let r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=r.length;for(let i=0;i<e;i++)t[i]=r[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:r,fun:e,input:[...arguments]};try{w.postMessage(n)}catch(e){return t.reject(e),t}return s[r]=t,t}}w||o||(u="invalid worker",d(u)),w&&(w.on("message",function(e){let t=e,r=t&&t.mode;if("emit"===r||"return"===r||"messageerror"===r){if("emit"===r&&i(t.evName,t.msg),"return"===r){let e=s[t.id];e&&(delete s[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===r&&c(t.msg)}}),w.on("error",d),w.on("exit",e=>{l||d("worker exit, code["+e+"]")}),w.on("messageerror",e=>{c(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{w.postMessage(e)}catch(e){throw y(),e}}([...arguments]));for(let e of["main"])n[e]=g(e);return n.terminate=y,n}n=async function(){let e=[...arguments],t=s();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return r},set exports(e){r=e}}),r)}(ki);var Fi=qr(ki.exports);let Vi=new Set,Hi=new Map,Ui=(t,r,n="")=>{let i=e.resolve(r,t);return{fp:i,fpm:`${i}.merging`,fpd:`${i}.done`,fpe:`${i}.error`,fpr:er(n)?`${i}.q${n}.ro`:""}},Bi=e=>{let t=On(e);if(Qr(e))throw new Error(`can not remove ${e}: ${Mn(De(t,"error"))}`)},Ri=async(e,r)=>{Vi.add(r.fp);try{let n=await function(e,r={}){try{return Ki(e,{fs:t,...r})}catch(e){return Promise.reject(Tn(e))}}(r.fp);if(n===e)return t.writeFileSync(r.fpd,"","utf8"),{state:"done"};let i=`merged file[${r.fp}] is incomplete: hash[${n}] != fileHash[${e}], merge was interrupted`;try{t.writeFileSync(r.fpe,i,"utf8")}catch(e){console.log(`can not write ${r.fpe}`,e)}return{state:"mismatch",reason:i}}catch(e){return{state:"error",reason:`verify merged file[${r.fp}] error: ${Mn(e)}`}}finally{Vi.delete(r.fp)}},Oi=async(e,r,n)=>{let i=`${function(){if(!Gr(Di))throw new Error("invalid dayjs");return Di().format("YYYYMMDDHHmmss")}()}|${fi(6)}|${e}`,s=Ui(e,n);if(Vi.has(s.fp))return i;let o=Qr(s.fpe),u=Qr(s.fp);if(!o&&u){let t=await Ri(e,s);if("done"===t.state)return i;if("error"===t.state)throw new Error(t.reason)}return Bi(s.fpd),Bi(s.fpe),Vi.add(s.fp),setTimeout(()=>{Fi(e,r,n,s.fpm).then(r=>{let n=De(r,"hash","");if(n!==e)throw new Error(`merged file hash[${n}] != fileHash[${e}]`);t.renameSync(s.fpm,s.fp),t.writeFileSync(s.fpd,"","utf8")}).catch(e=>{console.log(e),On(s.fpm);let r=Mn(e);try{t.writeFileSync(s.fpe,r,"utf8")}catch(e){console.log(`can not write ${s.fpe}`,e)}}).finally(()=>{Vi.delete(s.fp)})},1),i},Pi=async(e,r,n={})=>{let i=De(n,"funConsume"),s=De(n,"funLog");Gr(s)||(s=e=>{console.log(e)});let o=Gi(e,"|"),u=De(o,0,""),l=De(o,1,""),a=De(o,2,"");if(3!==yi(o)||!Pn(u)||!Pn(l)||!Pn(a)){let t=`invalid queueId[${Mn(e)}]`;return console.log(t),{state:"error",msg:"invalid queueId",reason:t,path:""}}let c=Ui(a,r,`${u}${l}`);if(Qr(c.fpr)){let e=((e,r)=>{try{let n=Un(new Uint8Array(t.readFileSync(e.fpr)),{returnWithStateAndMsg:!0});if("success"!==De(n,"state"))return r(`stored result ${e.fpr} is corrupted, treat as not stored: ${De(n,"msg","unknown error")}`),{ok:!1};let i=n.msg;return $t(i)&&un(i,"ro")?{ok:!0,ro:i.ro}:(r(`stored result ${e.fpr} has no own 'ro' key, treat as not stored`),{ok:!1})}catch(t){return r(`can not read stored result ${e.fpr}: ${Mn(t)}`),{ok:!1}}})(c,s);if(e.ok)return{state:"success",msg:e.ro,path:c.fp,from:"stored"}}if(Qr(c.fpe)){let e="";try{e=t.readFileSync(c.fpe,"utf8")}catch(e){}return{state:"error",msg:"merge slices failed",reason:e,path:c.fp}}if(Vi.has(c.fp))return{state:"merging",msg:"",path:c.fp};let d=Qr(c.fp),w=Qr(c.fpd);if(d&&!w){let e=await Ri(a,c);if("done"!==e.state)return{state:"error",msg:"merge slices failed",reason:e.reason,path:c.fp};w=!0}if(d&&w){if(!Gr(i))return{state:"success",msg:"",path:c.fp};let e=await((e,r,n)=>{let i=e.fpr,s=Hi.get(i);return s||(s=Promise.resolve().then(()=>r(e.fp)).then(r=>{r=void 0===r?null:r;try{let n=kn({ro:r},{returnWithStateAndMsg:!0});if("success"!==De(n,"state"))return r;t.writeFileSync(e.fpr,Buffer.from(n.msg));let i=Un(n.msg,{returnWithStateAndMsg:!0});if("success"===De(i,"state")&&$t(i.msg)&&un(i.msg,"ro"))return i.msg.ro}catch(t){n(`can not store consumed result to ${e.fpr}: ${Mn(t)}`)}return r}).finally(()=>{Hi.delete(i)}),Hi.set(i,s),s)})(c,i,s);return{state:"success",msg:e,path:c.fp,from:"consumed"}}return!d&&w?{state:"error",msg:"merged file already consumed",reason:`merged file[${c.fp}] no longer exists and no stored result for queueId[${e}]`,path:c.fp}:{state:"error",msg:"no merge task",reason:`no merge task for fileHash[${a}] (never pushed, or artifacts removed)`,path:c.fp}};var Qi={exports:{}};!function(e){var t,r;e.exports=(t=o,r={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,n,s,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new i(n,s||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,i=[];if(0===this._eventsCount)return i;for(n in e=this._events)t.call(e,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,s=n.length,o=new Array(s);i<s;i++)o[i]=n[i].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,i,s,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,i),!0;case 5:return c.fn.call(c.context,t,n,i,s),!0;case 6:return c.fn.call(c.context,t,n,i,s,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,y=c.length;for(a=0;a<y;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,i);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,i){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return o(this,s),this;var u=this._events[s];if(u.fn)u.fn!==t||i&&!u.once||n&&u.context!==n||o(this,s);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||i&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[s]=1===a.length?a[0]:a:o(this,s)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}({get exports(){return t},set exports(e){t=e}});var r=t;let n;return function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(i="J3VzZSBzdHJpY3QnCgoKCjsoZnVuY3Rpb24gKHBhcmVudFBvcnQsIG1kRGVmYXVsdCkgewoKbGV0IGluc3RhbmNlID0gbnVsbApsZXQgaW5pdEZhaWwgPSBudWxsIC8v5Yid5aeL5YyW5aSx5pWXKOW3peW7oOWHveaVuOaLi+mMr+etiSnmmYLkuYt7IGVyciB9LCDku6Xnianku7bljIXoo53lm6DpjK/oqqTlgLzlj6/ngrrku7vmhI/lgLw7IOW+jOe6jOWRvOWPq+S7peWFtuWOn+Wni+mMr+iqpOWbnuaHiQpmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBtZERlZmF1bHQKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEsIGRlc2MpIHsKICAgIHRyeSB7CiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgfQogICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vZGF0YeWQq+eEoeazlee1kOani+WMluikh+ijveS5i+WFp+WuuSjlh73mlbjjgIFTeW1ib2znrYkp5pmCcG9zdE1lc3NhZ2XlkIzmraXmi4tEYXRhQ2xvbmVFcnJvcjog5LiN6JmV55CG5YmH5ouL5pa85ZG85Y+r6Lev5b6R5aSWLCDmlrxub2RlanPmiJB3b3JrZXLmnKrmjZXmjYnpjK/oqqTogIzltKnmvbAo5oyB5LmF6IiH5bel5bug5a+m6auU5b6e5q2k5q275LqhKSwg5pa854CP6Ka95Zmo5oiQ5pyq6JmV55CGcmVqZWN0aW9u6ICM5ZG85Y+r5rC45LmF5oe4572uOwogICAgICAgIC8v5L6d6KiK5oGv6aGe5Z6L5pS56YCB5Y+v6KSH6KO95LmL5a2X5Liy6Kqq5piOKGRlc2PngrrlhaflrrnkuYvmj4/ov7ApLCDkvb/lkbzlj6vnq6/lvpfliLDlhbflkI3ljp/lm6DkuJR3b3JrZXLnuozlj6/mnI3li5k7IOWFnOW6leWGjeWkseaVl+WNs+aUvuajhCwg5LiN5Y+v6YGe6L+0CiAgICAgICAgbGV0IG1zZyA9ICcnCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbXNnID0gZGVzYyArICcgY291bGQgbm90IGJlIGNsb25lZDogJyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgICAgIGxldCBkYXRhU2FmZSA9IG51bGwKICAgICAgICBpZiAoZGF0YS5tb2RlID09PSAncmV0dXJuJykgewogICAgICAgICAgICBkYXRhU2FmZSA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGF0YS5tb2RlID09PSAnZW1pdCcpIHsKICAgICAgICAgICAgZGF0YVNhZmUgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRhdGFTYWZlID0gewogICAgICAgICAgICAgICAgbW9kZTogZGF0YS5tb2RlLCAvL21lc3NhZ2VlcnJvcuS5i+mAmuefpeS4jeWPr+eVpemBjiwg5ZCm5YmH5aSW5bGk5ZG85Y+r5Lit5LmLcGVuZGluZ+aHuOe9rgogICAgICAgICAgICAgICAgbXNnLAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YVNhZmUpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBtZERlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKCiAgICAgICAgICAgIC8vaW5pdEZhaWwKICAgICAgICAgICAgaW5pdEZhaWwgPSB7IGVyciB9CgogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMsICdpbml0IGVycm9yJykKCiAgICAgICAgfQoKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9jaGVjaywg5Yid5aeL5YyW5aSx5pWX5pmCaW5zdGFuY2XngrpudWxsLCDku6XliJ3lp4vljJbkuYvljp/lp4vpjK/oqqTlm57mh4ko5ZCM5bu656uL5aSx5pWX5LmL6JmV572uKSwg5LiN5b6X5bCNbnVsbOWPluWAvOiAjOW+l+iqpOWwjuS5i1R5cGVFcnJvcgogICAgICAgICAgICBpZiAoaW5pdEZhaWwpIHsKICAgICAgICAgICAgICAgIHRocm93IGluaXRGYWlsLmVycgogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2Z1biwg6aCI54K65Ye95pW4LCDlkKbliYfku6XlhbflkI3oqIrmga/mi5LntZUo5LiN5b6X54K65bCNdW5kZWZpbmVk5Y+W5YC85oiW5ZG85Y+r5LmL6Kqk5bCOVHlwZUVycm9yKQogICAgICAgICAgICBsZXQgZnVuID0gKGluc3RhbmNlICE9PSBudWxsICYmIGluc3RhbmNlICE9PSB1bmRlZmluZWQpID8gaW5zdGFuY2VbZGF0YS5mdW5dIDogdW5kZWZpbmVkCiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uWycgKyBkYXRhLmZ1biArICddIGlzIG5vdCBhIGZ1bmN0aW9uIGluIHdvcmtlcicpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjLCDku6Vhd2FpdOWPluWAvDog6Z2eYXN5bmPlh73mlbjlm57lgrPpnZ5wcm9taXNl5pmC5Lqm5Y+v5Lqk5LuYLCDkuI3lvpflm6Dlkbzlj6sudGhlbuiAjOWkseaVlzsg5LulUmVmbGVjdC5hcHBseeaMh+WumnRoaXMo6KaLY3RoaXMpCiAgICAgICAgICAgIG1zZyA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuLCB1bmRlZmluZWQsIGlucHV0KQogICAgICAgICAgICBzdGF0ZSA9ICdzdWNjZXNzJwoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KCiAgICAgICAgLy9kZXNjLCDlm57mh4nlhaflrrnnhKHms5XntZDmp4vljJbopIfoo73mmYLlhZzlupXoqqrmmI7kuYvmj4/ov7AKICAgICAgICBsZXQgZGVzYyA9ICcnCiAgICAgICAgaWYgKHN0YXRlID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgZGVzYyA9ICdyZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluaXRGYWlsKSB7CiAgICAgICAgICAgIGRlc2MgPSAnaW5pdCBlcnJvcicKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2MgPSAncmVqZWN0ZWQgdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQoKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMsIGRlc2MpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZWVycm9yJywgKGVycikgPT4gewogICAgICAgICAgICBzZW5kTWVzc2FnZSh7IG1vZGU6ICdtZXNzYWdlZXJyb3InLCBtc2c6IGVyciB9LCAnbWVzc2FnZWVycm9yIG9mIHdvcmtlcicpCiAgICAgICAgfSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhHdvcmtlcuWFp+acquaNleaNiemMr+iqpCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuipsuS6jOebo+iBveacg+mYu+atondvcmtlcuS+nemgkOioree1guatoiwg5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOiAjOS7pHBlbmRpbmfmsLjkuYXmh7jnva4sIOaureWxjXdvcmtlcuS4puS7pOWuv+S4u+eEoeazlemAgOWHujsKICAgIC8v6Yyv6Kqk6ZuW5bey57aTZXJyb3Lkuovku7blgrPoh7PlpJblsaRyZWplY3QgcGVuZGluZywg5L2G54ShcGVuZGluZ+S4lOWRvOWPq+err+acquebo+iBvWVycm9y5pmCKGV2ZW50ZW1pdHRlcjPnhKHnm6Pogb3ogIXmmYJlbWl05LiN5ouL6YyvKeatpOi8uOWHuueCuuWUr+S4gOeXlei3oSwg5pWF5L+d55WZOwogICAgLy/mnKznm6Pogb3mlrzooqvljIXoo53nqIvlvI/norzln7fooYzkuYvlvozmiY3lronoo50sIOi8ieWFpeacn+S5i+mMr+iqpOS4jee2k+atpOiomOmMhAogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikgLy/oqLrmlrfovLjlh7roh7NzdGRlcnIo5ZCMTm9kZeacquaNleaNiemMr+iqpOS5i+aFo+S+iyksIHdvcmtlcuS5i3N0ZGlv6L2J6YCB6Iez5a6/5Li7LCDkuI3lvpfmt7flhaXlrr/kuLtzdGRvdXTkuYvos4fmlpnmtYEKICAgIH0pCgp9CmNhdGNoKGVycil7fQoKfSkoCi8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwpyZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLnBhcmVudFBvcnQsIC8vaW5uZXLku6VuZXcgV29ya2VyKGNvZGUsIHsgZXZhbDogdHJ1ZSB9KeWft+ihjCwgZXZhbOWtl+S4sumgkOioreS7pUNvbW1vbkpT6Kej5p6QKOiIh3BhY2thZ2UuanNvbuS5i3R5cGXnhKHpl5wsIOWDheeUsS0taW5wdXQtdHlwZeaxuuWumiksIOaVheW+l+S9v+eUqHJlcXVpcmUKLy/oqK3oqIjpmZDliLY6IOWuv+S4u+S7pS0taW5wdXQtdHlwZT1tb2R1bGXllZ/li5XmmYJ3b3JrZXLnubzmib/oqbLlj4PmlbgsIGlubmVy6KKr55W2RVNN6Kej5p6Q6ICMcmVxdWlyZeWkseaViCwg5bGs5LiN5pSv5o+05LmL5Z+36KGM5pa55byPCi8v6Iul6KaB5pa8bm9kZWpzIHdvcmtlcuWFp+S9v+eUqOeEoeazlei9ieitr+eahOWOn+eUn+Wll+S7tuS+i+WmgmZzLCDpgb/lhY3kvb/nlKjpoILlsaRpbXBvcnTliqDovInkvb/nlKgsIOWboOeEoeazlei9ieitr+acg+ebtOaOpeS/neeVmQovL+S4puWboGV2YWzlrZfkuLLngrpDb21tb25KU+iAjOS4jeaOpeWPl2ltcG9ydCwg5pWF5Ye654++6Yyv6Kqk54Sh5rOV6L2J6K2vCihmdW5jdGlvbiAoKSB7CgogICAgLy/kvb/nlKjogIXnqIvlvI/norwoY2pzKSwg5LulQ29tbW9uSlPmqKHntYTljIXoo53lh73mlbjln7fooYw7IOiIh+S4iuaWuWlubmVy5LmL5Ye95pW454K65YWE5byf5L2c55So5Z+fLCDkupLkuI3lj6/oposKICAgIGxldCBtZFVzZXIgPSAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICE9PSBudWxsKSA/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpO2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG4mJiExIT09ZSh0W3JdLHIsdCk7KTtyZXR1cm4gdH12YXIgbixvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89LTEsdT1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGM9aVtuP2E6KytvXTtpZighMT09PWUodVtjXSxjLHUpKWJyZWFrfXJldHVybiB0fTt2YXIgdT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9dXx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxjPWEuU3ltYm9sLGY9T2JqZWN0LnByb3RvdHlwZSxzPWYuaGFzT3duUHJvcGVydHksbD1mLnRvU3RyaW5nLGg9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgcD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB2PSJbb2JqZWN0IE51bGxdIix5PSJbb2JqZWN0IFVuZGVmaW5lZF0iLGI9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBkKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/eTp2OmImJmIgaW4gT2JqZWN0KHQpP2Z1bmN0aW9uKHQpe3ZhciBlPXMuY2FsbCh0LGgpLHI9dFtoXTt0cnl7dFtoXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2godCl7fXZhciBvPWwuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtoXT1yOmRlbGV0ZSB0W2hdKSxvfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gcC5jYWxsKHQpfSh0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZyh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWQodCl9dmFyIGo9T2JqZWN0LnByb3RvdHlwZSxtPWouaGFzT3duUHJvcGVydHksdz1qLnByb3BlcnR5SXNFbnVtZXJhYmxlLFM9XyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP186ZnVuY3Rpb24odCl7cmV0dXJuIGcodCkmJm0uY2FsbCh0LCJjYWxsZWUiKSYmIXcuY2FsbCh0LCJjYWxsZWUiKX0sTz1BcnJheS5pc0FycmF5O3ZhciBBPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsej1BJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsRT16JiZ6LmV4cG9ydHM9PT1BP2EuQnVmZmVyOnZvaWQgMCx4PShFP0UuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTj05MDA3MTk5MjU0NzQwOTkxLEY9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIGsodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/TjplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmRi50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9dmFyIEk9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiAkKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD1JfXZhciBMPXt9O0xbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUxbIltvYmplY3QgSW50OEFycmF5XSJdPUxbIltvYmplY3QgSW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IEludDMyQXJyYXldIl09TFsiW29iamVjdCBVaW50OEFycmF5XSJdPUxbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09TFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLExbIltvYmplY3QgQXJndW1lbnRzXSJdPUxbIltvYmplY3QgQXJyYXldIl09TFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1MWyJbb2JqZWN0IEJvb2xlYW5dIl09TFsiW29iamVjdCBEYXRhVmlld10iXT1MWyJbb2JqZWN0IERhdGVdIl09TFsiW29iamVjdCBFcnJvcl0iXT1MWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUxbIltvYmplY3QgTWFwXSJdPUxbIltvYmplY3QgTnVtYmVyXSJdPUxbIltvYmplY3QgT2JqZWN0XSJdPUxbIltvYmplY3QgUmVnRXhwXSJdPUxbIltvYmplY3QgU2V0XSJdPUxbIltvYmplY3QgU3RyaW5nXSJdPUxbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgTSxQPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsVD1QJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUj1UJiZULmV4cG9ydHM9PT1QJiZ1LnByb2Nlc3MsVT1mdW5jdGlvbigpe3RyeXt2YXIgdD1UJiZULnJlcXVpcmUmJlQucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxSJiZSLmJpbmRpbmcmJlIuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCksQj1VJiZVLmlzVHlwZWRBcnJheSxEPUI/KE09QixmdW5jdGlvbih0KXtyZXR1cm4gTSh0KX0pOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpJiYkKHQubGVuZ3RoKSYmISFMW2QodCldfSxXPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQyh0LGUpe3ZhciByPU8odCksbj0hciYmUyh0KSxvPSFyJiYhbiYmeCh0KSx1PSFyJiYhbiYmIW8mJkQodCksaT1yfHxufHxvfHx1LGE9aT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPUFycmF5KHQpOysrcjx0OyluW3JdPWUocik7cmV0dXJuIG59KHQubGVuZ3RoLFN0cmluZyk6W10sYz1hLmxlbmd0aDtmb3IodmFyIGYgaW4gdCkhZSYmIVcuY2FsbCh0LGYpfHxpJiYoImxlbmd0aCI9PWZ8fG8mJigib2Zmc2V0Ij09Znx8InBhcmVudCI9PWYpfHx1JiYoImJ1ZmZlciI9PWZ8fCJieXRlTGVuZ3RoIj09Znx8ImJ5dGVPZmZzZXQiPT1mKXx8ayhmLGMpKXx8YS5wdXNoKGYpO3JldHVybiBhfXZhciBHPU9iamVjdC5wcm90b3R5cGU7dmFyIHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLFY9cSxYPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxHKSlyZXR1cm4gVih0KTt2YXIgZSxyLG49W107Zm9yKHZhciBvIGluIE9iamVjdCh0KSlYLmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufWZ1bmN0aW9uIEoodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9dmFyIEs9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLFE9IltvYmplY3QgRnVuY3Rpb25dIixZPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWj0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIHR0KHQpe2lmKCFKKHQpKXJldHVybiExO3ZhciBlPWQodCk7cmV0dXJuIGU9PVF8fGU9PVl8fGU9PUt8fGU9PVp9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIG51bGwhPXQmJiQodC5sZW5ndGgpJiYhdHQodCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIGV0KHQpP0ModCk6SCh0KX12YXIgbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihudWxsPT1yKXJldHVybiByO2lmKCFldChyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgbz1yLmxlbmd0aCx1PWU/bzotMSxpPU9iamVjdChyKTsoZT91LS06Kyt1PG8pJiYhMSE9PW4oaVt1XSx1LGkpOyk7cmV0dXJuIHJ9fSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmbyh0LGUscnQpfSkpLG90PW50O2Z1bmN0aW9uIHV0KHQpe3JldHVybiB0fWZ1bmN0aW9uIGl0KHQsZSl7dmFyIG47cmV0dXJuKE8odCk/cjpvdCkodCwiZnVuY3Rpb24iPT10eXBlb2Yobj1lKT9uOnV0KX12YXIgYXQsY3Q9YVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sZnQ9KGF0PS9bXi5dKyQvLmV4ZWMoY3QmJmN0LmtleXMmJmN0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIithdDoiIjt2YXIgc3Q9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGx0KHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gc3QuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIGh0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHB0PUZ1bmN0aW9uLnByb3RvdHlwZSx2dD1PYmplY3QucHJvdG90eXBlLHl0PXB0LnRvU3RyaW5nLGJ0PXZ0Lmhhc093blByb3BlcnR5LGR0PVJlZ0V4cCgiXiIreXQuY2FsbChidCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gZ3QodCl7cmV0dXJuISghSih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISFmdCYmZnQgaW4gdH0odCkpJiYodHQodCk/ZHQ6aHQpLnRlc3QobHQodCkpfWZ1bmN0aW9uIF90KHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gZ3Qocik/cjp2b2lkIDB9dmFyIGp0PV90KGEsIkRhdGFWaWV3IiksbXQ9X3QoYSwiTWFwIiksd3Q9X3QoYSwiUHJvbWlzZSIpLFN0PV90KGEsIlNldCIpLE90PV90KGEsIldlYWtNYXAiKSxBdD0iW29iamVjdCBNYXBdIix6dD0iW29iamVjdCBQcm9taXNlXSIsRXQ9IltvYmplY3QgU2V0XSIseHQ9IltvYmplY3QgV2Vha01hcF0iLE50PSJbb2JqZWN0IERhdGFWaWV3XSIsRnQ9bHQoanQpLGt0PWx0KG10KSxJdD1sdCh3dCksJHQ9bHQoU3QpLEx0PWx0KE90KSxNdD1kOyhqdCYmTXQobmV3IGp0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1OdHx8bXQmJk10KG5ldyBtdCkhPUF0fHx3dCYmTXQod3QucmVzb2x2ZSgpKSE9enR8fFN0JiZNdChuZXcgU3QpIT1FdHx8T3QmJk10KG5ldyBPdCkhPXh0KSYmKE10PWZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/bHQocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBGdDpyZXR1cm4gTnQ7Y2FzZSBrdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4genQ7Y2FzZSAkdDpyZXR1cm4gRXQ7Y2FzZSBMdDpyZXR1cm4geHR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX12YXIgVXQ9UnQoImxlbmd0aCIpLEJ0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTtmdW5jdGlvbiBEdCh0KXtyZXR1cm4gQnQudGVzdCh0KX12YXIgV3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsQ3Q9IlsiK1d0KyJdIixHdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLHF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLFZ0PSJbXiIrV3QrIl0iLFh0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixIdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsSnQ9Iig/OiIrR3QrInwiK3F0KyIpIisiPyIsS3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixRdD1LdCtKdCsoIig/OlxcdTIwMGQoPzoiK1tWdCxYdCxIdF0uam9pbigifCIpKyIpIitLdCtKdCsiKSoiKSxZdD0iKD86IitbVnQrR3QrIj8iLEd0LFh0LEh0LEN0XS5qb2luKCJ8IikrIikiLFp0PVJlZ0V4cChxdCsiKD89IitxdCsiKXwiK1l0K1F0LCJnIik7ZnVuY3Rpb24gdGUodCl7cmV0dXJuIER0KHQpP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1adC5sYXN0SW5kZXg9MDtadC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KHQpOlV0KHQpfWZ1bmN0aW9uIGVlKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoZXQodCkpcmV0dXJuInN0cmluZyI9PXR5cGVvZihlPXQpfHwhTyhlKSYmZyhlKSYmZChlKT09VHQ/dGUodCk6dC5sZW5ndGg7dmFyIGUscj1QdCh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOkgodCkubGVuZ3RofWZ1bmN0aW9uIHJlKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99ZnVuY3Rpb24gbmUodCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9ZnVuY3Rpb24gb2UodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihuZSh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciB1ZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIGllKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWllLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGllLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPW9lKGUsdCk7cmV0dXJuIShyPDApJiYocj09ZS5sZW5ndGgtMT9lLnBvcCgpOnVlLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0saWUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9b2UoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfSxpZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBvZSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxpZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPW9lKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBhZT1fdChPYmplY3QsImNyZWF0ZSIpO3ZhciBjZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBmZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHNlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGxlKHQsZSl7dmFyIHIsbixvPXQuX19kYXRhX187cmV0dXJuKCJzdHJpbmciPT0obj10eXBlb2Yocj1lKSl8fCJudW1iZXIiPT1ufHwic3ltYm9sIj09bnx8ImJvb2xlYW4iPT1uPyJfX3Byb3RvX18iIT09cjpudWxsPT09cik/b1sic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpvLm1hcH1mdW5jdGlvbiBoZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1zZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPWFlP2FlKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxzZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoYWUpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gY2UuY2FsbChlLHQpP2VbdF06dm9pZCAwfSxzZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGFlP3ZvaWQgMCE9PWVbdF06ZmUuY2FsbChlLHQpfSxzZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1hZSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfSxoZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBzZSxtYXA6bmV3KG10fHxpZSksc3RyaW5nOm5ldyBzZX19LGhlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9bGUodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0saGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbGUodGhpcyx0KS5nZXQodCl9LGhlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGxlKHRoaXMsdCkuaGFzKHQpfSxoZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bGUodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307ZnVuY3Rpb24gcGUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgaWUodCk7dGhpcy5zaXplPWUuc2l6ZX1wZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBpZSx0aGlzLnNpemU9MH0scGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn0scGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9LHBlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfSxwZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgaWUpe3ZhciBuPXIuX19kYXRhX187aWYoIW10fHxuLmxlbmd0aDwxOTkpcmV0dXJuIG4ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBoZShuKX1yZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemU9ci5zaXplLHRoaXN9O2Z1bmN0aW9uIHZlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBoZTsrK2U8cjspdGhpcy5hZGQodFtlXSl9ZnVuY3Rpb24geWUodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZlLnByb3RvdHlwZS5hZGQ9dmUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx2ZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX07dmFyIGJlPTEsZGU9MjtmdW5jdGlvbiBnZSh0LGUscixuLG8sdSl7dmFyIGk9ciZiZSxhPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoYSE9YyYmIShpJiZjPmEpKXJldHVybiExO3ZhciBmPXUuZ2V0KHQpLHM9dS5nZXQoZSk7aWYoZiYmcylyZXR1cm4gZj09ZSYmcz09dDt2YXIgbD0tMSxoPSEwLHA9ciZkZT9uZXcgdmU6dm9pZCAwO2Zvcih1LnNldCh0LGUpLHUuc2V0KGUsdCk7KytsPGE7KXt2YXIgdj10W2xdLHk9ZVtsXTtpZihuKXZhciBiPWk/bih5LHYsbCxlLHQsdSk6bih2LHksbCx0LGUsdSk7aWYodm9pZCAwIT09Yil7aWYoYiljb250aW51ZTtoPSExO2JyZWFrfWlmKHApe2lmKCF5ZShlLChmdW5jdGlvbih0LGUpe2lmKGk9ZSwhcC5oYXMoaSkmJih2PT09dHx8byh2LHQscixuLHUpKSlyZXR1cm4gcC5wdXNoKGUpO3ZhciBpfSkpKXtoPSExO2JyZWFrfX1lbHNlIGlmKHYhPT15JiYhbyh2LHkscixuLHUpKXtoPSExO2JyZWFrfX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUoZSksaH12YXIgX2U9YS5VaW50OEFycmF5O2Z1bmN0aW9uIGplKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3JbKytlXT1bbix0XX0pKSxyfWZ1bmN0aW9uIG1lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyWysrZV09dH0pKSxyfXZhciB3ZT0xLFNlPTIsT2U9IltvYmplY3QgQm9vbGVhbl0iLEFlPSJbb2JqZWN0IERhdGVdIix6ZT0iW29iamVjdCBFcnJvcl0iLEVlPSJbb2JqZWN0IE1hcF0iLHhlPSJbb2JqZWN0IE51bWJlcl0iLE5lPSJbb2JqZWN0IFJlZ0V4cF0iLEZlPSJbb2JqZWN0IFNldF0iLGtlPSJbb2JqZWN0IFN0cmluZ10iLEllPSJbb2JqZWN0IFN5bWJvbF0iLCRlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsTGU9IltvYmplY3QgRGF0YVZpZXddIixNZT1jP2MucHJvdG90eXBlOnZvaWQgMCxQZT1NZT9NZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBUZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPTAsdT1bXTsrK3I8bjspe3ZhciBpPXRbcl07ZShpLHIsdCkmJih1W28rK109aSl9cmV0dXJuIHV9dmFyIFJlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsVWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxCZT1VZT9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksVGUoVWUodCksKGZ1bmN0aW9uKGUpe3JldHVybiBSZS5jYWxsKHQsZSl9KSkpfTpmdW5jdGlvbigpe3JldHVybltdfTtmdW5jdGlvbiBEZSh0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIE8odCk/bjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWUubGVuZ3RoLG89dC5sZW5ndGg7KytyPG47KXRbbytyXT1lW3JdO3JldHVybiB0fShuLHIodCkpfSh0LHJ0LEJlKX12YXIgV2U9MSxDZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBHZT0xLHFlPSJbb2JqZWN0IEFyZ3VtZW50c10iLFZlPSJbb2JqZWN0IEFycmF5XSIsWGU9IltvYmplY3QgT2JqZWN0XSIsSGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZSh0LGUscixuLG8sdSl7dmFyIGk9Tyh0KSxhPU8oZSksYz1pP1ZlOlB0KHQpLGY9YT9WZTpQdChlKSxzPShjPWM9PXFlP1hlOmMpPT1YZSxsPShmPWY9PXFlP1hlOmYpPT1YZSxoPWM9PWY7aWYoaCYmeCh0KSl7aWYoIXgoZSkpcmV0dXJuITE7aT0hMCxzPSExfWlmKGgmJiFzKXJldHVybiB1fHwodT1uZXcgcGUpLGl8fEQodCk/Z2UodCxlLHIsbixvLHUpOmZ1bmN0aW9uKHQsZSxyLG4sbyx1LGkpe3N3aXRjaChyKXtjYXNlIExlOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSAkZTpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhdShuZXcgX2UodCksbmV3IF9lKGUpKSk7Y2FzZSBPZTpjYXNlIEFlOmNhc2UgeGU6cmV0dXJuIG5lKCt0LCtlKTtjYXNlIHplOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSBOZTpjYXNlIGtlOnJldHVybiB0PT1lKyIiO2Nhc2UgRWU6dmFyIGE9amU7Y2FzZSBGZTp2YXIgYz1uJndlO2lmKGF8fChhPW1lKSx0LnNpemUhPWUuc2l6ZSYmIWMpcmV0dXJuITE7dmFyIGY9aS5nZXQodCk7aWYoZilyZXR1cm4gZj09ZTtufD1TZSxpLnNldCh0LGUpO3ZhciBzPWdlKGEodCksYShlKSxuLG8sdSxpKTtyZXR1cm4gaS5kZWxldGUodCkscztjYXNlIEllOmlmKFBlKXJldHVybiBQZS5jYWxsKHQpPT1QZS5jYWxsKGUpfXJldHVybiExfSh0LGUsYyxyLG4sbyx1KTtpZighKHImR2UpKXt2YXIgcD1zJiZIZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksdj1sJiZIZS5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYocHx8dil7dmFyIHk9cD90LnZhbHVlKCk6dCxiPXY/ZS52YWx1ZSgpOmU7cmV0dXJuIHV8fCh1PW5ldyBwZSksbyh5LGIscixuLHUpfX1yZXR1cm4hIWgmJih1fHwodT1uZXcgcGUpLGZ1bmN0aW9uKHQsZSxyLG4sbyx1KXt2YXIgaT1yJldlLGE9RGUodCksYz1hLmxlbmd0aDtpZihjIT1EZShlKS5sZW5ndGgmJiFpKXJldHVybiExO2Zvcih2YXIgZj1jO2YtLTspe3ZhciBzPWFbZl07aWYoIShpP3MgaW4gZTpDZS5jYWxsKGUscykpKXJldHVybiExfXZhciBsPXUuZ2V0KHQpLGg9dS5nZXQoZSk7aWYobCYmaClyZXR1cm4gbD09ZSYmaD09dDt2YXIgcD0hMDt1LnNldCh0LGUpLHUuc2V0KGUsdCk7Zm9yKHZhciB2PWk7KytmPGM7KXt2YXIgeT10W3M9YVtmXV0sYj1lW3NdO2lmKG4pdmFyIGQ9aT9uKGIseSxzLGUsdCx1KTpuKHksYixzLHQsZSx1KTtpZighKHZvaWQgMD09PWQ/eT09PWJ8fG8oeSxiLHIsbix1KTpkKSl7cD0hMTticmVha312fHwodj0iY29uc3RydWN0b3IiPT1zKX1pZihwJiYhdil7dmFyIGc9dC5jb25zdHJ1Y3RvcixfPWUuY29uc3RydWN0b3I7Zz09X3x8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZyYmZyBpbnN0YW5jZW9mIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgX3x8KHA9ITEpfXJldHVybiB1LmRlbGV0ZSh0KSx1LmRlbGV0ZShlKSxwfSh0LGUscixuLG8sdSkpfWZ1bmN0aW9uIEtlKHQsZSxyLG4sbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IWcodCkmJiFnKGUpP3QhPXQmJmUhPWU6SmUodCxlLHIsbixLZSxvKSl9dmFyIFFlPTEsWWU9MjtmdW5jdGlvbiBaZSh0KXtyZXR1cm4gdD09dCYmIUoodCl9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KHIpKSl9fWZ1bmN0aW9uIGVyKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ydCh0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0sbz10W25dO2Vbcl09W24sbyxaZShvKV19cmV0dXJuIGV9KHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT90cihlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09dHx8ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ci5sZW5ndGgsdT1vLGk9IW47aWYobnVsbD09dClyZXR1cm4hdTtmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIGE9cltvXTtpZihpJiZhWzJdP2FbMV0hPT10W2FbMF1dOiEoYVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHU7KXt2YXIgYz0oYT1yW29dKVswXSxmPXRbY10scz1hWzFdO2lmKGkmJmFbMl0pe2lmKHZvaWQgMD09PWYmJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBsPW5ldyBwZTtpZihuKXZhciBoPW4oZixzLGMsdCxlLGwpO2lmKCEodm9pZCAwPT09aD9LZShzLGYsUWV8WWUsbixsKTpoKSlyZXR1cm4hMX19cmV0dXJuITB9KHIsdCxlKX19dmFyIHJyPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG5yKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Zyh0KSYmZCh0KT09cnJ9dmFyIG9yPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHVyPS9eXHcqJC87ZnVuY3Rpb24gaXIodCxlKXtpZihPKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFucih0KSl8fCh1ci50ZXN0KHQpfHwhb3IudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfXZhciBhcj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gY3IodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihhcik7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsbz1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLHU9ci5jYWNoZTtpZih1LmhhcyhvKSlyZXR1cm4gdS5nZXQobyk7dmFyIGk9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPXUuc2V0KG8saSl8fHUsaX07cmV0dXJuIHIuY2FjaGU9bmV3KGNyLkNhY2hlfHxoZSkscn1jci5DYWNoZT1oZTt2YXIgZnI9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csc3I9L1xcKFxcKT8vZyxscj1mdW5jdGlvbih0KXt2YXIgZT1jcih0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09ci5zaXplJiZyLmNsZWFyKCksdH0pKSxyPWUuY2FjaGU7cmV0dXJuIGV9KChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKGZyLChmdW5jdGlvbih0LHIsbixvKXtlLnB1c2gobj9vLnJlcGxhY2Uoc3IsIiQxIik6cnx8dCl9KSksZX0pKSxocj1scixwcj0xLzAsdnI9Yz9jLnByb3RvdHlwZTp2b2lkIDAseXI9dnI/dnIudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGJyKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZihPKHQpKXJldHVybiByZSh0LGJyKSsiIjtpZihucih0KSlyZXR1cm4geXI/eXIuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tcHI/Ii0wIjplfWZ1bmN0aW9uIGRyKHQpe3JldHVybiBudWxsPT10PyIiOmJyKHQpfWZ1bmN0aW9uIGdyKHQsZSl7cmV0dXJuIE8odCk/dDppcih0LGUpP1t0XTpocihkcih0KSl9dmFyIF9yPTEvMDtmdW5jdGlvbiBqcih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG5yKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1fcj8iLTAiOmV9ZnVuY3Rpb24gbXIodCxlKXtmb3IodmFyIHI9MCxuPShlPWdyKGUsdCkpLmxlbmd0aDtudWxsIT10JiZyPG47KXQ9dFtqcihlW3IrK10pXTtyZXR1cm4gciYmcj09bj90OnZvaWQgMH1mdW5jdGlvbiB3cih0LGUscil7dmFyIG49bnVsbD09dD92b2lkIDA6bXIodCxlKTtyZXR1cm4gdm9pZCAwPT09bj9yOm59ZnVuY3Rpb24gU3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0tMSxvPShlPWdyKGUsdCkpLmxlbmd0aCx1PSExOysrbjxvOyl7dmFyIGk9anIoZVtuXSk7aWYoISh1PW51bGwhPXQmJnIodCxpKSkpYnJlYWs7dD10W2ldfXJldHVybiB1fHwrK24hPW8/dTohIShvPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJiQobykmJmsoaSxvKSYmKE8odCl8fFModCkpfSh0LGUsU3IpfXZhciBBcj0xLHpyPTI7ZnVuY3Rpb24gRXIodCl7cmV0dXJuIGlyKHQpP1J0KGpyKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG1yKGUsdCl9fSh0KX1mdW5jdGlvbiB4cih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/dXQ6Im9iamVjdCI9PXR5cGVvZiB0P08odCk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaXIodCkmJlplKGUpP3RyKGpyKHQpLGUpOmZ1bmN0aW9uKHIpe3ZhciBuPXdyKHIsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1lP09yKHIsdCk6S2UoZSxuLEFyfHpyKX19KHRbMF0sdFsxXSk6ZXIodCk6RXIodCl9ZnVuY3Rpb24gTnIodCxlKXt2YXIgcj0tMSxuPWV0KHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxvLHUpe25bKytyXT1lKHQsbyx1KX0pKSxufWZ1bmN0aW9uIEZyKHQsZSl7cmV0dXJuKE8odCk/cmU6TnIpKHQseHIoZSkpfXZhciBrcj0vXHMvO3ZhciBJcj0vXlxzKy87ZnVuY3Rpb24gJHIodCl7cmV0dXJuIHQ/dC5zbGljZSgwLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJmtyLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9KHQpKzEpLnJlcGxhY2UoSXIsIiIpOnR9ZnVuY3Rpb24gTHIodCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiByPXZvaWQgMD09PXI/bjpyLCFlJiZyPj1uP3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPS0xLG89dC5sZW5ndGg7ZTwwJiYoZT0tZT5vPzA6bytlKSwocj1yPm8/bzpyKTwwJiYocis9byksbz1lPnI/MDpyLWU+Pj4wLGU+Pj49MDtmb3IodmFyIHU9QXJyYXkobyk7KytuPG87KXVbbl09dFtuK2VdO3JldHVybiB1fSh0LGUscil9ZnVuY3Rpb24gTXIodCl7cmV0dXJuIHQhPXR9ZnVuY3Rpb24gUHIodCxlLHIpe3JldHVybiBlPT1lP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci0xLG89dC5sZW5ndGg7KytuPG87KWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfSh0LGUscik6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBvPXQubGVuZ3RoLHU9cisobj8xOi0xKTtuP3UtLTorK3U8bzspaWYoZSh0W3VdLHUsdCkpcmV0dXJuIHU7cmV0dXJuLTF9KHQsTXIscil9dmFyIFRyPSJcXHVkODAwLVxcdWRmZmYiLFJyPSJbIitUcisiXSIsVXI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixCcj0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixEcj0iW14iK1RyKyJdIixXcj0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsQ3I9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLEdyPSIoPzoiK1VyKyJ8IitCcisiKSIrIj8iLHFyPSJbXFx1ZmUwZVxcdWZlMGZdPyIsVnI9cXIrR3IrKCIoPzpcXHUyMDBkKD86IitbRHIsV3IsQ3JdLmpvaW4oInwiKSsiKSIrcXIrR3IrIikqIiksWHI9Iig/OiIrW0RyK1VyKyI/IixVcixXcixDcixScl0uam9pbigifCIpKyIpIixIcj1SZWdFeHAoQnIrIig/PSIrQnIrIil8IitYcitWciwiZyIpO2Z1bmN0aW9uIEpyKHQpe3JldHVybiBEdCh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaChIcil8fFtdfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiIil9KHQpfWZ1bmN0aW9uIEtyKHQsZSxyKXtpZigodD1kcih0KSkmJihyfHx2b2lkIDA9PT1lKSlyZXR1cm4gJHIodCk7aWYoIXR8fCEoZT1icihlKSkpcmV0dXJuIHQ7dmFyIG49SnIodCksbz1KcihlKSx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGg7KytyPG4mJlByKGUsdFtyXSwwKT4tMTspO3JldHVybiByfShuLG8pLGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tJiZQcihlLHRbcl0sMCk+LTE7KTtyZXR1cm4gcn0obixvKSsxO3JldHVybiBMcihuLHUsaSkuam9pbigiIil9ZnVuY3Rpb24gUXIodCl7cmV0dXJuISEoZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpJiZ0Lmxlbmd0aD4wKX1mdW5jdGlvbiBZcih0LGUpe2lmKCFRcih0KSlyZXR1cm5bXTtpZighUXIoZSkpcmV0dXJuW107bGV0IHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUXIodCkmJlFyKGUpP3Quc3BsaXQoZSk6W119KHQsZSk7cj1GcihyLEtyKTtsZXQgbj1bXTtyZXR1cm4gaXQociwoZnVuY3Rpb24odCl7UXIodCkmJm4ucHVzaCh0KX0pKSxufXZhciBacj1OYU4sdG49L15bLStdMHhbMC05YS1mXSskL2ksZW49L14wYlswMV0rJC9pLHJuPS9eMG9bMC03XSskL2ksbm49cGFyc2VJbnQ7ZnVuY3Rpb24gb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG5yKHQpKXJldHVybiBacjtpZihKKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1KKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD0kcih0KTt2YXIgcj1lbi50ZXN0KHQpO3JldHVybiByfHxybi50ZXN0KHQpP25uKHQuc2xpY2UoMikscj8yOjgpOnRuLnRlc3QodCk/WnI6K3R9dmFyIHVuPTEvMCxhbj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gY24odCl7cmV0dXJuIHQ/KHQ9b24odCkpPT09dW58fHQ9PT0tdW4/KHQ8MD8tMToxKSphbjp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gZm4odCl7dmFyIGU9Y24odCkscj1lJTE7cmV0dXJuIGU9PWU/cj9lLXI6ZTowfXZhciBzbj0iW29iamVjdCBCb29sZWFuXSI7ZnVuY3Rpb24gbG4odCl7cmV0dXJuITA9PT0oZT10KXx8ITE9PT1lfHxnKGUpJiZkKGUpPT1zbjt2YXIgZX1mdW5jdGlvbiBobih0KXtsZXQgZT0hMTtpZihRcih0KSl7aWYoIiI9PT10LnRyaW0oKSlyZXR1cm4hMTtlPSFpc05hTihOdW1iZXIodCkpfWVsc2UgaWYoZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpKXtpZihmdW5jdGlvbih0KXtpZih0IT10KXJldHVybiEwO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQpdHJ5e2xldCBlPU51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHQpO3JldHVybiBOdW1iZXIuaXNOYU4oZSl9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITF9KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9ZnVuY3Rpb24gcG4odCl7aWYoIWhuKHQpKXJldHVybiAwO3JldHVybiBjbih0KX1mdW5jdGlvbiB2bih0LGU9e30pe2xldCByPXdyKGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7cmV0dXJuIGxuKHIpfHwocj0hMSksISFobih0KSYmKHQ9cG4odCkscj9OdW1iZXIuaXNTYWZlSW50ZWdlcih0KToibnVtYmVyIj09dHlwZW9mKG49dCkmJm49PWZuKG4pKTt2YXIgbn12YXIgeW49YS5pc0Zpbml0ZSxibj1NYXRoLm1pbjt2YXIgZG49ZnVuY3Rpb24odCl7dmFyIGU9TWF0aFt0XTtyZXR1cm4gZnVuY3Rpb24odCxyKXtpZih0PW9uKHQpLChyPW51bGw9PXI/MDpibihmbihyKSwyOTIpKSYmeW4odCkpe3ZhciBuPShkcih0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygobj0oZHIoZShuWzBdKyJlIisoK25bMV0rcikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK25bMV0tcikpfXJldHVybiBlKHQpfX0oInJvdW5kIiksZ249ZG47ZnVuY3Rpb24gX24odCxlPXt9KXtsZXQgcj13cihlLCJ1c2VDbGFtcFNhZmUiLG51bGwpO2xuKHIpfHwocj0hMSk7bGV0IG49d3IoZSwidXNlTGltaXRTYWZlIixudWxsKTtsbihuKXx8KG49ITEpO2xldCBvPXdyKGUsInJldHVybldpdGhTdGF0ZUFuZE1zZyIsbnVsbCk7bG4obyl8fChvPSExKTtsZXQgdT10PT5vP3tzdGF0ZToic3VjY2VzcyIsbXNnOnR9OnQsaT10PT57aWYobylyZXR1cm57c3RhdGU6ImVycm9yIixtc2c6dH07dGhyb3cgbmV3IEVycm9yKHQpfTtpZighaG4odCkpcmV0dXJuIHUoMCk7bGV0IGE9bnVsbDt0cnl7dD1wbih0KSxhPWduKHQpLHImJihhPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2E9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI6YTxOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmKGE9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKX1jYXRjaCh0KXtyZXR1cm4gaSh0LnRvU3RyaW5nKCkpfXJldHVybiBuJiYhTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGEpKT9pKGB2WyR7dH1dIGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApOigiMCI9PT1TdHJpbmcoYSkmJihhPTApLHUoYSkpfWZ1bmN0aW9uIGpuKHQsZT17fSl7aWYoIXZuKHQsZSkpcmV0dXJuITE7cmV0dXJuIF9uKHQpPj0wfWZ1bmN0aW9uIG1uKHQsZT17fSl7bGV0IHI9d3IoZSwiZnMiKSxuPSExO3RyeXtyLnN0YXRTeW5jKHQpLG49ITB9Y2F0Y2h7bj0hMX1yZXR1cm4gbn1mdW5jdGlvbiB3bih0LGU9e30pe2xldCByPXdyKGUsImZzIik7cmV0dXJuISFtbih0LHtmczpyfSkmJighci5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIXIubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCkpfWZ1bmN0aW9uIFNuKHQpe3JldHVybiB3bih0LHtmczplfSl9ZnVuY3Rpb24gT24odCxlKXt2YXIgcj1bXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxuLG8pe2UodCxuLG8pJiZyLnB1c2godCl9KSkscn1mdW5jdGlvbiBBbih0LGU9e30pe2lmKCF2bih0LGUpKXJldHVybiExO3JldHVybiBfbih0KT4wfWZ1bmN0aW9uIHpuKHQsZT17fSl7bGV0IHI9d3IoZSwiZnMiKTtpZighbW4odCx7ZnM6cn0pKXJldHVybiExO2xldCBuPXIubHN0YXRTeW5jKHQpO3JldHVybiFuLmlzRmlsZSgpJiYhbi5pc1N5bWJvbGljTGluaygpfWZ1bmN0aW9uIEVuKHQsZT0xLHI9e30pe2xldCBuPXdyKHIsInBhdGgiKSxvPXdyKHIsImZzIik7aWYoIXpuKHQse2ZzOm99KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO2xldCB1PVtdO3ZhciBpLGE7cmV0dXJuIHU9ZnVuY3Rpb24odCxlPTEscj17fSl7bGV0IG49MSxvPXdyKHIsInBhdGgiKSx1PXdyKHIsImZzIik7aWYoIXpuKHQse2ZzOnV9KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO3JldHVybiBudWxsIT09ZSYmQW4oZSkmJihlPV9uKGUpKTwxJiYoZT0xKSxmdW5jdGlvbiB0KHIpe2xldCBpPVtdO3JldHVybiB6bihyLHtmczp1fSk/KGl0KHUucmVhZGRpclN5bmMociksKGZ1bmN0aW9uKGEpe2xldCBjPW8ucmVzb2x2ZShyLGEpLGY9bnVsbDt0cnl7Zj11LnN0YXRTeW5jKGMpfWNhdGNoKHQpe31mJiZmLmlzRGlyZWN0b3J5KCk/KGkucHVzaCh7aXNGb2xkZXI6ITAsbGV2ZWw6bixwYXRoOmMsbmFtZTpvLmJhc2VuYW1lKGMpfSksbis9MSwobjw9ZXx8bnVsbD09PWUpJiYoaT1pLmNvbmNhdCh0KGMpKSksbi09MSk6aS5wdXNoKHtpc0ZvbGRlcjohMSxsZXZlbDpuLHBhdGg6YyxuYW1lOm8uYmFzZW5hbWUoYyl9KX0pKSxpKTppfSh0KX0odCxlLHtwYXRoOm4sZnM6b30pLGE9e2lzRm9sZGVyOiExfSx1PShPKGk9dSk/VGU6T24pKGkseHIoYSkpLHU9RnIodSwodD0+KGRlbGV0ZSB0LmlzRm9sZGVyLHQpKSksdX1jb25zdCB4bj1uZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw0OCw4LDk2LDMsMTI3LDEyNywxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNywwLDk2LDIsMTI3LDEyNywwLDk2LDEsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjYsMSwxMjYsOTYsMywxMjYsMTI3LDEyNywxLDEyNiw5NiwyLDEyNywxMjYsMCw5NiwxLDEyNywxLDEyNiwzLDExLDEwLDAsMCwyLDEsMyw0LDUsNiwxLDcsNSwzLDEsMCwxLDcsODUsOSwzLDEwOSwxMDEsMTA5LDIsMCw1LDEyMCwxMjAsMTA0LDUxLDUwLDAsMCw2LDEwNSwxMTAsMTA1LDExNiw1MSw1MCwwLDIsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDUxLDUwLDAsMyw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDUxLDUwLDAsNCw1LDEyMCwxMjAsMTA0LDU0LDUyLDAsNSw2LDEwNSwxMTAsMTA1LDExNiw1NCw1MiwwLDcsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDU0LDUyLDAsOCw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDU0LDUyLDAsOSwxMCwyNTEsMjIsMTAsMjQyLDEsMSw0LDEyNywzMiwwLDMyLDEsMTA2LDMzLDMsMzIsMSw2NSwxNiw3OSw0LDEyNywzMiwzLDY1LDE2LDEwNywzMyw2LDMyLDIsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDMzLDMsMzIsMiw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsMzMsNCwzMiwyLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiwzMyw1LDMsNjQsMzIsMywzMiwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNCwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNCwzMiwyLDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDUsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNiwzMiwwLDY1LDQsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY1LDEyLDExOSwzMiw1LDY1LDE4LDExOSwxMDYsMzIsNCw2NSw3LDExOSwxMDYsMzIsMyw2NSwxLDExOSwxMDYsNSwzMiwyLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwxLDEwNiwzMiwwLDMyLDEsNjUsMTUsMTEzLDE2LDEsMTEsMTQ2LDEsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwxLDY1LDQsMTA2LDMyLDIsNzUsNjksNCw2NCwzMiwwLDMyLDEsNDAsMiwwLDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDEwNiw2NSwxNywxMTksNjUsMTc1LDIxNCwyMTEsMTkwLDIsMTA4LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDEyLDEsMTEsMTEsMyw2NCwzMiwxLDMyLDIsNzksNjksNCw2NCwzMiwwLDMyLDEsNDUsMCwwLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwOCwxMDYsNjUsMTEsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY1LDE1LDExOCwxMTUsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMzQsMCw2NSwxMywxMTgsMzIsMCwxMTUsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMzQsMCw2NSwxNiwxMTgsMzIsMCwxMTUsMTEsNjMsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwxLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsMSw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsNTQsMiwwLDExLDE5NSw0LDEsNiwxMjcsMzIsMSwzMiwyLDEwNiwzMyw2LDMyLDAsNjUsMjQsMTA2LDMzLDQsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQwLDIsMCwzMiwyLDEwNiw1NCwyLDAsMzIsMCw2NSw0LDEwNiwzNCw1LDMyLDUsNDAsMiwwLDMyLDIsNjUsMTYsNzksMzIsMCw0MCwyLDAsNjUsMTYsNzksMTE0LDExNCw1NCwyLDAsMzIsMiwzMiwzLDEwNiw2NSwxNiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwxNiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw0LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDgsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsMTIsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDQwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSwzMiw2LDY1LDE2LDEwNyw3Nyw0LDY0LDMyLDYsNjUsMTYsMTA3LDMzLDgsMzIsMCw2NSw4LDEwNiw0MCwyLDAsMzMsMiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsMzMsMywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsNSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsMzMsNywzLDY0LDMyLDIsMzIsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDMsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNSwzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw3LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw3LDMyLDgsMzIsMSw2NSw0LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiwyLDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwzLDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiw1LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiw3LDU0LDIsMCwxMSwzMiwxLDMyLDYsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNiwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsOTcsMSwxLDEyNywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsMSwzMiwwLDY1LDQsMTA2LDQwLDIsMCw0LDEyNywzMiwxLDY1LDEyLDExOSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsNjUsMTgsMTE5LDEwNiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsNjUsNywxMTksMTA2LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDY1LDEsMTE5LDEwNiw1LDMyLDEsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDAsNDAsMiwwLDEwNiwzMiwwLDY1LDI0LDEwNiwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMTYsMSwxMSwyNTUsMywyLDMsMTI2LDEsMTI3LDMyLDAsMzIsMSwxMDYsMzMsNiwzMiwxLDY1LDMyLDc5LDQsMTI2LDMyLDYsNjUsMzIsMTA3LDMzLDYsMzIsMiw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCwzMywzLDMyLDIsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsMzMsNCwzMiwyLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywzLDMyLDQsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNCwzMiwyLDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDIsMzIsNSwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw1LDMyLDYsMzIsMCw2NSw4LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NiwxMiwxMzcsMzIsNSw2NiwxOCwxMzcsMTI0LDMyLDQsNjYsNywxMzcsMTI0LDMyLDMsNjYsMSwxMzcsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwyLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwyLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDEsMTczLDEyNCwzMiwwLDMyLDEsNjUsMzEsMTEzLDE2LDYsMTEsMTM0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwyLDMyLDEsNjUsOCwxMDYsNzksNCw2NCwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMiwwLDEzMyw2NiwyNywxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMywwLDMyLDEsNjUsOCwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDEsNjUsNCwxMDYsMzIsMiw3Nyw0LDY0LDMyLDAsMzIsMSw1MywyLDAsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMjMsMTM3LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI0LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDExLDMsNjQsMzIsMSwzMiwyLDczLDQsNjQsMzIsMCwzMiwxLDQ5LDAsMCw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNiwxMzMsNjYsMTEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjYsMzMsMTM2LDEzMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwzNCwwLDMyLDAsNjYsMjksMTM2LDEzMyw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNiwzNCwwLDMyLDAsNjYsMzIsMTM2LDEzMywxMSw3NywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsMSw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsMSw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCw1NSwzLDAsMTEsMjQ0LDQsMiwzLDEyNyw0LDEyNiwzMiwxLDMyLDIsMTA2LDMzLDUsMzIsMCw2NSw0MCwxMDYsMzMsNCwzMiwwLDY1LDIwMCwwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDEsMywwLDMyLDIsMTczLDEyNCw1NSwzLDAsMzIsMiwzMiwzLDEwNiw2NSwzMiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwzMiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDgsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwxNiwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDI0LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDIwMCwwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSw2NSwzMiwxMDYsMzIsNSw3Nyw0LDY0LDMyLDUsNjUsMzIsMTA3LDMzLDIsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzMsNiwzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzMsNywzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsOCwzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzMsOSwzLDY0LDMyLDYsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDYsMzIsNywzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw3LDMyLDgsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOCwzMiw5LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDksMzIsMiwzMiwxLDY1LDgsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDcsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDgsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDksNTUsMywwLDExLDMyLDEsMzIsNSw3Myw0LDY0LDMyLDQsMzIsMSwzMiw1LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSwxODgsMiwxLDUsMTI2LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMywxLDMyLDAsNDEsMywwLDM0LDIsNjYsMzIsOTAsNCwxMjYsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzQsMyw2NiwxLDEzNywzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzQsNCw2Niw3LDEzNywxMjQsMzIsMSw2NiwxMiwxMzcsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDM0LDUsNjYsMTgsMTM3LDEyNCwxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDEsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDEsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMiwxMjQsMzIsMCw2NSw0MCwxMDYsMzIsMiw2NiwzMSwxMzEsMTY3LDE2LDYsMTFdKTtmdW5jdGlvbiBObih0KXt0cnl7cmV0dXJuIFN0cmluZyh0KX1jYXRjaCh0KXt9dHJ5e2xldCBlPXQubWVzc2FnZTtpZigic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZSlyZXR1cm4gZX1jYXRjaCh0KXt9cmV0dXJuInVua25vd24gZXJyb3IifWFzeW5jIGZ1bmN0aW9uIEZuKHQsZT17fSl7bGV0IHI9ZnVuY3Rpb24oKXtsZXQgdCxlLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKCl7dD1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV19KSk7cmV0dXJuIHIucmVzb2x2ZT10LHIucmVqZWN0PWUscn0oKTt0cnl7bGV0IG49d3IoZSwiZnMiKSxvPXdyKGUsImNodW5rU2l6ZSIpO2lmKEFuKG8pfHwobz02NzEwODg2NCksbz1fbihvKSxvPjIqKjMwJiYobz02NzEwODg2NCksIXduKHQse2ZzOm59KSlyZXR1cm4gci5yZWplY3QoImZwIGlzIG5vdCBhIGZpbGUiKSxyO2xldHtjcmVhdGU2NDp1fT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06ZSx4eGgzMjpyLHh4aDY0Om4saW5pdDMyOm8sdXBkYXRlMzI6dSxkaWdlc3QzMjppLGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6Zn19PXQ7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpO2Z1bmN0aW9uIGwodCxyKXtpZihlLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrcil7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrci1lLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ZS5ncm93KG4pLHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpfX1mdW5jdGlvbiBoKHQsZSxyLG4sbyx1KXtsKHQpO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHMuc2V0KGkpLHIoMCxlKSxpLnNldChzLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUoZSl7bGV0IHI7cmV0dXJuIHMuc2V0KGkpLCJzdHJpbmciPT10eXBlb2YgZT8obCgzKmUubGVuZ3RoLHQpLHI9Yi5lbmNvZGVJbnRvKGUscy5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoZS5ieXRlTGVuZ3RoLHQpLHMuc2V0KGUsdCkscj1lLmJ5dGVMZW5ndGgpLG4oMCx0LHIpLGkuc2V0KHMuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4ocy5zZXQoaSksdShvKDApKSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHY9Mm4qKjY0bi0xbjtmdW5jdGlvbiB5KHQpe3JldHVybiB0JnZ9Y29uc3QgYj1uZXcgVGV4dEVuY29kZXIsZD0wLGc9MG47ZnVuY3Rpb24gXyh0LGU9ZCl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxwKHIoMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1mdW5jdGlvbiBqKHQsZT1nKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLHkobigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxlPWQpPT5fKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQsZT1kKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHAocigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTMyOih0PWQpPT5oKDQ4LHQsbyx1LGkscCksaDY0OmosaDY0VG9TdHJpbmc6KHQsZT1nKT0+aih0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxlPWcpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCkseShuKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlNjQ6KHQ9Zyk9PmgoODgsdCxhLGMsZix5KX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh4bikpLmluc3RhbmNlKX0oKSxpPXUoKSxhPW4uY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm99KSxjPXQ9PntyLnJlamVjdChObih0KSk7dHJ5e2EuZGVzdHJveSgpfWNhdGNoKHQpe319O2Eub24oImRhdGEiLCh0PT57dHJ5e2kudXBkYXRlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVuZCIsKCgpPT57dHJ5e2xldCB0PWkuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIik7ci5yZXNvbHZlKHQpfWNhdGNoKHQpe2ModCl9fSkpLGEub24oImVycm9yIiwodD0+e3IucmVqZWN0KE5uKHQpKX0pKX1jYXRjaCh0KXtyLnJlamVjdChObih0KSl9cmV0dXJuIHJ9bW9kdWxlLmV4cG9ydHM9YXN5bmMocixuLG8sdSk9PntsZXQgaT10LnJlc29sdmUodSxvKSxhPSExO2lmKGE9U24oaSksIWpuKHIse3VzZUxpbWl0U2FmZTohMH0pKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZVNpemUgaW4gcGF5bG9hZCJ9fXI9X24ocik7bGV0IGM9ITE7aWYoYSl7bGV0IHQ9LTE7dHJ5e3Q9ZS5zdGF0U3luYyhpKS5zaXplfWNhdGNoKHQpe2NvbnNvbGUubG9nKCJjaGVjayB0b3RhbCBmaWxlIHNpemU6IGZzLnN0YXRTeW5jKHBhdGhGaWxlKSIsaSx0KX1jPXI9PT10fWxldCBmPSExO2EmJmMmJmF3YWl0IGZ1bmN0aW9uKHQscj17fSl7dHJ5e3JldHVybiBGbih0LHtmczplLC4uLnJ9KX1jYXRjaCh0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoTm4odCkpfX0oaSkudGhlbigodD0+e2Y9bz09PXR9KSkuY2F0Y2goKHQ9Pntjb25zb2xlLmxvZygiZnNJc0ZpbGUocGF0aEZpbGUpIixpLFNuKGkpKSxjb25zb2xlLmxvZyh0KSxmPSExfSkpO2xldCBzPVtdO2lmKCFmKXtpdChmdW5jdGlvbihyLG49MSl7cmV0dXJuIEVuKHIsbix7cGF0aDp0LGZzOmV9KX0odSksKHQ9PntsZXQgcj10Lm5hbWUuc3RhcnRzV2l0aChgJHtvfV9gKSx1PSExO3RyeXtsZXQgcj1lLnN0YXRTeW5jKHQucGF0aCk7dT1yLnNpemU+MCYmci5zaXplPD1ufWNhdGNoKGUpe2NvbnNvbGUubG9nKCJjaGVjayBlYWNoIGZpbGUgc2l6ZTogZnMuc3RhdFN5bmMocGF0aEZpbGUpIix0LnBhdGgsZSl9aWYociYmdSl7bGV0IGU9WXIodC5uYW1lLGAke299X2ApLHI9KGE9bnVsbD09KGk9ZSk/MDppLmxlbmd0aCk/aVthLTFdOnZvaWQgMDtpZigham4ocikpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coYHNraXAgZmlsZVske3QubmFtZX1dOiBjYW4gbm90IHBhcnNlIGNodW5rIGluZGV4YCk7cj1fbihyKSxzLnB1c2gocil9dmFyIGksYX0pKX1sZXQgbD1lZShzKT4wO3JldHVybntwYXRoOmksYkFsbEV4aXN0OmEsYkFsbFNpemU6YyxiQWxsSGFzaDpmLGJTbHM6bCxzbGtzOnN9fTsKCiAgICB9KS5jYWxsKG1kVXNlci5leHBvcnRzLCBtZFVzZXIsIG1kVXNlci5leHBvcnRzKQoKICAgIC8v6aCQ6Kit5Yyv5Ye6OiByb2xsdXDku6VfX2VzTW9kdWxl5qiZ56S66aCQ6Kit6IiH5YW35ZCN5Lim5a2Y6ICFLCDlj5blhbZkZWZhdWx0OyDlkKbliYdtb2R1bGUuZXhwb3J0c+WNs+mgkOioreWMr+WHuijlj6rmnInlhbflkI3ljK/lh7rogIXngrrlkb3lkI3nqbrplpPnianku7YpCiAgICByZXR1cm4gKG1kVXNlci5leHBvcnRzICYmIG1kVXNlci5leHBvcnRzLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1kVXNlci5leHBvcnRzKSA/IG1kVXNlci5leHBvcnRzLmRlZmF1bHQgOiBtZFVzZXIuZXhwb3J0cwoKfSkoKSkKCg==",Buffer.from(i,"base64").toString("utf8"));var i;function s(){let n=new r,i=n.emit.bind(n),s={},o=!1,u="worker is dead",l=!1;function a(e){for(let t in s){let r=s[t];delete s[t],r.reject(e)}}function c(e){a(e),i("error",e)}function d(e){o||(o=!0,c(e))}let w=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){u=e,d(e)}}(t);function y(){w?(l=!0,o||(o=!0,u="worker has been terminated"),w.terminate(),w=void 0,a("worker has been terminated")):c("worker has been terminated")}function g(e){return function(){let t=function(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}();if(o)return t.reject(u),t;let r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=r.length;for(let i=0;i<e;i++)t[i]=r[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:r,fun:e,input:[...arguments]};try{w.postMessage(n)}catch(e){return t.reject(e),t}return s[r]=t,t}}w||o||(u="invalid worker",d(u)),w&&(w.on("message",function(e){let t=e,r=t&&t.mode;if("emit"===r||"return"===r||"messageerror"===r){if("emit"===r&&i(t.evName,t.msg),"return"===r){let e=s[t.id];e&&(delete s[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===r&&c(t.msg)}}),w.on("error",d),w.on("exit",e=>{l||d("worker exit, code["+e+"]")}),w.on("messageerror",e=>{c(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{w.postMessage(e)}catch(e){throw y(),e}}([...arguments]));for(let e of["main"])n[e]=g(e);return n.terminate=y,n}n=async function(){let e=[...arguments],t=s();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return r},set exports(e){r=e}}),r)}(Qi);var Ji=qr(Qi.exports),$i={exports:{}};!function(e){var t,r;e.exports=(t=o,r={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,n,s,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var u=new i(n,s||e,o),l=r?r+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],u]:e._events[l].push(u):(e._events[l]=u,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function u(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),u.prototype.eventNames=function(){var e,n,i=[];if(0===this._eventsCount)return i;for(n in e=this._events)t.call(e,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},u.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,s=n.length,o=new Array(s);i<s;i++)o[i]=n[i].fn;return o},u.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},u.prototype.emit=function(e,t,n,i,s,o){var u=r?r+e:e;if(!this._events[u])return!1;var l,a,c=this._events[u],d=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,i),!0;case 5:return c.fn.call(c.context,t,n,i,s),!0;case 6:return c.fn.call(c.context,t,n,i,s,o),!0}for(a=1,l=new Array(d-1);a<d;a++)l[a-1]=arguments[a];c.fn.apply(c.context,l)}else{var w,y=c.length;for(a=0;a<y;a++)switch(c[a].once&&this.removeListener(e,c[a].fn,void 0,!0),d){case 1:c[a].fn.call(c[a].context);break;case 2:c[a].fn.call(c[a].context,t);break;case 3:c[a].fn.call(c[a].context,t,n);break;case 4:c[a].fn.call(c[a].context,t,n,i);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[a].fn.apply(c[a].context,l)}}return!0},u.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},u.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},u.prototype.removeListener=function(e,t,n,i){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return o(this,s),this;var u=this._events[s];if(u.fn)u.fn!==t||i&&!u.once||n&&u.context!==n||o(this,s);else{for(var l=0,a=[],c=u.length;l<c;l++)(u[l].fn!==t||i&&!u[l].once||n&&u[l].context!==n)&&a.push(u[l]);a.length?this._events[s]=1===a.length?a[0]:a:o(this,s)}return this},u.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=r,u.EventEmitter=u,e.exports=u}({get exports(){return t},set exports(e){t=e}});var r=t;let n;return function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(i="J3VzZSBzdHJpY3QnCgoKCjsoZnVuY3Rpb24gKHBhcmVudFBvcnQsIG1kRGVmYXVsdCkgewoKbGV0IGluc3RhbmNlID0gbnVsbApsZXQgaW5pdEZhaWwgPSBudWxsIC8v5Yid5aeL5YyW5aSx5pWXKOW3peW7oOWHveaVuOaLi+mMr+etiSnmmYLkuYt7IGVyciB9LCDku6Xnianku7bljIXoo53lm6DpjK/oqqTlgLzlj6/ngrrku7vmhI/lgLw7IOW+jOe6jOWRvOWPq+S7peWFtuWOn+Wni+mMr+iqpOWbnuaHiQpmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBtZERlZmF1bHQKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEsIGRlc2MpIHsKICAgIHRyeSB7CiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgfQogICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vZGF0YeWQq+eEoeazlee1kOani+WMluikh+ijveS5i+WFp+WuuSjlh73mlbjjgIFTeW1ib2znrYkp5pmCcG9zdE1lc3NhZ2XlkIzmraXmi4tEYXRhQ2xvbmVFcnJvcjog5LiN6JmV55CG5YmH5ouL5pa85ZG85Y+r6Lev5b6R5aSWLCDmlrxub2RlanPmiJB3b3JrZXLmnKrmjZXmjYnpjK/oqqTogIzltKnmvbAo5oyB5LmF6IiH5bel5bug5a+m6auU5b6e5q2k5q275LqhKSwg5pa854CP6Ka95Zmo5oiQ5pyq6JmV55CGcmVqZWN0aW9u6ICM5ZG85Y+r5rC45LmF5oe4572uOwogICAgICAgIC8v5L6d6KiK5oGv6aGe5Z6L5pS56YCB5Y+v6KSH6KO95LmL5a2X5Liy6Kqq5piOKGRlc2PngrrlhaflrrnkuYvmj4/ov7ApLCDkvb/lkbzlj6vnq6/lvpfliLDlhbflkI3ljp/lm6DkuJR3b3JrZXLnuozlj6/mnI3li5k7IOWFnOW6leWGjeWkseaVl+WNs+aUvuajhCwg5LiN5Y+v6YGe6L+0CiAgICAgICAgbGV0IG1zZyA9ICcnCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbXNnID0gZGVzYyArICcgY291bGQgbm90IGJlIGNsb25lZDogJyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgICAgIGxldCBkYXRhU2FmZSA9IG51bGwKICAgICAgICBpZiAoZGF0YS5tb2RlID09PSAncmV0dXJuJykgewogICAgICAgICAgICBkYXRhU2FmZSA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICAgICAgc3RhdGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGF0YS5tb2RlID09PSAnZW1pdCcpIHsKICAgICAgICAgICAgZGF0YVNhZmUgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2csCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRhdGFTYWZlID0gewogICAgICAgICAgICAgICAgbW9kZTogZGF0YS5tb2RlLCAvL21lc3NhZ2VlcnJvcuS5i+mAmuefpeS4jeWPr+eVpemBjiwg5ZCm5YmH5aSW5bGk5ZG85Y+r5Lit5LmLcGVuZGluZ+aHuOe9rgogICAgICAgICAgICAgICAgbXNnLAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YVNhZmUpCiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKSB7fQogICAgfQp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBtZERlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKCiAgICAgICAgICAgIC8vaW5pdEZhaWwKICAgICAgICAgICAgaW5pdEZhaWwgPSB7IGVyciB9CgogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMsICdpbml0IGVycm9yJykKCiAgICAgICAgfQoKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9jaGVjaywg5Yid5aeL5YyW5aSx5pWX5pmCaW5zdGFuY2XngrpudWxsLCDku6XliJ3lp4vljJbkuYvljp/lp4vpjK/oqqTlm57mh4ko5ZCM5bu656uL5aSx5pWX5LmL6JmV572uKSwg5LiN5b6X5bCNbnVsbOWPluWAvOiAjOW+l+iqpOWwjuS5i1R5cGVFcnJvcgogICAgICAgICAgICBpZiAoaW5pdEZhaWwpIHsKICAgICAgICAgICAgICAgIHRocm93IGluaXRGYWlsLmVycgogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2Z1biwg6aCI54K65Ye95pW4LCDlkKbliYfku6XlhbflkI3oqIrmga/mi5LntZUo5LiN5b6X54K65bCNdW5kZWZpbmVk5Y+W5YC85oiW5ZG85Y+r5LmL6Kqk5bCOVHlwZUVycm9yKQogICAgICAgICAgICBsZXQgZnVuID0gKGluc3RhbmNlICE9PSBudWxsICYmIGluc3RhbmNlICE9PSB1bmRlZmluZWQpID8gaW5zdGFuY2VbZGF0YS5mdW5dIDogdW5kZWZpbmVkCiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uWycgKyBkYXRhLmZ1biArICddIGlzIG5vdCBhIGZ1bmN0aW9uIGluIHdvcmtlcicpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjLCDku6Vhd2FpdOWPluWAvDog6Z2eYXN5bmPlh73mlbjlm57lgrPpnZ5wcm9taXNl5pmC5Lqm5Y+v5Lqk5LuYLCDkuI3lvpflm6Dlkbzlj6sudGhlbuiAjOWkseaVlzsg5LulUmVmbGVjdC5hcHBseeaMh+WumnRoaXMo6KaLY3RoaXMpCiAgICAgICAgICAgIG1zZyA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuLCB1bmRlZmluZWQsIGlucHV0KQogICAgICAgICAgICBzdGF0ZSA9ICdzdWNjZXNzJwoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KCiAgICAgICAgLy9kZXNjLCDlm57mh4nlhaflrrnnhKHms5XntZDmp4vljJbopIfoo73mmYLlhZzlupXoqqrmmI7kuYvmj4/ov7AKICAgICAgICBsZXQgZGVzYyA9ICcnCiAgICAgICAgaWYgKHN0YXRlID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgZGVzYyA9ICdyZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluaXRGYWlsKSB7CiAgICAgICAgICAgIGRlc2MgPSAnaW5pdCBlcnJvcicKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2MgPSAncmVqZWN0ZWQgdmFsdWUgb2YgZnVuY3Rpb25bJyArIGRhdGEuZnVuICsgJ10nCiAgICAgICAgfQoKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMsIGRlc2MpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZWVycm9yJywgKGVycikgPT4gewogICAgICAgICAgICBzZW5kTWVzc2FnZSh7IG1vZGU6ICdtZXNzYWdlZXJyb3InLCBtc2c6IGVyciB9LCAnbWVzc2FnZWVycm9yIG9mIHdvcmtlcicpCiAgICAgICAgfSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhHdvcmtlcuWFp+acquaNleaNiemMr+iqpCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuipsuS6jOebo+iBveacg+mYu+atondvcmtlcuS+nemgkOioree1guatoiwg5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOiAjOS7pHBlbmRpbmfmsLjkuYXmh7jnva4sIOaureWxjXdvcmtlcuS4puS7pOWuv+S4u+eEoeazlemAgOWHujsKICAgIC8v6Yyv6Kqk6ZuW5bey57aTZXJyb3Lkuovku7blgrPoh7PlpJblsaRyZWplY3QgcGVuZGluZywg5L2G54ShcGVuZGluZ+S4lOWRvOWPq+err+acquebo+iBvWVycm9y5pmCKGV2ZW50ZW1pdHRlcjPnhKHnm6Pogb3ogIXmmYJlbWl05LiN5ouL6YyvKeatpOi8uOWHuueCuuWUr+S4gOeXlei3oSwg5pWF5L+d55WZOwogICAgLy/mnKznm6Pogb3mlrzooqvljIXoo53nqIvlvI/norzln7fooYzkuYvlvozmiY3lronoo50sIOi8ieWFpeacn+S5i+mMr+iqpOS4jee2k+atpOiomOmMhAogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikgLy/oqLrmlrfovLjlh7roh7NzdGRlcnIo5ZCMTm9kZeacquaNleaNiemMr+iqpOS5i+aFo+S+iyksIHdvcmtlcuS5i3N0ZGlv6L2J6YCB6Iez5a6/5Li7LCDkuI3lvpfmt7flhaXlrr/kuLtzdGRvdXTkuYvos4fmlpnmtYEKICAgIH0pCgp9CmNhdGNoKGVycil7fQoKfSkoCi8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwpyZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLnBhcmVudFBvcnQsIC8vaW5uZXLku6VuZXcgV29ya2VyKGNvZGUsIHsgZXZhbDogdHJ1ZSB9KeWft+ihjCwgZXZhbOWtl+S4sumgkOioreS7pUNvbW1vbkpT6Kej5p6QKOiIh3BhY2thZ2UuanNvbuS5i3R5cGXnhKHpl5wsIOWDheeUsS0taW5wdXQtdHlwZeaxuuWumiksIOaVheW+l+S9v+eUqHJlcXVpcmUKLy/oqK3oqIjpmZDliLY6IOWuv+S4u+S7pS0taW5wdXQtdHlwZT1tb2R1bGXllZ/li5XmmYJ3b3JrZXLnubzmib/oqbLlj4PmlbgsIGlubmVy6KKr55W2RVNN6Kej5p6Q6ICMcmVxdWlyZeWkseaViCwg5bGs5LiN5pSv5o+05LmL5Z+36KGM5pa55byPCi8v6Iul6KaB5pa8bm9kZWpzIHdvcmtlcuWFp+S9v+eUqOeEoeazlei9ieitr+eahOWOn+eUn+Wll+S7tuS+i+WmgmZzLCDpgb/lhY3kvb/nlKjpoILlsaRpbXBvcnTliqDovInkvb/nlKgsIOWboOeEoeazlei9ieitr+acg+ebtOaOpeS/neeVmQovL+S4puWboGV2YWzlrZfkuLLngrpDb21tb25KU+iAjOS4jeaOpeWPl2ltcG9ydCwg5pWF5Ye654++6Yyv6Kqk54Sh5rOV6L2J6K2vCihmdW5jdGlvbiAoKSB7CgogICAgLy/kvb/nlKjogIXnqIvlvI/norwoY2pzKSwg5LulQ29tbW9uSlPmqKHntYTljIXoo53lh73mlbjln7fooYw7IOiIh+S4iuaWuWlubmVy5LmL5Ye95pW454K65YWE5byf5L2c55So5Z+fLCDkupLkuI3lj6/oposKICAgIGxldCBtZFVzZXIgPSAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICE9PSBudWxsKSA/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpLHI9QXJyYXkuaXNBcnJheSxuPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxvPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaT1ufHxvfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHU9aS5TeW1ib2wsYT1PYmplY3QucHJvdG90eXBlLGM9YS5oYXNPd25Qcm9wZXJ0eSxmPWEudG9TdHJpbmcscz11P3UudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIHA9IltvYmplY3QgTnVsbF0iLGg9IltvYmplY3QgVW5kZWZpbmVkXSIseT11P3UudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHYodCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD9oOnA6eSYmeSBpbiBPYmplY3QodCk/ZnVuY3Rpb24odCl7dmFyIGU9Yy5jYWxsKHQscykscj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89Zi5jYWxsKHQpO3JldHVybiBuJiYoZT90W3NdPXI6ZGVsZXRlIHRbc10pLG99KHQpOmZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCl9KHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgZD0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBnKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Yih0KSYmdih0KT09ZH12YXIgXz0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxqPS9eXHcqJC87ZnVuY3Rpb24gUyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX12YXIgdz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsbT0iW29iamVjdCBGdW5jdGlvbl0iLE89IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixBPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gTih0KXtpZighUyh0KSlyZXR1cm4hMTt2YXIgZT12KHQpO3JldHVybiBlPT1tfHxlPT1PfHxlPT13fHxlPT1BfXZhciBFLCQ9aVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sej0oRT0vW14uXSskLy5leGVjKCQmJiQua2V5cyYmJC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrRToiIjt2YXIgeD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gRih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIHguY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIEk9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sTT1GdW5jdGlvbi5wcm90b3R5cGUsUD1PYmplY3QucHJvdG90eXBlLFQ9TS50b1N0cmluZyxMPVAuaGFzT3duUHJvcGVydHksUj1SZWdFeHAoIl4iK1QuY2FsbChMKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBCKHQpe3JldHVybiEoIVModCl8fChlPXQseiYmeiBpbiBlKSkmJihOKHQpP1I6SSkudGVzdChGKHQpKTt2YXIgZX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gQihyKT9yOnZvaWQgMH12YXIgVT1rKE9iamVjdCwiY3JlYXRlIik7dmFyIEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgRz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFcodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcixuLG89dC5sZW5ndGg7by0tOylpZigocj10W29dWzBdKT09PShuPWUpfHxyIT1yJiZuIT1uKXJldHVybiBvO3JldHVybi0xfVcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1VP1UobnVsbCk6e30sdGhpcy5zaXplPTB9LFcucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sVy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoVSl7dmFyIHI9ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1yP3ZvaWQgMDpyfXJldHVybiBDLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH0sVy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIFU/dm9pZCAwIT09ZVt0XTpHLmNhbGwoZSx0KX0sVy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1VJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciBxPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gRCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1ELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9SChlLHQpO3JldHVybiEocjwwKSYmKHI9PWUubGVuZ3RoLTE/ZS5wb3AoKTpxLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0sRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1IKGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX0sRC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMuX19kYXRhX18sdCk+LTF9LEQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1IKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBWPWsoaSwiTWFwIik7ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG4sbz10Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KG49dHlwZW9mKHI9ZSkpfHwibnVtYmVyIj09bnx8InN5bWJvbCI9PW58fCJib29sZWFuIj09bj8iX19wcm90b19fIiE9PXI6bnVsbD09PXIpP29bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06by5tYXB9ZnVuY3Rpb24gWih0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1aLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IFcsbWFwOm5ldyhWfHxEKSxzdHJpbmc6bmV3IFd9fSxaLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9WCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxaLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFgodGhpcyx0KS5nZXQodCl9LFoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gWCh0aGlzLHQpLmhhcyh0KX0sWi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9WCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfTt2YXIgSj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gSyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKEopO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89ZT9lLmFwcGx5KHRoaXMsbik6blswXSxpPXIuY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciB1PXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1pLnNldChvLHUpfHxpLHV9O3JldHVybiByLmNhY2hlPW5ldyhLLkNhY2hlfHxaKSxyfUsuQ2FjaGU9Wjt2YXIgUSxZLHR0LGV0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJ0PS9cXChcXCk/L2csbnQ9KFE9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShldCwoZnVuY3Rpb24odCxyLG4sbyl7ZS5wdXNoKG4/by5yZXBsYWNlKHJ0LCIkMSIpOnJ8fHQpfSkpLGV9LFk9SyhRLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09dHQuc2l6ZSYmdHQuY2xlYXIoKSx0fSkpLHR0PVkuY2FjaGUsWSksb3Q9bnQ7dmFyIGl0PTEvMCx1dD11P3UucHJvdG90eXBlOnZvaWQgMCxhdD11dD91dC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gY3QodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHIodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99KHQsY3QpKyIiO2lmKGcodCkpcmV0dXJuIGF0P2F0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LWl0PyItMCI6ZX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gbnVsbD09dD8iIjpjdCh0KX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiByKHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFnKHQpKXx8ai50ZXN0KHQpfHwhXy50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX0odCxlKT9bdF06b3QoZnQodCkpfXZhciBsdD0xLzA7ZnVuY3Rpb24gcHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxnKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1sdD8iLTAiOmV9ZnVuY3Rpb24gaHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1zdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbcHQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufXZhciB5dD1PYmplY3QucHJvdG90eXBlO3ZhciB2dD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChlKHIpKX19KE9iamVjdC5rZXlzLE9iamVjdCksYnQ9dnQsZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBndCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHx5dCkpcmV0dXJuIGJ0KHQpO3ZhciBlLHIsbj1bXTtmb3IodmFyIG8gaW4gT2JqZWN0KHQpKWR0LmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufXZhciBfdD1rKGksIkRhdGFWaWV3IiksanQ9ayhpLCJQcm9taXNlIiksU3Q9ayhpLCJTZXQiKSx3dD1rKGksIldlYWtNYXAiKSxtdD0iW29iamVjdCBNYXBdIixPdD0iW29iamVjdCBQcm9taXNlXSIsQXQ9IltvYmplY3QgU2V0XSIsTnQ9IltvYmplY3QgV2Vha01hcF0iLEV0PSJbb2JqZWN0IERhdGFWaWV3XSIsJHQ9RihfdCksenQ9RihWKSx4dD1GKGp0KSxGdD1GKFN0KSxJdD1GKHd0KSxNdD12OyhfdCYmTXQobmV3IF90KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1FdHx8ViYmTXQobmV3IFYpIT1tdHx8anQmJk10KGp0LnJlc29sdmUoKSkhPU90fHxTdCYmTXQobmV3IFN0KSE9QXR8fHd0JiZNdChuZXcgd3QpIT1OdCkmJihNdD1mdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0Yocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSAkdDpyZXR1cm4gRXQ7Y2FzZSB6dDpyZXR1cm4gbXQ7Y2FzZSB4dDpyZXR1cm4gT3Q7Y2FzZSBGdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4gTnR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PVR0fSh0Lmxlbmd0aCkmJiFOKHQpfXZhciBSdD0iW29iamVjdCBTdHJpbmddIjt2YXIgQnQsa3Q9KEJ0PSJsZW5ndGgiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W0J0XX0pLFV0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgQ3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsR3Q9IlsiK0N0KyJdIixXdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLEh0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHF0PSJbXiIrQ3QrIl0iLER0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixWdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsWHQ9Iig/OiIrV3QrInwiK0h0KyIpIisiPyIsWnQ9IltcXHVmZTBlXFx1ZmUwZl0/IixKdD1adCtYdCsoIig/OlxcdTIwMGQoPzoiK1txdCxEdCxWdF0uam9pbigifCIpKyIpIitadCtYdCsiKSoiKSxLdD0iKD86IitbcXQrV3QrIj8iLFd0LER0LFZ0LEd0XS5qb2luKCJ8IikrIikiLFF0PVJlZ0V4cChIdCsiKD89IitIdCsiKXwiK0t0K0p0LCJnIik7ZnVuY3Rpb24gWXQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVdC50ZXN0KHQpfSh0KT9mdW5jdGlvbih0KXtmb3IodmFyIGU9UXQubGFzdEluZGV4PTA7UXQudGVzdCh0KTspKytlO3JldHVybiBlfSh0KTprdCh0KX1mdW5jdGlvbiB0ZSh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKEx0KHQpKXJldHVybiJzdHJpbmciPT10eXBlb2YoZT10KXx8IXIoZSkmJmIoZSkmJnYoZSk9PVJ0P1l0KHQpOnQubGVuZ3RoO3ZhciBlLG49UHQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PW58fCJbb2JqZWN0IFNldF0iPT1uP3Quc2l6ZTpndCh0KS5sZW5ndGh9dmFyIGVlPS9ccy87dmFyIHJlPS9eXHMrLztmdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmZWUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0odCkrMSkucmVwbGFjZShyZSwiIik6dH12YXIgb2U9TmFOLGllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHVlPS9eMGJbMDFdKyQvaSxhZT0vXjBvWzAtN10rJC9pLGNlPXBhcnNlSW50O2Z1bmN0aW9uIGZlKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihnKHQpKXJldHVybiBvZTtpZihTKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1TKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1uZSh0KTt2YXIgcj11ZS50ZXN0KHQpO3JldHVybiByfHxhZS50ZXN0KHQpP2NlKHQuc2xpY2UoMikscj8yOjgpOmllLnRlc3QodCk/b2U6K3R9dmFyIHNlPTEvMCxsZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHQ/KHQ9ZmUodCkpPT09c2V8fHQ9PT0tc2U/KHQ8MD8tMToxKSpsZTp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gaGUodCl7dmFyIGU9cGUodCkscj1lJTE7cmV0dXJuIGU9PWU/cj9lLXI6ZTowfXZhciB5ZT0iW29iamVjdCBCb29sZWFuXSI7ZnVuY3Rpb24gdmUodCl7cmV0dXJuITA9PT0oZT10KXx8ITE9PT1lfHxiKGUpJiZ2KGUpPT15ZTt2YXIgZX1mdW5jdGlvbiBiZSh0KXtyZXR1cm4hIShmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkmJnQubGVuZ3RoPjApfWZ1bmN0aW9uIGRlKHQpe2xldCBlPSExO2lmKGJlKHQpKXtpZigiIj09PXQudHJpbSgpKXJldHVybiExO2U9IWlzTmFOKE51bWJlcih0KSl9ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2lmKGZ1bmN0aW9uKHQpe2lmKHQhPXQpcmV0dXJuITA7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl0cnl7bGV0IGU9TnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwodCk7cmV0dXJuIE51bWJlci5pc05hTihlKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMX0odCkpcmV0dXJuITE7ZT0hMH1yZXR1cm4gZX1mdW5jdGlvbiBnZSh0KXtpZighZGUodCkpcmV0dXJuIDA7cmV0dXJuIHBlKHQpfWZ1bmN0aW9uIF9lKHQsZT17fSl7bGV0IHI9aHQoZSwidXNlTGltaXRTYWZlIixudWxsKTtyZXR1cm4gdmUocil8fChyPSExKSwhIWRlKHQpJiYodD1nZSh0KSxyP051bWJlci5pc1NhZmVJbnRlZ2VyKHQpOiJudW1iZXIiPT10eXBlb2Yobj10KSYmbj09aGUobikpO3ZhciBufXZhciBqZT1pLmlzRmluaXRlLFNlPU1hdGgubWluO3ZhciB3ZT1mdW5jdGlvbih0KXt2YXIgZT1NYXRoW3RdO3JldHVybiBmdW5jdGlvbih0LHIpe2lmKHQ9ZmUodCksKHI9bnVsbD09cj8wOlNlKGhlKHIpLDI5MikpJiZqZSh0KSl7dmFyIG49KGZ0KHQpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKChuPShmdChlKG5bMF0rImUiKygrblsxXStyKSkpKyJlIikuc3BsaXQoImUiKSlbMF0rImUiKygrblsxXS1yKSl9cmV0dXJuIGUodCl9fSgicm91bmQiKSxtZT13ZTtmdW5jdGlvbiBPZSh0LGU9e30pe2xldCByPWh0KGUsInVzZUNsYW1wU2FmZSIsbnVsbCk7dmUocil8fChyPSExKTtsZXQgbj1odChlLCJ1c2VMaW1pdFNhZmUiLG51bGwpO3ZlKG4pfHwobj0hMSk7bGV0IG89aHQoZSwicmV0dXJuV2l0aFN0YXRlQW5kTXNnIixudWxsKTt2ZShvKXx8KG89ITEpO2xldCBpPXQ9Pm8/e3N0YXRlOiJzdWNjZXNzIixtc2c6dH06dCx1PXQ9PntpZihvKXJldHVybntzdGF0ZToiZXJyb3IiLG1zZzp0fTt0aHJvdyBuZXcgRXJyb3IodCl9O2lmKCFkZSh0KSlyZXR1cm4gaSgwKTtsZXQgYT1udWxsO3RyeXt0PWdlKHQpLGE9bWUodCksciYmKGE+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/YT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjphPE51bWJlci5NSU5fU0FGRV9JTlRFR0VSJiYoYT1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpfWNhdGNoKHQpe3JldHVybiB1KHQudG9TdHJpbmcoKSl9cmV0dXJuIG4mJiFOdW1iZXIuaXNTYWZlSW50ZWdlcihOdW1iZXIoYSkpP3UoYHZbJHt0fV0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk6KCIwIj09PVN0cmluZyhhKSYmKGE9MCksaShhKSl9ZnVuY3Rpb24gQWUodCxlPXt9KXtpZighX2UodCxlKSlyZXR1cm4hMTtyZXR1cm4gT2UodCk+PTB9Y29uc3QgTmU9bmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNDgsOCw5NiwzLDEyNywxMjcsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjcsMCw5NiwyLDEyNywxMjcsMCw5NiwxLDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI2LDEsMTI2LDk2LDMsMTI2LDEyNywxMjcsMSwxMjYsOTYsMiwxMjcsMTI2LDAsOTYsMSwxMjcsMSwxMjYsMywxMSwxMCwwLDAsMiwxLDMsNCw1LDYsMSw3LDUsMywxLDAsMSw3LDg1LDksMywxMDksMTAxLDEwOSwyLDAsNSwxMjAsMTIwLDEwNCw1MSw1MCwwLDAsNiwxMDUsMTEwLDEwNSwxMTYsNTEsNTAsMCwyLDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1MSw1MCwwLDMsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1MSw1MCwwLDQsNSwxMjAsMTIwLDEwNCw1NCw1MiwwLDUsNiwxMDUsMTEwLDEwNSwxMTYsNTQsNTIsMCw3LDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1NCw1MiwwLDgsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1NCw1MiwwLDksMTAsMjUxLDIyLDEwLDI0MiwxLDEsNCwxMjcsMzIsMCwzMiwxLDEwNiwzMywzLDMyLDEsNjUsMTYsNzksNCwxMjcsMzIsMyw2NSwxNiwxMDcsMzMsNiwzMiwyLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiwzMywzLDMyLDIsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDMzLDQsMzIsMiw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDQsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDQsMzIsMiwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiw1LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDYsMzIsMCw2NSw0LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NSwxMiwxMTksMzIsNSw2NSwxOCwxMTksMTA2LDMyLDQsNjUsNywxMTksMTA2LDMyLDMsNjUsMSwxMTksMTA2LDUsMzIsMiw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMSwxMDYsMzIsMCwzMiwxLDY1LDE1LDExMywxNiwxLDExLDE0NiwxLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMSw2NSw0LDEwNiwzMiwyLDc1LDY5LDQsNjQsMzIsMCwzMiwxLDQwLDIsMCw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwxMDYsNjUsMTcsMTE5LDY1LDE3NSwyMTQsMjExLDE5MCwyLDEwOCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMiwxLDExLDExLDMsNjQsMzIsMSwzMiwyLDc5LDY5LDQsNjQsMzIsMCwzMiwxLDQ1LDAsMCw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDgsMTA2LDY1LDExLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NSwxNSwxMTgsMTE1LDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDM0LDAsNjUsMTMsMTE4LDMyLDAsMTE1LDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDM0LDAsNjUsMTYsMTE4LDMyLDAsMTE1LDExLDYzLDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMSw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDEsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDU0LDIsMCwxMSwxOTUsNCwxLDYsMTI3LDMyLDEsMzIsMiwxMDYsMzMsNiwzMiwwLDY1LDI0LDEwNiwzMyw0LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MCwyLDAsMzIsMiwxMDYsNTQsMiwwLDMyLDAsNjUsNCwxMDYsMzQsNSwzMiw1LDQwLDIsMCwzMiwyLDY1LDE2LDc5LDMyLDAsNDAsMiwwLDY1LDE2LDc5LDExNCwxMTQsNTQsMiwwLDMyLDIsMzIsMywxMDYsNjUsMTYsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMTYsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsNCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw4LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDEyLDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSw0MCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsMzIsNiw2NSwxNiwxMDcsNzcsNCw2NCwzMiw2LDY1LDE2LDEwNywzMyw4LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDMzLDIsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDMzLDMsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDUsMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDMzLDcsMyw2NCwzMiwyLDMyLDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiwzLDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDUsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNywzMiw4LDMyLDEsNjUsNCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsMiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsNSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsNyw1NCwyLDAsMTEsMzIsMSwzMiw2LDczLDQsNjQsMzIsNCwzMiwxLDMyLDYsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDk3LDEsMSwxMjcsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDEsMzIsMCw2NSw0LDEwNiw0MCwyLDAsNCwxMjcsMzIsMSw2NSwxMiwxMTksMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDY1LDE4LDExOSwxMDYsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDY1LDcsMTE5LDEwNiwzMiwwLDY1LDgsMTA2LDQwLDIsMCw2NSwxLDExOSwxMDYsNSwzMiwxLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwwLDQwLDIsMCwxMDYsMzIsMCw2NSwyNCwxMDYsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDE2LDEsMTEsMjU1LDMsMiwzLDEyNiwxLDEyNywzMiwwLDMyLDEsMTA2LDMzLDYsMzIsMSw2NSwzMiw3OSw0LDEyNiwzMiw2LDY1LDMyLDEwNywzMyw2LDMyLDIsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsMzMsMywzMiwyLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDMzLDQsMzIsMiw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCwzMyw1LDMsNjQsMzIsMywzMiwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMywzMiw0LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDQsMzIsMiwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywyLDMyLDUsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNSwzMiw2LDMyLDAsNjUsOCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjYsMTIsMTM3LDMyLDUsNjYsMTgsMTM3LDEyNCwzMiw0LDY2LDcsMTM3LDEyNCwzMiwzLDY2LDEsMTM3LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMiw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMiw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwxLDE3MywxMjQsMzIsMCwzMiwxLDY1LDMxLDExMywxNiw2LDExLDEzNCwyLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMiwzMiwxLDY1LDgsMTA2LDc5LDQsNjQsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzIsMCwxMzMsNjYsMjcsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzMsMCwzMiwxLDY1LDgsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwxLDY1LDQsMTA2LDMyLDIsNzcsNCw2NCwzMiwwLDMyLDEsNTMsMiwwLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDIzLDEzNyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMSwzLDY0LDMyLDEsMzIsMiw3Myw0LDY0LDMyLDAsMzIsMSw0OSwwLDAsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjYsMTMzLDY2LDExLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY2LDMzLDEzNiwxMzMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMzQsMCwzMiwwLDY2LDI5LDEzNiwxMzMsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjYsMzQsMCwzMiwwLDY2LDMyLDEzNiwxMzMsMTEsNzcsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDEsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDEsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsNTUsMywwLDExLDI0NCw0LDIsMywxMjcsNCwxMjYsMzIsMSwzMiwyLDEwNiwzMyw1LDMyLDAsNjUsNDAsMTA2LDMzLDQsMzIsMCw2NSwyMDAsMCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQxLDMsMCwzMiwyLDE3MywxMjQsNTUsMywwLDMyLDIsMzIsMywxMDYsNjUsMzIsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMzIsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSw4LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMTYsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwyNCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyMDAsMCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsNjUsMzIsMTA2LDMyLDUsNzcsNCw2NCwzMiw1LDY1LDMyLDEwNywzMywyLDMyLDAsNjUsOCwxMDYsNDEsMywwLDMzLDYsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDMzLDcsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDgsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDMzLDksMyw2NCwzMiw2LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw2LDMyLDcsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNywzMiw4LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDgsMzIsOSwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw5LDMyLDIsMzIsMSw2NSw4LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiw2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiw3LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiw4LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiw5LDU1LDMsMCwxMSwzMiwxLDMyLDUsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNSwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsMTg4LDIsMSw1LDEyNiwzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsMSwzMiwwLDQxLDMsMCwzNCwyLDY2LDMyLDkwLDQsMTI2LDMyLDAsNjUsOCwxMDYsNDEsMywwLDM0LDMsNjYsMSwxMzcsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDM0LDQsNjYsNywxMzcsMTI0LDMyLDEsNjYsMTIsMTM3LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzNCw1LDY2LDE4LDEzNywxMjQsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwxLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwxLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDIsMTI0LDMyLDAsNjUsNDAsMTA2LDMyLDIsNjYsMzEsMTMxLDE2NywxNiw2LDExXSk7YXN5bmMgZnVuY3Rpb24gRWUodCxlPXt9KXtpZighZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpO2lmKCJbb2JqZWN0IEJsb2JdIj09PWV8fCJbb2JqZWN0IEZpbGVdIj09PWUpcmV0dXJuITA7dHJ5e2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmdCBpbnN0YW5jZW9mIEJsb2IpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiExfSh0KSYmKHI9dCwiW29iamVjdCBGaWxlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikpKXJldHVybiBjb25zb2xlLmxvZygiaW5wIix0KSxQcm9taXNlLnJlamVjdCgiaW5wIGlzIG5vdCBhIEJsb2Igb3IgRmlsZSIpO3ZhciByO2xldCBuPWh0KGUsImNodW5rU2l6ZSIpO2RlKG4pfHwobj02NzEwODg2NCksbj1nZShuKTtsZXR7Y3JlYXRlNjQ6b309YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7ZXhwb3J0czp7bWVtOmUseHhoMzI6cix4eGg2NDpuLGluaXQzMjpvLHVwZGF0ZTMyOmksZGlnZXN0MzI6dSxpbml0NjQ6YSx1cGRhdGU2NDpjLGRpZ2VzdDY0OmZ9fT10O2xldCBzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKTtmdW5jdGlvbiBsKHQscil7aWYoZS5idWZmZXIuYnl0ZUxlbmd0aDx0K3Ipe2NvbnN0IG49TWF0aC5jZWlsKCh0K3ItZS5idWZmZXIuYnl0ZUxlbmd0aCkvNjU1MzYpO2UuZ3JvdyhuKSxzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKX19ZnVuY3Rpb24gcCh0LGUscixuLG8saSl7bCh0KTtjb25zdCB1PW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBzLnNldCh1KSxyKDAsZSksdS5zZXQocy5zdWJhcnJheSgwLHQpKSx7dXBkYXRlKGUpe2xldCByO3JldHVybiBzLnNldCh1KSwic3RyaW5nIj09dHlwZW9mIGU/KGwoMyplLmxlbmd0aCx0KSxyPWIuZW5jb2RlSW50byhlLHMuc3ViYXJyYXkodCkpLndyaXR0ZW4pOihsKGUuYnl0ZUxlbmd0aCx0KSxzLnNldChlLHQpLHI9ZS5ieXRlTGVuZ3RoKSxuKDAsdCxyKSx1LnNldChzLnN1YmFycmF5KDAsdCkpLHRoaXN9LGRpZ2VzdDooKT0+KHMuc2V0KHUpLGkobygwKSkpfX1mdW5jdGlvbiBoKHQpe3JldHVybiB0Pj4+MH1jb25zdCB5PTJuKio2NG4tMW47ZnVuY3Rpb24gdih0KXtyZXR1cm4gdCZ5fWNvbnN0IGI9bmV3IFRleHRFbmNvZGVyLGQ9MCxnPTBuO2Z1bmN0aW9uIF8odCxlPWQpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksaChyKDAsYi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9ZnVuY3Rpb24gaih0LGU9Zyl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSx2KG4oMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1yZXR1cm57aDMyOl8saDMyVG9TdHJpbmc6KHQsZT1kKT0+Xyh0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIiksaDMyUmF3Oih0LGU9ZCk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSxoKHIoMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGUzMjoodD1kKT0+cCg0OCx0LG8saSx1LGgpLGg2NDpqLGg2NFRvU3RyaW5nOih0LGU9Zyk9PmoodCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKSxoNjRSYXc6KHQsZT1nKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHYobigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTY0Oih0PWcpPT5wKDg4LHQsYSxjLGYsdil9fSgoYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoTmUpKS5pbnN0YW5jZSl9KCksaT1vKCksdT0wO2Zvcig7dTx0LnNpemU7KXtsZXQgZT10LnNsaWNlKHUsdStuKSxyPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtpLnVwZGF0ZShuZXcgVWludDhBcnJheShyKSksdSs9bn1yZXR1cm4gaS5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKX1tb2R1bGUuZXhwb3J0cz1hc3luYyhyLG4sbyk9PntpZighKGJlKGk9bikmJmkubGVuZ3RoPD0xMjgmJi9eW0EtWmEtejAtOV0rJC8udGVzdChpKSkpe3JldHVybntlcnJvcjoiaW52YWxpZCBmaWxlSGFzaCJ9fXZhciBpO2lmKCFBcnJheS5pc0FycmF5KHIpKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZVNsaWNlSGFzaHMifX1pZigwPT09dGUocikpe3JldHVybntlcnJvcjoibm8gZmlsZVNsaWNlSGFzaHMifX1sZXQgdT1gJHtufV9gLGE9ZS5yZWFkZGlyU3luYyhvKSxjPW5ldyBTZXQ7Zm9yKGxldCB0IG9mIGEpe2lmKCF0LnN0YXJ0c1dpdGgodSkpY29udGludWU7bGV0IGU9dC5zbGljZSh1Lmxlbmd0aCk7QWUoZSkmJlN0cmluZyhPZShlKSk9PT1lJiZjLmFkZChPZShlKSl9bGV0IGY9W10scz1uZXcgU2V0O2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgdT1yW2ldLGE9aHQodSwiaSIpO2lmKCFBZShhKSljb250aW51ZTtpZihhPU9lKGEpLCFjLmhhcyhhKXx8cy5oYXMoYSkpY29udGludWU7cy5hZGQoYSk7bGV0IGw9dC5yZXNvbHZlKG8sYCR7bn1fJHthfWApLHA9IiI7dHJ5e3A9YXdhaXQgRWUobmV3IEJsb2IoW2UucmVhZEZpbGVTeW5jKGwpXSkpfWNhdGNoKHQpe2NvbnRpbnVlfWh0KHUsImgiKT09PXAmJmYucHVzaChhKX1yZXR1cm57c2xrczpmfX07CgogICAgfSkuY2FsbChtZFVzZXIuZXhwb3J0cywgbWRVc2VyLCBtZFVzZXIuZXhwb3J0cykKCiAgICAvL+mgkOioreWMr+WHujogcm9sbHVw5LulX19lc01vZHVsZeaomeekuumgkOioreiIh+WFt+WQjeS4puWtmOiAhSwg5Y+W5YW2ZGVmYXVsdDsg5ZCm5YmHbW9kdWxlLmV4cG9ydHPljbPpoJDoqK3ljK/lh7oo5Y+q5pyJ5YW35ZCN5Yyv5Ye66ICF54K65ZG95ZCN56m66ZaT54mp5Lu2KQogICAgcmV0dXJuIChtZFVzZXIuZXhwb3J0cyAmJiBtZFVzZXIuZXhwb3J0cy5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtZFVzZXIuZXhwb3J0cykgPyBtZFVzZXIuZXhwb3J0cy5kZWZhdWx0IDogbWRVc2VyLmV4cG9ydHMKCn0pKCkpCgo=",Buffer.from(i,"base64").toString("utf8"));var i;function s(){let n=new r,i=n.emit.bind(n),s={},o=!1,u="worker is dead",l=!1;function a(e){for(let t in s){let r=s[t];delete s[t],r.reject(e)}}function c(e){a(e),i("error",e)}function d(e){o||(o=!0,c(e))}let w=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){u=e,d(e)}}(t);function y(){w?(l=!0,o||(o=!0,u="worker has been terminated"),w.terminate(),w=void 0,a("worker has been terminated")):c("worker has been terminated")}function g(e){return function(){let t=function(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}();if(o)return t.reject(u),t;let r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=r.length;for(let i=0;i<e;i++)t[i]=r[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:r,fun:e,input:[...arguments]};try{w.postMessage(n)}catch(e){return t.reject(e),t}return s[r]=t,t}}w||o||(u="invalid worker",d(u)),w&&(w.on("message",function(e){let t=e,r=t&&t.mode;if("emit"===r||"return"===r||"messageerror"===r){if("emit"===r&&i(t.evName,t.msg),"return"===r){let e=s[t.id];e&&(delete s[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===r&&c(t.msg)}}),w.on("error",d),w.on("exit",e=>{l||d("worker exit, code["+e+"]")}),w.on("messageerror",e=>{c(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{w.postMessage(e)}catch(e){throw y(),e}}([...arguments]));for(let e of["main"])n[e]=g(e);return n.terminate=y,n}n=async function(){let e=[...arguments],t=s();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return r},set exports(e){r=e}}),r)}($i);var _i=qr($i.exports);function qi(e,t){try{return{ok:!0,value:t()}}catch(t){let r=Mn(t);return{ok:!1,stage:e,cause:er(r)?r:"unknown error"}}}function es(e,t){try{return s.validateHeaderValue(e,t),!0}catch(e){return!1}}function ts(e,t,r,n={}){let s=!0===De(n,"forHead",!1);if(null==e)return{error:"invalid streamRead",reason:"streamRead is null or undefined"};let o=qi("identify streamRead",()=>e instanceof i.Readable?{isReadable:!0,objectMode:!0===e.readableObjectMode,done:!0===e.destroyed||!0===e.readableEnded}:{isReadable:!1});if(!o.ok)return{error:"invalid streamRead",reason:`${o.stage} failed: ${o.cause}`};if(o.value.isReadable){if(o.value.objectMode)return{error:"invalid streamRead",reason:"streamRead is in object mode"};if(o.value.done)return{error:"invalid streamRead",reason:"streamRead is already destroyed or ended (each download event must provide a new stream)"};if(s)return{source:e};let n=qi("setup pipeline",()=>{let n=0,s=!1,o=new i.Transform({transform(e,r,i){if(n+=e.length,n>t)return s=!0,void i(new Error(`streamRead sent more than fileSize[${t}] bytes`));i(null,e)},flush(e){if(n!==t)return s=!0,void e(new Error(`streamRead ended at ${n} bytes but fileSize is ${t}`));e()}});return i.pipeline(e,o,e=>{e&&s&&r(Mn(e))}),o});return n.ok?{source:n.value}:{error:"invalid streamRead",reason:`${n.stage} failed: ${n.cause}`}}let u=qi("materialize streamRead",()=>{if(Buffer.isBuffer(e))return{buf:e};if(e instanceof Uint8Array)return{buf:Buffer.from(e)};if(qt(e))return{buf:Buffer.from(e,"utf8")};if("number"==typeof e||wr(e)||"object"==typeof e&&!1===function(e){try{return Gr(e.pipe)}catch(e){return null}}(e)){let t=null;try{t=JSON.stringify(e)}catch(e){return{unserializable:Mn(e)}}return"string"!=typeof t?{unserializable:""}:{buf:Buffer.from(t,"utf8")}}return{unsupported:!0}});if(!u.ok)return{error:"invalid streamRead",reason:`${u.stage} failed: ${u.cause}`};if(un(u.value,"unserializable")){let e=u.value.unserializable;return{error:"invalid streamRead",reason:er(e)?`streamRead can not be serialized: ${e}`:"streamRead can not be serialized"}}if(!0===u.value.unsupported)return{error:"invalid streamRead",reason:"streamRead must be a readable stream, buffer, string, number, boolean or plain object"};let l=u.value.buf;return l.length!==t?{error:"fileSize mismatch",reason:`streamRead has ${l.length} bytes but fileSize is ${t}`}:{source:l}}let rs=e=>"function"==typeof e.toWellFormed?e.toWellFormed():e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"�");function ns(e,t){let r=qi(`check field[${e}]`,()=>{if("fileSize"===e)return function(e){return kr(e,{useLimitSafe:!0})}(t)?{ok:!0,value:hr(t)}:{ok:!1};if("filename"===e||"fileType"===e){if(!er(t))return{ok:!1};let r=fn(t);return er(r)?"fileType"===e?es("Content-Type",r)?{ok:!0,value:r}:{ok:!1}:{ok:!0,value:rs(r)}:{ok:!1}}throw new Error(`unknown field[${e}]`)});return r.ok?{ok:r.value.ok,value:r.value.value,cause:""}:{ok:!1,value:void 0,cause:r.cause}}function is(e){try{e&&Gr(e.pipe)&&Gr(e.destroy)&&e.destroy()}catch(e){}}function ss(e){let t=typeof e;return void 0===e||"function"===t||"symbol"===t?null:e}function os(e,t,r={}){let n=new i.Readable;n._read=()=>{},n.push(t),n.push(null);let s=De(r,"returnType",""),o=De(r,"returnMsg",""),u=e.response(n).header("Cache-Control","no-cache, no-store, must-revalidate").header("Content-Type","application/octet-stream").header("Content-Length",n.readableLength);return er(s)&&u.header("Return-Type",s),er(o)&&es("Return-Msg",o)&&u.header("Return-Msg",o),u}function us(e,t){return 0===e.listenerCount(t)?`no listener for event[${t}]`:""}function ls(s={}){let o={useLimitSafe:!0},u=!!De(s,"serverHapi"),l=[],a=De(s,"port");(!Cr(a,o)||hr(a)>65535)&&(a=8080),a=hr(a);let c=De(s,"useInert");null==c?c=!0:wr(c)||(u||l.push("invalid useInert: must be a boolean, static files are not served"),c=!1);let d=De(s,"pathStaticFiles");null==d?d="dist":er(d)||(c&&!u&&l.push("invalid pathStaticFiles: must be a non-empty string, static files are not served"),c=!1,d="dist");let w=De(s,"pathUploadTemp");er(w)||(w="./uploadTemp");let y="";if(!Or(w)){let e=Rn(w);un(e,"error")&&(y=Mn(e.error))}let g=De(s,"apiName");er(g)||(g="api");let D=De(s,"tokenType");er(D)||(D="Bearer");let m=De(s,"sizeSlice");Cr(m,o)||(m=1048576),m=hr(m);let M=De(s,"sizeMsg");Cr(M,o)||(M=104857600),M=hr(M);let f=De(s,"verifyConn");if(null==f)f=()=>!0;else{let e=!1;try{e=Gr(f)}catch(e){}e||(l.push("invalid verifyConn: must be a function (sync or async), all API requests will be denied"),f=()=>!1)}let p="invalid corsOrigins: must be an array of origin strings ('*' must be the only element if present), or false to disable; CORS is disabled",I=De(s,"corsOrigins"),h=null!=I;h?u?l.push("corsOrigins has no effect with serverHapi: the cross-origin policy is decided by the external server"):!1===I||""===I?I=null:er(I)?I=[I]:Lr(I)?(I=I.filter(e=>""!==e),0===I.length&&(I=null)):(l.push(p),I=null):I=["*"];let C=De(s,"delayForSlice","");(!kr(C,o)||hr(C)>2147483647)&&(C=100),C=hr(C);let L=null;if(u)L=s.serverHapi;else{let e=e=>{let t=!1;return null!==e&&(t={origin:e,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]}),{port:a,routes:{timeout:{server:!1,socket:!1},cors:t}}};try{L=r.server(e(I))}catch(t){if(!h||null===I)throw t;console.log("invalid corsOrigins",t),l.push(p),I=null,L=r.server(e(I))}}let b=nn(),N={tag:"w-converhp"},A=(e,...t)=>sn(b,e,t,{...N,funSettle:()=>{let r=t[t.length-1];Wr(r)&&r.reject(`listener of event[${e}] error`)},funEmit:E}),x=(e,...t)=>an(b,e,t,{...N,funEmit:E});function E(e,...t){if("error"===e&&_t(t[0])&&"listener"===t[0].fun){let e=De(t[0],"name",""),r=De(t[0],"msg");return console.log(`listener of event[${e}] error`,r),b.emit("error",`listener of event[${e}] error: ${Mn(r)}`)}return b.emit(e,...t)}er(y)&&x("error",`create pathUploadTemp[${w}] error: ${y}`);for(let e of l)x("error",e);let T=(e,t,r)=>{let n=Hr(),i=Hr();return i.then(t=>{void 0===t&&(t=null);let i=typeof t;if("function"===i||"symbol"===i)return n.reject("output can not be serialized"),void A("error",`event[${e}] output can not be serialized: output is a ${i}`);n.resolve(Gr(r)?r(t):t)}).catch(e=>{n.reject(e)}),function(e,t,r,n,i,s){let o=us(e,r);er(o)?(i.reject(o),s(o)):t(r,...n,i)}(b,A,e,t,i,e=>{A("error",e)}),n};async function v(e){return T("upload",[e])}async function S(e){return T("download",[e])}let Z=`${fn(D)} `,j=(e,t)=>{let r=De(e,"headers");r=_t(r)?r:"";let n=De(e,"query");n=_t(n)?n:"";let i="",s="";return"query"===t.authFrom?(s=De(n,"token",""),s=er(s)?s:"",er(s)&&(i=`${D} ${s}`)):(i=De(r,"authorization",""),i=er(i)?i:"",s=i.startsWith(Z)?i.slice(Z.length):""),{headers:r,query:n,authorization:i,token:s}},Y=(e,t)=>{let r=(r,n,i)=>function(e,t,r={}){er(t)||(console.log("msg",t),console.log("msg is not an effective string, set msg=''"),t="");let n=De(r,"retryable",!0),i={error:t};!1===n&&(i.retryable=!1);let s=os(e,kn(i),{returnType:"error",returnMsg:t});return!1===n&&s.header("Return-Retryable","false"),s}(e,n,i).code(t.statusOf[r]);return{permission:()=>r("permission","permission denied"),param:e=>r("param",e,{retryable:!1}),app:e=>r("app",e),output:e=>r("output",e),packet:e=>r("packet",e),internal:e=>r("internal",e)}},X=async(e,t,r,n)=>!0!==await async function(e){let t=!1;try{t=f(e),Wr(t)&&(t=await t)}catch(r){t=!1,console.log(`verifyConn error for apiType[${De(e,"apiType","")}]`,r),A("error",`verifyConn error for apiType[${De(e,"apiType","")}]: ${Mn(r)}`)}return!0===t}({apiType:r.apiType,authorization:t.authorization,query:t.query,headers:t.headers,req:e})?n.permission():(A("handler",{api:r.api,headers:t.headers,query:t.query}),null),z=(e,t)=>{let r=us(b,e.event);if(!er(r))return null;let n=t.app(r);return A("error",r),n},G=(e,t,r,n)=>{let i=function(e,t){let r={};for(let n of t){let t=qi(`read field[${n}]`,()=>De(e,n));if(!t.ok)return{ok:!1,field:n,cause:t.cause,fields:r};r[n]=t.value}return{ok:!0,fields:r}}(e,r.fields.map(e=>e.name));if(!i.ok)return is(De(i.fields,"streamRead")),A("error",`download fileId[${t}] output error: can not read field[${i.field}]: ${i.cause}`),{ok:!1,res:n.output("invalid streamRead")};let s={streamRead:i.fields.streamRead};for(let e of r.fields){if("streamRead"===e.name)continue;let r=ns(e.name,i.fields[e.name]);if(r.ok){s[e.name]=r.value;continue}if(!0===e.optional&&!er(r.cause)){s[e.name]="";continue}is(s.streamRead);let o="fileSize"===e.name?`[${Mn(i.fields.fileSize)}]`:"";return A("error",`download fileId[${t}] output error: invalid ${e.name}${o}${er(r.cause)?`: ${r.cause}`:""}`),{ok:!1,res:n.output(`invalid ${e.name}`)}}return{ok:!0,v:s}},W=async(e,t,r,n)=>{let i={},s="";await r.then(e=>{i.success=e,s="success"}).catch(e=>{i.error=e,s="error"});let o=function(e,t){let r={};for(let t of Object.keys(e))r[t]=ss(e[t]);let n=kn(r,{returnWithStateAndMsg:!0});return"success"!==De(n,"state")?(t(De(n,"msg","unknown error")),null):n.msg}(i,e=>{A("error",`${n} output can not be serialized: ${e}`)});return null===o?t.internal("output can not be serialized"):os(e,o,{returnType:s,returnMsg:"need to parse"})},K=e=>(t,r,n)=>{if(413===De(n,"output.statusCode"))throw n;return A("error",`invalid request packet for ${e.api}: ${Mn(n)}`),Y(r,e).packet("invalid request packet").takeover()},k={path:`/${g}/main`,method:"POST",options:{payload:{maxBytes:M,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(e,t){let r=Jn.main,n=Y(t,r),s=j(e,r),o=await X(e,s,r,n);if(o)return o;let u=null;try{u=await(()=>{let t=Hr(),r=[],n=0,s=!1,o=new i.Writable({write(e,t,i){if(n+=e.length,n>M)return r=[],s=!0,void i();r.push(e),i()}});return o.on("finish",()=>{}),e.payload.pipe(o),e.payload.on("end",()=>{if(s)return void t.reject("payload too large");let e=Buffer.concat(r);r=[],t.resolve(e)}),e.payload.on("close",()=>{}),e.payload.on("error",e=>{console.log("apiMain req.payload err",e),A("error",`receive payload error: ${Mn(e)}`),t.reject(`receive payload error: ${Mn(e)}`)}),e.payload.destroyed&&(A("error","receive payload error: closed before receive"),t.reject("receive payload error: closed before receive")),t})()}catch(e){if("payload too large"===e)return t.response({statusCode:413,error:"Request Entity Too Large",message:`Payload content length greater than maximum allowed: ${M}`}).code(413);throw e}let l=Un(new Uint8Array(u),{returnWithStateAndMsg:!0});if("success"!==De(l,"state")||!_t(l.msg)){let e=Mn(De(l,"msg",""));return A("error",`invalid request packet for apiMain: ${er(e)?e:"not an effective object"}`),n.packet("invalid request packet")}let a=l.msg;return W(t,n,async function(e){return T("execute",[De(e,"func",""),De(e,"input",null)],t=>(e.output=t,delete e.input,e))}(a),`execute func[${Mn(De(a,"func",""))}]`)}},F={path:`/${g}/ulctr`,method:"POST",options:{payload:{maxBytes:M,maxParts:1e9,timeout:!1,parse:!0,failAction:K(Jn.ulctr)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let r=Jn.ulctr,n=Y(t,r),i=j(e,r),s=await X(e,i,r,n);if(s)return s;let o=De(e,"payload.mode","");if("check-total-hash"!==o&&"check-slices-hash"!==o&&"merge-slices-push"!==o&&"merge-slices-get"!==o)return n.param(`invalid mode[${Mn(o)}] in payload`);let u=De(e,"payload.fileHash","");if(!Pn(u))return n.param("invalid fileHash in payload");let l=De(e,"payload.chunkTotal","");if("merge-slices-push"===o){if(!Cr(l))return n.param("invalid chunkTotal in payload");l=hr(l)}if("merge-slices-get"!==o){let e=z(r,n);if(e)return e}let a=De(e,"payload.filename",""),c=function(e,t="unknown"){if(!er(e))return t;let r=e.replace(/\\/g,"/").split("/").filter(e=>""!==e&&"."!==e&&".."!==e).pop()||"";return r=r.replace(/[\x00-\x1f\x7f<>:"|?*]/g,"_"),r=r.replace(/[. ]+$/g,""),/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i.test(r)&&(r=`_${r}`),""===r?t:r}(a,""),d=e=>_t(e)&&un(e,"error")?`${o}: ${fn(e.error)}`:"",y=async(e,t)=>{try{return await t()}catch(t){return A("error",`upload-controller mode[${o}] ${e} error: ${Mn(t)}`),Promise.reject(`${o} failed`)}};return W(t,n,(async()=>{let t=null;if("check-total-hash"===o){let r=De(e,"payload.fileSize","");t=await y("check total hash",()=>Ji(r,m,u,w));let n=d(t);if(er(n))return Promise.reject(n);if(t.bAllHash){let e={from:"check-total-hash",filename:a,filenameSafe:c,path:t.path},r=await v(e);t={...t,msg:r}}delete t.path,t.sizeSlice=m}else if("check-slices-hash"===o){let r=De(e,"payload.fileSliceHashs",[]);t=await y("check slices hash",()=>_i(r,u,w));let n=d(t);if(er(n))return Promise.reject(n)}else if("merge-slices-push"===o){t={queueId:await y("push merge task",()=>Oi(u,l,w))}}else if("merge-slices-get"===o){let r=De(e,"payload.queueId",""),n=await Pi(r,w,{funConsume:async e=>await v({from:"merge-slices-get",filename:a,filenameSafe:c,path:e}),funLog:e=>{A("error",e)}});t={state:n.state,msg:n.msg,queueId:r,filename:a},"error"===n.state&&er(n.reason)&&A("error",`${n.msg} for fileHash[${u}]: ${n.reason}`)}return t})(),`upload-controller mode[${o}]`)}},V={path:`/${g}/slc`,method:"POST",options:{payload:{maxBytes:m,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(r,n){let i=Jn.slc,s=Y(n,i),o=j(r,i),u=await X(r,o,i,s);if(u)return u;let l=De(o.headers,"chunk-index",""),a=De(o.headers,"chunk-total",""),c=De(o.headers,"package-id","");if(!kr(l))return s.param("invalid chunkIndex in headers");if(l=hr(l),!kr(a))return s.param("invalid chunkTotal in headers");if(a=hr(a),!Pn(c))return s.param("invalid packageId in headers");let d=z(i,s);if(d)return d;let y=e.resolve(w,`${c}_${l}`),g=t.createWriteStream(y),D=()=>{let e=Hr(),t=0,n=!1,i=!1,s=!1,o=!1;g.on("error",t=>{i||n||s||(i=!0,r.payload.unpipe(g),r.payload.resume(),console.log(`apiUploadSlice streamWrite chunk[${l+1}/${a}] of packageId[${c}] err`,t),A("error",`write chunk[${l+1}/${a}] of packageId[${c}] error: ${Mn(t)}`),e.reject(`write chunk[${l+1}/${a}] of packageId[${c}] error`))}),g.on("close",()=>{n||i||s?On(y):o&&!0===g.writableFinished&&setTimeout(()=>{e.resolve(`chunk[${l+1}/${a}] of packageId[${c}] done`)},C)}),r.payload.on("data",e=>{n||(t+=e.length,t>m&&(n=!0,r.payload.unpipe(g),r.payload.resume(),g.destroy()))}),r.payload.pipe(g),r.payload.on("end",()=>{o=!0,i||n&&e.reject("payload too large")});let u=t=>{s||o||i||(s=!0,g.destroy(),A("error",`receive chunk[${l+1}/${a}] of packageId[${c}] error: ${t}`),e.reject(`receive chunk[${l+1}/${a}] of packageId[${c}] error: ${t}`))};return r.payload.on("error",e=>{console.log(`apiUploadSlice req.payload chunk[${l+1}/${a}] of packageId[${c}] err`,e),u(Mn(e))}),r.payload.on("close",()=>{u("closed before end")}),r.payload.destroyed&&u("closed before receive"),e},M={},f="",p="";try{let e=await D();M.success=e,f="success",p="need to parse"}catch(e){if("payload too large"===e)return n.response({statusCode:413,error:"Request Entity Too Large",message:`Payload content length greater than maximum allowed: ${m}`}).code(413);M.error=e,f="error",p="need to parse"}return os(n,kn(M),{returnType:f,returnMsg:p})}},H={path:`/${g}/dwgfn`,method:"POST",options:{payload:{maxBytes:M,maxParts:1e9,timeout:!1,parse:!0,failAction:K(Jn.dwgfn)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let r=Jn.dwgfn,n=Y(t,r),i=j(e,r),s=await X(e,i,r,n);if(s)return s;let o=De(e,"payload.fileId","");if(!er(o))return n.param("invalid fileId in payload");let u={fileId:o,token:i.token},l={};if(await S(u).then(e=>{l.success=e}).catch(e=>{l.error=e}),un(l,"error"))return n.app("can not get file from fileId");let a=G(De(l,"success"),o,r,n);return a.ok?(is(a.v.streamRead),W(t,n,Promise.resolve({filename:a.v.filename}),`download fileId[${o}]`)):a.res}},U={path:`/${g}/dwgf`,method:"GET",options:{timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let r=Jn.dwgf,n=Y(t,r),i=j(e,r),s=await X(e,i,r,n);if(s)return s;let o=De(i.query,"fileId","");if(o=er(o)?o:"",!er(o))return n.param("invalid fileId in query");let u={fileId:o,token:i.token},l={};if(await S(u).then(e=>{l.success=e}).catch(e=>{l.error=e}),un(l,"error"))return n.app("can not get file from fileId");let a=G(De(l,"success"),o,r,n);if(!a.ok)return a.res;let c=a.v.streamRead,d=a.v.fileSize,w=a.v.fileType,y=a.v.filename,g=ts(c,d,e=>{A("error",`download fileId[${o}] stream error: ${e}`)},{forHead:"head"===fn(De(e,"method","")).toLowerCase()});if(g.error)return is(c),A("error",`download fileId[${o}] output error: ${g.reason}`),n.output(g.error);let D=t.response(g.source).type(w).header("Content-Encoding","identity").header("Content-Length",d).header("Content-Disposition",er(y)?`attachment; filename*=UTF-8''${function(e){let t=Array.from(fn(e)),r="";for(let e of t){let t="";try{t=encodeURIComponent(e)}catch(e){t="%EF%BF%BD"}r+=t}return r.replace(/['()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}(y)}`:"attachment");return D}},B={path:`/${g}/dw`,method:"POST",options:{payload:{maxBytes:M,maxParts:1e9,timeout:!1,parse:!0,failAction:K(Jn.dw)},timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let r=Jn.dw,n=Y(t,r),i=j(e,r),s=await X(e,i,r,n);if(s)return s;let o=De(e,"payload.fileId","");if(!er(o))return n.param("invalid fileId in payload");let u={fileId:o,token:i.token},l={};if(await S(u).then(e=>{l.success=e}).catch(e=>{l.error=e}),un(l,"error"))return n.app("can not get file from fileId");let a=G(De(l,"success"),o,r,n);if(!a.ok)return a.res;let c=a.v.streamRead,d=function(e,t={}){let r=De(t,"returnWithStateAndMsg",null);wr(r)||(r=!1);let n=e=>r?{state:"error",msg:e}:"";if(!er(e))return n("invalid str");let i="";try{let t=bn.parse(e);i=An.stringify(t)}catch(e){return n(e.toString())}return r?{state:"success",msg:i}:i}(a.v.filename),w=a.v.fileSize,y=a.v.fileType,g=ts(c,w,e=>{A("error",`download fileId[${o}] stream error: ${e}`)},{forHead:"head"===fn(De(e,"method","")).toLowerCase()});return g.error?(is(c),A("error",`download fileId[${o}] output error: ${g.reason}`),n.output(g.error)):t.response(g.source).type(y).header("Content-Encoding","identity").header("Content-Disposition",`attachment; filename="${d}"`).header("Content-Length",w)}};let R=null;if(u)try{L.route([k,F,V,H,U,B])}catch(e){console.log("register routes error",e),x("error",`register routes error: ${Mn(e)}`)}else R=async function(){c&&await L.register(n);let e=[];if(c){let t={method:"GET",path:"/{file*}",handler:{directory:{path:`${d}/`}}};e=[...e,t]}e=[...e,k,F,V,H,U,B],L.route(e),await L.start(),console.log(`Server running at: ${L.info.uri}`)}().catch(e=>{console.log("start server error",e),x("error",`start server error: ${Mn(e)}`)});return b.stop=async()=>{try{Wr(R)&&await R,await L.stop()}catch(e){console.log("stop server error",e),A("error",`stop server error: ${Mn(e)}`)}},b}function as(){if(!Gr(Di))throw new Error("invalid dayjs");return Di().format("YYYY-MM-DDTHH:mm:ssZ")}var cs=function(){return m.Date.now()},ds=Math.max,ws=Math.min;function ys(e,t,r){var n,i,s,o,u,l,a=0,c=!1,d=!1,w=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var r=n,s=i;return n=i=void 0,a=t,o=e.apply(s,r)}function g(e){var r=e-l;return void 0===l||r>=t||r<0||d&&e-a>=s}function D(){var e=cs();if(g(e))return m(e);u=setTimeout(D,function(e){var r=t-(e-l);return d?ws(r,s-(e-a)):r}(e))}function m(e){return u=void 0,w&&n?y(e):(n=i=void 0,o)}function M(){var e=cs(),r=g(e);if(n=arguments,i=this,l=e,r){if(void 0===u)return function(e){return a=e,u=setTimeout(D,t),c?y(e):o}(l);if(d)return clearTimeout(u),u=setTimeout(D,t),y(l)}return void 0===u&&(u=setTimeout(D,t)),o}return t=lr(t)||0,v(r)&&(c=!!r.leading,s=(d="maxWait"in r)?ds(lr(r.maxWait)||0,t):s,w="trailing"in r?!!r.trailing:w),M.cancel=function(){void 0!==u&&clearTimeout(u),a=0,n=l=i=u=void 0},M.flush=function(){return void 0===u?o:m(cs())},M}var gs=function(){try{var e=U(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Ds=gs;function ms(e,t,r){"__proto__"==t&&Ds?Ds(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}function Ms(e,t,r){(void 0!==r&&!Q(e[t],r)||void 0===r&&!(t in e))&&ms(e,t,r)}var fs="object"==typeof exports&&exports&&!exports.nodeType&&exports,ps=fs&&"object"==typeof module&&module&&!module.nodeType&&module,Is=ps&&ps.exports===fs?m.Buffer:void 0,hs=Is?Is.allocUnsafe:void 0;function Cs(e,t){if(t)return e.slice();var r=e.length,n=hs?hs(r):new e.constructor(r);return e.copy(n),n}function Ls(e){var t=new e.constructor(e.byteLength);return new he(t).set(new he(e)),t}function bs(e,t){var r=t?Ls(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function Ns(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}var As=Object.create,xs=function(){function e(){}return function(t){if(!v(t))return{};if(As)return As(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();function Es(e){return"function"!=typeof e.constructor||nt(e)?{}:xs(Tr(e))}function Ts(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var vs=Object.prototype.hasOwnProperty;function Ss(e,t,r){var n=e[t];vs.call(e,t)&&Q(n,r)&&(void 0!==r||t in e)||ms(e,t,r)}function Zs(e,t,r,n){var i=!r;r||(r={});for(var s=-1,o=t.length;++s<o;){var u=t[s],l=n?n(r[u],e[u],u,r,e):void 0;void 0===l&&(l=e[u]),i?ms(r,u,l):Ss(r,u,l)}return r}var js=Object.prototype.hasOwnProperty;function Ys(e){if(!v(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=nt(e),r=[];for(var n in e)("constructor"!=n||!t&&js.call(e,n))&&r.push(n);return r}function Xs(e){return lt(e)?tt(e,!0):Ys(e)}function zs(e,t,r,n,i,s,o){var u=Ts(e,r),l=Ts(t,r),a=o.get(l);if(a)Ms(e,r,a);else{var c,d=s?s(u,l,r+"",e,t,o):void 0,w=void 0===d;if(w){var g=y(l),D=!g&&Ve(l),m=!g&&!D&&qe(l);d=l,g||D||m?y(u)?d=u:N(c=u)&<(c)?d=Ns(u):D?(w=!1,d=Cs(l,!0)):m?(w=!1,d=bs(l,!0)):d=[]:Xr(l)||We(l)?(d=u,We(u)?d=function(e){return Zs(e,Xs(e))}(u):v(u)&&!S(u)||(d=Es(l))):w=!1}w&&(o.set(l,d),i(d,l,n,s,o),o.delete(l)),Ms(e,r,d)}}function Gs(e,t,r,n,i){e!==t&&Ut(t,function(s,o){if(i||(i=new me),v(s))zs(e,t,o,r,Gs,n,i);else{var u=n?n(Ts(e,o),s,o+"",e,t,i):void 0;void 0===u&&(u=s),Ms(e,o,u)}},Xs)}var Ws=Math.max;var Ks=Ds?function(e,t){return Ds(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:Kt,ks=Ks,Fs=Date.now;var Vs=function(e){var t=0,r=0;return function(){var n=Fs(),i=16-(n-r);if(r=n,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ks),Hs=Vs;function Us(e,t){return Hs(function(e,t,r){return t=Ws(void 0===t?e.length-1:t,0),function(){for(var n=arguments,i=-1,s=Ws(n.length-t,0),o=Array(s);++i<s;)o[i]=n[t+i];i=-1;for(var u=Array(t+1);++i<t;)u[i]=n[i];return u[t]=r(o),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,u)}}(e,t,Kt),e+"")}function Bs(e,t,r){if(!v(r))return!1;var n=typeof t;return!!("number"==n?lt(r)&&Ue(t,r.length):"string"==n&&t in r)&&Q(r[t],e)}var Rs,Os=(Rs=function(e,t,r){Gs(e,t,r)},Us(function(e,t){var r=-1,n=t.length,i=n>1?t[n-1]:void 0,s=n>2?t[2]:void 0;for(i=Rs.length>3&&"function"==typeof i?(n--,i):void 0,s&&Bs(t[0],t[1],s)&&(i=n<3?void 0:i,n=1),e=Object(e);++r<n;){var o=t[r];o&&Rs(e,o,r,i)}return e}));let Ps="w-sync-webdata";function Qs(e,r={}){let n={},i=!1,s=!1,o=null;if(_t(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=nn()),!un(e,"emit"))throw new Error("instWConverServer is not an EventEmitter");let u=De(r,"fpTableTags","");er(u)||(u="./tableTags.json");let l=De(r,"genTag");Gr(l)||(l=()=>as()+"|"+fi(6));let{emit:a,emitNow:c,clear:d}=function(e,t){let r=t=>Gr(e.listenerCount)?e.listenerCount(t):1,n={emit:(t,...r)=>e.emit(t,...r),listenerCount:r},i=(t,...n)=>{if("error"!==t)return e.emit(t,...n);let i=n[0];return $t(i)&&"listener"===i.fun&&(i={msg:`listener of event[${i.name}] error`,err:i.msg}),0===r("error")?(console.error(`[${Ps}]`,i),!1):e.emit("error",i)},s=new Set,o=(e,t,r)=>{let i=null,o=r.funEmit;i=an(n,e,t,{...r,tag:Ps,funEmit:(e,...t)=>(s.delete(i),o(e,...t))}),s.add(i)};return{emit:(e,...r)=>{t()||o(e,r,{funEmit:(e,...r)=>!t()&&i(e,...r)})},emitPm:(n,s,u={})=>{let l=s.pm;if(t())return;let a=!1,c=!1,d=l.resolve,w=l.reject;l.resolve=e=>{a=!0,d(e)},l.reject=e=>{a=!0,w(e)},o(n,[s],{funSettle:e=>{a||(a=!0,c=!0,w(e))},funEmit:(s,...o)=>s!==n?!!c||!t()&&i(s,...o):!t()&&(!Gr(u.beforeDispatch)||!1!==u.beforeDispatch())&&(0===r(s)?(a=!0,c=!0,w(new Error(`no listener for event[${s}]`)),!1):e.emit(s,...o))})},emitNow:(e,...t)=>sn(n,e,t,{tag:Ps,funEmit:i}),clear:()=>{s.forEach(e=>{clearTimeout(e)}),s.clear()}}}(e,()=>i);function w(){let e={};try{if(t.existsSync(u)){let r=Kr(t.readFileSync(u,"utf8"));_t(r)&&(e=r)}}catch(e){a("error",{msg:"readTableTags catch",err:e})}return e}let y=()=>{let e=function(e,t=!1,r={}){let n=De(r,"returnWithStateAndMsg",null);wr(n)||(n=!1);let i=e=>n?{state:"error",msg:e}:"";if(br(e))return i("invalid v");let s="";try{s=t?JSON.stringify(e,null,2):JSON.stringify(e)}catch(e){return i(Tn(e))}return n?{state:"success",msg:s}:s}(n,!1,{returnWithStateAndMsg:!0});if("success"!==De(e,"state"))return new Error(`can not serialize tableTags: ${De(e,"msg")}`);try{t.writeFileSync(u,e.msg,"utf8")}catch(e){return e}return o=e.msg,s=!1,null};function g(){if(i)return;let e=y();e&&a("error",{msg:"writeTableTags catch",err:e})}let D=ys(()=>{g(),a("changeTableTags",n)},200);return e.readTableTags=w,e.writeTableTags=g,e.initTableTags=function(e={},t="useInputFirst"){if(!i)if(null===e&&(e={}),$t(e)){if("useInputOnly"===t)n=e;else if("useStorageOnly"===t)n=w();else if("useInputFirst"===t)n=Os(w(),e);else{if("useStorageFirst"!==t)throw new Error(`invalid mode[${t}]`);n=Os(e,w())}g()}else a("error",{msg:"invalid tableTags for initTableTags",err:e})},e.setTableTags=function(e={}){i||(null===e&&(e={}),$t(e)?(n=Os(n,e),g()):a("error",{msg:"invalid tableTags for setTableTags",err:e}))},e.getTableTags=function(){return n},e.updateTableTag=function(e){i||(er(e)?(n[e]=l(),s=!0,D()):a("error",{msg:"invalid tableName",err:e}))},e.clearSync=function(){if(i)return;D.cancel();let e=null;if(s){let r=null;try{t.existsSync(u)&&(r=t.readFileSync(u,"utf8"))}catch(e){r=void 0}null!==r&&r!==o||(e=y())}i=!0,d(),e&&c("error",{msg:"writeTableTags catch",err:e})},e}var Js=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)Ae(t,Ze(e)),e=Tr(e);return t}:Te;function $s(e){return xe(e,Xs,Js)}var _s=Object.prototype.hasOwnProperty;var qs=/\w*$/;var eo=M?M.prototype:void 0,to=eo?eo.valueOf:void 0;function ro(e,t,r){var n,i,s,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Ls(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Ls(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return bs(e,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(e);case"[object RegExp]":return(s=new(i=e).constructor(i.source,qs.exec(i))).lastIndex=i.lastIndex,s;case"[object Symbol]":return n=e,to?Object(to.call(n)):{}}}var no=$e&&$e.isMap,io=no?Oe(no):function(e){return N(e)&&"[object Map]"==xt(e)};var so=$e&&$e.isSet,oo=so?Oe(so):function(e){return N(e)&&"[object Set]"==xt(e)},uo="[object Arguments]",lo="[object Function]",ao="[object Object]",co={};function wo(e,t,r,n,i,s){var o,u=1&t,l=2&t,a=4&t;if(r&&(o=i?r(e,n,i,s):r(e)),void 0!==o)return o;if(!v(e))return e;var c=y(e);if(c){if(o=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&_s.call(e,"index")&&(r.index=e.index,r.input=e.input),r}(e),!u)return Ns(e,o)}else{var d=xt(e),w=d==lo||"[object GeneratorFunction]"==d;if(Ve(e))return Cs(e,u);if(d==ao||d==uo||w&&!i){if(o=l||w?{}:Es(e),!u)return l?function(e,t){return Zs(e,Js(e),t)}(e,function(e,t){return e&&Zs(t,Xs(t),e)}(o,e)):function(e,t){return Zs(e,Ze(e),t)}(e,function(e,t){return e&&Zs(t,at(t),e)}(o,e))}else{if(!co[d])return i?e:{};o=ro(e,d,u)}}s||(s=new me);var g=s.get(e);if(g)return g;s.set(e,o),oo(e)?e.forEach(function(n){o.add(wo(n,t,r,n,e,s))}):io(e)&&e.forEach(function(n,i){o.set(i,wo(n,t,r,i,e,s))});var D=c?void 0:(a?l?$s:ct:l?Xs:at)(e);return xn(D||e,function(n,i){D&&(n=e[i=n]),Ss(o,i,wo(n,t,r,i,e,s))}),o}co[uo]=co["[object Array]"]=co["[object ArrayBuffer]"]=co["[object DataView]"]=co["[object Boolean]"]=co["[object Date]"]=co["[object Float32Array]"]=co["[object Float64Array]"]=co["[object Int8Array]"]=co["[object Int16Array]"]=co["[object Int32Array]"]=co["[object Map]"]=co["[object Number]"]=co[ao]=co["[object RegExp]"]=co["[object Set]"]=co["[object String]"]=co["[object Symbol]"]=co["[object Uint8Array]"]=co["[object Uint8ClampedArray]"]=co["[object Uint16Array]"]=co["[object Uint32Array]"]=!0,co["[object Error]"]=co[lo]=co["[object WeakMap]"]=!1;function yo(e){return wo(e,5)}function go(e={}){let t=nn(),r=Object.create(null),n=null,i=new Set,s=new Set,o=!1,u=De(e,"timeAlive");Cr(u)||(u=1e4),u=hr(u),u=Math.min(u,$r);let l=De(e,"timeDetect");return Cr(l)||(l=50),l=hr(l),l=Math.min(l,$r),t.trigger=function(e,a){if(!o)if(er(e)){if(!un(r,e)){let n=setTimeout(()=>{i.delete(n),un(r,e)&&s.add(e),sn(t,"message",[{eventName:"enter",key:e,data:a,now:yi(r)}],{tag:"alive"})},1);i.add(n)}r[e]={data:a,time:Date.now()},o||null===n&&(n=setInterval(()=>{En(r,(e,n)=>{if(Date.now()-e.time>u){let e=yo(r[n]);if(delete r[n],s.delete(n),sn(t,"message",[{eventName:"leave",key:n,data:e.data,now:yi(r)}],{tag:"alive"}),o)return!1}}),o||_t(r)||(clearInterval(n),n=null)},l))}else console.log("trigger need key")},t.get=function(){let e=[];return En(r,(t,r)=>{e.push({key:r,data:t.data})}),e=yo(e),e},t.clear=function(){if(o)return[];o=!0,null!==n&&(clearInterval(n),n=null);for(let e of i)clearTimeout(e);i.clear();let e=[];return En(r,(t,r)=>{s.has(r)&&e.push({key:r,data:t.data})}),e=yo(e),r=Object.create(null),s.clear(),e},t}function Do(e,t={}){let r=t.isCleared;Gr(r)||(r=()=>!1);let n=t.onDeliver;Gr(n)||(n=null);let i=e=>{console.error(`[w-serv-broadcast] ${e.msg}`,e.err)},s=t=>(s,...o)=>{let u=o[0];if("error"===s&&_t(u)&&"listener"===u.fun){let t={msg:`listener of event[${u.name}] error`,err:u.msg};return r()?(i(t),!1):e.emit("error",t)}return(!t||!r())&&("error"===s&&0===(t=>Gr(e.listenerCount)?e.listenerCount(t):1)("error")?(i(u),!1):(null!==n&&n(s,o),e.emit(s,...o)))},o=s(!0),u=s(!1),l=(t,...n)=>{r()||an(e,t,n,{tag:"w-serv-broadcast",funEmit:o})};return l.final=(t,...r)=>{an(e,t,r,{tag:"w-serv-broadcast",funEmit:u})},l}function mo(e,t={}){if(_t(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=nn()),!un(e,"emit")||!Gr(e.on)||!Gr(e.off))throw new Error("instWConverServer is not an EventEmitter");let r=new Map,n=!1,i=new Map,s=Do(e,{isCleared:()=>n,onDeliver:(e,t)=>{"clientEnter"===e?i.set(t[0],t[1]):"clientLeave"===e&&i.delete(t[0])}}),o=go();o.on("message",function({eventName:e,key:t,data:r,now:n}){"enter"===e?s("clientEnter",t,r):"leave"===e&&(i.has(t)&&i.set(t,r),s("clientLeave",t,r)),s("clientChange",n)});let u=function(e,t,i){if(!n&&"[sys:polling]"===e)try{let e=De(t,"clientId");if(!er(e))return void i.reject("[sys:polling] invalid clientId");let n=r.get(e)||[];r.set(e,[]),o.trigger(e,t),i.resolve(n)}catch(e){s("error",{msg:"[sys:polling] error",err:e}),i.reject("[sys:polling] error")}},l=null;return e.getClients=o.get,e.getMessages=()=>Object.fromEntries(Array.from(r,([e,t])=>[e,yo(t)])),e.broadcast=e=>{if(n)return;let t={mode:"broadcast",data:yo(e)};r.forEach(e=>{e.push(t)})},e.clearBroadcast=()=>{if(n)return;n=!0,null!==l&&(clearInterval(l),l=null),e.off("execute",u);let t=new Map(Pt(o.get(),e=>[e.key,e.data]));o.clear();let a=i.size;for(let[e,r]of Array.from(i))a--,s.final("clientLeave",e,t.has(e)?t.get(e):r),s.final("clientChange",a);i.clear(),r=new Map},e.on("execute",u),l=setInterval(()=>{let e=new Set(Pt(o.get(),"key"));for(let t of Array.from(r.keys()))e.has(t)||r.delete(t)},1e3),e}let Mo=(e,t)=>{let r={};return En(e,e=>{let n=e,i=De(t,e,"");er(i)&&(r[n]=i)}),r};function fo(e){En(e,({ev:e,name:t,h:r})=>{try{Gr(e.removeListener)?e.removeListener(t,r):Gr(e.off)&&e.off(t,r)}catch(e){}})}function po(e,t){return 0!==yi(e)&&(!!_t(t)&&(En(e,e=>{let r=t[e];if(!r)throw new Error(`invalid kpOrm[${e}]`);if(!Gr(r.on))throw new Error(`kpOrm[${e}] can not listen to change events`)}),!0))}function Io(e,t,r,n={}){if(!_t(e))throw new Error("invalid instWConverServer");if(!po(t,r))return e;let i=De(n,"genTag");Gr(i)||(i=()=>as()+"|"+fi(6));let s={};En(t,e=>{s[e]=i()}),En(s,e=>{if(!er(e))throw new Error("invalid opt.genTag")});let o=[];try{En(t,t=>{let n=r[t],i=()=>{e.updateTableTag(t)};try{n.on("change",i)}catch(e){throw new Error(`kpOrm[${t}] can not listen to change events`)}o.push({ev:n,name:"change",h:i})});let n=r=>{e.broadcast({mode:"syncKpTable",data:Mo(t,r)})};e.on("changeTableTags",n),o.push({ev:e,name:"changeTableTags",h:n})}catch(e){throw fo(o),e}let u=e.clearSync;return e.clearSync=()=>{fo(o),o=[],u()},e.initTableTags(s,"useInputOnly"),e}function ho(e,t){return!!(null==e?0:e.length)&&Ci(e,t,0)>-1}function Co(e,t,r){for(var n=-1,i=null==e?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1}var Lo=gt&&1/Le(new gt([,-0]))[1]==1/0?function(e){return new gt(e)}:function(){};function bo(e){return e&&e.length?function(e,t,r){var n=-1,i=ho,s=e.length,o=!0,u=[],l=u;if(r)o=!1,i=Co;else if(s>=200){var a=t?null:Lo(e);if(a)return Le(a);o=!1,i=pe,l=new Me}else l=t?[]:u;e:for(;++n<s;){var c=e[n],d=t?t(c):c;if(c=r||0!==c?c:0,o&&d==d){for(var w=l.length;w--;)if(l[w]===d)continue e;t&&l.push(d),u.push(c)}else i(l,d,r)||(l!==u&&l.push(d),u.push(c))}return u}(e):[]}function No(e,t,r,n){for(var i=r-1,s=e.length;++i<s;)if(n(e[i],t))return i;return-1}var Ao=Array.prototype.splice;function xo(e,t){return e&&e.length&&t&&t.length?function(e,t,r,n){var i=n?No:Ci,s=-1,o=t.length,u=e;for(e===t&&(t=Ns(t)),r&&(u=ue(e,Oe(r)));++s<o;)for(var l=0,a=t[s],c=r?r(a):a;(l=i(u,c,l,n))>-1;)u!==e&&Ao.call(u,l,1),Ao.call(e,l,1);return e}(e,t):e}let Eo=["__proto__","constructor","prototype"];function To(e){return y(t=e)?ue(t,ye):A(t)?[t]:Ns(oe(de(t)));var t}function vo(e){let t=To(e);if(0===t.length)return!1;for(let e of t)if(""===e||Eo.includes(e))return!1;return!0}const So=/^[\p{L}_][\p{L}\p{M}\p{N}_]*$/u,Zo=["prototype","length"];function jo(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return(t===Object.prototype||null===t)&&(0===Object.getOwnPropertySymbols(e).length&&Object.getOwnPropertyNames(e).length===Object.keys(e).length)}function Yo(e){return"string"==typeof e?e.length<=1024&&e.indexOf("\0")<0:"boolean"==typeof e||"number"==typeof e&&Number.isFinite(e)}function Xo(e,t={}){try{return function(e,t){let r=e=>({ok:!1,reason:e});if(void 0===e)return!0===t.requireKey?r("emptyFind"):{ok:!0,find:e};if(!jo(e))return r("notObject");let n=Object.keys(e);if(n.length>64)return r("tooManyKeys");if(!0===t.requireKey&&0===n.length)return r("emptyFind");let i={},s=0;for(let t of n){if(t.length>128||Zo.includes(t)||t in Object.prototype||!So.test(t))return r("badKey");let n=e[t];if(Yo(n))i[t]=n;else{if(!jo(n))return r("badValue");{let e=Object.keys(n);if(1!==e.length||"$in"!==e[0])return r("badOperator");let o=n.$in;if(!Array.isArray(o)||Object.getOwnPropertySymbols(o).length>0)return r("badIn");let u=o.length;if(s+=u,s>1e3)return r("tooManyIn");if(Object.getOwnPropertyNames(o).length!==u+1)return r("badIn");let l=[];for(let e=0;e<u;e++){if(!Object.prototype.hasOwnProperty.call(o,e))return r("badIn");let t=o[e];if(!Yo(t))return r("badIn");l.push(t)}i[t]=Object.freeze({$in:Object.freeze(l)})}}}return{ok:!0,find:Object.freeze(i)}}(e,t)}catch(e){return{ok:!1,reason:"notObject"}}}let zo=e=>null!=e,Go=["select","delAll"];function Wo(e={}){let t=De(e,"getUserIdByToken",null);if(zo(t)&&!Gr(t))throw new Error("invalid opt.getUserIdByToken");Gr(t)||(t=async()=>"");let r=De(e,"useDbOrm",null);wr(r)||(r=!1);let n=null;if(r&&(n=De(e,"operOrm",null),!Gr(n)))throw new Error("invalid opt.operOrm when useDbOrm=true");let i=[];if(r){if(i=De(e,"tableNames",null),!Lr(i))throw new Error("invalid opt.tableNamesExec when useDbOrm=true");En(i,(e,t)=>{if(!er(e))throw new Error(`invalid opt.tableNamesExec[${t}] when useDbOrm=true`)}),i=[...i]}let s=[];if(r){if(s=De(e,"methods",null),null===s)s=["select","insert","save","del"];else if(!Lr(s))throw new Error("invalid opt.methodsExec when useDbOrm=true");En(s,(e,t)=>{if(!er(e))throw new Error(`invalid opt.methodsExec[${t}] when useDbOrm=true`)}),s=[...s]}let o=null;if(r&&(o=De(e,"authorizeExec",null),!Gr(o)))throw new Error("invalid opt.authorizeExec when useDbOrm=true");let u=De(e,"kpFunExt",null);if(zo(u)&&!$t(u))throw new Error("invalid opt.kpFunExt");$t(u)||(u={}),En(u,(e,t)=>{if(!Gr(e))throw new Error(`invalid opt.kpFunExt[${t}]`)});let l=De(e,"kpFunSys",null),a=[];r&&(En(i,e=>{En(s,t=>{a.push(`${e}.${t}`)})}),a=bo(a)),En(a,e=>{if(!vo(e))throw new Error(`table operation[${e}] can not be bound by the client`)});let c=bo(Pt(a,e=>To(e)[0]));En(u,(e,t)=>{if(t.startsWith("[sys:"))throw new Error(`kpFunExt[${t}] can not use the reserved prefix [sys:`);if(!vo(t))throw new Error(`kpFunExt[${t}] can not be bound by the client`);let r=To(t)[0];if(c.includes(r))throw new Error(`kpFunExt[${t}] conflicts with the table operations of table[${r}]`)});let d=function(e){let t=()=>({leaf:null,kids:new Map}),r=e=>{if(null!==e.leaf)return e.leaf;for(let t of e.kids.values()){let e=r(t);if(null!==e)return e}return null},n=t();for(let i of e){let e=n;for(let r of To(i)){if(null!==e.leaf)return[e.leaf,i];e.kids.has(r)||e.kids.set(r,t()),e=e.kids.get(r)}if(null===e.leaf){if(e.kids.size>0)return[r(e),i];e.leaf=i}else if(e.leaf!==i)return[e.leaf,i]}return null}([...a,...at(u)]);if(null!==d){let e=e=>a.includes(e)?"table operation":"kpFunExt";throw new Error(`${e(d[1])}[${d[1]}] conflicts with ${e(d[0])}[${d[0]}] on the client binding path`)}return{getUserIdByToken:t,useDbOrm:r,operOrm:n,tableNames:i,methods:s,authorizeExec:o,kpFunExt:u,kpFunSys:l,pathNames:a}}function Ko(e,t={}){if(!_t(e))throw new Error("invalid instWConverServer");let{getUserIdByToken:r,useDbOrm:n,operOrm:i,tableNames:s,methods:o,authorizeExec:u,kpFunExt:l,kpFunSys:a}=Wo(t),c={};async function d(t,n,i){if(!er(t))return i.resolve({state:"error",msg:"invalid func"}),i;let s="";if(!un(n,"__sysToken__"))return i.resolve({state:"error",msg:"invalid token"}),i;if(s=fn(n.__sysToken__),!un(n,"__sysInputArgs__"))return i.resolve({state:"error",msg:"invalid input"}),i;if(n=n.__sysInputArgs__,!Array.isArray(n))return i.resolve({state:"error",msg:"invalid input"}),i;let o="";try{o=await r(s)}catch(t){return i.resolve({state:"error",msg:t}),sn(e,"error",[t]),i}if(er(o)||(o=""),"[sys:getFuncList]"===t){let e=at(c);e=function(e,t){if(!Er(e))return[];if(($t(t)||gr(t)||qt(t)||wr(t))&&(t=[t]),!Er(t))return e;let r=yo(e);return xo(r,t),r}(e,"[sys:getTableTags]");let t={state:"success",msg:e};return i.resolve(t),i}if(!Object.prototype.hasOwnProperty.call(c,t))return i.resolve({state:"error",msg:`invalid func[${t}]`}),i;let u=c[t];try{let e=await Ur(u)(o,...n);i.resolve(e)}catch(e){i.resolve({state:"error",msg:`call func[${t}] has an error: ${Mn(e)}`})}return i}return n&&(c=function(e,t,r,n){let i={};return En(e,e=>{En(t,t=>{i[`${e}.${t}`]=async function(i,s){if(Go.includes(t)){let e=Xo(s);if(!e.ok)return Promise.reject(`invalid find[${e.reason}]`);s=e.find}return!0!==await n({userId:i,tableName:e,methodName:t,input:s})?Promise.reject("permission denied"):await r(i,e,t,s)}})}),i}(s,o,i,u)),En(l,(e,t)=>{c[t]=e}),_t(a)&&En(a,(e,t)=>{c[t]=e}),e.on("execute",function(t,r,n){d(t,r,n).catch(r=>{n.resolve({state:"error",msg:`execFun func[${t}] has an error: ${Mn(r)}`}),sn(e,"error",[r])})}),e}let ko=e=>null!=e;function Fo(e,t={}){if(_t(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=nn()),!un(e,"emit")||!Gr(e.on)||!Gr(e.off))throw new Error("instWConverServer is not an EventEmitter");let{fpTableTags:r,genTag:n,useDbOrm:i,kpOrm:s,tableNamesSync:o,optExec:u}=function(e={}){let t=De(e,"fpTableTags",null);if(ko(t)&&!er(t))throw new Error("invalid opt.fpTableTags");er(t)||(t="./tableTags.json");let r=De(e,"genTag",null);if(ko(r)&&!Gr(r))throw new Error("invalid opt.genTag");Gr(r)||(r=()=>as()+"|"+fi(6));let n=De(e,"useDbOrm",null),i=wr(n);i||(n=!1);let s=De(e,"kpOrm",null),o=De(e,"operOrm",null),u=De(e,"tableNamesExec",null),l=De(e,"methodsExec",null),a=De(e,"authorizeExec",null),c=De(e,"tableNamesSync",null),d=De(e,"getUserIdByToken",null),w=De(e,"kpFunExt",null);i||En({operOrm:o,tableNamesExec:u,methodsExec:l,authorizeExec:a,kpOrm:s,tableNamesSync:c},(e,t)=>{if(null!==e)throw new Error(`invalid opt.useDbOrm when opt.${t} is given`)});if(n&&!$t(s))throw new Error("invalid opt.kpOrm when useDbOrm=true");if(n&&ko(c)){if(!Lr(c))throw new Error("invalid opt.tableNamesSync when useDbOrm=true");En(c,(e,t)=>{if(!er(e))throw new Error(`invalid opt.tableNamesSync[${t}] when useDbOrm=true`)}),c=[...c]}let y=Wo({getUserIdByToken:d,useDbOrm:n,operOrm:o,tableNames:u,methods:l,authorizeExec:a,kpFunExt:w}),g=!1;return n&&(g=po(c,s)),g&&En(c,e=>{if(!y.tableNames.includes(e)||!y.methods.includes("select"))throw new Error(`invalid opt.tableNamesSync when table operation[${e}.select] does not exist`)}),{fpTableTags:t,genTag:r,useDbOrm:n,kpOrm:s,tableNamesSync:c,optExec:{getUserIdByToken:y.getUserIdByToken,useDbOrm:y.useDbOrm,operOrm:y.operOrm,tableNames:y.tableNames,methods:y.methods,authorizeExec:y.authorizeExec,kpFunExt:y.kpFunExt}}}(t);e=new mo(e=new Qs(e,{fpTableTags:r,genTag:n}));let l={"[sys:getTableTags]":()=>{let t=e.getTableTags();return{mode:"syncKpTable",data:Mo(o,t)}}};try{e=new Ko(e,{...u,kpFunSys:l}),i&&(e=new Io(e,o,s,{genTag:n}))}catch(t){throw e.clearBroadcast(),e.clearSync(),t}return e}function Vo(e={}){let t=nn(),i=De(e,"port");(!Cr(i,{useLimitSafe:!0})||hr(i)>65535)&&(i=8080),i=hr(i);let s=(t,r,n)=>{let i=De(e,t);if(null==i)return r;if(!n(i))throw new Error(`invalid opt.${t}`);return i},o=s("corsOrigins",["http://localhost"],e=>!1===e||qt(e)||Lr(e));!1===o&&(o=[]),qt(o)&&(o=[o]),o=o.filter(e=>""!==e);let u=s("useInert",!0,wr),l=s("pathStaticFiles","dist",er),a=De(e,"apis");Er(a)||(a=[]);let c=De(e,"fpTableTags",null);null==c&&(c=De(e,"fnTableTags",null));let d=De(e,"useShowLog");wr(d)||(d=!0);let w=!0,y=[],g=e=>{w?y.push(e):0!==t.listenerCount("error")?sn(t,"error",[e],{tag:"w-serv-hapi"}):console.error("[w-serv-hapi]",e)},D=!1;o.length>0&&(D={origin:o,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]});let m=new r.Server({port:i,routes:{timeout:{server:!1,socket:!1},cors:D}}),M=new ls({serverHapi:m,apiName:De(e,"apiName"),pathUploadTemp:De(e,"pathUploadTemp"),tokenType:De(e,"tokenType"),sizeSlice:De(e,"sizeSlice"),sizeMsg:De(e,"sizeMsg"),verifyConn:De(e,"verifyConn"),delayForSlice:De(e,"delayForSlice")});M.on("error",g),M.on("clientChange",function(e){d&&console.log(`Server[port:${i}]: now clients: ${e}`)});let f=()=>{for(let e of["clearBroadcast","clearSync"])if(Gr(M[e]))try{M[e]()}catch(e){g(e)}};M=new Fo(M,{...e,fpTableTags:c});let p=new Promise(e=>{setTimeout(()=>{w=!1,e();let t=y;y=[];for(let e of t)g(e)},1)}),I=!1,h=(async()=>{await p,u&&await m.register(n);let e=[];return u&&(e=[{method:"GET",path:"/{file*}",handler:{directory:{path:`${l}/`}}}]),e=[...e,...a],m.route(e),await m.start(),I=!0,d&&console.log(`Server running at: ${m.info.uri}`),m})();h.catch(e=>{f(),g(e)});let C=null;return t.ready=()=>h,t.stop=()=>(null!==C||(C=(async()=>{if(await h.catch(()=>{}),f(),I)try{await m.stop()}catch(e){g(e)}})()),C),t.getServer=async()=>m,t.getInstWConverServer=async()=>M,t}function Ho(e){try{e instanceof Promise&&Promise.prototype.then.call(e,void 0,()=>{})}catch(e){}}function Uo(e,t){let r=Hr(),n=!1;try{let t=function(e,t=!1){let r=[],n=!1;try{if(Array.isArray(e)){let t=e.length;r.length=t;for(let n=0;n<t;n++)n in e&&(r[n]=e[n])}else{if(t||!$t(e)&&!Lr(e))return null;{n=!0;let t=Object.keys(e);for(let n=0;n<t.length;n++)r.push({k:t[n],v:e[t[n]]})}}}catch(e){throw r.forEach(e=>{Ho(n?e.v:e)}),e}return{items:r,useObj:n}}(e);if(null===t)return r.reject("rs is not an array or object"),r;e=t.items,n=t.useObj}catch(e){return r.reject(e),r}Gr(t)||(En(e,e=>{Ho(n?e.v:e)}),t=function(e){return e});let i=Gr(t),s=-1,o=[];return e.reduce(function(e,r){return e.then(function(e){o.push(e),s+=1;let u=s,l=r;return n&&(u=r.k,l=r.v),i?t(l,u):l})},Promise.resolve()).then(function(e){var t,n,i,s;o.push(e),s=null==(t=o)?0:t.length,o=s?pi(t,(n=i||void 0===n?1:dr(n))<0?0:n,s):[],r.resolve(o)}).catch(function(e){r.reject(e)}),r}function Bo(e){let t="procOrm does not authorize users, authorize where procOrm is exposed to clients",r=[["useCheckUser",t],["getUserById",t],["useExcludeWhenNotAdmin","procOrm does not filter select results by user, use addFunPostProcessing if needed"]];for(let[t,n]of r){let r=De(e,t);if(null!=r&&!1!==r)throw new Error(`opt.${t} has been removed, ${n}`)}}const Ro=Object.freeze({mismatch:"baselineMismatch",rowNotFound:"rowNotFound",format:"baselineFormat"}),Oo=["table","pk","fields","serverOnly","orderKey","scope"];function Po(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Qo(e){return Object.prototype.toString.call(e)}function Jo(e){if(null===e||"object"!=typeof e||"[object Object]"!==Qo(e))return!1;let t=Object.getPrototypeOf(e);return null===t||null===Object.getPrototypeOf(t)}function $o(e){return"string"==typeof e&&""!==e}function _o(e,t){let r=new Error(t);return r.key=e,r}function qo(e,t,r){if(!Array.isArray(e)||!r&&0===e.length)throw new Error(`invalid contract: ${t} needs ${r?"an array":"a non-empty array"}`);let n=new Set;for(let r=0;r<e.length;r++){if(!$o(e[r]))throw new Error(`invalid contract: ${t}[${r}] needs a non-empty string`);if(n.has(e[r]))throw new Error(`invalid contract: ${t} has a duplicate name at [${r}]`);n.add(e[r])}}function eu(e){if(!Jo(e))throw new Error("invalid contract: need an object");for(let t of Reflect.ownKeys(e))if(Oo.indexOf(t)<0)throw new Error("invalid contract: unsupported key");if(!$o(e.pk))throw new Error("invalid contract: pk needs a non-empty string");if(qo(e.fields,"fields",!1),void 0!==e.serverOnly&&null!==e.serverOnly){qo(e.serverOnly,"serverOnly",!0);for(let t of e.serverOnly)if(e.fields.indexOf(t)>=0)throw new Error("invalid contract: serverOnly and fields must not overlap")}if(void 0!==e.orderKey&&null!==e.orderKey){if(!$o(e.orderKey))throw new Error("invalid contract: orderKey needs a non-empty string");if(e.fields.indexOf(e.orderKey)>=0)throw new Error("invalid contract: fields must not contain orderKey");if(e.orderKey===e.pk)throw new Error("invalid contract: orderKey must not be pk")}if(void 0!==e.scope&&null!==e.scope&&"function"!=typeof e.scope)throw new Error("invalid contract: scope needs a function");if(void 0!==e.table&&null!==e.table&&!$o(e.table))throw new Error("invalid contract: table needs a non-empty string");return!0}function tu(e,t,r,n){if(t.n+=1,t.n>1e5)throw new Error(`unsupported value of ${n}: too many nodes`);if(r>100)throw new Error(`unsupported value of ${n}: too deep or circular`);let i=typeof e;if(null==e)return"null";if("string"===i)return JSON.stringify(e);if("boolean"===i)return e?"true":"false";if("number"===i){if(!isFinite(e))throw new Error(`unsupported value of ${n}: non-finite number`);return JSON.stringify(e)}if("bigint"===i)return JSON.stringify(e.toString());if("object"===i){if(Array.isArray(e)){let i=Object.keys(e);for(let t=0;t<i.length;t++){let r=Number(i[t]);if(!(String(r)===i[t]&&r>=0&&r<e.length&&Math.floor(r)===r))throw new Error(`unsupported value of ${n}: array with extra properties`)}let s=[];for(let i=0;i<e.length;i++)s.push(tu(e[i],t,r+1,n));return"["+s.join(",")+"]"}let i=Qo(e);if("[object Date]"===i){let t;try{t=Date.prototype.toISOString.call(e)}catch(e){throw new Error(`unsupported value of ${n}: invalid Date`)}return JSON.stringify(t)}if(Jo(e)){let i=Object.keys(e).sort(),s=[];for(let o=0;o<i.length;o++){let u=e[i[o]];void 0!==u&&s.push(JSON.stringify(i[o])+":"+tu(u,t,r+1,n))}return"{"+s.join(",")+"}"}throw new Error(`unsupported value of ${n}: ${i}`)}throw new Error(`unsupported value of ${n}: ${i}`)}function ru(e,t,r){return null==e||""===e?"null":tu(e,t,0,r)}function nu(e){return null!==e&&"object"==typeof e&&"[object Object]"===Qo(e)}function iu(e,t){if(!nu(e))throw new Error("invalid row: need an object");let r=[],n={n:0};for(let i=0;i<t.length;i++){let s=t[i];r.push(ru(Po(e,s)?e[s]:void 0,n,`field[${s}]`))}let i=function(e,t){let r="number"==typeof t?t:0,n=3735928559^r,i=1103547991^r;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);n=Math.imul(n^r,2654435761),i=Math.imul(i^r,1597334677)}return n=Math.imul(n^n>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),4294967296*(2097151&i)+(n>>>0)}("["+r.join(",")+"]").toString(16);for(;i.length<14;)i="0"+i;return"h1:"+i}function su(e,t){let r=Po(e,t)?e[t]:void 0;return"string"==typeof r?""===r?null:r:"number"==typeof r&&isFinite(r)?String(r):"bigint"==typeof r?r.toString():null}function ou(e,t){let r=Po(e,t)?e[t]:void 0;if("number"==typeof r)return isFinite(r)?r:1/0;if("bigint"==typeof r)return r;if("string"==typeof r){let e=r.trim();if(""===e)return 1/0;if("function"==typeof BigInt&&/^[+-]?\d+$/.test(e))return BigInt(e);let t=Number(e);return isFinite(t)?t:1/0}return 1/0}function uu(e){if(!Array.isArray(e))return!1;let t=new RegExp("^h1:[0-9a-f]{14}$"),r=new Set;for(let n=0;n<e.length;n++){let i=e[n];if(!Array.isArray(i)||2!==i.length||!$o(i[0])||"string"!=typeof i[1]||!t.test(i[1]))return!1;if(r.has(i[0]))return!1;r.add(i[0])}return!0}function lu(e,t,r){if(eu(r),!uu(t))return{ok:!1,reason:Ro.format,added:[],removed:[],changed:[],reordered:!1};let n;try{n=function(e,t){if(eu(t),!Array.isArray(e))throw new Error("invalid rows: need an array");let r=t.fields,n="function"==typeof t.scope,i=$o(t.orderKey),s=[],o=new Set;for(let u=0;u<e.length;u++){let l=e[u];if(!nu(l))throw new Error(`invalid row: rows[${u}] needs an object`);if(n&&!t.scope(l))continue;let a=su(l,t.pk);if(null===a)throw _o(Ro.format,`invalid row: rows[${u}] has no valid primary key`);if(o.has(a))throw _o(Ro.format,`invalid row: rows[${u}] has a duplicate primary key`);o.add(a),s.push({id:a,o:i?ou(l,t.orderKey):0,d:iu(l,r)})}return s.sort((e,t)=>e.o<t.o?-1:e.o>t.o?1:e.id!==t.id?e.id<t.id?-1:1:0),s.map(e=>[e.id,e.d])}(e,r)}catch(e){if(null!==e&&"object"==typeof e&&e.key===Ro.format){let t=new Error(`invalid rowsNow: ${e.message}`);throw t.key="rowsInvalid",t}throw e}let i=new Map(t),s=new Map(n),o=[],u=[],l=[];for(let[e]of t)s.has(e)||u.push(e);for(let[e,t]of n)i.has(e)?i.get(e)!==t&&l.push(e):o.push(e);let a=t.map(e=>e[0]).filter(e=>s.has(e)),c=n.map(e=>e[0]).filter(e=>i.has(e)),d=!1;for(let e=0;e<a.length;e++)if(a[e]!==c[e]){d=!0;break}if(0===o.length&&0===u.length&&0===l.length&&!d)return{ok:!0};let w=Ro.mismatch;return 1===t.length&&1===u.length&&0===o.length&&(w=Ro.rowNotFound),{ok:!1,reason:w,added:o,removed:u,changed:l,reordered:d}}let au={backup:async function(e){if(!_t(e))throw console.log("woItems",e),new Error("invalid woItems");return await Uo(e,async(e,t)=>(console.log("backup...",t),{name:t,data:await e.select()}))},recover:async function(e,r,n,i=!1){if(!Qr(e))throw console.log("fp",e),new Error("fp is not exist");if(!_t(r))throw console.log("woItems",r),new Error("invalid woItems");Gr(n)||(n=null),wr(i)||(i=!1);let s=t.readFileSync(e,"utf8");s=zi(s);let o=Kr(s);if(!Er(o))throw new Error("invalid backup data, need a non-empty array");En(o,(e,t)=>{let n=De(e,"name");if(!er(n))throw new Error(`invalid backup data, rs[${t}].name is not a string`);if(!Object.prototype.hasOwnProperty.call(r,n))throw new Error(`invalid backup data, table[${n}] is not in woItems`)}),Gr(n)&&n(),await Uo(o,async e=>{console.log("recover...",e.name),i&&(console.log("needCreateStorage"),await r[e.name].createStorage());let t=null;return yi(e.data)>0&&(t=await r[e.name].insert(e.data)),t})}};var cu=$e&&$e.isRegExp,du=cu?Oe(cu):function(e){return N(e)&&"[object RegExp]"==b(e)},wu=/\w*$/;function yu(e,t){var r=30,n="...";if(v(t)){var i="separator"in t?t.separator:i;r="length"in t?dr(t.length):r,n="omission"in t?ce(t.omission):n}var s=(e=de(e)).length;if(qn(e)){var o=Xi(e);s=o.length}if(r>=s)return e;var u=r-wi(n);if(u<1)return n;var l=o?Ii(o,0,u).join(""):e.slice(0,u);if(void 0===i)return l+n;if(o&&(u+=l.length-u),du(i)){if(e.slice(u).search(i)){var a,c=l;for(i.global||(i=RegExp(i.source,de(wu.exec(i))+"g")),i.lastIndex=0;a=i.exec(c);)var d=a.index;l=l.slice(0,void 0===d?u:d)}}else if(e.indexOf(ce(i),u)!=u){var w=l.lastIndexOf(i);w>-1&&(l=l.slice(0,w))}return l+n}function gu(){if(!Gr(Di))throw new Error("invalid dayjs");return Di().format("YYYY-MM-DDTHH:mm:ss.SSSZ")}const Du=[];for(let e=0;e<256;++e)Du.push((e+256).toString(16).slice(1));const mu=new Uint8Array(16);function Mu(){return crypto.getRandomValues(mu)}const fu={};function pu(e,t,r){let n;if(e)n=Iu(e.random??e.rng?.()??Mu(),e.msecs,e.seq,t,r);else{const e=Date.now(),i=Mu();!function(e,t,r){e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=hu(r),e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++)}(fu,e,i),n=Iu(i,fu.msecs,fu.seq,t,r)}return t??function(e,t=0){return(Du[e[t+0]]+Du[e[t+1]]+Du[e[t+2]]+Du[e[t+3]]+"-"+Du[e[t+4]]+Du[e[t+5]]+"-"+Du[e[t+6]]+Du[e[t+7]]+"-"+Du[e[t+8]]+Du[e[t+9]]+"-"+Du[e[t+10]]+Du[e[t+11]]+Du[e[t+12]]+Du[e[t+13]]+Du[e[t+14]]+Du[e[t+15]]).toLowerCase()}(n)}function Iu(e,t,r,n,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(n){if(i<0||i+16>n.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`)}else n=new Uint8Array(16),i=0;return t??=Date.now(),r??=hu(e),n[i++]=t/1099511627776&255,n[i++]=t/4294967296&255,n[i++]=t/16777216&255,n[i++]=t/65536&255,n[i++]=t/256&255,n[i++]=255&t,n[i++]=112|r>>>28&15,n[i++]=r>>>20&255,n[i++]=128|r>>>14&63,n[i++]=r>>>6&255,n[i++]=r<<2&255|3&e[10],n[i++]=e[11],n[i++]=e[12],n[i++]=e[13],n[i++]=e[14],n[i++]=e[15],n}function hu(e){return(127&e[6])<<24|e[7]<<16|e[8]<<8|e[9]}function Cu(){return pu()}var Lu={exports:{}},bu={},Nu={exports:{}},Au={};function xu(){var e={"align-content":!1,"align-items":!1,"align-self":!1,"alignment-adjust":!1,"alignment-baseline":!1,all:!1,"anchor-point":!1,animation:!1,"animation-delay":!1,"animation-direction":!1,"animation-duration":!1,"animation-fill-mode":!1,"animation-iteration-count":!1,"animation-name":!1,"animation-play-state":!1,"animation-timing-function":!1,azimuth:!1,"backface-visibility":!1,background:!0,"background-attachment":!0,"background-clip":!0,"background-color":!0,"background-image":!0,"background-origin":!0,"background-position":!0,"background-repeat":!0,"background-size":!0,"baseline-shift":!1,binding:!1,bleed:!1,"bookmark-label":!1,"bookmark-level":!1,"bookmark-state":!1,border:!0,"border-bottom":!0,"border-bottom-color":!0,"border-bottom-left-radius":!0,"border-bottom-right-radius":!0,"border-bottom-style":!0,"border-bottom-width":!0,"border-collapse":!0,"border-color":!0,"border-image":!0,"border-image-outset":!0,"border-image-repeat":!0,"border-image-slice":!0,"border-image-source":!0,"border-image-width":!0,"border-left":!0,"border-left-color":!0,"border-left-style":!0,"border-left-width":!0,"border-radius":!0,"border-right":!0,"border-right-color":!0,"border-right-style":!0,"border-right-width":!0,"border-spacing":!0,"border-style":!0,"border-top":!0,"border-top-color":!0,"border-top-left-radius":!0,"border-top-right-radius":!0,"border-top-style":!0,"border-top-width":!0,"border-width":!0,bottom:!1,"box-decoration-break":!0,"box-shadow":!0,"box-sizing":!0,"box-snap":!0,"box-suppress":!0,"break-after":!0,"break-before":!0,"break-inside":!0,"caption-side":!1,chains:!1,clear:!0,clip:!1,"clip-path":!1,"clip-rule":!1,color:!0,"color-interpolation-filters":!0,"column-count":!1,"column-fill":!1,"column-gap":!1,"column-rule":!1,"column-rule-color":!1,"column-rule-style":!1,"column-rule-width":!1,"column-span":!1,"column-width":!1,columns:!1,contain:!1,content:!1,"counter-increment":!1,"counter-reset":!1,"counter-set":!1,crop:!1,cue:!1,"cue-after":!1,"cue-before":!1,cursor:!1,direction:!1,display:!0,"display-inside":!0,"display-list":!0,"display-outside":!0,"dominant-baseline":!1,elevation:!1,"empty-cells":!1,filter:!1,flex:!1,"flex-basis":!1,"flex-direction":!1,"flex-flow":!1,"flex-grow":!1,"flex-shrink":!1,"flex-wrap":!1,float:!1,"float-offset":!1,"flood-color":!1,"flood-opacity":!1,"flow-from":!1,"flow-into":!1,font:!0,"font-family":!0,"font-feature-settings":!0,"font-kerning":!0,"font-language-override":!0,"font-size":!0,"font-size-adjust":!0,"font-stretch":!0,"font-style":!0,"font-synthesis":!0,"font-variant":!0,"font-variant-alternates":!0,"font-variant-caps":!0,"font-variant-east-asian":!0,"font-variant-ligatures":!0,"font-variant-numeric":!0,"font-variant-position":!0,"font-weight":!0,grid:!1,"grid-area":!1,"grid-auto-columns":!1,"grid-auto-flow":!1,"grid-auto-rows":!1,"grid-column":!1,"grid-column-end":!1,"grid-column-start":!1,"grid-row":!1,"grid-row-end":!1,"grid-row-start":!1,"grid-template":!1,"grid-template-areas":!1,"grid-template-columns":!1,"grid-template-rows":!1,"hanging-punctuation":!1,height:!0,hyphens:!1,icon:!1,"image-orientation":!1,"image-resolution":!1,"ime-mode":!1,"initial-letters":!1,"inline-box-align":!1,"justify-content":!1,"justify-items":!1,"justify-self":!1,left:!1,"letter-spacing":!0,"lighting-color":!0,"line-box-contain":!1,"line-break":!1,"line-grid":!1,"line-height":!1,"line-snap":!1,"line-stacking":!1,"line-stacking-ruby":!1,"line-stacking-shift":!1,"line-stacking-strategy":!1,"list-style":!0,"list-style-image":!0,"list-style-position":!0,"list-style-type":!0,margin:!0,"margin-bottom":!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"marker-offset":!1,"marker-side":!1,marks:!1,mask:!1,"mask-box":!1,"mask-box-outset":!1,"mask-box-repeat":!1,"mask-box-slice":!1,"mask-box-source":!1,"mask-box-width":!1,"mask-clip":!1,"mask-image":!1,"mask-origin":!1,"mask-position":!1,"mask-repeat":!1,"mask-size":!1,"mask-source-type":!1,"mask-type":!1,"max-height":!0,"max-lines":!1,"max-width":!0,"min-height":!0,"min-width":!0,"move-to":!1,"nav-down":!1,"nav-index":!1,"nav-left":!1,"nav-right":!1,"nav-up":!1,"object-fit":!1,"object-position":!1,opacity:!1,order:!1,orphans:!1,outline:!1,"outline-color":!1,"outline-offset":!1,"outline-style":!1,"outline-width":!1,overflow:!1,"overflow-wrap":!1,"overflow-x":!1,"overflow-y":!1,padding:!0,"padding-bottom":!0,"padding-left":!0,"padding-right":!0,"padding-top":!0,page:!1,"page-break-after":!1,"page-break-before":!1,"page-break-inside":!1,"page-policy":!1,pause:!1,"pause-after":!1,"pause-before":!1,perspective:!1,"perspective-origin":!1,pitch:!1,"pitch-range":!1,"play-during":!1,position:!1,"presentation-level":!1,quotes:!1,"region-fragment":!1,resize:!1,rest:!1,"rest-after":!1,"rest-before":!1,richness:!1,right:!1,rotation:!1,"rotation-point":!1,"ruby-align":!1,"ruby-merge":!1,"ruby-position":!1,"shape-image-threshold":!1,"shape-outside":!1,"shape-margin":!1,size:!1,speak:!1,"speak-as":!1,"speak-header":!1,"speak-numeral":!1,"speak-punctuation":!1,"speech-rate":!1,stress:!1,"string-set":!1,"tab-size":!1,"table-layout":!1,"text-align":!0,"text-align-last":!0,"text-combine-upright":!0,"text-decoration":!0,"text-decoration-color":!0,"text-decoration-line":!0,"text-decoration-skip":!0,"text-decoration-style":!0,"text-emphasis":!0,"text-emphasis-color":!0,"text-emphasis-position":!0,"text-emphasis-style":!0,"text-height":!0,"text-indent":!0,"text-justify":!0,"text-orientation":!0,"text-overflow":!0,"text-shadow":!0,"text-space-collapse":!0,"text-transform":!0,"text-underline-position":!0,"text-wrap":!0,top:!1,transform:!1,"transform-origin":!1,"transform-style":!1,transition:!1,"transition-delay":!1,"transition-duration":!1,"transition-property":!1,"transition-timing-function":!1,"unicode-bidi":!1,"vertical-align":!1,visibility:!1,"voice-balance":!1,"voice-duration":!1,"voice-family":!1,"voice-pitch":!1,"voice-range":!1,"voice-rate":!1,"voice-stress":!1,"voice-volume":!1,volume:!1,"white-space":!1,widows:!1,width:!0,"will-change":!1,"word-break":!0,"word-spacing":!0,"word-wrap":!0,"wrap-flow":!1,"wrap-through":!1,"writing-mode":!1,"z-index":!1};return e}var Eu=/javascript\s*\:/gim;Au.whiteList=xu(),Au.getDefaultWhiteList=xu,Au.onAttr=function(e,t,r){},Au.onIgnoreAttr=function(e,t,r){},Au.safeAttrValue=function(e,t){return Eu.test(t)?"":t};var Tu={indexOf:function(e,t){var r,n;if(Array.prototype.indexOf)return e.indexOf(t);for(r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},forEach:function(e,t,r){var n,i;if(Array.prototype.forEach)return e.forEach(t,r);for(n=0,i=e.length;n<i;n++)t.call(r,e[n],n,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},trimRight:function(e){return String.prototype.trimRight?e.trimRight():e.replace(/(\s*$)/g,"")}};var vu=function(e,t){";"!==(e=Tu.trimRight(e))[e.length-1]&&(e+=";");var r=e.length,n=!1,i=0,s=0,o="";function u(){if(!n){var r=Tu.trim(e.slice(i,s)),u=r.indexOf(":");if(-1!==u){var l=Tu.trim(r.slice(0,u)),a=Tu.trim(r.slice(u+1));if(l){var c=t(i,o.length,l,a,r);c&&(o+=c+"; ")}}}i=s+1}for(;s<r;s++){var l=e[s];if("/"===l&&"*"===e[s+1]){var a=e.indexOf("*/",s+2);if(-1===a)break;i=(s=a+1)+1,n=!1}else"("===l?n=!0:")"===l?n=!1:";"===l?n||u():"\n"===l&&u()}return Tu.trim(o)},Su=Au,Zu=vu;function ju(e){return null==e}function Yu(e){(e=function(e){var t={};for(var r in e)t[r]=e[r];return t}(e||{})).whiteList=e.whiteList||Su.whiteList,e.onAttr=e.onAttr||Su.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||Su.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||Su.safeAttrValue,this.options=e}Yu.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,r=t.whiteList,n=t.onAttr,i=t.onIgnoreAttr,s=t.safeAttrValue;return Zu(e,function(e,t,o,u,l){var a=r[o],c=!1;if(!0===a?c=a:"function"==typeof a?c=a(u):a instanceof RegExp&&(c=a.test(u)),!0!==c&&(c=!1),u=s(o,u)){var d,w={position:t,sourcePosition:e,source:l,isWhite:c};return c?ju(d=n(o,u,w))?o+":"+u:d:ju(d=i(o,u,w))?void 0:d}})};var Xu=Yu;!function(e,t){var r=Au,n=Xu;for(var i in(t=e.exports=function(e,t){return new n(t).process(e)}).FilterCSS=n,r)t[i]=r[i];"undefined"!=typeof window&&(window.filterCSS=e.exports)}(Nu,Nu.exports);var zu=Nu.exports,Gu={indexOf:function(e,t){var r,n;if(Array.prototype.indexOf)return e.indexOf(t);for(r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1},forEach:function(e,t,r){var n,i;if(Array.prototype.forEach)return e.forEach(t,r);for(n=0,i=e.length;n<i;n++)t.call(r,e[n],n,e)},trim:function(e){return String.prototype.trim?e.trim():e.replace(/(^\s*)|(\s*$)/g,"")},spaceIndex:function(e){var t=/\s|\n|\t/.exec(e);return t?t.index:-1}},Wu=zu.FilterCSS,Ku=zu.getDefaultWhiteList,ku=Gu;function Fu(){return{a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","crossorigin","loop","muted","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],figcaption:[],figure:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height","loading"],ins:["datetime"],kbd:[],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],summary:[],sup:[],strong:[],strike:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","crossorigin","loop","muted","playsinline","poster","preload","src","height","width"]}}var Vu=new Wu;function Hu(e){return e.replace(Uu,"<").replace(Bu,">")}var Uu=/</g,Bu=/>/g,Ru=/"/g,Ou=/"/g,Pu=/&#([a-zA-Z0-9]*);?/gim,Qu=/:?/gim,Ju=/&newline;?/gim,$u=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a):/gi,_u=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,qu=/u\s*r\s*l\s*\(.*/gi;function el(e){return e.replace(Ru,""")}function tl(e){return e.replace(Ou,'"')}function rl(e){return e.replace(Pu,function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))})}function nl(e){return e.replace(Qu,":").replace(Ju," ")}function il(e){for(var t="",r=0,n=e.length;r<n;r++)t+=e.charCodeAt(r)<32?" ":e.charAt(r);return ku.trim(t)}function sl(e){return e=il(e=nl(e=rl(e=tl(e))))}function ol(e){return e=Hu(e=el(e))}bu.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","crossorigin","loop","muted","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],figcaption:[],figure:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height","loading"],ins:["datetime"],kbd:[],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],summary:[],sup:[],strong:[],strike:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","crossorigin","loop","muted","playsinline","poster","preload","src","height","width"]},bu.getDefaultWhiteList=Fu,bu.onTag=function(e,t,r){},bu.onIgnoreTag=function(e,t,r){},bu.onTagAttr=function(e,t,r){},bu.onIgnoreTagAttr=function(e,t,r){},bu.safeAttrValue=function(e,t,r,n){if(r=sl(r),"href"===t||"src"===t){if("#"===(r=ku.trim(r)))return"#";if("http://"!==r.substr(0,7)&&"https://"!==r.substr(0,8)&&"mailto:"!==r.substr(0,7)&&"tel:"!==r.substr(0,4)&&"data:image/"!==r.substr(0,11)&&"ftp://"!==r.substr(0,6)&&"./"!==r.substr(0,2)&&"../"!==r.substr(0,3)&&"#"!==r[0]&&"/"!==r[0])return""}else if("background"===t){if($u.lastIndex=0,$u.test(r))return""}else if("style"===t){if(_u.lastIndex=0,_u.test(r))return"";if(qu.lastIndex=0,qu.test(r)&&($u.lastIndex=0,$u.test(r)))return"";!1!==n&&(r=(n=n||Vu).process(r))}return r=ol(r)},bu.escapeHtml=Hu,bu.escapeQuote=el,bu.unescapeQuote=tl,bu.escapeHtmlEntities=rl,bu.escapeDangerHtml5Entities=nl,bu.clearNonPrintableCharacter=il,bu.friendlyAttrValue=sl,bu.escapeAttrValue=ol,bu.onIgnoreTagStripAll=function(){return""},bu.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var r=!Array.isArray(e),n=[],i=!1;return{onIgnoreTag:function(s,o,u){if(function(t){return!!r||-1!==ku.indexOf(e,t)}(s)){if(u.isClosing){var l="[/removed]",a=u.position+10;return n.push([!1!==i?i:u.position,a]),i=!1,l}return i||(i=u.position),"[removed]"}return t(s,o,u)},remove:function(e){var t="",r=0;return ku.forEach(n,function(n){t+=e.slice(r,n[0]),r=n[1]}),t+=e.slice(r)}}},bu.stripCommentTag=function(e){for(var t="",r=0;r<e.length;){var n=e.indexOf("\x3c!--",r);if(-1===n){t+=e.slice(r);break}t+=e.slice(r,n);var i=e.indexOf("--\x3e",n);if(-1===i)break;r=i+3}return t},bu.stripBlankChar=function(e){var t=e.split("");return(t=t.filter(function(e){var t=e.charCodeAt(0);return 127!==t&&(!(t<=31)||(10===t||13===t))})).join("")},bu.attributeWrapSign='"',bu.cssFilter=Vu,bu.getDefaultCSSWhiteList=Ku;var ul={},ll=Gu;function al(e){var t,r=ll.spaceIndex(e);return t=-1===r?e.slice(1,-1):e.slice(1,r+1),"/"===(t=ll.trim(t).toLowerCase()).slice(0,1)&&(t=t.slice(1)),"/"===t.slice(-1)&&(t=t.slice(0,-1)),t}function cl(e){return"</"===e.slice(0,2)}var dl=/[^a-zA-Z0-9\\_:.-]/gim;function wl(e,t){for(;t<e.length;t++){var r=e[t];if(" "!==r)return"="===r?t:-1}}function yl(e,t){for(;t<e.length;t++){var r=e[t];if(" "!==r)return"'"===r||'"'===r?t:-1}}function gl(e,t){for(;t>0;t--){var r=e[t];if(" "!==r)return"="===r?t:-1}}function Dl(e){return function(e){return'"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1]}(e)?e.substr(1,e.length-2):e}ul.parseTag=function(e,t,r){var n="",i=0,s=!1,o=!1,u=0,l=e.length,a="",c="";e:for(u=0;u<l;u++){var d=e.charAt(u);if(!1===s){if("<"===d){s=u;continue}}else if(!1===o){if("<"===d){n+=r(e.slice(i,u)),s=u,i=u;continue}if(">"===d||u===l-1){n+=r(e.slice(i,s)),a=al(c=e.slice(s,u+1)),n+=t(s,n.length,a,c,cl(c)),i=u+1,s=!1;continue}if('"'===d||"'"===d)for(var w=1,y=e.charAt(u-w);""===y.trim()||"="===y;){if("="===y){o=d;continue e}y=e.charAt(u-++w)}}else if(d===o){o=!1;continue}}return i<l&&(n+=r(e.substr(i))),n},ul.parseAttr=function(e,t){var r=0,n=0,i=[],s=!1,o=e.length;function u(e,r){if(!((e=(e=ll.trim(e)).replace(dl,"").toLowerCase()).length<1)){var n=t(e,r||"");n&&i.push(n)}}for(var l=0;l<o;l++){var a,c=e.charAt(l);if(!1!==s||"="!==c)if(!1===s||l!==n)if(/\s|\n|\t/.test(c)){if(e=e.replace(/\s|\n|\t/g," "),!1===s){if(-1===(a=wl(e,l))){u(ll.trim(e.slice(r,l))),s=!1,r=l+1;continue}l=a-1;continue}if(-1===(a=gl(e,l-1))){u(s,Dl(ll.trim(e.slice(r,l)))),s=!1,r=l+1;continue}}else;else{if(-1===(a=e.indexOf(c,l+1)))break;u(s,ll.trim(e.slice(n+1,a))),s=!1,r=(l=a)+1}else s=e.slice(r,l),r=l+1,n='"'===e.charAt(r)||"'"===e.charAt(r)?r:yl(e,l+1)}return r<e.length&&(!1===s?u(e.slice(r)):u(s,Dl(ll.trim(e.slice(r))))),ll.trim(i.join(" "))};var ml=zu.FilterCSS,Ml=bu,fl=ul,pl=fl.parseTag,Il=fl.parseAttr,hl=Gu;function Cl(e){return null==e}function Ll(e){(e=function(e){var t={};for(var r in e)t[r]=e[r];return t}(e||{})).stripIgnoreTag&&(e.onIgnoreTag&&console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'),e.onIgnoreTag=Ml.onIgnoreTagStripAll),e.whiteList||e.allowList?e.whiteList=function(e){var t={};for(var r in e)Array.isArray(e[r])?t[r.toLowerCase()]=e[r].map(function(e){return e.toLowerCase()}):t[r.toLowerCase()]=e[r];return t}(e.whiteList||e.allowList):e.whiteList=Ml.whiteList,this.attributeWrapSign=!0===e.singleQuotedAttributeValue?"'":Ml.attributeWrapSign,e.onTag=e.onTag||Ml.onTag,e.onTagAttr=e.onTagAttr||Ml.onTagAttr,e.onIgnoreTag=e.onIgnoreTag||Ml.onIgnoreTag,e.onIgnoreTagAttr=e.onIgnoreTagAttr||Ml.onIgnoreTagAttr,e.safeAttrValue=e.safeAttrValue||Ml.safeAttrValue,e.escapeHtml=e.escapeHtml||Ml.escapeHtml,this.options=e,!1===e.css?this.cssFilter=!1:(e.css=e.css||{},this.cssFilter=new ml(e.css))}Ll.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this,r=t.options,n=r.whiteList,i=r.onTag,s=r.onIgnoreTag,o=r.onTagAttr,u=r.onIgnoreTagAttr,l=r.safeAttrValue,a=r.escapeHtml,c=t.attributeWrapSign,d=t.cssFilter;r.stripBlankChar&&(e=Ml.stripBlankChar(e)),r.allowCommentTag||(e=Ml.stripCommentTag(e));var w=!1;r.stripIgnoreTagBody&&(w=Ml.StripTagBody(r.stripIgnoreTagBody,s),s=w.onIgnoreTag);var y=pl(e,function(e,t,r,w,y){var g={sourcePosition:e,position:t,isClosing:y,isWhite:Object.prototype.hasOwnProperty.call(n,r)},D=i(r,w,g);if(!Cl(D))return D;if(g.isWhite){if(g.isClosing)return"</"+r+">";var m=function(e){var t=hl.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var r="/"===(e=hl.trim(e.slice(t+1,-1)))[e.length-1];return r&&(e=hl.trim(e.slice(0,-1))),{html:e,closing:r}}(w),M=n[r],f=Il(m.html,function(e,t){var n=-1!==hl.indexOf(M,e),i=o(r,e,t,n);return Cl(i)?n?(t=l(r,e,t,d))?e+"="+c+t+c:e:Cl(i=u(r,e,t,n))?void 0:i:i});return w="<"+r,f&&(w+=" "+f),m.closing&&(w+=" /"),w+=">"}return Cl(D=s(r,w,g))?a(w):D},a);return w&&(y=w.remove(y)),y};var bl=Ll;!function(e,t){var r=bu,n=ul,i=bl;function s(e,t){return new i(t).process(e)}(t=e.exports=s).filterXSS=s,t.FilterXSS=i,function(){for(var e in r)t[e]=r[e];for(var i in n)t[i]=n[i]}(),"undefined"!=typeof window&&(window.filterXSS=e.exports),"undefined"!=typeof self&&"undefined"!=typeof DedicatedWorkerGlobalScope&&self instanceof DedicatedWorkerGlobalScope&&(self.filterXSS=e.exports)}(Lu,Lu.exports);var Nl=qr(Lu.exports);function Al(){return"undefined"!=typeof self?self:"undefined"!=typeof window&&void 0!==window.document?window:"undefined"!=typeof global?global:null}let xl=/<(?=[A-Za-z!/?]|$)/g;function El(e){return e.replace(xl,"<")}let Tl={getFilterXSS:function(e=Nl){if(Gr(e))return e;let t=Al(),r=De(t,"filterXSS",null);if(Gr(r))return r;let n=De(t,"xss",null);if(Gr(n))return n;throw new Error("invalid filterXSS, g.filterXSS, use script for import")},getOpt:function(e){return{escapeHtml:El,onIgnoreTagAttr:function(t,r,n,i){if("style"===r)return r+'="'+e.escapeAttrValue(n)+'"'}}}};function vl(e){let t=null,r=null;let n=function e(n){if(Array.isArray(n)){for(let t=0;t<n.length;t++)n[t]=e(n[t]);return n}if($t(n)||Lr(n)){for(let t of Object.keys(n))n[t]=e(n[t]);return n}return er(n)?(i=n,null===t&&(t=Tl.getFilterXSS(),r=Tl.getOpt(t)),t(i,r)):n;var i}(yo(e));return n}function Sl(e,t){if(!Lr(e))return[];Lr(t)||(t=[t]);let r=[];return En(e,(e,n)=>{0===De(e,"ok")&&r.push({k:n,id:De(t,[n,"id"]),err:De(e,"err","")})}),r}function Zl(e,t){var r,n,i;let s=`${e}: ${Jt(Pt((n=10,(r=t)&&r.length?pi(r,0,(n=i||void 0===n?1:dr(n))<0?0:n):[]),e=>er(e.ref)?e.ref:er(e.id)||gr(e.id)?`id[${yu(String(e.id),{length:100,omission:"…"})}]`:`data[${e.k}]`),", ")}`;return yi(t)>10&&(s+=`, ... (${yi(t)} in total)`),s}function jl(e,t){if(t.indexOf("id")<0)return!1;let r=De(e,"settings",null);if(_t(r)&&!0!==De(r,"id.pk"))return!1;let n=De(r,"id.type","")||De(e,"kpType.id","");return!(er(n)&&["STRING","TEXT","CHAR","UUID","CITEXT"].indexOf(n.split("(")[0].trim().toUpperCase())<0)}function Yl(e,t){return null!==e&&"object"==typeof e&&"string"==typeof t&&Object.prototype.hasOwnProperty.call(e,t)?void 0===e[t]?null:e[t]:null}function Xl(e){try{return Array.isArray(e)}catch(e){return!1}}function zl(e){return!Object.prototype.hasOwnProperty.call(e,"value")}function Gl(e){return"number"==typeof e&&Number.isFinite(e)}function Wl(e){return Gl(e)?String(e):e}function Kl(e,t){return Object.fromEntries(Object.keys(e).map(r=>[r,t(e[r],r)]))}const kl=Object.freeze({proto:"unsupported key[__proto__]",accessor:"unsupported accessor property",unreadable:"unreadable value",deep:"too deep",large:"too large",sparse:"unsupported sparse array",hidden:"unsupported symbol key or non-enumerable property",irregular:"unsupported irregular object or array"}),Fl="function"==typeof WeakRef?Function.prototype.call.bind(WeakRef.prototype.deref):null,Vl="function"==typeof FinalizationRegistry?Function.prototype.call.bind(FinalizationRegistry.prototype.unregister):null,Hl={};function Ul(e){let t=0;for(let r=e;null!==r;r=Object.getPrototypeOf(r))if(t++>64||u.types.isProxy(r)||Object.prototype.hasOwnProperty.call(r,Symbol.toStringTag))return!1;return!0}function Bl(e){return u.types.isMap(e)||u.types.isSet(e)||u.types.isWeakMap(e)||u.types.isWeakSet(e)||u.types.isPromise(e)||u.types.isAnyArrayBuffer(e)||u.types.isArrayBufferView(e)||u.types.isBoxedPrimitive(e)||u.types.isRegExp(e)||u.types.isNativeError(e)||u.types.isGeneratorObject(e)||u.types.isMapIterator(e)||u.types.isSetIterator(e)||u.types.isModuleNamespaceObject(e)}function Rl(e){if("object"!=typeof e||null===e||!Ul(e)||!$t(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t===Object.prototype||function(e){if(null!==Object.getPrototypeOf(e))return!1;let t=Reflect.ownKeys(Object.prototype);if(Reflect.ownKeys(e).length!==t.length)return!1;for(let r of t)if(!Object.prototype.hasOwnProperty.call(e,r))return!1;let r=Object.getOwnPropertyDescriptor(e,"constructor");if(void 0===r||"function"!=typeof r.value||u.types.isProxy(r.value))return!1;if(Function.prototype.toString.call(r.value)!==Function.prototype.toString.call(Object))return!1;let n=Object.getOwnPropertyDescriptor(r.value,"prototype");return void 0!==n&&n.value===e}(t)}function Ol(e){return"object"!=typeof e||null===e||!Ul(e)||Bl(e)?null:Array.isArray(e)?"arr":$t(e)?"obj":null}function Pl(e){if(null!==Fl)try{return Fl(e),!0}catch(e){}if(null!==Vl)try{return Vl(e,Hl),!0}catch(e){}return!1}function Ql(e,...t){try{console.log(e,...t)}catch(t){try{console.log(e,"(unprintable)")}catch(e){}}}function Jl(e,t={n:0},r=0){if(t.n>=200)return"[...]";if(t.n++,"string"==typeof e)return yu(e,{length:200});if("function"==typeof e)return"[Function]";if("symbol"==typeof e)return"[Symbol]";if("object"!=typeof e||null===e)return e;if(u.types.isProxy(e))return"[Proxy]";if(u.types.isDate(e))return"[Date]";if(Bl(e))return"[Object]";if(r>=8)return"[...]";let n=e=>void 0===e?"[empty]":zl(e)?"[Getter/Setter]":Jl(e.value,t,r+1);if(Array.isArray(e)){let t=Math.min(e.length,50),r=[];for(let i=0;i<t;i++)r.push(n(Object.getOwnPropertyDescriptor(e,i)));return e.length>t&&r.push(`[${e.length-t} more]`),r}let i=Reflect.ownKeys(e),s={};for(let t of i.slice(0,50)){let r=Object.getOwnPropertyDescriptor(e,t),i="symbol"==typeof t?String(t):t;Object.defineProperty(s,r.enumerable?i:`${i} (non-enumerable)`,{value:n(r),enumerable:!0,writable:!0,configurable:!0})}return i.length>50&&Object.defineProperty(s,"[more]",{value:i.length-50,enumerable:!0,writable:!0,configurable:!0}),s}function $l(e,t){let r;try{r=Jl(t)}catch(e){r="(unprintable)"}Ql(e,r)}function _l(e){if("object"!=typeof e||null===e)return;let t=Object.getOwnPropertyDescriptor(e,"id");return void 0!==t&&t.enumerable&&!zl(t)?t.value:void 0}const ql=["mustExist","keepUserId"];function ea(e,t){let r=e=>({err:e,mustExist:!1,keepUserId:!1});if(null==t)return{err:null,mustExist:!1,keepUserId:!1};if(!Rl(t))return r("invalid opt of procOrm, need an object");for(let e of Reflect.ownKeys(t))if(ql.indexOf(e)<0)return r("invalid opt of procOrm, unsupported key");let n={mustExist:!1,keepUserId:!1};for(let e of ql){let i=Object.getOwnPropertyDescriptor(t,e);if(void 0!==i){if(zl(i)||"boolean"!=typeof i.value)return r(`invalid opt of procOrm, ${e} needs a boolean`);n[e]=i.value}}return n.mustExist&&"save"!==e&&"del"!==e?r("invalid opt of procOrm, mustExist supports only save and del"):n.keepUserId&&"insert"!==e?r("invalid opt of procOrm, keepUserId supports only insert"):{err:null,mustExist:n.mustExist,keepUserId:n.keepUserId}}async function ta(e,t){let r=[],n=new Set;for(let e of Xl(t)?t:[t]){let t=_l(e);if(!("string"==typeof t&&""!==t||Gl(t)))return!0;n.has(String(t))||(n.add(String(t)),r.push(t))}for(let t=0;t<r.length;t+=1e3){let n=r.slice(t,t+1e3),i=await e.select({id:{$in:n}}),s=new Set(Pt(Xl(i)?i:[],e=>String(De(e,"id"))));if(n.some(e=>!s.has(String(e))))return!0}return!1}function ra(e,t){return(Xl(e)?e:[e]).some(e=>null!==e&&"object"==typeof e&&0!==e.ok&&(0===e.n||null!==t&&0===e[t]))}function na(e){let t=[],r=Array.isArray(e)?null:Object.keys(e),n=null===r?e.length:r.length;for(let i=0;i<n;i++){let n=Object.getOwnPropertyDescriptor(e,null===r?i:r[i]).value;null!==Ol(n)&&t.push(n)}return t}function ia(e,t=1/0,r=!1){try{let n=new Set,i=[e,1],s=0,o=[];for(;i.length>0;){let e,l=i.pop(),a=i.pop();if(n.has(a))continue;if(r){if("object"==typeof a&&null!==a){if(!Ul(a)||Bl(a))return"irregular";if(u.types.isDate(a)){if(Reflect.ownKeys(a).length>0)return"irregular";continue}}e=Ol(a)}else e=Array.isArray(a)?"arr":$t(a)?"obj":null;if(null===e)continue;let c="arr"===e;if(l>t)return"deep";if(n.add(a),Object.prototype.hasOwnProperty.call(a,"__proto__"))return"proto";let d=c?null:Object.keys(a);if(r&&!c){if(!Rl(a))return"irregular";if(Reflect.ownKeys(a).length!==d.length)return"hidden";o.push(a)}let w=c?a.length:d.length;for(let e=0;e<w;e++){let t=Object.getOwnPropertyDescriptor(a,c?e:d[e]);if(void 0===t)return r?"irregular":"sparse";if(zl(t))return"accessor";if(r&&c&&!t.enumerable)return"irregular";r&&(s+=c?0:d[e].length,"string"==typeof t.value&&(s+=t.value.length)),"object"==typeof t.value&&null!==t.value&&i.push(t.value,l+1)}if(r&&c&&Reflect.ownKeys(a).length!==w+1)return"irregular"}if(r&&"object"==typeof e&&null!==e){let r=function(e,t,r){let n=new Map,i=new Map,s=[{o:e,kids:na(e),i:0,d:0,n:Array.isArray(e)?0:1}];for(n.set(e,-1);s.length>0;){let e=s[s.length-1];if(s.length>t)return"deep";if(e.i<e.kids.length){let o=e.kids[e.i++],u=n.get(o);if(void 0===u)n.set(o,-1),s.push({o:o,kids:na(o),i:0,d:0,n:Array.isArray(o)?0:1});else{if(-1===u)return"deep";if(e.n+=u,e.d=Math.max(e.d,i.get(o)),e.n>r)return"large";if(s.length+i.get(o)>t)return"deep"}}else if(s.pop(),n.set(e.o,e.n),i.set(e.o,e.d+1),s.length>0){let n=s[s.length-1];if(n.n+=e.n,n.d=Math.max(n.d,e.d+1),n.n>r)return"large";if(s.length+i.get(e.o)>t)return"deep"}}return null}(e,t,1e5);if(null!==r)return r;if(s<=4e6&&"function"==typeof structuredClone){if(function(e){if("function"!=typeof structuredClone)return!1;let t;try{t=structuredClone(e)}catch(e){return!0}let r=new Set,n=[t];for(;n.length>0;){let e=n.pop();if("object"!=typeof e||null===e||r.has(e))continue;r.add(e);let t=Object.getPrototypeOf(e);if(t!==Date.prototype){if(t!==Object.prototype&&t!==Array.prototype)return!0;for(let t of Object.keys(e))n.push(e[t])}}return!1}(e))return"irregular"}else for(let e=0;e<o.length;e++)if(Pl(o[e]))return"irregular"}return null}catch(e){return"unreadable"}}function sa(e,t){try{if(void 0!==t&&"object"==typeof t&&null!==t&&u.types.isProxy(t))return`invalid find of ${e}, ${kl.irregular}`;if(void 0!==t&&!Rl(t))return`invalid find of ${e}, need an object`;let r=ia(t,64,!0);return null!==r?`invalid find of ${e}, ${kl[r]}`:null}catch(t){return`invalid find of ${e}, ${kl.unreadable}`}}function oa(e){return"function"==typeof e?!Ul(e):"object"==typeof e&&null!==e&&(!Ul(e)||Bl(e))}function ua(e,t){let r;try{r=Array.isArray(t)}catch(t){return`${e}, ${kl.irregular}`}if(!r)return null;if(!Ul(t))return`${e}, ${kl.irregular}`;let n=function(e){for(let t=0;t<e.length;t++){let r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r)return[t,"sparse"];if(zl(r))return[t,"accessor"]}return null}(t);return null!==n?Zl(`${e}, ${kl[n[1]]}`,[{k:n[0]}]):null}function la(e,t){let r=new Map,n=(e,t)=>{r.has(e)||r.set(e,[]),r.get(e).push({k:t})};if(Xl(t))for(let e=0;e<t.length;e++)try{let r=Object.getOwnPropertyDescriptor(t,e);if(void 0===r)continue;if(zl(r)){n("accessor",e);continue}let i=oa(r.value)?"irregular":ia(r.value);null!==i&&n(i,e)}catch(t){n("unreadable",e)}else{let e=oa(t)?"irregular":ia(t);null!==e&&n(e,0)}return Pt([...r],([t,r])=>Zl(`${e}, ${kl[t]}`,r))}function aa(e){let t=!Xl(e),r=Pt(t?[e]:e,e=>{let t=_l(e);return Gl(t)&&$t(e)?function(e,t){let r={};for(let n of Reflect.ownKeys(e)){let i=Object.getOwnPropertyDescriptor(e,n);i.enumerable&&Object.defineProperty(r,n,"id"===n?{value:t,writable:!0,enumerable:!0,configurable:!0}:i)}return r}(e,Wl(t)):e});return t?r[0]:r}function ca(e){return"obj"!==Ol(e)?e:Kl(e,(e,t)=>{return"id"===t?"obj"!==Ol(r=e)?Wl(r):Kl(r,(e,t)=>["$eq","$ne","$gt","$gte","$lt","$lte","$in","$nin"].indexOf(t)>=0?"arr"===Ol(e)?Pt(e,Wl):Wl(e):e):["$and","$or"].indexOf(t)>=0&&"arr"===Ol(e)?Pt(e,ca):e;var r})}function da(e){let t=[];return En(Xl(e)?e:[e],(e,r)=>{oa(e)||$t(e)||t.push({k:r})}),t}function wa(e){let t=Wl(_l(e));return er(t)?t:null}function ya(e){let t=[];return En(Xl(e)?e:[e],(e,r)=>{let n=_l(e);er(n)&&vl(n)!==n&&t.push({k:r,id:n})}),t}function ga(e,t){return Zl(`${e}, id contains HTML markup`,Pt(t,e=>({k:e.k})))}function Da(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}function ma(e,t,r,n,i="save",s=!1){if(!_t(e))throw console.log("ds",e),new Error("invalid ds");let o=e[t].keys,u=!1;Lr(n)||(u=!0,n=[n]);let l=gu();if(i.indexOf("insert")>=0&&(o.indexOf("userId")>=0&&En(n,(e,t)=>{s&&function(e){if("object"!=typeof e||null===e)return!1;let t=Object.getOwnPropertyDescriptor(e,"userId");return void 0!==t&&t.enumerable&&!zl(t)&&"string"==typeof t.value&&""!==t.value}(n[t])||Da(n[t],"userId",r)}),o.indexOf("timeCreate")>=0&&En(n,(e,t)=>{Da(n[t],"timeCreate",l)}),o.indexOf("userIdUpdate")>=0&&En(n,(e,t)=>{Da(n[t],"userIdUpdate",r)}),o.indexOf("timeUpdate")>=0&&En(n,(e,t)=>{Da(n[t],"timeUpdate",l)})),(i.indexOf("insert")>=0||i.indexOf("save")>=0)&&(o.indexOf("userIdUpdate")>=0&&En(n,(e,t)=>{Da(n[t],"userIdUpdate",r)}),o.indexOf("timeUpdate")>=0&&En(n,(e,t)=>{Da(n[t],"timeUpdate",l)})),n=Pt(n,e=>Kl(e,e=>vl(e))),jl(e[t],o)){(u?_t(n[0]):Er(n))&&En(n,e=>{er(e.id)||(e.id=Cu())})}return n=u?n[0]:n}async function Ma(e,t,r,n,i,s,o){try{return await async function(e,t,r,n,i,s,o){let u,l=null;if(!_t(t))return Promise.reject("invalid woItems");let a=Yl(t,n);if(null===a)return Promise.reject(`can not find table[${"string"==typeof n?n:""}] in ORM`);let c=function(e,t){let r=Yl(e,t),n=De(r,"keys",null);return!!Lr(n)&&jl(r,n)}(e,n),d=ea(i,o);if(null!==d.err)return Promise.reject(d.err);if("select"===i){let e=sa("select",s);if(null!==e)return $l(`${n}.select invalid find`,s),Promise.reject(e);if(u=await a.select(c?ca(s):s).catch(e=>{console.log(`${n}.select catch`,e),l="failed to select data"}),er(l))return Promise.reject(l)}else if("insert"===i||"save"===i){let t=s,o="insert"===i?"failed to insert data":"failed to save data",w=ua(o,s);if(null!==w)return console.log(`${n}.${i} invalid batch container`),Promise.reject(w);let y=da(s);if(yi(y)>0)return console.log(`${n}.${i} data is not an object`,y),Promise.reject(Zl(`${o}, not an object`,y));let g=la(o,s);if(yi(g)>0)return console.log(`${n}.${i} data has unsupported key`,g),Promise.reject(Jt(g,"; "));c&&(s=aa(s));let D=ya(s);if(yi(D)>0)return console.log(`${n}.${i} id changed by clearXSS`,D),Promise.reject(ga(o,D));try{s=ma(e,n,r,s,i,d.keepUserId)}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),l="failed to adjust data",Promise.reject(l)}if("save"===i&&d.mustExist){let e=await ta(a,s).catch(e=>{console.log(`${n}.save exist check catch`,e),l="failed to save data"});if(er(l))return Promise.reject(l);if(e)return console.log(`${n}.save row not found`),Promise.reject("rowNotFound")}if("insert"===i?u=await a.insert(s).catch(e=>{console.log(`${n}.insert catch`,e),l="failed to insert data"}):"save"===i&&(u=await(d.mustExist?a.save(s,{autoInsert:!1}):a.save(s)).catch(e=>{console.log(`${n}.save catch`,e),l="failed to save data"})),er(l))return Promise.reject(l);if("save"===i){let e=Sl(u,s);if(yi(e)>0)return console.log(`${n}.save fail`,e),Promise.reject(Zl("failed to save data",Sl(u,t)));if(d.mustExist&&ra(u,null))return console.log(`${n}.save row not found after check`),Promise.reject("rowNotFound")}u=Lr(s)?Pt(s,e=>({id:e.id})):{id:s.id}}else if("del"===i){let e=ua("failed to delete data",s);if(null!==e)return console.log(`${n}.del invalid batch container`),Promise.reject(e);if(c&&(s=aa(s)),d.mustExist){let e=function(e){let t=new Set,r=[],n=Xl(e)?e:[e];for(let e=0;e<n.length;e++){let i=_l(n[e]);if(!("string"==typeof i&&""!==i||Gl(i)))continue;let s=String(i);t.has(s)?r.push({k:e}):t.add(s)}return r}(s);if(yi(e)>0)return console.log(`${n}.del duplicate id`,e),Promise.reject(Zl("invalid input of del, duplicate id",e));let t=await ta(a,s).catch(e=>{console.log(`${n}.del exist check catch`,e),l="failed to delete data"});if(er(l))return Promise.reject(l);if(t)return console.log(`${n}.del row not found`),Promise.reject("rowNotFound")}if(u=await a.del(s).catch(e=>{console.log(`${n}.del catch`,e),l="failed to delete data"}),!er(l)){let e=Sl(u,s);yi(e)>0&&(console.log(`${n}.del fail`,e),l=Zl("failed to delete data",e))}!er(l)&&d.mustExist&&ra(u,"nDeleted")&&(console.log(`${n}.del row not found after check`),l="rowNotFound")}else if("delAll"===i){let e=sa("delAll",s);if(null!==e)return $l(`${n}.delAll invalid find`,s),Promise.reject(e);u=await a.delAll(c?ca(s):s).catch(e=>{console.log(`${n}.delAll catch`,e),l="failed to delete data"})}else if("mix"===i){if("object"!=typeof s||null===s||!Ul(s)||!_t(s))return Promise.reject("invalid input of mix, need the result object of ltdtDiffByKey");let t={};for(let e of["add","del","diff"]){let r=Object.getOwnPropertyDescriptor(s,e);if(void 0!==r&&zl(r))return Promise.reject(`invalid input of mix, ${kl.accessor}`);t[e]=void 0===r?void 0:r.value}s=t;for(let e of["add","del","diff"])if(void 0!==s[e]&&!Xl(s[e]))return Promise.reject("invalid input of mix, need the result object of ltdtDiffByKey");let i=[];for(let[e,t]of[["add","failed to insert data"],["del","failed to delete data"],["diff","failed to update data"]]){let r=ua(t,s[e]);null!==r&&i.push(r)}if(yi(i)>0)return console.log(`${n}.mix invalid batch container`),Promise.reject(Jt(i,"; "));let o=[];for(let[e,t]of[["add","failed to insert data"],["diff","failed to update data"]]){let r=da(De(s,e,[]));yi(r)>0&&(console.log(`${n}.mix ${e} data is not an object`,r),o.push(Zl(`${t}, not an object`,r)))}if(yi(o)>0)return Promise.reject(Jt(o,"; "));let d=[];for(let[e,t]of[["add","failed to insert data"],["diff","failed to update data"]])d.push(...la(t,De(s,e,[])));if(yi(d)>0)return console.log(`${n}.mix data has unsupported key`,d),Promise.reject(Jt(d,"; "));let w=function(e){let t=[];return En(e,(e,r)=>{if("object"==typeof e&&null!==e||"function"==typeof e)if(Ul(e)){if("function"!=typeof e)for(let n=e;null!==n;n=Object.getPrototypeOf(n)){let i=Object.getOwnPropertyDescriptor(n,"id");if(void 0!==i)return void(n===e&&!zl(i)&&i.enumerable||t.push({k:r}))}}else t.push({k:r})}),t}(De(s,"del",[]));if(yi(w)>0)return console.log(`${n}.mix del id is not an own data property`,w),Promise.reject(Zl(`failed to delete data, ${kl.irregular}`,w));if(c){s={...s};for(let e of["add","del","diff"])Lr(s[e])&&(s[e]=aa(s[e]))}let y=[];for(let[e,t]of[["add","failed to insert data"],["diff","failed to update data"]]){let r=ya(De(s,e,[]));yi(r)>0&&(console.log(`${n}.mix ${e} id changed by clearXSS`,r),y.push(ga(t,r)))}if(yi(y)>0)return Promise.reject(Jt(y,"; "));let g,D=function(e){let t=[];for(let[r,n]of[["add","del"],["del","diff"]]){let i=new Map;En(De(e,r,[]),(e,t)=>{let r=wa(e);null!==r&&i.set(r,[...i.get(r)||[],t])});let s=[],o=[];if(En(De(e,n,[]),(e,t)=>{let r=wa(e);null!==r&&i.has(r)&&(s=[...s,...i.get(r)],o.push(t))}),yi(o)>0){let e=[...Pt([...new Set(s)].sort((e,t)=>e-t),e=>({ref:`${r}[${e}]`})),...Pt(o,e=>({ref:`${n}[${e}]`}))];t.push(Zl(`invalid input of mix, same id in ${r} and ${n}`,e))}}return t}(s);if(yi(D)>0)return console.log(`${n}.mix same id across steps`,D),Promise.reject(Jt(D,"; "));u=[];let m=[],M=null;if(yi(De(s,"diff",[]))>0)try{M=ma(e,n,r,De(s,"diff",[]))}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),l="failed to adjust data",Promise.reject(l)}let f=De(s,"add",[]);if(yi(f)>0){try{f=ma(e,n,r,f,"insert+save")}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),l="failed to adjust data",Promise.reject(l)}if(await a.insert(f).catch(e=>{console.log(`${n}.insert catch`,e),l="failed to insert data"}),er(l))return Promise.reject(l);g=Pt(f,e=>({id:e.id})),u=[...u,...g]}let p=De(s,"del",[]);if(yi(p)>0){let e=await a.del(p).catch(e=>{console.log(`${n}.del catch`,e),l="failed to delete data"});if(er(l))return Promise.reject(l);let t=Sl(e,p);yi(t)>0&&(console.log(`${n}.del fail`,t),m.push(Zl("failed to delete data",t))),g=Pt(p,e=>({id:e.id})),u=[...u,...g]}let I=De(s,"diff",[]);if(yi(I)>0){let e=I;I=M;let t=await a.save(I).catch(e=>{console.log(`${n}.save catch`,e),l="failed to update data"});if(er(l))return Promise.reject(l);let r=Sl(t,I);yi(r)>0&&(console.log(`${n}.save fail`,r),m.push(Zl("failed to update data",Sl(t,e)))),g=Pt(I,e=>({id:e.id})),u=[...u,...g]}if(yi(m)>0)return Promise.reject(Jt(m,"; "))}else l=`invalid mode: ${i}`;if(er(l))return Promise.reject(l);return u}(e,t,r,n,i,s,o)}catch(e){return"string"==typeof e?Promise.reject(e):(Ql(`${"string"==typeof n?n:""}.${"string"==typeof i?i:""} mapOrm catch`,e),Promise.reject("failed to process input"))}}function fa(e,t){return async(r,n,i,s,o)=>Ma(e,t,r,n,i,s,o)}function pa(e,t,r,n=!1){if(!Gr(t)){let i=`${r} needs a function, but got ${typeof t}`;throw n&&e.push(()=>Promise.reject(i)),new Error(i)}setTimeout(()=>{e.push(t)},1)}function Ia(e,t={}){if(Bo(t),!Gr(e))throw new Error("invalid mapOrm");let r={funChecks:[],funPreProcessing:[],funPostProcessing:[],mapOrm:e};return{addFunCheck:e=>{pa(r.funChecks,e,"addFunCheck",!0)},addFunPreProcessing:e=>{pa(r.funPreProcessing,e,"addFunPreProcessing")},addFunPostProcessing:e=>{pa(r.funPostProcessing,e,"addFunPostProcessing")},procOrm:async(e,t,n,i,s)=>async function(e,t,r,n,i,s){let o=ea(n,s);if(null!==o.err)return Promise.reject(o.err);await Uo(e.funChecks,e=>e({woName:r,userId:t,mode:n,input:i}));for(let s of[...e.funPreProcessing]){let e=await s({woName:r,userId:t,mode:n,input:i});if(!_t(e)||void 0===e.input)return Promise.reject("invalid return of pre-processing, need an object with input");i=e.input}let u=await e.mapOrm(t,r,n,i,s);for(let s of[...e.funPostProcessing])u=await s({woName:r,userId:t,mode:n,input:i,output:u});return u}(r,e,t,n,i,s)}}function ha(e,t,r,n,i={}){Bo(i);let s=function(e,t,r,n){if(!_t(e))throw console.log("ds",e),new Error("invalid ds");if(!Gr(t))throw console.log("WOrm",t),new Error("invalid WOrm");if(!er(r))throw console.log("url",r),new Error("invalid url");if(!er(n))throw console.log("db",n),new Error("invalid db");let i={};return En(at(e),e=>{let s=new t({url:r,db:n,cl:e});Object.defineProperty(i,e,{value:s,enumerable:!0,writable:!0,configurable:!0})}),i}(e,t,r,n),o=Ia(fa(e,s),i),u=new function(){let e=new Map,t=new Map;return async(r,n)=>{let i=(e.get(r)||Promise.resolve()).then(async()=>await n(),async()=>await n());e.set(r,i.catch(()=>{})),t.set(r,(t.get(r)||0)+1);try{return await i}finally{let n=t.get(r)-1;n<=0?(t.delete(r),e.delete(r)):t.set(r,n)}}},l=async(e,t)=>{let r=function(e,t,r){if(!Array.isArray(t)||0===t.length)throw new Error("invalid tableNames of withTabLocks, need a non-empty array of table names");for(let r of t)if("string"!=typeof r||!Object.prototype.hasOwnProperty.call(e,r))throw new Error("invalid tableNames of withTabLocks, need own table names of this instance");if(!Gr(r))throw new Error("invalid fn of withTabLocks, need a function");return[...new Set(t)].sort()}(s,e,t),n=t;for(let e=r.length-1;e>=0;e--){let t=n,i=r[e];n=()=>u(i,t)}return n()};return{...au,woItems:s,closeAll:async()=>{await Uo(s,async e=>{e&&Gr(e.close)&&await e.close()})},withTabLocks:l,guardWrite:async e=>{if(null===e||"object"!=typeof e)throw new Error("invalid input of guardWrite, need an object");let{tables:t,read:r,baseline:n,contract:i,write:s}=e;if(!Gr(r))throw new Error("invalid read of guardWrite, need a function");if(!Gr(s))throw new Error("invalid write of guardWrite, need a function");let o=void 0!==n;if((o||void 0!==i)&&(eu(i),"string"==typeof i.table&&!(Array.isArray(t)&&t.indexOf(i.table)>=0)))throw new Error("invalid tables of guardWrite, need to contain contract.table");return l(t,async()=>{let e=await r();if(!Array.isArray(e))throw new Error("invalid rows of guardWrite, read needs to resolve an array");if(o){let t=lu(e,n,i);if(!t.ok)throw function(e){let t=new Error(e.reason);return t.key=e.reason,t.added=e.added,t.removed=e.removed,t.changed=e.changed,t.reordered=e.reordered,t}(t)}return await s(e)})},...o}}function Ca(e,t,r=""){if(!Er(t))return{};let n={};return En(t,function(t){n[t]=De(e,t,r)}),n}function La(e,t){if(!$t(e))return{};if(!Er(t))return{};let r={};return En(t,function(t){un(e,t)&&(r[t]=De(e,t))}),r}let ba="grups",Na={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"名稱",type:"STRING"},description:{name:"說明",type:"TEXT"},from:{name:"來源",type:"STRING"},srcKey:{name:"來源鍵",type:"STRING"},cpemis:{name:"權限清單",type:"TEXT"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"}},Aa=(e={})=>{let t=Ca(e,at(Na));return t.id=`${Cu()}`,t.userIdUpdate=t.userId,t.timeCreate=gu(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t},xa="pemis",Ea={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"名稱",type:"STRING"},description:{name:"說明",type:"TEXT"},from:{name:"來源",type:"STRING"},srcKey:{name:"來源鍵",type:"STRING"},crules:{name:"管控對象清單",type:"TEXT"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"}},Ta=(e={})=>{let t=Ca(e,at(Ea));return t.id=`${Cu()}`,t.userIdUpdate=t.userId,t.timeCreate=gu(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t},va="targets",Sa={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},description:{name:"說明",type:"TEXT"},from:{name:"來源",type:"STRING"},srcKey:{name:"來源鍵",type:"STRING"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"}},Za=(e={})=>{let t=Ca(e,at(Sa));return t.id=`${Cu()}`,t.userIdUpdate=t.userId,t.timeCreate=gu(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t},ja="users",Ya={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"姓名",type:"STRING"},email:{name:"電子郵件",type:"STRING"},description:{name:"描述",type:"TEXT"},from:{name:"來源",type:"STRING"},srcKey:{name:"來源鍵",type:"STRING"},cgrups:{name:"權限群組清單",type:"TEXT"},isAdmin:{name:"是否為系統管理員",type:"STRING"},userId:{name:"創建使用者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},Xa=(e={})=>{let t=Ca(e,at(Ya));return t.id=`${Cu()}`,t.isAdmin="n",t.userIdUpdate=t.userId,t.timeCreate=gu(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t};function za(e,t={}){let r=De(t,"useCreateStorage");wr(r)||(r=!1);let{keyTable:n,tableNameCht:i,tableNameEng:s,settings:o,parser:u,funNew:l,funTest:a,ext:c}=e;if(!er(n))throw new Error(`invalid keyTable[${n}]`);if(er(i)||(i=n),er(s)||(s=n),!_t(o))throw new Error("invalid settings");_t(c)||(c=null),_t(u)||(u=null),Gr(l)||(l=null);let d=null;Gr(a)&&(d=async e=>{if(!_t(e))throw new Error("invalid wo");if(!un(e,n))throw console.log(e),new Error(`keyTable[${n}] is not in wo`);let t=[];try{t=a(),Wr(t)&&(t=await t)}catch(e){throw console.log(`keyTable[${n}] funTest catch`,e),new Error(e)}if(0===yi(t))return;r&&await e[n].createStorage();let i=Sl(await e[n].save(t),t);if(yi(i)>0)throw new Error(`failed to write test data into table[${n}]: ${JSON.stringify(i)}`);return t});let w={},y={};return En(at(o),e=>{let t=De(o,`${e}.name`,"");er(t)&&(w[e]=t);let r=De(o,`${e}.type`,"");er(r)&&(y[e]=r)}),{...e,keyTable:n,tableNameCht:i,tableNameEng:s,settings:o,keys:at(o),kpType:y,kpHead:w,parser:u,funNew:l,funTest:a,funTestAndSave:d,ext:c}}let Ga={grups:{keyTable:ba,tableNameCht:"權限群組設定",tableNameEng:"Permission groups",settings:Na,funNew:Aa,funTest:()=>{let e=[["權限群組M1","\n {\n '權限P1': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P2': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n }\n "],["權限群組M2","\n {\n '權限P2': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P3': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n }\n "],["權限群組M3","\n {\n '權限P2': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P3': {\n 'mode': 'AND',\n 'isActive': 'y',\n },\n }\n "],["權限群組M4","\n {\n '權限P3': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n '權限P4': {\n 'mode': 'OR',\n 'isActive': 'y',\n },\n }\n "]];return e=Pt(e,([e,t],r)=>{let n=Aa({userId:"id-for-admin",order:r,name:e,description:`${e}的說明`,cpemis:t});return n.id=`id-for-${e}`,n=La(n,at(Na)),n}),console.log(`已產生: ${ba} 測試資料`,e),e}},pemis:{keyTable:xa,tableNameCht:"權限設定",tableNameEng:"Permissions",settings:Ea,funNew:Ta,funTest:()=>{let e=[["權限P1","{ \"專案A/頁A/區塊A\": 'y', \"專案A/頁B/區塊A\": 'n', \"專案A/頁C\": 'n' }"],["權限P2","{ \"專案A/頁C\": 'y', \"專案B/頁A/區塊A\": 'y', \"專案B/頁A/區塊B\": 'y' }"],["權限P3","{ \"專案A/頁C\": 'y', \"專案B/頁A/區塊A\": 'n', \"專案B/頁A/區塊B\": 'y', \"專案B/頁A/區塊C\": 'y' }"],["權限P4","{ \"專案B/頁B/區塊A/待辦事項清單\": 'y', \"專案B/頁B/區塊B/顯示後台按鈕\": 'n' }"]];return e=Pt(e,([e,t],r)=>{let n=Ta({userId:"id-for-admin",order:r,name:e,description:`${e}的說明`,crules:t});return n.id=`id-for-${e}`,n=La(n,at(Ea)),n}),console.log(`已產生: ${xa} 測試資料`,e),e}},targets:{keyTable:va,tableNameCht:"管控對象",tableNameEng:"Targets",settings:Sa,funNew:Za,funTest:()=>{let e=["專案A/頁A/區塊A","專案A/頁A/區塊A/執行按鈕","專案A/頁A/區塊A/分析按鈕","專案A/頁B/區塊A","專案A/頁B/區塊A/執行按鈕","專案A/頁B/區塊A/分析按鈕","專案A/頁B/區塊B/展開按鈕","專案A/頁B/區塊B/下載按鈕","專案A/頁C","專案B/頁A/區塊A","專案B/頁A/區塊A/顯示綜合報表","專案B/頁A/區塊A/顯示當前數據","專案B/頁A/區塊B","專案B/頁A/區塊B/下載報表按鈕","專案B/頁A/區塊B/下載數據按鈕","專案B/頁A/區塊C","專案B/頁B/區塊A","專案B/頁B/區塊A/待辦事項清單","專案B/頁B/區塊A/相關資源清單","專案B/頁B/區塊B","專案B/頁B/區塊B/顯示後台按鈕","專案B/頁B/區塊B/轉跳主站按鈕"];return e=Pt(e,(e,t)=>{let r=Za({userId:"id-for-admin",order:t,description:`${e}的說明`});return r.id=e,r=La(r,at(Sa)),r}),console.log(`已產生: ${va} 測試資料`,e),e}},users:{keyTable:ja,tableNameCht:"使用者",tableNameEng:"Users",settings:Ya,funNew:Xa,funTest:()=>{let e=[["peter","","\n { \n '權限群組M1': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","n"],["mary","","\n { \n '權限群組M2': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","n"],["john","","\n { \n '權限群組M3': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","n"],["admin","","\n { \n '權限群組M4': {\n 'mode': 'OR',\n 'isActive': 'y',\n }\n }\n ","y"]];return e=Pt(e,([e,t,r,n],i)=>{let s=Xa({userId:"id-for-admin",order:i,name:e,email:`${e}@example.com`,from:t,cgrups:r,isAdmin:n});return s.id=`id-for-${e}`,s.isAdmin=n,s=La(s,at(Ya)),s}),console.log(`已產生: ${ja} 測試資料`,e),e}}},Wa={};for(let e in Ga)Wa[e]=za(Ga[e],{useCreateStorage:!1});var Ka={exports:{}};!function(e){e.exports=function(){function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t=e(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),r=e(function(e){var t=e.exports={version:"2.6.5"};"number"==typeof __e&&(__e=t)});r.version;var n=function(e){return"object"==typeof e?null!==e:"function"==typeof e},i=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e},s=function(e){try{return!!e()}catch(e){return!0}},o=!s(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),u=t.document,l=n(u)&&n(u.createElement),a=function(e){return l?u.createElement(e):{}},c=!o&&!s(function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}),d=function(e,t){if(!n(e))return e;var r,i;if(t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;if("function"==typeof(r=e.valueOf)&&!n(i=r.call(e)))return i;if(!t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;throw TypeError("Can't convert object to primitive value")},w=Object.defineProperty,y={f:o?Object.defineProperty:function(e,t,r){if(i(e),t=d(t,!0),i(r),c)try{return w(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},D=o?function(e,t,r){return y.f(e,t,g(1,r))}:function(e,t,r){return e[t]=r,e},m={}.hasOwnProperty,M=function(e,t){return m.call(e,t)},f=0,p=Math.random(),I=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++f+p).toString(36))},h=e(function(e){var n="__core-js_shared__",i=t[n]||(t[n]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),C=h("native-function-to-string",Function.toString),L=e(function(e){var n=I("src"),i="toString",s=(""+C).split(i);r.inspectSource=function(e){return C.call(e)},(e.exports=function(e,r,i,o){var u="function"==typeof i;u&&(M(i,"name")||D(i,"name",r)),e[r]!==i&&(u&&(M(i,n)||D(i,n,e[r]?""+e[r]:s.join(String(r)))),e===t?e[r]=i:o?e[r]?e[r]=i:D(e,r,i):(delete e[r],D(e,r,i)))})(Function.prototype,i,function(){return"function"==typeof this&&this[n]||C.call(this)})}),b=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},N=function(e,t,r){if(b(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,i){return e.call(t,r,n,i)}}return function(){return e.apply(t,arguments)}},A="prototype",x=function(e,n,i){var s,o,u,l,a=e&x.F,c=e&x.G,d=e&x.S,w=e&x.P,y=e&x.B,g=c?t:d?t[n]||(t[n]={}):(t[n]||{})[A],m=c?r:r[n]||(r[n]={}),M=m[A]||(m[A]={});for(s in c&&(i=n),i)u=((o=!a&&g&&void 0!==g[s])?g:i)[s],l=y&&o?N(u,t):w&&"function"==typeof u?N(Function.call,u):u,g&&L(g,s,u,e&x.U),m[s]!=u&&D(m,s,l),w&&M[s]!=u&&(M[s]=u)};t.core=r,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128;var E,T=x,v=Math.ceil,S=Math.floor,Z=function(e){return isNaN(e=+e)?0:(e>0?S:v)(e)},j=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},Y=(E=!1,function(e,t){var r,n,i=String(j(e)),s=Z(t),o=i.length;return s<0||s>=o?E?"":void 0:(r=i.charCodeAt(s))<55296||r>56319||s+1===o||(n=i.charCodeAt(s+1))<56320||n>57343?E?i.charAt(s):r:E?i.slice(s,s+2):n-56320+(r-55296<<10)+65536});T(T.P,"String",{codePointAt:function(e){return Y(this,e)}}),r.String.codePointAt;var X=Math.max,z=Math.min,G=function(e,t){return(e=Z(e))<0?X(e+t,0):z(e,t)},W=String.fromCharCode,K=String.fromCodePoint;T(T.S+T.F*(!!K&&1!=K.length),"String",{fromCodePoint:function(e){for(var t,r=arguments,n=[],i=arguments.length,s=0;i>s;){if(t=+r[s++],G(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?W(t):W(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}}),r.String.fromCodePoint;var k,F,V,H,U,B,R,O,P,Q,J,$,_,q,ee={Space_Separator:/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ID_Start:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,ID_Continue:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},te={isSpaceSeparator:function(e){return"string"==typeof e&&ee.Space_Separator.test(e)},isIdStartChar:function(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||"$"===e||"_"===e||ee.ID_Start.test(e))},isIdContinueChar:function(e){return"string"==typeof e&&(e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"$"===e||"_"===e||""===e||""===e||ee.ID_Continue.test(e))},isDigit:function(e){return"string"==typeof e&&/[0-9]/.test(e)},isHexDigit:function(e){return"string"==typeof e&&/[0-9A-Fa-f]/.test(e)}},re=function(e,t){k=String(e),F="start",V=[],H=0,U=1,B=0,R=void 0,O=void 0,P=void 0;do{R=ie(),ye[F]()}while("eof"!==R.type);return"function"==typeof t?ne({"":P},"",t):P};function ne(e,t,r){var n=e[t];if(null!=n&&"object"==typeof n)if(Array.isArray(n))for(var i=0;i<n.length;i++){var s=String(i),o=ne(n,s,r);void 0===o?delete n[s]:Object.defineProperty(n,s,{value:o,writable:!0,enumerable:!0,configurable:!0})}else for(var u in n){var l=ne(n,u,r);void 0===l?delete n[u]:Object.defineProperty(n,u,{value:l,writable:!0,enumerable:!0,configurable:!0})}return r.call(e,t,n)}function ie(){for(Q="default",J="",$=!1,_=1;;){q=se();var e=ue[Q]();if(e)return e}}function se(){if(k[H])return String.fromCodePoint(k.codePointAt(H))}function oe(){var e=se();return"\n"===e?(U++,B=0):e?B+=e.length:B++,e&&(H+=e.length),e}var ue={default:function(){switch(q){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void oe();case"/":return oe(),void(Q="comment");case void 0:return oe(),le("eof")}if(!te.isSpaceSeparator(q))return ue[F]();oe()},comment:function(){switch(q){case"*":return oe(),void(Q="multiLineComment");case"/":return oe(),void(Q="singleLineComment")}throw me(oe())},multiLineComment:function(){switch(q){case"*":return oe(),void(Q="multiLineCommentAsterisk");case void 0:throw me(oe())}oe()},multiLineCommentAsterisk:function(){switch(q){case"*":return void oe();case"/":return oe(),void(Q="default");case void 0:throw me(oe())}oe(),Q="multiLineComment"},singleLineComment:function(){switch(q){case"\n":case"\r":case"\u2028":case"\u2029":return oe(),void(Q="default");case void 0:return oe(),le("eof")}oe()},value:function(){switch(q){case"{":case"[":return le("punctuator",oe());case"n":return oe(),ae("ull"),le("null",null);case"t":return oe(),ae("rue"),le("boolean",!0);case"f":return oe(),ae("alse"),le("boolean",!1);case"-":case"+":return"-"===oe()&&(_=-1),void(Q="sign");case".":return J=oe(),void(Q="decimalPointLeading");case"0":return J=oe(),void(Q="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return J=oe(),void(Q="decimalInteger");case"I":return oe(),ae("nfinity"),le("numeric",1/0);case"N":return oe(),ae("aN"),le("numeric",NaN);case'"':case"'":return $='"'===oe(),J="",void(Q="string")}throw me(oe())},identifierNameStartEscape:function(){if("u"!==q)throw me(oe());oe();var e=we();switch(e){case"$":case"_":break;default:if(!te.isIdStartChar(e))throw fe()}J+=e,Q="identifierName"},identifierName:function(){switch(q){case"$":case"_":case"":case"":return void(J+=oe());case"\\":return oe(),void(Q="identifierNameEscape")}if(!te.isIdContinueChar(q))return le("identifier",J);J+=oe()},identifierNameEscape:function(){if("u"!==q)throw me(oe());oe();var e=we();switch(e){case"$":case"_":case"":case"":break;default:if(!te.isIdContinueChar(e))throw fe()}J+=e,Q="identifierName"},sign:function(){switch(q){case".":return J=oe(),void(Q="decimalPointLeading");case"0":return J=oe(),void(Q="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return J=oe(),void(Q="decimalInteger");case"I":return oe(),ae("nfinity"),le("numeric",_*(1/0));case"N":return oe(),ae("aN"),le("numeric",NaN)}throw me(oe())},zero:function(){switch(q){case".":return J+=oe(),void(Q="decimalPoint");case"e":case"E":return J+=oe(),void(Q="decimalExponent");case"x":case"X":return J+=oe(),void(Q="hexadecimal")}return le("numeric",0*_)},decimalInteger:function(){switch(q){case".":return J+=oe(),void(Q="decimalPoint");case"e":case"E":return J+=oe(),void(Q="decimalExponent")}if(!te.isDigit(q))return le("numeric",_*Number(J));J+=oe()},decimalPointLeading:function(){if(te.isDigit(q))return J+=oe(),void(Q="decimalFraction");throw me(oe())},decimalPoint:function(){switch(q){case"e":case"E":return J+=oe(),void(Q="decimalExponent")}return te.isDigit(q)?(J+=oe(),void(Q="decimalFraction")):le("numeric",_*Number(J))},decimalFraction:function(){switch(q){case"e":case"E":return J+=oe(),void(Q="decimalExponent")}if(!te.isDigit(q))return le("numeric",_*Number(J));J+=oe()},decimalExponent:function(){switch(q){case"+":case"-":return J+=oe(),void(Q="decimalExponentSign")}if(te.isDigit(q))return J+=oe(),void(Q="decimalExponentInteger");throw me(oe())},decimalExponentSign:function(){if(te.isDigit(q))return J+=oe(),void(Q="decimalExponentInteger");throw me(oe())},decimalExponentInteger:function(){if(!te.isDigit(q))return le("numeric",_*Number(J));J+=oe()},hexadecimal:function(){if(te.isHexDigit(q))return J+=oe(),void(Q="hexadecimalInteger");throw me(oe())},hexadecimalInteger:function(){if(!te.isHexDigit(q))return le("numeric",_*Number(J));J+=oe()},string:function(){switch(q){case"\\":return oe(),void(J+=ce());case'"':return $?(oe(),le("string",J)):void(J+=oe());case"'":return $?void(J+=oe()):(oe(),le("string",J));case"\n":case"\r":throw me(oe());case"\u2028":case"\u2029":pe(q);break;case void 0:throw me(oe())}J+=oe()},start:function(){switch(q){case"{":case"[":return le("punctuator",oe())}Q="value"},beforePropertyName:function(){switch(q){case"$":case"_":return J=oe(),void(Q="identifierName");case"\\":return oe(),void(Q="identifierNameStartEscape");case"}":return le("punctuator",oe());case'"':case"'":return $='"'===oe(),void(Q="string")}if(te.isIdStartChar(q))return J+=oe(),void(Q="identifierName");throw me(oe())},afterPropertyName:function(){if(":"===q)return le("punctuator",oe());throw me(oe())},beforePropertyValue:function(){Q="value"},afterPropertyValue:function(){switch(q){case",":case"}":return le("punctuator",oe())}throw me(oe())},beforeArrayValue:function(){if("]"===q)return le("punctuator",oe());Q="value"},afterArrayValue:function(){switch(q){case",":case"]":return le("punctuator",oe())}throw me(oe())},end:function(){throw me(oe())}};function le(e,t){return{type:e,value:t,line:U,column:B}}function ae(e){for(var t=0,r=e;t<r.length;t+=1){var n=r[t];if(se()!==n)throw me(oe());oe()}}function ce(){switch(se()){case"b":return oe(),"\b";case"f":return oe(),"\f";case"n":return oe(),"\n";case"r":return oe(),"\r";case"t":return oe(),"\t";case"v":return oe(),"\v";case"0":if(oe(),te.isDigit(se()))throw me(oe());return"\0";case"x":return oe(),de();case"u":return oe(),we();case"\n":case"\u2028":case"\u2029":return oe(),"";case"\r":return oe(),"\n"===se()&&oe(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw me(oe())}return oe()}function de(){var e="",t=se();if(!te.isHexDigit(t))throw me(oe());if(e+=oe(),t=se(),!te.isHexDigit(t))throw me(oe());return e+=oe(),String.fromCodePoint(parseInt(e,16))}function we(){for(var e="",t=4;t-- >0;){var r=se();if(!te.isHexDigit(r))throw me(oe());e+=oe()}return String.fromCodePoint(parseInt(e,16))}var ye={start:function(){if("eof"===R.type)throw Me();ge()},beforePropertyName:function(){switch(R.type){case"identifier":case"string":return O=R.value,void(F="afterPropertyName");case"punctuator":return void De();case"eof":throw Me()}},afterPropertyName:function(){if("eof"===R.type)throw Me();F="beforePropertyValue"},beforePropertyValue:function(){if("eof"===R.type)throw Me();ge()},beforeArrayValue:function(){if("eof"===R.type)throw Me();"punctuator"!==R.type||"]"!==R.value?ge():De()},afterPropertyValue:function(){if("eof"===R.type)throw Me();switch(R.value){case",":return void(F="beforePropertyName");case"}":De()}},afterArrayValue:function(){if("eof"===R.type)throw Me();switch(R.value){case",":return void(F="beforeArrayValue");case"]":De()}},end:function(){}};function ge(){var e;switch(R.type){case"punctuator":switch(R.value){case"{":e={};break;case"[":e=[]}break;case"null":case"boolean":case"numeric":case"string":e=R.value}if(void 0===P)P=e;else{var t=V[V.length-1];Array.isArray(t)?t.push(e):Object.defineProperty(t,O,{value:e,writable:!0,enumerable:!0,configurable:!0})}if(null!==e&&"object"==typeof e)V.push(e),F=Array.isArray(e)?"beforeArrayValue":"beforePropertyName";else{var r=V[V.length-1];F=null==r?"end":Array.isArray(r)?"afterArrayValue":"afterPropertyValue"}}function De(){V.pop();var e=V[V.length-1];F=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}function me(e){return he(void 0===e?"JSON5: invalid end of input at "+U+":"+B:"JSON5: invalid character '"+Ie(e)+"' at "+U+":"+B)}function Me(){return he("JSON5: invalid end of input at "+U+":"+B)}function fe(){return he("JSON5: invalid identifier character at "+U+":"+(B-=5))}function pe(e){console.warn("JSON5: '"+Ie(e)+"' in strings is not valid ECMAScript; consider escaping")}function Ie(e){var t={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(t[e])return t[e];if(e<" "){var r=e.charCodeAt(0).toString(16);return"\\x"+("00"+r).substring(r.length)}return e}function he(e){var t=new SyntaxError(e);return t.lineNumber=U,t.columnNumber=B,t}var Ce=function(e,t,r){var n,i,s,o=[],u="",l="";if(null==t||"object"!=typeof t||Array.isArray(t)||(r=t.space,s=t.quote,t=t.replacer),"function"==typeof t)i=t;else if(Array.isArray(t)){n=[];for(var a=0,c=t;a<c.length;a+=1){var d=c[a],w=void 0;"string"==typeof d?w=d:("number"==typeof d||d instanceof String||d instanceof Number)&&(w=String(d)),void 0!==w&&n.indexOf(w)<0&&n.push(w)}}return r instanceof Number?r=Number(r):r instanceof String&&(r=String(r)),"number"==typeof r?r>0&&(r=Math.min(10,Math.floor(r)),l=" ".substr(0,r)):"string"==typeof r&&(l=r.substr(0,10)),y("",{"":e});function y(e,t){var r=t[e];switch(null!=r&&("function"==typeof r.toJSON5?r=r.toJSON5(e):"function"==typeof r.toJSON&&(r=r.toJSON(e))),i&&(r=i.call(t,e,r)),r instanceof Number?r=Number(r):r instanceof String?r=String(r):r instanceof Boolean&&(r=r.valueOf()),r){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof r?g(r):"number"==typeof r?String(r):"object"==typeof r?Array.isArray(r)?M(r):D(r):void 0}function g(e){for(var t={"'":.1,'"':.2},r={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},n="",i=0;i<e.length;i++){var o=e[i];switch(o){case"'":case'"':t[o]++,n+=o;continue;case"\0":if(te.isDigit(e[i+1])){n+="\\x00";continue}}if(r[o])n+=r[o];else if(o<" "){var u=o.charCodeAt(0).toString(16);n+="\\x"+("00"+u).substring(u.length)}else n+=o}var l=s||Object.keys(t).reduce(function(e,r){return t[e]<t[r]?e:r});return l+(n=n.replace(new RegExp(l,"g"),r[l]))+l}function D(e){if(o.indexOf(e)>=0)throw TypeError("Converting circular structure to JSON5");o.push(e);var t=u;u+=l;for(var r,i,s=[],a=0,c=n||Object.keys(e);a<c.length;a+=1){var d=c[a],w=y(d,e);if(void 0!==w){var g=m(d)+":";""!==l&&(g+=" "),g+=w,s.push(g)}}if(0===s.length)r="{}";else if(""===l)r="{"+(i=s.join(","))+"}";else{var D=",\n"+u;i=s.join(D),r="{\n"+u+i+",\n"+t+"}"}return o.pop(),u=t,r}function m(e){if(0===e.length)return g(e);var t=String.fromCodePoint(e.codePointAt(0));if(!te.isIdStartChar(t))return g(e);for(var r=t.length;r<e.length;r++)if(!te.isIdContinueChar(String.fromCodePoint(e.codePointAt(r))))return g(e);return e}function M(e){if(o.indexOf(e)>=0)throw TypeError("Converting circular structure to JSON5");o.push(e);var t=u;u+=l;for(var r,n=[],i=0;i<e.length;i++){var s=y(String(i),e);n.push(void 0!==s?s:"null")}if(0===n.length)r="[]";else if(""===l)r="["+n.join(",")+"]";else{var a=",\n"+u,c=n.join(a);r="[\n"+u+c+",\n"+t+"]"}return o.pop(),u=t,r}},Le={parse:re,stringify:Ce},be=Le,Ne=be;return Ne}()}(Ka);var ka=qr(Ka.exports);function Fa(e,t){var r=[];return Rt(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r}function Va(e,t){return(y(e)?Ee:Fa)(e,Vt(t))}var Ha=M?M.isConcatSpreadable:void 0;function Ua(e){return y(e)||We(e)||!!(Ha&&e&&e[Ha])}function Ba(e,t,r,n,i){var s=-1,o=e.length;for(r||(r=Ua),i||(i=[]);++s<o;){var u=e[s];t>0&&r(u)?t>1?Ba(u,t-1,r,n,i):Ae(i,u):n||(i[i.length]=u)}return i}function Ra(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=e==e,s=A(e),o=void 0!==t,u=null===t,l=t==t,a=A(t);if(!u&&!a&&!s&&e>t||s&&o&&l&&!u&&!a||n&&o&&l||!r&&l||!i)return 1;if(!n&&!s&&!a&&e<t||a&&r&&i&&!n&&!s||u&&r&&i||!o&&i||!l)return-1}return 0}function Oa(e,t,r){t=t.length?ue(t,function(e){return y(e)?function(t){return ge(t,1===e.length?e[0]:e)}:e}):[Kt];var n=-1;return t=ue(t,Oe(Vt)),function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}(Ot(e,function(e,r,i){return{criteria:ue(t,function(t){return t(e)}),index:++n,value:e}}),function(e,t){return function(e,t,r){for(var n=-1,i=e.criteria,s=t.criteria,o=i.length,u=r.length;++n<o;){var l=Ra(i[n],s[n]);if(l)return n>=u?l:l*("desc"==r[n]?-1:1)}return e.index-t.index}(e,t,r)})}var Pa=Us(function(e,t){if(null==e)return[];var r=t.length;return r>1&&Bs(e,t[0],t[1])?t=[]:r>2&&Bs(t[0],t[1],t[2])&&(t=[t[0]]),Oa(e,Ba(t,1),[])});function Qa(e,t){if(Array.isArray(e))for(let r=0,n=e.length;r<n&&!1!==t(e[r],r,e);r++);else if(null!==e&&"object"==typeof e){let r=Object.keys(e);for(let n=0;n<r.length;n++){let i=r[n];if(!1===t(e[i],i,e))break}}return e}function Ja(e,t,r){return null!==e&&"object"==typeof e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:r}function $a(e){try{return`${e}`}catch(e){return null}}function _a(e,t){let r=[];if(!Array.isArray(e))return r;for(let n=0;n<e.length;n++){let i=e[n];(null==i||void 0===i.name?"":i.name)===t&&r.push(i)}return r}function qa(e,t,r,n){let i=e=>{let t=Object.create(null);try{t=ka.parse(e)}catch(t){console.log("c",e),console.log(t)}let r=[];try{r=function(e){let t=[],r=Array.isArray(e);return Qa(e,(e,n)=>{let i={name:n};_t(e)?(i={...i,...e},r||(i.name=n)):i={...i,isActive:e},t.push(i)}),t}(t)}catch(r){console.log("c",e),console.log("kp",t),console.log(r)}return r},s=(e,t)=>{let r=Object.create(null);return En([e,t],n=>{Qa(n,(n,i)=>{r[i]="y"===Ja(e,i)&&"y"===Ja(t,i)?"y":"n"})}),r},o=e=>{if(0===yi(e))return Object.create(null);let t=e[0];for(let r=1;r<e.length;r++)t=s(t,e[r]);return t},u=e=>{let t=Object.create(null);return En(e,e=>{let r=$a(e.name);if(null===r)return!0;t[r]=un(t,r)?"y"===t[r]&&"y"===e.isActive?"y":"n":e.isActive}),t},l=e=>{let t=[];return Qa(e,(e,r)=>{t.push({name:r,isActive:e})}),t},a=e=>{let t=[];if(En(e,e=>{let r=De(e,"mode",""),n="OR"===r?"OR":"AND";let i=!function(e){return"OR"===e||"AND"===e}(r),s=u(De(e,"rules",[]));t.push({mode:n,lim:i,kpRule:s})}),0===yi(Va(t,{lim:!1})))return[];let r=Va(t,{mode:"OR"}),n=Va(t,{mode:"AND"}),i=Va(n,{lim:!1}),o=null;return yi(r)>0?o=De(r,"0.kpRule"):yi(i)>0&&(o=De(i,"0.kpRule")),En(r,e=>{let t=De(e,"kpRule",{});o=((e,t)=>{let r=Object.create(null);return En([e,t],e=>{Qa(e,(e,t)=>{un(r,t)||(r[t]="n"),"y"===r[t]||"y"===e?r[t]="y":r[t]="n"})}),r})(o,t)}),En(n,(e,t)=>{let r=De(e,"kpRule",{});o=s(o,r)}),l(o)},c=De(e,"cgrups",""),d=Va(i(c),{isActive:"y"}),w=[],y=[];{let e=[];En(d,n=>{let s=_a(t,n.name),c=Pt(s,e=>(e=>{let t=De(e,"cpemis",""),n=Va(i(t),{isActive:"y"}),s=[],c=[];return En(n,e=>{let t=_a(r,e.name),n=Pt(t,e=>i(De(e,"crules",""))),a=Pt(n,e=>u(e));s.push({mode:e.mode,rules:l(o(a))}),yi(t)>0&&c.push({...e,data:{...t[0],_rules:n[0]}})}),{rules:a(s),pemisTree:c}})(e)),d=Pt(c,e=>u(e.rules));e.push({mode:n.mode,rules:l(o(d))}),yi(s)>0&&w.push({...n,data:{...s[0],_pemis:c[0].pemisTree}})}),y=a(e)}{let e=Object.create(null);En(y,t=>{e[t.name]=t.isActive});let t=[];En(n,r=>{t.push({name:r.id,isActive:Ja(e,r.id,"n")})}),y=t}return{grups:w,rules:y}}function ec(e,t){return jt(e,t)}function tc(e,t){function r(e){return Lr(e)?e:[e]}if(xr(e))return!1;if(0===(e=r(e)).length)return!1;if(xr(e))return!1;if(0===(t=r(t)).length)return!1;for(let r=0;r<e.length;r++)for(let n=0;n<t.length;n++)if(ec(e[r],t[n]))return!0;return!1}function rc(e,t,r,n={}){let i=De(n,"withInfor");wr(i)||(i=!0);let s={del:[],add:[],same:[],diff:[]};if(!er(r))return console.log("invalid key"),i&&(s.infor={}),s;Lr(e)||(e=[e]),Lr(t)||(t=[t]),e=Va(e,e=>un(e,r)),t=Va(t,e=>un(e,r));let o=new Map(t.map(e=>[e[r],e]));for(let t of e){let e=o.get(t[r]);if(e){JSON.stringify(t)===JSON.stringify(e)?s.same.push(e):s.diff.push(e),o.delete(t[r])}else s.del.push(t)}if(s.add=Array.from(o.values()),i){let e={};for(let t of s.del)e[t[r]]="del";for(let t of s.add)e[t[r]]="add";for(let t of s.diff)e[t[r]]="diff";for(let t of s.same)e[t[r]]="same";s.infor=e}return s}function nc(e,t,r=""){if(!Er(e))return[];if(!Er(t))return[];return Pt(e,e=>Ca(e,t,r))}let ic={csIng:{eng:"Connecting...",cht:"連線中..."},csLogin:{eng:"Logged in",cht:"已登入"},csLogout:{eng:"Logged out",cht:"已登出"},csErrConn:{eng:"Unable to connect",cht:"無法連線"},csErrLogin:{eng:"Login denied",cht:"拒絕登入"},csErrNotAdmin:{eng:"No permission to enter the permission console",cht:"無權進入權限後台"},aggridLanguage:{eng:"en",cht:"zh-tw"},systemMessage:{eng:"System message",cht:"系統確認訊息"},ok:{eng:"OK",cht:"確認"},no:{eng:"No",cht:"取消"},yes:{eng:"Yes",cht:"確定"},empty:{eng:"Empty",cht:"無"},waitingData:{eng:"Waiting data...",cht:"等待數據中..."},saveChanges:{eng:"Save changes",cht:"儲存變更"},id:{eng:"Id",cht:"主鍵"},from:{eng:"From",cht:"來源"},save:{eng:"Save",cht:"儲存"},close:{eng:"Close",cht:"關閉"},delete:{eng:"Delete",cht:"刪除"},screenFull:{eng:"Max size",cht:"最大化尺寸"},screenNormal:{eng:"Normal size",cht:"預設尺寸"},checkAllYes:{eng:"Check all",cht:"全選使用"},checkAllNo:{eng:"Uncheck all",cht:"全不選使用"},checkAllInv:{eng:"Reverse all",cht:"全反選使用"},operEnable:{eng:"Enable",cht:"是否使用"},operPemiMode:{eng:"Operator",cht:"合併權限模式"},operGrupMode:{eng:"Operator",cht:"合併權限群組模式"},processing:{eng:"Processing...",cht:"處理中請稍後..."},anUnexpectedErrorOccurred:{eng:"An unexpected error occurred, please contact the administrator",cht:"發生非預期錯誤,請洽管理員"},cannotConnectServer:{eng:"Cannot connect to server",cht:"無法連線至伺服器"},saveRowFieldInvalid:{eng:"Invalid field value in saved data",cht:"儲存資料的欄位值無效"},saveRowFieldDuplicate:{eng:"Duplicate field value in saved data",cht:"儲存資料的欄位值重複"},nameDuplicate:{eng:"Not saved: the name is duplicated. Group names and permission names must be unique. Nothing was changed.",cht:"未儲存:名稱重複。群組名稱與權限名稱不得重複。資料未變更。"},authLossyBlocked:{eng:"Not saved: the authorization settings for {names} contain entries the editor cannot write without changing access (the same name set to both OR and AND, or an entry without a usable name). Nothing was changed. Please correct the source data first.",cht:"未儲存:{names} 的授權設定含有編輯器無法在不改變授權下寫出的項目(同一名稱同時以 OR 與 AND 設定,或項目沒有可用的名稱)。資料未變更,請先修正資料來源。"},warnKindGrup:{eng:"permission group",cht:"權限群組"},warnKindPemi:{eng:"permission",cht:"權限"},warnRefDangling:{eng:"Not found in the {kind} list: {names}. Each is still counted as an entry with no authorization (an OR entry adds nothing; an AND entry leaves nothing granted). Restore it or remove it.",cht:"在{kind}清單中找不到:{names}。仍視為一個沒有任何授權的項目(OR 項目不增加授權;AND 項目使結果為空)。請還原或移除。"},warnRefAmbiguous:{eng:"Matches several {kind}s with the same name: {names}. Only the authorization they all share is used (intersection). Rename or delete the duplicates.",cht:"對到多筆同名的{kind}:{names}。僅採用它們共同擁有的授權(交集)。請將同名項目改名或刪除。"},warnRefModeInvalid:{eng:"The merge mode is missing or invalid: {names}. It is treated as AND, but only as a restriction: it never grants access on its own.",cht:"合併模式缺漏或不合法:{names}。系統視為 AND,且僅作為限制,不會單獨授予任何授權。"},warnRefBothModes:{eng:"Set as both OR and AND: {names}. The editor cannot save this without changing access, so saving is refused until the source data is fixed.",cht:"同時以 OR 與 AND 設定:{names}。編輯器無法在不改變授權下儲存,於資料來源修正前將拒絕儲存。"},warnRefEmptyName:{eng:"An entry has an empty name. It is kept as it is and matches only a {kind} whose name is empty.",cht:"有項目的名稱為空字串。照原樣保留,且僅與名稱為空字串的{kind}相符。"},warnRefNoName:{eng:"An entry has no usable name ({names}). The editor cannot keep it, so saving is refused until the source data is fixed.",cht:"有項目沒有可用的名稱({names})。編輯器無法保留,於資料來源修正前將拒絕儲存。"},warnDataUnparsable:{eng:"The authorization data cannot be parsed (invalid format). It is treated as granting nothing. Correct the source data or set it again and save.",cht:"授權資料的格式無法解析,系統視為沒有任何授權。請修正資料來源,或重新設定後儲存。"},warnRuleConflict:{eng:"Listed more than once, with both checked and unchecked: {names}. It is treated as unchecked (n).",cht:"重複列出且有勾與沒勾並存:{names}。系統視為沒勾選(n)。"},warnNameHistDup:{eng:"This name is shared by {n} rows (existing duplicates, not caused by this edit). Anything that refers to it by name uses only what the rows share. Rename or delete the extra rows.",cht:"此名稱由 {n} 筆資料共用(既有的重複,並非本次編輯造成)。以名稱引用它的授權僅採用各筆共同的部分。請將多餘的資料改名或刪除。"},warnDupRowsInconsistent:{eng:"Not saved: rows with the same name have different settings ({names}). Nothing was changed. Please make them identical, or fix the duplicate names first.",cht:"未儲存:同名的列設定不一致({names})。資料未變更,請先使其一致,或先修正同名資料。"},warnUserNameHistDup:{eng:"This name is shared by {n} users (existing duplicates, not caused by this edit). This does not block saving. If name is the sign-in key, signing in with it is refused until the duplicates are fixed.",cht:"此名稱由 {n} 位使用者共用(既有的重複,並非本次編輯造成),不影響儲存。若以名稱作為登入對應鍵,在重複修正前該名稱將無法登入。"},warnUserEmailHistDup:{eng:"This email is shared by {n} users (existing duplicates, not caused by this edit). This does not block saving. If email is the sign-in key, signing in with it is refused until the duplicates are fixed.",cht:"此 Email 由 {n} 位使用者共用(既有的重複,並非本次編輯造成),不影響儲存。若以 Email 作為登入對應鍵,在重複修正前該 Email 將無法登入。"},warnUserNameHistEmpty:{eng:"This user has no valid name (existing data, not caused by this edit). This does not block saving.",cht:"此使用者尚未給予有效名稱(既有資料,並非本次編輯造成),不影響儲存。"},warnUserEmailHistEmpty:{eng:"This user has no email (existing data, not caused by this edit). This does not block saving. If email is the sign-in key, this user cannot sign in.",cht:"此使用者尚未給予 Email(既有資料,並非本次編輯造成),不影響儲存。若以 Email 作為登入對應鍵,此使用者將無法登入。"},warnUserEmailHistInvalid:{eng:"The email format of this user is invalid (existing data, not caused by this edit). This does not block saving.",cht:"此使用者的 Email 格式錯誤(既有資料,並非本次編輯造成),不影響儲存。"},confirmDelRefsGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用。確定刪除?"},confirmDelRefsPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用。確定刪除?"},confirmDelRefsAndGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). For the {m} user(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用;其中 {m} 位以 AND 引用,移除後其限制解除,授權可能變多。確定刪除?"},confirmDelRefsAndPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). For the {m} group(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用;其中 {m} 個以 AND 引用,移除後其限制解除,授權可能變多。確定刪除?"},confirmDelDupRefsGrup:{eng:"{n} user(s) refer to a group name that is shared by several groups. If you delete one of them, those users' authorization may increase. Delete anyway?",cht:"有 {n} 位使用者引用的群組名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelDupRefsPemi:{eng:"{n} group(s) refer to a permission name that is shared by several permissions. If you delete one of them, the authorization of those groups may increase. Delete anyway?",cht:"有 {n} 個群組引用的權限名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsDupGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). Also, {w} user(s) refer to a group name that is shared by several groups; if you delete one of them, those users' authorization may increase. Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用;另有 {w} 位使用者引用的群組名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsDupPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). Also, {w} group(s) refer to a permission name that is shared by several permissions; if you delete one of them, the authorization of those groups may increase. Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用;另有 {w} 個群組引用的權限名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsAndDupGrup:{eng:"The reference to the selected group(s) will be removed from {n} user(s). For the {m} user(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Also, {w} user(s) refer to a group name that is shared by several groups; if you delete one of them, those users' authorization may increase. Delete anyway?",cht:"將自 {n} 位使用者移除對所選群組的引用,其中 {m} 位以 AND 引用,移除後其限制解除,授權可能變多;另有 {w} 位使用者引用的群組名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmDelRefsAndDupPemi:{eng:"The reference to the selected permission(s) will be removed from {n} group(s). For the {m} group(s) that refer to it with AND, the restriction will be lifted and their authorization may increase. Also, {w} group(s) refer to a permission name that is shared by several permissions; if you delete one of them, the authorization of those groups may increase. Delete anyway?",cht:"將自 {n} 個群組移除對所選權限的引用,其中 {m} 個以 AND 引用,移除後其限制解除,授權可能變多;另有 {w} 個群組引用的權限名稱有多筆同名資料,刪除其中一筆後,其授權可能變多。確定刪除?"},confirmSaveRenameRefsGrup:{eng:"After saving, the group references of {n} user(s) will be updated to the new names of these renamed group(s): {list}. Continue?",cht:"儲存後將一併更新 {n} 位使用者對下列已改名群組的引用:{list}。是否繼續?"},confirmSaveRenameRefsExtGrup:{eng:"After saving, the group references of {n} user(s) will be updated to the new names of these renamed group(s): {list}. The source of {e} of them is an external application; their references may be overwritten by external data at the next external sync. Continue?",cht:"儲存後將一併更新 {n} 位使用者對下列已改名群組的引用:{list}。其中 {e} 位來源為外部應用,下次外部同步時可能被外部資料覆寫。是否繼續?"},confirmSaveRenameRefsPemi:{eng:"After saving, the permission references of {n} group(s) will be updated to the new names of these renamed permission(s): {list}. Continue?",cht:"儲存後將一併更新 {n} 個群組對下列已改名權限的引用:{list}。是否繼續?"},confirmSaveRenameRefsExtPemi:{eng:"After saving, the permission references of {n} group(s) will be updated to the new names of these renamed permission(s): {list}. The source of {e} of them is an external application; their references may be overwritten by external data at the next external sync. Continue?",cht:"儲存後將一併更新 {n} 個群組對下列已改名權限的引用:{list}。其中 {e} 個來源為外部應用,下次外部同步時可能被外部資料覆寫。是否繼續?"},confirmSaveDelRefsTarget:{eng:"The settings for the following target(s) (deleted or renamed) will be removed from the rules of {n} permission(s): {list}. Save anyway?",cht:"將自 {n} 個權限的規則移除對下列管控對象的設定(已刪除或已改名):{list}。確定儲存?"},cascadeListMore:{eng:"… ({n} in total)",cht:"…等 {n} 個"},grupSaveGrupsSuccessCascade:{eng:"Save permission groups successfully. The group references of {n} user(s) were updated to the new name(s).",cht:"儲存權限群組數據成功,已將 {n} 位使用者對已改名群組的引用一併更新為新名稱。"},pemiSavePemisSuccessCascade:{eng:"Save permissions successfully. The permission references of {n} group(s) were updated to the new name(s).",cht:"儲存權限數據成功,已將 {n} 個群組對已改名權限的引用一併更新為新名稱。"},relationRowsStale:{eng:"Not saved: the list changed while this dialog was open (removed or renamed: {names}). Nothing was changed. Please close this dialog, reload the page and try again.",cht:"未儲存:此對話框開啟期間清單已有異動(已刪除或改名:{names})。資料未變更,請關閉對話框並重新整理頁面後再操作。"},externalRowLocked:{eng:'Synchronized from external source "{from}". Read-only here.',cht:"由外部來源「{from}」同步,於此為唯讀。"},externalRowsNotice:{eng:"{n} row(s) are synchronized from an external source. Their identity fields are read-only and they cannot be deleted here; only their assignment settings can be changed.",cht:"有 {n} 筆資料由外部來源同步。其身分欄位於此為唯讀且不可刪除,僅可修改其授權指派設定。"},externalRowsNoticeTarget:{eng:"{n} row(s) are synchronized from an external source. They are read-only and cannot be deleted here.",cht:"有 {n} 筆資料由外部來源同步,於此為唯讀且不可刪除。"},syncWarnIdRenumber:{eng:'The external source "{from}" appears to have renumbered its source keys ({n} item(s) now carry a name that previously belonged to an item with a different source key). Each synchronization removes the old items and cleans up the references to them, which may erase the assignments made here. Please ask the source to keep the srcKey of each item stable.',cht:"外部來源「{from}」疑似重編來源鍵(有 {n} 筆項目的名稱,先前屬於不同來源鍵之項目)。每次同步會移除舊項目並連帶清理其引用,可能抹掉在此做的指派。請來源端保持來源鍵(srcKey)穩定。"},externalRowDelBlocked:{eng:"{n} selected row(s) are synchronized from an external source and cannot be deleted here. They were skipped.",cht:"所選資料中有 {n} 筆由外部來源同步,無法在此刪除,已略過。"},nameUsedByExternal:{eng:'External source "{from}" already uses the name "{name}".',cht:"外部來源「{from}」已使用此名稱「{name}」。"},confirmAddRefsGrup:{eng:'Adding the group(s) "{list}": {n} user(s) already refer to the name, so after saving they will get (or be limited by) the permissions of the new group(s). Add anyway?',cht:"新增群組「{list}」後,將有 {n} 位使用者取得或受此群組限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsAndGrup:{eng:'Adding the group(s) "{list}": {n} user(s) already refer to the name, so after saving they will get (or be limited by) the permissions of the new group(s); {m} of them refer to it with AND. Add anyway?',cht:"新增群組「{list}」後,將有 {n} 位使用者(其中 {m} 位以 AND 引用)取得或受此群組限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsPemi:{eng:'Adding the permission(s) "{list}": {n} group(s) already refer to the name, so after saving they will get (or be limited by) the new permission(s). Add anyway?',cht:"新增權限「{list}」後,將有 {n} 個群組取得或受此權限限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsAndPemi:{eng:'Adding the permission(s) "{list}": {n} group(s) already refer to the name, so after saving they will get (or be limited by) the new permission(s); {m} of them refer to it with AND. Add anyway?',cht:"新增權限「{list}」後,將有 {n} 個群組(其中 {m} 個以 AND 引用)取得或受此權限限制(其授權設定原已引用此名稱)。確定新增?"},confirmAddRefsTarget:{eng:'Adding the target(s) "{list}": the rules of {n} permission(s) already contain settings for the name, so after saving those settings will take effect for the new target(s). Add anyway?',cht:"新增管控對象「{list}」後,將有 {n} 個權限的規則取得此管控對象的設定(其規則原已寫有此名稱)。確定新增?"},saveInProgress:{eng:"The previous save is still in progress. Please do not submit again.",cht:"上一次儲存仍在處理中,請勿重複送出"},saveNewRowExists:{eng:"The newly added data has already been saved. Please reload the page before making changes.",cht:"新增之資料已儲存過,請重新整理頁面後再操作"},saveTabItemsSuccess:{eng:"Saved successfully",cht:"儲存成功"},htmlMarkupNotAllowed:{eng:'The input contains HTML markup that is not allowed (such as "<" followed by a letter). Please remove it and try again.',cht:"輸入內容含有不允許的 HTML 標記(如「<」後接英文字母),請移除後再試一次。"},saveWriteFail:{eng:"Not all changes were written, and some may have taken effect. Please reload the page and check before making changes.",cht:"資料寫入未全部完成,部分變更可能已生效,請重新整理頁面確認後再操作"},renameCascadeDupGroup:{eng:"Not saved: a renamed item shares its old name with other existing items, so the references to it cannot be updated safely. Nothing was changed. Please delete or rename the duplicates first (save them separately), then rename it.",cht:"未儲存:被改名的項目與其他既有項目同名,無法安全地連帶更新引用。資料未變更。請先清理同名項目(分次儲存)後再改名。"},renameCascadeNameInUse:{eng:"Not saved: a new name is still referenced by settings of items that no longer exist, so the renamed item would take over those references. Nothing was changed. Please clean up the dangling references first, or choose another name.",cht:"未儲存:新名稱仍被已不存在之項目的授權設定引用,改名後會被這些引用接管。資料未變更。請先清理懸空引用,或改用其他名稱。"},renameCascadeConflict:{eng:"Not saved: a setting contains both the old and the new name, so its references cannot be updated automatically. Nothing was changed.",cht:"未儲存:有授權設定同時含有舊名稱與新名稱,無法自動更新引用。資料未變更。"},renameCascadeUnsupported:{eng:"Not saved: a setting that refers to the renamed or deleted item contains a value that cannot be safely rewritten (such as a non-finite number), so its references cannot be updated automatically. Nothing was changed. Please fix that setting first.",cht:"未儲存:引用此項目之授權設定含有無法安全改寫的內容(如非有限數值),無法自動更新引用。資料未變更,請先修正該授權設定。"},saveCascadePartial:{eng:"The related references may be out of sync with this change (the automatic restore failed). Please do not make further changes and contact the system administrator to run the reference audit.",cht:"相關的授權引用可能與本次變更不一致(自動還原失敗)。請勿再變更資料,並通知系統管理者執行引用稽核。"},saveFromNotAllowed:{eng:'Not saved: rows saved here must have an empty "From" value (rows with a source are managed by the external source). Nothing was changed.',cht:"未儲存:於此儲存之列其「來源」須為空白(有來源之列由外部來源管理)。資料未變更。"},saveExternalRowChanged:{eng:"Not saved: rows synchronized from an external source cannot be deleted here, and only their assignment settings can be changed. Nothing was changed. Please change them at the external source.",cht:"未儲存:由外部來源同步之列不可在此刪除,且僅能修改其授權指派設定。資料未變更,請至外部來源端處理。"},saveStale:{eng:"Not saved: the data changed (by someone else or by an external synchronization) after this page was loaded. Nothing was changed. Please reload the page and try again.",cht:"未儲存:載入此頁面後資料已被他人或外部同步更新。資料未變更,請重新整理頁面後再操作。"},staleDraftNotice:{eng:'The data was updated by someone else or by an external synchronization after you started editing. Your unsaved edits are kept here, but saving now will be rejected. Click "Reload" to get the latest data (your unsaved edits will be discarded).',cht:"資料已被他人或外部同步更新。您尚未儲存的編輯仍保留於此,但現在儲存將被拒絕。請按「重新載入」取得最新資料(未儲存的編輯將被捨棄)。"},staleDraftReload:{eng:"Reload",cht:"重新載入"},staleDraftNoticeDialog:{eng:"The data was updated by someone else or by an external synchronization after this window was opened. Saving from this window will be rejected. Please close this window and open it again to get the latest data.",cht:"資料已被他人或外部同步更新,本視窗內的資料已過期,儲存將被拒絕。請關閉本視窗後重新開啟,以取得最新資料。"},saveBaselineRequired:{eng:"Not saved: changing the assignment settings of rows synchronized from an external source requires the latest loaded data, which this request did not carry. Nothing was changed. Please reload the page and try again.",cht:"未儲存:修改外部來源同步列之授權指派設定須附載入時之資料版本,此次請求未附。資料未變更,請重新整理頁面後再操作。"},saveBaselineFormat:{eng:"Not saved: this page was opened with a different version of the system and its data version cannot be recognized. Nothing was changed. Please reload the page and try again.",cht:"未儲存:此頁面是以不同版本載入,其資料版本無法辨識。資料未變更,請重新整理頁面後再操作。"},relSubjectChangedGrup:{eng:'Not saved: the group "{name}" this window was opened for has been deleted, renamed or replaced by another group since then. Nothing was changed. Please close this window, reload the page and try again.',cht:"未儲存:本視窗所編輯的群組「{name}」自開啟後已被刪除、改名或被另一個群組取代。資料未變更,請關閉本視窗並重新整理頁面後再操作。"},relSubjectChangedPemi:{eng:'Not saved: the permission "{name}" this window was opened for has been deleted, renamed or replaced by another permission since then. Nothing was changed. Please close this window, reload the page and try again.',cht:"未儲存:本視窗所編輯的權限「{name}」自開啟後已被刪除、改名或被另一個權限取代。資料未變更,請關閉本視窗並重新整理頁面後再操作。"},saveSubjectChanged:{eng:"Not saved: the group or permission this window was opened for has been deleted, renamed or replaced by another one since then. Nothing was changed. Please close this window, reload the page and try again.",cht:"未儲存:本視窗所編輯的群組或權限自開啟後已被刪除、改名或被另一個取代。資料未變更,請關閉本視窗並重新整理頁面後再操作。"},saveRefChanged:{eng:"Not saved: a group, permission or target you just assigned has been deleted or replaced by another one with the same name since this page was loaded. Nothing was changed. Please reload the page and try again.",cht:"未儲存:您剛指派的群組、權限或標的在載入此頁面後已被刪除,或被同名的另一個取代。資料未變更,請重新整理頁面後再操作。"},saveIdentityFormat:{eng:"Not saved: the identity information carried by this request is invalid. Nothing was changed. Please reload the page and try again.",cht:"未儲存:此次請求所附之身分資訊無效。資料未變更,請重新整理頁面後再操作。"},saveIdentityRequired:{eng:"Not saved: the data was updated or this page is out of date (the request did not carry the identity of the groups, permissions or targets it changes). Nothing was changed. Please reload the page and try again.",cht:"未儲存:資料已更新或頁面過舊(此次請求未附所異動之群組、權限或標的之身分資訊)。資料未變更,請重新整理頁面後再操作。"},userNotAdmin:{eng:"Only system administrators can access or change this data",cht:"僅系統管理員可存取或變更此資料"},srcKeyInvalid:{eng:"Invalid srcKey: every row must carry a non-empty string srcKey",cht:"來源鍵 srcKey 無效:每列都須帶非空字串之 srcKey"},srcKeyDuplicate:{eng:"Duplicate srcKey in the batch",cht:"同一批次內來源鍵 srcKey 重複"},idNotAllowed:{eng:"The id is generated by this system and must not be provided",cht:"內部主鍵 id 由本系統產生,外部不得提供"},srcKeyConflict:{eng:"The existing data of this source cannot be matched uniquely by srcKey. Nothing was changed. Please contact the administrator",cht:"此來源之既有資料無法依 srcKey 唯一配對。資料未變更,請聯絡管理員處置"},loginIdCollision:{eng:"Nothing was changed: a login identifier (the id of an administrator-managed user, or the srcKey of a user synchronized from an external source) is also used by another user or another source, whether or not either user is enabled, so a login by id would match more than one user. Please use a value that identifies the user uniquely, or ask the deployer to map users by another unique key (for example the email)",cht:"資料未變更:有一筆資料的登入識別(後台使用者的 id,或外部同步使用者的 srcKey)與其他使用者或其他來源的相同(不論是否停用),依 id 登入時會同時符合多位使用者。請改用可唯一對應使用者的值,或請部署方改以其他可唯一對應的鍵(例如 email)進行對應"},cannotGetUserId:{eng:"Cannot get the user id",cht:"無法取得使用者 Id"},cannotGetUserEmail:{eng:"Cannot get the email of user",cht:"無法取得使用者 Email"},cannotGetUserName:{eng:"Cannot get the name of user",cht:"無法取得使用者名稱"},cannotGetUserRole:{eng:"Cannot get the role of user",cht:"無法取得使用者角色"},cannotFindUserFromToken:{eng:"Cannot identify the user from token",cht:"無法由 token 識別使用者"},cannotGetUserProp:{eng:"Cannot get the property of user",cht:"無法取得使用者對應屬性"},cannotGetUserFromPerm:{eng:"Cannot find the user in permission system",cht:"無法於權限系統取得使用者"},ambiguousUserFromPerm:{eng:"Cannot identify the user in permission system: more than one active user matches",cht:"無法於權限系統確認使用者:有多位有效使用者符合"},userNoPermission:{eng:"User does not have permission",cht:"使用者權限不足"},invalidPayload:{eng:"Invalid payload in request",cht:"請求內容無效"},invalidFromInPayload:{eng:"Invalid from in payload",cht:"請求來源欄位無效"},invalidRowsInPayload:{eng:"Invalid rows in payload",cht:"請求資料列無效"},invalidFrom:{eng:"Invalid from",cht:"來源欄位無效"},invalidRows:{eng:"Invalid data format.",cht:"資料格式錯誤。"},cannotGetUserRules:{eng:"Cannot get rules of user",cht:"無法取得使用者權限規則"},tokenNoPermission:{eng:"Token does not have permission",cht:"權限不足"},userIdNoPermrules:{eng:"The user id does not have permission rules",cht:"此使用者沒有權限規則"},invalidKeyTable:{eng:"Invalid key table",cht:"資料表名稱無效"},cannotFindUserId:{eng:"Cannot find the user id",cht:"無法找到使用者 Id"},username:{eng:"Username",cht:"使用者姓名"},email:{eng:"Email",cht:"電子郵件"},name:{eng:"Name",cht:"名稱"},description:{eng:"Description",cht:"說明"},modeEdit:{eng:"Edit mode",cht:"編輯模式"},showTabCols:{eng:"Show columns",cht:"顯示欄位"},belongUsers:{eng:"Use users",cht:"管控所屬使用者"},belongGrups:{eng:"Use groups",cht:"管控所屬權限群組"},belongGrupsNames:{eng:"Use permission groups",cht:"所屬權限群組名稱"},belongPemisNames:{eng:"Use permissions",cht:"所屬權限名稱"},chipsShowAll:{eng:"Show all",cht:"展開全部"},chipsPopupTitle:{eng:"{title} ({n} in total)",cht:"{title}:共 {n} 項"},isAdmin:{eng:"Administrator",cht:"是否為系統管理員"},isActive:{eng:"Active",cht:"是否有效"},errInNames:{eng:"Name errors",cht:"名稱出現錯誤待修復"},errInIds:{eng:"ID errors",cht:"ID 出現錯誤待修復"},errInEmails:{eng:"Email errors",cht:"Email出現錯誤待修復"},menuTreeShow:{eng:"Show menu",cht:"顯示選單"},menuTreeHide:{eng:"Hide menu",cht:"隱藏選單"},menuUser:{eng:"User menu",cht:"使用者選單"},language:{eng:"Language",cht:"語系"},mmTargets:{eng:"Targets",cht:"管理對象"},mmTargetsMsg:{eng:"Targets generally refer to entities such as pages, data, etc., and can also include features or services.",cht:"對象泛指實體的頁面、數據等,亦可為的功能或服務。"},mmPemis:{eng:"Permissions",cht:"管理權限"},mmPemisMsg:{eng:"Permissions are primarily used to set rules for enabling or disabling various objects.",cht:"權限主要為用來設定各種對象之使用或禁用規則。"},mmGrups:{eng:"Permission groups",cht:"管理權限群組"},mmGrupsMsg:{eng:"Permission groups are primarily used to configure combinations of different permissions.",cht:"權限群組主要為用來設定組合各種權限。"},mmUsers:{eng:"Users",cht:"管理使用者"},mmUsersMsg:{eng:"Users are primarily for providing or extending user information and can be configured with combinations of various permission groups.",cht:"使用者主要為提供或擴充使用者資訊,並可設定組合各種權限群組。"},targetId:{eng:"Target",cht:"對象名稱"},targetIdEmpty:{eng:"Invalid name",cht:"尚未給予有效對象名稱"},targetIdDuplicate:{eng:"Duplicate target",cht:"對象名稱出現重複"},targetAddEmpty:{eng:"No target",cht:"尚未新增管理資料"},targetAdd:{eng:"Add target",cht:"新增對象"},targetAddNameNew:{eng:"New target",cht:"新對象"},targetAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},targetCopy:{eng:"Copy target",cht:"複製對象"},targetCopyNameNew:{eng:"copy",cht:"複製"},targetDeleteCheckTargets:{eng:"Delete target(s)",cht:"刪除勾選對象"},targetEnable:{eng:"Enable",cht:"是否使用"},targetSaveTargetsFail:{eng:"Failed to save targets",cht:"儲存對象數據失敗"},targetSaveTargetsSuccess:{eng:"Save targets successfully",cht:"儲存對象數據成功"},pemiName:{eng:"Name of permission",cht:"權限名稱"},pemiNameEmpty:{eng:"Invalid name of permission",cht:"尚未給予有效權限名稱"},pemiNameDuplicate:{eng:"Duplicate name of permission",cht:"權限名稱出現重複"},pemiAddEmpty:{eng:"No permission",cht:"尚未新增權限資料"},pemiAdd:{eng:"Add permission",cht:"新增權限"},pemiAddNameNew:{eng:"New permission",cht:"新權限"},pemiAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},pemiCopy:{eng:"Copy permission",cht:"複製權限"},pemiCopyNameNew:{eng:"copy",cht:"複製"},pemiDeleteCheckPemis:{eng:"Delete permission(s)",cht:"刪除勾選權限"},pemiCrules:{eng:"Rules of permission",cht:"管控對象"},pemiEditBlngGrupsNoPemiId:{eng:"Can not find the id of permission",cht:"無法找到權限Id"},pemiEditBlngGrupsNoPemiData:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},pemiEditCrules:{eng:"Edit rules of permission",cht:"編輯使用對象"},pemiEditCrulesForDisplay:{eng:"Rules of permission",cht:"展示使用對象"},pemiEditCrulesNoPemiId:{eng:"Can not find the id of permission",cht:"無法找到權限Id"},pemiEditCrulesNoPemiData:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},pemiRnderCrulesNoRule:{eng:"No rule",cht:"無使用任何對象"},pemiRnderCrulesHasNRule:{eng:"Has {n} rule(s){nms}",cht:"使用共 {n} 項對象{nms}"},pemiSavePemisFail:{eng:"Failed to save permissions",cht:"儲存權限數據失敗"},pemiSavePemisSuccess:{eng:"Save permissions successfully",cht:"儲存權限數據成功"},pemiBlngEditGrups:{eng:"Edit permission groups",cht:"編輯所屬權限群組"},pemiBlngEditGrupsForDisplay:{eng:"Permission groups",cht:"展示所屬權限群組"},pemiBlngRnderNoGrup:{eng:"No permission groups",cht:"無所屬權限群組"},pemiBlngRnderGrups:{eng:"Has {n} permission group(s){nms}",cht:"共被 {n} 個權限群組{nms}使用"},pemiBlngPemiNow:{eng:"Now permission",cht:"目前權限"},pemiBlngEditNoName:{eng:"Can not find the name of permission",cht:"無法找到權限名稱"},pemiBlngEditNoPemi:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},pemiBlngDeleteCheckPemis:{eng:"Delete permission(s)",cht:"刪除勾選權限"},cruleEditNoTargetId:{eng:"Can not find the id of target",cht:"無法找到對象Id"},cruleEditNoTargetData:{eng:"Can not find the data of target",cht:"無法找到對象資料"},cruleDeleteCheckTargets:{eng:"Delete target(s)",cht:"刪除勾選對象"},grupName:{eng:"Name of permission group",cht:"權限群組名稱"},grupNameEmpty:{eng:"Invalid name of permission group",cht:"尚未給予有效權限群組名稱"},grupNameDuplicate:{eng:"Duplicate name of permission group",cht:"權限群組名稱出現重複"},grupAddEmpty:{eng:"No permission group",cht:"尚未新增權限群組資料"},grupAdd:{eng:"Add permission group",cht:"新增權限群組"},grupAddNameNew:{eng:"New permission group",cht:"新權限群組"},grupAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},grupCopy:{eng:"Copy permission group",cht:"複製權限群組"},grupCopyNameNew:{eng:"copy",cht:"複製"},grupDeleteCheckGrups:{eng:"Delete permission group(s)",cht:"刪除勾選權限群組"},grupCpemis:{eng:"Permissions",cht:"管控使用權限"},grupEditBlngNoGrupId:{eng:"Can not find the id of permission group",cht:"無法找到權限群組Id"},grupEditBlngNoGrupData:{eng:"Can not find the data of permission group",cht:"無法找到權限群組資料"},grupEditCpemis:{eng:"Edit list of permission group",cht:"編輯使用權限"},grupEditCpemisForDisplay:{eng:"List of permission group",cht:"展示使用權限"},grupRnderCpemisNoPermission:{eng:"No permission",cht:"無使用任何權限"},grupRnderCpemisHasNPermissions:{eng:"Has {n} permission(s){nms}",cht:"使用 {n} 項權限{nms}"},grupSaveGrupsEmpty:{eng:"No user",cht:"未有變更權限群組資料"},grupSaveGrupsFail:{eng:"Failed to save permission groups",cht:"儲存權限群組數據失敗"},grupSaveGrupsSuccess:{eng:"Save permission groups successfully",cht:"儲存權限群組數據成功"},grupBlngEditUsers:{eng:"Edit permission group of users",cht:"編輯所屬使用者"},grupBlngEditUsersForDisplay:{eng:"Permission group of users",cht:"展示所屬使用者"},grupBlngRnderNoUser:{eng:"No users",cht:"無所屬使用者"},grupBlngRnderUsers:{eng:"Has {n} user(s){nms}",cht:"共被 {n} 位使用者{nms}使用"},grupBlngGrupNow:{eng:"Now permission group",cht:"目前權限群組"},grupBlngEditNoGrupName:{eng:"Can not find the name of permission group",cht:"無法找到權限群組名稱"},grupBlngEditNoGrupData:{eng:"Can not find the data of permission group",cht:"無法找到權限群組資料"},grupBlngDeleteCheckGrups:{eng:"Delete permission group(s)",cht:"刪除勾選權限群組"},cpemiEditNoName:{eng:"Can not find the name of target",cht:"無法找到對象名稱"},cpemiEditNoTarget:{eng:"Can not find the data of target",cht:"無法找到對象資料"},cpemiDeleteCheckTargets:{eng:"Delete targets(s)",cht:"刪除勾選對象"},userName:{eng:"Name of user",cht:"使用者名稱"},userNameEmpty:{eng:"Invalid name of user",cht:"尚未給予有效使用者名稱"},userNameDuplicate:{eng:"Duplicate name of user",cht:"使用者名稱出現重複"},userEmailEmpty:{eng:"Empty email of user",cht:"尚未給予使用者Email"},userEmailError:{eng:"Invalid email of user",cht:"使用者Email格式錯誤"},userEmailDuplicate:{eng:"Duplicate email of user",cht:"使用者Email出現重複"},userAddEmpty:{eng:"No user",cht:"尚未新增使用者資料"},userAdd:{eng:"Add user",cht:"新增使用者"},userAddNameNew:{eng:"New user",cht:"新使用者"},userAddIdNew:{eng:"Waiting generation",cht:"待自動給予"},userCopy:{eng:"Copy user",cht:"複製使用者"},userCopyNameNew:{eng:"copy",cht:"複製"},userDeleteCheckUsers:{eng:"Delete user(s)",cht:"刪除勾選使用者"},userCgrups:{eng:"Permission groups",cht:"管控使用權限群組"},userEditCgrups:{eng:"Edit list of user",cht:"編輯使用權限群組"},userEditCgrupsForDisplay:{eng:"Permission groups of user",cht:"展示使用權限群組"},userEditCgrupsNoUserId:{eng:"Can not find the id of user",cht:"無法找到使用者Id"},userEditCgrupsNoUserData:{eng:"Can not find the data of user",cht:"無法找到使用者資料"},userSaveUsersEmpty:{eng:"No user",cht:"未有變更使用者資料"},userSaveUsersFail:{eng:"Failed to save users",cht:"儲存使用者數據失敗"},userSaveUsersSuccess:{eng:"Save users successfully",cht:"儲存使用者數據成功"},userEditNoUserId:{eng:"Can not find the id of user",cht:"無法找到使用者Id"},userEditNoUserData:{eng:"Can not find the data of user",cht:"無法找到使用者數據"},userRnderCgrupsNoGroup:{eng:"No permission group",cht:"無使用任何權限群組"},userRnderCgrupsHasNGroups:{eng:"Has {n} permission group(s){nms}",cht:"使用 {n} 項權限群組{nms}"},cgrupEditNoName:{eng:"Can not find the name of permission",cht:"無法找到權限名稱"},cgrupEditNoPemi:{eng:"Can not find the data of permission",cht:"無法找到權限資料"},cgrupDeleteCheckPemis:{eng:"Delete permission(s)",cht:"刪除勾選權限"},show:{eng:"Show",cht:"顯示"},active:{eng:"Active",cht:"啟用"},userId:{eng:"ID of the created user",cht:"創建使用者主鍵"},timeCreate:{eng:"Created time",cht:"創建時間"},userIdUpdate:{eng:"ID of the updated user",cht:"最新變更使用者主鍵"},timeUpdate:{eng:"Updated time",cht:"更新時間"},invalidUrl:{eng:"Invalid url",cht:"網址無效"},invalidTokenTar:{eng:"Invalid target token",cht:"目標 token 無效"},invalidTokenSelf:{eng:"Invalid self token",cht:"自身 token 無效"},invalidUserIdTar:{eng:"Invalid target user id",cht:"目標使用者 Id 無效"},noTokenInUrl:{eng:"Missing token in url",cht:"網址缺少 token"},noTokenUserIdInUrl:{eng:"Missing token or userId in url",cht:"網址缺少 token 或 userId"},cannotGetUserByUrl:{eng:"Cannot get user by url",cht:"無法由網址取得使用者"},cannotGetUserDataByUrl:{eng:"Cannot get user data by url",cht:"無法由網址取得使用者資料"},noUserDataByUrl:{eng:"No user data by url",cht:"該網址無使用者資料"},noUserDataAfterConvert:{eng:"No user data after permission conversion",cht:"權限轉換後無使用者資料"},mmStaInfor:{eng:"Statistics",cht:"統計資訊"},staEventTitle:{eng:"Event Frequency",cht:"事件發生頻率"},staTimeHr:{eng:"Hourly",cht:"每小時"},staTimeDay:{eng:"Daily",cht:"每日"},staTotal:{eng:"Total",cht:"全部加總"},staNoData:{eng:"No event data",cht:"尚無事件資料"},getDataError:{eng:"Failed to load data",cht:"資料載入失敗"},staTableTitle:{eng:"Event Statistics",cht:"事件統計表"},staColEvent:{eng:"Event",cht:"事件"},staColLast1Day:{eng:"Last 1 Day",cht:"最近1日"},staColLast8Hour:{eng:"Last 8 Hours",cht:"最近8小時"},staColLast4Hour:{eng:"Last 4 Hours",cht:"最近4小時"},staColLast1Hour:{eng:"Last 1 Hour",cht:"最近1小時"}},sc=(e={})=>{let t=De(e,"kpLangExt");_t(t)||(t={});let r=De(e,"webName");_t(r)||(r={});let n=De(e,"webDescription");_t(n)||(n={});let i={};i={...i,...ic},_t(t)&&(i={...i,...t}),_t(r)&&(i={...i,webName:{...r}}),_t(n)&&(i={...i,webDescription:{...n}});let s={};return En(["eng","cht"],e=>{let t={};En(i,(r,n)=>{t[n]=r[e]}),s[e]=t}),s};function oc(e,t={}){if(!Array.isArray(e))return{reason:"rowsInvalid",k:-1,field:""};let r=!0===De(t,"idRequired",!1),n=De(t,"rowsIdOnly",[]);Array.isArray(n)||(n=[]);let i=Object.create(null),s=(e,t)=>{let n=De(e,"id"),s="number"==typeof n;if(!!(null==n||""===n||s&&!Number.isFinite(n)))return r?{reason:"idInvalid",k:t,field:"id"}:null;if(!er(n)&&!s)return{reason:"idInvalid",k:t,field:"id"};let o=String(n);return er(n)&&Buffer.byteLength(n,"utf8")>1978?{reason:"idTooLong",k:t,field:"id"}:!0===i[o]?{reason:"idDuplicate",k:t,field:"id"}:(i[o]=!0,null)},o=null;return Qa(e,(e,t)=>{if(o=s(e,t),null!==o)return!1}),null!==o?o:(Qa(n,e=>{if(o=s(e,-1),null!==o)return!1}),null!==o||Qa(e,(e,t)=>!(null!==e&&"object"==typeof e&&!Array.isArray(e))||(Qa(e,(e,r)=>{return null!=(n=e)&&"string"!=typeof n&&"number"!=typeof n&&"boolean"!=typeof n?(o={reason:"fieldNotScalar",k:t,field:r},!1):er(e)&&vl(e)!==e?(o={reason:"htmlMarkup",k:t,field:r},!1):void 0;var n}),null===o&&void 0)),o)}let uc={grups:{holder:"users",field:"cgrups",kind:"ref"},pemis:{holder:"grups",field:"cpemis",kind:"ref"},targets:{holder:"pemis",field:"crules",kind:"rule"}},lc=e=>"string"==typeof e,ac=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),cc=(e,t)=>"rule"===t?$a(e):lc(e)?e:null,dc=(e,t)=>{if(null===e||"object"!=typeof e)return null;let r="targets"===t?e.id:void 0===e.name?"":e.name;return lc(r)?r:null},wc=e=>{if(!lc(e)||""===e.trim())return null;let t=null;try{t=ka.parse(e)}catch(e){return null}return null!==t&&"object"==typeof t?t:null},yc=(e,t)=>{let r=[];return Array.isArray(e)?(e.forEach((e,n)=>{let i=_t(e)&&ac(e,"name")?e.name:n;r.push({key:cc(i,t),el:e,i:n,isObj:_t(e),isActive:_t(e)?e.isActive:e})}),r):(Object.keys(e).forEach(n=>{let i=e[n];r.push({key:cc(n,t),el:i,i:n,isObj:_t(i),isActive:_t(i)?i.isActive:i})}),r)},gc=e=>"number"==typeof e?!Number.isFinite(e):null!==e&&"object"==typeof e&&Object.keys(e).some(t=>gc(e[t]));function Dc(e,t={}){let r="rule"===t.kind?"rule":"ref",n=t.rename instanceof Map?t.rename:new Map,i=t.del instanceof Set?t.del:new Set,s={str:e,changed:!1,nRename:0,nDel:0,conflict:!1,unsafe:!1};if(0===n.size&&0===i.size)return s;let o=wc(e);if(null===o)return s;let u=yc(o,r),l=new Set;u.forEach(e=>{null!==e.key&&l.add(e.key)});let a=e=>null!==e&&i.has(e),c=e=>null!==e&&!a(e)&&n.has(e);for(let e of u)if(c(e.key)){let t=n.get(e.key);if(l.has(t)&&!c(t)&&!a(t))return s.conflict=!0,s}let d=0,w=0,y=null;if(Array.isArray(o)){y=[];let e=-1;"rule"===r&&u.forEach(t=>{e<0&&a(t.key)&&(e=t.i)}),u.forEach(t=>{let r=t.isObj&&ac(t.el,"name");a(t.key)?w++:c(t.key)&&t.isObj?(d++,y.push({...t.el,name:n.get(t.key)})):e>=0&&t.i>e&&!r?y.push(t.isObj?{...t.el,name:t.i}:{name:t.i,isActive:t.el}):y.push(t.el)})}else y=Object.create(null),u.forEach(e=>{a(e.key)?w++:c(e.key)?(d++,y[n.get(e.key)]=e.el):y[e.i]=e.el});return 0===d&&0===w?s:gc(o)?(s.unsafe=!0,s):{str:JSON.stringify(y),changed:!0,nRename:d,nDel:w,conflict:!1,unsafe:!1}}function mc(e){let t=e?e.keyTable:"",r={renames:[],rename:new Map,delNames:[],del:new Set,oldById:new Map,newById:new Map};if(!ac(uc,t))return r;let n=!(e.opt&&!1===e.opt.cascadeRename),i=Array.isArray(e.rowsOld)?e.rowsOld:[],s=Array.isArray(e.rowsNew)?e.rowsNew:[],o=r.oldById;i.forEach(e=>{null!==e&&"object"==typeof e&&lc(e.id)&&o.set(e.id,e)});let u=r.newById;s.forEach(e=>{null!==e&&"object"==typeof e&&lc(e.id)&&u.set(e.id,e)});let l=new Set;return u.forEach((e,i)=>{let s=o.get(i);if(void 0===s)return;let u=dc(s,t),a=dc(e,t);null!==u&&u===a&&l.add(u),n&&"targets"!==t&&null!==u&&null!==a&&u!==a&&(r.renames.push({id:i,from:u,to:a}),r.rename.set(u,a))}),o.forEach((e,n)=>{if(u.has(n))return;let i=dc(e,t);null===i||l.has(i)||r.del.add(i)}),r.delNames=[...r.del],r}function Mc(e){let t=e?e.keyTable:"",r=ac(uc,t)?uc[t]:null,n={err:null,keyTable:t,holder:r?r.holder:"",field:r?r.field:"",renames:[],delNames:[],changes:[],nHolders:0,nRenameHolders:0,nDelHolders:0,nExternal:0};if(null===r)return n;let i=Array.isArray(e.holdersOld)?e.holdersOld:[],s=mc(e),{oldById:o,newById:u,rename:l,del:a}=s;if(n.renames=s.renames,n.delNames=s.delNames,0===l.size&&0===a.size)return n;let c=new Set;for(let e of n.renames){if(c.has(e.to))return n.err="renameCascadeConflict",n;c.add(e.to)}let d=i.map(e=>{let t=null!==e&&"object"==typeof e?e[r.field]:void 0;return{h:e,str:t,kp:wc(t)}}).filter(e=>null!==e.h&&"object"==typeof e.h&&lc(e.h.id)),w=n.renames.filter(e=>{let r=0;return o.forEach(n=>{dc(n,t)===e.from&&r++}),r>=2});if(w.length>0){let e=new Set(w.map(e=>e.from));for(let t of d)if(null!==t.kp&&yc(t.kp,r.kind).some(t=>null!==t.key&&e.has(t.key)))return n.err="renameCascadeDupGroup",n}if(n.renames.length>0){let e=new Set;o.forEach(r=>{let n=dc(r,t);null!==n&&e.add(n)});let i=new Set;if(n.renames.forEach(t=>{e.has(t.to)||i.add(t.to)}),i.size>0)for(let e of d)if(null!==e.kp)for(let t of yc(e.kp,r.kind))if(null!==t.key&&i.has(t.key)&&"y"===t.isActive)return n.err="renameCascadeNameInUse",n}for(let e of d){let t=Dc(e.str,{kind:r.kind,rename:l,del:a});if(t.conflict||t.unsafe)return n.err=t.conflict?"renameCascadeConflict":"renameCascadeUnsupported",n.changes=[],n.nHolders=0,n.nRenameHolders=0,n.nDelHolders=0,n.nExternal=0,n;if(!t.changed)continue;let i=lc(e.h.from)&&""!==e.h.from?e.h.from:"";n.changes.push({id:e.h.id,field:r.field,before:e.str,after:t.str,nRename:t.nRename,nDel:t.nDel,from:i}),t.nRename>0&&n.nRenameHolders++,t.nDel>0&&n.nDelHolders++,""!==i&&n.nExternal++}return n.nHolders=n.changes.length,n}let fc=["userId","timeCreate","userIdUpdate","timeUpdate"],pc={users:"cgrups",grups:"cpemis",pemis:"crules",targets:null},Ic=e=>"string"==typeof e,hc=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Cc=e=>null!==e&&"object"==typeof e,Lc=(e,t)=>"from"===t?(e=>JSON.stringify(void 0===e?"":e))(e):JSON.stringify(null==e?"":e);function bc(e){return Cc(e)&&Ic(e.from)&&""!==e.from}function Nc({keyTable:e,keys:t,r:r,ltdtOld:n,lockExternalRows:i=!0}){let s=new Map;n.forEach(e=>{Cc(e)&&Ic(e.id)&&s.set(e.id,e)});let o=e=>void 0===e?"":e,u=function(e,t){let r=hc(pc,e)?pc[e]:null;return(Array.isArray(t)?t:[]).filter(e=>"id"!==e&&"from"!==e&&"order"!==e&&e!==r&&fc.indexOf(e)<0)}(e,t),l=[],a=(e,t,r,n)=>{l.push({key:e,reason:t,k:r,from:Ic(n)?n:""})},c=e=>null==e?"":e;if(r.add.forEach((e,t)=>{let r=Cc(e)?o(e.from):"";Ic(r)?i&&""!==r?a("saveFromNotAllowed","addFrom",t,r):Cc(e)&&""!==c(e.srcKey)&&a("saveFromNotAllowed","addSrcKey",t,""):a("saveFromNotAllowed","fromType",t,"")}),i&&r.del.forEach((e,t)=>{bc(e)&&a("saveExternalRowChanged","del",t,e.from)}),r.diff.forEach((e,t)=>{let r=Cc(e)&&Ic(e.id)?s.get(e.id):void 0,n=Cc(e)?o(e.from):"",l=void 0===r?"":o(r.from);Ic(n)||n===l?void 0!==r&&Cc(e)&&c(e.srcKey)!==c(r.srcKey)?a(bc(r)?"saveExternalRowChanged":"saveFromNotAllowed","srcKeyChanged",t,bc(r)?r.from:""):i&&void 0!==r&&(bc(r)?n!==r.from?a("saveExternalRowChanged","fromChanged",t,r.from):u.some(t=>Lc(e[t],t)!==Lc(r[t],t))&&a("saveExternalRowChanged","fieldChanged",t,r.from):Ic(n)&&""!==n&&a("saveFromNotAllowed","fromChanged",t,n)):a("saveFromNotAllowed","fromType",t,"")}),0===l.length)return null;let d=[];return l.forEach(e=>{""!==e.from&&d.indexOf(e.from)<0&&d.length<5&&d.push(e.from)}),{key:l[0].key,reason:l[0].reason,k:l[0].k,n:l.length,froms:d}}let Ac={users:{table:"users",pk:"id",fields:["name","email","description","from","srcKey","cgrups","isAdmin","isActive"],serverOnly:["userId","timeCreate","userIdUpdate","timeUpdate"],orderKey:"order"},grups:{table:"grups",pk:"id",fields:["name","description","from","srcKey","cpemis"],serverOnly:["userId","timeCreate","userIdUpdate","timeUpdate"],orderKey:"order"},pemis:{table:"pemis",pk:"id",fields:["name","description","from","srcKey","crules"],serverOnly:["userId","timeCreate","userIdUpdate","timeUpdate"],orderKey:"order"},targets:{table:"targets",pk:"id",fields:["description","from","srcKey"],serverOnly:["userId","timeCreate","userIdUpdate","timeUpdate"],orderKey:"order"}};function xc(e){if("string"!=typeof e||(t=Ac,r=e,!Object.prototype.hasOwnProperty.call(t,r)))throw new Error(`invalid keyTable of contract: ${String(e)}`);var t,r;return Ac[e]}let Ec=e=>"string"==typeof e,Tc=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),vc=Object.create(null);function Sc(e){return Ec(e)&&(t=vc,r=e,Object.prototype.hasOwnProperty.call(t,r))?vc[e]:null;var t,r}Object.keys(uc).forEach(e=>{vc[uc[e].holder]={table:e,field:uc[e].field,kind:uc[e].kind}});let Zc=e=>{let t=Tc(e)?e.id:void 0;return Ec(t)?t:"number"==typeof t&&Number.isFinite(t)?String(t):null};function jc(e,t){let r=wc(e),n=new Set;return null===r||yc(r,t).forEach(e=>{null!==e.key&&"y"===e.isActive&&n.add(e.key)}),n}function Yc({keyTable:e,rowsNew:t,rowsOld:r}){let n=new Map;(Array.isArray(r)?r:[]).forEach(e=>{let t=Zc(e);null!==t&&n.set(t,e)});let i=new Set;return(Array.isArray(t)?t:[]).forEach(t=>{let r=Zc(t),s=null!==r&&n.has(r)?n.get(r):null;(function(e,t,r){let n=Sc(e);if(null===n||!Tc(r))return[];let i=Tc(t)?jc(t[n.field],n.kind):new Set,s=[];return jc(r[n.field],n.kind).forEach(e=>{i.has(e)||s.push(e)}),s})(e,s,t).forEach(e=>i.add(e)),function(e,t,r){let n=Sc(e);if(null===n||!Tc(t)||!Tc(r))return[];let i=jc(r[n.field],n.kind),s=[];return jc(t[n.field],n.kind).forEach(e=>{i.has(e)||s.push(e)}),s}(e,s,t).forEach(e=>i.add(e))}),i}function Xc({keyTable:e,decl:t,refRows:r}){let n=Sc(e);return Array.isArray(t)&&null!==n?t.filter(e=>{return t=function(e,t,r){let n=new Set;return(Array.isArray(e)?e:[]).forEach(e=>{let i=dc(e,t),s=Zc(e);null!==i&&null!==s&&cc(i,"targets"===t?"rule":"ref")===r&&n.add(s)}),[...n].sort()}(r,n.table,e.name),i=e.ids,!(t.length===i.length&&t.every((e,t)=>e===i[t]));var t,i}).length:Array.isArray(t)?t.length:1}function zc({subject:e,refRows:t}){let r=function({subject:e,rows:t}){let r=null!==e&&"object"==typeof e?e.id:void 0,n=null!==e&&"object"==typeof e?e.name:void 0;if("string"!=typeof r||""===r||"string"!=typeof n||""===n)return"noSubject";let i=(Array.isArray(t)?t:[]).filter(e=>null!==e&&"object"==typeof e),s=i.find(e=>e.id===r);return void 0!==s?s.name===n?"ok":"renamed":!0===e.saved?"gone":i.some(e=>e.name===n)?"taken":"ok"}({subject:e,rows:t});return"ok"===r?null:{key:"saveSubjectChanged",reason:r}}let Gc=e=>"string"==typeof e;function Wc(e,t,r){if(!Array.isArray(e))return-1;let n=new Map,i=new Map;for(let e of Array.isArray(t)?t:[])null!==e&&"object"==typeof e&&(Gc(e.id)&&Gc(e[r])&&n.set(e.id,e[r]),Gc(e[r])&&i.set(e[r],(i.get(e[r])||0)+1));let s=new Map;for(let t=0;t<e.length;t++){let n=e[t],i=null===n||"object"!=typeof n?void 0:n[r];Gc(i)&&(s.has(i)||s.set(i,[]),s.get(i).push(t))}let o=-1;for(let[t,r]of s){if(r.length<2)continue;if(!((i.get(t)||0)>=2&&r.length<=i.get(t)&&r.every(r=>{let i=e[r].id;return Gc(i)&&n.get(i)===t})&&new Set(r.map(t=>e[t].id)).size===r.length)){let i=r.find(r=>!(Gc(e[r].id)&&n.get(e[r].id)===t)),s=void 0===i?r[1]:i;(o<0||s<o)&&(o=s)}}return o}let Kc=e=>"string"==typeof e;function kc(e,t,r=()=>!0){if(!Array.isArray(e))return-1;let n=new Set;for(let i=0;i<e.length;i++){let s=e[i];if(!r(s))continue;let o=null===s||"object"!=typeof s?void 0:s[t];if(Kc(o)){if(n.has(o))return i;n.add(o)}}return-1}let Fc={targets:0,pemis:1,grups:2,users:3};function Vc(e,t,r,n=[]){let i=e=>Object.prototype.hasOwnProperty.call(Fc,e)?Fc[e]:1/0,s=[...new Set(t)].sort((e,t)=>i(e)-i(t)||(e<t?-1:e>t?1:0));if(n.length>0){let e=Math.max(...n.map(i));if(s.some(t=>i(t)<=e))throw new Error("tab lock order violation")}let o=r;for(let t=s.length-1;t>=0;t--){let r=o,n=s[t];o=()=>e([n],r)}return o()}function Hc(e){return"email"===e||"name"===e?e:null}function Uc(e,t,r){if(!Array.isArray(e))return null;let n=e=>null!==e&&"object"==typeof e,i=e=>n(e)&&"y"===e.isActive,s=Array.isArray(t)?t.filter(n):[],o=(e,t,r,i,s,o)=>{let u=((e,t,r,i)=>{let s=new Map;for(let e of t)Kc(e.id)&&s.set(e.id,e);return e.findIndex(e=>{let t=n(e)?e[r]:void 0,o=n(e)&&Kc(e.id)?s.get(e.id):void 0;return(void 0===o||t!==o[r])&&!i(t)})})(e,r,i,s),l=Wc(e,r,i);if(u<0&&l<0)return null;let a=u>=0&&(l<0||u<=l);return{key:a?"saveRowFieldInvalid":"saveRowFieldDuplicate",reason:a?`${o}Invalid`:`${o}Duplicate`,field:i,k:t[a?u:l]}},u=o(e,e.map((e,t)=>t),s,"email",e=>Kc(e)&&e.length>0,"email");if(null!==u)return u;let l=Hc(r);if(null===l)return null;let a=[],c=[];return e.forEach((e,t)=>{i(e)&&(a.push(t),c.push(e))}),o(c,a,s.filter(i),l,e=>Kc(e)&&e.trim().length>0,"mapKey")}function Bc(e){let t=Array.isArray(e)?e.filter(e=>_t(e)):[];return{user:1===t.length?t[0]:null,count:t.length}}let Rc=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),Oc=e=>Kc(e)&&e.length>0;function Pc(e){return Rc(e)?Oc(e.from)&&Oc(e.srcKey)?e.srcKey:Oc(e.id)?e.id:"":""}async function Qc(e,t,r){let n=Hc(t);if(null!==n)return Bc(await e.select({[n]:r,isActive:"y"}));let i=await e.select({id:r}),s=await e.select({srcKey:r}),o=new Map;for(let e of[...Array.isArray(i)?i:[],...Array.isArray(s)?s:[]])Rc(e)&&Oc(e.id)&&o.set(e.id,e);let u=[...o.values()].filter(e=>Pc(e)===r);return 1===u.length&&"y"!==u[0].isActive?{user:null,count:0}:Bc(u)}function Jc(e,t){if(!Array.isArray(e))return null;let r=new Map;e.forEach((e,t)=>{let n=Pc(e);""!==n&&(r.has(n)||r.set(n,[]),r.get(n).push(t))});for(let n=0;n<e.length;n++){let i=e[n],s=Pc(i);if(""===s||!t(i,n))continue;let o=Oc(i.from);for(let t of r.get(s)){if(t===n)continue;let r=e[t],s=Oc(r.from);if(o||s){if(o&&s&&i.from===r.from){if(Oc(i.srcKey)===Oc(r.srcKey))continue;return{k:n,kOther:t,kind:"sameFrom"}}return{k:n,kOther:t,kind:o&&s?"otherFrom":"adminId"}}}}return null}function $c(e){if(!e||0===e.changes.length)return null;let t=oc(e.changes.map(e=>({id:e.id,[e.field]:e.after})));return null===t?null:"htmlMarkup"===t.reason?"htmlMarkupNotAllowed":"saveRowFieldInvalid"}async function _c({plan:e,holdersOld:t,woItems:r,procOrm:n,userId:i,srLog:s,writeMain:o}){if(!e||0===e.changes.length)return await o();let u=$c(e);if(null!==u)return Promise.reject(u);let l=new Map;t.forEach(e=>{null!==e&&"object"==typeof e&&l.set(e.id,e)});let a=e.changes.map(e=>{let t=l.get(e.id);return t?{...t}:{id:e.id,[e.field]:e.before}}),c=e.changes.map(e=>({id:e.id,[e.field]:e.after})),d=e.changes.map(e=>e.id).filter(e=>"string"==typeof e&&""!==e).flatMap(e=>{let t=yu(e,{length:100,omission:"…"});return t===e?[e]:[e,t]}).sort((e,t)=>t.length-e.length),w=e=>{let t=e;return d.forEach(e=>{t=t.split(`id[${e}]`).join("id[*]")}),t.replace(/id\[[^\]]*\]/g,"id[*]")},y=e=>w("string"==typeof e?e:e&&e.message||String(e)),g=null,D="holder";try{await n(i,e.holder,"save",c,{mustExist:!0}),D="main",g=await o()}catch(t){let n=!0,o="";try{let t=await r[e.holder].save(a,{merge:!1});Array.isArray(t)&&t.some(e=>e&&0===e.ok)&&(n=!1,o="save result ok:0")}catch(e){n=!1,o=y(e)}return n?(s.warn({event:"refCascade-restored",raw:y(t),userId:i,keyTable:e.keyTable,holder:e.holder,nHolders:e.changes.length}),"holder"===D?Promise.reject("string"==typeof t?w(t):t instanceof Error?new Error(w(t.message)):t):Promise.reject(t)):(s.error({event:"refCascade-restore-error",msg:"saveCascadePartial",raw:y(t),rawRestore:o,userId:i,keyTable:e.keyTable,holder:e.holder,nHolders:e.changes.length}),Promise.reject("saveCascadePartial"))}return s.info({event:"refCascade-done",userId:i,keyTable:e.keyTable,holder:e.holder,nRename:e.renames.length,nDelName:e.delNames.length,nHolders:e.nHolders,nRenameHolders:e.nRenameHolders,nDelHolders:e.nDelHolders,nExternal:e.nExternal}),g}let qc=e=>null!==e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;let ed={baselineMismatch:"saveStale",rowNotFound:"saveStale",baselineFormat:"saveBaselineFormat"};function td(e){let t=null!==e&&"object"==typeof e?e:{},r={};return void 0!==t.baseline&&null!==t.baseline&&(r.baseline=t.baseline),!0===t.returnRows&&(r.returnRows=!0),void 0!==t.subject&&null!==t.subject&&(r.subject=t.subject),void 0!==t.refs&&null!==t.refs&&(r.refs=t.refs),r}function rd(e,t,{srLog:r,withTabLocks:n,guardWrite:i,lockSave:s,mappingBy:o="id",cascadeRename:u=!0,lockExternalRows:l=!0}){let a=async(a,c,d,w,y={})=>{if(!Array.isArray(d)||!d.every(qc))return r.error({event:"updateTabItems-validate-error",keyTable:a,msg:"saveRowFieldInvalid",reason:"rowsInvalid",row:-1,field:""}),Promise.reject("saveRowFieldInvalid");let g=De(y,"baseline",null);if(null!==g&&!uu(g))return r.error({event:"updateTabItems-stale-error",keyTable:a,userId:c,msg:"saveBaselineFormat",reason:"baselineFormat",n:0}),Promise.reject("saveBaselineFormat");let D=De(y,"subject",null),m=De(y,"refs",null),M=Sc(a),f=null,p=null,I=null;if((null!==D||null!==m)&&(f=M,p=null===D?null:Tc(h=D)&&Ec(h.id)&&""!==h.id&&Ec(h.name)&&""!==h.name&&"boolean"==typeof h.saved?{id:h.id,name:h.name,saved:h.saved}:null,I=null===m?null:function(e){if(!Array.isArray(e)||e.length>5e3)return null;let t=new Set,r=[];for(let n of e){if(!Tc(n)||!Ec(n.name)||t.has(n.name)||!Array.isArray(n.ids)||n.ids.length>1e3||!n.ids.every(Ec))return null;t.add(n.name),r.push({name:n.name,ids:[...new Set(n.ids)].sort()})}return r}(m),null===f||null!==D&&(null===p||"targets"===f.table)||null!==m&&null===I))return r.error({event:"updateTabItems-identity-error",keyTable:a,userId:c,msg:"saveIdentityFormat",reason:"format",n:0}),Promise.reject("saveIdentityFormat");var h;let C=!0===De(y,"returnRows",!1),L=De(y,"pickKeysOnly",null),b=[];Er(L)||En(d,e=>{!0===De(e,"_isNew")&&b.push(De(e,"id",""))});let N=async e=>{e=Pt(e=nc(e,Wa[a].keys),(e,t)=>(e.order=t+1,e));let t=(e,t,n={})=>{let i=null,s=Object.create(null);return En(e,(e,o)=>{let u=De(e,t,"");return er(u)?!0!==n.skipDup&&un(s,u)?(r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:t,msg:"saveRowFieldDuplicate",row:o,value:u}),i="saveRowFieldDuplicate",!1):void(s[u]=!0):(r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:t,msg:"saveRowFieldInvalid",row:o}),i="saveRowFieldInvalid",!1)}),i},n=null;if(tc(a,["targets"])&&(n=t(e,"id"),null!==n))return Promise.reject(n);if(tc(a,["pemis","grups"])&&(n=t(e,"name",{skipDup:!0}),null!==n))return Promise.reject(n);if(e=Pt(e,e=>{let t=De(e,"id");return"number"==typeof t&&Number.isFinite(t)?{...e,id:String(t)}:e}),tc(a,["pemis","grups","users"])){let t=kc(e,"id",e=>er(De(e,"id")));if(t>=0)return r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:"id",msg:"saveRowFieldDuplicate",row:t,value:De(e,[t,"id"])}),Promise.reject("saveRowFieldDuplicate")}return e},A=null;if(Er(L)){let e=kc(Pt(d,e=>{let t=De(e,"id");return"number"==typeof t&&Number.isFinite(t)?{id:String(t)}:e}),"id",e=>er(De(e,"id")));if(e>=0)return r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:"id",msg:"saveRowFieldDuplicate",row:e,value:De(d,[e,"id"])}),Promise.reject("saveRowFieldDuplicate")}else A=await N(d);let x=null;return await s(`updateTabItems:${a}`,c,()=>{return s=()=>i({tables:[a],read:()=>e[a].select(),baseline:null===g?void 0:g,contract:xc(a),write:async i=>{Er(L)?(d=Pt(d,e=>{let t=De(e,"id");return"number"==typeof t&&Number.isFinite(t)?{...e,id:String(t)}:e}),d=function(e,t,r,n){let i=Object.create(null);Array.isArray(t)&&En(t,e=>{let t=De(e,r,"");er(t)&&(i[t]=e)});let s=Pa(e,"order");return s=Pt(s,e=>{let t={...e},s=De(e,r,""),o=Ja(i,s,null);return null!==o&&En(n,e=>{un(o,e)&&(t[e]=o[e])}),t}),s}(i,d,w,L),r.info({event:"updateTabItems-pickKeysOnly",keyTable:a,userId:c,pickKeysOnly:L}),d=await N(d)):d=A,l&&(d=function(e,t){let r=new Map;return(Array.isArray(t)?t:[]).forEach(e=>{Cc(e)&&Ic(e.id)&&r.set(e.id,e)}),e.map(e=>{let t=Cc(e)&&Ic(e.id)?r.get(e.id):void 0;return void 0!==t&&bc(t)&&hc(t,"order")?{...e,order:t.order}:e})}(d,i));let s=tc(a,["pemis","grups"]);if(s){let e=Wc(d,i,"name");if(e>=0)return r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:"name",msg:"nameDuplicate",row:e,value:De(d,[e,"name"])}),Promise.reject("nameDuplicate")}if("users"===a){let e=Uc(d,i,o);if(null!==e)return r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:e.field,msg:e.key,reason:e.reason,row:e.k}),Promise.reject(e.key)}if(yi(b)>0){let e=Object.create(null);if(En(i,t=>{e[De(t,"id","")]=!0}),b.some(t=>!0===e[t]))return Promise.reject("saveNewRowExists")}let y=d,D=null;if(s||"users"===a){let e=y.filter(e=>er(De(e,"id"))),t=y.filter(e=>!er(De(e,"id")));D=rc(i,e,"id"),D.add=[...D.add,...t]}else D=rc(i,y,w);let m=Wa[a].keys;if(D=function({keys:e,r:t,ltdtOld:r,all:n=!1}){let i=new Map;r.forEach(e=>{Cc(e)&&Ic(e.id)&&i.set(e.id,e)});let s=(Array.isArray(e)?e:[]).filter(e=>fc.indexOf(e)<0),o=[],u=[...t.same];return t.diff.forEach(e=>{let t=Cc(e)&&Ic(e.id)?i.get(e.id):void 0;void 0!==t&&(!0===n||bc(t))&&s.every(r=>Lc(e[r],r)===Lc(t[r],r))?u.push(e):o.push(e)}),{add:t.add,del:t.del,diff:o,same:u}}({keys:m,r:D,ltdtOld:i,all:!0}),D=function({r:e,ltdtOld:t,all:r=!1}){let n=new Map;t.forEach(e=>{Cc(e)&&Ic(e.id)&&n.set(e.id,e)});let i=e.diff.map(e=>{let t=Cc(e)&&Ic(e.id)?n.get(e.id):void 0;if(void 0===t||!0!==r&&!bc(t))return e;let i={...e};return fc.forEach(e=>{hc(t,e)?i[e]=t[e]:delete i[e]}),i});return{add:e.add,del:e.del,diff:i,same:e.same}}({r:D,ltdtOld:i,all:!0}),null!==M){let e=function({keyTable:e,decl:t,subject:r=null,rowsNew:n,rowsOld:i,refRows:s}){if(null===Sc(e))return{key:"saveIdentityFormat",reason:"refNoTarget",n:0};let o=Yc({keyTable:e,rowsNew:n,rowsOld:i});if(null===t&&null===r)return o.size>0?{key:"saveIdentityRequired",reason:"identityRequired",n:o.size}:null;let u=null===t?[]:t,l=Xc({keyTable:e,decl:u,refRows:s});if(l>0)return{key:"saveRefChanged",reason:"refChanged",n:l};let a=new Set(u.map(e=>e.name));null!==r&&a.add(r.name);let c=[...o].filter(e=>!a.has(e));return c.length>0?{key:"saveRefChanged",reason:"refIncomplete",n:c.length}:null}({keyTable:a,decl:I,subject:p,rowsNew:[...D.add,...D.diff],rowsOld:i,refRows:x});if(null!==e)return r.error({event:"updateTabItems-identity-error",keyTable:a,userId:c,msg:e.key,reason:e.reason,n:e.n}),Promise.reject(e.key)}let f=Nc({keyTable:a,keys:m,r:D,ltdtOld:i,lockExternalRows:l});if(null!==f)return r.error({event:"updateTabItems-external-error",keyTable:a,userId:c,msg:f.key,reason:f.reason,n:f.n,froms:f.froms}),Promise.reject(f.key);if(null===g&&l&&function({r:e,ltdtOld:t}){let r=new Map;return t.forEach(e=>{Cc(e)&&Ic(e.id)&&r.set(e.id,e)}),e.diff.some(e=>{let t=Cc(e)&&Ic(e.id)?r.get(e.id):void 0;return void 0!==t&&bc(t)})}({r:D,ltdtOld:i}))return r.error({event:"updateTabItems-stale-error",keyTable:a,userId:c,msg:"saveBaselineRequired",reason:"externalAssignNoBaseline"}),Promise.reject("saveBaselineRequired");if("users"===a&&null===Hc(o)){let e=e=>`${er(e.from)?`x:${e.from}`:"a"}|${Pc(e)}`,t=new Map(i.filter(e=>null!==e&&"object"==typeof e&&er(e.id)).map(t=>[t.id,e(t)])),n=Jc(d,r=>!(er(r.id)&&t.has(r.id)&&t.get(r.id)===e(r)));if(null!==n)return r.error({event:"updateTabItems-ckKey-error",keyTable:a,key:"id",msg:"loginIdCollision",reason:"otherFrom"===n.kind?"srcKeyOtherFrom":"sameFrom"===n.kind?"srcKeyClaimTwice":"adminIdIsSrcKey",row:n.k}),Promise.reject("loginIdCollision")}let h=oc([...D.add,...D.diff],{rowsIdOnly:D.same});if(null!==h){let e="saveRowFieldInvalid";return"htmlMarkup"===h.reason?e="htmlMarkupNotAllowed":"idDuplicate"===h.reason&&(e="saveRowFieldDuplicate"),r.error({event:"updateTabItems-validate-error",keyTable:a,msg:e,reason:h.reason,row:h.k,field:h.field}),Promise.reject(e)}let E=async()=>{yi(D.del)>0&&await t(c,a,"del",D.del,{mustExist:!0}),yi(D.add)>0&&await t(c,a,"insert",D.add),yi(D.diff)>0&&await t(c,a,"save",D.diff,{mustExist:!0})},T=async(t=null)=>{if(!C)return null;try{let r=await e[a].select(),n={rows:Pa(r,"order"),others:{}};if(null!==t){let r=await e[t].select();n.others[t]=Pa(r,"order")}return n}catch(e){return r.error({event:"updateTabItems-readBack-error",keyTable:a,userId:c,msg:"getDataError",raw:"string"==typeof e?e:e&&e.message||String(e)}),null}},v=tc(a,["targets","pemis","grups"])?function(e,t,r,n=[]){let i=e=>{let t=null!==e&&"object"==typeof e?e.id:void 0;return lc(t)&&""!==t?t:"number"==typeof t&&Number.isFinite(t)?String(t):null},s=new Set;r.forEach(e=>{let t=i(e);null!==t&&s.add(t)});let o=new Map;t.forEach(e=>{null!==e&&"object"==typeof e&&lc(e.id)&&!s.has(e.id)&&lc(e.name)&&(o.has(e.name)||o.set(e.name,[]),o.get(e.name).push(e.id))});let u=new Set(s);return[...t,...n].forEach(e=>{null!==e&&"object"==typeof e&&lc(e.id)&&u.add(e.id)}),r.map((t,r)=>{let n=i(t);if(null===n&&"targets"!==e&&null!==t&&"object"==typeof t&&lc(t.name)&&o.has(t.name)&&o.get(t.name).length>0&&(n=o.get(t.name).shift()),null===n){let e=r;for(;u.has(`__new__${e}`);)e++;n=`__new__${e}`,u.add(n)}return{...t,id:n}})}(a,i,y):y,S=tc(a,["targets","pemis","grups"])?mc({keyTable:a,rowsOld:i,rowsNew:v,opt:{cascadeRename:u}}):null;if(null!==S&&(S.renames.length>0||S.delNames.length>0)){let s=uc[a].holder;return await Vc(n,[s],async()=>{let n=await e[s].select(),o=Mc({keyTable:a,rowsOld:i,rowsNew:v,holdersOld:n,opt:{cascadeRename:u}}),l=null!==o.err?o.err:$c(o);return null!==l?(r.error({event:"updateTabItems-refCascade-error",keyTable:a,msg:l}),Promise.reject(l)):(await _c({plan:o,holdersOld:n,woItems:e,procOrm:t,userId:c,srLog:r,writeMain:E}),await T(o.changes.length>0?s:null))},[a])}return await E(),await T()}}).catch(((e,t)=>n=>{let i=function(e){return"string"==typeof e?e:null!==e&&"object"==typeof e&&"string"==typeof e.key?e.key:null}(n);if("string"==typeof i&&Object.prototype.hasOwnProperty.call(ed,i)){let s=0,o=i;return null!==n&&"object"==typeof n&&Array.isArray(n.changed)&&(s=n.changed.length+n.removed.length+n.added.length,o=n.changed.length>0?"rowChanged":n.removed.length>0?"rowRemoved":n.added.length>0?"rowAdded":!0===n.reordered?"rowReordered":i,s=s>0?s:!0===n.reordered?1:0),r.error({event:"updateTabItems-stale-error",keyTable:e,userId:t,msg:ed[i],reason:o,n:s}),Promise.reject(ed[i])}return"rowsInvalid"===i?(r.error({event:"updateTabItems-rows-invalid",keyTable:e,userId:t,msg:"saveWriteFail",reason:"rowsInvalid"}),Promise.reject("saveWriteFail")):Promise.reject(n)})(a,c)),null===f?s():Vc(n,[f.table],async()=>{if(x=await e[f.table].select(),null!==p){let e=zc({subject:p,refRows:x});if(null!==e)return r.error({event:"updateTabItems-identity-error",keyTable:a,userId:c,msg:e.key,reason:e.reason,n:1}),Promise.reject(e.key)}return await s()});var s})},c=(e,t,n)=>{let i=id(n),s="string"==typeof n?n:n&&n.message||String(n);return r.error({event:e,userId:t,msg:i,...s!==i?{raw:s}:{}}),i},d=(e,t)=>!0===De(t,"returnRows",!1)&&null!==e&&"object"==typeof e&&Array.isArray(e.rows)?{msg:"saveTabItemsSuccess",rows:e.rows,others:e.others}:"saveTabItemsSuccess";return{updateTargets:async(e,t,n={})=>{let i=null,s=td(n);try{i=await a("targets",e,t,"id",s)}catch(t){throw c("updateTargets-error",e,t)}return r.info({event:"updateTargets-success",userId:e}),d(i,s)},updatePemis:async(e,t,n={})=>{let i=null,s=td(n);try{i=await a("pemis",e,t,"name",s)}catch(t){throw c("updatePemis-error",e,t)}return r.info({event:"updatePemis-success",userId:e}),d(i,s)},updateGrups:async(e,t,n={})=>{let i=null,s=td(n);try{i=await a("grups",e,t,"name",s)}catch(t){throw c("updateGrups-error",e,t)}return r.info({event:"updateGrups-success",userId:e}),d(i,s)},updateUsers:async(e,t,n={})=>{let i=null;try{i=await a("users",e,t,"id",n)}catch(t){throw c("updateUsers-error",e,t)}return r.info({event:"updateUsers-success",userId:e}),d(i,n)}}}let nd=null;function id(e,t="saveWriteFail"){return null===nd&&(nd=new Set(Object.keys(sc({}).eng))),"string"==typeof e&&nd.has(e)?e:t}let sd=e=>"string"==typeof e,od=e=>null!==e&&"object"==typeof e,ud=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),ld=e=>{let t=od(e)?e.id:void 0;return sd(t)&&""!==t?t:"number"==typeof t&&Number.isFinite(t)?String(t):null};function ad(e,t){let r=new Set;t.forEach(e=>{od(e)&&sd(e.srcKey)&&r.add(e.srcKey)});let n=new Set,i=new Set;e.forEach(e=>{if(!od(e))return;let t=(e=>sd(e.srcKey)&&""!==e.srcKey?e.srcKey:sd(e.id)?e.id:null)(e);null!==t&&n.add(t),null!==t&&!r.has(t)&&sd(e.name)&&i.add(e.name)});let s=0;return t.forEach(e=>{od(e)&&sd(e.srcKey)&&!n.has(e.srcKey)&&sd(e.name)&&i.has(e.name)&&s++}),s}let cd=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),dd=e=>null==e||""===e,wd={users:"cgrups",grups:"cpemis",pemis:"crules",targets:null};function yd({woItems:e,procOrm:t,lockTabs:r,srLog:n,mappingBy:i="id",cascadeRename:s=!0}){let o=new Map;return{syncAndReplaceTabs:async(u,l,a)=>await Vc(r,[a],async()=>{let c=(e,t={})=>n.error({event:"syncAndReplaceTabs-error",msg:e,keyTable:a,...t}),d=De(l,"from","");if(!er(d))return c("invalidFrom"),Promise.reject("invalidFrom");let w=De(l,"rows",[]);if(!Er(w))return c("invalidRows"),Promise.reject("invalidRows");let y=w.findIndex(e=>!qc(e));if(y>=0)return c("invalidRows",{reason:"rowInvalid",from:d,row:y}),Promise.reject("invalidRows");let g=w.findIndex(e=>cd(e,"id"));if(g>=0)return c("idNotAllowed",{from:d,row:g,field:"id"}),Promise.reject("idNotAllowed");let D=w.findIndex(e=>{return!("string"==typeof(t=e.srcKey)&&""!==t.trim()&&Buffer.byteLength(t,"utf8")<=1978&&vl(t)===t);var t});if(D>=0)return c("srcKeyInvalid",{from:d,row:D,field:"srcKey"}),Promise.reject("srcKeyInvalid");let m=kc(w,"srcKey");if(m>=0)return c("srcKeyDuplicate",{from:d,row:m,field:"srcKey"}),Promise.reject("srcKeyDuplicate");let M=wd[a],f=null!==M?(p=M,w.map(e=>od(e)&&ud(e,p))):null;var p;let I=nc(w.map(e=>{let t={...e,from:d};return"targets"===a&&(t.id=t.srcKey),t}),Wa[a].keys),h="grups"===a||"pemis"===a?"name":null;if(null!==h){let e=I.findIndex(e=>!er(De(e,h)));if(e>=0)return c("invalidRows",{reason:"nameInvalid",from:d,row:e,field:h}),Promise.reject("invalidRows");let t=kc(I,"name");if(t>=0)return c("invalidRows",{reason:"nameDuplicate",from:d,row:t,field:"name"}),Promise.reject("invalidRows")}if("users"===a){let e=function(e,t){let r=Hc(t);if(null===r||!Array.isArray(e))return null;let n=e=>null!==e&&"object"==typeof e&&"y"===e.isActive,i=e.findIndex(e=>n(e)&&!(Kc(e[r])&&e[r].trim().length>0));if(i>=0)return{reason:"mapKeyInvalid",k:i};let s=kc(e,r,n);return s>=0?{reason:"mapKeyDuplicate",k:s}:null}(I,i);if(null!==e)return c("invalidRows",{reason:e.reason,from:d,row:e.k,field:i}),Promise.reject("invalidRows")}let C=oc(I);if(null!==C){let e="htmlMarkup"===C.reason?"htmlMarkupNotAllowed":"invalidRows";return c(e,{reason:C.reason,from:d,row:C.k,field:C.field}),Promise.reject(e)}let L=null;try{L=await e[a].select()}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),r=id(e,"anUnexpectedErrorOccurred");return c(r,{raw:t,from:d,step:"select"}),Promise.reject(r)}let b=L.filter(e=>null!==e&&"object"==typeof e),N=b.filter(e=>e.from===d),A=b.filter(e=>e.from!==d),x="name"===h?"name":"users"===a?Hc(i):null;if(null!==x){let e=function(e,t,r,n,i={}){if(!Array.isArray(e)||!Array.isArray(t))return-1;let s=!0===i.onlyActive,o=new Set;for(let e of t)null!==e&&"object"==typeof e&&e.from!==r&&(s&&"y"!==e.isActive||Kc(e[n])&&o.add(e[n]));for(let t=0;t<e.length;t++){let r=e[t];if(null!==r&&"object"==typeof r&&(!s||"y"===r.isActive)&&Kc(r[n])&&o.has(r[n]))return t}return-1}(I,b,d,x,{onlyActive:"users"===a});if(e>=0)return c("invalidRows",{reason:"users"===a?"mapKeyOtherFrom":"nameOtherFrom",from:d,row:e,field:x}),Promise.reject("invalidRows")}if("users"===a&&null===Hc(i)){let e=Jc([...A,...I],(e,t)=>t>=A.length);if(null!==e)return c("loginIdCollision",{reason:"otherFrom"===e.kind?"srcKeyOtherFrom":"srcKeyIsAdminId",from:d,row:e.k-A.length,field:"srcKey"}),Promise.reject("loginIdCollision")}let E=new Map,T=new Map;for(let e of N)if(er(e.srcKey)){if(E.has(e.srcKey))return c("srcKeyConflict",{reason:"dupInDb",from:d}),Promise.reject("srcKeyConflict");E.set(e.srcKey,e)}else er(e.id)&&T.set(e.id,e);for(let e of E.keys())if(T.has(e))return c("srcKeyConflict",{reason:"claimTwice",from:d}),Promise.reject("srcKeyConflict");let v=I.map(e=>{let t=E.get(e.srcKey);return void 0===t&&T.has(e.srcKey)?{old:T.get(e.srcKey),migrate:!0}:void 0===t?{old:null,migrate:!1}:{old:t,migrate:!1}}),S=new Set(b.map(e=>e.id)),Z=[];for(let e=0;e<I.length;e++){let t=v[e];if(null===t.old){if("targets"===a){if(S.has(I[e].id))return c("invalidRows",{reason:"idTaken",from:d,row:e,field:"srcKey"}),Promise.reject("invalidRows");Z.push(I[e].id)}else{let e=`${Cu()}`;for(;S.has(e);)e=`${Cu()}`;Z.push(e)}S.add(Z[e])}else Z.push(t.old.id)}let j=I.map((e,t)=>({...e,id:Z[t]}));if(null!==M&&f.some(e=>!1===e)){let e=e=>null===oc([{id:"keep",[M]:e}]),t="users"===a?function({rows:e,hasKey:t,rowsOldSameFrom:r,mappingBy:n="id",key:i="cgrups",isKeepable:s=()=>!0}){let o=new Map,u=new Map;r.forEach(e=>{od(e)&&(sd(e.id)&&o.set(e.id,e),"email"!==n&&"name"!==n||!sd(e[n])||""===e[n]||(u.has(e[n])||u.set(e[n],[]),u.get(e[n]).push(e)))});let l="email"===n||"name"===n,a=0,c=0,d=0;return{rows:e.map((e,r)=>{if(!0===t[r]||!od(e))return e;let w=ld(e),y=null;if(null!==w){if(y=o.has(w)?o.get(w):null,null!==y&&l&&(void 0===e[n]?"":e[n])!==(void 0===y[n]?"":y[n])&&(y=null,d++),null!==y&&l&&sd(e[n])&&""!==e[n]){let t=u.get(e[n]);void 0!==t&&t.some(e=>e!==y)&&(y=null,d++)}}else if(l&&sd(e[n])&&""!==e[n]){let t=u.get(e[n]);y=void 0!==t&&1===t.length?t[0]:null,void 0!==t&&t.length>1&&d++}return null!==y&&ud(y,i)?s(y[i])?(a++,{...e,[i]:y[i]}):(c++,e):e}),nKeep:a,nSkip:c,nConflict:d}}({rows:j,hasKey:f,rowsOldSameFrom:N,mappingBy:i,isKeepable:e}):function({rows:e,hasKey:t,rowsOldSameFrom:r,key:n,cascadeRename:i=!0,isKeepable:s=()=>!0}){let o=e=>void 0===e.name?"":e.name,u=new Set;e.forEach(e=>{let t=ld(e);null!==t&&u.add(t)});let l=new Map,a=new Map;r.forEach(e=>{od(e)&&sd(e.id)&&(l.set(e.id,e),sd(e.name)&&!u.has(e.id)&&(a.has(e.name)||a.set(e.name,[]),a.get(e.name).push(e)))});let c=0,d=0,w=0;return{rows:e.map((e,r)=>{if(!0===t[r]||!od(e))return e;let u=ld(e),y=null;if(null!==u)y=l.has(u)?l.get(u):null,null===y||o(y)===o(e)||!1!==i&&sd(o(y))&&sd(o(e))||(y=null,w++);else if(sd(e.name)&&a.has(e.name)){let t=a.get(e.name);1===t.length?y=t[0]:w++}return null!==y&&ud(y,n)?s(y[n])?(c++,{...e,[n]:y[n]}):(d++,e):e}),nKeep:c,nSkip:d,nConflict:w}}({rows:j,hasKey:f,rowsOldSameFrom:N,key:M,cascadeRename:s,isKeepable:e});j=t.rows,t.nKeep>0&&n.info({event:"syncAndReplaceTabs-keepAssign",keyTable:a,from:d,field:M,n:t.nKeep}),t.nSkip>0&&n.warn({event:"syncAndReplaceTabs-keepAssign-skip",keyTable:a,from:d,field:M,n:t.nSkip,reason:"notKeepable"}),t.nConflict>0&&n.warn({event:"syncAndReplaceTabs-keepAssign-skip",keyTable:a,from:d,field:M,n:t.nConflict,reason:"identityConflict"})}let Y=Wa[a].keys.filter(e=>"id"!==e&&"srcKey"!==e&&"from"!==e&&e!==M&&fc.indexOf(e)<0),X=null!==M?[...Y,M]:Y,z=[],G=[],W=[],K=0,k=0,F=new Map;j.forEach((e,t)=>{let r=v[t];if(null===r.old)return void z.push({...e,id:Z[t],srcKey:e.srcKey,from:d});let n=r.old;if(!(r.migrate||X.some(t=>{return r=e[t],i=n[t],!(dd(r)||dd(i)?dd(r)&&dd(i):"object"==typeof r||"object"==typeof i?JSON.stringify(r)===JSON.stringify(i):String(r)===String(i));var r,i})))return void K++;r.migrate&&k++;let i={...n};X.forEach(t=>{i[t]=e[t]}),i.srcKey=e.srcKey,i.from=d,G.push(i),W.push({...n}),F.set(n.id,i)});let V=new Set(v.filter(e=>null!==e.old).map(e=>e.old.id)),H=N.filter(e=>!V.has(e.id)),U=null,B=null;if(cd(uc,a)){let e=N.filter(e=>V.has(e.id)).map(e=>F.get(e.id)||e);if(U={rowsOld:b,rowsNew:[...A,...e,...z]},B=mc({keyTable:a,rowsOld:U.rowsOld,rowsNew:U.rowsNew,opt:{cascadeRename:s}}),"grups"===a||"pemis"===a){let e=ad(N,I);((e,t,r)=>{let n=`${e}\0${t}`;r>0?o.set(n,{keyTable:e,from:t,n:r,time:(new Date).toISOString()}):o.delete(n)})(a,d,e),e>0&&n.warn({event:"syncAndReplaceTabs-srcKeyRenumber",keyTable:a,from:d,n:e})}}let R={nAdd:z.length,nUpdate:G.length,nDel:H.length,nSame:K},O=()=>n.info({event:"syncAndReplaceTabs-diff",keyTable:a,from:d,userId:u,...R,nMigrate:k});if(0===z.length&&0===G.length&&0===H.length)return O(),R;let P=async()=>{try{H.length>0&&await t(u,a,"del",H,{mustExist:!0}),z.length>0&&await t(u,a,"insert",z),G.length>0&&await t(u,a,"save",G,{mustExist:!0})}catch(t){let r=!0;try{z.length>0&&await e[a].delAll({id:{$in:z.map(e=>e.id)}});let t=[...H,...W].map(e=>({...e}));if(t.length>0){let n=await e[a].save(t,{merge:!1});(Array.isArray(n)?n.some(e=>e&&0===e.ok):null!==n&&"object"==typeof n&&0===n.ok)&&(r=!1)}}catch(e){r=!1}return r?(n.warn({event:"syncAndReplaceTabs-restored",keyTable:a,from:d,userId:u,nAdd:z.length,nUpdate:G.length,nDel:H.length}),Promise.reject(t)):(n.error({event:"syncAndReplaceTabs-restore-error",msg:"saveWriteFail",keyTable:a,from:d,userId:u,nAdd:z.length,nUpdate:G.length,nDel:H.length}),Promise.reject("saveWriteFail"))}},Q=async(r,i)=>{try{await _c({plan:r,holdersOld:i,woItems:e,procOrm:t,userId:u,srLog:n,writeMain:P})}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),r=id(e);return"saveCascadePartial"===r&&(r="saveWriteFail"),c(r,{raw:t,from:d}),Promise.reject(r)}return O(),R};if(null!==B&&(B.renames.length>0||B.delNames.length>0)){let t=uc[a].holder;return await Vc(r,[t],async()=>{let r=null;try{r=await e[t].select()}catch(e){let t="string"==typeof e?e:e&&e.message||String(e),r=id(e,"anUnexpectedErrorOccurred");return c(r,{raw:t,from:d,step:"select"}),Promise.reject(r)}let n=Mc({keyTable:a,rowsOld:U.rowsOld,rowsNew:U.rowsNew,holdersOld:r,opt:{cascadeRename:s}}),i=null!==n.err?n.err:$c(n);if(null!==i){let e="htmlMarkupNotAllowed"===i?"htmlMarkupNotAllowed":"invalidRows";return c(e,{reason:i,from:d}),Promise.reject(e)}return await Q(n,r)},[a])}return await Q(null,[])}),getSyncWarns:()=>[...o.values()]}}let gd="w-syslog/src/formatter.mjs";function Dd(r={}){let n=r.fpSelf,i=r.cwd,s=[],o=e.dirname(e.dirname(n)),u=e.join(o,"src","formatter.mjs");if((r=>{try{return"w-syslog"===JSON.parse(t.readFileSync(e.join(r,"package.json"),"utf8")).name}catch(e){return!1}})(o)&&t.existsSync(u))return{fp:u,by:"pkgRoot"};s.push(`package root of ${n}`);try{return{fp:c.createRequire(n).resolve(gd),by:"resolveFromSelf"}}catch(e){s.push(`resolve from ${n}`)}try{return{fp:c.createRequire(e.join(i,"index.js")).resolve(gd),by:"resolveFromCwd"}}catch(e){s.push(`resolve from ${i}`)}throw new Error(`w-syslog: can not resolve transport target ${gd}, tried: ${s.join("; ")}. When bundling, keep w-syslog installed and list "pino" in external`)}let md="",Md="wsyslogFormatterError",fd=e=>{try{return t.statSync(e).isDirectory()}catch(e){return!1}};function pd(r={}){let n=nn(),i=De(r,"timeZone",null),s=De(r,"fdLog");er(s)||(s="./_logs");let o=De(r,"interval");"day"!==o&&"hr"!==o&&(o="day");let u=De(r,"numKeep");if(Cr(u)||(u="day"===o?365:8760),u=hr(u),"function"!=typeof a.transport)throw new Error('w-syslog: pino.transport is not a function, pino seems to be bundled as its browser build; list "pino" in external when bundling');if(er(i))try{Intl.DateTimeFormat("en-US",{timeZone:i})}catch(e){throw new Error(`w-syslog: invalid timeZone[${i}]`)}let c=e.resolve(s);if(Rn(c),!fd(c))throw new Error(`w-syslog: can not create fdLog[${s}]`);let d=(""===md&&(md=Dd({fpSelf:l.fileURLToPath("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:w&&"SCRIPT"===w.tagName.toUpperCase()&&w.src||new URL("w-web-perm.umd.js",document.baseURI).href),cwd:process.cwd()}).fp),md),y=a.transport({targets:[{level:"info",target:l.pathToFileURL(d).href,options:{interval:o,fdLog:c,timeZone:i}}]});y.unref();let g=!1,D=e=>{try{n.emit("writeError",e)}catch(e){}},m=e=>{g=!0,console.error("w-syslog transport error:",e),D(e)},M=e=>{let t=new Error(De(e,"message","w-syslog formatter error"));t.code=De(e,"code"),t.syscall=De(e,"syscall"),t.path=De(e,"path"),D(t)};y.on("error",m),y.on(Md,M);let f=()=>{y.off("error",m),y.off(Md,M)},p=a(y),I=()=>{try{if(!fd(c))return;let r="hr"===o?/^\d{4}-\d{2}-\d{2}T\d{2}\.log$/:/^\d{4}-\d{2}-\d{2}\.log$/,i=t.readdirSync(c).filter(e=>r.test(e));i.sort();let l=i.length-u;if(l<=0)return;let a=i.slice(0,l);for(let r of a){let i=e.join(s,r);try{t.unlinkSync(e.join(c,r)),n.emit("delete",{fp:i,fn:r})}catch(e){}}}catch(e){console.error("WSyslog cleanLogs error:",e)}},h=setImmediate(()=>{h=null,I()}),C=setInterval(I,36e5);C.unref();let L=null,b=e=>{let t=p[e].bind(p);return(...r)=>{try{n.emit(e,{args:r})}catch(e){}g||t(...r)}};return n.fatal=b("fatal"),n.error=b("error"),n.warn=b("warn"),n.info=b("info"),n.debug=b("debug"),n.trace=b("trace"),n.cleanLogs=I,n.clear=(e={})=>{if(null!==L)return L;null!==h&&(clearImmediate(h),h=null),clearInterval(C);let t=De(e,"timeLimit");Cr(t)||(t=6e4),L=Hr();let r=!1,n=()=>{r||(r=!0,y.closed?setImmediate(f):y.once("close",()=>{setImmediate(f)}),L.resolve())},i=setTimeout(()=>{console.error("w-syslog clear: timeout, worker terminated, some logs may be lost");try{y.worker.terminate()}catch(e){}n()},t);try{if(y.closed||y.destroyed)return clearTimeout(i),n(),L;y.once("close",()=>{clearTimeout(i),n()}),y.end()}catch(e){clearTimeout(i),n()}return L},n}function Id(){let e=nn(),t=Object.create(null);function r(t,r){an(e,t,[r],{tag:"cache"})}function n(e,n={}){if(un(t,e))return;let i=De(n,"fun");Gr(i)||(i=async()=>{});let s=De(n,"inputs");Lr(s)||(s=[]);let o=De(n,"timeExpired");Cr(o)||(o=5e3),o=hr(o);let u=De(n,"timeFrom");"end"!==u&&(u="start");let l=De(n,"useCacheWhenError");wr(l)||(l=!1);let a=De(n,"useCloneDeep");wr(a)||(a=!0),t[e]={needExec:!0,fun:i,pm:null,gen:0,inputs:s,value:null,time:null,timeExpired:o,timeFrom:u,useCacheWhenError:l,useCloneDeep:a},r("message",{fun:"set",key:e,timeExpired:o,timeFrom:u,useCacheWhenError:l,useCloneDeep:a})}async function i(e,n={}){if(un(t,e)){let i=t[e],s=De(n,"useCloneDeep");if(wr(s)||(s=i.useCloneDeep),i.pm)return r("message",{fun:"get",key:e,msg:"waiting"}),await i.pm,s?yo(i.value):i.value;let o=Date.now(),u=i.needExec,l=o-i.time;if(u?r("message",{fun:"get",key:e,msg:"execute first"}):i.timeExpired>0&&l>i.timeExpired&&(r("message",{fun:"get",key:e,msg:"execute by timeExpired",timeDiff:l}),u=!0),u){r("message",{fun:"get",key:e,msg:"fun start"}),i.needExec=!1;let t,n,s=i.gen,u=async()=>{try{let t;try{t=await i.fun(...i.inputs)}catch(n){if(r("error",{fun:"get",key:e,msg:n}),!i.useCacheWhenError)throw i.gen===s&&(i.needExec=!0),n;t=void 0}i.gen===s&&(i.value=t,i.time="end"===i.timeFrom?Date.now():o)}finally{i.pm=null,r("message",{fun:"get",key:e,msg:"fun end"})}},l=new Promise((e,r)=>{t=e,n=r});i.pm=l,u().then(t,n),await l}else r("message",{fun:"get",key:e,msg:"use cache"});return s?yo(i.value):i.value}return r("error",{fun:"get",key:e,msg:"invalid key"}),null}return e.set=n,e.getProxy=async function(e,t={}){return n(e,t),i(e,t)},e.get=i,e.update=function(e,n){un(t,e)&&(r("message",{fun:"updateValue",key:e}),t[e].value=n,t[e].time=Date.now(),t[e].gen+=1)},e.clear=function(e){un(t,e)&&(r("message",{fun:"clear",key:e}),t[e].needExec=!0)},e.remove=function(e){un(t,e)&&(r("message",{fun:"remove",key:e}),delete t[e])},e}function hd(r,n=1){return function(e,t=1,r={}){let n=1,i=De(r,"path"),s=De(r,"fs");if(!Rr(e,{fs:s}))throw new Error(`fd[${e}] is not a folder`);return null!==t&&Cr(t)&&(t=hr(t))<1&&(t=1),function e(r){let o=[];return Rr(r,{fs:s})?(En(s.readdirSync(r),function(u){let l=i.resolve(r,u),a=null;try{a=s.statSync(l)}catch(e){}a&&a.isDirectory()?(o.push({isFolder:!0,level:n,path:l,name:i.basename(l)}),n+=1,(n<=t||null===t)&&(o=o.concat(e(l))),n-=1):o.push({isFolder:!1,level:n,path:l,name:i.basename(l)})}),o):o}(e)}(r,n,{path:e,fs:t})}let Cd=new Map,Ld=new Map;function bd(e){let t=De(e,"fdLog");return er(t)||(t="./logs"),t}function Nd(e,r,n){let i=hd(e);i=i.filter(e=>!De(e,"isFolder",!1)),i=function(e,t,r){let n=t.format(r);return Va(e,e=>{let t=De(e,"name","").replace(/\.log$/,"");return!/^\d{4}-\d{2}-\d{2}/.test(t)||t>=n.slice(0,t.length)})}(i,r,n);let s=[];for(let e of i)try{let r=t.statSync(e.path);if(!r.isFile())continue;s.push({path:e.path,name:e.name,size:r.size,mtimeMs:r.mtimeMs})}catch(e){}return s}function Ad(e){let t=new Map;return r=>{let n=Math.floor(r/6e4),i=t.get(n);return void 0===i&&(i=Di(6e4*n).format(e),t.set(n,i)),i}}function xd(e,r){return new Promise((n,i)=>{let s=null,o=t.createReadStream(e,{encoding:"utf8"}),u=d.createInterface({input:o,crlfDelay:1/0});u.on("line",r);let l=e=>{s=e,u.close()};o.on("error",l),u.on("error",l),o.on("close",()=>{s?i(s):n()})})}function Ed(e){let t=null;try{t=JSON.parse(e)}catch(e){return null}return null===t||"object"!=typeof t?null:t}async function Td(e,t,r,n=null){Gr(n)||(n=Ad(r));let i={minTimeMs:null,ev:{}};return await xd(e,e=>{let r=Ed(e);if(null===r)return;let s=r.event;if(!er(s))return;let o=function(e){return"number"==typeof e?e:er(e)?Di(e).valueOf():NaN}(r.time);if(Number.isNaN(o))return;if((null===i.minTimeMs||o<i.minTimeMs)&&(i.minTimeMs=o),!(o>t))return;let u=n(o),l=i.ev[u];void 0===l&&(l={count:0,kp:{}},i.ev[u]=l),l.count+=1,l.kp[s]=(l.kp[s]||0)+1}),i}async function vd(e,t,r){let n=Ad(r),i=[];for(let s of e)try{let e=await Td(s.path,t,r,n);i.push({name:s.name,ok:!0,agg:e})}catch(e){i.push({name:s.name,ok:!1,err:String(De(e,"message",e))})}return i}function Sd(e,t){for(let r in t.ev){let n=t.ev[r],i=e[r];void 0===i&&(i={count:0,kp:{}},e[r]=i),i.count+=n.count;for(let e in n.kp)i.kp[e]=(i.kp[e]||0)+n.kp[e]}return e}async function Zd(t,r={}){let n=!1!==De(r,"useCache"),i=De(r,"scanFiles");Gr(i)||(i=vd);let s=De(r,"srLog",null),o=Nd(t.fdLog,t.tStart,t.fmt),u=function(e){let t=Cd.get(e);return t||(t=new Map,Cd.set(e,t)),t}((l=t.fdLog,a=t.fmt,`${e.resolve(l)}|${a}`));var l,a;let c=[],d={};for(let e of o){let r=n?u.get(e.name):void 0;void 0!==r&&r.size===e.size&&r.mtimeMs===e.mtimeMs&&(null===r.minTimeMs||r.minTimeMs>r.scanTStartMs&&r.minTimeMs>t.tStartMs)?d[e.name]=r.agg:c.push(e)}if(n){let e=new Set(o.map(e=>e.name));for(let t of u.keys())e.has(t)||u.delete(t)}let w=[];if(c.length>0){let e=await i(c.map(e=>({path:e.path,name:e.name})),t.tStartMs,t.fmt),r={};for(let t of e)r[t.name]=t;for(let e of c){let i=r[e.name];if(i&&i.ok)d[e.name]=i.agg,n&&u.set(e.name,{size:e.size,mtimeMs:e.mtimeMs,minTimeMs:i.agg.minTimeMs,scanTStartMs:t.tStartMs,agg:i.agg});else{let t=De(i,"err","no result");w.push({name:e.name,err:t}),n&&u.delete(e.name),s&&Gr(s.warn)&&s.warn({event:"fun-staLogs",key:"staLogsFileSkipped",name:e.name,err:t})}}}let y={};for(let e of o){let t=d[e.name];t&&Sd(y,t)}let g=function(e,t){let r={};for(let e of t)r[e]={count:0};for(let t in e){let n=e[t];r[t]={count:n.count,...n.kp}}return Object.keys(r).sort().map(e=>({time:e,data:r[e]}))}(y,t.kpTime);return{rs:g,stat:{nFiles:o.length,nScanned:c.length,nCached:o.length-c.length,errors:w}}}function jd(t=7,r="hr",n={}){let i=function(e=7,t="hr",r={}){let n=bd(r),i=function(e){return"day"===e?"day":"hr"}(t),s="day"===i?"YYYY-MM-DD":"YYYY-MM-DDTHH",o="day"===i?"day":"hour",u=De(r,"timeNow"),l="number"==typeof u?Di(u):Di(),a=l.subtract(e,"day"),c=a.valueOf(),d=a.startOf(o),w=l.startOf(o),y=[];for(;!d.isAfter(w);)y.push(d.format(s)),d=d.add(1,o);return{fdLog:n,timeInterval:i,fmt:s,unit:o,tStart:a,tStartMs:c,kpTime:y,timeNow:l.valueOf()}}(t,r,n),s=JSON.stringify([e.resolve(i.fdLog),t,i.timeInterval,De(n,"timeNow",null)]);if(Ld.has(s))return Ld.get(s);let o=Zd(i,n).finally(()=>{Ld.delete(s)});return Ld.set(s,o),o}function Yd(e,t){return null==e?t:"number"==typeof e?e:Di(e).valueOf()}async function Xd(e,t){let r={},n=[];for(let i of e)try{await xd(i.path,e=>{let n=Ed(e);if(null===n)return;let i=n.event;if(!er(i))return;let s=Yd(n.time,t),o=(u=(t-s)/36e5)<0?Math.ceil(u)||0:Math.floor(u);var u;o<0||o>24||(r[i]||(r[i]={last1Day:0,last8Hour:0,last4Hour:0,last1Hour:0}),o<=24&&(r[i].last1Day+=1),o<=8&&(r[i].last8Hour+=1),o<=4&&(r[i].last4Hour+=1),o<=1&&(r[i].last1Hour+=1))})}catch(e){n.push({name:i.name,err:String(De(e,"message",e))})}return{kp:r,errors:n}}function zd(r={}){let n=r.fpSelf,i=r.cwd||process.cwd(),s=r.pkgName||"w-web-perm",o=r.rel||"server/staLogs/staLogsCore.shellWorker.mjs",u=r.existsSync||t.existsSync,l=r.readFileSync||t.readFileSync,a=r.createRequire||c.createRequire;if("string"!=typeof n||""===n)throw new Error("invalid fpSelf");let d=[],w=function(t,r){let n=t;for(;;){if(r(e.join(n,"package.json")))return n;let t=e.dirname(n);if(t===n)return"";n=t}}(e.dirname(n),u);if(""===w)d.push(`(a) no package.json above ${e.dirname(n)}`);else{let t="";try{t=JSON.parse(l(e.join(w,"package.json"),"utf8")).name}catch(e){}let r=e.join(w,o);if(t!==s)d.push(`(a) ${e.join(w,"package.json")} name[${t}]`);else{if(u(r))return r;d.push(`(a) ${r}`)}}let y=`${s}/${o}`,g=[["b",n],["c",e.join(i,"noop.js")]];for(let[e,t]of g)try{let r=a(t).resolve(y);if(u(r))return r;d.push(`(${e}) ${r}`)}catch(r){d.push(`(${e}) resolve ${y} from ${t}`)}throw new Error(`cannot resolve ${o} of ${s} (the package must be installed with its server folder), tried: ${d.join("; ")}`)}let Gd="";function Wd(e,t=""){let r=Hr();if("string"!=typeof t||""===t)try{""===Gd&&(Gd=zd({fpSelf:l.fileURLToPath("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:w&&"SCRIPT"===w.tagName.toUpperCase()&&w.src||new URL("w-web-perm.umd.js",document.baseURI).href)})),t=Gd}catch(e){return r.reject(e),r}let n=new o.Worker(t),i=!1,s=(e,t)=>{i||(i=!0,e(t));try{n.terminate().catch(()=>{})}catch(e){}};return n.on("message",e=>{"done"===e.mode?s(r.resolve,e.payload):"error"===e.mode&&s(r.reject,e.payload)}),n.on("error",e=>{s(r.reject,e)}),n.on("exit",e=>{s(r.reject,new Error(`staLogs worker exited without result, code=${e}`))}),n.postMessage(e),r}async function Kd(e,t,r){return 0===e.length?[]:Wd({kind:"scan",files:e,tStartMs:t,fmt:r})}async function kd(e,t){return 0===e.length?{kp:{},errors:[]}:Wd({kind:"table",files:e,nowMs:t})}function Fd(e={}){return async function(e={}){let t=bd(e),r=De(e,"timeNow"),n="number"==typeof r?Di(r):Di(),i=n.valueOf(),s=De(e,"scanTableFiles");Gr(s)||(s=Xd);let o=De(e,"srLog",null),u=Nd(t,n.subtract(25,"hour"),"YYYY-MM-DDTHH"),{kp:l,errors:a}=await s(u.map(e=>({path:e.path,name:e.name})),i);for(let e of a)o&&Gr(o.warn)&&o.warn({event:"fun-staLogs",key:"staLogsFileSkipped",name:e.name,err:e.err});let c=[];for(let e in l)c.push({event:e,...l[e]});return c.sort((e,t)=>t.last1Day-e.last1Day),{rs:c,stat:{nFiles:u.length,errors:a}}}({...e,scanTableFiles:kd})}async function Vd(e=7,t="hr",r={}){let n=await function(e=7,t="hr",r={}){return jd(e,t,{...r,scanFiles:Kd})}(e,t,r);return n.rs}let Hd=["verifyConn","updateTargets-success","checkUser-error","api/getPerm-success","getWebInfor-success"],Ud=["api/getPermUserInfor-success","api/getUserByToken-success","getStaEvent-success","getStaEventTable-success","getTokenUser-error","getWebInfor-success","updateGrups-success","updatePemis-success","updateTabItems-pickKeysOnly","updateTargets-success","updateUsers-success","verifyConn","verifyConn-error"];function Bd(e="hr",t=!0){let r="day"===e?"YYYY-MM-DD":"YYYY-MM-DDTHH",n="hr"===e?"hour":"day",i="hr"===e?48:7,s=function(e){return"many"===e?Ud:Hd}(t),o=Di("2025-01-01T00:00:00"),u=[];for(let e=0;e<i;e++){let t=o.add(e,n),i={count:0};s.forEach((t,r)=>{let n=Math.round(20+15*Math.sin((e+3*r)/4));i[t]=n,i.count+=n}),u.push({time:t.format(r),data:i})}return u}function Rd(e={}){let t=De(e,"fdLog","");er(t)||(t="./logs");let r=De(e,"mock",!1),n=De(e,"srLog",null),i=async(e=7,i="hr")=>{if(r)return Bd(i,r);return await Vd(e,i,{fdLog:t,srLog:n})},s=Id(),o=async()=>{if(r)return function(e=!0){if("many"!==e)return[{event:"verifyConn",last1Day:240,last8Hour:90,last4Hour:50,last1Hour:15},{event:"updateTargets-success",last1Day:180,last8Hour:70,last4Hour:38,last1Hour:11},{event:"checkUser-error",last1Day:120,last8Hour:45,last4Hour:24,last1Hour:7},{event:"api/getPerm-success",last1Day:90,last8Hour:33,last4Hour:18,last1Hour:5},{event:"getWebInfor-success",last1Day:60,last8Hour:22,last4Hour:12,last1Hour:3}];return Ud.map((e,t)=>{let r=400-20*t;return{event:e,last1Day:r,last8Hour:Math.round(.4*r),last4Hour:Math.round(.2*r),last1Hour:Math.round(.05*r)}})}(r);let e=await async function(e={}){return(await Fd(e)).rs}({fdLog:t,srLog:n});return e},u=Id(),l={getStaEvent:async(e,t=7,r="hr")=>{let n=`${t}:${r}`,o=await s.getProxy(n,{fun:i,inputs:[t,r],timeExpired:3e4,timeFrom:"end",useCacheWhenError:!1}).catch(()=>Promise.reject("cannotGetStaEvent"));return Array.isArray(o)?o:Promise.reject("cannotGetStaEvent")},getStaEventTable:async e=>{let t=await u.getProxy("staEventTable",{fun:o,inputs:[],timeExpired:3e4,timeFrom:"end",useCacheWhenError:!1}).catch(()=>Promise.reject("cannotGetStaEventTable"));return Array.isArray(t)?t:Promise.reject("cannotGetStaEventTable")}};return l}function Od(e){return Array.from(e,e=>{let t=e.charCodeAt(0);return t<32||127===t?"?":e}).join("")}function Pd(e){if(Lr(e))return e.map(Pd);if(null==e||""===e)return"";if(!er(e))return`(${typeof e})`;let t=e.length,r=Math.min(4,Math.floor(t/8));return 0===r?`(len=${t})`:`${Od(e.slice(0,r))}...${Od(e.slice(-r))}(len=${t})`}function Qd(e){if(null===e||"object"!=typeof e||Lr(e))return Pd(e);let t={};for(let r of Object.keys(e))t[r]="token"===r.toLowerCase()?Pd(e[r]):e[r];return t}function Jd(e){if(Lr(e))return e.map(Jd);if(null==e||""===e)return"";if(!er(e))return`(${typeof e})`;let t=null;try{t=new URL(e)}catch(e){return"(invalid-url)"}return"http:"!==t.protocol&&"https:"!==t.protocol?t.protocol:`${t.origin}${t.pathname}`}let $d=["invalidUrl","invalidTokenSelf","invalidTokenTar","invalidUserIdTar","noTokenKeyValueInUrl","noTokenKeyUserIdInUrl","noTokenInUrl","cannotGetUserByUrl","cannotGetUsersByUrl","cannotGetUserDataByUrl","cannotGetUsersDataByUrl","noUserDataByUrl","noUsersDataByUrl","noUserDataAfterConvert"],_d=/^[A-Za-z]{1,40}$/;function qd(e,t={}){let r=De(t,"failValue",null),n=De(t,"onFail",null);return async(...t)=>{try{return await e(...t)}catch(e){if(Gr(n))try{n(function(e){let t=er(e)?e:De(e,"message");if(er(t)&&$d.includes(t))return{upstream:t};let r=null===e?"null":Lr(e)?"array":typeof e,n=De(e,"name");return{upstreamType:r,upstreamName:er(n)&&_d.test(n)?n:""}}(e))}catch(e){}return r}}}function ew({srLog:e}){return({userId:t,tableName:r,methodName:n})=>{let i="";return er(t)?"select"!==n&&(i="userNoPermission"):i="cannotFindUserId",""===i||(e.error({event:"authorizeExec",ok:!1,msg:i,userId:t,tableName:r,methodName:n}),!1)}}function tw(e,{srLog:t}){return async(r,n,i,s)=>{try{return await e(r,n,i,s)}catch(e){let s="string"==typeof e?e:e&&e.message||String(e);return t.error({event:"operOrm-error",msg:"anUnexpectedErrorOccurred",raw:s,userId:r,tableName:n,methodName:i}),Promise.reject("anUnexpectedErrorOccurred")}}}function rw(e){if(null===e||"object"!=typeof e||Array.isArray(e))return!1;let t=t=>Object.prototype.hasOwnProperty.call(e,t);return t("isActive")&&t("isAdmin")&&"y"===e.isActive&&"y"===e.isAdmin}return function(r,n,i,s,o,u,l={}){let a=null;if(!Gr(r))throw console.log("invalid WOrm",r),new Error("invalid WOrm");if(!er(n))throw console.log("invalid url",n),new Error("invalid url");if(!er(i))throw console.log("invalid db",i),new Error("invalid db");if(!Gr(s))throw console.log("invalid getUserByToken",s),new Error("invalid getUserByToken");if(!Gr(o))throw console.log("invalid verifyClientUser",o),new Error("invalid verifyClientUser");if(!Gr(u))throw console.log("invalid verifyAppUser",u),new Error("invalid verifyAppUser");let c=De(l,"serverPort");Cr(c)||(c=11006),c=hr(c);let d=De(l,"webName",{}),w=De(l,"webDescription",{}),y=De(l,"webLogo",""),g=De(l,"subfolder","");var D,m;er(g)&&("/"===Vr(g,1)&&(m=1,g=er(D=g)&&kr(m)?0===(m=hr(m))?D:Fr(D,D.length-m):""),"/"!==Fr(g,1)&&(g=`/${g}`));let M=De(l,"urlRedirect",""),f=De(l,"showLanguage","n"),p=De(l,"language","eng"),I=De(l,"showModeEditTargets","n"),h=De(l,"showModeEditPemis","n"),C=De(l,"showModeEditGrups","n"),L=De(l,"showModeEditUsers","n"),b=De(l,"modeEditTargets","n"),N=De(l,"modeEditPemis","n"),A=De(l,"modeEditGrups","n"),x=De(l,"modeEditUsers","n"),E=De(l,"widthTargetId",""),T=De(l,"widthTargetDescription",""),v=De(l,"widthPemisName",""),S=De(l,"widthPemisDescription",""),Z=De(l,"widthGrupsName",""),j=De(l,"widthGrupsDescription",""),Y=De(l,"widthUsersName",""),X=De(l,"widthUsersEmail",""),z=De(l,"widthUsersDescription",""),G=De(l,"mappingBy","");"id"!==G&&"email"!==G&&"name"!==G&&(G="id");let W=!1!==De(l,"cascadeRename",!0),K=!("n"===De(l,"lockExternalRows","y")||!1===De(l,"lockExternalRows","y")),k=De(l,"kpLangExt",null),F=sc({kpLangExt:k,webName:d,webDescription:w}),V=((e={})=>{let t=De(e,"logFd","");er(t)||(t="./logs");let r=De(e,"logInterval","");er(r)||(r="hr");let n=De(e,"logNumKeep",null),i={fdLog:t,interval:r};if(null!=n&&""!==n){if(!Cr(n))throw new Error(`invalid logNumKeep[${n}], must be positive integer`);i.numKeep=hr(n)}return pd(i)})(l);try{Bo(l)}catch(e){throw V.error({event:"WWebPerm-init-error",msg:e.message}),e}let H=e=>t=>{V.warn({event:`inject-${e}-fail`,...t})};s=qd(s,{failValue:null,onFail:H("getUserByToken")}),o=qd(o,{failValue:!1,onFail:H("verifyClientUser")}),u=qd(u,{failValue:!1,onFail:H("verifyAppUser")});let U={};try{U=ha(Wa,r,n,i)}catch(e){throw console.log(e),V.error({event:"WServOrm-init-error",msg:e&&e.message||"WServOrmInitFailed"}),e}let{woItems:B,procOrm:R}=U,O=U.withTabLocks,P=U.guardWrite,Q=yd({woItems:B,procOrm:R,lockTabs:O,srLog:V,mappingBy:G,cascadeRename:W}),J=function(e){return async(t,r,n,i={})=>{let s=De(i,"errKey","");er(s)||(s="saveInProgress");let o=`${t}:${r}`;return await e.setWithFree([o],n).catch(e=>e===`setWithFree: key in use: ${o}`?Promise.reject(s):Promise.reject(e))}}(ln()),$=rd(B,R,{srLog:V,withTabLocks:O,guardWrite:P,lockSave:J,mappingBy:G,cascadeRename:W,lockExternalRows:K}),_=De(l,"logFd","");er(_)||(_="./logs");let q=Rd({fdLog:_,mock:De(l,"staEventMock",!1),srLog:V}),ee=async e=>{let t=null;if(er(e)&&(t=s(e),Wr(t)&&(t=await t)),!_t(t))return console.log("token",Pd(e)),V.error({event:"getTokenUser-error",msg:"cannotFindUserFromToken"}),Promise.reject("cannotFindUserFromToken");await(async e=>{if(!er(De(e,"id","")))return console.log("user",e),V.error({event:"checkUser-error",msg:"cannotGetUserId"}),Promise.reject("cannotGetUserId");if(!er(De(e,"email","")))return console.log("user",e),V.error({event:"checkUser-error",msg:"cannotGetUserEmail"}),Promise.reject("cannotGetUserEmail");if(!er(De(e,"name","")))return console.log("user",e),V.error({event:"checkUser-error",msg:"cannotGetUserName"}),Promise.reject("cannotGetUserName");let t=De(e,"isAdmin","");return"y"===t||"n"===t||(console.log("user",e),console.log("user.isAdmin is not y or n",e.isAdmin),V.error({event:"checkUser-error",msg:"cannotGetUserRole"}),Promise.reject("cannotGetUserRole"))})(t);let r=De(t,G,"");if(!er(r))return console.log("userSelf",t),console.log("mappingBy",G),V.error({event:"getTokenUser-error",msg:"cannotGetUserProp",mappingBy:G}),Promise.reject("cannotGetUserProp");let{user:n,count:i}=await Qc(B.users,G,r);return i>1?(console.log("mappingBy",G,"count",i),V.error({event:"getTokenUser-error",msg:"ambiguousUserFromPerm",mappingBy:G,count:i}),Promise.reject("ambiguousUserFromPerm")):_t(n)?n:(console.log("userSelf",t),console.log("mappingBy",G),V.error({event:"getTokenUser-error",msg:"cannotGetUserFromPerm",mappingBy:G}),Promise.reject("cannotGetUserFromPerm"))},te=async(e,t="",{adminOnly:r=!1}={})=>{let n=await ee(e),i=rw(n),s=o({...n},t);return Wr(s)&&(s=await s),s?r&&!i?(V.error({event:"getAndVerifyAdminUser-error",msg:"userNotAdmin",from:t}),Promise.reject("userNotAdmin")):n:(console.log("user",n),V.error({event:"getAndVerifyClientUser-error",msg:"userNoPermission",from:t}),Promise.reject("userNoPermission"))},re=async(e,t="")=>await te(e,t,{adminOnly:!0}),ne=async(e,t="")=>{let r=null;if(er(e)&&(r=s(e),Wr(r)&&(r=await r)),!_t(r))return console.log("token",Pd(e)),V.error({event:"getAndVerifyAppUser-error",msg:"cannotFindUserFromToken"}),Promise.reject("cannotFindUserFromToken");let n=u(r,t);return Wr(n)&&(n=await n),n?r:(console.log("user",r),V.error({event:"getAndVerifyAppUser-error",msg:"userNoPermission",from:t}),Promise.reject("userNoPermission"))},ie=async(e,t="")=>(await re(e,t),!0),se=async(e,t)=>{let r=await B.users.select({[e]:t,isActive:"y"}),{user:n}=Bc(r);return _t(n)?n:null},oe=async(e,t)=>{let r=null;try{r=await se("id",e)}catch(e){r=null}return rw(r)?r:(V.error({event:"requireAdmin-error",msg:"userNotAdmin",funcName:t,userId:e}),Promise.reject("userNotAdmin"))},ue=async(e,t=void 0)=>{let r=void 0!==t?t:await(async e=>{let t=await se("id",e);return _t(t)?t:null})(e),n=await B.grups.select(),i=await B.pemis.select(),s=await B.targets.select(),o=null;try{o=qa(r,n,i,s)}catch(t){return console.log("userId",e),console.log("getUserRules",t),V.error({event:"getGenUserAndRulesByUserId-error",msg:"cannotGetUserRules",userId:e}),Promise.reject("cannotGetUserRules")}if(!_t(o))return console.log("userId",e),V.error({event:"getGenUserAndRulesByUserId-error",msg:"cannotGetUserRules",userId:e}),Promise.reject("cannotGetUserRules");let u=Pt(De(o,"grups",[]),"name");return u=Jt(u,";"),{user:{...r,grupsNames:u},rules:De(o,"rules",[])}},le="dist",ae="./node_modules/w-web-perm/dist";Or(ae)&&(le=ae);let ce="index.html";try{let r=e.resolve(le,"index.tmp");if(Qr(r)||(r=e.resolve(le,ce)),!Qr(r))throw console.log("fpEntryIn",r),new Error("invalid fpEntryIn");let n=e.resolve(le,ce),i=t.readFileSync(r,"utf8");i=Jr(i,"/mperm/","{sfd}/"),i=Jr(i,"{sfd}",g),i=Jr(i,"{urlRedirect}",M),i=Jr(i,"{language}",p),t.writeFileSync(n,i,"utf8")}catch(e){console.log(e),console.log(`can not generate ${ce}`)}let de=[{method:"GET",path:"/api/getUserByToken",handler:async function(e,t){let r=await Ur(async function(){let t=De(e,"query.token","");if(!er(t))return console.log("req.query",Qd(De(e,"query"))),console.log("token",Pd(t)),console.log("[API]getUserByToken/check token: invalid token"),V.error({event:"api/getUserByToken-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=await re(t,"getUserByToken");return _t(r)?(V.info({event:"api/getUserByToken-success",userId:De(r,"id","")}),r):(console.log("token",Pd(t)),console.log("[API]getUserByToken/check user: invalid user"),V.error({event:"api/getUserByToken-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission"))})();return zr(r.msg)&&(r.msg=r.msg.message),r}},{method:"GET",path:"/api/getPerm",handler:async function(e,t){let r=await Ur(async function(){let t=De(e,"query.token","");if(!er(t))return console.log("req.query",Qd(De(e,"query"))),console.log("token",Pd(t)),console.log("[API]getPerm/check token: invalid token"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=await te(t,"getPerm");if(!_t(r))return console.log("token",Pd(t)),console.log("[API]getPerm/check userSelf: invalid userSelf"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let n=De(r,"id","");if(!er(n))return console.log("token",Pd(t)),console.log("userSelf",r),console.log("[API]getPerm/check userIdSelf: invalid userIdSelf"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let i=await ue(n,r);return _t(i)?(V.info({event:"api/getPerm-success",userId:n}),i):(console.log("token",Pd(t)),console.log("userSelf",r),console.log("userIdSelf",n),console.log("[API]getPerm/check userWithRulesSelf: invalid userWithRulesSelf"),V.error({event:"api/getPerm-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission"))})();return zr(r.msg)&&(r.msg=r.msg.message),r}},{method:"GET",path:"/api/getPermUserInfor",handler:async function(e,t){let r=await Ur(async function(){let t=De(e,"query.token","");if(!er(t))return console.log("req.query",Qd(De(e,"query"))),console.log("[API]getPermUserInfor/check tokenSelf: invalid tokenSelf"),V.error({event:"api/getPermUserInfor-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");if(!_t(await ne(t,"getPermUserInfor")))return console.log("req.query",Qd(De(e,"query"))),console.log("tokenSelf",Pd(t)),console.log("[API]getPermUserInfor/check userSelf: invalid userSelf"),V.error({event:"api/getPermUserInfor-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=De(e,"query.userId","");if(!er(r))return console.log("req.query",Qd(De(e,"query"))),console.log("tokenSelf",Pd(t)),console.log("[API]getPermUserInfor/check userIdFind: invalid userIdFind"),V.error({event:"api/getPermUserInfor-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let n=await(async e=>{if(null!==Hc(G))return{userId:e,userFind:void 0};let{user:t,count:r}=await Qc(B.users,G,e);return r>1?(console.log("mappingBy",G,"count",r),V.error({event:"api/getPermUserInfor-error",msg:"ambiguousUserFromPerm",mappingBy:G,count:r}),Promise.reject("ambiguousUserFromPerm")):_t(t)?{userId:t.id,userFind:t}:{userId:null,userFind:null}})(r),i=await ue(n.userId,n.userFind);return _t(i)?(V.info({event:"api/getPermUserInfor-success",userId:r}),i):(console.log("userIdFind",r),console.log("[API]getPermUserInfor/check userWithRulesFind: invalid userWithRulesFind"),V.error({event:"api/getPermUserInfor-error",msg:"userIdNoPermrules"}),Promise.reject("userIdNoPermrules"))})();return zr(r.msg)&&(r.msg=r.msg.message),r}},{method:"POST",path:"/syncAndReplaceTabs",handler:async function(e,t){let r=await Ur(async function(){let t=De(e,"query.token","");if(!er(t))return console.log("req.query",Qd(De(e,"query"))),console.log("token",Pd(t)),console.log("[API]syncAndReplaceTabs/check token: invalid token"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let r=De(e,"query.keyTable","");if(!er(r))return console.log("req.query",Qd(De(e,"query"))),console.log("keyTable",r),console.log("[API]syncAndReplaceTabs/check keyTable: invalid keyTable"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");if(!["targets","pemis","grups","users"].includes(r))return console.log("[API]syncAndReplaceTabs/check keyTable: unexpected keyTable",r),V.error({event:"api/syncAndReplaceTabs-error",msg:"invalidKeyTable",keyTable:r}),Promise.reject("invalidKeyTable");let n=await ne(t,"syncAndReplaceTabs");if(!_t(n))return console.log("token",Pd(t)),console.log("[API]syncAndReplaceTabs/check user: invalid user"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let i=De(n,"id","");if(!er(i))return console.log("token",Pd(t)),console.log("user",n),console.log("[API]syncAndReplaceTabs/check userId: invalid userId"),V.error({event:"api/syncAndReplaceTabs-error",msg:"tokenNoPermission"}),Promise.reject("tokenNoPermission");let s=await(async e=>{let t=De(e,"payload");if(er(t)&&(t=Kr(t)),!_t(t))return console.log("payload",t),V.error({event:"parsePayload-error",msg:"invalidPayload"}),Promise.reject("invalidPayload");let r=De(t,"from","");if(!er(r))return console.log("payload",t),V.error({event:"parsePayload-error",msg:"invalidFromInPayload"}),Promise.reject("invalidFromInPayload");let n=De(t,"rows",[]);return Er(n)?{from:r,rows:n}:(console.log("payload",t),V.error({event:"parsePayload-error",msg:"invalidRowsInPayload"}),Promise.reject("invalidRowsInPayload"))})(e),o=await Q.syncAndReplaceTabs(i,s,r);return V.info({event:"api/syncAndReplaceTabs-success",userId:i,keyTable:r}),o})();return zr(r.msg)&&(r.msg=r.msg.message),r}}],we=at(Wa),ye=we,ge={port:c,pathStaticFiles:le,apiName:"api",apis:de,tokenType:"Bearer",verifyConn:async({apiType:e,authorization:t,query:r,headers:n,req:i})=>{let s=function(e,t){return er(e)&&kr(t)?0===(t=hr(t))?e:Vr(e,e.length-t):""}(t,7);if(!er(s))return console.log("apiType",e),console.log("authorization",Pd(t)),console.log("invalid token"),V.error({event:"verifyConn-error",ok:!1,apiType:e,msg:"tokenNoPermission"}),!1;let o=!1,u="";await ie(s,e).then(()=>{o=!0}).catch(e=>{u="string"==typeof e?e:e&&e.message||"checkTokenFail"});let l=De(n,"x-forwarded-for","").split(",")[0].trim();er(l)||(l=De(i,"info.remoteAddress","")||De(i,"socket.remoteAddress","")||De(i,"connection.remoteAddress",""));let a=De(n,"origin",""),c=Jd(De(n,"referer",""));return o?V.info({event:"verifyConn",ok:o,apiType:e,ip:l,origin:a,referer:c}):V.error({event:"verifyConn-error",ok:o,apiType:e,ip:l,origin:a,referer:c,msg:u}),o},getUserIdByToken:async e=>{let t=null;try{t=await re(e,"main")}catch(e){let t=id(e,"cannotFindUserId");return V.error({event:"getUserIdByToken-error",msg:t}),Promise.reject(t)}let r=De(t,"id","");return er(r)?r:(V.error({event:"getUserIdByToken-error",msg:"cannotFindUserId"}),Promise.reject("cannotFindUserId"))},corsOrigins:["*"],useDbOrm:!0,kpOrm:B,operOrm:tw(R,{srLog:V}),tableNamesExec:we,methodsExec:["select"],authorizeExec:ew({srLog:V}),tableNamesSync:ye,kpFunExt:{getWebInfor:e=>(V.info({event:"getWebInfor-success",userId:e}),{webLogo:y,showLanguage:f,language:p,kpLang:F,showModeEditTargets:I,showModeEditPemis:h,showModeEditGrups:C,showModeEditUsers:L,modeEditTargets:b,modeEditPemis:N,modeEditGrups:A,modeEditUsers:x,cascadeRename:W,lockExternalRows:K?"y":"n",syncWarns:Q.getSyncWarns(),widthTargetId:E,widthTargetDescription:T,widthPemisName:v,widthPemisDescription:S,widthGrupsName:Z,widthGrupsDescription:j,widthUsersName:Y,widthUsersEmail:X,widthUsersDescription:z}),updateTargets:async(e,t,r)=>(await oe(e,"updateTargets"),await $.updateTargets(e,t,r)),updatePemis:async(e,t,r)=>(await oe(e,"updatePemis"),await $.updatePemis(e,t,r)),updateGrups:async(e,t,r)=>(await oe(e,"updateGrups"),await $.updateGrups(e,t,r)),updateUsers:async(e,t,r)=>{await oe(e,"updateUsers");let n=td(r);return"for:grups"===x&&(n.pickKeysOnly=["cgrups"]),await $.updateUsers(e,t,n)},getStaEvent:async(e,t,r)=>{try{let n=await q.getStaEvent(e,t,r);return V.info({event:"getStaEvent-success",userId:e}),n}catch(t){throw V.error({event:"getStaEvent-error",userId:e,msg:"string"==typeof t?t:t&&t.message||"cannotGetStaEvent"}),t}},getStaEventTable:async e=>{try{let t=await q.getStaEventTable(e);return V.info({event:"getStaEventTable-success",userId:e}),t}catch(t){throw V.error({event:"getStaEventTable-error",userId:e,msg:"string"==typeof t?t:t&&t.message||"cannotGetStaEventTable"}),t}}},fpTableTags:"tableTags-web-perm.json"};try{a=new Vo(ge)}catch(e){throw console.log(e),V.error({event:"WServHapiServer-init-error",msg:e&&e.message||"WServHapiServerInitFailed"}),e}return a}});
|
|
7
7
|
//# sourceMappingURL=w-web-perm.umd.js.map
|