w-web-task 1.0.31 → 1.0.33
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/dist/index.tmp +1 -1
- package/dist/js/app-legacy.c161c06f.js +1 -0
- package/dist/js/app.c161c06f.js +1 -0
- package/dist/js/{chunk-vendors-legacy.03f6ffe7.js → chunk-vendors-legacy.59fd6af8.js} +3 -3
- package/dist/js/{chunk-vendors.03f6ffe7.js → chunk-vendors.59fd6af8.js} +3 -3
- package/dist/w-web-task.umd.js +2 -2
- package/dist/w-web-task.umd.js.map +1 -1
- package/docs/WWebTask.html +447 -6
- package/docs/global.html +240 -2
- package/docs/index.html +2 -2
- package/docs/server_WWebTask.mjs.html +61 -46
- package/docs/server_authorizeExec.mjs.html +129 -0
- package/docs/server_lockSave.mjs.html +2 -2
- package/docs/server_maskLog.mjs.html +2 -2
- package/docs/server_wrapInjected.mjs.html +2 -2
- package/docs/src_plugins_submitGuard.mjs.html +2 -2
- package/g.mOrm.mjs +2 -7
- package/package.json +12 -12
- package/server/WWebTask.mjs +59 -44
- package/server/authorizeExec.mjs +57 -0
- package/srv.mjs +11 -8
- package/dist/js/app-legacy.1c14647d.js +0 -1
- package/dist/js/app.1c14647d.js +0 -1
package/dist/w-web-task.umd.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* w-web-task v1.0.
|
|
2
|
+
* w-web-task v1.0.33
|
|
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("url"),require("pino")):"function"==typeof define&&define.amd?define(["path","fs","@hapi/hapi","@hapi/inert","stream","http","worker_threads","url","pino"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-web-task"]=t(e.path,e.fs,e["@hapi/hapi"],e["@hapi/inert"],e.stream,e.http,e.require$$0$1,e.url,e.pino)}(this,function(e,t,s,n,i,r,a,o,l){"use strict";var c="undefined"!=typeof document?document.currentScript:null,M=Array.isArray,w="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,d=w||u||Function("return this")(),y=d.Symbol,L=Object.prototype,I=L.hasOwnProperty,D=L.toString,g=y?y.toStringTag:void 0;var m=Object.prototype.toString;var p=y?y.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":p&&p in Object(e)?function(e){var t=I.call(e,g),s=e[g];try{e[g]=void 0;var n=!0}catch(e){}var i=D.call(e);return n&&(t?e[g]=s:delete e[g]),i}(e):function(e){return m.call(e)}(e)}function C(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||C(e)&&"[object Symbol]"==h(e)}var N=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,b=/^\w*$/;function T(e,t){if(M(e))return!1;var s=typeof e;return!("number"!=s&&"symbol"!=s&&"boolean"!=s&&null!=e&&!f(e))||(b.test(e)||!N.test(e)||null!=t&&e in Object(t))}function x(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function S(e){if(!x(e))return!1;var t=h(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}var Z,X=d["__core-js_shared__"],Y=(Z=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Z:"";var A=Function.prototype.toString;function z(e){if(null!=e){try{return A.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var E=/^\[object .+?Constructor\]$/,j=Function.prototype,v=Object.prototype,G=j.toString,K=v.hasOwnProperty,W=RegExp("^"+G.call(K).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function k(e){return!(!x(e)||(t=e,Y&&Y in t))&&(S(e)?W:E).test(z(e));var t}function U(e,t){var s=function(e,t){return null==e?void 0:e[t]}(e,t);return k(s)?s:void 0}var V=U(Object,"create");var Q=Object.prototype.hasOwnProperty;var H=Object.prototype.hasOwnProperty;function J(e){var t=-1,s=null==e?0:e.length;for(this.clear();++t<s;){var n=e[t];this.set(n[0],n[1])}}function R(e,t){return e===t||e!=e&&t!=t}function P(e,t){for(var s=e.length;s--;)if(R(e[s][0],t))return s;return-1}J.prototype.clear=function(){this.__data__=V?V(null):{},this.size=0},J.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},J.prototype.get=function(e){var t=this.__data__;if(V){var s=t[e];return"__lodash_hash_undefined__"===s?void 0:s}return Q.call(t,e)?t[e]:void 0},J.prototype.has=function(e){var t=this.__data__;return V?void 0!==t[e]:H.call(t,e)},J.prototype.set=function(e,t){var s=this.__data__;return this.size+=this.has(e)?0:1,s[e]=V&&void 0===t?"__lodash_hash_undefined__":t,this};var O=Array.prototype.splice;function F(e){var t=-1,s=null==e?0:e.length;for(this.clear();++t<s;){var n=e[t];this.set(n[0],n[1])}}F.prototype.clear=function(){this.__data__=[],this.size=0},F.prototype.delete=function(e){var t=this.__data__,s=P(t,e);return!(s<0)&&(s==t.length-1?t.pop():O.call(t,s,1),--this.size,!0)},F.prototype.get=function(e){var t=this.__data__,s=P(t,e);return s<0?void 0:t[s][1]},F.prototype.has=function(e){return P(this.__data__,e)>-1},F.prototype.set=function(e,t){var s=this.__data__,n=P(s,e);return n<0?(++this.size,s.push([e,t])):s[n][1]=t,this};var B=U(d,"Map");function $(e,t){var s,n,i=e.__data__;return("string"==(n=typeof(s=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==s:null===s)?i["string"==typeof t?"string":"hash"]:i.map}function _(e){var t=-1,s=null==e?0:e.length;for(this.clear();++t<s;){var n=e[t];this.set(n[0],n[1])}}_.prototype.clear=function(){this.size=0,this.__data__={hash:new J,map:new(B||F),string:new J}},_.prototype.delete=function(e){var t=$(this,e).delete(e);return this.size-=t?1:0,t},_.prototype.get=function(e){return $(this,e).get(e)},_.prototype.has=function(e){return $(this,e).has(e)},_.prototype.set=function(e,t){var s=$(this,e),n=s.size;return s.set(e,t),this.size+=s.size==n?0:1,this};function q(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var s=function(){var n=arguments,i=t?t.apply(this,n):n[0],r=s.cache;if(r.has(i))return r.get(i);var a=e.apply(this,n);return s.cache=r.set(i,a)||r,a};return s.cache=new(q.Cache||_),s}q.Cache=_;var ee,te,se,ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ie=/\\(\\)?/g,re=(ee=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(ne,function(e,s,n,i){t.push(n?i.replace(ie,"$1"):s||e)}),t},te=q(ee,function(e){return 500===se.size&&se.clear(),e}),se=te.cache,te),ae=re;function oe(e,t){for(var s=-1,n=null==e?0:e.length,i=Array(n);++s<n;)i[s]=t(e[s],s,e);return i}var le=y?y.prototype:void 0,ce=le?le.toString:void 0;function Me(e){if("string"==typeof e)return e;if(M(e))return oe(e,Me)+"";if(f(e))return ce?ce.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function we(e){return null==e?"":Me(e)}function ue(e,t){return M(e)?e:T(e,t)?[e]:ae(we(e))}function de(e){if("string"==typeof e||f(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function ye(e,t){for(var s=0,n=(t=ue(t,e)).length;null!=e&&s<n;)e=e[de(t[s++])];return s&&s==n?e:void 0}function Le(e,t,s){var n=null==e?void 0:ye(e,t);return void 0===n?s:n}function Ie(e){return C(e)&&"[object Arguments]"==h(e)}var De=Object.prototype,ge=De.hasOwnProperty,me=De.propertyIsEnumerable,pe=Ie(function(){return arguments}())?Ie:function(e){return C(e)&&ge.call(e,"callee")&&!me.call(e,"callee")},he=pe;var Ce="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=Ce&&"object"==typeof module&&module&&!module.nodeType&&module,Ne=fe&&fe.exports===Ce?d.Buffer:void 0,be=(Ne?Ne.isBuffer:void 0)||function(){return!1},Te=/^(?:0|[1-9]\d*)$/;function xe(e,t){var s=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==s||"symbol"!=s&&Te.test(e))&&e>-1&&e%1==0&&e<t}function Se(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var Ze={};function Xe(e){return function(t){return e(t)}}Ze["[object Float32Array]"]=Ze["[object Float64Array]"]=Ze["[object Int8Array]"]=Ze["[object Int16Array]"]=Ze["[object Int32Array]"]=Ze["[object Uint8Array]"]=Ze["[object Uint8ClampedArray]"]=Ze["[object Uint16Array]"]=Ze["[object Uint32Array]"]=!0,Ze["[object Arguments]"]=Ze["[object Array]"]=Ze["[object ArrayBuffer]"]=Ze["[object Boolean]"]=Ze["[object DataView]"]=Ze["[object Date]"]=Ze["[object Error]"]=Ze["[object Function]"]=Ze["[object Map]"]=Ze["[object Number]"]=Ze["[object Object]"]=Ze["[object RegExp]"]=Ze["[object Set]"]=Ze["[object String]"]=Ze["[object WeakMap]"]=!1;var Ye="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ae=Ye&&"object"==typeof module&&module&&!module.nodeType&&module,ze=Ae&&Ae.exports===Ye&&w.process,Ee=function(){try{var e=Ae&&Ae.require&&Ae.require("util").types;return e||ze&&ze.binding&&ze.binding("util")}catch(e){}}(),je=Ee&&Ee.isTypedArray,ve=je?Xe(je):function(e){return C(e)&&Se(e.length)&&!!Ze[h(e)]},Ge=Object.prototype.hasOwnProperty;function Ke(e,t){var s=M(e),n=!s&&he(e),i=!s&&!n&&be(e),r=!s&&!n&&!i&&ve(e),a=s||n||i||r,o=a?function(e,t){for(var s=-1,n=Array(e);++s<e;)n[s]=t(s);return n}(e.length,String):[],l=o.length;for(var c in e)!t&&!Ge.call(e,c)||a&&("length"==c||i&&("offset"==c||"parent"==c)||r&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||xe(c,l))||o.push(c);return o}var We=Object.prototype;function ke(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||We)}function Ue(e,t){return function(s){return e(t(s))}}var Ve=Ue(Object.keys,Object),Qe=Object.prototype.hasOwnProperty;function He(e){if(!ke(e))return Ve(e);var t=[];for(var s in Object(e))Qe.call(e,s)&&"constructor"!=s&&t.push(s);return t}function Je(e){return null!=e&&Se(e.length)&&!S(e)}function Re(e){return Je(e)?Ke(e):He(e)}function Pe(e){return!0===(t=e)||!1===t||C(t)&&"[object Boolean]"==h(t);var t}function Oe(e){return"[object String]"===Object.prototype.toString.call(e)}function Fe(e){return!(!Oe(e)||""===e)}function Be(e,t={}){let s=Le(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:{};if(!Fe(e))return n("invalid v");let i={};try{i=JSON.parse(e)}catch(e){return n(e.toString())}return s?{state:"success",msg:i}:i}function $e(e){return"[object Object]"===Object.prototype.toString.call(e)}function _e(e){if($e(e)){for(let t in e)return!0;return!1}return!1}var qe=/\s/;var et=/^\s+/;function tt(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&qe.test(e.charAt(t)););return t}(e)+1).replace(et,""):e}var st=/^[-+]0x[0-9a-f]+$/i,nt=/^0b[01]+$/i,it=/^0o[0-7]+$/i,rt=parseInt;function at(e){if("number"==typeof e)return e;if(f(e))return NaN;if(x(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=x(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=tt(e);var s=nt.test(e);return s||it.test(e)?rt(e.slice(2),s?2:8):st.test(e)?NaN:+e}var ot=1/0;function lt(e){return e?(e=at(e))===ot||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ct(e){var t=lt(e),s=t%1;return t==t?s?t-s:t:0}function Mt(e){return e!=e}function wt(e){let t=!1;if(Fe(e)){if(""===e.trim())return!1;t=!isNaN(Number(e))}else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(Mt(e))return!1;t=!0}return t}function ut(e){if(!wt(e))return 0;return lt(e)}function dt(e,t={}){let s=Le(t,"useLimitSafe",null);return Pe(s)||(s=!1),!!wt(e)&&(e=ut(e),s?Number.isSafeInteger(e):"number"==typeof(n=e)&&n==ct(n));var n}var yt=d.isFinite,Lt=Math.min;var It=function(e){var t=Math[e];return function(e,s){if(e=at(e),(s=null==s?0:Lt(ct(s),292))&&yt(e)){var n=(we(e)+"e").split("e");return+((n=(we(t(n[0]+"e"+(+n[1]+s)))+"e").split("e"))[0]+"e"+(+n[1]-s))}return t(e)}}("round"),Dt=It;function gt(e,t={}){let s=Le(t,"useClampSafe",null);Pe(s)||(s=!1);let n=Le(t,"useLimitSafe",null);Pe(n)||(n=!1);let i=Le(t,"returnWithStateAndMsg",null);Pe(i)||(i=!1);let r=e=>i?{state:"success",msg:e}:e,a=e=>{if(i)return{state:"error",msg:e};throw new Error(e)};if(!wt(e))return r(0);let o=null;try{e=ut(e),o=Dt(e),s&&(o>Number.MAX_SAFE_INTEGER?o=Number.MAX_SAFE_INTEGER:o<Number.MIN_SAFE_INTEGER&&(o=Number.MIN_SAFE_INTEGER))}catch(e){return a(e.toString())}return n&&!Number.isSafeInteger(Number(o))?a(`v[${e}] is not a safe integer`):("0"===String(o)&&(o=0),r(o))}function mt(e,t={}){if(!dt(e,t))return!1;return gt(e)>0}var pt=Ue(Object.getPrototypeOf,Object),ht=Function.prototype,Ct=Object.prototype,ft=ht.toString,Nt=Ct.hasOwnProperty,bt=ft.call(Object);function Tt(e){if(!C(e)||"[object Object]"!=h(e))return!1;var t=pt(e);if(null===t)return!0;var s=Nt.call(t,"constructor")&&t.constructor;return"function"==typeof s&&s instanceof s&&ft.call(s)==bt}function xt(e){if(!C(e))return!1;var t=h(e);return"[object Error]"==t||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Tt(e)}function St(e){return xt(e)}function Zt(e){return S(e)}function Xt(e){let t,s=Object.prototype.toString.call(e);if(t="[object Promise]"===s,t)return!0;if("[object Function]"!==s)return!1;try{t="function"!=typeof e.subscribe&&"function"==typeof e.then}catch(e){}return t}function Yt(e,t={}){if(!dt(e,t))return!1;return gt(e)>=0}function At(e,t){return Fe(e)&&Yt(t)?0===(t=gt(t))?"":e.substring(0,t):""}function zt(e,t){if(!Fe(e))return"";if(!Yt(t))return"";if(0===(t=gt(t)))return"";let s=e.length-t;return s<0&&(s=0),e.substring(s,s+t)}function Et(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}let jt=function(e){if(!Zt(e))throw new Error("fn is not a function");return function(){let t=Et(),s=null,n=null;try{s=e.apply(this,arguments)}catch(e){n=e}return null!==n?t.resolve({state:"error",msg:n}):Xt(s)?s.then(e=>{t.resolve({state:"success",msg:e})}).catch(e=>{"cancelled"===Le(e,"reason")?t.resolve({state:"cancelled",msg:""}):t.resolve({state:"error",msg:e})}):t.resolve({state:"success",msg:s}),t}};let vt=2147483647;var Gt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Kt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Wt(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var s=function e(){if(this instanceof e){var s=[null];return s.push.apply(s,arguments),new(Function.bind.apply(t,s))}return t.apply(this,arguments)};s.prototype=t.prototype}else s={};return Object.defineProperty(s,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}),s}var kt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,a){if("function"!=typeof n)throw new TypeError("The listener must be a function");var o=new i(n,r||e,a),l=s?s+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function a(e,t){0===--e._eventsCount?e._events=new n:delete e._events[t]}function o(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),o.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},o.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,a=new Array(r);i<r;i++)a[i]=n[i].fn;return a},o.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},o.prototype.emit=function(e,t,n,i,r,a){var o=s?s+e:e;if(!this._events[o])return!1;var l,c,M=this._events[o],w=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),w){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,a),!0}for(c=1,l=new Array(w-1);c<w;c++)l[c-1]=arguments[c];M.fn.apply(M.context,l)}else{var u,d=M.length;for(c=0;c<d;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),w){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!l)for(u=1,l=new Array(w-1);u<w;u++)l[u-1]=arguments[u];M[c].fn.apply(M[c].context,l)}}return!0},o.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},o.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},o.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return a(this,r),this;var o=this._events[r];if(o.fn)o.fn!==t||i&&!o.once||n&&o.context!==n||a(this,r);else{for(var l=0,c=[],M=o.length;l<M;l++)(o[l].fn!==t||i&&!o[l].once||n&&o[l].context!==n)&&c.push(o[l]);c.length?this._events[r]=1===c.length?c[0]:c:a(this,r)}return this},o.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&a(this,t)):(this._events=new n,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=s,o.EventEmitter=o,e.exports=o}(kt);var Ut=Kt(kt.exports);function Vt(){return new Ut}function Qt(e,t,s=[],n={}){let i=n.funSettle,r=n.tag||"evem",a=(t,...s)=>e.emit(t,...s);Zt(n.funEmit)&&(a=n.funEmit);try{return a(t,...s)}catch(n){if(Zt(i))try{i(n)}catch(e){}try{"error"!==t&&e.listenerCount("error")>0?a("error",{fun:"listener",name:t,msg:n,args:s}):console.error(`[wsemi ${r}] listener of '${String(t)}' threw:`,n)}catch(e){try{console.error(`[wsemi ${r}] listener of '${String(t)}' threw, and reporting it also threw:`,e,n)}catch(e){}}return!1}}async function Ht(e,t={}){let s=null,n=Et();if(!Zt(e))return n.reject("waitfunction需輸入函數f"),n;let i=async()=>{let t=e();return Xt(t)&&(t=await t),t};if(s=await i(),!0===s)return n.resolve(),n;let r=Le(t,"attemptNum",null);mt(r)||(r=200);let a=Le(t,"timeInterval",null);mt(a)||(a=1e3),a=Math.min(a,vt);let o=0,l=setInterval(async()=>{o+=1,s=await i(),!0===s&&(clearInterval(l),n.resolve()),o>r&&(clearInterval(l),n.reject(`exceeded attemptNum[${r}]`))},a);return n}function Jt(e,t){return!!$e(e)&&(!(!Fe(t)&&!wt(t))&&t in e)}function Rt(e={}){let t=Le(e,"timeExpire",null);mt(t)||(t=18e5),t=gt(t),t=Math.min(t,vt);let s=Le(e,"timeDetect",null);mt(s)||(s=2e3),s=gt(s),s=Math.min(s,vt);let n=Vt(),i={},r=e=>{if(Jt(i,e)){return Qt(n,"checkWithSet",[{state:"error",msg:`checkWithSet: key in use: ${e}`}],{tag:"cacheSt"}),!1}return i[e]={time:Date.now(),value:!0},Qt(n,"checkWithSet",[{state:"success",msg:`checkWithSet: ${e}`}],{tag:"cacheSt"}),!0},a=setInterval(()=>{Qt(n,"detect",[{state:"start"}],{tag:"cacheSt"});let e=Date.now();for(let s of Object.keys(i)){let n=i[s];n&&e-n.time>t&&delete i[s]}Qt(n,"detect",[{state:"finish"}],{tag:"cacheSt"})},s);return n.checkWithSet=r,n.setWithFree=async(e,t)=>{Qt(n,"setWithFree",[{state:"start"}],{tag:"cacheSt"});let s=[];for(let t of e){if(!r(t)){for(let e of s)delete i[e];let e=`setWithFree: key in use: ${t}`;return Qt(n,"setWithFree",[{state:"error",msg:e}],{tag:"cacheSt"}),Promise.reject(e)}s.push(t)}try{let s=await t(),i=`setWithFree: ${e.join(", ")}`;return Qt(n,"setWithFree",[{state:"success",msg:i}],{tag:"cacheSt"}),s}catch(e){let t=`setWithFree: fn threw: ${e&&e.message||e}`;throw Qt(n,"setWithFree",[{state:"error",msg:t}],{tag:"cacheSt"}),e}finally{for(let e of s)delete i[e]}},n.set=async(e,t=!0)=>{i[e]={time:Date.now(),value:t},Qt(n,"set",[{state:"success",msg:`set: ${e}`}],{tag:"cacheSt"})},n.get=async e=>{let t=i[e],s=void 0===t?null:t.value;return Qt(n,"get",[{state:"success",msg:`get: ${e}`}],{tag:"cacheSt"}),s},n.check=async e=>{let t=Jt(i,e);return Qt(n,"check",[{state:"success",msg:`check: ${e} = ${t}`}],{tag:"cacheSt"}),t},n.del=async e=>{delete i[e],Qt(n,"del",[{state:"success",msg:`del: ${e}`}],{tag:"cacheSt"})},n.waitExist=async(e,t={})=>{let s=Le(t,"attemptNum",null);mt(s)||(s=30),s=gt(s);let r=Le(t,"timeInterval",null);mt(r)||(r=100),r=gt(r),Qt(n,"waitExist",[{state:"start"}],{tag:"cacheSt"});try{await Ht(()=>Jt(i,e),{attemptNum:s,timeInterval:r})}catch(t){let i=`waitExist timeout (${s*r}ms): ${e}`;return Qt(n,"waitExist",[{state:"error",msg:i}],{tag:"cacheSt"}),Promise.reject(i)}Qt(n,"waitExist",[{state:"success",msg:`waitExist resolved: ${e}`}],{tag:"cacheSt"})},n.waitNotExist=async(e,t={})=>{let s=Le(t,"attemptNum",null);mt(s)||(s=30),s=gt(s);let r=Le(t,"timeInterval",null);mt(r)||(r=100),r=gt(r),Qt(n,"waitNotExist",[{state:"start"}],{tag:"cacheSt"});try{await Ht(()=>!Jt(i,e),{attemptNum:s,timeInterval:r})}catch(t){let i=`waitNotExist timeout (${s*r}ms): ${e}`;return Qt(n,"waitNotExist",[{state:"error",msg:i}],{tag:"cacheSt"}),Promise.reject(i)}Qt(n,"waitNotExist",[{state:"success",msg:`waitNotExist resolved: ${e}`}],{tag:"cacheSt"})},n.clear=()=>{clearInterval(a)},n}function Pt(e,t={}){let s=Le(t,"fs"),n=!1;try{s.statSync(e),n=!0}catch{n=!1}return n}function Ot(e,t={}){let s=Le(t,"fs");if(!Pt(e,{fs:s}))return!1;let n=s.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function Ft(e){return Ot(e,{fs:t})}function Bt(e,t={}){let s=Le(t,"fs");return!!Pt(e,{fs:s})&&(!s.lstatSync(e).isDirectory()&&!s.lstatSync(e).isSymbolicLink())}function $t(e){return Bt(e,{fs:t})}function _t(e,t,s){if(!Fe(e))return"";if(!Fe(t))return"";if(!Oe(s))return"";return String(e).replaceAll(t,s)}var qt={exports:{}};!function(e){e.exports=function(){var e=1e3,t=6e4,s=36e5,n="millisecond",i="second",r="minute",a="hour",o="day",l="week",c="month",M="quarter",w="year",u="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+)?$/,L=/\[([^\]]+)]|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,I={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"],s=e%100;return"["+e+(t[(s-20)%10]||t[s]||t[0])+"]"}},D=function(e,t,s){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(s)+e},g={s:D,z:function(e){var t=-e.utcOffset(),s=Math.abs(t),n=Math.floor(s/60),i=s%60;return(t<=0?"+":"-")+D(n,2,"0")+":"+D(i,2,"0")},m:function e(t,s){if(t.date()<s.date())return-e(s,t);var n=12*(s.year()-t.year())+(s.month()-t.month()),i=t.clone().add(n,c),r=s-i<0,a=t.clone().add(n+(r?-1:1),c);return+(-(n+(s-i)/(r?i-a:a-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:c,y:w,w:l,d:o,D:u,h:a,m:r,s:i,ms:n,Q:M}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},m="en",p={};p[m]=I;var h="$isDayjsObject",C=function(e){return e instanceof T||!(!e||!e[h])},f=function e(t,s,n){var i;if(!t)return m;if("string"==typeof t){var r=t.toLowerCase();p[r]&&(i=r),s&&(p[r]=s,i=r);var a=t.split("-");if(!i&&a.length>1)return e(a[0])}else{var o=t.name;p[o]=t,i=o}return!n&&i&&(m=i),i||!n&&m},N=function(e,t){if(C(e))return e.clone();var s="object"==typeof t?t:{};return s.date=e,s.args=arguments,new T(s)},b=g;b.l=f,b.i=C,b.w=function(e,t){return N(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var T=function(){function I(e){this.$L=f(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[h]=!0}var D=I.prototype;return D.parse=function(e){this.$d=function(e){var t=e.date,s=e.utc;if(null===t)return new Date(NaN);if(b.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 i=n[2]-1||0,r=(n[7]||"0").substring(0,3);return s?new Date(Date.UTC(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,r)):new Date(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,r)}}return new Date(t)}(e),this.init()},D.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()},D.$utils=function(){return b},D.isValid=function(){return!(this.$d.toString()===d)},D.isSame=function(e,t){var s=N(e);return this.startOf(t)<=s&&s<=this.endOf(t)},D.isAfter=function(e,t){return N(e)<this.startOf(t)},D.isBefore=function(e,t){return this.endOf(t)<N(e)},D.$g=function(e,t,s){return b.u(e)?this[t]:this.set(s,e)},D.unix=function(){return Math.floor(this.valueOf()/1e3)},D.valueOf=function(){return this.$d.getTime()},D.startOf=function(e,t){var s=this,n=!!b.u(t)||t,M=b.p(e),d=function(e,t){var i=b.w(s.$u?Date.UTC(s.$y,t,e):new Date(s.$y,t,e),s);return n?i:i.endOf(o)},y=function(e,t){return b.w(s.toDate()[e].apply(s.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),s)},L=this.$W,I=this.$M,D=this.$D,g="set"+(this.$u?"UTC":"");switch(M){case w:return n?d(1,0):d(31,11);case c:return n?d(1,I):d(0,I+1);case l:var m=this.$locale().weekStart||0,p=(L<m?L+7:L)-m;return d(n?D-p:D+(6-p),I);case o:case u:return y(g+"Hours",0);case a:return y(g+"Minutes",1);case r:return y(g+"Seconds",2);case i:return y(g+"Milliseconds",3);default:return this.clone()}},D.endOf=function(e){return this.startOf(e,!1)},D.$set=function(e,t){var s,l=b.p(e),M="set"+(this.$u?"UTC":""),d=(s={},s[o]=M+"Date",s[u]=M+"Date",s[c]=M+"Month",s[w]=M+"FullYear",s[a]=M+"Hours",s[r]=M+"Minutes",s[i]=M+"Seconds",s[n]=M+"Milliseconds",s)[l],y=l===o?this.$D+(t-this.$W):t;if(l===c||l===w){var L=this.clone().set(u,1);L.$d[d](y),L.init(),this.$d=L.set(u,Math.min(this.$D,L.daysInMonth())).$d}else d&&this.$d[d](y);return this.init(),this},D.set=function(e,t){return this.clone().$set(e,t)},D.get=function(e){return this[b.p(e)]()},D.add=function(n,M){var u,d=this;n=Number(n);var y=b.p(M),L=function(e){var t=N(d);return b.w(t.date(t.date()+Math.round(e*n)),d)};if(y===c)return this.set(c,this.$M+n);if(y===w)return this.set(w,this.$y+n);if(y===o)return L(1);if(y===l)return L(7);var I=(u={},u[r]=t,u[a]=s,u[i]=e,u)[y]||1,D=this.$d.getTime()+n*I;return b.w(D,this)},D.subtract=function(e,t){return this.add(-1*e,t)},D.format=function(e){var t=this,s=this.$locale();if(!this.isValid())return s.invalidDate||d;var n=e||"YYYY-MM-DDTHH:mm:ssZ",i=b.z(this),r=this.$H,a=this.$m,o=this.$M,l=s.weekdays,c=s.months,M=s.meridiem,w=function(e,s,i,r){return e&&(e[s]||e(t,n))||i[s].slice(0,r)},u=function(e){return b.s(r%12||12,e,"0")},y=M||function(e,t,s){var n=e<12?"AM":"PM";return s?n.toLowerCase():n};return n.replace(L,function(e,n){return n||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return b.s(t.$y,4,"0");case"M":return o+1;case"MM":return b.s(o+1,2,"0");case"MMM":return w(s.monthsShort,o,c,3);case"MMMM":return w(c,o);case"D":return t.$D;case"DD":return b.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return w(s.weekdaysMin,t.$W,l,2);case"ddd":return w(s.weekdaysShort,t.$W,l,3);case"dddd":return l[t.$W];case"H":return String(r);case"HH":return b.s(r,2,"0");case"h":return u(1);case"hh":return u(2);case"a":return y(r,a,!0);case"A":return y(r,a,!1);case"m":return String(a);case"mm":return b.s(a,2,"0");case"s":return String(t.$s);case"ss":return b.s(t.$s,2,"0");case"SSS":return b.s(t.$ms,3,"0");case"Z":return i}return null}(e)||i.replace(":","")})},D.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},D.diff=function(n,u,d){var y,L=this,I=b.p(u),D=N(n),g=(D.utcOffset()-this.utcOffset())*t,m=this-D,p=function(){return b.m(L,D)};switch(I){case w:y=p()/12;break;case c:y=p();break;case M:y=p()/3;break;case l:y=(m-g)/6048e5;break;case o:y=(m-g)/864e5;break;case a:y=m/s;break;case r:y=m/t;break;case i:y=m/e;break;default:y=m}return d?y:b.a(y)},D.daysInMonth=function(){return this.endOf(c).$D},D.$locale=function(){return p[this.$L]},D.locale=function(e,t){if(!e)return this.$L;var s=this.clone(),n=f(e,t,!0);return n&&(s.$L=n),s},D.clone=function(){return b.w(this.$d,this)},D.toDate=function(){return new Date(this.valueOf())},D.toJSON=function(){return this.isValid()?this.toISOString():null},D.toISOString=function(){return this.$d.toISOString()},D.toString=function(){return this.$d.toUTCString()},I}(),x=T.prototype;return N.prototype=x,[["$ms",n],["$s",i],["$m",r],["$H",a],["$W",o],["$M",c],["$y",w],["$D",u]].forEach(function(e){x[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),N.extend=function(e,t){return e.$i||(e(t,T,N),e.$i=!0),N},N.locale=f,N.isDayjs=C,N.unix=function(e){return N(1e3*e)},N.en=p[m],N.Ls=p,N.p={},N}()}(qt);var es=Kt(qt.exports);function ts(){if(!Zt(es))throw new Error("invalid dayjs");return es().format("YYYY-MM-DDTHH:mm:ssZ")}let ss="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),ns=ss.length;function is(e=32){let t=[];e=mt(e)?gt(e):32;for(let s=0;s<e;s++)t[s]=ss[0|Math.random()*ns];return t.join("")}function rs(e){return"[object Array]"===Object.prototype.toString.call(e)}function as(e){return"[object Undefined]"===Object.prototype.toString.call(e)}function os(e){if($e(e)){for(let t in e)return!1;return!0}return!1}function ls(e){return!!rs(e)&&0===e.length}function cs(e){return!!as(e)||(!!function(e){return"[object Null]"===Object.prototype.toString.call(e)}(e)||(!!os(e)||(!!function(e){return!(!Oe(e)||""!==e)}(e)||(!!ls(e)||!!Mt(e)))))}function Ms(e){return!!rs(e)&&(0!==e.length&&(1!==e.length||!cs(e[0])))}function ws(e){return function(e,t={}){let s=Le(t,"fs");if(Ot(e,{fs:s}))return{success:"input folder is already exists: "+e};if(Pt(e,{fs:s}))return{error:"input path already exists: "+e};try{s.mkdirSync(e,{recursive:!0})}catch(e){return{error:e}}return{success:"done: "+e}}(e,{fs:t})}function us(e){try{let t=e();return"string"==typeof t?t:""}catch(e){return""}}function ds(e,t){try{let s=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(s.has(i))return"[Circular]";s.add(i),n.push(i)}return i});return"string"==typeof i?i:""}catch(e){return""}}function ys(e){if(e.length>=2&&'"'===e[0]&&'"'===e[e.length-1]){let t=us(()=>JSON.parse(e));if(""!==t)return t}return e}function Ls(e,t){if(void 0===e)return"";if(null===e)return"null";let s=function(e){let t=typeof e;return"string"===t?e:null==e?"":"number"===t||"boolean"===t||"bigint"===t||"symbol"===t?String(e):""}(e);if(""!==s)return s;let n=ds(e,t);if(""!==n&&"{}"!==n)return ys(n);let i=us(()=>String(e));return""!==i&&"[object Object]"!==i?i:n}function Is(e,t){let s=new WeakSet;null===e||"object"!=typeof e&&"function"!=typeof e||s.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(s.has(e))break;s.add(e)}let r=gs(e,{...t,useCause:!1,useAggregate:!1});""!==r&&i.push(r),n=e}return i.join(" <- ")}function Ds(e,t){let s=null;try{s=e.errors}catch(e){return""}if(!Array.isArray(s)||0===s.length)return"";let n=[];for(let i=0;i<s.length&&i<t.levelCauseMax;i++){if(s[i]===e)continue;let r=gs(s[i],{...t,useCause:!1,useAggregate:!1});""!==r&&n.push(r)}return n.join("; ")}function gs(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 s=null,n=!1;try{s=e.message,n=!0}catch(e){n=!1}if(n&&"string"==typeof s){if(""!==s){let n=s;if(t.useCause){let s=Is(e,t);""!==s&&(n=`${n} <- ${s}`)}if(t.useAggregate){let s=Ds(e,t);""!==s&&(n=`${n} [${s}]`)}return n}let n=Is(e,t);return""!==n?n:""}if(n){let e=Ls(s,t.levelJsonMax);if(""!==e)return e}let i=Is(e,t);if(""!==i)return i;if(t.useAggregate){let s=Ds(e,t);if(""!==s)return s}let r=ds(e,t.levelJsonMax),a=ys(r);if(""!==a&&"{}"!==a)return a;let o=us(()=>String(e));if(""!==o&&"[object Object]"!==o)return o;let l=us(()=>Object.prototype.toString.call(e));return""!==l&&"[object Object]"!==l?l:""!==r?r:""}function ms(e,t={}){let s=Le(t,"useCause",null);Pe(s)||(s=!1);let n=Le(t,"useAggregate",null);Pe(n)||(n=!1);let i=Le(t,"levelCauseMax",null);mt(i,{useLimitSafe:!0})||(i=8),i=gt(i);let r=Le(t,"levelJsonMax",null);mt(r,{useLimitSafe:!0})||(r=6),r=gt(r);let a=Le(t,"lengthMessageMax",null);mt(a,{useLimitSafe:!0})||(a=0),a=gt(a);let o={useCause:s,useAggregate:n,levelCauseMax:i,levelJsonMax:r,lengthMessageMax:a},l="";try{l=gs(e,o)}catch(e){return l="",l}return Fe(l)?(o.lengthMessageMax>0&&l.length>o.lengthMessageMax&&(l=o.lengthMessageMax>3?l.slice(0,o.lengthMessageMax-3)+"...":l.slice(0,o.lengthMessageMax)),l):(l="",l)}function ps(e){if(!(Fe(e)||wt(e)||f(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 hs={exports:{}};var Cs,fs={exports:{}},Ns=Wt(Object.freeze({__proto__:null,default:{}}));function bs(){return Cs||(Cs=1,function(e){var t;e.exports=(t=t||function(e,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&void 0!==Gt&&Gt.crypto&&(s=Gt.crypto),!s)try{s=Ns}catch(e){}var n=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof s.randomBytes)try{return s.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 s;return e.prototype=t,s=new e,e.prototype=null,s}}(),r={},a=r.lib={},o=a.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=a.WordArray=o.extend({init:function(e,s){e=this.words=e||[],this.sigBytes=s!=t?s:4*e.length},toString:function(e){return(e||M).stringify(this)},concat:function(e){var t=this.words,s=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var r=0;r<i;r++){var a=s[r>>>2]>>>24-r%4*8&255;t[n+r>>>2]|=a<<24-(n+r)%4*8}else for(var o=0;o<i;o+=4)t[n+o>>>2]=s[o>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],s=0;s<e;s+=4)t.push(n());return new l.init(t,e)}}),c=r.enc={},M=c.Hex={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],i=0;i<s;i++){var r=t[i>>>2]>>>24-i%4*8&255;n.push((r>>>4).toString(16)),n.push((15&r).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n<t;n+=2)s[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new l.init(s,t/2)}},w=c.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],i=0;i<s;i++){var r=t[i>>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(r))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n<t;n++)s[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new l.init(s,t)}},u=c.Utf8={stringify:function(e){try{return decodeURIComponent(escape(w.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return w.parse(unescape(encodeURIComponent(e)))}},d=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=u.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s,n=this._data,i=n.words,r=n.sigBytes,a=this.blockSize,o=r/(4*a),c=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*a,M=e.min(4*c,r);if(c){for(var w=0;w<c;w+=a)this._doProcessBlock(i,w);s=i.splice(0,c),n.sigBytes-=M}return new l.init(s,M)},clone:function(){var e=o.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});a.Hasher=d.extend({cfg:o.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,s){return new e.init(s).finalize(t)}},_createHmacHelper:function(e){return function(t,s){return new y.HMAC.init(e,s).finalize(t)}}});var y=r.algo={};return r}(Math),t)}(fs)),fs.exports}!function(e){e.exports=bs().enc.Utf8}(hs);var Ts=Kt(hs.exports),xs={exports:{}};!function(e){var t;e.exports=(t=bs(),function(){var e=t,s=e.lib.WordArray;function n(e,t,n){for(var i=[],r=0,a=0;a<t;a++)if(a%4){var o=n[e.charCodeAt(a-1)]<<a%4*2|n[e.charCodeAt(a)]>>>6-a%4*2;i[r>>>2]|=o<<24-r%4*8,r++}return s.create(i,r)}e.enc.Base64={stringify:function(e){var t=e.words,s=e.sigBytes,n=this._map;e.clamp();for(var i=[],r=0;r<s;r+=3)for(var a=(t[r>>>2]>>>24-r%4*8&255)<<16|(t[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|t[r+2>>>2]>>>24-(r+2)%4*8&255,o=0;o<4&&r+.75*o<s;o++)i.push(n.charAt(a>>>6*(3-o)&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,s=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var r=0;r<s.length;r++)i[s.charCodeAt(r)]=r}var a=s.charAt(64);if(a){var o=e.indexOf(a);-1!==o&&(t=o)}return n(e,t,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64)}(xs);var Ss=Kt(xs.exports);function Zs(e,t){for(var s=-1,n=null==e?0:e.length;++s<n&&!1!==t(e[s],s,e););return e}var Xs,Ys=function(e,t,s){for(var n=-1,i=Object(e),r=s(e),a=r.length;a--;){var o=r[Xs?a:++n];if(!1===t(i[o],o,i))break}return e};var As=function(e,t){return function(s,n){if(null==s)return s;if(!Je(s))return e(s,n);for(var i=s.length,r=t?i:-1,a=Object(s);(t?r--:++r<i)&&!1!==n(a[r],r,a););return s}}(function(e,t){return e&&Ys(e,t,Re)}),zs=As;function Es(e){return e}function js(e,t){var s;return(M(e)?Zs:zs)(e,"function"==typeof(s=t)?s:Es)}function vs(e){return"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function Gs(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)}function Ks(e){return"[object Uint16Array]"===Object.prototype.toString.call(e)}function Ws(e){if(!(vs(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)||Gs(e)||Ks(e)))return null;try{if(wt(e.byteLength))return e.byteLength}catch(e){}try{if(wt(e.length))return e.length}catch(e){}try{if(wt(e.size))return e.size}catch(e){}return null}let ks=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/;function Us(e,t={}){let s=Le(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:new Uint8Array;if(!Fe(e))return n("invalid str");if(!("function"==typeof e.isWellFormed?e.isWellFormed():!ks.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 s?{state:"success",msg:i}:i}function Vs(e,t,s=0,n=!0,i=52,r=8){return function(e,t,s,n,i,r){if(!wt(e))return null;if(!Gs(t))return null;if(!dt(s))return null;if(!Pe(n))return null;if(!dt(i))return null;if(!dt(r))return null;let a,o,l;e=ut(e);let c=8*r-i-1,M=(1<<c)-1,w=M>>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?r-1:0,y=n?-1:1,L=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,a=M):(a=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-a))<1&&(a--,l*=2),(e+=a+w>=1?u/l:u*Math.pow(2,1-w))*l>=2&&(a++,l/=2),a+w>=M?(o=0,a=M):a+w>=1?(o=(e*l-1)*Math.pow(2,i),a+=w):(o=e*Math.pow(2,w-1)*Math.pow(2,i),a=0));i>=8;t[s+d]=255&o,d+=y,o/=256,i-=8);for(a=a<<i|o,c+=i;c>0;t[s+d]=255&a,d+=y,a/=256,c-=8);return t[s+d-y]|=128*L,null}(e,t,s,n,i,r)}function Qs(e){let t=0;js(e,e=>{t+=Ws(e)});let s=new Uint8Array(t),n=0;return js(e,e=>{let t=function(e){return vs(e)?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0)}(e);s.set(t,n),n+=t.length}),s}function Hs(e,t={}){let s=[],n=new Uint8Array,i=Le(t,"returnWithStateAndMsg",null);Pe(i)||(i=!1);let r=e=>i?{state:"error",msg:e}:new Uint8Array;if(!(a=e,rs(a)&&a.length>=1||_e(e)))return r("invalid data, data is not an effective object or a non-empty array");var a;let o=[],l=[];function c(e){o.push(Ws(e)),l.push(e)}try{let t=function(e,t={}){let s=Le(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:{results:"",binarys:[]};if(!$e(e)&&!rs(e))return n("invalid data, data is not an object or array");if(os(e)||ls(e))return n("invalid data, data is an empty object or empty array");let i=/^(?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,r="",a=[];try{let t=-1;r=JSON.stringify(e,function(e,s){if(Gs(s)){t+=1;let e=`[BlazeForUint8Array]::${t}`;return a.push(s),e}if(Ks(s)){t+=1;let e=`[BlazeForUint16Array]::${t}`;return a.push(s),e}if(vs(s)){t+=1;let e=`[BlazeForArrayBuffer]::${t}`;return a.push(s),e}return xt(s)&&(s=s.toString()),Fe(s)&&91===s.charCodeAt(0)&&i.test(s)?"[BlazeForPreventEscape]"+s:s})}catch(e){return n(e.toString())}return s?{state:"success",msg:{results:r,binarys:a}}:{results:r,binarys:a}}(e,{returnWithStateAndMsg:!0});if("error"===t.state)return r(`obj2stru8arr: ${t.msg}`);let i=t.msg;c(Us(i.results)),js(i.binarys,e=>{c(e)});let a=o,M=Us(JSON.stringify(a)),w=new Uint8Array(8);Vs(Ws(M),w),s.push(w),s.push(M),js(l,e=>{s.push(e)}),n=Qs(s)}catch(e){return r(e.toString())}return i?{state:"success",msg:n}:n}function Js(e,t=0,s=!0,n=52,i=8){return function(e,t,s,n,i){if(!Gs(e))return null;if(!dt(t))return null;if(!Pe(s))return null;if(!dt(n))return null;if(!dt(i))return null;let r,a,o=8*i-n-1,l=(1<<o)-1,c=l>>1,M=-7,w=s?0:i-1,u=s?1:-1,d=e[t+w];for(w+=u,r=d&(1<<-M)-1,d>>=-M,M+=o;M>0;r=256*r+e[t+w],w+=u,M-=8);for(a=r&(1<<-M)-1,r>>=-M,M+=n;M>0;a=256*a+e[t+w],w+=u,M-=8);if(0===r)r=1-c;else{if(r===l)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,n),r-=c}return(d?-1:1)*a*Math.pow(2,r-n)}(e,t,s,n,i)}function Rs(e,t={}){let s=Le(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:"";if(!Gs(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 s?{state:"success",msg:i}:i}function Ps(e,t={}){let s=Le(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:{};if(!_e(e))return n("invalid data");let i=null,r=null;try{i=e.results,r=e.binarys}catch(e){return n(e.toString())}if(!Fe(i))return n("invalid results");if(!rs(r))return n("invalid binarys");let a=/^\[BlazeFor(Uint8Array|Uint16Array|ArrayBuffer)\]::(\d+)$/,o=/^\[BlazeForPreventEscape\](?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,l={};try{l=JSON.parse(i,function(e,t){if(!Fe(t)||91!==t.charCodeAt(0))return t;let s=a.exec(t);if(null===s)return o.test(t)?t.slice(23):t;let n=Number(s[2]);if(n>=r.length)throw new Error(`binary index out of range[${n}], binarys.length[${r.length}]`);return((e,t,s)=>{if("Uint16Array"===e&&!Ks(s)){if(!Gs(s))throw new Error(`binarys[${t}] can not be restored to Uint16Array`);if(s.byteLength%2!=0)throw new Error(`binarys[${t}] byteLength[${s.byteLength}] is not even, can not be restored to Uint16Array`);let e=0===s.byteOffset&&s.byteLength===s.buffer.byteLength?s:new Uint8Array(s);return new Uint16Array(e.buffer)}if("ArrayBuffer"===e&&!vs(s)){if(!Gs(s))throw new Error(`binarys[${t}] can not be restored to ArrayBuffer`);return s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength)}return s})(s[1],n,r[n])})}catch(e){return n(e.toString())}return s?{state:"success",msg:l}:l}function Os(e,t={}){let s={},n=Le(t,"returnWithStateAndMsg",null);Pe(n)||(n=!1);let i=e=>n?{state:"error",msg:e}:{};if(!Gs(e))return i("invalid u8a");try{let t=8,n=e.slice(0,t),r=e.slice(t,Ws(e)),a=Js(n),o=r.slice(0,a),l=r.slice(a,Ws(r)),c=Rs(o,{returnWithStateAndMsg:!0});if("error"===c.state)return i(`u8arr2str: ${c.msg}`);let M=c.msg,w=function(e,t){let s=0,n=0,i=[];return js(t,t=>{n=s+t;let r=e.slice(s,n);s=n,i.push(r)}),i}(l,JSON.parse(M)),u=Rs(w.shift(),{returnWithStateAndMsg:!0});if("error"===u.state)return i(`u8arr2str: ${u.msg}`);let d=Ps({results:u.msg,binarys:w},{returnWithStateAndMsg:!0});if("error"===d.state)return i(`stru8arr2obj: ${d.msg}`);s=d.msg}catch(e){return i(e.toString())}return n?{state:"success",msg:s}:s}function Fs(e){return function(e,t={}){let s=Le(t,"fs");if(!Pt(e,{fs:s}))return{success:"file does not exist: "+e};if(!Bt(e,{fs:s}))return{error:"input path is not a file: "+e};try{s.unlinkSync(e)}catch(e){return{error:e}}return{success:"done: "+e}}(e,{fs:t})}function Bs(e){return Fe(e)&&e.length<=128&&/^[A-Za-z0-9]+$/.test(e)}let $s={permission:200,param:200,app:200,output:200,packet:200,internal:200},_s={main:{apiType:"main",api:"apiMain",authFrom:"header",statusOf:$s},ulctr:{apiType:"upload-controller",api:"apiUploadCheck",authFrom:"header",statusOf:$s},slc:{apiType:"upload-slice",api:"apiUploadSlice",authFrom:"header",statusOf:$s},dwgfn:{apiType:"download-get-filename",api:"apiDownloadGetFilename",authFrom:"header",statusOf:$s,fields:[{name:"streamRead"},{name:"filename"}]},dwgf:{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:{apiType:"download",api:"apiDownload",authFrom:"header",statusOf:$s,fields:[{name:"streamRead"},{name:"filename"},{name:"fileSize"},{name:"fileType"}]}};var qs=U(d,"DataView"),en=U(d,"Promise"),tn=U(d,"Set"),sn=U(d,"WeakMap"),nn="[object Map]",rn="[object Promise]",an="[object Set]",on="[object WeakMap]",ln="[object DataView]",cn=z(qs),Mn=z(B),wn=z(en),un=z(tn),dn=z(sn),yn=h;(qs&&yn(new qs(new ArrayBuffer(1)))!=ln||B&&yn(new B)!=nn||en&&yn(en.resolve())!=rn||tn&&yn(new tn)!=an||sn&&yn(new sn)!=on)&&(yn=function(e){var t=h(e),s="[object Object]"==t?e.constructor:void 0,n=s?z(s):"";if(n)switch(n){case cn:return ln;case Mn:return nn;case wn:return rn;case un:return an;case dn:return on}return t});var Ln=yn;function In(e){return function(t){return null==t?void 0:t[e]}}var Dn=In("length"),gn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");function mn(e){return gn.test(e)}var pn="\\ud800-\\udfff",hn="["+pn+"]",Cn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",fn="\\ud83c[\\udffb-\\udfff]",Nn="[^"+pn+"]",bn="(?:\\ud83c[\\udde6-\\uddff]){2}",Tn="[\\ud800-\\udbff][\\udc00-\\udfff]",xn="(?:"+Cn+"|"+fn+")"+"?",Sn="[\\ufe0e\\ufe0f]?",Zn=Sn+xn+("(?:\\u200d(?:"+[Nn,bn,Tn].join("|")+")"+Sn+xn+")*"),Xn="(?:"+[Nn+Cn+"?",Cn,bn,Tn,hn].join("|")+")",Yn=RegExp(fn+"(?="+fn+")|"+Xn+Zn,"g");function An(e){return mn(e)?function(e){for(var t=Yn.lastIndex=0;Yn.test(e);)++t;return t}(e):Dn(e)}function zn(e){if(null==e)return 0;if(Je(e))return"string"==typeof(t=e)||!M(t)&&C(t)&&"[object String]"==h(t)?An(e):e.length;var t,s=Ln(e);return"[object Map]"==s||"[object Set]"==s?e.size:He(e).length}function En(e){var t=this.__data__=new F(e);this.size=t.size}En.prototype.clear=function(){this.__data__=new F,this.size=0},En.prototype.delete=function(e){var t=this.__data__,s=t.delete(e);return this.size=t.size,s},En.prototype.get=function(e){return this.__data__.get(e)},En.prototype.has=function(e){return this.__data__.has(e)},En.prototype.set=function(e,t){var s=this.__data__;if(s instanceof F){var n=s.__data__;if(!B||n.length<199)return n.push([e,t]),this.size=++s.size,this;s=this.__data__=new _(n)}return s.set(e,t),this.size=s.size,this};function jn(e){var t=-1,s=null==e?0:e.length;for(this.__data__=new _;++t<s;)this.add(e[t])}function vn(e,t){for(var s=-1,n=null==e?0:e.length;++s<n;)if(t(e[s],s,e))return!0;return!1}function Gn(e,t){return e.has(t)}jn.prototype.add=jn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},jn.prototype.has=function(e){return this.__data__.has(e)};function Kn(e,t,s,n,i,r){var a=1&s,o=e.length,l=t.length;if(o!=l&&!(a&&l>o))return!1;var c=r.get(e),M=r.get(t);if(c&&M)return c==t&&M==e;var w=-1,u=!0,d=2&s?new jn:void 0;for(r.set(e,t),r.set(t,e);++w<o;){var y=e[w],L=t[w];if(n)var I=a?n(L,y,w,t,e,r):n(y,L,w,e,t,r);if(void 0!==I){if(I)continue;u=!1;break}if(d){if(!vn(t,function(e,t){if(!Gn(d,t)&&(y===e||i(y,e,s,n,r)))return d.push(t)})){u=!1;break}}else if(y!==L&&!i(y,L,s,n,r)){u=!1;break}}return r.delete(e),r.delete(t),u}var Wn=d.Uint8Array;function kn(e){var t=-1,s=Array(e.size);return e.forEach(function(e,n){s[++t]=[n,e]}),s}function Un(e){var t=-1,s=Array(e.size);return e.forEach(function(e){s[++t]=e}),s}var Vn=y?y.prototype:void 0,Qn=Vn?Vn.valueOf:void 0;function Hn(e,t){for(var s=-1,n=t.length,i=e.length;++s<n;)e[i+s]=t[s];return e}function Jn(e,t,s){var n=t(e);return M(e)?n:Hn(n,s(e))}function Rn(e,t){for(var s=-1,n=null==e?0:e.length,i=0,r=[];++s<n;){var a=e[s];t(a,s,e)&&(r[i++]=a)}return r}function Pn(){return[]}var On=Object.prototype.propertyIsEnumerable,Fn=Object.getOwnPropertySymbols,Bn=Fn?function(e){return null==e?[]:(e=Object(e),Rn(Fn(e),function(t){return On.call(e,t)}))}:Pn;function $n(e){return Jn(e,Re,Bn)}var _n=Object.prototype.hasOwnProperty;var qn="[object Arguments]",ei="[object Array]",ti="[object Object]",si=Object.prototype.hasOwnProperty;function ni(e,t,s,n,i,r){var a=M(e),o=M(t),l=a?ei:Ln(e),c=o?ei:Ln(t),w=(l=l==qn?ti:l)==ti,u=(c=c==qn?ti:c)==ti,d=l==c;if(d&&be(e)){if(!be(t))return!1;a=!0,w=!1}if(d&&!w)return r||(r=new En),a||ve(e)?Kn(e,t,s,n,i,r):function(e,t,s,n,i,r,a){switch(s){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||!r(new Wn(e),new Wn(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return R(+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 o=kn;case"[object Set]":var l=1&n;if(o||(o=Un),e.size!=t.size&&!l)return!1;var c=a.get(e);if(c)return c==t;n|=2,a.set(e,t);var M=Kn(o(e),o(t),n,i,r,a);return a.delete(e),M;case"[object Symbol]":if(Qn)return Qn.call(e)==Qn.call(t)}return!1}(e,t,l,s,n,i,r);if(!(1&s)){var y=w&&si.call(e,"__wrapped__"),L=u&&si.call(t,"__wrapped__");if(y||L){var I=y?e.value():e,D=L?t.value():t;return r||(r=new En),i(I,D,s,n,r)}}return!!d&&(r||(r=new En),function(e,t,s,n,i,r){var a=1&s,o=$n(e),l=o.length;if(l!=$n(t).length&&!a)return!1;for(var c=l;c--;){var M=o[c];if(!(a?M in t:_n.call(t,M)))return!1}var w=r.get(e),u=r.get(t);if(w&&u)return w==t&&u==e;var d=!0;r.set(e,t),r.set(t,e);for(var y=a;++c<l;){var L=e[M=o[c]],I=t[M];if(n)var D=a?n(I,L,M,t,e,r):n(L,I,M,e,t,r);if(!(void 0===D?L===I||i(L,I,s,n,r):D)){d=!1;break}y||(y="constructor"==M)}if(d&&!y){var g=e.constructor,m=t.constructor;g==m||!("constructor"in e)||!("constructor"in t)||"function"==typeof g&&g instanceof g&&"function"==typeof m&&m instanceof m||(d=!1)}return r.delete(e),r.delete(t),d}(e,t,s,n,i,r))}function ii(e,t,s,n,i){return e===t||(null==e||null==t||!C(e)&&!C(t)?e!=e&&t!=t:ni(e,t,s,n,ii,i))}function ri(e){return e==e&&!x(e)}function ai(e,t){return function(s){return null!=s&&(s[e]===t&&(void 0!==t||e in Object(s)))}}function oi(e){var t=function(e){for(var t=Re(e),s=t.length;s--;){var n=t[s],i=e[n];t[s]=[n,i,ri(i)]}return t}(e);return 1==t.length&&t[0][2]?ai(t[0][0],t[0][1]):function(s){return s===e||function(e,t,s,n){var i=s.length,r=i,a=!n;if(null==e)return!r;for(e=Object(e);i--;){var o=s[i];if(a&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++i<r;){var l=(o=s[i])[0],c=e[l],M=o[1];if(a&&o[2]){if(void 0===c&&!(l in e))return!1}else{var w=new En;if(n)var u=n(c,M,l,e,t,w);if(!(void 0===u?ii(M,c,3,n,w):u))return!1}}return!0}(s,e,t)}}function li(e,t){return null!=e&&t in Object(e)}function ci(e,t){return null!=e&&function(e,t,s){for(var n=-1,i=(t=ue(t,e)).length,r=!1;++n<i;){var a=de(t[n]);if(!(r=null!=e&&s(e,a)))break;e=e[a]}return r||++n!=i?r:!!(i=null==e?0:e.length)&&Se(i)&&xe(a,i)&&(M(e)||he(e))}(e,t,li)}function Mi(e){return T(e)?In(de(e)):function(e){return function(t){return ye(t,e)}}(e)}function wi(e){return"function"==typeof e?e:null==e?Es:"object"==typeof e?M(e)?function(e,t){return T(e)&&ri(t)?ai(de(e),t):function(s){var n=Le(s,e);return void 0===n&&n===t?ci(s,e):ii(t,n,3)}}(e[0],e[1]):oi(e):Mi(e)}function ui(e,t){var s=-1,n=Je(e)?Array(e.length):[];return zs(e,function(e,i,r){n[++s]=t(e,i,r)}),n}function di(e,t){return(M(e)?oe:ui)(e,wi(t))}function yi(e,t,s){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(s=s>i?i:s)<0&&(s+=i),i=t>s?0:s-t>>>0,t>>>=0;for(var r=Array(i);++n<i;)r[n]=e[n+t];return r}function Li(e){return e!=e}function Ii(e,t,s){return t==t?function(e,t,s){for(var n=s-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}(e,t,s):function(e,t,s,n){for(var i=e.length,r=s+(n?1:-1);n?r--:++r<i;)if(t(e[r],r,e))return r;return-1}(e,Li,s)}var Di="\\ud800-\\udfff",gi="["+Di+"]",mi="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",pi="\\ud83c[\\udffb-\\udfff]",hi="[^"+Di+"]",Ci="(?:\\ud83c[\\udde6-\\uddff]){2}",fi="[\\ud800-\\udbff][\\udc00-\\udfff]",Ni="(?:"+mi+"|"+pi+")"+"?",bi="[\\ufe0e\\ufe0f]?",Ti=bi+Ni+("(?:\\u200d(?:"+[hi,Ci,fi].join("|")+")"+bi+Ni+")*"),xi="(?:"+[hi+mi+"?",mi,Ci,fi,gi].join("|")+")",Si=RegExp(pi+"(?="+pi+")|"+xi+Ti,"g");function Zi(e){return mn(e)?function(e){return e.match(Si)||[]}(e):function(e){return e.split("")}(e)}function Xi(e,t,s){if((e=we(e))&&(s||void 0===t))return tt(e);if(!e||!(t=Me(t)))return e;var n=Zi(e),i=Zi(t),r=function(e,t){for(var s=-1,n=e.length;++s<n&&Ii(t,e[s],0)>-1;);return s}(n,i),a=function(e,t){for(var s=e.length;s--&&Ii(t,e[s],0)>-1;);return s}(n,i)+1;return function(e,t,s){var n=e.length;return s=void 0===s?n:s,!t&&s>=n?e:yi(e,t,s)}(n,r,a).join("")}function Yi(e,t){if(!Fe(e))return[];if(!Fe(t))return[];let s=function(e,t){return Fe(e)&&Fe(t)?e.split(t):[]}(e,t);s=di(s,Xi);let n=[];return js(s,function(e){Fe(e)&&n.push(e)}),n}const Ai=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 zi(e,t={}){let s=Le(t,"fs"),n=Le(t,"chunkSize");if(wt(n)||(n=67108864),n=ut(n),!Bt(e,{fs:s}))return Promise.reject("fp is not a file");let i=Et();try{let{create64:t}=await async function(){return function(e){const{exports:{mem:t,xxh32:s,xxh64:n,init32:i,update32:r,digest32:a,init64:o,update64:l,digest64:c}}=e;let M=new Uint8Array(t.buffer);function w(e,s){if(t.buffer.byteLength<e+s){const n=Math.ceil((e+s-t.buffer.byteLength)/65536);t.grow(n),M=new Uint8Array(t.buffer)}}function u(e,t,s,n,i,r){w(e);const a=new Uint8Array(e);return M.set(a),s(0,t),a.set(M.subarray(0,e)),{update(t){let s;return M.set(a),"string"==typeof t?(w(3*t.length,e),s=I.encodeInto(t,M.subarray(e)).written):(w(t.byteLength,e),M.set(t,e),s=t.byteLength),n(0,e,s),a.set(M.subarray(0,e)),this},digest:()=>(M.set(a),r(i(0)))}}function d(e){return e>>>0}const y=2n**64n-1n;function L(e){return e&y}const I=new TextEncoder;function D(e,t=0){return w(3*e.length,0),d(s(0,I.encodeInto(e,M).written,t))}function g(e,t=0n){return w(3*e.length,0),L(n(0,I.encodeInto(e,M).written,t))}return{h32:D,h32ToString:(e,t=0)=>D(e,t).toString(16).padStart(8,"0"),h32Raw:(e,t=0)=>(w(e.byteLength,0),M.set(e),d(s(0,e.byteLength,t))),create32:(e=0)=>u(48,e,i,r,a,d),h64:g,h64ToString:(e,t=0n)=>g(e,t).toString(16).padStart(16,"0"),h64Raw:(e,t=0n)=>(w(e.byteLength,0),M.set(e),L(n(0,e.byteLength,t))),create64:(e=0n)=>u(88,e,o,l,c,L)}}((await WebAssembly.instantiate(Ai)).instance)}(),r=t(),a=s.createReadStream(e,{highWaterMark:n});a.on("data",e=>{r.update(e)}),a.on("end",()=>{let e=r.digest().toString(16).padStart(16,"0");i.resolve(e)}),a.on("error",i.reject)}catch(e){i.reject(e.toString())}return i}var Ei={exports:{}};!function(e){var t,s;e.exports=(t=a,s={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,a){if("function"!=typeof n)throw new TypeError("The listener must be a function");var o=new i(n,r||e,a),l=s?s+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function a(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function o(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),o.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},o.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,a=new Array(r);i<r;i++)a[i]=n[i].fn;return a},o.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},o.prototype.emit=function(e,t,n,i,r,a){var o=s?s+e:e;if(!this._events[o])return!1;var l,c,M=this._events[o],w=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),w){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,a),!0}for(c=1,l=new Array(w-1);c<w;c++)l[c-1]=arguments[c];M.fn.apply(M.context,l)}else{var u,d=M.length;for(c=0;c<d;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),w){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!l)for(u=1,l=new Array(w-1);u<w;u++)l[u-1]=arguments[u];M[c].fn.apply(M[c].context,l)}}return!0},o.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},o.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},o.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return a(this,r),this;var o=this._events[r];if(o.fn)o.fn!==t||i&&!o.once||n&&o.context!==n||a(this,r);else{for(var l=0,c=[],M=o.length;l<M;l++)(o[l].fn!==t||i&&!o[l].once||n&&o[l].context!==n)&&c.push(o[l]);c.length?this._events[r]=1===c.length?c[0]:c:a(this,r)}return this},o.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&a(this,t)):(this._events=new n,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=s,o.EventEmitter=o,e.exports=o}({get exports(){return t},set exports(e){t=e}});var s=t;let n;!function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(i="CgogICAgICAgIC8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwogICAgICAgIGxldCB7IHBhcmVudFBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJykgLy/lm6BwYWNrYWdlLmpzb27kuI3ntaZ0eXBlPW1vZHVsZeaVheeEoeazleaUr+aPtGVzNiBpbXBvcnQsIOW+l+S9v+eUqHJlcXVpcmUKICAgICAgICAvL+iLpeimgeaWvG5vZGVqcyB3b3JrZXLlhafkvb/nlKjnhKHms5XovYnora/nmoTljp/nlJ/lpZfku7bkvovlpoJmcywg6YG/5YWN5L2/55So6aCC5bGkaW1wb3J05Yqg6LyJ5L2/55SoLCDlm6DnhKHms5XovYnora/mnIPnm7TmjqXkv53nlZkKICAgICAgICAvL+S4puWboGltcG9ydOS9jeaWvHdvcmtlcuWkluWxpOmZkOWumueCunJlcXVpcmXljYAocGFja2FnZS5qc29u5LiN57WmdHlwZT1tb2R1bGUpLCDmlYXlh7rnj77pjK/oqqTnhKHms5XovYnora8KICAgICAgICAKCiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpLHI9cmVxdWlyZSgiZXZlbnRzIiksbj1BcnJheS5pc0FycmF5LGk9Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLG89Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1PWl8fG98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYT11LlN5bWJvbCxjPU9iamVjdC5wcm90b3R5cGUscz1jLmhhc093blByb3BlcnR5LGY9Yy50b1N0cmluZyxsPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgcD0iW29iamVjdCBOdWxsXSIseT0iW29iamVjdCBVbmRlZmluZWRdIix2PWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10P3k6cDp2JiZ2IGluIE9iamVjdCh0KT9mdW5jdGlvbih0KXt2YXIgZT1zLmNhbGwodCxsKSxyPXRbbF07dHJ5e3RbbF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKHQpe312YXIgaT1mLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbbF09cjpkZWxldGUgdFtsXSksaX0odCk6ZnVuY3Rpb24odCl7cmV0dXJuIGguY2FsbCh0KX0odCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBkPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIF8odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxiKHQpJiZnKHQpPT1kfXZhciBTPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGo9L15cdyokLztmdW5jdGlvbiBtKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PWV8fCJmdW5jdGlvbiI9PWUpfXZhciB3PSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixPPSJbb2JqZWN0IEZ1bmN0aW9uXSIsRT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLE49IltvYmplY3QgUHJveHldIjt2YXIgQSxSPXVbIl9fY29yZS1qc19zaGFyZWRfXyJdLCQ9KEE9L1teLl0rJC8uZXhlYyhSJiZSLmtleXMmJlIua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0E6IiI7dmFyIHg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBJPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHo9RnVuY3Rpb24ucHJvdG90eXBlLEY9T2JqZWN0LnByb3RvdHlwZSxMPXoudG9TdHJpbmcsUD1GLmhhc093blByb3BlcnR5LFQ9UmVnRXhwKCJeIitMLmNhbGwoUCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gTSh0KXtpZighbSh0KXx8KGU9dCwkJiYkIGluIGUpKXJldHVybiExO3ZhciBlLHI9ZnVuY3Rpb24odCl7aWYoIW0odCkpcmV0dXJuITE7dmFyIGU9Zyh0KTtyZXR1cm4gZT09T3x8ZT09RXx8ZT09d3x8ZT09Tn0odCk/VDpJO3JldHVybiByLnRlc3QoZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiB4LmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifSh0KSl9ZnVuY3Rpb24gayh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbZV19KHQsZSk7cmV0dXJuIE0ocik/cjp2b2lkIDB9dmFyIFU9ayhPYmplY3QsImNyZWF0ZSIpO3ZhciBDPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIEc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHEodCxlKXtmb3IodmFyIHIsbixpPXQubGVuZ3RoO2ktLTspaWYoKHI9dFtpXVswXSk9PT0obj1lKXx8ciE9ciYmbiE9bilyZXR1cm4gaTtyZXR1cm4tMX1XLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189VT9VKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxXLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LFcucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKFUpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gQy5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9LFcucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiBVP3ZvaWQgMCE9PWVbdF06Ry5jYWxsKGUsdCl9LFcucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLHJbdF09VSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfTt2YXIgWD1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIEIodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19Qi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxCLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPXEoZSx0KTtyZXR1cm4hKHI8MCkmJihyPT1lLmxlbmd0aC0xP2UucG9wKCk6WC5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMCl9LEIucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9cShlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19LEIucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gcSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxCLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49cShyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfTt2YXIgRD1rKHUsIk1hcCIpO2Z1bmN0aW9uIEgodCxlKXt2YXIgcixuLGk9dC5fX2RhdGFfXztyZXR1cm4oInN0cmluZyI9PShuPXR5cGVvZihyPWUpKXx8Im51bWJlciI9PW58fCJzeW1ib2wiPT1ufHwiYm9vbGVhbiI9PW4/Il9fcHJvdG9fXyIhPT1yOm51bGw9PT1yKT9pWyJzdHJpbmciPT10eXBlb2YgZT8ic3RyaW5nIjoiaGFzaCJdOmkubWFwfWZ1bmN0aW9uIEoodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19Si5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBXLG1hcDpuZXcoRHx8Qiksc3RyaW5nOm5ldyBXfX0sSi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPUgodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sSi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMsdCkuZ2V0KHQpfSxKLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIEgodGhpcyx0KS5oYXModCl9LEoucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPUgodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307dmFyIEs9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIFEodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihLKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sbz1yLmNhY2hlO2lmKG8uaGFzKGkpKXJldHVybiBvLmdldChpKTt2YXIgdT10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9by5zZXQoaSx1KXx8byx1fTtyZXR1cm4gci5jYWNoZT1uZXcoUS5DYWNoZXx8Sikscn1RLkNhY2hlPUo7dmFyIFYsWSxaLHR0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGV0PS9cXChcXCk/L2cscnQ9KFY9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZSh0dCwoZnVuY3Rpb24odCxyLG4saSl7ZS5wdXNoKG4/aS5yZXBsYWNlKGV0LCIkMSIpOnJ8fHQpfSkpLGV9LFk9UShWLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09Wi5zaXplJiZaLmNsZWFyKCksdH0pKSxaPVkuY2FjaGUsWSksbnQ9cnQ7dmFyIGl0PTEvMCxvdD1hP2EucHJvdG90eXBlOnZvaWQgMCx1dD1vdD9vdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gYXQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG4odCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09ZSh0W3JdLHIsdCk7cmV0dXJuIGl9KHQsYXQpKyIiO2lmKF8odCkpcmV0dXJuIHV0P3V0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LWl0PyItMCI6ZX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gbnVsbD09dD8iIjphdCh0KX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiBuKHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihuKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFfKHQpKXx8ai50ZXN0KHQpfHwhUy50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX0odCxlKT9bdF06bnQoY3QodCkpfXZhciBmdD0xLzA7ZnVuY3Rpb24gbHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxfKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1mdD8iLTAiOmV9ZnVuY3Rpb24gaHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1zdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbbHQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufWZ1bmN0aW9uIHB0KHQsZT17fSl7bGV0IHI9aHQoZSwiZnMiKSxuPSExO3RyeXtyLnN0YXRTeW5jKHQpLG49ITB9Y2F0Y2h7bj0hMX1yZXR1cm4gbn1mdW5jdGlvbiB5dCh0LGU9e30pe2xldCByPWh0KGUsImZzIik7cmV0dXJuISFwdCh0LHtmczpyfSkmJighci5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIXIubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCkpfWZ1bmN0aW9uIHZ0KCl7bGV0IHQsZSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbigpe3Q9YXJndW1lbnRzWzBdLGU9YXJndW1lbnRzWzFdfSkpO3JldHVybiByLnJlc29sdmU9dCxyLnJlamVjdD1lLHJ9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBidCh0KXtpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2ZvcihsZXQgZSBpbiB0KXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGR0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF90KHQpe3JldHVybiB0IT10fWZ1bmN0aW9uIFN0KHQpe3JldHVybiEhZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgVW5kZWZpbmVkXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdWxsXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFidCh0KXx8KCEhZnVuY3Rpb24odCl7cmV0dXJuISghZHQodCl8fCIiIT09dCl9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4hIWd0KHQpJiYwPT09dC5sZW5ndGh9KHQpfHwhIV90KHQpKSkpKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4hKCFkdCh0KXx8IiI9PT10KX12YXIgbXQ9L1xzLzt2YXIgd3Q9L15ccysvO2Z1bmN0aW9uIE90KHQpe3JldHVybiB0P3Quc2xpY2UoMCxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZtdC50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfSh0KSsxKS5yZXBsYWNlKHd0LCIiKTp0fXZhciBFdD1OYU4sTnQ9L15bLStdMHhbMC05YS1mXSskL2ksQXQ9L14wYlswMV0rJC9pLFJ0PS9eMG9bMC03XSskL2ksJHQ9cGFyc2VJbnQ7ZnVuY3Rpb24geHQodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKF8odCkpcmV0dXJuIEV0O2lmKG0odCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PW0oZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PU90KHQpO3ZhciByPUF0LnRlc3QodCk7cmV0dXJuIHJ8fFJ0LnRlc3QodCk/JHQodC5zbGljZSgyKSxyPzI6OCk6TnQudGVzdCh0KT9FdDordH12YXIgSXQ9MS8wLHp0PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBGdCh0KXtyZXR1cm4gdD8odD14dCh0KSk9PT1JdHx8dD09PS1JdD8odDwwPy0xOjEpKnp0OnQ9PXQ/dDowOjA9PT10P3Q6MH1mdW5jdGlvbiBMdCh0KXt2YXIgZT1GdCh0KSxyPWUlMTtyZXR1cm4gZT09ZT9yP2UtcjplOjB9dmFyIFB0PSJbb2JqZWN0IEJvb2xlYW5dIjtmdW5jdGlvbiBUdCh0KXtyZXR1cm4hMD09PShlPXQpfHwhMT09PWV8fGIoZSkmJmcoZSk9PVB0O3ZhciBlfWZ1bmN0aW9uIE10KHQpe2xldCBlPSExO2lmKGp0KHQpKXtpZigiIj09PXQudHJpbSgpKXJldHVybiExO2U9IWlzTmFOKE51bWJlcih0KSl9ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2lmKF90KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9ZnVuY3Rpb24ga3QodCl7aWYoIU10KHQpKXJldHVybiAwO3JldHVybiBGdCh0KX1mdW5jdGlvbiBVdCh0LGU9e30pe2xldCByPWh0KGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7cmV0dXJuIFR0KHIpfHwocj0hMSksISFNdCh0KSYmKHQ9a3QodCkscj9OdW1iZXIuaXNTYWZlSW50ZWdlcih0KToibnVtYmVyIj09dHlwZW9mKG49dCkmJm49PUx0KG4pKTt2YXIgbn12YXIgQ3Q9dS5pc0Zpbml0ZSxHdD1NYXRoLm1pbjt2YXIgV3Q9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aFt0XTtyZXR1cm4gZnVuY3Rpb24odCxyKXtpZih0PXh0KHQpLChyPW51bGw9PXI/MDpHdChMdChyKSwyOTIpKSYmQ3QodCkpe3ZhciBuPShjdCh0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygobj0oY3QoZShuWzBdKyJlIisoK25bMV0rcikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK25bMV0tcikpfXJldHVybiBlKHQpfX0oInJvdW5kIikscXQ9V3Q7ZnVuY3Rpb24gWHQodCxlPXt9KXtsZXQgcj1odChlLCJ1c2VDbGFtcFNhZmUiLG51bGwpO1R0KHIpfHwocj0hMSk7bGV0IG49aHQoZSwidXNlTGltaXRTYWZlIixudWxsKTtUdChuKXx8KG49ITEpO2xldCBpPWh0KGUsInJldHVybldpdGhTdGF0ZUFuZE1zZyIsbnVsbCk7VHQoaSl8fChpPSExKTtsZXQgbz10PT5pP3tzdGF0ZToic3VjY2VzcyIsbXNnOnR9OnQsdT10PT57aWYoaSlyZXR1cm57c3RhdGU6ImVycm9yIixtc2c6dH07dGhyb3cgbmV3IEVycm9yKHQpfTtpZighTXQodCkpcmV0dXJuIG8oMCk7bGV0IGE9bnVsbDt0cnl7dD1rdCh0KSxhPXF0KHQpLHImJihhPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2E9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI6YTxOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmKGE9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKX1jYXRjaCh0KXtyZXR1cm4gdSh0LnRvU3RyaW5nKCkpfXJldHVybiBuJiYhTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGEpKT91KGB2WyR7dH1dIGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApOigiMCI9PT1TdHJpbmcoYSkmJihhPTApLG8oYSkpfWZ1bmN0aW9uIEJ0KHQsZT17fSl7aWYoIVV0KHQsZSkpcmV0dXJuITE7cmV0dXJuIFh0KHQpPj0wfWZ1bmN0aW9uIER0KHQsZSl7aWYoIWp0KHQpKXJldHVybiIiO2lmKCFCdChlKSlyZXR1cm4iIjtpZigwPT09KGU9WHQoZSkpKXJldHVybiIiO2xldCByPXQubGVuZ3RoLWU7cmV0dXJuIHI8MCYmKHI9MCksdC5zdWJzdHJpbmcocixyK2UpfWZ1bmN0aW9uIEh0KHQsZSl7cmV0dXJuIGp0KHQpJiZCdChlKT8wPT09KGU9WHQoZSkpP3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4ganQodCkmJkJ0KGUpPzA9PT0oZT1YdChlKSk/IiI6dC5zdWJzdHJpbmcoMCxlKToiIn0odCx0Lmxlbmd0aC1lKToiIn1mdW5jdGlvbiBKdCh0KXtpZighanQodCkpcmV0dXJue3BhdGg6IiIsaXNSb290OiExfTtmb3IoO3QuaW5kZXhPZigiXFxcXCIpPj0wOyl0PXQucmVwbGFjZSgiXFxcXCIsIlxcIik7Zm9yKDt0LmluZGV4T2YoIi8vIik+PTA7KXQ9dC5yZXBsYWNlKCIvLyIsIi8iKTtpZigiOiI9PT1EdCh0LDEpKXJldHVybntwYXRoOmAke3R9XFxgLGlzUm9vdDohMH07aWYoIlxcIj09PUR0KHQsMSkpe2xldCBlPUh0KHQsMSk7cmV0dXJuIjoiPT09RHQoZSwxKT97cGF0aDp0LGlzUm9vdDohMH06e3BhdGg6ZSxpc1Jvb3Q6ITF9fWlmKCIvIj09PUR0KHQsMSkpe2xldCBlPUh0KHQsMSk7cmV0dXJuIDA9PT1lLmxlbmd0aD97cGF0aDp0LGlzUm9vdDohMH06e3BhdGg6ZSxpc1Jvb3Q6ITF9fXJldHVybntwYXRoOnQsaXNSb290OiExfX1mdW5jdGlvbiBLdCh0KXtpZighanQodCkpcmV0dXJuIiI7bGV0IGU9SnQodCk7aWYoZS5pc1Jvb3QpcmV0dXJuIGUucGF0aDtsZXQgcj1lLnBhdGg7dHJ5e3I9ci5zcGxpdCgiXFwiKS5wb3AoKS5zcGxpdCgiLyIpLnBvcCgpfWNhdGNoKHQpe31yZXR1cm4gcn1mdW5jdGlvbiBRdCh0LGU9e30pe2xldCByPWh0KGUsImZzIik7aWYoIXB0KHQse2ZzOnJ9KSlyZXR1cm4hMTtsZXQgbj1yLmxzdGF0U3luYyh0KTtyZXR1cm4hbi5pc0ZpbGUoKSYmIW4uaXNTeW1ib2xpY0xpbmsoKX1mdW5jdGlvbiBWdCh0LGU9e30pe2xldCByPWh0KGUsImZzIik7aWYoIXB0KHQse2ZzOnJ9KSlyZXR1cm57c3VjY2VzczoiZmlsZSBkb2VzIG5vdCBleGlzdDogIit0fTtpZigheXQodCx7ZnM6cn0pKXJldHVybntlcnJvcjoiaW5wdXQgcGF0aCBpcyBub3QgYSBmaWxlOiAiK3R9O3RyeXtyLnVubGlua1N5bmModCl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOnR9fXJldHVybntzdWNjZXNzOiJkb25lOiAiK3R9fWFzeW5jIGZ1bmN0aW9uIFl0KHQsZSxuPXt9KXtsZXQgaT0iIixvPWh0KG4sImZzIik7aWYoIWd0KHU9dCl8fDA9PT11Lmxlbmd0aHx8MT09PXUubGVuZ3RoJiZTdCh1WzBdKSl0aHJvdyBuZXcgRXJyb3IoImZwc0luIGluIG5vdCBhbiBlZmZlY3RpdmUgYXJyYXkiKTt2YXIgdTtsZXQgYT1mdW5jdGlvbih0KXtpZighanQodCkpcmV0dXJuIiI7bGV0IGU9SnQodCk7aWYoZS5pc1Jvb3QpcmV0dXJuIGUucGF0aDtsZXQgcj1LdCh0PWUucGF0aCk7aWYoIWp0KHIpKXJldHVybiB0O2xldCBuPUp0KHQ9SHQodCxyLmxlbmd0aCkpO3JldHVybiBuLmlzUm9vdCxuLnBhdGh9KGUpLGM9aHQobiwiZm5PdXQiLCIiKTtqdChjKXx8KGM9S3QoZSkpLFF0KGEse2ZzOm99KXx8ZnVuY3Rpb24odCxlPXt9KXtsZXQgcj1odChlLCJmcyIpO2lmKFF0KHQse2ZzOnJ9KSlyZXR1cm57c3VjY2VzczoiaW5wdXQgZm9sZGVyIGlzIGFscmVhZHkgZXhpc3RzOiAiK3R9O2lmKHB0KHQse2ZzOnJ9KSlyZXR1cm57ZXJyb3I6ImlucHV0IHBhdGggYWxyZWFkeSBleGlzdHM6ICIrdH07dHJ5e3IubWtkaXJTeW5jKHQse3JlY3Vyc2l2ZTohMH0pfWNhdGNoKHQpe3JldHVybntlcnJvcjp0fX19KGEse2ZzOm99KTtsZXQgcz12dCgpO3MuY2F0Y2goKCgpPT57fSkpO2xldCBmPW51bGwsbD1udWxsLGg9dnQoKTtoLmNhdGNoKCgoKT0+e30pKTt0cnl7Zj1vLmNyZWF0ZVdyaXRlU3RyZWFtKGUpLGYub24oImVycm9yIiwodD0+e2w9dCxpPXQubWVzc2FnZSxoLnJlamVjdCh0KSxzLnJlamVjdChpKX0pKSxmLm9uKCJmaW5pc2giLCgoKT0+e2xldCB0PXtmaWxlbmFtZTpjLHBhdGg6ZX07cy5yZXNvbHZlKHQpfSkpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtpZihudWxsIT09bCl0aHJvdyBsO2xldCBuPXRbZV07aWYoIXl0KG4se2ZzOm99KSl0aHJvdyBuZXcgRXJyb3IoYGZwSW5bJHtufV0gaXMgbm90IGEgZmlsZWApO2xldCBpPWFzeW5jKCk9PntsZXQgdD1vLmNyZWF0ZVJlYWRTdHJlYW0obiksZT1udWxsO2ZvciBhd2FpdChsZXQgbiBvZiB0KXtpZihudWxsIT09bCl0aHJvdyBsO2xldCB0PSExLGk9bmV3IFByb21pc2UoKChlLHIpPT57dD0hZi53cml0ZShuLCh0PT57dD9yKHQpOmUoKX0pKX0pKTtpLmNhdGNoKCgoKT0+e30pKSxlPWksdCYmYXdhaXQgUHJvbWlzZS5yYWNlKFtyLm9uY2UoZiwiZHJhaW4iKSxoXSl9aWYobnVsbCE9PWUmJmF3YWl0IGUsbnVsbCE9PWwpdGhyb3cgbDtWdChuLHtmczpvfSl9O2F3YWl0IGkoKX1mLmVuZCgpfWNhdGNoKHQpe2k9aHQodCwibWVzc2FnZSIsU3RyaW5nKHQpKTt0cnl7Zi5kZXN0cm95KCl9Y2F0Y2godCl7fXMucmVqZWN0KGkpfXJldHVybiBzfWNvbnN0IFp0PW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2FzeW5jIGZ1bmN0aW9uIHRlKHQsZT17fSl7bGV0IHI9aHQoZSwiZnMiKSxuPWh0KGUsImNodW5rU2l6ZSIpO2lmKE10KG4pfHwobj02NzEwODg2NCksbj1rdChuKSwheXQodCx7ZnM6cn0pKXJldHVybiBQcm9taXNlLnJlamVjdCgiZnAgaXMgbm90IGEgZmlsZSIpO2xldCBpPXZ0KCk7dHJ5e2xldHtjcmVhdGU2NDplfT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06ZSx4eGgzMjpyLHh4aDY0Om4saW5pdDMyOmksdXBkYXRlMzI6byxkaWdlc3QzMjp1LGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6c319PXQ7bGV0IGY9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpO2Z1bmN0aW9uIGwodCxyKXtpZihlLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrcil7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrci1lLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ZS5ncm93KG4pLGY9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpfX1mdW5jdGlvbiBoKHQsZSxyLG4saSxvKXtsKHQpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIGYuc2V0KHUpLHIoMCxlKSx1LnNldChmLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUoZSl7bGV0IHI7cmV0dXJuIGYuc2V0KHUpLCJzdHJpbmciPT10eXBlb2YgZT8obCgzKmUubGVuZ3RoLHQpLHI9Zy5lbmNvZGVJbnRvKGUsZi5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoZS5ieXRlTGVuZ3RoLHQpLGYuc2V0KGUsdCkscj1lLmJ5dGVMZW5ndGgpLG4oMCx0LHIpLHUuc2V0KGYuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4oZi5zZXQodSksbyhpKDApKSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHk9Mm4qKjY0bi0xbjtmdW5jdGlvbiB2KHQpe3JldHVybiB0Jnl9Y29uc3QgZz1uZXcgVGV4dEVuY29kZXIsYj0wLGQ9MG47ZnVuY3Rpb24gXyh0LGU9Yil7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxwKHIoMCxnLmVuY29kZUludG8odCxmKS53cml0dGVuLGUpKX1mdW5jdGlvbiBTKHQsZT1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLHYobigwLGcuZW5jb2RlSW50byh0LGYpLndyaXR0ZW4sZSkpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxlPWIpPT5fKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQsZT1iKT0+KGwodC5ieXRlTGVuZ3RoLDApLGYuc2V0KHQpLHAocigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTMyOih0PWIpPT5oKDQ4LHQsaSxvLHUscCksaDY0OlMsaDY0VG9TdHJpbmc6KHQsZT1kKT0+Uyh0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxlPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCksZi5zZXQodCksdihuKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlNjQ6KHQ9ZCk9PmgoODgsdCxhLGMscyx2KX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShadCkpLmluc3RhbmNlKX0oKSxvPWUoKSx1PXIuY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm59KTt1Lm9uKCJkYXRhIiwodD0+e28udXBkYXRlKHQpfSkpLHUub24oImVuZCIsKCgpPT57bGV0IHQ9by5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKTtpLnJlc29sdmUodCl9KSksdS5vbigiZXJyb3IiLGkucmVqZWN0KX1jYXRjaCh0KXtpLnJlamVjdCh0LnRvU3RyaW5nKCkpfXJldHVybiBpfWxldCBtZXJnZVNsaWNlcz1hc3luYyhyLG4saSxvKT0+e2xldCB1PVtdO2ZvcihsZXQgbz0wO288bjtvKyspe2xldCBuPXQucmVzb2x2ZShpLGAke3J9XyR7b31gKTtpZigheXQobix7ZnM6ZX0pKXRocm93IG5ldyBFcnJvcihgZnBJblske259XSBpcyBub3QgYSBmaWxlYCk7dS5wdXNoKG4pfWxldCBhPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKHQscixuPXt9KXtyZXR1cm4gWXQodCxyLHtmczplLC4uLm59KX0odSxvKTtyZXR1cm57Li4uYSxoYXNoOmF3YWl0IGZ1bmN0aW9uKHQscj17fSl7cmV0dXJuIHRlKHQse2ZzOmUsLi4ucn0pfShvKX19OwoKCmxldCBpbnN0YW5jZSA9IG51bGwKZnVuY3Rpb24gaW5pdChpbnB1dCl7CgogICAgLy9pbml0CiAgICBsZXQgcgogICAgCiAgICAgICAgciA9IHsKICAgICAgICAgICAgbWFpbjogbWVyZ2VTbGljZXMKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEpIHsKICAgIAogICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YSkKICAgICAgICAKfQoKYXN5bmMgZnVuY3Rpb24gcnVuKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcnVuJyxkYXRhKQoKICAgIC8vbW9kZQogICAgbGV0IG1vZGUgPSBkYXRhLm1vZGUKCiAgICAvL2NoZWNrCiAgICBpZihtb2RlICE9PSAnaW5pdCcgJiYgbW9kZSAhPT0gJ2NhbGwnKXsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICAvL2luaXQKICAgIGlmKG1vZGUgPT09ICdpbml0Jyl7CiAgICAgICAgCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy90eXBlCiAgICAgICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKICAgIAogICAgICAgICAgICAvL2luc3RhbmNlCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgaW5pdCguLi5pbnB1dCkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGUgPT09ICdvYmplY3QnKXsKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gbWVyZ2VTbGljZXMKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAKICAgICAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICAgICAgbW9kZTogJ2VtaXQnLAogICAgICAgICAgICAgICAgZXZOYW1lOiAnZXJyb3InLAogICAgICAgICAgICAgICAgbXNnOiBlcnIsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgICAgICB9CiAgICAgICAgICAgIAogICAgfQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgPT09ICdjYWxsJyl7CiAgICAgICAgbGV0IHN0YXRlID0gJycKICAgICAgICBsZXQgbXNnID0gbnVsbAoKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL2Z1bgogICAgICAgICAgICBsZXQgZnVuID0gaW5zdGFuY2VbZGF0YS5mdW5dCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKCiAgICAgICAgICAgIC8vZXhlYwogICAgICAgICAgICBhd2FpdCBmdW4oLi4uaW5wdXQpCiAgICAgICAgICAgICAgICAudGhlbigoc3VjKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J3N1Y2Nlc3MnCiAgICAgICAgICAgICAgICAgICAgbXNnPXN1YwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J2Vycm9yJwogICAgICAgICAgICAgICAgICAgIG1zZz1lcnIKICAgICAgICAgICAgICAgIH0pCgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgICAgICBzdGF0ZSA9ICdlcnJvcicKICAgICAgICAgICAgbXNnID0gZXJyCiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICBtb2RlOiAncmV0dXJuJywKICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgIGZ1bjogZGF0YS5mdW4sCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICBtc2csCiAgICAgICAgfQogICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICB9Cgp9CgpmdW5jdGlvbiByZWN2TWVzc2FnZShkYXRhKSB7CiAgICAvLyBjb25zb2xlLmxvZygnaW5uZXIgd29ya2VyIHJlY3Y6JywgZGF0YSkKCiAgICAvL2RhdGFSZWN2CiAgICBsZXQgZGF0YVJlY3YgPSBkYXRhCgogICAgLy9ydW4KICAgIHJ1bihkYXRhUmVjdikKCn0KCgogICAgICAgIHBhcmVudFBvcnQub24oJ21lc3NhZ2UnLCByZWN2TWVzc2FnZSkKICAgICAgICAKCnRyeXsKCiAgICAvL+WDheS7pXVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcuiomOmMhCwg5LiN5Y+v6Ki75YaKdW5jYXVnaHRFeGNlcHRpb27oiId1bmhhbmRsZWRSZWplY3Rpb27nm6Pogb06CiAgICAvL+aWvHdvcmtlcuWFp+iou+WGiuatpOS6jOebo+iBveacg+mYu+atok5vZGXpoJDoqK3nmoR3b3JrZXLntYLmraLooYzngrosIOS9v3dvcmtlcuW0qea9sOW+jOS7jeWtmOa0u+epuui9iSwKICAgIC8v5aSW5bGk5pS25LiN5YiwZXJyb3IvZXhpdOS6i+S7tiwgcGVuZGluZyBwcm9taXNl5rC45LmF5oe4572uLCDkuJTlrZjmtLvmrq3lsY13b3JrZXLmnIPku6Tlrr/kuLvnqIvluo/nhKHms5XpgIDlh7o7CiAgICAvL+enu+mZpOW+jHdvcmtlcuS+nemgkOioreihjOeCuuatu+S6oSwgZXJyb3Lkuovku7blgrPoh7PlpJblsaQsIOeUseWkluWxpOaVtOaJuXJlamVjdCBwZW5kaW5nCiAgICAvLyBwcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAoZXJyKSA9PiB7CiAgICAvLyAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuaGFuZGxlZFJlamVjdGlvbicsIGVycikKICAgIC8vIH0pCiAgICAvLyBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnIpID0+IHsKICAgIC8vICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5jYXVnaHRFeGNlcHRpb24nLCBlcnIpCiAgICAvLyB9KQogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCBlcnIpCiAgICB9KQoKfQpjYXRjaChlcnIpe30KCg==",Buffer.from(i,"base64").toString("utf8"));var i;function r(){let n=new s,i={},r=!1,a=!1;function o(e){for(let t in i){let s=i[t];delete i[t],n.removeAllListeners(t),s.reject(e)}n.emit("error",e)}function l(e){r||(r=!0,o(e))}let c=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){l(e)}}(t);if(!c)return l("invalid worker"),null;function M(){let e=function(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}();if(r)return e.reject("worker is dead"),e;let t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=s.length;for(let i=0;i<e;i++)t[i]=s[0|Math.random()*n];return t.join("")}();i[t]=e;let s={mode:"call",id:t,fun:"main",input:[...arguments]};return c.postMessage(s),n.once(t,s=>{delete i[t],"success"===s.state?e.resolve(s.msg):e.reject(s.msg)}),e}return c.on("message",function(e){let t=e,s=t.mode;"emit"!==s&&"return"!==s||("emit"===s&&n.emit(t.evName,t.msg),"return"===s&&n.emit(t.id,t))}),c.on("error",l),c.on("exit",e=>{a||l("worker exit, code["+e+"]")}),function(){let e={mode:"init",type:"function",input:[...arguments]};c.postMessage(e)}([...arguments]),n.main=M,n.main=M,n.terminate=function(){c?(a=!0,c.terminate(),c=void 0):o("worker has been terminated")},n}n=async function(){let e=[...arguments],t=r();return await t.main(...e).finally(()=>{t.terminate()})}}();try{process.on("uncaughtExceptionMonitor",e=>{console.log("outer:uncaughtExceptionMonitor",e)})}catch(e){}return n}(t)}({get exports(){return s},set exports(e){s=e}}),s)}(Ei);var ji=Kt(Ei.exports);let vi=new Set,Gi=new Map,Ki=(t,s,n="")=>{let i=e.resolve(s,t);return{fp:i,fpm:`${i}.merging`,fpd:`${i}.done`,fpe:`${i}.error`,fpr:Fe(n)?`${i}.q${n}.ro`:""}},Wi=e=>{let t=Fs(e);if($t(e))throw new Error(`can not remove ${e}: ${ms(Le(t,"error"))}`)},ki=async(e,s)=>{vi.add(s.fp);try{let n=await function(e,s={}){return zi(e,{fs:t,...s})}(s.fp);if(n===e)return t.writeFileSync(s.fpd,"","utf8"),{state:"done"};let i=`merged file[${s.fp}] is incomplete: hash[${n}] != fileHash[${e}], merge was interrupted`;try{t.writeFileSync(s.fpe,i,"utf8")}catch(e){console.log(`can not write ${s.fpe}`,e)}return{state:"mismatch",reason:i}}catch(e){return{state:"error",reason:`verify merged file[${s.fp}] error: ${ms(e)}`}}finally{vi.delete(s.fp)}},Ui=async(e,s,n)=>{let i=`${function(){if(!Zt(es))throw new Error("invalid dayjs");return es().format("YYYYMMDDHHmmss")}()}|${is(6)}|${e}`,r=Ki(e,n);if(vi.has(r.fp))return i;let a=$t(r.fpe),o=$t(r.fp);if(!a&&o){let t=await ki(e,r);if("done"===t.state)return i;if("error"===t.state)throw new Error(t.reason)}return Wi(r.fpd),Wi(r.fpe),vi.add(r.fp),setTimeout(()=>{ji(e,s,n,r.fpm).then(s=>{let n=Le(s,"hash","");if(n!==e)throw new Error(`merged file hash[${n}] != fileHash[${e}]`);t.renameSync(r.fpm,r.fp),t.writeFileSync(r.fpd,"","utf8")}).catch(e=>{console.log(e),Fs(r.fpm);let s=ms(e);try{t.writeFileSync(r.fpe,s,"utf8")}catch(e){console.log(`can not write ${r.fpe}`,e)}}).finally(()=>{vi.delete(r.fp)})},1),i},Vi=async(e,s,n={})=>{let i=Le(n,"funConsume"),r=Le(n,"funLog");Zt(r)||(r=e=>{console.log(e)});let a=Yi(e,"|"),o=Le(a,0,""),l=Le(a,1,""),c=Le(a,2,"");if(3!==zn(a)||!Bs(o)||!Bs(l)||!Bs(c)){let t=`invalid queueId[${ms(e)}]`;return console.log(t),{state:"error",msg:"invalid queueId",reason:t,path:""}}let M=Ki(c,s,`${o}${l}`);if($t(M.fpr)){let e=((e,s)=>{try{let n=Os(new Uint8Array(t.readFileSync(e.fpr)),{returnWithStateAndMsg:!0});if("success"!==Le(n,"state"))return s(`stored result ${e.fpr} is corrupted, treat as not stored: ${Le(n,"msg","unknown error")}`),{ok:!1};let i=n.msg;return $e(i)&&Jt(i,"ro")?{ok:!0,ro:i.ro}:(s(`stored result ${e.fpr} has no own 'ro' key, treat as not stored`),{ok:!1})}catch(t){return s(`can not read stored result ${e.fpr}: ${ms(t)}`),{ok:!1}}})(M,r);if(e.ok)return{state:"success",msg:e.ro,path:M.fp,from:"stored"}}if($t(M.fpe)){let e="";try{e=t.readFileSync(M.fpe,"utf8")}catch(e){}return{state:"error",msg:"merge slices failed",reason:e,path:M.fp}}if(vi.has(M.fp))return{state:"merging",msg:"",path:M.fp};let w=$t(M.fp),u=$t(M.fpd);if(w&&!u){let e=await ki(c,M);if("done"!==e.state)return{state:"error",msg:"merge slices failed",reason:e.reason,path:M.fp};u=!0}if(w&&u){if(!Zt(i))return{state:"success",msg:"",path:M.fp};let s=await((e,s,n,i)=>{let r=Gi.get(e);return r||(r=Promise.resolve().then(()=>n(s.fp)).then(e=>{e=void 0===e?null:e;try{let n=Hs({ro:e},{returnWithStateAndMsg:!0});if("success"!==Le(n,"state"))return e;t.writeFileSync(s.fpr,Buffer.from(n.msg));let i=Os(n.msg,{returnWithStateAndMsg:!0});if("success"===Le(i,"state")&&$e(i.msg)&&Jt(i.msg,"ro"))return i.msg.ro}catch(e){i(`can not store consumed result to ${s.fpr}: ${ms(e)}`)}return e}).finally(()=>{Gi.delete(e)}),Gi.set(e,r),r)})(e,M,i,r);return{state:"success",msg:s,path:M.fp,from:"consumed"}}return!w&&u?{state:"error",msg:"merged file already consumed",reason:`merged file[${M.fp}] no longer exists and no stored result for queueId[${e}]`,path:M.fp}:{state:"error",msg:"no merge task",reason:`no merge task for fileHash[${c}] (never pushed, or artifacts removed)`,path:M.fp}};var Qi={exports:{}};!function(e){var t,s;e.exports=(t=a,s={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,a){if("function"!=typeof n)throw new TypeError("The listener must be a function");var o=new i(n,r||e,a),l=s?s+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function a(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function o(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),o.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},o.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,a=new Array(r);i<r;i++)a[i]=n[i].fn;return a},o.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},o.prototype.emit=function(e,t,n,i,r,a){var o=s?s+e:e;if(!this._events[o])return!1;var l,c,M=this._events[o],w=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),w){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,a),!0}for(c=1,l=new Array(w-1);c<w;c++)l[c-1]=arguments[c];M.fn.apply(M.context,l)}else{var u,d=M.length;for(c=0;c<d;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),w){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!l)for(u=1,l=new Array(w-1);u<w;u++)l[u-1]=arguments[u];M[c].fn.apply(M[c].context,l)}}return!0},o.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},o.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},o.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return a(this,r),this;var o=this._events[r];if(o.fn)o.fn!==t||i&&!o.once||n&&o.context!==n||a(this,r);else{for(var l=0,c=[],M=o.length;l<M;l++)(o[l].fn!==t||i&&!o[l].once||n&&o[l].context!==n)&&c.push(o[l]);c.length?this._events[r]=1===c.length?c[0]:c:a(this,r)}return this},o.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&a(this,t)):(this._events=new n,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=s,o.EventEmitter=o,e.exports=o}({get exports(){return t},set exports(e){t=e}});var s=t;let n;!function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(i="CgogICAgICAgIC8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwogICAgICAgIGxldCB7IHBhcmVudFBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJykgLy/lm6BwYWNrYWdlLmpzb27kuI3ntaZ0eXBlPW1vZHVsZeaVheeEoeazleaUr+aPtGVzNiBpbXBvcnQsIOW+l+S9v+eUqHJlcXVpcmUKICAgICAgICAvL+iLpeimgeaWvG5vZGVqcyB3b3JrZXLlhafkvb/nlKjnhKHms5XovYnora/nmoTljp/nlJ/lpZfku7bkvovlpoJmcywg6YG/5YWN5L2/55So6aCC5bGkaW1wb3J05Yqg6LyJ5L2/55SoLCDlm6DnhKHms5XovYnora/mnIPnm7TmjqXkv53nlZkKICAgICAgICAvL+S4puWboGltcG9ydOS9jeaWvHdvcmtlcuWkluWxpOmZkOWumueCunJlcXVpcmXljYAocGFja2FnZS5qc29u5LiN57WmdHlwZT1tb2R1bGUpLCDmlYXlh7rnj77pjK/oqqTnhKHms5XovYnora8KICAgICAgICAKCiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpO2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG4mJiExIT09ZSh0W3JdLHIsdCk7KTtyZXR1cm4gdH12YXIgbixvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89LTEsdT1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGM9aVtuP2E6KytvXTtpZighMT09PWUodVtjXSxjLHUpKWJyZWFrfXJldHVybiB0fTt2YXIgdT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9dXx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxjPWEuU3ltYm9sLGY9T2JqZWN0LnByb3RvdHlwZSxzPWYuaGFzT3duUHJvcGVydHksbD1mLnRvU3RyaW5nLHA9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgaD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB2PSJbb2JqZWN0IE51bGxdIix5PSJbb2JqZWN0IFVuZGVmaW5lZF0iLGI9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBkKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/eTp2OmImJmIgaW4gT2JqZWN0KHQpP2Z1bmN0aW9uKHQpe3ZhciBlPXMuY2FsbCh0LHApLHI9dFtwXTt0cnl7dFtwXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2godCl7fXZhciBvPWwuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtwXT1yOmRlbGV0ZSB0W3BdKSxvfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gaC5jYWxsKHQpfSh0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZyh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWQodCl9dmFyIGo9T2JqZWN0LnByb3RvdHlwZSxtPWouaGFzT3duUHJvcGVydHksdz1qLnByb3BlcnR5SXNFbnVtZXJhYmxlLFM9XyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP186ZnVuY3Rpb24odCl7cmV0dXJuIGcodCkmJm0uY2FsbCh0LCJjYWxsZWUiKSYmIXcuY2FsbCh0LCJjYWxsZWUiKX0sTz1BcnJheS5pc0FycmF5O3ZhciBBPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsej1BJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsRT16JiZ6LmV4cG9ydHM9PT1BP2EuQnVmZmVyOnZvaWQgMCx4PShFP0UuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRj05MDA3MTk5MjU0NzQwOTkxLE49L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIGsodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/RjplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmTi50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9dmFyIEk9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiAkKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD1JfXZhciBMPXt9O0xbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUxbIltvYmplY3QgSW50OEFycmF5XSJdPUxbIltvYmplY3QgSW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IEludDMyQXJyYXldIl09TFsiW29iamVjdCBVaW50OEFycmF5XSJdPUxbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09TFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLExbIltvYmplY3QgQXJndW1lbnRzXSJdPUxbIltvYmplY3QgQXJyYXldIl09TFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1MWyJbb2JqZWN0IEJvb2xlYW5dIl09TFsiW29iamVjdCBEYXRhVmlld10iXT1MWyJbb2JqZWN0IERhdGVdIl09TFsiW29iamVjdCBFcnJvcl0iXT1MWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUxbIltvYmplY3QgTWFwXSJdPUxbIltvYmplY3QgTnVtYmVyXSJdPUxbIltvYmplY3QgT2JqZWN0XSJdPUxbIltvYmplY3QgUmVnRXhwXSJdPUxbIltvYmplY3QgU2V0XSJdPUxbIltvYmplY3QgU3RyaW5nXSJdPUxbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgTSxQPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsVD1QJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUj1UJiZULmV4cG9ydHM9PT1QJiZ1LnByb2Nlc3MsVT1mdW5jdGlvbigpe3RyeXt2YXIgdD1UJiZULnJlcXVpcmUmJlQucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxSJiZSLmJpbmRpbmcmJlIuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCksQj1VJiZVLmlzVHlwZWRBcnJheSxEPUI/KE09QixmdW5jdGlvbih0KXtyZXR1cm4gTSh0KX0pOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpJiYkKHQubGVuZ3RoKSYmISFMW2QodCldfSxXPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQyh0LGUpe3ZhciByPU8odCksbj0hciYmUyh0KSxvPSFyJiYhbiYmeCh0KSx1PSFyJiYhbiYmIW8mJkQodCksaT1yfHxufHxvfHx1LGE9aT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPUFycmF5KHQpOysrcjx0OyluW3JdPWUocik7cmV0dXJuIG59KHQubGVuZ3RoLFN0cmluZyk6W10sYz1hLmxlbmd0aDtmb3IodmFyIGYgaW4gdCkhZSYmIVcuY2FsbCh0LGYpfHxpJiYoImxlbmd0aCI9PWZ8fG8mJigib2Zmc2V0Ij09Znx8InBhcmVudCI9PWYpfHx1JiYoImJ1ZmZlciI9PWZ8fCJieXRlTGVuZ3RoIj09Znx8ImJ5dGVPZmZzZXQiPT1mKXx8ayhmLGMpKXx8YS5wdXNoKGYpO3JldHVybiBhfXZhciBHPU9iamVjdC5wcm90b3R5cGU7dmFyIHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLFY9cSxYPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxHKSlyZXR1cm4gVih0KTt2YXIgZSxyLG49W107Zm9yKHZhciBvIGluIE9iamVjdCh0KSlYLmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufWZ1bmN0aW9uIEoodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9dmFyIEs9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLFE9IltvYmplY3QgRnVuY3Rpb25dIixZPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWj0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIHR0KHQpe2lmKCFKKHQpKXJldHVybiExO3ZhciBlPWQodCk7cmV0dXJuIGU9PVF8fGU9PVl8fGU9PUt8fGU9PVp9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIG51bGwhPXQmJiQodC5sZW5ndGgpJiYhdHQodCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIGV0KHQpP0ModCk6SCh0KX12YXIgbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihudWxsPT1yKXJldHVybiByO2lmKCFldChyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgbz1yLmxlbmd0aCx1PWU/bzotMSxpPU9iamVjdChyKTsoZT91LS06Kyt1PG8pJiYhMSE9PW4oaVt1XSx1LGkpOyk7cmV0dXJuIHJ9fSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmbyh0LGUscnQpfSkpLG90PW50O2Z1bmN0aW9uIHV0KHQpe3JldHVybiB0fWZ1bmN0aW9uIGl0KHQsZSl7dmFyIG47cmV0dXJuKE8odCk/cjpvdCkodCwiZnVuY3Rpb24iPT10eXBlb2Yobj1lKT9uOnV0KX12YXIgYXQsY3Q9YVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sZnQ9KGF0PS9bXi5dKyQvLmV4ZWMoY3QmJmN0LmtleXMmJmN0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIithdDoiIjt2YXIgc3Q9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGx0KHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gc3QuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIHB0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGh0PUZ1bmN0aW9uLnByb3RvdHlwZSx2dD1PYmplY3QucHJvdG90eXBlLHl0PWh0LnRvU3RyaW5nLGJ0PXZ0Lmhhc093blByb3BlcnR5LGR0PVJlZ0V4cCgiXiIreXQuY2FsbChidCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gZ3QodCl7cmV0dXJuISghSih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISFmdCYmZnQgaW4gdH0odCkpJiYodHQodCk/ZHQ6cHQpLnRlc3QobHQodCkpfWZ1bmN0aW9uIF90KHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gZ3Qocik/cjp2b2lkIDB9dmFyIGp0PV90KGEsIkRhdGFWaWV3IiksbXQ9X3QoYSwiTWFwIiksd3Q9X3QoYSwiUHJvbWlzZSIpLFN0PV90KGEsIlNldCIpLE90PV90KGEsIldlYWtNYXAiKSxBdD0iW29iamVjdCBNYXBdIix6dD0iW29iamVjdCBQcm9taXNlXSIsRXQ9IltvYmplY3QgU2V0XSIseHQ9IltvYmplY3QgV2Vha01hcF0iLEZ0PSJbb2JqZWN0IERhdGFWaWV3XSIsTnQ9bHQoanQpLGt0PWx0KG10KSxJdD1sdCh3dCksJHQ9bHQoU3QpLEx0PWx0KE90KSxNdD1kOyhqdCYmTXQobmV3IGp0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1GdHx8bXQmJk10KG5ldyBtdCkhPUF0fHx3dCYmTXQod3QucmVzb2x2ZSgpKSE9enR8fFN0JiZNdChuZXcgU3QpIT1FdHx8T3QmJk10KG5ldyBPdCkhPXh0KSYmKE10PWZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/bHQocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBOdDpyZXR1cm4gRnQ7Y2FzZSBrdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4genQ7Y2FzZSAkdDpyZXR1cm4gRXQ7Y2FzZSBMdDpyZXR1cm4geHR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX12YXIgVXQ9UnQoImxlbmd0aCIpLEJ0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTtmdW5jdGlvbiBEdCh0KXtyZXR1cm4gQnQudGVzdCh0KX12YXIgV3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsQ3Q9IlsiK1d0KyJdIixHdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLHF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLFZ0PSJbXiIrV3QrIl0iLFh0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixIdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsSnQ9Iig/OiIrR3QrInwiK3F0KyIpIisiPyIsS3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixRdD1LdCtKdCsoIig/OlxcdTIwMGQoPzoiK1tWdCxYdCxIdF0uam9pbigifCIpKyIpIitLdCtKdCsiKSoiKSxZdD0iKD86IitbVnQrR3QrIj8iLEd0LFh0LEh0LEN0XS5qb2luKCJ8IikrIikiLFp0PVJlZ0V4cChxdCsiKD89IitxdCsiKXwiK1l0K1F0LCJnIik7ZnVuY3Rpb24gdGUodCl7cmV0dXJuIER0KHQpP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1adC5sYXN0SW5kZXg9MDtadC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KHQpOlV0KHQpfWZ1bmN0aW9uIGVlKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoZXQodCkpcmV0dXJuInN0cmluZyI9PXR5cGVvZihlPXQpfHwhTyhlKSYmZyhlKSYmZChlKT09VHQ/dGUodCk6dC5sZW5ndGg7dmFyIGUscj1QdCh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOkgodCkubGVuZ3RofWZ1bmN0aW9uIHJlKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99ZnVuY3Rpb24gbmUodCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9ZnVuY3Rpb24gb2UodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihuZSh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciB1ZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIGllKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWllLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGllLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPW9lKGUsdCk7cmV0dXJuIShyPDApJiYocj09ZS5sZW5ndGgtMT9lLnBvcCgpOnVlLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0saWUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9b2UoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfSxpZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBvZSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxpZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPW9lKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBhZT1fdChPYmplY3QsImNyZWF0ZSIpO3ZhciBjZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBmZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHNlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGxlKHQsZSl7dmFyIHIsbixvPXQuX19kYXRhX187cmV0dXJuKCJzdHJpbmciPT0obj10eXBlb2Yocj1lKSl8fCJudW1iZXIiPT1ufHwic3ltYm9sIj09bnx8ImJvb2xlYW4iPT1uPyJfX3Byb3RvX18iIT09cjpudWxsPT09cik/b1sic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpvLm1hcH1mdW5jdGlvbiBwZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1zZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPWFlP2FlKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxzZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoYWUpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gY2UuY2FsbChlLHQpP2VbdF06dm9pZCAwfSxzZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGFlP3ZvaWQgMCE9PWVbdF06ZmUuY2FsbChlLHQpfSxzZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1hZSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfSxwZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBzZSxtYXA6bmV3KG10fHxpZSksc3RyaW5nOm5ldyBzZX19LHBlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9bGUodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0scGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbGUodGhpcyx0KS5nZXQodCl9LHBlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGxlKHRoaXMsdCkuaGFzKHQpfSxwZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bGUodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307ZnVuY3Rpb24gaGUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgaWUodCk7dGhpcy5zaXplPWUuc2l6ZX1oZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBpZSx0aGlzLnNpemU9MH0saGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn0saGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9LGhlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfSxoZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgaWUpe3ZhciBuPXIuX19kYXRhX187aWYoIW10fHxuLmxlbmd0aDwxOTkpcmV0dXJuIG4ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBwZShuKX1yZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemU9ci5zaXplLHRoaXN9O2Z1bmN0aW9uIHZlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBwZTsrK2U8cjspdGhpcy5hZGQodFtlXSl9ZnVuY3Rpb24geWUodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZlLnByb3RvdHlwZS5hZGQ9dmUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx2ZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX07dmFyIGJlPTEsZGU9MjtmdW5jdGlvbiBnZSh0LGUscixuLG8sdSl7dmFyIGk9ciZiZSxhPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoYSE9YyYmIShpJiZjPmEpKXJldHVybiExO3ZhciBmPXUuZ2V0KHQpLHM9dS5nZXQoZSk7aWYoZiYmcylyZXR1cm4gZj09ZSYmcz09dDt2YXIgbD0tMSxwPSEwLGg9ciZkZT9uZXcgdmU6dm9pZCAwO2Zvcih1LnNldCh0LGUpLHUuc2V0KGUsdCk7KytsPGE7KXt2YXIgdj10W2xdLHk9ZVtsXTtpZihuKXZhciBiPWk/bih5LHYsbCxlLHQsdSk6bih2LHksbCx0LGUsdSk7aWYodm9pZCAwIT09Yil7aWYoYiljb250aW51ZTtwPSExO2JyZWFrfWlmKGgpe2lmKCF5ZShlLChmdW5jdGlvbih0LGUpe2lmKGk9ZSwhaC5oYXMoaSkmJih2PT09dHx8byh2LHQscixuLHUpKSlyZXR1cm4gaC5wdXNoKGUpO3ZhciBpfSkpKXtwPSExO2JyZWFrfX1lbHNlIGlmKHYhPT15JiYhbyh2LHkscixuLHUpKXtwPSExO2JyZWFrfX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUoZSkscH12YXIgX2U9YS5VaW50OEFycmF5O2Z1bmN0aW9uIGplKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3JbKytlXT1bbix0XX0pKSxyfWZ1bmN0aW9uIG1lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyWysrZV09dH0pKSxyfXZhciB3ZT0xLFNlPTIsT2U9IltvYmplY3QgQm9vbGVhbl0iLEFlPSJbb2JqZWN0IERhdGVdIix6ZT0iW29iamVjdCBFcnJvcl0iLEVlPSJbb2JqZWN0IE1hcF0iLHhlPSJbb2JqZWN0IE51bWJlcl0iLEZlPSJbb2JqZWN0IFJlZ0V4cF0iLE5lPSJbb2JqZWN0IFNldF0iLGtlPSJbb2JqZWN0IFN0cmluZ10iLEllPSJbb2JqZWN0IFN5bWJvbF0iLCRlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsTGU9IltvYmplY3QgRGF0YVZpZXddIixNZT1jP2MucHJvdG90eXBlOnZvaWQgMCxQZT1NZT9NZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBUZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPTAsdT1bXTsrK3I8bjspe3ZhciBpPXRbcl07ZShpLHIsdCkmJih1W28rK109aSl9cmV0dXJuIHV9dmFyIFJlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsVWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxCZT1VZT9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksVGUoVWUodCksKGZ1bmN0aW9uKGUpe3JldHVybiBSZS5jYWxsKHQsZSl9KSkpfTpmdW5jdGlvbigpe3JldHVybltdfTtmdW5jdGlvbiBEZSh0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIE8odCk/bjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWUubGVuZ3RoLG89dC5sZW5ndGg7KytyPG47KXRbbytyXT1lW3JdO3JldHVybiB0fShuLHIodCkpfSh0LHJ0LEJlKX12YXIgV2U9MSxDZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBHZT0xLHFlPSJbb2JqZWN0IEFyZ3VtZW50c10iLFZlPSJbb2JqZWN0IEFycmF5XSIsWGU9IltvYmplY3QgT2JqZWN0XSIsSGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZSh0LGUscixuLG8sdSl7dmFyIGk9Tyh0KSxhPU8oZSksYz1pP1ZlOlB0KHQpLGY9YT9WZTpQdChlKSxzPShjPWM9PXFlP1hlOmMpPT1YZSxsPShmPWY9PXFlP1hlOmYpPT1YZSxwPWM9PWY7aWYocCYmeCh0KSl7aWYoIXgoZSkpcmV0dXJuITE7aT0hMCxzPSExfWlmKHAmJiFzKXJldHVybiB1fHwodT1uZXcgaGUpLGl8fEQodCk/Z2UodCxlLHIsbixvLHUpOmZ1bmN0aW9uKHQsZSxyLG4sbyx1LGkpe3N3aXRjaChyKXtjYXNlIExlOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSAkZTpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhdShuZXcgX2UodCksbmV3IF9lKGUpKSk7Y2FzZSBPZTpjYXNlIEFlOmNhc2UgeGU6cmV0dXJuIG5lKCt0LCtlKTtjYXNlIHplOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSBGZTpjYXNlIGtlOnJldHVybiB0PT1lKyIiO2Nhc2UgRWU6dmFyIGE9amU7Y2FzZSBOZTp2YXIgYz1uJndlO2lmKGF8fChhPW1lKSx0LnNpemUhPWUuc2l6ZSYmIWMpcmV0dXJuITE7dmFyIGY9aS5nZXQodCk7aWYoZilyZXR1cm4gZj09ZTtufD1TZSxpLnNldCh0LGUpO3ZhciBzPWdlKGEodCksYShlKSxuLG8sdSxpKTtyZXR1cm4gaS5kZWxldGUodCkscztjYXNlIEllOmlmKFBlKXJldHVybiBQZS5jYWxsKHQpPT1QZS5jYWxsKGUpfXJldHVybiExfSh0LGUsYyxyLG4sbyx1KTtpZighKHImR2UpKXt2YXIgaD1zJiZIZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksdj1sJiZIZS5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYoaHx8dil7dmFyIHk9aD90LnZhbHVlKCk6dCxiPXY/ZS52YWx1ZSgpOmU7cmV0dXJuIHV8fCh1PW5ldyBoZSksbyh5LGIscixuLHUpfX1yZXR1cm4hIXAmJih1fHwodT1uZXcgaGUpLGZ1bmN0aW9uKHQsZSxyLG4sbyx1KXt2YXIgaT1yJldlLGE9RGUodCksYz1hLmxlbmd0aDtpZihjIT1EZShlKS5sZW5ndGgmJiFpKXJldHVybiExO2Zvcih2YXIgZj1jO2YtLTspe3ZhciBzPWFbZl07aWYoIShpP3MgaW4gZTpDZS5jYWxsKGUscykpKXJldHVybiExfXZhciBsPXUuZ2V0KHQpLHA9dS5nZXQoZSk7aWYobCYmcClyZXR1cm4gbD09ZSYmcD09dDt2YXIgaD0hMDt1LnNldCh0LGUpLHUuc2V0KGUsdCk7Zm9yKHZhciB2PWk7KytmPGM7KXt2YXIgeT10W3M9YVtmXV0sYj1lW3NdO2lmKG4pdmFyIGQ9aT9uKGIseSxzLGUsdCx1KTpuKHksYixzLHQsZSx1KTtpZighKHZvaWQgMD09PWQ/eT09PWJ8fG8oeSxiLHIsbix1KTpkKSl7aD0hMTticmVha312fHwodj0iY29uc3RydWN0b3IiPT1zKX1pZihoJiYhdil7dmFyIGc9dC5jb25zdHJ1Y3RvcixfPWUuY29uc3RydWN0b3I7Zz09X3x8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZyYmZyBpbnN0YW5jZW9mIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgX3x8KGg9ITEpfXJldHVybiB1LmRlbGV0ZSh0KSx1LmRlbGV0ZShlKSxofSh0LGUscixuLG8sdSkpfWZ1bmN0aW9uIEtlKHQsZSxyLG4sbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IWcodCkmJiFnKGUpP3QhPXQmJmUhPWU6SmUodCxlLHIsbixLZSxvKSl9dmFyIFFlPTEsWWU9MjtmdW5jdGlvbiBaZSh0KXtyZXR1cm4gdD09dCYmIUoodCl9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KHIpKSl9fWZ1bmN0aW9uIGVyKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ydCh0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0sbz10W25dO2Vbcl09W24sbyxaZShvKV19cmV0dXJuIGV9KHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT90cihlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09dHx8ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ci5sZW5ndGgsdT1vLGk9IW47aWYobnVsbD09dClyZXR1cm4hdTtmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIGE9cltvXTtpZihpJiZhWzJdP2FbMV0hPT10W2FbMF1dOiEoYVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHU7KXt2YXIgYz0oYT1yW29dKVswXSxmPXRbY10scz1hWzFdO2lmKGkmJmFbMl0pe2lmKHZvaWQgMD09PWYmJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBsPW5ldyBoZTtpZihuKXZhciBwPW4oZixzLGMsdCxlLGwpO2lmKCEodm9pZCAwPT09cD9LZShzLGYsUWV8WWUsbixsKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9KHIsdCxlKX19dmFyIHJyPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG5yKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Zyh0KSYmZCh0KT09cnJ9dmFyIG9yPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHVyPS9eXHcqJC87ZnVuY3Rpb24gaXIodCxlKXtpZihPKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFucih0KSl8fCh1ci50ZXN0KHQpfHwhb3IudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfXZhciBhcj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gY3IodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihhcik7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsbz1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLHU9ci5jYWNoZTtpZih1LmhhcyhvKSlyZXR1cm4gdS5nZXQobyk7dmFyIGk9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPXUuc2V0KG8saSl8fHUsaX07cmV0dXJuIHIuY2FjaGU9bmV3KGNyLkNhY2hlfHxwZSkscn1jci5DYWNoZT1wZTt2YXIgZnI9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csc3I9L1xcKFxcKT8vZyxscj1mdW5jdGlvbih0KXt2YXIgZT1jcih0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09ci5zaXplJiZyLmNsZWFyKCksdH0pKSxyPWUuY2FjaGU7cmV0dXJuIGV9KChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKGZyLChmdW5jdGlvbih0LHIsbixvKXtlLnB1c2gobj9vLnJlcGxhY2Uoc3IsIiQxIik6cnx8dCl9KSksZX0pKSxwcj1scixocj0xLzAsdnI9Yz9jLnByb3RvdHlwZTp2b2lkIDAseXI9dnI/dnIudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGJyKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZihPKHQpKXJldHVybiByZSh0LGJyKSsiIjtpZihucih0KSlyZXR1cm4geXI/eXIuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0taHI/Ii0wIjplfWZ1bmN0aW9uIGRyKHQpe3JldHVybiBudWxsPT10PyIiOmJyKHQpfWZ1bmN0aW9uIGdyKHQsZSl7cmV0dXJuIE8odCk/dDppcih0LGUpP1t0XTpwcihkcih0KSl9dmFyIF9yPTEvMDtmdW5jdGlvbiBqcih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG5yKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1fcj8iLTAiOmV9ZnVuY3Rpb24gbXIodCxlKXtmb3IodmFyIHI9MCxuPShlPWdyKGUsdCkpLmxlbmd0aDtudWxsIT10JiZyPG47KXQ9dFtqcihlW3IrK10pXTtyZXR1cm4gciYmcj09bj90OnZvaWQgMH1mdW5jdGlvbiB3cih0LGUscil7dmFyIG49bnVsbD09dD92b2lkIDA6bXIodCxlKTtyZXR1cm4gdm9pZCAwPT09bj9yOm59ZnVuY3Rpb24gU3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0tMSxvPShlPWdyKGUsdCkpLmxlbmd0aCx1PSExOysrbjxvOyl7dmFyIGk9anIoZVtuXSk7aWYoISh1PW51bGwhPXQmJnIodCxpKSkpYnJlYWs7dD10W2ldfXJldHVybiB1fHwrK24hPW8/dTohIShvPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJiQobykmJmsoaSxvKSYmKE8odCl8fFModCkpfSh0LGUsU3IpfXZhciBBcj0xLHpyPTI7ZnVuY3Rpb24gRXIodCl7cmV0dXJuIGlyKHQpP1J0KGpyKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG1yKGUsdCl9fSh0KX1mdW5jdGlvbiB4cih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/dXQ6Im9iamVjdCI9PXR5cGVvZiB0P08odCk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaXIodCkmJlplKGUpP3RyKGpyKHQpLGUpOmZ1bmN0aW9uKHIpe3ZhciBuPXdyKHIsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1lP09yKHIsdCk6S2UoZSxuLEFyfHpyKX19KHRbMF0sdFsxXSk6ZXIodCk6RXIodCl9ZnVuY3Rpb24gRnIodCxlKXt2YXIgcj0tMSxuPWV0KHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxvLHUpe25bKytyXT1lKHQsbyx1KX0pKSxufWZ1bmN0aW9uIE5yKHQsZSl7cmV0dXJuKE8odCk/cmU6RnIpKHQseHIoZSkpfXZhciBrcj0vXHMvO3ZhciBJcj0vXlxzKy87ZnVuY3Rpb24gJHIodCl7cmV0dXJuIHQ/dC5zbGljZSgwLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJmtyLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9KHQpKzEpLnJlcGxhY2UoSXIsIiIpOnR9ZnVuY3Rpb24gTHIodCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiByPXZvaWQgMD09PXI/bjpyLCFlJiZyPj1uP3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPS0xLG89dC5sZW5ndGg7ZTwwJiYoZT0tZT5vPzA6bytlKSwocj1yPm8/bzpyKTwwJiYocis9byksbz1lPnI/MDpyLWU+Pj4wLGU+Pj49MDtmb3IodmFyIHU9QXJyYXkobyk7KytuPG87KXVbbl09dFtuK2VdO3JldHVybiB1fSh0LGUscil9ZnVuY3Rpb24gTXIodCl7cmV0dXJuIHQhPXR9ZnVuY3Rpb24gUHIodCxlLHIpe3JldHVybiBlPT1lP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci0xLG89dC5sZW5ndGg7KytuPG87KWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfSh0LGUscik6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBvPXQubGVuZ3RoLHU9cisobj8xOi0xKTtuP3UtLTorK3U8bzspaWYoZSh0W3VdLHUsdCkpcmV0dXJuIHU7cmV0dXJuLTF9KHQsTXIscil9dmFyIFRyPSJcXHVkODAwLVxcdWRmZmYiLFJyPSJbIitUcisiXSIsVXI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixCcj0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixEcj0iW14iK1RyKyJdIixXcj0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsQ3I9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLEdyPSIoPzoiK1VyKyJ8IitCcisiKSIrIj8iLHFyPSJbXFx1ZmUwZVxcdWZlMGZdPyIsVnI9cXIrR3IrKCIoPzpcXHUyMDBkKD86IitbRHIsV3IsQ3JdLmpvaW4oInwiKSsiKSIrcXIrR3IrIikqIiksWHI9Iig/OiIrW0RyK1VyKyI/IixVcixXcixDcixScl0uam9pbigifCIpKyIpIixIcj1SZWdFeHAoQnIrIig/PSIrQnIrIil8IitYcitWciwiZyIpO2Z1bmN0aW9uIEpyKHQpe3JldHVybiBEdCh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaChIcil8fFtdfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiIil9KHQpfWZ1bmN0aW9uIEtyKHQsZSxyKXtpZigodD1kcih0KSkmJihyfHx2b2lkIDA9PT1lKSlyZXR1cm4gJHIodCk7aWYoIXR8fCEoZT1icihlKSkpcmV0dXJuIHQ7dmFyIG49SnIodCksbz1KcihlKSx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGg7KytyPG4mJlByKGUsdFtyXSwwKT4tMTspO3JldHVybiByfShuLG8pLGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tJiZQcihlLHRbcl0sMCk+LTE7KTtyZXR1cm4gcn0obixvKSsxO3JldHVybiBMcihuLHUsaSkuam9pbigiIil9ZnVuY3Rpb24gUXIodCl7cmV0dXJuISghZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwiIj09PXQpfWZ1bmN0aW9uIFlyKHQsZSl7aWYoIVFyKHQpKXJldHVybltdO2lmKCFRcihlKSlyZXR1cm5bXTtsZXQgcj1mdW5jdGlvbih0LGUpe3JldHVybiBRcih0KSYmUXIoZSk/dC5zcGxpdChlKTpbXX0odCxlKTtyPU5yKHIsS3IpO2xldCBuPVtdO3JldHVybiBpdChyLChmdW5jdGlvbih0KXtRcih0KSYmbi5wdXNoKHQpfSkpLG59dmFyIFpyPU5hTix0bj0vXlstK10weFswLTlhLWZdKyQvaSxlbj0vXjBiWzAxXSskL2kscm49L14wb1swLTddKyQvaSxubj1wYXJzZUludDtmdW5jdGlvbiBvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYobnIodCkpcmV0dXJuIFpyO2lmKEoodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PUooZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PSRyKHQpO3ZhciByPWVuLnRlc3QodCk7cmV0dXJuIHJ8fHJuLnRlc3QodCk/bm4odC5zbGljZSgyKSxyPzI6OCk6dG4udGVzdCh0KT9acjordH12YXIgdW49MS8wLGFuPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBjbih0KXtyZXR1cm4gdD8odD1vbih0KSk9PT11bnx8dD09PS11bj8odDwwPy0xOjEpKmFuOnQ9PXQ/dDowOjA9PT10P3Q6MH1mdW5jdGlvbiBmbih0KXt2YXIgZT1jbih0KSxyPWUlMTtyZXR1cm4gZT09ZT9yP2UtcjplOjB9dmFyIHNuPSJbb2JqZWN0IEJvb2xlYW5dIjtmdW5jdGlvbiBsbih0KXtyZXR1cm4hMD09PShlPXQpfHwhMT09PWV8fGcoZSkmJmQoZSk9PXNuO3ZhciBlfWZ1bmN0aW9uIHBuKHQpe2xldCBlPSExO2lmKFFyKHQpKXtpZigiIj09PXQudHJpbSgpKXJldHVybiExO2U9IWlzTmFOKE51bWJlcih0KSl9ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0IT10fSh0KSlyZXR1cm4hMTtlPSEwfXJldHVybiBlfWZ1bmN0aW9uIGhuKHQpe2lmKCFwbih0KSlyZXR1cm4gMDtyZXR1cm4gY24odCl9ZnVuY3Rpb24gdm4odCxlPXt9KXtsZXQgcj13cihlLCJ1c2VMaW1pdFNhZmUiLG51bGwpO3JldHVybiBsbihyKXx8KHI9ITEpLCEhcG4odCkmJih0PWhuKHQpLHI/TnVtYmVyLmlzU2FmZUludGVnZXIodCk6Im51bWJlciI9PXR5cGVvZihuPXQpJiZuPT1mbihuKSk7dmFyIG59dmFyIHluPWEuaXNGaW5pdGUsYm49TWF0aC5taW47dmFyIGRuPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGhbdF07cmV0dXJuIGZ1bmN0aW9uKHQscil7aWYodD1vbih0KSwocj1udWxsPT1yPzA6Ym4oZm4ociksMjkyKSkmJnluKHQpKXt2YXIgbj0oZHIodCkrImUiKS5zcGxpdCgiZSIpO3JldHVybisoKG49KGRyKGUoblswXSsiZSIrKCtuWzFdK3IpKSkrImUiKS5zcGxpdCgiZSIpKVswXSsiZSIrKCtuWzFdLXIpKX1yZXR1cm4gZSh0KX19KCJyb3VuZCIpLGduPWRuO2Z1bmN0aW9uIF9uKHQsZT17fSl7bGV0IHI9d3IoZSwidXNlQ2xhbXBTYWZlIixudWxsKTtsbihyKXx8KHI9ITEpO2xldCBuPXdyKGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7bG4obil8fChuPSExKTtsZXQgbz13cihlLCJyZXR1cm5XaXRoU3RhdGVBbmRNc2ciLG51bGwpO2xuKG8pfHwobz0hMSk7bGV0IHU9dD0+bz97c3RhdGU6InN1Y2Nlc3MiLG1zZzp0fTp0LGk9dD0+e2lmKG8pcmV0dXJue3N0YXRlOiJlcnJvciIsbXNnOnR9O3Rocm93IG5ldyBFcnJvcih0KX07aWYoIXBuKHQpKXJldHVybiB1KDApO2xldCBhPW51bGw7dHJ5e3Q9aG4odCksYT1nbih0KSxyJiYoYT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9hPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSOmE8TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVImJihhPU51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSl9Y2F0Y2godCl7cmV0dXJuIGkodC50b1N0cmluZygpKX1yZXR1cm4gbiYmIU51bWJlci5pc1NhZmVJbnRlZ2VyKE51bWJlcihhKSk/aShgdlske3R9XSBpcyBub3QgYSBzYWZlIGludGVnZXJgKTooIjAiPT09U3RyaW5nKGEpJiYoYT0wKSx1KGEpKX1mdW5jdGlvbiBqbih0LGU9e30pe2lmKCF2bih0LGUpKXJldHVybiExO3JldHVybiBfbih0KT49MH1mdW5jdGlvbiBtbih0LGU9e30pe2xldCByPXdyKGUsImZzIiksbj0hMTt0cnl7ci5zdGF0U3luYyh0KSxuPSEwfWNhdGNoe249ITF9cmV0dXJuIG59ZnVuY3Rpb24gd24odCxlPXt9KXtsZXQgcj13cihlLCJmcyIpO3JldHVybiEhbW4odCx7ZnM6cn0pJiYoIXIubHN0YXRTeW5jKHQpLmlzRGlyZWN0b3J5KCkmJiFyLmxzdGF0U3luYyh0KS5pc1N5bWJvbGljTGluaygpKX1mdW5jdGlvbiBTbih0KXtyZXR1cm4gd24odCx7ZnM6ZX0pfWZ1bmN0aW9uIE9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG90KHQsKGZ1bmN0aW9uKHQsbixvKXtlKHQsbixvKSYmci5wdXNoKHQpfSkpLHJ9ZnVuY3Rpb24gQW4odCxlPXt9KXtsZXQgcj13cihlLCJmcyIpO2lmKCFtbih0LHtmczpyfSkpcmV0dXJuITE7bGV0IG49ci5sc3RhdFN5bmModCk7cmV0dXJuIW4uaXNGaWxlKCkmJiFuLmlzU3ltYm9saWNMaW5rKCl9ZnVuY3Rpb24gem4odCxlPTEscj17fSl7bGV0IG49MSxvPXdyKHIsInBhdGgiKSx1PXdyKHIsImZzIik7aWYoIUFuKHQse2ZzOnV9KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO3JldHVybiBudWxsIT09ZSYmZnVuY3Rpb24odCxlPXt9KXtyZXR1cm4hIXZuKHQsZSkmJl9uKHQpPjB9KGUpJiYoZT1fbihlKSk8MSYmKGU9MSksZnVuY3Rpb24gdChyKXtsZXQgaT1bXTtyZXR1cm4gQW4ocix7ZnM6dX0pPyhpdCh1LnJlYWRkaXJTeW5jKHIpLChmdW5jdGlvbihhKXtsZXQgYz1vLnJlc29sdmUocixhKSxmPW51bGw7dHJ5e2Y9dS5zdGF0U3luYyhjKX1jYXRjaCh0KXt9ZiYmZi5pc0RpcmVjdG9yeSgpPyhpLnB1c2goe2lzRm9sZGVyOiEwLGxldmVsOm4scGF0aDpjLG5hbWU6by5iYXNlbmFtZShjKX0pLG4rPTEsKG48PWV8fG51bGw9PT1lKSYmKGk9aS5jb25jYXQodChjKSkpLG4tPTEpOmkucHVzaCh7aXNGb2xkZXI6ITEsbGV2ZWw6bixwYXRoOmMsbmFtZTpvLmJhc2VuYW1lKGMpfSl9KSksaSk6aX0odCl9ZnVuY3Rpb24gRW4odCxlPTEscj17fSl7bGV0IG49d3IociwicGF0aCIpLG89d3IociwiZnMiKTtpZighQW4odCx7ZnM6b30pKXRocm93IG5ldyBFcnJvcihgZmRbJHt0fV0gaXMgbm90IGEgZm9sZGVyYCk7bGV0IHU9W107dmFyIGksYTtyZXR1cm4gdT16bih0LGUse3BhdGg6bixmczpvfSksYT17aXNGb2xkZXI6ITF9LHU9KE8oaT11KT9UZTpPbikoaSx4cihhKSksdT1Ocih1LCh0PT4oZGVsZXRlIHQuaXNGb2xkZXIsdCkpKSx1fWNvbnN0IHhuPW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2FzeW5jIGZ1bmN0aW9uIEZuKHQsZT17fSl7bGV0IHI9d3IoZSwiZnMiKSxuPXdyKGUsImNodW5rU2l6ZSIpO2lmKHBuKG4pfHwobj02NzEwODg2NCksbj1obihuKSwhd24odCx7ZnM6cn0pKXJldHVybiBQcm9taXNlLnJlamVjdCgiZnAgaXMgbm90IGEgZmlsZSIpO2xldCBvPWZ1bmN0aW9uKCl7bGV0IHQsZSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbigpe3Q9YXJndW1lbnRzWzBdLGU9YXJndW1lbnRzWzFdfSkpO3JldHVybiByLnJlc29sdmU9dCxyLnJlamVjdD1lLHJ9KCk7dHJ5e2xldHtjcmVhdGU2NDplfT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06ZSx4eGgzMjpyLHh4aDY0Om4saW5pdDMyOm8sdXBkYXRlMzI6dSxkaWdlc3QzMjppLGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6Zn19PXQ7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpO2Z1bmN0aW9uIGwodCxyKXtpZihlLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrcil7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrci1lLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ZS5ncm93KG4pLHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpfX1mdW5jdGlvbiBwKHQsZSxyLG4sbyx1KXtsKHQpO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHMuc2V0KGkpLHIoMCxlKSxpLnNldChzLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUoZSl7bGV0IHI7cmV0dXJuIHMuc2V0KGkpLCJzdHJpbmciPT10eXBlb2YgZT8obCgzKmUubGVuZ3RoLHQpLHI9Yi5lbmNvZGVJbnRvKGUscy5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoZS5ieXRlTGVuZ3RoLHQpLHMuc2V0KGUsdCkscj1lLmJ5dGVMZW5ndGgpLG4oMCx0LHIpLGkuc2V0KHMuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4ocy5zZXQoaSksdShvKDApKSl9fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHY9Mm4qKjY0bi0xbjtmdW5jdGlvbiB5KHQpe3JldHVybiB0JnZ9Y29uc3QgYj1uZXcgVGV4dEVuY29kZXIsZD0wLGc9MG47ZnVuY3Rpb24gXyh0LGU9ZCl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxoKHIoMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1mdW5jdGlvbiBqKHQsZT1nKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLHkobigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxlPWQpPT5fKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQsZT1kKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLGgocigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTMyOih0PWQpPT5wKDQ4LHQsbyx1LGksaCksaDY0OmosaDY0VG9TdHJpbmc6KHQsZT1nKT0+aih0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxlPWcpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCkseShuKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlNjQ6KHQ9Zyk9PnAoODgsdCxhLGMsZix5KX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh4bikpLmluc3RhbmNlKX0oKSx1PWUoKSxpPXIuY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm59KTtpLm9uKCJkYXRhIiwodD0+e3UudXBkYXRlKHQpfSkpLGkub24oImVuZCIsKCgpPT57bGV0IHQ9dS5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKTtvLnJlc29sdmUodCl9KSksaS5vbigiZXJyb3IiLG8ucmVqZWN0KX1jYXRjaCh0KXtvLnJlamVjdCh0LnRvU3RyaW5nKCkpfXJldHVybiBvfWxldCBjaGVja1RvdGFsSGFzaD1hc3luYyhyLG4sbyx1KT0+e2xldCBpPXQucmVzb2x2ZSh1LG8pLGE9ITE7aWYoYT1TbihpKSwham4ocix7dXNlTGltaXRTYWZlOiEwfSkpe3JldHVybntlcnJvcjoiaW52YWxpZCBmaWxlU2l6ZSBpbiBwYXlsb2FkIn19cj1fbihyKTtsZXQgYz0hMTtpZihhKXtsZXQgdD0tMTt0cnl7dD1lLnN0YXRTeW5jKGkpLnNpemV9Y2F0Y2godCl7Y29uc29sZS5sb2coImNoZWNrIHRvdGFsIGZpbGUgc2l6ZTogZnMuc3RhdFN5bmMocGF0aEZpbGUpIixpLHQpfWM9cj09PXR9bGV0IGY9ITE7YSYmYyYmYXdhaXQgZnVuY3Rpb24odCxyPXt9KXtyZXR1cm4gRm4odCx7ZnM6ZSwuLi5yfSl9KGkpLnRoZW4oKHQ9PntmPW89PT10fSkpLmNhdGNoKCh0PT57Y29uc29sZS5sb2coImZzSXNGaWxlKHBhdGhGaWxlKSIsaSxTbihpKSksY29uc29sZS5sb2codCksZj0hMX0pKTtsZXQgcz1bXTtpZighZil7aXQoZnVuY3Rpb24ocixuPTEpe3JldHVybiBFbihyLG4se3BhdGg6dCxmczplfSl9KHUpLCh0PT57bGV0IHI9dC5uYW1lLnN0YXJ0c1dpdGgoYCR7b31fYCksdT0hMTt0cnl7bGV0IHI9ZS5zdGF0U3luYyh0LnBhdGgpO3U9ci5zaXplPjAmJnIuc2l6ZTw9bn1jYXRjaChlKXtjb25zb2xlLmxvZygiY2hlY2sgZWFjaCBmaWxlIHNpemU6IGZzLnN0YXRTeW5jKHBhdGhGaWxlKSIsdC5wYXRoLGUpfWlmKHImJnUpe2xldCBlPVlyKHQubmFtZSxgJHtvfV9gKSxyPShhPW51bGw9PShpPWUpPzA6aS5sZW5ndGgpP2lbYS0xXTp2b2lkIDA7aWYoIWpuKHIpKXJldHVybiB2b2lkIGNvbnNvbGUubG9nKGBza2lwIGZpbGVbJHt0Lm5hbWV9XTogY2FuIG5vdCBwYXJzZSBjaHVuayBpbmRleGApO3I9X24ocikscy5wdXNoKHIpfXZhciBpLGF9KSl9bGV0IGw9ZWUocyk+MDtyZXR1cm57cGF0aDppLGJBbGxFeGlzdDphLGJBbGxTaXplOmMsYkFsbEhhc2g6ZixiU2xzOmwsc2xrczpzfX07CgoKbGV0IGluc3RhbmNlID0gbnVsbApmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBjaGVja1RvdGFsSGFzaAogICAgICAgIH0KICAgICAgICAKCiAgICAvL29uCiAgICAKCiAgICAvL3NhdmUKICAgIGluc3RhbmNlID0gcgoKfQoKZnVuY3Rpb24gc2VuZE1lc3NhZ2UoZGF0YSkgewogICAgCiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgICAgIAp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBjaGVja1RvdGFsSGFzaAogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgIAogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgICAgIH0KICAgICAgICAgICAgCiAgICB9CgogICAgLy9jaGVjawogICAgaWYobW9kZSA9PT0gJ2NhbGwnKXsKICAgICAgICBsZXQgc3RhdGUgPSAnJwogICAgICAgIGxldCBtc2cgPSBudWxsCgogICAgICAgIHRyeXsKCiAgICAgICAgICAgIC8vZnVuCiAgICAgICAgICAgIGxldCBmdW4gPSBpbnN0YW5jZVtkYXRhLmZ1bl0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjCiAgICAgICAgICAgIGF3YWl0IGZ1biguLi5pbnB1dCkKICAgICAgICAgICAgICAgIC50aGVuKChzdWMpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0nc3VjY2VzcycKICAgICAgICAgICAgICAgICAgICBtc2c9c3VjCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0nZXJyb3InCiAgICAgICAgICAgICAgICAgICAgbXNnPWVycgogICAgICAgICAgICAgICAgfSkKCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgICAgIHN0YXRlID0gJ2Vycm9yJwogICAgICAgICAgICBtc2cgPSBlcnIKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICBpZDogZGF0YS5pZCwKICAgICAgICAgICAgZnVuOiBkYXRhLmZ1biwKICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgIG1zZywKICAgICAgICB9CiAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgIH0KCn0KCmZ1bmN0aW9uIHJlY3ZNZXNzYWdlKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcmVjdjonLCBkYXRhKQoKICAgIC8vZGF0YVJlY3YKICAgIGxldCBkYXRhUmVjdiA9IGRhdGEKCiAgICAvL3J1bgogICAgcnVuKGRhdGFSZWN2KQoKfQoKCiAgICAgICAgcGFyZW50UG9ydC5vbignbWVzc2FnZScsIHJlY3ZNZXNzYWdlKQogICAgICAgIAoKdHJ5ewoKICAgIC8v5YOF5LuldW5jYXVnaHRFeGNlcHRpb25Nb25pdG9y6KiY6YyELCDkuI3lj6/oqLvlhop1bmNhdWdodEV4Y2VwdGlvbuiIh3VuaGFuZGxlZFJlamVjdGlvbuebo+iBvToKICAgIC8v5pa8d29ya2Vy5YWn6Ki75YaK5q2k5LqM55uj6IG95pyD6Zi75q2iTm9kZemgkOioreeahHdvcmtlcue1guatouihjOeCuiwg5L2/d29ya2Vy5bSp5r2w5b6M5LuN5a2Y5rS756m66L2JLAogICAgLy/lpJblsaTmlLbkuI3liLBlcnJvci9leGl05LqL5Lu2LCBwZW5kaW5nIHByb21pc2XmsLjkuYXmh7jnva4sIOS4lOWtmOa0u+aureWxjXdvcmtlcuacg+S7pOWuv+S4u+eoi+W6j+eEoeazlemAgOWHujsKICAgIC8v56e76Zmk5b6Md29ya2Vy5L6d6aCQ6Kit6KGM54K65q275LqhLCBlcnJvcuS6i+S7tuWCs+iHs+WkluWxpCwg55Sx5aSW5bGk5pW05om5cmVqZWN0IHBlbmRpbmcKICAgIC8vIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChlcnIpID0+IHsKICAgIC8vICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyKQogICAgLy8gfSkKICAgIC8vIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycikgPT4gewogICAgLy8gICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmNhdWdodEV4Y2VwdGlvbicsIGVycikKICAgIC8vIH0pCiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikKICAgIH0pCgp9CmNhdGNoKGVycil7fQoK",Buffer.from(i,"base64").toString("utf8"));var i;function r(){let n=new s,i={},r=!1,a=!1;function o(e){for(let t in i){let s=i[t];delete i[t],n.removeAllListeners(t),s.reject(e)}n.emit("error",e)}function l(e){r||(r=!0,o(e))}let c=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){l(e)}}(t);if(!c)return l("invalid worker"),null;function M(){let e=function(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}();if(r)return e.reject("worker is dead"),e;let t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=s.length;for(let i=0;i<e;i++)t[i]=s[0|Math.random()*n];return t.join("")}();i[t]=e;let s={mode:"call",id:t,fun:"main",input:[...arguments]};return c.postMessage(s),n.once(t,s=>{delete i[t],"success"===s.state?e.resolve(s.msg):e.reject(s.msg)}),e}return c.on("message",function(e){let t=e,s=t.mode;"emit"!==s&&"return"!==s||("emit"===s&&n.emit(t.evName,t.msg),"return"===s&&n.emit(t.id,t))}),c.on("error",l),c.on("exit",e=>{a||l("worker exit, code["+e+"]")}),function(){let e={mode:"init",type:"function",input:[...arguments]};c.postMessage(e)}([...arguments]),n.main=M,n.main=M,n.terminate=function(){c?(a=!0,c.terminate(),c=void 0):o("worker has been terminated")},n}n=async function(){let e=[...arguments],t=r();return await t.main(...e).finally(()=>{t.terminate()})}}();try{process.on("uncaughtExceptionMonitor",e=>{console.log("outer:uncaughtExceptionMonitor",e)})}catch(e){}return n}(t)}({get exports(){return s},set exports(e){s=e}}),s)}(Qi);var Hi=Kt(Qi.exports),Ji={exports:{}};!function(e){var t,s;e.exports=(t=a,s={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,a){if("function"!=typeof n)throw new TypeError("The listener must be a function");var o=new i(n,r||e,a),l=s?s+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function a(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function o(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),o.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},o.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,a=new Array(r);i<r;i++)a[i]=n[i].fn;return a},o.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},o.prototype.emit=function(e,t,n,i,r,a){var o=s?s+e:e;if(!this._events[o])return!1;var l,c,M=this._events[o],w=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),w){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,a),!0}for(c=1,l=new Array(w-1);c<w;c++)l[c-1]=arguments[c];M.fn.apply(M.context,l)}else{var u,d=M.length;for(c=0;c<d;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),w){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!l)for(u=1,l=new Array(w-1);u<w;u++)l[u-1]=arguments[u];M[c].fn.apply(M[c].context,l)}}return!0},o.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},o.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},o.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return a(this,r),this;var o=this._events[r];if(o.fn)o.fn!==t||i&&!o.once||n&&o.context!==n||a(this,r);else{for(var l=0,c=[],M=o.length;l<M;l++)(o[l].fn!==t||i&&!o[l].once||n&&o[l].context!==n)&&c.push(o[l]);c.length?this._events[r]=1===c.length?c[0]:c:a(this,r)}return this},o.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&a(this,t)):(this._events=new n,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=s,o.EventEmitter=o,e.exports=o}({get exports(){return t},set exports(e){t=e}});var s=t;let n;!function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let t=(i="CgogICAgICAgIC8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwogICAgICAgIGxldCB7IHBhcmVudFBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJykgLy/lm6BwYWNrYWdlLmpzb27kuI3ntaZ0eXBlPW1vZHVsZeaVheeEoeazleaUr+aPtGVzNiBpbXBvcnQsIOW+l+S9v+eUqHJlcXVpcmUKICAgICAgICAvL+iLpeimgeaWvG5vZGVqcyB3b3JrZXLlhafkvb/nlKjnhKHms5XovYnora/nmoTljp/nlJ/lpZfku7bkvovlpoJmcywg6YG/5YWN5L2/55So6aCC5bGkaW1wb3J05Yqg6LyJ5L2/55SoLCDlm6DnhKHms5XovYnora/mnIPnm7TmjqXkv53nlZkKICAgICAgICAvL+S4puWboGltcG9ydOS9jeaWvHdvcmtlcuWkluWxpOmZkOWumueCunJlcXVpcmXljYAocGFja2FnZS5qc29u5LiN57WmdHlwZT1tb2R1bGUpLCDmlYXlh7rnj77pjK/oqqTnhKHms5XovYnora8KICAgICAgICAKCiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpLHI9QXJyYXkuaXNBcnJheSxuPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxvPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsaT1ufHxvfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHU9aS5TeW1ib2wsYT1PYmplY3QucHJvdG90eXBlLGM9YS5oYXNPd25Qcm9wZXJ0eSxmPWEudG9TdHJpbmcscz11P3UudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIHA9IltvYmplY3QgTnVsbF0iLGg9IltvYmplY3QgVW5kZWZpbmVkXSIseT11P3UudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHYodCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD9oOnA6eSYmeSBpbiBPYmplY3QodCk/ZnVuY3Rpb24odCl7dmFyIGU9Yy5jYWxsKHQscykscj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89Zi5jYWxsKHQpO3JldHVybiBuJiYoZT90W3NdPXI6ZGVsZXRlIHRbc10pLG99KHQpOmZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCl9KHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgZD0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBnKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Yih0KSYmdih0KT09ZH12YXIgXz0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxqPS9eXHcqJC87ZnVuY3Rpb24gUyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX12YXIgdz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsbT0iW29iamVjdCBGdW5jdGlvbl0iLE89IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixBPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gRSh0KXtpZighUyh0KSlyZXR1cm4hMTt2YXIgZT12KHQpO3JldHVybiBlPT1tfHxlPT1PfHxlPT13fHxlPT1BfXZhciBOLCQ9aVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sej0oTj0vW14uXSskLy5leGVjKCQmJiQua2V5cyYmJC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrTjoiIjt2YXIgeD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gRih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIHguY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIEk9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sTT1GdW5jdGlvbi5wcm90b3R5cGUsUD1PYmplY3QucHJvdG90eXBlLFQ9TS50b1N0cmluZyxMPVAuaGFzT3duUHJvcGVydHksUj1SZWdFeHAoIl4iK1QuY2FsbChMKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBCKHQpe3JldHVybiEoIVModCl8fChlPXQseiYmeiBpbiBlKSkmJihFKHQpP1I6SSkudGVzdChGKHQpKTt2YXIgZX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gQihyKT9yOnZvaWQgMH12YXIgVT1rKE9iamVjdCwiY3JlYXRlIik7dmFyIEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgRz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFcodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcixuLG89dC5sZW5ndGg7by0tOylpZigocj10W29dWzBdKT09PShuPWUpfHxyIT1yJiZuIT1uKXJldHVybiBvO3JldHVybi0xfVcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1VP1UobnVsbCk6e30sdGhpcy5zaXplPTB9LFcucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sVy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoVSl7dmFyIHI9ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1yP3ZvaWQgMDpyfXJldHVybiBDLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH0sVy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIFU/dm9pZCAwIT09ZVt0XTpHLmNhbGwoZSx0KX0sVy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1VJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciBxPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gRCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1ELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9SChlLHQpO3JldHVybiEocjwwKSYmKHI9PWUubGVuZ3RoLTE/ZS5wb3AoKTpxLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0sRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1IKGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX0sRC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMuX19kYXRhX18sdCk+LTF9LEQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1IKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBWPWsoaSwiTWFwIik7ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG4sbz10Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KG49dHlwZW9mKHI9ZSkpfHwibnVtYmVyIj09bnx8InN5bWJvbCI9PW58fCJib29sZWFuIj09bj8iX19wcm90b19fIiE9PXI6bnVsbD09PXIpP29bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06by5tYXB9ZnVuY3Rpb24gWih0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1aLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IFcsbWFwOm5ldyhWfHxEKSxzdHJpbmc6bmV3IFd9fSxaLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9WCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxaLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFgodGhpcyx0KS5nZXQodCl9LFoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gWCh0aGlzLHQpLmhhcyh0KX0sWi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9WCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfTt2YXIgSj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gSyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKEopO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89ZT9lLmFwcGx5KHRoaXMsbik6blswXSxpPXIuY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciB1PXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1pLnNldChvLHUpfHxpLHV9O3JldHVybiByLmNhY2hlPW5ldyhLLkNhY2hlfHxaKSxyfUsuQ2FjaGU9Wjt2YXIgUSxZLHR0LGV0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJ0PS9cXChcXCk/L2csbnQ9KFE9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShldCwoZnVuY3Rpb24odCxyLG4sbyl7ZS5wdXNoKG4/by5yZXBsYWNlKHJ0LCIkMSIpOnJ8fHQpfSkpLGV9LFk9SyhRLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09dHQuc2l6ZSYmdHQuY2xlYXIoKSx0fSkpLHR0PVkuY2FjaGUsWSksb3Q9bnQ7dmFyIGl0PTEvMCx1dD11P3UucHJvdG90eXBlOnZvaWQgMCxhdD11dD91dC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gY3QodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHIodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99KHQsY3QpKyIiO2lmKGcodCkpcmV0dXJuIGF0P2F0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LWl0PyItMCI6ZX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gbnVsbD09dD8iIjpjdCh0KX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiByKHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFnKHQpKXx8ai50ZXN0KHQpfHwhXy50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX0odCxlKT9bdF06b3QoZnQodCkpfXZhciBsdD0xLzA7ZnVuY3Rpb24gcHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxnKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1sdD8iLTAiOmV9ZnVuY3Rpb24gaHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1zdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbcHQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufXZhciB5dD1PYmplY3QucHJvdG90eXBlO3ZhciB2dD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChlKHIpKX19KE9iamVjdC5rZXlzLE9iamVjdCksYnQ9dnQsZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBndCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHx5dCkpcmV0dXJuIGJ0KHQpO3ZhciBlLHIsbj1bXTtmb3IodmFyIG8gaW4gT2JqZWN0KHQpKWR0LmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufXZhciBfdD1rKGksIkRhdGFWaWV3IiksanQ9ayhpLCJQcm9taXNlIiksU3Q9ayhpLCJTZXQiKSx3dD1rKGksIldlYWtNYXAiKSxtdD0iW29iamVjdCBNYXBdIixPdD0iW29iamVjdCBQcm9taXNlXSIsQXQ9IltvYmplY3QgU2V0XSIsRXQ9IltvYmplY3QgV2Vha01hcF0iLE50PSJbb2JqZWN0IERhdGFWaWV3XSIsJHQ9RihfdCksenQ9RihWKSx4dD1GKGp0KSxGdD1GKFN0KSxJdD1GKHd0KSxNdD12OyhfdCYmTXQobmV3IF90KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1OdHx8ViYmTXQobmV3IFYpIT1tdHx8anQmJk10KGp0LnJlc29sdmUoKSkhPU90fHxTdCYmTXQobmV3IFN0KSE9QXR8fHd0JiZNdChuZXcgd3QpIT1FdCkmJihNdD1mdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0Yocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSAkdDpyZXR1cm4gTnQ7Y2FzZSB6dDpyZXR1cm4gbXQ7Y2FzZSB4dDpyZXR1cm4gT3Q7Y2FzZSBGdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4gRXR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PVR0fSh0Lmxlbmd0aCkmJiFFKHQpfXZhciBSdD0iW29iamVjdCBTdHJpbmddIjt2YXIgQnQsa3Q9KEJ0PSJsZW5ndGgiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W0J0XX0pLFV0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgQ3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsR3Q9IlsiK0N0KyJdIixXdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLEh0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHF0PSJbXiIrQ3QrIl0iLER0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixWdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsWHQ9Iig/OiIrV3QrInwiK0h0KyIpIisiPyIsWnQ9IltcXHVmZTBlXFx1ZmUwZl0/IixKdD1adCtYdCsoIig/OlxcdTIwMGQoPzoiK1txdCxEdCxWdF0uam9pbigifCIpKyIpIitadCtYdCsiKSoiKSxLdD0iKD86IitbcXQrV3QrIj8iLFd0LER0LFZ0LEd0XS5qb2luKCJ8IikrIikiLFF0PVJlZ0V4cChIdCsiKD89IitIdCsiKXwiK0t0K0p0LCJnIik7ZnVuY3Rpb24gWXQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVdC50ZXN0KHQpfSh0KT9mdW5jdGlvbih0KXtmb3IodmFyIGU9UXQubGFzdEluZGV4PTA7UXQudGVzdCh0KTspKytlO3JldHVybiBlfSh0KTprdCh0KX1mdW5jdGlvbiB0ZSh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKEx0KHQpKXJldHVybiJzdHJpbmciPT10eXBlb2YoZT10KXx8IXIoZSkmJmIoZSkmJnYoZSk9PVJ0P1l0KHQpOnQubGVuZ3RoO3ZhciBlLG49UHQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PW58fCJbb2JqZWN0IFNldF0iPT1uP3Quc2l6ZTpndCh0KS5sZW5ndGh9dmFyIGVlPS9ccy87dmFyIHJlPS9eXHMrLztmdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmZWUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0odCkrMSkucmVwbGFjZShyZSwiIik6dH12YXIgb2U9TmFOLGllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHVlPS9eMGJbMDFdKyQvaSxhZT0vXjBvWzAtN10rJC9pLGNlPXBhcnNlSW50O2Z1bmN0aW9uIGZlKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihnKHQpKXJldHVybiBvZTtpZihTKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1TKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1uZSh0KTt2YXIgcj11ZS50ZXN0KHQpO3JldHVybiByfHxhZS50ZXN0KHQpP2NlKHQuc2xpY2UoMikscj8yOjgpOmllLnRlc3QodCk/b2U6K3R9dmFyIHNlPTEvMCxsZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHQ/KHQ9ZmUodCkpPT09c2V8fHQ9PT0tc2U/KHQ8MD8tMToxKSpsZTp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gaGUodCl7dmFyIGU9cGUodCkscj1lJTE7cmV0dXJuIGU9PWU/cj9lLXI6ZTowfXZhciB5ZT0iW29iamVjdCBCb29sZWFuXSI7ZnVuY3Rpb24gdmUodCl7cmV0dXJuITA9PT0oZT10KXx8ITE9PT1lfHxiKGUpJiZ2KGUpPT15ZTt2YXIgZX1mdW5jdGlvbiBiZSh0KXtyZXR1cm4hKCFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCl8fCIiPT09dCl9ZnVuY3Rpb24gZGUodCl7bGV0IGU9ITE7aWYoYmUodCkpe2lmKCIiPT09dC50cmltKCkpcmV0dXJuITE7ZT0haXNOYU4oTnVtYmVyKHQpKX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KSl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9ZnVuY3Rpb24gZ2UodCl7aWYoIWRlKHQpKXJldHVybiAwO3JldHVybiBwZSh0KX1mdW5jdGlvbiBfZSh0LGU9e30pe2xldCByPWh0KGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7cmV0dXJuIHZlKHIpfHwocj0hMSksISFkZSh0KSYmKHQ9Z2UodCkscj9OdW1iZXIuaXNTYWZlSW50ZWdlcih0KToibnVtYmVyIj09dHlwZW9mKG49dCkmJm49PWhlKG4pKTt2YXIgbn12YXIgamU9aS5pc0Zpbml0ZSxTZT1NYXRoLm1pbjt2YXIgd2U9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aFt0XTtyZXR1cm4gZnVuY3Rpb24odCxyKXtpZih0PWZlKHQpLChyPW51bGw9PXI/MDpTZShoZShyKSwyOTIpKSYmamUodCkpe3ZhciBuPShmdCh0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygobj0oZnQoZShuWzBdKyJlIisoK25bMV0rcikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK25bMV0tcikpfXJldHVybiBlKHQpfX0oInJvdW5kIiksbWU9d2U7ZnVuY3Rpb24gT2UodCxlPXt9KXtsZXQgcj1odChlLCJ1c2VDbGFtcFNhZmUiLG51bGwpO3ZlKHIpfHwocj0hMSk7bGV0IG49aHQoZSwidXNlTGltaXRTYWZlIixudWxsKTt2ZShuKXx8KG49ITEpO2xldCBvPWh0KGUsInJldHVybldpdGhTdGF0ZUFuZE1zZyIsbnVsbCk7dmUobyl8fChvPSExKTtsZXQgaT10PT5vP3tzdGF0ZToic3VjY2VzcyIsbXNnOnR9OnQsdT10PT57aWYobylyZXR1cm57c3RhdGU6ImVycm9yIixtc2c6dH07dGhyb3cgbmV3IEVycm9yKHQpfTtpZighZGUodCkpcmV0dXJuIGkoMCk7bGV0IGE9bnVsbDt0cnl7dD1nZSh0KSxhPW1lKHQpLHImJihhPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2E9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI6YTxOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmKGE9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKX1jYXRjaCh0KXtyZXR1cm4gdSh0LnRvU3RyaW5nKCkpfXJldHVybiBuJiYhTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGEpKT91KGB2WyR7dH1dIGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApOigiMCI9PT1TdHJpbmcoYSkmJihhPTApLGkoYSkpfWZ1bmN0aW9uIEFlKHQsZT17fSl7aWYoIV9lKHQsZSkpcmV0dXJuITE7cmV0dXJuIE9lKHQpPj0wfWNvbnN0IEVlPW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2FzeW5jIGZ1bmN0aW9uIE5lKHQsZT17fSl7aWYoIWZ1bmN0aW9uKHQpe2xldCBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTtpZigiW29iamVjdCBCbG9iXSI9PT1lfHwiW29iamVjdCBGaWxlXSI9PT1lKXJldHVybiEwO3RyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9iKXJldHVybiEwfWNhdGNoKHQpe31yZXR1cm4hMX0odCkmJihyPXQsIltvYmplY3QgRmlsZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpKSlyZXR1cm4gY29uc29sZS5sb2coImlucCIsdCksUHJvbWlzZS5yZWplY3QoImlucCBpcyBub3QgYSBCbG9iIG9yIEZpbGUiKTt2YXIgcjtsZXQgbj1odChlLCJjaHVua1NpemUiKTtkZShuKXx8KG49NjcxMDg4NjQpLG49Z2Uobik7bGV0e2NyZWF0ZTY0Om99PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e2V4cG9ydHM6e21lbTplLHh4aDMyOnIseHhoNjQ6bixpbml0MzI6byx1cGRhdGUzMjppLGRpZ2VzdDMyOnUsaW5pdDY0OmEsdXBkYXRlNjQ6YyxkaWdlc3Q2NDpmfX09dDtsZXQgcz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcik7ZnVuY3Rpb24gbCh0LHIpe2lmKGUuYnVmZmVyLmJ5dGVMZW5ndGg8dCtyKXtjb25zdCBuPU1hdGguY2VpbCgodCtyLWUuYnVmZmVyLmJ5dGVMZW5ndGgpLzY1NTM2KTtlLmdyb3cobikscz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcil9fWZ1bmN0aW9uIHAodCxlLHIsbixvLGkpe2wodCk7Y29uc3QgdT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gcy5zZXQodSkscigwLGUpLHUuc2V0KHMuc3ViYXJyYXkoMCx0KSkse3VwZGF0ZShlKXtsZXQgcjtyZXR1cm4gcy5zZXQodSksInN0cmluZyI9PXR5cGVvZiBlPyhsKDMqZS5sZW5ndGgsdCkscj1iLmVuY29kZUludG8oZSxzLnN1YmFycmF5KHQpKS53cml0dGVuKToobChlLmJ5dGVMZW5ndGgsdCkscy5zZXQoZSx0KSxyPWUuYnl0ZUxlbmd0aCksbigwLHQsciksdS5zZXQocy5zdWJhcnJheSgwLHQpKSx0aGlzfSxkaWdlc3Q6KCk9PihzLnNldCh1KSxpKG8oMCkpKX19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdD4+PjB9Y29uc3QgeT0ybioqNjRuLTFuO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQmeX1jb25zdCBiPW5ldyBUZXh0RW5jb2RlcixkPTAsZz0wbjtmdW5jdGlvbiBfKHQsZT1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLGgocigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfWZ1bmN0aW9uIGoodCxlPWcpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksdihuKDAsYi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9cmV0dXJue2gzMjpfLGgzMlRvU3RyaW5nOih0LGU9ZCk9Pl8odCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpLGgzMlJhdzoodCxlPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCksaChyKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlMzI6KHQ9ZCk9PnAoNDgsdCxvLGksdSxoKSxoNjQ6aixoNjRUb1N0cmluZzoodCxlPWcpPT5qKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIiksaDY0UmF3Oih0LGU9Zyk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSx2KG4oMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGU2NDoodD1nKT0+cCg4OCx0LGEsYyxmLHYpfX0oKGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEVlKSkuaW5zdGFuY2UpfSgpLGk9bygpLHU9MDtmb3IoO3U8dC5zaXplOyl7bGV0IGU9dC5zbGljZSh1LHUrbikscj1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aS51cGRhdGUobmV3IFVpbnQ4QXJyYXkocikpLHUrPW59cmV0dXJuIGkuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIil9bGV0IGNoZWNrU2xpY2VzSGFzaD1hc3luYyhyLG4sbyk9PntpZighKGJlKGk9bikmJmkubGVuZ3RoPD0xMjgmJi9eW0EtWmEtejAtOV0rJC8udGVzdChpKSkpe3JldHVybntlcnJvcjoiaW52YWxpZCBmaWxlSGFzaCJ9fXZhciBpO2lmKCFBcnJheS5pc0FycmF5KHIpKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZVNsaWNlSGFzaHMifX1pZigwPT09dGUocikpe3JldHVybntlcnJvcjoibm8gZmlsZVNsaWNlSGFzaHMifX1sZXQgdT1gJHtufV9gLGE9ZS5yZWFkZGlyU3luYyhvKSxjPW5ldyBTZXQ7Zm9yKGxldCB0IG9mIGEpe2lmKCF0LnN0YXJ0c1dpdGgodSkpY29udGludWU7bGV0IGU9dC5zbGljZSh1Lmxlbmd0aCk7QWUoZSkmJlN0cmluZyhPZShlKSk9PT1lJiZjLmFkZChPZShlKSl9bGV0IGY9W10scz1uZXcgU2V0O2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgdT1yW2ldLGE9aHQodSwiaSIpO2lmKCFBZShhKSljb250aW51ZTtpZihhPU9lKGEpLCFjLmhhcyhhKXx8cy5oYXMoYSkpY29udGludWU7cy5hZGQoYSk7bGV0IGw9dC5yZXNvbHZlKG8sYCR7bn1fJHthfWApLHA9IiI7dHJ5e3A9YXdhaXQgTmUobmV3IEJsb2IoW2UucmVhZEZpbGVTeW5jKGwpXSkpfWNhdGNoKHQpe2NvbnRpbnVlfWh0KHUsImgiKT09PXAmJmYucHVzaChhKX1yZXR1cm57c2xrczpmfX07CgoKbGV0IGluc3RhbmNlID0gbnVsbApmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBjaGVja1NsaWNlc0hhc2gKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEpIHsKICAgIAogICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YSkKICAgICAgICAKfQoKYXN5bmMgZnVuY3Rpb24gcnVuKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcnVuJyxkYXRhKQoKICAgIC8vbW9kZQogICAgbGV0IG1vZGUgPSBkYXRhLm1vZGUKCiAgICAvL2NoZWNrCiAgICBpZihtb2RlICE9PSAnaW5pdCcgJiYgbW9kZSAhPT0gJ2NhbGwnKXsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICAvL2luaXQKICAgIGlmKG1vZGUgPT09ICdpbml0Jyl7CiAgICAgICAgCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy90eXBlCiAgICAgICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKICAgIAogICAgICAgICAgICAvL2luc3RhbmNlCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgaW5pdCguLi5pbnB1dCkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGUgPT09ICdvYmplY3QnKXsKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gY2hlY2tTbGljZXNIYXNoCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgCiAgICAgICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdlbWl0JywKICAgICAgICAgICAgICAgIGV2TmFtZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgIG1zZzogZXJyLAogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICAgICAgfQogICAgICAgICAgICAKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9mdW4KICAgICAgICAgICAgbGV0IGZ1biA9IGluc3RhbmNlW2RhdGEuZnVuXQoKICAgICAgICAgICAgLy9pbnB1dAogICAgICAgICAgICBsZXQgaW5wdXQgPSBkYXRhLmlucHV0CgogICAgICAgICAgICAvL2V4ZWMKICAgICAgICAgICAgYXdhaXQgZnVuKC4uLmlucHV0KQogICAgICAgICAgICAgICAgLnRoZW4oKHN1YykgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdzdWNjZXNzJwogICAgICAgICAgICAgICAgICAgIG1zZz1zdWMKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdlcnJvcicKICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyCiAgICAgICAgICAgICAgICB9KQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgCgp0cnl7CgogICAgLy/lg4Xku6V1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3LoqJjpjIQsIOS4jeWPr+iou+WGinVuY2F1Z2h0RXhjZXB0aW9u6IiHdW5oYW5kbGVkUmVqZWN0aW9u55uj6IG9OgogICAgLy/mlrx3b3JrZXLlhafoqLvlhormraTkuoznm6Pogb3mnIPpmLvmraJOb2Rl6aCQ6Kit55qEd29ya2Vy57WC5q2i6KGM54K6LCDkvb93b3JrZXLltKnmvbDlvozku43lrZjmtLvnqbrovYksCiAgICAvL+WkluWxpOaUtuS4jeWIsGVycm9yL2V4aXTkuovku7YsIHBlbmRpbmcgcHJvbWlzZeawuOS5heaHuOe9riwg5LiU5a2Y5rS75q6t5bGNd29ya2Vy5pyD5Luk5a6/5Li756iL5bqP54Sh5rOV6YCA5Ye6OwogICAgLy/np7vpmaTlvox3b3JrZXLkvp3poJDoqK3ooYzngrrmrbvkuqEsIGVycm9y5LqL5Lu25YKz6Iez5aSW5bGkLCDnlLHlpJblsaTmlbTmiblyZWplY3QgcGVuZGluZwogICAgLy8gcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKGVycikgPT4gewogICAgLy8gICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpCiAgICAvLyB9KQogICAgLy8gcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyKSA9PiB7CiAgICAvLyAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKQogICAgLy8gfSkKICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgZXJyKQogICAgfSkKCn0KY2F0Y2goZXJyKXt9Cgo=",Buffer.from(i,"base64").toString("utf8"));var i;function r(){let n=new s,i={},r=!1,a=!1;function o(e){for(let t in i){let s=i[t];delete i[t],n.removeAllListeners(t),s.reject(e)}n.emit("error",e)}function l(e){r||(r=!0,o(e))}let c=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){l(e)}}(t);if(!c)return l("invalid worker"),null;function M(){let e=function(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}();if(r)return e.reject("worker is dead"),e;let t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=s.length;for(let i=0;i<e;i++)t[i]=s[0|Math.random()*n];return t.join("")}();i[t]=e;let s={mode:"call",id:t,fun:"main",input:[...arguments]};return c.postMessage(s),n.once(t,s=>{delete i[t],"success"===s.state?e.resolve(s.msg):e.reject(s.msg)}),e}return c.on("message",function(e){let t=e,s=t.mode;"emit"!==s&&"return"!==s||("emit"===s&&n.emit(t.evName,t.msg),"return"===s&&n.emit(t.id,t))}),c.on("error",l),c.on("exit",e=>{a||l("worker exit, code["+e+"]")}),function(){let e={mode:"init",type:"function",input:[...arguments]};c.postMessage(e)}([...arguments]),n.main=M,n.main=M,n.terminate=function(){c?(a=!0,c.terminate(),c=void 0):o("worker has been terminated")},n}n=async function(){let e=[...arguments],t=r();return await t.main(...e).finally(()=>{t.terminate()})}}();try{process.on("uncaughtExceptionMonitor",e=>{console.log("outer:uncaughtExceptionMonitor",e)})}catch(e){}return n}(t)}({get exports(){return s},set exports(e){s=e}}),s)}(Ji);var Ri=Kt(Ji.exports);function Pi(e,t){try{return{ok:!0,value:t()}}catch(t){let s=ms(t);return{ok:!1,stage:e,cause:Fe(s)?s:"unknown error"}}}function Oi(e,t){try{return r.validateHeaderValue(e,t),!0}catch(e){return!1}}function Fi(e,t,s,n={}){let r=!0===Le(n,"forHead",!1);if(null==e)return{error:"invalid streamRead",reason:"streamRead is null or undefined"};let a=Pi("identify streamRead",()=>e instanceof i.Readable?{isReadable:!0,objectMode:!0===e.readableObjectMode,done:!0===e.destroyed||!0===e.readableEnded}:{isReadable:!1});if(!a.ok)return{error:"invalid streamRead",reason:`${a.stage} failed: ${a.cause}`};if(a.value.isReadable){if(a.value.objectMode)return{error:"invalid streamRead",reason:"streamRead is in object mode"};if(a.value.done)return{error:"invalid streamRead",reason:"streamRead is already destroyed or ended (each download event must provide a new stream)"};if(r)return{source:e};let n=Pi("setup pipeline",()=>{let n=0,r=!1,a=new i.Transform({transform(e,s,i){if(n+=e.length,n>t)return r=!0,void i(new Error(`streamRead sent more than fileSize[${t}] bytes`));i(null,e)},flush(e){if(n!==t)return r=!0,void e(new Error(`streamRead ended at ${n} bytes but fileSize is ${t}`));e()}});return i.pipeline(e,a,e=>{e&&r&&s(ms(e))}),a});return n.ok?{source:n.value}:{error:"invalid streamRead",reason:`${n.stage} failed: ${n.cause}`}}let o=Pi("materialize streamRead",()=>{if(Buffer.isBuffer(e))return{buf:e};if(e instanceof Uint8Array)return{buf:Buffer.from(e)};if(Oe(e))return{buf:Buffer.from(e,"utf8")};if("number"==typeof e||Pe(e)||"object"==typeof e&&!1===function(e){try{return Zt(e.pipe)}catch(e){return null}}(e)){let t=null;try{t=JSON.stringify(e)}catch(e){return{unserializable:ms(e)}}return"string"!=typeof t?{unserializable:""}:{buf:Buffer.from(t,"utf8")}}return{unsupported:!0}});if(!o.ok)return{error:"invalid streamRead",reason:`${o.stage} failed: ${o.cause}`};if(Jt(o.value,"unserializable")){let e=o.value.unserializable;return{error:"invalid streamRead",reason:Fe(e)?`streamRead can not be serialized: ${e}`:"streamRead can not be serialized"}}if(!0===o.value.unsupported)return{error:"invalid streamRead",reason:"streamRead must be a readable stream, buffer, string, number, boolean or plain object"};let l=o.value.buf;return l.length!==t?{error:"fileSize mismatch",reason:`streamRead has ${l.length} bytes but fileSize is ${t}`}:{source:l}}let Bi=e=>"function"==typeof e.toWellFormed?e.toWellFormed():e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"�");function $i(e,t){let s=Pi(`check field[${e}]`,()=>{if("fileSize"===e)return function(e){return Yt(e,{useLimitSafe:!0})}(t)?{ok:!0,value:gt(t)}:{ok:!1};if("filename"===e||"fileType"===e){if(!Fe(t))return{ok:!1};let s=ps(t);return Fe(s)?"fileType"===e?Oi("Content-Type",s)?{ok:!0,value:s}:{ok:!1}:{ok:!0,value:Bi(s)}:{ok:!1}}throw new Error(`unknown field[${e}]`)});return s.ok?{ok:s.value.ok,value:s.value.value,cause:""}:{ok:!1,value:void 0,cause:s.cause}}function _i(e){try{e&&Zt(e.pipe)&&Zt(e.destroy)&&e.destroy()}catch(e){}}function qi(e){return void 0===e||Zt(e)||"symbol"==typeof e?null:e}function er(e,t,s={}){let n=new i.Readable;n._read=()=>{},n.push(t),n.push(null);let r=Le(s,"returnType",""),a=Le(s,"returnMsg",""),o=e.response(n).header("Cache-Control","no-cache, no-store, must-revalidate").header("Content-Type","application/octet-stream").header("Content-Length",n.readableLength);return Fe(r)&&o.header("Return-Type",r),Fe(a)&&Oi("Return-Msg",a)&&o.header("Return-Msg",a),o}function tr(r={}){let a={useLimitSafe:!0},o=Le(r,"port");(!mt(o,a)||gt(o)>65535)&&(o=8080),o=gt(o);let l=Le(r,"useInert");Pe(l)||(l=!0);let c=Le(r,"pathStaticFiles");Fe(c)||(c="dist");let M=Le(r,"pathUploadTemp");Fe(M)||(M="./uploadTemp");let w="";if(!Ft(M)){let e=ws(M);Jt(e,"error")&&(w=ms(e.error))}let u=Le(r,"apiName");Fe(u)||(u="api");let d=Le(r,"tokenType");Fe(d)||(d="Bearer");let y=Le(r,"sizeSlice");mt(y,a)||(y=1048576),y=gt(y);let L=Le(r,"sizeMsg");mt(L,a)||(L=104857600),L=gt(L);let I=Le(r,"verifyConn");Zt(I)||(I=()=>!0);let D=Le(r,"corsOrigins",[]);Ms(D)||(D=["*"]);let g=Le(r,"delayForSlice","");(!Yt(g,a)||gt(g)>2147483647)&&(g=100),g=gt(g);let m=null;m=Le(r,"serverHapi")?r.serverHapi:s.server({port:o,routes:{timeout:{server:!1,socket:!1},cors:{origin:D,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]}}});let p=Vt(),h={tag:"w-converhp"},C=(e,...t)=>Qt(p,e,t,{...h,funSettle:()=>{let s=t[t.length-1];Xt(s)&&s.reject(`listener of event[${e}] error`)},funEmit:N}),f=(e,...t)=>function(e,t,s=[],n={}){let i=n.ms;return mt(i)||(i=1),i=gt(i),i=Math.min(i,vt),setTimeout(()=>{Qt(e,t,s,n)},i)}(p,e,t,{...h,funEmit:N});function N(e,...t){if("error"===e&&_e(t[0])&&"listener"===t[0].fun){let e=Le(t[0],"name",""),s=Le(t[0],"msg");return console.log(`listener of event[${e}] error`,s),p.emit("error",`listener of event[${e}] error: ${ms(s)}`)}return p.emit(e,...t)}Fe(w)&&f("error",`create pathUploadTemp[${M}] error: ${w}`);let b=(e,t,s)=>{let n=Et(),i=Et();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 C("error",`event[${e}] output can not be serialized: output is a ${i}`);n.resolve(Zt(s)?s(t):t)}).catch(e=>{n.reject(e)}),function(e,t,s,n,i,r){if(0===e.listenerCount(s)){let e=`no listener for event[${s}]`;return i.reject(e),r(e),!1}t(s,...n,i)}(p,C,e,t,i,e=>{C("error",e)}),n};async function T(e){return b("upload",[e])}async function x(e){return b("download",[e])}let S=`${ps(d)} `,Z=(e,t)=>{let s=Le(e,"headers");s=_e(s)?s:"";let n=Le(e,"query");n=_e(n)?n:"";let i="",r="";return"query"===t.authFrom?(r=Le(n,"token",""),r=Fe(r)?r:"",Fe(r)&&(i=`${d} ${r}`)):(i=Le(s,"authorization",""),i=Fe(i)?i:"",r=i.startsWith(S)?i.slice(S.length):""),{headers:s,query:n,authorization:i,token:r}},X=(e,t)=>{let s=(s,n,i)=>function(e,t,s={}){Fe(t)||(console.log("msg",t),console.log("msg is not an effective string, set msg=''"),t="");let n=Le(s,"retryable",!0),i={error:t};!1===n&&(i.retryable=!1);let r=er(e,Hs(i),{returnType:"error",returnMsg:t});return!1===n&&r.header("Return-Retryable","false"),r}(e,n,i).code(t.statusOf[s]);return{permission:()=>s("permission","permission denied"),param:e=>s("param",e,{retryable:!1}),app:e=>s("app",e),output:e=>s("output",e),packet:e=>s("packet",e),internal:e=>s("internal",e)}},Y=async(e,t,s,n)=>!0!==await async function(e){let t=!1;try{t=I(e),Xt(t)&&(t=await t)}catch(s){t=!1,console.log(`verifyConn error for apiType[${Le(e,"apiType","")}]`,s),C("error",`verifyConn error for apiType[${Le(e,"apiType","")}]: ${ms(s)}`)}return!0===t}({apiType:s.apiType,authorization:t.authorization,query:t.query,headers:t.headers,req:e})?n.permission():(C("handler",{api:s.api,headers:t.headers,query:t.query}),null),A=(e,t,s,n)=>{let i=function(e,t){let s={};for(let n of t){let t=Pi(`read field[${n}]`,()=>Le(e,n));if(!t.ok)return{ok:!1,field:n,cause:t.cause,fields:s};s[n]=t.value}return{ok:!0,fields:s}}(e,s.fields.map(e=>e.name));if(!i.ok)return _i(Le(i.fields,"streamRead")),C("error",`download fileId[${t}] output error: can not read field[${i.field}]: ${i.cause}`),{ok:!1,res:n.output("invalid streamRead")};let r={streamRead:i.fields.streamRead};for(let e of s.fields){if("streamRead"===e.name)continue;let s=$i(e.name,i.fields[e.name]);if(s.ok){r[e.name]=s.value;continue}if(!0===e.optional&&!Fe(s.cause)){r[e.name]="";continue}_i(r.streamRead);let a="fileSize"===e.name?`[${ms(i.fields.fileSize)}]`:"";return C("error",`download fileId[${t}] output error: invalid ${e.name}${a}${Fe(s.cause)?`: ${s.cause}`:""}`),{ok:!1,res:n.output(`invalid ${e.name}`)}}return{ok:!0,v:r}},z=async(e,t,s,n)=>{let i={},r="";await s.then(e=>{i.success=e,r="success"}).catch(e=>{i.error=e,r="error"});let a=function(e,t){let s={};for(let t of Object.keys(e))s[t]=qi(e[t]);let n=Hs(s,{returnWithStateAndMsg:!0});return"success"!==Le(n,"state")?(t(Le(n,"msg","unknown error")),null):n.msg}(i,e=>{C("error",`${n} output can not be serialized: ${e}`)});return null===a?t.internal("output can not be serialized"):er(e,a,{returnType:r,returnMsg:"need to parse"})},E=e=>(t,s,n)=>{if(413===Le(n,"output.statusCode"))throw n;return C("error",`invalid request packet for ${e.api}: ${ms(n)}`),X(s,e).packet("invalid request packet").takeover()},j={path:`/${u}/main`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(e,t){let s=_s.main,n=X(t,s),r=Z(e,s),a=await Y(e,r,s,n);if(a)return a;let o=null;try{o=await(()=>{let t=Et(),s=[],n=0,r=!1,a=new i.Writable({write(e,t,i){if(n+=e.length,n>L)return s=[],r=!0,void i();s.push(e),i()}});return a.on("finish",()=>{}),e.payload.pipe(a),e.payload.on("end",()=>{if(r)return void t.reject("payload too large");let e=Buffer.concat(s);s=[],t.resolve(e)}),e.payload.on("close",()=>{}),e.payload.on("error",e=>{console.log("apiMain req.payload err",e),C("error",`receive payload error: ${ms(e)}`),t.reject(`receive payload error: ${ms(e)}`)}),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: ${L}`}).code(413);throw e}let l=Os(new Uint8Array(o),{returnWithStateAndMsg:!0});if("success"!==Le(l,"state")||!_e(l.msg)){let e=ms(Le(l,"msg",""));return C("error",`invalid request packet for apiMain: ${Fe(e)?e:"not an effective object"}`),n.packet("invalid request packet")}let c=l.msg;return z(t,n,async function(e){return b("execute",[Le(e,"func",""),Le(e,"input",null)],t=>(e.output=t,delete e.input,e))}(c),`execute func[${ms(Le(c,"func",""))}]`)}},v={path:`/${u}/ulctr`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,parse:!0,failAction:E(_s.ulctr)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let s=_s.ulctr,n=X(t,s),i=Z(e,s),r=await Y(e,i,s,n);if(r)return r;let a=Le(e,"payload.mode","");if("check-total-hash"!==a&&"check-slices-hash"!==a&&"merge-slices-push"!==a&&"merge-slices-get"!==a)return n.param(`invalid mode[${ms(a)}] in payload`);let o=Le(e,"payload.fileHash","");if(!Bs(o))return n.param("invalid fileHash in payload");let l=Le(e,"payload.chunkTotal","");if("merge-slices-push"===a){if(!mt(l))return n.param("invalid chunkTotal in payload");l=gt(l)}let c=Le(e,"payload.filename",""),w=function(e,t="unknown"){if(!Fe(e))return t;let s=e.replace(/\\/g,"/").split("/").filter(e=>""!==e&&"."!==e&&".."!==e).pop()||"";return s=s.replace(/[\x00-\x1f\x7f<>:"|?*]/g,"_"),s=s.replace(/[. ]+$/g,""),/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i.test(s)&&(s=`_${s}`),""===s?t:s}(c,""),u=e=>_e(e)&&Jt(e,"error")?`${a}: ${ps(e.error)}`:"",d=async(e,t)=>{try{return await t()}catch(t){return C("error",`upload-controller mode[${a}] ${e} error: ${ms(t)}`),Promise.reject(`${a} failed`)}};return z(t,n,(async()=>{let t=null;if("check-total-hash"===a){let s=Le(e,"payload.fileSize","");t=await d("check total hash",()=>Hi(s,y,o,M));let n=u(t);if(Fe(n))return Promise.reject(n);if(t.bAllHash){let e={from:"check-total-hash",filename:c,filenameSafe:w,path:t.path},s=await T(e);t={...t,msg:s}}delete t.path,t.sizeSlice=y}else if("check-slices-hash"===a){let s=Le(e,"payload.fileSliceHashs",[]);t=await d("check slices hash",()=>Ri(s,o,M));let n=u(t);if(Fe(n))return Promise.reject(n)}else if("merge-slices-push"===a){t={queueId:await d("push merge task",()=>Ui(o,l,M))}}else if("merge-slices-get"===a){let s=Le(e,"payload.queueId",""),n=await Vi(s,M,{funConsume:async e=>await T({from:"merge-slices-get",filename:c,filenameSafe:w,path:e}),funLog:e=>{C("error",e)}});t={state:n.state,msg:n.msg,queueId:s,filename:c},"error"===n.state&&Fe(n.reason)&&C("error",`${n.msg} for fileHash[${o}]: ${n.reason}`)}return t})(),`upload-controller mode[${a}]`)}},G={path:`/${u}/slc`,method:"POST",options:{payload:{maxBytes:y,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(s,n){let i=_s.slc,r=X(n,i),a=Z(s,i),o=await Y(s,a,i,r);if(o)return o;let l=Le(a.headers,"chunk-index",""),c=Le(a.headers,"chunk-total",""),w=Le(a.headers,"package-id","");if(!Yt(l))return r.param("invalid chunkIndex in headers");if(l=gt(l),!Yt(c))return r.param("invalid chunkTotal in headers");if(c=gt(c),!Bs(w))return r.param("invalid packageId in headers");let u=e.resolve(M,`${w}_${l}`),d=t.createWriteStream(u),L=()=>{let e=Et(),t=0,n=!1,i=!1,r=!1,a=!1;d.on("error",t=>{i||n||r||(i=!0,s.payload.unpipe(d),s.payload.resume(),console.log(`apiUploadSlice streamWrite chunk[${l+1}/${c}] of packageId[${w}] err`,t),C("error",`write chunk[${l+1}/${c}] of packageId[${w}] error: ${ms(t)}`),e.reject(`write chunk[${l+1}/${c}] of packageId[${w}] error`))}),d.on("close",()=>{n||i||r?Fs(u):a&&!0===d.writableFinished&&setTimeout(()=>{e.resolve(`chunk[${l+1}/${c}] of packageId[${w}] done`)},g)}),s.payload.on("data",e=>{n||(t+=e.length,t>y&&(n=!0,s.payload.unpipe(d),s.payload.resume(),d.destroy()))}),s.payload.pipe(d),s.payload.on("end",()=>{a=!0,i||n&&e.reject("payload too large")});let o=t=>{r||a||i||(r=!0,d.destroy(),C("error",`receive chunk[${l+1}/${c}] of packageId[${w}] error: ${t}`),e.reject(`receive chunk[${l+1}/${c}] of packageId[${w}] error: ${t}`))};return s.payload.on("error",e=>{console.log(`apiUploadSlice req.payload chunk[${l+1}/${c}] of packageId[${w}] err`,e),o(ms(e))}),s.payload.on("close",()=>{o("closed before end")}),e},I={},D="",m="";try{let e=await L();I.success=e,D="success",m="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: ${y}`}).code(413);I.error=e,D="error",m="need to parse"}return er(n,Hs(I),{returnType:D,returnMsg:m})}},K={path:`/${u}/dwgfn`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,parse:!0,failAction:E(_s.dwgfn)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let s=_s.dwgfn,n=X(t,s),i=Z(e,s),r=await Y(e,i,s,n);if(r)return r;let a=Le(e,"payload.fileId","");if(!Fe(a))return n.param("invalid fileId in payload");let o={fileId:a,token:i.token},l={};if(await x(o).then(e=>{l.success=e}).catch(e=>{l.error=e}),Jt(l,"error"))return n.app("can not get file from fileId");let c=A(Le(l,"success"),a,s,n);return c.ok?(_i(c.v.streamRead),z(t,n,Promise.resolve({filename:c.v.filename}),`download fileId[${a}]`)):c.res}},W={path:`/${u}/dwgf`,method:"GET",options:{timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let s=_s.dwgf,n=X(t,s),i=Z(e,s),r=await Y(e,i,s,n);if(r)return r;let a=Le(i.query,"fileId","");if(a=Fe(a)?a:"",!Fe(a))return n.param("invalid fileId in query");let o={fileId:a,token:i.token},l={};if(await x(o).then(e=>{l.success=e}).catch(e=>{l.error=e}),Jt(l,"error"))return n.app("can not get file from fileId");let c=A(Le(l,"success"),a,s,n);if(!c.ok)return c.res;let M=c.v.streamRead,w=c.v.fileSize,u=c.v.fileType,d=c.v.filename,y=Fi(M,w,e=>{C("error",`download fileId[${a}] stream error: ${e}`)},{forHead:"head"===ps(Le(e,"method","")).toLowerCase()});if(y.error)return _i(M),C("error",`download fileId[${a}] output error: ${y.reason}`),n.output(y.error);let L=t.response(y.source).type(u).header("Content-Encoding","identity").header("Content-Length",w).header("Content-Disposition",Fe(d)?`attachment; filename*=UTF-8''${function(e){let t=Array.from(ps(e)),s="";for(let e of t){let t="";try{t=encodeURIComponent(e)}catch(e){t="%EF%BF%BD"}s+=t}return s.replace(/['()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}(d)}`:"attachment");return L}},k={path:`/${u}/dw`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,parse:!0,failAction:E(_s.dw)},timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let s=_s.dw,n=X(t,s),i=Z(e,s),r=await Y(e,i,s,n);if(r)return r;let a=Le(e,"payload.fileId","");if(!Fe(a))return n.param("invalid fileId in payload");let o={fileId:a,token:i.token},l={};if(await x(o).then(e=>{l.success=e}).catch(e=>{l.error=e}),Jt(l,"error"))return n.app("can not get file from fileId");let c=A(Le(l,"success"),a,s,n);if(!c.ok)return c.res;let M=c.v.streamRead,w=function(e,t={}){let s=Le(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:"";if(!Fe(e))return n("invalid str");let i="";try{let t=Ts.parse(e);i=Ss.stringify(t)}catch(e){return n(e.toString())}return s?{state:"success",msg:i}:i}(c.v.filename),u=c.v.fileSize,d=c.v.fileType,y=Fi(M,u,e=>{C("error",`download fileId[${a}] stream error: ${e}`)},{forHead:"head"===ps(Le(e,"method","")).toLowerCase()});return y.error?(_i(M),C("error",`download fileId[${a}] output error: ${y.reason}`),n.output(y.error)):t.response(y.source).type(d).header("Content-Encoding","identity").header("Content-Disposition",`attachment; filename="${w}"`).header("Content-Length",u)}};let U=null;if(Le(r,"serverHapi"))try{m.route([j,v,G,K,W,k])}catch(e){console.log("register routes error",e),f("error",`register routes error: ${ms(e)}`)}else U=async function(){l&&await m.register(n);let e=[];if(l){let t={method:"GET",path:"/{file*}",handler:{directory:{path:`${c}/`}}};e=[...e,t]}e=[...e,j,v,G,K,W,k],m.route(e),await m.start(),console.log(`Server running at: ${m.info.uri}`)}().catch(e=>{console.log("start server error",e),f("error",`start server error: ${ms(e)}`)});return p.stop=async()=>{try{Xt(U)&&await U,await m.stop()}catch(e){console.log("stop server error",e),C("error",`stop server error: ${ms(e)}`)}},p}var sr=function(){return d.Date.now()},nr=Math.max,ir=Math.min;function rr(e,t,s){var n,i,r,a,o,l,c=0,M=!1,w=!1,u=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function d(t){var s=n,r=i;return n=i=void 0,c=t,a=e.apply(r,s)}function y(e){var s=e-l;return void 0===l||s>=t||s<0||w&&e-c>=r}function L(){var e=sr();if(y(e))return I(e);o=setTimeout(L,function(e){var s=t-(e-l);return w?ir(s,r-(e-c)):s}(e))}function I(e){return o=void 0,u&&n?d(e):(n=i=void 0,a)}function D(){var e=sr(),s=y(e);if(n=arguments,i=this,l=e,s){if(void 0===o)return function(e){return c=e,o=setTimeout(L,t),M?d(e):a}(l);if(w)return clearTimeout(o),o=setTimeout(L,t),d(l)}return void 0===o&&(o=setTimeout(L,t)),a}return t=at(t)||0,x(s)&&(M=!!s.leading,r=(w="maxWait"in s)?nr(at(s.maxWait)||0,t):r,u="trailing"in s?!!s.trailing:u),D.cancel=function(){void 0!==o&&clearTimeout(o),c=0,n=l=i=o=void 0},D.flush=function(){return void 0===o?a:I(sr())},D}var ar=function(){try{var e=U(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),or=ar;function lr(e,t,s){"__proto__"==t&&or?or(e,t,{configurable:!0,enumerable:!0,value:s,writable:!0}):e[t]=s}function cr(e,t,s){(void 0!==s&&!R(e[t],s)||void 0===s&&!(t in e))&&lr(e,t,s)}var Mr="object"==typeof exports&&exports&&!exports.nodeType&&exports,wr=Mr&&"object"==typeof module&&module&&!module.nodeType&&module,ur=wr&&wr.exports===Mr?d.Buffer:void 0,dr=ur?ur.allocUnsafe:void 0;function yr(e,t){if(t)return e.slice();var s=e.length,n=dr?dr(s):new e.constructor(s);return e.copy(n),n}function Lr(e){var t=new e.constructor(e.byteLength);return new Wn(t).set(new Wn(e)),t}function Ir(e,t){var s=t?Lr(e.buffer):e.buffer;return new e.constructor(s,e.byteOffset,e.length)}function Dr(e,t){var s=-1,n=e.length;for(t||(t=Array(n));++s<n;)t[s]=e[s];return t}var gr=Object.create,mr=function(){function e(){}return function(t){if(!x(t))return{};if(gr)return gr(t);e.prototype=t;var s=new e;return e.prototype=void 0,s}}(),pr=mr;function hr(e){return"function"!=typeof e.constructor||ke(e)?{}:pr(pt(e))}function Cr(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var fr=Object.prototype.hasOwnProperty;function Nr(e,t,s){var n=e[t];fr.call(e,t)&&R(n,s)&&(void 0!==s||t in e)||lr(e,t,s)}function br(e,t,s,n){var i=!s;s||(s={});for(var r=-1,a=t.length;++r<a;){var o=t[r],l=n?n(s[o],e[o],o,s,e):void 0;void 0===l&&(l=e[o]),i?lr(s,o,l):Nr(s,o,l)}return s}var Tr=Object.prototype.hasOwnProperty;function xr(e){if(!x(e))return function(e){var t=[];if(null!=e)for(var s in Object(e))t.push(s);return t}(e);var t=ke(e),s=[];for(var n in e)("constructor"!=n||!t&&Tr.call(e,n))&&s.push(n);return s}function Sr(e){return Je(e)?Ke(e,!0):xr(e)}function Zr(e,t,s,n,i,r,a){var o=Cr(e,s),l=Cr(t,s),c=a.get(l);if(c)cr(e,s,c);else{var w,u=r?r(o,l,s+"",e,t,a):void 0,d=void 0===u;if(d){var y=M(l),L=!y&&be(l),I=!y&&!L&&ve(l);u=l,y||L||I?M(o)?u=o:C(w=o)&&Je(w)?u=Dr(o):L?(d=!1,u=yr(l,!0)):I?(d=!1,u=Ir(l,!0)):u=[]:Tt(l)||he(l)?(u=o,he(o)?u=function(e){return br(e,Sr(e))}(o):x(o)&&!S(o)||(u=hr(l))):d=!1}d&&(a.set(l,u),i(u,l,n,r,a),a.delete(l)),cr(e,s,u)}}function Xr(e,t,s,n,i){e!==t&&Ys(t,function(r,a){if(i||(i=new En),x(r))Zr(e,t,a,s,Xr,n,i);else{var o=n?n(Cr(e,a),r,a+"",e,t,i):void 0;void 0===o&&(o=r),cr(e,a,o)}},Sr)}var Yr=Math.max;function Ar(e,t,s){return t=Yr(void 0===t?e.length-1:t,0),function(){for(var n=arguments,i=-1,r=Yr(n.length-t,0),a=Array(r);++i<r;)a[i]=n[t+i];i=-1;for(var o=Array(t+1);++i<t;)o[i]=n[i];return o[t]=s(a),function(e,t,s){switch(s.length){case 0:return e.call(t);case 1:return e.call(t,s[0]);case 2:return e.call(t,s[0],s[1]);case 3:return e.call(t,s[0],s[1],s[2])}return e.apply(t,s)}(e,this,o)}}var zr=or?function(e,t){return or(e,"toString",{configurable:!0,enumerable:!1,value:(s=t,function(){return s}),writable:!0});var s}:Es,Er=zr,jr=Date.now;var vr=function(e){var t=0,s=0;return function(){var n=jr(),i=16-(n-s);if(s=n,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Er),Gr=vr;var Kr,Wr=(Kr=function(e,t,s){Xr(e,t,s)},function(e,t){return Gr(Ar(e,t,Es),e+"")}(function(e,t){var s=-1,n=t.length,i=n>1?t[n-1]:void 0,r=n>2?t[2]:void 0;for(i=Kr.length>3&&"function"==typeof i?(n--,i):void 0,r&&function(e,t,s){if(!x(s))return!1;var n=typeof t;return!!("number"==n?Je(s)&&xe(t,s.length):"string"==n&&t in s)&&R(s[t],e)}(t[0],t[1],r)&&(i=n<3?void 0:i,n=1),e=Object(e);++s<n;){var a=t[s];a&&Kr(e,a,s,i)}return e})),kr=Wr;function Ur(e,s={}){let n={};if(_e(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=Vt()),!Jt(e,"emit"))throw new Error("instWConverServer is not an EventEmitter");let i=Le(s,"fpTableTags","");Fe(i)||(i="./tableTags.json");let r=Le(s,"genTag");Zt(r)||(r=()=>ts()+"|"+is(6));let a=(t,...s)=>{setTimeout(()=>{e.emit(t,...s)},1)};function o(){let e={};try{if(t.existsSync(i)){let s=Be(t.readFileSync(i,"utf8"));_e(s)&&(e=s)}}catch(e){a("error",{msg:"readTableTags catch",err:e})}return e}function l(){try{let e=function(e,t=!1,s={}){let n=Le(s,"returnWithStateAndMsg",null);Pe(n)||(n=!1);let i=e=>n?{state:"error",msg:e}:"";if(as(e))return i("invalid v");let r="";try{r=t?JSON.stringify(e,null,2):JSON.stringify(e)}catch(e){return i(e.toString())}return n?{state:"success",msg:r}:r}(n);t.writeFileSync(i,e,"utf8")}catch(e){a("error",{msg:"writeTableTags catch",err:e})}}let c=rr(()=>{l(),a("changeTableTags",n)},200);return e.readTableTags=o,e.writeTableTags=l,e.initTableTags=function(e={},t="useInputFirst"){if("useInputOnly"===t)n=e;else if("useStorageOnly"===t)n=o();else if("useInputFirst"===t)n=kr(o(),e);else{if("useStorageFirst"!==t)throw new Error(`invalid mode[${t}]`);n=kr(e,o())}l()},e.setTableTags=function(e={}){n=kr(n,e),l()},e.getTableTags=function(){return n},e.updateTableTag=function(e){n[e]=r(),c()},e}var Vr=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)Hn(t,Bn(e)),e=pt(e);return t}:Pn,Qr=Vr;function Hr(e){return Jn(e,Sr,Qr)}var Jr=Object.prototype.hasOwnProperty;var Rr=/\w*$/;var Pr=y?y.prototype:void 0,Or=Pr?Pr.valueOf:void 0;function Fr(e,t,s){var n,i=e.constructor;switch(t){case"[object ArrayBuffer]":return Lr(e);case"[object Boolean]":case"[object Date]":return new i(+e);case"[object DataView]":return function(e,t){var s=t?Lr(e.buffer):e.buffer;return new e.constructor(s,e.byteOffset,e.byteLength)}(e,s);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 Ir(e,s);case"[object Map]":case"[object Set]":return new i;case"[object Number]":case"[object String]":return new i(e);case"[object RegExp]":return function(e){var t=new e.constructor(e.source,Rr.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,Or?Object(Or.call(n)):{}}}var Br=Ee&&Ee.isMap,$r=Br?Xe(Br):function(e){return C(e)&&"[object Map]"==Ln(e)};var _r=Ee&&Ee.isSet,qr=_r?Xe(_r):function(e){return C(e)&&"[object Set]"==Ln(e)},ea="[object Arguments]",ta="[object Function]",sa="[object Object]",na={};function ia(e,t,s,n,i,r){var a,o=1&t,l=2&t,c=4&t;if(s&&(a=i?s(e,n,i,r):s(e)),void 0!==a)return a;if(!x(e))return e;var w=M(e);if(w){if(a=function(e){var t=e.length,s=new e.constructor(t);return t&&"string"==typeof e[0]&&Jr.call(e,"index")&&(s.index=e.index,s.input=e.input),s}(e),!o)return Dr(e,a)}else{var u=Ln(e),d=u==ta||"[object GeneratorFunction]"==u;if(be(e))return yr(e,o);if(u==sa||u==ea||d&&!i){if(a=l||d?{}:hr(e),!o)return l?function(e,t){return br(e,Qr(e),t)}(e,function(e,t){return e&&br(t,Sr(t),e)}(a,e)):function(e,t){return br(e,Bn(e),t)}(e,function(e,t){return e&&br(t,Re(t),e)}(a,e))}else{if(!na[u])return i?e:{};a=Fr(e,u,o)}}r||(r=new En);var y=r.get(e);if(y)return y;r.set(e,a),qr(e)?e.forEach(function(n){a.add(ia(n,t,s,n,e,r))}):$r(e)&&e.forEach(function(n,i){a.set(i,ia(n,t,s,i,e,r))});var L=w?void 0:(c?l?Hr:$n:l?Sr:Re)(e);return Zs(L||e,function(n,i){L&&(n=e[i=n]),Nr(a,i,ia(n,t,s,i,e,r))}),a}na[ea]=na["[object Array]"]=na["[object ArrayBuffer]"]=na["[object DataView]"]=na["[object Boolean]"]=na["[object Date]"]=na["[object Float32Array]"]=na["[object Float64Array]"]=na["[object Int8Array]"]=na["[object Int16Array]"]=na["[object Int32Array]"]=na["[object Map]"]=na["[object Number]"]=na[sa]=na["[object RegExp]"]=na["[object Set]"]=na["[object String]"]=na["[object Symbol]"]=na["[object Uint8Array]"]=na["[object Uint8ClampedArray]"]=na["[object Uint16Array]"]=na["[object Uint32Array]"]=!0,na["[object Error]"]=na[ta]=na["[object WeakMap]"]=!1;function ra(e){return ia(e,5)}function aa(e={}){let t=Vt(),s={},n=null,i=Le(e,"timeAlive");mt(i)||(i=1e4),i=gt(i),i=Math.min(i,vt);let r=Le(e,"timeDetect");return mt(r)||(r=50),r=gt(r),r=Math.min(r,vt),t.trigger=function(e,a){Fe(e)?(Jt(s,e)||setTimeout(()=>{Qt(t,"message",[{eventName:"enter",key:e,data:a,now:zn(s)}],{tag:"alive"})},1),s[e]={data:a,time:Date.now()},null===n&&(n=setInterval(()=>{js(s,(e,n)=>{if(Date.now()-e.time>i){let e=ra(s[n]);delete s[n],Qt(t,"message",[{eventName:"leave",key:n,data:e.data,now:zn(s)}],{tag:"alive"})}}),_e(s)||(clearInterval(n),n=null)},r))):console.log("trigger need key")},t.get=function(){let e=[];return js(s,(t,s)=>{e.push({key:s,data:t.data})}),e=ra(e),e},t}function oa(e,t={}){let s={};if(_e(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=Vt()),!Jt(e,"emit"))throw new Error("instWConverServer is not an EventEmitter");let n=(t,...s)=>{setTimeout(()=>{e.emit(t,...s)},1)},i=aa(),r=setInterval(()=>{let e=di(i.get(),"key"),t={};js(e,e=>{t[e]=Le(s,e,[])}),s=t},1e3);i.on("message",function({eventName:e,key:t,data:s,now:i}){"enter"===e?n("clientEnter",t,s):"leave"===e&&n("clientLeave",t,s),n("clientChange",i)}),e.on("execute",function(e,t,r){if("[sys:polling]"===e)try{let e=Le(t,"clientId",""),n=Le(s,e,[]);n=ra(n),s[e]=[],i.trigger(e,t),r.resolve(n)}catch(e){n("error",e),r.reject("[sys:polling] error")}});return e.getClients=i.get,e.getMessages=()=>ra(s),e.broadcast=e=>{if(!_e(s))return;let t={};js(s,(s,n)=>{s.push({mode:"broadcast",data:e}),t[n]=s}),s=t},e.clearBroadcast=()=>{clearInterval(r)},e}let la=(e,t)=>{let s={};return js(e,e=>{let n=e,i=Le(t,e,"");Fe(i)&&(s[n]=i)}),s};function ca(e,t,s,n={}){if(!_e(e))throw new Error("invalid instWConverServer");if(0===zn(t))return e;if(!_e(s))return e;let i=Le(n,"genTag");Zt(i)||(i=()=>ts()+"|"+is(6));let r={};return js(t,e=>{r[e]=i()}),e.initTableTags(r,"useInputOnly"),js(t,t=>{let n=s[t];if(!n)throw new Error(`invalid kpOrm[${t}]`);try{n.on("change",()=>{e.updateTableTag(t)})}catch(e){throw new Error(`kpOrm[${t}] can not listen to change events`)}}),e.on("changeTableTags",s=>{e.broadcast({mode:"syncKpTable",data:la(t,s)})}),e}function Ma(e,t,s,n){for(var i=s-1,r=e.length;++i<r;)if(n(e[i],t))return i;return-1}var wa=Array.prototype.splice;function ua(e,t){return e&&e.length&&t&&t.length?function(e,t,s,n){var i=n?Ma:Ii,r=-1,a=t.length,o=e;for(e===t&&(t=Dr(t)),s&&(o=oe(e,Xe(s)));++r<a;)for(var l=0,c=t[r],M=s?s(c):c;(l=i(o,M,l,n))>-1;)o!==e&&wa.call(o,l,1),wa.call(e,l,1);return e}(e,t):e}function da(e,t={}){if(!_e(e))throw new Error("invalid instWConverServer");let s=Le(t,"getUserIdByToken",null);Zt(s)||(s=async()=>"");let n=Le(t,"useDbOrm",null);Pe(n)||(n=!1);let i=null;if(n&&(i=Le(t,"operOrm",null),!Zt(i)))throw new Error("invalid opt.operOrm when useDbOrm=true");let r=[];if(n&&(r=Le(t,"tableNames",null),!rs(r)))throw new Error("invalid opt.tableNames when useDbOrm=true");let a=[];n&&(a=Le(t,"methods",null),rs(a)||(a=["select","insert","save","del"]));let o=Le(t,"kpFunExt",null);let l={};async function c(e,t,n){if(!Fe(e))return n.resolve({state:"error",msg:"invalid func"}),n;let i="";if(!Jt(t,"__sysToken__"))return n.resolve({state:"error",msg:"invalid token"}),n;if(i=ps(t.__sysToken__),!Jt(t,"__sysInputArgs__"))return n.resolve({state:"error",msg:"invalid input"}),n;t=t.__sysInputArgs__;let r="";if(r=s(i),Xt(r)&&(r=await r),Fe(r)||(r=""),"[sys:getFuncList]"===e){let e=Re(l);e=function(e,t){if(!Ms(e))return[];if(($e(t)||wt(t)||Oe(t)||Pe(t))&&(t=[t]),!Ms(t))return e;let s=ra(e);return ua(s,t),s}(e,"[sys:getTableTags]");let t={state:"success",msg:e};return n.resolve(t),n}if(!Jt(l,e))return n.resolve({state:"error",msg:`invalid func[${e}]`}),n;let a=l[e];try{let e=await jt(a)(r,...t);n.resolve(e)}catch(t){n.resolve({state:"error",msg:`call func[${e}] has an error: ${t.message}`})}return n}return n&&(r=ra(r),l=function(e,t,s){let n={};return js(e,e=>{js(t,t=>{n[`${e}.${t}`]=async function(n,i){return await s(n,e,t,i)}})}),n}(r,a,i)),_e(o)&&js(o,(e,t)=>{l[t]=e}),e.on("execute",async function(t,s,n){await c(t,s,n).catch(s=>{e.emit("error",s),n.resolve({state:"error",msg:`execFun func[${t}] has an error: ${s.message}`})})}),e}function ya(e,t={}){if(_e(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=Vt()),!Jt(e,"emit"))throw new Error("instWConverServer is not an EventEmitter");let s=Le(t,"fpTableTags",null);Fe(s)||(s="./tableTags.json");let n=Le(t,"genTag");Zt(n)||(n=()=>ts()+"|"+is(6)),e=new oa(e=new Ur(e,{fpTableTags:s,genTag:n}));let i=Le(t,"useDbOrm",null);Pe(i)||(i=!0);let r=Le(t,"kpOrm",null),a=Le(t,"operOrm",null),o=Le(t,"tableNamesExec",null),l=Le(t,"methodsExec",null),c=Le(t,"tableNamesSync",null),M=Le(t,"getUserIdByToken",null),w=Le(t,"kpFunExt",null);if(_e(w)||(w={}),w={...w,"[sys:getTableTags]":()=>{let t=e.getTableTags();return{mode:"syncKpTable",data:la(c,t)}}},e=new da(e,{getUserIdByToken:M,useDbOrm:i,operOrm:a,tableNames:o,methods:l,kpFunExt:w}),i){if(!$e(r))return e.emit("error","invalid opt.kpOrm when useDbOrm=true"),e;e=new ca(e,c,r,{genTag:n})}return e}function La(e={}){let t=Vt(),i=null,r=null,a=Le(e,"port");dt(a)||(a=8080);let o=Le(e,"corsOrigins",[]);Ms(o)||(o=["http://localhost"]);let l=Le(e,"delayForSlice","");Yt(l)||(l=100),l=gt(l);let c=Le(e,"useInert");Pe(c)||(c=!0);let M=Le(e,"pathStaticFiles");Fe(M)||(M="dist");let w=Le(e,"apis");Ms(w)||(w=[]);let u=Le(e,"apiName");Fe(u)||(u="api");let d=Le(e,"pathUploadTemp");Fe(d)||(d="./uploadTemp"),Ft(d)||ws(d);let y=Le(e,"tokenType");Fe(y)||(y="Bearer");let L=Le(e,"sizeSlice");mt(L)||(L=1048576);let I=Le(e,"sizeMsg");mt(I)||(I=104857600);let D=Le(e,"verifyConn");Zt(D)||(D=()=>!0);let g=Le(e,"getUserIdByToken",null),m=Le(e,"useDbOrm",null);Pe(m)||(m=!0);let p=Le(e,"kpOrm",null),h=Le(e,"operOrm",null),C=Le(e,"tableNamesExec",null),f=Le(e,"methodsExec",null),N=Le(e,"tableNamesSync",null),b=Le(e,"kpFunExt",null),T=Le(e,"fpTableTags",null);Fe(T)||(T=Le(e,"fnTableTags",null));let x=Le(e,"genTag");Zt(x)||(x=()=>ts()+"|"+is(6));let S=Le(e,"useShowLog");Pe(S)||(S=!0);(async()=>{await(async()=>{i=new s.Server({port:a,routes:{timeout:{server:!1,socket:!1},cors:{origin:o,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]}}}),c&&await i.register(n);let e=[];c&&(e=[{method:"GET",path:"/{file*}",handler:{directory:{path:`${M}/`}}}]),e=[...e,...w],i.route(e)})(),await(async()=>{r=new tr({serverHapi:i,apiName:u,pathUploadTemp:d,tokenType:y,sizeSlice:L,sizeMsg:I,verifyConn:D,corsOrigins:o,delayForSlice:l}),r.on("clientChange",function(e){S&&console.log(`Server[port:${a}]: now clients: ${e}`)})})(),await(async()=>{r=new ya(r,{getUserIdByToken:g,useDbOrm:m,kpOrm:p,operOrm:h,tableNamesExec:C,tableNamesSync:N,methodsExec:f,kpFunExt:b,fpTableTags:T,genTag:x}),r.on("error",e=>{t.emit("error",e)})})(),await i.start(),S&&console.log(`Server running at: ${i.info.uri}`)})().catch(e=>{t.emit("error",e)}),process.on("unhandledRejection",e=>{console.log("unhandledRejection",e),t.emit("error",{mode:"unhandledRejection",err:e})}),process.on("uncaughtException",e=>{console.log("uncaughtException",e),t.emit("error",{mode:"uncaughtException",err:e})});return t.getServer=async()=>(await Ht(()=>null!==i),i),t.getInstWConverServer=async()=>(await Ht(()=>null!==r),r),t}function Ia(e,t){let s=Et();if(!rs(e)&&!$e(e))return s.reject("rs is not an array or object"),s;let n=!1;if($e(e)){n=!0;let t=[];js(e,(e,s)=>{t.push({k:s,v:e})}),e=t}Zt(t)||(t=function(e){return e});let i=-1,r=[];return e.reduce(function(e,s){return e.then(function(e){r.push(e),i+=1;let a=i,o=s;return n&&(a=s.k,o=s.v),Zt(t)?t(o,a):o})},Promise.resolve()).then(function(e){var t,n,i,a;r.push(e),a=null==(t=r)?0:t.length,r=a?yi(t,(n=i||void 0===n?1:ct(n))<0?0:n,a):[],s.resolve(r)}).catch(function(e){s.reject(e)}),s}let Da={backup:async function(e){return await Ia(e,async(e,t)=>(console.log("backup...",t),{name:t,data:await e.select()}))},recover:async function(e,s,n,i=!1){if(!$t(e))throw console.log("fp",e),new Error("fp is not exist");if(!_e(s))throw console.log("woItems",s),new Error("invalid woItems");Zt(n)||(n=null),Pe(i)||(i=!1);let r=t.readFileSync(e,"utf8");r=Xi(r);let a=Be(r);Zt(n)&&n(),await Ia(a,async e=>{console.log("recover...",e.name),i&&(console.log("needCreateStorage"),await s[e.name].createStorage());let t=null;return zn(e.data)>0&&(t=await s[e.name].insert(e.data)),t})}};function ga(){if(!Zt(es))throw new Error("invalid dayjs");return es().format("YYYY-MM-DDTHH:mm:ss.SSSZ")}var ma={exports:{}},pa={},ha={exports:{}},Ca={};function fa(){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 Na=/javascript\s*\:/gim;Ca.whiteList=fa(),Ca.getDefaultWhiteList=fa,Ca.onAttr=function(e,t,s){},Ca.onIgnoreAttr=function(e,t,s){},Ca.safeAttrValue=function(e,t){return Na.test(t)?"":t};var ba={indexOf:function(e,t){var s,n;if(Array.prototype.indexOf)return e.indexOf(t);for(s=0,n=e.length;s<n;s++)if(e[s]===t)return s;return-1},forEach:function(e,t,s){var n,i;if(Array.prototype.forEach)return e.forEach(t,s);for(n=0,i=e.length;n<i;n++)t.call(s,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 Ta=function(e,t){";"!==(e=ba.trimRight(e))[e.length-1]&&(e+=";");var s=e.length,n=!1,i=0,r=0,a="";function o(){if(!n){var s=ba.trim(e.slice(i,r)),o=s.indexOf(":");if(-1!==o){var l=ba.trim(s.slice(0,o)),c=ba.trim(s.slice(o+1));if(l){var M=t(i,a.length,l,c,s);M&&(a+=M+"; ")}}}i=r+1}for(;r<s;r++){var l=e[r];if("/"===l&&"*"===e[r+1]){var c=e.indexOf("*/",r+2);if(-1===c)break;i=(r=c+1)+1,n=!1}else"("===l?n=!0:")"===l?n=!1:";"===l?n||o():"\n"===l&&o()}return ba.trim(a)},xa=Ca,Sa=Ta;function Za(e){return null==e}function Xa(e){(e=function(e){var t={};for(var s in e)t[s]=e[s];return t}(e||{})).whiteList=e.whiteList||xa.whiteList,e.onAttr=e.onAttr||xa.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||xa.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||xa.safeAttrValue,this.options=e}Xa.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,s=t.whiteList,n=t.onAttr,i=t.onIgnoreAttr,r=t.safeAttrValue;return Sa(e,function(e,t,a,o,l){var c=s[a],M=!1;if(!0===c?M=c:"function"==typeof c?M=c(o):c instanceof RegExp&&(M=c.test(o)),!0!==M&&(M=!1),o=r(a,o)){var w,u={position:t,sourcePosition:e,source:l,isWhite:M};return M?Za(w=n(a,o,u))?a+":"+o:w:Za(w=i(a,o,u))?void 0:w}})};var Ya=Xa;!function(e,t){var s=Ca,n=Ya;for(var i in(t=e.exports=function(e,t){return new n(t).process(e)}).FilterCSS=n,s)t[i]=s[i];"undefined"!=typeof window&&(window.filterCSS=e.exports)}(ha,ha.exports);var Aa=ha.exports,za={indexOf:function(e,t){var s,n;if(Array.prototype.indexOf)return e.indexOf(t);for(s=0,n=e.length;s<n;s++)if(e[s]===t)return s;return-1},forEach:function(e,t,s){var n,i;if(Array.prototype.forEach)return e.forEach(t,s);for(n=0,i=e.length;n<i;n++)t.call(s,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}},Ea=Aa.FilterCSS,ja=Aa.getDefaultWhiteList,va=za;function Ga(){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 Ka=new Ea;function Wa(e){return e.replace(ka,"<").replace(Ua,">")}var ka=/</g,Ua=/>/g,Va=/"/g,Qa=/"/g,Ha=/&#([a-zA-Z0-9]*);?/gim,Ja=/:?/gim,Ra=/&newline;?/gim,Pa=/((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,Oa=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,Fa=/u\s*r\s*l\s*\(.*/gi;function Ba(e){return e.replace(Va,""")}function $a(e){return e.replace(Qa,'"')}function _a(e){return e.replace(Ha,function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))})}function qa(e){return e.replace(Ja,":").replace(Ra," ")}function eo(e){for(var t="",s=0,n=e.length;s<n;s++)t+=e.charCodeAt(s)<32?" ":e.charAt(s);return va.trim(t)}function to(e){return e=eo(e=qa(e=_a(e=$a(e))))}function so(e){return e=Wa(e=Ba(e))}pa.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"]},pa.getDefaultWhiteList=Ga,pa.onTag=function(e,t,s){},pa.onIgnoreTag=function(e,t,s){},pa.onTagAttr=function(e,t,s){},pa.onIgnoreTagAttr=function(e,t,s){},pa.safeAttrValue=function(e,t,s,n){if(s=to(s),"href"===t||"src"===t){if("#"===(s=va.trim(s)))return"#";if("http://"!==s.substr(0,7)&&"https://"!==s.substr(0,8)&&"mailto:"!==s.substr(0,7)&&"tel:"!==s.substr(0,4)&&"data:image/"!==s.substr(0,11)&&"ftp://"!==s.substr(0,6)&&"./"!==s.substr(0,2)&&"../"!==s.substr(0,3)&&"#"!==s[0]&&"/"!==s[0])return""}else if("background"===t){if(Pa.lastIndex=0,Pa.test(s))return""}else if("style"===t){if(Oa.lastIndex=0,Oa.test(s))return"";if(Fa.lastIndex=0,Fa.test(s)&&(Pa.lastIndex=0,Pa.test(s)))return"";!1!==n&&(s=(n=n||Ka).process(s))}return s=so(s)},pa.escapeHtml=Wa,pa.escapeQuote=Ba,pa.unescapeQuote=$a,pa.escapeHtmlEntities=_a,pa.escapeDangerHtml5Entities=qa,pa.clearNonPrintableCharacter=eo,pa.friendlyAttrValue=to,pa.escapeAttrValue=so,pa.onIgnoreTagStripAll=function(){return""},pa.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var s=!Array.isArray(e),n=[],i=!1;return{onIgnoreTag:function(r,a,o){if(function(t){return!!s||-1!==va.indexOf(e,t)}(r)){if(o.isClosing){var l="[/removed]",c=o.position+10;return n.push([!1!==i?i:o.position,c]),i=!1,l}return i||(i=o.position),"[removed]"}return t(r,a,o)},remove:function(e){var t="",s=0;return va.forEach(n,function(n){t+=e.slice(s,n[0]),s=n[1]}),t+=e.slice(s)}}},pa.stripCommentTag=function(e){for(var t="",s=0;s<e.length;){var n=e.indexOf("\x3c!--",s);if(-1===n){t+=e.slice(s);break}t+=e.slice(s,n);var i=e.indexOf("--\x3e",n);if(-1===i)break;s=i+3}return t},pa.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("")},pa.attributeWrapSign='"',pa.cssFilter=Ka,pa.getDefaultCSSWhiteList=ja;var no={},io=za;function ro(e){var t,s=io.spaceIndex(e);return t=-1===s?e.slice(1,-1):e.slice(1,s+1),"/"===(t=io.trim(t).toLowerCase()).slice(0,1)&&(t=t.slice(1)),"/"===t.slice(-1)&&(t=t.slice(0,-1)),t}function ao(e){return"</"===e.slice(0,2)}var oo=/[^a-zA-Z0-9\\_:.-]/gim;function lo(e,t){for(;t<e.length;t++){var s=e[t];if(" "!==s)return"="===s?t:-1}}function co(e,t){for(;t<e.length;t++){var s=e[t];if(" "!==s)return"'"===s||'"'===s?t:-1}}function Mo(e,t){for(;t>0;t--){var s=e[t];if(" "!==s)return"="===s?t:-1}}function wo(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}no.parseTag=function(e,t,s){var n="",i=0,r=!1,a=!1,o=0,l=e.length,c="",M="";e:for(o=0;o<l;o++){var w=e.charAt(o);if(!1===r){if("<"===w){r=o;continue}}else if(!1===a){if("<"===w){n+=s(e.slice(i,o)),r=o,i=o;continue}if(">"===w||o===l-1){n+=s(e.slice(i,r)),c=ro(M=e.slice(r,o+1)),n+=t(r,n.length,c,M,ao(M)),i=o+1,r=!1;continue}if('"'===w||"'"===w)for(var u=1,d=e.charAt(o-u);""===d.trim()||"="===d;){if("="===d){a=w;continue e}d=e.charAt(o-++u)}}else if(w===a){a=!1;continue}}return i<l&&(n+=s(e.substr(i))),n},no.parseAttr=function(e,t){var s=0,n=0,i=[],r=!1,a=e.length;function o(e,s){if(!((e=(e=io.trim(e)).replace(oo,"").toLowerCase()).length<1)){var n=t(e,s||"");n&&i.push(n)}}for(var l=0;l<a;l++){var c,M=e.charAt(l);if(!1!==r||"="!==M)if(!1===r||l!==n)if(/\s|\n|\t/.test(M)){if(e=e.replace(/\s|\n|\t/g," "),!1===r){if(-1===(c=lo(e,l))){o(io.trim(e.slice(s,l))),r=!1,s=l+1;continue}l=c-1;continue}if(-1===(c=Mo(e,l-1))){o(r,wo(io.trim(e.slice(s,l)))),r=!1,s=l+1;continue}}else;else{if(-1===(c=e.indexOf(M,l+1)))break;o(r,io.trim(e.slice(n+1,c))),r=!1,s=(l=c)+1}else r=e.slice(s,l),s=l+1,n='"'===e.charAt(s)||"'"===e.charAt(s)?s:co(e,l+1)}return s<e.length&&(!1===r?o(e.slice(s)):o(r,wo(io.trim(e.slice(s))))),io.trim(i.join(" "))};var uo=Aa.FilterCSS,yo=pa,Lo=no,Io=Lo.parseTag,Do=Lo.parseAttr,go=za;function mo(e){return null==e}function po(e){(e=function(e){var t={};for(var s in e)t[s]=e[s];return t}(e||{})).stripIgnoreTag&&(e.onIgnoreTag&&console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'),e.onIgnoreTag=yo.onIgnoreTagStripAll),e.whiteList||e.allowList?e.whiteList=function(e){var t={};for(var s in e)Array.isArray(e[s])?t[s.toLowerCase()]=e[s].map(function(e){return e.toLowerCase()}):t[s.toLowerCase()]=e[s];return t}(e.whiteList||e.allowList):e.whiteList=yo.whiteList,this.attributeWrapSign=!0===e.singleQuotedAttributeValue?"'":yo.attributeWrapSign,e.onTag=e.onTag||yo.onTag,e.onTagAttr=e.onTagAttr||yo.onTagAttr,e.onIgnoreTag=e.onIgnoreTag||yo.onIgnoreTag,e.onIgnoreTagAttr=e.onIgnoreTagAttr||yo.onIgnoreTagAttr,e.safeAttrValue=e.safeAttrValue||yo.safeAttrValue,e.escapeHtml=e.escapeHtml||yo.escapeHtml,this.options=e,!1===e.css?this.cssFilter=!1:(e.css=e.css||{},this.cssFilter=new uo(e.css))}po.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this,s=t.options,n=s.whiteList,i=s.onTag,r=s.onIgnoreTag,a=s.onTagAttr,o=s.onIgnoreTagAttr,l=s.safeAttrValue,c=s.escapeHtml,M=t.attributeWrapSign,w=t.cssFilter;s.stripBlankChar&&(e=yo.stripBlankChar(e)),s.allowCommentTag||(e=yo.stripCommentTag(e));var u=!1;s.stripIgnoreTagBody&&(u=yo.StripTagBody(s.stripIgnoreTagBody,r),r=u.onIgnoreTag);var d=Io(e,function(e,t,s,u,d){var y={sourcePosition:e,position:t,isClosing:d,isWhite:Object.prototype.hasOwnProperty.call(n,s)},L=i(s,u,y);if(!mo(L))return L;if(y.isWhite){if(y.isClosing)return"</"+s+">";var I=function(e){var t=go.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var s="/"===(e=go.trim(e.slice(t+1,-1)))[e.length-1];return s&&(e=go.trim(e.slice(0,-1))),{html:e,closing:s}}(u),D=n[s],g=Do(I.html,function(e,t){var n=-1!==go.indexOf(D,e),i=a(s,e,t,n);return mo(i)?n?(t=l(s,e,t,w))?e+"="+M+t+M:e:mo(i=o(s,e,t,n))?void 0:i:i});return u="<"+s,g&&(u+=" "+g),I.closing&&(u+=" /"),u+=">"}return mo(L=r(s,u,y))?c(u):L},c);return u&&(d=u.remove(d)),d};var ho=po;!function(e,t){var s=pa,n=no,i=ho;function r(e,t){return new i(t).process(e)}(t=e.exports=r).filterXSS=r,t.FilterXSS=i,function(){for(var e in s)t[e]=s[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)}(ma,ma.exports);var Co=Kt(ma.exports);function fo(){return"undefined"!=typeof self?self:"undefined"!=typeof window&&void 0!==window.document?window:"undefined"!=typeof global?global:null}function No(e){let t=function(){let e=fo();return Co||e.xss}();let s=function e(s){return rs(s)||$e(s)?(js(s,function(t,n){s[n]=e(t)}),s):Fe(s)?t(s,{onIgnoreTagAttr:function(e,s,n,i){if("style"===s)return s+'="'+t.escapeAttrValue(n)+'"'}}):s}(ra(e));return s}let bo=null,To=null;function xo(e,t,s,n="save"){if(!_e(bo))throw console.log("ds",bo),new Error("invalid ds");let i=bo[e].keys,r=!1;rs(s)||(r=!0,s=[s]);let a=ga();return n.indexOf("insert")>=0&&(i.indexOf("userId")>=0&&js(s,(e,n)=>{s[n].userId=t}),i.indexOf("timeCreate")>=0&&js(s,(e,t)=>{s[t].timeCreate=a}),i.indexOf("userIdUpdate")>=0&&js(s,(e,n)=>{s[n].userIdUpdate=t}),i.indexOf("timeUpdate")>=0&&js(s,(e,t)=>{s[t].timeUpdate=a})),(n.indexOf("insert")>=0||n.indexOf("save")>=0)&&(i.indexOf("userIdUpdate")>=0&&js(s,(e,n)=>{s[n].userIdUpdate=t}),i.indexOf("timeUpdate")>=0&&js(s,(e,t)=>{s[t].timeUpdate=a})),s=di(s,(e,t)=>{let s={};return js(e,(e,t)=>{e=No(e),s[t]=e}),s}),s=r?s[0]:s}async function So(e,t,s,n){let i,r=null;if(!_e(To))return Promise.reject("無有效woItems");let a=Le(To,t,null);if(null===a)return Promise.reject(`ORM找不到表名稱: ${t}`);if("select"===s){if(i=await a.select(n).catch(e=>{console.log(`${t}.select catch`,e),r="取得資料失敗"}),Fe(r))return Promise.reject(r)}else if("insert"===s||"save"===s){try{n=xo(t,e,n,s)}catch(e){return console.log("adjustData catch",e.toString()),r="調整資料失敗",Promise.reject(r)}if("insert"===s?i=await a.insert(n).catch(e=>{console.log(`${t}.save catch`,e),r="新增資料失敗"}):"save"===s&&(i=await a.save(n).catch(e=>{console.log(`${t}.save catch`,e),r="儲存資料失敗"})),Fe(r))return Promise.reject(r);i=rs(n)?di(n,e=>({id:e.id})):{id:n.id}}else if("del"===s)i=await a.del(n).catch(e=>{console.log(`${t}.del catch`,e),r="刪除資料失敗"});else if("delAll"===s)i=await a.delAll(n).catch(e=>{console.log(`${t}.delAll catch`,e),r="刪除資料失敗"});else if("mix"===s){if(!_e(n))return Promise.reject("mix僅支援輸入ltdtDiffByKey結果物件");let s;i=[];let o=Le(n,"add",[]);if(zn(o)>0){try{o=xo(t,e,o,"insert+save")}catch(e){return console.log("adjustData catch",e.toString()),r="調整資料失敗",Promise.reject(r)}if(await a.insert(o).catch(e=>{console.log(`${t}.save catch`,e),r="新增資料失敗"}),Fe(r))return Promise.reject(r);s=di(o,e=>({id:e.id})),i=[...i,...s]}let l=Le(n,"del",[]);if(zn(l)>0){if(await a.del(l).catch(e=>{console.log(`${t}.save catch`,e),r="刪除資料失敗"}),Fe(r))return Promise.reject(r);s=di(l,e=>({id:e.id})),i=[...i,...s]}let c=Le(n,"diff",[]);if(zn(c)>0){try{c=xo(t,e,c)}catch(e){return console.log("adjustData catch",e.toString()),r="調整資料失敗",Promise.reject(r)}if(await a.save(c).catch(e=>{console.log(`${t}.save catch`,e),r="變更資料失敗"}),Fe(r))return Promise.reject(r);s=di(c,e=>({id:e.id})),i=[...i,...s]}}else r=`invalid mode: ${s}`;return Fe(r)?Promise.reject(r):i}function Zo(e,t){return bo=e,To=t,So}function Xo(e,t){var s=[];return zs(e,function(e,n,i){t(e,n,i)&&s.push(e)}),s}function Yo(e,t){return(M(e)?Rn:Xo)(e,wi(t))}function Ao(e,t=null){if(!rs(e)){let e=Et();return e.reject("pms is not an array"),e}return e.reduce((e,t)=>e.then(t),Promise.resolve(t))}let zo=[],Eo=[],jo=[],vo=null,Go=null,Ko=!0,Wo=!0;function ko(e){setTimeout(()=>{zo.push(e)},1)}function Uo(e){setTimeout(()=>{Eo.push(e)},1)}function Vo(e){setTimeout(()=>{jo.push(e)},1)}async function Qo(e,t,s,n){if(!Zt(vo))return Promise.reject("invalid mapOrm");if(Ko&&!Fe(e))return console.log("userId",e),console.log("找不到使用者主鍵"),Promise.reject("找不到使用者主鍵");let i="n";if(Ko){if(!Zt(Go))return Promise.reject("invalid getUserById");let t=await Go(e);if(!t)return console.log("userId",e),console.log("找不到使用者資訊"),Promise.reject("找不到使用者資訊");i=Le(t,"isAdmin"),"y"!==i&&"n"!==i&&(i="n");let s=Le(t,"isActive");if("y"!==s&&"n"!==s&&(s="n"),"y"!==s)return console.log("userId",e),console.log("oSelf",t),console.log("使用者被停權或無有效使用者資訊"),Promise.reject("使用者被停權或無有效使用者資訊")}if(await Ia(zo,r=>r({woName:t,userId:e,isAdmin:i,mode:s,input:n})),zn(Eo)>0){let r={woName:t,userId:e,isAdmin:i,mode:s,input:n},a=await Ao(Eo,r);n=a.input}let r=await vo(e,t,s,n);return Wo&&"n"===i&&"select"===s&&rs(r)&&(r=Yo(r,e=>!Jt(e,"isActive")||!("n"===e.isActive))),zn(jo)>0&&(r=await Ao(jo,{woName:t,userId:e,isAdmin:i,mode:s,input:n,output:r})),r}function Ho(e,t,s,n,i={}){let r=function(e,t,s,n){if(!_e(e))throw console.log("ds",e),new Error("invalid ds");if(!Zt(t))throw console.log("WOrm",t),new Error("invalid WOrm");if(!Fe(s))throw console.log("url",s),new Error("invalid url");if(!Fe(n))throw console.log("db",n),new Error("invalid db");let i={};return js(Re(e),e=>{let r=new t({url:s,db:n,cl:e});i[e]=r}),i}(e,t,s,n),a=function(e,t={}){return Zt(e)?(vo=e,Ko=Le(t,"useCheckUser"),Pe(Ko)||(Ko=!0),Go=Le(t,"getUserById"),Wo=Le(t,"useExcludeWhenNotAdmin"),Pe(Wo)||(Wo=!0),{addFunCheck:ko,addFunPreProcessing:Uo,addFunPostProcessing:Vo,procOrm:Qo}):Promise.reject("invalid mapOrm")}(Zo(e,r),i);return{...Da,woItems:r,closeAll:async()=>{await Ia(r,async e=>{e&&Zt(e.close)&&await e.close()})},...a}}let Jo={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-US",cht:"zh-TW"},id:{eng:"ID",cht:"主鍵"},systemMessage:{eng:"System message",cht:"系統確認訊息"},ok:{eng:"OK",cht:"確認"},no:{eng:"No",cht:"取消"},yes:{eng:"Yes",cht:"確定"},saveChanges:{eng:"Save changes",cht:"儲存變更"},close:{eng:"Close",cht:"關閉"},cancel:{eng:"Cancel",cht:"取消"},processing:{eng:"Processing...",cht:"處理中請稍後..."},waitingData:{eng:"Waiting data...",cht:"等待數據中..."},anUnexpectedErrorOccurred:{eng:"An unexpected error occurred, please contact the administrator",cht:"發生非預期錯誤,請洽管理員"},getDataError:{eng:"Failed to get data, please try again later",cht:"取得數據失敗,請稍後再試"},logout:{eng:"Log out",cht:"登出"},settings:{eng:"Settings",cht:"設定"},showArchived:{eng:"Show archived",cht:"顯示封存"},timeCreate:{eng:"Created time",cht:"創建時間"},timeUpdate:{eng:"Updated time",cht:"最新變更時間"},errUserIdMissing:{eng:"Can not get the user id",cht:"無法取得使用者主鍵"},errUserEmailMissing:{eng:"Can not get the email of user",cht:"無法取得使用者電子郵件"},errUserNameMissing:{eng:"Can not get the name of user",cht:"無法取得使用者名稱"},errUserRoleMissing:{eng:"Can not get the role of user",cht:"無法取得使用者角色"},errUserNoPermission:{eng:"User does not have permission",cht:"使用者無權限"},errUserNotFound:{eng:"Can not find the user",cht:"查無使用者"},errTokenNoPermission:{eng:"Token does not have permission",cht:"權杖無存取權限"},errPayloadInvalid:{eng:"Invalid payload",cht:"請求內容格式錯誤"},errChannelIdInvalid:{eng:"Invalid channel id",cht:"頻道主鍵無效"},errChannelRowInvalid:{eng:"Invalid channel data",cht:"頻道數據無效"},errMemberRowInvalid:{eng:"Invalid member data",cht:"成員數據無效"},errMemberIdInvalid:{eng:"Invalid member id",cht:"成員主鍵無效"},errContentInvalid:{eng:"Invalid message content",cht:"訊息內容無效"},errFileRowInvalid:{eng:"Invalid file data",cht:"檔案數據無效"},errUploadInvalid:{eng:"Invalid upload data",cht:"上傳數據無效"},errFileIdInvalid:{eng:"Invalid file id",cht:"檔案主鍵無效"},errFileNotFound:{eng:"Can not find the file",cht:"查無檔案"},errTaskIdInvalid:{eng:"Invalid task id",cht:"任務主鍵無效"},errTaskNotFound:{eng:"Can not find the task",cht:"查無任務"},errTaskAlreadyClaimed:{eng:"This task has already been claimed",cht:"此任務已被認領"},errTaskNotRunning:{eng:"This task is not in running state",cht:"此任務非執行中狀態"},errTaskNotResettable:{eng:"This task can not be reset",cht:"此任務無法重置"},errTaskExternalServiceUnavailable:{eng:"External service is temporarily unavailable",cht:"外部服務暫時無法使用"},errResultInvalid:{eng:"Invalid task result",cht:"任務回應內容無效"},errStateInvalid:{eng:"Invalid task state",cht:"任務狀態無效"},errLastMessageIdInvalid:{eng:"Invalid last message id",cht:"已讀訊息主鍵無效"},saveInProgress:{eng:"The previous save is still in progress. Please do not submit again.",cht:"上一次儲存仍在處理中,請勿重複送出"},deleteInProgress:{eng:"The previous deletion is still in progress. Please do not submit again.",cht:"上一次刪除仍在處理中,請勿重複送出"},sendInProgress:{eng:"The previous message is still being sent. Please do not submit again.",cht:"上一則訊息仍在送出中,請勿重複送出"},channelName:{eng:"Channel name",cht:"頻道名稱"},channelDescription:{eng:"Channel description",cht:"頻道描述"},channelAgentId:{eng:"Agent id",cht:"主責agent識別碼"},channelOwnerId:{eng:"Owner id",cht:"建立者"},addChannel:{eng:"Add channel",cht:"新增頻道"},deleteChannel:{eng:"Delete channel",cht:"刪除頻道"},saveChannelSuccess:{eng:"Channel saved successfully",cht:"頻道儲存成功"},saveChannelFail:{eng:"Failed to save channel",cht:"頻道儲存失敗"},deleteChannelSuccess:{eng:"Channel deleted successfully",cht:"頻道刪除成功"},deleteChannelFail:{eng:"Failed to delete channel",cht:"頻道刪除失敗"},channelMembers:{eng:"Channel members",cht:"頻道成員"},memberId:{eng:"Member id",cht:"成員識別碼"},memberType:{eng:"Member type",cht:"成員類型"},memberRole:{eng:"Role",cht:"角色"},memberLastSeen:{eng:"Last seen message",cht:"已讀訊息水位"},addMember:{eng:"Add member",cht:"新增成員"},deleteMember:{eng:"Delete member",cht:"刪除成員"},saveMemberSuccess:{eng:"Member saved successfully",cht:"成員儲存成功"},saveMemberFail:{eng:"Failed to save member",cht:"成員儲存失敗"},deleteMemberSuccess:{eng:"Member deleted successfully",cht:"成員刪除成功"},deleteMemberFail:{eng:"Failed to delete member",cht:"成員刪除失敗"},postMessageSuccess:{eng:"Message posted successfully",cht:"訊息傳送成功"},postMessageFail:{eng:"Failed to post message",cht:"訊息傳送失敗"},inputMessage:{eng:"Type a message...",cht:"輸入訊息..."},taskTitle:{eng:"Task title",cht:"任務標題"},taskPayload:{eng:"Task payload",cht:"任務需求內容"},taskState:{eng:"State",cht:"狀態"},taskAssignee:{eng:"Assignee",cht:"認領者"},taskResult:{eng:"Result",cht:"任務回應內容"},taskStatePending:{eng:"Pending",cht:"待認領"},taskStateRunning:{eng:"Running",cht:"執行中"},taskStateDone:{eng:"Done",cht:"已完成"},taskStateError:{eng:"Error",cht:"失敗"},respondTask:{eng:"Respond task",cht:"回應任務"},resetTask:{eng:"Retry task",cht:"重試任務"},respondTaskSuccess:{eng:"Task responded successfully",cht:"任務回應成功"},respondTaskFail:{eng:"Failed to respond task",cht:"任務回應失敗"},resetTaskSuccess:{eng:"Task reset successfully",cht:"任務重置成功"},resetTaskFail:{eng:"Failed to reset task",cht:"任務重置失敗"},cannotConnectServer:{eng:"Unable to connect to the server, please try again later",cht:"無法連線至伺服器,請稍後再試"},mmChannels:{eng:"Channels",cht:"頻道管理"},mmChannelsMsg:{eng:"Manage channels for conversations and tasks.",cht:"管理用於對話與任務的頻道。"},mmConversation:{eng:"Conversation",cht:"頻道對話"},mmConversationMsg:{eng:"View channel messages, send messages or open them as tasks.",cht:"檢視頻道訊息、發送訊息或將訊息開成任務。"},mmTasks:{eng:"Tasks",cht:"任務檢視"},mmTasksMsg:{eng:"View tasks and their responses, retry or respond manually.",cht:"檢視任務與其回應,可重試或人工代回。"},modeEdit:{eng:"Edit mode",cht:"編輯模式"},menuTreeShow:{eng:"Show menu",cht:"顯示選單"},menuTreeHide:{eng:"Hide menu",cht:"隱藏選單"},logoutConfirm:{eng:"Are you sure you want to log out?",cht:"確定要登出嗎?"},channelsEmpty:{eng:"No channels yet",cht:"目前尚無頻道"},channelNameEmpty:{eng:"Channel name can not be empty",cht:"頻道名稱不可為空"},channelNameDuplicate:{eng:"Channel name is duplicated",cht:"頻道名稱重複"},channelNameInvalid:{eng:"Please correct the channel name first",cht:"請先修正頻道名稱"},deleteChannelConfirm:{eng:"Are you sure you want to delete the selected channels?",cht:"確定要刪除所選頻道嗎?"},selectChannel:{eng:"Channel",cht:"頻道"},selectChannelFirst:{eng:"Please select a channel first",cht:"請先選擇頻道"},conversationEmpty:{eng:"No messages in this channel yet",cht:"此頻道尚無訊息"},openAsTask:{eng:"Open as task",cht:"開成任務"},taskTitlePlaceholder:{eng:"Task title (optional, defaults to first line)",cht:"任務標題(選填,預設取首行)"},sendMessage:{eng:"Send",cht:"送出"},messageContentEmpty:{eng:"Message content can not be empty",cht:"訊息內容不可為空"},senderHuman:{eng:"Human",cht:"人類"},senderAgent:{eng:"Agent",cht:"Agent"},kindText:{eng:"Text",cht:"對話"},kindTask:{eng:"Task",cht:"任務"},kindTaskReply:{eng:"Task reply",cht:"任務回應"},tasksEmpty:{eng:"No tasks in this channel yet",cht:"此頻道尚無任務"},taskTimeDone:{eng:"Done time",cht:"結束時間"},taskErrorKey:{eng:"Error key",cht:"錯誤鍵"},resetTaskConfirm:{eng:"Are you sure you want to retry this task?",cht:"確定要重試此任務嗎?"},respondTaskInputLabel:{eng:"Respond on behalf (manual)",cht:"人工代回內容"},respondTaskPlaceholder:{eng:"Enter the task result (markdown supported)...",cht:"輸入任務回應內容(支援 markdown)..."},respondTaskSubmit:{eng:"Submit response",cht:"送出回應"},respondTaskResultEmpty:{eng:"Response content can not be empty",cht:"回應內容不可為空"},mmStats:{eng:"Stats",cht:"統計"},mmAdmin:{eng:"Admin",cht:"後台"},mmMembers:{eng:"Members",cht:"成員"},searchChannelPlaceholder:{eng:"Search channels / projects...",cht:"搜尋頻道 / 專案…"},uncategorized:{eng:"Uncategorized",cht:"未分類"},channelTreeEmpty:{eng:"No channels match",cht:"無符合的頻道"},agentOnline:{eng:"Agent online",cht:"agent 在線"},selectChannelToStart:{eng:"Select a channel from the left to start",cht:"請從左側選擇一個頻道開始"},timelineEmpty:{eng:"No messages in this channel yet",cht:"此頻道尚無訊息"},today:{eng:"Today",cht:"今天"},noAgentAssigned:{eng:"No agent assigned",cht:"未指派 agent"},composerPlaceholder:{eng:"Type a message... Paste images directly (Enter to send, Shift+Enter for newline)",cht:"輸入訊息… 可直接貼上多張圖片 (Enter 發送,Shift+Enter 換行)"},composerHint:{eng:"Enter to send",cht:"Enter 發送"},attachImage:{eng:"Attach image",cht:"附加圖片"},removeImage:{eng:"Remove image",cht:"移除圖片"},uploadImageFail:{eng:"Failed to upload image",cht:"圖片上傳失敗"},viewImage:{eng:"View image",cht:"檢視圖片"},statChannels:{eng:"Channels",cht:"頻道數"},statMessages:{eng:"Messages",cht:"訊息數"},statTasks:{eng:"Tasks",cht:"任務總數"},statPending:{eng:"Pending",cht:"待處理"},statRunning:{eng:"Running",cht:"處理中"},statDone:{eng:"Done",cht:"已完成"},statError:{eng:"Error",cht:"失敗"},statsOverview:{eng:"Overview",cht:"系統概況"},statTaskBreakdown:{eng:"Task breakdown",cht:"任務狀態分布"},channelLevels:{eng:"Levels",cht:"階層"},selectChannelForMembers:{eng:"Select a channel to manage members",cht:"選擇頻道以管理成員"},memberHuman:{eng:"Human",cht:"人類"},memberAgent:{eng:"Agent",cht:"Agent"},membersEmpty:{eng:"No members in this channel yet",cht:"此頻道尚無成員"},deleteMemberConfirm:{eng:"Are you sure you want to delete the selected members?",cht:"確定要刪除所選成員嗎?"}},Ro=(e={})=>{let t=Le(e,"kpLangExt");_e(t)||(t={});let s=Le(e,"webName");_e(s)||(s={});let n=Le(e,"webDescription");_e(n)||(n={});let i={};i={...i,...Jo},_e(t)&&(i={...i,...t}),_e(s)&&(i={...i,webName:{...s}}),_e(n)&&(i={...i,webDescription:{...n}});let r={};return js(["eng","cht"],e=>{let t={};js(i,(s,n)=>{t[n]=s[e]}),r[e]=t}),r};function Po(e,t,s,n){if(!x(e))return e;for(var i=-1,r=(t=ue(t,e)).length,a=r-1,o=e;null!=o&&++i<r;){var l=de(t[i]),c=s;if("__proto__"===l||"constructor"===l||"prototype"===l)return e;if(i!=a){var M=o[l];void 0===(c=n?n(M,l,o):void 0)&&(c=x(M)?M:xe(t[i+1])?[]:{})}Nr(o,l,c),o=o[l]}return e}function Oo(e,t){return function(e,t,s){for(var n=-1,i=t.length,r={};++n<i;){var a=t[n],o=ye(e,a);s(o,a)&&Po(r,ue(a,e),o)}return r}(e,t,function(t,s){return ci(e,s)})}var Fo=y?y.isConcatSpreadable:void 0;function Bo(e){return M(e)||he(e)||!!(Fo&&e&&e[Fo])}function $o(e,t,s,n,i){var r=-1,a=e.length;for(s||(s=Bo),i||(i=[]);++r<a;){var o=e[r];t>0&&s(o)?t>1?$o(o,t-1,s,n,i):Hn(i,o):n||(i[i.length]=o)}return i}function _o(e){return(null==e?0:e.length)?$o(e,1):[]}var qo=function(e){return Gr(Ar(e,void 0,_o),e+"")}(function(e,t){return null==e?{}:Oo(e,t)}),el=qo;function tl(e){if(Pe(e))return e;if(0===e)return!1;if(1===e)return!0;let t=!1;return Fe(e)&&"true"===(e=we(Xi(e)).toLowerCase())&&(t=!0),t}let sl="./dbf";let nl=o.fileURLToPath("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(nl).href:"undefined"==typeof document?location.href:c&&"SCRIPT"===c.tagName.toUpperCase()&&c.src||new URL("w-web-task.umd.js",document.baseURI).href),il=e.dirname(nl);let rl=(s={})=>{let n=Le(s,"logFd","");Fe(n)||(n="./logs");let i=Le(s,"logInterval","");Fe(i)||(i="hr");let r=function(s={}){let n=Vt(),i=Le(s,"timeZone",null),r=Le(s,"fdLog");Fe(r)||(r="./_logs");let a=Le(s,"interval");"day"!==a&&"hr"!==a&&(a="day");let o=Le(s,"numKeep");mt(o)||(o="day"===a?365:8760),o=gt(o);let c=l.transport({targets:[{level:"info",target:e.resolve(il,"./formatter.mjs"),options:{interval:a,fdLog:r,timeZone:i}}]}),M=l(c),w=()=>{try{if(!Ft(r))return;let s="hr"===a?/^\d{4}-\d{2}-\d{2}T\d{2}\.log$/:/^\d{4}-\d{2}-\d{2}\.log$/,i=t.readdirSync(r).filter(e=>s.test(e));i.sort();let l=i.length-o;if(l<=0)return;let c=i.slice(0,l);for(let s of c){let i=e.join(r,s);try{t.unlinkSync(i),n.emit("delete",{fp:i,fn:s})}catch(e){}}}catch(e){console.error("WSyslog cleanLogs error:",e)}};w();let u=setInterval(w,36e5);u.unref();let d=null,y=e=>{let t=M[e].bind(M);return(...s)=>{try{n.emit(e,{args:s})}catch(e){}t(...s)}};return n.fatal=y("fatal"),n.error=y("error"),n.warn=y("warn"),n.info=y("info"),n.debug=y("debug"),n.trace=y("trace"),n.cleanLogs=w,n.clear=(e={})=>{if(null!==d)return d;let t=Le(e,"timeLimit");mt(t)||(t=6e4),d=Et();let s=!1,n=()=>{s||(s=!0,clearInterval(u),d.resolve())},i=setTimeout(()=>{try{c.worker.terminate()}catch(e){}n()},t);try{M.flush(e=>{if(e||c.closed)return clearTimeout(i),void n();c.once("close",()=>{clearTimeout(i),n()}),c.end()})}catch(e){clearTimeout(i),n()}return d},n}({fdLog:n,interval:i});return r},al=e=>e.split("").map(e=>{let t=e.charCodeAt(0);return t<=31||127===t?"?":e}).join(""),ol=e=>{if(null==e||""===e)return"";if(rs(e))return e.map(ol);if("string"!=typeof e)return`(${typeof e})`;let t=e.length,s=Math.min(4,Math.floor(t/8));return 0===s?`(len=${t})`:`${al(e.slice(0,s))}...${al(e.slice(t-s))}(len=${t})`},ll=["invalidUrl","invalidTokenSelf","invalidTokenTar","invalidUserIdTar","noTokenKeyValueInUrl","noTokenKeyUserIdInUrl","noTokenInUrl","cannotGetUserByUrl","cannotGetUsersByUrl","cannotGetUserDataByUrl","cannotGetUsersDataByUrl","noUserDataByUrl","noUsersDataByUrl","noUserDataAfterConvert"],cl=/^[A-Za-z]{1,40}$/,Ml=(e,t={})=>{if(!Zt(e))throw new Error("invalid fn");let s=t&&"failValue"in t?t.failValue:null,n=t?t.onFail:null;return async(...t)=>{try{return await e(...t)}catch(e){if(Zt(n))try{n((e=>{try{let t=St(e)?e.message:e;if(Fe(t)&&ll.includes(t))return{upstream:t};let s="",n="";if(null===e)s="null";else if(rs(e))s="array";else if(St(e)){s="error";let t=e.name;"string"==typeof t&&cl.test(t)&&(n=t)}else s=typeof e;return{upstreamType:s,upstreamName:n}}catch(e){return{upstreamType:"unknown",upstreamName:""}}})(e))}catch(e){}return s}}};const wl=[];for(let e=0;e<256;++e)wl.push((e+256).toString(16).slice(1));const ul=new Uint8Array(16);function dl(){return crypto.getRandomValues(ul)}const yl={};function Ll(e,t,s){let n;if(e)n=Il(e.random??e.rng?.()??dl(),e.msecs,e.seq,t,s);else{const e=Date.now(),i=dl();!function(e,t,s){e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=Dl(s),e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++)}(yl,e,i),n=Il(i,yl.msecs,yl.seq,t,s)}return t??function(e,t=0){return(wl[e[t+0]]+wl[e[t+1]]+wl[e[t+2]]+wl[e[t+3]]+"-"+wl[e[t+4]]+wl[e[t+5]]+"-"+wl[e[t+6]]+wl[e[t+7]]+"-"+wl[e[t+8]]+wl[e[t+9]]+"-"+wl[e[t+10]]+wl[e[t+11]]+wl[e[t+12]]+wl[e[t+13]]+wl[e[t+14]]+wl[e[t+15]]).toLowerCase()}(n)}function Il(e,t,s,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(),s??=Dl(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|s>>>28&15,n[i++]=s>>>20&255,n[i++]=128|s>>>14&63,n[i++]=s>>>6&255,n[i++]=s<<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 Dl(e){return(127&e[6])<<24|e[7]<<16|e[8]<<8|e[9]}function gl(){return Ll()}function ml(e,t,s=""){if(!Ms(t))return{};let n={};return js(t,function(t){n[t]=Le(e,t,s)}),n}let pl={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"頻道名稱",type:"STRING"},description:{name:"頻道描述",type:"TEXT"},agentId:{name:"主責agent識別碼",type:"STRING"},levels:{name:"階層",type:"STRING"},ownerId:{name:"建立者",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},hl={keyTable:"channels",tableNameCht:"頻道",tableNameEng:"Channels",settings:pl,funNew:(e={})=>{let t=ml(e,Re(pl));return t.id=`${gl()}`,t.timeCreate=ga(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t},funTest:()=>[]},Cl={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},channelId:{name:"頻道主鍵",type:"STRING"},memberId:{name:"成員識別碼",type:"STRING"},memberType:{name:"成員類型",type:"STRING"},role:{name:"角色",type:"STRING"},lastSeenMessageId:{name:"已讀訊息水位",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},fl={keyTable:"channelMembers",tableNameCht:"頻道成員",tableNameEng:"ChannelMembers",settings:Cl,funNew:(e={})=>{let t=ml(e,Re(Cl));return t.id=`${gl()}`,t.timeCreate=ga(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t.memberType=Fe(t.memberType)?t.memberType:"human",t.role=Fe(t.role)?t.role:"member",t},funTest:()=>[]},Nl={id:{pk:!0,name:"主鍵",type:"STRING"},channelId:{name:"頻道主鍵",type:"STRING"},senderId:{name:"發送者識別碼",type:"STRING"},senderType:{name:"發送者類型",type:"STRING"},kind:{name:"訊息類型",type:"STRING"},content:{name:"訊息內容",type:"TEXT"},taskId:{name:"任務主鍵",type:"STRING"},attachments:{name:"附件檔案清單",type:"TEXT"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},bl={keyTable:"messages",tableNameCht:"對話訊息",tableNameEng:"Messages",settings:Nl,funNew:(e={})=>{let t=ml(e,Re(Nl));return t.id=`${gl()}`,t.timeCreate=ga(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t.kind=Fe(t.kind)?t.kind:"text",t.senderType=Fe(t.senderType)?t.senderType:"human",t.attachments=Fe(t.attachments)?t.attachments:"[]",t},funTest:()=>[]},Tl={...bl,keyTable:"messagesArchive",tableNameCht:"訊息(封存)",tableNameEng:"MessagesArchive"},xl={id:{pk:!0,name:"主鍵",type:"STRING"},channelId:{name:"頻道主鍵",type:"STRING"},messageId:{name:"起源訊息主鍵",type:"STRING"},title:{name:"任務標題",type:"STRING"},payload:{name:"任務需求內容",type:"TEXT"},state:{name:"狀態",type:"STRING"},assigneeId:{name:"認領agent識別碼",type:"STRING"},result:{name:"任務回應內容",type:"TEXT"},errorKey:{name:"錯誤鍵",type:"STRING"},resultMessageId:{name:"回應訊息主鍵",type:"STRING"},timeClaim:{name:"認領時間",type:"STRING"},timeDone:{name:"結束時間",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},Sl={keyTable:"tasks",tableNameCht:"任務",tableNameEng:"Tasks",settings:xl,funNew:(e={})=>{let t=ml(e,Re(xl));return t.id=`${gl()}`,t.timeCreate=ga(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t.state=Fe(t.state)?t.state:"pending",t},funTest:()=>[]},Zl={...Sl,keyTable:"tasksArchive",tableNameCht:"任務(封存)",tableNameEng:"TasksArchive"},Xl={id:{pk:!0,name:"主鍵",type:"STRING"},name:{name:"原始檔名",type:"STRING"},type:{name:"MIME類型",type:"STRING"},size:{name:"檔案大小",type:"INTEGER"},ext:{name:"副檔名",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}};function Yl(e,t={}){let s=Le(t,"useCreateStorage");Pe(s)||(s=!1);let{keyTable:n,tableNameCht:i,tableNameEng:r,settings:a,parser:o,funNew:l,funTest:c,ext:M}=e;if(!Fe(n))throw new Error(`invalid keyTable[${n}]`);if(Fe(i)||(i=n),Fe(r)||(r=n),!_e(a))throw new Error("invalid settings");_e(M)||(M=null),_e(o)||(o=null),Zt(l)||(l=null);let w=null;Zt(c)&&(w=async e=>{if(!_e(e))throw new Error("invalid wo");if(!Jt(e,n))throw console.log(e),new Error(`keyTable[${n}] is not in wo`);let t=[];try{t=c(),Xt(t)&&(t=await t)}catch(e){throw console.log(`keyTable[${n}] funTest catch`,e),new Error(e)}if(0!==zn(t))return s&&await e[n].createStorage(),await e[n].save(t),t});let u={},d={};return js(Re(a),e=>{let t=Le(a,`${e}.name`,"");Fe(t)&&(u[e]=t);let s=Le(a,`${e}.type`,"");Fe(s)&&(d[e]=s)}),{...e,keyTable:n,tableNameCht:i,tableNameEng:r,settings:a,keys:Re(a),kpType:d,kpHead:u,parser:o,funNew:l,funTest:c,funTestAndSave:w,ext:M}}let Al={channels:hl,channelMembers:fl,messages:bl,messagesArchive:Tl,tasks:Sl,tasksArchive:Zl,files:{keyTable:"files",tableNameCht:"圖台檔案",tableNameEng:"Files",settings:Xl,funNew:(e={})=>{let t=ml(e,Re(Xl));return t.id=`${gl()}`,t.timeCreate=ga(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t},funTest:()=>[]}},zl={};for(let e in Al)zl[e]=Yl(Al[e],{useCreateStorage:!1});return function(s,n,i,r,a,o,l={}){let c=null;if(!Zt(s))throw console.log("invalid WOrm",s),new Error("invalid WOrm");if(!Fe(n))throw console.log("invalid url",n),new Error("invalid url");if(!Fe(i))throw console.log("invalid db",i),new Error("invalid db");if(!Zt(r))throw console.log("invalid getUserByToken",r),new Error("invalid getUserByToken");if(!Zt(a))throw console.log("invalid verifyClientUser",a),new Error("invalid verifyClientUser");if(!Zt(o))throw console.log("invalid verifyAppUser",o),new Error("invalid verifyAppUser");let M=Le(l,"serverPort");mt(M)||(M=11008),M=gt(M);let w=Le(l,"useCheckUser",!1),u=Le(l,"getUserById",null),d=Le(l,"useExcludeWhenNotAdmin",!1),y=Le(l,"webName",{}),L=Le(l,"webDescription",{}),I=Le(l,"webLogo",""),D=Le(l,"subfolder","");var g,m;Fe(D)&&("/"===zt(D,1)&&(m=1,D=Fe(g=D)&&Yt(m)?0===(m=gt(m))?g:At(g,g.length-m):""),"/"!==At(D,1)&&(D=`/${D}`));let p=Le(l,"urlRedirect",""),h=Le(l,"showLanguage","y"),C=Le(l,"language","eng");Le(l,"logFd","./logs");let f=Le(l,"kpLangExt",{}),N=Ro({kpLangExt:f,webName:y,webDescription:L}),b=rl(l),T=e=>t=>{b.warn({event:`inject-${e}-fail`,...t})};r=Ml(r,{failValue:null,onFail:T("getUserByToken")}),a=Ml(a,{failValue:!1,onFail:T("verifyClientUser")}),o=Ml(o,{failValue:!1,onFail:T("verifyAppUser")}),Zt(u)&&(u=Ml(u,{failValue:null,onFail:T("getUserById")}));let x={useCheckUser:w,getUserById:u,useExcludeWhenNotAdmin:d},S={};try{S=Ho(zl,s,n,i,x)}catch(e){throw console.log("WServOrm init failed",e),e}let{woItems:Z,procOrm:X}=S,Y=async(e,t)=>{let s=await jt(t)();return St(s.msg)&&(s.msg=s.msg.message),"success"!==s.state&&b.error({event:"api/"+e,err:s.msg}),s},A=(e,t)=>{let s="kpfun-"+e;return async(...e)=>{try{let n=await t(...e);return b.info({event:s}),n}catch(e){return b.error({event:s,err:e}),Promise.reject(e)}}},z=new function(){let e=new Map,t=new Map;return async(s,n)=>{let i=(e.get(s)||Promise.resolve()).then(async()=>await n(),async()=>await n());e.set(s,i.catch(()=>{})),t.set(s,(t.get(s)||0)+1);try{return await i}finally{let n=t.get(s)-1;n<=0?(t.delete(s),e.delete(s)):t.set(s,n)}}},E=function(e){return async(t,s,n,i={})=>{let r=Le(i,"errKey","");Fe(r)||(r="saveInProgress");let a=`${t}:${s}`;return await e.setWithFree([a],n).catch(e=>e===`setWithFree: key in use: ${a}`?Promise.reject(r):Promise.reject(e))}}(Rt()),j=function(s={}){let{woItems:n,procOrm:i,ds:r,srLog:a,kmx:o,lockSave:l}=s;t.existsSync(sl)||t.mkdirSync(sl,{recursive:!0});let c=async(e,t)=>{if(!Fe(t))return Promise.reject("errFileIdInvalid");let s=Le(await n.files.select({id:t}),"0");return _e(s)?s:Promise.reject("errFileNotFound")};return{getChannelsList:async(e,t="")=>{let s=await n.channels.select({isActive:"y"});if(Fe(t)&&t){s=Yo(s,e=>e.agentId===t);let i=await n.channelMembers.select({memberId:e,isActive:"y"}),r={};for(let e of i)r[e.channelId]=Le(e,"lastSeenMessageId","");for(let e of s)e.lastSeenMessageId=r[e.id]||""}return s},saveChannel:async(e,t)=>{if(!_e(t))return Promise.reject("errChannelRowInvalid");let s=Fe(t.id)?t.id:Le(t,"name","");return await l("saveChannel",`${e}:${s}`,async()=>{let s,i;if(Fe(t.id)){let a=el(t,r.channels.keys);a.id=t.id,a.timeUpdate=ga(),a.userIdUpdate=e,s=await n.channels.save([a]),i=t.id}else{let a=r.channels.funNew({...t,userId:e});s=await n.channels.insert(a),i=a.id}return Fe(t.agentId)&&t.agentId&&await o(`channelMember:${i}:${t.agentId}`,async()=>{if(!_e(Le(await n.channelMembers.select({channelId:i,memberId:t.agentId,isActive:"y"}),"0"))){let s=r.channelMembers.funNew({channelId:i,memberId:t.agentId,memberType:"agent",userId:e});await n.channelMembers.insert(s)}}),s})},deleteChannel:async(e,t)=>Fe(t)?await l("deleteChannel",`${e}:${t}`,async()=>await n.channels.del({id:t}),{errKey:"deleteInProgress"}):Promise.reject("errChannelIdInvalid"),getChannelMembers:async(e,t)=>Fe(t)?await n.channelMembers.select({channelId:t,isActive:"y"}):Promise.reject("errChannelIdInvalid"),saveChannelMember:async(e,t)=>{if(!_e(t))return Promise.reject("errMemberRowInvalid");let s=Fe(t.id)?t.id:`${Le(t,"channelId","")}:${Le(t,"memberId","")}`;return await l("saveChannelMember",`${e}:${s}`,async()=>{let s;if(Fe(t.id)){let i=el(t,r.channelMembers.keys);i.id=t.id,i.timeUpdate=ga(),i.userIdUpdate=e,s=await n.channelMembers.save([i])}else{let i=r.channelMembers.funNew({...t,userId:e});s=await n.channelMembers.insert(i)}return s})},deleteChannelMember:async(e,t)=>Fe(t)?await l("deleteChannelMember",`${e}:${t}`,async()=>await n.channelMembers.del({id:t}),{errKey:"deleteInProgress"}):Promise.reject("errMemberIdInvalid"),getMessages:async(e,t,s=20,i="")=>{if(!Fe(t))return Promise.reject("errChannelIdInvalid");let r=gt(s);r<1&&(r=20),r=Math.min(r,500);let a=await n.messages.select({channelId:t,isActive:"y"});return a=Fe(i)&&i?Yo(a,e=>e.id>i).slice(0,500):a.slice(-r),a},postMessage:async(e,t,s,i={})=>{if(!Fe(t))return Promise.reject("errChannelIdInvalid");let a=Le(i,"attachments"),c=rs(a)&&a.length>0;return Fe(s)||c?(Fe(s)||(s=""),await l("postMessage",`${e}:${t}`,async()=>await o("postMessage:"+t,async()=>{let a=tl(Le(i,"asTask",!1)),o=Le(i,"senderType","human"),l=Le(i,"attachments"),c=rs(l)?JSON.stringify(l):"[]",M=r.messages.funNew({channelId:t,senderId:e,senderType:o,kind:a?"task":"text",content:s,attachments:c,userId:e});if(await n.messages.insert(M),a){let a=Le(i,"title","")||s.split(/\r?\n/)[0].slice(0,100),o=r.tasks.funNew({channelId:t,messageId:M.id,title:a,payload:s,state:"pending",userId:e});return await n.tasks.insert(o),await n.messages.save({id:M.id,taskId:o.id,timeUpdate:ga(),userIdUpdate:e}),M.taskId=o.id,{message:M,task:o}}return{message:M}}),{errKey:"sendInProgress"})):Promise.reject("errContentInvalid")},getTasks:async(e,t,s=20,i="",r="desc")=>{if(!Fe(t))return Promise.reject("errChannelIdInvalid");let a=gt(s);a<1&&(a=20),a=Math.min(a,500);let o={channelId:t,isActive:"y"};Fe(i)&&i&&(o.state=i);let l=await n.tasks.select(o);return l="asc"===r?l.slice(0,a):l.slice(-a).reverse(),l},getTask:async(e,t)=>{if(!Fe(t))return Promise.reject("errTaskIdInvalid");let s=Le(await n.tasks.select({id:t}),"0");return _e(s)?s:Promise.reject("errTaskNotFound")},claimTask:async(e,t)=>Fe(t)?await o("task:"+t,async()=>{let s=Le(await n.tasks.select({id:t}),"0");return _e(s)?"pending"!==s.state?Promise.reject("errTaskAlreadyClaimed"):(await n.tasks.save({id:t,state:"running",assigneeId:e,timeClaim:ga(),timeUpdate:ga(),userIdUpdate:e}),Le(await n.tasks.select({id:t}),"0")):Promise.reject("errTaskNotFound")}):Promise.reject("errTaskIdInvalid"),respondTask:async(e,t,s,i="done",a="",l="agent")=>Fe(t)?Fe(s)?"done"!==i&&"error"!==i?Promise.reject("errStateInvalid"):await o("task:"+t,async()=>{let o=Le(await n.tasks.select({id:t}),"0");if(!_e(o))return Promise.reject("errTaskNotFound");if("running"!==o.state)return Promise.reject("errTaskNotRunning");let c=r.messages.funNew({channelId:o.channelId,senderId:e,senderType:l,kind:"taskReply",content:s,taskId:t,userId:e});return await n.messages.insert(c),await n.tasks.save({id:t,result:s,state:i,errorKey:a||"",resultMessageId:c.id,timeDone:ga(),timeUpdate:ga(),userIdUpdate:e}),Le(await n.tasks.select({id:t}),"0")}):Promise.reject("errResultInvalid"):Promise.reject("errTaskIdInvalid"),resetTask:async(e,t)=>Fe(t)?await o("task:"+t,async()=>{let s=Le(await n.tasks.select({id:t}),"0");return _e(s)?"error"!==s.state&&"running"!==s.state?Promise.reject("errTaskNotResettable"):(await n.tasks.save({id:t,state:"pending",result:"",errorKey:"",assigneeId:"",timeClaim:"",timeDone:"",resultMessageId:"",timeUpdate:ga(),userIdUpdate:e}),Le(await n.tasks.select({id:t}),"0")):Promise.reject("errTaskNotFound")}):Promise.reject("errTaskIdInvalid"),ackChannel:async(e,t,s)=>Fe(t)?Fe(s)?await o(`channelMember:${t}:${e}`,async()=>{let i=Le(await n.channelMembers.select({channelId:t,memberId:e}),"0");if(_e(i))await n.channelMembers.save({id:i.id,lastSeenMessageId:s,timeUpdate:ga(),userIdUpdate:e});else{let i=r.channelMembers.funNew({channelId:t,memberId:e,memberType:"agent",role:"member",lastSeenMessageId:s,userId:e});await n.channelMembers.insert(i)}return{ok:!0}}):Promise.reject("errLastMessageIdInvalid"):Promise.reject("errChannelIdInvalid"),saveFile:async(s,i)=>{if(!_e(i))return Promise.reject("errFileRowInvalid");let a=Le(i,"name"),o=Le(i,"type");if(!Fe(a)||!Fe(o))return Promise.reject("errFileRowInvalid");let l=Le(i,"dataBase64");if(!Fe(l))return Promise.reject("errUploadInvalid");let c=Buffer.from(l,"base64"),M=a.includes(".")?a.split(".").pop():"",w=r.files.funNew({name:a,type:o,ext:M,userId:s});return t.writeFileSync(e.join(sl,w.id),c),w.size=c.length,await n.files.insert([w]),{id:w.id,name:w.name,type:w.type,size:w.size}},getFileInfo:c,readFile:async s=>{let n=await c(0,s),i=e.join(sl,s);return t.existsSync(i)?{buf:t.readFileSync(i),info:n}:Promise.reject("errFileNotFound")},getStats:async e=>{let t=await n.channels.select({isActive:"y"}),s=await n.messages.select({isActive:"y"}),i=await n.tasks.select({isActive:"y"}),r={pending:0,running:0,done:0,error:0};for(let e of i)void 0!==r[e.state]&&(r[e.state]+=1);return{channels:t.length,messages:s.length,tasks:{pending:r.pending,running:r.running,done:r.done,error:r.error,total:i.length}}},archiveSweep:async e=>{let t=gt(e);if(t<=0)return{tasksMoved:0,messagesMoved:0};let s=es().subtract(t,"day").format("YYYY-MM-DDTHH:mm:ss.SSSZ"),i=await n.tasks.select({isActive:"y"}),r=Yo(i,e=>{let t="done"===e.state||"error"===e.state,n=Fe(e.timeDone)&&e.timeDone<s;return t&&n});if(r.length>0){await n.tasksArchive.save(r);for(let e of r)await n.tasks.del({id:e.id})}let a={};for(let e of i)a[e.id]=!0;for(let e of r)delete a[e.id];let o=Yo(await n.messages.select({isActive:"y"}),e=>{let t=Fe(e.timeCreate)&&e.timeCreate<s,n=("task"===e.kind||"taskReply"===e.kind)&&Fe(e.taskId)&&!0===a[e.taskId];return t&&!n});if(o.length>0){await n.messagesArchive.save(o);for(let e of o)await n.messages.del({id:e.id})}return{tasksMoved:r.length,messagesMoved:o.length}},getArchivedTasks:async(e,t,s=20,i="desc")=>{if(!Fe(t))return Promise.reject("errChannelIdInvalid");let r=gt(s);r<1&&(r=20),r=Math.min(r,500);let a=await n.tasksArchive.select({channelId:t,isActive:"y"});return a="asc"===i?a.slice(0,r):a.slice(-r).reverse(),a},getArchivedMessages:async(e,t,s=20)=>{if(!Fe(t))return Promise.reject("errChannelIdInvalid");let i=gt(s);return i<1&&(i=20),i=Math.min(i,500),(await n.messagesArchive.select({channelId:t,isActive:"y"})).slice(-i)}}}({woItems:Z,procOrm:X,ds:zl,srLog:b,kmx:z,lockSave:E}),{saveFile:v,getFileInfo:G,readFile:K,getStats:W}=j,k=gt(Le(l,"archiveAfterDays",30));if(k>0){let e=!1,t=async()=>{e||(e=!0,await j.archiveSweep(k).then(e=>{(e.tasksMoved>0||e.messagesMoved>0)&&b.info({event:"archiveSweep",tasksMoved:e.tasksMoved,messagesMoved:e.messagesMoved})}).catch(e=>{b.error({event:"archiveSweep-error",msg:"string"==typeof e?e:e&&e.message||"unknown"})}).finally(()=>{e=!1}))};setTimeout(t,3e4),setInterval(t,36e5)}let U=async e=>{let t=null;return Fe(e)&&(t=r(e),Xt(t)&&(t=await t)),_e(t)?(await(async e=>{if(!Fe(Le(e,"id","")))return console.log("user",e),console.log("can not get the userId"),Promise.reject("errUserIdMissing");if(!Fe(Le(e,"email","")))return console.log("user",e),console.log("can not get the email of user"),Promise.reject("errUserEmailMissing");if(!Fe(Le(e,"name","")))return console.log("user",e),console.log("can not get userName"),Promise.reject("errUserNameMissing");let t=Le(e,"isAdmin","");return"y"===t||"n"===t||(console.log("user",e),console.log("user.isAdmin is not y or n",e.isAdmin),console.log("can not get the role of user"),Promise.reject("errUserRoleMissing"))})(t),t):(console.log("token",ol(e)),console.log("can not find the user from token"),Promise.reject("errUserNotFound"))},V=async e=>(await U(e),!0),Q=async(e,t="")=>{let s=await U(e),n=o(s,t);return Xt(n)&&(n=await n),n?(b.info({event:"verifyAppUser",from:t,userId:Le(s,"id","")}),s):(console.log("user",s),console.log("user does not have permission"),Promise.reject("errUserNoPermission"))},H=async e=>{let t=Le(e,"payload");return Fe(t)&&(t=Be(t)),_e(t)?t:(console.log("payload",ol(t)),console.log("invalid payload in req"),Promise.reject("errPayloadInvalid"))},J="dist",R="./node_modules/w-web-task/dist";Ft(R)&&(J=R);let P="index.html";try{let s=e.resolve(J,"index.tmp");if($t(s)||(s=e.resolve(J,P)),!$t(s))throw console.log("fpEntryIn",s),new Error("invalid fpEntryIn");let n=e.resolve(J,P),i=t.readFileSync(s,"utf8");i=_t(i,"/mtask/","{sfd}/"),i=_t(i,"{sfd}",D),i=_t(i,"{urlRedirect}",p),i=_t(i,"{language}",C),t.writeFileSync(n,i,"utf8")}catch(e){console.log(e),console.log(`can not generate ${P}`)}let O=[{method:"GET",path:"/api/getUserByToken",handler:async function(e,t){return await Y("getUserByToken",async function(){let t=Le(e,"query.token","");if(!Fe(t))return console.log("req.query",(e=>{if(!$e(e))return ol(e);let t={...e};for(let e of Object.keys(t))"token"===e.toLowerCase()&&(t[e]=ol(t[e]));return t})(Le(e,"query"))),console.log("token",ol(t)),console.log("[API]getUserByToken/check token: invalid token"),Promise.reject("errTokenNoPermission");let s=await(async(e,t="")=>{let s=await U(e),n=a(s,t);return Xt(n)&&(n=await n),n?(b.info({event:"verifyClientUser",from:t,userId:Le(s,"id","")}),s):(console.log("user",s),console.log("user does not have permission"),Promise.reject("errUserNoPermission"))})(t,"getUserByToken");return _e(s)?(b.info({event:"api/getUserByToken",userId:Le(s,"id","")}),s):(console.log("token",ol(t)),console.log("[API]getUserByToken/check user: invalid user"),Promise.reject("errTokenNoPermission"))})}},{method:"GET",path:"/api/getChannels",handler:async function(e,t){return await Y("getChannels",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getChannels"),"id",""),n=Le(e,"query.agentId",""),i=await j.getChannelsList(s,n);return b.info({event:"api/getChannels",userId:s}),i})}},{method:"GET",path:"/api/getRecentMessages",handler:async function(e,t){return await Y("getRecentMessages",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getRecentMessages"),"id",""),n=Le(e,"query.channelId",""),i=gt(Le(e,"query.n",20)),r=Le(e,"query.afterId",""),a=await j.getMessages(s,n,i,r);return b.info({event:"api/getRecentMessages",userId:s}),a})}},{method:"GET",path:"/api/getRecentTasks",handler:async function(e,t){return await Y("getRecentTasks",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getRecentTasks"),"id",""),n=Le(e,"query.channelId",""),i=gt(Le(e,"query.n",20)),r=Le(e,"query.state",""),a=Le(e,"query.order","desc"),o=await j.getTasks(s,n,i,r,a);return b.info({event:"api/getRecentTasks",userId:s}),o})}},{method:"GET",path:"/api/getArchivedTasks",handler:async function(e,t){return await Y("getArchivedTasks",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getArchivedTasks"),"id",""),n=Le(e,"query.channelId",""),i=gt(Le(e,"query.n",20)),r=Le(e,"query.order","desc"),a=await j.getArchivedTasks(s,n,i,r);return b.info({event:"api/getArchivedTasks",userId:s}),a})}},{method:"GET",path:"/api/getArchivedMessages",handler:async function(e,t){return await Y("getArchivedMessages",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getArchivedMessages"),"id",""),n=Le(e,"query.channelId",""),i=gt(Le(e,"query.n",20)),r=await j.getArchivedMessages(s,n,i);return b.info({event:"api/getArchivedMessages",userId:s}),r})}},{method:"GET",path:"/api/getTask",handler:async function(e,t){return await Y("getTask",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getTask"),"id",""),n=Le(e,"query.taskId",""),i=await j.getTask(s,n);return b.info({event:"api/getTask",userId:s}),i})}},{method:"POST",path:"/api/postMessage",handler:async function(e,t){return await Y("postMessage",async function(){let t=await H(e),s=Le(e,"query.token","")||Le(t,"token",""),n=Le(await Q(s,"postMessage"),"id",""),i=Le(t,"channelId",""),r=Le(t,"content",""),a={asTask:Le(t,"asTask",!1),title:Le(t,"title",""),senderType:Le(t,"senderType","human"),attachments:Le(t,"attachments",[])},o=await j.postMessage(n,i,r,a);return b.info({event:"api/postMessage",userId:n}),o})}},{method:"POST",path:"/api/claimTask",handler:async function(e,t){return await Y("claimTask",async function(){let t=await H(e),s=Le(e,"query.token","")||Le(t,"token",""),n=Le(await Q(s,"claimTask"),"id",""),i=Le(t,"taskId",""),r=await j.claimTask(n,i);return b.info({event:"api/claimTask",userId:n}),r})}},{method:"POST",path:"/api/respondTask",handler:async function(e,t){return await Y("respondTask",async function(){let t=await H(e),s=Le(e,"query.token","")||Le(t,"token",""),n=Le(await Q(s,"respondTask"),"id",""),i=Le(t,"taskId",""),r=Le(t,"result",""),a=Le(t,"state","done"),o=Le(t,"errorKey",""),l=await j.respondTask(n,i,r,a,o);return b.info({event:"api/respondTask",userId:n}),l})}},{method:"POST",path:"/api/resetTask",handler:async function(e,t){return await Y("resetTask",async function(){let t=await H(e),s=Le(e,"query.token","")||Le(t,"token",""),n=Le(await Q(s,"resetTask"),"id",""),i=Le(t,"taskId",""),r=await j.resetTask(n,i);return b.info({event:"api/resetTask",userId:n}),r})}},{method:"POST",path:"/api/ackChannel",handler:async function(e,t){return await Y("ackChannel",async function(){let t=await H(e),s=Le(e,"query.token","")||Le(t,"token",""),n=Le(await Q(s,"ackChannel"),"id",""),i=Le(t,"channelId",""),r=Le(t,"lastMessageId",""),a=await j.ackChannel(n,i,r);return b.info({event:"api/ackChannel",userId:n}),a})}},{method:"POST",path:"/api/uploadFile",options:{payload:{maxBytes:20971520}},handler:async function(e,t){return await Y("uploadFile",async function(){let t=await H(e),s=Le(e,"query.token","")||Le(t,"token",""),n=Le(await Q(s,"uploadFile"),"id",""),i=Le(t,"name",""),r=Le(t,"type",""),a=Le(t,"dataBase64",""),o=await j.saveFile(n,{name:i,type:r,dataBase64:a});return b.info({event:"api/uploadFile",userId:n}),o})}},{method:"GET",path:"/api/getFileInfo",handler:async function(e,t){return await Y("getFileInfo",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getFileInfo"),"id",""),n=Le(e,"query.id",""),i=await j.getFileInfo(s,n);return b.info({event:"api/getFileInfo",userId:s}),i})}},{method:"GET",path:"/api/getStats",handler:async function(e,t){return await Y("getStats",async function(){let t=Le(e,"query.token",""),s=Le(await Q(t,"getStats"),"id",""),n=await j.getStats(s);return b.info({event:"api/getStats",userId:s}),n})}},{method:"GET",path:"/api/getFile",handler:async function(e,t){let s=Le(e,"query.token",""),n=Le(e,"query.id","");try{let e=await Q(s,"getFile"),i=await K(n);b.info({event:"api/getFile",userId:Le(e,"id","")});let r=["image/png","image/jpeg","image/jpg","image/gif","image/webp","image/bmp","image/avif"],a=i.info.type||"",o=r.includes(a),l=encodeURIComponent(i.info.name||n);return t.response(i.buf).type(o?a:"application/octet-stream").header("Content-Disposition",`${o?"inline":"attachment"}; filename="${l}"`).header("X-Content-Type-Options","nosniff")}catch(e){let s=Fe(e)?e:Le(e,"message","errFileNotFound");return b.error({event:"api/getFile",err:s}),t.response(JSON.stringify({state:"error",msg:s})).code(404).type("application/json")}}}],F=["channels","channelMembers"];return c=new La({port:M,pathStaticFiles:J,apiName:"api",apis:O,tokenType:"Bearer",verifyConn:async({apiType:e,authorization:t,query:s,headers:n,req:i})=>{let r=function(e,t){return Fe(e)&&Yt(t)?0===(t=gt(t))?e:zt(e,e.length-t):""}(t,7);if(!Fe(r))return console.log("apiType",e),console.log("authorization",ol(t)),console.log("invalid token"),b.error({event:"verifyConn",err:"errTokenNoPermission",apiType:e}),!1;let a=await V(r);return b.info({event:"verifyConn",apiType:e}),a},getUserIdByToken:async e=>{let t=null;Fe(e)&&(t=await r(e));let s=Le(t,"id","");return Fe(s)?s:(console.log("token",ol(e)),console.log("can not get the userId from token"),b.error({event:"getUserIdByToken",err:"errUserIdMissing"}),Promise.reject("errUserIdMissing"))},useDbOrm:!0,kpOrm:Z,operOrm:X,tableNamesExec:F,methodsExec:["select","insert","save","del"],tableNamesSync:F,kpFunExt:{getWebInfor:A("getWebInfor",e=>({webLogo:I,showLanguage:h,language:C,kpLang:N})),getChannelsList:A("getChannelsList",e=>j.getChannelsList(e)),saveChannel:A("saveChannel",(e,t)=>j.saveChannel(e,t)),deleteChannel:A("deleteChannel",(e,t)=>j.deleteChannel(e,t)),getChannelMembers:A("getChannelMembers",(e,t)=>j.getChannelMembers(e,t)),saveChannelMember:A("saveChannelMember",(e,t)=>j.saveChannelMember(e,t)),deleteChannelMember:A("deleteChannelMember",(e,t)=>j.deleteChannelMember(e,t)),getMessages:A("getMessages",(e,t,s,n)=>j.getMessages(e,t,s,n)),postMessage:A("postMessage",(e,t,s,n)=>j.postMessage(e,t,s,n)),getTasks:A("getTasks",(e,t,s,n,i)=>j.getTasks(e,t,s,n,i)),getArchivedTasks:A("getArchivedTasks",(e,t,s,n)=>j.getArchivedTasks(e,t,s,n)),getArchivedMessages:A("getArchivedMessages",(e,t,s)=>j.getArchivedMessages(e,t,s)),getTask:A("getTask",(e,t)=>j.getTask(e,t)),claimTask:A("claimTask",(e,t)=>j.claimTask(e,t)),respondTask:A("respondTask",(e,t,s,n,i,r)=>j.respondTask(e,t,s,n,i,r)),resetTask:A("resetTask",(e,t)=>j.resetTask(e,t)),ackChannel:A("ackChannel",(e,t,s)=>j.ackChannel(e,t,s)),uploadFile:A("uploadFile",(e,t)=>j.saveFile(e,t)),getFileInfo:A("getFileInfo",(e,t)=>j.getFileInfo(e,t)),getStats:A("getStats",e=>j.getStats(e))},fpTableTags:"tableTags-web-task.json"}),c}});
|
|
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("url"),require("pino"),require("module")):"function"==typeof define&&define.amd?define(["path","fs","@hapi/hapi","@hapi/inert","stream","http","worker_threads","url","pino","module"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-web-task"]=t(e.path,e.fs,e["@hapi/hapi"],e["@hapi/inert"],e.stream,e.http,e.require$$0$1,e.url,e.pino,e.module$1)}(this,function(e,t,s,n,i,r,o,l,a,c){"use strict";var M="undefined"!=typeof document?document.currentScript:null,u=Array.isArray,d="object"==typeof global&&global&&global.Object===Object&&global,w="object"==typeof self&&self&&self.Object===Object&&self,I=d||w||Function("return this")(),y=I.Symbol,g=Object.prototype,L=g.hasOwnProperty,m=g.toString,D=y?y.toStringTag:void 0;var p=Object.prototype.toString;var C=y?y.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":C&&C in Object(e)?function(e){var t=L.call(e,D),s=e[D];try{e[D]=void 0;var n=!0}catch(e){}var i=m.call(e);return n&&(t?e[D]=s:delete e[D]),i}(e):function(e){return p.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function b(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==h(e)}var N=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,x=/^\w*$/;function T(e,t){if(u(e))return!1;var s=typeof e;return!("number"!=s&&"symbol"!=s&&"boolean"!=s&&null!=e&&!b(e))||(x.test(e)||!N.test(e)||null!=t&&e in Object(t))}function Z(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function S(e){if(!Z(e))return!1;var t=h(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}var A,Y=I["__core-js_shared__"],X=(A=/[^.]+$/.exec(Y&&Y.keys&&Y.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";var v=Function.prototype.toString;function z(e){if(null!=e){try{return v.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var E=/^\[object .+?Constructor\]$/,j=Function.prototype,G=Object.prototype,W=j.toString,K=G.hasOwnProperty,k=RegExp("^"+W.call(K).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function V(e){return!(!Z(e)||(t=e,X&&X in t))&&(S(e)?k:E).test(z(e));var t}function U(e,t){var s=function(e,t){return null==e?void 0:e[t]}(e,t);return V(s)?s:void 0}var Q=U(Object,"create");var H=Object.prototype.hasOwnProperty;var R=Object.prototype.hasOwnProperty;function J(e){var t=-1,s=null==e?0:e.length;for(this.clear();++t<s;){var n=e[t];this.set(n[0],n[1])}}function O(e,t){return e===t||e!=e&&t!=t}function P(e,t){for(var s=e.length;s--;)if(O(e[s][0],t))return s;return-1}J.prototype.clear=function(){this.__data__=Q?Q(null):{},this.size=0},J.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},J.prototype.get=function(e){var t=this.__data__;if(Q){var s=t[e];return"__lodash_hash_undefined__"===s?void 0:s}return H.call(t,e)?t[e]:void 0},J.prototype.has=function(e){var t=this.__data__;return Q?void 0!==t[e]:R.call(t,e)},J.prototype.set=function(e,t){var s=this.__data__;return this.size+=this.has(e)?0:1,s[e]=Q&&void 0===t?"__lodash_hash_undefined__":t,this};var F=Array.prototype.splice;function B(e){var t=-1,s=null==e?0:e.length;for(this.clear();++t<s;){var n=e[t];this.set(n[0],n[1])}}B.prototype.clear=function(){this.__data__=[],this.size=0},B.prototype.delete=function(e){var t=this.__data__,s=P(t,e);return!(s<0)&&(s==t.length-1?t.pop():F.call(t,s,1),--this.size,!0)},B.prototype.get=function(e){var t=this.__data__,s=P(t,e);return s<0?void 0:t[s][1]},B.prototype.has=function(e){return P(this.__data__,e)>-1},B.prototype.set=function(e,t){var s=this.__data__,n=P(s,e);return n<0?(++this.size,s.push([e,t])):s[n][1]=t,this};var $=U(I,"Map");function _(e,t){var s,n,i=e.__data__;return("string"==(n=typeof(s=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==s:null===s)?i["string"==typeof t?"string":"hash"]:i.map}function q(e){var t=-1,s=null==e?0:e.length;for(this.clear();++t<s;){var n=e[t];this.set(n[0],n[1])}}q.prototype.clear=function(){this.size=0,this.__data__={hash:new J,map:new($||B),string:new J}},q.prototype.delete=function(e){var t=_(this,e).delete(e);return this.size-=t?1:0,t},q.prototype.get=function(e){return _(this,e).get(e)},q.prototype.has=function(e){return _(this,e).has(e)},q.prototype.set=function(e,t){var s=_(this,e),n=s.size;return s.set(e,t),this.size+=s.size==n?0:1,this};function ee(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var s=function(){var n=arguments,i=t?t.apply(this,n):n[0],r=s.cache;if(r.has(i))return r.get(i);var o=e.apply(this,n);return s.cache=r.set(i,o)||r,o};return s.cache=new(ee.Cache||q),s}ee.Cache=q;var te,se,ne,ie=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,re=/\\(\\)?/g,oe=(te=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(ie,function(e,s,n,i){t.push(n?i.replace(re,"$1"):s||e)}),t},se=ee(te,function(e){return 500===ne.size&&ne.clear(),e}),ne=se.cache,se),le=oe;function ae(e,t){for(var s=-1,n=null==e?0:e.length,i=Array(n);++s<n;)i[s]=t(e[s],s,e);return i}var ce=y?y.prototype:void 0,Me=ce?ce.toString:void 0;function ue(e){if("string"==typeof e)return e;if(u(e))return ae(e,ue)+"";if(b(e))return Me?Me.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function de(e){return null==e?"":ue(e)}function we(e,t){return u(e)?e:T(e,t)?[e]:le(de(e))}function Ie(e){if("string"==typeof e||b(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function ye(e,t){for(var s=0,n=(t=we(t,e)).length;null!=e&&s<n;)e=e[Ie(t[s++])];return s&&s==n?e:void 0}function ge(e,t,s){var n=null==e?void 0:ye(e,t);return void 0===n?s:n}function Le(e){return f(e)&&"[object Arguments]"==h(e)}var me=Object.prototype,De=me.hasOwnProperty,pe=me.propertyIsEnumerable,Ce=Le(function(){return arguments}())?Le:function(e){return f(e)&&De.call(e,"callee")&&!pe.call(e,"callee")},he=Ce;var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,be=fe&&"object"==typeof module&&module&&!module.nodeType&&module,Ne=be&&be.exports===fe?I.Buffer:void 0,xe=(Ne?Ne.isBuffer:void 0)||function(){return!1},Te=/^(?:0|[1-9]\d*)$/;function Ze(e,t){var s=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==s||"symbol"!=s&&Te.test(e))&&e>-1&&e%1==0&&e<t}function Se(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var Ae={};function Ye(e){return function(t){return e(t)}}Ae["[object Float32Array]"]=Ae["[object Float64Array]"]=Ae["[object Int8Array]"]=Ae["[object Int16Array]"]=Ae["[object Int32Array]"]=Ae["[object Uint8Array]"]=Ae["[object Uint8ClampedArray]"]=Ae["[object Uint16Array]"]=Ae["[object Uint32Array]"]=!0,Ae["[object Arguments]"]=Ae["[object Array]"]=Ae["[object ArrayBuffer]"]=Ae["[object Boolean]"]=Ae["[object DataView]"]=Ae["[object Date]"]=Ae["[object Error]"]=Ae["[object Function]"]=Ae["[object Map]"]=Ae["[object Number]"]=Ae["[object Object]"]=Ae["[object RegExp]"]=Ae["[object Set]"]=Ae["[object String]"]=Ae["[object WeakMap]"]=!1;var Xe="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=Xe&&"object"==typeof module&&module&&!module.nodeType&&module,ze=ve&&ve.exports===Xe&&d.process,Ee=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ze&&ze.binding&&ze.binding("util")}catch(e){}}(),je=Ee&&Ee.isTypedArray,Ge=je?Ye(je):function(e){return f(e)&&Se(e.length)&&!!Ae[h(e)]},We=Object.prototype.hasOwnProperty;function Ke(e,t){var s=u(e),n=!s&&he(e),i=!s&&!n&&xe(e),r=!s&&!n&&!i&&Ge(e),o=s||n||i||r,l=o?function(e,t){for(var s=-1,n=Array(e);++s<e;)n[s]=t(s);return n}(e.length,String):[],a=l.length;for(var c in e)!t&&!We.call(e,c)||o&&("length"==c||i&&("offset"==c||"parent"==c)||r&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Ze(c,a))||l.push(c);return l}var ke=Object.prototype;function Ve(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||ke)}function Ue(e,t){return function(s){return e(t(s))}}var Qe=Ue(Object.keys,Object),He=Object.prototype.hasOwnProperty;function Re(e){if(!Ve(e))return Qe(e);var t=[];for(var s in Object(e))He.call(e,s)&&"constructor"!=s&&t.push(s);return t}function Je(e){return null!=e&&Se(e.length)&&!S(e)}function Oe(e){return Je(e)?Ke(e):Re(e)}function Pe(e){return!0===(t=e)||!1===t||f(t)&&"[object Boolean]"==h(t);var t}function Fe(e){return"[object String]"===Object.prototype.toString.call(e)}function Be(e){return!(!Fe(e)||""===e)}function $e(e,t={}){let s=ge(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:{};if(!Be(e))return n("invalid v");let i={};try{i=JSON.parse(e)}catch(e){return n(e.toString())}return s?{state:"success",msg:i}:i}function _e(e){return"[object Object]"===Object.prototype.toString.call(e)}function qe(e){if(_e(e)){for(let t in e)return!0;return!1}return!1}var et=/\s/;var tt=/^\s+/;function st(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&et.test(e.charAt(t)););return t}(e)+1).replace(tt,""):e}var nt=/^[-+]0x[0-9a-f]+$/i,it=/^0b[01]+$/i,rt=/^0o[0-7]+$/i,ot=parseInt;function lt(e){if("number"==typeof e)return e;if(b(e))return NaN;if(Z(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Z(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=st(e);var s=it.test(e);return s||rt.test(e)?ot(e.slice(2),s?2:8):nt.test(e)?NaN:+e}var at=1/0;function ct(e){return e?(e=lt(e))===at||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Mt(e){var t=ct(e),s=t%1;return t==t?s?t-s:t:0}function ut(e){return e!=e}function dt(e){let t=!1;if(Be(e)){if(""===e.trim())return!1;t=!isNaN(Number(e))}else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(ut(e))return!1;t=!0}return t}function wt(e){if(!dt(e))return 0;return ct(e)}function It(e,t={}){let s=ge(t,"useLimitSafe",null);return Pe(s)||(s=!1),!!dt(e)&&(e=wt(e),s?Number.isSafeInteger(e):"number"==typeof(n=e)&&n==Mt(n));var n}var yt=I.isFinite,gt=Math.min;var Lt=function(e){var t=Math[e];return function(e,s){if(e=lt(e),(s=null==s?0:gt(Mt(s),292))&&yt(e)){var n=(de(e)+"e").split("e");return+((n=(de(t(n[0]+"e"+(+n[1]+s)))+"e").split("e"))[0]+"e"+(+n[1]-s))}return t(e)}}("round"),mt=Lt;function Dt(e,t={}){let s=ge(t,"useClampSafe",null);Pe(s)||(s=!1);let n=ge(t,"useLimitSafe",null);Pe(n)||(n=!1);let i=ge(t,"returnWithStateAndMsg",null);Pe(i)||(i=!1);let r=e=>i?{state:"success",msg:e}:e,o=e=>{if(i)return{state:"error",msg:e};throw new Error(e)};if(!dt(e))return r(0);let l=null;try{e=wt(e),l=mt(e),s&&(l>Number.MAX_SAFE_INTEGER?l=Number.MAX_SAFE_INTEGER:l<Number.MIN_SAFE_INTEGER&&(l=Number.MIN_SAFE_INTEGER))}catch(e){return o(e.toString())}return n&&!Number.isSafeInteger(Number(l))?o(`v[${e}] is not a safe integer`):("0"===String(l)&&(l=0),r(l))}function pt(e,t={}){if(!It(e,t))return!1;return Dt(e)>0}var Ct=Ue(Object.getPrototypeOf,Object),ht=Function.prototype,ft=Object.prototype,bt=ht.toString,Nt=ft.hasOwnProperty,xt=bt.call(Object);function Tt(e){if(!f(e)||"[object Object]"!=h(e))return!1;var t=Ct(e);if(null===t)return!0;var s=Nt.call(t,"constructor")&&t.constructor;return"function"==typeof s&&s instanceof s&&bt.call(s)==xt}function Zt(e){return function(e){if(!f(e))return!1;var t=h(e);return"[object Error]"==t||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Tt(e)}(e)}function St(e){return S(e)}function At(e){let t,s;try{s=Object.prototype.toString.call(e)}catch(e){return!1}if(t="[object Promise]"===s,t)return!0;if("[object Function]"!==s)return!1;try{t="function"!=typeof e.subscribe&&"function"==typeof e.then}catch(e){}return t}function Yt(e,t={}){if(!It(e,t))return!1;return Dt(e)>=0}function Xt(e,t){return Be(e)&&Yt(t)?0===(t=Dt(t))?"":e.substring(0,t):""}function vt(e,t){if(!Be(e))return"";if(!Yt(t))return"";if(0===(t=Dt(t)))return"";let s=e.length-t;return s<0&&(s=0),e.substring(s,s+t)}function zt(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}let Et=function(e){if(!St(e))throw new Error("fn is not a function");return function(){let t,s=zt();try{t=e.apply(this,arguments)}catch(e){return s.resolve({state:"error",msg:e}),s}let n=e=>{let t=!1;try{t="cancelled"===ge(e,"reason")}catch(e){}t?s.resolve({state:"cancelled",msg:""}):s.resolve({state:"error",msg:e})};try{At(t)?t.then(e=>{s.resolve({state:"success",msg:e})},n):s.resolve({state:"success",msg:t})}catch(e){s.resolve({state:"error",msg:e})}return s}};let jt=2147483647;var Gt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Wt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Kt(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var s=function e(){if(this instanceof e){var s=[null];return s.push.apply(s,arguments),new(Function.bind.apply(t,s))}return t.apply(this,arguments)};s.prototype=t.prototype}else s={};return Object.defineProperty(s,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}),s}var kt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new i(n,r||e,o),a=s?s+t:t;return e._events[a]?e._events[a].fn?e._events[a]=[e._events[a],l]:e._events[a].push(l):(e._events[a]=l,e._eventsCount++),e}function o(e,t){0===--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),l.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},l.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,o=new Array(r);i<r;i++)o[i]=n[i].fn;return o},l.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,i,r,o){var l=s?s+e:e;if(!this._events[l])return!1;var a,c,M=this._events[l],u=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),u){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,o),!0}for(c=1,a=new Array(u-1);c<u;c++)a[c-1]=arguments[c];M.fn.apply(M.context,a)}else{var d,w=M.length;for(c=0;c<w;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),u){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!a)for(d=1,a=new Array(u-1);d<u;d++)a[d-1]=arguments[d];M[c].fn.apply(M[c].context,a)}}return!0},l.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},l.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},l.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return o(this,r),this;var l=this._events[r];if(l.fn)l.fn!==t||i&&!l.once||n&&l.context!==n||o(this,r);else{for(var a=0,c=[],M=l.length;a<M;a++)(l[a].fn!==t||i&&!l[a].once||n&&l[a].context!==n)&&c.push(l[a]);c.length?this._events[r]=1===c.length?c[0]:c:o(this,r)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=s,l.EventEmitter=l,e.exports=l}(kt);var Vt=Wt(kt.exports);function Ut(){return new Vt}function Qt(e,t,s=[],n={}){let i=n.funSettle,r=n.tag||"evem",o=(t,...s)=>e.emit(t,...s);St(n.funEmit)&&(o=n.funEmit);try{return o(t,...s)}catch(n){if(St(i))try{i(n)}catch(e){}try{"error"!==t&&e.listenerCount("error")>0?o("error",{fun:"listener",name:t,msg:n,args:s}):console.error(`[wsemi ${r}] listener of '${String(t)}' threw:`,n)}catch(e){try{console.error(`[wsemi ${r}] listener of '${String(t)}' threw, and reporting it also threw:`,e,n)}catch(e){}}return!1}}async function Ht(e,t={}){let s=null,n=zt();if(!St(e))return n.reject("waitfunction需輸入函數f"),n;let i=async()=>{let t=e();return At(t)&&(t=await t),t};if(s=await i(),!0===s)return n.resolve(),n;let r=ge(t,"attemptNum",null);pt(r)||(r=200);let o=ge(t,"timeInterval",null);pt(o)||(o=1e3),o=Math.min(o,jt);let l=0,a=setInterval(async()=>{l+=1;try{s=await i()}catch(e){return clearInterval(a),void n.reject(e)}!0===s&&(clearInterval(a),n.resolve()),l>r&&(clearInterval(a),n.reject(`exceeded attemptNum[${r}]`))},o);return n}function Rt(e,t){return!!_e(e)&&(!(!Be(t)&&!dt(t))&&t in e)}function Jt(e={}){let t=ge(e,"timeExpire",null);pt(t)||(t=18e5),t=Dt(t),t=Math.min(t,jt);let s=ge(e,"timeDetect",null);pt(s)||(s=2e3),s=Dt(s),s=Math.min(s,jt);let n=Ut(),i=Object.create(null),r=e=>{if(Rt(i,e)){return Qt(n,"checkWithSet",[{state:"error",msg:`checkWithSet: key in use: ${e}`}],{tag:"cacheSt"}),!1}return i[e]={time:Date.now(),value:!0},Qt(n,"checkWithSet",[{state:"success",msg:`checkWithSet: ${e}`}],{tag:"cacheSt"}),!0},o=setInterval(()=>{Qt(n,"detect",[{state:"start"}],{tag:"cacheSt"});let e=Date.now();for(let s of Object.keys(i)){let n=i[s];n&&e-n.time>t&&delete i[s]}Qt(n,"detect",[{state:"finish"}],{tag:"cacheSt"})},s);return n.checkWithSet=r,n.setWithFree=async(e,t)=>{Qt(n,"setWithFree",[{state:"start"}],{tag:"cacheSt"});let s=[];for(let t of e){if(!r(t)){for(let e of s)delete i[e];let e=`setWithFree: key in use: ${t}`;return Qt(n,"setWithFree",[{state:"error",msg:e}],{tag:"cacheSt"}),Promise.reject(e)}s.push(t)}try{let s=await t(),i=`setWithFree: ${e.join(", ")}`;return Qt(n,"setWithFree",[{state:"success",msg:i}],{tag:"cacheSt"}),s}catch(e){let t="";try{t=`${e&&e.message||e}`}catch(e){}throw Qt(n,"setWithFree",[{state:"error",msg:`setWithFree: fn threw: ${t}`}],{tag:"cacheSt"}),e}finally{for(let e of s)delete i[e]}},n.set=async(e,t=!0)=>{i[e]={time:Date.now(),value:t},Qt(n,"set",[{state:"success",msg:`set: ${e}`}],{tag:"cacheSt"})},n.get=async e=>{let t=i[e],s=void 0===t?null:t.value;return Qt(n,"get",[{state:"success",msg:`get: ${e}`}],{tag:"cacheSt"}),s},n.check=async e=>{let t=Rt(i,e);return Qt(n,"check",[{state:"success",msg:`check: ${e} = ${t}`}],{tag:"cacheSt"}),t},n.del=async e=>{delete i[e],Qt(n,"del",[{state:"success",msg:`del: ${e}`}],{tag:"cacheSt"})},n.waitExist=async(e,t={})=>{let s=ge(t,"attemptNum",null);pt(s)||(s=30),s=Dt(s);let r=ge(t,"timeInterval",null);pt(r)||(r=100),r=Dt(r),Qt(n,"waitExist",[{state:"start"}],{tag:"cacheSt"});try{await Ht(()=>Rt(i,e),{attemptNum:s,timeInterval:r})}catch(t){let i=`waitExist timeout (${s*r}ms): ${e}`;return Qt(n,"waitExist",[{state:"error",msg:i}],{tag:"cacheSt"}),Promise.reject(i)}Qt(n,"waitExist",[{state:"success",msg:`waitExist resolved: ${e}`}],{tag:"cacheSt"})},n.waitNotExist=async(e,t={})=>{let s=ge(t,"attemptNum",null);pt(s)||(s=30),s=Dt(s);let r=ge(t,"timeInterval",null);pt(r)||(r=100),r=Dt(r),Qt(n,"waitNotExist",[{state:"start"}],{tag:"cacheSt"});try{await Ht(()=>!Rt(i,e),{attemptNum:s,timeInterval:r})}catch(t){let i=`waitNotExist timeout (${s*r}ms): ${e}`;return Qt(n,"waitNotExist",[{state:"error",msg:i}],{tag:"cacheSt"}),Promise.reject(i)}Qt(n,"waitNotExist",[{state:"success",msg:`waitNotExist resolved: ${e}`}],{tag:"cacheSt"})},n.clear=()=>{clearInterval(o)},n}function Ot(e,t={}){let s=ge(t,"fs"),n=!1;try{s.statSync(e),n=!0}catch{n=!1}return n}function Pt(e,t={}){let s=ge(t,"fs");if(!Ot(e,{fs:s}))return!1;let n=s.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function Ft(e){return Pt(e,{fs:t})}function Bt(e,t={}){let s=ge(t,"fs");return!!Ot(e,{fs:s})&&(!s.lstatSync(e).isDirectory()&&!s.lstatSync(e).isSymbolicLink())}function $t(e){return Bt(e,{fs:t})}function _t(e,t,s){if(!Be(e))return"";if(!Be(t))return"";if(!Fe(s))return"";return String(e).replaceAll(t,s)}function qt(e){return"[object Array]"===Object.prototype.toString.call(e)}function es(e){return"[object Undefined]"===Object.prototype.toString.call(e)}function ts(e){if(_e(e)){for(let t in e)return!1;return!0}return!1}function ss(e){return!!qt(e)&&0===e.length}function ns(e){return!!es(e)||(!!function(e){return"[object Null]"===Object.prototype.toString.call(e)}(e)||(!!ts(e)||(!!function(e){return!(!Fe(e)||""!==e)}(e)||(!!ss(e)||!!ut(e)))))}function is(e){return!!qt(e)&&(0!==e.length&&(1!==e.length||!ns(e[0])))}function rs(e,t,s=[],n={}){let i=n.ms;return pt(i)||(i=1),i=Dt(i),i=Math.min(i,jt),setTimeout(()=>{Qt(e,t,s,n)},i)}function os(e){try{let t=e();return"string"==typeof t?t:""}catch(e){return""}}function ls(e,t){try{let s=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(s.has(i))return"[Circular]";s.add(i),n.push(i)}return i});return"string"==typeof i?i:""}catch(e){return""}}function as(e){if(e.length>=2&&'"'===e[0]&&'"'===e[e.length-1]){let t=os(()=>JSON.parse(e));if(""!==t)return t}return e}function cs(e,t){if(void 0===e)return"";if(null===e)return"null";let s=function(e){let t=typeof e;return"string"===t?e:null==e?"":"number"===t||"boolean"===t||"bigint"===t||"symbol"===t?String(e):""}(e);if(""!==s)return s;let n=ls(e,t);if(""!==n&&"{}"!==n)return as(n);let i=os(()=>String(e));return""!==i&&"[object Object]"!==i?i:n}function Ms(e,t){let s=new WeakSet;null===e||"object"!=typeof e&&"function"!=typeof e||s.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(s.has(e))break;s.add(e)}let r=ds(e,{...t,useCause:!1,useAggregate:!1});""!==r&&i.push(r),n=e}return i.join(" <- ")}function us(e,t){let s=null;try{s=e.errors}catch(e){return""}if(!Array.isArray(s)||0===s.length)return"";let n=[];for(let i=0;i<s.length&&i<t.levelCauseMax;i++){if(s[i]===e)continue;let r=ds(s[i],{...t,useCause:!1,useAggregate:!1});""!==r&&n.push(r)}return n.join("; ")}function ds(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 s=null,n=!1;try{s=e.message,n=!0}catch(e){n=!1}if(n&&"string"==typeof s){if(""!==s){let n=s;if(t.useCause){let s=Ms(e,t);""!==s&&(n=`${n} <- ${s}`)}if(t.useAggregate){let s=us(e,t);""!==s&&(n=`${n} [${s}]`)}return n}let n=Ms(e,t);return""!==n?n:""}if(n){let e=cs(s,t.levelJsonMax);if(""!==e)return e}let i=Ms(e,t);if(""!==i)return i;if(t.useAggregate){let s=us(e,t);if(""!==s)return s}let r=ls(e,t.levelJsonMax),o=as(r);if(""!==o&&"{}"!==o)return o;let l=os(()=>String(e));if(""!==l&&"[object Object]"!==l)return l;let a=os(()=>Object.prototype.toString.call(e));return""!==a&&"[object Object]"!==a?a:""!==r?r:""}function ws(e,t={}){let s=ge(t,"useCause",null);Pe(s)||(s=!1);let n=ge(t,"useAggregate",null);Pe(n)||(n=!1);let i=ge(t,"levelCauseMax",null);pt(i,{useLimitSafe:!0})||(i=8),i=Dt(i);let r=ge(t,"levelJsonMax",null);pt(r,{useLimitSafe:!0})||(r=6),r=Dt(r);let o=ge(t,"lengthMessageMax",null);pt(o,{useLimitSafe:!0})||(o=0),o=Dt(o);let l={useCause:s,useAggregate:n,levelCauseMax:i,levelJsonMax:r,lengthMessageMax:o},a="";try{a=ds(e,l)}catch(e){return a="",a}return Be(a)?(l.lengthMessageMax>0&&a.length>l.lengthMessageMax&&(a=l.lengthMessageMax>3?a.slice(0,l.lengthMessageMax-3)+"...":a.slice(0,l.lengthMessageMax)),a):(a="",a)}function Is(e){if(!(Be(e)||dt(e)||b(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 ys={exports:{}};var gs,Ls={exports:{}},ms=Kt(Object.freeze({__proto__:null,default:{}}));function Ds(){return gs||(gs=1,function(e){var t;e.exports=(t=t||function(e,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&void 0!==Gt&&Gt.crypto&&(s=Gt.crypto),!s)try{s=ms}catch(e){}var n=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof s.randomBytes)try{return s.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 s;return e.prototype=t,s=new e,e.prototype=null,s}}(),r={},o=r.lib={},l=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)}},a=o.WordArray=l.extend({init:function(e,s){e=this.words=e||[],this.sigBytes=s!=t?s:4*e.length},toString:function(e){return(e||M).stringify(this)},concat:function(e){var t=this.words,s=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var r=0;r<i;r++){var o=s[r>>>2]>>>24-r%4*8&255;t[n+r>>>2]|=o<<24-(n+r)%4*8}else for(var l=0;l<i;l+=4)t[n+l>>>2]=s[l>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=l.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],s=0;s<e;s+=4)t.push(n());return new a.init(t,e)}}),c=r.enc={},M=c.Hex={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],i=0;i<s;i++){var r=t[i>>>2]>>>24-i%4*8&255;n.push((r>>>4).toString(16)),n.push((15&r).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n<t;n+=2)s[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new a.init(s,t/2)}},u=c.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],i=0;i<s;i++){var r=t[i>>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(r))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n<t;n++)s[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new a.init(s,t)}},d=c.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},w=o.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=d.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s,n=this._data,i=n.words,r=n.sigBytes,o=this.blockSize,l=r/(4*o),c=(l=t?e.ceil(l):e.max((0|l)-this._minBufferSize,0))*o,M=e.min(4*c,r);if(c){for(var u=0;u<c;u+=o)this._doProcessBlock(i,u);s=i.splice(0,c),n.sigBytes-=M}return new a.init(s,M)},clone:function(){var e=l.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=w.extend({cfg:l.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){w.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,s){return new e.init(s).finalize(t)}},_createHmacHelper:function(e){return function(t,s){return new I.HMAC.init(e,s).finalize(t)}}});var I=r.algo={};return r}(Math),t)}(Ls)),Ls.exports}!function(e){e.exports=Ds().enc.Utf8}(ys);var ps=Wt(ys.exports),Cs={exports:{}};!function(e){var t;e.exports=(t=Ds(),function(){var e=t,s=e.lib.WordArray;function n(e,t,n){for(var i=[],r=0,o=0;o<t;o++)if(o%4){var l=n[e.charCodeAt(o-1)]<<o%4*2|n[e.charCodeAt(o)]>>>6-o%4*2;i[r>>>2]|=l<<24-r%4*8,r++}return s.create(i,r)}e.enc.Base64={stringify:function(e){var t=e.words,s=e.sigBytes,n=this._map;e.clamp();for(var i=[],r=0;r<s;r+=3)for(var o=(t[r>>>2]>>>24-r%4*8&255)<<16|(t[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|t[r+2>>>2]>>>24-(r+2)%4*8&255,l=0;l<4&&r+.75*l<s;l++)i.push(n.charAt(o>>>6*(3-l)&63));var a=n.charAt(64);if(a)for(;i.length%4;)i.push(a);return i.join("")},parse:function(e){var t=e.length,s=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var r=0;r<s.length;r++)i[s.charCodeAt(r)]=r}var o=s.charAt(64);if(o){var l=e.indexOf(o);-1!==l&&(t=l)}return n(e,t,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),t.enc.Base64)}(Cs);var hs=Wt(Cs.exports);function fs(e,t){for(var s=-1,n=null==e?0:e.length;++s<n&&!1!==t(e[s],s,e););return e}var bs,Ns=function(e,t,s){for(var n=-1,i=Object(e),r=s(e),o=r.length;o--;){var l=r[bs?o:++n];if(!1===t(i[l],l,i))break}return e};var xs=function(e,t){return function(s,n){if(null==s)return s;if(!Je(s))return e(s,n);for(var i=s.length,r=t?i:-1,o=Object(s);(t?r--:++r<i)&&!1!==n(o[r],r,o););return s}}(function(e,t){return e&&Ns(e,t,Oe)}),Ts=xs;function Zs(e){return e}function Ss(e,t){var s;return(u(e)?fs:Ts)(e,"function"==typeof(s=t)?s:Zs)}function As(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 Ys(e){return"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function Xs(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)}function vs(e){return"[object Uint16Array]"===Object.prototype.toString.call(e)}function zs(e){if(!(Ys(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)||Xs(e)||vs(e)))return null;try{if(dt(e.byteLength))return e.byteLength}catch(e){}try{if(dt(e.length))return e.length}catch(e){}try{if(dt(e.size))return e.size}catch(e){}return null}function Es(e,t={}){let s=ge(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:{results:"",binarys:[]};if(!_e(e)&&!qt(e))return n("invalid data, data is not an object or array");if(ts(e)||ss(e))return n("invalid data, data is an empty object or empty array");let i=/^(?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,r="",o=[];try{let t=-1;r=JSON.stringify(e,function(e,s){if(Xs(s)){t+=1;let e=`[BlazeForUint8Array]::${t}`;return o.push(s),e}if(vs(s)){t+=1;let e=`[BlazeForUint16Array]::${t}`;return o.push(s),e}if(Ys(s)){t+=1;let e=`[BlazeForArrayBuffer]::${t}`;return o.push(s),e}return function(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}(s)&&(s=s.toString===Object.prototype.toString?Error.prototype.toString.call(s):s.toString()),Be(s)&&91===s.charCodeAt(0)&&i.test(s)?"[BlazeForPreventEscape]"+s:s})}catch(e){return n(As(e))}return s?{state:"success",msg:{results:r,binarys:o}}:{results:r,binarys:o}}let js=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/;function Gs(e,t={}){let s=ge(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:new Uint8Array;if(!Be(e))return n("invalid str");if(!("function"==typeof e.isWellFormed?e.isWellFormed():!js.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 s?{state:"success",msg:i}:i}function Ws(e,t,s=0,n=!0,i=52,r=8){return function(e,t,s,n,i,r){if(!dt(e))return null;if(!Xs(t))return null;if(!It(s))return null;if(!Pe(n))return null;if(!It(i))return null;if(!It(r))return null;let o,l,a;e=wt(e);let c=8*r-i-1,M=(1<<c)-1,u=M>>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,w=n?r-1:0,I=n?-1:1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(l=isNaN(e)?1:0,o=M):(o=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-o))<1&&(o--,a*=2),(e+=o+u>=1?d/a:d*Math.pow(2,1-u))*a>=2&&(o++,a/=2),o+u>=M?(l=0,o=M):o+u>=1?(l=(e*a-1)*Math.pow(2,i),o+=u):(l=e*Math.pow(2,u-1)*Math.pow(2,i),o=0));i>=8;t[s+w]=255&l,w+=I,l/=256,i-=8);for(o=o<<i|l,c+=i;c>0;t[s+w]=255&o,w+=I,o/=256,c-=8);return t[s+w-I]|=128*y,null}(e,t,s,n,i,r)}function Ks(e){let t=0;Ss(e,e=>{t+=zs(e)});let s=new Uint8Array(t),n=0;return Ss(e,e=>{let t=function(e){return Ys(e)?new Uint8Array(e):ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0)}(e);s.set(t,n),n+=t.length}),s}function ks(e,t={}){let s=[],n=new Uint8Array,i=ge(t,"returnWithStateAndMsg",null);Pe(i)||(i=!1);let r=e=>i?{state:"error",msg:e}:new Uint8Array;if(!(o=e,qt(o)&&o.length>=1||qe(e)))return r("invalid data, data is not an effective object or a non-empty array");var o;let l=[],a=[];function c(e){l.push(zs(e)),a.push(e)}try{let t=Es(e,{returnWithStateAndMsg:!0});if("error"===t.state)return r(`obj2stru8arr: ${t.msg}`);let i=t.msg;c(Gs(i.results)),Ss(i.binarys,e=>{c(e)});let o=l,M=Gs(JSON.stringify(o)),u=new Uint8Array(8);Ws(zs(M),u),s.push(u),s.push(M),Ss(a,e=>{s.push(e)}),n=Ks(s)}catch(e){return r(As(e))}return i?{state:"success",msg:n}:n}function Vs(e,t=0,s=!0,n=52,i=8){return function(e,t,s,n,i){if(!Xs(e))return null;if(!It(t))return null;if(!Pe(s))return null;if(!It(n))return null;if(!It(i))return null;let r,o,l=8*i-n-1,a=(1<<l)-1,c=a>>1,M=-7,u=s?0:i-1,d=s?1:-1,w=e[t+u];for(u+=d,r=w&(1<<-M)-1,w>>=-M,M+=l;M>0;r=256*r+e[t+u],u+=d,M-=8);for(o=r&(1<<-M)-1,r>>=-M,M+=n;M>0;o=256*o+e[t+u],u+=d,M-=8);if(0===r)r=1-c;else{if(r===a)return o?NaN:1/0*(w?-1:1);o+=Math.pow(2,n),r-=c}return(w?-1:1)*o*Math.pow(2,r-n)}(e,t,s,n,i)}function Us(e,t={}){let s=ge(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:"";if(!Xs(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 s?{state:"success",msg:i}:i}function Qs(e,t={}){let s=ge(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:{};if(!qe(e))return n("invalid data");let i=null,r=null;try{i=e.results,r=e.binarys}catch(e){return n(As(e))}if(!Be(i))return n("invalid results");if(!qt(r))return n("invalid binarys");let o=/^\[BlazeFor(Uint8Array|Uint16Array|ArrayBuffer)\]::(\d+)$/,l=/^\[BlazeForPreventEscape\](?:\[BlazeForPreventEscape\])*\[BlazeFor(?:Uint8Array|Uint16Array|ArrayBuffer)\]::\d+$/,a={};try{a=JSON.parse(i,function(e,t){if(!Be(t)||91!==t.charCodeAt(0))return t;let s=o.exec(t);if(null===s)return l.test(t)?t.slice(23):t;let n=Number(s[2]);if(n>=r.length)throw new Error(`binary index out of range[${n}], binarys.length[${r.length}]`);return((e,t,s)=>{if("Uint16Array"===e&&!vs(s)){if(!Xs(s))throw new Error(`binarys[${t}] can not be restored to Uint16Array`);if(s.byteLength%2!=0)throw new Error(`binarys[${t}] byteLength[${s.byteLength}] is not even, can not be restored to Uint16Array`);let e=0===s.byteOffset&&s.byteLength===s.buffer.byteLength?s:new Uint8Array(s);return new Uint16Array(e.buffer)}if("ArrayBuffer"===e&&!Ys(s)){if(!Xs(s))throw new Error(`binarys[${t}] can not be restored to ArrayBuffer`);return s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength)}return s})(s[1],n,r[n])})}catch(e){return n(As(e))}return s?{state:"success",msg:a}:a}function Hs(e,t={}){let s={},n=ge(t,"returnWithStateAndMsg",null);Pe(n)||(n=!1);let i=e=>n?{state:"error",msg:e}:{};if(!Xs(e))return i("invalid u8a");try{let t=8,n=e.slice(0,t),r=e.slice(t,zs(e)),o=Vs(n),l=r.slice(0,o),a=r.slice(o,zs(r)),c=Us(l,{returnWithStateAndMsg:!0});if("error"===c.state)return i(`u8arr2str: ${c.msg}`);let M=c.msg,u=function(e,t){let s=0,n=0,i=[];return Ss(t,t=>{n=s+t;let r=e.slice(s,n);s=n,i.push(r)}),i}(a,JSON.parse(M)),d=Us(u.shift(),{returnWithStateAndMsg:!0});if("error"===d.state)return i(`u8arr2str: ${d.msg}`);let w=Qs({results:d.msg,binarys:u},{returnWithStateAndMsg:!0});if("error"===w.state)return i(`stru8arr2obj: ${w.msg}`);s=w.msg}catch(e){return i(As(e))}return n?{state:"success",msg:s}:s}function Rs(e){return function(e,t={}){let s=ge(t,"fs");if(Pt(e,{fs:s}))return{success:"input folder is already exists: "+e};if(Ot(e,{fs:s}))return{error:"input path already exists: "+e};try{s.mkdirSync(e,{recursive:!0})}catch(e){return{error:e}}return{success:"done: "+e}}(e,{fs:t})}function Js(e){return function(e,t={}){let s=ge(t,"fs");if(!Ot(e,{fs:s}))return{success:"file does not exist: "+e};if(!Bt(e,{fs:s}))return{error:"input path is not a file: "+e};try{s.unlinkSync(e)}catch(e){return{error:e}}return{success:"done: "+e}}(e,{fs:t})}function Os(e){return Be(e)&&e.length<=128&&/^[A-Za-z0-9]+$/.test(e)}let Ps={permission:200,param:200,app:200,output:200,packet:200,internal:200},Fs={main:{event:"execute",apiType:"main",api:"apiMain",authFrom:"header",statusOf:Ps},ulctr:{event:"upload",apiType:"upload-controller",api:"apiUploadCheck",authFrom:"header",statusOf:Ps},slc:{event:"upload",apiType:"upload-slice",api:"apiUploadSlice",authFrom:"header",statusOf:Ps},dwgfn:{event:"download",apiType:"download-get-filename",api:"apiDownloadGetFilename",authFrom:"header",statusOf:Ps,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:Ps,fields:[{name:"streamRead"},{name:"filename"},{name:"fileSize"},{name:"fileType"}]}};var Bs=U(I,"DataView"),$s=U(I,"Promise"),_s=U(I,"Set"),qs=U(I,"WeakMap"),en="[object Map]",tn="[object Promise]",sn="[object Set]",nn="[object WeakMap]",rn="[object DataView]",on=z(Bs),ln=z($),an=z($s),cn=z(_s),Mn=z(qs),un=h;(Bs&&un(new Bs(new ArrayBuffer(1)))!=rn||$&&un(new $)!=en||$s&&un($s.resolve())!=tn||_s&&un(new _s)!=sn||qs&&un(new qs)!=nn)&&(un=function(e){var t=h(e),s="[object Object]"==t?e.constructor:void 0,n=s?z(s):"";if(n)switch(n){case on:return rn;case ln:return en;case an:return tn;case cn:return sn;case Mn:return nn}return t});var dn=un;function wn(e){return function(t){return null==t?void 0:t[e]}}var In=wn("length"),yn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");function gn(e){return yn.test(e)}var Ln="\\ud800-\\udfff",mn="["+Ln+"]",Dn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",pn="\\ud83c[\\udffb-\\udfff]",Cn="[^"+Ln+"]",hn="(?:\\ud83c[\\udde6-\\uddff]){2}",fn="[\\ud800-\\udbff][\\udc00-\\udfff]",bn="(?:"+Dn+"|"+pn+")"+"?",Nn="[\\ufe0e\\ufe0f]?",xn=Nn+bn+("(?:\\u200d(?:"+[Cn,hn,fn].join("|")+")"+Nn+bn+")*"),Tn="(?:"+[Cn+Dn+"?",Dn,hn,fn,mn].join("|")+")",Zn=RegExp(pn+"(?="+pn+")|"+Tn+xn,"g");function Sn(e){return gn(e)?function(e){for(var t=Zn.lastIndex=0;Zn.test(e);)++t;return t}(e):In(e)}function An(e){if(null==e)return 0;if(Je(e))return"string"==typeof(t=e)||!u(t)&&f(t)&&"[object String]"==h(t)?Sn(e):e.length;var t,s=dn(e);return"[object Map]"==s||"[object Set]"==s?e.size:Re(e).length}var Yn={exports:{}};!function(e){e.exports=function(){var e=1e3,t=6e4,s=36e5,n="millisecond",i="second",r="minute",o="hour",l="day",a="week",c="month",M="quarter",u="year",d="date",w="Invalid Date",I=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|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"],s=e%100;return"["+e+(t[(s-20)%10]||t[s]||t[0])+"]"}},L=function(e,t,s){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(s)+e},m={s:L,z:function(e){var t=-e.utcOffset(),s=Math.abs(t),n=Math.floor(s/60),i=s%60;return(t<=0?"+":"-")+L(n,2,"0")+":"+L(i,2,"0")},m:function e(t,s){if(t.date()<s.date())return-e(s,t);var n=12*(s.year()-t.year())+(s.month()-t.month()),i=t.clone().add(n,c),r=s-i<0,o=t.clone().add(n+(r?-1:1),c);return+(-(n+(s-i)/(r?i-o:o-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:c,y:u,w:a,d:l,D:d,h:o,m:r,s:i,ms:n,Q:M}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},D="en",p={};p[D]=g;var C="$isDayjsObject",h=function(e){return e instanceof x||!(!e||!e[C])},f=function e(t,s,n){var i;if(!t)return D;if("string"==typeof t){var r=t.toLowerCase();p[r]&&(i=r),s&&(p[r]=s,i=r);var o=t.split("-");if(!i&&o.length>1)return e(o[0])}else{var l=t.name;p[l]=t,i=l}return!n&&i&&(D=i),i||!n&&D},b=function(e,t){if(h(e))return e.clone();var s="object"==typeof t?t:{};return s.date=e,s.args=arguments,new x(s)},N=m;N.l=f,N.i=h,N.w=function(e,t){return b(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var x=function(){function g(e){this.$L=f(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[C]=!0}var L=g.prototype;return L.parse=function(e){this.$d=function(e){var t=e.date,s=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(I);if(n){var i=n[2]-1||0,r=(n[7]||"0").substring(0,3);return s?new Date(Date.UTC(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,r)):new Date(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,r)}}return new Date(t)}(e),this.init()},L.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()},L.$utils=function(){return N},L.isValid=function(){return!(this.$d.toString()===w)},L.isSame=function(e,t){var s=b(e);return this.startOf(t)<=s&&s<=this.endOf(t)},L.isAfter=function(e,t){return b(e)<this.startOf(t)},L.isBefore=function(e,t){return this.endOf(t)<b(e)},L.$g=function(e,t,s){return N.u(e)?this[t]:this.set(s,e)},L.unix=function(){return Math.floor(this.valueOf()/1e3)},L.valueOf=function(){return this.$d.getTime()},L.startOf=function(e,t){var s=this,n=!!N.u(t)||t,M=N.p(e),w=function(e,t){var i=N.w(s.$u?Date.UTC(s.$y,t,e):new Date(s.$y,t,e),s);return n?i:i.endOf(l)},I=function(e,t){return N.w(s.toDate()[e].apply(s.toDate("s"),(n?[0,0,0,0]:[23,59,59,999]).slice(t)),s)},y=this.$W,g=this.$M,L=this.$D,m="set"+(this.$u?"UTC":"");switch(M){case u:return n?w(1,0):w(31,11);case c:return n?w(1,g):w(0,g+1);case a:var D=this.$locale().weekStart||0,p=(y<D?y+7:y)-D;return w(n?L-p:L+(6-p),g);case l:case d:return I(m+"Hours",0);case o:return I(m+"Minutes",1);case r:return I(m+"Seconds",2);case i:return I(m+"Milliseconds",3);default:return this.clone()}},L.endOf=function(e){return this.startOf(e,!1)},L.$set=function(e,t){var s,a=N.p(e),M="set"+(this.$u?"UTC":""),w=(s={},s[l]=M+"Date",s[d]=M+"Date",s[c]=M+"Month",s[u]=M+"FullYear",s[o]=M+"Hours",s[r]=M+"Minutes",s[i]=M+"Seconds",s[n]=M+"Milliseconds",s)[a],I=a===l?this.$D+(t-this.$W):t;if(a===c||a===u){var y=this.clone().set(d,1);y.$d[w](I),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else w&&this.$d[w](I);return this.init(),this},L.set=function(e,t){return this.clone().$set(e,t)},L.get=function(e){return this[N.p(e)]()},L.add=function(n,M){var d,w=this;n=Number(n);var I=N.p(M),y=function(e){var t=b(w);return N.w(t.date(t.date()+Math.round(e*n)),w)};if(I===c)return this.set(c,this.$M+n);if(I===u)return this.set(u,this.$y+n);if(I===l)return y(1);if(I===a)return y(7);var g=(d={},d[r]=t,d[o]=s,d[i]=e,d)[I]||1,L=this.$d.getTime()+n*g;return N.w(L,this)},L.subtract=function(e,t){return this.add(-1*e,t)},L.format=function(e){var t=this,s=this.$locale();if(!this.isValid())return s.invalidDate||w;var n=e||"YYYY-MM-DDTHH:mm:ssZ",i=N.z(this),r=this.$H,o=this.$m,l=this.$M,a=s.weekdays,c=s.months,M=s.meridiem,u=function(e,s,i,r){return e&&(e[s]||e(t,n))||i[s].slice(0,r)},d=function(e){return N.s(r%12||12,e,"0")},I=M||function(e,t,s){var n=e<12?"AM":"PM";return s?n.toLowerCase():n};return n.replace(y,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 l+1;case"MM":return N.s(l+1,2,"0");case"MMM":return u(s.monthsShort,l,c,3);case"MMMM":return u(c,l);case"D":return t.$D;case"DD":return N.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return u(s.weekdaysMin,t.$W,a,2);case"ddd":return u(s.weekdaysShort,t.$W,a,3);case"dddd":return a[t.$W];case"H":return String(r);case"HH":return N.s(r,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return I(r,o,!0);case"A":return I(r,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(":","")})},L.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},L.diff=function(n,d,w){var I,y=this,g=N.p(d),L=b(n),m=(L.utcOffset()-this.utcOffset())*t,D=this-L,p=function(){return N.m(y,L)};switch(g){case u:I=p()/12;break;case c:I=p();break;case M:I=p()/3;break;case a:I=(D-m)/6048e5;break;case l:I=(D-m)/864e5;break;case o:I=D/s;break;case r:I=D/t;break;case i:I=D/e;break;default:I=D}return w?I:N.a(I)},L.daysInMonth=function(){return this.endOf(c).$D},L.$locale=function(){return p[this.$L]},L.locale=function(e,t){if(!e)return this.$L;var s=this.clone(),n=f(e,t,!0);return n&&(s.$L=n),s},L.clone=function(){return N.w(this.$d,this)},L.toDate=function(){return new Date(this.valueOf())},L.toJSON=function(){return this.isValid()?this.toISOString():null},L.toISOString=function(){return this.$d.toISOString()},L.toString=function(){return this.$d.toUTCString()},g}(),T=x.prototype;return b.prototype=T,[["$ms",n],["$s",i],["$m",r],["$H",o],["$W",l],["$M",c],["$y",u],["$D",d]].forEach(function(e){T[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),b.extend=function(e,t){return e.$i||(e(t,x,b),e.$i=!0),b},b.locale=f,b.isDayjs=h,b.unix=function(e){return b(1e3*e)},b.en=p[D],b.Ls=p,b.p={},b}()}(Yn);var Xn=Wt(Yn.exports);let vn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),zn=vn.length;function En(e=32){let t=[];e=pt(e)?Dt(e):32;for(let s=0;s<e;s++)t[s]=vn[0|Math.random()*zn];return t.join("")}function jn(e){var t=this.__data__=new B(e);this.size=t.size}jn.prototype.clear=function(){this.__data__=new B,this.size=0},jn.prototype.delete=function(e){var t=this.__data__,s=t.delete(e);return this.size=t.size,s},jn.prototype.get=function(e){return this.__data__.get(e)},jn.prototype.has=function(e){return this.__data__.has(e)},jn.prototype.set=function(e,t){var s=this.__data__;if(s instanceof B){var n=s.__data__;if(!$||n.length<199)return n.push([e,t]),this.size=++s.size,this;s=this.__data__=new q(n)}return s.set(e,t),this.size=s.size,this};function Gn(e){var t=-1,s=null==e?0:e.length;for(this.__data__=new q;++t<s;)this.add(e[t])}function Wn(e,t){for(var s=-1,n=null==e?0:e.length;++s<n;)if(t(e[s],s,e))return!0;return!1}function Kn(e,t){return e.has(t)}Gn.prototype.add=Gn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Gn.prototype.has=function(e){return this.__data__.has(e)};function kn(e,t,s,n,i,r){var o=1&s,l=e.length,a=t.length;if(l!=a&&!(o&&a>l))return!1;var c=r.get(e),M=r.get(t);if(c&&M)return c==t&&M==e;var u=-1,d=!0,w=2&s?new Gn:void 0;for(r.set(e,t),r.set(t,e);++u<l;){var I=e[u],y=t[u];if(n)var g=o?n(y,I,u,t,e,r):n(I,y,u,e,t,r);if(void 0!==g){if(g)continue;d=!1;break}if(w){if(!Wn(t,function(e,t){if(!Kn(w,t)&&(I===e||i(I,e,s,n,r)))return w.push(t)})){d=!1;break}}else if(I!==y&&!i(I,y,s,n,r)){d=!1;break}}return r.delete(e),r.delete(t),d}var Vn=I.Uint8Array;function Un(e){var t=-1,s=Array(e.size);return e.forEach(function(e,n){s[++t]=[n,e]}),s}function Qn(e){var t=-1,s=Array(e.size);return e.forEach(function(e){s[++t]=e}),s}var Hn=y?y.prototype:void 0,Rn=Hn?Hn.valueOf:void 0;function Jn(e,t){for(var s=-1,n=t.length,i=e.length;++s<n;)e[i+s]=t[s];return e}function On(e,t,s){var n=t(e);return u(e)?n:Jn(n,s(e))}function Pn(e,t){for(var s=-1,n=null==e?0:e.length,i=0,r=[];++s<n;){var o=e[s];t(o,s,e)&&(r[i++]=o)}return r}function Fn(){return[]}var Bn=Object.prototype.propertyIsEnumerable,$n=Object.getOwnPropertySymbols,_n=$n?function(e){return null==e?[]:(e=Object(e),Pn($n(e),function(t){return Bn.call(e,t)}))}:Fn;function qn(e){return On(e,Oe,_n)}var ei=Object.prototype.hasOwnProperty;var ti="[object Arguments]",si="[object Array]",ni="[object Object]",ii=Object.prototype.hasOwnProperty;function ri(e,t,s,n,i,r){var o=u(e),l=u(t),a=o?si:dn(e),c=l?si:dn(t),M=(a=a==ti?ni:a)==ni,d=(c=c==ti?ni:c)==ni,w=a==c;if(w&&xe(e)){if(!xe(t))return!1;o=!0,M=!1}if(w&&!M)return r||(r=new jn),o||Ge(e)?kn(e,t,s,n,i,r):function(e,t,s,n,i,r,o){switch(s){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||!r(new Vn(e),new Vn(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return O(+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 l=Un;case"[object Set]":var a=1&n;if(l||(l=Qn),e.size!=t.size&&!a)return!1;var c=o.get(e);if(c)return c==t;n|=2,o.set(e,t);var M=kn(l(e),l(t),n,i,r,o);return o.delete(e),M;case"[object Symbol]":if(Rn)return Rn.call(e)==Rn.call(t)}return!1}(e,t,a,s,n,i,r);if(!(1&s)){var I=M&&ii.call(e,"__wrapped__"),y=d&&ii.call(t,"__wrapped__");if(I||y){var g=I?e.value():e,L=y?t.value():t;return r||(r=new jn),i(g,L,s,n,r)}}return!!w&&(r||(r=new jn),function(e,t,s,n,i,r){var o=1&s,l=qn(e),a=l.length;if(a!=qn(t).length&&!o)return!1;for(var c=a;c--;){var M=l[c];if(!(o?M in t:ei.call(t,M)))return!1}var u=r.get(e),d=r.get(t);if(u&&d)return u==t&&d==e;var w=!0;r.set(e,t),r.set(t,e);for(var I=o;++c<a;){var y=e[M=l[c]],g=t[M];if(n)var L=o?n(g,y,M,t,e,r):n(y,g,M,e,t,r);if(!(void 0===L?y===g||i(y,g,s,n,r):L)){w=!1;break}I||(I="constructor"==M)}if(w&&!I){var m=e.constructor,D=t.constructor;m==D||!("constructor"in e)||!("constructor"in t)||"function"==typeof m&&m instanceof m&&"function"==typeof D&&D instanceof D||(w=!1)}return r.delete(e),r.delete(t),w}(e,t,s,n,i,r))}function oi(e,t,s,n,i){return e===t||(null==e||null==t||!f(e)&&!f(t)?e!=e&&t!=t:ri(e,t,s,n,oi,i))}function li(e){return e==e&&!Z(e)}function ai(e,t){return function(s){return null!=s&&(s[e]===t&&(void 0!==t||e in Object(s)))}}function ci(e){var t=function(e){for(var t=Oe(e),s=t.length;s--;){var n=t[s],i=e[n];t[s]=[n,i,li(i)]}return t}(e);return 1==t.length&&t[0][2]?ai(t[0][0],t[0][1]):function(s){return s===e||function(e,t,s,n){var i=s.length,r=i,o=!n;if(null==e)return!r;for(e=Object(e);i--;){var l=s[i];if(o&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++i<r;){var a=(l=s[i])[0],c=e[a],M=l[1];if(o&&l[2]){if(void 0===c&&!(a in e))return!1}else{var u=new jn;if(n)var d=n(c,M,a,e,t,u);if(!(void 0===d?oi(M,c,3,n,u):d))return!1}}return!0}(s,e,t)}}function Mi(e,t){return null!=e&&t in Object(e)}function ui(e,t){return null!=e&&function(e,t,s){for(var n=-1,i=(t=we(t,e)).length,r=!1;++n<i;){var o=Ie(t[n]);if(!(r=null!=e&&s(e,o)))break;e=e[o]}return r||++n!=i?r:!!(i=null==e?0:e.length)&&Se(i)&&Ze(o,i)&&(u(e)||he(e))}(e,t,Mi)}function di(e){return T(e)?wn(Ie(e)):function(e){return function(t){return ye(t,e)}}(e)}function wi(e){return"function"==typeof e?e:null==e?Zs:"object"==typeof e?u(e)?function(e,t){return T(e)&&li(t)?ai(Ie(e),t):function(s){var n=ge(s,e);return void 0===n&&n===t?ui(s,e):oi(t,n,3)}}(e[0],e[1]):ci(e):di(e)}function Ii(e,t){var s=-1,n=Je(e)?Array(e.length):[];return Ts(e,function(e,i,r){n[++s]=t(e,i,r)}),n}function yi(e,t){return(u(e)?ae:Ii)(e,wi(t))}function gi(e,t,s){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(s=s>i?i:s)<0&&(s+=i),i=t>s?0:s-t>>>0,t>>>=0;for(var r=Array(i);++n<i;)r[n]=e[n+t];return r}function Li(e,t,s){var n=e.length;return s=void 0===s?n:s,!t&&s>=n?e:gi(e,t,s)}function mi(e){return e!=e}function Di(e,t,s){return t==t?function(e,t,s){for(var n=s-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}(e,t,s):function(e,t,s,n){for(var i=e.length,r=s+(n?1:-1);n?r--:++r<i;)if(t(e[r],r,e))return r;return-1}(e,mi,s)}var pi="\\ud800-\\udfff",Ci="["+pi+"]",hi="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",fi="\\ud83c[\\udffb-\\udfff]",bi="[^"+pi+"]",Ni="(?:\\ud83c[\\udde6-\\uddff]){2}",xi="[\\ud800-\\udbff][\\udc00-\\udfff]",Ti="(?:"+hi+"|"+fi+")"+"?",Zi="[\\ufe0e\\ufe0f]?",Si=Zi+Ti+("(?:\\u200d(?:"+[bi,Ni,xi].join("|")+")"+Zi+Ti+")*"),Ai="(?:"+[bi+hi+"?",hi,Ni,xi,Ci].join("|")+")",Yi=RegExp(fi+"(?="+fi+")|"+Ai+Si,"g");function Xi(e){return gn(e)?function(e){return e.match(Yi)||[]}(e):function(e){return e.split("")}(e)}function vi(e,t,s){if((e=de(e))&&(s||void 0===t))return st(e);if(!e||!(t=ue(t)))return e;var n=Xi(e),i=Xi(t),r=function(e,t){for(var s=-1,n=e.length;++s<n&&Di(t,e[s],0)>-1;);return s}(n,i),o=function(e,t){for(var s=e.length;s--&&Di(t,e[s],0)>-1;);return s}(n,i)+1;return Li(n,r,o).join("")}function zi(e,t){if(!Be(e))return[];if(!Be(t))return[];let s=function(e,t){return Be(e)&&Be(t)?e.split(t):[]}(e,t);s=yi(s,vi);let n=[];return Ss(s,function(e){Be(e)&&n.push(e)}),n}const Ei=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 ji(e,t={}){let s=ge(t,"fs"),n=ge(t,"chunkSize");if(dt(n)||(n=67108864),n=wt(n),!Bt(e,{fs:s}))return Promise.reject("fp is not a file");let i=zt();try{let{create64:t}=await async function(){return function(e){const{exports:{mem:t,xxh32:s,xxh64:n,init32:i,update32:r,digest32:o,init64:l,update64:a,digest64:c}}=e;let M=new Uint8Array(t.buffer);function u(e,s){if(t.buffer.byteLength<e+s){const n=Math.ceil((e+s-t.buffer.byteLength)/65536);t.grow(n),M=new Uint8Array(t.buffer)}}function d(e,t,s,n,i,r){u(e);const o=new Uint8Array(e);return M.set(o),s(0,t),o.set(M.subarray(0,e)),{update(t){let s;return M.set(o),"string"==typeof t?(u(3*t.length,e),s=g.encodeInto(t,M.subarray(e)).written):(u(t.byteLength,e),M.set(t,e),s=t.byteLength),n(0,e,s),o.set(M.subarray(0,e)),this},digest:()=>(M.set(o),r(i(0)))}}function w(e){return e>>>0}const I=2n**64n-1n;function y(e){return e&I}const g=new TextEncoder;function L(e,t=0){return u(3*e.length,0),w(s(0,g.encodeInto(e,M).written,t))}function m(e,t=0n){return u(3*e.length,0),y(n(0,g.encodeInto(e,M).written,t))}return{h32:L,h32ToString:(e,t=0)=>L(e,t).toString(16).padStart(8,"0"),h32Raw:(e,t=0)=>(u(e.byteLength,0),M.set(e),w(s(0,e.byteLength,t))),create32:(e=0)=>d(48,e,i,r,o,w),h64:m,h64ToString:(e,t=0n)=>m(e,t).toString(16).padStart(16,"0"),h64Raw:(e,t=0n)=>(u(e.byteLength,0),M.set(e),y(n(0,e.byteLength,t))),create64:(e=0n)=>d(88,e,l,a,c,y)}}((await WebAssembly.instantiate(Ei)).instance)}(),r=t(),o=s.createReadStream(e,{highWaterMark:n});o.on("data",e=>{r.update(e)}),o.on("end",()=>{let e=r.digest().toString(16).padStart(16,"0");i.resolve(e)}),o.on("error",i.reject)}catch(e){i.reject(As(e))}return i}var Gi={exports:{}};!function(e){var t,s;e.exports=(t=o,s={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new i(n,r||e,o),a=s?s+t:t;return e._events[a]?e._events[a].fn?e._events[a]=[e._events[a],l]:e._events[a].push(l):(e._events[a]=l,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),l.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},l.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,o=new Array(r);i<r;i++)o[i]=n[i].fn;return o},l.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,i,r,o){var l=s?s+e:e;if(!this._events[l])return!1;var a,c,M=this._events[l],u=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),u){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,o),!0}for(c=1,a=new Array(u-1);c<u;c++)a[c-1]=arguments[c];M.fn.apply(M.context,a)}else{var d,w=M.length;for(c=0;c<w;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),u){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!a)for(d=1,a=new Array(u-1);d<u;d++)a[d-1]=arguments[d];M[c].fn.apply(M[c].context,a)}}return!0},l.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},l.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},l.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return o(this,r),this;var l=this._events[r];if(l.fn)l.fn!==t||i&&!l.once||n&&l.context!==n||o(this,r);else{for(var a=0,c=[],M=l.length;a<M;a++)(l[a].fn!==t||i&&!l[a].once||n&&l[a].context!==n)&&c.push(l[a]);c.length?this._events[r]=1===c.length?c[0]:c:o(this,r)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=s,l.EventEmitter=l,e.exports=l}({get exports(){return t},set exports(e){t=e}});var s=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/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpLHI9cmVxdWlyZSgiZXZlbnRzIiksbj1BcnJheS5pc0FycmF5LGk9Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLG89Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1PWl8fG98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYT11LlN5bWJvbCxjPU9iamVjdC5wcm90b3R5cGUscz1jLmhhc093blByb3BlcnR5LGY9Yy50b1N0cmluZyxsPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgcD0iW29iamVjdCBOdWxsXSIseT0iW29iamVjdCBVbmRlZmluZWRdIix2PWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10P3k6cDp2JiZ2IGluIE9iamVjdCh0KT9mdW5jdGlvbih0KXt2YXIgZT1zLmNhbGwodCxsKSxyPXRbbF07dHJ5e3RbbF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKHQpe312YXIgaT1mLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbbF09cjpkZWxldGUgdFtsXSksaX0odCk6ZnVuY3Rpb24odCl7cmV0dXJuIGguY2FsbCh0KX0odCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBkPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIF8odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxiKHQpJiZnKHQpPT1kfXZhciBTPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGo9L15cdyokLztmdW5jdGlvbiBtKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PWV8fCJmdW5jdGlvbiI9PWUpfXZhciB3PSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixPPSJbb2JqZWN0IEZ1bmN0aW9uXSIsRT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLE49IltvYmplY3QgUHJveHldIjt2YXIgQSxSPXVbIl9fY29yZS1qc19zaGFyZWRfXyJdLCQ9KEE9L1teLl0rJC8uZXhlYyhSJiZSLmtleXMmJlIua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0E6IiI7dmFyIHg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBJPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHo9RnVuY3Rpb24ucHJvdG90eXBlLEY9T2JqZWN0LnByb3RvdHlwZSxMPXoudG9TdHJpbmcsUD1GLmhhc093blByb3BlcnR5LFQ9UmVnRXhwKCJeIitMLmNhbGwoUCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gTSh0KXtpZighbSh0KXx8KGU9dCwkJiYkIGluIGUpKXJldHVybiExO3ZhciBlLHI9ZnVuY3Rpb24odCl7aWYoIW0odCkpcmV0dXJuITE7dmFyIGU9Zyh0KTtyZXR1cm4gZT09T3x8ZT09RXx8ZT09d3x8ZT09Tn0odCk/VDpJO3JldHVybiByLnRlc3QoZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiB4LmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifSh0KSl9ZnVuY3Rpb24gayh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbZV19KHQsZSk7cmV0dXJuIE0ocik/cjp2b2lkIDB9dmFyIFU9ayhPYmplY3QsImNyZWF0ZSIpO3ZhciBDPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIEc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHEodCxlKXtmb3IodmFyIHIsbixpPXQubGVuZ3RoO2ktLTspaWYoKHI9dFtpXVswXSk9PT0obj1lKXx8ciE9ciYmbiE9bilyZXR1cm4gaTtyZXR1cm4tMX1XLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189VT9VKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxXLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LFcucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKFUpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gQy5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9LFcucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiBVP3ZvaWQgMCE9PWVbdF06Ry5jYWxsKGUsdCl9LFcucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLHJbdF09VSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfTt2YXIgWD1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIEIodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19Qi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxCLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPXEoZSx0KTtyZXR1cm4hKHI8MCkmJihyPT1lLmxlbmd0aC0xP2UucG9wKCk6WC5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMCl9LEIucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9cShlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19LEIucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gcSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxCLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49cShyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfTt2YXIgRD1rKHUsIk1hcCIpO2Z1bmN0aW9uIEgodCxlKXt2YXIgcixuLGk9dC5fX2RhdGFfXztyZXR1cm4oInN0cmluZyI9PShuPXR5cGVvZihyPWUpKXx8Im51bWJlciI9PW58fCJzeW1ib2wiPT1ufHwiYm9vbGVhbiI9PW4/Il9fcHJvdG9fXyIhPT1yOm51bGw9PT1yKT9pWyJzdHJpbmciPT10eXBlb2YgZT8ic3RyaW5nIjoiaGFzaCJdOmkubWFwfWZ1bmN0aW9uIEoodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19Si5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBXLG1hcDpuZXcoRHx8Qiksc3RyaW5nOm5ldyBXfX0sSi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPUgodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sSi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMsdCkuZ2V0KHQpfSxKLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIEgodGhpcyx0KS5oYXModCl9LEoucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPUgodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307dmFyIEs9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIFEodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihLKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sbz1yLmNhY2hlO2lmKG8uaGFzKGkpKXJldHVybiBvLmdldChpKTt2YXIgdT10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9by5zZXQoaSx1KXx8byx1fTtyZXR1cm4gci5jYWNoZT1uZXcoUS5DYWNoZXx8Sikscn1RLkNhY2hlPUo7dmFyIFYsWSxaLHR0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGV0PS9cXChcXCk/L2cscnQ9KFY9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZSh0dCwoZnVuY3Rpb24odCxyLG4saSl7ZS5wdXNoKG4/aS5yZXBsYWNlKGV0LCIkMSIpOnJ8fHQpfSkpLGV9LFk9UShWLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09Wi5zaXplJiZaLmNsZWFyKCksdH0pKSxaPVkuY2FjaGUsWSksbnQ9cnQ7dmFyIGl0PTEvMCxvdD1hP2EucHJvdG90eXBlOnZvaWQgMCx1dD1vdD9vdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gYXQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG4odCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09ZSh0W3JdLHIsdCk7cmV0dXJuIGl9KHQsYXQpKyIiO2lmKF8odCkpcmV0dXJuIHV0P3V0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LWl0PyItMCI6ZX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gbnVsbD09dD8iIjphdCh0KX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiBuKHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihuKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFfKHQpKXx8ai50ZXN0KHQpfHwhUy50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX0odCxlKT9bdF06bnQoY3QodCkpfXZhciBmdD0xLzA7ZnVuY3Rpb24gbHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxfKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1mdD8iLTAiOmV9ZnVuY3Rpb24gaHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1zdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbbHQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufWZ1bmN0aW9uIHB0KHQsZT17fSl7bGV0IHI9aHQoZSwiZnMiKSxuPSExO3RyeXtyLnN0YXRTeW5jKHQpLG49ITB9Y2F0Y2h7bj0hMX1yZXR1cm4gbn1mdW5jdGlvbiB5dCh0LGU9e30pe2xldCByPWh0KGUsImZzIik7cmV0dXJuISFwdCh0LHtmczpyfSkmJighci5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIXIubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCkpfWZ1bmN0aW9uIHZ0KCl7bGV0IHQsZSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbigpe3Q9YXJndW1lbnRzWzBdLGU9YXJndW1lbnRzWzFdfSkpO3JldHVybiByLnJlc29sdmU9dCxyLnJlamVjdD1lLHJ9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBidCh0KXtpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2ZvcihsZXQgZSBpbiB0KXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGR0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF90KHQpe3JldHVybiB0IT10fWZ1bmN0aW9uIFN0KHQpe3JldHVybiEhZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgVW5kZWZpbmVkXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdWxsXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFidCh0KXx8KCEhZnVuY3Rpb24odCl7cmV0dXJuISghZHQodCl8fCIiIT09dCl9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4hIWd0KHQpJiYwPT09dC5sZW5ndGh9KHQpfHwhIV90KHQpKSkpKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4hKCFkdCh0KXx8IiI9PT10KX12YXIgbXQ9L1xzLzt2YXIgd3Q9L15ccysvO2Z1bmN0aW9uIE90KHQpe3JldHVybiB0P3Quc2xpY2UoMCxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZtdC50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfSh0KSsxKS5yZXBsYWNlKHd0LCIiKTp0fXZhciBFdD1OYU4sTnQ9L15bLStdMHhbMC05YS1mXSskL2ksQXQ9L14wYlswMV0rJC9pLFJ0PS9eMG9bMC03XSskL2ksJHQ9cGFyc2VJbnQ7ZnVuY3Rpb24geHQodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKF8odCkpcmV0dXJuIEV0O2lmKG0odCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PW0oZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PU90KHQpO3ZhciByPUF0LnRlc3QodCk7cmV0dXJuIHJ8fFJ0LnRlc3QodCk/JHQodC5zbGljZSgyKSxyPzI6OCk6TnQudGVzdCh0KT9FdDordH12YXIgSXQ9MS8wLHp0PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBGdCh0KXtyZXR1cm4gdD8odD14dCh0KSk9PT1JdHx8dD09PS1JdD8odDwwPy0xOjEpKnp0OnQ9PXQ/dDowOjA9PT10P3Q6MH1mdW5jdGlvbiBMdCh0KXt2YXIgZT1GdCh0KSxyPWUlMTtyZXR1cm4gZT09ZT9yP2UtcjplOjB9dmFyIFB0PSJbb2JqZWN0IEJvb2xlYW5dIjtmdW5jdGlvbiBUdCh0KXtyZXR1cm4hMD09PShlPXQpfHwhMT09PWV8fGIoZSkmJmcoZSk9PVB0O3ZhciBlfWZ1bmN0aW9uIE10KHQpe2xldCBlPSExO2lmKGp0KHQpKXtpZigiIj09PXQudHJpbSgpKXJldHVybiExO2U9IWlzTmFOKE51bWJlcih0KSl9ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2lmKF90KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9ZnVuY3Rpb24ga3QodCl7aWYoIU10KHQpKXJldHVybiAwO3JldHVybiBGdCh0KX1mdW5jdGlvbiBVdCh0LGU9e30pe2xldCByPWh0KGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7cmV0dXJuIFR0KHIpfHwocj0hMSksISFNdCh0KSYmKHQ9a3QodCkscj9OdW1iZXIuaXNTYWZlSW50ZWdlcih0KToibnVtYmVyIj09dHlwZW9mKG49dCkmJm49PUx0KG4pKTt2YXIgbn12YXIgQ3Q9dS5pc0Zpbml0ZSxHdD1NYXRoLm1pbjt2YXIgV3Q9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aFt0XTtyZXR1cm4gZnVuY3Rpb24odCxyKXtpZih0PXh0KHQpLChyPW51bGw9PXI/MDpHdChMdChyKSwyOTIpKSYmQ3QodCkpe3ZhciBuPShjdCh0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygobj0oY3QoZShuWzBdKyJlIisoK25bMV0rcikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK25bMV0tcikpfXJldHVybiBlKHQpfX0oInJvdW5kIikscXQ9V3Q7ZnVuY3Rpb24gWHQodCxlPXt9KXtsZXQgcj1odChlLCJ1c2VDbGFtcFNhZmUiLG51bGwpO1R0KHIpfHwocj0hMSk7bGV0IG49aHQoZSwidXNlTGltaXRTYWZlIixudWxsKTtUdChuKXx8KG49ITEpO2xldCBpPWh0KGUsInJldHVybldpdGhTdGF0ZUFuZE1zZyIsbnVsbCk7VHQoaSl8fChpPSExKTtsZXQgbz10PT5pP3tzdGF0ZToic3VjY2VzcyIsbXNnOnR9OnQsdT10PT57aWYoaSlyZXR1cm57c3RhdGU6ImVycm9yIixtc2c6dH07dGhyb3cgbmV3IEVycm9yKHQpfTtpZighTXQodCkpcmV0dXJuIG8oMCk7bGV0IGE9bnVsbDt0cnl7dD1rdCh0KSxhPXF0KHQpLHImJihhPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2E9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI6YTxOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmKGE9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKX1jYXRjaCh0KXtyZXR1cm4gdSh0LnRvU3RyaW5nKCkpfXJldHVybiBuJiYhTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGEpKT91KGB2WyR7dH1dIGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApOigiMCI9PT1TdHJpbmcoYSkmJihhPTApLG8oYSkpfWZ1bmN0aW9uIEJ0KHQsZT17fSl7aWYoIVV0KHQsZSkpcmV0dXJuITE7cmV0dXJuIFh0KHQpPj0wfWZ1bmN0aW9uIER0KHQsZSl7aWYoIWp0KHQpKXJldHVybiIiO2lmKCFCdChlKSlyZXR1cm4iIjtpZigwPT09KGU9WHQoZSkpKXJldHVybiIiO2xldCByPXQubGVuZ3RoLWU7cmV0dXJuIHI8MCYmKHI9MCksdC5zdWJzdHJpbmcocixyK2UpfWZ1bmN0aW9uIEh0KHQsZSl7cmV0dXJuIGp0KHQpJiZCdChlKT8wPT09KGU9WHQoZSkpP3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4ganQodCkmJkJ0KGUpPzA9PT0oZT1YdChlKSk/IiI6dC5zdWJzdHJpbmcoMCxlKToiIn0odCx0Lmxlbmd0aC1lKToiIn1mdW5jdGlvbiBKdCh0KXtpZighanQodCkpcmV0dXJue3BhdGg6IiIsaXNSb290OiExfTtmb3IoO3QuaW5kZXhPZigiXFxcXCIpPj0wOyl0PXQucmVwbGFjZSgiXFxcXCIsIlxcIik7Zm9yKDt0LmluZGV4T2YoIi8vIik+PTA7KXQ9dC5yZXBsYWNlKCIvLyIsIi8iKTtpZigiOiI9PT1EdCh0LDEpKXJldHVybntwYXRoOmAke3R9XFxgLGlzUm9vdDohMH07aWYoIlxcIj09PUR0KHQsMSkpe2xldCBlPUh0KHQsMSk7cmV0dXJuIjoiPT09RHQoZSwxKT97cGF0aDp0LGlzUm9vdDohMH06e3BhdGg6ZSxpc1Jvb3Q6ITF9fWlmKCIvIj09PUR0KHQsMSkpe2xldCBlPUh0KHQsMSk7cmV0dXJuIDA9PT1lLmxlbmd0aD97cGF0aDp0LGlzUm9vdDohMH06e3BhdGg6ZSxpc1Jvb3Q6ITF9fXJldHVybntwYXRoOnQsaXNSb290OiExfX1mdW5jdGlvbiBLdCh0KXtpZighanQodCkpcmV0dXJuIiI7bGV0IGU9SnQodCk7aWYoZS5pc1Jvb3QpcmV0dXJuIGUucGF0aDtsZXQgcj1lLnBhdGg7dHJ5e3I9ci5zcGxpdCgiXFwiKS5wb3AoKS5zcGxpdCgiLyIpLnBvcCgpfWNhdGNoKHQpe31yZXR1cm4gcn1mdW5jdGlvbiBRdCh0LGU9e30pe2xldCByPWh0KGUsImZzIik7aWYoIXB0KHQse2ZzOnJ9KSlyZXR1cm4hMTtsZXQgbj1yLmxzdGF0U3luYyh0KTtyZXR1cm4hbi5pc0ZpbGUoKSYmIW4uaXNTeW1ib2xpY0xpbmsoKX1mdW5jdGlvbiBWdCh0LGU9e30pe2xldCByPWh0KGUsImZzIik7aWYoIXB0KHQse2ZzOnJ9KSlyZXR1cm57c3VjY2VzczoiZmlsZSBkb2VzIG5vdCBleGlzdDogIit0fTtpZigheXQodCx7ZnM6cn0pKXJldHVybntlcnJvcjoiaW5wdXQgcGF0aCBpcyBub3QgYSBmaWxlOiAiK3R9O3RyeXtyLnVubGlua1N5bmModCl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOnR9fXJldHVybntzdWNjZXNzOiJkb25lOiAiK3R9fWFzeW5jIGZ1bmN0aW9uIFl0KHQsZSxuPXt9KXtsZXQgaT0iIixvPWh0KG4sImZzIik7aWYoIWd0KHU9dCl8fDA9PT11Lmxlbmd0aHx8MT09PXUubGVuZ3RoJiZTdCh1WzBdKSl0aHJvdyBuZXcgRXJyb3IoImZwc0luIGluIG5vdCBhbiBlZmZlY3RpdmUgYXJyYXkiKTt2YXIgdTtsZXQgYT1mdW5jdGlvbih0KXtpZighanQodCkpcmV0dXJuIiI7bGV0IGU9SnQodCk7aWYoZS5pc1Jvb3QpcmV0dXJuIGUucGF0aDtsZXQgcj1LdCh0PWUucGF0aCk7aWYoIWp0KHIpKXJldHVybiB0O2xldCBuPUp0KHQ9SHQodCxyLmxlbmd0aCkpO3JldHVybiBuLmlzUm9vdCxuLnBhdGh9KGUpLGM9aHQobiwiZm5PdXQiLCIiKTtqdChjKXx8KGM9S3QoZSkpLFF0KGEse2ZzOm99KXx8ZnVuY3Rpb24odCxlPXt9KXtsZXQgcj1odChlLCJmcyIpO2lmKFF0KHQse2ZzOnJ9KSlyZXR1cm57c3VjY2VzczoiaW5wdXQgZm9sZGVyIGlzIGFscmVhZHkgZXhpc3RzOiAiK3R9O2lmKHB0KHQse2ZzOnJ9KSlyZXR1cm57ZXJyb3I6ImlucHV0IHBhdGggYWxyZWFkeSBleGlzdHM6ICIrdH07dHJ5e3IubWtkaXJTeW5jKHQse3JlY3Vyc2l2ZTohMH0pfWNhdGNoKHQpe3JldHVybntlcnJvcjp0fX19KGEse2ZzOm99KTtsZXQgcz12dCgpO3MuY2F0Y2goKCgpPT57fSkpO2xldCBmPW51bGwsbD1udWxsLGg9dnQoKTtoLmNhdGNoKCgoKT0+e30pKTt0cnl7Zj1vLmNyZWF0ZVdyaXRlU3RyZWFtKGUpLGYub24oImVycm9yIiwodD0+e2w9dCxpPXQubWVzc2FnZSxoLnJlamVjdCh0KSxzLnJlamVjdChpKX0pKSxmLm9uKCJmaW5pc2giLCgoKT0+e2xldCB0PXtmaWxlbmFtZTpjLHBhdGg6ZX07cy5yZXNvbHZlKHQpfSkpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtpZihudWxsIT09bCl0aHJvdyBsO2xldCBuPXRbZV07aWYoIXl0KG4se2ZzOm99KSl0aHJvdyBuZXcgRXJyb3IoYGZwSW5bJHtufV0gaXMgbm90IGEgZmlsZWApO2xldCBpPWFzeW5jKCk9PntsZXQgdD1vLmNyZWF0ZVJlYWRTdHJlYW0obiksZT1udWxsO2ZvciBhd2FpdChsZXQgbiBvZiB0KXtpZihudWxsIT09bCl0aHJvdyBsO2xldCB0PSExLGk9bmV3IFByb21pc2UoKChlLHIpPT57dD0hZi53cml0ZShuLCh0PT57dD9yKHQpOmUoKX0pKX0pKTtpLmNhdGNoKCgoKT0+e30pKSxlPWksdCYmYXdhaXQgUHJvbWlzZS5yYWNlKFtyLm9uY2UoZiwiZHJhaW4iKSxoXSl9aWYobnVsbCE9PWUmJmF3YWl0IGUsbnVsbCE9PWwpdGhyb3cgbDtWdChuLHtmczpvfSl9O2F3YWl0IGkoKX1mLmVuZCgpfWNhdGNoKHQpe2k9aHQodCwibWVzc2FnZSIsU3RyaW5nKHQpKTt0cnl7Zi5kZXN0cm95KCl9Y2F0Y2godCl7fXMucmVqZWN0KGkpfXJldHVybiBzfWNvbnN0IFp0PW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2FzeW5jIGZ1bmN0aW9uIHRlKHQsZT17fSl7bGV0IHI9aHQoZSwiZnMiKSxuPWh0KGUsImNodW5rU2l6ZSIpO2lmKE10KG4pfHwobj02NzEwODg2NCksbj1rdChuKSwheXQodCx7ZnM6cn0pKXJldHVybiBQcm9taXNlLnJlamVjdCgiZnAgaXMgbm90IGEgZmlsZSIpO2xldCBpPXZ0KCk7dHJ5e2xldHtjcmVhdGU2NDplfT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06ZSx4eGgzMjpyLHh4aDY0Om4saW5pdDMyOmksdXBkYXRlMzI6byxkaWdlc3QzMjp1LGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6c319PXQ7bGV0IGY9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpO2Z1bmN0aW9uIGwodCxyKXtpZihlLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrcil7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrci1lLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ZS5ncm93KG4pLGY9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpfX1mdW5jdGlvbiBoKHQsZSxyLG4saSxvKXtsKHQpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIGYuc2V0KHUpLHIoMCxlKSx1LnNldChmLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUoZSl7bGV0IHI7cmV0dXJuIGYuc2V0KHUpLCJzdHJpbmciPT10eXBlb2YgZT8obCgzKmUubGVuZ3RoLHQpLHI9Zy5lbmNvZGVJbnRvKGUsZi5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoZS5ieXRlTGVuZ3RoLHQpLGYuc2V0KGUsdCkscj1lLmJ5dGVMZW5ndGgpLG4oMCx0LHIpLHUuc2V0KGYuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4oZi5zZXQodSksbyhpKDApKSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHk9Mm4qKjY0bi0xbjtmdW5jdGlvbiB2KHQpe3JldHVybiB0Jnl9Y29uc3QgZz1uZXcgVGV4dEVuY29kZXIsYj0wLGQ9MG47ZnVuY3Rpb24gXyh0LGU9Yil7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxwKHIoMCxnLmVuY29kZUludG8odCxmKS53cml0dGVuLGUpKX1mdW5jdGlvbiBTKHQsZT1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLHYobigwLGcuZW5jb2RlSW50byh0LGYpLndyaXR0ZW4sZSkpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxlPWIpPT5fKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQsZT1iKT0+KGwodC5ieXRlTGVuZ3RoLDApLGYuc2V0KHQpLHAocigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTMyOih0PWIpPT5oKDQ4LHQsaSxvLHUscCksaDY0OlMsaDY0VG9TdHJpbmc6KHQsZT1kKT0+Uyh0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxlPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCksZi5zZXQodCksdihuKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlNjQ6KHQ9ZCk9PmgoODgsdCxhLGMscyx2KX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShadCkpLmluc3RhbmNlKX0oKSxvPWUoKSx1PXIuY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm59KTt1Lm9uKCJkYXRhIiwodD0+e28udXBkYXRlKHQpfSkpLHUub24oImVuZCIsKCgpPT57bGV0IHQ9by5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKTtpLnJlc29sdmUodCl9KSksdS5vbigiZXJyb3IiLGkucmVqZWN0KX1jYXRjaCh0KXtpLnJlamVjdCh0LnRvU3RyaW5nKCkpfXJldHVybiBpfW1vZHVsZS5leHBvcnRzPWFzeW5jKHIsbixpLG8pPT57bGV0IHU9W107Zm9yKGxldCBvPTA7bzxuO28rKyl7bGV0IG49dC5yZXNvbHZlKGksYCR7cn1fJHtvfWApO2lmKCF5dChuLHtmczplfSkpdGhyb3cgbmV3IEVycm9yKGBmcEluWyR7bn1dIGlzIG5vdCBhIGZpbGVgKTt1LnB1c2gobil9bGV0IGE9YXdhaXQgYXN5bmMgZnVuY3Rpb24odCxyLG49e30pe3JldHVybiBZdCh0LHIse2ZzOmUsLi4ubn0pfSh1LG8pO3JldHVybnsuLi5hLGhhc2g6YXdhaXQgZnVuY3Rpb24odCxyPXt9KXtyZXR1cm4gdGUodCx7ZnM6ZSwuLi5yfSl9KG8pfX07CgogICAgfSkuY2FsbChtZFVzZXIuZXhwb3J0cywgbWRVc2VyLCBtZFVzZXIuZXhwb3J0cykKCiAgICAvL+mgkOioreWMr+WHujogcm9sbHVw5LulX19lc01vZHVsZeaomeekuumgkOioreiIh+WFt+WQjeS4puWtmOiAhSwg5Y+W5YW2ZGVmYXVsdDsg5ZCm5YmHbW9kdWxlLmV4cG9ydHPljbPpoJDoqK3ljK/lh7oo5Y+q5pyJ5YW35ZCN5Yyv5Ye66ICF54K65ZG95ZCN56m66ZaT54mp5Lu2KQogICAgcmV0dXJuIChtZFVzZXIuZXhwb3J0cyAmJiBtZFVzZXIuZXhwb3J0cy5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtZFVzZXIuZXhwb3J0cykgPyBtZFVzZXIuZXhwb3J0cy5kZWZhdWx0IDogbWRVc2VyLmV4cG9ydHMKCn0pKCkpCgo=",Buffer.from(i,"base64").toString("utf8"));var i;function r(){let n=new s,i=n.emit.bind(n),r={},o=!1,l="worker is dead",a=!1;function c(e){for(let t in r){let s=r[t];delete r[t],s.reject(e)}}function M(e){c(e),i("error",e)}function u(e){o||(o=!0,M(e))}let d=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){l=e,u(e)}}(t);function w(){d?(a=!0,o||(o=!0,l="worker has been terminated"),d.terminate(),d=void 0,c("worker has been terminated")):M("worker has been terminated")}function I(e){return function(){let t=function(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}();if(o)return t.reject(l),t;let s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=s.length;for(let i=0;i<e;i++)t[i]=s[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:s,fun:e,input:[...arguments]};try{d.postMessage(n)}catch(e){return t.reject(e),t}return r[s]=t,t}}d||o||(l="invalid worker",u(l)),d&&(d.on("message",function(e){let t=e,s=t&&t.mode;if("emit"===s||"return"===s||"messageerror"===s){if("emit"===s&&i(t.evName,t.msg),"return"===s){let e=r[t.id];e&&(delete r[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===s&&M(t.msg)}}),d.on("error",u),d.on("exit",e=>{a||u("worker exit, code["+e+"]")}),d.on("messageerror",e=>{M(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{d.postMessage(e)}catch(e){throw w(),e}}([...arguments]));for(let e of["main"])n[e]=I(e);return n.terminate=w,n}n=async function(){let e=[...arguments],t=r();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return s},set exports(e){s=e}}),s)}(Gi);var Wi=Wt(Gi.exports);let Ki=new Set,ki=new Map,Vi=(t,s,n="")=>{let i=e.resolve(s,t);return{fp:i,fpm:`${i}.merging`,fpd:`${i}.done`,fpe:`${i}.error`,fpr:Be(n)?`${i}.q${n}.ro`:""}},Ui=e=>{let t=Js(e);if($t(e))throw new Error(`can not remove ${e}: ${ws(ge(t,"error"))}`)},Qi=async(e,s)=>{Ki.add(s.fp);try{let n=await function(e,s={}){return ji(e,{fs:t,...s})}(s.fp);if(n===e)return t.writeFileSync(s.fpd,"","utf8"),{state:"done"};let i=`merged file[${s.fp}] is incomplete: hash[${n}] != fileHash[${e}], merge was interrupted`;try{t.writeFileSync(s.fpe,i,"utf8")}catch(e){console.log(`can not write ${s.fpe}`,e)}return{state:"mismatch",reason:i}}catch(e){return{state:"error",reason:`verify merged file[${s.fp}] error: ${ws(e)}`}}finally{Ki.delete(s.fp)}},Hi=async(e,s,n)=>{let i=`${function(){if(!St(Xn))throw new Error("invalid dayjs");return Xn().format("YYYYMMDDHHmmss")}()}|${En(6)}|${e}`,r=Vi(e,n);if(Ki.has(r.fp))return i;let o=$t(r.fpe),l=$t(r.fp);if(!o&&l){let t=await Qi(e,r);if("done"===t.state)return i;if("error"===t.state)throw new Error(t.reason)}return Ui(r.fpd),Ui(r.fpe),Ki.add(r.fp),setTimeout(()=>{Wi(e,s,n,r.fpm).then(s=>{let n=ge(s,"hash","");if(n!==e)throw new Error(`merged file hash[${n}] != fileHash[${e}]`);t.renameSync(r.fpm,r.fp),t.writeFileSync(r.fpd,"","utf8")}).catch(e=>{console.log(e),Js(r.fpm);let s=ws(e);try{t.writeFileSync(r.fpe,s,"utf8")}catch(e){console.log(`can not write ${r.fpe}`,e)}}).finally(()=>{Ki.delete(r.fp)})},1),i},Ri=async(e,s,n={})=>{let i=ge(n,"funConsume"),r=ge(n,"funLog");St(r)||(r=e=>{console.log(e)});let o=zi(e,"|"),l=ge(o,0,""),a=ge(o,1,""),c=ge(o,2,"");if(3!==An(o)||!Os(l)||!Os(a)||!Os(c)){let t=`invalid queueId[${ws(e)}]`;return console.log(t),{state:"error",msg:"invalid queueId",reason:t,path:""}}let M=Vi(c,s,`${l}${a}`);if($t(M.fpr)){let e=((e,s)=>{try{let n=Hs(new Uint8Array(t.readFileSync(e.fpr)),{returnWithStateAndMsg:!0});if("success"!==ge(n,"state"))return s(`stored result ${e.fpr} is corrupted, treat as not stored: ${ge(n,"msg","unknown error")}`),{ok:!1};let i=n.msg;return _e(i)&&Rt(i,"ro")?{ok:!0,ro:i.ro}:(s(`stored result ${e.fpr} has no own 'ro' key, treat as not stored`),{ok:!1})}catch(t){return s(`can not read stored result ${e.fpr}: ${ws(t)}`),{ok:!1}}})(M,r);if(e.ok)return{state:"success",msg:e.ro,path:M.fp,from:"stored"}}if($t(M.fpe)){let e="";try{e=t.readFileSync(M.fpe,"utf8")}catch(e){}return{state:"error",msg:"merge slices failed",reason:e,path:M.fp}}if(Ki.has(M.fp))return{state:"merging",msg:"",path:M.fp};let u=$t(M.fp),d=$t(M.fpd);if(u&&!d){let e=await Qi(c,M);if("done"!==e.state)return{state:"error",msg:"merge slices failed",reason:e.reason,path:M.fp};d=!0}if(u&&d){if(!St(i))return{state:"success",msg:"",path:M.fp};let e=await((e,s,n)=>{let i=e.fpr,r=ki.get(i);return r||(r=Promise.resolve().then(()=>s(e.fp)).then(s=>{s=void 0===s?null:s;try{let n=ks({ro:s},{returnWithStateAndMsg:!0});if("success"!==ge(n,"state"))return s;t.writeFileSync(e.fpr,Buffer.from(n.msg));let i=Hs(n.msg,{returnWithStateAndMsg:!0});if("success"===ge(i,"state")&&_e(i.msg)&&Rt(i.msg,"ro"))return i.msg.ro}catch(t){n(`can not store consumed result to ${e.fpr}: ${ws(t)}`)}return s}).finally(()=>{ki.delete(i)}),ki.set(i,r),r)})(M,i,r);return{state:"success",msg:e,path:M.fp,from:"consumed"}}return!u&&d?{state:"error",msg:"merged file already consumed",reason:`merged file[${M.fp}] no longer exists and no stored result for queueId[${e}]`,path:M.fp}:{state:"error",msg:"no merge task",reason:`no merge task for fileHash[${c}] (never pushed, or artifacts removed)`,path:M.fp}};var Ji={exports:{}};!function(e){var t,s;e.exports=(t=o,s={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new i(n,r||e,o),a=s?s+t:t;return e._events[a]?e._events[a].fn?e._events[a]=[e._events[a],l]:e._events[a].push(l):(e._events[a]=l,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),l.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},l.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,o=new Array(r);i<r;i++)o[i]=n[i].fn;return o},l.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,i,r,o){var l=s?s+e:e;if(!this._events[l])return!1;var a,c,M=this._events[l],u=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),u){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,o),!0}for(c=1,a=new Array(u-1);c<u;c++)a[c-1]=arguments[c];M.fn.apply(M.context,a)}else{var d,w=M.length;for(c=0;c<w;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),u){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!a)for(d=1,a=new Array(u-1);d<u;d++)a[d-1]=arguments[d];M[c].fn.apply(M[c].context,a)}}return!0},l.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},l.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},l.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return o(this,r),this;var l=this._events[r];if(l.fn)l.fn!==t||i&&!l.once||n&&l.context!==n||o(this,r);else{for(var a=0,c=[],M=l.length;a<M;a++)(l[a].fn!==t||i&&!l[a].once||n&&l[a].context!==n)&&c.push(l[a]);c.length?this._events[r]=1===c.length?c[0]:c:o(this,r)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=s,l.EventEmitter=l,e.exports=l}({get exports(){return t},set exports(e){t=e}});var s=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/IG1vZHVsZSA6IHsgZXhwb3J0czoge30gfQogICAgOyhmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpO2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG4mJiExIT09ZSh0W3JdLHIsdCk7KTtyZXR1cm4gdH12YXIgbixvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89LTEsdT1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGM9aVtuP2E6KytvXTtpZighMT09PWUodVtjXSxjLHUpKWJyZWFrfXJldHVybiB0fTt2YXIgdT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9dXx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxjPWEuU3ltYm9sLGY9T2JqZWN0LnByb3RvdHlwZSxzPWYuaGFzT3duUHJvcGVydHksbD1mLnRvU3RyaW5nLHA9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgaD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB2PSJbb2JqZWN0IE51bGxdIix5PSJbb2JqZWN0IFVuZGVmaW5lZF0iLGI9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBkKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/eTp2OmImJmIgaW4gT2JqZWN0KHQpP2Z1bmN0aW9uKHQpe3ZhciBlPXMuY2FsbCh0LHApLHI9dFtwXTt0cnl7dFtwXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2godCl7fXZhciBvPWwuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtwXT1yOmRlbGV0ZSB0W3BdKSxvfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gaC5jYWxsKHQpfSh0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZyh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWQodCl9dmFyIGo9T2JqZWN0LnByb3RvdHlwZSxtPWouaGFzT3duUHJvcGVydHksdz1qLnByb3BlcnR5SXNFbnVtZXJhYmxlLFM9XyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP186ZnVuY3Rpb24odCl7cmV0dXJuIGcodCkmJm0uY2FsbCh0LCJjYWxsZWUiKSYmIXcuY2FsbCh0LCJjYWxsZWUiKX0sTz1BcnJheS5pc0FycmF5O3ZhciBBPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsej1BJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsRT16JiZ6LmV4cG9ydHM9PT1BP2EuQnVmZmVyOnZvaWQgMCx4PShFP0UuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRj05MDA3MTk5MjU0NzQwOTkxLE49L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIGsodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/RjplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmTi50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9dmFyIEk9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiAkKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD1JfXZhciBMPXt9O0xbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUxbIltvYmplY3QgSW50OEFycmF5XSJdPUxbIltvYmplY3QgSW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IEludDMyQXJyYXldIl09TFsiW29iamVjdCBVaW50OEFycmF5XSJdPUxbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09TFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1MWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLExbIltvYmplY3QgQXJndW1lbnRzXSJdPUxbIltvYmplY3QgQXJyYXldIl09TFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1MWyJbb2JqZWN0IEJvb2xlYW5dIl09TFsiW29iamVjdCBEYXRhVmlld10iXT1MWyJbb2JqZWN0IERhdGVdIl09TFsiW29iamVjdCBFcnJvcl0iXT1MWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUxbIltvYmplY3QgTWFwXSJdPUxbIltvYmplY3QgTnVtYmVyXSJdPUxbIltvYmplY3QgT2JqZWN0XSJdPUxbIltvYmplY3QgUmVnRXhwXSJdPUxbIltvYmplY3QgU2V0XSJdPUxbIltvYmplY3QgU3RyaW5nXSJdPUxbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgTSxQPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsVD1QJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUj1UJiZULmV4cG9ydHM9PT1QJiZ1LnByb2Nlc3MsVT1mdW5jdGlvbigpe3RyeXt2YXIgdD1UJiZULnJlcXVpcmUmJlQucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxSJiZSLmJpbmRpbmcmJlIuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCksQj1VJiZVLmlzVHlwZWRBcnJheSxEPUI/KE09QixmdW5jdGlvbih0KXtyZXR1cm4gTSh0KX0pOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpJiYkKHQubGVuZ3RoKSYmISFMW2QodCldfSxXPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQyh0LGUpe3ZhciByPU8odCksbj0hciYmUyh0KSxvPSFyJiYhbiYmeCh0KSx1PSFyJiYhbiYmIW8mJkQodCksaT1yfHxufHxvfHx1LGE9aT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPUFycmF5KHQpOysrcjx0OyluW3JdPWUocik7cmV0dXJuIG59KHQubGVuZ3RoLFN0cmluZyk6W10sYz1hLmxlbmd0aDtmb3IodmFyIGYgaW4gdCkhZSYmIVcuY2FsbCh0LGYpfHxpJiYoImxlbmd0aCI9PWZ8fG8mJigib2Zmc2V0Ij09Znx8InBhcmVudCI9PWYpfHx1JiYoImJ1ZmZlciI9PWZ8fCJieXRlTGVuZ3RoIj09Znx8ImJ5dGVPZmZzZXQiPT1mKXx8ayhmLGMpKXx8YS5wdXNoKGYpO3JldHVybiBhfXZhciBHPU9iamVjdC5wcm90b3R5cGU7dmFyIHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLFY9cSxYPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxHKSlyZXR1cm4gVih0KTt2YXIgZSxyLG49W107Zm9yKHZhciBvIGluIE9iamVjdCh0KSlYLmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufWZ1bmN0aW9uIEoodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9dmFyIEs9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLFE9IltvYmplY3QgRnVuY3Rpb25dIixZPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWj0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIHR0KHQpe2lmKCFKKHQpKXJldHVybiExO3ZhciBlPWQodCk7cmV0dXJuIGU9PVF8fGU9PVl8fGU9PUt8fGU9PVp9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIG51bGwhPXQmJiQodC5sZW5ndGgpJiYhdHQodCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIGV0KHQpP0ModCk6SCh0KX12YXIgbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihudWxsPT1yKXJldHVybiByO2lmKCFldChyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgbz1yLmxlbmd0aCx1PWU/bzotMSxpPU9iamVjdChyKTsoZT91LS06Kyt1PG8pJiYhMSE9PW4oaVt1XSx1LGkpOyk7cmV0dXJuIHJ9fSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmbyh0LGUscnQpfSkpLG90PW50O2Z1bmN0aW9uIHV0KHQpe3JldHVybiB0fWZ1bmN0aW9uIGl0KHQsZSl7dmFyIG47cmV0dXJuKE8odCk/cjpvdCkodCwiZnVuY3Rpb24iPT10eXBlb2Yobj1lKT9uOnV0KX12YXIgYXQsY3Q9YVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sZnQ9KGF0PS9bXi5dKyQvLmV4ZWMoY3QmJmN0LmtleXMmJmN0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIithdDoiIjt2YXIgc3Q9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGx0KHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gc3QuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIHB0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGh0PUZ1bmN0aW9uLnByb3RvdHlwZSx2dD1PYmplY3QucHJvdG90eXBlLHl0PWh0LnRvU3RyaW5nLGJ0PXZ0Lmhhc093blByb3BlcnR5LGR0PVJlZ0V4cCgiXiIreXQuY2FsbChidCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gZ3QodCl7cmV0dXJuISghSih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISFmdCYmZnQgaW4gdH0odCkpJiYodHQodCk/ZHQ6cHQpLnRlc3QobHQodCkpfWZ1bmN0aW9uIF90KHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gZ3Qocik/cjp2b2lkIDB9dmFyIGp0PV90KGEsIkRhdGFWaWV3IiksbXQ9X3QoYSwiTWFwIiksd3Q9X3QoYSwiUHJvbWlzZSIpLFN0PV90KGEsIlNldCIpLE90PV90KGEsIldlYWtNYXAiKSxBdD0iW29iamVjdCBNYXBdIix6dD0iW29iamVjdCBQcm9taXNlXSIsRXQ9IltvYmplY3QgU2V0XSIseHQ9IltvYmplY3QgV2Vha01hcF0iLEZ0PSJbb2JqZWN0IERhdGFWaWV3XSIsTnQ9bHQoanQpLGt0PWx0KG10KSxJdD1sdCh3dCksJHQ9bHQoU3QpLEx0PWx0KE90KSxNdD1kOyhqdCYmTXQobmV3IGp0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1GdHx8bXQmJk10KG5ldyBtdCkhPUF0fHx3dCYmTXQod3QucmVzb2x2ZSgpKSE9enR8fFN0JiZNdChuZXcgU3QpIT1FdHx8T3QmJk10KG5ldyBPdCkhPXh0KSYmKE10PWZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/bHQocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBOdDpyZXR1cm4gRnQ7Y2FzZSBrdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4genQ7Y2FzZSAkdDpyZXR1cm4gRXQ7Y2FzZSBMdDpyZXR1cm4geHR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX12YXIgVXQ9UnQoImxlbmd0aCIpLEJ0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTtmdW5jdGlvbiBEdCh0KXtyZXR1cm4gQnQudGVzdCh0KX12YXIgV3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsQ3Q9IlsiK1d0KyJdIixHdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLHF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLFZ0PSJbXiIrV3QrIl0iLFh0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixIdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsSnQ9Iig/OiIrR3QrInwiK3F0KyIpIisiPyIsS3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixRdD1LdCtKdCsoIig/OlxcdTIwMGQoPzoiK1tWdCxYdCxIdF0uam9pbigifCIpKyIpIitLdCtKdCsiKSoiKSxZdD0iKD86IitbVnQrR3QrIj8iLEd0LFh0LEh0LEN0XS5qb2luKCJ8IikrIikiLFp0PVJlZ0V4cChxdCsiKD89IitxdCsiKXwiK1l0K1F0LCJnIik7ZnVuY3Rpb24gdGUodCl7cmV0dXJuIER0KHQpP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1adC5sYXN0SW5kZXg9MDtadC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KHQpOlV0KHQpfWZ1bmN0aW9uIGVlKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoZXQodCkpcmV0dXJuInN0cmluZyI9PXR5cGVvZihlPXQpfHwhTyhlKSYmZyhlKSYmZChlKT09VHQ/dGUodCk6dC5sZW5ndGg7dmFyIGUscj1QdCh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOkgodCkubGVuZ3RofWZ1bmN0aW9uIHJlKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99ZnVuY3Rpb24gbmUodCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9ZnVuY3Rpb24gb2UodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihuZSh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciB1ZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIGllKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWllLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGllLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPW9lKGUsdCk7cmV0dXJuIShyPDApJiYocj09ZS5sZW5ndGgtMT9lLnBvcCgpOnVlLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0saWUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9b2UoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfSxpZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBvZSh0aGlzLl9fZGF0YV9fLHQpPi0xfSxpZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPW9lKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBhZT1fdChPYmplY3QsImNyZWF0ZSIpO3ZhciBjZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBmZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHNlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGxlKHQsZSl7dmFyIHIsbixvPXQuX19kYXRhX187cmV0dXJuKCJzdHJpbmciPT0obj10eXBlb2Yocj1lKSl8fCJudW1iZXIiPT1ufHwic3ltYm9sIj09bnx8ImJvb2xlYW4iPT1uPyJfX3Byb3RvX18iIT09cjpudWxsPT09cik/b1sic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpvLm1hcH1mdW5jdGlvbiBwZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1zZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPWFlP2FlKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxzZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoYWUpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gY2UuY2FsbChlLHQpP2VbdF06dm9pZCAwfSxzZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGFlP3ZvaWQgMCE9PWVbdF06ZmUuY2FsbChlLHQpfSxzZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1hZSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfSxwZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBzZSxtYXA6bmV3KG10fHxpZSksc3RyaW5nOm5ldyBzZX19LHBlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9bGUodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0scGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbGUodGhpcyx0KS5nZXQodCl9LHBlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGxlKHRoaXMsdCkuaGFzKHQpfSxwZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bGUodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307ZnVuY3Rpb24gaGUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgaWUodCk7dGhpcy5zaXplPWUuc2l6ZX1oZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBpZSx0aGlzLnNpemU9MH0saGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn0saGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9LGhlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfSxoZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgaWUpe3ZhciBuPXIuX19kYXRhX187aWYoIW10fHxuLmxlbmd0aDwxOTkpcmV0dXJuIG4ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBwZShuKX1yZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemU9ci5zaXplLHRoaXN9O2Z1bmN0aW9uIHZlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBwZTsrK2U8cjspdGhpcy5hZGQodFtlXSl9ZnVuY3Rpb24geWUodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZlLnByb3RvdHlwZS5hZGQ9dmUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx2ZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX07dmFyIGJlPTEsZGU9MjtmdW5jdGlvbiBnZSh0LGUscixuLG8sdSl7dmFyIGk9ciZiZSxhPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoYSE9YyYmIShpJiZjPmEpKXJldHVybiExO3ZhciBmPXUuZ2V0KHQpLHM9dS5nZXQoZSk7aWYoZiYmcylyZXR1cm4gZj09ZSYmcz09dDt2YXIgbD0tMSxwPSEwLGg9ciZkZT9uZXcgdmU6dm9pZCAwO2Zvcih1LnNldCh0LGUpLHUuc2V0KGUsdCk7KytsPGE7KXt2YXIgdj10W2xdLHk9ZVtsXTtpZihuKXZhciBiPWk/bih5LHYsbCxlLHQsdSk6bih2LHksbCx0LGUsdSk7aWYodm9pZCAwIT09Yil7aWYoYiljb250aW51ZTtwPSExO2JyZWFrfWlmKGgpe2lmKCF5ZShlLChmdW5jdGlvbih0LGUpe2lmKGk9ZSwhaC5oYXMoaSkmJih2PT09dHx8byh2LHQscixuLHUpKSlyZXR1cm4gaC5wdXNoKGUpO3ZhciBpfSkpKXtwPSExO2JyZWFrfX1lbHNlIGlmKHYhPT15JiYhbyh2LHkscixuLHUpKXtwPSExO2JyZWFrfX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUoZSkscH12YXIgX2U9YS5VaW50OEFycmF5O2Z1bmN0aW9uIGplKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3JbKytlXT1bbix0XX0pKSxyfWZ1bmN0aW9uIG1lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyWysrZV09dH0pKSxyfXZhciB3ZT0xLFNlPTIsT2U9IltvYmplY3QgQm9vbGVhbl0iLEFlPSJbb2JqZWN0IERhdGVdIix6ZT0iW29iamVjdCBFcnJvcl0iLEVlPSJbb2JqZWN0IE1hcF0iLHhlPSJbb2JqZWN0IE51bWJlcl0iLEZlPSJbb2JqZWN0IFJlZ0V4cF0iLE5lPSJbb2JqZWN0IFNldF0iLGtlPSJbb2JqZWN0IFN0cmluZ10iLEllPSJbb2JqZWN0IFN5bWJvbF0iLCRlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsTGU9IltvYmplY3QgRGF0YVZpZXddIixNZT1jP2MucHJvdG90eXBlOnZvaWQgMCxQZT1NZT9NZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBUZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPTAsdT1bXTsrK3I8bjspe3ZhciBpPXRbcl07ZShpLHIsdCkmJih1W28rK109aSl9cmV0dXJuIHV9dmFyIFJlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsVWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxCZT1VZT9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksVGUoVWUodCksKGZ1bmN0aW9uKGUpe3JldHVybiBSZS5jYWxsKHQsZSl9KSkpfTpmdW5jdGlvbigpe3JldHVybltdfTtmdW5jdGlvbiBEZSh0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIE8odCk/bjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWUubGVuZ3RoLG89dC5sZW5ndGg7KytyPG47KXRbbytyXT1lW3JdO3JldHVybiB0fShuLHIodCkpfSh0LHJ0LEJlKX12YXIgV2U9MSxDZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBHZT0xLHFlPSJbb2JqZWN0IEFyZ3VtZW50c10iLFZlPSJbb2JqZWN0IEFycmF5XSIsWGU9IltvYmplY3QgT2JqZWN0XSIsSGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZSh0LGUscixuLG8sdSl7dmFyIGk9Tyh0KSxhPU8oZSksYz1pP1ZlOlB0KHQpLGY9YT9WZTpQdChlKSxzPShjPWM9PXFlP1hlOmMpPT1YZSxsPShmPWY9PXFlP1hlOmYpPT1YZSxwPWM9PWY7aWYocCYmeCh0KSl7aWYoIXgoZSkpcmV0dXJuITE7aT0hMCxzPSExfWlmKHAmJiFzKXJldHVybiB1fHwodT1uZXcgaGUpLGl8fEQodCk/Z2UodCxlLHIsbixvLHUpOmZ1bmN0aW9uKHQsZSxyLG4sbyx1LGkpe3N3aXRjaChyKXtjYXNlIExlOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSAkZTpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhdShuZXcgX2UodCksbmV3IF9lKGUpKSk7Y2FzZSBPZTpjYXNlIEFlOmNhc2UgeGU6cmV0dXJuIG5lKCt0LCtlKTtjYXNlIHplOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSBGZTpjYXNlIGtlOnJldHVybiB0PT1lKyIiO2Nhc2UgRWU6dmFyIGE9amU7Y2FzZSBOZTp2YXIgYz1uJndlO2lmKGF8fChhPW1lKSx0LnNpemUhPWUuc2l6ZSYmIWMpcmV0dXJuITE7dmFyIGY9aS5nZXQodCk7aWYoZilyZXR1cm4gZj09ZTtufD1TZSxpLnNldCh0LGUpO3ZhciBzPWdlKGEodCksYShlKSxuLG8sdSxpKTtyZXR1cm4gaS5kZWxldGUodCkscztjYXNlIEllOmlmKFBlKXJldHVybiBQZS5jYWxsKHQpPT1QZS5jYWxsKGUpfXJldHVybiExfSh0LGUsYyxyLG4sbyx1KTtpZighKHImR2UpKXt2YXIgaD1zJiZIZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksdj1sJiZIZS5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYoaHx8dil7dmFyIHk9aD90LnZhbHVlKCk6dCxiPXY/ZS52YWx1ZSgpOmU7cmV0dXJuIHV8fCh1PW5ldyBoZSksbyh5LGIscixuLHUpfX1yZXR1cm4hIXAmJih1fHwodT1uZXcgaGUpLGZ1bmN0aW9uKHQsZSxyLG4sbyx1KXt2YXIgaT1yJldlLGE9RGUodCksYz1hLmxlbmd0aDtpZihjIT1EZShlKS5sZW5ndGgmJiFpKXJldHVybiExO2Zvcih2YXIgZj1jO2YtLTspe3ZhciBzPWFbZl07aWYoIShpP3MgaW4gZTpDZS5jYWxsKGUscykpKXJldHVybiExfXZhciBsPXUuZ2V0KHQpLHA9dS5nZXQoZSk7aWYobCYmcClyZXR1cm4gbD09ZSYmcD09dDt2YXIgaD0hMDt1LnNldCh0LGUpLHUuc2V0KGUsdCk7Zm9yKHZhciB2PWk7KytmPGM7KXt2YXIgeT10W3M9YVtmXV0sYj1lW3NdO2lmKG4pdmFyIGQ9aT9uKGIseSxzLGUsdCx1KTpuKHksYixzLHQsZSx1KTtpZighKHZvaWQgMD09PWQ/eT09PWJ8fG8oeSxiLHIsbix1KTpkKSl7aD0hMTticmVha312fHwodj0iY29uc3RydWN0b3IiPT1zKX1pZihoJiYhdil7dmFyIGc9dC5jb25zdHJ1Y3RvcixfPWUuY29uc3RydWN0b3I7Zz09X3x8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZyYmZyBpbnN0YW5jZW9mIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgX3x8KGg9ITEpfXJldHVybiB1LmRlbGV0ZSh0KSx1LmRlbGV0ZShlKSxofSh0LGUscixuLG8sdSkpfWZ1bmN0aW9uIEtlKHQsZSxyLG4sbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IWcodCkmJiFnKGUpP3QhPXQmJmUhPWU6SmUodCxlLHIsbixLZSxvKSl9dmFyIFFlPTEsWWU9MjtmdW5jdGlvbiBaZSh0KXtyZXR1cm4gdD09dCYmIUoodCl9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KHIpKSl9fWZ1bmN0aW9uIGVyKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ydCh0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0sbz10W25dO2Vbcl09W24sbyxaZShvKV19cmV0dXJuIGV9KHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT90cihlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09dHx8ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ci5sZW5ndGgsdT1vLGk9IW47aWYobnVsbD09dClyZXR1cm4hdTtmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIGE9cltvXTtpZihpJiZhWzJdP2FbMV0hPT10W2FbMF1dOiEoYVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHU7KXt2YXIgYz0oYT1yW29dKVswXSxmPXRbY10scz1hWzFdO2lmKGkmJmFbMl0pe2lmKHZvaWQgMD09PWYmJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBsPW5ldyBoZTtpZihuKXZhciBwPW4oZixzLGMsdCxlLGwpO2lmKCEodm9pZCAwPT09cD9LZShzLGYsUWV8WWUsbixsKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9KHIsdCxlKX19dmFyIHJyPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG5yKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Zyh0KSYmZCh0KT09cnJ9dmFyIG9yPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHVyPS9eXHcqJC87ZnVuY3Rpb24gaXIodCxlKXtpZihPKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFucih0KSl8fCh1ci50ZXN0KHQpfHwhb3IudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfXZhciBhcj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gY3IodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihhcik7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsbz1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLHU9ci5jYWNoZTtpZih1LmhhcyhvKSlyZXR1cm4gdS5nZXQobyk7dmFyIGk9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPXUuc2V0KG8saSl8fHUsaX07cmV0dXJuIHIuY2FjaGU9bmV3KGNyLkNhY2hlfHxwZSkscn1jci5DYWNoZT1wZTt2YXIgZnI9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csc3I9L1xcKFxcKT8vZyxscj1mdW5jdGlvbih0KXt2YXIgZT1jcih0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09ci5zaXplJiZyLmNsZWFyKCksdH0pKSxyPWUuY2FjaGU7cmV0dXJuIGV9KChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKGZyLChmdW5jdGlvbih0LHIsbixvKXtlLnB1c2gobj9vLnJlcGxhY2Uoc3IsIiQxIik6cnx8dCl9KSksZX0pKSxwcj1scixocj0xLzAsdnI9Yz9jLnByb3RvdHlwZTp2b2lkIDAseXI9dnI/dnIudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGJyKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZihPKHQpKXJldHVybiByZSh0LGJyKSsiIjtpZihucih0KSlyZXR1cm4geXI/eXIuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0taHI/Ii0wIjplfWZ1bmN0aW9uIGRyKHQpe3JldHVybiBudWxsPT10PyIiOmJyKHQpfWZ1bmN0aW9uIGdyKHQsZSl7cmV0dXJuIE8odCk/dDppcih0LGUpP1t0XTpwcihkcih0KSl9dmFyIF9yPTEvMDtmdW5jdGlvbiBqcih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG5yKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1fcj8iLTAiOmV9ZnVuY3Rpb24gbXIodCxlKXtmb3IodmFyIHI9MCxuPShlPWdyKGUsdCkpLmxlbmd0aDtudWxsIT10JiZyPG47KXQ9dFtqcihlW3IrK10pXTtyZXR1cm4gciYmcj09bj90OnZvaWQgMH1mdW5jdGlvbiB3cih0LGUscil7dmFyIG49bnVsbD09dD92b2lkIDA6bXIodCxlKTtyZXR1cm4gdm9pZCAwPT09bj9yOm59ZnVuY3Rpb24gU3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0tMSxvPShlPWdyKGUsdCkpLmxlbmd0aCx1PSExOysrbjxvOyl7dmFyIGk9anIoZVtuXSk7aWYoISh1PW51bGwhPXQmJnIodCxpKSkpYnJlYWs7dD10W2ldfXJldHVybiB1fHwrK24hPW8/dTohIShvPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJiQobykmJmsoaSxvKSYmKE8odCl8fFModCkpfSh0LGUsU3IpfXZhciBBcj0xLHpyPTI7ZnVuY3Rpb24gRXIodCl7cmV0dXJuIGlyKHQpP1J0KGpyKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG1yKGUsdCl9fSh0KX1mdW5jdGlvbiB4cih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/dXQ6Im9iamVjdCI9PXR5cGVvZiB0P08odCk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaXIodCkmJlplKGUpP3RyKGpyKHQpLGUpOmZ1bmN0aW9uKHIpe3ZhciBuPXdyKHIsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1lP09yKHIsdCk6S2UoZSxuLEFyfHpyKX19KHRbMF0sdFsxXSk6ZXIodCk6RXIodCl9ZnVuY3Rpb24gRnIodCxlKXt2YXIgcj0tMSxuPWV0KHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxvLHUpe25bKytyXT1lKHQsbyx1KX0pKSxufWZ1bmN0aW9uIE5yKHQsZSl7cmV0dXJuKE8odCk/cmU6RnIpKHQseHIoZSkpfXZhciBrcj0vXHMvO3ZhciBJcj0vXlxzKy87ZnVuY3Rpb24gJHIodCl7cmV0dXJuIHQ/dC5zbGljZSgwLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJmtyLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9KHQpKzEpLnJlcGxhY2UoSXIsIiIpOnR9ZnVuY3Rpb24gTHIodCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiByPXZvaWQgMD09PXI/bjpyLCFlJiZyPj1uP3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPS0xLG89dC5sZW5ndGg7ZTwwJiYoZT0tZT5vPzA6bytlKSwocj1yPm8/bzpyKTwwJiYocis9byksbz1lPnI/MDpyLWU+Pj4wLGU+Pj49MDtmb3IodmFyIHU9QXJyYXkobyk7KytuPG87KXVbbl09dFtuK2VdO3JldHVybiB1fSh0LGUscil9ZnVuY3Rpb24gTXIodCl7cmV0dXJuIHQhPXR9ZnVuY3Rpb24gUHIodCxlLHIpe3JldHVybiBlPT1lP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci0xLG89dC5sZW5ndGg7KytuPG87KWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfSh0LGUscik6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBvPXQubGVuZ3RoLHU9cisobj8xOi0xKTtuP3UtLTorK3U8bzspaWYoZSh0W3VdLHUsdCkpcmV0dXJuIHU7cmV0dXJuLTF9KHQsTXIscil9dmFyIFRyPSJcXHVkODAwLVxcdWRmZmYiLFJyPSJbIitUcisiXSIsVXI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixCcj0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixEcj0iW14iK1RyKyJdIixXcj0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsQ3I9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLEdyPSIoPzoiK1VyKyJ8IitCcisiKSIrIj8iLHFyPSJbXFx1ZmUwZVxcdWZlMGZdPyIsVnI9cXIrR3IrKCIoPzpcXHUyMDBkKD86IitbRHIsV3IsQ3JdLmpvaW4oInwiKSsiKSIrcXIrR3IrIikqIiksWHI9Iig/OiIrW0RyK1VyKyI/IixVcixXcixDcixScl0uam9pbigifCIpKyIpIixIcj1SZWdFeHAoQnIrIig/PSIrQnIrIil8IitYcitWciwiZyIpO2Z1bmN0aW9uIEpyKHQpe3JldHVybiBEdCh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaChIcil8fFtdfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiIil9KHQpfWZ1bmN0aW9uIEtyKHQsZSxyKXtpZigodD1kcih0KSkmJihyfHx2b2lkIDA9PT1lKSlyZXR1cm4gJHIodCk7aWYoIXR8fCEoZT1icihlKSkpcmV0dXJuIHQ7dmFyIG49SnIodCksbz1KcihlKSx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGg7KytyPG4mJlByKGUsdFtyXSwwKT4tMTspO3JldHVybiByfShuLG8pLGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tJiZQcihlLHRbcl0sMCk+LTE7KTtyZXR1cm4gcn0obixvKSsxO3JldHVybiBMcihuLHUsaSkuam9pbigiIil9ZnVuY3Rpb24gUXIodCl7cmV0dXJuISghZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwiIj09PXQpfWZ1bmN0aW9uIFlyKHQsZSl7aWYoIVFyKHQpKXJldHVybltdO2lmKCFRcihlKSlyZXR1cm5bXTtsZXQgcj1mdW5jdGlvbih0LGUpe3JldHVybiBRcih0KSYmUXIoZSk/dC5zcGxpdChlKTpbXX0odCxlKTtyPU5yKHIsS3IpO2xldCBuPVtdO3JldHVybiBpdChyLChmdW5jdGlvbih0KXtRcih0KSYmbi5wdXNoKHQpfSkpLG59dmFyIFpyPU5hTix0bj0vXlstK10weFswLTlhLWZdKyQvaSxlbj0vXjBiWzAxXSskL2kscm49L14wb1swLTddKyQvaSxubj1wYXJzZUludDtmdW5jdGlvbiBvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYobnIodCkpcmV0dXJuIFpyO2lmKEoodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PUooZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PSRyKHQpO3ZhciByPWVuLnRlc3QodCk7cmV0dXJuIHJ8fHJuLnRlc3QodCk/bm4odC5zbGljZSgyKSxyPzI6OCk6dG4udGVzdCh0KT9acjordH12YXIgdW49MS8wLGFuPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBjbih0KXtyZXR1cm4gdD8odD1vbih0KSk9PT11bnx8dD09PS11bj8odDwwPy0xOjEpKmFuOnQ9PXQ/dDowOjA9PT10P3Q6MH1mdW5jdGlvbiBmbih0KXt2YXIgZT1jbih0KSxyPWUlMTtyZXR1cm4gZT09ZT9yP2UtcjplOjB9dmFyIHNuPSJbb2JqZWN0IEJvb2xlYW5dIjtmdW5jdGlvbiBsbih0KXtyZXR1cm4hMD09PShlPXQpfHwhMT09PWV8fGcoZSkmJmQoZSk9PXNuO3ZhciBlfWZ1bmN0aW9uIHBuKHQpe2xldCBlPSExO2lmKFFyKHQpKXtpZigiIj09PXQudHJpbSgpKXJldHVybiExO2U9IWlzTmFOKE51bWJlcih0KSl9ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0IT10fSh0KSlyZXR1cm4hMTtlPSEwfXJldHVybiBlfWZ1bmN0aW9uIGhuKHQpe2lmKCFwbih0KSlyZXR1cm4gMDtyZXR1cm4gY24odCl9ZnVuY3Rpb24gdm4odCxlPXt9KXtsZXQgcj13cihlLCJ1c2VMaW1pdFNhZmUiLG51bGwpO3JldHVybiBsbihyKXx8KHI9ITEpLCEhcG4odCkmJih0PWhuKHQpLHI/TnVtYmVyLmlzU2FmZUludGVnZXIodCk6Im51bWJlciI9PXR5cGVvZihuPXQpJiZuPT1mbihuKSk7dmFyIG59dmFyIHluPWEuaXNGaW5pdGUsYm49TWF0aC5taW47dmFyIGRuPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGhbdF07cmV0dXJuIGZ1bmN0aW9uKHQscil7aWYodD1vbih0KSwocj1udWxsPT1yPzA6Ym4oZm4ociksMjkyKSkmJnluKHQpKXt2YXIgbj0oZHIodCkrImUiKS5zcGxpdCgiZSIpO3JldHVybisoKG49KGRyKGUoblswXSsiZSIrKCtuWzFdK3IpKSkrImUiKS5zcGxpdCgiZSIpKVswXSsiZSIrKCtuWzFdLXIpKX1yZXR1cm4gZSh0KX19KCJyb3VuZCIpLGduPWRuO2Z1bmN0aW9uIF9uKHQsZT17fSl7bGV0IHI9d3IoZSwidXNlQ2xhbXBTYWZlIixudWxsKTtsbihyKXx8KHI9ITEpO2xldCBuPXdyKGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7bG4obil8fChuPSExKTtsZXQgbz13cihlLCJyZXR1cm5XaXRoU3RhdGVBbmRNc2ciLG51bGwpO2xuKG8pfHwobz0hMSk7bGV0IHU9dD0+bz97c3RhdGU6InN1Y2Nlc3MiLG1zZzp0fTp0LGk9dD0+e2lmKG8pcmV0dXJue3N0YXRlOiJlcnJvciIsbXNnOnR9O3Rocm93IG5ldyBFcnJvcih0KX07aWYoIXBuKHQpKXJldHVybiB1KDApO2xldCBhPW51bGw7dHJ5e3Q9aG4odCksYT1nbih0KSxyJiYoYT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9hPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSOmE8TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVImJihhPU51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSl9Y2F0Y2godCl7cmV0dXJuIGkodC50b1N0cmluZygpKX1yZXR1cm4gbiYmIU51bWJlci5pc1NhZmVJbnRlZ2VyKE51bWJlcihhKSk/aShgdlske3R9XSBpcyBub3QgYSBzYWZlIGludGVnZXJgKTooIjAiPT09U3RyaW5nKGEpJiYoYT0wKSx1KGEpKX1mdW5jdGlvbiBqbih0LGU9e30pe2lmKCF2bih0LGUpKXJldHVybiExO3JldHVybiBfbih0KT49MH1mdW5jdGlvbiBtbih0LGU9e30pe2xldCByPXdyKGUsImZzIiksbj0hMTt0cnl7ci5zdGF0U3luYyh0KSxuPSEwfWNhdGNoe249ITF9cmV0dXJuIG59ZnVuY3Rpb24gd24odCxlPXt9KXtsZXQgcj13cihlLCJmcyIpO3JldHVybiEhbW4odCx7ZnM6cn0pJiYoIXIubHN0YXRTeW5jKHQpLmlzRGlyZWN0b3J5KCkmJiFyLmxzdGF0U3luYyh0KS5pc1N5bWJvbGljTGluaygpKX1mdW5jdGlvbiBTbih0KXtyZXR1cm4gd24odCx7ZnM6ZX0pfWZ1bmN0aW9uIE9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG90KHQsKGZ1bmN0aW9uKHQsbixvKXtlKHQsbixvKSYmci5wdXNoKHQpfSkpLHJ9ZnVuY3Rpb24gQW4odCxlPXt9KXtsZXQgcj13cihlLCJmcyIpO2lmKCFtbih0LHtmczpyfSkpcmV0dXJuITE7bGV0IG49ci5sc3RhdFN5bmModCk7cmV0dXJuIW4uaXNGaWxlKCkmJiFuLmlzU3ltYm9saWNMaW5rKCl9ZnVuY3Rpb24gem4odCxlPTEscj17fSl7bGV0IG49MSxvPXdyKHIsInBhdGgiKSx1PXdyKHIsImZzIik7aWYoIUFuKHQse2ZzOnV9KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO3JldHVybiBudWxsIT09ZSYmZnVuY3Rpb24odCxlPXt9KXtyZXR1cm4hIXZuKHQsZSkmJl9uKHQpPjB9KGUpJiYoZT1fbihlKSk8MSYmKGU9MSksZnVuY3Rpb24gdChyKXtsZXQgaT1bXTtyZXR1cm4gQW4ocix7ZnM6dX0pPyhpdCh1LnJlYWRkaXJTeW5jKHIpLChmdW5jdGlvbihhKXtsZXQgYz1vLnJlc29sdmUocixhKSxmPW51bGw7dHJ5e2Y9dS5zdGF0U3luYyhjKX1jYXRjaCh0KXt9ZiYmZi5pc0RpcmVjdG9yeSgpPyhpLnB1c2goe2lzRm9sZGVyOiEwLGxldmVsOm4scGF0aDpjLG5hbWU6by5iYXNlbmFtZShjKX0pLG4rPTEsKG48PWV8fG51bGw9PT1lKSYmKGk9aS5jb25jYXQodChjKSkpLG4tPTEpOmkucHVzaCh7aXNGb2xkZXI6ITEsbGV2ZWw6bixwYXRoOmMsbmFtZTpvLmJhc2VuYW1lKGMpfSl9KSksaSk6aX0odCl9ZnVuY3Rpb24gRW4odCxlPTEscj17fSl7bGV0IG49d3IociwicGF0aCIpLG89d3IociwiZnMiKTtpZighQW4odCx7ZnM6b30pKXRocm93IG5ldyBFcnJvcihgZmRbJHt0fV0gaXMgbm90IGEgZm9sZGVyYCk7bGV0IHU9W107dmFyIGksYTtyZXR1cm4gdT16bih0LGUse3BhdGg6bixmczpvfSksYT17aXNGb2xkZXI6ITF9LHU9KE8oaT11KT9UZTpPbikoaSx4cihhKSksdT1Ocih1LCh0PT4oZGVsZXRlIHQuaXNGb2xkZXIsdCkpKSx1fWNvbnN0IHhuPW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2FzeW5jIGZ1bmN0aW9uIEZuKHQsZT17fSl7bGV0IHI9d3IoZSwiZnMiKSxuPXdyKGUsImNodW5rU2l6ZSIpO2lmKHBuKG4pfHwobj02NzEwODg2NCksbj1obihuKSwhd24odCx7ZnM6cn0pKXJldHVybiBQcm9taXNlLnJlamVjdCgiZnAgaXMgbm90IGEgZmlsZSIpO2xldCBvPWZ1bmN0aW9uKCl7bGV0IHQsZSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbigpe3Q9YXJndW1lbnRzWzBdLGU9YXJndW1lbnRzWzFdfSkpO3JldHVybiByLnJlc29sdmU9dCxyLnJlamVjdD1lLHJ9KCk7dHJ5e2xldHtjcmVhdGU2NDplfT1hd2FpdCBhc3luYyBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtjb25zdHtleHBvcnRzOnttZW06ZSx4eGgzMjpyLHh4aDY0Om4saW5pdDMyOm8sdXBkYXRlMzI6dSxkaWdlc3QzMjppLGluaXQ2NDphLHVwZGF0ZTY0OmMsZGlnZXN0NjQ6Zn19PXQ7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpO2Z1bmN0aW9uIGwodCxyKXtpZihlLmJ1ZmZlci5ieXRlTGVuZ3RoPHQrcil7Y29uc3Qgbj1NYXRoLmNlaWwoKHQrci1lLmJ1ZmZlci5ieXRlTGVuZ3RoKS82NTUzNik7ZS5ncm93KG4pLHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpfX1mdW5jdGlvbiBwKHQsZSxyLG4sbyx1KXtsKHQpO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHMuc2V0KGkpLHIoMCxlKSxpLnNldChzLnN1YmFycmF5KDAsdCkpLHt1cGRhdGUoZSl7bGV0IHI7cmV0dXJuIHMuc2V0KGkpLCJzdHJpbmciPT10eXBlb2YgZT8obCgzKmUubGVuZ3RoLHQpLHI9Yi5lbmNvZGVJbnRvKGUscy5zdWJhcnJheSh0KSkud3JpdHRlbik6KGwoZS5ieXRlTGVuZ3RoLHQpLHMuc2V0KGUsdCkscj1lLmJ5dGVMZW5ndGgpLG4oMCx0LHIpLGkuc2V0KHMuc3ViYXJyYXkoMCx0KSksdGhpc30sZGlnZXN0OigpPT4ocy5zZXQoaSksdShvKDApKSl9fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQ+Pj4wfWNvbnN0IHY9Mm4qKjY0bi0xbjtmdW5jdGlvbiB5KHQpe3JldHVybiB0JnZ9Y29uc3QgYj1uZXcgVGV4dEVuY29kZXIsZD0wLGc9MG47ZnVuY3Rpb24gXyh0LGU9ZCl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxoKHIoMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1mdW5jdGlvbiBqKHQsZT1nKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLHkobigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfXJldHVybntoMzI6XyxoMzJUb1N0cmluZzoodCxlPWQpPT5fKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSxoMzJSYXc6KHQsZT1kKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLGgocigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTMyOih0PWQpPT5wKDQ4LHQsbyx1LGksaCksaDY0OmosaDY0VG9TdHJpbmc6KHQsZT1nKT0+aih0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpLGg2NFJhdzoodCxlPWcpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCkseShuKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlNjQ6KHQ9Zyk9PnAoODgsdCxhLGMsZix5KX19KChhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh4bikpLmluc3RhbmNlKX0oKSx1PWUoKSxpPXIuY3JlYXRlUmVhZFN0cmVhbSh0LHtoaWdoV2F0ZXJNYXJrOm59KTtpLm9uKCJkYXRhIiwodD0+e3UudXBkYXRlKHQpfSkpLGkub24oImVuZCIsKCgpPT57bGV0IHQ9dS5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKTtvLnJlc29sdmUodCl9KSksaS5vbigiZXJyb3IiLG8ucmVqZWN0KX1jYXRjaCh0KXtvLnJlamVjdCh0LnRvU3RyaW5nKCkpfXJldHVybiBvfW1vZHVsZS5leHBvcnRzPWFzeW5jKHIsbixvLHUpPT57bGV0IGk9dC5yZXNvbHZlKHUsbyksYT0hMTtpZihhPVNuKGkpLCFqbihyLHt1c2VMaW1pdFNhZmU6ITB9KSl7cmV0dXJue2Vycm9yOiJpbnZhbGlkIGZpbGVTaXplIGluIHBheWxvYWQifX1yPV9uKHIpO2xldCBjPSExO2lmKGEpe2xldCB0PS0xO3RyeXt0PWUuc3RhdFN5bmMoaSkuc2l6ZX1jYXRjaCh0KXtjb25zb2xlLmxvZygiY2hlY2sgdG90YWwgZmlsZSBzaXplOiBmcy5zdGF0U3luYyhwYXRoRmlsZSkiLGksdCl9Yz1yPT09dH1sZXQgZj0hMTthJiZjJiZhd2FpdCBmdW5jdGlvbih0LHI9e30pe3JldHVybiBGbih0LHtmczplLC4uLnJ9KX0oaSkudGhlbigodD0+e2Y9bz09PXR9KSkuY2F0Y2goKHQ9Pntjb25zb2xlLmxvZygiZnNJc0ZpbGUocGF0aEZpbGUpIixpLFNuKGkpKSxjb25zb2xlLmxvZyh0KSxmPSExfSkpO2xldCBzPVtdO2lmKCFmKXtpdChmdW5jdGlvbihyLG49MSl7cmV0dXJuIEVuKHIsbix7cGF0aDp0LGZzOmV9KX0odSksKHQ9PntsZXQgcj10Lm5hbWUuc3RhcnRzV2l0aChgJHtvfV9gKSx1PSExO3RyeXtsZXQgcj1lLnN0YXRTeW5jKHQucGF0aCk7dT1yLnNpemU+MCYmci5zaXplPD1ufWNhdGNoKGUpe2NvbnNvbGUubG9nKCJjaGVjayBlYWNoIGZpbGUgc2l6ZTogZnMuc3RhdFN5bmMocGF0aEZpbGUpIix0LnBhdGgsZSl9aWYociYmdSl7bGV0IGU9WXIodC5uYW1lLGAke299X2ApLHI9KGE9bnVsbD09KGk9ZSk/MDppLmxlbmd0aCk/aVthLTFdOnZvaWQgMDtpZigham4ocikpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coYHNraXAgZmlsZVske3QubmFtZX1dOiBjYW4gbm90IHBhcnNlIGNodW5rIGluZGV4YCk7cj1fbihyKSxzLnB1c2gocil9dmFyIGksYX0pKX1sZXQgbD1lZShzKT4wO3JldHVybntwYXRoOmksYkFsbEV4aXN0OmEsYkFsbFNpemU6YyxiQWxsSGFzaDpmLGJTbHM6bCxzbGtzOnN9fTsKCiAgICB9KS5jYWxsKG1kVXNlci5leHBvcnRzLCBtZFVzZXIsIG1kVXNlci5leHBvcnRzKQoKICAgIC8v6aCQ6Kit5Yyv5Ye6OiByb2xsdXDku6VfX2VzTW9kdWxl5qiZ56S66aCQ6Kit6IiH5YW35ZCN5Lim5a2Y6ICFLCDlj5blhbZkZWZhdWx0OyDlkKbliYdtb2R1bGUuZXhwb3J0c+WNs+mgkOioreWMr+WHuijlj6rmnInlhbflkI3ljK/lh7rogIXngrrlkb3lkI3nqbrplpPnianku7YpCiAgICByZXR1cm4gKG1kVXNlci5leHBvcnRzICYmIG1kVXNlci5leHBvcnRzLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1kVXNlci5leHBvcnRzKSA/IG1kVXNlci5leHBvcnRzLmRlZmF1bHQgOiBtZFVzZXIuZXhwb3J0cwoKfSkoKSkKCg==",Buffer.from(i,"base64").toString("utf8"));var i;function r(){let n=new s,i=n.emit.bind(n),r={},o=!1,l="worker is dead",a=!1;function c(e){for(let t in r){let s=r[t];delete r[t],s.reject(e)}}function M(e){c(e),i("error",e)}function u(e){o||(o=!0,M(e))}let d=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){l=e,u(e)}}(t);function w(){d?(a=!0,o||(o=!0,l="worker has been terminated"),d.terminate(),d=void 0,c("worker has been terminated")):M("worker has been terminated")}function I(e){return function(){let t=function(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}();if(o)return t.reject(l),t;let s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=s.length;for(let i=0;i<e;i++)t[i]=s[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:s,fun:e,input:[...arguments]};try{d.postMessage(n)}catch(e){return t.reject(e),t}return r[s]=t,t}}d||o||(l="invalid worker",u(l)),d&&(d.on("message",function(e){let t=e,s=t&&t.mode;if("emit"===s||"return"===s||"messageerror"===s){if("emit"===s&&i(t.evName,t.msg),"return"===s){let e=r[t.id];e&&(delete r[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===s&&M(t.msg)}}),d.on("error",u),d.on("exit",e=>{a||u("worker exit, code["+e+"]")}),d.on("messageerror",e=>{M(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{d.postMessage(e)}catch(e){throw w(),e}}([...arguments]));for(let e of["main"])n[e]=I(e);return n.terminate=w,n}n=async function(){let e=[...arguments],t=r();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return s},set exports(e){s=e}}),s)}(Ji);var Oi=Wt(Ji.exports),Pi={exports:{}};!function(e){var t,s;e.exports=(t=o,s={},function(e){e.exports=function(e){var t={};!function(e){var t=Object.prototype.hasOwnProperty,s="~";function n(){}function i(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function r(e,t,n,r,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new i(n,r||e,o),a=s?s+t:t;return e._events[a]?e._events[a].fn?e._events[a]=[e._events[a],l]:e._events[a].push(l):(e._events[a]=l,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(s=!1)),l.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(s?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},l.prototype.listeners=function(e){var t=s?s+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,r=n.length,o=new Array(r);i<r;i++)o[i]=n[i].fn;return o},l.prototype.listenerCount=function(e){var t=s?s+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,i,r,o){var l=s?s+e:e;if(!this._events[l])return!1;var a,c,M=this._events[l],u=arguments.length;if(M.fn){switch(M.once&&this.removeListener(e,M.fn,void 0,!0),u){case 1:return M.fn.call(M.context),!0;case 2:return M.fn.call(M.context,t),!0;case 3:return M.fn.call(M.context,t,n),!0;case 4:return M.fn.call(M.context,t,n,i),!0;case 5:return M.fn.call(M.context,t,n,i,r),!0;case 6:return M.fn.call(M.context,t,n,i,r,o),!0}for(c=1,a=new Array(u-1);c<u;c++)a[c-1]=arguments[c];M.fn.apply(M.context,a)}else{var d,w=M.length;for(c=0;c<w;c++)switch(M[c].once&&this.removeListener(e,M[c].fn,void 0,!0),u){case 1:M[c].fn.call(M[c].context);break;case 2:M[c].fn.call(M[c].context,t);break;case 3:M[c].fn.call(M[c].context,t,n);break;case 4:M[c].fn.call(M[c].context,t,n,i);break;default:if(!a)for(d=1,a=new Array(u-1);d<u;d++)a[d-1]=arguments[d];M[c].fn.apply(M[c].context,a)}}return!0},l.prototype.on=function(e,t,s){return r(this,e,t,s,!1)},l.prototype.once=function(e,t,s){return r(this,e,t,s,!0)},l.prototype.removeListener=function(e,t,n,i){var r=s?s+e:e;if(!this._events[r])return this;if(!t)return o(this,r),this;var l=this._events[r];if(l.fn)l.fn!==t||i&&!l.once||n&&l.context!==n||o(this,r);else{for(var a=0,c=[],M=l.length;a<M;a++)(l[a].fn!==t||i&&!l[a].once||n&&l[a].context!==n)&&c.push(l[a]);c.length?this._events[r]=1===c.length?c[0]:c:o(this,r)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=s?s+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=s,l.EventEmitter=l,e.exports=l}({get exports(){return t},set exports(e){t=e}});var s=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/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxqPS9eXHcqJC87ZnVuY3Rpb24gUyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX12YXIgdz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsbT0iW29iamVjdCBGdW5jdGlvbl0iLE89IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixBPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gRSh0KXtpZighUyh0KSlyZXR1cm4hMTt2YXIgZT12KHQpO3JldHVybiBlPT1tfHxlPT1PfHxlPT13fHxlPT1BfXZhciBOLCQ9aVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sej0oTj0vW14uXSskLy5leGVjKCQmJiQua2V5cyYmJC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrTjoiIjt2YXIgeD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gRih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIHguY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIEk9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sTT1GdW5jdGlvbi5wcm90b3R5cGUsUD1PYmplY3QucHJvdG90eXBlLFQ9TS50b1N0cmluZyxMPVAuaGFzT3duUHJvcGVydHksUj1SZWdFeHAoIl4iK1QuY2FsbChMKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBCKHQpe3JldHVybiEoIVModCl8fChlPXQseiYmeiBpbiBlKSkmJihFKHQpP1I6SSkudGVzdChGKHQpKTt2YXIgZX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gQihyKT9yOnZvaWQgMH12YXIgVT1rKE9iamVjdCwiY3JlYXRlIik7dmFyIEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgRz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFcodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcixuLG89dC5sZW5ndGg7by0tOylpZigocj10W29dWzBdKT09PShuPWUpfHxyIT1yJiZuIT1uKXJldHVybiBvO3JldHVybi0xfVcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1VP1UobnVsbCk6e30sdGhpcy5zaXplPTB9LFcucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sVy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoVSl7dmFyIHI9ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1yP3ZvaWQgMDpyfXJldHVybiBDLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH0sVy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIFU/dm9pZCAwIT09ZVt0XTpHLmNhbGwoZSx0KX0sVy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1VJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciBxPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gRCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1ELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LEQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9SChlLHQpO3JldHVybiEocjwwKSYmKHI9PWUubGVuZ3RoLTE/ZS5wb3AoKTpxLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwKX0sRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1IKGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX0sRC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBIKHRoaXMuX19kYXRhX18sdCk+LTF9LEQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1IKHIsdCk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFt0LGVdKSk6cltuXVsxXT1lLHRoaXN9O3ZhciBWPWsoaSwiTWFwIik7ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG4sbz10Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KG49dHlwZW9mKHI9ZSkpfHwibnVtYmVyIj09bnx8InN5bWJvbCI9PW58fCJib29sZWFuIj09bj8iX19wcm90b19fIiE9PXI6bnVsbD09PXIpP29bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06by5tYXB9ZnVuY3Rpb24gWih0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1aLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IFcsbWFwOm5ldyhWfHxEKSxzdHJpbmc6bmV3IFd9fSxaLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9WCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxaLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFgodGhpcyx0KS5nZXQodCl9LFoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gWCh0aGlzLHQpLmhhcyh0KX0sWi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9WCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfTt2YXIgSj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gSyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKEopO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89ZT9lLmFwcGx5KHRoaXMsbik6blswXSxpPXIuY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciB1PXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1pLnNldChvLHUpfHxpLHV9O3JldHVybiByLmNhY2hlPW5ldyhLLkNhY2hlfHxaKSxyfUsuQ2FjaGU9Wjt2YXIgUSxZLHR0LGV0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJ0PS9cXChcXCk/L2csbnQ9KFE9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShldCwoZnVuY3Rpb24odCxyLG4sbyl7ZS5wdXNoKG4/by5yZXBsYWNlKHJ0LCIkMSIpOnJ8fHQpfSkpLGV9LFk9SyhRLChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09dHQuc2l6ZSYmdHQuY2xlYXIoKSx0fSkpLHR0PVkuY2FjaGUsWSksb3Q9bnQ7dmFyIGl0PTEvMCx1dD11P3UucHJvdG90eXBlOnZvaWQgMCxhdD11dD91dC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gY3QodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHIodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99KHQsY3QpKyIiO2lmKGcodCkpcmV0dXJuIGF0P2F0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LWl0PyItMCI6ZX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gbnVsbD09dD8iIjpjdCh0KX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiByKHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFnKHQpKXx8ai50ZXN0KHQpfHwhXy50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKX0odCxlKT9bdF06b3QoZnQodCkpfXZhciBsdD0xLzA7ZnVuY3Rpb24gcHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxnKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1sdD8iLTAiOmV9ZnVuY3Rpb24gaHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1zdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbcHQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufXZhciB5dD1PYmplY3QucHJvdG90eXBlO3ZhciB2dD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChlKHIpKX19KE9iamVjdC5rZXlzLE9iamVjdCksYnQ9dnQsZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBndCh0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHx5dCkpcmV0dXJuIGJ0KHQpO3ZhciBlLHIsbj1bXTtmb3IodmFyIG8gaW4gT2JqZWN0KHQpKWR0LmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufXZhciBfdD1rKGksIkRhdGFWaWV3IiksanQ9ayhpLCJQcm9taXNlIiksU3Q9ayhpLCJTZXQiKSx3dD1rKGksIldlYWtNYXAiKSxtdD0iW29iamVjdCBNYXBdIixPdD0iW29iamVjdCBQcm9taXNlXSIsQXQ9IltvYmplY3QgU2V0XSIsRXQ9IltvYmplY3QgV2Vha01hcF0iLE50PSJbb2JqZWN0IERhdGFWaWV3XSIsJHQ9RihfdCksenQ9RihWKSx4dD1GKGp0KSxGdD1GKFN0KSxJdD1GKHd0KSxNdD12OyhfdCYmTXQobmV3IF90KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1OdHx8ViYmTXQobmV3IFYpIT1tdHx8anQmJk10KGp0LnJlc29sdmUoKSkhPU90fHxTdCYmTXQobmV3IFN0KSE9QXR8fHd0JiZNdChuZXcgd3QpIT1FdCkmJihNdD1mdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0Yocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSAkdDpyZXR1cm4gTnQ7Y2FzZSB6dDpyZXR1cm4gbXQ7Y2FzZSB4dDpyZXR1cm4gT3Q7Y2FzZSBGdDpyZXR1cm4gQXQ7Y2FzZSBJdDpyZXR1cm4gRXR9cmV0dXJuIGV9KTt2YXIgUHQ9TXQsVHQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PVR0fSh0Lmxlbmd0aCkmJiFFKHQpfXZhciBSdD0iW29iamVjdCBTdHJpbmddIjt2YXIgQnQsa3Q9KEJ0PSJsZW5ndGgiLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W0J0XX0pLFV0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgQ3Q9IlxcdWQ4MDAtXFx1ZGZmZiIsR3Q9IlsiK0N0KyJdIixXdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLEh0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLHF0PSJbXiIrQ3QrIl0iLER0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixWdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsWHQ9Iig/OiIrV3QrInwiK0h0KyIpIisiPyIsWnQ9IltcXHVmZTBlXFx1ZmUwZl0/IixKdD1adCtYdCsoIig/OlxcdTIwMGQoPzoiK1txdCxEdCxWdF0uam9pbigifCIpKyIpIitadCtYdCsiKSoiKSxLdD0iKD86IitbcXQrV3QrIj8iLFd0LER0LFZ0LEd0XS5qb2luKCJ8IikrIikiLFF0PVJlZ0V4cChIdCsiKD89IitIdCsiKXwiK0t0K0p0LCJnIik7ZnVuY3Rpb24gWXQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVdC50ZXN0KHQpfSh0KT9mdW5jdGlvbih0KXtmb3IodmFyIGU9UXQubGFzdEluZGV4PTA7UXQudGVzdCh0KTspKytlO3JldHVybiBlfSh0KTprdCh0KX1mdW5jdGlvbiB0ZSh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKEx0KHQpKXJldHVybiJzdHJpbmciPT10eXBlb2YoZT10KXx8IXIoZSkmJmIoZSkmJnYoZSk9PVJ0P1l0KHQpOnQubGVuZ3RoO3ZhciBlLG49UHQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PW58fCJbb2JqZWN0IFNldF0iPT1uP3Quc2l6ZTpndCh0KS5sZW5ndGh9dmFyIGVlPS9ccy87dmFyIHJlPS9eXHMrLztmdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmZWUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0odCkrMSkucmVwbGFjZShyZSwiIik6dH12YXIgb2U9TmFOLGllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHVlPS9eMGJbMDFdKyQvaSxhZT0vXjBvWzAtN10rJC9pLGNlPXBhcnNlSW50O2Z1bmN0aW9uIGZlKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihnKHQpKXJldHVybiBvZTtpZihTKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1TKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1uZSh0KTt2YXIgcj11ZS50ZXN0KHQpO3JldHVybiByfHxhZS50ZXN0KHQpP2NlKHQuc2xpY2UoMikscj8yOjgpOmllLnRlc3QodCk/b2U6K3R9dmFyIHNlPTEvMCxsZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHQ/KHQ9ZmUodCkpPT09c2V8fHQ9PT0tc2U/KHQ8MD8tMToxKSpsZTp0PT10P3Q6MDowPT09dD90OjB9ZnVuY3Rpb24gaGUodCl7dmFyIGU9cGUodCkscj1lJTE7cmV0dXJuIGU9PWU/cj9lLXI6ZTowfXZhciB5ZT0iW29iamVjdCBCb29sZWFuXSI7ZnVuY3Rpb24gdmUodCl7cmV0dXJuITA9PT0oZT10KXx8ITE9PT1lfHxiKGUpJiZ2KGUpPT15ZTt2YXIgZX1mdW5jdGlvbiBiZSh0KXtyZXR1cm4hKCFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCl8fCIiPT09dCl9ZnVuY3Rpb24gZGUodCl7bGV0IGU9ITE7aWYoYmUodCkpe2lmKCIiPT09dC50cmltKCkpcmV0dXJuITE7ZT0haXNOYU4oTnVtYmVyKHQpKX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KSl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9ZnVuY3Rpb24gZ2UodCl7aWYoIWRlKHQpKXJldHVybiAwO3JldHVybiBwZSh0KX1mdW5jdGlvbiBfZSh0LGU9e30pe2xldCByPWh0KGUsInVzZUxpbWl0U2FmZSIsbnVsbCk7cmV0dXJuIHZlKHIpfHwocj0hMSksISFkZSh0KSYmKHQ9Z2UodCkscj9OdW1iZXIuaXNTYWZlSW50ZWdlcih0KToibnVtYmVyIj09dHlwZW9mKG49dCkmJm49PWhlKG4pKTt2YXIgbn12YXIgamU9aS5pc0Zpbml0ZSxTZT1NYXRoLm1pbjt2YXIgd2U9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aFt0XTtyZXR1cm4gZnVuY3Rpb24odCxyKXtpZih0PWZlKHQpLChyPW51bGw9PXI/MDpTZShoZShyKSwyOTIpKSYmamUodCkpe3ZhciBuPShmdCh0KSsiZSIpLnNwbGl0KCJlIik7cmV0dXJuKygobj0oZnQoZShuWzBdKyJlIisoK25bMV0rcikpKSsiZSIpLnNwbGl0KCJlIikpWzBdKyJlIisoK25bMV0tcikpfXJldHVybiBlKHQpfX0oInJvdW5kIiksbWU9d2U7ZnVuY3Rpb24gT2UodCxlPXt9KXtsZXQgcj1odChlLCJ1c2VDbGFtcFNhZmUiLG51bGwpO3ZlKHIpfHwocj0hMSk7bGV0IG49aHQoZSwidXNlTGltaXRTYWZlIixudWxsKTt2ZShuKXx8KG49ITEpO2xldCBvPWh0KGUsInJldHVybldpdGhTdGF0ZUFuZE1zZyIsbnVsbCk7dmUobyl8fChvPSExKTtsZXQgaT10PT5vP3tzdGF0ZToic3VjY2VzcyIsbXNnOnR9OnQsdT10PT57aWYobylyZXR1cm57c3RhdGU6ImVycm9yIixtc2c6dH07dGhyb3cgbmV3IEVycm9yKHQpfTtpZighZGUodCkpcmV0dXJuIGkoMCk7bGV0IGE9bnVsbDt0cnl7dD1nZSh0KSxhPW1lKHQpLHImJihhPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2E9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI6YTxOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmKGE9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKX1jYXRjaCh0KXtyZXR1cm4gdSh0LnRvU3RyaW5nKCkpfXJldHVybiBuJiYhTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKGEpKT91KGB2WyR7dH1dIGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApOigiMCI9PT1TdHJpbmcoYSkmJihhPTApLGkoYSkpfWZ1bmN0aW9uIEFlKHQsZT17fSl7aWYoIV9lKHQsZSkpcmV0dXJuITE7cmV0dXJuIE9lKHQpPj0wfWNvbnN0IEVlPW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2FzeW5jIGZ1bmN0aW9uIE5lKHQsZT17fSl7aWYoIWZ1bmN0aW9uKHQpe2xldCBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTtpZigiW29iamVjdCBCbG9iXSI9PT1lfHwiW29iamVjdCBGaWxlXSI9PT1lKXJldHVybiEwO3RyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9iKXJldHVybiEwfWNhdGNoKHQpe31yZXR1cm4hMX0odCkmJihyPXQsIltvYmplY3QgRmlsZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpKSlyZXR1cm4gY29uc29sZS5sb2coImlucCIsdCksUHJvbWlzZS5yZWplY3QoImlucCBpcyBub3QgYSBCbG9iIG9yIEZpbGUiKTt2YXIgcjtsZXQgbj1odChlLCJjaHVua1NpemUiKTtkZShuKXx8KG49NjcxMDg4NjQpLG49Z2Uobik7bGV0e2NyZWF0ZTY0Om99PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e2V4cG9ydHM6e21lbTplLHh4aDMyOnIseHhoNjQ6bixpbml0MzI6byx1cGRhdGUzMjppLGRpZ2VzdDMyOnUsaW5pdDY0OmEsdXBkYXRlNjQ6YyxkaWdlc3Q2NDpmfX09dDtsZXQgcz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcik7ZnVuY3Rpb24gbCh0LHIpe2lmKGUuYnVmZmVyLmJ5dGVMZW5ndGg8dCtyKXtjb25zdCBuPU1hdGguY2VpbCgodCtyLWUuYnVmZmVyLmJ5dGVMZW5ndGgpLzY1NTM2KTtlLmdyb3cobikscz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcil9fWZ1bmN0aW9uIHAodCxlLHIsbixvLGkpe2wodCk7Y29uc3QgdT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gcy5zZXQodSkscigwLGUpLHUuc2V0KHMuc3ViYXJyYXkoMCx0KSkse3VwZGF0ZShlKXtsZXQgcjtyZXR1cm4gcy5zZXQodSksInN0cmluZyI9PXR5cGVvZiBlPyhsKDMqZS5sZW5ndGgsdCkscj1iLmVuY29kZUludG8oZSxzLnN1YmFycmF5KHQpKS53cml0dGVuKToobChlLmJ5dGVMZW5ndGgsdCkscy5zZXQoZSx0KSxyPWUuYnl0ZUxlbmd0aCksbigwLHQsciksdS5zZXQocy5zdWJhcnJheSgwLHQpKSx0aGlzfSxkaWdlc3Q6KCk9PihzLnNldCh1KSxpKG8oMCkpKX19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdD4+PjB9Y29uc3QgeT0ybioqNjRuLTFuO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQmeX1jb25zdCBiPW5ldyBUZXh0RW5jb2RlcixkPTAsZz0wbjtmdW5jdGlvbiBfKHQsZT1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLGgocigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfWZ1bmN0aW9uIGoodCxlPWcpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksdihuKDAsYi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9cmV0dXJue2gzMjpfLGgzMlRvU3RyaW5nOih0LGU9ZCk9Pl8odCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpLGgzMlJhdzoodCxlPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCksaChyKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlMzI6KHQ9ZCk9PnAoNDgsdCxvLGksdSxoKSxoNjQ6aixoNjRUb1N0cmluZzoodCxlPWcpPT5qKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIiksaDY0UmF3Oih0LGU9Zyk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSx2KG4oMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGU2NDoodD1nKT0+cCg4OCx0LGEsYyxmLHYpfX0oKGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEVlKSkuaW5zdGFuY2UpfSgpLGk9bygpLHU9MDtmb3IoO3U8dC5zaXplOyl7bGV0IGU9dC5zbGljZSh1LHUrbikscj1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aS51cGRhdGUobmV3IFVpbnQ4QXJyYXkocikpLHUrPW59cmV0dXJuIGkuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIil9bW9kdWxlLmV4cG9ydHM9YXN5bmMocixuLG8pPT57aWYoIShiZShpPW4pJiZpLmxlbmd0aDw9MTI4JiYvXltBLVphLXowLTldKyQvLnRlc3QoaSkpKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZUhhc2gifX12YXIgaTtpZighQXJyYXkuaXNBcnJheShyKSl7cmV0dXJue2Vycm9yOiJpbnZhbGlkIGZpbGVTbGljZUhhc2hzIn19aWYoMD09PXRlKHIpKXtyZXR1cm57ZXJyb3I6Im5vIGZpbGVTbGljZUhhc2hzIn19bGV0IHU9YCR7bn1fYCxhPWUucmVhZGRpclN5bmMobyksYz1uZXcgU2V0O2ZvcihsZXQgdCBvZiBhKXtpZighdC5zdGFydHNXaXRoKHUpKWNvbnRpbnVlO2xldCBlPXQuc2xpY2UodS5sZW5ndGgpO0FlKGUpJiZTdHJpbmcoT2UoZSkpPT09ZSYmYy5hZGQoT2UoZSkpfWxldCBmPVtdLHM9bmV3IFNldDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IHU9cltpXSxhPWh0KHUsImkiKTtpZighQWUoYSkpY29udGludWU7aWYoYT1PZShhKSwhYy5oYXMoYSl8fHMuaGFzKGEpKWNvbnRpbnVlO3MuYWRkKGEpO2xldCBsPXQucmVzb2x2ZShvLGAke259XyR7YX1gKSxwPSIiO3RyeXtwPWF3YWl0IE5lKG5ldyBCbG9iKFtlLnJlYWRGaWxlU3luYyhsKV0pKX1jYXRjaCh0KXtjb250aW51ZX1odCh1LCJoIik9PT1wJiZmLnB1c2goYSl9cmV0dXJue3Nsa3M6Zn19OwoKICAgIH0pLmNhbGwobWRVc2VyLmV4cG9ydHMsIG1kVXNlciwgbWRVc2VyLmV4cG9ydHMpCgogICAgLy/poJDoqK3ljK/lh7o6IHJvbGx1cOS7pV9fZXNNb2R1bGXmqJnnpLrpoJDoqK3oiIflhbflkI3kuKblrZjogIUsIOWPluWFtmRlZmF1bHQ7IOWQpuWJh21vZHVsZS5leHBvcnRz5Y2z6aCQ6Kit5Yyv5Ye6KOWPquacieWFt+WQjeWMr+WHuuiAheeCuuWRveWQjeepuumWk+eJqeS7tikKICAgIHJldHVybiAobWRVc2VyLmV4cG9ydHMgJiYgbWRVc2VyLmV4cG9ydHMuX19lc01vZHVsZSAmJiAnZGVmYXVsdCcgaW4gbWRVc2VyLmV4cG9ydHMpID8gbWRVc2VyLmV4cG9ydHMuZGVmYXVsdCA6IG1kVXNlci5leHBvcnRzCgp9KSgpKQoK",Buffer.from(i,"base64").toString("utf8"));var i;function r(){let n=new s,i=n.emit.bind(n),r={},o=!1,l="worker is dead",a=!1;function c(e){for(let t in r){let s=r[t];delete r[t],s.reject(e)}}function M(e){c(e),i("error",e)}function u(e){o||(o=!0,M(e))}let d=function(t){try{return new e.Worker(t,{eval:!0})}catch(e){l=e,u(e)}}(t);function w(){d?(a=!0,o||(o=!0,l="worker has been terminated"),d.terminate(),d=void 0,c("worker has been terminated")):M("worker has been terminated")}function I(e){return function(){let t=function(){let e,t,s=new Promise(function(){e=arguments[0],t=arguments[1]});return s.resolve=e,s.reject=t,s}();if(o)return t.reject(l),t;let s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=s.length;for(let i=0;i<e;i++)t[i]=s[0|Math.random()*n];return t.join("")}(),n={mode:"call",id:s,fun:e,input:[...arguments]};try{d.postMessage(n)}catch(e){return t.reject(e),t}return r[s]=t,t}}d||o||(l="invalid worker",u(l)),d&&(d.on("message",function(e){let t=e,s=t&&t.mode;if("emit"===s||"return"===s||"messageerror"===s){if("emit"===s&&i(t.evName,t.msg),"return"===s){let e=r[t.id];e&&(delete r[t.id],"success"===t.state?e.resolve(t.msg):e.reject(t.msg))}"messageerror"===s&&M(t.msg)}}),d.on("error",u),d.on("exit",e=>{a||u("worker exit, code["+e+"]")}),d.on("messageerror",e=>{M(e)}),function(){let e={mode:"init",type:"function",input:[...arguments]};try{d.postMessage(e)}catch(e){throw w(),e}}([...arguments]));for(let e of["main"])n[e]=I(e);return n.terminate=w,n}n=async function(){let e=[...arguments],t=r();return await t.main(...e).finally(()=>{t.terminate()})}}(),n}(t)}({get exports(){return s},set exports(e){s=e}}),s)}(Pi);var Fi=Wt(Pi.exports);function Bi(e,t){try{return{ok:!0,value:t()}}catch(t){let s=ws(t);return{ok:!1,stage:e,cause:Be(s)?s:"unknown error"}}}function $i(e,t){try{return r.validateHeaderValue(e,t),!0}catch(e){return!1}}function _i(e,t,s,n={}){let r=!0===ge(n,"forHead",!1);if(null==e)return{error:"invalid streamRead",reason:"streamRead is null or undefined"};let o=Bi("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(r)return{source:e};let n=Bi("setup pipeline",()=>{let n=0,r=!1,o=new i.Transform({transform(e,s,i){if(n+=e.length,n>t)return r=!0,void i(new Error(`streamRead sent more than fileSize[${t}] bytes`));i(null,e)},flush(e){if(n!==t)return r=!0,void e(new Error(`streamRead ended at ${n} bytes but fileSize is ${t}`));e()}});return i.pipeline(e,o,e=>{e&&r&&s(ws(e))}),o});return n.ok?{source:n.value}:{error:"invalid streamRead",reason:`${n.stage} failed: ${n.cause}`}}let l=Bi("materialize streamRead",()=>{if(Buffer.isBuffer(e))return{buf:e};if(e instanceof Uint8Array)return{buf:Buffer.from(e)};if(Fe(e))return{buf:Buffer.from(e,"utf8")};if("number"==typeof e||Pe(e)||"object"==typeof e&&!1===function(e){try{return St(e.pipe)}catch(e){return null}}(e)){let t=null;try{t=JSON.stringify(e)}catch(e){return{unserializable:ws(e)}}return"string"!=typeof t?{unserializable:""}:{buf:Buffer.from(t,"utf8")}}return{unsupported:!0}});if(!l.ok)return{error:"invalid streamRead",reason:`${l.stage} failed: ${l.cause}`};if(Rt(l.value,"unserializable")){let e=l.value.unserializable;return{error:"invalid streamRead",reason:Be(e)?`streamRead can not be serialized: ${e}`:"streamRead can not be serialized"}}if(!0===l.value.unsupported)return{error:"invalid streamRead",reason:"streamRead must be a readable stream, buffer, string, number, boolean or plain object"};let a=l.value.buf;return a.length!==t?{error:"fileSize mismatch",reason:`streamRead has ${a.length} bytes but fileSize is ${t}`}:{source:a}}let qi=e=>"function"==typeof e.toWellFormed?e.toWellFormed():e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"�");function er(e,t){let s=Bi(`check field[${e}]`,()=>{if("fileSize"===e)return function(e){return Yt(e,{useLimitSafe:!0})}(t)?{ok:!0,value:Dt(t)}:{ok:!1};if("filename"===e||"fileType"===e){if(!Be(t))return{ok:!1};let s=Is(t);return Be(s)?"fileType"===e?$i("Content-Type",s)?{ok:!0,value:s}:{ok:!1}:{ok:!0,value:qi(s)}:{ok:!1}}throw new Error(`unknown field[${e}]`)});return s.ok?{ok:s.value.ok,value:s.value.value,cause:""}:{ok:!1,value:void 0,cause:s.cause}}function tr(e){try{e&&St(e.pipe)&&St(e.destroy)&&e.destroy()}catch(e){}}function sr(e){let t=typeof e;return void 0===e||"function"===t||"symbol"===t?null:e}function nr(e,t,s={}){let n=new i.Readable;n._read=()=>{},n.push(t),n.push(null);let r=ge(s,"returnType",""),o=ge(s,"returnMsg",""),l=e.response(n).header("Cache-Control","no-cache, no-store, must-revalidate").header("Content-Type","application/octet-stream").header("Content-Length",n.readableLength);return Be(r)&&l.header("Return-Type",r),Be(o)&&$i("Return-Msg",o)&&l.header("Return-Msg",o),l}function ir(e,t){return 0===e.listenerCount(t)?`no listener for event[${t}]`:""}function rr(r={}){let o={useLimitSafe:!0},l=!!ge(r,"serverHapi"),a=[],c=ge(r,"port");(!pt(c,o)||Dt(c)>65535)&&(c=8080),c=Dt(c);let M=ge(r,"useInert");null==M?M=!0:Pe(M)||(l||a.push("invalid useInert: must be a boolean, static files are not served"),M=!1);let u=ge(r,"pathStaticFiles");null==u?u="dist":Be(u)||(M&&!l&&a.push("invalid pathStaticFiles: must be a non-empty string, static files are not served"),M=!1,u="dist");let d=ge(r,"pathUploadTemp");Be(d)||(d="./uploadTemp");let w="";if(!Ft(d)){let e=Rs(d);Rt(e,"error")&&(w=ws(e.error))}let I=ge(r,"apiName");Be(I)||(I="api");let y=ge(r,"tokenType");Be(y)||(y="Bearer");let g=ge(r,"sizeSlice");pt(g,o)||(g=1048576),g=Dt(g);let L=ge(r,"sizeMsg");pt(L,o)||(L=104857600),L=Dt(L);let m=ge(r,"verifyConn");if(null==m)m=()=>!0;else{let e=!1;try{e=St(m)}catch(e){}e||(a.push("invalid verifyConn: must be a function (sync or async), all API requests will be denied"),m=()=>!1)}let D="invalid corsOrigins: must be an array of origin strings ('*' must be the only element if present), or false to disable; CORS is disabled",p=ge(r,"corsOrigins"),C=null!=p;C?l?a.push("corsOrigins has no effect with serverHapi: the cross-origin policy is decided by the external server"):!1===p||""===p?p=null:Be(p)?p=[p]:qt(p)?(p=p.filter(e=>""!==e),0===p.length&&(p=null)):(a.push(D),p=null):p=["*"];let h=ge(r,"delayForSlice","");(!Yt(h,o)||Dt(h)>2147483647)&&(h=100),h=Dt(h);let f=null;if(l)f=r.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:c,routes:{timeout:{server:!1,socket:!1},cors:t}}};try{f=s.server(e(p))}catch(t){if(!C||null===p)throw t;console.log("invalid corsOrigins",t),a.push(D),p=null,f=s.server(e(p))}}let b=Ut(),N={tag:"w-converhp"},x=(e,...t)=>Qt(b,e,t,{...N,funSettle:()=>{let s=t[t.length-1];At(s)&&s.reject(`listener of event[${e}] error`)},funEmit:Z}),T=(e,...t)=>rs(b,e,t,{...N,funEmit:Z});function Z(e,...t){if("error"===e&&qe(t[0])&&"listener"===t[0].fun){let e=ge(t[0],"name",""),s=ge(t[0],"msg");return console.log(`listener of event[${e}] error`,s),b.emit("error",`listener of event[${e}] error: ${ws(s)}`)}return b.emit(e,...t)}Be(w)&&T("error",`create pathUploadTemp[${d}] error: ${w}`);for(let e of a)T("error",e);let S=(e,t,s)=>{let n=zt(),i=zt();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 x("error",`event[${e}] output can not be serialized: output is a ${i}`);n.resolve(St(s)?s(t):t)}).catch(e=>{n.reject(e)}),function(e,t,s,n,i,r){let o=ir(e,s);Be(o)?(i.reject(o),r(o)):t(s,...n,i)}(b,x,e,t,i,e=>{x("error",e)}),n};async function A(e){return S("upload",[e])}async function Y(e){return S("download",[e])}let X=`${Is(y)} `,v=(e,t)=>{let s=ge(e,"headers");s=qe(s)?s:"";let n=ge(e,"query");n=qe(n)?n:"";let i="",r="";return"query"===t.authFrom?(r=ge(n,"token",""),r=Be(r)?r:"",Be(r)&&(i=`${y} ${r}`)):(i=ge(s,"authorization",""),i=Be(i)?i:"",r=i.startsWith(X)?i.slice(X.length):""),{headers:s,query:n,authorization:i,token:r}},z=(e,t)=>{let s=(s,n,i)=>function(e,t,s={}){Be(t)||(console.log("msg",t),console.log("msg is not an effective string, set msg=''"),t="");let n=ge(s,"retryable",!0),i={error:t};!1===n&&(i.retryable=!1);let r=nr(e,ks(i),{returnType:"error",returnMsg:t});return!1===n&&r.header("Return-Retryable","false"),r}(e,n,i).code(t.statusOf[s]);return{permission:()=>s("permission","permission denied"),param:e=>s("param",e,{retryable:!1}),app:e=>s("app",e),output:e=>s("output",e),packet:e=>s("packet",e),internal:e=>s("internal",e)}},E=async(e,t,s,n)=>!0!==await async function(e){let t=!1;try{t=m(e),At(t)&&(t=await t)}catch(s){t=!1,console.log(`verifyConn error for apiType[${ge(e,"apiType","")}]`,s),x("error",`verifyConn error for apiType[${ge(e,"apiType","")}]: ${ws(s)}`)}return!0===t}({apiType:s.apiType,authorization:t.authorization,query:t.query,headers:t.headers,req:e})?n.permission():(x("handler",{api:s.api,headers:t.headers,query:t.query}),null),j=(e,t)=>{let s=ir(b,e.event);if(!Be(s))return null;let n=t.app(s);return x("error",s),n},G=(e,t,s,n)=>{let i=function(e,t){let s={};for(let n of t){let t=Bi(`read field[${n}]`,()=>ge(e,n));if(!t.ok)return{ok:!1,field:n,cause:t.cause,fields:s};s[n]=t.value}return{ok:!0,fields:s}}(e,s.fields.map(e=>e.name));if(!i.ok)return tr(ge(i.fields,"streamRead")),x("error",`download fileId[${t}] output error: can not read field[${i.field}]: ${i.cause}`),{ok:!1,res:n.output("invalid streamRead")};let r={streamRead:i.fields.streamRead};for(let e of s.fields){if("streamRead"===e.name)continue;let s=er(e.name,i.fields[e.name]);if(s.ok){r[e.name]=s.value;continue}if(!0===e.optional&&!Be(s.cause)){r[e.name]="";continue}tr(r.streamRead);let o="fileSize"===e.name?`[${ws(i.fields.fileSize)}]`:"";return x("error",`download fileId[${t}] output error: invalid ${e.name}${o}${Be(s.cause)?`: ${s.cause}`:""}`),{ok:!1,res:n.output(`invalid ${e.name}`)}}return{ok:!0,v:r}},W=async(e,t,s,n)=>{let i={},r="";await s.then(e=>{i.success=e,r="success"}).catch(e=>{i.error=e,r="error"});let o=function(e,t){let s={};for(let t of Object.keys(e))s[t]=sr(e[t]);let n=ks(s,{returnWithStateAndMsg:!0});return"success"!==ge(n,"state")?(t(ge(n,"msg","unknown error")),null):n.msg}(i,e=>{x("error",`${n} output can not be serialized: ${e}`)});return null===o?t.internal("output can not be serialized"):nr(e,o,{returnType:r,returnMsg:"need to parse"})},K=e=>(t,s,n)=>{if(413===ge(n,"output.statusCode"))throw n;return x("error",`invalid request packet for ${e.api}: ${ws(n)}`),z(s,e).packet("invalid request packet").takeover()},k={path:`/${I}/main`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(e,t){let s=Fs.main,n=z(t,s),r=v(e,s),o=await E(e,r,s,n);if(o)return o;let l=null;try{l=await(()=>{let t=zt(),s=[],n=0,r=!1,o=new i.Writable({write(e,t,i){if(n+=e.length,n>L)return s=[],r=!0,void i();s.push(e),i()}});return o.on("finish",()=>{}),e.payload.pipe(o),e.payload.on("end",()=>{if(r)return void t.reject("payload too large");let e=Buffer.concat(s);s=[],t.resolve(e)}),e.payload.on("close",()=>{}),e.payload.on("error",e=>{console.log("apiMain req.payload err",e),x("error",`receive payload error: ${ws(e)}`),t.reject(`receive payload error: ${ws(e)}`)}),e.payload.destroyed&&(x("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: ${L}`}).code(413);throw e}let a=Hs(new Uint8Array(l),{returnWithStateAndMsg:!0});if("success"!==ge(a,"state")||!qe(a.msg)){let e=ws(ge(a,"msg",""));return x("error",`invalid request packet for apiMain: ${Be(e)?e:"not an effective object"}`),n.packet("invalid request packet")}let c=a.msg;return W(t,n,async function(e){return S("execute",[ge(e,"func",""),ge(e,"input",null)],t=>(e.output=t,delete e.input,e))}(c),`execute func[${ws(ge(c,"func",""))}]`)}},V={path:`/${I}/ulctr`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,parse:!0,failAction:K(Fs.ulctr)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let s=Fs.ulctr,n=z(t,s),i=v(e,s),r=await E(e,i,s,n);if(r)return r;let o=ge(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[${ws(o)}] in payload`);let l=ge(e,"payload.fileHash","");if(!Os(l))return n.param("invalid fileHash in payload");let a=ge(e,"payload.chunkTotal","");if("merge-slices-push"===o){if(!pt(a))return n.param("invalid chunkTotal in payload");a=Dt(a)}if("merge-slices-get"!==o){let e=j(s,n);if(e)return e}let c=ge(e,"payload.filename",""),M=function(e,t="unknown"){if(!Be(e))return t;let s=e.replace(/\\/g,"/").split("/").filter(e=>""!==e&&"."!==e&&".."!==e).pop()||"";return s=s.replace(/[\x00-\x1f\x7f<>:"|?*]/g,"_"),s=s.replace(/[. ]+$/g,""),/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i.test(s)&&(s=`_${s}`),""===s?t:s}(c,""),u=e=>qe(e)&&Rt(e,"error")?`${o}: ${Is(e.error)}`:"",w=async(e,t)=>{try{return await t()}catch(t){return x("error",`upload-controller mode[${o}] ${e} error: ${ws(t)}`),Promise.reject(`${o} failed`)}};return W(t,n,(async()=>{let t=null;if("check-total-hash"===o){let s=ge(e,"payload.fileSize","");t=await w("check total hash",()=>Oi(s,g,l,d));let n=u(t);if(Be(n))return Promise.reject(n);if(t.bAllHash){let e={from:"check-total-hash",filename:c,filenameSafe:M,path:t.path},s=await A(e);t={...t,msg:s}}delete t.path,t.sizeSlice=g}else if("check-slices-hash"===o){let s=ge(e,"payload.fileSliceHashs",[]);t=await w("check slices hash",()=>Fi(s,l,d));let n=u(t);if(Be(n))return Promise.reject(n)}else if("merge-slices-push"===o){t={queueId:await w("push merge task",()=>Hi(l,a,d))}}else if("merge-slices-get"===o){let s=ge(e,"payload.queueId",""),n=await Ri(s,d,{funConsume:async e=>await A({from:"merge-slices-get",filename:c,filenameSafe:M,path:e}),funLog:e=>{x("error",e)}});t={state:n.state,msg:n.msg,queueId:s,filename:c},"error"===n.state&&Be(n.reason)&&x("error",`${n.msg} for fileHash[${l}]: ${n.reason}`)}return t})(),`upload-controller mode[${o}]`)}},U={path:`/${I}/slc`,method:"POST",options:{payload:{maxBytes:g,maxParts:1e9,timeout:!1,output:"stream",parse:!1},timeout:{server:!1,socket:!1}},handler:async function(s,n){let i=Fs.slc,r=z(n,i),o=v(s,i),l=await E(s,o,i,r);if(l)return l;let a=ge(o.headers,"chunk-index",""),c=ge(o.headers,"chunk-total",""),M=ge(o.headers,"package-id","");if(!Yt(a))return r.param("invalid chunkIndex in headers");if(a=Dt(a),!Yt(c))return r.param("invalid chunkTotal in headers");if(c=Dt(c),!Os(M))return r.param("invalid packageId in headers");let u=j(i,r);if(u)return u;let w=e.resolve(d,`${M}_${a}`),I=t.createWriteStream(w),y=()=>{let e=zt(),t=0,n=!1,i=!1,r=!1,o=!1;I.on("error",t=>{i||n||r||(i=!0,s.payload.unpipe(I),s.payload.resume(),console.log(`apiUploadSlice streamWrite chunk[${a+1}/${c}] of packageId[${M}] err`,t),x("error",`write chunk[${a+1}/${c}] of packageId[${M}] error: ${ws(t)}`),e.reject(`write chunk[${a+1}/${c}] of packageId[${M}] error`))}),I.on("close",()=>{n||i||r?Js(w):o&&!0===I.writableFinished&&setTimeout(()=>{e.resolve(`chunk[${a+1}/${c}] of packageId[${M}] done`)},h)}),s.payload.on("data",e=>{n||(t+=e.length,t>g&&(n=!0,s.payload.unpipe(I),s.payload.resume(),I.destroy()))}),s.payload.pipe(I),s.payload.on("end",()=>{o=!0,i||n&&e.reject("payload too large")});let l=t=>{r||o||i||(r=!0,I.destroy(),x("error",`receive chunk[${a+1}/${c}] of packageId[${M}] error: ${t}`),e.reject(`receive chunk[${a+1}/${c}] of packageId[${M}] error: ${t}`))};return s.payload.on("error",e=>{console.log(`apiUploadSlice req.payload chunk[${a+1}/${c}] of packageId[${M}] err`,e),l(ws(e))}),s.payload.on("close",()=>{l("closed before end")}),s.payload.destroyed&&l("closed before receive"),e},L={},m="",D="";try{let e=await y();L.success=e,m="success",D="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);L.error=e,m="error",D="need to parse"}return nr(n,ks(L),{returnType:m,returnMsg:D})}},Q={path:`/${I}/dwgfn`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,parse:!0,failAction:K(Fs.dwgfn)},timeout:{server:!1,socket:!1}},handler:async function(e,t){let s=Fs.dwgfn,n=z(t,s),i=v(e,s),r=await E(e,i,s,n);if(r)return r;let o=ge(e,"payload.fileId","");if(!Be(o))return n.param("invalid fileId in payload");let l={fileId:o,token:i.token},a={};if(await Y(l).then(e=>{a.success=e}).catch(e=>{a.error=e}),Rt(a,"error"))return n.app("can not get file from fileId");let c=G(ge(a,"success"),o,s,n);return c.ok?(tr(c.v.streamRead),W(t,n,Promise.resolve({filename:c.v.filename}),`download fileId[${o}]`)):c.res}},H={path:`/${I}/dwgf`,method:"GET",options:{timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let s=Fs.dwgf,n=z(t,s),i=v(e,s),r=await E(e,i,s,n);if(r)return r;let o=ge(i.query,"fileId","");if(o=Be(o)?o:"",!Be(o))return n.param("invalid fileId in query");let l={fileId:o,token:i.token},a={};if(await Y(l).then(e=>{a.success=e}).catch(e=>{a.error=e}),Rt(a,"error"))return n.app("can not get file from fileId");let c=G(ge(a,"success"),o,s,n);if(!c.ok)return c.res;let M=c.v.streamRead,u=c.v.fileSize,d=c.v.fileType,w=c.v.filename,I=_i(M,u,e=>{x("error",`download fileId[${o}] stream error: ${e}`)},{forHead:"head"===Is(ge(e,"method","")).toLowerCase()});if(I.error)return tr(M),x("error",`download fileId[${o}] output error: ${I.reason}`),n.output(I.error);let y=t.response(I.source).type(d).header("Content-Encoding","identity").header("Content-Length",u).header("Content-Disposition",Be(w)?`attachment; filename*=UTF-8''${function(e){let t=Array.from(Is(e)),s="";for(let e of t){let t="";try{t=encodeURIComponent(e)}catch(e){t="%EF%BF%BD"}s+=t}return s.replace(/['()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}(w)}`:"attachment");return y}},R={path:`/${I}/dw`,method:"POST",options:{payload:{maxBytes:L,maxParts:1e9,timeout:!1,parse:!0,failAction:K(Fs.dw)},timeout:{server:!1,socket:!1},response:{emptyStatusCode:200}},handler:async function(e,t){let s=Fs.dw,n=z(t,s),i=v(e,s),r=await E(e,i,s,n);if(r)return r;let o=ge(e,"payload.fileId","");if(!Be(o))return n.param("invalid fileId in payload");let l={fileId:o,token:i.token},a={};if(await Y(l).then(e=>{a.success=e}).catch(e=>{a.error=e}),Rt(a,"error"))return n.app("can not get file from fileId");let c=G(ge(a,"success"),o,s,n);if(!c.ok)return c.res;let M=c.v.streamRead,u=function(e,t={}){let s=ge(t,"returnWithStateAndMsg",null);Pe(s)||(s=!1);let n=e=>s?{state:"error",msg:e}:"";if(!Be(e))return n("invalid str");let i="";try{let t=ps.parse(e);i=hs.stringify(t)}catch(e){return n(e.toString())}return s?{state:"success",msg:i}:i}(c.v.filename),d=c.v.fileSize,w=c.v.fileType,I=_i(M,d,e=>{x("error",`download fileId[${o}] stream error: ${e}`)},{forHead:"head"===Is(ge(e,"method","")).toLowerCase()});return I.error?(tr(M),x("error",`download fileId[${o}] output error: ${I.reason}`),n.output(I.error)):t.response(I.source).type(w).header("Content-Encoding","identity").header("Content-Disposition",`attachment; filename="${u}"`).header("Content-Length",d)}};let J=null;if(l)try{f.route([k,V,U,Q,H,R])}catch(e){console.log("register routes error",e),T("error",`register routes error: ${ws(e)}`)}else J=async function(){M&&await f.register(n);let e=[];if(M){let t={method:"GET",path:"/{file*}",handler:{directory:{path:`${u}/`}}};e=[...e,t]}e=[...e,k,V,U,Q,H,R],f.route(e),await f.start(),console.log(`Server running at: ${f.info.uri}`)}().catch(e=>{console.log("start server error",e),T("error",`start server error: ${ws(e)}`)});return b.stop=async()=>{try{At(J)&&await J,await f.stop()}catch(e){console.log("stop server error",e),x("error",`stop server error: ${ws(e)}`)}},b}function or(){if(!St(Xn))throw new Error("invalid dayjs");return Xn().format("YYYY-MM-DDTHH:mm:ssZ")}var lr=function(){return I.Date.now()},ar=Math.max,cr=Math.min;function Mr(e,t,s){var n,i,r,o,l,a,c=0,M=!1,u=!1,d=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function w(t){var s=n,r=i;return n=i=void 0,c=t,o=e.apply(r,s)}function I(e){var s=e-a;return void 0===a||s>=t||s<0||u&&e-c>=r}function y(){var e=lr();if(I(e))return g(e);l=setTimeout(y,function(e){var s=t-(e-a);return u?cr(s,r-(e-c)):s}(e))}function g(e){return l=void 0,d&&n?w(e):(n=i=void 0,o)}function L(){var e=lr(),s=I(e);if(n=arguments,i=this,a=e,s){if(void 0===l)return function(e){return c=e,l=setTimeout(y,t),M?w(e):o}(a);if(u)return clearTimeout(l),l=setTimeout(y,t),w(a)}return void 0===l&&(l=setTimeout(y,t)),o}return t=lt(t)||0,Z(s)&&(M=!!s.leading,r=(u="maxWait"in s)?ar(lt(s.maxWait)||0,t):r,d="trailing"in s?!!s.trailing:d),L.cancel=function(){void 0!==l&&clearTimeout(l),c=0,n=a=i=l=void 0},L.flush=function(){return void 0===l?o:g(lr())},L}var ur=function(){try{var e=U(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),dr=ur;function wr(e,t,s){"__proto__"==t&&dr?dr(e,t,{configurable:!0,enumerable:!0,value:s,writable:!0}):e[t]=s}function Ir(e,t,s){(void 0!==s&&!O(e[t],s)||void 0===s&&!(t in e))&&wr(e,t,s)}var yr="object"==typeof exports&&exports&&!exports.nodeType&&exports,gr=yr&&"object"==typeof module&&module&&!module.nodeType&&module,Lr=gr&&gr.exports===yr?I.Buffer:void 0,mr=Lr?Lr.allocUnsafe:void 0;function Dr(e,t){if(t)return e.slice();var s=e.length,n=mr?mr(s):new e.constructor(s);return e.copy(n),n}function pr(e){var t=new e.constructor(e.byteLength);return new Vn(t).set(new Vn(e)),t}function Cr(e,t){var s=t?pr(e.buffer):e.buffer;return new e.constructor(s,e.byteOffset,e.length)}function hr(e,t){var s=-1,n=e.length;for(t||(t=Array(n));++s<n;)t[s]=e[s];return t}var fr=Object.create,br=function(){function e(){}return function(t){if(!Z(t))return{};if(fr)return fr(t);e.prototype=t;var s=new e;return e.prototype=void 0,s}}(),Nr=br;function xr(e){return"function"!=typeof e.constructor||Ve(e)?{}:Nr(Ct(e))}function Tr(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var Zr=Object.prototype.hasOwnProperty;function Sr(e,t,s){var n=e[t];Zr.call(e,t)&&O(n,s)&&(void 0!==s||t in e)||wr(e,t,s)}function Ar(e,t,s,n){var i=!s;s||(s={});for(var r=-1,o=t.length;++r<o;){var l=t[r],a=n?n(s[l],e[l],l,s,e):void 0;void 0===a&&(a=e[l]),i?wr(s,l,a):Sr(s,l,a)}return s}var Yr=Object.prototype.hasOwnProperty;function Xr(e){if(!Z(e))return function(e){var t=[];if(null!=e)for(var s in Object(e))t.push(s);return t}(e);var t=Ve(e),s=[];for(var n in e)("constructor"!=n||!t&&Yr.call(e,n))&&s.push(n);return s}function vr(e){return Je(e)?Ke(e,!0):Xr(e)}function zr(e,t,s,n,i,r,o){var l=Tr(e,s),a=Tr(t,s),c=o.get(a);if(c)Ir(e,s,c);else{var M,d=r?r(l,a,s+"",e,t,o):void 0,w=void 0===d;if(w){var I=u(a),y=!I&&xe(a),g=!I&&!y&&Ge(a);d=a,I||y||g?u(l)?d=l:f(M=l)&&Je(M)?d=hr(l):y?(w=!1,d=Dr(a,!0)):g?(w=!1,d=Cr(a,!0)):d=[]:Tt(a)||he(a)?(d=l,he(l)?d=function(e){return Ar(e,vr(e))}(l):Z(l)&&!S(l)||(d=xr(a))):w=!1}w&&(o.set(a,d),i(d,a,n,r,o),o.delete(a)),Ir(e,s,d)}}function Er(e,t,s,n,i){e!==t&&Ns(t,function(r,o){if(i||(i=new jn),Z(r))zr(e,t,o,s,Er,n,i);else{var l=n?n(Tr(e,o),r,o+"",e,t,i):void 0;void 0===l&&(l=r),Ir(e,o,l)}},vr)}var jr=Math.max;function Gr(e,t,s){return t=jr(void 0===t?e.length-1:t,0),function(){for(var n=arguments,i=-1,r=jr(n.length-t,0),o=Array(r);++i<r;)o[i]=n[t+i];i=-1;for(var l=Array(t+1);++i<t;)l[i]=n[i];return l[t]=s(o),function(e,t,s){switch(s.length){case 0:return e.call(t);case 1:return e.call(t,s[0]);case 2:return e.call(t,s[0],s[1]);case 3:return e.call(t,s[0],s[1],s[2])}return e.apply(t,s)}(e,this,l)}}var Wr=dr?function(e,t){return dr(e,"toString",{configurable:!0,enumerable:!1,value:(s=t,function(){return s}),writable:!0});var s}:Zs,Kr=Wr,kr=Date.now;var Vr=function(e){var t=0,s=0;return function(){var n=kr(),i=16-(n-s);if(s=n,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Kr),Ur=Vr;var Qr,Hr=(Qr=function(e,t,s){Er(e,t,s)},function(e,t){return Ur(Gr(e,t,Zs),e+"")}(function(e,t){var s=-1,n=t.length,i=n>1?t[n-1]:void 0,r=n>2?t[2]:void 0;for(i=Qr.length>3&&"function"==typeof i?(n--,i):void 0,r&&function(e,t,s){if(!Z(s))return!1;var n=typeof t;return!!("number"==n?Je(s)&&Ze(t,s.length):"string"==n&&t in s)&&O(s[t],e)}(t[0],t[1],r)&&(i=n<3?void 0:i,n=1),e=Object(e);++s<n;){var o=t[s];o&&Qr(e,o,s,i)}return e})),Rr=Hr;let Jr="w-sync-webdata";function Or(e,s={}){let n={},i=!1,r=!1,o=null;if(qe(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=Ut()),!Rt(e,"emit"))throw new Error("instWConverServer is not an EventEmitter");let l=ge(s,"fpTableTags","");Be(l)||(l="./tableTags.json");let a=ge(s,"genTag");St(a)||(a=()=>or()+"|"+En(6));let{emit:c,emitNow:M,clear:u}=function(e,t){let s=t=>St(e.listenerCount)?e.listenerCount(t):1,n={emit:(t,...s)=>e.emit(t,...s),listenerCount:s},i=(t,...n)=>{if("error"!==t)return e.emit(t,...n);let i=n[0];return _e(i)&&"listener"===i.fun&&(i={msg:`listener of event[${i.name}] error`,err:i.msg}),0===s("error")?(console.error(`[${Jr}]`,i),!1):e.emit("error",i)},r=new Set,o=(e,t,s)=>{let i=null,o=s.funEmit;i=rs(n,e,t,{...s,tag:Jr,funEmit:(e,...t)=>(r.delete(i),o(e,...t))}),r.add(i)};return{emit:(e,...s)=>{t()||o(e,s,{funEmit:(e,...s)=>!t()&&i(e,...s)})},emitPm:(n,r,l={})=>{let a=r.pm;if(t())return;let c=!1,M=!1,u=a.resolve,d=a.reject;a.resolve=e=>{c=!0,u(e)},a.reject=e=>{c=!0,d(e)},o(n,[r],{funSettle:e=>{c||(c=!0,M=!0,d(e))},funEmit:(r,...o)=>r!==n?!!M||!t()&&i(r,...o):!t()&&(!St(l.beforeDispatch)||!1!==l.beforeDispatch())&&(0===s(r)?(c=!0,M=!0,d(new Error(`no listener for event[${r}]`)),!1):e.emit(r,...o))})},emitNow:(e,...t)=>Qt(n,e,t,{tag:Jr,funEmit:i}),clear:()=>{r.forEach(e=>{clearTimeout(e)}),r.clear()}}}(e,()=>i);function d(){let e={};try{if(t.existsSync(l)){let s=$e(t.readFileSync(l,"utf8"));qe(s)&&(e=s)}}catch(e){c("error",{msg:"readTableTags catch",err:e})}return e}let w=()=>{let e=function(e,t=!1,s={}){let n=ge(s,"returnWithStateAndMsg",null);Pe(n)||(n=!1);let i=e=>n?{state:"error",msg:e}:"";if(es(e))return i("invalid v");let r="";try{r=t?JSON.stringify(e,null,2):JSON.stringify(e)}catch(e){return i(As(e))}return n?{state:"success",msg:r}:r}(n,!1,{returnWithStateAndMsg:!0});if("success"!==ge(e,"state"))return new Error(`can not serialize tableTags: ${ge(e,"msg")}`);try{t.writeFileSync(l,e.msg,"utf8")}catch(e){return e}return o=e.msg,r=!1,null};function I(){if(i)return;let e=w();e&&c("error",{msg:"writeTableTags catch",err:e})}let y=Mr(()=>{I(),c("changeTableTags",n)},200);return e.readTableTags=d,e.writeTableTags=I,e.initTableTags=function(e={},t="useInputFirst"){if(!i)if(null===e&&(e={}),_e(e)){if("useInputOnly"===t)n=e;else if("useStorageOnly"===t)n=d();else if("useInputFirst"===t)n=Rr(d(),e);else{if("useStorageFirst"!==t)throw new Error(`invalid mode[${t}]`);n=Rr(e,d())}I()}else c("error",{msg:"invalid tableTags for initTableTags",err:e})},e.setTableTags=function(e={}){i||(null===e&&(e={}),_e(e)?(n=Rr(n,e),I()):c("error",{msg:"invalid tableTags for setTableTags",err:e}))},e.getTableTags=function(){return n},e.updateTableTag=function(e){i||(Be(e)?(n[e]=a(),r=!0,y()):c("error",{msg:"invalid tableName",err:e}))},e.clearSync=function(){if(i)return;y.cancel();let e=null;if(r){let s=null;try{t.existsSync(l)&&(s=t.readFileSync(l,"utf8"))}catch(e){s=void 0}null!==s&&s!==o||(e=w())}i=!0,u(),e&&M("error",{msg:"writeTableTags catch",err:e})},e}var Pr=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)Jn(t,_n(e)),e=Ct(e);return t}:Fn,Fr=Pr;function Br(e){return On(e,vr,Fr)}var $r=Object.prototype.hasOwnProperty;var _r=/\w*$/;var qr=y?y.prototype:void 0,eo=qr?qr.valueOf:void 0;function to(e,t,s){var n,i=e.constructor;switch(t){case"[object ArrayBuffer]":return pr(e);case"[object Boolean]":case"[object Date]":return new i(+e);case"[object DataView]":return function(e,t){var s=t?pr(e.buffer):e.buffer;return new e.constructor(s,e.byteOffset,e.byteLength)}(e,s);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 Cr(e,s);case"[object Map]":case"[object Set]":return new i;case"[object Number]":case"[object String]":return new i(e);case"[object RegExp]":return function(e){var t=new e.constructor(e.source,_r.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,eo?Object(eo.call(n)):{}}}var so=Ee&&Ee.isMap,no=so?Ye(so):function(e){return f(e)&&"[object Map]"==dn(e)};var io=Ee&&Ee.isSet,ro=io?Ye(io):function(e){return f(e)&&"[object Set]"==dn(e)},oo="[object Arguments]",lo="[object Function]",ao="[object Object]",co={};function Mo(e,t,s,n,i,r){var o,l=1&t,a=2&t,c=4&t;if(s&&(o=i?s(e,n,i,r):s(e)),void 0!==o)return o;if(!Z(e))return e;var M=u(e);if(M){if(o=function(e){var t=e.length,s=new e.constructor(t);return t&&"string"==typeof e[0]&&$r.call(e,"index")&&(s.index=e.index,s.input=e.input),s}(e),!l)return hr(e,o)}else{var d=dn(e),w=d==lo||"[object GeneratorFunction]"==d;if(xe(e))return Dr(e,l);if(d==ao||d==oo||w&&!i){if(o=a||w?{}:xr(e),!l)return a?function(e,t){return Ar(e,Fr(e),t)}(e,function(e,t){return e&&Ar(t,vr(t),e)}(o,e)):function(e,t){return Ar(e,_n(e),t)}(e,function(e,t){return e&&Ar(t,Oe(t),e)}(o,e))}else{if(!co[d])return i?e:{};o=to(e,d,l)}}r||(r=new jn);var I=r.get(e);if(I)return I;r.set(e,o),ro(e)?e.forEach(function(n){o.add(Mo(n,t,s,n,e,r))}):no(e)&&e.forEach(function(n,i){o.set(i,Mo(n,t,s,i,e,r))});var y=M?void 0:(c?a?Br:qn:a?vr:Oe)(e);return fs(y||e,function(n,i){y&&(n=e[i=n]),Sr(o,i,Mo(n,t,s,i,e,r))}),o}co[oo]=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 uo(e){return Mo(e,5)}function wo(e={}){let t=Ut(),s=Object.create(null),n=null,i=new Set,r=new Set,o=!1,l=ge(e,"timeAlive");pt(l)||(l=1e4),l=Dt(l),l=Math.min(l,jt);let a=ge(e,"timeDetect");return pt(a)||(a=50),a=Dt(a),a=Math.min(a,jt),t.trigger=function(e,c){if(!o)if(Be(e)){if(!Rt(s,e)){let n=setTimeout(()=>{i.delete(n),Rt(s,e)&&r.add(e),Qt(t,"message",[{eventName:"enter",key:e,data:c,now:An(s)}],{tag:"alive"})},1);i.add(n)}s[e]={data:c,time:Date.now()},o||null===n&&(n=setInterval(()=>{Ss(s,(e,n)=>{if(Date.now()-e.time>l){let e=uo(s[n]);if(delete s[n],r.delete(n),Qt(t,"message",[{eventName:"leave",key:n,data:e.data,now:An(s)}],{tag:"alive"}),o)return!1}}),o||qe(s)||(clearInterval(n),n=null)},a))}else console.log("trigger need key")},t.get=function(){let e=[];return Ss(s,(t,s)=>{e.push({key:s,data:t.data})}),e=uo(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 Ss(s,(t,s)=>{r.has(s)&&e.push({key:s,data:t.data})}),e=uo(e),s=Object.create(null),r.clear(),e},t}function Io(e,t={}){let s=t.isCleared;St(s)||(s=()=>!1);let n=t.onDeliver;St(n)||(n=null);let i=e=>{console.error(`[w-serv-broadcast] ${e.msg}`,e.err)},r=t=>(r,...o)=>{let l=o[0];if("error"===r&&qe(l)&&"listener"===l.fun){let t={msg:`listener of event[${l.name}] error`,err:l.msg};return s()?(i(t),!1):e.emit("error",t)}return(!t||!s())&&("error"===r&&0===(t=>St(e.listenerCount)?e.listenerCount(t):1)("error")?(i(l),!1):(null!==n&&n(r,o),e.emit(r,...o)))},o=r(!0),l=r(!1),a=(t,...n)=>{s()||rs(e,t,n,{tag:"w-serv-broadcast",funEmit:o})};return a.final=(t,...s)=>{rs(e,t,s,{tag:"w-serv-broadcast",funEmit:l})},a}function yo(e,t={}){if(qe(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=Ut()),!Rt(e,"emit")||!St(e.on)||!St(e.off))throw new Error("instWConverServer is not an EventEmitter");let s=new Map,n=!1,i=new Map,r=Io(e,{isCleared:()=>n,onDeliver:(e,t)=>{"clientEnter"===e?i.set(t[0],t[1]):"clientLeave"===e&&i.delete(t[0])}}),o=wo();o.on("message",function({eventName:e,key:t,data:s,now:n}){"enter"===e?r("clientEnter",t,s):"leave"===e&&(i.has(t)&&i.set(t,s),r("clientLeave",t,s)),r("clientChange",n)});let l=function(e,t,i){if(!n&&"[sys:polling]"===e)try{let e=ge(t,"clientId");if(!Be(e))return void i.reject("[sys:polling] invalid clientId");let n=s.get(e)||[];s.set(e,[]),o.trigger(e,t),i.resolve(n)}catch(e){r("error",{msg:"[sys:polling] error",err:e}),i.reject("[sys:polling] error")}},a=null;return e.getClients=o.get,e.getMessages=()=>Object.fromEntries(Array.from(s,([e,t])=>[e,uo(t)])),e.broadcast=e=>{if(n)return;let t={mode:"broadcast",data:uo(e)};s.forEach(e=>{e.push(t)})},e.clearBroadcast=()=>{if(n)return;n=!0,null!==a&&(clearInterval(a),a=null),e.off("execute",l);let t=new Map(yi(o.get(),e=>[e.key,e.data]));o.clear();let c=i.size;for(let[e,s]of Array.from(i))c--,r.final("clientLeave",e,t.has(e)?t.get(e):s),r.final("clientChange",c);i.clear(),s=new Map},e.on("execute",l),a=setInterval(()=>{let e=new Set(yi(o.get(),"key"));for(let t of Array.from(s.keys()))e.has(t)||s.delete(t)},1e3),e}let go=(e,t)=>{let s={};return Ss(e,e=>{let n=e,i=ge(t,e,"");Be(i)&&(s[n]=i)}),s};function Lo(e){Ss(e,({ev:e,name:t,h:s})=>{try{St(e.removeListener)?e.removeListener(t,s):St(e.off)&&e.off(t,s)}catch(e){}})}function mo(e,t){return 0!==An(e)&&(!!qe(t)&&(Ss(e,e=>{let s=t[e];if(!s)throw new Error(`invalid kpOrm[${e}]`);if(!St(s.on))throw new Error(`kpOrm[${e}] can not listen to change events`)}),!0))}function Do(e,t,s,n={}){if(!qe(e))throw new Error("invalid instWConverServer");if(!mo(t,s))return e;let i=ge(n,"genTag");St(i)||(i=()=>or()+"|"+En(6));let r={};Ss(t,e=>{r[e]=i()}),Ss(r,e=>{if(!Be(e))throw new Error("invalid opt.genTag")});let o=[];try{Ss(t,t=>{let n=s[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=s=>{e.broadcast({mode:"syncKpTable",data:go(t,s)})};e.on("changeTableTags",n),o.push({ev:e,name:"changeTableTags",h:n})}catch(e){throw Lo(o),e}let l=e.clearSync;return e.clearSync=()=>{Lo(o),o=[],l()},e.initTableTags(r,"useInputOnly"),e}function po(e,t){return!!(null==e?0:e.length)&&Di(e,t,0)>-1}function Co(e,t,s){for(var n=-1,i=null==e?0:e.length;++n<i;)if(s(t,e[n]))return!0;return!1}var ho=_s&&1/Qn(new _s([,-0]))[1]==1/0?function(e){return new _s(e)}:function(){};function fo(e){return e&&e.length?function(e,t,s){var n=-1,i=po,r=e.length,o=!0,l=[],a=l;if(s)o=!1,i=Co;else if(r>=200){var c=t?null:ho(e);if(c)return Qn(c);o=!1,i=Kn,a=new Gn}else a=t?[]:l;e:for(;++n<r;){var M=e[n],u=t?t(M):M;if(M=s||0!==M?M:0,o&&u==u){for(var d=a.length;d--;)if(a[d]===u)continue e;t&&a.push(u),l.push(M)}else i(a,u,s)||(a!==l&&a.push(u),l.push(M))}return l}(e):[]}function bo(e,t,s,n){for(var i=s-1,r=e.length;++i<r;)if(n(e[i],t))return i;return-1}var No=Array.prototype.splice;function xo(e,t){return e&&e.length&&t&&t.length?function(e,t,s,n){var i=n?bo:Di,r=-1,o=t.length,l=e;for(e===t&&(t=hr(t)),s&&(l=ae(e,Ye(s)));++r<o;)for(var a=0,c=t[r],M=s?s(c):c;(a=i(l,M,a,n))>-1;)l!==e&&No.call(l,a,1),No.call(e,a,1);return e}(e,t):e}let To=["__proto__","constructor","prototype"];function Zo(e){return u(t=e)?ae(t,Ie):b(t)?[t]:hr(le(de(t)));var t}function So(e){let t=Zo(e);if(0===t.length)return!1;for(let e of t)if(""===e||To.includes(e))return!1;return!0}let Ao=e=>null!=e;function Yo(e={}){let t=ge(e,"getUserIdByToken",null);if(Ao(t)&&!St(t))throw new Error("invalid opt.getUserIdByToken");St(t)||(t=async()=>"");let s=ge(e,"useDbOrm",null);Pe(s)||(s=!1);let n=null;if(s&&(n=ge(e,"operOrm",null),!St(n)))throw new Error("invalid opt.operOrm when useDbOrm=true");let i=[];if(s){if(i=ge(e,"tableNames",null),!qt(i))throw new Error("invalid opt.tableNamesExec when useDbOrm=true");Ss(i,(e,t)=>{if(!Be(e))throw new Error(`invalid opt.tableNamesExec[${t}] when useDbOrm=true`)}),i=[...i]}let r=[];if(s){if(r=ge(e,"methods",null),null===r)r=["select","insert","save","del"];else if(!qt(r))throw new Error("invalid opt.methodsExec when useDbOrm=true");Ss(r,(e,t)=>{if(!Be(e))throw new Error(`invalid opt.methodsExec[${t}] when useDbOrm=true`)}),r=[...r]}let o=null;if(s&&(o=ge(e,"authorizeExec",null),!St(o)))throw new Error("invalid opt.authorizeExec when useDbOrm=true");let l=ge(e,"kpFunExt",null);if(Ao(l)&&!_e(l))throw new Error("invalid opt.kpFunExt");_e(l)||(l={}),Ss(l,(e,t)=>{if(!St(e))throw new Error(`invalid opt.kpFunExt[${t}]`)});let a=ge(e,"kpFunSys",null),c=[];s&&(Ss(i,e=>{Ss(r,t=>{c.push(`${e}.${t}`)})}),c=fo(c)),Ss(c,e=>{if(!So(e))throw new Error(`table operation[${e}] can not be bound by the client`)});let M=fo(yi(c,e=>Zo(e)[0]));Ss(l,(e,t)=>{if(t.startsWith("[sys:"))throw new Error(`kpFunExt[${t}] can not use the reserved prefix [sys:`);if(!So(t))throw new Error(`kpFunExt[${t}] can not be bound by the client`);let s=Zo(t)[0];if(M.includes(s))throw new Error(`kpFunExt[${t}] conflicts with the table operations of table[${s}]`)});let u=function(e){let t=()=>({leaf:null,kids:new Map}),s=e=>{if(null!==e.leaf)return e.leaf;for(let t of e.kids.values()){let e=s(t);if(null!==e)return e}return null},n=t();for(let i of e){let e=n;for(let s of Zo(i)){if(null!==e.leaf)return[e.leaf,i];e.kids.has(s)||e.kids.set(s,t()),e=e.kids.get(s)}if(null===e.leaf){if(e.kids.size>0)return[s(e),i];e.leaf=i}else if(e.leaf!==i)return[e.leaf,i]}return null}([...c,...Oe(l)]);if(null!==u){let e=e=>c.includes(e)?"table operation":"kpFunExt";throw new Error(`${e(u[1])}[${u[1]}] conflicts with ${e(u[0])}[${u[0]}] on the client binding path`)}return{getUserIdByToken:t,useDbOrm:s,operOrm:n,tableNames:i,methods:r,authorizeExec:o,kpFunExt:l,kpFunSys:a,pathNames:c}}function Xo(e,t={}){if(!qe(e))throw new Error("invalid instWConverServer");let{getUserIdByToken:s,useDbOrm:n,operOrm:i,tableNames:r,methods:o,authorizeExec:l,kpFunExt:a,kpFunSys:c}=Yo(t),M={};async function u(t,n,i){if(!Be(t))return i.resolve({state:"error",msg:"invalid func"}),i;let r="";if(!Rt(n,"__sysToken__"))return i.resolve({state:"error",msg:"invalid token"}),i;if(r=Is(n.__sysToken__),!Rt(n,"__sysInputArgs__"))return i.resolve({state:"error",msg:"invalid input"}),i;n=n.__sysInputArgs__;let o="";try{o=await s(r)}catch(t){return i.resolve({state:"error",msg:t}),Qt(e,"error",[t]),i}if(Be(o)||(o=""),"[sys:getFuncList]"===t){let e=Oe(M);e=function(e,t){if(!is(e))return[];if((_e(t)||dt(t)||Fe(t)||Pe(t))&&(t=[t]),!is(t))return e;let s=uo(e);return xo(s,t),s}(e,"[sys:getTableTags]");let t={state:"success",msg:e};return i.resolve(t),i}if(!Object.prototype.hasOwnProperty.call(M,t))return i.resolve({state:"error",msg:`invalid func[${t}]`}),i;let l=M[t];try{let e=await Et(l)(o,...n);i.resolve(e)}catch(e){i.resolve({state:"error",msg:`call func[${t}] has an error: ${ws(e)}`})}return i}return n&&(M=function(e,t,s,n){let i={};return Ss(e,e=>{Ss(t,t=>{i[`${e}.${t}`]=async function(i,r){return!0!==await n({userId:i,tableName:e,methodName:t,input:r})?Promise.reject("permission denied"):await s(i,e,t,r)}})}),i}(r,o,i,l)),Ss(a,(e,t)=>{M[t]=e}),qe(c)&&Ss(c,(e,t)=>{M[t]=e}),e.on("execute",function(t,s,n){u(t,s,n).catch(s=>{n.resolve({state:"error",msg:`execFun func[${t}] has an error: ${ws(s)}`}),Qt(e,"error",[s])})}),e}let vo=e=>null!=e;function zo(e,t={}){if(qe(e)||(console.log("instWConverServer is not an effective object, and set instWConverServer to an EventEmitter"),e=Ut()),!Rt(e,"emit")||!St(e.on)||!St(e.off))throw new Error("instWConverServer is not an EventEmitter");let{fpTableTags:s,genTag:n,useDbOrm:i,kpOrm:r,tableNamesSync:o,optExec:l}=function(e={}){let t=ge(e,"fpTableTags",null);if(vo(t)&&!Be(t))throw new Error("invalid opt.fpTableTags");Be(t)||(t="./tableTags.json");let s=ge(e,"genTag",null);if(vo(s)&&!St(s))throw new Error("invalid opt.genTag");St(s)||(s=()=>or()+"|"+En(6));let n=ge(e,"useDbOrm",null),i=Pe(n);i||(n=!1);let r=ge(e,"kpOrm",null),o=ge(e,"operOrm",null),l=ge(e,"tableNamesExec",null),a=ge(e,"methodsExec",null),c=ge(e,"authorizeExec",null),M=ge(e,"tableNamesSync",null),u=ge(e,"getUserIdByToken",null),d=ge(e,"kpFunExt",null);i||Ss({operOrm:o,tableNamesExec:l,methodsExec:a,authorizeExec:c,kpOrm:r,tableNamesSync:M},(e,t)=>{if(null!==e)throw new Error(`invalid opt.useDbOrm when opt.${t} is given`)});if(n&&!_e(r))throw new Error("invalid opt.kpOrm when useDbOrm=true");if(n&&vo(M)){if(!qt(M))throw new Error("invalid opt.tableNamesSync when useDbOrm=true");Ss(M,(e,t)=>{if(!Be(e))throw new Error(`invalid opt.tableNamesSync[${t}] when useDbOrm=true`)}),M=[...M]}let w=Yo({getUserIdByToken:u,useDbOrm:n,operOrm:o,tableNames:l,methods:a,authorizeExec:c,kpFunExt:d}),I=!1;return n&&(I=mo(M,r)),I&&Ss(M,e=>{if(!w.tableNames.includes(e)||!w.methods.includes("select"))throw new Error(`invalid opt.tableNamesSync when table operation[${e}.select] does not exist`)}),{fpTableTags:t,genTag:s,useDbOrm:n,kpOrm:r,tableNamesSync:M,optExec:{getUserIdByToken:w.getUserIdByToken,useDbOrm:w.useDbOrm,operOrm:w.operOrm,tableNames:w.tableNames,methods:w.methods,authorizeExec:w.authorizeExec,kpFunExt:w.kpFunExt}}}(t);e=new yo(e=new Or(e,{fpTableTags:s,genTag:n}));let a={"[sys:getTableTags]":()=>{let t=e.getTableTags();return{mode:"syncKpTable",data:go(o,t)}}};try{e=new Xo(e,{...l,kpFunSys:a}),i&&(e=new Do(e,o,r,{genTag:n}))}catch(t){throw e.clearBroadcast(),e.clearSync(),t}return e}function Eo(e={}){let t=Ut(),i=ge(e,"port");(!pt(i,{useLimitSafe:!0})||Dt(i)>65535)&&(i=8080),i=Dt(i);let r=(t,s,n)=>{let i=ge(e,t);if(null==i)return s;if(!n(i))throw new Error(`invalid opt.${t}`);return i},o=r("corsOrigins",["http://localhost"],e=>!1===e||Fe(e)||qt(e));!1===o&&(o=[]),Fe(o)&&(o=[o]),o=o.filter(e=>""!==e);let l=r("useInert",!0,Pe),a=r("pathStaticFiles","dist",Be),c=ge(e,"apis");is(c)||(c=[]);let M=ge(e,"fpTableTags",null);null==M&&(M=ge(e,"fnTableTags",null));let u=ge(e,"useShowLog");Pe(u)||(u=!0);let d=!0,w=[],I=e=>{d?w.push(e):0!==t.listenerCount("error")?Qt(t,"error",[e],{tag:"w-serv-hapi"}):console.error("[w-serv-hapi]",e)},y=!1;o.length>0&&(y={origin:o,credentials:!1,additionalExposedHeaders:["Return-Type","Return-Msg","Return-Retryable","Content-Disposition"]});let g=new s.Server({port:i,routes:{timeout:{server:!1,socket:!1},cors:y}}),L=new rr({serverHapi:g,apiName:ge(e,"apiName"),pathUploadTemp:ge(e,"pathUploadTemp"),tokenType:ge(e,"tokenType"),sizeSlice:ge(e,"sizeSlice"),sizeMsg:ge(e,"sizeMsg"),verifyConn:ge(e,"verifyConn"),delayForSlice:ge(e,"delayForSlice")});L.on("error",I),L.on("clientChange",function(e){u&&console.log(`Server[port:${i}]: now clients: ${e}`)});let m=()=>{for(let e of["clearBroadcast","clearSync"])if(St(L[e]))try{L[e]()}catch(e){I(e)}};L=new zo(L,{...e,fpTableTags:M});let D=new Promise(e=>{setTimeout(()=>{d=!1,e();let t=w;w=[];for(let e of t)I(e)},1)}),p=!1,C=(async()=>{await D,l&&await g.register(n);let e=[];return l&&(e=[{method:"GET",path:"/{file*}",handler:{directory:{path:`${a}/`}}}]),e=[...e,...c],g.route(e),await g.start(),p=!0,u&&console.log(`Server running at: ${g.info.uri}`),g})();C.catch(e=>{m(),I(e)});let h=null;return t.ready=()=>C,t.stop=()=>(null!==h||(h=(async()=>{if(await C.catch(()=>{}),m(),p)try{await g.stop()}catch(e){I(e)}})()),h),t.getServer=async()=>g,t.getInstWConverServer=async()=>L,t}function jo(e,t){let s=zt();if(!qt(e)&&!_e(e))return s.reject("rs is not an array or object"),s;let n=!1;if(_e(e)){n=!0;let t=[];Ss(e,(e,s)=>{t.push({k:s,v:e})}),e=t}St(t)||(Ss(e,e=>{!function(e){try{e instanceof Promise&&Promise.prototype.then.call(e,void 0,()=>{})}catch(e){}}(n?e.v:e)}),t=function(e){return e});let i=-1,r=[];return e.reduce(function(e,s){return e.then(function(e){r.push(e),i+=1;let o=i,l=s;return n&&(o=s.k,l=s.v),St(t)?t(l,o):l})},Promise.resolve()).then(function(e){var t,n,i,o;r.push(e),o=null==(t=r)?0:t.length,r=o?gi(t,(n=i||void 0===n?1:Mt(n))<0?0:n,o):[],s.resolve(r)}).catch(function(e){s.reject(e)}),s}function Go(e){let t="procOrm does not authorize users, authorize where procOrm is exposed to clients",s=[["useCheckUser",t],["getUserById",t],["useExcludeWhenNotAdmin","procOrm does not filter select results by user, use addFunPostProcessing if needed"]];for(let[t,n]of s){let s=ge(e,t);if(null!=s&&!1!==s)throw new Error(`opt.${t} has been removed, ${n}`)}}let Wo={backup:async function(e){if(!qe(e))throw console.log("woItems",e),new Error("invalid woItems");return await jo(e,async(e,t)=>(console.log("backup...",t),{name:t,data:await e.select()}))},recover:async function(e,s,n,i=!1){if(!$t(e))throw console.log("fp",e),new Error("fp is not exist");if(!qe(s))throw console.log("woItems",s),new Error("invalid woItems");St(n)||(n=null),Pe(i)||(i=!1);let r=t.readFileSync(e,"utf8");r=vi(r);let o=$e(r);if(!is(o))throw new Error("invalid backup data, need a non-empty array");Ss(o,(e,t)=>{let n=ge(e,"name");if(!Be(n))throw new Error(`invalid backup data, rs[${t}].name is not a string`);if(!Rt(s,n))throw new Error(`invalid backup data, table[${n}] is not in woItems`)}),St(n)&&n(),await jo(o,async e=>{console.log("recover...",e.name),i&&(console.log("needCreateStorage"),await s[e.name].createStorage());let t=null;return An(e.data)>0&&(t=await s[e.name].insert(e.data)),t})}};var Ko=Array.prototype.join;function ko(e,t){return null==e?"":Ko.call(e,t)}var Vo=Ee&&Ee.isRegExp,Uo=Vo?Ye(Vo):function(e){return f(e)&&"[object RegExp]"==h(e)},Qo=/\w*$/;function Ho(){if(!St(Xn))throw new Error("invalid dayjs");return Xn().format("YYYY-MM-DDTHH:mm:ss.SSSZ")}const Ro=[];for(let e=0;e<256;++e)Ro.push((e+256).toString(16).slice(1));const Jo=new Uint8Array(16);function Oo(){return crypto.getRandomValues(Jo)}const Po={};function Fo(e,t,s){let n;if(e)n=Bo(e.random??e.rng?.()??Oo(),e.msecs,e.seq,t,s);else{const e=Date.now(),i=Oo();!function(e,t,s){e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=$o(s),e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++)}(Po,e,i),n=Bo(i,Po.msecs,Po.seq,t,s)}return t??function(e,t=0){return(Ro[e[t+0]]+Ro[e[t+1]]+Ro[e[t+2]]+Ro[e[t+3]]+"-"+Ro[e[t+4]]+Ro[e[t+5]]+"-"+Ro[e[t+6]]+Ro[e[t+7]]+"-"+Ro[e[t+8]]+Ro[e[t+9]]+"-"+Ro[e[t+10]]+Ro[e[t+11]]+Ro[e[t+12]]+Ro[e[t+13]]+Ro[e[t+14]]+Ro[e[t+15]]).toLowerCase()}(n)}function Bo(e,t,s,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(),s??=$o(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|s>>>28&15,n[i++]=s>>>20&255,n[i++]=128|s>>>14&63,n[i++]=s>>>6&255,n[i++]=s<<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 $o(e){return(127&e[6])<<24|e[7]<<16|e[8]<<8|e[9]}function _o(){return Fo()}var qo={exports:{}},el={},tl={exports:{}},sl={};function nl(){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 il=/javascript\s*\:/gim;sl.whiteList=nl(),sl.getDefaultWhiteList=nl,sl.onAttr=function(e,t,s){},sl.onIgnoreAttr=function(e,t,s){},sl.safeAttrValue=function(e,t){return il.test(t)?"":t};var rl={indexOf:function(e,t){var s,n;if(Array.prototype.indexOf)return e.indexOf(t);for(s=0,n=e.length;s<n;s++)if(e[s]===t)return s;return-1},forEach:function(e,t,s){var n,i;if(Array.prototype.forEach)return e.forEach(t,s);for(n=0,i=e.length;n<i;n++)t.call(s,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 ol=function(e,t){";"!==(e=rl.trimRight(e))[e.length-1]&&(e+=";");var s=e.length,n=!1,i=0,r=0,o="";function l(){if(!n){var s=rl.trim(e.slice(i,r)),l=s.indexOf(":");if(-1!==l){var a=rl.trim(s.slice(0,l)),c=rl.trim(s.slice(l+1));if(a){var M=t(i,o.length,a,c,s);M&&(o+=M+"; ")}}}i=r+1}for(;r<s;r++){var a=e[r];if("/"===a&&"*"===e[r+1]){var c=e.indexOf("*/",r+2);if(-1===c)break;i=(r=c+1)+1,n=!1}else"("===a?n=!0:")"===a?n=!1:";"===a?n||l():"\n"===a&&l()}return rl.trim(o)},ll=sl,al=ol;function cl(e){return null==e}function Ml(e){(e=function(e){var t={};for(var s in e)t[s]=e[s];return t}(e||{})).whiteList=e.whiteList||ll.whiteList,e.onAttr=e.onAttr||ll.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||ll.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||ll.safeAttrValue,this.options=e}Ml.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,s=t.whiteList,n=t.onAttr,i=t.onIgnoreAttr,r=t.safeAttrValue;return al(e,function(e,t,o,l,a){var c=s[o],M=!1;if(!0===c?M=c:"function"==typeof c?M=c(l):c instanceof RegExp&&(M=c.test(l)),!0!==M&&(M=!1),l=r(o,l)){var u,d={position:t,sourcePosition:e,source:a,isWhite:M};return M?cl(u=n(o,l,d))?o+":"+l:u:cl(u=i(o,l,d))?void 0:u}})};var ul=Ml;!function(e,t){var s=sl,n=ul;for(var i in(t=e.exports=function(e,t){return new n(t).process(e)}).FilterCSS=n,s)t[i]=s[i];"undefined"!=typeof window&&(window.filterCSS=e.exports)}(tl,tl.exports);var dl=tl.exports,wl={indexOf:function(e,t){var s,n;if(Array.prototype.indexOf)return e.indexOf(t);for(s=0,n=e.length;s<n;s++)if(e[s]===t)return s;return-1},forEach:function(e,t,s){var n,i;if(Array.prototype.forEach)return e.forEach(t,s);for(n=0,i=e.length;n<i;n++)t.call(s,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}},Il=dl.FilterCSS,yl=dl.getDefaultWhiteList,gl=wl;function Ll(){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 ml=new Il;function Dl(e){return e.replace(pl,"<").replace(Cl,">")}var pl=/</g,Cl=/>/g,hl=/"/g,fl=/"/g,bl=/&#([a-zA-Z0-9]*);?/gim,Nl=/:?/gim,xl=/&newline;?/gim,Tl=/((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,Zl=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,Sl=/u\s*r\s*l\s*\(.*/gi;function Al(e){return e.replace(hl,""")}function Yl(e){return e.replace(fl,'"')}function Xl(e){return e.replace(bl,function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))})}function vl(e){return e.replace(Nl,":").replace(xl," ")}function zl(e){for(var t="",s=0,n=e.length;s<n;s++)t+=e.charCodeAt(s)<32?" ":e.charAt(s);return gl.trim(t)}function El(e){return e=zl(e=vl(e=Xl(e=Yl(e))))}function jl(e){return e=Dl(e=Al(e))}el.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"]},el.getDefaultWhiteList=Ll,el.onTag=function(e,t,s){},el.onIgnoreTag=function(e,t,s){},el.onTagAttr=function(e,t,s){},el.onIgnoreTagAttr=function(e,t,s){},el.safeAttrValue=function(e,t,s,n){if(s=El(s),"href"===t||"src"===t){if("#"===(s=gl.trim(s)))return"#";if("http://"!==s.substr(0,7)&&"https://"!==s.substr(0,8)&&"mailto:"!==s.substr(0,7)&&"tel:"!==s.substr(0,4)&&"data:image/"!==s.substr(0,11)&&"ftp://"!==s.substr(0,6)&&"./"!==s.substr(0,2)&&"../"!==s.substr(0,3)&&"#"!==s[0]&&"/"!==s[0])return""}else if("background"===t){if(Tl.lastIndex=0,Tl.test(s))return""}else if("style"===t){if(Zl.lastIndex=0,Zl.test(s))return"";if(Sl.lastIndex=0,Sl.test(s)&&(Tl.lastIndex=0,Tl.test(s)))return"";!1!==n&&(s=(n=n||ml).process(s))}return s=jl(s)},el.escapeHtml=Dl,el.escapeQuote=Al,el.unescapeQuote=Yl,el.escapeHtmlEntities=Xl,el.escapeDangerHtml5Entities=vl,el.clearNonPrintableCharacter=zl,el.friendlyAttrValue=El,el.escapeAttrValue=jl,el.onIgnoreTagStripAll=function(){return""},el.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var s=!Array.isArray(e),n=[],i=!1;return{onIgnoreTag:function(r,o,l){if(function(t){return!!s||-1!==gl.indexOf(e,t)}(r)){if(l.isClosing){var a="[/removed]",c=l.position+10;return n.push([!1!==i?i:l.position,c]),i=!1,a}return i||(i=l.position),"[removed]"}return t(r,o,l)},remove:function(e){var t="",s=0;return gl.forEach(n,function(n){t+=e.slice(s,n[0]),s=n[1]}),t+=e.slice(s)}}},el.stripCommentTag=function(e){for(var t="",s=0;s<e.length;){var n=e.indexOf("\x3c!--",s);if(-1===n){t+=e.slice(s);break}t+=e.slice(s,n);var i=e.indexOf("--\x3e",n);if(-1===i)break;s=i+3}return t},el.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("")},el.attributeWrapSign='"',el.cssFilter=ml,el.getDefaultCSSWhiteList=yl;var Gl={},Wl=wl;function Kl(e){var t,s=Wl.spaceIndex(e);return t=-1===s?e.slice(1,-1):e.slice(1,s+1),"/"===(t=Wl.trim(t).toLowerCase()).slice(0,1)&&(t=t.slice(1)),"/"===t.slice(-1)&&(t=t.slice(0,-1)),t}function kl(e){return"</"===e.slice(0,2)}var Vl=/[^a-zA-Z0-9\\_:.-]/gim;function Ul(e,t){for(;t<e.length;t++){var s=e[t];if(" "!==s)return"="===s?t:-1}}function Ql(e,t){for(;t<e.length;t++){var s=e[t];if(" "!==s)return"'"===s||'"'===s?t:-1}}function Hl(e,t){for(;t>0;t--){var s=e[t];if(" "!==s)return"="===s?t:-1}}function Rl(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}Gl.parseTag=function(e,t,s){var n="",i=0,r=!1,o=!1,l=0,a=e.length,c="",M="";e:for(l=0;l<a;l++){var u=e.charAt(l);if(!1===r){if("<"===u){r=l;continue}}else if(!1===o){if("<"===u){n+=s(e.slice(i,l)),r=l,i=l;continue}if(">"===u||l===a-1){n+=s(e.slice(i,r)),c=Kl(M=e.slice(r,l+1)),n+=t(r,n.length,c,M,kl(M)),i=l+1,r=!1;continue}if('"'===u||"'"===u)for(var d=1,w=e.charAt(l-d);""===w.trim()||"="===w;){if("="===w){o=u;continue e}w=e.charAt(l-++d)}}else if(u===o){o=!1;continue}}return i<a&&(n+=s(e.substr(i))),n},Gl.parseAttr=function(e,t){var s=0,n=0,i=[],r=!1,o=e.length;function l(e,s){if(!((e=(e=Wl.trim(e)).replace(Vl,"").toLowerCase()).length<1)){var n=t(e,s||"");n&&i.push(n)}}for(var a=0;a<o;a++){var c,M=e.charAt(a);if(!1!==r||"="!==M)if(!1===r||a!==n)if(/\s|\n|\t/.test(M)){if(e=e.replace(/\s|\n|\t/g," "),!1===r){if(-1===(c=Ul(e,a))){l(Wl.trim(e.slice(s,a))),r=!1,s=a+1;continue}a=c-1;continue}if(-1===(c=Hl(e,a-1))){l(r,Rl(Wl.trim(e.slice(s,a)))),r=!1,s=a+1;continue}}else;else{if(-1===(c=e.indexOf(M,a+1)))break;l(r,Wl.trim(e.slice(n+1,c))),r=!1,s=(a=c)+1}else r=e.slice(s,a),s=a+1,n='"'===e.charAt(s)||"'"===e.charAt(s)?s:Ql(e,a+1)}return s<e.length&&(!1===r?l(e.slice(s)):l(r,Rl(Wl.trim(e.slice(s))))),Wl.trim(i.join(" "))};var Jl=dl.FilterCSS,Ol=el,Pl=Gl,Fl=Pl.parseTag,Bl=Pl.parseAttr,$l=wl;function _l(e){return null==e}function ql(e){(e=function(e){var t={};for(var s in e)t[s]=e[s];return t}(e||{})).stripIgnoreTag&&(e.onIgnoreTag&&console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'),e.onIgnoreTag=Ol.onIgnoreTagStripAll),e.whiteList||e.allowList?e.whiteList=function(e){var t={};for(var s in e)Array.isArray(e[s])?t[s.toLowerCase()]=e[s].map(function(e){return e.toLowerCase()}):t[s.toLowerCase()]=e[s];return t}(e.whiteList||e.allowList):e.whiteList=Ol.whiteList,this.attributeWrapSign=!0===e.singleQuotedAttributeValue?"'":Ol.attributeWrapSign,e.onTag=e.onTag||Ol.onTag,e.onTagAttr=e.onTagAttr||Ol.onTagAttr,e.onIgnoreTag=e.onIgnoreTag||Ol.onIgnoreTag,e.onIgnoreTagAttr=e.onIgnoreTagAttr||Ol.onIgnoreTagAttr,e.safeAttrValue=e.safeAttrValue||Ol.safeAttrValue,e.escapeHtml=e.escapeHtml||Ol.escapeHtml,this.options=e,!1===e.css?this.cssFilter=!1:(e.css=e.css||{},this.cssFilter=new Jl(e.css))}ql.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this,s=t.options,n=s.whiteList,i=s.onTag,r=s.onIgnoreTag,o=s.onTagAttr,l=s.onIgnoreTagAttr,a=s.safeAttrValue,c=s.escapeHtml,M=t.attributeWrapSign,u=t.cssFilter;s.stripBlankChar&&(e=Ol.stripBlankChar(e)),s.allowCommentTag||(e=Ol.stripCommentTag(e));var d=!1;s.stripIgnoreTagBody&&(d=Ol.StripTagBody(s.stripIgnoreTagBody,r),r=d.onIgnoreTag);var w=Fl(e,function(e,t,s,d,w){var I={sourcePosition:e,position:t,isClosing:w,isWhite:Object.prototype.hasOwnProperty.call(n,s)},y=i(s,d,I);if(!_l(y))return y;if(I.isWhite){if(I.isClosing)return"</"+s+">";var g=function(e){var t=$l.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var s="/"===(e=$l.trim(e.slice(t+1,-1)))[e.length-1];return s&&(e=$l.trim(e.slice(0,-1))),{html:e,closing:s}}(d),L=n[s],m=Bl(g.html,function(e,t){var n=-1!==$l.indexOf(L,e),i=o(s,e,t,n);return _l(i)?n?(t=a(s,e,t,u))?e+"="+M+t+M:e:_l(i=l(s,e,t,n))?void 0:i:i});return d="<"+s,m&&(d+=" "+m),g.closing&&(d+=" /"),d+=">"}return _l(y=r(s,d,I))?c(d):y},c);return d&&(w=d.remove(w)),w};var ea=ql;!function(e,t){var s=el,n=Gl,i=ea;function r(e,t){return new i(t).process(e)}(t=e.exports=r).filterXSS=r,t.FilterXSS=i,function(){for(var e in s)t[e]=s[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)}(qo,qo.exports);var ta=Wt(qo.exports);function sa(){return"undefined"!=typeof self?self:"undefined"!=typeof window&&void 0!==window.document?window:"undefined"!=typeof global?global:null}let na=/<(?=[A-Za-z!/?]|$)/g;function ia(e){return e.replace(na,"<")}let ra={getFilterXSS:function(e=ta){if(St(e))return e;let t=sa(),s=ge(t,"filterXSS",null);if(St(s))return s;let n=ge(t,"xss",null);if(St(n))return n;throw new Error("invalid filterXSS, g.filterXSS, use script for import")},getOpt:function(e){return{escapeHtml:ia,onIgnoreTagAttr:function(t,s,n,i){if("style"===s)return s+'="'+e.escapeAttrValue(n)+'"'}}}};function oa(e){let t=null,s=null;let n=function e(n){return qt(n)||_e(n)?(Ss(n,function(t,s){n[s]=e(t)}),n):Be(n)?(i=n,null===t&&(t=ra.getFilterXSS(),s=ra.getOpt(t)),t(i,s)):n;var i}(uo(e));return n}function la(e,t){if(!qt(e))return[];qt(t)||(t=[t]);let s=[];return Ss(e,(e,n)=>{0===ge(e,"ok")&&s.push({k:n,id:ge(t,[n,"id"]),err:ge(e,"err","")})}),s}function aa(e,t){let s=yi((i=10,(n=t)&&n.length?gi(n,0,(i=r||void 0===i?1:Mt(i))<0?0:i):[]),e=>Be(e.id)||dt(e.id)?`id[${function(e,t){var s=30,n="...";if(Z(t)){var i="separator"in t?t.separator:i;s="length"in t?Mt(t.length):s,n="omission"in t?ue(t.omission):n}var r=(e=de(e)).length;if(gn(e)){var o=Xi(e);r=o.length}if(s>=r)return e;var l=s-Sn(n);if(l<1)return n;var a=o?Li(o,0,l).join(""):e.slice(0,l);if(void 0===i)return a+n;if(o&&(l+=a.length-l),Uo(i)){if(e.slice(l).search(i)){var c,M=a;for(i.global||(i=RegExp(i.source,de(Qo.exec(i))+"g")),i.lastIndex=0;c=i.exec(M);)var u=c.index;a=a.slice(0,void 0===u?l:u)}}else if(e.indexOf(ue(i),l)!=l){var d=a.lastIndexOf(i);d>-1&&(a=a.slice(0,d))}return a+n}(String(e.id),{length:100,omission:"…"})}]`:`data[${e.k}]`);var n,i,r;let o=`${e}: ${ko(s,", ")}`;return An(t)>10&&(o+=`, ... (${An(t)} in total)`),o}function ca(e){let t=[];return Ss(qt(e)?e:[e],(e,s)=>{let n=ge(e,"id");Be(n)&&oa(n)!==n&&t.push({k:s,id:n})}),t}function Ma(e,t){return aa(`${e}, id contains HTML markup`,yi(t,e=>({k:e.k})))}function ua(e,t,s,n,i="save"){if(!qe(e))throw console.log("ds",e),new Error("invalid ds");let r=e[t].keys,o=!1;qt(n)||(o=!0,n=[n]);let l=Ho();return i.indexOf("insert")>=0&&(r.indexOf("userId")>=0&&Ss(n,(e,t)=>{n[t].userId=s}),r.indexOf("timeCreate")>=0&&Ss(n,(e,t)=>{n[t].timeCreate=l}),r.indexOf("userIdUpdate")>=0&&Ss(n,(e,t)=>{n[t].userIdUpdate=s}),r.indexOf("timeUpdate")>=0&&Ss(n,(e,t)=>{n[t].timeUpdate=l})),(i.indexOf("insert")>=0||i.indexOf("save")>=0)&&(r.indexOf("userIdUpdate")>=0&&Ss(n,(e,t)=>{n[t].userIdUpdate=s}),r.indexOf("timeUpdate")>=0&&Ss(n,(e,t)=>{n[t].timeUpdate=l})),n=yi(n,(e,t)=>{let s={};return Ss(e,(e,t)=>{e=oa(e),s[t]=e}),s}),function(e,t){if(t.indexOf("id")<0)return!1;let s=ge(e,"settings",null);if(qe(s)&&!0!==ge(s,"id.pk"))return!1;let n=ge(s,"id.type","")||ge(e,"kpType.id","");return!(Be(n)&&["STRING","TEXT","CHAR","UUID","CITEXT"].indexOf(n.toUpperCase())<0)}(e[t],r)&&Ss(n,e=>{An(e)>0&&!Be(e.id)&&!dt(e.id)&&(e.id=_o())}),n=o?n[0]:n}function da(e,t){return async(s,n,i,r)=>async function(e,t,s,n,i,r){let o,l=null;if(!qe(t))return Promise.reject("invalid woItems");let a=ge(t,n,null);if(null===a)return Promise.reject(`can not find table[${n}] in ORM`);if("select"===i){if(o=await a.select(r).catch(e=>{console.log(`${n}.select catch`,e),l="failed to select data"}),Be(l))return Promise.reject(l)}else if("insert"===i||"save"===i){let t=r,c=ca(r);if(An(c)>0)return console.log(`${n}.${i} id changed by clearXSS`,c),Promise.reject(Ma("insert"===i?"failed to insert data":"failed to save data",c));try{r=ua(e,n,s,r,i)}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),l="failed to adjust data",Promise.reject(l)}if("insert"===i?o=await a.insert(r).catch(e=>{console.log(`${n}.insert catch`,e),l="failed to insert data"}):"save"===i&&(o=await a.save(r).catch(e=>{console.log(`${n}.save catch`,e),l="failed to save data"})),Be(l))return Promise.reject(l);if("save"===i){let e=la(o,r);if(An(e)>0)return console.log(`${n}.save fail`,e),Promise.reject(aa("failed to save data",la(o,t)))}o=qt(r)?yi(r,e=>({id:e.id})):{id:r.id}}else if("del"===i){if(o=await a.del(r).catch(e=>{console.log(`${n}.del catch`,e),l="failed to delete data"}),!Be(l)){let e=la(o,r);An(e)>0&&(console.log(`${n}.del fail`,e),l=aa("failed to delete data",e))}}else if("delAll"===i)o=await a.delAll(r).catch(e=>{console.log(`${n}.delAll catch`,e),l="failed to delete data"});else if("mix"===i){if(!qe(r))return Promise.reject("invalid input of mix, need the result object of ltdtDiffByKey");let t,i=[];for(let[e,t]of[["add","failed to insert data"],["diff","failed to update data"]]){let s=ca(ge(r,e,[]));An(s)>0&&(console.log(`${n}.mix ${e} id changed by clearXSS`,s),i.push(Ma(t,s)))}if(An(i)>0)return Promise.reject(ko(i,"; "));o=[];let c=[],M=ge(r,"add",[]);if(An(M)>0){try{M=ua(e,n,s,M,"insert+save")}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),l="failed to adjust data",Promise.reject(l)}if(await a.insert(M).catch(e=>{console.log(`${n}.insert catch`,e),l="failed to insert data"}),Be(l))return Promise.reject(l);t=yi(M,e=>({id:e.id})),o=[...o,...t]}let u=ge(r,"del",[]);if(An(u)>0){let e=await a.del(u).catch(e=>{console.log(`${n}.del catch`,e),l="failed to delete data"});if(Be(l))return Promise.reject(l);let s=la(e,u);An(s)>0&&(console.log(`${n}.del fail`,s),c.push(aa("failed to delete data",s))),t=yi(u,e=>({id:e.id})),o=[...o,...t]}let d=ge(r,"diff",[]);if(An(d)>0){let i=d;try{d=ua(e,n,s,d)}catch(e){return console.log(`${n}.adjustData catch`,e.toString()),l="failed to adjust data",Promise.reject(l)}let r=await a.save(d).catch(e=>{console.log(`${n}.save catch`,e),l="failed to update data"});if(Be(l))return Promise.reject(l);let M=la(r,d);An(M)>0&&(console.log(`${n}.save fail`,M),c.push(aa("failed to update data",la(r,i)))),t=yi(d,e=>({id:e.id})),o=[...o,...t]}if(An(c)>0)return Promise.reject(ko(c,"; "))}else l=`invalid mode: ${i}`;return Be(l)?Promise.reject(l):o}(e,t,s,n,i,r)}function wa(e,t,s,n=!1){if(!St(t)){let i=`${s} 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(Go(t),!St(e))throw new Error("invalid mapOrm");let s={funChecks:[],funPreProcessing:[],funPostProcessing:[],mapOrm:e};return{addFunCheck:e=>{wa(s.funChecks,e,"addFunCheck",!0)},addFunPreProcessing:e=>{wa(s.funPreProcessing,e,"addFunPreProcessing")},addFunPostProcessing:e=>{wa(s.funPostProcessing,e,"addFunPostProcessing")},procOrm:async(e,t,n,i)=>async function(e,t,s,n,i){await jo(e.funChecks,e=>e({woName:s,userId:t,mode:n,input:i}));for(let r of[...e.funPreProcessing]){let e=await r({woName:s,userId:t,mode:n,input:i});if(!qe(e)||void 0===e.input)return Promise.reject("invalid return of pre-processing, need an object with input");i=e.input}let r=await e.mapOrm(t,s,n,i);for(let o of[...e.funPostProcessing])r=await o({woName:s,userId:t,mode:n,input:i,output:r});return r}(s,e,t,n,i)}}function ya(e,t,s,n,i={}){Go(i);let r=function(e,t,s,n){if(!qe(e))throw console.log("ds",e),new Error("invalid ds");if(!St(t))throw console.log("WOrm",t),new Error("invalid WOrm");if(!Be(s))throw console.log("url",s),new Error("invalid url");if(!Be(n))throw console.log("db",n),new Error("invalid db");let i={};return Ss(Oe(e),e=>{let r=new t({url:s,db:n,cl:e});i[e]=r}),i}(e,t,s,n),o=Ia(da(e,r),i);return{...Wo,woItems:r,closeAll:async()=>{await jo(r,async e=>{e&&St(e.close)&&await e.close()})},...o}}let ga={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-US",cht:"zh-TW"},id:{eng:"ID",cht:"主鍵"},systemMessage:{eng:"System message",cht:"系統確認訊息"},ok:{eng:"OK",cht:"確認"},no:{eng:"No",cht:"取消"},yes:{eng:"Yes",cht:"確定"},saveChanges:{eng:"Save changes",cht:"儲存變更"},close:{eng:"Close",cht:"關閉"},cancel:{eng:"Cancel",cht:"取消"},processing:{eng:"Processing...",cht:"處理中請稍後..."},waitingData:{eng:"Waiting data...",cht:"等待數據中..."},anUnexpectedErrorOccurred:{eng:"An unexpected error occurred, please contact the administrator",cht:"發生非預期錯誤,請洽管理員"},getDataError:{eng:"Failed to get data, please try again later",cht:"取得數據失敗,請稍後再試"},logout:{eng:"Log out",cht:"登出"},settings:{eng:"Settings",cht:"設定"},showArchived:{eng:"Show archived",cht:"顯示封存"},timeCreate:{eng:"Created time",cht:"創建時間"},timeUpdate:{eng:"Updated time",cht:"最新變更時間"},errUserIdMissing:{eng:"Can not get the user id",cht:"無法取得使用者主鍵"},errUserEmailMissing:{eng:"Can not get the email of user",cht:"無法取得使用者電子郵件"},errUserNameMissing:{eng:"Can not get the name of user",cht:"無法取得使用者名稱"},errUserRoleMissing:{eng:"Can not get the role of user",cht:"無法取得使用者角色"},errUserNoPermission:{eng:"User does not have permission",cht:"使用者無權限"},errUserNotFound:{eng:"Can not find the user",cht:"查無使用者"},errTokenNoPermission:{eng:"Token does not have permission",cht:"權杖無存取權限"},errPayloadInvalid:{eng:"Invalid payload",cht:"請求內容格式錯誤"},errChannelIdInvalid:{eng:"Invalid channel id",cht:"頻道主鍵無效"},errChannelRowInvalid:{eng:"Invalid channel data",cht:"頻道數據無效"},errMemberRowInvalid:{eng:"Invalid member data",cht:"成員數據無效"},errMemberIdInvalid:{eng:"Invalid member id",cht:"成員主鍵無效"},errContentInvalid:{eng:"Invalid message content",cht:"訊息內容無效"},errFileRowInvalid:{eng:"Invalid file data",cht:"檔案數據無效"},errUploadInvalid:{eng:"Invalid upload data",cht:"上傳數據無效"},errFileIdInvalid:{eng:"Invalid file id",cht:"檔案主鍵無效"},errFileNotFound:{eng:"Can not find the file",cht:"查無檔案"},errTaskIdInvalid:{eng:"Invalid task id",cht:"任務主鍵無效"},errTaskNotFound:{eng:"Can not find the task",cht:"查無任務"},errTaskAlreadyClaimed:{eng:"This task has already been claimed",cht:"此任務已被認領"},errTaskNotRunning:{eng:"This task is not in running state",cht:"此任務非執行中狀態"},errTaskNotResettable:{eng:"This task can not be reset",cht:"此任務無法重置"},errTaskExternalServiceUnavailable:{eng:"External service is temporarily unavailable",cht:"外部服務暫時無法使用"},errResultInvalid:{eng:"Invalid task result",cht:"任務回應內容無效"},errStateInvalid:{eng:"Invalid task state",cht:"任務狀態無效"},errLastMessageIdInvalid:{eng:"Invalid last message id",cht:"已讀訊息主鍵無效"},saveInProgress:{eng:"The previous save is still in progress. Please do not submit again.",cht:"上一次儲存仍在處理中,請勿重複送出"},deleteInProgress:{eng:"The previous deletion is still in progress. Please do not submit again.",cht:"上一次刪除仍在處理中,請勿重複送出"},sendInProgress:{eng:"The previous message is still being sent. Please do not submit again.",cht:"上一則訊息仍在送出中,請勿重複送出"},channelName:{eng:"Channel name",cht:"頻道名稱"},channelDescription:{eng:"Channel description",cht:"頻道描述"},channelAgentId:{eng:"Agent id",cht:"主責agent識別碼"},channelOwnerId:{eng:"Owner id",cht:"建立者"},addChannel:{eng:"Add channel",cht:"新增頻道"},deleteChannel:{eng:"Delete channel",cht:"刪除頻道"},saveChannelSuccess:{eng:"Channel saved successfully",cht:"頻道儲存成功"},saveChannelFail:{eng:"Failed to save channel",cht:"頻道儲存失敗"},deleteChannelSuccess:{eng:"Channel deleted successfully",cht:"頻道刪除成功"},deleteChannelFail:{eng:"Failed to delete channel",cht:"頻道刪除失敗"},channelMembers:{eng:"Channel members",cht:"頻道成員"},memberId:{eng:"Member id",cht:"成員識別碼"},memberType:{eng:"Member type",cht:"成員類型"},memberRole:{eng:"Role",cht:"角色"},memberLastSeen:{eng:"Last seen message",cht:"已讀訊息水位"},addMember:{eng:"Add member",cht:"新增成員"},deleteMember:{eng:"Delete member",cht:"刪除成員"},saveMemberSuccess:{eng:"Member saved successfully",cht:"成員儲存成功"},saveMemberFail:{eng:"Failed to save member",cht:"成員儲存失敗"},deleteMemberSuccess:{eng:"Member deleted successfully",cht:"成員刪除成功"},deleteMemberFail:{eng:"Failed to delete member",cht:"成員刪除失敗"},postMessageSuccess:{eng:"Message posted successfully",cht:"訊息傳送成功"},postMessageFail:{eng:"Failed to post message",cht:"訊息傳送失敗"},inputMessage:{eng:"Type a message...",cht:"輸入訊息..."},taskTitle:{eng:"Task title",cht:"任務標題"},taskPayload:{eng:"Task payload",cht:"任務需求內容"},taskState:{eng:"State",cht:"狀態"},taskAssignee:{eng:"Assignee",cht:"認領者"},taskResult:{eng:"Result",cht:"任務回應內容"},taskStatePending:{eng:"Pending",cht:"待認領"},taskStateRunning:{eng:"Running",cht:"執行中"},taskStateDone:{eng:"Done",cht:"已完成"},taskStateError:{eng:"Error",cht:"失敗"},respondTask:{eng:"Respond task",cht:"回應任務"},resetTask:{eng:"Retry task",cht:"重試任務"},respondTaskSuccess:{eng:"Task responded successfully",cht:"任務回應成功"},respondTaskFail:{eng:"Failed to respond task",cht:"任務回應失敗"},resetTaskSuccess:{eng:"Task reset successfully",cht:"任務重置成功"},resetTaskFail:{eng:"Failed to reset task",cht:"任務重置失敗"},cannotConnectServer:{eng:"Unable to connect to the server, please try again later",cht:"無法連線至伺服器,請稍後再試"},mmChannels:{eng:"Channels",cht:"頻道管理"},mmChannelsMsg:{eng:"Manage channels for conversations and tasks.",cht:"管理用於對話與任務的頻道。"},mmConversation:{eng:"Conversation",cht:"頻道對話"},mmConversationMsg:{eng:"View channel messages, send messages or open them as tasks.",cht:"檢視頻道訊息、發送訊息或將訊息開成任務。"},mmTasks:{eng:"Tasks",cht:"任務檢視"},mmTasksMsg:{eng:"View tasks and their responses, retry or respond manually.",cht:"檢視任務與其回應,可重試或人工代回。"},modeEdit:{eng:"Edit mode",cht:"編輯模式"},menuTreeShow:{eng:"Show menu",cht:"顯示選單"},menuTreeHide:{eng:"Hide menu",cht:"隱藏選單"},logoutConfirm:{eng:"Are you sure you want to log out?",cht:"確定要登出嗎?"},channelsEmpty:{eng:"No channels yet",cht:"目前尚無頻道"},channelNameEmpty:{eng:"Channel name can not be empty",cht:"頻道名稱不可為空"},channelNameDuplicate:{eng:"Channel name is duplicated",cht:"頻道名稱重複"},channelNameInvalid:{eng:"Please correct the channel name first",cht:"請先修正頻道名稱"},deleteChannelConfirm:{eng:"Are you sure you want to delete the selected channels?",cht:"確定要刪除所選頻道嗎?"},selectChannel:{eng:"Channel",cht:"頻道"},selectChannelFirst:{eng:"Please select a channel first",cht:"請先選擇頻道"},conversationEmpty:{eng:"No messages in this channel yet",cht:"此頻道尚無訊息"},openAsTask:{eng:"Open as task",cht:"開成任務"},taskTitlePlaceholder:{eng:"Task title (optional, defaults to first line)",cht:"任務標題(選填,預設取首行)"},sendMessage:{eng:"Send",cht:"送出"},messageContentEmpty:{eng:"Message content can not be empty",cht:"訊息內容不可為空"},senderHuman:{eng:"Human",cht:"人類"},senderAgent:{eng:"Agent",cht:"Agent"},kindText:{eng:"Text",cht:"對話"},kindTask:{eng:"Task",cht:"任務"},kindTaskReply:{eng:"Task reply",cht:"任務回應"},tasksEmpty:{eng:"No tasks in this channel yet",cht:"此頻道尚無任務"},taskTimeDone:{eng:"Done time",cht:"結束時間"},taskErrorKey:{eng:"Error key",cht:"錯誤鍵"},resetTaskConfirm:{eng:"Are you sure you want to retry this task?",cht:"確定要重試此任務嗎?"},respondTaskInputLabel:{eng:"Respond on behalf (manual)",cht:"人工代回內容"},respondTaskPlaceholder:{eng:"Enter the task result (markdown supported)...",cht:"輸入任務回應內容(支援 markdown)..."},respondTaskSubmit:{eng:"Submit response",cht:"送出回應"},respondTaskResultEmpty:{eng:"Response content can not be empty",cht:"回應內容不可為空"},mmStats:{eng:"Stats",cht:"統計"},mmAdmin:{eng:"Admin",cht:"後台"},mmMembers:{eng:"Members",cht:"成員"},searchChannelPlaceholder:{eng:"Search channels / projects...",cht:"搜尋頻道 / 專案…"},uncategorized:{eng:"Uncategorized",cht:"未分類"},channelTreeEmpty:{eng:"No channels match",cht:"無符合的頻道"},agentOnline:{eng:"Agent online",cht:"agent 在線"},selectChannelToStart:{eng:"Select a channel from the left to start",cht:"請從左側選擇一個頻道開始"},timelineEmpty:{eng:"No messages in this channel yet",cht:"此頻道尚無訊息"},today:{eng:"Today",cht:"今天"},noAgentAssigned:{eng:"No agent assigned",cht:"未指派 agent"},composerPlaceholder:{eng:"Type a message... Paste images directly (Enter to send, Shift+Enter for newline)",cht:"輸入訊息… 可直接貼上多張圖片 (Enter 發送,Shift+Enter 換行)"},composerHint:{eng:"Enter to send",cht:"Enter 發送"},attachImage:{eng:"Attach image",cht:"附加圖片"},removeImage:{eng:"Remove image",cht:"移除圖片"},uploadImageFail:{eng:"Failed to upload image",cht:"圖片上傳失敗"},viewImage:{eng:"View image",cht:"檢視圖片"},statChannels:{eng:"Channels",cht:"頻道數"},statMessages:{eng:"Messages",cht:"訊息數"},statTasks:{eng:"Tasks",cht:"任務總數"},statPending:{eng:"Pending",cht:"待處理"},statRunning:{eng:"Running",cht:"處理中"},statDone:{eng:"Done",cht:"已完成"},statError:{eng:"Error",cht:"失敗"},statsOverview:{eng:"Overview",cht:"系統概況"},statTaskBreakdown:{eng:"Task breakdown",cht:"任務狀態分布"},channelLevels:{eng:"Levels",cht:"階層"},selectChannelForMembers:{eng:"Select a channel to manage members",cht:"選擇頻道以管理成員"},memberHuman:{eng:"Human",cht:"人類"},memberAgent:{eng:"Agent",cht:"Agent"},membersEmpty:{eng:"No members in this channel yet",cht:"此頻道尚無成員"},deleteMemberConfirm:{eng:"Are you sure you want to delete the selected members?",cht:"確定要刪除所選成員嗎?"}},La=(e={})=>{let t=ge(e,"kpLangExt");qe(t)||(t={});let s=ge(e,"webName");qe(s)||(s={});let n=ge(e,"webDescription");qe(n)||(n={});let i={};i={...i,...ga},qe(t)&&(i={...i,...t}),qe(s)&&(i={...i,webName:{...s}}),qe(n)&&(i={...i,webDescription:{...n}});let r={};return Ss(["eng","cht"],e=>{let t={};Ss(i,(s,n)=>{t[n]=s[e]}),r[e]=t}),r};function ma(e,t){var s=[];return Ts(e,function(e,n,i){t(e,n,i)&&s.push(e)}),s}function Da(e,t){return(u(e)?Pn:ma)(e,wi(t))}function pa(e,t,s,n){if(!Z(e))return e;for(var i=-1,r=(t=we(t,e)).length,o=r-1,l=e;null!=l&&++i<r;){var a=Ie(t[i]),c=s;if("__proto__"===a||"constructor"===a||"prototype"===a)return e;if(i!=o){var M=l[a];void 0===(c=n?n(M,a,l):void 0)&&(c=Z(M)?M:Ze(t[i+1])?[]:{})}Sr(l,a,c),l=l[a]}return e}function Ca(e,t){return function(e,t,s){for(var n=-1,i=t.length,r={};++n<i;){var o=t[n],l=ye(e,o);s(l,o)&&pa(r,we(o,e),l)}return r}(e,t,function(t,s){return ui(e,s)})}var ha=y?y.isConcatSpreadable:void 0;function fa(e){return u(e)||he(e)||!!(ha&&e&&e[ha])}function ba(e,t,s,n,i){var r=-1,o=e.length;for(s||(s=fa),i||(i=[]);++r<o;){var l=e[r];t>0&&s(l)?t>1?ba(l,t-1,s,n,i):Jn(i,l):n||(i[i.length]=l)}return i}function Na(e){return(null==e?0:e.length)?ba(e,1):[]}var xa=function(e){return Ur(Gr(e,void 0,Na),e+"")}(function(e,t){return null==e?{}:Ca(e,t)}),Ta=xa;function Za(e){if(Pe(e))return e;if(0===e)return!1;if(1===e)return!0;let t=!1;return Be(e)&&"true"===(e=de(vi(e)).toLowerCase())&&(t=!0),t}let Sa="./dbf";function Aa(e={}){let t=ge(e,"methodsExec");if(!is(t))throw new Error("invalid opt.methodsExec");let s=ge(e,"srLog");if(!St(ge(s,"error")))throw new Error("invalid opt.srLog");return({userId:e,tableName:n,methodName:i}={})=>Be(e)?!!t.includes(i)||(s.error({event:"authorizeExec",err:"errUserNoPermission",tableName:n,methodName:i}),!1):(s.error({event:"authorizeExec",err:"errUserIdMissing",tableName:n,methodName:i}),!1)}let Ya="w-syslog/src/formatter.mjs";function Xa(s={}){let n=s.fpSelf,i=s.cwd,r=[],o=e.dirname(e.dirname(n)),l=e.join(o,"src","formatter.mjs");if((s=>{try{return"w-syslog"===JSON.parse(t.readFileSync(e.join(s,"package.json"),"utf8")).name}catch(e){return!1}})(o)&&t.existsSync(l))return{fp:l,by:"pkgRoot"};r.push(`package root of ${n}`);try{return{fp:c.createRequire(n).resolve(Ya),by:"resolveFromSelf"}}catch(e){r.push(`resolve from ${n}`)}try{return{fp:c.createRequire(e.join(i,"index.js")).resolve(Ya),by:"resolveFromCwd"}}catch(e){r.push(`resolve from ${i}`)}throw new Error(`w-syslog: can not resolve transport target ${Ya}, tried: ${r.join("; ")}. When bundling, keep w-syslog installed and list "pino" in external`)}let va="",za="wsyslogFormatterError",Ea=e=>{try{return t.statSync(e).isDirectory()}catch(e){return!1}};function ja(s={}){let n=Ut(),i=ge(s,"timeZone",null),r=ge(s,"fdLog");Be(r)||(r="./_logs");let o=ge(s,"interval");"day"!==o&&"hr"!==o&&(o="day");let c=ge(s,"numKeep");if(pt(c)||(c="day"===o?365:8760),c=Dt(c),"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(Be(i))try{Intl.DateTimeFormat("en-US",{timeZone:i})}catch(e){throw new Error(`w-syslog: invalid timeZone[${i}]`)}let u=e.resolve(r);if(Rs(u),!Ea(u))throw new Error(`w-syslog: can not create fdLog[${r}]`);let d=(""===va&&(va=Xa({fpSelf:l.fileURLToPath("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:M&&"SCRIPT"===M.tagName.toUpperCase()&&M.src||new URL("w-web-task.umd.js",document.baseURI).href),cwd:process.cwd()}).fp),va),w=a.transport({targets:[{level:"info",target:l.pathToFileURL(d).href,options:{interval:o,fdLog:u,timeZone:i}}]});w.unref();let I=!1,y=e=>{try{n.emit("writeError",e)}catch(e){}},g=e=>{I=!0,console.error("w-syslog transport error:",e),y(e)},L=e=>{let t=new Error(ge(e,"message","w-syslog formatter error"));t.code=ge(e,"code"),t.syscall=ge(e,"syscall"),t.path=ge(e,"path"),y(t)};w.on("error",g),w.on(za,L);let m=()=>{w.off("error",g),w.off(za,L)},D=a(w),p=()=>{try{if(!Ea(u))return;let s="hr"===o?/^\d{4}-\d{2}-\d{2}T\d{2}\.log$/:/^\d{4}-\d{2}-\d{2}\.log$/,i=t.readdirSync(u).filter(e=>s.test(e));i.sort();let l=i.length-c;if(l<=0)return;let a=i.slice(0,l);for(let s of a){let i=e.join(r,s);try{t.unlinkSync(e.join(u,s)),n.emit("delete",{fp:i,fn:s})}catch(e){}}}catch(e){console.error("WSyslog cleanLogs error:",e)}},C=setImmediate(()=>{C=null,p()}),h=setInterval(p,36e5);h.unref();let f=null,b=e=>{let t=D[e].bind(D);return(...s)=>{try{n.emit(e,{args:s})}catch(e){}I||t(...s)}};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!==f)return f;null!==C&&(clearImmediate(C),C=null),clearInterval(h);let t=ge(e,"timeLimit");pt(t)||(t=6e4),f=zt();let s=!1,n=()=>{s||(s=!0,w.closed?setImmediate(m):w.once("close",()=>{setImmediate(m)}),f.resolve())},i=setTimeout(()=>{console.error("w-syslog clear: timeout, worker terminated, some logs may be lost");try{w.worker.terminate()}catch(e){}n()},t);try{if(w.closed||w.destroyed)return clearTimeout(i),n(),f;w.once("close",()=>{clearTimeout(i),n()}),w.end()}catch(e){clearTimeout(i),n()}return f},n}let Ga=e=>e.split("").map(e=>{let t=e.charCodeAt(0);return t<=31||127===t?"?":e}).join(""),Wa=e=>{if(null==e||""===e)return"";if(qt(e))return e.map(Wa);if("string"!=typeof e)return`(${typeof e})`;let t=e.length,s=Math.min(4,Math.floor(t/8));return 0===s?`(len=${t})`:`${Ga(e.slice(0,s))}...${Ga(e.slice(t-s))}(len=${t})`},Ka=["invalidUrl","invalidTokenSelf","invalidTokenTar","invalidUserIdTar","noTokenKeyValueInUrl","noTokenKeyUserIdInUrl","noTokenInUrl","cannotGetUserByUrl","cannotGetUsersByUrl","cannotGetUserDataByUrl","cannotGetUsersDataByUrl","noUserDataByUrl","noUsersDataByUrl","noUserDataAfterConvert"],ka=/^[A-Za-z]{1,40}$/,Va=(e,t={})=>{if(!St(e))throw new Error("invalid fn");let s=t&&"failValue"in t?t.failValue:null,n=t?t.onFail:null;return async(...t)=>{try{return await e(...t)}catch(e){if(St(n))try{n((e=>{try{let t=Zt(e)?e.message:e;if(Be(t)&&Ka.includes(t))return{upstream:t};let s="",n="";if(null===e)s="null";else if(qt(e))s="array";else if(Zt(e)){s="error";let t=e.name;"string"==typeof t&&ka.test(t)&&(n=t)}else s=typeof e;return{upstreamType:s,upstreamName:n}}catch(e){return{upstreamType:"unknown",upstreamName:""}}})(e))}catch(e){}return s}}};function Ua(e,t,s=""){if(!is(t))return{};let n={};return Ss(t,function(t){n[t]=ge(e,t,s)}),n}let Qa={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"頻道名稱",type:"STRING"},description:{name:"頻道描述",type:"TEXT"},agentId:{name:"主責agent識別碼",type:"STRING"},levels:{name:"階層",type:"STRING"},ownerId:{name:"建立者",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},Ha={keyTable:"channels",tableNameCht:"頻道",tableNameEng:"Channels",settings:Qa,funNew:(e={})=>{let t=Ua(e,Oe(Qa));return t.id=`${_o()}`,t.timeCreate=Ho(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t},funTest:()=>[]},Ra={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},channelId:{name:"頻道主鍵",type:"STRING"},memberId:{name:"成員識別碼",type:"STRING"},memberType:{name:"成員類型",type:"STRING"},role:{name:"角色",type:"STRING"},lastSeenMessageId:{name:"已讀訊息水位",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},Ja={keyTable:"channelMembers",tableNameCht:"頻道成員",tableNameEng:"ChannelMembers",settings:Ra,funNew:(e={})=>{let t=Ua(e,Oe(Ra));return t.id=`${_o()}`,t.timeCreate=Ho(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t.memberType=Be(t.memberType)?t.memberType:"human",t.role=Be(t.role)?t.role:"member",t},funTest:()=>[]},Oa={id:{pk:!0,name:"主鍵",type:"STRING"},channelId:{name:"頻道主鍵",type:"STRING"},senderId:{name:"發送者識別碼",type:"STRING"},senderType:{name:"發送者類型",type:"STRING"},kind:{name:"訊息類型",type:"STRING"},content:{name:"訊息內容",type:"TEXT"},taskId:{name:"任務主鍵",type:"STRING"},attachments:{name:"附件檔案清單",type:"TEXT"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},Pa={keyTable:"messages",tableNameCht:"對話訊息",tableNameEng:"Messages",settings:Oa,funNew:(e={})=>{let t=Ua(e,Oe(Oa));return t.id=`${_o()}`,t.timeCreate=Ho(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t.kind=Be(t.kind)?t.kind:"text",t.senderType=Be(t.senderType)?t.senderType:"human",t.attachments=Be(t.attachments)?t.attachments:"[]",t},funTest:()=>[]},Fa={...Pa,keyTable:"messagesArchive",tableNameCht:"訊息(封存)",tableNameEng:"MessagesArchive"},Ba={id:{pk:!0,name:"主鍵",type:"STRING"},channelId:{name:"頻道主鍵",type:"STRING"},messageId:{name:"起源訊息主鍵",type:"STRING"},title:{name:"任務標題",type:"STRING"},payload:{name:"任務需求內容",type:"TEXT"},state:{name:"狀態",type:"STRING"},assigneeId:{name:"認領agent識別碼",type:"STRING"},result:{name:"任務回應內容",type:"TEXT"},errorKey:{name:"錯誤鍵",type:"STRING"},resultMessageId:{name:"回應訊息主鍵",type:"STRING"},timeClaim:{name:"認領時間",type:"STRING"},timeDone:{name:"結束時間",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},$a={keyTable:"tasks",tableNameCht:"任務",tableNameEng:"Tasks",settings:Ba,funNew:(e={})=>{let t=Ua(e,Oe(Ba));return t.id=`${_o()}`,t.timeCreate=Ho(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t.state=Be(t.state)?t.state:"pending",t},funTest:()=>[]},_a={...$a,keyTable:"tasksArchive",tableNameCht:"任務(封存)",tableNameEng:"TasksArchive"},qa={id:{pk:!0,name:"主鍵",type:"STRING"},name:{name:"原始檔名",type:"STRING"},type:{name:"MIME類型",type:"STRING"},size:{name:"檔案大小",type:"INTEGER"},ext:{name:"副檔名",type:"STRING"},userId:{name:"操作者主鍵",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},userIdUpdate:{name:"最新變更使用者主鍵",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}};function ec(e,t={}){let s=ge(t,"useCreateStorage");Pe(s)||(s=!1);let{keyTable:n,tableNameCht:i,tableNameEng:r,settings:o,parser:l,funNew:a,funTest:c,ext:M}=e;if(!Be(n))throw new Error(`invalid keyTable[${n}]`);if(Be(i)||(i=n),Be(r)||(r=n),!qe(o))throw new Error("invalid settings");qe(M)||(M=null),qe(l)||(l=null),St(a)||(a=null);let u=null;St(c)&&(u=async e=>{if(!qe(e))throw new Error("invalid wo");if(!Rt(e,n))throw console.log(e),new Error(`keyTable[${n}] is not in wo`);let t=[];try{t=c(),At(t)&&(t=await t)}catch(e){throw console.log(`keyTable[${n}] funTest catch`,e),new Error(e)}if(0===An(t))return;s&&await e[n].createStorage();let i=la(await e[n].save(t),t);if(An(i)>0)throw new Error(`failed to write test data into table[${n}]: ${JSON.stringify(i)}`);return t});let d={},w={};return Ss(Oe(o),e=>{let t=ge(o,`${e}.name`,"");Be(t)&&(d[e]=t);let s=ge(o,`${e}.type`,"");Be(s)&&(w[e]=s)}),{...e,keyTable:n,tableNameCht:i,tableNameEng:r,settings:o,keys:Oe(o),kpType:w,kpHead:d,parser:l,funNew:a,funTest:c,funTestAndSave:u,ext:M}}let tc={channels:Ha,channelMembers:Ja,messages:Pa,messagesArchive:Fa,tasks:$a,tasksArchive:_a,files:{keyTable:"files",tableNameCht:"圖台檔案",tableNameEng:"Files",settings:qa,funNew:(e={})=>{let t=Ua(e,Oe(qa));return t.id=`${_o()}`,t.timeCreate=Ho(),t.userIdUpdate=t.userId,t.timeUpdate=t.timeCreate,t.isActive="y",t},funTest:()=>[]}},sc={};for(let e in tc)sc[e]=ec(tc[e],{useCreateStorage:!1});return function(s,n,i,r,o,l,a={}){let c=null;if(!St(s))throw console.log("invalid WOrm",s),new Error("invalid WOrm");if(!Be(n))throw console.log("invalid url",n),new Error("invalid url");if(!Be(i))throw console.log("invalid db",i),new Error("invalid db");if(!St(r))throw console.log("invalid getUserByToken",r),new Error("invalid getUserByToken");if(!St(o))throw console.log("invalid verifyClientUser",o),new Error("invalid verifyClientUser");if(!St(l))throw console.log("invalid verifyAppUser",l),new Error("invalid verifyAppUser");Go(a);let M=ge(a,"serverPort");pt(M)||(M=11008),M=Dt(M);let u=ge(a,"webName",{}),d=ge(a,"webDescription",{}),w=ge(a,"webLogo",""),I=ge(a,"subfolder","");var y,g;Be(I)&&("/"===vt(I,1)&&(g=1,I=Be(y=I)&&Yt(g)?0===(g=Dt(g))?y:Xt(y,y.length-g):""),"/"!==Xt(I,1)&&(I=`/${I}`));let L=ge(a,"urlRedirect",""),m=ge(a,"showLanguage","y"),D=ge(a,"language","eng");ge(a,"logFd","./logs");let p=ge(a,"kpLangExt",{}),C=La({kpLangExt:p,webName:u,webDescription:d}),h=((e={})=>{let t=ge(e,"logFd","");Be(t)||(t="./logs");let s=ge(e,"logInterval","");return Be(s)||(s="hr"),ja({fdLog:t,interval:s})})(a),f=e=>t=>{h.warn({event:`inject-${e}-fail`,...t})};r=Va(r,{failValue:null,onFail:f("getUserByToken")}),o=Va(o,{failValue:!1,onFail:f("verifyClientUser")}),l=Va(l,{failValue:!1,onFail:f("verifyAppUser")});let b={};try{b=ya(sc,s,n,i)}catch(e){throw console.log("WServOrm init failed",e),e}let{woItems:N,procOrm:x}=b,T=async(e,t)=>{let s=await Et(t)();return Zt(s.msg)&&(s.msg=s.msg.message),"success"!==s.state&&h.error({event:"api/"+e,err:s.msg}),s},Z=(e,t)=>{let s="kpfun-"+e;return async(...e)=>{try{let n=await t(...e);return h.info({event:s}),n}catch(e){return h.error({event:s,err:e}),Promise.reject(e)}}},S=new function(){let e=new Map,t=new Map;return async(s,n)=>{let i=(e.get(s)||Promise.resolve()).then(async()=>await n(),async()=>await n());e.set(s,i.catch(()=>{})),t.set(s,(t.get(s)||0)+1);try{return await i}finally{let n=t.get(s)-1;n<=0?(t.delete(s),e.delete(s)):t.set(s,n)}}},A=function(e){return async(t,s,n,i={})=>{let r=ge(i,"errKey","");Be(r)||(r="saveInProgress");let o=`${t}:${s}`;return await e.setWithFree([o],n).catch(e=>e===`setWithFree: key in use: ${o}`?Promise.reject(r):Promise.reject(e))}}(Jt()),Y=function(s={}){let{woItems:n,procOrm:i,ds:r,srLog:o,kmx:l,lockSave:a}=s;t.existsSync(Sa)||t.mkdirSync(Sa,{recursive:!0});let c=async(e,t)=>{if(!Be(t))return Promise.reject("errFileIdInvalid");let s=ge(await n.files.select({id:t}),"0");return qe(s)?s:Promise.reject("errFileNotFound")};return{getChannelsList:async(e,t="")=>{let s=await n.channels.select({isActive:"y"});if(Be(t)&&t){s=Da(s,e=>e.agentId===t);let i=await n.channelMembers.select({memberId:e,isActive:"y"}),r={};for(let e of i)r[e.channelId]=ge(e,"lastSeenMessageId","");for(let e of s)e.lastSeenMessageId=r[e.id]||""}return s},saveChannel:async(e,t)=>{if(!qe(t))return Promise.reject("errChannelRowInvalid");let s=Be(t.id)?t.id:ge(t,"name","");return await a("saveChannel",`${e}:${s}`,async()=>{let s,i;if(Be(t.id)){let o=Ta(t,r.channels.keys);o.id=t.id,o.timeUpdate=Ho(),o.userIdUpdate=e,s=await n.channels.save([o]),i=t.id}else{let o=r.channels.funNew({...t,userId:e});s=await n.channels.insert(o),i=o.id}return Be(t.agentId)&&t.agentId&&await l(`channelMember:${i}:${t.agentId}`,async()=>{if(!qe(ge(await n.channelMembers.select({channelId:i,memberId:t.agentId,isActive:"y"}),"0"))){let s=r.channelMembers.funNew({channelId:i,memberId:t.agentId,memberType:"agent",userId:e});await n.channelMembers.insert(s)}}),s})},deleteChannel:async(e,t)=>Be(t)?await a("deleteChannel",`${e}:${t}`,async()=>await n.channels.del({id:t}),{errKey:"deleteInProgress"}):Promise.reject("errChannelIdInvalid"),getChannelMembers:async(e,t)=>Be(t)?await n.channelMembers.select({channelId:t,isActive:"y"}):Promise.reject("errChannelIdInvalid"),saveChannelMember:async(e,t)=>{if(!qe(t))return Promise.reject("errMemberRowInvalid");let s=Be(t.id)?t.id:`${ge(t,"channelId","")}:${ge(t,"memberId","")}`;return await a("saveChannelMember",`${e}:${s}`,async()=>{let s;if(Be(t.id)){let i=Ta(t,r.channelMembers.keys);i.id=t.id,i.timeUpdate=Ho(),i.userIdUpdate=e,s=await n.channelMembers.save([i])}else{let i=r.channelMembers.funNew({...t,userId:e});s=await n.channelMembers.insert(i)}return s})},deleteChannelMember:async(e,t)=>Be(t)?await a("deleteChannelMember",`${e}:${t}`,async()=>await n.channelMembers.del({id:t}),{errKey:"deleteInProgress"}):Promise.reject("errMemberIdInvalid"),getMessages:async(e,t,s=20,i="")=>{if(!Be(t))return Promise.reject("errChannelIdInvalid");let r=Dt(s);r<1&&(r=20),r=Math.min(r,500);let o=await n.messages.select({channelId:t,isActive:"y"});return o=Be(i)&&i?Da(o,e=>e.id>i).slice(0,500):o.slice(-r),o},postMessage:async(e,t,s,i={})=>{if(!Be(t))return Promise.reject("errChannelIdInvalid");let o=ge(i,"attachments"),c=qt(o)&&o.length>0;return Be(s)||c?(Be(s)||(s=""),await a("postMessage",`${e}:${t}`,async()=>await l("postMessage:"+t,async()=>{let o=Za(ge(i,"asTask",!1)),l=ge(i,"senderType","human"),a=ge(i,"attachments"),c=qt(a)?JSON.stringify(a):"[]",M=r.messages.funNew({channelId:t,senderId:e,senderType:l,kind:o?"task":"text",content:s,attachments:c,userId:e});if(await n.messages.insert(M),o){let o=ge(i,"title","")||s.split(/\r?\n/)[0].slice(0,100),l=r.tasks.funNew({channelId:t,messageId:M.id,title:o,payload:s,state:"pending",userId:e});return await n.tasks.insert(l),await n.messages.save({id:M.id,taskId:l.id,timeUpdate:Ho(),userIdUpdate:e}),M.taskId=l.id,{message:M,task:l}}return{message:M}}),{errKey:"sendInProgress"})):Promise.reject("errContentInvalid")},getTasks:async(e,t,s=20,i="",r="desc")=>{if(!Be(t))return Promise.reject("errChannelIdInvalid");let o=Dt(s);o<1&&(o=20),o=Math.min(o,500);let l={channelId:t,isActive:"y"};Be(i)&&i&&(l.state=i);let a=await n.tasks.select(l);return a="asc"===r?a.slice(0,o):a.slice(-o).reverse(),a},getTask:async(e,t)=>{if(!Be(t))return Promise.reject("errTaskIdInvalid");let s=ge(await n.tasks.select({id:t}),"0");return qe(s)?s:Promise.reject("errTaskNotFound")},claimTask:async(e,t)=>Be(t)?await l("task:"+t,async()=>{let s=ge(await n.tasks.select({id:t}),"0");return qe(s)?"pending"!==s.state?Promise.reject("errTaskAlreadyClaimed"):(await n.tasks.save({id:t,state:"running",assigneeId:e,timeClaim:Ho(),timeUpdate:Ho(),userIdUpdate:e}),ge(await n.tasks.select({id:t}),"0")):Promise.reject("errTaskNotFound")}):Promise.reject("errTaskIdInvalid"),respondTask:async(e,t,s,i="done",o="",a="agent")=>Be(t)?Be(s)?"done"!==i&&"error"!==i?Promise.reject("errStateInvalid"):await l("task:"+t,async()=>{let l=ge(await n.tasks.select({id:t}),"0");if(!qe(l))return Promise.reject("errTaskNotFound");if("running"!==l.state)return Promise.reject("errTaskNotRunning");let c=r.messages.funNew({channelId:l.channelId,senderId:e,senderType:a,kind:"taskReply",content:s,taskId:t,userId:e});return await n.messages.insert(c),await n.tasks.save({id:t,result:s,state:i,errorKey:o||"",resultMessageId:c.id,timeDone:Ho(),timeUpdate:Ho(),userIdUpdate:e}),ge(await n.tasks.select({id:t}),"0")}):Promise.reject("errResultInvalid"):Promise.reject("errTaskIdInvalid"),resetTask:async(e,t)=>Be(t)?await l("task:"+t,async()=>{let s=ge(await n.tasks.select({id:t}),"0");return qe(s)?"error"!==s.state&&"running"!==s.state?Promise.reject("errTaskNotResettable"):(await n.tasks.save({id:t,state:"pending",result:"",errorKey:"",assigneeId:"",timeClaim:"",timeDone:"",resultMessageId:"",timeUpdate:Ho(),userIdUpdate:e}),ge(await n.tasks.select({id:t}),"0")):Promise.reject("errTaskNotFound")}):Promise.reject("errTaskIdInvalid"),ackChannel:async(e,t,s)=>Be(t)?Be(s)?await l(`channelMember:${t}:${e}`,async()=>{let i=ge(await n.channelMembers.select({channelId:t,memberId:e}),"0");if(qe(i))await n.channelMembers.save({id:i.id,lastSeenMessageId:s,timeUpdate:Ho(),userIdUpdate:e});else{let i=r.channelMembers.funNew({channelId:t,memberId:e,memberType:"agent",role:"member",lastSeenMessageId:s,userId:e});await n.channelMembers.insert(i)}return{ok:!0}}):Promise.reject("errLastMessageIdInvalid"):Promise.reject("errChannelIdInvalid"),saveFile:async(s,i)=>{if(!qe(i))return Promise.reject("errFileRowInvalid");let o=ge(i,"name"),l=ge(i,"type");if(!Be(o)||!Be(l))return Promise.reject("errFileRowInvalid");let a=ge(i,"dataBase64");if(!Be(a))return Promise.reject("errUploadInvalid");let c=Buffer.from(a,"base64"),M=o.includes(".")?o.split(".").pop():"",u=r.files.funNew({name:o,type:l,ext:M,userId:s});return t.writeFileSync(e.join(Sa,u.id),c),u.size=c.length,await n.files.insert([u]),{id:u.id,name:u.name,type:u.type,size:u.size}},getFileInfo:c,readFile:async s=>{let n=await c(0,s),i=e.join(Sa,s);return t.existsSync(i)?{buf:t.readFileSync(i),info:n}:Promise.reject("errFileNotFound")},getStats:async e=>{let t=await n.channels.select({isActive:"y"}),s=await n.messages.select({isActive:"y"}),i=await n.tasks.select({isActive:"y"}),r={pending:0,running:0,done:0,error:0};for(let e of i)void 0!==r[e.state]&&(r[e.state]+=1);return{channels:t.length,messages:s.length,tasks:{pending:r.pending,running:r.running,done:r.done,error:r.error,total:i.length}}},archiveSweep:async e=>{let t=Dt(e);if(t<=0)return{tasksMoved:0,messagesMoved:0};let s=Xn().subtract(t,"day").format("YYYY-MM-DDTHH:mm:ss.SSSZ"),i=await n.tasks.select({isActive:"y"}),r=Da(i,e=>{let t="done"===e.state||"error"===e.state,n=Be(e.timeDone)&&e.timeDone<s;return t&&n});if(r.length>0){await n.tasksArchive.save(r);for(let e of r)await n.tasks.del({id:e.id})}let o={};for(let e of i)o[e.id]=!0;for(let e of r)delete o[e.id];let l=Da(await n.messages.select({isActive:"y"}),e=>{let t=Be(e.timeCreate)&&e.timeCreate<s,n=("task"===e.kind||"taskReply"===e.kind)&&Be(e.taskId)&&!0===o[e.taskId];return t&&!n});if(l.length>0){await n.messagesArchive.save(l);for(let e of l)await n.messages.del({id:e.id})}return{tasksMoved:r.length,messagesMoved:l.length}},getArchivedTasks:async(e,t,s=20,i="desc")=>{if(!Be(t))return Promise.reject("errChannelIdInvalid");let r=Dt(s);r<1&&(r=20),r=Math.min(r,500);let o=await n.tasksArchive.select({channelId:t,isActive:"y"});return o="asc"===i?o.slice(0,r):o.slice(-r).reverse(),o},getArchivedMessages:async(e,t,s=20)=>{if(!Be(t))return Promise.reject("errChannelIdInvalid");let i=Dt(s);return i<1&&(i=20),i=Math.min(i,500),(await n.messagesArchive.select({channelId:t,isActive:"y"})).slice(-i)}}}({woItems:N,procOrm:x,ds:sc,srLog:h,kmx:S,lockSave:A}),{saveFile:X,getFileInfo:v,readFile:z,getStats:E}=Y,j=Dt(ge(a,"archiveAfterDays",30));if(j>0){let e=!1,t=async()=>{e||(e=!0,await Y.archiveSweep(j).then(e=>{(e.tasksMoved>0||e.messagesMoved>0)&&h.info({event:"archiveSweep",tasksMoved:e.tasksMoved,messagesMoved:e.messagesMoved})}).catch(e=>{h.error({event:"archiveSweep-error",msg:"string"==typeof e?e:e&&e.message||"unknown"})}).finally(()=>{e=!1}))};setTimeout(t,3e4),setInterval(t,36e5)}let G=async e=>{let t=null;return Be(e)&&(t=r(e),At(t)&&(t=await t)),qe(t)?(await(async e=>{if(!Be(ge(e,"id","")))return console.log("user",e),console.log("can not get the userId"),Promise.reject("errUserIdMissing");if(!Be(ge(e,"email","")))return console.log("user",e),console.log("can not get the email of user"),Promise.reject("errUserEmailMissing");if(!Be(ge(e,"name","")))return console.log("user",e),console.log("can not get userName"),Promise.reject("errUserNameMissing");let t=ge(e,"isAdmin","");return"y"===t||"n"===t||(console.log("user",e),console.log("user.isAdmin is not y or n",e.isAdmin),console.log("can not get the role of user"),Promise.reject("errUserRoleMissing"))})(t),t):(console.log("token",Wa(e)),console.log("can not find the user from token"),Promise.reject("errUserNotFound"))},W=async(e,t="")=>{let s=await G(e),n=o(s,t);return At(n)&&(n=await n),!!n},K=async(e,t="")=>{let s=await G(e),n=l(s,t);return At(n)&&(n=await n),n?(h.info({event:"verifyAppUser",from:t,userId:ge(s,"id","")}),s):(console.log("user",s),console.log("user does not have permission"),Promise.reject("errUserNoPermission"))},k=async e=>{let t=ge(e,"payload");return Be(t)&&(t=$e(t)),qe(t)?t:(console.log("payload",Wa(t)),console.log("invalid payload in req"),Promise.reject("errPayloadInvalid"))},V="dist",U="./node_modules/w-web-task/dist";Ft(U)&&(V=U);let Q="index.html";try{let s=e.resolve(V,"index.tmp");if($t(s)||(s=e.resolve(V,Q)),!$t(s))throw console.log("fpEntryIn",s),new Error("invalid fpEntryIn");let n=e.resolve(V,Q),i=t.readFileSync(s,"utf8");i=_t(i,"/mtask/","{sfd}/"),i=_t(i,"{sfd}",I),i=_t(i,"{urlRedirect}",L),i=_t(i,"{language}",D),t.writeFileSync(n,i,"utf8")}catch(e){console.log(e),console.log(`can not generate ${Q}`)}let H=[{method:"GET",path:"/api/getUserByToken",handler:async function(e,t){return await T("getUserByToken",async function(){let t=ge(e,"query.token","");if(!Be(t))return console.log("req.query",(e=>{if(!_e(e))return Wa(e);let t={...e};for(let e of Object.keys(t))"token"===e.toLowerCase()&&(t[e]=Wa(t[e]));return t})(ge(e,"query"))),console.log("token",Wa(t)),console.log("[API]getUserByToken/check token: invalid token"),Promise.reject("errTokenNoPermission");let s=await(async(e,t="")=>{let s=await G(e),n=o(s,t);return At(n)&&(n=await n),n?(h.info({event:"verifyClientUser",from:t,userId:ge(s,"id","")}),s):(console.log("user",s),console.log("user does not have permission"),Promise.reject("errUserNoPermission"))})(t,"getUserByToken");return qe(s)?(h.info({event:"api/getUserByToken",userId:ge(s,"id","")}),s):(console.log("token",Wa(t)),console.log("[API]getUserByToken/check user: invalid user"),Promise.reject("errTokenNoPermission"))})}},{method:"GET",path:"/api/getChannels",handler:async function(e,t){return await T("getChannels",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getChannels"),"id",""),n=ge(e,"query.agentId",""),i=await Y.getChannelsList(s,n);return h.info({event:"api/getChannels",userId:s}),i})}},{method:"GET",path:"/api/getRecentMessages",handler:async function(e,t){return await T("getRecentMessages",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getRecentMessages"),"id",""),n=ge(e,"query.channelId",""),i=Dt(ge(e,"query.n",20)),r=ge(e,"query.afterId",""),o=await Y.getMessages(s,n,i,r);return h.info({event:"api/getRecentMessages",userId:s}),o})}},{method:"GET",path:"/api/getRecentTasks",handler:async function(e,t){return await T("getRecentTasks",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getRecentTasks"),"id",""),n=ge(e,"query.channelId",""),i=Dt(ge(e,"query.n",20)),r=ge(e,"query.state",""),o=ge(e,"query.order","desc"),l=await Y.getTasks(s,n,i,r,o);return h.info({event:"api/getRecentTasks",userId:s}),l})}},{method:"GET",path:"/api/getArchivedTasks",handler:async function(e,t){return await T("getArchivedTasks",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getArchivedTasks"),"id",""),n=ge(e,"query.channelId",""),i=Dt(ge(e,"query.n",20)),r=ge(e,"query.order","desc"),o=await Y.getArchivedTasks(s,n,i,r);return h.info({event:"api/getArchivedTasks",userId:s}),o})}},{method:"GET",path:"/api/getArchivedMessages",handler:async function(e,t){return await T("getArchivedMessages",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getArchivedMessages"),"id",""),n=ge(e,"query.channelId",""),i=Dt(ge(e,"query.n",20)),r=await Y.getArchivedMessages(s,n,i);return h.info({event:"api/getArchivedMessages",userId:s}),r})}},{method:"GET",path:"/api/getTask",handler:async function(e,t){return await T("getTask",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getTask"),"id",""),n=ge(e,"query.taskId",""),i=await Y.getTask(s,n);return h.info({event:"api/getTask",userId:s}),i})}},{method:"POST",path:"/api/postMessage",handler:async function(e,t){return await T("postMessage",async function(){let t=await k(e),s=ge(e,"query.token","")||ge(t,"token",""),n=ge(await K(s,"postMessage"),"id",""),i=ge(t,"channelId",""),r=ge(t,"content",""),o={asTask:ge(t,"asTask",!1),title:ge(t,"title",""),senderType:ge(t,"senderType","human"),attachments:ge(t,"attachments",[])},l=await Y.postMessage(n,i,r,o);return h.info({event:"api/postMessage",userId:n}),l})}},{method:"POST",path:"/api/claimTask",handler:async function(e,t){return await T("claimTask",async function(){let t=await k(e),s=ge(e,"query.token","")||ge(t,"token",""),n=ge(await K(s,"claimTask"),"id",""),i=ge(t,"taskId",""),r=await Y.claimTask(n,i);return h.info({event:"api/claimTask",userId:n}),r})}},{method:"POST",path:"/api/respondTask",handler:async function(e,t){return await T("respondTask",async function(){let t=await k(e),s=ge(e,"query.token","")||ge(t,"token",""),n=ge(await K(s,"respondTask"),"id",""),i=ge(t,"taskId",""),r=ge(t,"result",""),o=ge(t,"state","done"),l=ge(t,"errorKey",""),a=await Y.respondTask(n,i,r,o,l);return h.info({event:"api/respondTask",userId:n}),a})}},{method:"POST",path:"/api/resetTask",handler:async function(e,t){return await T("resetTask",async function(){let t=await k(e),s=ge(e,"query.token","")||ge(t,"token",""),n=ge(await K(s,"resetTask"),"id",""),i=ge(t,"taskId",""),r=await Y.resetTask(n,i);return h.info({event:"api/resetTask",userId:n}),r})}},{method:"POST",path:"/api/ackChannel",handler:async function(e,t){return await T("ackChannel",async function(){let t=await k(e),s=ge(e,"query.token","")||ge(t,"token",""),n=ge(await K(s,"ackChannel"),"id",""),i=ge(t,"channelId",""),r=ge(t,"lastMessageId",""),o=await Y.ackChannel(n,i,r);return h.info({event:"api/ackChannel",userId:n}),o})}},{method:"POST",path:"/api/uploadFile",options:{payload:{maxBytes:20971520}},handler:async function(e,t){return await T("uploadFile",async function(){let t=await k(e),s=ge(e,"query.token","")||ge(t,"token",""),n=ge(await K(s,"uploadFile"),"id",""),i=ge(t,"name",""),r=ge(t,"type",""),o=ge(t,"dataBase64",""),l=await Y.saveFile(n,{name:i,type:r,dataBase64:o});return h.info({event:"api/uploadFile",userId:n}),l})}},{method:"GET",path:"/api/getFileInfo",handler:async function(e,t){return await T("getFileInfo",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getFileInfo"),"id",""),n=ge(e,"query.id",""),i=await Y.getFileInfo(s,n);return h.info({event:"api/getFileInfo",userId:s}),i})}},{method:"GET",path:"/api/getStats",handler:async function(e,t){return await T("getStats",async function(){let t=ge(e,"query.token",""),s=ge(await K(t,"getStats"),"id",""),n=await Y.getStats(s);return h.info({event:"api/getStats",userId:s}),n})}},{method:"GET",path:"/api/getFile",handler:async function(e,t){let s=ge(e,"query.token",""),n=ge(e,"query.id","");try{let e=await K(s,"getFile"),i=await z(n);h.info({event:"api/getFile",userId:ge(e,"id","")});let r=["image/png","image/jpeg","image/jpg","image/gif","image/webp","image/bmp","image/avif"],o=i.info.type||"",l=r.includes(o),a=encodeURIComponent(i.info.name||n);return t.response(i.buf).type(l?o:"application/octet-stream").header("Content-Disposition",`${l?"inline":"attachment"}; filename="${a}"`).header("X-Content-Type-Options","nosniff")}catch(e){let s=Be(e)?e:ge(e,"message","errFileNotFound");return h.error({event:"api/getFile",err:s}),t.response(JSON.stringify({state:"error",msg:s})).code(404).type("application/json")}}}],R=["channels","channelMembers"],J=R,O=["select"];return c=new Eo({port:M,pathStaticFiles:V,apiName:"api",apis:H,tokenType:"Bearer",verifyConn:async({apiType:e,authorization:t,query:s,headers:n,req:i})=>{let r=function(e,t){return Be(e)&&Yt(t)?0===(t=Dt(t))?e:vt(e,e.length-t):""}(t,7);return Be(r)?await W(r,e)?(h.info({event:"verifyConn",apiType:e}),!0):(h.error({event:"verifyConn",err:"errUserNoPermission",apiType:e}),!1):(console.log("apiType",e),console.log("authorization",Wa(t)),console.log("invalid token"),h.error({event:"verifyConn",err:"errTokenNoPermission",apiType:e}),!1)},getUserIdByToken:async e=>{let t=null;Be(e)&&(t=await r(e));let s=ge(t,"id","");return Be(s)?s:(console.log("token",Wa(e)),console.log("can not get the userId from token"),h.error({event:"getUserIdByToken",err:"errUserIdMissing"}),Promise.reject("errUserIdMissing"))},useDbOrm:!0,kpOrm:N,operOrm:x,tableNamesExec:R,methodsExec:O,authorizeExec:Aa({methodsExec:O,srLog:h}),tableNamesSync:J,kpFunExt:{getWebInfor:Z("getWebInfor",e=>({webLogo:w,showLanguage:m,language:D,kpLang:C})),getChannelsList:Z("getChannelsList",e=>Y.getChannelsList(e)),saveChannel:Z("saveChannel",(e,t)=>Y.saveChannel(e,t)),deleteChannel:Z("deleteChannel",(e,t)=>Y.deleteChannel(e,t)),getChannelMembers:Z("getChannelMembers",(e,t)=>Y.getChannelMembers(e,t)),saveChannelMember:Z("saveChannelMember",(e,t)=>Y.saveChannelMember(e,t)),deleteChannelMember:Z("deleteChannelMember",(e,t)=>Y.deleteChannelMember(e,t)),getMessages:Z("getMessages",(e,t,s,n)=>Y.getMessages(e,t,s,n)),postMessage:Z("postMessage",(e,t,s,n)=>Y.postMessage(e,t,s,n)),getTasks:Z("getTasks",(e,t,s,n,i)=>Y.getTasks(e,t,s,n,i)),getArchivedTasks:Z("getArchivedTasks",(e,t,s,n)=>Y.getArchivedTasks(e,t,s,n)),getArchivedMessages:Z("getArchivedMessages",(e,t,s)=>Y.getArchivedMessages(e,t,s)),getTask:Z("getTask",(e,t)=>Y.getTask(e,t)),claimTask:Z("claimTask",(e,t)=>Y.claimTask(e,t)),respondTask:Z("respondTask",(e,t,s,n,i,r)=>Y.respondTask(e,t,s,n,i,r)),resetTask:Z("resetTask",(e,t)=>Y.resetTask(e,t)),ackChannel:Z("ackChannel",(e,t,s)=>Y.ackChannel(e,t,s)),uploadFile:Z("uploadFile",(e,t)=>Y.saveFile(e,t)),getFileInfo:Z("getFileInfo",(e,t)=>Y.getFileInfo(e,t)),getStats:Z("getStats",e=>Y.getStats(e))},fpTableTags:"tableTags-web-task.json"}),c}});
|
|
7
7
|
//# sourceMappingURL=w-web-task.umd.js.map
|