/**
 * Skipped minification because the original files appears to be already minified.
 * Original file: /npm/@57block/stellar-resource-usage@0.0.4/dist/main.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
import{createRequire as E0}from"node:module";var eu=Object.create;var{getPrototypeOf:D0,defineProperty:zD,getOwnPropertyNames:u0}=Object;var F0=Object.prototype.hasOwnProperty;var ZD=(D,u,F)=>{F=D!=null?eu(D0(D)):{};let E=u||!D||!D.__esModule?zD(F,"default",{value:D,enumerable:!0}):F;for(let C of u0(D))if(!F0.call(E,C))zD(E,C,{get:()=>D[C],enumerable:!0});return E};var R=(D,u)=>()=>(u||D((u={exports:{}}).exports,u),u.exports);var c=E0(import.meta.url);var i=R((YF,GD)=>{var o=[],$D=0,b=(D,u)=>{if($D>=u)o.push(D)};b.WARN=1;b.INFO=2;b.DEBUG=3;b.reset=()=>{o=[]};b.setDebugLevel=(D)=>{$D=D};b.warn=(D)=>b(D,b.WARN);b.info=(D)=>b(D,b.INFO);b.debug=(D)=>b(D,b.DEBUG);b.debugMessages=()=>o;GD.exports=b});var UD=R((XF,QD)=>{QD.exports=({onlyFirst:D=!1}={})=>{let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,D?void 0:"g")}});var RD=R((OF,JD)=>{var C0=UD();JD.exports=(D)=>typeof D==="string"?D.replace(C0(),""):D});var VD=R((qF,l)=>{var fD=(D)=>{if(Number.isNaN(D))return!1;if(D>=4352&&(D<=4447||D===9001||D===9002||11904<=D&&D<=12871&&D!==12351||12880<=D&&D<=19903||19968<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65131||65281<=D&&D<=65376||65504<=D&&D<=65510||110592<=D&&D<=110593||127488<=D&&D<=127569||131072<=D&&D<=262141))return!0;return!1};l.exports=fD;l.exports.default=fD});var ND=R((zF,KD)=>{KD.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var bD=R((ZF,t)=>{var B0=RD(),A0=VD(),H0=ND(),MD=(D)=>{if(typeof D!=="string"||D.length===0)return 0;if(D=B0(D),D.length===0)return 0;D=D.replace(H0(),"  ");let u=0;for(let F=0;F<D.length;F++){let E=D.codePointAt(F);if(E<=31||E>=127&&E<=159)continue;if(E>=768&&E<=879)continue;if(E>65535)F++;u+=A0(E)?2:1}return u};t.exports=MD;t.exports.default=MD});var e=R(($F,TD)=>{var ID=bD();function r(D){return D?/\u001b\[((?:\d*;){0,5}\d*)m/g:/\u001b\[(?:\d*;){0,5}\d*m/g}function k(D){let u=r();return(""+D).replace(u,"").split(`
`).reduce(function(C,B){return ID(B)>C?ID(B):C},0)}function m(D,u){return Array(u+1).join(D)}function Y0(D,u,F,E){let C=k(D);if(u+1>=C){let B=u-C;switch(E){case"right":{D=m(F,B)+D;break}case"center":{let H=Math.ceil(B/2),q=B-H;D=m(F,q)+D+m(F,H);break}default:{D=D+m(F,B);break}}}return D}var L={};function p(D,u,F){u="\x1B["+u+"m",F="\x1B["+F+"m",L[u]={set:D,to:!0},L[F]={set:D,to:!1},L[D]={on:u,off:F}}p("bold",1,22);p("italics",3,23);p("underline",4,24);p("inverse",7,27);p("strikethrough",9,29);function WD(D,u){let F=u[1]?parseInt(u[1].split(";")[0]):0;if(F>=30&&F<=39||F>=90&&F<=97){D.lastForegroundAdded=u[0];return}if(F>=40&&F<=49||F>=100&&F<=107){D.lastBackgroundAdded=u[0];return}if(F===0){for(let C in D)if(Object.prototype.hasOwnProperty.call(D,C))delete D[C];return}let E=L[u[0]];if(E)D[E.set]=E.to}function X0(D){let u=r(!0),F=u.exec(D),E={};while(F!==null)WD(E,F),F=u.exec(D);return E}function jD(D,u){let{lastBackgroundAdded:F,lastForegroundAdded:E}=D;if(delete D.lastBackgroundAdded,delete D.lastForegroundAdded,Object.keys(D).forEach(function(C){if(D[C])u+=L[C].off}),F&&F!="\x1B[49m")u+="\x1B[49m";if(E&&E!="\x1B[39m")u+="\x1B[39m";return u}function O0(D,u){let{lastBackgroundAdded:F,lastForegroundAdded:E}=D;if(delete D.lastBackgroundAdded,delete D.lastForegroundAdded,Object.keys(D).forEach(function(C){if(D[C])u=L[C].on+u}),F&&F!="\x1B[49m")u=F+u;if(E&&E!="\x1B[39m")u=E+u;return u}function q0(D,u){if(D.length===k(D))return D.substr(0,u);while(k(D)>u)D=D.slice(0,-1);return D}function z0(D,u){let F=r(!0),E=D.split(r()),C=0,B=0,H="",q,X={};while(B<u){q=F.exec(D);let A=E[C];if(C++,B+k(A)>u)A=q0(A,u-B);if(H+=A,B+=k(A),B<u){if(!q)break;H+=q[0],WD(X,q)}}return jD(X,H)}function Z0(D,u,F){if(F=F||"…",k(D)<=u)return D;u-=k(F);let C=z0(D,u);C+=F;let B="\x1B]8;;\x07";if(D.includes(B)&&!C.includes(B))C+=B;return C}function $0(){return{chars:{top:"─","top-mid":"┬","top-left":"┌","top-right":"┐",bottom:"─","bottom-mid":"┴","bottom-left":"└","bottom-right":"┘",left:"│","left-mid":"├",mid:"─","mid-mid":"┼",right:"│","right-mid":"┤",middle:"│"},truncate:"…",colWidths:[],rowHeights:[],colAligns:[],rowAligns:[],style:{"padding-left":1,"padding-right":1,head:["red"],border:["grey"],compact:!1},head:[]}}function G0(D,u){D=D||{},u=u||$0();let F=Object.assign({},u,D);return F.chars=Object.assign({},u.chars,D.chars),F.style=Object.assign({},u.style,D.style),F}function Q0(D,u){let F=[],E=u.split(/(\s+)/g),C=[],B=0,H;for(let q=0;q<E.length;q+=2){let X=E[q],A=B+k(X);if(B>0&&H)A+=H.length;if(A>D){if(B!==0)F.push(C.join(""));C=[X],B=k(X)}else C.push(H||"",X),B=A;H=E[q+1]}if(B)F.push(C.join(""));return F}function U0(D,u){let F=[],E="";function C(H,q){if(E.length&&q)E+=q;E+=H;while(E.length>D)F.push(E.slice(0,D)),E=E.slice(D)}let B=u.split(/(\s+)/g);for(let H=0;H<B.length;H+=2)C(B[H],H&&B[H-1]);if(E.length)F.push(E);return F}function J0(D,u,F=!0){let E=[];u=u.split(`
`);let C=F?Q0:U0;for(let B=0;B<u.length;B++)E.push.apply(E,C(D,u[B]));return E}function R0(D){let u={},F=[];for(let E=0;E<D.length;E++){let C=O0(u,D[E]);u=X0(C);let B=Object.assign({},u);F.push(jD(B,C))}return F}function f0(D,u){return["\x1B]","8",";",";",D||u,"\x07",u,"\x1B]","8",";",";","\x07"].join("")}TD.exports={strlen:k,repeat:m,pad:Y0,truncate:Z0,mergeOptions:G0,wordWrap:J0,colorizeLines:R0,hyperlink:f0}});var kD=R((GF,SD)=>{var vD={};SD.exports=vD;var _D={reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],grey:[90,39],brightRed:[91,39],brightGreen:[92,39],brightYellow:[93,39],brightBlue:[94,39],brightMagenta:[95,39],brightCyan:[96,39],brightWhite:[97,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgGray:[100,49],bgGrey:[100,49],bgBrightRed:[101,49],bgBrightGreen:[102,49],bgBrightYellow:[103,49],bgBrightBlue:[104,49],bgBrightMagenta:[105,49],bgBrightCyan:[106,49],bgBrightWhite:[107,49],blackBG:[40,49],redBG:[41,49],greenBG:[42,49],yellowBG:[43,49],blueBG:[44,49],magentaBG:[45,49],cyanBG:[46,49],whiteBG:[47,49]};Object.keys(_D).forEach(function(D){var u=_D[D],F=vD[D]=[];F.open="\x1B["+u[0]+"m",F.close="\x1B["+u[1]+"m"})});var PD=R((QF,wD)=>{wD.exports=function(D,u){u=u||process.argv;var F=u.indexOf("--"),E=/^-{1,2}/.test(D)?"":"--",C=u.indexOf(E+D);return C!==-1&&(F===-1?!0:C<F)}});var LD=R((UF,hD)=>{var V0=c("os"),v=PD(),W=process.env,g=void 0;if(v("no-color")||v("no-colors")||v("color=false"))g=!1;else if(v("color")||v("colors")||v("color=true")||v("color=always"))g=!0;if("FORCE_COLOR"in W)g=W.FORCE_COLOR.length===0||parseInt(W.FORCE_COLOR,10)!==0;function K0(D){if(D===0)return!1;return{level:D,hasBasic:!0,has256:D>=2,has16m:D>=3}}function N0(D){if(g===!1)return 0;if(v("color=16m")||v("color=full")||v("color=truecolor"))return 3;if(v("color=256"))return 2;if(D&&!D.isTTY&&g!==!0)return 0;var u=g?1:0;if(process.platform==="win32"){var F=V0.release().split(".");if(Number(process.versions.node.split(".")[0])>=8&&Number(F[0])>=10&&Number(F[2])>=10586)return Number(F[2])>=14931?3:2;return 1}if("CI"in W){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(function(C){return C in W})||W.CI_NAME==="codeship")return 1;return u}if("TEAMCITY_VERSION"in W)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(W.TEAMCITY_VERSION)?1:0;if("TERM_PROGRAM"in W){var E=parseInt((W.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(W.TERM_PROGRAM){case"iTerm.app":return E>=3?3:2;case"Hyper":return 3;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(W.TERM))return 2;if(/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(W.TERM))return 1;if("COLORTERM"in W)return 1;if(W.TERM==="dumb")return u;return u}function DD(D){var u=N0(D);return K0(u)}hD.exports={supportsColor:DD,stdout:DD(process.stdout),stderr:DD(process.stderr)}});var xD=R((JF,gD)=>{gD.exports=function D(u,F){var E="";u=u||"Run the trap, drop the bass",u=u.split("");var C={a:["@","Ą","Ⱥ","Ʌ","Δ","Λ","Д"],b:["ß","Ɓ","Ƀ","ɮ","β","฿"],c:["©","Ȼ","Ͼ"],d:["Ð","Ɗ","Ԁ","ԁ","Ԃ","ԃ"],e:["Ë","ĕ","Ǝ","ɘ","Σ","ξ","Ҽ","੬"],f:["Ӻ"],g:["ɢ"],h:["Ħ","ƕ","Ң","Һ","Ӈ","Ԋ"],i:["༏"],j:["Ĵ"],k:["ĸ","Ҡ","Ӄ","Ԟ"],l:["Ĺ"],m:["ʍ","Ӎ","ӎ","Ԡ","ԡ","൩"],n:["Ñ","ŋ","Ɲ","Ͷ","Π","Ҋ"],o:["Ø","õ","ø","Ǿ","ʘ","Ѻ","ם","۝","๏"],p:["Ƿ","Ҏ"],q:["্"],r:["®","Ʀ","Ȑ","Ɍ","ʀ","Я"],s:["§","Ϟ","ϟ","Ϩ"],t:["Ł","Ŧ","ͳ"],u:["Ʊ","Ս"],v:["ט"],w:["Ш","Ѡ","Ѽ","൰"],x:["Ҳ","Ӿ","Ӽ","ӽ"],y:["¥","Ұ","Ӌ"],z:["Ƶ","ɀ"]};return u.forEach(function(B){B=B.toLowerCase();var H=C[B]||[" "],q=Math.floor(Math.random()*H.length);if(typeof C[B]!=="undefined")E+=C[B][q];else E+=B}),E}});var mD=R((RF,yD)=>{yD.exports=function D(u,F){u=u||"   he is here   ";var E={up:["̍","̎","̄","̅","̿","̑","̆","̐","͒","͗","͑","̇","̈","̊","͂","̓","̈","͊","͋","͌","̃","̂","̌","͐","̀","́","̋","̏","̒","̓","̔","̽","̉","ͣ","ͤ","ͥ","ͦ","ͧ","ͨ","ͩ","ͪ","ͫ","ͬ","ͭ","ͮ","ͯ","̾","͛","͆","̚"],down:["̖","̗","̘","̙","̜","̝","̞","̟","̠","̤","̥","̦","̩","̪","̫","̬","̭","̮","̯","̰","̱","̲","̳","̹","̺","̻","̼","ͅ","͇","͈","͉","͍","͎","͓","͔","͕","͖","͙","͚","̣"],mid:["̕","̛","̀","́","͘","̡","̢","̧","̨","̴","̵","̶","͜","͝","͞","͟","͠","͢","̸","̷","͡"," ҉"]},C=[].concat(E.up,E.down,E.mid);function B(X){var A=Math.floor(Math.random()*X);return A}function H(X){var A=!1;return C.filter(function(z){A=z===X}),A}function q(X,A){var z="",$,V;A=A||{},A.up=typeof A.up!=="undefined"?A.up:!0,A.mid=typeof A.mid!=="undefined"?A.mid:!0,A.down=typeof A.down!=="undefined"?A.down:!0,A.size=typeof A.size!=="undefined"?A.size:"maxi",X=X.split("");for(V in X){if(H(V))continue;switch(z=z+X[V],$={up:0,down:0,mid:0},A.size){case"mini":$.up=B(8),$.mid=B(2),$.down=B(8);break;case"maxi":$.up=B(16)+3,$.mid=B(4)+1,$.down=B(64)+3;break;default:$.up=B(8)+1,$.mid=B(6)/2,$.down=B(8)+1;break}var O=["up","mid","down"];for(var Y in O){var Z=O[Y];for(var G=0;G<=$[Z];G++)if(A[Z])z=z+E[Z][B(E[Z].length)]}}return z}return q(u,F)}});var dD=R((fF,pD)=>{pD.exports=function(D){return function(u,F,E){if(u===" ")return u;switch(F%3){case 0:return D.red(u);case 1:return D.white(u);case 2:return D.blue(u)}}}});var iD=R((VF,cD)=>{cD.exports=function(D){return function(u,F,E){return F%2===0?u:D.inverse(u)}}});var nD=R((KF,rD)=>{rD.exports=function(D){var u=["red","yellow","green","blue","magenta"];return function(F,E,C){if(F===" ")return F;else return D[u[E++%u.length]](F)}}});var sD=R((NF,aD)=>{aD.exports=function(D){var u=["underline","inverse","grey","yellow","red","green","blue","white","cyan","magenta","brightYellow","brightRed","brightGreen","brightBlue","brightWhite","brightCyan","brightMagenta"];return function(F,E,C){return F===" "?F:D[u[Math.round(Math.random()*(u.length-2))]](F)}}});var uu=R((bF,Du)=>{var Q={};Du.exports=Q;Q.themes={};var M0=c("util"),P=Q.styles=kD(),lD=Object.defineProperties,b0=new RegExp(/[\r\n]+/g);Q.supportsColor=LD().supportsColor;if(typeof Q.enabled==="undefined")Q.enabled=Q.supportsColor()!==!1;Q.enable=function(){Q.enabled=!0};Q.disable=function(){Q.enabled=!1};Q.stripColors=Q.strip=function(D){return(""+D).replace(/\x1B\[\d+m/g,"")};var MF=Q.stylize=function D(u,F){if(!Q.enabled)return u+"";var E=P[F];if(!E&&F in Q)return Q[F](u);return E.open+u+E.close},I0=/[|\\{}()[\]^$+*?.]/g,W0=function(D){if(typeof D!=="string")throw new TypeError("Expected a string");return D.replace(I0,"\\$&")};function tD(D){var u=function F(){return T0.apply(F,arguments)};return u._styles=D,u.__proto__=j0,u}var eD=function(){var D={};return P.grey=P.gray,Object.keys(P).forEach(function(u){P[u].closeRe=new RegExp(W0(P[u].close),"g"),D[u]={get:function(){return tD(this._styles.concat(u))}}}),D}(),j0=lD(function D(){},eD);function T0(){var D=Array.prototype.slice.call(arguments),u=D.map(function(H){if(H!=null&&H.constructor===String)return H;else return M0.inspect(H)}).join(" ");if(!Q.enabled||!u)return u;var F=u.indexOf(`
`)!=-1,E=this._styles,C=E.length;while(C--){var B=P[E[C]];if(u=B.open+u.replace(B.closeRe,B.open)+B.close,F)u=u.replace(b0,function(H){return B.close+H+B.open})}return u}Q.setTheme=function(D){if(typeof D==="string"){console.log("colors.setTheme now only accepts an object, not a string.  If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file.  The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");return}for(var u in D)(function(F){Q[F]=function(E){if(typeof D[F]==="object"){var C=E;for(var B in D[F])C=Q[D[F][B]](C);return C}return Q[D[F]](E)}})(u)};function _0(){var D={};return Object.keys(eD).forEach(function(u){D[u]={get:function(){return tD([u])}}}),D}var v0=function D(u,F){var E=F.split("");return E=E.map(u),E.join("")};Q.trap=xD();Q.zalgo=mD();Q.maps={};Q.maps.america=dD()(Q);Q.maps.zebra=iD()(Q);Q.maps.rainbow=nD()(Q);Q.maps.random=sD()(Q);for(oD in Q.maps)(function(D){Q[D]=function(u){return v0(Q.maps[D],u)}})(oD);var oD;lD(Q,_0())});var Eu=R((IF,Fu)=>{var S0=uu();Fu.exports=S0});var Hu=R((WF,s)=>{var{info:k0,debug:Au}=i(),T=e();class d{constructor(D){this.setOptions(D),this.x=null,this.y=null}setOptions(D){if(["boolean","number","bigint","string"].indexOf(typeof D)!==-1)D={content:""+D};D=D||{},this.options=D;let u=D.content;if(["boolean","number","bigint","string"].indexOf(typeof u)!==-1)this.content=String(u);else if(!u)this.content=this.options.href||"";else throw new Error("Content needs to be a primitive, got: "+typeof u);if(this.colSpan=D.colSpan||1,this.rowSpan=D.rowSpan||1,this.options.href)Object.defineProperty(this,"href",{get(){return this.options.href}})}mergeTableOptions(D,u){this.cells=u;let F=this.options.chars||{},E=D.chars,C=this.chars={};P0.forEach(function(q){uD(F,E,q,C)}),this.truncate=this.options.truncate||D.truncate;let B=this.options.style=this.options.style||{},H=D.style;uD(B,H,"padding-left",this),uD(B,H,"padding-right",this),this.head=B.head||H.head,this.border=B.border||H.border,this.fixedWidth=D.colWidths[this.x],this.lines=this.computeLines(D),this.desiredWidth=T.strlen(this.content)+this.paddingLeft+this.paddingRight,this.desiredHeight=this.lines.length}computeLines(D){let u=D.wordWrap||D.textWrap,{wordWrap:F=u}=this.options;if(this.fixedWidth&&F){if(this.fixedWidth-=this.paddingLeft+this.paddingRight,this.colSpan){let B=1;while(B<this.colSpan)this.fixedWidth+=D.colWidths[this.x+B],B++}let{wrapOnWordBoundary:E=!0}=D,{wrapOnWordBoundary:C=E}=this.options;return this.wrapLines(T.wordWrap(this.fixedWidth,this.content,C))}return this.wrapLines(this.content.split(`
`))}wrapLines(D){let u=T.colorizeLines(D);if(this.href)return u.map((F)=>T.hyperlink(this.href,F));return u}init(D){let u=this.x,F=this.y;this.widths=D.colWidths.slice(u,u+this.colSpan),this.heights=D.rowHeights.slice(F,F+this.rowSpan),this.width=this.widths.reduce(Bu,-1),this.height=this.heights.reduce(Bu,-1),this.hAlign=this.options.hAlign||D.colAligns[u],this.vAlign=this.options.vAlign||D.rowAligns[F],this.drawRight=u+this.colSpan==D.colWidths.length}draw(D,u){if(D=="top")return this.drawTop(this.drawRight);if(D=="bottom")return this.drawBottom(this.drawRight);let F=T.truncate(this.content,10,this.truncate);if(!D)k0(`${this.y}-${this.x}: ${this.rowSpan-D}x${this.colSpan} Cell ${F}`);let E=Math.max(this.height-this.lines.length,0),C;switch(this.vAlign){case"center":C=Math.ceil(E/2);break;case"bottom":C=E;break;default:C=0}if(D<C||D>=C+this.lines.length)return this.drawEmpty(this.drawRight,u);let B=this.lines.length>this.height&&D+1>=this.height;return this.drawLine(D-C,this.drawRight,B,u)}drawTop(D){let u=[];if(this.cells)this.widths.forEach(function(F,E){u.push(this._topLeftChar(E)),u.push(T.repeat(this.chars[this.y==0?"top":"mid"],F))},this);else u.push(this._topLeftChar(0)),u.push(T.repeat(this.chars[this.y==0?"top":"mid"],this.width));if(D)u.push(this.chars[this.y==0?"topRight":"rightMid"]);return this.wrapWithStyleColors("border",u.join(""))}_topLeftChar(D){let u=this.x+D,F;if(this.y==0)F=u==0?"topLeft":D==0?"topMid":"top";else if(u==0)F="leftMid";else if(F=D==0?"midMid":"bottomMid",this.cells){if(this.cells[this.y-1][u]instanceof d.ColSpanCell)F=D==0?"topMid":"mid";if(D==0){let C=1;while(this.cells[this.y][u-C]instanceof d.ColSpanCell)C++;if(this.cells[this.y][u-C]instanceof d.RowSpanCell)F="leftMid"}}return this.chars[F]}wrapWithStyleColors(D,u){if(this[D]&&this[D].length)try{let F=Eu();for(let E=this[D].length-1;E>=0;E--)F=F[this[D][E]];return F(u)}catch(F){return u}else return u}drawLine(D,u,F,E){let C=this.chars[this.x==0?"left":"middle"];if(this.x&&E&&this.cells){let $=this.cells[this.y+E][this.x-1];while($ instanceof n)$=this.cells[$.y][$.x-1];if(!($ instanceof a))C=this.chars.rightMid}let B=T.repeat(" ",this.paddingLeft),H=u?this.chars.right:"",q=T.repeat(" ",this.paddingRight),X=this.lines[D],A=this.width-(this.paddingLeft+this.paddingRight);if(F)X+=this.truncate||"…";let z=T.truncate(X,A,this.truncate);return z=T.pad(z,A," ",this.hAlign),z=B+z+q,this.stylizeLine(C,z,H)}stylizeLine(D,u,F){if(D=this.wrapWithStyleColors("border",D),F=this.wrapWithStyleColors("border",F),this.y===0)u=this.wrapWithStyleColors("head",u);return D+u+F}drawBottom(D){let u=this.chars[this.x==0?"bottomLeft":"bottomMid"],F=T.repeat(this.chars.bottom,this.width),E=D?this.chars.bottomRight:"";return this.wrapWithStyleColors("border",u+F+E)}drawEmpty(D,u){let F=this.chars[this.x==0?"left":"middle"];if(this.x&&u&&this.cells){let B=this.cells[this.y+u][this.x-1];while(B instanceof n)B=this.cells[B.y][B.x-1];if(!(B instanceof a))F=this.chars.rightMid}let E=D?this.chars.right:"",C=T.repeat(" ",this.width);return this.stylizeLine(F,C,E)}}class n{constructor(){}draw(D){if(typeof D==="number")Au(`${this.y}-${this.x}: 1x1 ColSpanCell`);return""}init(){}mergeTableOptions(){}}class a{constructor(D){this.originalCell=D}init(D){let u=this.y,F=this.originalCell.y;this.cellOffset=u-F,this.offset=w0(D.rowHeights,F,this.cellOffset)}draw(D){if(D=="top")return this.originalCell.draw(this.offset,this.cellOffset);if(D=="bottom")return this.originalCell.draw("bottom");return Au(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`),this.originalCell.draw(this.offset+1+D)}mergeTableOptions(){}}function Cu(...D){return D.filter((u)=>u!==void 0&&u!==null).shift()}function uD(D,u,F,E){let C=F.split("-");if(C.length>1)C[1]=C[1].charAt(0).toUpperCase()+C[1].substr(1),C=C.join(""),E[C]=Cu(D[C],D[F],u[C],u[F]);else E[F]=Cu(D[F],u[F])}function w0(D,u,F){let E=D[u];for(let C=1;C<F;C++)E+=1+D[u+C];return E}function Bu(D,u){return D+u+1}var P0=["top","top-mid","top-left","top-right","bottom","bottom-mid","bottom-left","bottom-right","left","left-mid","mid","mid-mid","right","right-mid","middle"];s.exports=d;s.exports.ColSpanCell=n;s.exports.RowSpanCell=a});var Ou=R((jF,Xu)=>{var{warn:h0,debug:L0}=i(),FD=Hu(),{ColSpanCell:g0,RowSpanCell:x0}=FD;(function(){function D(O,Y){if(O[Y]>0)return D(O,Y+1);return Y}function u(O){let Y={};O.forEach(function(Z,G){let f=0;Z.forEach(function(J){J.y=G,J.x=G?D(Y,f):f;let N=J.rowSpan||1,M=J.colSpan||1;if(N>1)for(let y=0;y<M;y++)Y[J.x+y]=N;f=J.x+M}),Object.keys(Y).forEach((J)=>{if(Y[J]--,Y[J]<1)delete Y[J]})})}function F(O){let Y=0;return O.forEach(function(Z){Z.forEach(function(G){Y=Math.max(Y,G.x+(G.colSpan||1))})}),Y}function E(O){return O.length}function C(O,Y){let Z=O.y,G=O.y-1+(O.rowSpan||1),f=Y.y,J=Y.y-1+(Y.rowSpan||1),N=!(Z>J||f>G),M=O.x,y=O.x-1+(O.colSpan||1),ou=Y.x,lu=Y.x-1+(Y.colSpan||1),tu=!(M>lu||ou>y);return N&&tu}function B(O,Y,Z){let G=Math.min(O.length-1,Z),f={x:Y,y:Z};for(let J=0;J<=G;J++){let N=O[J];for(let M=0;M<N.length;M++)if(C(f,N[M]))return!0}return!1}function H(O,Y,Z,G){for(let f=Z;f<G;f++)if(B(O,f,Y))return!1;return!0}function q(O){O.forEach(function(Y,Z){Y.forEach(function(G){for(let f=1;f<G.rowSpan;f++){let J=new x0(G);J.x=G.x,J.y=G.y+f,J.colSpan=G.colSpan,A(J,O[Z+f])}})})}function X(O){for(let Y=O.length-1;Y>=0;Y--){let Z=O[Y];for(let G=0;G<Z.length;G++){let f=Z[G];for(let J=1;J<f.colSpan;J++){let N=new g0;N.x=f.x+J,N.y=f.y,Z.splice(G+1,0,N)}}}}function A(O,Y){let Z=0;while(Z<Y.length&&Y[Z].x<O.x)Z++;Y.splice(Z,0,O)}function z(O){let Y=E(O),Z=F(O);L0(`Max rows: ${Y}; Max cols: ${Z}`);for(let G=0;G<Y;G++)for(let f=0;f<Z;f++)if(!B(O,f,G)){let J={x:f,y:G,colSpan:1,rowSpan:1};f++;while(f<Z&&!B(O,f,G))J.colSpan++,f++;let N=G+1;while(N<Y&&H(O,N,J.x,J.x+J.colSpan))J.rowSpan++,N++;let M=new FD(J);M.x=J.x,M.y=J.y,h0(`Missing cell at ${M.y}-${M.x}.`),A(M,O[G])}}function $(O){return O.map(function(Y){if(!Array.isArray(Y)){let Z=Object.keys(Y)[0];if(Y=Y[Z],Array.isArray(Y))Y=Y.slice(),Y.unshift(Z);else Y=[Z,Y]}return Y.map(function(Z){return new FD(Z)})})}function V(O){let Y=$(O);return u(Y),z(Y),q(Y),X(Y),Y}Xu.exports={makeTableLayout:V,layoutTable:u,addRowSpanCells:q,maxWidth:F,fillInTable:z,computeWidths:Yu("colSpan","desiredWidth","x",1),computeHeights:Yu("rowSpan","desiredHeight","y",1)}})();function Yu(D,u,F,E){return function(C,B){let H=[],q=[],X={};B.forEach(function(A){A.forEach(function(z){if((z[D]||1)>1)q.push(z);else H[z[F]]=Math.max(H[z[F]]||0,z[u]||0,E)})}),C.forEach(function(A,z){if(typeof A==="number")H[z]=A});for(let A=q.length-1;A>=0;A--){let z=q[A],$=z[D],V=z[F],O=H[V],Y=typeof C[V]==="number"?0:1;if(typeof O==="number"){for(let Z=1;Z<$;Z++)if(O+=1+H[V+Z],typeof C[V+Z]!=="number")Y++}else if(O=u==="desiredWidth"?z.desiredWidth-1:1,!X[V]||X[V]<O)X[V]=O;if(z[u]>O){let Z=0;while(Y>0&&z[u]>O){if(typeof C[V+Z]!=="number"){let G=Math.round((z[u]-O)/Y);O+=G,H[V+Z]+=G,Y--}Z++}}}Object.assign(C,H,X);for(let A=0;A<C.length;A++)C[A]=Math.max(E,C[A]||0)}}});var zu=R((TF,qu)=>{var w=i(),y0=e(),ED=Ou();class BD extends Array{constructor(D){super();let u=y0.mergeOptions(D);if(Object.defineProperty(this,"options",{value:u,enumerable:u.debug}),u.debug){switch(typeof u.debug){case"boolean":w.setDebugLevel(w.WARN);break;case"number":w.setDebugLevel(u.debug);break;case"string":w.setDebugLevel(parseInt(u.debug,10));break;default:w.setDebugLevel(w.WARN),w.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof u.debug}`)}Object.defineProperty(this,"messages",{get(){return w.debugMessages()}})}}toString(){let D=this,u=this.options.head&&this.options.head.length;if(u){if(D=[this.options.head],this.length)D.push.apply(D,this)}else this.options.style.head=[];let F=ED.makeTableLayout(D);F.forEach(function(C){C.forEach(function(B){B.mergeTableOptions(this.options,F)},this)},this),ED.computeWidths(this.options.colWidths,F),ED.computeHeights(this.options.rowHeights,F),F.forEach(function(C){C.forEach(function(B){B.init(this.options)},this)},this);let E=[];for(let C=0;C<F.length;C++){let B=F[C],H=this.options.rowHeights[C];if(C===0||!this.options.style.compact||C==1&&u)CD(B,"top",E);for(let q=0;q<H;q++)CD(B,q,E);if(C+1==F.length)CD(B,"bottom",E)}return E.join(`
`)}get width(){return this.toString().split(`
`)[0].length}}BD.reset=()=>w.reset();function CD(D,u,F){let E=[];D.forEach(function(B){E.push(B.draw(u))});let C=E.join("");if(C.length)F.push(C)}qu.exports=BD});var Qu=R((_F,Gu)=>{var $u={};Gu.exports=$u;var Zu={reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],grey:[90,39],brightRed:[91,39],brightGreen:[92,39],brightYellow:[93,39],brightBlue:[94,39],brightMagenta:[95,39],brightCyan:[96,39],brightWhite:[97,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgGray:[100,49],bgGrey:[100,49],bgBrightRed:[101,49],bgBrightGreen:[102,49],bgBrightYellow:[103,49],bgBrightBlue:[104,49],bgBrightMagenta:[105,49],bgBrightCyan:[106,49],bgBrightWhite:[107,49],blackBG:[40,49],redBG:[41,49],greenBG:[42,49],yellowBG:[43,49],blueBG:[44,49],magentaBG:[45,49],cyanBG:[46,49],whiteBG:[47,49]};Object.keys(Zu).forEach(function(D){var u=Zu[D],F=$u[D]=[];F.open="\x1B["+u[0]+"m",F.close="\x1B["+u[1]+"m"})});var Ju=R((vF,Uu)=>{Uu.exports=function(D,u){u=u||process.argv||[];var F=u.indexOf("--"),E=/^-{1,2}/.test(D)?"":"--",C=u.indexOf(E+D);return C!==-1&&(F===-1?!0:C<F)}});var fu=R((SF,Ru)=>{var m0=c("os"),S=Ju(),j=process.env,x=void 0;if(S("no-color")||S("no-colors")||S("color=false"))x=!1;else if(S("color")||S("colors")||S("color=true")||S("color=always"))x=!0;if("FORCE_COLOR"in j)x=j.FORCE_COLOR.length===0||parseInt(j.FORCE_COLOR,10)!==0;function p0(D){if(D===0)return!1;return{level:D,hasBasic:!0,has256:D>=2,has16m:D>=3}}function d0(D){if(x===!1)return 0;if(S("color=16m")||S("color=full")||S("color=truecolor"))return 3;if(S("color=256"))return 2;if(D&&!D.isTTY&&x!==!0)return 0;var u=x?1:0;if(process.platform==="win32"){var F=m0.release().split(".");if(Number(process.versions.node.split(".")[0])>=8&&Number(F[0])>=10&&Number(F[2])>=10586)return Number(F[2])>=14931?3:2;return 1}if("CI"in j){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(function(C){return C in j})||j.CI_NAME==="codeship")return 1;return u}if("TEAMCITY_VERSION"in j)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(j.TEAMCITY_VERSION)?1:0;if("TERM_PROGRAM"in j){var E=parseInt((j.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(j.TERM_PROGRAM){case"iTerm.app":return E>=3?3:2;case"Hyper":return 3;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(j.TERM))return 2;if(/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(j.TERM))return 1;if("COLORTERM"in j)return 1;if(j.TERM==="dumb")return u;return u}function AD(D){var u=d0(D);return p0(u)}Ru.exports={supportsColor:AD,stdout:AD(process.stdout),stderr:AD(process.stderr)}});var Ku=R((kF,Vu)=>{Vu.exports=function D(u,F){var E="";u=u||"Run the trap, drop the bass",u=u.split("");var C={a:["@","Ą","Ⱥ","Ʌ","Δ","Λ","Д"],b:["ß","Ɓ","Ƀ","ɮ","β","฿"],c:["©","Ȼ","Ͼ"],d:["Ð","Ɗ","Ԁ","ԁ","Ԃ","ԃ"],e:["Ë","ĕ","Ǝ","ɘ","Σ","ξ","Ҽ","੬"],f:["Ӻ"],g:["ɢ"],h:["Ħ","ƕ","Ң","Һ","Ӈ","Ԋ"],i:["༏"],j:["Ĵ"],k:["ĸ","Ҡ","Ӄ","Ԟ"],l:["Ĺ"],m:["ʍ","Ӎ","ӎ","Ԡ","ԡ","൩"],n:["Ñ","ŋ","Ɲ","Ͷ","Π","Ҋ"],o:["Ø","õ","ø","Ǿ","ʘ","Ѻ","ם","۝","๏"],p:["Ƿ","Ҏ"],q:["্"],r:["®","Ʀ","Ȑ","Ɍ","ʀ","Я"],s:["§","Ϟ","ϟ","Ϩ"],t:["Ł","Ŧ","ͳ"],u:["Ʊ","Ս"],v:["ט"],w:["Ш","Ѡ","Ѽ","൰"],x:["Ҳ","Ӿ","Ӽ","ӽ"],y:["¥","Ұ","Ӌ"],z:["Ƶ","ɀ"]};return u.forEach(function(B){B=B.toLowerCase();var H=C[B]||[" "],q=Math.floor(Math.random()*H.length);if(typeof C[B]!=="undefined")E+=C[B][q];else E+=B}),E}});var Mu=R((wF,Nu)=>{Nu.exports=function D(u,F){u=u||"   he is here   ";var E={up:["̍","̎","̄","̅","̿","̑","̆","̐","͒","͗","͑","̇","̈","̊","͂","̓","̈","͊","͋","͌","̃","̂","̌","͐","̀","́","̋","̏","̒","̓","̔","̽","̉","ͣ","ͤ","ͥ","ͦ","ͧ","ͨ","ͩ","ͪ","ͫ","ͬ","ͭ","ͮ","ͯ","̾","͛","͆","̚"],down:["̖","̗","̘","̙","̜","̝","̞","̟","̠","̤","̥","̦","̩","̪","̫","̬","̭","̮","̯","̰","̱","̲","̳","̹","̺","̻","̼","ͅ","͇","͈","͉","͍","͎","͓","͔","͕","͖","͙","͚","̣"],mid:["̕","̛","̀","́","͘","̡","̢","̧","̨","̴","̵","̶","͜","͝","͞","͟","͠","͢","̸","̷","͡"," ҉"]},C=[].concat(E.up,E.down,E.mid);function B(X){var A=Math.floor(Math.random()*X);return A}function H(X){var A=!1;return C.filter(function(z){A=z===X}),A}function q(X,A){var z="",$,V;A=A||{},A.up=typeof A.up!=="undefined"?A.up:!0,A.mid=typeof A.mid!=="undefined"?A.mid:!0,A.down=typeof A.down!=="undefined"?A.down:!0,A.size=typeof A.size!=="undefined"?A.size:"maxi",X=X.split("");for(V in X){if(H(V))continue;switch(z=z+X[V],$={up:0,down:0,mid:0},A.size){case"mini":$.up=B(8),$.mid=B(2),$.down=B(8);break;case"maxi":$.up=B(16)+3,$.mid=B(4)+1,$.down=B(64)+3;break;default:$.up=B(8)+1,$.mid=B(6)/2,$.down=B(8)+1;break}var O=["up","mid","down"];for(var Y in O){var Z=O[Y];for(var G=0;G<=$[Z];G++)if(A[Z])z=z+E[Z][B(E[Z].length)]}}return z}return q(u,F)}});var Iu=R((PF,bu)=>{bu.exports=function(D){return function(u,F,E){if(u===" ")return u;switch(F%3){case 0:return D.red(u);case 1:return D.white(u);case 2:return D.blue(u)}}}});var ju=R((hF,Wu)=>{Wu.exports=function(D){return function(u,F,E){return F%2===0?u:D.inverse(u)}}});var _u=R((LF,Tu)=>{Tu.exports=function(D){var u=["red","yellow","green","blue","magenta"];return function(F,E,C){if(F===" ")return F;else return D[u[E++%u.length]](F)}}});var Su=R((gF,vu)=>{vu.exports=function(D){var u=["underline","inverse","grey","yellow","red","green","blue","white","cyan","magenta","brightYellow","brightRed","brightGreen","brightBlue","brightWhite","brightCyan","brightMagenta"];return function(F,E,C){return F===" "?F:D[u[Math.round(Math.random()*(u.length-2))]](F)}}});var HD=R((yF,Lu)=>{var U={};Lu.exports=U;U.themes={};var c0=c("util"),h=U.styles=Qu(),wu=Object.defineProperties,i0=new RegExp(/[\r\n]+/g);U.supportsColor=fu().supportsColor;if(typeof U.enabled==="undefined")U.enabled=U.supportsColor()!==!1;U.enable=function(){U.enabled=!0};U.disable=function(){U.enabled=!1};U.stripColors=U.strip=function(D){return(""+D).replace(/\x1B\[\d+m/g,"")};var xF=U.stylize=function D(u,F){if(!U.enabled)return u+"";var E=h[F];if(!E&&F in U)return U[F](u);return E.open+u+E.close},r0=/[|\\{}()[\]^$+*?.]/g,n0=function(D){if(typeof D!=="string")throw new TypeError("Expected a string");return D.replace(r0,"\\$&")};function Pu(D){var u=function F(){return s0.apply(F,arguments)};return u._styles=D,u.__proto__=a0,u}var hu=function(){var D={};return h.grey=h.gray,Object.keys(h).forEach(function(u){h[u].closeRe=new RegExp(n0(h[u].close),"g"),D[u]={get:function(){return Pu(this._styles.concat(u))}}}),D}(),a0=wu(function D(){},hu);function s0(){var D=Array.prototype.slice.call(arguments),u=D.map(function(H){if(H!=null&&H.constructor===String)return H;else return c0.inspect(H)}).join(" ");if(!U.enabled||!u)return u;var F=u.indexOf(`
`)!=-1,E=this._styles,C=E.length;while(C--){var B=h[E[C]];if(u=B.open+u.replace(B.closeRe,B.open)+B.close,F)u=u.replace(i0,function(H){return B.close+H+B.open})}return u}U.setTheme=function(D){if(typeof D==="string"){console.log("colors.setTheme now only accepts an object, not a string.  If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file.  The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");return}for(var u in D)(function(F){U[F]=function(E){if(typeof D[F]==="object"){var C=E;for(var B in D[F])C=U[D[F][B]](C);return C}return U[D[F]](E)}})(u)};function o0(){var D={};return Object.keys(hu).forEach(function(u){D[u]={get:function(){return Pu([u])}}}),D}var l0=function D(u,F){var E=F.split("");return E=E.map(u),E.join("")};U.trap=Ku();U.zalgo=Mu();U.maps={};U.maps.america=Iu()(U);U.maps.zebra=ju()(U);U.maps.rainbow=_u()(U);U.maps.random=Su()(U);for(ku in U.maps)(function(D){U[D]=function(u){return l0(U.maps[D],u)}})(ku);var ku;wu(U,o0())});var xu=R((mF,gu)=>{var I=HD();gu.exports=function(){var D=function(E,C){String.prototype.__defineGetter__(E,C)};D("strip",function(){return I.strip(this)}),D("stripColors",function(){return I.strip(this)}),D("trap",function(){return I.trap(this)}),D("zalgo",function(){return I.zalgo(this)}),D("zebra",function(){return I.zebra(this)}),D("rainbow",function(){return I.rainbow(this)}),D("random",function(){return I.random(this)}),D("america",function(){return I.america(this)});var u=Object.keys(I.styles);u.forEach(function(E){D(E,function(){return I.stylize(this,E)})});function F(E){var C=["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","charAt","constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf","charCodeAt","indexOf","lastIndexOf","length","localeCompare","match","repeat","replace","search","slice","split","substring","toLocaleLowerCase","toLocaleUpperCase","toLowerCase","toUpperCase","trim","trimLeft","trimRight"];Object.keys(E).forEach(function(B){if(C.indexOf(B)!==-1)console.log("warn: ".red+("String.prototype"+B).magenta+" is probably something you don't want to override.  Ignoring style name");else if(typeof E[B]==="string")I[B]=I[E[B]],D(B,function(){return I[B](this)});else{var H=function(q){var X=q||this;for(var A=0;A<E[B].length;A++)X=I[E[B][A]](X);return X};D(B,H),I[B]=function(q){return H(q)}}})}I.setTheme=function(E){if(typeof E==="string"){console.log("colors.setTheme now only accepts an object, not a string. If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file.  The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");return}else F(E)}}});var mu=R((pF,yu)=>{var t0=HD();yu.exports=t0;xu()()});import{rpc as qD,StrKey as EF}from"@stellar/stellar-sdk";var cu=ZD(zu(),1),_=ZD(mu(),1);var K={mem_bytes:{value:41943040,unit:"bytes",label:"40 MB"},cpu_insns:{value:1e8,unit:"bytes",label:"100 Million"},entry_reads:{value:40,unit:"count",label:"40"},entry_writes:{value:25,unit:"count",label:"25"},read_bytes:{value:204800,unit:"bytes",label:"200 KB"},write_bytes:{value:132096,unit:"bytes",label:"129 KB"},entry_bytes:{value:131072,unit:"bytes",label:"128 KB"},min_txn_bytes:{value:132096,unit:"bytes",label:"129 KB"}},pu=(D)=>{return{...K,...D}},du=["cpu_insns","mem_bytes","entry_bytes","entry_reads","entry_writes","read_bytes","write_bytes","min_txn_bytes"];var e0=(D)=>{let u={},F=["cpu_insns","mem_bytes","entry_bytes","entry_reads","entry_writes","read_bytes","write_bytes","min_txn_bytes"];return Object.entries(D).forEach(([E,C])=>{u[E]={},Object.entries(C).forEach(([B,H])=>{let q=H.length;F.forEach((X)=>{if(!H[0][X])return;let A=0,z=H[0][X],$=H[0][X];H.forEach((O)=>{let Y=O[X]||0;if(A+=Y,Y>z)z=Y;if(Y<$)$=Y});let V=A/q;if(!u[E])u[E]={};if(!u[E][B])u[E][B]={};u[E][B][X]={avg:V,max:z,min:$,sum:A}}),u[E][B].times=q})}),u},DF=(D)=>{let u=[];return Object.entries(D).forEach(([F,E])=>{Object.entries(E).forEach(([C,B])=>{let H=B.times,q=[];du.forEach((X)=>{if(!B[X])return;let{avg:A,max:z,min:$,sum:V}=B[X],O=K[X].value;q.push([X,O,A,z,$,V])}),u.push({func:C,times:H,data:q})})}),u},XD=(D,u)=>{let F=new cu.default({style:{head:[],border:[]}});F.push([{colSpan:6,content:_.default.brightCyan.bold("Resource Usage Table"),hAlign:"center"}]);let E=[{content:_.default.brightCyan.bold("Highligh Color"),colSpan:2},{content:_.default.brightYellow.bold(`Warning: ${0.8*100}% - ${1*100}%`),colSpan:2},{content:_.default.brightRed.bold(`Error: Over ${1*100}%`),colSpan:2}],C=[{content:_.default.brightCyan.bold("Contract"),colSpan:2},{content:D,colSpan:4}];F.push(E),F.push(C);let B=e0(u);DF(B).forEach(({func:q,times:X,data:A})=>{let z=[_.default.brightCyan.bold("Function"),{content:q,colSpan:2},_.default.brightCyan.bold("Times"),{content:X,colSpan:2}];F.push(z);let $=["Resource","Limitation","Avg","Max","Min","Sum"].map((V)=>_.default.brightCyan.bold(V));F.push($),A.forEach(([V,O,Y,Z,G,f])=>{let J=YD(Y,O),N=YD(Z,O),M=YD(G,O);F.push([_.default.brightCyan.bold(V),O,J,N,M,f])})}),console.log(F.toString())},YD=(D,u)=>{let F=parseFloat((Number(D)/Number(u)*100).toFixed(2)),E=F>0.8*100;if(F>1*100)return _.default.brightRed.bold(D.toString());if(E)return _.default.brightYellow.bold(D.toString());return D};import{scValToNative as iu}from"@stellar/stellar-sdk";var uF=(D)=>{return"transactionData"in D},OD=(D,u)=>{let F;if(uF(D))F=D.transactionData.build().resources();else F=D.simulationData.transactionData.resources();let E=F.footprint(),C={cpu_insn:void 0,mem_byte:void 0,ledger_read_byte:void 0,ledger_write_byte:void 0};u.resultMetaXdr.v3().sorobanMeta()?.diagnosticEvents().forEach((q)=>{let X=q.event().body().v0(),A=X.topics().map(iu);if(!A.includes("core_metrics"))return;let z=Object.keys(C).find(($)=>A.includes($));if(z)C[z]=Number(iu(X.data()))});let B=u.resultMetaXdr.v3().operations().flatMap((q)=>q.changes().flatMap((X)=>{switch(X.switch().name){case"ledgerEntryCreated":return X.created().data().value().toXDR().length;case"ledgerEntryUpdated":return X.updated().data().value().toXDR().length;default:return 0}})),H=Math.max(...B)??0;return{cpu_insns:C.cpu_insn,mem_bytes:C.mem_byte,entry_bytes:H,entry_reads:E.readOnly().length,entry_writes:E.readWrite().length,read_bytes:F.readBytes(),write_bytes:F.writeBytes(),min_txn_bytes:u.envelopeXdr.toXDR().length}};var ru=async(D="public")=>{try{let u=await fetch(`https://api.stellar.expert/explorer/${D}/ledger/protocol-history`);if(!u.ok)throw new Error(`HTTP error! status: ${u.status}`);return await u.json()}catch(u){console.log(u)}};var nu=1735537317419,au=async()=>{if(Date.now()-nu<3600000)return;nu=Date.now();try{let F=(await ru()).map((C)=>{return FF(C.config_changes,["contractCompute","contractLedgerCost","contractBandwidth"])}).reverse().reduce((C,B)=>{return{...C,...B}},{}),E={...K,cpu_insns:{...K.cpu_insns,value:F.contractCompute.txMaxInstructions??K.cpu_insns.value},mem_bytes:{...K.mem_bytes,value:F.contractLedgerCost.txMemoryLimit??K.mem_bytes.value},entry_reads:{...K.entry_reads,value:F.contractLedgerCost.txMaxReadLedgerEntries??K.entry_reads.value},entry_writes:{...K.entry_writes,value:F.contractLedgerCost.txMaxWriteLedgerEntries??K.entry_writes.value},read_bytes:{...K.read_bytes,value:F.contractLedgerCost.txMaxReadBytes??K.read_bytes.value},write_bytes:{...K.write_bytes,value:F.contractLedgerCost.txMaxWriteBytes??K.write_bytes.value},min_txn_bytes:{...K.min_txn_bytes,value:F.contractBandwidth.txMaxSizeBytes??K.min_txn_bytes.value}};pu(E)}catch(D){console.log(D)}};function FF(D,u){if(Object.prototype.toString.call(D)==="[object Object]"){let F={};return Object.entries(D).forEach(([E,C])=>{if(u.includes(E))F[E]=C}),F}}async function su(D,u,F,E=1.5,C=!1){let B=[],H=0;if(B.push(await D()),!u(B[B.length-1]))return B;let q=new Date(Date.now()+F*1000).valueOf(),X=1000,A=X;while(Date.now()<q&&u(B[B.length-1])){if(H+=1,C)console.info(`Waiting ${X}ms before trying again (bringing the total wait time to ${A}ms so far, of total ${F*1000}ms)`);if(await new Promise((z)=>setTimeout(z,X)),X*=E,new Date(Date.now()+X).valueOf()>q){if(X=q-Date.now(),C)console.info(`was gonna wait too long; new waitTime: ${X}ms`)}if(A=X+A,B.push(await D(B[B.length-1])),C&&u(B[B.length-1]))console.info(`${H}. Called ${D}; ${B.length} prev attempts. Most recent: ${JSON.stringify(B[B.length-1],null,2)}`)}return B}class CF extends qD.Server{#D=new Map;transaction;simTxRes;storedStats={};constructor(D,u){super(D,u)}async printTable(){let D=Array.from(this.#D).map(([u])=>{return su(()=>super.getTransaction(u),(F)=>F.status===qD.Api.GetTransactionStatus.NOT_FOUND,10)});try{(await Promise.all(D)).forEach((F)=>{let E=F.find((C)=>C.status===qD.Api.GetTransactionStatus.SUCCESS);if(E){let{simTxRes:C,transaction:B}=this.#D.get(E.txHash),H=OD(C,E);this.storeTransactionStats(B,H)}else console.log("Failed to get transaction")})}catch(u){console.log("Failed to get transactions",u)}Object.keys(this.storedStats).forEach((u)=>{XD(u,this.storedStats)}),this.#D.clear(),this.storedStats={}}async simulateTransaction(D,u){let F=await super.simulateTransaction(D,u);return this.transaction=D,this.simTxRes=F,F}async sendTransaction(D){let u=await super.sendTransaction(D);return this.#D.set(u.hash,{sendTxRes:u,transaction:this.transaction,simTxRes:this.simTxRes}),this.transaction=void 0,this.simTxRes=void 0,u}storeTransactionStats(D,u){D.operations.forEach((F)=>{if(F.type==="invokeHostFunction"){let E=EF.encodeContract(F.func.invokeContract().contractAddress().value()),C=F.func.invokeContract().functionName();if(!this.storedStats[E])this.storedStats[E]={};if(!this.storedStats[E][C])this.storedStats[E][C]=[u];else this.storedStats[E][C].push(u)}})}}var BF="__constructor";async function B3(D,u){await au();class F extends D{contractId;storedStats={};constructor(){if(!u.contractId)throw new Error("contractId is required");super(u);this.contractId=u.contractId;let E=this.spec.funcs().map((C)=>C.name().toString());for(let C of E){let B=this[C];if(C===BF)return;this[C]=async(...H)=>{try{let q=await B(...H);return{...q,signAndSend:async()=>{let X=await q.signAndSend(),A=OD(q,X.getTransactionResponse);if(!this.storedStats[this.contractId])this.storedStats[this.contractId]={};if(!this.storedStats[this.contractId][C])this.storedStats[this.contractId][C]=[A];else this.storedStats[this.contractId][C].push(A);return X}}}catch(q){throw console.error(q),q}}}this.contractId=u.contractId}printTable(){let E=this.storedStats;XD(this.contractId,E)}}return new F}export{CF as StellarRpcServer,B3 as ResourceUsageClient};

//# debugId=353798749F3CF2DE64756E2164756E21
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvc3JjL2RlYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGktdGFibGUzL3NyYy91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL3N0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL3N5c3RlbS9oYXMtZmxhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL3N5c3RlbS9zdXBwb3J0cy1jb2xvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvbm9kZV9tb2R1bGVzL0Bjb2xvcnMvY29sb3JzL2xpYi9jdXN0b20vdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL2N1c3RvbS96YWxnby5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL21hcHMvYW1lcmljYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL21hcHMvemVicmEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvbm9kZV9tb2R1bGVzL0Bjb2xvcnMvY29sb3JzL2xpYi9tYXBzL3JhaW5ib3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvbm9kZV9tb2R1bGVzL0Bjb2xvcnMvY29sb3JzL2xpYi9tYXBzL3JhbmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9zcmMvY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2xpLXRhYmxlMy9zcmMvbGF5b3V0LW1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NsaS10YWJsZTMvc3JjL3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvc3lzdGVtL2hhcy1mbGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvc3lzdGVtL3N1cHBvcnRzLWNvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL2N1c3RvbS90cmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvY3VzdG9tL3phbGdvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvbWFwcy9hbWVyaWNhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvbWFwcy96ZWJyYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL21hcHMvcmFpbmJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGNvbG9ycy9jb2xvcnMvbGliL21hcHMvcmFuZG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvY29sb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvZXh0ZW5kU3RyaW5nUHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycy9saWIvaW5kZXguanMiLCAiLi4vc3JjL21haW4udHMiLCAiLi4vc3JjL3NoYXJlL2luZGV4LnRzIiwgIi4uL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vc3JjL3Rhc2tzL2luZGV4LnRzIiwgIi4uL3NyYy9hcGkvc3RlbGxhci50cyIsICIuLi9zcmMvdXRpbHMvdXRpbHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAibGV0IG1lc3NhZ2VzID0gW107XG5sZXQgbGV2ZWwgPSAwO1xuXG5jb25zdCBkZWJ1ZyA9IChtc2csIG1pbikgPT4ge1xuICBpZiAobGV2ZWwgPj0gbWluKSB7XG4gICAgbWVzc2FnZXMucHVzaChtc2cpO1xuICB9XG59O1xuXG5kZWJ1Zy5XQVJOID0gMTtcbmRlYnVnLklORk8gPSAyO1xuZGVidWcuREVCVUcgPSAzO1xuXG5kZWJ1Zy5yZXNldCA9ICgpID0+IHtcbiAgbWVzc2FnZXMgPSBbXTtcbn07XG5cbmRlYnVnLnNldERlYnVnTGV2ZWwgPSAodikgPT4ge1xuICBsZXZlbCA9IHY7XG59O1xuXG5kZWJ1Zy53YXJuID0gKG1zZykgPT4gZGVidWcobXNnLCBkZWJ1Zy5XQVJOKTtcbmRlYnVnLmluZm8gPSAobXNnKSA9PiBkZWJ1Zyhtc2csIGRlYnVnLklORk8pO1xuZGVidWcuZGVidWcgPSAobXNnKSA9PiBkZWJ1Zyhtc2csIGRlYnVnLkRFQlVHKTtcblxuZGVidWcuZGVidWdNZXNzYWdlcyA9ICgpID0+IG1lc3NhZ2VzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVnO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkgPT4ge1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHRcdCdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpJyxcblx0XHQnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSknXG5cdF0uam9pbignfCcpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpUmVnZXggPSByZXF1aXJlKCdhbnNpLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnID8gc3RyaW5nLnJlcGxhY2UoYW5zaVJlZ2V4KCksICcnKSA6IHN0cmluZztcbiIsCiAgICAiLyogZXNsaW50LWRpc2FibGUgeW9kYSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IGNvZGVQb2ludCA9PiB7XG5cdGlmIChOdW1iZXIuaXNOYU4oY29kZVBvaW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIENvZGUgcG9pbnRzIGFyZSBkZXJpdmVkIGZyb206XG5cdC8vIGh0dHA6Ly93d3cudW5peC5vcmcvUHVibGljL1VOSURBVEEvRWFzdEFzaWFuV2lkdGgudHh0XG5cdGlmIChcblx0XHRjb2RlUG9pbnQgPj0gMHgxMTAwICYmIChcblx0XHRcdGNvZGVQb2ludCA8PSAweDExNUYgfHwgLy8gSGFuZ3VsIEphbW9cblx0XHRcdGNvZGVQb2ludCA9PT0gMHgyMzI5IHx8IC8vIExFRlQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMkEgfHwgLy8gUklHSFQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdFx0Ly8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQgLi4gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRoc1xuXHRcdFx0KDB4MkU4MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0NyAmJiBjb2RlUG9pbnQgIT09IDB4MzAzRikgfHxcblx0XHRcdC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMgLi4gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVxuXHRcdFx0KDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4NERCRikgfHxcblx0XHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgLi4gWWkgUmFkaWNhbHNcblx0XHRcdCgweDRFMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE0QzYpIHx8XG5cdFx0XHQvLyBIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXG5cdFx0XHQoMHhBOTYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBOTdDKSB8fFxuXHRcdFx0Ly8gSGFuZ3VsIFN5bGxhYmxlc1xuXHRcdFx0KDB4QUMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdBMykgfHxcblx0XHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcblx0XHRcdCgweEY5MDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZBRkYpIHx8XG5cdFx0XHQvLyBWZXJ0aWNhbCBGb3Jtc1xuXHRcdFx0KDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcblx0XHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zIC4uIFNtYWxsIEZvcm0gVmFyaWFudHNcblx0XHRcdCgweEZFMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFNkIpIHx8XG5cdFx0XHQvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1xuXHRcdFx0KDB4RkYwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkY2MCkgfHxcblx0XHRcdCgweEZGRTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRTYpIHx8XG5cdFx0XHQvLyBLYW5hIFN1cHBsZW1lbnRcblx0XHRcdCgweDFCMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxQjAwMSkgfHxcblx0XHRcdC8vIEVuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnRcblx0XHRcdCgweDFGMjAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI1MSkgfHxcblx0XHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIgLi4gVGVydGlhcnkgSWRlb2dyYXBoaWMgUGxhbmVcblx0XHRcdCgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzRkZGRClcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bGx3aWR0aENvZGVQb2ludDtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBpc0Z1bGx3aWR0aENvZGVQb2ludDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL210aHMuYmUvZW1vamlcbiAgcmV0dXJuIC9cXHVEODNDXFx1REZGNFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjIoPzpcXHVEQjQwXFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REI0MFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURCNDBcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3RnxcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1xcdURGRkJ8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRFxcdURDNjh8KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGfFxcdUQ4M0RbXFx1REM2NlxcdURDNjddfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXwoPzpcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSlcXHVGRTBGfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSlcXHVEODNDXFx1REZGQnxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCXFx1REZGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEXFx1REM0MVxcdUZFMEZcXHUyMDBEXFx1RDgzRFxcdURERTh8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pfCg/Oig/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpXFx1RkUwRnxcXHVEODNEXFx1REM2RnxcXHVEODNFW1xcdUREM0NcXHVERERFXFx1RERERl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzooPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml0pfFxcdUQ4M0NcXHVERkY0XFx1MjAwRFxcdTI2MjApXFx1RkUwRnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8XFx1RDgzQ1xcdURGRjNcXHVGRTBGXFx1MjAwRFxcdUQ4M0NcXHVERjA4fFxcdUQ4M0RcXHVEQzE1XFx1MjAwRFxcdUQ4M0VcXHVEREJBfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY3fFxcdUQ4M0NcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RDgzQ1xcdURERjRcXHVEODNDXFx1RERGMnxcXHVEODNDXFx1RERGNlxcdUQ4M0NcXHVEREU2fFsjXFwqMC05XVxcdUZFMEZcXHUyMEUzfFxcdUQ4M0NcXHVEREU3KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERGOSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzQ1xcdURERjcoPzpcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXSl8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREYyKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERTYoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdKXxcXHVEODNDXFx1RERGMCg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRCg/OlxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXSl8XFx1RDgzQ1xcdURERTkoPzpcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdKXxcXHVEODNDXFx1RERGRSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjldKXxcXHVEODNDXFx1RERFQyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREY4KD86XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERUIoPzpcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN10pfFxcdUQ4M0NcXHVEREY1KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREYzKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdKXxcXHVEODNDXFx1RERFOCg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY1XFx1RERGN1xcdURERkEtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYxKD86XFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdKXxcXHVEODNDXFx1RERGRig/OlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXSl8XFx1RDgzQ1xcdURERkMoPzpcXHVEODNDW1xcdURERUJcXHVEREY4XSl8XFx1RDgzQ1xcdURERkEoPzpcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRSg/OlxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XSl8XFx1RDgzQ1xcdURERUYoPzpcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdKXwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ2LVxcdURERERdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyNjFEXFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyXFx1REZDN118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1RENBQVxcdURENzRcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBGXFx1REQxOC1cXHVERDFDXFx1REQxRVxcdUREMUZcXHVERDMwLVxcdUREMzZcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyLVxcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTIzMUFcXHUyMzFCXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjVGRVxcdTI2MTRcXHUyNjE1XFx1MjY0OC1cXHUyNjUzXFx1MjY3RlxcdTI2OTNcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGMlxcdTI2RjNcXHUyNkY1XFx1MjZGQVxcdTI2RkRcXHUyNzA1XFx1MjcwQVxcdTI3MEJcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjkzXFx1REZBMC1cXHVERkNBXFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGNFxcdURGRjgtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDM0VcXHVEQzQwXFx1REM0Mi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ3QVxcdUREOTVcXHVERDk2XFx1RERBNFxcdURERkItXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0NcXHVERUQwLVxcdURFRDJcXHVERUQ1XFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSl8KD86WyNcXCowLTlcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRTktXFx1MjNGM1xcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQi1cXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjFEXFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5Mi1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVENVxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUVCXFx1REVFQ1xcdURFRjBcXHVERUYzLVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSlcXHVGRTBGfCg/OltcXHUyNjFEXFx1MjZGOVxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMi1cXHVERkM0XFx1REZDN1xcdURGQ0EtXFx1REZDQ118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjYtXFx1REM3OFxcdURDN0NcXHVEQzgxLVxcdURDODNcXHVEQzg1LVxcdURDODdcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDc0XFx1REQ3NVxcdUREN0FcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVERTQ1LVxcdURFNDdcXHVERTRCLVxcdURFNEZcXHVERUEzXFx1REVCNC1cXHVERUI2XFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMjZcXHVERDMwLVxcdUREMzlcXHVERDNDLVxcdUREM0VcXHVEREI1XFx1RERCNlxcdUREQjhcXHVEREI5XFx1RERCQlxcdUREQ0QtXFx1RERDRlxcdURERDEtXFx1RERERF0pL2c7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IHJlcXVpcmUoJ2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Jyk7XG5jb25zdCBlbW9qaVJlZ2V4ID0gcmVxdWlyZSgnZW1vamktcmVnZXgnKTtcblxuY29uc3Qgc3RyaW5nV2lkdGggPSBzdHJpbmcgPT4ge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGVtb2ppUmVnZXgoKSwgJyAgJyk7XG5cblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPD0gMHgxRiB8fCAoY29kZSA+PSAweDdGICYmIGNvZGUgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlID49IDB4MzAwICYmIGNvZGUgPD0gMHgzNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFN1cnJvZ2F0ZXNcblx0XHRpZiAoY29kZSA+IDB4RkZGRikge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGlzRnVsbHdpZHRoQ29kZVBvaW50KGNvZGUpID8gMiA6IDE7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1dpZHRoO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ1dpZHRoO1xuIiwKICAgICJjb25zdCBzdHJpbmdXaWR0aCA9IHJlcXVpcmUoJ3N0cmluZy13aWR0aCcpO1xuXG5mdW5jdGlvbiBjb2RlUmVnZXgoY2FwdHVyZSkge1xuICByZXR1cm4gY2FwdHVyZSA/IC9cXHUwMDFiXFxbKCg/OlxcZCo7KXswLDV9XFxkKiltL2cgOiAvXFx1MDAxYlxcWyg/OlxcZCo7KXswLDV9XFxkKm0vZztcbn1cblxuZnVuY3Rpb24gc3RybGVuKHN0cikge1xuICBsZXQgY29kZSA9IGNvZGVSZWdleCgpO1xuICBsZXQgc3RyaXBwZWQgPSAoJycgKyBzdHIpLnJlcGxhY2UoY29kZSwgJycpO1xuICBsZXQgc3BsaXQgPSBzdHJpcHBlZC5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBzcGxpdC5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIHMpIHtcbiAgICByZXR1cm4gc3RyaW5nV2lkdGgocykgPiBtZW1vID8gc3RyaW5nV2lkdGgocykgOiBtZW1vO1xuICB9LCAwKTtcbn1cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgdGltZXMpIHtcbiAgcmV0dXJuIEFycmF5KHRpbWVzICsgMSkuam9pbihzdHIpO1xufVxuXG5mdW5jdGlvbiBwYWQoc3RyLCBsZW4sIHBhZCwgZGlyKSB7XG4gIGxldCBsZW5ndGggPSBzdHJsZW4oc3RyKTtcbiAgaWYgKGxlbiArIDEgPj0gbGVuZ3RoKSB7XG4gICAgbGV0IHBhZGxlbiA9IGxlbiAtIGxlbmd0aDtcbiAgICBzd2l0Y2ggKGRpcikge1xuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIHN0ciA9IHJlcGVhdChwYWQsIHBhZGxlbikgKyBzdHI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2VudGVyJzoge1xuICAgICAgICBsZXQgcmlnaHQgPSBNYXRoLmNlaWwocGFkbGVuIC8gMik7XG4gICAgICAgIGxldCBsZWZ0ID0gcGFkbGVuIC0gcmlnaHQ7XG4gICAgICAgIHN0ciA9IHJlcGVhdChwYWQsIGxlZnQpICsgc3RyICsgcmVwZWF0KHBhZCwgcmlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgc3RyID0gc3RyICsgcmVwZWF0KHBhZCwgcGFkbGVuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmxldCBjb2RlQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gYWRkVG9Db2RlQ2FjaGUobmFtZSwgb24sIG9mZikge1xuICBvbiA9ICdcXHUwMDFiWycgKyBvbiArICdtJztcbiAgb2ZmID0gJ1xcdTAwMWJbJyArIG9mZiArICdtJztcbiAgY29kZUNhY2hlW29uXSA9IHsgc2V0OiBuYW1lLCB0bzogdHJ1ZSB9O1xuICBjb2RlQ2FjaGVbb2ZmXSA9IHsgc2V0OiBuYW1lLCB0bzogZmFsc2UgfTtcbiAgY29kZUNhY2hlW25hbWVdID0geyBvbjogb24sIG9mZjogb2ZmIH07XG59XG5cbi8vaHR0cHM6Ly9naXRodWIuY29tL01hcmFrL2NvbG9ycy5qcy9ibG9iL21hc3Rlci9saWIvc3R5bGVzLmpzXG5hZGRUb0NvZGVDYWNoZSgnYm9sZCcsIDEsIDIyKTtcbmFkZFRvQ29kZUNhY2hlKCdpdGFsaWNzJywgMywgMjMpO1xuYWRkVG9Db2RlQ2FjaGUoJ3VuZGVybGluZScsIDQsIDI0KTtcbmFkZFRvQ29kZUNhY2hlKCdpbnZlcnNlJywgNywgMjcpO1xuYWRkVG9Db2RlQ2FjaGUoJ3N0cmlrZXRocm91Z2gnLCA5LCAyOSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlLCBjb250cm9sQ2hhcnMpIHtcbiAgbGV0IGNvbnRyb2xDb2RlID0gY29udHJvbENoYXJzWzFdID8gcGFyc2VJbnQoY29udHJvbENoYXJzWzFdLnNwbGl0KCc7JylbMF0pIDogMDtcbiAgaWYgKChjb250cm9sQ29kZSA+PSAzMCAmJiBjb250cm9sQ29kZSA8PSAzOSkgfHwgKGNvbnRyb2xDb2RlID49IDkwICYmIGNvbnRyb2xDb2RlIDw9IDk3KSkge1xuICAgIHN0YXRlLmxhc3RGb3JlZ3JvdW5kQWRkZWQgPSBjb250cm9sQ2hhcnNbMF07XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICgoY29udHJvbENvZGUgPj0gNDAgJiYgY29udHJvbENvZGUgPD0gNDkpIHx8IChjb250cm9sQ29kZSA+PSAxMDAgJiYgY29udHJvbENvZGUgPD0gMTA3KSkge1xuICAgIHN0YXRlLmxhc3RCYWNrZ3JvdW5kQWRkZWQgPSBjb250cm9sQ2hhcnNbMF07XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb250cm9sQ29kZSA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgaW4gc3RhdGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLCBpKSkge1xuICAgICAgICBkZWxldGUgc3RhdGVbaV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBsZXQgaW5mbyA9IGNvZGVDYWNoZVtjb250cm9sQ2hhcnNbMF1dO1xuICBpZiAoaW5mbykge1xuICAgIHN0YXRlW2luZm8uc2V0XSA9IGluZm8udG87XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFN0YXRlKGxpbmUpIHtcbiAgbGV0IGNvZGUgPSBjb2RlUmVnZXgodHJ1ZSk7XG4gIGxldCBjb250cm9sQ2hhcnMgPSBjb2RlLmV4ZWMobGluZSk7XG4gIGxldCBzdGF0ZSA9IHt9O1xuICB3aGlsZSAoY29udHJvbENoYXJzICE9PSBudWxsKSB7XG4gICAgdXBkYXRlU3RhdGUoc3RhdGUsIGNvbnRyb2xDaGFycyk7XG4gICAgY29udHJvbENoYXJzID0gY29kZS5leGVjKGxpbmUpO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gdW53aW5kU3RhdGUoc3RhdGUsIHJldCkge1xuICBsZXQgbGFzdEJhY2tncm91bmRBZGRlZCA9IHN0YXRlLmxhc3RCYWNrZ3JvdW5kQWRkZWQ7XG4gIGxldCBsYXN0Rm9yZWdyb3VuZEFkZGVkID0gc3RhdGUubGFzdEZvcmVncm91bmRBZGRlZDtcblxuICBkZWxldGUgc3RhdGUubGFzdEJhY2tncm91bmRBZGRlZDtcbiAgZGVsZXRlIHN0YXRlLmxhc3RGb3JlZ3JvdW5kQWRkZWQ7XG5cbiAgT2JqZWN0LmtleXMoc3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChzdGF0ZVtrZXldKSB7XG4gICAgICByZXQgKz0gY29kZUNhY2hlW2tleV0ub2ZmO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGxhc3RCYWNrZ3JvdW5kQWRkZWQgJiYgbGFzdEJhY2tncm91bmRBZGRlZCAhPSAnXFx1MDAxYls0OW0nKSB7XG4gICAgcmV0ICs9ICdcXHUwMDFiWzQ5bSc7XG4gIH1cbiAgaWYgKGxhc3RGb3JlZ3JvdW5kQWRkZWQgJiYgbGFzdEZvcmVncm91bmRBZGRlZCAhPSAnXFx1MDAxYlszOW0nKSB7XG4gICAgcmV0ICs9ICdcXHUwMDFiWzM5bSc7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiByZXdpbmRTdGF0ZShzdGF0ZSwgcmV0KSB7XG4gIGxldCBsYXN0QmFja2dyb3VuZEFkZGVkID0gc3RhdGUubGFzdEJhY2tncm91bmRBZGRlZDtcbiAgbGV0IGxhc3RGb3JlZ3JvdW5kQWRkZWQgPSBzdGF0ZS5sYXN0Rm9yZWdyb3VuZEFkZGVkO1xuXG4gIGRlbGV0ZSBzdGF0ZS5sYXN0QmFja2dyb3VuZEFkZGVkO1xuICBkZWxldGUgc3RhdGUubGFzdEZvcmVncm91bmRBZGRlZDtcblxuICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHN0YXRlW2tleV0pIHtcbiAgICAgIHJldCA9IGNvZGVDYWNoZVtrZXldLm9uICsgcmV0O1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGxhc3RCYWNrZ3JvdW5kQWRkZWQgJiYgbGFzdEJhY2tncm91bmRBZGRlZCAhPSAnXFx1MDAxYls0OW0nKSB7XG4gICAgcmV0ID0gbGFzdEJhY2tncm91bmRBZGRlZCArIHJldDtcbiAgfVxuICBpZiAobGFzdEZvcmVncm91bmRBZGRlZCAmJiBsYXN0Rm9yZWdyb3VuZEFkZGVkICE9ICdcXHUwMDFiWzM5bScpIHtcbiAgICByZXQgPSBsYXN0Rm9yZWdyb3VuZEFkZGVkICsgcmV0O1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gdHJ1bmNhdGVXaWR0aChzdHIsIGRlc2lyZWRMZW5ndGgpIHtcbiAgaWYgKHN0ci5sZW5ndGggPT09IHN0cmxlbihzdHIpKSB7XG4gICAgcmV0dXJuIHN0ci5zdWJzdHIoMCwgZGVzaXJlZExlbmd0aCk7XG4gIH1cblxuICB3aGlsZSAoc3RybGVuKHN0cikgPiBkZXNpcmVkTGVuZ3RoKSB7XG4gICAgc3RyID0gc3RyLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIHRydW5jYXRlV2lkdGhXaXRoQW5zaShzdHIsIGRlc2lyZWRMZW5ndGgpIHtcbiAgbGV0IGNvZGUgPSBjb2RlUmVnZXgodHJ1ZSk7XG4gIGxldCBzcGxpdCA9IHN0ci5zcGxpdChjb2RlUmVnZXgoKSk7XG4gIGxldCBzcGxpdEluZGV4ID0gMDtcbiAgbGV0IHJldExlbiA9IDA7XG4gIGxldCByZXQgPSAnJztcbiAgbGV0IG15QXJyYXk7XG4gIGxldCBzdGF0ZSA9IHt9O1xuXG4gIHdoaWxlIChyZXRMZW4gPCBkZXNpcmVkTGVuZ3RoKSB7XG4gICAgbXlBcnJheSA9IGNvZGUuZXhlYyhzdHIpO1xuICAgIGxldCB0b0FkZCA9IHNwbGl0W3NwbGl0SW5kZXhdO1xuICAgIHNwbGl0SW5kZXgrKztcbiAgICBpZiAocmV0TGVuICsgc3RybGVuKHRvQWRkKSA+IGRlc2lyZWRMZW5ndGgpIHtcbiAgICAgIHRvQWRkID0gdHJ1bmNhdGVXaWR0aCh0b0FkZCwgZGVzaXJlZExlbmd0aCAtIHJldExlbik7XG4gICAgfVxuICAgIHJldCArPSB0b0FkZDtcbiAgICByZXRMZW4gKz0gc3RybGVuKHRvQWRkKTtcblxuICAgIGlmIChyZXRMZW4gPCBkZXNpcmVkTGVuZ3RoKSB7XG4gICAgICBpZiAoIW15QXJyYXkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIGZ1bGwtd2lkdGggY2hhcnMgbWF5IGNhdXNlIGEgd2hpdGVzcGFjZSB3aGljaCBjYW5ub3QgYmUgZmlsbGVkXG4gICAgICByZXQgKz0gbXlBcnJheVswXTtcbiAgICAgIHVwZGF0ZVN0YXRlKHN0YXRlLCBteUFycmF5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW53aW5kU3RhdGUoc3RhdGUsIHJldCk7XG59XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHN0ciwgZGVzaXJlZExlbmd0aCwgdHJ1bmNhdGVDaGFyKSB7XG4gIHRydW5jYXRlQ2hhciA9IHRydW5jYXRlQ2hhciB8fCAn4oCmJztcbiAgbGV0IGxlbmd0aE9mU3RyID0gc3RybGVuKHN0cik7XG4gIGlmIChsZW5ndGhPZlN0ciA8PSBkZXNpcmVkTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBkZXNpcmVkTGVuZ3RoIC09IHN0cmxlbih0cnVuY2F0ZUNoYXIpO1xuXG4gIGxldCByZXQgPSB0cnVuY2F0ZVdpZHRoV2l0aEFuc2koc3RyLCBkZXNpcmVkTGVuZ3RoKTtcblxuICByZXQgKz0gdHJ1bmNhdGVDaGFyO1xuXG4gIGNvbnN0IGhyZWZUYWcgPSAnXFx4MUJdODs7XFx4MDcnO1xuXG4gIGlmIChzdHIuaW5jbHVkZXMoaHJlZlRhZykgJiYgIXJldC5pbmNsdWRlcyhocmVmVGFnKSkge1xuICAgIHJldCArPSBocmVmVGFnO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgY2hhcnM6IHtcbiAgICAgIHRvcDogJ+KUgCcsXG4gICAgICAndG9wLW1pZCc6ICfilKwnLFxuICAgICAgJ3RvcC1sZWZ0JzogJ+KUjCcsXG4gICAgICAndG9wLXJpZ2h0JzogJ+KUkCcsXG4gICAgICBib3R0b206ICfilIAnLFxuICAgICAgJ2JvdHRvbS1taWQnOiAn4pS0JyxcbiAgICAgICdib3R0b20tbGVmdCc6ICfilJQnLFxuICAgICAgJ2JvdHRvbS1yaWdodCc6ICfilJgnLFxuICAgICAgbGVmdDogJ+KUgicsXG4gICAgICAnbGVmdC1taWQnOiAn4pScJyxcbiAgICAgIG1pZDogJ+KUgCcsXG4gICAgICAnbWlkLW1pZCc6ICfilLwnLFxuICAgICAgcmlnaHQ6ICfilIInLFxuICAgICAgJ3JpZ2h0LW1pZCc6ICfilKQnLFxuICAgICAgbWlkZGxlOiAn4pSCJyxcbiAgICB9LFxuICAgIHRydW5jYXRlOiAn4oCmJyxcbiAgICBjb2xXaWR0aHM6IFtdLFxuICAgIHJvd0hlaWdodHM6IFtdLFxuICAgIGNvbEFsaWduczogW10sXG4gICAgcm93QWxpZ25zOiBbXSxcbiAgICBzdHlsZToge1xuICAgICAgJ3BhZGRpbmctbGVmdCc6IDEsXG4gICAgICAncGFkZGluZy1yaWdodCc6IDEsXG4gICAgICBoZWFkOiBbJ3JlZCddLFxuICAgICAgYm9yZGVyOiBbJ2dyZXknXSxcbiAgICAgIGNvbXBhY3Q6IGZhbHNlLFxuICAgIH0sXG4gICAgaGVhZDogW10sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0cykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZGVmYXVsdHMgPSBkZWZhdWx0cyB8fCBkZWZhdWx0T3B0aW9ucygpO1xuICBsZXQgcmV0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xuICByZXQuY2hhcnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cy5jaGFycywgb3B0aW9ucy5jaGFycyk7XG4gIHJldC5zdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLnN0eWxlLCBvcHRpb25zLnN0eWxlKTtcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gV3JhcCBvbiB3b3JkIGJvdW5kYXJ5XG5mdW5jdGlvbiB3b3JkV3JhcChtYXhMZW5ndGgsIGlucHV0KSB7XG4gIGxldCBsaW5lcyA9IFtdO1xuICBsZXQgc3BsaXQgPSBpbnB1dC5zcGxpdCgvKFxccyspL2cpO1xuICBsZXQgbGluZSA9IFtdO1xuICBsZXQgbGluZUxlbmd0aCA9IDA7XG4gIGxldCB3aGl0ZXNwYWNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgbGV0IHdvcmQgPSBzcGxpdFtpXTtcbiAgICBsZXQgbmV3TGVuZ3RoID0gbGluZUxlbmd0aCArIHN0cmxlbih3b3JkKTtcbiAgICBpZiAobGluZUxlbmd0aCA+IDAgJiYgd2hpdGVzcGFjZSkge1xuICAgICAgbmV3TGVuZ3RoICs9IHdoaXRlc3BhY2UubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobmV3TGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICBpZiAobGluZUxlbmd0aCAhPT0gMCkge1xuICAgICAgICBsaW5lcy5wdXNoKGxpbmUuam9pbignJykpO1xuICAgICAgfVxuICAgICAgbGluZSA9IFt3b3JkXTtcbiAgICAgIGxpbmVMZW5ndGggPSBzdHJsZW4od29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmUucHVzaCh3aGl0ZXNwYWNlIHx8ICcnLCB3b3JkKTtcbiAgICAgIGxpbmVMZW5ndGggPSBuZXdMZW5ndGg7XG4gICAgfVxuICAgIHdoaXRlc3BhY2UgPSBzcGxpdFtpICsgMV07XG4gIH1cbiAgaWYgKGxpbmVMZW5ndGgpIHtcbiAgICBsaW5lcy5wdXNoKGxpbmUuam9pbignJykpO1xuICB9XG4gIHJldHVybiBsaW5lcztcbn1cblxuLy8gV3JhcCB0ZXh0IChpZ25vcmluZyB3b3JkIGJvdW5kYXJpZXMpXG5mdW5jdGlvbiB0ZXh0V3JhcChtYXhMZW5ndGgsIGlucHV0KSB7XG4gIGxldCBsaW5lcyA9IFtdO1xuICBsZXQgbGluZSA9ICcnO1xuICBmdW5jdGlvbiBwdXNoTGluZShzdHIsIHdzKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoICYmIHdzKSBsaW5lICs9IHdzO1xuICAgIGxpbmUgKz0gc3RyO1xuICAgIHdoaWxlIChsaW5lLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgbGluZXMucHVzaChsaW5lLnNsaWNlKDAsIG1heExlbmd0aCkpO1xuICAgICAgbGluZSA9IGxpbmUuc2xpY2UobWF4TGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgbGV0IHNwbGl0ID0gaW5wdXQuc3BsaXQoLyhcXHMrKS9nKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHB1c2hMaW5lKHNwbGl0W2ldLCBpICYmIHNwbGl0W2kgLSAxXSk7XG4gIH1cbiAgaWYgKGxpbmUubGVuZ3RoKSBsaW5lcy5wdXNoKGxpbmUpO1xuICByZXR1cm4gbGluZXM7XG59XG5cbmZ1bmN0aW9uIG11bHRpTGluZVdvcmRXcmFwKG1heExlbmd0aCwgaW5wdXQsIHdyYXBPbldvcmRCb3VuZGFyeSA9IHRydWUpIHtcbiAgbGV0IG91dHB1dCA9IFtdO1xuICBpbnB1dCA9IGlucHV0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgaGFuZGxlciA9IHdyYXBPbldvcmRCb3VuZGFyeSA/IHdvcmRXcmFwIDogdGV4dFdyYXA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIGhhbmRsZXIobWF4TGVuZ3RoLCBpbnB1dFtpXSkpO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGNvbG9yaXplTGluZXMoaW5wdXQpIHtcbiAgbGV0IHN0YXRlID0ge307XG4gIGxldCBvdXRwdXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGxldCBsaW5lID0gcmV3aW5kU3RhdGUoc3RhdGUsIGlucHV0W2ldKTtcbiAgICBzdGF0ZSA9IHJlYWRTdGF0ZShsaW5lKTtcbiAgICBsZXQgdGVtcCA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKTtcbiAgICBvdXRwdXQucHVzaCh1bndpbmRTdGF0ZSh0ZW1wLCBsaW5lKSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDcmVkaXQ6IE1hdGhldXMgU2FtcGFpbyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGV1c3NhbXBhaW9cbiAqL1xuZnVuY3Rpb24gaHlwZXJsaW5rKHVybCwgdGV4dCkge1xuICBjb25zdCBPU0MgPSAnXFx1MDAxQl0nO1xuICBjb25zdCBCRUwgPSAnXFx1MDAwNyc7XG4gIGNvbnN0IFNFUCA9ICc7JztcblxuICByZXR1cm4gW09TQywgJzgnLCBTRVAsIFNFUCwgdXJsIHx8IHRleHQsIEJFTCwgdGV4dCwgT1NDLCAnOCcsIFNFUCwgU0VQLCBCRUxdLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RybGVuOiBzdHJsZW4sXG4gIHJlcGVhdDogcmVwZWF0LFxuICBwYWQ6IHBhZCxcbiAgdHJ1bmNhdGU6IHRydW5jYXRlLFxuICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgd29yZFdyYXA6IG11bHRpTGluZVdvcmRXcmFwLFxuICBjb2xvcml6ZUxpbmVzOiBjb2xvcml6ZUxpbmVzLFxuICBoeXBlcmxpbmssXG59O1xuIiwKICAgICIvKlxuVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cblxudmFyIHN0eWxlcyA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBzdHlsZXM7XG5cbnZhciBjb2RlcyA9IHtcbiAgcmVzZXQ6IFswLCAwXSxcblxuICBib2xkOiBbMSwgMjJdLFxuICBkaW06IFsyLCAyMl0sXG4gIGl0YWxpYzogWzMsIDIzXSxcbiAgdW5kZXJsaW5lOiBbNCwgMjRdLFxuICBpbnZlcnNlOiBbNywgMjddLFxuICBoaWRkZW46IFs4LCAyOF0sXG4gIHN0cmlrZXRocm91Z2g6IFs5LCAyOV0sXG5cbiAgYmxhY2s6IFszMCwgMzldLFxuICByZWQ6IFszMSwgMzldLFxuICBncmVlbjogWzMyLCAzOV0sXG4gIHllbGxvdzogWzMzLCAzOV0sXG4gIGJsdWU6IFszNCwgMzldLFxuICBtYWdlbnRhOiBbMzUsIDM5XSxcbiAgY3lhbjogWzM2LCAzOV0sXG4gIHdoaXRlOiBbMzcsIDM5XSxcbiAgZ3JheTogWzkwLCAzOV0sXG4gIGdyZXk6IFs5MCwgMzldLFxuXG4gIGJyaWdodFJlZDogWzkxLCAzOV0sXG4gIGJyaWdodEdyZWVuOiBbOTIsIDM5XSxcbiAgYnJpZ2h0WWVsbG93OiBbOTMsIDM5XSxcbiAgYnJpZ2h0Qmx1ZTogWzk0LCAzOV0sXG4gIGJyaWdodE1hZ2VudGE6IFs5NSwgMzldLFxuICBicmlnaHRDeWFuOiBbOTYsIDM5XSxcbiAgYnJpZ2h0V2hpdGU6IFs5NywgMzldLFxuXG4gIGJnQmxhY2s6IFs0MCwgNDldLFxuICBiZ1JlZDogWzQxLCA0OV0sXG4gIGJnR3JlZW46IFs0MiwgNDldLFxuICBiZ1llbGxvdzogWzQzLCA0OV0sXG4gIGJnQmx1ZTogWzQ0LCA0OV0sXG4gIGJnTWFnZW50YTogWzQ1LCA0OV0sXG4gIGJnQ3lhbjogWzQ2LCA0OV0sXG4gIGJnV2hpdGU6IFs0NywgNDldLFxuICBiZ0dyYXk6IFsxMDAsIDQ5XSxcbiAgYmdHcmV5OiBbMTAwLCA0OV0sXG5cbiAgYmdCcmlnaHRSZWQ6IFsxMDEsIDQ5XSxcbiAgYmdCcmlnaHRHcmVlbjogWzEwMiwgNDldLFxuICBiZ0JyaWdodFllbGxvdzogWzEwMywgNDldLFxuICBiZ0JyaWdodEJsdWU6IFsxMDQsIDQ5XSxcbiAgYmdCcmlnaHRNYWdlbnRhOiBbMTA1LCA0OV0sXG4gIGJnQnJpZ2h0Q3lhbjogWzEwNiwgNDldLFxuICBiZ0JyaWdodFdoaXRlOiBbMTA3LCA0OV0sXG5cbiAgLy8gbGVnYWN5IHN0eWxlcyBmb3IgY29sb3JzIHByZSB2MS4wLjBcbiAgYmxhY2tCRzogWzQwLCA0OV0sXG4gIHJlZEJHOiBbNDEsIDQ5XSxcbiAgZ3JlZW5CRzogWzQyLCA0OV0sXG4gIHllbGxvd0JHOiBbNDMsIDQ5XSxcbiAgYmx1ZUJHOiBbNDQsIDQ5XSxcbiAgbWFnZW50YUJHOiBbNDUsIDQ5XSxcbiAgY3lhbkJHOiBbNDYsIDQ5XSxcbiAgd2hpdGVCRzogWzQ3LCA0OV0sXG5cbn07XG5cbk9iamVjdC5rZXlzKGNvZGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICB2YXIgdmFsID0gY29kZXNba2V5XTtcbiAgdmFyIHN0eWxlID0gc3R5bGVzW2tleV0gPSBbXTtcbiAgc3R5bGUub3BlbiA9ICdcXHUwMDFiWycgKyB2YWxbMF0gKyAnbSc7XG4gIHN0eWxlLmNsb3NlID0gJ1xcdTAwMWJbJyArIHZhbFsxXSArICdtJztcbn0pO1xuIiwKICAgICIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxudGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpblxudGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xudXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXNcbm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkb1xuc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZsYWcsIGFyZ3YpIHtcbiAgYXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXG4gIHZhciB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuICB2YXIgcHJlZml4ID0gL14tezEsMn0vLnRlc3QoZmxhZykgPyAnJyA6ICctLSc7XG4gIHZhciBwb3MgPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cbiAgcmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsCiAgICAiLypcblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIG9zID0gcmVxdWlyZSgnb3MnKTtcbnZhciBoYXNGbGFnID0gcmVxdWlyZSgnLi9oYXMtZmxhZy5qcycpO1xuXG52YXIgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbnZhciBmb3JjZUNvbG9yID0gdm9pZCAwO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHwgaGFzRmxhZygnbm8tY29sb3JzJykgfHwgaGFzRmxhZygnY29sb3I9ZmFsc2UnKSkge1xuICBmb3JjZUNvbG9yID0gZmFsc2U7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHwgaGFzRmxhZygnY29sb3JzJykgfHwgaGFzRmxhZygnY29sb3I9dHJ1ZScpXG4gICAgICAgICAgIHx8IGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG4gIGZvcmNlQ29sb3IgPSB0cnVlO1xufVxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG4gIGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwXG4gICAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG4gIGlmIChsZXZlbCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGV2ZWw6IGxldmVsLFxuICAgIGhhc0Jhc2ljOiB0cnVlLFxuICAgIGhhczI1NjogbGV2ZWwgPj0gMixcbiAgICBoYXMxNm06IGxldmVsID49IDMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG4gIGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8IGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKVxuICAgICAgfHwgaGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcbiAgICByZXR1cm4gMztcbiAgfVxuXG4gIGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuICAgIHJldHVybiAyO1xuICB9XG5cbiAgaWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG4gICAgLy8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcbiAgICAvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcbiAgICAvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3RcbiAgICAvLyBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZVxuICAgIC8vIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuICAgIHZhciBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcbiAgICBpZiAoTnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4XG4gICAgICAgICYmIE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2KSB7XG4gICAgICByZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICgnQ0knIGluIGVudikge1xuICAgIGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKGZ1bmN0aW9uKHNpZ24pIHtcbiAgICAgIHJldHVybiBzaWduIGluIGVudjtcbiAgICB9KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbjtcbiAgfVxuXG4gIGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG4gICAgcmV0dXJuICgvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMFxuICAgICk7XG4gIH1cblxuICBpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG4gICAgdmFyIHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cbiAgICBzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcbiAgICAgIGNhc2UgJ2lUZXJtLmFwcCc6XG4gICAgICAgIHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcbiAgICAgIGNhc2UgJ0h5cGVyJzpcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICBjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgLy8gTm8gZGVmYXVsdFxuICAgIH1cbiAgfVxuXG4gIGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cblxuICBpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuICAgIHJldHVybiBtaW47XG4gIH1cblxuICByZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG4gIHZhciBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcbiAgcmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcbiAgc3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuICBzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVyciksXG59O1xuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uIHJ1blRoZVRyYXAodGV4dCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHRleHQgPSB0ZXh0IHx8ICdSdW4gdGhlIHRyYXAsIGRyb3AgdGhlIGJhc3MnO1xuICB0ZXh0ID0gdGV4dC5zcGxpdCgnJyk7XG4gIHZhciB0cmFwID0ge1xuICAgIGE6IFsnXFx1MDA0MCcsICdcXHUwMTA0JywgJ1xcdTAyM2EnLCAnXFx1MDI0NScsICdcXHUwMzk0JywgJ1xcdTAzOWInLCAnXFx1MDQxNCddLFxuICAgIGI6IFsnXFx1MDBkZicsICdcXHUwMTgxJywgJ1xcdTAyNDMnLCAnXFx1MDI2ZScsICdcXHUwM2IyJywgJ1xcdTBlM2YnXSxcbiAgICBjOiBbJ1xcdTAwYTknLCAnXFx1MDIzYicsICdcXHUwM2ZlJ10sXG4gICAgZDogWydcXHUwMGQwJywgJ1xcdTAxOGEnLCAnXFx1MDUwMCcsICdcXHUwNTAxJywgJ1xcdTA1MDInLCAnXFx1MDUwMyddLFxuICAgIGU6IFsnXFx1MDBjYicsICdcXHUwMTE1JywgJ1xcdTAxOGUnLCAnXFx1MDI1OCcsICdcXHUwM2EzJywgJ1xcdTAzYmUnLCAnXFx1MDRiYycsXG4gICAgICAnXFx1MGE2YyddLFxuICAgIGY6IFsnXFx1MDRmYSddLFxuICAgIGc6IFsnXFx1MDI2MiddLFxuICAgIGg6IFsnXFx1MDEyNicsICdcXHUwMTk1JywgJ1xcdTA0YTInLCAnXFx1MDRiYScsICdcXHUwNGM3JywgJ1xcdTA1MGEnXSxcbiAgICBpOiBbJ1xcdTBmMGYnXSxcbiAgICBqOiBbJ1xcdTAxMzQnXSxcbiAgICBrOiBbJ1xcdTAxMzgnLCAnXFx1MDRhMCcsICdcXHUwNGMzJywgJ1xcdTA1MWUnXSxcbiAgICBsOiBbJ1xcdTAxMzknXSxcbiAgICBtOiBbJ1xcdTAyOGQnLCAnXFx1MDRjZCcsICdcXHUwNGNlJywgJ1xcdTA1MjAnLCAnXFx1MDUyMScsICdcXHUwZDY5J10sXG4gICAgbjogWydcXHUwMGQxJywgJ1xcdTAxNGInLCAnXFx1MDE5ZCcsICdcXHUwMzc2JywgJ1xcdTAzYTAnLCAnXFx1MDQ4YSddLFxuICAgIG86IFsnXFx1MDBkOCcsICdcXHUwMGY1JywgJ1xcdTAwZjgnLCAnXFx1MDFmZScsICdcXHUwMjk4JywgJ1xcdTA0N2EnLCAnXFx1MDVkZCcsXG4gICAgICAnXFx1MDZkZCcsICdcXHUwZTRmJ10sXG4gICAgcDogWydcXHUwMWY3JywgJ1xcdTA0OGUnXSxcbiAgICBxOiBbJ1xcdTA5Y2QnXSxcbiAgICByOiBbJ1xcdTAwYWUnLCAnXFx1MDFhNicsICdcXHUwMjEwJywgJ1xcdTAyNGMnLCAnXFx1MDI4MCcsICdcXHUwNDJmJ10sXG4gICAgczogWydcXHUwMGE3JywgJ1xcdTAzZGUnLCAnXFx1MDNkZicsICdcXHUwM2U4J10sXG4gICAgdDogWydcXHUwMTQxJywgJ1xcdTAxNjYnLCAnXFx1MDM3MyddLFxuICAgIHU6IFsnXFx1MDFiMScsICdcXHUwNTRkJ10sXG4gICAgdjogWydcXHUwNWQ4J10sXG4gICAgdzogWydcXHUwNDI4JywgJ1xcdTA0NjAnLCAnXFx1MDQ3YycsICdcXHUwZDcwJ10sXG4gICAgeDogWydcXHUwNGIyJywgJ1xcdTA0ZmUnLCAnXFx1MDRmYycsICdcXHUwNGZkJ10sXG4gICAgeTogWydcXHUwMGE1JywgJ1xcdTA0YjAnLCAnXFx1MDRjYiddLFxuICAgIHo6IFsnXFx1MDFiNScsICdcXHUwMjQwJ10sXG4gIH07XG4gIHRleHQuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgYyA9IGMudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY2hhcnMgPSB0cmFwW2NdIHx8IFsnICddO1xuICAgIHZhciByYW5kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKTtcbiAgICBpZiAodHlwZW9mIHRyYXBbY10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXN1bHQgKz0gdHJhcFtjXVtyYW5kXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9IGM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLAogICAgIi8vIHBsZWFzZSBub1xubW9kdWxlWydleHBvcnRzJ10gPSBmdW5jdGlvbiB6YWxnbyh0ZXh0LCBvcHRpb25zKSB7XG4gIHRleHQgPSB0ZXh0IHx8ICcgICBoZSBpcyBoZXJlICAgJztcbiAgdmFyIHNvdWwgPSB7XG4gICAgJ3VwJzogW1xuICAgICAgJ8yNJywgJ8yOJywgJ8yEJywgJ8yFJyxcbiAgICAgICfMvycsICfMkScsICfMhicsICfMkCcsXG4gICAgICAnzZInLCAnzZcnLCAnzZEnLCAnzIcnLFxuICAgICAgJ8yIJywgJ8yKJywgJ82CJywgJ8yTJyxcbiAgICAgICfMiCcsICfNiicsICfNiycsICfNjCcsXG4gICAgICAnzIMnLCAnzIInLCAnzIwnLCAnzZAnLFxuICAgICAgJ8yAJywgJ8yBJywgJ8yLJywgJ8yPJyxcbiAgICAgICfMkicsICfMkycsICfMlCcsICfMvScsXG4gICAgICAnzIknLCAnzaMnLCAnzaQnLCAnzaUnLFxuICAgICAgJ82mJywgJ82nJywgJ82oJywgJ82pJyxcbiAgICAgICfNqicsICfNqycsICfNrCcsICfNrScsXG4gICAgICAnza4nLCAnza8nLCAnzL4nLCAnzZsnLFxuICAgICAgJ82GJywgJ8yaJyxcbiAgICBdLFxuICAgICdkb3duJzogW1xuICAgICAgJ8yWJywgJ8yXJywgJ8yYJywgJ8yZJyxcbiAgICAgICfMnCcsICfMnScsICfMnicsICfMnycsXG4gICAgICAnzKAnLCAnzKQnLCAnzKUnLCAnzKYnLFxuICAgICAgJ8ypJywgJ8yqJywgJ8yrJywgJ8ysJyxcbiAgICAgICfMrScsICfMricsICfMrycsICfMsCcsXG4gICAgICAnzLEnLCAnzLInLCAnzLMnLCAnzLknLFxuICAgICAgJ8y6JywgJ8y7JywgJ8y8JywgJ82FJyxcbiAgICAgICfNhycsICfNiCcsICfNiScsICfNjScsXG4gICAgICAnzY4nLCAnzZMnLCAnzZQnLCAnzZUnLFxuICAgICAgJ82WJywgJ82ZJywgJ82aJywgJ8yjJyxcbiAgICBdLFxuICAgICdtaWQnOiBbXG4gICAgICAnzJUnLCAnzJsnLCAnzIAnLCAnzIEnLFxuICAgICAgJ82YJywgJ8yhJywgJ8yiJywgJ8ynJyxcbiAgICAgICfMqCcsICfMtCcsICfMtScsICfMticsXG4gICAgICAnzZwnLCAnzZ0nLCAnzZ4nLFxuICAgICAgJ82fJywgJ82gJywgJ82iJywgJ8y4JyxcbiAgICAgICfMtycsICfNoScsICcg0oknLFxuICAgIF0sXG4gIH07XG4gIHZhciBhbGwgPSBbXS5jb25jYXQoc291bC51cCwgc291bC5kb3duLCBzb3VsLm1pZCk7XG5cbiAgZnVuY3Rpb24gcmFuZG9tTnVtYmVyKHJhbmdlKSB7XG4gICAgdmFyIHIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5nZSk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NoYXIoY2hhcmFjdGVyKSB7XG4gICAgdmFyIGJvb2wgPSBmYWxzZTtcbiAgICBhbGwuZmlsdGVyKGZ1bmN0aW9uKGkpIHtcbiAgICAgIGJvb2wgPSAoaSA9PT0gY2hhcmFjdGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYm9vbDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gaGVDb21lcyh0ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBjb3VudHM7XG4gICAgdmFyIGw7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9uc1sndXAnXSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uc1sndXAnXSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zWyd1cCddIDogdHJ1ZTtcbiAgICBvcHRpb25zWydtaWQnXSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uc1snbWlkJ10gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uc1snbWlkJ10gOiB0cnVlO1xuICAgIG9wdGlvbnNbJ2Rvd24nXSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uc1snZG93biddICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnNbJ2Rvd24nXSA6IHRydWU7XG4gICAgb3B0aW9uc1snc2l6ZSddID1cbiAgICAgIHR5cGVvZiBvcHRpb25zWydzaXplJ10gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uc1snc2l6ZSddIDogJ21heGknO1xuICAgIHRleHQgPSB0ZXh0LnNwbGl0KCcnKTtcbiAgICBmb3IgKGwgaW4gdGV4dCkge1xuICAgICAgaWYgKGlzQ2hhcihsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRleHRbbF07XG4gICAgICBjb3VudHMgPSB7J3VwJzogMCwgJ2Rvd24nOiAwLCAnbWlkJzogMH07XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMuc2l6ZSkge1xuICAgICAgICBjYXNlICdtaW5pJzpcbiAgICAgICAgICBjb3VudHMudXAgPSByYW5kb21OdW1iZXIoOCk7XG4gICAgICAgICAgY291bnRzLm1pZCA9IHJhbmRvbU51bWJlcigyKTtcbiAgICAgICAgICBjb3VudHMuZG93biA9IHJhbmRvbU51bWJlcig4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWF4aSc6XG4gICAgICAgICAgY291bnRzLnVwID0gcmFuZG9tTnVtYmVyKDE2KSArIDM7XG4gICAgICAgICAgY291bnRzLm1pZCA9IHJhbmRvbU51bWJlcig0KSArIDE7XG4gICAgICAgICAgY291bnRzLmRvd24gPSByYW5kb21OdW1iZXIoNjQpICsgMztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb3VudHMudXAgPSByYW5kb21OdW1iZXIoOCkgKyAxO1xuICAgICAgICAgIGNvdW50cy5taWQgPSByYW5kb21OdW1iZXIoNikgLyAyO1xuICAgICAgICAgIGNvdW50cy5kb3duID0gcmFuZG9tTnVtYmVyKDgpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGFyciA9IFsndXAnLCAnbWlkJywgJ2Rvd24nXTtcbiAgICAgIGZvciAodmFyIGQgaW4gYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFycltkXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gY291bnRzW2luZGV4XTsgaSsrKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBzb3VsW2luZGV4XVtyYW5kb21OdW1iZXIoc291bFtpbmRleF0ubGVuZ3RoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gZG9uJ3Qgc3VtbW9uIGhpbVxuICByZXR1cm4gaGVDb21lcyh0ZXh0LCBvcHRpb25zKTtcbn07XG5cbiIsCiAgICAibW9kdWxlWydleHBvcnRzJ10gPSBmdW5jdGlvbihjb2xvcnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxldHRlciwgaSwgZXhwbG9kZWQpIHtcbiAgICBpZiAobGV0dGVyID09PSAnICcpIHJldHVybiBsZXR0ZXI7XG4gICAgc3dpdGNoIChpJTMpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIGNvbG9ycy5yZWQobGV0dGVyKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGNvbG9ycy53aGl0ZShsZXR0ZXIpO1xuICAgICAgY2FzZSAyOiByZXR1cm4gY29sb3JzLmJsdWUobGV0dGVyKTtcbiAgICB9XG4gIH07XG59O1xuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICByZXR1cm4gZnVuY3Rpb24obGV0dGVyLCBpLCBleHBsb2RlZCkge1xuICAgIHJldHVybiBpICUgMiA9PT0gMCA/IGxldHRlciA6IGNvbG9ycy5pbnZlcnNlKGxldHRlcik7XG4gIH07XG59O1xuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAvLyBSb1kgRyBCaVZcbiAgdmFyIHJhaW5ib3dDb2xvcnMgPSBbJ3JlZCcsICd5ZWxsb3cnLCAnZ3JlZW4nLCAnYmx1ZScsICdtYWdlbnRhJ107XG4gIHJldHVybiBmdW5jdGlvbihsZXR0ZXIsIGksIGV4cGxvZGVkKSB7XG4gICAgaWYgKGxldHRlciA9PT0gJyAnKSB7XG4gICAgICByZXR1cm4gbGV0dGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29sb3JzW3JhaW5ib3dDb2xvcnNbaSsrICUgcmFpbmJvd0NvbG9ycy5sZW5ndGhdXShsZXR0ZXIpO1xuICAgIH1cbiAgfTtcbn07XG5cbiIsCiAgICAibW9kdWxlWydleHBvcnRzJ10gPSBmdW5jdGlvbihjb2xvcnMpIHtcbiAgdmFyIGF2YWlsYWJsZSA9IFsndW5kZXJsaW5lJywgJ2ludmVyc2UnLCAnZ3JleScsICd5ZWxsb3cnLCAncmVkJywgJ2dyZWVuJyxcbiAgICAnYmx1ZScsICd3aGl0ZScsICdjeWFuJywgJ21hZ2VudGEnLCAnYnJpZ2h0WWVsbG93JywgJ2JyaWdodFJlZCcsXG4gICAgJ2JyaWdodEdyZWVuJywgJ2JyaWdodEJsdWUnLCAnYnJpZ2h0V2hpdGUnLCAnYnJpZ2h0Q3lhbicsICdicmlnaHRNYWdlbnRhJ107XG4gIHJldHVybiBmdW5jdGlvbihsZXR0ZXIsIGksIGV4cGxvZGVkKSB7XG4gICAgcmV0dXJuIGxldHRlciA9PT0gJyAnID8gbGV0dGVyIDpcbiAgICAgIGNvbG9yc1tcbiAgICAgICAgICBhdmFpbGFibGVbTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKGF2YWlsYWJsZS5sZW5ndGggLSAyKSldXG4gICAgICBdKGxldHRlcik7XG4gIH07XG59O1xuIiwKICAgICIvKlxuXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuT3JpZ2luYWwgTGlicmFyeVxuICAtIENvcHlyaWdodCAoYykgTWFyYWsgU3F1aXJlc1xuXG5BZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHlcbiAtIENvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cblxudmFyIGNvbG9ycyA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBjb2xvcnM7XG5cbmNvbG9ycy50aGVtZXMgPSB7fTtcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgYW5zaVN0eWxlcyA9IGNvbG9ycy5zdHlsZXMgPSByZXF1aXJlKCcuL3N0eWxlcycpO1xudmFyIGRlZmluZVByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgbmV3TGluZVJlZ2V4ID0gbmV3IFJlZ0V4cCgvW1xcclxcbl0rL2cpO1xuXG5jb2xvcnMuc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJy4vc3lzdGVtL3N1cHBvcnRzLWNvbG9ycycpLnN1cHBvcnRzQ29sb3I7XG5cbmlmICh0eXBlb2YgY29sb3JzLmVuYWJsZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbG9ycy5lbmFibGVkID0gY29sb3JzLnN1cHBvcnRzQ29sb3IoKSAhPT0gZmFsc2U7XG59XG5cbmNvbG9ycy5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgY29sb3JzLmVuYWJsZWQgPSB0cnVlO1xufTtcblxuY29sb3JzLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgY29sb3JzLmVuYWJsZWQgPSBmYWxzZTtcbn07XG5cbmNvbG9ycy5zdHJpcENvbG9ycyA9IGNvbG9ycy5zdHJpcCA9IGZ1bmN0aW9uKHN0cikge1xuICByZXR1cm4gKCcnICsgc3RyKS5yZXBsYWNlKC9cXHgxQlxcW1xcZCttL2csICcnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xudmFyIHN0eWxpemUgPSBjb2xvcnMuc3R5bGl6ZSA9IGZ1bmN0aW9uIHN0eWxpemUoc3RyLCBzdHlsZSkge1xuICBpZiAoIWNvbG9ycy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHN0cisnJztcbiAgfVxuXG4gIHZhciBzdHlsZU1hcCA9IGFuc2lTdHlsZXNbc3R5bGVdO1xuXG4gIC8vIFN0eWxpemUgc2hvdWxkIHdvcmsgZm9yIG5vbi1BTlNJIHN0eWxlcywgdG9vXG4gIGlmICghc3R5bGVNYXAgJiYgc3R5bGUgaW4gY29sb3JzKSB7XG4gICAgLy8gU3R5bGUgbWFwcyBsaWtlIHRyYXAgb3BlcmF0ZSBhcyBmdW5jdGlvbnMgb24gc3RyaW5ncztcbiAgICAvLyB0aGV5IGRvbid0IGhhdmUgcHJvcGVydGllcyBsaWtlIG9wZW4gb3IgY2xvc2UuXG4gICAgcmV0dXJuIGNvbG9yc1tzdHlsZV0oc3RyKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZU1hcC5vcGVuICsgc3RyICsgc3R5bGVNYXAuY2xvc2U7XG59O1xuXG52YXIgbWF0Y2hPcGVyYXRvcnNSZSA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZztcbnZhciBlc2NhcGVTdHJpbmdSZWdleHAgPSBmdW5jdGlvbihzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuICByZXR1cm4gc3RyLnJlcGxhY2UobWF0Y2hPcGVyYXRvcnNSZSwgJ1xcXFwkJicpO1xufTtcblxuZnVuY3Rpb24gYnVpbGQoX3N0eWxlcykge1xuICB2YXIgYnVpbGRlciA9IGZ1bmN0aW9uIGJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIGFwcGx5U3R5bGUuYXBwbHkoYnVpbGRlciwgYXJndW1lbnRzKTtcbiAgfTtcbiAgYnVpbGRlci5fc3R5bGVzID0gX3N0eWxlcztcbiAgLy8gX19wcm90b19fIGlzIHVzZWQgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcbiAgLy8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlLlxuICBidWlsZGVyLl9fcHJvdG9fXyA9IHByb3RvO1xuICByZXR1cm4gYnVpbGRlcjtcbn1cblxudmFyIHN0eWxlcyA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHJldCA9IHt9O1xuICBhbnNpU3R5bGVzLmdyZXkgPSBhbnNpU3R5bGVzLmdyYXk7XG4gIE9iamVjdC5rZXlzKGFuc2lTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgYW5zaVN0eWxlc1trZXldLmNsb3NlUmUgPVxuICAgICAgbmV3IFJlZ0V4cChlc2NhcGVTdHJpbmdSZWdleHAoYW5zaVN0eWxlc1trZXldLmNsb3NlKSwgJ2cnKTtcbiAgICByZXRba2V5XSA9IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBidWlsZCh0aGlzLl9zdHlsZXMuY29uY2F0KGtleSkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn0pKCk7XG5cbnZhciBwcm90byA9IGRlZmluZVByb3BzKGZ1bmN0aW9uIGNvbG9ycygpIHt9LCBzdHlsZXMpO1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlKCkge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgdmFyIHN0ciA9IGFyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgIC8vIFVzZSB3ZWFrIGVxdWFsaXR5IGNoZWNrIHNvIHdlIGNhbiBjb2xvcml6ZSBudWxsL3VuZGVmaW5lZCBpbiBzYWZlIG1vZGVcbiAgICBpZiAoYXJnICE9IG51bGwgJiYgYXJnLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnKTtcbiAgICB9XG4gIH0pLmpvaW4oJyAnKTtcblxuICBpZiAoIWNvbG9ycy5lbmFibGVkIHx8ICFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgdmFyIG5ld0xpbmVzUHJlc2VudCA9IHN0ci5pbmRleE9mKCdcXG4nKSAhPSAtMTtcblxuICB2YXIgbmVzdGVkU3R5bGVzID0gdGhpcy5fc3R5bGVzO1xuXG4gIHZhciBpID0gbmVzdGVkU3R5bGVzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBjb2RlID0gYW5zaVN0eWxlc1tuZXN0ZWRTdHlsZXNbaV1dO1xuICAgIHN0ciA9IGNvZGUub3BlbiArIHN0ci5yZXBsYWNlKGNvZGUuY2xvc2VSZSwgY29kZS5vcGVuKSArIGNvZGUuY2xvc2U7XG4gICAgaWYgKG5ld0xpbmVzUHJlc2VudCkge1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UobmV3TGluZVJlZ2V4LCBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgICByZXR1cm4gY29kZS5jbG9zZSArIG1hdGNoICsgY29kZS5vcGVuO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuY29sb3JzLnNldFRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLmxvZygnY29sb3JzLnNldFRoZW1lIG5vdyBvbmx5IGFjY2VwdHMgYW4gb2JqZWN0LCBub3QgYSBzdHJpbmcuICAnICtcbiAgICAgICdJZiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYSB0aGVtZSBmcm9tIGEgZmlsZSwgaXQgaXMgbm93IHlvdXIgKHRoZSAnICtcbiAgICAgICdjYWxsZXJcXCdzKSByZXNwb25zaWJpbGl0eSB0byByZXF1aXJlIHRoZSBmaWxlLiAgVGhlIG9sZCBzeW50YXggJyArXG4gICAgICAnbG9va2VkIGxpa2UgY29sb3JzLnNldFRoZW1lKF9fZGlybmFtZSArICcgK1xuICAgICAgJ1xcJy8uLi90aGVtZXMvZ2VuZXJpYy1sb2dnaW5nLmpzXFwnKTsgVGhlIG5ldyBzeW50YXggbG9va3MgbGlrZSAnK1xuICAgICAgJ2NvbG9ycy5zZXRUaGVtZShyZXF1aXJlKF9fZGlybmFtZSArICcgK1xuICAgICAgJ1xcJy8uLi90aGVtZXMvZ2VuZXJpYy1sb2dnaW5nLmpzXFwnKSk7Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAodmFyIHN0eWxlIGluIHRoZW1lKSB7XG4gICAgKGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICBjb2xvcnNbc3R5bGVdID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhlbWVbc3R5bGVdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHZhciBvdXQgPSBzdHI7XG4gICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGVtZVtzdHlsZV0pIHtcbiAgICAgICAgICAgIG91dCA9IGNvbG9yc1t0aGVtZVtzdHlsZV1baV1dKG91dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbG9yc1t0aGVtZVtzdHlsZV1dKHN0cik7XG4gICAgICB9O1xuICAgIH0pKHN0eWxlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHJldCA9IHt9O1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgIHJldFtuYW1lXSA9IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBidWlsZChbbmFtZV0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn1cblxudmFyIHNlcXVlbmNlciA9IGZ1bmN0aW9uIHNlcXVlbmNlcihtYXAsIHN0cikge1xuICB2YXIgZXhwbG9kZWQgPSBzdHIuc3BsaXQoJycpO1xuICBleHBsb2RlZCA9IGV4cGxvZGVkLm1hcChtYXApO1xuICByZXR1cm4gZXhwbG9kZWQuam9pbignJyk7XG59O1xuXG4vLyBjdXN0b20gZm9ybWF0dGVyIG1ldGhvZHNcbmNvbG9ycy50cmFwID0gcmVxdWlyZSgnLi9jdXN0b20vdHJhcCcpO1xuY29sb3JzLnphbGdvID0gcmVxdWlyZSgnLi9jdXN0b20vemFsZ28nKTtcblxuLy8gbWFwc1xuY29sb3JzLm1hcHMgPSB7fTtcbmNvbG9ycy5tYXBzLmFtZXJpY2EgPSByZXF1aXJlKCcuL21hcHMvYW1lcmljYScpKGNvbG9ycyk7XG5jb2xvcnMubWFwcy56ZWJyYSA9IHJlcXVpcmUoJy4vbWFwcy96ZWJyYScpKGNvbG9ycyk7XG5jb2xvcnMubWFwcy5yYWluYm93ID0gcmVxdWlyZSgnLi9tYXBzL3JhaW5ib3cnKShjb2xvcnMpO1xuY29sb3JzLm1hcHMucmFuZG9tID0gcmVxdWlyZSgnLi9tYXBzL3JhbmRvbScpKGNvbG9ycyk7XG5cbmZvciAodmFyIG1hcCBpbiBjb2xvcnMubWFwcykge1xuICAoZnVuY3Rpb24obWFwKSB7XG4gICAgY29sb3JzW21hcF0gPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBzZXF1ZW5jZXIoY29sb3JzLm1hcHNbbWFwXSwgc3RyKTtcbiAgICB9O1xuICB9KShtYXApO1xufVxuXG5kZWZpbmVQcm9wcyhjb2xvcnMsIGluaXQoKSk7XG4iLAogICAgIi8vXG4vLyBSZW1hcms6IFJlcXVpcmluZyB0aGlzIGZpbGUgd2lsbCB1c2UgdGhlIFwic2FmZVwiIGNvbG9ycyBBUEksXG4vLyB3aGljaCB3aWxsIG5vdCB0b3VjaCBTdHJpbmcucHJvdG90eXBlLlxuLy9cbi8vICAgdmFyIGNvbG9ycyA9IHJlcXVpcmUoJ2NvbG9ycy9zYWZlJyk7XG4vLyAgIGNvbG9ycy5yZWQoXCJmb29cIilcbi8vXG4vL1xudmFyIGNvbG9ycyA9IHJlcXVpcmUoJy4vbGliL2NvbG9ycycpO1xubW9kdWxlWydleHBvcnRzJ10gPSBjb2xvcnM7XG4iLAogICAgImNvbnN0IHsgaW5mbywgZGVidWcgfSA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5jbGFzcyBDZWxsIHtcbiAgLyoqXG4gICAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBjZWxsIHdpdGhpbiB0aGUgdGFibGUuXG4gICAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGhhdmUgYGluaXRgIGFuZCBgZHJhd2AgbWV0aG9kcyxcbiAgICogYXMgd2VsbCBhcyBgY29sU3BhbmAsIGByb3dTcGFuYCwgYGRlc2lyZWRIZWlnaHRgIGFuZCBgZGVzaXJlZFdpZHRoYCBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBFYWNoIGNlbGwgd2lsbCBoYXZlIGl0J3MgYHhgIGFuZCBgeWAgdmFsdWVzIHNldCBieSB0aGUgYGxheW91dC1tYW5hZ2VyYCBwcmlvciB0b1xuICAgICAqIGBpbml0YCBiZWluZyBjYWxsZWQ7XG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnggPSBudWxsO1xuICAgIHRoaXMueSA9IG51bGw7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoWydib29sZWFuJywgJ251bWJlcicsICdiaWdpbnQnLCAnc3RyaW5nJ10uaW5kZXhPZih0eXBlb2Ygb3B0aW9ucykgIT09IC0xKSB7XG4gICAgICBvcHRpb25zID0geyBjb250ZW50OiAnJyArIG9wdGlvbnMgfTtcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBsZXQgY29udGVudCA9IG9wdGlvbnMuY29udGVudDtcbiAgICBpZiAoWydib29sZWFuJywgJ251bWJlcicsICdiaWdpbnQnLCAnc3RyaW5nJ10uaW5kZXhPZih0eXBlb2YgY29udGVudCkgIT09IC0xKSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSBTdHJpbmcoY29udGVudCk7XG4gICAgfSBlbHNlIGlmICghY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5vcHRpb25zLmhyZWYgfHwgJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBuZWVkcyB0byBiZSBhIHByaW1pdGl2ZSwgZ290OiAnICsgdHlwZW9mIGNvbnRlbnQpO1xuICAgIH1cbiAgICB0aGlzLmNvbFNwYW4gPSBvcHRpb25zLmNvbFNwYW4gfHwgMTtcbiAgICB0aGlzLnJvd1NwYW4gPSBvcHRpb25zLnJvd1NwYW4gfHwgMTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhyZWYpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaHJlZicsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaHJlZjtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG1lcmdlVGFibGVPcHRpb25zKHRhYmxlT3B0aW9ucywgY2VsbHMpIHtcbiAgICB0aGlzLmNlbGxzID0gY2VsbHM7XG5cbiAgICBsZXQgb3B0aW9uc0NoYXJzID0gdGhpcy5vcHRpb25zLmNoYXJzIHx8IHt9O1xuICAgIGxldCB0YWJsZUNoYXJzID0gdGFibGVPcHRpb25zLmNoYXJzO1xuICAgIGxldCBjaGFycyA9ICh0aGlzLmNoYXJzID0ge30pO1xuICAgIENIQVJfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgc2V0T3B0aW9uKG9wdGlvbnNDaGFycywgdGFibGVDaGFycywgbmFtZSwgY2hhcnMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50cnVuY2F0ZSA9IHRoaXMub3B0aW9ucy50cnVuY2F0ZSB8fCB0YWJsZU9wdGlvbnMudHJ1bmNhdGU7XG5cbiAgICBsZXQgc3R5bGUgPSAodGhpcy5vcHRpb25zLnN0eWxlID0gdGhpcy5vcHRpb25zLnN0eWxlIHx8IHt9KTtcbiAgICBsZXQgdGFibGVTdHlsZSA9IHRhYmxlT3B0aW9ucy5zdHlsZTtcbiAgICBzZXRPcHRpb24oc3R5bGUsIHRhYmxlU3R5bGUsICdwYWRkaW5nLWxlZnQnLCB0aGlzKTtcbiAgICBzZXRPcHRpb24oc3R5bGUsIHRhYmxlU3R5bGUsICdwYWRkaW5nLXJpZ2h0JywgdGhpcyk7XG4gICAgdGhpcy5oZWFkID0gc3R5bGUuaGVhZCB8fCB0YWJsZVN0eWxlLmhlYWQ7XG4gICAgdGhpcy5ib3JkZXIgPSBzdHlsZS5ib3JkZXIgfHwgdGFibGVTdHlsZS5ib3JkZXI7XG5cbiAgICB0aGlzLmZpeGVkV2lkdGggPSB0YWJsZU9wdGlvbnMuY29sV2lkdGhzW3RoaXMueF07XG4gICAgdGhpcy5saW5lcyA9IHRoaXMuY29tcHV0ZUxpbmVzKHRhYmxlT3B0aW9ucyk7XG5cbiAgICB0aGlzLmRlc2lyZWRXaWR0aCA9IHV0aWxzLnN0cmxlbih0aGlzLmNvbnRlbnQpICsgdGhpcy5wYWRkaW5nTGVmdCArIHRoaXMucGFkZGluZ1JpZ2h0O1xuICAgIHRoaXMuZGVzaXJlZEhlaWdodCA9IHRoaXMubGluZXMubGVuZ3RoO1xuICB9XG5cbiAgY29tcHV0ZUxpbmVzKHRhYmxlT3B0aW9ucykge1xuICAgIGNvbnN0IHRhYmxlV29yZFdyYXAgPSB0YWJsZU9wdGlvbnMud29yZFdyYXAgfHwgdGFibGVPcHRpb25zLnRleHRXcmFwO1xuICAgIGNvbnN0IHsgd29yZFdyYXAgPSB0YWJsZVdvcmRXcmFwIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKHRoaXMuZml4ZWRXaWR0aCAmJiB3b3JkV3JhcCkge1xuICAgICAgdGhpcy5maXhlZFdpZHRoIC09IHRoaXMucGFkZGluZ0xlZnQgKyB0aGlzLnBhZGRpbmdSaWdodDtcbiAgICAgIGlmICh0aGlzLmNvbFNwYW4pIHtcbiAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICB3aGlsZSAoaSA8IHRoaXMuY29sU3Bhbikge1xuICAgICAgICAgIHRoaXMuZml4ZWRXaWR0aCArPSB0YWJsZU9wdGlvbnMuY29sV2lkdGhzW3RoaXMueCArIGldO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyB3cmFwT25Xb3JkQm91bmRhcnk6IHRhYmxlV3JhcE9uV29yZEJvdW5kYXJ5ID0gdHJ1ZSB9ID0gdGFibGVPcHRpb25zO1xuICAgICAgY29uc3QgeyB3cmFwT25Xb3JkQm91bmRhcnkgPSB0YWJsZVdyYXBPbldvcmRCb3VuZGFyeSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgcmV0dXJuIHRoaXMud3JhcExpbmVzKHV0aWxzLndvcmRXcmFwKHRoaXMuZml4ZWRXaWR0aCwgdGhpcy5jb250ZW50LCB3cmFwT25Xb3JkQm91bmRhcnkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud3JhcExpbmVzKHRoaXMuY29udGVudC5zcGxpdCgnXFxuJykpO1xuICB9XG5cbiAgd3JhcExpbmVzKGNvbXB1dGVkTGluZXMpIHtcbiAgICBjb25zdCBsaW5lcyA9IHV0aWxzLmNvbG9yaXplTGluZXMoY29tcHV0ZWRMaW5lcyk7XG4gICAgaWYgKHRoaXMuaHJlZikge1xuICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gdXRpbHMuaHlwZXJsaW5rKHRoaXMuaHJlZiwgbGluZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIENlbGxzIGRhdGEgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0gdGFibGVPcHRpb25zIC0gQSBmdWxseSBwb3B1bGF0ZWQgc2V0IG9mIHRhYmxlT3B0aW9ucy5cbiAgICogSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIGRlZmF1bHQgdmFsdWVzLCB0YWJsZU9wdGlvbnMgbXVzdCBoYXZlIGZ1bGx5IHBvcHVsYXRlZCB0aGVcbiAgICogYGNvbFdpZHRoc2AgYW5kIGByb3dXaWR0aHNgIGFycmF5cy4gVGhvc2UgYXJyYXlzIG11c3QgaGF2ZSBsZW5ndGhzIGVxdWFsIHRvIHRoZSBudW1iZXJcbiAgICogb2YgY29sdW1ucyBvciByb3dzIChyZXNwZWN0aXZlbHkpIGluIHRoaXMgdGFibGUsIGFuZCBlYWNoIGFycmF5IGl0ZW0gbXVzdCBiZSBhIE51bWJlci5cbiAgICpcbiAgICovXG4gIGluaXQodGFibGVPcHRpb25zKSB7XG4gICAgbGV0IHggPSB0aGlzLng7XG4gICAgbGV0IHkgPSB0aGlzLnk7XG4gICAgdGhpcy53aWR0aHMgPSB0YWJsZU9wdGlvbnMuY29sV2lkdGhzLnNsaWNlKHgsIHggKyB0aGlzLmNvbFNwYW4pO1xuICAgIHRoaXMuaGVpZ2h0cyA9IHRhYmxlT3B0aW9ucy5yb3dIZWlnaHRzLnNsaWNlKHksIHkgKyB0aGlzLnJvd1NwYW4pO1xuICAgIHRoaXMud2lkdGggPSB0aGlzLndpZHRocy5yZWR1Y2Uoc3VtUGx1c09uZSwgLTEpO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHRzLnJlZHVjZShzdW1QbHVzT25lLCAtMSk7XG5cbiAgICB0aGlzLmhBbGlnbiA9IHRoaXMub3B0aW9ucy5oQWxpZ24gfHwgdGFibGVPcHRpb25zLmNvbEFsaWduc1t4XTtcbiAgICB0aGlzLnZBbGlnbiA9IHRoaXMub3B0aW9ucy52QWxpZ24gfHwgdGFibGVPcHRpb25zLnJvd0FsaWduc1t5XTtcblxuICAgIHRoaXMuZHJhd1JpZ2h0ID0geCArIHRoaXMuY29sU3BhbiA9PSB0YWJsZU9wdGlvbnMuY29sV2lkdGhzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aGUgZ2l2ZW4gbGluZSBvZiB0aGUgY2VsbC5cbiAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmVycyB0byBtZXRob2RzIGBkcmF3VG9wYCwgYGRyYXdCb3R0b21gLCBgZHJhd0xpbmVgIGFuZCBgZHJhd0VtcHR5YC5cbiAgICogQHBhcmFtIGxpbmVOdW0gLSBjYW4gYmUgYHRvcGAsIGBib3R0b21gIG9yIGEgbnVtZXJpY2FsIGxpbmUgbnVtYmVyLlxuICAgKiBAcGFyYW0gc3Bhbm5pbmdDZWxsIC0gd2lsbCBiZSBhIG51bWJlciBpZiBiZWluZyBjYWxsZWQgZnJvbSBhIFJvd1NwYW5DZWxsLCBhbmQgd2lsbCByZXByZXNlbnQgaG93XG4gICAqIG1hbnkgcm93cyBiZWxvdyBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tLiBPdGhlcndpc2UgaXQncyB1bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGxpbmUuXG4gICAqL1xuICBkcmF3KGxpbmVOdW0sIHNwYW5uaW5nQ2VsbCkge1xuICAgIGlmIChsaW5lTnVtID09ICd0b3AnKSByZXR1cm4gdGhpcy5kcmF3VG9wKHRoaXMuZHJhd1JpZ2h0KTtcbiAgICBpZiAobGluZU51bSA9PSAnYm90dG9tJykgcmV0dXJuIHRoaXMuZHJhd0JvdHRvbSh0aGlzLmRyYXdSaWdodCk7XG4gICAgbGV0IGNvbnRlbnQgPSB1dGlscy50cnVuY2F0ZSh0aGlzLmNvbnRlbnQsIDEwLCB0aGlzLnRydW5jYXRlKTtcbiAgICBpZiAoIWxpbmVOdW0pIHtcbiAgICAgIGluZm8oYCR7dGhpcy55fS0ke3RoaXMueH06ICR7dGhpcy5yb3dTcGFuIC0gbGluZU51bX14JHt0aGlzLmNvbFNwYW59IENlbGwgJHtjb250ZW50fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWJ1ZyhgJHtsaW5lTnVtfS0ke3RoaXMueH06IDF4JHt0aGlzLmNvbFNwYW59IFJvd1NwYW5DZWxsICR7Y29udGVudH1gKTtcbiAgICB9XG4gICAgbGV0IHBhZExlbiA9IE1hdGgubWF4KHRoaXMuaGVpZ2h0IC0gdGhpcy5saW5lcy5sZW5ndGgsIDApO1xuICAgIGxldCBwYWRUb3A7XG4gICAgc3dpdGNoICh0aGlzLnZBbGlnbikge1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcGFkVG9wID0gTWF0aC5jZWlsKHBhZExlbiAvIDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHBhZFRvcCA9IHBhZExlbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYWRUb3AgPSAwO1xuICAgIH1cbiAgICBpZiAobGluZU51bSA8IHBhZFRvcCB8fCBsaW5lTnVtID49IHBhZFRvcCArIHRoaXMubGluZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmF3RW1wdHkodGhpcy5kcmF3UmlnaHQsIHNwYW5uaW5nQ2VsbCk7XG4gICAgfVxuICAgIGxldCBmb3JjZVRydW5jYXRpb24gPSB0aGlzLmxpbmVzLmxlbmd0aCA+IHRoaXMuaGVpZ2h0ICYmIGxpbmVOdW0gKyAxID49IHRoaXMuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLmRyYXdMaW5lKGxpbmVOdW0gLSBwYWRUb3AsIHRoaXMuZHJhd1JpZ2h0LCBmb3JjZVRydW5jYXRpb24sIHNwYW5uaW5nQ2VsbCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgdG9wIGxpbmUgb2YgdGhlIGNlbGwuXG4gICAqIEBwYXJhbSBkcmF3UmlnaHQgLSB0cnVlIGlmIHRoaXMgbWV0aG9kIHNob3VsZCByZW5kZXIgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGNlbGwuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAqL1xuICBkcmF3VG9wKGRyYXdSaWdodCkge1xuICAgIGxldCBjb250ZW50ID0gW107XG4gICAgaWYgKHRoaXMuY2VsbHMpIHtcbiAgICAgIC8vVE9ETzogY2VsbHMgc2hvdWxkIGFsd2F5cyBleGlzdCAtIHNvbWUgdGVzdHMgZG9uJ3QgZmlsbCBpdCBpbiB0aG91Z2hcbiAgICAgIHRoaXMud2lkdGhzLmZvckVhY2goZnVuY3Rpb24gKHdpZHRoLCBpbmRleCkge1xuICAgICAgICBjb250ZW50LnB1c2godGhpcy5fdG9wTGVmdENoYXIoaW5kZXgpKTtcbiAgICAgICAgY29udGVudC5wdXNoKHV0aWxzLnJlcGVhdCh0aGlzLmNoYXJzW3RoaXMueSA9PSAwID8gJ3RvcCcgOiAnbWlkJ10sIHdpZHRoKSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudC5wdXNoKHRoaXMuX3RvcExlZnRDaGFyKDApKTtcbiAgICAgIGNvbnRlbnQucHVzaCh1dGlscy5yZXBlYXQodGhpcy5jaGFyc1t0aGlzLnkgPT0gMCA/ICd0b3AnIDogJ21pZCddLCB0aGlzLndpZHRoKSk7XG4gICAgfVxuICAgIGlmIChkcmF3UmlnaHQpIHtcbiAgICAgIGNvbnRlbnQucHVzaCh0aGlzLmNoYXJzW3RoaXMueSA9PSAwID8gJ3RvcFJpZ2h0JyA6ICdyaWdodE1pZCddKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud3JhcFdpdGhTdHlsZUNvbG9ycygnYm9yZGVyJywgY29udGVudC5qb2luKCcnKSk7XG4gIH1cblxuICBfdG9wTGVmdENoYXIob2Zmc2V0KSB7XG4gICAgbGV0IHggPSB0aGlzLnggKyBvZmZzZXQ7XG4gICAgbGV0IGxlZnRDaGFyO1xuICAgIGlmICh0aGlzLnkgPT0gMCkge1xuICAgICAgbGVmdENoYXIgPSB4ID09IDAgPyAndG9wTGVmdCcgOiBvZmZzZXQgPT0gMCA/ICd0b3BNaWQnIDogJ3RvcCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh4ID09IDApIHtcbiAgICAgICAgbGVmdENoYXIgPSAnbGVmdE1pZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0Q2hhciA9IG9mZnNldCA9PSAwID8gJ21pZE1pZCcgOiAnYm90dG9tTWlkJztcbiAgICAgICAgaWYgKHRoaXMuY2VsbHMpIHtcbiAgICAgICAgICAvL1RPRE86IGNlbGxzIHNob3VsZCBhbHdheXMgZXhpc3QgLSBzb21lIHRlc3RzIGRvbid0IGZpbGwgaXQgaW4gdGhvdWdoXG4gICAgICAgICAgbGV0IHNwYW5BYm92ZSA9IHRoaXMuY2VsbHNbdGhpcy55IC0gMV1beF0gaW5zdGFuY2VvZiBDZWxsLkNvbFNwYW5DZWxsO1xuICAgICAgICAgIGlmIChzcGFuQWJvdmUpIHtcbiAgICAgICAgICAgIGxlZnRDaGFyID0gb2Zmc2V0ID09IDAgPyAndG9wTWlkJyA6ICdtaWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2Zmc2V0ID09IDApIHtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLmNlbGxzW3RoaXMueV1beCAtIGldIGluc3RhbmNlb2YgQ2VsbC5Db2xTcGFuQ2VsbCkge1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jZWxsc1t0aGlzLnldW3ggLSBpXSBpbnN0YW5jZW9mIENlbGwuUm93U3BhbkNlbGwpIHtcbiAgICAgICAgICAgICAgbGVmdENoYXIgPSAnbGVmdE1pZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoYXJzW2xlZnRDaGFyXTtcbiAgfVxuXG4gIHdyYXBXaXRoU3R5bGVDb2xvcnMoc3R5bGVQcm9wZXJ0eSwgY29udGVudCkge1xuICAgIGlmICh0aGlzW3N0eWxlUHJvcGVydHldICYmIHRoaXNbc3R5bGVQcm9wZXJ0eV0ubGVuZ3RoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgY29sb3JzID0gcmVxdWlyZSgnQGNvbG9ycy9jb2xvcnMvc2FmZScpO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpc1tzdHlsZVByb3BlcnR5XS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGNvbG9ycyA9IGNvbG9yc1t0aGlzW3N0eWxlUHJvcGVydHldW2ldXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sb3JzKGNvbnRlbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBsaW5lIG9mIHRleHQuXG4gICAqIEBwYXJhbSBsaW5lTnVtIC0gV2hpY2ggbGluZSBvZiB0ZXh0IHRvIHJlbmRlci4gVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxpbmUgd2l0aGluIHRoZSBjZWxsLlxuICAgKiBUaGVyZSBtYXkgYmUgdG9wLXBhZGRpbmcgYWJvdmUgdGhlIGZpcnN0IGxpbmUgb2YgdGV4dC5cbiAgICogQHBhcmFtIGRyYXdSaWdodCAtIHRydWUgaWYgdGhpcyBtZXRob2Qgc2hvdWxkIHJlbmRlciB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY2VsbC5cbiAgICogQHBhcmFtIGZvcmNlVHJ1bmNhdGlvblN5bWJvbCAtIGB0cnVlYCBpZiB0aGUgcmVuZGVyZWQgdGV4dCBzaG91bGQgZW5kIHdpdGggdGhlIHRydW5jYXRpb24gc3ltYm9sIGV2ZW5cbiAgICogaWYgdGhlIHRleHQgZml0cy4gVGhpcyBpcyB1c2VkIHdoZW4gdGhlIGNlbGwgaXMgdmVydGljYWxseSB0cnVuY2F0ZWQuIElmIGBmYWxzZWAgdGhlIHRleHQgc2hvdWxkXG4gICAqIG9ubHkgaW5jbHVkZSB0aGUgdHJ1bmNhdGlvbiBzeW1ib2wgaWYgdGhlIHRleHQgd2lsbCBub3QgZml0IGhvcml6b250YWxseSB3aXRoaW4gdGhlIGNlbGwgd2lkdGguXG4gICAqIEBwYXJhbSBzcGFubmluZ0NlbGwgLSBhIG51bWJlciBvZiBpZiBiZWluZyBjYWxsZWQgZnJvbSBhIFJvd1NwYW5DZWxsLiAoaG93IG1hbnkgcm93cyBiZWxvdykuIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAqL1xuICBkcmF3TGluZShsaW5lTnVtLCBkcmF3UmlnaHQsIGZvcmNlVHJ1bmNhdGlvblN5bWJvbCwgc3Bhbm5pbmdDZWxsKSB7XG4gICAgbGV0IGxlZnQgPSB0aGlzLmNoYXJzW3RoaXMueCA9PSAwID8gJ2xlZnQnIDogJ21pZGRsZSddO1xuICAgIGlmICh0aGlzLnggJiYgc3Bhbm5pbmdDZWxsICYmIHRoaXMuY2VsbHMpIHtcbiAgICAgIGxldCBjZWxsTGVmdCA9IHRoaXMuY2VsbHNbdGhpcy55ICsgc3Bhbm5pbmdDZWxsXVt0aGlzLnggLSAxXTtcbiAgICAgIHdoaWxlIChjZWxsTGVmdCBpbnN0YW5jZW9mIENvbFNwYW5DZWxsKSB7XG4gICAgICAgIGNlbGxMZWZ0ID0gdGhpcy5jZWxsc1tjZWxsTGVmdC55XVtjZWxsTGVmdC54IC0gMV07XG4gICAgICB9XG4gICAgICBpZiAoIShjZWxsTGVmdCBpbnN0YW5jZW9mIFJvd1NwYW5DZWxsKSkge1xuICAgICAgICBsZWZ0ID0gdGhpcy5jaGFyc1sncmlnaHRNaWQnXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGxlZnRQYWRkaW5nID0gdXRpbHMucmVwZWF0KCcgJywgdGhpcy5wYWRkaW5nTGVmdCk7XG4gICAgbGV0IHJpZ2h0ID0gZHJhd1JpZ2h0ID8gdGhpcy5jaGFyc1sncmlnaHQnXSA6ICcnO1xuICAgIGxldCByaWdodFBhZGRpbmcgPSB1dGlscy5yZXBlYXQoJyAnLCB0aGlzLnBhZGRpbmdSaWdodCk7XG4gICAgbGV0IGxpbmUgPSB0aGlzLmxpbmVzW2xpbmVOdW1dO1xuICAgIGxldCBsZW4gPSB0aGlzLndpZHRoIC0gKHRoaXMucGFkZGluZ0xlZnQgKyB0aGlzLnBhZGRpbmdSaWdodCk7XG4gICAgaWYgKGZvcmNlVHJ1bmNhdGlvblN5bWJvbCkgbGluZSArPSB0aGlzLnRydW5jYXRlIHx8ICfigKYnO1xuICAgIGxldCBjb250ZW50ID0gdXRpbHMudHJ1bmNhdGUobGluZSwgbGVuLCB0aGlzLnRydW5jYXRlKTtcbiAgICBjb250ZW50ID0gdXRpbHMucGFkKGNvbnRlbnQsIGxlbiwgJyAnLCB0aGlzLmhBbGlnbik7XG4gICAgY29udGVudCA9IGxlZnRQYWRkaW5nICsgY29udGVudCArIHJpZ2h0UGFkZGluZztcbiAgICByZXR1cm4gdGhpcy5zdHlsaXplTGluZShsZWZ0LCBjb250ZW50LCByaWdodCk7XG4gIH1cblxuICBzdHlsaXplTGluZShsZWZ0LCBjb250ZW50LCByaWdodCkge1xuICAgIGxlZnQgPSB0aGlzLndyYXBXaXRoU3R5bGVDb2xvcnMoJ2JvcmRlcicsIGxlZnQpO1xuICAgIHJpZ2h0ID0gdGhpcy53cmFwV2l0aFN0eWxlQ29sb3JzKCdib3JkZXInLCByaWdodCk7XG4gICAgaWYgKHRoaXMueSA9PT0gMCkge1xuICAgICAgY29udGVudCA9IHRoaXMud3JhcFdpdGhTdHlsZUNvbG9ycygnaGVhZCcsIGNvbnRlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdCArIGNvbnRlbnQgKyByaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBib3R0b20gbGluZSBvZiB0aGUgY2VsbC5cbiAgICogQHBhcmFtIGRyYXdSaWdodCAtIHRydWUgaWYgdGhpcyBtZXRob2Qgc2hvdWxkIHJlbmRlciB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY2VsbC5cbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIGRyYXdCb3R0b20oZHJhd1JpZ2h0KSB7XG4gICAgbGV0IGxlZnQgPSB0aGlzLmNoYXJzW3RoaXMueCA9PSAwID8gJ2JvdHRvbUxlZnQnIDogJ2JvdHRvbU1pZCddO1xuICAgIGxldCBjb250ZW50ID0gdXRpbHMucmVwZWF0KHRoaXMuY2hhcnMuYm90dG9tLCB0aGlzLndpZHRoKTtcbiAgICBsZXQgcmlnaHQgPSBkcmF3UmlnaHQgPyB0aGlzLmNoYXJzWydib3R0b21SaWdodCddIDogJyc7XG4gICAgcmV0dXJuIHRoaXMud3JhcFdpdGhTdHlsZUNvbG9ycygnYm9yZGVyJywgbGVmdCArIGNvbnRlbnQgKyByaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIGJsYW5rIGxpbmUgb2YgdGV4dCB3aXRoaW4gdGhlIGNlbGwuIFVzZWQgZm9yIHRvcCBhbmQvb3IgYm90dG9tIHBhZGRpbmcuXG4gICAqIEBwYXJhbSBkcmF3UmlnaHQgLSB0cnVlIGlmIHRoaXMgbWV0aG9kIHNob3VsZCByZW5kZXIgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGNlbGwuXG4gICAqIEBwYXJhbSBzcGFubmluZ0NlbGwgLSBhIG51bWJlciBvZiBpZiBiZWluZyBjYWxsZWQgZnJvbSBhIFJvd1NwYW5DZWxsLiAoaG93IG1hbnkgcm93cyBiZWxvdykuIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAqL1xuICBkcmF3RW1wdHkoZHJhd1JpZ2h0LCBzcGFubmluZ0NlbGwpIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMuY2hhcnNbdGhpcy54ID09IDAgPyAnbGVmdCcgOiAnbWlkZGxlJ107XG4gICAgaWYgKHRoaXMueCAmJiBzcGFubmluZ0NlbGwgJiYgdGhpcy5jZWxscykge1xuICAgICAgbGV0IGNlbGxMZWZ0ID0gdGhpcy5jZWxsc1t0aGlzLnkgKyBzcGFubmluZ0NlbGxdW3RoaXMueCAtIDFdO1xuICAgICAgd2hpbGUgKGNlbGxMZWZ0IGluc3RhbmNlb2YgQ29sU3BhbkNlbGwpIHtcbiAgICAgICAgY2VsbExlZnQgPSB0aGlzLmNlbGxzW2NlbGxMZWZ0LnldW2NlbGxMZWZ0LnggLSAxXTtcbiAgICAgIH1cbiAgICAgIGlmICghKGNlbGxMZWZ0IGluc3RhbmNlb2YgUm93U3BhbkNlbGwpKSB7XG4gICAgICAgIGxlZnQgPSB0aGlzLmNoYXJzWydyaWdodE1pZCddO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmlnaHQgPSBkcmF3UmlnaHQgPyB0aGlzLmNoYXJzWydyaWdodCddIDogJyc7XG4gICAgbGV0IGNvbnRlbnQgPSB1dGlscy5yZXBlYXQoJyAnLCB0aGlzLndpZHRoKTtcbiAgICByZXR1cm4gdGhpcy5zdHlsaXplTGluZShsZWZ0LCBjb250ZW50LCByaWdodCk7XG4gIH1cbn1cblxuY2xhc3MgQ29sU3BhbkNlbGwge1xuICAvKipcbiAgICogQSBDZWxsIHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZy4gSXQganVzdCBkcmF3cyBlbXB0eSBsaW5lcy5cbiAgICogVXNlZCBhcyBhIHBsYWNlaG9sZGVyIGluIGNvbHVtbiBzcGFubmluZy5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZHJhdyhsaW5lTnVtKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5lTnVtID09PSAnbnVtYmVyJykge1xuICAgICAgZGVidWcoYCR7dGhpcy55fS0ke3RoaXMueH06IDF4MSBDb2xTcGFuQ2VsbGApO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpbml0KCkge31cblxuICBtZXJnZVRhYmxlT3B0aW9ucygpIHt9XG59XG5cbmNsYXNzIFJvd1NwYW5DZWxsIHtcbiAgLyoqXG4gICAqIEEgcGxhY2Vob2xkZXIgQ2VsbCBmb3IgYSBDZWxsIHRoYXQgc3BhbnMgbXVsdGlwbGUgcm93cy5cbiAgICogSXQgZGVsZWdhdGVzIHJlbmRlcmluZyB0byB0aGUgb3JpZ2luYWwgY2VsbCwgYnV0IGFkZHMgdGhlIGFwcHJvcHJpYXRlIG9mZnNldC5cbiAgICogQHBhcmFtIG9yaWdpbmFsQ2VsbFxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9yaWdpbmFsQ2VsbCkge1xuICAgIHRoaXMub3JpZ2luYWxDZWxsID0gb3JpZ2luYWxDZWxsO1xuICB9XG5cbiAgaW5pdCh0YWJsZU9wdGlvbnMpIHtcbiAgICBsZXQgeSA9IHRoaXMueTtcbiAgICBsZXQgb3JpZ2luYWxZID0gdGhpcy5vcmlnaW5hbENlbGwueTtcbiAgICB0aGlzLmNlbGxPZmZzZXQgPSB5IC0gb3JpZ2luYWxZO1xuICAgIHRoaXMub2Zmc2V0ID0gZmluZERpbWVuc2lvbih0YWJsZU9wdGlvbnMucm93SGVpZ2h0cywgb3JpZ2luYWxZLCB0aGlzLmNlbGxPZmZzZXQpO1xuICB9XG5cbiAgZHJhdyhsaW5lTnVtKSB7XG4gICAgaWYgKGxpbmVOdW0gPT0gJ3RvcCcpIHtcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsQ2VsbC5kcmF3KHRoaXMub2Zmc2V0LCB0aGlzLmNlbGxPZmZzZXQpO1xuICAgIH1cbiAgICBpZiAobGluZU51bSA9PSAnYm90dG9tJykge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxDZWxsLmRyYXcoJ2JvdHRvbScpO1xuICAgIH1cbiAgICBkZWJ1ZyhgJHt0aGlzLnl9LSR7dGhpcy54fTogMXgke3RoaXMuY29sU3Bhbn0gUm93U3BhbkNlbGwgZm9yICR7dGhpcy5vcmlnaW5hbENlbGwuY29udGVudH1gKTtcbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbENlbGwuZHJhdyh0aGlzLm9mZnNldCArIDEgKyBsaW5lTnVtKTtcbiAgfVxuXG4gIG1lcmdlVGFibGVPcHRpb25zKCkge31cbn1cblxuZnVuY3Rpb24gZmlyc3REZWZpbmVkKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbCkuc2hpZnQoKTtcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuZnVuY3Rpb24gc2V0T3B0aW9uKG9iakEsIG9iakIsIG5hbWVCLCB0YXJnZXRPYmopIHtcbiAgbGV0IG5hbWVBID0gbmFtZUIuc3BsaXQoJy0nKTtcbiAgaWYgKG5hbWVBLmxlbmd0aCA+IDEpIHtcbiAgICBuYW1lQVsxXSA9IG5hbWVBWzFdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZUFbMV0uc3Vic3RyKDEpO1xuICAgIG5hbWVBID0gbmFtZUEuam9pbignJyk7XG4gICAgdGFyZ2V0T2JqW25hbWVBXSA9IGZpcnN0RGVmaW5lZChvYmpBW25hbWVBXSwgb2JqQVtuYW1lQl0sIG9iakJbbmFtZUFdLCBvYmpCW25hbWVCXSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0T2JqW25hbWVCXSA9IGZpcnN0RGVmaW5lZChvYmpBW25hbWVCXSwgb2JqQltuYW1lQl0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmREaW1lbnNpb24oZGltZW5zaW9uVGFibGUsIHN0YXJ0aW5nSW5kZXgsIHNwYW4pIHtcbiAgbGV0IHJldCA9IGRpbWVuc2lvblRhYmxlW3N0YXJ0aW5nSW5kZXhdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHNwYW47IGkrKykge1xuICAgIHJldCArPSAxICsgZGltZW5zaW9uVGFibGVbc3RhcnRpbmdJbmRleCArIGldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHN1bVBsdXNPbmUoYSwgYikge1xuICByZXR1cm4gYSArIGIgKyAxO1xufVxuXG5sZXQgQ0hBUl9OQU1FUyA9IFtcbiAgJ3RvcCcsXG4gICd0b3AtbWlkJyxcbiAgJ3RvcC1sZWZ0JyxcbiAgJ3RvcC1yaWdodCcsXG4gICdib3R0b20nLFxuICAnYm90dG9tLW1pZCcsXG4gICdib3R0b20tbGVmdCcsXG4gICdib3R0b20tcmlnaHQnLFxuICAnbGVmdCcsXG4gICdsZWZ0LW1pZCcsXG4gICdtaWQnLFxuICAnbWlkLW1pZCcsXG4gICdyaWdodCcsXG4gICdyaWdodC1taWQnLFxuICAnbWlkZGxlJyxcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2VsbDtcbm1vZHVsZS5leHBvcnRzLkNvbFNwYW5DZWxsID0gQ29sU3BhbkNlbGw7XG5tb2R1bGUuZXhwb3J0cy5Sb3dTcGFuQ2VsbCA9IFJvd1NwYW5DZWxsO1xuIiwKICAgICJjb25zdCB7IHdhcm4sIGRlYnVnIH0gPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5jb25zdCBDZWxsID0gcmVxdWlyZSgnLi9jZWxsJyk7XG5jb25zdCB7IENvbFNwYW5DZWxsLCBSb3dTcGFuQ2VsbCB9ID0gQ2VsbDtcblxuKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gbmV4dChhbGxvYywgY29sKSB7XG4gICAgaWYgKGFsbG9jW2NvbF0gPiAwKSB7XG4gICAgICByZXR1cm4gbmV4dChhbGxvYywgY29sICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICBmdW5jdGlvbiBsYXlvdXRUYWJsZSh0YWJsZSkge1xuICAgIGxldCBhbGxvYyA9IHt9O1xuICAgIHRhYmxlLmZvckVhY2goZnVuY3Rpb24gKHJvdywgcm93SW5kZXgpIHtcbiAgICAgIGxldCBjb2wgPSAwO1xuICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgY2VsbC55ID0gcm93SW5kZXg7XG4gICAgICAgIC8vIEF2b2lkIGVycm9uZW91cyBjYWxsIHRvIG5leHQoKSBvbiBmaXJzdCByb3dcbiAgICAgICAgY2VsbC54ID0gcm93SW5kZXggPyBuZXh0KGFsbG9jLCBjb2wpIDogY29sO1xuICAgICAgICBjb25zdCByb3dTcGFuID0gY2VsbC5yb3dTcGFuIHx8IDE7XG4gICAgICAgIGNvbnN0IGNvbFNwYW4gPSBjZWxsLmNvbFNwYW4gfHwgMTtcbiAgICAgICAgaWYgKHJvd1NwYW4gPiAxKSB7XG4gICAgICAgICAgZm9yIChsZXQgY3MgPSAwOyBjcyA8IGNvbFNwYW47IGNzKyspIHtcbiAgICAgICAgICAgIGFsbG9jW2NlbGwueCArIGNzXSA9IHJvd1NwYW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbCA9IGNlbGwueCArIGNvbFNwYW47XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKGFsbG9jKS5mb3JFYWNoKChpZHgpID0+IHtcbiAgICAgICAgYWxsb2NbaWR4XS0tO1xuICAgICAgICBpZiAoYWxsb2NbaWR4XSA8IDEpIGRlbGV0ZSBhbGxvY1tpZHhdO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXhXaWR0aCh0YWJsZSkge1xuICAgIGxldCBtdyA9IDA7XG4gICAgdGFibGUuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICBtdyA9IE1hdGgubWF4KG13LCBjZWxsLnggKyAoY2VsbC5jb2xTcGFuIHx8IDEpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBtdztcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heEhlaWdodCh0YWJsZSkge1xuICAgIHJldHVybiB0YWJsZS5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiBjZWxsc0NvbmZsaWN0KGNlbGwxLCBjZWxsMikge1xuICAgIGxldCB5TWluMSA9IGNlbGwxLnk7XG4gICAgbGV0IHlNYXgxID0gY2VsbDEueSAtIDEgKyAoY2VsbDEucm93U3BhbiB8fCAxKTtcbiAgICBsZXQgeU1pbjIgPSBjZWxsMi55O1xuICAgIGxldCB5TWF4MiA9IGNlbGwyLnkgLSAxICsgKGNlbGwyLnJvd1NwYW4gfHwgMSk7XG4gICAgbGV0IHlDb25mbGljdCA9ICEoeU1pbjEgPiB5TWF4MiB8fCB5TWluMiA+IHlNYXgxKTtcblxuICAgIGxldCB4TWluMSA9IGNlbGwxLng7XG4gICAgbGV0IHhNYXgxID0gY2VsbDEueCAtIDEgKyAoY2VsbDEuY29sU3BhbiB8fCAxKTtcbiAgICBsZXQgeE1pbjIgPSBjZWxsMi54O1xuICAgIGxldCB4TWF4MiA9IGNlbGwyLnggLSAxICsgKGNlbGwyLmNvbFNwYW4gfHwgMSk7XG4gICAgbGV0IHhDb25mbGljdCA9ICEoeE1pbjEgPiB4TWF4MiB8fCB4TWluMiA+IHhNYXgxKTtcblxuICAgIHJldHVybiB5Q29uZmxpY3QgJiYgeENvbmZsaWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gY29uZmxpY3RFeGlzdHMocm93cywgeCwgeSkge1xuICAgIGxldCBpX21heCA9IE1hdGgubWluKHJvd3MubGVuZ3RoIC0gMSwgeSk7XG4gICAgbGV0IGNlbGwgPSB7IHg6IHgsIHk6IHkgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBpX21heDsgaSsrKSB7XG4gICAgICBsZXQgcm93ID0gcm93c1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChjZWxsc0NvbmZsaWN0KGNlbGwsIHJvd1tqXSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxCbGFuayhyb3dzLCB5LCB4TWluLCB4TWF4KSB7XG4gICAgZm9yIChsZXQgeCA9IHhNaW47IHggPCB4TWF4OyB4KyspIHtcbiAgICAgIGlmIChjb25mbGljdEV4aXN0cyhyb3dzLCB4LCB5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkUm93U3BhbkNlbGxzKHRhYmxlKSB7XG4gICAgdGFibGUuZm9yRWFjaChmdW5jdGlvbiAocm93LCByb3dJbmRleCkge1xuICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjZWxsLnJvd1NwYW47IGkrKykge1xuICAgICAgICAgIGxldCByb3dTcGFuQ2VsbCA9IG5ldyBSb3dTcGFuQ2VsbChjZWxsKTtcbiAgICAgICAgICByb3dTcGFuQ2VsbC54ID0gY2VsbC54O1xuICAgICAgICAgIHJvd1NwYW5DZWxsLnkgPSBjZWxsLnkgKyBpO1xuICAgICAgICAgIHJvd1NwYW5DZWxsLmNvbFNwYW4gPSBjZWxsLmNvbFNwYW47XG4gICAgICAgICAgaW5zZXJ0Q2VsbChyb3dTcGFuQ2VsbCwgdGFibGVbcm93SW5kZXggKyBpXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkQ29sU3BhbkNlbGxzKGNlbGxSb3dzKSB7XG4gICAgZm9yIChsZXQgcm93SW5kZXggPSBjZWxsUm93cy5sZW5ndGggLSAxOyByb3dJbmRleCA+PSAwOyByb3dJbmRleC0tKSB7XG4gICAgICBsZXQgY2VsbENvbHVtbnMgPSBjZWxsUm93c1tyb3dJbmRleF07XG4gICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY2VsbENvbHVtbnMubGVuZ3RoOyBjb2x1bW5JbmRleCsrKSB7XG4gICAgICAgIGxldCBjZWxsID0gY2VsbENvbHVtbnNbY29sdW1uSW5kZXhdO1xuICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IGNlbGwuY29sU3BhbjsgaysrKSB7XG4gICAgICAgICAgbGV0IGNvbFNwYW5DZWxsID0gbmV3IENvbFNwYW5DZWxsKCk7XG4gICAgICAgICAgY29sU3BhbkNlbGwueCA9IGNlbGwueCArIGs7XG4gICAgICAgICAgY29sU3BhbkNlbGwueSA9IGNlbGwueTtcbiAgICAgICAgICBjZWxsQ29sdW1ucy5zcGxpY2UoY29sdW1uSW5kZXggKyAxLCAwLCBjb2xTcGFuQ2VsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRDZWxsKGNlbGwsIHJvdykge1xuICAgIGxldCB4ID0gMDtcbiAgICB3aGlsZSAoeCA8IHJvdy5sZW5ndGggJiYgcm93W3hdLnggPCBjZWxsLngpIHtcbiAgICAgIHgrKztcbiAgICB9XG4gICAgcm93LnNwbGljZSh4LCAwLCBjZWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbGxJblRhYmxlKHRhYmxlKSB7XG4gICAgbGV0IGhfbWF4ID0gbWF4SGVpZ2h0KHRhYmxlKTtcbiAgICBsZXQgd19tYXggPSBtYXhXaWR0aCh0YWJsZSk7XG4gICAgZGVidWcoYE1heCByb3dzOiAke2hfbWF4fTsgTWF4IGNvbHM6ICR7d19tYXh9YCk7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoX21heDsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdfbWF4OyB4KyspIHtcbiAgICAgICAgaWYgKCFjb25mbGljdEV4aXN0cyh0YWJsZSwgeCwgeSkpIHtcbiAgICAgICAgICBsZXQgb3B0cyA9IHsgeDogeCwgeTogeSwgY29sU3BhbjogMSwgcm93U3BhbjogMSB9O1xuICAgICAgICAgIHgrKztcbiAgICAgICAgICB3aGlsZSAoeCA8IHdfbWF4ICYmICFjb25mbGljdEV4aXN0cyh0YWJsZSwgeCwgeSkpIHtcbiAgICAgICAgICAgIG9wdHMuY29sU3BhbisrO1xuICAgICAgICAgICAgeCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgeTIgPSB5ICsgMTtcbiAgICAgICAgICB3aGlsZSAoeTIgPCBoX21heCAmJiBhbGxCbGFuayh0YWJsZSwgeTIsIG9wdHMueCwgb3B0cy54ICsgb3B0cy5jb2xTcGFuKSkge1xuICAgICAgICAgICAgb3B0cy5yb3dTcGFuKys7XG4gICAgICAgICAgICB5MisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgY2VsbCA9IG5ldyBDZWxsKG9wdHMpO1xuICAgICAgICAgIGNlbGwueCA9IG9wdHMueDtcbiAgICAgICAgICBjZWxsLnkgPSBvcHRzLnk7XG4gICAgICAgICAgd2FybihgTWlzc2luZyBjZWxsIGF0ICR7Y2VsbC55fS0ke2NlbGwueH0uYCk7XG4gICAgICAgICAgaW5zZXJ0Q2VsbChjZWxsLCB0YWJsZVt5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUNlbGxzKHJvd3MpIHtcbiAgICByZXR1cm4gcm93cy5tYXAoZnVuY3Rpb24gKHJvdykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJvdylbMF07XG4gICAgICAgIHJvdyA9IHJvd1trZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgICAgICAgcm93ID0gcm93LnNsaWNlKCk7XG4gICAgICAgICAgcm93LnVuc2hpZnQoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3cgPSBba2V5LCByb3ddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93Lm1hcChmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICByZXR1cm4gbmV3IENlbGwoY2VsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VUYWJsZUxheW91dChyb3dzKSB7XG4gICAgbGV0IGNlbGxSb3dzID0gZ2VuZXJhdGVDZWxscyhyb3dzKTtcbiAgICBsYXlvdXRUYWJsZShjZWxsUm93cyk7XG4gICAgZmlsbEluVGFibGUoY2VsbFJvd3MpO1xuICAgIGFkZFJvd1NwYW5DZWxscyhjZWxsUm93cyk7XG4gICAgYWRkQ29sU3BhbkNlbGxzKGNlbGxSb3dzKTtcbiAgICByZXR1cm4gY2VsbFJvd3M7XG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBtYWtlVGFibGVMYXlvdXQ6IG1ha2VUYWJsZUxheW91dCxcbiAgICBsYXlvdXRUYWJsZTogbGF5b3V0VGFibGUsXG4gICAgYWRkUm93U3BhbkNlbGxzOiBhZGRSb3dTcGFuQ2VsbHMsXG4gICAgbWF4V2lkdGg6IG1heFdpZHRoLFxuICAgIGZpbGxJblRhYmxlOiBmaWxsSW5UYWJsZSxcbiAgICBjb21wdXRlV2lkdGhzOiBtYWtlQ29tcHV0ZVdpZHRocygnY29sU3BhbicsICdkZXNpcmVkV2lkdGgnLCAneCcsIDEpLFxuICAgIGNvbXB1dGVIZWlnaHRzOiBtYWtlQ29tcHV0ZVdpZHRocygncm93U3BhbicsICdkZXNpcmVkSGVpZ2h0JywgJ3knLCAxKSxcbiAgfTtcbn0pKCk7XG5cbmZ1bmN0aW9uIG1ha2VDb21wdXRlV2lkdGhzKGNvbFNwYW4sIGRlc2lyZWRXaWR0aCwgeCwgZm9yY2VkTWluKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFscywgdGFibGUpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgbGV0IHNwYW5uZXJzID0gW107XG4gICAgbGV0IGF1dG8gPSB7fTtcbiAgICB0YWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHJvdy5mb3JFYWNoKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIGlmICgoY2VsbFtjb2xTcGFuXSB8fCAxKSA+IDEpIHtcbiAgICAgICAgICBzcGFubmVycy5wdXNoKGNlbGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtjZWxsW3hdXSA9IE1hdGgubWF4KHJlc3VsdFtjZWxsW3hdXSB8fCAwLCBjZWxsW2Rlc2lyZWRXaWR0aF0gfHwgMCwgZm9yY2VkTWluKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB2YWxzLmZvckVhY2goZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy9zcGFubmVycy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwpe1xuICAgIGZvciAobGV0IGsgPSBzcGFubmVycy5sZW5ndGggLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgbGV0IGNlbGwgPSBzcGFubmVyc1trXTtcbiAgICAgIGxldCBzcGFuID0gY2VsbFtjb2xTcGFuXTtcbiAgICAgIGxldCBjb2wgPSBjZWxsW3hdO1xuICAgICAgbGV0IGV4aXN0aW5nV2lkdGggPSByZXN1bHRbY29sXTtcbiAgICAgIGxldCBlZGl0YWJsZUNvbHMgPSB0eXBlb2YgdmFsc1tjb2xdID09PSAnbnVtYmVyJyA/IDAgOiAxO1xuICAgICAgaWYgKHR5cGVvZiBleGlzdGluZ1dpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNwYW47IGkrKykge1xuICAgICAgICAgIGV4aXN0aW5nV2lkdGggKz0gMSArIHJlc3VsdFtjb2wgKyBpXTtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHNbY29sICsgaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBlZGl0YWJsZUNvbHMrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nV2lkdGggPSBkZXNpcmVkV2lkdGggPT09ICdkZXNpcmVkV2lkdGgnID8gY2VsbC5kZXNpcmVkV2lkdGggLSAxIDogMTtcbiAgICAgICAgaWYgKCFhdXRvW2NvbF0gfHwgYXV0b1tjb2xdIDwgZXhpc3RpbmdXaWR0aCkge1xuICAgICAgICAgIGF1dG9bY29sXSA9IGV4aXN0aW5nV2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGxbZGVzaXJlZFdpZHRoXSA+IGV4aXN0aW5nV2lkdGgpIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAoZWRpdGFibGVDb2xzID4gMCAmJiBjZWxsW2Rlc2lyZWRXaWR0aF0gPiBleGlzdGluZ1dpZHRoKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWxzW2NvbCArIGldICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbGV0IGRpZiA9IE1hdGgucm91bmQoKGNlbGxbZGVzaXJlZFdpZHRoXSAtIGV4aXN0aW5nV2lkdGgpIC8gZWRpdGFibGVDb2xzKTtcbiAgICAgICAgICAgIGV4aXN0aW5nV2lkdGggKz0gZGlmO1xuICAgICAgICAgICAgcmVzdWx0W2NvbCArIGldICs9IGRpZjtcbiAgICAgICAgICAgIGVkaXRhYmxlQ29scy0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHZhbHMsIHJlc3VsdCwgYXV0byk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWxzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YWxzW2pdID0gTWF0aC5tYXgoZm9yY2VkTWluLCB2YWxzW2pdIHx8IDApO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IHRhYmxlTGF5b3V0ID0gcmVxdWlyZSgnLi9sYXlvdXQtbWFuYWdlcicpO1xuXG5jbGFzcyBUYWJsZSBleHRlbmRzIEFycmF5IHtcbiAgY29uc3RydWN0b3Iob3B0cykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gdXRpbHMubWVyZ2VPcHRpb25zKG9wdHMpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb3B0aW9ucycsIHtcbiAgICAgIHZhbHVlOiBvcHRpb25zLFxuICAgICAgZW51bWVyYWJsZTogb3B0aW9ucy5kZWJ1ZyxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLmRlYnVnKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiBvcHRpb25zLmRlYnVnKSB7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGRlYnVnLnNldERlYnVnTGV2ZWwoZGVidWcuV0FSTik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgZGVidWcuc2V0RGVidWdMZXZlbChvcHRpb25zLmRlYnVnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBkZWJ1Zy5zZXREZWJ1Z0xldmVsKHBhcnNlSW50KG9wdGlvbnMuZGVidWcsIDEwKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZGVidWcuc2V0RGVidWdMZXZlbChkZWJ1Zy5XQVJOKTtcbiAgICAgICAgICBkZWJ1Zy53YXJuKGBEZWJ1ZyBvcHRpb24gaXMgZXhwZWN0ZWQgdG8gYmUgYm9vbGVhbiwgbnVtYmVyLCBvciBzdHJpbmcuIFJlY2VpdmVkIGEgJHt0eXBlb2Ygb3B0aW9ucy5kZWJ1Z31gKTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZXMnLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gZGVidWcuZGVidWdNZXNzYWdlcygpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGFycmF5ID0gdGhpcztcbiAgICBsZXQgaGVhZGVyc1ByZXNlbnQgPSB0aGlzLm9wdGlvbnMuaGVhZCAmJiB0aGlzLm9wdGlvbnMuaGVhZC5sZW5ndGg7XG4gICAgaWYgKGhlYWRlcnNQcmVzZW50KSB7XG4gICAgICBhcnJheSA9IFt0aGlzLm9wdGlvbnMuaGVhZF07XG4gICAgICBpZiAodGhpcy5sZW5ndGgpIHtcbiAgICAgICAgYXJyYXkucHVzaC5hcHBseShhcnJheSwgdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy5zdHlsZS5oZWFkID0gW107XG4gICAgfVxuXG4gICAgbGV0IGNlbGxzID0gdGFibGVMYXlvdXQubWFrZVRhYmxlTGF5b3V0KGFycmF5KTtcblxuICAgIGNlbGxzLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgY2VsbC5tZXJnZVRhYmxlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGNlbGxzKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgdGFibGVMYXlvdXQuY29tcHV0ZVdpZHRocyh0aGlzLm9wdGlvbnMuY29sV2lkdGhzLCBjZWxscyk7XG4gICAgdGFibGVMYXlvdXQuY29tcHV0ZUhlaWdodHModGhpcy5vcHRpb25zLnJvd0hlaWdodHMsIGNlbGxzKTtcblxuICAgIGNlbGxzLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgICAgcm93LmZvckVhY2goZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgY2VsbC5pbml0KHRoaXMub3B0aW9ucyk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBjZWxscy5sZW5ndGg7IHJvd0luZGV4KyspIHtcbiAgICAgIGxldCByb3cgPSBjZWxsc1tyb3dJbmRleF07XG4gICAgICBsZXQgaGVpZ2h0T2ZSb3cgPSB0aGlzLm9wdGlvbnMucm93SGVpZ2h0c1tyb3dJbmRleF07XG5cbiAgICAgIGlmIChyb3dJbmRleCA9PT0gMCB8fCAhdGhpcy5vcHRpb25zLnN0eWxlLmNvbXBhY3QgfHwgKHJvd0luZGV4ID09IDEgJiYgaGVhZGVyc1ByZXNlbnQpKSB7XG4gICAgICAgIGRvRHJhdyhyb3csICd0b3AnLCByZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IGhlaWdodE9mUm93OyBsaW5lTnVtKyspIHtcbiAgICAgICAgZG9EcmF3KHJvdywgbGluZU51bSwgcmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvd0luZGV4ICsgMSA9PSBjZWxscy5sZW5ndGgpIHtcbiAgICAgICAgZG9EcmF3KHJvdywgJ2JvdHRvbScsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCB3aWR0aCgpIHtcbiAgICBsZXQgc3RyID0gdGhpcy50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICByZXR1cm4gc3RyWzBdLmxlbmd0aDtcbiAgfVxufVxuXG5UYWJsZS5yZXNldCA9ICgpID0+IGRlYnVnLnJlc2V0KCk7XG5cbmZ1bmN0aW9uIGRvRHJhdyhyb3csIGxpbmVOdW0sIHJlc3VsdCkge1xuICBsZXQgbGluZSA9IFtdO1xuICByb3cuZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkge1xuICAgIGxpbmUucHVzaChjZWxsLmRyYXcobGluZU51bSkpO1xuICB9KTtcbiAgbGV0IHN0ciA9IGxpbmUuam9pbignJyk7XG4gIGlmIChzdHIubGVuZ3RoKSByZXN1bHQucHVzaChzdHIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRhYmxlO1xuIiwKICAgICIvKlxuVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cblxudmFyIHN0eWxlcyA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBzdHlsZXM7XG5cbnZhciBjb2RlcyA9IHtcbiAgcmVzZXQ6IFswLCAwXSxcblxuICBib2xkOiBbMSwgMjJdLFxuICBkaW06IFsyLCAyMl0sXG4gIGl0YWxpYzogWzMsIDIzXSxcbiAgdW5kZXJsaW5lOiBbNCwgMjRdLFxuICBpbnZlcnNlOiBbNywgMjddLFxuICBoaWRkZW46IFs4LCAyOF0sXG4gIHN0cmlrZXRocm91Z2g6IFs5LCAyOV0sXG5cbiAgYmxhY2s6IFszMCwgMzldLFxuICByZWQ6IFszMSwgMzldLFxuICBncmVlbjogWzMyLCAzOV0sXG4gIHllbGxvdzogWzMzLCAzOV0sXG4gIGJsdWU6IFszNCwgMzldLFxuICBtYWdlbnRhOiBbMzUsIDM5XSxcbiAgY3lhbjogWzM2LCAzOV0sXG4gIHdoaXRlOiBbMzcsIDM5XSxcbiAgZ3JheTogWzkwLCAzOV0sXG4gIGdyZXk6IFs5MCwgMzldLFxuXG4gIGJyaWdodFJlZDogWzkxLCAzOV0sXG4gIGJyaWdodEdyZWVuOiBbOTIsIDM5XSxcbiAgYnJpZ2h0WWVsbG93OiBbOTMsIDM5XSxcbiAgYnJpZ2h0Qmx1ZTogWzk0LCAzOV0sXG4gIGJyaWdodE1hZ2VudGE6IFs5NSwgMzldLFxuICBicmlnaHRDeWFuOiBbOTYsIDM5XSxcbiAgYnJpZ2h0V2hpdGU6IFs5NywgMzldLFxuXG4gIGJnQmxhY2s6IFs0MCwgNDldLFxuICBiZ1JlZDogWzQxLCA0OV0sXG4gIGJnR3JlZW46IFs0MiwgNDldLFxuICBiZ1llbGxvdzogWzQzLCA0OV0sXG4gIGJnQmx1ZTogWzQ0LCA0OV0sXG4gIGJnTWFnZW50YTogWzQ1LCA0OV0sXG4gIGJnQ3lhbjogWzQ2LCA0OV0sXG4gIGJnV2hpdGU6IFs0NywgNDldLFxuICBiZ0dyYXk6IFsxMDAsIDQ5XSxcbiAgYmdHcmV5OiBbMTAwLCA0OV0sXG5cbiAgYmdCcmlnaHRSZWQ6IFsxMDEsIDQ5XSxcbiAgYmdCcmlnaHRHcmVlbjogWzEwMiwgNDldLFxuICBiZ0JyaWdodFllbGxvdzogWzEwMywgNDldLFxuICBiZ0JyaWdodEJsdWU6IFsxMDQsIDQ5XSxcbiAgYmdCcmlnaHRNYWdlbnRhOiBbMTA1LCA0OV0sXG4gIGJnQnJpZ2h0Q3lhbjogWzEwNiwgNDldLFxuICBiZ0JyaWdodFdoaXRlOiBbMTA3LCA0OV0sXG5cbiAgLy8gbGVnYWN5IHN0eWxlcyBmb3IgY29sb3JzIHByZSB2MS4wLjBcbiAgYmxhY2tCRzogWzQwLCA0OV0sXG4gIHJlZEJHOiBbNDEsIDQ5XSxcbiAgZ3JlZW5CRzogWzQyLCA0OV0sXG4gIHllbGxvd0JHOiBbNDMsIDQ5XSxcbiAgYmx1ZUJHOiBbNDQsIDQ5XSxcbiAgbWFnZW50YUJHOiBbNDUsIDQ5XSxcbiAgY3lhbkJHOiBbNDYsIDQ5XSxcbiAgd2hpdGVCRzogWzQ3LCA0OV0sXG5cbn07XG5cbk9iamVjdC5rZXlzKGNvZGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICB2YXIgdmFsID0gY29kZXNba2V5XTtcbiAgdmFyIHN0eWxlID0gc3R5bGVzW2tleV0gPSBbXTtcbiAgc3R5bGUub3BlbiA9ICdcXHUwMDFiWycgKyB2YWxbMF0gKyAnbSc7XG4gIHN0eWxlLmNsb3NlID0gJ1xcdTAwMWJbJyArIHZhbFsxXSArICdtJztcbn0pO1xuIiwKICAgICIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxudGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpblxudGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xudXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXNcbm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkb1xuc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZsYWcsIGFyZ3YpIHtcbiAgYXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2IHx8IFtdO1xuXG4gIHZhciB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuICB2YXIgcHJlZml4ID0gL14tezEsMn0vLnRlc3QoZmxhZykgPyAnJyA6ICctLSc7XG4gIHZhciBwb3MgPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cbiAgcmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsCiAgICAiLypcblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIG9zID0gcmVxdWlyZSgnb3MnKTtcbnZhciBoYXNGbGFnID0gcmVxdWlyZSgnLi9oYXMtZmxhZy5qcycpO1xuXG52YXIgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbnZhciBmb3JjZUNvbG9yID0gdm9pZCAwO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHwgaGFzRmxhZygnbm8tY29sb3JzJykgfHwgaGFzRmxhZygnY29sb3I9ZmFsc2UnKSkge1xuICBmb3JjZUNvbG9yID0gZmFsc2U7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHwgaGFzRmxhZygnY29sb3JzJykgfHwgaGFzRmxhZygnY29sb3I9dHJ1ZScpXG4gICAgICAgICAgIHx8IGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG4gIGZvcmNlQ29sb3IgPSB0cnVlO1xufVxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG4gIGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwXG4gICAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG4gIGlmIChsZXZlbCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGV2ZWw6IGxldmVsLFxuICAgIGhhc0Jhc2ljOiB0cnVlLFxuICAgIGhhczI1NjogbGV2ZWwgPj0gMixcbiAgICBoYXMxNm06IGxldmVsID49IDMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG4gIGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8IGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKVxuICAgICAgfHwgaGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcbiAgICByZXR1cm4gMztcbiAgfVxuXG4gIGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuICAgIHJldHVybiAyO1xuICB9XG5cbiAgaWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG4gICAgLy8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcbiAgICAvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcbiAgICAvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3RcbiAgICAvLyBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZVxuICAgIC8vIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuICAgIHZhciBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcbiAgICBpZiAoTnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4XG4gICAgICAgICYmIE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2KSB7XG4gICAgICByZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICgnQ0knIGluIGVudikge1xuICAgIGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKGZ1bmN0aW9uKHNpZ24pIHtcbiAgICAgIHJldHVybiBzaWduIGluIGVudjtcbiAgICB9KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbjtcbiAgfVxuXG4gIGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG4gICAgcmV0dXJuICgvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMFxuICAgICk7XG4gIH1cblxuICBpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG4gICAgdmFyIHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cbiAgICBzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcbiAgICAgIGNhc2UgJ2lUZXJtLmFwcCc6XG4gICAgICAgIHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcbiAgICAgIGNhc2UgJ0h5cGVyJzpcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICBjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgLy8gTm8gZGVmYXVsdFxuICAgIH1cbiAgfVxuXG4gIGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cblxuICBpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuICAgIHJldHVybiBtaW47XG4gIH1cblxuICByZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG4gIHZhciBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcbiAgcmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcbiAgc3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuICBzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVyciksXG59O1xuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uIHJ1blRoZVRyYXAodGV4dCwgb3B0aW9ucykge1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHRleHQgPSB0ZXh0IHx8ICdSdW4gdGhlIHRyYXAsIGRyb3AgdGhlIGJhc3MnO1xuICB0ZXh0ID0gdGV4dC5zcGxpdCgnJyk7XG4gIHZhciB0cmFwID0ge1xuICAgIGE6IFsnXFx1MDA0MCcsICdcXHUwMTA0JywgJ1xcdTAyM2EnLCAnXFx1MDI0NScsICdcXHUwMzk0JywgJ1xcdTAzOWInLCAnXFx1MDQxNCddLFxuICAgIGI6IFsnXFx1MDBkZicsICdcXHUwMTgxJywgJ1xcdTAyNDMnLCAnXFx1MDI2ZScsICdcXHUwM2IyJywgJ1xcdTBlM2YnXSxcbiAgICBjOiBbJ1xcdTAwYTknLCAnXFx1MDIzYicsICdcXHUwM2ZlJ10sXG4gICAgZDogWydcXHUwMGQwJywgJ1xcdTAxOGEnLCAnXFx1MDUwMCcsICdcXHUwNTAxJywgJ1xcdTA1MDInLCAnXFx1MDUwMyddLFxuICAgIGU6IFsnXFx1MDBjYicsICdcXHUwMTE1JywgJ1xcdTAxOGUnLCAnXFx1MDI1OCcsICdcXHUwM2EzJywgJ1xcdTAzYmUnLCAnXFx1MDRiYycsXG4gICAgICAnXFx1MGE2YyddLFxuICAgIGY6IFsnXFx1MDRmYSddLFxuICAgIGc6IFsnXFx1MDI2MiddLFxuICAgIGg6IFsnXFx1MDEyNicsICdcXHUwMTk1JywgJ1xcdTA0YTInLCAnXFx1MDRiYScsICdcXHUwNGM3JywgJ1xcdTA1MGEnXSxcbiAgICBpOiBbJ1xcdTBmMGYnXSxcbiAgICBqOiBbJ1xcdTAxMzQnXSxcbiAgICBrOiBbJ1xcdTAxMzgnLCAnXFx1MDRhMCcsICdcXHUwNGMzJywgJ1xcdTA1MWUnXSxcbiAgICBsOiBbJ1xcdTAxMzknXSxcbiAgICBtOiBbJ1xcdTAyOGQnLCAnXFx1MDRjZCcsICdcXHUwNGNlJywgJ1xcdTA1MjAnLCAnXFx1MDUyMScsICdcXHUwZDY5J10sXG4gICAgbjogWydcXHUwMGQxJywgJ1xcdTAxNGInLCAnXFx1MDE5ZCcsICdcXHUwMzc2JywgJ1xcdTAzYTAnLCAnXFx1MDQ4YSddLFxuICAgIG86IFsnXFx1MDBkOCcsICdcXHUwMGY1JywgJ1xcdTAwZjgnLCAnXFx1MDFmZScsICdcXHUwMjk4JywgJ1xcdTA0N2EnLCAnXFx1MDVkZCcsXG4gICAgICAnXFx1MDZkZCcsICdcXHUwZTRmJ10sXG4gICAgcDogWydcXHUwMWY3JywgJ1xcdTA0OGUnXSxcbiAgICBxOiBbJ1xcdTA5Y2QnXSxcbiAgICByOiBbJ1xcdTAwYWUnLCAnXFx1MDFhNicsICdcXHUwMjEwJywgJ1xcdTAyNGMnLCAnXFx1MDI4MCcsICdcXHUwNDJmJ10sXG4gICAgczogWydcXHUwMGE3JywgJ1xcdTAzZGUnLCAnXFx1MDNkZicsICdcXHUwM2U4J10sXG4gICAgdDogWydcXHUwMTQxJywgJ1xcdTAxNjYnLCAnXFx1MDM3MyddLFxuICAgIHU6IFsnXFx1MDFiMScsICdcXHUwNTRkJ10sXG4gICAgdjogWydcXHUwNWQ4J10sXG4gICAgdzogWydcXHUwNDI4JywgJ1xcdTA0NjAnLCAnXFx1MDQ3YycsICdcXHUwZDcwJ10sXG4gICAgeDogWydcXHUwNGIyJywgJ1xcdTA0ZmUnLCAnXFx1MDRmYycsICdcXHUwNGZkJ10sXG4gICAgeTogWydcXHUwMGE1JywgJ1xcdTA0YjAnLCAnXFx1MDRjYiddLFxuICAgIHo6IFsnXFx1MDFiNScsICdcXHUwMjQwJ10sXG4gIH07XG4gIHRleHQuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgYyA9IGMudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY2hhcnMgPSB0cmFwW2NdIHx8IFsnICddO1xuICAgIHZhciByYW5kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKTtcbiAgICBpZiAodHlwZW9mIHRyYXBbY10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXN1bHQgKz0gdHJhcFtjXVtyYW5kXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9IGM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLAogICAgIi8vIHBsZWFzZSBub1xubW9kdWxlWydleHBvcnRzJ10gPSBmdW5jdGlvbiB6YWxnbyh0ZXh0LCBvcHRpb25zKSB7XG4gIHRleHQgPSB0ZXh0IHx8ICcgICBoZSBpcyBoZXJlICAgJztcbiAgdmFyIHNvdWwgPSB7XG4gICAgJ3VwJzogW1xuICAgICAgJ8yNJywgJ8yOJywgJ8yEJywgJ8yFJyxcbiAgICAgICfMvycsICfMkScsICfMhicsICfMkCcsXG4gICAgICAnzZInLCAnzZcnLCAnzZEnLCAnzIcnLFxuICAgICAgJ8yIJywgJ8yKJywgJ82CJywgJ8yTJyxcbiAgICAgICfMiCcsICfNiicsICfNiycsICfNjCcsXG4gICAgICAnzIMnLCAnzIInLCAnzIwnLCAnzZAnLFxuICAgICAgJ8yAJywgJ8yBJywgJ8yLJywgJ8yPJyxcbiAgICAgICfMkicsICfMkycsICfMlCcsICfMvScsXG4gICAgICAnzIknLCAnzaMnLCAnzaQnLCAnzaUnLFxuICAgICAgJ82mJywgJ82nJywgJ82oJywgJ82pJyxcbiAgICAgICfNqicsICfNqycsICfNrCcsICfNrScsXG4gICAgICAnza4nLCAnza8nLCAnzL4nLCAnzZsnLFxuICAgICAgJ82GJywgJ8yaJyxcbiAgICBdLFxuICAgICdkb3duJzogW1xuICAgICAgJ8yWJywgJ8yXJywgJ8yYJywgJ8yZJyxcbiAgICAgICfMnCcsICfMnScsICfMnicsICfMnycsXG4gICAgICAnzKAnLCAnzKQnLCAnzKUnLCAnzKYnLFxuICAgICAgJ8ypJywgJ8yqJywgJ8yrJywgJ8ysJyxcbiAgICAgICfMrScsICfMricsICfMrycsICfMsCcsXG4gICAgICAnzLEnLCAnzLInLCAnzLMnLCAnzLknLFxuICAgICAgJ8y6JywgJ8y7JywgJ8y8JywgJ82FJyxcbiAgICAgICfNhycsICfNiCcsICfNiScsICfNjScsXG4gICAgICAnzY4nLCAnzZMnLCAnzZQnLCAnzZUnLFxuICAgICAgJ82WJywgJ82ZJywgJ82aJywgJ8yjJyxcbiAgICBdLFxuICAgICdtaWQnOiBbXG4gICAgICAnzJUnLCAnzJsnLCAnzIAnLCAnzIEnLFxuICAgICAgJ82YJywgJ8yhJywgJ8yiJywgJ8ynJyxcbiAgICAgICfMqCcsICfMtCcsICfMtScsICfMticsXG4gICAgICAnzZwnLCAnzZ0nLCAnzZ4nLFxuICAgICAgJ82fJywgJ82gJywgJ82iJywgJ8y4JyxcbiAgICAgICfMtycsICfNoScsICcg0oknLFxuICAgIF0sXG4gIH07XG4gIHZhciBhbGwgPSBbXS5jb25jYXQoc291bC51cCwgc291bC5kb3duLCBzb3VsLm1pZCk7XG5cbiAgZnVuY3Rpb24gcmFuZG9tTnVtYmVyKHJhbmdlKSB7XG4gICAgdmFyIHIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5nZSk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NoYXIoY2hhcmFjdGVyKSB7XG4gICAgdmFyIGJvb2wgPSBmYWxzZTtcbiAgICBhbGwuZmlsdGVyKGZ1bmN0aW9uKGkpIHtcbiAgICAgIGJvb2wgPSAoaSA9PT0gY2hhcmFjdGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYm9vbDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gaGVDb21lcyh0ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBjb3VudHM7XG4gICAgdmFyIGw7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9uc1sndXAnXSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uc1sndXAnXSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zWyd1cCddIDogdHJ1ZTtcbiAgICBvcHRpb25zWydtaWQnXSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uc1snbWlkJ10gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uc1snbWlkJ10gOiB0cnVlO1xuICAgIG9wdGlvbnNbJ2Rvd24nXSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uc1snZG93biddICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnNbJ2Rvd24nXSA6IHRydWU7XG4gICAgb3B0aW9uc1snc2l6ZSddID1cbiAgICAgIHR5cGVvZiBvcHRpb25zWydzaXplJ10gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uc1snc2l6ZSddIDogJ21heGknO1xuICAgIHRleHQgPSB0ZXh0LnNwbGl0KCcnKTtcbiAgICBmb3IgKGwgaW4gdGV4dCkge1xuICAgICAgaWYgKGlzQ2hhcihsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRleHRbbF07XG4gICAgICBjb3VudHMgPSB7J3VwJzogMCwgJ2Rvd24nOiAwLCAnbWlkJzogMH07XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMuc2l6ZSkge1xuICAgICAgICBjYXNlICdtaW5pJzpcbiAgICAgICAgICBjb3VudHMudXAgPSByYW5kb21OdW1iZXIoOCk7XG4gICAgICAgICAgY291bnRzLm1pZCA9IHJhbmRvbU51bWJlcigyKTtcbiAgICAgICAgICBjb3VudHMuZG93biA9IHJhbmRvbU51bWJlcig4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWF4aSc6XG4gICAgICAgICAgY291bnRzLnVwID0gcmFuZG9tTnVtYmVyKDE2KSArIDM7XG4gICAgICAgICAgY291bnRzLm1pZCA9IHJhbmRvbU51bWJlcig0KSArIDE7XG4gICAgICAgICAgY291bnRzLmRvd24gPSByYW5kb21OdW1iZXIoNjQpICsgMztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb3VudHMudXAgPSByYW5kb21OdW1iZXIoOCkgKyAxO1xuICAgICAgICAgIGNvdW50cy5taWQgPSByYW5kb21OdW1iZXIoNikgLyAyO1xuICAgICAgICAgIGNvdW50cy5kb3duID0gcmFuZG9tTnVtYmVyKDgpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGFyciA9IFsndXAnLCAnbWlkJywgJ2Rvd24nXTtcbiAgICAgIGZvciAodmFyIGQgaW4gYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFycltkXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gY291bnRzW2luZGV4XTsgaSsrKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBzb3VsW2luZGV4XVtyYW5kb21OdW1iZXIoc291bFtpbmRleF0ubGVuZ3RoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gZG9uJ3Qgc3VtbW9uIGhpbVxuICByZXR1cm4gaGVDb21lcyh0ZXh0LCBvcHRpb25zKTtcbn07XG5cbiIsCiAgICAibW9kdWxlWydleHBvcnRzJ10gPSBmdW5jdGlvbihjb2xvcnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxldHRlciwgaSwgZXhwbG9kZWQpIHtcbiAgICBpZiAobGV0dGVyID09PSAnICcpIHJldHVybiBsZXR0ZXI7XG4gICAgc3dpdGNoIChpJTMpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIGNvbG9ycy5yZWQobGV0dGVyKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGNvbG9ycy53aGl0ZShsZXR0ZXIpO1xuICAgICAgY2FzZSAyOiByZXR1cm4gY29sb3JzLmJsdWUobGV0dGVyKTtcbiAgICB9XG4gIH07XG59O1xuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICByZXR1cm4gZnVuY3Rpb24obGV0dGVyLCBpLCBleHBsb2RlZCkge1xuICAgIHJldHVybiBpICUgMiA9PT0gMCA/IGxldHRlciA6IGNvbG9ycy5pbnZlcnNlKGxldHRlcik7XG4gIH07XG59O1xuIiwKICAgICJtb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAvLyBSb1kgRyBCaVZcbiAgdmFyIHJhaW5ib3dDb2xvcnMgPSBbJ3JlZCcsICd5ZWxsb3cnLCAnZ3JlZW4nLCAnYmx1ZScsICdtYWdlbnRhJ107XG4gIHJldHVybiBmdW5jdGlvbihsZXR0ZXIsIGksIGV4cGxvZGVkKSB7XG4gICAgaWYgKGxldHRlciA9PT0gJyAnKSB7XG4gICAgICByZXR1cm4gbGV0dGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29sb3JzW3JhaW5ib3dDb2xvcnNbaSsrICUgcmFpbmJvd0NvbG9ycy5sZW5ndGhdXShsZXR0ZXIpO1xuICAgIH1cbiAgfTtcbn07XG5cbiIsCiAgICAibW9kdWxlWydleHBvcnRzJ10gPSBmdW5jdGlvbihjb2xvcnMpIHtcbiAgdmFyIGF2YWlsYWJsZSA9IFsndW5kZXJsaW5lJywgJ2ludmVyc2UnLCAnZ3JleScsICd5ZWxsb3cnLCAncmVkJywgJ2dyZWVuJyxcbiAgICAnYmx1ZScsICd3aGl0ZScsICdjeWFuJywgJ21hZ2VudGEnLCAnYnJpZ2h0WWVsbG93JywgJ2JyaWdodFJlZCcsXG4gICAgJ2JyaWdodEdyZWVuJywgJ2JyaWdodEJsdWUnLCAnYnJpZ2h0V2hpdGUnLCAnYnJpZ2h0Q3lhbicsICdicmlnaHRNYWdlbnRhJ107XG4gIHJldHVybiBmdW5jdGlvbihsZXR0ZXIsIGksIGV4cGxvZGVkKSB7XG4gICAgcmV0dXJuIGxldHRlciA9PT0gJyAnID8gbGV0dGVyIDpcbiAgICAgIGNvbG9yc1tcbiAgICAgICAgICBhdmFpbGFibGVbTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKGF2YWlsYWJsZS5sZW5ndGggLSAyKSldXG4gICAgICBdKGxldHRlcik7XG4gIH07XG59O1xuIiwKICAgICIvKlxuXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuT3JpZ2luYWwgTGlicmFyeVxuICAtIENvcHlyaWdodCAoYykgTWFyYWsgU3F1aXJlc1xuXG5BZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHlcbiAtIENvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cblxudmFyIGNvbG9ycyA9IHt9O1xubW9kdWxlWydleHBvcnRzJ10gPSBjb2xvcnM7XG5cbmNvbG9ycy50aGVtZXMgPSB7fTtcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgYW5zaVN0eWxlcyA9IGNvbG9ycy5zdHlsZXMgPSByZXF1aXJlKCcuL3N0eWxlcycpO1xudmFyIGRlZmluZVByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgbmV3TGluZVJlZ2V4ID0gbmV3IFJlZ0V4cCgvW1xcclxcbl0rL2cpO1xuXG5jb2xvcnMuc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJy4vc3lzdGVtL3N1cHBvcnRzLWNvbG9ycycpLnN1cHBvcnRzQ29sb3I7XG5cbmlmICh0eXBlb2YgY29sb3JzLmVuYWJsZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbG9ycy5lbmFibGVkID0gY29sb3JzLnN1cHBvcnRzQ29sb3IoKSAhPT0gZmFsc2U7XG59XG5cbmNvbG9ycy5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgY29sb3JzLmVuYWJsZWQgPSB0cnVlO1xufTtcblxuY29sb3JzLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgY29sb3JzLmVuYWJsZWQgPSBmYWxzZTtcbn07XG5cbmNvbG9ycy5zdHJpcENvbG9ycyA9IGNvbG9ycy5zdHJpcCA9IGZ1bmN0aW9uKHN0cikge1xuICByZXR1cm4gKCcnICsgc3RyKS5yZXBsYWNlKC9cXHgxQlxcW1xcZCttL2csICcnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xudmFyIHN0eWxpemUgPSBjb2xvcnMuc3R5bGl6ZSA9IGZ1bmN0aW9uIHN0eWxpemUoc3RyLCBzdHlsZSkge1xuICBpZiAoIWNvbG9ycy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHN0cisnJztcbiAgfVxuXG4gIHZhciBzdHlsZU1hcCA9IGFuc2lTdHlsZXNbc3R5bGVdO1xuXG4gIC8vIFN0eWxpemUgc2hvdWxkIHdvcmsgZm9yIG5vbi1BTlNJIHN0eWxlcywgdG9vXG4gIGlmICghc3R5bGVNYXAgJiYgc3R5bGUgaW4gY29sb3JzKSB7XG4gICAgLy8gU3R5bGUgbWFwcyBsaWtlIHRyYXAgb3BlcmF0ZSBhcyBmdW5jdGlvbnMgb24gc3RyaW5ncztcbiAgICAvLyB0aGV5IGRvbid0IGhhdmUgcHJvcGVydGllcyBsaWtlIG9wZW4gb3IgY2xvc2UuXG4gICAgcmV0dXJuIGNvbG9yc1tzdHlsZV0oc3RyKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZU1hcC5vcGVuICsgc3RyICsgc3R5bGVNYXAuY2xvc2U7XG59O1xuXG52YXIgbWF0Y2hPcGVyYXRvcnNSZSA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZztcbnZhciBlc2NhcGVTdHJpbmdSZWdleHAgPSBmdW5jdGlvbihzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuICByZXR1cm4gc3RyLnJlcGxhY2UobWF0Y2hPcGVyYXRvcnNSZSwgJ1xcXFwkJicpO1xufTtcblxuZnVuY3Rpb24gYnVpbGQoX3N0eWxlcykge1xuICB2YXIgYnVpbGRlciA9IGZ1bmN0aW9uIGJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIGFwcGx5U3R5bGUuYXBwbHkoYnVpbGRlciwgYXJndW1lbnRzKTtcbiAgfTtcbiAgYnVpbGRlci5fc3R5bGVzID0gX3N0eWxlcztcbiAgLy8gX19wcm90b19fIGlzIHVzZWQgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcbiAgLy8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlLlxuICBidWlsZGVyLl9fcHJvdG9fXyA9IHByb3RvO1xuICByZXR1cm4gYnVpbGRlcjtcbn1cblxudmFyIHN0eWxlcyA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHJldCA9IHt9O1xuICBhbnNpU3R5bGVzLmdyZXkgPSBhbnNpU3R5bGVzLmdyYXk7XG4gIE9iamVjdC5rZXlzKGFuc2lTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgYW5zaVN0eWxlc1trZXldLmNsb3NlUmUgPVxuICAgICAgbmV3IFJlZ0V4cChlc2NhcGVTdHJpbmdSZWdleHAoYW5zaVN0eWxlc1trZXldLmNsb3NlKSwgJ2cnKTtcbiAgICByZXRba2V5XSA9IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBidWlsZCh0aGlzLl9zdHlsZXMuY29uY2F0KGtleSkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn0pKCk7XG5cbnZhciBwcm90byA9IGRlZmluZVByb3BzKGZ1bmN0aW9uIGNvbG9ycygpIHt9LCBzdHlsZXMpO1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlKCkge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgdmFyIHN0ciA9IGFyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgIC8vIFVzZSB3ZWFrIGVxdWFsaXR5IGNoZWNrIHNvIHdlIGNhbiBjb2xvcml6ZSBudWxsL3VuZGVmaW5lZCBpbiBzYWZlIG1vZGVcbiAgICBpZiAoYXJnICE9IG51bGwgJiYgYXJnLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnKTtcbiAgICB9XG4gIH0pLmpvaW4oJyAnKTtcblxuICBpZiAoIWNvbG9ycy5lbmFibGVkIHx8ICFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgdmFyIG5ld0xpbmVzUHJlc2VudCA9IHN0ci5pbmRleE9mKCdcXG4nKSAhPSAtMTtcblxuICB2YXIgbmVzdGVkU3R5bGVzID0gdGhpcy5fc3R5bGVzO1xuXG4gIHZhciBpID0gbmVzdGVkU3R5bGVzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBjb2RlID0gYW5zaVN0eWxlc1tuZXN0ZWRTdHlsZXNbaV1dO1xuICAgIHN0ciA9IGNvZGUub3BlbiArIHN0ci5yZXBsYWNlKGNvZGUuY2xvc2VSZSwgY29kZS5vcGVuKSArIGNvZGUuY2xvc2U7XG4gICAgaWYgKG5ld0xpbmVzUHJlc2VudCkge1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UobmV3TGluZVJlZ2V4LCBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgICByZXR1cm4gY29kZS5jbG9zZSArIG1hdGNoICsgY29kZS5vcGVuO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuY29sb3JzLnNldFRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLmxvZygnY29sb3JzLnNldFRoZW1lIG5vdyBvbmx5IGFjY2VwdHMgYW4gb2JqZWN0LCBub3QgYSBzdHJpbmcuICAnICtcbiAgICAgICdJZiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYSB0aGVtZSBmcm9tIGEgZmlsZSwgaXQgaXMgbm93IHlvdXIgKHRoZSAnICtcbiAgICAgICdjYWxsZXJcXCdzKSByZXNwb25zaWJpbGl0eSB0byByZXF1aXJlIHRoZSBmaWxlLiAgVGhlIG9sZCBzeW50YXggJyArXG4gICAgICAnbG9va2VkIGxpa2UgY29sb3JzLnNldFRoZW1lKF9fZGlybmFtZSArICcgK1xuICAgICAgJ1xcJy8uLi90aGVtZXMvZ2VuZXJpYy1sb2dnaW5nLmpzXFwnKTsgVGhlIG5ldyBzeW50YXggbG9va3MgbGlrZSAnK1xuICAgICAgJ2NvbG9ycy5zZXRUaGVtZShyZXF1aXJlKF9fZGlybmFtZSArICcgK1xuICAgICAgJ1xcJy8uLi90aGVtZXMvZ2VuZXJpYy1sb2dnaW5nLmpzXFwnKSk7Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAodmFyIHN0eWxlIGluIHRoZW1lKSB7XG4gICAgKGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICBjb2xvcnNbc3R5bGVdID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhlbWVbc3R5bGVdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHZhciBvdXQgPSBzdHI7XG4gICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGVtZVtzdHlsZV0pIHtcbiAgICAgICAgICAgIG91dCA9IGNvbG9yc1t0aGVtZVtzdHlsZV1baV1dKG91dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbG9yc1t0aGVtZVtzdHlsZV1dKHN0cik7XG4gICAgICB9O1xuICAgIH0pKHN0eWxlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHJldCA9IHt9O1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgIHJldFtuYW1lXSA9IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBidWlsZChbbmFtZV0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn1cblxudmFyIHNlcXVlbmNlciA9IGZ1bmN0aW9uIHNlcXVlbmNlcihtYXAsIHN0cikge1xuICB2YXIgZXhwbG9kZWQgPSBzdHIuc3BsaXQoJycpO1xuICBleHBsb2RlZCA9IGV4cGxvZGVkLm1hcChtYXApO1xuICByZXR1cm4gZXhwbG9kZWQuam9pbignJyk7XG59O1xuXG4vLyBjdXN0b20gZm9ybWF0dGVyIG1ldGhvZHNcbmNvbG9ycy50cmFwID0gcmVxdWlyZSgnLi9jdXN0b20vdHJhcCcpO1xuY29sb3JzLnphbGdvID0gcmVxdWlyZSgnLi9jdXN0b20vemFsZ28nKTtcblxuLy8gbWFwc1xuY29sb3JzLm1hcHMgPSB7fTtcbmNvbG9ycy5tYXBzLmFtZXJpY2EgPSByZXF1aXJlKCcuL21hcHMvYW1lcmljYScpKGNvbG9ycyk7XG5jb2xvcnMubWFwcy56ZWJyYSA9IHJlcXVpcmUoJy4vbWFwcy96ZWJyYScpKGNvbG9ycyk7XG5jb2xvcnMubWFwcy5yYWluYm93ID0gcmVxdWlyZSgnLi9tYXBzL3JhaW5ib3cnKShjb2xvcnMpO1xuY29sb3JzLm1hcHMucmFuZG9tID0gcmVxdWlyZSgnLi9tYXBzL3JhbmRvbScpKGNvbG9ycyk7XG5cbmZvciAodmFyIG1hcCBpbiBjb2xvcnMubWFwcykge1xuICAoZnVuY3Rpb24obWFwKSB7XG4gICAgY29sb3JzW21hcF0gPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBzZXF1ZW5jZXIoY29sb3JzLm1hcHNbbWFwXSwgc3RyKTtcbiAgICB9O1xuICB9KShtYXApO1xufVxuXG5kZWZpbmVQcm9wcyhjb2xvcnMsIGluaXQoKSk7XG4iLAogICAgInZhciBjb2xvcnMgPSByZXF1aXJlKCcuL2NvbG9ycycpO1xuXG5tb2R1bGVbJ2V4cG9ydHMnXSA9IGZ1bmN0aW9uKCkge1xuICAvL1xuICAvLyBFeHRlbmRzIHByb3RvdHlwZSBvZiBuYXRpdmUgc3RyaW5nIG9iamVjdCB0byBhbGxvdyBmb3IgXCJmb29cIi5yZWQgc3ludGF4XG4gIC8vXG4gIHZhciBhZGRQcm9wZXJ0eSA9IGZ1bmN0aW9uKGNvbG9yLCBmdW5jKSB7XG4gICAgU3RyaW5nLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKGNvbG9yLCBmdW5jKTtcbiAgfTtcblxuICBhZGRQcm9wZXJ0eSgnc3RyaXAnLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29sb3JzLnN0cmlwKHRoaXMpO1xuICB9KTtcblxuICBhZGRQcm9wZXJ0eSgnc3RyaXBDb2xvcnMnLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29sb3JzLnN0cmlwKHRoaXMpO1xuICB9KTtcblxuICBhZGRQcm9wZXJ0eSgndHJhcCcsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb2xvcnMudHJhcCh0aGlzKTtcbiAgfSk7XG5cbiAgYWRkUHJvcGVydHkoJ3phbGdvJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvbG9ycy56YWxnbyh0aGlzKTtcbiAgfSk7XG5cbiAgYWRkUHJvcGVydHkoJ3plYnJhJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvbG9ycy56ZWJyYSh0aGlzKTtcbiAgfSk7XG5cbiAgYWRkUHJvcGVydHkoJ3JhaW5ib3cnLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29sb3JzLnJhaW5ib3codGhpcyk7XG4gIH0pO1xuXG4gIGFkZFByb3BlcnR5KCdyYW5kb20nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29sb3JzLnJhbmRvbSh0aGlzKTtcbiAgfSk7XG5cbiAgYWRkUHJvcGVydHkoJ2FtZXJpY2EnLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29sb3JzLmFtZXJpY2EodGhpcyk7XG4gIH0pO1xuXG4gIC8vXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgZGVmYXVsdCBzdHlsZXMgYW5kIGNvbG9yc1xuICAvL1xuICB2YXIgeCA9IE9iamVjdC5rZXlzKGNvbG9ycy5zdHlsZXMpO1xuICB4LmZvckVhY2goZnVuY3Rpb24oc3R5bGUpIHtcbiAgICBhZGRQcm9wZXJ0eShzdHlsZSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29sb3JzLnN0eWxpemUodGhpcywgc3R5bGUpO1xuICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBhcHBseVRoZW1lKHRoZW1lKSB7XG4gICAgLy9cbiAgICAvLyBSZW1hcms6IFRoaXMgaXMgYSBsaXN0IG9mIG1ldGhvZHMgdGhhdCBleGlzdFxuICAgIC8vIG9uIFN0cmluZyB0aGF0IHlvdSBzaG91bGQgbm90IG92ZXJ3cml0ZS5cbiAgICAvL1xuICAgIHZhciBzdHJpbmdQcm90b3R5cGVCbGFja2xpc3QgPSBbXG4gICAgICAnX19kZWZpbmVHZXR0ZXJfXycsICdfX2RlZmluZVNldHRlcl9fJywgJ19fbG9va3VwR2V0dGVyX18nLFxuICAgICAgJ19fbG9va3VwU2V0dGVyX18nLCAnY2hhckF0JywgJ2NvbnN0cnVjdG9yJywgJ2hhc093blByb3BlcnR5JyxcbiAgICAgICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJyxcbiAgICAgICd2YWx1ZU9mJywgJ2NoYXJDb2RlQXQnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZicsICdsZW5ndGgnLFxuICAgICAgJ2xvY2FsZUNvbXBhcmUnLCAnbWF0Y2gnLCAncmVwZWF0JywgJ3JlcGxhY2UnLCAnc2VhcmNoJywgJ3NsaWNlJyxcbiAgICAgICdzcGxpdCcsICdzdWJzdHJpbmcnLCAndG9Mb2NhbGVMb3dlckNhc2UnLCAndG9Mb2NhbGVVcHBlckNhc2UnLFxuICAgICAgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJywgJ3RyaW0nLCAndHJpbUxlZnQnLCAndHJpbVJpZ2h0JyxcbiAgICBdO1xuXG4gICAgT2JqZWN0LmtleXModGhlbWUpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgaWYgKHN0cmluZ1Byb3RvdHlwZUJsYWNrbGlzdC5pbmRleE9mKHByb3ApICE9PSAtMSkge1xuICAgICAgICBjb25zb2xlLmxvZygnd2FybjogJy5yZWQgKyAoJ1N0cmluZy5wcm90b3R5cGUnICsgcHJvcCkubWFnZW50YSArXG4gICAgICAgICAgJyBpcyBwcm9iYWJseSBzb21ldGhpbmcgeW91IGRvblxcJ3Qgd2FudCB0byBvdmVycmlkZS4gICcgK1xuICAgICAgICAgICdJZ25vcmluZyBzdHlsZSBuYW1lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mKHRoZW1lW3Byb3BdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb2xvcnNbcHJvcF0gPSBjb2xvcnNbdGhlbWVbcHJvcF1dO1xuICAgICAgICAgIGFkZFByb3BlcnR5KHByb3AsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yc1twcm9wXSh0aGlzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdGhlbWVQcm9wQXBwbGljYXRvciA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICAgICAgdmFyIHJldCA9IHN0ciB8fCB0aGlzO1xuICAgICAgICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0aGVtZVtwcm9wXS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICByZXQgPSBjb2xvcnNbdGhlbWVbcHJvcF1bdF1dKHJldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgIH07XG4gICAgICAgICAgYWRkUHJvcGVydHkocHJvcCwgdGhlbWVQcm9wQXBwbGljYXRvcik7XG4gICAgICAgICAgY29sb3JzW3Byb3BdID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhlbWVQcm9wQXBwbGljYXRvcihzdHIpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbG9ycy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7XG4gICAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjb2xvcnMuc2V0VGhlbWUgbm93IG9ubHkgYWNjZXB0cyBhbiBvYmplY3QsIG5vdCBhIHN0cmluZy4gJyArXG4gICAgICAgICdJZiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYSB0aGVtZSBmcm9tIGEgZmlsZSwgaXQgaXMgbm93IHlvdXIgKHRoZSAnICtcbiAgICAgICAgJ2NhbGxlclxcJ3MpIHJlc3BvbnNpYmlsaXR5IHRvIHJlcXVpcmUgdGhlIGZpbGUuICBUaGUgb2xkIHN5bnRheCAnICtcbiAgICAgICAgJ2xvb2tlZCBsaWtlIGNvbG9ycy5zZXRUaGVtZShfX2Rpcm5hbWUgKyAnICtcbiAgICAgICAgJ1xcJy8uLi90aGVtZXMvZ2VuZXJpYy1sb2dnaW5nLmpzXFwnKTsgVGhlIG5ldyBzeW50YXggbG9va3MgbGlrZSAnK1xuICAgICAgICAnY29sb3JzLnNldFRoZW1lKHJlcXVpcmUoX19kaXJuYW1lICsgJyArXG4gICAgICAgICdcXCcvLi4vdGhlbWVzL2dlbmVyaWMtbG9nZ2luZy5qc1xcJykpOycpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBseVRoZW1lKHRoZW1lKTtcbiAgICB9XG4gIH07XG59O1xuIiwKICAgICJ2YXIgY29sb3JzID0gcmVxdWlyZSgnLi9jb2xvcnMnKTtcbm1vZHVsZVsnZXhwb3J0cyddID0gY29sb3JzO1xuXG4vLyBSZW1hcms6IEJ5IGRlZmF1bHQsIGNvbG9ycyB3aWxsIGFkZCBzdHlsZSBwcm9wZXJ0aWVzIHRvIFN0cmluZy5wcm90b3R5cGUuXG4vL1xuLy8gSWYgeW91IGRvbid0IHdpc2ggdG8gZXh0ZW5kIFN0cmluZy5wcm90b3R5cGUsIHlvdSBjYW4gZG8gdGhpcyBpbnN0ZWFkIGFuZFxuLy8gbmF0aXZlIFN0cmluZyB3aWxsIG5vdCBiZSB0b3VjaGVkOlxuLy9cbi8vICAgdmFyIGNvbG9ycyA9IHJlcXVpcmUoJ0Bjb2xvcnMvY29sb3JzL3NhZmUnKTtcbi8vICAgY29sb3JzLnJlZChcImZvb1wiKVxuLy9cbi8vXG5yZXF1aXJlKCcuL2V4dGVuZFN0cmluZ1Byb3RvdHlwZScpKCk7XG4iLAogICAgImltcG9ydCB7IHJwYywgVHJhbnNhY3Rpb24sIEZlZUJ1bXBUcmFuc2FjdGlvbiwgU3RyS2V5IH0gZnJvbSAnQHN0ZWxsYXIvc3RlbGxhci1zZGsnO1xuaW1wb3J0IHsgQXNzZW1ibGVkVHJhbnNhY3Rpb24sIHR5cGUgQ2xpZW50T3B0aW9ucyB9IGZyb20gJ0BzdGVsbGFyL3N0ZWxsYXItc2RrL2NvbnRyYWN0JztcbmltcG9ydCB7IENvbnRyYWN0U3RvcmUsIFJlc291cmNlVXNhZ2VDbGllbnRJbnN0YW5jZSB9IGZyb20gJ0A1N2Jsb2NrL3N0ZWxsYXItcmVzb3VyY2UtdXNhZ2UnO1xuXG5pbXBvcnQgeyBwcmludFRhYmxlVjIgfSBmcm9tICdAL3NoYXJlJztcbmltcG9ydCB7IGhhbmRsZVR4VG9HZXRTdGF0cyB9IGZyb20gJ0AvdGFza3MnO1xuaW1wb3J0IHsgdXBkYXRlVHhMaW1pdHMsIHdpdGhFeHBvbmVudGlhbEJhY2tvZmYgfSBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IFNURUxMQVJfTElNSVRTX0NPTkZJRyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW50ZXJmYWNlIEhhc2hNYXBWYWx1ZSB7XG4gIHNlbmRUeFJlczogcnBjLkFwaS5TZW5kVHJhbnNhY3Rpb25SZXNwb25zZTtcbiAgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uIHwgRmVlQnVtcFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkO1xuICBzaW1UeFJlczogcnBjLkFwaS5TaW11bGF0ZVRyYW5zYWN0aW9uUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgY2xhc3MgU3RlbGxhclJwY1NlcnZlciBleHRlbmRzIHJwYy5TZXJ2ZXIge1xuICAjaGFzaDogTWFwPHN0cmluZywgSGFzaE1hcFZhbHVlPiA9IG5ldyBNYXAoKTtcbiAgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uIHwgRmVlQnVtcFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkO1xuICBzaW1UeFJlczogcnBjLkFwaS5TaW11bGF0ZVRyYW5zYWN0aW9uUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4gIHN0b3JlZFN0YXRzOiBDb250cmFjdFN0b3JlID0ge307XG4gIGNvbnN0cnVjdG9yKHNlcnZlclVSTDogc3RyaW5nLCBvcHRzPzogcnBjLlNlcnZlci5PcHRpb25zKSB7XG4gICAgc3VwZXIoc2VydmVyVVJMLCBvcHRzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludFRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHR4UHJvbWlzZXMgPSBBcnJheS5mcm9tKHRoaXMuI2hhc2gpLm1hcCgoW2hhc2hdKSA9PiB7XG4gICAgICByZXR1cm4gd2l0aEV4cG9uZW50aWFsQmFja29mZjxycGMuQXBpLkdldFRyYW5zYWN0aW9uUmVzcG9uc2U+KFxuICAgICAgICAoKSA9PiBzdXBlci5nZXRUcmFuc2FjdGlvbihoYXNoKSxcbiAgICAgICAgKHJlc3ApID0+IHJlc3Auc3RhdHVzID09PSBycGMuQXBpLkdldFRyYW5zYWN0aW9uU3RhdHVzLk5PVF9GT1VORCxcbiAgICAgICAgMTBcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFsbERhdGEgPSBhd2FpdCBQcm9taXNlLmFsbCh0eFByb21pc2VzKTtcbiAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBzdWNjZXNzRGF0dW0gPSBkYXRhLmZpbmQoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5zdGF0dXMgPT09IHJwYy5BcGkuR2V0VHJhbnNhY3Rpb25TdGF0dXMuU1VDQ0VTUyk7XG4gICAgICAgIGlmIChzdWNjZXNzRGF0dW0pIHtcbiAgICAgICAgICBjb25zdCB7IHNpbVR4UmVzLCB0cmFuc2FjdGlvbiB9ID0gdGhpcy4jaGFzaC5nZXQoc3VjY2Vzc0RhdHVtLnR4SGFzaCkhO1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gaGFuZGxlVHhUb0dldFN0YXRzKHNpbVR4UmVzIGFzIHJwYy5BcGkuU2ltdWxhdGVUcmFuc2FjdGlvblN1Y2Nlc3NSZXNwb25zZSwgc3VjY2Vzc0RhdHVtKTtcbiAgICAgICAgICB0aGlzLnN0b3JlVHJhbnNhY3Rpb25TdGF0cyh0cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbiwgc3RhdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gZ2V0IHRyYW5zYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGdldCB0cmFuc2FjdGlvbnMnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5zdG9yZWRTdGF0cykuZm9yRWFjaCgoY29udHJhY3RJZCkgPT4ge1xuICAgICAgcHJpbnRUYWJsZVYyKGNvbnRyYWN0SWQsIHRoaXMuc3RvcmVkU3RhdHMpO1xuICAgIH0pO1xuICAgIHRoaXMuI2hhc2guY2xlYXIoKTtcbiAgICB0aGlzLnN0b3JlZFN0YXRzID0ge307XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2ltdWxhdGVUcmFuc2FjdGlvbihcbiAgICB0eDogVHJhbnNhY3Rpb24gfCBGZWVCdW1wVHJhbnNhY3Rpb24sXG4gICAgcmVzb3VyY2VMZWV3YXk/OiBycGMuU2VydmVyLlJlc291cmNlTGVld2F5XG4gICk6IFByb21pc2U8cnBjLkFwaS5TaW11bGF0ZVRyYW5zYWN0aW9uUmVzcG9uc2U+IHtcbiAgICBjb25zdCBzaW1UeFJlc3BvbnNlID0gYXdhaXQgc3VwZXIuc2ltdWxhdGVUcmFuc2FjdGlvbih0eCwgcmVzb3VyY2VMZWV3YXkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLnNpbVR4UmVzID0gc2ltVHhSZXNwb25zZTtcbiAgICByZXR1cm4gc2ltVHhSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZW5kVHJhbnNhY3Rpb24oXG4gICAgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uIHwgRmVlQnVtcFRyYW5zYWN0aW9uXG4gICk6IFByb21pc2U8cnBjLkFwaS5TZW5kVHJhbnNhY3Rpb25SZXNwb25zZT4ge1xuICAgIGNvbnN0IHNlbmRUeFJlcyA9IGF3YWl0IHN1cGVyLnNlbmRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7XG4gICAgdGhpcy4jaGFzaC5zZXQoc2VuZFR4UmVzLmhhc2gsIHsgc2VuZFR4UmVzLCB0cmFuc2FjdGlvbjogdGhpcy50cmFuc2FjdGlvbiwgc2ltVHhSZXM6IHRoaXMuc2ltVHhSZXMgfSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNpbVR4UmVzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzZW5kVHhSZXM7XG4gIH1cblxuICBwdWJsaWMgc3RvcmVUcmFuc2FjdGlvblN0YXRzKFxuICAgIHR4OiBUcmFuc2FjdGlvbiB8IEZlZUJ1bXBUcmFuc2FjdGlvbixcbiAgICBzdGF0czogUmVjb3JkPGtleW9mIHR5cGVvZiBTVEVMTEFSX0xJTUlUU19DT05GSUcsIG51bWJlciB8IHVuZGVmaW5lZD5cbiAgKSB7XG4gICAgdHgub3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24pID0+IHtcbiAgICAgIC8vIEEgdHggY2FuIG9ubHkgcGVyZm9ybSAxIGludm9rZUhvc3RGdW5jdGlvbiBvcGVyYXRpb24gYXQgbW9zdC5cbiAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2ludm9rZUhvc3RGdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgY29udHJhY3RJZDogc3RyaW5nID0gU3RyS2V5LmVuY29kZUNvbnRyYWN0KFxuICAgICAgICAgIChvcGVyYXRpb24gYXMgYW55KS5mdW5jLmludm9rZUNvbnRyYWN0KCkuY29udHJhY3RBZGRyZXNzKCkudmFsdWUoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmdW5jTmFtZTogc3RyaW5nID0gKG9wZXJhdGlvbiBhcyBhbnkpLmZ1bmMuaW52b2tlQ29udHJhY3QoKS5mdW5jdGlvbk5hbWUoKTtcblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmVkU3RhdHNbY29udHJhY3RJZF0pIHtcbiAgICAgICAgICB0aGlzLnN0b3JlZFN0YXRzW2NvbnRyYWN0SWRdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnN0b3JlZFN0YXRzW2NvbnRyYWN0SWRdW2Z1bmNOYW1lXSkge1xuICAgICAgICAgIHRoaXMuc3RvcmVkU3RhdHNbY29udHJhY3RJZF1bZnVuY05hbWVdID0gW3N0YXRzXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3JlZFN0YXRzW2NvbnRyYWN0SWRdW2Z1bmNOYW1lXS5wdXNoKHN0YXRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IENPTlNUUlVDVE9SX0ZVTkMgPSAnX19jb25zdHJ1Y3Rvcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBSZXNvdXJjZVVzYWdlQ2xpZW50PFQ+KENsaWVudDogYW55LCBvcHRpb25zOiBDbGllbnRPcHRpb25zKSB7XG4gIGF3YWl0IHVwZGF0ZVR4TGltaXRzKCk7XG4gIGNsYXNzIFJlc291cmNlVXNhZ2UgZXh0ZW5kcyBDbGllbnQge1xuICAgIGNvbnRyYWN0SWQ6IHN0cmluZztcbiAgICBzdG9yZWRTdGF0czogQ29udHJhY3RTdG9yZSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgaWYgKCFvcHRpb25zLmNvbnRyYWN0SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb250cmFjdElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG4gICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgIHRoaXMuY29udHJhY3RJZCA9IG9wdGlvbnMuY29udHJhY3RJZDtcbiAgICAgIGNvbnN0IGNvbnRyYWN0RnVuTmFtZXMgPSB0aGlzLnNwZWMuZnVuY3MoKS5tYXAoKGZ1bjogYW55KSA9PiBmdW4ubmFtZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgZm9yIChjb25zdCBmdW5OYW1lIG9mIGNvbnRyYWN0RnVuTmFtZXMpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGdW4gPSB0aGlzW2Z1bk5hbWVdO1xuICAgICAgICBpZiAoZnVuTmFtZSA9PT0gQ09OU1RSVUNUT1JfRlVOQykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW2Z1bk5hbWVdID0gYXN5bmMgKC4uLmFyZ3M6IGFueSk6IFByb21pc2U8QXNzZW1ibGVkVHJhbnNhY3Rpb248YW55Pj4gPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhc3NlbWJsZWRUeCA9IGF3YWl0IG9yaWdpbmFsRnVuKC4uLmFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYXNzZW1ibGVkVHgsXG4gICAgICAgICAgICAgIHNpZ25BbmRTZW5kOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXNzZW1ibGVkVHguc2lnbkFuZFNlbmQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGhhbmRsZVR4VG9HZXRTdGF0cyhhc3NlbWJsZWRUeCBhcyBhbnksIHJlcy5nZXRUcmFuc2FjdGlvblJlc3BvbnNlIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0b3JlZFN0YXRzW3RoaXMuY29udHJhY3RJZF0pIHtcbiAgICAgICAgICAgICAgICAgIC8vIGluaXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlZFN0YXRzW3RoaXMuY29udHJhY3RJZF0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0b3JlZFN0YXRzW3RoaXMuY29udHJhY3RJZF1bZnVuTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIC8vIGluaXQgYXJyYXlcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVkU3RhdHNbdGhpcy5jb250cmFjdElkXVtmdW5OYW1lXSA9IFtzdGF0c107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVkU3RhdHNbdGhpcy5jb250cmFjdElkXVtmdW5OYW1lXS5wdXNoKHN0YXRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5jb250cmFjdElkID0gb3B0aW9ucy5jb250cmFjdElkO1xuICAgIH1cbiAgICBwcmludFRhYmxlKCkge1xuICAgICAgY29uc3Qgc3RvcmVEYXRhID0gdGhpcy5zdG9yZWRTdGF0cztcbiAgICAgIHByaW50VGFibGVWMih0aGlzLmNvbnRyYWN0SWQsIHN0b3JlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVzb3VyY2VVc2FnZSgpIGFzIHVua25vd24gYXMgVCAmIFJlc291cmNlVXNhZ2VDbGllbnRJbnN0YW5jZTtcbn1cbiIsCiAgICAiaW1wb3J0IENsaVRhYmxlMyBmcm9tICdjbGktdGFibGUzJztcbmltcG9ydCBDb2xvcnMgZnJvbSAnQGNvbG9ycy9jb2xvcnMnO1xuaW1wb3J0IHsgQ29udHJhY3RTdG9yZSwgTWV0cmljU3RhdGlzdGljcywgUmVzb3VyY2VNZXRyaWNLZXlzLCBSZXN1bHRTdGF0aXN0aWNzIH0gZnJvbSAnQDU3YmxvY2svc3RlbGxhci1yZXNvdXJjZS11c2FnZSc7XG5cbmltcG9ydCB7IFNURUxMQVJfTElNSVRTX0NVUlNPUlMgfSBmcm9tICdAL3R5cGVzL2VudW1zJztcbmltcG9ydCB7IE1ldHJpY0tleXMsIFNURUxMQVJfTElNSVRTX0NPTkZJRyB9IGZyb20gJ0AvY29uc3RhbnRzJztcblxuY29uc3QgY2FsY1N0YXRpc3RpY3MgPSAoc3RvcmU6IENvbnRyYWN0U3RvcmUpID0+IHtcbiAgY29uc3QgcmVzOiBhbnkgPSB7fTtcbiAgY29uc3QgbWV0cmljS2V5czogUmVzb3VyY2VNZXRyaWNLZXlzW10gPSBbXG4gICAgJ2NwdV9pbnNucycsXG4gICAgJ21lbV9ieXRlcycsXG4gICAgJ2VudHJ5X2J5dGVzJyxcbiAgICAnZW50cnlfcmVhZHMnLFxuICAgICdlbnRyeV93cml0ZXMnLFxuICAgICdyZWFkX2J5dGVzJyxcbiAgICAnd3JpdGVfYnl0ZXMnLFxuICAgICdtaW5fdHhuX2J5dGVzJyxcbiAgXTtcblxuICBPYmplY3QuZW50cmllcyhzdG9yZSkuZm9yRWFjaCgoW2NvbnRyYWN0TmFtZSwgZnVuY3NdKSA9PiB7XG4gICAgcmVzW2NvbnRyYWN0TmFtZV0gPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhmdW5jcykuZm9yRWFjaCgoW2Z1bmNOYW1lLCBkYXRhXSkgPT4ge1xuICAgICAgY29uc3QgdGltZXMgPSBkYXRhLmxlbmd0aDtcblxuICAgICAgbWV0cmljS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhWzBdW2tleV0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgbGV0IG1heCA9IGRhdGFbMF1ba2V5XTtcbiAgICAgICAgbGV0IG1pbiA9IGRhdGFbMF1ba2V5XTtcblxuICAgICAgICBkYXRhLmZvckVhY2goKG1ldHJpYykgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWV0cmljW2tleV0gfHwgMDtcbiAgICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGF2ZyA9IHN1bSAvIHRpbWVzO1xuXG4gICAgICAgIGlmICghcmVzW2NvbnRyYWN0TmFtZV0pIHtcbiAgICAgICAgICByZXNbY29udHJhY3ROYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzW2NvbnRyYWN0TmFtZV1bZnVuY05hbWVdKSB7XG4gICAgICAgICAgcmVzW2NvbnRyYWN0TmFtZV1bZnVuY05hbWVdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXNbY29udHJhY3ROYW1lXVtmdW5jTmFtZV1ba2V5XSA9IHsgYXZnLCBtYXgsIG1pbiwgc3VtIH07XG4gICAgICB9KTtcblxuICAgICAgcmVzW2NvbnRyYWN0TmFtZV1bZnVuY05hbWVdLnRpbWVzID0gdGltZXM7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZFRhYmxlRGF0YVYyID0gKHN0YXRpc3RpY3M6IFJlc3VsdFN0YXRpc3RpY3MpID0+IHtcbiAgY29uc3QgcmVzOiB7XG4gICAgZnVuYzogc3RyaW5nO1xuICAgIHRpbWVzOiBudW1iZXI7XG4gICAgZGF0YTogKHN0cmluZyB8IG51bWJlcilbXVtdO1xuICB9W10gPSBbXTtcbiAgT2JqZWN0LmVudHJpZXMoc3RhdGlzdGljcykuZm9yRWFjaCgoW18sIGZ1bmNzXSkgPT4ge1xuICAgIE9iamVjdC5lbnRyaWVzKGZ1bmNzKS5mb3JFYWNoKChbZnVuYywgZGF0YV0pID0+IHtcbiAgICAgIGNvbnN0IHRpbWVzID0gZGF0YS50aW1lcztcbiAgICAgIGNvbnN0IHRyRGF0YTogKHN0cmluZyB8IG51bWJlcilbXVtdID0gW107XG4gICAgICBNZXRyaWNLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoIWRhdGFba2V5XSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGF2ZywgbWF4LCBtaW4sIHN1bSB9ID0gZGF0YVtrZXldIGFzIE1ldHJpY1N0YXRpc3RpY3M7XG4gICAgICAgIGNvbnN0IGxpbWl0YXRpb24gPSBTVEVMTEFSX0xJTUlUU19DT05GSUdba2V5IGFzIGtleW9mIHR5cGVvZiBTVEVMTEFSX0xJTUlUU19DT05GSUddLnZhbHVlO1xuICAgICAgICB0ckRhdGEucHVzaChba2V5LCBsaW1pdGF0aW9uLCBhdmcsIG1heCwgbWluLCBzdW1dKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLnB1c2goe1xuICAgICAgICBmdW5jLFxuICAgICAgICB0aW1lcyxcbiAgICAgICAgZGF0YTogdHJEYXRhLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcHJpbnRUYWJsZVYyID0gKGNvbnRyYWN0SWQ6IHN0cmluZywgc3RvcmU6IENvbnRyYWN0U3RvcmUpID0+IHtcbiAgLy8gcHJpbnRUYWJsZUluZm8oKTtcbiAgY29uc3QgY2xpVGFibGUgPSBuZXcgQ2xpVGFibGUzKHtcbiAgICBzdHlsZTogeyBoZWFkOiBbXSwgYm9yZGVyOiBbXSB9LFxuICB9KTtcbiAgY2xpVGFibGUucHVzaChbXG4gICAge1xuICAgICAgY29sU3BhbjogNixcbiAgICAgIGNvbnRlbnQ6IENvbG9ycy5icmlnaHRDeWFuLmJvbGQoJ1Jlc291cmNlIFVzYWdlIFRhYmxlJyksXG4gICAgICBoQWxpZ246ICdjZW50ZXInLFxuICAgIH0sXG4gIF0pO1xuICBjb25zdCBsYWJlbFRyID0gW1xuICAgIHsgY29udGVudDogQ29sb3JzLmJyaWdodEN5YW4uYm9sZCgnSGlnaGxpZ2ggQ29sb3InKSwgY29sU3BhbjogMiB9LFxuICAgIHtcbiAgICAgIGNvbnRlbnQ6IENvbG9ycy5icmlnaHRZZWxsb3cuYm9sZChcbiAgICAgICAgYFdhcm5pbmc6ICR7U1RFTExBUl9MSU1JVFNfQ1VSU09SUy5EQU5HRVIgKiAxMDB9JSAtICR7U1RFTExBUl9MSU1JVFNfQ1VSU09SUy5FUlJPUiAqIDEwMH0lYFxuICAgICAgKSxcbiAgICAgIGNvbFNwYW46IDIsXG4gICAgfSxcbiAgICB7IGNvbnRlbnQ6IENvbG9ycy5icmlnaHRSZWQuYm9sZChgRXJyb3I6IE92ZXIgJHtTVEVMTEFSX0xJTUlUU19DVVJTT1JTLkVSUk9SICogMTAwfSVgKSwgY29sU3BhbjogMiB9LFxuICBdO1xuICBjb25zdCBjb250cmFjdFRyID0gW1xuICAgIHsgY29udGVudDogQ29sb3JzLmJyaWdodEN5YW4uYm9sZCgnQ29udHJhY3QnKSwgY29sU3BhbjogMiB9LFxuICAgIHsgY29udGVudDogY29udHJhY3RJZCwgY29sU3BhbjogNCB9LFxuICBdO1xuICBjbGlUYWJsZS5wdXNoKGxhYmVsVHIpO1xuICBjbGlUYWJsZS5wdXNoKGNvbnRyYWN0VHIpO1xuICBjb25zdCBzdGF0aXN0aWNzID0gY2FsY1N0YXRpc3RpY3Moc3RvcmUpO1xuICBjb25zdCByZXMgPSBsb2FkVGFibGVEYXRhVjIoc3RhdGlzdGljcyk7XG4gIHJlcy5mb3JFYWNoKCh7IGZ1bmMsIHRpbWVzLCBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBmdW5jVHIgPSBbXG4gICAgICBDb2xvcnMuYnJpZ2h0Q3lhbi5ib2xkKCdGdW5jdGlvbicpLFxuICAgICAge1xuICAgICAgICBjb250ZW50OiBmdW5jLFxuICAgICAgICBjb2xTcGFuOiAyLFxuICAgICAgfSxcbiAgICAgIENvbG9ycy5icmlnaHRDeWFuLmJvbGQoJ1RpbWVzJyksXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnQ6IHRpbWVzLFxuICAgICAgICBjb2xTcGFuOiAyLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNsaVRhYmxlLnB1c2goZnVuY1RyKTtcbiAgICBjb25zdCBmdW5jdGlvblRhYmxlSGVhZCA9IFsnUmVzb3VyY2UnLCAnTGltaXRhdGlvbicsICdBdmcnLCAnTWF4JywgJ01pbicsICdTdW0nXS5tYXAoKGl0ZW0pID0+XG4gICAgICBDb2xvcnMuYnJpZ2h0Q3lhbi5ib2xkKGl0ZW0pXG4gICAgKTtcbiAgICBjbGlUYWJsZS5wdXNoKGZ1bmN0aW9uVGFibGVIZWFkKTtcbiAgICBkYXRhLmZvckVhY2goKFtrZXksIGxpbWl0YXRpb24sIGF2ZywgbWF4LCBtaW4sIHN1bV0pID0+IHtcbiAgICAgIGNvbnN0IGF2ZXJhZ2UgPSBmb3JtYXRUYWJsZUNlbGwoYXZnLCBsaW1pdGF0aW9uKTtcbiAgICAgIGNvbnN0IG1heGltdW0gPSBmb3JtYXRUYWJsZUNlbGwobWF4LCBsaW1pdGF0aW9uKTtcbiAgICAgIGNvbnN0IG1pbmltdW0gPSBmb3JtYXRUYWJsZUNlbGwobWluLCBsaW1pdGF0aW9uKTtcbiAgICAgIGNsaVRhYmxlLnB1c2goW0NvbG9ycy5icmlnaHRDeWFuLmJvbGQoa2V5IGFzIHN0cmluZyksIGxpbWl0YXRpb24sIGF2ZXJhZ2UsIG1heGltdW0sIG1pbmltdW0sIHN1bV0pO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc29sZS5sb2coY2xpVGFibGUudG9TdHJpbmcoKSk7XG59O1xuXG5jb25zdCBmb3JtYXRUYWJsZUNlbGwgPSAoY2VsbFZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIGxpbWl0OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgLy8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlXG4gIGNvbnN0IHBlcmNlbnQgPSBwYXJzZUZsb2F0KCgoTnVtYmVyKGNlbGxWYWx1ZSkgLyBOdW1iZXIobGltaXQpKSAqIDEwMCkudG9GaXhlZCgyKSk7XG4gIC8vIHNldCB0aGUgY29sb3IgYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2VcbiAgY29uc3QgaXNEYW5nZXIgPSBwZXJjZW50ID4gU1RFTExBUl9MSU1JVFNfQ1VSU09SUy5EQU5HRVIgKiAxMDA7XG4gIGNvbnN0IGlzRXJyb3IgPSBwZXJjZW50ID4gU1RFTExBUl9MSU1JVFNfQ1VSU09SUy5FUlJPUiAqIDEwMDtcblxuICBpZiAoaXNFcnJvcikge1xuICAgIHJldHVybiBDb2xvcnMuYnJpZ2h0UmVkLmJvbGQoY2VsbFZhbHVlLnRvU3RyaW5nKCkpO1xuICB9XG4gIGlmIChpc0Rhbmdlcikge1xuICAgIHJldHVybiBDb2xvcnMuYnJpZ2h0WWVsbG93LmJvbGQoY2VsbFZhbHVlLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBjZWxsVmFsdWU7XG59O1xuIiwKICAgICJleHBvcnQgY29uc3QgU1RFTExBUl9MSU1JVFNfQ09ORklHID0ge1xuICAvLyBNZW1vcnkgbGltaXQgcGVyIHR4blxuICBtZW1fYnl0ZXM6IHtcbiAgICB2YWx1ZTogNDAgKiAxMDI0ICogMTAyNCxcbiAgICB1bml0OiAnYnl0ZXMnLFxuICAgIGxhYmVsOiAnNDAgTUInLFxuICB9LFxuICAvLyBNYXggQ1BVIGluc3RydWN0aW9ucyBwZXIgdHhuXG4gIGNwdV9pbnNuczoge1xuICAgIHZhbHVlOiAxMDAgKiAxMDAwMDAwLFxuICAgIHVuaXQ6ICdieXRlcycsXG4gICAgbGFiZWw6ICcxMDAgTWlsbGlvbicsXG4gIH0sXG4gIC8vIFJlYWQgbGVkZ2VyIGVudHJpZXMgcGVyIHR4blxuICBlbnRyeV9yZWFkczoge1xuICAgIHZhbHVlOiA0MCxcbiAgICB1bml0OiAnY291bnQnLFxuICAgIGxhYmVsOiAnNDAnLFxuICB9LFxuICAvLyBXcml0ZSBsZWRnZXIgZW50cmllcyBwZXIgdHhuXG4gIGVudHJ5X3dyaXRlczoge1xuICAgIHZhbHVlOiAyNSxcbiAgICB1bml0OiAnY291bnQnLFxuICAgIGxhYmVsOiAnMjUnLFxuICB9LFxuICAvLyBSZWFkIGJ5dGVzIHBlciB0eG5cbiAgcmVhZF9ieXRlczoge1xuICAgIHZhbHVlOiAyMDAgKiAxMDI0LFxuICAgIHVuaXQ6ICdieXRlcycsXG4gICAgbGFiZWw6ICcyMDAgS0InLFxuICB9LFxuICAvLyBXcml0ZSBieXRlcyBwZXIgdHhuXG4gIHdyaXRlX2J5dGVzOiB7XG4gICAgdmFsdWU6IDEyOSAqIDEwMjQsXG4gICAgdW5pdDogJ2J5dGVzJyxcbiAgICBsYWJlbDogJzEyOSBLQicsXG4gIH0sXG4gIC8qKlxuICAgKiAgTGVkZ2VyIGVudHJ5IHNpemUgKGluY2x1ZGluZyBXYXNtIGVudHJpZXMpIHBlciB0eG5cbiAgICogIPCfk6JBY3R1YWxseSwgdGhpcyBsaW1pdCBpcyB0aGUgbWF4IHNpbmdsZSBsZWRnZXIgZW50cnkgc2l6ZS5cbiAgICogIFlvdSBjYW4gd3JpdGUgMjUga2V5cyB3aXRoIGEgc3VtIHRvdGFsIHNpemUgb2YgMTI5IEtCIGFuZCBhIHNpbmdsZSBrZXkgbWF4IG9mIDEyOCBLQlxuICAgKiAgKi9cbiAgZW50cnlfYnl0ZXM6IHtcbiAgICB2YWx1ZTogMTI4ICogMTAyNCxcbiAgICB1bml0OiAnYnl0ZXMnLFxuICAgIGxhYmVsOiAnMTI4IEtCJyxcbiAgfSxcbiAgLy8gVHJhbnNhY3Rpb24gc2l6ZVxuICBtaW5fdHhuX2J5dGVzOiB7XG4gICAgdmFsdWU6IDEyOSAqIDEwMjQsXG4gICAgdW5pdDogJ2J5dGVzJyxcbiAgICBsYWJlbDogJzEyOSBLQicsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgVVBEQVRFX1NURUxMQVJfTElNSVRTX0NPTkZJRyA9IChsaW1pdHM6IFJlY29yZDxzdHJpbmcsIHsgW2tleTogc3RyaW5nXTogYW55IH0+KSA9PiB7XG4gIHJldHVybiB7IC4uLlNURUxMQVJfTElNSVRTX0NPTkZJRywgLi4ubGltaXRzIH07XG59O1xuXG5leHBvcnQgY29uc3QgTWV0cmljS2V5cyA9IFtcbiAgJ2NwdV9pbnNucycsXG4gICdtZW1fYnl0ZXMnLFxuICAnZW50cnlfYnl0ZXMnLFxuICAnZW50cnlfcmVhZHMnLFxuICAnZW50cnlfd3JpdGVzJyxcbiAgJ3JlYWRfYnl0ZXMnLFxuICAnd3JpdGVfYnl0ZXMnLFxuICAnbWluX3R4bl9ieXRlcycsXG5dO1xuIiwKICAgICJpbXBvcnQgeyBycGMsIHNjVmFsVG9OYXRpdmUgfSBmcm9tICdAc3RlbGxhci9zdGVsbGFyLXNkayc7XG5pbXBvcnQgeyBBc3NlbWJsZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdGVsbGFyL3N0ZWxsYXItc2RrL2NvbnRyYWN0JztcblxuaW1wb3J0IHsgU1RFTExBUl9MSU1JVFNfQ09ORklHIH0gZnJvbSAnQC9jb25zdGFudHMnO1xuXG5jb25zdCBpc1NpbVR4ID0gKFxuICB0eDogcnBjLkFwaS5TaW11bGF0ZVRyYW5zYWN0aW9uU3VjY2Vzc1Jlc3BvbnNlIHwgQXNzZW1ibGVkVHJhbnNhY3Rpb248bnVsbD5cbik6IHR4IGlzIHJwYy5BcGkuU2ltdWxhdGVUcmFuc2FjdGlvblN1Y2Nlc3NSZXNwb25zZSA9PiB7XG4gIHJldHVybiAndHJhbnNhY3Rpb25EYXRhJyBpbiB0eDtcbn07XG5leHBvcnQgY29uc3QgaGFuZGxlVHhUb0dldFN0YXRzID0gKFxuICB0eDogcnBjLkFwaS5TaW11bGF0ZVRyYW5zYWN0aW9uU3VjY2Vzc1Jlc3BvbnNlIHwgQXNzZW1ibGVkVHJhbnNhY3Rpb248bnVsbD4sXG4gIHN1Y2Nlc3NmdWxUeDogcnBjLkFwaS5HZXRTdWNjZXNzZnVsVHJhbnNhY3Rpb25SZXNwb25zZVxuKTogUmVjb3JkPGtleW9mIHR5cGVvZiBTVEVMTEFSX0xJTUlUU19DT05GSUcsIG51bWJlciB8IHVuZGVmaW5lZD4gPT4ge1xuICBsZXQgcmVzb3VyY2VzO1xuICBpZiAoaXNTaW1UeCh0eCkpIHtcbiAgICByZXNvdXJjZXMgPSB0eC50cmFuc2FjdGlvbkRhdGEuYnVpbGQoKS5yZXNvdXJjZXMoKTtcbiAgfSBlbHNlIHtcbiAgICByZXNvdXJjZXMgPSB0eC5zaW11bGF0aW9uRGF0YS50cmFuc2FjdGlvbkRhdGEucmVzb3VyY2VzKCk7XG4gIH1cbiAgY29uc3QgZm9vdHByaW50ID0gcmVzb3VyY2VzLmZvb3RwcmludCgpO1xuXG4gIGNvbnN0IG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHVuZGVmaW5lZD4gPSB7XG4gICAgY3B1X2luc246IHVuZGVmaW5lZCxcbiAgICBtZW1fYnl0ZTogdW5kZWZpbmVkLFxuICAgIGxlZGdlcl9yZWFkX2J5dGU6IHVuZGVmaW5lZCxcbiAgICBsZWRnZXJfd3JpdGVfYnl0ZTogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHN1Y2Nlc3NmdWxUeC5yZXN1bHRNZXRhWGRyXG4gICAgLnYzKClcbiAgICAuc29yb2Jhbk1ldGEoKVxuICAgID8uZGlhZ25vc3RpY0V2ZW50cygpXG4gICAgLmZvckVhY2goKGUpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50Qm9keSA9IGUuZXZlbnQoKS5ib2R5KCkudjAoKTtcbiAgICAgIGNvbnN0IHRvcGljcyA9IGV2ZW50Qm9keS50b3BpY3MoKS5tYXAoc2NWYWxUb05hdGl2ZSk7XG5cbiAgICAgIGlmICghdG9waWNzLmluY2x1ZGVzKCdjb3JlX21ldHJpY3MnKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBtYXRjaGVkTWV0cmljID0gT2JqZWN0LmtleXMobWV0cmljcykuZmluZCgobWV0cmljKSA9PiB0b3BpY3MuaW5jbHVkZXMobWV0cmljKSk7XG4gICAgICBpZiAobWF0Y2hlZE1ldHJpYykge1xuICAgICAgICBtZXRyaWNzW21hdGNoZWRNZXRyaWNdID0gTnVtYmVyKHNjVmFsVG9OYXRpdmUoZXZlbnRCb2R5LmRhdGEoKSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnN0IGVudHJpZXMgPSBzdWNjZXNzZnVsVHgucmVzdWx0TWV0YVhkclxuICAgIC52MygpXG4gICAgLm9wZXJhdGlvbnMoKVxuICAgIC5mbGF0TWFwKChvcCkgPT5cbiAgICAgIG9wLmNoYW5nZXMoKS5mbGF0TWFwKChjaGFuZ2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChjaGFuZ2Uuc3dpdGNoKCkubmFtZSkge1xuICAgICAgICAgIGNhc2UgJ2xlZGdlckVudHJ5Q3JlYXRlZCc6XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlLmNyZWF0ZWQoKS5kYXRhKCkudmFsdWUoKS50b1hEUigpLmxlbmd0aDtcbiAgICAgICAgICBjYXNlICdsZWRnZXJFbnRyeVVwZGF0ZWQnOlxuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZS51cGRhdGVkKCkuZGF0YSgpLnZhbHVlKCkudG9YRFIoKS5sZW5ndGg7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgY29uc3QgZW50cnlTaXplID0gTWF0aC5tYXgoLi4uZW50cmllcykgPz8gMDtcbiAgcmV0dXJuIHtcbiAgICBjcHVfaW5zbnM6IG1ldHJpY3MuY3B1X2luc24sXG4gICAgbWVtX2J5dGVzOiBtZXRyaWNzLm1lbV9ieXRlLFxuICAgIGVudHJ5X2J5dGVzOiBlbnRyeVNpemUsXG4gICAgZW50cnlfcmVhZHM6IGZvb3RwcmludC5yZWFkT25seSgpLmxlbmd0aCxcbiAgICBlbnRyeV93cml0ZXM6IGZvb3RwcmludC5yZWFkV3JpdGUoKS5sZW5ndGgsXG4gICAgcmVhZF9ieXRlczogcmVzb3VyY2VzLnJlYWRCeXRlcygpLFxuICAgIHdyaXRlX2J5dGVzOiByZXNvdXJjZXMud3JpdGVCeXRlcygpLFxuICAgIG1pbl90eG5fYnl0ZXM6IHN1Y2Nlc3NmdWxUeC5lbnZlbG9wZVhkci50b1hEUigpLmxlbmd0aCxcbiAgfTtcbn07XG4iLAogICAgImV4cG9ydCBjb25zdCBnZXRQcm90b2NvbEhpc3RvcnkgPSBhc3luYyAobmV0d29yazogJ3B1YmxpYycgfCAndGVzdG5ldCcgPSAncHVibGljJykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXBpLnN0ZWxsYXIuZXhwZXJ0L2V4cGxvcmVyLyR7bmV0d29ya30vbGVkZ2VyL3Byb3RvY29sLWhpc3RvcnlgKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gIH1cbn07XG4iLAogICAgImltcG9ydCB7IHRyYW5zZm9ybSwgaXNPYmplY3QsIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBTVEVMTEFSX0xJTUlUU19DT05GSUcsIFVQREFURV9TVEVMTEFSX0xJTUlUU19DT05GSUcgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0UHJvdG9jb2xIaXN0b3J5IH0gZnJvbSAnQC9hcGkvc3RlbGxhcic7XG5cbi8vIFRoaXMgdGltZSBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgaW4gdGhlIFNURUxMQVJfTElNSVRTX0NPTkZJR1xubGV0IFRJTUVTVEFNUCA9IDE3MzU1MzczMTc0MTk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUeExpbWl0cyA9IGFzeW5jICgpID0+IHtcbiAgaWYgKERhdGUubm93KCkgLSBUSU1FU1RBTVAgPCA2MCAqIDYwICogMTAwMCkgcmV0dXJuO1xuICBUSU1FU1RBTVAgPSBEYXRlLm5vdygpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFByb3RvY29sSGlzdG9yeSgpO1xuICAgIGNvbnN0IGZsYXR0ZW5EYXRhID0gZGF0YS5tYXAoKGhpc3Rvcnk6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlck9iamVjdChoaXN0b3J5LmNvbmZpZ19jaGFuZ2VzLCBbJ2NvbnRyYWN0Q29tcHV0ZScsICdjb250cmFjdExlZGdlckNvc3QnLCAnY29udHJhY3RCYW5kd2lkdGgnXSk7XG4gICAgfSk7XG4gICAgY29uc3QgY29udHJhY3RMaW1pdERhdGEgPSBmbGF0dGVuRGF0YS5yZXZlcnNlKCkucmVkdWNlKChmaW5hbDogUmVjb3JkPHN0cmluZywgYW55PiwgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PikgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uZmluYWwsIC4uLml0ZW0gfTtcbiAgICB9LCB7fSk7XG4gICAgLy8gVE9ETzogZGlkbid0IHVwZGF0ZSBsYWJlbCwgYmVjYXVzZSBpdCBtYXkgYmUgZGVsZXRlZC5cbiAgICBjb25zdCB0eExpbWl0cyA9IHtcbiAgICAgIC4uLlNURUxMQVJfTElNSVRTX0NPTkZJRyxcbiAgICAgIGNwdV9pbnNuczoge1xuICAgICAgICAuLi5TVEVMTEFSX0xJTUlUU19DT05GSUcuY3B1X2luc25zLFxuICAgICAgICB2YWx1ZTogY29udHJhY3RMaW1pdERhdGEuY29udHJhY3RDb21wdXRlLnR4TWF4SW5zdHJ1Y3Rpb25zID8/IFNURUxMQVJfTElNSVRTX0NPTkZJRy5jcHVfaW5zbnMudmFsdWUsXG4gICAgICB9LFxuICAgICAgbWVtX2J5dGVzOiB7XG4gICAgICAgIC4uLlNURUxMQVJfTElNSVRTX0NPTkZJRy5tZW1fYnl0ZXMsXG4gICAgICAgIHZhbHVlOiBjb250cmFjdExpbWl0RGF0YS5jb250cmFjdExlZGdlckNvc3QudHhNZW1vcnlMaW1pdCA/PyBTVEVMTEFSX0xJTUlUU19DT05GSUcubWVtX2J5dGVzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgIGVudHJ5X3JlYWRzOiB7XG4gICAgICAgIC4uLlNURUxMQVJfTElNSVRTX0NPTkZJRy5lbnRyeV9yZWFkcyxcbiAgICAgICAgdmFsdWU6IGNvbnRyYWN0TGltaXREYXRhLmNvbnRyYWN0TGVkZ2VyQ29zdC50eE1heFJlYWRMZWRnZXJFbnRyaWVzID8/IFNURUxMQVJfTElNSVRTX0NPTkZJRy5lbnRyeV9yZWFkcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgICBlbnRyeV93cml0ZXM6IHtcbiAgICAgICAgLi4uU1RFTExBUl9MSU1JVFNfQ09ORklHLmVudHJ5X3dyaXRlcyxcbiAgICAgICAgdmFsdWU6IGNvbnRyYWN0TGltaXREYXRhLmNvbnRyYWN0TGVkZ2VyQ29zdC50eE1heFdyaXRlTGVkZ2VyRW50cmllcyA/PyBTVEVMTEFSX0xJTUlUU19DT05GSUcuZW50cnlfd3JpdGVzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgIHJlYWRfYnl0ZXM6IHtcbiAgICAgICAgLi4uU1RFTExBUl9MSU1JVFNfQ09ORklHLnJlYWRfYnl0ZXMsXG4gICAgICAgIHZhbHVlOiBjb250cmFjdExpbWl0RGF0YS5jb250cmFjdExlZGdlckNvc3QudHhNYXhSZWFkQnl0ZXMgPz8gU1RFTExBUl9MSU1JVFNfQ09ORklHLnJlYWRfYnl0ZXMudmFsdWUsXG4gICAgICB9LFxuICAgICAgd3JpdGVfYnl0ZXM6IHtcbiAgICAgICAgLi4uU1RFTExBUl9MSU1JVFNfQ09ORklHLndyaXRlX2J5dGVzLFxuICAgICAgICB2YWx1ZTogY29udHJhY3RMaW1pdERhdGEuY29udHJhY3RMZWRnZXJDb3N0LnR4TWF4V3JpdGVCeXRlcyA/PyBTVEVMTEFSX0xJTUlUU19DT05GSUcud3JpdGVfYnl0ZXMudmFsdWUsXG4gICAgICB9LFxuICAgICAgbWluX3R4bl9ieXRlczoge1xuICAgICAgICAuLi5TVEVMTEFSX0xJTUlUU19DT05GSUcubWluX3R4bl9ieXRlcyxcbiAgICAgICAgdmFsdWU6IGNvbnRyYWN0TGltaXREYXRhLmNvbnRyYWN0QmFuZHdpZHRoLnR4TWF4U2l6ZUJ5dGVzID8/IFNURUxMQVJfTElNSVRTX0NPTkZJRy5taW5fdHhuX2J5dGVzLnZhbHVlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIFVQREFURV9TVEVMTEFSX0xJTUlUU19DT05GSUcodHhMaW1pdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlck9iamVjdChvYmo6IG9iamVjdCwga2V5czogc3RyaW5nW10pIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGNvbnN0IGZpbHRlcmVkT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgZmlsdGVyZWRPYmpba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZE9iajtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmxhdHRlbk9iamVjdFdpdGhGaWx0ZXIgPSAob2JqOiBvYmplY3QsIGFsbG93ZWRQYXRoczogc3RyaW5nW10sIHByZWZpeCA9ICcnKSA9PiB7XG4gIHJldHVybiB0cmFuc2Zvcm0oXG4gICAgb2JqLFxuICAgIChyZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IG5ld0tleSA9IHByZWZpeCA/IGAke3ByZWZpeH0uJHtrZXl9YCA6IGtleTtcblxuICAgICAgY29uc3Qgc2hvdWxkSW5jbHVkZSA9IGFsbG93ZWRQYXRocy5zb21lKChhbGxvd2VkUGF0aCkgPT4ge1xuICAgICAgICBpZiAobmV3S2V5ID09PSBhbGxvd2VkUGF0aCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChuZXdLZXkuc3RhcnRzV2l0aChhbGxvd2VkUGF0aCArICcuJykpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoYWxsb3dlZFBhdGguc3RhcnRzV2l0aChuZXdLZXkgKyAnLicpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghc2hvdWxkSW5jbHVkZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgZmxhdHRlbk9iamVjdFdpdGhGaWx0ZXIodmFsdWUsIGFsbG93ZWRQYXRocywgbmV3S2V5KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbmV3S2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAge31cbiAgKTtcbn07XG5cbi8qKlxuICogS2VlcCBjYWxsaW5nIGEgYGZuYCBmb3IgYHRpbWVvdXRJblNlY29uZHNgIHNlY29uZHMsIGlmIGBrZWVwV2FpdGluZ0lmYCBpc1xuICogdHJ1ZS4gUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYXR0ZW1wdHMgdG8gY2FsbCB0aGUgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aEV4cG9uZW50aWFsQmFja29mZjxUPihcbiAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgcmVwZWF0ZWRseSAqL1xuICBmbjogKHByZXZpb3VzRmFpbHVyZT86IFQpID0+IFByb21pc2U8VD4sXG4gIC8qKiBDb25kaXRpb24gdG8gY2hlY2sgd2hlbiBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byBjYWxsIGBmbmAgYWdhaW4gKi9cbiAga2VlcFdhaXRpbmdJZjogKHJlc3VsdDogVCkgPT4gYm9vbGVhbixcbiAgLyoqIE1heGltdW0gdG90YWwgZHVyYXRpb24gaW4gc2Vjb25kcyBmb3IgYWxsIHJldHJ5IGF0dGVtcHRzICAqL1xuICB0aW1lb3V0SW5TZWNvbmRzOiBudW1iZXIsXG4gIC8qKiBXaGF0IHRvIG11bHRpcGx5IGB0aW1lb3V0SW5TZWNvbmRzYCBieSwgZWFjaCBzdWJzZXF1ZW50IGF0dGVtcHQgKi9cbiAgZXhwb25lbnRpYWxGYWN0b3IgPSAxLjUsXG4gIC8qKiBXaGV0aGVyIHRvIGxvZyBleHRyYSBpbmZvICovXG4gIHZlcmJvc2UgPSBmYWxzZVxuKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgYXR0ZW1wdHM6IFRbXSA9IFtdO1xuXG4gIGxldCBjb3VudCA9IDA7XG4gIGF0dGVtcHRzLnB1c2goYXdhaXQgZm4oKSk7XG4gIGlmICgha2VlcFdhaXRpbmdJZihhdHRlbXB0c1thdHRlbXB0cy5sZW5ndGggLSAxXSkpIHJldHVybiBhdHRlbXB0cztcblxuICBjb25zdCB3YWl0VW50aWwgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgdGltZW91dEluU2Vjb25kcyAqIDEwMDApLnZhbHVlT2YoKTtcbiAgbGV0IHdhaXRUaW1lID0gMTAwMDtcbiAgbGV0IHRvdGFsV2FpdFRpbWUgPSB3YWl0VGltZTtcblxuICB3aGlsZSAoRGF0ZS5ub3coKSA8IHdhaXRVbnRpbCAmJiBrZWVwV2FpdGluZ0lmKGF0dGVtcHRzW2F0dGVtcHRzLmxlbmd0aCAtIDFdKSkge1xuICAgIGNvdW50ICs9IDE7XG4gICAgLy8gV2FpdCBhIGJlYXRcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgV2FpdGluZyAke3dhaXRUaW1lfW1zIGJlZm9yZSB0cnlpbmcgYWdhaW4gKGJyaW5naW5nIHRoZSB0b3RhbCB3YWl0IHRpbWUgdG8gJHt0b3RhbFdhaXRUaW1lfW1zIHNvIGZhciwgb2YgdG90YWwgJHt0aW1lb3V0SW5TZWNvbmRzICogMTAwMH1tcylgXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMpID0+IHNldFRpbWVvdXQocmVzLCB3YWl0VGltZSkpO1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICB3YWl0VGltZSAqPSBleHBvbmVudGlhbEZhY3RvcjtcbiAgICBpZiAobmV3IERhdGUoRGF0ZS5ub3coKSArIHdhaXRUaW1lKS52YWx1ZU9mKCkgPiB3YWl0VW50aWwpIHtcbiAgICAgIHdhaXRUaW1lID0gd2FpdFVudGlsIC0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgd2FzIGdvbm5hIHdhaXQgdG9vIGxvbmc7IG5ldyB3YWl0VGltZTogJHt3YWl0VGltZX1tc2ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0b3RhbFdhaXRUaW1lID0gd2FpdFRpbWUgKyB0b3RhbFdhaXRUaW1lO1xuICAgIC8vIFRyeSBhZ2FpblxuXG4gICAgYXR0ZW1wdHMucHVzaChhd2FpdCBmbihhdHRlbXB0c1thdHRlbXB0cy5sZW5ndGggLSAxXSkpO1xuICAgIGlmICh2ZXJib3NlICYmIGtlZXBXYWl0aW5nSWYoYXR0ZW1wdHNbYXR0ZW1wdHMubGVuZ3RoIC0gMV0pKSB7XG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGAke2NvdW50fS4gQ2FsbGVkICR7Zm59OyAke2F0dGVtcHRzLmxlbmd0aH0gcHJldiBhdHRlbXB0cy4gTW9zdCByZWNlbnQ6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgYXR0ZW1wdHNbYXR0ZW1wdHMubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0ZW1wdHM7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiMGRBQUEsSUFBSSxFQUFXLENBQUMsRUFDWixHQUFRLEVBRU4sRUFBUSxDQUFDLEVBQUssSUFBUSxDQUMxQixHQUFJLElBQVMsRUFD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QUssUUFBUyxDQUFDLEVBQ3BHLEtBQUssWUFBYyxPQUNuQixLQUFLLFNBQVcsT0FDVCxFQUdGLHFCQUFxQixDQUMxQixFQUNBLEVBQ0EsQ0FDQSxFQUFHLFdBQVcsUUFBUSxDQUFDLElBQWMsQ0FFbkMsR0FBSSxFQUFVLE9BQVMscUJBQXNCLENBQzNDLElBQU0sRUFBcUIsR0FBTyxlQUMvQixFQUFrQixLQUFLLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQ25FLEVBQ00sRUFBb0IsRUFBa0IsS0FBSyxlQUFlLEVBQUUsYUFBYSxFQUUvRSxJQUFLLEtBQUssWUFBWSxHQUNwQixLQUFLLFlBQVksR0FBYyxDQUFDLEVBRWxDLElBQUssS0FBSyxZQUFZLEdBQVksR0FDaEMsS0FBSyxZQUFZLEdBQVksR0FBWSxDQUFDLENBQUssTUFFL0MsTUFBSyxZQUFZLEdBQVksR0FBVSxLQUFLLENBQUssR0FHdEQsRUFFTCxDQUVBLElBQU0sR0FBbUIsZ0JBRXpCLGVBQXNCLEVBQXNCLENBQUMsRUFBYSxFQUF3QixDQUNoRixNQUFNLEdBQWUsRUFDckIsTUFBTSxVQUFzQixDQUFPLENBQ2pDLFdBQ0EsWUFBNkIsQ0FBQyxFQUM5QixXQUFXLEVBQUcsQ0FDWixJQUFLLEVBQVEsV0FDWCxNQUFNLElBQUksTUFBTSx3QkFBd0IsRUFFMUMsTUFBTSxDQUFPLEVBQ2IsS0FBSyxXQUFhLEVBQVEsV0FDMUIsSUFBTSxFQUFtQixLQUFLLEtBQUssTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFhLEVBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUNsRixRQUFXLEtBQVcsRUFBa0IsQ0FDdEMsSUFBTSxFQUFjLEtBQUssR0FDekIsR0FBSSxJQUFZLEdBQ2QsT0FFRixLQUFLLEdBQVcsU0FBVSxJQUFrRCxDQUMxRSxHQUFJLENBQ0YsSUFBTSxFQUFjLE1BQU0sRUFBWSxHQUFHLENBQUksRUFDN0MsTUFBTyxJQUNGLEVBQ0gsWUFBYSxTQUFZLENBQ3ZCLElBQU0sRUFBTSxNQUFNLEVBQVksWUFBWSxFQUNwQyxFQUFRLEdBQW1CLEVBQW9CLEVBQUksc0JBQTZCLEVBQ3RGLElBQUssS0FBSyxZQUFZLEtBQUssWUFFekIsS0FBSyxZQUFZLEtBQUssWUFBYyxDQUFDLEVBRXZDLElBQUssS0FBSyxZQUFZLEtBQUssWUFBWSxHQUVyQyxLQUFLLFlBQVksS0FBSyxZQUFZLEdBQVcsQ0FBQyxDQUFLLE1BRW5ELE1BQUssWUFBWSxLQUFLLFlBQVksR0FBUyxLQUFLLENBQUssRUFFdkQsT0FBTyxFQUVYLFFBQ08sRUFBUCxDQUVBLE1BREEsUUFBUSxNQUFNLENBQUssRUFDYixJQUlaLEtBQUssV0FBYSxFQUFRLFdBRTVCLFVBQVUsRUFBRyxDQUNYLElBQU0sRUFBWSxLQUFLLFlBQ3ZCLEdBQWEsS0FBSyxXQUFZLENBQVMsRUFFM0MsQ0FDQSxPQUFPLElBQUkiLAogICJkZWJ1Z0lkIjogIjM1Mzc5ODc0OUYzQ0YyREU2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
