win32-pdf-printer
Version:
A simple and powerful printing library for node and elctron environments.
2 lines • 40 kB
JavaScript
!function(e,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var t=n();for(var r in t)("object"==typeof exports?exports:e)[r]=t[r]}}(global,(()=>(()=>{"use strict";var e={521:(e,n,t)=>{t.r(n),t.d(n,{getDefaultPrinter:()=>P,getPaperSizeInfo:()=>w,getPaperSizeInfoAll:()=>_,getPrinters:()=>j,print:()=>m,print2:()=>y});const r=require("path");var o=t.n(r);const i=require("fs");var a,c=t.n(i),p="electron"in process.versions&&t.c[t.s]&&(null===(a=t.c[t.s].filename)||void 0===a?void 0:a.includes("app.asar"));const s=function(e){return p?e.replace("app.asar","app.asar.unpacked"):e},d=require("node:os");function u(){if("win32"!==(0,d.platform)())throw"Operating System not supported"}const f=require("node:child_process");var l=["odd","even"],h=["portrait","landscape"],v=["noscale","shrink","fit"],S=["duplex","duplexshort","duplexlong","simplex"];function m(e,n){if(void 0===n&&(n={}),u(),!e)throw"No PDF specified";if(!c().existsSync(e))throw"No such file";var t=n.sumatraPdfPath||o().join(__dirname,"SumatraPDF.exe");n.sumatraPdfPath||(t=s(t));var r=[],i=n.printer,a=n.silent;n.printDialog?r.push("-print-dialog"):(i?r.push("-print-to",'"'.concat(i,'"')):r.push("-print-to-default"),!1!==a&&r.push("-silent"));var p=function(e){var n=e.pages,t=e.subset,r=e.orientation,o=e.scale,i=e.monochrome,a=e.side,c=e.bin,p=e.paperSize,s=e.copies,d=[];if(n&&d.push(n),t){if(!l.includes(t))throw"Invalid subset provided. Valid names: ".concat(l.join(", "));d.push(t)}if(r){if(!h.includes(r))throw"Invalid orientation provided. Valid names: ".concat(h.join(", "));d.push(r)}if(o){if(!v.includes(o))throw"Invalid scale provided. Valid names: ".concat(v.join(", "));d.push(o)}if(i?d.push("monochrome"):!1===i&&d.push("color"),a){if(!S.includes(a))throw"Invalid side provided. Valid names: ".concat(S.join(", "));d.push(a)}return c&&d.push("bin=".concat(c)),p&&d.push('paper="'.concat(p,'"')),s&&d.push("".concat(s,"x")),d}(n);p.length&&r.push("-print-settings",p.join(",")),r.push('"'.concat(e,'"'));try{(0,f.execSync)("".concat(t," ").concat(r.join(" ")))}catch(e){throw e}}function y(e,n,t){if(u(),!e)throw"No PDF specified";if(!c().existsSync(e))throw"No such file";var r=t||o().join(__dirname,"pdf2printer.exe");t||(t=s(r));try{(0,f.execSync)("".concat(r," ").concat(n," ").concat(e))}catch(e){throw e}}const x=require("node:path");var g=t.n(x);const j=function(e){try{u();var n=e||g().join(__dirname,"paper-size-info.exe");e||(n=s(n));var t="".concat(n);return JSON.parse((0,f.execSync)(t).toString())}catch(e){throw e}},P=function(e){try{u();var n=e||o().join(__dirname,"paper-size-info.exe");e||(n=s(n));var t="".concat(n);return JSON.parse((0,f.execSync)(t).toString())}catch(e){throw e}};var w=function(e){void 0===e&&(e={printer:""}),u();var n=e.paperSizeInfoPath||o().join(__dirname,"paper-size-info.exe");e.paperSizeInfoPath||(n=s(n));var t=e.printer?"".concat(n,' "').concat(e.printer,'"'):"".concat(n," ");try{return JSON.parse((0,f.execSync)(t).toString())}catch(e){throw e}},_=function(e){void 0===e&&(e={}),u();var n=e.paperSizeInfoPath||o().join(__dirname,"paper-size-info.exe");e.paperSizeInfoPath||(n=s(n));var t="".concat(n," --all");try{return JSON.parse((0,f.execSync)(t).toString())}catch(e){throw e}}}},n={c:{},n:e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},d:(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};return e[n.s=521](0,t,n),t})()));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVlDLEtBQVNMLEVBQW9CTSxFQUFFbEUsRUFBU2lFLElBQzVFRSxPQUFPQyxlQUFlcEUsRUFBU2lFLEVBQUssQ0FBRUksWUFBWSxFQUFNQyxJQUFLTixFQUFXQyxJQUUxRSxFQ05ETCxFQUF3QixDQUFDVyxFQUFLQyxJQUFVTCxPQUFPTSxVQUFVQyxlQUFlQyxLQUFLSixFQUFLQyxHQ0NsRlosRUFBeUI1RCxJQUNILG9CQUFYNEUsUUFBMEJBLE9BQU9DLGFBQzFDVixPQUFPQyxlQUFlcEUsRUFBUzRFLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFgsT0FBT0MsZUFBZXBFLEVBQVMsYUFBYyxDQUFFOEUsT0FBTyxHQUFPLEdDRjFEQyxFQUFzQixDQUFDLEUsT0FDM0JDLEVBQW9CcEIsRUFBb0JxQixFQUFJLEtBQUssRUFBR0YsRUFBcUJuQixHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3dpbjMyLXBkZi1wcmludGVyL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvLi9zcmMvdXRpbHMvZWxlY3Ryb24tdXRpbC50cyIsIndlYnBhY2s6Ly93aW4zMi1wZGYtcHJpbnRlci9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwibm9kZTpvc1wiIiwid2VicGFjazovL3dpbjMyLXBkZi1wcmludGVyLy4vc3JjL3V0aWxzL3Rocm93LWlmLXVuc3VwcG9ydGVkLW9zLnRzIiwid2VicGFjazovL3dpbjMyLXBkZi1wcmludGVyL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJub2RlOmNoaWxkX3Byb2Nlc3NcIiIsIndlYnBhY2s6Ly93aW4zMi1wZGYtcHJpbnRlci8uL3NyYy9wcmludC9wcmludC50cyIsIndlYnBhY2s6Ly93aW4zMi1wZGYtcHJpbnRlci8uL3NyYy9wcmludDIvcHJpbnQudHMiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcIm5vZGU6cGF0aFwiIiwid2VicGFjazovL3dpbjMyLXBkZi1wcmludGVyLy4vc3JjL2dldC1wcmludGVycy9nZXQtcHJpbnRlcnMudHMiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvLi9zcmMvZ2V0LWRlZmF1bHQtcHJpbnRlci9nZXQtZGVmYXVsdC1wcmludGVyLnRzIiwid2VicGFjazovL3dpbjMyLXBkZi1wcmludGVyLy4vc3JjL2dldC1wYXBlci1zaXplL2dldC1wYXBlci1zaXplLWluZm8udHMiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3dpbjMyLXBkZi1wcmludGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vd2luMzItcGRmLXByaW50ZXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly93aW4zMi1wZGYtcHJpbnRlci93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKGdsb2JhbCwgKCkgPT4ge1xucmV0dXJuICIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicGF0aFwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImZzXCIpOyIsIi8vIFRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lbGVjdHJvbi11dGlsL2Jsb2IvbWFzdGVyL25vZGUuanNcclxudmFyIF9hO1xyXG52YXIgaXNFbGVjdHJvbiA9IFwiZWxlY3Ryb25cIiBpbiBwcm9jZXNzLnZlcnNpb25zO1xyXG52YXIgaXNVc2luZ0FzYXIgPSBpc0VsZWN0cm9uICYmIHJlcXVpcmUubWFpbiAmJiAoKF9hID0gcmVxdWlyZS5tYWluLmZpbGVuYW1lKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5jbHVkZXMoXCJhcHAuYXNhclwiKSk7XHJcbmZ1bmN0aW9uIGZpeFBhdGhGb3JBc2FyVW5wYWNrKHBhdGgpIHtcclxuICAgIHJldHVybiBpc1VzaW5nQXNhciA/IHBhdGgucmVwbGFjZShcImFwcC5hc2FyXCIsIFwiYXBwLmFzYXIudW5wYWNrZWRcIikgOiBwYXRoO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGZpeFBhdGhGb3JBc2FyVW5wYWNrO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laV3hsWTNSeWIyNHRkWFJwYkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc2N5OWxiR1ZqZEhKdmJpMTFkR2xzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMQ3RGUVVFclJUczdRVUZGTDBVc1NVRkJUU3hWUVVGVkxFZEJRVWNzVlVGQlZTeEpRVUZKTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNN1FVRkZiRVFzU1VGQlRTeFhRVUZYTEVkQlEyWXNWVUZCVlN4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFdEJRVWtzVFVGQlFTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc01FTkJRVVVzVVVGQlVTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkJMRU5CUVVNN1FVRkZOVVVzVTBGQlV5eHZRa0ZCYjBJc1EwRkJReXhKUVVGWk8wbEJRM2hETEU5QlFVOHNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNSVUZCUlN4dFFrRkJiVUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkROVVVzUTBGQlF6dEJRVVZFTEdWQlFXVXNiMEpCUVc5Q0xFTkJRVU1pZlE9PSIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwibm9kZTpvc1wiKTsiLCJpbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJub2RlOm9zXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocm93SWZVbnN1cHBvcnRlZE9zKCkge1xyXG4gICAgaWYgKHBsYXRmb3JtKCkgIT09IFwid2luMzJcIikge1xyXG4gICAgICAgIHRocm93IFwiT3BlcmF0aW5nIFN5c3RlbSBub3Qgc3VwcG9ydGVkXCI7XHJcbiAgICB9XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEdoeWIzY3RhV1l0ZFc1emRYQndiM0owWldRdGIzTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmRYUnBiSE12ZEdoeWIzY3RhV1l0ZFc1emRYQndiM0owWldRdGIzTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhGUVVGRkxGRkJRVkVzUlVGQlJTeE5RVUZOTEZOQlFWTXNRMEZCUXp0QlFVVnVReXhOUVVGTkxFTkJRVU1zVDBGQlR5eFZRVUZWTEc5Q1FVRnZRanRKUVVNeFF5eEpRVUZKTEZGQlFWRXNSVUZCUlN4TFFVRkxMRTlCUVU4c1JVRkJSVHRSUVVNeFFpeE5RVUZOTEdkRFFVRm5ReXhEUVVGRE8wdEJRM2hETzBGQlEwZ3NRMEZCUXlKOSIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpOyIsIi8vVGhpcyBwcmludCBhcGkgdXNlcyBTdW1hdHJhUERGIGFuZCB3aWxsIGNvbXBseSB3aXRoIGdwbHYzLlxyXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XHJcbmltcG9ydCBmaXhQYXRoRm9yQXNhclVucGFjayBmcm9tIFwiLi4vdXRpbHMvZWxlY3Ryb24tdXRpbFwiO1xyXG5pbXBvcnQgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtIGZyb20gXCIuLi91dGlscy90aHJvdy1pZi11bnN1cHBvcnRlZC1vc1wiO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcclxudmFyIHZhbGlkU3Vic2V0cyA9IFtcIm9kZFwiLCBcImV2ZW5cIl07XHJcbnZhciB2YWxpZE9yaWVudGF0aW9ucyA9IFtcInBvcnRyYWl0XCIsIFwibGFuZHNjYXBlXCJdO1xyXG52YXIgdmFsaWRTY2FsZXMgPSBbXCJub3NjYWxlXCIsIFwic2hyaW5rXCIsIFwiZml0XCJdO1xyXG52YXIgdmFsaWRTaWRlcyA9IFtcImR1cGxleFwiLCBcImR1cGxleHNob3J0XCIsIFwiZHVwbGV4bG9uZ1wiLCBcInNpbXBsZXhcIl07XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByaW50KHBkZiwgb3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSgpO1xyXG4gICAgaWYgKCFwZGYpXHJcbiAgICAgICAgdGhyb3cgXCJObyBQREYgc3BlY2lmaWVkXCI7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGRmKSlcclxuICAgICAgICB0aHJvdyBcIk5vIHN1Y2ggZmlsZVwiO1xyXG4gICAgdmFyIHN1bWF0cmFQZGYgPSBvcHRpb25zLnN1bWF0cmFQZGZQYXRoIHx8IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiU3VtYXRyYVBERi5leGVcIik7XHJcbiAgICBpZiAoIW9wdGlvbnMuc3VtYXRyYVBkZlBhdGgpXHJcbiAgICAgICAgc3VtYXRyYVBkZiA9IGZpeFBhdGhGb3JBc2FyVW5wYWNrKHN1bWF0cmFQZGYpO1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIHZhciBwcmludGVyID0gb3B0aW9ucy5wcmludGVyLCBzaWxlbnQgPSBvcHRpb25zLnNpbGVudCwgcHJpbnREaWFsb2cgPSBvcHRpb25zLnByaW50RGlhbG9nO1xyXG4gICAgaWYgKHByaW50RGlhbG9nKSB7XHJcbiAgICAgICAgYXJncy5wdXNoKFwiLXByaW50LWRpYWxvZ1wiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmludGVyKSB7XHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChcIi1wcmludC10b1wiLCBcIlxcXCJcIi5jb25jYXQocHJpbnRlciwgXCJcXFwiXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChcIi1wcmludC10by1kZWZhdWx0XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2lsZW50ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBhcmdzLnB1c2goXCItc2lsZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBwcmludFNldHRpbmdzID0gZ2V0UHJpbnRTZXR0aW5ncyhvcHRpb25zKTtcclxuICAgIGlmIChwcmludFNldHRpbmdzLmxlbmd0aCkge1xyXG4gICAgICAgIGFyZ3MucHVzaChcIi1wcmludC1zZXR0aW5nc1wiLCBwcmludFNldHRpbmdzLmpvaW4oXCIsXCIpKTtcclxuICAgIH1cclxuICAgIGFyZ3MucHVzaChcIlxcXCJcIi5jb25jYXQocGRmLCBcIlxcXCJcIikpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBleGVjU3luYyhcIlwiLmNvbmNhdChzdW1hdHJhUGRmLCBcIiBcIikuY29uY2F0KGFyZ3Muam9pbihcIiBcIikpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFByaW50U2V0dGluZ3Mob3B0aW9ucykge1xyXG4gICAgdmFyIHBhZ2VzID0gb3B0aW9ucy5wYWdlcywgc3Vic2V0ID0gb3B0aW9ucy5zdWJzZXQsIG9yaWVudGF0aW9uID0gb3B0aW9ucy5vcmllbnRhdGlvbiwgc2NhbGUgPSBvcHRpb25zLnNjYWxlLCBtb25vY2hyb21lID0gb3B0aW9ucy5tb25vY2hyb21lLCBzaWRlID0gb3B0aW9ucy5zaWRlLCBiaW4gPSBvcHRpb25zLmJpbiwgcGFwZXJTaXplID0gb3B0aW9ucy5wYXBlclNpemUsIGNvcGllcyA9IG9wdGlvbnMuY29waWVzO1xyXG4gICAgdmFyIHByaW50U2V0dGluZ3MgPSBbXTtcclxuICAgIHBhZ2VzICYmIHByaW50U2V0dGluZ3MucHVzaChwYWdlcyk7XHJcbiAgICBpZiAoc3Vic2V0KSB7XHJcbiAgICAgICAgaWYgKHZhbGlkU3Vic2V0cy5pbmNsdWRlcyhzdWJzZXQpKSB7XHJcbiAgICAgICAgICAgIHByaW50U2V0dGluZ3MucHVzaChzdWJzZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgXCJJbnZhbGlkIHN1YnNldCBwcm92aWRlZC4gVmFsaWQgbmFtZXM6IFwiLmNvbmNhdCh2YWxpZFN1YnNldHMuam9pbihcIiwgXCIpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3JpZW50YXRpb24pIHtcclxuICAgICAgICBpZiAodmFsaWRPcmllbnRhdGlvbnMuaW5jbHVkZXMob3JpZW50YXRpb24pKSB7XHJcbiAgICAgICAgICAgIHByaW50U2V0dGluZ3MucHVzaChvcmllbnRhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBcIkludmFsaWQgb3JpZW50YXRpb24gcHJvdmlkZWQuIFZhbGlkIG5hbWVzOiBcIi5jb25jYXQodmFsaWRPcmllbnRhdGlvbnMuam9pbihcIiwgXCIpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoc2NhbGUpIHtcclxuICAgICAgICBpZiAodmFsaWRTY2FsZXMuaW5jbHVkZXMoc2NhbGUpKSB7XHJcbiAgICAgICAgICAgIHByaW50U2V0dGluZ3MucHVzaChzY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBcIkludmFsaWQgc2NhbGUgcHJvdmlkZWQuIFZhbGlkIG5hbWVzOiBcIi5jb25jYXQodmFsaWRTY2FsZXMuam9pbihcIiwgXCIpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobW9ub2Nocm9tZSkge1xyXG4gICAgICAgIHByaW50U2V0dGluZ3MucHVzaChcIm1vbm9jaHJvbWVcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtb25vY2hyb21lID09PSBmYWxzZSkge1xyXG4gICAgICAgIHByaW50U2V0dGluZ3MucHVzaChcImNvbG9yXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpZGUpIHtcclxuICAgICAgICBpZiAodmFsaWRTaWRlcy5pbmNsdWRlcyhzaWRlKSkge1xyXG4gICAgICAgICAgICBwcmludFNldHRpbmdzLnB1c2goc2lkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBcIkludmFsaWQgc2lkZSBwcm92aWRlZC4gVmFsaWQgbmFtZXM6IFwiLmNvbmNhdCh2YWxpZFNpZGVzLmpvaW4oXCIsIFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYmluICYmIHByaW50U2V0dGluZ3MucHVzaChcImJpbj1cIi5jb25jYXQoYmluKSk7XHJcbiAgICBwYXBlclNpemUgJiYgcHJpbnRTZXR0aW5ncy5wdXNoKFwicGFwZXI9XFxcIlwiLmNvbmNhdChwYXBlclNpemUsIFwiXFxcIlwiKSk7XHJcbiAgICBjb3BpZXMgJiYgcHJpbnRTZXR0aW5ncy5wdXNoKFwiXCIuY29uY2F0KGNvcGllcywgXCJ4XCIpKTtcclxuICAgIHJldHVybiBwcmludFNldHRpbmdzO1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNISnBiblF1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZjSEpwYm5RdmNISnBiblF1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNORVJCUVRSRU8wRkJRelZFTEU5QlFVOHNTVUZCU1N4TlFVRk5MRTFCUVUwc1EwRkJRenRCUVVONFFpeFBRVUZQTEVWQlFVVXNUVUZCVFN4SlFVRkpMRU5CUVVNN1FVRkRjRUlzVDBGQlR5eHZRa0ZCYjBJc1RVRkJUU3gzUWtGQmQwSXNRMEZCUXp0QlFVTXhSQ3hQUVVGUExHbERRVUZwUXl4TlFVRk5MR3REUVVGclF5eERRVUZETzBGQlEycEdMRTlCUVU4c1JVRkJSU3hSUVVGUkxFVkJRVVVzVFVGQlRTeHZRa0ZCYjBJc1EwRkJRenRCUVVjNVF5eEpRVUZOTEZsQlFWa3NSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU55UXl4SlFVRk5MR2xDUVVGcFFpeEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRE8wRkJRM0JFTEVsQlFVMHNWMEZCVnl4SFFVRkhMRU5CUVVNc1UwRkJVeXhGUVVGRkxGRkJRVkVzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3hKUVVGTkxGVkJRVlVzUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4aFFVRmhMRVZCUVVVc1dVRkJXU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzBGQlJYUkZMRTFCUVUwc1EwRkJReXhQUVVGUExGVkJRVlVzUzBGQlN5eERRVUZETEVkQlFWY3NSVUZCUlN4UFFVRXdRanRKUVVFeFFpeDNRa0ZCUVN4RlFVRkJMRmxCUVRCQ08wbEJRMjVGTEdsRFFVRnBReXhGUVVGRkxFTkJRVU03U1VGRGNFTXNTVUZCU1N4RFFVRkRMRWRCUVVjN1VVRkJSU3hOUVVGTkxHdENRVUZyUWl4RFFVRkRPMGxCUTI1RExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVGRkxFMUJRVTBzWTBGQll5eERRVUZETzBsQlJUbERMRWxCUVVrc1ZVRkJWU3hIUVVOYUxFOUJRVThzUTBGQlF5eGpRVUZqTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVVzWjBKQlFXZENMRU5CUVVNc1EwRkJRenRKUVVOdVJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNN1VVRkJSU3hWUVVGVkxFZEJRVWNzYjBKQlFXOUNMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRk0wVXNTVUZCVFN4SlFVRkpMRWRCUVdFc1JVRkJSU3hEUVVGRE8wbEJSV3hDTEVsQlFVRXNUMEZCVHl4SFFVRXdRaXhQUVVGUExGRkJRV3BETEVWQlFVVXNUVUZCVFN4SFFVRnJRaXhQUVVGUExFOUJRWHBDTEVWQlFVVXNWMEZCVnl4SFFVRkxMRTlCUVU4c1dVRkJXaXhEUVVGaE8wbEJSV3BFTEVsQlFVa3NWMEZCVnl4RlFVRkZPMUZCUTJZc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXp0TFFVTTFRanRUUVVGTk8xRkJRMHdzU1VGQlNTeFBRVUZQTEVWQlFVVTdXVUZEV0N4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeFpRVUZKTEU5QlFVOHNUMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRlRU03WVVGQlRUdFpRVU5NTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXp0VFFVTm9RenRSUVVORUxFbEJRVWtzVFVGQlRTeExRVUZMTEV0QlFVc3NSVUZCUlR0WlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMU5CUTNSQ08wdEJRMFk3U1VGRFJDeEpRVUZKTEdGQlFXRXNSMEZCUnl4blFrRkJaMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVVTVReXhKUVVGSkxHRkJRV0VzUTBGQlF5eE5RVUZOTEVWQlFVVTdVVUZEZUVJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRka1E3U1VGRlJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVVrc1IwRkJSeXhQUVVGSExFTkJRVU1zUTBGQlF6dEpRVVYwUWl4SlFVRkpPMUZCUTBZc1VVRkJVU3hEUVVGRExGVkJRVWNzVlVGQlZTeGpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVVVzUTBGQlF5eERRVUZETzB0QlF6ZERPMGxCUVVNc1QwRkJUeXhMUVVGTExFVkJRVVU3VVVGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXp0TFFVTmlPMEZCUTBnc1EwRkJRenRCUVVWRUxGTkJRVk1zWjBKQlFXZENMRU5CUVVNc1QwRkJjVUk3U1VGRk0wTXNTVUZCUVN4TFFVRkxMRWRCVTBnc1QwRkJUeXhOUVZSS0xFVkJRMHdzVFVGQlRTeEhRVkZLTEU5QlFVOHNUMEZTU0N4RlFVTk9MRmRCUVZjc1IwRlBWQ3hQUVVGUExGbEJVRVVzUlVGRFdDeExRVUZMTEVkQlRVZ3NUMEZCVHl4TlFVNUtMRVZCUTB3c1ZVRkJWU3hIUVV0U0xFOUJRVThzVjBGTVF5eEZRVU5XTEVsQlFVa3NSMEZKUml4UFFVRlBMRXRCU2t3c1JVRkRTaXhIUVVGSExFZEJSMFFzVDBGQlR5eEpRVWhPTEVWQlEwZ3NVMEZCVXl4SFFVVlFMRTlCUVU4c1ZVRkdRU3hGUVVOVUxFMUJRVTBzUjBGRFNpeFBRVUZQTEU5QlJFZ3NRMEZEU1R0SlFVVmFMRWxCUVUwc1lVRkJZU3hIUVVGSExFVkJRVVVzUTBGQlF6dEpRVVY2UWl4TFFVRkxMRWxCUVVrc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVVnVReXhKUVVGSkxFMUJRVTBzUlVGQlJUdFJRVU5XTEVsQlFVa3NXVUZCV1N4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFpRVU5xUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFOQlF6VkNPMkZCUVUwN1dVRkRUQ3hOUVVGTkxHZEVRVUY1UXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZGTEVOQlFVTTdVMEZETVVVN1MwRkRSanRKUVVWRUxFbEJRVWtzVjBGQlZ5eEZRVUZGTzFGQlEyWXNTVUZCU1N4cFFrRkJhVUlzUTBGQlF5eFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVN1dVRkRNME1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRUUVVOcVF6dGhRVUZOTzFsQlEwd3NUVUZCVFN4eFJFRkJPRU1zYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hEUVVONFJTeEpRVUZKTEVOQlEwd3NRMEZCUlN4RFFVRkRPMU5CUTB3N1MwRkRSanRKUVVWRUxFbEJRVWtzUzBGQlN5eEZRVUZGTzFGQlExUXNTVUZCU1N4WFFVRlhMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlF5OUNMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVMEZETTBJN1lVRkJUVHRaUVVOTUxFMUJRVTBzSzBOQlFYZERMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVVXNRMEZCUXp0VFFVTjRSVHRMUVVOR08wbEJSVVFzU1VGQlNTeFZRVUZWTEVWQlFVVTdVVUZEWkN4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzB0QlEyeERPMU5CUVUwc1NVRkJTU3hWUVVGVkxFdEJRVXNzUzBGQlN5eEZRVUZGTzFGQlF5OUNMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTMEZETjBJN1NVRkZSQ3hKUVVGSkxFbEJRVWtzUlVGQlJUdFJRVU5TTEVsQlFVa3NWVUZCVlN4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFpRVU0zUWl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlF6RkNPMkZCUVUwN1dVRkRUQ3hOUVVGTkxEaERRVUYxUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZGTEVOQlFVTTdVMEZEZEVVN1MwRkRSanRKUVVWRUxFZEJRVWNzU1VGQlNTeGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVU4c1IwRkJSeXhEUVVGRkxFTkJRVU1zUTBGQlF6dEpRVVY0UXl4VFFVRlRMRWxCUVVrc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCVlN4VFFVRlRMRTlCUVVjc1EwRkJReXhEUVVGRE8wbEJSWGhFTEUxQlFVMHNTVUZCU1N4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVWNzVFVGQlRTeE5RVUZITEVOQlFVTXNRMEZCUXp0SlFVVXpReXhQUVVGUExHRkJRV0VzUTBGQlF6dEJRVU4yUWl4RFFVRkRJbjA9IiwiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgZml4UGF0aEZvckFzYXJVbnBhY2sgZnJvbSBcIi4uL3V0aWxzL2VsZWN0cm9uLXV0aWxcIjtcclxuaW1wb3J0IHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSBmcm9tIFwiLi4vdXRpbHMvdGhyb3ctaWYtdW5zdXBwb3J0ZWQtb3NcIjtcclxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByaW50KHBkZiwgcHJpbnRlciwgcGRmMnByaW50ZXJQYXRoKSB7XHJcbiAgICB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0oKTtcclxuICAgIGlmICghcGRmKVxyXG4gICAgICAgIHRocm93IFwiTm8gUERGIHNwZWNpZmllZFwiO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBkZikpXHJcbiAgICAgICAgdGhyb3cgXCJObyBzdWNoIGZpbGVcIjtcclxuICAgIHZhciBwZGYycHJpbnRlciA9IHBkZjJwcmludGVyUGF0aCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBkZjJwcmludGVyLmV4ZVwiKTtcclxuICAgIGlmICghcGRmMnByaW50ZXJQYXRoKVxyXG4gICAgICAgIHBkZjJwcmludGVyUGF0aCA9IGZpeFBhdGhGb3JBc2FyVW5wYWNrKHBkZjJwcmludGVyKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXhlY1N5bmMoXCJcIi5jb25jYXQocGRmMnByaW50ZXIsIFwiIFwiKS5jb25jYXQocHJpbnRlciwgXCIgXCIpLmNvbmNhdChwZGYpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNISnBiblF1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZjSEpwYm5ReUwzQnlhVzUwTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTlCUVU4c1NVRkJTU3hOUVVGTkxFMUJRVTBzUTBGQlF6dEJRVU40UWl4UFFVRlBMRVZCUVVVc1RVRkJUU3hKUVVGSkxFTkJRVU03UVVGRGNFSXNUMEZCVHl4dlFrRkJiMElzVFVGQlRTeDNRa0ZCZDBJc1EwRkJRenRCUVVNeFJDeFBRVUZQTEdsRFFVRnBReXhOUVVGTkxHdERRVUZyUXl4RFFVRkRPMEZCUTJwR0xFOUJRVThzUlVGQlJTeFJRVUZSTEVWQlFVVXNUVUZCVFN4dlFrRkJiMElzUTBGQlF6dEJRVVU1UXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhWUVVGVkxFdEJRVXNzUTBGRE0wSXNSMEZCVnl4RlFVTllMRTlCUVdVc1JVRkRaaXhsUVVGM1FqdEpRVVY0UWl4cFEwRkJhVU1zUlVGQlJTeERRVUZETzBsQlEzQkRMRWxCUVVrc1EwRkJReXhIUVVGSE8xRkJRVVVzVFVGQlRTeHJRa0ZCYTBJc1EwRkJRenRKUVVOdVF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU03VVVGQlJTeE5RVUZOTEdOQlFXTXNRMEZCUXp0SlFVVTVReXhKUVVGSkxGZEJRVmNzUjBGQlJ5eGxRVUZsTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVVzYVVKQlFXbENMRU5CUVVNc1EwRkJRenRKUVVNM1JTeEpRVUZKTEVOQlFVTXNaVUZCWlR0UlFVRkZMR1ZCUVdVc1IwRkJSeXh2UWtGQmIwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRKUVVVeFJTeEpRVUZKTzFGQlEwWXNVVUZCVVN4RFFVRkRMRlZCUVVjc1YwRkJWeXhqUVVGSkxFOUJRVThzWTBGQlNTeEhRVUZITEVOQlFVVXNRMEZCUXl4RFFVRkRPMHRCUXpsRE8wbEJRVU1zVDBGQlR5eExRVUZMTEVWQlFVVTdVVUZEWkN4TlFVRk5MRXRCUVVzc1EwRkJRenRMUVVOaU8wRkJRMGdzUTBGQlF5SjkiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIm5vZGU6cGF0aFwiKTsiLCJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcclxuaW1wb3J0IHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSBmcm9tIFwiLi4vdXRpbHMvdGhyb3ctaWYtdW5zdXBwb3J0ZWQtb3NcIjtcclxuaW1wb3J0IGZpeFBhdGhGb3JBc2FyVW5wYWNrIGZyb20gXCIuLi91dGlscy9lbGVjdHJvbi11dGlsXCI7XHJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcclxuZnVuY3Rpb24gZ2V0UHJpbnRlcnMocGFwZXJTaXplSW5mb1BhdGgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtKCk7XHJcbiAgICAgICAgdmFyIFByaW50ZXIgPSBwYXBlclNpemVJbmZvUGF0aCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhcGVyLXNpemUtaW5mby5leGVcIik7XHJcbiAgICAgICAgaWYgKCFwYXBlclNpemVJbmZvUGF0aClcclxuICAgICAgICAgICAgUHJpbnRlciA9IGZpeFBhdGhGb3JBc2FyVW5wYWNrKFByaW50ZXIpO1xyXG4gICAgICAgIHZhciBQYXJhbWV0ZXIgPSBcIlwiLmNvbmNhdChQcmludGVyKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShleGVjU3luYyhQYXJhbWV0ZXIpLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJpbnRlcnM7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBMWEJ5YVc1MFpYSnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyZGxkQzF3Y21sdWRHVnljeTluWlhRdGNISnBiblJsY25NdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eEZRVUZGTEZGQlFWRXNSVUZCUlN4TlFVRk5MRzlDUVVGdlFpeERRVUZETzBGQlF6bERMRTlCUVU4c2FVTkJRV2xETEUxQlFVMHNhME5CUVd0RExFTkJRVU03UVVGRmFrWXNUMEZCVHl4dlFrRkJiMElzVFVGQlRTeDNRa0ZCZDBJc1EwRkJRenRCUVVNeFJDeFBRVUZQTEVsQlFVa3NUVUZCVFN4WFFVRlhMRU5CUVVNN1FVRkZOMElzVTBGQlV5eFhRVUZYTEVOQlFVTXNhVUpCUVRCQ08wbEJRemRETEVsQlFVazdVVUZEUml4cFEwRkJhVU1zUlVGQlJTeERRVUZETzFGQlEzQkRMRWxCUVVrc1QwRkJUeXhIUVVOVUxHbENRVUZwUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03VVVGRGJrVXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFqdFpRVUZGTEU5QlFVOHNSMEZCUnl4dlFrRkJiMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTm9SU3hKUVVGTkxGTkJRVk1zUjBGQlJ5eFZRVUZITEU5QlFVOHNRMEZCUlN4RFFVRkRPMUZCUXk5Q0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnVSRHRKUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTzFGQlEyUXNUVUZCVFN4TFFVRkxMRU5CUVVNN1MwRkRZanRCUVVOSUxFTkJRVU03UVVGRlJDeGxRVUZsTEZkQlFWY3NRMEZCUXlKOSIsImltcG9ydCB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0gZnJvbSBcIi4uL3V0aWxzL3Rocm93LWlmLXVuc3VwcG9ydGVkLW9zXCI7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xyXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgZml4UGF0aEZvckFzYXJVbnBhY2sgZnJvbSBcIi4uL3V0aWxzL2VsZWN0cm9uLXV0aWxcIjtcclxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW50ZXIocGFwZXJTaXplSW5mb1BhdGgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtKCk7XHJcbiAgICAgICAgdmFyIFByaW50ZXIgPSBwYXBlclNpemVJbmZvUGF0aCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhcGVyLXNpemUtaW5mby5leGVcIik7XHJcbiAgICAgICAgaWYgKCFwYXBlclNpemVJbmZvUGF0aClcclxuICAgICAgICAgICAgUHJpbnRlciA9IGZpeFBhdGhGb3JBc2FyVW5wYWNrKFByaW50ZXIpO1xyXG4gICAgICAgIHZhciBQYXJhbWV0ZXIgPSBcIlwiLmNvbmNhdChQcmludGVyKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShleGVjU3luYyhQYXJhbWV0ZXIpLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgZ2V0RGVmYXVsdFByaW50ZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBMV1JsWm1GMWJIUXRjSEpwYm5SbGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5blpYUXRaR1ZtWVhWc2RDMXdjbWx1ZEdWeUwyZGxkQzFrWldaaGRXeDBMWEJ5YVc1MFpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhwUTBGQmFVTXNUVUZCVFN4clEwRkJhME1zUTBGQlF6dEJRVU5xUml4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxFMUJRVTBzYjBKQlFXOUNMRU5CUVVNN1FVRkRPVU1zVDBGQlR5eEpRVUZKTEUxQlFVMHNUVUZCVFN4RFFVRkRPMEZCUlhoQ0xFOUJRVThzYjBKQlFXOUNMRTFCUVUwc2QwSkJRWGRDTEVOQlFVTTdRVUZGTVVRc1UwRkJVeXhwUWtGQmFVSXNRMEZCUXl4cFFrRkJNRUk3U1VGRGJrUXNTVUZCU1R0UlFVTkdMR2xEUVVGcFF5eEZRVUZGTEVOQlFVTTdVVUZEY0VNc1NVRkJTU3hQUVVGUExFZEJRMVFzYVVKQlFXbENMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNjVUpCUVhGQ0xFTkJRVU1zUTBGQlF6dFJRVU51UlN4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTzFsQlFVVXNUMEZCVHl4SFFVRkhMRzlDUVVGdlFpeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTJoRkxFbEJRVTBzVTBGQlV5eEhRVUZITEZWQlFVY3NUMEZCVHl4RFFVRkZMRU5CUVVNN1VVRkRMMElzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTI1RU8wbEJRVU1zVDBGQlR5eExRVUZMTEVWQlFVVTdVVUZEWkN4TlFVRk5MRXRCUVVzc1EwRkJRenRMUVVOaU8wRkJRMGdzUTBGQlF6dEJRVVZFTEdWQlFXVXNhVUpCUVdsQ0xFTkJRVU1pZlE9PSIsImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xyXG5pbXBvcnQgZml4UGF0aEZvckFzYXJVbnBhY2sgZnJvbSBcIi4uL3V0aWxzL2VsZWN0cm9uLXV0aWxcIjtcclxuaW1wb3J0IHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSBmcm9tIFwiLi4vdXRpbHMvdGhyb3ctaWYtdW5zdXBwb3J0ZWQtb3NcIjtcclxuLyoqXHJcbiAqIOiOt+WPluaMh+WumuaJk+WNsOacuuaJgOaUr+aMgeeahOe6uOW8oOWkp+WwjyzlpoLmnpzmg7Pojrflj5bpu5jorqTmiZPljbDmnLrnurjlvKDlpKflsI8gb3B0aW9ucy5wcmludGVyIOivt+S9v+eUqOepuuWtl+esplxyXG4gKiBHZXQgdGhlIHBhcGVyIHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpZWQgcHJpbnRlciwgaWYgeW91IHdhbnQgdG8gZ2V0IHRoZSBkZWZhdWx0IHByaW50ZXIgcGFwZXIgc2l6ZSBvcHRpb25zLnByaW50ZXIgUGxlYXNlIHVzZSBhIGJsYW5rIGNoYXJhY3RlclxyXG4gKi9cclxuZXhwb3J0IHZhciBnZXRQYXBlclNpemVJbmZvID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHsgcHJpbnRlcjogXCJcIiB9OyB9XHJcbiAgICB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0oKTtcclxuICAgIHZhciBwYXBlclNpemVJbmZvID0gb3B0aW9ucy5wYXBlclNpemVJbmZvUGF0aCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhcGVyLXNpemUtaW5mby5leGVcIik7XHJcbiAgICBpZiAoIW9wdGlvbnMucGFwZXJTaXplSW5mb1BhdGgpXHJcbiAgICAgICAgcGFwZXJTaXplSW5mbyA9IGZpeFBhdGhGb3JBc2FyVW5wYWNrKHBhcGVyU2l6ZUluZm8pO1xyXG4gICAgdmFyIFBhcmFtZXRlciA9IG9wdGlvbnMucHJpbnRlclxyXG4gICAgICAgID8gXCJcIi5jb25jYXQocGFwZXJTaXplSW5mbywgXCIgXFxcIlwiKS5jb25jYXQob3B0aW9ucy5wcmludGVyLCBcIlxcXCJcIilcclxuICAgICAgICA6IFwiXCIuY29uY2F0KHBhcGVyU2l6ZUluZm8sIFwiIFwiKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZXhlY1N5bmMoUGFyYW1ldGVyKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICog6I635Y+W5omA5pyJ5omT5Y2w5py65omA5pSv5oyB55qE57q45byg5aSn5bCPXHJcbiAqIEdldCB0aGUgcGFwZXIgc2l6ZSBzdXBwb3J0ZWQgYnkgYWxsIHByaW50ZXJzXHJcbiAqIEByZXR1cm5zIGFsbCBwYXBlclNpemVcclxuICovXHJcbmV4cG9ydCB2YXIgZ2V0UGFwZXJTaXplSW5mb0FsbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtKCk7XHJcbiAgICB2YXIgcGFwZXJTaXplSW5mbyA9IG9wdGlvbnMucGFwZXJTaXplSW5mb1BhdGggfHwgcGF0aC5qb2luKF9fZGlybmFtZSwgXCJwYXBlci1zaXplLWluZm8uZXhlXCIpO1xyXG4gICAgaWYgKCFvcHRpb25zLnBhcGVyU2l6ZUluZm9QYXRoKVxyXG4gICAgICAgIHBhcGVyU2l6ZUluZm8gPSBmaXhQYXRoRm9yQXNhclVucGFjayhwYXBlclNpemVJbmZvKTtcclxuICAgIHZhciBQYXJhbWV0ZXIgPSBcIlwiLmNvbmNhdChwYXBlclNpemVJbmZvLCBcIiAtLWFsbFwiKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZXhlY1N5bmMoUGFyYW1ldGVyKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwTFhCaGNHVnlMWE5wZW1VdGFXNW1ieTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OW5aWFF0Y0dGd1pYSXRjMmw2WlM5blpYUXRjR0Z3WlhJdGMybDZaUzFwYm1adkxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEU5QlFVOHNTVUZCU1N4TlFVRk5MRTFCUVUwc1EwRkJRenRCUVVONFFpeFBRVUZQTEVWQlFVVXNVVUZCVVN4RlFVRkZMRTFCUVUwc2IwSkJRVzlDTEVOQlFVTTdRVUZET1VNc1QwRkJUeXh2UWtGQmIwSXNUVUZCVFN4M1FrRkJkMElzUTBGQlF6dEJRVU14UkN4UFFVRlBMR2xEUVVGcFF5eE5RVUZOTEd0RFFVRnJReXhEUVVGRE8wRkJSMnBHT3pzN1IwRkhSenRCUVVOSUxFMUJRVTBzUTBGQlF5eEpRVUZOTEdkQ1FVRm5RaXhIUVVGSExGVkJRemxDTEU5QlFTdERPMGxCUVM5RExIZENRVUZCTEVWQlFVRXNXVUZCYTBNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUlVGQlJUdEpRVVV2UXl4cFEwRkJhVU1zUlVGQlJTeERRVUZETzBsQlJYQkRMRWxCUVVrc1lVRkJZU3hIUVVObUxFOUJRVThzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eERRVUZETzBsQlF6TkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zYVVKQlFXbENPMUZCUXpWQ0xHRkJRV0VzUjBGQlJ5eHZRa0ZCYjBJc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF6dEpRVVYwUkN4SlFVRk5MRk5CUVZNc1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR6dFJRVU12UWl4RFFVRkRMRU5CUVVNc1ZVRkJSeXhoUVVGaExHZENRVUZMTEU5QlFVOHNRMEZCUXl4UFFVRlBMRTlCUVVjN1VVRkRla01zUTBGQlF5eERRVUZETEZWQlFVY3NZVUZCWVN4TlFVRkhMRU5CUVVNN1NVRkZlRUlzU1VGQlNUdFJRVU5HTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenRMUVVOdVJEdEpRVUZETEU5QlFVOHNTMEZCU3l4RlFVRkZPMUZCUTJRc1RVRkJUU3hMUVVGTExFTkJRVU03UzBGRFlqdEJRVU5JTEVOQlFVTXNRMEZCUXp0QlFVVkdPenM3TzBkQlNVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1NVRkJUU3h0UWtGQmJVSXNSMEZCUnl4VlFVTnFReXhQUVVGdFJEdEpRVUZ1UkN4M1FrRkJRU3hGUVVGQkxGbEJRVzFFTzBsQlJXNUVMR2xEUVVGcFF5eEZRVUZGTEVOQlFVTTdTVUZGY0VNc1NVRkJTU3hoUVVGaExFZEJRMllzVDBGQlR5eERRVUZETEdsQ1FVRnBRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMSEZDUVVGeFFpeERRVUZETEVOQlFVTTdTVUZETTBVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eHBRa0ZCYVVJN1VVRkROVUlzWVVGQllTeEhRVUZITEc5Q1FVRnZRaXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETzBsQlJYUkVMRWxCUVUwc1UwRkJVeXhIUVVGSExGVkJRVWNzWVVGQllTeFhRVUZSTEVOQlFVTTdTVUZGTTBNc1NVRkJTVHRSUVVOR0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnVSRHRKUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTzFGQlEyUXNUVUZCVFN4TFFVRkxMRU5CUVVNN1MwRkRZanRCUVVOSUxFTkJRVU1zUTBGQlF5SjkiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4vLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgY2FjaGUgYXJlIHVzZWQgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcbl9fd2VicGFja19tb2R1bGVzX19bX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTIxXSgwLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJhIiwiaSIsImdsb2JhbCIsInJlcXVpcmUiLCJfYSIsImlzVXNpbmdBc2FyIiwicHJvY2VzcyIsInZlcnNpb25zIiwiZmlsZW5hbWUiLCJpbmNsdWRlcyIsInBhdGgiLCJyZXBsYWNlIiwidGhyb3dJZlVuc3VwcG9ydGVkT3MiLCJwbGF0Zm9ybSIsInZhbGlkU3Vic2V0cyIsInZhbGlkT3JpZW50YXRpb25zIiwidmFsaWRTY2FsZXMiLCJ2YWxpZFNpZGVzIiwicHJpbnQiLCJwZGYiLCJvcHRpb25zIiwic3VtYXRyYVBkZiIsInN1bWF0cmFQZGZQYXRoIiwiX19kaXJuYW1lIiwiYXJncyIsInByaW50ZXIiLCJzaWxlbnQiLCJwcmludERpYWxvZyIsInB1c2giLCJjb25jYXQiLCJwcmludFNldHRpbmdzIiwicGFnZXMiLCJzdWJzZXQiLCJvcmllbnRhdGlvbiIsInNjYWxlIiwibW9ub2Nocm9tZSIsInNpZGUiLCJiaW4iLCJwYXBlclNpemUiLCJjb3BpZXMiLCJqb2luIiwiZ2V0UHJpbnRTZXR0aW5ncyIsImxlbmd0aCIsImV4ZWNTeW5jIiwiZXJyb3IiLCJwZGYycHJpbnRlclBhdGgiLCJwZGYycHJpbnRlciIsInBhcGVyU2l6ZUluZm9QYXRoIiwiUHJpbnRlciIsIlBhcmFtZXRlciIsIkpTT04iLCJwYXJzZSIsInRvU3RyaW5nIiwiZ2V0UGFwZXJTaXplSW5mbyIsInBhcGVyU2l6ZUluZm8iLCJnZXRQYXBlclNpemVJbmZvQWxsIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwicyJdLCJzb3VyY2VSb290IjoiIn0=