@datagrok/eda 1.1.5 → 1.1.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # EDA changelog
2
2
 
3
+ ## 1.1.6 (2023-10-31)
4
+
5
+ Methods descriptions are updated.
6
+
3
7
  ## 1.1.5 (2023-10-23)
4
8
 
5
9
  Anova top-menu item is improved.
package/dist/356.js ADDED
@@ -0,0 +1,2 @@
1
+ var eda;(()=>{"use strict";var t,e={138:(t,e,n)=>{n.d(e,{W:()=>i}),t=n.hmd(t);var r,i=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,n,i=void 0!==t?t:{};i.ready=new Promise((function(t,r){e=t,n=r}));var o,a=Object.assign({},i),u="object"==typeof window,s="function"==typeof importScripts,f=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(u||s)&&(s?f=self.location.href:"undefined"!=typeof document&&document.currentScript&&(f=document.currentScript.src),r&&(f=r),f=0!==f.indexOf("blob:")?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"",s&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var c,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(c=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&R("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[],A=0,_=null,E=null;function R(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw n(e),e}var x,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function j(t){try{if(t==x&&c)return new Uint8Array(c);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){R(t)}}function O(t,e,n){return function(t){return c||!u&&!s||"function"!=typeof fetch?Promise.resolve().then((function(){return j(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return j(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(n,(function(t){p("failed to asynchronously prepare wasm: "+t),R(t)}))}function I(t){for(;t.length>0;)t.shift()(i)}function U(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=h[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13>>0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function T(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function C(t){return i["_"+t]}S(x="wasmCluster.wasm")||(P=x,x=i.locateFile?i.locateFile(P,f):f+P);var M="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function H(t,e,n,r,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,n=0;n<t.length;++n){var r=t.charCodeAt(n);r<=127?e++:r<=2047?e+=2:r>=55296&&r<=57343?(e+=4,++n):e+=3}return e}(t)+1,n=k(e);return function(t,e,n){!function(t,e,n,r){if(!(r>0))return 0;for(var i=n+r-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(n>=i)break;e[n++]=a}else if(a<=2047){if(n+1>=i)break;e[n++]=192|a>>6,e[n++]=128|63&a}else if(a<=65535){if(n+2>=i)break;e[n++]=224|a>>12,e[n++]=128|a>>6&63,e[n++]=128|63&a}else{if(n+3>=i)break;e[n++]=240|a>>18,e[n++]=128|a>>12&63,e[n++]=128|a>>6&63,e[n++]=128|63&a}}e[n]=0}(t,d,e,n)}(t,n,e),n}(t)),e},array:t=>{var e,n,r=k(t.length);return e=t,n=r,h.set(e,n),r}},a=C(t),u=[],s=0;if(r)for(var f=0;f<r.length;f++){var c=o[n[f]];c?(0===s&&(s=B()),u[f]=c(r[f])):u[f]=r[f]}var l=a.apply(null,u);return function(t){return 0!==s&&D(s),function(t){return"string"===e?(n=t)?function(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.buffer&&M)return M.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var u=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|u<<6|s:(7&a)<<18|u<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var f=a-65536;o+=String.fromCharCode(55296|f>>10,56320|1023&f)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}(d,n,r):"":"boolean"===e?Boolean(t):t;var n,r}(t)}(l)}var W,F={d:function(t,e,n){throw new U(t).init(e,n),t},a:function(){R("")},c:function(t,e,n){d.copyWithin(t,e,e+n)},b:function(t){var e,n=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var i=1;i<=4;i*=2){var o=n*(1+.2/i);if(o=Math.min(o,t+100663296),T(Math.min(r,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},B=(function(){var t,e,r,o,a={a:F};function u(t,e){var n,r=t.exports;return i.asm=r,l=i.asm.e,b(),i.asm.i,n=i.asm.f,w.unshift(n),function(t){if(A--,i.monitorRunDependencies&&i.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),E)){var e=E;E=null,e()}}(),r}if(A++,i.monitorRunDependencies&&i.monitorRunDependencies(A),i.instantiateWasm)try{return i.instantiateWasm(a,u)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),n(t)}(t=c,e=x,r=a,o=function(t){u(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?O(e,r,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,r,o)}))}))).catch(n)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(B=i.asm.k).apply(null,arguments)}),D=function(){return(D=i.asm.l).apply(null,arguments)},k=function(){return(k=i.asm.m).apply(null,arguments)},L=function(){return(L=i.asm.n).apply(null,arguments)};function N(){function t(){W||(W=!0,i.calledRun=!0,y||(I(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),v.unshift(t);var t;I(v)}()))}A>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),g.unshift(t);var t;I(g)}(),A>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=H,i.cwrap=function(t,e,n,r){var i=!n||n.every((t=>"number"===t||"boolean"===t));return"string"!==e&&i&&!r?C(t):function(){return H(t,e,n,arguments)}},E=function t(){W||N(),W||(E=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return N(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&n.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppLib=i)},63:(t,e,n)=>{t.exports=n.p+"8473fcbfb6e85ca6c852.wasm"}},n={};function r(t){var i=n[t];if(void 0!==i)return i.exports;var o=n[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,r),o.loaded=!0,o.exports}r.m=e,r.amdO={},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!t;)t=n[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.b=self.location+"",t=r(138),onmessage=e=>{const{distMatArray:n,n:i,methodCode:o}=e.data,a={};try{(async function(e,n,i){const o=new URL(r(63),r.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm",u=await(0,t.W)({locateFile:()=>a}),s=u.cwrap("getDendrogram","null",["number","number","number","number","number"]),f=Float32Array.BYTES_PER_ELEMENT*e.length,c=u._malloc(f),l=new Uint8Array(u.HEAPU8.buffer,c,f);l.set(new Uint8Array(e.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(n-1)*2,h=u._malloc(p),d=new Uint8Array(u.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(n-1),y=u._malloc(m),b=new Uint8Array(u.HEAPU8.buffer,y,m);s(c,n,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(n-1)),w=new Float32Array(b.buffer,b.byteOffset,n-1).slice(0,n-1),v=g.slice(0,n-1),A=g.slice(n-1,2*n-2);return u._free(l.byteOffset),u._free(d.byteOffset),u._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(n,i,o).then((t=>{a.clusterMatrix=t,postMessage(a)}))}catch(t){a.error=t,postMessage(a)}},eda={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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a0JJLEVBQVNoQixFQUFHSyxFQUFRZSxFQUFVRyxHQUVoRCxNQUFNRSxFQUFjLElBQUl4TixXQUFXb04sRUFBVXZOLE9BQVF1TixFQUFVSyxXQUFvQixHQUFQMUIsRUFBRSxJQUN4RTJCLEVBQWdCLElBQUt2TixhQUFhb04sRUFBWTFOLE9BQVEwTixFQUFZRSxXQUFZMUIsRUFBRSxHQUFJNEIsTUFBTSxFQUFHNUIsRUFBRSxHQUUvRjZCLEVBQVlKLEVBQVlHLE1BQU0sRUFBRzVCLEVBQUUsR0FDbkM4QixFQUFZTCxFQUFZRyxNQUFNNUIsRUFBRSxFQUFHLEVBQUVBLEVBQUksR0FLL0MsT0FIQVUsRUFBYXFCLE1BQU1iLEVBQVFRLFlBQzNCaEIsRUFBYXFCLE1BQU1WLEVBQVVLLFlBQzdCaEIsRUFBYXFCLE1BQU1QLEVBQVlFLFlBQ3hCLENBQUNHLFlBQVdDLFlBQVdILGdCQUNoQyxFRDFDUUssQ0FBMkJqQyxFQUFjQyxFQUFHQyxHQUN2Q3RLLE1BQU1zTSxJQUNQL0IsRUFBSytCLGNBQWdCQSxFQUNyQkMsWUFBWWhDLEVBQUssR0FFekIsQ0FDQSxNQUFPckwsR0FDSHFMLEVBQUtpQyxNQUFRdE4sRUFDYnFOLFlBQVloQyxFQUNoQixHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS93YXNtQ2x1c3Rlci5qcyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9hbWQgb3B0aW9ucyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFybW9ueSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2ltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9oaWVyYXJjaGljYWwtY2x1c3RlcmluZy93YXNtL2NsdXN0ZXJpbmctd29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vY2x1c3Rlcml6ZXJXYXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IHZhciBleHBvcnRDcHBMaWIgPSAoKCkgPT4ge1xuICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdW5kZWZpbmVkO1xuICBcbiAgcmV0dXJuIChcbmZ1bmN0aW9uKGV4cG9ydENwcExpYiA9IHt9KSAge1xuXG52YXIgTW9kdWxlPXR5cGVvZiBleHBvcnRDcHBMaWIhPVwidW5kZWZpbmVkXCI/ZXhwb3J0Q3BwTGliOnt9O3ZhciByZWFkeVByb21pc2VSZXNvbHZlLHJlYWR5UHJvbWlzZVJlamVjdDtNb2R1bGVbXCJyZWFkeVwiXT1uZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7cmVhZHlQcm9taXNlUmVzb2x2ZT1yZXNvbHZlO3JlYWR5UHJvbWlzZVJlamVjdD1yZWplY3R9KTt2YXIgbW9kdWxlT3ZlcnJpZGVzPU9iamVjdC5hc3NpZ24oe30sTW9kdWxlKTt2YXIgYXJndW1lbnRzXz1bXTt2YXIgdGhpc1Byb2dyYW09XCIuL3RoaXMucHJvZ3JhbVwiO3ZhciBxdWl0Xz0oc3RhdHVzLHRvVGhyb3cpPT57dGhyb3cgdG9UaHJvd307dmFyIEVOVklST05NRU5UX0lTX1dFQj10eXBlb2Ygd2luZG93PT1cIm9iamVjdFwiO3ZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVI9dHlwZW9mIGltcG9ydFNjcmlwdHM9PVwiZnVuY3Rpb25cIjt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PVwib2JqZWN0XCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PVwic3RyaW5nXCI7dmFyIHNjcmlwdERpcmVjdG9yeT1cIlwiO2Z1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCl7aWYoTW9kdWxlW1wibG9jYXRlRmlsZVwiXSl7cmV0dXJuIE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0ocGF0aCxzY3JpcHREaXJlY3RvcnkpfXJldHVybiBzY3JpcHREaXJlY3RvcnkrcGF0aH12YXIgcmVhZF8scmVhZEFzeW5jLHJlYWRCaW5hcnksc2V0V2luZG93VGl0bGU7aWYoRU5WSVJPTk1FTlRfSVNfV0VCfHxFTlZJUk9OTUVOVF9JU19XT1JLRVIpe2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7c2NyaXB0RGlyZWN0b3J5PXNlbGYubG9jYXRpb24uaHJlZn1lbHNlIGlmKHR5cGVvZiBkb2N1bWVudCE9XCJ1bmRlZmluZWRcIiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCl7c2NyaXB0RGlyZWN0b3J5PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjfWlmKF9zY3JpcHREaXIpe3NjcmlwdERpcmVjdG9yeT1fc2NyaXB0RGlyfWlmKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKFwiYmxvYjpcIikhPT0wKXtzY3JpcHREaXJlY3Rvcnk9c2NyaXB0RGlyZWN0b3J5LnN1YnN0cigwLHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKX1lbHNle3NjcmlwdERpcmVjdG9yeT1cIlwifXtyZWFkXz11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnNlbmQobnVsbCk7cmV0dXJuIHhoci5yZXNwb25zZVRleHR9O2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7cmVhZEJpbmFyeT11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7eGhyLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZSl9fXJlYWRBc3luYz0odXJsLG9ubG9hZCxvbmVycm9yKT0+e3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKFwiR0VUXCIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO3hoci5vbmxvYWQ9KCk9PntpZih4aHIuc3RhdHVzPT0yMDB8fHhoci5zdGF0dXM9PTAmJnhoci5yZXNwb25zZSl7b25sb2FkKHhoci5yZXNwb25zZSk7cmV0dXJufW9uZXJyb3IoKX07eGhyLm9uZXJyb3I9b25lcnJvcjt4aHIuc2VuZChudWxsKX19c2V0V2luZG93VGl0bGU9dGl0bGU9PmRvY3VtZW50LnRpdGxlPXRpdGxlfWVsc2V7fXZhciBvdXQ9TW9kdWxlW1wicHJpbnRcIl18fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7dmFyIGVycj1Nb2R1bGVbXCJwcmludEVyclwiXXx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihNb2R1bGUsbW9kdWxlT3ZlcnJpZGVzKTttb2R1bGVPdmVycmlkZXM9bnVsbDtpZihNb2R1bGVbXCJhcmd1bWVudHNcIl0pYXJndW1lbnRzXz1Nb2R1bGVbXCJhcmd1bWVudHNcIl07aWYoTW9kdWxlW1widGhpc1Byb2dyYW1cIl0pdGhpc1Byb2dyYW09TW9kdWxlW1widGhpc1Byb2dyYW1cIl07aWYoTW9kdWxlW1wicXVpdFwiXSlxdWl0Xz1Nb2R1bGVbXCJxdWl0XCJdO3ZhciB3YXNtQmluYXJ5O2lmKE1vZHVsZVtcIndhc21CaW5hcnlcIl0pd2FzbUJpbmFyeT1Nb2R1bGVbXCJ3YXNtQmluYXJ5XCJdO3ZhciBub0V4aXRSdW50aW1lPU1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl18fHRydWU7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT1cIm9iamVjdFwiKXthYm9ydChcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIil9dmFyIHdhc21NZW1vcnk7dmFyIEFCT1JUPWZhbHNlO3ZhciBFWElUU1RBVFVTO3ZhciBIRUFQOCxIRUFQVTgsSEVBUDE2LEhFQVBVMTYsSEVBUDMyLEhFQVBVMzIsSEVBUEYzMixIRUFQRjY0O2Z1bmN0aW9uIHVwZGF0ZU1lbW9yeVZpZXdzKCl7dmFyIGI9d2FzbU1lbW9yeS5idWZmZXI7TW9kdWxlW1wiSEVBUDhcIl09SEVBUDg9bmV3IEludDhBcnJheShiKTtNb2R1bGVbXCJIRUFQMTZcIl09SEVBUDE2PW5ldyBJbnQxNkFycmF5KGIpO01vZHVsZVtcIkhFQVAzMlwiXT1IRUFQMzI9bmV3IEludDMyQXJyYXkoYik7TW9kdWxlW1wiSEVBUFU4XCJdPUhFQVBVOD1uZXcgVWludDhBcnJheShiKTtNb2R1bGVbXCJIRUFQVTE2XCJdPUhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGIpO01vZHVsZVtcIkhFQVBVMzJcIl09SEVBUFUzMj1uZXcgVWludDMyQXJyYXkoYik7TW9kdWxlW1wiSEVBUEYzMlwiXT1IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYik7TW9kdWxlW1wiSEVBUEY2NFwiXT1IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoYil9dmFyIHdhc21UYWJsZTt2YXIgX19BVFBSRVJVTl9fPVtdO3ZhciBfX0FUSU5JVF9fPVtdO3ZhciBfX0FUUE9TVFJVTl9fPVtdO3ZhciBydW50aW1lSW5pdGlhbGl6ZWQ9ZmFsc2U7ZnVuY3Rpb24gcHJlUnVuKCl7aWYoTW9kdWxlW1wicHJlUnVuXCJdKXtpZih0eXBlb2YgTW9kdWxlW1wicHJlUnVuXCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicHJlUnVuXCJdPVtNb2R1bGVbXCJwcmVSdW5cIl1dO3doaWxlKE1vZHVsZVtcInByZVJ1blwiXS5sZW5ndGgpe2FkZE9uUHJlUnVuKE1vZHVsZVtcInByZVJ1blwiXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKX1mdW5jdGlvbiBpbml0UnVudGltZSgpe3J1bnRpbWVJbml0aWFsaXplZD10cnVlO2NhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pfWZ1bmN0aW9uIHBvc3RSdW4oKXtpZihNb2R1bGVbXCJwb3N0UnVuXCJdKXtpZih0eXBlb2YgTW9kdWxlW1wicG9zdFJ1blwiXT09XCJmdW5jdGlvblwiKU1vZHVsZVtcInBvc3RSdW5cIl09W01vZHVsZVtcInBvc3RSdW5cIl1dO3doaWxlKE1vZHVsZVtcInBvc3RSdW5cIl0ubGVuZ3RoKXthZGRPblBvc3RSdW4oTW9kdWxlW1wicG9zdFJ1blwiXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyl9ZnVuY3Rpb24gYWRkT25QcmVSdW4oY2Ipe19fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKX1mdW5jdGlvbiBhZGRPbkluaXQoY2Ipe19fQVRJTklUX18udW5zaGlmdChjYil9ZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKXtfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpfXZhciBydW5EZXBlbmRlbmNpZXM9MDt2YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXI9bnVsbDt2YXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkPW51bGw7ZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCl7cnVuRGVwZW5kZW5jaWVzKys7aWYoTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXSl7TW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpfX1mdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKXtydW5EZXBlbmRlbmNpZXMtLTtpZihNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKXtNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKHJ1bkRlcGVuZGVuY2llcyl9aWYocnVuRGVwZW5kZW5jaWVzPT0wKXtpZihydW5EZXBlbmRlbmN5V2F0Y2hlciE9PW51bGwpe2NsZWFySW50ZXJ2YWwocnVuRGVwZW5kZW5jeVdhdGNoZXIpO3J1bkRlcGVuZGVuY3lXYXRjaGVyPW51bGx9aWYoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKXt2YXIgY2FsbGJhY2s9ZGVwZW5kZW5jaWVzRnVsZmlsbGVkO2RlcGVuZGVuY2llc0Z1bGZpbGxlZD1udWxsO2NhbGxiYWNrKCl9fX1mdW5jdGlvbiBhYm9ydCh3aGF0KXtpZihNb2R1bGVbXCJvbkFib3J0XCJdKXtNb2R1bGVbXCJvbkFib3J0XCJdKHdoYXQpfXdoYXQ9XCJBYm9ydGVkKFwiK3doYXQrXCIpXCI7ZXJyKHdoYXQpO0FCT1JUPXRydWU7RVhJVFNUQVRVUz0xO3doYXQrPVwiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLlwiO3ZhciBlPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Iod2hhdCk7cmVhZHlQcm9taXNlUmVqZWN0KGUpO3Rocm93IGV9dmFyIGRhdGFVUklQcmVmaXg9XCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCI7ZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lKXtyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KX12YXIgd2FzbUJpbmFyeUZpbGU7d2FzbUJpbmFyeUZpbGU9XCJ3YXNtQ2x1c3Rlci53YXNtXCI7aWYoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpe3dhc21CaW5hcnlGaWxlPWxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpfWZ1bmN0aW9uIGdldEJpbmFyeShmaWxlKXt0cnl7aWYoZmlsZT09d2FzbUJpbmFyeUZpbGUmJndhc21CaW5hcnkpe3JldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KX1pZihyZWFkQmluYXJ5KXtyZXR1cm4gcmVhZEJpbmFyeShmaWxlKX10aHJvd1wiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIn1jYXRjaChlcnIpe2Fib3J0KGVycil9fWZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSl7aWYoIXdhc21CaW5hcnkmJihFTlZJUk9OTUVOVF9JU19XRUJ8fEVOVklST05NRU5UX0lTX1dPUktFUikpe2lmKHR5cGVvZiBmZXRjaD09XCJmdW5jdGlvblwiKXtyZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihmdW5jdGlvbihyZXNwb25zZSl7aWYoIXJlc3BvbnNlW1wib2tcIl0pe3Rocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIitiaW5hcnlGaWxlK1wiJ1wifXJldHVybiByZXNwb25zZVtcImFycmF5QnVmZmVyXCJdKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSl9KX19cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpfSl9ZnVuY3Rpb24gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLGltcG9ydHMscmVjZWl2ZXIpe3JldHVybiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpLnRoZW4oZnVuY3Rpb24oYmluYXJ5KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LGltcG9ydHMpfSkudGhlbihmdW5jdGlvbihpbnN0YW5jZSl7cmV0dXJuIGluc3RhbmNlfSkudGhlbihyZWNlaXZlcixmdW5jdGlvbihyZWFzb24pe2VycihcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK3JlYXNvbik7YWJvcnQocmVhc29uKX0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LGJpbmFyeUZpbGUsaW1wb3J0cyxjYWxsYmFjayl7aWYoIWJpbmFyeSYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT1cImZ1bmN0aW9uXCImJiFpc0RhdGFVUkkoYmluYXJ5RmlsZSkmJnR5cGVvZiBmZXRjaD09XCJmdW5jdGlvblwiKXtyZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihmdW5jdGlvbihyZXNwb25zZSl7dmFyIHJlc3VsdD1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSxpbXBvcnRzKTtyZXR1cm4gcmVzdWx0LnRoZW4oY2FsbGJhY2ssZnVuY3Rpb24ocmVhc29uKXtlcnIoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIrcmVhc29uKTtlcnIoXCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvblwiKTtyZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLGltcG9ydHMsY2FsbGJhY2spfSl9KX1lbHNle3JldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsaW1wb3J0cyxjYWxsYmFjayl9fWZ1bmN0aW9uIGNyZWF0ZVdhc20oKXt2YXIgaW5mbz17XCJhXCI6d2FzbUltcG9ydHN9O2Z1bmN0aW9uIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSxtb2R1bGUpe3ZhciBleHBvcnRzPWluc3RhbmNlLmV4cG9ydHM7TW9kdWxlW1wiYXNtXCJdPWV4cG9ydHM7d2FzbU1lbW9yeT1Nb2R1bGVbXCJhc21cIl1bXCJlXCJdO3VwZGF0ZU1lbW9yeVZpZXdzKCk7d2FzbVRhYmxlPU1vZHVsZVtcImFzbVwiXVtcImlcIl07YWRkT25Jbml0KE1vZHVsZVtcImFzbVwiXVtcImZcIl0pO3JlbW92ZVJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO3JldHVybiBleHBvcnRzfWFkZFJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO2Z1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCl7cmVjZWl2ZUluc3RhbmNlKHJlc3VsdFtcImluc3RhbmNlXCJdKX1pZihNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl0pe3RyeXtyZXR1cm4gTW9kdWxlW1wiaW5zdGFudGlhdGVXYXNtXCJdKGluZm8scmVjZWl2ZUluc3RhbmNlKX1jYXRjaChlKXtlcnIoXCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiBcIitlKTtyZWFkeVByb21pc2VSZWplY3QoZSl9fWluc3RhbnRpYXRlQXN5bmMod2FzbUJpbmFyeSx3YXNtQmluYXJ5RmlsZSxpbmZvLHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KS5jYXRjaChyZWFkeVByb21pc2VSZWplY3QpO3JldHVybnt9fWZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcyl7d2hpbGUoY2FsbGJhY2tzLmxlbmd0aD4wKXtjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpfX1mdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cil7dGhpcy5leGNQdHI9ZXhjUHRyO3RoaXMucHRyPWV4Y1B0ci0yNDt0aGlzLnNldF90eXBlPWZ1bmN0aW9uKHR5cGUpe0hFQVBVMzJbdGhpcy5wdHIrND4+Ml09dHlwZX07dGhpcy5nZXRfdHlwZT1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzQ+PjJdfTt0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGRlc3RydWN0b3Ipe0hFQVBVMzJbdGhpcy5wdHIrOD4+Ml09ZGVzdHJ1Y3Rvcn07dGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzg+PjJdfTt0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oY2F1Z2h0KXtjYXVnaHQ9Y2F1Z2h0PzE6MDtIRUFQOFt0aGlzLnB0cisxMj4+MF09Y2F1Z2h0fTt0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSEVBUDhbdGhpcy5wdHIrMTI+PjBdIT0wfTt0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihyZXRocm93bil7cmV0aHJvd249cmV0aHJvd24/MTowO0hFQVA4W3RoaXMucHRyKzEzPj4wXT1yZXRocm93bn07dGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gSEVBUDhbdGhpcy5wdHIrMTM+PjBdIT0wfTt0aGlzLmluaXQ9ZnVuY3Rpb24odHlwZSxkZXN0cnVjdG9yKXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7dGhpcy5zZXRfdHlwZSh0eXBlKTt0aGlzLnNldF9kZXN0cnVjdG9yKGRlc3RydWN0b3IpfTt0aGlzLnNldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oYWRqdXN0ZWRQdHIpe0hFQVBVMzJbdGhpcy5wdHIrMTY+PjJdPWFkanVzdGVkUHRyfTt0aGlzLmdldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oKXtyZXR1cm4gSEVBUFUzMlt0aGlzLnB0cisxNj4+Ml19O3RoaXMuZ2V0X2V4Y2VwdGlvbl9wdHI9ZnVuY3Rpb24oKXt2YXIgaXNQb2ludGVyPV9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtpZihpc1BvaW50ZXIpe3JldHVybiBIRUFQVTMyW3RoaXMuZXhjUHRyPj4yXX12YXIgYWRqdXN0ZWQ9dGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7aWYoYWRqdXN0ZWQhPT0wKXJldHVybiBhZGp1c3RlZDtyZXR1cm4gdGhpcy5leGNQdHJ9fXZhciBleGNlcHRpb25MYXN0PTA7dmFyIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQ9MDtmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLHR5cGUsZGVzdHJ1Y3Rvcil7dmFyIGluZm89bmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtpbmZvLmluaXQodHlwZSxkZXN0cnVjdG9yKTtleGNlcHRpb25MYXN0PXB0cjt1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7dGhyb3cgZXhjZXB0aW9uTGFzdH1mdW5jdGlvbiBfYWJvcnQoKXthYm9ydChcIlwiKX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnKGRlc3Qsc3JjLG51bSl7SEVBUFU4LmNvcHlXaXRoaW4oZGVzdCxzcmMsc3JjK251bSl9ZnVuY3Rpb24gZ2V0SGVhcE1heCgpe3JldHVybiAyMTQ3NDgzNjQ4fWZ1bmN0aW9uIGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIoc2l6ZSl7dmFyIGI9d2FzbU1lbW9yeS5idWZmZXI7dHJ5e3dhc21NZW1vcnkuZ3JvdyhzaXplLWIuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KTt1cGRhdGVNZW1vcnlWaWV3cygpO3JldHVybiAxfWNhdGNoKGUpe319ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXAocmVxdWVzdGVkU2l6ZSl7dmFyIG9sZFNpemU9SEVBUFU4Lmxlbmd0aDtyZXF1ZXN0ZWRTaXplPXJlcXVlc3RlZFNpemU+Pj4wO3ZhciBtYXhIZWFwU2l6ZT1nZXRIZWFwTWF4KCk7aWYocmVxdWVzdGVkU2l6ZT5tYXhIZWFwU2l6ZSl7cmV0dXJuIGZhbHNlfWxldCBhbGlnblVwPSh4LG11bHRpcGxlKT0+eCsobXVsdGlwbGUteCVtdWx0aXBsZSklbXVsdGlwbGU7Zm9yKHZhciBjdXREb3duPTE7Y3V0RG93bjw9NDtjdXREb3duKj0yKXt2YXIgb3Zlckdyb3duSGVhcFNpemU9b2xkU2l6ZSooMSsuMi9jdXREb3duKTtvdmVyR3Jvd25IZWFwU2l6ZT1NYXRoLm1pbihvdmVyR3Jvd25IZWFwU2l6ZSxyZXF1ZXN0ZWRTaXplKzEwMDY2MzI5Nik7dmFyIG5ld1NpemU9TWF0aC5taW4obWF4SGVhcFNpemUsYWxpZ25VcChNYXRoLm1heChyZXF1ZXN0ZWRTaXplLG92ZXJHcm93bkhlYXBTaXplKSw2NTUzNikpO3ZhciByZXBsYWNlbWVudD1lbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKG5ld1NpemUpO2lmKHJlcGxhY2VtZW50KXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGdldENGdW5jKGlkZW50KXt2YXIgZnVuYz1Nb2R1bGVbXCJfXCIraWRlbnRdO3JldHVybiBmdW5jfWZ1bmN0aW9uIHdyaXRlQXJyYXlUb01lbW9yeShhcnJheSxidWZmZXIpe0hFQVA4LnNldChhcnJheSxidWZmZXIpfWZ1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpe3ZhciBsZW49MDtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgYz1zdHIuY2hhckNvZGVBdChpKTtpZihjPD0xMjcpe2xlbisrfWVsc2UgaWYoYzw9MjA0Nyl7bGVuKz0yfWVsc2UgaWYoYz49NTUyOTYmJmM8PTU3MzQzKXtsZW4rPTQ7KytpfWVsc2V7bGVuKz0zfX1yZXR1cm4gbGVufWZ1bmN0aW9uIHN0cmluZ1RvVVRGOEFycmF5KHN0cixoZWFwLG91dElkeCxtYXhCeXRlc1RvV3JpdGUpe2lmKCEobWF4Qnl0ZXNUb1dyaXRlPjApKXJldHVybiAwO3ZhciBzdGFydElkeD1vdXRJZHg7dmFyIGVuZElkeD1vdXRJZHgrbWF4Qnl0ZXNUb1dyaXRlLTE7Zm9yKHZhciBpPTA7aTxzdHIubGVuZ3RoOysraSl7dmFyIHU9c3RyLmNoYXJDb2RlQXQoaSk7aWYodT49NTUyOTYmJnU8PTU3MzQzKXt2YXIgdTE9c3RyLmNoYXJDb2RlQXQoKytpKTt1PTY1NTM2KygodSYxMDIzKTw8MTApfHUxJjEwMjN9aWYodTw9MTI3KXtpZihvdXRJZHg+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT11fWVsc2UgaWYodTw9MjA0Nyl7aWYob3V0SWR4KzE+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT0xOTJ8dT4+NjtoZWFwW291dElkeCsrXT0xMjh8dSY2M31lbHNlIGlmKHU8PTY1NTM1KXtpZihvdXRJZHgrMj49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPTIyNHx1Pj4xMjtoZWFwW291dElkeCsrXT0xMjh8dT4+NiY2MztoZWFwW291dElkeCsrXT0xMjh8dSY2M31lbHNle2lmKG91dElkeCszPj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109MjQwfHU+PjE4O2hlYXBbb3V0SWR4KytdPTEyOHx1Pj4xMiY2MztoZWFwW291dElkeCsrXT0xMjh8dT4+NiY2MztoZWFwW291dElkeCsrXT0xMjh8dSY2M319aGVhcFtvdXRJZHhdPTA7cmV0dXJuIG91dElkeC1zdGFydElkeH1mdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLG91dFB0cixtYXhCeXRlc1RvV3JpdGUpe3JldHVybiBzdHJpbmdUb1VURjhBcnJheShzdHIsSEVBUFU4LG91dFB0cixtYXhCeXRlc1RvV3JpdGUpfWZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKXt2YXIgc2l6ZT1sZW5ndGhCeXRlc1VURjgoc3RyKSsxO3ZhciByZXQ9c3RhY2tBbGxvYyhzaXplKTtzdHJpbmdUb1VURjgoc3RyLHJldCxzaXplKTtyZXR1cm4gcmV0fXZhciBVVEY4RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXIhPVwidW5kZWZpbmVkXCI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp1bmRlZmluZWQ7ZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksaWR4LG1heEJ5dGVzVG9SZWFkKXt2YXIgZW5kSWR4PWlkeCttYXhCeXRlc1RvUmVhZDt2YXIgZW5kUHRyPWlkeDt3aGlsZShoZWFwT3JBcnJheVtlbmRQdHJdJiYhKGVuZFB0cj49ZW5kSWR4KSkrK2VuZFB0cjtpZihlbmRQdHItaWR4PjE2JiZoZWFwT3JBcnJheS5idWZmZXImJlVURjhEZWNvZGVyKXtyZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCxlbmRQdHIpKX12YXIgc3RyPVwiXCI7d2hpbGUoaWR4PGVuZFB0cil7dmFyIHUwPWhlYXBPckFycmF5W2lkeCsrXTtpZighKHUwJjEyOCkpe3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7Y29udGludWV9dmFyIHUxPWhlYXBPckFycmF5W2lkeCsrXSY2MztpZigodTAmMjI0KT09MTkyKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHUwJjMxKTw8Nnx1MSk7Y29udGludWV9dmFyIHUyPWhlYXBPckFycmF5W2lkeCsrXSY2MztpZigodTAmMjQwKT09MjI0KXt1MD0odTAmMTUpPDwxMnx1MTw8Nnx1Mn1lbHNle3UwPSh1MCY3KTw8MTh8dTE8PDEyfHUyPDw2fGhlYXBPckFycmF5W2lkeCsrXSY2M31pZih1MDw2NTUzNil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHUwKX1lbHNle3ZhciBjaD11MC02NTUzNjtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Y2g+PjEwLDU2MzIwfGNoJjEwMjMpfX1yZXR1cm4gc3RyfWZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsbWF4Qnl0ZXNUb1JlYWQpe3JldHVybiBwdHI/VVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LHB0cixtYXhCeXRlc1RvUmVhZCk6XCJcIn1mdW5jdGlvbiBjY2FsbChpZGVudCxyZXR1cm5UeXBlLGFyZ1R5cGVzLGFyZ3Msb3B0cyl7dmFyIHRvQz17XCJzdHJpbmdcIjpzdHI9Pnt2YXIgcmV0PTA7aWYoc3RyIT09bnVsbCYmc3RyIT09dW5kZWZpbmVkJiZzdHIhPT0wKXtyZXQ9c3RyaW5nVG9VVEY4T25TdGFjayhzdHIpfXJldHVybiByZXR9LFwiYXJyYXlcIjphcnI9Pnt2YXIgcmV0PXN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7d3JpdGVBcnJheVRvTWVtb3J5KGFycixyZXQpO3JldHVybiByZXR9fTtmdW5jdGlvbiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KXtpZihyZXR1cm5UeXBlPT09XCJzdHJpbmdcIil7cmV0dXJuIFVURjhUb1N0cmluZyhyZXQpfWlmKHJldHVyblR5cGU9PT1cImJvb2xlYW5cIilyZXR1cm4gQm9vbGVhbihyZXQpO3JldHVybiByZXR9dmFyIGZ1bmM9Z2V0Q0Z1bmMoaWRlbnQpO3ZhciBjQXJncz1bXTt2YXIgc3RhY2s9MDtpZihhcmdzKXtmb3IodmFyIGk9MDtpPGFyZ3MubGVuZ3RoO2krKyl7dmFyIGNvbnZlcnRlcj10b0NbYXJnVHlwZXNbaV1dO2lmKGNvbnZlcnRlcil7aWYoc3RhY2s9PT0wKXN0YWNrPXN0YWNrU2F2ZSgpO2NBcmdzW2ldPWNvbnZlcnRlcihhcmdzW2ldKX1lbHNle2NBcmdzW2ldPWFyZ3NbaV19fX12YXIgcmV0PWZ1bmMuYXBwbHkobnVsbCxjQXJncyk7ZnVuY3Rpb24gb25Eb25lKHJldCl7aWYoc3RhY2shPT0wKXN0YWNrUmVzdG9yZShzdGFjayk7cmV0dXJuIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpfXJldD1vbkRvbmUocmV0KTtyZXR1cm4gcmV0fWZ1bmN0aW9uIGN3cmFwKGlkZW50LHJldHVyblR5cGUsYXJnVHlwZXMsb3B0cyl7dmFyIG51bWVyaWNBcmdzPSFhcmdUeXBlc3x8YXJnVHlwZXMuZXZlcnkodHlwZT0+dHlwZT09PVwibnVtYmVyXCJ8fHR5cGU9PT1cImJvb2xlYW5cIik7dmFyIG51bWVyaWNSZXQ9cmV0dXJuVHlwZSE9PVwic3RyaW5nXCI7aWYobnVtZXJpY1JldCYmbnVtZXJpY0FyZ3MmJiFvcHRzKXtyZXR1cm4gZ2V0Q0Z1bmMoaWRlbnQpfXJldHVybiBmdW5jdGlvbigpe3JldHVybiBjY2FsbChpZGVudCxyZXR1cm5UeXBlLGFyZ1R5cGVzLGFyZ3VtZW50cyxvcHRzKX19dmFyIHdhc21JbXBvcnRzPXtcImRcIjpfX19jeGFfdGhyb3csXCJhXCI6X2Fib3J0LFwiY1wiOl9lbXNjcmlwdGVuX21lbWNweV9iaWcsXCJiXCI6X2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXB9O3ZhciBhc209Y3JlYXRlV2FzbSgpO3ZhciBfX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4oX19fd2FzbV9jYWxsX2N0b3JzPU1vZHVsZVtcImFzbVwiXVtcImZcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9nZXREZW5kcm9ncmFtPU1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9nZXREZW5kcm9ncmFtPU1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdPU1vZHVsZVtcImFzbVwiXVtcImdcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPU1vZHVsZVtcImFzbVwiXVtcImhcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKF9fX2Vycm5vX2xvY2F0aW9uPU1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9tYWxsb2M9TW9kdWxlW1wiX21hbGxvY1wiXT1mdW5jdGlvbigpe3JldHVybihfbWFsbG9jPU1vZHVsZVtcIl9tYWxsb2NcIl09TW9kdWxlW1wiYXNtXCJdW1wialwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgc3RhY2tTYXZlPWZ1bmN0aW9uKCl7cmV0dXJuKHN0YWNrU2F2ZT1Nb2R1bGVbXCJhc21cIl1bXCJrXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBzdGFja1Jlc3RvcmU9ZnVuY3Rpb24oKXtyZXR1cm4oc3RhY2tSZXN0b3JlPU1vZHVsZVtcImFzbVwiXVtcImxcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHN0YWNrQWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oc3RhY2tBbGxvYz1Nb2R1bGVbXCJhc21cIl1bXCJtXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfX19jeGFfaXNfcG9pbnRlcl90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuKF9fX2N4YV9pc19wb2ludGVyX3R5cGU9TW9kdWxlW1wiYXNtXCJdW1wiblwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtNb2R1bGVbXCJjY2FsbFwiXT1jY2FsbDtNb2R1bGVbXCJjd3JhcFwiXT1jd3JhcDt2YXIgY2FsbGVkUnVuO2RlcGVuZGVuY2llc0Z1bGZpbGxlZD1mdW5jdGlvbiBydW5DYWxsZXIoKXtpZighY2FsbGVkUnVuKXJ1bigpO2lmKCFjYWxsZWRSdW4pZGVwZW5kZW5jaWVzRnVsZmlsbGVkPXJ1bkNhbGxlcn07ZnVuY3Rpb24gcnVuKCl7aWYocnVuRGVwZW5kZW5jaWVzPjApe3JldHVybn1wcmVSdW4oKTtpZihydW5EZXBlbmRlbmNpZXM+MCl7cmV0dXJufWZ1bmN0aW9uIGRvUnVuKCl7aWYoY2FsbGVkUnVuKXJldHVybjtjYWxsZWRSdW49dHJ1ZTtNb2R1bGVbXCJjYWxsZWRSdW5cIl09dHJ1ZTtpZihBQk9SVClyZXR1cm47aW5pdFJ1bnRpbWUoKTtyZWFkeVByb21pc2VSZXNvbHZlKE1vZHVsZSk7aWYoTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0pTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0oKTtwb3N0UnVuKCl9aWYoTW9kdWxlW1wic2V0U3RhdHVzXCJdKXtNb2R1bGVbXCJzZXRTdGF0dXNcIl0oXCJSdW5uaW5nLi4uXCIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpfSwxKTtkb1J1bigpfSwxKX1lbHNle2RvUnVuKCl9fWlmKE1vZHVsZVtcInByZUluaXRcIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwcmVJbml0XCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicHJlSW5pdFwiXT1bTW9kdWxlW1wicHJlSW5pdFwiXV07d2hpbGUoTW9kdWxlW1wicHJlSW5pdFwiXS5sZW5ndGg+MCl7TW9kdWxlW1wicHJlSW5pdFwiXS5wb3AoKSgpfX1ydW4oKTtcblxuXG4gIHJldHVybiBleHBvcnRDcHBMaWIucmVhZHlcbn1cblxuKTtcbn0pKCk7XG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcExpYjtcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSlcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4cG9ydENwcExpYjsgfSk7XG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG4gIGV4cG9ydHNbXCJleHBvcnRDcHBMaWJcIl0gPSBleHBvcnRDcHBMaWI7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MzU2OiAxXG59O1xuXG4vLyBubyBjaHVuayBpbnN0YWxsIGZ1bmN0aW9uIG5lZWRlZFxuLy8gbm8gY2h1bmsgbG9hZGluZ1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiaW1wb3J0IHsgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20gfSBmcm9tICcuL2NsdXN0ZXJpemVyV2FzbSc7XG5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGRpc3RNYXRBcnJheSwgbiwgbWV0aG9kQ29kZSB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgdHJ5IHtcbiAgICAgICAgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20oZGlzdE1hdEFycmF5LCBuLCBtZXRob2RDb2RlKVxuICAgICAgICAgICAgLnRoZW4oKGNsdXN0ZXJNYXRyaXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEuY2x1c3Rlck1hdHJpeCA9IGNsdXN0ZXJNYXRyaXg7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2x1c3RlcmluZy13b3JrZXIuanMubWFwIiwiaW1wb3J0IHtleHBvcnRDcHBMaWJ9IGZyb20gJy4vd2FzbUNsdXN0ZXIuanMnO1xuXG4vKipcbiBjYWxscyB3YXNtIGZ1bmN0aW9uIHRvIGdldCBjbHVzdGVyaW5nIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIGRpc3RhbmNlIG1hdHJpeFxuIGRpc3RtYXQ6IGRpc3RhbmNlIG1hdHJpeCBhcyBhbiBhcnJheSBvZiBmbG9hdHMgY29tcHJpc2luZyB0aGUgdG9wIHJpZ2h0IHRyaWFuZ2xlIG9mIHRoZSBtYXRyaXhcbiBuOiBudW1iZXIgb2Ygb2JzZXJ2YWJsZXNcbiBtZXRob2Q6IDAgPSBzaW5nbGUgbGlua2FnZSwgMSA9IGNvbXBsZXRlIGxpbmthZ2UsIDIgPSBhdmVyYWdlIGxpbmthZ2UsIDMgPSBtZWRpYW4gbGlua2FnZVxuIHJlc3VsdDogeyBtZXJnZVJlc3VsdDogSW50MzJBcnJheSwgaGVpZ2h0c1Jlc3VsdDogRmxvYXQzMkFycmF5IH1cbiBtZXJnZVJlc3VsdCBoYXMgbGVuZ3RoIG9mIChuLTEpKjIgYW5kIGhlaWdodFJlc3VsdCBoYXMgbGVuZ3RoIG9mIG4tMVxuIHRvZ2V0aGVyIHRoZXkgZGVzY3JpYmUgdGhlIGNsdXN0ZXJpbmcgYXMgYSBkZW5kcm9ncmFtIGFzIGEgbWF0cml4IG9mIChuLTEpIFggM1xuIGVhY2ggcm93IGluIHRoZSBnaXZlbiBtYXRyaXggY29tcHJpc2VzIHRoZSBtZXJnZSBldmVudCBhdCBzdGVwIGkgYW5kIGxhc3QgY29sdW1uIGlzIHRoZSBoZWlnaHQgZnJvbSB0aGUgbGVhdmVzLlxuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbShkaXN0bWF0LCBuLCBtZXRob2QpIHtcbiAgY29uc3Qgd2FzbVVybCA9IG5ldyBVUkwoJy4vd2FzbUNsdXN0ZXIud2FzbScsIGltcG9ydC5tZXRhLnVybCkuaHJlZjtcbiAgY29uc3Qgd2FzbVBhdGggPSB3YXNtVXJsLnN1YnN0cmluZygwLCB3YXNtVXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICd3YXNtQ2x1c3Rlci53YXNtJztcbiAgY29uc3Qgd2FzbUluc3RhbmNlID0gYXdhaXQgZXhwb3J0Q3BwTGliKHtsb2NhdGVGaWxlOiAoKSA9PiB3YXNtUGF0aH0pO1xuICBjb25zdCBnZXREZW5kcm9ncmFtV2FzbSA9XG4gICAgd2FzbUluc3RhbmNlLmN3cmFwKCdnZXREZW5kcm9ncmFtJywgJ251bGwnLCBbJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInXSk7XG4gIC8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBkaXN0YW5jZSBtYXRyaXhcbiAgY29uc3QgYnl0ZXNGb3JEaXN0TWF0ID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogZGlzdG1hdC5sZW5ndGg7XG4gIGNvbnN0IGRhdGFQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckRpc3RNYXQpO1xuICBjb25zdCBtYXRIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHIsIGJ5dGVzRm9yRGlzdE1hdCk7XG4gIG1hdEhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGRpc3RtYXQuYnVmZmVyKSk7XG5cbiAgLy9hbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgbWVyZ2VzIGFycmF5XG4gIGNvbnN0IGJ5dGVzRm9yTWVyZ2VBcnJheSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAobiAtIDEpICogMjtcbiAgY29uc3QgbWVyZ2VQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0Zvck1lcmdlQXJyYXkpO1xuICBjb25zdCBtZXJnZUhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgbWVyZ2VQdHIsIGJ5dGVzRm9yTWVyZ2VBcnJheSk7XG5cbiAgLy9hbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgaGVpZ3QgYXJyYXlcbiAgY29uc3QgYnl0ZXNGb3JIZWlnaHRzQXJyYXkgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAobiAtIDEpO1xuICBjb25zdCBoZWlnaHRzUHRyID0gd2FzbUluc3RhbmNlLl9tYWxsb2MoYnl0ZXNGb3JIZWlnaHRzQXJyYXkpO1xuICBjb25zdCBoZWlnaHRzSGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBoZWlnaHRzUHRyLCBieXRlc0ZvckhlaWdodHNBcnJheSk7XG5cbiAgLy8gY2FsbCB0aGUgd2FzbSBmdW5jdGlvblxuICBnZXREZW5kcm9ncmFtV2FzbShkYXRhUHRyLCBuLCBtZXRob2QsIG1lcmdlUHRyLCBoZWlnaHRzUHRyKTtcbiAgLy8gZ2V0IHRoZSBtZXJnZXMgYW5kIGhlaWdodHMgZnJvbSB0aGUgd2FzbSBoZWFwXG4gIGNvbnN0IG1lcmdlUmVzdWx0ID0gbmV3IEludDMyQXJyYXkobWVyZ2VIZWFwLmJ1ZmZlciwgbWVyZ2VIZWFwLmJ5dGVPZmZzZXQsIChuLTEpICogMik7XG4gIGNvbnN0IGhlaWdodHNSZXN1bHQgPSAobmV3IEZsb2F0MzJBcnJheShoZWlnaHRzSGVhcC5idWZmZXIsIGhlaWdodHNIZWFwLmJ5dGVPZmZzZXQsIG4tMSkpLnNsaWNlKDAsIG4tMSk7XG5cbiAgY29uc3QgbWVyZ2VSb3cxID0gbWVyZ2VSZXN1bHQuc2xpY2UoMCwgbi0xKTtcbiAgY29uc3QgbWVyZ2VSb3cyID0gbWVyZ2VSZXN1bHQuc2xpY2Uobi0xLCAyKm4gLSAyKTtcbiAgLy8gZnJlZSB0aGUgbWVtb3J5IGJsb2NrcyBvbiB0aGUgd2FzbSBoZWFwXG4gIHdhc21JbnN0YW5jZS5fZnJlZShtYXRIZWFwLmJ5dGVPZmZzZXQpO1xuICB3YXNtSW5zdGFuY2UuX2ZyZWUobWVyZ2VIZWFwLmJ5dGVPZmZzZXQpO1xuICB3YXNtSW5zdGFuY2UuX2ZyZWUoaGVpZ2h0c0hlYXAuYnl0ZU9mZnNldCk7XG4gIHJldHVybiB7bWVyZ2VSb3cxLCBtZXJnZVJvdzIsIGhlaWdodHNSZXN1bHR9O1xufVxuIl0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBMaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVBVMzIiLCJBQk9SVCIsInVwZGF0ZU1lbW9yeVZpZXdzIiwiYiIsImJ1ZmZlciIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIl9fQVRQUkVSVU5fXyIsIl9fQVRJTklUX18iLCJfX0FUUE9TVFJVTl9fIiwicnVuRGVwZW5kZW5jaWVzIiwicnVuRGVwZW5kZW5jeVdhdGNoZXIiLCJkZXBlbmRlbmNpZXNGdWxmaWxsZWQiLCJ3aGF0IiwiZSIsIlJ1bnRpbWVFcnJvciIsIndhc21CaW5hcnlGaWxlIiwicGF0aCIsImlzRGF0YVVSSSIsImZpbGVuYW1lIiwic3RhcnRzV2l0aCIsImdldEJpbmFyeSIsImZpbGUiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwiYmluYXJ5RmlsZSIsImltcG9ydHMiLCJyZWNlaXZlciIsImZldGNoIiwidGhlbiIsImNyZWRlbnRpYWxzIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsImFtZE8iLCJkIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwIiwib25tZXNzYWdlIiwiZXZlbnQiLCJkaXN0TWF0QXJyYXkiLCJuIiwibWV0aG9kQ29kZSIsImRhdGEiLCJhc3luYyIsImRpc3RtYXQiLCJtZXRob2QiLCJ3YXNtVXJsIiwiVVJMIiwid2FzbVBhdGgiLCJzdWJzdHJpbmciLCJ3YXNtSW5zdGFuY2UiLCJsb2NhdGVGaWxlIiwiZ2V0RGVuZHJvZ3JhbVdhc20iLCJjd3JhcCIsImJ5dGVzRm9yRGlzdE1hdCIsIkJZVEVTX1BFUl9FTEVNRU5UIiwiZGF0YVB0ciIsIl9tYWxsb2MiLCJtYXRIZWFwIiwiYnl0ZXNGb3JNZXJnZUFycmF5IiwibWVyZ2VQdHIiLCJtZXJnZUhlYXAiLCJieXRlc0ZvckhlaWdodHNBcnJheSIsImhlaWdodHNQdHIiLCJoZWlnaHRzSGVhcCIsIm1lcmdlUmVzdWx0IiwiYnl0ZU9mZnNldCIsImhlaWdodHNSZXN1bHQiLCJzbGljZSIsIm1lcmdlUm93MSIsIm1lcmdlUm93MiIsIl9mcmVlIiwiZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20iLCJjbHVzdGVyTWF0cml4IiwicG9zdE1lc3NhZ2UiLCJlcnJvciJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/796.js ADDED
@@ -0,0 +1,2 @@
1
+ var eda;(()=>{"use strict";var t,n,e={198:(t,n,e)=>{e.d(n,{g:()=>i}),t=e.hmd(t);var r,i=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,i=void 0!==t?t:{};i.ready=new Promise((function(t,r){n=t,e=r}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),r&&(c=r),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&E("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var w=[],v=[],g=[],_=0,A=null,x=null;function E(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var R,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function U(t){try{if(t==R&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){E(t)}}function j(t,n,e){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return U(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return U(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){p("failed to asynchronously prepare wasm: "+t),E(t)}))}function O(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=h[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13>>0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function C(t){var n=l.buffer;try{return l.grow(t-n.byteLength+65535>>>16),b(),1}catch(t){}}function H(t){return i["_"+t]}S(R="wasmDbscan.wasm")||(P=R,R=i.locateFile?i.locateFile(P,c):c+P);var T="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function k(t,n,e,r,i){var o={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=B(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var i=e+r-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(e>=i)break;n[e++]=a}else if(a<=2047){if(e+1>=i)break;n[e++]=192|a>>6,n[e++]=128|63&a}else if(a<=65535){if(e+2>=i)break;n[e++]=224|a>>12,n[e++]=128|a>>6&63,n[e++]=128|63&a}else{if(e+3>=i)break;n[e++]=240|a>>18,n[e++]=128|a>>12&63,n[e++]=128|a>>6&63,n[e++]=128|63&a}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=B(t.length);return n=t,e=r,h.set(n,e),r}},a=H(t),s=[],u=0;if(r)for(var c=0;c<r.length;c++){var f=o[e[c]];f?(0===u&&(u=W()),s[c]=f(r[c])):s[c]=r[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,i=n;t[i]&&!(i>=r);)++i;if(i-n>16&&t.buffer&&T)return T.decode(t.subarray(n,i));for(var o="";n<i;){var a=t[n++];if(128&a){var s=63&t[n++];if(192!=(224&a)){var u=63&t[n++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[n++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(l)}var F,M={__cxa_throw:function(t,n,e){throw new I(t).init(n,e),t},abort:function(){E("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var i=1;i<=4;i*=2){var o=e*(1+.2/i);if(o=Math.min(o,t+100663296),C(Math.min(r,(n=Math.max(t,o))+(65536-n%65536)%65536)))return!0}return!1}},W=(function(){var t,n,r,o,a={env:M,wasi_snapshot_preview1:M};function s(t,n){var e,r=t.exports;return i.asm=r,l=i.asm.memory,b(),i.asm.__indirect_function_table,e=i.asm.__wasm_call_ctors,v.unshift(e),function(t){if(_--,i.monitorRunDependencies&&i.monitorRunDependencies(_),0==_&&(null!==A&&(clearInterval(A),A=null),x)){var n=x;x=null,n()}}(),r}if(_++,i.monitorRunDependencies&&i.monitorRunDependencies(_),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=f,n=R,r=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?j(n,r,o):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),j(n,r,o)}))}))).catch(e)}(),i._dbscan=function(){return(i._dbscan=i.asm.dbscan).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.malloc).apply(null,arguments)},i._free=function(){return(i._free=i.asm.free).apply(null,arguments)},function(){return(W=i.asm.stackSave).apply(null,arguments)}),D=function(){return(D=i.asm.stackRestore).apply(null,arguments)},B=function(){return(B=i.asm.stackAlloc).apply(null,arguments)},L=function(){return(L=i.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){F||(F=!0,i.calledRun=!0,y||(O(v),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),g.unshift(t);var t;O(g)}()))}_>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),w.unshift(t);var t;O(w)}(),_>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=k,i.cwrap=function(t,n,e,r){var i=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&i&&!r?H(t):function(){return k(t,n,e,arguments)}},x=function t(){F||q(),F||(x=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&e.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppDbscanLib=i)},906:(t,n,e)=>{t.exports=e.p+"9a8fbf37666e32487835.wasm"}},r={};function i(t){var n=r[t];if(void 0!==n)return n.exports;var o=r[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,i),o.loaded=!0,o.exports}i.m=e,i.amdO={},i.d=(t,n)=>{for(var e in n)i.o(n,e)&&!i.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),i.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var n=i.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var e=n.getElementsByTagName("script");if(e.length)for(var r=e.length-1;r>-1&&!t;)t=e[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),i.b=self.location+"",t=i(198),n=function(t,n,e,r){return new(e||(e=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,s)}u((r=r.apply(t,n||[])).next())}))},onmessage=e=>{const{embedX:r,embedY:o,epsilon:a,minPts:s}=e.data,u={};n(void 0,void 0,void 0,(function*(){try{const n=yield async function(n,e,r,o){const a=new URL(i(906),i.b).href,s=a.substring(0,a.lastIndexOf("/")+1)+"wasmDbscan.wasm";let u;try{u=await(0,t.g)({locateFile:()=>s})}catch(n){try{u=await(0,t.g)({locateFile:()=>a})}catch(t){throw console.error(t),new Error("Unable to load wasm file for dbscan")}}const c=u.cwrap("dbscan","null",["number","number","number","number","number","number"]),f=Float32Array.BYTES_PER_ELEMENT*n.length,l=u._malloc(f),p=u._malloc(f),h=new Uint8Array(u.HEAPU8.buffer,l,f);h.set(new Uint8Array(n.buffer));const d=new Uint8Array(u.HEAPU8.buffer,p,f);d.set(new Uint8Array(e.buffer));const m=u._malloc(f),y=new Uint8Array(u.HEAPU8.buffer,m,f);c(l,p,n.length,r,o,m);const b=new Int32Array(y.buffer,y.byteOffset,n.length);return u._free(h.byteOffset),u._free(d.byteOffset),u._free(y.byteOffset),b}(r,o,a,s);u.clusters=n,postMessage(u)}catch(t){u.error=t,postMessage(u)}}))},eda={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RSxXQUFZMUIsRUFBT3BLLFFBSXhGLE9BSEErSyxFQUFhZ0IsTUFBTU4sRUFBTUssWUFDekJmLEVBQWFnQixNQUFNTCxFQUFNSSxZQUN6QmYsRUFBYWdCLE1BQU1ILEVBQVlFLFlBQ3hCRCxDQUNYLENWckJtQ0csQ0FBTzVCLEVBQVFDLEVBQVFDLEVBQVNDLEdBQ3ZEQyxFQUFLQyxTQUFXQSxFQUNoQndCLFlBQVl6QixFQUNoQixDQUNBLE1BQU9qTSxHQUNIaU0sRUFBS1MsTUFBUTFNLEVBQ2IwTixZQUFZekIsRUFDaEIsQ0FDSixHQUFLLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS9jbHVzdGVyaW5nLXdvcmtlci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS9jcHAvd2FzbURic2Nhbi5qcyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9hbWQgb3B0aW9ucyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFybW9ueSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2ltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS9kYnNjYW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBkYnNjYW4gfSBmcm9tICcuL2Ric2Nhbic7XG5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMgfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJzID0geWllbGQgZGJzY2FuKGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMpO1xuICAgICAgICAgICAgZGF0YS5jbHVzdGVycyA9IGNsdXN0ZXJzO1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICB9KSkoKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbHVzdGVyaW5nLXdvcmtlci5qcy5tYXAiLCJcclxuZXhwb3J0IHZhciBleHBvcnRDcHBEYnNjYW5MaWIgPSAoKCkgPT4ge1xyXG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgcmV0dXJuIChcclxuZnVuY3Rpb24oZXhwb3J0Q3BwRGJzY2FuTGliID0ge30pICB7XHJcblxyXG4vLyBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBUaGUgTW9kdWxlIG9iamVjdDogT3VyIGludGVyZmFjZSB0byB0aGUgb3V0c2lkZSB3b3JsZC4gV2UgaW1wb3J0XHJcbi8vIGFuZCBleHBvcnQgdmFsdWVzIG9uIGl0LiBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIE1vZHVsZSBjYW4gYmUgdXNlZDpcclxuLy8gMS4gTm90IGRlZmluZWQuIFdlIGNyZWF0ZSBpdCBoZXJlXHJcbi8vIDIuIEEgZnVuY3Rpb24gcGFyYW1ldGVyLCBmdW5jdGlvbihNb2R1bGUpIHsgLi5nZW5lcmF0ZWQgY29kZS4uIH1cclxuLy8gMy4gcHJlLXJ1biBhcHBlbmRlZCBpdCwgdmFyIE1vZHVsZSA9IHt9OyAuLmdlbmVyYXRlZCBjb2RlLi5cclxuLy8gNC4gRXh0ZXJuYWwgc2NyaXB0IHRhZyBkZWZpbmVzIHZhciBNb2R1bGUuXHJcbi8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgTW9kdWxlIGFscmVhZHkgZXhpc3RzIChlLmcuIGNhc2UgMyBhYm92ZSkuXHJcbi8vIFN1YnN0aXR1dGlvbiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYWN0dWFsIGNvZGUgb24gbGF0ZXIgc3RhZ2Ugb2YgdGhlIGJ1aWxkLFxyXG4vLyB0aGlzIHdheSBDbG9zdXJlIENvbXBpbGVyIHdpbGwgbm90IG1hbmdsZSBpdCAoZS5nLiBjYXNlIDQuIGFib3ZlKS5cclxuLy8gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJ1biBjbG9zdXJlLCBhbmQgYWxzbyB0byB1c2UgTW9kdWxlXHJcbi8vIGFmdGVyIHRoZSBnZW5lcmF0ZWQgY29kZSwgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgICB2YXIgTW9kdWxlID0ge307XHJcbi8vIGJlZm9yZSB0aGUgY29kZS4gVGhlbiB0aGF0IG9iamVjdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGNvZGUsIGFuZCB5b3VcclxuLy8gY2FuIGNvbnRpbnVlIHRvIHVzZSBNb2R1bGUgYWZ0ZXJ3YXJkcyBhcyB3ZWxsLlxyXG52YXIgTW9kdWxlID0gdHlwZW9mIGV4cG9ydENwcERic2NhbkxpYiAhPSAndW5kZWZpbmVkJyA/IGV4cG9ydENwcERic2NhbkxpYiA6IHt9O1xyXG5cclxuLy8gU2V0IHVwIHRoZSBwcm9taXNlIHRoYXQgaW5kaWNhdGVzIHRoZSBNb2R1bGUgaXMgaW5pdGlhbGl6ZWRcclxudmFyIHJlYWR5UHJvbWlzZVJlc29sdmUsIHJlYWR5UHJvbWlzZVJlamVjdDtcclxuTW9kdWxlWydyZWFkeSddID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgcmVhZHlQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xyXG59KTtcclxuXHJcbi8vIC0tcHJlLWpzZXMgYXJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIE1vZHVsZSBpbnRlZ3JhdGlvbiBjb2RlLCBzbyB0aGF0IHRoZXkgY2FuXHJcbi8vIHJlZmVyIHRvIE1vZHVsZSAoaWYgdGhleSBjaG9vc2U7IHRoZXkgY2FuIGFsc28gZGVmaW5lIE1vZHVsZSlcclxuXHJcblxyXG4vLyBTb21ldGltZXMgYW4gZXhpc3RpbmcgTW9kdWxlIG9iamVjdCBleGlzdHMgd2l0aCBwcm9wZXJ0aWVzXHJcbi8vIG1lYW50IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBtb2R1bGUgZnVuY3Rpb25hbGl0eS4gSGVyZVxyXG4vLyB3ZSBjb2xsZWN0IHRob3NlIHByb3BlcnRpZXMgYW5kIHJlYXBwbHkgX2FmdGVyXyB3ZSBjb25maWd1cmVcclxuLy8gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBkZWZhdWx0cyB0byBhdm9pZCBoYXZpbmcgdG8gYmUgc29cclxuLy8gZGVmZW5zaXZlIGR1cmluZyBpbml0aWFsaXphdGlvbi5cclxudmFyIG1vZHVsZU92ZXJyaWRlcyA9IE9iamVjdC5hc3NpZ24oe30sIE1vZHVsZSk7XHJcblxyXG52YXIgYXJndW1lbnRzXyA9IFtdO1xyXG52YXIgdGhpc1Byb2dyYW0gPSAnLi90aGlzLnByb2dyYW0nO1xyXG52YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XHJcbiAgdGhyb3cgdG9UaHJvdztcclxufTtcclxuXHJcbi8vIERldGVybWluZSB0aGUgcnVudGltZSBlbnZpcm9ubWVudCB3ZSBhcmUgaW4uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnlcclxuLy8gc2V0dGluZyB0aGUgRU5WSVJPTk1FTlQgc2V0dGluZyBhdCBjb21waWxlIHRpbWUgKHNlZSBzZXR0aW5ncy5qcykuXHJcblxyXG4vLyBBdHRlbXB0IHRvIGF1dG8tZGV0ZWN0IHRoZSBlbnZpcm9ubWVudFxyXG52YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JztcclxudmFyIEVOVklST05NRU5UX0lTX1dPUktFUiA9IHR5cGVvZiBpbXBvcnRTY3JpcHRzID09ICdmdW5jdGlvbic7XHJcbi8vIE4uYi4gRWxlY3Ryb24uanMgZW52aXJvbm1lbnQgaXMgc2ltdWx0YW5lb3VzbHkgYSBOT0RFLWVudmlyb25tZW50LCBidXRcclxuLy8gYWxzbyBhIHdlYiBlbnZpcm9ubWVudC5cclxudmFyIEVOVklST05NRU5UX0lTX05PREUgPSB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlID09ICdzdHJpbmcnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfU0hFTEwgPSAhRU5WSVJPTk1FTlRfSVNfV0VCICYmICFFTlZJUk9OTUVOVF9JU19OT0RFICYmICFFTlZJUk9OTUVOVF9JU19XT1JLRVI7XHJcblxyXG4vLyBgL2Agc2hvdWxkIGJlIHByZXNlbnQgYXQgdGhlIGVuZCBpZiBgc2NyaXB0RGlyZWN0b3J5YCBpcyBub3QgZW1wdHlcclxudmFyIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG5mdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcclxuICBpZiAoTW9kdWxlWydsb2NhdGVGaWxlJ10pIHtcclxuICAgIHJldHVybiBNb2R1bGVbJ2xvY2F0ZUZpbGUnXShwYXRoLCBzY3JpcHREaXJlY3RvcnkpO1xyXG4gIH1cclxuICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcclxufVxyXG5cclxuLy8gSG9va3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnRzLlxyXG52YXIgcmVhZF8sXHJcbiAgICByZWFkQXN5bmMsXHJcbiAgICByZWFkQmluYXJ5LFxyXG4gICAgc2V0V2luZG93VGl0bGU7XHJcblxyXG4vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBOb2RlLmpzIHdvcmtlcnMgd2hlbiByZWxldmFudCAocHRocmVhZHMgaXMgZW5hYmxlZCkuXHJcbi8vIE5vZGUuanMgd29ya2VycyBhcmUgZGV0ZWN0ZWQgYXMgYSBjb21iaW5hdGlvbiBvZiBFTlZJUk9OTUVOVF9JU19XT1JLRVIgYW5kXHJcbi8vIEVOVklST05NRU5UX0lTX05PREUuXHJcbmlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikgeyAvLyBDaGVjayB3b3JrZXIsIG5vdCB3ZWIsIHNpbmNlIHdpbmRvdyBjb3VsZCBiZSBwb2x5ZmlsbGVkXHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzZWxmLmxvY2F0aW9uLmhyZWY7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkgeyAvLyB3ZWJcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xyXG4gIH1cclxuICAvLyBXaGVuIE1PRFVMQVJJWkUsIHRoaXMgSlMgbWF5IGJlIGV4ZWN1dGVkIGxhdGVyLCBhZnRlciBkb2N1bWVudC5jdXJyZW50U2NyaXB0XHJcbiAgLy8gaXMgZ29uZSwgc28gd2Ugc2F2ZWQgaXQsIGFuZCB3ZSB1c2UgaXQgaGVyZSBpbnN0ZWFkIG9mIGFueSBvdGhlciBpbmZvLlxyXG4gIGlmIChfc2NyaXB0RGlyKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBfc2NyaXB0RGlyO1xyXG4gIH1cclxuICAvLyBibG9iIHVybHMgbG9vayBsaWtlIGJsb2I6aHR0cDovL3NpdGUuY29tL2V0Yy9ldGMgYW5kIHdlIGNhbm5vdCBpbmZlciBhbnl0aGluZyBmcm9tIHRoZW0uXHJcbiAgLy8gb3RoZXJ3aXNlLCBzbGljZSBvZmYgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHVybCB0byBmaW5kIHRoZSBzY3JpcHQgZGlyZWN0b3J5LlxyXG4gIC8vIGlmIHNjcmlwdERpcmVjdG9yeSBkb2VzIG5vdCBjb250YWluIGEgc2xhc2gsIGxhc3RJbmRleE9mIHdpbGwgcmV0dXJuIC0xLFxyXG4gIC8vIGFuZCBzY3JpcHREaXJlY3Rvcnkgd2lsbCBjb3JyZWN0bHkgYmUgcmVwbGFjZWQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgLy8gSWYgc2NyaXB0RGlyZWN0b3J5IGNvbnRhaW5zIGEgcXVlcnkgKHN0YXJ0aW5nIHdpdGggPykgb3IgYSBmcmFnbWVudCAoc3RhcnRpbmcgd2l0aCAjKSxcclxuICAvLyB0aGV5IGFyZSByZW1vdmVkIGJlY2F1c2UgdGhleSBjb3VsZCBjb250YWluIGEgc2xhc2guXHJcbiAgaWYgKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKCdibG9iOicpICE9PSAwKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKDAsIHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZignLycpKzEpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSAnJztcclxuICB9XHJcblxyXG4gIC8vIERpZmZlcmVudGlhdGUgdGhlIFdlYiBXb3JrZXIgZnJvbSB0aGUgTm9kZSBXb3JrZXIgY2FzZSwgYXMgcmVhZGluZyBtdXN0XHJcbiAgLy8gYmUgZG9uZSBkaWZmZXJlbnRseS5cclxuICB7XHJcbi8vIGluY2x1ZGU6IHdlYl9vcl93b3JrZXJfc2hlbGxfcmVhZC5qc1xyXG5yZWFkXyA9ICh1cmwpID0+IHtcclxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICB9XHJcblxyXG4gIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoLyoqIEB0eXBleyFBcnJheUJ1ZmZlcn0gKi8oeGhyLnJlc3BvbnNlKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkgeyAvLyBmaWxlIFVSTHMgY2FuIHJldHVybiAwXHJcbiAgICAgICAgb25sb2FkKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIG9uZXJyb3IoKTtcclxuICAgIH07XHJcbiAgICB4aHIub25lcnJvciA9IG9uZXJyb3I7XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxuICB9XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbiAgfVxyXG5cclxuICBzZXRXaW5kb3dUaXRsZSA9ICh0aXRsZSkgPT4gZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcclxufSBlbHNlXHJcbntcclxufVxyXG5cclxudmFyIG91dCA9IE1vZHVsZVsncHJpbnQnXSB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xyXG52YXIgZXJyID0gTW9kdWxlWydwcmludEVyciddIHx8IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xyXG5cclxuLy8gTWVyZ2UgYmFjayBpbiB0aGUgb3ZlcnJpZGVzXHJcbk9iamVjdC5hc3NpZ24oTW9kdWxlLCBtb2R1bGVPdmVycmlkZXMpO1xyXG4vLyBGcmVlIHRoZSBvYmplY3QgaGllcmFyY2h5IGNvbnRhaW5lZCBpbiB0aGUgb3ZlcnJpZGVzLCB0aGlzIGxldHMgdGhlIEdDXHJcbi8vIHJlY2xhaW0gZGF0YSB1c2VkIGUuZy4gaW4gbWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LCB3aGljaCBpcyBhIGxhcmdlIHR5cGVkIGFycmF5LlxyXG5tb2R1bGVPdmVycmlkZXMgPSBudWxsO1xyXG5cclxuLy8gRW1pdCBjb2RlIHRvIGhhbmRsZSBleHBlY3RlZCB2YWx1ZXMgb24gdGhlIE1vZHVsZSBvYmplY3QuIFRoaXMgYXBwbGllcyBNb2R1bGUueFxyXG4vLyB0byB0aGUgcHJvcGVyIGxvY2FsIHguIFRoaXMgaGFzIHR3byBiZW5lZml0czogZmlyc3QsIHdlIG9ubHkgZW1pdCBpdCBpZiBpdCBpc1xyXG4vLyBleHBlY3RlZCB0byBhcnJpdmUsIGFuZCBzZWNvbmQsIGJ5IHVzaW5nIGEgbG9jYWwgZXZlcnl3aGVyZSBlbHNlIHRoYXQgY2FuIGJlXHJcbi8vIG1pbmlmaWVkLlxyXG5cclxuaWYgKE1vZHVsZVsnYXJndW1lbnRzJ10pIGFyZ3VtZW50c18gPSBNb2R1bGVbJ2FyZ3VtZW50cyddO1xyXG5cclxuaWYgKE1vZHVsZVsndGhpc1Byb2dyYW0nXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbJ3RoaXNQcm9ncmFtJ107XHJcblxyXG5pZiAoTW9kdWxlWydxdWl0J10pIHF1aXRfID0gTW9kdWxlWydxdWl0J107XHJcblxyXG4vLyBwZXJmb3JtIGFzc2VydGlvbnMgaW4gc2hlbGwuanMgYWZ0ZXIgd2Ugc2V0IHVwIG91dCgpIGFuZCBlcnIoKSwgYXMgb3RoZXJ3aXNlIGlmIGFuIGFzc2VydGlvbiBmYWlscyBpdCBjYW5ub3QgcHJpbnQgdGhlIG1lc3NhZ2VcclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogc2hlbGwuanNcclxuLy8gaW5jbHVkZTogcHJlYW1ibGUuanNcclxuLy8gPT09IFByZWFtYmxlIGxpYnJhcnkgc3R1ZmYgPT09XHJcblxyXG4vLyBEb2N1bWVudGF0aW9uIGZvciB0aGUgcHVibGljIEFQSXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbXVzdCBiZSB1cGRhdGVkIGluOlxyXG4vLyAgICBzaXRlL3NvdXJjZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMucnN0XHJcbi8vIEEgcHJlYnVpbHQgbG9jYWwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQ6XHJcbi8vICAgIHNpdGUvYnVpbGQvdGV4dC9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMudHh0XHJcbi8vIFlvdSBjYW4gYWxzbyBidWlsZCBkb2NzIGxvY2FsbHkgYXMgSFRNTCBvciBvdGhlciBmb3JtYXRzIGluIHNpdGUvXHJcbi8vIEFuIG9ubGluZSBIVE1MIHZlcnNpb24gKHdoaWNoIG1heSBiZSBvZiBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEVtc2NyaXB0ZW4pXHJcbi8vICAgIGlzIHVwIGF0IGh0dHA6Ly9rcmlwa2VuLmdpdGh1Yi5pby9lbXNjcmlwdGVuLXNpdGUvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLmh0bWxcclxuXHJcbnZhciB3YXNtQmluYXJ5O1xyXG5pZiAoTW9kdWxlWyd3YXNtQmluYXJ5J10pIHdhc21CaW5hcnkgPSBNb2R1bGVbJ3dhc21CaW5hcnknXTtcclxudmFyIG5vRXhpdFJ1bnRpbWUgPSBNb2R1bGVbJ25vRXhpdFJ1bnRpbWUnXSB8fCB0cnVlO1xyXG5cclxuaWYgKHR5cGVvZiBXZWJBc3NlbWJseSAhPSAnb2JqZWN0Jykge1xyXG4gIGFib3J0KCdubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkJyk7XHJcbn1cclxuXHJcbi8vIFdhc20gZ2xvYmFsc1xyXG5cclxudmFyIHdhc21NZW1vcnk7XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gUnVudGltZSBlc3NlbnRpYWxzXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy8gd2hldGhlciB3ZSBhcmUgcXVpdHRpbmcgdGhlIGFwcGxpY2F0aW9uLiBubyBjb2RlIHNob3VsZCBydW4gYWZ0ZXIgdGhpcy5cclxuLy8gc2V0IGluIGV4aXQoKSBhbmQgYWJvcnQoKVxyXG52YXIgQUJPUlQgPSBmYWxzZTtcclxuXHJcbi8vIHNldCBieSBleGl0KCkgYW5kIGFib3J0KCkuICBQYXNzZWQgdG8gJ29uRXhpdCcgaGFuZGxlci5cclxuLy8gTk9URTogVGhpcyBpcyBhbHNvIHVzZWQgYXMgdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUgY29kZSBpbiBzaGVsbCBlbnZpcm9ubWVudHNcclxuLy8gYnV0IG9ubHkgd2hlbiBub0V4aXRSdW50aW1lIGlzIGZhbHNlLlxyXG52YXIgRVhJVFNUQVRVUztcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oKiwgc3RyaW5nPSl9ICovXHJcbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHRleHQpIHtcclxuICBpZiAoIWNvbmRpdGlvbikge1xyXG4gICAgLy8gVGhpcyBidWlsZCB3YXMgY3JlYXRlZCB3aXRob3V0IEFTU0VSVElPTlMgZGVmaW5lZC4gIGBhc3NlcnQoKWAgc2hvdWxkIG5vdFxyXG4gICAgLy8gZXZlciBiZSBjYWxsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uIGJ1dCBpbiBjYXNlIHRoZXJlIGFyZSBjYWxsZXJzIGluXHJcbiAgICAvLyB0aGUgd2lsZCBsZWF2ZSB0aGlzIHNpbXBsZSBhYm9ydCgpIGltcGxlbWVuYXRpb24gaGVyZSBmb3Igbm93LlxyXG4gICAgYWJvcnQodGV4dCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBNZW1vcnkgbWFuYWdlbWVudFxyXG5cclxudmFyIEhFQVAsXHJcbi8qKiBAdHlwZSB7IUludDhBcnJheX0gKi9cclxuICBIRUFQOCxcclxuLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi9cclxuICBIRUFQVTgsXHJcbi8qKiBAdHlwZSB7IUludDE2QXJyYXl9ICovXHJcbiAgSEVBUDE2LFxyXG4vKiogQHR5cGUgeyFVaW50MTZBcnJheX0gKi9cclxuICBIRUFQVTE2LFxyXG4vKiogQHR5cGUgeyFJbnQzMkFycmF5fSAqL1xyXG4gIEhFQVAzMixcclxuLyoqIEB0eXBlIHshVWludDMyQXJyYXl9ICovXHJcbiAgSEVBUFUzMixcclxuLyoqIEB0eXBlIHshRmxvYXQzMkFycmF5fSAqL1xyXG4gIEhFQVBGMzIsXHJcbi8qKiBAdHlwZSB7IUZsb2F0NjRBcnJheX0gKi9cclxuICBIRUFQRjY0O1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKSB7XHJcbiAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICBNb2R1bGVbJ0hFQVA4J10gPSBIRUFQOCA9IG5ldyBJbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMTYnXSA9IEhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUDMyJ10gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVOCddID0gSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTE2J10gPSBIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFUzMiddID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBGMzInXSA9IEhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEY2NCddID0gSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYik7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBJbiByZWd1bGFyIG5vbi1SRUxPQ0FUQUJMRSBtb2RlIHRoZSB0YWJsZSBpcyBleHBvcnRlZFxyXG4vLyBmcm9tIHRoZSB3YXNtIG1vZHVsZSBhbmQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkIG9uY2VcclxuLy8gdGhlIGV4cG9ydHMgYXJlIGF2YWlsYWJsZS5cclxudmFyIHdhc21UYWJsZTtcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2luaXRfdGFibGUuanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2Fzc2VydGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG52YXIgX19BVFBSRVJVTl9fICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGJlZm9yZSB0aGUgcnVudGltZSBpcyBpbml0aWFsaXplZFxyXG52YXIgX19BVElOSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzdGFydHVwXHJcbnZhciBfX0FURVhJVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHNodXRkb3duXHJcbnZhciBfX0FUUE9TVFJVTl9fID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYWZ0ZXIgdGhlIG1haW4oKSBpcyBjYWxsZWRcclxuXHJcbnZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbnZhciBydW50aW1lS2VlcGFsaXZlQ291bnRlciA9IDA7XHJcblxyXG5mdW5jdGlvbiBrZWVwUnVudGltZUFsaXZlKCkge1xyXG4gIHJldHVybiBub0V4aXRSdW50aW1lIHx8IHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJlUnVuKCkge1xyXG4gIGlmIChNb2R1bGVbJ3ByZVJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncHJlUnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVSdW4nXSA9IFtNb2R1bGVbJ3ByZVJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3ByZVJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblByZVJ1bihNb2R1bGVbJ3ByZVJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0UnVudGltZSgpIHtcclxuICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICBcclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUSU5JVF9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcG9zdFJ1bigpIHtcclxuXHJcbiAgaWYgKE1vZHVsZVsncG9zdFJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncG9zdFJ1biddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncG9zdFJ1biddID0gW01vZHVsZVsncG9zdFJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3Bvc3RSdW4nXS5sZW5ndGgpIHtcclxuICAgICAgYWRkT25Qb3N0UnVuKE1vZHVsZVsncG9zdFJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XHJcbiAgX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkluaXQoY2IpIHtcclxuICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkV4aXQoY2IpIHtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XHJcbiAgX19BVFBPU1RSVU5fXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9tYXRoLmpzXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvaW11bFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9mcm91bmRcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvdHJ1bmNcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gQSBjb3VudGVyIG9mIGRlcGVuZGVuY2llcyBmb3IgY2FsbGluZyBydW4oKS4gSWYgd2UgbmVlZCB0b1xyXG4vLyBkbyBhc3luY2hyb25vdXMgd29yayBiZWZvcmUgcnVubmluZywgaW5jcmVtZW50IHRoaXMgYW5kXHJcbi8vIGRlY3JlbWVudCBpdC4gSW5jcmVtZW50aW5nIG11c3QgaGFwcGVuIGluIGEgcGxhY2UgbGlrZVxyXG4vLyBNb2R1bGUucHJlUnVuICh1c2VkIGJ5IGVtY2MgdG8gYWRkIGZpbGUgcHJlbG9hZGluZykuXHJcbi8vIE5vdGUgdGhhdCB5b3UgY2FuIGFkZCBkZXBlbmRlbmNpZXMgaW4gcHJlUnVuLCBldmVuIHRob3VnaFxyXG4vLyBpdCBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBydW4gLSBydW4gd2lsbCBiZSBwb3N0cG9uZWQgdW50aWxcclxuLy8gdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxyXG52YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcclxudmFyIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxudmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7IC8vIG92ZXJyaWRkZW4gdG8gdGFrZSBkaWZmZXJlbnQgYWN0aW9ucyB3aGVuIGFsbCBydW4gZGVwZW5kZW5jaWVzIGFyZSBmdWxmaWxsZWRcclxuXHJcbmZ1bmN0aW9uIGdldFVuaXF1ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMrKztcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMtLTtcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA9PSAwKSB7XHJcbiAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7XHJcbiAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChkZXBlbmRlbmNpZXNGdWxmaWxsZWQpIHtcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZGVwZW5kZW5jaWVzRnVsZmlsbGVkO1xyXG4gICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xyXG4gICAgICBjYWxsYmFjaygpOyAvLyBjYW4gYWRkIGFub3RoZXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiogQHBhcmFtIHtzdHJpbmd8bnVtYmVyPX0gd2hhdCAqL1xyXG5mdW5jdGlvbiBhYm9ydCh3aGF0KSB7XHJcbiAgaWYgKE1vZHVsZVsnb25BYm9ydCddKSB7XHJcbiAgICBNb2R1bGVbJ29uQWJvcnQnXSh3aGF0KTtcclxuICB9XHJcblxyXG4gIHdoYXQgPSAnQWJvcnRlZCgnICsgd2hhdCArICcpJztcclxuICAvLyBUT0RPKHNiYyk6IFNob3VsZCB3ZSByZW1vdmUgcHJpbnRpbmcgYW5kIGxlYXZlIGl0IHVwIHRvIHdob2V2ZXJcclxuICAvLyBjYXRjaGVzIHRoZSBleGNlcHRpb24/XHJcbiAgZXJyKHdoYXQpO1xyXG5cclxuICBBQk9SVCA9IHRydWU7XHJcbiAgRVhJVFNUQVRVUyA9IDE7XHJcblxyXG4gIHdoYXQgKz0gJy4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4nO1xyXG5cclxuICAvLyBVc2UgYSB3YXNtIHJ1bnRpbWUgZXJyb3IsIGJlY2F1c2UgYSBKUyBlcnJvciBtaWdodCBiZSBzZWVuIGFzIGEgZm9yZWlnblxyXG4gIC8vIGV4Y2VwdGlvbiwgd2hpY2ggbWVhbnMgd2UnZCBydW4gZGVzdHJ1Y3RvcnMgb24gaXQuIFdlIG5lZWQgdGhlIGVycm9yIHRvXHJcbiAgLy8gc2ltcGx5IG1ha2UgdGhlIHByb2dyYW0gc3RvcC5cclxuICAvLyBGSVhNRSBUaGlzIGFwcHJvYWNoIGRvZXMgbm90IHdvcmsgaW4gV2FzbSBFSCBiZWNhdXNlIGl0IGN1cnJlbnRseSBkb2VzIG5vdCBhc3N1bWVcclxuICAvLyBhbGwgUnVudGltZUVycm9ycyBhcmUgZnJvbSB0cmFwczsgaXQgZGVjaWRlcyB3aGV0aGVyIGEgUnVudGltZUVycm9yIGlzIGZyb21cclxuICAvLyBhIHRyYXAgb3Igbm90IGJhc2VkIG9uIGEgaGlkZGVuIGZpZWxkIHdpdGhpbiB0aGUgb2JqZWN0LiBTbyBhdCB0aGUgbW9tZW50XHJcbiAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiB0aHJvd2luZyBhIHdhc20gdHJhcCBmcm9tIEpTLiBUT0RPIE1ha2UgYSBKUyBBUEkgdGhhdFxyXG4gIC8vIGFsbG93cyB0aGlzIGluIHRoZSB3YXNtIHNwZWMuXHJcblxyXG4gIC8vIFN1cHByZXNzIGNsb3N1cmUgY29tcGlsZXIgd2FybmluZyBoZXJlLiBDbG9zdXJlIGNvbXBpbGVyJ3MgYnVpbHRpbiBleHRlcm5cclxuICAvLyBkZWZpbnRpb24gZm9yIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciBjbGFpbXMgaXQgdGFrZXMgbm8gYXJndW1lbnRzIGV2ZW5cclxuICAvLyB0aG91Z2ggaXQgY2FuLlxyXG4gIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgZ2V0cyBmaXhlZC5cclxuICAvKiogQHN1cHByZXNzIHtjaGVja1R5cGVzfSAqL1xyXG4gIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtcclxuXHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gIC8vIFRocm93IHRoZSBlcnJvciB3aGV0aGVyIG9yIG5vdCBNT0RVTEFSSVpFIGlzIHNldCBiZWNhdXNlIGFib3J0IGlzIHVzZWRcclxuICAvLyBpbiBjb2RlIHBhdGhzIGFwYXJ0IGZyb20gaW5zdGFudGlhdGlvbiB3aGVyZSBhbiBleGNlcHRpb24gaXMgZXhwZWN0ZWRcclxuICAvLyB0byBiZSB0aHJvd24gd2hlbiBhYm9ydCBpcyBjYWxsZWQuXHJcbiAgdGhyb3cgZTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gZW5kIGluY2x1ZGU6IG1lbW9yeXByb2ZpbGVyLmpzXHJcbi8vIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG52YXIgZGF0YVVSSVByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuXHJcbi8vIEluZGljYXRlcyB3aGV0aGVyIGZpbGVuYW1lIGlzIGEgYmFzZTY0IGRhdGEgVVJJLlxyXG5mdW5jdGlvbiBpc0RhdGFVUkkoZmlsZW5hbWUpIHtcclxuICAvLyBQcmVmaXggb2YgZGF0YSBVUklzIGVtaXR0ZWQgYnkgU0lOR0xFX0ZJTEUgYW5kIHJlbGF0ZWQgb3B0aW9ucy5cclxuICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KTtcclxufVxyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgZGVsaXZlcmVkIHZpYSBmaWxlIHByb3RvY29sIChhcyBvcHBvc2VkIHRvIGh0dHAvaHR0cHMpXHJcbmZ1bmN0aW9uIGlzRmlsZVVSSShmaWxlbmFtZSkge1xyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKCdmaWxlOi8vJyk7XHJcbn1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBVUklVdGlscy5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2V4Y2VwdGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG52YXIgd2FzbUJpbmFyeUZpbGU7XHJcbiAgd2FzbUJpbmFyeUZpbGUgPSAnd2FzbURic2Nhbi53YXNtJztcclxuICBpZiAoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpIHtcclxuICAgIHdhc21CaW5hcnlGaWxlID0gbG9jYXRlRmlsZSh3YXNtQmluYXJ5RmlsZSk7XHJcbiAgfVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcclxuICB0cnkge1xyXG4gICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVhZEJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcclxuICAgIH1cclxuICAgIHRocm93IFwiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjtcclxuICB9XHJcbiAgY2F0Y2ggKGVycikge1xyXG4gICAgYWJvcnQoZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkge1xyXG4gIC8vIElmIHdlIGRvbid0IGhhdmUgdGhlIGJpbmFyeSB5ZXQsIHRyeSB0byBsb2FkIGl0IGFzeW5jaHJvbm91c2x5LlxyXG4gIC8vIEZldGNoIGhhcyBzb21lIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG92ZXIgWEhSLCBsaWtlIGl0IGNhbid0IGJlIHVzZWQgb24gYSBmaWxlOi8vIHVybC5cclxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9wdWxsLzkyI2lzc3VlY29tbWVudC0xNDA2NjU5MzJcclxuICAvLyBDb3Jkb3ZhIG9yIEVsZWN0cm9uIGFwcHMgYXJlIHR5cGljYWxseSBsb2FkZWQgZnJvbSBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNvIHVzZSBmZXRjaCBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHRoZSB1cmwgaXMgbm90IGEgZmlsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBYSFIuXHJcbiAgaWYgKCF3YXNtQmluYXJ5ICYmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSkge1xyXG4gICAgaWYgKHR5cGVvZiBmZXRjaCA9PSAnZnVuY3Rpb24nXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2VbJ29rJ10pIHtcclxuICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNwb25zZVsnYXJyYXlCdWZmZXInXSgpO1xyXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE90aGVyd2lzZSwgZ2V0QmluYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGdldCBpdCBzeW5jaHJvbm91c2x5XHJcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7IHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7IH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XHJcbiAgcmV0dXJuIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkudGhlbihmdW5jdGlvbihiaW5hcnkpIHtcclxuICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW5hcnksIGltcG9ydHMpO1xyXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfSkudGhlbihyZWNlaXZlciwgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICBlcnIoJ2ZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICcgKyByZWFzb24pO1xyXG5cclxuICAgIGFib3J0KHJlYXNvbik7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xyXG4gIGlmICghYmluYXJ5ICYmXHJcbiAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICFpc0RhdGFVUkkoYmluYXJ5RmlsZSkgJiZcclxuICAgICAgdHlwZW9mIGZldGNoID09ICdmdW5jdGlvbicpIHtcclxuICAgIHJldHVybiBmZXRjaChiaW5hcnlGaWxlLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgLy8gU3VwcHJlc3MgY2xvc3VyZSB3YXJuaW5nIGhlcmUgc2luY2UgdGhlIHVwc3RyZWFtIGRlZmluaXRpb24gZm9yXHJcbiAgICAgIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nIG9ubHkgYWxsb3dzIFByb21pc2U8UmVwc3BvbnNlPiByYXRoZXIgdGhhblxyXG4gICAgICAvLyBhbiBhY3R1YWwgUmVzcG9uc2UuXHJcbiAgICAgIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgaXMgZml4ZWQuXHJcbiAgICAgIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgICAgIHZhciByZXN1bHQgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSwgaW1wb3J0cyk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRoZW4oXHJcbiAgICAgICAgY2FsbGJhY2ssXHJcbiAgICAgICAgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgY2F1c2UgdG8gYmUgYSBiYWQgTUlNRSB0eXBlIGZvciB0aGUgYmluYXJ5LFxyXG4gICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiBzaG91bGQgd29yay5cclxuICAgICAgICAgIGVycignd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICcgKyByZWFzb24pO1xyXG4gICAgICAgICAgZXJyKCdmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbicpO1xyXG4gICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIENyZWF0ZSB0aGUgd2FzbSBpbnN0YW5jZS5cclxuLy8gUmVjZWl2ZXMgdGhlIHdhc20gaW1wb3J0cywgcmV0dXJucyB0aGUgZXhwb3J0cy5cclxuZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcclxuICAvLyBwcmVwYXJlIGltcG9ydHNcclxuICB2YXIgaW5mbyA9IHtcclxuICAgICdlbnYnOiB3YXNtSW1wb3J0cyxcclxuICAgICd3YXNpX3NuYXBzaG90X3ByZXZpZXcxJzogd2FzbUltcG9ydHMsXHJcbiAgfTtcclxuICAvLyBMb2FkIHRoZSB3YXNtIG1vZHVsZSBhbmQgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHVzaW5nIG5hdGl2ZSBzdXBwb3J0IGluIHRoZSBKUyBlbmdpbmUuXHJcbiAgLy8gaGFuZGxlIGEgZ2VuZXJhdGVkIHdhc20gaW5zdGFuY2UsIHJlY2VpdmluZyBpdHMgZXhwb3J0cyBhbmRcclxuICAvLyBwZXJmb3JtaW5nIG90aGVyIG5lY2Vzc2FyeSBzZXR1cFxyXG4gIC8qKiBAcGFyYW0ge1dlYkFzc2VtYmx5Lk1vZHVsZT19IG1vZHVsZSovXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcclxuICAgIHZhciBleHBvcnRzID0gaW5zdGFuY2UuZXhwb3J0cztcclxuXHJcbiAgICBNb2R1bGVbJ2FzbSddID0gZXhwb3J0cztcclxuXHJcbiAgICB3YXNtTWVtb3J5ID0gTW9kdWxlWydhc20nXVsnbWVtb3J5J107XHJcbiAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xyXG5cclxuICAgIHdhc21UYWJsZSA9IE1vZHVsZVsnYXNtJ11bJ19faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUnXTtcclxuXHJcbiAgICBhZGRPbkluaXQoTW9kdWxlWydhc20nXVsnX193YXNtX2NhbGxfY3RvcnMnXSk7XHJcblxyXG4gICAgcmVtb3ZlUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAgIHJldHVybiBleHBvcnRzO1xyXG4gIH1cclxuICAvLyB3YWl0IGZvciB0aGUgcHRocmVhZCBwb29sIChpZiBhbnkpXHJcbiAgYWRkUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAvLyBQcmVmZXIgc3RyZWFtaW5nIGluc3RhbnRpYXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xyXG4gICAgLy8gJ3Jlc3VsdCcgaXMgYSBSZXN1bHRPYmplY3Qgb2JqZWN0IHdoaWNoIGhhcyBib3RoIHRoZSBtb2R1bGUgYW5kIGluc3RhbmNlLlxyXG4gICAgLy8gcmVjZWl2ZUluc3RhbmNlKCkgd2lsbCBzd2FwIGluIHRoZSBleHBvcnRzICh0byBNb2R1bGUuYXNtKSBzbyB0aGV5IGNhbiBiZSBjYWxsZWRcclxuICAgIC8vIFRPRE86IER1ZSB0byBDbG9zdXJlIHJlZ3Jlc3Npb24gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2lzc3Vlcy8zMTkzLCB0aGUgYWJvdmUgbGluZSBubyBsb25nZXIgb3B0aW1pemVzIG91dCBkb3duIHRvIHRoZSBmb2xsb3dpbmcgbGluZS5cclxuICAgIC8vIFdoZW4gdGhlIHJlZ3Jlc3Npb24gaXMgZml4ZWQsIGNhbiByZXN0b3JlIHRoZSBhYm92ZSBQVEhSRUFEUy1lbmFibGVkIHBhdGguXHJcbiAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0WydpbnN0YW5jZSddKTtcclxuICB9XHJcblxyXG4gIC8vIFVzZXIgc2hlbGwgcGFnZXMgY2FuIHdyaXRlIHRoZWlyIG93biBNb2R1bGUuaW5zdGFudGlhdGVXYXNtID0gZnVuY3Rpb24oaW1wb3J0cywgc3VjY2Vzc0NhbGxiYWNrKSBjYWxsYmFja1xyXG4gIC8vIHRvIG1hbnVhbGx5IGluc3RhbnRpYXRlIHRoZSBXYXNtIG1vZHVsZSB0aGVtc2VsdmVzLiBUaGlzIGFsbG93cyBwYWdlcyB0b1xyXG4gIC8vIHJ1biB0aGUgaW5zdGFudGlhdGlvbiBwYXJhbGxlbCB0byBhbnkgb3RoZXIgYXN5bmMgc3RhcnR1cCBhY3Rpb25zIHRoZXkgYXJlXHJcbiAgLy8gcGVyZm9ybWluZy5cclxuICAvLyBBbHNvIHB0aHJlYWRzIGFuZCB3YXNtIHdvcmtlcnMgaW5pdGlhbGl6ZSB0aGUgd2FzbSBpbnN0YW5jZSB0aHJvdWdoIHRoaXNcclxuICAvLyBwYXRoLlxyXG4gIGlmIChNb2R1bGVbJ2luc3RhbnRpYXRlV2FzbSddKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcclxuICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICBlcnIoJ01vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICcgKyBlKTtcclxuICAgICAgICAvLyBJZiBpbnN0YW50aWF0aW9uIGZhaWxzLCByZWplY3QgdGhlIG1vZHVsZSByZWFkeSBwcm9taXNlLlxyXG4gICAgICAgIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgaW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LCB3YXNtQmluYXJ5RmlsZSwgaW5mbywgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpLmNhdGNoKHJlYWR5UHJvbWlzZVJlamVjdCk7XHJcbiAgcmV0dXJuIHt9OyAvLyBubyBleHBvcnRzIHlldDsgd2UnbGwgZmlsbCB0aGVtIGluIGxhdGVyXHJcbn1cclxuXHJcbi8vIEdsb2JhbHMgdXNlZCBieSBKUyBpNjQgY29udmVyc2lvbnMgKHNlZSBtYWtlU2V0VmFsdWUpXHJcbnZhciB0ZW1wRG91YmxlO1xyXG52YXIgdGVtcEk2NDtcclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gPT09IEJvZHkgPT09XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHByZWFtYmxlLmpzXHJcblxyXG4gIC8qKiBAY29uc3RydWN0b3IgKi9cclxuICBmdW5jdGlvbiBFeGl0U3RhdHVzKHN0YXR1cykge1xyXG4gICAgICB0aGlzLm5hbWUgPSAnRXhpdFN0YXR1cyc7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCcgKyBzdGF0dXMgKyAnKSc7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcclxuICAgICAgd2hpbGUgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gUGFzcyB0aGUgbW9kdWxlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gZ2V0VmFsdWUocHRyLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTgnOiByZXR1cm4gSEVBUDhbKChwdHIpPj4wKV07XHJcbiAgICAgIGNhc2UgJ2kxNic6IHJldHVybiBIRUFQMTZbKChwdHIpPj4xKV07XHJcbiAgICAgIGNhc2UgJ2kzMic6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2k2NCc6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogcmV0dXJuIEhFQVBGMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IHJldHVybiBIRUFQRjY0WygocHRyKT4+MyldO1xyXG4gICAgICBjYXNlICcqJzogcmV0dXJuIEhFQVBVMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIGdldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gc2V0VmFsdWUocHRyLCB2YWx1ZSwgdHlwZSA9ICdpOCcpIHtcclxuICAgIGlmICh0eXBlLmVuZHNXaXRoKCcqJykpIHR5cGUgPSAnKic7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaTEnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTgnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTE2JzogSEVBUDE2WygocHRyKT4+MSldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMzInOiBIRUFQMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2k2NCc6ICh0ZW1wSTY0ID0gW3ZhbHVlPj4+MCwodGVtcERvdWJsZT12YWx1ZSwoKyhNYXRoLmFicyh0ZW1wRG91YmxlKSkpID49IDEuMCA/ICh0ZW1wRG91YmxlID4gMC4wID8gKChNYXRoLm1pbigoKyhNYXRoLmZsb29yKCh0ZW1wRG91YmxlKS80Mjk0OTY3Mjk2LjApKSksIDQyOTQ5NjcyOTUuMCkpfDApPj4+MCA6ICh+figoKyhNYXRoLmNlaWwoKHRlbXBEb3VibGUgLSArKCgofn4odGVtcERvdWJsZSkpKT4+PjApKS80Mjk0OTY3Mjk2LjApKSkpKT4+PjApIDogMCldLEhFQVAzMlsoKHB0cik+PjIpXSA9IHRlbXBJNjRbMF0sSEVBUDMyWygoKHB0cikrKDQpKT4+MildID0gdGVtcEk2NFsxXSk7IGJyZWFrO1xyXG4gICAgICBjYXNlICdmbG9hdCc6IEhFQVBGMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IEhFQVBGNjRbKChwdHIpPj4zKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJyonOiBIRUFQVTMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBzZXRWYWx1ZTogJyArIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4Y2VwdGlvbkluZm8oZXhjUHRyKSB7XHJcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xyXG4gICAgICB0aGlzLnB0ciA9IGV4Y1B0ciAtIDI0O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF90eXBlID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg0KSk+PjIpXSA9IHR5cGU7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24oZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg4KSk+PjIpXSA9IGRlc3RydWN0b3I7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9jYXVnaHQgPSBmdW5jdGlvbiAoY2F1Z2h0KSB7XHJcbiAgICAgICAgY2F1Z2h0ID0gY2F1Z2h0ID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gPSBjYXVnaHQ7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAocmV0aHJvd24pIHtcclxuICAgICAgICByZXRocm93biA9IHJldGhyb3duID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gPSByZXRocm93bjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVA4WygoKHRoaXMucHRyKSsoMTMpKT4+MCldICE9IDA7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgbmF0aXZlIHN0cnVjdHVyZSBmaWVsZHMuIFNob3VsZCBiZSBjYWxsZWQgb25jZSBhZnRlciBhbGxvY2F0ZWQuXHJcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKHR5cGUsIGRlc3RydWN0b3IpIHtcclxuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XHJcbiAgICAgICAgdGhpcy5zZXRfdHlwZSh0eXBlKTtcclxuICAgICAgICB0aGlzLnNldF9kZXN0cnVjdG9yKGRlc3RydWN0b3IpO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKGFkanVzdGVkUHRyKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXSA9IGFkanVzdGVkUHRyO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gR2V0IHBvaW50ZXIgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgYnkgY2F0Y2ggY2xhdXNlIGluIEMrKyBjb2RlLiBJdCBtYXkgYmUgYWRqdXN0ZWRcclxuICAgICAgLy8gd2hlbiB0aGUgcG9pbnRlciBpcyBjYXN0ZWQgdG8gc29tZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdCBiYXNlIGNsYXNzZXMgKGUuZy4gd2hlbiB2aXJ0dWFsXHJcbiAgICAgIC8vIGluaGVyaXRhbmNlIGlzIHVzZWQpLiBXaGVuIGEgcG9pbnRlciBpcyB0aHJvd24gdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgdGhyb3duIHBvaW50ZXJcclxuICAgICAgLy8gaXRzZWxmLlxyXG4gICAgICB0aGlzLmdldF9leGNlcHRpb25fcHRyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gV29yayBhcm91bmQgYSBmYXN0Y29tcCBidWcsIHRoaXMgY29kZSBpcyBzdGlsbCBpbmNsdWRlZCBmb3Igc29tZSByZWFzb24gaW4gYSBidWlsZCB3aXRob3V0XHJcbiAgICAgICAgLy8gZXhjZXB0aW9ucyBzdXBwb3J0LlxyXG4gICAgICAgIHZhciBpc1BvaW50ZXIgPSBfX19jeGFfaXNfcG9pbnRlcl90eXBlKHRoaXMuZ2V0X3R5cGUoKSk7XHJcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCh0aGlzLmV4Y1B0cik+PjIpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFkanVzdGVkID0gdGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7XHJcbiAgICAgICAgaWYgKGFkanVzdGVkICE9PSAwKSByZXR1cm4gYWRqdXN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBleGNlcHRpb25MYXN0ID0gMDtcclxuICBcclxuICB2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudCA9IDA7XHJcbiAgZnVuY3Rpb24gX19fY3hhX3Rocm93KHB0ciwgdHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgRXhjZXB0aW9uSW5mbyBjb250ZW50IGFmdGVyIGl0IHdhcyBhbGxvY2F0ZWQgaW4gX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uLlxyXG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIGV4Y2VwdGlvbkxhc3QgPSBwdHI7XHJcbiAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKztcclxuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Fib3J0KCkge1xyXG4gICAgICBhYm9ydCgnJyk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcclxuICAgICAgSEVBUFU4LmNvcHlXaXRoaW4oZGVzdCwgc3JjLCBzcmMgKyBudW0pO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRIZWFwTWF4KCkge1xyXG4gICAgICAvLyBTdGF5IG9uZSBXYXNtIHBhZ2Ugc2hvcnQgb2YgNEdCOiB3aGlsZSBlLmcuIENocm9tZSBpcyBhYmxlIHRvIGFsbG9jYXRlXHJcbiAgICAgIC8vIGZ1bGwgNEdCIFdhc20gbWVtb3JpZXMsIHRoZSBzaXplIHdpbGwgd3JhcCBiYWNrIHRvIDAgYnl0ZXMgaW4gV2FzbSBzaWRlXHJcbiAgICAgIC8vIGZvciBhbnkgY29kZSB0aGF0IGRlYWxzIHdpdGggaGVhcCBzaXplcywgd2hpY2ggd291bGQgcmVxdWlyZSBzcGVjaWFsXHJcbiAgICAgIC8vIGNhc2luZyBhbGwgaGVhcCBzaXplIHJlbGF0ZWQgY29kZSB0byB0cmVhdCAwIHNwZWNpYWxseS5cclxuICAgICAgcmV0dXJuIDIxNDc0ODM2NDg7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihzaXplKSB7XHJcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gcm91bmQgc2l6ZSBncm93IHJlcXVlc3QgdXAgdG8gd2FzbSBwYWdlIHNpemUgKGZpeGVkIDY0S0IgcGVyIHNwZWMpXHJcbiAgICAgICAgd2FzbU1lbW9yeS5ncm93KChzaXplIC0gYi5ieXRlTGVuZ3RoICsgNjU1MzUpID4+PiAxNik7IC8vIC5ncm93KCkgdGFrZXMgYSBkZWx0YSBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgc2l6ZVxyXG4gICAgICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcbiAgICAgICAgcmV0dXJuIDEgLypzdWNjZXNzKi87XHJcbiAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGltcGxpY2l0IDAgcmV0dXJuIHRvIHNhdmUgY29kZSBzaXplIChjYWxsZXIgd2lsbCBjYXN0IFwidW5kZWZpbmVkXCIgaW50byAwXHJcbiAgICAgIC8vIGFueWhvdylcclxuICAgIH1cclxuICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XHJcbiAgICAgIHZhciBvbGRTaXplID0gSEVBUFU4Lmxlbmd0aDtcclxuICAgICAgcmVxdWVzdGVkU2l6ZSA9IHJlcXVlc3RlZFNpemUgPj4+IDA7XHJcbiAgICAgIC8vIFdpdGggbXVsdGl0aHJlYWRlZCBidWlsZHMsIHJhY2VzIGNhbiBoYXBwZW4gKGFub3RoZXIgdGhyZWFkIG1pZ2h0IGluY3JlYXNlIHRoZSBzaXplXHJcbiAgICAgIC8vIGluIGJldHdlZW4pLCBzbyByZXR1cm4gYSBmYWlsdXJlLCBhbmQgbGV0IHRoZSBjYWxsZXIgcmV0cnkuXHJcbiAgXHJcbiAgICAgIC8vIE1lbW9yeSByZXNpemUgcnVsZXM6XHJcbiAgICAgIC8vIDEuICBBbHdheXMgaW5jcmVhc2UgaGVhcCBzaXplIHRvIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgc2l6ZSwgcm91bmRlZCB1cFxyXG4gICAgICAvLyAgICAgdG8gbmV4dCBwYWdlIG11bHRpcGxlLlxyXG4gICAgICAvLyAyYS4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCA9PSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBnZW9tZXRyaWNhbGx5OiBpbmNyZWFzZSB0aGUgaGVhcCBzaXplIGFjY29yZGluZyB0b1xyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfU1RFUCBmYWN0b3IgKGRlZmF1bHQgKzIwJSksIEF0IG1vc3RcclxuICAgICAgLy8gICAgIG92ZXJyZXNlcnZlIGJ5IE1FTU9SWV9HUk9XVEhfR0VPTUVUUklDX0NBUCBieXRlcyAoZGVmYXVsdCA5Nk1CKS5cclxuICAgICAgLy8gMmIuIElmIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgIT0gLTEsIGV4Y2Vzc2l2ZWx5IHJlc2l6ZSB0aGUgaGVhcFxyXG4gICAgICAvLyAgICAgbGluZWFybHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYnkgYXQgbGVhc3RcclxuICAgICAgLy8gICAgIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgYnl0ZXMuXHJcbiAgICAgIC8vIDMuICBNYXggc2l6ZSBmb3IgdGhlIGhlYXAgaXMgY2FwcGVkIGF0IDIwNDhNQi1XQVNNX1BBR0VfU0laRSwgb3IgYnlcclxuICAgICAgLy8gICAgIE1BWElNVU1fTUVNT1JZLCBvciBieSBBU0FOIGxpbWl0LCBkZXBlbmRpbmcgb24gd2hpY2ggaXMgc21hbGxlc3RcclxuICAgICAgLy8gNC4gIElmIHdlIHdlcmUgdW5hYmxlIHRvIGFsbG9jYXRlIGFzIG11Y2ggbWVtb3J5LCBpdCBtYXkgYmUgZHVlIHRvXHJcbiAgICAgIC8vICAgICBvdmVyLWVhZ2VyIGRlY2lzaW9uIHRvIGV4Y2Vzc2l2ZWx5IHJlc2VydmUgZHVlIHRvICgzKSBhYm92ZS5cclxuICAgICAgLy8gICAgIEhlbmNlIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMsIGN1dCBkb3duIG9uIHRoZSBhbW91bnQgb2YgZXhjZXNzXHJcbiAgICAgIC8vICAgICBncm93dGgsIGluIGFuIGF0dGVtcHQgdG8gc3VjY2VlZCB0byBwZXJmb3JtIGEgc21hbGxlciBhbGxvY2F0aW9uLlxyXG4gIFxyXG4gICAgICAvLyBBIGxpbWl0IGlzIHNldCBmb3IgaG93IG11Y2ggd2UgY2FuIGdyb3cuIFdlIHNob3VsZCBub3QgZXhjZWVkIHRoYXRcclxuICAgICAgLy8gKHRoZSB3YXNtIGJpbmFyeSBzcGVjaWZpZXMgaXQsIHNvIGlmIHdlIHRyaWVkLCB3ZSdkIGZhaWwgYW55aG93KS5cclxuICAgICAgdmFyIG1heEhlYXBTaXplID0gZ2V0SGVhcE1heCgpO1xyXG4gICAgICBpZiAocmVxdWVzdGVkU2l6ZSA+IG1heEhlYXBTaXplKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCBhbGlnblVwID0gKHgsIG11bHRpcGxlKSA9PiB4ICsgKG11bHRpcGxlIC0geCAlIG11bHRpcGxlKSAlIG11bHRpcGxlO1xyXG4gIFxyXG4gICAgICAvLyBMb29wIHRocm91Z2ggcG90ZW50aWFsIGhlYXAgc2l6ZSBpbmNyZWFzZXMuIElmIHdlIGF0dGVtcHQgYSB0b28gZWFnZXJcclxuICAgICAgLy8gcmVzZXJ2YXRpb24gdGhhdCBmYWlscywgY3V0IGRvd24gb24gdGhlIGF0dGVtcHRlZCBzaXplIGFuZCByZXNlcnZlIGFcclxuICAgICAgLy8gc21hbGxlciBidW1wIGluc3RlYWQuIChtYXggMyB0aW1lcywgY2hvc2VuIHNvbWV3aGF0IGFyYml0cmFyaWx5KVxyXG4gICAgICBmb3IgKHZhciBjdXREb3duID0gMTsgY3V0RG93biA8PSA0OyBjdXREb3duICo9IDIpIHtcclxuICAgICAgICB2YXIgb3Zlckdyb3duSGVhcFNpemUgPSBvbGRTaXplICogKDEgKyAwLjIgLyBjdXREb3duKTsgLy8gZW5zdXJlIGdlb21ldHJpYyBncm93dGhcclxuICAgICAgICAvLyBidXQgbGltaXQgb3ZlcnJlc2VydmluZyAoZGVmYXVsdCB0byBjYXBwaW5nIGF0ICs5Nk1CIG92ZXJncm93dGggYXQgbW9zdClcclxuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLCByZXF1ZXN0ZWRTaXplICsgMTAwNjYzMjk2ICk7XHJcbiAgXHJcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihtYXhIZWFwU2l6ZSwgYWxpZ25VcChNYXRoLm1heChyZXF1ZXN0ZWRTaXplLCBvdmVyR3Jvd25IZWFwU2l6ZSksIDY1NTM2KSk7XHJcbiAgXHJcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihuZXdTaXplKTtcclxuICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHtcclxuICBcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XHJcbiAgICAgIHZhciBmdW5jID0gTW9kdWxlWydfJyArIGlkZW50XTsgLy8gY2xvc3VyZSBleHBvcnRlZCBmdW5jdGlvblxyXG4gICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICBcclxuICBcclxuICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xyXG4gICAgICBIRUFQOC5zZXQoYXJyYXksIGJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEY4KHN0cikge1xyXG4gICAgICB2YXIgbGVuID0gMDtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAoYyA8PSAweDdGKSB7XHJcbiAgICAgICAgICBsZW4rKztcclxuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHtcclxuICAgICAgICAgIGxlbiArPSA0OyArK2k7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxlbiArPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbGVuO1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgaGVhcCwgb3V0SWR4LCBtYXhCeXRlc1RvV3JpdGUpIHtcclxuICAgICAgLy8gUGFyYW1ldGVyIG1heEJ5dGVzVG9Xcml0ZSBpcyBub3Qgb3B0aW9uYWwuIE5lZ2F0aXZlIHZhbHVlcywgMCwgbnVsbCxcclxuICAgICAgLy8gdW5kZWZpbmVkIGFuZCBmYWxzZSBlYWNoIGRvbid0IHdyaXRlIG91dCBhbnkgYnl0ZXMuXHJcbiAgICAgIGlmICghKG1heEJ5dGVzVG9Xcml0ZSA+IDApKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gIFxyXG4gICAgICB2YXIgc3RhcnRJZHggPSBvdXRJZHg7XHJcbiAgICAgIHZhciBlbmRJZHggPSBvdXRJZHggKyBtYXhCeXRlc1RvV3JpdGUgLSAxOyAvLyAtMSBmb3Igc3RyaW5nIG51bGwgdGVybWluYXRvci5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBhbmQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2MjlcclxuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXHJcbiAgICAgICAgaWYgKHUgPj0gMHhEODAwICYmIHUgPD0gMHhERkZGKSB7XHJcbiAgICAgICAgICB2YXIgdTEgPSBzdHIuY2hhckNvZGVBdCgrK2kpO1xyXG4gICAgICAgICAgdSA9IDB4MTAwMDAgKyAoKHUgJiAweDNGRikgPDwgMTApIHwgKHUxICYgMHgzRkYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodSA8PSAweDdGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDB4N0ZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEMwIHwgKHUgPj4gNik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHhGRkZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMiA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEUwIHwgKHUgPj4gMTIpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAzID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RjAgfCAodSA+PiAxOCk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gMTIpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIuXHJcbiAgICAgIGhlYXBbb3V0SWR4XSA9IDA7XHJcbiAgICAgIHJldHVybiBvdXRJZHggLSBzdGFydElkeDtcclxuICAgIH1cclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICByZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBIRUFQVTgsb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpO1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XHJcbiAgICAgIHZhciBzaXplID0gbGVuZ3RoQnl0ZXNVVEY4KHN0cikgKyAxO1xyXG4gICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhzaXplKTtcclxuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICB2YXIgVVRGOERlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT0gJ3VuZGVmaW5lZCcgPyBuZXcgVGV4dERlY29kZXIoJ3V0ZjgnKSA6IHVuZGVmaW5lZDtcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdpZHgnIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIGdpdmVuXHJcbiAgICAgKiBhcnJheSB0aGF0IGNvbnRhaW5zIHVpbnQ4IHZhbHVlcywgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCBzdHJpbmcgYXMgYVxyXG4gICAgICogSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICogaGVhcE9yQXJyYXkgaXMgZWl0aGVyIGEgcmVndWxhciBhcnJheSwgb3IgYSBKYXZhU2NyaXB0IHR5cGVkIGFycmF5IHZpZXcuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwT3JBcnJheSwgaWR4LCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICB2YXIgZW5kSWR4ID0gaWR4ICsgbWF4Qnl0ZXNUb1JlYWQ7XHJcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XHJcbiAgICAgIC8vIFRleHREZWNvZGVyIG5lZWRzIHRvIGtub3cgdGhlIGJ5dGUgbGVuZ3RoIGluIGFkdmFuY2UsIGl0IGRvZXNuJ3Qgc3RvcCBvblxyXG4gICAgICAvLyBudWxsIHRlcm1pbmF0b3IgYnkgaXRzZWxmLiAgQWxzbywgdXNlIHRoZSBsZW5ndGggaW5mbyB0byBhdm9pZCBydW5uaW5nIHRpbnlcclxuICAgICAgLy8gc3RyaW5ncyB0aHJvdWdoIFRleHREZWNvZGVyLCBzaW5jZSAuc3ViYXJyYXkoKSBhbGxvY2F0ZXMgZ2FyYmFnZS5cclxuICAgICAgLy8gKEFzIGEgdGlueSBjb2RlIHNhdmUgdHJpY2ssIGNvbXBhcmUgZW5kUHRyIGFnYWluc3QgZW5kSWR4IHVzaW5nIGEgbmVnYXRpb24sXHJcbiAgICAgIC8vIHNvIHRoYXQgdW5kZWZpbmVkIG1lYW5zIEluZmluaXR5KVxyXG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcclxuICBcclxuICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2Rlcikge1xyXG4gICAgICAgIHJldHVybiBVVEY4RGVjb2Rlci5kZWNvZGUoaGVhcE9yQXJyYXkuc3ViYXJyYXkoaWR4LCBlbmRQdHIpKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgIC8vIElmIGJ1aWxkaW5nIHdpdGggVGV4dERlY29kZXIsIHdlIGhhdmUgYWxyZWFkeSBjb21wdXRlZCB0aGUgc3RyaW5nIGxlbmd0aFxyXG4gICAgICAvLyBhYm92ZSwgc28gdGVzdCBsb29wIGVuZCBjb25kaXRpb24gYWdhaW5zdCB0aGF0XHJcbiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHtcclxuICAgICAgICAvLyBGb3IgVVRGOCBieXRlIHN0cnVjdHVyZSwgc2VlOlxyXG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cclxuICAgICAgICAvLyBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcclxuICAgICAgICBpZiAoISh1MCAmIDB4ODApKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTsgY29udGludWU7IH1cclxuICAgICAgICB2YXIgdTEgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MztcclxuICAgICAgICBpZiAoKHUwICYgMHhFMCkgPT0gMHhDMCkgeyBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEYwKSA9PSAweEUwKSB7XHJcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDcpIDw8IDE4KSB8ICh1MSA8PCAxMikgfCAodTIgPDwgNikgfCAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBpZiAodTAgPCAweDEwMDAwKSB7XHJcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBjaCA9IHUwIC0gMHgxMDAwMDtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCB8IChjaCA+PiAxMCksIDB4REMwMCB8IChjaCAmIDB4M0ZGKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcG9pbnRlciAncHRyJyB0byBhIG51bGwtdGVybWluYXRlZCBVVEY4LWVuY29kZWQgc3RyaW5nIGluIHRoZVxyXG4gICAgICogZW1zY3JpcHRlbiBIRUFQLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhIEphdmFzY3JpcHQgU3RyaW5nIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkIC0gQW4gb3B0aW9uYWwgbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxyXG4gICAgICogICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBZb3UgY2FuIG9taXQgdGhpcyBwYXJhbWV0ZXIgdG8gc2NhbiB0aGVcclxuICAgICAqICAgc3RyaW5nIHVudGlsIHRoZSBmaXJzdCBcdTAwMDAgYnl0ZS4gSWYgbWF4Qnl0ZXNUb1JlYWQgaXMgcGFzc2VkLCBhbmQgdGhlIHN0cmluZ1xyXG4gICAgICogICBhdCBbcHRyLCBwdHIrbWF4Qnl0ZXNUb1JlYWRyWyBjb250YWlucyBhIG51bGwgYnl0ZSBpbiB0aGUgbWlkZGxlLCB0aGVuIHRoZVxyXG4gICAgICogICBzdHJpbmcgd2lsbCBjdXQgc2hvcnQgYXQgdGhhdCBieXRlIGluZGV4IChpLmUuIG1heEJ5dGVzVG9SZWFkIHdpbGwgbm90XHJcbiAgICAgKiAgIHByb2R1Y2UgYSBzdHJpbmcgb2YgZXhhY3QgbGVuZ3RoIFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZFspIE4uQi4gbWl4aW5nXHJcbiAgICAgKiAgIGZyZXF1ZW50IHVzZXMgb2YgVVRGOFRvU3RyaW5nKCkgd2l0aCBhbmQgd2l0aG91dCBtYXhCeXRlc1RvUmVhZCBtYXkgdGhyb3dcclxuICAgICAqICAgSlMgSklUIG9wdGltaXphdGlvbnMgb2ZmLCBzbyBpdCBpcyB3b3J0aCB0byBjb25zaWRlciBjb25zaXN0ZW50bHkgdXNpbmcgb25lXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyLCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICByZXR1cm4gcHRyID8gVVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LCBwdHIsIG1heEJ5dGVzVG9SZWFkKSA6ICcnO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge0FyZ3VtZW50c3xBcnJheT19IGFyZ3NcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XHJcbiAgICAgIC8vIEZvciBmYXN0IGxvb2t1cCBvZiBjb252ZXJzaW9uIGZ1bmN0aW9uc1xyXG4gICAgICB2YXIgdG9DID0ge1xyXG4gICAgICAgICdzdHJpbmcnOiAoc3RyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcclxuICAgICAgICAgIGlmIChzdHIgIT09IG51bGwgJiYgc3RyICE9PSB1bmRlZmluZWQgJiYgc3RyICE9PSAwKSB7IC8vIG51bGwgc3RyaW5nXHJcbiAgICAgICAgICAgIC8vIGF0IG1vc3QgNCBieXRlcyBwZXIgVVRGLTggY29kZSBwb2ludCwgKzEgZm9yIHRoZSB0cmFpbGluZyAnXFwwJ1xyXG4gICAgICAgICAgICByZXQgPSBzdHJpbmdUb1VURjhPblN0YWNrKHN0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2FycmF5JzogKGFycikgPT4ge1xyXG4gICAgICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgICB3cml0ZUFycmF5VG9NZW1vcnkoYXJyLCByZXQpO1xyXG4gICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpIHtcclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gQm9vbGVhbihyZXQpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdmFyIGZ1bmMgPSBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIHZhciBjQXJncyA9IFtdO1xyXG4gICAgICB2YXIgc3RhY2sgPSAwO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XHJcbiAgICAgICAgICBpZiAoY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFjayA9PT0gMCkgc3RhY2sgPSBzdGFja1NhdmUoKTtcclxuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGFyZ3NbaV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcclxuICAgICAgZnVuY3Rpb24gb25Eb25lKHJldCkge1xyXG4gICAgICAgIGlmIChzdGFjayAhPT0gMCkgc3RhY2tSZXN0b3JlKHN0YWNrKTtcclxuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0ID0gb25Eb25lKHJldCk7XHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdHNcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xyXG4gICAgICAvLyBXaGVuIHRoZSBmdW5jdGlvbiB0YWtlcyBudW1iZXJzIGFuZCByZXR1cm5zIGEgbnVtYmVyLCB3ZSBjYW4ganVzdCByZXR1cm5cclxuICAgICAgLy8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXHJcbiAgICAgIHZhciBudW1lcmljQXJncyA9ICFhcmdUeXBlcyB8fCBhcmdUeXBlcy5ldmVyeSgodHlwZSkgPT4gdHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKTtcclxuICAgICAgdmFyIG51bWVyaWNSZXQgPSByZXR1cm5UeXBlICE9PSAnc3RyaW5nJztcclxuICAgICAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MgJiYgIW9wdHMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0Q0Z1bmMoaWRlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG52YXIgd2FzbUltcG9ydHMgPSB7XHJcbiAgXCJfX2N4YV90aHJvd1wiOiBfX19jeGFfdGhyb3csXHJcbiAgXCJhYm9ydFwiOiBfYWJvcnQsXHJcbiAgXCJlbXNjcmlwdGVuX21lbWNweV9iaWdcIjogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcclxuICBcImVtc2NyaXB0ZW5fcmVzaXplX2hlYXBcIjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXBcclxufTtcclxudmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJfX3dhc21fY2FsbF9jdG9yc1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZGJzY2FuID0gTW9kdWxlW1wiX2Ric2NhblwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImRic2NhblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJtYWxsb2NcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZnJlZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrU2F2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tTYXZlID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tTYXZlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1Jlc3RvcmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja0FsbG9jID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja0FsbG9jID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tBbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJfX2N4YV9pc19wb2ludGVyX3R5cGVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5cclxuXHJcbi8vIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG4vLyA9PT0gQXV0by1nZW5lcmF0ZWQgcG9zdGFtYmxlIHNldHVwIGVudHJ5IHN0dWZmID09PVxyXG5cclxuTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcclxuTW9kdWxlW1wiY3dyYXBcIl0gPSBjd3JhcDtcclxuXHJcblxyXG52YXIgY2FsbGVkUnVuO1xyXG5cclxuZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xyXG4gIC8vIElmIHJ1biBoYXMgbmV2ZXIgYmVlbiBjYWxsZWQsIGFuZCB3ZSBzaG91bGQgY2FsbCBydW4gKElOVk9LRV9SVU4gaXMgdHJ1ZSwgYW5kIE1vZHVsZS5ub0luaXRpYWxSdW4gaXMgbm90IGZhbHNlKVxyXG4gIGlmICghY2FsbGVkUnVuKSBydW4oKTtcclxuICBpZiAoIWNhbGxlZFJ1bikgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gcnVuQ2FsbGVyOyAvLyB0cnkgdGhpcyBhZ2FpbiBsYXRlciwgYWZ0ZXIgbmV3IGRlcHMgYXJlIGZ1bGZpbGxlZFxyXG59O1xyXG5cclxuZnVuY3Rpb24gcnVuKCkge1xyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJlUnVuKCk7XHJcblxyXG4gIC8vIGEgcHJlUnVuIGFkZGVkIGEgZGVwZW5kZW5jeSwgcnVuIHdpbGwgYmUgY2FsbGVkIGxhdGVyXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRvUnVuKCkge1xyXG4gICAgLy8gcnVuIG1heSBoYXZlIGp1c3QgYmVlbiBjYWxsZWQgdGhyb3VnaCBkZXBlbmRlbmNpZXMgYmVpbmcgZnVsZmlsbGVkIGp1c3QgaW4gdGhpcyB2ZXJ5IGZyYW1lLFxyXG4gICAgLy8gb3Igd2hpbGUgdGhlIGFzeW5jIHNldFN0YXR1cyB0aW1lIGJlbG93IHdhcyBoYXBwZW5pbmdcclxuICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcclxuICAgIGNhbGxlZFJ1biA9IHRydWU7XHJcbiAgICBNb2R1bGVbJ2NhbGxlZFJ1biddID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoQUJPUlQpIHJldHVybjtcclxuXHJcbiAgICBpbml0UnVudGltZSgpO1xyXG5cclxuICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcclxuICAgIGlmIChNb2R1bGVbJ29uUnVudGltZUluaXRpYWxpemVkJ10pIE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSgpO1xyXG5cclxuICAgIHBvc3RSdW4oKTtcclxuICB9XHJcblxyXG4gIGlmIChNb2R1bGVbJ3NldFN0YXR1cyddKSB7XHJcbiAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCdSdW5uaW5nLi4uJyk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJycpO1xyXG4gICAgICB9LCAxKTtcclxuICAgICAgZG9SdW4oKTtcclxuICAgIH0sIDEpO1xyXG4gIH0gZWxzZVxyXG4gIHtcclxuICAgIGRvUnVuKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pZiAoTW9kdWxlWydwcmVJbml0J10pIHtcclxuICBpZiAodHlwZW9mIE1vZHVsZVsncHJlSW5pdCddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncHJlSW5pdCddID0gW01vZHVsZVsncHJlSW5pdCddXTtcclxuICB3aGlsZSAoTW9kdWxlWydwcmVJbml0J10ubGVuZ3RoID4gMCkge1xyXG4gICAgTW9kdWxlWydwcmVJbml0J10ucG9wKCkoKTtcclxuICB9XHJcbn1cclxuXHJcbnJ1bigpO1xyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBwb3N0YW1ibGUuanNcclxuXHJcblxyXG4gIHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWIucmVhZHlcclxufVxyXG5cclxuKTtcclxufSkoKTtcclxuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcclxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxyXG4gIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWI7IH0pO1xyXG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXHJcbiAgZXhwb3J0c1tcImV4cG9ydENwcERic2NhbkxpYlwiXSA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uYW1kTyA9IHt9OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZSA9IE9iamVjdC5jcmVhdGUobW9kdWxlKTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdHNldDogKCkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFUyBNb2R1bGVzIG1heSBub3QgYXNzaWduIG1vZHVsZS5leHBvcnRzIG9yIGV4cG9ydHMuKiwgVXNlIEVTTSBleHBvcnQgc3ludGF4LCBpbnN0ZWFkOiAnICsgbW9kdWxlLmlkKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gc2VsZi5sb2NhdGlvbiArIFwiXCI7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDc5NjogMVxufTtcblxuLy8gbm8gY2h1bmsgaW5zdGFsbCBmdW5jdGlvbiBuZWVkZWRcbi8vIG5vIGNodW5rIGxvYWRpbmdcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsImltcG9ydCB7IGV4cG9ydENwcERic2NhbkxpYiB9IGZyb20gXCIuL2NwcC93YXNtRGJzY2FuLmpzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkYnNjYW4oZW1iZWRYLCBlbWJlZFksIGVwc2lsb24sIG1pblB0cykge1xuICAgIGNvbnN0IHdhc21VcmwgPSBuZXcgVVJMKCcuL2NwcC93YXNtRGJzY2FuLndhc20nLCBpbXBvcnQubWV0YS51cmwpLmhyZWY7XG4gICAgY29uc3Qgd2FzbVBhdGggPSB3YXNtVXJsLnN1YnN0cmluZygwLCB3YXNtVXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICd3YXNtRGJzY2FuLndhc20nO1xuICAgIGxldCB3YXNtSW5zdGFuY2U7XG4gICAgdHJ5IHtcbiAgICAgICAgd2FzbUluc3RhbmNlID0gYXdhaXQgZXhwb3J0Q3BwRGJzY2FuTGliKHtsb2NhdGVGaWxlOiAoKSA9PiB3YXNtUGF0aH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcERic2NhbkxpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVVybH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9hZCB3YXNtIGZpbGUgZm9yIGRic2NhbicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGdldERic2Nhbldhc20gPVxuICAgIHdhc21JbnN0YW5jZS5jd3JhcCgnZGJzY2FuJywgJ251bGwnLCBbJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJ10pO1xuICAgIGNvbnN0IGJ5dGVzRm9yRW1iZWRYID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogZW1iZWRYLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhUHRyWCA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRW1iZWRYKTsgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGVtYmVkWFxuICAgIGNvbnN0IGRhdGFQdHJZID0gd2FzbUluc3RhbmNlLl9tYWxsb2MoYnl0ZXNGb3JFbWJlZFgpOyAvLyBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgZW1iZWRZXG4gICAgY29uc3QgeEhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0clgsIGJ5dGVzRm9yRW1iZWRYKTtcbiAgICB4SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZW1iZWRYLmJ1ZmZlcikpOyAvLyBjb3B5IGVtYmVkWCB0byB0aGUgd2FzbSBoZWFwXG4gICAgY29uc3QgeUhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0clksIGJ5dGVzRm9yRW1iZWRYKTtcbiAgICB5SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZW1iZWRZLmJ1ZmZlcikpOyAvLyBjb3B5IGVtYmVkWSB0byB0aGUgd2FzbSBoZWFwXG4gICAgXG4gICAgY29uc3QgY2x1c3RlclB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRW1iZWRYKTtcbiAgICBjb25zdCBjbHVzdGVySGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBjbHVzdGVyUHRyLCBieXRlc0ZvckVtYmVkWCk7XG5cbiAgICBnZXREYnNjYW5XYXNtKGRhdGFQdHJYLCBkYXRhUHRyWSwgZW1iZWRYLmxlbmd0aCwgZXBzaWxvbiwgbWluUHRzLCBjbHVzdGVyUHRyKTtcbiAgICBjb25zdCBjbHVzdGVyUmVzdWx0ID0gbmV3IEludDMyQXJyYXkoY2x1c3RlckhlYXAuYnVmZmVyLCBjbHVzdGVySGVhcC5ieXRlT2Zmc2V0LCBlbWJlZFgubGVuZ3RoKTtcbiAgICB3YXNtSW5zdGFuY2UuX2ZyZWUoeEhlYXAuYnl0ZU9mZnNldCk7XG4gICAgd2FzbUluc3RhbmNlLl9mcmVlKHlIZWFwLmJ5dGVPZmZzZXQpO1xuICAgIHdhc21JbnN0YW5jZS5fZnJlZShjbHVzdGVySGVhcC5ieXRlT2Zmc2V0KTtcbiAgICByZXR1cm4gY2x1c3RlclJlc3VsdDtcbn0iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwiX3NjcmlwdERpciIsImV4cG9ydENwcERic2NhbkxpYiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJFTlZJUk9OTUVOVF9JU19XRUIiLCJ3aW5kb3ciLCJFTlZJUk9OTUVOVF9JU19XT1JLRVIiLCJpbXBvcnRTY3JpcHRzIiwic2NyaXB0RGlyZWN0b3J5IiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsInNlbGYiLCJsb2NhdGlvbiIsImhyZWYiLCJpbmRleE9mIiwic3Vic3RyIiwicmVwbGFjZSIsImxhc3RJbmRleE9mIiwidXJsIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwic2VuZCIsIlVpbnQ4QXJyYXkiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVBVMzIiLCJBQk9SVCIsInVwZGF0ZU1lbW9yeVZpZXdzIiwiYiIsImJ1ZmZlciIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIl9fQVRQUkVSVU5fXyIsIl9fQVRJTklUX18iLCJfX0FUUE9TVFJVTl9fIiwicnVuRGVwZW5kZW5jaWVzIiwicnVuRGVwZW5kZW5jeVdhdGNoZXIiLCJkZXBlbmRlbmNpZXNGdWxmaWxsZWQiLCJ3aGF0IiwiZSIsIlJ1bnRpbWVFcnJvciIsIndhc21CaW5hcnlGaWxlIiwicGF0aCIsImlzRGF0YVVSSSIsImZpbGVuYW1lIiwic3RhcnRzV2l0aCIsImdldEJpbmFyeSIsImZpbGUiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwiYmluYXJ5RmlsZSIsImltcG9ydHMiLCJyZWNlaXZlciIsImZldGNoIiwidGhlbiIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJjYXRjaCIsImdldEJpbmFyeVByb21pc2UiLCJiaW5hcnkiLCJpbnN0YW50aWF0ZSIsImluc3RhbmNlIiwicmVhc29uIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwicHRyIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9jYXVnaHQiLCJjYXVnaHQiLCJnZXRfY2F1Z2h0Iiwic2V0X3JldGhyb3duIiwicmV0aHJvd24iLCJnZXRfcmV0aHJvd24iLCJpbml0Iiwic2V0X2FkanVzdGVkX3B0ciIsImFkanVzdGVkUHRyIiwiZ2V0X2FkanVzdGVkX3B0ciIsImdldF9leGNlcHRpb25fcHRyIiwiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSIsImFkanVzdGVkIiwiZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlciIsInNpemUiLCJncm93IiwiYnl0ZUxlbmd0aCIsImdldENGdW5jIiwiaWRlbnQiLCJVVEY4RGVjb2RlciIsIlRleHREZWNvZGVyIiwiY2NhbGwiLCJyZXR1cm5UeXBlIiwiYXJnVHlwZXMiLCJhcmdzIiwib3B0cyIsInRvQyIsInN0ciIsInJldCIsImxlbiIsImkiLCJjIiwiY2hhckNvZGVBdCIsImxlbmd0aEJ5dGVzVVRGOCIsInN0YWNrQWxsb2MiLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiZW5kSWR4IiwidSIsInN0cmluZ1RvVVRGOEFycmF5Iiwic3RyaW5nVG9VVEY4Iiwic3RyaW5nVG9VVEY4T25TdGFjayIsImFyciIsImFycmF5Iiwic2V0IiwiZnVuYyIsImNBcmdzIiwic3RhY2siLCJjb252ZXJ0ZXIiLCJzdGFja1NhdmUiLCJhcHBseSIsInN0YWNrUmVzdG9yZSIsImhlYXBPckFycmF5IiwiaWR4IiwibWF4Qnl0ZXNUb1JlYWQiLCJlbmRQdHIiLCJkZWNvZGUiLCJzdWJhcnJheSIsInUwIiwidTEiLCJ1MiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoIiwiVVRGOEFycmF5VG9TdHJpbmciLCJCb29sZWFuIiwiY29udmVydFJldHVyblZhbHVlIiwib25Eb25lIiwiY2FsbGVkUnVuIiwid2FzbUltcG9ydHMiLCJkZXN0IiwibnVtIiwiY29weVdpdGhpbiIsInJlcXVlc3RlZFNpemUiLCJ4Iiwib2xkU2l6ZSIsIm1heEhlYXBTaXplIiwiY3V0RG93biIsIm92ZXJHcm93bkhlYXBTaXplIiwiTWF0aCIsIm1pbiIsIm1heCIsImNhbGxiYWNrIiwiaW5mbyIsInJlY2VpdmVJbnN0YW5jZSIsIm1vZHVsZSIsImNiIiwiZXhwb3J0cyIsInVuc2hpZnQiLCJpZCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVSdW5EZXBlbmRlbmN5IiwicmVzdWx0IiwiaW5zdGFudGlhdGVTdHJlYW1pbmciLCJjcmVhdGVXYXNtIiwiYXJndW1lbnRzIiwicnVuIiwiZG9SdW4iLCJwb3N0UnVuIiwicHJlUnVuIiwic2V0VGltZW91dCIsIm51bWVyaWNBcmdzIiwiZXZlcnkiLCJydW5DYWxsZXIiLCJwb3AiLCJyZWFkeSIsImRlZmluZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwiYW1kTyIsImQiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImciLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJobWQiLCJjcmVhdGUiLCJjaGlsZHJlbiIsIkVycm9yIiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInAiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJkb25lIiwib25tZXNzYWdlIiwiZXZlbnQiLCJlbWJlZFgiLCJlbWJlZFkiLCJlcHNpbG9uIiwibWluUHRzIiwiZGF0YSIsImNsdXN0ZXJzIiwiYXN5bmMiLCJ3YXNtVXJsIiwiVVJMIiwid2FzbVBhdGgiLCJzdWJzdHJpbmciLCJ3YXNtSW5zdGFuY2UiLCJsb2NhdGVGaWxlIiwiZXJyb3IiLCJnZXREYnNjYW5XYXNtIiwiY3dyYXAiLCJieXRlc0ZvckVtYmVkWCIsIkJZVEVTX1BFUl9FTEVNRU5UIiwiZGF0YVB0clgiLCJfbWFsbG9jIiwiZGF0YVB0clkiLCJ4SGVhcCIsInlIZWFwIiwiY2x1c3RlclB0ciIsImNsdXN0ZXJIZWFwIiwiY2x1c3RlclJlc3VsdCIsImJ5dGVPZmZzZXQiLCJfZnJlZSIsImRic2NhbiIsInBvc3RNZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIifQ==
Binary file
Binary file