UNPKG

@abpncio/pdf-to-printer

Version:

A utility to print PDF files from Node.js and Electron

2 lines 23.8 kB
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var i in n)("object"==typeof exports?exports:e)[i]=n[i]}}(global,(()=>(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{getDefaultPrinter:()=>b,getPrinters:()=>x,print:()=>w});const n=require("path");var i=e.n(n);const r=require("fs");var o=e.n(r);const a=require("child_process"),s=require("util"),c=e.n(s)().promisify(a.execFile),u="electron"in process.versions&&process.mainModule&&process.mainModule.filename.includes("app.asar"),l=require("os");var p=e.n(l);function d(){if("win32"!==p().platform())throw"Operating System not supported"}const f=["odd","even"],h=["portrait","landscape"],m=["noscale","shrink","fit"],v=["duplex","duplexshort","duplexlong","simplex"],y=["A2","A3","A4","A5","A6","letter","legal","tabloid","statement"];function w(e,t={}){return n=this,r=void 0,s=function*(){if(d(),!e)throw"No PDF specified";if(!o().existsSync(e))throw"No such file";let n=t.sumatraPdfPath||i().join(__dirname,"SumatraPDF.exe");var r;t.sumatraPdfPath||(r=n,n=u?r.replace("app.asar","app.asar.unpacked"):r);const a=[],{printer:s,silent:l,printDialog:p}=t;p?a.push("-print-dialog"):(s?a.push("-print-to",s):a.push("-print-to-default"),!1!==l&&a.push("-silent"));const w=function(e){const{pages:t,subset:n,orientation:i,scale:r,monochrome:o,side:a,bin:s,paperSize:c,copies:u}=e,l=[];if(t&&l.push(t),n){if(!f.includes(n))throw`Invalid subset provided. Valid names: ${f.join(", ")}`;l.push(n)}if(i){if(!h.includes(i))throw`Invalid orientation provided. Valid names: ${h.join(", ")}`;l.push(i)}if(r){if(!m.includes(r))throw`Invalid scale provided. Valid names: ${m.join(", ")}`;l.push(r)}if(o?l.push("monochrome"):!1===o&&l.push("color"),a){if(!v.includes(a))throw`Invalid side provided. Valid names: ${v.join(", ")}`;l.push(a)}if(s&&l.push(`bin=${s}`),c){if(!y.includes(c))throw`Invalid paper size provided. Valid names: ${y.join(", ")}`;l.push(`paper=${c}`)}return u&&l.push(`${u}x`),l}(t);w.length&&a.push("-print-settings",w.join(",")),a.push(e);try{yield c(n,a)}catch(e){throw e}},new((a=void 0)||(a=Promise))((function(e,t){function i(e){try{c(s.next(e))}catch(e){t(e)}}function o(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a((function(e){e(n)}))).then(i,o)}c((s=s.apply(n,r||[])).next())}));var n,r,a,s}function P(e){const t={deviceId:"",name:""};return{isValid:e.split(/\r?\n/).some((e=>{const[n,i]=e.split(":").map((e=>e.trim())),r=n.toLowerCase();return"deviceid"===r&&(t.deviceId=i),"name"===r&&(t.name=i),!(!t.deviceId||!t.name)})),printerData:t}}const x=function(){return e=this,t=void 0,i=function*(){try{d();const{stdout:e}=yield c("Powershell.exe",["-Command","Get-CimInstance Win32_Printer -Property DeviceID,Name"]);return function(e){const t=[];return e.split(/(\r?\n){2,}/).map((e=>e.trim())).filter((e=>!!e)).forEach((e=>{const{isValid:n,printerData:i}=P(e);n&&t.push(i)})),t}(e)}catch(e){throw e}},new((n=void 0)||(n=Promise))((function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}));var e,t,n,i};const b=function(){return e=this,t=void 0,i=function*(){try{d();const{stdout:e}=yield c("Powershell.exe",["-Command","Get-CimInstance Win32_Printer -Property DeviceID,Name -Filter Default=true"]),t=e.trim();if(!e)return null;const{isValid:n,printerData:i}=P(t);return n?i:null}catch(e){throw e}},new((n=void 0)||(n=Promise))((function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}));var e,t,n,i};return t})())); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU1LLGNBUXpCLE1BTG1CLGFBQWZELElBQTJCWCxFQUFZQyxTQUFXNUMsR0FHbkMsU0FBZnNELElBQXVCWCxFQUFZRSxLQUFPN0MsTUFFcEMyQyxFQUFZQyxXQUFZRCxFQUFZRSxLQUFLLElBS25ERixjQUVKLENDT0EsUUEvQkEsVyxxQ0FtQkUsSUFDRSxJQUNBLE1BQU0sT0FBRWEsU0FBaUIsRUFBYyxpQkFBa0IsQ0FDdkQsV0FDQSwwREFFRixPQXhCRixTQUF1QkEsR0FDckIsTUFBTUMsRUFBc0IsR0FjNUIsT0FaQUQsRUFDR1QsTUFBTSxlQUNOSSxLQUFLM0IsR0FBWUEsRUFBUTZCLFNBQ3pCSyxRQUFRbEMsS0FBY0EsSUFDdEJtQyxTQUFTbkMsSUFDUixNQUFNLFFBQUVzQixFQUFPLFlBQUVILEdBQWdCRCxFQUFlbEIsR0FFM0NzQixHQUVMVyxFQUFTOUIsS0FBS2dCLEVBQVksSUFHdkJjLENBQ1QsQ0FRU0csQ0FBY0osRSxDQUNyQixNQUFPZixHQUNQLE1BQU1BLEMsQ0FFVixFLGdTQ0FBLFFBekJBLFcscUNBQ0UsSUFDRSxJQUVBLE1BQU0sT0FBRWUsU0FBaUIsRUFBYyxpQkFBa0IsQ0FDdkQsV0FDQSwrRUFHSWhDLEVBQVVnQyxFQUFPSCxPQUd2QixJQUFLRyxFQUFRLE9BQU8sS0FFcEIsTUFBTSxRQUFFVixFQUFPLFlBQUVILEdBQWdCRCxFQUFlbEIsR0FHaEQsT0FBS3NCLEVBRUVILEVBRmMsSSxDQUdyQixNQUFPRixHQUNQLE1BQU1BLEMsQ0FFVixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AYWJwbmNpby9wZGYtdG8tcHJpbnRlci93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInBhdGhcIiIsIndlYnBhY2s6Ly9AYWJwbmNpby9wZGYtdG8tcHJpbnRlci9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZnNcIiIsIndlYnBhY2s6Ly9AYWJwbmNpby9wZGYtdG8tcHJpbnRlci9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY2hpbGRfcHJvY2Vzc1wiIiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1dGlsXCIiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvLi9zcmMvdXRpbHMvZXhlYy1maWxlLWFzeW5jLnRzIiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyLy4vc3JjL3V0aWxzL2VsZWN0cm9uLXV0aWwudHMiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcIm9zXCIiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvLi9zcmMvdXRpbHMvdGhyb3ctaWYtdW5zdXBwb3J0ZWQtb3MudHMiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvLi9zcmMvcHJpbnQvcHJpbnQudHMiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvLi9zcmMvdXRpbHMvd2luZG93cy1wcmludGVyLXZhbGlkLnRzIiwid2VicGFjazovL0BhYnBuY2lvL3BkZi10by1wcmludGVyLy4vc3JjL2dldC1wcmludGVycy9nZXQtcHJpbnRlcnMudHMiLCJ3ZWJwYWNrOi8vQGFicG5jaW8vcGRmLXRvLXByaW50ZXIvLi9zcmMvZ2V0LWRlZmF1bHQtcHJpbnRlci9nZXQtZGVmYXVsdC1wcmludGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShnbG9iYWwsICgpID0+IHtcbnJldHVybiAiLCIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiZnNcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwidXRpbFwiKTsiLCJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdXRpbCBmcm9tIFwidXRpbFwiO1xuXG5jb25zdCBleGVjRmlsZUFzeW5jID0gdXRpbC5wcm9taXNpZnkoZXhlY0ZpbGUpO1xuXG5leHBvcnQgZGVmYXVsdCBleGVjRmlsZUFzeW5jO1xuIiwiLy8gVGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VsZWN0cm9uLXV0aWwvYmxvYi9tYXN0ZXIvbm9kZS5qc1xuXG5jb25zdCBpc0VsZWN0cm9uID0gXCJlbGVjdHJvblwiIGluIHByb2Nlc3MudmVyc2lvbnM7XG5cbmNvbnN0IGlzVXNpbmdBc2FyID1cbiAgaXNFbGVjdHJvbiAmJlxuICBwcm9jZXNzLm1haW5Nb2R1bGUgJiZcbiAgcHJvY2Vzcy5tYWluTW9kdWxlLmZpbGVuYW1lLmluY2x1ZGVzKFwiYXBwLmFzYXJcIik7XG5cbmZ1bmN0aW9uIGZpeFBhdGhGb3JBc2FyVW5wYWNrKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpc1VzaW5nQXNhciA/IHBhdGgucmVwbGFjZShcImFwcC5hc2FyXCIsIFwiYXBwLmFzYXIudW5wYWNrZWRcIikgOiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaXhQYXRoRm9yQXNhclVucGFjaztcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwib3NcIik7IiwiaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJvd0lmVW5zdXBwb3J0ZWRPcygpIHtcbiAgaWYgKG9zLnBsYXRmb3JtKCkgIT09IFwid2luMzJcIikge1xuICAgIHRocm93IFwiT3BlcmF0aW5nIFN5c3RlbSBub3Qgc3VwcG9ydGVkXCI7XG4gIH1cbn1cbiIsImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgZXhlY0FzeW5jIGZyb20gXCIuLi91dGlscy9leGVjLWZpbGUtYXN5bmNcIjtcbmltcG9ydCBmaXhQYXRoRm9yQXNhclVucGFjayBmcm9tIFwiLi4vdXRpbHMvZWxlY3Ryb24tdXRpbFwiO1xuaW1wb3J0IHRocm93SWZVbnN1cHBvcnRlZE9wZXJhdGluZ1N5c3RlbSBmcm9tIFwiLi4vdXRpbHMvdGhyb3ctaWYtdW5zdXBwb3J0ZWQtb3NcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcmludE9wdGlvbnMge1xuICBwcmludGVyPzogc3RyaW5nO1xuICBwYWdlcz86IHN0cmluZztcbiAgc3Vic2V0Pzogc3RyaW5nO1xuICBvcmllbnRhdGlvbj86IHN0cmluZztcbiAgc2NhbGU/OiBzdHJpbmc7XG4gIG1vbm9jaHJvbWU/OiBib29sZWFuO1xuICBzaWRlPzogc3RyaW5nO1xuICBiaW4/OiBzdHJpbmc7XG4gIHBhcGVyU2l6ZT86IHN0cmluZztcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgcHJpbnREaWFsb2c/OiBib29sZWFuO1xuICBzdW1hdHJhUGRmUGF0aD86IHN0cmluZztcbiAgY29waWVzPzogbnVtYmVyO1xufVxuXG5jb25zdCB2YWxpZFN1YnNldHMgPSBbXCJvZGRcIiwgXCJldmVuXCJdO1xuY29uc3QgdmFsaWRPcmllbnRhdGlvbnMgPSBbXCJwb3J0cmFpdFwiLCBcImxhbmRzY2FwZVwiXTtcbmNvbnN0IHZhbGlkU2NhbGVzID0gW1wibm9zY2FsZVwiLCBcInNocmlua1wiLCBcImZpdFwiXTtcbmNvbnN0IHZhbGlkU2lkZXMgPSBbXCJkdXBsZXhcIiwgXCJkdXBsZXhzaG9ydFwiLCBcImR1cGxleGxvbmdcIiwgXCJzaW1wbGV4XCJdO1xuY29uc3QgdmFsaWRQYXBlclNpemVzID0gW1xuICBcIkEyXCIsXG4gIFwiQTNcIixcbiAgXCJBNFwiLFxuICBcIkE1XCIsXG4gIFwiQTZcIixcbiAgXCJsZXR0ZXJcIixcbiAgXCJsZWdhbFwiLFxuICBcInRhYmxvaWRcIixcbiAgXCJzdGF0ZW1lbnRcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHByaW50KFxuICBwZGY6IHN0cmluZyxcbiAgb3B0aW9uczogUHJpbnRPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0oKTtcbiAgaWYgKCFwZGYpIHRocm93IFwiTm8gUERGIHNwZWNpZmllZFwiO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGRmKSkgdGhyb3cgXCJObyBzdWNoIGZpbGVcIjtcblxuICBsZXQgc3VtYXRyYVBkZiA9XG4gICAgb3B0aW9ucy5zdW1hdHJhUGRmUGF0aCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIlN1bWF0cmFQREYuZXhlXCIpO1xuICBpZiAoIW9wdGlvbnMuc3VtYXRyYVBkZlBhdGgpIHN1bWF0cmFQZGYgPSBmaXhQYXRoRm9yQXNhclVucGFjayhzdW1hdHJhUGRmKTtcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHsgcHJpbnRlciwgc2lsZW50LCBwcmludERpYWxvZyB9ID0gb3B0aW9ucztcblxuICBpZiAocHJpbnREaWFsb2cpIHtcbiAgICBhcmdzLnB1c2goXCItcHJpbnQtZGlhbG9nXCIpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcmludGVyKSB7XG4gICAgICBhcmdzLnB1c2goXCItcHJpbnQtdG9cIiwgcHJpbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MucHVzaChcIi1wcmludC10by1kZWZhdWx0XCIpO1xuICAgIH1cbiAgICBpZiAoc2lsZW50ICE9PSBmYWxzZSkge1xuICAgICAgYXJncy5wdXNoKFwiLXNpbGVudFwiKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcmludFNldHRpbmdzID0gZ2V0UHJpbnRTZXR0aW5ncyhvcHRpb25zKTtcblxuICBpZiAocHJpbnRTZXR0aW5ncy5sZW5ndGgpIHtcbiAgICBhcmdzLnB1c2goXCItcHJpbnQtc2V0dGluZ3NcIiwgcHJpbnRTZXR0aW5ncy5qb2luKFwiLFwiKSk7XG4gIH1cblxuICBhcmdzLnB1c2gocGRmKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNBc3luYyhzdW1hdHJhUGRmLCBhcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcmludFNldHRpbmdzKG9wdGlvbnM6IFByaW50T3B0aW9ucyk6IHN0cmluZ1tdIHtcbiAgY29uc3Qge1xuICAgIHBhZ2VzLFxuICAgIHN1YnNldCxcbiAgICBvcmllbnRhdGlvbixcbiAgICBzY2FsZSxcbiAgICBtb25vY2hyb21lLFxuICAgIHNpZGUsXG4gICAgYmluLFxuICAgIHBhcGVyU2l6ZSxcbiAgICBjb3BpZXMsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHByaW50U2V0dGluZ3MgPSBbXTtcblxuICBpZiAocGFnZXMpIHtcbiAgICBwcmludFNldHRpbmdzLnB1c2gocGFnZXMpO1xuICB9XG5cbiAgaWYgKHN1YnNldCkge1xuICAgIGlmICh2YWxpZFN1YnNldHMuaW5jbHVkZXMoc3Vic2V0KSkge1xuICAgICAgcHJpbnRTZXR0aW5ncy5wdXNoKHN1YnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHN1YnNldCBwcm92aWRlZC4gVmFsaWQgbmFtZXM6ICR7dmFsaWRTdWJzZXRzLmpvaW4oXCIsIFwiKX1gO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcmllbnRhdGlvbikge1xuICAgIGlmICh2YWxpZE9yaWVudGF0aW9ucy5pbmNsdWRlcyhvcmllbnRhdGlvbikpIHtcbiAgICAgIHByaW50U2V0dGluZ3MucHVzaChvcmllbnRhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIG9yaWVudGF0aW9uIHByb3ZpZGVkLiBWYWxpZCBuYW1lczogJHt2YWxpZE9yaWVudGF0aW9ucy5qb2luKFxuICAgICAgICBcIiwgXCJcbiAgICAgICl9YDtcbiAgICB9XG4gIH1cblxuICBpZiAoc2NhbGUpIHtcbiAgICBpZiAodmFsaWRTY2FsZXMuaW5jbHVkZXMoc2NhbGUpKSB7XG4gICAgICBwcmludFNldHRpbmdzLnB1c2goc2NhbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBgSW52YWxpZCBzY2FsZSBwcm92aWRlZC4gVmFsaWQgbmFtZXM6ICR7dmFsaWRTY2FsZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1vbm9jaHJvbWUpIHtcbiAgICBwcmludFNldHRpbmdzLnB1c2goXCJtb25vY2hyb21lXCIpO1xuICB9IGVsc2UgaWYgKG1vbm9jaHJvbWUgPT09IGZhbHNlKSB7XG4gICAgcHJpbnRTZXR0aW5ncy5wdXNoKFwiY29sb3JcIik7XG4gIH1cblxuICBpZiAoc2lkZSkge1xuICAgIGlmICh2YWxpZFNpZGVzLmluY2x1ZGVzKHNpZGUpKSB7XG4gICAgICBwcmludFNldHRpbmdzLnB1c2goc2lkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHNpZGUgcHJvdmlkZWQuIFZhbGlkIG5hbWVzOiAke3ZhbGlkU2lkZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpbikge1xuICAgIHByaW50U2V0dGluZ3MucHVzaChgYmluPSR7YmlufWApO1xuICB9XG5cbiAgaWYgKHBhcGVyU2l6ZSkge1xuICAgIGlmICh2YWxpZFBhcGVyU2l6ZXMuaW5jbHVkZXMocGFwZXJTaXplKSkge1xuICAgICAgcHJpbnRTZXR0aW5ncy5wdXNoKGBwYXBlcj0ke3BhcGVyU2l6ZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgYEludmFsaWQgcGFwZXIgc2l6ZSBwcm92aWRlZC4gVmFsaWQgbmFtZXM6ICR7dmFsaWRQYXBlclNpemVzLmpvaW4oXG4gICAgICAgIFwiLCBcIlxuICAgICAgKX1gO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3BpZXMpIHtcbiAgICBwcmludFNldHRpbmdzLnB1c2goYCR7Y29waWVzfXhgKTtcbiAgfVxuXG4gIHJldHVybiBwcmludFNldHRpbmdzO1xufVxuIiwiaW1wb3J0IHsgUHJpbnRlciB9IGZyb20gXCIuLi9nZXQtZGVmYXVsdC1wcmludGVyL2dldC1kZWZhdWx0LXByaW50ZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZFByaW50ZXIocHJpbnRlcjogc3RyaW5nKToge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBwcmludGVyRGF0YTogUHJpbnRlcjtcbn0ge1xuICBjb25zdCBwcmludGVyRGF0YTogUHJpbnRlciA9IHtcbiAgICBkZXZpY2VJZDogXCJcIixcbiAgICBuYW1lOiBcIlwiLFxuICB9O1xuXG4gIGNvbnN0IGlzVmFsaWQgPSBwcmludGVyLnNwbGl0KC9cXHI/XFxuLykuc29tZSgobGluZSkgPT4ge1xuICAgIGNvbnN0IFtsYWJlbCwgdmFsdWVdID0gbGluZS5zcGxpdChcIjpcIikubWFwKChlbCkgPT4gZWwudHJpbSgpKTtcblxuICAgIGNvbnN0IGxvd2VyTGFiZWwgPSBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChsb3dlckxhYmVsID09PSBcImRldmljZWlkXCIpIHByaW50ZXJEYXRhLmRldmljZUlkID0gdmFsdWU7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKGxvd2VyTGFiZWwgPT09IFwibmFtZVwiKSBwcmludGVyRGF0YS5uYW1lID0gdmFsdWU7XG5cbiAgICByZXR1cm4gISEocHJpbnRlckRhdGEuZGV2aWNlSWQgJiYgcHJpbnRlckRhdGEubmFtZSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaXNWYWxpZCxcbiAgICBwcmludGVyRGF0YSxcbiAgfTtcbn1cbiIsImltcG9ydCBleGVjRmlsZUFzeW5jIGZyb20gXCIuLi91dGlscy9leGVjLWZpbGUtYXN5bmNcIjtcbmltcG9ydCBpc1ZhbGlkUHJpbnRlciBmcm9tIFwiLi4vdXRpbHMvd2luZG93cy1wcmludGVyLXZhbGlkXCI7XG5pbXBvcnQgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtIGZyb20gXCIuLi91dGlscy90aHJvdy1pZi11bnN1cHBvcnRlZC1vc1wiO1xuaW1wb3J0IHsgUHJpbnRlciB9IGZyb20gXCIuLi9nZXQtZGVmYXVsdC1wcmludGVyL2dldC1kZWZhdWx0LXByaW50ZXJcIjtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UHJpbnRlcnMoKTogUHJvbWlzZTxQcmludGVyW10+IHtcbiAgZnVuY3Rpb24gc3Rkb3V0SGFuZGxlcihzdGRvdXQ6IHN0cmluZykge1xuICAgIGNvbnN0IHByaW50ZXJzOiBQcmludGVyW10gPSBbXTtcblxuICAgIHN0ZG91dFxuICAgICAgLnNwbGl0KC8oXFxyP1xcbil7Mix9LylcbiAgICAgIC5tYXAoKHByaW50ZXIpID0+IHByaW50ZXIudHJpbSgpKVxuICAgICAgLmZpbHRlcigocHJpbnRlcikgPT4gISFwcmludGVyKVxuICAgICAgLmZvckVhY2goKHByaW50ZXIpID0+IHtcbiAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBwcmludGVyRGF0YSB9ID0gaXNWYWxpZFByaW50ZXIocHJpbnRlcik7XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG5cbiAgICAgICAgcHJpbnRlcnMucHVzaChwcmludGVyRGF0YSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBwcmludGVycztcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhyb3dJZlVuc3VwcG9ydGVkT3BlcmF0aW5nU3lzdGVtKCk7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoXCJQb3dlcnNoZWxsLmV4ZVwiLCBbXG4gICAgICBcIi1Db21tYW5kXCIsXG4gICAgICBcIkdldC1DaW1JbnN0YW5jZSBXaW4zMl9QcmludGVyIC1Qcm9wZXJ0eSBEZXZpY2VJRCxOYW1lXCIsXG4gICAgXSk7XG4gICAgcmV0dXJuIHN0ZG91dEhhbmRsZXIoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRQcmludGVycztcbiIsImltcG9ydCBleGVjRmlsZUFzeW5jIGZyb20gXCIuLi91dGlscy9leGVjLWZpbGUtYXN5bmNcIjtcbmltcG9ydCB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0gZnJvbSBcIi4uL3V0aWxzL3Rocm93LWlmLXVuc3VwcG9ydGVkLW9zXCI7XG5pbXBvcnQgaXNWYWxpZFByaW50ZXIgZnJvbSBcIi4uL3V0aWxzL3dpbmRvd3MtcHJpbnRlci12YWxpZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaW50ZXIge1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRQcmludGVyKCk6IFByb21pc2U8UHJpbnRlciB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICB0aHJvd0lmVW5zdXBwb3J0ZWRPcGVyYXRpbmdTeXN0ZW0oKTtcblxuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKFwiUG93ZXJzaGVsbC5leGVcIiwgW1xuICAgICAgXCItQ29tbWFuZFwiLFxuICAgICAgXCJHZXQtQ2ltSW5zdGFuY2UgV2luMzJfUHJpbnRlciAtUHJvcGVydHkgRGV2aWNlSUQsTmFtZSAtRmlsdGVyIERlZmF1bHQ9dHJ1ZVwiLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcHJpbnRlciA9IHN0ZG91dC50cmltKCk7XG5cbiAgICAvLyBJZiBzdGRvdXQgaXMgZW1wdHksIHRoZXJlIGlzIG5vIGRlZmF1bHQgcHJpbnRlclxuICAgIGlmICghc3Rkb3V0KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHsgaXNWYWxpZCwgcHJpbnRlckRhdGEgfSA9IGlzVmFsaWRQcmludGVyKHByaW50ZXIpO1xuXG4gICAgLy8gRGV2aWNlSUQgb3IgTmFtZSBub3QgZm91bmRcbiAgICBpZiAoIWlzVmFsaWQpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHByaW50ZXJEYXRhO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldERlZmF1bHRQcmludGVyO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwiZ2xvYmFsIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInJlcXVpcmUiLCJleGVjRmlsZSIsImlzVXNpbmdBc2FyIiwicHJvY2VzcyIsInZlcnNpb25zIiwibWFpbk1vZHVsZSIsImZpbGVuYW1lIiwiaW5jbHVkZXMiLCJ0aHJvd0lmVW5zdXBwb3J0ZWRPcyIsInZhbGlkU3Vic2V0cyIsInZhbGlkT3JpZW50YXRpb25zIiwidmFsaWRTY2FsZXMiLCJ2YWxpZFNpZGVzIiwidmFsaWRQYXBlclNpemVzIiwicHJpbnQiLCJwZGYiLCJvcHRpb25zIiwic3VtYXRyYVBkZiIsInN1bWF0cmFQZGZQYXRoIiwiX19kaXJuYW1lIiwicGF0aCIsInJlcGxhY2UiLCJhcmdzIiwicHJpbnRlciIsInNpbGVudCIsInByaW50RGlhbG9nIiwicHVzaCIsInByaW50U2V0dGluZ3MiLCJwYWdlcyIsInN1YnNldCIsIm9yaWVudGF0aW9uIiwic2NhbGUiLCJtb25vY2hyb21lIiwic2lkZSIsImJpbiIsInBhcGVyU2l6ZSIsImNvcGllcyIsImpvaW4iLCJnZXRQcmludFNldHRpbmdzIiwibGVuZ3RoIiwiZXJyb3IiLCJpc1ZhbGlkUHJpbnRlciIsInByaW50ZXJEYXRhIiwiZGV2aWNlSWQiLCJuYW1lIiwiaXNWYWxpZCIsInNwbGl0Iiwic29tZSIsImxpbmUiLCJsYWJlbCIsIm1hcCIsImVsIiwidHJpbSIsImxvd2VyTGFiZWwiLCJ0b0xvd2VyQ2FzZSIsInN0ZG91dCIsInByaW50ZXJzIiwiZmlsdGVyIiwiZm9yRWFjaCIsInN0ZG91dEhhbmRsZXIiXSwic291cmNlUm9vdCI6IiJ9