@datagrok/eda 1.1.27 → 1.1.28
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 +4 -0
- package/dist/111.js +2 -0
- package/dist/111.js.map +1 -0
- package/dist/153.js +2 -0
- package/dist/153.js.map +1 -0
- package/dist/23.js +2 -2
- package/dist/23.js.map +1 -0
- package/dist/234.js +2 -0
- package/dist/234.js.map +1 -0
- package/dist/242.js +2 -0
- package/dist/242.js.map +1 -0
- package/dist/260.js +2 -0
- package/dist/260.js.map +1 -0
- package/dist/317.js +2 -0
- package/dist/317.js.map +1 -0
- package/dist/33.js +2 -0
- package/dist/33.js.map +1 -0
- package/dist/348.js +2 -0
- package/dist/348.js.map +1 -0
- package/dist/377.js +2 -0
- package/dist/377.js.map +1 -0
- package/dist/412.js +2 -0
- package/dist/412.js.map +1 -0
- package/dist/415.js +2 -0
- package/dist/415.js.map +1 -0
- package/dist/531.js +2 -0
- package/dist/531.js.map +1 -0
- package/dist/583.js +2 -0
- package/dist/583.js.map +1 -0
- package/dist/589.js +2 -0
- package/dist/589.js.map +1 -0
- package/dist/603.js +2 -0
- package/dist/603.js.map +1 -0
- package/dist/656.js +2 -0
- package/dist/656.js.map +1 -0
- package/dist/682.js +2 -0
- package/dist/682.js.map +1 -0
- package/dist/705.js +2 -0
- package/dist/705.js.map +1 -0
- package/dist/731.js +2 -0
- package/dist/731.js.map +1 -0
- package/dist/738.js +3 -0
- package/dist/738.js.map +1 -0
- package/dist/763.js +2 -0
- package/dist/763.js.map +1 -0
- package/dist/778.js +2 -0
- package/dist/778.js.map +1 -0
- package/dist/783.js +2 -0
- package/dist/783.js.map +1 -0
- package/dist/793.js +2 -0
- package/dist/793.js.map +1 -0
- package/dist/907.js +2 -0
- package/dist/907.js.map +1 -0
- package/dist/91.js +2 -0
- package/dist/91.js.map +1 -0
- package/dist/950.js +2 -0
- package/dist/950.js.map +1 -0
- package/dist/package-test.js +2 -2
- package/dist/package-test.js.map +1 -0
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -0
- package/package.json +3 -3
- package/src/missing-values-imputation/ui.ts +80 -66
- package/src/package.ts +104 -46
- package/src/pls/pls-tools.ts +5 -6
- package/src/svm.ts +19 -17
- package/tsconfig.json +4 -4
- package/webpack.config.js +1 -1
- package/dist/208.js +0 -2
- package/dist/221.js +0 -2
- package/dist/231.js +0 -2
- package/dist/261.js +0 -2
- package/dist/282.js +0 -2
- package/dist/334.js +0 -2
- package/dist/356.js +0 -2
- package/dist/36.js +0 -2
- package/dist/367.js +0 -2
- package/dist/374.js +0 -2
- package/dist/40.js +0 -2
- package/dist/413.js +0 -2
- package/dist/42.js +0 -2
- package/dist/427.js +0 -2
- package/dist/445.js +0 -2
- package/dist/467.js +0 -2
- package/dist/523.js +0 -3
- package/dist/533.js +0 -2
- package/dist/590.js +0 -2
- package/dist/65.js +0 -2
- package/dist/694.js +0 -2
- package/dist/729.js +0 -2
- package/dist/796.js +0 -2
- package/dist/901.js +0 -2
- package/dist/902.js +0 -2
- package/dist/910.js +0 -2
- package/dist/972.js +0 -2
- /package/dist/{523.js.LICENSE.txt → 738.js.LICENSE.txt} +0 -0
package/dist/package.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var eda;(()=>{var t={7905:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&b("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,_=null,C=null;function b(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var I,N;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==I&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){b(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(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 M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),b(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=m[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=m[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){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(I="wasmDbscan.wasm")||(N=I,I=o.locateFile?o.locateFile(N,l):l+N);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={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=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=B()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&k(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var U,D={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){b("")},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 o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},B=(function(){var t,n,r,i,s={env:D,wasi_snapshot_preview1:D};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(t){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),C)){var n=C;C=null,n()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=I,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(B=o.asm.stackSave).apply(null,arguments)}),k=function(){return(k=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){U||(U=!0,o.calledRun=!0,g||(O(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;O(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},C=function t(){U||q(),U||(C=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},9414:(t,n,e)=>{"use strict";e.d(n,{Z:()=>a});var r=e(7537),o=e.n(r),i=e(3645),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;;AAEhB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},3645:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},7537:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},2162:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),_=A*A;if(_>60)break;var C=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;C>=n.exp(-30/d)&&(g+=C=s[E-1]*n.exp(-.5*_)*n.pow(C,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},3379:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},569:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},9216:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},3565:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},4589:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.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),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>Cr,MCL:()=>br,MCLInitializationFunction:()=>Ir,MVA:()=>Mr,PCA:()=>yr,PLS:()=>Nr,_package:()=>dr,anova:()=>Kr,applyLinearKernelSVM:()=>Lr,applyLinearRegression:()=>Jr,applyPolynomialKernelSVM:()=>Gr,applyRBFkernelSVM:()=>Dr,applySigmoidKernelSVM:()=>Hr,dbScan:()=>vr,dbscanPostProcessingFunction:()=>wr,demoMultivariateAnalysis:()=>Tr,generateDatasetForLinearRegressionTest:()=>Qr,info:()=>pr,init:()=>gr,isApplicableLinearKernelSVM:()=>Rr,isApplicableLinearRegression:()=>to,isApplicablePolynomialKernelSVM:()=>qr,isApplicableRBFkernelSVM:()=>Br,isApplicableSigmoidKernelSVM:()=>zr,kNNImputation:()=>jr,linearRegression:()=>Xr,numberPreprocessingFunction:()=>Er,reduceDimensionality:()=>_r,stringPreprocessingFunction:()=>Ar,testDataLinearNonSeparable:()=>Pr,testDataLinearSeparable:()=>Or,topMenuPLS:()=>Sr,trainLinearKernelSVM:()=>xr,trainLinearRegression:()=>Zr,trainPolynomialKernelSVM:()=>Vr,trainRBFkernelSVM:()=>Ur,trainSigmoidKernelSVM:()=>Yr,visualizeLinearKernelSVM:()=>Fr,visualizePolynomialKernelSVM:()=>Wr,visualizeRBFkernelSVM:()=>kr,visualizeSigmoidKernelSVM:()=>$r});const t=grok,n=ui,o=DG,i={i32:"HEAP32",f32:"HEAPF32"},s={i32:Int32Array,f32:Float32Array},a={i32:2,f32:2},u={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class l{constructor(t){this.data=t}complementArrOfParams(t){t.push(this.data)}complementArrOfTypes(t){t.push("number")}allocateMemoryForBuffer(t){}isMemoryForBufferAllocated(){return!0}putDataToBuffer(t){}getDataFromBuffer(t){}freeBuffer(t){}}class c extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfRows=t.length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows)}complementArrOfTypes(t){t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]];let o=null;const u=this.data;o="int"==u.type&&"i32"==n||"double"==u.type&&"f32"==n?u.getRawData():new s[n](u.getRawData()),o&&r.set(o,this.buf>>e)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=s[n].BYTES_PER_ELEMENT,a=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)a[t]=e[r/o+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class f extends c{constructor(t,n){super([],t,!0),this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=u[n],a=new s[n](this.numOfRows);for(let t=0;t<a.length;t++)a[t]=e[r/a.BYTES_PER_ELEMENT+t];this.data=o("name",a)}}}class h extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfColumns=t.length,this.numOfRows=t[0].length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows),t.push(this.numOfColumns)}complementArrOfTypes(t){t.push("number"),t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*this.numOfColumns*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]],o=s[n].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const a=this.data[t];i="int"==a.type&&"i32"==n||"double"==a.type&&"f32"==n?a.getRawData():new s[n](a.getRawData()),null!=i&&r.set(i,this.buf+t*this.numOfRows*o>>e)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=new s[n](e.buffer,this.buf,r*o);for(let t=0;t<o;t++){const n=this.data[t].getRawData();for(let e=0;e<r;e++)n[e]=a[e+t*r]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class m extends h{constructor(t,n,e){super([[]],t,!0),this.data=[],this.numOfColumns=e,this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=s[n].BYTES_PER_ELEMENT,l=u[n],c=this.buf;for(let t=0;t<o;t++){const o=new s[n](r);for(let n=0;n<r;n++)o[n]=e[c/a+n+t*r];this.data.push(l((t+1).toString(),o))}}}}const d={intColumn:t=>new c(t,"i32"),newIntColumn:t=>new f("i32",t),intColumns:t=>new h(t.toList(),"i32"),newIntColumns:(t,n)=>new m("i32",t,n),floatColumn:t=>new c(t,"f32"),newFloatColumn:t=>new f("f32",t),floatColumns:t=>new h(t.toList(),"f32"),newFloatColumns:(t,n)=>new m("f32",t,n),int:t=>new l(t),num:t=>new l(t)},p={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data},g="num",v="floatColumn",y="intColumn",w="floatColumns",E="newFloatColumns",A="intColumns",_="newIntColumns",C="newFloatColumn",b="newIntColumn",I="column",N="_callResult",S="numOfRows",M="numOfColumns",T="ref",O="value",P="tableFromColumns",x="objects",L="int",R="double",F={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function U(t,n){let e,r=[],o=0;for(const i in t){const s=t[i],a=s.type;if(i!==N){switch(a){case g:case L:case R:s.data=n[o],o++;break;case y:case v:let r,i=n[o];r=i.type===L&&a===y||i.type===R&&a===v?i.getRawData():new F[a](i.getRawData()),s.data={array:r,numOfRows:r.length},o++;break;case b:case C:let u=0;e=s[S][T],u=t[e].type===g?t[e].data:t[e].data[s[S][O]],s.data={numOfRows:u},o++;break;case A:case w:let l=[];for(let t of n[o].toList())t.type===L&&a===y||t.type===R&&a===v?l.push(t.getRawData()):l.push(new F[a](t.getRawData()));s.data={arrays:l,numOfRows:l[0].length,numOfColumns:l.length},o++;break;case _:case E:let c=0,f=0;e=s[S][T],c=t[e].type===g?t[e].data:t[e].data[s[S][O]],e=s[M][T],f=t[e].type===g?t[e].data:t[e].data[s[M][O]],s.data={numOfRows:c,numOfColumns:f},o++;break;default:return}r.push(s)}}return r}function D(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const i=t[o];switch(i.type){case g:case L:case R:case y:case v:case w:case A:break;case C:case b:let t;null==i.name?t=(0).toString():a=i.name,i.column=e[i.type](t,n[r].array);break;case _:case E:let o=[],s=n[r].arrays.length,a=[];if(null==i.names)for(let t=1;t<=s;t++)a.push(t.toString());else a=i.names;for(let t=0;t<s;t++)o.push(e[i.type](a[t],n[r].arrays[t]));i.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case g:case L:case R:return t.arguments[n.source];case I:return t.arguments[n.source].column;case P:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case x:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case g:case L:case R:case y:case v:case A:case w:break;case b:case C:e.column=null;break;case _:case E:e.columns=null}}}(t.arguments),e}const B=1,k=1,V=1,G=0,q=100,W=1e8,Y="components must be positive.",H="components must not be greater than features count.",z="min must be less than max.",$="features must be positive.",K="samples must be positive.",j="violators percentage must be from the range from 0 to 100.",X="dataframe is too big.",Q="unsupported column type: ";function Z(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(Q+t.type)}function J(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function tt(t,n){if(function(t,n){if(n<B)throw new Error(Y);if(n>t.length)throw new Error(H);for(const n of t)Z(n),J(n)}(t,n),t.length*t.byIndex(0).length>W)throw new Error(X)}var nt=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var et=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const rt=0,ot=1,it="Feature #",st="Label";function at(t,n,r,i,s,a,u,l){return et(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(z);if(n<V)throw new Error($);if(t<k)throw new Error(K);if(o<G||o>q)throw new Error(j)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(374),e.b));c.postMessage(U(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(D(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=st;for(const t of f[rt])t.name=it+t.name;const m=o.DataFrame.fromColumns(f[rt]);return m.name=r,m.columns.add(f[ot]),m}))}var ut=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const lt=0,ct=1,ft=2,ht=3,mt=4,dt=0,pt=1,gt=2,vt=3,yt=4,wt=5,Et=6,At=7,_t=0,Ct=1,bt=2,It=3,Nt=0,St=0,Mt=1,Tt=0,Ot=1,Pt=0,xt=0,Lt=0,Rt=0,Ft="gamma must be strictly positive.",Ut="sigma must be strictly positive.",Dt="c must be strictly positive.",Bt="d must be strictly positive.",kt="incorrect kernel.",Vt="labels must be strings of two categories.",Gt="Labels",qt="predicted",Wt="correctness",Yt="Confusion matrix",Ht="mean",zt="std dev",$t="alpha",Kt="weight",jt="gamma",Xt="kernel",Qt="kernel params",Zt="kernel param 1",Jt="kernel param 2",tn="features count",nn="train samples count",en="Train error,%",rn=["linear","polynomial","RBF","sigmoid"],on="Sensitivity",sn="Specificity",an="Balanced accuracy",un="Positive predicitve value",ln="Negative predicitve value",cn="prediction",fn=4,hn=3,mn=2,dn=0,pn=1,gn=2,vn=0,yn=1;function wn(t,n,r){return ut(this,void 0,void 0,(function*(){const i=n.columns,s=i.byName(r);if(i.remove(r),2!=s.categories.length)throw new Error(Vt);let a=o.Column.float(s.name,s.length);for(var u=0;u<s.length;u++)a.set(u,s.get(u)==s.categories[0]?-1:1,!1);let l=yield function(t,n,r){return ut(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Pt)throw new Error(Ft);switch(t.kernel){case lt:return;case ft:if(t.sigma<=xt)throw new Error(Ut);return;case ct:if(t.cParam<=Lt)throw new Error(Dt);if(t.dParam<=Rt)throw new Error(Bt);return;case ht:return;default:throw new Error(kt)}}(t);const i=[vn,vn];switch(t.kernel){case lt:break;case ft:i[Nt]=t.sigma;break;case ct:i[St]=t.cParam,i[Mt]=t.dParam;break;case ht:i[Tt]=t.kappa,i[Ot]=t.theta;break;default:throw new Error(kt)}const s=o.Column.fromList("double",Qt,i),a=n.toList(),u=a[0].length+yn,l=a.length+yn,c=mt;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(467),e.b));f.postMessage(U(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(D(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[pt].name=Ht,f[gt].name=zt,f[vt].name=$t,f[yt].name=Kt,f[wt].name=qt,f[Et].name=Wt,f[At].name=Yt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[dt]),means:f[pt],stdDevs:f[gt],modelParams:f[vt],modelWeights:f[yt],predictedLabels:f[wt],correctness:f[Et],confusionMatrix:f[At],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[_t],r=n[It],o=n[bt],i=n[Ct],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,a);return l.realLabels=s,l}))}function En(t,n){const e=_n(n);return o.Viewer.form(e.modelInfo).root}function An(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,i=o.DataFrame.fromColumns([t.realLabels]).toByteArray(),s=fn+i.length+4-i.length%4,a=function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",jt,[t.trainGamma]),o.Column.fromStrings(Xt,[rn[t.kernelType]]),o.Column.fromList("double",Zt,[n[0]]),o.Column.fromList("double",Jt,[n[1]]),o.Column.fromList("double",tn,[t.featuresCount]),o.Column.fromList("double",nn,[t.trainSamplesCount]),o.Column.fromList("double",en,[t.trainError]),o.Column.fromList("double",an,[t.balancedAccuracy]),o.Column.fromList("double",on,[t.sensitivity]),o.Column.fromList("double",sn,[t.specificity]),o.Column.fromList("double",un,[t.positivePredicitveValue]),o.Column.fromList("double",ln,[t.negativePredicitveValue])])}(t).toByteArray(),u=fn+a.length+4-a.length%4,l=new Uint8Array(fn*(hn+mn+e+r+r+e+yn+r+yn+r*e)+s+u),c=l.buffer;let f=0,h=new Int32Array(c,f,hn);h[dn]=t.kernelType,h[pn]=e,h[gn]=r,f+=hn*fn;let m=new Float32Array(c,f,mn);m.set(t.kernelParams.getRawData()),f+=mn*fn,m=new Float32Array(c,f,e),m.set(t.trainLabels.getRawData()),f+=e*fn,m=new Float32Array(c,f,r),m.set(t.means.getRawData()),f+=r*fn,m=new Float32Array(c,f,r),m.set(t.stdDevs.getRawData()),f+=r*fn,m=new Float32Array(c,f,e+yn),m.set(t.modelParams.getRawData()),f+=(e+yn)*fn,m=new Float32Array(c,f,r+yn),m.set(t.modelWeights.getRawData()),f+=(r+yn)*fn;for(const t of n)m=new Float32Array(c,f,r),m.set(t.getRawData()),f+=r*fn;return h=new Int32Array(c,f,1),h[0]=i.length,l.set(i,f+fn),f+=s,h=new Int32Array(c,f,1),h[0]=a.length,l.set(a,f+fn),f+=u,l}function _n(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,hn);e+=hn*fn;const i=r[pn],s=r[gn],a=o.Column.fromFloat32Array(Qt,new Float32Array(n,e,mn));e+=mn*fn;const u=o.Column.fromFloat32Array(Gt,new Float32Array(n,e,i));e+=i*fn;const l=o.Column.fromFloat32Array(Ht,new Float32Array(n,e,s));e+=s*fn;const c=o.Column.fromFloat32Array(zt,new Float32Array(n,e,s));e+=s*fn;const f=o.Column.fromFloat32Array($t,new Float32Array(n,e,i+yn));e+=(i+yn)*fn;const h=o.Column.fromFloat32Array(Kt,new Float32Array(n,e,s+yn));e+=(s+yn)*fn;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*fn;const d=o.DataFrame.fromColumns(m),p=new Int32Array(n,e,1)[0],g=p+4-p%4;e+=fn;const v=o.DataFrame.fromByteArray(new Uint8Array(n,e,p)).columns.byIndex(0);e+=g;const y=new Int32Array(n,e,1)[0],w=y+4-y%4;e+=fn;const E=o.DataFrame.fromByteArray(new Uint8Array(n,e,y));return e+=w,{kernelType:r[dn],kernelParams:a,trainLabels:u,realLabels:v,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d,modelInfo:E}}function Cn(t,n){return ut(this,void 0,void 0,(function*(){const r=_n(new Uint8Array(n)),i=yield function(t,n){return ut(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(367),e.b));h.postMessage(U(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(D(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns),s=o.Column.string(cn,i.length),a=r.realLabels.categories;for(var u=0;u<s.length;u++)s.set(u,-1==i.get(u)?a[0]:a[1]);return o.DataFrame.fromColumns([s])}))}function bn(t,n){const e=t.columns,r=e.byName(n);e.remove(n);for(var o="string"==r.type,i=0;i<e.length;i++)o=o&&("double"==e.byIndex(i).type||"int"==e.byIndex(i).type);return o}var In,Nn,Sn,Mn,Tn,On,Pn,xn;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(In||(In={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(Nn||(Nn={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(Sn||(Sn={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(Mn||(Mn={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(Tn||(Tn={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(On||(On={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(Pn||(Pn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(xn||(xn={}));const Ln="Int",Rn=6,Fn=[.49,.79,.99],Un=1,Dn=200,Bn=200;var kn;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(kn||(kn={}));const Vn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",Gn=[{caption:Sn.MODEL,text:"Closer to the line means better price prediction."},{caption:Sn.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:Sn.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:Sn.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:Sn.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],qn=Gn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${Tn.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Wn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Yn=Math.min,Hn=Math.max;function zn(t){return Wn(this,void 0,void 0,(function*(){tt(t.features,t.components),Z(t.predict),J(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(334),e.b));s.postMessage(U(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(D(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[xn.PREDICTION],regressionCoefficients:n[xn.REGR_COEFFS],tScores:n[xn.T_SCORES],uScores:n[xn.U_SCORES],xLoadings:n[xn.X_LOADINGS],yLoadings:n[xn.Y_LOADINGS]}}))}function $n(e){return Wn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(Nn.NO_DF);if(0===r.rowCount)return void t.shell.warning(Nn.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(Nn.NO_COLS);if(1===i.length)return void t.shell.warning(Nn.ONE_COL);let l=s[s.length-1];const c=n.columnInput(Sn.PREDICT,r,l,(()=>{l=c.value,y()}),{filter:t=>u(t)});let f;c.setTooltip(Mn.PREDICT);const h=n.columnsInput(Sn.USING,r,(()=>{}),{available:i});h.onInput((()=>y())),h.setTooltip(Mn.FEATURES);let m=Yn(i.length-1,On.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:Sn.COMPONENTS,inputType:Ln,defaultValue:m,showPlusMinus:!0,min:On.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(Mn.COMPONENTS),e===In.COMPUTE_COMPONENTS?(p=Sn.PLS,g=Tn.PLS,v=Mn.PLS):(p=Sn.MVA,g=Tn.MVA,v=Mn.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=Yn(Hn(null!==(t=d.value)&&void 0!==t?t:m,On.MIN),f.length),m=d.value,A.getButton(Sn.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.columnInput(Sn.NAMES,r,w,(()=>w=c.value),{filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(Mn.NAMES),E.root.hidden=0===a.length||e===In.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(Sn.RUN,(()=>Wn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){var i,s;return Wn(this,void 0,void 0,(function*(){const a=yield zn(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===In.COMPUTE_COMPONENTS?Pn.PREFIX:Sn.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===In.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(Sn.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${Sn.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${Pn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:Sn.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:Tn.MODEL}));a.regressionCoefficients.name=Sn.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:Sn.REGR_COEFS,splitColumnName:Sn.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:Tn.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${Sn.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:Sn.LOADINGS,xColumnName:`${Sn.XLOADING}1`,yColumnName:`${Sn.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:Sn.FEATURE,help:Tn.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${Sn.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:Sn.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0].name,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:Tn.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:Un,visible:!0,title:" ",min:-n,max:n,color:kn.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:Un,visible:!0,title:" ",color:kn.AXIS}),y.forEach((t=>{const e="${"+t+"}";Fn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const _=a.yLoadings.getRawData(),C=a.xLoadings.map((t=>t.getRawData())),b=e.table.rowCount,I=c.length,N=e.components,S=new Float32Array(N),M=[],T=[];for(let t=0;t<I;++t)T.push(new Float32Array(N));S[0]=Math.pow(_[0],2)/b,M.push(`1 ${Pn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(C[0][n],2)/b}));for(let t=1;t<N;++t)S[t]=S[t-1]+Math.pow(_[t],2)/b,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(C[t][e],2)/b)),M.push(`${t+1} ${Pn.COMPS}`);const O=o.DataFrame.fromColumns([o.Column.fromStrings(Sn.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>O.columns.add(o.Column.fromFloat32Array(c[n],t))));const P=h.addViewer(o.Viewer.barChart(O,{title:Sn.EXPL_VAR,splitColumnName:Sn.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:Tn.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===In.DEMO){const e=[p,w,v,g,P].map(((t,n)=>({text:Gn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:Sn.EXPLORE,pages:e}).helpUrl=Tn.MVA,t.shell.windows.help.showHelp(n.markdown(qn))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:Dn,y:Bn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Rn),t.shell.v.append(A.root)}))}var Kn,jn=e(2162);function Xn(t){if(t<=0||t>=1)throw new Error(Kn.INCORRECT_SIGNIFICANCE_LEVEL)}function Qn(t){const n=t.size;if(n<=0)throw new Error(Kn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function Zn(t,n,e=.05){Xn(e);const r=Qn(t),o=Qn(n);return 0===o?r===o:r/o<jn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(Kn||(Kn={}));class Jn{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(Kn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!Zn(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(Kn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-jn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(Kn.UNSUPPORTED_COLUMN_TYPE)}}}var te=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function ne(t,n,r,o){return te(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(796),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(7905);let ee=null;function re(){return t=this,n=void 0,r=function*(){if(!ee&&(ee=yield navigator.gpu.requestAdapter(),null==ee))return null;const t=yield ee.requestAdapterInfo();return t?oe(t.description,oe(t.vendor,"No GPU description available")):null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}function oe(t,n){return t&&""!=t?t:n}var ie,se,ae,ue,le,ce,fe,he,me;(se=ie||(ie={})).EUCLIDEAN="EUCLIDEAN",se.MANHATTAN="MANHATTAN",ie.EUCLIDEAN,ie.MANHATTAN,(ue=ae||(ae={})).HAMMING="Hamming",ue.EUCLIDEAN="Euclidean",ue.MANHATTAN="Manhattan",ue.TANIMOTO="Tanimoto",ue.LEVENSTEIN="Levenshtein",ue.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",ue.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",ue.SOKAL="Sokal",ue.COSINE="Cosine",ue.ASYMMETRIC="Asymmetric",ue.Difference="Difference",ue.OneHot="One-Hot",ae.HAMMING,ae.EUCLIDEAN,ae.MANHATTAN,ae.TANIMOTO,ae.LEVENSTEIN,ae.NEEDLEMAN_WUNSCH,ae.MONOMER_CHEMICAL_DISTANCE,ae.SOKAL,ae.COSINE,ae.ASYMMETRIC,ae.Difference,ae.OneHot,ae.HAMMING,ae.EUCLIDEAN,ae.MANHATTAN,ae.TANIMOTO,ae.SOKAL,ae.COSINE,ae.ASYMMETRIC,ae.LEVENSTEIN,ae.NEEDLEMAN_WUNSCH,ae.MONOMER_CHEMICAL_DISTANCE,ae.Difference,ae.OneHot,new Set([ae.HAMMING,ae.LEVENSTEIN,ae.NEEDLEMAN_WUNSCH,ae.MONOMER_CHEMICAL_DISTANCE,ae.OneHot]),new Set([ae.HAMMING,ae.EUCLIDEAN,ae.MANHATTAN,ae.MONOMER_CHEMICAL_DISTANCE,ae.LEVENSTEIN,ae.NEEDLEMAN_WUNSCH,ae.TANIMOTO,ae.COSINE,ae.SOKAL,ae.ASYMMETRIC,ae.OneHot,ae.Difference]),new Set([ae.EUCLIDEAN,ae.MANHATTAN,ae.OneHot,ae.Difference]),new Set([ae.EUCLIDEAN,ae.MANHATTAN,ae.Difference]),new Set([ae.EUCLIDEAN,ae.MANHATTAN,ae.Difference]),new Set([ae.TANIMOTO,ae.COSINE,ae.SOKAL,ae.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(le||(le={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(ce||(ce={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(fe||(fe={})),Object.prototype.toString,(me=he||(he={})).UMAP="UMAP",me.T_SNE="t-SNE";const de=2,pe="MCL_OPTIONS";o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ge{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const ve="bypassLargeDataWarning",ye="show-scatterplot-progress";var we,Ee;(Ee=we||(we={})).EUCLIDEAN="EUCLIDEAN",Ee.MANHATTAN="MANHATTAN";const Ae=rxjs;var _e=e(3379),Ce=e.n(_e),be=e(7795),Ie=e.n(be),Ne=e(569),Se=e.n(Ne),Me=e(3565),Te=e.n(Me),Oe=e(9216),Pe=e.n(Oe),xe=e(4589),Le=e.n(xe),Re=e(9414),Fe={};Fe.styleTagTransform=Le(),Fe.setAttributes=Te(),Fe.insert=Se().bind(null,"head"),Fe.domAPI=Ie(),Fe.insertStyleElement=Pe(),Ce()(Re.Z,Fe),Re.Z&&Re.Z.locals&&Re.Z.locals;class Ue{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean",disableTooltip:"WebGPU is not available"},re().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class De{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class Be{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[he.UMAP]:new Ue,[he.T_SNE]:new De},this.dbScanParams=new ge,this.methodSettingsDivs=[],this.supportedFunctions={},this.methodSettingsAnchor=n.div(),this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.aggregationMethodInput=n.choiceInput("Aggregation",we.EUCLIDEAN,[we.EUCLIDEAN,we.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new Ae.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new Ge,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1;this.methodInput=n.choiceInput("Method",he.UMAP,[he.UMAP,he.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value]):(this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[])}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");this.columnOptEditors=t.map((t=>new ke(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])))));const e=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{e.appendChild(t.accordionDiv)}));const o=new Array(2*this.columnOptEditors.length).fill(null).map(((t,n)=>n%2==0?this.columnOptEditors[n/2].colOptEditors:[]));let i=0;const s=n.table(o,(t=>(i++,t&&t.length>0?t:[this.columnOptEditors[Math.floor((i-1)/2)].preprocessingFuncSettingsDiv=n.div([]),n.div(),n.div(),n.div()])),["Column","Encoding function","Similarity metric","Weight"]);this.columnOptEditors.forEach((t=>{t.preprocessingFuncSettingsDiv?.parentElement?.setAttribute("colspan","4"),t.preprocessingFuncSettingsDiv?.parentElement?.parentElement?.style?.setProperty("height","unset")})),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex"),s.classList.add("ml-dim-reduction-column-editor-table-root"),this.columnOptEditorsRoot.appendChild(s)}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t){this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[];const e=this.methodSettingsAnchor,r=e.parentElement;r&&Object.keys(t).forEach((o=>{const i=t[o],s="string"===i.type?n.stringInput(i.uiName,i.value??"",(()=>{i.value=s.value})):"boolean"===i.type?n.boolInput(i.uiName,i.value??!1,(()=>{i.value=s.value})):n.floatInput(i.uiName,i.value,(()=>{i.value=s.value}));i.disable?(s.enabled=!1,n.tooltip.bind(s.input??s.root,i.disableTooltip??"")):n.tooltip.bind(s.input??s.root,i.tooltip),r.insertBefore(s.root,e),this.methodSettingsDivs.push(s.root)}))}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsAnchor,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class ke{constructor(t,e){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.colOptEditors=[],this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Ve(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Ve(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Ve(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const o=this.supportedFunctions.find((n=>Ve(n.func)===t));this.getSimilarityMetricInput(o),n.empty(this.preprocessingFuncSettingsDiv),r=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let r=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{r=!r,r?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const o=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"});this.colOptEditors=[o,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root],n.tooltip.bind(o,this.column.name),this.colOptEditors.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const i=n.divH(this.colOptEditors,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(i),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Ve(t){return t.friendlyName??t.name}class Ge{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const qe="dimensionality-reducer-terminate-event",We=t=>null==t;class Ye extends Float32Array{}function He(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var ze;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(ze||(ze={}));const $e="copy";var Ke;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Ke||(Ke={}));const je="/help/transform/missing-values-imputation";var Xe;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Xe||(Xe={}));const Qe=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function Ze(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}var Je,tr,nr;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Je||(Je={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(tr||(tr={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}(nr||(nr={}));const er=1;function rr(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}function or(){let e=t.shell.t;if(null===e)return void t.shell.warning(ze.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>Qe.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!Qe.includes(e.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=Ze(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(ze.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(ze.ONE_AVAILABLE_FEATURE);let u=nr.IN_PLACE>0;const l=n.boolInput(Ke.IN_PLACE,u,(()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}));l.setTooltip(Xe.IN_PLACE);let c=nr.KEEP_EMPTY>0;const f=n.boolInput(Ke.KEEP_EMPTY,c,(()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}));f.setTooltip(Xe.KEEP_EMPTY);let h=nr.NEIGHBORS;const m=n.intInput(Ke.NEIGHBORS,h,(()=>{const t=m.value;null===t?m.value=h:t>=er?h=t:m.value=h}));m.setTooltip(Xe.NEIGHBORS);let d=tr.EUCLIDEAN;const p=n.choiceInput(Ke.DISTANCE,d,[tr.EUCLIDEAN,tr.MANHATTAN],(()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:tr.EUCLIDEAN}));p.setTooltip(Xe.DISTANCE);let g=r.map((t=>t.name));const v=n.columnsInput(Ke.COLUMNS,e,(()=>{g=v.value.map((t=>t.name)),A()}),{available:i,checked:i});v.setTooltip(Xe.TARGET);let y=s;const w=n.columnsInput(Ke.FEATURES,e,(()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),C.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()}),{available:s,checked:s});w.setTooltip(Xe.FEATURES);const E=()=>{I.getButton(Ke.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,b.hidden=!0},A=()=>{I.getButton(Ke.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!rr(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${ze.ONE_FEATURE_SELECTED} the column '${n}'`))}))},_=new Map,C=new Map,b=n.divV([]);b.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:nr.WEIGHT,defaultMetric:Je.ONE_HOT,availableMetrics:[Je.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:nr.WEIGHT,defaultMetric:Je.DIFFERENCE,availableMetrics:[Je.DIFFERENCE,Je.ONE_HOT]};default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);_.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.choiceInput(t,r.defaultMetric,r.availableMetrics,(()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,_.set(t,o)}));i.root.style.width="50%",i.setTooltip(Xe.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,_.set(t,o)})),a.setTooltip(Xe.WEIGHT);const u=n.divH([i.root,a.root]);C.set(t,u),b.append(u)}));const I=n.dialog({title:Ke.KNN_IMPUTER,helpUrl:je});t.shell.v.root.appendChild(I.root),b.hidden=!0,f.root.hidden=!rr(g,y,a);const N=n.icons.settings((()=>{b.hidden=!b.hidden}),Xe.METRIC_SETTINGS),S=n.divH([p.root,N]);I.addButton(Ke.RUN,(()=>{I.close(),s.filter((t=>!y.includes(t))).forEach((t=>_.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<er)throw new Error(ze.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(ze.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(ze.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(ze.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${ze.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${ze.KNN_FAILS}: ${ze.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!Qe.includes(l.byName(t).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!Qe.includes(n.getCol(e).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=Ze(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(Ze(e)),t.type){case Je.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Je.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),_=new Float32Array(g.length);let C=0;const b=new Array(a);let I=0,N=0,S=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{_[r]=y[e](g[e][t],g[e][n])}))},P=s===tr.EUCLIDEAN?()=>{let t=0;for(let n=0;n<C;++n)t+=_[n]*_[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<C;++n)t+=Math.abs(_[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<C;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{C=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[C]=n,++C)})(t),0===C)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);I=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){O(t,n);const e=P();if(I<a)b[I]={index:n,dist:e},++I;else{N=0,S=b[0].dist;for(let t=1;t<I;++t)S<b[t].dist&&(S=b[t].dist,N=t);e<S&&(b[N]={index:n,dist:e})}}if(0===I)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<I;++t)++p[d[b[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<I;++t)M+=d[b[t].index];return T=M/I,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${$e})`;for(;n.columns.contains(s);)s=`${e}(${$e} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,_,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!Qe.includes(r.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=Ze(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(ze.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n)}catch(n){n instanceof Error?t.shell.error(`${ze.KNN_FAILS}: ${n.message}`):t.shell.error(`${ze.KNN_FAILS}: ${ze.CORE_ISSUE}`)}})).add(v).add(w).add(S).add(b).add(m).add(l).add(f).show()}class ir extends Be{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity Threshold",80),this.maxIterationsInput=n.intInput("Max Iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),this.inflateInput=n.floatInput("Inflation Factor",de),re().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.setTooltip("WebGPU is not available"),this.useWebGPUInput.enabled=!1)}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.inflateInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1,inflateFactor:this.inflateInput.value??de}}}class sr{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=sr._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new sr(t._length);e._length=t._length,e._data=sr._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new sr(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new sr(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return sr.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new sr(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new sr(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new sr(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return sr.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=sr._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=sr._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=sr._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=sr._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=sr._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=sr._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}var ar;sr._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),sr._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),sr._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(ar||(ar={}));class ur{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=ar.none){var i;this._currentLineIdx=-1,this.lineClicked=new Ae.Subject,this.lineHover=new Ae.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new sr(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,_=null==E?void 0:E.y;const C=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&_&&Math.hypot(A-y,_-w)/C>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,_);const r=this.getPointOnDistance(y,w,A,_,g,n),o=this.getPointOnDistance(A,_,y,w,e,n);y=r.x,w=r.y,A=o.x,_=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,_,t):this.findControlPoint(m,A,_,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,_)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,_);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,_)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,_,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case ar.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case ar.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new sr(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new sr(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var lr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function cr(n,e){return lr(this,void 0,void 0,(function*(){const r=n.length,i=e.length,s=e.stats.avg,a=e.stats.stdev,u=new Float32Array(r+1).fill(0);if(u[r]=s,0===a||1===i)return u;try{const t=hr(r,i);if(t.toApplyPLS){const i=yield function(t,n,e){return lr(this,void 0,void 0,(function*(){return(yield zn({table:o.DataFrame.fromColumns([n]),features:t,predict:n,components:e,names:null})).regressionCoefficients.getRawData()}))}(n,e,t.components);let s=0;for(let t=0;t<r;++t)u[t]=i[t],s+=i[t]*n.byIndex(t).stats.avg;return u[r]-=s,u}const l=[],c=[],f=new Float32Array(r),h=new Float32Array(r);let m=0,g=0;for(const t of n){const n=t.stats;n.stdev>0&&(l.push(m),c.push(t),f[g]=n.avg,h[g]=n.stdev,++g),++m}if(0===g)return u;const v=function(t,n,e,r,o,i,s){return function(t,n,e){const r=t[n],o=r.arguments,i=[];let s=0;for(const t in o){const n=o[t];if("_callResult"!=t){switch(n.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":n.data=d[n.type](e[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=o[n.numOfRows.ref].data[n.numOfRows.value],r=o[n.numOfColumns.ref].data[n.numOfColumns.value];n.data=d[n.type](t,r);break;case"newFloatColumn":case"newIntColumn":const i=o[n.numOfRows.ref].data[n.numOfRows.value];n.data=d[n.type](i)}i.push(o[t].data)}}const a=function(t,n,e,r){let o;for(const n of r)n.allocateMemoryForBuffer(t);let i=!0;for(const t of r)i&=t.isMemoryForBufferAllocated();if(i){const e=[],i=[];for(const n of r)n.complementArrOfParams(e),n.complementArrOfTypes(i),n.putDataToBuffer(t);const s="number";o=t.ccall(n,s,i,e);for(const n of r)n.getDataFromBuffer(t)}for(const n of r)n.freeBuffer(t);if(null!=o)return o}(t,n,0,i);o._callResult=d.num(a);const u=r.output;if("objects"!=u.type)return p[u.type](o[u.source].data);const l=[];for(const t of u.source)l.push(o[t].data.data);return l}(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,n,e,r,o,i,s])}(o.DataFrame.fromColumns(c).columns,o.Column.fromFloat32Array("xAvgs",f,g),o.Column.fromFloat32Array("xStdevs",h,g),e,s,a,g+1).getRawData();for(let t=0;t<g;++t)u[l[t]]=v[t];u[r]=v[g]}catch(n){t.shell.error(`Fitted the trivial model: ${n instanceof Error?n.message:"due to the platform issue"}`)}return u}))}function fr(t,n){const e=t.length;if(e!==n.length-1)throw new Error("Incorrect parameters count");const r=t.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const u=n[e];let l=n[0];for(let t=0;t<i;++t)s[t]=u+l*a[t];for(let r=1;r<e;++r){a=t.byIndex(r).getRawData(),l=n[r];for(let t=0;t<i;++t)s[t]+=l*a[t]}return o.Column.fromFloat32Array(t.getUnusedName("prediction"),s,i)}const hr=(t,n)=>((t,n)=>8*n*(t+1)>=268435456)(t,n)||t>=1e3?{toApplyPLS:!0,components:10}:n>=1e6?{toApplyPLS:!0,components:Math.min(10,t)}:n<=t?{toApplyPLS:!0,components:Math.min(10,n)}:{toApplyPLS:!1,components:10};var mr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const dr=new o.Package;function pr(){t.shell.info(dr.webRoot)}function gr(){return mr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function vr(t,n,e,r,i){return mr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield ne(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function yr(n,r,o,i,s){return mr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return nt(this,void 0,void 0,(function*(){tt(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(261),e.b));a.postMessage(U(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(D(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function wr(n,e,r,i){return mr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield vr(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function Er(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function Ar(t,n){return{entries:t.toList(),options:{}}}function _r(){return mr(this,void 0,void 0,(function*(){const r=new Be,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>mr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function _(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}))),d[ye]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function C(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(qe,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(42),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(qe).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{We(e)||We(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[ve]?void 0:_))}catch(t){r(t)}})),C=await g;return w.close(),p.unsubscribe(),C}const b=await C();if(h&&b){const I=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const N=await ne(b[0],b[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>N[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{I.close()}}if(b){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>b[0][t])),O.init((t=>b[1][t])),p)try{const P=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[P]:T,[x]:O,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[ve])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show();i.helpUrl="https://datagrok.ai/help/explore/dim-reduction.md";const s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function Cr(e){try{const t=new ir;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>mr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU,inflate:n.inflateFactor}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),dr.logger.error(e,void 0,r)}}function br(n,e,r,i,s,a,u,l=80,c=10,f=!1,h=0){var m;return mr(this,void 0,void 0,(function*(){const d=null!==(m=t.shell.tableView(n.name))&&void 0!==m?m:t.shell.addTableView(n),p=JSON.stringify({cols:e.map((t=>t.name)),metrics:r,weights:i,aggregationMethod:s,preprocessingFuncs:a.map((t=>{var n;return null!==(n=null==t?void 0:t.name)&&void 0!==n?n:null})),preprocessingFuncArgs:u,threshold:l,maxIterations:c,useWebGPU:f,inflate:h});return n.setTag(pe,p),d.addViewer(o.VIEWER.SCATTER_PLOT,{title:"MCL",initializationFunction:"EDA:MCLInitializationFunction"})}))}function Ir(r){return mr(this,void 0,void 0,(function*(){const i=r.dataFrame;if(null===i)throw new Error("Data frame of the scatter plot is null");const s=i.getTag(pe);if(!s)throw new Error("MCL options tag on the dataFrame is not found");const a=JSON.parse(s),u=a.cols.map((t=>i.columns.byName(t))),l=a.preprocessingFuncs.map((t=>t?o.Func.byName(t):null)),c=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1,m=2,d){const p=t.shell.tableView(r.name)??t.shell.addTableView(r),g=d??p.scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(g.root,!0);const v=[],y=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});y.push({entries:s,options:a}),v.push(a??{})}else{const n=o[t].toList(),e={};y.push({entries:n,options:e}),v.push(e)}}const w=function(t,n,r,o,i,s,a=10,u=!1,l=2){const c=new Worker(new URL(e.p+e.u(231),e.b));let f;return c.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u,inflate:l}),{promise:new Promise(((t,n)=>{f=t,c.onmessage=n=>{setTimeout((()=>c.terminate()),100),t(n.data.res)},c.onerror=t=>{setTimeout((()=>c.terminate()),100),n(t)}})),terminate:()=>{try{f(null),c.terminate()}catch(t){console.error(t)}}}}(y.map((t=>t.entries)),c,s,a,i,v,f,h,m),E=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===g.props.title&&g.type===t.args?.viewer?.type&&(E.unsubscribe(),w.terminate())})),A=await w.promise;if(!A)return;const _=r.columns.getUnusedName("Cluster (MCL)"),C=r.columns.getUnusedName("EmbedX (MCL)"),b=r.columns.getUnusedName("EmbedY (MCL)"),I={};A.clusters.forEach((t=>{I[t]||(I[t]=0),I[t]++}));const N=new Uint32Array(A.embedX.length);for(let t=0;t<A.is.length;t++)N[A.is[t]]++,N[A.js[t]]++;const S=r.columns.getUnusedName("Cluster size (MCL)"),M=r.columns.getUnusedName("Connectivity (MCL)"),T=r.columns.addNewFloat(C);T.init((t=>A.embedX[t]));const O=r.columns.addNewFloat(b);O.init((t=>A.embedY[t]));const P=r.columns.addNewString(_);P.init((t=>A.clusters[t].toString()));const x=r.columns.addNewInt(S);x.init((t=>I[A.clusters[t]]));const L=r.columns.addNewInt(M);return L.init((t=>N[t])),g.props.xColumnName=C,g.props.yColumnName=b,g.props.colorColumnName=_,g.props.markerDefaultSize=5,E.unsubscribe(),new ur(g,C,b,{from:A.is,to:A.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},ar.none),n.setUpdateIndicator(g.root,!1),{sc:g,embedXCol:T,embedYCol:O,clusterCol:P,clusterCounterCol:x,connectivityCol:L}}(i,u,a.metrics,a.weights,a.aggregationMethod,l,a.preprocessingFuncArgs,a.threshold,a.maxIterations,a.useWebGPU,a.inflate,r);return null==c?void 0:c.sc}))}function Nr(t,n,e,r,o){return mr(this,void 0,void 0,(function*(){return yield zn({table:t,features:n,predict:e,components:r,names:o})}))}function Sr(){return mr(this,void 0,void 0,(function*(){yield $n(In.COMPUTE_COMPONENTS)}))}function Mr(){return mr(this,void 0,void 0,(function*(){yield $n(In.PERFORM_MVA)}))}function Tr(){return mr(this,void 0,void 0,(function*(){!function(){Wn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Vn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield $n(In.DEMO)}))}()}))}function Or(t,n,e,r,o,i){return mr(this,void 0,void 0,(function*(){return yield at(lt,[0,0],t,n,e,r,o,i)}))}function Pr(t,n,e,r,o,i,s){return mr(this,void 0,void 0,(function*(){return yield at(ft,[n,0],t,e,r,o,i,s)}))}function xr(t,n,e){return mr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:lt},t,n))}))}function Lr(t,n){return mr(this,void 0,void 0,(function*(){return yield Cn(t,n)}))}function Rr(t,n){return mr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Fr(t,n,e,r){return mr(this,void 0,void 0,(function*(){return En(0,r)}))}function Ur(t,n,e,r){return mr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ft,sigma:r},t,n))}))}function Dr(t,n){return mr(this,void 0,void 0,(function*(){return yield Cn(t,n)}))}function Br(t,n){return mr(this,void 0,void 0,(function*(){return bn(t,n)}))}function kr(t,n,e,r){return mr(this,void 0,void 0,(function*(){return En(0,r)}))}function Vr(t,n,e,r,o){return mr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ct,cParam:r,dParam:o},t,n))}))}function Gr(t,n){return mr(this,void 0,void 0,(function*(){return yield Cn(t,n)}))}function qr(t,n){return mr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Wr(t,n,e,r){return mr(this,void 0,void 0,(function*(){return En(0,r)}))}function Yr(t,n,e,r,o){return mr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ht,kappa:r,theta:o},t,n))}))}function Hr(t,n){return mr(this,void 0,void 0,(function*(){return yield Cn(t,n)}))}function zr(t,n){return mr(this,void 0,void 0,(function*(){return bn(t,n)}))}function $r(t,n,e,r){return mr(this,void 0,void 0,(function*(){return En(0,r)}))}function Kr(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Xn(e);const i=new Jn(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(Kn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(Kn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=jn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function jr(){or()}function Xr(n,e,r,i){return mr(this,void 0,void 0,(function*(){const s=performance.now(),a=yield cr(e,r),u=performance.now();console.log(`Fit: ${u-s} ms.`);const l=fr(e,a);console.log(`Predict: ${performance.now()-u} ms.`),l.name=n.columns.getUnusedName(l.name),n.columns.add(l),i&&t.shell.tableView(n.name).addViewer(o.VIEWER.SCATTER_PLOT,{xColumnName:r.name,yColumnName:l.name,showRegressionLine:!0})}))}function Qr(n,e,r,i,s,a){return function(n,e,r,i,s,a){const u=t.data.demo.randomWalk(n,e+1),l=u.columns,c=l.byIndex(e);c.name="y (noisy)";const f=c.getRawData(),h=new Float32Array(n).fill(a);let m=0,d=0,p=0,g=0;for(const t of l){t.name=`x${m}`,d=Math.random()*r,p=Math.random()*i;const o=t.getRawData();g=Math.random()*s;for(let t=0;t<n;++t)o[t]=d*o[t]+p,h[t]+=o[t]*g;if(++m,m===e)break}d=Math.random()*r,p=Math.random()*i;for(let t=0;t<n;++t)f[t]=d*f[t]+h[t];return l.add(o.Column.fromFloat32Array("y",h,n)),u}(n,e,r,i,s,a)}function Zr(t,n){return mr(this,void 0,void 0,(function*(){const e=t.columns,r=e.byName(n);e.remove(n);const o=yield cr(e,r);return new Uint8Array(o.buffer)}))}function Jr(t,n){const e=t.columns,r=new Float32Array(n.buffer);return o.DataFrame.fromColumns([fr(e,r)])}function to(t,n){for(const n of t.columns)if(n.type!==o.COLUMN_TYPE.INT&&n.type!==o.COLUMN_TYPE.FLOAT&&n.type!==o.COLUMN_TYPE.QNUM&&n.type!==o.COLUMN_TYPE.BIG_INT)return!1;return!0}})(),eda=r})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBRWpEaUwsR0FBU3FGLFlBQWMzcUQsVUFBVXE2QyxLQUFLLEVBQ2pDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzlDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBRWpEaUwsR0FBU3VGLFdBQWE3cUQsVUFBVXE2QyxLQUFLLEVBQ2hDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzlDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVB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QVdwYSxFQUFHMlYsUUFDZGhHLEVBQVN5SyxFQUFTdUcsT0FBTys3QixHQUMvQnRpQyxFQUFTbEwsT0FBT3d0QyxHQUNoQixNQUFNM2tCLFFBQWV1YSxHQUEwQmw0QixFQUFVekssR0FDekQsT0FBTyxJQUFJbnpCLFdBQVd1N0MsRUFBT3Y2QyxPQUNqQyxHQUNKLENBT08sU0FBU2dpRSxHQUFzQngvQyxFQUFJc0ssR0FDdEMsTUFBTThQLEVBQVdwYSxFQUFHMlYsUUFDZG9pQixFQUFTLElBQUlqNkMsYUFBYXdzQixFQUFNOXNCLFFBQ3RDLE9BQU8sd0JBQXlCLENBQUN3MkQsR0FBZ0M1NUIsRUFBVTJkLElBQy9FLENBT08sU0FBUzBuQixHQUE2QnovQyxFQUFJMDhDLEdBQzdDLElBQUssTUFBTS93RCxLQUFPcVUsRUFBRzJWLFFBQ2pCLEdBQUtocUIsRUFBSXBMLE9BQVMsbUJBQXdCb0wsRUFBSXBMLE9BQVMscUJBQTBCb0wsRUFBSXBMLE9BQVMsb0JBQXlCb0wsRUFBSXBMLE9BQVMsc0JBQ2hJLE9BQU8sRUFFZixPQUFPLENBQ1gsQyIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2Ric2Nhbi93YXNtL3dhc21EYnNjYW4uanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvY3NzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvanN0YXQvZGlzdC9qc3RhdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbS5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvZWRhLXRvb2xzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9kYXRhLWdlbmVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9FREFBUEkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3N2bS50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvcGxzL3Bscy1jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3Bscy9wbHMtdG9vbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3N0YXQtdG9vbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvZGJzY2FuL3dhc20vZGJzY2FuLXdvcmtlci1jcmVhdG9yLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL211bHRpLWNvbC1kaXN0YW5jZXMvd2ViR1BVLWFnZ3JlZ2F0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1tdWx0aWNvbC1kaXN0YW5jZXMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3R5cGVzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL3R5cGVzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvbWFyY292LWNsdXN0ZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC90eXBlcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZnVuY3Rpb25FZGl0b3JzL2RpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Z1bmN0aW9uRWRpdG9ycy9jb25zdHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC90eXBlcy5qcyIsIndlYnBhY2s6Ly9lZGEvZXh0ZXJuYWwgdmFyIFwicnhqc1wiIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL2Nzcy9zdHlsZXMuY3NzPzhjMDMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vbXVsdGktY29sdW1uLWRpbS1yZWR1Y3Rpb24tZWRpdG9yLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL2NvbnN0cy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3V0aWxzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9yZWR1Y2UtZGltZW5zaW9uYWxpdHkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24vdWktY29uc3RhbnRzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9taXNzaW5nLXZhbHVlcy1pbXB1dGF0aW9uL2tubi1pbXB1dGVyLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9taXNzaW5nLXZhbHVlcy1pbXB1dGF0aW9uL3VpLnRzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvbWNsLWVkaXRvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yZW5kZXItbGluZXMtb24tc3AuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3JlZ3Jlc3Npb24udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2VkYS11aS50cyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9lbWJlZGRpbmdzLXNwYWNlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWRpbS1yZWQtd29ya2VyLWNyZWF0b3IuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvY2x1c3RlcmluZy12aWV3LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCB2YXIgZXhwb3J0Q3BwRGJzY2FuTGliID0gKCgpID0+IHtcclxuICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdW5kZWZpbmVkO1xyXG4gIFxyXG4gIHJldHVybiAoXHJcbmZ1bmN0aW9uKGV4cG9ydENwcERic2NhbkxpYiA9IHt9KSAge1xyXG5cclxuLy8gaW5jbHVkZTogc2hlbGwuanNcclxuLy8gVGhlIE1vZHVsZSBvYmplY3Q6IE91ciBpbnRlcmZhY2UgdG8gdGhlIG91dHNpZGUgd29ybGQuIFdlIGltcG9ydFxyXG4vLyBhbmQgZXhwb3J0IHZhbHVlcyBvbiBpdC4gVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyBNb2R1bGUgY2FuIGJlIHVzZWQ6XHJcbi8vIDEuIE5vdCBkZWZpbmVkLiBXZSBjcmVhdGUgaXQgaGVyZVxyXG4vLyAyLiBBIGZ1bmN0aW9uIHBhcmFtZXRlciwgZnVuY3Rpb24oTW9kdWxlKSB7IC4uZ2VuZXJhdGVkIGNvZGUuLiB9XHJcbi8vIDMuIHByZS1ydW4gYXBwZW5kZWQgaXQsIHZhciBNb2R1bGUgPSB7fTsgLi5nZW5lcmF0ZWQgY29kZS4uXHJcbi8vIDQuIEV4dGVybmFsIHNjcmlwdCB0YWcgZGVmaW5lcyB2YXIgTW9kdWxlLlxyXG4vLyBXZSBuZWVkIHRvIGNoZWNrIGlmIE1vZHVsZSBhbHJlYWR5IGV4aXN0cyAoZS5nLiBjYXNlIDMgYWJvdmUpLlxyXG4vLyBTdWJzdGl0dXRpb24gd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFjdHVhbCBjb2RlIG9uIGxhdGVyIHN0YWdlIG9mIHRoZSBidWlsZCxcclxuLy8gdGhpcyB3YXkgQ2xvc3VyZSBDb21waWxlciB3aWxsIG5vdCBtYW5nbGUgaXQgKGUuZy4gY2FzZSA0LiBhYm92ZSkuXHJcbi8vIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBydW4gY2xvc3VyZSwgYW5kIGFsc28gdG8gdXNlIE1vZHVsZVxyXG4vLyBhZnRlciB0aGUgZ2VuZXJhdGVkIGNvZGUsIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lICAgdmFyIE1vZHVsZSA9IHt9O1xyXG4vLyBiZWZvcmUgdGhlIGNvZGUuIFRoZW4gdGhhdCBvYmplY3Qgd2lsbCBiZSB1c2VkIGluIHRoZSBjb2RlLCBhbmQgeW91XHJcbi8vIGNhbiBjb250aW51ZSB0byB1c2UgTW9kdWxlIGFmdGVyd2FyZHMgYXMgd2VsbC5cclxudmFyIE1vZHVsZSA9IHR5cGVvZiBleHBvcnRDcHBEYnNjYW5MaWIgIT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRDcHBEYnNjYW5MaWIgOiB7fTtcclxuXHJcbi8vIFNldCB1cCB0aGUgcHJvbWlzZSB0aGF0IGluZGljYXRlcyB0aGUgTW9kdWxlIGlzIGluaXRpYWxpemVkXHJcbnZhciByZWFkeVByb21pc2VSZXNvbHZlLCByZWFkeVByb21pc2VSZWplY3Q7XHJcbk1vZHVsZVsncmVhZHknXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gIHJlYWR5UHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xyXG4gIHJlYWR5UHJvbWlzZVJlamVjdCA9IHJlamVjdDtcclxufSk7XHJcblxyXG4vLyAtLXByZS1qc2VzIGFyZSBlbWl0dGVkIGFmdGVyIHRoZSBNb2R1bGUgaW50ZWdyYXRpb24gY29kZSwgc28gdGhhdCB0aGV5IGNhblxyXG4vLyByZWZlciB0byBNb2R1bGUgKGlmIHRoZXkgY2hvb3NlOyB0aGV5IGNhbiBhbHNvIGRlZmluZSBNb2R1bGUpXHJcblxyXG5cclxuLy8gU29tZXRpbWVzIGFuIGV4aXN0aW5nIE1vZHVsZSBvYmplY3QgZXhpc3RzIHdpdGggcHJvcGVydGllc1xyXG4vLyBtZWFudCB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgbW9kdWxlIGZ1bmN0aW9uYWxpdHkuIEhlcmVcclxuLy8gd2UgY29sbGVjdCB0aG9zZSBwcm9wZXJ0aWVzIGFuZCByZWFwcGx5IF9hZnRlcl8gd2UgY29uZmlndXJlXHJcbi8vIHRoZSBjdXJyZW50IGVudmlyb25tZW50J3MgZGVmYXVsdHMgdG8gYXZvaWQgaGF2aW5nIHRvIGJlIHNvXHJcbi8vIGRlZmVuc2l2ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXHJcbnZhciBtb2R1bGVPdmVycmlkZXMgPSBPYmplY3QuYXNzaWduKHt9LCBNb2R1bGUpO1xyXG5cclxudmFyIGFyZ3VtZW50c18gPSBbXTtcclxudmFyIHRoaXNQcm9ncmFtID0gJy4vdGhpcy5wcm9ncmFtJztcclxudmFyIHF1aXRfID0gKHN0YXR1cywgdG9UaHJvdykgPT4ge1xyXG4gIHRocm93IHRvVGhyb3c7XHJcbn07XHJcblxyXG4vLyBEZXRlcm1pbmUgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgd2UgYXJlIGluLiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJ5XHJcbi8vIHNldHRpbmcgdGhlIEVOVklST05NRU5UIHNldHRpbmcgYXQgY29tcGlsZSB0aW1lIChzZWUgc2V0dGluZ3MuanMpLlxyXG5cclxuLy8gQXR0ZW1wdCB0byBhdXRvLWRldGVjdCB0aGUgZW52aXJvbm1lbnRcclxudmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCc7XHJcbnZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVIgPSB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PSAnZnVuY3Rpb24nO1xyXG4vLyBOLmIuIEVsZWN0cm9uLmpzIGVudmlyb25tZW50IGlzIHNpbXVsdGFuZW91c2x5IGEgTk9ERS1lbnZpcm9ubWVudCwgYnV0XHJcbi8vIGFsc28gYSB3ZWIgZW52aXJvbm1lbnQuXHJcbnZhciBFTlZJUk9OTUVOVF9JU19OT0RFID0gdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSA9PSAnc3RyaW5nJztcclxudmFyIEVOVklST05NRU5UX0lTX1NIRUxMID0gIUVOVklST05NRU5UX0lTX1dFQiAmJiAhRU5WSVJPTk1FTlRfSVNfTk9ERSAmJiAhRU5WSVJPTk1FTlRfSVNfV09SS0VSO1xyXG5cclxuLy8gYC9gIHNob3VsZCBiZSBwcmVzZW50IGF0IHRoZSBlbmQgaWYgYHNjcmlwdERpcmVjdG9yeWAgaXMgbm90IGVtcHR5XHJcbnZhciBzY3JpcHREaXJlY3RvcnkgPSAnJztcclxuZnVuY3Rpb24gbG9jYXRlRmlsZShwYXRoKSB7XHJcbiAgaWYgKE1vZHVsZVsnbG9jYXRlRmlsZSddKSB7XHJcbiAgICByZXR1cm4gTW9kdWxlWydsb2NhdGVGaWxlJ10ocGF0aCwgc2NyaXB0RGlyZWN0b3J5KTtcclxuICB9XHJcbiAgcmV0dXJuIHNjcmlwdERpcmVjdG9yeSArIHBhdGg7XHJcbn1cclxuXHJcbi8vIEhvb2tzIHRoYXQgYXJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IGluIGRpZmZlcmVudCBydW50aW1lIGVudmlyb25tZW50cy5cclxudmFyIHJlYWRfLFxyXG4gICAgcmVhZEFzeW5jLFxyXG4gICAgcmVhZEJpbmFyeSxcclxuICAgIHNldFdpbmRvd1RpdGxlO1xyXG5cclxuLy8gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgTm9kZS5qcyB3b3JrZXJzIHdoZW4gcmVsZXZhbnQgKHB0aHJlYWRzIGlzIGVuYWJsZWQpLlxyXG4vLyBOb2RlLmpzIHdvcmtlcnMgYXJlIGRldGVjdGVkIGFzIGEgY29tYmluYXRpb24gb2YgRU5WSVJPTk1FTlRfSVNfV09SS0VSIGFuZFxyXG4vLyBFTlZJUk9OTUVOVF9JU19OT0RFLlxyXG5pZiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikge1xyXG4gIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHsgLy8gQ2hlY2sgd29ya2VyLCBub3Qgd2ViLCBzaW5jZSB3aW5kb3cgY291bGQgYmUgcG9seWZpbGxlZFxyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gc2VsZi5sb2NhdGlvbi5ocmVmO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpIHsgLy8gd2ViXHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcclxuICB9XHJcbiAgLy8gV2hlbiBNT0RVTEFSSVpFLCB0aGlzIEpTIG1heSBiZSBleGVjdXRlZCBsYXRlciwgYWZ0ZXIgZG9jdW1lbnQuY3VycmVudFNjcmlwdFxyXG4gIC8vIGlzIGdvbmUsIHNvIHdlIHNhdmVkIGl0LCBhbmQgd2UgdXNlIGl0IGhlcmUgaW5zdGVhZCBvZiBhbnkgb3RoZXIgaW5mby5cclxuICBpZiAoX3NjcmlwdERpcikge1xyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gX3NjcmlwdERpcjtcclxuICB9XHJcbiAgLy8gYmxvYiB1cmxzIGxvb2sgbGlrZSBibG9iOmh0dHA6Ly9zaXRlLmNvbS9ldGMvZXRjIGFuZCB3ZSBjYW5ub3QgaW5mZXIgYW55dGhpbmcgZnJvbSB0aGVtLlxyXG4gIC8vIG90aGVyd2lzZSwgc2xpY2Ugb2ZmIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSB1cmwgdG8gZmluZCB0aGUgc2NyaXB0IGRpcmVjdG9yeS5cclxuICAvLyBpZiBzY3JpcHREaXJlY3RvcnkgZG9lcyBub3QgY29udGFpbiBhIHNsYXNoLCBsYXN0SW5kZXhPZiB3aWxsIHJldHVybiAtMSxcclxuICAvLyBhbmQgc2NyaXB0RGlyZWN0b3J5IHdpbGwgY29ycmVjdGx5IGJlIHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxyXG4gIC8vIElmIHNjcmlwdERpcmVjdG9yeSBjb250YWlucyBhIHF1ZXJ5IChzdGFydGluZyB3aXRoID8pIG9yIGEgZnJhZ21lbnQgKHN0YXJ0aW5nIHdpdGggIyksXHJcbiAgLy8gdGhleSBhcmUgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY291bGQgY29udGFpbiBhIHNsYXNoLlxyXG4gIGlmIChzY3JpcHREaXJlY3RvcnkuaW5kZXhPZignYmxvYjonKSAhPT0gMCkge1xyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gc2NyaXB0RGlyZWN0b3J5LnN1YnN0cigwLCBzY3JpcHREaXJlY3RvcnkucmVwbGFjZSgvWz8jXS4qLywgXCJcIikubGFzdEluZGV4T2YoJy8nKSsxKTtcclxuICB9IGVsc2Uge1xyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gJyc7XHJcbiAgfVxyXG5cclxuICAvLyBEaWZmZXJlbnRpYXRlIHRoZSBXZWIgV29ya2VyIGZyb20gdGhlIE5vZGUgV29ya2VyIGNhc2UsIGFzIHJlYWRpbmcgbXVzdFxyXG4gIC8vIGJlIGRvbmUgZGlmZmVyZW50bHkuXHJcbiAge1xyXG4vLyBpbmNsdWRlOiB3ZWJfb3Jfd29ya2VyX3NoZWxsX3JlYWQuanNcclxucmVhZF8gPSAodXJsKSA9PiB7XHJcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpO1xyXG4gICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7XHJcbiAgfVxyXG5cclxuICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XHJcbiAgICByZWFkQmluYXJ5ID0gKHVybCkgPT4ge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XHJcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XHJcbiAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KC8qKiBAdHlwZXshQXJyYXlCdWZmZXJ9ICovKHhoci5yZXNwb25zZSkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlYWRBc3luYyA9ICh1cmwsIG9ubG9hZCwgb25lcnJvcikgPT4ge1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCB8fCAoeGhyLnN0YXR1cyA9PSAwICYmIHhoci5yZXNwb25zZSkpIHsgLy8gZmlsZSBVUkxzIGNhbiByZXR1cm4gMFxyXG4gICAgICAgIG9ubG9hZCh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBvbmVycm9yKCk7XHJcbiAgICB9O1xyXG4gICAgeGhyLm9uZXJyb3IgPSBvbmVycm9yO1xyXG4gICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHdlYl9vcl93b3JrZXJfc2hlbGxfcmVhZC5qc1xyXG4gIH1cclxuXHJcbiAgc2V0V2luZG93VGl0bGUgPSAodGl0bGUpID0+IGRvY3VtZW50LnRpdGxlID0gdGl0bGU7XHJcbn0gZWxzZVxyXG57XHJcbn1cclxuXHJcbnZhciBvdXQgPSBNb2R1bGVbJ3ByaW50J10gfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcclxudmFyIGVyciA9IE1vZHVsZVsncHJpbnRFcnInXSB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcclxuXHJcbi8vIE1lcmdlIGJhY2sgaW4gdGhlIG92ZXJyaWRlc1xyXG5PYmplY3QuYXNzaWduKE1vZHVsZSwgbW9kdWxlT3ZlcnJpZGVzKTtcclxuLy8gRnJlZSB0aGUgb2JqZWN0IGhpZXJhcmNoeSBjb250YWluZWQgaW4gdGhlIG92ZXJyaWRlcywgdGhpcyBsZXRzIHRoZSBHQ1xyXG4vLyByZWNsYWltIGRhdGEgdXNlZCBlLmcuIGluIG1lbW9yeUluaXRpYWxpemVyUmVxdWVzdCwgd2hpY2ggaXMgYSBsYXJnZSB0eXBlZCBhcnJheS5cclxubW9kdWxlT3ZlcnJpZGVzID0gbnVsbDtcclxuXHJcbi8vIEVtaXQgY29kZSB0byBoYW5kbGUgZXhwZWN0ZWQgdmFsdWVzIG9uIHRoZSBNb2R1bGUgb2JqZWN0LiBUaGlzIGFwcGxpZXMgTW9kdWxlLnhcclxuLy8gdG8gdGhlIHByb3BlciBsb2NhbCB4LiBUaGlzIGhhcyB0d28gYmVuZWZpdHM6IGZpcnN0LCB3ZSBvbmx5IGVtaXQgaXQgaWYgaXQgaXNcclxuLy8gZXhwZWN0ZWQgdG8gYXJyaXZlLCBhbmQgc2Vjb25kLCBieSB1c2luZyBhIGxvY2FsIGV2ZXJ5d2hlcmUgZWxzZSB0aGF0IGNhbiBiZVxyXG4vLyBtaW5pZmllZC5cclxuXHJcbmlmIChNb2R1bGVbJ2FyZ3VtZW50cyddKSBhcmd1bWVudHNfID0gTW9kdWxlWydhcmd1bWVudHMnXTtcclxuXHJcbmlmIChNb2R1bGVbJ3RoaXNQcm9ncmFtJ10pIHRoaXNQcm9ncmFtID0gTW9kdWxlWyd0aGlzUHJvZ3JhbSddO1xyXG5cclxuaWYgKE1vZHVsZVsncXVpdCddKSBxdWl0XyA9IE1vZHVsZVsncXVpdCddO1xyXG5cclxuLy8gcGVyZm9ybSBhc3NlcnRpb25zIGluIHNoZWxsLmpzIGFmdGVyIHdlIHNldCB1cCBvdXQoKSBhbmQgZXJyKCksIGFzIG90aGVyd2lzZSBpZiBhbiBhc3NlcnRpb24gZmFpbHMgaXQgY2Fubm90IHByaW50IHRoZSBtZXNzYWdlXHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHNoZWxsLmpzXHJcbi8vIGluY2x1ZGU6IHByZWFtYmxlLmpzXHJcbi8vID09PSBQcmVhbWJsZSBsaWJyYXJ5IHN0dWZmID09PVxyXG5cclxuLy8gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIHB1YmxpYyBBUElzIGRlZmluZWQgaW4gdGhpcyBmaWxlIG11c3QgYmUgdXBkYXRlZCBpbjpcclxuLy8gICAgc2l0ZS9zb3VyY2UvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLnJzdFxyXG4vLyBBIHByZWJ1aWx0IGxvY2FsIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0OlxyXG4vLyAgICBzaXRlL2J1aWxkL3RleHQvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLnR4dFxyXG4vLyBZb3UgY2FuIGFsc28gYnVpbGQgZG9jcyBsb2NhbGx5IGFzIEhUTUwgb3Igb3RoZXIgZm9ybWF0cyBpbiBzaXRlL1xyXG4vLyBBbiBvbmxpbmUgSFRNTCB2ZXJzaW9uICh3aGljaCBtYXkgYmUgb2YgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBFbXNjcmlwdGVuKVxyXG4vLyAgICBpcyB1cCBhdCBodHRwOi8va3JpcGtlbi5naXRodWIuaW8vZW1zY3JpcHRlbi1zaXRlL2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy5odG1sXHJcblxyXG52YXIgd2FzbUJpbmFyeTtcclxuaWYgKE1vZHVsZVsnd2FzbUJpbmFyeSddKSB3YXNtQmluYXJ5ID0gTW9kdWxlWyd3YXNtQmluYXJ5J107XHJcbnZhciBub0V4aXRSdW50aW1lID0gTW9kdWxlWydub0V4aXRSdW50aW1lJ10gfHwgdHJ1ZTtcclxuXHJcbmlmICh0eXBlb2YgV2ViQXNzZW1ibHkgIT0gJ29iamVjdCcpIHtcclxuICBhYm9ydCgnbm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCcpO1xyXG59XHJcblxyXG4vLyBXYXNtIGdsb2JhbHNcclxuXHJcbnZhciB3YXNtTWVtb3J5O1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vIFJ1bnRpbWUgZXNzZW50aWFsc1xyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8vIHdoZXRoZXIgd2UgYXJlIHF1aXR0aW5nIHRoZSBhcHBsaWNhdGlvbi4gbm8gY29kZSBzaG91bGQgcnVuIGFmdGVyIHRoaXMuXHJcbi8vIHNldCBpbiBleGl0KCkgYW5kIGFib3J0KClcclxudmFyIEFCT1JUID0gZmFsc2U7XHJcblxyXG4vLyBzZXQgYnkgZXhpdCgpIGFuZCBhYm9ydCgpLiAgUGFzc2VkIHRvICdvbkV4aXQnIGhhbmRsZXIuXHJcbi8vIE5PVEU6IFRoaXMgaXMgYWxzbyB1c2VkIGFzIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlIGNvZGUgaW4gc2hlbGwgZW52aXJvbm1lbnRzXHJcbi8vIGJ1dCBvbmx5IHdoZW4gbm9FeGl0UnVudGltZSBpcyBmYWxzZS5cclxudmFyIEVYSVRTVEFUVVM7XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKCosIHN0cmluZz0pfSAqL1xyXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCB0ZXh0KSB7XHJcbiAgaWYgKCFjb25kaXRpb24pIHtcclxuICAgIC8vIFRoaXMgYnVpbGQgd2FzIGNyZWF0ZWQgd2l0aG91dCBBU1NFUlRJT05TIGRlZmluZWQuICBgYXNzZXJ0KClgIHNob3VsZCBub3RcclxuICAgIC8vIGV2ZXIgYmUgY2FsbGVkIGluIHRoaXMgY29uZmlndXJhdGlvbiBidXQgaW4gY2FzZSB0aGVyZSBhcmUgY2FsbGVycyBpblxyXG4gICAgLy8gdGhlIHdpbGQgbGVhdmUgdGhpcyBzaW1wbGUgYWJvcnQoKSBpbXBsZW1lbmF0aW9uIGhlcmUgZm9yIG5vdy5cclxuICAgIGFib3J0KHRleHQpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gTWVtb3J5IG1hbmFnZW1lbnRcclxuXHJcbnZhciBIRUFQLFxyXG4vKiogQHR5cGUgeyFJbnQ4QXJyYXl9ICovXHJcbiAgSEVBUDgsXHJcbi8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovXHJcbiAgSEVBUFU4LFxyXG4vKiogQHR5cGUgeyFJbnQxNkFycmF5fSAqL1xyXG4gIEhFQVAxNixcclxuLyoqIEB0eXBlIHshVWludDE2QXJyYXl9ICovXHJcbiAgSEVBUFUxNixcclxuLyoqIEB0eXBlIHshSW50MzJBcnJheX0gKi9cclxuICBIRUFQMzIsXHJcbi8qKiBAdHlwZSB7IVVpbnQzMkFycmF5fSAqL1xyXG4gIEhFQVBVMzIsXHJcbi8qKiBAdHlwZSB7IUZsb2F0MzJBcnJheX0gKi9cclxuICBIRUFQRjMyLFxyXG4vKiogQHR5cGUgeyFGbG9hdDY0QXJyYXl9ICovXHJcbiAgSEVBUEY2NDtcclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZU1lbW9yeVZpZXdzKCkge1xyXG4gIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XHJcbiAgTW9kdWxlWydIRUFQOCddID0gSEVBUDggPSBuZXcgSW50OEFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUDE2J10gPSBIRUFQMTYgPSBuZXcgSW50MTZBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVAzMiddID0gSEVBUDMyID0gbmV3IEludDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTgnXSA9IEhFQVBVOCA9IG5ldyBVaW50OEFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFUxNiddID0gSEVBUFUxNiA9IG5ldyBVaW50MTZBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVMzInXSA9IEhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQRjMyJ10gPSBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBGNjQnXSA9IEhFQVBGNjQgPSBuZXcgRmxvYXQ2NEFycmF5KGIpO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX2luaXRfdGFibGUuanNcclxuLy8gSW4gcmVndWxhciBub24tUkVMT0NBVEFCTEUgbW9kZSB0aGUgdGFibGUgaXMgZXhwb3J0ZWRcclxuLy8gZnJvbSB0aGUgd2FzbSBtb2R1bGUgYW5kIHRoaXMgd2lsbCBiZSBhc3NpZ25lZCBvbmNlXHJcbi8vIHRoZSBleHBvcnRzIGFyZSBhdmFpbGFibGUuXHJcbnZhciB3YXNtVGFibGU7XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9pbml0X3RhYmxlLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfc3RhY2tfY2hlY2suanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfc3RhY2tfY2hlY2suanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9hc3NlcnRpb25zLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2Fzc2VydGlvbnMuanNcclxudmFyIF9fQVRQUkVSVU5fXyAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBiZWZvcmUgdGhlIHJ1bnRpbWUgaXMgaW5pdGlhbGl6ZWRcclxudmFyIF9fQVRJTklUX18gICAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc3RhcnR1cFxyXG52YXIgX19BVEVYSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzaHV0ZG93blxyXG52YXIgX19BVFBPU1RSVU5fXyA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGFmdGVyIHRoZSBtYWluKCkgaXMgY2FsbGVkXHJcblxyXG52YXIgcnVudGltZUluaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG52YXIgcnVudGltZUtlZXBhbGl2ZUNvdW50ZXIgPSAwO1xyXG5cclxuZnVuY3Rpb24ga2VlcFJ1bnRpbWVBbGl2ZSgpIHtcclxuICByZXR1cm4gbm9FeGl0UnVudGltZSB8fCBydW50aW1lS2VlcGFsaXZlQ291bnRlciA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZVJ1bigpIHtcclxuICBpZiAoTW9kdWxlWydwcmVSdW4nXSkge1xyXG4gICAgaWYgKHR5cGVvZiBNb2R1bGVbJ3ByZVJ1biddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncHJlUnVuJ10gPSBbTW9kdWxlWydwcmVSdW4nXV07XHJcbiAgICB3aGlsZSAoTW9kdWxlWydwcmVSdW4nXS5sZW5ndGgpIHtcclxuICAgICAgYWRkT25QcmVSdW4oTW9kdWxlWydwcmVSdW4nXS5zaGlmdCgpKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFJ1bnRpbWUoKSB7XHJcbiAgcnVudGltZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgXHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RSdW4oKSB7XHJcblxyXG4gIGlmIChNb2R1bGVbJ3Bvc3RSdW4nXSkge1xyXG4gICAgaWYgKHR5cGVvZiBNb2R1bGVbJ3Bvc3RSdW4nXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3Bvc3RSdW4nXSA9IFtNb2R1bGVbJ3Bvc3RSdW4nXV07XHJcbiAgICB3aGlsZSAoTW9kdWxlWydwb3N0UnVuJ10ubGVuZ3RoKSB7XHJcbiAgICAgIGFkZE9uUG9zdFJ1bihNb2R1bGVbJ3Bvc3RSdW4nXS5zaGlmdCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQT1NUUlVOX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPblByZVJ1bihjYikge1xyXG4gIF9fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25Jbml0KGNiKSB7XHJcbiAgX19BVElOSVRfXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25FeGl0KGNiKSB7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uUG9zdFJ1bihjYikge1xyXG4gIF9fQVRQT1NUUlVOX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfbWF0aC5qc1xyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2ltdWxcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvZnJvdW5kXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3RydW5jXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9tYXRoLmpzXHJcbi8vIEEgY291bnRlciBvZiBkZXBlbmRlbmNpZXMgZm9yIGNhbGxpbmcgcnVuKCkuIElmIHdlIG5lZWQgdG9cclxuLy8gZG8gYXN5bmNocm9ub3VzIHdvcmsgYmVmb3JlIHJ1bm5pbmcsIGluY3JlbWVudCB0aGlzIGFuZFxyXG4vLyBkZWNyZW1lbnQgaXQuIEluY3JlbWVudGluZyBtdXN0IGhhcHBlbiBpbiBhIHBsYWNlIGxpa2VcclxuLy8gTW9kdWxlLnByZVJ1biAodXNlZCBieSBlbWNjIHRvIGFkZCBmaWxlIHByZWxvYWRpbmcpLlxyXG4vLyBOb3RlIHRoYXQgeW91IGNhbiBhZGQgZGVwZW5kZW5jaWVzIGluIHByZVJ1biwgZXZlbiB0aG91Z2hcclxuLy8gaXQgaGFwcGVucyByaWdodCBiZWZvcmUgcnVuIC0gcnVuIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsXHJcbi8vIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cclxudmFyIHJ1bkRlcGVuZGVuY2llcyA9IDA7XHJcbnZhciBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XHJcbnZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsOyAvLyBvdmVycmlkZGVuIHRvIHRha2UgZGlmZmVyZW50IGFjdGlvbnMgd2hlbiBhbGwgcnVuIGRlcGVuZGVuY2llcyBhcmUgZnVsZmlsbGVkXHJcblxyXG5mdW5jdGlvbiBnZXRVbmlxdWVSdW5EZXBlbmRlbmN5KGlkKSB7XHJcbiAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKSB7XHJcbiAgcnVuRGVwZW5kZW5jaWVzKys7XHJcblxyXG4gIGlmIChNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXSkge1xyXG4gICAgTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10ocnVuRGVwZW5kZW5jaWVzKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7XHJcbiAgcnVuRGVwZW5kZW5jaWVzLS07XHJcblxyXG4gIGlmIChNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXSkge1xyXG4gICAgTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10ocnVuRGVwZW5kZW5jaWVzKTtcclxuICB9XHJcblxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPT0gMCkge1xyXG4gICAgaWYgKHJ1bkRlcGVuZGVuY3lXYXRjaGVyICE9PSBudWxsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwocnVuRGVwZW5kZW5jeVdhdGNoZXIpO1xyXG4gICAgICBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKSB7XHJcbiAgICAgIHZhciBjYWxsYmFjayA9IGRlcGVuZGVuY2llc0Z1bGZpbGxlZDtcclxuICAgICAgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDtcclxuICAgICAgY2FsbGJhY2soKTsgLy8gY2FuIGFkZCBhbm90aGVyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqIEBwYXJhbSB7c3RyaW5nfG51bWJlcj19IHdoYXQgKi9cclxuZnVuY3Rpb24gYWJvcnQod2hhdCkge1xyXG4gIGlmIChNb2R1bGVbJ29uQWJvcnQnXSkge1xyXG4gICAgTW9kdWxlWydvbkFib3J0J10od2hhdCk7XHJcbiAgfVxyXG5cclxuICB3aGF0ID0gJ0Fib3J0ZWQoJyArIHdoYXQgKyAnKSc7XHJcbiAgLy8gVE9ETyhzYmMpOiBTaG91bGQgd2UgcmVtb3ZlIHByaW50aW5nIGFuZCBsZWF2ZSBpdCB1cCB0byB3aG9ldmVyXHJcbiAgLy8gY2F0Y2hlcyB0aGUgZXhjZXB0aW9uP1xyXG4gIGVycih3aGF0KTtcclxuXHJcbiAgQUJPUlQgPSB0cnVlO1xyXG4gIEVYSVRTVEFUVVMgPSAxO1xyXG5cclxuICB3aGF0ICs9ICcuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uJztcclxuXHJcbiAgLy8gVXNlIGEgd2FzbSBydW50aW1lIGVycm9yLCBiZWNhdXNlIGEgSlMgZXJyb3IgbWlnaHQgYmUgc2VlbiBhcyBhIGZvcmVpZ25cclxuICAvLyBleGNlcHRpb24sIHdoaWNoIG1lYW5zIHdlJ2QgcnVuIGRlc3RydWN0b3JzIG9uIGl0LiBXZSBuZWVkIHRoZSBlcnJvciB0b1xyXG4gIC8vIHNpbXBseSBtYWtlIHRoZSBwcm9ncmFtIHN0b3AuXHJcbiAgLy8gRklYTUUgVGhpcyBhcHByb2FjaCBkb2VzIG5vdCB3b3JrIGluIFdhc20gRUggYmVjYXVzZSBpdCBjdXJyZW50bHkgZG9lcyBub3QgYXNzdW1lXHJcbiAgLy8gYWxsIFJ1bnRpbWVFcnJvcnMgYXJlIGZyb20gdHJhcHM7IGl0IGRlY2lkZXMgd2hldGhlciBhIFJ1bnRpbWVFcnJvciBpcyBmcm9tXHJcbiAgLy8gYSB0cmFwIG9yIG5vdCBiYXNlZCBvbiBhIGhpZGRlbiBmaWVsZCB3aXRoaW4gdGhlIG9iamVjdC4gU28gYXQgdGhlIG1vbWVudFxyXG4gIC8vIHdlIGRvbid0IGhhdmUgYSB3YXkgb2YgdGhyb3dpbmcgYSB3YXNtIHRyYXAgZnJvbSBKUy4gVE9ETyBNYWtlIGEgSlMgQVBJIHRoYXRcclxuICAvLyBhbGxvd3MgdGhpcyBpbiB0aGUgd2FzbSBzcGVjLlxyXG5cclxuICAvLyBTdXBwcmVzcyBjbG9zdXJlIGNvbXBpbGVyIHdhcm5pbmcgaGVyZS4gQ2xvc3VyZSBjb21waWxlcidzIGJ1aWx0aW4gZXh0ZXJuXHJcbiAgLy8gZGVmaW50aW9uIGZvciBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IgY2xhaW1zIGl0IHRha2VzIG5vIGFyZ3VtZW50cyBldmVuXHJcbiAgLy8gdGhvdWdoIGl0IGNhbi5cclxuICAvLyBUT0RPKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9wdWxsLzM5MTMpOiBSZW1vdmUgaWYvd2hlbiB1cHN0cmVhbSBjbG9zdXJlIGdldHMgZml4ZWQuXHJcbiAgLyoqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30gKi9cclxuICB2YXIgZSA9IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Iod2hhdCk7XHJcblxyXG4gIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcclxuICAvLyBUaHJvdyB0aGUgZXJyb3Igd2hldGhlciBvciBub3QgTU9EVUxBUklaRSBpcyBzZXQgYmVjYXVzZSBhYm9ydCBpcyB1c2VkXHJcbiAgLy8gaW4gY29kZSBwYXRocyBhcGFydCBmcm9tIGluc3RhbnRpYXRpb24gd2hlcmUgYW4gZXhjZXB0aW9uIGlzIGV4cGVjdGVkXHJcbiAgLy8gdG8gYmUgdGhyb3duIHdoZW4gYWJvcnQgaXMgY2FsbGVkLlxyXG4gIHRocm93IGU7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IG1lbW9yeXByb2ZpbGVyLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBtZW1vcnlwcm9maWxlci5qc1xyXG4vLyBpbmNsdWRlOiBVUklVdGlscy5qc1xyXG4vLyBQcmVmaXggb2YgZGF0YSBVUklzIGVtaXR0ZWQgYnkgU0lOR0xFX0ZJTEUgYW5kIHJlbGF0ZWQgb3B0aW9ucy5cclxudmFyIGRhdGFVUklQcmVmaXggPSAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCc7XHJcblxyXG4vLyBJbmRpY2F0ZXMgd2hldGhlciBmaWxlbmFtZSBpcyBhIGJhc2U2NCBkYXRhIFVSSS5cclxuZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lKSB7XHJcbiAgLy8gUHJlZml4IG9mIGRhdGEgVVJJcyBlbWl0dGVkIGJ5IFNJTkdMRV9GSUxFIGFuZCByZWxhdGVkIG9wdGlvbnMuXHJcbiAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZGF0YVVSSVByZWZpeCk7XHJcbn1cclxuXHJcbi8vIEluZGljYXRlcyB3aGV0aGVyIGZpbGVuYW1lIGlzIGRlbGl2ZXJlZCB2aWEgZmlsZSBwcm90b2NvbCAoYXMgb3Bwb3NlZCB0byBodHRwL2h0dHBzKVxyXG5mdW5jdGlvbiBpc0ZpbGVVUkkoZmlsZW5hbWUpIHtcclxuICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aCgnZmlsZTovLycpO1xyXG59XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogVVJJVXRpbHMuanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9leGNlcHRpb25zLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2V4Y2VwdGlvbnMuanNcclxudmFyIHdhc21CaW5hcnlGaWxlO1xyXG4gIHdhc21CaW5hcnlGaWxlID0gJ3dhc21EYnNjYW4ud2FzbSc7XHJcbiAgaWYgKCFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpKSB7XHJcbiAgICB3YXNtQmluYXJ5RmlsZSA9IGxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpO1xyXG4gIH1cclxuXHJcbmZ1bmN0aW9uIGdldEJpbmFyeShmaWxlKSB7XHJcbiAgdHJ5IHtcclxuICAgIGlmIChmaWxlID09IHdhc21CaW5hcnlGaWxlICYmIHdhc21CaW5hcnkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHdhc21CaW5hcnkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlYWRCaW5hcnkpIHtcclxuICAgICAgcmV0dXJuIHJlYWRCaW5hcnkoZmlsZSk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XHJcbiAgfVxyXG4gIGNhdGNoIChlcnIpIHtcclxuICAgIGFib3J0KGVycik7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpIHtcclxuICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoZSBiaW5hcnkgeWV0LCB0cnkgdG8gbG9hZCBpdCBhc3luY2hyb25vdXNseS5cclxuICAvLyBGZXRjaCBoYXMgc29tZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBvdmVyIFhIUiwgbGlrZSBpdCBjYW4ndCBiZSB1c2VkIG9uIGEgZmlsZTovLyB1cmwuXHJcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvcHVsbC85MiNpc3N1ZWNvbW1lbnQtMTQwNjY1OTMyXHJcbiAgLy8gQ29yZG92YSBvciBFbGVjdHJvbiBhcHBzIGFyZSB0eXBpY2FsbHkgbG9hZGVkIGZyb20gYSBmaWxlOi8vIHVybC5cclxuICAvLyBTbyB1c2UgZmV0Y2ggaWYgaXQgaXMgYXZhaWxhYmxlIGFuZCB0aGUgdXJsIGlzIG5vdCBhIGZpbGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gWEhSLlxyXG4gIGlmICghd2FzbUJpbmFyeSAmJiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikpIHtcclxuICAgIGlmICh0eXBlb2YgZmV0Y2ggPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmZXRjaChiaW5hcnlGaWxlLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlWydvayddKSB7XHJcbiAgICAgICAgICB0aHJvdyBcImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJ1wiICsgYmluYXJ5RmlsZSArIFwiJ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VbJ2FycmF5QnVmZmVyJ10oKTtcclxuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBPdGhlcndpc2UsIGdldEJpbmFyeSBzaG91bGQgYmUgYWJsZSB0byBnZXQgaXQgc3luY2hyb25vdXNseVxyXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpOyB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCByZWNlaXZlcikge1xyXG4gIHJldHVybiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpLnRoZW4oZnVuY3Rpb24oYmluYXJ5KSB7XHJcbiAgICByZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LCBpbXBvcnRzKTtcclxuICB9KS50aGVuKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gIH0pLnRoZW4ocmVjZWl2ZXIsIGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgZXJyKCdmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAnICsgcmVhc29uKTtcclxuXHJcbiAgICBhYm9ydChyZWFzb24pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFzeW5jKGJpbmFyeSwgYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spIHtcclxuICBpZiAoIWJpbmFyeSAmJlxyXG4gICAgICB0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcgPT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAhaXNEYXRhVVJJKGJpbmFyeUZpbGUpICYmXHJcbiAgICAgIHR5cGVvZiBmZXRjaCA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XHJcbiAgICAgIC8vIFN1cHByZXNzIGNsb3N1cmUgd2FybmluZyBoZXJlIHNpbmNlIHRoZSB1cHN0cmVhbSBkZWZpbml0aW9uIGZvclxyXG4gICAgICAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZyBvbmx5IGFsbG93cyBQcm9taXNlPFJlcHNwb25zZT4gcmF0aGVyIHRoYW5cclxuICAgICAgLy8gYW4gYWN0dWFsIFJlc3BvbnNlLlxyXG4gICAgICAvLyBUT0RPKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9wdWxsLzM5MTMpOiBSZW1vdmUgaWYvd2hlbiB1cHN0cmVhbSBjbG9zdXJlIGlzIGZpeGVkLlxyXG4gICAgICAvKiogQHN1cHByZXNzIHtjaGVja1R5cGVzfSAqL1xyXG4gICAgICB2YXIgcmVzdWx0ID0gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcocmVzcG9uc2UsIGltcG9ydHMpO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKFxyXG4gICAgICAgIGNhbGxiYWNrLFxyXG4gICAgICAgIGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgICAgICAgLy8gV2UgZXhwZWN0IHRoZSBtb3N0IGNvbW1vbiBmYWlsdXJlIGNhdXNlIHRvIGJlIGEgYmFkIE1JTUUgdHlwZSBmb3IgdGhlIGJpbmFyeSxcclxuICAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24gc2hvdWxkIHdvcmsuXHJcbiAgICAgICAgICBlcnIoJ3dhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAnICsgcmVhc29uKTtcclxuICAgICAgICAgIGVycignZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24nKTtcclxuICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBDcmVhdGUgdGhlIHdhc20gaW5zdGFuY2UuXHJcbi8vIFJlY2VpdmVzIHRoZSB3YXNtIGltcG9ydHMsIHJldHVybnMgdGhlIGV4cG9ydHMuXHJcbmZ1bmN0aW9uIGNyZWF0ZVdhc20oKSB7XHJcbiAgLy8gcHJlcGFyZSBpbXBvcnRzXHJcbiAgdmFyIGluZm8gPSB7XHJcbiAgICAnZW52Jzogd2FzbUltcG9ydHMsXHJcbiAgICAnd2FzaV9zbmFwc2hvdF9wcmV2aWV3MSc6IHdhc21JbXBvcnRzLFxyXG4gIH07XHJcbiAgLy8gTG9hZCB0aGUgd2FzbSBtb2R1bGUgYW5kIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB1c2luZyBuYXRpdmUgc3VwcG9ydCBpbiB0aGUgSlMgZW5naW5lLlxyXG4gIC8vIGhhbmRsZSBhIGdlbmVyYXRlZCB3YXNtIGluc3RhbmNlLCByZWNlaXZpbmcgaXRzIGV4cG9ydHMgYW5kXHJcbiAgLy8gcGVyZm9ybWluZyBvdGhlciBuZWNlc3Nhcnkgc2V0dXBcclxuICAvKiogQHBhcmFtIHtXZWJBc3NlbWJseS5Nb2R1bGU9fSBtb2R1bGUqL1xyXG4gIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSwgbW9kdWxlKSB7XHJcbiAgICB2YXIgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9ydHM7XHJcblxyXG4gICAgTW9kdWxlWydhc20nXSA9IGV4cG9ydHM7XHJcblxyXG4gICAgd2FzbU1lbW9yeSA9IE1vZHVsZVsnYXNtJ11bJ21lbW9yeSddO1xyXG4gICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcclxuXHJcbiAgICB3YXNtVGFibGUgPSBNb2R1bGVbJ2FzbSddWydfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlJ107XHJcblxyXG4gICAgYWRkT25Jbml0KE1vZHVsZVsnYXNtJ11bJ19fd2FzbV9jYWxsX2N0b3JzJ10pO1xyXG5cclxuICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koJ3dhc20taW5zdGFudGlhdGUnKTtcclxuXHJcbiAgICByZXR1cm4gZXhwb3J0cztcclxuICB9XHJcbiAgLy8gd2FpdCBmb3IgdGhlIHB0aHJlYWQgcG9vbCAoaWYgYW55KVxyXG4gIGFkZFJ1bkRlcGVuZGVuY3koJ3dhc20taW5zdGFudGlhdGUnKTtcclxuXHJcbiAgLy8gUHJlZmVyIHN0cmVhbWluZyBpbnN0YW50aWF0aW9uIGlmIGF2YWlsYWJsZS5cclxuICBmdW5jdGlvbiByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdChyZXN1bHQpIHtcclxuICAgIC8vICdyZXN1bHQnIGlzIGEgUmVzdWx0T2JqZWN0IG9iamVjdCB3aGljaCBoYXMgYm90aCB0aGUgbW9kdWxlIGFuZCBpbnN0YW5jZS5cclxuICAgIC8vIHJlY2VpdmVJbnN0YW5jZSgpIHdpbGwgc3dhcCBpbiB0aGUgZXhwb3J0cyAodG8gTW9kdWxlLmFzbSkgc28gdGhleSBjYW4gYmUgY2FsbGVkXHJcbiAgICAvLyBUT0RPOiBEdWUgdG8gQ2xvc3VyZSByZWdyZXNzaW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9pc3N1ZXMvMzE5MywgdGhlIGFib3ZlIGxpbmUgbm8gbG9uZ2VyIG9wdGltaXplcyBvdXQgZG93biB0byB0aGUgZm9sbG93aW5nIGxpbmUuXHJcbiAgICAvLyBXaGVuIHRoZSByZWdyZXNzaW9uIGlzIGZpeGVkLCBjYW4gcmVzdG9yZSB0aGUgYWJvdmUgUFRIUkVBRFMtZW5hYmxlZCBwYXRoLlxyXG4gICAgcmVjZWl2ZUluc3RhbmNlKHJlc3VsdFsnaW5zdGFuY2UnXSk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyIHNoZWxsIHBhZ2VzIGNhbiB3cml0ZSB0aGVpciBvd24gTW9kdWxlLmluc3RhbnRpYXRlV2FzbSA9IGZ1bmN0aW9uKGltcG9ydHMsIHN1Y2Nlc3NDYWxsYmFjaykgY2FsbGJhY2tcclxuICAvLyB0byBtYW51YWxseSBpbnN0YW50aWF0ZSB0aGUgV2FzbSBtb2R1bGUgdGhlbXNlbHZlcy4gVGhpcyBhbGxvd3MgcGFnZXMgdG9cclxuICAvLyBydW4gdGhlIGluc3RhbnRpYXRpb24gcGFyYWxsZWwgdG8gYW55IG90aGVyIGFzeW5jIHN0YXJ0dXAgYWN0aW9ucyB0aGV5IGFyZVxyXG4gIC8vIHBlcmZvcm1pbmcuXHJcbiAgLy8gQWxzbyBwdGhyZWFkcyBhbmQgd2FzbSB3b3JrZXJzIGluaXRpYWxpemUgdGhlIHdhc20gaW5zdGFuY2UgdGhyb3VnaCB0aGlzXHJcbiAgLy8gcGF0aC5cclxuICBpZiAoTW9kdWxlWydpbnN0YW50aWF0ZVdhc20nXSkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBNb2R1bGVbJ2luc3RhbnRpYXRlV2FzbSddKGluZm8sIHJlY2VpdmVJbnN0YW5jZSk7XHJcbiAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgZXJyKCdNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAnICsgZSk7XHJcbiAgICAgICAgLy8gSWYgaW5zdGFudGlhdGlvbiBmYWlscywgcmVqZWN0IHRoZSBtb2R1bGUgcmVhZHkgcHJvbWlzZS5cclxuICAgICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBJZiBpbnN0YW50aWF0aW9uIGZhaWxzLCByZWplY3QgdGhlIG1vZHVsZSByZWFkeSBwcm9taXNlLlxyXG4gIGluc3RhbnRpYXRlQXN5bmMod2FzbUJpbmFyeSwgd2FzbUJpbmFyeUZpbGUsIGluZm8sIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KS5jYXRjaChyZWFkeVByb21pc2VSZWplY3QpO1xyXG4gIHJldHVybiB7fTsgLy8gbm8gZXhwb3J0cyB5ZXQ7IHdlJ2xsIGZpbGwgdGhlbSBpbiBsYXRlclxyXG59XHJcblxyXG4vLyBHbG9iYWxzIHVzZWQgYnkgSlMgaTY0IGNvbnZlcnNpb25zIChzZWUgbWFrZVNldFZhbHVlKVxyXG52YXIgdGVtcERvdWJsZTtcclxudmFyIHRlbXBJNjQ7XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX2RlYnVnLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2RlYnVnLmpzXHJcbi8vID09PSBCb2R5ID09PVxyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBwcmVhbWJsZS5qc1xyXG5cclxuICAvKiogQGNvbnN0cnVjdG9yICovXHJcbiAgZnVuY3Rpb24gRXhpdFN0YXR1cyhzdGF0dXMpIHtcclxuICAgICAgdGhpcy5uYW1lID0gJ0V4aXRTdGF0dXMnO1xyXG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgnICsgc3RhdHVzICsgJyknO1xyXG4gICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gY2FsbFJ1bnRpbWVDYWxsYmFja3MoY2FsbGJhY2tzKSB7XHJcbiAgICAgIHdoaWxlIChjYWxsYmFja3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIFBhc3MgdGhlIG1vZHVsZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGdldFZhbHVlKHB0ciwgdHlwZSA9ICdpOCcpIHtcclxuICAgIGlmICh0eXBlLmVuZHNXaXRoKCcqJykpIHR5cGUgPSAnKic7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaTEnOiByZXR1cm4gSEVBUDhbKChwdHIpPj4wKV07XHJcbiAgICAgIGNhc2UgJ2k4JzogcmV0dXJuIEhFQVA4WygocHRyKT4+MCldO1xyXG4gICAgICBjYXNlICdpMTYnOiByZXR1cm4gSEVBUDE2WygocHRyKT4+MSldO1xyXG4gICAgICBjYXNlICdpMzInOiByZXR1cm4gSEVBUDMyWygocHRyKT4+MildO1xyXG4gICAgICBjYXNlICdpNjQnOiByZXR1cm4gSEVBUDMyWygocHRyKT4+MildO1xyXG4gICAgICBjYXNlICdmbG9hdCc6IHJldHVybiBIRUFQRjMyWygocHRyKT4+MildO1xyXG4gICAgICBjYXNlICdkb3VibGUnOiByZXR1cm4gSEVBUEY2NFsoKHB0cik+PjMpXTtcclxuICAgICAgY2FzZSAnKic6IHJldHVybiBIRUFQVTMyWygocHRyKT4+MildO1xyXG4gICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBnZXRWYWx1ZTogJyArIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIHNldFZhbHVlKHB0ciwgdmFsdWUsIHR5cGUgPSAnaTgnKSB7XHJcbiAgICBpZiAodHlwZS5lbmRzV2l0aCgnKicpKSB0eXBlID0gJyonO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2kxJzogSEVBUDhbKChwdHIpPj4wKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2k4JzogSEVBUDhbKChwdHIpPj4wKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2kxNic6IEhFQVAxNlsoKHB0cik+PjEpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTMyJzogSEVBUDMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpNjQnOiAodGVtcEk2NCA9IFt2YWx1ZT4+PjAsKHRlbXBEb3VibGU9dmFsdWUsKCsoTWF0aC5hYnModGVtcERvdWJsZSkpKSA+PSAxLjAgPyAodGVtcERvdWJsZSA+IDAuMCA/ICgoTWF0aC5taW4oKCsoTWF0aC5mbG9vcigodGVtcERvdWJsZSkvNDI5NDk2NzI5Ni4wKSkpLCA0Mjk0OTY3Mjk1LjApKXwwKT4+PjAgOiAofn4oKCsoTWF0aC5jZWlsKCh0ZW1wRG91YmxlIC0gKygoKH5+KHRlbXBEb3VibGUpKSk+Pj4wKSkvNDI5NDk2NzI5Ni4wKSkpKSk+Pj4wKSA6IDApXSxIRUFQMzJbKChwdHIpPj4yKV0gPSB0ZW1wSTY0WzBdLEhFQVAzMlsoKChwdHIpKyg0KSk+PjIpXSA9IHRlbXBJNjRbMV0pOyBicmVhaztcclxuICAgICAgY2FzZSAnZmxvYXQnOiBIRUFQRjMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdkb3VibGUnOiBIRUFQRjY0WygocHRyKT4+MyldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICcqJzogSEVBUFUzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgZGVmYXVsdDogYWJvcnQoJ2ludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICcgKyB0eXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAY29uc3RydWN0b3IgKi9cclxuICBmdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cikge1xyXG4gICAgICB0aGlzLmV4Y1B0ciA9IGV4Y1B0cjtcclxuICAgICAgdGhpcy5wdHIgPSBleGNQdHIgLSAyNDtcclxuICBcclxuICAgICAgdGhpcy5zZXRfdHlwZSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoNCkpPj4yKV0gPSB0eXBlO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF90eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg0KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uKGRlc3RydWN0b3IpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoOCkpPj4yKV0gPSBkZXN0cnVjdG9yO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg4KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKGNhdWdodCkge1xyXG4gICAgICAgIGNhdWdodCA9IGNhdWdodCA/IDEgOiAwO1xyXG4gICAgICAgIEhFQVA4WygoKHRoaXMucHRyKSsoMTIpKT4+MCldID0gY2F1Z2h0O1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9jYXVnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVA4WygoKHRoaXMucHRyKSsoMTIpKT4+MCldICE9IDA7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X3JldGhyb3duID0gZnVuY3Rpb24gKHJldGhyb3duKSB7XHJcbiAgICAgICAgcmV0aHJvd24gPSByZXRocm93biA/IDEgOiAwO1xyXG4gICAgICAgIEhFQVA4WygoKHRoaXMucHRyKSsoMTMpKT4+MCldID0gcmV0aHJvd247XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X3JldGhyb3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQOFsoKCh0aGlzLnB0cikrKDEzKSk+PjApXSAhPSAwO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICAvLyBJbml0aWFsaXplIG5hdGl2ZSBzdHJ1Y3R1cmUgZmllbGRzLiBTaG91bGQgYmUgY2FsbGVkIG9uY2UgYWZ0ZXIgYWxsb2NhdGVkLlxyXG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbih0eXBlLCBkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApO1xyXG4gICAgICAgIHRoaXMuc2V0X3R5cGUodHlwZSk7XHJcbiAgICAgICAgdGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbihhZGp1c3RlZFB0cikge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKygxNikpPj4yKV0gPSBhZGp1c3RlZFB0cjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCgodGhpcy5wdHIpKygxNikpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIEdldCBwb2ludGVyIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIHJlY2VpdmVkIGJ5IGNhdGNoIGNsYXVzZSBpbiBDKysgY29kZS4gSXQgbWF5IGJlIGFkanVzdGVkXHJcbiAgICAgIC8vIHdoZW4gdGhlIHBvaW50ZXIgaXMgY2FzdGVkIHRvIHNvbWUgb2YgdGhlIGV4Y2VwdGlvbiBvYmplY3QgYmFzZSBjbGFzc2VzIChlLmcuIHdoZW4gdmlydHVhbFxyXG4gICAgICAvLyBpbmhlcml0YW5jZSBpcyB1c2VkKS4gV2hlbiBhIHBvaW50ZXIgaXMgdGhyb3duIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIHRocm93biBwb2ludGVyXHJcbiAgICAgIC8vIGl0c2VsZi5cclxuICAgICAgdGhpcy5nZXRfZXhjZXB0aW9uX3B0ciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFdvcmsgYXJvdW5kIGEgZmFzdGNvbXAgYnVnLCB0aGlzIGNvZGUgaXMgc3RpbGwgaW5jbHVkZWQgZm9yIHNvbWUgcmVhc29uIGluIGEgYnVpbGQgd2l0aG91dFxyXG4gICAgICAgIC8vIGV4Y2VwdGlvbnMgc3VwcG9ydC5cclxuICAgICAgICB2YXIgaXNQb2ludGVyID0gX19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO1xyXG4gICAgICAgIGlmIChpc1BvaW50ZXIpIHtcclxuICAgICAgICAgIHJldHVybiBIRUFQVTMyWygodGhpcy5leGNQdHIpPj4yKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGp1c3RlZCA9IHRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO1xyXG4gICAgICAgIGlmIChhZGp1c3RlZCAhPT0gMCkgcmV0dXJuIGFkanVzdGVkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4Y1B0cjtcclxuICAgICAgfTtcclxuICAgIH1cclxuICBcclxuICB2YXIgZXhjZXB0aW9uTGFzdCA9IDA7XHJcbiAgXHJcbiAgdmFyIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQgPSAwO1xyXG4gIGZ1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsIHR5cGUsIGRlc3RydWN0b3IpIHtcclxuICAgICAgdmFyIGluZm8gPSBuZXcgRXhjZXB0aW9uSW5mbyhwdHIpO1xyXG4gICAgICAvLyBJbml0aWFsaXplIEV4Y2VwdGlvbkluZm8gY29udGVudCBhZnRlciBpdCB3YXMgYWxsb2NhdGVkIGluIF9fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbi5cclxuICAgICAgaW5mby5pbml0KHR5cGUsIGRlc3RydWN0b3IpO1xyXG4gICAgICBleGNlcHRpb25MYXN0ID0gcHRyO1xyXG4gICAgICB1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7XHJcbiAgICAgIHRocm93IGV4Y2VwdGlvbkxhc3Q7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9hYm9ydCgpIHtcclxuICAgICAgYWJvcnQoJycpO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnKGRlc3QsIHNyYywgbnVtKSB7XHJcbiAgICAgIEhFQVBVOC5jb3B5V2l0aGluKGRlc3QsIHNyYywgc3JjICsgbnVtKTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0SGVhcE1heCgpIHtcclxuICAgICAgLy8gU3RheSBvbmUgV2FzbSBwYWdlIHNob3J0IG9mIDRHQjogd2hpbGUgZS5nLiBDaHJvbWUgaXMgYWJsZSB0byBhbGxvY2F0ZVxyXG4gICAgICAvLyBmdWxsIDRHQiBXYXNtIG1lbW9yaWVzLCB0aGUgc2l6ZSB3aWxsIHdyYXAgYmFjayB0byAwIGJ5dGVzIGluIFdhc20gc2lkZVxyXG4gICAgICAvLyBmb3IgYW55IGNvZGUgdGhhdCBkZWFscyB3aXRoIGhlYXAgc2l6ZXMsIHdoaWNoIHdvdWxkIHJlcXVpcmUgc3BlY2lhbFxyXG4gICAgICAvLyBjYXNpbmcgYWxsIGhlYXAgc2l6ZSByZWxhdGVkIGNvZGUgdG8gdHJlYXQgMCBzcGVjaWFsbHkuXHJcbiAgICAgIHJldHVybiAyMTQ3NDgzNjQ4O1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIoc2l6ZSkge1xyXG4gICAgICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIHJvdW5kIHNpemUgZ3JvdyByZXF1ZXN0IHVwIHRvIHdhc20gcGFnZSBzaXplIChmaXhlZCA2NEtCIHBlciBzcGVjKVxyXG4gICAgICAgIHdhc21NZW1vcnkuZ3Jvdygoc2l6ZSAtIGIuYnl0ZUxlbmd0aCArIDY1NTM1KSA+Pj4gMTYpOyAvLyAuZ3JvdygpIHRha2VzIGEgZGVsdGEgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIHNpemVcclxuICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xyXG4gICAgICAgIHJldHVybiAxIC8qc3VjY2VzcyovO1xyXG4gICAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgfVxyXG4gICAgICAvLyBpbXBsaWNpdCAwIHJldHVybiB0byBzYXZlIGNvZGUgc2l6ZSAoY2FsbGVyIHdpbGwgY2FzdCBcInVuZGVmaW5lZFwiIGludG8gMFxyXG4gICAgICAvLyBhbnlob3cpXHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXAocmVxdWVzdGVkU2l6ZSkge1xyXG4gICAgICB2YXIgb2xkU2l6ZSA9IEhFQVBVOC5sZW5ndGg7XHJcbiAgICAgIHJlcXVlc3RlZFNpemUgPSByZXF1ZXN0ZWRTaXplID4+PiAwO1xyXG4gICAgICAvLyBXaXRoIG11bHRpdGhyZWFkZWQgYnVpbGRzLCByYWNlcyBjYW4gaGFwcGVuIChhbm90aGVyIHRocmVhZCBtaWdodCBpbmNyZWFzZSB0aGUgc2l6ZVxyXG4gICAgICAvLyBpbiBiZXR3ZWVuKSwgc28gcmV0dXJuIGEgZmFpbHVyZSwgYW5kIGxldCB0aGUgY2FsbGVyIHJldHJ5LlxyXG4gIFxyXG4gICAgICAvLyBNZW1vcnkgcmVzaXplIHJ1bGVzOlxyXG4gICAgICAvLyAxLiAgQWx3YXlzIGluY3JlYXNlIGhlYXAgc2l6ZSB0byBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIHNpemUsIHJvdW5kZWQgdXBcclxuICAgICAgLy8gICAgIHRvIG5leHQgcGFnZSBtdWx0aXBsZS5cclxuICAgICAgLy8gMmEuIElmIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgPT0gLTEsIGV4Y2Vzc2l2ZWx5IHJlc2l6ZSB0aGUgaGVhcFxyXG4gICAgICAvLyAgICAgZ2VvbWV0cmljYWxseTogaW5jcmVhc2UgdGhlIGhlYXAgc2l6ZSBhY2NvcmRpbmcgdG9cclxuICAgICAgLy8gICAgIE1FTU9SWV9HUk9XVEhfR0VPTUVUUklDX1NURVAgZmFjdG9yIChkZWZhdWx0ICsyMCUpLCBBdCBtb3N0XHJcbiAgICAgIC8vICAgICBvdmVycmVzZXJ2ZSBieSBNRU1PUllfR1JPV1RIX0dFT01FVFJJQ19DQVAgYnl0ZXMgKGRlZmF1bHQgOTZNQikuXHJcbiAgICAgIC8vIDJiLiBJZiBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQICE9IC0xLCBleGNlc3NpdmVseSByZXNpemUgdGhlIGhlYXBcclxuICAgICAgLy8gICAgIGxpbmVhcmx5OiBpbmNyZWFzZSB0aGUgaGVhcCBzaXplIGJ5IGF0IGxlYXN0XHJcbiAgICAgIC8vICAgICBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQIGJ5dGVzLlxyXG4gICAgICAvLyAzLiAgTWF4IHNpemUgZm9yIHRoZSBoZWFwIGlzIGNhcHBlZCBhdCAyMDQ4TUItV0FTTV9QQUdFX1NJWkUsIG9yIGJ5XHJcbiAgICAgIC8vICAgICBNQVhJTVVNX01FTU9SWSwgb3IgYnkgQVNBTiBsaW1pdCwgZGVwZW5kaW5nIG9uIHdoaWNoIGlzIHNtYWxsZXN0XHJcbiAgICAgIC8vIDQuICBJZiB3ZSB3ZXJlIHVuYWJsZSB0byBhbGxvY2F0ZSBhcyBtdWNoIG1lbW9yeSwgaXQgbWF5IGJlIGR1ZSB0b1xyXG4gICAgICAvLyAgICAgb3Zlci1lYWdlciBkZWNpc2lvbiB0byBleGNlc3NpdmVseSByZXNlcnZlIGR1ZSB0byAoMykgYWJvdmUuXHJcbiAgICAgIC8vICAgICBIZW5jZSBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzLCBjdXQgZG93biBvbiB0aGUgYW1vdW50IG9mIGV4Y2Vzc1xyXG4gICAgICAvLyAgICAgZ3Jvd3RoLCBpbiBhbiBhdHRlbXB0IHRvIHN1Y2NlZWQgdG8gcGVyZm9ybSBhIHNtYWxsZXIgYWxsb2NhdGlvbi5cclxuICBcclxuICAgICAgLy8gQSBsaW1pdCBpcyBzZXQgZm9yIGhvdyBtdWNoIHdlIGNhbiBncm93LiBXZSBzaG91bGQgbm90IGV4Y2VlZCB0aGF0XHJcbiAgICAgIC8vICh0aGUgd2FzbSBiaW5hcnkgc3BlY2lmaWVzIGl0LCBzbyBpZiB3ZSB0cmllZCwgd2UnZCBmYWlsIGFueWhvdykuXHJcbiAgICAgIHZhciBtYXhIZWFwU2l6ZSA9IGdldEhlYXBNYXgoKTtcclxuICAgICAgaWYgKHJlcXVlc3RlZFNpemUgPiBtYXhIZWFwU2l6ZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBsZXQgYWxpZ25VcCA9ICh4LCBtdWx0aXBsZSkgPT4geCArIChtdWx0aXBsZSAtIHggJSBtdWx0aXBsZSkgJSBtdWx0aXBsZTtcclxuICBcclxuICAgICAgLy8gTG9vcCB0aHJvdWdoIHBvdGVudGlhbCBoZWFwIHNpemUgaW5jcmVhc2VzLiBJZiB3ZSBhdHRlbXB0IGEgdG9vIGVhZ2VyXHJcbiAgICAgIC8vIHJlc2VydmF0aW9uIHRoYXQgZmFpbHMsIGN1dCBkb3duIG9uIHRoZSBhdHRlbXB0ZWQgc2l6ZSBhbmQgcmVzZXJ2ZSBhXHJcbiAgICAgIC8vIHNtYWxsZXIgYnVtcCBpbnN0ZWFkLiAobWF4IDMgdGltZXMsIGNob3NlbiBzb21ld2hhdCBhcmJpdHJhcmlseSlcclxuICAgICAgZm9yICh2YXIgY3V0RG93biA9IDE7IGN1dERvd24gPD0gNDsgY3V0RG93biAqPSAyKSB7XHJcbiAgICAgICAgdmFyIG92ZXJHcm93bkhlYXBTaXplID0gb2xkU2l6ZSAqICgxICsgMC4yIC8gY3V0RG93bik7IC8vIGVuc3VyZSBnZW9tZXRyaWMgZ3Jvd3RoXHJcbiAgICAgICAgLy8gYnV0IGxpbWl0IG92ZXJyZXNlcnZpbmcgKGRlZmF1bHQgdG8gY2FwcGluZyBhdCArOTZNQiBvdmVyZ3Jvd3RoIGF0IG1vc3QpXHJcbiAgICAgICAgb3Zlckdyb3duSGVhcFNpemUgPSBNYXRoLm1pbihvdmVyR3Jvd25IZWFwU2l6ZSwgcmVxdWVzdGVkU2l6ZSArIDEwMDY2MzI5NiApO1xyXG4gIFxyXG4gICAgICAgIHZhciBuZXdTaXplID0gTWF0aC5taW4obWF4SGVhcFNpemUsIGFsaWduVXAoTWF0aC5tYXgocmVxdWVzdGVkU2l6ZSwgb3Zlckdyb3duSGVhcFNpemUpLCA2NTUzNikpO1xyXG4gIFxyXG4gICAgICAgIHZhciByZXBsYWNlbWVudCA9IGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7XHJcbiAgICAgICAgaWYgKHJlcGxhY2VtZW50KSB7XHJcbiAgXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRDRnVuYyhpZGVudCkge1xyXG4gICAgICB2YXIgZnVuYyA9IE1vZHVsZVsnXycgKyBpZGVudF07IC8vIGNsb3N1cmUgZXhwb3J0ZWQgZnVuY3Rpb25cclxuICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LCBidWZmZXIpIHtcclxuICAgICAgSEVBUDguc2V0KGFycmF5LCBidWZmZXIpO1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpIHtcclxuICAgICAgdmFyIGxlbiA9IDA7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgLy8gR290Y2hhOiBjaGFyQ29kZUF0IHJldHVybnMgYSAxNi1iaXQgd29yZCB0aGF0IGlzIGEgVVRGLTE2IGVuY29kZWQgY29kZVxyXG4gICAgICAgIC8vIHVuaXQsIG5vdCBhIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgY2hhcmFjdGVyISBTbyBkZWNvZGVcclxuICAgICAgICAvLyBVVEYxNi0+VVRGMzItPlVURjguXHJcbiAgICAgICAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sI3V0ZjE2LTNcclxuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXHJcbiAgICAgICAgaWYgKGMgPD0gMHg3Rikge1xyXG4gICAgICAgICAgbGVuKys7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjIDw9IDB4N0ZGKSB7XHJcbiAgICAgICAgICBsZW4gKz0gMjtcclxuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XHJcbiAgICAgICAgICBsZW4gKz0gNDsgKytpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZW4gKz0gMztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGxlbjtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjhBcnJheShzdHIsIGhlYXAsIG91dElkeCwgbWF4Qnl0ZXNUb1dyaXRlKSB7XHJcbiAgICAgIC8vIFBhcmFtZXRlciBtYXhCeXRlc1RvV3JpdGUgaXMgbm90IG9wdGlvbmFsLiBOZWdhdGl2ZSB2YWx1ZXMsIDAsIG51bGwsXHJcbiAgICAgIC8vIHVuZGVmaW5lZCBhbmQgZmFsc2UgZWFjaCBkb24ndCB3cml0ZSBvdXQgYW55IGJ5dGVzLlxyXG4gICAgICBpZiAoIShtYXhCeXRlc1RvV3JpdGUgPiAwKSlcclxuICAgICAgICByZXR1cm4gMDtcclxuICBcclxuICAgICAgdmFyIHN0YXJ0SWR4ID0gb3V0SWR4O1xyXG4gICAgICB2YXIgZW5kSWR4ID0gb3V0SWR4ICsgbWF4Qnl0ZXNUb1dyaXRlIC0gMTsgLy8gLTEgZm9yIHN0cmluZyBudWxsIHRlcm1pbmF0b3IuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgLy8gR290Y2hhOiBjaGFyQ29kZUF0IHJldHVybnMgYSAxNi1iaXQgd29yZCB0aGF0IGlzIGEgVVRGLTE2IGVuY29kZWQgY29kZVxyXG4gICAgICAgIC8vIHVuaXQsIG5vdCBhIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgY2hhcmFjdGVyISBTbyBkZWNvZGVcclxuICAgICAgICAvLyBVVEYxNi0+VVRGMzItPlVURjguXHJcbiAgICAgICAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sI3V0ZjE2LTNcclxuICAgICAgICAvLyBGb3IgVVRGOCBieXRlIHN0cnVjdHVyZSwgc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cclxuICAgICAgICAvLyBhbmQgaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIyNzkudHh0XHJcbiAgICAgICAgLy8gYW5kIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjI5XHJcbiAgICAgICAgdmFyIHUgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gcG9zc2libHkgYSBsZWFkIHN1cnJvZ2F0ZVxyXG4gICAgICAgIGlmICh1ID49IDB4RDgwMCAmJiB1IDw9IDB4REZGRikge1xyXG4gICAgICAgICAgdmFyIHUxID0gc3RyLmNoYXJDb2RlQXQoKytpKTtcclxuICAgICAgICAgIHUgPSAweDEwMDAwICsgKCh1ICYgMHgzRkYpIDw8IDEwKSB8ICh1MSAmIDB4M0ZGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHUgPD0gMHg3Rikge1xyXG4gICAgICAgICAgaWYgKG91dElkeCA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSB1O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAweDdGRikge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDEgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhDMCB8ICh1ID4+IDYpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDB4RkZGRikge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDIgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhFMCB8ICh1ID4+IDEyKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiA2KSAmIDYzKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMyA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEYwIHwgKHUgPj4gMTgpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDEyKSAmIDYzKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiA2KSAmIDYzKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBOdWxsLXRlcm1pbmF0ZSB0aGUgcG9pbnRlciB0byB0aGUgYnVmZmVyLlxyXG4gICAgICBoZWFwW291dElkeF0gPSAwO1xyXG4gICAgICByZXR1cm4gb3V0SWR4IC0gc3RhcnRJZHg7XHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4KHN0ciwgb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpIHtcclxuICAgICAgcmV0dXJuIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgSEVBUFU4LG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKTtcclxuICAgIH1cclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjhPblN0YWNrKHN0cikge1xyXG4gICAgICB2YXIgc2l6ZSA9IGxlbmd0aEJ5dGVzVVRGOChzdHIpICsgMTtcclxuICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2Moc2l6ZSk7XHJcbiAgICAgIHN0cmluZ1RvVVRGOChzdHIsIHJldCwgc2l6ZSk7XHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgdmFyIFVURjhEZWNvZGVyID0gdHlwZW9mIFRleHREZWNvZGVyICE9ICd1bmRlZmluZWQnID8gbmV3IFRleHREZWNvZGVyKCd1dGY4JykgOiB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcG9pbnRlciAnaWR4JyB0byBhIG51bGwtdGVybWluYXRlZCBVVEY4LWVuY29kZWQgc3RyaW5nIGluIHRoZSBnaXZlblxyXG4gICAgICogYXJyYXkgdGhhdCBjb250YWlucyB1aW50OCB2YWx1ZXMsIHJldHVybnMgYSBjb3B5IG9mIHRoYXQgc3RyaW5nIGFzIGFcclxuICAgICAqIEphdmFzY3JpcHQgU3RyaW5nIG9iamVjdC5cclxuICAgICAqIGhlYXBPckFycmF5IGlzIGVpdGhlciBhIHJlZ3VsYXIgYXJyYXksIG9yIGEgSmF2YVNjcmlwdCB0eXBlZCBhcnJheSB2aWV3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhCeXRlc1RvUmVhZFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksIGlkeCwgbWF4Qnl0ZXNUb1JlYWQpIHtcclxuICAgICAgdmFyIGVuZElkeCA9IGlkeCArIG1heEJ5dGVzVG9SZWFkO1xyXG4gICAgICB2YXIgZW5kUHRyID0gaWR4O1xyXG4gICAgICAvLyBUZXh0RGVjb2RlciBuZWVkcyB0byBrbm93IHRoZSBieXRlIGxlbmd0aCBpbiBhZHZhbmNlLCBpdCBkb2Vzbid0IHN0b3Agb25cclxuICAgICAgLy8gbnVsbCB0ZXJtaW5hdG9yIGJ5IGl0c2VsZi4gIEFsc28sIHVzZSB0aGUgbGVuZ3RoIGluZm8gdG8gYXZvaWQgcnVubmluZyB0aW55XHJcbiAgICAgIC8vIHN0cmluZ3MgdGhyb3VnaCBUZXh0RGVjb2Rlciwgc2luY2UgLnN1YmFycmF5KCkgYWxsb2NhdGVzIGdhcmJhZ2UuXHJcbiAgICAgIC8vIChBcyBhIHRpbnkgY29kZSBzYXZlIHRyaWNrLCBjb21wYXJlIGVuZFB0ciBhZ2FpbnN0IGVuZElkeCB1c2luZyBhIG5lZ2F0aW9uLFxyXG4gICAgICAvLyBzbyB0aGF0IHVuZGVmaW5lZCBtZWFucyBJbmZpbml0eSlcclxuICAgICAgd2hpbGUgKGhlYXBPckFycmF5W2VuZFB0cl0gJiYgIShlbmRQdHIgPj0gZW5kSWR4KSkgKytlbmRQdHI7XHJcbiAgXHJcbiAgICAgIGlmIChlbmRQdHIgLSBpZHggPiAxNiAmJiBoZWFwT3JBcnJheS5idWZmZXIgJiYgVVRGOERlY29kZXIpIHtcclxuICAgICAgICByZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCwgZW5kUHRyKSk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAvLyBJZiBidWlsZGluZyB3aXRoIFRleHREZWNvZGVyLCB3ZSBoYXZlIGFscmVhZHkgY29tcHV0ZWQgdGhlIHN0cmluZyBsZW5ndGhcclxuICAgICAgLy8gYWJvdmUsIHNvIHRlc3QgbG9vcCBlbmQgY29uZGl0aW9uIGFnYWluc3QgdGhhdFxyXG4gICAgICB3aGlsZSAoaWR4IDwgZW5kUHRyKSB7XHJcbiAgICAgICAgLy8gRm9yIFVURjggYnl0ZSBzdHJ1Y3R1cmUsIHNlZTpcclxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0Rlc2NyaXB0aW9uXHJcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIyNzkudHh0XHJcbiAgICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2MjlcclxuICAgICAgICB2YXIgdTAgPSBoZWFwT3JBcnJheVtpZHgrK107XHJcbiAgICAgICAgaWYgKCEodTAgJiAweDgwKSkgeyBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgdmFyIHUxID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XHJcbiAgICAgICAgaWYgKCh1MCAmIDB4RTApID09IDB4QzApIHsgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKCh1MCAmIDMxKSA8PCA2KSB8IHUxKTsgY29udGludWU7IH1cclxuICAgICAgICB2YXIgdTIgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MztcclxuICAgICAgICBpZiAoKHUwICYgMHhGMCkgPT0gMHhFMCkge1xyXG4gICAgICAgICAgdTAgPSAoKHUwICYgMTUpIDw8IDEyKSB8ICh1MSA8PCA2KSB8IHUyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1MCA9ICgodTAgJiA3KSA8PCAxOCkgfCAodTEgPDwgMTIpIHwgKHUyIDw8IDYpIHwgKGhlYXBPckFycmF5W2lkeCsrXSAmIDYzKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgaWYgKHUwIDwgMHgxMDAwMCkge1xyXG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgY2ggPSB1MCAtIDB4MTAwMDA7XHJcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAgfCAoY2ggPj4gMTApLCAweERDMDAgfCAoY2ggJiAweDNGRikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHBvaW50ZXIgJ3B0cicgdG8gYSBudWxsLXRlcm1pbmF0ZWQgVVRGOC1lbmNvZGVkIHN0cmluZyBpbiB0aGVcclxuICAgICAqIGVtc2NyaXB0ZW4gSEVBUCwgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCBzdHJpbmcgYXMgYSBKYXZhc2NyaXB0IFN0cmluZyBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhCeXRlc1RvUmVhZCAtIEFuIG9wdGlvbmFsIGxlbmd0aCB0aGF0IHNwZWNpZmllcyB0aGVcclxuICAgICAqICAgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4gWW91IGNhbiBvbWl0IHRoaXMgcGFyYW1ldGVyIHRvIHNjYW4gdGhlXHJcbiAgICAgKiAgIHN0cmluZyB1bnRpbCB0aGUgZmlyc3QgXHUwMDAwIGJ5dGUuIElmIG1heEJ5dGVzVG9SZWFkIGlzIHBhc3NlZCwgYW5kIHRoZSBzdHJpbmdcclxuICAgICAqICAgYXQgW3B0ciwgcHRyK21heEJ5dGVzVG9SZWFkclsgY29udGFpbnMgYSBudWxsIGJ5dGUgaW4gdGhlIG1pZGRsZSwgdGhlbiB0aGVcclxuICAgICAqICAgc3RyaW5nIHdpbGwgY3V0IHNob3J0IGF0IHRoYXQgYnl0ZSBpbmRleCAoaS5lLiBtYXhCeXRlc1RvUmVhZCB3aWxsIG5vdFxyXG4gICAgICogICBwcm9kdWNlIGEgc3RyaW5nIG9mIGV4YWN0IGxlbmd0aCBbcHRyLCBwdHIrbWF4Qnl0ZXNUb1JlYWRbKSBOLkIuIG1peGluZ1xyXG4gICAgICogICBmcmVxdWVudCB1c2VzIG9mIFVURjhUb1N0cmluZygpIHdpdGggYW5kIHdpdGhvdXQgbWF4Qnl0ZXNUb1JlYWQgbWF5IHRocm93XHJcbiAgICAgKiAgIEpTIEpJVCBvcHRpbWl6YXRpb25zIG9mZiwgc28gaXQgaXMgd29ydGggdG8gY29uc2lkZXIgY29uc2lzdGVudGx5IHVzaW5nIG9uZVxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gVVRGOFRvU3RyaW5nKHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIHtcclxuICAgICAgcmV0dXJuIHB0ciA/IFVURjhBcnJheVRvU3RyaW5nKEhFQVBVOCwgcHRyLCBtYXhCeXRlc1RvUmVhZCkgOiAnJztcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8bnVsbD19IHJldHVyblR5cGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXk9fSBhcmdUeXBlc1xyXG4gICAgICogQHBhcmFtIHtBcmd1bWVudHN8QXJyYXk9fSBhcmdzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdHNcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGNjYWxsKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgYXJncywgb3B0cykge1xyXG4gICAgICAvLyBGb3IgZmFzdCBsb29rdXAgb2YgY29udmVyc2lvbiBmdW5jdGlvbnNcclxuICAgICAgdmFyIHRvQyA9IHtcclxuICAgICAgICAnc3RyaW5nJzogKHN0cikgPT4ge1xyXG4gICAgICAgICAgdmFyIHJldCA9IDA7XHJcbiAgICAgICAgICBpZiAoc3RyICE9PSBudWxsICYmIHN0ciAhPT0gdW5kZWZpbmVkICYmIHN0ciAhPT0gMCkgeyAvLyBudWxsIHN0cmluZ1xyXG4gICAgICAgICAgICAvLyBhdCBtb3N0IDQgYnl0ZXMgcGVyIFVURi04IGNvZGUgcG9pbnQsICsxIGZvciB0aGUgdHJhaWxpbmcgJ1xcMCdcclxuICAgICAgICAgICAgcmV0ID0gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9LFxyXG4gICAgICAgICdhcnJheSc6IChhcnIpID0+IHtcclxuICAgICAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKGFyci5sZW5ndGgpO1xyXG4gICAgICAgICAgd3JpdGVBcnJheVRvTWVtb3J5KGFyciwgcmV0KTtcclxuICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICBmdW5jdGlvbiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KSB7XHJcbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBVVEY4VG9TdHJpbmcocmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09ICdib29sZWFuJykgcmV0dXJuIEJvb2xlYW4ocmV0KTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpO1xyXG4gICAgICB2YXIgY0FyZ3MgPSBbXTtcclxuICAgICAgdmFyIHN0YWNrID0gMDtcclxuICAgICAgaWYgKGFyZ3MpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHZhciBjb252ZXJ0ZXIgPSB0b0NbYXJnVHlwZXNbaV1dO1xyXG4gICAgICAgICAgaWYgKGNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2sgPT09IDApIHN0YWNrID0gc3RhY2tTYXZlKCk7XHJcbiAgICAgICAgICAgIGNBcmdzW2ldID0gY29udmVydGVyKGFyZ3NbaV0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY0FyZ3NbaV0gPSBhcmdzW2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgcmV0ID0gZnVuYy5hcHBseShudWxsLCBjQXJncyk7XHJcbiAgICAgIGZ1bmN0aW9uIG9uRG9uZShyZXQpIHtcclxuICAgICAgICBpZiAoc3RhY2sgIT09IDApIHN0YWNrUmVzdG9yZShzdGFjayk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldCA9IG9uRG9uZShyZXQpO1xyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IHJldHVyblR5cGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXk9fSBhcmdUeXBlc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRzXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBjd3JhcChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIG9wdHMpIHtcclxuICAgICAgLy8gV2hlbiB0aGUgZnVuY3Rpb24gdGFrZXMgbnVtYmVycyBhbmQgcmV0dXJucyBhIG51bWJlciwgd2UgY2FuIGp1c3QgcmV0dXJuXHJcbiAgICAgIC8vIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxyXG4gICAgICB2YXIgbnVtZXJpY0FyZ3MgPSAhYXJnVHlwZXMgfHwgYXJnVHlwZXMuZXZlcnkoKHR5cGUpID0+IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJyk7XHJcbiAgICAgIHZhciBudW1lcmljUmV0ID0gcmV0dXJuVHlwZSAhPT0gJ3N0cmluZyc7XHJcbiAgICAgIGlmIChudW1lcmljUmV0ICYmIG51bWVyaWNBcmdzICYmICFvcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldENGdW5jKGlkZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGNjYWxsKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgYXJndW1lbnRzLCBvcHRzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxudmFyIHdhc21JbXBvcnRzID0ge1xyXG4gIFwiX19jeGFfdGhyb3dcIjogX19fY3hhX3Rocm93LFxyXG4gIFwiYWJvcnRcIjogX2Fib3J0LFxyXG4gIFwiZW1zY3JpcHRlbl9tZW1jcHlfYmlnXCI6IF9lbXNjcmlwdGVuX21lbWNweV9iaWcsXHJcbiAgXCJlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwXCI6IF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwXHJcbn07XHJcbnZhciBhc20gPSBjcmVhdGVXYXNtKCk7XHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX3dhc21fY2FsbF9jdG9ycyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fd2FzbV9jYWxsX2N0b3JzID0gTW9kdWxlW1wiYXNtXCJdW1wiX193YXNtX2NhbGxfY3RvcnNcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfZGJzY2FuID0gTW9kdWxlW1wiX2Ric2NhblwiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX2Ric2NhbiA9IE1vZHVsZVtcIl9kYnNjYW5cIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJkYnNjYW5cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX19lcnJub19sb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbXCJhc21cIl1bXCJfX2Vycm5vX2xvY2F0aW9uXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9tYWxsb2MgPSBNb2R1bGVbXCJfbWFsbG9jXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wibWFsbG9jXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX2ZyZWUgPSBNb2R1bGVbXCJfZnJlZVwiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX2ZyZWUgPSBNb2R1bGVbXCJfZnJlZVwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImZyZWVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja1NhdmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrU2F2ZSA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrU2F2ZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrUmVzdG9yZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tSZXN0b3JlID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tSZXN0b3JlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tBbGxvYyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tBbGxvYyA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrQWxsb2NcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX19jeGFfaXNfcG9pbnRlcl90eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX19jeGFfaXNfcG9pbnRlcl90eXBlID0gTW9kdWxlW1wiYXNtXCJdW1wiX19jeGFfaXNfcG9pbnRlcl90eXBlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuXHJcblxyXG4vLyBpbmNsdWRlOiBwb3N0YW1ibGUuanNcclxuLy8gPT09IEF1dG8tZ2VuZXJhdGVkIHBvc3RhbWJsZSBzZXR1cCBlbnRyeSBzdHVmZiA9PT1cclxuXHJcbk1vZHVsZVtcImNjYWxsXCJdID0gY2NhbGw7XHJcbk1vZHVsZVtcImN3cmFwXCJdID0gY3dyYXA7XHJcblxyXG5cclxudmFyIGNhbGxlZFJ1bjtcclxuXHJcbmRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IGZ1bmN0aW9uIHJ1bkNhbGxlcigpIHtcclxuICAvLyBJZiBydW4gaGFzIG5ldmVyIGJlZW4gY2FsbGVkLCBhbmQgd2Ugc2hvdWxkIGNhbGwgcnVuIChJTlZPS0VfUlVOIGlzIHRydWUsIGFuZCBNb2R1bGUubm9Jbml0aWFsUnVuIGlzIG5vdCBmYWxzZSlcclxuICBpZiAoIWNhbGxlZFJ1bikgcnVuKCk7XHJcbiAgaWYgKCFjYWxsZWRSdW4pIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bkNhbGxlcjsgLy8gdHJ5IHRoaXMgYWdhaW4gbGF0ZXIsIGFmdGVyIG5ldyBkZXBzIGFyZSBmdWxmaWxsZWRcclxufTtcclxuXHJcbmZ1bmN0aW9uIHJ1bigpIHtcclxuXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHByZVJ1bigpO1xyXG5cclxuICAvLyBhIHByZVJ1biBhZGRlZCBhIGRlcGVuZGVuY3ksIHJ1biB3aWxsIGJlIGNhbGxlZCBsYXRlclxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkb1J1bigpIHtcclxuICAgIC8vIHJ1biBtYXkgaGF2ZSBqdXN0IGJlZW4gY2FsbGVkIHRocm91Z2ggZGVwZW5kZW5jaWVzIGJlaW5nIGZ1bGZpbGxlZCBqdXN0IGluIHRoaXMgdmVyeSBmcmFtZSxcclxuICAgIC8vIG9yIHdoaWxlIHRoZSBhc3luYyBzZXRTdGF0dXMgdGltZSBiZWxvdyB3YXMgaGFwcGVuaW5nXHJcbiAgICBpZiAoY2FsbGVkUnVuKSByZXR1cm47XHJcbiAgICBjYWxsZWRSdW4gPSB0cnVlO1xyXG4gICAgTW9kdWxlWydjYWxsZWRSdW4nXSA9IHRydWU7XHJcblxyXG4gICAgaWYgKEFCT1JUKSByZXR1cm47XHJcblxyXG4gICAgaW5pdFJ1bnRpbWUoKTtcclxuXHJcbiAgICByZWFkeVByb21pc2VSZXNvbHZlKE1vZHVsZSk7XHJcbiAgICBpZiAoTW9kdWxlWydvblJ1bnRpbWVJbml0aWFsaXplZCddKSBNb2R1bGVbJ29uUnVudGltZUluaXRpYWxpemVkJ10oKTtcclxuXHJcbiAgICBwb3N0UnVuKCk7XHJcbiAgfVxyXG5cclxuICBpZiAoTW9kdWxlWydzZXRTdGF0dXMnXSkge1xyXG4gICAgTW9kdWxlWydzZXRTdGF0dXMnXSgnUnVubmluZy4uLicpO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCcnKTtcclxuICAgICAgfSwgMSk7XHJcbiAgICAgIGRvUnVuKCk7XHJcbiAgICB9LCAxKTtcclxuICB9IGVsc2VcclxuICB7XHJcbiAgICBkb1J1bigpO1xyXG4gIH1cclxufVxyXG5cclxuaWYgKE1vZHVsZVsncHJlSW5pdCddKSB7XHJcbiAgaWYgKHR5cGVvZiBNb2R1bGVbJ3ByZUluaXQnXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3ByZUluaXQnXSA9IFtNb2R1bGVbJ3ByZUluaXQnXV07XHJcbiAgd2hpbGUgKE1vZHVsZVsncHJlSW5pdCddLmxlbmd0aCA+IDApIHtcclxuICAgIE1vZHVsZVsncHJlSW5pdCddLnBvcCgpKCk7XHJcbiAgfVxyXG59XHJcblxyXG5ydW4oKTtcclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcG9zdGFtYmxlLmpzXHJcblxyXG5cclxuICByZXR1cm4gZXhwb3J0Q3BwRGJzY2FuTGliLnJlYWR5XHJcbn1cclxuXHJcbik7XHJcbn0pKCk7XHJcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRDcHBEYnNjYW5MaWI7XHJcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSlcclxuICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXhwb3J0Q3BwRGJzY2FuTGliOyB9KTtcclxuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxyXG4gIGV4cG9ydHNbXCJleHBvcnRDcHBEYnNjYW5MaWJcIl0gPSBleHBvcnRDcHBEYnNjYW5MaWI7XHJcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5zY2F0dGVyX3Bsb3RfbGluayB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSFpbXBvcnRhbnQ7XFxuICAgIHJpZ2h0OiAxMHB4O1xcbn1cXG5cXG4uY2xpZmZzX2dyaWQge1xcbiAgICB0b3A6IDEwcHg7XFxufVxcblxcbi5zaG93X29ubHlfY2xpZmZzIHtcXG4gICAgdG9wOiAzMHB4O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCBpLmdyb2staWNvbi5ncm9rLWZvbnQtaWNvbi1zZXR0aW5ncyB7XFxuICAgIGZvbnQtc2l6ZTogMThweDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuICAgIFxcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCBpLmdyb2staWNvbi5ncm9rLWZvbnQtaWNvbi1zZXR0aW5nczpub3QoLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGkpIHtcXG4gICAgbGVmdDogLTIwcHg7XFxufVxcbi5kbGctZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uLnVpLWZvcm0sIC5kbGctbWFya292LWNsdXN0ZXJpbmcudWktZm9ybSwgLmRsZy1tYXJrb3YtY2x1c3RlcmluZy51aS1mb3JtIC51aS1mb3JtLCAuZGxnLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi51aS1mb3JtIC51aS1mb3JtIHtcXG4gICAgbWF4LXdpZHRoOiB1bnNldDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGxhYmVsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGltLXJlZHVjdGlvbi1kaWFsb2ctZm9ybSA+IC51aS1pbnB1dC1yb290LCAuZGltLXJlZHVjdGlvbi1kaWFsb2ctZm9ybSA+IGRpdiA+IC51aS1pbnB1dC1yb290IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCBpbnB1dCwgLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IHNlbGVjdCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmgzLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3Itcm9vdCwgLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1oZWFkZXItcm9vdCB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIG1hcmdpbi1ib3R0b206IDEwcHggIWltcG9ydGFudDtcXG4gICAgd2lkdGg6IDcwMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItY29sdW1uLXRpdGxlIHtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3QgPiBoMTpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItdGFibGUtcm9vdCAuaGVhZGVyID4gdGQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL2Nzcy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksNEJBQTRCO0lBQzVCLFdBQVc7QUFDZjs7QUFFQTtJQUNJLFNBQVM7QUFDYjs7QUFFQTtJQUNJLFNBQVM7QUFDYjs7QUFFQTtJQUNJLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsWUFBWTs7QUFFaEI7O0FBRUE7SUFDSSxXQUFXO0FBQ2Y7QUFDQTtJQUNJLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLHdCQUF3QjtBQUM1Qjs7QUFFQTtJQUNJLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLDRCQUE0QjtBQUNoQzs7QUFFQTtJQUNJLG9CQUFvQjtBQUN4Qjs7QUFFQTtJQUNJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLDhCQUE4QjtJQUM5Qix1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSx1QkFBdUI7SUFDdkIsZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksNEJBQTRCO0FBQ2hDOztBQUVBO0lBQ0ksa0JBQWtCO0FBQ3RCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5zY2F0dGVyX3Bsb3RfbGluayB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSFpbXBvcnRhbnQ7XFxuICAgIHJpZ2h0OiAxMHB4O1xcbn1cXG5cXG4uY2xpZmZzX2dyaWQge1xcbiAgICB0b3A6IDEwcHg7XFxufVxcblxcbi5zaG93X29ubHlfY2xpZmZzIHtcXG4gICAgdG9wOiAzMHB4O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCBpLmdyb2staWNvbi5ncm9rLWZvbnQtaWNvbi1zZXR0aW5ncyB7XFxuICAgIGZvbnQtc2l6ZTogMThweDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuICAgIFxcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCBpLmdyb2staWNvbi5ncm9rLWZvbnQtaWNvbi1zZXR0aW5nczpub3QoLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGkpIHtcXG4gICAgbGVmdDogLTIwcHg7XFxufVxcbi5kbGctZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uLnVpLWZvcm0sIC5kbGctbWFya292LWNsdXN0ZXJpbmcudWktZm9ybSwgLmRsZy1tYXJrb3YtY2x1c3RlcmluZy51aS1mb3JtIC51aS1mb3JtLCAuZGxnLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi51aS1mb3JtIC51aS1mb3JtIHtcXG4gICAgbWF4LXdpZHRoOiB1bnNldDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGxhYmVsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGltLXJlZHVjdGlvbi1kaWFsb2ctZm9ybSA+IC51aS1pbnB1dC1yb290LCAuZGltLXJlZHVjdGlvbi1kaWFsb2ctZm9ybSA+IGRpdiA+IC51aS1pbnB1dC1yb290IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCBpbnB1dCwgLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IHNlbGVjdCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmgzLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3Itcm9vdCwgLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1oZWFkZXItcm9vdCB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIG1hcmdpbi1ib3R0b206IDEwcHggIWltcG9ydGFudDtcXG4gICAgd2lkdGg6IDcwMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItY29sdW1uLXRpdGxlIHtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3QgPiBoMTpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItdGFibGUtcm9vdCAuaGVhZGVyID4gdGQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiKGZ1bmN0aW9uICh3aW5kb3csIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cualN0YXQgPSBmYWN0b3J5KCk7XG4gICAgfVxufSkodGhpcywgZnVuY3Rpb24gKCkge1xudmFyIGpTdGF0ID0gKGZ1bmN0aW9uKE1hdGgsIHVuZGVmaW5lZCkge1xuXG4vLyBGb3IgcXVpY2sgcmVmZXJlbmNlLlxudmFyIGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBDYWxjdWxhdGUgY29ycmVjdGlvbiBmb3IgSUVFRSBlcnJvclxuLy8gVE9ETzogVGhpcyBjYWxjdWxhdGlvbiBjYW4gYmUgaW1wcm92ZWQuXG5mdW5jdGlvbiBjYWxjUmR4KG4sIG0pIHtcbiAgdmFyIHZhbCA9IG4gPiBtID8gbiA6IG07XG4gIHJldHVybiBNYXRoLnBvdygxMCxcbiAgICAgICAgICAgICAgICAgIDE3IC0gfn4oTWF0aC5sb2coKCh2YWwgPiAwKSA/IHZhbCA6IC12YWwpKSAqIE1hdGguTE9HMTBFKSk7XG59XG5cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cblxuZnVuY3Rpb24gaXNOdW1iZXIobnVtKSB7XG4gIHJldHVybiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpID8gbnVtIC0gbnVtID09PSAwIDogZmFsc2U7XG59XG5cblxuLy8gQ29udmVydHMgdGhlIGpTdGF0IG1hdHJpeCB0byB2ZWN0b3IuXG5mdW5jdGlvbiB0b1ZlY3RvcihhcnIpIHtcbiAgcmV0dXJuIGNvbmNhdC5hcHBseShbXSwgYXJyKTtcbn1cblxuXG4vLyBUaGUgb25lIGFuZCBvbmx5IGpTdGF0IGNvbnN0cnVjdG9yLlxuZnVuY3Rpb24galN0YXQoKSB7XG4gIHJldHVybiBuZXcgalN0YXQuX2luaXQoYXJndW1lbnRzKTtcbn1cblxuXG4vLyBUT0RPOiBSZW1vdmUgYWZ0ZXIgYWxsIHJlZmVyZW5jZXMgaW4gc3JjIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkLlxualN0YXQuZm4gPSBqU3RhdC5wcm90b3R5cGU7XG5cblxuLy8gQnkgc2VwYXJhdGluZyB0aGUgaW5pdGlhbGl6ZXIgZnJvbSB0aGUgY29uc3RydWN0b3IgaXQncyBlYXNpZXIgdG8gaGFuZGxlXG4vLyBhbHdheXMgcmV0dXJuaW5nIGEgbmV3IGluc3RhbmNlIHdoZXRoZXIgXCJuZXdcIiB3YXMgdXNlZCBvciBub3QuXG5qU3RhdC5faW5pdCA9IGZ1bmN0aW9uIF9pbml0KGFyZ3MpIHtcbiAgLy8gSWYgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIG11c3QgYmUgdmVjdG9yIG9yIG1hdHJpeC5cbiAgaWYgKGlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAvLyBDaGVjayBpZiBtYXRyaXguXG4gICAgaWYgKGlzQXJyYXkoYXJnc1swXVswXSkpIHtcbiAgICAgIC8vIFNlZSBpZiBhIG1hcHBpbmcgZnVuY3Rpb24gd2FzIGFsc28gcGFzc2VkLlxuICAgICAgaWYgKGlzRnVuY3Rpb24oYXJnc1sxXSkpXG4gICAgICAgIGFyZ3NbMF0gPSBqU3RhdC5tYXAoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBpcyBmYXN0ZXIgdGhhbiB0aGlzLnB1c2guYXBwbHkodGhpcywgYXJnc1swXS5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc1swXS5sZW5ndGg7IGkrKylcbiAgICAgICAgdGhpc1tpXSA9IGFyZ3NbMF1baV07XG4gICAgICB0aGlzLmxlbmd0aCA9IGFyZ3NbMF0ubGVuZ3RoO1xuXG4gICAgLy8gT3RoZXJ3aXNlIG11c3QgYmUgYSB2ZWN0b3IuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbMF0gPSBpc0Z1bmN0aW9uKGFyZ3NbMV0pID8galN0YXQubWFwKGFyZ3NbMF0sIGFyZ3NbMV0pIDogYXJnc1swXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgLy8gSWYgZmlyc3QgYXJndW1lbnQgaXMgbnVtYmVyLCBhc3N1bWUgY3JlYXRpb24gb2Ygc2VxdWVuY2UuXG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIoYXJnc1swXSkpIHtcbiAgICB0aGlzWzBdID0galN0YXQuc2VxLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcblxuICAvLyBIYW5kbGUgY2FzZSB3aGVuIGpTdGF0IG9iamVjdCBpcyBwYXNzZWQgdG8galN0YXQuXG4gIH0gZWxzZSBpZiAoYXJnc1swXSBpbnN0YW5jZW9mIGpTdGF0KSB7XG4gICAgLy8gRHVwbGljYXRlIHRoZSBvYmplY3QgYW5kIHBhc3MgaXQgYmFjay5cbiAgICByZXR1cm4galN0YXQoYXJnc1swXS50b0FycmF5KCkpO1xuXG4gIC8vIFVuZXhwZWN0ZWQgYXJndW1lbnQgdmFsdWUsIHJldHVybiBlbXB0eSBqU3RhdCBvYmplY3QuXG4gIC8vIFRPRE86IFRoaXMgaXMgc3RyYW5nZSBiZWhhdmlvci4gU2hvdWxkbid0IHRoaXMgdGhyb3cgb3Igc29tZSBzdWNoIHRvIGxldFxuICAvLyB0aGUgdXNlciBrbm93IHRoZXkgaGFkIGJhZCBhcmd1bWVudHM/XG4gIH0gZWxzZSB7XG4gICAgdGhpc1swXSA9IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcbmpTdGF0Ll9pbml0LnByb3RvdHlwZSA9IGpTdGF0LnByb3RvdHlwZTtcbmpTdGF0Ll9pbml0LmNvbnN0cnVjdG9yID0galN0YXQ7XG5cblxuLy8gVXRpbGl0eSBmdW5jdGlvbnMuXG4vLyBUT0RPOiBmb3IgaW50ZXJuYWwgdXNlIG9ubHk/XG5qU3RhdC51dGlscyA9IHtcbiAgY2FsY1JkeDogY2FsY1JkeCxcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICB0b1ZlY3RvcjogdG9WZWN0b3Jcbn07XG5cblxualN0YXQuX3JhbmRvbV9mbiA9IE1hdGgucmFuZG9tO1xualN0YXQuc2V0UmFuZG9tID0gZnVuY3Rpb24gc2V0UmFuZG9tKGZuKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm4gaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgalN0YXQuX3JhbmRvbV9mbiA9IGZuO1xufTtcblxuXG4vLyBFYXNpbHkgZXh0ZW5kIHRoZSBqU3RhdCBvYmplY3QuXG4vLyBUT0RPOiBpcyB0aGlzIHNlcmlvdXNseSBuZWNlc3Nhcnk/XG5qU3RhdC5leHRlbmQgPSBmdW5jdGlvbiBleHRlbmQob2JqKSB7XG4gIHZhciBpLCBqO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgZm9yIChqIGluIG9iailcbiAgICAgIGpTdGF0W2pdID0gb2JqW2pdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAoaiBpbiBhcmd1bWVudHNbaV0pXG4gICAgICBvYmpbal0gPSBhcmd1bWVudHNbaV1bal07XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LlxualN0YXQucm93cyA9IGZ1bmN0aW9uIHJvd3MoYXJyKSB7XG4gIHJldHVybiBhcnIubGVuZ3RoIHx8IDE7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguXG5qU3RhdC5jb2xzID0gZnVuY3Rpb24gY29scyhhcnIpIHtcbiAgcmV0dXJuIGFyclswXS5sZW5ndGggfHwgMTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgb2JqZWN0IHsgcm93czogaSwgY29sczogaiB9XG5qU3RhdC5kaW1lbnNpb25zID0gZnVuY3Rpb24gZGltZW5zaW9ucyhhcnIpIHtcbiAgcmV0dXJuIHtcbiAgICByb3dzOiBqU3RhdC5yb3dzKGFyciksXG4gICAgY29sczogalN0YXQuY29scyhhcnIpXG4gIH07XG59O1xuXG5cbi8vIFJldHVybnMgYSBzcGVjaWZpZWQgcm93IGFzIGEgdmVjdG9yIG9yIHJldHVybiBhIHN1YiBtYXRyaXggYnkgcGljayBzb21lIHJvd3NcbmpTdGF0LnJvdyA9IGZ1bmN0aW9uIHJvdyhhcnIsIGluZGV4KSB7XG4gIGlmIChpc0FycmF5KGluZGV4KSkge1xuICAgIHJldHVybiBpbmRleC5tYXAoZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIGpTdGF0LnJvdyhhcnIsIGkpO1xuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGFycltpbmRleF07XG59O1xuXG5cbi8vIHJldHVybiByb3cgYXMgYXJyYXlcbi8vIHJvd2EoW1sxLDJdLFszLDRdXSwwKSAtPiBbMSwyXVxualN0YXQucm93YSA9IGZ1bmN0aW9uIHJvd2EoYXJyLCBpKSB7XG4gIHJldHVybiBqU3RhdC5yb3coYXJyLCBpKTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhcyBhIHZlY3RvciBvciByZXR1cm4gYSBzdWIgbWF0cml4IGJ5IHBpY2sgc29tZVxuLy8gY29sdW1uc1xualN0YXQuY29sID0gZnVuY3Rpb24gY29sKGFyciwgaW5kZXgpIHtcbiAgaWYgKGlzQXJyYXkoaW5kZXgpKSB7XG4gICAgdmFyIHN1Ym1hdCA9IGpTdGF0LmFyYW5nZShhcnIubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KGluZGV4Lmxlbmd0aCk7XG4gICAgfSk7XG4gICAgaW5kZXguZm9yRWFjaChmdW5jdGlvbihpbmQsIGkpe1xuICAgICAgalN0YXQuYXJhbmdlKGFyci5sZW5ndGgpLmZvckVhY2goZnVuY3Rpb24oaikge1xuICAgICAgICBzdWJtYXRbal1baV0gPSBhcnJbal1baW5kXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBzdWJtYXQ7XG4gIH1cbiAgdmFyIGNvbHVtbiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspXG4gICAgY29sdW1uW2ldID0gW2FycltpXVtpbmRleF1dO1xuICByZXR1cm4gY29sdW1uO1xufTtcblxuXG4vLyByZXR1cm4gY29sdW1uIGFzIGFycmF5XG4vLyBjb2xhKFtbMSwyXSxbMyw0XV0sMCkgLT4gWzEsM11cbmpTdGF0LmNvbGEgPSBmdW5jdGlvbiBjb2xhKGFyciwgaSkge1xuICByZXR1cm4galN0YXQuY29sKGFyciwgaSkubWFwKGZ1bmN0aW9uKGEpeyByZXR1cm4gYVswXSB9KTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgZGlhZ29uYWwgb2YgdGhlIG1hdHJpeFxualN0YXQuZGlhZyA9IGZ1bmN0aW9uIGRpYWcoYXJyKSB7XG4gIHZhciBucm93ID0galN0YXQucm93cyhhcnIpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KG5yb3cpO1xuICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBucm93OyByb3crKylcbiAgICByZXNbcm93XSA9IFthcnJbcm93XVtyb3ddXTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgYW50aS1kaWFnb25hbCBvZiB0aGUgbWF0cml4XG5qU3RhdC5hbnRpZGlhZyA9IGZ1bmN0aW9uIGFudGlkaWFnKGFycikge1xuICB2YXIgbnJvdyA9IGpTdGF0LnJvd3MoYXJyKSAtIDE7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobnJvdyk7XG4gIGZvciAodmFyIGkgPSAwOyBucm93ID49IDA7IG5yb3ctLSwgaSsrKVxuICAgIHJlc1tpXSA9IFthcnJbaV1bbnJvd11dO1xuICByZXR1cm4gcmVzO1xufTtcblxuLy8gVHJhbnNwb3NlIGEgbWF0cml4IG9yIGFycmF5LlxualN0YXQudHJhbnNwb3NlID0gZnVuY3Rpb24gdHJhbnNwb3NlKGFycikge1xuICB2YXIgb2JqID0gW107XG4gIHZhciBvYmpBcnIsIHJvd3MsIGNvbHMsIGosIGk7XG5cbiAgLy8gTWFrZSBzdXJlIGFyciBpcyBpbiBtYXRyaXggZm9ybWF0LlxuICBpZiAoIWlzQXJyYXkoYXJyWzBdKSlcbiAgICBhcnIgPSBbYXJyXTtcblxuICByb3dzID0gYXJyLmxlbmd0aDtcbiAgY29scyA9IGFyclswXS5sZW5ndGg7XG5cbiAgZm9yIChpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgIG9iakFyciA9IG5ldyBBcnJheShyb3dzKTtcbiAgICBmb3IgKGogPSAwOyBqIDwgcm93czsgaisrKVxuICAgICAgb2JqQXJyW2pdID0gYXJyW2pdW2ldO1xuICAgIG9iai5wdXNoKG9iakFycik7XG4gIH1cblxuICAvLyBJZiBvYmogaXMgdmVjdG9yLCByZXR1cm4gb25seSBzaW5nbGUgYXJyYXkuXG4gIHJldHVybiBvYmoubGVuZ3RoID09PSAxID8gb2JqWzBdIDogb2JqO1xufTtcblxuXG4vLyBNYXAgYSBmdW5jdGlvbiB0byBhbiBhcnJheSBvciBhcnJheSBvZiBhcnJheXMuXG4vLyBcInRvQWx0ZXJcIiBpcyBhbiBpbnRlcm5hbCB2YXJpYWJsZS5cbmpTdGF0Lm1hcCA9IGZ1bmN0aW9uIG1hcChhcnIsIGZ1bmMsIHRvQWx0ZXIpIHtcbiAgdmFyIHJvdywgbnJvdywgbmNvbCwgcmVzLCBjb2w7XG5cbiAgaWYgKCFpc0FycmF5KGFyclswXSkpXG4gICAgYXJyID0gW2Fycl07XG5cbiAgbnJvdyA9IGFyci5sZW5ndGg7XG4gIG5jb2wgPSBhcnJbMF0ubGVuZ3RoO1xuICByZXMgPSB0b0FsdGVyID8gYXJyIDogbmV3IEFycmF5KG5yb3cpO1xuXG4gIGZvciAocm93ID0gMDsgcm93IDwgbnJvdzsgcm93KyspIHtcbiAgICAvLyBpZiB0aGUgcm93IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmICghcmVzW3Jvd10pXG4gICAgICByZXNbcm93XSA9IG5ldyBBcnJheShuY29sKTtcbiAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5jb2w7IGNvbCsrKVxuICAgICAgcmVzW3Jvd11bY29sXSA9IGZ1bmMoYXJyW3Jvd11bY29sXSwgcm93LCBjb2wpO1xuICB9XG5cbiAgcmV0dXJuIHJlcy5sZW5ndGggPT09IDEgPyByZXNbMF0gOiByZXM7XG59O1xuXG5cbi8vIEN1bXVsYXRpdmVseSBjb21iaW5lIHRoZSBlbGVtZW50cyBvZiBhbiBhcnJheSBvciBhcnJheSBvZiBhcnJheXMgdXNpbmcgYSBmdW5jdGlvbi5cbmpTdGF0LmN1bXJlZHVjZSA9IGZ1bmN0aW9uIGN1bXJlZHVjZShhcnIsIGZ1bmMsIHRvQWx0ZXIpIHtcbiAgdmFyIHJvdywgbnJvdywgbmNvbCwgcmVzLCBjb2w7XG5cbiAgaWYgKCFpc0FycmF5KGFyclswXSkpXG4gICAgYXJyID0gW2Fycl07XG5cbiAgbnJvdyA9IGFyci5sZW5ndGg7XG4gIG5jb2wgPSBhcnJbMF0ubGVuZ3RoO1xuICByZXMgPSB0b0FsdGVyID8gYXJyIDogbmV3IEFycmF5KG5yb3cpO1xuXG4gIGZvciAocm93ID0gMDsgcm93IDwgbnJvdzsgcm93KyspIHtcbiAgICAvLyBpZiB0aGUgcm93IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmICghcmVzW3Jvd10pXG4gICAgICByZXNbcm93XSA9IG5ldyBBcnJheShuY29sKTtcbiAgICBpZiAobmNvbCA+IDApXG4gICAgICByZXNbcm93XVswXSA9IGFycltyb3ddWzBdO1xuICAgIGZvciAoY29sID0gMTsgY29sIDwgbmNvbDsgY29sKyspXG4gICAgICByZXNbcm93XVtjb2xdID0gZnVuYyhyZXNbcm93XVtjb2wtMV0sIGFycltyb3ddW2NvbF0pO1xuICB9XG4gIHJldHVybiByZXMubGVuZ3RoID09PSAxID8gcmVzWzBdIDogcmVzO1xufTtcblxuXG4vLyBEZXN0cnVjdGl2ZWx5IGFsdGVyIGFuIGFycmF5LlxualN0YXQuYWx0ZXIgPSBmdW5jdGlvbiBhbHRlcihhcnIsIGZ1bmMpIHtcbiAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmMsIHRydWUpO1xufTtcblxuXG4vLyBHZW5lcmF0ZSBhIHJvd3MgeCBjb2xzIG1hdHJpeCBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uLlxualN0YXQuY3JlYXRlID0gZnVuY3Rpb24gIGNyZWF0ZShyb3dzLCBjb2xzLCBmdW5jKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkocm93cyk7XG4gIHZhciBpLCBqO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGNvbHMpKSB7XG4gICAgZnVuYyA9IGNvbHM7XG4gICAgY29scyA9IHJvd3M7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgcmVzW2ldID0gbmV3IEFycmF5KGNvbHMpO1xuICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKyspXG4gICAgICByZXNbaV1bal0gPSBmdW5jKGksIGopO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cblxuZnVuY3Rpb24gcmV0WmVybygpIHsgcmV0dXJuIDA7IH1cblxuXG4vLyBHZW5lcmF0ZSBhIHJvd3MgeCBjb2xzIG1hdHJpeCBvZiB6ZXJvcy5cbmpTdGF0Lnplcm9zID0gZnVuY3Rpb24gemVyb3Mocm93cywgY29scykge1xuICBpZiAoIWlzTnVtYmVyKGNvbHMpKVxuICAgIGNvbHMgPSByb3dzO1xuICByZXR1cm4galN0YXQuY3JlYXRlKHJvd3MsIGNvbHMsIHJldFplcm8pO1xufTtcblxuXG5mdW5jdGlvbiByZXRPbmUoKSB7IHJldHVybiAxOyB9XG5cblxuLy8gR2VuZXJhdGUgYSByb3dzIHggY29scyBtYXRyaXggb2Ygb25lcy5cbmpTdGF0Lm9uZXMgPSBmdW5jdGlvbiBvbmVzKHJvd3MsIGNvbHMpIHtcbiAgaWYgKCFpc051bWJlcihjb2xzKSlcbiAgICBjb2xzID0gcm93cztcbiAgcmV0dXJuIGpTdGF0LmNyZWF0ZShyb3dzLCBjb2xzLCByZXRPbmUpO1xufTtcblxuXG4vLyBHZW5lcmF0ZSBhIHJvd3MgeCBjb2xzIG1hdHJpeCBvZiB1bmlmb3JtbHkgcmFuZG9tIG51bWJlcnMuXG5qU3RhdC5yYW5kID0gZnVuY3Rpb24gcmFuZChyb3dzLCBjb2xzKSB7XG4gIGlmICghaXNOdW1iZXIoY29scykpXG4gICAgY29scyA9IHJvd3M7XG4gIHJldHVybiBqU3RhdC5jcmVhdGUocm93cywgY29scywgalN0YXQuX3JhbmRvbV9mbik7XG59O1xuXG5cbmZ1bmN0aW9uIHJldElkZW50KGksIGopIHsgcmV0dXJuIGkgPT09IGogPyAxIDogMDsgfVxuXG5cbi8vIEdlbmVyYXRlIGFuIGlkZW50aXR5IG1hdHJpeCBvZiBzaXplIHJvdyB4IGNvbHMuXG5qU3RhdC5pZGVudGl0eSA9IGZ1bmN0aW9uIGlkZW50aXR5KHJvd3MsIGNvbHMpIHtcbiAgaWYgKCFpc051bWJlcihjb2xzKSlcbiAgICBjb2xzID0gcm93cztcbiAgcmV0dXJuIGpTdGF0LmNyZWF0ZShyb3dzLCBjb2xzLCByZXRJZGVudCk7XG59O1xuXG5cbi8vIFRlc3RzIHdoZXRoZXIgYSBtYXRyaXggaXMgc3ltbWV0cmljXG5qU3RhdC5zeW1tZXRyaWMgPSBmdW5jdGlvbiBzeW1tZXRyaWMoYXJyKSB7XG4gIHZhciBzaXplID0gYXJyLmxlbmd0aDtcbiAgdmFyIHJvdywgY29sO1xuXG4gIGlmIChhcnIubGVuZ3RoICE9PSBhcnJbMF0ubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7XG4gICAgZm9yIChjb2wgPSAwOyBjb2wgPCBzaXplOyBjb2wrKylcbiAgICAgIGlmIChhcnJbY29sXVtyb3ddICE9PSBhcnJbcm93XVtjb2xdKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLy8gU2V0IGFsbCB2YWx1ZXMgdG8gemVyby5cbmpTdGF0LmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5hbHRlcihhcnIsIHJldFplcm8pO1xufTtcblxuXG4vLyBHZW5lcmF0ZSBzZXF1ZW5jZS5cbmpTdGF0LnNlcSA9IGZ1bmN0aW9uIHNlcShtaW4sIG1heCwgbGVuZ3RoLCBmdW5jKSB7XG4gIGlmICghaXNGdW5jdGlvbihmdW5jKSlcbiAgICBmdW5jID0gZmFsc2U7XG5cbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgaGl2YWwgPSBjYWxjUmR4KG1pbiwgbWF4KTtcbiAgdmFyIHN0ZXAgPSAobWF4ICogaGl2YWwgLSBtaW4gKiBoaXZhbCkgLyAoKGxlbmd0aCAtIDEpICogaGl2YWwpO1xuICB2YXIgY3VycmVudCA9IG1pbjtcbiAgdmFyIGNudDtcblxuICAvLyBDdXJyZW50IGlzIGFzc2lnbmVkIHVzaW5nIGEgdGVjaG5pcXVlIHRvIGNvbXBlbnNhdGUgZm9yIElFRUUgZXJyb3IuXG4gIC8vIFRPRE86IE5lZWRzIGJldHRlciBpbXBsZW1lbnRhdGlvbi5cbiAgZm9yIChjbnQgPSAwO1xuICAgICAgIGN1cnJlbnQgPD0gbWF4ICYmIGNudCA8IGxlbmd0aDtcbiAgICAgICBjbnQrKywgY3VycmVudCA9IChtaW4gKiBoaXZhbCArIHN0ZXAgKiBoaXZhbCAqIGNudCkgLyBoaXZhbCkge1xuICAgIGFyci5wdXNoKChmdW5jID8gZnVuYyhjdXJyZW50LCBjbnQpIDogY3VycmVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cblxuLy8gYXJhbmdlKDUpIC0+IFswLDEsMiwzLDRdXG4vLyBhcmFuZ2UoMSw1KSAtPiBbMSwyLDMsNF1cbi8vIGFyYW5nZSg1LDEsLTEpIC0+IFs1LDQsMywyXVxualN0YXQuYXJhbmdlID0gZnVuY3Rpb24gYXJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgdmFyIHJsID0gW107XG4gIHZhciBpO1xuICBzdGVwID0gc3RlcCB8fCAxO1xuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IDA7XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSBlbmQgfHwgc3RlcCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoc3RhcnQgPCBlbmQgJiYgc3RlcCA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHN0YXJ0ID4gZW5kICYmIHN0ZXAgPiAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChzdGVwID4gMCkge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IHN0ZXApIHtcbiAgICAgIHJsLnB1c2goaSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpID4gZW5kOyBpICs9IHN0ZXApIHtcbiAgICAgIHJsLnB1c2goaSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBybDtcbn07XG5cblxuLy8gQT1bWzEsMiwzXSxbNCw1LDZdLFs3LDgsOV1dXG4vLyBzbGljZShBLHtyb3c6e2VuZDoyfSxjb2w6e3N0YXJ0OjF9fSkgLT4gW1syLDNdLFs1LDZdXVxuLy8gc2xpY2UoQSwxLHtzdGFydDoxfSkgLT4gWzUsNl1cbi8vIGFzIG51bXB5IGNvZGUgQVs6MiwxOl1cbmpTdGF0LnNsaWNlID0gKGZ1bmN0aW9uKCl7XG4gIGZ1bmN0aW9uIF9zbGljZShsaXN0LCBzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgLy8gbm90ZSBpdCdzIG5vdCBlcXVhbCB0byByYW5nZS5tYXAgbW9kZSBpdCdzIGEgYnVnXG4gICAgdmFyIGk7XG4gICAgdmFyIHJsID0gW107XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkICYmIHN0ZXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGpTdGF0LmNvcHkobGlzdCk7XG4gICAgfVxuXG4gICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICAgIGVuZCA9IGVuZCB8fCBsaXN0Lmxlbmd0aDtcbiAgICBzdGFydCA9IHN0YXJ0ID49IDAgPyBzdGFydCA6IGxlbmd0aCArIHN0YXJ0O1xuICAgIGVuZCA9IGVuZCA+PSAwID8gZW5kIDogbGVuZ3RoICsgZW5kO1xuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG4gICAgaWYgKHN0YXJ0ID09PSBlbmQgfHwgc3RlcCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgPCBlbmQgJiYgc3RlcCA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0ID4gZW5kICYmIHN0ZXAgPiAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gc3RlcCkge1xuICAgICAgICBybC5wdXNoKGxpc3RbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSBzdGFydDsgaSA+IGVuZDtpICs9IHN0ZXApIHtcbiAgICAgICAgcmwucHVzaChsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJsO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpY2UobGlzdCwgcmNTbGljZSkge1xuICAgIHZhciBjb2xTbGljZSwgcm93U2xpY2U7XG4gICAgcmNTbGljZSA9IHJjU2xpY2UgfHwge307XG4gICAgaWYgKGlzTnVtYmVyKHJjU2xpY2Uucm93KSkge1xuICAgICAgaWYgKGlzTnVtYmVyKHJjU2xpY2UuY29sKSlcbiAgICAgICAgcmV0dXJuIGxpc3RbcmNTbGljZS5yb3ddW3JjU2xpY2UuY29sXTtcbiAgICAgIHZhciByb3cgPSBqU3RhdC5yb3dhKGxpc3QsIHJjU2xpY2Uucm93KTtcbiAgICAgIGNvbFNsaWNlID0gcmNTbGljZS5jb2wgfHwge307XG4gICAgICByZXR1cm4gX3NsaWNlKHJvdywgY29sU2xpY2Uuc3RhcnQsIGNvbFNsaWNlLmVuZCwgY29sU2xpY2Uuc3RlcCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTnVtYmVyKHJjU2xpY2UuY29sKSkge1xuICAgICAgdmFyIGNvbCA9IGpTdGF0LmNvbGEobGlzdCwgcmNTbGljZS5jb2wpO1xuICAgICAgcm93U2xpY2UgPSByY1NsaWNlLnJvdyB8fCB7fTtcbiAgICAgIHJldHVybiBfc2xpY2UoY29sLCByb3dTbGljZS5zdGFydCwgcm93U2xpY2UuZW5kLCByb3dTbGljZS5zdGVwKTtcbiAgICB9XG5cbiAgICByb3dTbGljZSA9IHJjU2xpY2Uucm93IHx8IHt9O1xuICAgIGNvbFNsaWNlID0gcmNTbGljZS5jb2wgfHwge307XG4gICAgdmFyIHJvd3MgPSBfc2xpY2UobGlzdCwgcm93U2xpY2Uuc3RhcnQsIHJvd1NsaWNlLmVuZCwgcm93U2xpY2Uuc3RlcCk7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgICAgcmV0dXJuIF9zbGljZShyb3csIGNvbFNsaWNlLnN0YXJ0LCBjb2xTbGljZS5lbmQsIGNvbFNsaWNlLnN0ZXApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlO1xufSgpKTtcblxuXG4vLyBBPVtbMSwyLDNdLFs0LDUsNl0sWzcsOCw5XV1cbi8vIHNsaWNlQXNzaWduKEEse3Jvdzp7c3RhcnQ6MX0sY29sOntzdGFydDoxfX0sW1swLDBdLFswLDBdXSlcbi8vIEE9W1sxLDIsM10sWzQsMCwwXSxbNywwLDBdXVxualN0YXQuc2xpY2VBc3NpZ24gPSBmdW5jdGlvbiBzbGljZUFzc2lnbihBLCByY1NsaWNlLCBCKSB7XG4gIHZhciBubCwgbWw7XG4gIGlmIChpc051bWJlcihyY1NsaWNlLnJvdykpIHtcbiAgICBpZiAoaXNOdW1iZXIocmNTbGljZS5jb2wpKVxuICAgICAgcmV0dXJuIEFbcmNTbGljZS5yb3ddW3JjU2xpY2UuY29sXSA9IEI7XG4gICAgcmNTbGljZS5jb2wgPSByY1NsaWNlLmNvbCB8fCB7fTtcbiAgICByY1NsaWNlLmNvbC5zdGFydCA9IHJjU2xpY2UuY29sLnN0YXJ0IHx8IDA7XG4gICAgcmNTbGljZS5jb2wuZW5kID0gcmNTbGljZS5jb2wuZW5kIHx8IEFbMF0ubGVuZ3RoO1xuICAgIHJjU2xpY2UuY29sLnN0ZXAgPSByY1NsaWNlLmNvbC5zdGVwIHx8IDE7XG4gICAgbmwgPSBqU3RhdC5hcmFuZ2UocmNTbGljZS5jb2wuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEEubGVuZ3RoLCByY1NsaWNlLmNvbC5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByY1NsaWNlLmNvbC5zdGVwKTtcbiAgICB2YXIgbSA9IHJjU2xpY2Uucm93O1xuICAgIG5sLmZvckVhY2goZnVuY3Rpb24obiwgaSkge1xuICAgICAgQVttXVtuXSA9IEJbaV07XG4gICAgfSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cblxuICBpZiAoaXNOdW1iZXIocmNTbGljZS5jb2wpKSB7XG4gICAgcmNTbGljZS5yb3cgPSByY1NsaWNlLnJvdyB8fCB7fTtcbiAgICByY1NsaWNlLnJvdy5zdGFydCA9IHJjU2xpY2Uucm93LnN0YXJ0IHx8IDA7XG4gICAgcmNTbGljZS5yb3cuZW5kID0gcmNTbGljZS5yb3cuZW5kIHx8IEEubGVuZ3RoO1xuICAgIHJjU2xpY2Uucm93LnN0ZXAgPSByY1NsaWNlLnJvdy5zdGVwIHx8IDE7XG4gICAgbWwgPSBqU3RhdC5hcmFuZ2UocmNTbGljZS5yb3cuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEFbMF0ubGVuZ3RoLCByY1NsaWNlLnJvdy5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByY1NsaWNlLnJvdy5zdGVwKTtcbiAgICB2YXIgbiA9IHJjU2xpY2UuY29sO1xuICAgIG1sLmZvckVhY2goZnVuY3Rpb24obSwgaikge1xuICAgICAgQVttXVtuXSA9IEJbal07XG4gICAgfSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cblxuICBpZiAoQlswXS5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIEIgPSBbQl07XG4gIH1cbiAgcmNTbGljZS5yb3cuc3RhcnQgPSByY1NsaWNlLnJvdy5zdGFydCB8fCAwO1xuICByY1NsaWNlLnJvdy5lbmQgPSByY1NsaWNlLnJvdy5lbmQgfHwgQS5sZW5ndGg7XG4gIHJjU2xpY2Uucm93LnN0ZXAgPSByY1NsaWNlLnJvdy5zdGVwIHx8IDE7XG4gIHJjU2xpY2UuY29sLnN0YXJ0ID0gcmNTbGljZS5jb2wuc3RhcnQgfHwgMDtcbiAgcmNTbGljZS5jb2wuZW5kID0gcmNTbGljZS5jb2wuZW5kIHx8IEFbMF0ubGVuZ3RoO1xuICByY1NsaWNlLmNvbC5zdGVwID0gcmNTbGljZS5jb2wuc3RlcCB8fCAxO1xuICBtbCA9IGpTdGF0LmFyYW5nZShyY1NsaWNlLnJvdy5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEEubGVuZ3RoLCByY1NsaWNlLnJvdy5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmNTbGljZS5yb3cuc3RlcCk7XG4gIG5sID0galN0YXQuYXJhbmdlKHJjU2xpY2UuY29sLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oQVswXS5sZW5ndGgsIHJjU2xpY2UuY29sLmVuZCksXG4gICAgICAgICAgICAgICAgICAgICAgICByY1NsaWNlLmNvbC5zdGVwKTtcbiAgbWwuZm9yRWFjaChmdW5jdGlvbihtLCBpKSB7XG4gICAgbmwuZm9yRWFjaChmdW5jdGlvbihuLCBqKSB7XG4gICAgICBBW21dW25dID0gQltpXVtqXTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBBO1xufTtcblxuXG4vLyBbMSwyLDNdIC0+XG4vLyBbWzEsMCwwXSxbMCwyLDBdLFswLDAsM11dXG5qU3RhdC5kaWFnb25hbCA9IGZ1bmN0aW9uIGRpYWdvbmFsKGRpYWdBcnJheSkge1xuICB2YXIgbWF0ID0galN0YXQuemVyb3MoZGlhZ0FycmF5Lmxlbmd0aCwgZGlhZ0FycmF5Lmxlbmd0aCk7XG4gIGRpYWdBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHQsIGkpIHtcbiAgICBtYXRbaV1baV0gPSB0O1xuICB9KTtcbiAgcmV0dXJuIG1hdDtcbn07XG5cblxuLy8gcmV0dXJuIGNvcHkgb2YgQVxualN0YXQuY29weSA9IGZ1bmN0aW9uIGNvcHkoQSkge1xuICByZXR1cm4gQS5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAgaWYgKGlzTnVtYmVyKHJvdykpXG4gICAgICByZXR1cm4gcm93O1xuICAgIHJldHVybiByb3cubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0O1xuICAgIH0pO1xuICB9KTtcbn07XG5cblxuLy8gVE9ETzogR28gb3ZlciB0aGlzIGVudGlyZSBpbXBsZW1lbnRhdGlvbi4gU2VlbXMgYSB0cmFnaWMgd2FzdGUgb2YgcmVzb3VyY2VzXG4vLyBkb2luZyBhbGwgdGhpcyB3b3JrLiBJbnN0ZWFkLCBhbmQgd2hpbGUgdWdseSwgdXNlIG5ldyBGdW5jdGlvbigpIHRvIGdlbmVyYXRlXG4vLyBhIGN1c3RvbSBmdW5jdGlvbiBmb3IgZWFjaCBzdGF0aWMgbWV0aG9kLlxuXG4vLyBRdWljayByZWZlcmVuY2UuXG52YXIgalByb3RvID0galN0YXQucHJvdG90eXBlO1xuXG4vLyBEZWZhdWx0IGxlbmd0aC5cbmpQcm90by5sZW5ndGggPSAwO1xuXG4vLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4vLyBUT0RPOiBDaGVjayBpZiB0aGV5J3JlIGFjdHVhbGx5IHVzZWQsIGFuZCBpZiB0aGV5IGFyZSB0aGVuIHJlbmFtZSB0aGVtXG4vLyB0byBfKlxualByb3RvLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbmpQcm90by5zb3J0ID0gQXJyYXkucHJvdG90eXBlLnNvcnQ7XG5qUHJvdG8uc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbmpQcm90by5zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuXG4vLyBSZXR1cm4gYSBjbGVhbiBhcnJheS5cbmpQcm90by50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwodGhpcykgOiBzbGljZS5jYWxsKHRoaXMpWzBdO1xufTtcblxuXG4vLyBNYXAgYSBmdW5jdGlvbiB0byBhIG1hdHJpeCBvciB2ZWN0b3IuXG5qUHJvdG8ubWFwID0gZnVuY3Rpb24gbWFwKGZ1bmMsIHRvQWx0ZXIpIHtcbiAgcmV0dXJuIGpTdGF0KGpTdGF0Lm1hcCh0aGlzLCBmdW5jLCB0b0FsdGVyKSk7XG59O1xuXG5cbi8vIEN1bXVsYXRpdmVseSBjb21iaW5lIHRoZSBlbGVtZW50cyBvZiBhIG1hdHJpeCBvciB2ZWN0b3IgdXNpbmcgYSBmdW5jdGlvbi5cbmpQcm90by5jdW1yZWR1Y2UgPSBmdW5jdGlvbiBjdW1yZWR1Y2UoZnVuYywgdG9BbHRlcikge1xuICByZXR1cm4galN0YXQoalN0YXQuY3VtcmVkdWNlKHRoaXMsIGZ1bmMsIHRvQWx0ZXIpKTtcbn07XG5cblxuLy8gRGVzdHJ1Y3RpdmVseSBhbHRlciBhbiBhcnJheS5cbmpQcm90by5hbHRlciA9IGZ1bmN0aW9uIGFsdGVyKGZ1bmMpIHtcbiAgalN0YXQuYWx0ZXIodGhpcywgZnVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuXG4vLyBFeHRlbmQgcHJvdG90eXBlIHdpdGggbWV0aG9kcyB0aGF0IGhhdmUgbm8gYXJndW1lbnQuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIHJlc3VsdHM7XG4gICAgICAvLyBDaGVjayBmb3IgY2FsbGJhY2suXG4gICAgICBpZiAoZnVuYykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmMuY2FsbChzZWxmLCBqUHJvdG9bcGFzc2Z1bmNdLmNhbGwoc2VsZikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXN1bHRzID0galN0YXRbcGFzc2Z1bmNdKHRoaXMpO1xuICAgICAgcmV0dXJuIGlzQXJyYXkocmVzdWx0cykgPyBqU3RhdChyZXN1bHRzKSA6IHJlc3VsdHM7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ3RyYW5zcG9zZSBjbGVhciBzeW1tZXRyaWMgcm93cyBjb2xzIGRpbWVuc2lvbnMgZGlhZyBhbnRpZGlhZycuc3BsaXQoJyAnKSk7XG5cblxuLy8gRXh0ZW5kIHByb3RvdHlwZSB3aXRoIG1ldGhvZHMgdGhhdCBoYXZlIG9uZSBhcmd1bWVudC5cbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICBqUHJvdG9bcGFzc2Z1bmNdID0gZnVuY3Rpb24oaW5kZXgsIGZ1bmMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIC8vIGNoZWNrIGZvciBjYWxsYmFja1xuICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jLmNhbGwoc2VsZiwgalByb3RvW3Bhc3NmdW5jXS5jYWxsKHNlbGYsIGluZGV4KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10odGhpcywgaW5kZXgpKTtcbiAgICB9O1xuICB9KShmdW5jc1tpXSk7XG59KSgncm93IGNvbCcuc3BsaXQoJyAnKSk7XG5cblxuLy8gRXh0ZW5kIHByb3RvdHlwZSB3aXRoIHNpbXBsZSBzaG9ydGN1dCBtZXRob2RzLlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpQcm90b1twYXNzZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ2NyZWF0ZSB6ZXJvcyBvbmVzIHJhbmQgaWRlbnRpdHknLnNwbGl0KCcgJykpO1xuXG5cbi8vIEV4cG9zaW5nIGpTdGF0LlxucmV0dXJuIGpTdGF0O1xuXG59KE1hdGgpKTtcbihmdW5jdGlvbihqU3RhdCwgTWF0aCkge1xuXG52YXIgaXNGdW5jdGlvbiA9IGpTdGF0LnV0aWxzLmlzRnVuY3Rpb247XG5cbi8vIEFzY2VuZGluZyBmdW5jdGlvbnMgZm9yIHNvcnRcbmZ1bmN0aW9uIGFzY051bShhLCBiKSB7IHJldHVybiBhIC0gYjsgfVxuXG5mdW5jdGlvbiBjbGlwKGFyZywgbWluLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4oYXJnLCBtYXgpKTtcbn1cblxuXG4vLyBzdW0gb2YgYW4gYXJyYXlcbmpTdGF0LnN1bSA9IGZ1bmN0aW9uIHN1bShhcnIpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgd2hpbGUgKC0taSA+PSAwKVxuICAgIHN1bSArPSBhcnJbaV07XG4gIHJldHVybiBzdW07XG59O1xuXG5cbi8vIHN1bSBzcXVhcmVkXG5qU3RhdC5zdW1zcXJkID0gZnVuY3Rpb24gc3Vtc3FyZChhcnIpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgd2hpbGUgKC0taSA+PSAwKVxuICAgIHN1bSArPSBhcnJbaV0gKiBhcnJbaV07XG4gIHJldHVybiBzdW07XG59O1xuXG5cbi8vIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBvZiBwcmVkaWN0aW9uIChTU0UpXG5qU3RhdC5zdW1zcWVyciA9IGZ1bmN0aW9uIHN1bXNxZXJyKGFycikge1xuICB2YXIgbWVhbiA9IGpTdGF0Lm1lYW4oYXJyKTtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgdmFyIHRtcDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgdG1wID0gYXJyW2ldIC0gbWVhbjtcbiAgICBzdW0gKz0gdG1wICogdG1wO1xuICB9XG4gIHJldHVybiBzdW07XG59O1xuXG4vLyBzdW0gb2YgYW4gYXJyYXkgaW4gZWFjaCByb3dcbmpTdGF0LnN1bXJvdyA9IGZ1bmN0aW9uIHN1bXJvdyhhcnIpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgd2hpbGUgKC0taSA+PSAwKVxuICAgIHN1bSArPSBhcnJbaV07XG4gIHJldHVybiBzdW07XG59O1xuXG4vLyBwcm9kdWN0IG9mIGFuIGFycmF5XG5qU3RhdC5wcm9kdWN0ID0gZnVuY3Rpb24gcHJvZHVjdChhcnIpIHtcbiAgdmFyIHByb2QgPSAxO1xuICB2YXIgaSA9IGFyci5sZW5ndGg7XG4gIHdoaWxlICgtLWkgPj0gMClcbiAgICBwcm9kICo9IGFycltpXTtcbiAgcmV0dXJuIHByb2Q7XG59O1xuXG5cbi8vIG1pbmltdW0gdmFsdWUgb2YgYW4gYXJyYXlcbmpTdGF0Lm1pbiA9IGZ1bmN0aW9uIG1pbihhcnIpIHtcbiAgdmFyIGxvdyA9IGFyclswXTtcbiAgdmFyIGkgPSAwO1xuICB3aGlsZSAoKytpIDwgYXJyLmxlbmd0aClcbiAgICBpZiAoYXJyW2ldIDwgbG93KVxuICAgICAgbG93ID0gYXJyW2ldO1xuICByZXR1cm4gbG93O1xufTtcblxuXG4vLyBtYXhpbXVtIHZhbHVlIG9mIGFuIGFycmF5XG5qU3RhdC5tYXggPSBmdW5jdGlvbiBtYXgoYXJyKSB7XG4gIHZhciBoaWdoID0gYXJyWzBdO1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlICgrK2kgPCBhcnIubGVuZ3RoKVxuICAgIGlmIChhcnJbaV0gPiBoaWdoKVxuICAgICAgaGlnaCA9IGFycltpXTtcbiAgcmV0dXJuIGhpZ2g7XG59O1xuXG5cbi8vIHVuaXF1ZSB2YWx1ZXMgb2YgYW4gYXJyYXlcbmpTdGF0LnVuaXF1ZSA9IGZ1bmN0aW9uIHVuaXF1ZShhcnIpIHtcbiAgdmFyIGhhc2ggPSB7fSwgX2FyciA9IFtdO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNoW2FycltpXV0pIHtcbiAgICAgIGhhc2hbYXJyW2ldXSA9IHRydWU7XG4gICAgICBfYXJyLnB1c2goYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9hcnI7XG59O1xuXG5cbi8vIG1lYW4gdmFsdWUgb2YgYW4gYXJyYXlcbmpTdGF0Lm1lYW4gPSBmdW5jdGlvbiBtZWFuKGFycikge1xuICByZXR1cm4galN0YXQuc3VtKGFycikgLyBhcnIubGVuZ3RoO1xufTtcblxuXG4vLyBtZWFuIHNxdWFyZWQgZXJyb3IgKE1TRSlcbmpTdGF0Lm1lYW5zcWVyciA9IGZ1bmN0aW9uIG1lYW5zcWVycihhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN1bXNxZXJyKGFycikgLyBhcnIubGVuZ3RoO1xufTtcblxuXG4vLyBnZW9tZXRyaWMgbWVhbiBvZiBhbiBhcnJheVxualN0YXQuZ2VvbWVhbiA9IGZ1bmN0aW9uIGdlb21lYW4oYXJyKSB7XG4gIHZhciBsb2dzID0gYXJyLm1hcChNYXRoLmxvZylcbiAgdmFyIG1lYW5PZkxvZ3MgPSBqU3RhdC5tZWFuKGxvZ3MpXG4gIHJldHVybiBNYXRoLmV4cChtZWFuT2ZMb2dzKVxufTtcblxuXG4vLyBtZWRpYW4gb2YgYW4gYXJyYXlcbmpTdGF0Lm1lZGlhbiA9IGZ1bmN0aW9uIG1lZGlhbihhcnIpIHtcbiAgdmFyIGFycmxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBfYXJyID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICAvLyBjaGVjayBpZiBhcnJheSBpcyBldmVuIG9yIG9kZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlXG4gIHJldHVybiAhKGFycmxlbiAmIDEpXG4gICAgPyAoX2FyclsoYXJybGVuIC8gMikgLSAxIF0gKyBfYXJyWyhhcnJsZW4gLyAyKV0pIC8gMlxuICAgIDogX2FyclsoYXJybGVuIC8gMikgfCAwIF07XG59O1xuXG5cbi8vIGN1bXVsYXRpdmUgc3VtIG9mIGFuIGFycmF5XG5qU3RhdC5jdW1zdW0gPSBmdW5jdGlvbiBjdW1zdW0oYXJyKSB7XG4gIHJldHVybiBqU3RhdC5jdW1yZWR1Y2UoYXJyLCBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSArIGI7IH0pO1xufTtcblxuXG4vLyBjdW11bGF0aXZlIHByb2R1Y3Qgb2YgYW4gYXJyYXlcbmpTdGF0LmN1bXByb2QgPSBmdW5jdGlvbiBjdW1wcm9kKGFycikge1xuICByZXR1cm4galN0YXQuY3VtcmVkdWNlKGFyciwgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKiBiOyB9KTtcbn07XG5cblxuLy8gc3VjY2Vzc2l2ZSBkaWZmZXJlbmNlcyBvZiBhIHNlcXVlbmNlXG5qU3RhdC5kaWZmID0gZnVuY3Rpb24gZGlmZihhcnIpIHtcbiAgdmFyIGRpZmZzID0gW107XG4gIHZhciBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMTsgaSA8IGFyckxlbjsgaSsrKVxuICAgIGRpZmZzLnB1c2goYXJyW2ldIC0gYXJyW2kgLSAxXSk7XG4gIHJldHVybiBkaWZmcztcbn07XG5cblxuLy8gcmFua3Mgb2YgYW4gYXJyYXlcbmpTdGF0LnJhbmsgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHZhciBpO1xuICB2YXIgZGlzdGluY3ROdW1iZXJzID0gW107XG4gIHZhciBudW1iZXJDb3VudHMgPSB7fTtcbiAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBudW1iZXIgPSBhcnJbaV07XG4gICAgaWYgKG51bWJlckNvdW50c1tudW1iZXJdKSB7XG4gICAgICBudW1iZXJDb3VudHNbbnVtYmVyXSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXJDb3VudHNbbnVtYmVyXSA9IDE7XG4gICAgICBkaXN0aW5jdE51bWJlcnMucHVzaChudW1iZXIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3J0ZWREaXN0aW5jdE51bWJlcnMgPSBkaXN0aW5jdE51bWJlcnMuc29ydChhc2NOdW0pO1xuICB2YXIgbnVtYmVyUmFua3MgPSB7fTtcbiAgdmFyIGN1cnJlbnRSYW5rID0gMTtcbiAgZm9yIChpID0gMDsgaSA8IHNvcnRlZERpc3RpbmN0TnVtYmVycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBudW1iZXIgPSBzb3J0ZWREaXN0aW5jdE51bWJlcnNbaV07XG4gICAgdmFyIGNvdW50ID0gbnVtYmVyQ291bnRzW251bWJlcl07XG4gICAgdmFyIGZpcnN0ID0gY3VycmVudFJhbms7XG4gICAgdmFyIGxhc3QgPSBjdXJyZW50UmFuayArIGNvdW50IC0gMTtcbiAgICB2YXIgcmFuayA9IChmaXJzdCArIGxhc3QpIC8gMjtcbiAgICBudW1iZXJSYW5rc1tudW1iZXJdID0gcmFuaztcbiAgICBjdXJyZW50UmFuayArPSBjb3VudDtcbiAgfVxuXG4gIHJldHVybiBhcnIubWFwKGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyUmFua3NbbnVtYmVyXTtcbiAgfSk7XG59O1xuXG5cbi8vIG1vZGUgb2YgYW4gYXJyYXlcbi8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtb2RlcyBvZiBhbiBhcnJheSwgcmV0dXJuIGFsbCBvZiB0aGVtXG4vLyBpcyB0aGlzIHRoZSBhcHByb3ByaWF0ZSB3YXkgb2YgaGFuZGxpbmcgaXQ/XG5qU3RhdC5tb2RlID0gZnVuY3Rpb24gbW9kZShhcnIpIHtcbiAgdmFyIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBfYXJyID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICB2YXIgY291bnQgPSAxO1xuICB2YXIgbWF4Q291bnQgPSAwO1xuICB2YXIgbnVtTWF4Q291bnQgPSAwO1xuICB2YXIgbW9kZV9hcnIgPSBbXTtcbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgaSsrKSB7XG4gICAgaWYgKF9hcnJbaV0gPT09IF9hcnJbaSArIDFdKSB7XG4gICAgICBjb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY291bnQgPiBtYXhDb3VudCkge1xuICAgICAgICBtb2RlX2FyciA9IFtfYXJyW2ldXTtcbiAgICAgICAgbWF4Q291bnQgPSBjb3VudDtcbiAgICAgICAgbnVtTWF4Q291bnQgPSAwO1xuICAgICAgfVxuICAgICAgLy8gYXJlIHRoZXJlIG11bHRpcGxlIG1heCBjb3VudHNcbiAgICAgIGVsc2UgaWYgKGNvdW50ID09PSBtYXhDb3VudCkge1xuICAgICAgICBtb2RlX2Fyci5wdXNoKF9hcnJbaV0pO1xuICAgICAgICBudW1NYXhDb3VudCsrO1xuICAgICAgfVxuICAgICAgLy8gcmVzZXR0aW5nIGNvdW50IGZvciBuZXcgdmFsdWUgaW4gYXJyYXlcbiAgICAgIGNvdW50ID0gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVtTWF4Q291bnQgPT09IDAgPyBtb2RlX2FyclswXSA6IG1vZGVfYXJyO1xufTtcblxuXG4vLyByYW5nZSBvZiBhbiBhcnJheVxualN0YXQucmFuZ2UgPSBmdW5jdGlvbiByYW5nZShhcnIpIHtcbiAgcmV0dXJuIGpTdGF0Lm1heChhcnIpIC0galN0YXQubWluKGFycik7XG59O1xuXG4vLyB2YXJpYW5jZSBvZiBhbiBhcnJheVxuLy8gZmxhZyA9IHRydWUgaW5kaWNhdGVzIHNhbXBsZSBpbnN0ZWFkIG9mIHBvcHVsYXRpb25cbmpTdGF0LnZhcmlhbmNlID0gZnVuY3Rpb24gdmFyaWFuY2UoYXJyLCBmbGFnKSB7XG4gIHJldHVybiBqU3RhdC5zdW1zcWVycihhcnIpIC8gKGFyci5sZW5ndGggLSAoZmxhZyA/IDEgOiAwKSk7XG59O1xuXG4vLyBwb29sZWQgdmFyaWFuY2Ugb2YgYW4gYXJyYXkgb2YgYXJyYXlzXG5qU3RhdC5wb29sZWR2YXJpYW5jZSA9IGZ1bmN0aW9uIHBvb2xlZHZhcmlhbmNlKGFycikge1xuICB2YXIgc3Vtc3FlcnIgPSBhcnIucmVkdWNlKGZ1bmN0aW9uIChhLCBzYW1wbGVzKSB7cmV0dXJuIGEgKyBqU3RhdC5zdW1zcWVycihzYW1wbGVzKTt9LCAwKTtcbiAgdmFyIGNvdW50ID0gYXJyLnJlZHVjZShmdW5jdGlvbiAoYSwgc2FtcGxlcykge3JldHVybiBhICsgc2FtcGxlcy5sZW5ndGg7fSwgMCk7XG4gIHJldHVybiBzdW1zcWVyciAvIChjb3VudCAtIGFyci5sZW5ndGgpO1xufTtcblxuLy8gZGV2aWF0aW9uIG9mIGFuIGFycmF5XG5qU3RhdC5kZXZpYXRpb24gPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHZhciBtZWFuID0galN0YXQubWVhbihhcnIpO1xuICB2YXIgYXJybGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGRldiA9IG5ldyBBcnJheShhcnJsZW4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmxlbjsgaSsrKSB7XG4gICAgZGV2W2ldID0gYXJyW2ldIC0gbWVhbjtcbiAgfVxuICByZXR1cm4gZGV2O1xufTtcblxuLy8gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGFuIGFycmF5XG4vLyBmbGFnID0gdHJ1ZSBpbmRpY2F0ZXMgc2FtcGxlIGluc3RlYWQgb2YgcG9wdWxhdGlvblxualN0YXQuc3RkZXYgPSBmdW5jdGlvbiBzdGRldihhcnIsIGZsYWcpIHtcbiAgcmV0dXJuIE1hdGguc3FydChqU3RhdC52YXJpYW5jZShhcnIsIGZsYWcpKTtcbn07XG5cbi8vIHBvb2xlZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYW4gYXJyYXkgb2YgYXJyYXlzXG5qU3RhdC5wb29sZWRzdGRldiA9IGZ1bmN0aW9uIHBvb2xlZHN0ZGV2KGFycikge1xuICByZXR1cm4gTWF0aC5zcXJ0KGpTdGF0LnBvb2xlZHZhcmlhbmNlKGFycikpO1xufTtcblxuLy8gbWVhbiBkZXZpYXRpb24gKG1lYW4gYWJzb2x1dGUgZGV2aWF0aW9uKSBvZiBhbiBhcnJheVxualN0YXQubWVhbmRldiA9IGZ1bmN0aW9uIG1lYW5kZXYoYXJyKSB7XG4gIHZhciBtZWFuID0galN0YXQubWVhbihhcnIpO1xuICB2YXIgYSA9IFtdO1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgYS5wdXNoKE1hdGguYWJzKGFycltpXSAtIG1lYW4pKTtcbiAgfVxuICByZXR1cm4galN0YXQubWVhbihhKTtcbn07XG5cblxuLy8gbWVkaWFuIGRldmlhdGlvbiAobWVkaWFuIGFic29sdXRlIGRldmlhdGlvbikgb2YgYW4gYXJyYXlcbmpTdGF0Lm1lZGRldiA9IGZ1bmN0aW9uIG1lZGRldihhcnIpIHtcbiAgdmFyIG1lZGlhbiA9IGpTdGF0Lm1lZGlhbihhcnIpO1xuICB2YXIgYSA9IFtdO1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgYS5wdXNoKE1hdGguYWJzKGFycltpXSAtIG1lZGlhbikpO1xuICB9XG4gIHJldHVybiBqU3RhdC5tZWRpYW4oYSk7XG59O1xuXG5cbi8vIGNvZWZmaWNpZW50IG9mIHZhcmlhdGlvblxualN0YXQuY29lZmZ2YXIgPSBmdW5jdGlvbiBjb2VmZnZhcihhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN0ZGV2KGFycikgLyBqU3RhdC5tZWFuKGFycik7XG59O1xuXG5cbi8vIHF1YXJ0aWxlcyBvZiBhbiBhcnJheVxualN0YXQucXVhcnRpbGVzID0gZnVuY3Rpb24gcXVhcnRpbGVzKGFycikge1xuICB2YXIgYXJybGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIF9hcnIgPSBhcnIuc2xpY2UoKS5zb3J0KGFzY051bSk7XG4gIHJldHVybiBbXG4gICAgX2FyclsgTWF0aC5yb3VuZCgoYXJybGVuKSAvIDQpIC0gMSBdLFxuICAgIF9hcnJbIE1hdGgucm91bmQoKGFycmxlbikgLyAyKSAtIDEgXSxcbiAgICBfYXJyWyBNYXRoLnJvdW5kKChhcnJsZW4pICogMyAvIDQpIC0gMSBdXG4gIF07XG59O1xuXG5cbi8vIEFyYml0YXJ5IHF1YW50aWxlcyBvZiBhbiBhcnJheS4gRGlyZWN0IHBvcnQgb2YgdGhlIHNjaXB5LnN0YXRzXG4vLyBpbXBsZW1lbnRhdGlvbiBieSBQaWVycmUgR0YgR2VyYXJkLU1hcmNoYW50LlxualN0YXQucXVhbnRpbGVzID0gZnVuY3Rpb24gcXVhbnRpbGVzKGFyciwgcXVhbnRpbGVzQXJyYXksIGFscGhhcCwgYmV0YXApIHtcbiAgdmFyIHNvcnRlZEFycmF5ID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICB2YXIgcXVhbnRpbGVWYWxzID0gW3F1YW50aWxlc0FycmF5Lmxlbmd0aF07XG4gIHZhciBuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGksIHAsIG0sIGFsZXBoLCBrLCBnYW1tYTtcblxuICBpZiAodHlwZW9mIGFscGhhcCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgYWxwaGFwID0gMyAvIDg7XG4gIGlmICh0eXBlb2YgYmV0YXAgPT09ICd1bmRlZmluZWQnKVxuICAgIGJldGFwID0gMyAvIDg7XG5cbiAgZm9yIChpID0gMDsgaSA8IHF1YW50aWxlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgcCA9IHF1YW50aWxlc0FycmF5W2ldO1xuICAgIG0gPSBhbHBoYXAgKyBwICogKDEgLSBhbHBoYXAgLSBiZXRhcCk7XG4gICAgYWxlcGggPSBuICogcCArIG07XG4gICAgayA9IE1hdGguZmxvb3IoY2xpcChhbGVwaCwgMSwgbiAtIDEpKTtcbiAgICBnYW1tYSA9IGNsaXAoYWxlcGggLSBrLCAwLCAxKTtcbiAgICBxdWFudGlsZVZhbHNbaV0gPSAoMSAtIGdhbW1hKSAqIHNvcnRlZEFycmF5W2sgLSAxXSArIGdhbW1hICogc29ydGVkQXJyYXlba107XG4gIH1cblxuICByZXR1cm4gcXVhbnRpbGVWYWxzO1xufTtcblxuLy8gUmV0dXJuIHRoZSBrLXRoIHBlcmNlbnRpbGUgb2YgdmFsdWVzIGluIGEgcmFuZ2UsIHdoZXJlIGsgaXMgaW4gdGhlIHJhbmdlIDAuLjEsIGluY2x1c2l2ZS5cbi8vIFBhc3NpbmcgdHJ1ZSBmb3IgdGhlIGV4Y2x1c2l2ZSBwYXJhbWV0ZXIgZXhjbHVkZXMgYm90aCBlbmRwb2ludHMgb2YgdGhlIHJhbmdlLlxualN0YXQucGVyY2VudGlsZSA9IGZ1bmN0aW9uIHBlcmNlbnRpbGUoYXJyLCBrLCBleGNsdXNpdmUpIHtcbiAgdmFyIF9hcnIgPSBhcnIuc2xpY2UoKS5zb3J0KGFzY051bSk7XG4gIHZhciByZWFsSW5kZXggPSBrICogKF9hcnIubGVuZ3RoICsgKGV4Y2x1c2l2ZSA/IDEgOiAtMSkpICsgKGV4Y2x1c2l2ZSA/IDAgOiAxKTtcbiAgdmFyIGluZGV4ID0gcGFyc2VJbnQocmVhbEluZGV4KTtcbiAgdmFyIGZyYWMgPSByZWFsSW5kZXggLSBpbmRleDtcbiAgaWYgKGluZGV4ICsgMSA8IF9hcnIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIF9hcnJbaW5kZXggLSAxXSArIGZyYWMgKiAoX2FycltpbmRleF0gLSBfYXJyW2luZGV4IC0gMV0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfYXJyW2luZGV4IC0gMV07XG4gIH1cbn1cblxuLy8gVGhlIHBlcmNlbnRpbGUgcmFuayBvZiBzY29yZSBpbiBhIGdpdmVuIGFycmF5LiBSZXR1cm5zIHRoZSBwZXJjZW50YWdlXG4vLyBvZiBhbGwgdmFsdWVzIGluIHRoZSBpbnB1dCBhcnJheSB0aGF0IGFyZSBsZXNzIHRoYW4gKGtpbmQ9J3N0cmljdCcpIG9yXG4vLyBsZXNzIG9yIGVxdWFsIHRoYW4gKGtpbmQ9J3dlYWsnKSBzY29yZS4gRGVmYXVsdCBpcyB3ZWFrLlxualN0YXQucGVyY2VudGlsZU9mU2NvcmUgPSBmdW5jdGlvbiBwZXJjZW50aWxlT2ZTY29yZShhcnIsIHNjb3JlLCBraW5kKSB7XG4gIHZhciBjb3VudGVyID0gMDtcbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBzdHJpY3QgPSBmYWxzZTtcbiAgdmFyIHZhbHVlLCBpO1xuXG4gIGlmIChraW5kID09PSAnc3RyaWN0JylcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhbHVlID0gYXJyW2ldO1xuICAgIGlmICgoc3RyaWN0ICYmIHZhbHVlIDwgc2NvcmUpIHx8XG4gICAgICAgICghc3RyaWN0ICYmIHZhbHVlIDw9IHNjb3JlKSkge1xuICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3VudGVyIC8gbGVuO1xufTtcblxuXG4vLyBIaXN0b2dyYW0gKGJpbiBjb3VudCkgZGF0YVxualN0YXQuaGlzdG9ncmFtID0gZnVuY3Rpb24gaGlzdG9ncmFtKGFyciwgYmluQ250KSB7XG4gIGJpbkNudCA9IGJpbkNudCB8fCA0O1xuICB2YXIgZmlyc3QgPSBqU3RhdC5taW4oYXJyKTtcbiAgdmFyIGJpbldpZHRoID0gKGpTdGF0Lm1heChhcnIpIC0gZmlyc3QpIC8gYmluQ250O1xuICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGJpbnMgPSBbXTtcbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGJpbkNudDsgaSsrKVxuICAgIGJpbnNbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgYmluc1tNYXRoLm1pbihNYXRoLmZsb29yKCgoYXJyW2ldIC0gZmlyc3QpIC8gYmluV2lkdGgpKSwgYmluQ250IC0gMSldICs9IDE7XG5cbiAgcmV0dXJuIGJpbnM7XG59O1xuXG5cbi8vIGNvdmFyaWFuY2Ugb2YgdHdvIGFycmF5c1xualN0YXQuY292YXJpYW5jZSA9IGZ1bmN0aW9uIGNvdmFyaWFuY2UoYXJyMSwgYXJyMikge1xuICB2YXIgdSA9IGpTdGF0Lm1lYW4oYXJyMSk7XG4gIHZhciB2ID0galN0YXQubWVhbihhcnIyKTtcbiAgdmFyIGFycjFMZW4gPSBhcnIxLmxlbmd0aDtcbiAgdmFyIHNxX2RldiA9IG5ldyBBcnJheShhcnIxTGVuKTtcbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGFycjFMZW47IGkrKylcbiAgICBzcV9kZXZbaV0gPSAoYXJyMVtpXSAtIHUpICogKGFycjJbaV0gLSB2KTtcblxuICByZXR1cm4galN0YXQuc3VtKHNxX2RldikgLyAoYXJyMUxlbiAtIDEpO1xufTtcblxuXG4vLyAocGVhcnNvbidzKSBwb3B1bGF0aW9uIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50LCByaG9cbmpTdGF0LmNvcnJjb2VmZiA9IGZ1bmN0aW9uIGNvcnJjb2VmZihhcnIxLCBhcnIyKSB7XG4gIHJldHVybiBqU3RhdC5jb3ZhcmlhbmNlKGFycjEsIGFycjIpIC9cbiAgICAgIGpTdGF0LnN0ZGV2KGFycjEsIDEpIC9cbiAgICAgIGpTdGF0LnN0ZGV2KGFycjIsIDEpO1xufTtcblxuICAvLyAoc3BlYXJtYW4ncykgcmFuayBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCwgc3BcbmpTdGF0LnNwZWFybWFuY29lZmYgPSAgZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgYXJyMSA9IGpTdGF0LnJhbmsoYXJyMSk7XG4gIGFycjIgPSBqU3RhdC5yYW5rKGFycjIpO1xuICAvL3JldHVybiBwZWFyc29uJ3MgY29ycmVsYXRpb24gb2YgdGhlIHJhbmtzOlxuICByZXR1cm4galN0YXQuY29ycmNvZWZmKGFycjEsIGFycjIpO1xufVxuXG5cbi8vIHN0YXRpc3RpY2FsIHN0YW5kYXJkaXplZCBtb21lbnRzIChnZW5lcmFsIGZvcm0gb2Ygc2tldy9rdXJ0KVxualN0YXQuc3Rhbk1vbWVudCA9IGZ1bmN0aW9uIHN0YW5Nb21lbnQoYXJyLCBuKSB7XG4gIHZhciBtdSA9IGpTdGF0Lm1lYW4oYXJyKTtcbiAgdmFyIHNpZ21hID0galN0YXQuc3RkZXYoYXJyKTtcbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBza2V3U3VtID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHNrZXdTdW0gKz0gTWF0aC5wb3coKGFycltpXSAtIG11KSAvIHNpZ21hLCBuKTtcblxuICByZXR1cm4gc2tld1N1bSAvIGFyci5sZW5ndGg7XG59O1xuXG4vLyAocGVhcnNvbidzKSBtb21lbnQgY29lZmZpY2llbnQgb2Ygc2tld25lc3NcbmpTdGF0LnNrZXduZXNzID0gZnVuY3Rpb24gc2tld25lc3MoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5zdGFuTW9tZW50KGFyciwgMyk7XG59O1xuXG4vLyAocGVhcnNvbidzKSAoZXhjZXNzKSBrdXJ0b3Npc1xualN0YXQua3VydG9zaXMgPSBmdW5jdGlvbiBrdXJ0b3NpcyhhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN0YW5Nb21lbnQoYXJyLCA0KSAtIDM7XG59O1xuXG5cbnZhciBqUHJvdG8gPSBqU3RhdC5wcm90b3R5cGU7XG5cblxuLy8gRXh0ZW5kIGpQcm90byB3aXRoIG1ldGhvZCBmb3IgY2FsY3VsYXRpbmcgY3VtdWxhdGl2ZSBzdW1zIGFuZCBwcm9kdWN0cy5cbi8vIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBzaW1pbGFyIGV4dGVuc2lvbiBiZWxvdyBhcyBjdW1zdW0gYW5kIGN1bXByb2Qgc2hvdWxkXG4vLyBub3QgYmUgcnVuIGFnYWluIGluIHRoZSBjYXNlIGZ1bGxib29sID09PSB0cnVlLlxuLy8gSWYgYSBtYXRyaXggaXMgcGFzc2VkLCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBvcGVyYXRpb24gc2hvdWxkIGJlIGRvbmUgb24gdGhlXG4vLyBjb2x1bW5zLlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIC8vIElmIGEgbWF0cml4IGlzIHBhc3NlZCwgYXV0b21hdGljYWxseSBhc3N1bWUgb3BlcmF0aW9uIHNob3VsZCBiZSBkb25lIG9uXG4gICAgLy8gdGhlIGNvbHVtbnMuXG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGZ1bGxib29sLCBmdW5jKSB7XG4gICAgICB2YXIgYXJyID0gW107XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgdG1wdGhpcyA9IHRoaXM7XG4gICAgICAvLyBBc3NpZ25tZW50IHJlYXNzaWduYXRpb24gZGVwZW5kaW5nIG9uIGhvdyBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIGluLlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZnVsbGJvb2wpKSB7XG4gICAgICAgIGZ1bmMgPSBmdWxsYm9vbDtcbiAgICAgICAgZnVsbGJvb2wgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGEgY2FsbGJhY2sgd2FzIHBhc3NlZCB3aXRoIHRoZSBmdW5jdGlvbi5cbiAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHRtcHRoaXMsIGpQcm90b1twYXNzZnVuY10uY2FsbCh0bXB0aGlzLCBmdWxsYm9vbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBtYXRyaXggYW5kIHJ1biBjYWxjdWxhdGlvbnMuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRtcHRoaXMgPSBmdWxsYm9vbCA9PT0gdHJ1ZSA/IHRoaXMgOiB0aGlzLnRyYW5zcG9zZSgpO1xuICAgICAgICBmb3IgKDsgaSA8IHRtcHRoaXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgYXJyW2ldID0galN0YXRbcGFzc2Z1bmNdKHRtcHRoaXNbaV0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfVxuICAgICAgLy8gUGFzcyBmdWxsYm9vbCBpZiBvbmx5IHZlY3Rvciwgbm90IGEgbWF0cml4LiBmb3IgdmFyaWFuY2UgYW5kIHN0ZGV2LlxuICAgICAgcmV0dXJuIGpTdGF0W3Bhc3NmdW5jXSh0aGlzWzBdLCBmdWxsYm9vbCk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoKCdjdW1zdW0gY3VtcHJvZCcpLnNwbGl0KCcgJykpO1xuXG5cbi8vIEV4dGVuZCBqUHJvdG8gd2l0aCBtZXRob2RzIHdoaWNoIGRvbid0IHJlcXVpcmUgYXJndW1lbnRzIGFuZCB3b3JrIG9uIGNvbHVtbnMuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgLy8gSWYgYSBtYXRyaXggaXMgcGFzc2VkLCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBvcGVyYXRpb24gc2hvdWxkIGJlIGRvbmUgb25cbiAgICAvLyB0aGUgY29sdW1ucy5cbiAgICBqUHJvdG9bcGFzc2Z1bmNdID0gZnVuY3Rpb24oZnVsbGJvb2wsIGZ1bmMpIHtcbiAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB0bXB0aGlzID0gdGhpcztcbiAgICAgIC8vIEFzc2lnbm1lbnQgcmVhc3NpZ25hdGlvbiBkZXBlbmRpbmcgb24gaG93IHBhcmFtZXRlcnMgd2VyZSBwYXNzZWQgaW4uXG4gICAgICBpZiAoaXNGdW5jdGlvbihmdWxsYm9vbCkpIHtcbiAgICAgICAgZnVuYyA9IGZ1bGxib29sO1xuICAgICAgICBmdWxsYm9vbCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgaWYgYSBjYWxsYmFjayB3YXMgcGFzc2VkIHdpdGggdGhlIGZ1bmN0aW9uLlxuICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jLmNhbGwodG1wdGhpcywgalByb3RvW3Bhc3NmdW5jXS5jYWxsKHRtcHRoaXMsIGZ1bGxib29sKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIG1hdHJpeCBhbmQgcnVuIGNhbGN1bGF0aW9ucy5cbiAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKHBhc3NmdW5jICE9PSAnc3Vtcm93JylcbiAgICAgICAgICB0bXB0aGlzID0gZnVsbGJvb2wgPT09IHRydWUgPyB0aGlzIDogdGhpcy50cmFuc3Bvc2UoKTtcbiAgICAgICAgZm9yICg7IGkgPCB0bXB0aGlzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIGFycltpXSA9IGpTdGF0W3Bhc3NmdW5jXSh0bXB0aGlzW2ldKTtcbiAgICAgICAgcmV0dXJuIGZ1bGxib29sID09PSB0cnVlXG4gICAgICAgICAgICA/IGpTdGF0W3Bhc3NmdW5jXShqU3RhdC51dGlscy50b1ZlY3RvcihhcnIpKVxuICAgICAgICAgICAgOiBhcnI7XG4gICAgICB9XG4gICAgICAvLyBQYXNzIGZ1bGxib29sIGlmIG9ubHkgdmVjdG9yLCBub3QgYSBtYXRyaXguIGZvciB2YXJpYW5jZSBhbmQgc3RkZXYuXG4gICAgICByZXR1cm4galN0YXRbcGFzc2Z1bmNdKHRoaXNbMF0sIGZ1bGxib29sKTtcbiAgICB9O1xuICB9KShmdW5jc1tpXSk7XG59KSgoJ3N1bSBzdW1zcXJkIHN1bXNxZXJyIHN1bXJvdyBwcm9kdWN0IG1pbiBtYXggdW5pcXVlIG1lYW4gbWVhbnNxZXJyICcgK1xuICAgICdnZW9tZWFuIG1lZGlhbiBkaWZmIHJhbmsgbW9kZSByYW5nZSB2YXJpYW5jZSBkZXZpYXRpb24gc3RkZXYgbWVhbmRldiAnICtcbiAgICAnbWVkZGV2IGNvZWZmdmFyIHF1YXJ0aWxlcyBoaXN0b2dyYW0gc2tld25lc3Mga3VydG9zaXMnKS5zcGxpdCgnICcpKTtcblxuXG4vLyBFeHRlbmQgalByb3RvIHdpdGggZnVuY3Rpb25zIHRoYXQgdGFrZSBhcmd1bWVudHMuIE9wZXJhdGlvbnMgb24gbWF0cmljZXMgYXJlXG4vLyBkb25lIG9uIGNvbHVtbnMuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIHRtcHRoaXMgPSB0aGlzO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgdmFyIGNhbGxiYWNrRnVuY3Rpb247XG5cbiAgICAgIC8vIElmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24sIHdlIGFzc3VtZSBpdCdzIGEgY2FsbGJhY2s7IHdlXG4gICAgICAvLyBzdHJpcCB0aGUgY2FsbGJhY2sgb3V0IGFuZCBjYWxsIHRoZSBmdW5jdGlvbiBhZ2Fpbi5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgY2FsbGJhY2tGdW5jdGlvbiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIGFyZ3NUb1Bhc3MgPSBhcmdzLnNsaWNlKDAsIGFyZ3MubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uLmNhbGwodG1wdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalByb3RvW3Bhc3NmdW5jXS5hcHBseSh0bXB0aGlzLCBhcmdzVG9QYXNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIGN1cnJ5IHRoZSBmdW5jdGlvbiBhcmdzIGFuZCBjYWxsIG5vcm1hbGx5LlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGN1cnJpZWRGdW5jdGlvbiA9IGZ1bmN0aW9uIGN1cnJpZWRGdW5jdGlvbih2ZWN0b3IpIHtcbiAgICAgICAgICByZXR1cm4galN0YXRbcGFzc2Z1bmNdLmFwcGx5KHRtcHRoaXMsIFt2ZWN0b3JdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhpcyBpcyBhIG1hdHJpeCwgcnVuIGNvbHVtbi1ieS1jb2x1bW4uXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRtcHRoaXMgPSB0bXB0aGlzLnRyYW5zcG9zZSgpO1xuICAgICAgICBmb3IgKDsgaSA8IHRtcHRoaXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgYXJyW2ldID0gY3VycmllZEZ1bmN0aW9uKHRtcHRoaXNbaV0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UgcnVuIG9uIHRoZSB2ZWN0b3IuXG4gICAgICByZXR1cm4gY3VycmllZEZ1bmN0aW9uKHRoaXNbMF0pO1xuICAgIH07XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCdxdWFudGlsZXMgcGVyY2VudGlsZU9mU2NvcmUnLnNwbGl0KCcgJykpO1xuXG59KGpTdGF0LCBNYXRoKSk7XG4vLyBTcGVjaWFsIGZ1bmN0aW9ucyAvL1xuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbi8vIExvZy1nYW1tYSBmdW5jdGlvblxualN0YXQuZ2FtbWFsbiA9IGZ1bmN0aW9uIGdhbW1hbG4oeCkge1xuICB2YXIgaiA9IDA7XG4gIHZhciBjb2YgPSBbXG4gICAgNzYuMTgwMDkxNzI5NDcxNDYsIC04Ni41MDUzMjAzMjk0MTY3NywgMjQuMDE0MDk4MjQwODMwOTEsXG4gICAgLTEuMjMxNzM5NTcyNDUwMTU1LCAwLjEyMDg2NTA5NzM4NjYxNzllLTIsIC0wLjUzOTUyMzkzODQ5NTNlLTVcbiAgXTtcbiAgdmFyIHNlciA9IDEuMDAwMDAwMDAwMTkwMDE1O1xuICB2YXIgeHgsIHksIHRtcDtcbiAgdG1wID0gKHkgPSB4eCA9IHgpICsgNS41O1xuICB0bXAgLT0gKHh4ICsgMC41KSAqIE1hdGgubG9nKHRtcCk7XG4gIGZvciAoOyBqIDwgNjsgaisrKVxuICAgIHNlciArPSBjb2Zbal0gLyArK3k7XG4gIHJldHVybiBNYXRoLmxvZygyLjUwNjYyODI3NDYzMTAwMDUgKiBzZXIgLyB4eCkgLSB0bXA7XG59O1xuXG4vKlxuICogbG9nLWdhbW1hIGZ1bmN0aW9uIHRvIHN1cHBvcnQgcG9pc3NvbiBkaXN0cmlidXRpb24gc2FtcGxpbmcuIFRoZVxuICogYWxnb3JpdGhtIGNvbWVzIGZyb20gU1BFQ0ZVTiBieSBTaGFuamllIFpoYW5nIGFuZCBKaWFubWluZyBKaW4gYW5kIHRoZWlyXG4gKiBib29rIFwiQ29tcHV0YXRpb24gb2YgU3BlY2lhbCBGdW5jdGlvbnNcIiwgMTk5NiwgSm9obiBXaWxleSAmIFNvbnMsIEluYy5cbiAqL1xualN0YXQubG9nZ2FtID0gZnVuY3Rpb24gbG9nZ2FtKHgpIHtcbiAgdmFyIHgwLCB4MiwgeHAsIGdsLCBnbDA7XG4gIHZhciBrLCBuO1xuXG4gIHZhciBhID0gWzguMzMzMzMzMzMzMzMzMzMzZS0wMiwgLTIuNzc3Nzc3Nzc3Nzc3Nzc4ZS0wMyxcbiAgICAgICAgICA3LjkzNjUwNzkzNjUwNzkzN2UtMDQsIC01Ljk1MjM4MDk1MjM4MDk1MmUtMDQsXG4gICAgICAgICAgOC40MTc1MDg0MTc1MDg0MThlLTA0LCAtMS45MTc1MjY5MTc1MjY5MThlLTAzLFxuICAgICAgICAgIDYuNDEwMjU2NDEwMjU2NDEwZS0wMywgLTIuOTU1MDY1MzU5NDc3MTI0ZS0wMixcbiAgICAgICAgICAxLjc5NjQ0MzcyMzY4ODMwN2UtMDEsIC0xLjM5MjQzMjIxNjkwNTkwZSswMF07XG4gIHgwID0geDtcbiAgbiA9IDA7XG4gIGlmICgoeCA9PSAxLjApIHx8ICh4ID09IDIuMCkpIHtcbiAgICAgIHJldHVybiAwLjA7XG4gIH1cbiAgaWYgKHggPD0gNy4wKSB7XG4gICAgICBuID0gTWF0aC5mbG9vcig3IC0geCk7XG4gICAgICB4MCA9IHggKyBuO1xuICB9XG4gIHgyID0gMS4wIC8gKHgwICogeDApO1xuICB4cCA9IDIgKiBNYXRoLlBJO1xuICBnbDAgPSBhWzldO1xuICBmb3IgKGsgPSA4OyBrID49IDA7IGstLSkge1xuICAgICAgZ2wwICo9IHgyO1xuICAgICAgZ2wwICs9IGFba107XG4gIH1cbiAgZ2wgPSBnbDAgLyB4MCArIDAuNSAqIE1hdGgubG9nKHhwKSArICh4MCAtIDAuNSkgKiBNYXRoLmxvZyh4MCkgLSB4MDtcbiAgaWYgKHggPD0gNy4wKSB7XG4gICAgICBmb3IgKGsgPSAxOyBrIDw9IG47IGsrKykge1xuICAgICAgICAgIGdsIC09IE1hdGgubG9nKHgwIC0gMS4wKTtcbiAgICAgICAgICB4MCAtPSAxLjA7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGdsO1xufVxuXG4vLyBnYW1tYSBvZiB4XG5qU3RhdC5nYW1tYWZuID0gZnVuY3Rpb24gZ2FtbWFmbih4KSB7XG4gIHZhciBwID0gWy0xLjcxNjE4NTEzODg2NTQ5NSwgMjQuNzY1NjUwODA1NTc1OTIsIC0zNzkuODA0MjU2NDcwOTQ1NjMsXG4gICAgICAgICAgIDYyOS4zMzExNTUzMTI4MTg0LCA4NjYuOTY2MjAyNzkwNDEzMywgLTMxNDUxLjI3Mjk2ODg0ODM2NyxcbiAgICAgICAgICAgLTM2MTQ0LjQxMzQxODY5MTE3NiwgNjY0NTYuMTQzODIwMjQwNTRcbiAgXTtcbiAgdmFyIHEgPSBbLTMwLjg0MDIzMDAxMTk3MzksIDMxNS4zNTA2MjY5Nzk2MDQxNiwgLTEwMTUuMTU2MzY3NDkwMjE5MixcbiAgICAgICAgICAgLTMxMDcuNzcxNjcxNTcyMzExLCAyMjUzOC4xMTg0MjA5ODAxNTEsIDQ3NTUuODQ2Mjc3NTI3ODgxMSxcbiAgICAgICAgICAgLTEzNDY1OS45NTk4NjQ5NjkzLCAtMTE1MTMyLjI1OTY3NTU1MzVdO1xuICB2YXIgZmFjdCA9IGZhbHNlO1xuICB2YXIgbiA9IDA7XG4gIHZhciB4ZGVuID0gMDtcbiAgdmFyIHhudW0gPSAwO1xuICB2YXIgeSA9IHg7XG4gIHZhciBpLCB6LCB5aSwgcmVzO1xuICBpZiAoeCA+IDE3MS42MjQzNzY5NTM2MDc2KSB7XG4gICAgcmV0dXJuIEluZmluaXR5O1xuICB9XG4gIGlmICh5IDw9IDApIHtcbiAgICByZXMgPSB5ICUgMSArIDMuNmUtMTY7XG4gICAgaWYgKHJlcykge1xuICAgICAgZmFjdCA9ICghKHkgJiAxKSA/IDEgOiAtMSkgKiBNYXRoLlBJIC8gTWF0aC5zaW4oTWF0aC5QSSAqIHJlcyk7XG4gICAgICB5ID0gMSAtIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gIH1cbiAgeWkgPSB5O1xuICBpZiAoeSA8IDEpIHtcbiAgICB6ID0geSsrO1xuICB9IGVsc2Uge1xuICAgIHogPSAoeSAtPSBuID0gKHkgfCAwKSAtIDEpIC0gMTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7XG4gICAgeG51bSA9ICh4bnVtICsgcFtpXSkgKiB6O1xuICAgIHhkZW4gPSB4ZGVuICogeiArIHFbaV07XG4gIH1cbiAgcmVzID0geG51bSAvIHhkZW4gKyAxO1xuICBpZiAoeWkgPCB5KSB7XG4gICAgcmVzIC89IHlpO1xuICB9IGVsc2UgaWYgKHlpID4geSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHJlcyAqPSB5O1xuICAgICAgeSsrO1xuICAgIH1cbiAgfVxuICBpZiAoZmFjdCkge1xuICAgIHJlcyA9IGZhY3QgLyByZXM7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cblxuLy8gbG93ZXIgaW5jb21wbGV0ZSBnYW1tYSBmdW5jdGlvbiwgd2hpY2ggaXMgdXN1YWxseSB0eXBlc2V0IHdpdGggYVxuLy8gbG93ZXItY2FzZSBncmVlayBnYW1tYSBhcyB0aGUgZnVuY3Rpb24gc3ltYm9sXG5qU3RhdC5nYW1tYXAgPSBmdW5jdGlvbiBnYW1tYXAoYSwgeCkge1xuICByZXR1cm4galN0YXQubG93UmVnR2FtbWEoYSwgeCkgKiBqU3RhdC5nYW1tYWZuKGEpO1xufTtcblxuXG4vLyBUaGUgbG93ZXIgcmVndWxhcml6ZWQgaW5jb21wbGV0ZSBnYW1tYSBmdW5jdGlvbiwgdXN1YWxseSB3cml0dGVuIFAoYSx4KVxualN0YXQubG93UmVnR2FtbWEgPSBmdW5jdGlvbiBsb3dSZWdHYW1tYShhLCB4KSB7XG4gIHZhciBhbG4gPSBqU3RhdC5nYW1tYWxuKGEpO1xuICB2YXIgYXAgPSBhO1xuICB2YXIgc3VtID0gMSAvIGE7XG4gIHZhciBkZWwgPSBzdW07XG4gIHZhciBiID0geCArIDEgLSBhO1xuICB2YXIgYyA9IDEgLyAxLjBlLTMwO1xuICB2YXIgZCA9IDEgLyBiO1xuICB2YXIgaCA9IGQ7XG4gIHZhciBpID0gMTtcbiAgLy8gY2FsY3VsYXRlIG1heGltdW0gbnVtYmVyIG9mIGl0dGVyYXRpb25zIHJlcXVpcmVkIGZvciBhXG4gIHZhciBJVE1BWCA9IC1+KE1hdGgubG9nKChhID49IDEpID8gYSA6IDEgLyBhKSAqIDguNSArIGEgKiAwLjQgKyAxNyk7XG4gIHZhciBhbjtcblxuICBpZiAoeCA8IDAgfHwgYSA8PSAwKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfSBlbHNlIGlmICh4IDwgYSArIDEpIHtcbiAgICBmb3IgKDsgaSA8PSBJVE1BWDsgaSsrKSB7XG4gICAgICBzdW0gKz0gZGVsICo9IHggLyArK2FwO1xuICAgIH1cbiAgICByZXR1cm4gKHN1bSAqIE1hdGguZXhwKC14ICsgYSAqIE1hdGgubG9nKHgpIC0gKGFsbikpKTtcbiAgfVxuXG4gIGZvciAoOyBpIDw9IElUTUFYOyBpKyspIHtcbiAgICBhbiA9IC1pICogKGkgLSBhKTtcbiAgICBiICs9IDI7XG4gICAgZCA9IGFuICogZCArIGI7XG4gICAgYyA9IGIgKyBhbiAvIGM7XG4gICAgZCA9IDEgLyBkO1xuICAgIGggKj0gZCAqIGM7XG4gIH1cblxuICByZXR1cm4gKDEgLSBoICogTWF0aC5leHAoLXggKyBhICogTWF0aC5sb2coeCkgLSAoYWxuKSkpO1xufTtcblxuLy8gbmF0dXJhbCBsb2cgZmFjdG9yaWFsIG9mIG5cbmpTdGF0LmZhY3RvcmlhbGxuID0gZnVuY3Rpb24gZmFjdG9yaWFsbG4obikge1xuICByZXR1cm4gbiA8IDAgPyBOYU4gOiBqU3RhdC5nYW1tYWxuKG4gKyAxKTtcbn07XG5cbi8vIGZhY3RvcmlhbCBvZiBuXG5qU3RhdC5mYWN0b3JpYWwgPSBmdW5jdGlvbiBmYWN0b3JpYWwobikge1xuICByZXR1cm4gbiA8IDAgPyBOYU4gOiBqU3RhdC5nYW1tYWZuKG4gKyAxKTtcbn07XG5cbi8vIGNvbWJpbmF0aW9ucyBvZiBuLCBtXG5qU3RhdC5jb21iaW5hdGlvbiA9IGZ1bmN0aW9uIGNvbWJpbmF0aW9uKG4sIG0pIHtcbiAgLy8gbWFrZSBzdXJlIG4gb3IgbSBkb24ndCBleGNlZWQgdGhlIHVwcGVyIGxpbWl0IG9mIHVzYWJsZSB2YWx1ZXNcbiAgcmV0dXJuIChuID4gMTcwIHx8IG0gPiAxNzApXG4gICAgICA/IE1hdGguZXhwKGpTdGF0LmNvbWJpbmF0aW9ubG4obiwgbSkpXG4gICAgICA6IChqU3RhdC5mYWN0b3JpYWwobikgLyBqU3RhdC5mYWN0b3JpYWwobSkpIC8galN0YXQuZmFjdG9yaWFsKG4gLSBtKTtcbn07XG5cblxualN0YXQuY29tYmluYXRpb25sbiA9IGZ1bmN0aW9uIGNvbWJpbmF0aW9ubG4obiwgbSl7XG4gIHJldHVybiBqU3RhdC5mYWN0b3JpYWxsbihuKSAtIGpTdGF0LmZhY3RvcmlhbGxuKG0pIC0galN0YXQuZmFjdG9yaWFsbG4obiAtIG0pO1xufTtcblxuXG4vLyBwZXJtdXRhdGlvbnMgb2YgbiwgbVxualN0YXQucGVybXV0YXRpb24gPSBmdW5jdGlvbiBwZXJtdXRhdGlvbihuLCBtKSB7XG4gIHJldHVybiBqU3RhdC5mYWN0b3JpYWwobikgLyBqU3RhdC5mYWN0b3JpYWwobiAtIG0pO1xufTtcblxuXG4vLyBiZXRhIGZ1bmN0aW9uXG5qU3RhdC5iZXRhZm4gPSBmdW5jdGlvbiBiZXRhZm4oeCwgeSkge1xuICAvLyBlbnN1cmUgYXJndW1lbnRzIGFyZSBwb3NpdGl2ZVxuICBpZiAoeCA8PSAwIHx8IHkgPD0gMClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAvLyBtYWtlIHN1cmUgeCArIHkgZG9lc24ndCBleGNlZWQgdGhlIHVwcGVyIGxpbWl0IG9mIHVzYWJsZSB2YWx1ZXNcbiAgcmV0dXJuICh4ICsgeSA+IDE3MClcbiAgICAgID8gTWF0aC5leHAoalN0YXQuYmV0YWxuKHgsIHkpKVxuICAgICAgOiBqU3RhdC5nYW1tYWZuKHgpICogalN0YXQuZ2FtbWFmbih5KSAvIGpTdGF0LmdhbW1hZm4oeCArIHkpO1xufTtcblxuXG4vLyBuYXR1cmFsIGxvZ2FyaXRobSBvZiBiZXRhIGZ1bmN0aW9uXG5qU3RhdC5iZXRhbG4gPSBmdW5jdGlvbiBiZXRhbG4oeCwgeSkge1xuICByZXR1cm4galN0YXQuZ2FtbWFsbih4KSArIGpTdGF0LmdhbW1hbG4oeSkgLSBqU3RhdC5nYW1tYWxuKHggKyB5KTtcbn07XG5cblxuLy8gRXZhbHVhdGVzIHRoZSBjb250aW51ZWQgZnJhY3Rpb24gZm9yIGluY29tcGxldGUgYmV0YSBmdW5jdGlvbiBieSBtb2RpZmllZFxuLy8gTGVudHoncyBtZXRob2QuXG5qU3RhdC5iZXRhY2YgPSBmdW5jdGlvbiBiZXRhY2YoeCwgYSwgYikge1xuICB2YXIgZnBtaW4gPSAxZS0zMDtcbiAgdmFyIG0gPSAxO1xuICB2YXIgcWFiID0gYSArIGI7XG4gIHZhciBxYXAgPSBhICsgMTtcbiAgdmFyIHFhbSA9IGEgLSAxO1xuICB2YXIgYyA9IDE7XG4gIHZhciBkID0gMSAtIHFhYiAqIHggLyBxYXA7XG4gIHZhciBtMiwgYWEsIGRlbCwgaDtcblxuICAvLyBUaGVzZSBxJ3Mgd2lsbCBiZSB1c2VkIGluIGZhY3RvcnMgdGhhdCBvY2N1ciBpbiB0aGUgY29lZmZpY2llbnRzXG4gIGlmIChNYXRoLmFicyhkKSA8IGZwbWluKVxuICAgIGQgPSBmcG1pbjtcbiAgZCA9IDEgLyBkO1xuICBoID0gZDtcblxuICBmb3IgKDsgbSA8PSAxMDA7IG0rKykge1xuICAgIG0yID0gMiAqIG07XG4gICAgYWEgPSBtICogKGIgLSBtKSAqIHggLyAoKHFhbSArIG0yKSAqIChhICsgbTIpKTtcbiAgICAvLyBPbmUgc3RlcCAodGhlIGV2ZW4gb25lKSBvZiB0aGUgcmVjdXJyZW5jZVxuICAgIGQgPSAxICsgYWEgKiBkO1xuICAgIGlmIChNYXRoLmFicyhkKSA8IGZwbWluKVxuICAgICAgZCA9IGZwbWluO1xuICAgIGMgPSAxICsgYWEgLyBjO1xuICAgIGlmIChNYXRoLmFicyhjKSA8IGZwbWluKVxuICAgICAgYyA9IGZwbWluO1xuICAgIGQgPSAxIC8gZDtcbiAgICBoICo9IGQgKiBjO1xuICAgIGFhID0gLShhICsgbSkgKiAocWFiICsgbSkgKiB4IC8gKChhICsgbTIpICogKHFhcCArIG0yKSk7XG4gICAgLy8gTmV4dCBzdGVwIG9mIHRoZSByZWN1cnJlbmNlICh0aGUgb2RkIG9uZSlcbiAgICBkID0gMSArIGFhICogZDtcbiAgICBpZiAoTWF0aC5hYnMoZCkgPCBmcG1pbilcbiAgICAgIGQgPSBmcG1pbjtcbiAgICBjID0gMSArIGFhIC8gYztcbiAgICBpZiAoTWF0aC5hYnMoYykgPCBmcG1pbilcbiAgICAgIGMgPSBmcG1pbjtcbiAgICBkID0gMSAvIGQ7XG4gICAgZGVsID0gZCAqIGM7XG4gICAgaCAqPSBkZWw7XG4gICAgaWYgKE1hdGguYWJzKGRlbCAtIDEuMCkgPCAzZS03KVxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gaDtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgbG93ZXIgcmVndWxhcml6ZWQgaW5vbXBsZXRlIGdhbW1hIGZ1bmN0aW9uXG5qU3RhdC5nYW1tYXBpbnYgPSBmdW5jdGlvbiBnYW1tYXBpbnYocCwgYSkge1xuICB2YXIgaiA9IDA7XG4gIHZhciBhMSA9IGEgLSAxO1xuICB2YXIgRVBTID0gMWUtODtcbiAgdmFyIGdsbiA9IGpTdGF0LmdhbW1hbG4oYSk7XG4gIHZhciB4LCBlcnIsIHQsIHUsIHBwLCBsbmExLCBhZmFjO1xuXG4gIGlmIChwID49IDEpXG4gICAgcmV0dXJuIE1hdGgubWF4KDEwMCwgYSArIDEwMCAqIE1hdGguc3FydChhKSk7XG4gIGlmIChwIDw9IDApXG4gICAgcmV0dXJuIDA7XG4gIGlmIChhID4gMSkge1xuICAgIGxuYTEgPSBNYXRoLmxvZyhhMSk7XG4gICAgYWZhYyA9IE1hdGguZXhwKGExICogKGxuYTEgLSAxKSAtIGdsbik7XG4gICAgcHAgPSAocCA8IDAuNSkgPyBwIDogMSAtIHA7XG4gICAgdCA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHBwKSk7XG4gICAgeCA9ICgyLjMwNzUzICsgdCAqIDAuMjcwNjEpIC8gKDEgKyB0ICogKDAuOTkyMjkgKyB0ICogMC4wNDQ4MSkpIC0gdDtcbiAgICBpZiAocCA8IDAuNSlcbiAgICAgIHggPSAteDtcbiAgICB4ID0gTWF0aC5tYXgoMWUtMyxcbiAgICAgICAgICAgICAgICAgYSAqIE1hdGgucG93KDEgLSAxIC8gKDkgKiBhKSAtIHggLyAoMyAqIE1hdGguc3FydChhKSksIDMpKTtcbiAgfSBlbHNlIHtcbiAgICB0ID0gMSAtIGEgKiAoMC4yNTMgKyBhICogMC4xMik7XG4gICAgaWYgKHAgPCB0KVxuICAgICAgeCA9IE1hdGgucG93KHAgLyB0LCAxIC8gYSk7XG4gICAgZWxzZVxuICAgICAgeCA9IDEgLSBNYXRoLmxvZygxIC0gKHAgLSB0KSAvICgxIC0gdCkpO1xuICB9XG5cbiAgZm9yKDsgaiA8IDEyOyBqKyspIHtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZXJyID0galN0YXQubG93UmVnR2FtbWEoYSwgeCkgLSBwO1xuICAgIGlmIChhID4gMSlcbiAgICAgIHQgPSBhZmFjICogTWF0aC5leHAoLSh4IC0gYTEpICsgYTEgKiAoTWF0aC5sb2coeCkgLSBsbmExKSk7XG4gICAgZWxzZVxuICAgICAgdCA9IE1hdGguZXhwKC14ICsgYTEgKiBNYXRoLmxvZyh4KSAtIGdsbik7XG4gICAgdSA9IGVyciAvIHQ7XG4gICAgeCAtPSAodCA9IHUgLyAoMSAtIDAuNSAqIE1hdGgubWluKDEsIHUgKiAoKGEgLSAxKSAvIHggLSAxKSkpKTtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgeCA9IDAuNSAqICh4ICsgdCk7XG4gICAgaWYgKE1hdGguYWJzKHQpIDwgRVBTICogeClcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHg7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZih4KVxualN0YXQuZXJmID0gZnVuY3Rpb24gZXJmKHgpIHtcbiAgdmFyIGNvZiA9IFstMS4zMDI2NTM3MTk3ODE3MDk0LCA2LjQxOTY5NzkyMzU2NDkwMjZlLTEsIDEuOTQ3NjQ3MzIwNDE4NTgzNmUtMixcbiAgICAgICAgICAgICAtOS41NjE1MTQ3ODY4MDg2MzFlLTMsIC05LjQ2NTk1MzQ0NDgyMDM2ZS00LCAzLjY2ODM5NDk3ODUyNzYxZS00LFxuICAgICAgICAgICAgIDQuMjUyMzMyNDgwNjkwN2UtNSwgLTIuMDI3ODU3ODExMjUzNGUtNSwgLTEuNjI0MjkwMDA0NjQ3ZS02LFxuICAgICAgICAgICAgIDEuMzAzNjU1ODM1NTgwZS02LCAxLjU2MjY0NDE3MjJlLTgsIC04LjUyMzgwOTU5MTVlLTgsXG4gICAgICAgICAgICAgNi41MjkwNTQ0MzllLTksIDUuMDU5MzQzNDk1ZS05LCAtOS45MTM2NDE1NmUtMTAsXG4gICAgICAgICAgICAgLTIuMjczNjUxMjJlLTEwLCA5LjY0Njc5MTFlLTExLCAyLjM5NDAzOGUtMTIsXG4gICAgICAgICAgICAgLTYuODg2MDI3ZS0xMiwgOC45NDQ4N2UtMTMsIDMuMTMwOTJlLTEzLFxuICAgICAgICAgICAgIC0xLjEyNzA4ZS0xMywgMy44MWUtMTYsIDcuMTA2ZS0xNSxcbiAgICAgICAgICAgICAtMS41MjNlLTE1LCAtOS40ZS0xNywgMS4yMWUtMTYsXG4gICAgICAgICAgICAgLTIuOGUtMTddO1xuICB2YXIgaiA9IGNvZi5sZW5ndGggLSAxO1xuICB2YXIgaXNuZWcgPSBmYWxzZTtcbiAgdmFyIGQgPSAwO1xuICB2YXIgZGQgPSAwO1xuICB2YXIgdCwgdHksIHRtcCwgcmVzO1xuXG4gIGlmICh4IDwgMCkge1xuICAgIHggPSAteDtcbiAgICBpc25lZyA9IHRydWU7XG4gIH1cblxuICB0ID0gMiAvICgyICsgeCk7XG4gIHR5ID0gNCAqIHQgLSAyO1xuXG4gIGZvcig7IGogPiAwOyBqLS0pIHtcbiAgICB0bXAgPSBkO1xuICAgIGQgPSB0eSAqIGQgLSBkZCArIGNvZltqXTtcbiAgICBkZCA9IHRtcDtcbiAgfVxuXG4gIHJlcyA9IHQgKiBNYXRoLmV4cCgteCAqIHggKyAwLjUgKiAoY29mWzBdICsgdHkgKiBkKSAtIGRkKTtcbiAgcmV0dXJuIGlzbmVnID8gcmVzIC0gMSA6IDEgLSByZXM7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGNvbXBsbWVudGFyeSBlcnJvciBmdW5jdGlvbiBlcmZjKHgpXG5qU3RhdC5lcmZjID0gZnVuY3Rpb24gZXJmYyh4KSB7XG4gIHJldHVybiAxIC0galN0YXQuZXJmKHgpO1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uXG5qU3RhdC5lcmZjaW52ID0gZnVuY3Rpb24gZXJmY2ludihwKSB7XG4gIHZhciBqID0gMDtcbiAgdmFyIHgsIGVyciwgdCwgcHA7XG4gIGlmIChwID49IDIpXG4gICAgcmV0dXJuIC0xMDA7XG4gIGlmIChwIDw9IDApXG4gICAgcmV0dXJuIDEwMDtcbiAgcHAgPSAocCA8IDEpID8gcCA6IDIgLSBwO1xuICB0ID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocHAgLyAyKSk7XG4gIHggPSAtMC43MDcxMSAqICgoMi4zMDc1MyArIHQgKiAwLjI3MDYxKSAvXG4gICAgICAgICAgICAgICAgICAoMSArIHQgKiAoMC45OTIyOSArIHQgKiAwLjA0NDgxKSkgLSB0KTtcbiAgZm9yICg7IGogPCAyOyBqKyspIHtcbiAgICBlcnIgPSBqU3RhdC5lcmZjKHgpIC0gcHA7XG4gICAgeCArPSBlcnIgLyAoMS4xMjgzNzkxNjcwOTU1MTI1NyAqIE1hdGguZXhwKC14ICogeCkgLSB4ICogZXJyKTtcbiAgfVxuICByZXR1cm4gKHAgPCAxKSA/IHggOiAteDtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgaW5jb21wbGV0ZSBiZXRhIGZ1bmN0aW9uXG5qU3RhdC5pYmV0YWludiA9IGZ1bmN0aW9uIGliZXRhaW52KHAsIGEsIGIpIHtcbiAgdmFyIEVQUyA9IDFlLTg7XG4gIHZhciBhMSA9IGEgLSAxO1xuICB2YXIgYjEgPSBiIC0gMTtcbiAgdmFyIGogPSAwO1xuICB2YXIgbG5hLCBsbmIsIHBwLCB0LCB1LCBlcnIsIHgsIGFsLCBoLCB3LCBhZmFjO1xuICBpZiAocCA8PSAwKVxuICAgIHJldHVybiAwO1xuICBpZiAocCA+PSAxKVxuICAgIHJldHVybiAxO1xuICBpZiAoYSA+PSAxICYmIGIgPj0gMSkge1xuICAgIHBwID0gKHAgPCAwLjUpID8gcCA6IDEgLSBwO1xuICAgIHQgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhwcCkpO1xuICAgIHggPSAoMi4zMDc1MyArIHQgKiAwLjI3MDYxKSAvICgxICsgdCogKDAuOTkyMjkgKyB0ICogMC4wNDQ4MSkpIC0gdDtcbiAgICBpZiAocCA8IDAuNSlcbiAgICAgIHggPSAteDtcbiAgICBhbCA9ICh4ICogeCAtIDMpIC8gNjtcbiAgICBoID0gMiAvICgxIC8gKDIgKiBhIC0gMSkgICsgMSAvICgyICogYiAtIDEpKTtcbiAgICB3ID0gKHggKiBNYXRoLnNxcnQoYWwgKyBoKSAvIGgpIC0gKDEgLyAoMiAqIGIgLSAxKSAtIDEgLyAoMiAqIGEgLSAxKSkgKlxuICAgICAgICAoYWwgKyA1IC8gNiAtIDIgLyAoMyAqIGgpKTtcbiAgICB4ID0gYSAvIChhICsgYiAqIE1hdGguZXhwKDIgKiB3KSk7XG4gIH0gZWxzZSB7XG4gICAgbG5hID0gTWF0aC5sb2coYSAvIChhICsgYikpO1xuICAgIGxuYiA9IE1hdGgubG9nKGIgLyAoYSArIGIpKTtcbiAgICB0ID0gTWF0aC5leHAoYSAqIGxuYSkgLyBhO1xuICAgIHUgPSBNYXRoLmV4cChiICogbG5iKSAvIGI7XG4gICAgdyA9IHQgKyB1O1xuICAgIGlmIChwIDwgdCAvIHcpXG4gICAgICB4ID0gTWF0aC5wb3coYSAqIHcgKiBwLCAxIC8gYSk7XG4gICAgZWxzZVxuICAgICAgeCA9IDEgLSBNYXRoLnBvdyhiICogdyAqICgxIC0gcCksIDEgLyBiKTtcbiAgfVxuICBhZmFjID0gLWpTdGF0LmdhbW1hbG4oYSkgLSBqU3RhdC5nYW1tYWxuKGIpICsgalN0YXQuZ2FtbWFsbihhICsgYik7XG4gIGZvcig7IGogPCAxMDsgaisrKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gMSlcbiAgICAgIHJldHVybiB4O1xuICAgIGVyciA9IGpTdGF0LmliZXRhKHgsIGEsIGIpIC0gcDtcbiAgICB0ID0gTWF0aC5leHAoYTEgKiBNYXRoLmxvZyh4KSArIGIxICogTWF0aC5sb2coMSAtIHgpICsgYWZhYyk7XG4gICAgdSA9IGVyciAvIHQ7XG4gICAgeCAtPSAodCA9IHUgLyAoMSAtIDAuNSAqIE1hdGgubWluKDEsIHUgKiAoYTEgLyB4IC0gYjEgLyAoMSAtIHgpKSkpKTtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgeCA9IDAuNSAqICh4ICsgdCk7XG4gICAgaWYgKHggPj0gMSlcbiAgICAgIHggPSAwLjUgKiAoeCArIHQgKyAxKTtcbiAgICBpZiAoTWF0aC5hYnModCkgPCBFUFMgKiB4ICYmIGogPiAwKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHg7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGluY29tcGxldGUgYmV0YSBmdW5jdGlvbiBJX3goYSxiKVxualN0YXQuaWJldGEgPSBmdW5jdGlvbiBpYmV0YSh4LCBhLCBiKSB7XG4gIC8vIEZhY3RvcnMgaW4gZnJvbnQgb2YgdGhlIGNvbnRpbnVlZCBmcmFjdGlvbi5cbiAgdmFyIGJ0ID0gKHggPT09IDAgfHwgeCA9PT0gMSkgPyAgMCA6XG4gICAgTWF0aC5leHAoalN0YXQuZ2FtbWFsbihhICsgYikgLSBqU3RhdC5nYW1tYWxuKGEpIC1cbiAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKGIpICsgYSAqIE1hdGgubG9nKHgpICsgYiAqXG4gICAgICAgICAgICAgTWF0aC5sb2coMSAtIHgpKTtcbiAgaWYgKHggPCAwIHx8IHggPiAxKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHggPCAoYSArIDEpIC8gKGEgKyBiICsgMikpXG4gICAgLy8gVXNlIGNvbnRpbnVlZCBmcmFjdGlvbiBkaXJlY3RseS5cbiAgICByZXR1cm4gYnQgKiBqU3RhdC5iZXRhY2YoeCwgYSwgYikgLyBhO1xuICAvLyBlbHNlIHVzZSBjb250aW51ZWQgZnJhY3Rpb24gYWZ0ZXIgbWFraW5nIHRoZSBzeW1tZXRyeSB0cmFuc2Zvcm1hdGlvbi5cbiAgcmV0dXJuIDEgLSBidCAqIGpTdGF0LmJldGFjZigxIC0geCwgYiwgYSkgLyBiO1xufTtcblxuXG4vLyBSZXR1cm5zIGEgbm9ybWFsIGRldmlhdGUgKG11PTAsIHNpZ21hPTEpLlxuLy8gSWYgbiBhbmQgbSBhcmUgc3BlY2lmaWVkIGl0IHJldHVybnMgYSBvYmplY3Qgb2Ygbm9ybWFsIGRldmlhdGVzLlxualN0YXQucmFuZG4gPSBmdW5jdGlvbiByYW5kbihuLCBtKSB7XG4gIHZhciB1LCB2LCB4LCB5LCBxO1xuICBpZiAoIW0pXG4gICAgbSA9IG47XG4gIGlmIChuKVxuICAgIHJldHVybiBqU3RhdC5jcmVhdGUobiwgbSwgZnVuY3Rpb24oKSB7IHJldHVybiBqU3RhdC5yYW5kbigpOyB9KTtcbiAgZG8ge1xuICAgIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gICAgdiA9IDEuNzE1NiAqIChqU3RhdC5fcmFuZG9tX2ZuKCkgLSAwLjUpO1xuICAgIHggPSB1IC0gMC40NDk4NzE7XG4gICAgeSA9IE1hdGguYWJzKHYpICsgMC4zODY1OTU7XG4gICAgcSA9IHggKiB4ICsgeSAqICgwLjE5NjAwICogeSAtIDAuMjU0NzIgKiB4KTtcbiAgfSB3aGlsZSAocSA+IDAuMjc1OTcgJiYgKHEgPiAwLjI3ODQ2IHx8IHYgKiB2ID4gLTQgKiBNYXRoLmxvZyh1KSAqIHUgKiB1KSk7XG4gIHJldHVybiB2IC8gdTtcbn07XG5cblxuLy8gUmV0dXJucyBhIGdhbW1hIGRldmlhdGUgYnkgdGhlIG1ldGhvZCBvZiBNYXJzYWdsaWEgYW5kIFRzYW5nLlxualN0YXQucmFuZGcgPSBmdW5jdGlvbiByYW5kZyhzaGFwZSwgbiwgbSkge1xuICB2YXIgb2FscGggPSBzaGFwZTtcbiAgdmFyIGExLCBhMiwgdSwgdiwgeCwgbWF0O1xuICBpZiAoIW0pXG4gICAgbSA9IG47XG4gIGlmICghc2hhcGUpXG4gICAgc2hhcGUgPSAxO1xuICBpZiAobikge1xuICAgIG1hdCA9IGpTdGF0Lnplcm9zKG4sbSk7XG4gICAgbWF0LmFsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4galN0YXQucmFuZGcoc2hhcGUpOyB9KTtcbiAgICByZXR1cm4gbWF0O1xuICB9XG4gIGlmIChzaGFwZSA8IDEpXG4gICAgc2hhcGUgKz0gMTtcbiAgYTEgPSBzaGFwZSAtIDEgLyAzO1xuICBhMiA9IDEgLyBNYXRoLnNxcnQoOSAqIGExKTtcbiAgZG8ge1xuICAgIGRvIHtcbiAgICAgIHggPSBqU3RhdC5yYW5kbigpO1xuICAgICAgdiA9IDEgKyBhMiAqIHg7XG4gICAgfSB3aGlsZSh2IDw9IDApO1xuICAgIHYgPSB2ICogdiAqIHY7XG4gICAgdSA9IGpTdGF0Ll9yYW5kb21fZm4oKTtcbiAgfSB3aGlsZSh1ID4gMSAtIDAuMzMxICogTWF0aC5wb3coeCwgNCkgJiZcbiAgICAgICAgICBNYXRoLmxvZyh1KSA+IDAuNSAqIHgqeCArIGExICogKDEgLSB2ICsgTWF0aC5sb2codikpKTtcbiAgLy8gYWxwaGEgPiAxXG4gIGlmIChzaGFwZSA9PSBvYWxwaClcbiAgICByZXR1cm4gYTEgKiB2O1xuICAvLyBhbHBoYSA8IDFcbiAgZG8ge1xuICAgIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gIH0gd2hpbGUodSA9PT0gMCk7XG4gIHJldHVybiBNYXRoLnBvdyh1LCAxIC8gb2FscGgpICogYTEgKiB2O1xufTtcblxuXG4vLyBtYWtpbmcgdXNlIG9mIHN0YXRpYyBtZXRob2RzIG9uIHRoZSBpbnN0YW5jZVxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpTdGF0LmZuW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGpTdGF0KFxuICAgICAgICAgIGpTdGF0Lm1hcCh0aGlzLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4galN0YXRbcGFzc2Z1bmNdKHZhbHVlKTsgfSkpO1xuICAgIH1cbiAgfSkoZnVuY3NbaV0pO1xufSkoJ2dhbW1hbG4gZ2FtbWFmbiBmYWN0b3JpYWwgZmFjdG9yaWFsbG4nLnNwbGl0KCcgJykpO1xuXG5cbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICBqU3RhdC5mbltwYXNzZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ3JhbmRuJy5zcGxpdCgnICcpKTtcblxufShqU3RhdCwgTWF0aCkpO1xuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbi8vIGdlbmVyYXRlIGFsbCBkaXN0cmlidXRpb24gaW5zdGFuY2UgbWV0aG9kc1xuKGZ1bmN0aW9uKGxpc3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24oZnVuYykge1xuICAgIC8vIGRpc3RyaWJ1dGlvbiBpbnN0YW5jZSBtZXRob2RcbiAgICBqU3RhdFtmdW5jXSA9IGZ1bmN0aW9uIGYoYSwgYiwgYykge1xuICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGYpKVxuICAgICAgICByZXR1cm4gbmV3IGYoYSwgYiwgYyk7XG4gICAgICB0aGlzLl9hID0gYTtcbiAgICAgIHRoaXMuX2IgPSBiO1xuICAgICAgdGhpcy5fYyA9IGM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIGRpc3RyaWJ1dGlvbiBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIGpTdGF0IGluc3RhbmNlXG4gICAgalN0YXQuZm5bZnVuY10gPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICB2YXIgbmV3dGhpcyA9IGpTdGF0W2Z1bmNdKGEsIGIsIGMpO1xuICAgICAgbmV3dGhpcy5kYXRhID0gdGhpcztcbiAgICAgIHJldHVybiBuZXd0aGlzO1xuICAgIH07XG4gICAgLy8gc2FtcGxlIGluc3RhbmNlIG1ldGhvZFxuICAgIGpTdGF0W2Z1bmNdLnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihhcnIpIHtcbiAgICAgIHZhciBhID0gdGhpcy5fYTtcbiAgICAgIHZhciBiID0gdGhpcy5fYjtcbiAgICAgIHZhciBjID0gdGhpcy5fYztcbiAgICAgIGlmIChhcnIpXG4gICAgICAgIHJldHVybiBqU3RhdC5hbHRlcihhcnIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXS5zYW1wbGUoYSwgYiwgYyk7XG4gICAgICAgIH0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4galN0YXRbZnVuY10uc2FtcGxlKGEsIGIsIGMpO1xuICAgIH07XG4gICAgLy8gZ2VuZXJhdGUgdGhlIHBkZiwgY2RmIGFuZCBpbnYgaW5zdGFuY2UgbWV0aG9kc1xuICAgIChmdW5jdGlvbih2YWxzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIChmdW5jdGlvbihmbmZ1bmMpIHtcbiAgICAgICAgalN0YXRbZnVuY10ucHJvdG90eXBlW2ZuZnVuY10gPSBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgdmFyIGEgPSB0aGlzLl9hO1xuICAgICAgICAgIHZhciBiID0gdGhpcy5fYjtcbiAgICAgICAgICB2YXIgYyA9IHRoaXMuX2M7XG4gICAgICAgICAgaWYgKCF4ICYmIHggIT09IDApXG4gICAgICAgICAgICB4ID0gdGhpcy5kYXRhO1xuICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBqU3RhdC5mbi5tYXAuY2FsbCh4LCBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXVtmbmZ1bmNdKHgsIGEsIGIsIGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXVtmbmZ1bmNdKHgsIGEsIGIsIGMpO1xuICAgICAgICB9O1xuICAgICAgfSkodmFsc1tpXSk7XG4gICAgfSkoJ3BkZiBjZGYgaW52Jy5zcGxpdCgnICcpKTtcbiAgICAvLyBnZW5lcmF0ZSB0aGUgbWVhbiwgbWVkaWFuLCBtb2RlIGFuZCB2YXJpYW5jZSBpbnN0YW5jZSBtZXRob2RzXG4gICAgKGZ1bmN0aW9uKHZhbHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKGZuZnVuYykge1xuICAgICAgICBqU3RhdFtmdW5jXS5wcm90b3R5cGVbZm5mdW5jXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXVtmbmZ1bmNdKHRoaXMuX2EsIHRoaXMuX2IsIHRoaXMuX2MpO1xuICAgICAgICB9O1xuICAgICAgfSkodmFsc1tpXSk7XG4gICAgfSkoJ21lYW4gbWVkaWFuIG1vZGUgdmFyaWFuY2UnLnNwbGl0KCcgJykpO1xuICB9KShsaXN0W2ldKTtcbn0pKChcbiAgJ2JldGEgY2VudHJhbEYgY2F1Y2h5IGNoaXNxdWFyZSBleHBvbmVudGlhbCBnYW1tYSBpbnZnYW1tYSBrdW1hcmFzd2FteSAnICtcbiAgJ2xhcGxhY2UgbG9nbm9ybWFsIG5vbmNlbnRyYWx0IG5vcm1hbCBwYXJldG8gc3R1ZGVudHQgd2VpYnVsbCB1bmlmb3JtICcgK1xuICAnYmlub21pYWwgbmVnYmluIGh5cGdlb20gcG9pc3NvbiB0cmlhbmd1bGFyIHR1a2V5IGFyY3NpbmUnXG4pLnNwbGl0KCcgJykpO1xuXG5cblxuLy8gZXh0ZW5kIGJldGEgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmJldGEsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgYWxwaGEsIGJldGEpIHtcbiAgICAvLyBQREYgaXMgemVybyBvdXRzaWRlIHRoZSBzdXBwb3J0XG4gICAgaWYgKHggPiAxIHx8IHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgLy8gUERGIGlzIG9uZSBmb3IgdGhlIHVuaWZvcm0gY2FzZVxuICAgIGlmIChhbHBoYSA9PSAxICYmIGJldGEgPT0gMSlcbiAgICAgIHJldHVybiAxO1xuXG4gICAgaWYgKGFscGhhIDwgNTEyICYmIGJldGEgPCA1MTIpIHtcbiAgICAgIHJldHVybiAoTWF0aC5wb3coeCwgYWxwaGEgLSAxKSAqIE1hdGgucG93KDEgLSB4LCBiZXRhIC0gMSkpIC9cbiAgICAgICAgICBqU3RhdC5iZXRhZm4oYWxwaGEsIGJldGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTWF0aC5leHAoKGFscGhhIC0gMSkgKiBNYXRoLmxvZyh4KSArXG4gICAgICAgICAgICAgICAgICAgICAgKGJldGEgLSAxKSAqIE1hdGgubG9nKDEgLSB4KSAtXG4gICAgICAgICAgICAgICAgICAgICAgalN0YXQuYmV0YWxuKGFscGhhLCBiZXRhKSk7XG4gICAgfVxuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuICh4ID4gMSB8fCB4IDwgMCkgPyAoeCA+IDEpICogMSA6IGpTdGF0LmliZXRhKHgsIGFscGhhLCBiZXRhKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludih4LCBhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBqU3RhdC5pYmV0YWludih4LCBhbHBoYSwgYmV0YSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBhbHBoYSAvIChhbHBoYSArIGJldGEpO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuIGpTdGF0LmliZXRhaW52KDAuNSwgYWxwaGEsIGJldGEpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gKGFscGhhIC0gMSApIC8gKCBhbHBoYSArIGJldGEgLSAyKTtcbiAgfSxcblxuICAvLyByZXR1cm4gYSByYW5kb20gc2FtcGxlXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGFscGhhLCBiZXRhKSB7XG4gICAgdmFyIHUgPSBqU3RhdC5yYW5kZyhhbHBoYSk7XG4gICAgcmV0dXJuIHUgLyAodSArIGpTdGF0LnJhbmRnKGJldGEpKTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UoYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gKGFscGhhICogYmV0YSkgLyAoTWF0aC5wb3coYWxwaGEgKyBiZXRhLCAyKSAqIChhbHBoYSArIGJldGEgKyAxKSk7XG4gIH1cbn0pO1xuXG4vLyBleHRlbmQgRiBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuY2VudHJhbEYsIHtcbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGRmIGZ1bmN0aW9uIGF2b2lkcyBmbG9hdCBvdmVyZmxvd1xuICAvLyBTZWUgdGhlIHdheSB0aGF0IFIgY2FsY3VsYXRlcyB0aGlzIHZhbHVlOlxuICAvLyBodHRwczovL3N2bi5yLXByb2plY3Qub3JnL1IvdHJ1bmsvc3JjL25tYXRoL2RmLmNcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZGYxLCBkZjIpIHtcbiAgICB2YXIgcCwgcSwgZjtcblxuICAgIGlmICh4IDwgMClcbiAgICAgIHJldHVybiAwO1xuXG4gICAgaWYgKGRmMSA8PSAyKSB7XG4gICAgICBpZiAoeCA9PT0gMCAmJiBkZjEgPCAyKSB7XG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGlmICh4ID09PSAwICYmIGRmMSA9PT0gMikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoMSAvIGpTdGF0LmJldGFmbihkZjEgLyAyLCBkZjIgLyAyKSkgKlxuICAgICAgICAgICAgICBNYXRoLnBvdyhkZjEgLyBkZjIsIGRmMSAvIDIpICpcbiAgICAgICAgICAgICAgTWF0aC5wb3coeCwgKGRmMS8yKSAtIDEpICpcbiAgICAgICAgICAgICAgTWF0aC5wb3coKDEgKyAoZGYxIC8gZGYyKSAqIHgpLCAtKGRmMSArIGRmMikgLyAyKTtcbiAgICB9XG5cbiAgICBwID0gKGRmMSAqIHgpIC8gKGRmMiArIHggKiBkZjEpO1xuICAgIHEgPSBkZjIgLyAoZGYyICsgeCAqIGRmMSk7XG4gICAgZiA9IGRmMSAqIHEgLyAyLjA7XG4gICAgcmV0dXJuIGYgKiBqU3RhdC5iaW5vbWlhbC5wZGYoKGRmMSAtIDIpIC8gMiwgKGRmMSArIGRmMiAtIDIpIC8gMiwgcCk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgZGYxLCBkZjIpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4galN0YXQuaWJldGEoKGRmMSAqIHgpIC8gKGRmMSAqIHggKyBkZjIpLCBkZjEgLyAyLCBkZjIgLyAyKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludih4LCBkZjEsIGRmMikge1xuICAgIHJldHVybiBkZjIgLyAoZGYxICogKDEgLyBqU3RhdC5pYmV0YWludih4LCBkZjEgLyAyLCBkZjIgLyAyKSAtIDEpKTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKGRmMSwgZGYyKSB7XG4gICAgcmV0dXJuIChkZjIgPiAyKSA/IGRmMiAvIChkZjIgLSAyKSA6IHVuZGVmaW5lZDtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGRmMSwgZGYyKSB7XG4gICAgcmV0dXJuIChkZjEgPiAyKSA/IChkZjIgKiAoZGYxIC0gMikpIC8gKGRmMSAqIChkZjIgKyAyKSkgOiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgLy8gcmV0dXJuIGEgcmFuZG9tIHNhbXBsZVxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShkZjEsIGRmMikge1xuICAgIHZhciB4MSA9IGpTdGF0LnJhbmRnKGRmMSAvIDIpICogMjtcbiAgICB2YXIgeDIgPSBqU3RhdC5yYW5kZyhkZjIgLyAyKSAqIDI7XG4gICAgcmV0dXJuICh4MSAvIGRmMSkgLyAoeDIgLyBkZjIpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShkZjEsIGRmMikge1xuICAgIGlmIChkZjIgPD0gNClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIDIgKiBkZjIgKiBkZjIgKiAoZGYxICsgZGYyIC0gMikgL1xuICAgICAgICAoZGYxICogKGRmMiAtIDIpICogKGRmMiAtIDIpICogKGRmMiAtIDQpKTtcbiAgfVxufSk7XG5cblxuLy8gZXh0ZW5kIGNhdWNoeSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuY2F1Y2h5LCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGxvY2FsLCBzY2FsZSkge1xuICAgIGlmIChzY2FsZSA8IDApIHsgcmV0dXJuIDA7IH1cblxuICAgIHJldHVybiAoc2NhbGUgLyAoTWF0aC5wb3coeCAtIGxvY2FsLCAyKSArIE1hdGgucG93KHNjYWxlLCAyKSkpIC8gTWF0aC5QSTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBsb2NhbCwgc2NhbGUpIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuKCh4IC0gbG9jYWwpIC8gc2NhbGUpIC8gTWF0aC5QSSArIDAuNTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGxvY2FsLCBzY2FsZSkge1xuICAgIHJldHVybiBsb2NhbCArIHNjYWxlICogTWF0aC50YW4oTWF0aC5QSSAqIChwIC0gMC41KSk7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4obG9jYWwvKiwgc2NhbGUqLykge1xuICAgIHJldHVybiBsb2NhbDtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGxvY2FsLyosIHNjYWxlKi8pIHtcbiAgICByZXR1cm4gbG9jYWw7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobG9jYWwsIHNjYWxlKSB7XG4gICAgcmV0dXJuIGpTdGF0LnJhbmRuKCkgKlxuICAgICAgICBNYXRoLnNxcnQoMSAvICgyICogalN0YXQucmFuZGcoMC41KSkpICogc2NhbGUgKyBsb2NhbDtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgY2hpc3F1YXJlIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5jaGlzcXVhcmUsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZG9mKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuICh4ID09PSAwICYmIGRvZiA9PT0gMikgPyAwLjUgOlxuICAgICAgICBNYXRoLmV4cCgoZG9mIC8gMiAtIDEpICogTWF0aC5sb2coeCkgLSB4IC8gMiAtIChkb2YgLyAyKSAqXG4gICAgICAgICAgICAgICAgIE1hdGgubG9nKDIpIC0galN0YXQuZ2FtbWFsbihkb2YgLyAyKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgZG9mKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGpTdGF0Lmxvd1JlZ0dhbW1hKGRvZiAvIDIsIHggLyAyKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGRvZikge1xuICAgIHJldHVybiAyICogalN0YXQuZ2FtbWFwaW52KHAsIDAuNSAqIGRvZik7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKGRvZikge1xuICAgIHJldHVybiBkb2Y7XG4gIH0sXG5cbiAgLy8gVE9ETzogdGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIChpcyB0aGVyZSBhIGJldHRlciB3YXk/KVxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihkb2YpIHtcbiAgICByZXR1cm4gZG9mICogTWF0aC5wb3coMSAtICgyIC8gKDkgKiBkb2YpKSwgMyk7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShkb2YpIHtcbiAgICByZXR1cm4gKGRvZiAtIDIgPiAwKSA/IGRvZiAtIDIgOiAwO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGRvZikge1xuICAgIHJldHVybiBqU3RhdC5yYW5kZyhkb2YgLyAyKSAqIDI7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGRvZikge1xuICAgIHJldHVybiAyICogZG9mO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBleHBvbmVudGlhbCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuZXhwb25lbnRpYWwsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgcmF0ZSkge1xuICAgIHJldHVybiB4IDwgMCA/IDAgOiByYXRlICogTWF0aC5leHAoLXJhdGUgKiB4KTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCByYXRlKSB7XG4gICAgcmV0dXJuIHggPCAwID8gMCA6IDEgLSBNYXRoLmV4cCgtcmF0ZSAqIHgpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgcmF0ZSkge1xuICAgIHJldHVybiAtTWF0aC5sb2coMSAtIHApIC8gcmF0ZTtcbiAgfSxcblxuICBtZWFuIDogZnVuY3Rpb24ocmF0ZSkge1xuICAgIHJldHVybiAxIC8gcmF0ZTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIChyYXRlKSB7XG4gICAgcmV0dXJuICgxIC8gcmF0ZSkgKiBNYXRoLmxvZygyKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKC8qcmF0ZSovKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUocmF0ZSkge1xuICAgIHJldHVybiAtMSAvIHJhdGUgKiBNYXRoLmxvZyhqU3RhdC5fcmFuZG9tX2ZuKCkpO1xuICB9LFxuXG4gIHZhcmlhbmNlIDogZnVuY3Rpb24ocmF0ZSkge1xuICAgIHJldHVybiBNYXRoLnBvdyhyYXRlLCAtMik7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIGdhbW1hIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5nYW1tYSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBzaGFwZSwgc2NhbGUpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gKHggPT09IDAgJiYgc2hhcGUgPT09IDEpID8gMSAvIHNjYWxlIDpcbiAgICAgICAgICAgIE1hdGguZXhwKChzaGFwZSAtIDEpICogTWF0aC5sb2coeCkgLSB4IC8gc2NhbGUgLVxuICAgICAgICAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKHNoYXBlKSAtIHNoYXBlICogTWF0aC5sb2coc2NhbGUpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzaGFwZSwgc2NhbGUpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4galN0YXQubG93UmVnR2FtbWEoc2hhcGUsIHggLyBzY2FsZSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4galN0YXQuZ2FtbWFwaW52KHAsIHNoYXBlKSAqIHNjYWxlO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2hhcGUgKiBzY2FsZTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKHNoYXBlLCBzY2FsZSkge1xuICAgIGlmKHNoYXBlID4gMSkgcmV0dXJuIChzaGFwZSAtIDEpICogc2NhbGU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4galN0YXQucmFuZGcoc2hhcGUpICogc2NhbGU7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKHNoYXBlLCBzY2FsZSkge1xuICAgIHJldHVybiBzaGFwZSAqIHNjYWxlICogc2NhbGU7XG4gIH1cbn0pO1xuXG4vLyBleHRlbmQgaW52ZXJzZSBnYW1tYSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuaW52Z2FtbWEsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgaWYgKHggPD0gMClcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBNYXRoLmV4cCgtKHNoYXBlICsgMSkgKiBNYXRoLmxvZyh4KSAtIHNjYWxlIC8geCAtXG4gICAgICAgICAgICAgICAgICAgIGpTdGF0LmdhbW1hbG4oc2hhcGUpICsgc2hhcGUgKiBNYXRoLmxvZyhzY2FsZSkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIHNoYXBlLCBzY2FsZSkge1xuICAgIGlmICh4IDw9IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMSAtIGpTdGF0Lmxvd1JlZ0dhbW1hKHNoYXBlLCBzY2FsZSAvIHgpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIHNjYWxlIC8galN0YXQuZ2FtbWFwaW52KDEgLSBwLCBzaGFwZSk7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKHNoYXBlLCBzY2FsZSkge1xuICAgIHJldHVybiAoc2hhcGUgPiAxKSA/IHNjYWxlIC8gKHNoYXBlIC0gMSkgOiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2NhbGUgLyAoc2hhcGUgKyAxKTtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2NhbGUgLyBqU3RhdC5yYW5kZyhzaGFwZSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKHNoYXBlLCBzY2FsZSkge1xuICAgIGlmIChzaGFwZSA8PSAyKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2NhbGUgKiBzY2FsZSAvICgoc2hhcGUgLSAxKSAqIChzaGFwZSAtIDEpICogKHNoYXBlIC0gMikpO1xuICB9XG59KTtcblxuXG4vLyBleHRlbmQga3VtYXJhc3dhbXkgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lmt1bWFyYXN3YW15LCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGFscGhhLCBiZXRhKSB7XG4gICAgaWYgKHggPT09IDAgJiYgYWxwaGEgPT09IDEpXG4gICAgICByZXR1cm4gYmV0YTtcbiAgICBlbHNlIGlmICh4ID09PSAxICYmIGJldGEgPT09IDEpXG4gICAgICByZXR1cm4gYWxwaGE7XG4gICAgcmV0dXJuIE1hdGguZXhwKE1hdGgubG9nKGFscGhhKSArIE1hdGgubG9nKGJldGEpICsgKGFscGhhIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZyh4KSArIChiZXRhIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZygxIC0gTWF0aC5wb3coeCwgYWxwaGEpKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgYWxwaGEsIGJldGEpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICBlbHNlIGlmICh4ID4gMSlcbiAgICAgIHJldHVybiAxO1xuICAgIHJldHVybiAoMSAtIE1hdGgucG93KDEgLSBNYXRoLnBvdyh4LCBhbHBoYSksIGJldGEpKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludihwLCBhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBNYXRoLnBvdygxIC0gTWF0aC5wb3coMSAtIHAsIDEgLyBiZXRhKSwgMSAvIGFscGhhKTtcbiAgfSxcblxuICBtZWFuIDogZnVuY3Rpb24oYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gKGJldGEgKiBqU3RhdC5nYW1tYWZuKDEgKyAxIC8gYWxwaGEpICpcbiAgICAgICAgICAgIGpTdGF0LmdhbW1hZm4oYmV0YSkpIC8gKGpTdGF0LmdhbW1hZm4oMSArIDEgLyBhbHBoYSArIGJldGEpKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBNYXRoLnBvdygxIC0gTWF0aC5wb3coMiwgLTEgLyBiZXRhKSwgMSAvIGFscGhhKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGFscGhhLCBiZXRhKSB7XG4gICAgaWYgKCEoYWxwaGEgPj0gMSAmJiBiZXRhID49IDEgJiYgKGFscGhhICE9PSAxICYmIGJldGEgIT09IDEpKSlcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE1hdGgucG93KChhbHBoYSAtIDEpIC8gKGFscGhhICogYmV0YSAtIDEpLCAxIC8gYWxwaGEpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZSgvKmFscGhhLCBiZXRhKi8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhcmlhbmNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgICAvLyBUT0RPOiBjb21wbGV0ZSB0aGlzXG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIGxvZ25vcm1hbCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQubG9nbm9ybWFsLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIG11LCBzaWdtYSkge1xuICAgIGlmICh4IDw9IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5leHAoLU1hdGgubG9nKHgpIC0gMC41ICogTWF0aC5sb2coMiAqIE1hdGguUEkpIC1cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5sb2coc2lnbWEpIC0gTWF0aC5wb3coTWF0aC5sb2coeCkgLSBtdSwgMikgL1xuICAgICAgICAgICAgICAgICAgICAoMiAqIHNpZ21hICogc2lnbWEpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBtdSwgc2lnbWEpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMC41ICtcbiAgICAgICAgKDAuNSAqIGpTdGF0LmVyZigoTWF0aC5sb2coeCkgLSBtdSkgLyBNYXRoLnNxcnQoMiAqIHNpZ21hICogc2lnbWEpKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBtdSwgc2lnbWEpIHtcbiAgICByZXR1cm4gTWF0aC5leHAoLTEuNDE0MjEzNTYyMzczMDk1MDUgKiBzaWdtYSAqIGpTdGF0LmVyZmNpbnYoMiAqIHApICsgbXUpO1xuICB9LFxuXG4gIG1lYW46IGZ1bmN0aW9uIG1lYW4obXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKG11ICsgc2lnbWEgKiBzaWdtYSAvIDIpO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKG11LyosIHNpZ21hKi8pIHtcbiAgICByZXR1cm4gTWF0aC5leHAobXUpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUobXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKG11IC0gc2lnbWEgKiBzaWdtYSk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKGpTdGF0LnJhbmRuKCkgKiBzaWdtYSArIG11KTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UobXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIChNYXRoLmV4cChzaWdtYSAqIHNpZ21hKSAtIDEpICogTWF0aC5leHAoMiAqIG11ICsgc2lnbWEgKiBzaWdtYSk7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIG5vbmNlbnRyYWx0IGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5ub25jZW50cmFsdCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBkb2YsIG5jcCkge1xuICAgIHZhciB0b2wgPSAxZS0xNDtcbiAgICBpZiAoTWF0aC5hYnMobmNwKSA8IHRvbCkgIC8vIG5jcCBhcHByb3ggMDsgdXNlIHN0dWRlbnQtdFxuICAgICAgcmV0dXJuIGpTdGF0LnN0dWRlbnR0LnBkZih4LCBkb2YpXG5cbiAgICBpZiAoTWF0aC5hYnMoeCkgPCB0b2wpIHsgIC8vIGRpZmZlcmVudCBmb3JtdWxhIGZvciB4ID09IDBcbiAgICAgIHJldHVybiBNYXRoLmV4cChqU3RhdC5nYW1tYWxuKChkb2YgKyAxKSAvIDIpIC0gbmNwICogbmNwIC8gMiAtXG4gICAgICAgICAgICAgICAgICAgICAgMC41ICogTWF0aC5sb2coTWF0aC5QSSAqIGRvZikgLSBqU3RhdC5nYW1tYWxuKGRvZiAvIDIpKTtcbiAgICB9XG5cbiAgICAvLyBmb3JtdWxhIGZvciB4ICE9IDBcbiAgICByZXR1cm4gZG9mIC8geCAqXG4gICAgICAgIChqU3RhdC5ub25jZW50cmFsdC5jZGYoeCAqIE1hdGguc3FydCgxICsgMiAvIGRvZiksIGRvZisyLCBuY3ApIC1cbiAgICAgICAgIGpTdGF0Lm5vbmNlbnRyYWx0LmNkZih4LCBkb2YsIG5jcCkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGRvZiwgbmNwKSB7XG4gICAgdmFyIHRvbCA9IDFlLTE0O1xuICAgIHZhciBtaW5faXRlcmF0aW9ucyA9IDIwMDtcblxuICAgIGlmIChNYXRoLmFicyhuY3ApIDwgdG9sKSAgLy8gbmNwIGFwcHJveCAwOyB1c2Ugc3R1ZGVudC10XG4gICAgICByZXR1cm4galN0YXQuc3R1ZGVudHQuY2RmKHgsIGRvZik7XG5cbiAgICAvLyB0dXJuIG5lZ2F0aXZlIHggaW50byBwb3NpdGl2ZSBhbmQgZmxpcCByZXN1bHQgYWZ0ZXJ3YXJkc1xuICAgIHZhciBmbGlwID0gZmFsc2U7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBmbGlwID0gdHJ1ZTtcbiAgICAgIG5jcCA9IC1uY3A7XG4gICAgfVxuXG4gICAgdmFyIHByb2IgPSBqU3RhdC5ub3JtYWwuY2RmKC1uY3AsIDAsIDEpO1xuICAgIHZhciB2YWx1ZSA9IHRvbCArIDE7XG4gICAgLy8gdXNlIHZhbHVlIGF0IGxhc3QgdHdvIHN0ZXBzIHRvIGRldGVybWluZSBjb252ZXJnZW5jZVxuICAgIHZhciBsYXN0dmFsdWUgPSB2YWx1ZTtcbiAgICB2YXIgeSA9IHggKiB4IC8gKHggKiB4ICsgZG9mKTtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIHAgPSBNYXRoLmV4cCgtbmNwICogbmNwIC8gMik7XG4gICAgdmFyIHEgPSBNYXRoLmV4cCgtbmNwICogbmNwIC8gMiAtIDAuNSAqIE1hdGgubG9nKDIpIC1cbiAgICAgICAgICAgICAgICAgICAgIGpTdGF0LmdhbW1hbG4oMyAvIDIpKSAqIG5jcDtcbiAgICB3aGlsZSAoaiA8IG1pbl9pdGVyYXRpb25zIHx8IGxhc3R2YWx1ZSA+IHRvbCB8fCB2YWx1ZSA+IHRvbCkge1xuICAgICAgbGFzdHZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgcCAqPSAobmNwICogbmNwKSAvICgyICogaik7XG4gICAgICAgIHEgKj0gKG5jcCAqIG5jcCkgLyAoMiAqIChqICsgMSAvIDIpKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gcCAqIGpTdGF0LmJldGEuY2RmKHksIGogKyAwLjUsIGRvZiAvIDIpICtcbiAgICAgICAgICBxICogalN0YXQuYmV0YS5jZGYoeSwgaisxLCBkb2YvMik7XG4gICAgICBwcm9iICs9IDAuNSAqIHZhbHVlO1xuICAgICAgaisrO1xuICAgIH1cblxuICAgIHJldHVybiBmbGlwID8gKDEgLSBwcm9iKSA6IHByb2I7XG4gIH1cbn0pO1xuXG5cbi8vIGV4dGVuZCBub3JtYWwgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lm5vcm1hbCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gTWF0aC5leHAoLTAuNSAqIE1hdGgubG9nKDIgKiBNYXRoLlBJKSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubG9nKHN0ZCkgLSBNYXRoLnBvdyh4IC0gbWVhbiwgMikgLyAoMiAqIHN0ZCAqIHN0ZCkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIG1lYW4sIHN0ZCkge1xuICAgIHJldHVybiAwLjUgKiAoMSArIGpTdGF0LmVyZigoeCAtIG1lYW4pIC8gTWF0aC5zcXJ0KDIgKiBzdGQgKiBzdGQpKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gLTEuNDE0MjEzNTYyMzczMDk1MDUgKiBzdGQgKiBqU3RhdC5lcmZjaW52KDIgKiBwKSArIG1lYW47XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKG1lYW4vKiwgc3RkKi8pIHtcbiAgICByZXR1cm4gbWVhbjtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihtZWFuLyosIHN0ZCovKSB7XG4gICAgcmV0dXJuIG1lYW47XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gKG1lYW4vKiwgc3RkKi8pIHtcbiAgICByZXR1cm4gbWVhbjtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4galN0YXQucmFuZG4oKSAqIHN0ZCArIG1lYW47XG4gIH0sXG5cbiAgdmFyaWFuY2UgOiBmdW5jdGlvbihtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gc3RkICogc3RkO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBwYXJldG8gZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LnBhcmV0bywge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoeCA8IHNjYWxlKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChzaGFwZSAqIE1hdGgucG93KHNjYWxlLCBzaGFwZSkpIC8gTWF0aC5wb3coeCwgc2hhcGUgKyAxKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoeCA8IHNjYWxlKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDEgLSBNYXRoLnBvdyhzY2FsZSAvIHgsIHNoYXBlKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludihwLCBzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgLyBNYXRoLnBvdygxIC0gcCwgMSAvIHNoYXBlKTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKHNjYWxlLCBzaGFwZSkge1xuICAgIGlmIChzaGFwZSA8PSAxKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKHNoYXBlICogTWF0aC5wb3coc2NhbGUsIHNoYXBlKSkgLyAoc2hhcGUgLSAxKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgKiAoc2hhcGUgKiBNYXRoLlNRUlQyKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKHNjYWxlLyosIHNoYXBlKi8pIHtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH0sXG5cbiAgdmFyaWFuY2UgOiBmdW5jdGlvbihzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoc2hhcGUgPD0gMilcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChzY2FsZSpzY2FsZSAqIHNoYXBlKSAvIChNYXRoLnBvdyhzaGFwZSAtIDEsIDIpICogKHNoYXBlIC0gMikpO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBzdHVkZW50dCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuc3R1ZGVudHQsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZG9mKSB7XG4gICAgZG9mID0gZG9mID4gMWUxMDAgPyAxZTEwMCA6IGRvZjtcbiAgICByZXR1cm4gKDEvKE1hdGguc3FydChkb2YpICogalN0YXQuYmV0YWZuKDAuNSwgZG9mLzIpKSkgKlxuICAgICAgICBNYXRoLnBvdygxICsgKCh4ICogeCkgLyBkb2YpLCAtKChkb2YgKyAxKSAvIDIpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBkb2YpIHtcbiAgICB2YXIgZG9mMiA9IGRvZiAvIDI7XG4gICAgcmV0dXJuIGpTdGF0LmliZXRhKCh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgZG9mKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAoMiAqIE1hdGguc3FydCh4ICogeCArIGRvZikpLCBkb2YyLCBkb2YyKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGRvZikge1xuICAgIHZhciB4ID0galN0YXQuaWJldGFpbnYoMiAqIE1hdGgubWluKHAsIDEgLSBwKSwgMC41ICogZG9mLCAwLjUpO1xuICAgIHggPSBNYXRoLnNxcnQoZG9mICogKDEgLSB4KSAvIHgpO1xuICAgIHJldHVybiAocCA+IDAuNSkgPyB4IDogLXg7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihkb2YpIHtcbiAgICByZXR1cm4gKGRvZiA+IDEpID8gMCA6IHVuZGVmaW5lZDtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbigvKmRvZiovKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZSgvKmRvZiovKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoZG9mKSB7XG4gICAgcmV0dXJuIGpTdGF0LnJhbmRuKCkgKiBNYXRoLnNxcnQoZG9mIC8gKDIgKiBqU3RhdC5yYW5kZyhkb2YgLyAyKSkpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShkb2YpIHtcbiAgICByZXR1cm4gKGRvZiAgPiAyKSA/IGRvZiAvIChkb2YgLSAyKSA6IChkb2YgPiAxKSA/IEluZmluaXR5IDogdW5kZWZpbmVkO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCB3ZWlidWxsIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC53ZWlidWxsLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIHNjYWxlLCBzaGFwZSkge1xuICAgIGlmICh4IDwgMCB8fCBzY2FsZSA8IDAgfHwgc2hhcGUgPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChzaGFwZSAvIHNjYWxlKSAqIE1hdGgucG93KCh4IC8gc2NhbGUpLCAoc2hhcGUgLSAxKSkgKlxuICAgICAgICBNYXRoLmV4cCgtKE1hdGgucG93KCh4IC8gc2NhbGUpLCBzaGFwZSkpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4geCA8IDAgPyAwIDogMSAtIE1hdGguZXhwKC1NYXRoLnBvdygoeCAvIHNjYWxlKSwgc2hhcGUpKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIE1hdGgucG93KC1NYXRoLmxvZygxIC0gcCksIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIGpTdGF0LmdhbW1hZm4oMSArIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHNjYWxlICogTWF0aC5wb3coTWF0aC5sb2coMiksIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoc2hhcGUgPD0gMSlcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBzY2FsZSAqIE1hdGgucG93KChzaGFwZSAtIDEpIC8gc2hhcGUsIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHNjYWxlICogTWF0aC5wb3coLU1hdGgubG9nKGpTdGF0Ll9yYW5kb21fZm4oKSksIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIHNjYWxlICogalN0YXQuZ2FtbWFmbigxICsgMiAvIHNoYXBlKSAtXG4gICAgICAgIE1hdGgucG93KGpTdGF0LndlaWJ1bGwubWVhbihzY2FsZSwgc2hhcGUpLCAyKTtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgdW5pZm9ybSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQudW5pZm9ybSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBhLCBiKSB7XG4gICAgcmV0dXJuICh4IDwgYSB8fCB4ID4gYikgPyAwIDogMSAvIChiIC0gYSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgYSwgYikge1xuICAgIGlmICh4IDwgYSlcbiAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgaWYgKHggPCBiKVxuICAgICAgcmV0dXJuICh4IC0gYSkgLyAoYiAtIGEpO1xuICAgIHJldHVybiAxO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgYSwgYikge1xuICAgIHJldHVybiBhICsgKHAgKiAoYiAtIGEpKTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKGEsIGIpIHtcbiAgICByZXR1cm4gMC41ICogKGEgKyBiKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhLCBiKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1lYW4oYSwgYik7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZSgvKmEsIGIqLykge1xuICAgIHRocm93IG5ldyBFcnJvcignbW9kZSBpcyBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoYSwgYikge1xuICAgIHJldHVybiAoYSAvIDIgKyBiIC8gMikgKyAoYiAvIDIgLSBhIC8gMikgKiAoMiAqIGpTdGF0Ll9yYW5kb21fZm4oKSAtIDEpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShhLCBiKSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGIgLSBhLCAyKSAvIDEyO1xuICB9XG59KTtcblxuXG4vLyBHb3QgdGhpcyBmcm9tIGh0dHA6Ly93d3cubWF0aC51Y2xhLmVkdS9+dG9tL2Rpc3RyaWJ1dGlvbnMvYmlub21pYWwuaHRtbFxuZnVuY3Rpb24gYmV0aW5jKHgsIGEsIGIsIGVwcykge1xuICB2YXIgYTAgPSAwO1xuICB2YXIgYjAgPSAxO1xuICB2YXIgYTEgPSAxO1xuICB2YXIgYjEgPSAxO1xuICB2YXIgbTkgPSAwO1xuICB2YXIgYTIgPSAwO1xuICB2YXIgYzk7XG5cbiAgd2hpbGUgKE1hdGguYWJzKChhMSAtIGEyKSAvIGExKSA+IGVwcykge1xuICAgIGEyID0gYTE7XG4gICAgYzkgPSAtKGEgKyBtOSkgKiAoYSArIGIgKyBtOSkgKiB4IC8gKGEgKyAyICogbTkpIC8gKGEgKyAyICogbTkgKyAxKTtcbiAgICBhMCA9IGExICsgYzkgKiBhMDtcbiAgICBiMCA9IGIxICsgYzkgKiBiMDtcbiAgICBtOSA9IG05ICsgMTtcbiAgICBjOSA9IG05ICogKGIgLSBtOSkgKiB4IC8gKGEgKyAyICogbTkgLSAxKSAvIChhICsgMiAqIG05KTtcbiAgICBhMSA9IGEwICsgYzkgKiBhMTtcbiAgICBiMSA9IGIwICsgYzkgKiBiMTtcbiAgICBhMCA9IGEwIC8gYjE7XG4gICAgYjAgPSBiMCAvIGIxO1xuICAgIGExID0gYTEgLyBiMTtcbiAgICBiMSA9IDE7XG4gIH1cblxuICByZXR1cm4gYTEgLyBhO1xufVxuXG5cbi8vIGV4dGVuZCB1bmlmb3JtIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5iaW5vbWlhbCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCBuLCBwKSB7XG4gICAgcmV0dXJuIChwID09PSAwIHx8IHAgPT09IDEpID9cbiAgICAgICgobiAqIHApID09PSBrID8gMSA6IDApIDpcbiAgICAgIGpTdGF0LmNvbWJpbmF0aW9uKG4sIGspICogTWF0aC5wb3cocCwgaykgKiBNYXRoLnBvdygxIC0gcCwgbiAtIGspO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIG4sIHApIHtcbiAgICB2YXIgYmV0YWNkZjtcbiAgICB2YXIgZXBzID0gMWUtMTA7XG5cbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICBpZiAoeCA+PSBuKVxuICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHAgPCAwIHx8IHAgPiAxIHx8IG4gPD0gMClcbiAgICAgIHJldHVybiBOYU47XG5cbiAgICB4ID0gTWF0aC5mbG9vcih4KTtcbiAgICB2YXIgeiA9IHA7XG4gICAgdmFyIGEgPSB4ICsgMTtcbiAgICB2YXIgYiA9IG4gLSB4O1xuICAgIHZhciBzID0gYSArIGI7XG4gICAgdmFyIGJ0ID0gTWF0aC5leHAoalN0YXQuZ2FtbWFsbihzKSAtIGpTdGF0LmdhbW1hbG4oYikgLVxuICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LmdhbW1hbG4oYSkgKyBhICogTWF0aC5sb2coeikgKyBiICogTWF0aC5sb2coMSAtIHopKTtcblxuICAgIGlmICh6IDwgKGEgKyAxKSAvIChzICsgMikpXG4gICAgICBiZXRhY2RmID0gYnQgKiBiZXRpbmMoeiwgYSwgYiwgZXBzKTtcbiAgICBlbHNlXG4gICAgICBiZXRhY2RmID0gMSAtIGJ0ICogYmV0aW5jKDEgLSB6LCBiLCBhLCBlcHMpO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKDEgLSBiZXRhY2RmKSAqICgxIC8gZXBzKSkgLyAoMSAvIGVwcyk7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIHVuaWZvcm0gZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lm5lZ2Jpbiwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCByLCBwKSB7XG4gICAgaWYgKGsgIT09IGsgPj4+IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGsgPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGpTdGF0LmNvbWJpbmF0aW9uKGsgKyByIC0gMSwgciAtIDEpICpcbiAgICAgICAgTWF0aC5wb3coMSAtIHAsIGspICogTWF0aC5wb3cocCwgcik7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgciwgcCkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgIGsgPSAwO1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIDA7XG4gICAgZm9yICg7IGsgPD0geDsgaysrKSB7XG4gICAgICBzdW0gKz0galN0YXQubmVnYmluLnBkZihrLCByLCBwKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgdW5pZm9ybSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuaHlwZ2VvbSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCBOLCBtLCBuKSB7XG4gICAgLy8gSHlwZXJnZW9tZXRyaWMgUERGLlxuXG4gICAgLy8gQSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgQ0RGIGFsZ29yaXRobSBiZWxvdy5cblxuICAgIC8vIGsgPSBudW1iZXIgb2Ygc3VjY2Vzc2VzIGRyYXduXG4gICAgLy8gTiA9IHBvcHVsYXRpb24gc2l6ZVxuICAgIC8vIG0gPSBudW1iZXIgb2Ygc3VjY2Vzc2VzIGluIHBvcHVsYXRpb25cbiAgICAvLyBuID0gbnVtYmVyIG9mIGl0ZW1zIGRyYXduIGZyb20gcG9wdWxhdGlvblxuXG4gICAgaWYoayAhPT0gayB8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYoayA8IDAgfHwgayA8IG0gLSAoTiAtIG4pKSB7XG4gICAgICAvLyBJdCdzIGltcG9zc2libGUgdG8gaGF2ZSB0aGlzIGZldyBzdWNjZXNzZXMgZHJhd24uXG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYoayA+IG4gfHwgayA+IG0pIHtcbiAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSB0byBoYXZlIHRoaXMgbWFueSBzdWNjZXNzZXMgZHJhd24uXG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKG0gKiAyID4gTikge1xuICAgICAgLy8gTW9yZSB0aGFuIGhhbGYgdGhlIHBvcHVsYXRpb24gaXMgc3VjY2Vzc2VzLlxuXG4gICAgICBpZihuICogMiA+IE4pIHtcbiAgICAgICAgLy8gTW9yZSB0aGFuIGhhbGYgdGhlIHBvcHVsYXRpb24gaXMgc2FtcGxlZC5cblxuICAgICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5wZGYoTiAtIG0gLSBuICsgaywgTiwgTiAtIG0sIE4gLSBuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFsZiBvciBsZXNzIG9mIHRoZSBwb3B1bGF0aW9uIGlzIHNhbXBsZWQuXG5cbiAgICAgICAgcmV0dXJuIGpTdGF0Lmh5cGdlb20ucGRmKG4gLSBrLCBOLCBOIC0gbSwgbik7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYobiAqIDIgPiBOKSB7XG4gICAgICAvLyBIYWxmIG9yIGxlc3MgaXMgc3VjY2Vzc2VzLlxuXG4gICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5wZGYobSAtIGssIE4sIG0sIE4gLSBuKTtcblxuICAgIH0gZWxzZSBpZihtIDwgbikge1xuICAgICAgLy8gV2Ugd2FudCB0byBoYXZlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHNhbXBsZWQgdG8gYmUgbGVzcyB0aGFuIHRoZVxuICAgICAgLy8gc3VjY2Vzc2VzIGF2YWlsYWJsZS4gU28gc3dhcCB0aGUgZGVmaW5pdGlvbnMgb2Ygc3VjY2Vzc2Z1bCBhbmQgc2FtcGxlZC5cbiAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLnBkZihrLCBOLCBuLCBtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGhhbGYgb3IgbGVzcyBvZiB0aGUgcG9wdWxhdGlvbiB3YXMgc2FtcGxlZCwgaGFsZiBvclxuICAgICAgLy8gbGVzcyBvZiBpdCB3YXMgc3VjY2Vzc2VzLCBhbmQgd2UgaGFkIGZld2VyIHNhbXBsZWQgdGhpbmdzIHRoYW5cbiAgICAgIC8vIHN1Y2Nlc3Nlcy4gTm93IHdlIGNhbiBkbyB0aGlzIGNvbXBsaWNhdGVkIGl0ZXJhdGl2ZSBhbGdvcml0aG0gaW4gYW5cbiAgICAgIC8vIGVmZmljaWVudCB3YXkuXG5cbiAgICAgIC8vIFRoZSBiYXNpYyBwcmVtaXNlIG9mIHRoZSBhbGdvcml0aG0gaXMgdGhhdCB3ZSBwYXJ0aWFsbHkgbm9ybWFsaXplIG91clxuICAgICAgLy8gaW50ZXJtZWRpYXRlIHByb2R1Y3QgdG8ga2VlcCBpdCBpbiBhIG51bWVyaWNhbGx5IGdvb2QgcmVnaW9uLCBhbmQgdGhlblxuICAgICAgLy8gZmluaXNoIHRoZSBub3JtYWxpemF0aW9uIGF0IHRoZSBlbmQuXG5cbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIHNjYWxlZCBwcm9iYWJpbGl0eSBvZiB0aGUgY3VycmVudCBudW1iZXIgb2ZcbiAgICAgIC8vIHN1Y2Nlc3Nlcy5cbiAgICAgIHZhciBzY2FsZWRQREYgPSAxO1xuXG4gICAgICAvLyBUaGlzIGtlZXBzIHRyYWNrIG9mIGhvdyBtdWNoIHdlIGhhdmUgbm9ybWFsaXplZC5cbiAgICAgIHZhciBzYW1wbGVzRG9uZSA9IDA7XG5cbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgLy8gRm9yIGV2ZXJ5IHBvc3NpYmxlIG51bWJlciBvZiBzdWNjZXNzZXMgdXAgdG8gdGhhdCBvYnNlcnZlZC4uLlxuXG4gICAgICAgIHdoaWxlKHNjYWxlZFBERiA+IDEgJiYgc2FtcGxlc0RvbmUgPCBuKSB7XG4gICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIHJlc3VsdCBpcyBncm93aW5nIHRvbyBiaWcuIEFwcGx5IHNvbWUgb2YgdGhlXG4gICAgICAgICAgLy8gbm9ybWFsaXphdGlvbiB0byBzaHJpbmsgZXZlcnl0aGluZy5cblxuICAgICAgICAgIHNjYWxlZFBERiAqPSAxIC0gKG0gLyAoTiAtIHNhbXBsZXNEb25lKSk7XG5cbiAgICAgICAgICAvLyBTYXkgd2UndmUgbm9ybWFsaXplZCBieSB0aGlzIHNhbXBsZSBhbHJlYWR5LlxuICAgICAgICAgIHNhbXBsZXNEb25lKys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXb3JrIG91dCB0aGUgcGFydGlhbGx5LW5vcm1hbGl6ZWQgaHlwZXJnZW9tZXRyaWMgUERGIGZvciB0aGUgbmV4dFxuICAgICAgICAvLyBudW1iZXIgb2Ygc3VjY2Vzc2VzXG4gICAgICAgIHNjYWxlZFBERiAqPSAobiAtIGkpICogKG0gLSBpKSAvICgoaSArIDEpICogKE4gLSBtIC0gbiArIGkgKyAxKSk7XG4gICAgICB9XG5cbiAgICAgIGZvcig7IHNhbXBsZXNEb25lIDwgbjsgc2FtcGxlc0RvbmUrKykge1xuICAgICAgICAvLyBBcHBseSBhbGwgdGhlIHJlc3Qgb2YgdGhlIG5vcm1hbGl6YXRpb25cbiAgICAgICAgc2NhbGVkUERGICo9IDEgLSAobSAvIChOIC0gc2FtcGxlc0RvbmUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQm91bmQgYW5zd2VyIHNhbmVseSBiZWZvcmUgcmV0dXJuaW5nLlxuICAgICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHNjYWxlZFBERikpO1xuICAgIH1cbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBOLCBtLCBuKSB7XG4gICAgLy8gSHlwZXJnZW9tZXRyaWMgQ0RGLlxuXG4gICAgLy8gVGhpcyBhbGdvcml0aG0gaXMgZHVlIHRvIFByb2YuIFRob21hcyBTLiBGZXJndXNvbiwgPHRvbUBtYXRoLnVjbGEuZWR1PixcbiAgICAvLyBhbmQgY29tZXMgZnJvbSBoaXMgaHlwZXJnZW9tZXRyaWMgdGVzdCBjYWxjdWxhdG9yIGF0XG4gICAgLy8gPGh0dHA6Ly93d3cubWF0aC51Y2xhLmVkdS9+dG9tL2Rpc3RyaWJ1dGlvbnMvSHlwZXJnZW9tZXRyaWMuaHRtbD4uXG5cbiAgICAvLyB4ID0gbnVtYmVyIG9mIHN1Y2Nlc3NlcyBkcmF3blxuICAgIC8vIE4gPSBwb3B1bGF0aW9uIHNpemVcbiAgICAvLyBtID0gbnVtYmVyIG9mIHN1Y2Nlc3NlcyBpbiBwb3B1bGF0aW9uXG4gICAgLy8gbiA9IG51bWJlciBvZiBpdGVtcyBkcmF3biBmcm9tIHBvcHVsYXRpb25cblxuICAgIGlmKHggPCAwIHx8IHggPCBtIC0gKE4gLSBuKSkge1xuICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIHRvIGhhdmUgdGhpcyBmZXcgc3VjY2Vzc2VzIGRyYXduIG9yIGZld2VyLlxuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmKHggPj0gbiB8fCB4ID49IG0pIHtcbiAgICAgIC8vIFdlIHdpbGwgYWx3YXlzIGhhdmUgdGhpcyBtYW55IHN1Y2Nlc3NlcyBvciBmZXdlci5cbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAobSAqIDIgPiBOKSB7XG4gICAgICAvLyBNb3JlIHRoYW4gaGFsZiB0aGUgcG9wdWxhdGlvbiBpcyBzdWNjZXNzZXMuXG5cbiAgICAgIGlmKG4gKiAyID4gTikge1xuICAgICAgICAvLyBNb3JlIHRoYW4gaGFsZiB0aGUgcG9wdWxhdGlvbiBpcyBzYW1wbGVkLlxuXG4gICAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLmNkZihOIC0gbSAtIG4gKyB4LCBOLCBOIC0gbSwgTiAtIG4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBIYWxmIG9yIGxlc3Mgb2YgdGhlIHBvcHVsYXRpb24gaXMgc2FtcGxlZC5cblxuICAgICAgICByZXR1cm4gMSAtIGpTdGF0Lmh5cGdlb20uY2RmKG4gLSB4IC0gMSwgTiwgTiAtIG0sIG4pO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmKG4gKiAyID4gTikge1xuICAgICAgLy8gSGFsZiBvciBsZXNzIGlzIHN1Y2Nlc3Nlcy5cblxuICAgICAgcmV0dXJuIDEgLSBqU3RhdC5oeXBnZW9tLmNkZihtIC0geCAtIDEsIE4sIG0sIE4gLSBuKTtcblxuICAgIH0gZWxzZSBpZihtIDwgbikge1xuICAgICAgLy8gV2Ugd2FudCB0byBoYXZlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHNhbXBsZWQgdG8gYmUgbGVzcyB0aGFuIHRoZVxuICAgICAgLy8gc3VjY2Vzc2VzIGF2YWlsYWJsZS4gU28gc3dhcCB0aGUgZGVmaW5pdGlvbnMgb2Ygc3VjY2Vzc2Z1bCBhbmQgc2FtcGxlZC5cbiAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLmNkZih4LCBOLCBuLCBtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGhhbGYgb3IgbGVzcyBvZiB0aGUgcG9wdWxhdGlvbiB3YXMgc2FtcGxlZCwgaGFsZiBvclxuICAgICAgLy8gbGVzcyBvZiBpdCB3YXMgc3VjY2Vzc2VzLCBhbmQgd2UgaGFkIGZld2VyIHNhbXBsZWQgdGhpbmdzIHRoYW5cbiAgICAgIC8vIHN1Y2Nlc3Nlcy4gTm93IHdlIGNhbiBkbyB0aGlzIGNvbXBsaWNhdGVkIGl0ZXJhdGl2ZSBhbGdvcml0aG0gaW4gYW5cbiAgICAgIC8vIGVmZmljaWVudCB3YXkuXG5cbiAgICAgIC8vIFRoZSBiYXNpYyBwcmVtaXNlIG9mIHRoZSBhbGdvcml0aG0gaXMgdGhhdCB3ZSBwYXJ0aWFsbHkgbm9ybWFsaXplIG91clxuICAgICAgLy8gaW50ZXJtZWRpYXRlIHN1bSB0byBrZWVwIGl0IGluIGEgbnVtZXJpY2FsbHkgZ29vZCByZWdpb24sIGFuZCB0aGVuXG4gICAgICAvLyBmaW5pc2ggdGhlIG5vcm1hbGl6YXRpb24gYXQgdGhlIGVuZC5cblxuICAgICAgLy8gSG9sZHMgdGhlIGludGVybWVkaWF0ZSwgc2NhbGVkIHRvdGFsIENERi5cbiAgICAgIHZhciBzY2FsZWRDREYgPSAxO1xuXG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBzY2FsZWQgcHJvYmFiaWxpdHkgb2YgdGhlIGN1cnJlbnQgbnVtYmVyIG9mXG4gICAgICAvLyBzdWNjZXNzZXMuXG4gICAgICB2YXIgc2NhbGVkUERGID0gMTtcblxuICAgICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiBob3cgbXVjaCB3ZSBoYXZlIG5vcm1hbGl6ZWQuXG4gICAgICB2YXIgc2FtcGxlc0RvbmUgPSAwO1xuXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgeDsgaSsrKSB7XG4gICAgICAgIC8vIEZvciBldmVyeSBwb3NzaWJsZSBudW1iZXIgb2Ygc3VjY2Vzc2VzIHVwIHRvIHRoYXQgb2JzZXJ2ZWQuLi5cblxuICAgICAgICB3aGlsZShzY2FsZWRDREYgPiAxICYmIHNhbXBsZXNEb25lIDwgbikge1xuICAgICAgICAgIC8vIEludGVybWVkaWF0ZSByZXN1bHQgaXMgZ3Jvd2luZyB0b28gYmlnLiBBcHBseSBzb21lIG9mIHRoZVxuICAgICAgICAgIC8vIG5vcm1hbGl6YXRpb24gdG8gc2hyaW5rIGV2ZXJ5dGhpbmcuXG5cbiAgICAgICAgICB2YXIgZmFjdG9yID0gMSAtIChtIC8gKE4gLSBzYW1wbGVzRG9uZSkpO1xuXG4gICAgICAgICAgc2NhbGVkUERGICo9IGZhY3RvcjtcbiAgICAgICAgICBzY2FsZWRDREYgKj0gZmFjdG9yO1xuXG4gICAgICAgICAgLy8gU2F5IHdlJ3ZlIG5vcm1hbGl6ZWQgYnkgdGhpcyBzYW1wbGUgYWxyZWFkeS5cbiAgICAgICAgICBzYW1wbGVzRG9uZSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV29yayBvdXQgdGhlIHBhcnRpYWxseS1ub3JtYWxpemVkIGh5cGVyZ2VvbWV0cmljIFBERiBmb3IgdGhlIG5leHRcbiAgICAgICAgLy8gbnVtYmVyIG9mIHN1Y2Nlc3Nlc1xuICAgICAgICBzY2FsZWRQREYgKj0gKG4gLSBpKSAqIChtIC0gaSkgLyAoKGkgKyAxKSAqIChOIC0gbSAtIG4gKyBpICsgMSkpO1xuXG4gICAgICAgIC8vIEFkZCB0byB0aGUgQ0RGIGFuc3dlci5cbiAgICAgICAgc2NhbGVkQ0RGICs9IHNjYWxlZFBERjtcbiAgICAgIH1cblxuICAgICAgZm9yKDsgc2FtcGxlc0RvbmUgPCBuOyBzYW1wbGVzRG9uZSsrKSB7XG4gICAgICAgIC8vIEFwcGx5IGFsbCB0aGUgcmVzdCBvZiB0aGUgbm9ybWFsaXphdGlvblxuICAgICAgICBzY2FsZWRDREYgKj0gMSAtIChtIC8gKE4gLSBzYW1wbGVzRG9uZSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBCb3VuZCBhbnN3ZXIgc2FuZWx5IGJlZm9yZSByZXR1cm5pbmcuXG4gICAgICByZXR1cm4gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgc2NhbGVkQ0RGKSk7XG4gICAgfVxuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCB1bmlmb3JtIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5wb2lzc29uLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKGssIGwpIHtcbiAgICBpZiAobCA8IDAgfHwgKGsgJSAxKSAhPT0gMCB8fCBrIDwgMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgucG93KGwsIGspICogTWF0aC5leHAoLWwpIC8galN0YXQuZmFjdG9yaWFsKGspO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGwpIHtcbiAgICB2YXIgc3VtYXJyID0gW10sXG4gICAgayA9IDA7XG4gICAgaWYgKHggPCAwKSByZXR1cm4gMDtcbiAgICBmb3IgKDsgayA8PSB4OyBrKyspIHtcbiAgICAgIHN1bWFyci5wdXNoKGpTdGF0LnBvaXNzb24ucGRmKGssIGwpKTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0LnN1bShzdW1hcnIpO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihsKSB7XG4gICAgcmV0dXJuIGw7XG4gIH0sXG5cbiAgdmFyaWFuY2UgOiBmdW5jdGlvbihsKSB7XG4gICAgcmV0dXJuIGw7XG4gIH0sXG5cbiAgc2FtcGxlU21hbGw6IGZ1bmN0aW9uIHNhbXBsZVNtYWxsKGwpIHtcbiAgICB2YXIgcCA9IDEsIGsgPSAwLCBMID0gTWF0aC5leHAoLWwpO1xuICAgIGRvIHtcbiAgICAgIGsrKztcbiAgICAgIHAgKj0galN0YXQuX3JhbmRvbV9mbigpO1xuICAgIH0gd2hpbGUgKHAgPiBMKTtcbiAgICByZXR1cm4gayAtIDE7XG4gIH0sXG5cbiAgc2FtcGxlTGFyZ2U6IGZ1bmN0aW9uIHNhbXBsZUxhcmdlKGwpIHtcbiAgICB2YXIgbGFtID0gbDtcbiAgICB2YXIgaztcbiAgICB2YXIgVSwgViwgc2xhbSwgbG9nbGFtLCBhLCBiLCBpbnZhbHBoYSwgdnIsIHVzO1xuXG4gICAgc2xhbSA9IE1hdGguc3FydChsYW0pO1xuICAgIGxvZ2xhbSA9IE1hdGgubG9nKGxhbSk7XG4gICAgYiA9IDAuOTMxICsgMi41MyAqIHNsYW07XG4gICAgYSA9IC0wLjA1OSArIDAuMDI0ODMgKiBiO1xuICAgIGludmFscGhhID0gMS4xMjM5ICsgMS4xMzI4IC8gKGIgLSAzLjQpO1xuICAgIHZyID0gMC45Mjc3IC0gMy42MjI0IC8gKGIgLSAyKTtcblxuICAgIHdoaWxlICgxKSB7XG4gICAgICBVID0gTWF0aC5yYW5kb20oKSAtIDAuNTtcbiAgICAgIFYgPSBNYXRoLnJhbmRvbSgpO1xuICAgICAgdXMgPSAwLjUgLSBNYXRoLmFicyhVKTtcbiAgICAgIGsgPSBNYXRoLmZsb29yKCgyICogYSAvIHVzICsgYikgKiBVICsgbGFtICsgMC40Myk7XG4gICAgICBpZiAoKHVzID49IDAuMDcpICYmIChWIDw9IHZyKSkge1xuICAgICAgICAgIHJldHVybiBrO1xuICAgICAgfVxuICAgICAgaWYgKChrIDwgMCkgfHwgKCh1cyA8IDAuMDEzKSAmJiAoViA+IHVzKSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8qIGxvZyhWKSA9PSBsb2coMC4wKSBvayBoZXJlICovXG4gICAgICAvKiBpZiBVPT0wLjAgc28gdGhhdCB1cz09MC4wLCBsb2cgaXMgb2sgc2luY2UgYWx3YXlzIHJldHVybnMgKi9cbiAgICAgIGlmICgoTWF0aC5sb2coVikgKyBNYXRoLmxvZyhpbnZhbHBoYSkgLSBNYXRoLmxvZyhhIC8gKHVzICogdXMpICsgYikpIDw9ICgtbGFtICsgayAqIGxvZ2xhbSAtIGpTdGF0LmxvZ2dhbShrICsgMSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGwpIHtcbiAgICBpZiAobCA8IDEwKVxuICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlU21hbGwobCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlTGFyZ2UobCk7XG4gIH1cbn0pO1xuXG4vLyBleHRlbmQgdHJpYW5ndWxhciBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQudHJpYW5ndWxhciwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBhLCBiLCBjKSB7XG4gICAgaWYgKGIgPD0gYSB8fCBjIDwgYSB8fCBjID4gYikge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHggPCBhIHx8IHggPiBiKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmICh4IDwgYykge1xuICAgICAgICAgIHJldHVybiAoMiAqICh4IC0gYSkpIC8gKChiIC0gYSkgKiAoYyAtIGEpKTtcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gYykge1xuICAgICAgICAgIHJldHVybiAoMiAvIChiIC0gYSkpO1xuICAgICAgfSBlbHNlIHsgLy8geCA+IGNcbiAgICAgICAgICByZXR1cm4gKDIgKiAoYiAtIHgpKSAvICgoYiAtIGEpICogKGIgLSBjKSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGEsIGIsIGMpIHtcbiAgICBpZiAoYiA8PSBhIHx8IGMgPCBhIHx8IGMgPiBiKVxuICAgICAgcmV0dXJuIE5hTjtcbiAgICBpZiAoeCA8PSBhKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSBpZiAoeCA+PSBiKVxuICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHggPD0gYylcbiAgICAgIHJldHVybiBNYXRoLnBvdyh4IC0gYSwgMikgLyAoKGIgLSBhKSAqIChjIC0gYSkpO1xuICAgIGVsc2UgLy8geCA+IGNcbiAgICAgIHJldHVybiAxIC0gTWF0aC5wb3coYiAtIHgsIDIpIC8gKChiIC0gYSkgKiAoYiAtIGMpKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludihwLCBhLCBiLCBjKSB7XG4gICAgaWYgKGIgPD0gYSB8fCBjIDwgYSB8fCBjID4gYikge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHAgPD0gKChjIC0gYSkgLyAoYiAtIGEpKSkge1xuICAgICAgICByZXR1cm4gYSArIChiIC0gYSkgKiBNYXRoLnNxcnQocCAqICgoYyAtIGEpIC8gKGIgLSBhKSkpO1xuICAgICAgfSBlbHNlIHsgLy8gcCA+ICgoYyAtIGEpIC8gKGIgLSBhKSlcbiAgICAgICAgcmV0dXJuIGEgKyAoYiAtIGEpICogKDEgLSBNYXRoLnNxcnQoKDEgLSBwKSAqICgxIC0gKChjIC0gYSkgLyAoYiAtIGEpKSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhLCBiLCBjKSB7XG4gICAgcmV0dXJuIChhICsgYiArIGMpIC8gMztcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhLCBiLCBjKSB7XG4gICAgaWYgKGMgPD0gKGEgKyBiKSAvIDIpIHtcbiAgICAgIHJldHVybiBiIC0gTWF0aC5zcXJ0KChiIC0gYSkgKiAoYiAtIGMpKSAvIE1hdGguc3FydCgyKTtcbiAgICB9IGVsc2UgaWYgKGMgPiAoYSArIGIpIC8gMikge1xuICAgICAgcmV0dXJuIGEgKyBNYXRoLnNxcnQoKGIgLSBhKSAqIChjIC0gYSkpIC8gTWF0aC5zcXJ0KDIpO1xuICAgIH1cbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGEsIGIsIGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShhLCBiLCBjKSB7XG4gICAgdmFyIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gICAgaWYgKHUgPCAoKGMgLSBhKSAvIChiIC0gYSkpKVxuICAgICAgcmV0dXJuIGEgKyBNYXRoLnNxcnQodSAqIChiIC0gYSkgKiAoYyAtIGEpKVxuICAgIHJldHVybiBiIC0gTWF0aC5zcXJ0KCgxIC0gdSkgKiAoYiAtIGEpICogKGIgLSBjKSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGEsIGIsIGMpIHtcbiAgICByZXR1cm4gKGEgKiBhICsgYiAqIGIgKyBjICogYyAtIGEgKiBiIC0gYSAqIGMgLSBiICogYykgLyAxODtcbiAgfVxufSk7XG5cblxuLy8gZXh0ZW5kIGFyY3NpbmUgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmFyY3NpbmUsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgYSwgYikge1xuICAgIGlmIChiIDw9IGEpIHJldHVybiBOYU47XG5cbiAgICByZXR1cm4gKHggPD0gYSB8fCB4ID49IGIpID8gMCA6XG4gICAgICAoMiAvIE1hdGguUEkpICpcbiAgICAgICAgTWF0aC5wb3coTWF0aC5wb3coYiAtIGEsIDIpIC1cbiAgICAgICAgICAgICAgICAgIE1hdGgucG93KDIgKiB4IC0gYSAtIGIsIDIpLCAtMC41KTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBhLCBiKSB7XG4gICAgaWYgKHggPCBhKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSBpZiAoeCA8IGIpXG4gICAgICByZXR1cm4gKDIgLyBNYXRoLlBJKSAqIE1hdGguYXNpbihNYXRoLnNxcnQoKHggLSBhKS8oYiAtIGEpKSk7XG4gICAgcmV0dXJuIDE7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyAoMC41IC0gMC41ICogTWF0aC5jb3MoTWF0aC5QSSAqIHApKSAqIChiIC0gYSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhLCBiKSB7XG4gICAgaWYgKGIgPD0gYSkgcmV0dXJuIE5hTjtcbiAgICByZXR1cm4gKGEgKyBiKSAvIDI7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oYSwgYikge1xuICAgIGlmIChiIDw9IGEpIHJldHVybiBOYU47XG4gICAgcmV0dXJuIChhICsgYikgLyAyO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoLyphLCBiKi8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21vZGUgaXMgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGEsIGIpIHtcbiAgICByZXR1cm4gKChhICsgYikgLyAyKSArICgoYiAtIGEpIC8gMikgKlxuICAgICAgTWF0aC5zaW4oMiAqIE1hdGguUEkgKiBqU3RhdC51bmlmb3JtLnNhbXBsZSgwLCAxKSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGEsIGIpIHtcbiAgICBpZiAoYiA8PSBhKSByZXR1cm4gTmFOO1xuICAgIHJldHVybiBNYXRoLnBvdyhiIC0gYSwgMikgLyA4O1xuICB9XG59KTtcblxuXG5mdW5jdGlvbiBsYXBsYWNlU2lnbih4KSB7IHJldHVybiB4IC8gTWF0aC5hYnMoeCk7IH1cblxualN0YXQuZXh0ZW5kKGpTdGF0LmxhcGxhY2UsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgbXUsIGIpIHtcbiAgICByZXR1cm4gKGIgPD0gMCkgPyAwIDogKE1hdGguZXhwKC1NYXRoLmFicyh4IC0gbXUpIC8gYikpIC8gKDIgKiBiKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBtdSwgYikge1xuICAgIGlmIChiIDw9IDApIHsgcmV0dXJuIDA7IH1cblxuICAgIGlmKHggPCBtdSkge1xuICAgICAgcmV0dXJuIDAuNSAqIE1hdGguZXhwKCh4IC0gbXUpIC8gYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAxIC0gMC41ICogTWF0aC5leHAoLSAoeCAtIG11KSAvIGIpO1xuICAgIH1cbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbihtdS8qLCBiKi8pIHtcbiAgICByZXR1cm4gbXU7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbihtdS8qLCBiKi8pIHtcbiAgICByZXR1cm4gbXU7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24obXUvKiwgYiovKSB7XG4gICAgcmV0dXJuIG11O1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbihtdSwgYikge1xuICAgIHJldHVybiAyICogYiAqIGI7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobXUsIGIpIHtcbiAgICB2YXIgdSA9IGpTdGF0Ll9yYW5kb21fZm4oKSAtIDAuNTtcblxuICAgIHJldHVybiBtdSAtIChiICogbGFwbGFjZVNpZ24odSkgKiBNYXRoLmxvZygxIC0gKDIgKiBNYXRoLmFicyh1KSkpKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHR1a2V5V3Byb2IodywgcnIsIGNjKSB7XG4gIHZhciBubGVnID0gMTI7XG4gIHZhciBpaGFsZiA9IDY7XG5cbiAgdmFyIEMxID0gLTMwO1xuICB2YXIgQzIgPSAtNTA7XG4gIHZhciBDMyA9IDYwO1xuICB2YXIgYmIgICA9IDg7XG4gIHZhciB3bGFyID0gMztcbiAgdmFyIHdpbmNyMSA9IDI7XG4gIHZhciB3aW5jcjIgPSAzO1xuICB2YXIgeGxlZyA9IFtcbiAgICAwLjk4MTU2MDYzNDI0NjcxOTI1MDY5MDU0OTA5MDE0OSxcbiAgICAwLjkwNDExNzI1NjM3MDQ3NDg1NjY3ODQ2NTg2NjExOSxcbiAgICAwLjc2OTkwMjY3NDE5NDMwNDY4NzAzNjg5MzgzMzIxMyxcbiAgICAwLjU4NzMxNzk1NDI4NjYxNzQ0NzI5NjcwMjQxODk0MSxcbiAgICAwLjM2NzgzMTQ5ODk5ODE4MDE5Mzc1MjY5MTUzNjY0NCxcbiAgICAwLjEyNTIzMzQwODUxMTQ2ODkxNTQ3MjQ0MTM2OTQ2NFxuICBdO1xuICB2YXIgYWxlZyA9IFtcbiAgICAwLjA0NzE3NTMzNjM4NjUxMTgyNzE5NDYxNTk2MTQ4NSxcbiAgICAwLjEwNjkzOTMyNTk5NTMxODQzMDk2MDI1NDcxODE5NCxcbiAgICAwLjE2MDA3ODMyODU0MzM0NjIyNjMzNDY1MjUyOTU0MyxcbiAgICAwLjIwMzE2NzQyNjcyMzA2NTkyMTc0OTA2NDQ1NTgxMCxcbiAgICAwLjIzMzQ5MjUzNjUzODM1NDgwODc2MDg0OTg5ODkyNSxcbiAgICAwLjI0OTE0NzA0NTgxMzQwMjc4NTAwMDU2MjQzNjA0M1xuICBdO1xuXG4gIHZhciBxc3F6ID0gdyAqIDAuNTtcblxuICAvLyBpZiB3ID49IDE2IHRoZW4gdGhlIGludGVncmFsIGxvd2VyIGJvdW5kIChvY2N1cnMgZm9yIGM9MjApXG4gIC8vIGlzIDAuOTk5OTk5OTk5OTk5OTUgc28gcmV0dXJuIGEgdmFsdWUgb2YgMS5cblxuICBpZiAocXNxeiA+PSBiYilcbiAgICByZXR1cm4gMS4wO1xuXG4gIC8vIGZpbmQgKGYody8yKSAtIDEpIF4gY2NcbiAgLy8gKGZpcnN0IHRlcm0gaW4gaW50ZWdyYWwgb2YgaGFydGxleSdzIGZvcm0pLlxuXG4gIHZhciBwcl93ID0gMiAqIGpTdGF0Lm5vcm1hbC5jZGYocXNxeiwgMCwgMSwgMSwgMCkgLSAxOyAvLyBlcmYocXNxeiAvIE1fU1FSVDIpXG4gIC8vIGlmIHByX3cgXiBjYyA8IDJlLTIyIHRoZW4gc2V0IHByX3cgPSAwXG4gIGlmIChwcl93ID49IE1hdGguZXhwKEMyIC8gY2MpKVxuICAgIHByX3cgPSBNYXRoLnBvdyhwcl93LCBjYyk7XG4gIGVsc2VcbiAgICBwcl93ID0gMC4wO1xuXG4gIC8vIGlmIHcgaXMgbGFyZ2UgdGhlbiB0aGUgc2Vjb25kIGNvbXBvbmVudCBvZiB0aGVcbiAgLy8gaW50ZWdyYWwgaXMgc21hbGwsIHNvIGZld2VyIGludGVydmFscyBhcmUgbmVlZGVkLlxuXG4gIHZhciB3aW5jcjtcbiAgaWYgKHcgPiB3bGFyKVxuICAgIHdpbmNyID0gd2luY3IxO1xuICBlbHNlXG4gICAgd2luY3IgPSB3aW5jcjI7XG5cbiAgLy8gZmluZCB0aGUgaW50ZWdyYWwgb2Ygc2Vjb25kIHRlcm0gb2YgaGFydGxleSdzIGZvcm1cbiAgLy8gZm9yIHRoZSBpbnRlZ3JhbCBvZiB0aGUgcmFuZ2UgZm9yIGVxdWFsLWxlbmd0aFxuICAvLyBpbnRlcnZhbHMgdXNpbmcgbGVnZW5kcmUgcXVhZHJhdHVyZS4gIGxpbWl0cyBvZlxuICAvLyBpbnRlZ3JhdGlvbiBhcmUgZnJvbSAody8yLCA4KS4gIHR3byBvciB0aHJlZVxuICAvLyBlcXVhbC1sZW5ndGggaW50ZXJ2YWxzIGFyZSB1c2VkLlxuXG4gIC8vIGJsYiBhbmQgYnViIGFyZSBsb3dlciBhbmQgdXBwZXIgbGltaXRzIG9mIGludGVncmF0aW9uLlxuXG4gIHZhciBibGIgPSBxc3F6O1xuICB2YXIgYmluYyA9IChiYiAtIHFzcXopIC8gd2luY3I7XG4gIHZhciBidWIgPSBibGIgKyBiaW5jO1xuICB2YXIgZWluc3VtID0gMC4wO1xuXG4gIC8vIGludGVncmF0ZSBvdmVyIGVhY2ggaW50ZXJ2YWxcblxuICB2YXIgY2MxID0gY2MgLSAxLjA7XG4gIGZvciAodmFyIHdpID0gMTsgd2kgPD0gd2luY3I7IHdpKyspIHtcbiAgICB2YXIgZWxzdW0gPSAwLjA7XG4gICAgdmFyIGEgPSAwLjUgKiAoYnViICsgYmxiKTtcblxuICAgIC8vIGxlZ2VuZHJlIHF1YWRyYXR1cmUgd2l0aCBvcmRlciA9IG5sZWdcblxuICAgIHZhciBiID0gMC41ICogKGJ1YiAtIGJsYik7XG5cbiAgICBmb3IgKHZhciBqaiA9IDE7IGpqIDw9IG5sZWc7IGpqKyspIHtcbiAgICAgIHZhciBqLCB4eDtcbiAgICAgIGlmIChpaGFsZiA8IGpqKSB7XG4gICAgICAgIGogPSAobmxlZyAtIGpqKSArIDE7XG4gICAgICAgIHh4ID0geGxlZ1tqLTFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaiA9IGpqO1xuICAgICAgICB4eCA9IC14bGVnW2otMV07XG4gICAgICB9XG4gICAgICB2YXIgYyA9IGIgKiB4eDtcbiAgICAgIHZhciBhYyA9IGEgKyBjO1xuXG4gICAgICAvLyBpZiBleHAoLXFleHBvLzIpIDwgOWUtMTQsXG4gICAgICAvLyB0aGVuIGRvZXNuJ3QgY29udHJpYnV0ZSB0byBpbnRlZ3JhbFxuXG4gICAgICB2YXIgcWV4cG8gPSBhYyAqIGFjO1xuICAgICAgaWYgKHFleHBvID4gQzMpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICB2YXIgcHBsdXMgPSAyICogalN0YXQubm9ybWFsLmNkZihhYywgMCwgMSwgMSwgMCk7XG4gICAgICB2YXIgcG1pbnVzPSAyICogalN0YXQubm9ybWFsLmNkZihhYywgdywgMSwgMSwgMCk7XG5cbiAgICAgIC8vIGlmIHJpbnN1bSBeIChjYy0xKSA8IDllLTE0LFxuICAgICAgLy8gdGhlbiBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gaW50ZWdyYWxcblxuICAgICAgdmFyIHJpbnN1bSA9IChwcGx1cyAqIDAuNSkgLSAocG1pbnVzICogMC41KTtcbiAgICAgIGlmIChyaW5zdW0gPj0gTWF0aC5leHAoQzEgLyBjYzEpKSB7XG4gICAgICAgIHJpbnN1bSA9IChhbGVnW2otMV0gKiBNYXRoLmV4cCgtKDAuNSAqIHFleHBvKSkpICogTWF0aC5wb3cocmluc3VtLCBjYzEpO1xuICAgICAgICBlbHN1bSArPSByaW5zdW07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc3VtICo9ICgoKDIuMCAqIGIpICogY2MpIC8gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKSk7XG4gICAgZWluc3VtICs9IGVsc3VtO1xuICAgIGJsYiA9IGJ1YjtcbiAgICBidWIgKz0gYmluYztcbiAgfVxuXG4gIC8vIGlmIHByX3cgXiByciA8IDllLTE0LCB0aGVuIHJldHVybiAwXG4gIHByX3cgKz0gZWluc3VtO1xuICBpZiAocHJfdyA8PSBNYXRoLmV4cChDMSAvIHJyKSlcbiAgICByZXR1cm4gMDtcblxuICBwcl93ID0gTWF0aC5wb3cocHJfdywgcnIpO1xuICBpZiAocHJfdyA+PSAxKSAvLyAxIHdhcyBpTWF4IHdhcyBlcHNcbiAgICByZXR1cm4gMTtcbiAgcmV0dXJuIHByX3c7XG59XG5cbmZ1bmN0aW9uIHR1a2V5UWludihwLCBjLCB2KSB7XG4gIHZhciBwMCA9IDAuMzIyMjMyNDIxMDg4O1xuICB2YXIgcTAgPSAwLjk5MzQ4NDYyNjA2MGUtMDE7XG4gIHZhciBwMSA9IC0xLjA7XG4gIHZhciBxMSA9IDAuNTg4NTgxNTcwNDk1O1xuICB2YXIgcDIgPSAtMC4zNDIyNDIwODg1NDc7XG4gIHZhciBxMiA9IDAuNTMxMTAzNDYyMzY2O1xuICB2YXIgcDMgPSAtMC4yMDQyMzEyMTAxMjU7XG4gIHZhciBxMyA9IDAuMTAzNTM3NzUyODUwO1xuICB2YXIgcDQgPSAtMC40NTM2NDIyMTAxNDhlLTA0O1xuICB2YXIgcTQgPSAwLjM4NTYwNzAwNjM0ZS0wMjtcbiAgdmFyIGMxID0gMC44ODMyO1xuICB2YXIgYzIgPSAwLjIzNjg7XG4gIHZhciBjMyA9IDEuMjE0O1xuICB2YXIgYzQgPSAxLjIwODtcbiAgdmFyIGM1ID0gMS40MTQyO1xuICB2YXIgdm1heCA9IDEyMC4wO1xuXG4gIHZhciBwcyA9IDAuNSAtIDAuNSAqIHA7XG4gIHZhciB5aSA9IE1hdGguc3FydChNYXRoLmxvZygxLjAgLyAocHMgKiBwcykpKTtcbiAgdmFyIHQgPSB5aSArICgoKCggeWkgKiBwNCArIHAzKSAqIHlpICsgcDIpICogeWkgKyBwMSkgKiB5aSArIHAwKVxuICAgICAvICgoKCggeWkgKiBxNCArIHEzKSAqIHlpICsgcTIpICogeWkgKyBxMSkgKiB5aSArIHEwKTtcbiAgaWYgKHYgPCB2bWF4KSB0ICs9ICh0ICogdCAqIHQgKyB0KSAvIHYgLyA0LjA7XG4gIHZhciBxID0gYzEgLSBjMiAqIHQ7XG4gIGlmICh2IDwgdm1heCkgcSArPSAtYzMgLyB2ICsgYzQgKiB0IC8gdjtcbiAgcmV0dXJuIHQgKiAocSAqIE1hdGgubG9nKGMgLSAxLjApICsgYzUpO1xufVxuXG5qU3RhdC5leHRlbmQoalN0YXQudHVrZXksIHtcbiAgY2RmOiBmdW5jdGlvbiBjZGYocSwgbm1lYW5zLCBkZikge1xuICAgIC8vIElkZW50aWNhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgUiBwdHVrZXkoKSBmdW5jdGlvbiBhcyBvZiBjb21taXQgNjg5NDdcbiAgICB2YXIgcnIgPSAxO1xuICAgIHZhciBjYyA9IG5tZWFucztcblxuICAgIHZhciBubGVncSA9IDE2O1xuICAgIHZhciBpaGFsZnEgPSA4O1xuXG4gICAgdmFyIGVwczEgPSAtMzAuMDtcbiAgICB2YXIgZXBzMiA9IDEuMGUtMTQ7XG4gICAgdmFyIGRoYWYgID0gMTAwLjA7XG4gICAgdmFyIGRxdWFyID0gODAwLjA7XG4gICAgdmFyIGRlaWdoID0gNTAwMC4wO1xuICAgIHZhciBkbGFyZyA9IDI1MDAwLjA7XG4gICAgdmFyIHVsZW4xID0gMS4wO1xuICAgIHZhciB1bGVuMiA9IDAuNTtcbiAgICB2YXIgdWxlbjMgPSAwLjI1O1xuICAgIHZhciB1bGVuNCA9IDAuMTI1O1xuICAgIHZhciB4bGVncSA9IFtcbiAgICAgIDAuOTg5NDAwOTM0OTkxNjQ5OTMyNTk2MTU0MTczNDUwLFxuICAgICAgMC45NDQ1NzUwMjMwNzMyMzI1NzYwNzc5ODg0MTU1MzUsXG4gICAgICAwLjg2NTYzMTIwMjM4NzgzMTc0Mzg4MDQ2Nzg5NzcxMixcbiAgICAgIDAuNzU1NDA0NDA4MzU1MDAzMDMzODk1MTAxMTk0ODQ3LFxuICAgICAgMC42MTc4NzYyNDQ0MDI2NDM3NDg0NDY2NzE3NjQwNDksXG4gICAgICAwLjQ1ODAxNjc3NzY1NzIyNzM4NjM0MjQxOTQ0Mjk4NCxcbiAgICAgIDAuMjgxNjAzNTUwNzc5MjU4OTEzMjMwNDYwNTAxNDYwLFxuICAgICAgMC45NTAxMjUwOTgzNzYzNzQ0MDE4NTMxOTMzNTQyNTBlLTFcbiAgICBdO1xuICAgIHZhciBhbGVncSA9IFtcbiAgICAgIDAuMjcxNTI0NTk0MTE3NTQwOTQ4NTE3ODA1NzI0NTYwZS0xLFxuICAgICAgMC42MjI1MzUyMzkzODY0Nzg5Mjg2Mjg0MzgzNjk5NDRlLTEsXG4gICAgICAwLjk1MTU4NTExNjgyNDkyNzg0ODA5OTI1MTA3NjAyMmUtMSxcbiAgICAgIDAuMTI0NjI4OTcxMjU1NTMzODcyMDUyNDc2MjgyMTkyLFxuICAgICAgMC4xNDk1OTU5ODg4MTY1NzY3MzIwODE1MDE3MzA1NDcsXG4gICAgICAwLjE2OTE1NjUxOTM5NTAwMjUzODE4OTMxMjA3OTAzMCxcbiAgICAgIDAuMTgyNjAzNDE1MDQ0OTIzNTg4ODY2NzYzNjY3OTY5LFxuICAgICAgMC4xODk0NTA2MTA0NTUwNjg0OTYyODUzOTY3MjMyMDhcbiAgICBdO1xuXG4gICAgaWYgKHEgPD0gMClcbiAgICAgIHJldHVybiAwO1xuXG4gICAgLy8gZGYgbXVzdCBiZSA+IDFcbiAgICAvLyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHR3byB2YWx1ZXNcblxuICAgIGlmIChkZiA8IDIgfHwgcnIgPCAxIHx8IGNjIDwgMikgcmV0dXJuIE5hTjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHEpKVxuICAgICAgcmV0dXJuIDE7XG5cbiAgICBpZiAoZGYgPiBkbGFyZylcbiAgICAgIHJldHVybiB0dWtleVdwcm9iKHEsIHJyLCBjYyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgbGVhZGluZyBjb25zdGFudFxuXG4gICAgdmFyIGYyID0gZGYgKiAwLjU7XG4gICAgdmFyIGYybGYgPSAoKGYyICogTWF0aC5sb2coZGYpKSAtIChkZiAqIE1hdGgubG9nKDIpKSkgLSBqU3RhdC5nYW1tYWxuKGYyKTtcbiAgICB2YXIgZjIxID0gZjIgLSAxLjA7XG5cbiAgICAvLyBpbnRlZ3JhbCBpcyBkaXZpZGVkIGludG8gdW5pdCwgaGFsZi11bml0LCBxdWFydGVyLXVuaXQsIG9yXG4gICAgLy8gZWlnaHRoLXVuaXQgbGVuZ3RoIGludGVydmFscyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZVxuICAgIC8vIGRlZ3JlZXMgb2YgZnJlZWRvbS5cblxuICAgIHZhciBmZjQgPSBkZiAqIDAuMjU7XG4gICAgdmFyIHVsZW47XG4gICAgaWYgICAgICAoZGYgPD0gZGhhZikgIHVsZW4gPSB1bGVuMTtcbiAgICBlbHNlIGlmIChkZiA8PSBkcXVhcikgdWxlbiA9IHVsZW4yO1xuICAgIGVsc2UgaWYgKGRmIDw9IGRlaWdoKSB1bGVuID0gdWxlbjM7XG4gICAgZWxzZSAgICAgICAgICAgICAgICAgIHVsZW4gPSB1bGVuNDtcblxuICAgIGYybGYgKz0gTWF0aC5sb2codWxlbik7XG5cbiAgICAvLyBpbnRlZ3JhdGUgb3ZlciBlYWNoIHN1YmludGVydmFsXG5cbiAgICB2YXIgYW5zID0gMC4wO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gNTA7IGkrKykge1xuICAgICAgdmFyIG90c3VtID0gMC4wO1xuXG4gICAgICAvLyBsZWdlbmRyZSBxdWFkcmF0dXJlIHdpdGggb3JkZXIgPSBubGVncVxuICAgICAgLy8gbm9kZXMgKHN0b3JlZCBpbiB4bGVncSkgYXJlIHN5bW1ldHJpYyBhcm91bmQgemVyby5cblxuICAgICAgdmFyIHR3YTEgPSAoMiAqIGkgLSAxKSAqIHVsZW47XG5cbiAgICAgIGZvciAodmFyIGpqID0gMTsgamogPD0gbmxlZ3E7IGpqKyspIHtcbiAgICAgICAgdmFyIGosIHQxO1xuICAgICAgICBpZiAoaWhhbGZxIDwgamopIHtcbiAgICAgICAgICBqID0gamogLSBpaGFsZnEgLSAxO1xuICAgICAgICAgIHQxID0gKGYybGYgKyAoZjIxICogTWF0aC5sb2codHdhMSArICh4bGVncVtqXSAqIHVsZW4pKSkpXG4gICAgICAgICAgICAgIC0gKCgoeGxlZ3Fbal0gKiB1bGVuKSArIHR3YTEpICogZmY0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqID0gamogLSAxO1xuICAgICAgICAgIHQxID0gKGYybGYgKyAoZjIxICogTWF0aC5sb2codHdhMSAtICh4bGVncVtqXSAqIHVsZW4pKSkpXG4gICAgICAgICAgICAgICsgKCgoeGxlZ3Fbal0gKiB1bGVuKSAtIHR3YTEpICogZmY0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGV4cCh0MSkgPCA5ZS0xNCwgdGhlbiBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gaW50ZWdyYWxcbiAgICAgICAgdmFyIHFzcXo7XG4gICAgICAgIGlmICh0MSA+PSBlcHMxKSB7XG4gICAgICAgICAgaWYgKGloYWxmcSA8IGpqKSB7XG4gICAgICAgICAgICBxc3F6ID0gcSAqIE1hdGguc3FydCgoKHhsZWdxW2pdICogdWxlbikgKyB0d2ExKSAqIDAuNSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHFzcXogPSBxICogTWF0aC5zcXJ0KCgoLSh4bGVncVtqXSAqIHVsZW4pKSArIHR3YTEpICogMC41KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjYWxsIHdwcm9iIHRvIGZpbmQgaW50ZWdyYWwgb2YgcmFuZ2UgcG9ydGlvblxuXG4gICAgICAgICAgdmFyIHdwcmIgPSB0dWtleVdwcm9iKHFzcXosIHJyLCBjYyk7XG4gICAgICAgICAgdmFyIHJvdHN1bSA9ICh3cHJiICogYWxlZ3Fbal0pICogTWF0aC5leHAodDEpO1xuICAgICAgICAgIG90c3VtICs9IHJvdHN1bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQgbGVnZW5kcmUgaW50ZWdyYWwgZm9yIGludGVydmFsIGlcbiAgICAgICAgLy8gTDIwMDpcbiAgICAgIH1cblxuICAgICAgLy8gaWYgaW50ZWdyYWwgZm9yIGludGVydmFsIGkgPCAxZS0xNCwgdGhlbiBzdG9wLlxuICAgICAgLy8gSG93ZXZlciwgaW4gb3JkZXIgdG8gYXZvaWQgc21hbGwgYXJlYSB1bmRlciBsZWZ0IHRhaWwsXG4gICAgICAvLyBhdCBsZWFzdCAgMSAvIHVsZW4gIGludGVydmFscyBhcmUgY2FsY3VsYXRlZC5cbiAgICAgIGlmIChpICogdWxlbiA+PSAxLjAgJiYgb3RzdW0gPD0gZXBzMilcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIGVuZCBvZiBpbnRlcnZhbCBpXG4gICAgICAvLyBMMzMwOlxuXG4gICAgICBhbnMgKz0gb3RzdW07XG4gICAgfVxuXG4gICAgaWYgKG90c3VtID4gZXBzMikgeyAvLyBub3QgY29udmVyZ2VkXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R1a2V5LmNkZiBmYWlsZWQgdG8gY29udmVyZ2UnKTtcbiAgICB9XG4gICAgaWYgKGFucyA+IDEpXG4gICAgICBhbnMgPSAxO1xuICAgIHJldHVybiBhbnM7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBubWVhbnMsIGRmKSB7XG4gICAgLy8gSWRlbnRpY2FsIGltcGxlbWVudGF0aW9uIGFzIHRoZSBSIHF0dWtleSgpIGZ1bmN0aW9uIGFzIG9mIGNvbW1pdCA2ODk0N1xuICAgIHZhciByciA9IDE7XG4gICAgdmFyIGNjID0gbm1lYW5zO1xuXG4gICAgdmFyIGVwcyA9IDAuMDAwMTtcbiAgICB2YXIgbWF4aXRlciA9IDUwO1xuXG4gICAgLy8gZGYgbXVzdCBiZSA+IDEgOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHR3byB2YWx1ZXNcbiAgICBpZiAoZGYgPCAyIHx8IHJyIDwgMSB8fCBjYyA8IDIpIHJldHVybiBOYU47XG5cbiAgICBpZiAocCA8IDAgfHwgcCA+IDEpIHJldHVybiBOYU47XG4gICAgaWYgKHAgPT09IDApIHJldHVybiAwO1xuICAgIGlmIChwID09PSAxKSByZXR1cm4gSW5maW5pdHk7XG5cbiAgICAvLyBJbml0aWFsIHZhbHVlXG5cbiAgICB2YXIgeDAgPSB0dWtleVFpbnYocCwgY2MsIGRmKTtcblxuICAgIC8vIEZpbmQgcHJvYih2YWx1ZSA8IHgwKVxuXG4gICAgdmFyIHZhbHgwID0galN0YXQudHVrZXkuY2RmKHgwLCBubWVhbnMsIGRmKSAtIHA7XG5cbiAgICAvLyBGaW5kIHRoZSBzZWNvbmQgaXRlcmF0ZSBhbmQgcHJvYih2YWx1ZSA8IHgxKS5cbiAgICAvLyBJZiB0aGUgZmlyc3QgaXRlcmF0ZSBoYXMgcHJvYmFiaWxpdHkgdmFsdWVcbiAgICAvLyBleGNlZWRpbmcgcCB0aGVuIHNlY29uZCBpdGVyYXRlIGlzIDEgbGVzcyB0aGFuXG4gICAgLy8gZmlyc3QgaXRlcmF0ZTsgb3RoZXJ3aXNlIGl0IGlzIDEgZ3JlYXRlci5cblxuICAgIHZhciB4MTtcbiAgICBpZiAodmFseDAgPiAwLjApXG4gICAgICB4MSA9IE1hdGgubWF4KDAuMCwgeDAgLSAxLjApO1xuICAgIGVsc2VcbiAgICAgIHgxID0geDAgKyAxLjA7XG4gICAgdmFyIHZhbHgxID0galN0YXQudHVrZXkuY2RmKHgxLCBubWVhbnMsIGRmKSAtIHA7XG5cbiAgICAvLyBGaW5kIG5ldyBpdGVyYXRlXG5cbiAgICB2YXIgYW5zO1xuICAgIGZvcih2YXIgaXRlciA9IDE7IGl0ZXIgPCBtYXhpdGVyOyBpdGVyKyspIHtcbiAgICAgIGFucyA9IHgxIC0gKCh2YWx4MSAqICh4MSAtIHgwKSkgLyAodmFseDEgLSB2YWx4MCkpO1xuICAgICAgdmFseDAgPSB2YWx4MTtcblxuICAgICAgLy8gTmV3IGl0ZXJhdGUgbXVzdCBiZSA+PSAwXG5cbiAgICAgIHgwID0geDE7XG4gICAgICBpZiAoYW5zIDwgMC4wKSB7XG4gICAgICAgIGFucyA9IDAuMDtcbiAgICAgICAgdmFseDEgPSAtcDtcbiAgICAgIH1cbiAgICAgIC8vIEZpbmQgcHJvYih2YWx1ZSA8IG5ldyBpdGVyYXRlKVxuXG4gICAgICB2YWx4MSA9IGpTdGF0LnR1a2V5LmNkZihhbnMsIG5tZWFucywgZGYpIC0gcDtcbiAgICAgIHgxID0gYW5zO1xuXG4gICAgICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlXG4gICAgICAvLyBpdGVyYXRlcyBpcyBsZXNzIHRoYW4gZXBzLCBzdG9wXG5cbiAgICAgIHZhciB4YWJzID0gTWF0aC5hYnMoeDEgLSB4MCk7XG4gICAgICBpZiAoeGFicyA8IGVwcylcbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3R1a2V5LmludiBmYWlsZWQgdG8gY29udmVyZ2UnKTtcbiAgfVxufSk7XG5cbn0oalN0YXQsIE1hdGgpKTtcbi8qIFByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIHNvbHV0aW9uIG9mIGxpbmVhciBzeXN0ZW0gb2YgZXF1YXRpb25zLCBpbnRlZ3JhdGlvbiwgZXh0cmFwb2xhdGlvbixcbiAqIGludGVycG9sYXRpb24sIGVpZ2VudmFsdWUgcHJvYmxlbXMsIGRpZmZlcmVudGlhbCBlcXVhdGlvbnMgYW5kIFBDQSBhbmFseXNpcy4gKi9cblxuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgaXNBcnJheSA9IGpTdGF0LnV0aWxzLmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzVXNhYmxlKGFyZykge1xuICByZXR1cm4gaXNBcnJheShhcmcpIHx8IGFyZyBpbnN0YW5jZW9mIGpTdGF0O1xufVxuXG5qU3RhdC5leHRlbmQoe1xuXG4gIC8vIGFkZCBhIHZlY3Rvci9tYXRyaXggdG8gYSB2ZWN0b3IvbWF0cml4IG9yIHNjYWxhclxuICBhZGQ6IGZ1bmN0aW9uIGFkZChhcnIsIGFyZykge1xuICAgIC8vIGNoZWNrIGlmIGFyZyBpcyBhIHZlY3RvciBvciBzY2FsYXJcbiAgICBpZiAoaXNVc2FibGUoYXJnKSkge1xuICAgICAgaWYgKCFpc1VzYWJsZShhcmdbMF0pKSBhcmcgPSBbIGFyZyBdO1xuICAgICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKyBhcmdbcm93XVtjb2xdO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWUgKyBhcmc7IH0pO1xuICB9LFxuXG4gIC8vIHN1YnRyYWN0IGEgdmVjdG9yIG9yIHNjYWxhciBmcm9tIHRoZSB2ZWN0b3JcbiAgc3VidHJhY3Q6IGZ1bmN0aW9uIHN1YnRyYWN0KGFyciwgYXJnKSB7XG4gICAgLy8gY2hlY2sgaWYgYXJnIGlzIGEgdmVjdG9yIG9yIHNjYWxhclxuICAgIGlmIChpc1VzYWJsZShhcmcpKSB7XG4gICAgICBpZiAoIWlzVXNhYmxlKGFyZ1swXSkpIGFyZyA9IFsgYXJnIF07XG4gICAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUsIHJvdywgY29sKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAtIGFyZ1tyb3ddW2NvbF0gfHwgMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlIC0gYXJnOyB9KTtcbiAgfSxcblxuICAvLyBtYXRyaXggZGl2aXNpb25cbiAgZGl2aWRlOiBmdW5jdGlvbiBkaXZpZGUoYXJyLCBhcmcpIHtcbiAgICBpZiAoaXNVc2FibGUoYXJnKSkge1xuICAgICAgaWYgKCFpc1VzYWJsZShhcmdbMF0pKSBhcmcgPSBbIGFyZyBdO1xuICAgICAgcmV0dXJuIGpTdGF0Lm11bHRpcGx5KGFyciwgalN0YXQuaW52KGFyZykpO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlIC8gYXJnOyB9KTtcbiAgfSxcblxuICAvLyBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgbXVsdGlwbHk6IGZ1bmN0aW9uIG11bHRpcGx5KGFyciwgYXJnKSB7XG4gICAgdmFyIHJvdywgY29sLCBucmVzY29scywgc3VtLCBucm93LCBuY29sLCByZXMsIHJlc2NvbHM7XG4gICAgLy8gZWc6IGFyciA9IDIgYXJnID0gMyAtPiA2IGZvciByZXNbMF1bMF0gc3RhdGVtZW50IGNsb3N1cmVcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIGFyZy5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGFyciAqIGFyZztcbiAgICB9XG4gICAgbnJvdyA9IGFyci5sZW5ndGgsXG4gICAgbmNvbCA9IGFyclswXS5sZW5ndGgsXG4gICAgcmVzID0galN0YXQuemVyb3MobnJvdywgbnJlc2NvbHMgPSAoaXNVc2FibGUoYXJnKSkgPyBhcmdbMF0ubGVuZ3RoIDogbmNvbCksXG4gICAgcmVzY29scyA9IDA7XG4gICAgaWYgKGlzVXNhYmxlKGFyZykpIHtcbiAgICAgIGZvciAoOyByZXNjb2xzIDwgbnJlc2NvbHM7IHJlc2NvbHMrKykge1xuICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IG5yb3c7IHJvdysrKSB7XG4gICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5jb2w7IGNvbCsrKVxuICAgICAgICAgIHN1bSArPSBhcnJbcm93XVtjb2xdICogYXJnW2NvbF1bcmVzY29sc107XG4gICAgICAgICAgcmVzW3Jvd11bcmVzY29sc10gPSBzdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAobnJvdyA9PT0gMSAmJiByZXNjb2xzID09PSAxKSA/IHJlc1swXVswXSA6IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZSAqIGFyZzsgfSk7XG4gIH0sXG5cbiAgLy8gb3V0ZXIoWzEsMiwzXSxbNCw1LDZdKVxuICAvLyA9PT1cbiAgLy8gW1sxXSxbMl0sWzNdXSB0aW1lcyBbWzQsNSw2XV1cbiAgLy8gLT5cbiAgLy8gW1s0LDUsNl0sWzgsMTAsMTJdLFsxMiwxNSwxOF1dXG4gIG91dGVyOmZ1bmN0aW9uIG91dGVyKEEsIEIpIHtcbiAgICByZXR1cm4galN0YXQubXVsdGlwbHkoQS5tYXAoZnVuY3Rpb24odCl7IHJldHVybiBbdF0gfSksIFtCXSk7XG4gIH0sXG5cblxuICAvLyBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gbWF0cmljaWVzXG4gIGRvdDogZnVuY3Rpb24gZG90KGFyciwgYXJnKSB7XG4gICAgaWYgKCFpc1VzYWJsZShhcnJbMF0pKSBhcnIgPSBbIGFyciBdO1xuICAgIGlmICghaXNVc2FibGUoYXJnWzBdKSkgYXJnID0gWyBhcmcgXTtcbiAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byByb3cgdmVjdG9yXG4gICAgdmFyIGxlZnQgPSAoYXJyWzBdLmxlbmd0aCA9PT0gMSAmJiBhcnIubGVuZ3RoICE9PSAxKSA/IGpTdGF0LnRyYW5zcG9zZShhcnIpIDogYXJyLFxuICAgIHJpZ2h0ID0gKGFyZ1swXS5sZW5ndGggPT09IDEgJiYgYXJnLmxlbmd0aCAhPT0gMSkgPyBqU3RhdC50cmFuc3Bvc2UoYXJnKSA6IGFyZyxcbiAgICByZXMgPSBbXSxcbiAgICByb3cgPSAwLFxuICAgIG5yb3cgPSBsZWZ0Lmxlbmd0aCxcbiAgICBuY29sID0gbGVmdFswXS5sZW5ndGgsXG4gICAgc3VtLCBjb2w7XG4gICAgZm9yICg7IHJvdyA8IG5yb3c7IHJvdysrKSB7XG4gICAgICByZXNbcm93XSA9IFtdO1xuICAgICAgc3VtID0gMDtcbiAgICAgIGZvciAoY29sID0gMDsgY29sIDwgbmNvbDsgY29sKyspXG4gICAgICBzdW0gKz0gbGVmdFtyb3ddW2NvbF0gKiByaWdodFtyb3ddW2NvbF07XG4gICAgICByZXNbcm93XSA9IHN1bTtcbiAgICB9XG4gICAgcmV0dXJuIChyZXMubGVuZ3RoID09PSAxKSA/IHJlc1swXSA6IHJlcztcbiAgfSxcblxuICAvLyByYWlzZSBldmVyeSBlbGVtZW50IGJ5IGEgc2NhbGFyXG4gIHBvdzogZnVuY3Rpb24gcG93KGFyciwgYXJnKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBNYXRoLnBvdyh2YWx1ZSwgYXJnKTsgfSk7XG4gIH0sXG5cbiAgLy8gZXhwb25lbnRpYXRlIGV2ZXJ5IGVsZW1lbnRcbiAgZXhwOiBmdW5jdGlvbiBleHAoYXJyKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBNYXRoLmV4cCh2YWx1ZSk7IH0pO1xuICB9LFxuXG4gIC8vIGdlbmVyYXRlIHRoZSBuYXR1cmFsIGxvZyBvZiBldmVyeSBlbGVtZW50XG4gIGxvZzogZnVuY3Rpb24gZXhwKGFycikge1xuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTWF0aC5sb2codmFsdWUpOyB9KTtcbiAgfSxcblxuICAvLyBnZW5lcmF0ZSB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSB2ZWN0b3JcbiAgYWJzOiBmdW5jdGlvbiBhYnMoYXJyKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBNYXRoLmFicyh2YWx1ZSk7IH0pO1xuICB9LFxuXG4gIC8vIGNvbXB1dGVzIHRoZSBwLW5vcm0gb2YgdGhlIHZlY3RvclxuICAvLyBJbiB0aGUgY2FzZSB0aGF0IGEgbWF0cml4IGlzIHBhc3NlZCwgdXNlcyB0aGUgZmlyc3Qgcm93IGFzIHRoZSB2ZWN0b3JcbiAgbm9ybTogZnVuY3Rpb24gbm9ybShhcnIsIHApIHtcbiAgICB2YXIgbm5vcm0gPSAwLFxuICAgIGkgPSAwO1xuICAgIC8vIGNoZWNrIHRoZSBwLXZhbHVlIG9mIHRoZSBub3JtLCBhbmQgc2V0IGZvciBtb3N0IGNvbW1vbiBjYXNlXG4gICAgaWYgKGlzTmFOKHApKSBwID0gMjtcbiAgICAvLyBjaGVjayBpZiBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSwgYW5kIG1ha2UgdmVjdG9yIGNvcnJlY3Rpb25cbiAgICBpZiAoaXNVc2FibGUoYXJyWzBdKSkgYXJyID0gYXJyWzBdO1xuICAgIC8vIHZlY3RvciBub3JtXG4gICAgZm9yICg7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ub3JtICs9IE1hdGgucG93KE1hdGguYWJzKGFycltpXSksIHApO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5wb3cobm5vcm0sIDEgLyBwKTtcbiAgfSxcblxuICAvLyBjb21wdXRlcyB0aGUgYW5nbGUgYmV0d2VlbiB0d28gdmVjdG9ycyBpbiByYWRzXG4gIC8vIEluIGNhc2UgYSBtYXRyaXggaXMgcGFzc2VkLCB0aGlzIHVzZXMgdGhlIGZpcnN0IHJvdyBhcyB0aGUgdmVjdG9yXG4gIGFuZ2xlOiBmdW5jdGlvbiBhbmdsZShhcnIsIGFyZykge1xuICAgIHJldHVybiBNYXRoLmFjb3MoalN0YXQuZG90KGFyciwgYXJnKSAvIChqU3RhdC5ub3JtKGFycikgKiBqU3RhdC5ub3JtKGFyZykpKTtcbiAgfSxcblxuICAvLyBhdWdtZW50IG9uZSBtYXRyaXggYnkgYW5vdGhlclxuICAvLyBOb3RlOiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBtYXRyaXgsIG5vdCBhIGpTdGF0IG9iamVjdFxuICBhdWc6IGZ1bmN0aW9uIGF1ZyhhLCBiKSB7XG4gICAgdmFyIG5ld2FyciA9IFtdO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdhcnIucHVzaChhW2ldLnNsaWNlKCkpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwdXNoLmFwcGx5KG5ld2FycltpXSwgYltpXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdhcnI7XG4gIH0sXG5cbiAgLy8gVGhlIGludigpIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBtYXRyaXhcbiAgLy8gQ3JlYXRlIHRoZSBpbnZlcnNlIGJ5IGF1Z21lbnRpbmcgdGhlIG1hdHJpeCBieSB0aGUgaWRlbnRpdHkgbWF0cml4IG9mIHRoZVxuICAvLyBhcHByb3ByaWF0ZSBzaXplLCBhbmQgdGhlbiB1c2UgRy1KIGVsaW1pbmF0aW9uIG9uIHRoZSBhdWdtZW50ZWQgbWF0cml4LlxuICBpbnY6IGZ1bmN0aW9uIGludihhKSB7XG4gICAgdmFyIHJvd3MgPSBhLmxlbmd0aDtcbiAgICB2YXIgY29scyA9IGFbMF0ubGVuZ3RoO1xuICAgIHZhciBiID0galN0YXQuaWRlbnRpdHkocm93cywgY29scyk7XG4gICAgdmFyIGMgPSBqU3RhdC5nYXVzc19qb3JkYW4oYSwgYik7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgajtcblxuICAgIC8vV2UgbmVlZCB0byBjb3B5IHRoZSBpbnZlcnNlIHBvcnRpb24gdG8gYSBuZXcgbWF0cml4IHRvIHJpZCBHLUogYXJ0aWZhY3RzXG4gICAgZm9yICg7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gY29sczsgaiA8IGNbMF0ubGVuZ3RoOyBqKyspXG4gICAgICAgIHJlc3VsdFtpXVtqIC0gY29sc10gPSBjW2ldW2pdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXhcbiAgZGV0OiBmdW5jdGlvbiBkZXQoYSkge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIGFbMF1bMF0gKiBhWzFdWzFdIC0gYVswXVsxXSAqIGFbMV1bMF07XG4gICAgfVxuXG4gICAgdmFyIGRldGVybWluYW50ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGJ1aWxkIGEgc3ViIG1hdHJpeCB3aXRob3V0IGNvbHVtbiBgaWBcbiAgICAgIHZhciBzdWJtYXRyaXggPSBbXTtcbiAgICAgIGZvciAodmFyIHJvdyA9IDE7IHJvdyA8IGEubGVuZ3RoOyByb3crKykge1xuICAgICAgICBzdWJtYXRyaXhbcm93IC0gMV0gPSBbXTtcbiAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgYS5sZW5ndGg7IGNvbCsrKSB7XG4gICAgICAgICAgaWYgKGNvbCA8IGkpIHtcbiAgICAgICAgICAgIHN1Ym1hdHJpeFtyb3cgLSAxXVtjb2xdID0gYVtyb3ddW2NvbF07XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wgPiBpKSB7XG4gICAgICAgICAgICBzdWJtYXRyaXhbcm93IC0gMV1bY29sIC0gMV0gPSBhW3Jvd11bY29sXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYWx0ZXJuYXRlIGJldHdlZW4gKyBhbmQgLSBiZXR3ZWVuIGRldGVybWluYW50c1xuICAgICAgdmFyIHNpZ24gPSBpICUgMiA/IC0xIDogMTtcbiAgICAgIGRldGVybWluYW50ICs9IGRldChzdWJtYXRyaXgpICogYVswXVtpXSAqIHNpZ247XG4gICAgfVxuXG4gICAgcmV0dXJuIGRldGVybWluYW50XG4gIH0sXG5cbiAgZ2F1c3NfZWxpbWluYXRpb246IGZ1bmN0aW9uIGdhdXNzX2VsaW1pbmF0aW9uKGEsIGIpIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgaiA9IDAsXG4gICAgbiA9IGEubGVuZ3RoLFxuICAgIG0gPSBhWzBdLmxlbmd0aCxcbiAgICBmYWN0b3IgPSAxLFxuICAgIHN1bSA9IDAsXG4gICAgeCA9IFtdLFxuICAgIG1hdWcsIHBpdm90LCB0ZW1wLCBrO1xuICAgIGEgPSBqU3RhdC5hdWcoYSwgYik7XG4gICAgbWF1ZyA9IGFbMF0ubGVuZ3RoO1xuICAgIGZvcihpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgcGl2b3QgPSBhW2ldW2ldO1xuICAgICAgaiA9IGk7XG4gICAgICBmb3IgKGsgPSBpICsgMTsgayA8IG07IGsrKykge1xuICAgICAgICBpZiAocGl2b3QgPCBNYXRoLmFicyhhW2tdW2ldKSkge1xuICAgICAgICAgIHBpdm90ID0gYVtrXVtpXTtcbiAgICAgICAgICBqID0gaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGogIT0gaSkge1xuICAgICAgICBmb3IoayA9IDA7IGsgPCBtYXVnOyBrKyspIHtcbiAgICAgICAgICB0ZW1wID0gYVtpXVtrXTtcbiAgICAgICAgICBhW2ldW2tdID0gYVtqXVtrXTtcbiAgICAgICAgICBhW2pdW2tdID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZmFjdG9yID0gYVtqXVtpXSAvIGFbaV1baV07XG4gICAgICAgIGZvcihrID0gaTsgayA8IG1hdWc7IGsrKykge1xuICAgICAgICAgIGFbal1ba10gPSBhW2pdW2tdIC0gZmFjdG9yICogYVtpXVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHN1bSA9IDA7XG4gICAgICBmb3IgKGogPSBpICsgMTsgajw9IG4gLSAxOyBqKyspIHtcbiAgICAgICAgc3VtID0gc3VtICsgeFtqXSAqIGFbaV1bal07XG4gICAgICB9XG4gICAgICB4W2ldID0oYVtpXVttYXVnIC0gMV0gLSBzdW0pIC8gYVtpXVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHg7XG4gIH0sXG5cbiAgZ2F1c3Nfam9yZGFuOiBmdW5jdGlvbiBnYXVzc19qb3JkYW4oYSwgYikge1xuICAgIHZhciBtID0galN0YXQuYXVnKGEsIGIpO1xuICAgIHZhciBoID0gbS5sZW5ndGg7XG4gICAgdmFyIHcgPSBtWzBdLmxlbmd0aDtcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIHgsIHksIHkyO1xuICAgIC8vIGZpbmQgbWF4IHBpdm90XG4gICAgZm9yICh5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgdmFyIG1heHJvdyA9IHk7XG4gICAgICBmb3IgKHkyID0geSsxOyB5MiA8IGg7IHkyKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKG1beTJdW3ldKSA+IE1hdGguYWJzKG1bbWF4cm93XVt5XSkpXG4gICAgICAgICAgbWF4cm93ID0geTI7XG4gICAgICB9XG4gICAgICB2YXIgdG1wID0gbVt5XTtcbiAgICAgIG1beV0gPSBtW21heHJvd107XG4gICAgICBtW21heHJvd10gPSB0bXBcbiAgICAgIGZvciAoeTIgPSB5KzE7IHkyIDwgaDsgeTIrKykge1xuICAgICAgICBjID0gbVt5Ml1beV0gLyBtW3ldW3ldO1xuICAgICAgICBmb3IgKHggPSB5OyB4IDwgdzsgeCsrKSB7XG4gICAgICAgICAgbVt5Ml1beF0gLT0gbVt5XVt4XSAqIGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gYmFja3N1YnN0aXR1dGVcbiAgICBmb3IgKHkgPSBoLTE7IHkgPj0gMDsgeS0tKSB7XG4gICAgICBjID0gbVt5XVt5XTtcbiAgICAgIGZvciAoeTIgPSAwOyB5MiA8IHk7IHkyKyspIHtcbiAgICAgICAgZm9yICh4ID0gdy0xOyB4ID4geS0xOyB4LS0pIHtcbiAgICAgICAgICBtW3kyXVt4XSAtPSBtW3ldW3hdICogbVt5Ml1beV0gLyBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtW3ldW3ldIC89IGM7XG4gICAgICBmb3IgKHggPSBoOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIG1beV1beF0gLz0gYztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH0sXG5cbiAgLy8gc29sdmUgZXF1YXRpb25cbiAgLy8gQXg9YlxuICAvLyBBIGlzIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gIC8vIEE9W1sxLDIsM10sWzAsNCw1XSxbMCw2LDddXVxuICAvLyBiPVsxLDIsM11cbiAgLy8gdHJpYVVwU29sdmUoQSxiKSAvLyAtPiBbMi42NjYsMC4xNjY2LDEuNjY2XVxuICAvLyBpZiB5b3UgdXNlIG1hdHJpeCBzdHlsZVxuICAvLyBBPVtbMSwyLDNdLFswLDQsNV0sWzAsNiw3XV1cbiAgLy8gYj1bWzFdLFsyXSxbM11dXG4gIC8vIHdpbGwgcmV0dXJuIFtbMi42NjZdLFswLjE2NjZdLFsxLjY2Nl1dXG4gIHRyaWFVcFNvbHZlOiBmdW5jdGlvbiB0cmlhVXBTb2x2ZShBLCBiKSB7XG4gICAgdmFyIHNpemUgPSBBWzBdLmxlbmd0aDtcbiAgICB2YXIgeCA9IGpTdGF0Lnplcm9zKDEsIHNpemUpWzBdO1xuICAgIHZhciBwYXJ0cztcbiAgICB2YXIgbWF0cml4X21vZGUgPSBmYWxzZTtcblxuICAgIGlmIChiWzBdLmxlbmd0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGIgPSBiLm1hcChmdW5jdGlvbihpKXsgcmV0dXJuIGlbMF0gfSk7XG4gICAgICBtYXRyaXhfbW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgalN0YXQuYXJhbmdlKHNpemUgLSAxLCAtMSwgLTEpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSArIDEsIHNpemUpLm1hcChmdW5jdGlvbihqKSB7XG4gICAgICAgIHJldHVybiB4W2pdICogQVtpXVtqXTtcbiAgICAgIH0pO1xuICAgICAgeFtpXSA9IChiW2ldIC0galN0YXQuc3VtKHBhcnRzKSkgLyBBW2ldW2ldO1xuICAgIH0pO1xuXG4gICAgaWYgKG1hdHJpeF9tb2RlKVxuICAgICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gW2ldIH0pO1xuICAgIHJldHVybiB4O1xuICB9LFxuXG4gIHRyaWFMb3dTb2x2ZTogZnVuY3Rpb24gdHJpYUxvd1NvbHZlKEEsIGIpIHtcbiAgICAvLyBsaWtlIHRvIHRyaWFVcFNvbHZlIGJ1dCBBIGlzIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgdmFyIHNpemUgPSBBWzBdLmxlbmd0aDtcbiAgICB2YXIgeCA9IGpTdGF0Lnplcm9zKDEsIHNpemUpWzBdO1xuICAgIHZhciBwYXJ0cztcblxuICAgIHZhciBtYXRyaXhfbW9kZT1mYWxzZTtcbiAgICBpZiAoYlswXS5sZW5ndGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICBiID0gYi5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpWzBdIH0pO1xuICAgICAgbWF0cml4X21vZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGpTdGF0LmFyYW5nZShzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGkpLm1hcChmdW5jdGlvbihqKSB7XG4gICAgICAgIHJldHVybiBBW2ldW2pdICogeFtqXTtcbiAgICAgIH0pO1xuICAgICAgeFtpXSA9IChiW2ldIC0galN0YXQuc3VtKHBhcnRzKSkgLyBBW2ldW2ldO1xuICAgIH0pXG5cbiAgICBpZiAobWF0cml4X21vZGUpXG4gICAgICByZXR1cm4geC5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBbaV0gfSk7XG4gICAgcmV0dXJuIHg7XG4gIH0sXG5cblxuICAvLyBBIC0+IFtMLFVdXG4gIC8vIEE9TFVcbiAgLy8gTCBpcyBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAvLyBVIGlzIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gIGx1OiBmdW5jdGlvbiBsdShBKSB7XG4gICAgdmFyIHNpemUgPSBBLmxlbmd0aDtcbiAgICAvL3ZhciBMPWpTdGF0LmRpYWdvbmFsKGpTdGF0Lm9uZXMoMSxzaXplKVswXSk7XG4gICAgdmFyIEwgPSBqU3RhdC5pZGVudGl0eShzaXplKTtcbiAgICB2YXIgUiA9IGpTdGF0Lnplcm9zKEEubGVuZ3RoLCBBWzBdLmxlbmd0aCk7XG4gICAgdmFyIHBhcnRzO1xuICAgIGpTdGF0LmFyYW5nZShzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgIFJbMF1bdF0gPSBBWzBdW3RdO1xuICAgIH0pO1xuICAgIGpTdGF0LmFyYW5nZSgxLCBzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGwpIHtcbiAgICAgIGpTdGF0LmFyYW5nZShsKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSkubWFwKGZ1bmN0aW9uKGpqKSB7XG4gICAgICAgICAgcmV0dXJuIExbbF1bampdICogUltqal1baV07XG4gICAgICAgIH0pO1xuICAgICAgICBMW2xdW2ldID0gKEFbbF1baV0gLSBqU3RhdC5zdW0ocGFydHMpKSAvIFJbaV1baV07XG4gICAgICB9KTtcbiAgICAgIGpTdGF0LmFyYW5nZShsLCBzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UobCkubWFwKGZ1bmN0aW9uKGpqKSB7XG4gICAgICAgICAgcmV0dXJuIExbbF1bampdICogUltqal1bal07XG4gICAgICAgIH0pO1xuICAgICAgICBSW2xdW2pdID0gQVtwYXJ0cy5sZW5ndGhdW2pdIC0galN0YXQuc3VtKHBhcnRzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBbTCwgUl07XG4gIH0sXG5cbiAgLy8gQSAtPiBUXG4gIC8vIEE9VFQnXG4gIC8vIFQgaXMgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgY2hvbGVza3k6IGZ1bmN0aW9uIGNob2xlc2t5KEEpIHtcbiAgICB2YXIgc2l6ZSA9IEEubGVuZ3RoO1xuICAgIHZhciBUID0galN0YXQuemVyb3MoQS5sZW5ndGgsIEFbMF0ubGVuZ3RoKTtcbiAgICB2YXIgcGFydHM7XG4gICAgalN0YXQuYXJhbmdlKHNpemUpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSkubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KFRbaV1bdF0sMik7XG4gICAgICB9KTtcbiAgICAgIFRbaV1baV0gPSBNYXRoLnNxcnQoQVtpXVtpXSAtIGpTdGF0LnN1bShwYXJ0cykpO1xuICAgICAgalN0YXQuYXJhbmdlKGkgKyAxLCBzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSkubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICByZXR1cm4gVFtpXVt0XSAqIFRbal1bdF07XG4gICAgICAgIH0pO1xuICAgICAgICBUW2pdW2ldID0gKEFbaV1bal0gLSBqU3RhdC5zdW0ocGFydHMpKSAvIFRbaV1baV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gVDtcbiAgfSxcblxuXG4gIGdhdXNzX2phY29iaTogZnVuY3Rpb24gZ2F1c3NfamFjb2JpKGEsIGIsIHgsIHIpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBuID0gYS5sZW5ndGg7XG4gICAgdmFyIGwgPSBbXTtcbiAgICB2YXIgdSA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgdmFyIHh2LCBjLCBoLCB4aztcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IFtdO1xuICAgICAgdVtpXSA9IFtdO1xuICAgICAgZFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBsW2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICB1W2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICB1W2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICBsW2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IHVbaV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGggPSBqU3RhdC5tdWx0aXBseShqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoZCksIGpTdGF0LmFkZChsLCB1KSksIC0xKTtcbiAgICBjID0galN0YXQubXVsdGlwbHkoalN0YXQuaW52KGQpLCBiKTtcbiAgICB4diA9IHg7XG4gICAgeGsgPSBqU3RhdC5hZGQoalN0YXQubXVsdGlwbHkoaCwgeCksIGMpO1xuICAgIGkgPSAyO1xuICAgIHdoaWxlIChNYXRoLmFicyhqU3RhdC5ub3JtKGpTdGF0LnN1YnRyYWN0KHhrLHh2KSkpID4gcikge1xuICAgICAgeHYgPSB4aztcbiAgICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHh2KSwgYyk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB4aztcbiAgfSxcblxuICBnYXVzc19zZWlkZWw6IGZ1bmN0aW9uIGdhdXNzX3NlaWRlbChhLCBiLCB4LCByKSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBuID0gYS5sZW5ndGg7XG4gICAgdmFyIGwgPSBbXTtcbiAgICB2YXIgdSA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgdmFyIGosIHh2LCBjLCBoLCB4aztcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IFtdO1xuICAgICAgdVtpXSA9IFtdO1xuICAgICAgZFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBsW2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICB1W2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICB1W2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICBsW2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IHVbaV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGggPSBqU3RhdC5tdWx0aXBseShqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoalN0YXQuYWRkKGQsIGwpKSwgdSksIC0xKTtcbiAgICBjID0galN0YXQubXVsdGlwbHkoalN0YXQuaW52KGpTdGF0LmFkZChkLCBsKSksIGIpO1xuICAgIHh2ID0geDtcbiAgICB4ayA9IGpTdGF0LmFkZChqU3RhdC5tdWx0aXBseShoLCB4KSwgYyk7XG4gICAgaSA9IDI7XG4gICAgd2hpbGUgKE1hdGguYWJzKGpTdGF0Lm5vcm0oalN0YXQuc3VidHJhY3QoeGssIHh2KSkpID4gcikge1xuICAgICAgeHYgPSB4aztcbiAgICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHh2KSwgYyk7XG4gICAgICBpID0gaSArIDE7XG4gICAgfVxuICAgIHJldHVybiB4aztcbiAgfSxcblxuICBTT1I6IGZ1bmN0aW9uIFNPUihhLCBiLCB4LCByLCB3KSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBuID0gYS5sZW5ndGg7XG4gICAgdmFyIGwgPSBbXTtcbiAgICB2YXIgdSA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgdmFyIGosIHh2LCBjLCBoLCB4aztcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IFtdO1xuICAgICAgdVtpXSA9IFtdO1xuICAgICAgZFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBsW2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICB1W2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICB1W2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICBsW2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IHVbaV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGggPSBqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoalN0YXQuYWRkKGQsIGpTdGF0Lm11bHRpcGx5KGwsIHcpKSksXG4gICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LnN1YnRyYWN0KGpTdGF0Lm11bHRpcGx5KGQsIDEgLSB3KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalN0YXQubXVsdGlwbHkodSwgdykpKTtcbiAgICBjID0galN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkoalN0YXQuaW52KGpTdGF0LmFkZChkLFxuICAgICAgICBqU3RhdC5tdWx0aXBseShsLCB3KSkpLCBiKSwgdyk7XG4gICAgeHYgPSB4O1xuICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHgpLCBjKTtcbiAgICBpID0gMjtcbiAgICB3aGlsZSAoTWF0aC5hYnMoalN0YXQubm9ybShqU3RhdC5zdWJ0cmFjdCh4aywgeHYpKSkgPiByKSB7XG4gICAgICB4diA9IHhrO1xuICAgICAgeGsgPSBqU3RhdC5hZGQoalN0YXQubXVsdGlwbHkoaCwgeHYpLCBjKTtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHhrO1xuICB9LFxuXG4gIGhvdXNlaG9sZGVyOiBmdW5jdGlvbiBob3VzZWhvbGRlcihhKSB7XG4gICAgdmFyIG0gPSBhLmxlbmd0aDtcbiAgICB2YXIgbiA9IGFbMF0ubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgdyA9IFtdO1xuICAgIHZhciBwID0gW107XG4gICAgdmFyIGFscGhhLCByLCBrLCBqLCBmYWN0b3I7XG4gICAgZm9yICg7IGkgPCBtIC0gMTsgaSsrKSB7XG4gICAgICBhbHBoYSA9IDA7XG4gICAgICBmb3IgKGogPSBpICsgMTsgaiA8IG47IGorKylcbiAgICAgIGFscGhhICs9IChhW2pdW2ldICogYVtqXVtpXSk7XG4gICAgICBmYWN0b3IgPSAoYVtpICsgMV1baV0gPiAwKSA/IC0xIDogMTtcbiAgICAgIGFscGhhID0gZmFjdG9yICogTWF0aC5zcXJ0KGFscGhhKTtcbiAgICAgIHIgPSBNYXRoLnNxcnQoKCgoYWxwaGEgKiBhbHBoYSkgLSBhW2kgKyAxXVtpXSAqIGFscGhhKSAvIDIpKTtcbiAgICAgIHcgPSBqU3RhdC56ZXJvcyhtLCAxKTtcbiAgICAgIHdbaSArIDFdWzBdID0gKGFbaSArIDFdW2ldIC0gYWxwaGEpIC8gKDIgKiByKTtcbiAgICAgIGZvciAoayA9IGkgKyAyOyBrIDwgbTsgaysrKSB3W2tdWzBdID0gYVtrXVtpXSAvICgyICogcik7XG4gICAgICBwID0galN0YXQuc3VidHJhY3QoalN0YXQuaWRlbnRpdHkobSwgbiksXG4gICAgICAgICAgalN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkodywgalN0YXQudHJhbnNwb3NlKHcpKSwgMikpO1xuICAgICAgYSA9IGpTdGF0Lm11bHRpcGx5KHAsIGpTdGF0Lm11bHRpcGx5KGEsIHApKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH0sXG5cbiAgLy8gQSAtPiBbUSxSXVxuICAvLyBRIGlzIG9ydGhvZ29uYWwgbWF0cml4XG4gIC8vIFIgaXMgdXBwZXIgdHJpYW5ndWxhclxuICBRUjogKGZ1bmN0aW9uKCkge1xuICAgIC8vIHggLT4gUVxuICAgIC8vIGZpbmQgYSBvcnRob2dvbmFsIG1hdHJpeCBRIHN0LlxuICAgIC8vIFF4PXlcbiAgICAvLyB5IGlzIFt8fHh8fCwwLDAsLi4uXVxuXG4gICAgLy8gcXVpY2sgcmVmXG4gICAgdmFyIHN1bSAgID0galN0YXQuc3VtO1xuICAgIHZhciByYW5nZSA9IGpTdGF0LmFyYW5nZTtcblxuICAgIGZ1bmN0aW9uIHFyMih4KSB7XG4gICAgICAvLyBxdWljayBpbXBsZXRhdGlvblxuICAgICAgLy8gaHR0cHM6Ly93d3cuc3RhdC53aXNjLmVkdS9+bGFyZ2V0L21hdGg0OTYvcXIuaHRtbFxuXG4gICAgICB2YXIgbiA9IHgubGVuZ3RoO1xuICAgICAgdmFyIHAgPSB4WzBdLmxlbmd0aDtcblxuICAgICAgdmFyIHIgPSBqU3RhdC56ZXJvcyhwLCBwKTtcbiAgICAgIHggPSBqU3RhdC5jb3B5KHgpO1xuXG4gICAgICB2YXIgaSxqLGs7XG4gICAgICBmb3IoaiA9IDA7IGogPCBwOyBqKyspe1xuICAgICAgICByW2pdW2pdID0gTWF0aC5zcXJ0KHN1bShyYW5nZShuKS5tYXAoZnVuY3Rpb24oaSl7XG4gICAgICAgICAgcmV0dXJuIHhbaV1bal0gKiB4W2ldW2pdO1xuICAgICAgICB9KSkpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspe1xuICAgICAgICAgIHhbaV1bal0gPSB4W2ldW2pdIC8gcltqXVtqXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoayA9IGorMTsgayA8IHA7IGsrKyl7XG4gICAgICAgICAgcltqXVtrXSA9IHN1bShyYW5nZShuKS5tYXAoZnVuY3Rpb24oaSl7XG4gICAgICAgICAgICByZXR1cm4geFtpXVtqXSAqIHhbaV1ba107XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGZvcihpID0gMDsgaSA8IG47IGkrKyl7XG4gICAgICAgICAgICB4W2ldW2tdID0geFtpXVtrXSAtIHhbaV1bal0qcltqXVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbeCwgcl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHFyMjtcbiAgfSgpKSxcblxuICBsc3RzcTogKGZ1bmN0aW9uKCkge1xuICAgIC8vIHNvbHZlIGxlYXN0IHNxdWFyZCBwcm9ibGVtIGZvciBBeD1iIGFzIFFSIGRlY29tcG9zaXRpb24gd2F5IGlmIGIgaXNcbiAgICAvLyBbW2IxXSxbYjJdLFtiM11dIGZvcm0gd2lsbCByZXR1cm4gW1t4MV0sW3gyXSxbeDNdXSBhcnJheSBmb3JtIHNvbHV0aW9uXG4gICAgLy8gZWxzZSBiIGlzIFtiMSxiMixiM10gZm9ybSB3aWxsIHJldHVybiBbeDEseDIseDNdIGFycmF5IGZvcm0gc29sdXRpb25cbiAgICBmdW5jdGlvbiBSX0koQSkge1xuICAgICAgQSA9IGpTdGF0LmNvcHkoQSk7XG4gICAgICB2YXIgc2l6ZSA9IEEubGVuZ3RoO1xuICAgICAgdmFyIEkgPSBqU3RhdC5pZGVudGl0eShzaXplKTtcbiAgICAgIGpTdGF0LmFyYW5nZShzaXplIC0gMSwgLTEsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgalN0YXQuc2xpY2VBc3NpZ24oXG4gICAgICAgICAgICBJLCB7IHJvdzogaSB9LCBqU3RhdC5kaXZpZGUoalN0YXQuc2xpY2UoSSwgeyByb3c6IGkgfSksIEFbaV1baV0pKTtcbiAgICAgICAgalN0YXQuc2xpY2VBc3NpZ24oXG4gICAgICAgICAgICBBLCB7IHJvdzogaSB9LCBqU3RhdC5kaXZpZGUoalN0YXQuc2xpY2UoQSwgeyByb3c6IGkgfSksIEFbaV1baV0pKTtcbiAgICAgICAgalN0YXQuYXJhbmdlKGkpLmZvckVhY2goZnVuY3Rpb24oaikge1xuICAgICAgICAgIHZhciBjID0galN0YXQubXVsdGlwbHkoQVtqXVtpXSwgLTEpO1xuICAgICAgICAgIHZhciBBaiA9IGpTdGF0LnNsaWNlKEEsIHsgcm93OiBqIH0pO1xuICAgICAgICAgIHZhciBjQWkgPSBqU3RhdC5tdWx0aXBseShqU3RhdC5zbGljZShBLCB7IHJvdzogaSB9KSwgYyk7XG4gICAgICAgICAgalN0YXQuc2xpY2VBc3NpZ24oQSwgeyByb3c6IGogfSwgalN0YXQuYWRkKEFqLCBjQWkpKTtcbiAgICAgICAgICB2YXIgSWogPSBqU3RhdC5zbGljZShJLCB7IHJvdzogaiB9KTtcbiAgICAgICAgICB2YXIgY0lpID0galN0YXQubXVsdGlwbHkoalN0YXQuc2xpY2UoSSwgeyByb3c6IGkgfSksIGMpO1xuICAgICAgICAgIGpTdGF0LnNsaWNlQXNzaWduKEksIHsgcm93OiBqIH0sIGpTdGF0LmFkZChJaiwgY0lpKSk7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBJO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHFyX3NvbHZlKEEsIGIpe1xuICAgICAgdmFyIGFycmF5X21vZGUgPSBmYWxzZTtcbiAgICAgIGlmIChiWzBdLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFtjMSxjMixjM10gbW9kZVxuICAgICAgICBiID0gYi5tYXAoZnVuY3Rpb24oeCl7IHJldHVybiBbeF0gfSk7XG4gICAgICAgIGFycmF5X21vZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIFFSID0galN0YXQuUVIoQSk7XG4gICAgICB2YXIgUSA9IFFSWzBdO1xuICAgICAgdmFyIFIgPSBRUlsxXTtcbiAgICAgIHZhciBhdHRycyA9IEFbMF0ubGVuZ3RoO1xuICAgICAgdmFyIFExID0galN0YXQuc2xpY2UoUSx7Y29sOntlbmQ6YXR0cnN9fSk7XG4gICAgICB2YXIgUjEgPSBqU3RhdC5zbGljZShSLHtyb3c6e2VuZDphdHRyc319KTtcbiAgICAgIHZhciBSSSA9IFJfSShSMSk7XG4gICAgICB2YXIgUTIgPSBqU3RhdC50cmFuc3Bvc2UoUTEpO1xuXG4gICAgICBpZihRMlswXS5sZW5ndGggPT09IHVuZGVmaW5lZCl7XG4gICAgICAgIFEyID0gW1EyXTsgLy8gVGhlIGNvbmZ1c2luZyBqU3RhdC5tdWx0aWZseSBpbXBsZW1lbnRhdGlvbiB0aHJlYXQgbmF0dXJlIHByb2Nlc3MgYWdhaW4uXG4gICAgICB9XG5cbiAgICAgIHZhciB4ID0galN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkoUkksIFEyKSwgYik7XG5cbiAgICAgIGlmKHgubGVuZ3RoID09PSB1bmRlZmluZWQpe1xuICAgICAgICB4ID0gW1t4XV07IC8vIFRoZSBjb25mdXNpbmcgalN0YXQubXVsdGlmbHkgaW1wbGVtZW50YXRpb24gdGhyZWF0IG5hdHVyZSBwcm9jZXNzIGFnYWluLlxuICAgICAgfVxuXG5cbiAgICAgIGlmIChhcnJheV9tb2RlKVxuICAgICAgICByZXR1cm4geC5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpWzBdIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHFyX3NvbHZlO1xuICB9KCkpLFxuXG4gIGphY29iaTogZnVuY3Rpb24gamFjb2JpKGEpIHtcbiAgICB2YXIgY29uZGl0aW9uID0gMTtcbiAgICB2YXIgbiA9IGEubGVuZ3RoO1xuICAgIHZhciBlID0galN0YXQuaWRlbnRpdHkobiwgbik7XG4gICAgdmFyIGV2ID0gW107XG4gICAgdmFyIGIsIGksIGosIHAsIHEsIG1heGltLCB0aGV0YSwgcztcbiAgICAvLyBjb25kaXRpb24gPT09IDEgb25seSBpZiB0b2xlcmFuY2UgaXMgbm90IHJlYWNoZWRcbiAgICB3aGlsZSAoY29uZGl0aW9uID09PSAxKSB7XG4gICAgICBtYXhpbSA9IGFbMF1bMV07XG4gICAgICBwID0gMDtcbiAgICAgIHEgPSAxO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgaWYgKGkgIT0gaikge1xuICAgICAgICAgICAgaWYgKG1heGltIDwgTWF0aC5hYnMoYVtpXVtqXSkpIHtcbiAgICAgICAgICAgICAgbWF4aW0gPSBNYXRoLmFicyhhW2ldW2pdKTtcbiAgICAgICAgICAgICAgcCA9IGk7XG4gICAgICAgICAgICAgIHEgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGFbcF1bcF0gPT09IGFbcV1bcV0pXG4gICAgICAgIHRoZXRhID0gKGFbcF1bcV0gPiAwKSA/IE1hdGguUEkgLyA0IDogLU1hdGguUEkgLyA0O1xuICAgICAgZWxzZVxuICAgICAgICB0aGV0YSA9IE1hdGguYXRhbigyICogYVtwXVtxXSAvIChhW3BdW3BdIC0gYVtxXVtxXSkpIC8gMjtcbiAgICAgIHMgPSBqU3RhdC5pZGVudGl0eShuLCBuKTtcbiAgICAgIHNbcF1bcF0gPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICBzW3BdW3FdID0gLU1hdGguc2luKHRoZXRhKTtcbiAgICAgIHNbcV1bcF0gPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgICBzW3FdW3FdID0gTWF0aC5jb3ModGhldGEpO1xuICAgICAgLy8gZWlnZW4gdmVjdG9yIG1hdHJpeFxuICAgICAgZSA9IGpTdGF0Lm11bHRpcGx5KGUsIHMpO1xuICAgICAgYiA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihzKSwgYSksIHMpO1xuICAgICAgYSA9IGI7XG4gICAgICBjb25kaXRpb24gPSAwO1xuICAgICAgZm9yIChpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgaWYgKGkgIT0gaiAmJiBNYXRoLmFicyhhW2ldW2pdKSA+IDAuMDAxKSB7XG4gICAgICAgICAgICBjb25kaXRpb24gPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBldi5wdXNoKGFbaV1baV0pO1xuICAgIC8vcmV0dXJucyBib3RoIHRoZSBlaWdlbnZhbHVlIGFuZCBlaWdlbm1hdHJpeFxuICAgIHJldHVybiBbZSwgZXZdO1xuICB9LFxuXG4gIHJ1bmdla3V0dGE6IGZ1bmN0aW9uIHJ1bmdla3V0dGEoZiwgaCwgcCwgdF9qLCB1X2osIG9yZGVyKSB7XG4gICAgdmFyIGsxLCBrMiwgdV9qMSwgazMsIGs0O1xuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgd2hpbGUgKHRfaiA8PSBwKSB7XG4gICAgICAgIGsxID0gaCAqIGYodF9qLCB1X2opO1xuICAgICAgICBrMiA9IGggKiBmKHRfaiArIGgsIHVfaiArIGsxKTtcbiAgICAgICAgdV9qMSA9IHVfaiArIChrMSArIGsyKSAvIDI7XG4gICAgICAgIHVfaiA9IHVfajE7XG4gICAgICAgIHRfaiA9IHRfaiArIGg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcmRlciA9PT0gNCkge1xuICAgICAgd2hpbGUgKHRfaiA8PSBwKSB7XG4gICAgICAgIGsxID0gaCAqIGYodF9qLCB1X2opO1xuICAgICAgICBrMiA9IGggKiBmKHRfaiArIGggLyAyLCB1X2ogKyBrMSAvIDIpO1xuICAgICAgICBrMyA9IGggKiBmKHRfaiArIGggLyAyLCB1X2ogKyBrMiAvIDIpO1xuICAgICAgICBrNCA9IGggKiBmKHRfaiAraCwgdV9qICsgazMpO1xuICAgICAgICB1X2oxID0gdV9qICsgKGsxICsgMiAqIGsyICsgMiAqIGszICsgazQpIC8gNjtcbiAgICAgICAgdV9qID0gdV9qMTtcbiAgICAgICAgdF9qID0gdF9qICsgaDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVfajtcbiAgfSxcblxuICByb21iZXJnOiBmdW5jdGlvbiByb21iZXJnKGYsIGEsIGIsIG9yZGVyKSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBoID0gKGIgLSBhKSAvIDI7XG4gICAgdmFyIHggPSBbXTtcbiAgICB2YXIgaDEgPSBbXTtcbiAgICB2YXIgZyA9IFtdO1xuICAgIHZhciBtLCBhMSwgaiwgaywgSTtcbiAgICB3aGlsZSAoaSA8IG9yZGVyIC8gMikge1xuICAgICAgSSA9IGYoYSk7XG4gICAgICBmb3IgKGogPSBhLCBrID0gMDsgaiA8PSBiOyBqID0gaiArIGgsIGsrKykgeFtrXSA9IGo7XG4gICAgICBtID0geC5sZW5ndGg7XG4gICAgICBmb3IgKGogPSAxOyBqIDwgbSAtIDE7IGorKykge1xuICAgICAgICBJICs9ICgoKGogJSAyKSAhPT0gMCkgPyA0IDogMikgKiBmKHhbal0pO1xuICAgICAgfVxuICAgICAgSSA9IChoIC8gMykgKiAoSSArIGYoYikpO1xuICAgICAgZ1tpXSA9IEk7XG4gICAgICBoIC89IDI7XG4gICAgICBpKys7XG4gICAgfVxuICAgIGExID0gZy5sZW5ndGg7XG4gICAgbSA9IDE7XG4gICAgd2hpbGUgKGExICE9PSAxKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgYTEgLSAxOyBqKyspXG4gICAgICBoMVtqXSA9ICgoTWF0aC5wb3coNCwgbSkpICogZ1tqICsgMV0gLSBnW2pdKSAvIChNYXRoLnBvdyg0LCBtKSAtIDEpO1xuICAgICAgYTEgPSBoMS5sZW5ndGg7XG4gICAgICBnID0gaDE7XG4gICAgICBoMSA9IFtdO1xuICAgICAgbSsrO1xuICAgIH1cbiAgICByZXR1cm4gZztcbiAgfSxcblxuICByaWNoYXJkc29uOiBmdW5jdGlvbiByaWNoYXJkc29uKFgsIGYsIHgsIGgpIHtcbiAgICBmdW5jdGlvbiBwb3MoWCwgeCkge1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIG4gPSBYLmxlbmd0aDtcbiAgICAgIHZhciBwO1xuICAgICAgZm9yICg7IGkgPCBuOyBpKyspXG4gICAgICAgIGlmIChYW2ldID09PSB4KSBwID0gaTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICB2YXIgaF9taW4gPSBNYXRoLmFicyh4IC0gWFtwb3MoWCwgeCkgKyAxXSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBnID0gW107XG4gICAgdmFyIGgxID0gW107XG4gICAgdmFyIHkxLCB5MiwgbSwgYSwgajtcbiAgICB3aGlsZSAoaCA+PSBoX21pbikge1xuICAgICAgeTEgPSBwb3MoWCwgeCArIGgpO1xuICAgICAgeTIgPSBwb3MoWCwgeCk7XG4gICAgICBnW2ldID0gKGZbeTFdIC0gMiAqIGZbeTJdICsgZlsyICogeTIgLSB5MV0pIC8gKGggKiBoKTtcbiAgICAgIGggLz0gMjtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgYSA9IGcubGVuZ3RoO1xuICAgIG0gPSAxO1xuICAgIHdoaWxlIChhICE9IDEpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBhIC0gMTsgaisrKVxuICAgICAgICBoMVtqXSA9ICgoTWF0aC5wb3coNCwgbSkpICogZ1tqICsgMV0gLSBnW2pdKSAvIChNYXRoLnBvdyg0LCBtKSAtIDEpO1xuICAgICAgYSA9IGgxLmxlbmd0aDtcbiAgICAgIGcgPSBoMTtcbiAgICAgIGgxID0gW107XG4gICAgICBtKys7XG4gICAgfVxuICAgIHJldHVybiBnO1xuICB9LFxuXG4gIHNpbXBzb246IGZ1bmN0aW9uIHNpbXBzb24oZiwgYSwgYiwgbikge1xuICAgIHZhciBoID0gKGIgLSBhKSAvIG47XG4gICAgdmFyIEkgPSBmKGEpO1xuICAgIHZhciB4ID0gW107XG4gICAgdmFyIGogPSBhO1xuICAgIHZhciBrID0gMDtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIG07XG4gICAgZm9yICg7IGogPD0gYjsgaiA9IGogKyBoLCBrKyspXG4gICAgICB4W2tdID0gajtcbiAgICBtID0geC5sZW5ndGg7XG4gICAgZm9yICg7IGkgPCBtIC0gMTsgaSsrKSB7XG4gICAgICBJICs9ICgoaSAlIDIgIT09IDApID8gNCA6IDIpICogZih4W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIChoIC8gMykgKiAoSSArIGYoYikpO1xuICB9LFxuXG4gIGhlcm1pdGU6IGZ1bmN0aW9uIGhlcm1pdGUoWCwgRiwgZEYsIHZhbHVlKSB7XG4gICAgdmFyIG4gPSBYLmxlbmd0aDtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBsID0gW107XG4gICAgdmFyIGRsID0gW107XG4gICAgdmFyIEEgPSBbXTtcbiAgICB2YXIgQiA9IFtdO1xuICAgIHZhciBqO1xuICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBsW2ldID0gMTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgIT0gaikgbFtpXSAqPSAodmFsdWUgLSBYW2pdKSAvIChYW2ldIC0gWFtqXSk7XG4gICAgICB9XG4gICAgICBkbFtpXSA9IDA7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChpICE9IGopIGRsW2ldICs9IDEgLyAoWCBbaV0gLSBYW2pdKTtcbiAgICAgIH1cbiAgICAgIEFbaV0gPSAoMSAtIDIgKiAodmFsdWUgLSBYW2ldKSAqIGRsW2ldKSAqIChsW2ldICogbFtpXSk7XG4gICAgICBCW2ldID0gKHZhbHVlIC0gWFtpXSkgKiAobFtpXSAqIGxbaV0pO1xuICAgICAgcCArPSAoQVtpXSAqIEZbaV0gKyBCW2ldICogZEZbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSxcblxuICBsYWdyYW5nZTogZnVuY3Rpb24gbGFncmFuZ2UoWCwgRiwgdmFsdWUpIHtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBqLCBsO1xuICAgIHZhciBuID0gWC5sZW5ndGg7XG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGwgPSBGW2ldO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgbGFncmFuZ2UgcG9seW5vbWlhbCBMX2lcbiAgICAgICAgaWYgKGkgIT0gaikgbCAqPSAodmFsdWUgLSBYW2pdKSAvIChYW2ldIC0gWFtqXSk7XG4gICAgICB9XG4gICAgICAvLyBhZGRpbmcgdGhlIGxhZ3JhbmdlIHBvbHlub21pYWxzIGZvdW5kIGFib3ZlXG4gICAgICBwICs9IGw7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIGN1YmljX3NwbGluZTogZnVuY3Rpb24gY3ViaWNfc3BsaW5lKFgsIEYsIHZhbHVlKSB7XG4gICAgdmFyIG4gPSBYLmxlbmd0aDtcbiAgICB2YXIgaSA9IDAsIGo7XG4gICAgdmFyIEEgPSBbXTtcbiAgICB2YXIgQiA9IFtdO1xuICAgIHZhciBhbHBoYSA9IFtdO1xuICAgIHZhciBjID0gW107XG4gICAgdmFyIGggPSBbXTtcbiAgICB2YXIgYiA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgZm9yICg7IGkgPCBuIC0gMTsgaSsrKVxuICAgICAgaFtpXSA9IFhbaSArIDFdIC0gWFtpXTtcbiAgICBhbHBoYVswXSA9IDA7XG4gICAgZm9yIChpID0gMTsgaSA8IG4gLSAxOyBpKyspIHtcbiAgICAgIGFscGhhW2ldID0gKDMgLyBoW2ldKSAqIChGW2kgKyAxXSAtIEZbaV0pIC1cbiAgICAgICAgICAoMyAvIGhbaS0xXSkgKiAoRltpXSAtIEZbaS0xXSk7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgICBBW2ldID0gW107XG4gICAgICBCW2ldID0gW107XG4gICAgICBBW2ldW2ktMV0gPSBoW2ktMV07XG4gICAgICBBW2ldW2ldID0gMiAqIChoW2kgLSAxXSArIGhbaV0pO1xuICAgICAgQVtpXVtpKzFdID0gaFtpXTtcbiAgICAgIEJbaV1bMF0gPSBhbHBoYVtpXTtcbiAgICB9XG4gICAgYyA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihBKSwgQik7XG4gICAgZm9yIChqID0gMDsgaiA8IG4gLSAxOyBqKyspIHtcbiAgICAgIGJbal0gPSAoRltqICsgMV0gLSBGW2pdKSAvIGhbal0gLSBoW2pdICogKGNbaiArIDFdWzBdICsgMiAqIGNbal1bMF0pIC8gMztcbiAgICAgIGRbal0gPSAoY1tqICsgMV1bMF0gLSBjW2pdWzBdKSAvICgzICogaFtqXSk7XG4gICAgfVxuICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgIGlmIChYW2pdID4gdmFsdWUpIGJyZWFrO1xuICAgIH1cbiAgICBqIC09IDE7XG4gICAgcmV0dXJuIEZbal0gKyAodmFsdWUgLSBYW2pdKSAqIGJbal0gKyBqU3RhdC5zcSh2YWx1ZS1YW2pdKSAqXG4gICAgICAgIGNbal0gKyAodmFsdWUgLSBYW2pdKSAqIGpTdGF0LnNxKHZhbHVlIC0gWFtqXSkgKiBkW2pdO1xuICB9LFxuXG4gIGdhdXNzX3F1YWRyYXR1cmU6IGZ1bmN0aW9uIGdhdXNzX3F1YWRyYXR1cmUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnYXVzc19xdWFkcmF0dXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICBQQ0E6IGZ1bmN0aW9uIFBDQShYKSB7XG4gICAgdmFyIG0gPSBYLmxlbmd0aDtcbiAgICB2YXIgbiA9IFhbMF0ubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaiwgdGVtcDE7XG4gICAgdmFyIHUgPSBbXTtcbiAgICB2YXIgRCA9IFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgdGVtcDIgPSBbXTtcbiAgICB2YXIgWSA9IFtdO1xuICAgIHZhciBCdCA9IFtdO1xuICAgIHZhciBCID0gW107XG4gICAgdmFyIEMgPSBbXTtcbiAgICB2YXIgViA9IFtdO1xuICAgIHZhciBWdCA9IFtdO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIHVbaV0gPSBqU3RhdC5zdW0oWFtpXSkgLyBuO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBCW2ldID0gW107XG4gICAgICBmb3IoaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgQltpXVtqXSA9IFhbal1baV0gLSB1W2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBCID0galN0YXQudHJhbnNwb3NlKEIpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIENbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgQ1tpXVtqXSA9IChqU3RhdC5kb3QoW0JbaV1dLCBbQltqXV0pKSAvIChuIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IGpTdGF0LmphY29iaShDKTtcbiAgICBWID0gcmVzdWx0WzBdO1xuICAgIEQgPSByZXN1bHRbMV07XG4gICAgVnQgPSBqU3RhdC50cmFuc3Bvc2UoVik7XG4gICAgZm9yIChpID0gMDsgaSA8IEQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IGk7IGogPCBELmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmKERbaV0gPCBEW2pdKSAge1xuICAgICAgICAgIHRlbXAxID0gRFtpXTtcbiAgICAgICAgICBEW2ldID0gRFtqXTtcbiAgICAgICAgICBEW2pdID0gdGVtcDE7XG4gICAgICAgICAgdGVtcDIgPSBWdFtpXTtcbiAgICAgICAgICBWdFtpXSA9IFZ0W2pdO1xuICAgICAgICAgIFZ0W2pdID0gdGVtcDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQnQgPSBqU3RhdC50cmFuc3Bvc2UoQik7XG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgWVtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IEJ0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIFlbaV1bal0gPSBqU3RhdC5kb3QoW1Z0W2ldXSwgW0J0W2pdXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbWCwgRCwgVnQsIFldO1xuICB9XG59KTtcblxuLy8gZXh0ZW5kIGpTdGF0LmZuIHdpdGggbWV0aG9kcyB0aGF0IHJlcXVpcmUgb25lIGFyZ3VtZW50XG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalN0YXQuZm5bcGFzc2Z1bmNdID0gZnVuY3Rpb24oYXJnLCBmdW5jKSB7XG4gICAgICB2YXIgdG1wdGhpcyA9IHRoaXM7XG4gICAgICAvLyBjaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHRtcHRoaXMsIGpTdGF0LmZuW3Bhc3NmdW5jXS5jYWxsKHRtcHRoaXMsIGFyZykpO1xuICAgICAgICB9LCAxNSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBqU3RhdFtwYXNzZnVuY10odGhpcywgYXJnKSA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBqU3RhdFtwYXNzZnVuY10odGhpcywgYXJnKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGpTdGF0KGpTdGF0W3Bhc3NmdW5jXSh0aGlzLCBhcmcpKTtcbiAgICB9O1xuICB9KGZ1bmNzW2ldKSk7XG59KCdhZGQgZGl2aWRlIG11bHRpcGx5IHN1YnRyYWN0IGRvdCBwb3cgZXhwIGxvZyBhYnMgbm9ybSBhbmdsZScuc3BsaXQoJyAnKSkpO1xuXG59KGpTdGF0LCBNYXRoKSk7XG4oZnVuY3Rpb24oalN0YXQsIE1hdGgpIHtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgaXNOdW1iZXIgPSBqU3RhdC51dGlscy5pc051bWJlcjtcbnZhciBpc0FycmF5ID0galN0YXQudXRpbHMuaXNBcnJheTtcblxuLy8gZmxhZz09dHJ1ZSBkZW5vdGVzIHVzZSBvZiBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uXG4vLyBaIFN0YXRpc3RpY3NcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIDIgZGlmZmVyZW50IHBhcmFtZXRlciBsaXN0czpcbiAgLy8gKHZhbHVlLCBtZWFuLCBzZClcbiAgLy8gKHZhbHVlLCBhcnJheSwgZmxhZylcbiAgenNjb3JlOiBmdW5jdGlvbiB6c2NvcmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKGlzTnVtYmVyKGFyZ3NbMV0pKSB7XG4gICAgICByZXR1cm4gKGFyZ3NbMF0gLSBhcmdzWzFdKSAvIGFyZ3NbMl07XG4gICAgfVxuICAgIHJldHVybiAoYXJnc1swXSAtIGpTdGF0Lm1lYW4oYXJnc1sxXSkpIC8galN0YXQuc3RkZXYoYXJnc1sxXSwgYXJnc1syXSk7XG4gIH0sXG5cbiAgLy8gMyBkaWZmZXJlbnQgcGFyYW10ZXIgbGlzdHM6XG4gIC8vICh2YWx1ZSwgbWVhbiwgc2QsIHNpZGVzKVxuICAvLyAoenNjb3JlLCBzaWRlcylcbiAgLy8gKHZhbHVlLCBhcnJheSwgc2lkZXMsIGZsYWcpXG4gIHp0ZXN0OiBmdW5jdGlvbiB6dGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB2YXIgejtcbiAgICBpZiAoaXNBcnJheShhcmdzWzFdKSkge1xuICAgICAgLy8gKHZhbHVlLCBhcnJheSwgc2lkZXMsIGZsYWcpXG4gICAgICB6ID0galN0YXQuenNjb3JlKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzNdKTtcbiAgICAgIHJldHVybiAoYXJnc1syXSA9PT0gMSkgP1xuICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksIDAsIDEpKSA6XG4gICAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC1NYXRoLmFicyh6KSwgMCwgMSkqMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgLy8gKHZhbHVlLCBtZWFuLCBzZCwgc2lkZXMpXG4gICAgICAgIHogPSBqU3RhdC56c2NvcmUoYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0pO1xuICAgICAgICByZXR1cm4gKGFyZ3NbM10gPT09IDEpID9cbiAgICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksMCwxKSkgOlxuICAgICAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC1NYXRoLmFicyh6KSwwLDEpKiAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICh6c2NvcmUsIHNpZGVzKVxuICAgICAgICB6ID0gYXJnc1swXTtcbiAgICAgICAgcmV0dXJuIChhcmdzWzFdID09PSAxKSA/XG4gICAgICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLU1hdGguYWJzKHopLDAsMSkpIDpcbiAgICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksMCwxKSoyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5qU3RhdC5leHRlbmQoalN0YXQuZm4sIHtcbiAgenNjb3JlOiBmdW5jdGlvbiB6c2NvcmUodmFsdWUsIGZsYWcpIHtcbiAgICByZXR1cm4gKHZhbHVlIC0gdGhpcy5tZWFuKCkpIC8gdGhpcy5zdGRldihmbGFnKTtcbiAgfSxcblxuICB6dGVzdDogZnVuY3Rpb24genRlc3QodmFsdWUsIHNpZGVzLCBmbGFnKSB7XG4gICAgdmFyIHpzY29yZSA9IE1hdGguYWJzKHRoaXMuenNjb3JlKHZhbHVlLCBmbGFnKSk7XG4gICAgcmV0dXJuIChzaWRlcyA9PT0gMSkgP1xuICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLXpzY29yZSwgMCwgMSkpIDpcbiAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC16c2NvcmUsIDAsIDEpICogMik7XG4gIH1cbn0pO1xuXG4vLyBUIFN0YXRpc3RpY3NcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIDIgcGFyYW1ldGVyIGxpc3RzXG4gIC8vICh2YWx1ZSwgbWVhbiwgc2QsIG4pXG4gIC8vICh2YWx1ZSwgYXJyYXkpXG4gIHRzY29yZTogZnVuY3Rpb24gdHNjb3JlKCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIHJldHVybiAoYXJncy5sZW5ndGggPT09IDQpID9cbiAgICAgICgoYXJnc1swXSAtIGFyZ3NbMV0pIC8gKGFyZ3NbMl0gLyBNYXRoLnNxcnQoYXJnc1szXSkpKSA6XG4gICAgICAoKGFyZ3NbMF0gLSBqU3RhdC5tZWFuKGFyZ3NbMV0pKSAvXG4gICAgICAgKGpTdGF0LnN0ZGV2KGFyZ3NbMV0sIHRydWUpIC8gTWF0aC5zcXJ0KGFyZ3NbMV0ubGVuZ3RoKSkpO1xuICB9LFxuXG4gIC8vIDMgZGlmZmVyZW50IHBhcmFtdGVyIGxpc3RzOlxuICAvLyAodmFsdWUsIG1lYW4sIHNkLCBuLCBzaWRlcylcbiAgLy8gKHRzY29yZSwgbiwgc2lkZXMpXG4gIC8vICh2YWx1ZSwgYXJyYXksIHNpZGVzKVxuICB0dGVzdDogZnVuY3Rpb24gdHRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIHRzY29yZTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDUpIHtcbiAgICAgIHRzY29yZSA9IE1hdGguYWJzKGpTdGF0LnRzY29yZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKSk7XG4gICAgICByZXR1cm4gKGFyZ3NbNF0gPT09IDEpID9cbiAgICAgICAgKGpTdGF0LnN0dWRlbnR0LmNkZigtdHNjb3JlLCBhcmdzWzNdLTEpKSA6XG4gICAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1szXS0xKSoyKTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKGFyZ3NbMV0pKSB7XG4gICAgICB0c2NvcmUgPSBNYXRoLmFicyhhcmdzWzBdKVxuICAgICAgcmV0dXJuIChhcmdzWzJdID09IDEpID9cbiAgICAgICAgKGpTdGF0LnN0dWRlbnR0LmNkZigtdHNjb3JlLCBhcmdzWzFdLTEpKSA6XG4gICAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS0xKSAqIDIpO1xuICAgIH1cbiAgICB0c2NvcmUgPSBNYXRoLmFicyhqU3RhdC50c2NvcmUoYXJnc1swXSwgYXJnc1sxXSkpXG4gICAgcmV0dXJuIChhcmdzWzJdID09IDEpID9cbiAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS5sZW5ndGgtMSkpIDpcbiAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS5sZW5ndGgtMSkgKiAyKTtcbiAgfVxufSk7XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICB0c2NvcmU6IGZ1bmN0aW9uIHRzY29yZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgLSB0aGlzLm1lYW4oKSkgLyAodGhpcy5zdGRldih0cnVlKSAvIE1hdGguc3FydCh0aGlzLmNvbHMoKSkpO1xuICB9LFxuXG4gIHR0ZXN0OiBmdW5jdGlvbiB0dGVzdCh2YWx1ZSwgc2lkZXMpIHtcbiAgICByZXR1cm4gKHNpZGVzID09PSAxKSA/XG4gICAgICAoMSAtIGpTdGF0LnN0dWRlbnR0LmNkZihNYXRoLmFicyh0aGlzLnRzY29yZSh2YWx1ZSkpLCB0aGlzLmNvbHMoKS0xKSkgOlxuICAgICAgKGpTdGF0LnN0dWRlbnR0LmNkZigtTWF0aC5hYnModGhpcy50c2NvcmUodmFsdWUpKSwgdGhpcy5jb2xzKCktMSkqMik7XG4gIH1cbn0pO1xuXG4vLyBGIFN0YXRpc3RpY3NcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIFBhcmFtdGVyIGxpc3QgaXMgYXMgZm9sbG93czpcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBhcnJheTMsIC4uLilcbiAgLy8gb3IgaXQgaXMgYW4gYXJyYXkgb2YgYXJyYXlzXG4gIC8vIGFycmF5IG9mIGFycmF5cyBjb252ZXJzaW9uXG4gIGFub3ZhZnNjb3JlOiBmdW5jdGlvbiBhbm92YWZzY29yZSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBleHBWYXIsIHNhbXBsZSwgc2FtcE1lYW4sIHNhbXBTYW1wTWVhbiwgdG1wYXJncywgdW5leHBWYXIsIGksIGo7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICB0bXBhcmdzID0gbmV3IEFycmF5KGFyZ3NbMF0ubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzWzBdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRtcGFyZ3NbaV0gPSBhcmdzWzBdW2ldO1xuICAgICAgfVxuICAgICAgYXJncyA9IHRtcGFyZ3M7XG4gICAgfVxuICAgIC8vIEJ1aWxkcyBzYW1wbGUgYXJyYXlcbiAgICBzYW1wbGUgPSBuZXcgQXJyYXkoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgc2FtcGxlID0gc2FtcGxlLmNvbmNhdChhcmdzW2ldKTtcbiAgICB9XG4gICAgc2FtcE1lYW4gPSBqU3RhdC5tZWFuKHNhbXBsZSk7XG4gICAgLy8gQ29tcHV0ZXMgdGhlIGV4cGxhaW5lZCB2YXJpYW5jZVxuICAgIGV4cFZhciA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cFZhciA9IGV4cFZhciArIGFyZ3NbaV0ubGVuZ3RoICogTWF0aC5wb3coalN0YXQubWVhbihhcmdzW2ldKSAtIHNhbXBNZWFuLCAyKTtcbiAgICB9XG4gICAgZXhwVmFyIC89IChhcmdzLmxlbmd0aCAtIDEpO1xuICAgIC8vIENvbXB1dGVzIHVuZXhwbGFpbmVkIHZhcmlhbmNlXG4gICAgdW5leHBWYXIgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzYW1wU2FtcE1lYW4gPSBqU3RhdC5tZWFuKGFyZ3NbaV0pO1xuICAgICAgZm9yIChqID0gMDsgaiA8IGFyZ3NbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdW5leHBWYXIgKz0gTWF0aC5wb3coYXJnc1tpXVtqXSAtIHNhbXBTYW1wTWVhbiwgMik7XG4gICAgICB9XG4gICAgfVxuICAgIHVuZXhwVmFyIC89IChzYW1wbGUubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHJldHVybiBleHBWYXIgLyB1bmV4cFZhcjtcbiAgfSxcblxuICAvLyAyIGRpZmZlcmVudCBwYXJhbXRlciBzZXR1cHNcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBhcnJheTMsIC4uLilcbiAgLy8gKGFub3ZhZnNjb3JlLCBkZjEsIGRmMilcbiAgYW5vdmFmdGVzdDogZnVuY3Rpb24gYW5vdmFmdGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBkZjEsIGRmMiwgbiwgaTtcbiAgICBpZiAoaXNOdW1iZXIoYXJnc1swXSkpIHtcbiAgICAgIHJldHVybiAxIC0galN0YXQuY2VudHJhbEYuY2RmKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cbiAgICB2YXIgYW5vdmFmc2NvcmUgPSBqU3RhdC5hbm92YWZzY29yZShhcmdzKTtcbiAgICBkZjEgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgbiA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIG4gPSBuICsgYXJnc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIGRmMiA9IG4gLSBkZjEgLSAxO1xuICAgIHJldHVybiAxIC0galN0YXQuY2VudHJhbEYuY2RmKGFub3ZhZnNjb3JlLCBkZjEsIGRmMik7XG4gIH0sXG5cbiAgZnRlc3Q6IGZ1bmN0aW9uIGZ0ZXN0KGZzY29yZSwgZGYxLCBkZjIpIHtcbiAgICByZXR1cm4gMSAtIGpTdGF0LmNlbnRyYWxGLmNkZihmc2NvcmUsIGRmMSwgZGYyKTtcbiAgfVxufSk7XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICBhbm92YWZzY29yZTogZnVuY3Rpb24gYW5vdmFmc2NvcmUoKSB7XG4gICAgcmV0dXJuIGpTdGF0LmFub3ZhZnNjb3JlKHRoaXMudG9BcnJheSgpKTtcbiAgfSxcblxuICBhbm92YWZ0ZXM6IGZ1bmN0aW9uIGFub3ZhZnRlcygpIHtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG4gPSBuICsgdGhpc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBqU3RhdC5mdGVzdCh0aGlzLmFub3ZhZnNjb3JlKCksIHRoaXMubGVuZ3RoIC0gMSwgbiAtIHRoaXMubGVuZ3RoKTtcbiAgfVxufSk7XG5cbi8vIFR1a2V5J3MgcmFuZ2UgdGVzdFxualN0YXQuZXh0ZW5kKHtcbiAgLy8gMiBwYXJhbWV0ZXIgbGlzdHNcbiAgLy8gKG1lYW4xLCBtZWFuMiwgbjEsIG4yLCBzZClcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBzZClcbiAgcXNjb3JlOiBmdW5jdGlvbiBxc2NvcmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIG1lYW4xLCBtZWFuMiwgbjEsIG4yLCBzZDtcbiAgICBpZiAoaXNOdW1iZXIoYXJnc1swXSkpIHtcbiAgICAgICAgbWVhbjEgPSBhcmdzWzBdO1xuICAgICAgICBtZWFuMiA9IGFyZ3NbMV07XG4gICAgICAgIG4xID0gYXJnc1syXTtcbiAgICAgICAgbjIgPSBhcmdzWzNdO1xuICAgICAgICBzZCA9IGFyZ3NbNF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWVhbjEgPSBqU3RhdC5tZWFuKGFyZ3NbMF0pO1xuICAgICAgICBtZWFuMiA9IGpTdGF0Lm1lYW4oYXJnc1sxXSk7XG4gICAgICAgIG4xID0gYXJnc1swXS5sZW5ndGg7XG4gICAgICAgIG4yID0gYXJnc1sxXS5sZW5ndGg7XG4gICAgICAgIHNkID0gYXJnc1syXTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguYWJzKG1lYW4xIC0gbWVhbjIpIC8gKHNkICogTWF0aC5zcXJ0KCgxIC8gbjEgKyAxIC8gbjIpIC8gMikpO1xuICB9LFxuXG4gIC8vIDMgZGlmZmVyZW50IHBhcmFtZXRlciBsaXN0czpcbiAgLy8gKHFzY29yZSwgbiwgaylcbiAgLy8gKG1lYW4xLCBtZWFuMiwgbjEsIG4yLCBzZCwgbiwgaylcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBzZCwgbiwgaylcbiAgcXRlc3Q6IGZ1bmN0aW9uIHF0ZXN0KCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgdmFyIHFzY29yZTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgIHFzY29yZSA9IGFyZ3NbMF07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgxKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSA3KSB7XG4gICAgICBxc2NvcmUgPSBqU3RhdC5xc2NvcmUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBhcmdzID0gYXJncy5zbGljZSg1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXNjb3JlID0galN0YXQucXNjb3JlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgYXJncyA9IGFyZ3Muc2xpY2UoMyk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSBhcmdzWzBdO1xuICAgIHZhciBrID0gYXJnc1sxXTtcblxuICAgIHJldHVybiAxIC0galN0YXQudHVrZXkuY2RmKHFzY29yZSwgaywgbiAtIGspO1xuICB9LFxuXG4gIHR1a2V5aHNkOiBmdW5jdGlvbiB0dWtleWhzZChhcnJheXMpIHtcbiAgICB2YXIgc2QgPSBqU3RhdC5wb29sZWRzdGRldihhcnJheXMpO1xuICAgIHZhciBtZWFucyA9IGFycmF5cy5tYXAoZnVuY3Rpb24gKGFycikge3JldHVybiBqU3RhdC5tZWFuKGFycik7fSk7XG4gICAgdmFyIG4gPSBhcnJheXMucmVkdWNlKGZ1bmN0aW9uIChuLCBhcnIpIHtyZXR1cm4gbiArIGFyci5sZW5ndGg7fSwgMCk7XG5cbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGFycmF5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIHAgPSBqU3RhdC5xdGVzdChtZWFuc1tpXSwgbWVhbnNbal0sIGFycmF5c1tpXS5sZW5ndGgsIGFycmF5c1tqXS5sZW5ndGgsIHNkLCBuLCBhcnJheXMubGVuZ3RoKTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChbW2ksIGpdLCBwXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxufSk7XG5cbi8vIEVycm9yIEJvdW5kc1xualN0YXQuZXh0ZW5kKHtcbiAgLy8gMiBkaWZmZXJlbnQgcGFyYW1ldGVyIHNldHVwc1xuICAvLyAodmFsdWUsIGFscGhhLCBzZCwgbilcbiAgLy8gKHZhbHVlLCBhbHBoYSwgYXJyYXkpXG4gIG5vcm1hbGNpOiBmdW5jdGlvbiBub3JtYWxjaSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBhbnMgPSBuZXcgQXJyYXkoMiksXG4gICAgY2hhbmdlO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY2hhbmdlID0gTWF0aC5hYnMoalN0YXQubm9ybWFsLmludihhcmdzWzFdIC8gMiwgMCwgMSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAvIE1hdGguc3FydChhcmdzWzNdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZSA9IE1hdGguYWJzKGpTdGF0Lm5vcm1hbC5pbnYoYXJnc1sxXSAvIDIsIDAsIDEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LnN0ZGV2KGFyZ3NbMl0pIC8gTWF0aC5zcXJ0KGFyZ3NbMl0ubGVuZ3RoKSk7XG4gICAgfVxuICAgIGFuc1swXSA9IGFyZ3NbMF0gLSBjaGFuZ2U7XG4gICAgYW5zWzFdID0gYXJnc1swXSArIGNoYW5nZTtcbiAgICByZXR1cm4gYW5zO1xuICB9LFxuXG4gIC8vIDIgZGlmZmVyZW50IHBhcmFtZXRlciBzZXR1cHNcbiAgLy8gKHZhbHVlLCBhbHBoYSwgc2QsIG4pXG4gIC8vICh2YWx1ZSwgYWxwaGEsIGFycmF5KVxuICB0Y2k6IGZ1bmN0aW9uIHRjaSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBhbnMgPSBuZXcgQXJyYXkoMiksXG4gICAgY2hhbmdlO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY2hhbmdlID0gTWF0aC5hYnMoalN0YXQuc3R1ZGVudHQuaW52KGFyZ3NbMV0gLyAyLCBhcmdzWzNdIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAvIE1hdGguc3FydChhcmdzWzNdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZSA9IE1hdGguYWJzKGpTdGF0LnN0dWRlbnR0LmludihhcmdzWzFdIC8gMiwgYXJnc1syXS5sZW5ndGggLSAxKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICBqU3RhdC5zdGRldihhcmdzWzJdLCB0cnVlKSAvIE1hdGguc3FydChhcmdzWzJdLmxlbmd0aCkpO1xuICAgIH1cbiAgICBhbnNbMF0gPSBhcmdzWzBdIC0gY2hhbmdlO1xuICAgIGFuc1sxXSA9IGFyZ3NbMF0gKyBjaGFuZ2U7XG4gICAgcmV0dXJuIGFucztcbiAgfSxcblxuICBzaWduaWZpY2FudDogZnVuY3Rpb24gc2lnbmlmaWNhbnQocHZhbHVlLCBhbHBoYSkge1xuICAgIHJldHVybiBwdmFsdWUgPCBhbHBoYTtcbiAgfVxufSk7XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICBub3JtYWxjaTogZnVuY3Rpb24gbm9ybWFsY2kodmFsdWUsIGFscGhhKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm5vcm1hbGNpKHZhbHVlLCBhbHBoYSwgdGhpcy50b0FycmF5KCkpO1xuICB9LFxuXG4gIHRjaTogZnVuY3Rpb24gdGNpKHZhbHVlLCBhbHBoYSkge1xuICAgIHJldHVybiBqU3RhdC50Y2kodmFsdWUsIGFscGhhLCB0aGlzLnRvQXJyYXkoKSk7XG4gIH1cbn0pO1xuXG4vLyBpbnRlcm5hbCBtZXRob2QgZm9yIGNhbGN1bGF0aW5nIHRoZSB6LXNjb3JlIGZvciBhIGRpZmZlcmVuY2Ugb2YgcHJvcG9ydGlvbnMgdGVzdFxuZnVuY3Rpb24gZGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMocDEsIG4xLCBwMiwgbjIpIHtcbiAgaWYgKHAxID4gMSB8fCBwMiA+IDEgfHwgcDEgPD0gMCB8fCBwMiA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvcG9ydGlvbnMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMVwiKVxuICB9XG4gIHZhciBwb29sZWQgPSAocDEgKiBuMSArIHAyICogbjIpIC8gKG4xICsgbjIpO1xuICB2YXIgc2UgPSBNYXRoLnNxcnQocG9vbGVkICogKDEgLSBwb29sZWQpICogKCgxL24xKSArICgxL24yKSkpO1xuICByZXR1cm4gKHAxIC0gcDIpIC8gc2U7XG59XG5cbi8vIERpZmZlcmVuY2Ugb2YgUHJvcG9ydGlvbnNcbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICBvbmVTaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zOiBmdW5jdGlvbiBvbmVTaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zKHAxLCBuMSwgcDIsIG4yKSB7XG4gICAgdmFyIHogPSBkaWZmZXJlbmNlT2ZQcm9wb3J0aW9ucyhwMSwgbjEsIHAyLCBuMik7XG4gICAgcmV0dXJuIGpTdGF0Lnp0ZXN0KHosIDEpO1xuICB9LFxuXG4gIHR3b1NpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnM6IGZ1bmN0aW9uIHR3b1NpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMocDEsIG4xLCBwMiwgbjIpIHtcbiAgICB2YXIgeiA9IGRpZmZlcmVuY2VPZlByb3BvcnRpb25zKHAxLCBuMSwgcDIsIG4yKTtcbiAgICByZXR1cm4galN0YXQuenRlc3QoeiwgMik7XG4gIH1cbn0pO1xuXG59KGpTdGF0LCBNYXRoKSk7XG5qU3RhdC5tb2RlbHMgPSAoZnVuY3Rpb24oKXtcbiAgZnVuY3Rpb24gc3ViX3JlZ3Jlc3MoZXhvZykge1xuICAgIHZhciB2YXJfY291bnQgPSBleG9nWzBdLmxlbmd0aDtcbiAgICB2YXIgbW9kZWxMaXN0ID0galN0YXQuYXJhbmdlKHZhcl9jb3VudCkubWFwKGZ1bmN0aW9uKGVuZG9nX2luZGV4KSB7XG4gICAgICB2YXIgZXhvZ19pbmRleCA9XG4gICAgICAgICAgalN0YXQuYXJhbmdlKHZhcl9jb3VudCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpIT09ZW5kb2dfaW5kZXh9KTtcbiAgICAgIHJldHVybiBvbHMoalN0YXQuY29sKGV4b2csIGVuZG9nX2luZGV4KS5tYXAoZnVuY3Rpb24oeCl7IHJldHVybiB4WzBdIH0pLFxuICAgICAgICAgICAgICAgICBqU3RhdC5jb2woZXhvZywgZXhvZ19pbmRleCkpXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVsTGlzdDtcbiAgfVxuXG4gIC8vIGRvIE9MUyBtb2RlbCByZWdyZXNzXG4gIC8vIGV4b2cgaGF2ZSBpbmNsdWRlIGNvbnN0IGNvbHVtbnMgLGl0IHdpbGwgbm90IGdlbmVyYXRlIGl0IC5JbiBmYWN0LCBleG9nIGlzXG4gIC8vIFwiZGVzaWduIG1hdHJpeFwiIGxvb2sgYXRcbiAgLy9odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZXNpZ25fbWF0cml4XG4gIGZ1bmN0aW9uIG9scyhlbmRvZywgZXhvZykge1xuICAgIHZhciBub2JzID0gZW5kb2cubGVuZ3RoO1xuICAgIHZhciBkZl9tb2RlbCA9IGV4b2dbMF0ubGVuZ3RoIC0gMTtcbiAgICB2YXIgZGZfcmVzaWQgPSBub2JzLWRmX21vZGVsIC0gMTtcbiAgICB2YXIgY29lZiA9IGpTdGF0LmxzdHNxKGV4b2csIGVuZG9nKTtcbiAgICB2YXIgcHJlZGljdCA9XG4gICAgICAgIGpTdGF0Lm11bHRpcGx5KGV4b2csIGNvZWYubWFwKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIFt4XSB9KSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24ocCkgeyByZXR1cm4gcFswXSB9KTtcbiAgICB2YXIgcmVzaWQgPSBqU3RhdC5zdWJ0cmFjdChlbmRvZywgcHJlZGljdCk7XG4gICAgdmFyIHliYXIgPSBqU3RhdC5tZWFuKGVuZG9nKTtcbiAgICAvLyBjb25zdGFudCBjYXVzZSBwcm9ibGVtXG4gICAgLy8gdmFyIFNTVCA9IGpTdGF0LnN1bShlbmRvZy5tYXAoZnVuY3Rpb24oeSkge1xuICAgIC8vICAgcmV0dXJuIE1hdGgucG93KHkteWJhciwyKTtcbiAgICAvLyB9KSk7XG4gICAgdmFyIFNTRSA9IGpTdGF0LnN1bShwcmVkaWN0Lm1hcChmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gTWF0aC5wb3coZiAtIHliYXIsIDIpO1xuICAgIH0pKTtcbiAgICB2YXIgU1NSID0galN0YXQuc3VtKGVuZG9nLm1hcChmdW5jdGlvbih5LCBpKSB7XG4gICAgICByZXR1cm4gTWF0aC5wb3coeSAtIHByZWRpY3RbaV0sIDIpO1xuICAgIH0pKTtcbiAgICB2YXIgU1NUID0gU1NFICsgU1NSO1xuICAgIHZhciBSMiA9IChTU0UgLyBTU1QpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGV4b2c6ZXhvZyxcbiAgICAgICAgZW5kb2c6ZW5kb2csXG4gICAgICAgIG5vYnM6bm9icyxcbiAgICAgICAgZGZfbW9kZWw6ZGZfbW9kZWwsXG4gICAgICAgIGRmX3Jlc2lkOmRmX3Jlc2lkLFxuICAgICAgICBjb2VmOmNvZWYsXG4gICAgICAgIHByZWRpY3Q6cHJlZGljdCxcbiAgICAgICAgcmVzaWQ6cmVzaWQsXG4gICAgICAgIHliYXI6eWJhcixcbiAgICAgICAgU1NUOlNTVCxcbiAgICAgICAgU1NFOlNTRSxcbiAgICAgICAgU1NSOlNTUixcbiAgICAgICAgUjI6UjJcbiAgICB9O1xuICB9XG5cbiAgLy8gSDA6IGJfST0wXG4gIC8vIEgxOiBiX0khPTBcbiAgZnVuY3Rpb24gdF90ZXN0KG1vZGVsKSB7XG4gICAgdmFyIHN1Yk1vZGVsTGlzdCA9IHN1Yl9yZWdyZXNzKG1vZGVsLmV4b2cpO1xuICAgIC8vdmFyIHNpZ21hSGF0PWpTdGF0LnN0ZGV2KG1vZGVsLnJlc2lkKTtcbiAgICB2YXIgc2lnbWFIYXQgPSBNYXRoLnNxcnQobW9kZWwuU1NSIC8gKG1vZGVsLmRmX3Jlc2lkKSk7XG4gICAgdmFyIHNlQmV0YUhhdCA9IHN1Yk1vZGVsTGlzdC5tYXAoZnVuY3Rpb24obW9kKSB7XG4gICAgICB2YXIgU1NUID0gbW9kLlNTVDtcbiAgICAgIHZhciBSMiA9IG1vZC5SMjtcbiAgICAgIHJldHVybiBzaWdtYUhhdCAvIE1hdGguc3FydChTU1QgKiAoMSAtIFIyKSk7XG4gICAgfSk7XG4gICAgdmFyIHRTdGF0aXN0aWMgPSBtb2RlbC5jb2VmLm1hcChmdW5jdGlvbihjb2VmLCBpKSB7XG4gICAgICByZXR1cm4gKGNvZWYgLSAwKSAvIHNlQmV0YUhhdFtpXTtcbiAgICB9KTtcbiAgICB2YXIgcFZhbHVlID0gdFN0YXRpc3RpYy5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGxlZnRwcGYgPSBqU3RhdC5zdHVkZW50dC5jZGYodCwgbW9kZWwuZGZfcmVzaWQpO1xuICAgICAgcmV0dXJuIChsZWZ0cHBmID4gMC41ID8gMSAtIGxlZnRwcGYgOiBsZWZ0cHBmKSAqIDI7XG4gICAgfSk7XG4gICAgdmFyIGMgPSBqU3RhdC5zdHVkZW50dC5pbnYoMC45NzUsIG1vZGVsLmRmX3Jlc2lkKTtcbiAgICB2YXIgaW50ZXJ2YWw5NSA9IG1vZGVsLmNvZWYubWFwKGZ1bmN0aW9uKGNvZWYsIGkpIHtcbiAgICAgIHZhciBkID0gYyAqIHNlQmV0YUhhdFtpXTtcbiAgICAgIHJldHVybiBbY29lZiAtIGQsIGNvZWYgKyBkXTtcbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICAgIHNlOiBzZUJldGFIYXQsXG4gICAgICAgIHQ6IHRTdGF0aXN0aWMsXG4gICAgICAgIHA6IHBWYWx1ZSxcbiAgICAgICAgc2lnbWFIYXQ6IHNpZ21hSGF0LFxuICAgICAgICBpbnRlcnZhbDk1OiBpbnRlcnZhbDk1XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEZfdGVzdChtb2RlbCkge1xuICAgIHZhciBGX3N0YXRpc3RpYyA9XG4gICAgICAgIChtb2RlbC5SMiAvIG1vZGVsLmRmX21vZGVsKSAvICgoMSAtIG1vZGVsLlIyKSAvIG1vZGVsLmRmX3Jlc2lkKTtcbiAgICB2YXIgZmNkZiA9IGZ1bmN0aW9uKHgsIG4xLCBuMikge1xuICAgICAgcmV0dXJuIGpTdGF0LmJldGEuY2RmKHggLyAobjIgLyBuMSArIHgpLCBuMSAvIDIsIG4yIC8gMilcbiAgICB9XG4gICAgdmFyIHB2YWx1ZSA9IDEgLSBmY2RmKEZfc3RhdGlzdGljLCBtb2RlbC5kZl9tb2RlbCwgbW9kZWwuZGZfcmVzaWQpO1xuICAgIHJldHVybiB7IEZfc3RhdGlzdGljOiBGX3N0YXRpc3RpYywgcHZhbHVlOiBwdmFsdWUgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9sc193cmFwKGVuZG9nLCBleG9nKSB7XG4gICAgdmFyIG1vZGVsID0gb2xzKGVuZG9nLGV4b2cpO1xuICAgIHZhciB0dGVzdCA9IHRfdGVzdChtb2RlbCk7XG4gICAgdmFyIGZ0ZXN0ID0gRl90ZXN0KG1vZGVsKTtcbiAgICAvLyBQcm92aWRlIHRoZSBXaGVycnkgLyBFemVraWVsIC8gTWNOZW1hciAvIENvaGVuIEFkanVzdGVkIFJeMlxuICAgIC8vIFdoaWNoIG1hdGNoZXMgdGhlICdhZGp1c3RlZCBSXjInIHByb3ZpZGVkIGJ5IFIncyBsbSBwYWNrYWdlXG4gICAgdmFyIGFkanVzdF9SMiA9XG4gICAgICAgIDEgLSAoMSAtIG1vZGVsLlIyKSAqICgobW9kZWwubm9icyAtIDEpIC8gKG1vZGVsLmRmX3Jlc2lkKSk7XG4gICAgbW9kZWwudCA9IHR0ZXN0O1xuICAgIG1vZGVsLmYgPSBmdGVzdDtcbiAgICBtb2RlbC5hZGp1c3RfUjIgPSBhZGp1c3RfUjI7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgcmV0dXJuIHsgb2xzOiBvbHNfd3JhcCB9O1xufSkoKTtcbi8vVG8gcmVncmVzcywgc2ltcGx5IGJ1aWxkIFggbWF0cml4XG4vLyhhcHBlbmQgY29sdW1uIG9mIDEncykgdXNpbmdcbi8vYnVpbGR4bWF0cml4IGFuZCBidWlsZCB0aGUgWVxuLy9tYXRyaXggdXNpbmcgYnVpbGR5bWF0cml4XG4vLyhzaW1wbHkgdGhlIHRyYW5zcG9zZSlcbi8vYW5kIHJ1biByZWdyZXNzLlxuXG5cblxuLy9SZWdyZXNzaW9uc1xuXG5qU3RhdC5leHRlbmQoe1xuICBidWlsZHhtYXRyaXg6IGZ1bmN0aW9uIGJ1aWxkeG1hdHJpeCgpe1xuICAgIC8vUGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCBpbiBhcyBzdWNoXG4gICAgLy8oYXJyYXkxLGFycmF5MixhcnJheTMsLi4uKVxuICAgIC8vYXMgKHgxLHgyLHgzLC4uLilcbiAgICAvL25lZWRzIHRvIGJlICgxLHgxLHgyLHgzLC4uLilcbiAgICB2YXIgbWF0cml4Um93cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtcbiAgICAgIHZhciBhcnJheSA9IFsxXTtcbiAgICAgIG1hdHJpeFJvd3NbaV09IGFycmF5LmNvbmNhdChhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQobWF0cml4Um93cyk7XG5cbiAgfSxcblxuICBidWlsZGR4bWF0cml4OiBmdW5jdGlvbiBidWlsZGR4bWF0cml4KCkge1xuICAgIC8vUGFyYW10ZXJzIHdpbGwgYmUgcGFzc2VkIGluIGFzIHN1Y2hcbiAgICAvLyhbYXJyYXkxLGFycmF5MiwuLi5dXG4gICAgdmFyIG1hdHJpeFJvd3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzWzBdLmxlbmd0aCk7XG4gICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHNbMF0ubGVuZ3RoO2krKyl7XG4gICAgICB2YXIgYXJyYXkgPSBbMV1cbiAgICAgIG1hdHJpeFJvd3NbaV09IGFycmF5LmNvbmNhdChhcmd1bWVudHNbMF1baV0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQobWF0cml4Um93cyk7XG5cbiAgfSxcblxuICBidWlsZGp4bWF0cml4OiBmdW5jdGlvbiBidWlsZGp4bWF0cml4KGpNYXQpIHtcbiAgICAvL0J1aWxkcyBmcm9tIGpTdGF0IE1hdHJpeFxuICAgIHZhciBwYXNzID0gbmV3IEFycmF5KGpNYXQubGVuZ3RoKVxuICAgIGZvcih2YXIgaT0wO2k8ak1hdC5sZW5ndGg7aSsrKXtcbiAgICAgIHBhc3NbaV0gPSBqTWF0W2ldO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQuYnVpbGRkeG1hdHJpeChwYXNzKTtcblxuICB9LFxuXG4gIGJ1aWxkeW1hdHJpeDogZnVuY3Rpb24gYnVpbGR5bWF0cml4KGFycmF5KXtcbiAgICByZXR1cm4galN0YXQoYXJyYXkpLnRyYW5zcG9zZSgpO1xuICB9LFxuXG4gIGJ1aWxkanltYXRyaXg6IGZ1bmN0aW9uIGJ1aWxkanltYXRyaXgoak1hdCl7XG4gICAgcmV0dXJuIGpNYXQudHJhbnNwb3NlKCk7XG4gIH0sXG5cbiAgbWF0cml4bXVsdDogZnVuY3Rpb24gbWF0cml4bXVsdChBLEIpe1xuICAgIHZhciBpLCBqLCBrLCByZXN1bHQsIHN1bTtcbiAgICBpZiAoQS5jb2xzKCkgPT0gQi5yb3dzKCkpIHtcbiAgICAgIGlmKEIucm93cygpPjEpe1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IEEucm93cygpOyBpKyspIHtcbiAgICAgICAgICByZXN1bHRbaV0gPSBbXTtcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgQi5jb2xzKCk7IGorKykge1xuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBBLmNvbHMoKTsgaysrKSB7XG4gICAgICAgICAgICAgIHN1bSArPSBBLnRvQXJyYXkoKVtpXVtrXSAqIEIudG9BcnJheSgpW2tdW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ldW2pdID0gc3VtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4galN0YXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yIChpID0gMDsgaSA8IEEucm93cygpOyBpKyspIHtcbiAgICAgICAgcmVzdWx0W2ldID0gW107XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBCLmNvbHMoKTsgaisrKSB7XG4gICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgQS5jb2xzKCk7IGsrKykge1xuICAgICAgICAgICAgc3VtICs9IEEudG9BcnJheSgpW2ldW2tdICogQi50b0FycmF5KClbal07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdFtpXVtqXSA9IHN1bTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGpTdGF0KHJlc3VsdCk7XG4gICAgfVxuICB9LFxuXG4gIC8vcmVncmVzcyBhbmQgcmVncmVzc3QgdG8gYmUgZml4ZWRcblxuICByZWdyZXNzOiBmdW5jdGlvbiByZWdyZXNzKGpNYXRYLGpNYXRZKXtcbiAgICAvL3ByaW50KFwicmVncmVzc2luIVwiKTtcbiAgICAvL3ByaW50KGpNYXRYLnRvQXJyYXkoKSk7XG4gICAgdmFyIGlubmVyaW52ID0galN0YXQueHRyYW5zcHhpbnYoak1hdFgpO1xuICAgIC8vcHJpbnQoaW5uZXJpbnYpO1xuICAgIHZhciB4dHJhbnNwID0gak1hdFgudHJhbnNwb3NlKCk7XG4gICAgdmFyIG5leHQgPSBqU3RhdC5tYXRyaXhtdWx0KGpTdGF0KGlubmVyaW52KSx4dHJhbnNwKTtcbiAgICByZXR1cm4galN0YXQubWF0cml4bXVsdChuZXh0LGpNYXRZKTtcblxuICB9LFxuXG4gIHJlZ3Jlc3N0OiBmdW5jdGlvbiByZWdyZXNzdChqTWF0WCxqTWF0WSxzaWRlcyl7XG4gICAgdmFyIGJldGEgPSBqU3RhdC5yZWdyZXNzKGpNYXRYLGpNYXRZKTtcblxuICAgIHZhciBjb21waWxlID0ge307XG4gICAgY29tcGlsZS5hbm92YSA9IHt9O1xuICAgIHZhciBqTWF0WUJhciA9IGpTdGF0LmpNYXRZQmFyKGpNYXRYLCBiZXRhKTtcbiAgICBjb21waWxlLnlCYXIgPSBqTWF0WUJhcjtcbiAgICB2YXIgeUF2ZXJhZ2UgPSBqTWF0WS5tZWFuKCk7XG4gICAgY29tcGlsZS5hbm92YS5yZXNpZHVhbHMgPSBqU3RhdC5yZXNpZHVhbHMoak1hdFksIGpNYXRZQmFyKTtcblxuICAgIGNvbXBpbGUuYW5vdmEuc3NyID0galN0YXQuc3NyKGpNYXRZQmFyLCB5QXZlcmFnZSk7XG4gICAgY29tcGlsZS5hbm92YS5tc3IgPSBjb21waWxlLmFub3ZhLnNzciAvIChqTWF0WFswXS5sZW5ndGggLSAxKTtcblxuICAgIGNvbXBpbGUuYW5vdmEuc3NlID0galN0YXQuc3NlKGpNYXRZLCBqTWF0WUJhcik7XG4gICAgY29tcGlsZS5hbm92YS5tc2UgPVxuICAgICAgICBjb21waWxlLmFub3ZhLnNzZSAvIChqTWF0WS5sZW5ndGggLSAoak1hdFhbMF0ubGVuZ3RoIC0gMSkgLSAxKTtcblxuICAgIGNvbXBpbGUuYW5vdmEuc3N0ID0galN0YXQuc3N0KGpNYXRZLCB5QXZlcmFnZSk7XG4gICAgY29tcGlsZS5hbm92YS5tc3QgPSBjb21waWxlLmFub3ZhLnNzdCAvIChqTWF0WS5sZW5ndGggLSAxKTtcblxuICAgIGNvbXBpbGUuYW5vdmEucjIgPSAxIC0gKGNvbXBpbGUuYW5vdmEuc3NlIC8gY29tcGlsZS5hbm92YS5zc3QpO1xuICAgIGlmIChjb21waWxlLmFub3ZhLnIyIDwgMCkgY29tcGlsZS5hbm92YS5yMiA9IDA7XG5cbiAgICBjb21waWxlLmFub3ZhLmZyYXRpbyA9IGNvbXBpbGUuYW5vdmEubXNyIC8gY29tcGlsZS5hbm92YS5tc2U7XG4gICAgY29tcGlsZS5hbm92YS5wdmFsdWUgPVxuICAgICAgICBqU3RhdC5hbm92YWZ0ZXN0KGNvbXBpbGUuYW5vdmEuZnJhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGpNYXRYWzBdLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgak1hdFkubGVuZ3RoIC0gKGpNYXRYWzBdLmxlbmd0aCAtIDEpIC0gMSk7XG5cbiAgICBjb21waWxlLmFub3ZhLnJtc2UgPSBNYXRoLnNxcnQoY29tcGlsZS5hbm92YS5tc2UpO1xuXG4gICAgY29tcGlsZS5hbm92YS5yMmFkaiA9IDEgLSAoY29tcGlsZS5hbm92YS5tc2UgLyBjb21waWxlLmFub3ZhLm1zdCk7XG4gICAgaWYgKGNvbXBpbGUuYW5vdmEucjJhZGogPCAwKSBjb21waWxlLmFub3ZhLnIyYWRqID0gMDtcblxuICAgIGNvbXBpbGUuc3RhdHMgPSBuZXcgQXJyYXkoak1hdFhbMF0ubGVuZ3RoKTtcbiAgICB2YXIgY292YXIgPSBqU3RhdC54dHJhbnNweGludihqTWF0WCk7XG4gICAgdmFyIHNkcywgdHMsIHBzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8YmV0YS5sZW5ndGg7aSsrKXtcbiAgICAgIHNkcz1NYXRoLnNxcnQoY29tcGlsZS5hbm92YS5tc2UgKiBNYXRoLmFicyhjb3ZhcltpXVtpXSkpO1xuICAgICAgdHM9IE1hdGguYWJzKGJldGFbaV0gLyBzZHMpO1xuICAgICAgcHM9IGpTdGF0LnR0ZXN0KHRzLCBqTWF0WS5sZW5ndGggLSBqTWF0WFswXS5sZW5ndGggLSAxLCBzaWRlcyk7XG5cbiAgICAgIGNvbXBpbGUuc3RhdHNbaV09W2JldGFbaV0sIHNkcywgdHMsIHBzXTtcbiAgICB9XG5cbiAgICBjb21waWxlLnJlZ3Jlc3MgPSBiZXRhO1xuICAgIHJldHVybiBjb21waWxlO1xuICB9LFxuXG4gIHh0cmFuc3B4OiBmdW5jdGlvbiB4dHJhbnNweChqTWF0WCl7XG4gICAgcmV0dXJuIGpTdGF0Lm1hdHJpeG11bHQoak1hdFgudHJhbnNwb3NlKCksak1hdFgpO1xuICB9LFxuXG5cbiAgeHRyYW5zcHhpbnY6IGZ1bmN0aW9uIHh0cmFuc3B4aW52KGpNYXRYKXtcbiAgICB2YXIgaW5uZXIgPSBqU3RhdC5tYXRyaXhtdWx0KGpNYXRYLnRyYW5zcG9zZSgpLGpNYXRYKTtcbiAgICB2YXIgaW5uZXJpbnYgPSBqU3RhdC5pbnYoaW5uZXIpO1xuICAgIHJldHVybiBpbm5lcmludjtcbiAgfSxcblxuICBqTWF0WUJhcjogZnVuY3Rpb24gak1hdFlCYXIoak1hdFgsIGJldGEpIHtcbiAgICB2YXIgeUJhciA9IGpTdGF0Lm1hdHJpeG11bHQoak1hdFgsIGJldGEpO1xuICAgIHJldHVybiBuZXcgalN0YXQoeUJhcik7XG4gIH0sXG5cbiAgcmVzaWR1YWxzOiBmdW5jdGlvbiByZXNpZHVhbHMoak1hdFksIGpNYXRZQmFyKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hdHJpeHN1YnRyYWN0KGpNYXRZLCBqTWF0WUJhcik7XG4gIH0sXG5cbiAgc3NyOiBmdW5jdGlvbiBzc3Ioak1hdFlCYXIsIHlBdmVyYWdlKSB7XG4gICAgdmFyIHNzciA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGpNYXRZQmFyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzc3IgKz0gTWF0aC5wb3coak1hdFlCYXJbaV0gLSB5QXZlcmFnZSwgMik7XG4gICAgfVxuICAgIHJldHVybiBzc3I7XG4gIH0sXG5cbiAgc3NlOiBmdW5jdGlvbiBzc2Uoak1hdFksIGpNYXRZQmFyKSB7XG4gICAgdmFyIHNzZSA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGpNYXRZLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzc2UgKz0gTWF0aC5wb3coak1hdFlbaV0gLSBqTWF0WUJhcltpXSwgMik7XG4gICAgfVxuICAgIHJldHVybiBzc2U7XG4gIH0sXG5cbiAgc3N0OiBmdW5jdGlvbiBzc3Qoak1hdFksIHlBdmVyYWdlKSB7XG4gICAgdmFyIHNzdCA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGpNYXRZLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzc3QgKz0gTWF0aC5wb3coak1hdFlbaV0gLSB5QXZlcmFnZSwgMik7XG4gICAgfVxuICAgIHJldHVybiBzc3Q7XG4gIH0sXG5cbiAgbWF0cml4c3VidHJhY3Q6IGZ1bmN0aW9uIG1hdHJpeHN1YnRyYWN0KEEsQil7XG4gICAgdmFyIGFucyA9IG5ldyBBcnJheShBLmxlbmd0aCk7XG4gICAgZm9yKHZhciBpPTA7aTxBLmxlbmd0aDtpKyspe1xuICAgICAgYW5zW2ldID0gbmV3IEFycmF5KEFbaV0ubGVuZ3RoKTtcbiAgICAgIGZvcih2YXIgaj0wO2o8QVtpXS5sZW5ndGg7aisrKXtcbiAgICAgICAgYW5zW2ldW2pdPUFbaV1bal0tQltpXVtqXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0KGFucyk7XG4gIH1cbn0pO1xuICAvLyBNYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyB2ZXJzaW9uLlxuICBqU3RhdC5qU3RhdCA9IGpTdGF0O1xuXG4gIHJldHVybiBqU3RhdDtcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18uaG1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG1vZHVsZSk7XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRzZXQ6ICgpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogJyArIG1vZHVsZS5pZCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDM1OTogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IGdyb2s7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHVpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBERzsiLCIvLyBSdW50aW1lIHN5c3RlbSBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb25zIGNhbGwuXG4vLyBJdCB3YXMgcHJldmlvdXNlbHkgZGV2ZWxvcGVkIGFuZCBkb2VzIE5PVCBwcm92aWRlIGNhbGwgd2FzbS1mdW5jdGlvbnMgaW4gV2ViV29ya2Vycy5cblxuLy8gdHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlXG5jb25zdCBoZWFwTWFwID0geydpMzInOiAnSEVBUDMyJywgLy8gSW50MzJBcnJheVxuICAnZjMyJzogJ0hFQVBGMzInLCAvLyBGbG9hdDMyQXJyYXlcbn07XG5cbi8vIHR5cGUgc2lnbmF0dXJlIHRvIHR5cGVkIGFycmF5ICxhcHBcbmNvbnN0IHR5cGVNYXAgPSB7J2kzMic6IEludDMyQXJyYXksIC8vIEludDMyQXJyYXlcbiAgJ2YzMic6IEZsb2F0MzJBcnJheSwgLy8gRmxvYXQzMkFycmF5XG59O1xuXG4vLyB0eXBlLXRvLXNoaWZ0IG1hcFxuY29uc3Qgc2hpZnRNYXAgPSB7J2kzMic6IDIsIC8vIEludDMyQXJyYXlcbiAgJ2YzMic6IDIsIC8vIEZsb2F0MzJBcnJheVxufTtcblxuLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbmNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7J2kzMic6IERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSxcbiAgJ2YzMic6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5fTtcblxuXG4vLyBDTEFTU0VTIFRIQVQgQVJFIFVTRUQgQlkgQ1BQLVdSQVBQRVJcblxuLy8gc2ltcGxlIGFyZ3VtZW50OiBhIG51bWJlclxuY2xhc3MgQXJnIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuZGF0YSk7XG4gIH1cblxuICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgfVxuXG4gIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge31cblxuICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7fVxuXG4gIGZyZWVCdWZmZXIobW9kdWxlKSB7fVxufVxuXG4vLyBjb2x1bW4gYXJndW1lbnRcbmNsYXNzIEFyZ0NvbHVtbiBleHRlbmRzIEFyZyB7XG4gIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLnR5cGUgPSB0YXJnZXRUeXBlO1xuICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICB0aGlzLmJ1ZiA9IDA7XG4gICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5idWYpO1xuICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICB9XG5cbiAgY29tcGxlbWVudEFyck9mVHlwZXMoYXJyT2ZUeXBlcykge1xuICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgfVxuXG4gIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICB9XG5cbiAgaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmJ1ZiAhPSAwKTtcbiAgfVxuXG4gIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICBpZiAodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgY29uc3Qgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgIGNvbnN0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICBsZXQgYXJyYXkgPSBudWxsO1xuICAgICAgY29uc3QgY29sID0gdGhpcy5kYXRhO1xuXG4gICAgICBpZiAoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSB8fFxuICAgICAgICAgICAgICAgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgZWxzZVxuICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICBpZiAoYXJyYXkpXG4gICAgICAgIGhlYXAuc2V0KGFycmF5LCB0aGlzLmJ1ZiA+PiBzaGlmdCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgaWYgKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgY29uc3QgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmO1xuICAgICAgY29uc3QgYnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgY29uc3QgYXJyYXkgPSB0aGlzLmRhdGEuZ2V0UmF3RGF0YSgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZSb3dzOyBpKyspXG4gICAgICAgIGFycmF5W2ldID0gaGVhcFtidWZmZXIgLyBieXRlcyArIGldO1xuICAgIH1cbiAgfVxuXG4gIGZyZWVCdWZmZXIobW9kdWxlKSB7XG4gICAgaWYgKHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgbW9kdWxlLl9mcmVlKHRoaXMuYnVmKTtcbiAgICAgIHRoaXMuYnVmID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gbmV3IGNvbHVtbiBhcmd1bWVudDogYSBuZXcgY29sdW1uIGlzIGNyZWF0ZWRcbmNsYXNzIEFyZ05ld0NvbHVtbiBleHRlbmRzIEFyZ0NvbHVtbiB7XG4gIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cykge1xuICAgIHN1cGVyKFtdLCB0YXJnZXRUeXBlLCB0cnVlKTtcbiAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgfVxuXG4gIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgaWYgKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgY29uc3QgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgIGNvbnN0IGJ1ZiA9IHRoaXMuYnVmO1xuXG4gICAgICBjb25zdCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTtcblxuICAgICAgY29uc3QgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0odGhpcy5udW1PZlJvd3MpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgYXJyW2ldID0gaGVhcFtidWYgLyBhcnIuQllURVNfUEVSX0VMRU1FTlQgKyBpXTtcblxuICAgICAgdGhpcy5kYXRhID0gY29sdW1uQ3JlYXRvcignbmFtZScsIGFycik7XG5cbiAgICAgIC8vY29uc29sZS5sb2coYXJyKTtcblxuICAgICAgLy8gVGhpcyBtYWtlcyBtaXN0YWtlLCB3aGVuIHRoaXMubnVtT2ZSb3dzID0gNSAoVE9ETzogaW52ZXN0aWdhdGUgd2h5KVxuICAgICAgLy90aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIHRoaXMuYnVmLCB0aGlzLm51bU9mUm93cykpO1xuXG4gICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YS5nZXRSYXdEYXRhKCkpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBhbiBhcnJheSBvZiBjb2x1bW5zIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW5zIGV4dGVuZHMgQXJnIHtcbiAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgIHRoaXMuYnVmID0gMDtcbiAgICB0aGlzLm51bU9mQ29sdW1ucyA9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMubnVtT2ZSb3dzID0gZGF0YVswXS5sZW5ndGg7XG4gIH1cblxuICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMubnVtT2ZSb3dzKTtcbiAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMubnVtT2ZDb2x1bW5zKTtcbiAgfVxuXG4gIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpO1xuICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgfVxuXG4gIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0aGlzLm51bU9mQ29sdW1ucyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgfVxuXG4gIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkge1xuICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gIH1cblxuICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7XG4gICAgaWYgKHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgIGNvbnN0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICBjb25zdCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgY29uc3QgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG5cbiAgICAgIC8vIHB1dCBjb2x1bW5zIGRhdGEgdG8gYnVmZmVyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZDb2x1bW5zOyBpKyspIHtcbiAgICAgICAgbGV0IGFycmF5ID0gbnVsbDtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5kYXRhW2ldO1xuXG4gICAgICAgIGlmICgoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSAnaTMyJykpIHx8XG4gICAgICAgICAgICAgICAgICAgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgIC8vIGNoZWNrIGRhdGEgYXJyYXlcbiAgICAgICAgaWYgKGFycmF5ICE9IG51bGwpXG4gICAgICAgICAgaGVhcC5zZXQoYXJyYXksICh0aGlzLmJ1ZiArIGkgKiB0aGlzLm51bU9mUm93cyAqIG51bU9mQnl0ZXMpID4+IHNoaWZ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICBpZiAodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICBjb25zdCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgY29uc3QgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICBjb25zdCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1ucztcbiAgICAgIGNvbnN0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCB0aGlzLmJ1ZiwgbnVtT2ZSb3dzICogbnVtT2ZDb2xzKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICBjb25zdCBjb2xEYXRhID0gdGhpcy5kYXRhW2ldLmdldFJhd0RhdGEoKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICBjb2xEYXRhW2pdID0gYXJyW2ogKyBpICogbnVtT2ZSb3dzXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmcmVlQnVmZmVyKG1vZHVsZSkge1xuICAgIGlmICh0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICB0aGlzLmJ1ZiA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIGFuIGFycmF5IG9mIG5ldyBjb2x1bW5zOiBuZXcgY29sdW1ucyBhcmUgY3JlYXRlZFxuY2xhc3MgQXJnTmV3Q29sdW1ucyBleHRlbmRzIEFyZ0NvbHVtbnMge1xuICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgIHN1cGVyKFtbXV0sIHRhcmdldFR5cGUsIHRydWUpO1xuICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIHRoaXMubnVtT2ZDb2x1bW5zID0gbnVtT2ZDb2x1bW5zO1xuICAgIHRoaXMubnVtT2ZSb3dzID0gbnVtT2ZSb3dzO1xuICB9XG5cbiAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkgeyB9XG5cbiAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgaWYgKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgY29uc3QgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgIGNvbnN0IG51bU9mUm93cyA9IHRoaXMubnVtT2ZSb3dzO1xuICAgICAgY29uc3QgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7XG4gICAgICBjb25zdCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgIGNvbnN0IGNvbHVtbkNyZWF0b3IgPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW3R5cGVdO1xuICAgICAgY29uc3QgYnVmID0gdGhpcy5idWY7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTtcblxuICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgYXJyKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSBjb2x1bW5zOiBoZXJlLCBtYXkgYmUgYSBwcm9ibGVtIHdoZW4gbnVtT2ZSb3dzID0gNVxuICAgICAgLypmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goY29sdW1uQ3JlYXRvcigoaSArIDEpLnRvU3RyaW5nKCksIG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzLCBudW1PZlJvd3MpKSk7Ki9cbiAgICB9XG4gIH1cbn1cblxuLy8gYSB3cmFwcGVyIGZvciBleHBvcnRlZCBDL0MrKy1mdW5jdGlvbiBjYWxsXG5mdW5jdGlvbiBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGNGdW5jTmFtZSwgcmV0dXJuVHlwZSwgYXJncykge1xuICBsZXQgcmVzdWx0O1xuXG4gIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyc1xuICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKVxuICAgIGFyZy5hbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpO1xuXG4gIGxldCBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkID0gdHJ1ZTtcblxuICAvLyBjaGVjayBtZW1vcnkgYWxsb2NhdGlvblxuICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKVxuICAgIGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQgJj0gYXJnLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCk7XG5cbiAgLy8gcnVuIGV4cG9ydGVkIGZ1bmN0aW9uIGlmIGVub3VnaCBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkXG4gIGlmIChpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkKSB7XG4gICAgY29uc3QgcGFyYW1zID0gW107IC8vIGFyZ3VtZW50cyB0aGF0IGFyZSBwdXQgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgY29uc3QgdHlwZXMgPSBbXTsgLy8gdGhlaXIgdHlwZXNcblxuICAgIC8vIHByZXBhcmUgZGF0YSB0aGF0IGlzIHB1dCB0byBleHBvcnRlZCBmdW5jdGlvblxuICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZQYXJhbXMocGFyYW1zKTtcbiAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZUeXBlcyh0eXBlcyk7XG4gICAgICBhcmcucHV0RGF0YVRvQnVmZmVyKG1vZHVsZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4gPSAocmV0dXJuVHlwZSA9PSAnbnVtJykgPyAnbnVtYmVyJyA6IG51bGw7XG5cbiAgICAvLyBjYWxsIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgaWYgKGV4dGVuZGVkVHlwZU9mUmV0dXJuKVxuICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgIGVsc2VcbiAgICAgIHJlc3VsdCA9IG1vZHVsZS5jY2FsbChjRnVuY05hbWUsIGV4dGVuZGVkVHlwZU9mUmV0dXJuLCB0eXBlcywgcGFyYW1zKTtcblxuICAgIC8vIHVwZGF0ZSBhbmQgZ2V0IGRhdGEgZnJvbSBidWZmZXJzIGlmIHJlcXVpcmVkXG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncylcbiAgICAgIGFyZy5nZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpO1xuICB9XG5cbiAgLy8gY2xlYXIgYnVmZmVyc1xuICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKVxuICAgIGFyZy5mcmVlQnVmZmVyKG1vZHVsZSk7XG5cbiAgaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHJlc3VsdDtcbn0gLy8gY3BwRnVuY1dyYXBwZXJcblxuXG4vLyBBIExBWUVSIEJFVFdFRU4gSlMgQU5EIENQUC1XUkFQUEVSXG5cbi8vIFBhcmFtZXRlcnMgY3JlYXRvclxuY29uc3QgUGFyYW0gPSB7XG4gIGludENvbHVtbihjb2x1bW4pIHtcbiAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdpMzInKTtcbiAgfSxcblxuICBuZXdJbnRDb2x1bW4obnVtT2ZSb3dzKSB7XG4gICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW4oJ2kzMicsIG51bU9mUm93cyk7XG4gIH0sXG5cbiAgaW50Q29sdW1ucyhjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBBcmdDb2x1bW5zKGNvbHVtbnMudG9MaXN0KCksICdpMzInKTtcbiAgfSxcblxuICBuZXdJbnRDb2x1bW5zKG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW5zKCdpMzInLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucyk7XG4gIH0sXG5cbiAgZmxvYXRDb2x1bW4oY29sdW1uKSB7XG4gICAgcmV0dXJuIG5ldyBBcmdDb2x1bW4oY29sdW1uLCAnZjMyJyk7XG4gIH0sXG5cbiAgbmV3RmxvYXRDb2x1bW4obnVtT2ZSb3dzKSB7XG4gICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW4oJ2YzMicsIG51bU9mUm93cyk7XG4gIH0sXG5cbiAgZmxvYXRDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2YzMicpO1xuICB9LFxuXG4gIG5ld0Zsb2F0Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1ucygnZjMyJywgbnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpO1xuICB9LFxuXG4gIGludChudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICB9LFxuXG4gIG51bShudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICB9LFxufTtcblxuLy8gUmV0dXJuIHZhbHVlIGNyZWF0b3JcbmNvbnN0IFJldHVybiA9IHtcbiAgdGFibGVGcm9tQ29sdW1ucyhhcmdDb2x1bW5zKSB7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhhcmdDb2x1bW5zLmRhdGEpO1xuICB9LFxuXG4gIG51bShudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9LFxuXG4gIGludChudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9LFxuXG4gIGRvdWJsZShudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9LFxuXG4gIGNvbHVtbihhcmdDb2x1bW4pIHtcbiAgICByZXR1cm4gYXJnQ29sdW1uLmRhdGE7XG4gIH0sXG59O1xuXG4vLyBUaGUgbWFpbiB0b29sIHRoYXQgY29tYmluZXMgYWxsIHRvZ2V0aGVyXG5leHBvcnQgZnVuY3Rpb24gY2FsbFdhc20obW9kdWxlLCBmdW5jTmFtZSwgaW5wdXRzKSB7XG4gIC8vIGdldCBzcGVjaWZpY2F0aW9uIG9mIGV4cG9ydGVkIEMvQysrLWZ1bmN0aW9uXG4gIGNvbnN0IGZ1bmNTcGVjaWZpY2F0aW9uID0gbW9kdWxlW2Z1bmNOYW1lXTtcblxuICAvLyBnZXQgYXJndW1uZXRzXG4gIGNvbnN0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7XG5cbiAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICBjb25zdCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAvLyBjb21wbGV0ZSBhbiBpbnB1dCBmb3IgY3BwXG4gIGxldCBpID0gMDtcbiAgZm9yIChjb25zdCBrZXkgaW4gYXJncykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3Nba2V5XTtcblxuICAgIC8vIHNraXAgYXV4aWxpcnkgZWxlbWVudFxuICAgIGlmIChrZXkgPT0gJ19jYWxsUmVzdWx0JylcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgLy8gY3JlYXRlIGFuIGFyZ3VtZW50XG4gICAgc3dpdGNoIChhcmcudHlwZSkge1xuICAgIGNhc2UgJ2Zsb2F0Q29sdW1ucyc6XG4gICAgY2FzZSAnaW50JzpcbiAgICBjYXNlICdudW0nOlxuICAgIGNhc2UgJ2Zsb2F0Q29sdW1uJzpcbiAgICBjYXNlICdpbnRDb2x1bW4nOlxuICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgYXJnLmRhdGEgPSBQYXJhbVthcmcudHlwZV0oaW5wdXRzW2ldKTtcbiAgICAgIGkrKztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25ld0Zsb2F0Q29sdW1ucyc6XG4gICAgY2FzZSAnbmV3SW50Q29sdW1ucyc6XG4gICAgICBjb25zdCB2YWwxID0gYXJnc1thcmdbJ251bU9mUm93cyddWydyZWYnXV0uZGF0YVthcmdbJ251bU9mUm93cyddWyd2YWx1ZSddXTtcbiAgICAgIGNvbnN0IHZhbDIgPSBhcmdzW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3JlZiddXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgYXJnLmRhdGEgPSBQYXJhbVthcmcudHlwZV0odmFsMSwgdmFsMik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZXdGbG9hdENvbHVtbic6XG4gICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgIGNvbnN0IHZhbCA9IGFyZ3NbYXJnWydudW1PZlJvd3MnXVsncmVmJ11dLmRhdGFbYXJnWydudW1PZlJvd3MnXVsndmFsdWUnXV07XG4gICAgICBhcmcuZGF0YSA9IFBhcmFtW2FyZy50eXBlXSh2YWwpO1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBzd2l0Y2hcblxuICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcbiAgfSAvLyBmb3Iga2V5XG5cbiAgLy8gQ0FMTCBFWFBPUlRFRCBDUFAtRlVOQ1RJT05cbiAgY29uc3QgY2FsbFJlc3VsdCA9IGNwcEZ1bmNXcmFwcGVyKG1vZHVsZSwgZnVuY05hbWUsICdudW0nLCBjcHBGdW5jSW5wdXQpO1xuXG4gIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICBhcmdzLl9jYWxsUmVzdWx0ID0gUGFyYW0ubnVtKGNhbGxSZXN1bHQpO1xuXG4gIC8vIGNyZWF0ZSBvdXRwdXRcbiAgY29uc3Qgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuXG4gIC8vIGlmIGEgc2luZ2xlIG9iamVjdCBtdXN0IGJlIHJldHVybmVkXG4gIGlmIChvdXRwdXRbJ3R5cGUnXSAhPSAnb2JqZWN0cycpXG4gICAgcmV0dXJuIFJldHVybltvdXRwdXRbJ3R5cGUnXV0oYXJnc1tvdXRwdXRbJ3NvdXJjZSddXS5kYXRhKTtcblxuICBjb25zdCBhcnJheVRvUmV0dXJuID0gW107XG5cbiAgLy8gcHVzaCBkYXRhIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHNcbiAgZm9yIChjb25zdCBuYW1lIG9mIG91dHB1dFsnc291cmNlJ10pXG4gICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ3NbbmFtZV0uZGF0YS5kYXRhKTtcblxuICByZXR1cm4gYXJyYXlUb1JldHVybjtcbn0gLy8gY2FsbFdhc21cbiIsIi8vIFV0aWxpdGllcyBmb3IgY2FsbGluZyB3YXNtLWZ1bmN0aW9ucyB2aWEgd2Vid29ya2VyLlxuXG4vLyBXZSB1c2UgYW4gYXBwcm9hY2ggdGhhdCBpcyB3ZWxsIGRlc2NyaWJlZCBoZXJlOlxuLy8gaHR0cHM6Ly9iZWNvbWluZ2h1bWFuLmFpL3Bhc3NpbmctYW5kLXJldHVybmluZy13ZWJhc3NlbWJseS1hcnJheS1wYXJhbWV0ZXJzLWEwZjU3MmM2NWQ5N1xuLy8gSXQgaGFzIGJlZW4gbW9kaWZpZWQgZm9yIHVzYWdlIGluIERBVEFHUk9LLlxuXG4vLyBDb25zdGFudHMgZm9yIHdhc20tZnVuY3Rpb25zIGluIHdlYndvcmtlcnMgcnVudGltZSBzeXN0ZW1cbmNvbnN0IFRZUEUgPSAndHlwZSc7XG5jb25zdCBOVU1fVFlQRSA9ICdudW0nO1xuY29uc3QgRkxPQVRfQ09MVU1OX1RZUEUgPSAnZmxvYXRDb2x1bW4nO1xuY29uc3QgSU5UX0NPTFVNTl9UWVBFID0gJ2ludENvbHVtbic7XG5jb25zdCBGTE9BVF9DT0xVTU5TX1RZUEUgPSAnZmxvYXRDb2x1bW5zJztcbmNvbnN0IE5FV19GTE9BVF9DT0xVTU5TX1RZUEUgPSAnbmV3RmxvYXRDb2x1bW5zJztcbmNvbnN0IElOVF9DT0xVTU5TX1RZUEUgPSAnaW50Q29sdW1ucyc7XG5jb25zdCBORVdfSU5UX0NPTFVNTlNfVFlQRSA9ICduZXdJbnRDb2x1bW5zJztcbmNvbnN0IE5FV19GTE9BVF9DT0xVTU5fVFlQRSA9ICduZXdGbG9hdENvbHVtbic7XG5jb25zdCBORVdfSU5UX0NPTFVNTl9UWVBFID0gJ25ld0ludENvbHVtbic7XG5jb25zdCBDT0xVTU4gPSAnY29sdW1uJztcbmNvbnN0IENBTExfUkVTVUxUID0gJ19jYWxsUmVzdWx0JztcbmNvbnN0IE5VTV9PRl9ST1dTID0gJ251bU9mUm93cyc7XG5jb25zdCBOVU1fT0ZfQ09MVU1OUyA9ICdudW1PZkNvbHVtbnMnO1xuY29uc3QgUkVGID0gJ3JlZic7XG5jb25zdCBWQUxVRSA9ICd2YWx1ZSc7XG5jb25zdCBUQUJMRV9PRl9DT0xVTU5TID0gJ3RhYmxlRnJvbUNvbHVtbnMnO1xuY29uc3QgT0JKRUNUUyA9ICdvYmplY3RzJztcbmNvbnN0IElOVF9UWVBFID0gJ2ludCc7XG5jb25zdCBET1VCTEVfVFlQRSA9ICdkb3VibGUnO1xuY29uc3QgTlVNQkVSID0gJ251bWJlcic7XG5cbi8vIFR5cGUtdG8taGVhcCBjb3JyZXNwb25kZW5jZS5cbi8vIEl0IGlzIHJlcXVpcmVkIGZvciBKUy1tb2R1bGUgZ2VuZXJhdGVkIGJ5IEVtc2NyaXB0ZW4sXG4vLyBhbmQgaXQgaXMgdXNlZCwgd2hlbiBwYXNzaW5nIGFycmF5IGRhdGEgdG8vZnJvbSB3YXNtLWZ1bmN0aW9ucy5cbi8vIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBsaW5rOlxuLy8gaHR0cHM6Ly9iZWNvbWluZ2h1bWFuLmFpL3Bhc3NpbmctYW5kLXJldHVybmluZy13ZWJhc3NlbWJseS1hcnJheS1wYXJhbWV0ZXJzLWEwZjU3MmM2NWQ5N1xuY29uc3QgaGVhcE1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogXCJIRUFQMzJcIlxuICAgICAgICAgICAgICAgIH07XG5cbi8vIFR5cGUgc2lnbmF0dXJlIHRvIHR5cGVkIGFycmF5IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gbWFuaXB1bGF0aW5nIGNvbHVtbihzKS5cbmNvbnN0IHR5cGVNYXAgPSB7XG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW4nOiBJbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbnMnOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogSW50MzJBcnJheSwgIFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IEludDMyQXJyYXlcbiAgICAgICAgICAgICAgICB9OyBcblxuLy8gVHlwZS10by1zaGlmdCBtYXAuXG4vLyBJdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgdG8vZnJvbSB3YXNtLWZ1bmN0aW9ucy5cbi8vIE1vcmUgaW5mbyBjYW4gYmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBsaW5rOlxuLy8gaHR0cHM6Ly9iZWNvbWluZ2h1bWFuLmFpL3Bhc3NpbmctYW5kLXJldHVybmluZy13ZWJhc3NlbWJseS1hcnJheS1wYXJhbWV0ZXJzLWEwZjU3MmM2NWQ5NyBcbmNvbnN0IHNoaWZ0TWFwID0geydpbnRDb2x1bW4nOiAyLCBcbiAgICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IDIsICBcbiAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbnMnOiAyLCBcbiAgICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogMixcbiAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAyXG4gICAgICAgICAgICAgICAgIH07ICAgICAgICAgXG5cbi8vIEdldCBpbnB1dCBmb3IgQysrLWZ1bmN0aW9uLlxuLy8gVGhpcyBmdW5jdGlvbiB0YWtlcyBzcGVjaWZpY2F0aW9uIG9mIGFyZ3VtZW50cyAoYXJnc1NwZWNpZmljYXRpb24pICYgaW5wdXQgZGF0YSAoaW5wdXRWYWxzKVxuLy8gYW5kIHJldHVybnMgaW5wdXQgdGhhdCB3aWxsIGJlIGZ1cnRoZXIgdXNlZCBpbiBjcHAvd2FzbS1mdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcHBJbnB1dChhcmdzU3BlY2lmaWNhdGlvbiwgaW5wdXRWYWxzKSB7XG4gICAgbGV0IGNwcEZ1bmNJbnB1dCA9IFtdO1xuICAgIGxldCByZWY7XG5cbiAgICAvLyBjb21wbGV0ZSBhbiBpbnB1dCBmb3IgY3BwXG4gICAgbGV0IGkgPSAwO1xuICAgIGZvcihjb25zdCBrZXkgaW4gYXJnc1NwZWNpZmljYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXJnID0gYXJnc1NwZWNpZmljYXRpb25ba2V5XTsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcbiAgICAgICAgXG4gICAgICAgIC8vIHNraXAgYXV4aWxpcnkgZWxlbWVudFxuICAgICAgICBpZihrZXkgPT09IENBTExfUkVTVUxUKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGhlcmUsIHdlIGNvbnNpZGVyIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgICAgICBzd2l0Y2godHlwZSkgeyAgICAgICAgICAgXG4gXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gaW5wdXRWYWxzW2ldO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJyYXk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1uIGFuZCB0YXJnZXQgdHlwZSBjb2luc2lkZVxuICAgICAgICAgICAgICAgIC8vYXJyYXkgPSBpbnB1dFZhbHNbaV0uZ2V0UmF3RGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IGlucHV0VmFsc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIGhlcmUsIHdlIGNoZWNrIHR5cGVzIGFuZCBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIGlmKCAoIChjb2wudHlwZSA9PT0gSU5UX1RZUEUpICYmICh0eXBlID09PSBJTlRfQ09MVU1OX1RZUEUpICkgXG4gICAgICAgICAgICAgICAgICAgfHwgKCAoY29sLnR5cGUgPT09IERPVUJMRV9UWVBFKSAmJiAodHlwZSA9PT0gRkxPQVRfQ09MVU1OX1RZUEUpICkgKVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvKmlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gRkxPQVRfQ09MVU1OX1RZUEUpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTsqL1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdHlwZXNcbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsgJ2FycmF5JzogYXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1PZlJvd3MnOiBhcnJheS5sZW5ndGh9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW4gXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gMDsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX1JPV1NdW1JFRl07XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7J251bU9mUm93cyc6IHZhbH07XG5cbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbnMgb3IgY29sdW1uX2xpc3RcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBPSyBpZiB0eXBlIG9mIGNvbHVtbnMgYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9mb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgLy8gIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICAgfHwgKCAoY29sLnR5cGUgPT09IERPVUJMRV9UWVBFKSAmJiAodHlwZSA9PT0gRkxPQVRfQ09MVU1OX1RZUEUpICkgKVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2gobmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8qZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgICAgICBpZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSBJTlRfQ09MVU1OX1RZUEUpKSBcbiAgICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2gobmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSkpOyovXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsgJ2FycmF5cyc6IGFycmF5cyxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiBhcnJheXMubGVuZ3RofTtcblxuICAgICAgICAgICAgICAgIGkrKzsgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1ucyBvciBuZXcgY29sdW1uX2xpc3RcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IHZhbDEgPSAwO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gMDtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdmFsMSA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX1JPV1NdW1ZBTFVFXV07XG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX0NPTFVNTlNdW1JFRl07XG5cbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdSZWY6Jyk7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZWYpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdmFsMiA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX0NPTFVNTlNdW1ZBTFVFXV07ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7J251bU9mUm93cyc6IHZhbDEsXG4gICAgICAgICAgICAgICAgICAnbnVtT2ZDb2x1bW5zJzogdmFsMn07XG5cbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIGRlZmF1bHQ6IFxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gVE9ETzogc3BlY2lmeSBiZWhhdmlvdXIgICAgICAgICAgIFxuICAgICAgICAgICAgfSAvLyBzd2l0Y2ggICAgICAgIFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZyk7XG4gICAgfSAvLyBmb3Iga2V5XG5cbiAgICAvL2NvbnNvbGUubG9nKCdjcHBGdW5jSW5wdXQ6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhjcHBGdW5jSW5wdXQpO1xuXG4gICAgcmV0dXJuIGNwcEZ1bmNJbnB1dDtcbn0gLy8gZ2V0Q3BwSW5wdXRcblxuLy8gQWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7IFxuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEuYnVmID0gbW9kdWxlLl9tYWxsb2MoYXJnLmRhdGEubnVtT2ZSb3dzICogdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbnMgJiBuZXcgY29sdW1uc1xuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IC8vIGFsbG9jYXRpb24gbWVtb3J5IGZvciBjb2x1bW5zIHRoYXQgYXJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiBhcmcuZGF0YS5udW1PZkNvbHVtbnMgXG4gICAgICAgICAgICAgICAgICAgICogdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfSAgXG4gICAgfVxuICAgIFxuICAgIC8vY29uc29sZS5sb2coJ2lucHV0cyBhZnRlciBtZW1vcnkgYWxsb2NhdGlvbjonKTtcbiAgICAvL2NvbnNvbGUubG9nKGlucHV0cyk7XG59IC8vIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEdldCBhcnJheSBvZiB2YWx1ZXMgdGhhdCBhcmUgcHV0IHRvIHdhc20tZnVuY3Rpb24uXG5mdW5jdGlvbiBnZXRBcnJPZldhc21QYXJhbXMoaW5wdXRzKSB7XG4gICAgbGV0IHBhcmFtcyA9IFtdO1xuXG4gICAgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mUm93cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnMgJiBuZXcgY29sdW1uc1xuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mUm93cyk7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZDb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG59IC8vIGdldEFyck9mV2FzbVBhcmFtc1xuXG4vLyBHZXQgYXJyYXkgb2YgdHlwZXMgdGhhdCBhcmUgcHV0IHRvIHdhc20tZnVuY3Rpb24uXG5mdW5jdGlvbiBnZXRBcnJPZldhc21UeXBlcyhpbnB1dHMpIHtcbiAgICBsZXQgdHlwZXMgPSBbXTtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnMgJiBuZXcgY29sdW1uc1xuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlcztcbn0gLy8gZ2V0QXJyT2ZXYXNtVHlwZXNcblxuLy8gUHV0IGFycmF5IGRhdGEgdG8gYnVmZmVyXG5mdW5jdGlvbiBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBsZXQgc2hpZnQ7XG4gICAgbGV0IGhlYXA7ICAgIFxuICAgIFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07ICBcbiAgICAgICAgICAgICAgICBoZWFwLnNldChhcmcuZGF0YS5hcnJheSwgYXJnLmRhdGEuYnVmID4+IHNoaWZ0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uc1xuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgICAgICBsZXQgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZkNvbHVtbnMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gYXJnLmRhdGEuYXJyYXlzO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG51bU9mQ29sdW1uczsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBoZWFwLnNldChhcnJheXNbaV0sIChidWYgKyBpICogbnVtT2ZSb3dzICogbnVtT2ZCeXRlcykgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59IC8vIHB1dERhdGFUb0J1ZmZlclxuXG4vLyBHZXQgYXJyYXkgZGF0YSBmcm9tIGJ1ZmZlci5cbmZ1bmN0aW9uIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG5cbiAgICBsZXQgaGVhcDtcbiAgICBsZXQgbnVtT2ZSb3dzO1xuICAgIGxldCBudW1PZkNvbHM7XG4gICAgbGV0IG51bU9mQnl0ZXM7ICAgIFxuICAgIGxldCBidWY7XG5cbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgXG4gICAgICAgICAgICAgICAgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKG51bU9mUm93cyk7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgal07XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXkgPSBhcnJheTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uc1xuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogXG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbnVtT2ZDb2xzID0gYXJnLmRhdGEubnVtT2ZDb2x1bW5zO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG51bU9mQ29sczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKG51bU9mUm93cyk7XG5cbiAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICAgICAgYXJyW2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgaiArIGkgKiBudW1PZlJvd3NdOyAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGFycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXJnLmFycmF5cyA9IGFycmF5cztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0gICAgICAgICAgICBcbn0gLy8gZ2V0RGF0YUZyb21CdWZmZXJcblxuLy8gQ2xlYXIgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYXJyYXkgZGF0YVxuZnVuY3Rpb24gY2xlYXJNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykgXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSkgeyAvLyBwcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gZWFjaCBub24tbnVtYmVyIGNhc2VcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2ZyZWUoYXJnLmRhdGEuYnVmKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICAgIFxufSAvLyBjbGVhck1lbW9yeUZvckJ1ZmZlclxuXG4vLyBFeHRyYWN0IG5ld2x5IGNyZWF0ZWQgZGF0YTogbmV3IGNvbHVtbihzKSBhcmUgY3JlYXRlZFxuZnVuY3Rpb24gZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzLCBhcmdzQWZ0ZXJXYXNtQ2FsbCkge1xuICAgIC8vIHR5cGUtdG8tY29sdW1uX2NyZWF0b3IgbWFwXG4gICAgY29uc3QgdHlwZVRvQ29sdW1uQ3JlYXRvck1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IERHLkNvbHVtbi5mcm9tSW50MzJBcnJheX07XG5cbiAgICBsZXQgaSA9IDA7XG5cbiAgICBmb3IoY29uc3Qga2V5IGluIGZ1bmNTcGVjaWZpY2F0aW9uQXJncykgXG4gICAge1xuICAgICAgICBjb25zdCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbkFyZ3Nba2V5XTtcblxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpeyAvLyBQcm9jZXNzIGVhY2ggdHlwZVxuXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IG5hbWU7XG5cbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZ5IG5hbWUgZm9yIGNvbHVtblxuICAgICAgICAgICAgICAgIGlmKGFyZy5uYW1lID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICgwKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGVsc2UgXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzID0gYXJnLm5hbWU7XG5cbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFthcmcudHlwZV0obmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uc1xuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBsZW5ndGggPSBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgbGV0IG5hbWVzID0gW107XG5cbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZ5IG5hbWUgZm9yIGNvbHVtblxuICAgICAgICAgICAgICAgIGlmKGFyZy5uYW1lcyA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgayA9IDE7IGsgPD0gbGVuZ3RoOyBrKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKChrKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBlbHNlIG5hbWVzID0gYXJnLm5hbWVzO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godHlwZVRvQ29sdW1uQ3JlYXRvck1hcFthcmcudHlwZV0obmFtZXNbal0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheXNbal0pKTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW5zID0gY29sdW1ucztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgfVxufSAvLyBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YVxuXG4vLyBHZXQgb3V0cHV0IGRhdGE6IG92ZXJhbGwgb3V0cHV0IGlzIGNyZWF0ZWRcbmZ1bmN0aW9uIGdldE91dHB1dChmdW5jU3BlY2lmaWNhdGlvbikgeyAgXG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcbiAgICBcbiAgICBjb25zdCB0eXBlVG9EYXRhRmllbGRNYXAgPSB7J25ld0Zsb2F0Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogJ2NvbHVtbid9O1xuXG4gICAgc3dpdGNoKG91dHB1dC50eXBlKSB7XG5cbiAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbb3V0cHV0LnNvdXJjZV07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENPTFVNTjpcbiAgICAgICAgICAgIHJldHVybiBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbb3V0cHV0LnNvdXJjZV0uY29sdW1uO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUQUJMRV9PRl9DT0xVTU5TOlxuICAgICAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbb3V0cHV0LnNvdXJjZV0uY29sdW1ucyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE9CSkVDVFM6XG4gICAgICAgICAgICBsZXQgYXJyYXlUb1JldHVybiA9IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBwdXNoIGRhdGEgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50c1xuICAgICAgICAgICAgZm9yKGxldCBuYW1lIG9mIG91dHB1dC5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnID0gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW25hbWVdO1xuICAgICAgICAgICAgICAgIGFycmF5VG9SZXR1cm4ucHVzaChhcmdbdHlwZVRvRGF0YUZpZWxkTWFwW2FyZy50eXBlXV0pO1xuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgcmV0dXJuIGFycmF5VG9SZXR1cm47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG59IC8vIGdldE91dHB1dFxuXG4vLyBDbGVhciBuZXdseSBjcmVhdGVkIGRhdGEgZmllbGRzIChuZXcgY29sdW1uKHMpKVxuZnVuY3Rpb24gY2xlYXJOZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uQXJncykgeyBcbiAgICBmb3IoY29uc3Qga2V5IGluIGZ1bmNTcGVjaWZpY2F0aW9uQXJncykge1xuICAgICAgICBjb25zdCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbkFyZ3Nba2V5XTtcblxuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbiA9IG51bGw7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW5zID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gY2xlYXJOZXdseUNyZWF0ZWREYXRhXG5cbi8vIFRIRSBNQUlOIEZVTkNUSU9OOiBhIHdyYXBwZXIgZm9yIEMrKy1mdW5jdGlvbiBjYWxsXG5leHBvcnQgZnVuY3Rpb24gY3BwV3JhcHBlcihtb2R1bGUsIGFyZ3MsIGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlKSB7XG4gICAgLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBhcnJheXMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvLyBwdXQgZGF0YSAoanVzdCBjb2x1bW4ocykpIHRvIGFsbG9jYXRlZCBidWZmZXJzXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvLyBjcmVhdGUgYXJyYXkgb2YgcGFyYW1ldGVycyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHBhcmFtcyA9IGdldEFyck9mV2FzbVBhcmFtcyhhcmdzKTtcblxuICAgIC8vY29uc29sZS5sb2coJ3BhcmFtczonKTtcbiAgICAvL2NvbnNvbGUubG9nKHBhcmFtcyk7XG5cbiAgICAvLyBjcmVhdGUgYXJyYXkgb2YgcGFyYW1ldGVycycgdHlwZXMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGxldCB0eXBlcyA9IGdldEFyck9mV2FzbVR5cGVzKGFyZ3MpO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2coJ3R5cGVzOicpO1xuICAgIC8vY29uc29sZS5sb2codHlwZXMpO1xuXG4gICAgLy8gY2FsbCB3YXNtLWZ1bmN0aW9uXG4gICAgbGV0IHJlc3VsdCA9IG1vZHVsZS5jY2FsbChjcHBGdW5jTmFtZSwgcmV0dXJuVHlwZSwgdHlwZXMsIHBhcmFtcyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZyhyZXN1bHQpO1xuXG4gICAgLy8gZ2V0IGRhdGEgZnJvbSBidWZmZXJzIChqdXN0IGNvbHVtbihzKSlcbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUsIGFyZ3MpOyAgICAgICAgXG5cbiAgICAvLyBjbGVhciBtZW1vcnkgdGhhdCB3YXMgcHJldmlvdXNlbHkgYWxsb2NhdGVkXG4gICAgY2xlYXJNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vY29uc29sZS5sb2coJ2RvbmUnKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldCB0aGUgcmVxdWlyZWQgb3V0cHV0LlxuLy8gSXQgdGFrZXMgYSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGRhdGEgY29tcHV0ZWRcbi8vIGFuZCBleHRyYWN0cyB0aGUgcmVxdWlyZWQgcmVzdWx0cy5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXN1bHQoZnVuY1NwZWNpZmljYXRpb24sIGRhdGFGcm9tV2ViV29ya2VyKSB7XG4gICAgZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzLl9jYWxsUmVzdWx0ID0gZGF0YUZyb21XZWJXb3JrZXIuY2FsbFJlc3VsdDsgIFxuXG4gICAgZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzLCBkYXRhRnJvbVdlYldvcmtlci5hcmdzKTsgICAgXG5cbiAgICBsZXQgb3V0UHV0ID0gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKTtcblxuICAgIC8vIEJlbG93LCB3ZSByZW1vdmUgbmV3bHkgY3JlYXRlZCBjb2x1bW4ocyksIHdoaWNoIGFyZSBjcmVhdGVkIGF0IHRoZSBleHRyYWN0aW9uLXN0ZXAuXG4gICAgLy8gSXQgaXMgZXNwZWNpYWxseSByZXF1aXJlZCwgd2hlbiBtdWx0aXBsZSBjYWxsIG9mIHdhc20tZnVuY3Rpb25zIGluIHdlYndvcmtlci5cbiAgICBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzKTtcblxuICAgIHJldHVybiBvdXRQdXQ7XG59IiwiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIElucHV0cyBjb3JyZWN0bmVzcyBjaGVjayB0b29sc1xuLy9MaW1pdGF0aW9uIGNvbnN0YW50c1xuY29uc3QgQ09NUF9NSU4gPSAxO1xuY29uc3QgU0FNUExFU19DT1VOVF9NSU4gPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IFBFUkNFTlRBR0VfTUlOID0gMDtcbmNvbnN0IFBFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgTUFYX0VMRU1FTlRTX0NPVU5UID0gMTAwMDAwMDAwO1xuLy8gRXJyb3IgbWVzc2FnZXNcbmNvbnN0IENPTVBfUE9TSVRWRV9NRVMgPSAnY29tcG9uZW50cyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBDT01QX0VYQ0VTUyA9ICdjb21wb25lbnRzIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBmZWF0dXJlcyBjb3VudC4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMgPSAnbWluIG11c3QgYmUgbGVzcyB0aGFuIG1heC4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTID0gJ2ZlYXR1cmVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SRVJSRUNUX1NBTVBMRVNfTUVTID0gJ3NhbXBsZXMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfUEVSQ0VOVEFHRV9NRVMgPSAndmlvbGF0b3JzIHBlcmNlbnRhZ2UgbXVzdCBiZSBmcm9tIHRoZSByYW5nZSBmcm9tIDAgdG8gMTAwLic7XG5jb25zdCBEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMgPSAnZGF0YWZyYW1lIGlzIHRvbyBiaWcuJztcbmNvbnN0IFVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFX01FUyA9ICd1bnN1cHBvcnRlZCBjb2x1bW4gdHlwZTogJztcbmNvbnN0IElOQ09SUkVDVF9NSU5fRElTVF9NRVMgPSAnbWluIGRpc3RhbmNlIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SUkVDVF9TUFJFQURfTUVTID0gJ3NwcmVhZCBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUlJFQ1RfRVBPQ0hfTUVTID0gJ251bWJlciBvZiBlcG9jaCBtdXN0IGJlIGF0IGxlYXN0IDEuJztcbmNvbnN0IElOQ09SUkVDVF9ORUlCT1JTX01FUyA9ICdudW1iZXIgb2YgbmVpYm9ycyBtdXN0IGJlIGF0IGxlYXN0IDIgYW5kIG5vdCBncmVhdGVyIHRoYW4gc2FtcGxlcyBjb3VudC4nO1xuY29uc3QgSU5DT1JSRUNUX0lURVJBVElPTlNfTUVTID0gJ251bWJlciBvZiBpdGVyYXRpb25zIG11c3QgYmUgYXQgbGVhc3QgMS4nO1xuY29uc3QgSU5DT1JSRUNUX0xFQVJOSU5HX1JBVEVfTUVTID0gJ2xlYXJuaW5nIHJhdGUgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JSRUNUX1BFUlBMRVhJVFlfTUVTID0gJ3BlcnBsZXhpdHkgbXVzdCBiZSBhdCBsZWFzdCAyIGFuZCBub3QgZ3JlYXRlciB0aGFuIHNhbXBsZXMgY291bnQuJztcbmNvbnN0IElOQ09SUkVDVF9TVEVQU19NRVMgPSAnc3RlcHMgbXVzdCBiZSBub24tbmVnYXRpdmUuJztcbmNvbnN0IElOQ09SUkVDVF9DWUNMRVNfTUVTID0gJ2N5Y2xlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUlJFQ1RfQ1VUT0ZGX01FUyA9ICdjdXRvZmYgbXVzdCBiZSBub24tbmVnYXRpdmUuJztcbi8qKiBDaGVjayBjb2x1bW4gdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ29sdW1uVHlwZShjb2wpIHtcbiAgICBpZiAoKGNvbC50eXBlICE9IERHLkNPTFVNTl9UWVBFLkZMT0FUKSAmJiAoY29sLnR5cGUgIT0gREcuQ09MVU1OX1RZUEUuSU5UKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFX01FUyArIGNvbC50eXBlKTtcbn1cbi8qKiBDaGVjayBtaXNzaW5nIHZhbHVlcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTWlzc2luZ1ZhbHMoY29sKSB7XG4gICAgaWYgKGNvbC5zdGF0cy5taXNzaW5nVmFsdWVDb3VudCA+IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNvbHVtbiAnJHtjb2wubmFtZX0nIGhhcyBtaXNzaW5nIHZhbHVlcy5gKTtcbn1cbi8vIENoZWNrIGRpbWVuc2lvbiByZWR1Y2VyIGlucHV0c1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cykge1xuICAgIGlmIChjb21wb25lbnRzIDwgQ09NUF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihDT01QX1BPU0lUVkVfTUVTKTtcbiAgICBpZiAoY29tcG9uZW50cyA+IGZlYXR1cmVzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfRVhDRVNTKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcykge1xuICAgICAgICBjaGVja0NvbHVtblR5cGUoY29sKTtcbiAgICAgICAgY2hlY2tNaXNzaW5nVmFscyhjb2wpO1xuICAgIH1cbn1cbi8vIENoZWNrIFVNQVAgaW5wdXRzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tVTUFQaW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzLCBlcG9jaHMsIG5laWdoYm9ycywgbWluRGlzdCwgc3ByZWFkKSB7XG4gICAgLy8gR2VuZXJhbCBkaW0gcmVkdWNlciBjaGVja3NcbiAgICBjaGVja0RpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgIC8vIENoZWNrIGRhdGEgdG90YWwgc2l6ZVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG4gICAgLy8gVU1BUCBzcGVjaWZpYyBjaGVja3NcbiAgICBpZiAobWluRGlzdCA8PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX01JTl9ESVNUX01FUyk7XG4gICAgaWYgKHNwcmVhZCA8PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX1NQUkVBRF9NRVMpO1xuICAgIGlmIChlcG9jaHMgPCAxKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX0VQT0NIX01FUyk7XG4gICAgaWYgKChuZWlnaGJvcnMgPCAyKSB8fCAobmVpZ2hib3JzID4gZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX05FSUJPUlNfTUVTKTtcbn1cbi8vIENoZWNrIHQtU05FIGlucHV0c1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVFNORWlucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cywgbGVhcm5pbmdSYXRlLCBwZXJwbGV4aXR5LCBpdGVyYXRpb25zKSB7XG4gICAgLy8gR2VuZXJhbCBkaW0gcmVkdWNlciBjaGVja3NcbiAgICBjaGVja0RpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgIC8vIENoZWNrIGRhdGEgdG90YWwgc2l6ZVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG4gICAgLy8gdC1TTkUgc3BlY2lmaWMgY2hlY2tzXG4gICAgaWYgKGxlYXJuaW5nUmF0ZSA8IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfTEVBUk5JTkdfUkFURV9NRVMpO1xuICAgIGlmIChpdGVyYXRpb25zIDwgMSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9JVEVSQVRJT05TX01FUyk7XG4gICAgaWYgKChwZXJwbGV4aXR5IDwgMikgfHwgKHBlcnBsZXhpdHkgPiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfUEVSUExFWElUWV9NRVMpO1xufVxuLy8gQ2hlY2sgU1BFIGlucHV0c1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU1BFaW5wdXRzKGZlYXR1cmVzLCBkaW1lbnNpb24sIHN0ZXBzLCBjeWNsZXMsIGN1dG9mZiwgbGFtYmRhKSB7XG4gICAgLy8gR2VuZXJhbCBkaW0gcmVkdWNlciBjaGVja3NcbiAgICBjaGVja0RpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGRpbWVuc2lvbik7XG4gICAgLy8gQ2hlY2sgZGF0YSB0b3RhbCBzaXplXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCAqIGZlYXR1cmVzLmJ5SW5kZXgoMCkubGVuZ3RoID4gTUFYX0VMRU1FTlRTX0NPVU5UKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTKTtcbiAgICAvLyBTUEUgc3BlY2lmaWMgY2hlY2tzXG4gICAgaWYgKHN0ZXBzIDwgMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9TVEVQU19NRVMpO1xuICAgIGlmIChjeWNsZXMgPD0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9DWUNMRVNfTUVTKTtcbiAgICBpZiAoY3V0b2ZmIDwgMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9DVVRPRkZfTUVTKTtcbiAgICBpZiAobGFtYmRhIDw9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfTEVBUk5JTkdfUkFURV9NRVMpO1xufVxuLy8gQ2hlY2sgd2FzbSBkaW1lbnNpb24gcmVkdWNlciBpbnB1dHNcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKSB7XG4gICAgLy8gR2VuZXJhbCBkaW0gcmVkdWNlciBjaGVja3NcbiAgICBjaGVja0RpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgIC8vIENoZWNrIGRhdGEgdG90YWwgc2l6ZVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG59XG4vLyBDaGVjayBpbnB1dHMgb2YgZGF0YSBmb3IgU1ZNIHRlc3RpbmcgZ2VuZXJhdG9yXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIGlmIChtaW4gPj0gbWF4KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMpO1xuICAgIGlmIChmZWF0dXJlc0NvdW50IDwgRkVBVFVSRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTKTtcbiAgICBpZiAoc2FtcGxlc0NvdW50IDwgU0FNUExFU19DT1VOVF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyk7XG4gICAgaWYgKCh2aW9sYXRvcnNQZXJjZW50YWdlIDwgUEVSQ0VOVEFHRV9NSU4pIHx8ICh2aW9sYXRvcnNQZXJjZW50YWdlID4gUEVSQ0VOVEFHRV9NQVgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfUEVSQ0VOVEFHRV9NRVMpO1xufVxuLy8gUmV0dXJucyByb3dzIG9mIGNvbHVtbiBkYXRhXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93c09mTnVtZXJpY2FsQ29sdW1ubnMoY29sdW1uTGlzdCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5MaXN0LnRvTGlzdCgpO1xuICAgIGNvbnN0IHJvd0NvdW50ID0gY29sdW1uc1swXS5sZW5ndGg7XG4gICAgY29uc3QgY29sQ291bnQgPSBjb2x1bW5zLmxlbmd0aDtcbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpXG4gICAgICAgIG91dHB1dC5wdXNoKEFycmF5KGNvbENvdW50KSk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xDb3VudDsgKytqKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbal07XG4gICAgICAgIGNoZWNrQ29sdW1uVHlwZShjb2wpO1xuICAgICAgICBjb25zdCBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7ICsraSlcbiAgICAgICAgICAgIG91dHB1dFtpXVtqXSA9IGFycmF5W2ldO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLy8gRXhwbG9yYXRvcnkgZGF0YSBhbmFseXNpcyAoRURBKSB0b29sc1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIsIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzLCBjaGVja1VNQVBpbnB1dHMsIGNoZWNrVFNORWlucHV0cywgZ2V0Um93c09mTnVtZXJpY2FsQ29sdW1ubnMgfSBmcm9tICcuL3V0aWxzJztcbi8vIFByaW5jaXBhbCBjb21wb25lbnRzIGFuYWx5c2lzIChQQ0EpXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgY2VudGVyTnVtID0gY2VudGVyID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IHNjYWxlTnVtID0gc2NhbGUgPyAxIDogMDtcbiAgICAgICAgcmV0dXJuIHlpZWxkIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyTnVtLCBzY2FsZU51bSk7XG4gICAgfSk7XG59XG4vLyBQYXJ0aWFsIGxlYXN0IHNxdWFyZSByZWdyZXNzaW9uIChQTFMpOiBUTyBSRU1PVkVcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUExTKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIElucHV0cyBhcmUgY2hlY2tlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgaW4gUENBLCBzaW5jZSB0aGUgc2FtZSBjb21wdXRhdGlvbnMgYXJlIGFwcGxpZWQuXG4gICAgICAgIGNoZWNrV2FzbURpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgICAgICByZXR1cm4geWllbGQgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpO1xuICAgIH0pO1xufVxuLy8gVW5pZm9ybSBNYW5pZm9sZCBBcHByb3hpbWF0aW9uIGFuZCBQcm9qZWN0aW9uIChVTUFQKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVVTUFQKGZlYXR1cmVzLCBjb21wb25lbnRzLCBlcG9jaHMsIG5laWdoYm9ycywgbWluRGlzdCwgc3ByZWFkKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrVU1BUGlucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cywgZXBvY2hzLCBuZWlnaGJvcnMsIG1pbkRpc3QsIHNwcmVhZCk7XG4gICAgICAgIC8vIGdldCByb3ctYnktcm93IGRhdGFcbiAgICAgICAgY29uc3QgZGF0YSA9IGdldFJvd3NPZk51bWVyaWNhbENvbHVtbm5zKGZlYXR1cmVzKTtcbiAgICAgICAgbGV0IHdvcmtlck91dHB1dDtcbiAgICAgICAgLy8gVU1BUCBpbiB3ZWJ3b3JrZXJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJ3dvcmtlcnMvdW1hcC13b3JrZXIudHMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG5Db21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgICAgICAgICBuRXBvY2hzOiBlcG9jaHMsXG4gICAgICAgICAgICAgICAgICAgIG5OZWlnaGJvcnM6IG5laWdoYm9ycyxcbiAgICAgICAgICAgICAgICAgICAgbWluRGlzdDogbWluRGlzdCxcbiAgICAgICAgICAgICAgICAgICAgc3ByZWFkOiBzcHJlYWQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShlLmRhdGEuZW1iZWRkaW5ncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgeWllbGQgcHJvbWlzZS50aGVuKChyZXN1bHQpID0+IHsgd29ya2VyT3V0cHV0ID0gcmVzdWx0OyB9LCAoX2Vycm9yKSA9PiB7IHRocm93IG5ldyBFcnJvcignYXBwbHlpbmcgVU1BUCBmYWlscy4nKTsgfSk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSB3b3JrZXJPdXRwdXQ7XG4gICAgICAgIGNvbnN0IHJvd0NvdW50ID0gZW1iZWRkaW5ncy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gWy4uLkFycmF5KGNvbXBvbmVudHMpLmtleXMoKV07XG4gICAgICAgIC8vIENyZWF0ZSBvdXRwdXRcbiAgICAgICAgLy8gY29sdW1ucyBkYXRhXG4gICAgICAgIGNvbnN0IHVtYXBDb2x1bW5zRGF0YSA9IHJhbmdlLm1hcCgoXykgPT4gbmV3IEZsb2F0MzJBcnJheShyb3dDb3VudCkpO1xuICAgICAgICAvLyBwZXJmb3JtIHRyYW5zcG9uYXRpb25cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgKytpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbXBvbmVudHM7ICsrailcbiAgICAgICAgICAgICAgICB1bWFwQ29sdW1uc0RhdGFbal1baV0gPSBlbWJlZGRpbmdzW2ldW2pdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMocmFuZ2UubWFwKChpKSA9PiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnVU1BUCcgKyBpLnRvU3RyaW5nKCksIHVtYXBDb2x1bW5zRGF0YVtpXSkpKTtcbiAgICB9KTtcbn0gLy8gY29tcHV0ZVVNQVBcbi8vIHQtZGlzdHJpYnV0ZWQgc3RvY2hhc3RpYyBuZWlnaGJvciBlbWJlZGRpbmcgKHQtU05FKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVUU05FKGZlYXR1cmVzLCBjb21wb25lbnRzLCBsZWFybmluZ1JhdGUsIHBlcnBsZXhpdHksIGl0ZXJhdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBjaGVjayBpbnB1dHNcbiAgICAgICAgY2hlY2tUU05FaW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzLCBsZWFybmluZ1JhdGUsIHBlcnBsZXhpdHksIGl0ZXJhdGlvbnMpO1xuICAgICAgICAvLyBnZXQgcm93LWJ5LXJvdyBkYXRhXG4gICAgICAgIGNvbnN0IGRhdGEgPSBnZXRSb3dzT2ZOdW1lcmljYWxDb2x1bW5ucyhmZWF0dXJlcyk7XG4gICAgICAgIGxldCB3b3JrZXJPdXRwdXQ7XG4gICAgICAgIC8vIHQtU05FIGluIHdlYndvcmtlclxuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnd29ya2Vycy90c25lLXdvcmtlci50cycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmdSYXRlOiBsZWFybmluZ1JhdGUsXG4gICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHk6IHBlcnBsZXhpdHksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShlLmRhdGEuZW1iZWRkaW5ncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgeWllbGQgcHJvbWlzZS50aGVuKChyZXN1bHQpID0+IHsgd29ya2VyT3V0cHV0ID0gcmVzdWx0OyB9LCAoX2Vycm9yKSA9PiB7IHRocm93IG5ldyBFcnJvcignYXBwbHlpbmcgdC1TTkUgZmFpbHMuJyk7IH0pO1xuICAgICAgICBjb25zdCBlbWJlZGRpbmdzID0gd29ya2VyT3V0cHV0O1xuICAgICAgICBjb25zdCByb3dDb3VudCA9IGVtYmVkZGluZ3MubGVuZ3RoO1xuICAgICAgICBjb25zdCByYW5nZSA9IFsuLi5BcnJheShjb21wb25lbnRzKS5rZXlzKCldO1xuICAgICAgICAvLyBDcmVhdGUgb3V0cHV0XG4gICAgICAgIC8vIGNvbHVtbnMgZGF0YVxuICAgICAgICBjb25zdCB1bWFwQ29sdW1uc0RhdGEgPSByYW5nZS5tYXAoKF8pID0+IG5ldyBGbG9hdDMyQXJyYXkocm93Q291bnQpKTtcbiAgICAgICAgLy8gcGVyZm9ybSB0cmFuc3BvbmF0aW9uXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7ICsraSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb21wb25lbnRzOyArK2opXG4gICAgICAgICAgICAgICAgdW1hcENvbHVtbnNEYXRhW2pdW2ldID0gZW1iZWRkaW5nc1tpXVtqXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKHJhbmdlLm1hcCgoaSkgPT4gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3RTTkUnICsgaS50b1N0cmluZygpLCB1bWFwQ29sdW1uc0RhdGFbaV0pKSk7XG4gICAgfSk7XG59IC8vIGNvbXB1dGVUU05FXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vLyBUZXN0IGRhdGEgZ2VuZXJhdGlvbiB0b29sc1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmNvbnN0IFNWTV9HRU5fRkVBVFVSRVNfSU5ERVggPSAwO1xuY29uc3QgU1ZNX0dFTl9MQUJFTFNfSU5ERVggPSAxO1xuY29uc3QgU1ZNX0ZFQVRVUkVfTkFNRSA9ICdGZWF0dXJlICMnO1xuY29uc3QgU1ZNX0xBQkVMX05BTUUgPSAnTGFiZWwnO1xuLy8gUmV0dXJucyB0aGUgZGF0YWZyYW1lIFwiY2Fyc1wiXG5leHBvcnQgZnVuY3Rpb24gY2Fyc0RhdGFmcmFtZSgpIHtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCdtb2RlbCcsIFsnYWxmYXJvbWVvJywgJ2F1ZGknLCAnYm13JywgJ2NoZXZyb2xldCcsICdkb2RnZTEnLCAnZG9kZ2UyJywgJ2hvbmRhMScsICdob25kYTInLCAnaXN1enUnLCAnamFndWFyJywgJ21hemRhJywgJ21lcmNlZGVzJywgJ21lcmN1cnknLCAnbWl0c3ViaXNoaScsICduaXNzYW4xJywgJ25pc3NhbjInLCAncGV1Z290JywgJ3BseW1vdXRoJywgJ3BvcnNjaGUnLCAnc2FhYicsICdzdWJhcnUnLCAndG95b3RhMScsICd0b3lvdGEyJywgJ3RveW90YTMnLCAndG95b3RhNCcsICd2b2xrc3dhZ2VuMScsICd2b2xrc3dhZ2VuMicsICd2b2x2bzEnLCAndm9sdm8yJywgJ3ZvbHZvMyddKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdkaWVzZWwnLCBuZXcgSW50MzJBcnJheShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCd0dXJibycsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R3by5kb29ycycsIG5ldyBJbnQzMkFycmF5KFsxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hhdGNoYmFjaycsIG5ldyBJbnQzMkFycmF5KFsxLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2hlZWwuYmFzZScsIG5ldyBGbG9hdDMyQXJyYXkoWzk0LjUsIDEwNS44MDAwMDMwNTE3NTc4MSwgMTAxLjE5OTk5Njk0ODI0MjE5LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5Ni41LCA5NC4zMDAwMDMwNTE3NTc4MSwgMTEzLCA5My4wOTk5OTg0NzQxMjExLCAxMTUuNTk5OTk4NDc0MTIxMSwgMTAyLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTQuNSwgOTQuNSwgOTMuNjk5OTk2OTQ4MjQyMTksIDExNC4xOTk5OTY5NDgyNDIxOSwgODkuNSwgOTkuMDk5OTk4NDc0MTIxMSwgOTcuMTk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5NS42OTk5OTY5NDgyNDIxOSwgOTguNDAwMDAxNTI1ODc4OSwgMTAyLjQwMDAwMTUyNTg3ODksIDk3LjMwMDAwMzA1MTc1NzgxLCAxMDAuNDAwMDAxNTI1ODc4OSwgMTA0LjMwMDAwMzA1MTc1NzgxLCAxMDkuMDk5OTk4NDc0MTIxMSwgMTA5LjA5OTk5ODQ3NDEyMTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCdsZW5ndGgnLCBuZXcgRmxvYXQzMkFycmF5KFsxNzEuMTk5OTk2OTQ4MjQyMiwgMTkyLjY5OTk5Njk0ODI0MjIsIDE3Ni44MDAwMDMwNTE3NTc4LCAxNTguODAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNTAsIDE3NS4zOTk5OTM4OTY0ODQzOCwgMTcwLjY5OTk5Njk0ODI0MjIsIDE5OS42MDAwMDYxMDM1MTU2MiwgMTY2LjgwMDAwMzA1MTc1NzgsIDIwMi42MDAwMDYxMDM1MTU2MiwgMTc4LjM5OTk5Mzg5NjQ4NDM4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTcwLjE5OTk5Njk0ODI0MjIsIDE2NS4zMDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTk4Ljg5OTk5Mzg5NjQ4NDM4LCAxNjguODk5OTkzODk2NDg0MzgsIDE4Ni42MDAwMDYxMDM1MTU2MiwgMTcyLCAxNTguNjk5OTk2OTQ4MjQyMiwgMTY2LjMwMDAwMzA1MTc1NzgsIDE3Ni4xOTk5OTY5NDgyNDIyLCAxNzUuNjAwMDA2MTAzNTE1NjIsIDE3MS42OTk5OTY5NDgyNDIyLCAxODAuMTk5OTk2OTQ4MjQyMiwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4LCAxODguODAwMDAzMDUxNzU3OF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3dpZHRoJywgbmV3IEZsb2F0MzJBcnJheShbNjUuNSwgNzEuNDAwMDAxNTI1ODc4OSwgNjQuODAwMDAzMDUxNzU3ODEsIDYzLjU5OTk5ODQ3NDEyMTA5NCwgNjMuNzk5OTk5MjM3MDYwNTUsIDYzLjc5OTk5OTIzNzA2MDU1LCA2NCwgNjUuMTk5OTk2OTQ4MjQyMTksIDYxLjc5OTk5OTIzNzA2MDU1LCA2OS41OTk5OTg0NzQxMjExLCA2NC4xOTk5OTY5NDgyNDIxOSwgNzEuNjk5OTk2OTQ4MjQyMTksIDY4LCA2NC40MDAwMDE1MjU4Nzg5LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDYzLjc5OTk5OTIzNzA2MDU1LCA2OC40MDAwMDE1MjU4Nzg5LCA2NSwgNjYuNSwgNjUuNDAwMDAxNTI1ODc4OSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2NC40MDAwMDE1MjU4Nzg5LCA2NS41OTk5OTg0NzQxMjExLCA2Ni41LCA2NS41LCA2Ni45MDAwMDE1MjU4Nzg5LCA2Ny4xOTk5OTY5NDgyNDIxOSwgNjguODAwMDAzMDUxNzU3ODEsIDY4LjkwMDAwMTUyNTg3ODldKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCdoZWlnaHQnLCBuZXcgRmxvYXQzMkFycmF5KFs1Mi40MDAwMDE1MjU4Nzg5MDYsIDU1LjcwMDAwMDc2MjkzOTQ1LCA1NC4yOTk5OTkyMzcwNjA1NSwgNTIsIDUwLjc5OTk5OTIzNzA2MDU1LCA1MC41OTk5OTg0NzQxMjEwOTQsIDUyLjU5OTk5ODQ3NDEyMTA5NCwgNTQuMDk5OTk4NDc0MTIxMDk0LCA1My41LCA1Mi43OTk5OTkyMzcwNjA1NSwgNTQuMDk5OTk4NDc0MTIxMDk0LCA1Ni4yOTk5OTkyMzcwNjA1NSwgNTQuNzk5OTk5MjM3MDYwNTUsIDUwLjc5OTk5OTIzNzA2MDU1LCA1My41LCA1NC41LCA1MC41OTk5OTg0NzQxMjEwOTQsIDU4LjcwMDAwMDc2MjkzOTQ1LCA1MS41OTk5OTg0NzQxMjEwOTQsIDU2LjA5OTk5ODQ3NDEyMTA5NCwgNTIuNSwgNTQuNSwgNTMsIDUyLCA1NC45MDAwMDE1MjU4Nzg5MDYsIDU1LjcwMDAwMDc2MjkzOTQ1LCA1NS4wOTk5OTg0NzQxMjEwOTQsIDU2LjIwMDAwMDc2MjkzOTQ1LCA1NS41LCA1NS41XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2N1cmIud2VpZ2h0JywgbmV3IEludDMyQXJyYXkoWzI4MjMsIDI4NDQsIDIzOTUsIDE5MDksIDIxMjgsIDE5NjcsIDE5NTYsIDIzMDQsIDIzMzcsIDQwNjYsIDE5NTAsIDM3NzAsIDI5MTAsIDE5MTgsIDIwMjQsIDE5NTEsIDE5NjcsIDM0MzAsIDI4MDAsIDI2OTUsIDIxOTAsIDE5ODUsIDIyNzUsIDI1NTEsIDI0ODAsIDIyNjEsIDI2NjEsIDI5MTIsIDMwNDksIDMyMTddKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnZW5nLnNpemUnLCBuZXcgSW50MzJBcnJheShbMTUyLCAxMzYsIDEwOCwgOTAsIDk4LCA5MCwgOTIsIDExMCwgMTExLCAyNTgsIDkxLCAxODMsIDE0MCwgOTIsIDk3LCA5NywgOTAsIDE1MiwgMTk0LCAxMjEsIDEwOCwgOTIsIDExMCwgMTQ2LCAxMTAsIDk3LCAxMzYsIDE0MSwgMTQxLCAxNDVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaG9yc2Vwb3dlcicsIG5ldyBJbnQzMkFycmF5KFsxNTQsIDExMCwgMTAxLCA3MCwgMTAyLCA2OCwgNzYsIDg2LCA3OCwgMTc2LCA2OCwgMTIzLCAxNzUsIDY4LCA2OSwgNjksIDY4LCA5NSwgMjA3LCAxMTAsIDgyLCA2MiwgNTYsIDExNiwgNzMsIDUyLCAxMTAsIDExNCwgMTYwLCAxMDZdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgncGVhay5ycG0nLCBuZXcgSW50MzJBcnJheShbNTAwMCwgNTUwMCwgNTgwMCwgNTQwMCwgNTUwMCwgNTUwMCwgNjAwMCwgNTgwMCwgNDgwMCwgNDc1MCwgNTAwMCwgNDM1MCwgNTAwMCwgNTUwMCwgNTIwMCwgNTIwMCwgNTUwMCwgNDE1MCwgNTkwMCwgNTI1MCwgNDQwMCwgNDgwMCwgNDUwMCwgNDgwMCwgNDUwMCwgNDgwMCwgNTUwMCwgNTQwMCwgNTMwMCwgNDgwMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdzeW1ib2wnLCBuZXcgSW50MzJBcnJheShbMSwgMSwgMiwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgLTEsIDEsIDIsIDEsIDEsIDEsIDAsIDMsIDIsIDAsIDEsIDAsIDIsIC0xLCAyLCAwLCAtMiwgLTEsIC0xXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2NpdHkubXBnJywgbmV3IEludDMyQXJyYXkoWzE5LCAxOSwgMjMsIDM4LCAyNCwgMzEsIDMwLCAyNywgMjQsIDE1LCAzMSwgMjIsIDE5LCAzNywgMzEsIDMxLCAzMSwgMjUsIDE3LCAyMSwgMjgsIDM1LCAzNCwgMjQsIDMwLCAzNywgMTksIDIzLCAxOSwgMjZdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGlnaHdheS5tcGcnLCBuZXcgSW50MzJBcnJheShbMjYsIDI1LCAyOSwgNDMsIDMwLCAzOCwgMzQsIDMzLCAyOSwgMTksIDM4LCAyNSwgMjQsIDQxLCAzNywgMzcsIDM4LCAyNSwgMjUsIDI4LCAzMywgMzksIDM2LCAzMCwgMzMsIDQ2LCAyNCwgMjgsIDI1LCAyN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwcmljZScsIG5ldyBJbnQzMkFycmF5KFsxNjUwMCwgMTc3MTAsIDE2NDMwLCA2NTc1LCA3OTU3LCA2MjI5LCA3MTI5LCA4ODQ1LCA2Nzg1LCAzNTU1MCwgNzM5NSwgMzE2MDAsIDE2NTAzLCA1Mzg5LCA3MzQ5LCA3Mjk5LCA2MjI5LCAxMzg2MCwgMzcwMjgsIDEyMTcwLCA3Nzc1LCA1MzQ4LCA3ODk4LCA5OTg5LCAxMDY5OCwgNzc3NSwgMTMyOTUsIDEyOTQwLCAxOTA0NSwgMjI0NzBdKSksXG4gICAgXSk7XG59IC8vIGNhcnNEYXRhZnJhbWVcbi8vIEdlbmVyYXRlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpZXJzXG5leHBvcnQgZnVuY3Rpb24gdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihrZXJuZWwsIGtlcm5lbFBhcmFtcywgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGlucHV0c1xuICAgICAgICBjaGVja0dlbmVyYXRvclNWTWlucHV0cyhzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICAgICAgLy8ga2VybmVsIHBhcmFtcyBjb2x1bW5cbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zQ29sID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCAna2VybmVsUGFyYW1zJywga2VybmVsUGFyYW1zKTtcbiAgICAgICAgLy8gQ0FMTCBXQVNNLUNPTVBVVEFUSU9OU1xuICAgICAgICBsZXQgX291dHB1dDtcbiAgICAgICAgY29uc3QgX3Byb21pc2UgPSBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXNDb2wsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKChfcmVzdWx0KSA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCAoX2Vycm9yKSA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgLy8gUmVuYW1lIGxhYmVscyBjb2x1bW5cbiAgICAgICAgX291dHB1dFtTVk1fR0VOX0xBQkVMU19JTkRFWF0ubmFtZSA9IFNWTV9MQUJFTF9OQU1FO1xuICAgICAgICAvLyBSZW5hbWUgZmVhdHVyZSBjb2x1bW5zXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIF9vdXRwdXRbU1ZNX0dFTl9GRUFUVVJFU19JTkRFWF0pXG4gICAgICAgICAgICBjb2wubmFtZSA9IFNWTV9GRUFUVVJFX05BTUUgKyBjb2wubmFtZTtcbiAgICAgICAgLy8gQ3JlYXRlIGRhdGFmcmFtZVxuICAgICAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKTtcbiAgICAgICAgZGYubmFtZSA9IG5hbWU7XG4gICAgICAgIGRmLmNvbHVtbnMuYWRkKF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdKTtcbiAgICAgICAgcmV0dXJuIGRmO1xuICAgIH0pO1xufSAvLyB0ZXN0RGF0YUZvck1hY2hpbmVMZWFybmluZ1xuIiwiLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuLy8gSmF2YVNjcmlwdCBBUEkgZm9yIGNhbGwgd2FzbS1mdW5jdGlvbnMgZnJvbSB0aGUgbW9kdWxlIEVEQVxuXG4vLyBJbXBvcnRzIGZvciBjYWxsIHdhc20gcnVudGltZS1zeXN0ZW06IGluIHRoZSBtYWluIHN0cmVhbSBhbmQgaW4gd2Vid29ya2Vyc1xuaW1wb3J0IHtjYWxsV2FzbX0gZnJvbSAnLi4vd2FzbS9jYWxsV2FzbSc7XG5pbXBvcnQge2dldENwcElucHV0LCBnZXRSZXN1bHR9IGZyb20gJy4uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2luaXRFREFBUEkoKSB7XG4gIGF3YWl0IGluaXRFREEoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyh0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcycsIFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyKHRhYmxlLCBjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW0pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc1dvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10uYXJndW1lbnRzLFtjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW1dKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9lcnJvcihkZiwgY29sMSwgY29sMikge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZXJyb3InLCBbY29sMSwgY29sMl0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2Vycm9ySW5XZWJXb3JrZXIoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9lcnJvcldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ2Vycm9yJ10uYXJndW1lbnRzLFtjb2wxLCBjb2wyXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2Vycm9yJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbicsIFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbldvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXS5hcmd1bWVudHMsW2ZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnRdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbiddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldChrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnZ2VuZXJhdGVEYXRhc2V0JywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9nZW5lcmF0ZURhdGFzZXRXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydnZW5lcmF0ZURhdGFzZXQnXS5hcmd1bWVudHMsW2tlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2dlbmVyYXRlRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXQoZGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAnbm9ybWFsaXplRGF0YXNldCcsIFtkYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfbm9ybWFsaXplRGF0YXNldEluV2ViV29ya2VyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9ub3JtYWxpemVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLmFyZ3VtZW50cyxbZGF0YV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydub3JtYWxpemVEYXRhc2V0J10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5MU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluTFNTVk0nLCBbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfdHJhaW5MU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkxTU1ZNJ10uYXJndW1lbnRzLFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsndHJhaW5MU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNKGtlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJlZGljdEJ5TFNTVk0nLCBba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wcmVkaWN0QnlMU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsncHJlZGljdEJ5TFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTShnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNSW5XZWJXb3JrZXIoZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvdHJhaW5BbmRBbmFseXplTFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZml0TGluZWFyUmVncmVzc2lvblBhcmFtc1dpdGhEYXRhTm9ybWFsaXppbmcoZmVhdHVyZXMsIGZlYXR1cmVBdmdzLCBmZWF0dXJlU3RkRGV2cywgdGFyZ2V0cywgdGFyZ2V0c0F2ZywgdGFyZ2V0c1N0ZERldiwgcGFyYW1zQ291bnQpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2ZpdExpbmVhclJlZ3Jlc3Npb25QYXJhbXNXaXRoRGF0YU5vcm1hbGl6aW5nJywgW2ZlYXR1cmVzLCBmZWF0dXJlQXZncywgZmVhdHVyZVN0ZERldnMsIHRhcmdldHMsIHRhcmdldHNBdmcsIHRhcmdldHNTdGREZXYsIHBhcmFtc0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZml0TGluZWFyUmVncmVzc2lvblBhcmFtc1dpdGhEYXRhTm9ybWFsaXppbmdJbldlYldvcmtlcihmZWF0dXJlcywgZmVhdHVyZUF2Z3MsIGZlYXR1cmVTdGREZXZzLCB0YXJnZXRzLCB0YXJnZXRzQXZnLCB0YXJnZXRzU3RkRGV2LCBwYXJhbXNDb3VudCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL2ZpdExpbmVhclJlZ3Jlc3Npb25QYXJhbXNXaXRoRGF0YU5vcm1hbGl6aW5nV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnZml0TGluZWFyUmVncmVzc2lvblBhcmFtc1dpdGhEYXRhTm9ybWFsaXppbmcnXS5hcmd1bWVudHMsW2ZlYXR1cmVzLCBmZWF0dXJlQXZncywgZmVhdHVyZVN0ZERldnMsIHRhcmdldHMsIHRhcmdldHNBdmcsIHRhcmdldHNTdGREZXYsIHBhcmFtc0NvdW50XSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ2ZpdExpbmVhclJlZ3Jlc3Npb25QYXJhbXNXaXRoRGF0YU5vcm1hbGl6aW5nJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZml0TGluZWFyUmVncmVzc2lvblBhcmFtcyhmZWF0dXJlcywgdGFyZ2V0cywgcGFyYW1zQ291bnQpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2ZpdExpbmVhclJlZ3Jlc3Npb25QYXJhbXMnLCBbZmVhdHVyZXMsIHRhcmdldHMsIHBhcmFtc0NvdW50XSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZml0TGluZWFyUmVncmVzc2lvblBhcmFtc0luV2ViV29ya2VyKGZlYXR1cmVzLCB0YXJnZXRzLCBwYXJhbXNDb3VudCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL2ZpdExpbmVhclJlZ3Jlc3Npb25QYXJhbXNXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydmaXRMaW5lYXJSZWdyZXNzaW9uUGFyYW1zJ10uYXJndW1lbnRzLFtmZWF0dXJlcywgdGFyZ2V0cywgcGFyYW1zQ291bnRdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnZml0TGluZWFyUmVncmVzc2lvblBhcmFtcyddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBfdHJhaW5BbmRBbmFseXplTFNTVk1JbldlYldvcmtlciwgX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG4vLyAxLiBDT05TVEFOVFNcbi8vIGtlcm5lbCB0eXBlc1xuZXhwb3J0IGNvbnN0IExJTkVBUiA9IDA7XG5leHBvcnQgY29uc3QgUE9MWU5PTUlBTCA9IDE7XG5leHBvcnQgY29uc3QgUkJGID0gMjtcbmV4cG9ydCBjb25zdCBTSUdNT0lEID0gMztcbi8vIG91dHB1dC1yZWxhdGVkXG5jb25zdCBDT05GVVNJT05fTUFUUl9TSVpFID0gNDtcbmNvbnN0IE5PUk1BTElaRURfREFUQV9JTkRFWCA9IDA7XG5jb25zdCBNRUFOU19JTkRFWCA9IDE7XG5jb25zdCBTVERfREVWU19JTkRFWCA9IDI7XG5jb25zdCBNT0RFTF9QQVJBTVNfSU5ERVggPSAzO1xuY29uc3QgTU9ERUxfV0VJR0hUU19JTkRFWCA9IDQ7XG5jb25zdCBQUkVESUNURURfTEFCRUxTX0lOREVYID0gNTtcbmNvbnN0IENPUlJFQ1RORVNTX0lOREVYID0gNjtcbmNvbnN0IENPTkZVU0lPTl9NQVRSSVhfSU5ERVggPSA3O1xuY29uc3QgVFJVRV9QT1NJVElWRV9JTkRFWCA9IDA7XG5jb25zdCBGQUxTRV9ORUdBVElWRV9JTkRFWCA9IDE7XG5jb25zdCBGQUxTRV9QT1NJVElWRV9JTkRFWCA9IDI7XG5jb25zdCBUUlVFX05FR0FUSVZFX0lOREVYID0gMztcbi8vIGtlcm5lbCBwYXJhbWV0ZXJzIGluZGVjZXNcbmNvbnN0IFJCRl9TSUdNQV9JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0NfSU5ERVggPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lOREVYID0gMTtcbmNvbnN0IFNJR01PSURfS0FQUEFfSU5ERVggPSAwO1xuY29uc3QgU0lHTU9JRF9USEVUQV9JTkRFWCA9IDE7XG4vLyBoeXBlcnBhcmFtZXRlcnMgbGltaXRzXG5jb25zdCBHQU1NQV9JTkZJTVVNX0xJTUlUID0gMDtcbmNvbnN0IFJCRl9TSUdNQV9JTkZJTVVNX0xJTUlUID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUID0gMDtcbi8vIGVycm9yIG1lc3NhZ2VzXG5jb25zdCBXUk9OR19HQU1NQV9NRVNTQUdFID0gJ2dhbW1hIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX1JCRl9TSUdNQV9NRVNTQUdFID0gJ3NpZ21hIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFID0gJ2MgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9EX01FU1NBR0UgPSAnZCBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19LRVJORUxfTUVTU0FHRSA9ICdpbmNvcnJlY3Qga2VybmVsLic7XG5jb25zdCBXUk9OR19MQUJFTFNfTUVTU0FHRSA9ICdsYWJlbHMgbXVzdCBiZSBzdHJpbmdzIG9mIHR3byBjYXRlZ29yaWVzLic7XG4vLyBuYW1lc1xuY29uc3QgTEFCRUxTID0gJ0xhYmVscyc7XG5jb25zdCBQUkVESUNURUQgPSAncHJlZGljdGVkJztcbmNvbnN0IENPUlJFQ1RORVNTID0gJ2NvcnJlY3RuZXNzJztcbmNvbnN0IENPTkZVU0lPTl9NQVRSSVhfTkFNRSA9ICdDb25mdXNpb24gbWF0cml4JztcbmNvbnN0IE1FQU4gPSAnbWVhbic7XG5jb25zdCBTVERfREVWID0gJ3N0ZCBkZXYnO1xuY29uc3QgTU9ERUxfUEFSQU1TX05BTUUgPSAnYWxwaGEnO1xuY29uc3QgTU9ERUxfV0VJR0hUU19OQU1FID0gJ3dlaWdodCc7XG5jb25zdCBHQU1NQSA9ICdnYW1tYSc7XG5jb25zdCBLRVJORUwgPSAna2VybmVsJztcbmNvbnN0IEtFUk5FTF9QQVJBTVMgPSAna2VybmVsIHBhcmFtcyc7XG5jb25zdCBLRVJORUxfUEFSQU1fMSA9ICdrZXJuZWwgcGFyYW0gMSc7XG5jb25zdCBLRVJORUxfUEFSQU1fMiA9ICdrZXJuZWwgcGFyYW0gMic7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9OQU1FID0gJ2ZlYXR1cmVzIGNvdW50JztcbmNvbnN0IFRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSA9ICd0cmFpbiBzYW1wbGVzIGNvdW50JztcbmNvbnN0IFRSQUlOX0VSUk9SID0gJ1RyYWluIGVycm9yLCUnO1xuY29uc3QgS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAgPSBbJ2xpbmVhcicsICdwb2x5bm9taWFsJywgJ1JCRicsICdzaWdtb2lkJ107XG5jb25zdCBQT1NJVElWRV9OQU1FID0gJ3Bvc2l0aXZlIChQKSc7XG5jb25zdCBORUdBVElWRV9OQU1FID0gJ25lZ2F0aXZlIChOKSc7XG5jb25zdCBQUkVESUNURURfUE9TSVRJVkVfTkFNRSA9ICdwcmVkaWN0ZWQgcG9zaXRpdmUgKFBQKSc7XG5jb25zdCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSA9ICdwcmVkaWN0ZWQgbmVnYXRpdmUgKFBOKSc7XG5jb25zdCBTRU5TSVRJVklUWSA9ICdTZW5zaXRpdml0eSc7XG5jb25zdCBTUEVDSUZJQ0lUWSA9ICdTcGVjaWZpY2l0eSc7XG5jb25zdCBCQUxBTkNFRF9BQ0NVUkFDWSA9ICdCYWxhbmNlZCBhY2N1cmFjeSc7XG5jb25zdCBQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ1Bvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSA9ICdOZWdhdGl2ZSBwcmVkaWNpdHZlIHZhbHVlJztcbmNvbnN0IE1MX1JFUE9SVCA9ICdNb2RlbCByZXBvcnQnO1xuY29uc3QgTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMgPSAnUHJlZGljdGVkIGxhYmVscyc7XG5jb25zdCBNTF9SRVBPUlRfVFJBSU5fTEFCRUxTID0gJ1RyYWluIGxhYmVscyc7XG5jb25zdCBNTF9SRVBPUlRfQ09SUkVDVE5FU1MgPSAnUHJlZGljdGlvbiBjb3JyZWN0bmVzcyc7XG5jb25zdCBQUkVESUNUSU9OID0gJ3ByZWRpY3Rpb24nO1xuLy8gUGFjay91bnBhY2sgY29uc3RhbnRzXG5jb25zdCBCWVRFUyA9IDQ7XG5jb25zdCBJTlRTX0NPVU5UID0gMztcbmNvbnN0IEtFUl9QQVJBTVNfQ09VTlQgPSAyO1xuY29uc3QgTU9ERUxfS0VSTkVMX0lOREVYID0gMDtcbmNvbnN0IFNBTVBMRVNfQ09VTlRfSU5ERVggPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfSU5ERVggPSAyO1xuLy8gbWlzY1xuY29uc3QgSU5JVF9WQUxVRSA9IDA7IC8vIGFueSBudW1iZXIgY2FuIGJlIHVzZWRcbmNvbnN0IExTX1NWTV9BRERfQ09OU1QgPSAxOyAvLyBzZWUgWzFdIGZvciBtb3JlIGRldGFpbHNcbi8vIDIuIFRPT0xTXG4vLyBDaGVjayBMUy1TVk0gbGVhcm5pbmcgaHlwZXJwYXJhbWV0ZXJzXG5mdW5jdGlvbiBjaGVja0h5cGVycGFyYW1ldGVycyhoeXBlcnBhcmFtZXRlcnMpIHtcbiAgICAvLyBjaGVjayBnYW1tYVxuICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZ2FtbWEgPD0gR0FNTUFfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0dBTU1BX01FU1NBR0UpO1xuICAgIC8vIGNoZWNrIGtlcm5lbCAmIGl0cyBwYXJhbWV0ZXJzXG4gICAgc3dpdGNoIChoeXBlcnBhcmFtZXRlcnMua2VybmVsKSB7XG4gICAgICAgIGNhc2UgTElORUFSOiAvLyB0aGUgY2FzZSBvZiBsaW5lYXIga2VybmVsXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgUkJGOiAvLyB0aGUgY2FzZSBvZiBSQkYga2VybmVsXG4gICAgICAgICAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLnNpZ21hIDw9IFJCRl9TSUdNQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19SQkZfU0lHTUFfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgUE9MWU5PTUlBTDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIC8vIGNoZWNrIGNcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuY1BhcmFtIDw9IFBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSk7XG4gICAgICAgICAgICAvLyBjaGVjayBkXG4gICAgICAgICAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLmRQYXJhbSA8PSBQT0xZTk9NSUFMX0RfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfUE9MWU5PTUlBTF9EX01FU1NBR0UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFNJR01PSUQ6IC8vIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19LRVJORUxfTUVTU0FHRSk7XG4gICAgfSAvLyBzd2l0Y2hcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyKG1vZGVsLmtlcm5lbFR5cGUsIG1vZGVsLmtlcm5lbFBhcmFtcywgbW9kZWwubm9ybWFsaXplZFRyYWluRGF0YS5jb2x1bW5zLCBtb2RlbC50cmFpbkxhYmVscywgbW9kZWwubWVhbnMsIG1vZGVsLnN0ZERldnMsIG1vZGVsLm1vZGVsUGFyYW1zLCBtb2RlbC5tb2RlbFdlaWdodHMsIGRhdGFzZXQpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKChfcmVzdWx0KSA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCAoX2Vycm9yKSA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGNvbnN0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIC8vIGhlcmUsIHRoZSBjbGFzc2ljIG5vdGF0aW9uIGlzIHVzZWQgKHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZW5zaXRpdml0eV9hbmRfc3BlY2lmaWNpdHkpXG4gICAgY29uc3QgVFAgPSBkYXRhW1RSVUVfUE9TSVRJVkVfSU5ERVhdOyAvLyB0cnVlIHBvc2l0aXZlXG4gICAgY29uc3QgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgY29uc3QgRlAgPSBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXTsgLy8gZmFsc2UgcG9zaXRpdmVcbiAgICBjb25zdCBGTiA9IGRhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdOyAvLyBmYWxzZSBuZWdhdGl2ZVxuICAgIGNvbnN0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGNvbnN0IE4gPSBGUCArIFROOyAvLyBuZWdhdGl2ZVxuICAgIGNvbnN0IFRQUiA9IFRQIC8gUDsgLy8gdHJ1ZSBwb3NpdGl2ZSByYXRlXG4gICAgY29uc3QgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBjb25zdCBQUFYgPSBUUCAvIChUUCArIEZQKTsgLy8gcG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZVxuICAgIGNvbnN0IE5QViA9IFROIC8gKFROICsgRk4pOyAvLyBuZWdhdGl2ZSBwcmVkaWNpdHZlIHZhbHVlXG4gICAgY29uc3QgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBjb25zdCBCQSA9IChUUFIgKyBUTlIpIC8gMjsgLy8gYmFsYW5jZWQgYWNjdXJhY3lcbiAgICBtb2RlbC5zZW5zaXRpdml0eSA9IFRQUjtcbiAgICBtb2RlbC5zcGVjaWZpY2l0eSA9IFROUjtcbiAgICBtb2RlbC5iYWxhbmNlZEFjY3VyYWN5ID0gQkE7XG4gICAgbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBQUFY7XG4gICAgbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBOUFY7XG4gICAgbW9kZWwudHJhaW5FcnJvciA9ICgxIC0gQUNDKSAqIDEwMDsgLy8gdHJhaW4gZXJyb3IsICVcbn0gLy8gZXZhbHVhdGVBY2N1cmFjeVxuLy8gUmV0dXJucyB0cmFpbmVkIExTLVNWTSBtb2RlbC5cbmZ1bmN0aW9uIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgZGF0YXNldCwgbGFiZWxzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgY29ycmVjdG5lc3Mgb2YgaHlwZXJwYXJhbWV0ZXIgZ2FtbWFcbiAgICAgICAgY2hlY2tIeXBlcnBhcmFtZXRlcnMoaHlwZXJwYXJhbWV0ZXJzKTtcbiAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQga2VybmVsIHBhcmFtcyBhcnJheVxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNBcnJheSA9IFtJTklUX1ZBTFVFLCBJTklUX1ZBTFVFXTtcbiAgICAgICAgLy8gZmlsbCBrZXJuZWxQYXJhbXNcbiAgICAgICAgc3dpdGNoIChoeXBlcnBhcmFtZXRlcnMua2VybmVsKSB7XG4gICAgICAgICAgICBjYXNlIExJTkVBUjogLy8gbm8ga2VybmVsIHBhcmFtZXRlcnMgaW4gdGhlIGNhc2Ugb2YgbGluZWFyIGtlcm5lbFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSQkY6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBSQkYta2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUkJGX1NJR01BX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5zaWdtYTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUE9MWU5PTUlBTDogLy8gc2lnbWEgcGFyYW1ldGVyIGluIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9DX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5jUGFyYW07XG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9EX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5kUGFyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNJR01PSUQ6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBzaWdtb2lkIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfS0FQUEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLmthcHBhO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfVEhFVEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLnRoZXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19LRVJORUxfTUVTU0FHRSk7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICAvLyBjcmVhdGUga2VybmVsIHBhcmFtcyBjb2x1bW5cbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGNvbnN0IHRyYWluQ29scyA9IGRhdGFzZXQudG9MaXN0KCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUGFyYW1zQ291bnQgPSB0cmFpbkNvbHNbMF0ubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgY29uc3QgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgY29uc3QgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCA9IENPTkZVU0lPTl9NQVRSX1NJWkU7XG4gICAgICAgIC8vIGNhbGwgd2ViYXNzZW1ibHkgdHJhaW5pbmcgZnVuY3Rpb25cbiAgICAgICAgbGV0IG91dHB1dDtcbiAgICAgICAgY29uc3QgX3Byb21pc2UgPSBfdHJhaW5BbmRBbmFseXplTFNTVk1JbldlYldvcmtlcihoeXBlcnBhcmFtZXRlcnMuZ2FtbWEsIGh5cGVycGFyYW1ldGVycy5rZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscyk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oKF9yZXN1bHQpID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgKF9lcnJvcikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIHJlbmFtZSBvdXRwdXQgY29sdW1uc1xuICAgICAgICBvdXRwdXRbTUVBTlNfSU5ERVhdLm5hbWUgPSBNRUFOO1xuICAgICAgICBvdXRwdXRbU1REX0RFVlNfSU5ERVhdLm5hbWUgPSBTVERfREVWO1xuICAgICAgICBvdXRwdXRbTU9ERUxfUEFSQU1TX0lOREVYXS5uYW1lID0gTU9ERUxfUEFSQU1TX05BTUU7XG4gICAgICAgIG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXS5uYW1lID0gTU9ERUxfV0VJR0hUU19OQU1FO1xuICAgICAgICBvdXRwdXRbUFJFRElDVEVEX0xBQkVMU19JTkRFWF0ubmFtZSA9IFBSRURJQ1RFRDtcbiAgICAgICAgb3V0cHV0W0NPUlJFQ1RORVNTX0lOREVYXS5uYW1lID0gQ09SUkVDVE5FU1M7XG4gICAgICAgIG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXS5uYW1lID0gQ09ORlVTSU9OX01BVFJJWF9OQU1FO1xuICAgICAgICAvLyBjb21wbGV0ZSBtb2RlbFxuICAgICAgICBjb25zdCBtb2RlbCA9IHtcbiAgICAgICAgICAgIHRyYWluR2FtbWE6IGh5cGVycGFyYW1ldGVycy5nYW1tYSxcbiAgICAgICAgICAgIGtlcm5lbFR5cGU6IGh5cGVycGFyYW1ldGVycy5rZXJuZWwsXG4gICAgICAgICAgICBrZXJuZWxQYXJhbXM6IGtlcm5lbFBhcmFtcyxcbiAgICAgICAgICAgIHRyYWluTGFiZWxzOiBsYWJlbHMsXG4gICAgICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMob3V0cHV0W05PUk1BTElaRURfREFUQV9JTkRFWF0pLFxuICAgICAgICAgICAgbWVhbnM6IG91dHB1dFtNRUFOU19JTkRFWF0sXG4gICAgICAgICAgICBzdGREZXZzOiBvdXRwdXRbU1REX0RFVlNfSU5ERVhdLFxuICAgICAgICAgICAgbW9kZWxQYXJhbXM6IG91dHB1dFtNT0RFTF9QQVJBTVNfSU5ERVhdLFxuICAgICAgICAgICAgbW9kZWxXZWlnaHRzOiBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0sXG4gICAgICAgICAgICBwcmVkaWN0ZWRMYWJlbHM6IG91dHB1dFtQUkVESUNURURfTEFCRUxTX0lOREVYXSxcbiAgICAgICAgICAgIGNvcnJlY3RuZXNzOiBvdXRwdXRbQ09SUkVDVE5FU1NfSU5ERVhdLFxuICAgICAgICAgICAgY29uZnVzaW9uTWF0cml4OiBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0sXG4gICAgICAgICAgICB0cmFpbkVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBmZWF0dXJlc0NvdW50OiB0cmFpbkNvbHMubGVuZ3RoLFxuICAgICAgICAgICAgdHJhaW5TYW1wbGVzQ291bnQ6IHRyYWluQ29sc1swXS5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICAgIGV2YWx1YXRlQWNjdXJhY3kobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSk7XG59IC8vIHRyYWluQW5kQW5hbHl6ZU1vZGVsXG4vLyBXcmFwcGVyIGZvciBjb21iaW5pbmcgdGhlIGZ1bmN0aW9uIFwidHJhaW5BbmRBbmFseXplTW9kZWxcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFpbmVkTW9kZWwoaHlwZXJwYXJhbWV0ZXJzLCBkZiwgcHJlZGljdENvbHVtbikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBjb25zdCBsYWJlbHMgPSBjb2x1bW5zLmJ5TmFtZShwcmVkaWN0Q29sdW1uKTtcbiAgICAgICAgY29sdW1ucy5yZW1vdmUocHJlZGljdENvbHVtbik7XG4gICAgICAgIGlmIChsYWJlbHMuY2F0ZWdvcmllcy5sZW5ndGggIT0gMilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19MQUJFTFNfTUVTU0FHRSk7XG4gICAgICAgIGxldCBsYWJlbE51bWVyaWMgPSBERy5Db2x1bW4uZmxvYXQobGFiZWxzLm5hbWUsIGxhYmVscy5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGxhYmVsTnVtZXJpYy5zZXQoaSwgbGFiZWxzLmdldChpKSA9PSBsYWJlbHMuY2F0ZWdvcmllc1swXSA/IC0xLjAgOiAxLjAsIGZhbHNlKTtcbiAgICAgICAgbGV0IG1vZGVsID0geWllbGQgdHJhaW5BbmRBbmFseXplTW9kZWwoaHlwZXJwYXJhbWV0ZXJzLCBjb2x1bW5zLCBsYWJlbE51bWVyaWMpO1xuICAgICAgICBtb2RlbC5yZWFsTGFiZWxzID0gbGFiZWxzO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGNvbnN0IGtlcm5lbFBhcmFtcyA9IG1vZGVsLmtlcm5lbFBhcmFtcy5nZXRSYXdEYXRhKCk7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgR0FNTUEsIFttb2RlbC50cmFpbkdhbW1hXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncyhLRVJORUwsIFtLRVJORUxfVFlQRV9UT19OQU1FX01BUFttb2RlbC5rZXJuZWxUeXBlXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8xLCBba2VybmVsUGFyYW1zWzBdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgS0VSTkVMX1BBUkFNXzIsIFtrZXJuZWxQYXJhbXNbMV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBGRUFUVVJFU19DT1VOVF9OQU1FLCBbbW9kZWwuZmVhdHVyZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSwgW21vZGVsLnRyYWluU2FtcGxlc0NvdW50XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgVFJBSU5fRVJST1IsIFttb2RlbC50cmFpbkVycm9yXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgQkFMQU5DRURfQUNDVVJBQ1ksIFttb2RlbC5iYWxhbmNlZEFjY3VyYWN5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgU0VOU0lUSVZJVFksIFttb2RlbC5zZW5zaXRpdml0eV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNQRUNJRklDSVRZLCBbbW9kZWwuc3BlY2lmaWNpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWVdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWVdKSxcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGNvbnN0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJycsIFtQT1NJVElWRV9OQU1FLCBORUdBVElWRV9OQU1FXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnaW50JywgUFJFRElDVEVEX1BPU0lUSVZFX05BTUUsIFtkYXRhW1RSVUVfUE9TSVRJVkVfSU5ERVhdLCBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FLCBbZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF0sIGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF1dKSxcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBwYWNrZWRNb2RlbCkge1xuICAgIGNvbnN0IG1vZGVsID0gZ2V0VW5wYWNrZWRNb2RlbChwYWNrZWRNb2RlbCk7XG4gICAgcmV0dXJuIERHLlZpZXdlci5mb3JtKG1vZGVsLm1vZGVsSW5mbykucm9vdDtcbn0gLy8gc2hvd1RyYWluUmVwb3J0XG4vLyBSZXR1cm5zIHRyYWluZWQgbW9kZWwgcGFja2VkIGludG8gVUludDhBcnJheVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2tlZE1vZGVsKG1vZGVsKSB7XG4gICAgLy8gZ2V0IHByaW5jaXBhbCBkYXRhXG4gICAgY29uc3QgZGF0YUNvbHMgPSBtb2RlbC5ub3JtYWxpemVkVHJhaW5EYXRhLmNvbHVtbnM7XG4gICAgY29uc3Qgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgY29uc3QgZmVhdHVyZXNDb3VudCA9IG1vZGVsLmZlYXR1cmVzQ291bnQ7XG4gICAgY29uc3QgcmVhbExhYmVsc0J1ZmZlciA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbbW9kZWwucmVhbExhYmVsc10pLnRvQnl0ZUFycmF5KCk7XG4gICAgY29uc3QgcmVhbExhYmVsc1NpemUgPSBCWVRFUyArIHJlYWxMYWJlbHNCdWZmZXIubGVuZ3RoICsgNCAtIHJlYWxMYWJlbHNCdWZmZXIubGVuZ3RoICUgNDtcbiAgICBjb25zdCBtb2RlbEluZm9CdWZmZXIgPSBnZXRNb2RlbEluZm8obW9kZWwpLnRvQnl0ZUFycmF5KCk7XG4gICAgY29uc3QgbW9kZWxJbmZvU2l6ZSA9IEJZVEVTICsgbW9kZWxJbmZvQnVmZmVyLmxlbmd0aCArIDQgLSBtb2RlbEluZm9CdWZmZXIubGVuZ3RoICUgNDtcbiAgICAvKmxldCBidWZmZXJTaXplID0gQllURVMgKiAoNyArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnRcbiAgICAgICsgMyAqIGZlYXR1cmVzQ291bnQgKyAyICogc2FtcGxlc0NvdW50KTsqL1xuICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBwYWNrZWQgbW9kZWxcbiAgICBjb25zdCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QgK1xuICAgICAgICBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpICsgcmVhbExhYmVsc1NpemUgKyBtb2RlbEluZm9TaXplO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlclNpemUpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHJlc3VsdC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gcGFjayBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBsZXQgaW50cyA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBpbnRzW01PREVMX0tFUk5FTF9JTkRFWF0gPSBtb2RlbC5rZXJuZWxUeXBlO1xuICAgIGludHNbU0FNUExFU19DT1VOVF9JTkRFWF0gPSBzYW1wbGVzQ291bnQ7XG4gICAgaW50c1tGRUFUVVJFU19DT1VOVF9JTkRFWF0gPSBmZWF0dXJlc0NvdW50O1xuICAgIG9mZnNldCArPSBJTlRTX0NPVU5UICogQllURVM7XG4gICAgLy8gcGFjayBrZXJuZWwgcGFyYW1ldGVyc1xuICAgIGxldCBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBLRVJfUEFSQU1TX0NPVU5UKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLmtlcm5lbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gcGFjayBwYWNrIGxhYmVscyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnRyYWluTGFiZWxzLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IHNhbXBsZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbWVhbiB2YWx1ZXMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwubWVhbnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5zdGREZXZzLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsIHBhcmFtdGVyc1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwubW9kZWxQYXJhbXMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFdlaWdodHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gKGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSAqIEJZVEVTO1xuICAgIC8vIHBhY2sgdHJhaW5pbmcgZGF0YXNldFxuICAgIGZvciAoY29uc3QgY29sIG9mIGRhdGFDb2xzKSB7XG4gICAgICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpO1xuICAgICAgICBmbG9hdHMuc2V0KGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIH1cbiAgICAvLyBwYWNrIGxhYmVscyBvZiB0cmFpbmluZyBkYXRhXG4gICAgaW50cyA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCAxKTtcbiAgICBpbnRzWzBdID0gcmVhbExhYmVsc0J1ZmZlci5sZW5ndGg7XG4gICAgcmVzdWx0LnNldChyZWFsTGFiZWxzQnVmZmVyLCBvZmZzZXQgKyBCWVRFUyk7XG4gICAgb2Zmc2V0ICs9IHJlYWxMYWJlbHNTaXplO1xuICAgIC8vIHBhY2sgbW9kZWwgaW5mb1xuICAgIGludHMgPSBuZXcgSW50MzJBcnJheShidWZmZXIsIG9mZnNldCwgMSk7XG4gICAgaW50c1swXSA9IG1vZGVsSW5mb0J1ZmZlci5sZW5ndGg7XG4gICAgcmVzdWx0LnNldChtb2RlbEluZm9CdWZmZXIsIG9mZnNldCArIEJZVEVTKTtcbiAgICBvZmZzZXQgKz0gbW9kZWxJbmZvU2l6ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xufSAvLyBnZXRQYWNrZWRNb2RlbFxuLy8gUmV0dXJucyB1bnBhY2tlZCBtb2RlbFxuZnVuY3Rpb24gZ2V0VW5wYWNrZWRNb2RlbChwYWNrZWRNb2RlbCkge1xuICAgIGNvbnN0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBjb25zdCBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIG9mZnNldCArPSBJTlRTX0NPVU5UICogQllURVM7XG4gICAgY29uc3Qgc2FtcGxlc0NvdW50ID0gaGVhZGVyW1NBTVBMRVNfQ09VTlRfSU5ERVhdO1xuICAgIGNvbnN0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBjb25zdCBkYXRhQ29scyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyBpKyspIHtcbiAgICAgICAgZGF0YUNvbHMucHVzaChERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShpLnRvU3RyaW5nKCksIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSkpO1xuICAgICAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkVHJhaW5EYXRhID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGRhdGFDb2xzKTtcbiAgICAvLyBleHRyYWN0IHJlYWwgdHJhaW5pbmcgbGFiZWxzXG4gICAgY29uc3QgbGFiZWxzQ291bnQgPSBuZXcgSW50MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIDEpWzBdO1xuICAgIGNvbnN0IGxhYmVsc0J5dGVzQ291bnQgPSBsYWJlbHNDb3VudCArIDQgLSBsYWJlbHNDb3VudCAlIDQ7XG4gICAgb2Zmc2V0ICs9IEJZVEVTO1xuICAgIGNvbnN0IHJlYWxMYWJlbHMgPSBERy5EYXRhRnJhbWUuZnJvbUJ5dGVBcnJheShuZXcgVWludDhBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGxhYmVsc0NvdW50KSkuY29sdW1ucy5ieUluZGV4KDApO1xuICAgIG9mZnNldCArPSBsYWJlbHNCeXRlc0NvdW50O1xuICAgIC8vIGV4dHJhY3QgbW9kZWwgaW5mb1xuICAgIGNvbnN0IG1vZGVsSW5mb1NpemUgPSBuZXcgSW50MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIDEpWzBdO1xuICAgIGNvbnN0IG1vZGVsSW5mb0J5dGVzU2l6ZSA9IG1vZGVsSW5mb1NpemUgKyA0IC0gbW9kZWxJbmZvU2l6ZSAlIDQ7XG4gICAgb2Zmc2V0ICs9IEJZVEVTO1xuICAgIGNvbnN0IG1vZGVsSW5mbyA9IERHLkRhdGFGcmFtZS5mcm9tQnl0ZUFycmF5KG5ldyBVaW50OEFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgbW9kZWxJbmZvU2l6ZSkpO1xuICAgIG9mZnNldCArPSBtb2RlbEluZm9CeXRlc1NpemU7XG4gICAgY29uc3QgbW9kZWwgPSB7IGtlcm5lbFR5cGU6IGhlYWRlcltNT0RFTF9LRVJORUxfSU5ERVhdLFxuICAgICAgICBrZXJuZWxQYXJhbXM6IGtlcm5lbFBhcmFtcyxcbiAgICAgICAgdHJhaW5MYWJlbHM6IHRyYWluTGFiZWxzLFxuICAgICAgICByZWFsTGFiZWxzOiByZWFsTGFiZWxzLFxuICAgICAgICBtZWFuczogbWVhbnMsXG4gICAgICAgIHN0ZERldnM6IHN0ZERldnMsXG4gICAgICAgIG1vZGVsUGFyYW1zOiBtb2RlbFBhcmFtcyxcbiAgICAgICAgbW9kZWxXZWlnaHRzOiBtb2RlbFdlaWdodHMsXG4gICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IG5vcm1hbGl6ZWRUcmFpbkRhdGEsXG4gICAgICAgIG1vZGVsSW5mbzogbW9kZWxJbmZvXG4gICAgfTtcbiAgICByZXR1cm4gbW9kZWw7XG59IC8vIGdldFVucGFja2VkTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJwcmVkaWN0XCIgd2l0aCBEYXRhZ3JvayBwcmVkaWNpdHZlIHRvb2xzXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZGljdGlvbihkZiwgcGFja2VkTW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGdldFVucGFja2VkTW9kZWwobmV3IFVpbnQ4QXJyYXkocGFja2VkTW9kZWwpKTtcbiAgICAgICAgY29uc3QgcmVzTnVtZXJpYyA9IHlpZWxkIHByZWRpY3QobW9kZWwsIGRmLmNvbHVtbnMpO1xuICAgICAgICBjb25zdCByZXMgPSBERy5Db2x1bW4uc3RyaW5nKFBSRURJQ1RJT04sIHJlc051bWVyaWMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IG1vZGVsLnJlYWxMYWJlbHMuY2F0ZWdvcmllcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcy5zZXQoaSwgcmVzTnVtZXJpYy5nZXQoaSkgPT0gLTEgPyBjYXRlZ29yaWVzWzBdIDogY2F0ZWdvcmllc1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbcmVzXSk7XG4gICAgfSk7XG59IC8vIGdldFByZWRpY3Rpb25cbmV4cG9ydCBmdW5jdGlvbiBpc0FwcGxpY2FibGVTVk0oZGYsIHByZWRpY3RDb2x1bW4pIHtcbiAgICBjb25zdCBjb2x1bW5zID0gZGYuY29sdW1ucztcbiAgICBjb25zdCBsYWJlbHMgPSBjb2x1bW5zLmJ5TmFtZShwcmVkaWN0Q29sdW1uKTtcbiAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0Q29sdW1uKTtcbiAgICB2YXIgcmVzID0gbGFiZWxzLnR5cGUgPT0gJ3N0cmluZyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICByZXMgPSByZXMgJiYgKGNvbHVtbnMuYnlJbmRleChpKS50eXBlID09ICdkb3VibGUnIHx8IGNvbHVtbnMuYnlJbmRleChpKS50eXBlID09ICdpbnQnKTtcbiAgICByZXR1cm4gcmVzO1xufVxuIiwiLy8gUExTIHNwZWNpZmljIGNvbnN0YW50c1xuLyoqIFR5cGVzIG9mIGFuYWx5c2lzIHVzaW5nIFBMUyAqL1xuZXhwb3J0IHZhciBQTFNfQU5BTFlTSVM7XG4oZnVuY3Rpb24gKFBMU19BTkFMWVNJUykge1xuICAgIFBMU19BTkFMWVNJU1tQTFNfQU5BTFlTSVNbXCJDT01QVVRFX0NPTVBPTkVOVFNcIl0gPSAwXSA9IFwiQ09NUFVURV9DT01QT05FTlRTXCI7XG4gICAgUExTX0FOQUxZU0lTW1BMU19BTkFMWVNJU1tcIlBFUkZPUk1fTVZBXCJdID0gMV0gPSBcIlBFUkZPUk1fTVZBXCI7XG4gICAgUExTX0FOQUxZU0lTW1BMU19BTkFMWVNJU1tcIkRFTU9cIl0gPSAyXSA9IFwiREVNT1wiO1xufSkoUExTX0FOQUxZU0lTIHx8IChQTFNfQU5BTFlTSVMgPSB7fSkpO1xuLyoqIEVycm9ycyAmIHdhcm5pbmdzICovXG5leHBvcnQgdmFyIEVSUk9SX01TRztcbihmdW5jdGlvbiAoRVJST1JfTVNHKSB7XG4gICAgRVJST1JfTVNHW1wiTk9fREZcIl0gPSBcIk5vIGRhdGFmcmFtZSBpcyBvcGVuZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJOT19DT0xTXCJdID0gXCJObyBudW1lcmljIGNvbHVtbnMgd2l0aG91dCBtaXNzaW5nIHZhbHVlc1wiO1xuICAgIEVSUk9SX01TR1tcIk9ORV9DT0xcIl0gPSBcIk5vIGNvbHVtbnMgdG8gYmUgdXNlZCBhcyBmZWF0dXJlcyAoanVzdCBvbmUgbnVtZXJpYyBjb2x1bW5zIHdpdGhvdXQgbWlzc2luZyB2YWx1ZXMpXCI7XG4gICAgRVJST1JfTVNHW1wiRU1QVFlfREZcIl0gPSBcIkRhdGFmcmFtZSBpcyBlbXB0eVwiO1xufSkoRVJST1JfTVNHIHx8IChFUlJPUl9NU0cgPSB7fSkpO1xuLyoqIFdpZGdldCB0aXRsZXMgKi9cbmV4cG9ydCB2YXIgVElUTEU7XG4oZnVuY3Rpb24gKFRJVExFKSB7XG4gICAgVElUTEVbXCJQUkVESUNUXCJdID0gXCJQcmVkaWN0XCI7XG4gICAgVElUTEVbXCJVU0lOR1wiXSA9IFwiVXNpbmdcIjtcbiAgICBUSVRMRVtcIkNPTVBPTkVOVFNcIl0gPSBcIkNvbXBvbmVudHNcIjtcbiAgICBUSVRMRVtcIlBMU1wiXSA9IFwiUExTXCI7XG4gICAgVElUTEVbXCJNVkFcIl0gPSBcIk11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKVwiO1xuICAgIFRJVExFW1wiUlVOXCJdID0gXCJSVU5cIjtcbiAgICBUSVRMRVtcIk5BTUVTXCJdID0gXCJOYW1lc1wiO1xuICAgIFRJVExFW1wiTU9ERUxcIl0gPSBcIk9ic2VydmVkIHZzLiBQcmVkaWN0ZWRcIjtcbiAgICBUSVRMRVtcIkZFQVRVUkVcIl0gPSBcIkZlYXR1cmVcIjtcbiAgICBUSVRMRVtcIlJFR1JfQ09FRlNcIl0gPSBcIlJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzXCI7XG4gICAgVElUTEVbXCJYTE9BRElOR1wiXSA9IFwieC5sb2FkaW5nLnBcIjtcbiAgICBUSVRMRVtcIkxPQURJTkdTXCJdID0gXCJMb2FkaW5nc1wiO1xuICAgIFRJVExFW1wiWFNDT1JFXCJdID0gXCJ4LnNjb3JlLnRcIjtcbiAgICBUSVRMRVtcIllTQ09SRVwiXSA9IFwieS5zY29yZS51XCI7XG4gICAgVElUTEVbXCJTQ09SRVNcIl0gPSBcIlNjb3Jlc1wiO1xuICAgIFRJVExFW1wiRVhQTF9WQVJcIl0gPSBcIkV4cGxhaW5lZCBWYXJpYW5jZVwiO1xuICAgIFRJVExFW1wiRVhQTE9SRVwiXSA9IFwiRXhwbG9yZVwiO1xufSkoVElUTEUgfHwgKFRJVExFID0ge30pKTtcbi8qKiBUb29sdGlwcyAqL1xuZXhwb3J0IHZhciBISU5UO1xuKGZ1bmN0aW9uIChISU5UKSB7XG4gICAgSElOVFtcIlBSRURJQ1RcIl0gPSBcIkNvbHVtbiB3aXRoIHRoZSByZXNwb25zZSB2YXJpYWJsZVwiO1xuICAgIEhJTlRbXCJGRUFUVVJFU1wiXSA9IFwiUHJlZGljdG9ycyAoZmVhdHVyZXMpXCI7XG4gICAgSElOVFtcIkNPTVBPTkVOVFNcIl0gPSBcIk51bWJlciBvZiBQTFMgY29tcG9uZW50c1wiO1xuICAgIEhJTlRbXCJQTFNcIl0gPSBcIkNvbXB1dGUgUExTIGNvbXBvbmVudHNcIjtcbiAgICBISU5UW1wiTVZBXCJdID0gXCJQZXJmb3JtIG11bHRpdmFyaWF0ZSBhbmFseXNpc1wiO1xuICAgIEhJTlRbXCJOQU1FU1wiXSA9IFwiTmFtZXMgb2YgZGF0YSBzYW1wbGVzXCI7XG59KShISU5UIHx8IChISU5UID0ge30pKTtcbi8qKiBMaW5rcyB0byBoZWxwICovXG5leHBvcnQgdmFyIExJTks7XG4oZnVuY3Rpb24gKExJTkspIHtcbiAgICBMSU5LW1wiUExTXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxzI3Bscy1jb21wb25lbnRzXCI7XG4gICAgTElOS1tcIk1WQVwiXSA9IFwiaHR0cHM6Ly9kYXRhZ3Jvay5haS9oZWxwL2V4cGxvcmUvbXVsdGl2YXJpYXRlLWFuYWx5c2lzL3Bsc1wiO1xuICAgIExJTktbXCJNT0RFTFwiXSA9IFwiaHR0cHM6Ly9kYXRhZ3Jvay5haS9oZWxwL2V4cGxvcmUvbXVsdGl2YXJpYXRlLWFuYWx5c2lzL3Bsb3RzL3ByZWRpY3RlZC12cy1yZWZlcmVuY2VcIjtcbiAgICBMSU5LW1wiQ09FRkZTXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxvdHMvcmVncmVzc2lvbi1jb2VmZmljaWVudHNcIjtcbiAgICBMSU5LW1wiTE9BRElOR1NcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbG90cy9sb2FkaW5nc1wiO1xuICAgIExJTktbXCJFWFBMX1ZBUlNcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbG90cy9leHBsYWluZWQtdmFyaWFuY2VcIjtcbiAgICBMSU5LW1wiU0NPUkVTXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxvdHMvc2NvcmVzXCI7XG59KShMSU5LIHx8IChMSU5LID0ge30pKTtcbi8qKiBDb21wb25lbnRzIGNvbnN0cyAqL1xuZXhwb3J0IHZhciBDT01QT05FTlRTO1xuKGZ1bmN0aW9uIChDT01QT05FTlRTKSB7XG4gICAgQ09NUE9ORU5UU1tDT01QT05FTlRTW1wiREVGQVVMVFwiXSA9IDNdID0gXCJERUZBVUxUXCI7XG4gICAgQ09NUE9ORU5UU1tDT01QT05FTlRTW1wiTUlOXCJdID0gMV0gPSBcIk1JTlwiO1xufSkoQ09NUE9ORU5UUyB8fCAoQ09NUE9ORU5UUyA9IHt9KSk7XG4vKiogSXRlbXMgdXNlZCBmb3IgbmFtaW5nIHJlc3VsdHMgKi9cbmV4cG9ydCB2YXIgUkVTVUxUX05BTUVTO1xuKGZ1bmN0aW9uIChSRVNVTFRfTkFNRVMpIHtcbiAgICBSRVNVTFRfTkFNRVNbXCJQUkVGSVhcIl0gPSBcIlBMU1wiO1xuICAgIFJFU1VMVF9OQU1FU1tcIlNVRkZJWFwiXSA9IFwiKHByZWRpY3RlZClcIjtcbiAgICBSRVNVTFRfTkFNRVNbXCJDT01QXCJdID0gXCJjb21wb25lbnRcIjtcbiAgICBSRVNVTFRfTkFNRVNbXCJDT01QU1wiXSA9IFwiY29tcG9uZW50c1wiO1xufSkoUkVTVUxUX05BTUVTIHx8IChSRVNVTFRfTkFNRVMgPSB7fSkpO1xuLyoqIEluZGVjZXMgb2Ygd2FzbS1jb21wdXRhdGlvbiBvdXRwdXQgKi9cbmV4cG9ydCB2YXIgV0FTTV9PVVRQVVRfSURYO1xuKGZ1bmN0aW9uIChXQVNNX09VVFBVVF9JRFgpIHtcbiAgICBXQVNNX09VVFBVVF9JRFhbV0FTTV9PVVRQVVRfSURYW1wiUFJFRElDVElPTlwiXSA9IDBdID0gXCJQUkVESUNUSU9OXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlJFR1JfQ09FRkZTXCJdID0gMV0gPSBcIlJFR1JfQ09FRkZTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlRfU0NPUkVTXCJdID0gMl0gPSBcIlRfU0NPUkVTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlVfU0NPUkVTXCJdID0gM10gPSBcIlVfU0NPUkVTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlhfTE9BRElOR1NcIl0gPSA0XSA9IFwiWF9MT0FESU5HU1wiO1xuICAgIFdBU01fT1VUUFVUX0lEWFtXQVNNX09VVFBVVF9JRFhbXCJZX0xPQURJTkdTXCJdID0gNV0gPSBcIllfTE9BRElOR1NcIjtcbn0pKFdBU01fT1VUUFVUX0lEWCB8fCAoV0FTTV9PVVRQVVRfSURYID0ge30pKTtcbmV4cG9ydCBjb25zdCBJTlQgPSAnSW50JztcbmV4cG9ydCBjb25zdCBUSU1FT1VUID0gNjtcbmV4cG9ydCBjb25zdCBSQURJVVMgPSBbMC40OSwgMC43OSwgMC45OV07XG5leHBvcnQgY29uc3QgTElORV9XSURUSCA9IDE7XG5leHBvcnQgY29uc3QgWF9DT09SRCA9IDIwMDtcbmV4cG9ydCBjb25zdCBZX0NPT1JEID0gMjAwO1xuZXhwb3J0IGNvbnN0IERFTEFZID0gMjAwMDtcbi8qKiBDdXJ2ZXMgY29sb3JzICovXG5leHBvcnQgdmFyIENPTE9SO1xuKGZ1bmN0aW9uIChDT0xPUikge1xuICAgIENPTE9SW1wiQVhJU1wiXSA9IFwiIzgzODM4M1wiO1xuICAgIENPTE9SW1wiQ0lSQ0xFXCJdID0gXCIjMDAwMEZGXCI7XG59KShDT0xPUiB8fCAoQ09MT1IgPSB7fSkpO1xuO1xuLyoqIEludHJvIG1hcmtkb3duIGZvciBkZW1vIGFwcCAqL1xuZXhwb3J0IGNvbnN0IERFTU9fSU5UUk9fTUQgPSBgIyBEYXRhXG5FYWNoIGNhciBoYXMgbWFueSBmZWF0dXJlcyAtIHBhdHRlcm5zIGV4dHJhY3Rpb24gaXMgY29tcGxpY2F0ZWQuXG5cbiMgTW9kZWxcblByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy5cblxuIyBUcnlcblByZXNzICdSVU4nIHRvIHBlcmZvcm0gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIHVzaW5nIHBhcnRpYWwgbGVhc3Qgc3F1YXJlc1xuKFtQTFNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BhcnRpYWxfbGVhc3Rfc3F1YXJlc19yZWdyZXNzaW9uKSkgcmVncmVzc2lvbi5cblxuIyBFc3NlbmNlXG5UaGUgbWV0aG9kIGZpbmRzIHRoZSBsYXRlbnQgZmFjdG9ycyB0aGF0XG5cbiogY2FwdHVyZSB0aGUgbWF4aW11bSB2YXJpYW5jZSBpbiB0aGUgZmVhdHVyZXNcbiogbWF4aW1pemUgY29ycmVsYXRpb24gd2l0aCB0aGUgcmVzcG9uc2UgdmFyaWFibGVgO1xuLyoqIERlc2NyaXB0aW9uIG9mIGRlbW8gcmVzdWx0czogd2l6YXJkIGNvbXBvbmVudHMgKi9cbmV4cG9ydCBjb25zdCBERU1PX1JFU1VMVFMgPSBbXG4gICAgeyBjYXB0aW9uOiBUSVRMRS5NT0RFTCwgdGV4dDogJ0Nsb3NlciB0byB0aGUgbGluZSBtZWFucyBiZXR0ZXIgcHJpY2UgcHJlZGljdGlvbi4nIH0sXG4gICAgeyBjYXB0aW9uOiBUSVRMRS5TQ09SRVMsIHRleHQ6ICdUaGUgbGF0ZW50IGZhY3RvciB2YWx1ZXMgZm9yIGVhY2ggZGF0YSBzYW1wbGUgcmVmbGVjdCB0aGUgc2ltaWxhcml0aWVzIGFuZCBkaXNzaW1pbGFyaXRpZXMgYW1vbmcgb2JzZXJ2YXRpb25zLicgfSxcbiAgICB7IGNhcHRpb246IFRJVExFLkxPQURJTkdTLCB0ZXh0OiAnVGhlIGltcGFjdCBvZiBlYWNoIGZlYXR1cmUgb24gdGhlIGxhdGVudCBmYWN0b3JzOiBoaWdoZXIgbG9hZGluZyBtZWFucyBzdHJvbmdlciBpbmZsdWVuY2UuJyB9LFxuICAgIHsgY2FwdGlvbjogVElUTEUuUkVHUl9DT0VGUywgdGV4dDogJ1BhcmFtZXRlcnMgb2YgdGhlIG9idGFpbmVkIGxpbmVhciBtb2RlbDogZmVhdHVyZXMgbWFrZSBkaWZmZXJlbnQgY29udHJpYnV0aW9uIHRvIHRoZSBwcmVkaWN0aW9uLicgfSxcbiAgICB7IGNhcHRpb246IFRJVExFLkVYUExfVkFSLCB0ZXh0OiAnSG93IHdlbGwgdGhlIGxhdGVudCBjb21wb25lbnRzIGZpdCBzb3VyY2UgZGF0YTogY2xvc2VyIHRvIG9uZSBtZWFucyBiZXR0ZXIgZml0LicgfSxcbl07XG4vKiogRm9ybSByZXN1bHRzIG1hcmtkb3duIGZvciBkZW1vIGFwcCAqL1xuZXhwb3J0IGNvbnN0IERFTU9fUkVTVUxUU19NRCA9IERFTU9fUkVTVUxUUy5tYXAoKGl0ZW0pID0+IGAjICR7aXRlbS5jYXB0aW9ufVxcblxcbiR7aXRlbS50ZXh0fWApXG4gICAgLmpvaW4oJ1xcblxcbicpICsgYFxcblxcbiMgTGVhcm4gbW9yZVxuICBcbiAgKiBbTXVsdGl2YXJpYXRlIGFuYWx5c2lzXSgke0xJTksuTVZBfSksXG4gICogW0FOT1ZBXShodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9hbm92YSlgO1xuIiwiLy8gVG9vbHMgZm9yIG11bHRpdmFyaWF0ZSBhbmFseXNpcyBieSBQTFNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFBMU19BTkFMWVNJUywgRVJST1JfTVNHLCBUSVRMRSwgSElOVCwgTElOSywgQ09NUE9ORU5UUywgSU5ULCBUSU1FT1VULCBSRVNVTFRfTkFNRVMsIFdBU01fT1VUUFVUX0lEWCwgUkFESVVTLCBMSU5FX1dJRFRILCBDT0xPUiwgWF9DT09SRCwgWV9DT09SRCwgREVNT19JTlRST19NRCwgREVNT19SRVNVTFRTX01ELCBERU1PX1JFU1VMVFMgfSBmcm9tICcuL3Bscy1jb25zdGFudHMnO1xuaW1wb3J0IHsgY2hlY2tXYXNtRGltZW5zaW9uUmVkdWNlcklucHV0cywgY2hlY2tDb2x1bW5UeXBlLCBjaGVja01pc3NpbmdWYWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uLy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNhcnNEYXRhZnJhbWUgfSBmcm9tICcuLi9kYXRhLWdlbmVyYXRvcnMnO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbi8qKiBQYXJ0aWFsIGxlYXN0IHNxdWFyZSByZWdyZXNzaW9uIChQTFMpICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxzQW5hbHlzaXMoaW5wdXQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzKGlucHV0LmZlYXR1cmVzLCBpbnB1dC5jb21wb25lbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgdGhlIHJlc3BvbmNlIGNvbHVtblxuICAgICAgICBjaGVja0NvbHVtblR5cGUoaW5wdXQucHJlZGljdCk7XG4gICAgICAgIGNoZWNrTWlzc2luZ1ZhbHMoaW5wdXQucHJlZGljdCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIoaW5wdXQudGFibGUsIGlucHV0LmZlYXR1cmVzLCBpbnB1dC5wcmVkaWN0LCBpbnB1dC5jb21wb25lbnRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb246IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguUFJFRElDVElPTl0sXG4gICAgICAgICAgICByZWdyZXNzaW9uQ29lZmZpY2llbnRzOiByZXN1bHRbV0FTTV9PVVRQVVRfSURYLlJFR1JfQ09FRkZTXSxcbiAgICAgICAgICAgIHRTY29yZXM6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguVF9TQ09SRVNdLFxuICAgICAgICAgICAgdVNjb3JlczogcmVzdWx0W1dBU01fT1VUUFVUX0lEWC5VX1NDT1JFU10sXG4gICAgICAgICAgICB4TG9hZGluZ3M6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguWF9MT0FESU5HU10sXG4gICAgICAgICAgICB5TG9hZGluZ3M6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguWV9MT0FESU5HU10sXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKiogUGVyZm9ybSBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgdXNpbmcgdGhlIFBMUyByZWdyZXNzaW9uICovXG5mdW5jdGlvbiBwZXJmb3JtTVZBKGlucHV0LCBhbmFseXNpc1R5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGdldFBsc0FuYWx5c2lzKGlucHV0KTtcbiAgICAgICAgY29uc3QgcGxzQ29scyA9IHJlc3VsdC50U2NvcmVzO1xuICAgICAgICBjb25zdCBjb2xzID0gaW5wdXQudGFibGUuY29sdW1ucztcbiAgICAgICAgY29uc3QgZmVhdHVyZXNOYW1lcyA9IGlucHV0LmZlYXR1cmVzLm5hbWVzKCk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpID8gUkVTVUxUX05BTUVTLlBSRUZJWCA6IFRJVExFLlhTQ09SRTtcbiAgICAgICAgLy8gYWRkIFBMUyBjb21wb25lbnRzIHRvIHRoZSB0YWJsZVxuICAgICAgICBwbHNDb2xzLmZvckVhY2goKGNvbCwgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb2wubmFtZSA9IGNvbHMuZ2V0VW51c2VkTmFtZShgJHtwcmVmaXh9JHtpZHggKyAxfWApO1xuICAgICAgICAgICAgY29scy5hZGQoY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZpZXcgPSBncm9rLnNoZWxsLnRhYmxlVmlldyhpbnB1dC50YWJsZS5uYW1lKTtcbiAgICAgICAgLy8gMC4xIEJ1ZmZlciB0YWJsZVxuICAgICAgICBjb25zdCBidWZmZXIgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKFRJVExFLkZFQVRVUkUsIGZlYXR1cmVzTmFtZXMpLFxuICAgICAgICAgICAgcmVzdWx0LnJlZ3Jlc3Npb25Db2VmZmljaWVudHMsXG4gICAgICAgIF0pO1xuICAgICAgICAvLyAwLjIuIEFkZCBYLUxvYWRpbmdzXG4gICAgICAgIHJlc3VsdC54TG9hZGluZ3MuZm9yRWFjaCgoY29sLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbC5uYW1lID0gYnVmZmVyLmNvbHVtbnMuZ2V0VW51c2VkTmFtZShgJHtUSVRMRS5YTE9BRElOR30ke2lkeCArIDF9YCk7XG4gICAgICAgICAgICBidWZmZXIuY29sdW1ucy5hZGQoY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDEuIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG4gICAgICAgIGNvbnN0IHByZWQgPSByZXN1bHQucHJlZGljdGlvbjtcbiAgICAgICAgcHJlZC5uYW1lID0gY29scy5nZXRVbnVzZWROYW1lKGAke2lucHV0LnByZWRpY3QubmFtZX0gJHtSRVNVTFRfTkFNRVMuU1VGRklYfWApO1xuICAgICAgICBjb2xzLmFkZChwcmVkKTtcbiAgICAgICAgY29uc3QgcHJlZGljdFZzUmVmZXJTY2F0dGVyID0gdmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLnNjYXR0ZXJQbG90KGlucHV0LnRhYmxlLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuTU9ERUwsXG4gICAgICAgICAgICB4Q29sdW1uTmFtZTogaW5wdXQucHJlZGljdC5uYW1lLFxuICAgICAgICAgICAgeUNvbHVtbk5hbWU6IHByZWQubmFtZSxcbiAgICAgICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgICAgIG1hcmtlclR5cGU6IERHLk1BUktFUl9UWVBFLkNJUkNMRSxcbiAgICAgICAgICAgIGxhYmVsczogKF9hID0gaW5wdXQubmFtZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lLFxuICAgICAgICAgICAgaGVscDogTElOSy5NT0RFTCxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyAyLiBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbiAgICAgICAgcmVzdWx0LnJlZ3Jlc3Npb25Db2VmZmljaWVudHMubmFtZSA9IFRJVExFLlJFR1JfQ09FRlM7XG4gICAgICAgIGNvbnN0IHJlZ3JDb2VmZnNCYXIgPSB2aWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuYmFyQ2hhcnQoYnVmZmVyLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuUkVHUl9DT0VGUyxcbiAgICAgICAgICAgIHNwbGl0Q29sdW1uTmFtZTogVElUTEUuRkVBVFVSRSxcbiAgICAgICAgICAgIHZhbHVlQ29sdW1uTmFtZTogcmVzdWx0LnJlZ3Jlc3Npb25Db2VmZmljaWVudHMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlQWdnclR5cGU6IERHLkFHRy5BVkcsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLkNPRUZGUyxcbiAgICAgICAgICAgIHNob3dWYWx1ZVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dTdGFja1NlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyAzLiBMb2FkaW5ncyBTY2F0dGVyIFBsb3RcbiAgICAgICAgcmVzdWx0LnhMb2FkaW5ncy5mb3JFYWNoKChjb2wsIGlkeCkgPT4gY29sLm5hbWUgPSBgJHtUSVRMRS5YTE9BRElOR30ke2lkeCArIDF9YCk7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdzU2NhdHRlciA9IHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChidWZmZXIsIHtcbiAgICAgICAgICAgIHRpdGxlOiBUSVRMRS5MT0FESU5HUyxcbiAgICAgICAgICAgIHhDb2x1bW5OYW1lOiBgJHtUSVRMRS5YTE9BRElOR30xYCxcbiAgICAgICAgICAgIHlDb2x1bW5OYW1lOiBgJHtUSVRMRS5YTE9BRElOR30ke3Jlc3VsdC54TG9hZGluZ3MubGVuZ3RoID4gMSA/ICcyJyA6ICcxJ31gLFxuICAgICAgICAgICAgbWFya2VyVHlwZTogREcuTUFSS0VSX1RZUEUuQ0lSQ0xFLFxuICAgICAgICAgICAgbGFiZWxzOiBUSVRMRS5GRUFUVVJFLFxuICAgICAgICAgICAgaGVscDogTElOSy5MT0FESU5HUyxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyA0LiBTY29yZXMgU2NhdHRlciBQbG90XG4gICAgICAgIC8vIDQuMSkgZGF0YVxuICAgICAgICBjb25zdCBzY29yZU5hbWVzID0gcGxzQ29scy5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICByZXN1bHQudVNjb3Jlcy5mb3JFYWNoKChjb2wsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29sLm5hbWUgPSBjb2xzLmdldFVudXNlZE5hbWUoYCR7VElUTEUuWVNDT1JFfSR7aWR4ICsgMX1gKTtcbiAgICAgICAgICAgIGNvbHMuYWRkKGNvbCk7XG4gICAgICAgICAgICBzY29yZU5hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gNC4yKSBjcmVhdGUgc2NhdHRlclxuICAgICAgICBjb25zdCBzY29yZXNTY2F0dGVyID0gREcuVmlld2VyLnNjYXR0ZXJQbG90KGlucHV0LnRhYmxlLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuU0NPUkVTLFxuICAgICAgICAgICAgeENvbHVtbk5hbWU6IHBsc0NvbHNbMF0ubmFtZSxcbiAgICAgICAgICAgIHlDb2x1bW5OYW1lOiAocGxzQ29scy5sZW5ndGggPiAxKSA/IHBsc0NvbHNbMV0ubmFtZSA6IHJlc3VsdC51U2NvcmVzWzBdLm5hbWUsXG4gICAgICAgICAgICBtYXJrZXJUeXBlOiBERy5NQVJLRVJfVFlQRS5DSVJDTEUsXG4gICAgICAgICAgICBsYWJlbHM6IChfYiA9IGlucHV0Lm5hbWVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubmFtZSxcbiAgICAgICAgICAgIGhlbHA6IExJTksuU0NPUkVTLFxuICAgICAgICAgICAgc2hvd1ZpZXdlckZvcm11bGFMaW5lczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDQuMykgY3JlYXRlIGxpbmVzICYgY2lyY2xlc1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICBjb25zdCBhZGRMaW5lID0gKGZvcm11bGEsIHJhZGl1cykgPT4ge1xuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgICAgIGZvcm11bGE6IGZvcm11bGEsXG4gICAgICAgICAgICAgICAgd2lkdGg6IExJTkVfV0lEVEgsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogJyAnLFxuICAgICAgICAgICAgICAgIG1pbjogLXJhZGl1cyxcbiAgICAgICAgICAgICAgICBtYXg6IHJhZGl1cyxcbiAgICAgICAgICAgICAgICBjb2xvcjogQ09MT1IuQ0lSQ0xFLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHNjb3JlTmFtZXMuZm9yRWFjaCgoeE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSAnJHsnICsgeE5hbWUgKyAnfSc7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgdHlwZTogJ2xpbmUnLCBmb3JtdWxhOiBgJHt4fSA9IDBgLCB3aWR0aDogTElORV9XSURUSCwgdmlzaWJsZTogdHJ1ZSwgdGl0bGU6ICcgJywgY29sb3I6IENPTE9SLkFYSVMgfSk7XG4gICAgICAgICAgICBzY29yZU5hbWVzLmZvckVhY2goKHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9ICckeycgKyB5TmFtZSArICd9JztcbiAgICAgICAgICAgICAgICBSQURJVVMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHkgKyBgID0gc3FydCgke3IgKiByfSAtICR7eH0gKiAke3h9KWAsIHIpO1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHkgKyBgID0gLXNxcnQoJHtyICogcn0gLSAke3h9ICogJHt4fSlgLCByKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc2NvcmVzU2NhdHRlci5tZXRhLmZvcm11bGFMaW5lcy5hZGRBbGwobGluZXMpO1xuICAgICAgICB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyKTtcbiAgICAgICAgLy8gNS4gRXhwbGFpbmVkIFZhcmlhbmNlc1xuICAgICAgICAvLyA1LjEpIGNvbXB1dGF0aW9uLCBzb3VyY2U6IHRoZSBwYXBlciBodHRwczovL2RvaS5vcmcvMTAuMTAwMi9jZW0uMjU4OVxuICAgICAgICAvLyAgICAgIGhlcmUsIHdlIHVzZSBub3RhdGlvbnMgZnJvbSB0aGlzIHBhcGVyXG4gICAgICAgIGNvbnN0IHEgPSByZXN1bHQueUxvYWRpbmdzLmdldFJhd0RhdGEoKTtcbiAgICAgICAgY29uc3QgcCA9IHJlc3VsdC54TG9hZGluZ3MubWFwKChjb2wpID0+IGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICBjb25zdCBuID0gaW5wdXQudGFibGUucm93Q291bnQ7XG4gICAgICAgIGNvbnN0IG0gPSBmZWF0dXJlc05hbWVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgQSA9IGlucHV0LmNvbXBvbmVudHM7XG4gICAgICAgIGNvbnN0IHlFeHBsVmFycyA9IG5ldyBGbG9hdDMyQXJyYXkoQSk7XG4gICAgICAgIGNvbnN0IGNvbXBOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCB4RXhwbFZhcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyArK2kpXG4gICAgICAgICAgICB4RXhwbFZhcnMucHVzaChuZXcgRmxvYXQzMkFycmF5KEEpKTtcbiAgICAgICAgeUV4cGxWYXJzWzBdID0gTWF0aC5wb3cocVswXSwgMikgLyBuO1xuICAgICAgICBjb21wTmFtZXMucHVzaChgMSAke1JFU1VMVF9OQU1FUy5DT01QfWApO1xuICAgICAgICB4RXhwbFZhcnMuZm9yRWFjaCgoYXJyLCBpZHgpID0+IHsgYXJyWzBdID0gTWF0aC5wb3cocFswXVtpZHhdLCAyKSAvIG47IH0pO1xuICAgICAgICBmb3IgKGxldCBjb21wID0gMTsgY29tcCA8IEE7ICsrY29tcCkge1xuICAgICAgICAgICAgeUV4cGxWYXJzW2NvbXBdID0geUV4cGxWYXJzW2NvbXAgLSAxXSArIE1hdGgucG93KHFbY29tcF0sIDIpIC8gbjtcbiAgICAgICAgICAgIHhFeHBsVmFycy5mb3JFYWNoKChhcnIsIGlkeCkgPT4gYXJyW2NvbXBdID0gYXJyW2NvbXAgLSAxXSArIE1hdGgucG93KHBbY29tcF1baWR4XSwgMikgLyBuKTtcbiAgICAgICAgICAgIGNvbXBOYW1lcy5wdXNoKGAke2NvbXAgKyAxfSAke1JFU1VMVF9OQU1FUy5DT01QU31gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyA1LjIpIGNyZWF0ZSBkZlxuICAgICAgICBjb25zdCBleHBsVmFyc0RGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncyhUSVRMRS5DT01QT05FTlRTLCBjb21wTmFtZXMpLFxuICAgICAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaW5wdXQucHJlZGljdC5uYW1lLCB5RXhwbFZhcnMpLFxuICAgICAgICBdKTtcbiAgICAgICAgeEV4cGxWYXJzLmZvckVhY2goKGFyciwgaWR4KSA9PiBleHBsVmFyc0RGLmNvbHVtbnMuYWRkKERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KGZlYXR1cmVzTmFtZXNbaWR4XSwgYXJyKSkpO1xuICAgICAgICAvLyA1LjMpIGJhciBjaGFydFxuICAgICAgICBjb25zdCBleHBsVmFyc0JhciA9IHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5iYXJDaGFydChleHBsVmFyc0RGLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuRVhQTF9WQVIsXG4gICAgICAgICAgICBzcGxpdENvbHVtbk5hbWU6IFRJVExFLkNPTVBPTkVOVFMsXG4gICAgICAgICAgICB2YWx1ZUNvbHVtbk5hbWU6IGlucHV0LnByZWRpY3QubmFtZSxcbiAgICAgICAgICAgIHZhbHVlQWdnclR5cGU6IERHLkFHRy5BVkcsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLkVYUExfVkFSUyxcbiAgICAgICAgICAgIHNob3dDYXRlZ29yeVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dTdGFja1NlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlbXBoYXNpemUgdmlld2VycyBpbiB0aGUgZGVtbyBjYXNlXG4gICAgICAgIGlmIChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5ERU1PKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlcyA9IFtwcmVkaWN0VnNSZWZlclNjYXR0ZXIsIHNjb3Jlc1NjYXR0ZXIsIGxvYWRpbmdzU2NhdHRlciwgcmVnckNvZWZmc0JhciwgZXhwbFZhcnNCYXJdXG4gICAgICAgICAgICAgICAgLm1hcCgodmlld2VyLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBERU1PX1JFU1VMVFNbaWR4XS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBzaG93TmV4dFRvOiB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB3aXphcmQgPSB1aS5oaW50cy5hZGRUZXh0SGludCh7IHRpdGxlOiBUSVRMRS5FWFBMT1JFLCBwYWdlczogcGFnZXMgfSk7XG4gICAgICAgICAgICB3aXphcmQuaGVscFVybCA9IExJTksuTVZBO1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLmhlbHAuc2hvd0hlbHAodWkubWFya2Rvd24oREVNT19SRVNVTFRTX01EKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0gLy8gcGVyZm9ybU1WQVxuLyoqIFJ1biBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgKFBMUykgKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5NVkEoYW5hbHlzaXNUeXBlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBncm9rLnNoZWxsLnQ7XG4gICAgICAgIGlmICh0YWJsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKEVSUk9SX01TRy5OT19ERik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlLnJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoRVJST1JfTVNHLkVNUFRZX0RGKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW1Db2xOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCBudW1Db2xzID0gW107XG4gICAgICAgIGNvbnN0IHN0ckNvbHMgPSBbXTtcbiAgICAgICAgY29uc3QgaXNWYWxpZE51bWVyaWMgPSAoY29sKSA9PiAoKGNvbC50eXBlID09PSBERy5DT0xVTU5fVFlQRS5JTlQpIHx8IChjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuRkxPQVQpKSAmJlxuICAgICAgICAgICAgKGNvbC5zdGF0cy5taXNzaW5nVmFsdWVDb3VudCA9PT0gMCk7XG4gICAgICAgIHRhYmxlLmNvbHVtbnMudG9MaXN0KCkuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZE51bWVyaWMoY29sKSkge1xuICAgICAgICAgICAgICAgIG51bUNvbE5hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIG51bUNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLnR5cGUgPT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgICAgICBzdHJDb2xzLnB1c2goY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChudW1Db2xOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuTk9fQ09MUyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bUNvbE5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKEVSUk9SX01TRy5PTkVfQ09MKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNwb25jZSAodG8gcHJlZGljdClcbiAgICAgICAgbGV0IHByZWRpY3QgPSBudW1Db2xzW251bUNvbHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHByZWRpY3RJbnB1dCA9IHVpLmNvbHVtbklucHV0KFRJVExFLlBSRURJQ1QsIHRhYmxlLCBwcmVkaWN0LCAoKSA9PiB7XG4gICAgICAgICAgICBwcmVkaWN0ID0gcHJlZGljdElucHV0LnZhbHVlO1xuICAgICAgICAgICAgdXBkYXRlSXB1dHMoKTtcbiAgICAgICAgfSwgeyBmaWx0ZXI6IChjb2wpID0+IGlzVmFsaWROdW1lcmljKGNvbCkgfSk7XG4gICAgICAgIHByZWRpY3RJbnB1dC5zZXRUb29sdGlwKEhJTlQuUFJFRElDVCk7XG4gICAgICAgIC8vIHByZWRpY3RvcnMgKGZlYXR1cmVzKVxuICAgICAgICBsZXQgZmVhdHVyZXM7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuVVNJTkcsIHRhYmxlLCAoKSA9PiB7IH0sIHsgYXZhaWxhYmxlOiBudW1Db2xOYW1lcyB9KTtcbiAgICAgICAgZmVhdHVyZXNJbnB1dC5vbklucHV0KCgpID0+IHVwZGF0ZUlwdXRzKCkpO1xuICAgICAgICBmZWF0dXJlc0lucHV0LnNldFRvb2x0aXAoSElOVC5GRUFUVVJFUyk7XG4gICAgICAgIC8vIGNvbXBvbmVudHMgY291bnRcbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBtaW4obnVtQ29sTmFtZXMubGVuZ3RoIC0gMSwgQ09NUE9ORU5UUy5ERUZBVUxUKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50c0lucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkoREcuUHJvcGVydHkuZnJvbU9wdGlvbnMoe1xuICAgICAgICAgICAgbmFtZTogVElUTEUuQ09NUE9ORU5UUyxcbiAgICAgICAgICAgIGlucHV0VHlwZTogSU5ULFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBzaG93UGx1c01pbnVzOiB0cnVlLFxuICAgICAgICAgICAgbWluOiBDT01QT05FTlRTLk1JTixcbiAgICAgICAgfSkpO1xuICAgICAgICBjb21wb25lbnRzSW5wdXQub25JbnB1dCgoKSA9PiB1cGRhdGVJcHV0cygpKTtcbiAgICAgICAgY29tcG9uZW50c0lucHV0LnNldFRvb2x0aXAoSElOVC5DT01QT05FTlRTKTtcbiAgICAgICAgbGV0IGRsZ1RpdGxlO1xuICAgICAgICBsZXQgZGxnSGVscFVybDtcbiAgICAgICAgbGV0IGRsZ1J1bkJ0blRvb2x0aXA7XG4gICAgICAgIGlmIChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpIHtcbiAgICAgICAgICAgIGRsZ1RpdGxlID0gVElUTEUuUExTO1xuICAgICAgICAgICAgZGxnSGVscFVybCA9IExJTksuUExTO1xuICAgICAgICAgICAgZGxnUnVuQnRuVG9vbHRpcCA9IEhJTlQuUExTO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGxnVGl0bGUgPSBUSVRMRS5NVkE7XG4gICAgICAgICAgICBkbGdIZWxwVXJsID0gTElOSy5NVkE7XG4gICAgICAgICAgICBkbGdSdW5CdG5Ub29sdGlwID0gSElOVC5NVkE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlSXB1dHMgPSAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBmZWF0dXJlc0lucHV0LnZhbHVlID0gZmVhdHVyZXNJbnB1dC52YWx1ZS5maWx0ZXIoKGNvbCkgPT4gY29sICE9PSBwcmVkaWN0KTtcbiAgICAgICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbXBvbmVudHNJbnB1dC52YWx1ZSA9IG1pbihtYXgoKF9hID0gY29tcG9uZW50c0lucHV0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb21wb25lbnRzLCBDT01QT05FTlRTLk1JTiksIGZlYXR1cmVzLmxlbmd0aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzID0gY29tcG9uZW50c0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgZGxnLmdldEJ1dHRvbihUSVRMRS5SVU4pLmRpc2FibGVkID0gKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgfHwgKGNvbXBvbmVudHMgPD0gMCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIG5hbWVzIG9mIHNhbXBsZXNcbiAgICAgICAgbGV0IG5hbWVzID0gKHN0ckNvbHMubGVuZ3RoID4gMCkgPyBzdHJDb2xzWzBdIDogbnVsbDtcbiAgICAgICAgY29uc3QgbmFtZXNJbnB1dHMgPSB1aS5jb2x1bW5JbnB1dChUSVRMRS5OQU1FUywgdGFibGUsIG5hbWVzLCAoKSA9PiBuYW1lcyA9IHByZWRpY3RJbnB1dC52YWx1ZSwgeyBmaWx0ZXI6IChjb2wpID0+IGNvbC50eXBlID09PSBERy5DT0xVTU5fVFlQRS5TVFJJTkcgfSk7XG4gICAgICAgIG5hbWVzSW5wdXRzLnNldFRvb2x0aXAoSElOVC5OQU1FUyk7XG4gICAgICAgIG5hbWVzSW5wdXRzLnJvb3QuaGlkZGVuID0gKHN0ckNvbHMubGVuZ3RoID09PSAwKSB8fCAoYW5hbHlzaXNUeXBlID09PSBQTFNfQU5BTFlTSVMuQ09NUFVURV9DT01QT05FTlRTKTtcbiAgICAgICAgY29uc3QgZGxnID0gdWkuZGlhbG9nKHsgdGl0bGU6IGRsZ1RpdGxlLCBoZWxwVXJsOiBkbGdIZWxwVXJsIH0pXG4gICAgICAgICAgICAuYWRkKHVpLmZvcm0oW3ByZWRpY3RJbnB1dCwgZmVhdHVyZXNJbnB1dCwgY29tcG9uZW50c0lucHV0LCBuYW1lc0lucHV0c10pKVxuICAgICAgICAgICAgLmFkZEJ1dHRvbihUSVRMRS5SVU4sICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRsZy5jbG9zZSgpO1xuICAgICAgICAgICAgeWllbGQgcGVyZm9ybU1WQSh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVzOiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZmVhdHVyZXMpLmNvbHVtbnMsXG4gICAgICAgICAgICAgICAgcHJlZGljdDogcHJlZGljdCxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgICAgIH0sIGFuYWx5c2lzVHlwZSk7XG4gICAgICAgIH0pLCB1bmRlZmluZWQsIGRsZ1J1bkJ0blRvb2x0aXApXG4gICAgICAgICAgICAuc2hvdyh7IHg6IFhfQ09PUkQsIHk6IFlfQ09PUkQgfSk7XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgZGVsYXkgcHJvdmlkZXMgY29ycmVjdCBzdHlsZXMgKHNlZSBodHRwczovL3JlZGRhdGEuYXRsYXNzaWFuLm5ldC9icm93c2UvR1JPSy0xNTE5NilcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmZWF0dXJlc0lucHV0LnZhbHVlID0gbnVtQ29scy5maWx0ZXIoKGNvbCkgPT4gY29sICE9PSBwcmVkaWN0KTtcbiAgICAgICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZTtcbiAgICAgICAgfSwgVElNRU9VVCk7XG4gICAgICAgIGdyb2suc2hlbGwudi5hcHBlbmQoZGxnLnJvb3QpO1xuICAgIH0pO1xufSAvLyBydW5NVkFcbi8qKiBSdW4gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIGRlbW8gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5EZW1vTVZBKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGNhcnNEYXRhZnJhbWUoKSk7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5oZWxwLnZpc2libGUgPSB0cnVlO1xuICAgICAgICBncm9rLnNoZWxsLndpbmRvd3MuaGVscC5zaG93SGVscCh1aS5tYXJrZG93bihERU1PX0lOVFJPX01EKSk7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gZmFsc2U7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcyA9IGZhbHNlO1xuICAgICAgICB5aWVsZCBydW5NVkEoUExTX0FOQUxZU0lTLkRFTU8pO1xuICAgIH0pO1xufVxuIiwiLy8gU3RhdGlzdGljIHRvb2xzXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xudmFyIEVSUk9SX01TRztcbihmdW5jdGlvbiAoRVJST1JfTVNHKSB7XG4gICAgRVJST1JfTVNHW1wiTk9OX0VRVUFMX0ZBQ1RPUlNfVkFMVUVTX1NJWkVcIl0gPSBcIm5vbi1lcXVhbCBzaXplcyBvZiBmYWN0b3IgYW5kIHZhbHVlcyBhcnJheXMuIElOUFVUIEVSUk9SLlwiO1xuICAgIEVSUk9SX01TR1tcIklOQ09SUkVDVF9TSUdOSUZJQ0FOQ0VfTEVWRUxcIl0gPSBcImluY29ycmVjdCBzaWduaWZpY2FuY2UgbGV2ZWwuIEl0IG11c3QgYmUgZnJvbSB0aGUgaW50ZXJ2YWwgKDAsIDEpLiBJTlBVVCBFUlJPUi5cIjtcbiAgICBFUlJPUl9NU0dbXCJJTkNPUlJFQ1RfU0FNUExFX1NJWkVcIl0gPSBcImluY29ycmVjdCBzaXplIG9mIHNhbXBsZS4gREFUQSBGQUNUT1JJWkFJTkcgRVJST1IuXCI7XG4gICAgRVJST1JfTVNHW1wiTk9OX0VRVUFMX1ZBUklBTkNFU1wiXSA9IFwidmFyaWFuY2VzIGFyZSBub3QgZXF1YWwuXCI7XG4gICAgRVJST1JfTVNHW1wiTk9OX05PUk1BTF9ESVNUUklCXCJdID0gXCJub24tbm9ybWFsIGRpc3RyaWJ1dGlvbi5cIjtcbiAgICBFUlJPUl9NU0dbXCJVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRVwiXSA9IFwidW5zdXBwb3J0ZWQgY29sdW1uIHR5cGUuXCI7XG4gICAgRVJST1JfTVNHW1wiSU5DT1JSRUNUX0NBVEVHT1JJRVNfQ09MX1RZUEVcIl0gPSBcImluY29ycmVjdCBjYXRlZ29yaWVzIGNvbHVtbiB0eXBlLlwiO1xuICAgIEVSUk9SX01TR1tcIkFOT1ZBX0ZBSUxFRF9KVVNUX09ORV9DQVRcIl0gPSBcIkFOT1ZBIGZpbGVkOiB0aGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgMiBjYXRlZ29yaWVzLlwiO1xufSkoRVJST1JfTVNHIHx8IChFUlJPUl9NU0cgPSB7fSkpO1xuO1xuLyoqIENyZWF0ZSBkYXRhZnJhbWUgd2l0aCBvbmUtd2F5IEFOT1ZBIHJlc3VsdHMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T25lV2F5QW5vdmFERihhbm92YSwgYWxwaGEsIGZDcml0aWNhbCwgaHlwb3RoZXNpcywgdGVzdFJlc3VsdCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ1NvdXJjZSBvZiB2YXJpYW5jZScsIFsnQmV0d2VlbiBncm91cHMnLCAnV2l0aGluIGdyb3VwcycsICdUb3RhbCcsICcnLCBoeXBvdGhlc2lzLCAnJywgdGVzdFJlc3VsdF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuRkxPQVQsICdTdW0gb2Ygc3F1YXJlcycsIFthbm92YS5zc0JuLCBhbm92YS5zc1duLCBhbm92YS5zc1RvdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuSU5ULCAnRGVncmVlcyBvZiBmcmVlZG9tJywgW2Fub3ZhLmRmQm4sIGFub3ZhLmRmV24sIGFub3ZhLmRmVG90LCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgJ01lYW4gc3F1YXJlJywgW2Fub3ZhLm1zQm4sIGFub3ZhLm1zV24sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KERHLkNPTFVNTl9UWVBFLkZMT0FULCAnRi1zdGF0aXN0aWNzJywgW2Fub3ZhLmZTdGF0LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgJ3AtdmFsdWUnLCBbYW5vdmEucFZhbHVlLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgYCR7YWxwaGF9LWNyaXRpY2FsIHZhbHVlYCwgW2ZDcml0aWNhbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgIF0pO1xufSAvLyBnZXRPbmVXYXlBbm92YURGXG4vKiogQ2hlY2sgY29ycmVjdG5lc3Mgb2Ygc2lnbmlmaWNhbmNlIGxldmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2lnbmlmaWNhbmNlTGV2ZWwoYWxwaGEpIHtcbiAgICBpZiAoKGFscGhhIDw9IDApIHx8IChhbHBoYSA+PSAxKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5JTkNPUlJFQ1RfU0lHTklGSUNBTkNFX0xFVkVMKTtcbn1cbi8qKiBDb21wdXRlIHVuYmlhc2VkIHZhcmlhbmNlLiovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFyaWFuY2UoZGF0YSkge1xuICAgIC8vIFRoZSBhcHBsaWVkIGZvcm11bGFzIGNhbiBiZSBmb3VuZCBpbiBbNF0gKHNlZSBwLiA2MylcbiAgICBjb25zdCBzaXplID0gZGF0YS5zaXplO1xuICAgIGlmIChzaXplIDw9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuSU5DT1JSRUNUX1NBTVBMRV9TSVpFKTtcbiAgICBpZiAoc2l6ZSA9PT0gMSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChkYXRhLnN1bU9mU3F1YXJlcyAtIE1hdGgucG93KChkYXRhLnN1bSksIDIpIC8gc2l6ZSkgLyAoc2l6ZSAtIDEpO1xufSAvLyBnZXRWYXJpYW5jZVxuLyoqIENoZWNrIGVxdWFsaXR5IG9mIHZhcmlhbmNlcyBvZiAyIHNhbXBsZXMuIEYtdGVzdCBpcyBwZXJmb3JtZWQuKi9cbmZ1bmN0aW9uIGFyZVZhcnNFcXVhbCh4RGF0YSwgeURhdGEsIGFscGhhID0gMC4wNSkge1xuICAgIC8vIFRoZSBhcHBsaWVkIGFwcHJvYWNoIGNhbiBiZSBmb3VuZCBpbiBbM11cbiAgICBjaGVja1NpZ25pZmljYW5jZUxldmVsKGFscGhhKTtcbiAgICBjb25zdCB4VmFyID0gZ2V0VmFyaWFuY2UoeERhdGEpO1xuICAgIGNvbnN0IHlWYXIgPSBnZXRWYXJpYW5jZSh5RGF0YSk7XG4gICAgaWYgKHlWYXIgPT09IDApXG4gICAgICAgIHJldHVybiAoeFZhciA9PT0geVZhcik7XG4gICAgY29uc3QgZlN0YXQgPSB4VmFyIC8geVZhcjtcbiAgICBjb25zdCBmQ3JpdCA9IGpTdGF0LmNlbnRyYWxGLmludigxIC0gYWxwaGEsIHhEYXRhLnNpemUgLSAxLCB5RGF0YS5zaXplIC0gMSk7XG4gICAgcmV0dXJuIChmU3RhdCA8IGZDcml0KTtcbn0gLy8gYXJlVmFyc0VxdWFsXG5leHBvcnQgY2xhc3MgRmFjdG9yaXplZERhdGEge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3JpZXMsIHZhbHVlcywgY2hlY2tOb3JtYWxpdHkgPSBmYWxzZSwgYWxwaGEgPSAwLjA1KSB7XG4gICAgICAgIHRoaXMuaXNOb3JtRGlzdHJpYiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gW107XG4gICAgICAgIGlmIChjYXRlZ29yaWVzLnR5cGUgIT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLk5PTl9FUVVBTF9GQUNUT1JTX1ZBTFVFU19TSVpFKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0cyhjYXRlZ29yaWVzLCB2YWx1ZXMsIGNoZWNrTm9ybWFsaXR5LCBhbHBoYSk7XG4gICAgfVxuICAgIGlzTm9ybWFsKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqIENoZWNrIGVxdWFsaXR5IG9mIHZhcmlhbmNlcyBvZiBmYWN0b3JpemVkIGRhdGEuICovXG4gICAgYXJlVmFyc0VxdWFsKGFscGhhID0gMC4wNSkge1xuICAgICAgICBjb25zdCBLID0gdGhpcy5jYXRDb3VudDtcbiAgICAgICAgaWYgKEsgPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSB7IHN1bTogdGhpcy5zdW1zWzBdLCBzdW1PZlNxdWFyZXM6IHRoaXMuc3Vtc09mU3F1YXJlc1swXSwgc2l6ZTogdGhpcy5zdWJTYW1wbGVTaXplc1swXSB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEs7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFhcmVWYXJzRXF1YWwoZmlyc3QsIHsgc3VtOiB0aGlzLnN1bXNbaV0sIHN1bU9mU3F1YXJlczogdGhpcy5zdW1zT2ZTcXVhcmVzW2ldLFxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuc3ViU2FtcGxlU2l6ZXNbaV0gfSwgYWxwaGEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIGFyZVZhcnNFcXVhbFxuICAgIC8qKiBQZXJmb3JtIG9uZS13YXkgQU5PVkEgY29tcHV0YXRpb25zLiAqL1xuICAgIGdldE9uZVdheUFub3ZhKCkge1xuICAgICAgICAvLyBGdXJ0aGVyLCBub3RhdGlvbnMgYW5kIGZvcm11bGFzIGZyb20gKHNlZSBbMl0sIHAuIDI5MCkgYXJlIHVzZWQuXG4gICAgICAgIGNvbnN0IEsgPSB0aGlzLmNhdENvdW50O1xuICAgICAgICBpZiAoSyA9PT0gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuQU5PVkFfRkFJTEVEX0pVU1RfT05FX0NBVCk7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBsZXQgc3VtT2ZTcXVhcmVzID0gMDtcbiAgICAgICAgY29uc3QgTiA9IHRoaXMuc2l6ZTtcbiAgICAgICAgbGV0IGJ1ZiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSzsgKytpKSB7XG4gICAgICAgICAgICBzdW0gKz0gdGhpcy5zdW1zW2ldO1xuICAgICAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHRoaXMuc3Vtc09mU3F1YXJlc1tpXTtcbiAgICAgICAgICAgIGJ1ZiArPSBNYXRoLnBvdyh0aGlzLnN1bXNbaV0sIDIpIC8gdGhpcy5zdWJTYW1wbGVTaXplc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzc1RvdCA9IHN1bU9mU3F1YXJlcyAtIE1hdGgucG93KHN1bSwgMikgLyBOO1xuICAgICAgICBjb25zdCBzc0JuID0gYnVmIC0gTWF0aC5wb3coc3VtLCAyKSAvIE47XG4gICAgICAgIGNvbnN0IHNzV24gPSBzc1RvdCAtIHNzQm47XG4gICAgICAgIGNvbnN0IGRmQm4gPSBLIC0gMTtcbiAgICAgICAgY29uc3QgZGZXbiA9IE4gLSBLO1xuICAgICAgICBjb25zdCBkZlRvdCA9IE4gLSAxO1xuICAgICAgICBjb25zdCBtc0JuID0gc3NCbiAvIGRmQm47XG4gICAgICAgIGNvbnN0IG1zV24gPSBzc1duIC8gZGZXbjtcbiAgICAgICAgY29uc3QgZlN0YXQgPSBtc0JuIC8gbXNXbjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNzQm46IHNzQm4sXG4gICAgICAgICAgICBzc1duOiBzc1duLFxuICAgICAgICAgICAgc3NUb3Q6IHNzVG90LFxuICAgICAgICAgICAgZGZCbjogZGZCbixcbiAgICAgICAgICAgIGRmV246IGRmV24sXG4gICAgICAgICAgICBkZlRvdDogZGZUb3QsXG4gICAgICAgICAgICBtc0JuOiBtc0JuLFxuICAgICAgICAgICAgbXNXbjogbXNXbixcbiAgICAgICAgICAgIGZTdGF0OiBmU3RhdCxcbiAgICAgICAgICAgIHBWYWx1ZTogMSAtIGpTdGF0LmNlbnRyYWxGLmNkZihmU3RhdCwgZGZCbiwgZGZXbiksXG4gICAgICAgIH07XG4gICAgfSAvLyBnZXRPbmVXYXlBbm92YVxuICAgIC8qKiBDb21wdXRlIHN1bSAmIHN1bXMgb2Ygc3F1YXJlcyB3aXRoIHJlc3BlY3QgdG8gZmFjdG9yIGxldmVscy4gKi9cbiAgICBzZXRTdGF0cyhjYXRlZ29yaWVzLCB2YWx1ZXMsIF9jaGVja05vcm1hbGl0eSA9IGZhbHNlLCBfYWxwaGEgPSAwLjA1KSB7XG4gICAgICAgIC8vIFRPRE86IHByb3ZpZGUgY2hlY2sgbm9ybWFsaXR5IGZlYXR1cmVcbiAgICAgICAgY29uc3QgdHlwZSA9IHZhbHVlcy50eXBlO1xuICAgICAgICBjb25zdCBzaXplID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLklOVDpcbiAgICAgICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5jYXRlZ29yaWVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdENvdW50ID0gdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdENvdW50ID0gY2F0Q291bnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxzID0gdmFsdWVzLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRzID0gY2F0ZWdvcmllcy5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtcyA9IG5ldyBGbG9hdDY0QXJyYXkoY2F0Q291bnQpLmZpbGwoMCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vtc09mU3F1YXJlcyA9IG5ldyBGbG9hdDY0QXJyYXkoY2F0Q291bnQpLmZpbGwoMCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViU2FtcGxlU2l6ZXMgPSBuZXcgSW50MzJBcnJheShjYXRDb3VudCkuZmlsbCgwKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2F0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgc3Vtc1tjXSArPSB2YWxzW2ldO1xuICAgICAgICAgICAgICAgICAgICBzdW1zT2ZTcXVhcmVzW2NdICs9IE1hdGgucG93KHZhbHNbaV0sIDIpO1xuICAgICAgICAgICAgICAgICAgICArK3N1YlNhbXBsZVNpemVzW2NdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN1bXMgPSBzdW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vtc09mU3F1YXJlcyA9IHN1bXNPZlNxdWFyZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJTYW1wbGVTaXplcyA9IHN1YlNhbXBsZVNpemVzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICAgICAgfVxuICAgIH0gLy8gc2V0U3RhdHNcbn0gLy8gRmFjdG9yaXplZERhdGFcbi8qKiBQZXJmb3JtIG9uZS13YXkgYW5hbHlzaXMgb2YgdmFyaWFuY2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uZVdheUFub3ZhKGNhdGVnb3JlcywgdmFsdWVzLCBhbHBoYSA9IDAuMDUsIHZhbGlkYXRlID0gZmFsc2UpIHtcbiAgICBjaGVja1NpZ25pZmljYW5jZUxldmVsKGFscGhhKTtcbiAgICBjb25zdCBmYWN0b3JpemVkID0gbmV3IEZhY3Rvcml6ZWREYXRhKGNhdGVnb3JlcywgdmFsdWVzLCB2YWxpZGF0ZSwgYWxwaGEpO1xuICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgICBpZiAoIWZhY3Rvcml6ZWQuYXJlVmFyc0VxdWFsKGFscGhhKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuTk9OX0VRVUFMX1ZBUklBTkNFUyk7XG4gICAgICAgIGlmICghZmFjdG9yaXplZC5pc05vcm1hbCgpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5OT05fTk9STUFMX0RJU1RSSUIpO1xuICAgIH1cbiAgICBjb25zdCBhbm92YSA9IGZhY3Rvcml6ZWQuZ2V0T25lV2F5QW5vdmEoKTtcbiAgICBjb25zdCBmQ3JpdCA9IGpTdGF0LmNlbnRyYWxGLmludigxIC0gYWxwaGEsIGFub3ZhLmRmQm4sIGFub3ZhLmRmV24pO1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBgVEhFIE5VTEwgSFlQT1RIRVNJUzogdGhlIFwiJHtjYXRlZ29yZXMubmFtZX1cIiBcbiAgICBmYWN0b3IgZG9lcyBub3QgcHJvZHVjZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gdGhlIFwiJHt2YWx1ZXMubmFtZX1cIiBmZWF0dXJlLmA7XG4gICAgY29uc3QgdGVzdFJlc3VsdCA9IGBUZXN0IHJlc3VsdDogJHsoYW5vdmEuZlN0YXQgPiBmQ3JpdCkgPyAnUkVKRUNURUQuJyA6ICdGQUlMRUQgVE8gUkVKRUNULid9YDtcbiAgICByZXR1cm4gZ2V0T25lV2F5QW5vdmFERihhbm92YSwgYWxwaGEsIGZDcml0LCBoeXBvdGhlc2lzLCB0ZXN0UmVzdWx0KTtcbn0gLy8gb25lV2F5QW5vdmFcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyoqIENhbGN1bGF0ZXMgQ2x1c3RlcnMgYmFzZWQgb24gZGJzY2FuIGFsZ29yaXRobSBpbiB3YXNtLlxuICogQHBhcmFtIGVtYmVkWCAtIGVtYmVkZGluZ3MgeCBsb2NhdGlvbi5cbiAqIEBwYXJhbSBlbWJlZFkgLSBlbWJlZGRpbmdzIHkgbG9jYXRpb24uXG4gKiBAcGFyYW0gbWluUHRzIC0gbWluaW11bSBudW1iZXIgb2YgcG9pbnRzIGluIGEgY2x1c3Rlci5cbiAqIEBwYXJhbSBlcHNpbG9uIC0gZXBzaWxvbi5cbiAqIEByZXR1cm5zIGFycmF5IHdpdGggY2x1c3RlciBpbmRleGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGJzY2FuV29ya2VyKGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL2NsdXN0ZXJpbmctd29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBlbWJlZFgsIGVtYmVkWSwgbWluUHRzLCBlcHNpbG9uIH0pO1xuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9ICh7IGRhdGE6IHsgZXJyb3IsIGNsdXN0ZXJzIH0gfSkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICBlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKGNsdXN0ZXJzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGJzY2FuLXdvcmtlci1jcmVhdG9yLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xubGV0IGdwdUFkYXB0ZXIgPSBudWxsO1xubGV0IGdwdURldmljZSA9IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZ2V0R1BVRGV2aWNlKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghZ3B1QWRhcHRlcikge1xuICAgICAgICAgICAgLy9yZWFzb246IG9ubHkgaGVyZSB3ZSBnZXQgdGhlIGdwdUFkYXB0ZXJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZ3B1QWRhcHRlciA9IHlpZWxkIG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoeyBwb3dlclByZWZlcmVuY2U6ICdoaWdoLXBlcmZvcm1hbmNlJyB9KTtcbiAgICAgICAgICAgIGlmIChncHVBZGFwdGVyID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzTG9zdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZ3B1RGV2aWNlKSB7XG4gICAgICAgICAgICBncHVEZXZpY2UubG9zdC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc0xvc3QgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMCkpOyAvLyB3YWl0IHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGxvc3RcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdwdURldmljZSB8fCBpc0xvc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkQnVmZmVyU2l6ZSA9IDEwMDAwMDAwMDA7IC8vIH4xMDAwTUJcbiAgICAgICAgICAgIGNvbnN0IGFkYXB0ZXJMaW1pdHMgPSBncHVBZGFwdGVyLmxpbWl0cztcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZmZXJTaXplTGltaXQgPSBhZGFwdGVyTGltaXRzLm1heEJ1ZmZlclNpemU7XG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlQnVmZmVyU2l6ZUxpbWl0ID0gYWRhcHRlckxpbWl0cy5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGdwdURldmljZSA9IHlpZWxkIGdwdUFkYXB0ZXIucmVxdWVzdERldmljZSh7IHJlcXVpcmVkTGltaXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhCdWZmZXJTaXplOiBNYXRoLm1pbihidWZmZmVyU2l6ZUxpbWl0LCByZXF1aXJlZEJ1ZmZlclNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplOiBNYXRoLm1pbihzdG9yYWdlQnVmZmVyU2l6ZUxpbWl0LCByZXF1aXJlZEJ1ZmZlclNpemUpXG4gICAgICAgICAgICAgICAgICAgIH0gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdwdURldmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2Ugd2l0aCByZXF1aXJlZCBsaW1pdHMnLCBlKTtcbiAgICAgICAgICAgICAgICBncHVEZXZpY2UgPSB5aWVsZCBncHVBZGFwdGVyLnJlcXVlc3REZXZpY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3B1RGV2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncHVEZXZpY2U7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0R1BVQWRhcHRlckRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghZ3B1QWRhcHRlcikge1xuICAgICAgICAgICAgLy8gcmVhc29uOiBvbmx5IGhlcmUgd2UgZ2V0IHRoZSBncHVBZGFwdGVyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGdwdUFkYXB0ZXIgPSB5aWVsZCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7XG4gICAgICAgICAgICBpZiAoZ3B1QWRhcHRlciA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZm8gPSB5aWVsZCBncHVBZGFwdGVyLnJlcXVlc3RBZGFwdGVySW5mbygpO1xuICAgICAgICBpZiAoIWluZm8pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3Qgb3V0U3RyaW5nID0gcmVwbGFjZUVtcHR5U3RyaW5nKGluZm8uZGVzY3JpcHRpb24sIHJlcGxhY2VFbXB0eVN0cmluZyhpbmZvLnZlbmRvciwgJ05vIEdQVSBkZXNjcmlwdGlvbiBhdmFpbGFibGUnKSk7XG4gICAgICAgIHJldHVybiBvdXRTdHJpbmc7XG4gICAgfSk7XG59XG5mdW5jdGlvbiByZXBsYWNlRW1wdHlTdHJpbmcoc3RyLCByZXBsYWNlbWVudCkge1xuICAgIHJldHVybiAhc3RyIHx8IHN0ciA9PSAnJyA/IHJlcGxhY2VtZW50IDogc3RyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0R1BVRGV2aWNlLmpzLm1hcCIsImZ1bmN0aW9uIGV1Y2xpZGVhbkFnZ3JlZ2F0aW9uV2dzbChhcnJheVNpemUpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICB2YXIgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2FycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgIHN1bSA9IHN1bSArIGRpc3RhbmNlc1tpXSAqIGRpc3RhbmNlc1tpXSAqIGNvbXB1dGVJbmZvLndlaWdodHNbaV0gKiBjb21wdXRlSW5mby53ZWlnaHRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcXJ0KHN1bSk7XG4gICAgYDtcbn1cbjtcbmZ1bmN0aW9uIG1hbmhhdHRhbkFnZ3JlZ2F0aW9uV2dzbChhcnJheVNpemUpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICB2YXIgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2FycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgIHN1bSA9IHN1bSArIGFicyhkaXN0YW5jZXNbaV0pICogY29tcHV0ZUluZm8ud2VpZ2h0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgIGA7XG59XG5leHBvcnQgdmFyIFdFQkdTTEFHR1JFR0FUSU9OO1xuKGZ1bmN0aW9uIChXRUJHU0xBR0dSRUdBVElPTikge1xuICAgIFdFQkdTTEFHR1JFR0FUSU9OW1wiRVVDTElERUFOXCJdID0gXCJFVUNMSURFQU5cIjtcbiAgICBXRUJHU0xBR0dSRUdBVElPTltcIk1BTkhBVFRBTlwiXSA9IFwiTUFOSEFUVEFOXCI7XG59KShXRUJHU0xBR0dSRUdBVElPTiB8fCAoV0VCR1NMQUdHUkVHQVRJT04gPSB7fSkpO1xuZXhwb3J0IGNvbnN0IFdFQkdTTEFHR1JFR0FUSU9ORlVOQ1RJT05TID0ge1xuICAgIFtXRUJHU0xBR0dSRUdBVElPTi5FVUNMSURFQU5dOiBldWNsaWRlYW5BZ2dyZWdhdGlvbldnc2wsXG4gICAgW1dFQkdTTEFHR1JFR0FUSU9OLk1BTkhBVFRBTl06IG1hbmhhdHRhbkFnZ3JlZ2F0aW9uV2dzbFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYkdQVS1hZ2dyZWdhdGlvbi5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vLyBpbiBhbGwgdGhlIGZ1bmN0aW9ucyBiZWxvdywgdGhlIHZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1bWVkIHRvIGJlIGFycmF5cyBvZiB1aW50MzIvZjMyXG4vL3ZhbHVlcyB3aGljaCBhcmUgaW5mZXJlZCBmcm9tIHRoZSBjb2RlIHRoaXMgY2h1bmsgaXMgaW5qZWN0ZWQgaW50b1xuLy8gYWxzbywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcHV0ZUluZm8gc3RydWN0LCB3aGljaCBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkczpcbi8vIGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXM6IGFycmF5IG9mIGFycmF5cyBvZiB1MzIgY29udGFpbmluZyB0aGUgc2l6ZXMgb2YgdGhlIGVudHJpZXNcbi8vIG90aGVyIGZpZWxkcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHNob3VsZCBiZSBpbmplY3RlZCBmcm9tIHRoZSBtYWluIHNjcmlwdCB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24sXG4vLyBhbmQgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUgc3VwcGxlbWVudGFyeUluZm8gc3RydWN0XG4vLyBsaWtlIHRoZSBzaW1pbGFyaXR5IG1hdHJpeCBmb3IgbW9ub21lciBjaGVtaWNhbCBkaXN0YW5jZS5cbi8vIHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGNvcnJlY3QgYnVmZmVyIGFsbG9jYXRpb24gbWVjaGFuaXNtIGZvciB0aGUgc3VwcGxlbWVudGFyeUluZm8sXG4vLyBmb3IgZXZlcnkgZW50cnkgbGlzdFxuLy8gdGhlIG1heERpc3RhbmNlIHZhcmlhYmxlIGlzIGFsc28gYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlXG4vLyBzY29wZSBvZiB0aGUgZnVuY3Rpb24sIGluIGNhc2Ugb2Yga25uIGl0IGlzIHRoZSBkaXN0YW5jZSBpbiB0aGUgbGFzdCBwb3N0aW9uIG9mIGtubiBvbiB0aGlzIGluZGV4LFxuLy8gaW4gY2FzZSBvZiBzcGFyc2UgbWF0cml4LCBpdCBjYW4gYmUganVzdCB0aGUgdGhyZXNob2xkIGZvciB0aGUgZGlzdGFuY2UuXG4vLyBoYW1taW5nIGRpc3RhbmNlIGZvciBzZXF1bmVuY2VzIG9mIHVpbnQzMiBhcnJheXMgb2YgbWF4IGxlbmd0aCAke21heEFycmF5U2l6ZX1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVIYW1taW5nKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBtaW5MZW5ndGg6IHUzMiA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IHNpemVEaWZmOiB1MzIgPSBtYXhMZW5ndGggLSBtaW5MZW5ndGg7XG4gIFxuICBsZXQgbWF4SW50RGlzdGFuY2UgPSBjZWlsKG1heERpc3RhbmNlICogZjMyKG1heExlbmd0aCkpIC0gZjMyKHNpemVEaWZmKTtcblxuICB2YXIgZGlmZjogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke19tYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICBkaWZmID0gZGlmZiArIGYzMihhW2ldICE9IGJbaV0pO1xuICAgICAgaWYgKGRpZmYgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfVxuICB9XG4gIGRpZmYgKz0gZjMyKHNpemVEaWZmKTtcbiAgcmV0dXJuIGRpZmYgLyAke19tYXhBcnJheVNpemV9O1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU1vbm9tZXJDaGVtaWNhbERpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyBpdCBpcyBhc3N1bWV0IHRoYXQgc3VwcEluZm8gc3RydWN0IGNvbnRhaW5zIGNvcnJlY3QgbWF0cml4IGNhbGxlZCBzaW1pbGFyaXR5TWF0cml4JHtlbnRyeUluZGV4fSwgKHNpbWlsYXJpdHlNYXRyaXgwLCBzaW1pbGFyaXR5TWF0cml4MSwgZXRjKVxuICAgIC8vIHRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGdldFByb2Nlc3NJbmZvIGZ1bmN0aW9uLlxuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgc2l6ZURpZmY6IHUzMiA9IG1heExlbmd0aCAtIG1pbkxlbmd0aDtcbiAgXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSkgLSBmMzIoc2l6ZURpZmYpO1xuXG4gIGxldCBzaW1NYXRyaXggPSAmKHN1cHBJbmZvLnNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9KTsgLy8gdXNpbmcgcG9pbnRlcnMgbWFrZSB0aGluZ3MgZmFzdGVyXG4gIHZhciBkaWZmOiBmMzIgPSAwLjA7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7X21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgIGRpZmYgPSBkaWZmICsgMS4wIC0gKCpzaW1NYXRyaXgpW3UzMihhW2ldKV1bdTMyKGJbaV0pXTtcbiAgICAgIGlmIChkaWZmID4gbWF4SW50RGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH1cbiAgfVxuICBkaWZmICs9IGYzMihzaXplRGlmZik7XG4gIHJldHVybiBkaWZmIC8gJHtfbWF4QXJyYXlTaXplfTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVMZXZlbnN0ZWluKG1heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSk7XG5cbiAgLy8gd2Ugd2lsbCBzdG9yZSB0d28gYXJyYXlzIGFzIG1hdHJpeCBhbmQgc3dhcCB0aGUgd29ya2luZyBpbmRpY2VzIHBlciBwYXNzLlxuICAvLyB0aGlzIHdheSB3ZSBjYW4gcmVkdWNlIG1lbW9yeSB1c2FnZSBwZXIgY29tcHV0YXRpb24gdG8ganVzdCBPKGFMZW5ndGgpXG4gIC8vIHRoZSBncmlkIHdpbGwgaGF2ZSBhTGVuZ3RoICsgMSBjb2x1bW5zIGFuZCBiTGVuZ3RoICsgMSByb3dzXG4gIC8vIHRoaXMgd2lsbCBiZSBndWFyYW50ZWVkIGJ5IGl0ZXJhdGlvbiwgYnV0IHRoZSBhcnJheSBzaXplcyBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgc28gd2Ugd2lsbCB1c2UgYSBmaXhlZCBzaXplIG9mIG1heEFycmF5U2l6ZVxuICB2YXIgZHluYW1pY1Bhc3NNYXQ6IGFycmF5PGFycmF5PGYzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+LCAyPjsgLy8gaW5pdGlhbGl6ZSB0byAwXG4gIFxuICB2YXIgcHJldkluZGV4OiB1MzIgPSAwO1xuICB2YXIgY3VySW5kZXg6IHUzMiA9IDE7IC8vIHdlIHdpbGwgc3dhcCB0aGVzZSBpbmRpY2VzIHBlciBwYXNzXG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgZmlyc3Qgcm93XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8PSBhTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICBkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdW2ldID0gZjMyKGkpO1xuICB9XG5cbiAgLy8gaXRlcmF0ZSBvdmVyIHRoZSByb3dzXG4gIGZvciAodmFyIGkgPSAxdTsgaSA8PSBiTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICBkeW5hbWljUGFzc01hdFtjdXJJbmRleF1bMF0gPSBmMzIoaSk7XG4gICAgICB2YXIgbWluRW50cnk6IGYzMiA9IGYzMihtYXhMZW5ndGgpO1xuICAgICAgbGV0IHByZXZSb3cgPSAmZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XTtcbiAgICAgIGxldCBjdXJSb3cgPSAmZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdO1xuICAgICAgbGV0IGJNb24gPSB1MzIoYltpIC0gMV0pO1xuICAgICAgZm9yICh2YXIgaiA9IDF1OyBqIDw9IGFMZW5ndGg7IGogPSBqICsgMXUpIHtcbiAgICAgICAgICB2YXIgY29zdDogZjMyID0gZjMyKGFbaiAtIDFdICE9IGJNb24pO1xuICAgICAgICAgIHZhciByZXM6IGYzMiA9IG1pbihcbiAgICAgICAgICAgICAgbWluKFxuICAgICAgICAgICAgICAgICgqcHJldlJvdylbal0gKyAxLjAsIC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgKCpjdXJSb3cpW2ogLSAxXSArIDEuMCwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICgqcHJldlJvdylbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKCpjdXJSb3cpW2pdID0gcmVzO1xuICAgICAgICAgIGlmIChyZXMgPCBtaW5FbnRyeSkge1xuICAgICAgICAgICAgICBtaW5FbnRyeSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzd2FwIHRoZSBpbmRpY2VzXG4gICAgICBsZXQgdGVtcDogdTMyID0gcHJldkluZGV4O1xuICAgICAgcHJldkluZGV4ID0gY3VySW5kZXg7XG4gICAgICBjdXJJbmRleCA9IHRlbXA7XG4gICAgICBpZiAobWluRW50cnkgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XVthTGVuZ3RoXSAvIGYzMihtYXhMZW5ndGgpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU5lZWRsZW1hbld1bnNjaChtYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyB2ZXJzaW9uIG9mIHRoZSBsZXZlbnNodGFpbiB3aGVyZSB0aGUgY29zdCBvZiBzdWJzdGl0dXRpb24gaXMgY3VzdG9taXphYmxlXG4gICAgLy8gaXQgaXMgYXNzdW1ldCB0aGF0IHN1cHBJbmZvIHN0cnVjdCBjb250YWlucyBjb3JyZWN0IG1hdHJpeCBjYWxsZWQgc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH0sIChzaW1pbGFyaXR5TWF0cml4MCwgc2ltaWxhcml0eU1hdHJpeDEsIGV0YylcbiAgICAvLyBhbmQgZ2FwT3BlblBlbmFsdHksIGdhcEV4dGVuc2lvblBlbmFsdHlcbiAgICAvLyB0aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbi5cbiAgICByZXR1cm4gYFxuICAgICAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgICAgIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gICAgICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gICAgICBsZXQgbWluTGVuZ3RoOiB1MzIgPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7XG4gIFxuICAgICAgbGV0IG1heEludERpc3RhbmNlID0gY2VpbChtYXhEaXN0YW5jZSAqIGYzMihtYXhMZW5ndGgpKTtcbiAgICAgIC8vIHdlIHdpbGwgc3RvcmUgdHdvIGFycmF5cyBhcyBtYXRyaXggYW5kIHN3YXAgdGhlIHdvcmtpbmcgaW5kaWNlcyBwZXIgcGFzcy5cbiAgICAgIC8vIHRoaXMgd2F5IHdlIGNhbiByZWR1Y2UgbWVtb3J5IHVzYWdlIHBlciBjb21wdXRhdGlvbiB0byBqdXN0IE8oYUxlbmd0aClcbiAgICAgIC8vIHRoZSBncmlkIHdpbGwgaGF2ZSBhTGVuZ3RoICsgMSBjb2x1bW5zIGFuZCBiTGVuZ3RoICsgMSByb3dzXG4gICAgICAvLyB0aGlzIHdpbGwgYmUgZ3VhcmFudGVlZCBieSBpdGVyYXRpb24sIGJ1dCB0aGUgYXJyYXkgc2l6ZXMgbXVzdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIHNvIHdlIHdpbGwgdXNlIGEgZml4ZWQgc2l6ZSBvZiBtYXhBcnJheVNpemVcbiAgICAgIHZhciBkeW5hbWljUGFzc01hdDogYXJyYXk8YXJyYXk8ZjMyLCAke21heEFycmF5U2l6ZSArIDF9dT4sIDI+OyAvLyBpbml0aWFsaXplIHRvIDBcbiAgICAgIFxuICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIG9wZXJhdGlvbiBsZWQgdG8gdGhlIGN1cnJlbnQgY2VsbFxuICAgICAgLy8gaS5lLiB3aGV0aGVyIHdlIGNhbWUgZnJvbSB0aGUgbGVmdCwgdG9wIG9yIGRpYWdvbmFsIHRvIGFzc2lnbiBnYXAgb3Blbi9nYXAgZXh0ZW5kIHBlbmFsdHlcbiAgICAgIHZhciB2ZXJ0aWNhbEdhcHM6IGFycmF5PHUzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+O1xuICAgICAgdmFyIGhvcml6b250YWxHYXBzOiBhcnJheTx1MzIsICR7bWF4QXJyYXlTaXplICsgMX11PjtcblxuICAgICAgbGV0IGdhcE9wZW5QZW5hbHR5OiBmMzIgPSBzdXBwSW5mby5nYXBPcGVuUGVuYWx0eSR7ZW50cnlJbmRleH07XG4gICAgICBsZXQgZ2FwRXh0ZW5zaW9uUGVuYWx0eTogZjMyID0gc3VwcEluZm8uZ2FwRXh0ZW5zaW9uUGVuYWx0eSR7ZW50cnlJbmRleH07XG4gICAgICB2YXIgcHJldkluZGV4OiB1MzIgPSAwO1xuICAgICAgdmFyIGN1ckluZGV4OiB1MzIgPSAxOyAvLyB3ZSB3aWxsIHN3YXAgdGhlc2UgaW5kaWNlcyBwZXIgcGFzc1xuICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZmlyc3Qgcm93XG4gICAgICBmb3IgKHZhciBpID0gMHU7IGkgPD0gYUxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgICAgICAgIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1baV0gPSBnYXBPcGVuUGVuYWx0eSArIGYzMihpIC0gMSkgKiBnYXBFeHRlbnNpb25QZW5hbHR5O1xuICAgICAgICAgIGR5bmFtaWNQYXNzTWF0W2N1ckluZGV4XVtpXSA9IDAuMDtcbiAgICAgIH1cbiAgICAgIGR5bmFtaWNQYXNzTWF0WzBdWzBdID0gMC4wO1xuXG4gICAgICBsZXQgc2ltTWF0cml4ID0gJnN1cHBJbmZvLnNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9OyAvLyB1c2luZyBwb2ludGVycyBtYWtlIHRoaW5ncyBmYXN0ZXJcbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgcm93c1xuICAgICAgZm9yICh2YXIgaSA9IDF1OyBpIDw9IGJMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICBsZXQgcHJldlJvdyA9ICZkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdO1xuICAgICAgICAgIGxldCBjdXJSb3cgPSAmZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdO1xuICAgICAgICAgICgqY3VyUm93KVswXSA9IGdhcE9wZW5QZW5hbHR5ICsgZjMyKGkgLSAxKSAqIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgdmFyIG1pbkVudHJ5OiBmMzIgPSBmMzIobWF4TGVuZ3RoKTtcbiAgICAgICAgICBsZXQgbW9uQiA9IHUzMihiW2kgLSAxXSk7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDF1OyBqIDw9IGFMZW5ndGg7IGogPSBqICsgMXUpIHtcbiAgICAgICAgICAgICAgbGV0IG1vbkEgPSB1MzIoYVtqIC0gMV0pO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgbGV0IGNvc3Q6IGYzMiA9ICgqcHJldlJvdylbaiAtIDFdICsgMWYgLSAoKnNpbU1hdHJpeClbbW9uQV1bbW9uQl07XG4gICAgICAgICAgICAgIHZhciB0b3AgPSAoKnByZXZSb3cpW2pdOyAvLyBkZWxldGlvblxuICAgICAgICAgICAgICBpZiAodmVydGljYWxHYXBzW2pdID4gMCkge1xuICAgICAgICAgICAgICAgICAgdG9wID0gdG9wICsgZ2FwRXh0ZW5zaW9uUGVuYWx0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRvcCA9IHRvcCArIGdhcE9wZW5QZW5hbHR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBsZWZ0ID0gKCpjdXJSb3cpW2ogLSAxXTsgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIGlmIChob3Jpem9udGFsR2Fwc1tqIC0gMV0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCArIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCArIGdhcE9wZW5QZW5hbHR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciByZXM6IGYzMiA9IG1pbihcbiAgICAgICAgICAgICAgICAgIG1pbihcbiAgICAgICAgICAgICAgICAgICAgICB0b3AsIC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgbGVmdCwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAoKmN1clJvdylbal0gPSByZXM7XG4gICAgICAgICAgICAgIGlmIChyZXMgPCBtaW5FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgbWluRW50cnkgPSByZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBnYXBzXG4gICAgICAgICAgICAgIGlmIChyZXMgPT0gY29zdCkge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gbGVmdCkge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZlcnRpY2FsR2Fwc1tqXSA9IDE7XG4gICAgICAgICAgICAgICAgICBob3Jpem9udGFsR2Fwc1tqXSA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3dhcCB0aGUgaW5kaWNlc1xuICAgICAgICAgIGxldCB0ZW1wOiB1MzIgPSBwcmV2SW5kZXg7XG4gICAgICAgICAgcHJldkluZGV4ID0gY3VySW5kZXg7XG4gICAgICAgICAgY3VySW5kZXggPSB0ZW1wO1xuICAgICAgICAgIGlmIChtaW5FbnRyeSA+IG1heEludERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1bYUxlbmd0aF0gLyBmMzIobWF4TGVuZ3RoKTtcbiAgXG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVRXVjbGlkZWFuKG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgZGlzdDogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICBkaXN0ID0gZGlzdCArIGYzMihhW2ldIC0gYltpXSkgKiBmMzIoYVtpXSAtIGJbaV0pO1xuICB9XG4gIHJldHVybiBzcXJ0KGRpc3QpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU1hbmhhdHRhbihtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIGRpc3Q6IGYzMiA9IDAuMDtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgZGlzdCA9IGRpc3QgKyBhYnMoZjMyKGFbaV0gLSBiW2ldKSk7XG4gIH1cbiAgcmV0dXJuIGRpc3Q7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVT25lSG90RGlzdGFuY2UoX21heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8IGFMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICBpZihhW2ldICE9IGJbaV0pIHtcbiAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwLjA7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTnVtZXJpY0Rpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyB3ZSBhc3N1bWUgdGhhdCByYW5nZSR7ZW50cnlJbmRleH0gaXMgYXZhaWxhYmxlIGluIHRoZSBzdXBwbGVtZW50YXJ5SW5mbyBzdHJ1Y3RcbiAgICByZXR1cm4gYFxuICAgIGxldCByYW5nZSA9IHN1cHBJbmZvLnJhbmdlJHtlbnRyeUluZGV4fTtcbiAgICByZXR1cm4gZjMyKGFicyhmMzIoYVswXSkgLSBmMzIoYlswXSkpIC8gcmFuZ2UpO1xuICBgO1xufVxuLy8gdGFuaW1vdG8gZGlzdGFuY2UgZm9yIHVpbnQzMiBhcnJheXMgb2YgbGVuZ3RoICR7bWF4QXJyYXlTaXplfVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVRhbmltb3RvQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG5cbiAgaWYgKG9uQml0c2EgPT0gMHUgJiYgb25CaXRzYiA9PSAwdSkge1xuICAgICAgcmV0dXJuIDAuMDtcbiAgfVxuXG4gIGxldCB0b3RhbE9uQml0cyA9IG9uQml0c2EgKyBvbkJpdHNiO1xuICB2YXIgY29tbW9uQml0czogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIGNvbW1vbkJpdHMgPSBjb21tb25CaXRzICsgY291bnRPbmVCaXRzKGFbaV0gJiBiW2ldKTtcbiAgfVxuXG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIodG90YWxPbkJpdHMgLSBjb21tb25CaXRzKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVBc3ltbWV0cmljQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCBtaW4gPSBtaW4ob25CaXRzYSwgb25CaXRzYik7XG4gIGlmIChtaW4gPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIobWluKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVDb3NpbmVCaXRBcnJheShtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIG9uQml0c2E6IHUzMiA9IDB1O1xuICB2YXIgb25CaXRzYjogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIG9uQml0c2EgPSBvbkJpdHNhICsgY291bnRPbmVCaXRzKGFbaV0pO1xuICAgICAgb25CaXRzYiA9IG9uQml0c2IgKyBjb3VudE9uZUJpdHMoYltpXSk7XG4gIH1cbiAgbGV0IHRvdGFsID0gb25CaXRzYSAqIG9uQml0c2I7IC8vIHAucy4gaGVyZSB0b3RhbCBpcyB0YWtlbiBieSBtdWx0aXBseWluZ1xuICBpZiAodG90YWwgPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBzcXJ0KGYzMih0b3RhbCkpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVNva2FsQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCB0b3RhbCA9IG9uQml0c2EgKyBvbkJpdHNiO1xuICBpZiAodG90YWwgPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIodG90YWwgKiAyIC0gY29tbW9uQml0cyAqIDMpO1xuICBgO1xufVxuZXhwb3J0IHZhciBXRUJHUFVESVNUQU5DRTtcbihmdW5jdGlvbiAoV0VCR1BVRElTVEFOQ0UpIHtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkhBTU1JTkdcIl0gPSBcIkhhbW1pbmdcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkVVQ0xJREVBTlwiXSA9IFwiRXVjbGlkZWFuXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJNQU5IQVRUQU5cIl0gPSBcIk1hbmhhdHRhblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiVEFOSU1PVE9cIl0gPSBcIlRhbmltb3RvXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJMRVZFTlNURUlOXCJdID0gXCJMZXZlbnNodGVpblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiTkVFRExFTUFOX1dVTlNDSFwiXSA9IFwiTmVlZGxlbWFubi1XdW5zY2hcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VcIl0gPSBcIk1vbm9tZXIgY2hlbWljYWwgZGlzdGFuY2VcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIlNPS0FMXCJdID0gXCJTb2thbFwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiQ09TSU5FXCJdID0gXCJDb3NpbmVcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkFTWU1NRVRSSUNcIl0gPSBcIkFzeW1tZXRyaWNcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkRpZmZlcmVuY2VcIl0gPSBcIkRpZmZlcmVuY2VcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk9uZUhvdFwiXSA9IFwiT25lLUhvdFwiO1xufSkoV0VCR1BVRElTVEFOQ0UgfHwgKFdFQkdQVURJU1RBTkNFID0ge30pKTtcbmV4cG9ydCBjb25zdCB3ZWJHUFVGdW5jdGlvbnMgPSB7XG4gICAgW1dFQkdQVURJU1RBTkNFLkhBTU1JTkddOiB3ZWJHUFVIYW1taW5nLFxuICAgIFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU5dOiB3ZWJHUFVFdWNsaWRlYW4sXG4gICAgW1dFQkdQVURJU1RBTkNFLk1BTkhBVFRBTl06IHdlYkdQVU1hbmhhdHRhbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE9dOiB3ZWJHUFVUYW5pbW90b0JpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOXTogd2ViR1BVTGV2ZW5zdGVpbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSF06IHdlYkdQVU5lZWRsZW1hbld1bnNjaCxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV06IHdlYkdQVU1vbm9tZXJDaGVtaWNhbERpc3RhbmNlLFxuICAgIFtXRUJHUFVESVNUQU5DRS5TT0tBTF06IHdlYkdQVVNva2FsQml0QXJyYXksXG4gICAgW1dFQkdQVURJU1RBTkNFLkNPU0lORV06IHdlYkdQVUNvc2luZUJpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXTogd2ViR1BVQXN5bW1ldHJpY0JpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXTogd2ViR1BVTnVtZXJpY0Rpc3RhbmNlLFxuICAgIFtXRUJHUFVESVNUQU5DRS5PbmVIb3RdOiB3ZWJHUFVPbmVIb3REaXN0YW5jZVxufTtcbmV4cG9ydCBjb25zdCBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eSA9IHtcbiAgICBbV0VCR1BVRElTVEFOQ0UuSEFNTUlOR106IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk1BTkhBVFRBTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLlRBTklNT1RPXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuU09LQUxdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5DT1NJTkVdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgKiBtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0hdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplICogbWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDI1KSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV06IChfbWF4RW50cnlTaXplKSA9PiAxLFxuICAgIFtXRUJHUFVESVNUQU5DRS5PbmVIb3RdOiAoX21heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKF9tYXhFbnRyeVNpemUgLyA0MCksXG59O1xuZXhwb3J0IGNvbnN0IFR5cGVTdXBwb3J0ZWREaXN0YW5jZXMgPSB7XG4gICAgW1wiU1RSSU5HXCIgLyogV0dQVUVOVFJZVFlQRS5TVFJJTkcgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOLCBXRUJHUFVESVNUQU5DRS5ORUVETEVNQU5fV1VOU0NILCBXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFLCBXRUJHUFVESVNUQU5DRS5PbmVIb3RdKSxcbiAgICBbXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRSwgV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTiwgV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSCwgV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE8sIFdFQkdQVURJU1RBTkNFLkNPU0lORSwgV0VCR1BVRElTVEFOQ0UuU09LQUwsIFdFQkdQVURJU1RBTkNFLkFTWU1NRVRSSUMsIFdFQkdQVURJU1RBTkNFLk9uZUhvdCwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIklOVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLklOVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuT25lSG90LCBXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXSksXG4gICAgW1wiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIk5VTUJFUlwiIC8qIFdHUFVFTlRSWVRZUEUuTlVNQkVSICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOLCBXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU4sIFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdKSxcbiAgICBbXCJCSVRBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuQklUQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5UQU5JTU9UTywgV0VCR1BVRElTVEFOQ0UuQ09TSU5FLCBXRUJHUFVESVNUQU5DRS5TT0tBTCwgV0VCR1BVRElTVEFOQ0UuQVNZTU1FVFJJQ10pXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViR1BVLW11bHRpY29sLWRpc3RhbmNlcy5qcy5tYXAiLCJleHBvcnQgdmFyIE1hdHJpeE1hdHJpeE9wVHlwZTtcbihmdW5jdGlvbiAoTWF0cml4TWF0cml4T3BUeXBlKSB7XG4gICAgTWF0cml4TWF0cml4T3BUeXBlW1wiQUREXCJdID0gXCJBRERcIjtcbiAgICBNYXRyaXhNYXRyaXhPcFR5cGVbXCJTVUJcIl0gPSBcIlNVQlwiO1xuICAgIE1hdHJpeE1hdHJpeE9wVHlwZVtcIk1VTFRcIl0gPSBcIk1VTFRcIjtcbn0pKE1hdHJpeE1hdHJpeE9wVHlwZSB8fCAoTWF0cml4TWF0cml4T3BUeXBlID0ge30pKTtcbmV4cG9ydCB2YXIgTWF0cml4T3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhPcFR5cGUpIHtcbiAgICBNYXRyaXhPcFR5cGVbXCJTUVVBUkVcIl0gPSBcIlNRVUFSRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIklOVkVSU0VcIl0gPSBcIklOVkVSU0VcIjtcbiAgICBNYXRyaXhPcFR5cGVbXCJUUkFOU1BPU0VcIl0gPSBcIlRSQU5TUE9TRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIk5PUk1cIl0gPSBcIk5PUk1cIjtcbiAgICBNYXRyaXhPcFR5cGVbXCJDT0xVTU5fTk9STVwiXSA9IFwiQ09MVU1OX05PUk1cIjtcbn0pKE1hdHJpeE9wVHlwZSB8fCAoTWF0cml4T3BUeXBlID0ge30pKTtcbmV4cG9ydCB2YXIgTWF0cml4U2NhbGFyT3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhTY2FsYXJPcFR5cGUpIHtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJNVUxUXCJdID0gXCJTQ0FMQVJNVUxUXCI7XG4gICAgTWF0cml4U2NhbGFyT3BUeXBlW1wiU0NBTEFSQUREXCJdID0gXCJTQ0FMQVJBRERcIjtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJQT1dcIl0gPSBcIlNDQUxBUlBPV1wiO1xufSkoTWF0cml4U2NhbGFyT3BUeXBlIHx8IChNYXRyaXhTY2FsYXJPcFR5cGUgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiZXhwb3J0IHZhciBEaW1SZWR1Y3Rpb25NZXRob2RzO1xuKGZ1bmN0aW9uIChEaW1SZWR1Y3Rpb25NZXRob2RzKSB7XG4gICAgRGltUmVkdWN0aW9uTWV0aG9kc1tcIlVNQVBcIl0gPSBcIlVNQVBcIjtcbiAgICBEaW1SZWR1Y3Rpb25NZXRob2RzW1wiVF9TTkVcIl0gPSBcInQtU05FXCI7XG59KShEaW1SZWR1Y3Rpb25NZXRob2RzIHx8IChEaW1SZWR1Y3Rpb25NZXRob2RzID0ge30pKTtcbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaWE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hOUVVGTkxFTkJRVTRzU1VGQldTeHRRa0ZIV0R0QlFVaEVMRmRCUVZrc2JVSkJRVzFDTzBsQlF6TkNMRzlEUVVGaExFTkJRVUU3U1VGRFlpeHpRMEZCWlN4RFFVRkJPMEZCUTI1Q0xFTkJRVU1zUlVGSVZ5eHRRa0ZCYlVJc1MwRkJia0lzYlVKQlFXMUNMRkZCUnpsQ08wRkJRVUVzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmxiblZ0SUVScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhON1hHNGdJQ0FnVlUxQlVDQTlJQ2RWVFVGUUp5eGNiaUFnSUNCVVgxTk9SU0E5SUNkMExWTk9SU2RjYm4wN1hHNGlYWDA9IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGJpb0xheW91dCB9IGZyb20gJy4vYmlvLWxheW91dCc7XG5pbXBvcnQgeyBtYXJrb3ZDbHVzdGVyV2ViR1BVIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvTUNML01DTC13ZWJHUFUnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRNQ0xPcHRpb25zID0ge1xuICAgIGV4cGFuZEZhY3RvcjogMixcbiAgICBtYXhJdGVyYXRpb25zOiA1LFxuICAgIGluZmxhdGVGYWN0b3I6IDIsXG4gICAgbXVsdEZhY3RvcjogMSxcbn07XG5leHBvcnQgY2xhc3MgTUNMU3BhcnNlUmVkdWNlciB7XG4gICAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB7IC4uLmRlZmF1bHRNQ0xPcHRpb25zLCAuLi5vcHRzIH07XG4gICAgfVxuICAgIGFzeW5jIHRyYW5zZm9ybShzcGFyc2VNYXRyaXgsIG5Sb3dzKSB7XG4gICAgICAgIC8vIHRlc3RXb3JrZXJNdWx0aXBseSgpO1xuICAgICAgICAvLyByZXR1cm4gbmV3IEludDMyQXJyYXkoblJvd3MpO1xuICAgICAgICBsZXQgc3BhcnNlT2JqZWN0ID0gdGhpcy50b09iamVjdEZvcm0oc3BhcnNlTWF0cml4KTtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubWF4SXRlcmF0aW9ucyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTG9vcHMoc3BhcnNlT2JqZWN0LCBuUm93cyk7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZShzcGFyc2VPYmplY3QpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9vcHRpb25zLm1heEl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIHNwYXJzZU9iamVjdCA9IHRoaXMuZXhwYW5kKHNwYXJzZU9iamVjdCwgblJvd3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5mbGF0ZShzcGFyc2VPYmplY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplKHNwYXJzZU9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBjbHVzdGVycywgaXMsIGpzIH0gPSB0aGlzLmFzc2lnbkNsdXN0ZXJzKHNwYXJzZU9iamVjdCwgblJvd3MpO1xuICAgICAgICB0aGlzLmNvcnJlY3RDbHVzdGVycyhjbHVzdGVycyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSBhd2FpdCB0aGlzLmxheW91dChjbHVzdGVycywgc3BhcnNlT2JqZWN0LCBuUm93cyk7XG4gICAgICAgIHJldHVybiB7IGNsdXN0ZXJzLCBlbWJlZFg6IGVtYmVkZGluZ3MuZW1iZWRYLCBlbWJlZFk6IGVtYmVkZGluZ3MuZW1iZWRZLCBpcywganMgfTtcbiAgICB9XG4gICAgYXN5bmMgdHJhbnNmb3JtV2ViR1BVKHNwYXJzZU1hdHJpeCwgblJvd3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubWF4SXRlcmF0aW9ucyA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybShzcGFyc2VNYXRyaXgsIG5Sb3dzKTtcbiAgICAgICAgY29uc3QgbWNsUmVzID0gYXdhaXQgbWFya292Q2x1c3RlcldlYkdQVShzcGFyc2VNYXRyaXgsIG5Sb3dzLCB0aGlzLl9vcHRpb25zLm1heEl0ZXJhdGlvbnMsIHRoaXMuX29wdGlvbnMuaW5mbGF0ZUZhY3Rvcik7XG4gICAgICAgIGNvbnN0IHNwYXJzZU9iamVjdCA9IHRoaXMuY3NyVG9TcGFyc2VPYmplY3QobWNsUmVzLCBuUm93cyk7XG4gICAgICAgIGNvbnN0IHsgY2x1c3RlcnMsIGlzLCBqcyB9ID0gdGhpcy5hc3NpZ25DbHVzdGVycyhzcGFyc2VPYmplY3QsIG5Sb3dzKTtcbiAgICAgICAgdGhpcy5jb3JyZWN0Q2x1c3RlcnMoY2x1c3RlcnMpO1xuICAgICAgICBjb25zdCBlbWJlZGRpbmdzID0gYXdhaXQgdGhpcy5sYXlvdXQoY2x1c3RlcnMsIHNwYXJzZU9iamVjdCwgblJvd3MpO1xuICAgICAgICByZXR1cm4geyBjbHVzdGVycywgZW1iZWRYOiBlbWJlZGRpbmdzLmVtYmVkWCwgZW1iZWRZOiBlbWJlZGRpbmdzLmVtYmVkWSwgaXMsIGpzIH07XG4gICAgfVxuICAgIGNvcnJlY3RDbHVzdGVycyhjbHVzdGVycykge1xuICAgICAgICBjb25zdCBjbHVzdGVyU2l6ZU1hcCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgICAgICAgIGlmICghY2x1c3RlclNpemVNYXBbY2x1c3Rlcl0pXG4gICAgICAgICAgICAgICAgY2x1c3RlclNpemVNYXBbY2x1c3Rlcl0gPSAwO1xuICAgICAgICAgICAgY2x1c3RlclNpemVNYXBbY2x1c3Rlcl0rKztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3J0ZWRJbmRleGVzID0gT2JqZWN0LmtleXMoY2x1c3RlclNpemVNYXApLm1hcChOdW1iZXIpLnNvcnQoKGEsIGIpID0+IGNsdXN0ZXJTaXplTWFwW2FdIC0gY2x1c3RlclNpemVNYXBbYl0pO1xuICAgICAgICBjb25zdCBjbHVzdGVyTWFwID0ge307XG4gICAgICAgIHNvcnRlZEluZGV4ZXMuZm9yRWFjaCgoY2x1c3RlcklkeCwgaSkgPT4gY2x1c3Rlck1hcFtjbHVzdGVySWR4XSA9IGkgKyAxKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGNsdXN0ZXJzW2ldID0gY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV07XG4gICAgICAgIC8vIGxldCBjdXJDbHVzdGVyID0gMTtcbiAgICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyAgIGlmICghY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV0pIHtcbiAgICAgICAgLy8gICAgIGNsdXN0ZXJNYXBbY2x1c3RlcnNbaV1dID0gY3VyQ2x1c3RlcjtcbiAgICAgICAgLy8gICAgIGNsdXN0ZXJzW2ldID0gY3VyQ2x1c3RlcjtcbiAgICAgICAgLy8gICAgIGN1ckNsdXN0ZXIrKztcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgY2x1c3RlcnNbaV0gPSBjbHVzdGVyTWFwW2NsdXN0ZXJzW2ldXTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICB9XG4gICAgY3NyVG9TcGFyc2VPYmplY3QobWNsUmVzLCBuUm93cykge1xuICAgICAgICBjb25zdCBvcmRlciA9IE1hdGguZmxvb3IoTWF0aC5tYXgoTWF0aC5sb2cxMChuUm93cyksIDIpKSArIDE7XG4gICAgICAgIGNvbnN0IG1pbk9yZGVyID0gMSAvIE1hdGgucG93KDEwLCBvcmRlcik7XG4gICAgICAgIGNvbnN0IHNwYXJzZU9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcbiAgICAgICAgICAgIHNwYXJzZU9iamVjdFtpXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IG1jbFJlcy5pbmRleE9mZnNldHNbaV07IGsgPCBtY2xSZXMuaW5kZXhPZmZzZXRzW2kgKyAxXTsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaiA9IG1jbFJlcy5LTk5JbmRleGVzW2tdO1xuICAgICAgICAgICAgICAgIGlmIChqIDw9IGkgfHwgbWNsUmVzLktOTlNpbWlsYXJpdGllc1trXSA8IG1pbk9yZGVyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBzcGFyc2VPYmplY3RbaV1bal0gPSBtY2xSZXMuS05OU2ltaWxhcml0aWVzW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFyc2VPYmplY3Q7XG4gICAgfVxuICAgIGFzeW5jIGxheW91dChjbHVzdGVycywgc3BhcnNlTWF0cml4LCBuUm93cykge1xuICAgICAgICBjb25zdCBlbWJlZFggPSBuZXcgRmxvYXQzMkFycmF5KG5Sb3dzKS5maWxsKDApO1xuICAgICAgICBjb25zdCBlbWJlZFkgPSBuZXcgRmxvYXQzMkFycmF5KG5Sb3dzKS5maWxsKDApO1xuICAgICAgICBjb25zdCBjbHVzdGVyTWFwID0ge307XG4gICAgICAgIGNsdXN0ZXJzLmZvckVhY2goKGNsdXN0ZXIsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICghY2x1c3Rlck1hcFtjbHVzdGVyXSlcbiAgICAgICAgICAgICAgICBjbHVzdGVyTWFwW2NsdXN0ZXJdID0gW107XG4gICAgICAgICAgICBjbHVzdGVyTWFwW2NsdXN0ZXJdLnB1c2goaSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBjb25zdCBuQ2x1c3RlcnMgPSBPYmplY3Qua2V5cyhjbHVzdGVyTWFwKS5sZW5ndGg7XG4gICAgICAgIC8vIGNvbnN0IHBlclJvdyA9IE1hdGguZmxvb3IoTWF0aC5zcXJ0KG5DbHVzdGVycykpO1xuICAgICAgICBsZXQgY2x1c3Rlck51bSA9IDA7XG4gICAgICAgIGNvbnN0IHNvcnRlZENsdXN0ZXJOYW1lcyA9IE9iamVjdC5rZXlzKGNsdXN0ZXJNYXApO1xuICAgICAgICBzb3J0ZWRDbHVzdGVyTmFtZXMuc29ydCgoYSwgYikgPT4gY2x1c3Rlck1hcFtiXS5sZW5ndGggLSBjbHVzdGVyTWFwW2FdLmxlbmd0aCk7XG4gICAgICAgIGxldCBwZXJSb3cgPSA2O1xuICAgICAgICBsZXQgeU9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGxheW91dFNpemUgPSA1O1xuICAgICAgICBmb3IgKGNvbnN0IGNsdXN0ZXJOYW1lIG9mIHNvcnRlZENsdXN0ZXJOYW1lcykge1xuICAgICAgICAgICAgY29uc3QgY2x1c3RlciA9IGNsdXN0ZXJNYXBbY2x1c3Rlck5hbWVdO1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkaW5ncyA9IGF3YWl0IGJpb0xheW91dChjbHVzdGVyLCBzcGFyc2VNYXRyaXgsIDAuMDAxKTtcbiAgICAgICAgICAgIGlmIChjbHVzdGVyTnVtID09PSBNYXRoLmNlaWwocGVyUm93IC8gMS41KSkge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJOdW0gPSAwO1xuICAgICAgICAgICAgICAgIHlPZmZzZXQgKz0gbGF5b3V0U2l6ZSAvIHBlclJvdztcbiAgICAgICAgICAgICAgICBwZXJSb3cgPSBNYXRoLmNlaWwocGVyUm93ICogMS41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSAoKGNsdXN0ZXJOdW0gJSBwZXJSb3cpICogbGF5b3V0U2l6ZSAvIHBlclJvdykgKiAxLjU7XG4gICAgICAgICAgICAvLyBjb25zdCBvZmZzZXRZID0gTWF0aC5mbG9vcihjbHVzdGVyTnVtIC8gcGVyUm93KSAqIDI7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVtYmVkZGluZ3MuZW1iZWRYLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZW1iZWRYW2NsdXN0ZXJbaV1dID0gZW1iZWRkaW5ncy5lbWJlZFhbaV0gKiBsYXlvdXRTaXplIC8gcGVyUm93ICsgb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICBlbWJlZFlbY2x1c3RlcltpXV0gPSBlbWJlZGRpbmdzLmVtYmVkWVtpXSAqIGxheW91dFNpemUgLyBwZXJSb3cgKyB5T2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2x1c3Rlck51bSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVtYmVkWCwgZW1iZWRZIH07XG4gICAgfVxuICAgIG1lcmdlQ2x1c3RlcnMoY2x1c3RlcnMsIGksIGopIHtcbiAgICAgICAgY29uc3QgaUNsdXN0ZXIgPSBjbHVzdGVyc1tpXTtcbiAgICAgICAgY29uc3QgakNsdXN0ZXIgPSBjbHVzdGVyc1tqXTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjbHVzdGVycy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW2tdID09PSBqQ2x1c3RlcilcbiAgICAgICAgICAgICAgICBjbHVzdGVyc1trXSA9IGlDbHVzdGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzc2lnbkNsdXN0ZXJzKHNwYXJzZU1hdHJpeCwgblJvd3MpIHtcbiAgICAgICAgbGV0IGNsdXN0ZXJOdW0gPSAwO1xuICAgICAgICBjb25zdCBpcyA9IFtdO1xuICAgICAgICBjb25zdCBqcyA9IFtdO1xuICAgICAgICBjb25zdCBvcmRlciA9IE1hdGguZmxvb3IoTWF0aC5tYXgoTWF0aC5sb2cxMChuUm93cyksIDIpKSArIDE7XG4gICAgICAgIGNvbnN0IG1pbk9yZGVyID0gTWF0aC5wb3coMTAsIG9yZGVyKTtcbiAgICAgICAgY29uc3QgY2x1c3RlcnMgPSBuZXcgQXJyYXkoblJvd3MpLmZpbGwoLTEpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoc3BhcnNlTWF0cml4KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBqIG9mIE9iamVjdC5rZXlzKHNwYXJzZU1hdHJpeFtpXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5yb3VuZChzcGFyc2VNYXRyaXhbaV1bal0gKiBtaW5PcmRlcikgLyBtaW5PcmRlciA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgc3BhcnNlTWF0cml4W2ldW2pdICE9PSBOdW1iZXIoaSkgJiYgTnVtYmVyKGopID4gTnVtYmVyKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzLnB1c2goTnVtYmVyKGkpKTtcbiAgICAgICAgICAgICAgICAgICAganMucHVzaChOdW1iZXIoaikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlcnNbTnVtYmVyKGkpXSAhPT0gLTEgJiYgY2x1c3RlcnNbTnVtYmVyKGopXSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbHVzdGVyc1tOdW1iZXIoaSldICE9PSBjbHVzdGVyc1tOdW1iZXIoaildKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDbHVzdGVycyhjbHVzdGVycywgTnVtYmVyKGkpLCBOdW1iZXIoaikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNsdXN0ZXJzW051bWJlcihpKV0gIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyc1tOdW1iZXIoaildID0gY2x1c3RlcnNbTnVtYmVyKGkpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjbHVzdGVyc1tOdW1iZXIoaildICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcnNbTnVtYmVyKGkpXSA9IGNsdXN0ZXJzW051bWJlcihqKV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyTnVtKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyc1tOdW1iZXIoaSldID0gY2x1c3Rlck51bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJzW051bWJlcihqKV0gPSBjbHVzdGVyTnVtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjbHVzdGVyc1tpXSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyTnVtKys7XG4gICAgICAgICAgICAgICAgY2x1c3RlcnNbaV0gPSBjbHVzdGVyTnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGNsdXN0ZXJzLCBpczogbmV3IFVpbnQzMkFycmF5KGlzKSwganM6IG5ldyBVaW50MzJBcnJheShqcykgfTtcbiAgICB9XG4gICAgLyoqIHNhbWUgYXMgYXNzaWduIGNsdXN0ZXJzIGJ1dCB3b3JraW5nIG9uIHRoZSBsZXZlbCBvZiBDU1IgZm9ybWF0IHJldHVybmVkIGZyb20gd2ViR1BVICovXG4gICAgYXNzaWduQ2x1c3RlcnNDU1IobWNsUmVzLCBuUm93cykge1xuICAgICAgICBsZXQgY2x1c3Rlck51bSA9IDA7XG4gICAgICAgIGNvbnN0IGlzID0gW107XG4gICAgICAgIGNvbnN0IGpzID0gW107XG4gICAgICAgIGNvbnN0IG9yZGVyID0gTWF0aC5mbG9vcihNYXRoLm1heChNYXRoLmxvZzEwKG5Sb3dzKSwgMikpICsgMTtcbiAgICAgICAgY29uc3QgbWluT3JkZXIgPSAxIC8gTWF0aC5wb3coMTAsIG9yZGVyKTtcbiAgICAgICAgY29uc3QgY2x1c3RlcnMgPSBuZXcgQXJyYXkoblJvd3MpLmZpbGwoLTEpO1xuICAgICAgICBjb25zdCBjb3JyZWN0ZWRPZmZzZXRzID0gbmV3IFVpbnQzMkFycmF5KG5Sb3dzICsgMSk7XG4gICAgICAgIGxldCBvZmZzZXRDb3VudGVyID0gMDtcbiAgICAgICAgY29ycmVjdGVkT2Zmc2V0c1swXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IG1jbFJlcy5pbmRleE9mZnNldHNbaV07IGsgPCBtY2xSZXMuaW5kZXhPZmZzZXRzW2kgKyAxXTsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaiA9IG1jbFJlcy5LTk5JbmRleGVzW2tdO1xuICAgICAgICAgICAgICAgIGlmIChqIDw9IGkgfHwgbWNsUmVzLktOTlNpbWlsYXJpdGllc1trXSA8PSBtaW5PcmRlcilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICBqcy5wdXNoKGopO1xuICAgICAgICAgICAgICAgIG9mZnNldENvdW50ZXIrKztcbiAgICAgICAgICAgICAgICBpZiAoY2x1c3RlcnNbaV0gIT09IC0xICYmIGNsdXN0ZXJzW2pdICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlcnNbaV0gIT09IGNsdXN0ZXJzW2pdKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNsdXN0ZXJzKGNsdXN0ZXJzLCBpLCBqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2x1c3RlcnNbaV0gIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJzW2pdID0gY2x1c3RlcnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNsdXN0ZXJzW2pdICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyc1tpXSA9IGNsdXN0ZXJzW2pdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3Rlck51bSsrO1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyc1tpXSA9IGNsdXN0ZXJOdW07XG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJzW2pdID0gY2x1c3Rlck51bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3JyZWN0ZWRPZmZzZXRzW2kgKyAxXSA9IG9mZnNldENvdW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW2ldID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJOdW0rKztcbiAgICAgICAgICAgICAgICBjbHVzdGVyc1tpXSA9IGNsdXN0ZXJOdW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgY2x1c3RlcnMsIGlzOiBuZXcgVWludDMyQXJyYXkoaXMpLCBqczogbmV3IFVpbnQzMkFycmF5KGpzKSwgY29ycmVjdGVkT2Zmc2V0cyB9O1xuICAgIH1cbiAgICB0b09iamVjdEZvcm0oc3BhcnNlTWF0cml4KSB7XG4gICAgICAgIGNvbnN0IHNwYXJzZU9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYXJzZU1hdHJpeC5pLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXguaVtpXV0pXG4gICAgICAgICAgICAgICAgc3BhcnNlT2JqZWN0W3NwYXJzZU1hdHJpeC5pW2ldXSA9IHt9O1xuICAgICAgICAgICAgc3BhcnNlT2JqZWN0W3NwYXJzZU1hdHJpeC5pW2ldXVtzcGFyc2VNYXRyaXgualtpXV0gPSAxIC0gc3BhcnNlTWF0cml4LmRpc3RhbmNlW2ldO1xuICAgICAgICAgICAgaWYgKCFzcGFyc2VPYmplY3Rbc3BhcnNlTWF0cml4LmpbaV1dKVxuICAgICAgICAgICAgICAgIHNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXgualtpXV0gPSB7fTtcbiAgICAgICAgICAgIHNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXgualtpXV1bc3BhcnNlTWF0cml4LmlbaV1dID0gMSAtIHNwYXJzZU1hdHJpeC5kaXN0YW5jZVtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3BhcnNlT2JqZWN0O1xuICAgIH1cbiAgICBhZGRMb29wcyhzcGFyc2VPYmplY3QsIG5Sb3dzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFzcGFyc2VPYmplY3RbaV0pXG4gICAgICAgICAgICAgICAgc3BhcnNlT2JqZWN0W2ldID0ge307XG4gICAgICAgICAgICBzcGFyc2VPYmplY3RbaV1baV0gPSB0aGlzLl9vcHRpb25zLm11bHRGYWN0b3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbm9ybWFsaXplKHNwYXJzZU9iamVjdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoc3BhcnNlT2JqZWN0KSkge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gc3BhcnNlT2JqZWN0W2ldO1xuICAgICAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGogb2YgT2JqZWN0LmtleXMocm93KSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gcm93W2pdO1xuICAgICAgICAgICAgaWYgKHN1bSA9PT0gMClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaiBvZiBPYmplY3Qua2V5cyhyb3cpKVxuICAgICAgICAgICAgICAgIHNwYXJzZU9iamVjdFtpXVtqXSAvPSBzdW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXhwYW5kKHNwYXJzZU9iamVjdCwgblJvd3MpIHtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRPYmplY3QgPSB7fTtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBNYXRoLmZsb29yKE1hdGgubWF4KE1hdGgubG9nMTAoblJvd3MpLCAyKSkgKyAxO1xuICAgICAgICBjb25zdCBtaW5PcmRlciA9IE1hdGgucG93KDEwLCBvcmRlcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFzcGFyc2VPYmplY3RbaV0pXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyBjb25zdCByb3cgPSBzcGFyc2VPYmplY3RbaV07XG4gICAgICAgICAgICBleHBhbmRlZE9iamVjdFtpXSA/PyAoZXhwYW5kZWRPYmplY3RbaV0gPSB7fSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG5Sb3dzOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNwYXJzZU9iamVjdFtpXT8uW2pdKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmdldEV4cGFuZFZhbHVlKHNwYXJzZU9iamVjdCwgaSwgaik7IC8vcHJ1bmluZyBzdGVwXG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucm91bmQodmFsICogbWluT3JkZXIpIC8gbWluT3JkZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkT2JqZWN0W2ldW2pdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4cGFuZGVkT2JqZWN0W2pdKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRPYmplY3Rbal0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRPYmplY3Rbal1baV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHBhbmRlZE9iamVjdDtcbiAgICB9XG4gICAgLy8gcHJpdmF0ZSBwcnVuZShyb3c6IFNwYXJzZU1hdHJpeE9iamVjdFtudW1iZXJdKSB7XG4gICAgLy8gfVxuICAgIGluZmxhdGUoc3BhcnNlT2JqZWN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhzcGFyc2VPYmplY3QpKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBzcGFyc2VPYmplY3RbaV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGogb2YgT2JqZWN0LmtleXMocm93KSlcbiAgICAgICAgICAgICAgICBzcGFyc2VPYmplY3RbaV1bal0gPSBNYXRoLnBvdyhzcGFyc2VPYmplY3RbaV1bal0sIHRoaXMuX29wdGlvbnMuaW5mbGF0ZUZhY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RXhwYW5kVmFsdWUoc3BhcnNlT2JqZWN0LCBpLCBqKSB7XG4gICAgICAgIGxldCB2YWwgPSAwO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IE9iamVjdC5rZXlzKHNwYXJzZU9iamVjdFtpXSA/PyB7fSk7XG4gICAgICAgIGNvbnN0IG90aGVySW5kZXhlcyA9IE9iamVjdC5rZXlzKHNwYXJzZU9iamVjdFtqXSA/PyB7fSk7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBjdXJyZW50SW5kZXhlcykge1xuICAgICAgICAgICAgaWYgKG90aGVySW5kZXhlcy5pbmNsdWRlcyhrKSlcbiAgICAgICAgICAgICAgICB2YWwgKz0gc3BhcnNlT2JqZWN0W2ldW2tdICogc3BhcnNlT2JqZWN0W2pdW2tdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYldGeVkyOTJMV05zZFhOMFpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKdFlYSmpiM1l0WTJ4MWMzUmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRFFTeFBRVUZQTEVWQlFVTXNVMEZCVXl4RlFVRkRMRTFCUVUwc1kwRkJZeXhEUVVGRE8wRkJSM1pETEU5QlFVOHNSVUZCUXl4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEc5RVFVRnZSQ3hEUVVGRE8wRkJRM1pHTEUxQlFVMHNRMEZCUXl4TlFVRk5MR2xDUVVGcFFpeEhRVUZsTzBsQlF6TkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wbEJRMllzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZEYUVJc1lVRkJZU3hGUVVGRkxFTkJRVU03U1VGRGFFSXNWVUZCVlN4RlFVRkZMRU5CUVVNN1EwRkRaQ3hEUVVGRE8wRkJSVVlzVFVGQlRTeFBRVUZQTEdkQ1FVRm5RanRKUVVjelFpeFpRVUZaTEU5QlFUUkNMRVZCUVVVN1VVRkRlRU1zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RlFVRkRMRWRCUVVjc2FVSkJRV2xDTEVWQlFVVXNSMEZCUnl4SlFVRkpMRVZCUVVNc1EwRkJRenRKUVVOc1JDeERRVUZETzBsQlJVMHNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhaUVVGblF5eEZRVUZGTEV0QlFXRTdVVUZEY0VVc2QwSkJRWGRDTzFGQlEzaENMR2REUVVGblF6dFJRVU5vUXl4SlFVRkpMRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMUZCUTI1RUxFbEJRVWtzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4aFFVRmhMRWRCUVVjc1EwRkJReXhGUVVGRk8xbEJRMjVETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1dVRkJXU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFsQlEyNURMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zWVVGQllTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVOd1JDeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhaUVVGWkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdaMEpCUTJoRUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1owSkJRek5DTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03WVVGRE9VSTdVMEZEUmp0UlFVTkVMRTFCUVUwc1JVRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zV1VGQldTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNCRkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRMMElzVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJTeFpRVUZaTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRjRVVzVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVVc1ZVRkJWU3hEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNWVUZCVlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZETEVOQlFVTTdTVUZEYkVZc1EwRkJRenRKUVVWTkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNXVUZCWjBNc1JVRkJSU3hMUVVGaE8xRkJRekZGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhoUVVGaExFdEJRVXNzUTBGQlF6dFpRVU51UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zV1VGQldTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlRkRExFMUJRVTBzVFVGQlRTeEhRVUZITEUxQlFVMHNiVUpCUVcxQ0xFTkJRM1JETEZsQlFWa3NSVUZCUlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eGhRVUZoTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRemxGTEVOQlFVTTdVVUZEUml4TlFVRk5MRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlF6TkVMRTFCUVUwc1JVRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zV1VGQldTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNCRkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRMMElzVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJTeFpRVUZaTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRjRVVzVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVVc1ZVRkJWU3hEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNWVUZCVlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZETEVOQlFVTTdTVUZEYkVZc1EwRkJRenRKUVVWUExHVkJRV1VzUTBGQlF5eFJRVUZyUWp0UlFVTjRReXhOUVVGTkxHTkJRV01zUjBGQk1FSXNSVUZCUlN4RFFVRkRPMUZCUTJwRUxFdEJRVXNzVFVGQlRTeFBRVUZQTEVsQlFVa3NVVUZCVVN4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNUMEZCVHl4RFFVRkRPMmRDUVVNeFFpeGpRVUZqTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRemxDTEdOQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRE8xTkJRek5DTzFGQlEwUXNUVUZCVFN4aFFVRmhMRWRCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzQklMRTFCUVUwc1ZVRkJWU3hIUVVFd1FpeEZRVUZGTEVOQlFVTTdVVUZETjBNc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRM1JETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRlRU1zYzBKQlFYTkNPMUZCUTNSQ0xEaERRVUU0UXp0UlFVTTVReXh2UTBGQmIwTTdVVUZEY0VNc05FTkJRVFJETzFGQlF6VkRMR2REUVVGblF6dFJRVU5vUXl4dlFrRkJiMEk3VVVGRGNFSXNZVUZCWVR0UlFVTmlMRFpEUVVFMlF6dFJRVU0zUXl4TlFVRk5PMUZCUTA0c1NVRkJTVHRKUVVOT0xFTkJRVU03U1VGRlR5eHBRa0ZCYVVJc1EwRkJReXhOUVVGMVFpeEZRVUZGTEV0QlFXRTdVVUZET1VRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETjBRc1RVRkJUU3hSUVVGUkxFZEJRVWNzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzcERMRTFCUVUwc1dVRkJXU3hIUVVGMVFpeEZRVUZGTEVOQlFVTTdVVUZETlVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU01UWl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlEzSkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTNoRkxFMUJRVTBzUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF5OUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkU3YjBKQlEyaEVMRk5CUVZNN1owSkJRMWdzV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRhRVE3VTBGRFJqdFJRVU5FTEU5QlFVOHNXVUZCV1N4RFFVRkRPMGxCUTNSQ0xFTkJRVU03U1VGRlR5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVd0Q0xFVkJRVVVzV1VGQlowTXNSVUZCUlN4TFFVRmhPMUZCUTNSR0xFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NXVUZCV1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXZReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETDBNc1RVRkJUU3hWUVVGVkxFZEJRVFJDTEVWQlFVVXNRMEZCUXp0UlFVTXZReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRemxDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRE8yZENRVU4wUWl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlF6TkNMRlZCUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRPVUlzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4dlJFRkJiMFE3VVVGRGNFUXNiVVJCUVcxRU8xRkJRMjVFTEVsQlFVa3NWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOdVFpeE5RVUZOTEd0Q1FVRnJRaXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRia1FzYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVkVzUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4VlFVRlZMRU5CUVVNc1EwRkJVU3hEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZETjBZc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXWXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMmhDTEUxQlFVMHNWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOeVFpeExRVUZMTEUxQlFVMHNWMEZCVnl4SlFVRkpMR3RDUVVGclFpeEZRVUZGTzFsQlF6VkRMRTFCUVUwc1QwRkJUeXhIUVVGSExGVkJRVlVzUTBGQlF5eFhRVUZyUWl4RFFVRkZMRU5CUVVNN1dVRkRhRVFzVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4VFFVRlRMRU5CUVVNc1QwRkJUeXhGUVVGRkxGbEJRVmtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTnFSU3hKUVVGSkxGVkJRVlVzUzBGQlN5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJUdG5Ra0ZETVVNc1ZVRkJWU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEWml4UFFVRlBMRWxCUVVrc1ZVRkJWU3hIUVVGSExFMUJRVTBzUTBGQlF6dG5Ra0ZETDBJc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8yRkJRMnhETzFsQlEwUXNUVUZCVFN4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExGVkJRVlVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNSMEZCUnl4VlFVRlZMRWRCUVVjc1RVRkJUU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlEzQkZMSFZFUVVGMVJEdFpRVVYyUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTJwRUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRlZCUVZVc1IwRkJSeXhOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETzJkQ1FVTXhSU3hOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4VlFVRlZMRWRCUVVjc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF6dGhRVU16UlR0WlFVTkVMRlZCUVZVc1JVRkJSU3hEUVVGRE8xTkJRMlE3VVVGRFJDeFBRVUZQTEVWQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJReXhEUVVGRE8wbEJRekZDTEVOQlFVTTdTVUZGVHl4aFFVRmhMRU5CUVVNc1VVRkJhMElzUlVGQlJTeERRVUZUTEVWQlFVVXNRMEZCVXp0UlFVTTFSQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkROMElzVFVGQlRTeFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRemRDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRM2hETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExGRkJRVkU3WjBKQlF6RkNMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTTdVMEZETVVJN1NVRkRTQ3hEUVVGRE8wbEJRMDBzWTBGQll5eERRVUZETEZsQlFXZERMRVZCUVVVc1MwRkJZVHRSUVVOdVJTeEpRVUZKTEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRia0lzVFVGQlRTeEZRVUZGTEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUTNoQ0xFMUJRVTBzUlVGQlJTeEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjRRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTTNSQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU55UXl4TlFVRk5MRkZCUVZFc1IwRkJZU3hKUVVGSkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UkN4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRVZCUVVVN1dVRkRla01zUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOdVJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVkVzUTBGQlF5eERRVUZETEVOQlFWRXNRMEZCUXl4SFFVRkhMRkZCUVZFc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETzI5Q1FVTjRSU3haUVVGWkxFTkJRVU1zUTBGQlVTeERRVUZETEVOQlFVTXNRMEZCVVN4RFFVRkRMRXRCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdiMEpCUTNwRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEyNUNMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMjVDTEVsQlFVa3NVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSVHQzUWtGRE5VUXNTVUZCU1N4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czBRa0ZETjBNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM0ZDUVVOMFJEdDVRa0ZCVFN4SlFVRkpMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSVHQzUWtGRGNrTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHhRa0ZETTBNN2VVSkJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVTdkMEpCUTNKRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2NVSkJRek5ETzNsQ1FVRk5PM2RDUVVOTUxGVkJRVlVzUlVGQlJTeERRVUZETzNkQ1FVTmlMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNN2QwSkJRMnBETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTTdjVUpCUTJ4RE8ybENRVU5HTzJGQlEwWTdVMEZEUmp0UlFVTkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzUkRMRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOMFFpeFZRVUZWTEVWQlFVY3NRMEZCUXp0blFrRkRaQ3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRPMkZCUXpGQ08xTkJRMFk3VVVGRFJDeFBRVUZQTEVWQlFVTXNVVUZCVVN4RlFVRkZMRVZCUVVVc1JVRkJSU3hKUVVGSkxGZEJRVmNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkJTU3hYUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0SlFVTjBSU3hEUVVGRE8wbEJSVVFzTUVaQlFUQkdPMGxCUTJ4R0xHbENRVUZwUWl4RFFVRkRMRTFCUVhWQ0xFVkJRVVVzUzBGQllUdFJRVU01UkN4SlFVRkpMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGJrSXNUVUZCVFN4RlFVRkZMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRM2hDTEUxQlFVMHNSVUZCUlN4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVONFFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNM1JDeE5RVUZOTEZGQlFWRXNSMEZCUnl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRla01zVFVGQlRTeFJRVUZSTEVkQlFXRXNTVUZCU1N4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRVFzU1VGQlNTeGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU40UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRemxDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEzaEZMRTFCUVUwc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJReTlDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRkZCUVZFN2IwSkJRMnBFTEZOQlFWTTdaMEpCUTFnc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRXQ3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOWUxHRkJRV0VzUlVGQlJTeERRVUZETzJkQ1FVTm9RaXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVN2IwSkJRelZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdkMEpCUXpkQ0xFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEZEVNN2NVSkJRVTBzU1VGQlNTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVU3YjBKQlF6ZENMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2FVSkJRek5DTzNGQ1FVRk5MRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkZPMjlDUVVNM1FpeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTXpRanR4UWtGQlRUdHZRa0ZEVEN4VlFVRlZMRVZCUVVVc1EwRkJRenR2UWtGRFlpeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRE8yOUNRVU42UWl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVlVGQlZTeERRVUZETzJsQ1FVTXhRanRoUVVOR08xbEJRMFFzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEdGQlFXRXNRMEZCUXp0VFFVTjZRenRSUVVORUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNSRExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU4wUWl4VlFVRlZMRVZCUVVjc1EwRkJRenRuUWtGRFpDeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hEUVVGRE8yRkJRekZDTzFOQlEwWTdVVUZEUkN4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZKTEZkQlFWY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1owSkJRV2RDTEVWQlFVTXNRMEZCUXp0SlFVTjRSaXhEUVVGRE8wbEJSVTBzV1VGQldTeERRVUZETEZsQlFXZERPMUZCUTJ4RUxFMUJRVTBzV1VGQldTeEhRVUY1UXl4RlFVRkZMRU5CUVVNN1VVRkRPVVFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRemxETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRiRU1zV1VGQldTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdXVUZEZGtNc1dVRkJXU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRiRVlzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTnNReXhaUVVGWkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFpRVU4yUXl4WlFVRlpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1dVRkJXU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnVSanRSUVVORUxFOUJRVThzV1VGQldTeERRVUZETzBsQlEzUkNMRU5CUVVNN1NVRkZUeXhSUVVGUkxFTkJRVU1zV1VGQlowTXNSVUZCUlN4TFFVRmhPMUZCUXpsRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZET1VJc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJ4Q0xGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1dVRkRka0lzV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNWVUZCVlN4RFFVRkRPMU5CUXk5RE8wbEJRMGdzUTBGQlF6dEpRVVZQTEZOQlFWTXNRMEZCUXl4WlFVRm5RenRSUVVOb1JDeExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVTdXVUZEZWtNc1RVRkJUU3hIUVVGSExFZEJRVWNzV1VGQldTeERRVUZETEVOQlFWRXNRMEZCUXl4RFFVRkRPMWxCUTI1RExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTmFMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1owSkJRemxDTEVkQlFVY3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJVU3hEUVVGRExFTkJRVU03V1VGRGRrSXNTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJRenRuUWtGQlJTeFRRVUZUTzFsQlEzaENMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1owSkJRemxDTEZsQlFWa3NRMEZCUXl4RFFVRlJMRU5CUVVNc1EwRkJReXhEUVVGUkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTTdVMEZETTBNN1NVRkRTQ3hEUVVGRE8wbEJSVThzVFVGQlRTeERRVUZETEZsQlFXZERMRVZCUVVVc1MwRkJZVHRSUVVNMVJDeE5RVUZOTEdOQlFXTXNSMEZCZFVJc1JVRkJSU3hEUVVGRE8xRkJRemxETEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRemRFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNKRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZET1VJc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJ4Q0xGTkJRVk03V1VGRFdDd3JRa0ZCSzBJN1dVRkRMMElzWTBGQll5eERRVUZETEVOQlFVTXNUVUZCYUVJc1kwRkJZeXhEUVVGRExFTkJRVU1zU1VGQlRTeEZRVUZGTEVWQlFVTTdXVUZEZWtJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZET1VJc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGRrSXNVMEZCVXp0blFrRkRXQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4alFVRmpPMmRDUVVOdVJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhIUVVGSExGRkJRVkVzUTBGQlF5eEhRVUZITEZGQlFWRXNSMEZCUnl4RFFVRkRMRVZCUVVVN2IwSkJRemRETEdOQlFXTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdiMEpCUXpOQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVOd1FpeGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yOUNRVU42UWl4alFVRmpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMmxDUVVNMVFqdGhRVU5HTzFOQlEwWTdVVUZEUkN4UFFVRlBMR05CUVdNc1EwRkJRenRKUVVONFFpeERRVUZETzBsQlJVUXNiVVJCUVcxRU8wbEJSVzVFTEVsQlFVazdTVUZGU1N4UFFVRlBMRU5CUVVNc1dVRkJaME03VVVGRE9VTXNTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RlFVRkZPMWxCUTNwRExFMUJRVTBzUjBGQlJ5eEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRlJMRU5CUVVNc1EwRkJRenRaUVVOdVF5eExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTTVRaXhaUVVGWkxFTkJRVU1zUTBGQlVTeERRVUZETEVOQlFVTXNRMEZCVVN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCVVN4RFFVRkRMRU5CUVVNc1EwRkJVU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRUUVVNNVJ6dEpRVU5JTEVOQlFVTTdTVUZGVHl4alFVRmpMRU5CUVVNc1dVRkJaME1zUlVGQlJTeERRVUZOTEVWQlFVVXNRMEZCVFR0UlFVTnlSU3hKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEV2l4TlFVRk5MR05CUVdNc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU14UkN4TlFVRk5MRmxCUVZrc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxHTkJRV01zUlVGQlJUdFpRVU01UWl4SlFVRkpMRmxCUVZrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXhRaXhIUVVGSExFbEJRVWtzV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVZFc1EwRkJReXhIUVVGSExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRlJMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVU5FTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdFRjR0Z5YzJWTllYUnlhWGhTWlhOMWJIUjlJR1p5YjIwZ0p5NHVMMlJwYzNSaGJtTmxMVzFoZEhKcGVDOXpjR0Z5YzJVdGJXRjBjbWw0TFhObGNuWnBZMlVuTzF4dWFXMXdiM0owSUh0aWFXOU1ZWGx2ZFhSOUlHWnliMjBnSnk0dlltbHZMV3hoZVc5MWRDYzdYRzVwYlhCdmNuUWdlMDFEVEU5d2RHbHZibk1zSUZOd1lYSnpaVTFoZEhKcGVFOWlhbVZqZEgwZ1puSnZiU0FuTGk5MGVYQmxjeWM3WEc1cGJYQnZjblFnZTAxRFRFOXdVbVYwZFhKdVZIbHdaWDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTl0WVhSb0wzTnlZeTkzWldKSFVGVXZUVU5NTDNSNWNHVnpKenRjYm1sdGNHOXlkQ0I3YldGeWEyOTJRMngxYzNSbGNsZGxZa2RRVlgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5dFlYUm9MM055WXk5M1pXSkhVRlV2VFVOTUwwMURUQzEzWldKSFVGVW5PMXh1Wlhod2IzSjBJR052Ym5OMElHUmxabUYxYkhSTlEweFBjSFJwYjI1ek9pQk5RMHhQY0hScGIyNXpJRDBnZTF4dUlDQmxlSEJoYm1SR1lXTjBiM0k2SURJc1hHNGdJRzFoZUVsMFpYSmhkR2x2Ym5NNklEVXNYRzRnSUdsdVpteGhkR1ZHWVdOMGIzSTZJRElzWEc0Z0lHMTFiSFJHWVdOMGIzSTZJREVzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1RVTk1VM0JoY25ObFVtVmtkV05sY2lCN1hHNGdJSEJ5YVhaaGRHVWdYMjl3ZEdsdmJuTTZJRTFEVEU5d2RHbHZibk03WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGN6b2dVR0Z5ZEdsaGJEeE5RMHhQY0hScGIyNXpQaUE5SUh0OUtTQjdYRzRnSUNBZ2RHaHBjeTVmYjNCMGFXOXVjeUE5SUhzdUxpNWtaV1poZFd4MFRVTk1UM0IwYVc5dWN5d2dMaTR1YjNCMGMzMDdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdZWE41Ym1NZ2RISmhibk5tYjNKdEtITndZWEp6WlUxaGRISnBlRG9nVTNCaGNuTmxUV0YwY21sNFVtVnpkV3gwTENCdVVtOTNjem9nYm5WdFltVnlLU0I3WEc0Z0lDQWdMeThnZEdWemRGZHZjbXRsY2sxMWJIUnBjR3g1S0NrN1hHNGdJQ0FnTHk4Z2NtVjBkWEp1SUc1bGR5QkpiblF6TWtGeWNtRjVLRzVTYjNkektUdGNiaUFnSUNCc1pYUWdjM0JoY25ObFQySnFaV04wSUQwZ2RHaHBjeTUwYjA5aWFtVmpkRVp2Y20wb2MzQmhjbk5sVFdGMGNtbDRLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZiM0IwYVc5dWN5NXRZWGhKZEdWeVlYUnBiMjV6SUQ0Z01Da2dlMXh1SUNBZ0lDQWdkR2hwY3k1aFpHUk1iMjl3Y3loemNHRnljMlZQWW1wbFkzUXNJRzVTYjNkektUdGNiaUFnSUNBZ0lIUm9hWE11Ym05eWJXRnNhWHBsS0hOd1lYSnpaVTlpYW1WamRDazdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyOXdkR2x2Ym5NdWJXRjRTWFJsY21GMGFXOXVjenNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJSE53WVhKelpVOWlhbVZqZENBOUlIUm9hWE11Wlhod1lXNWtLSE53WVhKelpVOWlhbVZqZEN3Z2JsSnZkM01wTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbWx1Wm14aGRHVW9jM0JoY25ObFQySnFaV04wS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV1YjNKdFlXeHBlbVVvYzNCaGNuTmxUMkpxWldOMEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdlMk5zZFhOMFpYSnpMQ0JwY3l3Z2FuTjlJRDBnZEdocGN5NWhjM05wWjI1RGJIVnpkR1Z5Y3loemNHRnljMlZQWW1wbFkzUXNJRzVTYjNkektUdGNiaUFnSUNCMGFHbHpMbU52Y25KbFkzUkRiSFZ6ZEdWeWN5aGpiSFZ6ZEdWeWN5azdYRzRnSUNBZ1kyOXVjM1FnWlcxaVpXUmthVzVuY3lBOUlHRjNZV2wwSUhSb2FYTXViR0Y1YjNWMEtHTnNkWE4wWlhKekxDQnpjR0Z5YzJWUFltcGxZM1FzSUc1U2IzZHpLVHRjYmlBZ0lDQnlaWFIxY200Z2UyTnNkWE4wWlhKekxDQmxiV0psWkZnNklHVnRZbVZrWkdsdVozTXVaVzFpWldSWUxDQmxiV0psWkZrNklHVnRZbVZrWkdsdVozTXVaVzFpWldSWkxDQnBjeXdnYW5OOU8xeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklHRnplVzVqSUhSeVlXNXpabTl5YlZkbFlrZFFWU2h6Y0dGeWMyVk5ZWFJ5YVhnNklGTndZWEp6WlUxaGRISnBlRkpsYzNWc2RDd2dibEp2ZDNNNklHNTFiV0psY2lrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5dmNIUnBiMjV6TG0xaGVFbDBaWEpoZEdsdmJuTWdQVDA5SURBcFhHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NTBjbUZ1YzJadmNtMG9jM0JoY25ObFRXRjBjbWw0TENCdVVtOTNjeWs3WEc1Y2JpQWdJQ0JqYjI1emRDQnRZMnhTWlhNZ1BTQmhkMkZwZENCdFlYSnJiM1pEYkhWemRHVnlWMlZpUjFCVktGeHVJQ0FnSUNBZ2MzQmhjbk5sVFdGMGNtbDRMQ0J1VW05M2N5d2dkR2hwY3k1ZmIzQjBhVzl1Y3k1dFlYaEpkR1Z5WVhScGIyNXpMQ0IwYUdsekxsOXZjSFJwYjI1ekxtbHVabXhoZEdWR1lXTjBiM0pjYmlBZ0lDQXBPMXh1SUNBZ0lHTnZibk4wSUhOd1lYSnpaVTlpYW1WamRDQTlJSFJvYVhNdVkzTnlWRzlUY0dGeWMyVlBZbXBsWTNRb2JXTnNVbVZ6TENCdVVtOTNjeWs3WEc0Z0lDQWdZMjl1YzNRZ2UyTnNkWE4wWlhKekxDQnBjeXdnYW5OOUlEMGdkR2hwY3k1aGMzTnBaMjVEYkhWemRHVnljeWh6Y0dGeWMyVlBZbXBsWTNRc0lHNVNiM2R6S1R0Y2JpQWdJQ0IwYUdsekxtTnZjbkpsWTNSRGJIVnpkR1Z5Y3loamJIVnpkR1Z5Y3lrN1hHNGdJQ0FnWTI5dWMzUWdaVzFpWldSa2FXNW5jeUE5SUdGM1lXbDBJSFJvYVhNdWJHRjViM1YwS0dOc2RYTjBaWEp6TENCemNHRnljMlZQWW1wbFkzUXNJRzVTYjNkektUdGNiaUFnSUNCeVpYUjFjbTRnZTJOc2RYTjBaWEp6TENCbGJXSmxaRmc2SUdWdFltVmtaR2x1WjNNdVpXMWlaV1JZTENCbGJXSmxaRms2SUdWdFltVmtaR2x1WjNNdVpXMWlaV1JaTENCcGN5d2dhbk45TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCamIzSnlaV04wUTJ4MWMzUmxjbk1vWTJ4MWMzUmxjbk02SUc1MWJXSmxjbHRkS1NCN1hHNGdJQ0FnWTI5dWMzUWdZMngxYzNSbGNsTnBlbVZOWVhBNklIdGJYem9nYm5WdFltVnlYVG9nYm5WdFltVnlmU0E5SUh0OU8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ1kyeDFjM1JsY2lCdlppQmpiSFZ6ZEdWeWN5a2dlMXh1SUNBZ0lDQWdhV1lnS0NGamJIVnpkR1Z5VTJsNlpVMWhjRnRqYkhWemRHVnlYU2xjYmlBZ0lDQWdJQ0FnWTJ4MWMzUmxjbE5wZW1WTllYQmJZMngxYzNSbGNsMGdQU0F3TzF4dUlDQWdJQ0FnWTJ4MWMzUmxjbE5wZW1WTllYQmJZMngxYzNSbGNsMHJLenRjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVjM1FnYzI5eWRHVmtTVzVrWlhobGN5QTlJRTlpYW1WamRDNXJaWGx6S0dOc2RYTjBaWEpUYVhwbFRXRndLUzV0WVhBb1RuVnRZbVZ5S1M1emIzSjBLQ2hoTENCaUtTQTlQaUJqYkhWemRHVnlVMmw2WlUxaGNGdGhYU0F0SUdOc2RYTjBaWEpUYVhwbFRXRndXMkpkS1R0Y2JpQWdJQ0JqYjI1emRDQmpiSFZ6ZEdWeVRXRndPaUI3VzE4NklHNTFiV0psY2wwNklHNTFiV0psY24wZ1BTQjdmVHRjYmlBZ0lDQnpiM0owWldSSmJtUmxlR1Z6TG1admNrVmhZMmdvS0dOc2RYTjBaWEpKWkhnc0lHa3BJRDArSUdOc2RYTjBaWEpOWVhCYlkyeDFjM1JsY2tsa2VGMGdQU0JwSUNzZ01TazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmpiSFZ6ZEdWeWN5NXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQWdJR05zZFhOMFpYSnpXMmxkSUQwZ1kyeDFjM1JsY2sxaGNGdGpiSFZ6ZEdWeWMxdHBYVjA3WEc0Z0lDQWdMeThnYkdWMElHTjFja05zZFhOMFpYSWdQU0F4TzF4dUlDQWdJQzh2SUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1kyeDFjM1JsY25NdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQXZMeUFnSUdsbUlDZ2hZMngxYzNSbGNrMWhjRnRqYkhWemRHVnljMXRwWFYwcElIdGNiaUFnSUNBdkx5QWdJQ0FnWTJ4MWMzUmxjazFoY0Z0amJIVnpkR1Z5YzF0cFhWMGdQU0JqZFhKRGJIVnpkR1Z5TzF4dUlDQWdJQzh2SUNBZ0lDQmpiSFZ6ZEdWeWMxdHBYU0E5SUdOMWNrTnNkWE4wWlhJN1hHNGdJQ0FnTHk4Z0lDQWdJR04xY2tOc2RYTjBaWElyS3p0Y2JpQWdJQ0F2THlBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnTHk4Z0lDQWdJR05zZFhOMFpYSnpXMmxkSUQwZ1kyeDFjM1JsY2sxaGNGdGpiSFZ6ZEdWeWMxdHBYVjA3WEc0Z0lDQWdMeThnSUNCOVhHNGdJQ0FnTHk4Z2ZWeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQmpjM0pVYjFOd1lYSnpaVTlpYW1WamRDaHRZMnhTWlhNNklFMURURTl3VW1WMGRYSnVWSGx3WlN3Z2JsSnZkM002SUc1MWJXSmxjaWtnZTF4dUlDQWdJR052Ym5OMElHOXlaR1Z5SUQwZ1RXRjBhQzVtYkc5dmNpaE5ZWFJvTG0xaGVDaE5ZWFJvTG14dlp6RXdLRzVTYjNkektTd2dNaWtwSUNzZ01UdGNiaUFnSUNCamIyNXpkQ0J0YVc1UGNtUmxjaUE5SURFZ0x5Qk5ZWFJvTG5CdmR5Z3hNQ3dnYjNKa1pYSXBPMXh1SUNBZ0lHTnZibk4wSUhOd1lYSnpaVTlpYW1WamREb2dVM0JoY25ObFRXRjBjbWw0VDJKcVpXTjBJRDBnZTMwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVVtOTNjenNnYVNzcktTQjdYRzRnSUNBZ0lDQnpjR0Z5YzJWUFltcGxZM1JiYVYwZ1BTQjdmVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR3NnUFNCdFkyeFNaWE11YVc1a1pYaFBabVp6WlhSelcybGRPeUJySUR3Z2JXTnNVbVZ6TG1sdVpHVjRUMlptYzJWMGMxdHBJQ3NnTVYwN0lHc3JLeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JxSUQwZ2JXTnNVbVZ6TGt0T1RrbHVaR1Y0WlhOYmExMDdYRzRnSUNBZ0lDQWdJR2xtSUNocUlEdzlJR2tnZkh3Z2JXTnNVbVZ6TGt0T1RsTnBiV2xzWVhKcGRHbGxjMXRyWFNBOElHMXBiazl5WkdWeUtWeHVJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0J6Y0dGeWMyVlBZbXBsWTNSYmFWMWJhbDBnUFNCdFkyeFNaWE11UzA1T1UybHRhV3hoY21sMGFXVnpXMnRkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2MzQmhjbk5sVDJKcVpXTjBPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0JoYzNsdVl5QnNZWGx2ZFhRb1kyeDFjM1JsY25NNklHNTFiV0psY2x0ZExDQnpjR0Z5YzJWTllYUnlhWGc2SUZOd1lYSnpaVTFoZEhKcGVFOWlhbVZqZEN3Z2JsSnZkM002SUc1MWJXSmxjaWtnZTF4dUlDQWdJR052Ym5OMElHVnRZbVZrV0NBOUlHNWxkeUJHYkc5aGRETXlRWEp5WVhrb2JsSnZkM01wTG1acGJHd29NQ2s3WEc0Z0lDQWdZMjl1YzNRZ1pXMWlaV1JaSUQwZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNodVVtOTNjeWt1Wm1sc2JDZ3dLVHRjYmlBZ0lDQmpiMjV6ZENCamJIVnpkR1Z5VFdGd09pQjdXMTg2SUc1MWJXSmxjbDA2SUc1MWJXSmxjbHRkZlNBOUlIdDlPMXh1SUNBZ0lHTnNkWE4wWlhKekxtWnZja1ZoWTJnb0tHTnNkWE4wWlhJc0lHa3BJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hZMngxYzNSbGNrMWhjRnRqYkhWemRHVnlYU2xjYmlBZ0lDQWdJQ0FnWTJ4MWMzUmxjazFoY0Z0amJIVnpkR1Z5WFNBOUlGdGRPMXh1SUNBZ0lDQWdZMngxYzNSbGNrMWhjRnRqYkhWemRHVnlYUzV3ZFhOb0tHa3BPMXh1SUNBZ0lIMHBPMXh1SUNBZ0lDOHZJR052Ym5OMElHNURiSFZ6ZEdWeWN5QTlJRTlpYW1WamRDNXJaWGx6S0dOc2RYTjBaWEpOWVhBcExteGxibWQwYUR0Y2JpQWdJQ0F2THlCamIyNXpkQ0J3WlhKU2IzY2dQU0JOWVhSb0xtWnNiMjl5S0UxaGRHZ3VjM0Z5ZENodVEyeDFjM1JsY25NcEtUdGNiaUFnSUNCc1pYUWdZMngxYzNSbGNrNTFiU0E5SURBN1hHNGdJQ0FnWTI5dWMzUWdjMjl5ZEdWa1EyeDFjM1JsY2s1aGJXVnpJRDBnVDJKcVpXTjBMbXRsZVhNb1kyeDFjM1JsY2sxaGNDazdYRzRnSUNBZ2MyOXlkR1ZrUTJ4MWMzUmxjazVoYldWekxuTnZjblFvS0dFc0lHSXBJRDArSUdOc2RYTjBaWEpOWVhCYllpQmhjeUJoYm5sZExteGxibWQwYUNBdElHTnNkWE4wWlhKTllYQmJZU0JoY3lCaGJubGRMbXhsYm1kMGFDazdYRzRnSUNBZ2JHVjBJSEJsY2xKdmR5QTlJRFk3WEc1Y2JpQWdJQ0JzWlhRZ2VVOW1abk5sZENBOUlEQTdYRzRnSUNBZ1kyOXVjM1FnYkdGNWIzVjBVMmw2WlNBOUlEVTdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmpiSFZ6ZEdWeVRtRnRaU0J2WmlCemIzSjBaV1JEYkhWemRHVnlUbUZ0WlhNcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdOc2RYTjBaWElnUFNCamJIVnpkR1Z5VFdGd1cyTnNkWE4wWlhKT1lXMWxJR0Z6SUdGdWVWMGhPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXMWlaV1JrYVc1bmN5QTlJR0YzWVdsMElHSnBiMHhoZVc5MWRDaGpiSFZ6ZEdWeUxDQnpjR0Z5YzJWTllYUnlhWGdzSURBdU1EQXhLVHRjYmlBZ0lDQWdJR2xtSUNoamJIVnpkR1Z5VG5WdElEMDlQU0JOWVhSb0xtTmxhV3dvY0dWeVVtOTNJQzhnTVM0MUtTa2dlMXh1SUNBZ0lDQWdJQ0JqYkhWemRHVnlUblZ0SUQwZ01EdGNiaUFnSUNBZ0lDQWdlVTltWm5ObGRDQXJQU0JzWVhsdmRYUlRhWHBsSUM4Z2NHVnlVbTkzTzF4dUlDQWdJQ0FnSUNCd1pYSlNiM2NnUFNCTllYUm9MbU5sYVd3b2NHVnlVbTkzSUNvZ01TNDFLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR052Ym5OMElHOW1abk5sZEZnZ1BTQW9LR05zZFhOMFpYSk9kVzBnSlNCd1pYSlNiM2NwSUNvZ2JHRjViM1YwVTJsNlpTQXZJSEJsY2xKdmR5a2dLaUF4TGpVN1hHNGdJQ0FnSUNBdkx5QmpiMjV6ZENCdlptWnpaWFJaSUQwZ1RXRjBhQzVtYkc5dmNpaGpiSFZ6ZEdWeVRuVnRJQzhnY0dWeVVtOTNLU0FxSURJN1hHNWNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daVzFpWldSa2FXNW5jeTVsYldKbFpGZ3ViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1pXMWlaV1JZVzJOc2RYTjBaWEpiYVYxZElEMGdaVzFpWldSa2FXNW5jeTVsYldKbFpGaGJhVjBnS2lCc1lYbHZkWFJUYVhwbElDOGdjR1Z5VW05M0lDc2diMlptYzJWMFdEdGNiaUFnSUNBZ0lDQWdaVzFpWldSWlcyTnNkWE4wWlhKYmFWMWRJRDBnWlcxaVpXUmthVzVuY3k1bGJXSmxaRmxiYVYwZ0tpQnNZWGx2ZFhSVGFYcGxJQzhnY0dWeVVtOTNJQ3NnZVU5bVpuTmxkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR05zZFhOMFpYSk9kVzByS3p0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIdGxiV0psWkZnc0lHVnRZbVZrV1gwN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElHMWxjbWRsUTJ4MWMzUmxjbk1vWTJ4MWMzUmxjbk02SUc1MWJXSmxjbHRkTENCcE9pQnVkVzFpWlhJc0lHbzZJRzUxYldKbGNpa2dlMXh1SUNBZ0lHTnZibk4wSUdsRGJIVnpkR1Z5SUQwZ1kyeDFjM1JsY25OYmFWMDdYRzRnSUNBZ1kyOXVjM1FnYWtOc2RYTjBaWElnUFNCamJIVnpkR1Z5YzF0cVhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcklEMGdNRHNnYXlBOElHTnNkWE4wWlhKekxteGxibWQwYURzZ2F5c3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb1kyeDFjM1JsY25OYmExMGdQVDA5SUdwRGJIVnpkR1Z5S1Z4dUlDQWdJQ0FnSUNCamJIVnpkR1Z5YzF0clhTQTlJR2xEYkhWemRHVnlPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQndkV0pzYVdNZ1lYTnphV2R1UTJ4MWMzUmxjbk1vYzNCaGNuTmxUV0YwY21sNE9pQlRjR0Z5YzJWTllYUnlhWGhQWW1wbFkzUXNJRzVTYjNkek9pQnVkVzFpWlhJcElIdGNiaUFnSUNCc1pYUWdZMngxYzNSbGNrNTFiU0E5SURBN1hHNGdJQ0FnWTI5dWMzUWdhWE02SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1FnYW5NNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lDQWdZMjl1YzNRZ2IzSmtaWElnUFNCTllYUm9MbVpzYjI5eUtFMWhkR2d1YldGNEtFMWhkR2d1Ykc5bk1UQW9ibEp2ZDNNcExDQXlLU2tnS3lBeE8xeHVJQ0FnSUdOdmJuTjBJRzFwYms5eVpHVnlJRDBnVFdGMGFDNXdiM2NvTVRBc0lHOXlaR1Z5S1R0Y2JpQWdJQ0JqYjI1emRDQmpiSFZ6ZEdWeWN6b2diblZ0WW1WeVcxMGdQU0J1WlhjZ1FYSnlZWGtvYmxKdmQzTXBMbVpwYkd3b0xURXBPMXh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdhU0J2WmlCUFltcGxZM1F1YTJWNWN5aHpjR0Z5YzJWTllYUnlhWGdwS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR052Ym5OMElHb2diMllnVDJKcVpXTjBMbXRsZVhNb2MzQmhjbk5sVFdGMGNtbDRXMmtnWVhNZ1lXNTVYU2twSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLRTFoZEdndWNtOTFibVFvYzNCaGNuTmxUV0YwY21sNFcya2dZWE1nWVc1NVhWdHFJR0Z6SUdGdWVWMGdLaUJ0YVc1UGNtUmxjaWtnTHlCdGFXNVBjbVJsY2lBK0lEQWdKaVpjYmlBZ0lDQWdJQ0FnSUNCemNHRnljMlZOWVhSeWFYaGJhU0JoY3lCaGJubGRXMm9nWVhNZ1lXNTVYU0FoUFQwZ1RuVnRZbVZ5S0drcElDWW1JRTUxYldKbGNpaHFLU0ErSUU1MWJXSmxjaWhwS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x6TG5CMWMyZ29UblZ0WW1WeUtHa3BLVHRjYmlBZ0lDQWdJQ0FnSUNCcWN5NXdkWE5vS0U1MWJXSmxjaWhxS1NrN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dOc2RYTjBaWEp6VzA1MWJXSmxjaWhwS1YwZ0lUMDlJQzB4SUNZbUlHTnNkWE4wWlhKelcwNTFiV0psY2locUtWMGdJVDA5SUMweEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMngxYzNSbGNuTmJUblZ0WW1WeUtHa3BYU0FoUFQwZ1kyeDFjM1JsY25OYlRuVnRZbVZ5S0dvcFhTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV0WlhKblpVTnNkWE4wWlhKektHTnNkWE4wWlhKekxDQk9kVzFpWlhJb2FTa3NJRTUxYldKbGNpaHFLU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiSFZ6ZEdWeWMxdE9kVzFpWlhJb2FTbGRJQ0U5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyeDFjM1JsY25OYlRuVnRZbVZ5S0dvcFhTQTlJR05zZFhOMFpYSnpXMDUxYldKbGNpaHBLVjA3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiSFZ6ZEdWeWMxdE9kVzFpWlhJb2FpbGRJQ0U5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyeDFjM1JsY25OYlRuVnRZbVZ5S0drcFhTQTlJR05zZFhOMFpYSnpXMDUxYldKbGNpaHFLVjA3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSk9kVzByS3p0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSnpXMDUxYldKbGNpaHBLVjBnUFNCamJIVnpkR1Z5VG5WdE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJ4MWMzUmxjbk5iVG5WdFltVnlLR29wWFNBOUlHTnNkWE4wWlhKT2RXMDdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR1p2Y2lBb2JHVjBJR2s5TURzZ2FTQThJR05zZFhOMFpYSnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9ZMngxYzNSbGNuTmJhVjBnUFQwOUlDMHhLU0I3WEc0Z0lDQWdJQ0FnSUdOc2RYTjBaWEpPZFcwZ0t5czdYRzRnSUNBZ0lDQWdJR05zZFhOMFpYSnpXMmxkSUQwZ1kyeDFjM1JsY2s1MWJUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSHRqYkhWemRHVnljeXdnYVhNNklHNWxkeUJWYVc1ME16SkJjbkpoZVNocGN5a3NJR3B6T2lCdVpYY2dWV2x1ZERNeVFYSnlZWGtvYW5NcGZUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCellXMWxJR0Z6SUdGemMybG5iaUJqYkhWemRHVnljeUJpZFhRZ2QyOXlhMmx1WnlCdmJpQjBhR1VnYkdWMlpXd2diMllnUTFOU0lHWnZjbTFoZENCeVpYUjFjbTVsWkNCbWNtOXRJSGRsWWtkUVZTQXFMMXh1SUNCd2NtbDJZWFJsSUdGemMybG5ia05zZFhOMFpYSnpRMU5TS0cxamJGSmxjem9nVFVOTVQzQlNaWFIxY201VWVYQmxMQ0J1VW05M2N6b2diblZ0WW1WeUtTQjdYRzRnSUNBZ2JHVjBJR05zZFhOMFpYSk9kVzBnUFNBd08xeHVJQ0FnSUdOdmJuTjBJR2x6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNBZ0lHTnZibk4wSUdwek9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElHOXlaR1Z5SUQwZ1RXRjBhQzVtYkc5dmNpaE5ZWFJvTG0xaGVDaE5ZWFJvTG14dlp6RXdLRzVTYjNkektTd2dNaWtwSUNzZ01UdGNiaUFnSUNCamIyNXpkQ0J0YVc1UGNtUmxjaUE5SURFZ0x5Qk5ZWFJvTG5CdmR5Z3hNQ3dnYjNKa1pYSXBPMXh1SUNBZ0lHTnZibk4wSUdOc2RYTjBaWEp6T2lCdWRXMWlaWEpiWFNBOUlHNWxkeUJCY25KaGVTaHVVbTkzY3lrdVptbHNiQ2d0TVNrN1hHNGdJQ0FnWTI5dWMzUWdZMjl5Y21WamRHVmtUMlptYzJWMGN5QTlJRzVsZHlCVmFXNTBNekpCY25KaGVTaHVVbTkzY3lBcklERXBPMXh1SUNBZ0lHeGxkQ0J2Wm1aelpYUkRiM1Z1ZEdWeUlEMGdNRHRjYmlBZ0lDQmpiM0p5WldOMFpXUlBabVp6WlhSeld6QmRJRDBnTUR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1U2IzZHpPeUJwS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHc2dQU0J0WTJ4U1pYTXVhVzVrWlhoUFptWnpaWFJ6VzJsZE95QnJJRHdnYldOc1VtVnpMbWx1WkdWNFQyWm1jMlYwYzF0cElDc2dNVjA3SUdzckt5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnFJRDBnYldOc1VtVnpMa3RPVGtsdVpHVjRaWE5iYTEwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hxSUR3OUlHa2dmSHdnYldOc1VtVnpMa3RPVGxOcGJXbHNZWEpwZEdsbGMxdHJYU0E4UFNCdGFXNVBjbVJsY2lsY2JpQWdJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lDQWdhWE11Y0hWemFDaHBLVHRjYmlBZ0lDQWdJQ0FnYW5NdWNIVnphQ2hxS1R0Y2JpQWdJQ0FnSUNBZ2IyWm1jMlYwUTI5MWJuUmxjaXNyTzF4dUlDQWdJQ0FnSUNCcFppQW9ZMngxYzNSbGNuTmJhVjBnSVQwOUlDMHhJQ1ltSUdOc2RYTjBaWEp6VzJwZElDRTlQU0F0TVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoamJIVnpkR1Z5YzF0cFhTQWhQVDBnWTJ4MWMzUmxjbk5iYWwwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtMWxjbWRsUTJ4MWMzUmxjbk1vWTJ4MWMzUmxjbk1zSUdrc0lHb3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOc2RYTjBaWEp6VzJsZElDRTlQU0F0TVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSnpXMnBkSUQwZ1kyeDFjM1JsY25OYmFWMDdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJ4MWMzUmxjbk5iYWwwZ0lUMDlJQzB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMngxYzNSbGNuTmJhVjBnUFNCamJIVnpkR1Z5YzF0cVhUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JqYkhWemRHVnlUblZ0S3lzN1hHNGdJQ0FnSUNBZ0lDQWdZMngxYzNSbGNuTmJhVjBnUFNCamJIVnpkR1Z5VG5WdE8xeHVJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSnpXMnBkSUQwZ1kyeDFjM1JsY2s1MWJUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl5Y21WamRHVmtUMlptYzJWMGMxdHBJQ3NnTVYwZ1BTQnZabVp6WlhSRGIzVnVkR1Z5TzF4dUlDQWdJSDFjYmlBZ0lDQm1iM0lnS0d4bGRDQnBQVEE3SUdrZ1BDQmpiSFZ6ZEdWeWN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTnNkWE4wWlhKelcybGRJRDA5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdJQ0JqYkhWemRHVnlUblZ0SUNzck8xeHVJQ0FnSUNBZ0lDQmpiSFZ6ZEdWeWMxdHBYU0E5SUdOc2RYTjBaWEpPZFcwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjdZMngxYzNSbGNuTXNJR2x6T2lCdVpYY2dWV2x1ZERNeVFYSnlZWGtvYVhNcExDQnFjem9nYm1WM0lGVnBiblF6TWtGeWNtRjVLR3B6S1N3Z1kyOXljbVZqZEdWa1QyWm1jMlYwYzMwN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2RHOVBZbXBsWTNSR2IzSnRLSE53WVhKelpVMWhkSEpwZURvZ1UzQmhjbk5sVFdGMGNtbDRVbVZ6ZFd4MEtUb2dVM0JoY25ObFRXRjBjbWw0VDJKcVpXTjBJSHRjYmlBZ0lDQmpiMjV6ZENCemNHRnljMlZQWW1wbFkzUTZJSHRiWHpvZ2JuVnRZbVZ5WFRvZ2UxdGZPaUJ1ZFcxaVpYSmRPaUJ1ZFcxaVpYSjlmU0E5SUh0OU8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MzQmhjbk5sVFdGMGNtbDRMbWt1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2doYzNCaGNuTmxUMkpxWldOMFczTndZWEp6WlUxaGRISnBlQzVwVzJsZFhTbGNiaUFnSUNBZ0lDQWdjM0JoY25ObFQySnFaV04wVzNOd1lYSnpaVTFoZEhKcGVDNXBXMmxkWFNBOUlIdDlPMXh1SUNBZ0lDQWdjM0JoY25ObFQySnFaV04wVzNOd1lYSnpaVTFoZEhKcGVDNXBXMmxkWFZ0emNHRnljMlZOWVhSeWFYZ3VhbHRwWFYwZ1BTQXhJQzBnYzNCaGNuTmxUV0YwY21sNExtUnBjM1JoYm1ObFcybGRPMXh1SUNBZ0lDQWdhV1lnS0NGemNHRnljMlZQWW1wbFkzUmJjM0JoY25ObFRXRjBjbWw0TG1wYmFWMWRLVnh1SUNBZ0lDQWdJQ0J6Y0dGeWMyVlBZbXBsWTNSYmMzQmhjbk5sVFdGMGNtbDRMbXBiYVYxZElEMGdlMzA3WEc0Z0lDQWdJQ0J6Y0dGeWMyVlBZbXBsWTNSYmMzQmhjbk5sVFdGMGNtbDRMbXBiYVYxZFczTndZWEp6WlUxaGRISnBlQzVwVzJsZFhTQTlJREVnTFNCemNHRnljMlZOWVhSeWFYZ3VaR2x6ZEdGdVkyVmJhVjA3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCemNHRnljMlZQWW1wbFkzUTdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJR0ZrWkV4dmIzQnpLSE53WVhKelpVOWlhbVZqZERvZ1UzQmhjbk5sVFdGMGNtbDRUMkpxWldOMExDQnVVbTkzY3pvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVVtOTNjenNnYVNzcktTQjdYRzRnSUNBZ0lDQnBaaUFvSVhOd1lYSnpaVTlpYW1WamRGdHBYU2xjYmlBZ0lDQWdJQ0FnYzNCaGNuTmxUMkpxWldOMFcybGRJRDBnZTMwN1hHNGdJQ0FnSUNCemNHRnljMlZQWW1wbFkzUmJhVjFiYVYwZ1BTQjBhR2x6TGw5dmNIUnBiMjV6TG0xMWJIUkdZV04wYjNJN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCdWIzSnRZV3hwZW1Vb2MzQmhjbk5sVDJKcVpXTjBPaUJUY0dGeWMyVk5ZWFJ5YVhoUFltcGxZM1FwSUh0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUdrZ2IyWWdUMkpxWldOMExtdGxlWE1vYzNCaGNuTmxUMkpxWldOMEtTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2NtOTNJRDBnYzNCaGNuTmxUMkpxWldOMFcya2dZWE1nWVc1NVhUdGNiaUFnSUNBZ0lHeGxkQ0J6ZFcwZ1BTQXdPMXh1SUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JxSUc5bUlFOWlhbVZqZEM1clpYbHpLSEp2ZHlrcFhHNGdJQ0FnSUNBZ0lITjFiU0FyUFNCeWIzZGJhaUJoY3lCaGJubGRPMXh1SUNBZ0lDQWdhV1lnS0hOMWJTQTlQVDBnTUNrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCbWIzSWdLR052Ym5OMElHb2diMllnVDJKcVpXTjBMbXRsZVhNb2NtOTNLU2xjYmlBZ0lDQWdJQ0FnYzNCaGNuTmxUMkpxWldOMFcya2dZWE1nWVc1NVhWdHFJR0Z6SUdGdWVWMGdMejBnYzNWdE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ1pYaHdZVzVrS0hOd1lYSnpaVTlpYW1WamREb2dVM0JoY25ObFRXRjBjbWw0VDJKcVpXTjBMQ0J1VW05M2N6b2diblZ0WW1WeUtTQjdYRzRnSUNBZ1kyOXVjM1FnWlhod1lXNWtaV1JQWW1wbFkzUTZJRk53WVhKelpVMWhkSEpwZUU5aWFtVmpkQ0E5SUh0OU8xeHVJQ0FnSUdOdmJuTjBJRzl5WkdWeUlEMGdUV0YwYUM1bWJHOXZjaWhOWVhSb0xtMWhlQ2hOWVhSb0xteHZaekV3S0c1U2IzZHpLU3dnTWlrcElDc2dNVHRjYmlBZ0lDQmpiMjV6ZENCdGFXNVBjbVJsY2lBOUlFMWhkR2d1Y0c5M0tERXdMQ0J2Y21SbGNpazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVVbTkzY3pzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lYTndZWEp6WlU5aWFtVmpkRnRwWFNsY2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBdkx5QmpiMjV6ZENCeWIzY2dQU0J6Y0dGeWMyVlBZbXBsWTNSYmFWMDdYRzRnSUNBZ0lDQmxlSEJoYm1SbFpFOWlhbVZqZEZ0cFhTQS9QejBnZTMwN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdhVHNnYWlBOElHNVNiM2R6T3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnpjR0Z5YzJWUFltcGxZM1JiYVYwL0xsdHFYU2xjYmlBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZG1Gc0lEMGdkR2hwY3k1blpYUkZlSEJoYm1SV1lXeDFaU2h6Y0dGeWMyVlBZbXBsWTNRc0lHa3NJR29wT3lBdkwzQnlkVzVwYm1jZ2MzUmxjRnh1SUNBZ0lDQWdJQ0JwWmlBb1RXRjBhQzV5YjNWdVpDaDJZV3dnS2lCdGFXNVBjbVJsY2lrZ0x5QnRhVzVQY21SbGNpQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxlSEJoYm1SbFpFOWlhbVZqZEZ0cFhWdHFYU0E5SUhaaGJEdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lXVjRjR0Z1WkdWa1QySnFaV04wVzJwZEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnWlhod1lXNWtaV1JQWW1wbFkzUmJhbDBnUFNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0JsZUhCaGJtUmxaRTlpYW1WamRGdHFYVnRwWFNBOUlIWmhiRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1pYaHdZVzVrWldSUFltcGxZM1E3WEc0Z0lIMWNibHh1SUNBdkx5QndjbWwyWVhSbElIQnlkVzVsS0hKdmR6b2dVM0JoY25ObFRXRjBjbWw0VDJKcVpXTjBXMjUxYldKbGNsMHBJSHRjYmx4dUlDQXZMeUI5WEc1Y2JpQWdjSEpwZG1GMFpTQnBibVpzWVhSbEtITndZWEp6WlU5aWFtVmpkRG9nVTNCaGNuTmxUV0YwY21sNFQySnFaV04wS1NCN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCcElHOW1JRTlpYW1WamRDNXJaWGx6S0hOd1lYSnpaVTlpYW1WamRDa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElISnZkeUE5SUhOd1lYSnpaVTlpYW1WamRGdHBJR0Z6SUdGdWVWMDdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR29nYjJZZ1QySnFaV04wTG10bGVYTW9jbTkzS1NsY2JpQWdJQ0FnSUNBZ2MzQmhjbk5sVDJKcVpXTjBXMmtnWVhNZ1lXNTVYVnRxSUdGeklHRnVlVjBnUFNCTllYUm9MbkJ2ZHloemNHRnljMlZQWW1wbFkzUmJhU0JoY3lCaGJubGRXMm9nWVhNZ1lXNTVYU3dnZEdocGN5NWZiM0IwYVc5dWN5NXBibVpzWVhSbFJtRmpkRzl5S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdkbGRFVjRjR0Z1WkZaaGJIVmxLSE53WVhKelpVOWlhbVZqZERvZ1UzQmhjbk5sVFdGMGNtbDRUMkpxWldOMExDQnBPaUJoYm5rc0lHbzZJR0Z1ZVNrZ2UxeHVJQ0FnSUd4bGRDQjJZV3dnUFNBd08xeHVJQ0FnSUdOdmJuTjBJR04xY25KbGJuUkpibVJsZUdWeklEMGdUMkpxWldOMExtdGxlWE1vYzNCaGNuTmxUMkpxWldOMFcybGRJRDgvSUh0OUtUdGNiaUFnSUNCamIyNXpkQ0J2ZEdobGNrbHVaR1Y0WlhNZ1BTQlBZbXBsWTNRdWEyVjVjeWh6Y0dGeWMyVlBZbXBsWTNSYmFsMGdQejhnZTMwcE8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2F5QnZaaUJqZFhKeVpXNTBTVzVrWlhobGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0c5MGFHVnlTVzVrWlhobGN5NXBibU5zZFdSbGN5aHJLU2xjYmlBZ0lDQWdJQ0FnZG1Gc0lDczlJSE53WVhKelpVOWlhbVZqZEZ0cFhWdHJJR0Z6SUdGdWVWMGdLaUJ6Y0dGeWMyVlBZbXBsWTNSYmFsMWJheUJoY3lCaGJubGRPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZG1Gc08xeHVJQ0I5WEc1OVhHNWNiaUpkZlE9PSIsImV4cG9ydCBjb25zdCBNQ0xNZXRob2ROYW1lID0gJ01DTCc7XG5leHBvcnQgY29uc3QgTUNMX09QVElPTlNfVEFHID0gJ01DTF9PUFRJT05TJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaWE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRlpRU3hOUVVGTkxFTkJRVU1zVFVGQlRTeGhRVUZoTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCWlc1RExFMUJRVTBzUTBGQlF5eE5RVUZOTEdWQlFXVXNSMEZCUnl4aFFVRmhMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UwUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSOUlHWnliMjBnSnk0dUwyUnBjM1JoYm1ObExXMWhkSEpwZUM5MGVYQmxjeWM3WEc1cGJYQnZjblFnZTB0dWIzZHVUV1YwY21samMzMGdabkp2YlNBbkxpNHZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUUxRFRFOXdkR2x2Ym5NZ1BTQjdYRzRnSUNBZ1pYaHdZVzVrUm1GamRHOXlPaUJ1ZFcxaVpYSXNYRzRnSUNBZ2JXRjRTWFJsY21GMGFXOXVjem9nYm5WdFltVnlMRnh1SUNBZ0lHbHVabXhoZEdWR1lXTjBiM0k2SUc1MWJXSmxjaXhjYmlBZ0lDQnRkV3gwUm1GamRHOXlPaUJ1ZFcxaVpYSXNYRzU5WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRk53WVhKelpVMWhkSEpwZUU5aWFtVmpkQ0E5SUh0Ylh6b2diblZ0WW1WeVhUb2dlMXRmT2lCdWRXMWlaWEpkT2lCdWRXMWlaWEo5ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUUxRFRFMWxkR2h2WkU1aGJXVWdQU0FuVFVOTUp6dGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1RVTk1VMlZ5YVdGc2FYcGhZbXhsVDNCMGFXOXVjeUE5SUh0Y2JpQWdJQ0JqYjJ4ek9pQnpkSEpwYm1kYlhUdGNiaUFnSUNCdFpYUnlhV056T2lCTGJtOTNiazFsZEhKcFkzTmJYVHRjYmlBZ0lDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhUdGNiaUFnSUNCaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkRvZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkR0Y2JpQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM002SUNoemRISnBibWNnZkNCdWRXeHNJSHdnZFc1a1pXWnBibVZrS1Z0ZE8xeHVJQ0FnSUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqUVhKbmN6b2dZVzU1VzEwN1hHNGdJQ0FnZEdoeVpYTm9iMnhrT2lCdWRXMWlaWEk3WEc0Z0lDQWdiV0Y0U1hSbGNtRjBhVzl1Y3pvZ2JuVnRZbVZ5TzF4dUlDQWdJSFZ6WlZkbFlrZFFWVG9nWW05dmJHVmhianRjYmlBZ0lDQnBibVpzWVhSbE9pQnVkVzFpWlhJN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQk5RMHhmVDFCVVNVOU9VMTlVUVVjZ1BTQW5UVU5NWDA5UVZFbFBUbE1uTzF4dUlsMTkiLCJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRElNX1JFRF9QUkVQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBRywgU1VQUE9SVEVEX0RJU1RBTkNFX0ZVTkNUSU9OU19UQUcsIFNVUFBPUlRFRF9TRU1UWVBFU19UQUcsIFNVUFBPUlRFRF9UWVBFU19UQUcsIFNVUFBPUlRFRF9VTklUU19UQUcgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQgeyBUU05FT3B0aW9ucywgVU1BUE9wdGlvbnMgfSBmcm9tICcuLi9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBEaW1SZWR1Y3Rpb25NZXRob2RzIH0gZnJvbSAnLi4vbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBNQ0xNZXRob2ROYW1lIH0gZnJvbSAnLi4vTUNMJztcbmV4cG9ydCBjb25zdCBTRVFfQ09MX05BTUVTID0ge1xuICAgIFtERy5TRU1UWVBFLk1PTEVDVUxFXTogJ01vbGVjdWxlcycsXG4gICAgW0RHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRV06ICdTZXF1ZW5jZXMnXG59O1xuZXhwb3J0IGNsYXNzIERCU2Nhbk9wdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmVwc2lsb24gPSB7XG4gICAgICAgICAgICB1aU5hbWU6ICdFcHNpbG9uJywgdmFsdWU6IDAuMDEsIHRvb2x0aXA6ICdNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gY2x1c3RlciBwb2ludHMnLCBtaW46IDAsIG1heDogMiwgc3RlcDogMC4wMDVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5taW5QdHMgPSB7XG4gICAgICAgICAgICB1aU5hbWU6ICdNaW5pbXVtIHBvaW50cycsIHZhbHVlOiA0LCB0b29sdGlwOiAnTWluaW11bSBudW1iZXIgb2YgcG9pbnRzIGluIGNsdXN0ZXInLCBtaW46IDEsIG1heDogMTAwMCwgc3RlcDogMVxuICAgICAgICB9O1xuICAgIH1cbiAgICA7XG59XG5leHBvcnQgY2xhc3MgRGltUmVkdWN0aW9uQmFzZUVkaXRvciB7XG4gICAgZ2V0IGFsZ29yaXRobU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGFsZ29yaXRobVBhcmFtcyA9IHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhhbGdvcml0aG1QYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFsZ29yaXRobVBhcmFtc1trZXldLnZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgb3B0aW9uc1trZXldID0gYWxnb3JpdGhtUGFyYW1zW2tleV0udmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IGRiU2Nhbk9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYlNjYW5FcHNpbG9uOiB0aGlzLmRiU2NhblBhcmFtcy5lcHNpbG9uLnZhbHVlID8/IDAuMDEsXG4gICAgICAgICAgICBkYlNjYW5NaW5QdHM6IHRoaXMuZGJTY2FuUGFyYW1zLm1pblB0cy52YWx1ZSA/PyA0XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGVkaXRvclNldHRpbmdzID0ge30pIHtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXR0aW5ncyA9IHt9O1xuICAgICAgICB0aGlzLnBsb3RFbWJlZGRpbmdzSW5wdXQgPSB1aS5ib29sSW5wdXQoJ1Bsb3QgZW1iZWRkaW5ncycsIHRydWUpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQgPSB1aS5ib29sSW5wdXQoJ0NsdXN0ZXIgZW1iZWRkaW5ncycsIHRydWUpO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCA9IG51bGw7XG4gICAgICAgIHRoaXMubWV0aG9kcyA9IFtEaW1SZWR1Y3Rpb25NZXRob2RzLlVNQVAsIERpbVJlZHVjdGlvbk1ldGhvZHMuVF9TTkVdO1xuICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcCA9IHt9O1xuICAgICAgICB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmF2YWlsYWJsZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0RpdiA9IHVpLmlucHV0cyhbXSk7XG4gICAgICAgIHRoaXMuZGJTY2FuU2V0dGluZ3NEaXYgPSB1aS5pbnB1dHMoW10pO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYgPSB1aS5pbnB1dHMoW10pO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzID0ge307XG4gICAgICAgIHRoaXMubWV0aG9kc1BhcmFtcyA9IHtcbiAgICAgICAgICAgIFtEaW1SZWR1Y3Rpb25NZXRob2RzLlVNQVBdOiBuZXcgVU1BUE9wdGlvbnMoKSxcbiAgICAgICAgICAgIFtEaW1SZWR1Y3Rpb25NZXRob2RzLlRfU05FXTogbmV3IFRTTkVPcHRpb25zKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYlNjYW5QYXJhbXMgPSBuZXcgREJTY2FuT3B0aW9ucygpO1xuICAgICAgICB0aGlzLmVkaXRvclNldHRpbmdzID0gZWRpdG9yU2V0dGluZ3M7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLmVuYWJsZU1DTClcbiAgICAgICAgICAgIHRoaXMubWV0aG9kcy5wdXNoKE1DTE1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBwcmVwb3JjZXNzaW5nRnVuY3MgPSBERy5GdW5jLmZpbmQoeyB0YWdzOiBbRElNX1JFRF9QUkVQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBR10gfSk7XG4gICAgICAgIC8vIG1hcCB0aGF0IGNvbnRhaW5zIGFsbCBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9ucyBhbmQgdGhlaXIgbWV0YWRhdGFcbiAgICAgICAgcHJlcG9yY2Vzc2luZ0Z1bmNzLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbVR5cGVzID0gZi5vcHRpb25zLmdldChTVVBQT1JURURfU0VNVFlQRVNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmLmZyaWVuZGx5TmFtZSA/PyBmLm5hbWU7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1RZUEVTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1VOSVRTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZ1bmN0aW9ucyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX0RJU1RBTkNFX0ZVTkNUSU9OU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3Muc2VtdHlwZSAmJiAhc2VtVHlwZXMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy5zZW10eXBlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy50eXBlICYmICF0eXBlcy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnR5cGUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLnVuaXRzICYmICF1bml0cy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnVuaXRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmLFxuICAgICAgICAgICAgICAgIHNlbVR5cGVzOiBzZW1UeXBlcyA/IHNlbVR5cGVzLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB0eXBlczogdHlwZXMgPyB0eXBlcy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgdW5pdHM6IHVuaXRzID8gdW5pdHMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRnVuY3Rpb25zOiBkaXN0YW5jZUZ1bmN0aW9ucyA/IGRpc3RhbmNlRnVuY3Rpb25zLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYmxlSW5wdXQgPSB1aS50YWJsZUlucHV0KCdUYWJsZScsIGdyb2suc2hlbGwudHYuZGF0YUZyYW1lLCBncm9rLnNoZWxsLnRhYmxlcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRhYmxlSW5wdXRDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVJbnB1dENoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5yZWdlbmVyYXRlQ29sSW5wdXQoKTtcbiAgICAgICAgdGhpcy5vbkNvbHVtbklucHV0Q2hhbmdlZCgpO1xuICAgICAgICBsZXQgc2V0dGluZ3NPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGRiU2NhblNldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWV0aG9kSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnTWV0aG9kJywgRGltUmVkdWN0aW9uTWV0aG9kcy5VTUFQLCB0aGlzLm1ldGhvZHMsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsIHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHtcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbmVkID0gIXNldHRpbmdzT3BlbmVkO1xuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB1aS5lbXB0eSh0aGlzLm1ldGhvZFNldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsIHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0sICdNb2RpZnkgbWV0aG9kcyBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMuZGJTY2FuU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoKCkgPT4ge1xuICAgICAgICAgICAgZGJTY2FuU2V0dGluZ3NPcGVuZWQgPSAhZGJTY2FuU2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgICAgICBpZiAoIWRiU2NhblNldHRpbmdzT3BlbmVkKVxuICAgICAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMuZGJTY2FuU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYodGhpcy5kYlNjYW5TZXR0aW5nc0RpdiwgdGhpcy5kYlNjYW5QYXJhbXMpO1xuICAgICAgICB9LCAnTW9kaWZ5IGNsdXN0ZXJpbmcgcGFyYW1ldGVycycpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQuY2xhc3NMaXN0LmFkZCgnbWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCcpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMuZGJTY2FuU2V0dGluZ3NJY29uKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LnByZXBlbmQodGhpcy5tZXRob2RTZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2ID0gdWkuaW5wdXRzKFtdKTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbdGhpcy5jb2xJbnB1dC52YWx1ZS5uYW1lXTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dCA9IHVpLmNob2ljZUlucHV0KCdFbmNvZGluZyBmdW5jdGlvbicsIGZ1bmN0aW9uc1swXSwgZnVuY3Rpb25zLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGZsYWdQZmkgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCkge1xuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QgPSB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3Q7XG4gICAgICAgICAgICBmbGFnUGZpID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZsYWdQZmkpIHtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290KTtcbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChjaGlsZCkgPT4gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QuYXBwZW5kKGNoaWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QuY2xhc3NMaXN0LmFkZCgnbWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCcpO1xuICAgICAgICBsZXQgcHJlcHJvY2Vzc2luZ1NldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24gPSB1aS5pY29ucy5zZXR0aW5ncyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByZXByb2Nlc3NpbmdTZXR0aW5nc09wZW5lZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlUHJlcHJvY2Vzc2luZ0Z1bmNQYXJhbXNEaXYodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2LCB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1t0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnZhbHVlXS5mdW5jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVwcm9jZXNzaW5nU2V0dGluZ3NPcGVuZWQgPSAhcHJlcHJvY2Vzc2luZ1NldHRpbmdzT3BlbmVkO1xuICAgICAgICB9LCAnTW9kaWZ5IGVuY29kaW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMnKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QucHJlcGVuZCh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uKTtcbiAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnU2ltaWxhcml0eScsICcnLCBbXSwgbnVsbCk7XG4gICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Lm51bGxhYmxlID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290KVxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290ID0gdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQucm9vdDtcbiAgICAgICAgdGhpcy5vblByZXByb2Nlc3NpbmdGdW5jdGlvbkNoYW5nZWQoKTtcbiAgICB9XG4gICAgZ2V0Q29sSW5wdXQoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0U3VwcG9ydGVkQ29sdW1uID0gdGhpcy50YWJsZUlucHV0LnZhbHVlPy5jb2x1bW5zLnRvTGlzdCgpXG4gICAgICAgICAgICAuZmluZCgoY29sKSA9PiAhIXRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSkgPz8gbnVsbDtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5jb2x1bW5JbnB1dCgnQ29sdW1uJywgdGhpcy50YWJsZUlucHV0LnZhbHVlLCBmaXJzdFN1cHBvcnRlZENvbHVtbiwgKCkgPT4gdGhpcy5vbkNvbHVtbklucHV0Q2hhbmdlZCgpLCB7IGZpbHRlcjogKGNvbCkgPT4gISF0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0gfSk7XG4gICAgICAgIGlmICghdGhpcy5jb2xJbnB1dFJvb3QpXG4gICAgICAgICAgICB0aGlzLmNvbElucHV0Um9vdCA9IGlucHV0LnJvb3Q7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmVnZW5lcmF0ZUNvbElucHV0KCkge1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jb2xJbnB1dFJvb3QpIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5jb2xJbnB1dFJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sSW5wdXQgPSB0aGlzLmdldENvbElucHV0KCk7XG4gICAgICAgIGlmIChmbGFnKVxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmNvbElucHV0LnJvb3QuY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLmNvbElucHV0Um9vdC5hcHBlbmQoY2hpbGQpKTtcbiAgICAgICAgdGhpcy5vbkNvbHVtbklucHV0Q2hhbmdlZCgpO1xuICAgIH1cbiAgICBvblRhYmxlSW5wdXRDaGFuZ2VkKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudGFibGVJbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHZhbHVlLmNvbHVtbnMudG9MaXN0KCk7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucykuZm9yRWFjaCgoZnVuY05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS5zZW1UeXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS50eXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0cyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS51bml0cztcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlU3VwcG9ydGVkID0gIXNlbVR5cGVzLmxlbmd0aCB8fCAoY29sLnNlbVR5cGUgJiYgc2VtVHlwZXMuaW5jbHVkZXMoY29sLnNlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlU3Vwb3J0ZWQgPSAhdHlwZXMubGVuZ3RoIHx8IHR5cGVzLmluY2x1ZGVzKGNvbC50eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0c1N1cHBvcnRlZCA9ICF1bml0cy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUykgJiYgdW5pdHMuaW5jbHVkZXMoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSkpO1xuICAgICAgICAgICAgICAgIGlmIChzZW1UeXBlU3VwcG9ydGVkICYmIHR5cGVTdXBvcnRlZCAmJiB1bml0c1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0ucHVzaChmdW5jTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2VuZXJhdGVDb2xJbnB1dCgpO1xuICAgIH1cbiAgICBvbkNvbHVtbklucHV0Q2hhbmdlZCgpIHtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5jb2xJbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCFjb2wpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFByZXByb2Nlc3NpbmdGdW5jdGlvbnMgPSB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV07XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnUHJlcHJvY2Vzc2luZyBmdW5jdGlvbicsIHN1cHBvcnRlZFByZXByb2Nlc3NpbmdGdW5jdGlvbnNbMF0sIHN1cHBvcnRlZFByZXByb2Nlc3NpbmdGdW5jdGlvbnMsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25QcmVwcm9jZXNzaW5nRnVuY3Rpb25DaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290KSB7XG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdDtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmxhZykge1xuICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QpO1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3QuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdC5hcHBlbmQoY2hpbGQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBvblByZXByb2Nlc3NpbmdGdW5jdGlvbkNoYW5nZWQoKSB7XG4gICAgICAgIHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdik7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgY29uc3QgZk5hbWUgPSB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnZhbHVlO1xuICAgICAgICBjb25zdCBkaXN0YW5jZUZzID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbZk5hbWVdLmRpc3RhbmNlRnVuY3Rpb25zO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZU1ldHJpY3MgPSBbLi4uZGlzdGFuY2VGc107XG4gICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ1NpbWlsYXJpdHknLCB0aGlzLmF2YWlsYWJsZU1ldHJpY3NbMF0sIHRoaXMuYXZhaWxhYmxlTWV0cmljcywgbnVsbCk7XG4gICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Lm51bGxhYmxlID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290KVxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290ID0gdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQucm9vdDtcbiAgICAgICAgdWkuZW1wdHkodGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290KTtcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QuYXBwZW5kKGNoaWxkKSk7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbZk5hbWVdLmZ1bmMuaW5wdXRzLmxlbmd0aCA8IDMpXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVBbGdvcml0aG1TZXR0aW5nc0RpdihwYXJhbXNGb3JtLCBwYXJhbXMpIHtcbiAgICAgICAgdWkuZW1wdHkocGFyYW1zRm9ybSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2l0XTtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gcGFyYW0udHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgICAgIHVpLnN0cmluZ0lucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUgPz8gJycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSA6IHBhcmFtLnR5cGUgPT09ICdib29sZWFuJyA/XG4gICAgICAgICAgICAgICAgdWkuYm9vbElucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUgPz8gZmFsc2UsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSA6XG4gICAgICAgICAgICAgICAgdWkuZmxvYXRJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJhbXNGb3JtLmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgICAgIGlmIChwYXJhbS5kaXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuYmluZChpbnB1dC5pbnB1dCA/PyBpbnB1dC5yb290LCBwYXJhbS5kaXNhYmxlVG9vbHRpcCA/PyAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1aS50b29sdGlwLmJpbmQoaW5wdXQuaW5wdXQgPz8gaW5wdXQucm9vdCwgcGFyYW0udG9vbHRpcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyYW1zRm9ybTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlUHJlcHJvY2Vzc2luZ0Z1bmNQYXJhbXNEaXYocGFyYW1zRm9ybSwgZnVuYykge1xuICAgICAgICB1aS5lbXB0eShwYXJhbXNGb3JtKTtcbiAgICAgICAgaWYgKGZ1bmMuaW5wdXRzLmxlbmd0aCA8IDMpXG4gICAgICAgICAgICByZXR1cm4gdWkuZGl2KCk7XG4gICAgICAgIGNvbnN0IGZjID0gZnVuYy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IGF3YWl0IGZjLmJ1aWxkRWRpdG9yKHVpLmRpdigpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBmdW5jLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZklucHV0ID0gZnVuYy5pbnB1dHNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gfHwgZmMuaW5wdXRQYXJhbXNbZnVuYy5pbnB1dHNbaV0ubmFtZV0udmFsdWUgfHxcbiAgICAgICAgICAgICAgICBmSW5wdXQuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA/PyBmYy5pbnB1dFBhcmFtc1tmSW5wdXQubmFtZV0udmFsdWUgPz8gZklucHV0LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzLmZpbmQoKGlucCkgPT4gaW5wLnByb3BlcnR5Lm5hbWUgPT09IGZJbnB1dC5uYW1lKTtcbiAgICAgICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV07XG4gICAgICAgICAgICBpbnB1dC5vbkNoYW5nZWQoKCkgPT4geyB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA9IGlucHV0LnZhbHVlOyB9KTtcbiAgICAgICAgICAgIHBhcmFtc0Zvcm0uYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXNGb3JtO1xuICAgIH1cbiAgICBnZXRFZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB1aS5kaXYoW1xuICAgICAgICAgICAgdGhpcy50YWJsZUlucHV0LFxuICAgICAgICAgICAgdGhpcy5jb2xJbnB1dFJvb3QsXG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCxcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdixcbiAgICAgICAgICAgIHRoaXMubWV0aG9kSW5wdXQsXG4gICAgICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2LFxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LFxuICAgICAgICAgICAgdGhpcy5wbG90RW1iZWRkaW5nc0lucHV0LFxuICAgICAgICAgICAgdGhpcy5jbHVzdGVyRW1iZWRkaW5nc0lucHV0LFxuICAgICAgICAgICAgdGhpcy5kYlNjYW5TZXR0aW5nc0RpdlxuICAgICAgICBdLCB7IHN0eWxlOiB7IG1pbldpZHRoOiAnNDIwcHgnIH0sIGNsYXNzZXM6ICd1aS1mb3JtIGRpbS1yZWR1Y3Rpb24tZGlhbG9nLWZvcm0nIH0pO1xuICAgIH1cbiAgICBnZXRQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZUlucHV0LnZhbHVlLFxuICAgICAgICAgICAgY29sOiB0aGlzLmNvbElucHV0LnZhbHVlLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogdGhpcy5tZXRob2RJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jdGlvbjogdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZV0uZnVuYyxcbiAgICAgICAgICAgIHNpbWlsYXJpdHlNZXRyaWM6IHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0LnZhbHVlLFxuICAgICAgICAgICAgcGxvdEVtYmVkZGluZ3M6IHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIGNsdXN0ZXJFbWJlZGRpbmdzOiB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMuYWxnb3JpdGhtT3B0aW9ucywgLi4udGhpcy5kYlNjYW5PcHRpb25zLFxuICAgICAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jQXJnczogKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPz8ge30pIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV04wYVc5dUxXVmthWFJ2Y2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbVJwYldWdWMybHZibUZzYVhSNUxYSmxaSFZqZEdsdmJpMWxaR2wwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4RlFVRkRMR3REUVVGclF5eEZRVUZGTEdkRFFVRm5ReXhGUVVNeFJTeHpRa0ZCYzBJc1JVRkJSU3h0UWtGQmJVSXNSVUZCUlN4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEZWQlFWVXNRMEZCUXp0QlFVZHdSaXhQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZGTEZkQlFWY3NSVUZCUXl4TlFVRk5MRFJGUVVFMFJTeERRVUZETzBGQlIzQklMRTlCUVU4c1JVRkJReXh0UWtGQmJVSXNSVUZCUXl4TlFVRk5MR2RFUVVGblJDeERRVUZETzBGQlEyNUdMRTlCUVU4c1JVRkJReXhoUVVGaExFVkJRVU1zVFVGQlRTeFJRVUZSTEVOQlFVTTdRVUZGY2tNc1RVRkJUU3hEUVVGRExFMUJRVTBzWVVGQllTeEhRVUZITzBsQlF6TkNMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4WFFVRlhPMGxCUTJ4RExFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hYUVVGWE8wTkJRM2hETEVOQlFVTTdRVUY1UWtZc1RVRkJUU3hQUVVGUExHRkJRV0U3U1VGTmRFSTdVVUZNUVN4WlFVRlBMRWRCUVhWQ08xbEJRelZDTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNlVU5CUVhsRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeExRVUZMTzFOQlFVTXNRMEZCUXp0UlFVTnVTQ3hYUVVGTkxFZEJRWFZDTzFsQlF6TkNMRTFCUVUwc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeHhRMEZCY1VNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFTkJRVU03VTBGQlF5eERRVUZETzBsQlJXNUhMRU5CUVVNN1NVRkJRU3hEUVVGRE8wTkJRM0JDTzBGQlEwUXNUVUZCVFN4UFFVRlBMSE5DUVVGelFqdEpRV3RETDBJc1NVRkJTU3huUWtGQlowSTdVVUZEYkVJc1RVRkJUU3hsUVVGbExFZEJRVGhDTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXZSaXhOUVVGTkxFOUJRVThzUjBGQlVTeEZRVUZGTEVOQlFVTTdVVUZEZUVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGWExFVkJRVVVzUlVGQlJUdFpRVU51UkN4SlFVRkxMR1ZCUVhWQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRWxCUVVrN1owSkJRemRETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJTU3hsUVVGMVFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOMlJDeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRTlCUVU4c1QwRkJUeXhEUVVGRE8wbEJRMnBDTEVOQlFVTTdTVUZGUkN4SlFVRkpMR0ZCUVdFN1VVRkRaaXhQUVVGUE8xbEJRMHdzWVVGQllTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTzFsQlEzUkVMRmxCUVZrc1JVRkJSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRenRUUVVOc1JDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVMRmxCUVZrc2FVSkJRVFJETEVWQlFVVTdVVUZzUkRGRUxHMUNRVUZqTEVkQlFUaENMRVZCUVVVc1EwRkJRenRSUVVrdlF5eDNRa0ZCYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6VkVMREpDUVVGelFpeEhRVUZITEVWQlFVVXNRMEZCUXl4VFFVRlRMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRiRVVzYlVOQlFUaENMRWRCUVhWQ0xFbEJRVWtzUTBGQlF6dFJRVVV4UkN4WlFVRlBMRWRCUVRCQ0xFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1NVRkJTU3hGUVVGRkxHMUNRVUZ0UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJTM1pHTEhWQ1FVRnJRaXhIUVVFNFFpeEZRVUZGTEVOQlFVTTdVVUZEYmtRc2RVSkJRV3RDTEVkQlRXSXNSVUZCUlN4RFFVRkRPMUZCUTFJc2NVSkJRV2RDTEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUldoRExITkNRVUZwUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYkVNc2MwSkJRV2xDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU5zUXl4cFEwRkJORUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRemRETEd0RFFVRTJRaXhIUVVGWkxFVkJRVVVzUTBGQlF6dFJRVU0xUXl4clFrRkJZU3hIUVVFclF6dFpRVU14UkN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1YwRkJWeXhGUVVGRk8xbEJRemRETEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNTVUZCU1N4WFFVRlhMRVZCUVVVN1UwRkRMME1zUTBGQlF6dFJRVU5HTEdsQ1FVRlpMRWRCUVVjc1NVRkJTU3hoUVVGaExFVkJRVVVzUTBGQlF6dFJRVzlDYWtNc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eGpRVUZqTEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEZOQlFWTTdXVUZETDBJc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCYjBJc1EwRkJReXhEUVVGRE8xRkJSVEZETEUxQlFVMHNhMEpCUVd0Q0xFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eHJRMEZCYTBNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUml4dFJVRkJiVVU3VVVGRGJrVXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeFJRVUZSTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGNrVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExGbEJRVmtzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNSRExFMUJRVTBzUzBGQlN5eEhRVUZYTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJReTlFTEUxQlFVMHNTMEZCU3l4SFFVRlhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF5OUVMRTFCUVUwc2FVSkJRV2xDTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGVFWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTTdaMEpCUTJoR0xFOUJRVTg3V1VGRFZDeEpRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEZGtVc1QwRkJUenRaUVVOVUxFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU42UlN4UFFVRlBPMWxCUlZRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSE8yZENRVU01UWl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFVDeFJRVUZSTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU0zUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTndReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOd1F5eHBRa0ZCYVVJc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJGQlEzcEZMRU5CUVVNN1VVRkRTaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJUdFpRVU40Uml4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNRMEZCUXp0UlFVTTNRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUlVGQlJTeERRVUZETzFGQlJUTkNMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1JVRkJSU3hEUVVGRE8xRkJRelZDTEVsQlFVa3NZMEZCWXl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVNelFpeEpRVUZKTEc5Q1FVRnZRaXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU5xUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RlFVRkZMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NSVUZEYkVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEhRVUZITEVWQlFVVTdXVUZEYWtJc1NVRkJTU3hqUVVGak8yZENRVU5vUWl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwd3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVVVzUlVGQlJUdFpRVU01UXl4alFVRmpMRWRCUVVjc1EwRkJReXhqUVVGakxFTkJRVU03V1VGRGFrTXNTVUZCU1N4RFFVRkRMR05CUVdNN1owSkJRMnBDTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN08yZENRVVZxUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwSExFTkJRVU1zUlVGQlJTd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8xRkJRMmhETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGRkxFVkJRVVU3V1VGRE9VTXNiMEpCUVc5Q0xFZEJRVWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q08yZENRVU4yUWl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE96dG5Ra0ZGYWtNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03VVVGREwwVXNRMEZCUXl4RlFVRkZMRGhDUVVFNFFpeERRVUZETEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zYVVOQlFXbERMRU5CUVVNc1EwRkJRenRSUVVNM1JTeEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0UlFVTnNSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1VVRkRka1VzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRE8xRkJRM1pFTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM1pETEUxQlFVMHNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVnlSU3hKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRWRCUVVjc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eHRRa0ZCYlVJc1JVRkRiRVVzVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hIUVVGSExFVkJRVVU3V1VGRE5VSXNTVUZCU1N4RFFVRkRMRGhDUVVFNFFpeEZRVUZGTEVOQlFVTTdVVUZEZUVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFRDeEpRVUZKTEU5QlFVOHNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRjRUlzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl3NFFrRkJPRUlzUlVGQlJUdFpRVU40UXl4SlFVRkpMRU5CUVVNc09FSkJRVGhDTEVkQlFVY3NTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTXpSU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETzFOQlEyaENPMUZCUTBRc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJUdFpRVU5hTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExEaENRVUU0UWl4RFFVRkRMRU5CUVVNN1dVRkRPVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRwUWtGRGRFUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNPRUpCUVN0Q0xFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRNMFU3VVVGRFJDeEpRVUZKTEVOQlFVTXNPRUpCUVRoQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4cFEwRkJhVU1zUTBGQlF5eERRVUZETzFGQlEzSkdMRWxCUVVrc01rSkJRVEpDTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTNoRExFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4TFFVRkxMRWxCUVVjc1JVRkJSVHRaUVVNdlJDeEpRVUZKTEVOQlFVTXNNa0pCUVRKQ0xFVkJRVVU3WjBKQlEyaERMRTFCUVUwc1NVRkJTU3hEUVVGRExHZERRVUZuUXl4RFFVTjZReXhKUVVGSkxFTkJRVU1zTkVKQlFUUkNMRVZCUVVVc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4TFFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dGhRVU0xUnp0cFFrRkJUVHRuUWtGQlJTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXcwUWtGQk5FSXNRMEZCUXl4RFFVRkRPMkZCUVVVN1dVRkRka1FzTWtKQlFUSkNMRWRCUVVjc1EwRkJReXd5UWtGQk1rSXNRMEZCUXp0UlFVTTNSQ3hEUVVGRExFVkJRVVVzY1VOQlFYRkRMRU5CUVVNc1EwRkJRenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNPRUpCUVRoQ0xFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eERRVUZETzFGQlJXaEdMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExGbEJRVmtzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM2hGTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNlVUpCUVhsQ08xbEJRMnBETEVsQlFVa3NRMEZCUXl4NVFrRkJlVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEyNUZMRWxCUVVrc1EwRkJReXc0UWtGQk9FSXNSVUZCUlN4RFFVRkRPMGxCUTNoRExFTkJRVU03U1VGRlR5eFhRVUZYTzFGQlEycENMRTFCUVUwc2IwSkJRVzlDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlR0aFFVTnFSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRPMUZCUXpsRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTMEZCVFN4RlFVRkZMRzlDUVVGdlFpeEZRVU5xUml4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRVZCUVVVc1JVRkJSU3hGUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVkQlFXTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1R0WlFVTndRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRha01zVDBGQlR5eExRVUZMTEVOQlFVTTdTVUZEWml4RFFVRkRPMGxCUlU4c2EwSkJRV3RDTzFGQlEzaENMRWxCUVVrc1NVRkJTU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU5xUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVU3V1VGRGNrSXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOYUxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xTkJRemRDTzFGQlEwUXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hKUVVGSk8xbEJRMDRzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZET1VZc1NVRkJTU3hEUVVGRExHOUNRVUZ2UWl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUTBGQlF6dEpRVVZFTEcxQ1FVRnRRanRSUVVOcVFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU53UXl4SlFVRkpMRU5CUVVNc1MwRkJTenRaUVVOU0xFOUJRVTg3VVVGRFZDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzUlVGQlJTeERRVUZETzFGQlF6ZENMRTFCUVUwc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRka01zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRk8xbEJRM1JDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVVTdaMEpCUTNoRUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNN1owSkJRelZFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzUkVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUTNSRUxFMUJRVTBzWjBKQlFXZENMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1NVRkJTU3hSUVVGUkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU0zUml4TlFVRk5MRmxCUVZrc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdaMEpCUXk5RUxFMUJRVTBzWTBGQll5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwN2IwSkJRMnhETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRNMFVzU1VGQlNTeG5Ra0ZCWjBJc1NVRkJTU3haUVVGWkxFbEJRVWtzWTBGQll5eEZRVUZGTzI5Q1FVTjBSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTTdkMEpCUTNCRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMjlDUVVONlF5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dHBRa0ZEYkVRN1dVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RlFVRkZMRU5CUVVNN1NVRkROVUlzUTBGQlF6dEpRVVZQTEc5Q1FVRnZRanRSUVVNeFFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1IwRkJSenRaUVVOT0xFOUJRVTg3VVVGRFZDeE5RVUZOTEN0Q1FVRXJRaXhIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETVVVc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4SFFVRkhMRVZCUVVVc1EwRkJReXhYUVVGWExFTkJRVU1zZDBKQlFYZENMRVZCUTNaRkxDdENRVUVyUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxDdENRVUVyUWl4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVONFJTeEpRVUZKTEVOQlFVTXNPRUpCUVRoQ0xFVkJRVVVzUTBGQlF6dFJRVU40UXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOTUxFbEJRVWtzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTnFRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETERoQ1FVRTRRaXhGUVVGRk8xbEJRM2hETEVsQlFVa3NRMEZCUXl3NFFrRkJPRUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6TkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03VTBGRFlqdFJRVU5FTEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVN1dVRkRWQ3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl3NFFrRkJPRUlzUTBGQlF5eERRVUZETzFsQlF6bERMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTTdhVUpCUTNSRUxFOUJRVThzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExEaENRVUVyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF6TkZPMUZCUTBRc1NVRkJTU3hEUVVGRExEaENRVUU0UWl4RlFVRkZMRU5CUVVNN1NVRkRlRU1zUTBGQlF6dEpRVVZQTERoQ1FVRTRRanRSUVVOd1F5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXcwUWtGQk5FSXNRMEZCUXl4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRGVFTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRXRCUVUwc1EwRkJRenRSUVVOeVJDeE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTTdVVUZEY0VVc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnFTQ3hKUVVGSkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU0xUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExIbENRVUY1UWp0WlFVTnFReXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRWRCUVVjc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVWdVJTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNN1lVRkRha1FzVDBGQlR5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0VVc1NVRkJTU3hKUVVGSkxFTkJRVU1zTmtKQlFUWkNMRVZCUVVVN1dVRkRkRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dG5Ra0ZEZGtRc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZET3p0blFrRkZNVVFzU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMU5CUXpkRU8wbEJRMGdzUTBGQlF6dEpRVVZQTERCQ1FVRXdRaXhEUVVOb1F5eFZRVUYxUWl4RlFVRkZMRTFCUVdsRU8xRkJRekZGTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRGNrSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRlBMRVZCUVVVc1JVRkJSVHRaUVVOMFF5eE5RVUZOTEV0QlFVc3NSMEZEVWl4TlFVRmpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRmRFSXNUVUZCVFN4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eFJRVUZSTEVOQlFVTXNRMEZCUXp0blFrRkRja01zUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eExRVUZMTEVsQlFVa3NSVUZCUlN4RlFVRkZMRWRCUVVjc1JVRkJSVHR2UWtGRGJrUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJTU3hMUVVFNFFpeERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRkRVFzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFdEJRVXNzVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUXpkQ0xFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVN2IwSkJRM0JFTEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVrc1MwRkJLMElzUTBGQlF5eExRVUZMTEVOQlFVTTdaMEpCUTNaRUxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTBvc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGWkxFVkJRVVVzUjBGQlJ5eEZRVUZGTzI5Q1FVTnVSQ3hMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNN1owSkJRelZDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTFBc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRPVUlzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZPMmRDUVVOcVFpeExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJRenRuUWtGRGRFSXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NTVUZCU1N4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eGpRVUZqTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNN1lVRkRlRVU3YVVKQlFVMDdaMEpCUVVVc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRoUVVGRk8xRkJRM1pGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1QwRkJUeXhWUVVGVkxFTkJRVU03U1VGRGNFSXNRMEZCUXp0SlFVVlBMRXRCUVVzc1EwRkJReXhuUTBGQlowTXNRMEZCUXl4VlFVRjFRaXhGUVVGRkxFbEJRV0U3VVVGRGJrWXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU55UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTTdXVUZEZUVJc1QwRkJUeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZEYkVJc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUXpGQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEUxQlFVMHNSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTTVReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRNME1zVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU01UWl4SlFVRkpMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRXRCUVVzN1owSkJRemRHTEUxQlFVMHNRMEZCUXl4WlFVRlpMRVZCUVVVN1owSkJRM1JDTEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVNM1F5eEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRXRCUVVzc1NVRkJTU3hOUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETzJGQlF5OUhPMWxCUTBRc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEzUkZMRWxCUVVrc1EwRkJReXhMUVVGTE8yZENRVU5TTEZOQlFWTTdXVUZEV0N4SlFVRkpMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzU1VGQlNUdG5Ra0ZETVVRc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eFRRVUZUTzJkQ1FVTTNSQ3hMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRhRVVzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zTmtKQlFUWkNMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU14Uml4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTXZRanRSUVVORUxFOUJRVThzVlVGQlZTeERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRkZUU3hUUVVGVE8xRkJRMlFzVDBGQlR5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUTFvc1NVRkJTU3hEUVVGRExGVkJRVlU3V1VGRFppeEpRVUZKTEVOQlFVTXNXVUZCV1R0WlFVTnFRaXhKUVVGSkxFTkJRVU1zT0VKQlFUaENPMWxCUTI1RExFbEJRVWtzUTBGQlF5dzBRa0ZCTkVJN1dVRkRha01zU1VGQlNTeERRVUZETEZkQlFWYzdXVUZEYUVJc1NVRkJTU3hEUVVGRExHbENRVUZwUWp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zZVVKQlFYbENPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJN1dVRkRlRUlzU1VGQlNTeERRVUZETEhOQ1FVRnpRanRaUVVNelFpeEpRVUZKTEVOQlFVTXNhVUpCUVdsQ08xTkJRM1pDTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVVc1JVRkJReXhSUVVGUkxFVkJRVVVzVDBGQlR5eEZRVUZETEVWQlFVVXNUMEZCVHl4RlFVRkZMRzFEUVVGdFF5eEZRVUZETEVOQlFVTXNRMEZCUXp0SlFVTnFSaXhEUVVGRE8wbEJSVTBzVTBGQlV6dFJRVU5rTEU5QlFVODdXVUZEVEN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZOTzFsQlF6ZENMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVMDdXVUZEZWtJc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTMEZCVFR0WlFVTnVReXh4UWtGQmNVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEV0QlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrN1dVRkRNMFlzWjBKQlFXZENMRVZCUVVVc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRXRCUVUwN1dVRkRia1FzWTBGQll5eEZRVUZGTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eExRVUZOTzFsQlF5OURMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eExRVUZOTzFsQlEzSkVMRTlCUVU4c1JVRkJSU3hGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRTdaMEpCUTNaRUxIRkNRVUZ4UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRE8xTkJRM0pGTEVOQlFVTTdTVUZEU2l4RFFVRkRPME5CUTBvaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dWFXMXdiM0owSUh0RVNVMWZVa1ZFWDFCU1JWQlNUME5GVTFOSlRrZGZSbFZPUTFSSlQwNWZWRUZITENCVFZWQlFUMUpVUlVSZlJFbFRWRUZPUTBWZlJsVk9RMVJKVDA1VFgxUkJSeXhjYmlBZ1UxVlFVRTlTVkVWRVgxTkZUVlJaVUVWVFgxUkJSeXdnVTFWUVVFOVNWRVZFWDFSWlVFVlRYMVJCUnl3Z1UxVlFVRTlTVkVWRVgxVk9TVlJUWDFSQlIzMGdabkp2YlNBbkxpOWpiMjV6ZEhNbk8xeHVhVzF3YjNKMElIdEpSRUpUWTJGdVQzQjBhVzl1YzMwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5dFlYUm9KenRjYm1sdGNHOXlkQ0I3VDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0VVUwNUZUM0IwYVc5dWN5d2dWVTFCVUU5d2RHbHZibk45SUdaeWIyMGdKeTR1TDIxMWJIUnBMV052YkhWdGJpMWthVzFsYm5OcGIyNWhiR2wwZVMxeVpXUjFZM1JwYjI0dmJYVnNkR2t0WTI5c2RXMXVMV1JwYlMxeVpXUjFZM1JwYjI0dFpXUnBkRzl5Snp0Y2JtbHRjRzl5ZENCN1NVUnBiVkpsWkhWamRHbHZibEJoY21GdExDQkpWRk5PUlU5d2RHbHZibk1zSUVsVlRVRlFUM0IwYVc5dWMzMWNiaUFnWm5KdmJTQW5MaTR2YlhWc2RHa3RZMjlzZFcxdUxXUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpkR2x2Ymk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEluTzF4dWFXMXdiM0owSUh0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSemZTQm1jbTl0SUNjdUxpOXRkV3gwYVMxamIyeDFiVzR0WkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdOMGFXOXVMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdUVU5NVFdWMGFHOWtUbUZ0WlgwZ1puSnZiU0FuTGk0dlRVTk1KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRk5GVVY5RFQweGZUa0ZOUlZNZ1BTQjdYRzRnSUZ0RVJ5NVRSVTFVV1ZCRkxrMVBURVZEVlV4RlhUb2dKMDF2YkdWamRXeGxjeWNzWEc0Z0lGdEVSeTVUUlUxVVdWQkZMazFCUTFKUFRVOU1SVU5WVEVWZE9pQW5VMlZ4ZFdWdVkyVnpKMXh1ZlR0Y2JseHVaWGh3YjNKMElIUjVjR1VnVUhKbGNISnZZMlZ6YzBaMWJtTjBhVzl1VW1WMGRYSnVWSGx3WlNBOUlIdGNiaUFnSUNCbGJuUnlhV1Z6T2lCaGJubGJYU3hjYmlBZ0lDQnZjSFJwYjI1elB6b2dlMXRmT2lCemRISnBibWRkT2lCaGJubDlYRzU5TzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JFYVcxU1pXUjFZM1JwYjI1RlpHbDBiM0pQY0hScGIyNXpJRDBnZTF4dUlDQWdJSE5sYlhSNWNHVS9PaUJ6ZEhKcGJtY3NYRzRnSUNBZ2RIbHdaVDg2SUhOMGNtbHVaeXhjYmlBZ0lDQjFibWwwY3o4NklITjBjbWx1Wnl4Y2JpQWdJQ0JsYm1GaWJHVk5RMHcvT2lCaWIyOXNaV0Z1TEZ4dWZWeHVYRzVsZUhCdmNuUWdkSGx3WlNCRWFXMVNaV1IxWTNScGIyNVFZWEpoYlhNZ1BTQjdYRzRnSUNBZ2RHRmliR1U2SUVSSExrUmhkR0ZHY21GdFpTeGNiaUFnSUNCamIydzZJRVJITGtOdmJIVnRiaXhjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVPaUJFUnk1R2RXNWpMRnh1SUNBZ0lITnBiV2xzWVhKcGRIbE5aWFJ5YVdNNklITjBjbWx1Wnl4Y2JpQWdJQ0J3Ykc5MFJXMWlaV1JrYVc1bmN6ODZJR0p2YjJ4bFlXNHNYRzRnSUNBZ1kyeDFjM1JsY2tWdFltVmtaR2x1WjNNL09pQmliMjlzWldGdUxGeHVJQ0FnSUc5d2RHbHZibk02SUNoSlZVMUJVRTl3ZEdsdmJuTWdmQ0JKVkZOT1JVOXdkR2x2Ym5NcElDWWdVR0Z5ZEdsaGJEeEpSRUpUWTJGdVQzQjBhVzl1Y3o0Z0ppQjdjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTkJjbWR6UHpvZ1QzQjBhVzl1YzMwZ0ppQlBjSFJwYjI1elhHNTlPMXh1WEc1bGVIQnZjblFnWTJ4aGMzTWdSRUpUWTJGdVQzQjBhVzl1Y3lCN1hHNGdJQ0FnWlhCemFXeHZiam9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUQwZ2UxeHVJQ0FnSUNBZ2RXbE9ZVzFsT2lBblJYQnphV3h2Ymljc0lIWmhiSFZsT2lBd0xqQXhMQ0IwYjI5c2RHbHdPaUFuVFdsdWFXMTFiU0JrYVhOMFlXNWpaU0JpWlhSM1pXVnVJR05zZFhOMFpYSWdjRzlwYm5Sekp5d2diV2x1T2lBd0xDQnRZWGc2SURJc0lITjBaWEE2SURBdU1EQTFmVHRjYmlBZ0lDQnRhVzVRZEhNNklFbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJTQTlJSHRjYmlBZ0lDQWdJSFZwVG1GdFpUb2dKMDFwYm1sdGRXMGdjRzlwYm5Sekp5d2dkbUZzZFdVNklEUXNJSFJ2YjJ4MGFYQTZJQ2ROYVc1cGJYVnRJRzUxYldKbGNpQnZaaUJ3YjJsdWRITWdhVzRnWTJ4MWMzUmxjaWNzSUcxcGJqb2dNU3dnYldGNE9pQXhNREF3TENCemRHVndPaUF4ZlR0Y2JseHVJQ0FnSUdOdmJuTjBjblZqZEc5eUtDa2dlMzA3WEc1OVhHNWxlSEJ2Y25RZ1kyeGhjM01nUkdsdFVtVmtkV04wYVc5dVFtRnpaVVZrYVhSdmNpQjdYRzRnSUNBZ1pXUnBkRzl5VTJWMGRHbHVaM002SUVScGJWSmxaSFZqZEdsdmJrVmthWFJ2Y2s5d2RHbHZibk1nUFNCN2ZUdGNiaUFnSUNCMFlXSnNaVWx1Y0hWME9pQkVSeTVKYm5CMWRFSmhjMlU4UkVjdVJHRjBZVVp5WVcxbElId2diblZzYkQ0N1hHNGdJQ0FnWTI5c1NXNXdkWFFoT2lCRVJ5NUpibkIxZEVKaGMyVThSRWN1UTI5c2RXMXVJSHdnYm5Wc2JENDdYRzRnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRNklFUkhMa2x1Y0hWMFFtRnpaVHh6ZEhKcGJtY2dmQ0J1ZFd4c1BqdGNiaUFnSUNCd2JHOTBSVzFpWldSa2FXNW5jMGx1Y0hWMElEMGdkV2t1WW05dmJFbHVjSFYwS0NkUWJHOTBJR1Z0WW1Wa1pHbHVaM01uTENCMGNuVmxLVHRjYmlBZ0lDQmpiSFZ6ZEdWeVJXMWlaV1JrYVc1bmMwbHVjSFYwSUQwZ2RXa3VZbTl2YkVsdWNIVjBLQ2REYkhWemRHVnlJR1Z0WW1Wa1pHbHVaM01uTENCMGNuVmxLVHRjYmlBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRGSnZiM1E2SUVoVVRVeEZiR1Z0Wlc1MElId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdZMjlzU1c1d2RYUlNiMjkwSVRvZ1NGUk5URVZzWlcxbGJuUTdYRzRnSUNBZ2JXVjBhRzlrY3pvZ1JHbHRVbVZrZFdOMGFXOXVUV1YwYUc5a2MxdGRJRDBnVzBScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhNdVZVMUJVQ3dnUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrY3k1VVgxTk9SVjA3WEc0Z0lDQWdiV1YwYUc5a1NXNXdkWFE2SUVSSExrTm9iMmxqWlVsdWNIVjBQSE4wY21sdVp5QjhJRzUxYkd3K08xeHVJQ0FnSUcxbGRHaHZaRk5sZEhScGJtZHpTV052YmpvZ1NGUk5URVZzWlcxbGJuUTdYRzRnSUNBZ1pHSlRZMkZ1VTJWMGRHbHVaM05KWTI5dU9pQklWRTFNUld4bGJXVnVkRHRjYmlBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelNXTnZiam9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnWTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3T2lCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTE5SUQwZ2UzMDdYRzRnSUNBZ2MzVndjRzl5ZEdWa1JuVnVZM1JwYjI1ek9pQjdXMjVoYldVNklITjBjbWx1WjEwNklIdGNiaUFnSUNBZ0lDQWdablZ1WXpvZ1JFY3VSblZ1WXl4Y2JpQWdJQ0FnSUNBZ2MyVnRWSGx3WlhNNklITjBjbWx1WjF0ZExGeHVJQ0FnSUNBZ0lDQjBlWEJsY3pvZ2MzUnlhVzVuVzEwc1hHNGdJQ0FnSUNBZ0lIVnVhWFJ6T2lCemRISnBibWRiWFN4Y2JpQWdJQ0FnSUNBZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NNklITjBjbWx1WjF0ZFhHNGdJQ0FnZlgwZ1BTQjdmVHRjYmlBZ0lDQmhkbUZwYkdGaWJHVk5aWFJ5YVdOek9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJSE5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEZKdmIzUWhPaUJJVkUxTVJXeGxiV1Z1ZER0Y2JpQWdJQ0J0WlhSb2IyUlRaWFIwYVc1bmMwUnBkaUE5SUhWcExtbHVjSFYwY3loYlhTazdYRzRnSUNBZ1pHSlRZMkZ1VTJWMGRHbHVaM05FYVhZZ1BTQjFhUzVwYm5CMWRITW9XMTBwTzF4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlnUFNCMWFTNXBibkIxZEhNb1cxMHBPMXh1SUNBZ0lIQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpPaUJQY0hScGIyNXpJRDBnZTMwN1hHNGdJQ0FnYldWMGFHOWtjMUJoY21GdGN6b2dlMXRyWlhrNklITjBjbWx1WjEwNklGVk5RVkJQY0hScGIyNXpJSHdnVkZOT1JVOXdkR2x2Ym5OOUlEMGdlMXh1SUNBZ0lDQWdXMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VlUxQlVGMDZJRzVsZHlCVlRVRlFUM0IwYVc5dWN5Z3BMRnh1SUNBZ0lDQWdXMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VkY5VFRrVmRPaUJ1WlhjZ1ZGTk9SVTl3ZEdsdmJuTW9LVnh1SUNBZ0lIMDdYRzRnSUNBZ1pHSlRZMkZ1VUdGeVlXMXpJRDBnYm1WM0lFUkNVMk5oYms5d2RHbHZibk1vS1R0Y2JpQWdJQ0J6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRaE9pQkVSeTVKYm5CMWRFSmhjMlU4YzNSeWFXNW5JSHdnYm5Wc2JENDdYRzRnSUNBZ1oyVjBJR0ZzWjI5eWFYUm9iVTl3ZEdsdmJuTW9LVG9nS0VsVlRVRlFUM0IwYVc5dWN5QjhJRWxVVTA1RlQzQjBhVzl1Y3lrZ0ppQlBjSFJwYjI1eklIdGNiaUFnSUNBZ0lHTnZibk4wSUdGc1oyOXlhWFJvYlZCaGNtRnRjem9nVlUxQlVFOXdkR2x2Ym5NZ2ZDQlVVMDVGVDNCMGFXOXVjeUE5SUhSb2FYTXViV1YwYUc5a2MxQmhjbUZ0YzF0MGFHbHpMbTFsZEdodlpFbHVjSFYwTG5aaGJIVmxJVjA3WEc0Z0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1ek9pQmhibmtnUFNCN2ZUdGNiaUFnSUNBZ0lFOWlhbVZqZEM1clpYbHpLR0ZzWjI5eWFYUm9iVkJoY21GdGN5a3VabTl5UldGamFDZ29hMlY1T2lCemRISnBibWNwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0NoaGJHZHZjbWwwYUcxUVlYSmhiWE1nWVhNZ1lXNTVLVnRyWlhsZExuWmhiSFZsSUNFOUlHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ2IzQjBhVzl1YzF0clpYbGRJRDBnS0dGc1oyOXlhWFJvYlZCaGNtRnRjeUJoY3lCaGJua3BXMnRsZVYwdWRtRnNkV1U3WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ2Y0hScGIyNXpPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHZGxkQ0JrWWxOallXNVBjSFJwYjI1ektDazZJRWxFUWxOallXNVBjSFJwYjI1eklIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lHUmlVMk5oYmtWd2MybHNiMjQ2SUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6TG1Wd2MybHNiMjR1ZG1Gc2RXVWdQejhnTUM0d01TeGNiaUFnSUNBZ0lDQWdaR0pUWTJGdVRXbHVVSFJ6T2lCMGFHbHpMbVJpVTJOaGJsQmhjbUZ0Y3k1dGFXNVFkSE11ZG1Gc2RXVWdQejhnTkZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2lobFpHbDBiM0pUWlhSMGFXNW5jem9nUkdsdFVtVmtkV04wYVc5dVJXUnBkRzl5VDNCMGFXOXVjeUE5SUh0OUtTQjdYRzRnSUNBZ0lDQjBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpJRDBnWldScGRHOXlVMlYwZEdsdVozTTdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1bGJtRmliR1ZOUTB3cFhHNGdJQ0FnSUNBZ0lIUm9hWE11YldWMGFHOWtjeTV3ZFhOb0tFMURURTFsZEdodlpFNWhiV1VnWVhNZ1lXNTVLVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjSEpsY0c5eVkyVnpjMmx1WjBaMWJtTnpJRDBnUkVjdVJuVnVZeTVtYVc1a0tIdDBZV2R6T2lCYlJFbE5YMUpGUkY5UVVrVlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMVJCUjExOUtUdGNiaUFnSUNBZ0lDOHZJRzFoY0NCMGFHRjBJR052Ym5SaGFXNXpJR0ZzYkNCd2NtVndjbTlqWlhOemFXNW5JR1oxYm1OMGFXOXVjeUJoYm1RZ2RHaGxhWElnYldWMFlXUmhkR0ZjYmlBZ0lDQWdJSEJ5WlhCdmNtTmxjM05wYm1kR2RXNWpjeTVtYjNKRllXTm9LQ2htS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElITmxiVlI1Y0dWek9pQnpkSEpwYm1jZ1BTQm1MbTl3ZEdsdmJuTXVaMlYwS0ZOVlVGQlBVbFJGUkY5VFJVMVVXVkJGVTE5VVFVY3BJRDgvSUNjbk8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdVlXMWxJRDBnWmk1bWNtbGxibVJzZVU1aGJXVWdQejhnWmk1dVlXMWxPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjBlWEJsY3pvZ2MzUnlhVzVuSUQwZ1ppNXZjSFJwYjI1ekxtZGxkQ2hUVlZCUVQxSlVSVVJmVkZsUVJWTmZWRUZIS1NBL1B5QW5KenRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkVzVwZEhNNklITjBjbWx1WnlBOUlHWXViM0IwYVc5dWN5NW5aWFFvVTFWUVVFOVNWRVZFWDFWT1NWUlRYMVJCUnlrZ1B6OGdKeWM3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JwYzNSaGJtTmxSblZ1WTNScGIyNXpPaUJ6ZEhKcGJtY2dQU0JtTG05d2RHbHZibk11WjJWMEtGTlZVRkJQVWxSRlJGOUVTVk5VUVU1RFJWOUdWVTVEVkVsUFRsTmZWRUZIS1NBL1B5QW5KenRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11WldScGRHOXlVMlYwZEdsdVozTXVjMlZ0ZEhsd1pTQW1KaUFoYzJWdFZIbHdaWE11YVc1amJIVmtaWE1vZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1elpXMTBlWEJsS1NsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtVmthWFJ2Y2xObGRIUnBibWR6TG5SNWNHVWdKaVlnSVhSNWNHVnpMbWx1WTJ4MVpHVnpLSFJvYVhNdVpXUnBkRzl5VTJWMGRHbHVaM011ZEhsd1pTa3BYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVsWkdsMGIzSlRaWFIwYVc1bmN5NTFibWwwY3lBbUppQWhkVzVwZEhNdWFXNWpiSFZrWlhNb2RHaHBjeTVsWkdsMGIzSlRaWFIwYVc1bmN5NTFibWwwY3lrcFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elcyNWhiV1ZkSUQwZ2UxeHVJQ0FnSUNBZ0lDQWdJR1oxYm1NNklHWXNYRzRnSUNBZ0lDQWdJQ0FnYzJWdFZIbHdaWE02SUhObGJWUjVjR1Z6SUQ4Z2MyVnRWSGx3WlhNdWMzQnNhWFFvSnl3bktTQTZJRnRkTEZ4dUlDQWdJQ0FnSUNBZ0lIUjVjR1Z6T2lCMGVYQmxjeUEvSUhSNWNHVnpMbk53YkdsMEtDY3NKeWtnT2lCYlhTeGNiaUFnSUNBZ0lDQWdJQ0IxYm1sMGN6b2dkVzVwZEhNZ1B5QjFibWwwY3k1emNHeHBkQ2duTENjcElEb2dXMTBzWEc0Z0lDQWdJQ0FnSUNBZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NNklHUnBjM1JoYm1ObFJuVnVZM1JwYjI1eklEOGdaR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTXVjM0JzYVhRb0p5d25LU0E2SUZ0ZExGeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVkR0ZpYkdWSmJuQjFkQ0E5SUhWcExuUmhZbXhsU1c1d2RYUW9KMVJoWW14bEp5d2daM0p2YXk1emFHVnNiQzUwZGk1a1lYUmhSbkpoYldVc0lHZHliMnN1YzJobGJHd3VkR0ZpYkdWekxDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YjI1VVlXSnNaVWx1Y0hWMFEyaGhibWRsWkNncE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG05dVZHRmliR1ZKYm5CMWRFTm9ZVzVuWldRb0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1eVpXZGxibVZ5WVhSbFEyOXNTVzV3ZFhRb0tUdGNiaUFnSUNBZ0lIUm9hWE11YjI1RGIyeDFiVzVKYm5CMWRFTm9ZVzVuWldRb0tUdGNiaUFnSUNBZ0lHeGxkQ0J6WlhSMGFXNW5jMDl3Wlc1bFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ2JHVjBJR1JpVTJOaGJsTmxkSFJwYm1kelQzQmxibVZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR2h2WkVsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMDFsZEdodlpDY3NJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VlUxQlVDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJ6TENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE5sZEhScGJtZHpUM0JsYm1Wa0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpjbVZoZEdWQmJHZHZjbWwwYUcxVFpYUjBhVzVuYzBScGRpaDBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpSR2wyTENCMGFHbHpMbTFsZEdodlpITlFZWEpoYlhOYmRHaHBjeTV0WlhSb2IyUkpibkIxZEM1MllXeDFaU0ZkS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpTV052YmlBOUlIVnBMbWxqYjI1ekxuTmxkSFJwYm1kektDZ3BQVDRnZTF4dUlDQWdJQ0FnSUNCelpYUjBhVzVuYzA5d1pXNWxaQ0E5SUNGelpYUjBhVzVuYzA5d1pXNWxaRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnpaWFIwYVc1bmMwOXdaVzVsWkNsY2JpQWdJQ0FnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpSR2wyS1R0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM0psWVhSbFFXeG5iM0pwZEdodFUyVjBkR2x1WjNORWFYWW9kR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMFJwZGl3Z2RHaHBjeTV0WlhSb2IyUnpVR0Z5WVcxelczUm9hWE11YldWMGFHOWtTVzV3ZFhRdWRtRnNkV1VoWFNrN1hHNGdJQ0FnSUNCOUxDQW5UVzlrYVdaNUlHMWxkR2h2WkhNZ2NHRnlZVzFsZEdWeWN5Y3BPMXh1SUNBZ0lDQWdkR2hwY3k1a1lsTmpZVzVUWlhSMGFXNW5jMGxqYjI0Z1BTQjFhUzVwWTI5dWN5NXpaWFIwYVc1bmN5Z29LVDArSUh0Y2JpQWdJQ0FnSUNBZ1pHSlRZMkZ1VTJWMGRHbHVaM05QY0dWdVpXUWdQU0FoWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRcFhHNGdJQ0FnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1a1lsTmpZVzVUWlhSMGFXNW5jMFJwZGlrN1hHNGdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU55WldGMFpVRnNaMjl5YVhSb2JWTmxkSFJwYm1kelJHbDJLSFJvYVhNdVpHSlRZMkZ1VTJWMGRHbHVaM05FYVhZc0lIUm9hWE11WkdKVFkyRnVVR0Z5WVcxektUdGNiaUFnSUNBZ0lIMHNJQ2ROYjJScFpua2dZMngxYzNSbGNtbHVaeUJ3WVhKaGJXVjBaWEp6SnlrN1hHNGdJQ0FnSUNCMGFHbHpMbU5zZFhOMFpYSkZiV0psWkdScGJtZHpTVzV3ZFhRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1amJIVnpkR1Z5UlcxaVpXUmthVzVuYzBsdWNIVjBMbkp2YjNRdWNISmxjR1Z1WkNoMGFHbHpMbVJpVTJOaGJsTmxkSFJwYm1kelNXTnZiaWs3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR2h2WkVsdWNIVjBMbkp2YjNRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJKYm5CMWRDNXliMjkwTG5CeVpYQmxibVFvZEdocGN5NXRaWFJvYjJSVFpYUjBhVzVuYzBsamIyNHBPMXh1SUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMFJwZGlBOUlIVnBMbWx1Y0hWMGN5aGJYU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQm1kVzVqZEdsdmJuTWdQU0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdDBhR2x6TG1OdmJFbHVjSFYwTG5aaGJIVmxJUzV1WVcxbFhUdGNibHh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZENBOUlIVnBMbU5vYjJsalpVbHVjSFYwS0NkRmJtTnZaR2x1WnlCbWRXNWpkR2x2Ymljc1hHNGdJQ0FnSUNBZ0lHWjFibU4wYVc5dWMxc3dYU3dnWm5WdVkzUnBiMjV6TENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV2YmxCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrTm9ZVzVuWldRb0tUdGNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0JzWlhRZ1pteGhaMUJtYVNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwVW05dmRDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMFVtOXZkQ0E5SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVjbTl2ZER0Y2JpQWdJQ0FnSUNBZ1pteGhaMUJtYVNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb0lXWnNZV2RRWm1rcElIdGNiaUFnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEZKdmIzUXBPMXh1SUNBZ0lDQWdJQ0JCY25KaGVTNW1jbTl0S0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVjbTl2ZEM1amFHbHNaSEpsYmlsY2JpQWdJQ0FnSUNBZ0lDQXVabTl5UldGamFDZ29ZMmhwYkdRcElEMCtJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhSU2IyOTBJUzVoY0hCbGJtUW9ZMmhwYkdRcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFJTYjI5MExtTnNZWE56VEdsemRDNWhaR1FvSjIxc0xXUnBiUzF5WldSMVkzUnBiMjR0YzJWMGRHbHVaM010YVc1d2RYUW5LVHRjYmlBZ0lDQWdJR3hsZENCd2NtVndjbTlqWlhOemFXNW5VMlYwZEdsdVozTlBjR1Z1WldRZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3loaGMzbHVZeUFvS1QwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0NGd2NtVndjbTlqWlhOemFXNW5VMlYwZEdsdVozTlBjR1Z1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG1OeVpXRjBaVkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVR0Z5WVcxelJHbDJLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMU5sZEhScGJtZHpSR2wyTENCMGFHbHpMbk4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjMXQwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMExuWmhiSFZsSVYwdVpuVnVZeWs3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3SUhWcExtVnRjSFI1S0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwUnBkaWs3SUgxY2JpQWdJQ0FnSUNBZ2NISmxjSEp2WTJWemMybHVaMU5sZEhScGJtZHpUM0JsYm1Wa0lEMGdJWEJ5WlhCeWIyTmxjM05wYm1kVFpYUjBhVzVuYzA5d1pXNWxaRHRjYmlBZ0lDQWdJSDBzSUNkTmIyUnBabmtnWlc1amIyUnBibWNnWm5WdVkzUnBiMjRnY0dGeVlXMWxkR1Z5Y3ljcE8xeHVJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkRkp2YjNRdWNISmxjR1Z1WkNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkpZMjl1S1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRZ1BTQjFhUzVqYUc5cFkyVkpibkIxZENnblUybHRhV3hoY21sMGVTY3NJQ2NuTENCYlhTd2diblZzYkNrN1hHNGdJQ0FnSUNCMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1dWRXeHNZV0pzWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDQTlJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBMbkp2YjNRN1hHNGdJQ0FnSUNCMGFHbHpMbTl1VUhKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVEyaGhibWRsWkNncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCeWFYWmhkR1VnWjJWMFEyOXNTVzV3ZFhRb0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCbWFYSnpkRk4xY0hCdmNuUmxaRU52YkhWdGJpQTlJSFJvYVhNdWRHRmliR1ZKYm5CMWRDNTJZV3gxWlQ4dVkyOXNkVzF1Y3k1MGIweHBjM1FvS1Z4dUlDQWdJQ0FnSUNBdVptbHVaQ2dvWTI5c0tTQTlQaUFoSVhSb2FYTXVZMjlzZFcxdVJuVnVZM1JwYjI1elRXRndXMk52YkM1dVlXMWxYU2tnUHo4Z2JuVnNiRHRjYmlBZ0lDQWdJR052Ym5OMElHbHVjSFYwSUQwZ2RXa3VZMjlzZFcxdVNXNXdkWFFvSjBOdmJIVnRiaWNzSUhSb2FYTXVkR0ZpYkdWSmJuQjFkQzUyWVd4MVpTRXNJR1pwY25OMFUzVndjRzl5ZEdWa1EyOXNkVzF1TEZ4dUlDQWdJQ0FnSUNBb0tTQTlQaUIwYUdsekxtOXVRMjlzZFcxdVNXNXdkWFJEYUdGdVoyVmtLQ2tzSUh0bWFXeDBaWEk2SUNoamIydzZJRVJITGtOdmJIVnRiaWtnUFQ0Z0lTRjBhR2x6TG1OdmJIVnRia1oxYm1OMGFXOXVjMDFoY0Z0amIyd3VibUZ0WlYxOUtUdGNiaUFnSUNBZ0lHbG1JQ2doZEdocGN5NWpiMnhKYm5CMWRGSnZiM1FwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMjlzU1c1d2RYUlNiMjkwSUQwZ2FXNXdkWFF1Y205dmREdGNiaUFnSUNBZ0lISmxkSFZ5YmlCcGJuQjFkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndjbWwyWVhSbElISmxaMlZ1WlhKaGRHVkRiMnhKYm5CMWRDZ3BJSHRjYmlBZ0lDQWdJR3hsZENCbWJHRm5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWpiMnhKYm5CMWRGSnZiM1FwSUh0Y2JpQWdJQ0FnSUNBZ1pteGhaeUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSFZwTG1WdGNIUjVLSFJvYVhNdVkyOXNTVzV3ZFhSU2IyOTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdVkyOXNTVzV3ZFhRZ1BTQjBhR2x6TG1kbGRFTnZiRWx1Y0hWMEtDazdYRzRnSUNBZ0lDQnBaaUFvWm14aFp5bGNiaUFnSUNBZ0lDQWdRWEp5WVhrdVpuSnZiU2gwYUdsekxtTnZiRWx1Y0hWMExuSnZiM1F1WTJocGJHUnlaVzRwTG1admNrVmhZMmdvS0dOb2FXeGtLU0E5UGlCMGFHbHpMbU52YkVsdWNIVjBVbTl2ZEM1aGNIQmxibVFvWTJocGJHUXBLVHRjYmlBZ0lDQWdJSFJvYVhNdWIyNURiMngxYlc1SmJuQjFkRU5vWVc1blpXUW9LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnZibFJoWW14bFNXNXdkWFJEYUdGdVoyVmtLQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdkbUZzZFdVZ1BTQjBhR2x6TG5SaFlteGxTVzV3ZFhRdWRtRnNkV1U3WEc0Z0lDQWdJQ0JwWmlBb0lYWmhiSFZsS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNDQTlJSHQ5TzF4dUlDQWdJQ0FnWTI5dWMzUWdZMjlzZFcxdWN5QTlJSFpoYkhWbExtTnZiSFZ0Ym5NdWRHOU1hWE4wS0NrN1hHNGdJQ0FnSUNCamIyeDFiVzV6TG1admNrVmhZMmdvS0dOdmJDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1Y3lrdVptOXlSV0ZqYUNnb1puVnVZMDVoYldVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6WlcxVWVYQmxjeUE5SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXMloxYm1OT1lXMWxYUzV6WlcxVWVYQmxjenRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IwZVhCbGN5QTlJSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elcyWjFibU5PWVcxbFhTNTBlWEJsY3p0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCMWJtbDBjeUE5SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXMloxYm1OT1lXMWxYUzUxYm1sMGN6dGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnpaVzFVZVhCbFUzVndjRzl5ZEdWa0lEMGdJWE5sYlZSNWNHVnpMbXhsYm1kMGFDQjhmQ0FvWTI5c0xuTmxiVlI1Y0dVZ0ppWWdjMlZ0Vkhsd1pYTXVhVzVqYkhWa1pYTW9ZMjlzTG5ObGJWUjVjR1VwS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCMGVYQmxVM1Z3YjNKMFpXUWdQU0FoZEhsd1pYTXViR1Z1WjNSb0lIeDhJSFI1Y0dWekxtbHVZMngxWkdWektHTnZiQzUwZVhCbEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjFibWwwYzFOMWNIQnZjblJsWkNBOUlDRjFibWwwY3k1c1pXNW5kR2dnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2hqYjJ3dVoyVjBWR0ZuS0VSSExsUkJSMU11VlU1SlZGTXBJQ1ltSUhWdWFYUnpMbWx1WTJ4MVpHVnpLR052YkM1blpYUlVZV2NvUkVjdVZFRkhVeTVWVGtsVVV5a3BLVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jMlZ0Vkhsd1pWTjFjSEJ2Y25SbFpDQW1KaUIwZVhCbFUzVndiM0owWldRZ0ppWWdkVzVwZEhOVGRYQndiM0owWldRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1amIyeDFiVzVHZFc1amRHbHZibk5OWVhCYlkyOXNMbTVoYldWZEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJrWjFibU4wYVc5dWMwMWhjRnRqYjJ3dWJtRnRaVjBnUFNCYlhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdVJuVnVZM1JwYjI1elRXRndXMk52YkM1dVlXMWxYUzV3ZFhOb0tHWjFibU5PWVcxbEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG5KbFoyVnVaWEpoZEdWRGIyeEpibkIxZENncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCeWFYWmhkR1VnYjI1RGIyeDFiVzVKYm5CMWRFTm9ZVzVuWldRb0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyd2dQU0IwYUdsekxtTnZiRWx1Y0hWMExuWmhiSFZsTzF4dUlDQWdJQ0FnYVdZZ0tDRmpiMndwWEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJR052Ym5OMElITjFjSEJ2Y25SbFpGQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibk1nUFNCMGFHbHpMbU52YkhWdGJrWjFibU4wYVc5dWMwMWhjRnRqYjJ3dWJtRnRaVjA3WEc0Z0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMElEMGdkV2t1WTJodmFXTmxTVzV3ZFhRb0oxQnlaWEJ5YjJObGMzTnBibWNnWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSUNCemRYQndiM0owWldSUWNtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpXekJkTENCemRYQndiM0owWldSUWNtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXZibEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtOb1lXNW5aV1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQnNaWFFnWm14aFp5QTlJR1poYkhObE8xeHVJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMFVtOXZkQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBVbTl2ZENBOUlIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1Y205dmREdGNiaUFnSUNBZ0lDQWdabXhoWnlBOUlIUnlkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb0lXWnNZV2NwSUh0Y2JpQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkRkp2YjNRcE8xeHVJQ0FnSUNBZ0lDQkJjbkpoZVM1bWNtOXRLSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWNtOXZkQzVqYUdsc1pISmxiaWxjYmlBZ0lDQWdJQ0FnSUNBdVptOXlSV0ZqYUNnb1kyaHBiR1FwSUQwK0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFJTYjI5MElTNWhjSEJsYm1Rb1kyaHBiR1FwS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhSb2FYTXViMjVRY21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1RGFHRnVaMlZrS0NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0hKcGRtRjBaU0J2YmxCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrTm9ZVzVuWldRb0tTQjdYRzRnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05FYVhZcE8xeHVJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1VFpYUjBhVzVuY3lBOUlIdDlPMXh1SUNBZ0lDQWdZMjl1YzNRZ1prNWhiV1VnUFNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBMblpoYkhWbElUdGNiaUFnSUNBZ0lHTnZibk4wSUdScGMzUmhibU5sUm5NZ1BTQjBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1YzF0bVRtRnRaVjB1WkdsemRHRnVZMlZHZFc1amRHbHZibk03WEc0Z0lDQWdJQ0IwYUdsekxtRjJZV2xzWVdKc1pVMWxkSEpwWTNNZ1BTQmJMaTR1WkdsemRHRnVZMlZHYzEwN1hHNGdJQ0FnSUNCMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZENBOUlIVnBMbU5vYjJsalpVbHVjSFYwS0NkVGFXMXBiR0Z5YVhSNUp5d2dkR2hwY3k1aGRtRnBiR0ZpYkdWTlpYUnlhV056V3pCZExDQjBhR2x6TG1GMllXbHNZV0pzWlUxbGRISnBZM01zSUc1MWJHd3BPMXh1SUNBZ0lDQWdkR2hwY3k1emFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUXViblZzYkdGaWJHVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lHbG1JQ2doZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFJTYjI5MEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FnUFNCMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1eWIyOTBPMXh1WEc0Z0lDQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxuTnBiV2xzWVhKcGRIbE5aWFJ5YVdOSmJuQjFkRkp2YjNRcE8xeHVJQ0FnSUNBZ1FYSnlZWGt1Wm5KdmJTaDBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDNXliMjkwTG1Ob2FXeGtjbVZ1S1Z4dUlDQWdJQ0FnSUNBdVptOXlSV0ZqYUNnb1kyaHBiR1FwSUQwK0lIUm9hWE11YzJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMFVtOXZkQzVoY0hCbGJtUW9ZMmhwYkdRcEtUdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNOSlkyOXVLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1YzF0bVRtRnRaVjB1Wm5WdVl5NXBibkIxZEhNdWJHVnVaM1JvSUR3Z015bGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNOSlkyOXVMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkpZMjl1TG5OMGVXeGxMbVJwYzNCc1lYa2dQU0FuWm14bGVDYzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NISnBkbUYwWlNCamNtVmhkR1ZCYkdkdmNtbDBhRzFUWlhSMGFXNW5jMFJwZGloY2JpQWdJQ0FnSUhCaGNtRnRjMFp2Y20wNklFaFVUVXhGYkdWdFpXNTBMQ0J3WVhKaGJYTTZJRlZOUVZCUGNIUnBiMjV6SUh3Z1ZGTk9SVTl3ZEdsdmJuTWdmQ0JFUWxOallXNVBjSFJwYjI1ektUb2dTRlJOVEVWc1pXMWxiblFnZTF4dUlDQWdJQ0FnZFdrdVpXMXdkSGtvY0dGeVlXMXpSbTl5YlNrN1hHNGdJQ0FnSUNCUFltcGxZM1F1YTJWNWN5aHdZWEpoYlhNcExtWnZja1ZoWTJnb0tHbDBPaUJoYm5rcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjR0Z5WVcwNklFbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJTQjhJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiVHh6ZEhKcGJtYytJSHdnU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0UEdKdmIyeGxZVzQrSUQxY2JpQWdJQ0FnSUNBZ0lDQW9jR0Z5WVcxeklHRnpJR0Z1ZVNsYmFYUmRPMXh1WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMElEMGdjR0Z5WVcwdWRIbHdaU0E5UFQwZ0ozTjBjbWx1WnljZ1AxeHVJQ0FnSUNBZ0lDQWdJSFZwTG5OMGNtbHVaMGx1Y0hWMEtIQmhjbUZ0TG5WcFRtRnRaU3dnY0dGeVlXMHVkbUZzZFdVZ1B6OGdKeWNzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhjbUZ0TG5aaGJIVmxJRDBnS0dsdWNIVjBJR0Z6SUVSSExrbHVjSFYwUW1GelpUeHpkSEpwYm1jK0tTNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQjlLU0E2SUhCaGNtRnRMblI1Y0dVZ1BUMDlJQ2RpYjI5c1pXRnVKeUEvWEc0Z0lDQWdJQ0FnSUNBZ0lDQjFhUzVpYjI5c1NXNXdkWFFvY0dGeVlXMHVkV2xPWVcxbExDQndZWEpoYlM1MllXeDFaU0EvUHlCbVlXeHpaU3dnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQndZWEpoYlM1MllXeDFaU0E5SUNocGJuQjFkQ0JoY3lCRVJ5NUpibkIxZEVKaGMyVThZbTl2YkdWaGJqNHBMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnZFdrdVpteHZZWFJKYm5CMWRDaHdZWEpoYlM1MWFVNWhiV1VzSUhCaGNtRnRMblpoYkhWbElHRnpJR0Z1ZVN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J3WVhKaGJTNTJZV3gxWlNBOUlHbHVjSFYwTG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJSEJoY21GdGMwWnZjbTB1WVhCd1pXNWtLR2x1Y0hWMExuSnZiM1FwTzF4dUlDQWdJQ0FnSUNCcFppQW9jR0Z5WVcwdVpHbHpZV0pzWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x1Y0hWMExtVnVZV0pzWldRZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQjFhUzUwYjI5c2RHbHdMbUpwYm1Rb2FXNXdkWFF1YVc1d2RYUWdQejhnYVc1d2RYUXVjbTl2ZEN3Z2NHRnlZVzB1WkdsellXSnNaVlJ2YjJ4MGFYQWdQejhnSnljcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2V5QjFhUzUwYjI5c2RHbHdMbUpwYm1Rb2FXNXdkWFF1YVc1d2RYUWdQejhnYVc1d2RYUXVjbTl2ZEN3Z2NHRnlZVzB1ZEc5dmJIUnBjQ2s3SUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUhCaGNtRnRjMFp2Y20wN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0hKcGRtRjBaU0JoYzNsdVl5QmpjbVZoZEdWUWNtVndjbTlqWlhOemFXNW5SblZ1WTFCaGNtRnRjMFJwZGlod1lYSmhiWE5HYjNKdE9pQklWRTFNUld4bGJXVnVkQ3dnWm5WdVl6b2dSRWN1Um5WdVl5azZJRkJ5YjIxcGMyVThTRlJOVEVWc1pXMWxiblErSUh0Y2JpQWdJQ0FnSUhWcExtVnRjSFI1S0hCaGNtRnRjMFp2Y20wcE8xeHVJQ0FnSUNBZ2FXWWdLR1oxYm1NdWFXNXdkWFJ6TG14bGJtZDBhQ0E4SURNcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWFTNWthWFlvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR1pqSUQwZ1puVnVZeTV3Y21Wd1lYSmxLQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnBibkIxZEhNZ1BTQmhkMkZwZENCbVl5NWlkV2xzWkVWa2FYUnZjaWgxYVM1a2FYWW9LU2s3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01qc2dhU0E4SUdaMWJtTXVhVzV3ZFhSekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1pKYm5CMWRDQTlJR1oxYm1NdWFXNXdkWFJ6VzJsZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ2ZId2dabU11YVc1d2RYUlFZWEpoYlhOYlpuVnVZeTVwYm5CMWRITmJhVjB1Ym1GdFpWMHVkbUZzZFdVZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnWmtsdWNIVjBMbVJsWm1GMWJIUldZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQxY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQ4L0lHWmpMbWx1Y0hWMFVHRnlZVzF6VzJaSmJuQjFkQzV1WVcxbFhTNTJZV3gxWlNBL1B5Qm1TVzV3ZFhRdVpHVm1ZWFZzZEZaaGJIVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMElEMGdhVzV3ZFhSekxtWnBibVFvS0dsdWNDa2dQVDRnYVc1d0xuQnliM0JsY25SNUxtNWhiV1VnUFQwOUlHWkpibkIxZEM1dVlXMWxLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnBibkIxZENsY2JpQWdJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM05iWmtsdWNIVjBMbTVoYldWZElDRTlQU0J1ZFd4c0lDWW1YRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ0lUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkQzUyWVd4MVpTQTlJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBOUlHbHVjSFYwTG5aaGJIVmxPeUI5S1R0Y2JpQWdJQ0FnSUNBZ2NHRnlZVzF6Um05eWJTNWhjSEJsYm1Rb2FXNXdkWFF1Y205dmRDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z2NHRnlZVzF6Um05eWJUdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nWjJWMFJXUnBkRzl5S0NrNklFaFVUVXhGYkdWdFpXNTBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjFhUzVrYVhZb1cxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5SaFlteGxTVzV3ZFhRc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5c1NXNXdkWFJTYjI5MExGeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwVW05dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6UkdsMkxGeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMExGeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpSR2wyTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEZKdmIzUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHeHZkRVZ0WW1Wa1pHbHVaM05KYm5CMWRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1amJIVnpkR1Z5UlcxaVpXUmthVzVuYzBsdWNIVjBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtUmlVMk5oYmxObGRIUnBibWR6UkdsMlhHNGdJQ0FnSUNCZExDQjdjM1I1YkdVNklIdHRhVzVYYVdSMGFEb2dKelF5TUhCNEozMHNJR05zWVhOelpYTTZJQ2QxYVMxbWIzSnRJR1JwYlMxeVpXUjFZM1JwYjI0dFpHbGhiRzluTFdadmNtMG5mU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjSFZpYkdsaklHZGxkRkJoY21GdGN5Z3BPaUJFYVcxU1pXUjFZM1JwYjI1UVlYSmhiWE1nZTF4dUlDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnZEdGaWJHVTZJSFJvYVhNdWRHRmliR1ZKYm5CMWRDNTJZV3gxWlNFc1hHNGdJQ0FnSUNBZ0lHTnZiRG9nZEdocGN5NWpiMnhKYm5CMWRDNTJZV3gxWlNFc1hHNGdJQ0FnSUNBZ0lHMWxkR2h2WkU1aGJXVTZJSFJvYVhNdWJXVjBhRzlrU1c1d2RYUXVkbUZzZFdVaExGeHVJQ0FnSUNBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjQ2SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXM1JvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWRtRnNkV1VoWFM1bWRXNWpMRnh1SUNBZ0lDQWdJQ0J6YVcxcGJHRnlhWFI1VFdWMGNtbGpPaUIwYUdsekxuTnBiV2xzWVhKcGRIbE5aWFJ5YVdOSmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJSEJzYjNSRmJXSmxaR1JwYm1kek9pQjBhR2x6TG5Cc2IzUkZiV0psWkdScGJtZHpTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCamJIVnpkR1Z5UlcxaVpXUmthVzVuY3pvZ2RHaHBjeTVqYkhWemRHVnlSVzFpWldSa2FXNW5jMGx1Y0hWMExuWmhiSFZsSVN4Y2JpQWdJQ0FnSUNBZ2IzQjBhVzl1Y3pvZ2V5NHVMblJvYVhNdVlXeG5iM0pwZEdodFQzQjBhVzl1Y3l3Z0xpNHVkR2hwY3k1a1lsTmpZVzVQY0hScGIyNXpMRnh1SUNBZ0lDQWdJQ0FnSUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqUVhKbmN6b2dLSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTWdQejhnZTMwcGZWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNTlYRzRpWFgwPSIsImV4cG9ydCBjb25zdCBESU1fUkVEX1BSRVBST0NFU1NJTkdfRlVOQ1RJT05fVEFHID0gJ2RpbS1yZWQtcHJlcHJvY2Vzc2luZy1mdW5jdGlvbic7XG5leHBvcnQgY29uc3QgRElNX1JFRF9QT1NUUFJPQ0VTU0lOR19GVU5DVElPTl9UQUcgPSAnZGltLXJlZC1wb3N0cHJvY2Vzc2luZy1mdW5jdGlvbic7XG5leHBvcnQgY29uc3QgRElNX1JFRF9ERUZBVUxUX1BPU1RQUk9DRVNTSU5HX0ZVTkNUSU9OX01FVEEgPSAnZGVmYXVsdFBvc3RQcm9jZXNzaW5nRnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9TRU1UWVBFU19UQUcgPSAnc3VwcG9ydGVkU2VtVHlwZXMnO1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9UWVBFU19UQUcgPSAnc3VwcG9ydGVkVHlwZXMnO1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9VTklUU19UQUcgPSAnc3VwcG9ydGVkVW5pdHMnO1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9ESVNUQU5DRV9GVU5DVElPTlNfVEFHID0gJ3N1cHBvcnRlZERpc3RhbmNlRnVuY3Rpb25zJztcbmV4cG9ydCBjb25zdCBCWVBBU1NfTEFSR0VfREFUQV9XQVJOSU5HID0gJ2J5cGFzc0xhcmdlRGF0YVdhcm5pbmcnO1xuZXhwb3J0IGNvbnN0IFNIT1dfU0NBVFRFUlBMT1RfUFJPR1JFU1MgPSAnc2hvdy1zY2F0dGVycGxvdC1wcm9ncmVzcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1YzNSekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWTI5dWMzUnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eE5RVUZOTEd0RFFVRnJReXhIUVVGSExHZERRVUZuUXl4RFFVRkRPMEZCUTI1R0xFMUJRVTBzUTBGQlF5eE5RVUZOTEcxRFFVRnRReXhIUVVGSExHbERRVUZwUXl4RFFVRkRPMEZCUTNKR0xFMUJRVTBzUTBGQlF5eE5RVUZOTERSRFFVRTBReXhIUVVGSExDdENRVUVyUWl4RFFVRkRPMEZCUXpWR0xFMUJRVTBzUTBGQlF5eE5RVUZOTEhOQ1FVRnpRaXhIUVVGSExHMUNRVUZ0UWl4RFFVRkRPMEZCUXpGRUxFMUJRVTBzUTBGQlF5eE5RVUZOTEcxQ1FVRnRRaXhIUVVGSExHZENRVUZuUWl4RFFVRkRPMEZCUTNCRUxFMUJRVTBzUTBGQlF5eE5RVUZOTEcxQ1FVRnRRaXhIUVVGSExHZENRVUZuUWl4RFFVRkRPMEZCUTNCRUxFMUJRVTBzUTBGQlF5eE5RVUZOTEdkRFFVRm5ReXhIUVVGSExEUkNRVUUwUWl4RFFVRkRPMEZCUXpkRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEhsQ1FVRjVRaXhIUVVGSExIZENRVUYzUWl4RFFVRkRPMEZCUTJ4RkxFMUJRVTBzUTBGQlF5eE5RVUZOTEhsQ1FVRjVRaXhIUVVGSExESkNRVUV5UWl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR052Ym5OMElFUkpUVjlTUlVSZlVGSkZVRkpQUTBWVFUwbE9SMTlHVlU1RFZFbFBUbDlVUVVjZ1BTQW5aR2x0TFhKbFpDMXdjbVZ3Y205alpYTnphVzVuTFdaMWJtTjBhVzl1Snp0Y2JtVjRjRzl5ZENCamIyNXpkQ0JFU1UxZlVrVkVYMUJQVTFSUVVrOURSVk5UU1U1SFgwWlZUa05VU1U5T1gxUkJSeUE5SUNka2FXMHRjbVZrTFhCdmMzUndjbTlqWlhOemFXNW5MV1oxYm1OMGFXOXVKenRjYm1WNGNHOXlkQ0JqYjI1emRDQkVTVTFmVWtWRVgwUkZSa0ZWVEZSZlVFOVRWRkJTVDBORlUxTkpUa2RmUmxWT1ExUkpUMDVmVFVWVVFTQTlJQ2RrWldaaGRXeDBVRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmljN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnVTFWUVVFOVNWRVZFWDFORlRWUlpVRVZUWDFSQlJ5QTlJQ2R6ZFhCd2IzSjBaV1JUWlcxVWVYQmxjeWM3WEc1bGVIQnZjblFnWTI5dWMzUWdVMVZRVUU5U1ZFVkVYMVJaVUVWVFgxUkJSeUE5SUNkemRYQndiM0owWldSVWVYQmxjeWM3WEc1bGVIQnZjblFnWTI5dWMzUWdVMVZRVUU5U1ZFVkVYMVZPU1ZSVFgxUkJSeUE5SUNkemRYQndiM0owWldSVmJtbDBjeWM3WEc1bGVIQnZjblFnWTI5dWMzUWdVMVZRVUU5U1ZFVkVYMFJKVTFSQlRrTkZYMFpWVGtOVVNVOU9VMTlVUVVjZ1BTQW5jM1Z3Y0c5eWRHVmtSR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTW5PMXh1Wlhod2IzSjBJR052Ym5OMElFSlpVRUZUVTE5TVFWSkhSVjlFUVZSQlgxZEJVazVKVGtjZ1BTQW5Zbmx3WVhOelRHRnlaMlZFWVhSaFYyRnlibWx1WnljN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnVTBoUFYxOVRRMEZVVkVWU1VFeFBWRjlRVWs5SFVrVlRVeUE5SUNkemFHOTNMWE5qWVhSMFpYSndiRzkwTFhCeWIyZHlaWE56Snp0Y2JpSmRmUT09IiwiZXhwb3J0IHZhciBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcztcbihmdW5jdGlvbiAoRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMpIHtcbiAgICBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kc1tcIkVVQ0xJREVBTlwiXSA9IFwiRVVDTElERUFOXCI7XG4gICAgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHNbXCJNQU5IQVRUQU5cIl0gPSBcIk1BTkhBVFRBTlwiO1xufSkoRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgfHwgKERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzID0ge30pKTtcbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaWE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hOUVVGTkxFTkJRVTRzU1VGQldTd3dRa0ZIVkR0QlFVaElMRmRCUVZrc01FSkJRVEJDTzBsQlEyeERMSEZFUVVGMVFpeERRVUZCTzBsQlEzWkNMSEZFUVVGMVFpeERRVUZCTzBGQlEzcENMRU5CUVVNc1JVRklVeXd3UWtGQk1FSXNTMEZCTVVJc01FSkJRVEJDTEZGQlIyNURPMEZCUVVFc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1WNGNHOXlkQ0JsYm5WdElFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSeklIdGNiaUFnSUNCRlZVTk1TVVJGUVU0Z1BTQW5SVlZEVEVsRVJVRk9KeXhjYmlBZ0lDQk5RVTVJUVZSVVFVNGdQU0FuVFVGT1NFRlVWRUZPSnl4Y2JpQWdmVHRjYmx4dVpYaHdiM0owSUhSNWNHVWdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDQTlJR3RsZVc5bUlIUjVjR1Z2WmlCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrY3p0Y2JpSmRmUT09IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJ4anM7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBEaW1SZWR1Y3Rpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBEQlNjYW5PcHRpb25zIH0gZnJvbSAnLi4vZnVuY3Rpb25FZGl0b3JzL2RpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi1lZGl0b3InO1xuaW1wb3J0IHsgRElNX1JFRF9ERUZBVUxUX1BPU1RQUk9DRVNTSU5HX0ZVTkNUSU9OX01FVEEsIERJTV9SRURfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fVEFHLCBESU1fUkVEX1BSRVBST0NFU1NJTkdfRlVOQ1RJT05fVEFHLCBTVVBQT1JURURfRElTVEFOQ0VfRlVOQ1RJT05TX1RBRywgU1VQUE9SVEVEX1NFTVRZUEVTX1RBRywgU1VQUE9SVEVEX1RZUEVTX1RBRywgU1VQUE9SVEVEX1VOSVRTX1RBRyB9IGZyb20gJy4uL2Z1bmN0aW9uRWRpdG9ycy9jb25zdHMnO1xuaW1wb3J0IHsgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgfSBmcm9tICcuLi9kaXN0YW5jZS1tYXRyaXgvdHlwZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICcuLi8uLi9jc3Mvc3R5bGVzLmNzcyc7XG5pbXBvcnQgeyBnZXRHUFVBZGFwdGVyRGVzY3JpcHRpb24gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UnO1xuZXhwb3J0IGNsYXNzIFVNQVBPcHRpb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sZWFybmluZ1JhdGUgPSB7IHVpTmFtZTogJ0xlYXJuaW5pZyByYXRlJywgdmFsdWU6IDEsIHRvb2x0aXA6ICdUaGUgaW5pdGlhbCBsZWFybmluZyByYXRlIGZvciB0aGUgZW1iZWRkaW5nIG9wdGltaXphdGlvbicgfTtcbiAgICAgICAgLy8gbkNvbXBvbmVudHM6IElEaW1SZWR1Y3Rpb25QYXJhbSA9XG4gICAgICAgIC8vIHt1aU5hbWU6ICdDb21wb25lbnRzJywgdmFsdWU6IDIsIHRvb2x0aXA6ICdUaGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgKGRpbWVuc2lvbnMpIHRvIHByb2plY3QgdGhlIGRhdGEgdG8nfTtcbiAgICAgICAgdGhpcy5uRXBvY2hzID0geyB1aU5hbWU6ICdFcG9jaHMnLCB2YWx1ZTogMCxcbiAgICAgICAgICAgIHRvb2x0aXA6ICdUaGUgbnVtYmVyIG9mIGVwb2NocyB0byBvcHRpbWl6ZSBlbWJlZGRpbmdzIHZpYSBTR0QuIENvbXB1dGVkIGF1dG9tYXRpY2FsbHkgaWYgc2V0IHRvIDAnIH07XG4gICAgICAgIHRoaXMubk5laWdoYm9ycyA9IHsgdWlOYW1lOiAnTmVpZ2hib3JzJywgdmFsdWU6IDE1LCB0b29sdGlwOiAnVGhlIG51bWJlciBvZiBuZWFyZXN0IG5laWdoYm9ycyB0byBjb25zdHJ1Y3QgdGhlIGZ1enp5IG1hbmlmb2xkJyB9O1xuICAgICAgICB0aGlzLnNwcmVhZCA9IHsgdWlOYW1lOiAnU3ByZWFkJywgdmFsdWU6IDEsXG4gICAgICAgICAgICB0b29sdGlwOiBgVGhlIGVmZmVjdGl2ZSBzY2FsZSBvZiBlbWJlZGRlZCBwb2ludHMsIHVzZWQgd2l0aCBtaW4gZGlzdGFuY2UgdG8gY29udHJvbCBcbiAgICB0aGUgY2x1bXBlZC9kaXNwZXJzZWQgbmF0dXJlIG9mIHRoZSBlbWJlZGRpbmdgIH07XG4gICAgICAgIHRoaXMubWluRGlzdCA9IHsgdWlOYW1lOiAnTWluIGRpc3RhbmNlJywgdmFsdWU6IDAuMSxcbiAgICAgICAgICAgIHRvb2x0aXA6IGBUaGUgZWZmZWN0aXZlIG1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiBlbWJlZGRlZCBwb2ludHMsIFxuICB1c2VkIHdpdGggc3ByZWFkIHRvIGNvbnRyb2wgdGhlIGNsdW1wZWQvZGlzcGVyc2VkIG5hdHVyZSBvZiB0aGUgZW1iZWRkaW5nYCB9O1xuICAgICAgICB0aGlzLnJhbmRvbVNlZWQgPSB7IHVpTmFtZTogJ1JhbmRvbSBzZWVkJywgdmFsdWU6IG51bGwsIHRvb2x0aXA6ICdSYW5kb20gc2VlZCcsIHR5cGU6ICdzdHJpbmcnIH07XG4gICAgICAgIHRoaXMudXNlV2ViR1BVID0geyB1aU5hbWU6ICdVc2UgV2ViR1BVJywgdmFsdWU6IGZhbHNlLCB0b29sdGlwOiAnVXNlIFdlYkdQVSBmb3IgS05OIGNvbXB1dGF0aW9ucycsIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIGRpc2FibGVUb29sdGlwOiAnV2ViR1BVIGlzIG5vdCBhdmFpbGFibGUnIH07XG4gICAgICAgIGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbigpLnRoZW4oKGRlc2MpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFUudG9vbHRpcCArPSBgICgke2Rlc2N9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlV2ViR1BVLmRpc2FibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgO1xufVxuZXhwb3J0IGNsYXNzIFRTTkVPcHRpb25zIHtcbiAgICAvLyBkaW06IElEaW1SZWR1Y3Rpb25QYXJhbSA9IHt1aU5hbWU6ICdEaW1lbnNpb25hbGl0eScsIHZhbHVlOiAyLCB0b29sdGlwOiAnRGltZW5zaW9uYWxpdHkgb2YgdGhlIGVtYmVkZGluZyd9O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmVwc2lsb24gPSB7IHVpTmFtZTogJ0Vwc2lsb24nLCB2YWx1ZTogMTAsIHRvb2x0aXA6ICdFcHNpbG9uIGlzIGxlYXJuaW5nIHJhdGUnIH07XG4gICAgICAgIHRoaXMucGVycGxleGl0eSA9IHsgdWlOYW1lOiAnUGVycGxleGl0eScsIHZhbHVlOiAzMCwgdG9vbHRpcDogJ1JvdWdobHkgaG93IG1hbnkgbmVpZ2hib3JzIGVhY2ggcG9pbnQgaW5mbHVlbmNlcycgfTtcbiAgICB9XG4gICAgO1xufVxuZXhwb3J0IGNsYXNzIE11bHRpQ29sdW1uRGltUmVkdWN0aW9uRWRpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JTZXR0aW5ncyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzID0gW107XG4gICAgICAgIHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QgPSB1aS5kaXYoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JSb290ID0gdWkuZGl2KCk7XG4gICAgICAgIHRoaXMud2VpZ2h0c0VkaXRvclJvb3QgPSB1aS5kaXYoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5tZXRob2RzUGFyYW1zID0ge1xuICAgICAgICAgICAgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUF06IG5ldyBVTUFQT3B0aW9ucygpLFxuICAgICAgICAgICAgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVF9TTkVdOiBuZXcgVFNORU9wdGlvbnMoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRiU2NhblBhcmFtcyA9IG5ldyBEQlNjYW5PcHRpb25zKCk7XG4gICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NEaXZzID0gW107XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zID0ge307XG4gICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NBbmNob3IgPSB1aS5kaXYoKTtcbiAgICAgICAgdGhpcy5wbG90RW1iZWRkaW5nc0lucHV0ID0gdWkuYm9vbElucHV0KCdQbG90IGVtYmVkZGluZ3MnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0FnZ3JlZ2F0aW9uJywgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuRVVDTElERUFOLCBbRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuRVVDTElERUFOLCBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5NQU5IQVRUQU5dKTtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnNldFRvb2x0aXAoJ0FnZ3JlZ2F0aW9uIG1ldGhvZCBmb3IgY29tYmluaW5nIGRpc3RhbmNlcyBiZXR3ZWVuIGNvbHVtbnMnKTtcbiAgICAgICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXR0aW5ncyA9IGVkaXRvclNldHRpbmdzO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbiA9IHVpLmFjY29yZGlvbigpO1xuICAgICAgICBjb25zdCBwcmVwb3JjZXNzaW5nRnVuY3MgPSBERy5GdW5jLmZpbmQoeyB0YWdzOiBbRElNX1JFRF9QUkVQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBR10gfSk7XG4gICAgICAgIHByZXBvcmNlc3NpbmdGdW5jcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZW1UeXBlcyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1NFTVRZUEVTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZi5mcmllbmRseU5hbWUgPz8gZi5uYW1lO1xuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9UWVBFU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9VTklUU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGdW5jdGlvbnMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9ESVNUQU5DRV9GVU5DVElPTlNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLnNlbXR5cGUgJiYgIXNlbVR5cGVzLmluY2x1ZGVzKHRoaXMuZWRpdG9yU2V0dGluZ3Muc2VtdHlwZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3MudHlwZSAmJiAhdHlwZXMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy50eXBlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy51bml0cyAmJiAhdW5pdHMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy51bml0cykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgZnVuYzogZixcbiAgICAgICAgICAgICAgICBzZW1UeXBlczogc2VtVHlwZXMgPyBzZW1UeXBlcy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgdHlwZXM6IHR5cGVzID8gdHlwZXMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIHVuaXRzOiB1bml0cyA/IHVuaXRzLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZ1bmN0aW9uczogZGlzdGFuY2VGdW5jdGlvbnMgPyBkaXN0YW5jZUZ1bmN0aW9ucy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0VkaXRvciA9IG5ldyBQb3N0UHJvY2Vzc2luZ0Z1bmNFZGl0b3IoKTtcbiAgICAgICAgdGhpcy50YWJsZUlucHV0ID0gdWkudGFibGVJbnB1dCgnVGFibGUnLCBncm9rLnNoZWxsLnR2LmRhdGFGcmFtZSwgZ3Jvay5zaGVsbC50YWJsZXMsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UYWJsZUlucHV0Q2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlSW5wdXRDaGFuZ2VkKCk7XG4gICAgICAgIGxldCBzZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1ldGhvZElucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ01ldGhvZCcsIERpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgRGltUmVkdWN0aW9uTWV0aG9kcy5UX1NORV0sICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHtcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbmVkID0gIXNldHRpbmdzT3BlbmVkO1xuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc09wZW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NEaXZzLmZvckVhY2goKGl0KSA9PiBpdC5yZW1vdmUoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0RpdnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYodGhpcy5tZXRob2RzUGFyYW1zW3RoaXMubWV0aG9kSW5wdXQudmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJ01vZGlmeSBtZXRob2RzIHBhcmFtZXRlcnMnKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LnByZXBlbmQodGhpcy5tZXRob2RTZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbi5hZGRQYW5lKCdDb2x1bW4gb3B0aW9ucycsICgpID0+IHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QsIHRydWUsIG51bGwsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JBY2NvcmRpb24ucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvclJvb3QuYXBwZW5kQ2hpbGQodGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JBY2NvcmRpb24ucm9vdCk7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdC5hcHBlbmRDaGlsZCh0aGlzLndlaWdodHNFZGl0b3JSb290KTtcbiAgICB9XG4gICAgb25UYWJsZUlucHV0Q2hhbmdlZCgpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlSW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdGFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QpO1xuICAgICAgICB1aS5lbXB0eSh0aGlzLndlaWdodHNFZGl0b3JSb290KTtcbiAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLmNvbHVtbnMudG9MaXN0KCk7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucykuZm9yRWFjaCgoZnVuY05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS5zZW1UeXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS50eXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0cyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS51bml0cztcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlU3VwcG9ydGVkID0gIXNlbVR5cGVzLmxlbmd0aCB8fCAoY29sLnNlbVR5cGUgJiYgc2VtVHlwZXMuaW5jbHVkZXMoY29sLnNlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlU3Vwb3J0ZWQgPSAhdHlwZXMubGVuZ3RoIHx8IHR5cGVzLmluY2x1ZGVzKGNvbC50eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0c1N1cHBvcnRlZCA9ICF1bml0cy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUykgJiYgdW5pdHMuaW5jbHVkZXMoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSkpO1xuICAgICAgICAgICAgICAgIGlmIChzZW1UeXBlU3VwcG9ydGVkICYmIHR5cGVTdXBvcnRlZCAmJiB1bml0c1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0ucHVzaChmdW5jTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRDb2xOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwKTtcbiAgICAgICAgY29uc3QgY29sdW1uc0lucHV0ID0gdWkuY29sdW1uc0lucHV0KCdDb2x1bW5zJywgdGFibGUsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZC5uZXh0KCk7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290KTtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMud2VpZ2h0c0VkaXRvclJvb3QpO1xuICAgICAgICAgICAgY29uc3QgY29scyA9IGNvbHVtbnNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGlmICghY29scyB8fCBjb2xzPy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgIGlmICghY29scyB8fCBjb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbHVtbk9wdEVkaXRvcnMgPSBjb2xzLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBuZXcgRGltUmVkdWN0aW9uQ29sdW1uRWRpdG9yKGNvbCwgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdLm1hcCgoaXQpID0+IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2l0XSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0b3JDbGFzcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yc1Jvb3QgPSB1aS5kaXZWKFtdLCB7IHN0eWxlOiB7IG1heEhlaWdodDogJzQwMHB4Jywgb3ZlcmZsb3c6ICdhdXRvJyB9IH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzLmZvckVhY2goKGVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIGVkaXRvcnNSb290LmFwcGVuZENoaWxkKGVkaXRvci5hY2NvcmRpb25EaXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvL3RoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QuYXBwZW5kQ2hpbGQoZWRpdG9yc1Jvb3QpO1xuICAgICAgICAgICAgY29uc3QgZG91YmxlZENvbEVkaXRvcnMgPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5PcHRFZGl0b3JzLmxlbmd0aCAqIDIpLmZpbGwobnVsbClcbiAgICAgICAgICAgICAgICAubWFwKChfLCBpKSA9PiBpICUgMiA9PT0gMCA/IHRoaXMuY29sdW1uT3B0RWRpdG9yc1tpIC8gMl0uY29sT3B0RWRpdG9ycyA6IFtdKTtcbiAgICAgICAgICAgIGxldCBjID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdWkudGFibGUoZG91YmxlZENvbEVkaXRvcnMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgYysrO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0ubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zRWRpdG9yID0gKHRoaXMuY29sdW1uT3B0RWRpdG9yc1tNYXRoLmZsb29yKChjIC0gMSkgLyAyKV0ucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiA9IHVpLmRpdihbXSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbcGFyYW1zRWRpdG9yLCB1aS5kaXYoKSwgdWkuZGl2KCksIHVpLmRpdigpXTtcbiAgICAgICAgICAgIH0sIFsnQ29sdW1uJywgJ0VuY29kaW5nIGZ1bmN0aW9uJywgJ1NpbWlsYXJpdHkgbWV0cmljJywgJ1dlaWdodCddKTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uT3B0RWRpdG9yc1xuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgICAgIGl0LnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXY/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICc0Jyk7XG4gICAgICAgICAgICAgICAgaXQucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdj8ucGFyZW50RWxlbWVudD8ucGFyZW50RWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KCdoZWlnaHQnLCAndW5zZXQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uT3B0RWRpdG9ycy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgIHRhYmxlLmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci10YWJsZS1yb290Jyk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290LmFwcGVuZENoaWxkKHRhYmxlKTtcbiAgICAgICAgfSwgeyBhdmFpbGFibGU6IHN1cHBvcnRlZENvbE5hbWVzIH0pO1xuICAgICAgICBjb2x1bW5zSW5wdXQuZmlyZUNoYW5nZWQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbnNJbnB1dFJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0Um9vdCA9IGNvbHVtbnNJbnB1dC5yb290O1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zSW5wdXQgPSBjb2x1bW5zSW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLmNvbHVtbnNJbnB1dFJvb3QpO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zSW5wdXQgPSBjb2x1bW5zSW5wdXQ7XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuY29sdW1uc0lucHV0LnJvb3QuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGl0KSA9PiB0aGlzLmNvbHVtbnNJbnB1dFJvb3QuYXBwZW5kQ2hpbGQoaXQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVBbGdvcml0aG1TZXR0aW5nc0RpdihwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0RpdnMuZm9yRWFjaCgoaXQpID0+IGl0LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0RpdnMgPSBbXTtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5tZXRob2RTZXR0aW5nc0FuY2hvcjtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gYW5jaG9yLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghcGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpdF07XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHBhcmFtLnR5cGUgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICB1aS5zdHJpbmdJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlID8/ICcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkgOiBwYXJhbS50eXBlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgICAgIHVpLmJvb2xJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlID8/IGZhbHNlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkgOlxuICAgICAgICAgICAgICAgIHVpLmZsb2F0SW5wdXQocGFyYW0udWlOYW1lLCBwYXJhbS52YWx1ZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcmFtLmRpc2FibGUpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGlucHV0LmlucHV0ID8/IGlucHV0LnJvb3QsIHBhcmFtLmRpc2FibGVUb29sdGlwID8/ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuYmluZChpbnB1dC5pbnB1dCA/PyBpbnB1dC5yb290LCBwYXJhbS50b29sdGlwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoaW5wdXQucm9vdCwgYW5jaG9yKTtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NEaXZzLnB1c2goaW5wdXQucm9vdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgYWxnb3JpdGhtT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgYWxnb3JpdGhtUGFyYW1zID0gdGhpcy5tZXRob2RzUGFyYW1zW3RoaXMubWV0aG9kSW5wdXQudmFsdWVdO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGFsZ29yaXRobVBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtUGFyYW1zW2tleV0udmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBvcHRpb25zW2tleV0gPSBhbGdvcml0aG1QYXJhbXNba2V5XS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBnZXQgZGJTY2FuT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRiU2NhbkVwc2lsb246IHRoaXMuZGJTY2FuUGFyYW1zLmVwc2lsb24udmFsdWUgPz8gMC4wMSxcbiAgICAgICAgICAgIGRiU2Nhbk1pblB0czogdGhpcy5kYlNjYW5QYXJhbXMubWluUHRzLnZhbHVlID8/IDRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0RWRpdG9yKCkge1xuICAgICAgICBjb25zdCBkaXYgPSB1aS5kaXYoW1xuICAgICAgICAgICAgdGhpcy50YWJsZUlucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNJbnB1dFJvb3QsXG4gICAgICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvclJvb3QsXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMubWV0aG9kSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NBbmNob3IsXG4gICAgICAgICAgICB0aGlzLnBsb3RFbWJlZGRpbmdzSW5wdXQsXG4gICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRWRpdG9yLnJvb3QsXG4gICAgICAgIF0sIHsgc3R5bGU6IHsgbWluV2lkdGg6ICc0MjBweCcgfSwgY2xhc3NlczogJ2RpbS1yZWR1Y3Rpb24tZGlhbG9nLWZvcm0nIH0pO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH1cbiAgICBnZXRQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZUlucHV0LnZhbHVlLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBtZXRob2ROYW1lOiB0aGlzLm1ldGhvZElucHV0LnZhbHVlLFxuICAgICAgICAgICAgcHJlcHJvY2Vzc2luZ0Z1bmN0aW9uczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnByZVByb2Nlc3NpbmdGdW5jdGlvbiksXG4gICAgICAgICAgICBkaXN0YW5jZU1ldHJpY3M6IHRoaXMuY29sdW1uT3B0RWRpdG9ycy5tYXAoKGl0KSA9PiBpdC5zaW1pbGFyaXR5TWV0cmljSW5wdXQudmFsdWUpLFxuICAgICAgICAgICAgd2VpZ2h0czogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LndlaWdodCA/PyAxKSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgLi4udGhpcy5hbGdvcml0aG1PcHRpb25zLCAuLi50aGlzLmRiU2Nhbk9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcHJlcHJvY2Vzc2luZ0Z1bmNBcmdzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MpIH0sXG4gICAgICAgICAgICBwbG90RW1iZWRkaW5nczogdGhpcy5wbG90RW1iZWRkaW5nc0lucHV0LnZhbHVlLFxuICAgICAgICAgICAgY2x1c3RlckVtYmVkZGluZ3M6IGZhbHNlLFxuICAgICAgICAgICAgcG9zdFByb2Nlc3NpbmdGdW5jdGlvbjogdGhpcy5wb3N0UHJvY2Vzc2luZ0VkaXRvci5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uLFxuICAgICAgICAgICAgcG9zdFByb2Nlc3NpbmdGdW5jdGlvbkFyZ3M6IHRoaXMucG9zdFByb2Nlc3NpbmdFZGl0b3IuYXJncyxcbiAgICAgICAgICAgIGFnZ3JlYWdncmVnYXRpb25NZXRob2Q6IHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC52YWx1ZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmNsYXNzIERpbVJlZHVjdGlvbkNvbHVtbkVkaXRvciB7XG4gICAgY29uc3RydWN0b3IoY29sdW1uLCBzdXBwb3J0ZWRGdW5jdGlvbnMpIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2ID0gdWkuZGl2KFtdKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncyA9IHt9O1xuICAgICAgICB0aGlzLmVkaXRvckRpdiA9IHVpLmRpdihbXSk7XG4gICAgICAgIHRoaXMuaGFzRXh0cmFTZXR0aW5ncyA9IHRydWU7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMubmVlZHNDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMud2VpZ2h0ID0gMTtcbiAgICAgICAgdGhpcy5jb2xPcHRFZGl0b3JzID0gW107XG4gICAgICAgIHRoaXMud2VpZ2h0SW5wdXQgPSB1aS5mbG9hdElucHV0KCdXZWlnaHQnLCAxLCAoKSA9PiB7IHRoaXMud2VpZ2h0ID0gdGhpcy53ZWlnaHRJbnB1dC52YWx1ZSA/PyAxOyB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIC8vIHNvcnQgYnkgc3BlY2lmaWNpdHlcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMgPSBzdXBwb3J0ZWRGdW5jdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKChhLnVuaXRzLmxlbmd0aCA9PT0gMCB8fCBiLnVuaXRzLmxlbmd0aCA9PT0gMCkgJiYgYS51bml0cy5sZW5ndGggIT09IGIudW5pdHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBiLnVuaXRzLmxlbmd0aCAtIGEudW5pdHMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGEudW5pdHMubGVuZ3RoICE9PSBiLnVuaXRzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gYS51bml0cy5sZW5ndGggLSBiLnVuaXRzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChhLnNlbVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBiLnNlbVR5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gYi5zZW1UeXBlcy5sZW5ndGggLSBhLnNlbVR5cGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChhLnNlbVR5cGVzLmxlbmd0aCAhPT0gYi5zZW1UeXBlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuc2VtVHlwZXMubGVuZ3RoIC0gYi5zZW1UeXBlcy5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gYS50eXBlcy5sZW5ndGggLSBiLnR5cGVzLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zTWFwW2dldEZ1bmNOYW1lKGYuZnVuYyldID0gZi5mdW5jO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dCA9IHVpLmNob2ljZUlucHV0KCdFbmNvZGluZyBmdW5jdGlvbicsIGdldEZ1bmNOYW1lKHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmZ1bmMpLCB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucy5tYXAoKGl0KSA9PiBnZXRGdW5jTmFtZShpdC5mdW5jKSksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5mdW5jdGlvbnNNYXBbdmFsXTtcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuaGFzRXh0cmFTZXR0aW5ncyA9IGZ1bmMuaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgICAgICBjb25zdCBzdXBGID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMuZmluZCgoaXQpID0+IGdldEZ1bmNOYW1lKGl0LmZ1bmMpID09PSB2YWwpO1xuICAgICAgICAgICAgdGhpcy5nZXRTaW1pbGFyaXR5TWV0cmljSW5wdXQoc3VwRik7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgc2V0dGluZ3NPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNFeHRyYVNldHRpbmdzKVxuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGhpcy5jcmVhdGVTZXR0aW5nc0Rpdih0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYsIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmZ1bmMpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7IHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdik7IH0pO1xuICAgICAgICB0aGlzLmdldFNpbWlsYXJpdHlNZXRyaWNJbnB1dCh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1swXSk7XG4gICAgICAgIHRoaXMuaGFzRXh0cmFTZXR0aW5ncyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmZ1bmMuaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGxldCBzZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgc2V0dGluZ3NPcGVuZWQgPSAhc2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNldHRpbmdzRGl2KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiwgdGhpcy5mdW5jdGlvbnNNYXBbdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJ01vZGlmeSBlbmNvZGluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24pO1xuICAgICAgICBpZiAoIXRoaXMuaGFzRXh0cmFTZXR0aW5ncylcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB0aGlzLm5lZWRzQ29uZmlndXJhdGlvbiA9ICEoc3VwcG9ydGVkRnVuY3Rpb25zLmxlbmd0aCA8IDIgJiYgIXRoaXMuaGFzRXh0cmFTZXR0aW5ncyAmJlxuICAgICAgICAgICAgc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmRpc3RhbmNlRnVuY3Rpb25zLmxlbmd0aCA8IDIpO1xuICAgICAgICBjb25zdCBjb2x1bW5UaXRsZSA9IHVpLmgzKHRoaXMuY29sdW1uLm5hbWUsIHsgY2xhc3NlczogJ21sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1jb2x1bW4tdGl0bGUnIH0pO1xuICAgICAgICB0aGlzLmNvbE9wdEVkaXRvcnMgPSBbXG4gICAgICAgICAgICBjb2x1bW5UaXRsZSwgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LCB0aGlzLndlaWdodElucHV0LnJvb3RcbiAgICAgICAgXTtcbiAgICAgICAgLy8gYXNzaWduIHRvb2x0aXBzXG4gICAgICAgIHVpLnRvb2x0aXAuYmluZChjb2x1bW5UaXRsZSwgdGhpcy5jb2x1bW4ubmFtZSk7XG4gICAgICAgIC8vIHRoaXMuY29sT3B0RWRpdG9ycy5mb3JFYWNoKChpdCwgaSkgPT4ge1xuICAgICAgICAvLyAgIGl0LnN0eWxlLndpZHRoID0gYCR7ZWRpdG9yV2lkdGhzW2ldfSVgO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy9hZGQgY2xhc3Nlc1xuICAgICAgICB0aGlzLmNvbE9wdEVkaXRvcnMuZm9yRWFjaCgoaXQpID0+IGl0LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290JykpO1xuICAgICAgICBjb25zdCBkaXN0YW5jZU9wdGlvbnNEaXYgPSB1aS5kaXZIKHRoaXMuY29sT3B0RWRpdG9ycywgeyBjbGFzc2VzOiAnbWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLXJvb3QnIH0pO1xuICAgICAgICB0aGlzLmFjY29yZGlvbkRpdiA9IHVpLmRpdlYoW10pO1xuICAgICAgICB0aGlzLmVkaXRvckRpdi5hcHBlbmRDaGlsZChkaXN0YW5jZU9wdGlvbnNEaXYpO1xuICAgICAgICB0aGlzLmVkaXRvckRpdi5hcHBlbmRDaGlsZCh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICB0aGlzLmFjY29yZGlvbkRpdi5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvckRpdik7XG4gICAgfVxuICAgIGdldFNpbWlsYXJpdHlNZXRyaWNJbnB1dChwcmVGdW5jKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ1NpbWlsYXJpdHkgbWV0cmljJywgcHJlRnVuYy5kaXN0YW5jZUZ1bmN0aW9uc1swXSwgcHJlRnVuYy5kaXN0YW5jZUZ1bmN0aW9ucyk7XG4gICAgICAgIGlmICghdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290KSB7XG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QgPSBpbnB1dC5yb290O1xuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCk7XG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dCA9IGlucHV0O1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpdCkgPT4gdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LmFwcGVuZENoaWxkKGl0KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHByZVByb2Nlc3NpbmdGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zTWFwW3RoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWVdO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVTZXR0aW5nc0RpdihwYXJhbXNGb3JtLCBmdW5jKSB7XG4gICAgICAgIHVpLmVtcHR5KHBhcmFtc0Zvcm0pO1xuICAgICAgICBpZiAoZnVuYy5pbnB1dHMubGVuZ3RoIDwgMylcbiAgICAgICAgICAgIHJldHVybiB1aS5kaXYoKTtcbiAgICAgICAgY29uc3QgZmMgPSBmdW5jLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZmMuYnVpbGRFZGl0b3IodWkuZGl2KCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGZ1bmMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmSW5wdXQgPSBmdW5jLmlucHV0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdIHx8XG4gICAgICAgICAgICAgICAgZmMuaW5wdXRQYXJhbXNbZnVuYy5pbnB1dHNbaV0ubmFtZV0udmFsdWUgfHwgZklucHV0LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWwpXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gPSB2YWw7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0cy5maW5kKChpbnApID0+IGlucC5wcm9wZXJ0eS5uYW1lID09PSBmSW5wdXQubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWlucHV0KVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdO1xuICAgICAgICAgICAgaW5wdXQub25DaGFuZ2VkKCgpID0+IHsgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gPSBpbnB1dC52YWx1ZTsgfSk7XG4gICAgICAgICAgICBwYXJhbXNGb3JtLmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbXNGb3JtLnN0eWxlLm1hcmdpbkJvdHRvbSA9ICcxMHB4JztcbiAgICAgICAgcmV0dXJuIHBhcmFtc0Zvcm07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgIHJldHVybiBmdW5jLmZyaWVuZGx5TmFtZSA/PyBmdW5jLm5hbWU7XG59XG5jbGFzcyBQb3N0UHJvY2Vzc2luZ0Z1bmNFZGl0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10pO1xuICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0FyZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5fYXJnc0VsZW1lbnQgPSB1aS5kaXYoW10pO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc0ljb24gPSB1aS5pY29ucy5zZXR0aW5ncyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5nc09wZW5lZCA9ICF0aGlzLl9zZXR0aW5nc09wZW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fYXJnc0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgY29uc3QgcG9zdFByb2Nlc3NpbmdGdW5jcyA9IERHLkZ1bmMuZmluZCh7IHRhZ3M6IFtESU1fUkVEX1BPU1RQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBR10gfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYuaW5wdXRzLmxlbmd0aCA+PSAyKTtcbiAgICAgICAgcG9zdFByb2Nlc3NpbmdGdW5jcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZi5mcmllbmRseU5hbWUgPz8gZi5uYW1lO1xuICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcFtuYW1lXSA9IGY7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwWydOb25lJ10gPSBudWxsO1xuICAgICAgICBjb25zdCBkZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jID0gT2JqZWN0LmtleXModGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcCkuZmluZCgoaXQpID0+ICEhdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcFtpdF0/Lm9wdGlvbnM/LltESU1fUkVEX0RFRkFVTFRfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fTUVUQV0pID8/ICdOb25lJztcbiAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQgPVxuICAgICAgICAgICAgdWkuY2hvaWNlSW5wdXQoJ1Bvc3Rwcm9jZXNzaW5nJywgZGVmYXVsdFBvc3RQcm9jZXNzaW5nRnVuYywgT2JqZWN0LmtleXModGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcCksIGFzeW5jICgpID0+IHsgYXdhaXQgdGhpcy5vbkZ1bmN0aW9uQ2hhbmdlZCgpOyB9LCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5vbkZ1bmN0aW9uQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5udWxsYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3QucHJlcGVuZCh0aGlzLl9zZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLl9yb290LmFwcGVuZENoaWxkKHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3QpO1xuICAgICAgICB0aGlzLl9yb290LmFwcGVuZENoaWxkKHRoaXMuX2FyZ3NFbGVtZW50KTtcbiAgICB9XG4gICAgZ2V0IHBvc3RQcm9jZXNzaW5nRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZSA/XG4gICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwW3RoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnZhbHVlXSA6IG51bGw7XG4gICAgfVxuICAgIGFzeW5jIG9uRnVuY3Rpb25DaGFuZ2VkKCkge1xuICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uO1xuICAgICAgICB1aS5lbXB0eSh0aGlzLl9hcmdzRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJncyA9IHt9O1xuICAgICAgICBpZiAoIWZ1bmMgfHwgZnVuYy5pbnB1dHMubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgY29uc3QgZmMgPSBmdW5jLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZmMuYnVpbGRFZGl0b3IodWkuZGl2KCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGZ1bmMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmSW5wdXQgPSBmdW5jLmlucHV0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJnc1tmSW5wdXQubmFtZV0gfHxcbiAgICAgICAgICAgICAgICBmYy5pbnB1dFBhcmFtc1tmdW5jLmlucHV0c1tpXS5uYW1lXS52YWx1ZSB8fCBmSW5wdXQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0FyZ3NbZklucHV0Lm5hbWVdID0gdmFsO1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wKSA9PiBpbnAucHJvcGVydHkubmFtZSA9PT0gZklucHV0Lm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZCgoKSA9PiB7IHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJnc1tmSW5wdXQubmFtZV0gPSBpbnB1dC52YWx1ZTsgfSk7XG4gICAgICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290O1xuICAgIH1cbiAgICBnZXQgYXJncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJncztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTNScGIyNHRaV1JwZEc5eUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYlhWc2RHa3RZMjlzZFcxdUxXUnBiUzF5WldSMVkzUnBiMjR0WldScGRHOXlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eEpRVUZKTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU03UVVGRE1VTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVTjBReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNSVUZCUXl4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEZOQlFWTXNRMEZCUXp0QlFVTTFReXhQUVVGUExFVkJRVFJDTEdGQlFXRXNSVUZCUXl4TlFVRk5MRzlFUVVGdlJDeERRVUZETzBGQlJ6VkhMRTlCUVU4c1JVRkJReXcwUTBGQk5FTXNSVUZCUlN4dFEwRkJiVU1zUlVGRGRrWXNhME5CUVd0RExFVkJRVVVzWjBOQlFXZERMRVZCUTNCRkxITkNRVUZ6UWl4RlFVRkZMRzFDUVVGdFFpeEZRVUZGTEcxQ1FVRnRRaXhGUVVGRExFMUJRVTBzTWtKQlFUSkNMRU5CUVVNN1FVRkRja2NzVDBGQlR5eEZRVUZETERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzTUVKQlFUQkNMRU5CUVVNN1FVRkZjRVVzVDBGQlR5eEZRVUZETEU5QlFVOHNSVUZCUXl4TlFVRk5MRTFCUVUwc1EwRkJRenRCUVVNM1FpeFBRVUZQTEhOQ1FVRnpRaXhEUVVGRE8wRkJRemxDTEU5QlFVOHNSVUZCUXl4M1FrRkJkMElzUlVGQlF5eE5RVUZOTEd0RVFVRnJSQ3hEUVVGRE8wRkJSVEZHTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCZFVKMFFqdFJRWFJDUVN4cFFrRkJXU3hIUVVOYUxFVkJRVU1zVFVGQlRTeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVXNUMEZCVHl4RlFVRkZMREJFUVVFd1JDeEZRVUZETEVOQlFVTTdVVUZETVVjc2IwTkJRVzlETzFGQlEzQkRMRFpIUVVFMlJ6dFJRVU0zUnl4WlFVRlBMRWRCUTB3c1JVRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTNwQ0xFOUJRVThzUlVGQlJTeDVSa0ZCZVVZc1JVRkJReXhEUVVGRE8xRkJRM2hITEdWQlFWVXNSMEZEVml4RlFVRkRMRTFCUVUwc1JVRkJSU3hYUVVGWExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVVkJRV2xGTEVWQlFVTXNRMEZCUXp0UlFVTTNSeXhYUVVGTkxFZEJRMDRzUlVGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRM3BDTEU5QlFVOHNSVUZEVUR0clJFRkRPRU1zUlVGQlF5eERRVUZETzFGQlEyeEVMRmxCUVU4c1IwRkRVQ3hGUVVGRExFMUJRVTBzUlVGQlJTeGpRVUZqTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjN1dVRkRha01zVDBGQlR5eEZRVUZGT3pSRlFVTXJSQ3hGUVVGRExFTkJRVU03VVVGRE5VVXNaVUZCVlN4SFFVRXJRaXhGUVVGRExFMUJRVTBzUlVGQlJTeGhRVUZoTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzWVVGQllTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVNc1EwRkJRenRSUVVOMFNDeGpRVUZUTEVkQlExQXNSVUZCUXl4TlFVRk5MRVZCUVVVc1dVRkJXU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMR2xEUVVGcFF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRPMWxCUXpsR0xHTkJRV01zUlVGQlJTeDVRa0ZCZVVJc1JVRkJReXhEUVVGRE8xRkJSVGRETEhkQ1FVRjNRaXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVN1dVRkRka01zU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTFJc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4SlFVRkpMRWRCUVVjc1EwRkJRenRoUVVONFF6dHBRa0ZCVFR0blFrRkRUQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRemRDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dGhRVU12UWp0UlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dEpRVUZCTEVOQlFVTTdRMEZEU0R0QlFVVkVMRTFCUVUwc1QwRkJUeXhYUVVGWE8wbEJTM1JDTERoSFFVRTRSenRKUVVVNVJ6dFJRVTVCTEZsQlFVOHNSMEZEVUN4RlFVRkRMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4UFFVRlBMRVZCUVVVc01FSkJRVEJDTEVWQlFVTXNRMEZCUXp0UlFVTndSU3hsUVVGVkxFZEJRMVlzUlVGQlF5eE5RVUZOTEVWQlFVVXNXVUZCV1N4RlFVRkZMRXRCUVVzc1JVRkJSU3hGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZGTEd0RVFVRnJSQ3hGUVVGRExFTkJRVU03U1VGSGFFWXNRMEZCUXp0SlFVRkJMRU5CUVVNN1EwRkRiRUk3UVVGelFrUXNUVUZCVFN4UFFVRlBMRFpDUVVFMlFqdEpRVEpDZEVNc1dVRkJXU3hwUWtGQk5FTXNSVUZCUlR0UlFURkNNVVFzYlVKQlFXTXNSMEZCT0VJc1JVRkJSU3hEUVVGRE8xRkJTUzlETEhGQ1FVRm5RaXhIUVVFclFpeEZRVUZGTEVOQlFVTTdVVUZEYkVRc2VVSkJRVzlDTEVkQlFXZENMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU0zUXl3eVFrRkJjMElzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSUzlETEhOQ1FVRnBRaXhIUVVGblFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRNVU1zZFVKQlFXdENMRWRCUVRoQ0xFVkJRVVVzUTBGQlF6dFJRVU51UkN4clFrRkJZU3hIUVVFclF6dFpRVU14UkN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1YwRkJWeXhGUVVGRk8xbEJRemRETEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNTVUZCU1N4WFFVRlhMRVZCUVVVN1UwRkRMME1zUTBGQlF6dFJRVU5HTEdsQ1FVRlpMRWRCUVVjc1NVRkJTU3hoUVVGaExFVkJRVVVzUTBGQlF6dFJRVU51UXl4MVFrRkJhMElzUjBGQmEwSXNSVUZCUlN4RFFVRkRPMUZCUTNaRExIVkNRVUZyUWl4SFFVRXJReXhGUVVGRkxFTkJRVU03VVVGSGNFVXNlVUpCUVc5Q0xFZEJRV2RDTEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNM1F5eDNRa0ZCYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJUVkVMREpDUVVGelFpeEhRVUZITEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1lVRkJZU3hGUVVGRkxEQkNRVUV3UWl4RFFVRkRMRk5CUVZNc1JVRkRla1lzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhUUVVGVExFVkJRVVVzTUVKQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVWs1UlN4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWVUZCVlN4RFFVRkRMRFJFUVVFMFJDeERRVUZETEVOQlFVTTdVVUZEY2tjc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRGRFTXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhqUVVGakxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMREpDUVVFeVFpeEhRVUZITEVWQlFVVXNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRSUVVOc1JDeE5RVUZOTEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zYTBOQlFXdERMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGRFWXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeFJRVUZSTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGNrVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExGbEJRVmtzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNSRExFMUJRVTBzUzBGQlN5eEhRVUZYTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJReTlFTEUxQlFVMHNTMEZCU3l4SFFVRlhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF5OUVMRTFCUVUwc2FVSkJRV2xDTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGVFWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTTdaMEpCUTJoR0xFOUJRVTg3V1VGRFZDeEpRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEZGtVc1QwRkJUenRaUVVOVUxFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU42UlN4UFFVRlBPMWxCUlZRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSE8yZENRVU01UWl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFVDeFJRVUZSTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU0zUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTndReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOd1F5eHBRa0ZCYVVJc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJGQlEzcEZMRU5CUVVNN1VVRkRTaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUjBGQlJ5eEpRVUZKTEhkQ1FVRjNRaXhGUVVGRkxFTkJRVU03VVVGRk0wUXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTzFsQlEzaEdMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4RFFVRkRPMUZCUXpkQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZETTBJc1NVRkJTU3hqUVVGakxFZEJRVWNzUzBGQlN5eERRVUZETzFGQlJUTkNMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTXNTVUZCU1N4RlFVTnNSU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVU3V1VGRE1VUXNTVUZCU1N4alFVRmpPMmRDUVVOb1FpeEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYWtZc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFRDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSU3hGUVVGRk8xbEJRemxETEdOQlFXTXNSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJRenRaUVVOcVF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZPMmRDUVVOdVFpeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkRja1FzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF6dGhRVU01UWp0cFFrRkJUVHRuUWtGQlJTeEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZCUlR0UlFVTXhSaXhEUVVGRExFVkJRVVVzTWtKQlFUSkNMRU5CUVVNc1EwRkJRenRSUVVWb1F5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEdsRFFVRnBReXhEUVVGRExFTkJRVU03VVVGRGRrVXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETzFGQlEzWkVMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExHOUNRVUZ2UWl4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETDBjc1NVRkJTU3hEUVVGRExESkNRVUV5UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVTTNSQ3hKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5d3lRa0ZCTWtJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU12UlN4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPMGxCUTJ4RkxFTkJRVU03U1VGRlJDeHRRa0ZCYlVJN1VVRkRha0lzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRGNFTXNTVUZCU1N4RFFVRkRMRXRCUVVzN1dVRkRVaXhQUVVGUE8xRkJRMVFzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNRMEZCUXp0UlFVTndReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETzFGQlJXcERMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkROMElzVFVGQlRTeFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU4yUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVTdXVUZEZEVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSVHRuUWtGRGVFUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF6dG5Ra0ZETlVRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRkRVFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRuUWtGRGRFUXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eEpRVUZKTEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpkR0xFMUJRVTBzV1VGQldTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGREwwUXNUVUZCVFN4alFVRmpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRUdHZRa0ZEYkVNc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU16UlN4SlFVRkpMR2RDUVVGblFpeEpRVUZKTEZsQlFWa3NTVUZCU1N4alFVRmpMRVZCUVVVN2IwSkJRM1JFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGNFTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03YjBKQlEzcERMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmxDUVVOc1JEdFpRVU5JTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVOQlFVTTdVVUZETDBRc1RVRkJUU3haUVVGWkxFZEJRVWNzUlVGQlJTeERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUlVGQlJUdFpRVU14UkN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkROMElzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNRMEZCUXp0WlFVTndReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETzFsQlEycERMRTFCUVUwc1NVRkJTU3hIUVVGSExGbEJRVmtzUTBGQlF5eExRVUZMTEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNUVUZCVFN4SFFVRkhMRU5CUVVNN1owSkJRek5DTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03TzJkQ1FVVjRSQ3hKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMWxCUXpGRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFVkJRVVU3WjBKQlF6bENMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdaMEpCUXpkRUxFOUJRVTg3WVVGRFVqdFpRVVZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVU3WjBKQlEzWkRMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWtzZDBKQlFYZENMRU5CUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGRGFrY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFFTXNUMEZCVHl4WFFVRlhMRU5CUVVNN1dVRkRja0lzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEU0N4TlFVRk5MRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRExGTkJRVk1zUlVGQlJTeFBRVUZQTEVWQlFVVXNVVUZCVVN4RlFVRkZMRTFCUVUwc1JVRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5xUml4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVU3WjBKQlEzWkRMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMWxCUXk5RExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEwZ3NjVVJCUVhGRU8xbEJRM0pFTEUxQlFVMHNhVUpCUVdsQ0xFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVMHNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETzJsQ1FVTnNSaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJRMmhHTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOV0xFMUJRVTBzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRuUWtGRGFrUXNRMEZCUXl4RlFVRkZMRU5CUVVNN1owSkJRMG9zU1VGQlNTeEpRVUZKTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRE8yOUNRVU42UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRuUWtGRFpDeE5RVUZOTEZsQlFWa3NSMEZEYUVJc1EwRkJReXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETERSQ1FVRTBRaXhIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wWXNUMEZCVHl4RFFVRkRMRmxCUVZrc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTNSRUxFTkJRVU1zUlVGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4dFFrRkJiVUlzUlVGQlJTeHRRa0ZCYlVJc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyNUZMRWxCUVVrc1EwRkJReXhuUWtGQlowSTdhVUpCUTJ4Q0xFOUJRVThzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZPMmRDUVVOa0xFVkJRVVVzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hoUVVGaExFVkJRVVVzV1VGQldTeERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRE4wVXNSVUZCUlN4RFFVRkRMRFJDUVVFMFFpeEZRVUZGTEdGQlFXRXNSVUZCUlN4aFFVRmhMRVZCUVVVc1MwRkJTeXhGUVVGRkxGZEJRVmNzUTBGQlF5eFJRVUZSTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRka2NzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEVEN4SlFVRkpMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJRenRuUWtGRGJFTXNTVUZCU1N4RFFVRkRMREpDUVVFeVFpeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFpRVU12UkN4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5d3lRMEZCTWtNc1EwRkJReXhEUVVGRE8xbEJRMnBGTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRMME1zUTBGQlF5eEZRVUZGTEVWQlFVTXNVMEZCVXl4RlFVRkZMR2xDUVVGcFFpeEZRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnVReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdVVUZETTBJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHRaUVVNeFFpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTXhReXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZsQlFWa3NRMEZCUXp0VFFVTnNRenRoUVVGTk8xbEJRMHdzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0WlFVTm9ReXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZsQlFWa3NRMEZCUXp0WlFVTnFReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dHBRa0ZEZUVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE0wUTdTVUZEU0N4RFFVRkRPMGxCUTA4c01FSkJRVEJDTEVOQlEyaERMRTFCUVdsRU8xRkJRMnBFTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNKRUxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRE4wSXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRPMUZCUTNwRExFMUJRVTBzVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXl4aFFVRnpReXhEUVVGRE8xRkJRemRFTEVsQlFVa3NRMEZCUXl4TlFVRk5PMWxCUTFRc1QwRkJUenRSUVVOVUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlR5eEZRVUZGTEVWQlFVVTdXVUZEZEVNc1RVRkJUU3hMUVVGTExFZEJRMUlzVFVGQll5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUlhSQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1VVRkJVU3hEUVVGRExFTkJRVU03WjBKQlEzSkRMRVZCUVVVc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVVzUlVGQlJTeEhRVUZITEVWQlFVVTdiMEpCUTI1RUxFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVa3NTMEZCT0VJc1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzUkVMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4TFFVRkxMRk5CUVZNc1EwRkJReXhEUVVGRE8yZENRVU0zUWl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTzI5Q1FVTndSQ3hMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZKTEV0QlFTdENMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU4yUkN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU5LTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNTMEZCV1N4RlFVRkZMRWRCUVVjc1JVRkJSVHR2UWtGRGJrUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETzJkQ1FVTTFRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5RTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1JVRkJSVHRuUWtGRGFrSXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03WjBKQlEzUkNMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNZMEZCWXl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8yRkJRM2hGTzJsQ1FVRk5PMmRDUVVGRkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03WVVGQlJUdFpRVU55UlN4TlFVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRNME1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPMGxCUlVRc1NVRkJTU3huUWtGQlowSTdVVUZEYkVJc1RVRkJUU3hsUVVGbExFZEJRVGhDTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXZSaXhOUVVGTkxFOUJRVThzUjBGQlVTeEZRVUZGTEVOQlFVTTdVVUZEZUVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGWExFVkJRVVVzUlVGQlJUdFpRVU51UkN4SlFVRkxMR1ZCUVhWQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRWxCUVVrN1owSkJRemRETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJTU3hsUVVGMVFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOMlJDeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRTlCUVU4c1QwRkJUeXhEUVVGRE8wbEJRMnBDTEVOQlFVTTdTVUZGUkN4SlFVRkpMR0ZCUVdFN1VVRkRaaXhQUVVGUE8xbEJRMHdzWVVGQllTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTzFsQlEzUkVMRmxCUVZrc1JVRkJSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRenRUUVVOc1JDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVk5MRk5CUVZNN1VVRkRaQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1R0WlFVTndRaXhKUVVGSkxFTkJRVU1zWjBKQlFXZENPMWxCUTNKQ0xFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJN1dVRkRNMElzU1VGQlNTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExFbEJRVWs3V1VGRGFFTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSk8xbEJRM0pDTEVsQlFVa3NRMEZCUXl4dlFrRkJiMEk3V1VGRGVrSXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFqdFpRVU40UWl4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNTVUZCU1R0VFFVTXZRaXhGUVVGRkxFVkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVTXNVVUZCVVN4RlFVRkZMRTlCUVU4c1JVRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTd3lRa0ZCTWtJc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGRrVXNUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhEUVVGRE8wbEJSVTBzVTBGQlV6dFJRVU5rTEU5QlFVODdXVUZEVEN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZOTzFsQlF6ZENMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEV0QlFVMDdXVUZEYWtNc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTMEZCVFR0WlFVTnVReXh6UWtGQmMwSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU03V1VGRGJrWXNaVUZCWlN4RlFVRkZMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eExRVUZOTEVOQlFVTTdXVUZEYmtZc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF6RkVMRTlCUVU4c1JVRkJSU3hGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRTdaMEpCUTNaRUxIRkNRVUZ4UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eEZRVUZETzFsQlF6ZEdMR05CUVdNc1JVRkJSU3hKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1MwRkJTenRaUVVNNVF5eHBRa0ZCYVVJc1JVRkJSU3hMUVVGTE8xbEJRM2hDTEhOQ1FVRnpRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXh6UWtGQmMwSTdXVUZEZUVVc01FSkJRVEJDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRzlDUVVGdlFpeERRVUZETEVsQlFVazdXVUZETVVRc2MwSkJRWE5DTEVWQlFVVXNTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETEV0QlFVczdVMEZETVVRc1EwRkJRenRKUVVOS0xFTkJRVU03UTBGRFNqdEJRVWRFTEUxQlFVMHNkMEpCUVhkQ08wbEJhVUl4UWl4WlFVRlpMRTFCUVdsQ0xFVkJRVVVzYTBKQlFUaERPMUZCYUVJM1JTeHBRMEZCTkVJc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCU3pGRExHdERRVUUyUWl4SFFVRlpMRVZCUVVVc1EwRkJRenRSUVVrMVF5eGpRVUZUTEVkQlFXZENMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEY0VNc2NVSkJRV2RDTEVkQlFWa3NTVUZCU1N4RFFVRkRPMUZCUTJwRExHbENRVUZaTEVkQlFUSkNMRVZCUVVVc1EwRkJRenRSUVVNeFF5eDFRa0ZCYTBJc1IwRkJXU3hMUVVGTExFTkJRVU03VVVGRmNFTXNWMEZCVFN4SFFVRlhMRU5CUVVNc1EwRkJRenRSUVVOdVFpeHJRa0ZCWVN4SFFVRnJRaXhGUVVGRkxFTkJRVU03VVVGRmFFTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1J5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenRSUVVOeVFpeHpRa0ZCYzBJN1VVRkRkRUlzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjZSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRUdG5Ra0ZEY2tZc1QwRkJUeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6dFpRVU42UXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUVHRuUWtGRGJrTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVONlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRE8yZENRVU53UkN4UFFVRlBMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRE8xbEJReTlETEVsQlFVa3NRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFdEJRVXNzUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5PMmRDUVVONlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXk5RExFOUJRVThzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZEZWtNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRjRU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVOc1JDeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExHMUNRVUZ0UWl4RlFVTnNSU3hYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGRGRrY3NSMEZCUnl4RlFVRkZPMWxCUTBnc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFdEJRVTBzUTBGQlF6dFpRVU51UkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNCRExFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1IwRkJSeXhGUVVGRkxFTkJRVU03V1VGRGVFTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU12UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUlN4RFFVRkRPMWxCUTJwR0xFbEJRVWtzUTBGQlF5eDNRa0ZCZDBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU53UXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5dzBRa0ZCTkVJc1EwRkJReXhEUVVGRE8xbEJRelZETEdOQlFXTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRka0lzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMEk3WjBKQlEzaENMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6czdaMEpCUlRGRUxFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVTTVSQ3hEUVVGRExFTkJRMFlzUTBGQlF6dFJRVU5HTEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03VVVGRk5VUXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NRMEZCUXl3MFFrRkJORUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMkZCUTNaR0xFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5dzBRa0ZCTkVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGYUVVc1NVRkJTU3hEUVVGRExIZENRVUYzUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRekZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJURkZMRWxCUVVrc1kwRkJZeXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU16UWl4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlFVVTdXVUZEYUVVc1kwRkJZeXhIUVVGSExFTkJRVU1zWTBGQll5eERRVUZETzFsQlEycERMRWxCUVVrc1kwRkJZeXhGUVVGRk8yZENRVU5zUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc05FSkJRVFJDTEVWQlF6VkVMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFdEJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZET1VRN2FVSkJRVTA3WjBKQlEwd3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zTkVKQlFUUkNMRU5CUVVNc1EwRkJRenRoUVVNM1F6dFJRVU5JTEVOQlFVTXNSVUZCUlN4eFEwRkJjVU1zUTBGQlF5eERRVUZETzFGQlJURkRMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eHBRMEZCYVVNc1EwRkJReXhEUVVGRE8xRkJRM1JHTEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4RFFVRkRPMUZCUldwR0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ08xbEJRM2hDTEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenM3V1VGRk1VUXNTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8xRkJSVFZFTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUjBGQlJ5eERRVUZETEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSTdXVUZEYmtZc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWEJFTEUxQlFVMHNWMEZCVnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJReXhQUVVGUExFVkJRVVVzTmtOQlFUWkRMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJRM1JITEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjN1dVRkRia0lzVjBGQlZ5eEZRVUZGTEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTzFsQlEycEVMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWs3VTBGRGRFUXNRMEZCUXp0UlFVTkdMR3RDUVVGclFqdFJRVU5zUWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVV2UXl3d1EwRkJNRU03VVVGRE1VTXNORU5CUVRSRE8xRkJRelZETEUxQlFVMDdVVUZGVGl4aFFVRmhPMUZCUTJJc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMREpEUVVFeVF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVnNSeXhOUVVGTkxHdENRVUZyUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRMmhETEVsQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVc1JVRkJReXhQUVVGUExFVkJRVVVzY1VOQlFYRkRMRVZCUVVNc1EwRkRja1VzUTBGQlF6dFJRVVZHTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZkQlFWY3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETzFGQlF5OURMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl3MFFrRkJORUlzUTBGQlF5eERRVUZETzFGQlF6bEVMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNkMEpCUVhkQ0xFTkJRVU1zVDBGQmFVTTdVVUZEZUVRc1RVRkJUU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4dFFrRkJiVUlzUlVGQlJTeFBRVUZQTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdVVUZETTBjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJc1JVRkJSVHRaUVVOdVF5eEpRVUZKTEVOQlFVTXNlVUpCUVhsQ0xFZEJRVWNzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTTFReXhKUVVGSkxFTkJRVU1zY1VKQlFYRkNMRWRCUVVjc1MwRkJTeXhEUVVGRE8xTkJRM0JETzJGQlFVMDdXVUZEVEN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJc1EwRkJReXhEUVVGRE8xbEJRM3BETEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYmtNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXp0cFFrRkRha1FzVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VVN1NVRkRTQ3hEUVVGRE8wbEJSVVFzU1VGQlNTeHhRa0ZCY1VJN1VVRkRka0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4TFFVRk5MRU5CUVVNc1EwRkJRenRKUVVOdVJTeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMR2xDUVVGcFFpeERRVUZETEZWQlFYVkNMRVZCUVVVc1NVRkJZVHRSUVVNMVJDeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM0pDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dFpRVU40UWl4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5zUWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlF6bERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRemxDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU4yUkN4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNN1dVRkRja1VzU1VGQlNTeEhRVUZITzJkQ1FVTk1MRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlEzaEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU4wUlN4SlFVRkpMRU5CUVVNc1MwRkJTenRuUWtGRFVpeFRRVUZUTzFsQlExZ3NTVUZCU1N4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWs3WjBKQlEzaEVMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV6dG5Ra0ZETDBRc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJoRkxFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE1VWXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVMEZETDBJN1VVRkRSQ3hWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRka01zVDBGQlR5eFZRVUZWTEVOQlFVTTdTVUZEY0VJc1EwRkJRenREUVVOS08wRkJSVVFzVTBGQlV5eFhRVUZYTEVOQlFVTXNTVUZCWVR0SlFVTm9ReXhQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4M1FrRkJkMEk3U1VGUk5VSTdVVUZRUVN3clFrRkJNRUlzUjBGQmIwTXNSVUZCUlN4RFFVRkRPMUZCUlhwRUxGVkJRVXNzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU5vUXl4M1FrRkJiVUlzUjBGQldTeEZRVUZGTEVOQlFVTTdVVUZEYkVNc2FVSkJRVmtzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVYyUXl4dlFrRkJaU3hIUVVGWkxFdEJRVXNzUTBGQlF6dFJRVVYyUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1NVRkJTU3hGUVVGRk8xbEJRMmhFTEVsQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETzFsQlF6ZERMRWxCUVVrc1NVRkJTU3hEUVVGRExHVkJRV1U3WjBKQlEzUkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNN08yZENRVVV4UXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUXpkRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVVjZReXhOUVVGTkxHMUNRVUZ0UWl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc2JVTkJRVzFETEVOQlFVTXNSVUZCUXl4RFFVRkRPMkZCUTNCR0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka01zYlVKQlFXMUNMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEYUVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEZsQlFWa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRM1JETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJSUzlETEUxQlFVMHNlVUpCUVhsQ0xFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVU42Uml4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETERSRFFVRTBReXhEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTTdVVUZETlVjc1NVRkJTU3hEUVVGRExESkNRVUV5UWp0WlFVTTVRaXhGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRkxIbENRVUY1UWl4RlFVTjRSQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEZRVUZGTEV0QlFVc3NTVUZCU1N4RlFVRkZMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGRE4wWXNSVUZCUXl4UlFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhKUVVGSkxFTkJRVU1zTWtKQlFUSkNMRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRU5CUVVNc01rSkJRVEpDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhwUTBGQmFVTXNRMEZCUXl4RFFVRkRPMUZCUTJ4R0xFbEJRVWtzUTBGQlF5d3lRa0ZCTWtJc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVOc1JTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zTWtKQlFUSkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRE9VUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMGxCUXpWRExFTkJRVU03U1VGRlJDeEpRVUZKTEhOQ1FVRnpRanRSUVVONFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTTNReXhKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRU5CUVVNc1NVRkJTU3hEUVVGRExESkNRVUV5UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEYmtZc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJN1VVRkRja0lzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETzFGQlEzcERMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRE9VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVN1dVRkRia01zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFpRVU14UXl4UFFVRlBPMU5CUTFJN1VVRkJRU3hEUVVGRE8xRkJRMFlzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFJRVU14UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlF6bERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRemxDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU12UXl4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNN1dVRkRia1VzU1VGQlNTeEhRVUZITzJkQ1FVTk1MRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlF6bERMRTFCUVUwc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU4wUlN4SlFVRkpMRU5CUVVNc1MwRkJTenRuUWtGRFVpeFRRVUZUTzFsQlExZ3NTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SaXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGRFTTdTVUZEU0N4RFFVRkRPMGxCUlVRc1NVRkJTU3hKUVVGSk8xRkJRMDRzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMGxCUTNCQ0xFTkJRVU03U1VGRlJDeEpRVUZKTEVsQlFVazdVVUZEVGl4UFFVRlBMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXp0SlFVTnNReXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1YVcxd2IzSjBJSHRFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6ZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYm1sdGNHOXlkQ0I3UkdsdFVtVmtkV04wYVc5dVJXUnBkRzl5VDNCMGFXOXVjeXdnUkVKVFkyRnVUM0IwYVc5dWMzMGdabkp2YlNBbkxpNHZablZ1WTNScGIyNUZaR2wwYjNKekwyUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpkR2x2YmkxbFpHbDBiM0luTzF4dWFXMXdiM0owSUh0SlJFSlRZMkZ1VDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTl0WVhSb0p6dGNibWx0Y0c5eWRDQjdUM0IwYVc5dWMzMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRFU1UxZlVrVkVYMFJGUmtGVlRGUmZVRTlUVkZCU1QwTkZVMU5KVGtkZlJsVk9RMVJKVDA1ZlRVVlVRU3dnUkVsTlgxSkZSRjlRVDFOVVVGSlBRMFZUVTBsT1IxOUdWVTVEVkVsUFRsOVVRVWNzWEc0Z0lFUkpUVjlTUlVSZlVGSkZVRkpQUTBWVFUwbE9SMTlHVlU1RFZFbFBUbDlVUVVjc0lGTlZVRkJQVWxSRlJGOUVTVk5VUVU1RFJWOUdWVTVEVkVsUFRsTmZWRUZITEZ4dUlDQlRWVkJRVDFKVVJVUmZVMFZOVkZsUVJWTmZWRUZITENCVFZWQlFUMUpVUlVSZlZGbFFSVk5mVkVGSExDQlRWVkJRVDFKVVJVUmZWVTVKVkZOZlZFRkhmU0JtY205dElDY3VMaTltZFc1amRHbHZia1ZrYVhSdmNuTXZZMjl1YzNSekp6dGNibWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITjlJR1p5YjIwZ0p5NHVMMlJwYzNSaGJtTmxMVzFoZEhKcGVDOTBlWEJsY3ljN1hHNXBiWEJ2Y25RZ2UwbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJTd2dTVlJUVGtWUGNIUnBiMjV6TENCSlZVMUJVRTl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHZiWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTJWeUp6dGNibWx0Y0c5eWRDQjdVM1ZpYW1WamRIMGdabkp2YlNBbmNuaHFjeWM3WEc1cGJYQnZjblFnSnk0dUx5NHVMMk56Y3k5emRIbHNaWE11WTNOekp6dGNibWx0Y0c5eWRDQjdaMlYwUjFCVlFXUmhjSFJsY2tSbGMyTnlhWEIwYVc5dWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwyMWhkR2d2YzNKakwzZGxZa2RRVlM5blpYUkhVRlZFWlhacFkyVW5PMXh1WEc1bGVIQnZjblFnWTJ4aGMzTWdWVTFCVUU5d2RHbHZibk1nZTF4dUlDQnNaV0Z5Ym1sdVoxSmhkR1U2SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOVhHNGdJSHQxYVU1aGJXVTZJQ2RNWldGeWJtbHVhV2NnY21GMFpTY3NJSFpoYkhWbE9pQXhMQ0IwYjI5c2RHbHdPaUFuVkdobElHbHVhWFJwWVd3Z2JHVmhjbTVwYm1jZ2NtRjBaU0JtYjNJZ2RHaGxJR1Z0WW1Wa1pHbHVaeUJ2Y0hScGJXbDZZWFJwYjI0bmZUdGNiaUFnTHk4Z2JrTnZiWEJ2Ym1WdWRITTZJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiU0E5WEc0Z0lDOHZJSHQxYVU1aGJXVTZJQ2REYjIxd2IyNWxiblJ6Snl3Z2RtRnNkV1U2SURJc0lIUnZiMngwYVhBNklDZFVhR1VnYm5WdFltVnlJRzltSUdOdmJYQnZibVZ1ZEhNZ0tHUnBiV1Z1YzJsdmJuTXBJSFJ2SUhCeWIycGxZM1FnZEdobElHUmhkR0VnZEc4bmZUdGNiaUFnYmtWd2IyTm9jem9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUQxY2JpQWdJQ0I3ZFdsT1lXMWxPaUFuUlhCdlkyaHpKeXdnZG1Gc2RXVTZJREFzWEc0Z0lDQWdJQ0IwYjI5c2RHbHdPaUFuVkdobElHNTFiV0psY2lCdlppQmxjRzlqYUhNZ2RHOGdiM0IwYVcxcGVtVWdaVzFpWldSa2FXNW5jeUIyYVdFZ1UwZEVMaUJEYjIxd2RYUmxaQ0JoZFhSdmJXRjBhV05oYkd4NUlHbG1JSE5sZENCMGJ5QXdKMzA3WEc0Z0lHNU9aV2xuYUdKdmNuTTZJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiU0E5WEc0Z0lIdDFhVTVoYldVNklDZE9aV2xuYUdKdmNuTW5MQ0IyWVd4MVpUb2dNVFVzSUhSdmIyeDBhWEE2SUNkVWFHVWdiblZ0WW1WeUlHOW1JRzVsWVhKbGMzUWdibVZwWjJoaWIzSnpJSFJ2SUdOdmJuTjBjblZqZENCMGFHVWdablY2ZW5rZ2JXRnVhV1p2YkdRbmZUdGNiaUFnYzNCeVpXRmtPaUJKUkdsdFVtVmtkV04wYVc5dVVHRnlZVzBnUFZ4dUlDQjdkV2xPWVcxbE9pQW5VM0J5WldGa0p5d2dkbUZzZFdVNklERXNYRzRnSUNBZ2RHOXZiSFJwY0RwY2JpQWdJQ0JnVkdobElHVm1abVZqZEdsMlpTQnpZMkZzWlNCdlppQmxiV0psWkdSbFpDQndiMmx1ZEhNc0lIVnpaV1FnZDJsMGFDQnRhVzRnWkdsemRHRnVZMlVnZEc4Z1kyOXVkSEp2YkNCY2JpQWdJQ0IwYUdVZ1kyeDFiWEJsWkM5a2FYTndaWEp6WldRZ2JtRjBkWEpsSUc5bUlIUm9aU0JsYldKbFpHUnBibWRnZlR0Y2JpQWdiV2x1UkdsemREb2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDFjYmlBZ2UzVnBUbUZ0WlRvZ0owMXBiaUJrYVhOMFlXNWpaU2NzSUhaaGJIVmxPaUF3TGpFc1hHNGdJQ0FnZEc5dmJIUnBjRG9nWUZSb1pTQmxabVpsWTNScGRtVWdiV2x1YVcxMWJTQmthWE4wWVc1alpTQmlaWFIzWldWdUlHVnRZbVZrWkdWa0lIQnZhVzUwY3l3Z1hHNGdJSFZ6WldRZ2QybDBhQ0J6Y0hKbFlXUWdkRzhnWTI5dWRISnZiQ0IwYUdVZ1kyeDFiWEJsWkM5a2FYTndaWEp6WldRZ2JtRjBkWEpsSUc5bUlIUm9aU0JsYldKbFpHUnBibWRnZlR0Y2JpQWdjbUZ1Wkc5dFUyVmxaRG9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0UEhOMGNtbHVaejRnUFNCN2RXbE9ZVzFsT2lBblVtRnVaRzl0SUhObFpXUW5MQ0IyWVd4MVpUb2diblZzYkN3Z2RHOXZiSFJwY0RvZ0oxSmhibVJ2YlNCelpXVmtKeXdnZEhsd1pUb2dKM04wY21sdVp5ZDlPMXh1SUNCMWMyVlhaV0pIVUZVNklFbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJUeGliMjlzWldGdVBpQTlYRzRnSUNBZ2UzVnBUbUZ0WlRvZ0oxVnpaU0JYWldKSFVGVW5MQ0IyWVd4MVpUb2dabUZzYzJVc0lIUnZiMngwYVhBNklDZFZjMlVnVjJWaVIxQlZJR1p2Y2lCTFRrNGdZMjl0Y0hWMFlYUnBiMjV6Snl3Z2RIbHdaVG9nSjJKdmIyeGxZVzRuTEZ4dUlDQWdJQ0FnWkdsellXSnNaVlJ2YjJ4MGFYQTZJQ2RYWldKSFVGVWdhWE1nYm05MElHRjJZV2xzWVdKc1pTZDlPMXh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQm5aWFJIVUZWQlpHRndkR1Z5UkdWelkzSnBjSFJwYjI0b0tTNTBhR1Z1S0Noa1pYTmpLU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9aR1Z6WXlrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5WelpWZGxZa2RRVlM1MGIyOXNkR2x3SUNzOUlHQWdLQ1I3WkdWelkzMHBZRHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRYTmxWMlZpUjFCVkxuWmhiSFZsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkWE5sVjJWaVIxQlZMbVJwYzJGaWJHVWdQU0IwY25WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcE8xeHVJQ0I5TzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZGTk9SVTl3ZEdsdmJuTWdlMXh1SUNCbGNITnBiRzl1T2lCSlJHbHRVbVZrZFdOMGFXOXVVR0Z5WVcwZ1BWeHVJQ0I3ZFdsT1lXMWxPaUFuUlhCemFXeHZiaWNzSUhaaGJIVmxPaUF4TUN3Z2RHOXZiSFJwY0RvZ0owVndjMmxzYjI0Z2FYTWdiR1ZoY201cGJtY2djbUYwWlNkOU8xeHVJQ0J3WlhKd2JHVjRhWFI1T2lCSlJHbHRVbVZrZFdOMGFXOXVVR0Z5WVcwZ1BWeHVJQ0I3ZFdsT1lXMWxPaUFuVUdWeWNHeGxlR2wwZVNjc0lIWmhiSFZsT2lBek1Dd2dkRzl2YkhScGNEb2dKMUp2ZFdkb2JIa2dhRzkzSUcxaGJua2dibVZwWjJoaWIzSnpJR1ZoWTJnZ2NHOXBiblFnYVc1bWJIVmxibU5sY3lkOU8xeHVJQ0F2THlCa2FXMDZJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiU0E5SUh0MWFVNWhiV1U2SUNkRWFXMWxibk5wYjI1aGJHbDBlU2NzSUhaaGJIVmxPaUF5TENCMGIyOXNkR2x3T2lBblJHbHRaVzV6YVc5dVlXeHBkSGtnYjJZZ2RHaGxJR1Z0WW1Wa1pHbHVaeWQ5TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0NrZ2UzMDdYRzU5WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRVJwYlZKbFpGTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWN5QTlJSHRjYmlBZ0lDQm1kVzVqT2lCRVJ5NUdkVzVqTEZ4dUlDQWdJSE5sYlZSNWNHVnpPaUJ6ZEhKcGJtZGJYU3hjYmlBZ0lDQjBlWEJsY3pvZ2MzUnlhVzVuVzEwc1hHNGdJQ0FnZFc1cGRITTZJSE4wY21sdVoxdGRMRnh1SUNBZ0lHUnBjM1JoYm1ObFJuVnVZM1JwYjI1ek9pQnpkSEpwYm1kYlhWeHVmVnh1WEc1bGVIQnZjblFnZEhsd1pTQk5kV3gwYVVOdmJFUnBiVkpsWkhWamRHbHZibEJoY21GdGN5QTlJSHRjYmlBZ0lDQjBZV0pzWlRvZ1JFY3VSR0YwWVVaeVlXMWxMRnh1SUNBZ0lHTnZiSFZ0Ym5NNklFUkhMa052YkhWdGJreHBjM1FzWEc0Z0lDQWdiV1YwYUc5a1RtRnRaVG9nUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrY3l4Y2JpQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1ek9pQkVSeTVHZFc1alcxMHNYRzRnSUNBZ1pHbHpkR0Z1WTJWTlpYUnlhV056T2lCemRISnBibWRiWFN4Y2JpQWdJQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYU3hjYmlBZ0lDQnZjSFJwYjI1ek9pQW9TVlZOUVZCUGNIUnBiMjV6SUh3Z1NWUlRUa1ZQY0hScGIyNXpLU0FtSUZCaGNuUnBZV3c4U1VSQ1UyTmhiazl3ZEdsdmJuTStJQ1lnZTNCeVpYQnliMk5sYzNOcGJtZEdkVzVqUVhKbmN6b2dUM0IwYVc5dWMxdGRmU0FtSUU5d2RHbHZibk1zWEc0Z0lDQWdjR3h2ZEVWdFltVmtaR2x1WjNNL09pQmliMjlzWldGdUxGeHVJQ0FnSUdOc2RYTjBaWEpGYldKbFpHUnBibWR6UHpvZ1ltOXZiR1ZoYml4Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklFMTFiSFJwUTI5c2RXMXVSR2x0VW1Wa2RXTjBhVzl1UldScGRHOXlJSHRjYmlBZ0lDQmxaR2wwYjNKVFpYUjBhVzVuY3pvZ1JHbHRVbVZrZFdOMGFXOXVSV1JwZEc5eVQzQjBhVzl1Y3lBOUlIdDlPMXh1SUNBZ0lIUmhZbXhsU1c1d2RYUWhPaUJFUnk1SmJuQjFkRUpoYzJVOFJFY3VSR0YwWVVaeVlXMWxJSHdnYm5Wc2JENDdYRzRnSUNBZ1kyOXNkVzF1YzBsdWNIVjBJVG9nUkVjdVNXNXdkWFJDWVhObFBFUkhMa052YkhWdGJsdGRQanRjYmlBZ0lDQmpiMngxYlc1elNXNXdkWFJTYjI5MElUb2dTRlJOVEVWc1pXMWxiblE3WEc0Z0lDQWdZMjlzZFcxdVQzQjBSV1JwZEc5eWN6b2dSR2x0VW1Wa2RXTjBhVzl1UTI5c2RXMXVSV1JwZEc5eVcxMGdQU0JiWFR0Y2JpQWdJQ0JqYjJ4MWJXNVBjSFJGWkdsMGIzSnpVbTl2ZERvZ1NGUk5URVZzWlcxbGJuUWdQU0IxYVM1a2FYWW9LVHRjYmlBZ0lDQmpiMngxYlc1UVlYSmhiWE5GWkdsMGIzSlNiMjkwT2lCSVZFMU1SV3hsYldWdWRDQTlJSFZwTG1ScGRpZ3BPMXh1SUNBZ0lHTnZiSFZ0YmxCaGNtRnRjMFZrYVhSdmNrRmpZMjl5WkdsdmJqb2dSRWN1UVdOamIzSmthVzl1TzF4dUlDQWdJSGRsYVdkb2RITkZaR2wwYjNKU2IyOTBPaUJJVkUxTVJXeGxiV1Z1ZENBOUlIVnBMbVJwZGlncE8xeHVJQ0FnSUdOdmJIVnRia1oxYm1OMGFXOXVjMDFoY0RvZ2UxdHJaWGs2SUhOMGNtbHVaMTA2SUhOMGNtbHVaMXRkZlNBOUlIdDlPMXh1SUNBZ0lHMWxkR2h2WkhOUVlYSmhiWE02SUh0YmEyVjVPaUJ6ZEhKcGJtZGRPaUJWVFVGUVQzQjBhVzl1Y3lCOElGUlRUa1ZQY0hScGIyNXpmU0E5SUh0Y2JpQWdJQ0FnSUZ0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSekxsVk5RVkJkT2lCdVpYY2dWVTFCVUU5d2RHbHZibk1vS1N4Y2JpQWdJQ0FnSUZ0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSekxsUmZVMDVGWFRvZ2JtVjNJRlJUVGtWUGNIUnBiMjV6S0NsY2JpQWdJQ0I5TzF4dUlDQWdJR1JpVTJOaGJsQmhjbUZ0Y3lBOUlHNWxkeUJFUWxOallXNVBjSFJwYjI1ektDazdYRzRnSUNBZ2JXVjBhRzlrVTJWMGRHbHVaM05FYVhaek9pQklWRTFNUld4bGJXVnVkRnRkSUQwZ1cxMDdYRzRnSUNBZ2MzVndjRzl5ZEdWa1JuVnVZM1JwYjI1ek9pQjdXMjVoYldVNklITjBjbWx1WjEwNklFUnBiVkpsWkZOMWNIQnZjblJsWkVaMWJtTjBhVzl1YzMwZ1BTQjdmVHRjYmlBZ0lDQnRaWFJvYjJSSmJuQjFkRG9nUkVjdVNXNXdkWFJDWVhObFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQWdJRzFsZEdodlpGTmxkSFJwYm1kelNXTnZiam9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnYldWMGFHOWtVMlYwZEdsdVozTkJibU5vYjNJNklFaFVUVXhGYkdWdFpXNTBJRDBnZFdrdVpHbDJLQ2s3WEc0Z0lDQWdjR3h2ZEVWdFltVmtaR2x1WjNOSmJuQjFkQ0E5SUhWcExtSnZiMnhKYm5CMWRDZ25VR3h2ZENCbGJXSmxaR1JwYm1kekp5d2dkSEoxWlNrN1hHNGdJQ0FnY0c5emRGQnliMk5sYzNOcGJtZEZaR2wwYjNJNklGQnZjM1JRY205alpYTnphVzVuUm5WdVkwVmthWFJ2Y2p0Y2JpQWdJQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRWx1Y0hWMElEMGdkV2t1WTJodmFXTmxTVzV3ZFhRb0owRm5aM0psWjJGMGFXOXVKeXdnUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSE11UlZWRFRFbEVSVUZPTEZ4dUlDQWdJQ0FnVzBScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6TGtWVlEweEpSRVZCVGl3Z1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkhNdVRVRk9TRUZVVkVGT1hTazdYRzVjYmlBZ0lDQnZia052YkhWdGJuTkRhR0Z1WjJWa09pQlRkV0pxWldOMFBIWnZhV1ErTzF4dUlDQWdJR052Ym5OMGNuVmpkRzl5S0dWa2FYUnZjbE5sZEhScGJtZHpPaUJFYVcxU1pXUjFZM1JwYjI1RlpHbDBiM0pQY0hScGIyNXpJRDBnZTMwcElIdGNiaUFnSUNBZ0lIUm9hWE11WVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJKYm5CMWRDNXpaWFJVYjI5c2RHbHdLQ2RCWjJkeVpXZGhkR2x2YmlCdFpYUm9iMlFnWm05eUlHTnZiV0pwYm1sdVp5QmthWE4wWVc1alpYTWdZbVYwZDJWbGJpQmpiMngxYlc1ekp5azdYRzRnSUNBZ0lDQjBhR2x6TG05dVEyOXNkVzF1YzBOb1lXNW5aV1FnUFNCdVpYY2dVM1ZpYW1WamRDZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1bFpHbDBiM0pUWlhSMGFXNW5jeUE5SUdWa2FYUnZjbE5sZEhScGJtZHpPMXh1SUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKQlkyTnZjbVJwYjI0Z1BTQjFhUzVoWTJOdmNtUnBiMjRvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5WlhCdmNtTmxjM05wYm1kR2RXNWpjeUE5SUVSSExrWjFibU11Wm1sdVpDaDdkR0ZuY3pvZ1cwUkpUVjlTUlVSZlVGSkZVRkpQUTBWVFUwbE9SMTlHVlU1RFZFbFBUbDlVUVVkZGZTazdYRzRnSUNBZ0lDQndjbVZ3YjNKalpYTnphVzVuUm5WdVkzTXVabTl5UldGamFDZ29aaWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCelpXMVVlWEJsY3pvZ2MzUnlhVzVuSUQwZ1ppNXZjSFJwYjI1ekxtZGxkQ2hUVlZCUVQxSlVSVVJmVTBWTlZGbFFSVk5mVkVGSEtTQS9QeUFuSnp0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYm1GdFpTQTlJR1l1Wm5KcFpXNWtiSGxPWVcxbElEOC9JR1l1Ym1GdFpUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RIbHdaWE02SUhOMGNtbHVaeUE5SUdZdWIzQjBhVzl1Y3k1blpYUW9VMVZRVUU5U1ZFVkVYMVJaVUVWVFgxUkJSeWtnUHo4Z0p5YzdYRzRnSUNBZ0lDQWdJR052Ym5OMElIVnVhWFJ6T2lCemRISnBibWNnUFNCbUxtOXdkR2x2Ym5NdVoyVjBLRk5WVUZCUFVsUkZSRjlWVGtsVVUxOVVRVWNwSUQ4L0lDY25PMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmthWE4wWVc1alpVWjFibU4wYVc5dWN6b2djM1J5YVc1bklEMGdaaTV2Y0hScGIyNXpMbWRsZENoVFZWQlFUMUpVUlVSZlJFbFRWRUZPUTBWZlJsVk9RMVJKVDA1VFgxUkJSeWtnUHo4Z0p5YzdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbVZrYVhSdmNsTmxkSFJwYm1kekxuTmxiWFI1Y0dVZ0ppWWdJWE5sYlZSNWNHVnpMbWx1WTJ4MVpHVnpLSFJvYVhNdVpXUnBkRzl5VTJWMGRHbHVaM011YzJWdGRIbHdaU2twWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1bFpHbDBiM0pUWlhSMGFXNW5jeTUwZVhCbElDWW1JQ0YwZVhCbGN5NXBibU5zZFdSbGN5aDBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpMblI1Y0dVcEtWeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNdWRXNXBkSE1nSmlZZ0lYVnVhWFJ6TG1sdVkyeDFaR1Z6S0hSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNdWRXNXBkSE1wS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1YzF0dVlXMWxYU0E5SUh0Y2JpQWdJQ0FnSUNBZ0lDQm1kVzVqT2lCbUxGeHVJQ0FnSUNBZ0lDQWdJSE5sYlZSNWNHVnpPaUJ6WlcxVWVYQmxjeUEvSUhObGJWUjVjR1Z6TG5Od2JHbDBLQ2NzSnlrZ09pQmJYU3hjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxjem9nZEhsd1pYTWdQeUIwZVhCbGN5NXpjR3hwZENnbkxDY3BJRG9nVzEwc1hHNGdJQ0FnSUNBZ0lDQWdkVzVwZEhNNklIVnVhWFJ6SUQ4Z2RXNXBkSE11YzNCc2FYUW9KeXduS1NBNklGdGRMRnh1SUNBZ0lDQWdJQ0FnSUdScGMzUmhibU5sUm5WdVkzUnBiMjV6T2lCa2FYTjBZVzVqWlVaMWJtTjBhVzl1Y3lBL0lHUnBjM1JoYm1ObFJuVnVZM1JwYjI1ekxuTndiR2wwS0Njc0p5a2dPaUJiWFN4Y2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIMHBPMXh1WEc0Z0lDQWdJQ0IwYUdsekxuQnZjM1JRY205alpYTnphVzVuUldScGRHOXlJRDBnYm1WM0lGQnZjM1JRY205alpYTnphVzVuUm5WdVkwVmthWFJ2Y2lncE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG5SaFlteGxTVzV3ZFhRZ1BTQjFhUzUwWVdKc1pVbHVjSFYwS0NkVVlXSnNaU2NzSUdkeWIyc3VjMmhsYkd3dWRIWXVaR0YwWVVaeVlXMWxMQ0JuY205ckxuTm9aV3hzTG5SaFlteGxjeXdnS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtOXVWR0ZpYkdWSmJuQjFkRU5vWVc1blpXUW9LVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnZEdocGN5NXZibFJoWW14bFNXNXdkWFJEYUdGdVoyVmtLQ2s3WEc0Z0lDQWdJQ0JzWlhRZ2MyVjBkR2x1WjNOUGNHVnVaV1FnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXRaWFJvYjJSSmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2ROWlhSb2IyUW5MQ0JFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TGxWTlFWQXNYRzRnSUNBZ0lDQWdJRnRFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TGxWTlFWQXNJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VkY5VFRrVmRMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITmxkSFJwYm1kelQzQmxibVZrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amNtVmhkR1ZCYkdkdmNtbDBhRzFUWlhSMGFXNW5jMFJwZGloMGFHbHpMbTFsZEdodlpITlFZWEpoYlhOYmRHaHBjeTV0WlhSb2IyUkpibkIxZEM1MllXeDFaU0ZkS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpTV052YmlBOUlIVnBMbWxqYjI1ekxuTmxkSFJwYm1kektDZ3BQVDRnZTF4dUlDQWdJQ0FnSUNCelpYUjBhVzVuYzA5d1pXNWxaQ0E5SUNGelpYUjBhVzVuYzA5d1pXNWxaRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnpaWFIwYVc1bmMwOXdaVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJXVjBhRzlrVTJWMGRHbHVaM05FYVhaekxtWnZja1ZoWTJnb0tHbDBLU0E5UGlCcGRDNXlaVzF2ZG1Vb0tTazdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXRaWFJvYjJSVFpYUjBhVzVuYzBScGRuTWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUhzZ2RHaHBjeTVqY21WaGRHVkJiR2R2Y21sMGFHMVRaWFIwYVc1bmMwUnBkaWgwYUdsekxtMWxkR2h2WkhOUVlYSmhiWE5iZEdocGN5NXRaWFJvYjJSSmJuQjFkQzUyWVd4MVpTRmRLVHNnZlZ4dUlDQWdJQ0FnZlN3Z0owMXZaR2xtZVNCdFpYUm9iMlJ6SUhCaGNtRnRaWFJsY25NbktUdGNibHh1SUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJKYm5CMWRDNXliMjkwTG1Oc1lYTnpUR2x6ZEM1aFpHUW9KMjFzTFdScGJTMXlaV1IxWTNScGIyNHRjMlYwZEdsdVozTXRhVzV3ZFhRbktUdGNiaUFnSUNBZ0lIUm9hWE11YldWMGFHOWtTVzV3ZFhRdWNtOXZkQzV3Y21Wd1pXNWtLSFJvYVhNdWJXVjBhRzlrVTJWMGRHbHVaM05KWTI5dUtUdGNiaUFnSUNBZ0lIUm9hWE11WTI5c2RXMXVVR0Z5WVcxelJXUnBkRzl5UVdOamIzSmthVzl1TG1Ga1pGQmhibVVvSjBOdmJIVnRiaUJ2Y0hScGIyNXpKeXdnS0NrZ1BUNGdkR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6VW05dmRDd2dkSEoxWlN3Z2JuVnNiQ3dnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKQlkyTnZjbVJwYjI0dWNtOXZkQzV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNVFZWEpoYlhORlpHbDBiM0pTYjI5MExtRndjR1Z1WkVOb2FXeGtLSFJvYVhNdVkyOXNkVzF1VUdGeVlXMXpSV1JwZEc5eVFXTmpiM0prYVc5dUxuSnZiM1FwTzF4dUlDQWdJQ0FnZEdocGN5NWpiMngxYlc1UVlYSmhiWE5GWkdsMGIzSlNiMjkwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11ZDJWcFoyaDBjMFZrYVhSdmNsSnZiM1FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzl1VkdGaWJHVkpibkIxZEVOb1lXNW5aV1FvS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IwWVdKc1pTQTlJSFJvYVhNdWRHRmliR1ZKYm5CMWRDNTJZV3gxWlR0Y2JpQWdJQ0FnSUdsbUlDZ2hkR0ZpYkdVcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUhWcExtVnRjSFI1S0hSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWMxSnZiM1FwTzF4dUlDQWdJQ0FnZFdrdVpXMXdkSGtvZEdocGN5NTNaV2xuYUhSelJXUnBkRzl5VW05dmRDazdYRzVjYmlBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1Um5WdVkzUnBiMjV6VFdGd0lEMGdlMzA3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMngxYlc1eklEMGdkR0ZpYkdVdVkyOXNkVzF1Y3k1MGIweHBjM1FvS1R0Y2JpQWdJQ0FnSUdOdmJIVnRibk11Wm05eVJXRmphQ2dvWTI5c0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUU5aWFtVmpkQzVyWlhsektIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6S1M1bWIzSkZZV05vS0NobWRXNWpUbUZ0WlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE5sYlZSNWNHVnpJRDBnZEdocGN5NXpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJablZ1WTA1aGJXVmRMbk5sYlZSNWNHVnpPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFI1Y0dWeklEMGdkR2hwY3k1emRYQndiM0owWldSR2RXNWpkR2x2Ym5OYlpuVnVZMDVoYldWZExuUjVjR1Z6TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhWdWFYUnpJRDBnZEdocGN5NXpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJablZ1WTA1aGJXVmRMblZ1YVhSek8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITmxiVlI1Y0dWVGRYQndiM0owWldRZ1BTQWhjMlZ0Vkhsd1pYTXViR1Z1WjNSb0lIeDhJQ2hqYjJ3dWMyVnRWSGx3WlNBbUppQnpaVzFVZVhCbGN5NXBibU5zZFdSbGN5aGpiMnd1YzJWdFZIbHdaU2twTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSNWNHVlRkWEJ2Y25SbFpDQTlJQ0YwZVhCbGN5NXNaVzVuZEdnZ2ZId2dkSGx3WlhNdWFXNWpiSFZrWlhNb1kyOXNMblI1Y0dVcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIVnVhWFJ6VTNWd2NHOXlkR1ZrSUQwZ0lYVnVhWFJ6TG14bGJtZDBhQ0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdLR052YkM1blpYUlVZV2NvUkVjdVZFRkhVeTVWVGtsVVV5a2dKaVlnZFc1cGRITXVhVzVqYkhWa1pYTW9ZMjlzTG1kbGRGUmhaeWhFUnk1VVFVZFRMbFZPU1ZSVEtTa3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHpaVzFVZVhCbFUzVndjRzl5ZEdWa0lDWW1JSFI1Y0dWVGRYQnZjblJsWkNBbUppQjFibWwwYzFOMWNIQnZjblJsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRjBhR2x6TG1OdmJIVnRia1oxYm1OMGFXOXVjMDFoY0Z0amIyd3VibUZ0WlYwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdVJuVnVZM1JwYjI1elRXRndXMk52YkM1dVlXMWxYU0E5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiMngxYlc1R2RXNWpkR2x2Ym5OTllYQmJZMjlzTG01aGJXVmRMbkIxYzJnb1puVnVZMDVoYldVcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lHTnZibk4wSUhOMWNIQnZjblJsWkVOdmJFNWhiV1Z6SUQwZ1QySnFaV04wTG10bGVYTW9kR2hwY3k1amIyeDFiVzVHZFc1amRHbHZibk5OWVhBcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5c2RXMXVjMGx1Y0hWMElEMGdkV2t1WTI5c2RXMXVjMGx1Y0hWMEtDZERiMngxYlc1ekp5d2dkR0ZpYkdVc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV2YmtOdmJIVnRibk5EYUdGdVoyVmtMbTVsZUhRb0tUdGNiaUFnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6VW05dmRDazdYRzRnSUNBZ0lDQWdJSFZwTG1WdGNIUjVLSFJvYVhNdWQyVnBaMmgwYzBWa2FYUnZjbEp2YjNRcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCamIyeHpJRDBnWTI5c2RXMXVjMGx1Y0hWMExuWmhiSFZsTzF4dUlDQWdJQ0FnSUNCcFppQW9JV052YkhNZ2ZId2dZMjlzY3o4dWJHVnVaM1JvSUR3Z01pbGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1Y205dmRDNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyNXZibVVuTzF4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWhaMmR5WldkaGRHbHZiazFsZEdodlpFbHVjSFYwTG5KdmIzUXVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZG1iR1Y0Snp0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0ZqYjJ4eklIeDhJR052YkhNdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNVFZWEpoYlhORlpHbDBiM0pCWTJOdmNtUnBiMjR1Y205dmRDNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyNXZibVVuTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1VDNCMFJXUnBkRzl5Y3lBOUlHTnZiSE11YldGd0tDaGpiMndwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmxaR2wwYjNKRGJHRnpjeUE5SUc1bGR5QkVhVzFTWldSMVkzUnBiMjVEYjJ4MWJXNUZaR2wwYjNJb1kyOXNMQ0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdGpiMnd1Ym1GdFpWMHViV0Z3S0NocGRDa2dQVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6VzJsMFhTa3BPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJsWkdsMGIzSkRiR0Z6Y3p0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElHVmthWFJ2Y25OU2IyOTBJRDBnZFdrdVpHbDJWaWhiWFN3Z2UzTjBlV3hsT2lCN2JXRjRTR1ZwWjJoME9pQW5OREF3Y0hnbkxDQnZkbVZ5Wm14dmR6b2dKMkYxZEc4bmZYMHBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTnZiSFZ0Yms5d2RFVmthWFJ2Y25NdVptOXlSV0ZqYUNnb1pXUnBkRzl5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWldScGRHOXljMUp2YjNRdVlYQndaVzVrUTJocGJHUW9aV1JwZEc5eUxtRmpZMjl5WkdsdmJrUnBkaWs3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQXZMM1JvYVhNdVkyOXNkVzF1VDNCMFJXUnBkRzl5YzFKdmIzUXVZWEJ3Wlc1a1EyaHBiR1FvWldScGRHOXljMUp2YjNRcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCa2IzVmliR1ZrUTI5c1JXUnBkRzl5Y3lBOUlHNWxkeUJCY25KaGVUeGhibmsrS0hSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWN5NXNaVzVuZEdnZ0tpQXlLUzVtYVd4c0tHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ0xtMWhjQ2dvWHl3Z2FTa2dQVDRnYVNBbElESWdQVDA5SURBZ1B5QjBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk5iYVNBdklESmRMbU52YkU5d2RFVmthWFJ2Y25NZ09pQmJYU2s3WEc0Z0lDQWdJQ0FnSUd4bGRDQmpJRDBnTUR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZEdGaWJHVWdQU0IxYVM1MFlXSnNaU2hrYjNWaWJHVmtRMjlzUldScGRHOXljeXdnS0dsMFpXMHBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpLeXM3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR2wwWlcwZ0ppWWdhWFJsYlM1c1pXNW5kR2dnUGlBd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2wwWlcwN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NHRnlZVzF6UldScGRHOXlJRDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDaDBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk5iVFdGMGFDNW1iRzl2Y2lnb1l5QXRJREVwSUM4Z01pbGRMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlnUFNCMWFTNWthWFlvVzEwcEtUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdXM0JoY21GdGMwVmthWFJ2Y2l3Z2RXa3VaR2wyS0Nrc0lIVnBMbVJwZGlncExDQjFhUzVrYVhZb0tWMDdYRzRnSUNBZ0lDQWdJSDBzSUZzblEyOXNkVzF1Snl3Z0owVnVZMjlrYVc1bklHWjFibU4wYVc5dUp5d2dKMU5wYldsc1lYSnBkSGtnYldWMGNtbGpKeXdnSjFkbGFXZG9kQ2RkS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNVBjSFJGWkdsMGIzSnpYRzRnSUNBZ0lDQWdJQ0FnTG1admNrVmhZMmdvS0dsMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBkQzV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMU5sZEhScGJtZHpSR2wyUHk1d1lYSmxiblJGYkdWdFpXNTBQeTV6WlhSQmRIUnlhV0oxZEdVb0oyTnZiSE53WVc0bkxDQW5OQ2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhWFF1Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMFJwZGo4dWNHRnlaVzUwUld4bGJXVnVkRDh1Y0dGeVpXNTBSV3hsYldWdWREOHVjM1I1YkdVL0xuTmxkRkJ5YjNCbGNuUjVLQ2RvWldsbmFIUW5MQ0FuZFc1elpYUW5LVHRjYmlBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWN5NXNaVzVuZEdnZ1BpQXdLVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdVVHRnlZVzF6UldScGRHOXlRV05qYjNKa2FXOXVMbkp2YjNRdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkbWJHVjRKenRjYmlBZ0lDQWdJQ0FnZEdGaWJHVXVZMnhoYzNOTWFYTjBMbUZrWkNnbmJXd3RaR2x0TFhKbFpIVmpkR2x2YmkxamIyeDFiVzR0WldScGRHOXlMWFJoWW14bExYSnZiM1FuS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNVBjSFJGWkdsMGIzSnpVbTl2ZEM1aGNIQmxibVJEYUdsc1pDaDBZV0pzWlNrN1hHNGdJQ0FnSUNCOUxDQjdZWFpoYVd4aFlteGxPaUJ6ZFhCd2IzSjBaV1JEYjJ4T1lXMWxjMzBwTzF4dUlDQWdJQ0FnWTI5c2RXMXVjMGx1Y0hWMExtWnBjbVZEYUdGdVoyVmtLQ2s3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11WTI5c2RXMXVjMGx1Y0hWMFVtOXZkQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJuTkpibkIxZEZKdmIzUWdQU0JqYjJ4MWJXNXpTVzV3ZFhRdWNtOXZkRHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpiMngxYlc1elNXNXdkWFFnUFNCamIyeDFiVzV6U1c1d2RYUTdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG1OdmJIVnRibk5KYm5CMWRGSnZiM1FwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJuTkpibkIxZENBOUlHTnZiSFZ0Ym5OSmJuQjFkRHRjYmlBZ0lDQWdJQ0FnUVhKeVlYa3Vabkp2YlNoMGFHbHpMbU52YkhWdGJuTkpibkIxZEM1eWIyOTBMbU5vYVd4a2NtVnVLVnh1SUNBZ0lDQWdJQ0FnSUM1bWIzSkZZV05vS0NocGRDa2dQVDRnZEdocGN5NWpiMngxYlc1elNXNXdkWFJTYjI5MExtRndjR1Z1WkVOb2FXeGtLR2wwS1NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEJ5YVhaaGRHVWdZM0psWVhSbFFXeG5iM0pwZEdodFUyVjBkR2x1WjNORWFYWW9YRzRnSUNBZ0lDQndZWEpoYlhNNklGVk5RVkJQY0hScGIyNXpJSHdnVkZOT1JVOXdkR2x2Ym5NZ2ZDQkVRbE5qWVc1UGNIUnBiMjV6S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR2h2WkZObGRIUnBibWR6UkdsMmN5NW1iM0pGWVdOb0tDaHBkQ2tnUFQ0Z2FYUXVjbVZ0YjNabEtDa3BPMXh1SUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMFJwZG5NZ1BTQmJYVHRjYmlBZ0lDQWdJR052Ym5OMElHRnVZMmh2Y2lBOUlIUm9hWE11YldWMGFHOWtVMlYwZEdsdVozTkJibU5vYjNJN1hHNGdJQ0FnSUNCamIyNXpkQ0J3WVhKbGJuUWdQU0JoYm1Ob2IzSXVjR0Z5Wlc1MFJXeGxiV1Z1ZENCaGN5QklWRTFNUkdsMlJXeGxiV1Z1ZENCOElHNTFiR3c3WEc0Z0lDQWdJQ0JwWmlBb0lYQmhjbVZ1ZENsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnVDJKcVpXTjBMbXRsZVhNb2NHRnlZVzF6S1M1bWIzSkZZV05vS0NocGREb2dZVzU1S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElIQmhjbUZ0T2lCSlJHbHRVbVZrZFdOMGFXOXVVR0Z5WVcwZ2ZDQkpSR2x0VW1Wa2RXTjBhVzl1VUdGeVlXMDhjM1J5YVc1blBpQjhJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiVHhpYjI5c1pXRnVQaUE5WEc0Z0lDQWdJQ0FnSUNBZ0tIQmhjbUZ0Y3lCaGN5QmhibmtwVzJsMFhUdGNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibkIxZENBOUlIQmhjbUZ0TG5SNWNHVWdQVDA5SUNkemRISnBibWNuSUQ5Y2JpQWdJQ0FnSUNBZ0lDQjFhUzV6ZEhKcGJtZEpibkIxZENod1lYSmhiUzUxYVU1aGJXVXNJSEJoY21GdExuWmhiSFZsSUQ4L0lDY25MQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCd1lYSmhiUzUyWVd4MVpTQTlJQ2hwYm5CMWRDQmhjeUJFUnk1SmJuQjFkRUpoYzJVOGMzUnlhVzVuUGlrdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2ZTa2dPaUJ3WVhKaGJTNTBlWEJsSUQwOVBTQW5ZbTl2YkdWaGJpY2dQMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RXa3VZbTl2YkVsdWNIVjBLSEJoY21GdExuVnBUbUZ0WlN3Z2NHRnlZVzB1ZG1Gc2RXVWdQejhnWm1Gc2MyVXNJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlZVzB1ZG1Gc2RXVWdQU0FvYVc1d2RYUWdZWE1nUkVjdVNXNXdkWFJDWVhObFBHSnZiMnhsWVc0K0tTNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwSURwY2JpQWdJQ0FnSUNBZ0lDQWdJSFZwTG1ac2IyRjBTVzV3ZFhRb2NHRnlZVzB1ZFdsT1lXMWxMQ0J3WVhKaGJTNTJZV3gxWlNCaGN5QmhibmtzSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjR0Z5WVcwdWRtRnNkV1VnUFNCcGJuQjFkQzUyWVd4MVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvY0dGeVlXMHVaR2x6WVdKc1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdWNIVjBMbVZ1WVdKc1pXUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG1KcGJtUW9hVzV3ZFhRdWFXNXdkWFFnUHo4Z2FXNXdkWFF1Y205dmRDd2djR0Z5WVcwdVpHbHpZV0pzWlZSdmIyeDBhWEFnUHo4Z0p5Y3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdleUIxYVM1MGIyOXNkR2x3TG1KcGJtUW9hVzV3ZFhRdWFXNXdkWFFnUHo4Z2FXNXdkWFF1Y205dmRDd2djR0Z5WVcwdWRHOXZiSFJwY0NrN0lIMWNiaUFnSUNBZ0lDQWdjR0Z5Wlc1MExtbHVjMlZ5ZEVKbFptOXlaU2hwYm5CMWRDNXliMjkwTENCaGJtTm9iM0lwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJjeTV3ZFhOb0tHbHVjSFYwTG5KdmIzUXBPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdaMlYwSUdGc1oyOXlhWFJvYlU5d2RHbHZibk1vS1RvZ1NWVk5RVkJQY0hScGIyNXpJSHdnU1ZSVFRrVlBjSFJwYjI1eklIdGNiaUFnSUNBZ0lHTnZibk4wSUdGc1oyOXlhWFJvYlZCaGNtRnRjem9nVlUxQlVFOXdkR2x2Ym5NZ2ZDQlVVMDVGVDNCMGFXOXVjeUE5SUhSb2FYTXViV1YwYUc5a2MxQmhjbUZ0YzF0MGFHbHpMbTFsZEdodlpFbHVjSFYwTG5aaGJIVmxJVjA3WEc0Z0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1ek9pQmhibmtnUFNCN2ZUdGNiaUFnSUNBZ0lFOWlhbVZqZEM1clpYbHpLR0ZzWjI5eWFYUm9iVkJoY21GdGN5a3VabTl5UldGamFDZ29hMlY1T2lCemRISnBibWNwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0NoaGJHZHZjbWwwYUcxUVlYSmhiWE1nWVhNZ1lXNTVLVnRyWlhsZExuWmhiSFZsSUNFOUlHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ2IzQjBhVzl1YzF0clpYbGRJRDBnS0dGc1oyOXlhWFJvYlZCaGNtRnRjeUJoY3lCaGJua3BXMnRsZVYwdWRtRnNkV1U3WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ2Y0hScGIyNXpPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHZGxkQ0JrWWxOallXNVBjSFJwYjI1ektDazZJRWxFUWxOallXNVBjSFJwYjI1eklIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lHUmlVMk5oYmtWd2MybHNiMjQ2SUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6TG1Wd2MybHNiMjR1ZG1Gc2RXVWdQejhnTUM0d01TeGNiaUFnSUNBZ0lDQWdaR0pUWTJGdVRXbHVVSFJ6T2lCMGFHbHpMbVJpVTJOaGJsQmhjbUZ0Y3k1dGFXNVFkSE11ZG1Gc2RXVWdQejhnTkZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdaMlYwUldScGRHOXlLQ2s2SUVoVVRVeEZiR1Z0Wlc1MElIdGNiaUFnSUNBZ0lHTnZibk4wSUdScGRpQTlJSFZwTG1ScGRpaGJYRzRnSUNBZ0lDQWdJSFJvYVhNdWRHRmliR1ZKYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJuTkpibkIxZEZKdmIzUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1VUdGeVlXMXpSV1JwZEc5eVVtOXZkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NWhaMmR5WldkaGRHbHZiazFsZEdodlpFbHVjSFYwTG5KdmIzUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWJXVjBhRzlrU1c1d2RYUXVjbTl2ZEN4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WlhSb2IyUlRaWFIwYVc1bmMwRnVZMmh2Y2l4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3Ykc5MFJXMWlaV1JrYVc1bmMwbHVjSFYwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ2YzNSUWNtOWpaWE56YVc1blJXUnBkRzl5TG5KdmIzUXNYRzRnSUNBZ0lDQmRMQ0I3YzNSNWJHVTZJSHR0YVc1WGFXUjBhRG9nSnpReU1IQjRKMzBzSUdOc1lYTnpaWE02SUNka2FXMHRjbVZrZFdOMGFXOXVMV1JwWVd4dlp5MW1iM0p0SjMwcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdScGRqdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nWjJWMFVHRnlZVzF6S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2RHRmliR1U2SUhSb2FYTXVkR0ZpYkdWSmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJR052YkhWdGJuTTZJSFJvYVhNdVkyOXNkVzF1YzBsdWNIVjBMblpoYkhWbElTeGNiaUFnSUNBZ0lDQWdiV1YwYUc5a1RtRnRaVG9nZEdocGN5NXRaWFJvYjJSSmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5NNklIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljeTV0WVhBb0tHbDBLU0E5UGlCcGRDNXdjbVZRY205alpYTnphVzVuUm5WdVkzUnBiMjRwTEZ4dUlDQWdJQ0FnSUNCa2FYTjBZVzVqWlUxbGRISnBZM002SUhSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWN5NXRZWEFvS0dsMEtTQTlQaUJwZEM1emFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUXVkbUZzZFdVaEtTeGNiaUFnSUNBZ0lDQWdkMlZwWjJoMGN6b2dkR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG0xaGNDZ29hWFFwSUQwK0lHbDBMbmRsYVdkb2RDQS9QeUF4S1N4Y2JpQWdJQ0FnSUNBZ2IzQjBhVzl1Y3pvZ2V5NHVMblJvYVhNdVlXeG5iM0pwZEdodFQzQjBhVzl1Y3l3Z0xpNHVkR2hwY3k1a1lsTmpZVzVQY0hScGIyNXpMRnh1SUNBZ0lDQWdJQ0FnSUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqUVhKbmN6b2dkR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG0xaGNDZ29hWFFwSUQwK0lHbDBMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmxObGRIUnBibWR6S1gwc1hHNGdJQ0FnSUNBZ0lIQnNiM1JGYldKbFpHUnBibWR6T2lCMGFHbHpMbkJzYjNSRmJXSmxaR1JwYm1kelNXNXdkWFF1ZG1Gc2RXVXNYRzRnSUNBZ0lDQWdJR05zZFhOMFpYSkZiV0psWkdScGJtZHpPaUJtWVd4elpTeGNiaUFnSUNBZ0lDQWdjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmpvZ2RHaHBjeTV3YjNOMFVISnZZMlZ6YzJsdVowVmthWFJ2Y2k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVMRnh1SUNBZ0lDQWdJQ0J3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dVFYSm5jem9nZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBWa2FYUnZjaTVoY21kekxGeHVJQ0FnSUNBZ0lDQmhaMmR5WldGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCMGFHbHpMbUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtTVzV3ZFhRdWRtRnNkV1ZjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdmVnh1ZlZ4dVhHNWNibU5zWVhOeklFUnBiVkpsWkhWamRHbHZia052YkhWdGJrVmthWFJ2Y2lCN1hHNGdJQ0FnY0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMFJwZGlBOUlIVnBMbVJwZGloYlhTazdYRzRnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRNklFUkhMa2x1Y0hWMFFtRnpaVHh6ZEhKcGJtY2dmQ0J1ZFd4c1BqdGNiaUFnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJqb2dTRlJOVEVWc1pXMWxiblE3WEc0Z0lDQWdjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwSVRvZ1JFY3VTVzV3ZFhSQ1lYTmxQSE4wY21sdVp5QjhJRzUxYkd3K08xeHVJQ0FnSUhOcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FoT2lCSVZFMU1SV3hsYldWdWREdGNiaUFnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNVRaWFIwYVc1bmN6b2dUM0IwYVc5dWN5QTlJSHQ5TzF4dUlDQWdJR0ZqWTI5eVpHbHZia1JwZGpvZ1NGUk5URVZzWlcxbGJuUTdYRzRnSUNBZ1kyOXNkVzF1T2lCRVJ5NURiMngxYlc0N1hHNGdJQ0FnYzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6T2lCRWFXMVNaV1JUZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iWFR0Y2JpQWdJQ0JsWkdsMGIzSkVhWFk2SUVoVVRVeEZiR1Z0Wlc1MElEMGdkV2t1WkdsMktGdGRLVHRjYmlBZ0lDQm9ZWE5GZUhSeVlWTmxkSFJwYm1kek9pQmliMjlzWldGdUlEMGdkSEoxWlR0Y2JpQWdJQ0JtZFc1amRHbHZibk5OWVhBNklIdGJYem9nYzNSeWFXNW5YVG9nUkVjdVJuVnVZMzBnUFNCN2ZUdGNiaUFnSUNCdVpXVmtjME52Ym1acFozVnlZWFJwYjI0NklHSnZiMnhsWVc0Z1BTQm1ZV3h6WlR0Y2JpQWdJQ0IzWldsbmFIUkpibkIxZERvZ1JFY3VTVzV3ZFhSQ1lYTmxQRzUxYldKbGNpQjhJRzUxYkd3K08xeHVJQ0FnSUhkbGFXZG9kRG9nYm5WdFltVnlJRDBnTVR0Y2JpQWdJQ0JqYjJ4UGNIUkZaR2wwYjNKek9pQklWRTFNUld4bGJXVnVkRnRkSUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9ZMjlzZFcxdU9pQkVSeTVEYjJ4MWJXNHNJSE4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjem9nUkdsdFVtVmtVM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXMTBwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVkMlZwWjJoMFNXNXdkWFFnUFNCMWFTNW1iRzloZEVsdWNIVjBLQ2RYWldsbmFIUW5MQ0F4TENBb0tTQTlQaUI3SUhSb2FYTXVkMlZwWjJoMElEMGdkR2hwY3k1M1pXbG5hSFJKYm5CMWRDNTJZV3gxWlNBL1B5QXhPeUI5S1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdUlEMGdZMjlzZFcxdU8xeHVJQ0FnSUNBZ0x5OGdjMjl5ZENCaWVTQnpjR1ZqYVdacFkybDBlVnh1SUNBZ0lDQWdkR2hwY3k1emRYQndiM0owWldSR2RXNWpkR2x2Ym5NZ1BTQnpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTXVjMjl5ZENnb1lTd2dZaWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dFdWRXNXBkSE11YkdWdVozUm9JRDA5UFNBd0lIeDhJR0l1ZFc1cGRITXViR1Z1WjNSb0lEMDlQU0F3S1NBbUppQmhMblZ1YVhSekxteGxibWQwYUNBaFBUMGdZaTUxYm1sMGN5NXNaVzVuZEdncFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHSXVkVzVwZEhNdWJHVnVaM1JvSUMwZ1lTNTFibWwwY3k1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUdsbUlDaGhMblZ1YVhSekxteGxibWQwYUNBaFBUMGdZaTUxYm1sMGN5NXNaVzVuZEdncFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHRXVkVzVwZEhNdWJHVnVaM1JvSUMwZ1lpNTFibWwwY3k1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUdsbUlDaGhMbk5sYlZSNWNHVnpMbXhsYm1kMGFDQTlQVDBnTUNCOGZDQmlMbk5sYlZSNWNHVnpMbXhsYm1kMGFDQTlQVDBnTUNsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lpNXpaVzFVZVhCbGN5NXNaVzVuZEdnZ0xTQmhMbk5sYlZSNWNHVnpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lDQWdhV1lnS0dFdWMyVnRWSGx3WlhNdWJHVnVaM1JvSUNFOVBTQmlMbk5sYlZSNWNHVnpMbXhsYm1kMGFDbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZUzV6WlcxVWVYQmxjeTVzWlc1bmRHZ2dMU0JpTG5ObGJWUjVjR1Z6TG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0V1ZEhsd1pYTXViR1Z1WjNSb0lDMGdZaTUwZVhCbGN5NXNaVzVuZEdnN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6TG1admNrVmhZMmdvS0dZcElEMCtJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NW1kVzVqZEdsdmJuTk5ZWEJiWjJWMFJuVnVZMDVoYldVb1ppNW1kVzVqS1YwZ1BTQm1MbVoxYm1NN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFFnUFNCMWFTNWphRzlwWTJWSmJuQjFkQ2duUlc1amIyUnBibWNnWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSUNCblpYUkdkVzVqVG1GdFpTaDBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1YzFzd1hTNW1kVzVqS1N3Z2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk11YldGd0tDaHBkQ2tnUFQ0Z1oyVjBSblZ1WTA1aGJXVW9hWFF1Wm5WdVl5a3BMRnh1SUNBZ0lDQWdJQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkbUZzSUQwZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQzUyWVd4MVpTRTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdablZ1WXlBOUlIUm9hWE11Wm5WdVkzUnBiMjV6VFdGd1czWmhiRjA3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1VFpYUjBhVzVuY3lBOUlIdDlPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVhR0Z6UlhoMGNtRlRaWFIwYVc1bmN5QTlJR1oxYm1NdWFXNXdkWFJ6TG14bGJtZDBhQ0ErSURJN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzVndSaUE5SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpMbVpwYm1Rb0tHbDBLU0E5UGlCblpYUkdkVzVqVG1GdFpTaHBkQzVtZFc1aktTQTlQVDBnZG1Gc0tTRTdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NW5aWFJUYVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRb2MzVndSaWs3WEc0Z0lDQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMU5sZEhScGJtZHpSR2wyS1R0Y2JpQWdJQ0FnSUNBZ0lDQnpaWFIwYVc1bmMwOXdaVzVsWkNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2doZEdocGN5NW9ZWE5GZUhSeVlWTmxkSFJwYm1kektWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelNXTnZiaTV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBsamIyNHVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZG1iR1Y0Snp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1Y205dmRDNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyWnNaWGduTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbU55WldGMFpWTmxkSFJwYm1kelJHbDJLSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBScGRpd2dkR2hwY3k1emRYQndiM0owWldSR2RXNWpkR2x2Ym5OYk1GMHVablZ1WXlsY2JpQWdJQ0FnSUNBZ0xuUm9aVzRvS0NrZ1BUNGdleUIxYVM1bGJYQjBlU2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNORWFYWXBPeUI5S1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVuWlhSVGFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUW9kR2hwY3k1emRYQndiM0owWldSR2RXNWpkR2x2Ym5OYk1GMHBPMXh1SUNBZ0lDQWdkR2hwY3k1b1lYTkZlSFJ5WVZObGRIUnBibWR6SUQwZ2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iTUYwdVpuVnVZeTVwYm5CMWRITXViR1Z1WjNSb0lENGdNanRjYmx4dUlDQWdJQ0FnYkdWMElITmxkSFJwYm1kelQzQmxibVZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNOSlkyOXVJRDBnZFdrdWFXTnZibk11YzJWMGRHbHVaM01vWVhONWJtTWdLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnpaWFIwYVc1bmMwOXdaVzVsWkNBOUlDRnpaWFIwYVc1bmMwOXdaVzVsWkR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSE5sZEhScGJtZHpUM0JsYm1Wa0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWVhkaGFYUWdkR2hwY3k1amNtVmhkR1ZUWlhSMGFXNW5jMFJwZGloMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1aMWJtTjBhVzl1YzAxaGNGdDBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG5aaGJIVmxJVjBwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIVnBMbVZ0Y0hSNUtIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMFJwZGlrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMHNJQ2ROYjJScFpua2daVzVqYjJScGJtY2dablZ1WTNScGIyNGdjR0Z5WVcxbGRHVnljeWNwTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBMbkp2YjNRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1eWIyOTBMbkJ5WlhCbGJtUW9kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJpazdYRzVjYmlBZ0lDQWdJR2xtSUNnaGRHaHBjeTVvWVhORmVIUnlZVk5sZEhScGJtZHpLVnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNOSlkyOXVMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBsamIyNHVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZG1iR1Y0Snp0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV1WldWa2MwTnZibVpwWjNWeVlYUnBiMjRnUFNBaEtITjFjSEJ2Y25SbFpFWjFibU4wYVc5dWN5NXNaVzVuZEdnZ1BDQXlJQ1ltSUNGMGFHbHpMbWhoYzBWNGRISmhVMlYwZEdsdVozTWdKaVpjYmlBZ0lDQWdJSE4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjMXN3WFM1a2FYTjBZVzVqWlVaMWJtTjBhVzl1Y3k1c1pXNW5kR2dnUENBeUtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXNkVzF1VkdsMGJHVWdQU0IxYVM1b015aDBhR2x6TG1OdmJIVnRiaTV1WVcxbExDQjdZMnhoYzNObGN6b2dKMjFzTFdScGJTMXlaV1IxWTNScGIyNHRZMjlzZFcxdUxXVmthWFJ2Y2kxamIyeDFiVzR0ZEdsMGJHVW5mU2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnZiRTl3ZEVWa2FYUnZjbk1nUFNCYlhHNGdJQ0FnSUNBZ0lHTnZiSFZ0YmxScGRHeGxMQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMExuSnZiM1FzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDd2dkR2hwY3k1M1pXbG5hSFJKYm5CMWRDNXliMjkwWEc0Z0lDQWdJQ0JkTzF4dUlDQWdJQ0FnTHk4Z1lYTnphV2R1SUhSdmIyeDBhWEJ6WEc0Z0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG1KcGJtUW9ZMjlzZFcxdVZHbDBiR1VzSUhSb2FYTXVZMjlzZFcxdUxtNWhiV1VwTzF4dVhHNGdJQ0FnSUNBdkx5QjBhR2x6TG1OdmJFOXdkRVZrYVhSdmNuTXVabTl5UldGamFDZ29hWFFzSUdrcElEMCtJSHRjYmlBZ0lDQWdJQzh2SUNBZ2FYUXVjM1I1YkdVdWQybGtkR2dnUFNCZ0pIdGxaR2wwYjNKWGFXUjBhSE5iYVYxOUpXQTdYRzRnSUNBZ0lDQXZMeUI5S1R0Y2JseHVJQ0FnSUNBZ0x5OWhaR1FnWTJ4aGMzTmxjMXh1SUNBZ0lDQWdkR2hwY3k1amIyeFBjSFJGWkdsMGIzSnpMbVp2Y2tWaFkyZ29LR2wwS1NBOVBpQnBkQzVqYkdGemMweHBjM1F1WVdSa0tDZHRiQzFrYVcwdGNtVmtkV04wYVc5dUxXTnZiSFZ0YmkxbFpHbDBiM0l0YVc1d2RYUXRjbTl2ZENjcEtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1pHbHpkR0Z1WTJWUGNIUnBiMjV6UkdsMklEMGdkV2t1WkdsMlNDaGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyeFBjSFJGWkdsMGIzSnpMQ0I3WTJ4aGMzTmxjem9nSjIxc0xXUnBiUzF5WldSMVkzUnBiMjR0WTI5c2RXMXVMV1ZrYVhSdmNpMXliMjkwSjMxY2JpQWdJQ0FnSUNrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WVdOamIzSmthVzl1UkdsMklEMGdkV2t1WkdsMlZpaGJYU2s3WEc0Z0lDQWdJQ0IwYUdsekxtVmthWFJ2Y2tScGRpNWhjSEJsYm1SRGFHbHNaQ2hrYVhOMFlXNWpaVTl3ZEdsdmJuTkVhWFlwTzF4dUlDQWdJQ0FnZEdocGN5NWxaR2wwYjNKRWFYWXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelJHbDJLVHRjYmlBZ0lDQWdJSFJvYVhNdVlXTmpiM0prYVc5dVJHbDJMbUZ3Y0dWdVpFTm9hV3hrS0hSb2FYTXVaV1JwZEc5eVJHbDJLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm5aWFJUYVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRb2NISmxSblZ1WXpvZ1JHbHRVbVZrVTNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRDQTlJSFZwTG1Ob2IybGpaVWx1Y0hWMEtDZFRhVzFwYkdGeWFYUjVJRzFsZEhKcFl5Y3NJSEJ5WlVaMWJtTXVaR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTmJNRjBzSUhCeVpVWjFibU11WkdsemRHRnVZMlZHZFc1amRHbHZibk1wTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhSU2IyOTBJRDBnYVc1d2RYUXVjbTl2ZER0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRZ1BTQnBibkIxZER0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhWcExtVnRjSFI1S0hSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBJRDBnYVc1d2RYUTdYRzRnSUNBZ0lDQWdJRUZ5Y21GNUxtWnliMjBvZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFF1Y205dmRDNWphR2xzWkhKbGJpbGNiaUFnSUNBZ0lDQWdJQ0F1Wm05eVJXRmphQ2dvYVhRcElEMCtJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBVbTl2ZEM1aGNIQmxibVJEYUdsc1pDaHBkQ2twTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2RsZENCd2NtVlFjbTlqWlhOemFXNW5SblZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bWRXNWpkR2x2Ym5OTllYQmJkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1MllXeDFaU0ZkTzF4dUlDQWdJSDFjYmx4dUlDQWdJR0Z6ZVc1aklHTnlaV0YwWlZObGRIUnBibWR6UkdsMktIQmhjbUZ0YzBadmNtMDZJRWhVVFV4RmJHVnRaVzUwTENCbWRXNWpPaUJFUnk1R2RXNWpLVG9nVUhKdmJXbHpaVHhJVkUxTVJXeGxiV1Z1ZEQ0Z2UxeHVJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2NHRnlZVzF6Um05eWJTazdYRzRnSUNBZ0lDQnBaaUFvWm5WdVl5NXBibkIxZEhNdWJHVnVaM1JvSUR3Z015bGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnBMbVJwZGlncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWm1NZ1BTQm1kVzVqTG5CeVpYQmhjbVVvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMGN5QTlJR0YzWVdsMElHWmpMbUoxYVd4a1JXUnBkRzl5S0hWcExtUnBkaWdwS1R0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXlPeUJwSUR3Z1puVnVZeTVwYm5CMWRITXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM05iWmtsdWNIVjBMbTVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNCbVl5NXBibkIxZEZCaGNtRnRjMXRtZFc1akxtbHVjSFYwYzF0cFhTNXVZVzFsWFM1MllXeDFaU0I4ZkNCbVNXNXdkWFF1WkdWbVlYVnNkRlpoYkhWbE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZG1Gc0tWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQwZ2RtRnNPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibkIxZENBOUlHbHVjSFYwY3k1bWFXNWtLQ2hwYm5BcElEMCtJR2x1Y0M1d2NtOXdaWEowZVM1dVlXMWxJRDA5UFNCbVNXNXdkWFF1Ym1GdFpTazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGFXNXdkWFFwWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBaFBUMGdiblZzYkNBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ0lUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkQzUyWVd4MVpTQTlJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBOUlHbHVjSFYwTG5aaGJIVmxPeUI5S1R0Y2JpQWdJQ0FnSUNBZ2NHRnlZVzF6Um05eWJTNWhjSEJsYm1Rb2FXNXdkWFF1Y205dmRDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQndZWEpoYlhOR2IzSnRMbk4wZVd4bExtMWhjbWRwYmtKdmRIUnZiU0E5SUNjeE1IQjRKenRjYmlBZ0lDQWdJSEpsZEhWeWJpQndZWEpoYlhOR2IzSnRPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSblZ1WTA1aGJXVW9ablZ1WXpvZ1JFY3VSblZ1WXlrZ2UxeHVJQ0J5WlhSMWNtNGdablZ1WXk1bWNtbGxibVJzZVU1aGJXVWdQejhnWm5WdVl5NXVZVzFsTzF4dWZWeHVYRzVqYkdGemN5QlFiM04wVUhKdlkyVnpjMmx1WjBaMWJtTkZaR2wwYjNJZ2UxeHVJQ0J3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dWMwMWhjRG9nZTF0clpYazZJSE4wY21sdVoxMDZJRVJITGtaMWJtTWdmQ0J1ZFd4c2ZTQTlJSHQ5TzF4dUlDQndiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUTZJRVJITGtOb2IybGpaVWx1Y0hWMFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQndjbWwyWVhSbElGOXliMjkwT2lCSVZFMU1SV3hsYldWdWRDQTlJSFZwTG1ScGRpaGJYU2s3WEc0Z0lIQnlhWFpoZEdVZ1gzQnZjM1JRY205alpYTnphVzVuUVhKbmN6b2dUM0IwYVc5dWN5QTlJSHQ5TzF4dUlDQndjbWwyWVhSbElGOWhjbWR6Uld4bGJXVnVkRG9nU0ZSTlRFVnNaVzFsYm5RZ1BTQjFhUzVrYVhZb1cxMHBPMXh1SUNCd2NtbDJZWFJsSUY5elpYUjBhVzVuYzBsamIyNDZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQndjbWwyWVhSbElGOXpaWFIwYVc1bmMwOXdaVzVsWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JpQWdJQ0IwYUdsekxsOXpaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3loaGMzbHVZeUFvS1NBOVBpQjdYRzRnSUNBZ0lDQjBhR2x6TGw5elpYUjBhVzVuYzA5d1pXNWxaQ0E5SUNGMGFHbHpMbDl6WlhSMGFXNW5jMDl3Wlc1bFpEdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxsOXpaWFIwYVc1bmMwOXdaVzVsWkNsY2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWVhKbmMwVnNaVzFsYm5RdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkaWJHOWpheWM3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lIUm9hWE11WDJGeVozTkZiR1Z0Wlc1MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdkR2hwY3k1ZllYSm5jMFZzWlcxbGJuUXVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZHViMjVsSnp0Y2JseHVJQ0FnSUdOdmJuTjBJSEJ2YzNSUWNtOWpaWE56YVc1blJuVnVZM01nUFNCRVJ5NUdkVzVqTG1acGJtUW9lM1JoWjNNNklGdEVTVTFmVWtWRVgxQlBVMVJRVWs5RFJWTlRTVTVIWDBaVlRrTlVTVTlPWDFSQlIxMTlLVnh1SUNBZ0lDQWdMbVpwYkhSbGNpZ29aaWtnUFQ0Z1ppNXBibkIxZEhNdWJHVnVaM1JvSUQ0OUlESXBPMXh1SUNBZ0lIQnZjM1JRY205alpYTnphVzVuUm5WdVkzTXVabTl5UldGamFDZ29aaWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYm1GdFpTQTlJR1l1Wm5KcFpXNWtiSGxPWVcxbElEOC9JR1l1Ym1GdFpUdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJuTk5ZWEJiYm1GdFpWMGdQU0JtTzF4dUlDQWdJSDBwTzF4dUlDQWdJSFJvYVhNdWNHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZibk5OWVhCYkowNXZibVVuWFNBOUlHNTFiR3c3WEc1Y2JpQWdJQ0JqYjI1emRDQmtaV1poZFd4MFVHOXpkRkJ5YjJObGMzTnBibWRHZFc1aklEMGdUMkpxWldOMExtdGxlWE1vZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNDa3VabWx1WkNnb2FYUXBJRDArWEc0Z0lDQWdJQ0FoSVhSb2FYTXVjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5OTllYQmJhWFJkUHk1dmNIUnBiMjV6UHk1YlJFbE5YMUpGUkY5RVJVWkJWVXhVWDFCUFUxUlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMDFGVkVGZEtTQS9QeUFuVG05dVpTYzdYRzRnSUNBZ2RHaHBjeTV3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFFnUFZ4dUlDQWdJQ0FnZFdrdVkyaHZhV05sU1c1d2RYUW9KMUJ2YzNSd2NtOWpaWE56YVc1bkp5d2daR1ZtWVhWc2RGQnZjM1JRY205alpYTnphVzVuUm5WdVl5eGNiaUFnSUNBZ0lDQWdUMkpxWldOMExtdGxlWE1vZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNDa3NJR0Z6ZVc1aklDZ3BJRDArSUhzZ1lYZGhhWFFnZEdocGN5NXZia1oxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPeUI5TEZ4dUlDQWdJQ0FnSUNCN2JuVnNiR0ZpYkdVNklHWmhiSE5sZlNrN1hHNGdJQ0FnZEdocGN5NXZia1oxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPMXh1SUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG01MWJHeGhZbXhsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG5KdmIzUXVjSEpsY0dWdVpDaDBhR2x6TGw5elpYUjBhVzVuYzBsamIyNHBPMXh1SUNBZ0lIUm9hWE11WDNKdmIzUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVjbTl2ZENrN1hHNGdJQ0FnZEdocGN5NWZjbTl2ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TGw5aGNtZHpSV3hsYldWdWRDazdYRzRnSUgxY2JseHVJQ0JuWlhRZ2NHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWRtRnNkV1VnUDF4dUlDQWdJQ0FnZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNGdDBhR2x6TG5CdmMzUlFjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1MllXeDFaVjBnT2lCdWRXeHNPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdiMjVHZFc1amRHbHZia05vWVc1blpXUW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ1puVnVZeUE5SUhSb2FYTXVjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ymp0Y2JpQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxsOWhjbWR6Uld4bGJXVnVkQ2s3WEc0Z0lDQWdkR2hwY3k1ZmNHOXpkRkJ5YjJObGMzTnBibWRCY21keklEMGdlMzA3WEc0Z0lDQWdhV1lnS0NGbWRXNWpJSHg4SUdaMWJtTXVhVzV3ZFhSekxteGxibWQwYUNBOElETXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgzTmxkSFJwYm1kelNXTnZiaTV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDA3WEc0Z0lDQWdkR2hwY3k1ZmMyVjBkR2x1WjNOSlkyOXVMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5abXhsZUNjN1hHNGdJQ0FnWTI5dWMzUWdabU1nUFNCbWRXNWpMbkJ5WlhCaGNtVW9LVHRjYmlBZ0lDQmpiMjV6ZENCcGJuQjFkSE1nUFNCaGQyRnBkQ0JtWXk1aWRXbHNaRVZrYVhSdmNpaDFhUzVrYVhZb0tTazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREk3SUdrZ1BDQm1kVzVqTG1sdWNIVjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCMllXd2dQU0IwYUdsekxsOXdiM04wVUhKdlkyVnpjMmx1WjBGeVozTmJaa2x1Y0hWMExtNWhiV1ZkSUh4OFhHNGdJQ0FnSUNBZ0lHWmpMbWx1Y0hWMFVHRnlZVzF6VzJaMWJtTXVhVzV3ZFhSelcybGRMbTVoYldWZExuWmhiSFZsSUh4OElHWkpibkIxZEM1a1pXWmhkV3gwVm1Gc2RXVTdYRzRnSUNBZ0lDQnBaaUFvZG1Gc0tWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5d2IzTjBVSEp2WTJWemMybHVaMEZ5WjNOYlprbHVjSFYwTG01aGJXVmRJRDBnZG1Gc08xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUWdQU0JwYm5CMWRITXVabWx1WkNnb2FXNXdLU0E5UGlCcGJuQXVjSEp2Y0dWeWRIa3VibUZ0WlNBOVBUMGdaa2x1Y0hWMExtNWhiV1VwTzF4dUlDQWdJQ0FnYVdZZ0tDRnBibkIxZENsY2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxsOXdiM04wVUhKdlkyVnpjMmx1WjBGeVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQwZ2FXNXdkWFF1ZG1Gc2RXVTdJSDBwTzF4dUlDQWdJQ0FnZEdocGN5NWZZWEpuYzBWc1pXMWxiblF1WVhCd1pXNWtLR2x1Y0hWMExuSnZiM1FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdkbGRDQnliMjkwS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXliMjkwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0Z5WjNNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM0J2YzNSUWNtOWpaWE56YVc1blFYSm5jenRjYmlBZ2ZWeHVmVnh1SWwxOSIsImV4cG9ydCBjb25zdCBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCA9ICdkaW1lbnNpb25hbGl0eS1yZWR1Y2VyLXRlcm1pbmF0ZS1ldmVudCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1YzNSekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWTI5dWMzUnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eE5RVUZOTEhORFFVRnpReXhIUVVGSExIZERRVUYzUXl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR052Ym5OMElFUkpUVVZPVTBsUFRrRk1TVlJaWDFKRlJGVkRSVkpmVkVWU1RVbE9RVlJGWDBWV1JVNVVJRDBnSjJScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWalpYSXRkR1Z5YldsdVlYUmxMV1YyWlc1MEp6dGNiaUpkZlE9PSIsImltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeCkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U21hbGxlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPiBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExhcmdlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpIHtcbiAgICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uTWV0aG9kKSB7XG4gICAgICAgIGNhc2UgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOOlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyB2YWwgKiB3ZWlnaHRzW2lkeF0sIDApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgKHZhbCAqIHdlaWdodHNbaWR4XSkgKiogMiwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICAgICAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoxZEdsc2N5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVRSQ0xEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJSVGxGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETzBGQlJTOUVMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zVjBGQmNVSXNSVUZCUlN4UFFVRnBRaXhGUVVGRkxFZEJRVmNzUlVGQlJTeExRVUZoTzBsQlEyaEhMRWxCUVVrc1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTzBsQlJWUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkVMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5zUWl4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTJRc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1dVRkJXU3hEUVVGRExGZEJRWEZDTEVWQlFVVXNUMEZCYVVJc1JVRkJSU3hIUVVGWExFVkJRVVVzUzBGQllUdEpRVU12Uml4SlFVRkpMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRla01zVDBGQlR6dEpRVVZVTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UkN4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGJFSXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNoRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTmtMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVU53UXl4cFFrRkJORU1zUlVGQlJTeFBRVUZwUWp0SlFVVXZSQ3hSUVVGUkxHbENRVUZwUWl4RlFVRkZPMUZCUTNwQ0xFdEJRVXNzTUVKQlFUQkNMRU5CUVVNc1UwRkJVenRaUVVOMlF5eFBRVUZQTEVOQlFVTXNSVUZCV1N4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKR08xbEJRMFVzVDBGQlR5eERRVUZETEVWQlFWa3NSVUZCUlN4RlFVRkZPMmRDUVVOMFFpeFpRVUZaTzJkQ1FVTmFMRTFCUVUwc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBVc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU1zUTBGQlF6dExRVU5NTzBGQlEwZ3NRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkhOOUlHWnliMjBnSnk0dmRIbHdaWE1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOT2FXd2dQU0FvZURvZ1lXNTVLU0E5UGlCNElEMDlQU0J1ZFd4c0lIeDhJSGdnUFQwOUlIVnVaR1ZtYVc1bFpEdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x1YzJWeWRGTnRZV3hzWlhJb1pHbHpkR0Z1WTJWelFYSTZJRzUxYldKbGNsdGRMQ0JwYm1SbGVHVnpPaUJ1ZFcxaVpYSmJYU3dnYm5WdE9pQnVkVzFpWlhJc0lHbHVaR1Y0T2lCdWRXMWlaWElwSUh0Y2JpQWdhV1lnS0c1MWJTQStJR1JwYzNSaGJtTmxjMEZ5VzJScGMzUmhibU5sYzBGeUxteGxibWQwYUMweFhTbGNiaUFnSUNCeVpYUjFjbTQ3WEc1Y2JpQWdZMjl1YzNRZ2JtVjNVRzl6YVhScGIyNGdQU0JrYVhOMFlXNWpaWE5CY2k1bWFXNWtTVzVrWlhnb0tIWXBJRDArSUc1MWJTQThJSFlwTzF4dUlDQmthWE4wWVc1alpYTkJjaTV3YjNBb0tUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWMzQnNhV05sS0c1bGQxQnZjMmwwYVc5dUxDQXdMQ0J1ZFcwcE8xeHVJQ0JwYm1SbGVHVnpMbkJ2Y0NncE8xeHVJQ0JwYm1SbGVHVnpMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2FXNWtaWGdwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhVzV6WlhKMFRHRnlaMlZ5S0dScGMzUmhibU5sYzBGeU9pQnVkVzFpWlhKYlhTd2dhVzVrWlhobGN6b2diblZ0WW1WeVcxMHNJRzUxYlRvZ2JuVnRZbVZ5TENCcGJtUmxlRG9nYm5WdFltVnlLU0I3WEc0Z0lHbG1JQ2h1ZFcwZ1BDQmthWE4wWVc1alpYTkJjbHRrYVhOMFlXNWpaWE5CY2k1c1pXNW5kR2d0TVYwcFhHNGdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lHTnZibk4wSUc1bGQxQnZjMmwwYVc5dUlEMGdaR2x6ZEdGdVkyVnpRWEl1Wm1sdVpFbHVaR1Y0S0NoMktTQTlQaUJ1ZFcwZ1BpQjJLVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjRzl3S0NrN1hHNGdJR1JwYzNSaGJtTmxjMEZ5TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2diblZ0S1R0Y2JpQWdhVzVrWlhobGN5NXdiM0FvS1R0Y2JpQWdhVzVrWlhobGN5NXpjR3hwWTJVb2JtVjNVRzl6YVhScGIyNHNJREFzSUdsdVpHVjRLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWEc0Z0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a0xDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhWeHVLVG9nS0haaGJIVmxjem9nYm5WdFltVnlXMTBwSUQwK0lHNTFiV0psY2lCN1hHNGdJSE4zYVhSamFDQW9ZV2RuY21WbllYUnBiMjVOWlhSb2IyUXBJSHRjYmlBZ0lDQmpZWE5sSUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6TGsxQlRraEJWRlJCVGpwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUIyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJSFpoYkNBcUlIZGxhV2RvZEhOYmFXUjRYU3dnTUNrN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsZEhWeWJpQW9kbk02SUc1MWJXSmxjbHRkS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUdWMVkyeHBaR1ZoYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6ZFcwZ1BTQjJjeTV5WldSMVkyVW9LR0ZqWXl3Z2RtRnNMQ0JwWkhncElEMCtJR0ZqWXlBcklDaDJZV3dnS2lCM1pXbG5hSFJ6VzJsa2VGMHBJQ29xSURJc0lEQXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSE4xYlNrN1hHNGdJQ0FnSUNCOU8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBEZW5vdGVzIGEgdmVjdG9yIG9mIGZsb2F0aW5nIHBvaXQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JcbiAqIEBleHRlbmRzIHtGbG9hdDMyQXJyYXl9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IgZXh0ZW5kcyBGbG9hdDMyQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGEgdHdvLWRpbWVuc2lvbmFsIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTWF0cml4XG4gKiBAZXh0ZW5kcyB7QXJyYXk8VmVjdG9yPn1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIENvb3JkaW5hdGVzXG4gKiBAZXh0ZW5kcyB7TWF0cml4fVxuICovXG5leHBvcnQgY2xhc3MgQ29vcmRpbmF0ZXMgZXh0ZW5kcyBNYXRyaXgge1xufVxuLyoqXG4gKiBEZW5vdGVzIGFuIGFycmF5IG9mIGFyYml0cmFyeS10eXBlZCB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JzXG4gKiBAZXh0ZW5kcyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcnMgZXh0ZW5kcyBBcnJheSB7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkZRVHM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRmxCUVZrN1EwRkJSenRCUVVVelF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxFdEJRV0U3UTBGQlJ6dEJRVVUxUXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVjBGQldTeFRRVUZSTEUxQlFVMDdRMEZCUnp0QlFVVXhRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRXRCUVZVN1EwRkJSeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFpsWTNSdmNpQnZaaUJtYkc5aGRHbHVaeUJ3YjJsMElIWmhiSFZsY3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFZMnhoYzNNZ1ZtVmpkRzl5WEc0Z0tpQkFaWGgwWlc1a2N5QjdSbXh2WVhRek1rRnljbUY1ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZtVmpkRzl5SUdWNGRHVnVaSE1nUm14dllYUXpNa0Z5Y21GNUlIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J0WVhSeWFYZ3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRTFoZEhKcGVGeHVJQ29nUUdWNGRHVnVaSE1nZTBGeWNtRjVQRlpsWTNSdmNqNTlYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWVhSeWFYZ2daWGgwWlc1a2N5QkJjbkpoZVR4V1pXTjBiM0krSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmpZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaWE11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUVOdmIzSmthVzVoZEdWelhHNGdLaUJBWlhoMFpXNWtjeUI3VFdGMGNtbDRmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUTI5dmNtUnBibUYwWlhNZ1pYaDBaVzVrY3lCTllYUnlhWGdnZTMxY2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRnVJR0Z5Y21GNUlHOW1JR0Z5WW1sMGNtRnllUzEwZVhCbFpDQjJaV04wYjNKekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJqYkdGemN5QldaV04wYjNKelhHNGdLaUJBWlhoMFpXNWtjeUI3UVhKeVlYazhZVzU1UG4xY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklGWmxZM1J2Y25NZ1pYaDBaVzVrY3lCQmNuSmhlVHhoYm5rK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUdScFkzUnBiMjVoY25rZ1kyOXVkR0ZwYm1sdVp5Qm1kVzVqZEdsdmJpQnZjSFJwYjI1ekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUIwZVhCbElFOXdkR2x2Ym5OY2JpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1QzQjBhVzl1Y3lBOUlIdGJibUZ0WlRvZ2MzUnlhVzVuWFRvZ1lXNTVmVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdOMWMzUnZiU0JrYVhOMFlXNWpaU0J0WlhSeWFXTWdZbVYwZDJWbGJpQjBhR1VnZEhkdklHZHBkbVZ1SUhabFkzUnZjbk11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIUjVjR1VnUkdsemRHRnVZMlZOWlhSeWFXTmNiaUFxSUVCd1lYSmhiU0I3WVc1NWZTQjJNU0JVYUdVZ1ptbHljM1FnZG1WamRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0aGJubDlJSFl5SUZSb1pTQnpaV052Ym1RZ2RtVmpkRzl5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkVhWE4wWVc1alpTQmlaWFIzWldWdUlIUm9aWE5sSUhSM2J5QjJaV04wYjNKekxseHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQkVhWE4wWVc1alpVMWxkSEpwWXlBOUlDaDJNVG9nWVc1NUxDQjJNam9nWVc1NUtTQTlQaUFvYm5WdFltVnlLVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdFZ2MybHRjR3hsSUhOMGNtbHVaeUIwYnlCemRISnBibWNnWkdsamRHbHZibUZ5ZVM1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFkSGx3WlNCVGRISnBibWRFYVdOMGFXOXVZWEo1WEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5mVHRjYmx4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JEYjJ4MWJXNUpibkIxZEU5d2RHbHZibk1nUFNCN1hHNGdJQ0FnWm1sc2RHVnlQem9nS0dOdmJEb2dSRWN1UTI5c2RXMXVLU0E5UGlCaWIyOXNaV0Z1SUh3Z2JuVnNiRHRjYm4wN1hHNGlYWDA9IiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IEJZUEFTU19MQVJHRV9EQVRBX1dBUk5JTkcsIFNIT1dfU0NBVFRFUlBMT1RfUFJPR1JFU1MgfSBmcm9tICcuLi9mdW5jdGlvbkVkaXRvcnMvY29uc3RzJztcbmltcG9ydCB7IGdldERic2NhbldvcmtlciB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aCc7XG5pbXBvcnQgeyBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGdldE5vcm1hbGl6ZWRFbWJlZGRpbmdzIH0gZnJvbSAnLi9lbWJlZGRpbmdzLXNwYWNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWJlZGRpbmdDb2xzTmFtZXMoZGYpIHtcbiAgICBjb25zdCBheGVzID0gWydFbWJlZF9YJywgJ0VtYmVkX1knXTtcbiAgICBjb25zdCBjb2xOYW1lSW5kID0gZGYuY29sdW1ucy5uYW1lcygpLmZpbHRlcigoaXQpID0+IGl0LmluY2x1ZGVzKGF4ZXNbMF0pKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBheGVzLm1hcCgoaXQpID0+IGAke2l0fV8ke2NvbE5hbWVJbmR9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRkaW5nVmlld2VyTmFtZShjb2x1bW5zLCBtZXRob2QpIHtcbiAgICBjb25zdCBjb2xOYW1lcyA9IGNvbHVtbnMubGVuZ3RoID4gNCA/IGAke2NvbHVtbnMubGVuZ3RofSBjb2x1bW5zYCA6IGNvbHVtbnMubWFwKChpdCkgPT4gaXQubmFtZSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCR7bWV0aG9kfSAoJHtjb2xOYW1lc30pYDtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5KHRhYmxlLCBjb2x1bW5zLCBtZXRob2QsIG1ldHJpY3MsIHdlaWdodHMsIHByZXByb2Nlc3NpbmdGdW5jdGlvbnMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwbG90RW1iZWRkaW5ncyA9IHRydWUsIGNsdXN0ZXJFbWJlZGRpbmdzID0gZmFsc2UsIGRpbVJlZE9wdGlvbnMgPSB7IHByZXByb2Nlc3NpbmdGdW5jQXJnczogW10gfSwgdWlPcHRpb25zID0ge30sIHBvc3RQcm9jZXNzaW5nRnVuYyA9IG51bGwsIHBvc3RQcm9jRnVuY0FyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHNjYXR0ZXJQbG90UHJvcHMgPSB7XG4gICAgICAgIHNob3dYQXhpczogZmFsc2UsXG4gICAgICAgIHNob3dZQXhpczogZmFsc2UsXG4gICAgICAgIHNob3dYU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICBzaG93WVNlbGVjdG9yOiBmYWxzZSxcbiAgICB9O1xuICAgIGlmIChjb2x1bW5zLmxlbmd0aCAhPT0gbWV0cmljcy5sZW5ndGggfHwgY29sdW1ucy5sZW5ndGggIT09IHByZXByb2Nlc3NpbmdGdW5jdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgIGNvbHVtbnMubGVuZ3RoICE9PSB3ZWlnaHRzLmxlbmd0aCB8fCBjb2x1bW5zLmxlbmd0aCAhPT0gZGltUmVkT3B0aW9ucy5wcmVwcm9jZXNzaW5nRnVuY0FyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29sdW1ucywgbWV0cmljcyBhbmQgcHJlcHJvY2Vzc2luZyBmdW5jdGlvbnMsIHdlaWdodHMgYW5kIGZ1bmN0aW9uIGFyZ3VtZW50cycgK1xuICAgICAgICAgICAgJ211c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICB9XG4gICAgY29uc3QgdHYgPSBwbG90RW1iZWRkaW5ncyA/IGdyb2suc2hlbGwudGFibGVWaWV3KHRhYmxlLm5hbWUpID8/IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHRhYmxlKSA6IG51bGw7XG4gICAgY29uc3QgZG9SZWR1Y2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBnID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZShgSW5pdGlhbGl6aW5nICR7dWlPcHRpb25zLnNjYXR0ZXJQbG90TmFtZSA/PyAnZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJ30gLi4uYCk7XG4gICAgICAgIGxldCBzY2F0dGVyUGxvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkQ29sc05hbWVzID0gZ2V0RW1iZWRkaW5nQ29sc05hbWVzKHRhYmxlKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzRnVuYyhfbkVwb2NoLCBlcG9jaHNMZW5ndGgsIGVtYmVkZGluZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgZW1iZWRYQ29sID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgZW1iZWRZQ29sID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmNvbHVtbnMubmFtZXMoKS5pbmNsdWRlcyhlbWJlZENvbHNOYW1lc1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1iZWRYQ29sID0gdGFibGUuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZsb2F0KGVtYmVkQ29sc05hbWVzWzBdLCB0YWJsZS5yb3dDb3VudCkpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFlDb2wgPSB0YWJsZS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZmxvYXQoZW1iZWRDb2xzTmFtZXNbMV0sIHRhYmxlLnJvd0NvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwbG90RW1iZWRkaW5ncyAmJiAhc2NhdHRlclBsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYXR0ZXJQbG90ID0gdHZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2NhdHRlclBsb3QoeyAuLi5zY2F0dGVyUGxvdFByb3BzLCB4OiBlbWJlZENvbHNOYW1lc1swXSwgeTogZW1iZWRDb2xzTmFtZXNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVpT3B0aW9ucy5zY2F0dGVyUGxvdE5hbWUgPz8gZ2V0RW1iZWRkaW5nVmlld2VyTmFtZShjb2x1bW5zLCBtZXRob2QpIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFhDb2wgPSB0YWJsZS5jb2x1bW5zLmJ5TmFtZShlbWJlZENvbHNOYW1lc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGVtYmVkWUNvbCA9IHRhYmxlLmNvbHVtbnMuYnlOYW1lKGVtYmVkQ29sc05hbWVzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVpT3B0aW9uc1tTSE9XX1NDQVRURVJQTE9UX1BST0dSRVNTXSkge1xuICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdD8ucm9vdCAmJiB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFhDb2wuaW5pdCgoaSkgPT4gZW1iZWRkaW5nc1swXSA/IGVtYmVkZGluZ3NbMF1baV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFlDb2wuaW5pdCgoaSkgPT4gZW1iZWRkaW5nc1sxXSA/IGVtYmVkZGluZ3NbMV1baV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IChfbkVwb2NoIC8gZXBvY2hzTGVuZ3RoICogMTAwKTtcbiAgICAgICAgICAgICAgICBwZy51cGRhdGUocHJvZ3Jlc3MsIGBSdW5uaW5nICR7dWlPcHRpb25zLnNjYXR0ZXJQbG90TmFtZSA/PyAnZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJ30uLi4gJHtwcm9ncmVzcy50b0ZpeGVkKDApfSVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGdldERpbVJlZCgpIHtcbiAgICAgICAgICAgICAgICB0YWJsZS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZmxvYXQoZW1iZWRDb2xzTmFtZXNbMF0sIHRhYmxlLnJvd0NvdW50KSk7XG4gICAgICAgICAgICAgICAgdGFibGUuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZsb2F0KGVtYmVkQ29sc05hbWVzWzFdLCB0YWJsZS5yb3dDb3VudCkpO1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlRiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHBsb3RFbWJlZGRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYXR0ZXJQbG90ID0gdHZcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zY2F0dGVyUGxvdCh7IC4uLnNjYXR0ZXJQbG90UHJvcHMsIHg6IGVtYmVkQ29sc05hbWVzWzBdLCB5OiBlbWJlZENvbHNOYW1lc1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1aU9wdGlvbnMuc2NhdHRlclBsb3ROYW1lID8/IGdldEVtYmVkZGluZ1ZpZXdlck5hbWUoY29sdW1ucywgbWV0aG9kKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHNjYXR0ZXJQbG90LnJvb3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBncm9rLmV2ZW50cy5vblZpZXdlckNsb3NlZC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGFyZ3MuYXJncy52aWV3ZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlICYmIHNjYXR0ZXJQbG90Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlID09PSBzY2F0dGVyUGxvdD8uZ2V0T3B0aW9ucygpPy5sb29rPy50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvay5ldmVudHMuZmlyZUN1c3RvbUV2ZW50KERJTUVOU0lPTkFMSVRZX1JFRFVDRVJfVEVSTUlOQVRFX0VWRU5ULCB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVGPy4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1SZWRSZXNQcm9taXNlID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUYgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZENvbEVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBmID0gcHJlcHJvY2Vzc2luZ0Z1bmN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sSW5wdXROYW1lID0gcGYuaW5wdXRzWzBdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldHJpY0lucHV0TmFtZSA9IHBmLmlucHV0c1sxXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVudHJpZXMsIG9wdGlvbnMgfSA9IGF3YWl0IHBmLmFwcGx5KHsgW2NvbElucHV0TmFtZV06IGNvbHVtbnNbaV0sIFttZXRyaWNJbnB1dE5hbWVdOiBtZXRyaWNzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGRpbVJlZE9wdGlvbnMucHJlcHJvY2Vzc2luZ0Z1bmNBcmdzW2ldID8/IHt9KSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENvbEVudHJpZXMucHVzaCh7IGVudHJpZXMsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MucHVzaChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBjb2x1bW5zW2ldLnRvTGlzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRDb2xFbnRyaWVzLnB1c2goeyBlbnRyaWVzLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1SZWRPcHRpb25zLmRpc3RhbmNlRm5BcmdzLnB1c2gob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MoZW5jb2RlZENvbEVudHJpZXMubWFwKChpdCkgPT4gaXQuZW50cmllcyksIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpbVJlZE9wdGlvbnMsIHVpT3B0aW9uc1tCWVBBU1NfTEFSR0VfREFUQV9XQVJOSU5HXSA/IHVuZGVmaW5lZCA6IHByb2dyZXNzRnVuYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRpbVJlZFJlc1Byb21pc2U7XG4gICAgICAgICAgICAgICAgcGcuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0RGltUmVkKCk7XG4gICAgICAgICAgICBpZiAoY2x1c3RlckVtYmVkZGluZ3MgJiYgcmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlclBnID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZShgQ2x1c3RlcmluZyBlbWJlZGRpbmdzIC4uLmApO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJSZXMgPSBhd2FpdCBnZXREYnNjYW5Xb3JrZXIocmVzWzBdLCByZXNbMV0sIGRpbVJlZE9wdGlvbnMuZGJTY2FuRXBzaWxvbiA/PyAwLjAxLCBkaW1SZWRPcHRpb25zLmRiU2Nhbk1pblB0cyA/PyA0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlckNvbE5hbWUgPSB0YWJsZS5jb2x1bW5zLmdldFVudXNlZE5hbWUoJ0NsdXN0ZXIgKERCU0NBTiknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlckNvbCA9IHRhYmxlLmNvbHVtbnMuYWRkTmV3U3RyaW5nKGNsdXN0ZXJDb2xOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlckNvbC5pbml0KChpKSA9PiBjbHVzdGVyUmVzW2ldLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NhdHRlclBsb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdC5wcm9wcy5jb2xvckNvbHVtbk5hbWUgPSBjbHVzdGVyQ29sTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcignQ2x1c3RlcmluZyBlbWJlZGRpbmdzIGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclBnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVtYmVkWENvbCA9IHRhYmxlLmNvbHVtbnMuYnlOYW1lKGVtYmVkQ29sc05hbWVzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbWJlZFlDb2wgPSB0YWJsZS5jb2x1bW5zLmJ5TmFtZShlbWJlZENvbHNOYW1lc1sxXSk7XG4gICAgICAgICAgICAgICAgZW1iZWRYQ29sLmluaXQoKGkpID0+IHJlc1swXVtpXSk7XG4gICAgICAgICAgICAgICAgZW1iZWRZQ29sLmluaXQoKGkpID0+IHJlc1sxXVtpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nRnVuYykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sMUlucHV0TmFtZSA9IHBvc3RQcm9jZXNzaW5nRnVuYy5pbnB1dHNbMF0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbDJJbnB1dE5hbWUgPSBwb3N0UHJvY2Vzc2luZ0Z1bmMuaW5wdXRzWzFdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwb3N0UHJvY2Vzc2luZ0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJlcGFyZSh7IFtjb2wxSW5wdXROYW1lXTogZW1iZWRYQ29sLCBbY29sMklucHV0TmFtZV06IGVtYmVkWUNvbCwgLi4ucG9zdFByb2NGdW5jQXJncyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdQb3N0LXByb2Nlc3NpbmcgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY2F0dGVyUGxvdCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdC5oZWxwVXJsID0gJy9oZWxwL2NvbXB1dGUvc2VxdWVuY2Utc3BhY2UnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhdHRlclBsb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgcGcuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmIChzY2F0dGVyUGxvdClcbiAgICAgICAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHVpT3B0aW9ucy5mYXN0Um93Q291bnQgJiYgdGFibGUucm93Q291bnQgPiB1aU9wdGlvbnMuZmFzdFJvd0NvdW50ICYmICF1aU9wdGlvbnNbQllQQVNTX0xBUkdFX0RBVEFfV0FSTklOR10pIHtcbiAgICAgICAgICAgICAgICB1aS5kaWFsb2coKVxuICAgICAgICAgICAgICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ0FuYWx5c2lzIG1pZ2h0IHRha2Ugc2V2ZXJhbCBtaW51dGVzLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8nKSlcbiAgICAgICAgICAgICAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZG9SZWR1Y2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2FuY2VsKCgpID0+IHJlc29sdmUodW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgLnNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRvUmVkdWNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eEpRVUZKTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU03UVVGRE1VTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVTjBReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJSWFJETEU5QlFVOHNSVUZCUXl4NVFrRkJlVUlzUlVGQlJTeDVRa0ZCZVVJc1JVRkJReXhOUVVGTkxESkNRVUV5UWl4RFFVRkRPMEZCUlM5R0xFOUJRVThzUlVGQmFVSXNaVUZCWlN4RlFVRkRMRTFCUVUwc01FSkJRVEJDTEVOQlFVTTdRVUZEZWtVc1QwRkJUeXhGUVVGRExITkRRVUZ6UXl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSV2hGTEU5QlFVOHNSVUZCUXl4MVFrRkJkVUlzUlVGQlF5eE5RVUZOTEc5Q1FVRnZRaXhEUVVGRE8wRkJXVE5FTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eEZRVUZuUWp0SlFVTndSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVOd1F5eE5RVUZOTEZWQlFWVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRPVVlzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4VlFVRlZMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRMnBFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2MwSkJRWE5DTEVOQlFVTXNUMEZCYjBJc1JVRkJSU3hOUVVFeVFqdEpRVU4wUml4TlFVRk5MRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkROVWNzVDBGQlR5eEhRVUZITEUxQlFVMHNTMEZCU3l4UlFVRlJMRWRCUVVjc1EwRkJRenRCUVVOdVF5eERRVUZETzBGQlJVUXNUVUZCVFN4RFFVRkRMRXRCUVVzc1ZVRkJWU3cwUWtGQk5FSXNRMEZCUXl4TFFVRnRRaXhGUVVGRkxFOUJRVzlDTEVWQlF6RkdMRTFCUVRKQ0xFVkJRVVVzVDBGQmRVSXNSVUZCUlN4UFFVRnBRaXhGUVVOMlJTeHpRa0ZCYzBRc1JVRkRkRVFzYVVKQlFUUkRMRVZCUVVVc2FVSkJRVEJDTEVsQlFVa3NSVUZCUlN4dlFrRkJOa0lzUzBGQlN5eEZRVU5vU0N4blFrRkRXU3hGUVVGRExIRkNRVUZ4UWl4RlFVRkZMRVZCUVVVc1JVRkJReXhGUVVOMlF5eFpRVUUyUWl4RlFVRkZMRVZCUVVVc2NVSkJRWEZETEVsQlFVa3NSVUZCUlN4dFFrRkJORUlzUlVGQlJUdEpRVU14Unl4TlFVRk5MR2RDUVVGblFpeEhRVUZITzFGQlEzWkNMRk5CUVZNc1JVRkJSU3hMUVVGTE8xRkJRMmhDTEZOQlFWTXNSVUZCUlN4TFFVRkxPMUZCUTJoQ0xHRkJRV0VzUlVGQlJTeExRVUZMTzFGQlEzQkNMR0ZCUVdFc1JVRkJSU3hMUVVGTE8wdEJRM0pDTEVOQlFVTTdTVUZEUml4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFdEJRVXNzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hMUVVGTExITkNRVUZ6UWl4RFFVRkRMRTFCUVUwN1VVRkRia1lzVDBGQlR5eERRVUZETEUxQlFVMHNTMEZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEV0QlFVc3NZVUZCWVN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEUxQlFVMHNSVUZCUlR0UlFVTjRSeXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERoRlFVRTRSVHRaUVVNMVJpd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8wdEJRMmhETzBsQlJVUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVWMFJ5eE5RVUZOTEZGQlFWRXNSMEZCUnl4TFFVRkxMRWxCUVVrc1JVRkJSVHRSUVVNeFFpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RFFVTXpReXhuUWtGQlowSXNVMEZCVXl4RFFVRkRMR1ZCUVdVc1NVRkJTU3d3UWtGQk1FSXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRha1lzU1VGQlNTeFhRVUZYTEVkQlFYRkRMRk5CUVZNc1EwRkJRenRSUVVNNVJDeEpRVUZKTzFsQlEwWXNUVUZCVFN4alFVRmpMRWRCUVVjc2NVSkJRWEZDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRjRVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNUMEZCWlN4RlFVRkZMRmxCUVc5Q0xFVkJRVVVzVlVGQmMwSTdaMEpCUTJwR0xFbEJRVWtzVTBGQlV5eEhRVUZ4UWl4SlFVRkpMRU5CUVVNN1owSkJRM1pETEVsQlFVa3NVMEZCVXl4SFFVRnhRaXhKUVVGSkxFTkJRVU03WjBKQlEzWkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0dlFrRkRkRVFzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJFWXNVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEYkVZc1NVRkJTU3hqUVVGakxFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdkMEpCUTJ4RExGZEJRVmNzUjBGQlJ5eEZRVUZIT3paQ1FVTmtMRmRCUVZjc1EwRkJReXhGUVVGRExFZEJRVWNzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF6czBRa0ZETTBVc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NjMEpCUVhOQ0xFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRGJrWTdhVUpCUTBZN2NVSkJRVTA3YjBKQlEwd3NVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU53UkN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlEzSkVPMmRDUVVWRUxFbEJRVWtzVTBGQlV5eERRVUZETEhsQ1FVRjVRaXhEUVVGRExFVkJRVVU3YjBKQlEzaERMRmRCUVZjc1JVRkJSU3hKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGZEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN2IwSkJRM0pGTEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0dlFrRkRjRVVzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTnlSVHRuUWtGRFJDeE5RVUZOTEZGQlFWRXNSMEZCUnl4RFFVRkRMRTlCUVU4c1IwRkJSeXhaUVVGWkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJoRUxFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVTm9RaXhYUVVGWExGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NNRUpCUVRCQ0xFOUJRVThzVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNrY3NRMEZCUXp0WlFVTkVMRXRCUVVzc1ZVRkJWU3hUUVVGVE8yZENRVU4wUWl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzUkZMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVVc1NVRkJTU3hSUVVGUkxFZEJRVzlDTEVsQlFVa3NRMEZCUXp0blFrRkRja01zU1VGQlNTeGpRVUZqTEVWQlFVVTdiMEpCUTJ4Q0xGZEJRVmNzUjBGQlJ5eEZRVUZITzNsQ1FVTmtMRmRCUVZjc1EwRkJReXhGUVVGRExFZEJRVWNzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZETTBVc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NjMEpCUVhOQ0xFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJFWXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlF5OURPMmRDUVVWRUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZPMjlDUVVONFJDeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVzFETEVOQlFVTTdiMEpCUTNoRUxFbEJRVWtzUTBGQlF5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFbEJRVWtzVjBGQlZ5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTE8zZENRVU01UkN4RFFVRkRMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NTMEZCU3l4WFFVRlhMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0M1FrRkRia1lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4bFFVRmxMRU5CUVVNc2MwTkJRWE5ETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN2QwSkJRM2hGTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenQzUWtGRGJFSXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJRenQzUWtGRFlpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN2NVSkJRMW83WjBKQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJSVWdzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQmNVSXNTMEZCU3l4RlFVRkZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdHZRa0ZEYWtZc1NVRkJTVHQzUWtGRFJpeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRPM2RDUVVOdVFpeE5RVUZOTEdsQ1FVRnBRaXhIUVVGdFF5eEZRVUZGTEVOQlFVTTdkMEpCUXpkRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXh6UWtGQmMwSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3TkVKQlEzUkVMRTFCUVUwc1JVRkJSU3hIUVVGSExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96UkNRVU55UXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExHTkJRV003WjBOQlF5OUNMR0ZCUVdFc1EwRkJReXhqUVVGakxFZEJRVWNzUlVGQlJTeERRVUZET3pSQ1FVTndReXhKUVVGSkxFVkJRVVVzUlVGQlJUdG5RMEZEVGl4TlFVRk5MRmxCUVZrc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUTBGRGRrTXNUVUZCVFN4bFFVRmxMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1owTkJRekZETEUxQlFVMHNSVUZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRExFZEJRM2hDTEUxQlFVMHNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zWlVGQlpTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UTBGRGRrVXNSMEZCUnl4RFFVRkRMR0ZCUVdFc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdaME5CUTNSRUxHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVTXNRMEZCUXl4RFFVRkRPMmREUVVNelF5eGhRVUZoTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czJRa0ZETlVNN2FVTkJRVTA3WjBOQlEwd3NUVUZCVFN4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMmREUVVOd1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1owTkJRMjVDTEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRE8yZERRVU16UXl4aFFVRmhMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzMlFrRkROVU03ZVVKQlEwWTdkMEpCUTBRc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeDFRa0ZCZFVJc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRM3BHTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNZVUZCWVN4RlFVTnNSQ3hUUVVGVExFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenQzUWtGRGJrVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8zRkNRVU5rTzI5Q1FVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8zZENRVU5XTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRFdEdG5Ra0ZEU0N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFNDeE5RVUZOTEVkQlFVY3NSMEZCUnl4TlFVRk5MR2RDUVVGblFpeERRVUZETzJkQ1FVTnVReXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdaMEpCUTFnc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzJkQ1FVTnNRaXhQUVVGUExFZEJRVWNzUTBGQlF6dFpRVU5pTEVOQlFVTTdXVUZEUkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxGTkJRVk1zUlVGQlJTeERRVUZETzFsQlJUbENMRWxCUVVrc2FVSkJRV2xDTEVsQlFVa3NSMEZCUnl4RlFVRkZPMmRDUVVNMVFpeE5RVUZOTEZOQlFWTXNSMEZCUnl4RlFVRkZMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RFFVRkRMREpDUVVFeVFpeERRVUZETEVOQlFVTTdaMEpCUTJ4R0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4VlFVRlZMRWRCUVVjc1RVRkJUU3hsUVVGbExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGRGNrUXNZVUZCWVN4RFFVRkRMR0ZCUVdFc1NVRkJTU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZsQlFWa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGVFVXNUVUZCVFN4alFVRmpMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dHZRa0ZEZGtVc1RVRkJUU3hWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03YjBKQlF6bEVMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRPMjlDUVVOcVJDeEpRVUZKTEZkQlFWYzdkMEpCUTFvc1YwRkJiME1zUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4SFFVRkhMR05CUVdNc1EwRkJRenRwUWtGRGFFWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zT0VKQlFUaENMRU5CUVVNc1EwRkJRenR2UWtGRGFrUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEYkVJN2QwSkJRVk03YjBKQlExSXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8ybENRVU51UWp0aFFVTkdPMWxCUTBRc1NVRkJTU3hIUVVGSExFVkJRVVU3WjBKQlExQXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkVMRTFCUVUwc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXhSQ3hUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFrTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJwRExFbEJRVWtzYTBKQlFXdENMRVZCUVVVN2IwSkJRM1JDTEVsQlFVazdkMEpCUTBZc1RVRkJUU3hoUVVGaExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRlRVFzVFVGQlRTeGhRVUZoTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGVFUXNUVUZCVFN4clFrRkJhMEk3TmtKQlEzSkNMRTlCUVU4c1EwRkJReXhGUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NaMEpCUVdkQ0xFVkJRVU1zUTBGQlF6czJRa0ZEZEVZc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzNGQ1FVTm1PMjlDUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzNkQ1FVTldMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEhkQ1FVRjNRaXhEUVVGRExFTkJRVU03ZDBKQlF6TkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdjVUpCUTJ4Q08ybENRVU5HTzJkQ1FVTkVMRWxCUVVrc1YwRkJWeXhGUVVGRk8yOUNRVU5tTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlJTeFhRVUZ2UXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dHZRa0ZEZUVVc1YwRkJiME1zUTBGQlF5eFBRVUZQTEVkQlFVY3NPRUpCUVRoQ0xFTkJRVU03YjBKQlF5OUZMRTlCUVU4c1YwRkJiVU1zUTBGQlF6dHBRa0ZETlVNN1lVRkRSanRUUVVOR08xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdXVUZEVml4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eHBRMEZCYVVNc1EwRkJReXhEUVVGRE8xbEJRM0JFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFrSXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMWdzU1VGQlNTeFhRVUZYTzJkQ1FVTmlMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNRMEZCUlN4WFFVRnZReXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTTFSVHRKUVVOSUxFTkJRVU1zUTBGQlF6dEpRVU5HTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVcxRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNUVUZCVFN4RlFVRkZMRVZCUVVVN1VVRkROMFVzU1VGQlNUdFpRVU5HTEVsQlFVa3NVMEZCVXl4RFFVRkRMRmxCUVZrc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeEhRVUZITEZOQlFWTXNRMEZCUXl4WlFVRlpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1JVRkJSVHRuUWtGRE9VY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSVHR4UWtGRFVpeEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXdyUkVGQkswUXNRMEZCUXl4RFFVRkRPM0ZDUVVOb1JpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVN2IwSkJRMllzU1VGQlNUdDNRa0ZEUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVTTNRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdjVUpCUTJRN2IwSkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdkMEpCUTFZc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTllPMmRDUVVOSUxFTkJRVU1zUTBGQlF6dHhRa0ZEUkN4UlFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPM0ZDUVVOc1F5eEpRVUZKTEVWQlFVVXNRMEZCUXp0aFFVTllPMmxDUVVGTk8yZENRVU5NTEUxQlFVMHNSMEZCUnl4SFFVRkhMRTFCUVUwc1VVRkJVU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU5rTzFOQlEwWTdVVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRaUVVOV0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTllPMGxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFRDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1cGJYQnZjblFnS2lCaGN5QjFhU0JtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2ZFdrbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3UzI1dmQyNU5aWFJ5YVdOemZTQm1jbTl0SUNjdUxpOTBlWEJsWkMxdFpYUnlhV056Snp0Y2JtbHRjRzl5ZENCN1FsbFFRVk5UWDB4QlVrZEZYMFJCVkVGZlYwRlNUa2xPUnl3Z1UwaFBWMTlUUTBGVVZFVlNVRXhQVkY5UVVrOUhVa1ZUVTMwZ1puSnZiU0FuTGk0dlpuVnVZM1JwYjI1RlpHbDBiM0p6TDJOdmJuTjBjeWM3WEc1cGJYQnZjblFnZTAxaGRISnBlQ3dnVDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0SlJFSlRZMkZ1VDNCMGFXOXVjeXdnWjJWMFJHSnpZMkZ1VjI5eWEyVnlmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMMjFoZEdnbk8xeHVhVzF3YjNKMElIdEVTVTFGVGxOSlQwNUJURWxVV1Y5U1JVUlZRMFZTWDFSRlVrMUpUa0ZVUlY5RlZrVk9WSDBnWm5KdmJTQW5MaTlqYjI1emRITW5PMXh1YVcxd2IzSjBJSHRRY21Wd2NtOWpaWE56Um5WdVkzUnBiMjVTWlhSMWNtNVVlWEJsZlNCbWNtOXRJQ2N1TGk5bWRXNWpkR2x2YmtWa2FYUnZjbk12WkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdOMGFXOXVMV1ZrYVhSdmNpYzdYRzVwYlhCdmNuUWdlMmRsZEU1dmNtMWhiR2w2WldSRmJXSmxaR1JwYm1kemZTQm1jbTl0SUNjdUwyVnRZbVZrWkdsdVozTXRjM0JoWTJVbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0SlZGTk9SVTl3ZEdsdmJuTXNJRWxWVFVGUVQzQjBhVzl1YzMwZ1puSnZiU0FuTGk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEluTzF4dWFXMXdiM0owSUh0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSemZTQm1jbTl0SUNjdUwzUjVjR1Z6Snp0Y2JseHVaWGh3YjNKMElIUjVjR1VnUkdsdFVtVmtWV2xQY0hScGIyNXpJRDBnZTF4dUlDQWdJRnRDV1ZCQlUxTmZURUZTUjBWZlJFRlVRVjlYUVZKT1NVNUhYVDg2SUdKdmIyeGxZVzRzWEc0Z0lDQWdXMU5JVDFkZlUwTkJWRlJGVWxCTVQxUmZVRkpQUjFKRlUxTmRQem9nWW05dmJHVmhiaXhjYmlBZ0lDQm1ZWE4wVW05M1EyOTFiblEvT2lCdWRXMWlaWElzWEc0Z0lDQWdjMk5oZEhSbGNsQnNiM1JPWVcxbFB6b2djM1J5YVc1bkxGeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWjJWMFJXMWlaV1JrYVc1blEyOXNjMDVoYldWektHUm1PaUJFUnk1RVlYUmhSbkpoYldVcElIdGNiaUFnWTI5dWMzUWdZWGhsY3lBOUlGc25SVzFpWldSZldDY3NJQ2RGYldKbFpGOVpKMTA3WEc0Z0lHTnZibk4wSUdOdmJFNWhiV1ZKYm1RZ1BTQmtaaTVqYjJ4MWJXNXpMbTVoYldWektDa3VabWxzZEdWeUtDaHBkRG9nYzNSeWFXNW5LU0E5UGlCcGRDNXBibU5zZFdSbGN5aGhlR1Z6V3pCZEtTa3ViR1Z1WjNSb0lDc2dNVHRjYmlBZ2NtVjBkWEp1SUdGNFpYTXViV0Z3S0NocGRDa2dQVDRnWUNSN2FYUjlYeVI3WTI5c1RtRnRaVWx1WkgxZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFVnRZbVZrWkdsdVoxWnBaWGRsY2s1aGJXVW9ZMjlzZFcxdWN6b2dSRWN1UTI5c2RXMXVXMTBzSUcxbGRHaHZaRG9nUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrY3lrZ2UxeHVJQ0JqYjI1emRDQmpiMnhPWVcxbGN5QTlJR052YkhWdGJuTXViR1Z1WjNSb0lENGdOQ0EvSUdBa2UyTnZiSFZ0Ym5NdWJHVnVaM1JvZlNCamIyeDFiVzV6WUNBNklHTnZiSFZ0Ym5NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Ym1GdFpTa3VhbTlwYmlnbkxDQW5LVHRjYmlBZ2NtVjBkWEp1SUdBa2UyMWxkR2h2WkgwZ0tDUjdZMjlzVG1GdFpYTjlLV0E3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCdGRXeDBhVU52YkZKbFpIVmpaVVJwYldWdWMybHZibUZzYVhSNUtIUmhZbXhsT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR052YkhWdGJuTTZJRVJITGtOdmJIVnRibHRkTEZ4dUlDQnRaWFJvYjJRNklFUnBiVkpsWkhWamRHbHZiazFsZEdodlpITXNJRzFsZEhKcFkzTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTeGNiaUFnY0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dWN6b2dLRVJITGtaMWJtTWdmQ0J1ZFd4c0lId2dkVzVrWldacGJtVmtLVnRkTEZ4dUlDQmhaMmR5WldkaGRHbHZiazFsZEdodlpEb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2djR3h2ZEVWdFltVmtaR2x1WjNNNklHSnZiMnhsWVc0Z1BTQjBjblZsTENCamJIVnpkR1Z5UlcxaVpXUmthVzVuY3pvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTEZ4dUlDQmthVzFTWldSUGNIUnBiMjV6T2lBb1NWVk5RVkJQY0hScGIyNXpJSHdnU1ZSVFRrVlBjSFJwYjI1ektTQW1JRkJoY25ScFlXdzhTVVJDVTJOaGJrOXdkR2x2Ym5NK0lDWWdlM0J5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3pvZ1QzQjBhVzl1YzF0ZGZTQW1YRzRnSUNBZ1QzQjBhVzl1Y3lBOUlIdHdjbVZ3Y205alpYTnphVzVuUm5WdVkwRnlaM002SUZ0ZGZTeGNiaUFnZFdsUGNIUnBiMjV6T2lCRWFXMVNaV1JWYVU5d2RHbHZibk1nUFNCN2ZTd2djRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpPaUJFUnk1R2RXNWpJSHdnYm5Wc2JDQTlJRzUxYkd3c0lIQnZjM1JRY205alJuVnVZMEZ5WjNNNklFOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQmpiMjV6ZENCelkyRjBkR1Z5VUd4dmRGQnliM0J6SUQwZ2UxeHVJQ0FnSUhOb2IzZFlRWGhwY3pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFsQmVHbHpPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNXRk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNXVk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnZlR0Y2JpQWdhV1lnS0dOdmJIVnRibk11YkdWdVozUm9JQ0U5UFNCdFpYUnlhV056TG14bGJtZDBhQ0I4ZkNCamIyeDFiVzV6TG14bGJtZDBhQ0FoUFQwZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVjeTVzWlc1bmRHZ2dmSHhjYmlBZ0lDQWdJQ0FnWTI5c2RXMXVjeTVzWlc1bmRHZ2dJVDA5SUhkbGFXZG9kSE11YkdWdVozUm9JSHg4SUdOdmJIVnRibk11YkdWdVozUm9JQ0U5UFNCa2FXMVNaV1JQY0hScGIyNXpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMk52YkhWdGJuTXNJRzFsZEhKcFkzTWdZVzVrSUhCeVpYQnliMk5sYzNOcGJtY2dablZ1WTNScGIyNXpMQ0IzWldsbmFIUnpJR0Z1WkNCbWRXNWpkR2x2YmlCaGNtZDFiV1Z1ZEhNbklDdGNiaUFnSUNBZ0lDZHRkWE4wSUdoaGRtVWdkR2hsSUhOaGJXVWdiR1Z1WjNSb0p5azdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQjBkaUE5SUhCc2IzUkZiV0psWkdScGJtZHpJRDhnWjNKdmF5NXphR1ZzYkM1MFlXSnNaVlpwWlhjb2RHRmliR1V1Ym1GdFpTa2dQejhnWjNKdmF5NXphR1ZzYkM1aFpHUlVZV0pzWlZacFpYY29kR0ZpYkdVcElEb2diblZzYkR0Y2JseHVJQ0JqYjI1emRDQmtiMUpsWkhWalpTQTlJR0Z6ZVc1aklDZ3BJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQndaeUE5SUVSSExsUmhjMnRDWVhKUWNtOW5jbVZ6YzBsdVpHbGpZWFJ2Y2k1amNtVmhkR1VvWEc0Z0lDQWdJQ0JnU1c1cGRHbGhiR2w2YVc1bklDUjdkV2xQY0hScGIyNXpMbk5qWVhSMFpYSlFiRzkwVG1GdFpTQS9QeUFuWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVKMzBnTGk0dVlDazdYRzRnSUNBZ2JHVjBJSE5qWVhSMFpYSlFiRzkwT2lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNpQjhJSFZ1WkdWbWFXNWxaQ0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWlcxaVpXUkRiMnh6VG1GdFpYTWdQU0JuWlhSRmJXSmxaR1JwYm1kRGIyeHpUbUZ0WlhNb2RHRmliR1VwTzF4dUlDQWdJQ0FnWm5WdVkzUnBiMjRnY0hKdlozSmxjM05HZFc1aktGOXVSWEJ2WTJnNklHNTFiV0psY2l3Z1pYQnZZMmh6VEdWdVozUm9PaUJ1ZFcxaVpYSXNJR1Z0WW1Wa1pHbHVaM002SUc1MWJXSmxjbHRkVzEwcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdWdFltVmtXRU52YkRvZ1JFY3VRMjlzZFcxdUlId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUd4bGRDQmxiV0psWkZsRGIydzZJRVJITGtOdmJIVnRiaUI4SUc1MWJHd2dQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQnBaaUFvSVhSaFlteGxMbU52YkhWdGJuTXVibUZ0WlhNb0tTNXBibU5zZFdSbGN5aGxiV0psWkVOdmJITk9ZVzFsYzFzd1hTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbGJXSmxaRmhEYjJ3Z1BTQjBZV0pzWlM1amIyeDFiVzV6TG1Ga1pDaEVSeTVEYjJ4MWJXNHVabXh2WVhRb1pXMWlaV1JEYjJ4elRtRnRaWE5iTUYwc0lIUmhZbXhsTG5KdmQwTnZkVzUwS1NrN1hHNGdJQ0FnSUNBZ0lDQWdaVzFpWldSWlEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWhaR1FvUkVjdVEyOXNkVzF1TG1ac2IyRjBLR1Z0WW1Wa1EyOXNjMDVoYldWeld6RmRMQ0IwWVdKc1pTNXliM2REYjNWdWRDa3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHdiRzkwUlcxaVpXUmthVzVuY3lBbUppQWhjMk5oZEhSbGNsQnNiM1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5qWVhSMFpYSlFiRzkwSUQwZ2RIWWhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXpZMkYwZEdWeVVHeHZkQ2g3TGk0dWMyTmhkSFJsY2xCc2IzUlFjbTl3Y3l3Z2VEb2daVzFpWldSRGIyeHpUbUZ0WlhOYk1GMHNJSGs2SUdWdFltVmtRMjlzYzA1aGJXVnpXekZkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhScGRHeGxPaUIxYVU5d2RHbHZibk11YzJOaGRIUmxjbEJzYjNST1lXMWxJRDgvSUdkbGRFVnRZbVZrWkdsdVoxWnBaWGRsY2s1aGJXVW9ZMjlzZFcxdWN5d2diV1YwYUc5a0tYMHBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxiV0psWkZoRGIyd2dQU0IwWVdKc1pTNWpiMngxYlc1ekxtSjVUbUZ0WlNobGJXSmxaRU52YkhOT1lXMWxjMXN3WFNrN1hHNGdJQ0FnSUNBZ0lDQWdaVzFpWldSWlEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWllVTVoYldVb1pXMWlaV1JEYjJ4elRtRnRaWE5iTVYwcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tIVnBUM0IwYVc5dWMxdFRTRTlYWDFORFFWUlVSVkpRVEU5VVgxQlNUMGRTUlZOVFhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhOallYUjBaWEpRYkc5MFB5NXliMjkwSUNZbUlIVnBMbk5sZEZWd1pHRjBaVWx1WkdsallYUnZjaWh6WTJGMGRHVnlVR3h2ZENFdWNtOXZkQ3dnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUdWdFltVmtXRU52YkM1cGJtbDBLQ2hwS1NBOVBpQmxiV0psWkdScGJtZHpXekJkSUQ4Z1pXMWlaV1JrYVc1bmMxc3dYVnRwWFNBNklIVnVaR1ZtYVc1bFpDazdYRzRnSUNBZ0lDQWdJQ0FnWlcxaVpXUlpRMjlzTG1sdWFYUW9LR2twSUQwK0lHVnRZbVZrWkdsdVozTmJNVjBnUHlCbGJXSmxaR1JwYm1keld6RmRXMmxkSURvZ2RXNWtaV1pwYm1Wa0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQndjbTluY21WemN5QTlJQ2hmYmtWd2IyTm9JQzhnWlhCdlkyaHpUR1Z1WjNSb0lDb2dNVEF3S1R0Y2JpQWdJQ0FnSUNBZ2NHY3VkWEJrWVhSbEtIQnliMmR5WlhOekxGeHVJQ0FnSUNBZ0lDQWdJR0JTZFc1dWFXNW5JQ1I3ZFdsUGNIUnBiMjV6TG5OallYUjBaWEpRYkc5MFRtRnRaU0EvUHlBblpHbHRaVzV6YVc5dVlXeHBkSGtnY21Wa2RXTjBhVzl1SjMwdUxpNGdKSHR3Y205bmNtVnpjeTUwYjBacGVHVmtLREFwZlNWZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHRnplVzVqSUdaMWJtTjBhVzl1SUdkbGRFUnBiVkpsWkNncElIdGNiaUFnSUNBZ0lDQWdkR0ZpYkdVdVkyOXNkVzF1Y3k1aFpHUW9SRWN1UTI5c2RXMXVMbVpzYjJGMEtHVnRZbVZrUTI5c2MwNWhiV1Z6V3pCZExDQjBZV0pzWlM1eWIzZERiM1Z1ZENrcE8xeHVJQ0FnSUNBZ0lDQjBZV0pzWlM1amIyeDFiVzV6TG1Ga1pDaEVSeTVEYjJ4MWJXNHVabXh2WVhRb1pXMWlaV1JEYjJ4elRtRnRaWE5iTVYwc0lIUmhZbXhsTG5KdmQwTnZkVzUwS1NrN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J5WlhOdmJIWmxSam9nUm5WdVkzUnBiMjRnZkNCdWRXeHNJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdhV1lnS0hCc2IzUkZiV0psWkdScGJtZHpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MyTmhkSFJsY2xCc2IzUWdQU0IwZGlGY2JpQWdJQ0FnSUNBZ0lDQWdJQzV6WTJGMGRHVnlVR3h2ZENoN0xpNHVjMk5oZEhSbGNsQnNiM1JRY205d2N5d2dlRG9nWlcxaVpXUkRiMnh6VG1GdFpYTmJNRjBzSUhrNklHVnRZbVZrUTI5c2MwNWhiV1Z6V3pGZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFYUnNaVG9nZFdsUGNIUnBiMjV6TG5OallYUjBaWEpRYkc5MFRtRnRaU0EvUHlCblpYUkZiV0psWkdScGJtZFdhV1YzWlhKT1lXMWxLR052YkhWdGJuTXNJRzFsZEdodlpDbDlLVHRjYmlBZ0lDQWdJQ0FnSUNCMWFTNXpaWFJWY0dSaGRHVkpibVJwWTJGMGIzSW9jMk5oZEhSbGNsQnNiM1F1Y205dmRDd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpkV0lnUFNCbmNtOXJMbVYyWlc1MGN5NXZibFpwWlhkbGNrTnNiM05sWkM1emRXSnpZM0pwWW1Vb0tHRnlaM01wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjJJRDBnWVhKbmN5NWhjbWR6TG5acFpYZGxjaUJoY3lCMWJtdHViM2R1SUdGeklFUkhMbFpwWlhkbGNqeGhibmsrTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2gyUHk1blpYUlBjSFJwYjI1ektDay9MbXh2YjJzL0xuUnBkR3hsSUNZbUlITmpZWFIwWlhKUWJHOTBQeTVuWlhSUGNIUnBiMjV6S0NrL0xteHZiMnMvTG5ScGRHeGxJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkajh1WjJWMFQzQjBhVzl1Y3lncFB5NXNiMjlyUHk1MGFYUnNaU0E5UFQwZ2MyTmhkSFJsY2xCc2IzUS9MbWRsZEU5d2RHbHZibk1vS1Q4dWJHOXZhejh1ZEdsMGJHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHZHliMnN1WlhabGJuUnpMbVpwY21WRGRYTjBiMjFGZG1WdWRDaEVTVTFGVGxOSlQwNUJURWxVV1Y5U1JVUlZRMFZTWDFSRlVrMUpUa0ZVUlY5RlZrVk9WQ3dnZTMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabFJqOHVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndaeTVqYkc5elpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR2x0VW1Wa1VtVnpVSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sUEUxaGRISnBlQ0I4SUhWdVpHVm1hVzVsWkQ0b1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxSaUE5SUhKbGMyOXNkbVU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtTnZaR1ZrUTI5c1JXNTBjbWxsY3pvZ1VISmxjSEp2WTJWemMwWjFibU4wYVc5dVVtVjBkWEp1Vkhsd1pWdGRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJuTXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR1lnUFNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXUnBiVkpsWkU5d2RHbHZibk11WkdsemRHRnVZMlZHYmtGeVozTXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR2x0VW1Wa1QzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVFYSm5jeUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jR1lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqYjJ4SmJuQjFkRTVoYldVZ1BTQndaaTVwYm5CMWRITmJNRjB1Ym1GdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFpYUnlhV05KYm5CMWRFNWhiV1VnUFNCd1ppNXBibkIxZEhOYk1WMHVibUZ0WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0I3Wlc1MGNtbGxjeXdnYjNCMGFXOXVjMzA2SUZCeVpYQnliMk5sYzNOR2RXNWpkR2x2YmxKbGRIVnlibFI1Y0dVZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhCbUxtRndjR3g1S0h0YlkyOXNTVzV3ZFhST1lXMWxYVG9nWTI5c2RXMXVjMXRwWFN3Z1cyMWxkSEpwWTBsdWNIVjBUbUZ0WlYwNklHMWxkSEpwWTNOYmFWMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1TGk0b1pHbHRVbVZrVDNCMGFXOXVjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMEZ5WjNOYmFWMGdQejhnZTMwcGZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzVqYjJSbFpFTnZiRVZ1ZEhKcFpYTXVjSFZ6YUNoN1pXNTBjbWxsY3l3Z2IzQjBhVzl1YzMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnBiVkpsWkU5d2RHbHZibk11WkdsemRHRnVZMlZHYmtGeVozTXVjSFZ6YUNodmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxiblJ5YVdWeklEMGdZMjlzZFcxdWMxdHBYUzUwYjB4cGMzUW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlc1amIyUmxaRU52YkVWdWRISnBaWE11Y0hWemFDaDdaVzUwY21sbGN5d2diM0IwYVc5dWMzMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JwYlZKbFpFOXdkR2x2Ym5NdVpHbHpkR0Z1WTJWR2JrRnlaM011Y0hWemFDaHZjSFJwYjI1ektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NtVnpJRDBnWVhkaGFYUWdaMlYwVG05eWJXRnNhWHBsWkVWdFltVmtaR2x1WjNNb1pXNWpiMlJsWkVOdmJFVnVkSEpwWlhNdWJXRndLQ2hwZENrZ1BUNGdhWFF1Wlc1MGNtbGxjeWtzSUcxbGRHaHZaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiV1YwY21samN5d2dkMlZwWjJoMGN5d2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUXNJR1JwYlZKbFpFOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhWcFQzQjBhVzl1YzF0Q1dWQkJVMU5mVEVGU1IwVmZSRUZVUVY5WFFWSk9TVTVIWFNBL0lIVnVaR1ZtYVc1bFpDQTZJSEJ5YjJkeVpYTnpSblZ1WXlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxjeUE5SUdGM1lXbDBJR1JwYlZKbFpGSmxjMUJ5YjIxcGMyVTdYRzRnSUNBZ0lDQWdJSEJuTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdJQ0FnSUhOMVlpNTFibk4xWW5OamNtbGlaU2dwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21Wek8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1oyVjBSR2x0VW1Wa0tDazdYRzVjYmlBZ0lDQWdJR2xtSUNoamJIVnpkR1Z5UlcxaVpXUmthVzVuY3lBbUppQnlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxjbEJuSUQwZ1JFY3VWR0Z6YTBKaGNsQnliMmR5WlhOelNXNWthV05oZEc5eUxtTnlaV0YwWlNoZ1EyeDFjM1JsY21sdVp5QmxiV0psWkdScGJtZHpJQzR1TG1BcE8xeHVJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOc2RYTjBaWEpTWlhNZ1BTQmhkMkZwZENCblpYUkVZbk5qWVc1WGIzSnJaWElvY21Weld6QmRMQ0J5WlhOYk1WMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCa2FXMVNaV1JQY0hScGIyNXpMbVJpVTJOaGJrVndjMmxzYjI0Z1B6OGdNQzR3TVN3Z1pHbHRVbVZrVDNCMGFXOXVjeTVrWWxOallXNU5hVzVRZEhNZ1B6OGdOQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxja052YkU1aGJXVWdQU0IwWVdKc1pTNWpiMngxYlc1ekxtZGxkRlZ1ZFhObFpFNWhiV1VvSjBOc2RYTjBaWElnS0VSQ1UwTkJUaWtuS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamJIVnpkR1Z5UTI5c0lEMGdkR0ZpYkdVdVkyOXNkVzF1Y3k1aFpHUk9aWGRUZEhKcGJtY29ZMngxYzNSbGNrTnZiRTVoYldVcE8xeHVJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSkRiMnd1YVc1cGRDZ29hU2tnUFQ0Z1kyeDFjM1JsY2xKbGMxdHBYUzUwYjFOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYzJOaGRIUmxjbEJzYjNRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzJOaGRIUmxjbEJzYjNRZ1lYTWdSRWN1VTJOaGRIUmxjbEJzYjNSV2FXVjNaWElwTG5CeWIzQnpMbU52Ykc5eVEyOXNkVzF1VG1GdFpTQTlJR05zZFhOMFpYSkRiMnhPWVcxbE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1ozSnZheTV6YUdWc2JDNWxjbkp2Y2lnblEyeDFjM1JsY21sdVp5QmxiV0psWkdScGJtZHpJR1poYVd4bFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9aU2s3WEc0Z0lDQWdJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNBZ0lDQWdZMngxYzNSbGNsQm5MbU5zYjNObEtDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaVzFpWldSWVEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWllVTVoYldVb1pXMWlaV1JEYjJ4elRtRnRaWE5iTUYwcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJXSmxaRmxEYjJ3Z1BTQjBZV0pzWlM1amIyeDFiVzV6TG1KNVRtRnRaU2hsYldKbFpFTnZiSE5PWVcxbGMxc3hYU2s3WEc0Z0lDQWdJQ0FnSUdWdFltVmtXRU52YkM1cGJtbDBLQ2hwS1NBOVBpQnlaWE5iTUYxYmFWMHBPMXh1SUNBZ0lDQWdJQ0JsYldKbFpGbERiMnd1YVc1cGRDZ29hU2tnUFQ0Z2NtVnpXekZkVzJsZEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCdmMzUlFjbTlqWlhOemFXNW5SblZ1WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmpiMnd4U1c1d2RYUk9ZVzFsSUQwZ2NHOXpkRkJ5YjJObGMzTnBibWRHZFc1akxtbHVjSFYwYzFzd1hTNXVZVzFsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1kyOXNNa2x1Y0hWMFRtRnRaU0E5SUhCdmMzUlFjbTlqWlhOemFXNW5SblZ1WXk1cGJuQjFkSE5iTVYwdWJtRnRaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhCdmMzUlFjbTlqWlhOemFXNW5SblZ1WTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F1Y0hKbGNHRnlaU2g3VzJOdmJERkpibkIxZEU1aGJXVmRPaUJsYldKbFpGaERiMndzSUZ0amIyd3lTVzV3ZFhST1lXMWxYVG9nWlcxaVpXUlpRMjlzTENBdUxpNXdiM04wVUhKdlkwWjFibU5CY21kemZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0xtTmhiR3dvZEhKMVpTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWjNKdmF5NXphR1ZzYkM1bGNuSnZjaWduVUc5emRDMXdjbTlqWlhOemFXNW5JR1poYVd4bFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tITmpZWFIwWlhKUWJHOTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RXa3VjMlYwVlhCa1lYUmxTVzVrYVdOaGRHOXlLQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1Y205dmRDd2dabUZzYzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1YUdWc2NGVnliQ0E5SUNjdmFHVnNjQzlqYjIxd2RYUmxMM05sY1hWbGJtTmxMWE53WVdObEp6dGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMk5oZEhSbGNsQnNiM1FnWVhNZ1JFY3VVMk5oZEhSbGNsQnNiM1JXYVdWM1pYSTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0JuY205ckxuTm9aV3hzTG1WeWNtOXlLQ2RFYVcxbGJuTnBiMjVoYkdsMGVTQnlaV1IxWTNScGIyNGdabUZwYkdWa0p5azdYRzRnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dVcE8xeHVJQ0FnSUNBZ2NHY3VZMnh2YzJVb0tUdGNiaUFnSUNBZ0lHbG1JQ2h6WTJGMGRHVnlVR3h2ZENsY2JpQWdJQ0FnSUNBZ2RXa3VjMlYwVlhCa1lYUmxTVzVrYVdOaGRHOXlLQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1Y205dmRDd2dabUZzYzJVcE8xeHVJQ0FnSUgxY2JpQWdmVHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObFBFUkhMbE5qWVhSMFpYSlFiRzkwVm1sbGQyVnlJSHdnZFc1a1pXWnBibVZrUGloaGMzbHVZeUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gxYVU5d2RHbHZibk11Wm1GemRGSnZkME52ZFc1MElDWW1JSFJoWW14bExuSnZkME52ZFc1MElENGdkV2xQY0hScGIyNXpMbVpoYzNSU2IzZERiM1Z1ZENBbUppQWhkV2xQY0hScGIyNXpXMEpaVUVGVFUxOU1RVkpIUlY5RVFWUkJYMWRCVWs1SlRrZGRLU0I3WEc0Z0lDQWdJQ0FnSUhWcExtUnBZV3h2WnlncFhHNGdJQ0FnSUNBZ0lDQWdMbUZrWkNoMWFTNWthWFpVWlhoMEtDZEJibUZzZVhOcGN5QnRhV2RvZENCMFlXdGxJSE5sZG1WeVlXd2diV2x1ZFhSbGN5NGdSRzhnZVc5MUlIZGhiblFnZEc4Z1kyOXVkR2x1ZFdVL0p5a3BYRzRnSUNBZ0lDQWdJQ0FnTG05dVQwc29ZWE41Ym1NZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ1lYZGhhWFFnWkc5U1pXUjFZMlVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WemIyeDJaU2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0F1YjI1RFlXNWpaV3dvS0NrZ1BUNGdjbVZ6YjJ4MlpTaDFibVJsWm1sdVpXUXBLVnh1SUNBZ0lDQWdJQ0FnSUM1emFHOTNLQ2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCaGQyRnBkQ0JrYjFKbFpIVmpaU2dwTzF4dUlDQWdJQ0FnSUNCeVpYTnZiSFpsS0hKbGN5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNTlYRzRpWFgwPSIsIi8qKiBFcnJvciAmIGluZm8gbWVzc2FnZXMgKi9cbmV4cG9ydCB2YXIgRVJST1JfTVNHO1xuKGZ1bmN0aW9uIChFUlJPUl9NU0cpIHtcbiAgICBFUlJPUl9NU0dbXCJOT19EQVRBRlJBTUVcIl0gPSBcIk5vIGRhdGFmcmFtZSBpcyBvcGVuZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJOT19NSVNTSU5HX1ZBTFVFU1wiXSA9IFwiTm8gbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJPTkVfQVZBSUxBQkxFX0ZFQVRVUkVcIl0gPSBcIk5vdCBlbm91Z2ggb2YgZmVhdHVyZSBjb2x1bW5zIHRvIGFwcGx5IGltcHV0YXRpb24gdXNpbmcgdGhlIEtOTiBtZXRob2RcIjtcbiAgICBFUlJPUl9NU0dbXCJPTkVfRkVBVFVSRV9TRUxFQ1RFRFwiXSA9IFwiSW1wdXRhdGlvbiBjYW5ub3QgYmUgYXBwbGllZCB0b1wiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFXCJdID0gXCJVbnN1cHBvcnRlZCBjb2x1bW4gdHlwZVwiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0lNUFVUQVRJT05fU1RSQVRFR1lcIl0gPSBcIlVuc3VwcG9ydGVkIGltcHV0YXRpb24gc3RyYXRlZ3lcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fQ0FOTk9UX0JFX0FQUExJRURcIl0gPSBcIktOTiBpbXB1dGVyIGNhbm5vdCBiZSBhcHBsaWVkOiBubyBjb2x1bW5zIHRvIGJlIHVzZWQgYXMgZmVhdHVyZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fTk9fVEFSR0VUX0NPTFVNTlNcIl0gPSBcIktOTiBpbXB1dGVyIGNhbm5vdCBiZSBhcHBsaWVkOiBubyBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fTk9fRkVBVFVSRV9DT0xVTU5TXCJdID0gXCJLTk4gaW1wdXRlciBjYW5ub3QgYmUgYXBwbGllZDogbm8gZmVhdHVyZSBjb2x1bW5zXCI7XG4gICAgRVJST1JfTVNHW1wiS05OX05PVF9FTk9VR0hfT0ZfUk9XU1wiXSA9IFwiS05OIGltcHV0ZXIgY2Fubm90IGJlIGFwcGxpZWQ6IG5vdCBlbm91Z2ggb2Ygcm93c1wiO1xuICAgIEVSUk9SX01TR1tcIktOTl9JTVBPU1NJQkxFX0lNUFVUQVRJT05cIl0gPSBcIkltcHV0YXRpb24gaXMgaW1wb3NzaWJsZSwgbm8gZmVhdHVyZXMgY2FuIGJlIHVzZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJJTkNPUlJFQ1RfTkVJR0hCT1JTXCJdID0gXCJJbmNvcnJlY3QgbnVtYmVyIG9mIG5laWdoYm9yc1wiO1xuICAgIEVSUk9SX01TR1tcIktOTl9GQUlMU1wiXSA9IFwiS05OIElNUFVUQVRJT04gRkFJTFNcIjtcbiAgICBFUlJPUl9NU0dbXCJDT1JFX0lTU1VFXCJdID0gXCJDb3JlIGlzc3VlXCI7XG4gICAgRVJST1JfTVNHW1wiRkFJTEVEX1RPX0lNUFVURVwiXSA9IFwiRmFpbGVkIHRvIGltcHV0ZVwiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0ZJTExfVkFMVUVfVFlQRVwiXSA9IFwiVW5zdXBwb3J0ZWQgZmlsbCB2YWx1ZSB0eXBlXCI7XG4gICAgRVJST1JfTVNHW1wiRU1QVFlfQ09MVU1OXCJdID0gXCJDb2x1bW4gY29udGFpbnMganVzdCBudWxsIHZhbHVlc1wiO1xuICAgIEVSUk9SX01TR1tcIkZBSUxTX1RPX1BSRURJQ1RfSU1QVVRBVElPTl9GQUlMU1wiXSA9IFwiRmFpbGVkIHRvIHByZWRpY3QgaW1wdXRhdGlvbiBmYWlsc1wiO1xuICAgIEVSUk9SX01TR1tcIldST05HX1BSRURJQ1RJT05TXCJdID0gXCJ3cm9uZyBldmFsdWF0aW9uIG9mIEtOTiBpbXB1dGF0aW9uIGZhaWxzXCI7XG59KShFUlJPUl9NU0cgfHwgKEVSUk9SX01TRyA9IHt9KSk7XG47XG4vKiogU3VmZml4IHVzZWQgZm9yIGNvbHVtbiBjb3B5ICovXG5leHBvcnQgY29uc3QgQ09QWV9TVUZGSVggPSAnY29weSc7XG4vKiogVUkgdGl0bGVzICovXG5leHBvcnQgdmFyIFRJVExFO1xuKGZ1bmN0aW9uIChUSVRMRSkge1xuICAgIFRJVExFW1wiS05OX0lNUFVURVJcIl0gPSBcIkltcHV0ZVwiO1xuICAgIFRJVExFW1wiVEFCTEVcIl0gPSBcIlRhYmxlXCI7XG4gICAgVElUTEVbXCJJTl9QTEFDRVwiXSA9IFwiSW4tcGxhY2VcIjtcbiAgICBUSVRMRVtcIkNPTFVNTlNcIl0gPSBcIkltcHV0ZVwiO1xuICAgIFRJVExFW1wiRkVBVFVSRVNcIl0gPSBcIlVzaW5nXCI7XG4gICAgVElUTEVbXCJDQU5DRUxcIl0gPSBcIkNBTkNFTFwiO1xuICAgIFRJVExFW1wiUlVOXCJdID0gXCJSVU5cIjtcbiAgICBUSVRMRVtcIk9LXCJdID0gXCJPS1wiO1xuICAgIFRJVExFW1wiTkVJR0hCT1JTXCJdID0gXCJOZWlnaGJvcnNcIjtcbiAgICBUSVRMRVtcIkRJU1RBTkNFXCJdID0gXCJEaXN0YW5jZVwiO1xuICAgIFRJVExFW1wiRklMTFwiXSA9IFwiRmlsbFwiO1xuICAgIFRJVExFW1wiTUFSS1wiXSA9IFwiTWFya1wiO1xuICAgIFRJVExFW1wiU0lNUExFX0lNUFVURVJcIl0gPSBcIlNpbXBsZSBpbXB1dGVcIjtcbiAgICBUSVRMRVtcIlNFVFRJTkdTXCJdID0gXCJTZXR0aW5nc1wiO1xuICAgIFRJVExFW1wiS0VFUF9FTVBUWVwiXSA9IFwiS2VlcCBlbXB0eVwiO1xufSkoVElUTEUgfHwgKFRJVExFID0ge30pKTtcbjtcbi8qKiBIZWxwIGxpbmtzICovXG5leHBvcnQgY29uc3QgS05OX0lNUFVURVIgPSAnL2hlbHAvdHJhbnNmb3JtL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24nO1xuLyoqIFRvb2x0aXBzICovXG5leHBvcnQgdmFyIEhJTlQ7XG4oZnVuY3Rpb24gKEhJTlQpIHtcbiAgICBISU5UW1wiVEFSR0VUXCJdID0gXCJDb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXMgdGhhdCBtdXN0IGJlIGZpbGxlZFwiO1xuICAgIEhJTlRbXCJGRUFUVVJFU1wiXSA9IFwiQ29sdW1ucyB3aXRoIGZlYXR1cmVzIHRvIGJlIHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSAnbmVhcmVzdCcgZWxlbWVudHMgaW4gdGhlIEtOTiBtZXRob2RcIjtcbiAgICBISU5UW1wiSU5fUExBQ0VcIl0gPSBcIkRlZmluZXMgd2hldGhlciB0byB1c2UgaW4tcGxhY2UgaW1wdXRhdGlvbiBvciBhZGQgYSBuZXcgY29sdW1uIHdpdGhvdXQgbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBISU5UW1wiTUVUUklDXCJdID0gXCJUeXBlIG9mIG1ldHJpYyBiZXR3ZWVuIHRoZSBmZWF0dXJlIHZhbHVlc1wiO1xuICAgIEhJTlRbXCJXRUlHSFRcIl0gPSBcIldlaWdodFwiO1xuICAgIEhJTlRbXCJORUlHSEJPUlNcIl0gPSBcIk5laWdoYm9ycyBjb3VudCB1c2VkIGluIHRoZSBLTk4gbWV0aG9kXCI7XG4gICAgSElOVFtcIkRJU1RBTkNFXCJdID0gXCJUeXBlIG9mIGRpc3RhbmNlIGJldHdlZW4gZWxlbWVudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGZlYXR1cmVzXCI7XG4gICAgSElOVFtcIk1FVFJJQ19TRVRUSU5HU1wiXSA9IFwiU2hvdyBhZGRpdGlvbmFsIG9wdGlvbnNcIjtcbiAgICBISU5UW1wiRklMTF9GQUlMRURfSVRFTVNcIl0gPSBcIkltcHV0ZSBtaXNzaW5nIHZhbHVlcyB1c2luZyBhIHNpbXBsZSBhcHByb2FjaDogbWVhbiwgbWVkaWFuIG9yIG1vc3QgZnJlcXVlbnRcIjtcbiAgICBISU5UW1wiTUFSS19GQUlMRURfSVRFTVNcIl0gPSBcIk1hcmsgbWlzc2luZyB2YWx1ZXMgY2VsbHMgd2l0aCBhIGNvbG9yXCI7XG4gICAgSElOVFtcIkZJTExfVkFMVUVcIl0gPSBcIkZpbGwgdmFsdWVcIjtcbiAgICBISU5UW1wiSU1QVVRBVElPTl9TRVRUSU5HU1wiXSA9IFwiU2ltcGxlIGltcHV0YXRpb24gc2V0dGluZ3NcIjtcbiAgICBISU5UW1wiS0VFUF9FTVBUWVwiXSA9IFwiRGVmaW5lcyB3aGV0aGVyIHRvIGtlZXAgZW1wdHkgbWlzc2luZyB2YWx1ZXMgZmFpbGVkIHRvIGJlIGltcHV0ZWQgT1IgZmlsbCB0aGVtIHVzaW5nIHNpbXBsZSBpbXB1dGF0aW9uXCI7XG59KShISU5UIHx8IChISU5UID0ge30pKTtcbjtcbiIsIi8vIFRvb2xzIGZvciBtaXNzaW5nIHZhbHVlcyBpbXB1dGF0aW9uIHVzaW5nIHRoZSBrLW5lYXJlc3QgbmVpZ2hib3JzIG1ldGhvZFxuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRVJST1JfTVNHLCBDT1BZX1NVRkZJWCB9IGZyb20gJy4vdWktY29uc3RhbnRzJztcbi8qKiBDb2x1bW4gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBtaXNzaW5nIHZhbHVlcyBpbXB1dGVyICovXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0NPTFVNTl9UWVBFUyA9IFtcbiAgICBERy5DT0xVTU5fVFlQRS5JTlQsXG4gICAgREcuQ09MVU1OX1RZUEUuRkxPQVQsXG4gICAgREcuQ09MVU1OX1RZUEUuU1RSSU5HLFxuICAgIERHLkNPTFVNTl9UWVBFLkRBVEVfVElNRSxcbiAgICBERy5DT0xVTU5fVFlQRS5RTlVNLFxuXTtcbi8qKiBSZXR1cm4gbnVsbCB2YWx1ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbHVtbiB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVsbFZhbHVlKGNvbCkge1xuICAgIHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5JTlQ6XG4gICAgICAgICAgICByZXR1cm4gREcuSU5UX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gREcuRkxPQVRfTlVMTDtcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5RTlVNOlxuICAgICAgICAgICAgcmV0dXJuIERHLkZMT0FUX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuREFURV9USU1FOlxuICAgICAgICAgICAgcmV0dXJuIERHLkZMT0FUX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIGNvbC5tYXg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9XG59XG4vKiogTWV0cmljIHR5cGVzIChiZXR3ZWVuIGNvbHVtbiBlbGVtZW50cykgKi9cbmV4cG9ydCB2YXIgTUVUUklDX1RZUEU7XG4oZnVuY3Rpb24gKE1FVFJJQ19UWVBFKSB7XG4gICAgTUVUUklDX1RZUEVbXCJPTkVfSE9UXCJdID0gXCJPbmUtaG90XCI7XG4gICAgTUVUUklDX1RZUEVbXCJESUZGRVJFTkNFXCJdID0gXCJEaWZmZXJlbmNlXCI7XG59KShNRVRSSUNfVFlQRSB8fCAoTUVUUklDX1RZUEUgPSB7fSkpO1xuO1xuLyoqIERpc3RhbmNlIHR5cGVzIChvdmVyIHNldmVyYWwgY29sdW1ucykuICovXG5leHBvcnQgdmFyIERJU1RBTkNFX1RZUEU7XG4oZnVuY3Rpb24gKERJU1RBTkNFX1RZUEUpIHtcbiAgICBESVNUQU5DRV9UWVBFW1wiRVVDTElERUFOXCJdID0gXCJFdWNsaWRlYW5cIjtcbiAgICBESVNUQU5DRV9UWVBFW1wiTUFOSEFUVEFOXCJdID0gXCJNYW5oYXR0YW5cIjtcbn0pKERJU1RBTkNFX1RZUEUgfHwgKERJU1RBTkNFX1RZUEUgPSB7fSkpO1xuO1xuLyoqIERlZmF1bHQgdmFsdWVzICovXG5leHBvcnQgdmFyIERFRkFVTFQ7XG4oZnVuY3Rpb24gKERFRkFVTFQpIHtcbiAgICBERUZBVUxUW0RFRkFVTFRbXCJXRUlHSFRcIl0gPSAxXSA9IFwiV0VJR0hUXCI7XG4gICAgREVGQVVMVFtERUZBVUxUW1wiTkVJR0hCT1JTXCJdID0gNF0gPSBcIk5FSUdIQk9SU1wiO1xuICAgIERFRkFVTFRbREVGQVVMVFtcIklOX1BMQUNFXCJdID0gMV0gPSBcIklOX1BMQUNFXCI7XG4gICAgREVGQVVMVFtERUZBVUxUW1wiU0VMRUNURURcIl0gPSAxXSA9IFwiU0VMRUNURURcIjtcbiAgICBERUZBVUxUW0RFRkFVTFRbXCJLRUVQX0VNUFRZXCJdID0gMF0gPSBcIktFRVBfRU1QVFlcIjtcbn0pKERFRkFVTFQgfHwgKERFRkFVTFQgPSB7fSkpO1xuO1xuLyoqIE1pbiBudW1iZXIgb2YgbmVpZ2hib3JzIGZvciBLTk4gKi9cbmV4cG9ydCBjb25zdCBNSU5fTkVJR0hCT1JTID0gMTtcbi8qKiBJbXB1dGUgbWlzc2luZyB2YWx1ZXMgdXNpbmcgdGhlIEtOTiBtZXRob2QgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgZm9yIHdoaWNoIGFuIGltcHV0YXRpb24gZmFpbHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbXB1dGUoZGYsIHRhcmdldENvbE5hbWVzLCBmZWF0dXJlc01ldHJpY3MsIG1pc3NpbmdWYWxzSW5kaWNlcywgZGlzdGFuY2UsIG5laWdoYm9ycywgaW5QbGFjZSkge1xuICAgIC8vIDEuIENoZWNrIGlucHV0cyBjb21wbGV0bmVzc1xuICAgIGlmIChuZWlnaGJvcnMgPCBNSU5fTkVJR0hCT1JTKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLklOQ09SUkVDVF9ORUlHSEJPUlMpO1xuICAgIGlmIChkZi5yb3dDb3VudCA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuS05OX05PVF9FTk9VR0hfT0ZfUk9XUyk7XG4gICAgaWYgKHRhcmdldENvbE5hbWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5LTk5fTk9fVEFSR0VUX0NPTFVNTlMpO1xuICAgIGlmIChmZWF0dXJlc01ldHJpY3Muc2l6ZSA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5LTk5fTk9fRkVBVFVSRV9DT0xVTU5TKTtcbiAgICBpZiAoZmVhdHVyZXNNZXRyaWNzLnNpemUgPT09IDEpXG4gICAgICAgIHRhcmdldENvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlc01ldHJpY3MuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtFUlJPUl9NU0cuS05OX05PX0ZFQVRVUkVfQ09MVU1OU30gY2FuIGJlIHVzZWQgZm9yIHRoZSBjb2x1bW4gJyR7bmFtZX0nYCk7XG4gICAgICAgIH0pO1xuICAgIHRhcmdldENvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKCFtaXNzaW5nVmFsc0luZGljZXMuaGFzKG5hbWUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0VSUk9SX01TRy5LTk5fRkFJTFN9OiAke0VSUk9SX01TRy5XUk9OR19QUkVESUNUSU9OU31gKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5zID0gZGYuY29sdW1ucztcbiAgICAvLyAyLiBJbXB1dGF0aW9uXG4gICAgdGFyZ2V0Q29sTmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVNVUFBPUlRFRF9DT0xVTU5fVFlQRVMuaW5jbHVkZXMoY29sdW1ucy5ieU5hbWUobmFtZSkudHlwZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9KTtcbiAgICBmZWF0dXJlc01ldHJpY3MuZm9yRWFjaCgodmFsLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmICghU1VQUE9SVEVEX0NPTFVNTl9UWVBFUy5pbmNsdWRlcyhkZi5nZXRDb2wobmFtZSkudHlwZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9KTtcbiAgICAvKiogRmFpbGVkIHRvIGltcHV0ZSBpdGVtcyAqL1xuICAgIGNvbnN0IGZhaWxlZFRvSW1wdXRlID0gbmV3IE1hcCgpO1xuICAgIC8vIDIuIE1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gaW4gZWFjaCB0YXJnZXQgY29sdW1uXG4gICAgdGFyZ2V0Q29sTmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zLmJ5TmFtZShuYW1lKTtcbiAgICAgICAgY29uc3QgbnVsbFZhbHVlID0gZ2V0TnVsbFZhbHVlKGNvbCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IGNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jaWVzID0gbmV3IFVpbnQxNkFycmF5KGNvbC5jYXRlZ29yaWVzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVTb3VyY2UgPSBbXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZU51bGxWYWwgPSBbXTtcbiAgICAgICAgY29uc3QgbWV0cmljRnVuYyA9IFtdO1xuICAgICAgICBjb25zdCBmYWlsZWRUb0ltcHV0ZUluZGljZXMgPSBbXTtcbiAgICAgICAgLy8gY3JlYXRlIGZlYXR1cmVzIHRvb2xzXG4gICAgICAgIGZlYXR1cmVzTWV0cmljcy5mb3JFYWNoKChtZXRyaWNJbmZvLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gY29sLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gY29sdW1ucy5ieU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZVNvdXJjZS5wdXNoKGZlYXR1cmUuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlTnVsbFZhbC5wdXNoKGdldE51bGxWYWx1ZShmZWF0dXJlKSk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtZXRyaWNJbmZvLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNRVRSSUNfVFlQRS5ESUZGRVJFTkNFOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljRnVuYy5wdXNoKChhLCBiKSA9PiBtZXRyaWNJbmZvLndlaWdodCAqIE1hdGguYWJzKGEgLSBiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNRVRSSUNfVFlQRS5PTkVfSE9UOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljRnVuYy5wdXNoKChhLCBiKSA9PiBtZXRyaWNJbmZvLndlaWdodCAqICgoYSA9PT0gYikgPyAwIDogMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmZWF0dXJlc0NvdW50ID0gZmVhdHVyZVNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHByb3BlckluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoZmVhdHVyZVNvdXJjZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBidWZmZXJWZWN0b3IgPSBuZXcgRmxvYXQzMkFycmF5KGZlYXR1cmVTb3VyY2UubGVuZ3RoKTtcbiAgICAgICAgbGV0IHByb3BlckluZGljZXNDb3VudCA9IDA7XG4gICAgICAgIC8vIGNsb3Nlc3QgaXRlbXNcbiAgICAgICAgY29uc3QgbmVhcmVzdEl0ZW1zID0gbmV3IEFycmF5KG5laWdoYm9ycyk7XG4gICAgICAgIGxldCBuZWFyZXN0SXRlbXNDb3VudCA9IDA7XG4gICAgICAgIC8vIGF1eGlsaXJ5IHZhcmlhYmxlc1xuICAgICAgICBsZXQgbWF4SW5kID0gMDtcbiAgICAgICAgbGV0IG1heERpc3QgPSAwO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgbGV0IGZpbGxWYWx1ZSA9IDA7XG4gICAgICAgIC8qKiBPYnRhaW4gcHJvcGVyIGluZGljZXMgZm9yIEtOTjogZmVhdHVyZXMgd2l0aCBtaXNzaW5nIHZhbHMgYXJlIHNraXBwZWQgKi9cbiAgICAgICAgY29uc3QgZ2V0UHJvcGVySW5kZWNlcyA9IChpZHgpID0+IHtcbiAgICAgICAgICAgIHByb3BlckluZGljZXNDb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZVNvdXJjZVtpXVtpZHhdICE9PSBmZWF0dXJlTnVsbFZhbFtpXSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJJbmRpY2VzW3Byb3BlckluZGljZXNDb3VudF0gPSBpO1xuICAgICAgICAgICAgICAgICAgICArK3Byb3BlckluZGljZXNDb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBDb21wdXRlIGJ1ZmZlciB2ZWN0b3IgKi9cbiAgICAgICAgY29uc3QgY29tcHV0ZUJ1ZmZlclZlY3RvciA9IChpZHgsIGN1cikgPT4ge1xuICAgICAgICAgICAgcHJvcGVySW5kaWNlcy5mb3JFYWNoKChwcm9wZXJJbmRleCwgaykgPT4ge1xuICAgICAgICAgICAgICAgIGJ1ZmZlclZlY3RvcltrXSA9IG1ldHJpY0Z1bmNbcHJvcGVySW5kZXhdKGZlYXR1cmVTb3VyY2VbcHJvcGVySW5kZXhdW2lkeF0sIGZlYXR1cmVTb3VyY2VbcHJvcGVySW5kZXhdW2N1cl0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBFdWNsaWRlYW4gZGlzdGFuY2UgZnVuY3Rpb24gKi9cbiAgICAgICAgY29uc3QgZXVjbGlkZWFuRGlzdEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVySW5kaWNlc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgc3VtICs9IGJ1ZmZlclZlY3RvcltpXSAqIGJ1ZmZlclZlY3RvcltpXTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIE1hbmhhdHRhbiBkaXN0YW5jZSBmdW5jdGlvbiAqL1xuICAgICAgICBjb25zdCBtYW5oYXR0YW5EaXN0RnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJJbmRpY2VzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gTWF0aC5hYnMoYnVmZmVyVmVjdG9yW2ldKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIFJldHVybiBub3JtIG9mIHRoZSBidWZmZXIgdmVjdG9yIChkaXN0YW5jZSBiZXR3ZWVuIGktdGggJiBqLXRoIGVsZW1lbnRzKSAqL1xuICAgICAgICBjb25zdCBkaXN0ID0gKGRpc3RhbmNlID09PSBESVNUQU5DRV9UWVBFLkVVQ0xJREVBTikgPyBldWNsaWRlYW5EaXN0RnVuYyA6IG1hbmhhdHRhbkRpc3RGdW5jO1xuICAgICAgICAvKiogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgaXRlbSAoaS5lLiB0YWJsZSByb3cpIGNhbiBiZSB1c2VkICovXG4gICAgICAgIGNvbnN0IGNhbkl0ZW1CZVVzZWQgPSAoY3VyKSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlW2N1cl0gPT09IG51bGxWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlckluZGljZXNDb3VudDsgKytpKVxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlU291cmNlW3Byb3BlckluZGljZXNbaV1dW2N1cl0gPT09IGZlYXR1cmVOdWxsVmFsW3Byb3BlckluZGljZXNbaV1dKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIFJldHVybiB0aGUgbW9zdCBmcmVxdWVudCBvZiB0aGUgbmVhcmVzdCBpdGVtcyAoZm9yIGNhdGVnb3JpYWwgZGF0YSkgKi9cbiAgICAgICAgY29uc3QgbW9zdEZyZXF1ZW50T2ZUaGVOZWFyZXN0SXRlbXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBmcmVxdWVuY2llcy5mb3JFYWNoKCh2LCBpLCBhcnIpID0+IGFycltpXSA9IDApO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5lYXJlc3RJdGVtc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgKytmcmVxdWVuY2llc1tzb3VyY2VbbmVhcmVzdEl0ZW1zW2ldLmluZGV4XV07XG4gICAgICAgICAgICBsZXQgbWF4RnJlcSA9IGZyZXF1ZW5jaWVzWzBdO1xuICAgICAgICAgICAgbGV0IG1heEZyZXFJZHggPSAwO1xuICAgICAgICAgICAgZnJlcXVlbmNpZXMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ID4gbWF4RnJlcSkge1xuICAgICAgICAgICAgICAgICAgICBtYXhGcmVxID0gdjtcbiAgICAgICAgICAgICAgICAgICAgbWF4RnJlcUlkeCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbWF4RnJlcUlkeDtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIEdldCBpbXB1dGF0aW9uIHZhbHVlICovXG4gICAgICAgIGNvbnN0IGdldEZpbGxWYWx1ZSA9IChpZHgpID0+IHtcbiAgICAgICAgICAgIGdldFByb3BlckluZGVjZXMoaWR4KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAgICAgICAgaWYgKHByb3BlckluZGljZXNDb3VudCA9PT0gMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7RVJST1JfTVNHLktOTl9JTVBPU1NJQkxFX0lNUFVUQVRJT059OiB0aGUgY29sdW1uIFwiJHtjb2wubmFtZX1cIiwgcm93ICR7aWR4ICsgMX1gKTtcbiAgICAgICAgICAgIG5lYXJlc3RJdGVtc0NvdW50ID0gMDtcbiAgICAgICAgICAgIC8vIHNlYXJjaCBmb3IgdGhlIGNsb3Nlc3QgaXRlbXNcbiAgICAgICAgICAgIGZvciAobGV0IGN1ciA9IDA7IGN1ciA8IGxlbjsgKytjdXIpXG4gICAgICAgICAgICAgICAgaWYgKGNhbkl0ZW1CZVVzZWQoY3VyKSAmJiAoY3VyICE9PSBpZHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDEpIGNvbXB1dGUgZGlzdGFuY2UgYmV0d2VlbiBjdXItdGggYW5kIGlkeC10aCBpdGVtc1xuICAgICAgICAgICAgICAgICAgICBjb21wdXRlQnVmZmVyVmVjdG9yKGlkeCwgY3VyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyRGlzdCA9IGRpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gMikgaW5zZXJ0IHRoZSBjdXJyZW50IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lYXJlc3RJdGVtc0NvdW50IDwgbmVpZ2hib3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0SXRlbXNbbmVhcmVzdEl0ZW1zQ291bnRdID0geyBpbmRleDogY3VyLCBkaXN0OiBjdXJEaXN0IH07XG4gICAgICAgICAgICAgICAgICAgICAgICArK25lYXJlc3RJdGVtc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4xKSBmaW5kIHRoZSBmYXJlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEluZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhEaXN0ID0gbmVhcmVzdEl0ZW1zWzBdLmRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5lYXJlc3RJdGVtc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heERpc3QgPCBuZWFyZXN0SXRlbXNbaV0uZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEaXN0ID0gbmVhcmVzdEl0ZW1zW2ldLmRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEluZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4yKSByZXBsYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRGlzdCA8IG1heERpc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdEl0ZW1zW21heEluZF0gPSB7IGluZGV4OiBjdXIsIGRpc3Q6IGN1ckRpc3QgfTtcbiAgICAgICAgICAgICAgICAgICAgfSAvLyBlbHNlXG4gICAgICAgICAgICAgICAgfSAvLyBmb3IgY3VyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3VuZCBuZWFyZXN0IGl0ZW1zXG4gICAgICAgICAgICBpZiAobmVhcmVzdEl0ZW1zQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0VSUk9SX01TRy5LTk5fSU1QT1NTSUJMRV9JTVBVVEFUSU9OfTogdGhlIGNvbHVtbiBcIiR7Y29sLm5hbWV9XCIsIHJvdyAke2lkeCArIDF9YCk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9zdEZyZXF1ZW50T2ZUaGVOZWFyZXN0SXRlbXMoKTtcbiAgICAgICAgICAgIC8vIGNvbXB1dGUgZmlsbCB2YWx1ZVxuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmVhcmVzdEl0ZW1zQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gc291cmNlW25lYXJlc3RJdGVtc1tpXS5pbmRleF07XG4gICAgICAgICAgICBmaWxsVmFsdWUgPSBzdW0gLyBuZWFyZXN0SXRlbXNDb3VudDtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuSU5UKVxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGZpbGxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsbFZhbHVlO1xuICAgICAgICB9OyAvLyBnZXRGaWxsVmFsdWVcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcbiAgICAgICAgICAgIC8vIHVzZSBpbmRpY2VzIGZvdW5kIHByZXZpb3VzZWx5XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgbWlzc2luZ1ZhbHNJbmRpY2VzLmdldChuYW1lKSlcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbaV0gPSBnZXRGaWxsVmFsdWUoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkVG9JbXB1dGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoRVJST1JfTVNHLkNPUkVfSVNTVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsZWRUb0ltcHV0ZUluZGljZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBmYWlsZWRUb0ltcHV0ZS5zZXQobmFtZSwgZmFpbGVkVG9JbXB1dGVJbmRpY2VzKTtcbiAgICAgICAgICAgIC8vIHRvIHJlc2V0IHZpZXcgICAgICBcbiAgICAgICAgICAgIGNvbC5zZXQoMCwgY29sLmdldCgwKSk7XG4gICAgICAgIH0gLy8gaWZcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBjb2wuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIGxldCBjb3B5TmFtZSA9IGAke25hbWV9KCR7Q09QWV9TVUZGSVh9KWA7XG4gICAgICAgICAgICAvLyBmaW5kIGFuIGFwcHJvcHJpYXRlIG5hbWVcbiAgICAgICAgICAgIHdoaWxlIChkZi5jb2x1bW5zLmNvbnRhaW5zKGNvcHlOYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvcHlOYW1lID0gYCR7bmFtZX0oJHtDT1BZX1NVRkZJWH0gJHtpfSlgO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvcHkubmFtZSA9IGNvcHlOYW1lO1xuICAgICAgICAgICAgY29uc3QgY29weVNvdXJjZSA9IGNvcHkuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgLy8gdXNlIGluZGljZXMgZm91bmQgcHJldmlvdXNlbHlcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBtaXNzaW5nVmFsc0luZGljZXMuZ2V0KG5hbWUpKVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VbaV0gPSBnZXRGaWxsVmFsdWUoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkVG9JbXB1dGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoRVJST1JfTVNHLkNPUkVfSVNTVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsZWRUb0ltcHV0ZUluZGljZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBmYWlsZWRUb0ltcHV0ZS5zZXQoY29weU5hbWUsIGZhaWxlZFRvSW1wdXRlSW5kaWNlcyk7XG4gICAgICAgICAgICBjb3B5LnNldCgwLCBjb3B5LmdldCgwKSk7XG4gICAgICAgICAgICBkZi5jb2x1bW5zLmFkZChjb3B5KTtcbiAgICAgICAgfSAvLyBlbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhaWxlZFRvSW1wdXRlO1xufSAvLyBpbXB1dGVcbi8qKiBSZXR1cm4gaW5kaWNlcyBvZiBtaXNzaW5nIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaXNzaW5nVmFsc0luZGljZXMoY29sdW1ucykge1xuICAgIGNvbnN0IG1pc1ZhbHNJbmRzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKCFTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgICAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVsbFZhbHVlID0gZ2V0TnVsbFZhbHVlKGNvbCk7XG4gICAgICAgIGNvbC5nZXRSYXdEYXRhKCkuZm9yRWFjaCgodmFsLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGxWYWx1ZSlcbiAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaWR4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1pc1ZhbHNJbmRzLnNldChjb2wubmFtZSwgaW5kaWNlcyk7XG4gICAgfVxuICAgIHJldHVybiBtaXNWYWxzSW5kcztcbn1cbi8qKiBQcmVkaWN0IGV4aXN0ZW5jZSBvZiBtaXNzaW5nIHZhbHVlcyBpbXB1dGF0aW9uIGZhaWxzICovXG5leHBvcnQgZnVuY3Rpb24gYXJlVGhlcmVGYWlscyh0YXJnZXRDb2xOYW1lcywgZmVhdHVyZUNvbE5hbWVzLCBtaXNWYWxzSW5kcykge1xuICAgIC8vIGNoZWNrIGZlYXR1cmUgY29sdW1uc1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBmZWF0dXJlQ29sTmFtZXMpXG4gICAgICAgIGlmICghbWlzVmFsc0luZHMuaGFzKG5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGNoZWNrIHRhcmdldCBjb2x1bW5zXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0Q29sTmFtZXMpIHtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IG1pc1ZhbHNJbmRzLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoaW5kaWNlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5GQUlMU19UT19QUkVESUNUX0lNUFVUQVRJT05fRkFJTFMpO1xuICAgICAgICBmb3IgKGNvbnN0IGlkeCBvZiBpbmRpY2VzKSB7XG4gICAgICAgICAgICBsZXQgZmFpbFRvSW1wdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlQ29sTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlSW5kcyA9IG1pc1ZhbHNJbmRzLmdldChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZUluZHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5GQUlMU19UT19QUkVESUNUX0lNUFVUQVRJT05fRkFJTFMpO1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZUluZHMuaW5jbHVkZXMoaWR4KSkge1xuICAgICAgICAgICAgICAgICAgICBmYWlsVG9JbXB1dGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZhaWxUb0ltcHV0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59IC8vIHByZWRpY3RGYWlsc1xuLyoqIFJldHVybnMgZmlyc3Qgbm9uLW51bGwgdmFsdWUgKi9cbmZ1bmN0aW9uIGdldEZpcnN0Tm9uTnVsbChjb2wpIHtcbiAgICBjb25zdCBudWxsVmFsdWUgPSBnZXROdWxsVmFsdWUoY29sKTtcbiAgICBjb25zdCByYXcgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgIGNvbnN0IGxlbiA9IHJhdy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgaWYgKHJhd1tpXSAhPT0gbnVsbFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIGNvbC5nZXQoaSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5FTVBUWV9DT0xVTU4pO1xufVxuLyoqIFJldHVybiBkZWZhdWx0IGZpbGwgdmFsdWUgd2l0aCByZXNwZWN0IHRvIHRoZSBjb2x1bW4gdHlwZSAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbGxWYWx1ZShjb2wpIHtcbiAgICBzd2l0Y2ggKGNvbC50eXBlKSB7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuU1RSSU5HOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkRBVEVfVElNRTpcbiAgICAgICAgICAgIHJldHVybiBnZXRGaXJzdE5vbk51bGwoY29sKTsgLy8gVE9ETzogcmVwbGFjZSBieSBtb3N0IGZyZXF1ZW50XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuSU5UOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkZMT0FUOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLlFOVU06XG4gICAgICAgICAgICByZXR1cm4gY29sLnN0YXRzLmF2ZztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgIH1cbn1cbi8qKiBQZXJmb3JtIG1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gdXNpbmcgdGhlIHNpbXBsZSBhcHByb2FjaCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcHV0ZUZhaWxlZChkZiwgZmFpbGVkVG9JbXB1dGUpIHtcbiAgICBmYWlsZWRUb0ltcHV0ZS5mb3JFYWNoKChpbmRpY2VzLCBjb2xOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbChjb2xOYW1lKTtcbiAgICAgICAgaWYgKGNvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGxWYWwgPSBnZXREZWZhdWx0RmlsbFZhbHVlKGNvbCk7XG4gICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGlkeCkgPT4gY29sLnNldChpZHgsIGZpbGxWYWwpKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFRJVExFLCBLTk5fSU1QVVRFUiwgRVJST1JfTVNHLCBISU5UIH0gZnJvbSAnLi91aS1jb25zdGFudHMnO1xuaW1wb3J0IHsgU1VQUE9SVEVEX0NPTFVNTl9UWVBFUywgTUVUUklDX1RZUEUsIERJU1RBTkNFX1RZUEUsIERFRkFVTFQsIE1JTl9ORUlHSEJPUlMsIGltcHV0ZSwgZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzLCBhcmVUaGVyZUZhaWxzLCBpbXB1dGVGYWlsZWQgfSBmcm9tIFwiLi9rbm4taW1wdXRlclwiO1xuLyoqIFJldHVybiBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIGZlYXR1cmUgbWV0cmljIGlucHV0cyAqL1xuZnVuY3Rpb24gZ2V0RmVhdHVyZUlucHV0U2V0dGluZ3ModHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLlNUUklORzpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5EQVRFX1RJTUU6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRXZWlnaHQ6IERFRkFVTFQuV0VJR0hULFxuICAgICAgICAgICAgICAgIGRlZmF1bHRNZXRyaWM6IE1FVFJJQ19UWVBFLk9ORV9IT1QsXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlTWV0cmljczogW01FVFJJQ19UWVBFLk9ORV9IT1RdXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLklOVDpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5GTE9BVDpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5RTlVNOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0V2VpZ2h0OiBERUZBVUxULldFSUdIVCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TWV0cmljOiBNRVRSSUNfVFlQRS5ESUZGRVJFTkNFLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZU1ldHJpY3M6IFtNRVRSSUNfVFlQRS5ESUZGRVJFTkNFLCBNRVRSSUNfVFlQRS5PTkVfSE9UXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgIH1cbn1cbi8qKiBSdW4gdGhlIEtOTiBtaXNzaW5nIHZhbHVlcyBpbXB1dGVyICovXG5leHBvcnQgZnVuY3Rpb24gcnVuS05OSW1wdXRlcigpIHtcbiAgICAvKiogY3VycmVudCBkYXRhZnJhbWUgKi9cbiAgICBsZXQgZGYgPSBncm9rLnNoZWxsLnQ7XG4gICAgaWYgKGRmID09PSBudWxsKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuTk9fREFUQUZSQU1FKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiogY29sdW1ucyB3aXRoIG1pc3NpbmcgdmFsdWVzICovXG4gICAgY29uc3QgY29sc1dpdGhNaXNzaW5nVmFscyA9IFtdO1xuICAgIC8qKiBuYW1lcyBvZiBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXMgKi9cbiAgICBjb25zdCBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMgPSBbXTtcbiAgICAvKiogbmFtZXMgb2YgY29sdW1ucyB0aGF0IGNhbiBiZSB1c2VkIGFzIGZlYXR1cmVzICovXG4gICAgY29uc3QgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcyA9IFtdO1xuICAgIC8vIGdldCBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWxzICYgYXZhaWxhYmxlIGZlYXR1cmUgY29sc1xuICAgIGRmLmNvbHVtbnMudG9MaXN0KClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY29sc1dpdGhNaXNzaW5nVmFscy5wdXNoKGNvbCk7XG4gICAgICAgICAgICBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMucHVzaChjb2wubmFtZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBnZXQgaW5kaWNlcyBvZiBtaXNzaW5nIHZhbHVlczogY29sIG5hbWUgLT4gYXJyYXkgb2YgaW5kaWNlc1xuICAgIGNvbnN0IG1pc1ZhbHNJbmRzID0gZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzKGNvbHNXaXRoTWlzc2luZ1ZhbHMpO1xuICAgIGlmIChjb2xzV2l0aE1pc3NpbmdWYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBncm9rLnNoZWxsLmluZm8oRVJST1JfTVNHLk5PX01JU1NJTkdfVkFMVUVTKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihFUlJPUl9NU0cuT05FX0FWQUlMQUJMRV9GRUFUVVJFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbi1wbGFjZSBjb21wb25lbnRzXG4gICAgbGV0IGluUGxhY2UgPSBERUZBVUxULklOX1BMQUNFID4gMDtcbiAgICBjb25zdCBpblBsYWNlSW5wdXQgPSB1aS5ib29sSW5wdXQoVElUTEUuSU5fUExBQ0UsIGluUGxhY2UsICgpID0+IHsgdmFyIF9hOyBpblBsYWNlID0gKF9hID0gaW5QbGFjZUlucHV0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTsgfSk7XG4gICAgaW5QbGFjZUlucHV0LnNldFRvb2x0aXAoSElOVC5JTl9QTEFDRSk7XG4gICAgLy8gS2VlcCBlbXB0eSBmZWF0dXJlXG4gICAgbGV0IGtlZXBFbXB0eSA9IERFRkFVTFQuS0VFUF9FTVBUWSA+IDA7XG4gICAgY29uc3Qga2VlcEVtcHR5SW5wdXQgPSB1aS5ib29sSW5wdXQoVElUTEUuS0VFUF9FTVBUWSwga2VlcEVtcHR5LCAoKSA9PiB7IHZhciBfYTsga2VlcEVtcHR5ID0gKF9hID0ga2VlcEVtcHR5SW5wdXQudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlOyB9KTtcbiAgICBrZWVwRW1wdHlJbnB1dC5zZXRUb29sdGlwKEhJTlQuS0VFUF9FTVBUWSk7XG4gICAgLy8gTmVpZ2hib3JzIGNvbXBvbmVudHNcbiAgICBsZXQgbmVpZ2hib3JzID0gREVGQVVMVC5ORUlHSEJPUlM7XG4gICAgY29uc3QgbmVpZ2hib3JzSW5wdXQgPSB1aS5pbnRJbnB1dChUSVRMRS5ORUlHSEJPUlMsIG5laWdoYm9ycywgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBuZWlnaGJvcnNJbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbClcbiAgICAgICAgICAgIG5laWdoYm9yc0lucHV0LnZhbHVlID0gbmVpZ2hib3JzO1xuICAgICAgICBlbHNlIGlmICh2YWwgPj0gTUlOX05FSUdIQk9SUylcbiAgICAgICAgICAgIG5laWdoYm9ycyA9IHZhbDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbmVpZ2hib3JzSW5wdXQudmFsdWUgPSBuZWlnaGJvcnM7XG4gICAgfSk7XG4gICAgbmVpZ2hib3JzSW5wdXQuc2V0VG9vbHRpcChISU5ULk5FSUdIQk9SUyk7XG4gICAgLy8gRGlzdGFuY2UgY29tcG9uZW50c1xuICAgIGxldCBkaXN0VHlwZSA9IERJU1RBTkNFX1RZUEUuRVVDTElERUFOO1xuICAgIGNvbnN0IGRpc3RUeXBlSW5wdXQgPSB1aS5jaG9pY2VJbnB1dChUSVRMRS5ESVNUQU5DRSwgZGlzdFR5cGUsIFtESVNUQU5DRV9UWVBFLkVVQ0xJREVBTiwgRElTVEFOQ0VfVFlQRS5NQU5IQVRUQU5dLCAoKSA9PiB7IHZhciBfYTsgcmV0dXJuIGRpc3RUeXBlID0gKF9hID0gZGlzdFR5cGVJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogRElTVEFOQ0VfVFlQRS5FVUNMSURFQU47IH0pO1xuICAgIGRpc3RUeXBlSW5wdXQuc2V0VG9vbHRpcChISU5ULkRJU1RBTkNFKTtcbiAgICAvLyBUYXJnZXQgY29sdW1ucyBjb21wb25lbnRzIChjb2xzIHdpdGggbWlzc2luZyB2YWx1ZXMgdG8gYmUgaW1wdXRlZClcbiAgICBsZXQgdGFyZ2V0Q29sTmFtZXMgPSBjb2xzV2l0aE1pc3NpbmdWYWxzLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gICAgY29uc3QgdGFyZ2V0Q29sSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuQ09MVU1OUywgZGYsICgpID0+IHtcbiAgICAgICAgdGFyZ2V0Q29sTmFtZXMgPSB0YXJnZXRDb2xJbnB1dC52YWx1ZS5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICBjaGVja0FwcGxpY2FiaWxpdHkoKTtcbiAgICB9LCB7IGF2YWlsYWJsZTogYXZhaWxhYmxlVGFyZ2V0Q29sc05hbWVzLCBjaGVja2VkOiBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMgfSk7XG4gICAgdGFyZ2V0Q29sSW5wdXQuc2V0VG9vbHRpcChISU5ULlRBUkdFVCk7XG4gICAgLy8gRmVhdHVyZSBjb2x1bW5zIGNvbXBvbmVudHNcbiAgICBsZXQgc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMgPSBhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzO1xuICAgIGNvbnN0IGZlYXR1cmVzSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuRkVBVFVSRVMsIGRmLCAoKSA9PiB7XG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZS5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hlY2tBcHBsaWNhYmlsaXR5KCk7XG4gICAgICAgICAgICBtZXRyaWNJbmZvSW5wdXRzLmZvckVhY2goKGRpdiwgbmFtZSkgPT4gZGl2LmhpZGRlbiA9ICFzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGlkZVdpZGdldHMoKTtcbiAgICB9LCB7IGF2YWlsYWJsZTogYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcywgY2hlY2tlZDogYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcyB9KTtcbiAgICBmZWF0dXJlc0lucHV0LnNldFRvb2x0aXAoSElOVC5GRUFUVVJFUyk7XG4gICAgLyoqIEhpZGUgd2lkZ2V0cyAodXNlIGlmIHJ1biBpcyBub3QgYXBwbGljYWJsZSkgKi9cbiAgICBjb25zdCBoaWRlV2lkZ2V0cyA9ICgpID0+IHtcbiAgICAgICAgZGxnLmdldEJ1dHRvbihUSVRMRS5SVU4pLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgaW5QbGFjZUlucHV0LnJvb3QuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAga2VlcEVtcHR5SW5wdXQucm9vdC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBuZWlnaGJvcnNJbnB1dC5yb290LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIGRpc3REaXYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgbWV0cmljc0Rpdi5oaWRkZW4gPSB0cnVlO1xuICAgIH07XG4gICAgLyoqIFNob3cgd2lkZ2V0cyAodXNlIGlmIHJ1biBpcyBhcHBsaWNhYmxlKSAqL1xuICAgIGNvbnN0IHNob3dXaWRnZXRzID0gKCkgPT4ge1xuICAgICAgICBkbGcuZ2V0QnV0dG9uKFRJVExFLlJVTikuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgZGlzdERpdi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaW5QbGFjZUlucHV0LnJvb3QuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIG5laWdoYm9yc0lucHV0LnJvb3QuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQucm9vdC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAga2VlcEVtcHR5SW5wdXQucm9vdC5oaWRkZW4gPSAhYXJlVGhlcmVGYWlscyh0YXJnZXRDb2xOYW1lcywgc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMsIG1pc1ZhbHNJbmRzKTtcbiAgICB9O1xuICAgIC8qKiBDaGVjayBhcHBsaWNhYmlsaXR5IG9mIHRoZSBpbXB1dGF0aW9uICovXG4gICAgY29uc3QgY2hlY2tBcHBsaWNhYmlsaXR5ID0gKCkgPT4ge1xuICAgICAgICBzaG93V2lkZ2V0cygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2xOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzWzBdID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVXaWRnZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgJHtFUlJPUl9NU0cuT05FX0ZFQVRVUkVfU0VMRUNURUR9IHRoZSBjb2x1bW4gJyR7bmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIE1ldHJpY3MgY29tcG9uZW50c1xuICAgIGNvbnN0IGZlYXR1cmVzTWV0cmljcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBtZXRyaWNJbmZvSW5wdXRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG1ldHJpY3NEaXYgPSB1aS5kaXZWKFtdKTtcbiAgICBtZXRyaWNzRGl2LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgIC8vIENyZWF0ZSBtZXRyaWNzIFVJXG4gICAgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGNvbnN0IHR5cGUgPSBkZi5jb2wobmFtZSkudHlwZTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRGZWF0dXJlSW5wdXRTZXR0aW5ncyh0eXBlKTtcbiAgICAgICAgZmVhdHVyZXNNZXRyaWNzLnNldChuYW1lLCB7IHdlaWdodDogc2V0dGluZ3MuZGVmYXVsdFdlaWdodCwgdHlwZTogc2V0dGluZ3MuZGVmYXVsdE1ldHJpYyB9KTtcbiAgICAgICAgLy8gZGlzdGFuY2UgaW5wdXRcbiAgICAgICAgY29uc3QgZGlzdFR5cGVJbnB1dCA9IHVpLmNob2ljZUlucHV0KG5hbWUsIHNldHRpbmdzLmRlZmF1bHRNZXRyaWMsIHNldHRpbmdzLmF2YWlsYWJsZU1ldHJpY3MsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBkaXN0SW5mbyA9IChfYSA9IGZlYXR1cmVzTWV0cmljcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHsgd2VpZ2h0OiBzZXR0aW5ncy5kZWZhdWx0V2VpZ2h0LCB0eXBlOiBzZXR0aW5ncy5kZWZhdWx0TWV0cmljIH07XG4gICAgICAgICAgICBkaXN0SW5mby50eXBlID0gKF9iID0gZGlzdFR5cGVJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogc2V0dGluZ3MuZGVmYXVsdE1ldHJpYztcbiAgICAgICAgICAgIGZlYXR1cmVzTWV0cmljcy5zZXQobmFtZSwgZGlzdEluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGlzdFR5cGVJbnB1dC5yb290LnN0eWxlLndpZHRoID0gJzUwJSc7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQuc2V0VG9vbHRpcChISU5ULk1FVFJJQyk7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQucm9vdC5oaWRkZW4gPSB0cnVlOyAvLyB0aGlzIGlucHV0IHdpbGwgYmUgdXNlZCBmdXJ0aGVyXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByb3ZpZGUgYSBzbGlkZXIgKHNlZSB0aCBidWcgaHR0cHM6Ly9yZWRkYXRhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0dST0stMTQ0MzEpXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgcHJvcCA9IERHLlByb3BlcnR5LmZyb21PcHRpb25zKHsgXCJuYW1lXCI6IG5hbWUsIFwiaW5wdXRUeXBlXCI6IFwiRmxvYXRcIiwgbWluOiAwLCBtYXg6IDEwLCBcInNob3dTbGlkZXJcIjogdHJ1ZSwgXCJzdGVwXCI6IDEgfSk7XG4gICAgICAgIGNvbnN0IHdlaWdodElucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCk7XG4gICAgICAgIHdlaWdodElucHV0LnZhbHVlID0gc2V0dGluZ3MuZGVmYXVsdFdlaWdodDtcbiAgICAgICAgd2VpZ2h0SW5wdXQub25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBkaXN0SW5mbyA9IChfYSA9IGZlYXR1cmVzTWV0cmljcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHsgd2VpZ2h0OiBzZXR0aW5ncy5kZWZhdWx0V2VpZ2h0LCB0eXBlOiBzZXR0aW5ncy5kZWZhdWx0TWV0cmljIH07XG4gICAgICAgICAgICBkaXN0SW5mby53ZWlnaHQgPSAoX2IgPSB3ZWlnaHRJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogc2V0dGluZ3MuZGVmYXVsdFdlaWdodDtcbiAgICAgICAgICAgIGZlYXR1cmVzTWV0cmljcy5zZXQobmFtZSwgZGlzdEluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgd2VpZ2h0SW5wdXQuc2V0VG9vbHRpcChISU5ULldFSUdIVCk7XG4gICAgICAgIGNvbnN0IGRpdiA9IHVpLmRpdkgoW2Rpc3RUeXBlSW5wdXQucm9vdCwgd2VpZ2h0SW5wdXQucm9vdF0pO1xuICAgICAgICBtZXRyaWNJbmZvSW5wdXRzLnNldChuYW1lLCBkaXYpO1xuICAgICAgICBtZXRyaWNzRGl2LmFwcGVuZChkaXYpO1xuICAgIH0pO1xuICAgIC8vIFRoZSBtYWluIGRpYWxvZ1xuICAgIGNvbnN0IGRsZyA9IHVpLmRpYWxvZyh7IHRpdGxlOiBUSVRMRS5LTk5fSU1QVVRFUiwgaGVscFVybDogS05OX0lNUFVURVIgfSk7XG4gICAgZ3Jvay5zaGVsbC52LnJvb3QuYXBwZW5kQ2hpbGQoZGxnLnJvb3QpO1xuICAgIG1ldHJpY3NEaXYuaGlkZGVuID0gdHJ1ZTtcbiAgICBrZWVwRW1wdHlJbnB1dC5yb290LmhpZGRlbiA9ICFhcmVUaGVyZUZhaWxzKHRhcmdldENvbE5hbWVzLCBzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcywgbWlzVmFsc0luZHMpO1xuICAgIC8vIEljb24gc2hvd2luZy9oaWRpbmcgbWV0cmljcyBVSVxuICAgIGNvbnN0IHNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHsgbWV0cmljc0Rpdi5oaWRkZW4gPSAhbWV0cmljc0Rpdi5oaWRkZW47IH0sIEhJTlQuTUVUUklDX1NFVFRJTkdTKTtcbiAgICBjb25zdCBkaXN0RGl2ID0gdWkuZGl2SChbZGlzdFR5cGVJbnB1dC5yb290LCBzZXR0aW5nc0ljb25dKTtcbiAgICBkbGcuYWRkQnV0dG9uKFRJVExFLlJVTiwgKCkgPT4ge1xuICAgICAgICBkbGcuY2xvc2UoKTtcbiAgICAgICAgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcy5pbmNsdWRlcyhuYW1lKSkuZm9yRWFjaCgobmFtZSkgPT4gZmVhdHVyZXNNZXRyaWNzLmRlbGV0ZShuYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWRUb0ltcHV0ZSA9IGltcHV0ZShkZiwgdGFyZ2V0Q29sTmFtZXMsIGZlYXR1cmVzTWV0cmljcywgbWlzVmFsc0luZHMsIGRpc3RUeXBlLCBuZWlnaGJvcnMsIGluUGxhY2UpO1xuICAgICAgICAgICAgaWYgKCFrZWVwRW1wdHkpXG4gICAgICAgICAgICAgICAgaW1wdXRlRmFpbGVkKGRmLCBmYWlsZWRUb0ltcHV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYCR7RVJST1JfTVNHLktOTl9GQUlMU306ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgJHtFUlJPUl9NU0cuS05OX0ZBSUxTfTogJHtFUlJPUl9NU0cuQ09SRV9JU1NVRX1gKTtcbiAgICAgICAgfVxuICAgIH0pXG4gICAgICAgIC5hZGQodGFyZ2V0Q29sSW5wdXQpXG4gICAgICAgIC5hZGQoZmVhdHVyZXNJbnB1dClcbiAgICAgICAgLmFkZChkaXN0RGl2KVxuICAgICAgICAuYWRkKG1ldHJpY3NEaXYpXG4gICAgICAgIC5hZGQobmVpZ2hib3JzSW5wdXQpXG4gICAgICAgIC5hZGQoaW5QbGFjZUlucHV0KVxuICAgICAgICAuYWRkKGtlZXBFbXB0eUlucHV0KVxuICAgICAgICAuc2hvdygpO1xufSAvLyBydW5LTk5JbXB1dGVyXG4iLCJpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHsgTXVsdGlDb2x1bW5EaW1SZWR1Y3Rpb25FZGl0b3IgfSBmcm9tICcuLi9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBnZXRHUFVBZGFwdGVyRGVzY3JpcHRpb24gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UnO1xuaW1wb3J0IHsgZGVmYXVsdE1DTE9wdGlvbnMgfSBmcm9tICcuL21hcmNvdi1jbHVzdGVyJztcbmV4cG9ydCBjbGFzcyBNQ0xFZGl0b3IgZXh0ZW5kcyBNdWx0aUNvbHVtbkRpbVJlZHVjdGlvbkVkaXRvciB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yU2V0dGluZ3MgPSB7fSkge1xuICAgICAgICBzdXBlcihlZGl0b3JTZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuc2ltaWxhcml0eVRocmVzaG9sZElucHV0ID0gdWkuaW50SW5wdXQoJ1NpbWlsYXJpdHkgVGhyZXNob2xkJywgODApO1xuICAgICAgICB0aGlzLm1heEl0ZXJhdGlvbnNJbnB1dCA9IHVpLmludElucHV0KCdNYXggSXRlcmF0aW9ucycsIDUpO1xuICAgICAgICB0aGlzLnVzZVdlYkdQVUlucHV0ID0gdWkuYm9vbElucHV0KCdVc2UgV2ViR1BVJywgZmFsc2UpO1xuICAgICAgICB0aGlzLmluZmxhdGVJbnB1dCA9IHVpLmZsb2F0SW5wdXQoJ0luZmxhdGlvbiBGYWN0b3InLCBkZWZhdWx0TUNMT3B0aW9ucy5pbmZsYXRlRmFjdG9yKTtcbiAgICAgICAgZ2V0R1BVQWRhcHRlckRlc2NyaXB0aW9uKCkudGhlbigoZGVzYykgPT4ge1xuICAgICAgICAgICAgaWYgKGRlc2MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVUlucHV0LnNldFRvb2x0aXAoYFVzZSB3ZWJHUFUgZm9yIE1DTCBjYWxjdWxhdGlvbiAoJHtkZXNjfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlV2ViR1BVSW5wdXQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVUlucHV0LnNldFRvb2x0aXAoJ1dlYkdQVSBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRFZGl0b3IoKSB7XG4gICAgICAgIGNvbnN0IGRpdiA9IHVpLmRpdihbXG4gICAgICAgICAgICB0aGlzLnRhYmxlSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0Um9vdCxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdCxcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMuaW5mbGF0ZUlucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLm1heEl0ZXJhdGlvbnNJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5yb290LFxuICAgICAgICBdLCB7IHN0eWxlOiB7IG1pbldpZHRoOiAnNDIwcHgnIH0sIGNsYXNzZXM6ICd1aS1mb3JtJyB9KTtcbiAgICAgICAgcmV0dXJuIGRpdjtcbiAgICB9XG4gICAgZ2V0IHBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnNJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IHRoaXMubWV0aG9kSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY3Rpb25zOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQucHJlUHJvY2Vzc2luZ0Z1bmN0aW9uKSxcbiAgICAgICAgICAgIGRpc3RhbmNlTWV0cmljczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnNpbWlsYXJpdHlNZXRyaWNJbnB1dC52YWx1ZSksXG4gICAgICAgICAgICB3ZWlnaHRzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQud2VpZ2h0KSxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jQXJnczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzKSxcbiAgICAgICAgICAgIGFnZ3JlYWdncmVnYXRpb25NZXRob2Q6IHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBtYXhJdGVyYXRpb25zOiB0aGlzLm1heEl0ZXJhdGlvbnNJbnB1dC52YWx1ZSA/PyA1LFxuICAgICAgICAgICAgdXNlV2ViR1BVOiB0aGlzLnVzZVdlYkdQVUlucHV0LnZhbHVlID8/IGZhbHNlLFxuICAgICAgICAgICAgaW5mbGF0ZUZhY3RvcjogdGhpcy5pbmZsYXRlSW5wdXQudmFsdWUgPz8gZGVmYXVsdE1DTE9wdGlvbnMuaW5mbGF0ZUZhY3RvcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liV05zTFdWa2FYUnZjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltMWpiQzFsWkdsMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUTBFc1QwRkJUeXhMUVVGTExFVkJRVVVzVFVGQlRTeHBRa0ZCYVVJc1EwRkJRenRCUVVWMFF5eFBRVUZQTEVWQlFVTXNOa0pCUVRaQ0xFVkJRVU1zVFVGREwwSXNORVZCUVRSRkxFTkJRVU03UVVGRGNFWXNUMEZCVHl4RlFVRkRMSGRDUVVGM1FpeEZRVUZETEUxQlFVMHNhMFJCUVd0RUxFTkJRVU03UVVGRE1VWXNUMEZCVHl4RlFVRkRMR2xDUVVGcFFpeEZRVUZETEUxQlFVMHNhMEpCUVd0Q0xFTkJRVU03UVVGSGJrUXNUVUZCVFN4UFFVRlBMRk5CUVZVc1UwRkJVU3cyUWtGQk5rSTdTVUZMZUVRc1dVRkJXU3hwUWtGQk5FTXNSVUZCUlR0UlFVTjRSQ3hMUVVGTExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdVVUZEZEVJc1NVRkJTU3hEUVVGRExIZENRVUYzUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zYzBKQlFYTkNMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRGVFVXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEhRVUZITEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRNMFFzU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExGbEJRVmtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNhVUpCUVdsQ0xFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTTdVVUZEZGtZc2QwSkJRWGRDTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU4yUXl4SlFVRkpMRWxCUVVrc1JVRkJSVHRuUWtGRFVpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRlZCUVZVc1EwRkJReXh0UTBGQmJVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVNMVJUdHBRa0ZCVFR0blFrRkRUQ3hKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1ZVRkJWU3hEUVVGRExIbENRVUY1UWl4RFFVRkRMRU5CUVVNN1owSkJRekZFTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF6dGhRVU55UXp0UlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dEpRVVZOTEZOQlFWTTdVVUZEWkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETzFsQlEycENMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNUdFpRVU53UWl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTzFsQlEzSkNMRWxCUVVrc1EwRkJReXh6UWtGQmMwSTdXVUZETTBJc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRWxCUVVrN1dVRkRhRU1zU1VGQlNTeERRVUZETEhkQ1FVRjNRaXhEUVVGRExFbEJRVWs3V1VGRGJFTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSk8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEpRVUZKTzFsQlF6VkNMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNUdFRRVU42UWl4RlFVRkZMRVZCUVVNc1MwRkJTeXhGUVVGRkxFVkJRVU1zVVVGQlVTeEZRVUZGTEU5QlFVOHNSVUZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hUUVVGVExFVkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkVMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzUTBGQlF6dEpRVVZFTEVsQlFWY3NUVUZCVFR0UlFVTm1MRTlCUVU4N1dVRkRUQ3hMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRk5PMWxCUXpkQ0xFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRXRCUVUwN1dVRkRha01zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJUVHRaUVVOdVF5eHpRa0ZCYzBJc1JVRkJSU3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTTdXVUZEYmtZc1pVRkJaU3hGUVVGRkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4TFFVRk5MRU5CUVVNN1dVRkRia1lzVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZQTEVOQlFVTTdXVUZEZEVRc2NVSkJRWEZDTEVWQlFVVXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETERaQ1FVRTJRaXhEUVVGRE8xbEJRekZHTEhOQ1FVRnpRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhMUVVGTE8xbEJRM3BFTEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNTMEZCU3p0WlFVTTVReXhoUVVGaExFVkJRVVVzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFdEJRVXNzU1VGQlNTeERRVUZETzFsQlEycEVMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEV0QlFVc3NTVUZCU1N4TFFVRkxPMWxCUXpkRExHRkJRV0VzUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRXRCUVVzc1NVRkJTU3hwUWtGQmFVSXNRMEZCUXl4aFFVRmhPMU5CUXpGRkxFTkJRVU03U1VGRFNpeERRVUZETzBOQlEwb2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dWFXMXdiM0owSUNvZ1lYTWdkV2tnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDNWcEp6dGNibWx0Y0c5eWRDQjdSR2x0VW1Wa2RXTjBhVzl1UldScGRHOXlUM0IwYVc5dWMzMGdabkp2YlNBbkxpNHZablZ1WTNScGIyNUZaR2wwYjNKekwyUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpkR2x2YmkxbFpHbDBiM0luTzF4dWFXMXdiM0owSUh0TmRXeDBhVU52YkhWdGJrUnBiVkpsWkhWamRHbHZia1ZrYVhSdmNuMWNiaUFnWm5KdmJTQW5MaTR2YlhWc2RHa3RZMjlzZFcxdUxXUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpkR2x2Ymk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpkR2x2YmkxbFpHbDBiM0luTzF4dWFXMXdiM0owSUh0blpYUkhVRlZCWkdGd2RHVnlSR1Z6WTNKcGNIUnBiMjU5SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12YldGMGFDOXpjbU12ZDJWaVIxQlZMMmRsZEVkUVZVUmxkbWxqWlNjN1hHNXBiWEJ2Y25RZ2UyUmxabUYxYkhSTlEweFBjSFJwYjI1emZTQm1jbTl0SUNjdUwyMWhjbU52ZGkxamJIVnpkR1Z5Snp0Y2JseHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1RVTk1SV1JwZEc5eUlHVjRkR1Z1WkhNZ1RYVnNkR2xEYjJ4MWJXNUVhVzFTWldSMVkzUnBiMjVGWkdsMGIzSWdlMXh1SUNBZ0lIQjFZbXhwWXlCemFXMXBiR0Z5YVhSNVZHaHlaWE5vYjJ4a1NXNXdkWFE2SUVSSExrbHVjSFYwUW1GelpUeHVkVzFpWlhJZ2ZDQnVkV3hzUGp0Y2JpQWdJQ0J3ZFdKc2FXTWdiV0Y0U1hSbGNtRjBhVzl1YzBsdWNIVjBPaUJFUnk1SmJuQjFkRUpoYzJVOGJuVnRZbVZ5SUh3Z2JuVnNiRDQ3WEc0Z0lDQWdjSFZpYkdsaklIVnpaVmRsWWtkUVZVbHVjSFYwT2lCRVJ5NUpibkIxZEVKaGMyVThZbTl2YkdWaGJpQjhJRzUxYkd3K08xeHVJQ0FnSUhCMVlteHBZeUJwYm1ac1lYUmxTVzV3ZFhRNklFUkhMa2x1Y0hWMFFtRnpaVHh1ZFcxaVpYSWdmQ0J1ZFd4c1BqdGNiaUFnSUNCamIyNXpkSEoxWTNSdmNpaGxaR2wwYjNKVFpYUjBhVzVuY3pvZ1JHbHRVbVZrZFdOMGFXOXVSV1JwZEc5eVQzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdJQ0J6ZFhCbGNpaGxaR2wwYjNKVFpYUjBhVzVuY3lrN1hHNGdJQ0FnSUNCMGFHbHpMbk5wYldsc1lYSnBkSGxVYUhKbGMyaHZiR1JKYm5CMWRDQTlJSFZwTG1sdWRFbHVjSFYwS0NkVGFXMXBiR0Z5YVhSNUlGUm9jbVZ6YUc5c1pDY3NJRGd3S1R0Y2JpQWdJQ0FnSUhSb2FYTXViV0Y0U1hSbGNtRjBhVzl1YzBsdWNIVjBJRDBnZFdrdWFXNTBTVzV3ZFhRb0owMWhlQ0JKZEdWeVlYUnBiMjV6Snl3Z05TazdYRzRnSUNBZ0lDQjBhR2x6TG5WelpWZGxZa2RRVlVsdWNIVjBJRDBnZFdrdVltOXZiRWx1Y0hWMEtDZFZjMlVnVjJWaVIxQlZKeXdnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdkR2hwY3k1cGJtWnNZWFJsU1c1d2RYUWdQU0IxYVM1bWJHOWhkRWx1Y0hWMEtDZEpibVpzWVhScGIyNGdSbUZqZEc5eUp5d2daR1ZtWVhWc2RFMURURTl3ZEdsdmJuTXVhVzVtYkdGMFpVWmhZM1J2Y2lrN1hHNGdJQ0FnSUNCblpYUkhVRlZCWkdGd2RHVnlSR1Z6WTNKcGNIUnBiMjRvS1M1MGFHVnVLQ2hrWlhOaktTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaGtaWE5qS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1MWMyVlhaV0pIVUZWSmJuQjFkQzV6WlhSVWIyOXNkR2x3S0dCVmMyVWdkMlZpUjFCVklHWnZjaUJOUTB3Z1kyRnNZM1ZzWVhScGIyNGdLQ1I3WkdWelkzMHBZQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTUxYzJWWFpXSkhVRlZKYm5CMWRDNTJZV3gxWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11ZFhObFYyVmlSMUJWU1c1d2RYUXVjMlYwVkc5dmJIUnBjQ2duVjJWaVIxQlZJR2x6SUc1dmRDQmhkbUZwYkdGaWJHVW5LVHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMblZ6WlZkbFlrZFFWVWx1Y0hWMExtVnVZV0pzWldRZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NIVmliR2xqSUdkbGRFVmthWFJ2Y2lncE9pQklWRTFNUld4bGJXVnVkQ0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmthWFlnUFNCMWFTNWthWFlvVzF4dUlDQWdJQ0FnSUNCMGFHbHpMblJoWW14bFNXNXdkWFF1Y205dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyeDFiVzV6U1c1d2RYUlNiMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJsQmhjbUZ0YzBWa2FYUnZjbEp2YjNRc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJKYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbk5wYldsc1lYSnBkSGxVYUhKbGMyaHZiR1JKYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbWx1Wm14aGRHVkpibkIxZEM1eWIyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtMWhlRWwwWlhKaGRHbHZibk5KYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMblZ6WlZkbFlrZFFWVWx1Y0hWMExuSnZiM1FzWEc0Z0lDQWdJQ0JkTENCN2MzUjViR1U2SUh0dGFXNVhhV1IwYURvZ0p6UXlNSEI0SjMwc0lHTnNZWE56WlhNNklDZDFhUzFtYjNKdEozMHBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlHUnBkanRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndkV0pzYVdNZ1oyVjBJSEJoY21GdGN5Z3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSFJoWW14bE9pQjBhR2x6TG5SaFlteGxTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCamIyeDFiVzV6T2lCMGFHbHpMbU52YkhWdGJuTkpibkIxZEM1MllXeDFaU0VzWEc0Z0lDQWdJQ0FnSUcxbGRHaHZaRTVoYldVNklIUm9hWE11YldWMGFHOWtTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpPaUIwYUdsekxtTnZiSFZ0Yms5d2RFVmthWFJ2Y25NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Y0hKbFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dUtTeGNiaUFnSUNBZ0lDQWdaR2x6ZEdGdVkyVk5aWFJ5YVdOek9pQjBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk11YldGd0tDaHBkQ2tnUFQ0Z2FYUXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwTG5aaGJIVmxJU2tzWEc0Z0lDQWdJQ0FnSUhkbGFXZG9kSE02SUhSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWN5NXRZWEFvS0dsMEtTQTlQaUJwZEM1M1pXbG5hSFFoS1N4Y2JpQWdJQ0FnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OQmNtZHpPaUIwYUdsekxtTnZiSFZ0Yms5d2RFVmthWFJ2Y25NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVUyVjBkR2x1WjNNcExGeHVJQ0FnSUNBZ0lDQmhaMmR5WldGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCMGFHbHpMbUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtTVzV3ZFhRdWRtRnNkV1VzWEc0Z0lDQWdJQ0FnSUhSb2NtVnphRzlzWkRvZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VkdoeVpYTm9iMnhrU1c1d2RYUXVkbUZzZFdVc1hHNGdJQ0FnSUNBZ0lHMWhlRWwwWlhKaGRHbHZibk02SUhSb2FYTXViV0Y0U1hSbGNtRjBhVzl1YzBsdWNIVjBMblpoYkhWbElEOC9JRFVzWEc0Z0lDQWdJQ0FnSUhWelpWZGxZa2RRVlRvZ2RHaHBjeTUxYzJWWFpXSkhVRlZKYm5CMWRDNTJZV3gxWlNBL1B5Qm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ2FXNW1iR0YwWlVaaFkzUnZjam9nZEdocGN5NXBibVpzWVhSbFNXNXdkWFF1ZG1Gc2RXVWdQejhnWkdWbVlYVnNkRTFEVEU5d2RHbHZibk11YVc1bWJHRjBaVVpoWTNSdmNpeGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVmVnh1SWwxOSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihhcmcsIGRlZmF1bHRWYWx1ZSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLl91cGRhdGVMZXZlbCA9IDA7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50VmVyc2lvbiA9IC0xO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXNWZXJzaW9uID0gLTE7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25lZE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZVZlcnNpb24gPSAtMTtcbiAgICAgICAgdGhpcy5TSFJJTktfVEhSRVNIT0xEID0gMHgxMDA7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJnO1xuICAgICAgICAgICAgY29uc3QgYnVmZiA9IEJpdEFycmF5Ll9jcmVhdGVCdWZmZXIobGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmYubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZbaV0gPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBidWZmO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gYXJnO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UmF3RGF0YSgpIHsgcmV0dXJuIHRoaXMuX2RhdGE7IH1cbiAgICBhc3N1cmVHb2V6KG51bSwgYXJnTmFtZSkge1xuICAgICAgICBpZiAobnVtIDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcmdOYW1lfSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm9gKTtcbiAgICB9XG4gICAgYXNzdXJlSW5SYW5nZSh2YWx1ZSwgbWluLCBtYXgsIGFyZ05hbWUpIHtcbiAgICAgICAgaWYgKCh2YWx1ZSA8IG1pbikgfHwgKHZhbHVlID4gbWF4KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJndW1lbnQgJHthcmdOYW1lfSAoJHt2YWx1ZX0pIG91dCBvZiByYW5nZSAoJHttaW59LCAke21heH0pYCk7XG4gICAgfVxuICAgIGNvcHkoc3JjLCBkc3QsIGNvdW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcbiAgICAgICAgICAgIGRzdFtpXSA9IHNyY1tpXTtcbiAgICB9XG4gICAgY29weUZyb20ob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSBvdGhlci5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMZW5ndGhzIGRpZmZlciAoJHt0aGlzLl9sZW5ndGh9ICE9ICR7b3RoZXIuX2xlbmd0aH0pYCk7XG4gICAgICAgIHRoaXMuY29weShvdGhlci5fZGF0YSwgdGhpcy5fZGF0YSwgdGhpcy5sZW5ndGhJbkludHMpO1xuICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XG4gICAgfVxuICAgIGdldCBidWZmZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICBzZXQgYnVmZmVyKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIH1cbiAgICBzZXQgdmVyc2lvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl92ZXJzaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIGluY3JlbWVudFZlcnNpb24obm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgfVxuICAgIGdldCBsZW5ndGhJbkludHMoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCh0aGlzLl9sZW5ndGggKyAweDFmKSAvIDB4MjApO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbmVkTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPT0gdGhpcy5fdmVyc2lvbmVkTmFtZVZlcnNpb24gPyB0aGlzLl92ZXJzaW9uZWROYW1lIDogJyc7XG4gICAgfVxuICAgIHNldCB2ZXJzaW9uZWROYW1lKG5hbWUpIHtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25lZE5hbWVWZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICB9XG4gICAgZ2V0IHNlbGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRMZW5ndGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIGJlID49IDAnKTtcbiAgICAgICAgaWYgKHZhbHVlID09IHRoaXMuX2xlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbkludHNOZWVkZWQgPSBNYXRoLmZsb29yKCh2YWx1ZSArIDB4MWYpIC8gMHgyMCk7XG4gICAgICAgIGlmICgobkludHNOZWVkZWQgPiB0aGlzLl9kYXRhLmxlbmd0aCkgfHwgKChuSW50c05lZWRlZCArIHRoaXMuU0hSSU5LX1RIUkVTSE9MRCkgPCB0aGlzLl9kYXRhLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgVWludDMyQXJyYXkobkludHNOZWVkZWQpO1xuICAgICAgICAgICAgdGhpcy5jb3B5KHRoaXMuX2RhdGEsIG5ld0RhdGEsIChuSW50c05lZWRlZCA+IHRoaXMuX2RhdGEubGVuZ3RoKSA/IHRoaXMuX2RhdGEubGVuZ3RoIDogbkludHNOZWVkZWQpO1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ld0RhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID4gdGhpcy5fbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICUgMHgyMCA+IDApXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVt0aGlzLmxlbmd0aEluSW50cyAtIDFdICY9ICgxIDw8ICgodGhpcy5fbGVuZ3RoICUgMHgyMCkgJiAweDFmKSkgLSAxO1xuICAgICAgICAgICAgdGhpcy5fZGF0YS5maWxsKDAsIHRoaXMubGVuZ3RoSW5JbnRzLCBuSW50c05lZWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgc3RhdGljIGZyb21BbmQoc2V0MSwgc2V0Mikge1xuICAgICAgICBpZiAoc2V0MS5fbGVuZ3RoICE9IHNldDIuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGVuZ3RocyBkaWZmZXIgKCR7c2V0MS5fbGVuZ3RofSAhPSAke3NldDIuX2xlbmd0aH0pYCk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkoc2V0MS5fbGVuZ3RoKTtcbiAgICAgICAgdGVtcC5fbGVuZ3RoID0gc2V0MS5fbGVuZ3RoO1xuICAgICAgICB0ZW1wLl9kYXRhID0gQml0QXJyYXkuX2NyZWF0ZUJ1ZmZlcih0ZW1wLl9sZW5ndGgpO1xuICAgICAgICB0ZW1wLl92ZXJzaW9uID0gMDtcbiAgICAgICAgY29uc3QgbGVuID0gc2V0MS5sZW5ndGhJbkludHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0ZW1wLl9kYXRhW2ldID0gc2V0MS5fZGF0YVtpXSAmIHNldDIuX2RhdGFbaV07XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICBzdGF0aWMgX2NyZWF0ZUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShNYXRoLmZsb29yKChsZW5ndGggKyAweDFmKSAvIDB4MjApKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21WYWx1ZXModmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkodmFsdWVzLmxlbmd0aCk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXAuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzW2ldKVxuICAgICAgICAgICAgICAgIHRlbXAuX2RhdGFbTWF0aC5mbG9vcihpIC8gMHgyMCldIHw9IDEgPDwgKChpICUgMHgyMCkgJiAweDFmKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgLy8vIENvbnN0cnVjdHMgYSBbQml0U2V0XSBvZiBsZW5ndGggW2NvdW50XSwgd2hlcmUgaWR4LXRoIGJpdCBpcyBkZXRlcm1pbmVkIGJ5IGEgY2FsbCB0byBbZmxhZ10gKGlkeCkuXG4gICAgc3RhdGljIGZyb21TZXEoY291bnQsIGZsYWcpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSlcbiAgICAgICAgICAgIHRlbXAuc2V0Qml0KGksIGZsYWcoaSkpO1xuICAgICAgICB0ZW1wLl92ZXJzaW9uID0gMDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIC8vLyBDb25zdHJ1Y3RzIGEgW0JpdFNldF0gZnJvbSBhIHN0cmluZyBbc10gY29udGFpbmluZyAnMCcgb3IgJzEnLlxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHMpIHtcbiAgICAgICAgcmV0dXJuIEJpdEFycmF5LmZyb21TZXEocy5sZW5ndGgsIChpKSA9PiBzLmNoYXJBdChpKSA9PSAnMScpO1xuICAgIH1cbiAgICAvLy8gQ29uc3RydWN0cyBhIFtCaXRTZXRdLCBiYXNlZCBvbiBsZW5ndGggW19sZW5ndGhdIGFuZCBieXRlIGFycmF5IFtfZGF0YV0uXG4gICAgc3RhdGljIGZyb21VaW50MzJBcnJheShfbGVuZ3RoLCBfZGF0YSkge1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KF9sZW5ndGgpO1xuICAgICAgICB0ZW1wLl9kYXRhID0gX2RhdGE7XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICAvLy8gRGVzZXJpYWxpemVzIGEgW0JpdFNldF0gZnJvbSBbYnl0ZXNdLlxuICAgIHN0YXRpYyBmcm9tQnl0ZXMoYnl0ZXMpIHtcbiAgICAgICAgY29uc3QgbGVuID0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KGxlbiAqIDgpO1xuICAgICAgICB0ZW1wLl9kYXRhID0gbmV3IFVpbnQzMkFycmF5KE1hdGguZmxvb3IoKGxlbiArIDMpIC8gNCkpO1xuICAgICAgICB0ZW1wLl9sZW5ndGggPSBsZW4gKiA4O1xuICAgICAgICBsZXQgbnVtMSA9IDA7XG4gICAgICAgIGxldCBudW0yID0gMDtcbiAgICAgICAgd2hpbGUgKChsZW4gLSBudW0yKSA+PSA0KSB7XG4gICAgICAgICAgICB0ZW1wLl9kYXRhW251bTErK10gPSAoKChieXRlc1tudW0yXSAmIDB4ZmYpIHwgKChieXRlc1tudW0yICsgMV0gJiAweGZmKSA8PCA4KSkgfFxuICAgICAgICAgICAgICAgICgoYnl0ZXNbbnVtMiArIDJdICYgMHhmZikgPDwgMHgxMCkpIHwgKChieXRlc1tudW0yICsgM10gJiAweGZmKSA8PCAweDE4KTtcbiAgICAgICAgICAgIG51bTIgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAzKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSA9IChieXRlc1tudW0yICsgMl0gJiAweGZmKSA8PCAweDEwO1xuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAyKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSB8PSAoYnl0ZXNbbnVtMiArIDFdICYgMHhmZikgPDwgODtcbiAgICAgICAgaWYgKGxlbiAtIG51bTIgPT0gMSlcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMV0gfD0gYnl0ZXNbbnVtMl0gJiAweGZmO1xuICAgICAgICB0ZW1wLl92ZXJzaW9uID0gMDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGVuZ3RofSBiaXRzLCAke3RoaXMuY291bnRCaXRzKHRydWUpfSBzZXRgO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgZGVlcCBjb21wYXJpc29uIG9mIHR3byBiaXRzZXRzLlxuICAgIGVxdWFscyhvdGhlcikge1xuICAgICAgICBpZiAodGhpcyA9PSBvdGhlcilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAob3RoZXIgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSBvdGhlci5fbGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRhW2ldICE9IG90aGVyLl9kYXRhW2ldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9ICh0aGlzLl9kYXRhLmxlbmd0aCAtIDEpICogODsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaSkgIT0gb3RoZXIuZ2V0Qml0KGkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqIENsb25lcyBhIGJpdHNldC4gKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgYml0QXJyYXkgPSBuZXcgQml0QXJyYXkoMCwgZmFsc2UpO1xuICAgICAgICBiaXRBcnJheS5fZGF0YSA9IFVpbnQzMkFycmF5LmZyb20odGhpcy5fZGF0YSk7IC8vIGVmZmVjdGl2ZSBsZW5ndGg6IChsZW5ndGhJbkludHMpXG4gICAgICAgIGJpdEFycmF5Ll9sZW5ndGggPSB0aGlzLl9sZW5ndGg7XG4gICAgICAgIGJpdEFycmF5Ll92ZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGJpdEFycmF5O1xuICAgIH1cbiAgICAvKiogSW5pdGlhbGl6ZXMgYSBiaXRzZXQuICovXG4gICAgaW5pdChmbGFnLCBub3RpZnkpIHtcbiAgICAgICAgdGhpcy5zZXRBbGwoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZsYWcoaSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoKGkgJSAweDIwKSAmIDB4MWYpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIEludmVydHMgYSBiaXRzZXQuXG4gICAgaW52ZXJ0KG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSBePSAtMTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBTZXRzIGFsbCBiaXRzIHRvIFt2YWx1ZV0sIG9wdGlvbmFsbHkgc3VwcHJlc3Npbmcgbm90aWZpY2F0aW9ucy5cbiAgICBzZXRBbGwodmFsdWUsIG5vdGlmeSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gdmFsdWUgPyAtMSA6IDA7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSAvL3RvZG86IG9wdGltaXplXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gZmxhZ3M7XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICAvLy8gU2V0cyBiaXRzIGF0IFtpbmRleGVzXSBwb3NpdGlvbiB0byBbdmFsdWVdLlxuICAgIC8vLyBDbGVhcnMgdGhlIGJpdHNldCBpZiBbY2xlYXJdIGZsYWcgaXMgdHJ1ZS5cbiAgICAvLy8gQ2hhbmdlIG5vdGlmaWNhdGlvbiBpcyByYWlzZWQgd2hlbiBbbm90aWZ5XSBpcyB0cnVlLlxuICAgIHNldEluZGV4ZXMoaW5kZXhlcywgdmFsdWUgPSB0cnVlLCBjbGVhciA9IHRydWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKGNsZWFyKVxuICAgICAgICAgICAgdGhpcy5zZXRBbGwoIXZhbHVlLCBmYWxzZSk7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBpbmRleGVzKVxuICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIHZhbHVlKTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIGV2ZXJ5SW5kZXgoaW5kZXhlcywgdmFsdWUgPSB0cnVlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Qml0KGluZGV4KSAhPSB2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFueUluZGV4KGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpbmRleCkgPT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXRXaGVyZShjaGVjaywgdmFsdWUgPSB0cnVlLCBjbGVhciA9IHRydWUsIG5vdGlmeSA9IHRydWUsIGFsbG93Q2xlYXIgPSB0cnVlKSB7XG4gICAgICAgIGlmIChjbGVhciAmJiBhbGxvd0NsZWFyKVxuICAgICAgICAgICAgdGhpcy5zZXRBbGwoIXZhbHVlLCBmYWxzZSk7XG4gICAgICAgIGlmIChhbGxvd0NsZWFyKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrKGkpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZhc3QoaSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZhc3QoaSwgY2hlY2soaSkgPyB2YWx1ZSA6ICF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIGdldFJhbmdlKGZyb20sIHRvKSB7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShmcm9tLCAwLCB0aGlzLl9sZW5ndGggLSAxLCAnZnJvbScpO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UodG8sIDAsIHRoaXMuX2xlbmd0aCwgJ3RvJyk7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gZnJvbTsgaSA8IHRvOyArK2kpXG4gICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldEJpdChpKSk7XG4gICAgICAgIHJldHVybiBCaXRBcnJheS5mcm9tVmFsdWVzKGFycik7XG4gICAgfVxuICAgIGdldFJhbmdlQXNMaXN0KGZyb20sIHRvKSB7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShmcm9tLCAwLCB0aGlzLl9sZW5ndGggLSAxLCAnZnJvbScpO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UodG8sIDAsIHRoaXMuX2xlbmd0aCwgJ3RvJyk7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gZnJvbTsgaSA8IHRvOyArK2kpXG4gICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldEJpdChpKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIHNldFJhbmdlKGZyb20sIHRvLCB2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UoZnJvbSwgMCwgdGhpcy5fbGVuZ3RoIC0gMSwgJ2Zyb20nKTtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKHRvLCAwLCB0aGlzLl9sZW5ndGggLSAxLCAndG8nKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihmcm9tLCB0byk7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KGZyb20sIHRvKTtcbiAgICAgICAgLy90b2RvOiBvcHRpbWl6ZVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRydWUoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGYWxzZShpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBTZXRzIG4gcmFuZG9tbHkgY2hvc2VuIGJpdHMgdG8gdmFsdWUsIHJlbWFpbmluZyBiaXRzIHRvICF2YWx1ZS5cbiAgICBzZXRSYW5kb20obiwgdmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiB0aGlzLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ24gbXVzdCBiZSA+PSAwICYmIDw9IENvdW50Jyk7XG4gICAgICAgIGlmIChuID4gdGhpcy5fbGVuZ3RoIC8gMilcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZG9tKHRoaXMuX2xlbmd0aCAtIG4sICF2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbjspIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLl9sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Qml0KGkpID09IHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIHZhbHVlKTtcbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgLy8vIE1vZGlmaWVzIGN1cnJlbnQgYml0c2V0IGJ5IHBlcmZvcm1pbmcgdGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBhZ2FpbnN0IHRoZVxuICAgIC8vLyBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIGFuZCh2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IHZhbHVlLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGxlbmd0aHMgZGlmZmVyLicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gJj0gdmFsdWUuX2RhdGFbaV07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIHRoZSBiaXR3aXNlIEFORCBOT1Qgb3BlcmF0aW9uIG9uIHRoZSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICAvLy8gYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBhbmROb3QodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgIGZvciAobGV0IG51bTIgPSAwOyBudW0yIDwgbGVuOyBudW0yKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW251bTJdICY9IH52YWx1ZS5fZGF0YVtudW0yXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgdGhlIGJpdHdpc2UgTk9UIEFORCBvcGVyYXRpb24gb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIC8vLyBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIG5vdEFuZCh2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IHZhbHVlLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGxlbmd0aHMgZGlmZmVyLicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSAofnRoaXMuX2RhdGFbaV0pICYgdmFsdWUuX2RhdGFbaV07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIEludmVydHMgYWxsIGJpdCB2YWx1ZXMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgbm90KG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gfnRoaXMuX2RhdGFbaV07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIHRoZSBiaXR3aXNlIE9SIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgb3IodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldIHw9IHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBleGNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIHRoZSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICAvLy8gYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICB4b3IodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldIF49IHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBJbnNlcnRzIG4gMC1iaXRzIGF0IHBvc2l0aW9uIHBvcywgcmVzaXppbmcgc2VsZiBhbmQgc2hpZnRpbmcgYml0cyBhcHByb3ByaWF0ZWx5LlxuICAgIGluc2VydEF0KHBvcywgbiwgZmxhZyA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShwb3MsIDAsIHRoaXMuX2xlbmd0aCwgJ3BvcycpO1xuICAgICAgICBpZiAobiA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvL1RPRE86IG9wdGltaXplXG4gICAgICAgIC8vdGhlIG1vc3QgcHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBvcHRpbWl6ZSBpdCBsYXRlciFcbiAgICAgICAgLy8gYmVnaW5VcGRhdGUoKTtcbiAgICAgICAgY29uc3Qgb2xkbGVuZ3RoID0gdGhpcy5fbGVuZ3RoO1xuICAgICAgICB0aGlzLnNldExlbmd0aCh0aGlzLl9sZW5ndGggKyBuKTtcbiAgICAgICAgLy9pZiAoIWNvbnRhaW5zKCFmbGFnKSkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgIGZvciAobGV0IGkgPSBvbGRsZW5ndGggLSAxOyBpID49IHBvczsgaS0tKVxuICAgICAgICAgICAgdGhpcy5zZXRCaXQoaSArIG4sIHRoaXMuZ2V0Qml0KGkpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBvczsgaSA8IHBvcyArIG47IGkrKylcbiAgICAgICAgICAgIHRoaXMuc2V0Qml0KGksIGZsYWcpO1xuICAgICAgICAvLyBlbmRVcGRhdGUoKTtcbiAgICB9XG4gICAgLy8vIERlbGV0ZXMgbiBiaXRzIGJlZ2lubmluZyBhdCBwb3NpdGlvbiBwb3MsIHJlc2l6aW5nIHNlbGYgYW5kIHNoaWZ0aW5nIHJlbWFpbmluZ1xuICAgIC8vLyBiaXRzIGFwcHJvcHJpYXRlbHkuXG4gICAgcmVtb3ZlQXQocG9zLCBuID0gMSkge1xuICAgICAgICAvLyB0aGUgbW9zdCBwcmltaXRpdmUgaW1wbGVtZW50YXRpb24sIG9wdGltaXplIGl0IGxhdGVyIVxuICAgICAgICBpZiAobiA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ24gY2Fubm90IGJlIG5lZ2F0aXZlJyk7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShwb3MsIDAsIHRoaXMuX2xlbmd0aCAtIG4sICdwb3MnKTtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbnModHJ1ZSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBwb3M7IGkgPCB0aGlzLl9sZW5ndGggLSBuOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCaXQoaSwgdGhpcy5nZXRCaXQoaSArIG4pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldExlbmd0aCh0aGlzLl9sZW5ndGggLSBuKTtcbiAgICB9XG4gICAgcmVtb3ZlQnlNYXNrKG1hc2ssIGZsYWcgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gbWFzay5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCAhPSBtYXNrLmxlbmd0aCcpO1xuICAgICAgICBpZiAobWFzayA9PSB0aGlzKSB7IC8vIG5vIG5lZWQgdG8gaXRlcmF0ZVxuICAgICAgICAgICAgdGhpcy5zZXRMZW5ndGgobWFzay5jb3VudEJpdHMoIWZsYWcpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCFmbGFnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkc3RJZHggPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgc3JjSWR4ID0gLTE7IChzcmNJZHggPSBtYXNrLmZpbmROZXh0KHNyY0lkeCwgIWZsYWcpKSAhPSAtMTspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGRzdElkeCsrLCB0aGlzLmdldEJpdChzcmNJZHgpKTtcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aCA9IGRzdElkeDtcbiAgICAgICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFNpbWlsYXIgdG8gdGhlIFtdIG9wZXJhdG9yLlxuICAgIGdldEJpdChwb3MpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9kYXRhW01hdGguZmxvb3IocG9zIC8gMHgyMCldICYgKDEgPDwgKHBvcyAmIDB4MWYpKSkgIT0gMDtcbiAgICB9XG4gICAgLy8vIFNpbWlsYXIgdG8gdGhlIFtdIG9wZXJhdG9yLlxuICAgIHNldEJpdChwb3MsIGJpdCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNldEZhc3QocG9zLCBiaXQpO1xuICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgfVxuICAgIC8vLyBTZXRzIFtpXS10aCBiaXQgdG8gW3ZhbHVlXSwgZG9lcyBub3QgY2hlY2sgYm91bmRzLCBkb2VzIG5vdCBpbmNyZW1lbnQgdmVyc2lvblxuICAgIHNldEZhc3QoaSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoaSAmIDB4MWYpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IoaSAvIDB4MjApXSAmPSB+KDEgPDwgKGkgJiAweDFmKSk7XG4gICAgfVxuICAgIHNldFRydWUocG9zKSB7XG4gICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihwb3MgLyAweDIwKV0gfD0gMSA8PCAocG9zICYgMHgxZik7XG4gICAgfVxuICAgIHNldEZhbHNlKHBvcykge1xuICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IocG9zIC8gMHgyMCldICY9IH4oMSA8PCAocG9zICYgMHgxZikpO1xuICAgIH1cbiAgICB0cnVlQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyh0cnVlKTtcbiAgICB9XG4gICAgZmFsc2VDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKGZhbHNlKTtcbiAgICB9XG4gICAgLy8vIENvdW50cyBiaXRzIG9mIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gICAgY291bnRCaXRzKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRDb3VudFZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IHRoaXMuX2RhdGFbaV07IGsgIT0gMDsgayA+Pj49IDgpIHsgLy90b2RvOiBjYXN0IGRhdGFbaV0gdG8gdWludFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50ICs9IEJpdEFycmF5Ll9vbkJpdENvdW50W2sgJiAweGZmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgbGFzdCBpbnQuXG4gICAgICAgICAgICBsZXQgayA9IHRoaXMuX2RhdGFbaV07XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdCaXRzID0gdGhpcy5fbGVuZ3RoICYgMHgxZjtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdCaXRzICE9IDApIC8qIGlmIHJlbWFpbmluZ0JpdHMgPT0gMCwgdGhlIGxhc3QgaW50IGlzIGZ1bGx5IHVzZWQgYW5kIEFMTCBiaXRzIHNob3VsZCBiZSBsZWZ0IGFzIGlzICovXG4gICAgICAgICAgICAgICAgayAmPSB+KCg0Mjk0OTY3Mjk1KSA8PCByZW1haW5pbmdCaXRzKTtcbiAgICAgICAgICAgIGZvciAoOyBrICE9IDA7IGsgPj4+PSA4KVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudFZlcnNpb24gPSB0aGlzLl92ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodmFsdWUgPyB0aGlzLl9zZWxlY3RlZENvdW50IDogdGhpcy5fbGVuZ3RoIC0gdGhpcy5fc2VsZWN0ZWRDb3VudCk7XG4gICAgfVxuICAgIC8vLyBSZXR1cm5zIGEgbnVtYmVyIG9mIHNldCBiaXRzIHdoZXJlIGFsc28gW2NoZWNrXSBpcyB0cnVlXG4gICAgY291bnRXaGVyZShjaGVjaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgaWYgKHRoaXMudHJ1ZUNvdW50KCkgPT0gdGhpcy5fbGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjaGVjayhpKSA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IC0xOyAoaSA9IHRoaXMuZmluZE5leHQoaSwgdHJ1ZSkpICE9IC0xOylcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2hlY2soaSkgPyAxIDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgYml0IFwiYW5kXCIgYW5kIGNvdW50cyBiaXRzIG9mIHRoZSBzcGVjaWZpZWQgdmFsdWUsIHdpdGhvdXQgYml0c2V0IG1vZGlmaWNhdGlvbi5cbiAgICBhbmRXaXRoQ291bnRCaXRzKHNlY29uZCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gdGhpcy5fZGF0YVtpXSAmIHNlY29uZC5fZGF0YVtpXTsgayAhPSAwOyBrID4+Pj0gOClcbiAgICAgICAgICAgICAgICBjb3VudCArPSBCaXRBcnJheS5fb25CaXRDb3VudFtrICYgMHhmZl07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIGxhc3QgaW50LlxuICAgICAgICBsZXQgayA9IHRoaXMuX2RhdGFbaV0gJiBzZWNvbmQuX2RhdGFbaV07XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0JpdHMgPSB0aGlzLl9sZW5ndGggJiAweDFmO1xuICAgICAgICBpZiAocmVtYWluaW5nQml0cyAhPSAwKVxuICAgICAgICAgICAgayAmPSB+KCg0Mjk0OTY3Mjk1KSA8PCByZW1haW5pbmdCaXRzKTtcbiAgICAgICAgZm9yICg7IGsgIT0gMDsgayA+Pj49IDgpXG4gICAgICAgICAgICBjb3VudCArPSBCaXRBcnJheS5fb25CaXRDb3VudFtrICYgMHhmZl07XG4gICAgICAgIHJldHVybiAodmFsdWUgPyBjb3VudCA6IHRoaXMuX2xlbmd0aCAtIGNvdW50KTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuc2V0TGVuZ3RoKDApO1xuICAgIH1cbiAgICBjb250YWlucyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kTmV4dCgtMSwgdmFsdWUpID49IDA7XG4gICAgfVxuICAgIGdldCBhbGxUcnVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHModHJ1ZSkgPT0gdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYWxsRmFsc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyhmYWxzZSkgPT0gdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYW55VHJ1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKHRydWUpID4gMDtcbiAgICB9XG4gICAgZ2V0IGFueUZhbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHMoZmFsc2UpID4gMDtcbiAgICB9XG4gICAgLy8vIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBuZXh0IGJpdCBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLCBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uXG4gICAgLy8vIFJldHVybnMgLTEsIGlmIHRoZXJlIGFyZSBubyBzdWNoIGJpdHMuXG4gICAgZmluZE5leHQoaW5kZXgsIHZhbHVlID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UoaW5kZXgsIC0xLCB0aGlzLl9sZW5ndGgsICdpbmRleCcpO1xuICAgICAgICBpZiAoaW5kZXggPj0gdGhpcy5fbGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyAwIDogaW5kZXggKyAxOyAvLyBza2lwIHN0YXJ0XG4gICAgICAgIGxldCB1bnVzZWRCaXRzID0gaW5kZXggJiAweDFmO1xuICAgICAgICBjb25zdCBudW1JbnRzID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgIGZvciAobGV0IGkgPSBNYXRoLmZsb29yKGluZGV4IC8gMzIpOyBpIDwgbnVtSW50czsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgayA9ICh2YWx1ZSA/IHRoaXMuX2RhdGFbaV0gOiB+dGhpcy5fZGF0YVtpXSk7IC8vIHVpbnQgY2FzdFxuICAgICAgICAgICAgaWYgKHVudXNlZEJpdHMgIT0gMCkge1xuICAgICAgICAgICAgICAgIGsgJj0gKCgweGZmZmZmZmZmIDw8IHVudXNlZEJpdHMpICYgMHhmZmZmZmZmZik7XG4gICAgICAgICAgICAgICAgdW51c2VkQml0cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghdmFsdWUgJiYgayA9PSAtNDI5NDk2NzI5NikgLyogbG9va2luZyBmb3IgZmFsc2UsIGFsbCBiaXRzIGFyZSBzZXQgKi8ge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGsgIT0gMDsgaiArPSA4LCBrID4+Pj0gOCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBCaXRBcnJheS5fZmlyc3RPbkJpdFtrICYgMHhmZl07XG4gICAgICAgICAgICAgICAgaWYgKHAgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHAgKyAoaSAqIDMyKSArIGo7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSB0aGlzLl9sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICAvLy8gRmluZHMgcHJldmlvdXMgYml0IG9mIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGJpdHNldC5cbiAgICBmaW5kUHJldihpbmRleCwgdmFsdWUgPSB0cnVlKSB7XG4gICAgICAgIGlmIChpbmRleCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UoaW5kZXgsIC0xLCB0aGlzLl9sZW5ndGgsICdpbmRleCcpO1xuICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2xlbmd0aCAtIDEgOiBpbmRleCAtIDE7IC8vIHNraXAgc3RhcnRcbiAgICAgICAgY29uc3QgbGFzdEludElkeCA9IE1hdGguZmxvb3IoaW5kZXggLyAweDIwKTtcbiAgICAgICAgbGV0IHJlbWFpbmluZ0JpdHMgPSAoaW5kZXggKyAxKSAmIDB4MWY7XG4gICAgICAgIGZvciAobGV0IGkgPSBsYXN0SW50SWR4OyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGsgPSAodmFsdWUgPyB0aGlzLl9kYXRhW2ldIDogfnRoaXMuX2RhdGFbaV0pOyAvLyBjYXN0XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nQml0cyAhPSAwKSB7XG4gICAgICAgICAgICAgICAgayAmPSB+KCg0Mjk0OTY3Mjk1KSA8PCByZW1haW5pbmdCaXRzKTtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdCaXRzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAyNDsgayAhPSAwOyBqIC09IDgsIGsgPDw9IDgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gQml0QXJyYXkuX2xhc3RPbkJpdFtrID4+PiAweDE4XTtcbiAgICAgICAgICAgICAgICBpZiAocCA+PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcCArIChpICogMzIpICsgajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufVxuQml0QXJyYXkuX29uQml0Q291bnQgPSBJbnQ4QXJyYXkuZnJvbShbXG4gICAgMCwgMSwgMSwgMiwgMSwgMiwgMiwgMywgMSwgMiwgMiwgMywgMiwgMywgMywgNCxcbiAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywgNSwgNiwgNiwgNywgNiwgNywgNywgOFxuXSk7XG5CaXRBcnJheS5fZmlyc3RPbkJpdCA9IEludDhBcnJheS5mcm9tKFtcbiAgICAtMSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDUsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA2LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDcsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNiwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDUsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMFxuXSk7XG5CaXRBcnJheS5fbGFzdE9uQml0ID0gSW50OEFycmF5LmZyb20oW1xuICAgIC0xLCAwLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLFxuICAgIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3XG5dKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVltbDBMV0Z5Y21GNUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWW1sMExXRnljbUY1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTFCUVUwc1EwRkJReXhQUVVGUExFOUJRVThzVVVGQlVUdEpRVzlGTTBJc1dVRkJXU3hIUVVGNVFpeEZRVUZGTEdWQlFXbERMRXRCUVVzN1VVRmFja1VzV1VGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTmFMR0ZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFlpeHBRa0ZCV1N4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOcVFpeHRRa0ZCWXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOdVFpd3dRa0ZCY1VJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU16UWl3MFFrRkJkVUlzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTNRaXh0UWtGQll5eEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTndRaXd3UWtGQmNVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVF5eHhRa0ZCWjBJc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGTGRrSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1MwRkJTeXhSUVVGUkxFVkJRVVU3V1VGRE0wSXNUVUZCVFN4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRE8xbEJRMjVDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdXVUZETlVNc1NVRkJTU3haUVVGWkxFVkJRVVU3WjBKQlEyaENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZEYkVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTJoQ08xbEJRMFFzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNN1dVRkRiRUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN1UwRkRka0k3WVVGQlRTeEpRVUZKTEVkQlFVY3NXVUZCV1N4WFFVRlhMRVZCUVVVN1dVRkRja01zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRnJRaXhEUVVGRE8xbEJRMmhETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1dVRkJjMElzUTBGQlF6dFRRVU4yUXp0aFFVRk5PMWxCUTB3c1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8xTkJRM2hETzBsQlEwZ3NRMEZCUXp0SlFVZEVMRlZCUVZVc1MwRkJTeXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlc1RExGVkJRVlVzUTBGQlF5eEhRVUZYTEVWQlFVVXNUMEZCWlR0UlFVTnlReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlFVVXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhIUVVGSExFOUJRVThzT0VKQlFUaENMRU5CUVVNc1EwRkJRenRKUVVONlJTeERRVUZETzBsQlJVUXNZVUZCWVN4RFFVRkRMRXRCUVdFc1JVRkJSU3hIUVVGWExFVkJRVVVzUjBGQlZ5eEZRVUZGTEU5QlFXVTdVVUZEY0VVc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRGFFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxFOUJRVThzUzBGQlN5eExRVUZMTEcxQ1FVRnRRaXhIUVVGSExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTndSaXhEUVVGRE8wbEJSVVFzU1VGQlNTeERRVUZETEVkQlFXZENMRVZCUVVVc1IwRkJaMElzUlVGQlJTeExRVUZoTzFGQlEzQkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRelZDTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEY0VJc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eExRVUZsTzFGQlEzUkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHp0WlFVTXZRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEcxQ1FVRnRRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eFBRVUZQTEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRekZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dFJRVU4wUkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03U1VGRGJFSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1RVRkJUVHRSUVVOU0xFOUJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0SlFVTjBRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeE5RVUZOTzFGQlExSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8wbEJRM0JDTEVOQlFVTTdTVUZGUkN4SlFVRkpMRTFCUVUwc1EwRkJReXhKUVVGcFFqdFJRVU14UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5zUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03U1VGRGJFSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1QwRkJUenRSUVVOVUxFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXp0SlFVTjJRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeFBRVUZQTEVOQlFVTXNTMEZCWVR0UlFVTjJRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXp0SlFVTjRRaXhEUVVGRE8wbEJSVVFzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWs3VVVGRE5VSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN4SlFVRkpMRmxCUVZrN1VVRkRaQ3hQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTJ4RUxFTkJRVU03U1VGRlJDeEpRVUZKTEdGQlFXRTdVVUZEWml4UFFVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFbEJRVWtzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRGFFWXNRMEZCUXp0SlFVVkVMRWxCUVVrc1lVRkJZU3hEUVVGRExFbEJRVms3VVVGRE5VSXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRE0wSXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNN1NVRkROME1zUTBGQlF6dEpRVVZFTEVsQlFVa3NTVUZCU1R0UlFVTk9MRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEZOQlFWTXNRMEZCUXl4TFFVRmhPMUZCUTNKQ0xFbEJRVWtzUzBGQlN5eEhRVUZITEVOQlFVTTdXVUZEV0N4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNN1VVRkZjRU1zU1VGQlNTeExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4N1dVRkJSU3hQUVVGUE8xRkJRMnhETEUxQlFVMHNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGRFUXNTVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSVHRaUVVOd1J5eE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFpRVU53Unl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFOUJRVThzUTBGQlF6dFRRVU4wUWp0UlFVVkVMRWxCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVTdXVUZEZUVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkRPMmRDUVVONlFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZGYWtZc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzVjBGQlZ5eERRVUZETEVOQlFVTTdVMEZEY0VRN1VVRkRSQ3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTnlRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCWXl4RlFVRkZMRWxCUVdNN1VVRkRNME1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUE8xbEJRemxDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2JVSkJRVzFDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRTlCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZGZWtVc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM2hETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU0xUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMnhFTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSV3hDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03VVVGRE9VSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRNVUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGYUVRc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGak8xRkJRM3BETEU5QlFVOHNTVUZCU1N4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZEVMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFYTkNPMUZCUTNSRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU42UXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVZzUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU55UXl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlExZ3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEyaEZPMUZCUTBRc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNjMGRCUVhOSE8wbEJRM1JITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJZU3hGUVVGRkxFbEJRV003VVVGRE1VTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYWtNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU03V1VGRE5VSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZNVUlzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRiRUlzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc2EwVkJRV3RGTzBsQlEyeEZMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlV6dFJRVU42UWl4UFFVRlBMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVZNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU4yUlN4RFFVRkRPMGxCUlVRc05FVkJRVFJGTzBsQlF6VkZMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRVU1zVDBGQlpTeEZRVUZGTEV0QlFXdENPMUZCUTNoRUxFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMjVDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxIbERRVUY1UXp0SlFVTjZReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFXbENPMUZCUTJoRExFMUJRVTBzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRla0lzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4UlFVRlJMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyNURMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM2hFTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFlpeEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZZaXhQUVVGUExFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVONFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGRGJrSXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZUVRc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlEyNURMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTTdXVUZGZGtNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFRRVU5ZTzFGQlJVUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU03V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRPMUZCUlhSRUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVZ3UkN4SlFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF6dFpRVU5xUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRmVrTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGJFSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzVVVGQlVUdFJRVU5PTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhWUVVGVkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNM1JDeERRVUZETzBsQlJVUXNORU5CUVRSRE8wbEJRelZETEUxQlFVMHNRMEZCUXl4TFFVRmxPMUZCUTNCQ0xFbEJRVWtzU1VGQlNTeEpRVUZKTEV0QlFVczdXVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJRenRSUVVNdlFpeEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUVVVc1QwRkJUeXhMUVVGTExFTkJRVU03VVVGRGFFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFdEJRVXNzUTBGQlF5eFBRVUZQTzFsQlFVVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1VVRkRhRVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRU5CUVVNN1dVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlF6dFJRVVZ1UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTTFReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUVVVc1QwRkJUeXhMUVVGTExFTkJRVU03VVVGRmNFUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU12UkN4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEyNURMRTlCUVU4c1MwRkJTeXhEUVVGRE8xTkJRMmhDTzFGQlEwUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzZFVKQlFYVkNPMGxCUTNaQ0xFdEJRVXM3VVVGRFNDeE5RVUZOTEZGQlFWRXNSMEZCUnl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEZUVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEcxRFFVRnRRenRSUVVOc1JpeFJRVUZSTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03VVVGRGFFTXNVVUZCVVN4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlEyeERMRTlCUVU4c1VVRkJVU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN3MFFrRkJORUk3U1VGRE5VSXNTVUZCU1N4RFFVRkRMRWxCUVdNc1JVRkJSU3hOUVVGbE8xRkJRMnhETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJURkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzSkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEVkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEYUVVN1VVRkZSQ3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE9VSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzY1VKQlFYRkNPMGxCUTNKQ0xFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTnNRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTNoRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmRFSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDeHRSVUZCYlVVN1NVRkRia1VzVFVGQlRTeERRVUZETEV0QlFXTXNSVUZCUlN4TlFVRk5MRWRCUVVjc1MwRkJTenRSUVVOdVF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkROMElzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVVNVFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMR2RDUVVGblFqdFpRVU0xUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVVjRRaXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGFFTXNRMEZCUXp0SlFVVkVMQ3REUVVFclF6dEpRVU12UXl3NFEwRkJPRU03U1VGRE9VTXNkMFJCUVhkRU8wbEJRM2hFTEZWQlFWVXNRMEZCUXl4UFFVRnpRaXhGUVVGRkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVWQlFVVXNTMEZCU3l4SFFVRkhMRWxCUVVrc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU14UlN4SlFVRkpMRXRCUVVzN1dVRkRVQ3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVGRDTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1QwRkJUenRaUVVOeVFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVVY2UWl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFTEZWQlFWVXNRMEZCUXl4UFFVRnpRaXhGUVVGRkxFdEJRVXNzUjBGQlJ5eEpRVUZKTzFGQlF6ZERMRXRCUVVzc1RVRkJUU3hMUVVGTExFbEJRVWtzVDBGQlR5eEZRVUZGTzFsQlF6TkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4TFFVRkxPMmRDUVVNM1FpeFBRVUZQTEV0QlFVc3NRMEZCUXp0VFFVTm9RanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMRkZCUVZFc1EwRkJReXhQUVVGelFpeEZRVUZGTEV0QlFVc3NSMEZCUnl4SlFVRkpPMUZCUXpORExFdEJRVXNzVFVGQlRTeExRVUZMTEVsQlFVa3NUMEZCVHl4RlFVRkZPMWxCUXpOQ0xFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hMUVVGTE8yZENRVU0zUWl4UFFVRlBMRWxCUVVrc1EwRkJRenRUUVVObU8xRkJRMFFzVDBGQlR5eExRVUZMTEVOQlFVTTdTVUZEWml4RFFVRkRPMGxCUlVRc1VVRkJVU3hEUVVGRExFdEJRV1VzUlVGQlJTeExRVUZMTEVkQlFVY3NTVUZCU1N4RlFVRkZMRXRCUVVzc1IwRkJSeXhKUVVGSkxFVkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVa3NSVUZCUlN4VlFVRlZMRWRCUVVjc1NVRkJTVHRSUVVOd1JpeEpRVUZKTEV0QlFVc3NTVUZCU1N4VlFVRlZPMWxCUTNKQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRk4wSXNTVUZCU1N4VlFVRlZMRVZCUVVVN1dVRkRaQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0blFrRkRja01zU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOV0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8yRkJRekZDTzFOQlEwWTdZVUZCVFR0WlFVTk1MRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEYmtNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VTBGRE9VTTdVVUZGUkN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4SlFVRlpMRVZCUVVVc1JVRkJWVHRSUVVNdlFpeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGRFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRE9VTXNUVUZCVFN4SFFVRkhMRWRCUVcxQ0xFVkJRVVVzUTBGQlF6dFJRVU12UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJRenRaUVVNMVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpRaXhQUVVGUExGRkJRVkVzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRU1zUTBGQlF6dEpRVVZFTEdOQlFXTXNRMEZCUXl4SlFVRlpMRVZCUVVVc1JVRkJWVHRSUVVOeVF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGRFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRE9VTXNUVUZCVFN4SFFVRkhMRWRCUVdNc1JVRkJSU3hEUVVGRE8xRkJRekZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6TkNMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzUTBGQlF6dEpRVWRFTEZGQlFWRXNRMEZCUXl4SlFVRlpMRVZCUVVVc1JVRkJWU3hGUVVGRkxFdEJRV01zUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTTVSQ3hKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJSV3hFTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJTOUNMR2RDUVVGblFqdFJRVU5vUWl4SlFVRkpMRXRCUVVzc1JVRkJSVHRaUVVOVUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NTMEZCU3l4RlFVRkZMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTI1Q08yRkJRVTA3V1VGRFRDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlR0blFrRkRMMElzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOd1FqdFJRVVZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTTVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4dFJVRkJiVVU3U1VGRGJrVXNVMEZCVXl4RFFVRkRMRU5CUVZNc1JVRkJSU3hMUVVGakxFVkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVazdVVUZEYUVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUenRaUVVNelFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZGYUVRc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRPMWxCUTNSQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVVXpReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZjRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ6dFpRVU4wUWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEYmtRc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRXRCUVVzN1owSkJRVVVzVTBGQlV6dFpRVU4wUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTjJRaXhEUVVGRExFVkJRVVVzUTBGQlF6dFRRVU5NTzFGQlJVUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDd3JSVUZCSzBVN1NVRkRMMFVzYlVSQlFXMUVPMGxCUTI1RUxFZEJRVWNzUTBGQlF5eExRVUZsTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkRhRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUE8xbEJReTlDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0UlFVVXpReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOdVJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZiRU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6bENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEdkR1FVRm5SanRKUVVOb1Jpd3JSRUZCSzBRN1NVRkRMMFFzVFVGQlRTeERRVUZETEV0QlFXVXNSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVOdVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVTg3V1VGREwwSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMUZCUlRORExFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNN1VVRkRPVUlzUzBGQlN5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hIUVVGSExFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVTdXVUZEYmtNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGZWtNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRemxDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxHZEdRVUZuUmp0SlFVTm9SaXdyUkVGQkswUTdTVUZETDBRc1RVRkJUU3hEUVVGRExFdEJRV1VzUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTnVReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4N1dVRkRMMElzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4MVFrRkJkVUlzUTBGQlF5eERRVUZETzFGQlJUTkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTI1RUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlhCRUxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDeG5SRUZCWjBRN1NVRkRhRVFzUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpPMUZCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia1FzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZha01zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6bENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTERKRlFVRXlSVHRKUVVNelJTd3JSRUZCSzBRN1NVRkRMMFFzUlVGQlJTeERRVUZETEV0QlFXVXNSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVNdlFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVTg3V1VGREwwSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMUZCUlRORExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMjVFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNjVVpCUVhGR08wbEJRM0pHTEN0RVFVRXJSRHRKUVVNdlJDeEhRVUZITEVOQlFVTXNTMEZCWlN4RlFVRkZMRTFCUVUwc1IwRkJSeXhKUVVGSk8xRkJRMmhETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR6dFpRVU12UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkZNME1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGJrUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSV3hETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTTVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4dlJrRkJiMFk3U1VGRGNFWXNVVUZCVVN4RFFVRkRMRWRCUVZjc1JVRkJSU3hEUVVGVExFVkJRVVVzU1VGQlNTeEhRVUZITEV0QlFVczdVVUZETTBNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGYUVRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVODdVVUZGYmtJc1owSkJRV2RDTzFGQlEyaENMSFZFUVVGMVJEdFJRVVYyUkN4cFFrRkJhVUk3VVVGRGFrSXNUVUZCVFN4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU12UWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZha01zWjBSQlFXZEVPMUZCUldoRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NVMEZCVXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTjJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlhKRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTm9ReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWMlFpeGxRVUZsTzBsQlEycENMRU5CUVVNN1NVRkZSQ3hyUmtGQmEwWTdTVUZEYkVZc2RVSkJRWFZDTzBsQlEzWkNMRkZCUVZFc1EwRkJReXhIUVVGWExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTTdVVUZEZWtJc2QwUkJRWGRFTzFGQlEzaEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU03V1VGRFVDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMSE5DUVVGelFpeERRVUZETEVOQlFVTTdVVUZGTVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlhCRUxFbEJRVWtzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHRaUVVOMlFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU42UXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEzUkRPMUZCUlVRc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMjVETEVOQlFVTTdTVUZGUkN4WlFVRlpMRU5CUVVNc1NVRkJZeXhGUVVGRkxFbEJRVWtzUjBGQlJ5eEpRVUZKTzFGQlEzUkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFR0WlFVTTNRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRk0wTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1NVRkJTU3hGUVVGRkxFVkJRVVVzY1VKQlFYRkNPMWxCUTNaRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZEVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUTNCQ08yRkJRVTA3V1VGRFRDeEpRVUZKTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkZaaXhMUVVGTExFbEJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdaMEpCUTJwRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUlRsRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMWxCUTNSQ0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0VFFVTnFRanRSUVVWRUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMQ3RDUVVFclFqdEpRVU12UWl4TlFVRk5MRU5CUVVNc1IwRkJWenRSUVVOb1FpeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEZWtVc1EwRkJRenRKUVVWRUxDdENRVUVyUWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWa3NSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVNM1F5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4SlFVRkpMRTFCUVUwN1dVRkRVaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdPMWxCUldoQ0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0SlFVTndRaXhEUVVGRE8wbEJSVVFzYVVaQlFXbEdPMGxCUTJwR0xFOUJRVThzUTBGQlF5eERRVUZUTEVWQlFVVXNTMEZCWXp0UlFVTXZRaXhKUVVGSkxFdEJRVXM3V1VGRFVDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPenRaUVVWd1JDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRek5FTEVOQlFVTTdTVUZGUkN4UFFVRlBMRU5CUVVNc1IwRkJWenRSUVVOcVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpGRUxFTkJRVU03U1VGRlJDeFJRVUZSTEVOQlFVTXNSMEZCVnp0UlFVTnNRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpkRUxFTkJRVU03U1VGRlJDeFRRVUZUTzFGQlExQXNUMEZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlF6bENMRU5CUVVNN1NVRkZSQ3hWUVVGVk8xRkJRMUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJReTlDTEVOQlFVTTdTVUZGUkN4MVEwRkJkVU03U1VGRGRrTXNVMEZCVXl4RFFVRkRMRXRCUVdNN1VVRkRkRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRU5CUVVNN1dVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVZvUXl4SlFVRkpMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRk8xbEJReTlETEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03V1VGRE9VSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMVlzVDBGQlR5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEZGtJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxEUkNRVUUwUWp0dlFrRkRNVVVzU1VGQlNTeERRVUZETEdOQlFXTXNTVUZCU1N4UlFVRlJMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0cFFrRkRka1E3WVVGRFJqdFpRVVZFTEdkQ1FVRm5RanRaUVVOb1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzUkNMRTFCUVUwc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUXpGRExFbEJRVWtzWVVGQllTeEpRVUZKTEVOQlFVTXNSVUZCUlN4NVJrRkJlVVk3WjBKQlF5OUhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4aFFVRmhMRU5CUVVNc1EwRkJRenRaUVVWNFF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU03WjBKQlEzSkNMRWxCUVVrc1EwRkJReXhqUVVGakxFbEJRVWtzVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRmVFUXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNN1UwRkROVU03VVVGRlJDeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXp0SlFVTTFSU3hEUVVGRE8wbEJSVVFzTWtSQlFUSkVPMGxCUXpORUxGVkJRVlVzUTBGQlF5eExRVUZsTzFGQlEzaENMRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5tTEVsQlFVa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVTdXVUZEY0VNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTnVReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTTVRanRoUVVGTk8xbEJRMHdzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRha1FzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRPVUk3VVVGRFJDeFBRVUZQTEUxQlFVMHNRMEZCUXp0SlFVTm9RaXhEUVVGRE8wbEJSVVFzTWtaQlFUSkdPMGxCUXpOR0xHZENRVUZuUWl4RFFVRkRMRTFCUVdkQ0xFVkJRVVVzUzBGQll6dFJRVU12UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUldoRExFbEJRVWtzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTmtMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdVVUZET1VJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlExWXNUMEZCVHl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjJRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMmRDUVVNMVJDeExRVUZMTEVsQlFVa3NVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZETTBNN1VVRkZSQ3huUWtGQlowSTdVVUZEYUVJc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoRExFMUJRVTBzWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRekZETEVsQlFVa3NZVUZCWVN4SlFVRkpMRU5CUVVNN1dVRkRjRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxHRkJRV0VzUTBGQlF5eERRVUZETzFGQlEzaERMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXp0WlFVTnlRaXhMUVVGTExFbEJRVWtzVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRk1VTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlEyaEVMRU5CUVVNN1NVRkZSQ3hMUVVGTE8xRkJRMGdzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOd1FpeERRVUZETzBsQlJVUXNVVUZCVVN4RFFVRkRMRXRCUVdNN1VVRkRja0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTjJReXhEUVVGRE8wbEJSVVFzU1VGQlNTeFBRVUZQTzFGQlExUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1NVRkRPVU1zUTBGQlF6dEpRVVZFTEVsQlFVa3NVVUZCVVR0UlFVTldMRTlCUVU4c1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRE8wbEJReTlETEVOQlFVTTdTVUZGUkN4SlFVRkpMRTlCUVU4N1VVRkRWQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZGUkN4SlFVRkpMRkZCUVZFN1VVRkRWaXhQUVVGUExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMjVETEVOQlFVTTdTVUZGUkN4elIwRkJjMGM3U1VGRGRFY3NNRU5CUVRCRE8wbEJRekZETEZGQlFWRXNRMEZCUXl4TFFVRmhMRVZCUVVVc1MwRkJTeXhIUVVGSExFbEJRVWs3VVVGRGJFTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVZ5UkN4SlFVRkpMRXRCUVVzc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTTdXVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM3BETEV0QlFVc3NSMEZCUnl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTzFGQlEyaEVMRWxCUVVrc1ZVRkJWU3hIUVVGSExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZET1VJc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0UlFVVnNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UFFVRlBMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRGNrUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1R0WlFVTTVSQ3hKUVVGSkxGVkJRVlVzU1VGQlNTeERRVUZETEVWQlFVVTdaMEpCUTI1Q0xFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNWVUZCVlN4SlFVRkpMRlZCUVZVc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTXZReXhWUVVGVkxFZEJRVWNzUTBGQlF5eERRVUZETzJGQlEyaENPMmxDUVVGTkxFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxIbERRVUY1UXl4RFFVRkJPMmRDUVVNNVJTeFRRVUZUTzJGQlExWTdXVUZGUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0blFrRkRlRU1zVFVGQlRTeERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdaMEpCUTNwRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0dlFrRkRWaXhMUVVGTExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZWtJc1NVRkJTU3hMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVODdkMEpCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEY2tNc1QwRkJUeXhMUVVGTExFTkJRVU03YVVKQlEyUTdZVUZEUmp0VFFVTkdPMUZCUTBRc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5hTEVOQlFVTTdTVUZGUkN3MFJFRkJORVE3U1VGRE5VUXNVVUZCVVN4RFFVRkRMRXRCUVdFc1JVRkJSU3hMUVVGTExFZEJRVWNzU1VGQlNUdFJRVU5zUXl4SlFVRkpMRXRCUVVzc1NVRkJTU3hEUVVGRE8xbEJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXhRaXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlhKRUxFdEJRVXNzUjBGQlJ5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEdGQlFXRTdVVUZGTDBRc1RVRkJUU3hWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRE5VTXNTVUZCU1N4aFFVRmhMRWRCUVVjc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUlhaRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEY0VNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1QwRkJUenRaUVVONlJDeEpRVUZKTEdGQlFXRXNTVUZCU1N4RFFVRkRMRVZCUVVVN1owSkJRM1JDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeGhRVUZoTEVOQlFVTXNRMEZCUXp0blFrRkRkRU1zWVVGQllTeEhRVUZITEVOQlFVTXNRMEZCUXp0aFFVTnVRanRaUVVORUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRk8yZENRVU40UXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRE1VTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenR2UWtGRFVpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZETTBJN1UwRkRSanRSUVVORUxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEV2l4RFFVRkRPenRCUVhKMVFrMHNiMEpCUVZjc1IwRkJSeXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlEyeERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1EwRkJReXhEUVVGRExFTkJRVU03UVVGRk5VTXNiMEpCUVZjc1IwRkJSeXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlEyeERMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU12UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenREUVVGRExFTkJRVU1zUTBGQlF6dEJRVVUxUXl4dFFrRkJWU3hIUVVGSExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEYWtNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF5OURMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wTkJRVU1zUTBGQlF5eERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdRbWwwUVhKeVlYa2dlMXh1SUNCemRHRjBhV01nWDI5dVFtbDBRMjkxYm5RZ1BTQkpiblE0UVhKeVlYa3Vabkp2YlNoYlhHNGdJQ0FnTUN3Z01Td2dNU3dnTWl3Z01Td2dNaXdnTWl3Z015d2dNU3dnTWl3Z01pd2dNeXdnTWl3Z015d2dNeXdnTkN4Y2JpQWdJQ0F4TENBeUxDQXlMQ0F6TENBeUxDQXpMQ0F6TENBMExDQXlMQ0F6TENBekxDQTBMQ0F6TENBMExDQTBMQ0ExTEZ4dUlDQWdJREVzSURJc0lESXNJRE1zSURJc0lETXNJRE1zSURRc0lESXNJRE1zSURNc0lEUXNJRE1zSURRc0lEUXNJRFVzWEc0Z0lDQWdNaXdnTXl3Z015d2dOQ3dnTXl3Z05Dd2dOQ3dnTlN3Z015d2dOQ3dnTkN3Z05Td2dOQ3dnTlN3Z05Td2dOaXhjYmlBZ0lDQXhMQ0F5TENBeUxDQXpMQ0F5TENBekxDQXpMQ0EwTENBeUxDQXpMQ0F6TENBMExDQXpMQ0EwTENBMExDQTFMRnh1SUNBZ0lESXNJRE1zSURNc0lEUXNJRE1zSURRc0lEUXNJRFVzSURNc0lEUXNJRFFzSURVc0lEUXNJRFVzSURVc0lEWXNYRzRnSUNBZ01pd2dNeXdnTXl3Z05Dd2dNeXdnTkN3Z05Dd2dOU3dnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05peGNiaUFnSUNBekxDQTBMQ0EwTENBMUxDQTBMQ0ExTENBMUxDQTJMQ0EwTENBMUxDQTFMQ0EyTENBMUxDQTJMQ0EyTENBM0xGeHVJQ0FnSURFc0lESXNJRElzSURNc0lESXNJRE1zSURNc0lEUXNJRElzSURNc0lETXNJRFFzSURNc0lEUXNJRFFzSURVc1hHNGdJQ0FnTWl3Z015d2dNeXdnTkN3Z015d2dOQ3dnTkN3Z05Td2dNeXdnTkN3Z05Dd2dOU3dnTkN3Z05Td2dOU3dnTml4Y2JpQWdJQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxDQXpMQ0EwTENBMExDQTFMQ0EwTENBMUxDQTFMQ0EyTEZ4dUlDQWdJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc0lEUXNJRFVzSURVc0lEWXNJRFVzSURZc0lEWXNJRGNzWEc0Z0lDQWdNaXdnTXl3Z015d2dOQ3dnTXl3Z05Dd2dOQ3dnTlN3Z015d2dOQ3dnTkN3Z05Td2dOQ3dnTlN3Z05Td2dOaXhjYmlBZ0lDQXpMQ0EwTENBMExDQTFMQ0EwTENBMUxDQTFMQ0EyTENBMExDQTFMQ0ExTENBMkxDQTFMQ0EyTENBMkxDQTNMRnh1SUNBZ0lETXNJRFFzSURRc0lEVXNJRFFzSURVc0lEVXNJRFlzSURRc0lEVXNJRFVzSURZc0lEVXNJRFlzSURZc0lEY3NYRzRnSUNBZ05Dd2dOU3dnTlN3Z05pd2dOU3dnTml3Z05pd2dOeXdnTlN3Z05pd2dOaXdnTnl3Z05pd2dOeXdnTnl3Z09GMHBPMXh1WEc0Z0lITjBZWFJwWXlCZlptbHljM1JQYmtKcGRDQTlJRWx1ZERoQmNuSmhlUzVtY205dEtGdGNiaUFnSUNBdE1Td2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMExDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURVc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTkN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0EyTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRFFzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOU3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTBMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEY3NJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05Dd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMUxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURRc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTml3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0EwTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRFVzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOQ3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNRjBwTzF4dVhHNGdJSE4wWVhScFl5QmZiR0Z6ZEU5dVFtbDBJRDBnU1c1ME9FRnljbUY1TG1aeWIyMG9XMXh1SUNBZ0lDMHhMQ0F3TENBeExDQXhMQ0F5TENBeUxDQXlMQ0F5TENBekxDQXpMQ0F6TENBekxDQXpMQ0F6TENBekxDQXpMRnh1SUNBZ0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNYRzRnSUNBZ05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05TeGNiaUFnSUNBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxGeHVJQ0FnSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc1hHNGdJQ0FnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml4Y2JpQWdJQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTEZ4dUlDQWdJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzWEc0Z0lDQWdOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXhjYmlBZ0lDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMRnh1SUNBZ0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NYRzRnSUNBZ055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055eGNiaUFnSUNBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xGeHVJQ0FnSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc1hHNGdJQ0FnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl4Y2JpQWdJQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzWFNrN1hHNWNiaUFnY0hKcGRtRjBaU0JmWkdGMFlUb2dWV2x1ZERNeVFYSnlZWGs3WEc0Z0lIQnlhWFpoZEdVZ1gyeGxibWQwYUNBOUlEQTdYRzRnSUhCeWFYWmhkR1VnWDNabGNuTnBiMjRnUFNBd08xeHVJQ0J3Y21sMllYUmxJRjkxY0dSaGRHVk1aWFpsYkNBOUlEQTdYRzRnSUhCeWFYWmhkR1VnWDNObGJHVmpkR1ZrUTI5MWJuUWdQU0F3TzF4dUlDQndjbWwyWVhSbElGOXpaV3hsWTNSbFpFTnZkVzUwVm1WeWMybHZiaUE5SUMweE8xeHVJQ0J3Y21sMllYUmxJRjl6Wld4bFkzUmxaRWx1WkdWNFpYTldaWEp6YVc5dUlEMGdMVEU3WEc0Z0lIQnlhWFpoZEdVZ1gzWmxjbk5wYjI1bFpFNWhiV1VnUFNBbkp6dGNiaUFnY0hKcGRtRjBaU0JmZG1WeWMybHZibVZrVG1GdFpWWmxjbk5wYjI0Z1BTQXRNVHRjYmlBZ1UwaFNTVTVMWDFSSVVrVlRTRTlNUkNBOUlEQjRNVEF3TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0dSaGRHRTZJRlZwYm5Rek1rRnljbUY1TENCc1pXNW5kR2c2SUc1MWJXSmxjaWxjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9iR1Z1WjNSb09pQnVkVzFpWlhJc0lHUmxabUYxYkhSV1lXeDFaVDg2SUdKdmIyeGxZVzRwWEc0Z0lHTnZibk4wY25WamRHOXlLR0Z5WnpvZ2JuVnRZbVZ5SUh3Z1ZXbHVkRE15UVhKeVlYa3NJR1JsWm1GMWJIUldZV3gxWlRvZ1ltOXZiR1ZoYmlCOElHNTFiV0psY2lBOUlHWmhiSE5sS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCaGNtY2dQVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JzWlc1bmRHZ2dQU0JoY21jN1hHNGdJQ0FnSUNCamIyNXpkQ0JpZFdabUlEMGdRbWwwUVhKeVlYa3VYMk55WldGMFpVSjFabVpsY2loc1pXNW5kR2dwTzF4dUlDQWdJQ0FnYVdZZ0tHUmxabUYxYkhSV1lXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHSjFabVl1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNBZ0lDQWdZblZtWmx0cFhTQTlJQzB4TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NWZaR0YwWVNBOUlHSjFabVk3WEc0Z0lDQWdJQ0IwYUdsekxsOXNaVzVuZEdnZ1BTQnNaVzVuZEdnN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoaGNtY2dhVzV6ZEdGdVkyVnZaaUJWYVc1ME16SkJjbkpoZVNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlTQTlJR0Z5WnlCaGN5QlZhVzUwTXpKQmNuSmhlVHRjYmlBZ0lDQWdJSFJvYVhNdVgyeGxibWQwYUNBOUlHUmxabUYxYkhSV1lXeDFaU0JoY3lCdWRXMWlaWEk3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNTJZV3hwWkNCamIyNXpkSEoxWTNSdmNpY3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNWNiaUFnWjJWMFVtRjNSR0YwWVNncElIc2djbVYwZFhKdUlIUm9hWE11WDJSaGRHRTdJSDFjYmx4dUlDQmhjM04xY21WSGIyVjZLRzUxYlRvZ2JuVnRZbVZ5TENCaGNtZE9ZVzFsT2lCVGRISnBibWNwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvYm5WdElEd2dNQ2tnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0FrZTJGeVowNWhiV1Y5SUhOb2IzVnNaQ0JpWlNCbmNtVmhkR1Z5SUhSb1lXNGdlbVZ5YjJBcE8xeHVJQ0I5WEc1Y2JpQWdZWE56ZFhKbFNXNVNZVzVuWlNoMllXeDFaVG9nYm5WdFltVnlMQ0J0YVc0NklHNTFiV0psY2l3Z2JXRjRPaUJ1ZFcxaVpYSXNJR0Z5WjA1aGJXVTZJRk4wY21sdVp5azZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDZ29kbUZzZFdVZ1BDQnRhVzRwSUh4OElDaDJZV3gxWlNBK0lHMWhlQ2twWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRUZ5WjNWdFpXNTBJQ1I3WVhKblRtRnRaWDBnS0NSN2RtRnNkV1Y5S1NCdmRYUWdiMllnY21GdVoyVWdLQ1I3YldsdWZTd2dKSHR0WVhoOUtXQXBPMXh1SUNCOVhHNWNiaUFnWTI5d2VTaHpjbU02SUZWcGJuUXpNa0Z5Y21GNUxDQmtjM1E2SUZWcGJuUXpNa0Z5Y21GNUxDQmpiM1Z1ZERvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JqYjNWdWREc2dhU3NyS1Z4dUlDQWdJQ0FnWkhOMFcybGRJRDBnYzNKalcybGRPMXh1SUNCOVhHNWNiaUFnWTI5d2VVWnliMjBvYjNSb1pYSTZJRUpwZEVGeWNtRjVLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBaFBTQnZkR2hsY2k1ZmJHVnVaM1JvS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JNWlc1bmRHaHpJR1JwWm1abGNpQW9KSHQwYUdsekxsOXNaVzVuZEdoOUlDRTlJQ1I3YjNSb1pYSXVYMnhsYm1kMGFIMHBZQ2s3WEc0Z0lDQWdkR2hwY3k1amIzQjVLRzkwYUdWeUxsOWtZWFJoTENCMGFHbHpMbDlrWVhSaExDQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN5azdYRzRnSUNBZ2RHaHBjeTVmZG1WeWMybHZiaXNyTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR3hsYm1kMGFDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNWNiaUFnWjJWMElHSjFabVpsY2lncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZaR0YwWVR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0JpZFdabVpYSW9aR0YwWVRvZ1ZXbHVkRE15UVhKeVlYa3BJSHRjYmlBZ0lDQjBhR2x6TGw5a1lYUmhJRDBnWkdGMFlUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCblpYUWdkbVZ5YzJsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1WeWMybHZianRjYmlBZ2ZWeHVYRzRnSUhObGRDQjJaWEp6YVc5dUtIWmhiSFZsT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUlEMGdkbUZzZFdVN1hHNGdJSDFjYmx4dUlDQnBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNBOUlIUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1S3lzN1hHNGdJSDFjYmx4dUlDQm5aWFFnYkdWdVozUm9TVzVKYm5SektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCTllYUm9MbVpzYjI5eUtDaDBhR2x6TGw5c1pXNW5kR2dnS3lBd2VERm1LU0F2SURCNE1qQXBPMXh1SUNCOVhHNWNiaUFnWjJWMElIWmxjbk5wYjI1bFpFNWhiV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmxjbk5wYjI0Z1BUMGdkR2hwY3k1ZmRtVnljMmx2Ym1Wa1RtRnRaVlpsY25OcGIyNGdQeUIwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsSURvZ0p5YzdYRzRnSUgxY2JseHVJQ0J6WlhRZ2RtVnljMmx2Ym1Wa1RtRnRaU2h1WVcxbE9pQnpkSEpwYm1jcElIdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVaV1JPWVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsVm1WeWMybHZiaUE5SUhSb2FYTXVYM1psY25OcGIyNDdYRzRnSUgxY2JseHVJQ0JuWlhRZ2MyVnNaaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lITmxkRXhsYm1kMGFDaDJZV3gxWlRvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0haaGJIVmxJRHdnTUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYzJodmRXeGtJR0psSUQ0OUlEQW5LVHRjYmx4dUlDQWdJR2xtSUNoMllXeDFaU0E5UFNCMGFHbHpMbDlzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J1U1c1MGMwNWxaV1JsWkNBOUlFMWhkR2d1Wm14dmIzSW9LSFpoYkhWbElDc2dNSGd4WmlrZ0x5QXdlREl3S1R0Y2JpQWdJQ0JwWmlBb0tHNUpiblJ6VG1WbFpHVmtJRDRnZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dwSUh4OElDZ29ia2x1ZEhOT1pXVmtaV1FnS3lCMGFHbHpMbE5JVWtsT1MxOVVTRkpGVTBoUFRFUXBJRHdnZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0J1WlhkRVlYUmhJRDBnYm1WM0lGVnBiblF6TWtGeWNtRjVLRzVKYm5SelRtVmxaR1ZrS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMjl3ZVNoMGFHbHpMbDlrWVhSaExDQnVaWGRFWVhSaExDQW9ia2x1ZEhOT1pXVmtaV1FnUGlCMGFHbHpMbDlrWVhSaExteGxibWQwYUNrZ1B5QjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDQTZJRzVKYm5SelRtVmxaR1ZrS1R0Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFZ1BTQnVaWGRFWVhSaE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDJZV3gxWlNBK0lIUm9hWE11WDJ4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FsSURCNE1qQWdQaUF3S1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbDlrWVhSaFczUm9hWE11YkdWdVozUm9TVzVKYm5SeklDMGdNVjBnSmowZ0tERWdQRHdnS0NoMGFHbHpMbDlzWlc1bmRHZ2dKU0F3ZURJd0tTQW1JREI0TVdZcEtTQXRJREU3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFdVptbHNiQ2d3TENCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3l3Z2JrbHVkSE5PWldWa1pXUXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbDlzWlc1bmRHZ2dQU0IyWVd4MVpUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVRnVaQ2h6WlhReE9pQkNhWFJCY25KaGVTd2djMlYwTWpvZ1FtbDBRWEp5WVhrcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSE5sZERFdVgyeGxibWQwYUNBaFBTQnpaWFF5TGw5c1pXNW5kR2dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRXhsYm1kMGFITWdaR2xtWm1WeUlDZ2tlM05sZERFdVgyeGxibWQwYUgwZ0lUMGdKSHR6WlhReUxsOXNaVzVuZEdoOUtXQXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2RHVnRjQ0E5SUc1bGR5QkNhWFJCY25KaGVTaHpaWFF4TGw5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgyeGxibWQwYUNBOUlITmxkREV1WDJ4bGJtZDBhRHRjYmlBZ0lDQjBaVzF3TGw5a1lYUmhJRDBnUW1sMFFYSnlZWGt1WDJOeVpXRjBaVUoxWm1abGNpaDBaVzF3TGw5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHVnVJRDBnYzJWME1TNXNaVzVuZEdoSmJrbHVkSE03WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lHa3JLeWxjYmlBZ0lDQWdJSFJsYlhBdVgyUmhkR0ZiYVYwZ1BTQnpaWFF4TGw5a1lYUmhXMmxkSUNZZ2MyVjBNaTVmWkdGMFlWdHBYVHRjYmx4dUlDQWdJSEpsZEhWeWJpQjBaVzF3TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWDJOeVpXRjBaVUoxWm1abGNpaHNaVzVuZEdnNklHNTFiV0psY2lrNklGVnBiblF6TWtGeWNtRjVJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRlZwYm5Rek1rRnljbUY1S0UxaGRHZ3VabXh2YjNJb0tHeGxibWQwYUNBcklEQjRNV1lwSUM4Z01IZ3lNQ2twTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVdZV3gxWlhNb2RtRnNkV1Z6T2lCQmNuSmhlVHhpYjI5c1pXRnVQaWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JqYjI1emRDQjBaVzF3SUQwZ2JtVjNJRUpwZEVGeWNtRjVLSFpoYkhWbGN5NXNaVzVuZEdncE8xeHVJQ0FnSUhSbGJYQXVYM1psY25OcGIyNGdQU0F3TzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpXMXdMbDlzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbGMxdHBYU2xjYmlBZ0lDQWdJQ0FnZEdWdGNDNWZaR0YwWVZ0TllYUm9MbVpzYjI5eUtHa2dMeUF3ZURJd0tWMGdmRDBnTVNBOFBDQW9LR2tnSlNBd2VESXdLU0FtSURCNE1XWXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdWdGNEdGNiaUFnZlZ4dVhHNGdJQzh2THlCRGIyNXpkSEoxWTNSeklHRWdXMEpwZEZObGRGMGdiMllnYkdWdVozUm9JRnRqYjNWdWRGMHNJSGRvWlhKbElHbGtlQzEwYUNCaWFYUWdhWE1nWkdWMFpYSnRhVzVsWkNCaWVTQmhJR05oYkd3Z2RHOGdXMlpzWVdkZElDaHBaSGdwTGx4dUlDQnpkR0YwYVdNZ1puSnZiVk5sY1NoamIzVnVkRG9nYm5WdFltVnlMQ0JtYkdGbk9pQkdkVzVqZEdsdmJpazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQmpiMjV6ZENCMFpXMXdJRDBnYm1WM0lFSnBkRUZ5Y21GNUtHTnZkVzUwS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdOdmRXNTBPeUFySzJrcFhHNGdJQ0FnSUNCMFpXMXdMbk5sZEVKcGRDaHBMQ0JtYkdGbktHa3BLVHRjYmx4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1SUNBZ0lISmxkSFZ5YmlCMFpXMXdPMXh1SUNCOVhHNWNiaUFnTHk4dklFTnZibk4wY25WamRITWdZU0JiUW1sMFUyVjBYU0JtY205dElHRWdjM1J5YVc1bklGdHpYU0JqYjI1MFlXbHVhVzVuSUNjd0p5QnZjaUFuTVNjdVhHNGdJSE4wWVhScFl5Qm1jbTl0VTNSeWFXNW5LSE02SUhOMGNtbHVaeWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0J5WlhSMWNtNGdRbWwwUVhKeVlYa3Vabkp2YlZObGNTaHpMbXhsYm1kMGFDd2dLR2s2SUc1MWJXSmxjaWtnUFQ0Z2N5NWphR0Z5UVhRb2FTa2dQVDBnSnpFbktUdGNiaUFnZlZ4dVhHNGdJQzh2THlCRGIyNXpkSEoxWTNSeklHRWdXMEpwZEZObGRGMHNJR0poYzJWa0lHOXVJR3hsYm1kMGFDQmJYMnhsYm1kMGFGMGdZVzVrSUdKNWRHVWdZWEp5WVhrZ1cxOWtZWFJoWFM1Y2JpQWdjM1JoZEdsaklHWnliMjFWYVc1ME16SkJjbkpoZVNoZmJHVnVaM1JvT2lCdWRXMWlaWElzSUY5a1lYUmhPaUJWYVc1ME16SkJjbkpoZVNrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCamIyNXpkQ0IwWlcxd0lEMGdibVYzSUVKcGRFRnljbUY1S0Y5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgyUmhkR0VnUFNCZlpHRjBZVHRjYmlBZ0lDQnlaWFIxY200Z2RHVnRjRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkVaWE5sY21saGJHbDZaWE1nWVNCYlFtbDBVMlYwWFNCbWNtOXRJRnRpZVhSbGMxMHVYRzRnSUhOMFlYUnBZeUJtY205dFFubDBaWE1vWW5sMFpYTTZJRlZwYm5RNFFYSnlZWGtwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ1lubDBaWE11YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhSbGJYQWdQU0J1WlhjZ1FtbDBRWEp5WVhrb2JHVnVJQ29nT0NrN1hHNGdJQ0FnZEdWdGNDNWZaR0YwWVNBOUlHNWxkeUJWYVc1ME16SkJjbkpoZVNoTllYUm9MbVpzYjI5eUtDaHNaVzRnS3lBektTQXZJRFFwS1R0Y2JpQWdJQ0IwWlcxd0xsOXNaVzVuZEdnZ1BTQnNaVzRnS2lBNE8xeHVJQ0FnSUd4bGRDQnVkVzB4SUQwZ01EdGNiaUFnSUNCc1pYUWdiblZ0TWlBOUlEQTdYRzVjYmlBZ0lDQjNhR2xzWlNBb0tHeGxiaUF0SUc1MWJUSXBJRDQ5SURRcElIdGNiaUFnSUNBZ0lIUmxiWEF1WDJSaGRHRmJiblZ0TVNzclhTQTlJQ2hjYmlBZ0lDQWdJQ0FnS0NoaWVYUmxjMXR1ZFcweVhTQW1JREI0Wm1ZcElId2dLQ2hpZVhSbGMxdHVkVzB5SUNzZ01WMGdKaUF3ZUdabUtTQThQQ0E0S1NrZ2ZGeHVJQ0FnSUNBZ0lDQW9LR0o1ZEdWelcyNTFiVElnS3lBeVhTQW1JREI0Wm1ZcElEdzhJREI0TVRBcFhHNGdJQ0FnSUNBcElId2dLQ2hpZVhSbGMxdHVkVzB5SUNzZ00xMGdKaUF3ZUdabUtTQThQQ0F3ZURFNEtUdGNibHh1SUNBZ0lDQWdiblZ0TWlBclBTQTBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hzWlc0Z0xTQnVkVzB5SUQwOUlETXBYRzRnSUNBZ0lDQjBaVzF3TGw5a1lYUmhXMjUxYlRGZElEMGdLR0o1ZEdWelcyNTFiVElnS3lBeVhTQW1JREI0Wm1ZcElEdzhJREI0TVRBN1hHNWNiaUFnSUNCcFppQW9iR1Z1SUMwZ2JuVnRNaUE5UFNBeUtWeHVJQ0FnSUNBZ2RHVnRjQzVmWkdGMFlWdHVkVzB4WFNCOFBTQW9ZbmwwWlhOYmJuVnRNaUFySURGZElDWWdNSGhtWmlrZ1BEd2dPRHRjYmx4dUlDQWdJR2xtSUNoc1pXNGdMU0J1ZFcweUlEMDlJREVwWEc0Z0lDQWdJQ0IwWlcxd0xsOWtZWFJoVzI1MWJURmRJSHc5SUdKNWRHVnpXMjUxYlRKZElDWWdNSGhtWmp0Y2JseHVJQ0FnSUhSbGJYQXVYM1psY25OcGIyNGdQU0F3TzF4dUlDQWdJSEpsZEhWeWJpQjBaVzF3TzF4dUlDQjlYRzVjYmlBZ2RHOVRkSEpwYm1jb0tUb2djM1J5YVc1bklIdGNiaUFnSUNCeVpYUjFjbTRnWUNSN2RHaHBjeTVmYkdWdVozUm9mU0JpYVhSekxDQWtlM1JvYVhNdVkyOTFiblJDYVhSektIUnlkV1VwZlNCelpYUmdPMXh1SUNCOVhHNWNiaUFnTHk4dklGQmxjbVp2Y20xeklHUmxaWEFnWTI5dGNHRnlhWE52YmlCdlppQjBkMjhnWW1sMGMyVjBjeTVjYmlBZ1pYRjFZV3h6S0c5MGFHVnlPaUJDYVhSQmNuSmhlU2s2SUdKdmIyeGxZVzRnZTF4dUlDQWdJR2xtSUNoMGFHbHpJRDA5SUc5MGFHVnlLU0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0JwWmlBb2IzUm9aWElnUFQwZ2JuVnNiQ2tnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnSVQwZ2IzUm9aWEl1WDJ4bGJtZDBhQ2tnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnUFQwZ01Da2djbVYwZFhKdUlIUnlkV1U3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXVYMlJoZEdFdWJHVnVaM1JvSUMwZ01Uc2dhU3NyS1Z4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WDJSaGRHRmJhVjBnSVQwZ2IzUm9aWEl1WDJSaGRHRmJhVjBwSUhKbGRIVnliaUJtWVd4elpUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0FvZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dnTFNBeEtTQXFJRGc3SUdrZ1BDQjBhR2x6TGw5c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVaMlYwUW1sMEtHa3BJQ0U5SUc5MGFHVnlMbWRsZEVKcGRDaHBLU2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJEYkc5dVpYTWdZU0JpYVhSelpYUXVJQ292WEc0Z0lHTnNiMjVsS0NrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCamIyNXpkQ0JpYVhSQmNuSmhlU0E5SUc1bGR5QkNhWFJCY25KaGVTZ3dMQ0JtWVd4elpTazdYRzRnSUNBZ1ltbDBRWEp5WVhrdVgyUmhkR0VnUFNCVmFXNTBNekpCY25KaGVTNW1jbTl0S0hSb2FYTXVYMlJoZEdFcE95QXZMeUJsWm1abFkzUnBkbVVnYkdWdVozUm9PaUFvYkdWdVozUm9TVzVKYm5SektWeHVJQ0FnSUdKcGRFRnljbUY1TGw5c1pXNW5kR2dnUFNCMGFHbHpMbDlzWlc1bmRHZzdYRzRnSUNBZ1ltbDBRWEp5WVhrdVgzWmxjbk5wYjI0Z1BTQjBhR2x6TGw5MlpYSnphVzl1TzF4dUlDQWdJSEpsZEhWeWJpQmlhWFJCY25KaGVUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCSmJtbDBhV0ZzYVhwbGN5QmhJR0pwZEhObGRDNGdLaTljYmlBZ2FXNXBkQ2htYkdGbk9pQkdkVzVqZEdsdmJpd2dibTkwYVdaNU9pQmliMjlzWldGdUtUb2dRbWwwUVhKeVlYa2dlMXh1SUNBZ0lIUm9hWE11YzJWMFFXeHNLR1poYkhObExDQm1ZV3h6WlNrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WDJ4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQnBaaUFvWm14aFp5aHBLU2xjYmlBZ0lDQWdJQ0FnZEdocGN5NWZaR0YwWVZ0TllYUm9MbVpzYjI5eUtHa2dMeUF3ZURJd0tWMGdmRDBnTVNBOFBDQW9LR2tnSlNBd2VESXdLU0FtSURCNE1XWXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHk4dklFbHVkbVZ5ZEhNZ1lTQmlhWFJ6WlhRdVhHNGdJR2x1ZG1WeWRDaHViM1JwWm5rZ1BTQjBjblZsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwYUdsekxsOWtZWFJoTG14bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdHBYU0JlUFNBdE1UdGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNCOVhHNWNiaUFnTHk4dklGTmxkSE1nWVd4c0lHSnBkSE1nZEc4Z1czWmhiSFZsWFN3Z2IzQjBhVzl1WVd4c2VTQnpkWEJ3Y21WemMybHVaeUJ1YjNScFptbGpZWFJwYjI1ekxseHVJQ0J6WlhSQmJHd29kbUZzZFdVNklHSnZiMnhsWVc0c0lHNXZkR2xtZVNBOUlHWmhiSE5sS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdZMjl1YzNRZ1pteGhaM01nUFNCMllXeDFaU0EvSUMweElEb2dNRHRjYmlBZ0lDQmpiMjV6ZENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdWdU95QnBLeXNwSUM4dmRHOWtiem9nYjNCMGFXMXBlbVZjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0ZiYVYwZ1BTQm1iR0ZuY3p0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUZObGRITWdZbWwwY3lCaGRDQmJhVzVrWlhobGMxMGdjRzl6YVhScGIyNGdkRzhnVzNaaGJIVmxYUzVjYmlBZ0x5OHZJRU5zWldGeWN5QjBhR1VnWW1sMGMyVjBJR2xtSUZ0amJHVmhjbDBnWm14aFp5QnBjeUIwY25WbExseHVJQ0F2THk4Z1EyaGhibWRsSUc1dmRHbG1hV05oZEdsdmJpQnBjeUJ5WVdselpXUWdkMmhsYmlCYmJtOTBhV1o1WFNCcGN5QjBjblZsTGx4dUlDQnpaWFJKYm1SbGVHVnpLR2x1WkdWNFpYTTZJRUZ5Y21GNVBHNTFiV0psY2o0c0lIWmhiSFZsSUQwZ2RISjFaU3dnWTJ4bFlYSWdQU0IwY25WbExDQnViM1JwWm5rZ1BTQjBjblZsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0dOc1pXRnlLVnh1SUNBZ0lDQWdkR2hwY3k1elpYUkJiR3dvSVhaaGJIVmxMQ0JtWVd4elpTazdYRzVjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJR2tnYjJZZ2FXNWtaWGhsY3lsY2JpQWdJQ0FnSUhSb2FYTXVjMlYwUm1GemRDaHBMQ0IyWVd4MVpTazdYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ2ZWeHVYRzRnSUdWMlpYSjVTVzVrWlhnb2FXNWtaWGhsY3pvZ1FYSnlZWGs4Ym5WdFltVnlQaXdnZG1Gc2RXVWdQU0IwY25WbEtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQnBibVJsZUNCdlppQnBibVJsZUdWektTQjdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NW5aWFJDYVhRb2FXNWtaWGdwSUNFOUlIWmhiSFZsS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5WEc1Y2JpQWdZVzU1U1c1a1pYZ29hVzVrWlhobGN6b2dRWEp5WVhrOGJuVnRZbVZ5UGl3Z2RtRnNkV1VnUFNCMGNuVmxLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JwYm1SbGVDQnZaaUJwYm1SbGVHVnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVuWlhSQ2FYUW9hVzVrWlhncElEMDlJSFpoYkhWbEtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNCOVhHNWNiaUFnYzJWMFYyaGxjbVVvWTJobFkyczZJRVoxYm1OMGFXOXVMQ0IyWVd4MVpTQTlJSFJ5ZFdVc0lHTnNaV0Z5SUQwZ2RISjFaU3dnYm05MGFXWjVJRDBnZEhKMVpTd2dZV3hzYjNkRGJHVmhjaUE5SUhSeWRXVXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9ZMnhsWVhJZ0ppWWdZV3hzYjNkRGJHVmhjaWxjYmlBZ0lDQWdJSFJvYVhNdWMyVjBRV3hzS0NGMllXeDFaU3dnWm1Gc2MyVXBPMXh1WEc0Z0lDQWdhV1lnS0dGc2JHOTNRMnhsWVhJcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1ZmJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9aV05yS0drcEtWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWMyVjBSbUZ6ZENocExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWZiR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMlYwUm1GemRDaHBMQ0JqYUdWamF5aHBLU0EvSUhaaGJIVmxJRG9nSVhaaGJIVmxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ2ZWeHVYRzRnSUdkbGRGSmhibWRsS0daeWIyMDZJRzUxYldKbGNpd2dkRzg2SUc1MWJXSmxjaWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvWm5KdmJTd2dNQ3dnZEdocGN5NWZiR1Z1WjNSb0lDMGdNU3dnSjJaeWIyMG5LVHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9kRzhzSURBc0lIUm9hWE11WDJ4bGJtZDBhQ3dnSjNSdkp5azdYRzRnSUNBZ1kyOXVjM1FnWVhKeU9pQkJjbkpoZVR4aWIyOXNaV0Z1UGlBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0JtY205dE95QnBJRHdnZEc4N0lDc3JhU2xjYmlBZ0lDQWdJR0Z5Y2k1d2RYTm9LSFJvYVhNdVoyVjBRbWwwS0drcEtUdGNiaUFnSUNCeVpYUjFjbTRnUW1sMFFYSnlZWGt1Wm5KdmJWWmhiSFZsY3loaGNuSXBPMXh1SUNCOVhHNWNiaUFnWjJWMFVtRnVaMlZCYzB4cGMzUW9abkp2YlRvZ2JuVnRZbVZ5TENCMGJ6b2diblZ0WW1WeUtUb2dZbTl2YkdWaGJsdGRJSHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9abkp2YlN3Z01Dd2dkR2hwY3k1ZmJHVnVaM1JvSUMwZ01Td2dKMlp5YjIwbktUdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb2RHOHNJREFzSUhSb2FYTXVYMnhsYm1kMGFDd2dKM1J2SnlrN1hHNGdJQ0FnWTI5dWMzUWdZWEp5T2lCaWIyOXNaV0Z1VzEwZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnWm5KdmJUc2dhU0E4SUhSdk95QXJLMmtwWEc0Z0lDQWdJQ0JoY25JdWNIVnphQ2gwYUdsekxtZGxkRUpwZENocEtTazdYRzRnSUNBZ2NtVjBkWEp1SUdGeWNqdGNiaUFnZlZ4dVhHNWNiaUFnYzJWMFVtRnVaMlVvWm5KdmJUb2diblZ0WW1WeUxDQjBiem9nYm5WdFltVnlMQ0IyWVd4MVpUb2dZbTl2YkdWaGJpd2dibTkwYVdaNUlEMGdkSEoxWlNrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb1puSnZiU3dnTUN3Z2RHaHBjeTVmYkdWdVozUm9JQzBnTVN3Z0oyWnliMjBuS1R0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvZEc4c0lEQXNJSFJvYVhNdVgyeGxibWQwYUNBdElERXNJQ2QwYnljcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0JOWVhSb0xtMXBiaWhtY205dExDQjBieWs3WEc0Z0lDQWdZMjl1YzNRZ1pXNWtJRDBnVFdGMGFDNXRZWGdvWm5KdmJTd2dkRzhwTzF4dVhHNGdJQ0FnTHk5MGIyUnZPaUJ2Y0hScGJXbDZaVnh1SUNBZ0lHbG1JQ2gyWVd4MVpTa2dlMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SUhOMFlYSjBPeUJwSUR3OUlHVnVaRHNnYVNzcktWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5ObGRGUnlkV1VvYVNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCemRHRnlkRHNnYVNBOFBTQmxibVE3SUdrckt5bGNiaUFnSUNBZ0lDQWdkR2hwY3k1elpYUkdZV3h6WlNocEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbWx1WTNKbGJXVnVkRlpsY25OcGIyNG9ibTkwYVdaNUtUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzh2THlCVFpYUnpJRzRnY21GdVpHOXRiSGtnWTJodmMyVnVJR0pwZEhNZ2RHOGdkbUZzZFdVc0lISmxiV0ZwYm1sdVp5QmlhWFJ6SUhSdklDRjJZV3gxWlM1Y2JpQWdjMlYwVW1GdVpHOXRLRzQ2SUc1MWJXSmxjaXdnZG1Gc2RXVTZJR0p2YjJ4bFlXNHNJRzV2ZEdsbWVTQTlJSFJ5ZFdVcE9pQjJiMmxrSUh0Y2JpQWdJQ0JwWmlBb2JpQThJREFnZkh3Z2JpQStJSFJvYVhNdVgyeGxibWQwYUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYmlCdGRYTjBJR0psSUQ0OUlEQWdKaVlnUEQwZ1EyOTFiblFuS1R0Y2JseHVJQ0FnSUdsbUlDaHVJRDRnZEdocGN5NWZiR1Z1WjNSb0lDOGdNaWxjYmlBZ0lDQWdJSFJvYVhNdWMyVjBVbUZ1Wkc5dEtIUm9hWE11WDJ4bGJtZDBhQ0F0SUc0c0lDRjJZV3gxWlNrN1hHNWNiaUFnSUNCMGFHbHpMbk5sZEVGc2JDZ2hkbUZzZFdVcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2F5QTlJREE3SUdzZ1BDQnVPeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdhU0E5SUUxaGRHZ3VabXh2YjNJb1RXRjBhQzV5WVc1a2IyMG9LU0FxSUhSb2FYTXVYMnhsYm1kMGFDazdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NW5aWFJDYVhRb2FTa2dQVDBnZG1Gc2RXVXBJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdkR2hwY3k1elpYUkdZWE4wS0drc0lIWmhiSFZsS1R0Y2JpQWdJQ0FnSUdzckt6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbWx1WTNKbGJXVnVkRlpsY25OcGIyNG9ibTkwYVdaNUtUdGNiaUFnZlZ4dVhHNGdJQzh2THlCTmIyUnBabWxsY3lCamRYSnlaVzUwSUdKcGRITmxkQ0JpZVNCd1pYSm1iM0p0YVc1bklIUm9aU0JpYVhSM2FYTmxJRUZPUkNCdmNHVnlZWFJwYjI0Z1lXZGhhVzV6ZENCMGFHVmNiaUFnTHk4dklHTnZjbkpsYzNCdmJtUnBibWNnWld4bGJXVnVkSE1nYVc0Z2RHaGxJSE53WldOcFptbGxaQ0JpYVhSelpYUXVYRzRnSUdGdVpDaDJZV3gxWlRvZ1FtbDBRWEp5WVhrc0lHNXZkR2xtZVNBOUlIUnlkV1VwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FoUFNCMllXeDFaUzVmYkdWdVozUm9LVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEJjbkpoZVNCc1pXNW5kR2h6SUdScFptWmxjaTRuS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdMQ0JzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6c2dhU0E4SUd4bGJqc2dhU3NyS1Z4dUlDQWdJQ0FnZEdocGN5NWZaR0YwWVZ0cFhTQW1QU0IyWVd4MVpTNWZaR0YwWVZ0cFhUdGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHk4dklGQmxjbVp2Y20xeklIUm9aU0JpYVhSM2FYTmxJRUZPUkNCT1QxUWdiM0JsY21GMGFXOXVJRzl1SUhSb1pTQmxiR1Z0Wlc1MGN5QnBiaUIwYUdVZ1kzVnljbVZ1ZENCaWFYUnpaWFJjYmlBZ0x5OHZJR0ZuWVdsdWMzUWdkR2hsSUdOdmNuSmxjM0J2Ym1ScGJtY2daV3hsYldWdWRITWdhVzRnZEdobElITndaV05wWm1sbFpDQmlhWFJ6WlhRdVhHNGdJR0Z1WkU1dmRDaDJZV3gxWlRvZ1FtbDBRWEp5WVhrc0lHNXZkR2xtZVNBOUlIUnlkV1VwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FoUFNCMllXeDFaUzVmYkdWdVozUm9LVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEJjbkpoZVNCc1pXNW5kR2h6SUdScFptWmxjaTRuS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR3hsYmlBOUlIUm9hWE11YkdWdVozUm9TVzVKYm5Sek8xeHVJQ0FnSUdadmNpQW9iR1YwSUc1MWJUSWdQU0F3T3lCdWRXMHlJRHdnYkdWdU95QnVkVzB5S3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcyNTFiVEpkSUNZOUlINTJZV3gxWlM1ZlpHRjBZVnR1ZFcweVhUdGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHk4dklGQmxjbVp2Y20xeklIUm9aU0JpYVhSM2FYTmxJRTVQVkNCQlRrUWdiM0JsY21GMGFXOXVJRzl1SUhSb1pTQmxiR1Z0Wlc1MGN5QnBiaUIwYUdVZ1kzVnljbVZ1ZENCaWFYUnpaWFJjYmlBZ0x5OHZJR0ZuWVdsdWMzUWdkR2hsSUdOdmNuSmxjM0J2Ym1ScGJtY2daV3hsYldWdWRITWdhVzRnZEdobElITndaV05wWm1sbFpDQmlhWFJ6WlhRdVhHNGdJRzV2ZEVGdVpDaDJZV3gxWlRvZ1FtbDBRWEp5WVhrc0lHNXZkR2xtZVNBOUlIUnlkV1VwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FoUFNCMllXeDFaUzVmYkdWdVozUm9LVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEJjbkpoZVNCc1pXNW5kR2h6SUdScFptWmxjaTRuS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdMQ0JzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6c2dhU0E4SUd4bGJqc2dhU3NyS1Z4dUlDQWdJQ0FnZEdocGN5NWZaR0YwWVZ0cFhTQTlJQ2grZEdocGN5NWZaR0YwWVZ0cFhTa2dKaUIyWVd4MVpTNWZaR0YwWVZ0cFhUdGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHk4dklFbHVkbVZ5ZEhNZ1lXeHNJR0pwZENCMllXeDFaWE1nYVc0Z2RHaGxJR04xY25KbGJuUWdZbWwwYzJWMFhHNGdJRzV2ZENodWIzUnBabmtnUFNCMGNuVmxLVG9nUW1sMFFYSnlZWGtnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd0xDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3pzZ2FTQThJR3hsYmpzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlINTBhR2x6TGw5a1lYUmhXMmxkTzF4dVhHNGdJQ0FnZEdocGN5NXBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNGdJSDFjYmx4dUlDQXZMeThnVUdWeVptOXliWE1nZEdobElHSnBkSGRwYzJVZ1QxSWdiM0JsY21GMGFXOXVJRzl1SUhSb1pTQmxiR1Z0Wlc1MGN5QnBiaUIwYUdVZ1kzVnljbVZ1ZENCaWFYUnpaWFJjYmlBZ0x5OHZJR0ZuWVdsdWMzUWdkR2hsSUdOdmNuSmxjM0J2Ym1ScGJtY2daV3hsYldWdWRITWdhVzRnZEdobElITndaV05wWm1sbFpDQmlhWFJ6WlhRdVhHNGdJRzl5S0haaGJIVmxPaUJDYVhSQmNuSmhlU3dnYm05MGFXWjVJRDBnZEhKMVpTa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxsOXNaVzVuZEdnZ0lUMGdkbUZzZFdVdVgyeGxibWQwYUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUVhKeVlYa2diR1Z1WjNSb2N5QmthV1ptWlhJdUp5azdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTUN3Z2JHVnVJRDBnZEdocGN5NXNaVzVuZEdoSmJrbHVkSE03SUdrZ1BDQnNaVzQ3SUdrckt5bGNiaUFnSUNBZ0lIUm9hWE11WDJSaGRHRmJhVjBnZkQwZ2RtRnNkV1V1WDJSaGRHRmJhVjA3WEc1Y2JpQWdJQ0IwYUdsekxtbHVZM0psYldWdWRGWmxjbk5wYjI0b2JtOTBhV1o1S1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJRWlhKbWIzSnRjeUIwYUdVZ1ltbDBkMmx6WlNCbGVHTnNkWE5wZG1VZ1QxSWdiM0JsY21GMGFXOXVJRzl1SUhSb1pTQmxiR1Z0Wlc1MGN5QnBiaUIwYUdVZ1kzVnljbVZ1ZENCaWFYUnpaWFJjYmlBZ0x5OHZJR0ZuWVdsdWMzUWdkR2hsSUdOdmNuSmxjM0J2Ym1ScGJtY2daV3hsYldWdWRITWdhVzRnZEdobElITndaV05wWm1sbFpDQmlhWFJ6WlhRdVhHNGdJSGh2Y2loMllXeDFaVG9nUW1sMFFYSnlZWGtzSUc1dmRHbG1lU0E5SUhSeWRXVXBJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZiR1Z1WjNSb0lDRTlJSFpoYkhWbExsOXNaVzVuZEdncFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBGeWNtRjVJR3hsYm1kMGFITWdaR2xtWm1WeUxpY3BPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHeGxiaUE5SUhSb2FYTXViR1Z1WjNSb1NXNUpiblJ6T3lCcElEd2diR1Z1T3lCcEt5c3BYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMmxkSUY0OUlIWmhiSFZsTGw5a1lYUmhXMmxkTzF4dVhHNGdJQ0FnZEdocGN5NXBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNGdJSDFjYmx4dUlDQXZMeThnU1c1elpYSjBjeUJ1SURBdFltbDBjeUJoZENCd2IzTnBkR2x2YmlCd2IzTXNJSEpsYzJsNmFXNW5JSE5sYkdZZ1lXNWtJSE5vYVdaMGFXNW5JR0pwZEhNZ1lYQndjbTl3Y21saGRHVnNlUzVjYmlBZ2FXNXpaWEowUVhRb2NHOXpPaUJ1ZFcxaVpYSXNJRzQ2SUc1MWJXSmxjaXdnWm14aFp5QTlJR1poYkhObEtUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWhjM04xY21WSmJsSmhibWRsS0hCdmN5d2dNQ3dnZEdocGN5NWZiR1Z1WjNSb0xDQW5jRzl6SnlrN1hHNWNiaUFnSUNCcFppQW9iaUE5UFNBd0tTQnlaWFIxY200N1hHNWNiaUFnSUNBdkwxUlBSRTg2SUc5d2RHbHRhWHBsWEc0Z0lDQWdMeTkwYUdVZ2JXOXpkQ0J3Y21sdGFYUnBkbVVnYVcxd2JHVnRaVzUwWVhScGIyNHNJRzl3ZEdsdGFYcGxJR2wwSUd4aGRHVnlJVnh1WEc0Z0lDQWdMeThnWW1WbmFXNVZjR1JoZEdVb0tUdGNiaUFnSUNCamIyNXpkQ0J2YkdSc1pXNW5kR2dnUFNCMGFHbHpMbDlzWlc1bmRHZzdYRzRnSUNBZ2RHaHBjeTV6WlhSTVpXNW5kR2dvZEdocGN5NWZiR1Z1WjNSb0lDc2diaWs3WEc1Y2JpQWdJQ0F2TDJsbUlDZ2hZMjl1ZEdGcGJuTW9JV1pzWVdjcEtTQnlaWFIxY200N0lDOHZJRzV2ZEdocGJtY2dkRzhnWkc5Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnZiR1JzWlc1bmRHZ2dMU0F4T3lCcElENDlJSEJ2Y3pzZ2FTMHRLVnh1SUNBZ0lDQWdkR2hwY3k1elpYUkNhWFFvYVNBcklHNHNJSFJvYVhNdVoyVjBRbWwwS0drcEtUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0J3YjNNN0lHa2dQQ0J3YjNNZ0t5QnVPeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbk5sZEVKcGRDaHBMQ0JtYkdGbktUdGNibHh1SUNBZ0lDOHZJR1Z1WkZWd1pHRjBaU2dwTzF4dUlDQjlYRzVjYmlBZ0x5OHZJRVJsYkdWMFpYTWdiaUJpYVhSeklHSmxaMmx1Ym1sdVp5QmhkQ0J3YjNOcGRHbHZiaUJ3YjNNc0lISmxjMmw2YVc1bklITmxiR1lnWVc1a0lITm9hV1owYVc1bklISmxiV0ZwYm1sdVoxeHVJQ0F2THk4Z1ltbDBjeUJoY0hCeWIzQnlhV0YwWld4NUxseHVJQ0J5WlcxdmRtVkJkQ2h3YjNNNklHNTFiV0psY2l3Z2JpQTlJREVwT2lCMmIybGtJSHRjYmlBZ0lDQXZMeUIwYUdVZ2JXOXpkQ0J3Y21sdGFYUnBkbVVnYVcxd2JHVnRaVzUwWVhScGIyNHNJRzl3ZEdsdGFYcGxJR2wwSUd4aGRHVnlJVnh1SUNBZ0lHbG1JQ2h1SUR3Z01DbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmJpQmpZVzV1YjNRZ1ltVWdibVZuWVhScGRtVW5LVHRjYmx4dUlDQWdJSFJvYVhNdVlYTnpkWEpsU1c1U1lXNW5aU2h3YjNNc0lEQXNJSFJvYVhNdVgyeGxibWQwYUNBdElHNHNJQ2R3YjNNbktUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtTnZiblJoYVc1ektIUnlkV1VwS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdjRzl6T3lCcElEd2dkR2hwY3k1ZmJHVnVaM1JvSUMwZ2Jqc2dhU3NyS1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbk5sZEVKcGRDaHBMQ0IwYUdsekxtZGxkRUpwZENocElDc2diaWtwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWMyVjBUR1Z1WjNSb0tIUm9hWE11WDJ4bGJtZDBhQ0F0SUc0cE8xeHVJQ0I5WEc1Y2JpQWdjbVZ0YjNabFFubE5ZWE5yS0cxaGMyczZJRUpwZEVGeWNtRjVMQ0JtYkdGbklEMGdkSEoxWlNrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHVnVaM1JvSUNFOUlHMWhjMnN1YkdWdVozUm9LVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHNaVzVuZEdnZ0lUMGdiV0Z6YXk1c1pXNW5kR2duS1R0Y2JseHVJQ0FnSUdsbUlDaHRZWE5ySUQwOUlIUm9hWE1wSUhzZ0x5OGdibThnYm1WbFpDQjBieUJwZEdWeVlYUmxYRzRnSUNBZ0lDQjBhR2x6TG5ObGRFeGxibWQwYUNodFlYTnJMbU52ZFc1MFFtbDBjeWdoWm14aFp5a3BPMXh1SUNBZ0lDQWdkR2hwY3k1elpYUkJiR3dvSVdac1lXY3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCc1pYUWdaSE4wU1dSNElEMGdNRHRjYmx4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYzNKalNXUjRJRDBnTFRFN0lDaHpjbU5KWkhnZ1BTQnRZWE5yTG1acGJtUk9aWGgwS0hOeVkwbGtlQ3dnSVdac1lXY3BLU0FoUFNBdE1Uc3BYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBSbUZ6ZENoa2MzUkpaSGdyS3l3Z2RHaHBjeTVuWlhSQ2FYUW9jM0pqU1dSNEtTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgyeGxibWQwYUNBOUlHUnpkRWxrZUR0Y2JpQWdJQ0FnSUhSb2FYTXVYM1psY25OcGIyNHJLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlRhVzFwYkdGeUlIUnZJSFJvWlNCYlhTQnZjR1Z5WVhSdmNpNWNiaUFnWjJWMFFtbDBLSEJ2Y3pvZ2JuVnRZbVZ5S1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnY21WMGRYSnVJQ2gwYUdsekxsOWtZWFJoVzAxaGRHZ3VabXh2YjNJb2NHOXpJQzhnTUhneU1DbGRJQ1lnS0RFZ1BEd2dLSEJ2Y3lBbUlEQjRNV1lwS1NrZ0lUMGdNRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlRhVzFwYkdGeUlIUnZJSFJvWlNCYlhTQnZjR1Z5WVhSdmNpNWNiaUFnYzJWMFFtbDBLSEJ2Y3pvZ2JuVnRZbVZ5TENCaWFYUTZJR0p2YjJ4bFlXNHNJRzV2ZEdsbWVTQTlJSFJ5ZFdVcElIdGNiaUFnSUNCMGFHbHpMbk5sZEVaaGMzUW9jRzl6TENCaWFYUXBPMXh1SUNBZ0lHbG1JQ2h1YjNScFpua3BYRzRnSUNBZ0lDQjBhR2x6TGw5MlpYSnphVzl1S3lzN1hHNGdJQ0FnWld4elpWeHVJQ0FnSUNBZ2RHaHBjeTVmZG1WeWMybHZiaXNyTzF4dUlDQjlYRzVjYmlBZ0x5OHZJRk5sZEhNZ1cybGRMWFJvSUdKcGRDQjBieUJiZG1Gc2RXVmRMQ0JrYjJWeklHNXZkQ0JqYUdWamF5QmliM1Z1WkhNc0lHUnZaWE1nYm05MElHbHVZM0psYldWdWRDQjJaWEp6YVc5dVhHNGdJSE5sZEVaaGMzUW9hVG9nYm5WdFltVnlMQ0IyWVd4MVpUb2dZbTl2YkdWaGJpazZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDaDJZV3gxWlNsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYlRXRjBhQzVtYkc5dmNpaHBJQzhnTUhneU1DbGRJSHc5SURFZ1BEd2dLR2tnSmlBd2VERm1LVHRjYmlBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0IwYUdsekxsOWtZWFJoVzAxaGRHZ3VabXh2YjNJb2FTQXZJREI0TWpBcFhTQW1QU0IrS0RFZ1BEd2dLR2tnSmlBd2VERm1LU2s3WEc0Z0lIMWNibHh1SUNCelpYUlVjblZsS0hCdmN6b2diblZ0WW1WeUtUb2dkbTlwWkNCN1hHNGdJQ0FnZEdocGN5NWZaR0YwWVZ0TllYUm9MbVpzYjI5eUtIQnZjeUF2SURCNE1qQXBYU0I4UFNBeElEdzhJQ2h3YjNNZ0ppQXdlREZtS1R0Y2JpQWdmVnh1WEc0Z0lITmxkRVpoYkhObEtIQnZjem9nYm5WdFltVnlLU0I3WEc0Z0lDQWdkR2hwY3k1ZlpHRjBZVnROWVhSb0xtWnNiMjl5S0hCdmN5QXZJREI0TWpBcFhTQW1QU0IrS0RFZ1BEd2dLSEJ2Y3lBbUlEQjRNV1lwS1R0Y2JpQWdmVnh1WEc0Z0lIUnlkV1ZEYjNWdWRDZ3BPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU52ZFc1MFFtbDBjeWgwY25WbEtUdGNiaUFnZlZ4dVhHNGdJR1poYkhObFEyOTFiblFvS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIzVnVkRUpwZEhNb1ptRnNjMlVwTzF4dUlDQjlYRzVjYmlBZ0x5OHZJRU52ZFc1MGN5QmlhWFJ6SUc5bUlIUm9aU0J6Y0dWamFXWnBaV1FnZG1Gc2RXVXVYRzRnSUdOdmRXNTBRbWwwY3loMllXeDFaVG9nWW05dmJHVmhiaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQTlQU0F3S1NCeVpYUjFjbTRnTUR0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TGw5elpXeGxZM1JsWkVOdmRXNTBWbVZ5YzJsdmJpQWhQU0IwYUdsekxsOTJaWEp6YVc5dUtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5elpXeGxZM1JsWkVOdmRXNTBJRDBnTUR0Y2JpQWdJQ0FnSUdOdmJuTjBJR3hsYmlBOUlIUm9hWE11YkdWdVozUm9TVzVKYm5Sek8xeHVJQ0FnSUNBZ2JHVjBJR2tnUFNBd08xeHVJQ0FnSUNBZ1ptOXlJQ2c3SUdrZ1BDQnNaVzRnTFNBeE95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2F5QTlJSFJvYVhNdVgyUmhkR0ZiYVYwN0lHc2dJVDBnTURzZ2F5QStQajQ5SURncElIc2dMeTkwYjJSdk9pQmpZWE4wSUdSaGRHRmJhVjBnZEc4Z2RXbHVkRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM05sYkdWamRHVmtRMjkxYm5RZ0t6MGdRbWwwUVhKeVlYa3VYMjl1UW1sMFEyOTFiblJiYXlBbUlEQjRabVpkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRlJvWlNCc1lYTjBJR2x1ZEM1Y2JpQWdJQ0FnSUd4bGRDQnJJRDBnZEdocGN5NWZaR0YwWVZ0cFhUdGNiaUFnSUNBZ0lHTnZibk4wSUhKbGJXRnBibWx1WjBKcGRITWdQU0IwYUdsekxsOXNaVzVuZEdnZ0ppQXdlREZtTzF4dUlDQWdJQ0FnYVdZZ0tISmxiV0ZwYm1sdVowSnBkSE1nSVQwZ01Da2dMeW9nYVdZZ2NtVnRZV2x1YVc1blFtbDBjeUE5UFNBd0xDQjBhR1VnYkdGemRDQnBiblFnYVhNZ1puVnNiSGtnZFhObFpDQmhibVFnUVV4TUlHSnBkSE1nYzJodmRXeGtJR0psSUd4bFpuUWdZWE1nYVhNZ0tpOWNiaUFnSUNBZ0lDQWdheUFtUFNCK0tDZzBNamswT1RZM01qazFLU0E4UENCeVpXMWhhVzVwYm1kQ2FYUnpLVHRjYmx4dUlDQWdJQ0FnWm05eUlDZzdJR3NnSVQwZ01Ec2dheUErUGo0OUlEZ3BYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblFnS3owZ1FtbDBRWEp5WVhrdVgyOXVRbWwwUTI5MWJuUmJheUFtSURCNFptWmRPMXh1WEc0Z0lDQWdJQ0IwYUdsekxsOXpaV3hsWTNSbFpFTnZkVzUwVm1WeWMybHZiaUE5SUhSb2FYTXVYM1psY25OcGIyNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUNoMllXeDFaU0EvSUhSb2FYTXVYM05sYkdWamRHVmtRMjkxYm5RZ09pQjBhR2x6TGw5c1pXNW5kR2dnTFNCMGFHbHpMbDl6Wld4bFkzUmxaRU52ZFc1MEtUdGNiaUFnZlZ4dVhHNGdJQzh2THlCU1pYUjFjbTV6SUdFZ2JuVnRZbVZ5SUc5bUlITmxkQ0JpYVhSeklIZG9aWEpsSUdGc2MyOGdXMk5vWldOclhTQnBjeUIwY25WbFhHNGdJR052ZFc1MFYyaGxjbVVvWTJobFkyczZJRVoxYm1OMGFXOXVLVG9nYm5WdFltVnlJSHRjYmlBZ0lDQnNaWFFnY21WemRXeDBJRDBnTUR0Y2JpQWdJQ0JwWmlBb2RHaHBjeTUwY25WbFEyOTFiblFvS1NBOVBTQjBhR2x6TGw5c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHaHBjeTVmYkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNBZ0lISmxjM1ZzZENBclBTQmphR1ZqYXlocEtTQS9JREVnT2lBd08xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ0xURTdJQ2hwSUQwZ2RHaHBjeTVtYVc1a1RtVjRkQ2hwTENCMGNuVmxLU2tnSVQwZ0xURTdLVnh1SUNBZ0lDQWdJQ0J5WlhOMWJIUWdLejBnWTJobFkyc29hU2tnUHlBeElEb2dNRHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlFaWEptYjNKdGN5QmlhWFFnWENKaGJtUmNJaUJoYm1RZ1kyOTFiblJ6SUdKcGRITWdiMllnZEdobElITndaV05wWm1sbFpDQjJZV3gxWlN3Z2QybDBhRzkxZENCaWFYUnpaWFFnYlc5a2FXWnBZMkYwYVc5dUxseHVJQ0JoYm1SWGFYUm9RMjkxYm5SQ2FYUnpLSE5sWTI5dVpEb2dRbWwwUVhKeVlYa3NJSFpoYkhWbE9pQmliMjlzWldGdUtUb2diblZ0WW1WeUlIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHVnVaM1JvSUQwOUlEQXBJSEpsZEhWeWJpQXdPMXh1WEc0Z0lDQWdiR1YwSUdOdmRXNTBJRDBnTUR0Y2JpQWdJQ0JqYjI1emRDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3p0Y2JpQWdJQ0JzWlhRZ2FTQTlJREE3WEc0Z0lDQWdabTl5SUNnN0lHa2dQQ0JzWlc0Z0xTQXhPeUJwS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHc2dQU0IwYUdsekxsOWtZWFJoVzJsZElDWWdjMlZqYjI1a0xsOWtZWFJoVzJsZE95QnJJQ0U5SURBN0lHc2dQajQrUFNBNEtWeHVJQ0FnSUNBZ0lDQmpiM1Z1ZENBclBTQkNhWFJCY25KaGVTNWZiMjVDYVhSRGIzVnVkRnRySUNZZ01IaG1abDA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVkdobElHeGhjM1FnYVc1MExseHVJQ0FnSUd4bGRDQnJJRDBnZEdocGN5NWZaR0YwWVZ0cFhTQW1JSE5sWTI5dVpDNWZaR0YwWVZ0cFhUdGNiaUFnSUNCamIyNXpkQ0J5WlcxaGFXNXBibWRDYVhSeklEMGdkR2hwY3k1ZmJHVnVaM1JvSUNZZ01IZ3haanRjYmlBZ0lDQnBaaUFvY21WdFlXbHVhVzVuUW1sMGN5QWhQU0F3S1Z4dUlDQWdJQ0FnYXlBbVBTQitLQ2cwTWprME9UWTNNamsxS1NBOFBDQnlaVzFoYVc1cGJtZENhWFJ6S1R0Y2JpQWdJQ0JtYjNJZ0tEc2dheUFoUFNBd095QnJJRDQrUGowZ09DbGNiaUFnSUNBZ0lHTnZkVzUwSUNzOUlFSnBkRUZ5Y21GNUxsOXZia0pwZEVOdmRXNTBXMnNnSmlBd2VHWm1YVHRjYmx4dUlDQWdJSEpsZEhWeWJpQW9kbUZzZFdVZ1B5QmpiM1Z1ZENBNklIUm9hWE11WDJ4bGJtZDBhQ0F0SUdOdmRXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdOc1pXRnlLQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11YzJWMFRHVnVaM1JvS0RBcE8xeHVJQ0I5WEc1Y2JpQWdZMjl1ZEdGcGJuTW9kbUZzZFdVNklHSnZiMnhsWVc0cE9pQmliMjlzWldGdUlIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW1hVzVrVG1WNGRDZ3RNU3dnZG1Gc2RXVXBJRDQ5SURBN1hHNGdJSDFjYmx4dUlDQm5aWFFnWVd4c1ZISjFaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIzVnVkRUpwZEhNb2RISjFaU2tnUFQwZ2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNWNiaUFnWjJWMElHRnNiRVpoYkhObEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU52ZFc1MFFtbDBjeWhtWVd4elpTa2dQVDBnZEdocGN5NWZiR1Z1WjNSb08xeHVJQ0I5WEc1Y2JpQWdaMlYwSUdGdWVWUnlkV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVkyOTFiblJDYVhSektIUnlkV1VwSUQ0Z01EdGNiaUFnZlZ4dVhHNGdJR2RsZENCaGJubEdZV3h6WlNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWpiM1Z1ZEVKcGRITW9abUZzYzJVcElENGdNRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlNaWFIxY201eklIUm9aU0J3YjNOcGRHbHZiaUJ2WmlCMGFHVWdibVY0ZENCaWFYUWdiMllnZEdobElITndaV05wWm1sbFpDQjJZV3gxWlN3Z2MzUmhjblJwYm1jZ1puSnZiU0IwYUdVZ2MzQmxZMmxtYVdWa0lIQnZjMmwwYVc5dUxseHVJQ0F2THk4Z1VtVjBkWEp1Y3lBdE1Td2dhV1lnZEdobGNtVWdZWEpsSUc1dklITjFZMmdnWW1sMGN5NWNiaUFnWm1sdVpFNWxlSFFvYVc1a1pYZzZJRzUxYldKbGNpd2dkbUZzZFdVZ1BTQjBjblZsS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvYVc1a1pYZ3NJQzB4TENCMGFHbHpMbDlzWlc1bmRHZ3NJQ2RwYm1SbGVDY3BPMXh1WEc0Z0lDQWdhV1lnS0dsdVpHVjRJRDQ5SUhSb2FYTXVYMnhsYm1kMGFDQXRJREVwSUhKbGRIVnliaUF0TVR0Y2JpQWdJQ0JwYm1SbGVDQTlJR2x1WkdWNElEd2dNQ0EvSURBZ09pQnBibVJsZUNBcklERTdJQzh2SUhOcmFYQWdjM1JoY25SY2JpQWdJQ0JzWlhRZ2RXNTFjMlZrUW1sMGN5QTlJR2x1WkdWNElDWWdNSGd4Wmp0Y2JpQWdJQ0JqYjI1emRDQnVkVzFKYm5SeklEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnVFdGMGFDNW1iRzl2Y2locGJtUmxlQ0F2SURNeUtUc2dhU0E4SUc1MWJVbHVkSE03SUdrckt5a2dlMXh1SUNBZ0lDQWdiR1YwSUdzZ1BTQW9kbUZzZFdVZ1B5QjBhR2x6TGw5a1lYUmhXMmxkSURvZ2ZuUm9hWE11WDJSaGRHRmJhVjBwT3lBdkx5QjFhVzUwSUdOaGMzUmNiaUFnSUNBZ0lHbG1JQ2gxYm5WelpXUkNhWFJ6SUNFOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnYXlBbVBTQW9LREI0Wm1abVptWm1abVlnUER3Z2RXNTFjMlZrUW1sMGN5a2dKaUF3ZUdabVptWm1abVptS1R0Y2JpQWdJQ0FnSUNBZ2RXNTFjMlZrUW1sMGN5QTlJREE3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0NGMllXeDFaU0FtSmlCcklEMDlJQzAwTWprME9UWTNNamsyS1NBdktpQnNiMjlyYVc1bklHWnZjaUJtWVd4elpTd2dZV3hzSUdKcGRITWdZWEpsSUhObGRDQXFMM3RjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXdPeUJySUNFOUlEQTdJR29nS3owZ09Dd2dheUErUGo0OUlEZ3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjQ0E5SUVKcGRFRnljbUY1TGw5bWFYSnpkRTl1UW1sMFcyc2dKaUF3ZUdabVhUdGNiaUFnSUNBZ0lDQWdhV1lnS0hBZ1BqMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbHVaR1Y0SUQwZ2NDQXJJQ2hwSUNvZ016SXBJQ3NnYWp0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYVc1a1pYZ2dQajBnZEdocGN5NWZiR1Z1WjNSb0tTQnlaWFIxY200Z0xURTdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2x1WkdWNE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUF0TVR0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJHYVc1a2N5QndjbVYyYVc5MWN5QmlhWFFnYjJZZ2RHaGxJSE53WldOcFptbGxaQ0IyWVd4MVpTQnBiaUIwYUdVZ1ltbDBjMlYwTGx4dUlDQm1hVzVrVUhKbGRpaHBibVJsZURvZ2JuVnRZbVZ5TENCMllXeDFaU0E5SUhSeWRXVXBPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lHbG1JQ2hwYm1SbGVDQTlQU0F3S1NCeVpYUjFjbTRnTFRFN1hHNGdJQ0FnZEdocGN5NWhjM04xY21WSmJsSmhibWRsS0dsdVpHVjRMQ0F0TVN3Z2RHaHBjeTVmYkdWdVozUm9MQ0FuYVc1a1pYZ25LVHRjYmx4dUlDQWdJR2x1WkdWNElEMGdhVzVrWlhnZ1BDQXdJRDhnZEdocGN5NWZiR1Z1WjNSb0lDMGdNU0E2SUdsdVpHVjRJQzBnTVRzZ0x5OGdjMnRwY0NCemRHRnlkRnh1WEc0Z0lDQWdZMjl1YzNRZ2JHRnpkRWx1ZEVsa2VDQTlJRTFoZEdndVpteHZiM0lvYVc1a1pYZ2dMeUF3ZURJd0tUdGNiaUFnSUNCc1pYUWdjbVZ0WVdsdWFXNW5RbWwwY3lBOUlDaHBibVJsZUNBcklERXBJQ1lnTUhneFpqdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0JzWVhOMFNXNTBTV1I0T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdiR1YwSUdzZ1BTQW9kbUZzZFdVZ1B5QjBhR2x6TGw5a1lYUmhXMmxkSURvZ2ZuUm9hWE11WDJSaGRHRmJhVjBwT3lBdkx5QmpZWE4wWEc0Z0lDQWdJQ0JwWmlBb2NtVnRZV2x1YVc1blFtbDBjeUFoUFNBd0tTQjdYRzRnSUNBZ0lDQWdJR3NnSmowZ2ZpZ29OREk1TkRrMk56STVOU2tnUER3Z2NtVnRZV2x1YVc1blFtbDBjeWs3WEc0Z0lDQWdJQ0FnSUhKbGJXRnBibWx1WjBKcGRITWdQU0F3TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYWlBOUlESTBPeUJySUNFOUlEQTdJR29nTFQwZ09Dd2dheUE4UEQwZ09Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndJRDBnUW1sMFFYSnlZWGt1WDJ4aGMzUlBia0pwZEZ0cklENCtQaUF3ZURFNFhUdGNiaUFnSUNBZ0lDQWdhV1lnS0hBZ1BqMGdNQ2xjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY0NBcklDaHBJQ29nTXpJcElDc2dhanRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUMweE8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICcuL2JpdC1hcnJheSc7XG5leHBvcnQgdmFyIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZTtcbihmdW5jdGlvbiAoU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlKSB7XG4gICAgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlW1wibm9uZVwiXSA9IFwibm9uZVwiO1xuICAgIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZVtcImJvbGRcIl0gPSBcImJvbGRcIjtcbiAgICBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGVbXCJkYXNoZWRcIl0gPSBcImRhc2hlZFwiO1xufSkoU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlIHx8IChTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFNjYXR0ZXJQbG90TGluZXNSZW5kZXJlciB7XG4gICAgZ2V0IGN1cnJlbnRMaW5lSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZUlkeDtcbiAgICB9XG4gICAgc2V0IGN1cnJlbnRMaW5lSWQoaWQpIHtcbiAgICAgICAgaWYgKGlkICE9PSB0aGlzLl9jdXJyZW50TGluZUlkeCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudExpbmVJZHggPSBpZDtcbiAgICAgICAgICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgbGluZXNUb1JlbmRlcihsaW5lcykge1xuICAgICAgICB0aGlzLnVwZGF0ZUxpbmVzKGxpbmVzKTtcbiAgICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgIH1cbiAgICBzZXQgbGluZXNWaXNpYmlsaXR5KHZpc2liaWxpdHkpIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzcCwgeEF4aXMsIHlBeGlzLCBsaW5lcywgY3VycmVudExpbmVTdHlsZSA9IFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ub25lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5fY3VycmVudExpbmVJZHggPSAtMTtcbiAgICAgICAgdGhpcy5saW5lQ2xpY2tlZCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMubGluZUhvdmVyID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5tb3VzZU92ZXJMaW5lSWQgPSAtMTtcbiAgICAgICAgdGhpcy5hcnJvd1dpZHRoID0gMTU7XG4gICAgICAgIHRoaXMuc3AgPSBzcDtcbiAgICAgICAgdGhpcy54QXhpc0NvbCA9IHRoaXMuc3AuZGF0YUZyYW1lLmNvbHVtbnMuYnlOYW1lKHhBeGlzKTtcbiAgICAgICAgdGhpcy55QXhpc0NvbCA9IHRoaXMuc3AuZGF0YUZyYW1lLmNvbHVtbnMuYnlOYW1lKHlBeGlzKTtcbiAgICAgICAgdGhpcy5jYW52YXMgPSB0aGlzLnNwLmdldEluZm8oKVsnY2FudmFzJ107XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TGluZVN0eWxlID0gY3VycmVudExpbmVTdHlsZTtcbiAgICAgICAgdGhpcy51cGRhdGVMaW5lcyhsaW5lcyk7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eSA9IChfYSA9IGxpbmVzLnZpc2liaWxpdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBCaXRBcnJheSh0aGlzLmxpbmVzLmZyb20ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFsaW5lcy52aXNpYmlsaXR5KVxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5LnNldEFsbCh0cnVlLCBmYWxzZSk7XG4gICAgICAgIGlmIChsaW5lcy5hcnJvd1NpemUpXG4gICAgICAgICAgICB0aGlzLmFycm93V2lkdGggPSBsaW5lcy5hcnJvd1NpemU7XG4gICAgICAgIHRoaXMuY2FudmFzLm9ubW91c2Vkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICAgICAgICAgIHRoaXMubGluZUNsaWNrZWQubmV4dCh7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIGlkOiB0aGlzLm1vdXNlT3ZlckxpbmVJZCwgZXZlbnQ6IGV2ZW50IH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNhbnZhcy5vbm1vdXNlbW92ZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZU92ZXJMaW5lSWQgPSB0aGlzLmNoZWNrQ29vcmRzT25MaW5lKGV2ZW50Lm9mZnNldFgsIGV2ZW50Lm9mZnNldFkpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW91c2VPdmVyTGluZUlkICE9PSAtMSlcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVIb3Zlci5uZXh0KHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSwgaWQ6IHRoaXMubW91c2VPdmVyTGluZUlkLCBldmVudDogZXZlbnQgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHNwLm9uRXZlbnQoJ2Q0LWJlZm9yZS1kcmF3LXNjZW5lJylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyTGluZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZUxpbmVzKGxpbmVzKSB7XG4gICAgICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgICAgIGlmICghbGluZXMuc2tpcE11bHRpTGluZUNhbGN1bGF0aW9uKVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNdWx0aUxpbmVzSW5kaWNlcygpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHMuZmlsbCgwKTtcbiAgICB9XG4gICAgcmVuZGVyTGluZXMoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tLCBfbztcbiAgICAgICAgY29uc3Qgc3BMb29rID0gdGhpcy5zcC5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgY29uc3QgaW5kaXZpZHVhbExpbmVTdHlsZXMgPSB0aGlzLmxpbmVzLmNvbG9ycyB8fCB0aGlzLmxpbmVzLndpZHRoIHx8IHRoaXMubGluZXMub3BhY2l0aWVzIHx8IHRoaXMubGluZXMuZHJhd0Fycm93c0FycjtcbiAgICAgICAgaWYgKCFpbmRpdmlkdWFsTGluZVN0eWxlcykge1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gKF9hID0gdGhpcy5saW5lcy53aWR0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gYHJnYmEoJHsoX2IgPSB0aGlzLmxpbmVzLmNvbG9yKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnMCwxMjgsMCd9LCR7KF9jID0gdGhpcy5saW5lcy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAxfSlgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcmtlclNpemVDb2wgPSBzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10gPyB0aGlzLnNwLmRhdGFGcmFtZS5jb2woc3BMb29rWydzaXplQ29sdW1uTmFtZSddKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3AuZGF0YUZyYW1lLmZpbHRlcjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkgJiYgZmlsdGVyLmdldCh0aGlzLmxpbmVzLnRvW2ldKSAmJiB0aGlzLnZpc2liaWxpdHkuZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmVMZW4gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2l6ZUZyb20sIHNpemVUbyB9ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludEZyb20gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSk7XG4gICAgICAgICAgICAgICAgbGV0IGFYID0gcG9pbnRGcm9tID09PSBudWxsIHx8IHBvaW50RnJvbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9pbnRGcm9tLng7XG4gICAgICAgICAgICAgICAgbGV0IGFZID0gcG9pbnRGcm9tID09PSBudWxsIHx8IHBvaW50RnJvbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9pbnRGcm9tLnk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICAgICAgICAgIGxldCBiWCA9IHBvaW50VG8gPT09IG51bGwgfHwgcG9pbnRUbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9pbnRUby54O1xuICAgICAgICAgICAgICAgIGxldCBiWSA9IHBvaW50VG8gPT09IG51bGwgfHwgcG9pbnRUbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcG9pbnRUby55O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkF4aXMgPSBNYXRoLm1pbih0aGlzLnNwLnZpZXdCb3gud2lkdGgsIHRoaXMuc3Audmlld0JveC5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChhWCAmJiBhWSAmJiBiWCAmJiBiWSAmJiBNYXRoLmh5cG90KGJYIC0gYVgsIGJZIC0gYVkpIC8gbWluQXhpcyA+IDAuMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGl2aWR1YWxMaW5lU3R5bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9ICgoX2QgPSB0aGlzLmxpbmVzLmNvbG9ycykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kW2ldKSA/IChfZSA9IHRoaXMubGluZXMuY29sb3JzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2VbaV0gOiAnMCwxMjgsMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gKChfZiA9IHRoaXMubGluZXMub3BhY2l0aWVzKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ZbaV0pID8gKF9nID0gdGhpcy5saW5lcy5vcGFjaXRpZXMpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ1tpXSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGByZ2JhKCR7Y29sb3J9LCR7b3BhY2l0eX0pYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9ICgoX2ggPSB0aGlzLmxpbmVzLndpZHRocykgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oW2ldKSA/IChfaiA9IHRoaXMubGluZXMud2lkdGhzKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2pbaV0gOiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLl9jdXJyZW50TGluZUlkeClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VycmVudExpbmVTdHlsZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlMaW5lcyA9IHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRyb2xQb2ludCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKGFYLCBhWSwgYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9pbnRXaXRoTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYVgsIGFZLCBiWCwgYlksIHNpemVUbywgbGluZUxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmR0UG9pbnRXaXRoTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYlgsIGJZLCBhWCwgYVksIHNpemVGcm9tLCBsaW5lTGVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFYID0gc3RhcnRQb2ludFdpdGhNYXJrZXIueDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFZID0gc3RhcnRQb2ludFdpdGhNYXJrZXIueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJYID0gZW5kdFBvaW50V2l0aE1hcmtlci54O1xuICAgICAgICAgICAgICAgICAgICAgICAgYlkgPSBlbmR0UG9pbnRXaXRoTWFya2VyLnk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sUG9pbnQgPSB0aGlzLmxpbmVzLmZyb21baV0gPiB0aGlzLmxpbmVzLnRvW2ldID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQobXVsdGlMaW5lcywgYVgsIGFZLCBiWCwgYlksIGkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQobXVsdGlMaW5lcywgYlgsIGJZLCBhWCwgYVksIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKGFYLCBhWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhhWCwgYVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKGJYLCBiWSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKChfayA9IHRoaXMubGluZXMuZHJhd0Fycm93cykgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogKF9sID0gdGhpcy5saW5lcy5kcmF3QXJyb3dzQXJyKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmVMZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUxlbiA9IHRoaXMuZ2V0TGluZUxlbmd0aChhWCwgYVksIGJYLCBiWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZUxlbiA+IHRoaXMuYXJyb3dXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycm93UG9pbnQgPSAhbXVsdGlMaW5lcyA/IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKGFYLCBhWSwgYlgsIGJZLCBzaXplVG8sIGxpbmVMZW4pIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJvd0NQWCA9IG11bHRpTGluZXMgPyBjb250cm9sUG9pbnQueCA6IGFYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycm93Q1BZID0gbXVsdGlMaW5lcyA/IGNvbnRyb2xQb2ludC55IDogYVk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXNBcnJvdyh0aGlzLmN0eCwgKF9tID0gYXJyb3dQb2ludCA9PT0gbnVsbCB8fCBhcnJvd1BvaW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcnJvd1BvaW50LngpICE9PSBudWxsICYmIF9tICE9PSB2b2lkIDAgPyBfbSA6IGFYLCAoX28gPSBhcnJvd1BvaW50ID09PSBudWxsIHx8IGFycm93UG9pbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFycm93UG9pbnQueSkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogYVksIGFycm93Q1BYLCBhcnJvd0NQWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gdGhpcy5fY3VycmVudExpbmVJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGxMZWZ0Qm90dG9tUmVjdCgpO1xuICAgIH1cbiAgICB0b2dnbGVDdXJyZW50TGluZVN0eWxlKGZsYWcpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRMaW5lU3R5bGUpIHtcbiAgICAgICAgICAgIGNhc2UgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLmJvbGQ6IHtcbiAgICAgICAgICAgICAgICBmbGFnID8gdGhpcy5jdHgubGluZVdpZHRoICs9IDIgOiB0aGlzLmN0eC5saW5lV2lkdGggLT0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLmRhc2hlZDoge1xuICAgICAgICAgICAgICAgIGZsYWcgPyB0aGlzLmN0eC5zZXRMaW5lRGFzaChbNSwgNV0pIDogdGhpcy5jdHguc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TWFya2Vyc1NpemVzKHNwTG9vaywgbWFya2VyU2l6ZUNvbCwgaSkge1xuICAgICAgICBsZXQgc2l6ZUZyb20gPSAzO1xuICAgICAgICBsZXQgc2l6ZVRvID0gMztcbiAgICAgICAgaWYgKG1hcmtlclNpemVDb2wpIHtcbiAgICAgICAgICAgIHNpemVGcm9tID0gKHNwTG9vay5tYXJrZXJNaW5TaXplICsgKHNwTG9vay5tYXJrZXJNYXhTaXplIC0gc3BMb29rLm1hcmtlck1pblNpemUpICogbWFya2VyU2l6ZUNvbC5zY2FsZSh0aGlzLmxpbmVzLmZyb21baV0pKSAvIDI7XG4gICAgICAgICAgICBzaXplVG8gPSAoc3BMb29rLm1hcmtlck1pblNpemUgKyAoc3BMb29rLm1hcmtlck1heFNpemUgLSBzcExvb2subWFya2VyTWluU2l6ZSkgKiBtYXJrZXJTaXplQ29sLnNjYWxlKHRoaXMubGluZXMudG9baV0pKSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3BMb29rLm1hcmtlckRlZmF1bHRTaXplKSB7XG4gICAgICAgICAgICBzaXplRnJvbSA9IHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSAvIDI7XG4gICAgICAgICAgICBzaXplVG8gPSBzcExvb2subWFya2VyRGVmYXVsdFNpemUgLyAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNpemVGcm9tLCBzaXplVG8gfTtcbiAgICB9XG4gICAgZmlsbExlZnRCb3R0b21SZWN0KCkge1xuICAgICAgICBjb25zdCByZWN0ID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICByZWN0LnJlY3QodGhpcy5zcC55QXhpc0JveC5taW5YLCB0aGlzLnNwLnlBeGlzQm94Lm1heFksIHRoaXMuc3AueUF4aXNCb3gud2lkdGgsIHRoaXMuc3AueEF4aXNCb3guaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gYHdoaXRlYDtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGwocmVjdCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgIH1cbiAgICBjcmVhdGVNdWx0aUxpbmVzSW5kaWNlcygpIHtcbiAgICAgICAgY29uc3QgYXJyYXlJZHhzQml0QXJyYXkgPSBuZXcgQml0QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgICAgIGFycmF5SWR4c0JpdEFycmF5LnNldEFsbCh0cnVlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IC0xOyAoaSA9IGFycmF5SWR4c0JpdEFycmF5LmZpbmROZXh0KGkpKSAhPT0gLTE7KSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmVJZHggPSBpO1xuICAgICAgICAgICAgY29uc3QgcDEgPSB0aGlzLmxpbmVzLmZyb21bZmlyc3RMaW5lSWR4XTtcbiAgICAgICAgICAgIGNvbnN0IHAyID0gdGhpcy5saW5lcy50b1tmaXJzdExpbmVJZHhdO1xuICAgICAgICAgICAgbGV0IGxpbmVzUGVyUGFpciA9IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaTsgKGogPSBhcnJheUlkeHNCaXRBcnJheS5maW5kTmV4dChqKSkgIT09IC0xOykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VG9Db21wYXJlMSA9IHRoaXMubGluZXMuZnJvbVtqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludFRvQ29tcGFyZTIgPSB0aGlzLmxpbmVzLnRvW2pdO1xuICAgICAgICAgICAgICAgIGlmIChwb2ludFRvQ29tcGFyZTEgPT09IHAxICYmIHBvaW50VG9Db21wYXJlMiA9PT0gcDIgfHxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRUb0NvbXBhcmUyID09PSBwMSAmJiBwb2ludFRvQ29tcGFyZTEgPT09IHAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tqXSA9ICsrbGluZXNQZXJQYWlyO1xuICAgICAgICAgICAgICAgICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRCaXQoaiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGluZXNQZXJQYWlyID4gMSlcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbZmlyc3RMaW5lSWR4XSA9IDE7XG4gICAgICAgICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRCaXQoaSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Nvb3Jkc09uTGluZSh4LCB5KSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGVJZHggPSAtMTtcbiAgICAgICAgbGV0IG1pbkRpc3QgPSBudWxsO1xuICAgICAgICBsZXQgZGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNwTG9vayA9IHRoaXMuc3AuZ2V0T3B0aW9ucygpLmxvb2s7XG4gICAgICAgIGNvbnN0IG1hcmtlclNpemVDb2wgPSBzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10gPyB0aGlzLnNwLmRhdGFGcmFtZS5jb2woc3BMb29rWydzaXplQ29sdW1uTmFtZSddKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3AuZGF0YUZyYW1lLmZpbHRlcjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkgJiYgZmlsdGVyLmdldCh0aGlzLmxpbmVzLnRvW2ldKSAmJiB0aGlzLnZpc2liaWxpdHkuZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzaXplRnJvbSwgc2l6ZVRvIH0gPSB0aGlzLmdldE1hcmtlcnNTaXplcyhzcExvb2ssIG1hcmtlclNpemVDb2wsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBGcm9tID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21NYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShwRnJvbS54LCBwRnJvbS55LCBwVG8ueCwgcFRvLnksIHNpemVUbywgbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9NYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShwVG8ueCwgcFRvLnksIHBGcm9tID09PSBudWxsIHx8IHBGcm9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwRnJvbS54LCBwRnJvbSA9PT0gbnVsbCB8fCBwRnJvbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcEZyb20ueSwgc2l6ZUZyb20sIGxlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSwgZnJvbU1hcmtlci54LCBmcm9tTWFya2VyLnksIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludCh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0sIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGZyb21NYXJrZXIueCwgZnJvbU1hcmtlci55LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzdCA9IHRoaXMuY2FsY3VsYXRlRGlzdFRvQ3VydmVMaW5lKGksIHgsIHksIGZyb21NYXJrZXIsIHRvTWFya2VyLCBjb250cm9sUG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdCA9IHRoaXMuY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHgsIHksIHBGcm9tLCBwVG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKCFtaW5EaXN0ICYmIGRpc3QgIT09IG51bGwgJiYgZGlzdCA8IDUpIHx8IG1pbkRpc3QgJiYgZGlzdCAhPT0gbnVsbCAmJiBkaXN0IDwgbWluRGlzdCkge1xuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0ID0gZGlzdDtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlSWR4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUlkeDtcbiAgICB9XG4gICAgY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHgsIHksIHAxLCBwMikge1xuICAgICAgICAvKiBjYWxjdWxhdGluZyBjb29yZGluYXRlcyBvZiBhIHJlY3QgYXJvdW5kIGEgbGluZS4gSWYgY3Vyc29yIGNvb3JkcyBhcmUgb3V0c2lkZSB0aGlzIHJlY3QgLSBhc3N1bWUgdGhhdFxuICAgICAgICAgICAgcG9pbnQgaXMgbm90IG9uIGxpbmUgYW5kIGRvIG5vdCBjYWxjdWxhdGUgZGlzdGFuY2UgdG8gbGluZSAqL1xuICAgICAgICBjb25zdCB4TWluID0gTWF0aC5taW4ocDEueCwgcDIueCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBNYXRoLm1heChwMS54LCBwMi54KTtcbiAgICAgICAgY29uc3QgeU1pbiA9IE1hdGgubWluKHAxLnksIHAyLnkpO1xuICAgICAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgocDEueSwgcDIueSk7XG4gICAgICAgIC8vYWRkaW5nIGEgY291cGxlIG9mIHBpeGVscyB0byBpbmNyZWFzZSB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSByZWN0XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDI7XG4gICAgICAgIHJldHVybiB4ID49IHhNaW4gLSB0aHJlc2hvbGQgJiYgeCA8PSB4TWF4ICsgdGhyZXNob2xkICYmIHkgPj0geU1pbiAtIHRocmVzaG9sZCAmJiB5IDw9IHlNYXggKyB0aHJlc2hvbGQgP1xuICAgICAgICAgICAgdGhpcy5kaXN0VG9TdHJhaWdodExpbmVTZWdtZW50KHgsIHksIHAxLCBwMikgOlxuICAgICAgICAgICAgbnVsbDtcbiAgICB9XG4gICAgZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCh4LCB5LCBwMSwgcDIpIHtcbiAgICAgICAgY29uc3QgZGlzdCA9ICh4MSwgeTEsIHgyLCB5MikgPT4gTWF0aC5wb3coKHgxIC0geDIpLCAyKSArIE1hdGgucG93KCh5MSAtIHkyKSwgMik7XG4gICAgICAgIGNvbnN0IGwgPSBkaXN0KHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICBpZiAobCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGRpc3QoeCwgeSwgcDEueCwgcDEueSk7XG4gICAgICAgIGxldCB0ID0gKCh4IC0gcDEueCkgKiAocDIueCAtIHAxLngpICsgKHkgLSBwMS55KSAqIChwMi55IC0gcDEueSkpIC8gbDtcbiAgICAgICAgdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgICAgICAgcmV0dXJuIGRpc3QoeCwgeSwgcDEueCArIHQgKiAocDIueCAtIHAxLngpLCBwMS55ICsgdCAqIChwMi55IC0gcDEueSkpO1xuICAgIH1cbiAgICBjYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUoaSwgeCwgeSwgcDEsIHAyLCBwYykge1xuICAgICAgICAvKiBjYWxjdWxhdGluZyBjb29yZGluYXRlcyBvZiBhIHJlY3QgYXJvdW5kIGEgbGluZS4gSWYgY3Vyc29yIGNvb3JkcyBhcmUgb3V0c2lkZSB0aGlzIHNoYXBlIC0gYXNzdW1lIHRoYXRcbiAgICAgICAgICAgIHBvaW50IGlzIG5vdCBvbiBsaW5lIGFuZCBkbyBub3QgY2FsY3VsYXRlIGRpc3RhbmNlIHRvIGxpbmUgKi9cbiAgICAgICAgY29uc3QgeE1pbiA9IE1hdGgubWluKHAxLngsIHAyLngsIHBjLngpO1xuICAgICAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgocDEueCwgcDIueCwgcGMueCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbihwMS55LCBwMi55LCBwYy55KTtcbiAgICAgICAgY29uc3QgeU1heCA9IE1hdGgubWF4KHAxLnksIHAyLnksIHBjLnkpO1xuICAgICAgICAvL2FkZGluZyBhIGNvdXBsZSBvZiBwaXhlbHMgdG8gaW5jcmVhc2UgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgcmVjdFxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgICBpZiAoeCA+PSB4TWluIC0gdGhyZXNob2xkICYmIHggPD0geE1heCArIHRocmVzaG9sZCAmJiB5ID49IHlNaW4gLSB0aHJlc2hvbGQgJiYgeSA8PSB5TWF4ICsgdGhyZXNob2xkKSB7XG4gICAgICAgICAgICBjb25zdCB3ID0geE1heCAtIHhNaW47XG4gICAgICAgICAgICBjb25zdCBoID0geU1heCAtIHlNaW47XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCh4LCB5LCBwMSwgcGMsIHAyLCB3LCBoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY2FsY3VsYXRlRGlzdFRvQ3VydmVJblJlY3QoeCwgeSwgcDAsIHAxLCBwMiwgdywgaCkge1xuICAgICAgICBjb25zdCBzdGVwTGVuID0gMztcbiAgICAgICAgY29uc3Qgc3RlcHNOdW0gPSBNYXRoLmZsb29yKCh3ICsgaCkgLyBzdGVwTGVuKTtcbiAgICAgICAgY29uc3QgZGVsdGFUID0gMSAvIHN0ZXBzTnVtO1xuICAgICAgICBjb25zdCBhcnJYID0gbmV3IFVpbnQzMkFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgY29uc3QgYXJyWSA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgICAgIGNvbnN0IG1heEhXID0gbmV3IFVpbnQzMkFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgbGV0IG1pblN1bUhXID0gbnVsbDtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlSWR4cyA9IG5ldyBCaXRBcnJheShzdGVwc051bSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyWC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdCA9IGkgKiBkZWx0YVQ7XG4gICAgICAgICAgICBjb25zdCB4T25DdXJ2ZSA9IE1hdGgucG93KCgxIC0gdCksIDIpICogcDAueCArIDIgKiB0ICogKDEgLSB0KSAqIHAxLnggKyBNYXRoLnBvdyh0LCAyKSAqIHAyLng7XG4gICAgICAgICAgICBjb25zdCB5T25DdXJ2ZSA9IE1hdGgucG93KCgxIC0gdCksIDIpICogcDAueSArIDIgKiB0ICogKDEgLSB0KSAqIHAxLnkgKyBNYXRoLnBvdyh0LCAyKSAqIHAyLnk7XG4gICAgICAgICAgICBjb25zdCByZWN0VyA9IE1hdGguYWJzKHggLSB4T25DdXJ2ZSk7XG4gICAgICAgICAgICBjb25zdCByZWN0SCA9IE1hdGguYWJzKHkgLSB5T25DdXJ2ZSk7XG4gICAgICAgICAgICBjb25zdCBzdW1IVyA9IHJlY3RXICsgcmVjdEg7XG4gICAgICAgICAgICBpZiAoIW1pblN1bUhXIHx8IG1pblN1bUhXID4gc3VtSFcpXG4gICAgICAgICAgICAgICAgbWluU3VtSFcgPSBzdW1IVztcbiAgICAgICAgICAgIG1heEhXW2ldID0gTWF0aC5tYXgocmVjdFcsIHJlY3RIKTtcbiAgICAgICAgICAgIGFyclhbaV0gPSB4T25DdXJ2ZTtcbiAgICAgICAgICAgIGFycllbaV0gPSB5T25DdXJ2ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyclgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYXhIV1tpXSA8IG1pblN1bUhXKVxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUlkeHMuc2V0Qml0KGksIHRydWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluRGlzdCA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IGogPSAtMTsgKGogPSBjYW5kaWRhdGVJZHhzLmZpbmROZXh0KGopKSAhPT0gLTE7KSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5oeXBvdCgoYXJyWFtqXSAtIHgpLCAoYXJyWVtqXSAtIHkpKTtcbiAgICAgICAgICAgIGlmICghbWluRGlzdCB8fCBtaW5EaXN0ID4gZGlzdClcbiAgICAgICAgICAgICAgICBtaW5EaXN0ID0gZGlzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluRGlzdDtcbiAgICB9XG4gICAgZ2V0TGluZUxlbmd0aChwMXgsIHAxeSwgcDJ4LCBwMnkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwMnggLSBwMXgsIDIpICsgTWF0aC5wb3cocDJ5IC0gcDF5LCAyKSk7XG4gICAgfVxuICAgIGdldFBvaW50T25EaXN0YW5jZShwMXgsIHAxeSwgcDJ4LCBwMnksIGRpc3RhbmNlLCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZHggPSAocDJ4IC0gcDF4KSAvIGxlbmd0aDtcbiAgICAgICAgY29uc3QgZHkgPSAocDJ5IC0gcDF5KSAvIGxlbmd0aDtcbiAgICAgICAgY29uc3QgcDN4ID0gcDJ4IC0gZGlzdGFuY2UgKiBkeDtcbiAgICAgICAgY29uc3QgcDN5ID0gcDJ5IC0gZGlzdGFuY2UgKiBkeTtcbiAgICAgICAgcmV0dXJuIG5ldyBERy5Qb2ludChwM3gsIHAzeSk7XG4gICAgfVxuICAgIGZpbmRDb250cm9sUG9pbnQoaWR4LCB4MSwgeTEsIHgyLCB5MiwgaSkge1xuICAgICAgICBjb25zdCBtaWRYID0geDEgKyAoeDIgLSB4MSkgLyAyO1xuICAgICAgICBjb25zdCBtaWRZID0geTEgKyAoeTIgLSB5MSkgLyAyO1xuICAgICAgICBsZXQgZHggPSBtaWRYIC0geDE7XG4gICAgICAgIGxldCBkeSA9IG1pZFkgLSB5MTtcbiAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICAgIGR4IC89IGRpc3Q7XG4gICAgICAgIGR5IC89IGRpc3Q7XG4gICAgICAgIGNvbnN0IHBlcnBlbmRpY3VsYXJMZW4gPSA1MCAqIE1hdGguY2VpbChpZHggLyAyKTtcbiAgICAgICAgcmV0dXJuIGlkeCAlIDIgPT09IDAgP1xuICAgICAgICAgICAgbmV3IERHLlBvaW50KG1pZFggKyAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHksIG1pZFkgLSAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHgpIDpcbiAgICAgICAgICAgIG5ldyBERy5Qb2ludChtaWRYIC0gKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR5LCBtaWRZICsgKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR4KTtcbiAgICB9XG4gICAgY2FudmFzQXJyb3cocGF0aCwgYXJyb3dFbmRYLCBhcnJvd0VuZFksIHF1YWRYLCBxdWFkWSkge1xuICAgICAgICBjb25zdCBhcnJvd0FuZ2xlID0gTWF0aC5hdGFuMihxdWFkWCAtIGFycm93RW5kWCwgcXVhZFkgLSBhcnJvd0VuZFkpICsgTWF0aC5QSTtcbiAgICAgICAgcGF0aC5tb3ZlVG8oYXJyb3dFbmRYIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguc2luKGFycm93QW5nbGUgLSBNYXRoLlBJIC8gMTApKSwgYXJyb3dFbmRZIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguY29zKGFycm93QW5nbGUgLSBNYXRoLlBJIC8gMTApKSk7XG4gICAgICAgIHBhdGgubGluZVRvKGFycm93RW5kWCwgYXJyb3dFbmRZKTtcbiAgICAgICAgcGF0aC5saW5lVG8oYXJyb3dFbmRYIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguc2luKGFycm93QW5nbGUgKyBNYXRoLlBJIC8gMTApKSwgYXJyb3dFbmRZIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguY29zKGFycm93QW5nbGUgKyBNYXRoLlBJIC8gMTApKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WdVpHVnlMV3hwYm1WekxXOXVMWE53TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2ljbVZ1WkdWeUxXeHBibVZ6TFc5dUxYTndMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxEUkNRVUUwUWp0QlFVTTFRaXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNSVUZCUXl4UFFVRlBMRVZCUVVNc1RVRkJUU3hOUVVGTkxFTkJRVU03UVVGRE4wSXNUMEZCVHl4UlFVRlJMRTFCUVUwc1lVRkJZU3hEUVVGRE8wRkJSVzVETEUxQlFVMHNRMEZCVGl4SlFVRlpMREpDUVVsWU8wRkJTa1FzVjBGQldTd3lRa0ZCTWtJN1NVRkRia01zTkVOQlFXRXNRMEZCUVR0SlFVTmlMRFJEUVVGaExFTkJRVUU3U1VGRFlpeG5SRUZCYVVJc1EwRkJRVHRCUVVOeVFpeERRVUZETEVWQlNsY3NNa0pCUVRKQ0xFdEJRVE5DTERKQ1FVRXlRaXhSUVVsMFF6dEJRVGhDUkN4TlFVRk5MRTlCUVU4c2QwSkJRWGRDTzBsQlowSnVReXhKUVVGSkxHRkJRV0U3VVVGRFppeFBRVUZQTEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNN1NVRkRPVUlzUTBGQlF6dEpRVVZFTEVsQlFVa3NZVUZCWVN4RFFVRkRMRVZCUVZVN1VVRkRNVUlzU1VGQlNTeEZRVUZGTEV0QlFVc3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSVHRaUVVNdlFpeEpRVUZKTEVOQlFVTXNaVUZCWlN4SFFVRkhMRVZCUVVVc1EwRkJRenRaUVVNeFFpeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZETVVJN1NVRkRTQ3hEUVVGRE8wbEJSVVFzU1VGQlNTeGhRVUZoTEVOQlFVTXNTMEZCYTBJN1VVRkRiRU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFFpeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETTBJc1EwRkJRenRKUVVWRUxFbEJRVWtzWlVGQlpTeERRVUZETEZWQlFXOUNPMUZCUTNSRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NWVUZCVlN4RFFVRkRPMUZCUXpkQ0xFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU16UWl4RFFVRkRPMGxCUlVRc1dVRkJXU3hGUVVGM1FpeEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmhMRVZCUVVVc1MwRkJhMElzUlVGRGNFWXNaMEpCUVdkQ0xFZEJRVWNzTWtKQlFUSkNMRU5CUVVNc1NVRkJTVHM3VVVGc1EzSkVMRzlDUVVGbExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGY2tJc1owSkJRVmNzUjBGQlJ5eEpRVUZKTEU5QlFVOHNSVUZCYzBJc1EwRkJRenRSUVVOb1JDeGpRVUZUTEVkQlFVY3NTVUZCU1N4UFFVRlBMRVZCUVhOQ0xFTkJRVU03VVVGSE9VTXNiMEpCUVdVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVWx5UWl4bFFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJlVUprTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMklzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGTkJRVlVzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRM3BFTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU42UkN4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRE1VTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVRaQ0xFTkJRVU03VVVGRGNFVXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEdkQ1FVRm5RaXhEUVVGRE8xRkJRM3BETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGVFSXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhOUVVGQkxFdEJRVXNzUTBGQlF5eFZRVUZWTEcxRFFVRkpMRWxCUVVrc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRek5GTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJWVHRaUVVOdVFpeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEZEVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVTBGQlV6dFpRVU5xUWl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTTdVVUZGY0VNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVkQlFVY3NRMEZCUXl4TFFVRnBRaXhGUVVGRkxFVkJRVVU3V1VGRE9VTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1pVRkJaU3hMUVVGTExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBJc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU40Unl4RFFVRkRMRU5CUVVNN1VVRkZSaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSMEZCUnl4RFFVRkRMRXRCUVdsQ0xFVkJRVVVzUlVGQlJUdFpRVU01UXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRaUVVNMVJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4bFFVRmxMRXRCUVVzc1EwRkJReXhEUVVGRE8yZENRVU0zUWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zWlVGQlpTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJRM1JITEVOQlFVTXNRMEZCUXp0UlFVVkdMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNN1lVRkRMMElzVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCVFN4RlFVRkZMRVZCUVVVN1dVRkRjRUlzU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPMUZCUTNKQ0xFTkJRVU1zUTBGQlF5eERRVUZETzBsQlExQXNRMEZCUXp0SlFVVkVMRmRCUVZjc1EwRkJReXhMUVVGclFqdFJRVU0xUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU51UWl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NTVUZCU1N4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRiRVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4M1FrRkJkMEk3V1VGRGFrTXNTVUZCU1N4RFFVRkRMSFZDUVVGMVFpeEZRVUZGTEVOQlFVTTdPMWxCUlM5Q0xFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEY2tNc1EwRkJRenRKUVVWRUxGZEJRVmM3TzFGQlExUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRla01zVFVGQlRTeHZRa0ZCYjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEdGQlFXRXNRMEZCUXp0UlFVTjJTQ3hKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRVZCUVVVN1dVRkRla0lzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRWRCUVVjc1RVRkJRU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NiVU5CUVVrc1EwRkJReXhEUVVGRE8xbEJRek5ETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhIUVVGSExGRkJRVkVzVFVGQlFTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc2JVTkJRVWtzVTBGQlV5eEpRVUZKTEUxQlFVRXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExHMURRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMU5CUXpWR08xRkJRMFFzVFVGQlRTeGhRVUZoTEVkQlFVY3NUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGVFY3NUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNoRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGREwwTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVNdlJpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMmhDTEUxQlFVMHNSVUZCUXl4UlFVRlJMRVZCUVVVc1RVRkJUU3hGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1lVRkJZU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXhSU3hOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRkRWdzU1VGQlNTeEZRVUZGTEVkQlFVY3NVMEZCVXl4aFFVRlVMRk5CUVZNc2RVSkJRVlFzVTBGQlV5eERRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkRkRUlzU1VGQlNTeEZRVUZGTEVkQlFVY3NVMEZCVXl4aFFVRlVMRk5CUVZNc2RVSkJRVlFzVTBGQlV5eERRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkRkRUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMmhJTEVsQlFVa3NSVUZCUlN4SFFVRkhMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4RFFVRkRMRU5CUVVNN1owSkJRM0JDTEVsQlFVa3NSVUZCUlN4SFFVRkhMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4RFFVRkRMRU5CUVVNN1owSkJRM0JDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8yZENRVU40UlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzJkQ1FVTnlRaXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVY3NSMEZCUnl4RlFVRkhMRVZCUVVVc1JVRkJSeXhIUVVGSExFVkJRVWNzUTBGQlF5eEhRVUZITEU5QlFVOHNSMEZCUnl4SlFVRkpMRVZCUVVVN2IwSkJRemRGTEVsQlFVa3NiMEpCUVc5Q0xFVkJRVVU3ZDBKQlEzaENMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVUVzVFVGQlFTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc01FTkJRVWNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVVFc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTERCRFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTTdkMEpCUXpGRkxFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zTUVOQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFMUJRVUVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMREJEUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRekZGTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhIUVVGSExGRkJRVkVzUzBGQlN5eEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRPM2RDUVVOdVJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1IwRkJSeXhEUVVGQkxFMUJRVUVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MREJEUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4TlFVRkJMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTd3dRMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTXhSVHR2UWtGRFJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1pVRkJaVHQzUWtGRE5VSXNTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMjlDUVVOd1F5eE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJReTlETEVsQlFVa3NXVUZCV1N4SFFVRnZRaXhKUVVGSkxFTkJRVU03YjBKQlEzcERMRWxCUVVrc1ZVRkJWU3hGUVVGRk8zZENRVU5rTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8zZENRVU0zUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZITEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPM2RDUVVOMFJpeE5RVUZOTEcxQ1FVRnRRaXhIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1VVRkJVU3hGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzNkQ1FVTjJSaXhGUVVGRkxFZEJRVWNzYjBKQlFXOUNMRU5CUVVNc1EwRkJReXhEUVVGRE8zZENRVU0xUWl4RlFVRkZMRWRCUVVjc2IwSkJRVzlDTEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVNMVFpeEZRVUZGTEVkQlFVY3NiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTXpRaXhGUVVGRkxFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRE8zZENRVU16UWl4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenMwUWtGRGNFUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenMwUWtGRGRFUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRM1pFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVWNzUlVGQlJTeEZRVUZITEVOQlFVTXNRMEZCUXp0M1FrRkRNVUlzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPM0ZDUVVOdVJUdDVRa0ZCVFR0M1FrRkRUQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkhMRVZCUVVVc1JVRkJSeXhEUVVGRExFTkJRVU03ZDBKQlF6RkNMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenR4UWtGRGVrSTdiMEpCUTBRc1NVRkJTU3hOUVVGQkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCVlN4dFEwRkJTU3hOUVVGQkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNZVUZCWVN3d1EwRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdkMEpCUTJoRkxFbEJRVWtzUTBGQlF5eFBRVUZQT3pSQ1FVTldMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzNkQ1FVTXZReXhKUVVGSkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZPelJDUVVNM1FpeE5RVUZOTEZWQlFWVXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenMwUWtGRGFrY3NUVUZCVFN4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03TkVKQlEyNUVMRTFCUVUwc1VVRkJVU3hIUVVGSExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZET3pSQ1FVTnVSQ3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1RVRkJRU3hWUVVGVkxHRkJRVllzVlVGQlZTeDFRa0ZCVml4VlFVRlZMRU5CUVVVc1EwRkJReXh0UTBGQlNTeEZRVUZGTEVWQlFVVXNUVUZCUVN4VlFVRlZMR0ZCUVZZc1ZVRkJWU3gxUWtGQlZpeFZRVUZWTEVOQlFVVXNRMEZCUXl4dFEwRkJTU3hGUVVGRkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPM2xDUVVNeFJqdHhRa0ZEUmp0dlFrRkRSQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMjlDUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8yOUNRVU55UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zWlVGQlpUdDNRa0ZETlVJc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8ybENRVU4wUXp0aFFVTkdPMU5CUTBZN1VVRkRSQ3hKUVVGSkxFTkJRVU1zYTBKQlFXdENMRVZCUVVVc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlJVUXNjMEpCUVhOQ0xFTkJRVU1zU1VGQllUdFJRVU5zUXl4UlFVRlJMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0WlFVTTNRaXhMUVVGTExESkNRVUV5UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU55UXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU42UkN4TlFVRk5PMkZCUTFBN1dVRkRSQ3hMUVVGTExESkNRVUV5UWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8yZENRVU4yUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVNdlJDeE5RVUZOTzJGQlExQTdXVUZEUkR0blFrRkRSU3hQUVVGUE8xTkJRMVk3U1VGRFNDeERRVUZETzBsQlJVUXNaVUZCWlN4RFFVRkRMRTFCUVZjc1JVRkJSU3hoUVVFclFpeEZRVUZGTEVOQlFWTTdVVUZEY2tVc1NVRkJTU3hSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEycENMRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5tTEVsQlFVa3NZVUZCWVN4RlFVRkZPMWxCUTJwQ0xGRkJRVkVzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEUxQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRhRWtzVFVGQlRTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVkQlFVY3NUVUZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExHRkJRV0VzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVNM1NEdGhRVUZOTEVsQlFVa3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTzFsQlEyNURMRkZCUVZFc1IwRkJSeXhOUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNaRE8xRkJRMFFzVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVNc1EwRkJRenRKUVVNMVFpeERRVUZETzBsQlIwUXNhMEpCUVd0Q08xRkJRMmhDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1RVRkJUU3hGUVVGRkxFTkJRVU03VVVGRE1VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTjZSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1VVRkROMElzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRSUVVOeVFpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzBsQlEzWkNMRU5CUVVNN1NVRkZSQ3gxUWtGQmRVSTdVVUZEY2tJc1RVRkJUU3hwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNdlJDeHBRa0ZCYVVJc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETDBJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhwUWtGQmFVSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSMEZCUnp0WlFVTTFSQ3hOUVVGTkxGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRGVrTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRka01zU1VGQlNTeFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNKQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExHbENRVUZwUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhPMmRDUVVNelJDeE5RVUZOTEdWQlFXVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRNME1zVFVGQlRTeGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTNwRExFbEJRVWtzWlVGQlpTeExRVUZMTEVWQlFVVXNTVUZCU1N4bFFVRmxMRXRCUVVzc1JVRkJSVHR2UWtGRGVFTXNaVUZCWlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hsUVVGbExFdEJRVXNzUlVGQlJTeEZRVUZGTzI5Q1FVTTFSQ3hKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeFpRVUZaTEVOQlFVTTdiMEpCUXpkRExHbENRVUZwUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMmxDUVVNelF6dGhRVU5HTzFsQlEwUXNTVUZCU1N4WlFVRlpMRWRCUVVjc1EwRkJRenRuUWtGRGJFSXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVNM1F5eHBRa0ZCYVVJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVNelF6dEpRVU5JTEVOQlFVTTdTVUZGUkN4cFFrRkJhVUlzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXp0UlFVTndReXhKUVVGSkxGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjBRaXhKUVVGSkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZEYmtJc1NVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEyaENMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRM3BETEUxQlFVMHNZVUZCWVN4SFFVRkhMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzaEhMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVONFF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF5OURMRWxCUVVrc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVHRuUWtGREwwWXNUVUZCVFN4RlFVRkRMRkZCUVZFc1JVRkJSU3hOUVVGTkxFVkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hoUVVGaExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpGRkxFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOc1NDeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE5VY3NTVUZCU1N4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN2IwSkJReTlDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU12UkN4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlEzaEdMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhoUVVGTUxFdEJRVXNzZFVKQlFVd3NTMEZCU3l4RFFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExHRkJRVXdzUzBGQlN5eDFRa0ZCVEN4TFFVRkxMRU5CUVVVc1EwRkJReXhGUVVGRkxGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRNVVlzVFVGQlRTeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRNVVFzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXl4RlFVRkZMRlZCUVZVc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdkMEpCUXpOSExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZETlVjc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eDNRa0ZCZDBJc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4VlFVRlZMRVZCUVVVc1VVRkJVU3hGUVVGRkxGbEJRVmtzUTBGQlF5eERRVUZETzJsQ1FVTnVSanR4UWtGQlRUdHZRa0ZEVEN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExESkNRVUV5UWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmxDUVVNelJEdG5Ra0ZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhQUVVGUExFbEJRVWtzU1VGQlNTeExRVUZMTEVsQlFVa3NTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzVDBGQlR5eEpRVUZKTEVsQlFVa3NTMEZCU3l4SlFVRkpMRWxCUVVrc1NVRkJTU3hIUVVGSExFOUJRVThzUlVGQlJUdHZRa0ZEZWtZc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZEWml4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRE8ybENRVU5zUWp0aFFVTkdPMU5CUTBZN1VVRkRSQ3hQUVVGUExGbEJRVmtzUTBGQlF6dEpRVU4wUWl4RFFVRkRPMGxCUlVRc01rSkJRVEpDTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hGUVVGWkxFVkJRVVVzUlVGQldUdFJRVU14UlR0NVJVRkRhVVU3VVVGRGFrVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5zUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyeERMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYkVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVnNReXh2UlVGQmIwVTdVVUZEY0VVc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzQkNMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVTjJSeXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNNVF5eEpRVUZKTEVOQlFVTTdTVUZEVkN4RFFVRkRPMGxCUlVRc2VVSkJRWGxDTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hGUVVGWkxFVkJRVVVzUlVGQldUdFJRVU40UlN4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExFVkJRVlVzUlVGQlJTeEZRVUZWTEVWQlFVVXNSVUZCVlN4RlFVRkZMRVZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnBJTEUxQlFVMHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka01zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVRkZMRTlCUVU4c1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjBSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOb1F5eFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNoRkxFTkJRVU03U1VGRlJDeDNRa0ZCZDBJc1EwRkJReXhEUVVGVExFVkJRVVVzUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4RlFVRlpMRVZCUVVVc1JVRkJXU3hGUVVOc1JpeEZRVUZaTzFGQlExbzdlVVZCUTJsRk8xRkJRMnBGTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjRReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGVFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVY0UXl4dlJVRkJiMFU3VVVGRGNFVXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM0JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFVkJRVVU3V1VGRGNFY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU4wUWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzFsQlEzUkNMRTlCUVU4c1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEyaEZPMUZCUTBRc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNNRUpCUVRCQ0xFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4RlFVRlpMRVZCUVVVc1JVRkJXU3hGUVVGRkxFVkJRVmtzUlVGRGRrWXNRMEZCVXl4RlFVRkZMRU5CUVZNN1VVRkRjRUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJ4Q0xFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRMME1zVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkhMRkZCUVZFc1EwRkJRenRSUVVNMVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU4yUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0UlFVTjJReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRSUVVONFF5eEpRVUZKTEZGQlFWRXNSMEZCYTBJc1NVRkJTU3hEUVVGRE8xRkJRMjVETEUxQlFVMHNZVUZCWVN4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlF6ZERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdXVUZEY2tJc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRemxHTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTVSaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF6dFpRVU55UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJRenRaUVVOeVF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xbEJRelZDTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1VVRkJVU3hIUVVGSExFdEJRVXM3WjBKQlF5OUNMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03V1VGRGJrSXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xbEJRMnhETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU03V1VGRGJrSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUTBGQlF6dFRRVU53UWp0UlFVTkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEZGQlFWTTdaMEpCUTNSQ0xHRkJRV0VzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFRRVU40UXp0UlFVTkVMRWxCUVVrc1QwRkJUeXhIUVVGclFpeEpRVUZKTEVOQlFVTTdVVUZEYkVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhoUVVGaExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWM3V1VGRGVFUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzUkVMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzVDBGQlR5eEhRVUZITEVsQlFVazdaMEpCUXpWQ0xFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVMEZEYkVJN1VVRkRSQ3hQUVVGUExFOUJRVkVzUTBGQlF6dEpRVU5zUWl4RFFVRkRPMGxCUlVRc1lVRkJZU3hEUVVGRExFZEJRVmNzUlVGQlJTeEhRVUZYTEVWQlFVVXNSMEZCVnl4RlFVRkZMRWRCUVZjN1VVRkRPVVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU53UlN4RFFVRkRPMGxCUlVRc2EwSkJRV3RDTEVOQlFVTXNSMEZCVnl4RlFVRkZMRWRCUVZjc1JVRkJSU3hIUVVGWExFVkJRVVVzUjBGQlZ5eEZRVUZGTEZGQlFXZENMRVZCUVVVc1RVRkJZenRSUVVOeVJ5eE5RVUZOTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTTdVVUZEYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRE8xRkJRMmhETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhSUVVGUkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyaERMRTFCUVUwc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUldoRExFOUJRVThzU1VGQlNTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5vUXl4RFFVRkRPMGxCUlVRc1owSkJRV2RDTEVOQlFVTXNSMEZCVnl4RlFVRkZMRVZCUVZVc1JVRkJSU3hGUVVGVkxFVkJRVVVzUlVGQlZTeEZRVUZGTEVWQlFWVXNSVUZCUlN4RFFVRlZPMUZCUTNSR0xFMUJRVTBzU1VGQlNTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYUVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5vUXl4SlFVRkpMRVZCUVVVc1IwRkJSeXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyNUNMRWxCUVVrc1JVRkJSU3hIUVVGSExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZEYmtJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTXhReXhGUVVGRkxFbEJRVWtzU1VGQlNTeERRVUZETzFGQlExZ3NSVUZCUlN4SlFVRkpMRWxCUVVrc1EwRkJRenRSUVVOWUxFMUJRVTBzWjBKQlFXZENMRWRCUVVjc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnBFTEU5QlFVOHNSMEZCUnl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UWl4SlFVRkpMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRWxCUVVrc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZEVZc1NVRkJTU3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGSkxFZEJRVWNzUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXp0SlFVTjZSaXhEUVVGRE8wbEJSVVFzVjBGQlZ5eERRVUZETEVsQlFUaENMRVZCUVVVc1UwRkJhVUlzUlVGQlJTeFRRVUZwUWl4RlFVRkZMRXRCUVdFc1JVRkJSU3hMUVVGaE8xRkJRelZITEUxQlFVMHNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEZOQlFWTXNSVUZCUlN4TFFVRkxMRWRCUVVjc1UwRkJVeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXp0UlFVTTVSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVTTNSU3hUUVVGVExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTJ4RExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNVMEZCVXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUXpkRkxGTkJRVk1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZWtVc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdiV0Y0TFd4bGJpQXFMMXh1YVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JtbHRjRzl5ZENCN1UzVmlhbVZqZEgwZ1puSnZiU0FuY25ocWN5YzdYRzVwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBbkxpOWlhWFF0WVhKeVlYa25PMXh1WEc1bGVIQnZjblFnWlc1MWJTQlRZMkYwZEdWeVVHeHZkRU4xY25KbGJuUk1hVzVsVTNSNWJHVWdlMXh1SUNBZ0lHNXZibVVnUFNBbmJtOXVaU2NzWEc0Z0lDQWdZbTlzWkNBOUlDZGliMnhrSnl4Y2JpQWdJQ0JrWVhOb1pXUWdQU0FuWkdGemFHVmtKMXh1ZlZ4dVhHNTBlWEJsSUUxaGNtdGxjbE5wZW1VZ1BTQjdYRzRnSUNBZ2MybDZaVVp5YjIwNklHNTFiV0psY2l4Y2JpQWdJQ0J6YVhwbFZHODZJRzUxYldKbGNseHVmVnh1WEc1bGVIQnZjblFnZEhsd1pTQk5iM1Z6WlU5MlpYSk1hVzVsUlhabGJuUWdQU0I3WEc0Z0lDQWdlRG9nYm5WdFltVnlPMXh1SUNBZ0lIazZJRzUxYldKbGNqdGNiaUFnSUNCcFpEb2diblZ0WW1WeU8xeHVJQ0FnSUdWMlpXNTBPaUJOYjNWelpVVjJaVzUwWEc1OVhHNWNibVY0Y0c5eWRDQjBlWEJsSUVsTWFXNWxVMlZ5YVdWeklEMGdlMXh1SUNBZ0lHWnliMjA2SUZWcGJuUXpNa0Z5Y21GNU8xeHVJQ0FnSUhSdk9pQlZhVzUwTXpKQmNuSmhlVHRjYmlBZ0lDQmpiMnh2Y2o4NklITjBjbWx1WnpzZ0x5OGdZMjl0Ylc5dUlHTnZiRzl5TGlCVmMyVWdXMk52Ykc5eWMxMGdhV1lnZVc5MUlHNWxaV1FnYVc1a2FYWnBaSFZoYkNCamIyeHZjbk1nY0dWeUlHeHBibVZjYmlBZ0lDQmpiMnh2Y25NL09pQnpkSEpwYm1kYlhUc2dMeThnYkdsdVpTQmpiMnh2Y25NdUlFbG1JSFJvWlhrZ1lYSmxJSFJvWlNCellXMWxJR1p2Y2lCMGFHVWdjMlZ5YVdWekxDQjFjMlVnVzJOdmJHOXlYU0JwYm5OMFpXRmtMbHh1SUNBZ0lIZHBaSFJvUHpvZ2JuVnRZbVZ5T3lBdkx5QmpiMjF0YjI0Z2QybGtkR2d1SUZWelpTQmJZMjlzYjNKelhTQnBaaUI1YjNVZ2JtVmxaQ0JwYm1ScGRtbGtkV0ZzSUhkcFpIUm9jeUJ3WlhJZ2JHbHVaVnh1SUNBZ0lIZHBaSFJvY3o4NklFWnNiMkYwTXpKQmNuSmhlVHNnTHk4Z2JHbHVaU0IzYVdSMGFITXVJRWxtSUhSb1pYa2dZWEpsSUhSb1pTQnpZVzFsSUdadmNpQjBhR1VnYzJWeWFXVnpMQ0IxYzJVZ1czZHBaSFJvWFNCcGJuTjBaV0ZrTGx4dUlDQWdJRzl3WVdOcGRIay9PaUJ1ZFcxaVpYSTdJQzh2SUdOdmJXMXZiaUJ2Y0dGamFYUjVMaUJWYzJVZ1cyOXdZV05wZEdsbGMxMGdhV1lnZVc5MUlHNWxaV1FnYVc1a2FYWnBaSFZoYkNCdmNHRmphWFJwWlhNZ2NHVnlJR3hwYm1WY2JpQWdJQ0J2Y0dGamFYUnBaWE0vT2lCR2JHOWhkRE15UVhKeVlYazdJQzh2SUd4cGJtVWdiM0JoWTJsMGFXVnpMaUJKWmlCMGFHVjVJR0Z5WlNCMGFHVWdjMkZ0WlNCbWIzSWdkR2hsSUhObGNtbGxjeXdnZFhObElGdHZjR0ZqYVhSNVhTQnBibk4wWldGa1hHNGdJQ0FnWkhKaGQwRnljbTkzY3o4NklHSnZiMnhsWVc0N0lDOHZJR052YlcxdmJpQndZWEpoYldWMFpYSWdkRzhnWkhKaGR5Qmhjbkp2ZDNNdUlGVnpaU0JiWkhKaGQwRnljbTkzYzBGeWNsMGdhV1lnZVc5MUlHNWxaV1FnZEc4Z1pISmhkeUJoY25KdmQzTWdibTkwSUdadmNpQmxZV05vSUd4cGJtVmNiaUFnSUNCa2NtRjNRWEp5YjNkelFYSnlQem9nUW1sMFFYSnlZWGs3SUM4dklHbHVaR2wyYVdSMVlXd2djR0Z5WVcxbGRHVnlJR1p2Y2lCbFlXTm9JR3hwYm1VdUlFbG1JSFJvWlhrZ1lYSmxJSFJvWlNCellXMWxJR1p2Y2lCMGFHVWdjMlZ5YVdWekxDQjFjMlVnVzJSeVlYZEJjbkp2ZDNOZElHbHVjM1JsWVdSY2JpQWdJQ0IyYVhOcFltbHNhWFI1UHpvZ1FtbDBRWEp5WVhrN0lDOHZJR2x1WkdsMmFXUjFZV3dnY0dGeVlXMWxkR1Z5SUdadmNpQmxZV05vSUd4cGJtVXVJRk5sZENCaWFYUWdkRzhnWm1Gc2MyVWdkRzhnYUdsa1pTQjBhR1VnYkdsdVpWeHVJQ0FnSUdGeWNtOTNVMmw2WlQ4NklHNTFiV0psY2pzZ0x5OGdZMjl0Ylc5dUlHWnZjaUJoYkd3Z1lYSnliM2R6WEc0Z0lDQWdjMnRwY0UxMWJIUnBUR2x1WlVOaGJHTjFiR0YwYVc5dVB6b2dZbTl2YkdWaGJqdGNibjFjYmx4dVpYaHdiM0owSUdOc1lYTnpJRk5qWVhSMFpYSlFiRzkwVEdsdVpYTlNaVzVrWlhKbGNpQjdYRzRnSUhOd09pQkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjanRjYmlBZ2VFRjRhWE5EYjJ3NklFUkhMa052YkhWdGJqdGNiaUFnZVVGNGFYTkRiMnc2SUVSSExrTnZiSFZ0Ymp0Y2JpQWdYMk4xY25KbGJuUk1hVzVsU1dSNElEMGdMVEU3WEc0Z0lHeHBibVZ6SVRvZ1NVeHBibVZUWlhKcFpYTTdYRzRnSUd4cGJtVkRiR2xqYTJWa0lEMGdibVYzSUZOMVltcGxZM1E4VFc5MWMyVlBkbVZ5VEdsdVpVVjJaVzUwUGlncE8xeHVJQ0JzYVc1bFNHOTJaWElnUFNCdVpYY2dVM1ZpYW1WamREeE5iM1Z6WlU5MlpYSk1hVzVsUlhabGJuUStLQ2s3WEc0Z0lHTmhiblpoY3pvZ1NGUk5URU5oYm5aaGMwVnNaVzFsYm5RN1hHNGdJR04wZURvZ1EyRnVkbUZ6VW1WdVpHVnlhVzVuUTI5dWRHVjRkREpFTzF4dUlDQnRiM1Z6WlU5MlpYSk1hVzVsU1dRZ1BTQXRNVHRjYmlBZ2JYVnNkR2x3YkdWTWFXNWxjME52ZFc1MGN5RTZJRlZwYm5RNFFYSnlZWGs3WEc0Z0lIWnBjMmxpYVd4cGRIazZJRUpwZEVGeWNtRjVPMXh1SUNCamRYSnlaVzUwVEdsdVpWTjBlV3hsT2lCVFkyRjBkR1Z5VUd4dmRFTjFjbkpsYm5STWFXNWxVM1I1YkdVN1hHNGdJR0Z5Y205M1YybGtkR2dnUFNBeE5UdGNibHh1SUNCblpYUWdZM1Z5Y21WdWRFeHBibVZKWkNncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWpkWEp5Wlc1MFRHbHVaVWxrZUR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0JqZFhKeVpXNTBUR2x1WlVsa0tHbGtPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnBaaUFvYVdRZ0lUMDlJSFJvYVhNdVgyTjFjbkpsYm5STWFXNWxTV1I0S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbDlqZFhKeVpXNTBUR2x1WlVsa2VDQTlJR2xrTzF4dUlDQWdJQ0FnZEdocGN5NXpjQzV5Wlc1a1pYSW9kR2hwY3k1amRIZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSE5sZENCc2FXNWxjMVJ2VW1WdVpHVnlLR3hwYm1Wek9pQkpUR2x1WlZObGNtbGxjeWtnZTF4dUlDQWdJSFJvYVhNdWRYQmtZWFJsVEdsdVpYTW9iR2x1WlhNcE8xeHVJQ0FnSUhSb2FYTXVjM0F1Y21WdVpHVnlLSFJvYVhNdVkzUjRLVHRjYmlBZ2ZWeHVYRzRnSUhObGRDQnNhVzVsYzFacGMybGlhV3hwZEhrb2RtbHphV0pwYkdsMGVUb2dRbWwwUVhKeVlYa3BJSHRjYmlBZ0lDQjBhR2x6TG5acGMybGlhV3hwZEhrZ1BTQjJhWE5wWW1sc2FYUjVPMXh1SUNBZ0lIUm9hWE11YzNBdWNtVnVaR1Z5S0hSb2FYTXVZM1I0S1R0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wY25WamRHOXlLSE53T2lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNpd2dlRUY0YVhNNklITjBjbWx1Wnl3Z2VVRjRhWE02SUhOMGNtbHVaeXdnYkdsdVpYTTZJRWxNYVc1bFUyVnlhV1Z6TEZ4dUlDQWdJR04xY25KbGJuUk1hVzVsVTNSNWJHVWdQU0JUWTJGMGRHVnlVR3h2ZEVOMWNuSmxiblJNYVc1bFUzUjViR1V1Ym05dVpTa2dlMXh1SUNBZ0lIUm9hWE11YzNBZ1BTQnpjRHRjYmlBZ0lDQjBhR2x6TG5oQmVHbHpRMjlzSUQwZ2RHaHBjeTV6Y0M1a1lYUmhSbkpoYldVaExtTnZiSFZ0Ym5NdVlubE9ZVzFsS0hoQmVHbHpLVHRjYmlBZ0lDQjBhR2x6TG5sQmVHbHpRMjlzSUQwZ2RHaHBjeTV6Y0M1a1lYUmhSbkpoYldVaExtTnZiSFZ0Ym5NdVlubE9ZVzFsS0hsQmVHbHpLVHRjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeUE5SUhSb2FYTXVjM0F1WjJWMFNXNW1ieWdwV3lkallXNTJZWE1uWFR0Y2JpQWdJQ0IwYUdsekxtTjBlQ0E5SUhSb2FYTXVZMkZ1ZG1GekxtZGxkRU52Ym5SbGVIUW9KekprSnlrZ1lYTWdRMkZ1ZG1GelVtVnVaR1Z5YVc1blEyOXVkR1Y0ZERKRU8xeHVJQ0FnSUhSb2FYTXVZM1Z5Y21WdWRFeHBibVZUZEhsc1pTQTlJR04xY25KbGJuUk1hVzVsVTNSNWJHVTdYRzRnSUNBZ2RHaHBjeTUxY0dSaGRHVk1hVzVsY3loc2FXNWxjeWs3WEc0Z0lDQWdkR2hwY3k1MmFYTnBZbWxzYVhSNUlEMGdiR2x1WlhNdWRtbHphV0pwYkdsMGVTQS9QeUJ1WlhjZ1FtbDBRWEp5WVhrb2RHaHBjeTVzYVc1bGN5NW1jbTl0TG14bGJtZDBhQ2s3WEc0Z0lDQWdhV1lnS0NGc2FXNWxjeTUyYVhOcFltbHNhWFI1S1Z4dUlDQWdJQ0FnZEdocGN5NTJhWE5wWW1sc2FYUjVMbk5sZEVGc2JDaDBjblZsTENCbVlXeHpaU2s3WEc0Z0lDQWdhV1lnS0d4cGJtVnpMbUZ5Y205M1UybDZaU2xjYmlBZ0lDQWdJSFJvYVhNdVlYSnliM2RYYVdSMGFDQTlJR3hwYm1WekxtRnljbTkzVTJsNlpUdGNibHh1SUNBZ0lIUm9hWE11WTJGdWRtRnpMbTl1Ylc5MWMyVmtiM2R1SUQwZ0tHVjJaVzUwT2lCTmIzVnpaVVYyWlc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV0YjNWelpVOTJaWEpNYVc1bFNXUWdJVDA5SUMweEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TG14cGJtVkRiR2xqYTJWa0xtNWxlSFFvZTNnNklHVjJaVzUwTG1Oc2FXVnVkRmdzSUhrNklHVjJaVzUwTG1Oc2FXVnVkRmtzSUdsa09pQjBhR2x6TG0xdmRYTmxUM1psY2t4cGJtVkpaQ3dnWlhabGJuUTZJR1YyWlc1MGZTazdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lIUm9hWE11WTJGdWRtRnpMbTl1Ylc5MWMyVnRiM1psSUQwZ0tHVjJaVzUwT2lCTmIzVnpaVVYyWlc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0IwYUdsekxtMXZkWE5sVDNabGNreHBibVZKWkNBOUlIUm9hWE11WTJobFkydERiMjl5WkhOUGJreHBibVVvWlhabGJuUXViMlptYzJWMFdDd2daWFpsYm5RdWIyWm1jMlYwV1NrN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1dGIzVnpaVTkyWlhKTWFXNWxTV1FnSVQwOUlDMHhLVnh1SUNBZ0lDQWdJQ0IwYUdsekxteHBibVZJYjNabGNpNXVaWGgwS0h0NE9pQmxkbVZ1ZEM1amJHbGxiblJZTENCNU9pQmxkbVZ1ZEM1amJHbGxiblJaTENCcFpEb2dkR2hwY3k1dGIzVnpaVTkyWlhKTWFXNWxTV1FzSUdWMlpXNTBPaUJsZG1WdWRIMHBPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnpjQzV2YmtWMlpXNTBLQ2RrTkMxaVpXWnZjbVV0WkhKaGR5MXpZMlZ1WlNjcFhHNGdJQ0FnSUNBdWMzVmljMk55YVdKbEtDaGZPaUJoYm5rcElEMCtJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXlaVzVrWlhKTWFXNWxjeWdwTzF4dUlDQWdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQjFjR1JoZEdWTWFXNWxjeWhzYVc1bGN6b2dTVXhwYm1WVFpYSnBaWE1wSUh0Y2JpQWdJQ0IwYUdsekxteHBibVZ6SUQwZ2JHbHVaWE03WEc0Z0lDQWdkR2hwY3k1dGRXeDBhWEJzWlV4cGJtVnpRMjkxYm5SeklEMGdibVYzSUZWcGJuUTRRWEp5WVhrb2RHaHBjeTVzYVc1bGN5NW1jbTl0TG14bGJtZDBhQ2s3WEc0Z0lDQWdhV1lnS0NGc2FXNWxjeTV6YTJsd1RYVnNkR2xNYVc1bFEyRnNZM1ZzWVhScGIyNHBYRzRnSUNBZ0lDQjBhR2x6TG1OeVpXRjBaVTExYkhScFRHbHVaWE5KYm1ScFkyVnpLQ2s3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnZEdocGN5NXRkV3gwYVhCc1pVeHBibVZ6UTI5MWJuUnpMbVpwYkd3b01DazdYRzRnSUgxY2JseHVJQ0J5Wlc1a1pYSk1hVzVsY3lncE9pQjJiMmxrSUh0Y2JpQWdJQ0JqYjI1emRDQnpjRXh2YjJzZ1BTQjBhR2x6TG5Od0xtZGxkRTl3ZEdsdmJuTW9LUzVzYjI5ck8xeHVJQ0FnSUdOdmJuTjBJR2x1WkdsMmFXUjFZV3hNYVc1bFUzUjViR1Z6SUQwZ2RHaHBjeTVzYVc1bGN5NWpiMnh2Y25NZ2ZId2dkR2hwY3k1c2FXNWxjeTUzYVdSMGFDQjhmQ0IwYUdsekxteHBibVZ6TG05d1lXTnBkR2xsY3lCOGZDQjBhR2x6TG14cGJtVnpMbVJ5WVhkQmNuSnZkM05CY25JN1hHNGdJQ0FnYVdZZ0tDRnBibVJwZG1sa2RXRnNUR2x1WlZOMGVXeGxjeWtnZTF4dUlDQWdJQ0FnZEdocGN5NWpkSGd1YkdsdVpWZHBaSFJvSUQwZ2RHaHBjeTVzYVc1bGN5NTNhV1IwYUNBL1B5QXhPMXh1SUNBZ0lDQWdkR2hwY3k1amRIZ3VjM1J5YjJ0bFUzUjViR1VnUFNCZ2NtZGlZU2drZTNSb2FYTXViR2x1WlhNdVkyOXNiM0lnUHo4Z0p6QXNNVEk0TERBbmZTd2tlM1JvYVhNdWJHbHVaWE11YjNCaFkybDBlU0EvUHlBeGZTbGdPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0J0WVhKclpYSlRhWHBsUTI5c0lEMGdjM0JNYjI5cld5ZHphWHBsUTI5c2RXMXVUbUZ0WlNkZElEOGdkR2hwY3k1emNDNWtZWFJoUm5KaGJXVXVZMjlzS0hOd1RHOXZhMXNuYzJsNlpVTnZiSFZ0Yms1aGJXVW5YU2tnT2lCdWRXeHNPMXh1SUNBZ0lHTnZibk4wSUdacGJIUmxjaUE5SUhSb2FYTXVjM0F1WkdGMFlVWnlZVzFsTG1acGJIUmxjanRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdWJHbHVaWE11Wm5KdmJTNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHWnBiSFJsY2k1blpYUW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU0FtSmlCbWFXeDBaWEl1WjJWMEtIUm9hWE11YkdsdVpYTXVkRzliYVYwcElDWW1JSFJvYVhNdWRtbHphV0pwYkdsMGVTNW5aWFJDYVhRb2FTa3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElHeHBibVZNWlc0Z1BTQXdPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjdjMmw2WlVaeWIyMHNJSE5wZW1WVWIzMGdQU0IwYUdsekxtZGxkRTFoY210bGNuTlRhWHBsY3loemNFeHZiMnNzSUcxaGNtdGxjbE5wZW1WRGIyd3NJR2twTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3YjJsdWRFWnliMjBnUFNCMGFHbHpMbk53TG5kdmNteGtWRzlUWTNKbFpXNG9kR2hwY3k1NFFYaHBjME52YkM1blpYUW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU3dnZEdocGN5NTVRWGhwYzBOdmJDNW5aWFFvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1NrN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JoV0NBOUlIQnZhVzUwUm5KdmJUOHVlRHRjYmlBZ0lDQWdJQ0FnYkdWMElHRlpJRDBnY0c5cGJuUkdjbTl0UHk1NU8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2IybHVkRlJ2SUQwZ2RHaHBjeTV6Y0M1M2IzSnNaRlJ2VTJOeVpXVnVLSFJvYVhNdWVFRjRhWE5EYjJ3dVoyVjBLSFJvYVhNdWJHbHVaWE11ZEc5YmFWMHBMQ0IwYUdsekxubEJlR2x6UTI5c0xtZGxkQ2gwYUdsekxteHBibVZ6TG5SdlcybGRLU2s3WEc0Z0lDQWdJQ0FnSUd4bGRDQmlXQ0E5SUhCdmFXNTBWRzgvTG5nN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JpV1NBOUlIQnZhVzUwVkc4L0xuazdYRzRnSUNBZ0lDQWdJR052Ym5OMElHMXBia0Y0YVhNZ1BTQk5ZWFJvTG0xcGJpaDBhR2x6TG5Od0xuWnBaWGRDYjNndWQybGtkR2dzSUhSb2FYTXVjM0F1ZG1sbGQwSnZlQzVvWldsbmFIUXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTjBlQzVpWldkcGJsQmhkR2dvS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0ZZSUNZbUlHRlpJQ1ltSUdKWUlDWW1JR0paSUNZbUlFMWhkR2d1YUhsd2IzUW9ZbGdoSUMwZ1lWZ2hMQ0JpV1NFZ0xTQmhXU0VwSUM4Z2JXbHVRWGhwY3lBK0lEQXVNREVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYVc1a2FYWnBaSFZoYkV4cGJtVlRkSGxzWlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR052Ykc5eUlEMGdkR2hwY3k1c2FXNWxjeTVqYjJ4dmNuTS9MbHRwWFNBL0lIUm9hWE11YkdsdVpYTXVZMjlzYjNKelB5NWJhVjBnT2lBbk1Dd3hNamdzTUNjN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnZjR0ZqYVhSNUlEMGdkR2hwY3k1c2FXNWxjeTV2Y0dGamFYUnBaWE0vTGx0cFhTQS9JSFJvYVhNdWJHbHVaWE11YjNCaFkybDBhV1Z6UHk1YmFWMGdPaUF4TzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amRIZ3VjM1J5YjJ0bFUzUjViR1VnUFNCZ2NtZGlZU2drZTJOdmJHOXlmU3drZTI5d1lXTnBkSGw5S1dBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtTjBlQzVzYVc1bFYybGtkR2dnUFNCMGFHbHpMbXhwYm1WekxuZHBaSFJvY3o4dVcybGRJRDhnZEdocGN5NXNhVzVsY3k1M2FXUjBhSE0vTGx0cFhTQTZJREU3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR2xtSUNocElEMDlQU0IwYUdsekxsOWpkWEp5Wlc1MFRHbHVaVWxrZUNsY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRHOW5aMnhsUTNWeWNtVnVkRXhwYm1WVGRIbHNaU2gwY25WbEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnRkV3gwYVV4cGJtVnpJRDBnZEdocGN5NXRkV3gwYVhCc1pVeHBibVZ6UTI5MWJuUnpXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjI1MGNtOXNVRzlwYm5RNklFUkhMbEJ2YVc1MElId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLRzExYkhScFRHbHVaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hwYm1WTVpXNGdQU0IwYUdsekxtZGxkRXhwYm1WTVpXNW5kR2dvWVZnc0lHRlpMQ0JpV0N3Z1lsa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUlFiMmx1ZEZkcGRHaE5ZWEpyWlhJZ1BTQjBhR2x6TG1kbGRGQnZhVzUwVDI1RWFYTjBZVzVqWlNoaFdDd2dZVmtzSUdKWUxDQmlXU3dnYzJsNlpWUnZMQ0JzYVc1bFRHVnVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdWdVpIUlFiMmx1ZEZkcGRHaE5ZWEpyWlhJZ1BTQjBhR2x6TG1kbGRGQnZhVzUwVDI1RWFYTjBZVzVqWlNoaVdDd2dZbGtzSUdGWUxDQmhXU3dnYzJsNlpVWnliMjBzSUd4cGJtVk1aVzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZVmdnUFNCemRHRnlkRkJ2YVc1MFYybDBhRTFoY210bGNpNTRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lWa2dQU0J6ZEdGeWRGQnZhVzUwVjJsMGFFMWhjbXRsY2k1NU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWWxnZ1BTQmxibVIwVUc5cGJuUlhhWFJvVFdGeWEyVnlMbmc3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmlXU0E5SUdWdVpIUlFiMmx1ZEZkcGRHaE5ZWEpyWlhJdWVUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUnliMnhRYjJsdWRDQTlJSFJvYVhNdWJHbHVaWE11Wm5KdmJWdHBYU0ErSUhSb2FYTXViR2x1WlhNdWRHOWJhVjBnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtWnBibVJEYjI1MGNtOXNVRzlwYm5Rb2JYVnNkR2xNYVc1bGN5d2dZVmdzSUdGWkxDQmlXQ3dnWWxrc0lHa3BJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1bWFXNWtRMjl1ZEhKdmJGQnZhVzUwS0cxMWJIUnBUR2x1WlhNc0lHSllMQ0JpV1N3Z1lWZ3NJR0ZaTENCcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM1I0TG0xdmRtVlVieWhoV0NFc0lHRlpJU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1OMGVDNXhkV0ZrY21GMGFXTkRkWEoyWlZSdktHTnZiblJ5YjJ4UWIybHVkQzU0TENCamIyNTBjbTlzVUc5cGJuUXVlU3dnWWxnc0lHSlpLVHRjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amRIZ3ViVzkyWlZSdktHRllJU3dnWVZraEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM1I0TG14cGJtVlVieWhpV0N3Z1lsa3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXNhVzVsY3k1a2NtRjNRWEp5YjNkeklEOC9JSFJvYVhNdWJHbHVaWE11WkhKaGQwRnljbTkzYzBGeWNqOHVaMlYwUW1sMEtHa3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVd4cGJtVk1aVzRwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3hwYm1WTVpXNGdQU0IwYUdsekxtZGxkRXhwYm1WTVpXNW5kR2dvWVZnc0lHRlpMQ0JpV0N3Z1lsa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3hwYm1WTVpXNGdQaUIwYUdsekxtRnljbTkzVjJsa2RHZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1lYSnliM2RRYjJsdWRDQTlJQ0Z0ZFd4MGFVeHBibVZ6SUQ4Z2RHaHBjeTVuWlhSUWIybHVkRTl1UkdsemRHRnVZMlVvWVZnc0lHRlpMQ0JpV0N3Z1lsa3NJSE5wZW1WVWJ5d2diR2x1WlV4bGJpa2dPaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JoY25KdmQwTlFXQ0E5SUcxMWJIUnBUR2x1WlhNZ1B5QmpiMjUwY205c1VHOXBiblFoTG5nZ09pQmhXRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1lYSnliM2REVUZrZ1BTQnRkV3gwYVV4cGJtVnpJRDhnWTI5dWRISnZiRkJ2YVc1MElTNTVJRG9nWVZrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMkZ1ZG1GelFYSnliM2NvZEdocGN5NWpkSGdzSUdGeWNtOTNVRzlwYm5RL0xuZ2dQejhnWVZnc0lHRnljbTkzVUc5cGJuUS9MbmtnUHo4Z1lWa3NJR0Z5Y205M1ExQllMQ0JoY25KdmQwTlFXU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WTNSNExuTjBjbTlyWlNncE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzUjRMbU5zYjNObFVHRjBhQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hwSUQwOVBTQjBhR2x6TGw5amRYSnlaVzUwVEdsdVpVbGtlQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11ZEc5bloyeGxRM1Z5Y21WdWRFeHBibVZUZEhsc1pTaG1ZV3h6WlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NW1hV3hzVEdWbWRFSnZkSFJ2YlZKbFkzUW9LVHRjYmlBZ2ZWeHVYRzRnSUhSdloyZHNaVU4xY25KbGJuUk1hVzVsVTNSNWJHVW9abXhoWnpvZ1ltOXZiR1ZoYmlrZ2UxeHVJQ0FnSUhOM2FYUmphQ0FvZEdocGN5NWpkWEp5Wlc1MFRHbHVaVk4wZVd4bEtTQjdYRzRnSUNBZ0lDQmpZWE5sSUZOallYUjBaWEpRYkc5MFEzVnljbVZ1ZEV4cGJtVlRkSGxzWlM1aWIyeGtPaUI3WEc0Z0lDQWdJQ0FnSUdac1lXY2dQeUIwYUdsekxtTjBlQzVzYVc1bFYybGtkR2dnS3owZ01pQTZJSFJvYVhNdVkzUjRMbXhwYm1WWGFXUjBhQ0F0UFNBeU8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOaGMyVWdVMk5oZEhSbGNsQnNiM1JEZFhKeVpXNTBUR2x1WlZOMGVXeGxMbVJoYzJobFpEb2dlMXh1SUNBZ0lDQWdJQ0JtYkdGbklEOGdkR2hwY3k1amRIZ3VjMlYwVEdsdVpVUmhjMmdvV3pVc0lEVmRLU0E2SUhSb2FYTXVZM1I0TG5ObGRFeHBibVZFWVhOb0tGdGRLVHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ1oyVjBUV0Z5YTJWeWMxTnBlbVZ6S0hOd1RHOXZhem9nWVc1NUxDQnRZWEpyWlhKVGFYcGxRMjlzT2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzTENCcE9pQnVkVzFpWlhJcE9pQk5ZWEpyWlhKVGFYcGxJSHRjYmlBZ0lDQnNaWFFnYzJsNlpVWnliMjBnUFNBek8xeHVJQ0FnSUd4bGRDQnphWHBsVkc4Z1BTQXpPMXh1SUNBZ0lHbG1JQ2h0WVhKclpYSlRhWHBsUTI5c0tTQjdYRzRnSUNBZ0lDQnphWHBsUm5KdmJTQTlJQ2h6Y0V4dmIyc3ViV0Z5YTJWeVRXbHVVMmw2WlNBcklDaHpjRXh2YjJzdWJXRnlhMlZ5VFdGNFUybDZaU0F0SUhOd1RHOXZheTV0WVhKclpYSk5hVzVUYVhwbEtTQXFJRzFoY210bGNsTnBlbVZEYjJ3dWMyTmhiR1VvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1NrZ0x5QXlPMXh1SUNBZ0lDQWdjMmw2WlZSdklEMGdLSE53VEc5dmF5NXRZWEpyWlhKTmFXNVRhWHBsSUNzZ0tITndURzl2YXk1dFlYSnJaWEpOWVhoVGFYcGxJQzBnYzNCTWIyOXJMbTFoY210bGNrMXBibE5wZW1VcElDb2diV0Z5YTJWeVUybDZaVU52YkM1elkyRnNaU2gwYUdsekxteHBibVZ6TG5SdlcybGRLU2tnTHlBeU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2MzQk1iMjlyTG0xaGNtdGxja1JsWm1GMWJIUlRhWHBsS1NCN1hHNGdJQ0FnSUNCemFYcGxSbkp2YlNBOUlITndURzl2YXk1dFlYSnJaWEpFWldaaGRXeDBVMmw2WlNBdklESTdYRzRnSUNBZ0lDQnphWHBsVkc4Z1BTQnpjRXh2YjJzdWJXRnlhMlZ5UkdWbVlYVnNkRk5wZW1VZ0x5QXlPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZTNOcGVtVkdjbTl0TENCemFYcGxWRzk5TzF4dUlDQjlYRzVjYmx4dUlDQm1hV3hzVEdWbWRFSnZkSFJ2YlZKbFkzUW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NtVmpkQ0E5SUc1bGR5QlFZWFJvTWtRb0tUdGNiaUFnSUNCeVpXTjBMbkpsWTNRb2RHaHBjeTV6Y0M1NVFYaHBjMEp2ZUM1dGFXNVlMQ0IwYUdsekxuTndMbmxCZUdselFtOTRMbTFoZUZrc0lIUm9hWE11YzNBdWVVRjRhWE5DYjNndWQybGtkR2dzSUhSb2FYTXVjM0F1ZUVGNGFYTkNiM2d1YUdWcFoyaDBLVHRjYmlBZ0lDQjBhR2x6TG1OMGVDNW1hV3hzVTNSNWJHVWdQU0JnZDJocGRHVmdPMXh1SUNBZ0lIUm9hWE11WTNSNExtSmxaMmx1VUdGMGFDZ3BPMXh1SUNBZ0lIUm9hWE11WTNSNExtWnBiR3dvY21WamRDazdYRzRnSUNBZ2RHaHBjeTVqZEhndVkyeHZjMlZRWVhSb0tDazdYRzRnSUgxY2JseHVJQ0JqY21WaGRHVk5kV3gwYVV4cGJtVnpTVzVrYVdObGN5Z3BPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0JoY25KaGVVbGtlSE5DYVhSQmNuSmhlU0E5SUc1bGR5QkNhWFJCY25KaGVTaDBhR2x6TG14cGJtVnpMbVp5YjIwdWJHVnVaM1JvS1R0Y2JpQWdJQ0JoY25KaGVVbGtlSE5DYVhSQmNuSmhlUzV6WlhSQmJHd29kSEoxWlNrN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlDMHhPeUFvYVNBOUlHRnljbUY1U1dSNGMwSnBkRUZ5Y21GNUxtWnBibVJPWlhoMEtHa3BLU0FoUFQwZ0xURTdLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQm1hWEp6ZEV4cGJtVkpaSGdnUFNCcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnY0RFZ1BTQjBhR2x6TG14cGJtVnpMbVp5YjIxYlptbHljM1JNYVc1bFNXUjRYVHRjYmlBZ0lDQWdJR052Ym5OMElIQXlJRDBnZEdocGN5NXNhVzVsY3k1MGIxdG1hWEp6ZEV4cGJtVkpaSGhkTzF4dUlDQWdJQ0FnYkdWMElHeHBibVZ6VUdWeVVHRnBjaUE5SURFN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdhVHNnS0dvZ1BTQmhjbkpoZVVsa2VITkNhWFJCY25KaGVTNW1hVzVrVG1WNGRDaHFLU2tnSVQwOUlDMHhPeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3YjJsdWRGUnZRMjl0Y0dGeVpURWdQU0IwYUdsekxteHBibVZ6TG1aeWIyMWJhbDA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEJ2YVc1MFZHOURiMjF3WVhKbE1pQTlJSFJvYVhNdWJHbHVaWE11ZEc5YmFsMDdYRzRnSUNBZ0lDQWdJR2xtSUNod2IybHVkRlJ2UTI5dGNHRnlaVEVnUFQwOUlIQXhJQ1ltSUhCdmFXNTBWRzlEYjIxd1lYSmxNaUE5UFQwZ2NESWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NHOXBiblJVYjBOdmJYQmhjbVV5SUQwOVBTQndNU0FtSmlCd2IybHVkRlJ2UTI5dGNHRnlaVEVnUFQwOUlIQXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV0ZFd4MGFYQnNaVXhwYm1WelEyOTFiblJ6VzJwZElEMGdLeXRzYVc1bGMxQmxjbEJoYVhJN1hHNGdJQ0FnSUNBZ0lDQWdZWEp5WVhsSlpIaHpRbWwwUVhKeVlYa3VjMlYwUW1sMEtHb3NJR1poYkhObExDQm1ZV3h6WlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2hzYVc1bGMxQmxjbEJoYVhJZ1BpQXhLVnh1SUNBZ0lDQWdJQ0IwYUdsekxtMTFiSFJwY0d4bFRHbHVaWE5EYjNWdWRITmJabWx5YzNSTWFXNWxTV1I0WFNBOUlERTdYRzRnSUNBZ0lDQmhjbkpoZVVsa2VITkNhWFJCY25KaGVTNXpaWFJDYVhRb2FTd2dabUZzYzJVc0lHWmhiSE5sS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCamFHVmphME52YjNKa2MwOXVUR2x1WlNoNE9pQnVkVzFpWlhJc0lIazZJRzUxYldKbGNpazZJRzUxYldKbGNpQjdYRzRnSUNBZ2JHVjBJR05oYm1ScFpHRjBaVWxrZUNBOUlDMHhPMXh1SUNBZ0lHeGxkQ0J0YVc1RWFYTjBJRDBnYm5Wc2JEdGNiaUFnSUNCc1pYUWdaR2x6ZENBOUlHNTFiR3c3WEc0Z0lDQWdZMjl1YzNRZ2MzQk1iMjlySUQwZ2RHaHBjeTV6Y0M1blpYUlBjSFJwYjI1ektDa3ViRzl2YXp0Y2JpQWdJQ0JqYjI1emRDQnRZWEpyWlhKVGFYcGxRMjlzSUQwZ2MzQk1iMjlyV3lkemFYcGxRMjlzZFcxdVRtRnRaU2RkSUQ4Z2RHaHBjeTV6Y0M1a1lYUmhSbkpoYldVdVkyOXNLSE53VEc5dmExc25jMmw2WlVOdmJIVnRiazVoYldVblhTa2dPaUJ1ZFd4c08xeHVJQ0FnSUdOdmJuTjBJR1pwYkhSbGNpQTlJSFJvYVhNdWMzQXVaR0YwWVVaeVlXMWxMbVpwYkhSbGNqdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11YkdsdVpYTXVabkp2YlM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0dacGJIUmxjaTVuWlhRb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTQW1KaUJtYVd4MFpYSXVaMlYwS0hSb2FYTXViR2x1WlhNdWRHOWJhVjBwSUNZbUlIUm9hWE11ZG1semFXSnBiR2wwZVM1blpYUkNhWFFvYVNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzTnBlbVZHY205dExDQnphWHBsVkc5OUlEMGdkR2hwY3k1blpYUk5ZWEpyWlhKelUybDZaWE1vYzNCTWIyOXJMQ0J0WVhKclpYSlRhWHBsUTI5c0xDQnBLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjRVp5YjIwZ1BTQjBhR2x6TG5Od0xuZHZjbXhrVkc5VFkzSmxaVzRvZEdocGN5NTRRWGhwYzBOdmJDNW5aWFFvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1N3Z2RHaHBjeTU1UVhocGMwTnZiQzVuWlhRb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElIQlVieUE5SUhSb2FYTXVjM0F1ZDI5eWJHUlViMU5qY21WbGJpaDBhR2x6TG5oQmVHbHpRMjlzTG1kbGRDaDBhR2x6TG14cGJtVnpMblJ2VzJsZEtTd2dkR2hwY3k1NVFYaHBjME52YkM1blpYUW9kR2hwY3k1c2FXNWxjeTUwYjF0cFhTa3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV0ZFd4MGFYQnNaVXhwYm1WelEyOTFiblJ6VzJsZEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ2RHaHBjeTVuWlhSTWFXNWxUR1Z1WjNSb0tIQkdjbTl0TG5nc0lIQkdjbTl0TG5rc0lIQlVieTU0TENCd1ZHOHVlU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWm5KdmJVMWhjbXRsY2lBOUlIUm9hWE11WjJWMFVHOXBiblJQYmtScGMzUmhibU5sS0hCR2NtOXRMbmdzSUhCR2NtOXRMbmtzSUhCVWJ5NTRMQ0J3Vkc4dWVTd2djMmw2WlZSdkxDQnNaVzRwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSdlRXRnlhMlZ5SUQwZ2RHaHBjeTVuWlhSUWIybHVkRTl1UkdsemRHRnVZMlVvY0ZSdkxuZ3NJSEJVYnk1NUxDQndSbkp2YlQ4dWVDd2djRVp5YjIwL0xua3NJSE5wZW1WR2NtOXRMQ0JzWlc0cE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHTnZiblJ5YjJ4UWIybHVkQ0E5SUhSb2FYTXViR2x1WlhNdVpuSnZiVnRwWFNBK0lIUm9hWE11YkdsdVpYTXVkRzliYVYwZ1AxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NW1hVzVrUTI5dWRISnZiRkJ2YVc1MEtIUm9hWE11YlhWc2RHbHdiR1ZNYVc1bGMwTnZkVzUwYzF0cFhTd2dabkp2YlUxaGNtdGxjaTU0TENCbWNtOXRUV0Z5YTJWeUxua3NJSFJ2VFdGeWEyVnlMbmdzSUhSdlRXRnlhMlZ5TG5rc0lHa3BJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11Wm1sdVpFTnZiblJ5YjJ4UWIybHVkQ2gwYUdsekxtMTFiSFJwY0d4bFRHbHVaWE5EYjNWdWRITmJhVjBzSUhSdlRXRnlhMlZ5TG5nc0lIUnZUV0Z5YTJWeUxua3NJR1p5YjIxTllYSnJaWEl1ZUN3Z1puSnZiVTFoY210bGNpNTVMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ0lDQmthWE4wSUQwZ2RHaHBjeTVqWVd4amRXeGhkR1ZFYVhOMFZHOURkWEoyWlV4cGJtVW9hU3dnZUN3Z2VTd2dabkp2YlUxaGNtdGxjaXdnZEc5TllYSnJaWElzSUdOdmJuUnliMnhRYjJsdWRDazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnWkdsemRDQTlJSFJvYVhNdVkyRnNZM1ZzWVhSbFJHbHpkRlJ2VTNSeVlXbG5hSFJNYVc1bEtIZ3NJSGtzSUhCR2NtOXRMQ0J3Vkc4cE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNnb0lXMXBia1JwYzNRZ0ppWWdaR2x6ZENBaFBUMGdiblZzYkNBbUppQmthWE4wSUR3Z05Ta2dmSHdnYldsdVJHbHpkQ0FtSmlCa2FYTjBJQ0U5UFNCdWRXeHNJQ1ltSUdScGMzUWdQQ0J0YVc1RWFYTjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JXbHVSR2x6ZENBOUlHUnBjM1E3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnVaR2xrWVhSbFNXUjRJRDBnYVR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZMkZ1Wkdsa1lYUmxTV1I0TzF4dUlDQjlYRzVjYmlBZ1kyRnNZM1ZzWVhSbFJHbHpkRlJ2VTNSeVlXbG5hSFJNYVc1bEtIZzZJRzUxYldKbGNpd2dlVG9nYm5WdFltVnlMQ0J3TVRvZ1JFY3VVRzlwYm5Rc0lIQXlPaUJFUnk1UWIybHVkQ2s2SUc1MWJXSmxjaUI4SUc1MWJHd2dlMXh1SUNBZ0lDOHFJR05oYkdOMWJHRjBhVzVuSUdOdmIzSmthVzVoZEdWeklHOW1JR0VnY21WamRDQmhjbTkxYm1RZ1lTQnNhVzVsTGlCSlppQmpkWEp6YjNJZ1kyOXZjbVJ6SUdGeVpTQnZkWFJ6YVdSbElIUm9hWE1nY21WamRDQXRJR0Z6YzNWdFpTQjBhR0YwWEc0Z0lDQWdJQ0FnSUhCdmFXNTBJR2x6SUc1dmRDQnZiaUJzYVc1bElHRnVaQ0JrYnlCdWIzUWdZMkZzWTNWc1lYUmxJR1JwYzNSaGJtTmxJSFJ2SUd4cGJtVWdLaTljYmlBZ0lDQmpiMjV6ZENCNFRXbHVJRDBnVFdGMGFDNXRhVzRvY0RFdWVDd2djREl1ZUNrN1hHNGdJQ0FnWTI5dWMzUWdlRTFoZUNBOUlFMWhkR2d1YldGNEtIQXhMbmdzSUhBeUxuZ3BPMXh1SUNBZ0lHTnZibk4wSUhsTmFXNGdQU0JOWVhSb0xtMXBiaWh3TVM1NUxDQndNaTU1S1R0Y2JpQWdJQ0JqYjI1emRDQjVUV0Y0SUQwZ1RXRjBhQzV0WVhnb2NERXVlU3dnY0RJdWVTazdYRzVjYmlBZ0lDQXZMMkZrWkdsdVp5QmhJR052ZFhCc1pTQnZaaUJ3YVhobGJITWdkRzhnYVc1amNtVmhjMlVnZEdobElIZHBaSFJvTDJobGFXZG9kQ0J2WmlCMGFHVWdjbVZqZEZ4dUlDQWdJR052Ym5OMElIUm9jbVZ6YUc5c1pDQTlJREk3WEc0Z0lDQWdjbVYwZFhKdUlIZ2dQajBnZUUxcGJpQXRJSFJvY21WemFHOXNaQ0FtSmlCNElEdzlJSGhOWVhnZ0t5QjBhSEpsYzJodmJHUWdKaVlnZVNBK1BTQjVUV2x1SUMwZ2RHaHlaWE5vYjJ4a0lDWW1JSGtnUEQwZ2VVMWhlQ0FySUhSb2NtVnphRzlzWkNBL1hHNGdJQ0FnSUNCMGFHbHpMbVJwYzNSVWIxTjBjbUZwWjJoMFRHbHVaVk5sWjIxbGJuUW9lQ3dnZVN3Z2NERXNJSEF5S1NBNlhHNGdJQ0FnSUNCdWRXeHNPMXh1SUNCOVhHNWNiaUFnWkdsemRGUnZVM1J5WVdsbmFIUk1hVzVsVTJWbmJXVnVkQ2g0T2lCdWRXMWlaWElzSUhrNklHNTFiV0psY2l3Z2NERTZJRVJITGxCdmFXNTBMQ0J3TWpvZ1JFY3VVRzlwYm5RcElIdGNiaUFnSUNCamIyNXpkQ0JrYVhOMElEMGdLSGd4T2lCdWRXMWlaWElzSUhreE9pQnVkVzFpWlhJc0lIZ3lPaUJ1ZFcxaVpYSXNJSGt5T2lCdWRXMWlaWElwSUQwK0lFMWhkR2d1Y0c5M0tDaDRNU0F0SUhneUtTd2dNaWtnS3lCTllYUm9MbkJ2ZHlnb2VURWdMU0I1TWlrc0lESXBPMXh1SUNBZ0lHTnZibk4wSUd3Z1BTQmthWE4wS0hBeExuZ3NJSEF4TG5rc0lIQXlMbmdzSUhBeUxua3BPMXh1SUNBZ0lHbG1JQ2hzSUQwOUlEQXBJSEpsZEhWeWJpQmthWE4wS0hnc0lIa3NJSEF4TG5nc0lIQXhMbmtwTzF4dUlDQWdJR3hsZENCMElEMGdLQ2g0SUMwZ2NERXVlQ2tnS2lBb2NESXVlQ0F0SUhBeExuZ3BJQ3NnS0hrZ0xTQndNUzU1S1NBcUlDaHdNaTU1SUMwZ2NERXVlU2twSUM4Z2JEdGNiaUFnSUNCMElEMGdUV0YwYUM1dFlYZ29NQ3dnVFdGMGFDNXRhVzRvTVN3Z2RDa3BPMXh1SUNBZ0lISmxkSFZ5YmlCa2FYTjBLSGdzSUhrc0lIQXhMbmdnS3lCMElDb2dLSEF5TG5nZ0xTQndNUzU0S1N3Z2NERXVlU0FySUhRZ0tpQW9jREl1ZVNBdElIQXhMbmtwS1R0Y2JpQWdmVnh1WEc0Z0lHTmhiR04xYkdGMFpVUnBjM1JVYjBOMWNuWmxUR2x1WlNocE9pQnVkVzFpWlhJc0lIZzZJRzUxYldKbGNpd2dlVG9nYm5WdFltVnlMQ0J3TVRvZ1JFY3VVRzlwYm5Rc0lIQXlPaUJFUnk1UWIybHVkQ3hjYmlBZ0lDQndZem9nUkVjdVVHOXBiblFwT2lCdWRXMWlaWElnZkNCdWRXeHNJSHRjYmlBZ0lDQXZLaUJqWVd4amRXeGhkR2x1WnlCamIyOXlaR2x1WVhSbGN5QnZaaUJoSUhKbFkzUWdZWEp2ZFc1a0lHRWdiR2x1WlM0Z1NXWWdZM1Z5YzI5eUlHTnZiM0prY3lCaGNtVWdiM1YwYzJsa1pTQjBhR2x6SUhOb1lYQmxJQzBnWVhOemRXMWxJSFJvWVhSY2JpQWdJQ0FnSUNBZ2NHOXBiblFnYVhNZ2JtOTBJRzl1SUd4cGJtVWdZVzVrSUdSdklHNXZkQ0JqWVd4amRXeGhkR1VnWkdsemRHRnVZMlVnZEc4Z2JHbHVaU0FxTDF4dUlDQWdJR052Ym5OMElIaE5hVzRnUFNCTllYUm9MbTFwYmlod01TNTRMQ0J3TWk1NExDQndZeTU0S1R0Y2JpQWdJQ0JqYjI1emRDQjRUV0Y0SUQwZ1RXRjBhQzV0WVhnb2NERXVlQ3dnY0RJdWVDd2djR011ZUNrN1hHNGdJQ0FnWTI5dWMzUWdlVTFwYmlBOUlFMWhkR2d1YldsdUtIQXhMbmtzSUhBeUxua3NJSEJqTG5rcE8xeHVJQ0FnSUdOdmJuTjBJSGxOWVhnZ1BTQk5ZWFJvTG0xaGVDaHdNUzU1TENCd01pNTVMQ0J3WXk1NUtUdGNibHh1SUNBZ0lDOHZZV1JrYVc1bklHRWdZMjkxY0d4bElHOW1JSEJwZUdWc2N5QjBieUJwYm1OeVpXRnpaU0IwYUdVZ2QybGtkR2d2YUdWcFoyaDBJRzltSUhSb1pTQnlaV04wWEc0Z0lDQWdZMjl1YzNRZ2RHaHlaWE5vYjJ4a0lEMGdNanRjYmlBZ0lDQnBaaUFvZUNBK1BTQjRUV2x1SUMwZ2RHaHlaWE5vYjJ4a0lDWW1JSGdnUEQwZ2VFMWhlQ0FySUhSb2NtVnphRzlzWkNBbUppQjVJRDQ5SUhsTmFXNGdMU0IwYUhKbGMyaHZiR1FnSmlZZ2VTQThQU0I1VFdGNElDc2dkR2h5WlhOb2IyeGtLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjNJRDBnZUUxaGVDQXRJSGhOYVc0N1hHNGdJQ0FnSUNCamIyNXpkQ0JvSUQwZ2VVMWhlQ0F0SUhsTmFXNDdYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVqWVd4amRXeGhkR1ZFYVhOMFZHOURkWEoyWlVsdVVtVmpkQ2g0TENCNUxDQndNU3dnY0dNc0lIQXlMQ0IzTENCb0tUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQmpZV3hqZFd4aGRHVkVhWE4wVkc5RGRYSjJaVWx1VW1WamRDaDRPaUJ1ZFcxaVpYSXNJSGs2SUc1MWJXSmxjaXdnY0RBNklFUkhMbEJ2YVc1MExDQndNVG9nUkVjdVVHOXBiblFzSUhBeU9pQkVSeTVRYjJsdWRDeGNiaUFnSUNCM09pQnVkVzFpWlhJc0lHZzZJRzUxYldKbGNpazZJRzUxYldKbGNpQjdYRzRnSUNBZ1kyOXVjM1FnYzNSbGNFeGxiaUE5SURNN1hHNGdJQ0FnWTI5dWMzUWdjM1JsY0hOT2RXMGdQU0JOWVhSb0xtWnNiMjl5S0NoM0lDc2dhQ2tnTHlCemRHVndUR1Z1S1R0Y2JpQWdJQ0JqYjI1emRDQmtaV3gwWVZRZ1BTQXhJQzhnYzNSbGNITk9kVzA3WEc0Z0lDQWdZMjl1YzNRZ1lYSnlXQ0E5SUc1bGR5QlZhVzUwTXpKQmNuSmhlU2h6ZEdWd2MwNTFiU2s3WEc0Z0lDQWdZMjl1YzNRZ1lYSnlXU0E5SUc1bGR5QlZhVzUwTXpKQmNuSmhlU2h6ZEdWd2MwNTFiU2s3WEc0Z0lDQWdZMjl1YzNRZ2JXRjRTRmNnUFNCdVpYY2dWV2x1ZERNeVFYSnlZWGtvYzNSbGNITk9kVzBwTzF4dUlDQWdJR3hsZENCdGFXNVRkVzFJVnpvZ2JuVnRZbVZ5SUh3Z2JuVnNiQ0E5SUc1MWJHdzdYRzRnSUNBZ1kyOXVjM1FnWTJGdVpHbGtZWFJsU1dSNGN5QTlJRzVsZHlCQ2FYUkJjbkpoZVNoemRHVndjMDUxYlNrN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCaGNuSllMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IwSUQwZ2FTQXFJR1JsYkhSaFZEdGNiaUFnSUNBZ0lHTnZibk4wSUhoUGJrTjFjblpsSUQwZ1RXRjBhQzV3YjNjb0tERWdMU0IwS1N3Z01pa2dLaUJ3TUM1NElDc2dNaUFxSUhRZ0tpQW9NU0F0SUhRcElDb2djREV1ZUNBcklFMWhkR2d1Y0c5M0tIUXNJRElwSUNvZ2NESXVlRHRjYmlBZ0lDQWdJR052Ym5OMElIbFBia04xY25abElEMGdUV0YwYUM1d2IzY29LREVnTFNCMEtTd2dNaWtnS2lCd01DNTVJQ3NnTWlBcUlIUWdLaUFvTVNBdElIUXBJQ29nY0RFdWVTQXJJRTFoZEdndWNHOTNLSFFzSURJcElDb2djREl1ZVR0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpsWTNSWElEMGdUV0YwYUM1aFluTW9lQ0F0SUhoUGJrTjFjblpsS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpsWTNSSUlEMGdUV0YwYUM1aFluTW9lU0F0SUhsUGJrTjFjblpsS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSE4xYlVoWElEMGdjbVZqZEZjZ0t5QnlaV04wU0R0Y2JpQWdJQ0FnSUdsbUlDZ2hiV2x1VTNWdFNGY2dmSHdnYldsdVUzVnRTRmNnUGlCemRXMUlWeWxjYmlBZ0lDQWdJQ0FnYldsdVUzVnRTRmNnUFNCemRXMUlWenRjYmlBZ0lDQWdJRzFoZUVoWFcybGRJRDBnVFdGMGFDNXRZWGdvY21WamRGY3NJSEpsWTNSSUtUdGNiaUFnSUNBZ0lHRnljbGhiYVYwZ1BTQjRUMjVEZFhKMlpUdGNiaUFnSUNBZ0lHRnljbGxiYVYwZ1BTQjVUMjVEZFhKMlpUdGNiaUFnSUNCOVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCaGNuSllMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9iV0Y0U0ZkYmFWMGdQQ0J0YVc1VGRXMUlWeUVwWEc0Z0lDQWdJQ0FnSUdOaGJtUnBaR0YwWlVsa2VITXVjMlYwUW1sMEtHa3NJSFJ5ZFdVc0lHWmhiSE5sS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdiR1YwSUcxcGJrUnBjM1E2SUc1MWJXSmxjaUI4SUc1MWJHd2dQU0J1ZFd4c08xeHVJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQXRNVHNnS0dvZ1BTQmpZVzVrYVdSaGRHVkpaSGh6TG1acGJtUk9aWGgwS0dvcEtTQWhQVDBnTFRFN0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FYTjBJRDBnVFdGMGFDNW9lWEJ2ZENnb1lYSnlXRnRxWFNBdElIZ3BMQ0FvWVhKeVdWdHFYU0F0SUhrcEtUdGNiaUFnSUNBZ0lHbG1JQ2doYldsdVJHbHpkQ0I4ZkNCdGFXNUVhWE4wSUQ0Z1pHbHpkQ2xjYmlBZ0lDQWdJQ0FnYldsdVJHbHpkQ0E5SUdScGMzUTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ0YVc1RWFYTjBJVHRjYmlBZ2ZWeHVYRzRnSUdkbGRFeHBibVZNWlc1bmRHZ29jREY0T2lCdWRXMWlaWElzSUhBeGVUb2diblZ0WW1WeUxDQndNbmc2SUc1MWJXSmxjaXdnY0RKNU9pQnVkVzFpWlhJcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUJOWVhSb0xuTnhjblFvVFdGMGFDNXdiM2NvY0RKNElDMGdjREY0TENBeUtTQXJJRTFoZEdndWNHOTNLSEF5ZVNBdElIQXhlU3dnTWlrcE8xeHVJQ0I5WEc1Y2JpQWdaMlYwVUc5cGJuUlBia1JwYzNSaGJtTmxLSEF4ZURvZ2JuVnRZbVZ5TENCd01YazZJRzUxYldKbGNpd2djREo0T2lCdWRXMWlaWElzSUhBeWVUb2diblZ0WW1WeUxDQmthWE4wWVc1alpUb2diblZ0WW1WeUxDQnNaVzVuZEdnNklHNTFiV0psY2lrNklFUkhMbEJ2YVc1MElIdGNiaUFnSUNCamIyNXpkQ0JrZUNBOUlDaHdNbmdnTFNCd01YZ3BJQzhnYkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUdSNUlEMGdLSEF5ZVNBdElIQXhlU2tnTHlCc1pXNW5kR2c3WEc0Z0lDQWdZMjl1YzNRZ2NETjRJRDBnY0RKNElDMGdaR2x6ZEdGdVkyVWdLaUJrZUR0Y2JpQWdJQ0JqYjI1emRDQndNM2tnUFNCd01ua2dMU0JrYVhOMFlXNWpaU0FxSUdSNU8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkVSeTVRYjJsdWRDaHdNM2dzSUhBemVTazdYRzRnSUgxY2JseHVJQ0JtYVc1a1EyOXVkSEp2YkZCdmFXNTBLR2xrZURvZ2JuVnRZbVZ5TENCNE1Ub2diblZ0WW1WeUxDQjVNVG9nYm5WdFltVnlMQ0I0TWpvZ2JuVnRZbVZ5TENCNU1qb2diblZ0WW1WeUxDQnBQem9nYm5WdFltVnlLVG9nUkVjdVVHOXBiblFnZTF4dUlDQWdJR052Ym5OMElHMXBaRmdnUFNCNE1TQXJJQ2g0TWlBdElIZ3hLU0F2SURJN1hHNGdJQ0FnWTI5dWMzUWdiV2xrV1NBOUlIa3hJQ3NnS0hreUlDMGdlVEVwSUM4Z01qdGNiaUFnSUNCc1pYUWdaSGdnUFNCdGFXUllJQzBnZURFN1hHNGdJQ0FnYkdWMElHUjVJRDBnYldsa1dTQXRJSGt4TzF4dUlDQWdJR052Ym5OMElHUnBjM1FnUFNCTllYUm9Mbk54Y25Rb1pIZ2dLaUJrZUNBcklHUjVJQ29nWkhrcE8xeHVJQ0FnSUdSNElDODlJR1JwYzNRN1hHNGdJQ0FnWkhrZ0x6MGdaR2x6ZER0Y2JpQWdJQ0JqYjI1emRDQndaWEp3Wlc1a2FXTjFiR0Z5VEdWdUlEMGdOVEFnS2lCTllYUm9MbU5sYVd3b2FXUjRJQzhnTWlrN1hHNGdJQ0FnY21WMGRYSnVJR2xrZUNBbElESWdQVDA5SURBZ1AxeHVJQ0FnSUNBZ2JtVjNJRVJITGxCdmFXNTBLRzFwWkZnZ0t5QW9jR1Z5Y0dWdVpHbGpkV3hoY2t4bGJpQXZJRElwSUNvZ1pIa3NJRzFwWkZrZ0xTQW9jR1Z5Y0dWdVpHbGpkV3hoY2t4bGJpQXZJRElwSUNvZ1pIZ3BJRHBjYmlBZ0lDQWdJRzVsZHlCRVJ5NVFiMmx1ZENodGFXUllJQzBnS0hCbGNuQmxibVJwWTNWc1lYSk1aVzRnTHlBeUtTQXFJR1I1TENCdGFXUlpJQ3NnS0hCbGNuQmxibVJwWTNWc1lYSk1aVzRnTHlBeUtTQXFJR1I0S1R0Y2JpQWdmVnh1WEc0Z0lHTmhiblpoYzBGeWNtOTNLSEJoZEdnNklFTmhiblpoYzFKbGJtUmxjbWx1WjBOdmJuUmxlSFF5UkN3Z1lYSnliM2RGYm1SWU9pQnVkVzFpWlhJc0lHRnljbTkzUlc1a1dUb2diblZ0WW1WeUxDQnhkV0ZrV0RvZ2JuVnRZbVZ5TENCeGRXRmtXVG9nYm5WdFltVnlLVG9nZG05cFpDQjdYRzRnSUNBZ1kyOXVjM1FnWVhKeWIzZEJibWRzWlNBOUlFMWhkR2d1WVhSaGJqSW9jWFZoWkZnZ0xTQmhjbkp2ZDBWdVpGZ3NJSEYxWVdSWklDMGdZWEp5YjNkRmJtUlpLU0FySUUxaGRHZ3VVRWs3WEc0Z0lDQWdjR0YwYUM1dGIzWmxWRzhvWVhKeWIzZEZibVJZSUMwZ0tIUm9hWE11WVhKeWIzZFhhV1IwYUNBcUlFMWhkR2d1YzJsdUtHRnljbTkzUVc1bmJHVWdMU0JOWVhSb0xsQkpJQzhnTVRBcEtTeGNiaUFnSUNBZ0lHRnljbTkzUlc1a1dTQXRJQ2gwYUdsekxtRnljbTkzVjJsa2RHZ2dLaUJOWVhSb0xtTnZjeWhoY25KdmQwRnVaMnhsSUMwZ1RXRjBhQzVRU1NBdklERXdLU2twTzF4dUlDQWdJSEJoZEdndWJHbHVaVlJ2S0dGeWNtOTNSVzVrV0N3Z1lYSnliM2RGYm1SWktUdGNiaUFnSUNCd1lYUm9MbXhwYm1WVWJ5aGhjbkp2ZDBWdVpGZ2dMU0FvZEdocGN5NWhjbkp2ZDFkcFpIUm9JQ29nVFdGMGFDNXphVzRvWVhKeWIzZEJibWRzWlNBcklFMWhkR2d1VUVrZ0x5QXhNQ2twTEZ4dUlDQWdJQ0FnWVhKeWIzZEZibVJaSUMwZ0tIUm9hWE11WVhKeWIzZFhhV1IwYUNBcUlFMWhkR2d1WTI5ektHRnljbTkzUVc1bmJHVWdLeUJOWVhSb0xsQkpJQzhnTVRBcEtTazdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsIi8vIExpbmVhciByZWdyZXNzaW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF9maXRMaW5lYXJSZWdyZXNzaW9uUGFyYW1zV2l0aERhdGFOb3JtYWxpemluZyB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGdldFBsc0FuYWx5c2lzIH0gZnJvbSAnLi9wbHMvcGxzLXRvb2xzJztcbi8vIExpbmVhciByZWdyZXNzaW9uIGNvbXB1dGF0aW9ucyBsaW1pdHNcbmNvbnN0IEZBVFVSRVNfQ09VTlRfTElNSVQgPSAxMDAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9MSU1JVCA9IDEwMDAwMDA7XG4vLyBEZWZhdWx0IFBMUyBjb21wb25lbnRzIGNvdW50XG5jb25zdCBQTFNfQ09NUE9ORU5UU19DT1VOVCA9IDEwO1xuLy8gV2FzbSBjb21wdXRhdGlvbnMgc3BlY2lmaWMgY29uc3RhbnRzIChzZWUgaHR0cHM6Ly9laWdlbi50dXhmYW1pbHkub3JnL2RveC9jbGFzc0VpZ2VuXzFfMUxETFQuaHRtbClcbmNvbnN0IEJZVEVTX1BFUl9WQUxVRSA9IDQ7IC8vIHdhc20gY29tcHV0YXRpb25zIG9wZXJhdGVzIDQtYnl0ZSBmbG9hdHNcbmNvbnN0IE1FTU9SWV9TQ0FMRSA9IDI7IC8vIGR1ZSB0byB0aGUgZmVhdHVyZXMgb2YgdGhlIEVpZ2VuIGxpYiBkZWNvbXBvc2l0aW9uXG5jb25zdCBCVUZGRVJTX0NPVU5UID0gMTsgLy8gZHVlIHRvIHRoZSBmZWF0dXJlcyBvZiB0aGUgRWlnZW4gbGliIGRlY29tcG9zaXRpb25cbmNvbnN0IFdBU01fTUVNT1JZID0gMjY4NDM1NDU2OyAvLyB3YXNtIGJ1ZmZlciBzaXplIHNwZWNpZmllZCBpbiAnLi4vc2NyaXB0cy9tb2R1bGUuanNvbidcbi8qKiBDb21wdXRlIGNvZWZmaWNpZW50cyBvZiBsaW5lYXIgcmVncmVzc2lvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmVhclJlZ3Jlc3Npb25QYXJhbXMoZmVhdHVyZXMsIHRhcmdldHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlc0NvdW50ID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzYW1wbGVzQ291bnQgPSB0YXJnZXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgeUF2ZyA9IHRhcmdldHMuc3RhdHMuYXZnO1xuICAgICAgICBjb25zdCB5U3RkZXYgPSB0YXJnZXRzLnN0YXRzLnN0ZGV2O1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KGZlYXR1cmVzQ291bnQgKyAxKS5maWxsKDApO1xuICAgICAgICBwYXJhbXNbZmVhdHVyZXNDb3VudF0gPSB5QXZnO1xuICAgICAgICAvLyBUaGUgdHJpdmlhbCBjYXNlXG4gICAgICAgIGlmICgoeVN0ZGV2ID09PSAwKSB8fCAoc2FtcGxlc0NvdW50ID09PSAxKSlcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBBbmFseXplIGlucHV0cyBzaXplc1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzQW5hbHlzaXMgPSBnZXRJbnB1dHNBbmFseXNpcyhmZWF0dXJlc0NvdW50LCBzYW1wbGVzQ291bnQpO1xuICAgICAgICAgICAgaWYgKGlucHV0c0FuYWx5c2lzLnRvQXBwbHlQTFMpIHtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSB0aGUgUExTIG1ldGhvZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtc0J5UExTID0geWllbGQgZ2V0TGluZWFyUmVncmVzc2lvblBhcmFtc1VzaW5nUExTKGZlYXR1cmVzLCB0YXJnZXRzLCBpbnB1dHNBbmFseXNpcy5jb21wb25lbnRzKTtcbiAgICAgICAgICAgICAgICBsZXQgdG1wU3VtID0gMDtcbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIGJpYXMgKGR1ZSB0byB0aGUgY2VudGVyaW5nIGZlYXR1cmUgb2YgUExTKVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZXNDb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IHBhcmFtc0J5UExTW2ldO1xuICAgICAgICAgICAgICAgICAgICB0bXBTdW0gKz0gcGFyYW1zQnlQTFNbaV0gKiBmZWF0dXJlcy5ieUluZGV4KGkpLnN0YXRzLmF2ZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyYW1zW2ZlYXR1cmVzQ291bnRdIC09IHRtcFN1bTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm9uLWNvbnN0YW50IGNvbHVtbnMgZGF0YVxuICAgICAgICAgICAgY29uc3Qgbm9uQ29uc3RGZWF0dXJlQ29sc0luZGVjZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5vbkNvbnN0RmVhdHVyZUNvbHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5vbkNvbnN0RmVhdHVyZUF2Z3MgPSBuZXcgRmxvYXQzMkFycmF5KGZlYXR1cmVzQ291bnQpO1xuICAgICAgICAgICAgY29uc3Qgbm9uQ29uc3RGZWF0dXJlU3RkZXZzID0gbmV3IEZsb2F0MzJBcnJheShmZWF0dXJlc0NvdW50KTtcbiAgICAgICAgICAgIGxldCBpZHggPSAwO1xuICAgICAgICAgICAgbGV0IG5vbkNvbnN0RmVhdHVyZXNDb3VudCA9IDA7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IG5vbi1jb25zdGFudCBjb2x1bW5zIGRhdGFcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBjb2wuc3RhdHM7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLnN0ZGV2ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub25Db25zdEZlYXR1cmVDb2xzSW5kZWNlcy5wdXNoKGlkeCk7XG4gICAgICAgICAgICAgICAgICAgIG5vbkNvbnN0RmVhdHVyZUNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgICAgICBub25Db25zdEZlYXR1cmVBdmdzW25vbkNvbnN0RmVhdHVyZXNDb3VudF0gPSBzdGF0cy5hdmc7XG4gICAgICAgICAgICAgICAgICAgIG5vbkNvbnN0RmVhdHVyZVN0ZGV2c1tub25Db25zdEZlYXR1cmVzQ291bnRdID0gc3RhdHMuc3RkZXY7XG4gICAgICAgICAgICAgICAgICAgICsrbm9uQ29uc3RGZWF0dXJlc0NvdW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICArK2lkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSB0cml2aWFsIGNhc2VcbiAgICAgICAgICAgIGlmIChub25Db25zdEZlYXR1cmVzQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgICAgIC8vIENvbXB1dGUgcGFyYW1ldGVycyBvZiBsaW5lYXIgcmVncmVzc2lvblxuICAgICAgICAgICAgY29uc3QgdGVtcFBhcmFtcyA9IF9maXRMaW5lYXJSZWdyZXNzaW9uUGFyYW1zV2l0aERhdGFOb3JtYWxpemluZyhERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMobm9uQ29uc3RGZWF0dXJlQ29scykuY29sdW1ucywgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3hBdmdzJywgbm9uQ29uc3RGZWF0dXJlQXZncywgbm9uQ29uc3RGZWF0dXJlc0NvdW50KSwgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3hTdGRldnMnLCBub25Db25zdEZlYXR1cmVTdGRldnMsIG5vbkNvbnN0RmVhdHVyZXNDb3VudCksIHRhcmdldHMsIHlBdmcsIHlTdGRldiwgbm9uQ29uc3RGZWF0dXJlc0NvdW50ICsgMSkuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBwYXJhbXMgdGFraW5nIGludG8gYWNjb3VudCBub24tY29uc3RhbnQgY29sdW1uc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub25Db25zdEZlYXR1cmVzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBwYXJhbXNbbm9uQ29uc3RGZWF0dXJlQ29sc0luZGVjZXNbaV1dID0gdGVtcFBhcmFtc1tpXTtcbiAgICAgICAgICAgIHBhcmFtc1tmZWF0dXJlc0NvdW50XSA9IHRlbXBQYXJhbXNbbm9uQ29uc3RGZWF0dXJlc0NvdW50XTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgRml0dGVkIHRoZSB0cml2aWFsIG1vZGVsOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6ICdkdWUgdG8gdGhlIHBsYXRmb3JtIGlzc3VlJ31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH0pO1xufSAvLyBjb21wdXRlTGluUmVncmVzc2lvbkNvZWZzXG4vKiogUmV0dXJuIHByZWRpY3Rpb24gb2YgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVkaWN0aW9uQnlMaW5lYXJSZWdyZXNzaW9uKGZlYXR1cmVzLCBwYXJhbXMpIHtcbiAgICBjb25zdCBmZWF0dXJlc0NvdW50ID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgIGlmIChmZWF0dXJlc0NvdW50ICE9PSBwYXJhbXMubGVuZ3RoIC0gMSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgcGFyYW1ldGVycyBjb3VudCcpO1xuICAgIGNvbnN0IGNvbCA9IGZlYXR1cmVzLmJ5SW5kZXgoMCk7XG4gICAgY29uc3Qgc2FtcGxlc0NvdW50ID0gY29sLmxlbmd0aDtcbiAgICBjb25zdCBwcmVkaWN0aW9uID0gbmV3IEZsb2F0MzJBcnJheShzYW1wbGVzQ291bnQpO1xuICAgIGxldCByYXdEYXRhID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICBjb25zdCBiaWFzID0gcGFyYW1zW2ZlYXR1cmVzQ291bnRdO1xuICAgIGxldCB3ZWlnaHQgPSBwYXJhbXNbMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVzQ291bnQ7ICsraSlcbiAgICAgICAgcHJlZGljdGlvbltpXSA9IGJpYXMgKyB3ZWlnaHQgKiByYXdEYXRhW2ldO1xuICAgIGZvciAobGV0IGogPSAxOyBqIDwgZmVhdHVyZXNDb3VudDsgKytqKSB7XG4gICAgICAgIHJhd0RhdGEgPSBmZWF0dXJlcy5ieUluZGV4KGopLmdldFJhd0RhdGEoKTtcbiAgICAgICAgd2VpZ2h0ID0gcGFyYW1zW2pdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgKytpKVxuICAgICAgICAgICAgcHJlZGljdGlvbltpXSArPSB3ZWlnaHQgKiByYXdEYXRhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoZmVhdHVyZXMuZ2V0VW51c2VkTmFtZSgncHJlZGljdGlvbicpLCBwcmVkaWN0aW9uLCBzYW1wbGVzQ291bnQpO1xufSAvLyBnZXRQcmVkaWN0aW9uQnlMaW5lYXJSZWdyZXNzaW9uXG4vKiogR2VuZXJhdGUgdGVzdCBkYXRhc2V0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVzdERhdGFzZXRGb3JMaW5lYXJSZWdyZXNzaW9uKHJvd0NvdW50LCBjb2xDb3VudCwgZmVhdHVyZXNTY2FsZSwgZmVhdHVyZXNCaWFzLCBwYXJhbXNTY2FsZSwgcGFyYW1zQmlhcykge1xuICAgIGNvbnN0IGRmID0gZ3Jvay5kYXRhLmRlbW8ucmFuZG9tV2Fsayhyb3dDb3VudCwgY29sQ291bnQgKyAxKTtcbiAgICBjb25zdCBjb2xzID0gZGYuY29sdW1ucztcbiAgICBjb25zdCBub2lzZUNvbCA9IGNvbHMuYnlJbmRleChjb2xDb3VudCk7XG4gICAgbm9pc2VDb2wubmFtZSA9ICd5IChub2lzeSknO1xuICAgIGNvbnN0IHlOb2lzeSA9IG5vaXNlQ29sLmdldFJhd0RhdGEoKTtcbiAgICBjb25zdCB5ID0gbmV3IEZsb2F0MzJBcnJheShyb3dDb3VudCkuZmlsbChwYXJhbXNCaWFzKTtcbiAgICBsZXQgaWR4ID0gMDtcbiAgICBsZXQgc2NhbGUgPSAwO1xuICAgIGxldCBiaWFzID0gMDtcbiAgICBsZXQgd2VpZ2h0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgIGNvbC5uYW1lID0gYHgke2lkeH1gO1xuICAgICAgICBzY2FsZSA9IE1hdGgucmFuZG9tKCkgKiBmZWF0dXJlc1NjYWxlO1xuICAgICAgICBiaWFzID0gTWF0aC5yYW5kb20oKSAqIGZlYXR1cmVzQmlhcztcbiAgICAgICAgY29uc3QgYXJyID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgd2VpZ2h0ID0gTWF0aC5yYW5kb20oKSAqIHBhcmFtc1NjYWxlO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd0NvdW50OyArK2opIHtcbiAgICAgICAgICAgIGFycltqXSA9IHNjYWxlICogYXJyW2pdICsgYmlhcztcbiAgICAgICAgICAgIHlbal0gKz0gYXJyW2pdICogd2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgICsraWR4O1xuICAgICAgICBpZiAoaWR4ID09PSBjb2xDb3VudClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzY2FsZSA9IE1hdGgucmFuZG9tKCkgKiBmZWF0dXJlc1NjYWxlO1xuICAgIGJpYXMgPSBNYXRoLnJhbmRvbSgpICogZmVhdHVyZXNCaWFzO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Q291bnQ7ICsrailcbiAgICAgICAgeU5vaXN5W2pdID0gc2NhbGUgKiB5Tm9pc3lbal0gKyB5W2pdO1xuICAgIGNvbHMuYWRkKERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd5JywgeSwgcm93Q291bnQpKTtcbiAgICByZXR1cm4gZGY7XG59IC8vIGdldFRlc3REYXRhc2V0Rm9yTGluZWFyUmVncmVzc2lvblxuLyoqIFJldGV1cm4gbGluZWFyIHJlZ3Jlc3Npb24gcGFyYW1zIHVzaW5nIHRoZSBQTFMgbWV0aG9kICovXG5mdW5jdGlvbiBnZXRMaW5lYXJSZWdyZXNzaW9uUGFyYW1zVXNpbmdQTFMoZmVhdHVyZXMsIHRhcmdldHMsIGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwbHNBbmFseXNpcyA9IHlpZWxkIGdldFBsc0FuYWx5c2lzKHtcbiAgICAgICAgICAgIHRhYmxlOiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3RhcmdldHNdKSxcbiAgICAgICAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcyxcbiAgICAgICAgICAgIHByZWRpY3Q6IHRhcmdldHMsXG4gICAgICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgbmFtZXM6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGxzQW5hbHlzaXMucmVncmVzc2lvbkNvZWZmaWNpZW50cy5nZXRSYXdEYXRhKCk7XG4gICAgfSk7XG59XG4vKiogQ2hlY2sgd2FzbS1idWZmZXIgb3ZlcmZsb3cgKi9cbmNvbnN0IHdhc21CdWZmZXJPdmVyZmxvdyA9IChmZWF0dXJlc0NvdW50LCBzYW1wbGVzQ291bnQpID0+IHtcbiAgICByZXR1cm4gTUVNT1JZX1NDQUxFICogQllURVNfUEVSX1ZBTFVFICogc2FtcGxlc0NvdW50ICogKGZlYXR1cmVzQ291bnQgKyBCVUZGRVJTX0NPVU5UKSA+PSBXQVNNX01FTU9SWTtcbn07XG4vKiogQ2hlY2sgd2hldGhlciB0byBhcHBseSB0aGUgUExTIG1ldGhvZCAmIGhvdyBtYW55IGNvbXBvbmVudHMgdG8gdXNlICovXG5jb25zdCBnZXRJbnB1dHNBbmFseXNpcyA9IChmZWF0dXJlc0NvdW50LCBzYW1wbGVzQ291bnQpID0+IHtcbiAgICBpZiAod2FzbUJ1ZmZlck92ZXJmbG93KGZlYXR1cmVzQ291bnQsIHNhbXBsZXNDb3VudCkgfHwgKGZlYXR1cmVzQ291bnQgPj0gRkFUVVJFU19DT1VOVF9MSU1JVCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvQXBwbHlQTFM6IHRydWUsXG4gICAgICAgICAgICBjb21wb25lbnRzOiBQTFNfQ09NUE9ORU5UU19DT1VOVCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNhbXBsZXNDb3VudCA+PSBTQU1QTEVTX0NPVU5UX0xJTUlUKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b0FwcGx5UExTOiB0cnVlLFxuICAgICAgICAgICAgY29tcG9uZW50czogTWF0aC5taW4oUExTX0NPTVBPTkVOVFNfQ09VTlQsIGZlYXR1cmVzQ291bnQpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2FtcGxlc0NvdW50IDw9IGZlYXR1cmVzQ291bnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvQXBwbHlQTFM6IHRydWUsXG4gICAgICAgICAgICBjb21wb25lbnRzOiBNYXRoLm1pbihQTFNfQ09NUE9ORU5UU19DT1VOVCwgc2FtcGxlc0NvdW50KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9BcHBseVBMUzogZmFsc2UsXG4gICAgICAgIGNvbXBvbmVudHM6IFBMU19DT01QT05FTlRTX0NPVU5ULFxuICAgIH07XG59OyAvLyBnZXRJbnB1dHNBbmFseXNpc1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBIH0gZnJvbSAnLi9lZGEtdG9vbHMnO1xuaW1wb3J0IHsgYWRkUHJlZml4VG9FYWNoQ29sdW1uTmFtZSwgYWRkT25lV2F5QW5vdmFWaXp1YWxpemF0aW9uIH0gZnJvbSAnLi9lZGEtdWknO1xuaW1wb3J0IHsgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiB9IGZyb20gJy4vZGF0YS1nZW5lcmF0b3JzJztcbmltcG9ydCB7IExJTkVBUiwgUkJGLCBQT0xZTk9NSUFMLCBTSUdNT0lELCBnZXRUcmFpbmVkTW9kZWwsIGdldFByZWRpY3Rpb24sIGlzQXBwbGljYWJsZVNWTSwgc2hvd1RyYWluUmVwb3J0LCBnZXRQYWNrZWRNb2RlbCB9IGZyb20gJy4vc3ZtJztcbmltcG9ydCB7IFBMU19BTkFMWVNJUyB9IGZyb20gJy4vcGxzL3Bscy1jb25zdGFudHMnO1xuaW1wb3J0IHsgcnVuTVZBLCBydW5EZW1vTVZBLCBnZXRQbHNBbmFseXNpcyB9IGZyb20gJy4vcGxzL3Bscy10b29scyc7XG5pbXBvcnQgeyBvbmVXYXlBbm92YSB9IGZyb20gJy4vc3RhdC10b29scyc7XG5pbXBvcnQgeyBnZXREYnNjYW5Xb3JrZXIgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgnO1xuaW1wb3J0IHsgTXVsdGlDb2x1bW5EaW1SZWR1Y3Rpb25FZGl0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9yZWR1Y2UtZGltZW5zaW9uYWxpdHknO1xuaW1wb3J0IHsgcnVuS05OSW1wdXRlciB9IGZyb20gJy4vbWlzc2luZy12YWx1ZXMtaW1wdXRhdGlvbi91aSc7XG5pbXBvcnQgeyBNQ0xFZGl0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvbWNsLWVkaXRvcic7XG5pbXBvcnQgeyBtYXJrb3ZDbHVzdGVyIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvTUNML2NsdXN0ZXJpbmctdmlldyc7XG5pbXBvcnQgeyBNQ0xfT1BUSU9OU19UQUcgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wnO1xuaW1wb3J0IHsgZ2V0TGluZWFyUmVncmVzc2lvblBhcmFtcywgZ2V0UHJlZGljdGlvbkJ5TGluZWFyUmVncmVzc2lvbiwgZ2V0VGVzdERhdGFzZXRGb3JMaW5lYXJSZWdyZXNzaW9uIH0gZnJvbSAnLi9yZWdyZXNzaW9uJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG4vL25hbWU6IGluZm9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKCkge1xuICAgIGdyb2suc2hlbGwuaW5mbyhfcGFja2FnZS53ZWJSb290KTtcbn1cbi8vdGFnczogaW5pdFxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX2luaXRFREFBUEkoKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IE1MIHwgQ2x1c3RlciB8IERCU0NBTi4uLlxuLy9uYW1lOiBEQlNDQU5cbi8vZGVzY3JpcHRpb246IERlbnNpdHktYmFzZWQgc3BhdGlhbCBjbHVzdGVyaW5nIG9mIGFwcGxpY2F0aW9ucyB3aXRoIG5vaXNlIChEQlNDQU4pXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGNvbHVtbiB4Q29sIHt0eXBlOiBudW1lcmljYWx9XG4vL2lucHV0OiBjb2x1bW4geUNvbCB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogZG91YmxlIGVwc2lsb24gPSAwLjAyIHtjYXB0aW9uOiBFcHNpbG9ufSBbVGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiB0d28gc2FtcGxlcyBmb3IgdGhlbSB0byBiZSBjb25zaWRlcmVkIGFzIGluIHRoZSBzYW1lIG5laWdoYm9yaG9vZC5dXG4vL2lucHV0OiBpbnQgbWluUHRzID0gNCB7Y2FwdGlvbjogTWluaW11bSBwb2ludHN9IFtUaGUgbnVtYmVyIG9mIHNhbXBsZXMgKG9yIHRvdGFsIHdlaWdodCkgaW4gYSBuZWlnaGJvcmhvb2QgZm9yIGEgcG9pbnQgdG8gYmUgY29uc2lkZXJlZCBhcyBhIGNvcmUgcG9pbnQuXVxuLy9vdXRwdXQ6IGNvbHVtbiBjbHVzdGVyXG5leHBvcnQgZnVuY3Rpb24gZGJTY2FuKGRmLCB4Q29sLCB5Q29sLCBlcHNpbG9uLCBtaW5QdHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB4ID0geENvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGNvbnN0IHkgPSB5Q29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgY29uc3QgcmVzID0geWllbGQgZ2V0RGJzY2FuV29ya2VyKHgsIHksIGVwc2lsb24sIG1pblB0cyk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDbHVzdGVyIChEQlNDQU4pJyk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoY2x1c3RlckNvbE5hbWUsIHJlcyk7XG4gICAgICAgIGRmLmNvbHVtbnMuYWRkKGNsdXN0ZXIpO1xuICAgICAgICByZXR1cm4gY2x1c3RlcjtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IE1MIHwgQW5hbHl6ZSB8IFBDQS4uLlxuLy9uYW1lOiBQQ0Fcbi8vZGVzY3JpcHRpb246IFByaW5jaXBhbCBjb21wb25lbnQgYW5hbHlzaXMgKFBDQSlcbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uX2xpc3QgZmVhdHVyZXMge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gMiB7Y2FwdGlvbjogQ29tcG9uZW50c30gW051bWJlciBvZiBjb21wb25lbnRzLl1cbi8vaW5wdXQ6IGJvb2wgY2VudGVyID0gZmFsc2UgW0luZGljYXRpbmcgd2hldGhlciB0aGUgdmFyaWFibGVzIHNob3VsZCBiZSBzaGlmdGVkIHRvIGJlIHplcm8gY2VudGVyZWQuXVxuLy9pbnB1dDogYm9vbCBzY2FsZSA9IGZhbHNlIFtJbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHZhcmlhYmxlcyBzaG91bGQgYmUgc2NhbGVkIHRvIGhhdmUgdW5pdCB2YXJpYW5jZS5dXG5leHBvcnQgZnVuY3Rpb24gUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHBjYVRhYmxlID0geWllbGQgY29tcHV0ZVBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpO1xuICAgICAgICBhZGRQcmVmaXhUb0VhY2hDb2x1bW5OYW1lKCdQQycsIHBjYVRhYmxlLmNvbHVtbnMpO1xuICAgICAgICBpZiAodGFibGUuaWQgPT09IG51bGwpIC8vIHRhYmxlIGlzIGxvYWRlZCBmcm9tIGEgbG9jYWwgZmlsZVxuICAgICAgICAgICAgZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcocGNhVGFibGUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHMgPSB0YWJsZS5jb2x1bW5zO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgcGNhVGFibGUuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbC5uYW1lID0gY29scy5nZXRVbnVzZWROYW1lKGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICBjb2xzLmFkZChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vL25hbWU6IERCU0NBTiBjbHVzdGVyaW5nXG4vL3RhZ3M6IGRpbS1yZWQtcG9zdHByb2Nlc3NpbmctZnVuY3Rpb25cbi8vbWV0YS5kZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jdGlvbjogdHJ1ZVxuLy9pbnB1dDogY29sdW1uIGNvbDFcbi8vaW5wdXQ6IGNvbHVtbiBjb2wyXG4vL2lucHV0OiBkb3VibGUgZXBzaWxvbiA9IDAuMDEge2RlZmF1bHQ6IDAuMDF9W01pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIHRvIGJlIGNvbnNpZGVyZWQgYXMgaW4gdGhlIHNhbWUgbmVpZ2hib3Job29kLl1cbi8vaW5wdXQ6IGludCBtaW5pbXVtUG9pbnRzID0gNSB7ZGVmYXVsdDogNX1bTWluaW11bSBudW1iZXIgb2YgcG9pbnRzIHRvIGZvcm0gYSBkZW5zZSByZWdpb24uXVxuZXhwb3J0IGZ1bmN0aW9uIGRic2NhblBvc3RQcm9jZXNzaW5nRnVuY3Rpb24oY29sMSwgY29sMiwgZXBzaWxvbiwgbWluaW11bVBvaW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0gY29sMS5kYXRhRnJhbWU7XG4gICAgICAgIGlmIChkZiA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcmVzQ29sID0geWllbGQgZGJTY2FuKGRmLCBjb2wxLCBjb2wyLCBlcHNpbG9uLCBtaW5pbXVtUG9pbnRzKTtcbiAgICAgICAgZGYuY2hhbmdlQ29sdW1uVHlwZShyZXNDb2wsICdzdHJpbmcnKTtcbiAgICAgICAgY29uc3QgY29sTmFtZXMgPSBbY29sMS5uYW1lLCBjb2wyLm5hbWVdO1xuICAgICAgICBjb25zdCB0diA9IGdyb2suc2hlbGwudGFibGVWaWV3KGRmLm5hbWUpO1xuICAgICAgICBpZiAoIXR2KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBmaW5kIHRoZSBjb3JyZWN0IHNjYXR0ZXJQbG90Vmlld2VyIGFuZCBzZXQgdGhlIGNvbG9yQ29sdW1uTmFtZVxuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdHYudmlld2Vycykge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBERy5TY2F0dGVyUGxvdFZpZXdlciAmJiBjb2xOYW1lcy5pbmNsdWRlcyh2LnByb3BzLnhDb2x1bW5OYW1lKSAmJiBjb2xOYW1lcy5pbmNsdWRlcyh2LnByb3BzLnlDb2x1bW5OYW1lKSkge1xuICAgICAgICAgICAgICAgIHYucHJvcHMuY29sb3JDb2x1bW5OYW1lID0gcmVzQ29sLm5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vL25hbWU6IE5vbmUgKG51bWJlcilcbi8vdGFnczogZGltLXJlZC1wcmVwcm9jZXNzaW5nLWZ1bmN0aW9uXG4vL21ldGEuc3VwcG9ydGVkVHlwZXM6IGludCxmbG9hdCxkb3VibGUscW51bVxuLy9tZXRhLnN1cHBvcnRlZERpc3RhbmNlRnVuY3Rpb25zOiBEaWZmZXJlbmNlXG4vL2lucHV0OiBjb2x1bW4gY29sXG4vL2lucHV0OiBzdHJpbmcgX21ldHJpYyB7b3B0aW9uYWw6IHRydWV9XG4vL291dHB1dDogb2JqZWN0IHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclByZXByb2Nlc3NpbmdGdW5jdGlvbihjb2wsIF9tZXRyaWMpIHtcbiAgICBjb25zdCByYW5nZSA9IGNvbC5zdGF0cy5tYXggLSBjb2wuc3RhdHMubWluO1xuICAgIGNvbnN0IGVudHJpZXMgPSBjb2wudG9MaXN0KCk7XG4gICAgcmV0dXJuIHsgZW50cmllcywgb3B0aW9uczogeyByYW5nZSB9IH07XG59XG4vL25hbWU6IE5vbmUgKHN0cmluZylcbi8vdGFnczogZGltLXJlZC1wcmVwcm9jZXNzaW5nLWZ1bmN0aW9uXG4vL21ldGEuc3VwcG9ydGVkVHlwZXM6IHN0cmluZ1xuLy9tZXRhLnN1cHBvcnRlZERpc3RhbmNlRnVuY3Rpb25zOiBPbmUtSG90LExldmVuc2h0ZWluLEhhbW1pbmdcbi8vaW5wdXQ6IGNvbHVtbiBjb2xcbi8vaW5wdXQ6IHN0cmluZyBfbWV0cmljIHtvcHRpb25hbDogdHJ1ZX1cbi8vb3V0cHV0OiBvYmplY3QgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uKGNvbCwgX21ldHJpYykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBjb2wudG9MaXN0KCk7XG4gICAgcmV0dXJuIHsgZW50cmllcywgb3B0aW9uczoge30gfTtcbn1cbi8vdG9wLW1lbnU6IE1MIHwgUmVkdWNlIERpbWVuc2lvbmFsaXR5Li4uXG4vL25hbWU6IE11bHRpIENvbHVtbiBEaW1lbnNpb25hbGl0eSBSZWR1Y3Rpb25cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VEaW1lbnNpb25hbGl0eSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBuZXcgTXVsdGlDb2x1bW5EaW1SZWR1Y3Rpb25FZGl0b3IoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gdWkuZGlhbG9nKCdEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24nKVxuICAgICAgICAgICAgLmFkZChlZGl0b3IuZ2V0RWRpdG9yKCkpXG4gICAgICAgICAgICAub25PSygoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBlZGl0b3IuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbHVtbnMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHlpZWxkIG11bHRpQ29sUmVkdWNlRGltZW5zaW9uYWxpdHkocGFyYW1zLnRhYmxlLCBwYXJhbXMuY29sdW1ucywgcGFyYW1zLm1ldGhvZE5hbWUsIHBhcmFtcy5kaXN0YW5jZU1ldHJpY3MsIHBhcmFtcy53ZWlnaHRzLCBwYXJhbXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucywgcGFyYW1zLmFnZ3JlYWdncmVnYXRpb25NZXRob2QsICEhcGFyYW1zLnBsb3RFbWJlZGRpbmdzLCAhIXBhcmFtcy5jbHVzdGVyRW1iZWRkaW5ncywgcGFyYW1zLm9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICBmYXN0Um93Q291bnQ6IDEwMDAwLFxuICAgICAgICAgICAgfSwgcGFyYW1zLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb24sIHBhcmFtcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uQXJncyk7XG4gICAgICAgIH0pKS5zaG93KCk7XG4gICAgICAgIGRpYWxvZy5oZWxwVXJsID0gJ2h0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL2RpbS1yZWR1Y3Rpb24ubWQnO1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHMgPSBlZGl0b3IuY29sdW1uc0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgb2tCdXR0b24gPSBkaWFsb2cuZ2V0QnV0dG9uKCdPSycpO1xuICAgICAgICAgICAgaWYgKCFva0J1dHRvbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBpc0Rpc2FibGVkID0gIWNvbHMgfHwgY29scy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICBpZiAoaXNEaXNhYmxlZClcbiAgICAgICAgICAgICAgICBva0J1dHRvbi5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG9rQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH07XG4gICAgICAgIGVkaXRvci5vbkNvbHVtbnNDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YWxpZGF0ZSgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZXRNQ0xFZGl0b3Jcbi8vdGFnczogZWRpdG9yXG4vL2lucHV0OiBmdW5jY2FsbCBjYWxsXG5leHBvcnQgZnVuY3Rpb24gR2V0TUNMRWRpdG9yKGNhbGwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBmdW5jRWRpdG9yID0gbmV3IE1DTEVkaXRvcigpO1xuICAgICAgICB1aS5kaWFsb2coJ01hcmtvdiBjbHVzdGVyaW5nJylcbiAgICAgICAgICAgIC5hZGQoZnVuY0VkaXRvci5nZXRFZGl0b3IoKSlcbiAgICAgICAgICAgIC5vbk9LKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGZ1bmNFZGl0b3IucGFyYW1zO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGwuZnVuYy5wcmVwYXJlKHtcbiAgICAgICAgICAgICAgICBkZjogcGFyYW1zLnRhYmxlLCBjb2xzOiBwYXJhbXMuY29sdW1ucywgbWV0cmljczogcGFyYW1zLmRpc3RhbmNlTWV0cmljcyxcbiAgICAgICAgICAgICAgICB3ZWlnaHRzOiBwYXJhbXMud2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2Q6IHBhcmFtcy5hZ2dyZWFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3M6IHBhcmFtcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25zLFxuICAgICAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jQXJnczogcGFyYW1zLnByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkOiBwYXJhbXMudGhyZXNob2xkLCBtYXhJdGVyYXRpb25zOiBwYXJhbXMubWF4SXRlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICB1c2VXZWJHUFU6IHBhcmFtcy51c2VXZWJHUFUsIGluZmxhdGU6IHBhcmFtcy5pbmZsYXRlRmFjdG9yLFxuICAgICAgICAgICAgfSkuY2FsbCh0cnVlKTtcbiAgICAgICAgfSkpLnNob3coKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyclN0YWNrID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQ7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYEdldCByZWdpb24gZWRpdG9yIGVycm9yOiAke2Vyck1zZ31gKTtcbiAgICAgICAgX3BhY2thZ2UubG9nZ2VyLmVycm9yKGVyck1zZywgdW5kZWZpbmVkLCBlcnJTdGFjayk7XG4gICAgfVxufVxuLy90b3AtbWVudTogTUwgfCBDbHVzdGVyIHwgTUNMLi4uXG4vL25hbWU6IE1DTFxuLy9kZXNjcmlwdGlvbjogTWFya292IGNsdXN0ZXJpbmcgKE1DTCkgaXMgYW4gdW5zdXBlcnZpc2VkIGNsdXN0ZXJpbmcgYWxnb3JpdGhtIGZvciBncmFwaHMgYmFzZWQgb24gc2ltdWxhdGlvbiBvZiBzdG9jaGFzdGljIGZsb3cuXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGxpc3Q8Y29sdW1uPiBjb2xzXG4vL2lucHV0OiBsaXN0PHN0cmluZz4gbWV0cmljc1xuLy9pbnB1dDogbGlzdDxkb3VibGU+IHdlaWdodHNcbi8vaW5wdXQ6IHN0cmluZyBhZ2dyZWdhdGlvbk1ldGhvZFxuLy9pbnB1dDogbGlzdDxmdW5jPiBwcmVwcm9jZXNzaW5nRnVuY3Ncbi8vaW5wdXQ6IG9iamVjdCBwcmVwcm9jZXNzaW5nRnVuY0FyZ3Ncbi8vaW5wdXQ6IGludCB0aHJlc2hvbGQgPSA4MFxuLy9pbnB1dDogaW50IG1heEl0ZXJhdGlvbnMgPSAxMFxuLy9pbnB1dDogYm9vbCB1c2VXZWJHUFUgPSBmYWxzZVxuLy9pbnB1dDogZG91YmxlIGluZmxhdGUgPSAyXG4vL2VkaXRvcjogRURBOiBHZXRNQ0xFZGl0b3JcbmV4cG9ydCBmdW5jdGlvbiBNQ0woZGYsIGNvbHMsIG1ldHJpY3MsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIHByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkID0gODAsIG1heEl0ZXJhdGlvbnMgPSAxMCwgdXNlV2ViR1BVID0gZmFsc2UsIGluZmxhdGUgPSAwKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHR2ID0gKF9hID0gZ3Jvay5zaGVsbC50YWJsZVZpZXcoZGYubmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZE9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBjb2xzOiBjb2xzLm1hcCgoY29sKSA9PiBjb2wubmFtZSksXG4gICAgICAgICAgICBtZXRyaWNzOiBtZXRyaWNzLFxuICAgICAgICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uTWV0aG9kOiBhZ2dyZWdhdGlvbk1ldGhvZCxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jczogcHJlcHJvY2Vzc2luZ0Z1bmNzLm1hcCgoZnVuYykgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSBmdW5jID09PSBudWxsIHx8IGZ1bmMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZ1bmMubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDsgfSksXG4gICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY0FyZ3M6IHByZXByb2Nlc3NpbmdGdW5jQXJncyxcbiAgICAgICAgICAgIHRocmVzaG9sZDogdGhyZXNob2xkLFxuICAgICAgICAgICAgbWF4SXRlcmF0aW9uczogbWF4SXRlcmF0aW9ucyxcbiAgICAgICAgICAgIHVzZVdlYkdQVTogdXNlV2ViR1BVLFxuICAgICAgICAgICAgaW5mbGF0ZTogaW5mbGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRmLnNldFRhZyhNQ0xfT1BUSU9OU19UQUcsIHNlcmlhbGl6ZWRPcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc2MgPSB0di5hZGRWaWV3ZXIoREcuVklFV0VSLlNDQVRURVJfUExPVCwgeyB0aXRsZTogJ01DTCcsIGluaXRpYWxpemF0aW9uRnVuY3Rpb246ICdFREE6TUNMSW5pdGlhbGl6YXRpb25GdW5jdGlvbicgfSk7XG4gICAgICAgIHJldHVybiBzYztcbiAgICB9KTtcbn1cbi8vbmFtZTogTUNMSW5pdGlhbGl6YXRpb25GdW5jdGlvblxuLy9pbnB1dDogdmlld2VyIHNjXG5leHBvcnQgZnVuY3Rpb24gTUNMSW5pdGlhbGl6YXRpb25GdW5jdGlvbihzYykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0gc2MuZGF0YUZyYW1lO1xuICAgICAgICBpZiAoZGYgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgZnJhbWUgb2YgdGhlIHNjYXR0ZXIgcGxvdCBpcyBudWxsJyk7XG4gICAgICAgIGNvbnN0IG1jbFRhZyA9IGRmLmdldFRhZyhNQ0xfT1BUSU9OU19UQUcpO1xuICAgICAgICBpZiAoIW1jbFRhZylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTUNMIG9wdGlvbnMgdGFnIG9uIHRoZSBkYXRhRnJhbWUgaXMgbm90IGZvdW5kJyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBKU09OLnBhcnNlKG1jbFRhZyk7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBvcHRpb25zLmNvbHMubWFwKChjb2xOYW1lKSA9PiBkZi5jb2x1bW5zLmJ5TmFtZShjb2xOYW1lKSk7XG4gICAgICAgIGNvbnN0IHByZXByb2Nlc3NpbmdGdW5jcyA9IG9wdGlvbnMucHJlcHJvY2Vzc2luZ0Z1bmNzLm1hcCgoZnVuY05hbWUpID0+IGZ1bmNOYW1lID8gREcuRnVuYy5ieU5hbWUoZnVuY05hbWUpIDogbnVsbCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIG1hcmtvdkNsdXN0ZXIoZGYsIGNvbHMsIG9wdGlvbnMubWV0cmljcywgb3B0aW9ucy53ZWlnaHRzLCBvcHRpb25zLmFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIG9wdGlvbnMucHJlcHJvY2Vzc2luZ0Z1bmNBcmdzLCBvcHRpb25zLnRocmVzaG9sZCwgb3B0aW9ucy5tYXhJdGVyYXRpb25zLCBvcHRpb25zLnVzZVdlYkdQVSwgb3B0aW9ucy5pbmZsYXRlLCBzYyk7XG4gICAgICAgIHJldHVybiByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuc2M7XG4gICAgfSk7XG59XG4vL25hbWU6IFBMU1xuLy9kZXNjcmlwdGlvbjogQ29tcHV0ZSBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbiBhbmFseXNpcyBjb21wb25lbnRzOiBwcmVkaWN0aW9uLCByZWdyZXNzaW9uIGNvZWZmaWNpZW50cywgVC0gJiBVLXNjb3JlcywgWC1sb2FkaW5ncy5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uX2xpc3QgZmVhdHVyZXMge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGNvbHVtbiBwcmVkaWN0IHt0eXBlOiBudW1lcmljYWx9XG4vL2lucHV0OiBpbnQgY29tcG9uZW50cyA9IDNcbi8vaW5wdXQ6IGNvbHVtbiBuYW1lcyB7dHlwZTogc3RyaW5nfVxuLy9vdXRwdXQ6IG9iamVjdCBwbHNSZXN1bHRzXG5leHBvcnQgZnVuY3Rpb24gUExTKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cywgbmFtZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UGxzQW5hbHlzaXMoe1xuICAgICAgICAgICAgdGFibGU6IHRhYmxlLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLFxuICAgICAgICAgICAgcHJlZGljdDogcHJlZGljdCxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICAgICAgICBuYW1lczogbmFtZXMsXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBBbmFseXplIHwgUExTLi4uXG4vL25hbWU6IHRvcE1lbnVQTFNcbi8vZGVzY3JpcHRpb246IENvbXB1dGUgcGFydGlhbCBsZWFzdCBzcXVhcmVzIChQTFMpIHJlZ3Jlc3Npb24gY29tcG9uZW50cy4gVGhleSBtYXhpbWFsbHkgc3VtbWFyaXplIHRoZSB2YXJpYXRpb24gb2YgdGhlIHByZWRpY3RvcnMgd2hpbGUgbWF4aW1pemluZyBjb3JyZWxhdGlvbiB3aXRoIHRoZSByZXNwb25zZSB2YXJpYWJsZS5cbmV4cG9ydCBmdW5jdGlvbiB0b3BNZW51UExTKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIHJ1bk1WQShQTFNfQU5BTFlTSVMuQ09NUFVURV9DT01QT05FTlRTKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IE1MIHwgQW5hbHl6ZSB8IE11bHRpdmFyaWF0ZSBBbmFseXNpcy4uLlxuLy9uYW1lOiBtdWx0aXZhcmlhdGVBbmFseXNpc1xuLy9kZXNjcmlwdGlvbjogTXVsdGlkaW1lbnNpb25hbCBkYXRhIGFuYWx5c2lzIHVzaW5nIHBhcnRpYWwgbGVhc3Qgc3F1YXJlcyAoUExTKSByZWdyZXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIE1WQSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBydW5NVkEoUExTX0FOQUxZU0lTLlBFUkZPUk1fTVZBKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogTVZBIGRlbW9cbi8vZGVzY3JpcHRpb246IE11bHRpZGltZW5zaW9uYWwgZGF0YSBhbmFseXNpcyB1c2luZyBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbi4gSXQgaWRlbnRpZmllcyBsYXRlbnQgZmFjdG9ycyBhbmQgY29uc3RydWN0cyBhIGxpbmVhciBtb2RlbCBiYXNlZCBvbiB0aGVtLlxuLy9tZXRhLmRlbW9QYXRoOiBDb21wdXRlIHwgTXVsdGl2YXJpYXRlIGFuYWx5c2lzXG5leHBvcnQgZnVuY3Rpb24gZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJ1bkRlbW9NVkEoKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogR2VuZXJhdGUgbGluZWFyIHNlcGFyYWJsZSBkYXRhc2V0XG4vL2Rlc2NyaXB0aW9uOiBHZW5lcmF0ZXMgbGluZWFyIHNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyU2VwYXJhYmxlKG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihMSU5FQVIsIFswLCAwXSwgbmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgfSk7XG59XG4vL25hbWU6IEdlbmVyYXRlIGxpbmVhciBub24tc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgbm9uLXNlcGFyYmxlIGRhdGFzZXQgZm9yIHRlc3RpbmcgYmluYXJ5IGNsYXNzaWZpY2F0b3JzXG4vL2lucHV0OiBzdHJpbmcgbmFtZSA9ICdEYXRhJyB7Y2FwdGlvbjogbmFtZTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL2lucHV0OiBkb3VibGUgc2lnbWEgPSA5MCAge2NhcHRpb246IHNpZ21hOyBjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfSBbUkJGLWtlcm5lbCBwYXJhbWF0ZXJdXG4vL2lucHV0OiBpbnQgc2FtcGxlc0NvdW50ID0gMTAwMCB7Y2FwdGlvbjogc2FtcGxlczsgY2F0ZWdvcnk6IFNpemV9XG4vL2lucHV0OiBpbnQgZmVhdHVyZXNDb3VudCA9IDIge2NhcHRpb246IGZlYXR1cmVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGRvdWJsZSBtaW4gPSAtMzkge2NhcHRpb246IG1pbjsgY2F0ZWdvcnk6IFJhbmdlfVxuLy9pbnB1dDogZG91YmxlIG1heCA9IDE3MyB7Y2FwdGlvbjogbWF4OyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgdmlvbGF0b3JzUGVyY2VudGFnZSA9IDUge2NhcHRpb246IHZpb2xhdG9yczsgdW5pdHM6ICU7IGNhdGVnb3J5OiBEYXRhc2V0fVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSBkZlxuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlKG5hbWUsIHNpZ21hLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIHRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24oUkJGLCBbc2lnbWEsIDBdLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5MaW5lYXJLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IGxpbmVhciBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5MaW5lYXJLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBMSU5FQVIgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGFwcGx5TGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGluZWFyS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGlzQXBwbGljYWJsZUxpbmVhcktlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogbGluZWFyIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGlzQXBwbGljYWJsZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vb3V0cHV0OiBib29sIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBwbGljYWJsZUxpbmVhcktlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gaXNBcHBsaWNhYmxlU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgfSk7XG59XG4vL25hbWU6IHZpc3VhbGl6ZUxpbmVhcktlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogbGluZWFyIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHZpc3VhbGl6ZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgdGFyZ2V0X2NvbHVtblxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZHluYW1pYyB3aWRnZXRcbmV4cG9ydCBmdW5jdGlvbiB2aXN1YWxpemVMaW5lYXJLZXJuZWxTVk0oZGYsIHRhcmdldF9jb2x1bW4sIHByZWRpY3RfY29sdW1uLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBzaG93VHJhaW5SZXBvcnQoZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5SQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiB0cmFpblxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGRvdWJsZSBnYW1tYSA9IDEuMCB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDEuNSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5SQkZrZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgc2lnbWEpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0cmFpbmVkTW9kZWwgPSB5aWVsZCBnZXRUcmFpbmVkTW9kZWwoeyBnYW1tYTogZ2FtbWEsIGtlcm5lbDogUkJGLCBzaWdtYTogc2lnbWEgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGFwcGx5UkJGa2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBSQkYta2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UkJGa2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGlzQXBwbGljYWJsZVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGlzQXBwbGljYWJsZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vb3V0cHV0OiBib29sIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBwbGljYWJsZVJCRmtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gaXNBcHBsaWNhYmxlU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgfSk7XG59XG4vL25hbWU6IHZpc3VhbGl6ZVJCRmtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogUkJGLWtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHZpc3VhbGl6ZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgdGFyZ2V0X2NvbHVtblxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZHluYW1pYyB3aWRnZXRcbmV4cG9ydCBmdW5jdGlvbiB2aXN1YWxpemVSQkZrZXJuZWxTVk0oZGYsIHRhcmdldF9jb2x1bW4sIHByZWRpY3RfY29sdW1uLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBzaG93VHJhaW5SZXBvcnQoZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBwb2x5bm9taWFsIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHRyYWluXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9pbnB1dDogZG91YmxlIGdhbW1hID0gMS4wIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGMgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGQgPSAyIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblBvbHlub21pYWxLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgYywgZCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBQT0xZTk9NSUFMLCBjUGFyYW06IGMsIGRQYXJhbTogZCB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn0gLy8gdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL25hbWU6IGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogcG9seW5vbWlhbCBrZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGlzQXBwbGljYWJsZVBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogaXNBcHBsaWNhYmxlXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9vdXRwdXQ6IGJvb2wgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gaXNBcHBsaWNhYmxlUG9seW5vbWlhbEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gaXNBcHBsaWNhYmxlU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbik7XG4gICAgfSk7XG59XG4vL25hbWU6IHZpc3VhbGl6ZVBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdmlzdWFsaXplXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyB0YXJnZXRfY29sdW1uXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vaW5wdXQ6IGR5bmFtaWMgbW9kZWxcbi8vb3V0cHV0OiBkeW5hbWljIHdpZGdldFxuZXhwb3J0IGZ1bmN0aW9uIHZpc3VhbGl6ZVBvbHlub21pYWxLZXJuZWxTVk0oZGYsIHRhcmdldF9jb2x1bW4sIHByZWRpY3RfY29sdW1uLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiBzaG93VHJhaW5SZXBvcnQoZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5TaWdtb2lkS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBzaWdtb2lkIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHRyYWluXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9pbnB1dDogZG91YmxlIGdhbW1hID0gMS4wIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGthcHBhID0gMSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGRvdWJsZSB0aGV0YSA9IDEge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluU2lnbW9pZEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBrYXBwYSwgdGhldGEpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0cmFpbmVkTW9kZWwgPSB5aWVsZCBnZXRUcmFpbmVkTW9kZWwoeyBnYW1tYTogZ2FtbWEsIGtlcm5lbDogU0lHTU9JRCwga2FwcGE6IGthcHBhLCB0aGV0YTogdGhldGEgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59IC8vIHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9uYW1lOiBhcHBseVNpZ21vaWRLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHNpZ21vaWQga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2lnbW9pZEtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBpc0FwcGxpY2FibGVTaWdtb2lkS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBzaWdtb2lkIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IGlzQXBwbGljYWJsZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vb3V0cHV0OiBib29sIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBwbGljYWJsZVNpZ21vaWRLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIGlzQXBwbGljYWJsZVNWTShkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgIH0pO1xufVxuLy9uYW1lOiB2aXN1YWxpemVTaWdtb2lkS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBzaWdtb2lkIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHZpc3VhbGl6ZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgdGFyZ2V0X2NvbHVtblxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZHluYW1pYyB3aWRnZXRcbmV4cG9ydCBmdW5jdGlvbiB2aXN1YWxpemVTaWdtb2lkS2VybmVsU1ZNKGRmLCB0YXJnZXRfY29sdW1uLCBwcmVkaWN0X2NvbHVtbiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IEFuYWx5emUgfCBBTk9WQS4uLlxuLy9uYW1lOiBBTk9WQVxuLy9kZXNjcmlwdGlvbjogT25lLXdheSBhbmFseXNpcyBvZiB2YXJpYW5jZXMgKEFOT1ZBKSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4YW1pbmVkIGZhY3RvciBoYXMgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gdGhlIHN0dWRpZWQgZmVhdHVyZS5cbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIGZhY3RvciB7dHlwZTogY2F0ZWdvcmljYWx9XG4vL2lucHV0OiBjb2x1bW4gZmVhdHVyZSB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogZG91YmxlIHNpZ25pZmljYW5jZSA9IDAuMDUgW1RoZSBzaWduaWZpY2FuY2UgbGV2ZWwgaXMgYSB2YWx1ZSBmcm9tIHRoZSBpbnRlcnZhbCAoMCwgMSkgc3BlY2lmeWluZyB0aGUgY3JpdGVyaW9uIHVzZWQgZm9yIHJlamVjdGluZyB0aGUgbnVsbCBoeXBvdGhlc2lzLl1cbi8vaW5wdXQ6IGJvb2wgdmFsaWRhdGUgPSBmYWxzZSBbSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG5vcm1hbGl0eSBvZiBkaXN0cmlidXRpb24gYW5kIGFuIGVxYXVsaXR5IG9mIHZhcmFpbmNlcyBzaG91bGQgYmUgY2hlY2tlZC5dXG5leHBvcnQgZnVuY3Rpb24gYW5vdmEodGFibGUsIGZhY3RvciwgZmVhdHVyZSwgc2lnbmlmaWNhbmNlLCB2YWxpZGF0ZSkge1xuICAgIGNvbnN0IHJlcyA9IG9uZVdheUFub3ZhKGZhY3RvciwgZmVhdHVyZSwgc2lnbmlmaWNhbmNlLCB2YWxpZGF0ZSk7XG4gICAgYWRkT25lV2F5QW5vdmFWaXp1YWxpemF0aW9uKHRhYmxlLCBmYWN0b3IsIGZlYXR1cmUsIHJlcyk7XG59XG4vL3RvcC1tZW51OiBNTCB8IE1pc3NpbmcgVmFsdWVzIEltcHV0YXRpb24gLi4uXG4vL25hbWU6IEtOTiBpbXB1dGVcbi8vZGVzcmlwdGlvbjogTWlzc2luZyB2YWx1ZXMgaW1wdXRhdGlvbiB1c2luZyB0aGUgay1uZWFyZXN0IG5laWdoYm9ycyBtZXRob2RcbmV4cG9ydCBmdW5jdGlvbiBrTk5JbXB1dGF0aW9uKCkge1xuICAgIHJ1bktOTkltcHV0ZXIoKTtcbn1cbi8vbmFtZTogbGluZWFyUmVncmVzc2lvblxuLy9kZXNjcmlwdGlvbjogTGluZWFyIFJlZ3Jlc3Npb24gZGVtb1xuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlcyB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogY29sdW1uIHRhcmdldCB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogYm9vbCBwbG90ID0gdHJ1ZSB7Y2FwdGlvbjogcGxvdH1cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJSZWdyZXNzaW9uKHRhYmxlLCBmZWF0dXJlcywgdGFyZ2V0LCBwbG90KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdDEgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geWllbGQgZ2V0TGluZWFyUmVncmVzc2lvblBhcmFtcyhmZWF0dXJlcywgdGFyZ2V0KTtcbiAgICAgICAgY29uc3QgdDIgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgY29uc29sZS5sb2coYEZpdDogJHt0MiAtIHQxfSBtcy5gKTtcbiAgICAgICAgY29uc3QgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25CeUxpbmVhclJlZ3Jlc3Npb24oZmVhdHVyZXMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBQcmVkaWN0OiAke3BlcmZvcm1hbmNlLm5vdygpIC0gdDJ9IG1zLmApO1xuICAgICAgICBwcmVkaWN0aW9uLm5hbWUgPSB0YWJsZS5jb2x1bW5zLmdldFVudXNlZE5hbWUocHJlZGljdGlvbi5uYW1lKTtcbiAgICAgICAgdGFibGUuY29sdW1ucy5hZGQocHJlZGljdGlvbik7XG4gICAgICAgIGlmIChwbG90KSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gZ3Jvay5zaGVsbC50YWJsZVZpZXcodGFibGUubmFtZSk7XG4gICAgICAgICAgICB2aWV3LmFkZFZpZXdlcihERy5WSUVXRVIuU0NBVFRFUl9QTE9ULCB7XG4gICAgICAgICAgICAgICAgeENvbHVtbk5hbWU6IHRhcmdldC5uYW1lLFxuICAgICAgICAgICAgICAgIHlDb2x1bW5OYW1lOiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgc2hvd1JlZ3Jlc3Npb25MaW5lOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vbmFtZTogZ2VuZXJhdGVEYXRhc2V0Rm9yTGluZWFyUmVncmVzc2lvblRlc3Rcbi8vZGVzY3JpcHRpb246IENyZWF0ZSBkZW1vIGRhdGFzZXQgZm9yIGxpbmVhciByZWdyZXNzaW9uXG4vL2lucHV0OiBpbnQgcm93Q291bnQgPSAxMDAwMCB7bWluOiAxMDAwOyBtYXg6IDEwMDAwMDAwOyBzdGVwOiAxMDAwMH1cbi8vaW5wdXQ6IGludCBjb2xDb3VudCA9IDEwIHttaW46IDE7IG1heDogMTAwMDsgc3RlcDogMTB9XG4vL2lucHV0OiBkb3VibGUgZmVhdHVyZXNTY2FsZSA9IDEwIHttaW46IC0xMDAwOyBtYXg6IDEwMDA7IHN0ZXA6IDEwfVxuLy9pbnB1dDogZG91YmxlIGZlYXR1cmVzQmlhcyA9IDEwIHttaW46IC0xMDAwOyBtYXg6IDEwMDA7IHN0ZXA6IDEwfVxuLy9pbnB1dDogZG91YmxlIHBhcmFtc1NjYWxlID0gMTAge21pbjogLTEwMDA7IG1heDogMTAwMDsgc3RlcDogMTB9XG4vL2lucHV0OiBkb3VibGUgcGFyYW1zQmlhcyA9IDEwIHttaW46IC0xMDAwOyBtYXg6IDEwMDA7IHN0ZXA6IDEwfVxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRGF0YXNldEZvckxpbmVhclJlZ3Jlc3Npb25UZXN0KHJvd0NvdW50LCBjb2xDb3VudCwgZmVhdHVyZXNTY2FsZSwgZmVhdHVyZXNCaWFzLCBwYXJhbXNTY2FsZSwgcGFyYW1zQmlhcykge1xuICAgIHJldHVybiBnZXRUZXN0RGF0YXNldEZvckxpbmVhclJlZ3Jlc3Npb24ocm93Q291bnQsIGNvbENvdW50LCBmZWF0dXJlc1NjYWxlLCBmZWF0dXJlc0JpYXMsIHBhcmFtc1NjYWxlLCBwYXJhbXNCaWFzKTtcbn1cbi8vbmFtZTogdHJhaW5MaW5lYXJSZWdyZXNzaW9uXG4vL21ldGEubWxuYW1lOiBMaW5lYXIgUmVncmVzc2lvblxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluTGluZWFyUmVncmVzc2lvbihkZiwgcHJlZGljdF9jb2x1bW4pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGRmLmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGZlYXR1cmVzLmJ5TmFtZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGZlYXR1cmVzLnJlbW92ZShwcmVkaWN0X2NvbHVtbik7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHlpZWxkIGdldExpbmVhclJlZ3Jlc3Npb25QYXJhbXMoZmVhdHVyZXMsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwYXJhbXMuYnVmZmVyKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlMaW5lYXJSZWdyZXNzaW9uXG4vL21ldGEubWxuYW1lOiBMaW5lYXIgUmVncmVzc2lvblxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGluZWFyUmVncmVzc2lvbihkZiwgbW9kZWwpIHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IGRmLmNvbHVtbnM7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheShtb2RlbC5idWZmZXIpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW2dldFByZWRpY3Rpb25CeUxpbmVhclJlZ3Jlc3Npb24oZmVhdHVyZXMsIHBhcmFtcyldKTtcbn1cbi8vbmFtZTogaXNBcHBsaWNhYmxlTGluZWFyUmVncmVzc2lvblxuLy9tZXRhLm1sbmFtZTogTGluZWFyIFJlZ3Jlc3Npb25cbi8vbWV0YS5tbHJvbGU6IGlzQXBwbGljYWJsZVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBzdHJpbmcgcHJlZGljdF9jb2x1bW5cbi8vb3V0cHV0OiBib29sIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBwbGljYWJsZUxpbmVhclJlZ3Jlc3Npb24oZGYsIHByZWRpY3RfY29sdW1uKSB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGYuY29sdW1ucykge1xuICAgICAgICBpZiAoKGNvbC50eXBlICE9PSBERy5DT0xVTU5fVFlQRS5JTlQpICYmIChjb2wudHlwZSAhPT0gREcuQ09MVU1OX1RZUEUuRkxPQVQpICYmIChjb2wudHlwZSAhPT0gREcuQ09MVU1OX1RZUEUuUU5VTSkgJiYgKGNvbC50eXBlICE9PSBERy5DT0xVTU5fVFlQRS5CSUdfSU5UKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCIvLyBDdXN0b20gVUkgZm9yIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIFJlbmFtZSBQQ0EgY29sdW1uc1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVBDQWNvbHVtbnMocGNhVGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zLnRvTGlzdCgpKVxuICAgICAgICBjb2wubmFtZSA9ICdQQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gQWRkcyBwcmVmaXggdG8gZWFjaCBjb2x1bW4gbmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFByZWZpeFRvRWFjaENvbHVtbk5hbWUocHJlZml4LCBjb2x1bW5zKSB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucy50b0xpc3QoKSlcbiAgICAgICAgY29sLm5hbWUgPSBwcmVmaXggKyBjb2wubmFtZTtcbn1cbi8vIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG5leHBvcnQgZnVuY3Rpb24gcHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCByZWZlcmVuY2UsIHByZWRpY3Rpb24pIHtcbiAgICBwcmVkaWN0aW9uLm5hbWUgPSByZWZlcmVuY2UubmFtZSArICcocHJlZGljdGVkKSc7XG4gICAgY29uc3QgZGZSZWZlcmVuY2VQcmVkaWN0aW9uID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbl0pO1xuICAgIGRmUmVmZXJlbmNlUHJlZGljdGlvbi5uYW1lID0gJ1JlZmVyZW5jZSB2cy4gUHJlZGljdGVkJztcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmUmVmZXJlbmNlUHJlZGljdGlvbiwgeyB0aXRsZTogZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHg6IHJlZmVyZW5jZS5uYW1lLFxuICAgICAgICB5OiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWUsXG4gICAgfSk7XG59XG4vLyBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbmV4cG9ydCBmdW5jdGlvbiByZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHJlZ3Jlc3Npb25Db2VmZnMpIHtcbiAgICByZWdyZXNzaW9uQ29lZmZzLm5hbWUgPSAncmVncmVzc2lvbiBjb2VmZmljaWVudCc7XG4gICAgY29uc3QgbmFtZXNPZlByZWRpY3RvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbmFtZXNPZlByZWRpY3RvcnMucHVzaChjb2wubmFtZSk7XG4gICAgY29uc3QgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgY29uc3QgZGZSZWdyQ29lZnMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3ByZWRpY3Rvck5hbWVzQ29sdW1uLCByZWdyZXNzaW9uQ29lZmZzXSk7XG4gICAgZGZSZWdyQ29lZnMubmFtZSA9ICdSZWdyZXNzaW9uIENvZWZmaWNpZW50cyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5iYXJDaGFydChkZlJlZ3JDb2VmcywgeyB0aXRsZTogZGZSZWdyQ29lZnMubmFtZSwgc3BsaXQ6ICdmZWF0dXJlJyxcbiAgICAgICAgdmFsdWU6ICdyZWdyZXNzaW9uIGNvZWZmaWNpZW50JywgdmFsdWVBZ2dyVHlwZTogJ2F2ZycgfSk7XG59XG4vLyBTY29yZXMgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gc2NvcmVzU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCB4U2NvcmVzLCB5U2NvcmVzKSB7XG4gICAgY29uc3Qgc2NvcmVzQ29sdW1ucyA9IFtzYW1wbGVzTmFtZXNdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IHNjb3JlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhzY29yZXNDb2x1bW5zKTtcbiAgICBzY29yZXMubmFtZSA9ICdTY29yZXMnO1xuICAgIC8vZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc2NvcmVzKTtcbiAgICBjb25zdCBpbmRleCA9IHhTY29yZXMubGVuZ3RoID4gMSA/IDEgOiAwO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3Qoc2NvcmVzLCB7IHRpdGxlOiBzY29yZXMubmFtZSxcbiAgICAgICAgeDogeFNjb3Jlc1swXS5uYW1lLFxuICAgICAgICB5OiB4U2NvcmVzW2luZGV4XS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZSxcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBjb25zdCBsb2FkaW5nQ29scyA9IFtdO1xuICAgIGNvbnN0IGxvYWRpbmdMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IGRmTG9hZGluZ3MgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMobG9hZGluZ0NvbHMpO1xuICAgIGRmTG9hZGluZ3MubmFtZSA9ICdMb2FkaW5ncyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChkZkxvYWRpbmdzLCB7IHRpdGxlOiBkZkxvYWRpbmdzLm5hbWUsXG4gICAgICAgIHg6IHhMb2FkaW5nc1swXS5uYW1lLFxuICAgICAgICB5OiB4TG9hZGluZ3NbeExvYWRpbmdzLmxlbmd0aCAtIDFdLm5hbWUsXG4gICAgICAgIG1hcmtlclR5cGU6ICdjaXJjbGUnLFxuICAgICAgICBsYWJlbHM6ICdsYWJlbHMnLFxuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgc2FtcGxlc05hbWVzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KSB7XG4gICAgY29uc3QgdmlldyA9ICh0YWJsZS5pZCAhPT0gbnVsbCkgPyBncm9rLnNoZWxsLmdldFRhYmxlVmlldyh0YWJsZS5uYW1lKSA6IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHRhYmxlKTtcbiAgICAvLyAxLiBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcHJlZGljdCwgcGxzT3V0cHV0WzBdKSk7XG4gICAgLy8gMi4gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG4gICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAvLyAzLiBMb2FkaW5nIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKGxvYWRpbmdTY2F0dGVyUGxvdChmZWF0dXJlcywgcGxzT3V0cHV0WzRdKSk7XG4gICAgLy8gNC4gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTtcbn1cbi8vIEFkZCBvbmUtd2F5IEFOT1ZBIHJlc3VsdHNcbmV4cG9ydCBmdW5jdGlvbiBhZGRPbmVXYXlBbm92YVZpenVhbGl6YXRpb24odGFibGUsIGZhY3RvcnMsIHZhbHVlcywgYW5vdmEpIHtcbiAgICBjb25zdCB2aWV3ID0gZ3Jvay5zaGVsbC5nZXRUYWJsZVZpZXcodGFibGUubmFtZSk7XG4gICAgdmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmJveFBsb3QoREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtmYWN0b3JzLCB2YWx1ZXNdKSkpO1xuICAgIHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5ncmlkKGFub3ZhKSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVNdWx0aURpbVJlZFdvcmtlciB9IGZyb20gJy4vbXVsdGktZGltLXJlZC13b3JrZXItY3JlYXRvcic7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MoZGF0YUNvbHMsIG1ldGhvZE5hbWUsIGRpc3RhbmNlTWV0cmljcywgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucywgcHJvZ3Jlc3NGdW5jKSB7XG4gICAgbGV0IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzID0gYXdhaXQgY3JlYXRlTXVsdGlEaW1SZWRXb3JrZXIoZGF0YUNvbHMsIGRpc3RhbmNlTWV0cmljcywgbWV0aG9kTmFtZSwgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucywgcHJvZ3Jlc3NGdW5jKTtcbiAgICBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcyA9IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLm1hcCgoaXQpID0+IG5vcm1hbGl6ZShpdCkpO1xuICAgIHJldHVybiBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpXMWlaV1JrYVc1bmN5MXpjR0ZqWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbVZ0WW1Wa1pHbHVaM010YzNCaFkyVXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUlVFc1QwRkJUeXhGUVVGRExIVkNRVUYxUWl4RlFVRkRMRTFCUVUwc1owTkJRV2RETEVOQlFVTTdRVUZGZGtVc1QwRkJUeXhGUVVGRExGTkJRVk1zUlVGQlF5eE5RVUZOTEdsRVFVRnBSQ3hEUVVGRE8wRkJTVEZGTEUxQlFVMHNRMEZCUXl4TFFVRkxMRlZCUVZVc2RVSkJRWFZDTEVOQlF6TkRMRkZCUVhOQ0xFVkJRM1JDTEZWQlFTdENMRVZCUXk5Q0xHVkJRU3RDTEVWQlF5OUNMRTlCUVdsQ0xFVkJRMnBDTEcxQ1FVRTRReXhGUVVNNVF5eFBRVUZaTEVWQlFVVXNXVUZCYlVZN1NVRkZha2NzU1VGQlNTeDFRa0ZCZFVJc1IwRkRia0lzVFVGQlRTeDFRa0ZCZFVJc1EwRkRNMElzVVVGQlVTeEZRVUZGTEdWQlFXVXNSVUZCUlN4VlFVRlZMRVZCUVVVc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRTlCUVU4c1JVRkJSU3haUVVGWkxFTkJRek5HTEVOQlFVTTdTVUZGVml4MVFrRkJkVUlzUjBGQlJ5eDFRa0ZCZFVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZEZMRTlCUVU4c2RVSkJRWFZDTEVOQlFVTTdRVUZEYWtNc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3VFdGMGNtbDRmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTB0dWIzZHVUV1YwY21samMzMGdabkp2YlNBbkxpNHZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlUxMWJIUnBSR2x0VW1Wa1YyOXlhMlZ5ZlNCbWNtOXRJQ2N1TDIxMWJIUnBMV1JwYlMxeVpXUXRkMjl5YTJWeUxXTnlaV0YwYjNJbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0dWIzSnRZV3hwZW1WOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzWmxZM1J2Y2kxdmNHVnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdSR2x0VW1Wa2RXTjBhVzl1VFdWMGFHOWtjMzBnWm5KdmJTQW5MaTkwZVhCbGN5YzdYRzVjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR2RsZEU1dmNtMWhiR2w2WldSRmJXSmxaR1JwYm1kektGeHVJQ0JrWVhSaFEyOXNjem9nUVhKeVlYazhZVzU1VzEwK0xGeHVJQ0J0WlhSb2IyUk9ZVzFsT2lCRWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSekxGeHVJQ0JrYVhOMFlXNWpaVTFsZEhKcFkzTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExGeHVJQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYU3hjYmlBZ1pHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJqb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDeGNiaUFnYjNCMGFXOXVjem9nWVc1NUxDQndjbTluY21WemMwWjFibU0vT2lBb1pYQnZZMmc2SUc1MWJXSmxjaXdnWlhCdlkyaHpUR1Z1WjNSb09pQnVkVzFpWlhJc0lHVnRZbVZrWkdsdVp6b2diblZ0WW1WeVcxMWJYU2tnUFQ0Z2RtOXBaRnh1S1RvZ1VISnZiV2x6WlR4TllYUnlhWGcrSUh0Y2JpQWdiR1YwSUdScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObFVtVnpPaUJOWVhSeWFYZ2dQVnh1SUNBZ0lDQWdJQ0FnSUdGM1lXbDBJR055WldGMFpVMTFiSFJwUkdsdFVtVmtWMjl5YTJWeUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlVTnZiSE1zSUdScGMzUmhibU5sVFdWMGNtbGpjeXdnYldWMGFHOWtUbUZ0WlN3Z2QyVnBaMmgwY3l3Z1pHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJpd2diM0IwYVc5dWN5d2djSEp2WjNKbGMzTkdkVzVqWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNibHh1SUNCa2FXMWxibk5wYjI1aGJHbDBlVkpsWkhWalpWSmxjeUE5SUdScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObFVtVnpMbTFoY0Nnb2FYUXBJRDArSUc1dmNtMWhiR2w2WlNocGRDa3BPMXh1SUNCeVpYUjFjbTRnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTTdYRzU5WEc1Y2JpSmRmUT09IiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgeyBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3V0aWxzJztcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVNdWx0aURpbVJlZFdvcmtlcihkYXRhLCBtZXRyaWNzLCBtZXRob2QsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBvcHRpb25zLCBwcm9ncmVzc0Z1bmMpIHtcbiAgICBpZiAoIW9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5kaXN0YW5jZUZuQXJncyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggIT09IG1ldHJpY3MubGVuZ3RoIHx8IGRhdGEubGVuZ3RoICE9PSBvcHRpb25zLmRpc3RhbmNlRm5BcmdzLmxlbmd0aCB8fCBkYXRhLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0YSwgbWV0cmljcyBhbmQgb3B0aW9ucyBhbmQgd2VpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL211bGl0LWNvbHVtbi1kaW0tcmVkdWNlci13b3JrZXInLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGNvbHVtbnNEYXRhOiBkYXRhLFxuICAgICAgICAgICAgZGlzdGFuY2VNZXRyaWNzOiBtZXRyaWNzLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uTWV0aG9kOiBhZ2dyZWdhdGlvbk1ldGhvZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlcm1pbmF0ZVN1YiA9IGdyb2suZXZlbnRzLm9uQ3VzdG9tRXZlbnQoRElNRU5TSU9OQUxJVFlfUkVEVUNFUl9URVJNSU5BVEVfRVZFTlQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdvcmtlcj8udGVybWluYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoeyBkYXRhOiB7IGVycm9yLCBlbWJlZGRpbmcsIGVwb2NoTnVtLCBlcG9jaHNMZW5ndGggfSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzTmlsKGVwb2NoTnVtKSAmJiAhaXNOaWwoZXBvY2hzTGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHByb2dyZXNzRnVuYyAmJiBwcm9ncmVzc0Z1bmMoZXBvY2hOdW0sIGVwb2Noc0xlbmd0aCwgZW1iZWRkaW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXJtaW5hdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZW1iZWRkaW5nKTtcbiAgICAgICAgICAgIC8vIHRlcm1pbmF0ZSB0aGUgd29ya2VyIGFmdGVyIHNvbWUgdGltZS4gaW1taWRpYXRlIHRlcm1pbmF0aW9uIGNhdXNlcyBjcmFzaGVzLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3b3JrZXIudGVybWluYXRlKCksIDEwMCk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFpHbHRMWEpsWkMxM2IzSnJaWEl0WTNKbFlYUnZjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltMTFiSFJwTFdScGJTMXlaV1F0ZDI5eWEyVnlMV055WldGMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUTBFc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEVWQlFVTXNjME5CUVhORExFVkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTTdRVUZKYUVVc1QwRkJUeXhGUVVGRExFdEJRVXNzUlVGQlF5eE5RVUZOTERCQ1FVRXdRaXhEUVVGRE8wRkJSUzlETEUxQlFVMHNRMEZCUXl4TFFVRkxMRlZCUVZVc2RVSkJRWFZDTEVOQlFVTXNTVUZCYTBJc1JVRkJSU3hQUVVGMVFpeEZRVUZGTEUxQlFUSkNMRVZCUTNCSUxFOUJRV2xDTEVWQlFVVXNhVUpCUVRSRExFVkJReTlFTEU5QlFWa3NSVUZCUlN4WlFVRnRSanRKUVVWcVJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNN1VVRkRla0lzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4M1EwRkJkME1zUTBGQlF5eERRVUZETzBsQlF6VkVMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFR0UlFVTnVTQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdsRlFVRnBSU3hEUVVGRExFTkJRVU03U1VGRGNrWXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGVExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlEzcERMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRzFEUVVGdFF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42Uml4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRE8xbEJRMnBDTEZkQlFWY3NSVUZCUlN4SlFVRkpPMWxCUTJwQ0xHVkJRV1VzUlVGQlJTeFBRVUZQTzFsQlEzaENMRTFCUVUwc1JVRkJSU3hOUVVGTk8xbEJRMlFzVDBGQlR5eEZRVUZGTEU5QlFVODdXVUZEYUVJc1QwRkJUeXhGUVVGRkxFOUJRVTg3V1VGRGFFSXNhVUpCUVdsQ0xFVkJRVVVzYVVKQlFXbENPMU5CUTNKRExFTkJRVU1zUTBGQlF6dFJRVU5JTEUxQlFVMHNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEhORFFVRnpReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSVUZCUlR0WlFVTndSeXhKUVVGSk8yZENRVU5HTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVOeVFqdHZRa0ZCVXp0blFrRkRVaXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdZVUZETlVJN1VVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEUxQlFVMHNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhGUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1VVRkJVU3hGUVVGRkxGbEJRVmtzUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjRSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTzJkQ1FVTTFReXhaUVVGWkxFbEJRVWtzV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUlN4WlFVRlpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlEyaEZMRTlCUVU4N1lVRkRVanRaUVVORUxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0WlFVTXpRaXhKUVVGSkxFdEJRVXM3WjBKQlExQXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dG5Ra0ZGWkN4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGNrSXNPRVZCUVRoRk8xbEJRemxGTEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROVU1zUTBGQlF5eERRVUZETzBsQlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRUQ3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdExibTkzYmsxbGRISnBZM045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTXZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNXBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENCN1JFbE5SVTVUU1U5T1FVeEpWRmxmVWtWRVZVTkZVbDlVUlZKTlNVNUJWRVZmUlZaRlRsUjlJR1p5YjIwZ0p5NHZZMjl1YzNSekp6dGNibWx0Y0c5eWRDQjdUV0YwY21sNGZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE45SUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WVhSeWFYZ3ZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdHBjMDVwYkgwZ1puSnZiU0FuTGk0dlpHbHpkR0Z1WTJVdGJXRjBjbWw0TDNWMGFXeHpKenRjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR055WldGMFpVMTFiSFJwUkdsdFVtVmtWMjl5YTJWeUtHUmhkR0U2SUVGeWNtRjVQR0Z1ZVZ0ZFBpd2diV1YwY21samN6b2dTMjV2ZDI1TlpYUnlhV056VzEwc0lHMWxkR2h2WkRvZ1JHbHRVbVZrZFdOMGFXOXVUV1YwYUc5a2N5eGNiaUFnZDJWcFoyaDBjem9nYm5WdFltVnlXMTBzSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrTEZ4dUlDQnZjSFJwYjI1ek9pQmhibmtzSUhCeWIyZHlaWE56Um5WdVl6ODZJQ2hsY0c5amFEb2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuT2lCdWRXMWlaWEpiWFZ0ZEtTQTlQaUIyYjJsa1hHNHBPaUJRY205dGFYTmxQRTFoZEhKcGVENGdlMXh1SUNCcFppQW9JVzl3ZEdsdmJuTXVaR2x6ZEdGdVkyVkdia0Z5WjNNcFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2R2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21keklHMTFjM1FnWW1VZ1pHVm1hVzVsWkNjcE8xeHVJQ0JwWmlBb1pHRjBZUzVzWlc1bmRHZ2dJVDA5SUcxbGRISnBZM011YkdWdVozUm9JSHg4SUdSaGRHRXViR1Z1WjNSb0lDRTlQU0J2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21kekxteGxibWQwYUNCOGZDQmtZWFJoTG14bGJtZDBhQ0FoUFQwZ2QyVnBaMmgwY3k1c1pXNW5kR2dwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZGtZWFJoTENCdFpYUnlhV056SUdGdVpDQnZjSFJwYjI1eklHRnVaQ0IzWldsbmFIUnpJRzExYzNRZ2FHRjJaU0IwYUdVZ2MyRnRaU0JzWlc1bmRHZ25LVHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHWjFibU4wYVc5dUtISmxjMjlzZG1Vc0lISmxhbVZqZENrZ2UxeHVJQ0FnSUdOdmJuTjBJSGR2Y210bGNpQTlJRzVsZHlCWGIzSnJaWElvYm1WM0lGVlNUQ2duTGk5dGRXeHBkQzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEl0ZDI5eWEyVnlKeXdnYVcxd2IzSjBMbTFsZEdFdWRYSnNLU2s3WEc0Z0lDQWdkMjl5YTJWeUxuQnZjM1JOWlhOellXZGxLSHRjYmlBZ0lDQWdJR052YkhWdGJuTkVZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdaR2x6ZEdGdVkyVk5aWFJ5YVdOek9pQnRaWFJ5YVdOekxGeHVJQ0FnSUNBZ2JXVjBhRzlrT2lCdFpYUm9iMlFzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpPaUJ2Y0hScGIyNXpMRnh1SUNBZ0lDQWdkMlZwWjJoMGN6b2dkMlZwWjJoMGN5eGNiaUFnSUNBZ0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQmhaMmR5WldkaGRHbHZiazFsZEdodlpDeGNiaUFnSUNCOUtUdGNiaUFnSUNCamIyNXpkQ0IwWlhKdGFXNWhkR1ZUZFdJZ1BTQm5jbTlyTG1WMlpXNTBjeTV2YmtOMWMzUnZiVVYyWlc1MEtFUkpUVVZPVTBsUFRrRk1TVlJaWDFKRlJGVkRSVkpmVkVWU1RVbE9RVlJGWDBWV1JVNVVLUzV6ZFdKelkzSnBZbVVvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ2QyOXlhMlZ5UHk1MFpYSnRhVzVoZEdVb0tUdGNiaUFnSUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQWdJSFJsY20xcGJtRjBaVk4xWWk1MWJuTjFZbk5qY21saVpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHBPMXh1SUNBZ0lIZHZjbXRsY2k1dmJtMWxjM05oWjJVZ1BTQW9lMlJoZEdFNklIdGxjbkp2Y2l3Z1pXMWlaV1JrYVc1bkxDQmxjRzlqYUU1MWJTd2daWEJ2WTJoelRHVnVaM1JvZlgwcElEMCtJSHRjYmlBZ0lDQWdJR2xtSUNnaGFYTk9hV3dvWlhCdlkyaE9kVzBwSUNZbUlDRnBjMDVwYkNobGNHOWphSE5NWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0FnSUhCeWIyZHlaWE56Um5WdVl5QW1KaUJ3Y205bmNtVnpjMFoxYm1Nb1pYQnZZMmhPZFcwc0lHVndiMk5vYzB4bGJtZDBhQ3dnWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdWeWJXbHVZWFJsVTNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0JwWmlBb1pYSnliM0lwWEc0Z0lDQWdJQ0FnSUhKbGFtVmpkQ2hsY25KdmNpazdYRzRnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUM4dklIUmxjbTFwYm1GMFpTQjBhR1VnZDI5eWEyVnlJR0ZtZEdWeUlITnZiV1VnZEdsdFpTNGdhVzF0YVdScFlYUmxJSFJsY20xcGJtRjBhVzl1SUdOaGRYTmxjeUJqY21GemFHVnpMbHh1SUNBZ0lDQWdjMlYwVkdsdFpXOTFkQ2dvS1NBOVBpQjNiM0pyWlhJdWRHVnliV2x1WVhSbEtDa3NJREV3TUNrN1hHNGdJQ0FnZlR0Y2JpQWdmU2s3WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnLi90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyByYW5kb21GbG9hdCwgcmFuZG9tSW50IH0gZnJvbSAnLi9yYW5kb20nO1xuLyoqXG4gKiBBc3NlcnRzIGEgY29uZGl0aW9uIGJ5IHRocm93aW5nIGFuIEVycm9yLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmRpdGlvbj1mYWxzZV0gQ29uZGl0aW9uIHRvIGFzc2VydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT0nQXNzZXJ0aW9uIGVycm9yLiddIE1lc3NhZ2UgdG8gb3V0cHV0LlxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uID0gZmFsc2UsIG1lc3NhZ2UgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcbiAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuLyoqXG4gKiBDcmVhdGVzIG5ldyB0d28tZGltZW5zaW9uYWwgYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2Ygcm93cykuXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiBjb2x1bW5zKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbD0wXSBBIHZhbHVlIHRvIGZpbGwgdGhlIGNvb3JkaW5hdGVzIHdpdGguXG4gKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQSB0d28tZGltZW5zaW9uYWwgZmlsbGVkIHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgZmlsbCA9IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cbi8qKlxuICogVHJhbnNwb3NlIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4IFRoZSBtYXRyaXggdG8gYmUgdHJhbnNwb3NlZC5cbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG1hdHJpeFswXS5sZW5ndGgpLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuLyoqXG4gKiBBZGRzIHR3byB2ZWN0b3JzIHdpdGggdGhlIHNlY29uZCBvbmUgdG8gYmUgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gcmF0aW8uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge251bWJlcn0gW211bHRpcGxpZXI9MV0gQSBtdWx0aXBsaWVyIHRvIGJlIHVzZWQgYmVmb3JlIHRoZSBzZWNvbmQgdmVjdG9yIGlzIGFkZGVkLlxuICogQHJldHVybiB7VmVjdG9yfSBOZXcgdmVjdG9yIGNvbnRhaW5lZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiBwK211bHRpcGxpZXIqcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckFkZChwLCBxLCBtdWx0aXBsaWVyID0gMSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IHAubGVuZ3RoO1xuICAgIGFzc2VydChuSXRlbXMgPT0gcS5sZW5ndGgsICdWZWN0b3IgbGVuZ3RocyBkbyBub3QgbWF0Y2guJyk7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHBbaV0gKyBtdWx0aXBsaWVyICogcVtpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1bXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVjdG9yJ3MgaXRlbXMgc3VtLlxuICovXG5mdW5jdGlvbiBpdGVtc1N1bSh2KSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsICs9IHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHYpIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3Rvckxlbmd0aCh2KSB7XG4gICAgbGV0IHNxclN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKVxuICAgICAgICBzcXJTdW0gKz0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIE1hdGguc3FydChzcXJTdW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckRvdFByb2R1Y3QodjEsIHYyKSB7XG4gICAgaWYgKHYxLmxlbmd0aCAhPSB2Mi5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSB2ZWN0b3JzIG11c3QgbWF0Y2gnKTtcbiAgICBsZXQgcHJvZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKylcbiAgICAgICAgcHJvZCArPSB2MVtpXSAqIHYyW2ldO1xuICAgIHJldHVybiBwcm9kO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MS5dIE1heCB2YWx1ZSBnaXZlbiBieSByYW5kb20gZ2VuZXJhdG9yLlxuICogQHJldHVybiB7TWF0cml4fSBBIG5ldyBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50ICB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsUmFuZG9tTWF0cml4KGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIHNjYWxlID0gMS4pIHtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb24xOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1lbnNpb24yOyArK2opXG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSByYW5kb21GbG9hdChzY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxuICogQHJldHVybiB7bnVtYmVyfSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdmVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHAsIHEpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBjb25zdCBsZW4gPSBwLmxlbmd0aDtcbiAgICBpZiAobGVuICE9PSBxLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIHZlY3RvcnMgbXVzdCBtYXRjaCcpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdygocFtpXSAtIHFbaV0pLCAyKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY0Rpc3RhbmNlTWF0cml4KGRhdGEsIGRpc3RhbmNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKG5JdGVtcywgbkl0ZW1zLCAwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCkgPyAwIDogZGlzdGFuY2UoZGF0YVtpXSwgZGF0YVtqXSk7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSBkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY05vcm1hbGl6ZWREaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgbGV0IG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCB8fCBpID09PSBqKSA/IDAgOiBkaXN0YW5jZShkYXRhW2ldLCBkYXRhW2pdKTtcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IGQ7XG4gICAgICAgICAgICBpZiAoZCA+IG1heClcbiAgICAgICAgICAgICAgICBtYXggPSBkO1xuICAgICAgICAgICAgaWYgKGQgPCBtaW4pXG4gICAgICAgICAgICAgICAgbWluID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKVxuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gKG1hdHJpeFtpXVtqXSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKiBHZW5lcmF0ZXMgYXJyYXkgZnJvbSBhIHJhbmdlIFtiZWdpbjsgZW5kXSBvciBbYmVnaW47IGVuZCkgaWYgZW5kRXhjbHVzaXZlLiAqKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5SYW5nZShiZWdpbiwgZW5kLCBlbmRFeGNsdXNpdmUgPSBmYWxzZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGVuZCAtIGJlZ2luICsgKGVuZEV4Y2x1c2l2ZSA/IDAgOiAxKTtcbiAgICBjb25zdCBzZXJpZXMgPSBuZXcgSW50MzJBcnJheShuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpXG4gICAgICAgIHNlcmllc1tpXSA9IGJlZ2luICsgaTtcbiAgICByZXR1cm4gc2VyaWVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIG9yZGVyIG9mIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBzb3J0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVzIElucHV0IGFycmF5LlxuICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gV2hldGhlciB0byByZXR1cm4gcmV2ZXJzZWQgb3JkZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gVGhlIG9yZGVyIGNvbXB1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJnU29ydCh2YWx1ZXMsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgIGNvbnN0IHNvcnRmbiA9IHJldmVyc2UgPyAoYSwgYikgPT4gKGJbMF0gLSBhWzBdKSA6IChhLCBiKSA9PiAoYVswXSAtIGJbMF0pO1xuICAgIGNvbnN0IGRlY29yID0gKHYsIGkpID0+IFt2LCBpXTsgLy8gc2V0IGluZGV4IHRvIHZhbHVlXG4gICAgY29uc3QgdW5kZWNvciA9IChhKSA9PiBhWzFdOyAvLyBsZWF2ZSBvbmx5IGluZGV4XG4gICAgY29uc3QgX2FyZ3NvcnQgPSAoYXJyKSA9PiBhcnIubWFwKGRlY29yKS5zb3J0KHNvcnRmbikubWFwKHVuZGVjb3IpO1xuICAgIHJldHVybiBfYXJnc29ydCh2YWx1ZXMpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0cyBhY2NvcmRpbmcgdG8gdGhlIGRpc3QgZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG90YWwgbnVtYmVyIG9mIG9iamVjdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIG51bWJlciBvZiBkaXZlcnNlIGVsZW1lbnRzIHRvIGZpbmRcbiAqIEBwYXJhbSB7KGkxOiBudW1iZXIsIGkyOiBudW1iZXIpID0+IG51bWJlcn0gZGlzdCBhIGZ1bmN0aW9uIHdoaWNoIGNhbGN1bGF0ZXMgZGlzdGFuY2UgYmV0d2VlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBvYmplY3RzIHVzaW5nIHRoZWlyIGluZGV4ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJbXX0gVGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vKipcbiAqIFJldHVybnMgbm9ybWFsaXplZCB2ZWN0b3IuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IGRhdGEgbnVtZXJpY2FsIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoZGF0YSkge1xuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBzdW1PZlNxdWFyZXMgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgc3VtICs9IGRhdGFbaV07XG4gICAgICAgIHN1bU9mU3F1YXJlcyArPSBNYXRoLnBvdyhkYXRhW2ldLCAyKTtcbiAgICB9XG4gICAgY29uc3QgbWVhbiA9IHN1bSAvIGxlbjtcbiAgICBjb25zdCBzdGREZXZJbnZlcnNlID0gMS4wIC8gTWF0aC5zcXJ0KHN1bU9mU3F1YXJlcyAvIGxlbiAtIE1hdGgucG93KG1lYW4sIDIpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gLSBtZWFuKSAqIHN0ZERldkludmVyc2U7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIEZpbmRzIHNldCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGxpc3RzLlxuICogQHBhcmFtIHthbnlbXX0gYSBUaGUgZmlyc3QgbGlzdC5cbiAqIEBwYXJhbSB7YW55W119IGIgVGhlIHNlY29uZCBsaXN0LlxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWZmZXJlbmNlKGEsIGIpIHtcbiAgICBjb25zdCBiU2V0ID0gbmV3IFNldChiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGEuZmlsdGVyKCh4KSA9PiAhYlNldC5oYXMoeCkpKS52YWx1ZXMoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVk1zVFVGQlRTeEZRVUYxUXl4TlFVRk5MSEZDUVVGeFFpeERRVUZETzBGQlEzcEdMRTlCUVU4c1JVRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eEZRVUZETEUxQlFVMHNWVUZCVlN4RFFVRkRPMEZCUldoRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExGbEJRWEZDTEV0QlFVc3NSVUZCUlN4VlFVRnJRaXhyUWtGQmEwSTdTVUZEY2tZc1NVRkJTU3hEUVVGRExGTkJRVk03VVVGRFdpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRemRDTEVOQlFVTTdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4bFFVRmxMRU5CUVVNc1ZVRkJhMElzUlVGQlJTeFZRVUZyUWl4RlFVRkZMRTlCUVdVc1EwRkJRenRKUVVOMFJpeFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNwR0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHVkJRV1VzUTBGQlF5eE5RVUZqTzBsQlF6VkRMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZGtNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRVlzUTBGQlF6dEJRVVZFT3pzN096czdPenRIUVZGSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEZOQlFWTXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxHRkJRWEZDTEVOQlFVTTdTVUZEY0VVc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVVjRRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc09FSkJRVGhDTEVOQlFVTXNRMEZCUXp0SlFVVXpSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVWcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRMMElzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSWFJETEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRU96czdPenRIUVV0SE8wRkJRMGdzVTBGQlV5eFJRVUZSTEVOQlFVTXNRMEZCVXp0SlFVTjZRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGWkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVZvUWl4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVObUxFTkJRVU03UVVGRlJEczdPenM3UjBGTFJ6dEJRVU5JTEZOQlFWTXNXVUZCV1N4RFFVRkRMRU5CUVZNN1NVRkROMElzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVONFFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVVZxUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmVrSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEZsQlFWa3NRMEZCUXl4RFFVRlRPMGxCUTNCRExFbEJRVWtzVFVGQlRTeEhRVUZYTEVOQlFVTXNRMEZCUXp0SlFVTjJRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEZGtNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6TkNMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1JVRkJWU3hGUVVGRkxFVkJRVlU3U1VGRGNrUXNTVUZCU1N4RlFVRkZMRU5CUVVNc1RVRkJUU3hKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTzFGQlEzaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zT0VOQlFUaERMRU5CUVVNc1EwRkJRenRKUVVOc1JTeEpRVUZKTEVsQlFVa3NSMEZCVnl4RFFVRkRMRU5CUVVNN1NVRkRja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUTNoRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFT3pzN096czdPenRIUVZGSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRExGVkJRV3RDTEVWQlFVVXNWVUZCYTBJc1JVRkJSU3hSUVVGblFpeEZRVUZGTzBsQlEzcEdMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eFZRVUZWTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1NVRkZka1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTnVReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFpRVU5xUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wdEJRM0pETzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzTUVKQlFUQkNMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk03U1VGRE4wUXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMllzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVWeVFpeEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUVHRSUVVOc1FpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRGhEUVVFNFF5eERRVUZETEVOQlFVTTdTVUZGYkVVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4SlFVRkpMRk5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVWtzUTBGQlF5eERRVUZCTEVOQlFVTTdTVUZGTDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHdENRVUZyUWl4RFFVRkRMRWxCUVdFc1JVRkJSU3hSUVVGM1FqdEpRVU40UlN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6TkNMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSV3hFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia01zVFVGQlRTeERRVUZETEVkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhSaXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOcVF6dExRVU5HTzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzTkVKQlFUUkNMRU5CUVVNc1NVRkJZU3hGUVVGRkxGRkJRWGRDTzBsQlEyeEdMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZETTBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzWlVGQlpTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGJFUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF6dEpRVU16UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETzBsQlF6TkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVNdlFpeE5RVUZOTEVOQlFVTXNSMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGNrY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ6dG5Ra0ZCUlN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0pDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjN1owSkJRVVVzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjBRanRMUVVOR08wbEJRMFFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTXZRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZEYWtNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTndSVHRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSQ3hyUmtGQmEwWTdRVUZEYkVZc1RVRkJUU3hWUVVGVkxGRkJRVkVzUTBGQlF5eExRVUZoTEVWQlFVVXNSMEZCVnl4RlFVRkZMRmxCUVZrc1IwRkJSeXhMUVVGTE8wbEJRM1pGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEY0VRc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZkRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETjBJc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZlRUlzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1QwRkJUeXhEUVVGRExFMUJRV0VzUlVGQlJTeFBRVUZQTEVkQlFVY3NTMEZCU3p0SlFVTndSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRrY3NUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGTkxFVkJRVVVzUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEhGQ1FVRnhRanRKUVVOc1JTeE5RVUZOTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2JVSkJRVzFDTzBsQlEzWkVMRTFCUVUwc1VVRkJVU3hIUVVGSExFTkJRVU1zUjBGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTVUZETVVVc1QwRkJUeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETVVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNUVUZCWXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hKUVVGM1F6dEpRVU5zUnl4VFFVRlRMRXRCUVVzc1EwRkJReXhOUVVGblF5eEZRVUZGTEU5QlFUaENPMUZCUXpkRkxFbEJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTndRaXhKUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZGZEVJc1MwRkJTeXhOUVVGTkxFOUJRVThzU1VGQlNTeE5RVUZOTEVWQlFVVTdXVUZETlVJc1RVRkJUU3hqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzVlVGQlZTeEpRVUZKTEVsQlFVa3NTVUZCU1N4alFVRmpMRWRCUVVjc1ZVRkJWU3hGUVVGRk8yZENRVU55UkN4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8yZENRVU51UWl4VlFVRlZMRWRCUVVjc1kwRkJZeXhEUVVGRE8yRkJRemRDTzFOQlEwWTdVVUZEUkN4UFFVRlBMRkZCUVZFc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRka01zVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVVM1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUXk5Q0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOeVFpeFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM0pDTzBsQlJVUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdFJRVU40UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRMllzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCT0VJc1JVRkRMME1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVk1zUjBGQlJ5eEZRVUZGTEV0QlFVczdXVUZEZUVRc1QwRkJUeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTlFMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRMUFzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOcVFpeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM2hDTzB0QlEwWTdTVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1UwRkJVeXhEUVVGRExFbEJRVms3U1VGRGNFTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU40UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRFdpeEpRVUZKTEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTTFRaXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJZc1dVRkJXU3hKUVVGSkxGTkJRVUVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkpMRU5CUVVNc1EwRkJRU3hEUVVGRE8wdEJRemxDTzBsQlJVUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF6dEpRVU4yUWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1IwRkJSeXhIUVVGSExGTkJRVUVzU1VGQlNTeEZRVUZKTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1NVRkZkRVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEdGQlFXRXNRMEZCUXp0SlFVVTNReXhQUVVGUExFbEJRVWtzUTBGQlF6dEJRVU5rTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRTdTVUZET1VNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzVDBGQlR5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnlSU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdE5ZWFJ5YVhnc0lGWmxZM1J2Y2l3Z1EyOXZjbVJwYm1GMFpYTXNJRlpsWTNSdmNuTXNJRVJwYzNSaGJtTmxUV1YwY21samZTQm1jbTl0SUNjdUwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdjbUZ1Wkc5dFJteHZZWFFzSUhKaGJtUnZiVWx1ZEgwZ1puSnZiU0FuTGk5eVlXNWtiMjBuTzF4dVhHNHZLaXBjYmlBcUlFRnpjMlZ5ZEhNZ1lTQmpiMjVrYVhScGIyNGdZbmtnZEdoeWIzZHBibWNnWVc0Z1JYSnliM0l1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCYlkyOXVaR2wwYVc5dVBXWmhiSE5sWFNCRGIyNWthWFJwYjI0Z2RHOGdZWE56WlhKMExseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR0WlhOellXZGxQU2RCYzNObGNuUnBiMjRnWlhKeWIzSXVKMTBnVFdWemMyRm5aU0IwYnlCdmRYUndkWFF1WEc0Z0tpQkFkR2h5YjNkeklIdEZjbkp2Y24xY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z6YzJWeWRDaGpiMjVrYVhScGIyNDZJR0p2YjJ4bFlXNGdQU0JtWVd4elpTd2diV1Z6YzJGblpUb2djM1J5YVc1bklEMGdKMEZ6YzJWeWRHbHZiaUJsY25KdmNpNG5LU0I3WEc0Z0lHbG1JQ2doWTI5dVpHbDBhVzl1S1Z4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaHRaWE56WVdkbEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUc1bGR5QjBkMjh0WkdsdFpXNXphVzl1WVd3Z1lYSnlZWGtnWVc1a0lHWnBiR3h6SUdsMElIZHBkR2dnZEdobElIWmhiSFZsSUdkcGRtVnVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmthVzFsYm5OcGIyNHhJRlJvWlNCbWFYSnpkQ0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJR052YjNKa2FXNWhkR1Z6SUNodWRXMWlaWElnYjJZZ2NtOTNjeWt1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1pQlVhR1VnYzJWamIyNWtJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdZMjl2Y21ScGJtRjBaWE1nS0c1MWJXSmxjaUJ2WmlCamIyeDFiVzV6S1M1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJabWxzYkQwd1hTQkJJSFpoYkhWbElIUnZJR1pwYkd3Z2RHaGxJR052YjNKa2FXNWhkR1Z6SUhkcGRHZ3VYRzRnS2lCQWNtVjBkWEp1SUh0RGIyOXlaR2x1WVhSbGMzMGdRU0IwZDI4dFpHbHRaVzV6YVc5dVlXd2dabWxzYkdWa0lIZHBkR2dnZEdobElIWmhiSFZsSUdkcGRtVnVMbHh1SUNvZ1FIUnZaRzhnVFdsbmFIUWdZbVVnYzJ4dmR5QnphVzVqWlNCMWMyVmtJRUZ5Y21GNUxtMWhjQzRnVUhKdlltRmliSGtnYm1WbFpITWdjR1Z5Wm05eWJXRnVZMlVnY21WMmFYTnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBibWwwUTI5dmNtUnBibUYwWlhNb1pHbHRaVzV6YVc5dU1Ub2diblZ0WW1WeUxDQmthVzFsYm5OcGIyNHlPaUJ1ZFcxaVpYSXNJR1pwYkd3NklHNTFiV0psY2lBOUlEQXBPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJSEpsZEhWeWJpQnVaWGNnUVhKeVlYa29aR2x0Wlc1emFXOXVNU2t1Wm1sc2JDaG1hV3hzS1M1dFlYQW9LQ2tnUFQ0Z0tHNWxkeUJXWldOMGIzSW9aR2x0Wlc1emFXOXVNaWt1Wm1sc2JDaG1hV3hzS1NrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZSeVlXNXpjRzl6WlNCdFlYUnlhWGd1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0TllYUnlhWGg5SUcxaGRISnBlQ0JVYUdVZ2JXRjBjbWw0SUhSdklHSmxJSFJ5WVc1emNHOXpaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdE5ZWFJ5YVhoOUlGUnlZVzV6Y0c5elpXUWdiV0YwY21sNExseHVJQ29nUUhSdlpHOGdUV2xuYUhRZ1ltVWdjMnh2ZHlCemFXNWpaU0IxYzJWa0lFRnljbUY1TG0xaGNDNGdVSEp2WW1GaWJIa2dibVZsWkhNZ2NHVnlabTl5YldGdVkyVWdjbVYyYVhOcGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMGNtRnVjM0J2YzJWTllYUnlhWGdvYldGMGNtbDRPaUJOWVhSeWFYZ3BPaUJOWVhSeWFYZ2dlMXh1SUNCeVpYUjFjbTRnYm1WM0lFRnljbUY1S0cxaGRISnBlRnN3WFM1c1pXNW5kR2dwTG1acGJHd29NQ2xjYmlBZ0lDQXViV0Z3S0NoZkxDQnBLU0E5UGlBb2JtVjNJRlpsWTNSdmNpaHRZWFJ5YVhndWJHVnVaM1JvS1M1bWFXeHNLREFwTG0xaGNDZ29YeXdnYWlrZ1BUNGdLRzFoZEhKcGVGdHFYVnRwWFNrcEtTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FXUmtjeUIwZDI4Z2RtVmpkRzl5Y3lCM2FYUm9JSFJvWlNCelpXTnZibVFnYjI1bElIUnZJR0psSUcxMWJIUnBjR3hwWldRZ1lua2dkR2hsSUdkcGRtVnVJSEpoZEdsdkxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQndJRlJvWlNCbWFYSnpkQ0IyWldOMGIzSWdkRzhnWVdSa0xseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSEVnVkdobElITmxZMjl1WkNCMlpXTjBiM0lnZEc4Z1lXUmtMbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0dGRXeDBhWEJzYVdWeVBURmRJRUVnYlhWc2RHbHdiR2xsY2lCMGJ5QmlaU0IxYzJWa0lHSmxabTl5WlNCMGFHVWdjMlZqYjI1a0lIWmxZM1J2Y2lCcGN5QmhaR1JsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdlMVpsWTNSdmNuMGdUbVYzSUhabFkzUnZjaUJqYjI1MFlXbHVaV1FnZEdobElISmxjM1ZzZENCdlppQnZjR1Z5WVhScGIyNGdjQ3R0ZFd4MGFYQnNhV1Z5S25FdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIyWldOMGIzSkJaR1FvY0RvZ1ZtVmpkRzl5TENCeE9pQldaV04wYjNJc0lHMTFiSFJwY0d4cFpYSTZJRzUxYldKbGNpQTlJREVwT2lCV1pXTjBiM0lnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCd0xteGxibWQwYUR0Y2JseHVJQ0JoYzNObGNuUW9ia2wwWlcxeklEMDlJSEV1YkdWdVozUm9MQ0FuVm1WamRHOXlJR3hsYm1kMGFITWdaRzhnYm05MElHMWhkR05vTGljcE8xeHVYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdibVYzSUZabFkzUnZjaWh1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djQzVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJGdHBYU0E5SUhCYmFWMGdLeUJ0ZFd4MGFYQnNhV1Z5SUNvZ2NWdHBYVHRjYmx4dUlDQnlaWFIxY200Z2RHOTBZV3c3WEc1OVhHNWNiaThxS2x4dUlDb2dVM1Z0Y3lCMGFHVWdkbVZqZEc5eUozTWdhWFJsYlhNdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhZZ1ZHaGxJSFpsWTNSdmNpQjBieUJpWlNCemRXMXRaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlGUm9aU0IyWldOMGIzSW5jeUJwZEdWdGN5QnpkVzB1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2wwWlcxelUzVnRLSFk2SUZabFkzUnZjaWs2SUc1MWJXSmxjaUI3WEc0Z0lHeGxkQ0IwYjNSaGJDQTlJREE3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyTG14bGJtZDBhRHNnS3l0cEtWeHVJQ0FnSUhSdmRHRnNJQ3M5SUhaYmFWMDdYRzVjYmlBZ2NtVjBkWEp1SUhSdmRHRnNPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGTjFjV0Z5WlhNZ2RHaGxJSFpsWTNSdmNpZHpJR2wwWlcxekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCMklGUm9aU0IyWldOMGIzSWdkRzhnYzNGMVlYSmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1ZtVmpkRzl5ZlNCQklHNWxkeUIyWldOMGIzSWdZMjl1ZEdGcGJtbHVaeUIwYUdVZ2IzSnBaMmx1WVd3bmN5QnBkR1Z0Y3lCemNYVmhjbVZrTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUIyWldOMGIzSlRjWFZoY21Vb2Rqb2dWbVZqZEc5eUtUb2dWbVZqZEc5eUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdkaTVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdibVYzSUZabFkzUnZjaWh1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkaTVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJGdHBYU0E5SUhaYmFWMGdLaUIyVzJsZE8xeHVYRzRnSUhKbGRIVnliaUIwYjNSaGJEdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhabFkzUnZja3hsYm1kMGFDaDJPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCc1pYUWdjM0Z5VTNWdE9pQnVkVzFpWlhJZ1BTQXdPMXh1SUNCbWIzSWdLR3hsZENCcE9pQnVkVzFpWlhJZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQnpjWEpUZFcwZ0t6MGdkbHRwWFNBcUlIWmJhVjA3WEc0Z0lISmxkSFZ5YmlCTllYUm9Mbk54Y25Rb2MzRnlVM1Z0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFpsWTNSdmNrUnZkRkJ5YjJSMVkzUW9kakU2SUZabFkzUnZjaXdnZGpJNklGWmxZM1J2Y2lrNklHNTFiV0psY2lCN1hHNGdJR2xtSUNoMk1TNXNaVzVuZEdnZ0lUMGdkakl1YkdWdVozUm9LVnh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHaGxJR1JwYldWdWMybHZibUZzYVhSNUlHOW1JSFJvWlNCMlpXTjBiM0p6SUcxMWMzUWdiV0YwWTJnbktUdGNiaUFnYkdWMElIQnliMlE2SUc1MWJXSmxjaUE5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2s2SUc1MWJXSmxjaUE5SURBN0lHa2dQQ0IyTVM1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCd2NtOWtJQ3M5SUhZeFcybGRJQ29nZGpKYmFWMDdYRzRnSUhKbGRIVnliaUJ3Y205a08xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYUnlhWGdnWm1sc2JHVmtJSGRwZEdnZ2NtRnVaRzl0SUdac2IyRjBhVzVuSUhCdmFXNTBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNU0JVYUdVZ1ptbHljM1FnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0J0WVhSeWFYZ3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TWlCVWFHVWdjMlZqYjI1a0lHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRjBjbWw0TGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpZMkZzWlQweExsMGdUV0Y0SUhaaGJIVmxJR2RwZG1WdUlHSjVJSEpoYm1SdmJTQm5aVzVsY21GMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVFZ2JtVjNJRzFoZEhKcGVDQm1hV3hzWldRZ2QybDBhQ0J5WVc1a2IyMGdabXh2WVhScGJtY2djRzlwYm5RZ0lIWmhiSFZsY3k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1pwYkd4U1lXNWtiMjFOWVhSeWFYZ29aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUhOallXeGxPaUJ1ZFcxaVpYSWdQU0F4TGlrNklFMWhkSEpwZUNCN1hHNGdJR052Ym5OMElHMWhkSEpwZUNBOUlHbHVhWFJEYjI5eVpHbHVZWFJsY3loa2FXMWxibk5wYjI0eExDQmthVzFsYm5OcGIyNHlLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYldWdWMybHZiakU3SUNzcmFTa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2daR2x0Wlc1emFXOXVNanNnS3l0cUtWeHVJQ0FnSUNBZ2JXRjBjbWw0VzJsZFcycGRJRDBnY21GdVpHOXRSbXh2WVhRb2MyTmhiR1VwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhSeWFYZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRnNZM1ZzWVhSbGN5QkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBkMjhnZG1WamRHOXljeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUVWMVkyeHBaR1ZoYmlCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pTQm5hWFpsYmlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTNWc1lYUmxSWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQnNaWFFnY21WemRXeDBJRDBnTUR0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnY0M1c1pXNW5kR2c3WEc1Y2JpQWdhV1lnS0d4bGJpQWhQVDBnY1M1c1pXNW5kR2dwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFVhR1VnWkdsdFpXNXphVzl1WVd4cGRIa2diMllnZEdobElIWmxZM1J2Y25NZ2JYVnpkQ0J0WVhSamFDY3BPMXh1SUNCY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lDc3JhU2xjYmlBZ0lDQnlaWE4xYkhRZ0t6MGdLSEJiYVYwZ0xTQnhXMmxkS1NBcUtpQXlPMXh1SUNCY2JpQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaHlaWE4xYkhRcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCa2FYTjBZVzVqWlNCdFlYUnlhWGdnZFhOcGJtY2dZU0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0JrWVhSaElFbHVjSFYwSUhabFkzUnZjbk1nZEc4Z1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObGN5NWNiaUFxSUVCd1lYSmhiU0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1JwYzNSaGJtTmxJRU4xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTAxaGRISnBlSDBnUTJGc1kzVnNZWFJsWkNCamRYTjBiMjBnWkdsemRHRnVZMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMFJwYzNSaGJtTmxUV0YwY21sNEtHUmhkR0U2SUZabFkzUnZjbk1zSUdScGMzUmhibU5sT2lCRWFYTjBZVzVqWlUxbGRISnBZeWs2SUUxaGRISnBlQ0I3WEc0Z0lHTnZibk4wSUc1SmRHVnRjeUE5SUdSaGRHRXViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQnRZWFJ5YVhnZ1BTQnBibWwwUTI5dmNtUnBibUYwWlhNb2JrbDBaVzF6TENCdVNYUmxiWE1zSURBcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JrbDBaVzF6T3lBcksya3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVNBcklERTdJR29nUENCdVNYUmxiWE03SUNzcmFpa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pEb2diblZ0WW1WeUlEMGdLR1JoZEdGYmFWMGdQVDBnYm5Wc2JDa2dmSHdnS0dSaGRHRmJhbDBnUFQwZ2JuVnNiQ2tnUHlBd0lEb2daR2x6ZEdGdVkyVW9aR0YwWVZ0cFhTd2daR0YwWVZ0cVhTazdYRzRnSUNBZ0lDQnRZWFJ5YVhoYmFWMWJhbDBnUFNCdFlYUnlhWGhiYWwxYmFWMGdQU0JrTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiV0YwY21sNE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCa2FYTjBZVzVqWlNCdFlYUnlhWGdnZFhOcGJtY2dZU0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0JrWVhSaElFbHVjSFYwSUhabFkzUnZjbk1nZEc4Z1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObGN5NWNiaUFxSUVCd1lYSmhiU0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1JwYzNSaGJtTmxJRU4xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTAxaGRISnBlSDBnUTJGc1kzVnNZWFJsWkNCamRYTjBiMjBnWkdsemRHRnVZMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMDV2Y20xaGJHbDZaV1JFYVhOMFlXNWpaVTFoZEhKcGVDaGtZWFJoT2lCV1pXTjBiM0p6TENCa2FYTjBZVzVqWlRvZ1JHbHpkR0Z1WTJWTlpYUnlhV01wT2lCTllYUnlhWGdnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCa1lYUmhMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdiV0YwY21sNElEMGdhVzVwZEVOdmIzSmthVzVoZEdWektHNUpkR1Z0Y3l3Z2JrbDBaVzF6TENBd0tUdGNiaUFnYkdWMElHMWhlQ0E5SUU1MWJXSmxjaTVOU1U1ZlZrRk1WVVU3WEc0Z0lHeGxkQ0J0YVc0Z1BTQk9kVzFpWlhJdVRVRllYMVpCVEZWRk8xeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2s3SUdvZ1BDQnVTWFJsYlhNN0lDc3JhaWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaRG9nYm5WdFltVnlJRDBnS0dSaGRHRmJhVjBnUFQwZ2JuVnNiQ2tnZkh3Z0tHUmhkR0ZiYWwwZ1BUMGdiblZzYkNCOGZDQnBJRDA5UFNCcUtTQS9JREFnT2lCa2FYTjBZVzVqWlNoa1lYUmhXMmxkTENCa1lYUmhXMnBkS1R0Y2JpQWdJQ0FnSUcxaGRISnBlRnRwWFZ0cVhTQTlJRzFoZEhKcGVGdHFYVnRwWFNBOUlHUTdYRzRnSUNBZ0lDQnBaaUFvWkNBK0lHMWhlQ2tnYldGNElEMGdaRHRjYmlBZ0lDQWdJR2xtSUNoa0lEd2diV2x1S1NCdGFXNGdQU0JrTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2tnS3lBeE95QnFJRHdnYmtsMFpXMXpPeUFySzJvcFhHNGdJQ0FnSUNCdFlYUnlhWGhiYVYxYmFsMGdQU0J0WVhSeWFYaGJhbDFiYVYwZ1BTQW9iV0YwY21sNFcybGRXMnBkSUMwZ2JXbHVLU0F2SUNodFlYZ2dMU0J0YVc0cE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdFlYUnlhWGc3WEc1OVhHNWNiaThxS2lCSFpXNWxjbUYwWlhNZ1lYSnlZWGtnWm5KdmJTQmhJSEpoYm1kbElGdGlaV2RwYmpzZ1pXNWtYU0J2Y2lCYlltVm5hVzQ3SUdWdVpDa2dhV1lnWlc1a1JYaGpiSFZ6YVhabExpQXFLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlc1U1lXNW5aU2hpWldkcGJqb2diblZ0WW1WeUxDQmxibVE2SUc1MWJXSmxjaXdnWlc1a1JYaGpiSFZ6YVhabElEMGdabUZzYzJVcE9pQkpiblF6TWtGeWNtRjVJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnWlc1a0lDMGdZbVZuYVc0Z0t5QW9aVzVrUlhoamJIVnphWFpsSUQ4Z01DQTZJREVwTzF4dUlDQmpiMjV6ZENCelpYSnBaWE1nUFNCdVpYY2dTVzUwTXpKQmNuSmhlU2h1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dia2wwWlcxek95QXJLMmtwWEc0Z0lDQWdjMlZ5YVdWelcybGRJRDBnWW1WbmFXNGdLeUJwTzF4dVhHNGdJSEpsZEhWeWJpQnpaWEpwWlhNN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJ2Y21SbGNpQnZaaUIyWVd4MVpYTWdZWE1nYVdZZ2RHaGxlU0JoY21VZ2MyOXlkR1ZrTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUhaaGJIVmxjeUJKYm5CMWRDQmhjbkpoZVM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXM0psZG1WeWMyVTlabUZzYzJWZElGZG9aWFJvWlhJZ2RHOGdjbVYwZFhKdUlISmxkbVZ5YzJWa0lHOXlaR1Z5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeVcxMTlJRlJvWlNCdmNtUmxjaUJqYjIxd2RYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnlaMU52Y25Rb2RtRnNkV1Z6T2lCaGJubGJYU3dnY21WMlpYSnpaU0E5SUdaaGJITmxLVG9nYm5WdFltVnlXMTBnZTF4dUlDQmpiMjV6ZENCemIzSjBabTRnUFNCeVpYWmxjbk5sSUQ4Z0tHRTZJR0Z1ZVZ0ZExDQmlPaUJoYm5sYlhTa2dQVDRnS0dKYk1GMGdMU0JoV3pCZEtTQTZJQ2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwSUQwK0lDaGhXekJkSUMwZ1lsc3dYU2s3WEc0Z0lHTnZibk4wSUdSbFkyOXlJRDBnS0hZNklHRnVlU3dnYVRvZ2JuVnRZbVZ5S1NBOVBpQmJkaXdnYVYwN0lDOHZJSE5sZENCcGJtUmxlQ0IwYnlCMllXeDFaVnh1SUNCamIyNXpkQ0IxYm1SbFkyOXlJRDBnS0dFNklHRnVlVnRkS1NBOVBpQmhXekZkT3lBdkx5QnNaV0YyWlNCdmJteDVJR2x1WkdWNFhHNGdJR052Ym5OMElGOWhjbWR6YjNKMElEMGdLR0Z5Y2pvZ1lXNTVXMTBwSUQwK0lHRnljaTV0WVhBb1pHVmpiM0lwTG5OdmNuUW9jMjl5ZEdadUtTNXRZWEFvZFc1a1pXTnZjaWs3WEc0Z0lISmxkSFZ5YmlCZllYSm5jMjl5ZENoMllXeDFaWE1wTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkR2hsSUdsdVpHVjRaWE1nYjJZZ2RHaGxJRzF2YzNRZ1pHbDJaWEp6WlNCdlltcGxZM1J6SUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWkdsemRDQm1kVzVqZEdsdmJseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR3hsYm1kMGFDQjBiM1JoYkNCdWRXMWlaWElnYjJZZ2IySnFaV04wYzF4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdiblZ0WW1WeUlHOW1JR1JwZG1WeWMyVWdaV3hsYldWdWRITWdkRzhnWm1sdVpGeHVJQ29nUUhCaGNtRnRJSHNvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlmU0JrYVhOMElHRWdablZ1WTNScGIyNGdkMmhwWTJnZ1kyRnNZM1ZzWVhSbGN5QmthWE4wWVc1alpTQmlaWFIzWldWdVhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIZHZJRzlpYW1WamRITWdkWE5wYm1jZ2RHaGxhWElnYVc1a1pYaGxjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UyNTFiV0psY2x0ZGZTQlVhR1VnYVc1a1pYaGxjeUJ2WmlCMGFHVWdiVzl6ZENCa2FYWmxjbk5sSUc5aWFtVmpkSE5jYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRVJwZG1WeWMyVlRkV0p6WlhRb2JHVnVaM1JvT2lCdWRXMWlaWElzSUc0NklHNTFiV0psY2l3Z1pHbHpkRG9nS0dreE9pQnVkVzFpWlhJc0lHa3lPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWs2SUc1MWJXSmxjbHRkSUh0Y2JpQWdablZ1WTNScGIyNGdiV0Y0UW5rb2RtRnNkV1Z6T2lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzSUc5eVpHVnlRbms2SUNocE9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpa2dlMXh1SUNBZ0lHeGxkQ0J0WVhoV1lXeDFaU0E5SUc1MWJHdzdYRzRnSUNBZ2JHVjBJRzFoZUU5eVpHVnlRbmtnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JsYkdWdFpXNTBJRzltSUhaaGJIVmxjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaV3hsYldWdWRFOXlaR1Z5UW5rZ1BTQnZjbVJsY2tKNUtHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ2FXWWdLRzFoZUU5eVpHVnlRbmtnUFQwZ2JuVnNiQ0I4ZkNCbGJHVnRaVzUwVDNKa1pYSkNlU0ErSUcxaGVFOXlaR1Z5UW5rcElIdGNiaUFnSUNBZ0lDQWdiV0Y0Vm1Gc2RXVWdQU0JsYkdWdFpXNTBPMXh1SUNBZ0lDQWdJQ0J0WVhoUGNtUmxja0o1SUQwZ1pXeGxiV1Z1ZEU5eVpHVnlRbms3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYaFdZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUhOMVluTmxkQ0E5SUZ0eVlXNWtiMjFKYm5Rb2JHVnVaM1JvSUMwZ01TbGRPMXh1SUNCamIyNXpkQ0JqYjIxd2JHVnRaVzUwSUQwZ2JtVjNJRk5sZENncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvSVhOMVluTmxkQzVwYm1Oc2RXUmxjeWhwS1NsY2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVlXUmtLR2twTzF4dUlDQjlYRzVjYmlBZ2QyaHBiR1VnS0hOMVluTmxkQzVzWlc1bmRHZ2dQQ0J1S1NCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0SUQwZ2JXRjRRbmtvWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG5aaGJIVmxjeWdwSUdGeklFbDBaWEpoWW14bFNYUmxjbUYwYjNJOGJuVnRZbVZ5UGl4Y2JpQWdJQ0FnSUNocEtTQTlQaUJOWVhSb0xtMXBiaTVoY0hCc2VTaE5ZWFJvTENCemRXSnpaWFF1YldGd0tHWjFibU4wYVc5dUtIWmhiQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1JwYzNRb2FTd2dkbUZzS1R0Y2JpQWdJQ0FnSUgwcEtTazdYRzRnSUNBZ2FXWWdLR2xrZUNrZ2UxeHVJQ0FnSUNBZ2MzVmljMlYwTG5CMWMyZ29hV1I0S1R0Y2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVpHVnNaWFJsS0dsa2VDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemRXSnpaWFE3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QnViM0p0WVd4cGVtVmtJSFpsWTNSdmNpNWNiaUFxSUZ4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJR1JoZEdFZ2JuVnRaWEpwWTJGc0lHRnljbUY1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM0p0WVd4cGVtVW9aR0YwWVRvZ1ZtVmpkRzl5S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnWkdGMFlTNXNaVzVuZEdnN1hHNGdJR3hsZENCemRXMGdQU0F3TzF4dUlDQnNaWFFnYzNWdFQyWlRjWFZoY21WeklEMGdNRHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR3hsYmpzZ0t5dHBLU0I3WEc0Z0lDQWdjM1Z0SUNzOUlHUmhkR0ZiYVYwN1hHNGdJQ0FnYzNWdFQyWlRjWFZoY21WeklDczlJR1JoZEdGYmFWMGdLaW9nTWp0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUcxbFlXNGdQU0J6ZFcwZ0x5QnNaVzQ3WEc0Z0lHTnZibk4wSUhOMFpFUmxka2x1ZG1WeWMyVWdQU0F4TGpBZ0x5Qk5ZWFJvTG5OeGNuUW9jM1Z0VDJaVGNYVmhjbVZ6SUM4Z2JHVnVJQzBnYldWaGJpQXFLaUF5S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJqc2dLeXRwS1Z4dUlDQWdJR1JoZEdGYmFWMGdQU0FvWkdGMFlWdHBYU0F0SUcxbFlXNHBJQ29nYzNSa1JHVjJTVzUyWlhKelpUdGNibHh1SUNCeVpYUjFjbTRnWkdGMFlUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUJ6WlhRZ1pHbG1abVZ5Wlc1alpTQmlaWFIzWldWdUlIUjNieUJzYVhOMGN5NWNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJR0VnVkdobElHWnBjbk4wSUd4cGMzUXVYRzRnS2lCQWNHRnlZVzBnZTJGdWVWdGRmU0JpSUZSb1pTQnpaV052Ym1RZ2JHbHpkQzVjYmlBcUlFQnlaWFIxY200Z2UyRnVlVnRkZlZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUkdsbVptVnlaVzVqWlNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcE9pQmhibmxiWFNCN1hHNGdJR052Ym5OMElHSlRaWFFnUFNCdVpYY2dVMlYwS0dJcE8xeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLR0V1Wm1sc2RHVnlLQ2g0S1NBOVBpQWhZbE5sZEM1b1lYTW9lQ2twS1M1MllXeDFaWE1vS1NrN1hHNTlYRzRpWFgwPSIsImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCB7IGNyZWF0ZU1DTFdvcmtlciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLCBTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yZW5kZXItbGluZXMtb24tc3AnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcmtvdkNsdXN0ZXIoZGYsIGNvbHMsIG1ldHJpY3MsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIHByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkID0gODAsIG1heEl0ZXJhdGlvbnMgPSAxMCwgdXNlV2ViR1BVID0gZmFsc2UsIGluZmxhdGUgPSAyLCBzY3ApIHtcbiAgICBjb25zdCBzY2F0dGVyUGxvdFByb3BzID0ge1xuICAgICAgICBzaG93WEF4aXM6IGZhbHNlLFxuICAgICAgICBzaG93WUF4aXM6IGZhbHNlLFxuICAgICAgICBzaG93WFNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgc2hvd1lTZWxlY3RvcjogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCB0diA9IGdyb2suc2hlbGwudGFibGVWaWV3KGRmLm5hbWUpID8/IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICBjb25zdCBzYyA9IHNjcCA/PyB0di5zY2F0dGVyUGxvdCh7IC4uLnNjYXR0ZXJQbG90UHJvcHMsIHRpdGxlOiAnTUNMJyB9KTtcbiAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2Mucm9vdCwgdHJ1ZSk7XG4gICAgY29uc3QgZGlzdGFuY2VGbkFyZ3MgPSBbXTtcbiAgICBjb25zdCBlbmNvZGVkQ29sRW50cmllcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlcHJvY2Vzc2luZ0Z1bmNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHBmID0gcHJlcHJvY2Vzc2luZ0Z1bmNzW2ldO1xuICAgICAgICBpZiAocGYpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbElucHV0TmFtZSA9IHBmLmlucHV0c1swXS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgbWV0cmljSW5wdXROYW1lID0gcGYuaW5wdXRzWzFdLm5hbWU7XG4gICAgICAgICAgICBjb25zdCB7IGVudHJpZXMsIG9wdGlvbnMgfSA9IGF3YWl0IHBmLmFwcGx5KHsgW2NvbElucHV0TmFtZV06IGNvbHNbaV0sIFttZXRyaWNJbnB1dE5hbWVdOiBtZXRyaWNzW2ldLFxuICAgICAgICAgICAgICAgIC4uLihwcmVwcm9jZXNzaW5nRnVuY0FyZ3NbaV0gPz8ge30pIH0pO1xuICAgICAgICAgICAgZW5jb2RlZENvbEVudHJpZXMucHVzaCh7IGVudHJpZXMsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICBkaXN0YW5jZUZuQXJncy5wdXNoKG9wdGlvbnMgPz8ge30pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGNvbHNbaV0udG9MaXN0KCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBlbmNvZGVkQ29sRW50cmllcy5wdXNoKHsgZW50cmllcywgb3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGRpc3RhbmNlRm5BcmdzLnB1c2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbWNsV29ya2VyID0gY3JlYXRlTUNMV29ya2VyKGVuY29kZWRDb2xFbnRyaWVzLm1hcCgoaXQpID0+IGl0LmVudHJpZXMpLCB0aHJlc2hvbGQsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBtZXRyaWNzLCBkaXN0YW5jZUZuQXJncywgbWF4SXRlcmF0aW9ucywgdXNlV2ViR1BVLCBpbmZsYXRlKTtcbiAgICBjb25zdCB0ZXJtaW5hdGVTdWIgPSBncm9rLmV2ZW50cy5vblZpZXdlckNsb3NlZC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MuYXJncy52aWV3ZXI/LnByb3BzPy50aXRsZSA9PT0gc2MucHJvcHMudGl0bGUgJiYgc2MudHlwZSA9PT0gYXJncy5hcmdzPy52aWV3ZXI/LnR5cGUpIHtcbiAgICAgICAgICAgIHRlcm1pbmF0ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgbWNsV29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgbWNsV29ya2VyLnByb21pc2U7XG4gICAgaWYgKCFyZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBjbHVzdGVyQ29sTmFtZSA9IGRmLmNvbHVtbnMuZ2V0VW51c2VkTmFtZSgnQ2x1c3RlciAoTUNMKScpO1xuICAgIGNvbnN0IGVtYmVyZFhDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdFbWJlZFggKE1DTCknKTtcbiAgICBjb25zdCBlbWJlcmRZQ29sTmFtZSA9IGRmLmNvbHVtbnMuZ2V0VW51c2VkTmFtZSgnRW1iZWRZIChNQ0wpJyk7XG4gICAgY29uc3QgY2x1c3RlcnNDb3VudGVyID0ge307XG4gICAgcmVzLmNsdXN0ZXJzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgaWYgKCFjbHVzdGVyc0NvdW50ZXJbY10pXG4gICAgICAgICAgICBjbHVzdGVyc0NvdW50ZXJbY10gPSAwO1xuICAgICAgICBjbHVzdGVyc0NvdW50ZXJbY10rKztcbiAgICB9KTtcbiAgICBjb25zdCBjb25uZWN0aXZpdHkgPSBuZXcgVWludDMyQXJyYXkocmVzLmVtYmVkWC5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLmlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbm5lY3Rpdml0eVtyZXMuaXNbaV1dKys7XG4gICAgICAgIGNvbm5lY3Rpdml0eVtyZXMuanNbaV1dKys7XG4gICAgfVxuICAgIGNvbnN0IGNsdXN0ZXJDb3VudGVyQ29sTmFtZSA9IGRmLmNvbHVtbnMuZ2V0VW51c2VkTmFtZSgnQ2x1c3RlciBzaXplIChNQ0wpJyk7XG4gICAgY29uc3QgY29ubmVjdGl2aXR5Q29sTmFtZSA9IGRmLmNvbHVtbnMuZ2V0VW51c2VkTmFtZSgnQ29ubmVjdGl2aXR5IChNQ0wpJyk7XG4gICAgY29uc3QgZW1iZWRYQ29sID0gZGYuY29sdW1ucy5hZGROZXdGbG9hdChlbWJlcmRYQ29sTmFtZSk7XG4gICAgZW1iZWRYQ29sLmluaXQoKGkpID0+IHJlcy5lbWJlZFhbaV0pO1xuICAgIGNvbnN0IGVtYmVkWUNvbCA9IGRmLmNvbHVtbnMuYWRkTmV3RmxvYXQoZW1iZXJkWUNvbE5hbWUpO1xuICAgIGVtYmVkWUNvbC5pbml0KChpKSA9PiByZXMuZW1iZWRZW2ldKTtcbiAgICBjb25zdCBjbHVzdGVyQ29sID0gZGYuY29sdW1ucy5hZGROZXdTdHJpbmcoY2x1c3RlckNvbE5hbWUpO1xuICAgIGNsdXN0ZXJDb2wuaW5pdCgoaSkgPT4gcmVzLmNsdXN0ZXJzW2ldLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IGNsdXN0ZXJDb3VudGVyQ29sID0gZGYuY29sdW1ucy5hZGROZXdJbnQoY2x1c3RlckNvdW50ZXJDb2xOYW1lKTtcbiAgICBjbHVzdGVyQ291bnRlckNvbC5pbml0KChpKSA9PiBjbHVzdGVyc0NvdW50ZXJbcmVzLmNsdXN0ZXJzW2ldXSk7XG4gICAgY29uc3QgY29ubmVjdGl2aXR5Q29sID0gZGYuY29sdW1ucy5hZGROZXdJbnQoY29ubmVjdGl2aXR5Q29sTmFtZSk7XG4gICAgY29ubmVjdGl2aXR5Q29sLmluaXQoKGkpID0+IGNvbm5lY3Rpdml0eVtpXSk7XG4gICAgLy8gZGYuY29sdW1ucy5hZGROZXdGbG9hdChlbWJlcmRYQ29sTmFtZSkuaW5pdCgoaSkgPT4gcmVzLmVtYmVkWFtpXSk7XG4gICAgLy8gZGYuY29sdW1ucy5hZGROZXdGbG9hdChlbWJlcmRZQ29sTmFtZSkuaW5pdCgoaSkgPT4gcmVzLmVtYmVkWVtpXSk7XG4gICAgLy8gZGYuY29sdW1ucy5hZGROZXdJbnQoY2x1c3RlckNvdW50ZXJDb2xOYW1lKS5pbml0KChpKSA9PiBjbHVzdGVyc0NvdW50ZXJbcmVzLmNsdXN0ZXJzW2ldXSk7XG4gICAgLy8gZGYuY29sdW1ucy5hZGROZXdTdHJpbmcoY2x1c3RlckNvbE5hbWUpLmluaXQoKGkpID0+IHJlcy5jbHVzdGVyc1tpXS50b1N0cmluZygpKTtcbiAgICBzYy5wcm9wcy54Q29sdW1uTmFtZSA9IGVtYmVyZFhDb2xOYW1lO1xuICAgIHNjLnByb3BzLnlDb2x1bW5OYW1lID0gZW1iZXJkWUNvbE5hbWU7XG4gICAgc2MucHJvcHMuY29sb3JDb2x1bW5OYW1lID0gY2x1c3RlckNvbE5hbWU7XG4gICAgc2MucHJvcHMubWFya2VyRGVmYXVsdFNpemUgPSA1O1xuICAgIHRlcm1pbmF0ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIC8vIGNvbnN0IHNjID0gdHYuc2NhdHRlclBsb3Qoe3g6IGVtYmVyZFhDb2xOYW1lLCB5OiBlbWJlcmRZQ29sTmFtZX0pO1xuICAgIC8vIHNjLnByb3BzLmNvbG9yQ29sdW1uTmFtZSA9IGNsdXN0ZXJDb2xOYW1lO1xuICAgIC8vIHNjLnByb3BzLm1hcmtlckRlZmF1bHRTaXplID0gNTtcbiAgICBjb25zdCBfc2NMaW5lcyA9IG5ldyBTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIoc2MsIGVtYmVyZFhDb2xOYW1lLCBlbWJlcmRZQ29sTmFtZSwgeyBmcm9tOiByZXMuaXMsIHRvOiByZXMuanMsIGRyYXdBcnJvd3M6IGZhbHNlLCBvcGFjaXR5OiAwLjMsIHNraXBNdWx0aUxpbmVDYWxjdWxhdGlvbjogdHJ1ZSB9LCBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUubm9uZSk7XG4gICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHNjLnJvb3QsIGZhbHNlKTtcbiAgICAvLyBzYy5jbG9zZSgpO1xuICAgIC8vIGNvbnN0IHNjTGluZXNWaWV3ZXIgPSBuZXcgU2NhdHRlclBsb3RXaXRoTGluZXMoc2MsIHJlcy5pcywgcmVzLmpzLCBlbWJlcmRYQ29sTmFtZSwgZW1iZXJkWUNvbE5hbWUpO1xuICAgIC8vIHR2LmFkZFZpZXdlcihzY0xpbmVzVmlld2VyKTtcbiAgICByZXR1cm4geyBzYywgZW1iZWRYQ29sLCBlbWJlZFlDb2wsIGNsdXN0ZXJDb2wsIGNsdXN0ZXJDb3VudGVyQ29sLCBjb25uZWN0aXZpdHlDb2wgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyeDFjM1JsY21sdVp5MTJhV1YzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lZMngxYzNSbGNtbHVaeTEyYVdWM0xuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEU5QlFVOHNTMEZCU3l4SlFVRkpMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTTdRVUZETVVNc1QwRkJUeXhMUVVGTExFVkJRVVVzVFVGQlRTeHBRa0ZCYVVJc1EwRkJRenRCUVVkMFF5eFBRVUZQTEVWQlFVTXNaVUZCWlN4RlFVRkRMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJRM2hETEU5QlFVOHNSVUZCUXl3eVFrRkJNa0lzUlVGQlJTeDNRa0ZCZDBJc1JVRkJReXhOUVVGTkxHdEVRVUZyUkN4RFFVRkRPMEZCWjBKMlNDeE5RVUZOTEVOQlFVTXNTMEZCU3l4VlFVRlZMR0ZCUVdFc1EwRkRha01zUlVGQlowSXNSVUZCUlN4SlFVRnBRaXhGUVVGRkxFOUJRWFZDTEVWQlF6VkVMRTlCUVdsQ0xFVkJRVVVzYVVKQlFUUkRMRVZCUVVVc2EwSkJRV3RFTEVWQlEyNUlMSEZDUVVFMFFpeEZRVUZGTEZsQlFXOUNMRVZCUVVVc1JVRkJSU3huUWtGQmQwSXNSVUZCUlN4RlFVTm9SaXhaUVVGeFFpeExRVUZMTEVWQlFVVXNWVUZCYTBJc1EwRkJReXhGUVVGRkxFZEJRVEJDTzBsQlJUTkZMRTFCUVUwc1owSkJRV2RDTEVkQlFVYzdVVUZEZGtJc1UwRkJVeXhGUVVGRkxFdEJRVXM3VVVGRGFFSXNVMEZCVXl4RlFVRkZMRXRCUVVzN1VVRkRhRUlzWVVGQllTeEZRVUZGTEV0QlFVczdVVUZEY0VJc1lVRkJZU3hGUVVGRkxFdEJRVXM3UzBGRGNrSXNRMEZCUXp0SlFVTkdMRTFCUVUwc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVY0UlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhIUVVGSExFbEJRVWtzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkRMRWRCUVVjc1owSkJRV2RDTEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1JVRkJReXhEUVVGRExFTkJRVU03U1VGRmRFVXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGNrTXNUVUZCVFN4alFVRmpMRWRCUVdNc1JVRkJSU3hEUVVGRE8wbEJRM0pETEUxQlFVMHNhVUpCUVdsQ0xFZEJRVzFETEVWQlFVVXNRMEZCUXp0SlFVTTNSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRMnhFTEUxQlFVMHNSVUZCUlN4SFFVRkhMR3RDUVVGclFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJwRExFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlEwNHNUVUZCVFN4WlFVRlpMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRka01zVFVGQlRTeGxRVUZsTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZETVVNc1RVRkJUU3hGUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVTXNSMEZEWkN4TlFVRk5MRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlF5eERRVUZETEZsQlFWa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEdWQlFXVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzQkZMRWRCUVVjc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEYkVRc2FVSkJRV2xDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZETTBNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNN1UwRkRjRU03WVVGQlRUdFpRVU5NTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTnFReXhOUVVGTkxFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTTdXVUZEYmtJc2FVSkJRV2xDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZETTBNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0VFFVTTVRanRMUVVOR08wbEJSVVFzVFVGQlRTeFRRVUZUTEVkQlFVY3NaVUZCWlN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RlFVTjZSU3hUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEdsQ1FVRnBRaXhGUVVGRkxFOUJRVThzUlVGQlJTeGpRVUZqTEVWQlFVVXNZVUZCWVN4RlFVRkZMRk5CUVZNc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEpRVVZ5Unl4TlFVRk5MRmxCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJUdFJRVU5xUlN4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRXRCUVVzc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1MwRkJTeXhKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVN1dVRkROVVlzV1VGQldTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPMWxCUXpOQ0xGTkJRVk1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0VFFVTjJRanRKUVVOSUxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEwZ3NUVUZCVFN4SFFVRkhMRWRCUVVjc1RVRkJUU3hUUVVGVExFTkJRVU1zVDBGQlR5eERRVUZETzBsQlEzQkRMRWxCUVVrc1EwRkJReXhIUVVGSE8xRkJRMDRzVDBGQlR6dEpRVU5VTEUxQlFVMHNZMEZCWXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zWVVGQllTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMGxCUTJwRkxFMUJRVTBzWTBGQll5eEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzBsQlEyaEZMRTFCUVUwc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wbEJRMmhGTEUxQlFVMHNaVUZCWlN4SFFVRXdRaXhGUVVGRkxFTkJRVU03U1VGRGJFUXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjZRaXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVRkZMR1ZCUVdVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYUVRc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFNDeE5RVUZOTEZsQlFWa3NSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNoRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOMFF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdVVUZETVVJc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8wdEJRek5DTzBsQlEwUXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4RFFVRkRPMGxCUXpkRkxFMUJRVTBzYlVKQlFXMUNMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zUTBGQlF6dEpRVVV6UlN4TlFVRk5MRk5CUVZNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVONlJDeFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGNrTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNN1NVRkRla1FzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM0pETEUxQlFVMHNWVUZCVlN4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMGxCUXpORUxGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU51UkN4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN1NVRkRkRVVzYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4bFFVRmxMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRhRVVzVFVGQlRTeGxRVUZsTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJRenRKUVVOc1JTeGxRVUZsTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVVM1F5eHhSVUZCY1VVN1NVRkRja1VzY1VWQlFYRkZPMGxCUTNKRkxEWkdRVUUyUmp0SlFVTTNSaXh0UmtGQmJVWTdTVUZEYmtZc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVkQlFVY3NZMEZCWXl4RFFVRkRPMGxCUTNSRExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMR05CUVdNc1EwRkJRenRKUVVOMFF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1IwRkJSeXhqUVVGakxFTkJRVU03U1VGRE1VTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRMMElzV1VGQldTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPMGxCUXpOQ0xIRkZRVUZ4UlR0SlFVTnlSU3cyUTBGQk5rTTdTVUZETjBNc2EwTkJRV3RETzBsQlEyeERMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzZDBKQlFYZENMRU5CUVVNc1JVRkJSU3hGUVVGRkxHTkJRV01zUlVGQlJTeGpRVUZqTEVWQlF6bEZMRVZCUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZUTEVWQlFVVXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGVExFVkJRVVVzVlVGQlZTeEZRVUZGTEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1IwRkJSeXhGUVVGRkxIZENRVUYzUWl4RlFVRkZMRWxCUVVrc1JVRkJReXhGUVVONlJ5d3lRa0ZCTWtJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU53UXl4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU4wUXl4alFVRmpPMGxCUTJRc2MwZEJRWE5ITzBsQlEzUkhMQ3RDUVVFclFqdEpRVU12UWl4UFFVRlBMRVZCUVVNc1JVRkJSU3hGUVVGRkxGTkJRVk1zUlVGQlJTeFRRVUZUTEVWQlFVVXNWVUZCVlN4RlFVRkZMR2xDUVVGcFFpeEZRVUZGTEdWQlFXVXNSVUZCUXl4RFFVRkRPMEZCUTNCR0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1WEc1cGJYQnZjblFnZTJOeVpXRjBaVTFEVEZkdmNtdGxjbjBnWm5KdmJTQW5MaTlwYm1SbGVDYzdYRzVwYlhCdmNuUWdlMU5qWVhSMFpYSlFiRzkwUTNWeWNtVnVkRXhwYm1WVGRIbHNaU3dnVTJOaGRIUmxjbEJzYjNSTWFXNWxjMUpsYm1SbGNtVnlmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTl5Wlc1a1pYSXRiR2x1WlhNdGIyNHRjM0FuTzF4dWFXMXdiM0owSUh0TGJtOTNiazFsZEhKcFkzTjlJR1p5YjIwZ0p5NHVMM1I1Y0dWa0xXMWxkSEpwWTNNbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0UWNtVndjbTlqWlhOelJuVnVZM1JwYjI1U1pYUjFjbTVVZVhCbGZTQm1jbTl0SUNjdUxpOW1kVzVqZEdsdmJrVmthWFJ2Y25NdlpHbHRaVzV6YVc5dVlXeHBkSGt0Y21Wa2RXTjBhVzl1TFdWa2FYUnZjaWM3WEc1cGJYQnZjblFnZTA5d2RHbHZibk45SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNSNWNHVXRaR1ZqYkdGeVlYUnBiMjV6Snp0Y2JseHVYRzVsZUhCdmNuUWdkSGx3WlNCTlEweERiSFZ6ZEdWeVZtbGxkMlZ5VW1WemRXeDBJRDBnZTF4dUlDQnpZem9nUkVjdVUyTmhkSFJsY2xCc2IzUldhV1YzWlhJN1hHNGdJR1Z0WW1Wa1dFTnZiRG9nUkVjdVEyOXNkVzF1TzF4dUlDQmxiV0psWkZsRGIydzZJRVJITGtOdmJIVnRianRjYmlBZ1kyeDFjM1JsY2tOdmJEb2dSRWN1UTI5c2RXMXVPMXh1SUNCamJIVnpkR1Z5UTI5MWJuUmxja052YkRvZ1JFY3VRMjlzZFcxdU8xeHVJQ0JqYjI1dVpXTjBhWFpwZEhsRGIydzZJRVJITGtOdmJIVnRianRjYm4xY2JseHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUcxaGNtdHZka05zZFhOMFpYSW9YRzRnSUdSbU9pQkVSeTVFWVhSaFJuSmhiV1VzSUdOdmJITTZJRVJITGtOdmJIVnRibHRkTENCdFpYUnlhV056T2lCTGJtOTNiazFsZEhKcFkzTmJYU3hjYmlBZ2QyVnBaMmgwY3pvZ2JuVnRZbVZ5VzEwc0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a0xDQndjbVZ3Y205alpYTnphVzVuUm5WdVkzTTZJQ2hFUnk1R2RXNWpJSHdnYm5Wc2JDQjhJSFZ1WkdWbWFXNWxaQ2xiWFN4Y2JpQWdjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTkJjbWR6T2lCaGJubGJYU3dnZEdoeVpYTm9iMnhrT2lCdWRXMWlaWElnUFNBNE1Dd2diV0Y0U1hSbGNtRjBhVzl1Y3pvZ2JuVnRZbVZ5SUQwZ01UQXNYRzRnSUhWelpWZGxZa2RRVlRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTENCcGJtWnNZWFJsT2lCdWRXMWlaWElnUFNBeUxDQnpZM0EvT2lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNseHVLVG9nVUhKdmJXbHpaVHgxYm1SbFptbHVaV1FnZkNCTlEweERiSFZ6ZEdWeVZtbGxkMlZ5VW1WemRXeDBQaUI3WEc0Z0lHTnZibk4wSUhOallYUjBaWEpRYkc5MFVISnZjSE1nUFNCN1hHNGdJQ0FnYzJodmQxaEJlR2x6T2lCbVlXeHpaU3hjYmlBZ0lDQnphRzkzV1VGNGFYTTZJR1poYkhObExGeHVJQ0FnSUhOb2IzZFlVMlZzWldOMGIzSTZJR1poYkhObExGeHVJQ0FnSUhOb2IzZFpVMlZzWldOMGIzSTZJR1poYkhObExGeHVJQ0I5TzF4dUlDQmpiMjV6ZENCMGRpQTlJR2R5YjJzdWMyaGxiR3d1ZEdGaWJHVldhV1YzS0dSbUxtNWhiV1VwSUQ4L0lHZHliMnN1YzJobGJHd3VZV1JrVkdGaWJHVldhV1YzS0dSbUtUdGNibHh1SUNCamIyNXpkQ0J6WXlBOUlITmpjQ0EvUHlCMGRpNXpZMkYwZEdWeVVHeHZkQ2g3TGk0dWMyTmhkSFJsY2xCc2IzUlFjbTl3Y3l3Z2RHbDBiR1U2SUNkTlEwd25mU2s3WEc1Y2JpQWdkV2t1YzJWMFZYQmtZWFJsU1c1a2FXTmhkRzl5S0hOakxuSnZiM1FzSUhSeWRXVXBPMXh1SUNCamIyNXpkQ0JrYVhOMFlXNWpaVVp1UVhKbmN6b2dUM0IwYVc5dWMxdGRJRDBnVzEwN1hHNGdJR052Ym5OMElHVnVZMjlrWldSRGIyeEZiblJ5YVdWek9pQlFjbVZ3Y205alpYTnpSblZ1WTNScGIyNVNaWFIxY201VWVYQmxXMTBnUFNCYlhUdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNNdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQmpiMjV6ZENCd1ppQTlJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpjMXRwWFR0Y2JpQWdJQ0JwWmlBb2NHWXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiRWx1Y0hWMFRtRnRaU0E5SUhCbUxtbHVjSFYwYzFzd1hTNXVZVzFsTzF4dUlDQWdJQ0FnWTI5dWMzUWdiV1YwY21salNXNXdkWFJPWVcxbElEMGdjR1l1YVc1d2RYUnpXekZkTG01aGJXVTdYRzRnSUNBZ0lDQmpiMjV6ZENCN1pXNTBjbWxsY3l3Z2IzQjBhVzl1YzMwNklGQnlaWEJ5YjJObGMzTkdkVzVqZEdsdmJsSmxkSFZ5YmxSNWNHVWdQVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0YzWVdsMElIQm1MbUZ3Y0d4NUtIdGJZMjlzU1c1d2RYUk9ZVzFsWFRvZ1kyOXNjMXRwWFN3Z1cyMWxkSEpwWTBsdWNIVjBUbUZ0WlYwNklHMWxkSEpwWTNOYmFWMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1TGk0b2NISmxjSEp2WTJWemMybHVaMFoxYm1OQmNtZHpXMmxkSUQ4L0lIdDlLWDBwTzF4dUlDQWdJQ0FnWlc1amIyUmxaRU52YkVWdWRISnBaWE11Y0hWemFDaDdaVzUwY21sbGN5d2diM0IwYVc5dWMzMHBPMXh1SUNBZ0lDQWdaR2x6ZEdGdVkyVkdia0Z5WjNNdWNIVnphQ2h2Y0hScGIyNXpJRDgvSUh0OUtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaVzUwY21sbGN5QTlJR052YkhOYmFWMHVkRzlNYVhOMEtDazdYRzRnSUNBZ0lDQmpiMjV6ZENCdmNIUnBiMjV6SUQwZ2UzMDdYRzRnSUNBZ0lDQmxibU52WkdWa1EyOXNSVzUwY21sbGN5NXdkWE5vS0h0bGJuUnlhV1Z6TENCdmNIUnBiMjV6ZlNrN1hHNGdJQ0FnSUNCa2FYTjBZVzVqWlVadVFYSm5jeTV3ZFhOb0tHOXdkR2x2Ym5NcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHTnZibk4wSUcxamJGZHZjbXRsY2lBOUlHTnlaV0YwWlUxRFRGZHZjbXRsY2lobGJtTnZaR1ZrUTI5c1JXNTBjbWxsY3k1dFlYQW9LR2wwS1NBOVBpQnBkQzVsYm5SeWFXVnpLU3hjYmlBZ0lDQjBhSEpsYzJodmJHUXNJSGRsYVdkb2RITXNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0J0WlhSeWFXTnpMQ0JrYVhOMFlXNWpaVVp1UVhKbmN5d2diV0Y0U1hSbGNtRjBhVzl1Y3l3Z2RYTmxWMlZpUjFCVkxDQnBibVpzWVhSbEtUdGNibHh1SUNCamIyNXpkQ0IwWlhKdGFXNWhkR1ZUZFdJZ1BTQm5jbTlyTG1WMlpXNTBjeTV2YmxacFpYZGxja05zYjNObFpDNXpkV0p6WTNKcFltVW9LR0Z5WjNNcElEMCtJSHRjYmlBZ0lDQnBaaUFvWVhKbmN5NWhjbWR6TG5acFpYZGxjajh1Y0hKdmNITS9MblJwZEd4bElEMDlQU0J6WXk1d2NtOXdjeTUwYVhSc1pTQW1KaUJ6WXk1MGVYQmxJRDA5UFNCaGNtZHpMbUZ5WjNNL0xuWnBaWGRsY2o4dWRIbHdaU2tnZTF4dUlDQWdJQ0FnZEdWeWJXbHVZWFJsVTNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0J0WTJ4WGIzSnJaWEl1ZEdWeWJXbHVZWFJsS0NrN1hHNGdJQ0FnZlZ4dUlDQjlLVHRjYmlBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ2JXTnNWMjl5YTJWeUxuQnliMjFwYzJVN1hHNGdJR2xtSUNnaGNtVnpLVnh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdZMjl1YzNRZ1kyeDFjM1JsY2tOdmJFNWhiV1VnUFNCa1ppNWpiMngxYlc1ekxtZGxkRlZ1ZFhObFpFNWhiV1VvSjBOc2RYTjBaWElnS0UxRFRDa25LVHRjYmlBZ1kyOXVjM1FnWlcxaVpYSmtXRU52YkU1aGJXVWdQU0JrWmk1amIyeDFiVzV6TG1kbGRGVnVkWE5sWkU1aGJXVW9KMFZ0WW1Wa1dDQW9UVU5NS1NjcE8xeHVJQ0JqYjI1emRDQmxiV0psY21SWlEyOXNUbUZ0WlNBOUlHUm1MbU52YkhWdGJuTXVaMlYwVlc1MWMyVmtUbUZ0WlNnblJXMWlaV1JaSUNoTlEwd3BKeWs3WEc0Z0lHTnZibk4wSUdOc2RYTjBaWEp6UTI5MWJuUmxjam9nZTF0Zk9pQnVkVzFpWlhKZE9pQnVkVzFpWlhKOUlEMGdlMzA3WEc0Z0lISmxjeTVqYkhWemRHVnljeTVtYjNKRllXTm9LQ2hqS1NBOVBpQjdYRzRnSUNBZ2FXWWdLQ0ZqYkhWemRHVnljME52ZFc1MFpYSmJZMTBwSUdOc2RYTjBaWEp6UTI5MWJuUmxjbHRqWFNBOUlEQTdYRzRnSUNBZ1kyeDFjM1JsY25ORGIzVnVkR1Z5VzJOZEt5czdYRzRnSUgwcE8xeHVJQ0JqYjI1emRDQmpiMjV1WldOMGFYWnBkSGtnUFNCdVpYY2dWV2x1ZERNeVFYSnlZWGtvY21WekxtVnRZbVZrV0M1c1pXNW5kR2dwTzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSEpsY3k1cGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR052Ym01bFkzUnBkbWwwZVZ0eVpYTXVhWE5iYVYxZEt5czdYRzRnSUNBZ1kyOXVibVZqZEdsMmFYUjVXM0psY3k1cWMxdHBYVjByS3p0Y2JpQWdmVnh1SUNCamIyNXpkQ0JqYkhWemRHVnlRMjkxYm5SbGNrTnZiRTVoYldVZ1BTQmtaaTVqYjJ4MWJXNXpMbWRsZEZWdWRYTmxaRTVoYldVb0owTnNkWE4wWlhJZ2MybDZaU0FvVFVOTUtTY3BPMXh1SUNCamIyNXpkQ0JqYjI1dVpXTjBhWFpwZEhsRGIyeE9ZVzFsSUQwZ1pHWXVZMjlzZFcxdWN5NW5aWFJWYm5WelpXUk9ZVzFsS0NkRGIyNXVaV04wYVhacGRIa2dLRTFEVENrbktUdGNibHh1SUNCamIyNXpkQ0JsYldKbFpGaERiMndnUFNCa1ppNWpiMngxYlc1ekxtRmtaRTVsZDBac2IyRjBLR1Z0WW1WeVpGaERiMnhPWVcxbEtUdGNiaUFnWlcxaVpXUllRMjlzTG1sdWFYUW9LR2twSUQwK0lISmxjeTVsYldKbFpGaGJhVjBwTzF4dUlDQmpiMjV6ZENCbGJXSmxaRmxEYjJ3Z1BTQmtaaTVqYjJ4MWJXNXpMbUZrWkU1bGQwWnNiMkYwS0dWdFltVnlaRmxEYjJ4T1lXMWxLVHRjYmlBZ1pXMWlaV1JaUTI5c0xtbHVhWFFvS0drcElEMCtJSEpsY3k1bGJXSmxaRmxiYVYwcE8xeHVJQ0JqYjI1emRDQmpiSFZ6ZEdWeVEyOXNJRDBnWkdZdVkyOXNkVzF1Y3k1aFpHUk9aWGRUZEhKcGJtY29ZMngxYzNSbGNrTnZiRTVoYldVcE8xeHVJQ0JqYkhWemRHVnlRMjlzTG1sdWFYUW9LR2twSUQwK0lISmxjeTVqYkhWemRHVnljMXRwWFM1MGIxTjBjbWx1WnlncEtUdGNiaUFnWTI5dWMzUWdZMngxYzNSbGNrTnZkVzUwWlhKRGIyd2dQU0JrWmk1amIyeDFiVzV6TG1Ga1pFNWxkMGx1ZENoamJIVnpkR1Z5UTI5MWJuUmxja052YkU1aGJXVXBPMXh1SUNCamJIVnpkR1Z5UTI5MWJuUmxja052YkM1cGJtbDBLQ2hwS1NBOVBpQmpiSFZ6ZEdWeWMwTnZkVzUwWlhKYmNtVnpMbU5zZFhOMFpYSnpXMmxkWFNrN1hHNGdJR052Ym5OMElHTnZibTVsWTNScGRtbDBlVU52YkNBOUlHUm1MbU52YkhWdGJuTXVZV1JrVG1WM1NXNTBLR052Ym01bFkzUnBkbWwwZVVOdmJFNWhiV1VwTzF4dUlDQmpiMjV1WldOMGFYWnBkSGxEYjJ3dWFXNXBkQ2dvYVNrZ1BUNGdZMjl1Ym1WamRHbDJhWFI1VzJsZEtUdGNibHh1SUNBdkx5QmtaaTVqYjJ4MWJXNXpMbUZrWkU1bGQwWnNiMkYwS0dWdFltVnlaRmhEYjJ4T1lXMWxLUzVwYm1sMEtDaHBLU0E5UGlCeVpYTXVaVzFpWldSWVcybGRLVHRjYmlBZ0x5OGdaR1l1WTI5c2RXMXVjeTVoWkdST1pYZEdiRzloZENobGJXSmxjbVJaUTI5c1RtRnRaU2t1YVc1cGRDZ29hU2tnUFQ0Z2NtVnpMbVZ0WW1Wa1dWdHBYU2s3WEc0Z0lDOHZJR1JtTG1OdmJIVnRibk11WVdSa1RtVjNTVzUwS0dOc2RYTjBaWEpEYjNWdWRHVnlRMjlzVG1GdFpTa3VhVzVwZENnb2FTa2dQVDRnWTJ4MWMzUmxjbk5EYjNWdWRHVnlXM0psY3k1amJIVnpkR1Z5YzF0cFhWMHBPMXh1SUNBdkx5QmtaaTVqYjJ4MWJXNXpMbUZrWkU1bGQxTjBjbWx1WnloamJIVnpkR1Z5UTI5c1RtRnRaU2t1YVc1cGRDZ29hU2tnUFQ0Z2NtVnpMbU5zZFhOMFpYSnpXMmxkTG5SdlUzUnlhVzVuS0NrcE8xeHVJQ0J6WXk1d2NtOXdjeTU0UTI5c2RXMXVUbUZ0WlNBOUlHVnRZbVZ5WkZoRGIyeE9ZVzFsTzF4dUlDQnpZeTV3Y205d2N5NTVRMjlzZFcxdVRtRnRaU0E5SUdWdFltVnlaRmxEYjJ4T1lXMWxPMXh1SUNCell5NXdjbTl3Y3k1amIyeHZja052YkhWdGJrNWhiV1VnUFNCamJIVnpkR1Z5UTI5c1RtRnRaVHRjYmlBZ2MyTXVjSEp2Y0hNdWJXRnlhMlZ5UkdWbVlYVnNkRk5wZW1VZ1BTQTFPMXh1SUNCMFpYSnRhVzVoZEdWVGRXSXVkVzV6ZFdKelkzSnBZbVVvS1R0Y2JpQWdMeThnWTI5dWMzUWdjMk1nUFNCMGRpNXpZMkYwZEdWeVVHeHZkQ2g3ZURvZ1pXMWlaWEprV0VOdmJFNWhiV1VzSUhrNklHVnRZbVZ5WkZsRGIyeE9ZVzFsZlNrN1hHNGdJQzh2SUhOakxuQnliM0J6TG1OdmJHOXlRMjlzZFcxdVRtRnRaU0E5SUdOc2RYTjBaWEpEYjJ4T1lXMWxPMXh1SUNBdkx5QnpZeTV3Y205d2N5NXRZWEpyWlhKRVpXWmhkV3gwVTJsNlpTQTlJRFU3WEc0Z0lHTnZibk4wSUY5elkweHBibVZ6SUQwZ2JtVjNJRk5qWVhSMFpYSlFiRzkwVEdsdVpYTlNaVzVrWlhKbGNpaHpZeXdnWlcxaVpYSmtXRU52YkU1aGJXVXNJR1Z0WW1WeVpGbERiMnhPWVcxbExGeHVJQ0FnSUh0bWNtOXRPaUJ5WlhNdWFYTWdZWE1nWVc1NUxDQjBiem9nY21WekxtcHpJR0Z6SUdGdWVTd2daSEpoZDBGeWNtOTNjem9nWm1Gc2MyVXNJRzl3WVdOcGRIazZJREF1TXl3Z2MydHBjRTExYkhScFRHbHVaVU5oYkdOMWJHRjBhVzl1T2lCMGNuVmxmU3hjYmlBZ0lDQlRZMkYwZEdWeVVHeHZkRU4xY25KbGJuUk1hVzVsVTNSNWJHVXVibTl1WlNrN1hHNGdJSFZwTG5ObGRGVndaR0YwWlVsdVpHbGpZWFJ2Y2loell5NXliMjkwTENCbVlXeHpaU2s3WEc0Z0lDOHZJSE5qTG1Oc2IzTmxLQ2s3WEc0Z0lDOHZJR052Ym5OMElITmpUR2x1WlhOV2FXVjNaWElnUFNCdVpYY2dVMk5oZEhSbGNsQnNiM1JYYVhSb1RHbHVaWE1vYzJNc0lISmxjeTVwY3l3Z2NtVnpMbXB6TENCbGJXSmxjbVJZUTI5c1RtRnRaU3dnWlcxaVpYSmtXVU52YkU1aGJXVXBPMXh1SUNBdkx5QjBkaTVoWkdSV2FXVjNaWElvYzJOTWFXNWxjMVpwWlhkbGNpazdYRzRnSUhKbGRIVnliaUI3YzJNc0lHVnRZbVZrV0VOdmJDd2daVzFpWldSWlEyOXNMQ0JqYkhWemRHVnlRMjlzTENCamJIVnpkR1Z5UTI5MWJuUmxja052YkN3Z1kyOXVibVZqZEdsMmFYUjVRMjlzZlR0Y2JuMWNibHh1SWwxOSIsImV4cG9ydCAqIGZyb20gJy4vbWFyY292LWNsdXN0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTUNMV29ya2VyKGRhdGEsIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpc3RhbmNlRm5zLCBkaXN0YW5jZUZuQXJncywgbWF4SXRlcmF0aW9ucyA9IDEwLCB1c2VXZWJHUFUgPSBmYWxzZSwgaW5mbGF0ZSA9IDIpIHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJ21jbC13b3JrZXInLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBkYXRhLCB0aHJlc2hvbGQsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBkaXN0YW5jZUZucyxcbiAgICAgICAgZGlzdGFuY2VGbkFyZ3MsIG1heEl0ZXJhdGlvbnMsIHVzZVdlYkdQVSwgaW5mbGF0ZSB9KTtcbiAgICBsZXQgcmVzb2x2ZUY7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzb2x2ZUYgPSByZXNvbHZlO1xuICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHdvcmtlci50ZXJtaW5hdGUoKSwgMTAwKTtcbiAgICAgICAgICAgIHJlc29sdmUoZXZlbnQuZGF0YS5yZXMpO1xuICAgICAgICB9O1xuICAgICAgICB3b3JrZXIub25lcnJvciA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3b3JrZXIudGVybWluYXRlKCksIDEwMCk7XG4gICAgICAgICAgICByZWplY3QoZXZlbnQpO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHRlcm1pbmF0ZSA9ICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmVGKG51bGwpO1xuICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4geyBwcm9taXNlLCB0ZXJtaW5hdGUgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SnBibVJsZUM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkhRU3hqUVVGakxHdENRVUZyUWl4RFFVRkRPMEZCUTJwRExHTkJRV01zVTBGQlV5eERRVUZETzBGQlJYaENMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zU1VGQllTeEZRVUZGTEZOQlFXbENMRVZCUXpsRUxFOUJRV2xDTEVWQlFVVXNhVUpCUVRSRExFVkJReTlFTEZkQlFUSkNMRVZCUVVVc1kwRkJjVUlzUlVGQlJTeG5Ra0ZCZDBJc1JVRkJSU3hGUVVNNVJTeFpRVUZ4UWl4TFFVRkxMRVZCUVVVc1ZVRkJhMElzUTBGQlF6dEpRVU12UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTJ4RkxFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCYVVJc1JVRkJSU3hYUVVGWE8xRkJRekZGTEdOQlFXTXNSVUZCUlN4aFFVRmhMRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTTdTVUZEZEVRc1NVRkJTU3hSUVVGclFpeERRVUZETzBsQlEzWkNMRTFCUVUwc1QwRkJUeXhIUVVGSExFbEJRVWtzVDBGQlR5eERRVWQwUWl4RFFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdFJRVU55UWl4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8xRkJRMjVDTEUxQlFVMHNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJUdFpRVU16UWl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRekZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6RkNMRU5CUVVNc1EwRkJRenRSUVVOR0xFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSVHRaUVVONlFpeFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUXpGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTm9RaXhEUVVGRExFTkJRVU03U1VGRFNpeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTk1MRTFCUVUwc1UwRkJVeXhIUVVGSExFZEJRVWNzUlVGQlJUdFJRVU55UWl4SlFVRkpPMWxCUTBZc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlEyWXNUVUZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xTkJRM0JDTzFGQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVN1dVRkRWaXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTJ4Q08wbEJRMGdzUTBGQlF5eERRVUZETzBsQlEwWXNUMEZCVHl4RlFVRkRMRTlCUVU4c1JVRkJSU3hUUVVGVExFVkJRVU1zUTBGQlF6dEJRVU01UWl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WVhSeWFYZ3ZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdExibTkzYmsxbGRISnBZM045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTW5PMXh1WEc1bGVIQnZjblFnS2lCbWNtOXRJQ2N1TDIxaGNtTnZkaTFqYkhWemRHVnlKenRjYm1WNGNHOXlkQ0FxSUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTNKbFlYUmxUVU5NVjI5eWEyVnlLR1JoZEdFNklHRnVlVnRkVzEwc0lIUm9jbVZ6YUc5c1pEb2diblZ0WW1WeUxGeHVJQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYU3dnWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlE2SUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFzWEc0Z0lHUnBjM1JoYm1ObFJtNXpPaUJMYm05M2JrMWxkSEpwWTNOYlhTd2daR2x6ZEdGdVkyVkdia0Z5WjNNNklHRnVlVnRkTENCdFlYaEpkR1Z5WVhScGIyNXpPaUJ1ZFcxaVpYSWdQU0F4TUN4Y2JpQWdkWE5sVjJWaVIxQlZPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVXNJR2x1Wm14aGRHVTZJRzUxYldKbGNpQTlJRElwSUh0Y2JpQWdZMjl1YzNRZ2QyOXlhMlZ5SUQwZ2JtVjNJRmR2Y210bGNpaHVaWGNnVlZKTUtDZHRZMnd0ZDI5eWEyVnlKeXdnYVcxd2IzSjBMbTFsZEdFdWRYSnNLU2s3WEc0Z0lIZHZjbXRsY2k1d2IzTjBUV1Z6YzJGblpTaDdaR0YwWVN3Z2RHaHlaWE5vYjJ4a0xDQjNaV2xuYUhSekxDQmhaMmR5WldkaGRHbHZiazFsZEdodlpDd2daR2x6ZEdGdVkyVkdibk1zWEc0Z0lDQWdaR2x6ZEdGdVkyVkdia0Z5WjNNc0lHMWhlRWwwWlhKaGRHbHZibk1zSUhWelpWZGxZa2RRVlN3Z2FXNW1iR0YwWlgwcE8xeHVJQ0JzWlhRZ2NtVnpiMngyWlVZNklFWjFibU4wYVc5dU8xeHVJQ0JqYjI1emRDQndjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlU4ZTF4dUlDQWdJR05zZFhOMFpYSnpPaUJ1ZFcxaVpYSmJYU3dnWlcxaVpXUllPaUJHYkc5aGRETXlRWEp5WVhrc0lHVnRZbVZrV1RvZ1JteHZZWFF6TWtGeWNtRjVMRnh1SUNBZ0lDQnBjem9nVldsdWRETXlRWEp5WVhrc0lHcHpPaUJWYVc1ME16SkJjbkpoZVZ4dUlDQWdJSDArS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lISmxjMjlzZG1WR0lEMGdjbVZ6YjJ4MlpUdGNiaUFnSUNBZ0lIZHZjbXRsY2k1dmJtMWxjM05oWjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYzJWMFZHbHRaVzkxZENnb0tTQTlQaUIzYjNKclpYSXVkR1Z5YldsdVlYUmxLQ2tzSURFd01DazdYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9aWFpsYm5RdVpHRjBZUzV5WlhNcE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIZHZjbXRsY2k1dmJtVnljbTl5SUQwZ0tHVjJaVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvS0NrZ1BUNGdkMjl5YTJWeUxuUmxjbTFwYm1GMFpTZ3BMQ0F4TURBcE8xeHVJQ0FnSUNBZ0lDQnlaV3BsWTNRb1pYWmxiblFwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5S1R0Y2JpQWdZMjl1YzNRZ2RHVnliV2x1WVhSbElEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQnlaWE52YkhabFJpaHVkV3hzS1R0Y2JpQWdJQ0FnSUhkdmNtdGxjaTUwWlhKdGFXNWhkR1VvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLR1VwTzF4dUlDQWdJSDFjYmlBZ2ZUdGNiaUFnY21WMGRYSnVJSHR3Y205dGFYTmxMQ0IwWlhKdGFXNWhkR1Y5TzF4dWZWeHVJbDE5Il0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJqb2luIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwialN0YXQiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsY1JkeCIsIm4iLCJtIiwidmFsIiwicG93IiwiTE9HMTBFIiwiaXNBcnJheSIsImFyZyIsImNhbGwiLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJfaW5pdCIsInJldFplcm8iLCJyZXRPbmUiLCJyZXRJZGVudCIsImoiLCJmbiIsInNlcSIsInRvQXJyYXkiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9WZWN0b3IiLCJfcmFuZG9tX2ZuIiwicmFuZG9tIiwic2V0UmFuZG9tIiwiVHlwZUVycm9yIiwiZXh0ZW5kIiwib2JqIiwicm93cyIsImNvbHMiLCJkaW1lbnNpb25zIiwicm93IiwiaW5kZXgiLCJyb3dhIiwiY29sIiwic3VibWF0IiwiYXJhbmdlIiwiZm9yRWFjaCIsImluZCIsImNvbHVtbiIsImNvbGEiLCJhIiwiZGlhZyIsIm5yb3ciLCJyZXMiLCJhbnRpZGlhZyIsInRyYW5zcG9zZSIsIm9iakFyciIsInRvQWx0ZXIiLCJuY29sIiwiY3VtcmVkdWNlIiwiYWx0ZXIiLCJjcmVhdGUiLCJ6ZXJvcyIsIm9uZXMiLCJyYW5kIiwiaWRlbnRpdHkiLCJzeW1tZXRyaWMiLCJjbGVhciIsImNudCIsImhpdmFsIiwic3RlcCIsImN1cnJlbnQiLCJzdGFydCIsImVuZCIsInJsIiwiX3NsaWNlIiwiY29weSIsInJjU2xpY2UiLCJjb2xTbGljZSIsInJvd1NsaWNlIiwic2xpY2VBc3NpZ24iLCJBIiwiQiIsIm5sIiwibWwiLCJkaWFnb25hbCIsImRpYWdBcnJheSIsIm1hdCIsInQiLCJqUHJvdG8iLCJzb3J0Iiwic3BsaWNlIiwiZnVuY3MiLCJwYXNzZnVuYyIsInJlc3VsdHMiLCJzcGxpdCIsImFzY051bSIsImNsaXAiLCJzdW0iLCJzdW1zcXJkIiwic3Vtc3FlcnIiLCJ0bXAiLCJtZWFuIiwic3Vtcm93IiwicHJvZHVjdCIsInByb2QiLCJsb3ciLCJoaWdoIiwidW5pcXVlIiwiaGFzaCIsIl9hcnIiLCJtZWFuc3FlcnIiLCJnZW9tZWFuIiwibG9ncyIsIm1lYW5PZkxvZ3MiLCJleHAiLCJtZWRpYW4iLCJhcnJsZW4iLCJjdW1zdW0iLCJjdW1wcm9kIiwiZGlmZiIsImRpZmZzIiwiYXJyTGVuIiwicmFuayIsImRpc3RpbmN0TnVtYmVycyIsIm51bWJlckNvdW50cyIsIm51bWJlciIsInNvcnRlZERpc3RpbmN0TnVtYmVycyIsIm51bWJlclJhbmtzIiwiY3VycmVudFJhbmsiLCJjb3VudCIsIm1vZGUiLCJtYXhDb3VudCIsIm51bU1heENvdW50IiwibW9kZV9hcnIiLCJyYW5nZSIsInZhcmlhbmNlIiwiZmxhZyIsInBvb2xlZHZhcmlhbmNlIiwicmVkdWNlIiwic2FtcGxlcyIsImRldmlhdGlvbiIsImRldiIsInN0ZGV2Iiwic3FydCIsInBvb2xlZHN0ZGV2IiwibWVhbmRldiIsImFicyIsIm1lZGRldiIsImNvZWZmdmFyIiwicXVhcnRpbGVzIiwicm91bmQiLCJxdWFudGlsZXMiLCJxdWFudGlsZXNBcnJheSIsImFscGhhcCIsImJldGFwIiwicCIsImFsZXBoIiwiZ2FtbWEiLCJzb3J0ZWRBcnJheSIsInF1YW50aWxlVmFscyIsImZsb29yIiwicGVyY2VudGlsZSIsImV4Y2x1c2l2ZSIsInJlYWxJbmRleCIsInBhcnNlSW50IiwiZnJhYyIsInBlcmNlbnRpbGVPZlNjb3JlIiwic2NvcmUiLCJraW5kIiwidmFsdWUiLCJjb3VudGVyIiwic3RyaWN0IiwiaGlzdG9ncmFtIiwiYmluQ250IiwiZmlyc3QiLCJiaW5XaWR0aCIsImJpbnMiLCJjb3ZhcmlhbmNlIiwiYXJyMSIsImFycjIiLCJ2IiwiYXJyMUxlbiIsInNxX2RldiIsImNvcnJjb2VmZiIsInNwZWFybWFuY29lZmYiLCJzdGFuTW9tZW50IiwibXUiLCJzaWdtYSIsInNrZXdTdW0iLCJza2V3bmVzcyIsImt1cnRvc2lzIiwiZnVsbGJvb2wiLCJ0bXB0aGlzIiwiY2FsbGJhY2tGdW5jdGlvbiIsImFyZ3NUb1Bhc3MiLCJjdXJyaWVkRnVuY3Rpb24iLCJ2ZWN0b3IiLCJnYW1tYWxuIiwieHgiLCJ5IiwiY29mIiwic2VyIiwibG9nZ2FtIiwieDAiLCJ4MiIsInhwIiwiZ2wiLCJnbDAiLCJQSSIsImdhbW1hZm4iLCJ6IiwieWkiLCJxIiwiZmFjdCIsInhkZW4iLCJ4bnVtIiwiSW5maW5pdHkiLCJzaW4iLCJnYW1tYXAiLCJsb3dSZWdHYW1tYSIsImFuIiwiYWxuIiwiYXAiLCJkZWwiLCJkIiwiaCIsIklUTUFYIiwiTmFOIiwiZmFjdG9yaWFsbG4iLCJmYWN0b3JpYWwiLCJjb21iaW5hdGlvbiIsImNvbWJpbmF0aW9ubG4iLCJwZXJtdXRhdGlvbiIsImJldGFmbiIsImJldGFsbiIsImJldGFjZiIsIm0yIiwiYWEiLCJmcG1pbiIsInFhYiIsInFhcCIsInFhbSIsImdhbW1hcGludiIsInBwIiwibG5hMSIsImFmYWMiLCJhMSIsImdsbiIsImVyZiIsInR5IiwiaXNuZWciLCJkZCIsImVyZmMiLCJlcmZjaW52IiwiaWJldGFpbnYiLCJsbmEiLCJsbmIiLCJhbCIsInciLCJiMSIsImliZXRhIiwiYnQiLCJyYW5kbiIsInJhbmRnIiwic2hhcGUiLCJhMiIsIm9hbHBoIiwiYmV0aW5jIiwiZXBzIiwiYzkiLCJhMCIsImIwIiwibTkiLCJ0dWtleVdwcm9iIiwicnIiLCJjYyIsInhsZWciLCJhbGVnIiwicXNxeiIsIndpbmNyIiwicHJfdyIsIm5vcm1hbCIsImNkZiIsImJsYiIsImJpbmMiLCJidWIiLCJlaW5zdW0iLCJjYzEiLCJ3aSIsImVsc3VtIiwiamoiLCJhYyIsInFleHBvIiwicmluc3VtIiwiZiIsIl9hIiwiX2IiLCJfYyIsIm5ld3RoaXMiLCJzYW1wbGUiLCJ2YWxzIiwiZm5mdW5jIiwiYmV0YSIsInBkZiIsImFscGhhIiwiaW52IiwiY2VudHJhbEYiLCJkZjEiLCJkZjIiLCJiaW5vbWlhbCIsImNhdWNoeSIsImxvY2FsIiwic2NhbGUiLCJhdGFuIiwidGFuIiwiY2hpc3F1YXJlIiwiZG9mIiwiZXhwb25lbnRpYWwiLCJyYXRlIiwiaW52Z2FtbWEiLCJrdW1hcmFzd2FteSIsIkVycm9yIiwibG9nbm9ybWFsIiwibm9uY2VudHJhbHQiLCJuY3AiLCJzdHVkZW50dCIsInRvbCIsImZsaXAiLCJwcm9iIiwibGFzdHZhbHVlIiwic3RkIiwicGFyZXRvIiwiU1FSVDIiLCJkb2YyIiwid2VpYnVsbCIsInVuaWZvcm0iLCJiZXRhY2RmIiwicyIsIm5lZ2JpbiIsInIiLCJoeXBnZW9tIiwiTiIsInNjYWxlZFBERiIsInNhbXBsZXNEb25lIiwic2NhbGVkQ0RGIiwiZmFjdG9yIiwicG9pc3NvbiIsImwiLCJzdW1hcnIiLCJzYW1wbGVTbWFsbCIsIkwiLCJzYW1wbGVMYXJnZSIsIlUiLCJWIiwic2xhbSIsImxvZ2xhbSIsImludmFscGhhIiwidnIiLCJ1cyIsImxhbSIsInRyaWFuZ3VsYXIiLCJhcmNzaW5lIiwiYXNpbiIsImNvcyIsImxhcGxhY2UiLCJ0dWtleSIsIm5tZWFucyIsImRmIiwieGxlZ3EiLCJhbGVncSIsIk51bWJlciIsImlzRmluaXRlIiwidWxlbiIsImYyIiwiZjJsZiIsImYyMSIsImZmNCIsImFucyIsIm90c3VtIiwidHdhMSIsInQxIiwieDEiLCJwcyIsInR1a2V5UWludiIsInZhbHgwIiwidmFseDEiLCJpdGVyIiwiaXNVc2FibGUiLCJhZGQiLCJzdWJ0cmFjdCIsImRpdmlkZSIsIm11bHRpcGx5IiwibnJlc2NvbHMiLCJyZXNjb2xzIiwib3V0ZXIiLCJkb3QiLCJsZWZ0IiwicmlnaHQiLCJub3JtIiwibm5vcm0iLCJpc05hTiIsImFuZ2xlIiwiYWNvcyIsImF1ZyIsIm5ld2FyciIsImdhdXNzX2pvcmRhbiIsImRldCIsImRldGVybWluYW50Iiwic3VibWF0cml4Iiwic2lnbiIsImdhdXNzX2VsaW1pbmF0aW9uIiwibWF1ZyIsInBpdm90IiwidGVtcCIsInkyIiwibWF4cm93IiwidHJpYVVwU29sdmUiLCJwYXJ0cyIsIm1hdHJpeF9tb2RlIiwidHJpYUxvd1NvbHZlIiwibHUiLCJSIiwiY2hvbGVza3kiLCJUIiwiZ2F1c3NfamFjb2JpIiwieHYiLCJ4ayIsImdhdXNzX3NlaWRlbCIsIlNPUiIsImhvdXNlaG9sZGVyIiwiUVIiLCJsc3RzcSIsImFycmF5X21vZGUiLCJRIiwiYXR0cnMiLCJRMSIsIlJJIiwiSSIsIkFqIiwiY0FpIiwiSWoiLCJjSWkiLCJSX0kiLCJRMiIsImphY29iaSIsIm1heGltIiwidGhldGEiLCJjb25kaXRpb24iLCJldiIsInJ1bmdla3V0dGEiLCJ0X2oiLCJ1X2oiLCJvcmRlciIsImsxIiwiazIiLCJrMyIsInJvbWJlcmciLCJoMSIsImciLCJyaWNoYXJkc29uIiwiWCIsInBvcyIsInkxIiwiaF9taW4iLCJzaW1wc29uIiwiaGVybWl0ZSIsIkYiLCJkRiIsImRsIiwibGFncmFuZ2UiLCJjdWJpY19zcGxpbmUiLCJzcSIsImdhdXNzX3F1YWRyYXR1cmUiLCJQQ0EiLCJ0ZW1wMSIsIkJ0IiwiRCIsInRlbXAyIiwiWSIsIkMiLCJWdCIsImRpZmZlcmVuY2VPZlByb3BvcnRpb25zIiwicDEiLCJuMSIsInAyIiwibjIiLCJwb29sZWQiLCJ6c2NvcmUiLCJ6dGVzdCIsInNpZGVzIiwidHNjb3JlIiwidHRlc3QiLCJhbm92YWZzY29yZSIsImV4cFZhciIsInNhbXBNZWFuIiwic2FtcFNhbXBNZWFuIiwidG1wYXJncyIsInVuZXhwVmFyIiwiYW5vdmFmdGVzdCIsImZ0ZXN0IiwiZnNjb3JlIiwiYW5vdmFmdGVzIiwicXNjb3JlIiwibWVhbjEiLCJtZWFuMiIsInNkIiwicXRlc3QiLCJ0dWtleWhzZCIsImFycmF5cyIsIm1lYW5zIiwibm9ybWFsY2kiLCJjaGFuZ2UiLCJ0Y2kiLCJzaWduaWZpY2FudCIsInB2YWx1ZSIsIm9uZVNpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMiLCJ0d29TaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zIiwibW9kZWxzIiwib2xzIiwiZW5kb2ciLCJleG9nIiwibm9icyIsImRmX21vZGVsIiwiZGZfcmVzaWQiLCJjb2VmIiwicHJlZGljdCIsInJlc2lkIiwieWJhciIsIlNTRSIsIlNTUiIsIlNTVCIsIlIyIiwidF90ZXN0IiwibW9kZWwiLCJ2YXJfY291bnQiLCJzdWJNb2RlbExpc3QiLCJlbmRvZ19pbmRleCIsImV4b2dfaW5kZXgiLCJmaWx0ZXIiLCJzaWdtYUhhdCIsInNlQmV0YUhhdCIsIm1vZCIsInRTdGF0aXN0aWMiLCJwVmFsdWUiLCJsZWZ0cHBmIiwiaW50ZXJ2YWw5NSIsInNlIiwiRl9zdGF0aXN0aWMiLCJGX3Rlc3QiLCJhZGp1c3RfUjIiLCJidWlsZHhtYXRyaXgiLCJtYXRyaXhSb3dzIiwiYnVpbGRkeG1hdHJpeCIsImJ1aWxkanhtYXRyaXgiLCJqTWF0IiwicGFzcyIsImJ1aWxkeW1hdHJpeCIsImJ1aWxkanltYXRyaXgiLCJtYXRyaXhtdWx0IiwicmVncmVzcyIsImpNYXRYIiwiak1hdFkiLCJpbm5lcmludiIsInh0cmFuc3B4aW52IiwieHRyYW5zcCIsIm5leHQiLCJyZWdyZXNzdCIsImNvbXBpbGUiLCJqTWF0WUJhciIsInlCYXIiLCJ5QXZlcmFnZSIsImFub3ZhIiwicmVzaWR1YWxzIiwic3NyIiwibXNyIiwic3NlIiwibXNlIiwic3N0IiwibXN0IiwicjIiLCJmcmF0aW8iLCJybXNlIiwicjJhZGoiLCJzdGF0cyIsInNkcyIsInRzIiwiY292YXIiLCJ4dHJhbnNweCIsImlubmVyIiwibWF0cml4c3VidHJhY3QiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiaW5kZXhCeUlkZW50aWZpZXIiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJhcGkiLCJkb21BUEkiLCJ1cGRhdGUiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0Iiwic3R5bGUiLCJ0YXJnZXQiLCJzdHlsZVRhcmdldCIsInF1ZXJ5U2VsZWN0b3IiLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJnZXRUYXJnZXQiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlU3R5bGVFbGVtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiYW1kTyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJobWQiLCJjaGlsZHJlbiIsInByb3AiLCJoYXNPd25Qcm9wZXJ0eSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYmFzZVVSSSIsIm5jIiwiZ3JvayIsInVpIiwiREciLCJoZWFwTWFwIiwidHlwZU1hcCIsInNoaWZ0TWFwIiwidHlwZVRvQ29sdW1uQ3JlYXRvck1hcCIsIkNvbHVtbiIsImZyb21JbnQzMkFycmF5IiwiZnJvbUZsb2F0MzJBcnJheSIsIkFyZyIsImNvbXBsZW1lbnRBcnJPZlBhcmFtcyIsImFyck9mUGFyYW1zIiwiY29tcGxlbWVudEFyck9mVHlwZXMiLCJhcnJPZlR5cGVzIiwiYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIiLCJpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCIsInB1dERhdGFUb0J1ZmZlciIsImdldERhdGFGcm9tQnVmZmVyIiwiZnJlZUJ1ZmZlciIsIkFyZ0NvbHVtbiIsInRhcmdldFR5cGUiLCJ0b1VwZGF0ZSIsInN1cGVyIiwiYnVmIiwibnVtT2ZSb3dzIiwiX21hbGxvYyIsIkJZVEVTX1BFUl9FTEVNRU5UIiwiZ2V0UmF3RGF0YSIsImJ5dGVzIiwiX2ZyZWUiLCJBcmdOZXdDb2x1bW4iLCJjb2x1bW5DcmVhdG9yIiwiQXJnQ29sdW1ucyIsIm51bU9mQ29sdW1ucyIsIm51bU9mQnl0ZXMiLCJudW1PZkNvbHMiLCJjb2xEYXRhIiwiQXJnTmV3Q29sdW1ucyIsIlBhcmFtIiwiaW50Q29sdW1uIiwibmV3SW50Q29sdW1uIiwiaW50Q29sdW1ucyIsImNvbHVtbnMiLCJ0b0xpc3QiLCJuZXdJbnRDb2x1bW5zIiwiZmxvYXRDb2x1bW4iLCJuZXdGbG9hdENvbHVtbiIsImZsb2F0Q29sdW1ucyIsIm5ld0Zsb2F0Q29sdW1ucyIsImludCIsIlJldHVybiIsInRhYmxlRnJvbUNvbHVtbnMiLCJhcmdDb2x1bW5zIiwiRGF0YUZyYW1lIiwiZnJvbUNvbHVtbnMiLCJkb3VibGUiLCJhcmdDb2x1bW4iLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwidmFsMSIsInZhbDIiLCJmdW5jU3BlY2lmaWNhdGlvbiIsImRhdGFGcm9tV2ViV29ya2VyIiwiX2NhbGxSZXN1bHQiLCJjYWxsUmVzdWx0IiwiZnVuY1NwZWNpZmljYXRpb25BcmdzIiwiYXJnc0FmdGVyV2FzbUNhbGwiLCJuYW1lIiwibmFtZXMiLCJleHRyYWN0TmV3bHlDcmVhdGVkRGF0YSIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsImFycmF5VG9SZXR1cm4iLCJnZXRPdXRwdXQiLCJjbGVhck5ld2x5Q3JlYXRlZERhdGEiLCJDT01QX01JTiIsIlNBTVBMRVNfQ09VTlRfTUlOIiwiRkVBVFVSRVNfQ09VTlRfTUlOIiwiUEVSQ0VOVEFHRV9NSU4iLCJQRVJDRU5UQUdFX01BWCIsIk1BWF9FTEVNRU5UU19DT1VOVCIsIkNPTVBfUE9TSVRWRV9NRVMiLCJDT01QX0VYQ0VTUyIsIklOQ09SRVJSRUNUX01JTl9NQVhfTUVTIiwiSU5DT1JFUlJFQ1RfRkVBVFVSRVNfTUVTIiwiSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMiLCJJTkNPUkVSUkVDVF9QRVJDRU5UQUdFX01FUyIsIkRBVEFGUkFNRV9JU19UT09fQklHX01FUyIsIlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFX01FUyIsImNoZWNrQ29sdW1uVHlwZSIsImNoZWNrTWlzc2luZ1ZhbHMiLCJtaXNzaW5nVmFsdWVDb3VudCIsImZlYXR1cmVzIiwiY29tcG9uZW50cyIsImNoZWNrRGltZW5zaW9uUmVkdWNlcklucHV0cyIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwiZG9uZSIsIlNWTV9HRU5fRkVBVFVSRVNfSU5ERVgiLCJTVk1fR0VOX0xBQkVMU19JTkRFWCIsIlNWTV9GRUFUVVJFX05BTUUiLCJTVk1fTEFCRUxfTkFNRSIsInRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24iLCJrZXJuZWwiLCJrZXJuZWxQYXJhbXMiLCJzYW1wbGVzQ291bnQiLCJmZWF0dXJlc0NvdW50IiwidmlvbGF0b3JzUGVyY2VudGFnZSIsImNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIiwia2VybmVsUGFyYW1zQ29sIiwiX291dHB1dCIsIl9wcm9taXNlIiwiYXN5bmMiLCJ3b3JrZXIiLCJXb3JrZXIiLCJVUkwiLCJwb3N0TWVzc2FnZSIsIkVEQSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIl9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlciIsIl9yZXN1bHQiLCJfZXJyb3IiLCJMSU5FQVIiLCJQT0xZTk9NSUFMIiwiUkJGIiwiU0lHTU9JRCIsIkNPTkZVU0lPTl9NQVRSX1NJWkUiLCJOT1JNQUxJWkVEX0RBVEFfSU5ERVgiLCJNRUFOU19JTkRFWCIsIlNURF9ERVZTX0lOREVYIiwiTU9ERUxfUEFSQU1TX0lOREVYIiwiTU9ERUxfV0VJR0hUU19JTkRFWCIsIlBSRURJQ1RFRF9MQUJFTFNfSU5ERVgiLCJDT1JSRUNUTkVTU19JTkRFWCIsIkNPTkZVU0lPTl9NQVRSSVhfSU5ERVgiLCJUUlVFX1BPU0lUSVZFX0lOREVYIiwiRkFMU0VfTkVHQVRJVkVfSU5ERVgiLCJGQUxTRV9QT1NJVElWRV9JTkRFWCIsIlRSVUVfTkVHQVRJVkVfSU5ERVgiLCJSQkZfU0lHTUFfSU5ERVgiLCJQT0xZTk9NSUFMX0NfSU5ERVgiLCJQT0xZTk9NSUFMX0RfSU5ERVgiLCJTSUdNT0lEX0tBUFBBX0lOREVYIiwiU0lHTU9JRF9USEVUQV9JTkRFWCIsIkdBTU1BX0lORklNVU1fTElNSVQiLCJSQkZfU0lHTUFfSU5GSU1VTV9MSU1JVCIsIlBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQiLCJXUk9OR19HQU1NQV9NRVNTQUdFIiwiV1JPTkdfUkJGX1NJR01BX01FU1NBR0UiLCJXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfRF9NRVNTQUdFIiwiV1JPTkdfS0VSTkVMX01FU1NBR0UiLCJXUk9OR19MQUJFTFNfTUVTU0FHRSIsIkxBQkVMUyIsIlBSRURJQ1RFRCIsIkNPUlJFQ1RORVNTIiwiQ09ORlVTSU9OX01BVFJJWF9OQU1FIiwiTUVBTiIsIlNURF9ERVYiLCJNT0RFTF9QQVJBTVNfTkFNRSIsIk1PREVMX1dFSUdIVFNfTkFNRSIsIkdBTU1BIiwiS0VSTkVMIiwiS0VSTkVMX1BBUkFNUyIsIktFUk5FTF9QQVJBTV8xIiwiS0VSTkVMX1BBUkFNXzIiLCJGRUFUVVJFU19DT1VOVF9OQU1FIiwiVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FIiwiVFJBSU5fRVJST1IiLCJLRVJORUxfVFlQRV9UT19OQU1FX01BUCIsIlNFTlNJVElWSVRZIiwiU1BFQ0lGSUNJVFkiLCJCQUxBTkNFRF9BQ0NVUkFDWSIsIlBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUiLCJORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiUFJFRElDVElPTiIsIkJZVEVTIiwiSU5UU19DT1VOVCIsIktFUl9QQVJBTVNfQ09VTlQiLCJNT0RFTF9LRVJORUxfSU5ERVgiLCJTQU1QTEVTX0NPVU5UX0lOREVYIiwiRkVBVFVSRVNfQ09VTlRfSU5ERVgiLCJJTklUX1ZBTFVFIiwiTFNfU1ZNX0FERF9DT05TVCIsImdldFRyYWluZWRNb2RlbCIsImh5cGVycGFyYW1ldGVycyIsInByZWRpY3RDb2x1bW4iLCJsYWJlbHMiLCJieU5hbWUiLCJjYXRlZ29yaWVzIiwibGFiZWxOdW1lcmljIiwiZGF0YXNldCIsImNQYXJhbSIsImRQYXJhbSIsImNoZWNrSHlwZXJwYXJhbWV0ZXJzIiwia2VybmVsUGFyYW1zQXJyYXkiLCJrYXBwYSIsInRyYWluQ29scyIsIm1vZGVsUGFyYW1zQ291bnQiLCJwcmVjb21wdXRlZFdlaWdodHNDb3VudCIsImNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQiLCJfdHJhaW5BbmRBbmFseXplTFNTVk1JbldlYldvcmtlciIsInRyYWluR2FtbWEiLCJrZXJuZWxUeXBlIiwidHJhaW5MYWJlbHMiLCJub3JtYWxpemVkVHJhaW5EYXRhIiwic3RkRGV2cyIsIm1vZGVsUGFyYW1zIiwibW9kZWxXZWlnaHRzIiwicHJlZGljdGVkTGFiZWxzIiwiY29ycmVjdG5lc3MiLCJjb25mdXNpb25NYXRyaXgiLCJ0cmFpbkVycm9yIiwidHJhaW5TYW1wbGVzQ291bnQiLCJUUCIsIlROIiwiRlAiLCJGTiIsIlRQUiIsIlROUiIsIlBQViIsIk5QViIsIkFDQyIsIkJBIiwic2Vuc2l0aXZpdHkiLCJzcGVjaWZpY2l0eSIsImJhbGFuY2VkQWNjdXJhY3kiLCJwb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSIsIm5lZ2F0aXZlUHJlZGljaXR2ZVZhbHVlIiwiZXZhbHVhdGVBY2N1cmFjeSIsInRyYWluQW5kQW5hbHl6ZU1vZGVsIiwicmVhbExhYmVscyIsInNob3dUcmFpblJlcG9ydCIsInBhY2tlZE1vZGVsIiwiZ2V0VW5wYWNrZWRNb2RlbCIsIm1vZGVsSW5mbyIsInJvb3QiLCJnZXRQYWNrZWRNb2RlbCIsImRhdGFDb2xzIiwicmVhbExhYmVsc0J1ZmZlciIsInRvQnl0ZUFycmF5IiwicmVhbExhYmVsc1NpemUiLCJtb2RlbEluZm9CdWZmZXIiLCJnZXRNb2RlbEluZm8iLCJtb2RlbEluZm9TaXplIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJsYWJlbHNDb3VudCIsImxhYmVsc0J5dGVzQ291bnQiLCJtb2RlbEluZm9CeXRlc1NpemUiLCJnZXRQcmVkaWN0aW9uIiwicmVzTnVtZXJpYyIsIm5vcm1hbGl6ZWREYXRhIiwicHJlY29tcHV0ZWRXZWlnaHRzIiwidGFyZ2V0RGF0YSIsIl9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyIiwiaXNBcHBsaWNhYmxlU1ZNIiwiUExTX0FOQUxZU0lTIiwiRVJST1JfTVNHIiwiVElUTEUiLCJISU5UIiwiTElOSyIsIkNPTVBPTkVOVFMiLCJSRVNVTFRfTkFNRVMiLCJXQVNNX09VVFBVVF9JRFgiLCJJTlQiLCJUSU1FT1VUIiwiUkFESVVTIiwiTElORV9XSURUSCIsIlhfQ09PUkQiLCJZX0NPT1JEIiwiQ09MT1IiLCJERU1PX0lOVFJPX01EIiwiREVNT19SRVNVTFRTIiwiY2FwdGlvbiIsIk1PREVMIiwidGV4dCIsIlNDT1JFUyIsIkxPQURJTkdTIiwiUkVHUl9DT0VGUyIsIkVYUExfVkFSIiwiREVNT19SRVNVTFRTX01EIiwiTVZBIiwiZ2V0UGxzQW5hbHlzaXMiLCJpbnB1dCIsInRhYmxlIiwiY29tcG9uZW50c0NvdW50IiwicHJlZGljdGlvbiIsInJlZ3Jlc3Npb25Db2VmZmljaWVudHMiLCJSRUdSX0NPRUZGUyIsInRTY29yZXMiLCJUX1NDT1JFUyIsInVTY29yZXMiLCJVX1NDT1JFUyIsInhMb2FkaW5ncyIsIlhfTE9BRElOR1MiLCJ5TG9hZGluZ3MiLCJZX0xPQURJTkdTIiwicnVuTVZBIiwiYW5hbHlzaXNUeXBlIiwiTk9fREYiLCJyb3dDb3VudCIsIkVNUFRZX0RGIiwibnVtQ29sTmFtZXMiLCJudW1Db2xzIiwic3RyQ29scyIsImlzVmFsaWROdW1lcmljIiwiTk9fQ09MUyIsIk9ORV9DT0wiLCJwcmVkaWN0SW5wdXQiLCJQUkVESUNUIiwidXBkYXRlSXB1dHMiLCJzZXRUb29sdGlwIiwiZmVhdHVyZXNJbnB1dCIsIlVTSU5HIiwiYXZhaWxhYmxlIiwib25JbnB1dCIsIkZFQVRVUkVTIiwiREVGQVVMVCIsImNvbXBvbmVudHNJbnB1dCIsImlucHV0VHlwZSIsImRlZmF1bHRWYWx1ZSIsInNob3dQbHVzTWludXMiLCJNSU4iLCJkbGdUaXRsZSIsImRsZ0hlbHBVcmwiLCJkbGdSdW5CdG5Ub29sdGlwIiwiQ09NUFVURV9DT01QT05FTlRTIiwiUExTIiwiZGxnIiwiZ2V0QnV0dG9uIiwiUlVOIiwiZGlzYWJsZWQiLCJuYW1lc0lucHV0cyIsIk5BTUVTIiwiaGlkZGVuIiwidGl0bGUiLCJoZWxwVXJsIiwiYWRkQnV0dG9uIiwiY2xvc2UiLCJwbHNDb2xzIiwiZmVhdHVyZXNOYW1lcyIsInByZWZpeCIsIlBSRUZJWCIsIlhTQ09SRSIsImdldFVudXNlZE5hbWUiLCJ2aWV3IiwiRkVBVFVSRSIsIlhMT0FESU5HIiwicHJlZCIsIlNVRkZJWCIsInByZWRpY3RWc1JlZmVyU2NhdHRlciIsImFkZFZpZXdlciIsInhDb2x1bW5OYW1lIiwieUNvbHVtbk5hbWUiLCJzaG93UmVncmVzc2lvbkxpbmUiLCJtYXJrZXJUeXBlIiwiaGVscCIsInJlZ3JDb2VmZnNCYXIiLCJzcGxpdENvbHVtbk5hbWUiLCJ2YWx1ZUNvbHVtbk5hbWUiLCJ2YWx1ZUFnZ3JUeXBlIiwiQ09FRkZTIiwic2hvd1ZhbHVlU2VsZWN0b3IiLCJzaG93U3RhY2tTZWxlY3RvciIsImxvYWRpbmdzU2NhdHRlciIsInNjb3JlTmFtZXMiLCJZU0NPUkUiLCJzY29yZXNTY2F0dGVyIiwic2hvd1ZpZXdlckZvcm11bGFMaW5lcyIsImxpbmVzIiwiYWRkTGluZSIsImZvcm11bGEiLCJyYWRpdXMiLCJ3aWR0aCIsInZpc2libGUiLCJjb2xvciIsIkNJUkNMRSIsInhOYW1lIiwiQVhJUyIsInlOYW1lIiwibWV0YSIsImZvcm11bGFMaW5lcyIsImFkZEFsbCIsInlFeHBsVmFycyIsImNvbXBOYW1lcyIsInhFeHBsVmFycyIsIkNPTVAiLCJjb21wIiwiQ09NUFMiLCJleHBsVmFyc0RGIiwiZXhwbFZhcnNCYXIiLCJFWFBMX1ZBUlMiLCJzaG93Q2F0ZWdvcnlTZWxlY3RvciIsIkRFTU8iLCJwYWdlcyIsInZpZXdlciIsInNob3dOZXh0VG8iLCJFWFBMT1JFIiwicGVyZm9ybU1WQSIsInNob3ciLCJjaGVja1NpZ25pZmljYW5jZUxldmVsIiwiSU5DT1JSRUNUX1NJR05JRklDQU5DRV9MRVZFTCIsImdldFZhcmlhbmNlIiwiSU5DT1JSRUNUX1NBTVBMRV9TSVpFIiwic3VtT2ZTcXVhcmVzIiwiYXJlVmFyc0VxdWFsIiwieERhdGEiLCJ5RGF0YSIsInhWYXIiLCJ5VmFyIiwiRmFjdG9yaXplZERhdGEiLCJ2YWx1ZXMiLCJjaGVja05vcm1hbGl0eSIsImlzTm9ybURpc3RyaWIiLCJOT05fRVFVQUxfRkFDVE9SU19WQUxVRVNfU0laRSIsInNldFN0YXRzIiwiaXNOb3JtYWwiLCJLIiwiY2F0Q291bnQiLCJzdW1zIiwic3Vtc09mU3F1YXJlcyIsInN1YlNhbXBsZVNpemVzIiwiZ2V0T25lV2F5QW5vdmEiLCJBTk9WQV9GQUlMRURfSlVTVF9PTkVfQ0FUIiwic3NUb3QiLCJzc0JuIiwic3NXbiIsImRmQm4iLCJkZlduIiwibXNCbiIsIm1zV24iLCJmU3RhdCIsImRmVG90IiwiX2NoZWNrTm9ybWFsaXR5IiwiX2FscGhhIiwiY2F0cyIsImZpbGwiLCJVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRSIsImdldERic2NhbldvcmtlciIsImVtYmVkWCIsImVtYmVkWSIsImVwc2lsb24iLCJtaW5QdHMiLCJlcnJvciIsImNsdXN0ZXJzIiwiZ3B1QWRhcHRlciIsImdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbiIsIm5hdmlnYXRvciIsImdwdSIsInJlcXVlc3RBZGFwdGVyIiwicmVxdWVzdEFkYXB0ZXJJbmZvIiwicmVwbGFjZUVtcHR5U3RyaW5nIiwiZGVzY3JpcHRpb24iLCJ2ZW5kb3IiLCJyZXBsYWNlbWVudCIsIldFQkdTTEFHR1JFR0FUSU9OIiwiV0VCR1BVRElTVEFOQ0UiLCJNYXRyaXhNYXRyaXhPcFR5cGUiLCJNYXRyaXhPcFR5cGUiLCJNYXRyaXhTY2FsYXJPcFR5cGUiLCJEaW1SZWR1Y3Rpb25NZXRob2RzIiwiRVVDTElERUFOIiwiTUFOSEFUVEFOIiwiSEFNTUlORyIsIlRBTklNT1RPIiwiTEVWRU5TVEVJTiIsIk5FRURMRU1BTl9XVU5TQ0giLCJNT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFIiwiU09LQUwiLCJDT1NJTkUiLCJBU1lNTUVUUklDIiwiRGlmZmVyZW5jZSIsIk9uZUhvdCIsIlNldCIsImRlZmF1bHRNQ0xPcHRpb25zIiwiTUNMX09QVElPTlNfVEFHIiwiREJTY2FuT3B0aW9ucyIsInVpTmFtZSIsInRvb2x0aXAiLCJCWVBBU1NfTEFSR0VfREFUQV9XQVJOSU5HIiwiU0hPV19TQ0FUVEVSUExPVF9QUk9HUkVTUyIsIkRpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIiwicnhqcyIsImxlYXJuaW5nUmF0ZSIsIm5FcG9jaHMiLCJuTmVpZ2hib3JzIiwic3ByZWFkIiwibWluRGlzdCIsInJhbmRvbVNlZWQiLCJ1c2VXZWJHUFUiLCJkaXNhYmxlVG9vbHRpcCIsImRlc2MiLCJkaXNhYmxlIiwicGVycGxleGl0eSIsIk11bHRpQ29sdW1uRGltUmVkdWN0aW9uRWRpdG9yIiwiZWRpdG9yU2V0dGluZ3MiLCJjb2x1bW5PcHRFZGl0b3JzIiwiY29sdW1uT3B0RWRpdG9yc1Jvb3QiLCJjb2x1bW5QYXJhbXNFZGl0b3JSb290Iiwid2VpZ2h0c0VkaXRvclJvb3QiLCJjb2x1bW5GdW5jdGlvbnNNYXAiLCJtZXRob2RzUGFyYW1zIiwiZGJTY2FuUGFyYW1zIiwibWV0aG9kU2V0dGluZ3NEaXZzIiwic3VwcG9ydGVkRnVuY3Rpb25zIiwibWV0aG9kU2V0dGluZ3NBbmNob3IiLCJwbG90RW1iZWRkaW5nc0lucHV0IiwiYWdncmVnYXRpb25NZXRob2RJbnB1dCIsIm9uQ29sdW1uc0NoYW5nZWQiLCJTdWJqZWN0IiwiY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uIiwidGFncyIsInNlbVR5cGVzIiwiZnJpZW5kbHlOYW1lIiwidHlwZXMiLCJ1bml0cyIsImRpc3RhbmNlRnVuY3Rpb25zIiwic2VtdHlwZSIsImluY2x1ZGVzIiwicG9zdFByb2Nlc3NpbmdFZGl0b3IiLCJQb3N0UHJvY2Vzc2luZ0Z1bmNFZGl0b3IiLCJ0YWJsZUlucHV0Iiwib25UYWJsZUlucHV0Q2hhbmdlZCIsInNldHRpbmdzT3BlbmVkIiwibWV0aG9kSW5wdXQiLCJjcmVhdGVBbGdvcml0aG1TZXR0aW5nc0RpdiIsIm1ldGhvZFNldHRpbmdzSWNvbiIsIml0IiwiY2xhc3NMaXN0IiwicHJlcGVuZCIsImFkZFBhbmUiLCJkaXNwbGF5Iiwia2V5cyIsImZ1bmNOYW1lIiwic2VtVHlwZVN1cHBvcnRlZCIsInNlbVR5cGUiLCJ0eXBlU3Vwb3J0ZWQiLCJ1bml0c1N1cHBvcnRlZCIsImdldFRhZyIsInN1cHBvcnRlZENvbE5hbWVzIiwiY29sdW1uc0lucHV0IiwiRGltUmVkdWN0aW9uQ29sdW1uRWRpdG9yIiwiZWRpdG9yc1Jvb3QiLCJtYXhIZWlnaHQiLCJvdmVyZmxvdyIsImVkaXRvciIsImFjY29yZGlvbkRpdiIsImRvdWJsZWRDb2xFZGl0b3JzIiwiXyIsImNvbE9wdEVkaXRvcnMiLCJwcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2IiwicGFyZW50RWxlbWVudCIsInNldFByb3BlcnR5IiwiZmlyZUNoYW5nZWQiLCJjb2x1bW5zSW5wdXRSb290IiwiZnJvbSIsInBhcmFtcyIsImFuY2hvciIsInBhcmVudCIsInBhcmFtIiwiZW5hYmxlZCIsImluc2VydEJlZm9yZSIsImFsZ29yaXRobU9wdGlvbnMiLCJhbGdvcml0aG1QYXJhbXMiLCJkYlNjYW5PcHRpb25zIiwiZGJTY2FuRXBzaWxvbiIsImRiU2Nhbk1pblB0cyIsImdldEVkaXRvciIsIm1pbldpZHRoIiwiY2xhc3NlcyIsImdldFBhcmFtcyIsIm1ldGhvZE5hbWUiLCJwcmVwcm9jZXNzaW5nRnVuY3Rpb25zIiwicHJlUHJvY2Vzc2luZ0Z1bmN0aW9uIiwiZGlzdGFuY2VNZXRyaWNzIiwic2ltaWxhcml0eU1ldHJpY0lucHV0Iiwid2VpZ2h0cyIsIndlaWdodCIsInByZXByb2Nlc3NpbmdGdW5jQXJncyIsInByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzIiwicGxvdEVtYmVkZGluZ3MiLCJjbHVzdGVyRW1iZWRkaW5ncyIsInBvc3RQcm9jZXNzaW5nRnVuY3Rpb24iLCJwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uQXJncyIsImFnZ3JlYWdncmVnYXRpb25NZXRob2QiLCJlZGl0b3JEaXYiLCJoYXNFeHRyYVNldHRpbmdzIiwiZnVuY3Rpb25zTWFwIiwibmVlZHNDb25maWd1cmF0aW9uIiwid2VpZ2h0SW5wdXQiLCJnZXRGdW5jTmFtZSIsInByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0IiwiaW5wdXRzIiwic3VwRiIsImZpbmQiLCJnZXRTaW1pbGFyaXR5TWV0cmljSW5wdXQiLCJwcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbiIsImNyZWF0ZVNldHRpbmdzRGl2IiwiY29sdW1uVGl0bGUiLCJzaW1pbGFyaXR5TWV0cmljSW5wdXRSb290IiwiZGlzdGFuY2VPcHRpb25zRGl2IiwicHJlRnVuYyIsInBhcmFtc0Zvcm0iLCJmYyIsInByZXBhcmUiLCJidWlsZEVkaXRvciIsImZJbnB1dCIsImlucHV0UGFyYW1zIiwiaW5wIiwicHJvcGVydHkiLCJvbkNoYW5nZWQiLCJhcHBlbmQiLCJtYXJnaW5Cb3R0b20iLCJwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcCIsIl9yb290IiwiX3Bvc3RQcm9jZXNzaW5nQXJncyIsIl9hcmdzRWxlbWVudCIsIl9zZXR0aW5nc09wZW5lZCIsIl9zZXR0aW5nc0ljb24iLCJkZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jIiwicG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0Iiwib25GdW5jdGlvbkNoYW5nZWQiLCJudWxsYWJsZSIsIkRJTUVOU0lPTkFMSVRZX1JFRFVDRVJfVEVSTUlOQVRFX0VWRU5UIiwiaXNOaWwiLCJnZXRFbWJlZGRpbmdWaWV3ZXJOYW1lIiwibWV0aG9kIiwiQ09QWV9TVUZGSVgiLCJLTk5fSU1QVVRFUiIsIlNVUFBPUlRFRF9DT0xVTU5fVFlQRVMiLCJnZXROdWxsVmFsdWUiLCJNRVRSSUNfVFlQRSIsIkRJU1RBTkNFX1RZUEUiLCJNSU5fTkVJR0hCT1JTIiwiYXJlVGhlcmVGYWlscyIsInRhcmdldENvbE5hbWVzIiwiZmVhdHVyZUNvbE5hbWVzIiwibWlzVmFsc0luZHMiLCJoYXMiLCJpbmRpY2VzIiwiZmFpbFRvSW1wdXRlIiwiZmVhdHVyZSIsImZlYXR1cmVJbmRzIiwicnVuS05OSW1wdXRlciIsImNvbHNXaXRoTWlzc2luZ1ZhbHMiLCJhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMiLCJhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzIiwiTWFwIiwibnVsbFZhbHVlIiwiZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzIiwiaW5QbGFjZSIsIklOX1BMQUNFIiwiaW5QbGFjZUlucHV0Iiwia2VlcEVtcHR5IiwiS0VFUF9FTVBUWSIsImtlZXBFbXB0eUlucHV0IiwibmVpZ2hib3JzIiwiTkVJR0hCT1JTIiwibmVpZ2hib3JzSW5wdXQiLCJkaXN0VHlwZSIsImRpc3RUeXBlSW5wdXQiLCJ0YXJnZXRDb2xJbnB1dCIsImNoZWNrQXBwbGljYWJpbGl0eSIsImNoZWNrZWQiLCJzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcyIsIm1ldHJpY0luZm9JbnB1dHMiLCJkaXYiLCJoaWRlV2lkZ2V0cyIsImRpc3REaXYiLCJtZXRyaWNzRGl2IiwiZmVhdHVyZXNNZXRyaWNzIiwic2V0dGluZ3MiLCJkZWZhdWx0V2VpZ2h0IiwiV0VJR0hUIiwiZGVmYXVsdE1ldHJpYyIsIk9ORV9IT1QiLCJhdmFpbGFibGVNZXRyaWNzIiwiRElGRkVSRU5DRSIsImdldEZlYXR1cmVJbnB1dFNldHRpbmdzIiwiZGlzdEluZm8iLCJzZXR0aW5nc0ljb24iLCJkZWxldGUiLCJmYWlsZWRUb0ltcHV0ZSIsIm1pc3NpbmdWYWxzSW5kaWNlcyIsImRpc3RhbmNlIiwiZ2V0Q29sIiwiZnJlcXVlbmNpZXMiLCJmZWF0dXJlU291cmNlIiwiZmVhdHVyZU51bGxWYWwiLCJtZXRyaWNGdW5jIiwiZmFpbGVkVG9JbXB1dGVJbmRpY2VzIiwibWV0cmljSW5mbyIsInByb3BlckluZGljZXMiLCJidWZmZXJWZWN0b3IiLCJwcm9wZXJJbmRpY2VzQ291bnQiLCJuZWFyZXN0SXRlbXMiLCJuZWFyZXN0SXRlbXNDb3VudCIsIm1heEluZCIsIm1heERpc3QiLCJmaWxsVmFsdWUiLCJjb21wdXRlQnVmZmVyVmVjdG9yIiwiY3VyIiwicHJvcGVySW5kZXgiLCJkaXN0IiwiY2FuSXRlbUJlVXNlZCIsImdldEZpbGxWYWx1ZSIsImdldFByb3BlckluZGVjZXMiLCJjdXJEaXN0IiwibWF4RnJlcSIsIm1heEZyZXFJZHgiLCJtb3N0RnJlcXVlbnRPZlRoZU5lYXJlc3RJdGVtcyIsImNsb25lIiwiY29weU5hbWUiLCJjb250YWlucyIsImNvcHlTb3VyY2UiLCJpbXB1dGUiLCJjb2xOYW1lIiwiZmlsbFZhbCIsInJhdyIsImdldEZpcnN0Tm9uTnVsbCIsImF2ZyIsImdldERlZmF1bHRGaWxsVmFsdWUiLCJpbXB1dGVGYWlsZWQiLCJtZXNzYWdlIiwiTUNMRWRpdG9yIiwic2ltaWxhcml0eVRocmVzaG9sZElucHV0IiwibWF4SXRlcmF0aW9uc0lucHV0IiwidXNlV2ViR1BVSW5wdXQiLCJpbmZsYXRlSW5wdXQiLCJ0aHJlc2hvbGQiLCJtYXhJdGVyYXRpb25zIiwiaW5mbGF0ZUZhY3RvciIsIkJpdEFycmF5IiwiX2xlbmd0aCIsIl92ZXJzaW9uIiwiX3VwZGF0ZUxldmVsIiwiX3NlbGVjdGVkQ291bnQiLCJfc2VsZWN0ZWRDb3VudFZlcnNpb24iLCJfc2VsZWN0ZWRJbmRleGVzVmVyc2lvbiIsIl92ZXJzaW9uZWROYW1lIiwiX3ZlcnNpb25lZE5hbWVWZXJzaW9uIiwiU0hSSU5LX1RIUkVTSE9MRCIsImJ1ZmYiLCJfY3JlYXRlQnVmZmVyIiwiX2RhdGEiLCJhc3N1cmVHb2V6IiwiYXJnTmFtZSIsImFzc3VyZUluUmFuZ2UiLCJkc3QiLCJjb3B5RnJvbSIsIm90aGVyIiwibGVuZ3RoSW5JbnRzIiwidmVyc2lvbiIsImluY3JlbWVudFZlcnNpb24iLCJub3RpZnkiLCJ2ZXJzaW9uZWROYW1lIiwic2V0TGVuZ3RoIiwibkludHNOZWVkZWQiLCJuZXdEYXRhIiwic3RhdGljIiwic2V0MSIsInNldDIiLCJzZXRCaXQiLCJmcm9tU2VxIiwiY2hhckF0IiwibnVtMSIsIm51bTIiLCJjb3VudEJpdHMiLCJlcXVhbHMiLCJnZXRCaXQiLCJiaXRBcnJheSIsInNldEFsbCIsImludmVydCIsImZsYWdzIiwic2V0SW5kZXhlcyIsImluZGV4ZXMiLCJzZXRGYXN0IiwiZXZlcnlJbmRleCIsImFueUluZGV4Iiwic2V0V2hlcmUiLCJjaGVjayIsImFsbG93Q2xlYXIiLCJnZXRSYW5nZSIsInRvIiwiZnJvbVZhbHVlcyIsImdldFJhbmdlQXNMaXN0Iiwic2V0UmFuZ2UiLCJzZXRUcnVlIiwic2V0RmFsc2UiLCJhbmQiLCJhbmROb3QiLCJub3RBbmQiLCJub3QiLCJvciIsInhvciIsImluc2VydEF0Iiwib2xkbGVuZ3RoIiwicmVtb3ZlQXQiLCJyZW1vdmVCeU1hc2siLCJtYXNrIiwiZHN0SWR4Iiwic3JjSWR4IiwiZmluZE5leHQiLCJiaXQiLCJ0cnVlQ291bnQiLCJmYWxzZUNvdW50IiwiX29uQml0Q291bnQiLCJyZW1haW5pbmdCaXRzIiwiY291bnRXaGVyZSIsImFuZFdpdGhDb3VudEJpdHMiLCJzZWNvbmQiLCJhbGxUcnVlIiwiYWxsRmFsc2UiLCJhbnlUcnVlIiwiYW55RmFsc2UiLCJ1bnVzZWRCaXRzIiwibnVtSW50cyIsIl9maXJzdE9uQml0IiwiZmluZFByZXYiLCJfbGFzdE9uQml0IiwiU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlIiwiU2NhdHRlclBsb3RMaW5lc1JlbmRlcmVyIiwiY3VycmVudExpbmVJZCIsIl9jdXJyZW50TGluZUlkeCIsInNwIiwicmVuZGVyIiwiY3R4IiwibGluZXNUb1JlbmRlciIsInVwZGF0ZUxpbmVzIiwibGluZXNWaXNpYmlsaXR5IiwidmlzaWJpbGl0eSIsInhBeGlzIiwieUF4aXMiLCJjdXJyZW50TGluZVN0eWxlIiwibm9uZSIsImxpbmVDbGlja2VkIiwibGluZUhvdmVyIiwibW91c2VPdmVyTGluZUlkIiwiYXJyb3dXaWR0aCIsInhBeGlzQ29sIiwiZGF0YUZyYW1lIiwieUF4aXNDb2wiLCJjYW52YXMiLCJnZXRJbmZvIiwiZ2V0Q29udGV4dCIsImFycm93U2l6ZSIsIm9ubW91c2Vkb3duIiwiZXZlbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9ubW91c2Vtb3ZlIiwiY2hlY2tDb29yZHNPbkxpbmUiLCJvZmZzZXRYIiwib2Zmc2V0WSIsIm9uRXZlbnQiLCJzdWJzY3JpYmUiLCJyZW5kZXJMaW5lcyIsIm11bHRpcGxlTGluZXNDb3VudHMiLCJza2lwTXVsdGlMaW5lQ2FsY3VsYXRpb24iLCJjcmVhdGVNdWx0aUxpbmVzSW5kaWNlcyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9sIiwiX20iLCJfbyIsInNwTG9vayIsImdldE9wdGlvbnMiLCJsb29rIiwiaW5kaXZpZHVhbExpbmVTdHlsZXMiLCJjb2xvcnMiLCJvcGFjaXRpZXMiLCJkcmF3QXJyb3dzQXJyIiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJvcGFjaXR5IiwibWFya2VyU2l6ZUNvbCIsImxpbmVMZW4iLCJzaXplRnJvbSIsInNpemVUbyIsImdldE1hcmtlcnNTaXplcyIsInBvaW50RnJvbSIsIndvcmxkVG9TY3JlZW4iLCJhWCIsImFZIiwicG9pbnRUbyIsImJYIiwiYlkiLCJtaW5BeGlzIiwidmlld0JveCIsImhlaWdodCIsImJlZ2luUGF0aCIsImh5cG90Iiwid2lkdGhzIiwidG9nZ2xlQ3VycmVudExpbmVTdHlsZSIsIm11bHRpTGluZXMiLCJjb250cm9sUG9pbnQiLCJnZXRMaW5lTGVuZ3RoIiwic3RhcnRQb2ludFdpdGhNYXJrZXIiLCJnZXRQb2ludE9uRGlzdGFuY2UiLCJlbmR0UG9pbnRXaXRoTWFya2VyIiwiZmluZENvbnRyb2xQb2ludCIsIm1vdmVUbyIsInF1YWRyYXRpY0N1cnZlVG8iLCJsaW5lVG8iLCJkcmF3QXJyb3dzIiwiYXJyb3dQb2ludCIsImFycm93Q1BYIiwiYXJyb3dDUFkiLCJjYW52YXNBcnJvdyIsInN0cm9rZSIsImNsb3NlUGF0aCIsImZpbGxMZWZ0Qm90dG9tUmVjdCIsImJvbGQiLCJkYXNoZWQiLCJzZXRMaW5lRGFzaCIsIm1hcmtlck1pblNpemUiLCJtYXJrZXJNYXhTaXplIiwibWFya2VyRGVmYXVsdFNpemUiLCJyZWN0IiwiUGF0aDJEIiwieUF4aXNCb3giLCJtaW5YIiwibWF4WSIsInhBeGlzQm94IiwiZmlsbFN0eWxlIiwiYXJyYXlJZHhzQml0QXJyYXkiLCJmaXJzdExpbmVJZHgiLCJsaW5lc1BlclBhaXIiLCJwb2ludFRvQ29tcGFyZTEiLCJwb2ludFRvQ29tcGFyZTIiLCJjYW5kaWRhdGVJZHgiLCJwRnJvbSIsInBUbyIsImZyb21NYXJrZXIiLCJ0b01hcmtlciIsImNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZSIsImNhbGN1bGF0ZURpc3RUb1N0cmFpZ2h0TGluZSIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJkaXN0VG9TdHJhaWdodExpbmVTZWdtZW50IiwicGMiLCJjYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCIsInAwIiwic3RlcHNOdW0iLCJkZWx0YVQiLCJhcnJYIiwiYXJyWSIsIm1heEhXIiwibWluU3VtSFciLCJjYW5kaWRhdGVJZHhzIiwieE9uQ3VydmUiLCJ5T25DdXJ2ZSIsInJlY3RXIiwicmVjdEgiLCJzdW1IVyIsInAxeCIsInAxeSIsInAyeCIsInAyeSIsInAzeCIsInAzeSIsIm1pZFgiLCJtaWRZIiwiZHgiLCJkeSIsInBlcnBlbmRpY3VsYXJMZW4iLCJjZWlsIiwiYXJyb3dFbmRYIiwiYXJyb3dFbmRZIiwicXVhZFgiLCJxdWFkWSIsImFycm93QW5nbGUiLCJhdGFuMiIsImdldExpbmVhclJlZ3Jlc3Npb25QYXJhbXMiLCJ0YXJnZXRzIiwieUF2ZyIsInlTdGRldiIsImlucHV0c0FuYWx5c2lzIiwiZ2V0SW5wdXRzQW5hbHlzaXMiLCJ0b0FwcGx5UExTIiwicGFyYW1zQnlQTFMiLCJnZXRMaW5lYXJSZWdyZXNzaW9uUGFyYW1zVXNpbmdQTFMiLCJ0bXBTdW0iLCJub25Db25zdEZlYXR1cmVDb2xzSW5kZWNlcyIsIm5vbkNvbnN0RmVhdHVyZUNvbHMiLCJub25Db25zdEZlYXR1cmVBdmdzIiwibm9uQ29uc3RGZWF0dXJlU3RkZXZzIiwibm9uQ29uc3RGZWF0dXJlc0NvdW50IiwidGVtcFBhcmFtcyIsImZlYXR1cmVBdmdzIiwiZmVhdHVyZVN0ZERldnMiLCJ0YXJnZXRzQXZnIiwidGFyZ2V0c1N0ZERldiIsInBhcmFtc0NvdW50IiwiY0Z1bmNOYW1lIiwiaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCIsImV4dGVuZGVkVHlwZU9mUmV0dXJuIiwiY3BwRnVuY1dyYXBwZXIiLCJfZml0TGluZWFyUmVncmVzc2lvblBhcmFtc1dpdGhEYXRhTm9ybWFsaXppbmciLCJnZXRQcmVkaWN0aW9uQnlMaW5lYXJSZWdyZXNzaW9uIiwicmF3RGF0YSIsImJpYXMiLCJNRU1PUllfU0NBTEUiLCJ3YXNtQnVmZmVyT3ZlcmZsb3ciLCJfcGFja2FnZSIsIndlYlJvb3QiLCJpbml0RURBIiwiX2luaXRFREFBUEkiLCJkYlNjYW4iLCJ4Q29sIiwieUNvbCIsImNsdXN0ZXJDb2xOYW1lIiwiY2x1c3RlciIsImNlbnRlciIsInBjYVRhYmxlIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJhZGRQcmVmaXhUb0VhY2hDb2x1bW5OYW1lIiwiZGJzY2FuUG9zdFByb2Nlc3NpbmdGdW5jdGlvbiIsImNvbDEiLCJjb2wyIiwibWluaW11bVBvaW50cyIsInJlc0NvbCIsImNoYW5nZUNvbHVtblR5cGUiLCJjb2xOYW1lcyIsInR2Iiwidmlld2VycyIsInByb3BzIiwiY29sb3JDb2x1bW5OYW1lIiwibnVtYmVyUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uIiwiX21ldHJpYyIsImVudHJpZXMiLCJzdHJpbmdQcmVwcm9jZXNzaW5nRnVuY3Rpb24iLCJyZWR1Y2VEaW1lbnNpb25hbGl0eSIsImRpYWxvZyIsIm9uT0siLCJtZXRyaWNzIiwiYWdncmVnYXRpb25NZXRob2QiLCJkaW1SZWRPcHRpb25zIiwidWlPcHRpb25zIiwicG9zdFByb2Nlc3NpbmdGdW5jIiwicG9zdFByb2NGdW5jQXJncyIsInNjYXR0ZXJQbG90UHJvcHMiLCJzaG93WEF4aXMiLCJzaG93WUF4aXMiLCJzaG93WFNlbGVjdG9yIiwic2hvd1lTZWxlY3RvciIsImRvUmVkdWNlIiwicGciLCJzY2F0dGVyUGxvdE5hbWUiLCJzY2F0dGVyUGxvdCIsImVtYmVkQ29sc05hbWVzIiwiYXhlcyIsImNvbE5hbWVJbmQiLCJnZXRFbWJlZGRpbmdDb2xzTmFtZXMiLCJwcm9ncmVzc0Z1bmMiLCJfbkVwb2NoIiwiZXBvY2hzTGVuZ3RoIiwiZW1iZWRkaW5ncyIsImVtYmVkWENvbCIsImVtYmVkWUNvbCIsInByb2dyZXNzIiwidG9GaXhlZCIsImdldERpbVJlZCIsInJlc29sdmVGIiwic3ViIiwidW5zdWJzY3JpYmUiLCJkaW1SZWRSZXNQcm9taXNlIiwiZW5jb2RlZENvbEVudHJpZXMiLCJwZiIsImRpc3RhbmNlRm5BcmdzIiwiY29sSW5wdXROYW1lIiwibWV0cmljSW5wdXROYW1lIiwiZGlzdGFuY2VBZ2dyZWdhdGlvbiIsImRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzIiwiY29sdW1uc0RhdGEiLCJ0ZXJtaW5hdGVTdWIiLCJlbWJlZGRpbmciLCJlcG9jaE51bSIsImNyZWF0ZU11bHRpRGltUmVkV29ya2VyIiwic3RkRGV2SW52ZXJzZSIsIm5vcm1hbGl6ZSIsImdldE5vcm1hbGl6ZWRFbWJlZGRpbmdzIiwiY2x1c3RlclBnIiwiY2x1c3RlclJlcyIsImFkZE5ld1N0cmluZyIsImNvbDFJbnB1dE5hbWUiLCJjb2wySW5wdXROYW1lIiwiZmFzdFJvd0NvdW50Iiwib25DYW5jZWwiLCJtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5IiwidmFsaWRhdGUiLCJva0J1dHRvbiIsIkdldE1DTEVkaXRvciIsImZ1bmNFZGl0b3IiLCJwcmVwcm9jZXNzaW5nRnVuY3MiLCJpbmZsYXRlIiwiZXJyTXNnIiwiZXJyU3RhY2siLCJsb2dnZXIiLCJNQ0wiLCJzZXJpYWxpemVkT3B0aW9ucyIsInNldFRhZyIsImluaXRpYWxpemF0aW9uRnVuY3Rpb24iLCJNQ0xJbml0aWFsaXphdGlvbkZ1bmN0aW9uIiwic2MiLCJtY2xUYWciLCJwYXJzZSIsInNjcCIsIm1jbFdvcmtlciIsImRpc3RhbmNlRm5zIiwicHJvbWlzZSIsIm9uZXJyb3IiLCJjcmVhdGVNQ0xXb3JrZXIiLCJlbWJlcmRYQ29sTmFtZSIsImVtYmVyZFlDb2xOYW1lIiwiY2x1c3RlcnNDb3VudGVyIiwiY29ubmVjdGl2aXR5IiwiaXMiLCJqcyIsImNsdXN0ZXJDb3VudGVyQ29sTmFtZSIsImNvbm5lY3Rpdml0eUNvbE5hbWUiLCJhZGROZXdGbG9hdCIsImNsdXN0ZXJDb2wiLCJjbHVzdGVyQ291bnRlckNvbCIsImFkZE5ld0ludCIsImNvbm5lY3Rpdml0eUNvbCIsIm1hcmtvdkNsdXN0ZXIiLCJ0b3BNZW51UExTIiwiUEVSRk9STV9NVkEiLCJkZW1vTXVsdGl2YXJpYXRlQW5hbHlzaXMiLCJydW5EZW1vTVZBIiwidGVzdERhdGFMaW5lYXJTZXBhcmFibGUiLCJ0ZXN0RGF0YUxpbmVhck5vblNlcGFyYWJsZSIsInRyYWluTGluZWFyS2VybmVsU1ZNIiwicHJlZGljdF9jb2x1bW4iLCJhcHBseUxpbmVhcktlcm5lbFNWTSIsImlzQXBwbGljYWJsZUxpbmVhcktlcm5lbFNWTSIsInZpc3VhbGl6ZUxpbmVhcktlcm5lbFNWTSIsInRhcmdldF9jb2x1bW4iLCJ0cmFpblJCRmtlcm5lbFNWTSIsImFwcGx5UkJGa2VybmVsU1ZNIiwiaXNBcHBsaWNhYmxlUkJGa2VybmVsU1ZNIiwidmlzdWFsaXplUkJGa2VybmVsU1ZNIiwidHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNIiwiYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNIiwiaXNBcHBsaWNhYmxlUG9seW5vbWlhbEtlcm5lbFNWTSIsInZpc3VhbGl6ZVBvbHlub21pYWxLZXJuZWxTVk0iLCJ0cmFpblNpZ21vaWRLZXJuZWxTVk0iLCJhcHBseVNpZ21vaWRLZXJuZWxTVk0iLCJpc0FwcGxpY2FibGVTaWdtb2lkS2VybmVsU1ZNIiwidmlzdWFsaXplU2lnbW9pZEtlcm5lbFNWTSIsInNpZ25pZmljYW5jZSIsImZhY3RvcnMiLCJhZGRPbmVXYXlBbm92YVZpenVhbGl6YXRpb24iLCJjYXRlZ29yZXMiLCJmYWN0b3JpemVkIiwiTk9OX0VRVUFMX1ZBUklBTkNFUyIsIk5PTl9OT1JNQUxfRElTVFJJQiIsImZDcml0IiwiZkNyaXRpY2FsIiwiaHlwb3RoZXNpcyIsInRlc3RSZXN1bHQiLCJnZXRPbmVXYXlBbm92YURGIiwib25lV2F5QW5vdmEiLCJrTk5JbXB1dGF0aW9uIiwibGluZWFyUmVncmVzc2lvbiIsInBsb3QiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInQyIiwiZ2VuZXJhdGVEYXRhc2V0Rm9yTGluZWFyUmVncmVzc2lvblRlc3QiLCJjb2xDb3VudCIsImZlYXR1cmVzU2NhbGUiLCJmZWF0dXJlc0JpYXMiLCJwYXJhbXNTY2FsZSIsInBhcmFtc0JpYXMiLCJub2lzZUNvbCIsInlOb2lzeSIsImdldFRlc3REYXRhc2V0Rm9yTGluZWFyUmVncmVzc2lvbiIsInRyYWluTGluZWFyUmVncmVzc2lvbiIsImFwcGx5TGluZWFyUmVncmVzc2lvbiIsImlzQXBwbGljYWJsZUxpbmVhclJlZ3Jlc3Npb24iXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
var eda;(()=>{var t={5540:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&b("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,C=null,_=null;function b(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var I,N;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==I&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){b(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(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 M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),b(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12|0]=t},this.get_caught=function(){return 0!=m[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=m[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){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(I="wasmDbscan.wasm")||(N=I,I=o.locateFile?o.locateFile(N,l):l+N);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={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=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=B()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&k(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var D,U={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){b("")},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 o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},B=(function(){var t,n,r,i,s={env:U,wasi_snapshot_preview1:U};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==C&&(clearInterval(C),C=null),_)){var t=_;_=null,t()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=I,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(B=o.asm.stackSave).apply(null,arguments)}),k=function(){return(k=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){D||(D=!0,o.calledRun=!0,g||(O(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;O(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},_=function t(){D||q(),D||(_=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},7939:(t,n,e)=>{"use strict";e.d(n,{A:()=>a});var r=e(1354),o=e.n(r),i=e(6314),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;;AAEhB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},6314:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},1354:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},6572:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),C=A*A;if(C>60)break;var _=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;_>=n.exp(-30/d)&&(g+=_=s[E-1]*n.exp(-.5*C)*n.pow(_,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},5072:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},7659:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},540:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},5056:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},1113:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.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),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>br,MCL:()=>Ir,MCLInitializationFunction:()=>Nr,MVA:()=>Tr,PCA:()=>wr,PLS:()=>Sr,_package:()=>pr,anova:()=>Zr,applyLinearKernelSVM:()=>Rr,applyLinearRegression:()=>io,applyPolynomialKernelSVM:()=>Yr,applyRBFkernelSVM:()=>kr,applySigmoidKernelSVM:()=>jr,dbScan:()=>yr,dbscanPostProcessingFunction:()=>Er,demoMultivariateAnalysis:()=>Or,generateDatasetForLinearRegressionTest:()=>ro,info:()=>gr,init:()=>vr,isApplicableLinearKernelSVM:()=>Fr,isApplicableLinearRegression:()=>so,isApplicablePolynomialKernelSVM:()=>Hr,isApplicableRBFkernelSVM:()=>Vr,isApplicableSigmoidKernelSVM:()=>Xr,isInteractiveLinearKernelSVM:()=>Dr,isInteractiveLinearRegression:()=>ao,isInteractivePolynomialKernelSVM:()=>zr,isInteractiveRBFkernelSVM:()=>Gr,isInteractiveSigmoidKernelSVM:()=>Qr,kNNImputation:()=>to,kNNImputationForTable:()=>no,linearRegression:()=>eo,numberPreprocessingFunction:()=>Ar,reduceDimensionality:()=>_r,stringPreprocessingFunction:()=>Cr,testDataLinearNonSeparable:()=>xr,testDataLinearSeparable:()=>Pr,topMenuPLS:()=>Mr,trainLinearKernelSVM:()=>Lr,trainLinearRegression:()=>oo,trainPolynomialKernelSVM:()=>Wr,trainRBFkernelSVM:()=>Br,trainSigmoidKernelSVM:()=>Kr,visualizeLinearKernelSVM:()=>Ur,visualizePolynomialKernelSVM:()=>$r,visualizeRBFkernelSVM:()=>qr,visualizeSigmoidKernelSVM:()=>Jr});const t=grok,n=ui,o=DG,i={i32:"HEAP32",f32:"HEAPF32"},s={i32:Int32Array,f32:Float32Array},a={i32:2,f32:2},u={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class l{constructor(t){this.data=t}complementArrOfParams(t){t.push(this.data)}complementArrOfTypes(t){t.push("number")}allocateMemoryForBuffer(t){}isMemoryForBufferAllocated(){return!0}putDataToBuffer(t){}getDataFromBuffer(t){}freeBuffer(t){}}class c extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfRows=t.length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows)}complementArrOfTypes(t){t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]];let o=null;const u=this.data;o="int"==u.type&&"i32"==n||"double"==u.type&&"f32"==n?u.getRawData():new s[n](u.getRawData()),o&&r.set(o,this.buf>>e)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=s[n].BYTES_PER_ELEMENT,a=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)a[t]=e[r/o+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class f extends c{constructor(t,n){super([],t,!0),this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=u[n],a=new s[n](this.numOfRows);for(let t=0;t<a.length;t++)a[t]=e[r/a.BYTES_PER_ELEMENT+t];this.data=o("name",a)}}}class h extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfColumns=t.length,this.numOfRows=t[0].length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows),t.push(this.numOfColumns)}complementArrOfTypes(t){t.push("number"),t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*this.numOfColumns*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]],o=s[n].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const a=this.data[t];i="int"==a.type&&"i32"==n||"double"==a.type&&"f32"==n?a.getRawData():new s[n](a.getRawData()),null!=i&&r.set(i,this.buf+t*this.numOfRows*o>>e)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=new s[n](e.buffer,this.buf,r*o);for(let t=0;t<o;t++){const n=this.data[t].getRawData();for(let e=0;e<r;e++)n[e]=a[e+t*r]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class m extends h{constructor(t,n,e){super([[]],t,!0),this.data=[],this.numOfColumns=e,this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=s[n].BYTES_PER_ELEMENT,l=u[n],c=this.buf;for(let t=0;t<o;t++){const o=new s[n](r);for(let n=0;n<r;n++)o[n]=e[c/a+n+t*r];this.data.push(l((t+1).toString(),o))}}}}const d={intColumn:t=>new c(t,"i32"),newIntColumn:t=>new f("i32",t),intColumns:t=>new h(t.toList(),"i32"),newIntColumns:(t,n)=>new m("i32",t,n),floatColumn:t=>new c(t,"f32"),newFloatColumn:t=>new f("f32",t),floatColumns:t=>new h(t.toList(),"f32"),newFloatColumns:(t,n)=>new m("f32",t,n),int:t=>new l(t),num:t=>new l(t)},p={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data},g="num",v="floatColumn",y="intColumn",w="floatColumns",E="newFloatColumns",A="intColumns",C="newIntColumns",_="newFloatColumn",b="newIntColumn",I="column",N="_callResult",S="numOfRows",M="numOfColumns",T="ref",O="value",P="tableFromColumns",x="objects",L="int",R="double",F={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function D(t,n){let e,r=[],o=0;for(const i in t){const s=t[i],a=s.type;if(i!==N){switch(a){case g:case L:case R:s.data=n[o],o++;break;case y:case v:let r,i=n[o];r=i.type===L&&a===y||i.type===R&&a===v?i.getRawData():new F[a](i.getRawData()),s.data={array:r,numOfRows:r.length},o++;break;case b:case _:let u=0;e=s[S][T],u=t[e].type===g?t[e].data:t[e].data[s[S][O]],s.data={numOfRows:u},o++;break;case A:case w:let l=[];for(let t of n[o].toList())t.type===L&&a===y||t.type===R&&a===v?l.push(t.getRawData()):l.push(new F[a](t.getRawData()));s.data={arrays:l,numOfRows:l[0].length,numOfColumns:l.length},o++;break;case C:case E:let c=0,f=0;e=s[S][T],c=t[e].type===g?t[e].data:t[e].data[s[S][O]],e=s[M][T],f=t[e].type===g?t[e].data:t[e].data[s[M][O]],s.data={numOfRows:c,numOfColumns:f},o++;break;default:return}r.push(s)}}return r}function U(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const i=t[o];switch(i.type){case g:case L:case R:case y:case v:case w:case A:break;case _:case b:let t;null==i.name?t=(0).toString():a=i.name,i.column=e[i.type](t,n[r].array);break;case C:case E:let o=[],s=n[r].arrays.length,a=[];if(null==i.names)for(let t=1;t<=s;t++)a.push(t.toString());else a=i.names;for(let t=0;t<s;t++)o.push(e[i.type](a[t],n[r].arrays[t]));i.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case g:case L:case R:return t.arguments[n.source];case I:return t.arguments[n.source].column;case P:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case x:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case g:case L:case R:case y:case v:case A:case w:break;case b:case _:e.column=null;break;case C:case E:e.columns=null}}}(t.arguments),e}const B=1,k=1,V=1,G=0,q=100,W=1e8,Y="components must be positive.",H="components must not be greater than features count.",z="min must be less than max.",$="features must be positive.",K="samples must be positive.",j="violators percentage must be from the range from 0 to 100.",X="dataframe is too big.",Q="unsupported column type: ";function J(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(Q+t.type)}function Z(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function tt(t,n){if(function(t,n){if(n<B)throw new Error(Y);if(n>t.length)throw new Error(H);for(const n of t)J(n),Z(n)}(t,n),t.length*t.byIndex(0).length>W)throw new Error(X)}var nt=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var et=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const rt=0,ot=1,it="Feature #",st="Label";function at(t,n,r,i,s,a,u,l){return et(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(z);if(n<V)throw new Error($);if(t<k)throw new Error(K);if(o<G||o>q)throw new Error(j)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(583),e.b));c.postMessage(D(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(U(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=st;for(const t of f[rt])t.name=it+t.name;const m=o.DataFrame.fromColumns(f[rt]);return m.name=r,m.columns.add(f[ot]),m}))}var ut=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const lt=0,ct=1,ft=2,ht=3,mt=4,dt=0,pt=1,gt=2,vt=3,yt=4,wt=5,Et=6,At=7,Ct=0,_t=1,bt=2,It=3,Nt=0,St=0,Mt=1,Tt=0,Ot=1,Pt=0,xt=0,Lt=0,Rt=0,Ft="gamma must be strictly positive.",Dt="sigma must be strictly positive.",Ut="c must be strictly positive.",Bt="d must be strictly positive.",kt="incorrect kernel.",Vt="labels must be strings of two categories.",Gt="Labels",qt="predicted",Wt="correctness",Yt="Confusion matrix",Ht="mean",zt="std dev",$t="alpha",Kt="weight",jt="Gamma",Xt="Kernel",Qt="Kernel params",Jt="Kernel parameter 1",Zt="Kernel parameter 2",tn="Features count",nn="Train samples count",en="Train error, %",rn=["linear","polynomial","RBF","sigmoid"],on="Sensitivity",sn="Specificity",an="Balanced accuracy",un="Positive predicitve value",ln="Negative predicitve value",cn="prediction",fn=4,hn=3,mn=2,dn=0,pn=1,gn=2,vn=0,yn=1;function wn(t,n,r){return ut(this,void 0,void 0,(function*(){const i=n.columns;if(2!=r.categories.length)throw new Error(Vt);let s=o.Column.float(r.name,r.length);for(var a=0;a<r.length;a++)s.set(a,r.get(a)==r.categories[0]?-1:1,!1);let u=yield function(t,n,r){return ut(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Pt)throw new Error(Ft);switch(t.kernel){case lt:return;case ft:if(t.sigma<=xt)throw new Error(Dt);return;case ct:if(t.cParam<=Lt)throw new Error(Ut);if(t.dParam<=Rt)throw new Error(Bt);return;case ht:return;default:throw new Error(kt)}}(t);const i=[vn,vn];switch(t.kernel){case lt:break;case ft:i[Nt]=t.sigma;break;case ct:i[St]=t.cParam,i[Mt]=t.dParam;break;case ht:i[Tt]=t.kappa,i[Ot]=t.theta;break;default:throw new Error(kt)}const s=o.Column.fromList("double",Qt,i),a=n.toList(),u=a[0].length+yn,l=a.length+yn,c=mt;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(656),e.b));f.postMessage(D(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(U(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[pt].name=Ht,f[gt].name=zt,f[vt].name=$t,f[yt].name=Kt,f[wt].name=qt,f[Et].name=Wt,f[At].name=Yt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[dt]),means:f[pt],stdDevs:f[gt],modelParams:f[vt],modelWeights:f[yt],predictedLabels:f[wt],correctness:f[Et],confusionMatrix:f[At],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[Ct],r=n[It],o=n[bt],i=n[_t],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s);return u.realLabels=r,u}))}function En(t,n){const e=Cn(n);return o.Viewer.form(e.modelInfo,{showNavigation:!1}).root}function An(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,i=o.DataFrame.fromColumns([t.realLabels]).toByteArray(),s=fn+i.length+4-i.length%4,a=function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",jt,[t.trainGamma]),o.Column.fromStrings(Xt,[rn[t.kernelType]]),o.Column.fromList("double",Jt,[n[0]]),o.Column.fromList("double",Zt,[n[1]]),o.Column.fromList("double",tn,[t.featuresCount]),o.Column.fromList("double",nn,[t.trainSamplesCount]),o.Column.fromList("double",en,[t.trainError]),o.Column.fromList("double",an,[t.balancedAccuracy]),o.Column.fromList("double",on,[t.sensitivity]),o.Column.fromList("double",sn,[t.specificity]),o.Column.fromList("double",un,[t.positivePredicitveValue]),o.Column.fromList("double",ln,[t.negativePredicitveValue])])}(t).toByteArray(),u=fn+a.length+4-a.length%4,l=new Uint8Array(fn*(hn+mn+e+r+r+e+yn+r+yn+r*e)+s+u),c=l.buffer;let f=0,h=new Int32Array(c,f,hn);h[dn]=t.kernelType,h[pn]=e,h[gn]=r,f+=hn*fn;let m=new Float32Array(c,f,mn);m.set(t.kernelParams.getRawData()),f+=mn*fn,m=new Float32Array(c,f,e),m.set(t.trainLabels.getRawData()),f+=e*fn,m=new Float32Array(c,f,r),m.set(t.means.getRawData()),f+=r*fn,m=new Float32Array(c,f,r),m.set(t.stdDevs.getRawData()),f+=r*fn,m=new Float32Array(c,f,e+yn),m.set(t.modelParams.getRawData()),f+=(e+yn)*fn,m=new Float32Array(c,f,r+yn),m.set(t.modelWeights.getRawData()),f+=(r+yn)*fn;for(const t of n)m=new Float32Array(c,f,r),m.set(t.getRawData()),f+=r*fn;return h=new Int32Array(c,f,1),h[0]=i.length,l.set(i,f+fn),f+=s,h=new Int32Array(c,f,1),h[0]=a.length,l.set(a,f+fn),f+=u,l}function Cn(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,hn);e+=hn*fn;const i=r[pn],s=r[gn],a=o.Column.fromFloat32Array(Qt,new Float32Array(n,e,mn));e+=mn*fn;const u=o.Column.fromFloat32Array(Gt,new Float32Array(n,e,i));e+=i*fn;const l=o.Column.fromFloat32Array(Ht,new Float32Array(n,e,s));e+=s*fn;const c=o.Column.fromFloat32Array(zt,new Float32Array(n,e,s));e+=s*fn;const f=o.Column.fromFloat32Array($t,new Float32Array(n,e,i+yn));e+=(i+yn)*fn;const h=o.Column.fromFloat32Array(Kt,new Float32Array(n,e,s+yn));e+=(s+yn)*fn;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*fn;const d=o.DataFrame.fromColumns(m),p=new Int32Array(n,e,1)[0],g=p+4-p%4;e+=fn;const v=o.DataFrame.fromByteArray(new Uint8Array(n,e,p)).columns.byIndex(0);e+=g;const y=new Int32Array(n,e,1)[0],w=y+4-y%4;e+=fn;const E=o.DataFrame.fromByteArray(new Uint8Array(n,e,y));return e+=w,{kernelType:r[dn],kernelParams:a,trainLabels:u,realLabels:v,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d,modelInfo:E}}function _n(t,n){return ut(this,void 0,void 0,(function*(){const r=Cn(new Uint8Array(n)),i=yield function(t,n){return ut(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(763),e.b));h.postMessage(D(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(U(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns),s=o.Column.string(cn,i.length),a=r.realLabels.categories;for(var u=0;u<s.length;u++)s.set(u,-1==i.get(u)?a[0]:a[1]);return o.DataFrame.fromColumns([s])}))}function bn(t,n){const e=t.columns;if(!n.matches("categorical")||n.categories.length>2)return!1;for(var r=!0,o=0;o<e.length;o++)r=r&&e.byIndex(o).matches("numerical");return r}function In(t,n){return t.rowCount<=1e3}var Nn,Sn,Mn,Tn,On,Pn,xn,Ln;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(Nn||(Nn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(Sn||(Sn={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(Mn||(Mn={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(Tn||(Tn={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(On||(On={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(Pn||(Pn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(xn||(xn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(Ln||(Ln={}));const Rn="Int",Fn=6,Dn=[.49,.79,.99],Un=1,Bn=200,kn=200;var Vn;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Vn||(Vn={}));const Gn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",qn=[{caption:Mn.MODEL,text:"Closer to the line means better price prediction."},{caption:Mn.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:Mn.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:Mn.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:Mn.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],Wn=qn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${On.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Yn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Hn=Math.min,zn=Math.max;function $n(t){return Yn(this,void 0,void 0,(function*(){tt(t.features,t.components),J(t.predict),Z(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(412),e.b));s.postMessage(D(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(U(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[Ln.PREDICTION],regressionCoefficients:n[Ln.REGR_COEFFS],tScores:n[Ln.T_SCORES],uScores:n[Ln.U_SCORES],xLoadings:n[Ln.X_LOADINGS],yLoadings:n[Ln.Y_LOADINGS]}}))}function Kn(e){return Yn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(Sn.NO_DF);if(0===r.rowCount)return void t.shell.warning(Sn.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(Sn.NO_COLS);if(1===i.length)return void t.shell.warning(Sn.ONE_COL);let l=s[s.length-1];const c=n.input.column(Mn.PREDICT,{table:r,value:l,onValueChanged:()=>{l=c.value,y()},filter:t=>u(t)});let f;c.setTooltip(Tn.PREDICT);const h=n.input.columns(Mn.USING,{table:r,available:i});h.onInput((()=>y())),h.setTooltip(Tn.FEATURES);let m=Hn(i.length-1,Pn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:Mn.COMPONENTS,inputType:Rn,defaultValue:m,showPlusMinus:!0,min:Pn.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(Tn.COMPONENTS),e===Nn.COMPUTE_COMPONENTS?(p=Mn.PLS,g=On.PLS,v=Tn.PLS):(p=Mn.MVA,g=On.MVA,v=Tn.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=Hn(zn(null!==(t=d.value)&&void 0!==t?t:m,Pn.MIN),f.length),m=d.value,A.getButton(Mn.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.input.column(Mn.NAMES,{table:r,value:w,onValueChanged:()=>w=c.value,filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(Tn.NAMES),E.root.hidden=0===a.length||e===Nn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(Mn.RUN,(()=>Yn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){return Yn(this,void 0,void 0,(function*(){var i,s;const a=yield $n(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===Nn.COMPUTE_COMPONENTS?xn.PREFIX:Mn.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===Nn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(Mn.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${Mn.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${xn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:Mn.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:On.MODEL}));a.regressionCoefficients.name=Mn.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:Mn.REGR_COEFS,splitColumnName:Mn.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:On.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${Mn.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:Mn.LOADINGS,xColumnName:`${Mn.XLOADING}1`,yColumnName:`${Mn.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:Mn.FEATURE,help:On.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${Mn.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:Mn.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0].name,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:On.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:Un,visible:!0,title:" ",min:-n,max:n,color:Vn.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:Un,visible:!0,title:" ",color:Vn.AXIS}),y.forEach((t=>{const e="${"+t+"}";Dn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const C=a.yLoadings.getRawData(),_=a.xLoadings.map((t=>t.getRawData())),b=e.table.rowCount,I=c.length,N=e.components,S=new Float32Array(N),M=[],T=[];for(let t=0;t<I;++t)T.push(new Float32Array(N));S[0]=Math.pow(C[0],2)/b,M.push(`1 ${xn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(_[0][n],2)/b}));for(let t=1;t<N;++t)S[t]=S[t-1]+Math.pow(C[t],2)/b,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(_[t][e],2)/b)),M.push(`${t+1} ${xn.COMPS}`);const O=o.DataFrame.fromColumns([o.Column.fromStrings(Mn.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>O.columns.add(o.Column.fromFloat32Array(c[n],t))));const P=h.addViewer(o.Viewer.barChart(O,{title:Mn.EXPL_VAR,splitColumnName:Mn.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:On.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===Nn.DEMO){const e=[p,w,v,g,P].map(((t,n)=>({text:qn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:Mn.EXPLORE,pages:e}).helpUrl=On.MVA,t.shell.windows.help.showHelp(n.markdown(Wn))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:Bn,y:kn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Fn),t.shell.v.append(A.root)}))}var jn,Xn=e(6572);function Qn(t){if(t<=0||t>=1)throw new Error(jn.INCORRECT_SIGNIFICANCE_LEVEL)}function Jn(t){const n=t.size;if(n<=0)throw new Error(jn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function Zn(t,n,e=.05){Qn(e);const r=Jn(t),o=Jn(n);return 0===o?r===o:r/o<Xn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(jn||(jn={}));class te{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(jn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!Zn(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(jn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Xn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(jn.UNSUPPORTED_COLUMN_TYPE)}}}var ne=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function ee(t,n,r,o){return ne(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(682),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(5540);let re=null;function oe(){return t=this,n=void 0,r=function*(){if(!re&&(re=yield navigator.gpu.requestAdapter(),null==re))return null;const t=yield re.requestAdapterInfo();return t?ie(t.description,ie(t.vendor,"No GPU description available")):null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}function ie(t,n){return t&&""!=t?t:n}var se,ae,ue,le,ce,fe,he,me,de;(ae=se||(se={})).EUCLIDEAN="EUCLIDEAN",ae.MANHATTAN="MANHATTAN",se.EUCLIDEAN,se.MANHATTAN,(le=ue||(ue={})).HAMMING="Hamming",le.EUCLIDEAN="Euclidean",le.MANHATTAN="Manhattan",le.TANIMOTO="Tanimoto",le.LEVENSTEIN="Levenshtein",le.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",le.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",le.SOKAL="Sokal",le.COSINE="Cosine",le.ASYMMETRIC="Asymmetric",le.Difference="Difference",le.OneHot="One-Hot",ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.TANIMOTO,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.SOKAL,ue.COSINE,ue.ASYMMETRIC,ue.Difference,ue.OneHot,ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.TANIMOTO,ue.SOKAL,ue.COSINE,ue.ASYMMETRIC,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.Difference,ue.OneHot,new Set([ue.HAMMING,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.OneHot]),new Set([ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.MONOMER_CHEMICAL_DISTANCE,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.TANIMOTO,ue.COSINE,ue.SOKAL,ue.ASYMMETRIC,ue.OneHot,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.OneHot,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.Difference]),new Set([ue.TANIMOTO,ue.COSINE,ue.SOKAL,ue.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(ce||(ce={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(fe||(fe={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(he||(he={})),Object.prototype.toString,(de=me||(me={})).UMAP="UMAP",de.T_SNE="t-SNE";const pe=2,ge="MCL_OPTIONS";o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ve{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const ye="bypassLargeDataWarning",we="show-scatterplot-progress";var Ee,Ae;(Ae=Ee||(Ee={})).EUCLIDEAN="EUCLIDEAN",Ae.MANHATTAN="MANHATTAN";const Ce=rxjs;var _e=e(5072),be=e.n(_e),Ie=e(7825),Ne=e.n(Ie),Se=e(7659),Me=e.n(Se),Te=e(5056),Oe=e.n(Te),Pe=e(540),xe=e.n(Pe),Le=e(1113),Re=e.n(Le),Fe=e(7939),De={};De.styleTagTransform=Re(),De.setAttributes=Oe(),De.insert=Me().bind(null,"head"),De.domAPI=Ne(),De.insertStyleElement=xe(),be()(Fe.A,De),Fe.A&&Fe.A.locals&&Fe.A.locals;class Ue{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean",disableTooltip:"WebGPU is not available"},oe().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class Be{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class ke{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[me.UMAP]:new Ue,[me.T_SNE]:new Be},this.dbScanParams=new ve,this.methodSettingsDivs=[],this.supportedFunctions={},this.methodSettingsAnchor=n.div(),this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.aggregationMethodInput=n.choiceInput("Aggregation",Ee.EUCLIDEAN,[Ee.EUCLIDEAN,Ee.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new Ce.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new qe,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1;this.methodInput=n.choiceInput("Method",me.UMAP,[me.UMAP,me.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value]):(this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[])}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");this.columnOptEditors=t.map((t=>new Ve(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])))));const e=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{e.appendChild(t.accordionDiv)}));const o=new Array(2*this.columnOptEditors.length).fill(null).map(((t,n)=>n%2==0?this.columnOptEditors[n/2].colOptEditors:[]));let i=0;const s=n.table(o,(t=>(i++,t&&t.length>0?t:[this.columnOptEditors[Math.floor((i-1)/2)].preprocessingFuncSettingsDiv=n.div([]),n.div(),n.div(),n.div()])),["Column","Encoding function","Similarity metric","Weight"]);this.columnOptEditors.forEach((t=>{t.preprocessingFuncSettingsDiv?.parentElement?.setAttribute("colspan","4"),t.preprocessingFuncSettingsDiv?.parentElement?.parentElement?.style?.setProperty("height","unset")})),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex"),s.classList.add("ml-dim-reduction-column-editor-table-root"),this.columnOptEditorsRoot.appendChild(s)}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t){this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[];const e=this.methodSettingsAnchor,r=e.parentElement;r&&Object.keys(t).forEach((o=>{const i=t[o],s="string"===i.type?n.stringInput(i.uiName,i.value??"",(()=>{i.value=s.value})):"boolean"===i.type?n.boolInput(i.uiName,i.value??!1,(()=>{i.value=s.value})):n.floatInput(i.uiName,i.value,(()=>{i.value=s.value}));i.disable?(s.enabled=!1,n.tooltip.bind(s.input??s.root,i.disableTooltip??"")):n.tooltip.bind(s.input??s.root,i.tooltip),r.insertBefore(s.root,e),this.methodSettingsDivs.push(s.root)}))}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsAnchor,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Ve{constructor(t,e){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.colOptEditors=[],this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Ge(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Ge(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Ge(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const o=this.supportedFunctions.find((n=>Ge(n.func)===t));this.getSimilarityMetricInput(o),n.empty(this.preprocessingFuncSettingsDiv),r=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let r=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{r=!r,r?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const o=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"});this.colOptEditors=[o,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root],n.tooltip.bind(o,this.column.name),this.colOptEditors.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const i=n.divH(this.colOptEditors,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(i),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Ge(t){return t.friendlyName??t.name}class qe{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const We="dimensionality-reducer-terminate-event",Ye=t=>null==t;function He(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var ze;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(ze||(ze={}));const $e="copy";var Ke;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Ke||(Ke={}));const je="/help/transform/missing-values-imputation";var Xe;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Xe||(Xe={}));const Qe=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function Je(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}var Ze,tr,nr;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Ze||(Ze={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(tr||(tr={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}(nr||(nr={}));const er=1;function rr(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}var or,ir=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function sr(e){return ir(this,void 0,void 0,(function*(){if(null!=e||(e=t.shell.t),null===e)return void t.shell.warning(ze.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>Qe.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!Qe.includes(e.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=Je(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(ze.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(ze.ONE_AVAILABLE_FEATURE);let u=nr.IN_PLACE>0;const l=n.input.bool(Ke.IN_PLACE,{value:u,onValueChanged:()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}});l.setTooltip(Xe.IN_PLACE);let c=nr.KEEP_EMPTY>0;const f=n.input.bool(Ke.KEEP_EMPTY,{value:c,onValueChanged:()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}});f.setTooltip(Xe.KEEP_EMPTY);let h=nr.NEIGHBORS;const m=n.input.int(Ke.NEIGHBORS,{value:h,onValueChanged:()=>{const t=m.value;null===t?m.value=h:t>=er?h=t:m.value=h}});m.setTooltip(Xe.NEIGHBORS);let d=tr.EUCLIDEAN;const p=n.input.choice(Ke.DISTANCE,{value:d,items:[tr.EUCLIDEAN,tr.MANHATTAN],onValueChanged:()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:tr.EUCLIDEAN}});p.setTooltip(Xe.DISTANCE);let g=r.map((t=>t.name));const v=n.input.columns(Ke.COLUMNS,{table:e,onValueChanged:()=>{g=v.value.map((t=>t.name)),A()},available:i,checked:i});v.setTooltip(Xe.TARGET);let y=s;const w=n.input.columns(Ke.FEATURES,{table:e,onValueChanged:()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),_.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()},available:s,checked:s});w.setTooltip(Xe.FEATURES);const E=()=>{I.getButton(Ke.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,b.hidden=!0},A=()=>{I.getButton(Ke.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!rr(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${ze.ONE_FEATURE_SELECTED} the column '${n}'`))}))},C=new Map,_=new Map,b=n.divV([]);b.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:nr.WEIGHT,defaultMetric:Ze.ONE_HOT,availableMetrics:[Ze.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:nr.WEIGHT,defaultMetric:Ze.DIFFERENCE,availableMetrics:[Ze.DIFFERENCE,Ze.ONE_HOT]};default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);C.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.input.choice(t,{value:r.defaultMetric,items:r.availableMetrics,onValueChanged:()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,C.set(t,o)}});i.root.style.width="50%",i.setTooltip(Xe.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,C.set(t,o)})),a.setTooltip(Xe.WEIGHT);const u=n.divH([i.root,a.root]);_.set(t,u),b.append(u)}));const I=n.dialog({title:Ke.KNN_IMPUTER,helpUrl:je});t.shell.v.root.appendChild(I.root),b.hidden=!0,f.root.hidden=!rr(g,y,a);const N=n.icons.settings((()=>{b.hidden=!b.hidden}),Xe.METRIC_SETTINGS),S=n.divH([p.root,N]);let M,T,O=!1;const P=new Promise(((t,n)=>{M=t,T=n}));return I.add(v).add(w).add(S).add(b).add(m).add(l).add(f).show().onOK((()=>{O=!0,I.close(),s.filter((t=>!y.includes(t))).forEach((t=>C.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<er)throw new Error(ze.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(ze.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(ze.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(ze.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${ze.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${ze.KNN_FAILS}: ${ze.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!Qe.includes(l.byName(t).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!Qe.includes(n.getCol(e).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=Je(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(Je(e)),t.type){case Ze.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Ze.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),C=new Float32Array(g.length);let _=0;const b=new Array(a);let I=0,N=0,S=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{C[r]=y[e](g[e][t],g[e][n])}))},P=s===tr.EUCLIDEAN?()=>{let t=0;for(let n=0;n<_;++n)t+=C[n]*C[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<_;++n)t+=Math.abs(C[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<_;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{_=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[_]=n,++_)})(t),0===_)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);I=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){O(t,n);const e=P();if(I<a)b[I]={index:n,dist:e},++I;else{N=0,S=b[0].dist;for(let t=1;t<I;++t)S<b[t].dist&&(S=b[t].dist,N=t);e<S&&(b[N]={index:n,dist:e})}}if(0===I)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<I;++t)++p[d[b[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<I;++t)M+=d[b[t].index];return T=M/I,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${$e})`;for(;n.columns.contains(s);)s=`${e}(${$e} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,C,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!Qe.includes(r.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=Je(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(ze.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n),M()}catch(n){n instanceof Error?t.shell.error(`${ze.KNN_FAILS}: ${n.message}`):t.shell.error(`${ze.KNN_FAILS}: ${ze.CORE_ISSUE}`),T(n)}})).onClose.subscribe((()=>!O&&T())),P}))}class ar extends ke{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity Threshold",80),this.maxIterationsInput=n.intInput("Max Iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),this.inflateInput=n.floatInput("Inflation Factor",pe),oe().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.setTooltip("WebGPU is not available"),this.useWebGPUInput.enabled=!1)}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.inflateInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1,inflateFactor:this.inflateInput.value??pe}}}class ur{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=ur._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new ur(t._length);e._length=t._length,e._data=ur._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new ur(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new ur(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return ur.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new ur(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new ur(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new ur(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return ur.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=ur._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=ur._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=ur._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=ur._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=ur._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=ur._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}ur._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),ur._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),ur._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(or||(or={}));class lr{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=or.none){var i;this._currentLineIdx=-1,this.lineClicked=new Ce.Subject,this.lineHover=new Ce.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new ur(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,C=null==E?void 0:E.y;const _=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&C&&Math.hypot(A-y,C-w)/_>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,C);const r=this.getPointOnDistance(y,w,A,C,g,n),o=this.getPointOnDistance(A,C,y,w,e,n);y=r.x,w=r.y,A=o.x,C=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,C,t):this.findControlPoint(m,A,C,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,C)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,C);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,C)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,C,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case or.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case or.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new ur(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new ur(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var cr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function fr(n,e){return cr(this,void 0,void 0,(function*(){const r=n.length,i=e.length,s=e.stats.avg,a=e.stats.stdev,u=new Float32Array(r+1).fill(0);if(u[r]=s,0===a||1===i)return u;try{const t=mr(r,i);if(t.toApplyPLS){const i=yield function(t,n,e){return cr(this,void 0,void 0,(function*(){return(yield $n({table:o.DataFrame.fromColumns([n]),features:t,predict:n,components:e,names:null})).regressionCoefficients.getRawData()}))}(n,e,t.components);let s=0;for(let t=0;t<r;++t)u[t]=i[t],s+=i[t]*n.byIndex(t).stats.avg;return u[r]-=s,u}const l=[],c=[],f=new Float32Array(r),h=new Float32Array(r);let m=0,g=0;for(const t of n){const n=t.stats;n.stdev>0&&(l.push(m),c.push(t),f[g]=n.avg,h[g]=n.stdev,++g),++m}if(0===g)return u;const v=function(t,n,e,r,o,i,s){return function(t,n,e){const r=t[n],o=r.arguments,i=[];let s=0;for(const t in o){const n=o[t];if("_callResult"!=t){switch(n.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":n.data=d[n.type](e[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=o[n.numOfRows.ref].data[n.numOfRows.value],r=o[n.numOfColumns.ref].data[n.numOfColumns.value];n.data=d[n.type](t,r);break;case"newFloatColumn":case"newIntColumn":const i=o[n.numOfRows.ref].data[n.numOfRows.value];n.data=d[n.type](i)}i.push(o[t].data)}}const a=function(t,n,e,r){let o;for(const n of r)n.allocateMemoryForBuffer(t);let i=!0;for(const t of r)i&=t.isMemoryForBufferAllocated();if(i){const e=[],i=[];for(const n of r)n.complementArrOfParams(e),n.complementArrOfTypes(i),n.putDataToBuffer(t);const s="number";o=t.ccall(n,s,i,e);for(const n of r)n.getDataFromBuffer(t)}for(const n of r)n.freeBuffer(t);if(null!=o)return o}(t,n,0,i);o._callResult=d.num(a);const u=r.output;if("objects"!=u.type)return p[u.type](o[u.source].data);const l=[];for(const t of u.source)l.push(o[t].data.data);return l}(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,n,e,r,o,i,s])}(o.DataFrame.fromColumns(c).columns,o.Column.fromFloat32Array("xAvgs",f,g),o.Column.fromFloat32Array("xStdevs",h,g),e,s,a,g+1).getRawData();for(let t=0;t<g;++t)u[l[t]]=v[t];u[r]=v[g]}catch(n){t.shell.error(`Fitted the trivial model: ${n instanceof Error?n.message:"due to the platform issue"}`)}return u}))}function hr(t,n){const e=t.length;if(e!==n.length-1)throw new Error("Incorrect parameters count");const r=t.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const u=n[e];let l=n[0];for(let t=0;t<i;++t)s[t]=u+l*a[t];for(let r=1;r<e;++r){a=t.byIndex(r).getRawData(),l=n[r];for(let t=0;t<i;++t)s[t]+=l*a[t]}return o.Column.fromFloat32Array(t.getUnusedName("prediction"),s,i)}const mr=(t,n)=>((t,n)=>8*n*(t+1)>=268435456)(t,n)||t>=1e3?{toApplyPLS:!0,components:10}:n>=1e6?{toApplyPLS:!0,components:Math.min(10,t)}:n<=t?{toApplyPLS:!0,components:Math.min(10,n)}:{toApplyPLS:!1,components:10};var dr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const pr=new o.Package;function gr(){t.shell.info(pr.webRoot)}function vr(){return dr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function yr(t,n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield ee(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function wr(n,r,o,i,s){return dr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return nt(this,void 0,void 0,(function*(){tt(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(91),e.b));a.postMessage(D(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(U(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function Er(n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield yr(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function Ar(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function Cr(t,n){return{entries:t.toList(),options:{}}}function _r(){return dr(this,void 0,void 0,(function*(){const r=new ke,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>dr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function C(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}))),d[we]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function _(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(We,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(234),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(We).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Ye(e)||Ye(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[ye]?void 0:C))}catch(t){r(t)}})),_=await g;return w.close(),p.unsubscribe(),_}const b=await _();if(h&&b){const I=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const N=await ee(b[0],b[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>N[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{I.close()}}if(b){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>b[0][t])),O.init((t=>b[1][t])),p)try{const P=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[P]:T,[x]:O,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[ye])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show();i.helpUrl="https://datagrok.ai/help/explore/dim-reduction.md";const s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function br(e){try{const t=new ar;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>dr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU,inflate:n.inflateFactor}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),pr.logger.error(e,void 0,r)}}function Ir(n,e,r,i,s,a,u){return dr(this,arguments,void 0,(function*(n,e,r,i,s,a,u,l=80,c=10,f=!1,h=0){var m;const d=null!==(m=t.shell.tableView(n.name))&&void 0!==m?m:t.shell.addTableView(n),p=JSON.stringify({cols:e.map((t=>t.name)),metrics:r,weights:i,aggregationMethod:s,preprocessingFuncs:a.map((t=>{var n;return null!==(n=null==t?void 0:t.name)&&void 0!==n?n:null})),preprocessingFuncArgs:u,threshold:l,maxIterations:c,useWebGPU:f,inflate:h});return n.setTag(ge,p),d.addViewer(o.VIEWER.SCATTER_PLOT,{title:"MCL",initializationFunction:"EDA:MCLInitializationFunction"})}))}function Nr(r){return dr(this,void 0,void 0,(function*(){const i=r.dataFrame;if(null===i)throw new Error("Data frame of the scatter plot is null");const s=i.getTag(ge);if(!s)throw new Error("MCL options tag on the dataFrame is not found");const a=JSON.parse(s),u=a.cols.map((t=>i.columns.byName(t))),l=a.preprocessingFuncs.map((t=>t?o.Func.byName(t):null)),c=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1,m=2,d){const p=t.shell.tableView(r.name)??t.shell.addTableView(r),g=d??p.scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(g.root,!0);const v=[],y=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});y.push({entries:s,options:a}),v.push(a??{})}else{const n=o[t].toList(),e={};y.push({entries:n,options:e}),v.push(e)}}const w=function(t,n,r,o,i,s,a=10,u=!1,l=2){const c=new Worker(new URL(e.p+e.u(317),e.b));let f;return c.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u,inflate:l}),{promise:new Promise(((t,n)=>{f=t,c.onmessage=n=>{setTimeout((()=>c.terminate()),100),t(n.data.res)},c.onerror=t=>{setTimeout((()=>c.terminate()),100),n(t)}})),terminate:()=>{try{f(null),c.terminate()}catch(t){console.error(t)}}}}(y.map((t=>t.entries)),c,s,a,i,v,f,h,m),E=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===g.props.title&&g.type===t.args?.viewer?.type&&(E.unsubscribe(),w.terminate())})),A=await w.promise;if(!A)return;const C=r.columns.getUnusedName("Cluster (MCL)"),_=r.columns.getUnusedName("EmbedX (MCL)"),b=r.columns.getUnusedName("EmbedY (MCL)"),I={};A.clusters.forEach((t=>{I[t]||(I[t]=0),I[t]++}));const N=new Uint32Array(A.embedX.length);for(let t=0;t<A.is.length;t++)N[A.is[t]]++,N[A.js[t]]++;const S=r.columns.getUnusedName("Cluster size (MCL)"),M=r.columns.getUnusedName("Connectivity (MCL)"),T=r.columns.addNewFloat(_);T.init((t=>A.embedX[t]));const O=r.columns.addNewFloat(b);O.init((t=>A.embedY[t]));const P=r.columns.addNewString(C);P.init((t=>A.clusters[t].toString()));const x=r.columns.addNewInt(S);x.init((t=>I[A.clusters[t]]));const L=r.columns.addNewInt(M);return L.init((t=>N[t])),g.props.xColumnName=_,g.props.yColumnName=b,g.props.colorColumnName=C,g.props.markerDefaultSize=5,E.unsubscribe(),new lr(g,_,b,{from:A.is,to:A.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},or.none),n.setUpdateIndicator(g.root,!1),{sc:g,embedXCol:T,embedYCol:O,clusterCol:P,clusterCounterCol:x,connectivityCol:L}}(i,u,a.metrics,a.weights,a.aggregationMethod,l,a.preprocessingFuncArgs,a.threshold,a.maxIterations,a.useWebGPU,a.inflate,r);return null==c?void 0:c.sc}))}function Sr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return yield $n({table:t,features:n,predict:e,components:r,names:o})}))}function Mr(){return dr(this,void 0,void 0,(function*(){yield Kn(Nn.COMPUTE_COMPONENTS)}))}function Tr(){return dr(this,void 0,void 0,(function*(){yield Kn(Nn.PERFORM_MVA)}))}function Or(){return dr(this,void 0,void 0,(function*(){!function(){Yn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Gn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Kn(Nn.DEMO)}))}()}))}function Pr(t,n,e,r,o,i){return dr(this,void 0,void 0,(function*(){return yield at(lt,[0,0],t,n,e,r,o,i)}))}function xr(t,n,e,r,o,i,s){return dr(this,void 0,void 0,(function*(){return yield at(ft,[n,0],t,e,r,o,i,s)}))}function Lr(t,n,e){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:lt},t,n))}))}function Rr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Fr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Dr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function Ur(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Br(t,n,e,r){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ft,sigma:r},t,n))}))}function kr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Vr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Gr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function qr(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Wr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ct,cParam:r,dParam:o},t,n))}))}function Yr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Hr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function zr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function $r(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Kr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ht,kappa:r,theta:o},t,n))}))}function jr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Xr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Qr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function Jr(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Zr(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Qn(e);const i=new te(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(jn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(jn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Xn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function to(){sr()}function no(t){return dr(this,void 0,void 0,(function*(){yield sr(t)}))}function eo(n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=performance.now(),a=yield fr(e,r),u=performance.now();console.log(`Fit: ${u-s} ms.`);const l=hr(e,a);console.log(`Predict: ${performance.now()-u} ms.`),l.name=n.columns.getUnusedName(l.name),n.columns.add(l),i&&t.shell.tableView(n.name).addViewer(o.VIEWER.SCATTER_PLOT,{xColumnName:r.name,yColumnName:l.name,showRegressionLine:!0})}))}function ro(n,e,r,i,s,a){return function(n,e,r,i,s,a){const u=t.data.demo.randomWalk(n,e+1),l=u.columns,c=l.byIndex(e);c.name="y (noisy)";const f=c.getRawData(),h=new Float32Array(n).fill(a);let m=0,d=0,p=0,g=0;for(const t of l){t.name=`x${m}`,d=Math.random()*r,p=Math.random()*i;const o=t.getRawData();g=Math.random()*s;for(let t=0;t<n;++t)o[t]=d*o[t]+p,h[t]+=o[t]*g;if(++m,m===e)break}d=Math.random()*r,p=Math.random()*i;for(let t=0;t<n;++t)f[t]=d*f[t]+h[t];return l.add(o.Column.fromFloat32Array("y",h,n)),u}(n,e,r,i,s,a)}function oo(t,n){return dr(this,void 0,void 0,(function*(){const e=t.columns,r=yield fr(e,n);return new Uint8Array(r.buffer)}))}function io(t,n){const e=t.columns,r=new Float32Array(n.buffer);return o.DataFrame.fromColumns([hr(e,r)])}function so(t,n){for(const n of t.columns)if(!n.matches("numerical"))return!1;return!!n.matches("numerical")}function ao(t,n){return t.rowCount<=1e5}})(),eda=r})();
|
|
2
|
+
//# sourceMappingURL=package.js.map
|