piclist 1.8.9 → 1.8.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{EventEmitter as e}from"events";import t from"fs-extra";import{cloneDeep as r,merge as n,get as i,set as a,unset as s}from"lodash";import o,{homedir as E}from"os";import l from"path";import{Command as I}from"commander";import S from"inquirer";import{imageSize as _}from"image-size";import u,{URL as P}from"url";import c from"text-to-svg";import p from"sharp";import C from"crypto";import{v4 as A}from"uuid";import T from"chalk";import g from"download-git-repo";import d from"rimraf";import D from"minimatch";import m from"globby";import L from"ejs";import f from"dayjs";import h from"util";import B from"cross-spawn";import N from"resolve";import U from"axios";import R from"form-data";import O from"https";import M from"tunnel";import y from"heic-convert";import G from"mime-types";import b from"qiniu";import{AuthType as x,createClient as w}from"webdav";import{NodeSSH as W}from"node-ssh-no-cpu-features";import{S3Client as K,PutObjectCommand as F,GetObjectCommand as H}from"@aws-sdk/client-s3";import{getSignedUrl as v}from"@aws-sdk/s3-request-presigner";import{NodeHttpHandler as $}from"@smithy/node-http-handler";import k from"file-type";import Y from"mime";import{HttpsProxyAgent as q,HttpProxyAgent as V}from"hpagent";import{spawn as j}from"child_process";import z from"is-wsl";import{JSONStore as X}from"@picgo/store";import Q from"js-yaml";import{ObjectAdapter as Z,I18n as J}from"@picgo/i18n";const ee=(e,t,r,n,i,a)=>{let s=e.program.command(t).description(r).alias(n);(null==a?void 0:a.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==a?void 0:a.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(i)},te={handle:e=>{const t=e.cmd;ee(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),ee(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),ee(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},re={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function ne(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ie(e){return 1===e.toString().length?`0${e}`:e.toString()}function ae(e){return C.createHash("md5").update(e).digest("hex")}function se(e,t,r,n){const i=new Date,a=i.getFullYear().toString(),s=l.basename(e,l.extname(e)),o={"{Y}":()=>a,"{y}":()=>a.slice(2),"{m}":()=>ie(i.getMonth()+1),"{d}":()=>ie(i.getDate()),"{h}":()=>ie(i.getHours()),"{i}":()=>ie(i.getMinutes()),"{s}":()=>ie(i.getSeconds()),"{ms}":()=>i.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>ae(n||s),"{md5-16}":()=>ae(n||s).slice(0,16),"{filename}":()=>r?l.basename(r,l.extname(r)):s,"{uuid}":()=>A().replace(/-/g,""),"{timestamp}":()=>i.getTime().toString()};if(void 0===t||!Object.keys(o).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const E=l.extname(e);let I=Object.keys(o).reduce(((e,t)=>e.replace(new RegExp(t,"g"),o[t]())),t)+E;return I=I.replace(/{str-(\d+)}/gi,((e,t)=>ne(parseInt(t,10)))),I=I.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return l.dirname(e).split(l.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),I}const oe=e=>/^https?:\/\//.test(e),Ee=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},le=e=>(Ee(e)||(e=encodeURI(e)),e),Ie=e=>{try{const{width:t=0,height:r=0,type:n}=_(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},Se=async e=>{try{return{extname:l.extname(e),fileName:l.basename(e),buffer:await t.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},_e=async(e,t)=>{let r;e=le(e);const n=new Promise(((n,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new P(e).pathname;let s="";try{s=new P(e).searchParams.get("wx_fmt")||l.extname(a)||""}catch(e){s=l.extname(a)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:i,fileName:l.basename(a),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},ue=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Pe(e)?"simple":"unknown",Pe=e=>{if(l.isAbsolute(e))return!1;const r=l.join(process.cwd(),e);return!t.existsSync(r)&&(!e.includes("/")&&!e.includes("\\"))},ce=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,pe=(e,r=console)=>{switch(ue(e)){case"normal":case"scope":return e;case"simple":return ce(e);default:{let n=e;return l.isAbsolute(e)&&t.existsSync(e)?Ae(n):(n=l.join(process.cwd(),e),t.existsSync(n)?Ae(n):(r.warn(`Can't find plugin ${e}`),""))}}},Ce=(e,r=console)=>{var n;switch(ue(e)){case"normal":return Te(e);case"scope":return Te(e,!0);case"simple":return Te(ce(e));default:{if(!t.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const i=l.posix.join(e,"package.json");if(t.existsSync(i)){const e=t.readJSONSync(i)||{};return(null===(n=e.name)||void 0===n?void 0:n.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Ae=e=>e.split(l.sep).join("/"),Te=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},ge=[],de=e=>ge.some((t=>e.startsWith(t))),De=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function me(e){try{return JSON.parse(e)}catch(t){return e}}const Le=(e=0)=>isNaN(Number(e))?0:Number(e),fe=()=>"development"===process.env.NODE_ENV;const he=l.join(__dirname,"assets","piclist.png");async function Be(e,t,r,n,i,a,s,o,E,l,I){o=!o||o<0||o>1?.15:o;const S=p(e,{animated:!0}),{width:_=200}=await S.metadata(),u=await async function(e,t,r,n,i,a,s,o=200,E=0){let l;"image"===e?(s=s||he,l=await p(s).toBuffer()):l=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=c.loadSync(n).getSVG(t,i);return Buffer.from(a)}(t,r,a,n||t);const{width:I,height:S}=await async function(e){const{width:t,height:r}=await p(e).metadata();return{width:t||200,height:r||200}}(l),_=Math.floor(o*Le(i)),u=Math.floor(_*S/I);return await p(l).resize(_,u,{fit:"inside"}).rotate(E,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,a,s,o,E,l,_,i);return await S.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const Ne=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Ue=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Re=e=>Ue.includes(e),Oe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Me(e,t,r,n){try{let n=p(e,{animated:!0});return n=p(await Be(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Le(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Le(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function ye(e){const t="string"==typeof e.formatConvertObj?me(e.formatConvertObj):e.formatConvertObj;return{quality:Le(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Le(e.reSizeHeight),reSizeWidth:Le(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Le(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Le(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Ge(e,t,r,n){t=ye(t);try{if(r=r.toLowerCase().replace(".",""),!Oe.includes(r))return e;let n=p(e,{animated:!0}),i=100;if(Ne(t.quality)&&t.quality<100&&(i=t.quality),t.isReSizeByPercent){if(Ne(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)n=n.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const i=t.reSizeHeight/r;n=n.resize(Math.round(e*i),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const i=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*i),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=be(t,r);e!==r&&(n=n.toFormat(e,{quality:i,mozjpeg:!0}))}else n=r&&Re(r)?n.toFormat(r,{quality:i,mozjpeg:!0}):n.toFormat("jpg",{quality:i,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}function be(e,t){if(e=ye(e||{}),"gif"===(t=t.toLowerCase().replace(".","")))return"gif";let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],Re(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const xe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],we=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&xe.includes(t)&&"svg"!==t),We=(e,t)=>{const r=t.toLowerCase().replace(".","");if(!xe.includes(r)||!e)return!1;const{quality:n,isReSizeByPercent:i,reSizePercent:a,isReSize:s,reSizeHeight:o,reSizeWidth:E,isRotate:l,rotateDegree:I,isConvert:S,convertFormat:_,isFlip:u,isFlop:P}=ye(e);if(Ne(n)&&n<100)return!0;if(i&&Ne(a))return!0;if(s&&("number"==typeof o&&o>0||"number"==typeof E&&E>0))return!0;if(l&&I)return!0;if(u||P)return!0;if(S){return t!==(_||"jpg")}return!1},Ke=async(e,t)=>(t=t.toLowerCase().replace(".",""),xe.includes(t)&&"svg"!==t?await p(e,{animated:!0}).toBuffer():e);var Fe=Object.freeze({__proto__:null,randomStringGenerator:ne,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${ne(5)}${l.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${ne(t)}${l.extname(e)}`},renameFileNameWithCustomString:se,isUrl:oe,isUrlEncode:Ee,handleUrlEncode:le,getImageSize:Ie,getFSFile:Se,getURLFile:_e,getPluginNameType:ue,isSimpleName:Pe,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:ce,getProcessPluginName:pe,getNormalPluginName:Ce,handleUnixStylePath:Ae,removePluginVersion:Te,configBlackList:ge,isConfigKeyInBlackList:de,isInputConfigValid:De,safeParse:me,forceNumber:Le,isDev:fe,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:Be,imageAddWaterMark:Me,imageProcess:Ge,getConvertedFormat:be,needAddWatermark:we,needCompress:We,removeExif:Ke});const He={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((r=>{(async()=>{const n=r.map((e=>oe(e)?e:l.resolve(e))).filter((r=>{const n=t.existsSync(r)||oe(r);return n||e.log.warn(`${r} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}};var ve=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var $e=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var ke=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const Ye=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[a]:i}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},qe={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,i;try{switch(t){case"buildin":if("compress"===r)await Ye(e,ve(e),t,r);else if("watermark"===r)await Ye(e,$e(e),t,r);else if("rename"===r)await Ye(e,ke(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await Ye(e,ve(e),t,n.buildin):"watermark"===n.buildin?await Ye(e,$e(e),t,n.buildin):"rename"===n.buildin&&await Ye(e,ke(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await Ye(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),i=e.helper[t].get(n[t]);(null==i?void 0:i.config)&&await Ye(e,i.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await Ye(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(i=e.pluginLoader.getPlugin(r.plugin))||void 0===i?void 0:i.config)&&await Ye(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Ve={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const i={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!i[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.transformer||"path"}),e.log.success("Configure saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},je={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},ze=async(e,t)=>{try{const r=Qe(t.tmp),n=l.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await m(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{D(t,e,{dot:!0})&&(n=t)})),!n||Xe(e,r.filters[n],i)})),0===a.length)return void e.log.warn("Template files not found!");const s=Ze(a,n,i);Je(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},Xe=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},Qe=e=>{const r=l.join(e,"index.js");if(t.existsSync(r)){return require(r)}return{}},Ze=(e,r,n)=>{const i={};return e.forEach((e=>{const a=t.readFileSync(l.join(r,e),"utf8"),s=L.render(a,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(i[e]=s)})),i},Je=(e,r)=>{Object.keys(r).forEach((n=>{const i=l.join(e,n);t.ensureDirSync(l.dirname(i)),t.writeFileSync(i,r[n])}))},et=(e,r)=>{r.offline?t.existsSync(r.template)?ze(e,r).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${r.template} not found`):(r.template=r.hasSlash?r.template:"PicGo/picgo-template-"+r.template,tt(e,r))},tt=(e,r)=>{t.existsSync(r.tmp)&&d.sync(r.tmp),e.log.info("Template files are downloading..."),g(r.template,r.tmp,{clone:r.clone},(t=>{t?e.log.error(t):(e.log.success("Template files are downloaded!"),ze(e,r).catch((t=>{e.log.error(t)})))}))},rt={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((r,n,i)=>{(async()=>{try{const a=r.includes("/"),s=!n||"."===n,o=l.resolve(n||"."),I=i.clone||!1,S=i.offline||!1,_=l.join(E(),".piclist/templates",r.replace(/[/:]/g,"-"));i.offline&&(r=_);const u={template:r,project:n,hasSlash:a,inPlace:s,dest:o,clone:I,tmp:_,offline:S};s||t.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&et(e,u)})):et(e,u)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(T.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(T.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},nt={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class it{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),it.currentPlugin&&(this.pluginIdMap.has(it.currentPlugin)?null===(r=this.pluginIdMap.get(it.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(it.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const at=(e=null)=>{it.currentPlugin=e};class st{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new I,this.inquirer=S,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.8.9","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",te),e.cmd.register("config",re),e.cmd.register("setting",qe),e.cmd.register("upload",He),e.cmd.register("use",Ve),e.cmd.register("proxy",je),e.cmd.register("init",rt),e.cmd.register("i18n",nt)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=it.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var ot,Et,lt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(ot||(ot={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(Et||(Et={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(lt||(lt={}));class It{constructor(e){this.level={[ot.success]:"green",[ot.info]:"blue",[ot.warn]:"yellow",[ot.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=T[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||l.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(T.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(t.existsSync(e)){const r=t.statSync(e).size,n=1024*Le(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:r>n,logFileSize:r,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){t.existsSync(e)&&(t.unlinkSync(e),t.createFileSync(e))}handleWriteLog(e,r,...n){try{let i=`${f().format("YYYY-MM-DD HH:mm:ss")} [PicList ${r.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===r?i+=`\n------Error Stack Begin------\n${h.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),i+=`${e} `)})),i+="\n",t.appendFileSync(e,i)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(ot.success,...e)}info(...e){this.handleLog(ot.info,...e)}error(...e){this.handleLog(ot.error,...e)}warn(...e){this.handleLog(ot.warn,...e)}debug(...e){fe()&&this.handleLog(ot.info,...e)}}class St{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>_t(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>_t(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>_t(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},i={}){const a=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,E;let l=[e].concat(t).concat("--color=always").concat("--save");a&&(l=l.concat(`--registry=${a}`)),s&&(l=l.concat(`--proxy=${s}`));try{const e=B("npm",l,{cwd:r,env:Object.assign({},process.env,i)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(E=e.stderr)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(Et.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Et.FAILED,e)}}))}}const _t=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=pe(t,e.log);if(!n)return r;const i=Ce(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r};class ut{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=l.join(this.ctx.baseDir,"package.json");if(!t.existsSync(e)){const r={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};t.writeFileSync(e,JSON.stringify(r),"utf8")}}resolvePlugin(e,t){try{return N.sync(t,{basedir:e.baseDir})}catch(r){return l.join(e.baseDir,"node_modules",t)}}load(){const e=l.join(this.ctx.baseDir,"package.json"),r=l.join(this.ctx.baseDir,"node_modules/");if(!t.existsSync(r))return!1;const n=t.readJSONSync(e),i=Object.keys(n.dependencies||{}),a=Object.keys(n.devDependencies||{}),s=i.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const r=this.resolvePlugin(this.ctx,e);return t.existsSync(r)}));for(const e of s)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),at(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),at(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(Et.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),at(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=l.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const Pt=new e,ct=new O.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function pt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Ct(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function At(e){var t,r,n,i,a,s,o;const E={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(E)}class Tt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Pt.on(lt.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new P(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=M.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ct;const r=U.create(this.options);r.interceptors.response.use(Ct,At);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let i=e.proxy;if("string"==typeof i){try{i=new P(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=M.httpsOverHttp({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new R;for(const r in e.formData)pt(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class gt extends e{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const r=l.join(e.baseDir,"piclistTemp"),n=l.join(e.baseDir,"imgTemp");this.ttfPath=l.join(e.baseDir,"assets","simhei.ttf"),t.ensureDirSync(n),t.emptyDirSync(r)}async downloadTTF(){const e=l.dirname(this.ttfPath);if(t.ensureDirSync(e),t.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await U.get(this.ttfLink,{responseType:"arraybuffer"});return t.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e){const n=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");n.input=e,n.rawInputPath=[],n.rawInput=r(e),n.output=[];const{compressOptions:i,watermarkOptions:a}=this.helpGetOption(n);if(i||a){const e=l.join(n.baseDir,"piclistTemp");await Promise.allSettled(n.input.map((async(r,s)=>{const o=oe(r),E=o?await _e(r,n):{success:!1};if(o&&(!E.success||!E.buffer))return;let I,S=!1;n.rawInputPath[s]=r;const _=o?E.extname||"":l.extname(r),u=o?E.buffer:t.readFileSync(r);if(we(a,_)){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),S=!0)}S||(n.log.info("Add watermark to image"),I=await Me(u,a,this.ttfPath,n.log))}if(We(i,_))if(n.log.info("Compress or convert image"),o||".heic"!==_&&".heif"!==_)I=await Ge(null!=I?I:u,i,_,n.log);else{const a=await y({buffer:u,format:"JPEG",quality:1}),s=l.join(e,`${l.basename(r,_)}.jpg`);t.writeFileSync(s,Buffer.from(a)),I=await Ge(t.readFileSync(s),i,".jpg",n.log)}if(!I&&(null==i?void 0:i.isRemoveExif)&&(n.log.info("Remove exif info."),I=await Ke(u,_)),I){let a=(null==i?void 0:i.isConvert)?be(i,_):_;a=a.startsWith(".")?a:`.${a}`;const S=o?l.join(e,`${E.fileName?`${l.basename(E.fileName,l.extname(E.fileName))}`:(new Date).getTime()}${a}`):l.join(e,`${l.basename(r,_)}${a}`);n.rawInputPath[s]=l.join(l.dirname(r),o?l.basename(S):`${l.basename(r,_)}${a}`),t.writeFileSync(S,I),n.input[s]=S}})))}else for(const e of n.input)n.rawInputPath.push(e);await this.beforeTransform(n),await this.doTransform(n);const s=n.getConfig("buildIn.rename")||{};if(s.enable){const e=s.format||"{filename}";n.output=n.output.map(((t,r)=>{let i=t.fileName;return e&&(i=se(n.rawInputPath[r],e,void 0,t.base64Image?t.base64Image:t.buffer),i=i.replace(/\/+/g,"/"),"/"===i.slice(-1)&&(i+=r.toString())),t.fileName=i,t}))}return await this.beforeUpload(n),await this.doUpload(n),n.input=n.rawInput,await this.afterUpload(n),n}catch(e){if(n.log.warn(Et.FAILED),n.emit(Et.UPLOAD_PROGRESS,-1),n.emit(Et.FAILED,e),n.log.error(e),n.getConfig("debug"))throw e;return n}}async beforeTransform(e){return e.emit(Et.UPLOAD_PROGRESS,0),e.emit(Et.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Et.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(Et.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Et.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("smms")),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(Et.AFTER_UPLOAD,e),e.emit(Et.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let i=0;i<r;i++)void 0!==e.output[i].imgUrl&&(t+=n?le(e.output[i].imgUrl):e.output[i].imgUrl,i!==r-1&&(t+="\n")),delete e.output[i].base64Image,delete e.output[i].buffer;return e.emit(Et.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const dt=(e,t,r,n="")=>{let i=n||"sm.ms";return i=i.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${i}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},Dt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=dt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const r=await e.request(i),a=JSON.parse(r);if("success"===a.code)delete n.base64Image,delete n.buffer,n.imgUrl=a.data.url,n.hash=a.data.hash;else{if("image_repeated"!==a.code||"string"!=typeof a.images)throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:a.message}),new Error(a.message);{delete n.base64Image,delete n.buffer,n.imgUrl=a.images;const e=await U.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===a.images){n.hash=e.hash;break}}}}}catch(t){throw e.log.error(t),t}}return e},mt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};function Lt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const i=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return i?`${t?"/":""}${i}${r?"/":""}`:n?"":"/"}function ft(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const ht=(e,t)=>{const r=e.secretId,n=e.secretKey,i=e.appId,a=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const i=C.createHmac("sha1",n).update(o).digest("hex"),a=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,E=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${a}\n`,l=`sha1\n${o}\n${C.createHash("sha1").update(E).digest("hex")}\n`;s=C.createHmac("sha1",i).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,E=C.createHmac("sha1",n).update(o).digest(),l=Buffer.concat([E,Buffer.from(o)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:i,bucket:a,signTime:o}},Bt=(e,t,r,n,i)=>{const a=e.area,s=e.path;if(e.version&&"v4"!==e.version){const a=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${a}/${ft(`${s}${t}`)}`,headers:{Host:`${e.bucket}.${a}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:G.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${i};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${i};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},Nt=async e=>{var t,r,n;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const a=e.output,s=(i.customUrl||"").replace(/\/$/,""),o=Lt({path:i.path});i.path=o;const E=!i.version||"v4"===i.version;for(const l of a)if(l.fileName&&l.buffer){const a=ht(i,l.fileName);if(!a)return!1;let I=l.buffer;!I&&l.base64Image&&(I=Buffer.from(l.base64Image,"base64"));const S=Bt(i,l.fileName,a,I,e.GUI_VERSION||e.VERSION),_=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let u;if(u=E&&"string"==typeof _?JSON.parse(_):_,400===u.statusCode)throw(null===(t=null==u?void 0:u.body)||void 0===t?void 0:t.err)?u.body.err:new Error((null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.msg)||(null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.message));const P=i.options||"",c=void 0!==i.slim&&!!i.slim;if(E&&"SUCCESS"===u.message)delete l.base64Image,delete l.buffer,l.imgUrl=s?`${s}/${ft(`${o}${l.fileName}`)}${P}`:`${u.data.source_url}${P}`;else{if(E||!u||200!==u.statusCode)throw new Error(_.body.msg);if(delete l.base64Image,delete l.buffer,s)l.imgUrl=`${s}/${ft(`${o}${l.fileName}`)}${P}`;else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;l.imgUrl=`https://${i.bucket}.${e}/${ft(`${o}${l.fileName}`)}${P}`}}c&&(l.imgUrl+=P?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Ut=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};function Rt(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${ft(`${t}${r}`)}${n}`}const Ot=(e,t,r)=>{const{token:n,repo:i}=t,a=G.lookup(e)||"application/octet-stream";return{method:"PUT",url:Rt(i,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":a},body:r,json:!0}},Mt=(e,t)=>{const{token:r,repo:n,branch:i}=t;return{method:"GET",url:Rt(n,t.path,e,`?ref=${i}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},yt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=Lt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){const n=i.base64Image||Buffer.from(i.buffer).toString("base64"),a={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(i.fileName)},s=Ot(i.fileName,t,a);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete i.base64Image,delete i.buffer,i.imgUrl=t.customUrl?`${t.customUrl}/${ft(`${r}${i.fileName}`)}`:n.content.download_url,i.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;{delete i.base64Image,delete i.buffer;const a=await e.request(Mt(i.fileName,t));if(!Object.keys(a).length)throw n;i.hash=a.sha,i.imgUrl=t.customUrl?`${t.customUrl}/${ft(`${r}${i.fileName}`)}`:a.download_url}}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Gt=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function bt(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":G.lookup(t)||"application/octet-stream"},body:n}}function xt(e){const t=e.accessKey,r=e.secretKey,n=new b.auth.digest.Mac(t,r),i={scope:e.bucket};return new b.rs.PutPolicy(i).uploadToken(n)}const wt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=bt(t,n.fileName,xt(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Wt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Kt=async(e,t,r,n)=>{const i=t.clientId||"",a=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let E;if(a&&s)E=s;else{if(!i)throw new Error("clientId or accessToken is required");E=`Client-ID ${i}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:E,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(a&&s&&o){let r,n=0,i="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${a}/albums/${n}`,headers:{Authorization:E},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const l=r.body.data;for(const e of l)if(e.title===o){i=e.id;break}n++}while(r.body.data.length>0);i&&l.formData&&(l.formData.album=i)}return t.proxy&&(l.proxy=t.proxy),l},Ft=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=await Kt(e,r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},Ht=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const vt=()=>(new Date).toUTCString(),$t=(e,t)=>{const r=vt(),n=`PUT\n\n${G.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,i=C.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${i}`},kt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${ft(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:vt(),"Content-Type":G.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),Yt=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=Lt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),i=t.path;for(const a of r)if(a.fileName&&a.buffer){const r=$t(t,a.fileName);let s=a.buffer;!s&&a.base64Image&&(s=Buffer.from(a.base64Image,"base64"));const o=kt(t,a.fileName,r,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=t.options||"";a.imgUrl=n?`${n}/${ft(`${i}${a.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${ft(`${i}${a.fileName}`)}${e}`}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},qt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Vt=(e,t)=>{const r=e.path||"",n=e.operator,i=zt(e.password),a=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${ft(`${r}${t}`)}`}&${a}`;return`UPYUN ${n}:${C.createHmac("sha1",i).update(s).digest("base64")}`},jt=(e,t,r,n)=>{const i=e.bucket,a=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${i}/${ft(`${a}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":G.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function zt(e){return C.createHash("md5").update(e).digest("hex")}const Xt=(e,t,r,n)=>{const i=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),a=Math.round((new Date).getTime()/1e3),s=t?a+parseInt(t.toString(),10):a+1800;return`_upt=${`${zt(`${e}&${s}&${i}`).substring(12,20)}${s}`}`},Qt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=Lt({path:t.path});t.path=n;for(const i of r)if(i.fileName&&i.buffer){let r=i.buffer;!r&&i.base64Image&&(r=Buffer.from(i.base64Image,"base64"));const a=Vt(t,i.fileName),s=jt(t,i.fileName,a,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${ft(`${n}${i.fileName}`)}${o}`,t.antiLeechToken){const e=Xt(t.antiLeechToken,t.expireTime,t,i.fileName);i.imgUrl=i.imgUrl.includes("?")?`${i.imgUrl}&${e}`:`${i.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=me(t.error);e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},Zt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const Jt=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=Lt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",i=Lt({path:r.webpath,rootToEmpty:!1}),a=r.options||"";try{const s=e.output,o=r.customUrl,E=r.path;for(const I of s)if(I.fileName&&I.buffer){let s=I.buffer;!s&&I.base64Image&&(s=Buffer.from(I.base64Image,"base64"));const S={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(S.authType=x.Digest);const _=w(r.host,S),u="/"===E?"":E;u&&await _.createDirectory(u,{recursive:!0});if(!await _.putFileContents(`${E}${I.fileName}`.replace(/^\/+|\/+$/g,""),s,{overwrite:!0}))throw new Error("Upload failed");{const n=l.join(e.baseDir,"imgTemp","webdavplist"),S=l.join(n,I.fileName);t.ensureDirSync(l.dirname(S)),t.writeFileSync(S,s),delete I.base64Image,delete I.buffer;const _=o||r.host;r.webpath?I.imgUrl=`${_}/${ft(`${i}${I.fileName}`)}${a}`:I.imgUrl=`${_}/${ft(`${E}${I.fileName}`)}${a}`,I.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(I.fileName)}`}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},er=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const tr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const i=n.path||"",a=(n.customUrl||"").replace(/\/$/,""),s=Lt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),o=e.output;for(const r of o)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{try{const o=l.join(e.baseDir,"imgTemp","local"),E=l.join(o,r.fileName),I=l.join(i,r.fileName);t.ensureDirSync(l.dirname(I)),t.ensureDirSync(l.dirname(E)),t.writeFileSync(I,n),t.copyFileSync(I,E),delete r.base64Image,delete r.buffer,r.imgUrl=a?`${a}/${ft(`${s}${r.fileName}`)}`:l.join(i,r.fileName),r.hash=l.join(i,r.fileName),r.galleryPath=`http://localhost:36699/local/${encodeURIComponent(r.fileName)}`}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},rr=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class nr{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new W)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:i}=e,a=n?{username:t,privateKeyPath:n,passphrase:i||void 0}:{username:t,password:r};try{return await nr.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},a)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(l.dirname(t).replace(/^\/+|\/+$/g,""),r),await nr.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){throw new Error(e)}}async mkdir(e,t){if(!nr.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,i]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],a=`chown ${n}:${i} "${e}"`;return this.exec(a)}async exec(e){return 0===(await nr.client.execCommand(e)).code}close(){nr.client.dispose(),this._isConnected=!1}}const ir=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=Lt({path:r.uploadPath,rootToEmpty:!1});const n=Lt({path:r.webPath,rootToEmpty:!1});try{const i=e.output;for(const a of i)if(a.fileName&&a.buffer){let i=a.buffer;!i&&a.base64Image&&(i=Buffer.from(a.base64Image,"base64"));const s=l.join(e.baseDir,"uploadTemp"),o=l.join(e.baseDir,"imgTemp","sftpplist");t.ensureDirSync(o);const E=l.join(s,a.fileName);t.ensureDirSync(l.dirname(E)),t.writeFileSync(E,i);const I=nr.instance;await I.connect(r);const S=l.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await I.upload(E,S,r),r.fileUser&&await I.chown(S,r.fileUser),delete a.base64Image,delete a.buffer;const _=r.customUrl||r.host;r.webPath?a.imgUrl=`${_}/${ft(`${"/"===n?"":n}${a.fileName}`)}`:a.imgUrl=`${_}/${ft(`${"/"===r.uploadPath?"":r.uploadPath}${a.fileName}`)}`;const u=l.join(o,a.fileName);t.ensureDirSync(l.dirname(u)),t.removeSync(u),t.moveSync(E,l.join(o,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,I.close()}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},ar=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const sr=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},or=async e=>{var r,n;let i=e.getConfig("picBed.telegraphplist");i||(i={});try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const s=l.join(e.baseDir,"uploadTemp");t.ensureDirSync(s);const o=l.join(s,a.fileName);t.writeFileSync(o,n);const E=await sr(i,t.createReadStream(o)),I=await e.request(E),S="string"==typeof I?JSON.parse(I):I;if(t.remove(o),!(null===(r=null==S?void 0:S[0])||void 0===r?void 0:r.src))throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=`https://telegra.ph${S[0].src}`}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data)||t}},Er=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const lr=(e,t,r)=>{const n=e.host||"127.0.0.1",i=e.port||36677,a=e.picbed||"",s=e.configName||"Default",o=e.serverKey||"";let E=`http://${n}:${i}/upload?configName=${s}`;return a&&(E+=`&picbed=${a}`),o&&(E+=`&key=${o}`),{method:"POST",url:E,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:G.lookup(t)}}},resolveWithFullResponse:!0}},Ir=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){let n=i.buffer;!n&&i.base64Image&&(n=Buffer.from(i.base64Image,"base64"));const a=lr(r,i.fileName,n),s=await e.request(a).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete i.base64Image,delete i.buffer,i.imgUrl=s.body.result[0],i.fullResult=s.body.fullResult[0]}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Sr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};const _r=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const i="V2"===e.version,a=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:a||void 0},o={image:{value:r,options:{filename:t}},ssl:"true"},E={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:a||void 0},l=e.strategyId,I=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const _={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:l,album_id:I,permission:S};l||delete _.strategy_id,I||delete _.album_id,0!==S&&1!==S&&delete _.permission;return{method:"POST",url:i?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new O.Agent({rejectUnauthorized:!1}),headers:i?E:s,formData:i?_:o}},ur=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");try{const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=_r(t,n.fileName,r);let a=await e.Request.request(i);a="string"==typeof a?JSON.parse(a):a;const s="V2"===t.version;if(!(s?!0===a.status:200===a.code))throw e.emit("notification",{title:"upload failed",body:a.message}),new Error(a.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?a.data.links.url:a.data.url,s&&(n.hash=a.data.key)}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Pr=e=>{const t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};class cr{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return C.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return C.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return C.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return C.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return C.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function pr(e,t){if(!t)return e.fileName;const r=new cr(e);let n=t;for(const e of cr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function Cr(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new P(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?q:V)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Ar(e,t,r){try{const n=await v(e.client,new H({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),i=new u.URL(n);return i.search="",i.href}catch(e){return Promise.reject(e)}}cr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var Tr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new u.URL(e.endpoint).protocol}catch(e){}const i={};n?i.httpsAgent=Cr(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):i.httpAgent=Cr(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const a={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new $(i)};return new K(a)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)return Promise.reject(new Error("undefined image"));let t,r,n;try{({body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=Y.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await k.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item))}catch(e){return Promise.reject(e)}const i=new F({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n});let a,s;try{a=await e.client.send(i)}catch(e){return Promise.reject(e)}if(e.urlPrefix)s=`${e.urlPrefix}/${e.path}`;else try{s=await Ar(e,a.ETag,a.VersionId)}catch(e){return Promise.reject(e)}return{index:e.index,key:e.path,url:s,imgURL:s,versionId:a.VersionId,eTag:a.ETag}},getFileURL:Ar};function gr(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const dr=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find amazon s3 uploader config");const r=gr(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const i=Tr.createS3Client(t),a=e.output,s=a.map((async(e,r)=>Tr.createUploadTask({client:i,index:r,bucketName:t.bucketName,path:pr(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n})));let o;try{o=await Promise.all(s)}catch(t){throw e.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"),e.log.error(t),e.emit("notification",{title:"S3 存储上传错误",body:"请检查配置是否正确",text:""}),t}for(const e of o){const{index:t,url:r,imgURL:n}=e;delete a[t].buffer,delete a[t].base64Image,a[t].imgUrl=n,a[t].url=r}return e},Dr=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!1,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"confirm",default:gr(t.disableBucketPrefixToURL)||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};const mr=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Yt,config:qt})}(e),function(e){e.helper.uploader.register("aws-s3-plist",{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:dr,config:Dr})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:yt,config:Gt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Ft,config:Ht})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:tr,config:rr})}(e),function(e){e.helper.uploader.register("lskyplist",{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:ur,config:Pr})}(e),function(e){e.helper.uploader.register("piclist",{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:Ir,config:Sr})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:wt,config:Wt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:ir,config:ar})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Dt,config:mt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Nt,config:Ut})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:or,config:Er})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Qt,config:Zt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Jt,config:er})}(e)}}),Lr=(e,t,r)=>{const n=Ie(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var fr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:oe(r)?await _e(r,e):await Se(r),i.success&&i.buffer){const a=Lr(e,i.buffer,r),s=i.extname||a.extname||".png";t[n]={buffer:i.buffer,fileName:i.fileName||`${f().format("YYYYMMDDHHmmss")}${s}`,width:a.width,height:a.height,extname:i.extname}}else e.log.error(i.reason)}))),e.output=t.filter((e=>e)),e}};var hr={handle:async e=>(e.output.push(...e.input),e)};const Br={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},Nr={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const Ur=async e=>{!function(e){const r=l.join(e.baseDir,"piclist-clipboard-images");t.ensureDirSync(r)}(e);const r=l.join(e.baseDir,"piclist-clipboard-images",`${f().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((n,i)=>{const a=(()=>{const e=process.platform;if(z)return"wsl";if("win32"===e)return"10"===o.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),s=l.join(e.baseDir,Nr[a]);let E;t.existsSync(s)||t.writeFileSync(s,Br[a],"utf8"),E="darwin"===a?j("osascript",[s,r]):"win32"===a||"win10"===a?j("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,r]):j("sh",[s,r]),E.stdout.on("data",(s=>{if("linux"===a&&"no xclip or wl-clipboard"===s.toString().trim())return e.emit(Et.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),i(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const o=s.toString().trim();let E=!1;if(l.basename(o)!==l.basename(r)&&t.existsSync(o)&&(E=!0),"no image"!==o&&!t.existsSync(o))return i(new Error(`Can't find ${o}`));n({imgPath:o,shouldKeepAfterUploading:E})}))}))};class Rr{constructor(e){if(this.ctx=e,this.db=new X(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms",smms:{token:""}})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}const Or={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permisson",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class Mr{constructor(e){this.ctx=e,this.objectAdapter=new Z(Or);let t=this.ctx.getConfig("settings.language")||"zh-CN";Or[t]||(t="zh-CN"),this.i18n=new J({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();t.readdirSync(e,{withFileTypes:!0}).forEach((r=>{if(r.isFile()&&r.name.endsWith(".yml")){const n=l.join(e,r.name),i=t.readFileSync(n,"utf8");try{const e=Q.load(i);Or[r.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=l.join(this.ctx.baseDir,"i18n-cli");return t.pathExistsSync(e)||t.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const i=n(r,t);return this.objectAdapter.setLocale(e,i),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Or[e]=t,!0)}getLanguageList(){return Object.keys(Or)}}class yr extends e{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.8.9",this.configPath=e,this.input=[],this.rawInput=[],this.output=[],this.helper={transformer:new it("transformer"),uploader:new it("uploader"),beforeTransformPlugins:new it("beforeTransformPlugins"),beforeUploadPlugins:new it("beforeUploadPlugins"),afterUploadPlugins:new it("afterUploadPlugins")},this.initConfigPath(),this.log=new It(this),this.cmd=new st(this),this.pluginHandler=new St(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||l.join(E(),".piclist/config.json"),".JSON"!==l.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=l.dirname(this.configPath),t.pathExistsSync(this.configPath)||t.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new Rr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new Mr(this),this.Request=new Tt(this),this._pluginLoader=new ut(this),at("picgo"),mr().register(this),{register(e){e.helper.transformer.register("path",fr),e.helper.transformer.register("base64",hr)}}.register(this),at(""),this._pluginLoader.load(),this.lifecycle=new gt(this)}catch(e){throw this.emit(Et.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?i(this._config,e):(this._config=this.db.read(!0),this._config)}saveConfig(e){De(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(de(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){De(e)?Object.keys(e).forEach((t=>{de(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),a(this._config,t,e[t]),Pt.emit(lt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(de(e)?this.log.warn(`the config.${e} can't be unset`):s(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:r}=await Ur(this),n=()=>{r||t.remove(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(Et.FAILED,n),this.once(Et.FINISHED,n);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(Et.FAILED,e),e}}}export{st as Commander,gt as Lifecycle,it as LifecyclePlugins,It as Logger,yr as PicGo,Fe as PicGoUtils,St as PluginHandler,ut as PluginLoader,Tt as Request};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zbW1zLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xvY2FsLnRzIiwiLi4vc3JjL3V0aWxzL3NzaENsaWVudC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NmdHAudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90ZWxlZ3JhcGgudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9waWNsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbHNreS50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3MzL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXBsb2FkZXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hd3NzM3BsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW5kZXgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9wYXRoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvYmFzZTY0LnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vaW5kZXgudHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxudHlwZSBhY3Rpb25GdW5jID0gKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHZvaWRcclxuXHJcbmNvbnN0IGNyZWF0ZUNvbW1hbmQgPSAoY21kOiBhbnksIGNvbW1hbmQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgYWxpYXM6IHN0cmluZywgYWN0aW9uOiBhY3Rpb25GdW5jLCBvcHRpb25zPzogeyBwcm94eTogYm9vbGVhbiwgcmVnaXN0cnk6IGJvb2xlYW4gfSk6IHZvaWQgPT4ge1xyXG4gIGxldCBwcm9ncmFtID0gY21kLnByb2dyYW0uY29tbWFuZChjb21tYW5kKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxpYXMoYWxpYXMpXHJcbiAgaWYgKG9wdGlvbnM/LnByb3h5KSB7XHJcbiAgICBwcm9ncmFtID0gcHJvZ3JhbS5vcHRpb24oJy1wLCAtLXByb3h5IDxwcm94eT4nLCAnQWRkIHByb3h5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxyXG4gIH1cclxuICBpZiAob3B0aW9ucz8ucmVnaXN0cnkpIHtcclxuICAgIHByb2dyYW0gPSBwcm9ncmFtLm9wdGlvbignLXIsIC0tcmVnaXN0cnkgPHJlZ2lzdHJ5PicsICdDaG9vc2UgYSByZWdpc3RyeSBmb3IgaW5zdGFsbGluZyBwbHVnaW5zJylcclxuICB9XHJcbiAgcHJvZ3JhbS5hY3Rpb24oYWN0aW9uKVxyXG59XHJcblxyXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjcmVhdGVDb21tYW5kKFxyXG4gICAgICBjbWQsXHJcbiAgICAgICdpbnN0YWxsIDxwbHVnaW5zLi4uPicsXHJcbiAgICAgICdpbnN0YWxsIHBpY2dvIHBsdWdpbicsXHJcbiAgICAgICdhZGQnLFxyXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcHJveHksIHJlZ2lzdHJ5IH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSxcclxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfSlcclxuICAgIGNyZWF0ZUNvbW1hbmQoXHJcbiAgICAgIGNtZCxcclxuICAgICAgJ3VuaW5zdGFsbCA8cGx1Z2lucy4uLj4nLFxyXG4gICAgICAndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicsXHJcbiAgICAgICdybScsXHJcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVuaW5zdGFsbChwbHVnaW5zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICBjcmVhdGVDb21tYW5kKFxyXG4gICAgICBjbWQsXHJcbiAgICAgICd1cGRhdGUgPHBsdWdpbnMuLi4+JyxcclxuICAgICAgJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nLFxyXG4gICAgICAndXAnLFxyXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcHJveHksIHJlZ2lzdHJ5IH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci51cGRhdGUocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goKGU6IEVycm9yKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSxcclxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfVxyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXHJcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXHJcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXHJcblxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSUltZ1NpemUsXHJcbiAgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sXHJcbiAgSVBsdWdpbk5hbWVUeXBlLFxyXG4gIElMb2dnZXIsXHJcbiAgSVBpY0dvLFxyXG4gIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxyXG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvciAobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xyXG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoKSA9PiBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSkpLmpvaW4oJycpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhUaW1lc3RhbXAgKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfSR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKDUpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFJhbmRvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtyYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdEhlbHBlciAobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIHJldHVybiBudW0udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bnVtfWAgOiBudW0udG9TdHJpbmcoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZDUgKGlucHV0OiBjcnlwdG8uQmluYXJ5TGlrZSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoaW5wdXQpLmRpZ2VzdCgnaGV4JylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBjdXN0b21Gb3JtYXQ6IHN0cmluZywgYWZmaXhGaWxlTmFtZT86IHN0cmluZywgZmlsZUJ1ZmZlcj86IGNyeXB0by5CaW5hcnlMaWtlKTogc3RyaW5nIHtcclxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXHJcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKClcclxuICBjb25zdCBmaWxlYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSlcclxuICBjb25zdCBjb252ZXJzaW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBzdHJpbmc+ID0ge1xyXG4gICAgJ3tZfSc6ICgpID0+IHllYXIsXHJcbiAgICAne3l9JzogKCkgPT4geWVhci5zbGljZSgyKSxcclxuICAgICd7bX0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldE1vbnRoKCkgKyAxKSxcclxuICAgICd7ZH0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldERhdGUoKSksXHJcbiAgICAne2h9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRIb3VycygpKSxcclxuICAgICd7aX0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldE1pbnV0ZXMoKSksXHJcbiAgICAne3N9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRTZWNvbmRzKCkpLFxyXG4gICAgJ3ttc30nOiAoKSA9PiBub3cuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxyXG4gICAgJ3ttZDV9JzogKCkgPT4gZ2V0TWQ1KGZpbGVCdWZmZXIgfHwgZmlsZWJhc2VuYW1lKSxcclxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSkuc2xpY2UoMCwgMTYpLFxyXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiBhZmZpeEZpbGVOYW1lID8gcGF0aC5iYXNlbmFtZShhZmZpeEZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoYWZmaXhGaWxlTmFtZSkpIDogZmlsZWJhc2VuYW1lLFxyXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxyXG4gICAgJ3t0aW1lc3RhbXB9JzogKCkgPT4gbm93LmdldFRpbWUoKS50b1N0cmluZygpXHJcbiAgfVxyXG4gIGlmIChjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyOicpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ3N0ci0nKSkpIHtcclxuICAgIHJldHVybiBvbGROYW1lXHJcbiAgfVxyXG4gIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShvbGROYW1lKVxyXG4gIGxldCBuZXdOYW1lID0gT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG4gICAgcmV0dXJuIGFjYy5yZXBsYWNlKG5ldyBSZWdFeHAoY3VyLCAnZycpLCBjb252ZXJzaW9uTWFwW2N1cl0oKSlcclxuICB9LCBjdXN0b21Gb3JtYXQpICsgZXh0XHJcbiAgY29uc3Qgc3RyUmVnZXggPSAve3N0ci0oXFxkKyl9L2dpXHJcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZShzdHJSZWdleCwgKF8sIGdyb3VwMSkgPT4ge1xyXG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoZ3JvdXAxLCAxMClcclxuICAgIHJldHVybiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKVxyXG4gIH0pXHJcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZSgveyhsb2NhbEZvbGRlcjo/KFxcZCspPyl9L2dpLCAoX3Jlc3VsdCwga2V5LCBjb3VudCkgPT4ge1xyXG4gICAgY291bnQgPSBNYXRoLm1heCgxLCBjb3VudCB8fCAwKVxyXG4gICAgY29uc3QgcGF0aHMgPSBwYXRoLmRpcm5hbWUob2xkTmFtZSkuc3BsaXQocGF0aC5zZXApXHJcbiAgICBrZXkgPSBwYXRocy5zbGljZSgwIC0gY291bnQpLnJlZHVjZSgoYSwgYikgPT4gYCR7YX0vJHtifWApXHJcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoLzovZywgJycpXHJcbiAgfSlcclxuICByZXR1cm4gbmV3TmFtZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB0eXBlIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIGNvbnN0IGV4dG5hbWUgPSB0eXBlID8gYC4ke3R5cGV9YCA6ICcucG5nJ1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhbDogdHJ1ZSxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgZXh0bmFtZVxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGZhbGxiYWNrIHRvIDIwMCAqIDIwMFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhbDogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAyMDAsXHJcbiAgICAgIGhlaWdodDogMjAwLFxyXG4gICAgICBleHRuYW1lOiAnLnBuZydcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGU0ZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKGZpbGVQYXRoKSxcclxuICAgICAgZmlsZU5hbWU6IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBidWZmZXI6IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoKSxcclxuICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gY2F0Y2gge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhc29uOiBgcmVhZCBmaWxlICR7ZmlsZVBhdGh9IGVycm9yYCxcclxuICAgICAgc3VjY2VzczogZmFsc2VcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRVUkxGaWxlID0gYXN5bmMgKHVybDogc3RyaW5nLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcclxuICB1cmwgPSBoYW5kbGVVcmxFbmNvZGUodXJsKVxyXG4gIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0XHJcbiAgY29uc3QgcmVxdWVzdEZuID0gbmV3IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qoe1xyXG4gICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxyXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEgYXMgQnVmZmVyXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgY29uc3QgdXJsUGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxyXG4gICAgICAgIGxldCBleHRuYW1lID0gJydcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTCh1cmwpLnNlYXJjaFBhcmFtc1xyXG4gICAgICAgICAgZXh0bmFtZSA9IHVybFBhcmFtcy5nZXQoJ3d4X2ZtdCcpIHx8IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBleHRuYW1lID0gcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZXh0bmFtZS5zdGFydHNXaXRoKCcuJykgJiYgZXh0bmFtZSkge1xyXG4gICAgICAgICAgZXh0bmFtZSA9IGAuJHtleHRuYW1lfWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xyXG4gICAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gZXJyb3IsICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gJyd9YFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pKCkuY2F0Y2gocmVqZWN0KVxyXG4gIH0pXHJcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUpOiB2b2lkID0+IHtcclxuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICByZXNvbHZlKHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSB0aW1lb3V0YFxyXG4gICAgICB9KVxyXG4gICAgfSwgMzAwMDApXHJcbiAgfSlcclxuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtyZXF1ZXN0Rm4sIHRpbWVvdXRQcm9taXNlXSlcclxufVxyXG5cclxuLyoqXHJcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nJ3MgdHlwZVxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gc2NvcGVcclxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBub3JtYWxcclxuICogMy4geHh4IC0+IHNpbXBsZVxyXG4gKiA0LiBub3QgZXhpc3RzIG9yIGlzIGEgcGF0aCAtPiB1bmtub3duXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luTmFtZVR5cGUgPSAobmFtZTogc3RyaW5nKTogSVBsdWdpbk5hbWVUeXBlID0+IHtcclxuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XHJcbiAgICByZXR1cm4gJ3Njb3BlJ1xyXG4gIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgIHJldHVybiAnbm9ybWFsJ1xyXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVOYW1lKG5hbWUpKSB7XHJcbiAgICByZXR1cm4gJ3NpbXBsZSdcclxuICB9XHJcbiAgcmV0dXJuICd1bmtub3duJ1xyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcgaXMgYSBzaW1wbGUgcGx1Z2luIG5hbWUgb3Igbm90XHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHh4eCAtPiB0cnVlXHJcbiAqIDIuIC9Vc3IveHgveHh4eC9waWNnby1wbHVnaW4teHh4IC0+IGZhbHNlXHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbk5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc1NpbXBsZU5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGNvbnN0IHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGlmIChuYW1lT3JQYXRoLmluY2x1ZGVzKCcvJykgfHwgbmFtZU9yUGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIHRydWVcclxufVxyXG5cclxuLyoqXHJcbiAqIHN0cmVhbWxpbmUgdGhlIGZ1bGwgcGx1Z2luIG5hbWUgdG8gYSBzaW1wbGUgb25lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi15eXkgLT4geXl5XHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbkZ1bGxOYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlU3RyZWFtbGluZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sICcnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogY29tcGxldGUgcGx1Z2luIG5hbWUgdG8gZnVsbCBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luU2ltcGxlTmFtZVxyXG4gKiBAcGFyYW0gc2NvcGUgcGx1Z2luU2NvcGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZSA9ICcnKTogc3RyaW5nID0+XHJcbiAgc2NvcGUgPyBgQCR7c2NvcGV9L3BpY2dvLXBsdWdpbi0ke25hbWV9YCA6IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogMy4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aCBwbHVnaW5OYW1lIG9yIHBsdWdpblBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aClcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcclxuICAgICAgLy8gMS4gY2hlY2sgaWYgaXMgYW4gYWJzb2x1dGUgcGF0aFxyXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcclxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVuaXhTdHlsZVBhdGgocGx1Z2luUGF0aClcclxuICAgICAgfVxyXG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcclxuICAgICAgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXHJcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBub3JtYWwgcGx1Z2luIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIGFuIGV4Y2VwdGlvbjogW3BhY2thZ2UuanNvbidzIG5hbWVdICE9PSBbZm9sZGVyIG5hbWVdXHJcbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cclxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcclxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XHJcbiAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoKVxyXG4gICAgY2FzZSAnc2NvcGUnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxyXG4gICAgY2FzZSAnc2ltcGxlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxyXG4gICAgZGVmYXVsdDoge1xyXG4gICAgICAvLyBub3csIHRoZSBuYW1lT3JQYXRoIG11c3QgYmUgcGF0aFxyXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcclxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VKU09OUGF0aCkgfHwge31cclxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICBsb2dnZXIud2FybihgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7cGtnLm5hbWUgYXMgc3RyaW5nIHx8ICdlbXB0eSd9LCBuZWVkIHRvIGluY2x1ZGUgdGhlIHByZWZpeDogcGljZ28tcGx1Z2luLWApXHJcbiAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBrZy5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQzpcXFxceHh4XFxcXHh4eCAtPiBDOi94eHgveHh4XHJcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XHJcbiAqIEBwYXJhbSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxyXG4gIHJldHVybiBwYXRoQXJyLmpvaW4oJy8nKVxyXG59XHJcblxyXG4vKipcclxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICogQHBhcmFtIHNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XHJcbiAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cclxuICAgIC8vIGlmIGlzIGEgc2NvcGUgcGtnXHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxyXG4gICAgaWYgKCFtYXRjaEFycikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2NhbiBub3QgcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uJylcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXRjaEFyclsyXVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZSBjb25maWcgYmxhY2sgaXRlbSBsaXN0IHdoaWNoIHdvbid0IGJlIHNldHRlZFxyXG4gKiBvbmx5IGNhbiBiZSBnb3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb25maWdCbGFja0xpc3QgPSBbXVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHNvbWUgY29uZmlnIGtleSBpcyBpbiBibGFja0xpc3RcclxuICogQHBhcmFtIGtleVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXHJcbiAqIGNvbmZpZyBtdXN0IGJlIG9iamVjdCBzdWNoIGFzIHsgeHh4OiAneHh4JyB9XHJcbiAqICYmIGNhbid0IGJlIGFycmF5XHJcbiAqIEBwYXJhbSBjb25maWdcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcclxuICBpZiAoXHJcbiAgICB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJlxyXG4gICAgIUFycmF5LmlzQXJyYXkoY29uZmlnKSAmJlxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPiAoc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgfVxyXG59XHJcblxyXG4vLyBob2xkLi4uXHJcbi8vIGV4cG9ydCBjb25zdCBjb25maWdXaGl0ZUxpc3Q6IFJlZ0V4cFtdID0gW1xyXG4vLyAgIC9ecGljQmVkLyxcclxuLy8gICAvXnBpY2dvUGx1Z2lucy8sXHJcbi8vICAgL15AW14vXStcXC9waWNnby1wbHVnaW4tLyxcclxuLy8gICAvZGVidWcvLFxyXG4vLyAgIC9zaWxlbnQvLFxyXG4vLyAgIC9jb25maWdQYXRoLyxcclxuLy8gICAvXnNldHRpbmdzLyxcclxuLy8gXVxyXG5cclxuLy8gZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5XaGl0ZUxpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuLy8gICByZXR1cm4gY29uZmlnV2hpdGVMaXN0LnNvbWUod2hpdGVJdGVtID0+IHdoaXRlSXRlbS50ZXN0KGtleSkpXHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNQcm9kID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHIChcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIGNvbG9yPzogc3RyaW5nLFxyXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0ZXh0ID0gIXRleHQgPyAn5rWL6K+VJyA6IHRleHRcclxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XHJcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxyXG4gIGNvbnN0IHRleHQyU1ZHID0gVGV4dFRvU1ZHLmxvYWRTeW5jKGZvbnRGYW1pbHkpXHJcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xyXG4gICAgYW5jaG9yOiAndG9wJyxcclxuICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgZmlsbDogY29sb3JcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxyXG4gIGNvbnN0IHN2ZyA9IEJ1ZmZlci5mcm9tKHRleHRTVkcpXHJcbiAgcmV0dXJuIHN2Z1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrIChcclxuICBpbWc6IEJ1ZmZlcixcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXHJcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9ICF3YXRlcm1hcmtTY2FsZVJhdGlvIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPCAwIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPiAxID8gMC4xNSA6IHdhdGVybWFya1NjYWxlUmF0aW9cclxuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxyXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoID0gMjAwIH0gPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrID0gYXdhaXQgY3JlYXRlV2F0ZXJtYXJrKFxyXG4gICAgd2F0ZXJtYXJrVHlwZSxcclxuICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgIHRleHQsXHJcbiAgICB3YXRlcm1hcmtGb250UGF0aCxcclxuICAgIHdhdGVybWFya1NjYWxlUmF0aW8sXHJcbiAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCxcclxuICAgIGltZ1dpZHRoLFxyXG4gICAgd2F0ZXJtYXJrRGVncmVlXHJcbiAgKVxyXG4gIGNvbnN0IGNvbXBvc2l0ZWQgPSBhd2FpdCBpbWFnZVxyXG4gICAgLmNvbXBvc2l0ZShbXHJcbiAgICAgIHtcclxuICAgICAgICBpbnB1dDogd2F0ZXJtYXJrLFxyXG4gICAgICAgIGdyYXZpdHk6IHBvc2l0aW9uIHx8ICdzb3V0aGVhc3QnLFxyXG4gICAgICAgIHRpbGU6IGlzRnVsbFNjcmVlbldhdGVybWFya1xyXG4gICAgICB9XHJcbiAgICBdKVxyXG4gICAgLnRvQnVmZmVyKClcclxuICByZXR1cm4gY29tcG9zaXRlZFxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXYXRlcm1hcmsgKFxyXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtTY2FsZVJhdGlvPzogbnVtYmVyLFxyXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcclxuICBpbWdXaWR0aDogbnVtYmVyID0gMjAwLFxyXG4gIHdhdGVybWFya0RlZ3JlZTogbnVtYmVyID0gMFxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIGxldCB3YXRlcm1hcms6IGFueVxyXG4gIGlmICh3YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGggPSB3YXRlcm1hcmtJbWFnZVBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aFxyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgc2hhcnAod2F0ZXJtYXJrSW1hZ2VQYXRoKS50b0J1ZmZlcigpXHJcbiAgfSBlbHNlIHtcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHRleHQyU1ZHKFxyXG4gICAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgIHRleHQsXHJcbiAgICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgICB3YXRlcm1hcmtGb250UGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGhcclxuICAgIClcclxuICB9XHJcbiAgY29uc3QgeyB3aWR0aDogd2F0ZXJtYXJrV2lkdGgsIGhlaWdodDogd2F0ZXJtYXJrSGVpZ2h0IH0gPSBhd2FpdCBnZXRTaXplKFxyXG4gICAgd2F0ZXJtYXJrXHJcbiAgKVxyXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZVdpZHRoID0gTWF0aC5mbG9vcihpbWdXaWR0aCAqIGZvcmNlTnVtYmVyKHdhdGVybWFya1NjYWxlUmF0aW8pKVxyXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZUhlaWdodCA9IE1hdGguZmxvb3IoXHJcbiAgICAod2F0ZXJtYXJrUmVzaXplV2lkdGggKiB3YXRlcm1hcmtIZWlnaHQpIC8gd2F0ZXJtYXJrV2lkdGhcclxuICApXHJcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKHdhdGVybWFyaylcclxuICAgIC5yZXNpemUod2F0ZXJtYXJrUmVzaXplV2lkdGgsIHdhdGVybWFya1Jlc2l6ZUhlaWdodCwge1xyXG4gICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICB9KVxyXG4gICAgLnJvdGF0ZSh3YXRlcm1hcmtEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRTaXplIChpbWFnZTogQnVmZmVyKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0+IHtcclxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHNoYXJwKGltYWdlKS5tZXRhZGF0YSgpXHJcbiAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoIHx8IDIwMCwgaGVpZ2h0OiBoZWlnaHQgfHwgMjAwIH1cclxufVxyXG5cclxuY29uc3QgdmFsaWRQYXJhbSA9ICguLi5wYXJhbXM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIHBhcmFtcy5ldmVyeShwYXJhbSA9PiB7XHJcbiAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbSAhPT0gJydcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbSA+IDBcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbSkubGVuZ3RoID4gMFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCA9IFtcclxuICAnYXZpZicsXHJcbiAgJ2R6JyxcclxuICAnZml0cycsXHJcbiAgJ2dpZicsXHJcbiAgJ2hlaWYnLFxyXG4gICdpbnB1dCcsXHJcbiAgJ2pwZWcnLFxyXG4gICdqcGcnLFxyXG4gICdqcDInLFxyXG4gICdqeGwnLFxyXG4gICdtYWdpY2snLFxyXG4gICdvcGVuc2xpZGUnLFxyXG4gICdwZGYnLFxyXG4gICdwbmcnLFxyXG4gICdwcG0nLFxyXG4gICdyYXcnLFxyXG4gICdzdmcnLFxyXG4gICd0aWZmJyxcclxuICAndGlmJyxcclxuICAndicsXHJcbiAgJ3dlYnAnXHJcbl1cclxuXHJcbmNvbnN0IHZhbGlkT3V0cHV0Rm9ybWF0ID0gKGZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0LmluY2x1ZGVzKGZvcm1hdClcclxufVxyXG5cclxuY29uc3QgaW1hZ2VFeHRMaXN0ID0gWydqcGcnLCAnanBlZycsICdwbmcnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHRyeSB7XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICBpbWFnZSA9IHNoYXJwKGF3YWl0IEFkZFdhdGVybWFyayhcclxuICAgICAgaW1nLFxyXG4gICAgICBvcHRpb25zLndhdGVybWFya1R5cGUgfHwgJ3RleHQnLFxyXG4gICAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya0RlZ3JlZSksXHJcbiAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVGV4dCxcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtTY2FsZVJhdGlvKSxcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtDb2xvcixcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgIG9wdGlvbnMud2F0ZXJtYXJrUG9zaXRpb25cclxuICAgICksIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXHJcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBhZGQgd2F0ZXJtYXJrIGVycm9yOiAke2Vycm9yfWApXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gdHlwZW9mIG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaiA9PT0gJ3N0cmluZycgPyBzYWZlUGFyc2Uob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKSA6IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxyXG4gIHJldHVybiB7XHJcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxyXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcclxuICAgIGNvbnZlcnRGb3JtYXQ6IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJyxcclxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxyXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXHJcbiAgICByZVNpemVXaWR0aDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVXaWR0aCksXHJcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxyXG4gICAgcmVTaXplUGVyY2VudDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVQZXJjZW50KSxcclxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxyXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcclxuICAgIGlzRmxvcDogb3B0aW9ucy5pc0Zsb3AgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnLFxyXG4gICAgZm9ybWF0Q29udmVydE9iajogZm9ybWF0Q29udmVydE9iaiB8fCB7fVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGxldCBxdWFsaXR5ID0gMTAwXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcclxuICAgICAgcXVhbGl0eSA9IG9wdGlvbnMucXVhbGl0eSFcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XHJcbiAgICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucmVTaXplUGVyY2VudCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcclxuICAgICAgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnZmlsbCdcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVIZWlnaHQgLyBpbWFnZUhlaWdodFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZVdpZHRoIC8gaW1hZ2VXaWR0aFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLnJvdGF0ZShvcHRpb25zLnJvdGF0ZURlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzRmxpcCkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLmZsaXAoKVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNGbG9wKSB7XHJcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxvcCgpXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnMsIHJhd0Zvcm1hdCkgYXMgYW55XHJcbiAgICAgIGlmIChuZXdGb3JtYXQgIT09IHJhd0Zvcm1hdCkge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgICBxdWFsaXR5LFxyXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyYXdGb3JtYXQgJiYgdmFsaWRPdXRwdXRGb3JtYXQocmF3Rm9ybWF0KSkge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQocmF3Rm9ybWF0IGFzIGFueSwge1xyXG4gICAgICAgICAgcXVhbGl0eSxcclxuICAgICAgICAgIG1vempwZWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQoJ2pwZycsIHtcclxuICAgICAgICAgIHF1YWxpdHksXHJcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIHByb2Nlc3MgZXJyb3I6ICR7ZXJyb3J9YClcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRGb3JtYXQgKG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCByYXdGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucyB8fCB7fSlcclxuICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgaWYgKHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiAnZ2lmJ1xyXG4gIGxldCBuZXdGb3JtYXQgPSBvcHRpb25zPy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgaWYgKG9wdGlvbnM/LmZvcm1hdENvbnZlcnRPYmogJiYgT2JqZWN0LmtleXMob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gb3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqXHJcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqS2V5cyA9IE9iamVjdC5rZXlzKGZvcm1hdENvbnZlcnRPYmopXHJcbiAgICBpZiAoZm9ybWF0Q29udmVydE9iaktleXMuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICBuZXdGb3JtYXQgPSBmb3JtYXRDb252ZXJ0T2JqW3Jhd0Zvcm1hdF1cclxuICAgICAgaWYgKCF2YWxpZE91dHB1dEZvcm1hdChuZXdGb3JtYXQpKSB7XHJcbiAgICAgICAgbmV3Rm9ybWF0ID0gJ2pwZydcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob3B0aW9ucz8ucGljQmVkID09PSAnaW1ndXInICYmIG5ld0Zvcm1hdCA9PT0gJ3dlYnAnKSB7XHJcbiAgICBuZXdGb3JtYXQgPSAnanBnJ1xyXG4gIH1cclxuICByZXR1cm4gbmV3Rm9ybWF0XHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnLCAnZ2lmJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpICYmIChmaWxlRXh0ICE9PSAnc3ZnJylcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5lZWRDb21wcmVzcyA9IChjb21wcmVzc09wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCBmaWxlRXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCBub3JtYWxpemVkRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMobm9ybWFsaXplZEV4dCkgfHwgIWNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBjb25zdCB7XHJcbiAgICBxdWFsaXR5LFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQsXHJcbiAgICByZVNpemVQZXJjZW50LFxyXG4gICAgaXNSZVNpemUsXHJcbiAgICByZVNpemVIZWlnaHQsXHJcbiAgICByZVNpemVXaWR0aCxcclxuICAgIGlzUm90YXRlLFxyXG4gICAgcm90YXRlRGVncmVlLFxyXG4gICAgaXNDb252ZXJ0LFxyXG4gICAgY29udmVydEZvcm1hdCxcclxuICAgIGlzRmxpcCxcclxuICAgIGlzRmxvcFxyXG4gIH0gPSBmb3JtYXRPcHRpb25zKGNvbXByZXNzT3B0aW9ucylcclxuXHJcbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemUgJiYgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzRmxpcCB8fCBpc0Zsb3ApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc0NvbnZlcnQpIHtcclxuICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcclxuICAgIHJldHVybiBmaWxlRXh0ICE9PSBuZXdGb3JtYXRcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpIHx8IGZpbGVFeHQgPT09ICdzdmcnKSB7XHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcsIHtcclxuICAgIGFuaW1hdGVkOiB0cnVlXHJcbiAgfSkudG9CdWZmZXIoKVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcclxuICAgICAgLmFsaWFzKCd1JylcclxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXHJcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncXVhbGl0eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0NvbnZlcnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjb252ZXJ0Rm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnYXZpZicsICdkeicsICdmaXRzJywgJ2dpZicsICdoZWlmJywgJ2lucHV0JywgJ2pwZWcnLCAnanBnJywgJ2pwMicsICdqeGwnLCAnbWFnaWNrJywgJ29wZW5zbGlkZScsICdwZGYnLCAncG5nJywgJ3BwbScsICdyYXcnLCAnc3ZnJywgJ3RpZmYnLCAndGlmJywgJ3YnLCAnd2VicCddLFxyXG4gICAgICBkZWZhdWx0OiAnanBnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVIZWlnaHQgfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2tpcFJlU2l6ZU9mU21hbGxJbWcnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGbGlwJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxpcCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzRmxvcCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlbW92ZUV4aWYgfHwgZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNBZGRXYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNBZGRXYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUeXBlJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWyd0ZXh0JywgJ2ltYWdlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Z1bGxTY3JlZW5XYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ZvbnRQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrU2NhbGVSYXRpbycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtTY2FsZVJhdGlvIHx8IDAuMTVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtDb2xvcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrSW1hZ2VQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrUG9zaXRpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2Zvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5hYmxlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5hYmxlIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcclxuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXHJcbmltcG9ydCByZW5hbWUgZnJvbSAnLi4vYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUnXHJcblxyXG4vLyBoYW5kbGUgbW9kdWxlcyBjb25maWcgLT4gc2F2ZSB0byBwaWNnbyBjb25maWcgZmlsZVxyXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXHJcbiAgY29uc3QgY29uZmlnTmFtZSA9IG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xyXG4gICAgPyBgcGljQmVkLiR7bmFtZX1gXHJcbiAgICA6IG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJ1xyXG4gICAgICA/IGB0cmFuc2Zvcm1lci4ke25hbWV9YFxyXG4gICAgICA6IG1vZHVsZSA9PT0gJ2J1aWxkaW4nXHJcbiAgICAgICAgPyBgYnVpbGRJbi4ke25hbWV9YFxyXG4gICAgICAgIDogbmFtZVxyXG4gIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXHJcbiAgfSlcclxuICBpZiAobW9kdWxlID09PSAndXBsb2FkZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQuY3VycmVudCc6IG5hbWUsXHJcbiAgICAgICdwaWNCZWQudXBsb2FkZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH0gZWxzZSBpZiAobW9kdWxlID09PSAndHJhbnNmb3JtZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc2V0dGluZyA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3NldCcpXHJcbiAgICAgIC5hbGlhcygnY29uZmlnJylcclxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3JlbmFtZScpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdidWlsZGluJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFsnY29tcHJlc3MnLCAnd2F0ZXJtYXJrJywgJ3JlbmFtZSddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGJ1aWxkaW4gbW9kdWxlJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3JlbmFtZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vICR7bW9kdWxlfSBuYW1lZCAke25hbWV9YCk7IHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHttb2R1bGV9YCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBDaG9vc2UgYShuKSAke21vZHVsZX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQoYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlclttb2R1bGVdKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ3BsdWdpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgcGx1Z2luJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbikhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIGFuc3dlci5wbHVnaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpOyByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUgPT09ICdwbHVnaW4nKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb25maWcsIHBsZWFzZSBydW4gXFwncGljZ28gdXNlIHBsdWdpbnNcXCcnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW4sIFVuZGVmaW5hYmxlLCBJQ0xJQ29uZmlncywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgdXNlOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXNlJylcclxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VzZSBtb2R1bGVzIG9mIHBpY2dvJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHByb21wdHM6IGFueVtdID0gW11cclxuICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJQ0xJQ29uZmlncyA9IHtcclxuICAgICAgICAgICAgICB1cGxvYWRlcjoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3VwbG9hZGVyJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYW4gdXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci51cGxvYWRlci5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYSB0cmFuc2Zvcm1lcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBwbHVnaW5zOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBwbHVnaW5zJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7aXRlbX1gKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ1ttb2R1bGVdKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9tcHRzLnB1c2goY29uZmlnW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJyk7IHJldHVyblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwcm9tcHRzID0gT2JqZWN0LmtleXMoY29uZmlnKS5tYXAoKGl0ZW06IHN0cmluZykgPT4gY29uZmlnW2l0ZW1dKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGZvciBwbHVnaW5zIG9wdGlvbiBmcm9tIEFycmF5IHRvIG9iamVjdFxyXG4gICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gY3R4LmdldENvbmZpZzxJU3RyaW5nS2V5TWFwPGJvb2xlYW4+PigncGljZ29QbHVnaW5zJylcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwbHVnaW5zKS5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xyXG4gICAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICdwaWNCZWQuY3VycmVudCc6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVxyXG4iLCJpbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcHJveHk6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5vcHRpb24oJy1wLCAtLXByb3h5IDx1cmw+JywgJ3NldCBwcm94eSBmb3IgdXBsb2FkaW5nJywgKHByb3h5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgICdwaWNCZWQucHJveHknOiBwcm94eVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwcm94eVxyXG4iLCJpbXBvcnQgbWF0Y2ggZnJvbSAnbWluaW1hdGNoJ1xyXG5cclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZ2xvYmJ5IGZyb20gJ2dsb2JieSdcclxuaW1wb3J0IGVqcyBmcm9tICdlanMnXHJcblxyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxyXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcclxuICogQHBhcmFtIHtJT3B0aW9uc30gb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXHJcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXHJcbiAgICBsZXQgYW5zd2VycyA9IHt9XHJcbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXHJcbiAgICB9XHJcbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxyXG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGxldCBnbG9iID0gJydcclxuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XHJcbiAgICAgICAgICBnbG9iID0gaXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKGdsb2IpIHsgLy8gZmluZCBhIGZpbHRlciBleHByZXNzaW9uXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChfZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGZpbHRlcnMnIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4IFBpY0dvXHJcbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cclxuICogQHBhcmFtIGRhdGEgb3B0aW9ucyBkYXRhXHJcbiAqL1xyXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzLCBuby1uZXctZnVuYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxyXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBmbihkYXRhKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVBhdGhcclxuICovXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IG9wdGlvbnNQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgJ2luZGV4LmpzJylcclxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBvcHRpb25zID0gcmVxdWlyZShvcHRpb25zUGF0aClcclxuICAgIHJldHVybiBvcHRpb25zXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcclxuICogQHBhcmFtIHthcnJheX0gZmlsZXNcclxuICovXHJcbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IGZpbGVUcmVlOiBJRmlsZVRyZWUgPSB7fVxyXG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXHJcbiAgICBjb25zdCBjb250ZW50ID0gZWpzLnJlbmRlcihmaWxlLCBvcHRpb25zKVxyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSB8fCAvW15cXHNdLy50ZXN0KGNvbnRlbnQpKSB7XHJcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiBmaWxlVHJlZVxyXG59XHJcblxyXG4vKipcclxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCB3cml0ZUZpbGVUcmVlID0gKGRpcjogc3RyaW5nLCBmaWxlczogYW55KTogdm9pZCA9PiB7XHJcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBmaWx0ZXJzLFxyXG4gIGdlbmVyYXRlLFxyXG4gIHJlbmRlcixcclxuICB3cml0ZUZpbGVUcmVlXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgcm0gZnJvbSAncmltcmFmJ1xyXG5cclxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbml0VXRpbHMnXHJcbmltcG9ydCB0eXBlIHsgSU9wdGlvbnMsIElQbHVnaW4sIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcnVuID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIC8vIGNvbnN0IG5hbWUgPSBvcHRpb25zLmluUGxhY2UgPyBwYXRoLnJlbGF0aXZlKCcuLi8nLCBwcm9jZXNzLmN3ZCgpKSA6IG9wdGlvbnMucHJvamVjdFxyXG4gIGlmIChvcHRpb25zLm9mZmxpbmUpIHsgLy8gb2ZmbGluZSBtb2RlXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRlbXBsYXRlKSkge1xyXG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcclxuICAgIH1cclxuICB9IGVsc2UgeyAvLyBvbmxpbmUgbW9kZVxyXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXHJcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXHJcbiAgICAgIDogb3B0aW9ucy50ZW1wbGF0ZVxyXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZG93bmxvYWQgdGVtcGxhdGUgJiBnZW5lcmF0ZVxyXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxyXG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XHJcbiAgICBybS5zeW5jKG9wdGlvbnMudG1wKVxyXG4gIH1cclxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXHJcbiAgZG93bmxvYWQob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy50bXAsIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfSwgKGVycjogRXJyb3IpID0+IHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2xpc3QvdGVtcGxhdGVzJywgdGVtcGxhdGUucmVwbGFjZSgvWy86XS9nLCAnLScpKSAvLyBmb3IgY2FjaGluZyB0ZW1wbGF0ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgcHJvamVjdCxcclxuICAgICAgICAgICAgICBoYXNTbGFzaCxcclxuICAgICAgICAgICAgICBpblBsYWNlLFxyXG4gICAgICAgICAgICAgIGRlc3QsXHJcbiAgICAgICAgICAgICAgY2xvbmUsXHJcbiAgICAgICAgICAgICAgdG1wLFxyXG4gICAgICAgICAgICAgIG9mZmxpbmVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxyXG4gICAgICAgICAgICBpZiAoaW5QbGFjZSB8fCBmcy5leGlzdHNTeW5jKGRlc3QpKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQoW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGluUGxhY2VcclxuICAgICAgICAgICAgICAgICAgICA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PydcclxuICAgICAgICAgICAgICAgICAgICA6ICdUYXJnZXQgZGlyZWN0b3J5IGV4aXN0cy4gQ29udGludWU/JyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ29rJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0pLnRoZW4oKGFuc3dlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcHJvamVjdCBpcyBnaXZlblxyXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJy0taGVscCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIGFuIG9mZmljaWFsIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHN0cmFpZ2h0IGZyb20gYSBnaXRodWIgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpbml0XHJcbiIsImltcG9ydCB0eXBlIHsgSVBsdWdpbiwgSVBpY0dvLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaTE4bicpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIGxhbmd1YWdlLCB6aC1DTiwgemgtVFcsIGVuJylcclxuICAgICAgLmFjdGlvbihhc3luYyAobGFuZzogc3RyaW5nID0gJycpID0+IHtcclxuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcclxuICAgICAgICBpZiAoIWxhbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgbmFtZTogJ2kxOG4nLFxyXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcclxuICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxzdHJpbmc+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgbGFuZyA9IGFuc3dlci5pMThuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbGlzdC5pbmNsdWRlcyhsYW5nKSkge1xyXG4gICAgICAgICAgY3R4LmxvZy53YXJuKCdObyBzdWNoIGxhbmd1YWdlJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UobGFuZylcclxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGkxOG5cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGx1Z2luLCBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IHR5cGUgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcclxuXHJcbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBsdWdpbiwgSUNvbW1hbmRlciwgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBJUGx1Z2luPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuXHJcbiAgcHJvZ3JhbTogQ29tbWFuZFxyXG4gIGlucXVpcmVyOiBJbnF1aXJlclxyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcclxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvZ3JhbVxyXG4gICAgICAudmVyc2lvbihwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicpXHJcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIGRlYnVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9wdGlvbignLXMsIC0tc2lsZW50JywgJ3NpbGVudCBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJ2NvbW1hbmQ6KicsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoYEludmFsaWQgY29tbWFuZDogJHt0aGlzLnByb2dyYW0uYXJncy5qb2luKCcgJyl9XFxuU2VlIC0taGVscCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy5gKVxyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICB9KVxyXG5cclxuICAgIC8vIGJ1aWx0LWluIGNvbW1hbmRzXHJcbiAgICBjb21tYW5kZXJzKHRoaXMuY3R4KVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIgKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gcGx1Z2luIGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcclxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcclxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxyXG4gICAgaWYgKGN1cnJlbnRQbHVnaW5OYW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhjdXJyZW50UGx1Z2luTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoY3VycmVudFBsdWdpbk5hbWUsIFtpZF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXIgKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxyXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZENvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpdGVtLmhhbmRsZSh0aGlzLmN0eClcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kZXJcclxuIiwiaW1wb3J0IHBsdWdpbkhhbmRsZXIgZnJvbSAnLi9wbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xyXG5pbXBvcnQgdXBsb2FkIGZyb20gJy4vdXBsb2FkJ1xyXG5pbXBvcnQgc2V0dGluZyBmcm9tICcuL3NldHRpbmcnXHJcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXHJcbmltcG9ydCBwcm94eSBmcm9tICcuL3Byb3h5J1xyXG5pbXBvcnQgaW5pdCBmcm9tICcuL2luaXQnXHJcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCAoY3R4OiBJUGljR28pOiB2b2lkID0+IHtcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcclxuICBjdHguY21kLnJlZ2lzdGVyKCdjb25maWcnLCBjb25maWcpXHJcbiAgY3R4LmNtZC5yZWdpc3Rlcignc2V0dGluZycsIHNldHRpbmcpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VzZScsIHVzZSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwcm94eScsIHByb3h5KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2kxOG4nLCBpMThuKVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcclxuICBzdWNjZXNzID0gJ3N1Y2Nlc3MnLFxyXG4gIGluZm8gPSAnaW5mbycsXHJcbiAgd2FybiA9ICd3YXJuJyxcclxuICBlcnJvciA9ICdlcnJvcidcclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgYnkgdXNlcnNcclxuICovXHJcbmV4cG9ydCBlbnVtIElCdWlsZEluRXZlbnQge1xyXG4gIFVQTE9BRF9QUk9HUkVTUyA9ICd1cGxvYWRQcm9ncmVzcycsXHJcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXHJcbiAgQkVGT1JFX1RSQU5TRk9STSA9ICdiZWZvcmVUcmFuc2Zvcm0nLFxyXG4gIEJFRk9SRV9VUExPQUQgPSAnYmVmb3JlVXBsb2FkJyxcclxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxyXG4gIEZJTklTSEVEID0gJ2ZpbmlzaGVkJyxcclxuICBJTlNUQUxMID0gJ2luc3RhbGwnLFxyXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxyXG4gIFVQREFURSA9ICd1cGRhdGUnLFxyXG4gIE5PVElGSUNBVElPTiA9ICdub3RpZmljYXRpb24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cclxuICovXHJcbmV4cG9ydCBlbnVtIElCdXNFdmVudCB7XHJcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXHJcblxyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHtcclxuICBJTG9nQXJndlR5cGUsXHJcbiAgSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yLFxyXG4gIFVuZGVmaW5hYmxlLFxyXG4gIElMb2dDb2xvcixcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHb1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBmb3JjZU51bWJlciwgaXNEZXYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcblxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsZXZlbCA9IHtcclxuICAgIFtJTG9nVHlwZS5zdWNjZXNzXTogJ2dyZWVuJyxcclxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxyXG4gICAgW0lMb2dUeXBlLndhcm5dOiAneWVsbG93JyxcclxuICAgIFtJTG9nVHlwZS5lcnJvcl06ICdyZWQnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgcHJpdmF0ZSBsb2dQYXRoITogc3RyaW5nXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMb2cgKHR5cGU6IElMb2dUeXBlLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICAvLyBjaGVjayBjb25maWcuc2lsZW50XHJcbiAgICB0aGlzLmxvZ0xldmVsID0gdGhpcy5jdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sb2dMZXZlbCcpXHJcbiAgICBpZiAoIXRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2lsZW50JykgJiYgdGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGNoYWxrW3RoaXMubGV2ZWxbdHlwZV0gYXMgSUxvZ0NvbG9yXShgW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XTpgKVxyXG4gICAgICBjb25zb2xlLmxvZyhsb2dIZWFkZXIsIC4uLm1zZylcclxuICAgICAgdGhpcy5sb2dQYXRoID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gZml4IGxvZyBmaWxlIGlzIHRvbyBsYXJnZSwgbm93IHRoZSBsb2cgZmlsZSdzIGRlZmF1bHQgc2l6ZSBpcyAxMCBNQlxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdNc2cgPSBgTG9nIGZpbGUgaXMgdG9vIGxhcmdlICg+ICR7KHJlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISkgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlTG9nRmlsZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlTG9nKHRoaXMubG9nUGF0aCwgdHlwZSwgLi4ubXNnKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHdoeT8/P1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIGNoZWNraW5nIGxvZyBmaWxlIHNpemUnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dGaWxlSXNMYXJnZSAobG9nUGF0aDogc3RyaW5nKToge1xyXG4gICAgaXNMYXJnZTogYm9vbGVhblxyXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcclxuICB9IHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZUxpbWl0ID0gZm9yY2VOdW1iZXIodGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPG51bWJlcj4+KCdzZXR0aW5ncy5sb2dGaWxlU2l6ZUxpbWl0JykgfHwgMTApICogMTAyNCAqIDEwMjQgLy8gMTAgTUIgZGVmYXVsdFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcclxuICAgICAgICBsb2dGaWxlU2l6ZSxcclxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzTGFyZ2U6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlTG9nRmlsZSAobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXHJcbiAgICAgIGZzLmNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdyaXRlTG9nIChsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGxvZyA9IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyl9IFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV0gYFxyXG4gICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFcnJvciAmJiB0eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgICBsb2cgKz0gYFxcbi0tLS0tLUVycm9yIFN0YWNrIEJlZ2luLS0tLS0tXFxuJHt1dGlsLmZvcm1hdChpdGVtPy5zdGFjayl9XFxuLS0tLS0tLUVycm9yIFN0YWNrIEVuZC0tLS0tLS0gYFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtLCBudWxsLCAyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbG9nICs9IGAke2l0ZW0gYXMgc3RyaW5nfSBgXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBsb2cgKz0gJ1xcbidcclxuICAgICAgLy8gQSBzeW5jaHJvbml6ZWQgYXBwcm9hY2ggdG8gYXZvaWQgbG9nIG1zZyBzZXF1ZW5jZSBlcnJvcnNcclxuICAgICAgZnMuYXBwZW5kRmlsZVN5bmMobG9nUGF0aCwgbG9nKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gd3JpdGluZyBsb2cgZmlsZScsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nTGV2ZWwgKHR5cGU6IHN0cmluZywgbGV2ZWw6IHVuZGVmaW5lZCB8IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobGV2ZWwgPT09IHVuZGVmaW5lZCB8fCBsZXZlbCA9PT0gJ2FsbCcpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGxldmVsKSkge1xyXG4gICAgICByZXR1cm4gbGV2ZWwuc29tZSgoaXRlbTogc3RyaW5nKSA9PiAoaXRlbSA9PT0gdHlwZSB8fCBpdGVtID09PSAnYWxsJykpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHlwZSA9PT0gbGV2ZWxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN1Y2Nlc3MgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGluZm8gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGVycm9yICguLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5lcnJvciwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgd2FybiAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZGVidWcgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB0eXBlIHtcclxuICBJUmVzdWx0LFxyXG4gIElQcm9jZXNzRW52LFxyXG4gIElQbHVnaW5Qcm9jZXNzUmVzdWx0LFxyXG4gIElQbHVnaW5IYW5kbGVyLFxyXG4gIElQbHVnaW5IYW5kbGVyT3B0aW9ucyxcclxuICBVbmRlZmluYWJsZSxcclxuICBJUGljR28sXHJcbiAgSVBsdWdpbkhhbmRsZXJSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGdldFByb2Nlc3NQbHVnaW5OYW1lLCBnZXROb3JtYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vaTE4bi96aC1DTidcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xyXG4gIC8vIFRoYW5rcyB0byBmZWZsb3cgLT4gaHR0cHM6Ly9naXRodWIuY29tL2ZlZmxvdy9mZWZsb3cvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2luc3RhbGwvcGx1Z2luLmpzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGFzeW5jIGluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcclxuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAvLyBkZXRlY3QgaWYgaGFzIGFscmVhZHkgaW5zdGFsbGVkXHJcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcclxuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChpdGVtLnBrZ05hbWUpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljTGlzdCBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCByZXNvbHZlIGZyb20gJ3Jlc29sdmUnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPigpXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlUGF0aCkpIHtcclxuICAgICAgY29uc3QgcGtnID0ge1xyXG4gICAgICAgIG5hbWU6ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ3BpY2dvLXBsdWdpbnMnLFxyXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vS3VpbmdzbWlsZS9QaWNMaXN0LUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcblxyXG5jb25zdCBldmVudEJ1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5leHBvcnQge1xyXG4gIGV2ZW50QnVzXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jICovXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHR5cGUgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5cclxuaW1wb3J0IHR5cGUgeyBJUGljR28sIFVuZGVmaW5hYmxlLCBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgSUNvbmZpZywgSVJlcXVlc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJUmVzcG9uc2UsIElGdWxsUmVzcG9uc2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcblxyXG5jb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcclxuICBtYXhWZXJzaW9uOiAnVExTdjEuMicsXHJcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxufSlcclxuXHJcbi8vIHRoYW5rcyBmb3IgaHR0cHM6Ly9naXRodWIuZGV2L3JlcXVlc3QvcmVxdWVzdC9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YSAoZm9ybTogRm9ybURhdGEsIGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXHJcbiAgfSBlbHNlIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvciAob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XHJcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbn0ge1xyXG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXHJcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcclxuICAgIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG4gIH0gPSB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgdXJsOiAob3B0aW9ucy51cmwgYXMgc3RyaW5nKSB8fCAnJyxcclxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gIH1cclxuICAvLyB1c2VyIHJlcXVlc3QgY29uZmlnIHByb3h5XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XHJcbiAgICBpZiAodHlwZW9mIHByb3h5T3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcclxuICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zPy5wb3J0LCAxMClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0LCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICgnZm9ybURhdGEnIGluIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5mb3JtRGF0YVtrZXldXHJcbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcclxuICAgIH1cclxuICAgIG9wdC5kYXRhID0gZm9ybVxyXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25cclxuICAgIGRlbGV0ZSBvcHQuZm9ybURhdGFcclxuICB9XHJcbiAgaWYgKCdib2R5JyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQuZGF0YSA9IG9wdGlvbnMuYm9keVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvbnNcclxuICAgIGRlbGV0ZSBvcHQuYm9keVxyXG4gIH1cclxuICBpZiAoJ3FzJyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgfVxyXG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXHJcbiAgcmV0dXJuIG9wdFxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yIChyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXNwb25zZSxcclxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlRXJyb3JIYW5kbGVyIChlcnJvcjogYW55KSB7XHJcbiAgY29uc3QgZXJyb3JPYmogPSB7XHJcbiAgICBtZXRob2Q6IGVycm9yPy5jb25maWc/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnJyxcclxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxyXG4gICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICcnLFxyXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcclxuICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgYm9keTogZXJyb3I/LnJlc3BvbnNlPy5kYXRhIHx8ICcnXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvck9iailcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3QgaW1wbGVtZW50cyBJUmVxdWVzdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xyXG4gIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ID0ge31cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gICAgZXZlbnRCdXMub24oSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIChkYXRhOiBJQ29uZmlnQ2hhbmdlUGF5bG9hZDxzdHJpbmcgfCBJQ29uZmlnWydwaWNCZWQnXT4pID0+IHtcclxuICAgICAgc3dpdGNoIChkYXRhLmNvbmZpZ05hbWUpIHtcclxuICAgICAgICBjYXNlICdwaWNCZWQnOlxyXG4gICAgICAgICAgaWYgKChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKT8ucHJveHkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm94eSA9IChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKS5wcm94eVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdwaWNCZWQucHJveHknOlxyXG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxyXG4gICAgaWYgKHByb3h5KSB7XHJcbiAgICAgIHRoaXMucHJveHkgPSBwcm94eVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSAoKTogQXhpb3NSZXF1ZXN0Q29uZmlnWydwcm94eSddIHwgZmFsc2Uge1xyXG4gICAgaWYgKHRoaXMucHJveHkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKHRoaXMucHJveHkpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0IHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8vICM2NCBkeW5hbWljIGdldCBwcm94eSB2YWx1ZVxyXG4gIHJlcXVlc3Q8VCwgVSBleHRlbmRzIChcclxuICAgIElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgSU9sZFJlcU9wdGlvbnMgPyBJT2xkUmVxT3B0aW9ucyA6IElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgQXhpb3NSZXF1ZXN0Q29uZmlnID8gQXhpb3NSZXF1ZXN0Q29uZmlnIDogbmV2ZXJcclxuICApPiAob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XHJcbiAgICB0aGlzLm9wdGlvbnMucHJveHkgPSB0aGlzLmhhbmRsZVByb3h5KClcclxuICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Q29udGVudExlbmd0aCA9IEluZmluaXR5XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb3h5ICYmIG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMucHJveHkuaG9zdCxcclxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wcm94eS5wb3J0XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLm9wdGlvbnMucHJveHkgPSBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSBodHRwc0FnZW50XHJcbiAgICB9XHJcbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xyXG4gICAgLy8gdGhpcy5vcHRpb25zIGlzIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGNvbnN0IGluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucylcclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXHJcblxyXG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIG9sZCByZXF1ZXN0IG9wdGlvbnMgdG8gbmV3IG9wdGlvbnNcclxuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxyXG5cclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcclxuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gJydcclxuICAgICAgaWYgKG9iaj8uaGVhZGVycz8uY29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5jb250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uQ29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5Db250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uWydjb250ZW50LXR5cGUnXSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ11cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XHJcbiAgICAgICAgb2JqLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqXHJcbiAgICB9KVxyXG4gICAgaWYgKCdyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZScgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XHJcbiAgICAgICAgaWYgKG9wdC5fX2lzT2xkT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFxyXG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5pbXBvcnQgdHlwZSB7IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIElMaWZlY3ljbGVQbHVnaW5zLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUltZ0luZm8gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZ2V0VVJMRmlsZSwgaGFuZGxlVXJsRW5jb2RlLCBpbWFnZVByb2Nlc3MsIGlzVXJsLCBuZWVkQ29tcHJlc3MsIG5lZWRBZGRXYXRlcm1hcmssIGltYWdlQWRkV2F0ZXJNYXJrLCByZW1vdmVFeGlmLCByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcsIGdldENvbnZlcnRlZEZvcm1hdCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5cclxuY29uc3Qgd2F0ZXJtYXJrTXNnID0gJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnXHJcbmNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXHJcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHJlYWRvbmx5IHR0Zkxpbms6IHN0cmluZyA9ICdodHRwczovL3JlbGVhc2UucGljbGlzdC5jbi9zaW1oZWkudHRmJ1xyXG4gIHR0ZlBhdGg6IHN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICBjb25zdCBpbWdGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnKVxyXG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhpbWdGaWxlUGF0aClcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhvdXRwdXREaXIpXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSByZXR1cm4gdHJ1ZVxyXG4gICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlLicpXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy50dGZMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMudHRmUGF0aCwgcmVzLmRhdGEpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoZWxwR2V0T3B0aW9uIChjdHg6IElQaWNHbyk6IHtcclxuICAgIGNvbXByZXNzT3B0aW9uczogVW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+XHJcbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+XHJcbiAgfSB7XHJcbiAgICBjb25zdCBjb21wcmVzc09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPj4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPj4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF1cGxvYWRlciAmJiBjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9ICdzbW1zJ1xyXG4gICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9IHR5cGVcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbXByZXNzT3B0aW9ucyxcclxuICAgICAgd2F0ZXJtYXJrT3B0aW9uc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnQgKGlucHV0OiBhbnlbXSk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICAvLyBlbnN1cmUgZXZlcnkgdXBsb2FkIHByb2Nlc3MgaGFzIGFuIHVuaXF1ZSBjb250ZXh0XHJcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW1hZ2VzIGlucHV0XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcclxuICAgICAgfVxyXG4gICAgICBjdHguaW5wdXQgPSBpbnB1dFxyXG4gICAgICBjdHgucmF3SW5wdXRQYXRoID0gW10gYXMgc3RyaW5nW11cclxuICAgICAgY3R4LnJhd0lucHV0ID0gY2xvbmVEZWVwKGlucHV0KVxyXG4gICAgICBjdHgub3V0cHV0ID0gW10gYXMgSUltZ0luZm9bXVxyXG4gICAgICBjb25zdCB7IGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucyB9ID0gdGhpcy5oZWxwR2V0T3B0aW9uKGN0eClcclxuXHJcbiAgICAgIGlmIChjb21wcmVzc09wdGlvbnMgfHwgd2F0ZXJtYXJrT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbUlzVXJsID0gaXNVcmwoaXRlbSlcclxuICAgICAgICAgIGNvbnN0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvID0gaXRlbUlzVXJsID8gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpIDogeyBzdWNjZXNzOiBmYWxzZSB9XHJcbiAgICAgICAgICBpZiAoaXRlbUlzVXJsICYmICghaW5mby5zdWNjZXNzIHx8ICFpbmZvLmJ1ZmZlcikpIHJldHVyblxyXG5cclxuICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlcjogVW5kZWZpbmFibGU8QnVmZmVyPlxyXG4gICAgICAgICAgbGV0IGlzU2tpcCA9IGZhbHNlXHJcbiAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXHJcbiAgICAgICAgICBjb25zdCBleHRlbnRpb24gPSBpdGVtSXNVcmwgPyBpbmZvLmV4dG5hbWUgfHwgJycgOiBwYXRoLmV4dG5hbWUoaXRlbSlcclxuICAgICAgICAgIGNvbnN0IGZpbGVCdWZmZXI6IEJ1ZmZlciA9IGl0ZW1Jc1VybCA/IGluZm8uYnVmZmVyISA6IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxyXG4gICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgZXh0ZW50aW9uKSkge1xyXG4gICAgICAgICAgICBpZiAoISh3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtGb250UGF0aCB8fCB3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICBpc1NraXAgPSB0cnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaXNTa2lwKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZpbGVCdWZmZXIsIHdhdGVybWFya09wdGlvbnMhLCB0aGlzLnR0ZlBhdGgsIGN0eC5sb2cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBleHRlbnRpb24pKSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgaWYgKCFpdGVtSXNVcmwgJiYgKGV4dGVudGlvbiA9PT0gJy5oZWljJyB8fCBleHRlbnRpb24gPT09ICcuaGVpZicpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcjogZmlsZUJ1ZmZlcixcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ0pQRUcnLFxyXG4gICAgICAgICAgICAgICAgcXVhbGl0eTogMVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0uanBnYClcclxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSwgY29tcHJlc3NPcHRpb25zISwgJy5qcGcnLCBjdHgubG9nKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGZpbGVCdWZmZXIsIGNvbXByZXNzT3B0aW9ucyEsIGV4dGVudGlvbiwgY3R4LmxvZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGZpbGVCdWZmZXIsIGV4dGVudGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICBsZXQgbmV3RXh0ID0gY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQgPyBnZXRDb252ZXJ0ZWRGb3JtYXQoY29tcHJlc3NPcHRpb25zLCBleHRlbnRpb24pIDogZXh0ZW50aW9uXHJcbiAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcclxuICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBpdGVtSXNVcmxcclxuICAgICAgICAgICAgICA/IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfWBcclxuICAgICAgICAgICAgICAgIDogbmV3IERhdGUoKS5nZXRUaW1lKCl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICA6IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4oXHJcbiAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKGl0ZW0pLFxyXG4gICAgICAgICAgICAgIGl0ZW1Jc1VybFxyXG4gICAgICAgICAgICAgICAgPyBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKVxyXG4gICAgICAgICAgICAgICAgOiBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXHJcbiAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjdHguaW5wdXQpIHtcclxuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGgucHVzaChpdGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBjb25zdCByZW5hbWVDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICAgICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSByZW5hbWVDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xyXG4gICAgICAgIGN0eC5vdXRwdXQgPSBjdHgub3V0cHV0Lm1hcCgoaXRlbTogSUltZ0luZm8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcclxuICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLCBmb3JtYXQsIHVuZGVmaW5lZCwgaXRlbS5iYXNlNjRJbWFnZSA/IGl0ZW0uYmFzZTY0SW1hZ2UgOiBpdGVtLmJ1ZmZlcilcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXHJcbiAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcclxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdXBsb2FkZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB1cGxvYWRlciAtIHNtbXNgKVxyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNtbXNDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xyXG4gIGxldCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIGRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke2RvbWFpbn0vYXBpL3YyL3VwbG9hZGAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIHNtZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHNzbDogJ3RydWUnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxyXG4gIGlmICghc21tc0NvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc21tcyBjb25maWchJylcclxuICB9XHJcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBpbWFnZSwgc21tc0NvbmZpZz8udG9rZW4sIHNtbXNDb25maWc/LmJhY2t1cERvbWFpbilcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5oYXNoXHJcbiAgICAgICAgfSBlbHNlIGlmIChib2R5LmNvZGUgPT09ICdpbWFnZV9yZXBlYXRlZCcgJiYgdHlwZW9mIGJvZHkuaW1hZ2VzID09PSAnc3RyaW5nJykgeyAvLyBkbyBleHRyYSBjaGVjayBzaW5jZSB0aGlzIGVycm9yIHJldHVybiBpcyBub3QgZG9jdW1lbnRlZCBhdCBodHRwczovL2RvYy5zbS5tcy8jYXBpLUltYWdlLVVwbG9hZFxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmltYWdlc1xyXG4gICAgICAgICAgY29uc3QgdXBsb2FkSGlzdG9yeSA9IGF3YWl0IGF4aW9zLmdldChcclxuICAgICAgICAgICAgJ2h0dHBzOi8vc20ubXMvYXBpL3YyL3VwbG9hZF9oaXN0b3J5JyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHNtbXNDb25maWcudG9rZW5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAodXBsb2FkSGlzdG9yeS5kYXRhLmNvZGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZXMgPSB1cGxvYWRIaXN0b3J5LmRhdGEuZGF0YVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xyXG4gICAgICAgICAgICAgIGlmIChpbWFnZS51cmwgPT09IGJvZHkuaW1hZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaGFzaCA9IGltYWdlLmhhc2hcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgbWVzc2FnZTogJ2FwaSB0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2JhY2t1cERvbWFpbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJhY2t1cERvbWFpbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc21tcycsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGhIZWxwZXIgKFxyXG4gIHtcclxuICAgIHBhdGgsXHJcbiAgICBzdGFydFNsYXNoID0gZmFsc2UsXHJcbiAgICBlbmRTbGFzaCA9IHRydWUsXHJcbiAgICByb290VG9FbXB0eSA9IHRydWVcclxuICB9OiB7XHJcbiAgICBwYXRoPzogc3RyaW5nXHJcbiAgICBzdGFydFNsYXNoPzogYm9vbGVhblxyXG4gICAgZW5kU2xhc2g/OiBib29sZWFuXHJcbiAgICByb290VG9FbXB0eT86IGJvb2xlYW5cclxuICB9XHJcbik6IHN0cmluZyB7XHJcbiAgY29uc3QgY2xlYW5QYXRoID0gcGF0aD8ucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKVxyXG4gIGlmICghY2xlYW5QYXRoKSB7XHJcbiAgICByZXR1cm4gcm9vdFRvRW1wdHkgPyAnJyA6ICcvJ1xyXG4gIH1cclxuICByZXR1cm4gYCR7c3RhcnRTbGFzaCA/ICcvJyA6ICcnfSR7Y2xlYW5QYXRofSR7ZW5kU2xhc2ggPyAnLycgOiAnJ31gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVQYXRoIChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBwYXRoXHJcbiAgICAucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXHJcbiAgICAuc3BsaXQoJy8nKVxyXG4gICAgLm1hcChwID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcclxuICAgIC5qb2luKCcvJylcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmF0dXJlIHtcclxuICBzaWduYXR1cmU6IHN0cmluZ1xyXG4gIGFwcElkOiBzdHJpbmdcclxuICBidWNrZXQ6IHN0cmluZ1xyXG4gIHNpZ25UaW1lOiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XHJcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gb3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGxldCBzaWduYXR1cmVcclxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMClcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXHJcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcclxuXHJcbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcclxuXHJcbiAgICBjb25zdCBzaWduSGV4S2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShtdWx0aVNpZ25hdHVyZSkuZGlnZXN0KClcclxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxyXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcclxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5ICsgODY0MDBcclxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxyXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICBjb25zdCBodHRwU3RyaW5nID0gYHB1dFxcbi8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1cXG5gXHJcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gYHNoYTFcXG4ke3NpZ25UaW1lfVxcbiR7c2hhMWVkSHR0cFN0cmluZ31cXG5gXHJcbiAgICBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNpZ25LZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24pLmRpZ2VzdCgnaGV4JylcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHNpZ25hdHVyZSxcclxuICAgIGFwcElkLFxyXG4gICAgYnVja2V0LFxyXG4gICAgc2lnblRpbWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBJU2lnbmF0dXJlLCBpbWFnZTogQnVmZmVyLCB2ZXJzaW9uOiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGFyZWEgPSBvcHRpb25zLmFyZWFcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb20vZmlsZXMvdjIvJHtzaWduYXR1cmUuYXBwSWR9LyR7c2lnbmF0dXJlLmJ1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtmaWxlTmFtZX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb21gLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZS5zaWduYXR1cmUsXHJcbiAgICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcclxuICAgICAgfSxcclxuICAgICAgZm9ybURhdGE6IHtcclxuICAgICAgICBvcDogJ3VwbG9hZCcsXHJcbiAgICAgICAgZmlsZWNvbnRlbnQ6IGltYWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9YCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9ICh0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XHJcbiAgICAgIHBhdGg6IHRjWXVuT3B0aW9ucy5wYXRoXHJcbiAgICB9KVxyXG4gICAgdGNZdW5PcHRpb25zLnBhdGggPSBwYXRoXHJcbiAgICBjb25zdCB1c2VWNCA9ICF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0J1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGxldCBib2R5XHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGJvZHkgPSByZXNcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICBpZiAoYm9keT8uYm9keT8uZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IGJvZHkuYm9keS5lcnJcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Py5ib2R5Py5tc2cgfHwgYm9keT8uYm9keT8ubWVzc2FnZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gdGNZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBjb25zdCBzbGltID0gdGNZdW5PcHRpb25zLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF0Y1l1bk9wdGlvbnMuc2xpbVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiBib2R5Lm1lc3NhZ2UgPT09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgPyB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7dGNZdW5PcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7dGNZdW5PcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2xpbSkge1xyXG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICcmaW1hZ2VTbGltJ1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSB9LFxyXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXHJcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcclxuICAgICAgZGVmYXVsdDogJ3Y1JyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcHBJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzbGltJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF1c2VyQ29uZmlnLnNsaW0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IGNvbmZpcm1UZXh0ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNJykgfSxcclxuICAgICAgZ2V0IGNhbmNlbFRleHQgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCcpIH0sXHJcbiAgICAgIGdldCB0aXBzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGN5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5mdW5jdGlvbiBidWlsZEdpdGh1YkFwaVVybCAocmVwbzogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGV4dHJhOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX0ke2V4dHJhfWBcclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbyB9ID0gb3B0aW9uc1xyXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGJ1aWxkR2l0aHViQXBpVXJsKHJlcG8sIG9wdGlvbnMucGF0aCwgZmlsZU5hbWUpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlXHJcbiAgICB9LFxyXG4gICAgYm9keTogZGF0YSxcclxuICAgIGpzb246IHRydWVcclxuICB9IGFzIGNvbnN0XHJcbn1cclxuXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZyk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8sIGJyYW5jaCB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lLCBgP3JlZj0ke2JyYW5jaH1gKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcclxuICAgIH0sXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGdpdGh1Yk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJylcclxuICBpZiAoIWdpdGh1Yk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGdpdGh1YiBjb25maWcnKVxyXG4gIH1cclxuICBjb25zdCB1cGxvYWRQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IGdpdGh1Yk9wdGlvbnMucGF0aCB9KVxyXG4gIGdpdGh1Yk9wdGlvbnMucGF0aCA9IHVwbG9hZFBhdGhcclxuICBnaXRodWJPcHRpb25zLmN1c3RvbVVybCA9IChnaXRodWJPcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNMaXN0JyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IHVwbG9hZFBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xyXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcclxuICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXHJcbiAgICAgICAgICAgICAgOiBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQyMikge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkgYXMgYW55XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybFxyXG4gICAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxyXG4gICAgICAgICAgICAgICAgOiByZXMuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB0eXBlIHsgSVBsdWdpbkNvbmZpZywgSVFpbml1Q29uZmlnLCBJUGljR28sIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmZ1bmN0aW9uIHBvc3RPcHRpb25zIChvcHRpb25zOiBJUWluaXVDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnMge1xyXG4gIGNvbnN0IGFyZWEgPSBzZWxlY3RBcmVhKG9wdGlvbnMuYXJlYSB8fCAnejAnKVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBiYXNlNjRGaWxlTmFtZSA9IEJ1ZmZlci5mcm9tKHBhdGggKyBmaWxlTmFtZSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cDovL3VwbG9hZCR7YXJlYX0ucWluaXVwLmNvbS9wdXRiNjQvLTEva2V5LyR7YmFzZTY0RmlsZU5hbWV9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYFVwVG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1nQmFzZTY0XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RBcmVhIChhcmVhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBhcmVhID09PSAnejAnID8gJycgOiAnLScgKyBhcmVhXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFRva2VuIChxaW5pdU9wdGlvbnM6IGFueSk6IHN0cmluZyB7XHJcbiAgY29uc3QgYWNjZXNzS2V5ID0gcWluaXVPcHRpb25zLmFjY2Vzc0tleVxyXG4gIGNvbnN0IHNlY3JldEtleSA9IHFpbml1T3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBtYWMgPSBuZXcgcWluaXUuYXV0aC5kaWdlc3QuTWFjKGFjY2Vzc0tleSwgc2VjcmV0S2V5KVxyXG4gIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICBzY29wZTogcWluaXVPcHRpb25zLmJ1Y2tldFxyXG4gIH1cclxuICBjb25zdCBwdXRQb2xpY3kgPSBuZXcgcWluaXUucnMuUHV0UG9saWN5KG9wdGlvbnMpXHJcbiAgcmV0dXJuIHB1dFBvbGljeS51cGxvYWRUb2tlbihtYWMpXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcWluaXVPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKVxyXG4gIGlmICghcWluaXVPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBxaW5pdSBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHFpbml1T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBnZXRUb2tlbihxaW5pdU9wdGlvbnMpLCBiYXNlNjRJbWFnZSlcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keT8ua2V5KSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IHFpbml1T3B0aW9ucy51cmxcclxuICAgICAgICAgIGNvbnN0IHVybE9wdGlvbnMgPSBxaW5pdU9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7Ym9keS5rZXkgYXMgc3RyaW5nfSR7dXJsT3B0aW9uc31gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubXNnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY3R4LmxvZy5lcnJvcigncWluaXUgZXJyb3InLCBib2R5KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlICE9PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgLy8gZXJyLnJlc3BvbnNlIG1heWJlIHVuZGVmaW5lZFxyXG4gICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2UuYm9keVxyXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyb3IuZXJyb3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdxaW5pdScsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJSW1ndXJDb25maWcsIElPbGRSZXFPcHRpb25zLCBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGZvcm1hdEFjY2Vzc1Rva2VuID0gKGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBzdHJpbmcgPT4gYWNjZXNzVG9rZW4gPyBhY2Nlc3NUb2tlbi5zdGFydHNXaXRoKCdCZWFyZXInKSA/IGFjY2Vzc1Rva2VuIDogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgOiAnJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElJbWd1ckNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXHJcbiAgY29uc3QgdXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lIHx8ICcnXHJcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBmb3JtYXRBY2Nlc3NUb2tlbihvcHRpb25zLmFjY2Vzc1Rva2VuIHx8ICcnKVxyXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xyXG4gIGxldCBhdXRob3JpemF0aW9uXHJcbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuKSB7XHJcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cclxuICB9IGVsc2UgaWYgKGNsaWVudElkKSB7XHJcbiAgICBhdXRob3JpemF0aW9uID0gYENsaWVudC1JRCAke2NsaWVudElkfWBcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGllbnRJZCBvciBhY2Nlc3NUb2tlbiBpcyByZXF1aXJlZCcpXHJcbiAgfVxyXG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvaW1hZ2UnLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uLFxyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgaW1hZ2U6IGltZ0Jhc2U2NCxcclxuICAgICAgdHlwZTogJ2Jhc2U2NCcsXHJcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJ1VwbG9hZGVkIHdpdGggUGljTGlzdCdcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuICYmIGFsYnVtKSB7XHJcbiAgICBsZXQgaW5pdFBhZ2VzID0gMFxyXG4gICAgbGV0IHJlc1xyXG4gICAgbGV0IGFsYnVtSGFzaCA9ICcnXHJcbiAgICBkbyB7XHJcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvYWNjb3VudC8ke3VzZXJuYW1lfS9hbGJ1bXMvJHtpbml0UGFnZXN9YCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxyXG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwXHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgICAgICBnZXRBbGJ1bUhhc2hPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gICAgICB9XHJcbiAgICAgIHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldEFsYnVtSGFzaE9wdGlvbnMpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxyXG4gICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5LnN1Y2Nlc3MpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFsYnVtTGlzdCA9IHJlcy5ib2R5LmRhdGFcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFsYnVtTGlzdCkge1xyXG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xyXG4gICAgICAgICAgYWxidW1IYXNoID0gaXRlbS5pZFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaW5pdFBhZ2VzKytcclxuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcclxuICAgIGlmIChhbGJ1bUhhc2ggJiYgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEpIHtcclxuICAgICAgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEuYWxidW0gPSBhbGJ1bUhhc2hcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gIH1cclxuICByZXR1cm4gcmVxdWVzdE9wdGlvbnNcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXHJcbiAgaWYgKCFpbWd1ck9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGltZ3VyIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmRlbGV0ZWhhc2hcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLmltZ3VyLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3RyaW5nIHwgSUVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW0nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHR5cGUgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBnZXRDdXJyZW50VVRDRGF0ZSA9ICgpOiBzdHJpbmcgPT4gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcblxyXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IGRhdGUgPSBnZXRDdXJyZW50VVRDRGF0ZSgpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICBjb25zdCBzaWduU3RyaW5nID0gYFBVVFxcblxcbiR7bWltZVR5cGV9XFxuJHtkYXRlfVxcbi8ke29wdGlvbnMuYnVja2V0fS8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWBcclxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxyXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVQYXRoKGAke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWApfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tYCxcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBnZXRDdXJyZW50VVRDRGF0ZSgpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiBhbGlZdW5PcHRpb25zLnBhdGggfSlcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IChhbGlZdW5PcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gICAgY29uc3QgcGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZShhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleVNlY3JldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlTZWNyZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2FsaXl1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHtcclxuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpXHJcbiAgICB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgc2FmZVBhcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3Qgb3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yXHJcbiAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkXHJcbiAgY29uc3QgbWQ1UGFzc3dvcmQgPSBNRDUocGFzc3dvcmQpXHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxyXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLmJ1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gXHJcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxyXG4gIGNvbnN0IHNpZ24gPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG1kNVBhc3N3b3JkKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxyXG4gIGxldCBlbmRwb2ludCA9IChvcHRpb25zLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nKS5yZXBsYWNlKC9cXC8rJC9nLCAnJylcclxuICBpZiAoIWVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgZW5kcG9pbnQgPSBgaHR0cHM6Ly8ke2VuZHBvaW50fWBcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUsXHJcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE1ENSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpXHJcbn1cclxuXHJcbmNvbnN0IGdldEFudGlMZWVjaFBhcmFtID0gKGFudGlMZWVjaFRva2VuOiBzdHJpbmcsIGV4cGlyZVRpbWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgb3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5wYXRoIHx8ICcnfSR7ZmlsZU5hbWV9YC5yZXBsYWNlKC8lMkYvZywgJy8nKS5yZXBsYWNlKC9eXFwvKy9nLCAnLycpXHJcbiAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgY29uc3QgZXhwaXJlID0gZXhwaXJlVGltZSA/IG5vdyArIHBhcnNlSW50KGV4cGlyZVRpbWUudG9TdHJpbmcoKSwgMTApIDogbm93ICsgMTgwMFxyXG4gIGNvbnN0IHNpZ24gPSBNRDUoYCR7YW50aUxlZWNoVG9rZW59JiR7ZXhwaXJlfSYke3VyaX1gKVxyXG4gIGNvbnN0IHVwdCA9IGAke3NpZ24uc3Vic3RyaW5nKDEyLCAyMCl9JHtleHBpcmV9YFxyXG4gIHJldHVybiBgX3VwdD0ke3VwdH1gXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgdXB5dW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKVxyXG4gIGlmICghdXB5dW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB1cFl1biBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IHBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogdXB5dW5PcHRpb25zLnBhdGggfSlcclxuICAgIHVweXVuT3B0aW9ucy5wYXRoID0gcGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHVweXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcclxuICAgICAgICAgIGlmICh1cHl1bk9wdGlvbnMuYW50aUxlZWNoVG9rZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0odXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuLCB1cHl1bk9wdGlvbnMuZXhwaXJlVGltZSwgdXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBpbWcuaW1nVXJsLmluY2x1ZGVzKCc/JykgPyBgJHtpbWcuaW1nVXJsfSYke3VwdH1gIDogYCR7aW1nLmltZ1VybH0/JHt1cHR9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkuY29kZSA6IGJvZHlcclxuICAgICAgICB9KSxcclxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3BlcmF0b3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcGVyYXRvciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbnRpTGVlY2hUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZXhwaXJlVGltZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJ2h0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdHlwZSB7IFdlYkRBVkNsaWVudCwgV2ViREFWQ2xpZW50T3B0aW9ucyB9IGZyb20gJ3dlYmRhdidcclxuaW1wb3J0IHsgQXV0aFR5cGUsIGNyZWF0ZUNsaWVudCB9IGZyb20gJ3dlYmRhdidcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJV2ViZGF2UGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcclxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnJylcclxuICB9XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xyXG4gICAgcGF0aDogd2ViZGF2cGxpc3RPcHRpb25zLnBhdGgsXHJcbiAgICByb290VG9FbXB0eTogZmFsc2VcclxuICB9KVxyXG4gIGNvbnN0IGF1dGhUeXBlID0gd2ViZGF2cGxpc3RPcHRpb25zLmF1dGhUeXBlIHx8ICdiYXNpYydcclxuICBjb25zdCB3ZWJwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XHJcbiAgICBwYXRoOiB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCxcclxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxyXG4gIH0pXHJcbiAgY29uc3Qgc3VmZml4ID0gd2ViZGF2cGxpc3RPcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHVwbG9hZFBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xpZW50T3B0aW9uczogV2ViREFWQ2xpZW50T3B0aW9ucyA9IHtcclxuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXHJcbiAgICAgICAgICBwYXNzd29yZDogd2ViZGF2cGxpc3RPcHRpb25zLnBhc3N3b3JkLFxyXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogNCAqIDEwMjQgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF1dGhUeXBlID09PSAnZGlnZXN0Jykge1xyXG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGllbnQ6IFdlYkRBVkNsaWVudCA9IGNyZWF0ZUNsaWVudCh3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCwgY2xpZW50T3B0aW9ucylcclxuICAgICAgICBjb25zdCBwYXRoVG9DcmVhdGUgPSB1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHVwbG9hZFBhdGhcclxuICAgICAgICBpZiAocGF0aFRvQ3JlYXRlKSB7XHJcbiAgICAgICAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnB1dEZpbGVDb250ZW50cyhgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBpbWFnZSwge1xyXG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnd2ViZGF2cGxpc3QnKVxyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYnBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtzdWZmaXh9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3NsRW5hYmxlZCA/PyBmYWxzZSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYnBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXV0aFR5cGUnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpIH0sXHJcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXV0aFR5cGUgfHwgJ2Jhc2ljJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJTG9jYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGxvY2FsQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKVxyXG4gIGlmICghbG9jYWxDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGxvY2FsIGNvbmZpZyEnKVxyXG4gIH1cclxuICBjb25zdCB1cGxvYWRQYXRoID0gbG9jYWxDb25maWcucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGN1c3RvbVVybCA9IChsb2NhbENvbmZpZy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XHJcbiAgICBwYXRoOiBsb2NhbENvbmZpZy53ZWJQYXRoPy5yZXBsYWNlKC9cXFxcL2csICcvJylcclxuICB9KVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ2xvY2FsJylcclxuICAgICAgICAgIGNvbnN0IGZpbGVJbWdUZW1wUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgY29uc3QgZmlsZVVwbG9hZFBhdGggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVVwbG9hZFBhdGgpKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZUltZ1RlbXBQYXRoKSlcclxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVVwbG9hZFBhdGgsIGltYWdlKVxyXG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKGZpbGVVcGxvYWRQYXRoLCBmaWxlSW1nVGVtcFBhdGgpXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5oYXNoID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L2xvY2FsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJylcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdsb2NhbCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IE5vZGVTU0ggfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnbm9kZS1zc2gtbm8tY3B1LWZlYXR1cmVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdHlwZSB7IElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi90eXBlcydcclxuXHJcbmNsYXNzIFNTSENsaWVudCB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBTU0hDbGllbnRcclxuICBwcml2YXRlIHN0YXRpYyBfY2xpZW50OiBOb2RlU1NIXHJcbiAgcHJpdmF0ZSBfaXNDb25uZWN0ZWQgPSBmYWxzZVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSAoKTogU1NIQ2xpZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgdGhpcygpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgY2xpZW50ICgpOiBOb2RlU1NIIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnQgfHwgKHRoaXMuX2NsaWVudCA9IG5ldyBOb2RlU1NIKCkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCAocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbm5lY3QgKGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQsIHByaXZhdGVLZXksIHBhc3NwaHJhc2UgfSA9IGNvbmZpZ1xyXG4gICAgY29uc3QgbG9naW5JbmZvOiBDb25maWcgPSBwcml2YXRlS2V5XHJcbiAgICAgID8geyB1c2VybmFtZSwgcHJpdmF0ZUtleVBhdGg6IHByaXZhdGVLZXksIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkIH1cclxuICAgICAgOiB7IHVzZXJuYW1lLCBwYXNzd29yZCB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBTU0hDbGllbnQuY2xpZW50LmNvbm5lY3Qoe1xyXG4gICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxyXG4gICAgICAgIHBvcnQ6IE51bWJlcihjb25maWcucG9ydCkgfHwgMjIsXHJcbiAgICAgICAgLi4ubG9naW5JbmZvXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQgKGxvY2FsOiBzdHJpbmcsIHJlbW90ZTogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgICAgYXdhaXQgdGhpcy5ta2RpcihwYXRoLmRpcm5hbWUocmVtb3RlKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyksIGNvbmZpZylcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5wdXRGaWxlKGxvY2FsLCByZW1vdGUpXHJcbiAgICAgIGNvbnN0IGZpbGVNb2RlID0gY29uZmlnLmZpbGVNb2RlIHx8ICcwNjQ0J1xyXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGBjaG1vZCAke2ZpbGVNb2RlfSBcIiR7cmVtb3RlfVwiYFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBta2RpciAoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghU1NIQ2xpZW50LmNsaWVudC5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICBjb25zdCBkaXJlY3RvcnlNb2RlID0gY29uZmlnLmRpck1vZGUgfHwgJzA3NTUnXHJcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XHJcbiAgICAgIGNvbnN0IGRpcnMgPSBkaXJQYXRoLnNwbGl0KCcvJylcclxuICAgICAgbGV0IGN1cnJlbnRQYXRoID0gJydcclxuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xyXG4gICAgICAgIGlmIChkaXIpIHtcclxuICAgICAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtkaXJ9YFxyXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBgY2QgLyAmJiBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcclxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaG93biAocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImBcclxuICAgIHJldHVybiB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjIChzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IFNTSENsaWVudC5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxyXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlICgpOiB2b2lkIHtcclxuICAgIFNTSENsaWVudC5jbGllbnQuZGlzcG9zZSgpXHJcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5cclxuaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNmdHBwbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKVxyXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzZnRwcGxpc3QgY29uZmlnIScpXHJcbiAgfVxyXG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxyXG4gIGlmIChzZnRwcGxpc3RDb25maWcucG9ydCA8IDAgfHwgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPiA2NTUzNSkge1xyXG4gICAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSAyMlxyXG4gIH1cclxuICBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xyXG4gICAgcGF0aDogc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGgsXHJcbiAgICByb290VG9FbXB0eTogZmFsc2VcclxuICB9KVxyXG4gIGNvbnN0IHdlYlBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcclxuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoLFxyXG4gICAgcm9vdFRvRW1wdHk6IGZhbHNlXHJcbiAgfSlcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVwbG9hZFRlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAndXBsb2FkVGVtcCcpXHJcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4odXBsb2FkVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBjbGllbnQgPSBTU0hDbGllbnQuaW5zdGFuY2VcclxuICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdChzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcclxuICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkKHRlbXBGaWxlUGF0aCwgcmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnKVxyXG4gICAgICAgIHNmdHBwbGlzdENvbmZpZy5maWxlVXNlciAmJiBhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBzZnRwcGxpc3RDb25maWcuY3VzdG9tVXJsIHx8IHNmdHBwbGlzdENvbmZpZy5ob3N0XHJcbiAgICAgICAgaWYgKHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoKSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggPT09ICcvJyA/ICcnIDogd2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbWdUZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGZzLnJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIGZzLm1vdmVTeW5jKHRlbXBGaWxlUGF0aCwgcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKVxyXG4gICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3NmdHBwbGlzdC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICBjbGllbnQuY2xvc2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncG9ydCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcml2YXRlS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJpdmF0ZUtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlVXNlcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVInKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVVc2VyIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlTW9kZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVNb2RlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRElSX01PREUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc2Z0cHBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHR5cGUgeyBSZWFkU3RyZWFtIH0gZnJvbSAnZnMnXHJcblxyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRlbGVncmFwaENvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAob3B0aW9uczogSVRlbGVncmFwaENvbmZpZywgaW1hZ2U6IFJlYWRTdHJlYW0pOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XHJcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICdodHRwczovL3RlbGVncmEucGgvdXBsb2FkJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGZpbGU6IGltYWdlXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgbGV0IHRnT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpXHJcbiAgaWYgKCF0Z09wdGlvbnMpIHtcclxuICAgIHRnT3B0aW9ucyA9IHt9XHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFRlbXBQYXRoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnModGdPcHRpb25zLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRlbXBGaWxlUGF0aCkpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGZzLnJlbW92ZSh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgaWYgKGJvZHk/LlswXT8uc3JjKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovL3RlbGVncmEucGgke2JvZHlbMF0uc3JjfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHN0cmluZyB8IElFcnJvclxyXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGVsZWdyYXBocGxpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVMRUdSQVBIJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJUGljTGlzdENvbmZpZywgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVBpY0xpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGhvc3QgPSBvcHRpb25zLmhvc3QgfHwgJzEyNy4wLjAuMSdcclxuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IDM2Njc3XHJcbiAgY29uc3QgcGljYmVkID0gb3B0aW9ucy5waWNiZWQgfHwgJydcclxuICBjb25zdCBjb25maWdOYW1lID0gb3B0aW9ucy5jb25maWdOYW1lIHx8ICdEZWZhdWx0J1xyXG4gIGNvbnN0IHNlcnZlcktleSA9IG9wdGlvbnMuc2VydmVyS2V5IHx8ICcnXHJcbiAgbGV0IHVybCA9IGBodHRwOi8vJHtob3N0fToke3BvcnR9L3VwbG9hZD9jb25maWdOYW1lPSR7Y29uZmlnTmFtZX1gXHJcbiAgaWYgKHBpY2JlZCkge1xyXG4gICAgdXJsICs9IGAmcGljYmVkPSR7cGljYmVkfWBcclxuICB9XHJcbiAgaWYgKHNlcnZlcktleSkge1xyXG4gICAgdXJsICs9IGAma2V5PSR7c2VydmVyS2V5fWBcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICBjb250ZW50VHlwZTogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHBpY2xpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUGljTGlzdENvbmZpZz4oJ3BpY0JlZC5waWNsaXN0JylcclxuICBpZiAoIXBpY2xpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBQaWNMaXN0IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHBpY2xpc3RPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGltYWdlKVxyXG5cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5Py5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IHJlcy5ib2R5LnJlc3VsdFswXVxyXG4gICAgICAgICAgaW1nLmZ1bGxSZXN1bHQgPSByZXMuYm9keS5mdWxsUmVzdWx0WzBdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BvcnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAzNjY3NyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGljYmVkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5waWNiZWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NvbmZpZ05hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY29uZmlnTmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VydmVyS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZXJ2ZXJLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3BpY2xpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxsb2RrMzQvcGljZ28tcGx1Z2luLWxhbmtvbmdcclxuLy8gTElDRU5TRTogTUlUXHJcblxyXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXHJcbmltcG9ydCB0eXBlIHsgSUxza3lDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNR1RZUEUge1xyXG4gIGltZ1VybD86IHN0cmluZ1xyXG4gIHR5cGU/OiBzdHJpbmdcclxuICBrZXk/OiBzdHJpbmdcclxuICBpZD86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWMkZPUk1EQVRBIHtcclxuICBmaWxlOiB7XHJcbiAgICB2YWx1ZTogQnVmZmVyXHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIGZpbGVuYW1lOiBzdHJpbmdcclxuICAgIH1cclxuICB9XHJcbiAgc3NsOiBzdHJpbmdcclxuICBzdHJhdGVneV9pZD86IHN0cmluZ1xyXG4gIGFsYnVtX2lkPzogc3RyaW5nXHJcbiAgcGVybWlzc2lvbj86IG51bWJlclxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJTHNreUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgaW1hZ2U6IEJ1ZmZlcik6IGFueSA9PiB7XHJcbiAgbGV0IGhvc3QgPSBvcHRpb25zLmhvc3RcclxuICBob3N0ID0gaG9zdC5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgY29uc3QgaXNWMiA9IG9wdGlvbnMudmVyc2lvbiA9PT0gJ1YyJ1xyXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlblxyXG5cclxuICBjb25zdCB2MUhlYWRlcnMgPSB7XHJcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICBDb25uZWN0aW9uOiAna2VlcC1hbGl2ZScsXHJcbiAgICB0b2tlbjogdG9rZW4gfHwgdW5kZWZpbmVkXHJcbiAgfVxyXG4gIGNvbnN0IHYxRm9ybURhdGEgPSB7XHJcbiAgICBpbWFnZToge1xyXG4gICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzc2w6ICd0cnVlJ1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdjJIZWFkZXJzID0ge1xyXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxyXG4gICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICBBdXRob3JpemF0aW9uOiB0b2tlbiB8fCB1bmRlZmluZWRcclxuICB9XHJcbiAgY29uc3Qgc3RyYXRlZ3lJZCA9IG9wdGlvbnMuc3RyYXRlZ3lJZFxyXG4gIGNvbnN0IGFsYnVtSWQgPSBvcHRpb25zLmFsYnVtSWRcclxuICBsZXQgcGVybWlzc2lvbjogYW55ID0gb3B0aW9ucy5wZXJtaXNzaW9uLnZhbHVlXHJcbiAgaWYgKHBlcm1pc3Npb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgcGVybWlzc2lvbiA9IG9wdGlvbnMucGVybWlzc2lvblxyXG4gIH1cclxuICBjb25zdCB2MkZvcm1EYXRhOiBJVjJGT1JNREFUQSA9IHtcclxuICAgIGZpbGU6IHtcclxuICAgICAgdmFsdWU6IGltYWdlLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lIVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc3NsOiAndHJ1ZScsXHJcbiAgICBzdHJhdGVneV9pZDogc3RyYXRlZ3lJZCxcclxuICAgIGFsYnVtX2lkOiBhbGJ1bUlkLFxyXG4gICAgcGVybWlzc2lvblxyXG4gIH1cclxuICBpZiAoIXN0cmF0ZWd5SWQpIHtcclxuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLnN0cmF0ZWd5X2lkXHJcbiAgfVxyXG4gIGlmICghYWxidW1JZCkge1xyXG4gICAgZGVsZXRlIHYyRm9ybURhdGEuYWxidW1faWRcclxuICB9XHJcbiAgaWYgKCEocGVybWlzc2lvbiA9PT0gMCB8fCBwZXJtaXNzaW9uID09PSAxKSkge1xyXG4gICAgZGVsZXRlIHYyRm9ybURhdGEucGVybWlzc2lvblxyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVxdWVzdEFnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcclxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxuICB9KVxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogaXNWMiA/IGAke2hvc3R9L2FwaS92MS91cGxvYWRgIDogYCR7aG9zdH0vYXBpL3VwbG9hZGAsXHJcbiAgICBhZ2VudDogcmVxdWVzdEFnZW50LFxyXG4gICAgaGVhZGVyczogaXNWMiA/IHYySGVhZGVycyA6IHYxSGVhZGVycyxcclxuICAgIGZvcm1EYXRhOiBpc1YyID8gdjJGb3JtRGF0YSA6IHYxRm9ybURhdGFcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgbHNreU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpXHJcbiAgaWYgKCFsc2t5T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGxza3lPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGltYWdlKVxyXG4gICAgICBsZXQgYm9keSA9IGF3YWl0IGN0eC5SZXF1ZXN0LnJlcXVlc3QocG9zdENvbmZpZykgYXMgYW55XHJcbiAgICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxyXG4gICAgICBjb25zdCBpc1YyID0gbHNreU9wdGlvbnMudmVyc2lvbiA9PT0gJ1YyJ1xyXG4gICAgICBjb25zdCBjb25kaXRpb24gPSBpc1YyID8gKGJvZHkuc3RhdHVzID09PSB0cnVlKSA6IChib2R5LmNvZGUgPT09IDIwMClcclxuICAgICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGltZy5pbWdVcmwgPSBpc1YyID8gYm9keS5kYXRhLmxpbmtzLnVybCA6IGJvZHkuZGF0YS51cmxcclxuICAgICAgICBpZiAoaXNWMikge1xyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5lbWl0KCdub3RpZmljYXRpb24nLCB7XHJcbiAgICAgICAgICB0aXRsZTogJ3VwbG9hZCBmYWlsZWQnLFxyXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnZlcnNpb24gfHwgJ1YxJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9WRVJTSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1ZFUlNJT04nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04nKSB9LFxyXG4gICAgICBjaG9pY2VzOiBbJ1YxJywgJ1YyJ10sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9IT1NUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3N0cmF0ZWd5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnN0cmF0ZWd5SWQsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW1JZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW1JZCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBlcm1pc3Npb24gfHwgJ3ByaXZhdGUoZGVmYXVsdCknLFxyXG4gICAgICBjaG9pY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3ByaXZhdGUoZGVmYXVsdCknLFxyXG4gICAgICAgICAgdmFsdWU6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxyXG4gICAgICAgICAgdmFsdWU6IDFcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QRVJNSVNTSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1BFUk1JU1NJT04nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignbHNreXBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IEZpbGVUeXBlIGZyb20gJ2ZpbGUtdHlwZSdcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcclxuaW1wb3J0IHsgSHR0cHNQcm94eUFnZW50LCBIdHRwUHJveHlBZ2VudCB9IGZyb20gJ2hwYWdlbnQnXHJcbmltcG9ydCB0eXBlIHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5cclxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xyXG4gIGRhdGU6IERhdGVcclxuICBpbmZvOiBJSW1nSW5mb1xyXG5cclxuICBzdGF0aWMgZmllbGRzID0gW1xyXG4gICAgJ3llYXInLCAvLyDlvZPliY3ml6XmnJ8gLSDlubRcclxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxyXG4gICAgJ2RheScsIC8vIOW9k+WJjeaXpeacnyAtIOaXpVxyXG4gICAgJ2Z1bGxOYW1lJywgLy8g5paH5Lu25ZCNLCDljIXlkKvmianlsZXlkI1cclxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXHJcbiAgICAnZXh0TmFtZScsIC8vIOaJqeWxleWQjVxyXG4gICAgJ21kNScsIC8vIG1kNVxyXG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcclxuICAgICdtZDVCNjRTaG9ydCcsIC8vIG1kNSBiYXNlNjQgc2hvcnRcclxuICAgICdzaGExJywgLy8gc2hhMVxyXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxyXG4gICAgJ3RpbWVzdGFtcCcsIC8vIOW9k+WJjeaXtumXtOaIsywg56eSXHJcbiAgICAndGltZXN0YW1wTVMnIC8vIOW9k+WJjeaXtumXtOaIsywg5q+r56eSXHJcbiAgXVxyXG5cclxuICBjb25zdHJ1Y3RvciAoaW5mbzogSUltZ0luZm8pIHtcclxuICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKClcclxuICAgIHRoaXMuaW5mbyA9IGluZm9cclxuICB9XHJcblxyXG4gIHB1YmxpYyB5ZWFyICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb250aCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXkgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmdWxsTmFtZSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWxlTmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1kNSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWQ1QjY0ICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNyeXB0b1xyXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcclxuICAgICAgLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISlcclxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcclxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXHJcbiAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxyXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWQ1QjY0U2hvcnQgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvXHJcbiAgICAgIC5jcmVhdGVIYXNoKCdtZDUnKVxyXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxyXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxyXG4gICAgICAucmVwbGFjZSgvXFwrL2csICctJylcclxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcbiAgICAgIC5zbGljZSgwLCA3KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNoYTEgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaGEyNTYgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRpbWVzdGFtcCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZXN0YW1wTVMgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltZ0J1ZmZlciAoKTogc3RyaW5nIHwgQnVmZmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGF0aCAoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCFmb3JtYXQpIHtcclxuICAgIHJldHVybiBpbmZvLmZpbGVOYW1lIVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZmlsZU5hbWVHZW5lcmF0b3IgPSBuZXcgRmlsZU5hbWVHZW5lcmF0b3IoaW5mbylcclxuXHJcbiAgbGV0IGZvcm1hdFBhdGg6IHN0cmluZyA9IGZvcm1hdFxyXG5cclxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgeyR7a2V5fX1gLCAnZycpXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRzLW1pZ3JhdGUoMjUzMikgRklYTUU6IE9iamVjdCBpcyBwb3NzaWJseSAndW5kZWZpbmVkJy5cclxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcclxuICB9XHJcblxyXG4gIHJldHVybiBmb3JtYXRQYXRoXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyAoaW5mbzogSUltZ0luZm8pOiBQcm9taXNlPHtcclxuICBib2R5PzogQnVmZmVyXHJcbiAgY29udGVudFR5cGU/OiBzdHJpbmdcclxuICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcclxufT4ge1xyXG4gIGNvbnN0IHJlc3VsdDoge1xyXG4gICAgYm9keT86IEJ1ZmZlclxyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcclxuICAgIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xyXG4gIH0gPSB7fVxyXG5cclxuICBpZiAoaW5mby5iYXNlNjRJbWFnZSkge1xyXG4gICAgY29uc3QgYm9keSA9IGluZm8uYmFzZTY0SW1hZ2UucmVwbGFjZSgvXmRhdGE6Wy9cXHddKztiYXNlNjQsLywgJycpXHJcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKFxyXG4gICAgICAvW146XVxcdytcXC9bXFx3LStcXGQuXSsoPz07fCwpL1xyXG4gICAgKT8uWzBdXHJcbiAgICByZXN1bHQuYm9keSA9IEJ1ZmZlci5mcm9tKGJvZHksICdiYXNlNjQnKVxyXG4gICAgcmVzdWx0LmNvbnRlbnRFbmNvZGluZyA9ICdiYXNlNjQnXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChpbmZvLmV4dG5hbWUpIHtcclxuICAgICAgcmVzdWx0LmNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGluZm8uZXh0bmFtZSkhXHJcbiAgICB9XHJcbiAgICByZXN1bHQuYm9keSA9IGluZm8uYnVmZmVyXHJcbiAgfVxyXG5cclxuICAvLyBmYWxsYmFjayB0byBkZXRlY3QgZnJvbSBidWZmZXJcclxuICBpZiAoIXJlc3VsdC5jb250ZW50VHlwZSkge1xyXG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcclxuICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IGZpbGVUeXBlPy5taW1lXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdEh0dHBQcm94eVVSTCAodXJsID0gJycpOiBzdHJpbmcge1xyXG4gIGlmICghdXJsKSByZXR1cm4gJydcclxuXHJcbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xyXG4gICAgY29uc3QgW2hvc3QsIHBvcnRdID0gdXJsLnNwbGl0KCc6JylcclxuICAgIHJldHVybiBgaHR0cDovLyR7aG9zdC5yZXBsYWNlKCcxMjcuMC4wLjEnLCAnbG9jYWxob3N0Jyl9OiR7cG9ydH1gXHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxyXG4gICAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtob3N0bmFtZS5yZXBsYWNlKCcxMjcuMC4wLjEnLCAnbG9jYWxob3N0Jyl9OiR7cG9ydH1gXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJveHlBZ2VudCAoXHJcbiAgcHJveHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICBzc2xFbmFibGVkOiBib29sZWFuLFxyXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxyXG4pOiBIdHRwUHJveHlBZ2VudCB8IEh0dHBzUHJveHlBZ2VudCB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgZm9ybWF0ZWRQcm94eSA9IGZvcm1hdEh0dHBQcm94eVVSTChwcm94eSlcclxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIGNvbnN0IEFnZW50ID0gc3NsRW5hYmxlZCA/IEh0dHBzUHJveHlBZ2VudCA6IEh0dHBQcm94eUFnZW50XHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcclxuICAgIGtlZXBBbGl2ZU1zZWNzOiAxMDAwLFxyXG4gICAgc2NoZWR1bGluZzogJ2xpZm8nIGFzICdsaWZvJyB8ICdmaWZvJyB8IHVuZGVmaW5lZCxcclxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcclxuICAgIHByb3h5OiBmb3JtYXRlZFByb3h5XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IEFnZW50KG9wdGlvbnMpXHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBTM0NsaWVudCxcclxuICBQdXRPYmplY3RDb21tYW5kLFxyXG4gIEdldE9iamVjdENvbW1hbmRcclxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnXHJcbmltcG9ydCB0eXBlIHsgUzNDbGllbnRDb25maWcsIFB1dE9iamVjdENvbW1hbmRPdXRwdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnXHJcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xyXG5pbXBvcnQge1xyXG4gIE5vZGVIdHRwSGFuZGxlclxyXG59IGZyb20gJ0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXInXHJcbmltcG9ydCB0eXBlIHsgTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyB9IGZyb20gJ0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXInXHJcblxyXG5pbXBvcnQgdXJsIGZyb20gJ3VybCdcclxuaW1wb3J0IHR5cGUgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcclxuaW1wb3J0IHR5cGUgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElJbWdJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVwbG9hZFJlc3VsdCB7XHJcbiAgaW5kZXg6IG51bWJlclxyXG4gIGtleTogc3RyaW5nXHJcbiAgdXJsOiBzdHJpbmdcclxuICBpbWdVUkw6IHN0cmluZ1xyXG4gIHZlcnNpb25JZD86IHN0cmluZ1xyXG4gIGVUYWc/OiBzdHJpbmdcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlUzNDbGllbnQgKG9wdHM6IElBd3NTM1BMaXN0VXNlckNvbmZpZyk6IGFueSB7XHJcbiAgbGV0IHNzbEVuYWJsZWQgPSB0cnVlXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHUgPSBuZXcgdXJsLlVSTChvcHRzLmVuZHBvaW50ISlcclxuICAgIHNzbEVuYWJsZWQgPSB1LnByb3RvY29sID09PSAnaHR0cHM6J1xyXG4gIH0gY2F0Y2gge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgfVxyXG5cclxuICBjb25zdCBodHRwSGFuZGxlck9wdHM6IE5vZGVIdHRwSGFuZGxlck9wdGlvbnMgPSB7fVxyXG4gIGlmIChzc2xFbmFibGVkKSB7XHJcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxyXG4gIH0gZWxzZSB7XHJcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cEFnZW50ID0gZ2V0UHJveHlBZ2VudChvcHRzLnByb3h5LCBmYWxzZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBQcm94eUFnZW50XHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGllbnRPcHRpb25zOiBTM0NsaWVudENvbmZpZyA9IHtcclxuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxyXG4gICAgZW5kcG9pbnQ6IG9wdHMuZW5kcG9pbnQgfHwgdW5kZWZpbmVkLFxyXG4gICAgY3JlZGVudGlhbHM6IHtcclxuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXHJcbiAgICAgIHNlY3JldEFjY2Vzc0tleTogb3B0cy5zZWNyZXRBY2Nlc3NLZXlcclxuICAgIH0sXHJcbiAgICB0bHM6IHNzbEVuYWJsZWQsXHJcbiAgICBmb3JjZVBhdGhTdHlsZTogb3B0cy5wYXRoU3R5bGVBY2Nlc3MsXHJcbiAgICByZXF1ZXN0SGFuZGxlcjogbmV3IE5vZGVIdHRwSGFuZGxlcihodHRwSGFuZGxlck9wdHMpXHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGllbnQgPSBuZXcgUzNDbGllbnQoY2xpZW50T3B0aW9ucylcclxuICByZXR1cm4gY2xpZW50XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ3JlYXRlVXBsb2FkVGFza09wdHMge1xyXG4gIGNsaWVudDogYW55XHJcbiAgYnVja2V0TmFtZTogc3RyaW5nXHJcbiAgcGF0aDogc3RyaW5nXHJcbiAgaXRlbTogSUltZ0luZm9cclxuICBpbmRleDogbnVtYmVyXHJcbiAgYWNsOiBzdHJpbmdcclxuICB1cmxQcmVmaXg/OiBzdHJpbmdcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXBsb2FkVGFzayAoXHJcbiAgb3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzXHJcbik6IFByb21pc2U8SVVwbG9hZFJlc3VsdD4ge1xyXG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd1bmRlZmluZWQgaW1hZ2UnKSlcclxuICB9XHJcblxyXG4gIGxldCBib2R5OiBCdWZmZXIgfCB1bmRlZmluZWRcclxuICBsZXQgY29udGVudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gIGxldCBjb250ZW50RW5jb2Rpbmc6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG5cclxuICB0cnkge1xyXG4gICAgOyh7IGJvZHksIGNvbnRlbnRUeXBlLCBjb250ZW50RW5jb2RpbmcgfSA9IGF3YWl0IGV4dHJhY3RJbmZvKG9wdHMuaXRlbSkpXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBQdXRPYmplY3RDb21tYW5kKHtcclxuICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxyXG4gICAgS2V5OiBvcHRzLnBhdGgsXHJcbiAgICBBQ0w6IG9wdHMuYWNsLFxyXG4gICAgQm9keTogYm9keSxcclxuICAgIENvbnRlbnRUeXBlOiBjb250ZW50VHlwZSxcclxuICAgIENvbnRlbnRFbmNvZGluZzogY29udGVudEVuY29kaW5nXHJcbiAgfSlcclxuXHJcbiAgbGV0IG91dHB1dDogUHV0T2JqZWN0Q29tbWFuZE91dHB1dFxyXG4gIHRyeSB7XHJcbiAgICBvdXRwdXQgPSBhd2FpdCBvcHRzLmNsaWVudC5zZW5kKGNvbW1hbmQpXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxuXHJcbiAgbGV0IHVybDogc3RyaW5nXHJcbiAgaWYgKCFvcHRzLnVybFByZWZpeCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHVybCA9IGAke29wdHMudXJsUHJlZml4fS8ke29wdHMucGF0aH1gXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaW5kZXg6IG9wdHMuaW5kZXgsXHJcbiAgICBrZXk6IG9wdHMucGF0aCxcclxuICAgIHVybCxcclxuICAgIGltZ1VSTDogdXJsLFxyXG4gICAgdmVyc2lvbklkOiBvdXRwdXQuVmVyc2lvbklkLFxyXG4gICAgZVRhZzogb3V0cHV0LkVUYWdcclxuICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVVUkwgKFxyXG4gIG9wdHM6IElDcmVhdGVVcGxvYWRUYXNrT3B0cyxcclxuICBlVGFnOiBzdHJpbmcsXHJcbiAgdmVyc2lvbklkOiBzdHJpbmdcclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgc2lnbmVkVXJsID0gYXdhaXQgZ2V0U2lnbmVkVXJsKFxyXG4gICAgICBvcHRzLmNsaWVudCxcclxuICAgICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xyXG4gICAgICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxyXG4gICAgICAgIEtleTogb3B0cy5wYXRoLFxyXG4gICAgICAgIElmTWF0Y2g6IGVUYWcsXHJcbiAgICAgICAgVmVyc2lvbklkOiB2ZXJzaW9uSWRcclxuICAgICAgfSksXHJcbiAgICAgIHsgZXhwaXJlc0luOiAzNjAwIH1cclxuICAgIClcclxuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyB1cmwuVVJMKHNpZ25lZFVybClcclxuICAgIHVybE9iamVjdC5zZWFyY2ggPSAnJ1xyXG4gICAgcmV0dXJuIHVybE9iamVjdC5ocmVmXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNyZWF0ZVMzQ2xpZW50LFxyXG4gIGNyZWF0ZVVwbG9hZFRhc2ssXHJcbiAgZ2V0RmlsZVVSTFxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVVwbG9hZFJlc3VsdCB9IGZyb20gJy4vczMvdXBsb2FkZXInXHJcbmltcG9ydCB1cGxvYWRlciBmcm9tICcuL3MzL3VwbG9hZGVyJ1xyXG5pbXBvcnQgeyBmb3JtYXRQYXRoIH0gZnJvbSAnLi9zMy91dGlscydcclxuaW1wb3J0IHR5cGUgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmZ1bmN0aW9uIGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCAoZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgaWYgKHR5cGVvZiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4gZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xyXG4gIH1cclxuICByZXR1cm4gQm9vbGVhbihkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0gY3R4LmdldENvbmZpZygncGljQmVkLmF3cy1zMy1wbGlzdCcpXHJcbiAgaWYgKCF1c2VyQ29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGFtYXpvbiBzMyB1cGxvYWRlciBjb25maWdcIilcclxuICB9XHJcbiAgY29uc3QgZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID0gZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKVxyXG4gIGxldCB1cmxQcmVmaXggPSB1c2VyQ29uZmlnLnVybFByZWZpeFxyXG4gIGlmICh1cmxQcmVmaXgpIHtcclxuICAgIHVybFByZWZpeCA9IHVybFByZWZpeC5yZXBsYWNlKC9cXC8/JC8sICcnKVxyXG4gICAgaWYgKHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzICYmICFkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpIHtcclxuICAgICAgdXJsUHJlZml4ICs9ICcvJyArIHVzZXJDb25maWcuYnVja2V0TmFtZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2xpZW50ID0gdXBsb2FkZXIuY3JlYXRlUzNDbGllbnQodXNlckNvbmZpZylcclxuICBjb25zdCBvdXRwdXQgPSBjdHgub3V0cHV0XHJcblxyXG4gIGNvbnN0IHRhc2tzID0gb3V0cHV0Lm1hcChhc3luYyAoaXRlbSwgaWR4KSA9PlxyXG4gICAgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XHJcbiAgICAgIGNsaWVudCxcclxuICAgICAgaW5kZXg6IGlkeCxcclxuICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxyXG4gICAgICBwYXRoOiBmb3JtYXRQYXRoKGl0ZW0sIHVzZXJDb25maWcudXBsb2FkUGF0aCksXHJcbiAgICAgIGl0ZW0sXHJcbiAgICAgIGFjbDogdXNlckNvbmZpZy5hY2wgfHwgJ3B1YmxpYy1yZWFkJyxcclxuICAgICAgdXJsUHJlZml4XHJcbiAgICB9KVxyXG4gIClcclxuXHJcbiAgbGV0IHJlc3VsdHM6IElVcGxvYWRSZXN1bHRbXVxyXG5cclxuICB0cnkge1xyXG4gICAgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHRhc2tzKVxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHgubG9nLmVycm9yKCfkuIrkvKDliLAgUzMg5a2Y5YKo5Y+R55Sf6ZSZ6K+v77yM6K+35qOA5p+l572R57uc6L+e5o6l5ZKM6YWN572u5piv5ZCm5q2j56GuJylcclxuICAgIGN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgY3R4LmVtaXQoJ25vdGlmaWNhdGlvbicsIHtcclxuICAgICAgdGl0bGU6ICdTMyDlrZjlgqjkuIrkvKDplJnor68nLFxyXG4gICAgICBib2R5OiAn6K+35qOA5p+l6YWN572u5piv5ZCm5q2j56GuJyxcclxuICAgICAgdGV4dDogJydcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgIGNvbnN0IHsgaW5kZXgsIHVybCwgaW1nVVJMIH0gPSByZXN1bHRcclxuICAgIGRlbGV0ZSBvdXRwdXRbaW5kZXhdLmJ1ZmZlclxyXG4gICAgZGVsZXRlIG91dHB1dFtpbmRleF0uYmFzZTY0SW1hZ2VcclxuICAgIG91dHB1dFtpbmRleF0uaW1nVXJsID0gaW1nVVJMXHJcbiAgICBvdXRwdXRbaW5kZXhdLnVybCA9IHVybFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IGRlZmF1bHRDb25maWc6IElBd3NTM1BMaXN0VXNlckNvbmZpZyA9IHtcclxuICAgIGFjY2Vzc0tleUlEOiAnJyxcclxuICAgIHNlY3JldEFjY2Vzc0tleTogJycsXHJcbiAgICBidWNrZXROYW1lOiAnJyxcclxuICAgIHVwbG9hZFBhdGg6ICd7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX0nLFxyXG4gICAgcGF0aFN0eWxlQWNjZXNzOiBmYWxzZSxcclxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICBhY2w6ICdwdWJsaWMtcmVhZCdcclxuICB9XHJcbiAgbGV0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBd3NTM1BMaXN0VXNlckNvbmZpZz4oJ3BpY0JlZC5hd3MtczMtcGxpc3QnKSB8fCB7fVxyXG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SUQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlELFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0QWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRBY2Nlc3NLZXksXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXROYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXROYW1lLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlZ2lvbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVnaW9uLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJveHksXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFknKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsUHJlZml4JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmxQcmVmaXgsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aFN0eWxlQWNjZXNzJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGhTdHlsZUFjY2VzcyB8fCBmYWxzZSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUycpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZWplY3RVbmF1dGhvcml6ZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVqZWN0VW5hdXRob3JpemVkIHx8IGZhbHNlLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjbCcsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2wgfHwgJ3B1YmxpYy1yZWFkJyxcclxuICAgICAgY2hvaWNlczogWydwcml2YXRlJywgJ3B1YmxpYy1yZWFkJywgJ3B1YmxpYy1yZWFkLXdyaXRlJywgJ2F1dGhlbnRpY2F0ZWQtcmVhZCcsICdhd3MtZXhlYy1yZWFkJywgJ2J1Y2tldC1vd25lci1yZWFkJywgJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnXSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGRlZmF1bHQ6IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkgfHwgZmFsc2UsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYXdzLXMzLXBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKVxyXG4gICAgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgc21tc1VwbG9hZGVyIGZyb20gJy4vc21tcydcclxuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcclxuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xyXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xyXG5pbXBvcnQgaW1ndXJVcGxvYWRlciBmcm9tICcuL2ltZ3VyJ1xyXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXHJcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXHJcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xyXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xyXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcclxuaW1wb3J0IHRlbGVncmFwaFVwbG9hZGVyIGZyb20gJy4vdGVsZWdyYXBoJ1xyXG5pbXBvcnQgcGljbGlzdFVwbG9hZGVyIGZyb20gJy4vcGljbGlzdCdcclxuaW1wb3J0IGxza3lVcGxvYWRlciBmcm9tICcuL2xza3knXHJcbmltcG9ydCBhd3NzM3BsaXN0VXBsb2FkZXIgZnJvbSAnLi9hd3NzM3BsaXN0J1xyXG5cclxuY29uc3QgYnVpbGRJblVwbG9hZGVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICByZWdpc3RlciAoY3R4OiBJUGljR28pIHtcclxuICAgICAgYWxpWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxyXG4gICAgICBnaXRodWJVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcclxuICAgICAgbHNreVVwbG9hZGVyKGN0eClcclxuICAgICAgcGljbGlzdFVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIHNmdHBVcGxvYWRlcihjdHgpXHJcbiAgICAgIHNtbXNVcGxvYWRlcihjdHgpXHJcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICB0ZWxlZ3JhcGhVcGxvYWRlcihjdHgpXHJcbiAgICAgIHVwWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5VcGxvYWRlcnNcclxuIiwiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5cclxuaW1wb3J0IHtcclxuICBpc1VybCxcclxuICBnZXRJbWFnZVNpemUsXHJcbiAgZ2V0RlNGaWxlLFxyXG4gIGdldFVSTEZpbGVcclxufSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSUltZ0luZm8sIElJbWdTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdHM6IElJbWdJbmZvW10gPSBjdHgub3V0cHV0XHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcclxuICAgICAgaW5mbyA9IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGJ1ZmZlcjogaXRlbSxcclxuICAgICAgICBmaWxlTmFtZTogJycsXHJcbiAgICAgICAgZXh0bmFtZTogJydcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXHJcbiAgICB9XHJcbiAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXHJcbiAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xyXG4gICAgICByZXN1bHRzW2luZGV4XSA9IHtcclxuICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxyXG4gICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX1gLFxyXG4gICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcgfCBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjdHgubG9nLndhcm4oYGNhbid0IGdldCAke3BhdGh9J3MgaW1hZ2Ugc2l6ZWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ2NhblxcJ3QgZ2V0IGltYWdlIHNpemUnKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBDTElQQk9BUkRfSU1BR0VfRk9MREVSID0gJ3BpY2xpc3QtY2xpcGJvYXJkLWltYWdlcydcclxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCBvcyBmcm9tICdvcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgaXNXc2wgZnJvbSAnaXMtd3NsJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSUNsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXHJcbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xyXG5pbXBvcnQgd2luZG93c0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzLnBzMSdcclxuaW1wb3J0IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzMTAucHMxJ1xyXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXHJcbmltcG9ydCB3c2xDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd3NsLnNoJ1xyXG5pbXBvcnQgeyBDTElQQk9BUkRfSU1BR0VfRk9MREVSIH0gZnJvbSAnLi9zdGF0aWMnXHJcblxyXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcclxuXHJcbmNvbnN0IGdldEN1cnJlbnRQbGF0Zm9ybSA9ICgpOiBQbGF0Zm9ybSA9PiB7XHJcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXHJcbiAgaWYgKGlzV3NsKSB7XHJcbiAgICByZXR1cm4gJ3dzbCdcclxuICB9XHJcbiAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICBjb25zdCBjdXJyZW50T1MgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXVxyXG4gICAgaWYgKGN1cnJlbnRPUyA9PT0gJzEwJykge1xyXG4gICAgICByZXR1cm4gJ3dpbjEwJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd3aW4zMidcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgcmV0dXJuICdkYXJ3aW4nXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAnbGludXgnXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjMyOiB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjEwOiB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQsXHJcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdzbDogd3NsQ2xpcGJvYXJkU2NyaXB0XHJcbn1cclxuLyoqXHJcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcclxuICogc28gd2Ugc2hvdWxkIGtlZXAgdGhlIGV4dGVuc2lvbiBuYW1lIGNvbnNpc3RlbnQgd2l0aCBjb3JyZXNwb25kaW5nIHNoZWxsXHJcbiAqL1xyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xyXG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcclxufSA9IHtcclxuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxyXG4gIHdpbjMyOiAnd2luZG93cy5wczEnLFxyXG4gIHdpbjEwOiAnd2luZG93czEwLnBzMScsXHJcbiAgbGludXg6ICdsaW51eC5zaCcsXHJcbiAgd3NsOiAnd3NsLnNoJ1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbWFnZUZvbGRlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIpXHJcbiAgZnMuZW5zdXJlRGlyU3luYyhpbWFnZVBhdGgpXHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50UGxhdGZvcm0oKVxyXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxyXG4gICAgLy8gSWYgdGhlIHNjcmlwdCBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGhlIHNjcmlwdCBmaWxlXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2NyaXB0UGF0aCkpIHtcclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcclxuICAgICAgICBzY3JpcHRQYXRoLFxyXG4gICAgICAgIHBsYXRmb3JtMlNjcmlwdENvbnRlbnRbcGxhdGZvcm1dLFxyXG4gICAgICAgICd1dGY4J1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBsZXQgZXhlY3V0aW9uXHJcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdvc2FzY3JpcHQnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3Bvd2Vyc2hlbGwnLCBbXHJcbiAgICAgICAgJy1ub3Byb2ZpbGUnLFxyXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxyXG4gICAgICAgICctbm9sb2dvJyxcclxuICAgICAgICAnLXN0YScsXHJcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLCAndW5yZXN0cmljdGVkJyxcclxuICAgICAgICAvLyBmaXggd2luZG93cyAxMCBuYXRpdmUgY21kIGNyYXNoIGJ1ZyB3aGVuIFwicGljZ28gdXBsb2FkXCJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUGljR28vUGljR28tQ29yZS9pc3N1ZXMvMzJcclxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcclxuICAgICAgICAvLyAnLW5vZXhpdCcsXHJcbiAgICAgICAgJy1maWxlJywgc2NyaXB0UGF0aCxcclxuICAgICAgICBpbWFnZVBhdGhcclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xyXG4gICAgICAgIGlmIChkYXRhLnRvU3RyaW5nKCkudHJpbSgpID09PSAnbm8geGNsaXAgb3Igd2wtY2xpcGJvYXJkJykge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6ICd4Y2xpcCBvciB3bC1jbGlwYm9hcmQgbm90IGZvdW5kJyxcclxuICAgICAgICAgICAgYm9keTogJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbydcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGltZ1BhdGggPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXHJcblxyXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cclxuICAgICAgLy8gd2Ugc2hvdWxkIGtlZXAgaXQgaW5zdGVhZCBvZiByZW1vdmluZ1xyXG4gICAgICBsZXQgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gZmFsc2VcclxuXHJcbiAgICAgIC8vIGluIG1hY09TIGlmIHlvdXIgY29weSB0aGUgZmlsZSBpbiBzeXN0ZW0sIGl0J3MgYmFzZW5hbWUgd2lsbCBub3QgZXF1YWwgdG8gb3VyIGRlZmF1bHQgYmFzZW5hbWVcclxuICAgICAgaWYgKHBhdGguYmFzZW5hbWUoaW1nUGF0aCkgIT09IHBhdGguYmFzZW5hbWUoaW1hZ2VQYXRoKSkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xyXG4gICAgICAgIC8vIGJ1dCB0aGUgcGF0aCBleGlzdHMsIHdlIHNob3VsZCBrZWVwIGl0XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxyXG4gICAgICBpZiAoaW1nUGF0aCAhPT0gJ25vIGltYWdlJyAmJiAhZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBDYW4ndCBmaW5kICR7aW1nUGF0aH1gKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgaW1nUGF0aCxcclxuICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmdcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2V0Q2xpcGJvYXJkSW1hZ2VcclxuIiwiaW1wb3J0IHR5cGUgeyBJQ29uZmlnLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSlNPTlN0b3JlIH0gZnJvbSAnQHBpY2dvL3N0b3JlJ1xyXG5pbXBvcnQgdHlwZSB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXHJcblxyXG5jbGFzcyBEQiB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGI6IEpTT05TdG9yZVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXHJcblxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljQmVkJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljQmVkJywge1xyXG4gICAgICAgICAgdXBsb2FkZXI6ICdzbW1zJyxcclxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJyxcclxuICAgICAgICAgIHNtbXM6IHtcclxuICAgICAgICAgICAgdG9rZW46ICcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgdGhpcy5kYi5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIGhhcyAoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuaGFzKGtleSlcclxuICB9XHJcblxyXG4gIHVuc2V0IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZyAoY29uZmlnOiBQYXJ0aWFsPElDb25maWc+KTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnNldChuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uZmlnIChjb25maWc6IElDb25maWcpOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERCXHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLDkuIrkvKAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6K6+5a6a6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrpphY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWummFjY2Vzc0tleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICforr7lrprmjqXlhaXngrknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6K6+5a6a55u45YaM5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5iUFQSeaOpeWFpeeCuScsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6K6+5a6a6L+H5pyf5pe26Ze0KOenkiknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxyXG5cclxuICAvLyB3ZWJkYXZwbGlzdFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICforr7lrprmjqXlj6PnvZHlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHlnYDot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PTEyMzQ1NicsXHJcblxyXG4gIC8vIHNmdHBwbGlzdFxyXG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6K6+5a6a56eB6ZKlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6K6+5a6a5paH5Lu255So5oi3Oue7hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICforr7lrprmlofku7bmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5jorqQyMicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6L6T5YWl56eB6ZKl5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXHJcblxyXG4gIC8vIFBpY0xpc3RcclxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ+iuvuWumuWbvuW6iicsXHJcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+iuvuWumumFjee9ruWQjScsXHJcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcclxuXHJcbiAgLy8gTHNreSBQcm9cclxuICBQSUNCRURfTFNLWV9QTElTVDogJ0xza3knLFxyXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICforr7lrprniYjmnKwnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ+S+i+WmglYxJyxcclxuICBQSUNCRURfTFNLWV9IT1NUOiAn6K6+5a6a5Li75py6JyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICforr7lrprnrZbnlaVJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+Wmgu+8mjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6K6+5a6a55u45YaMSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfpgInloavvvIxWMueJiOacrOmZkOWumicsXHJcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+iuvuWumuadg+mZkCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn5L6L5aaC77yacHVibGljJyxcclxuXHJcbiAgLy8gQXdzUzNQbGlzdFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+iuvuWumkFjY2Vzc0tleUlkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6K6+5a6aU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+iuvuWumlJlZ2lvbicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYnoioLngrknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+WQr+eUqHMzRm9yY2VQYXRoU3R5bGUnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+aLkue7neaXoOaViFRMU+ivgeS5pui/nuaOpScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6K6+5a6a5LiK5Lyg6LWE5rqQ55qE6K6/6Zeu562W55WlJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICflvIDlkK8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pe277yM5piv5ZCm6KaB56aB55So5pyA57uI55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3nvIAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICfkvovlpoLvvJpBS0lBeHh4eHh4eHh4eHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaC77yaeHh4eHh4eHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ+mcgOimgeaXtuWQr+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHml7blkK/nlKgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pe25ZCv55SoJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICforr7lrprmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+ivt+mAieaLqeawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6K6+5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+iuvuWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6K+36L6T5YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICforr7lrprmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfor7fovpPlhaXmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iuvuWumuawtOWNsOebuOWvueS6juWbvueJh+eahOavlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iuvuWumuawtOWNsOWtl+S9k+minOiJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfor7fovpPlhaVyZ2LpopzoibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iuvuWumuawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfor7fovpPlhaXmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K6+5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K+36YCJ5oup5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6K6+5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMC0xMDDnmoTmlbTmlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6L+b6KGM5qC85byP6L2s5o2iJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6K+36YCJ5oup6L2s5o2i5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICforr7lrprnvKnmlL7lrr3luqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovazlm77niYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2s5Zu+54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovazml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbkv6Hmga8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo4XlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi9veWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxyXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgdHlwZSBJTG9jYWxlc0tleSwgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IHR5cGUgSVN0cmluZ0tleU1hcCwgdHlwZSBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXHJcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICfoqK3lrpphY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5qW15pm65aOT57iuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+mWi+WVkycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ+WclueJh+alteaZuuWjk+e4ru+8jOips+aDheiri+WPg+iAg1vmlofmqpToqqrmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICfoqK3lrprliIbmlK/lkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+ioreWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6Kit5a6a55u457C/5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICfoqK3lrprmk43kvZzlk6EnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+ioreWumuaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICfoqK3lrprliqDpgJ/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICfoqK3lrprpgY7mnJ/mmYLplpMo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6Kit5a6a6KqN6K2J5pa55byPJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICfoqK3lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+ioreWumuengemRsCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+ioreWumuaWh+S7tueUqOaItjrntYQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6Kit5a6a5paH5Lu25qyK6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6KqNMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i8uOWFpeengemRsOWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxyXG5cclxuICAvLyBQaWNMaXN0XHJcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcclxuICBQSUNCRURfUElDTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcclxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICfoqK3lrprlnJbluoonLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICfoqK3lrprphY3nva7lkI0nLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXHJcblxyXG4gIC8vIExza3kgUHJvXHJcbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcclxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICfoq4vpgbjmk4fniYjmnKwnLFxyXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxyXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXHJcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICfoqK3lrprnrZbnlaVJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+WmgjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6Kit5a6a55u45YaKSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfkvovlpoIxJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6Kit5a6a5LiK5YKz5qyK6ZmQJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfoq4vpgbjmk4fkuIrlgrPmrIrpmZAnLFxyXG5cclxuICAvLyBBd3NTM1BsaXN0XHJcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6Kit5a6aQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICfoqK3lrppTZWNyZXRBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6Kit5a6aUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+ioreWumuiHquWumue+qeevgOm7nicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICfoqK3lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+ioreWumuiHquWumue+qee2suWdgCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfplovllZ8gYHJlamVjdFVuYXV0aG9yaXplZGAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDTDogJ+ioreWumkFDTCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgIOaZgu+8jOaYr+WQpuimgeemgeeUqOacgOe1gueUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57a0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ+S+i+Wmgu+8mnh4eHh4eHh4eHgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pmC5ZWf55SoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICfkvovlpoLvvJpwdWJsaWMtcmVhZCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHmmYLllZ/nlKgnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+ioreWumuawtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6Kit5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+ioreWumuawtOWNsOWtl+mrlCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+iri+i8uOWFpeawtOWNsOWtl+mrlOaWh+S7tui3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iri+i8uOWFpTAtMeeahOaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6Kit5a6a5rC05Y2w5a2X6auU6aGP6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6Kit5a6a5rC05Y2w5ZyW54mH6Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iri+i8uOWFpeawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfoq4vpgbjmk4fmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICfoqK3lrprph43lkb3lkI3moLzlvI8nLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfoq4vovLjlhaUwLTEwMOeahOaVtOaVuCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbpgLLooYzmoLzlvI/ovYnmj5snLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+ioreWumui9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfoq4vpgbjmk4fovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+ioreWumue4ruaUvuWvrOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+ioreWumue4ruaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9ieWclueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbpgLLooYzlnJbniYfml4vovYknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9ieaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfoq4vovLjlhaXmlbjlrZfvvIzlj6/ngrrosqDmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuizh+ioiicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijneWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijneWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovInmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246LyJ5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBhY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICdTZXQgSW1hZ2VTbGltJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAnSW1hZ2UgZXh0cmVtZWx5IGludGVsbGlnZW50IGNvbXByZXNzaW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFtkb2N1bWVudCBkZXNjcmlwdGlvbl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIHRlbGVncmFwaFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG5cclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICdTZXQgQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ1NldCBBY2Nlc3MgVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ1NldCBBbGJ1bSBOYW1lJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCBhcyBhbm9ueW1vdXMnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICdFeC4gdGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAnU2V0IE9wZXJhdG9yJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICdTZXQgT3BlcmF0b3IgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ1NldCBBbnRpLUxlZWNoIFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICdTZXQgRXhwaXJlIFRpbWUoc2Vjb25kcyknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBvcGVyYXRvciBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICdTZXQgQXV0aCBUeXBlJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TOiAnRXguID9rZXk9dmFsdWUnLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAnU0ZUUCBCdWlsZGluJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ1NldCBQcml2YXRlIEtleScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdTZXQgUHJpdmF0ZSBLZXkgUGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAnU2V0IEZpbGUgVXNlcjpHcm91cCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICdTZXQgRmlsZSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAnU2V0IERpcmVjdG9yeSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiAxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ0RlZmF1bHQgMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAnRXguIC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdQbGVhc2UgdHlwZSB0aGUgcHJpdmF0ZSBrZXkgcGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICdFeC4gd3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICdFeC4gMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAnRXguIDA3NzUnLFxyXG5cclxuICAvLyBQaWNMaXN0XHJcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcclxuICBQSUNCRURfUElDTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAnU2V0IFBpY0JlZCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ1NldCBDb25maWcgTmFtZScsXHJcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAnU2V0IEtleScsXHJcblxyXG4gIC8vIExza3kgUHJvXHJcbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcclxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAnU2V0IFZlcnNpb24nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ0V4LiB2MScsXHJcbiAgUElDQkVEX0xTS1lfSE9TVDogJ1NldCBIb3N0JyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9sc2t5LmNvJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ1NldCBUb2tlbicsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ0V4LiB4eHgnLFxyXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAnU2V0IFN0cmF0ZWd5IElEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAnRXguIDEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAnU2V0IEFsYnVtIElEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAnT3B0aW9uYWwsIG9ubHkgZm9yIFYyJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAnU2V0IFBlcm1pc3NvbicsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAnRXguIHB1YmxpYycsXHJcblxyXG4gIC8vIEF3c1MzUGxpc3RcclxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICdTZXQgQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICdTZXQgUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICdTZXQgUGF0aFN0eWxlQWNjZXNzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdTZXQgUmVqZWN0VW5hdXRob3JpemVkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICdFeC4geHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICdFeC4geHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ0V4LiB1cy1lYXN0LTEnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0L3tmdWxsTmFtZX0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ0V4LiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEOiAnRW5hYmxlIHdoZW4gcmVqZWN0aW5nIGludmFsaWQgVExTIGNlcnRpZmljYXRlIGNvbm5lY3Rpb24gaXMgcmVxdWlyZWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAnRXguIHB1YmxpYy1yZWFkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICdTZXQgcmVuYW1lIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAnRW5hYmxlIHJlbmFtZScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdXaGV0aGVyIHRvIHVzZSBmdWxsLXNjcmVlbiB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAwLTEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgdmVydGljYWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgZ2V0LCBzZXQsIHVuc2V0IH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBQbHVnaW5IYW5kbGVyIGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xyXG5cclxuaW1wb3J0IExpZmVjeWNsZSBmcm9tICcuL0xpZmVjeWNsZSdcclxuXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5cclxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xyXG5cclxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQsIElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcblxyXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXHJcblxyXG5pbXBvcnQgdHlwZSB7IElIZWxwZXIsIElJbWdJbmZvLCBJQ29uZmlnLCBJUGljR28sIElTdHJpbmdLZXlNYXAsIElQbHVnaW5Mb2FkZXIsIElJMThuTWFuYWdlciwgSVBpY0dvUGx1Z2luLCBJUGljR29QbHVnaW5JbnRlcmZhY2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xyXG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcclxuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxyXG4gIHByaXZhdGUgZGIhOiBEQlxyXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xyXG4gIGJhc2VEaXIhOiBzdHJpbmdcclxuICBoZWxwZXIhOiBJSGVscGVyXHJcbiAgbG9nOiBMb2dnZXJcclxuICBjbWQ6IENvbW1hbmRlclxyXG4gIG91dHB1dDogSUltZ0luZm9bXVxyXG4gIGlucHV0OiBhbnlbXVxyXG4gIHJhd0lucHV0OiBhbnlbXVxyXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xyXG4gICAqXHJcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxyXG4gICAqL1xyXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XHJcbiAgaTE4biE6IElJMThuTWFuYWdlclxyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cclxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xyXG5cclxuICBnZXQgcGx1Z2luTG9hZGVyICgpOiBJUGx1Z2luTG9hZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yIChjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxyXG4gICAgdGhpcy5pbnB1dCA9IFtdXHJcbiAgICB0aGlzLnJhd0lucHV0ID0gW11cclxuICAgIHRoaXMub3V0cHV0ID0gW11cclxuICAgIHRoaXMuaGVscGVyID0ge1xyXG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXHJcbiAgICAgIHVwbG9hZGVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndXBsb2FkZXInKSxcclxuICAgICAgYmVmb3JlVHJhbnNmb3JtUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVRyYW5zZm9ybVBsdWdpbnMnKSxcclxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcclxuICAgICAgYWZ0ZXJVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYWZ0ZXJVcGxvYWRQbHVnaW5zJylcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxyXG4gICAgdGhpcy5sb2cgPSBuZXcgTG9nZ2VyKHRoaXMpXHJcbiAgICB0aGlzLmNtZCA9IG5ldyBDb21tYW5kZXIodGhpcylcclxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXHJcbiAgICB0aGlzLmluaXRDb25maWcoKVxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ1BhdGggKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWdQYXRoID0gdGhpcy5jb25maWdQYXRoIHx8IHBhdGguam9pbihob21lZGlyKCksICcucGljbGlzdC9jb25maWcuanNvbicpXHJcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSAnJ1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXHJcbiAgICB9XHJcbiAgICB0aGlzLmJhc2VEaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpKSB7XHJcbiAgICAgIGZzLmVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGIgPSBuZXcgREIodGhpcylcclxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcclxuICAgICAgdGhpcy5pMThuID0gbmV3IEkxOG5NYW5hZ2VyKHRoaXMpXHJcbiAgICAgIHRoaXMuUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHRoaXMpXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcclxuICAgICAgLy8gbG9hZCBzZWxmIHBsdWdpbnNcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJ3BpY2dvJylcclxuICAgICAgdXBsb2FkZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHRyYW5zZm9ybWVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgnJylcclxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgdGhpcy5saWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKHRoaXMpXHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoZSlcclxuICAgICAgdGhyb3cgZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZWFzaWx5IG1hbm51YWxseSBsb2FkIGEgcGx1Z2luXHJcbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxyXG4gICAqIG9yIGp1c3QgaW5zdGFudGlhdGUgYSBwbHVnaW5cclxuICAgKi9cclxuICB1c2UgKHBsdWdpbjogSVBpY0dvUGx1Z2luLCBuYW1lPzogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHtcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbilcclxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSFcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gcGx1Z2luKHRoaXMpXHJcbiAgICAgIHJldHVybiBwbHVnaW5JbnN0YW5jZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoICE9PSAnJykge1xyXG4gICAgICB0aGlzLmNtZC5pbml0KClcclxuICAgICAgdGhpcy5jbWQubG9hZENvbW1hbmRzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZzxUPiAobmFtZT86IHN0cmluZyk6IFQge1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgdW5rbm93biBhcyBUXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnKVxyXG4gICAgdGhpcy5kYi5zYXZlQ29uZmlnKGNvbmZpZylcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHJlbW92ZWRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudW5zZXRDb25maWcoa2V5LCBwcm9wTmFtZSlcclxuICAgIHRoaXMuZGIudW5zZXQoa2V5LCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChuYW1lKSkge1xyXG4gICAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtuYW1lfSBjYW4ndCBiZSBtb2RpZmllZGApXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxyXG4gICAgICAgIGRlbGV0ZSBjb25maWdbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICAgIGV2ZW50QnVzLmVtaXQoSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIHtcclxuICAgICAgICBjb25maWdOYW1lOiBuYW1lLFxyXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1bnNldENvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHVuc2V0YClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB1bnNldCh0aGlzLmdldENvbmZpZyhrZXkpLCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIGdldCByZXF1ZXN0ICgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcclxuICAgIHJldHVybiB0aGlzLlJlcXVlc3QucmVxdWVzdC5iaW5kKHRoaXMuUmVxdWVzdClcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZCAoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmxvZy5lcnJvcignTm8gY29uZmlnIGZpbGUgZm91bmQsIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZyBmaWxlIHBhdGgnKVxyXG4gICAgICByZXR1cm4gW11cclxuICAgIH1cclxuICAgIC8vIHVwbG9hZCBmcm9tIGNsaXBib2FyZFxyXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXHJcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBub3QgZm91bmQgaW4gY2xpcGJvYXJkJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGNsZWFudXApXHJcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxyXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHVwbG9hZCBmcm9tIHBhdGhcclxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcclxuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXHJcblxyXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXHJcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb21tYW5kIiwiY21kIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJhY3Rpb24iLCJvcHRpb25zIiwicHJvZ3JhbSIsInByb3h5Iiwib3B0aW9uIiwicmVnaXN0cnkiLCJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwicGx1Z2lucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsInJhbmRvbVN0cmluZ0dlbmVyYXRvciIsImxlbmd0aCIsImNoYXJzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiam9pbiIsImZvcm1hdEhlbHBlciIsIm51bSIsInRvU3RyaW5nIiwiZ2V0TWQ1IiwiaW5wdXQiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwiZGlnZXN0IiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJmaWxlQnVmZmVyIiwibm93IiwiRGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsImZpbGViYXNlbmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJjb252ZXJzaW9uTWFwIiwic2xpY2UiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwicGFkU3RhcnQiLCJ1dWlkdjQiLCJyZXBsYWNlIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiaXRlbSIsImluY2x1ZGVzIiwiZXh0IiwibmV3TmFtZSIsInJlZHVjZSIsImFjYyIsImN1ciIsIlJlZ0V4cCIsIl8iLCJncm91cDEiLCJwYXJzZUludCIsIl9yZXN1bHQiLCJrZXkiLCJjb3VudCIsIm1heCIsImRpcm5hbWUiLCJzcGxpdCIsInNlcCIsImEiLCJiIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ0eXBlIiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsImJ1ZmZlciIsImZzIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwiX2EiLCJyZWFzb24iLCJnZXRVUkxGaWxlIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJpc1NpbXBsZU5hbWUiLCJuYW1lT3JQYXRoIiwiaXNBYnNvbHV0ZSIsInBsdWdpblBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiZXhpc3RzU3luYyIsImhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSIsInNjb3BlIiwiZ2V0UHJvY2Vzc1BsdWdpbk5hbWUiLCJsb2dnZXIiLCJjb25zb2xlIiwiaGFuZGxlVW5peFN0eWxlUGF0aCIsIndhcm4iLCJnZXROb3JtYWxQbHVnaW5OYW1lIiwicmVtb3ZlUGx1Z2luVmVyc2lvbiIsInBhY2thZ2VKU09OUGF0aCIsInBvc2l4IiwicGtnIiwicmVhZEpTT05TeW5jIiwicGF0aFN0ciIsInJlZyIsIm1hdGNoQXJyIiwibWF0Y2giLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0IiwiYmxhY2tJdGVtIiwiaXNJbnB1dENvbmZpZ1ZhbGlkIiwiaXNBcnJheSIsInNhZmVQYXJzZSIsInN0ciIsIkpTT04iLCJwYXJzZSIsImZvcmNlTnVtYmVyIiwiaXNOYU4iLCJOdW1iZXIiLCJpc0RldiIsImVudiIsIk5PREVfRU5WIiwiZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCIsIl9fZGlybmFtZSIsIkFkZFdhdGVybWFyayIsImltZyIsIndhdGVybWFya1R5cGUiLCJkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgiLCJpc0Z1bGxTY3JlZW5XYXRlcm1hcmsiLCJ3YXRlcm1hcmtEZWdyZWUiLCJ0ZXh0Iiwid2F0ZXJtYXJrRm9udFBhdGgiLCJ3YXRlcm1hcmtTY2FsZVJhdGlvIiwid2F0ZXJtYXJrQ29sb3IiLCJ3YXRlcm1hcmtJbWFnZVBhdGgiLCJwb3NpdGlvbiIsImltYWdlIiwic2hhcnAiLCJhbmltYXRlZCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiZ3Jhdml0eSIsInRpbGUiLCJ2YWxpZFBhcmFtIiwicGFyYW1zIiwiZXZlcnkiLCJwYXJhbSIsImF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0IiwidmFsaWRPdXRwdXRGb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUV4dExpc3QiLCJpbWFnZUFkZFdhdGVyTWFyayIsIndhdGVybWFya1RleHQiLCJ3YXRlcm1hcmtQb3NpdGlvbiIsImZvcm1hdE9wdGlvbnMiLCJmb3JtYXRDb252ZXJ0T2JqIiwicXVhbGl0eSIsImlzQ29udmVydCIsImNvbnZlcnRGb3JtYXQiLCJpc1JlU2l6ZSIsInJlU2l6ZUhlaWdodCIsInJlU2l6ZVdpZHRoIiwic2tpcFJlU2l6ZU9mU21hbGxJbWciLCJpc1JlU2l6ZUJ5UGVyY2VudCIsInJlU2l6ZVBlcmNlbnQiLCJpc1JvdGF0ZSIsImlzRmxpcCIsImlzRmxvcCIsInJvdGF0ZURlZ3JlZSIsInBpY0JlZCIsImltYWdlUHJvY2VzcyIsInJhd0Zvcm1hdCIsInRvTG93ZXJDYXNlIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0Iiwicm91bmQiLCJzY2FsZVJhdGlvIiwiZmxpcCIsImZsb3AiLCJuZXdGb3JtYXQiLCJnZXRDb252ZXJ0ZWRGb3JtYXQiLCJ0b0Zvcm1hdCIsIm1vempwZWciLCJpbWFnZUZvcm1hdExpc3QiLCJuZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsIm5lZWRDb21wcmVzcyIsImNvbXByZXNzT3B0aW9ucyIsIm5vcm1hbGl6ZWRFeHQiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwiZmlsdGVyIiwiZXhpc3QiLCJjb21wcmVzcyIsInVzZXJDb25maWciLCJnZXRDb25maWciLCJwcmVmaXgiLCJpMThuIiwidHJhbnNsYXRlIiwicmVxdWlyZWQiLCJkZWZhdWx0IiwiY2hvaWNlcyIsImlzUmVtb3ZlRXhpZiIsInJlbmFtZSIsImVuYWJsZSIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsIl9iIiwicGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJ1cGxvYWRlciIsInRyYW5zZm9ybWVyIiwicHVzaCIsImZvckVhY2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZmlsZXMiLCJyZW5kZXIiLCJ3cml0ZUZpbGVUcmVlIiwiZGVzdCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXNzYWdlIiwiZXhwIiwiZm4iLCJGdW5jdGlvbiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwicmVhZEZpbGVTeW5jIiwiY29udGVudCIsImVqcyIsImlzQnVmZmVyIiwiZGlyIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJydW4iLCJvZmZsaW5lIiwidGVtcGxhdGUiLCJoYXNTbGFzaCIsImRvd25sb2FkQW5kR2VuZXJhdGUiLCJybSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTmFtZSIsInBsdWdpbkxpc3QiLCJkZWxldGUiLCJnZXROYW1lIiwiZ2V0TGlzdCIsInZhbHVlcyIsInNldEN1cnJlbnRQbHVnaW5OYW1lIiwiQ29tbWFuZGVyIiwiQ29tbWFuZCIsInZlcnNpb24iLCJkZWJ1ZyIsInNpbGVudCIsImFyZ3MiLCJleGl0IiwiY3VycmVudFBsdWdpbk5hbWUiLCJsb2FkQ29tbWFuZHMiLCJJTG9nVHlwZSIsIklCdWlsZEluRXZlbnQiLCJJQnVzRXZlbnQiLCJMb2dnZXIiLCJsZXZlbCIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0xldmVsIiwiY2hlY2tMb2dMZXZlbCIsImxvZ0hlYWRlciIsInRvVXBwZXJDYXNlIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsImxvZ0ZpbGVTaXplTGltaXQiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJoYXNQbHVnaW4iLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwiY29kZSIsImVtaXQiLCJ0aXRsZSIsImJvZHkiLCJyZWdpc3RlclBsdWdpbiIsInVucmVnaXN0ZXJQbHVnaW4iLCJtb2R1bGVzIiwid2hlcmUiLCJjb25jYXQiLCJucG0iLCJzcGF3biIsImFzc2lnbiIsIm91dHB1dCIsInN0ZG91dCIsInBpcGUiLCJzdGRlcnIiLCJGQUlMRUQiLCJQbHVnaW5Mb2FkZXIiLCJmdWxsTGlzdCIsIlNldCIsInBsdWdpbk1hcCIsInBhY2thZ2VQYXRoIiwicmVwb3NpdG9yeSIsImxpY2Vuc2UiLCJyZXNvbHZlUGx1Z2luIiwiYmFzZWRpciIsImxvYWQiLCJwbHVnaW5EaXIiLCJqc29uIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJOT1RJRklDQVRJT04iLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsImFmdGVyVXBsb2FkUGx1Z2lucyIsInJlbW92ZUNvbmZpZyIsImV2ZW50QnVzIiwiRXZlbnRFbWl0dGVyIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInZhbHVlIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJfYyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiUmVxdWVzdCIsIkNPTkZJR19DSEFOR0UiLCJoYW5kbGVQcm94eSIsInByb3h5T3B0aW9ucyIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwcm90b2NvbCIsImhlYWRlcnMiLCJtYXhCb2R5TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhDb250ZW50TGVuZ3RoIiwidHVubmVsIiwiaHR0cHNPdmVySHR0cCIsImluc3RhbmNlIiwiYXhpb3MiLCJjcmVhdGUiLCJpbnRlcmNlcHRvcnMiLCJvcHQiLCJfX2lzT2xkT3B0aW9ucyIsIkZvcm1EYXRhIiwiZm9ybURhdGEiLCJnZXRIZWFkZXJzIiwicXMiLCJyZXF1ZXN0SW50ZXJjZXB0b3IiLCJvYmoiLCJjb250ZW50VHlwZSIsIkNvbnRlbnRUeXBlIiwiTGlmZWN5Y2xlIiwic3VwZXIiLCJ0dGZMaW5rIiwidGVtcEZpbGVQYXRoIiwiaW1nRmlsZVBhdGgiLCJ0dGZQYXRoIiwiZW1wdHlEaXJTeW5jIiwib3V0cHV0RGlyIiwiaGVscEdldE9wdGlvbiIsImNvbmZpZ1BhdGgiLCJyYXdJbnB1dCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJ1bnNldENvbmZpZyIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwibGlzdGVuZXJDb3VudCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJldmVudE5hbWVzIiwiY3JlYXRlQ29udGV4dCIsInJhd0lucHV0UGF0aCIsImNsb25lRGVlcCIsImFsbFNldHRsZWQiLCJpbmRleCIsIml0ZW1Jc1VybCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZXh0ZW50aW9uIiwiZG93bmxvYWRUVEYiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwibmV3RXh0IiwidGVtcEZpbGUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsInJlbmFtZUNvbmZpZyIsImJhc2U2NEltYWdlIiwiYmVmb3JlVXBsb2FkIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsIlVQTE9BRF9QUk9HUkVTUyIsIkJFRk9SRV9UUkFOU0ZPUk0iLCJoYW5kbGVQbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJkb21haW4iLCJBdXRob3JpemF0aW9uIiwic21maWxlIiwiZmlsZW5hbWUiLCJzc2wiLCJzbW1zQ29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJ0b2tlbiIsImhhc2giLCJpbWFnZXMiLCJ1cGxvYWRIaXN0b3J5IiwiZm9ybWF0UGF0aEhlbHBlciIsInN0YXJ0U2xhc2giLCJlbmRTbGFzaCIsInJvb3RUb0VtcHR5IiwiY2xlYW5QYXRoIiwiZW5jb2RlUGF0aCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZW5lcmF0ZVNpZ25hdHVyZSIsInNlY3JldElkIiwic2VjcmV0S2V5IiwiYXBwSWQiLCJidWNrZXQiLCJzaWduYXR1cmUiLCJzaWduVGltZSIsInRvZGF5Iiwic2lnbktleSIsImNyZWF0ZUhtYWMiLCJlbmRwb2ludCIsImFyZWEiLCJodHRwU3RyaW5nIiwic3RyaW5nVG9TaWduIiwiY3VycmVudCIsIm11bHRpU2lnbmF0dXJlIiwic2lnbkhleEtleSIsInRlbXBTdHJpbmciLCJIb3N0IiwibWltZSIsImxvb2t1cCIsIm9wIiwiZmlsZWNvbnRlbnQiLCJ0Y1l1bk9wdGlvbnMiLCJjdXN0b21VcmwiLCJ1c2VWNCIsIm9wdGlvblVybCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsImJ1aWxkR2l0aHViQXBpVXJsIiwicmVwbyIsImV4dHJhIiwiYnJhbmNoIiwiZ2l0aHViT3B0aW9ucyIsInVwbG9hZFBhdGgiLCJkb3dubG9hZF91cmwiLCJzaGEiLCJpbWdCYXNlNjQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJtYWMiLCJxaW5pdSIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInVybE9wdGlvbnMiLCJjbGllbnRJZCIsInVzZXJuYW1lIiwiYWNjZXNzVG9rZW4iLCJmb3JtYXRBY2Nlc3NUb2tlbiIsImFsYnVtIiwiYXV0aG9yaXphdGlvbiIsInJlcXVlc3RPcHRpb25zIiwiaW5pdFBhZ2VzIiwiYWxidW1IYXNoIiwiZ2V0QWxidW1IYXNoT3B0aW9ucyIsInRpbWVvdXQiLCJhbGJ1bUxpc3QiLCJpbWd1ck9wdGlvbnMiLCJsaW5rIiwiZGVsZXRlaGFzaCIsImdldEN1cnJlbnRVVENEYXRlIiwidG9VVENTdHJpbmciLCJkYXRlIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJwYXNzd29yZCIsImdldEFudGlMZWVjaFBhcmFtIiwiYW50aUxlZWNoVG9rZW4iLCJleHBpcmVUaW1lIiwidXJpIiwiZXhwaXJlIiwic3Vic3RyaW5nIiwidXB5dW5PcHRpb25zIiwic3VmZml4IiwidXB0Iiwid2ViZGF2cGxpc3RPcHRpb25zIiwic3NsRW5hYmxlZCIsImF1dGhUeXBlIiwid2VicGF0aCIsImNsaWVudE9wdGlvbnMiLCJBdXRoVHlwZSIsIkRpZ2VzdCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsInBhdGhUb0NyZWF0ZSIsImNyZWF0ZURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsInB1dEZpbGVDb250ZW50cyIsIm92ZXJ3cml0ZSIsImltZ1RlbXBQYXRoIiwiaW1nVGVtcEZpbGVQYXRoIiwiZ2FsbGVyeVBhdGgiLCJsb2NhbENvbmZpZyIsIndlYlBhdGgiLCJmaWxlSW1nVGVtcFBhdGgiLCJmaWxlVXBsb2FkUGF0aCIsImNvcHlGaWxlU3luYyIsIlNTSENsaWVudCIsIl9pc0Nvbm5lY3RlZCIsIl9pbnN0YW5jZSIsIl9jbGllbnQiLCJOb2RlU1NIIiwiY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IiwicHJpdmF0ZUtleSIsInBhc3NwaHJhc2UiLCJsb2dpbkluZm8iLCJwcml2YXRlS2V5UGF0aCIsImNvbm5lY3QiLCJsb2NhbCIsInJlbW90ZSIsIm1rZGlyIiwicHV0RmlsZSIsImZpbGVNb2RlIiwic2NyaXB0IiwiZXhlYyIsImRpclBhdGgiLCJpc0Nvbm5lY3RlZCIsImRpcmVjdG9yeU1vZGUiLCJkaXJNb2RlIiwiZGlycyIsImN1cnJlbnRQYXRoIiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJjbG9zZSIsImRpc3Bvc2UiLCJzZnRwcGxpc3RDb25maWciLCJ1cGxvYWRUZW1wUGF0aCIsInJlbW90ZVBhdGgiLCJmaWxlVXNlciIsImNob3duIiwicmVtb3ZlU3luYyIsIm1vdmVTeW5jIiwidGdPcHRpb25zIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlbW92ZSIsInNyYyIsInBpY2JlZCIsInNlcnZlcktleSIsInBpY2xpc3RPcHRpb25zIiwiZnVsbFJlc3VsdCIsImlzVjIiLCJ2MUhlYWRlcnMiLCJDb25uZWN0aW9uIiwidjFGb3JtRGF0YSIsInYySGVhZGVycyIsIkFjY2VwdCIsInN0cmF0ZWd5SWQiLCJhbGJ1bUlkIiwicGVybWlzc2lvbiIsInYyRm9ybURhdGEiLCJzdHJhdGVneV9pZCIsImFsYnVtX2lkIiwiYWdlbnQiLCJsc2t5T3B0aW9ucyIsImxpbmtzIiwiRmlsZU5hbWVHZW5lcmF0b3IiLCJtb250aCIsImRheSIsImV4dE5hbWUiLCJtZDUiLCJpbWdCdWZmZXIiLCJtZDVCNjQiLCJtZDVCNjRTaG9ydCIsInNoYTEiLCJzaGEyNTYiLCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXBNUyIsImZvcm1hdFBhdGgiLCJmaWxlTmFtZUdlbmVyYXRvciIsImZpZWxkcyIsInJlIiwiZ2V0UHJveHlBZ2VudCIsImZvcm1hdGVkUHJveHkiLCJmb3JtYXRIdHRwUHJveHlVUkwiLCJIdHRwc1Byb3h5QWdlbnQiLCJIdHRwUHJveHlBZ2VudCIsImtlZXBBbGl2ZSIsImtlZXBBbGl2ZU1zZWNzIiwic2NoZWR1bGluZyIsImdldEZpbGVVUkwiLCJlVGFnIiwidmVyc2lvbklkIiwic2lnbmVkVXJsIiwiZ2V0U2lnbmVkVXJsIiwiR2V0T2JqZWN0Q29tbWFuZCIsIkJ1Y2tldCIsImJ1Y2tldE5hbWUiLCJLZXkiLCJJZk1hdGNoIiwiVmVyc2lvbklkIiwiZXhwaXJlc0luIiwidXJsT2JqZWN0Iiwic2VhcmNoIiwiaHJlZiIsImNyZWF0ZVMzQ2xpZW50IiwiaHR0cEhhbmRsZXJPcHRzIiwiaHR0cEFnZW50IiwicmVnaW9uIiwiY3JlZGVudGlhbHMiLCJhY2Nlc3NLZXlJRCIsInNlY3JldEFjY2Vzc0tleSIsInRscyIsImZvcmNlUGF0aFN0eWxlIiwicGF0aFN0eWxlQWNjZXNzIiwicmVxdWVzdEhhbmRsZXIiLCJOb2RlSHR0cEhhbmRsZXIiLCJTM0NsaWVudCIsImNyZWF0ZVVwbG9hZFRhc2siLCJjb250ZW50RW5jb2RpbmciLCJnZXRUeXBlIiwiZmlsZVR5cGUiLCJGaWxlVHlwZSIsImZyb21CdWZmZXIiLCJleHRyYWN0SW5mbyIsIlB1dE9iamVjdENvbW1hbmQiLCJBQ0wiLCJhY2wiLCJCb2R5IiwiQ29udGVudEVuY29kaW5nIiwic2VuZCIsInVybFByZWZpeCIsIkVUYWciLCJpbWdVUkwiLCJmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJCb29sZWFuIiwidGFza3MiLCJpZHgiLCJyZXN1bHRzIiwiYnVpbGRJblVwbG9hZGVycyIsImFsaVl1blVwbG9hZGVyIiwiYXdzczNwbGlzdFVwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwibG9jYWxVcGxvYWRlciIsImxza3lVcGxvYWRlciIsInBpY2xpc3RVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJzZnRwVXBsb2FkZXIiLCJzbW1zVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwidGVsZWdyYXBoVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImdldEltZ1NpemUiLCJJbWdGcm9tUGF0aCIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwidHJpbSIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwic21tcyIsInJlYWQiLCJmbHVzaCIsInVuc2V0IiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfTE9DQUwiLCJQSUNCRURfTE9DQUxfUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfTE9DQUxfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX1dFQlBBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9URUxFR1JBUEgiLCJQSUNCRURfSU1HVVIiLCJQSUNCRURfSU1HVVJfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX0FMQlVNIiwiUElDQkVEX0lNR1VSX1BST1hZIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfVVBZVU4iLCJQSUNCRURfVVBZVU5fQlVDS0VUIiwiUElDQkVEX1VQWVVOX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX1BBVEgiLCJQSUNCRURfVVBZVU5fVVJMIiwiUElDQkVEX1VQWVVOX09QVElPTlMiLCJQSUNCRURfVVBZVU5fRU5EUE9JTlQiLCJQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTiIsIlBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRSIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX1dFQkRBVlBMSVNUIiwiUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUiLCJQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUyIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1NGVFBQTElTVCIsIlBJQ0JFRF9TRlRQUExJU1RfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfRElSX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFIiwiUElDQkVEX1BJQ0xJU1QiLCJQSUNCRURfUElDTElTVF9IT1NUIiwiUElDQkVEX1BJQ0xJU1RfUE9SVCIsIlBJQ0JFRF9QSUNMSVNUX1BJQ0JFRCIsIlBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUiLCJQSUNCRURfUElDTElTVF9LRVkiLCJQSUNCRURfTFNLWV9QTElTVCIsIlBJQ0JFRF9MU0tZX1ZFUlNJT04iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04iLCJQSUNCRURfTFNLWV9IT1NUIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUIiwiUElDQkVEX0xTS1lfVE9LRU4iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOIiwiUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEIiwiUElDQkVEX0xTS1lfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEIiwiUElDQkVEX0xTS1lfUEVSTUlTU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUIiwiUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZIiwiUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUIiwiUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UIiwiUElDQkVEX0FXU1MzUExJU1RfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgiLCJQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MiLCJQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0wiLCJQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVgiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0wiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIkJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMSVAiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRyIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsIl9wbHVnaW5Mb2FkZXIiLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCIsImNsZWFudXAiXSwibWFwcGluZ3MiOiJpNENBSUEsTUFBTUEsR0FBZ0IsQ0FBQ0MsRUFBVUMsRUFBaUJDLEVBQXFCQyxFQUFlQyxFQUFvQkMsS0FDeEcsSUFBSUMsRUFBVU4sRUFB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
1
+ import{EventEmitter as e}from"events";import t from"fs-extra";import{cloneDeep as r,merge as n,get as i,set as a,unset as s}from"lodash";import o,{homedir as E}from"os";import l from"path";import{Command as I}from"commander";import S from"inquirer";import{imageSize as _}from"image-size";import u,{URL as P}from"url";import c from"text-to-svg";import p from"sharp";import C from"crypto";import{v4 as A}from"uuid";import T from"chalk";import g from"download-git-repo";import d from"rimraf";import D from"minimatch";import m from"globby";import L from"ejs";import f from"dayjs";import h from"util";import B from"cross-spawn";import N from"resolve";import U from"axios";import R from"form-data";import O from"https";import M from"tunnel";import y from"heic-convert";import G from"mime-types";import b from"qiniu";import{AuthType as x,createClient as w}from"webdav";import{NodeSSH as W}from"node-ssh-no-cpu-features";import{S3Client as K,PutObjectCommand as F,GetObjectCommand as H}from"@aws-sdk/client-s3";import{getSignedUrl as v}from"@aws-sdk/s3-request-presigner";import{NodeHttpHandler as $}from"@smithy/node-http-handler";import k from"file-type";import Y from"mime";import{HttpsProxyAgent as q,HttpProxyAgent as V}from"hpagent";import{spawn as j}from"child_process";import z from"is-wsl";import{JSONStore as X}from"@picgo/store";import Q from"js-yaml";import{ObjectAdapter as Z,I18n as J}from"@picgo/i18n";const ee=(e,t,r,n,i,a)=>{let s=e.program.command(t).description(r).alias(n);(null==a?void 0:a.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==a?void 0:a.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(i)},te={handle:e=>{const t=e.cmd;ee(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.install(t,a).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),ee(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),ee(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:i}=r,a={proxy:n,registry:i};e.pluginHandler.update(t,a).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},re={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function ne(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ie(e){return 1===e.toString().length?`0${e}`:e.toString()}function ae(e){return C.createHash("md5").update(e).digest("hex")}function se(e,t,r,n){const i=new Date,a=i.getFullYear().toString(),s=l.basename(e,l.extname(e)),o={"{Y}":()=>a,"{y}":()=>a.slice(2),"{m}":()=>ie(i.getMonth()+1),"{d}":()=>ie(i.getDate()),"{h}":()=>ie(i.getHours()),"{i}":()=>ie(i.getMinutes()),"{s}":()=>ie(i.getSeconds()),"{ms}":()=>i.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>ae(n||s),"{md5-16}":()=>ae(n||s).slice(0,16),"{filename}":()=>r?l.basename(r,l.extname(r)):s,"{uuid}":()=>A().replace(/-/g,""),"{timestamp}":()=>i.getTime().toString()};if(void 0===t||!Object.keys(o).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const E=l.extname(e);let I=Object.keys(o).reduce(((e,t)=>e.replace(new RegExp(t,"g"),o[t]())),t)+E;return I=I.replace(/{str-(\d+)}/gi,((e,t)=>ne(parseInt(t,10)))),I=I.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return l.dirname(e).split(l.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),I}const oe=e=>/^https?:\/\//.test(e),Ee=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},le=e=>(Ee(e)||(e=encodeURI(e)),e),Ie=e=>{try{const{width:t=0,height:r=0,type:n}=_(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},Se=async e=>{try{return{extname:l.extname(e),fileName:l.basename(e),buffer:await t.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},_e=async(e,t)=>{let r;e=le(e);const n=new Promise(((n,i)=>{(async()=>{var i;try{const i=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const a=new P(e).pathname;let s="";try{s=new P(e).searchParams.get("wx_fmt")||l.extname(a)||""}catch(e){s=l.extname(a)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:i,fileName:l.basename(a),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(i=null==t?void 0:t.message)&&void 0!==i?i:""}`})}})().catch(i)})),i=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,i])},ue=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Pe(e)?"simple":"unknown",Pe=e=>{if(l.isAbsolute(e))return!1;const r=l.join(process.cwd(),e);return!t.existsSync(r)&&(!e.includes("/")&&!e.includes("\\"))},ce=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,pe=(e,r=console)=>{switch(ue(e)){case"normal":case"scope":return e;case"simple":return ce(e);default:{let n=e;return l.isAbsolute(e)&&t.existsSync(e)?Ae(n):(n=l.join(process.cwd(),e),t.existsSync(n)?Ae(n):(r.warn(`Can't find plugin ${e}`),""))}}},Ce=(e,r=console)=>{var n;switch(ue(e)){case"normal":return Te(e);case"scope":return Te(e,!0);case"simple":return Te(ce(e));default:{if(!t.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const i=l.posix.join(e,"package.json");if(t.existsSync(i)){const e=t.readJSONSync(i)||{};return(null===(n=e.name)||void 0===n?void 0:n.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Ae=e=>e.split(l.sep).join("/"),Te=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},ge=[],de=e=>ge.some((t=>e.startsWith(t))),De=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function me(e){try{return JSON.parse(e)}catch(t){return e}}const Le=(e=0)=>isNaN(Number(e))?0:Number(e),fe=()=>"development"===process.env.NODE_ENV;const he=l.join(__dirname,"assets","piclist.png");async function Be(e,t,r,n,i,a,s,o,E,l,I){o=!o||o<0||o>1?.15:o;const S=p(e,{animated:!0}),{width:_=200}=await S.metadata(),u=await async function(e,t,r,n,i,a,s,o=200,E=0){let l;"image"===e?(s=s||he,l=await p(s).toBuffer()):l=await async function(e,t,r,n){t=t||"测试",n=n||e;const i={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},a=c.loadSync(n).getSVG(t,i);return Buffer.from(a)}(t,r,a,n||t);const{width:I,height:S}=await async function(e){const{width:t,height:r}=await p(e).metadata();return{width:t||200,height:r||200}}(l),_=Math.floor(o*Le(i)),u=Math.floor(_*S/I);return await p(l).resize(_,u,{fit:"inside"}).rotate(E,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,a,s,o,E,l,_,i);return await S.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const Ne=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Ue=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Re=e=>Ue.includes(e),Oe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function Me(e,t,r,n){try{let n=p(e,{animated:!0});return n=p(await Be(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Le(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Le(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function ye(e){const t="string"==typeof e.formatConvertObj?me(e.formatConvertObj):e.formatConvertObj;return{quality:Le(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Le(e.reSizeHeight),reSizeWidth:Le(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Le(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Le(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Ge(e,t,r,n){t=ye(t);try{if(r=r.toLowerCase().replace(".",""),!Oe.includes(r))return e;let n=p(e,{animated:!0}),i=100;if(Ne(t.quality)&&t.quality<100&&(i=t.quality),t.isReSizeByPercent){if(Ne(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)n=n.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const i=t.reSizeHeight/r;n=n.resize(Math.round(e*i),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const i=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*i),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=be(t,r);e!==r&&(n=n.toFormat(e,{quality:i,mozjpeg:!0}))}else n=r&&Re(r)?n.toFormat(r,{quality:i,mozjpeg:!0}):n.toFormat("jpg",{quality:i,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}function be(e,t){if(e=ye(e||{}),"gif"===(t=t.toLowerCase().replace(".","")))return"gif";let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],Re(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const xe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],we=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&xe.includes(t)&&"svg"!==t),We=(e,t)=>{const r=t.toLowerCase().replace(".","");if(!xe.includes(r)||!e)return!1;const{quality:n,isReSizeByPercent:i,reSizePercent:a,isReSize:s,reSizeHeight:o,reSizeWidth:E,isRotate:l,rotateDegree:I,isConvert:S,convertFormat:_,isFlip:u,isFlop:P}=ye(e);if(Ne(n)&&n<100)return!0;if(i&&Ne(a))return!0;if(s&&("number"==typeof o&&o>0||"number"==typeof E&&E>0))return!0;if(l&&I)return!0;if(u||P)return!0;if(S){return t!==(_||"jpg")}return!1},Ke=async(e,t)=>(t=t.toLowerCase().replace(".",""),xe.includes(t)&&"svg"!==t?await p(e,{animated:!0}).toBuffer():e);var Fe=Object.freeze({__proto__:null,randomStringGenerator:ne,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${ne(5)}${l.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${ne(t)}${l.extname(e)}`},renameFileNameWithCustomString:se,isUrl:oe,isUrlEncode:Ee,handleUrlEncode:le,getImageSize:Ie,getFSFile:Se,getURLFile:_e,getPluginNameType:ue,isSimpleName:Pe,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:ce,getProcessPluginName:pe,getNormalPluginName:Ce,handleUnixStylePath:Ae,removePluginVersion:Te,configBlackList:ge,isConfigKeyInBlackList:de,isInputConfigValid:De,safeParse:me,forceNumber:Le,isDev:fe,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:Be,imageAddWaterMark:Me,imageProcess:Ge,getConvertedFormat:be,needAddWatermark:we,needCompress:We,removeExif:Ke});const He={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((r=>{(async()=>{const n=r.map((e=>oe(e)?e:l.resolve(e))).filter((r=>{const n=t.existsSync(r)||oe(r);return n||e.log.warn(`${r} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}};var ve=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var $e=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var ke=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const Ye=async(e,t,r,n)=>{const i=await e.cmd.inquirer.prompt(t),a="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[a]:i}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},qe={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,i;try{switch(t){case"buildin":if("compress"===r)await Ye(e,ve(e),t,r);else if("watermark"===r)await Ye(e,$e(e),t,r);else if("rename"===r)await Ye(e,ke(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await Ye(e,ve(e),t,n.buildin):"watermark"===n.buildin?await Ye(e,$e(e),t,n.buildin):"rename"===n.buildin&&await Ye(e,ke(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await Ye(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),i=e.helper[t].get(n[t]);(null==i?void 0:i.config)&&await Ye(e,i.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await Ye(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(i=e.pluginLoader.getPlugin(r.plugin))||void 0===i?void 0:i.config)&&await Ye(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Ve={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const i={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!i[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(i[r])}else n=Object.keys(i).map((e=>i[e]));const a=await t.inquirer.prompt(n);if(a.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{a.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":a.uploader||e.getConfig("picBed.current"),"picBed.uploader":a.uploader||e.getConfig("picBed.current"),"picBed.transformer":a.transformer||"path"}),e.log.success("Configure saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},je={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},ze=async(e,t)=>{try{const r=Qe(t.tmp),n=l.join(t.tmp,"template");let i={};r.prompts&&r.prompts.length>0&&(i=await e.cmd.inquirer.prompt(r.prompts));let a=await m(["**/*"],{cwd:n,dot:!0});if(a=a.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{D(t,e,{dot:!0})&&(n=t)})),!n||Xe(e,r.filters[n],i)})),0===a.length)return void e.log.warn("Template files not found!");const s=Ze(a,n,i);Je(t.dest,s),"function"==typeof r.complete&&r.complete({answers:i,options:t,files:a,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},Xe=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},Qe=e=>{const r=l.join(e,"index.js");if(t.existsSync(r)){return require(r)}return{}},Ze=(e,r,n)=>{const i={};return e.forEach((e=>{const a=t.readFileSync(l.join(r,e),"utf8"),s=L.render(a,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(i[e]=s)})),i},Je=(e,r)=>{Object.keys(r).forEach((n=>{const i=l.join(e,n);t.ensureDirSync(l.dirname(i)),t.writeFileSync(i,r[n])}))},et=(e,r)=>{r.offline?t.existsSync(r.template)?ze(e,r).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${r.template} not found`):(r.template=r.hasSlash?r.template:"PicGo/picgo-template-"+r.template,tt(e,r))},tt=(e,r)=>{t.existsSync(r.tmp)&&d.sync(r.tmp),e.log.info("Template files are downloading..."),g(r.template,r.tmp,{clone:r.clone},(t=>{t?e.log.error(t):(e.log.success("Template files are downloaded!"),ze(e,r).catch((t=>{e.log.error(t)})))}))},rt={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((r,n,i)=>{(async()=>{try{const a=r.includes("/"),s=!n||"."===n,o=l.resolve(n||"."),I=i.clone||!1,S=i.offline||!1,_=l.join(E(),".piclist/templates",r.replace(/[/:]/g,"-"));i.offline&&(r=_);const u={template:r,project:n,hasSlash:a,inPlace:s,dest:o,clone:I,tmp:_,offline:S};s||t.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&et(e,u)})):et(e,u)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(T.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(T.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},nt={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class it{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),it.currentPlugin&&(this.pluginIdMap.has(it.currentPlugin)?null===(r=this.pluginIdMap.get(it.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(it.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const at=(e=null)=>{it.currentPlugin=e};class st{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new I,this.inquirer=S,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.8.10","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",te),e.cmd.register("config",re),e.cmd.register("setting",qe),e.cmd.register("upload",He),e.cmd.register("use",Ve),e.cmd.register("proxy",je),e.cmd.register("init",rt),e.cmd.register("i18n",nt)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=it.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var ot,Et,lt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(ot||(ot={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(Et||(Et={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(lt||(lt={}));class It{constructor(e){this.level={[ot.success]:"green",[ot.info]:"blue",[ot.warn]:"yellow",[ot.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=T[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||l.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(T.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(t.existsSync(e)){const r=t.statSync(e).size,n=1024*Le(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:r>n,logFileSize:r,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){t.existsSync(e)&&(t.unlinkSync(e),t.createFileSync(e))}handleWriteLog(e,r,...n){try{let i=`${f().format("YYYY-MM-DD HH:mm:ss")} [PicList ${r.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===r?i+=`\n------Error Stack Begin------\n${h.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),i+=`${e} `)})),i+="\n",t.appendFileSync(e,i)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(ot.success,...e)}info(...e){this.handleLog(ot.info,...e)}error(...e){this.handleLog(ot.error,...e)}warn(...e){this.handleLog(ot.warn,...e)}debug(...e){fe()&&this.handleLog(ot.info,...e)}}class St{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],i=e.map((e=>_t(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),a=i.map((e=>e.fullName)),s=i.map((e=>e.pkgName));if(a.length>0){const e=await this.execCommand("install",a,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>_t(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>_t(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},i={}){const a=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,E;let l=[e].concat(t).concat("--color=always").concat("--save");a&&(l=l.concat(`--registry=${a}`)),s&&(l=l.concat(`--proxy=${s}`));try{const e=B("npm",l,{cwd:r,env:Object.assign({},process.env,i)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(E=e.stderr)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(Et.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Et.FAILED,e)}}))}}const _t=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=pe(t,e.log);if(!n)return r;const i=Ce(n,e.log);return i?{success:!0,fullName:n,pkgName:i}:r};class ut{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=l.join(this.ctx.baseDir,"package.json");if(!t.existsSync(e)){const r={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};t.writeFileSync(e,JSON.stringify(r),"utf8")}}resolvePlugin(e,t){try{return N.sync(t,{basedir:e.baseDir})}catch(r){return l.join(e.baseDir,"node_modules",t)}}load(){const e=l.join(this.ctx.baseDir,"package.json"),r=l.join(this.ctx.baseDir,"node_modules/");if(!t.existsSync(r))return!1;const n=t.readJSONSync(e),i=Object.keys(n.dependencies||{}),a=Object.keys(n.devDependencies||{}),s=i.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const r=this.resolvePlugin(this.ctx,e);return t.existsSync(r)}));for(const e of s)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),at(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),at(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(Et.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),at(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=l.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const Pt=new e,ct=new O.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function pt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Ct(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function At(e){var t,r,n,i,a,s,o;const E={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(E)}class Tt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Pt.on(lt.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new P(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=M.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ct;const r=U.create(this.options);r.interceptors.response.use(Ct,At);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let i=e.proxy;if("string"==typeof i){try{i=new P(e.proxy)}catch(e){i=!1,n.proxy=!1,console.error(e)}r=!0}i&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=M.httpsOverHttp({proxy:{host:null==i?void 0:i.hostname,port:parseInt(null==i?void 0:i.port,10)}})):n.proxy={host:i.hostname,port:parseInt(i.port,10),protocol:"http"})}if("formData"in e){const t=new R;for(const r in e.formData)pt(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let i="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(i=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(i=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(i=e.headers["content-type"],delete e.headers["content-type"]),""!==i&&e.headers&&(e.headers["Content-Type"]=i),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class gt extends e{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const r=l.join(e.baseDir,"piclistTemp"),n=l.join(e.baseDir,"imgTemp");this.ttfPath=l.join(e.baseDir,"assets","simhei.ttf"),t.ensureDirSync(n),t.emptyDirSync(r)}async downloadTTF(){const e=l.dirname(this.ttfPath);if(t.ensureDirSync(e),t.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await U.get(this.ttfLink,{responseType:"arraybuffer"});return t.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e){const n=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");n.input=e,n.rawInputPath=[],n.rawInput=r(e),n.output=[];const{compressOptions:i,watermarkOptions:a}=this.helpGetOption(n);if(i||a){const e=l.join(n.baseDir,"piclistTemp");await Promise.allSettled(n.input.map((async(r,s)=>{const o=oe(r),E=o?await _e(r,n):{success:!1};if(o&&(!E.success||!E.buffer))return;let I,S=!1;n.rawInputPath[s]=r;const _=o?E.extname||"":l.extname(r),u=o?E.buffer:t.readFileSync(r);if(we(a,_)){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),S=!0)}S||(n.log.info("Add watermark to image"),I=await Me(u,a,this.ttfPath,n.log))}if(We(i,_))if(n.log.info("Compress or convert image"),o||".heic"!==_&&".heif"!==_)I=await Ge(null!=I?I:u,i,_,n.log);else{const a=await y({buffer:u,format:"JPEG",quality:1}),s=l.join(e,`${l.basename(r,_)}.jpg`);t.writeFileSync(s,Buffer.from(a)),I=await Ge(t.readFileSync(s),i,".jpg",n.log)}if(!I&&(null==i?void 0:i.isRemoveExif)&&(n.log.info("Remove exif info."),I=await Ke(u,_)),I){let a=(null==i?void 0:i.isConvert)?be(i,_):_;a=a.startsWith(".")?a:`.${a}`;const S=o?l.join(e,`${E.fileName?`${l.basename(E.fileName,l.extname(E.fileName))}`:(new Date).getTime()}${a}`):l.join(e,`${l.basename(r,_)}${a}`);n.rawInputPath[s]=l.join(l.dirname(r),o?l.basename(S):`${l.basename(r,_)}${a}`),t.writeFileSync(S,I),n.input[s]=S}})))}else for(const e of n.input)n.rawInputPath.push(e);await this.beforeTransform(n),await this.doTransform(n);const s=n.getConfig("buildIn.rename")||{};if(s.enable){const e=s.format||"{filename}";n.output=n.output.map(((t,r)=>{let i=t.fileName;return e&&(i=se(n.rawInputPath[r],e,void 0,t.base64Image?t.base64Image:t.buffer),i=i.replace(/\/+/g,"/"),"/"===i.slice(-1)&&(i+=r.toString())),t.fileName=i,t}))}return await this.beforeUpload(n),await this.doUpload(n),n.input=n.rawInput,await this.afterUpload(n),n}catch(e){if(n.log.warn(Et.FAILED),n.emit(Et.UPLOAD_PROGRESS,-1),n.emit(Et.FAILED,e),n.log.error(e),n.getConfig("debug"))throw e;return n}}async beforeTransform(e){return e.emit(Et.UPLOAD_PROGRESS,0),e.emit(Et.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Et.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(Et.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Et.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("smms")),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(Et.AFTER_UPLOAD,e),e.emit(Et.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let i=0;i<r;i++)void 0!==e.output[i].imgUrl&&(t+=n?le(e.output[i].imgUrl):e.output[i].imgUrl,i!==r-1&&(t+="\n")),delete e.output[i].base64Image,delete e.output[i].buffer;return e.emit(Et.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),i=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${i}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${i}: ${n[r]} error`),e}}))),t}}const dt=(e,t,r,n="")=>{let i=n||"sm.ms";return i=i.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${i}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},Dt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=dt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const r=await e.request(i),a=JSON.parse(r);if("success"===a.code)delete n.base64Image,delete n.buffer,n.imgUrl=a.data.url,n.hash=a.data.hash;else{if("image_repeated"!==a.code||"string"!=typeof a.images)throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:a.message}),new Error(a.message);{delete n.base64Image,delete n.buffer,n.imgUrl=a.images;const e=await U.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===a.images){n.hash=e.hash;break}}}}}catch(t){throw e.log.error(t),t}}return e},mt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};function Lt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const i=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return i?`${t?"/":""}${i}${r?"/":""}`:n?"":"/"}function ft(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const ht=(e,t)=>{const r=e.secretId,n=e.secretKey,i=e.appId,a=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const i=C.createHmac("sha1",n).update(o).digest("hex"),a=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,E=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${a}\n`,l=`sha1\n${o}\n${C.createHash("sha1").update(E).digest("hex")}\n`;s=C.createHmac("sha1",i).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${i}&b=${a}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,E=C.createHmac("sha1",n).update(o).digest(),l=Buffer.concat([E,Buffer.from(o)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:i,bucket:a,signTime:o}},Bt=(e,t,r,n,i)=>{const a=e.area,s=e.path;if(e.version&&"v4"!==e.version){const a=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${a}/${ft(`${s}${t}`)}`,headers:{Host:`${e.bucket}.${a}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:G.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${i};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${a}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${a}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${i};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},Nt=async e=>{var t,r,n;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const a=e.output,s=(i.customUrl||"").replace(/\/$/,""),o=Lt({path:i.path});i.path=o;const E=!i.version||"v4"===i.version;for(const l of a)if(l.fileName&&l.buffer){const a=ht(i,l.fileName);if(!a)return!1;let I=l.buffer;!I&&l.base64Image&&(I=Buffer.from(l.base64Image,"base64"));const S=Bt(i,l.fileName,a,I,e.GUI_VERSION||e.VERSION),_=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let u;if(u=E&&"string"==typeof _?JSON.parse(_):_,400===u.statusCode)throw(null===(t=null==u?void 0:u.body)||void 0===t?void 0:t.err)?u.body.err:new Error((null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.msg)||(null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.message));const P=i.options||"",c=void 0!==i.slim&&!!i.slim;if(E&&"SUCCESS"===u.message)delete l.base64Image,delete l.buffer,l.imgUrl=s?`${s}/${ft(`${o}${l.fileName}`)}${P}`:`${u.data.source_url}${P}`;else{if(E||!u||200!==u.statusCode)throw new Error(_.body.msg);if(delete l.base64Image,delete l.buffer,s)l.imgUrl=`${s}/${ft(`${o}${l.fileName}`)}${P}`;else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;l.imgUrl=`https://${i.bucket}.${e}/${ft(`${o}${l.fileName}`)}${P}`}}c&&(l.imgUrl+=P?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Ut=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};function Rt(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${ft(`${t}${r}`)}${n}`}const Ot=(e,t,r)=>{const{token:n,repo:i}=t,a=G.lookup(e)||"application/octet-stream";return{method:"PUT",url:Rt(i,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":a},body:r,json:!0}},Mt=(e,t)=>{const{token:r,repo:n,branch:i}=t;return{method:"GET",url:Rt(n,t.path,e,`?ref=${i}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},yt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=Lt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){const n=i.base64Image||Buffer.from(i.buffer).toString("base64"),a={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(i.fileName)},s=Ot(i.fileName,t,a);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete i.base64Image,delete i.buffer,i.imgUrl=t.customUrl?`${t.customUrl}/${ft(`${r}${i.fileName}`)}`:n.content.download_url,i.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;{delete i.base64Image,delete i.buffer;const a=await e.request(Mt(i.fileName,t));if(!Object.keys(a).length)throw n;i.hash=a.sha,i.imgUrl=t.customUrl?`${t.customUrl}/${ft(`${r}${i.fileName}`)}`:a.download_url}}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Gt=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function bt(e,t,r,n){const i=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),a=e.path||"";return{method:"POST",url:`http://upload${i}.qiniup.com/putb64/-1/key/${Buffer.from(a+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":G.lookup(t)||"application/octet-stream"},body:n}}function xt(e){const t=e.accessKey,r=e.secretKey,n=new b.auth.digest.Mac(t,r),i={scope:e.bucket};return new b.rs.PutPolicy(i).uploadToken(n)}const wt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=bt(t,n.fileName,xt(t),r),a=await e.request(i),s=JSON.parse(a);if(!(null==s?void 0:s.key))throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Wt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Kt=async(e,t,r,n)=>{const i=t.clientId||"",a=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let E;if(a&&s)E=s;else{if(!i)throw new Error("clientId or accessToken is required");E=`Client-ID ${i}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:E,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(a&&s&&o){let r,n=0,i="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${a}/albums/${n}`,headers:{Authorization:E},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const l=r.body.data;for(const e of l)if(e.title===o){i=e.id;break}n++}while(r.body.data.length>0);i&&l.formData&&(l.formData.album=i)}return t.proxy&&(l.proxy=t.proxy),l},Ft=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),i=await Kt(e,r,n.fileName,t),a=await e.request(i),s="string"==typeof a?JSON.parse(a):a;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},Ht=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const vt=()=>(new Date).toUTCString(),$t=(e,t)=>{const r=vt(),n=`PUT\n\n${G.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,i=C.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${i}`},kt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${ft(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:vt(),"Content-Type":G.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),Yt=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=Lt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),i=t.path;for(const a of r)if(a.fileName&&a.buffer){const r=$t(t,a.fileName);let s=a.buffer;!s&&a.base64Image&&(s=Buffer.from(a.base64Image,"base64"));const o=kt(t,a.fileName,r,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete a.base64Image,delete a.buffer;const e=t.options||"";a.imgUrl=n?`${n}/${ft(`${i}${a.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${ft(`${i}${a.fileName}`)}${e}`}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},qt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Vt=(e,t)=>{const r=e.path||"",n=e.operator,i=zt(e.password),a=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${ft(`${r}${t}`)}`}&${a}`;return`UPYUN ${n}:${C.createHmac("sha1",i).update(s).digest("base64")}`},jt=(e,t,r,n)=>{const i=e.bucket,a=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${i}/${ft(`${a}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":G.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function zt(e){return C.createHash("md5").update(e).digest("hex")}const Xt=(e,t,r,n)=>{const i=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),a=Math.round((new Date).getTime()/1e3),s=t?a+parseInt(t.toString(),10):a+1800;return`_upt=${`${zt(`${e}&${s}&${i}`).substring(12,20)}${s}`}`},Qt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=Lt({path:t.path});t.path=n;for(const i of r)if(i.fileName&&i.buffer){let r=i.buffer;!r&&i.base64Image&&(r=Buffer.from(i.base64Image,"base64"));const a=Vt(t,i.fileName),s=jt(t,i.fileName,a,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete i.base64Image,delete i.buffer,i.imgUrl=`${t.url}/${ft(`${n}${i.fileName}`)}${o}`,t.antiLeechToken){const e=Xt(t.antiLeechToken,t.expireTime,t,i.fileName);i.imgUrl=i.imgUrl.includes("?")?`${i.imgUrl}&${e}`:`${i.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=me(t.error);e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},Zt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const Jt=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=Lt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",i=Lt({path:r.webpath,rootToEmpty:!1}),a=r.options||"";try{const s=e.output,o=r.customUrl,E=r.path;for(const I of s)if(I.fileName&&I.buffer){let s=I.buffer;!s&&I.base64Image&&(s=Buffer.from(I.base64Image,"base64"));const S={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(S.authType=x.Digest);const _=w(r.host,S),u="/"===E?"":E;u&&await _.createDirectory(u,{recursive:!0});if(!await _.putFileContents(`${E}${I.fileName}`.replace(/^\/+|\/+$/g,""),s,{overwrite:!0}))throw new Error("Upload failed");{const n=l.join(e.baseDir,"imgTemp","webdavplist"),S=l.join(n,I.fileName);t.ensureDirSync(l.dirname(S)),t.writeFileSync(S,s),delete I.base64Image,delete I.buffer;const _=o||r.host;r.webpath?I.imgUrl=`${_}/${ft(`${i}${I.fileName}`)}${a}`:I.imgUrl=`${_}/${ft(`${E}${I.fileName}`)}${a}`,I.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(I.fileName)}`}}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},er=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const tr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const i=n.path||"",a=(n.customUrl||"").replace(/\/$/,""),s=Lt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),o=e.output;for(const r of o)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{try{const o=l.join(e.baseDir,"imgTemp","local"),E=l.join(o,r.fileName),I=l.join(i,r.fileName);t.ensureDirSync(l.dirname(I)),t.ensureDirSync(l.dirname(E)),t.writeFileSync(I,n),t.copyFileSync(I,E),delete r.base64Image,delete r.buffer,r.imgUrl=a?`${a}/${ft(`${s}${r.fileName}`)}`:l.join(i,r.fileName),r.hash=l.join(i,r.fileName),r.galleryPath=`http://localhost:36699/local/${encodeURIComponent(r.fileName)}`}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},rr=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class nr{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new W)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:i}=e,a=n?{username:t,privateKeyPath:n,passphrase:i||void 0}:{username:t,password:r};try{return await nr.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},a)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(l.dirname(t).replace(/^\/+|\/+$/g,""),r),await nr.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){throw new Error(e)}}async mkdir(e,t){if(!nr.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,i]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],a=`chown ${n}:${i} "${e}"`;return this.exec(a)}async exec(e){return 0===(await nr.client.execCommand(e)).code}close(){nr.client.dispose(),this._isConnected=!1}}const ir=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=Lt({path:r.uploadPath,rootToEmpty:!1});const n=Lt({path:r.webPath,rootToEmpty:!1});try{const i=e.output;for(const a of i)if(a.fileName&&a.buffer){let i=a.buffer;!i&&a.base64Image&&(i=Buffer.from(a.base64Image,"base64"));const s=l.join(e.baseDir,"uploadTemp"),o=l.join(e.baseDir,"imgTemp","sftpplist");t.ensureDirSync(o);const E=l.join(s,a.fileName);t.ensureDirSync(l.dirname(E)),t.writeFileSync(E,i);const I=nr.instance;await I.connect(r);const S=l.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await I.upload(E,S,r),r.fileUser&&await I.chown(S,r.fileUser),delete a.base64Image,delete a.buffer;const _=r.customUrl||r.host;r.webPath?a.imgUrl=`${_}/${ft(`${"/"===n?"":n}${a.fileName}`)}`:a.imgUrl=`${_}/${ft(`${"/"===r.uploadPath?"":r.uploadPath}${a.fileName}`)}`;const u=l.join(o,a.fileName);t.ensureDirSync(l.dirname(u)),t.removeSync(u),t.moveSync(E,l.join(o,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,I.close()}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},ar=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const sr=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},or=async e=>{var r,n;let i=e.getConfig("picBed.telegraphplist");i||(i={});try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const s=l.join(e.baseDir,"uploadTemp");t.ensureDirSync(s);const o=l.join(s,a.fileName);t.writeFileSync(o,n);const E=await sr(i,t.createReadStream(o)),I=await e.request(E),S="string"==typeof I?JSON.parse(I):I;if(t.remove(o),!(null===(r=null==S?void 0:S[0])||void 0===r?void 0:r.src))throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=`https://telegra.ph${S[0].src}`}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data)||t}},Er=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const lr=(e,t,r)=>{const n=e.host||"127.0.0.1",i=e.port||36677,a=e.picbed||"",s=e.configName||"Default",o=e.serverKey||"";let E=`http://${n}:${i}/upload?configName=${s}`;return a&&(E+=`&picbed=${a}`),o&&(E+=`&key=${o}`),{method:"POST",url:E,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:G.lookup(t)}}},resolveWithFullResponse:!0}},Ir=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const i of n)if(i.fileName&&i.buffer){let n=i.buffer;!n&&i.base64Image&&(n=Buffer.from(i.base64Image,"base64"));const a=lr(r,i.fileName,n),s=await e.request(a).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete i.base64Image,delete i.buffer,i.imgUrl=s.body.result[0],i.fullResult=s.body.fullResult[0]}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Sr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};const _r=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const i="V2"===e.version,a=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:a||void 0},o={image:{value:r,options:{filename:t}},ssl:"true"},E={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:a||void 0},l=e.strategyId,I=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const _={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:l,album_id:I,permission:S};l||delete _.strategy_id,I||delete _.album_id,0!==S&&1!==S&&delete _.permission;return{method:"POST",url:i?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new O.Agent({rejectUnauthorized:!1}),headers:i?E:s,formData:i?_:o}},ur=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");try{const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const i=_r(t,n.fileName,r);let a=await e.Request.request(i);a="string"==typeof a?JSON.parse(a):a;const s="V2"===t.version;if(!(s?!0===a.status:200===a.code))throw e.emit("notification",{title:"upload failed",body:a.message}),new Error(a.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?a.data.links.url:a.data.url,s&&(n.hash=a.data.key)}return e}catch(t){throw e.emit(Et.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Pr=e=>{const t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};class cr{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return C.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return C.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return C.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return C.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return C.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function pr(e,t){if(!t)return e.fileName;const r=new cr(e);let n=t;for(const e of cr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function Cr(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new P(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?q:V)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Ar(e,t,r){try{const n=await v(e.client,new H({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),i=new u.URL(n);return i.search="",i.href}catch(e){return Promise.reject(e)}}cr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var Tr={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new u.URL(e.endpoint).protocol}catch(e){}const i={};n?i.httpsAgent=Cr(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):i.httpAgent=Cr(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const a={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new $(i)};return new K(a)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)return Promise.reject(new Error("undefined image"));let t,r,n;try{({body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=Y.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await k.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item))}catch(e){return Promise.reject(e)}const i=new F({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n});let a,s;try{a=await e.client.send(i)}catch(e){return Promise.reject(e)}if(e.urlPrefix)s=`${e.urlPrefix}/${e.path}`;else try{s=await Ar(e,a.ETag,a.VersionId)}catch(e){return Promise.reject(e)}return{index:e.index,key:e.path,url:s,imgURL:s,versionId:a.VersionId,eTag:a.ETag}},getFileURL:Ar};function gr(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const dr=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find amazon s3 uploader config");const r=gr(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const i=Tr.createS3Client(t),a=e.output,s=a.map((async(e,r)=>Tr.createUploadTask({client:i,index:r,bucketName:t.bucketName,path:pr(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n})));let o;try{o=await Promise.all(s)}catch(t){throw e.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"),e.log.error(t),e.emit("notification",{title:"S3 存储上传错误",body:"请检查配置是否正确",text:""}),t}for(const e of o){const{index:t,url:r,imgURL:n}=e;delete a[t].buffer,delete a[t].base64Image,a[t].imgUrl=n,a[t].url=r}return e},Dr=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!1,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"confirm",default:gr(t.disableBucketPrefixToURL)||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};const mr=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Yt,config:qt})}(e),function(e){e.helper.uploader.register("aws-s3-plist",{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:dr,config:Dr})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:yt,config:Gt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Ft,config:Ht})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:tr,config:rr})}(e),function(e){e.helper.uploader.register("lskyplist",{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:ur,config:Pr})}(e),function(e){e.helper.uploader.register("piclist",{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:Ir,config:Sr})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:wt,config:Wt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:ir,config:ar})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Dt,config:mt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Nt,config:Ut})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:or,config:Er})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Qt,config:Zt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Jt,config:er})}(e)}}),Lr=(e,t,r)=>{const n=Ie(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var fr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let i;if(i=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:oe(r)?await _e(r,e):await Se(r),i.success&&i.buffer){const a=Lr(e,i.buffer,r),s=i.extname||a.extname||".png";t[n]={buffer:i.buffer,fileName:i.fileName||`${f().format("YYYYMMDDHHmmss")}${s}`,width:a.width,height:a.height,extname:i.extname}}else e.log.error(i.reason)}))),e.output=t.filter((e=>e)),e}};var hr={handle:async e=>(e.output.push(...e.input),e)};const Br={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},Nr={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const Ur=async e=>{!function(e){const r=l.join(e.baseDir,"piclist-clipboard-images");t.ensureDirSync(r)}(e);const r=l.join(e.baseDir,"piclist-clipboard-images",`${f().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((n,i)=>{const a=(()=>{const e=process.platform;if(z)return"wsl";if("win32"===e)return"10"===o.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),s=l.join(e.baseDir,Nr[a]);let E;t.existsSync(s)||t.writeFileSync(s,Br[a],"utf8"),E="darwin"===a?j("osascript",[s,r]):"win32"===a||"win10"===a?j("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,r]):j("sh",[s,r]),E.stdout.on("data",(s=>{if("linux"===a&&"no xclip or wl-clipboard"===s.toString().trim())return e.emit(Et.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),i(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const o=s.toString().trim();let E=!1;if(l.basename(o)!==l.basename(r)&&t.existsSync(o)&&(E=!0),"no image"!==o&&!t.existsSync(o))return i(new Error(`Can't find ${o}`));n({imgPath:o,shouldKeepAfterUploading:E})}))}))};class Rr{constructor(e){if(this.ctx=e,this.db=new X(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms",smms:{token:""}})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}const Or={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permisson",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class Mr{constructor(e){this.ctx=e,this.objectAdapter=new Z(Or);let t=this.ctx.getConfig("settings.language")||"zh-CN";Or[t]||(t="zh-CN"),this.i18n=new J({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();t.readdirSync(e,{withFileTypes:!0}).forEach((r=>{if(r.isFile()&&r.name.endsWith(".yml")){const n=l.join(e,r.name),i=t.readFileSync(n,"utf8");try{const e=Q.load(i);Or[r.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=l.join(this.ctx.baseDir,"i18n-cli");return t.pathExistsSync(e)||t.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const i=n(r,t);return this.objectAdapter.setLocale(e,i),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Or[e]=t,!0)}getLanguageList(){return Object.keys(Or)}}class yr extends e{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.8.10",this.configPath=e,this.input=[],this.rawInput=[],this.output=[],this.helper={transformer:new it("transformer"),uploader:new it("uploader"),beforeTransformPlugins:new it("beforeTransformPlugins"),beforeUploadPlugins:new it("beforeUploadPlugins"),afterUploadPlugins:new it("afterUploadPlugins")},this.initConfigPath(),this.log=new It(this),this.cmd=new st(this),this.pluginHandler=new St(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||l.join(E(),".piclist/config.json"),".JSON"!==l.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=l.dirname(this.configPath),t.pathExistsSync(this.configPath)||t.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new Rr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new Mr(this),this.Request=new Tt(this),this._pluginLoader=new ut(this),at("picgo"),mr().register(this),{register(e){e.helper.transformer.register("path",fr),e.helper.transformer.register("base64",hr)}}.register(this),at(""),this._pluginLoader.load(),this.lifecycle=new gt(this)}catch(e){throw this.emit(Et.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?i(this._config,e):(this._config=this.db.read(!0),this._config)}saveConfig(e){De(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(de(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){De(e)?Object.keys(e).forEach((t=>{de(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),a(this._config,t,e[t]),Pt.emit(lt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(de(e)?this.log.warn(`the config.${e} can't be unset`):s(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:r}=await Ur(this),n=()=>{r||t.remove(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(Et.FAILED,n),this.once(Et.FINISHED,n);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(Et.FAILED,e),e}}}export{st as Commander,gt as Lifecycle,it as LifecyclePlugins,It as Logger,yr as PicGo,Fe as PicGoUtils,St as PluginHandler,ut as PluginLoader,Tt as Request};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zbW1zLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xvY2FsLnRzIiwiLi4vc3JjL3V0aWxzL3NzaENsaWVudC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NmdHAudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90ZWxlZ3JhcGgudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9waWNsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbHNreS50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3MzL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXBsb2FkZXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hd3NzM3BsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW5kZXgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9wYXRoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvYmFzZTY0LnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vaW5kZXgudHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxudHlwZSBhY3Rpb25GdW5jID0gKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHZvaWRcclxuXHJcbmNvbnN0IGNyZWF0ZUNvbW1hbmQgPSAoY21kOiBhbnksIGNvbW1hbmQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgYWxpYXM6IHN0cmluZywgYWN0aW9uOiBhY3Rpb25GdW5jLCBvcHRpb25zPzogeyBwcm94eTogYm9vbGVhbiwgcmVnaXN0cnk6IGJvb2xlYW4gfSk6IHZvaWQgPT4ge1xyXG4gIGxldCBwcm9ncmFtID0gY21kLnByb2dyYW0uY29tbWFuZChjb21tYW5kKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxpYXMoYWxpYXMpXHJcbiAgaWYgKG9wdGlvbnM/LnByb3h5KSB7XHJcbiAgICBwcm9ncmFtID0gcHJvZ3JhbS5vcHRpb24oJy1wLCAtLXByb3h5IDxwcm94eT4nLCAnQWRkIHByb3h5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxyXG4gIH1cclxuICBpZiAob3B0aW9ucz8ucmVnaXN0cnkpIHtcclxuICAgIHByb2dyYW0gPSBwcm9ncmFtLm9wdGlvbignLXIsIC0tcmVnaXN0cnkgPHJlZ2lzdHJ5PicsICdDaG9vc2UgYSByZWdpc3RyeSBmb3IgaW5zdGFsbGluZyBwbHVnaW5zJylcclxuICB9XHJcbiAgcHJvZ3JhbS5hY3Rpb24oYWN0aW9uKVxyXG59XHJcblxyXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjcmVhdGVDb21tYW5kKFxyXG4gICAgICBjbWQsXHJcbiAgICAgICdpbnN0YWxsIDxwbHVnaW5zLi4uPicsXHJcbiAgICAgICdpbnN0YWxsIHBpY2dvIHBsdWdpbicsXHJcbiAgICAgICdhZGQnLFxyXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcHJveHksIHJlZ2lzdHJ5IH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSxcclxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfSlcclxuICAgIGNyZWF0ZUNvbW1hbmQoXHJcbiAgICAgIGNtZCxcclxuICAgICAgJ3VuaW5zdGFsbCA8cGx1Z2lucy4uLj4nLFxyXG4gICAgICAndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicsXHJcbiAgICAgICdybScsXHJcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVuaW5zdGFsbChwbHVnaW5zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICBjcmVhdGVDb21tYW5kKFxyXG4gICAgICBjbWQsXHJcbiAgICAgICd1cGRhdGUgPHBsdWdpbnMuLi4+JyxcclxuICAgICAgJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nLFxyXG4gICAgICAndXAnLFxyXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcHJveHksIHJlZ2lzdHJ5IH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci51cGRhdGUocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goKGU6IEVycm9yKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSxcclxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfVxyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXHJcbmltcG9ydCBUZXh0VG9TVkcgZnJvbSAndGV4dC10by1zdmcnXHJcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXHJcblxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSUltZ1NpemUsXHJcbiAgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sXHJcbiAgSVBsdWdpbk5hbWVUeXBlLFxyXG4gIElMb2dnZXIsXHJcbiAgSVBpY0dvLFxyXG4gIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxyXG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvciAobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xyXG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoKSA9PiBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSkpLmpvaW4oJycpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhUaW1lc3RhbXAgKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfSR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKDUpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFJhbmRvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtyYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdEhlbHBlciAobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIHJldHVybiBudW0udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bnVtfWAgOiBudW0udG9TdHJpbmcoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZDUgKGlucHV0OiBjcnlwdG8uQmluYXJ5TGlrZSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoaW5wdXQpLmRpZ2VzdCgnaGV4JylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBjdXN0b21Gb3JtYXQ6IHN0cmluZywgYWZmaXhGaWxlTmFtZT86IHN0cmluZywgZmlsZUJ1ZmZlcj86IGNyeXB0by5CaW5hcnlMaWtlKTogc3RyaW5nIHtcclxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXHJcbiAgY29uc3QgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKClcclxuICBjb25zdCBmaWxlYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSlcclxuICBjb25zdCBjb252ZXJzaW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBzdHJpbmc+ID0ge1xyXG4gICAgJ3tZfSc6ICgpID0+IHllYXIsXHJcbiAgICAne3l9JzogKCkgPT4geWVhci5zbGljZSgyKSxcclxuICAgICd7bX0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldE1vbnRoKCkgKyAxKSxcclxuICAgICd7ZH0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldERhdGUoKSksXHJcbiAgICAne2h9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRIb3VycygpKSxcclxuICAgICd7aX0nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldE1pbnV0ZXMoKSksXHJcbiAgICAne3N9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRTZWNvbmRzKCkpLFxyXG4gICAgJ3ttc30nOiAoKSA9PiBub3cuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxyXG4gICAgJ3ttZDV9JzogKCkgPT4gZ2V0TWQ1KGZpbGVCdWZmZXIgfHwgZmlsZWJhc2VuYW1lKSxcclxuICAgICd7bWQ1LTE2fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSkuc2xpY2UoMCwgMTYpLFxyXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiBhZmZpeEZpbGVOYW1lID8gcGF0aC5iYXNlbmFtZShhZmZpeEZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoYWZmaXhGaWxlTmFtZSkpIDogZmlsZWJhc2VuYW1lLFxyXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxyXG4gICAgJ3t0aW1lc3RhbXB9JzogKCkgPT4gbm93LmdldFRpbWUoKS50b1N0cmluZygpXHJcbiAgfVxyXG4gIGlmIChjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyOicpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ3N0ci0nKSkpIHtcclxuICAgIHJldHVybiBvbGROYW1lXHJcbiAgfVxyXG4gIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShvbGROYW1lKVxyXG4gIGxldCBuZXdOYW1lID0gT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG4gICAgcmV0dXJuIGFjYy5yZXBsYWNlKG5ldyBSZWdFeHAoY3VyLCAnZycpLCBjb252ZXJzaW9uTWFwW2N1cl0oKSlcclxuICB9LCBjdXN0b21Gb3JtYXQpICsgZXh0XHJcbiAgY29uc3Qgc3RyUmVnZXggPSAve3N0ci0oXFxkKyl9L2dpXHJcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZShzdHJSZWdleCwgKF8sIGdyb3VwMSkgPT4ge1xyXG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoZ3JvdXAxLCAxMClcclxuICAgIHJldHVybiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKVxyXG4gIH0pXHJcbiAgbmV3TmFtZSA9IG5ld05hbWUucmVwbGFjZSgveyhsb2NhbEZvbGRlcjo/KFxcZCspPyl9L2dpLCAoX3Jlc3VsdCwga2V5LCBjb3VudCkgPT4ge1xyXG4gICAgY291bnQgPSBNYXRoLm1heCgxLCBjb3VudCB8fCAwKVxyXG4gICAgY29uc3QgcGF0aHMgPSBwYXRoLmRpcm5hbWUob2xkTmFtZSkuc3BsaXQocGF0aC5zZXApXHJcbiAgICBrZXkgPSBwYXRocy5zbGljZSgwIC0gY291bnQpLnJlZHVjZSgoYSwgYikgPT4gYCR7YX0vJHtifWApXHJcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoLzovZywgJycpXHJcbiAgfSlcclxuICByZXR1cm4gbmV3TmFtZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+ICgvXmh0dHBzPzpcXC9cXC8vKS50ZXN0KHVybClcclxuXHJcbmV4cG9ydCBjb25zdCBpc1VybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHVybCA9IHVybCB8fCAnJ1xyXG4gIHRyeSB7XHJcbiAgICAvLyB0aGUgd2hvbGUgdXJsIGVuY29kZSBvciBkZWNvZGUgc2hvbGQgbm90IHVzZSBlbmNvZGVVUklDb21wb25lbnQgb3IgZGVjb2RlVVJJQ29tcG9uZW50XHJcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgaGFuZGxlVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcclxuICAgIHVybCA9IGVuY29kZVVSSSh1cmwpXHJcbiAgfVxyXG4gIHJldHVybiB1cmxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB0eXBlIH0gPSBpbWFnZVNpemUoZmlsZSlcclxuICAgIGNvbnN0IGV4dG5hbWUgPSB0eXBlID8gYC4ke3R5cGV9YCA6ICcucG5nJ1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhbDogdHJ1ZSxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgZXh0bmFtZVxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGZhbGxiYWNrIHRvIDIwMCAqIDIwMFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhbDogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAyMDAsXHJcbiAgICAgIGhlaWdodDogMjAwLFxyXG4gICAgICBleHRuYW1lOiAnLnBuZydcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGU0ZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKGZpbGVQYXRoKSxcclxuICAgICAgZmlsZU5hbWU6IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLFxyXG4gICAgICBidWZmZXI6IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoKSxcclxuICAgICAgc3VjY2VzczogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gY2F0Y2gge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVhc29uOiBgcmVhZCBmaWxlICR7ZmlsZVBhdGh9IGVycm9yYCxcclxuICAgICAgc3VjY2VzczogZmFsc2VcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRVUkxGaWxlID0gYXN5bmMgKHVybDogc3RyaW5nLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcclxuICB1cmwgPSBoYW5kbGVVcmxFbmNvZGUodXJsKVxyXG4gIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0XHJcbiAgY29uc3QgcmVxdWVzdEZuID0gbmV3IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qoe1xyXG4gICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxyXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEgYXMgQnVmZmVyXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgY29uc3QgdXJsUGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxyXG4gICAgICAgIGxldCBleHRuYW1lID0gJydcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTCh1cmwpLnNlYXJjaFBhcmFtc1xyXG4gICAgICAgICAgZXh0bmFtZSA9IHVybFBhcmFtcy5nZXQoJ3d4X2ZtdCcpIHx8IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBleHRuYW1lID0gcGF0aC5leHRuYW1lKHVybFBhdGgpIHx8ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZXh0bmFtZS5zdGFydHNXaXRoKCcuJykgJiYgZXh0bmFtZSkge1xyXG4gICAgICAgICAgZXh0bmFtZSA9IGAuJHtleHRuYW1lfWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBidWZmZXI6IHJlcyxcclxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxyXG4gICAgICAgICAgZXh0bmFtZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xyXG4gICAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gZXJyb3IsICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gJyd9YFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pKCkuY2F0Y2gocmVqZWN0KVxyXG4gIH0pXHJcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbz4oKHJlc29sdmUpOiB2b2lkID0+IHtcclxuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICByZXNvbHZlKHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSB0aW1lb3V0YFxyXG4gICAgICB9KVxyXG4gICAgfSwgMzAwMDApXHJcbiAgfSlcclxuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtyZXF1ZXN0Rm4sIHRpbWVvdXRQcm9taXNlXSlcclxufVxyXG5cclxuLyoqXHJcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nJ3MgdHlwZVxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gc2NvcGVcclxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBub3JtYWxcclxuICogMy4geHh4IC0+IHNpbXBsZVxyXG4gKiA0LiBub3QgZXhpc3RzIG9yIGlzIGEgcGF0aCAtPiB1bmtub3duXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0UGx1Z2luTmFtZVR5cGUgPSAobmFtZTogc3RyaW5nKTogSVBsdWdpbk5hbWVUeXBlID0+IHtcclxuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XHJcbiAgICByZXR1cm4gJ3Njb3BlJ1xyXG4gIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgIHJldHVybiAnbm9ybWFsJ1xyXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVOYW1lKG5hbWUpKSB7XHJcbiAgICByZXR1cm4gJ3NpbXBsZSdcclxuICB9XHJcbiAgcmV0dXJuICd1bmtub3duJ1xyXG59XHJcblxyXG4vKipcclxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcgaXMgYSBzaW1wbGUgcGx1Z2luIG5hbWUgb3Igbm90XHJcbiAqIGZvciBleGFtcGxlXHJcbiAqIDEuIHh4eCAtPiB0cnVlXHJcbiAqIDIuIC9Vc3IveHgveHh4eC9waWNnby1wbHVnaW4teHh4IC0+IGZhbHNlXHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbk5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc1NpbXBsZU5hbWUgPSAobmFtZU9yUGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGNvbnN0IHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcclxuICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGlmIChuYW1lT3JQYXRoLmluY2x1ZGVzKCcvJykgfHwgbmFtZU9yUGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgcmV0dXJuIHRydWVcclxufVxyXG5cclxuLyoqXHJcbiAqIHN0cmVhbWxpbmUgdGhlIGZ1bGwgcGx1Z2luIG5hbWUgdG8gYSBzaW1wbGUgb25lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi15eXkgLT4geXl5XHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpbkZ1bGxOYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlU3RyZWFtbGluZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAoL15AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSB7XHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sICcnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9waWNnby1wbHVnaW4tLywgJycpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogY29tcGxldGUgcGx1Z2luIG5hbWUgdG8gZnVsbCBuYW1lXHJcbiAqIGZvciBleGFtcGxlOlxyXG4gKiAxLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWUgcGx1Z2luU2ltcGxlTmFtZVxyXG4gKiBAcGFyYW0gc2NvcGUgcGx1Z2luU2NvcGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nLCBzY29wZSA9ICcnKTogc3RyaW5nID0+XHJcbiAgc2NvcGUgPyBgQCR7c2NvcGV9L3BpY2dvLXBsdWdpbi0ke25hbWV9YCA6IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogMy4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aCBwbHVnaW5OYW1lIG9yIHBsdWdpblBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aClcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcclxuICAgICAgLy8gMS4gY2hlY2sgaWYgaXMgYW4gYWJzb2x1dGUgcGF0aFxyXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcclxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVuaXhTdHlsZVBhdGgocGx1Z2luUGF0aClcclxuICAgICAgfVxyXG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcclxuICAgICAgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXHJcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBub3JtYWwgcGx1Z2luIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIGFuIGV4Y2VwdGlvbjogW3BhY2thZ2UuanNvbidzIG5hbWVdICE9PSBbZm9sZGVyIG5hbWVdXHJcbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cclxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcclxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XHJcbiAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoKVxyXG4gICAgY2FzZSAnc2NvcGUnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxyXG4gICAgY2FzZSAnc2ltcGxlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxyXG4gICAgZGVmYXVsdDoge1xyXG4gICAgICAvLyBub3csIHRoZSBuYW1lT3JQYXRoIG11c3QgYmUgcGF0aFxyXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcclxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VKU09OUGF0aCkgfHwge31cclxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICBsb2dnZXIud2FybihgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7cGtnLm5hbWUgYXMgc3RyaW5nIHx8ICdlbXB0eSd9LCBuZWVkIHRvIGluY2x1ZGUgdGhlIHByZWZpeDogcGljZ28tcGx1Z2luLWApXHJcbiAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBrZy5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQzpcXFxceHh4XFxcXHh4eCAtPiBDOi94eHgveHh4XHJcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XHJcbiAqIEBwYXJhbSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxyXG4gIHJldHVybiBwYXRoQXJyLmpvaW4oJy8nKVxyXG59XHJcblxyXG4vKipcclxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICogQHBhcmFtIHNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XHJcbiAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cclxuICAgIC8vIGlmIGlzIGEgc2NvcGUgcGtnXHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxyXG4gICAgaWYgKCFtYXRjaEFycikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2NhbiBub3QgcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uJylcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXRjaEFyclsyXVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZSBjb25maWcgYmxhY2sgaXRlbSBsaXN0IHdoaWNoIHdvbid0IGJlIHNldHRlZFxyXG4gKiBvbmx5IGNhbiBiZSBnb3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb25maWdCbGFja0xpc3QgPSBbXVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHNvbWUgY29uZmlnIGtleSBpcyBpbiBibGFja0xpc3RcclxuICogQHBhcmFtIGtleVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXHJcbiAqIGNvbmZpZyBtdXN0IGJlIG9iamVjdCBzdWNoIGFzIHsgeHh4OiAneHh4JyB9XHJcbiAqICYmIGNhbid0IGJlIGFycmF5XHJcbiAqIEBwYXJhbSBjb25maWdcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcclxuICBpZiAoXHJcbiAgICB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJlxyXG4gICAgIUFycmF5LmlzQXJyYXkoY29uZmlnKSAmJlxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPiAoc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgfVxyXG59XHJcblxyXG4vLyBob2xkLi4uXHJcbi8vIGV4cG9ydCBjb25zdCBjb25maWdXaGl0ZUxpc3Q6IFJlZ0V4cFtdID0gW1xyXG4vLyAgIC9ecGljQmVkLyxcclxuLy8gICAvXnBpY2dvUGx1Z2lucy8sXHJcbi8vICAgL15AW14vXStcXC9waWNnby1wbHVnaW4tLyxcclxuLy8gICAvZGVidWcvLFxyXG4vLyAgIC9zaWxlbnQvLFxyXG4vLyAgIC9jb25maWdQYXRoLyxcclxuLy8gICAvXnNldHRpbmdzLyxcclxuLy8gXVxyXG5cclxuLy8gZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5XaGl0ZUxpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuLy8gICByZXR1cm4gY29uZmlnV2hpdGVMaXN0LnNvbWUod2hpdGVJdGVtID0+IHdoaXRlSXRlbS50ZXN0KGtleSkpXHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNQcm9kID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHIChcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIGNvbG9yPzogc3RyaW5nLFxyXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0ZXh0ID0gIXRleHQgPyAn5rWL6K+VJyA6IHRleHRcclxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XHJcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxyXG4gIGNvbnN0IHRleHQyU1ZHID0gVGV4dFRvU1ZHLmxvYWRTeW5jKGZvbnRGYW1pbHkpXHJcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xyXG4gICAgYW5jaG9yOiAndG9wJyxcclxuICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgZmlsbDogY29sb3JcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxyXG4gIGNvbnN0IHN2ZyA9IEJ1ZmZlci5mcm9tKHRleHRTVkcpXHJcbiAgcmV0dXJuIHN2Z1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrIChcclxuICBpbWc6IEJ1ZmZlcixcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXHJcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9ICF3YXRlcm1hcmtTY2FsZVJhdGlvIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPCAwIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPiAxID8gMC4xNSA6IHdhdGVybWFya1NjYWxlUmF0aW9cclxuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxyXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoID0gMjAwIH0gPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpXHJcbiAgY29uc3Qgd2F0ZXJtYXJrID0gYXdhaXQgY3JlYXRlV2F0ZXJtYXJrKFxyXG4gICAgd2F0ZXJtYXJrVHlwZSxcclxuICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgIHRleHQsXHJcbiAgICB3YXRlcm1hcmtGb250UGF0aCxcclxuICAgIHdhdGVybWFya1NjYWxlUmF0aW8sXHJcbiAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgIHdhdGVybWFya0ltYWdlUGF0aCxcclxuICAgIGltZ1dpZHRoLFxyXG4gICAgd2F0ZXJtYXJrRGVncmVlXHJcbiAgKVxyXG4gIGNvbnN0IGNvbXBvc2l0ZWQgPSBhd2FpdCBpbWFnZVxyXG4gICAgLmNvbXBvc2l0ZShbXHJcbiAgICAgIHtcclxuICAgICAgICBpbnB1dDogd2F0ZXJtYXJrLFxyXG4gICAgICAgIGdyYXZpdHk6IHBvc2l0aW9uIHx8ICdzb3V0aGVhc3QnLFxyXG4gICAgICAgIHRpbGU6IGlzRnVsbFNjcmVlbldhdGVybWFya1xyXG4gICAgICB9XHJcbiAgICBdKVxyXG4gICAgLnRvQnVmZmVyKClcclxuICByZXR1cm4gY29tcG9zaXRlZFxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXYXRlcm1hcmsgKFxyXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXHJcbiAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoOiBzdHJpbmcsXHJcbiAgdGV4dD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcclxuICB3YXRlcm1hcmtTY2FsZVJhdGlvPzogbnVtYmVyLFxyXG4gIHdhdGVybWFya0NvbG9yPzogc3RyaW5nLFxyXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcclxuICBpbWdXaWR0aDogbnVtYmVyID0gMjAwLFxyXG4gIHdhdGVybWFya0RlZ3JlZTogbnVtYmVyID0gMFxyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIGxldCB3YXRlcm1hcms6IGFueVxyXG4gIGlmICh3YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGggPSB3YXRlcm1hcmtJbWFnZVBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aFxyXG4gICAgd2F0ZXJtYXJrID0gYXdhaXQgc2hhcnAod2F0ZXJtYXJrSW1hZ2VQYXRoKS50b0J1ZmZlcigpXHJcbiAgfSBlbHNlIHtcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHRleHQyU1ZHKFxyXG4gICAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgIHRleHQsXHJcbiAgICAgIHdhdGVybWFya0NvbG9yLFxyXG4gICAgICB3YXRlcm1hcmtGb250UGF0aCB8fCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGhcclxuICAgIClcclxuICB9XHJcbiAgY29uc3QgeyB3aWR0aDogd2F0ZXJtYXJrV2lkdGgsIGhlaWdodDogd2F0ZXJtYXJrSGVpZ2h0IH0gPSBhd2FpdCBnZXRTaXplKFxyXG4gICAgd2F0ZXJtYXJrXHJcbiAgKVxyXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZVdpZHRoID0gTWF0aC5mbG9vcihpbWdXaWR0aCAqIGZvcmNlTnVtYmVyKHdhdGVybWFya1NjYWxlUmF0aW8pKVxyXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZUhlaWdodCA9IE1hdGguZmxvb3IoXHJcbiAgICAod2F0ZXJtYXJrUmVzaXplV2lkdGggKiB3YXRlcm1hcmtIZWlnaHQpIC8gd2F0ZXJtYXJrV2lkdGhcclxuICApXHJcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKHdhdGVybWFyaylcclxuICAgIC5yZXNpemUod2F0ZXJtYXJrUmVzaXplV2lkdGgsIHdhdGVybWFya1Jlc2l6ZUhlaWdodCwge1xyXG4gICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICB9KVxyXG4gICAgLnJvdGF0ZSh3YXRlcm1hcmtEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICAudG9CdWZmZXIoKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRTaXplIChpbWFnZTogQnVmZmVyKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0+IHtcclxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHNoYXJwKGltYWdlKS5tZXRhZGF0YSgpXHJcbiAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoIHx8IDIwMCwgaGVpZ2h0OiBoZWlnaHQgfHwgMjAwIH1cclxufVxyXG5cclxuY29uc3QgdmFsaWRQYXJhbSA9ICguLi5wYXJhbXM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIHBhcmFtcy5ldmVyeShwYXJhbSA9PiB7XHJcbiAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCB8fCBwYXJhbSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbSAhPT0gJydcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbSA+IDBcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbSkubGVuZ3RoID4gMFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCA9IFtcclxuICAnYXZpZicsXHJcbiAgJ2R6JyxcclxuICAnZml0cycsXHJcbiAgJ2dpZicsXHJcbiAgJ2hlaWYnLFxyXG4gICdpbnB1dCcsXHJcbiAgJ2pwZWcnLFxyXG4gICdqcGcnLFxyXG4gICdqcDInLFxyXG4gICdqeGwnLFxyXG4gICdtYWdpY2snLFxyXG4gICdvcGVuc2xpZGUnLFxyXG4gICdwZGYnLFxyXG4gICdwbmcnLFxyXG4gICdwcG0nLFxyXG4gICdyYXcnLFxyXG4gICdzdmcnLFxyXG4gICd0aWZmJyxcclxuICAndGlmJyxcclxuICAndicsXHJcbiAgJ3dlYnAnXHJcbl1cclxuXHJcbmNvbnN0IHZhbGlkT3V0cHV0Rm9ybWF0ID0gKGZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0LmluY2x1ZGVzKGZvcm1hdClcclxufVxyXG5cclxuY29uc3QgaW1hZ2VFeHRMaXN0ID0gWydqcGcnLCAnanBlZycsICdwbmcnLCAnd2VicCcsICdibXAnLCAndGlmZicsICd0aWYnLCAnc3ZnJywgJ2ljbycsICdhdmlmJywgJ2hlaWYnLCAnaGVpYyddXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsgKGltZzogQnVmZmVyLCBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gIHRyeSB7XHJcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXHJcbiAgICBpbWFnZSA9IHNoYXJwKGF3YWl0IEFkZFdhdGVybWFyayhcclxuICAgICAgaW1nLFxyXG4gICAgICBvcHRpb25zLndhdGVybWFya1R5cGUgfHwgJ3RleHQnLFxyXG4gICAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgIG9wdGlvbnMuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrLFxyXG4gICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya0RlZ3JlZSksXHJcbiAgICAgIG9wdGlvbnMud2F0ZXJtYXJrVGV4dCxcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtTY2FsZVJhdGlvKSxcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtDb2xvcixcclxuICAgICAgb3B0aW9ucy53YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICAgIG9wdGlvbnMud2F0ZXJtYXJrUG9zaXRpb25cclxuICAgICksIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXHJcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgbG9nZ2VyLmVycm9yKGBJbWFnZSBhZGQgd2F0ZXJtYXJrIGVycm9yOiAke2Vycm9yfWApXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25zIChvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcclxuICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gdHlwZW9mIG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaiA9PT0gJ3N0cmluZycgPyBzYWZlUGFyc2Uob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKSA6IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxyXG4gIHJldHVybiB7XHJcbiAgICBxdWFsaXR5OiBmb3JjZU51bWJlcihvcHRpb25zLnF1YWxpdHkpLFxyXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcclxuICAgIGNvbnZlcnRGb3JtYXQ6IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJyxcclxuICAgIGlzUmVTaXplOiBvcHRpb25zLmlzUmVTaXplIHx8IGZhbHNlLFxyXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXHJcbiAgICByZVNpemVXaWR0aDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVXaWR0aCksXHJcbiAgICBza2lwUmVTaXplT2ZTbWFsbEltZzogb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZSxcclxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxyXG4gICAgcmVTaXplUGVyY2VudDogZm9yY2VOdW1iZXIob3B0aW9ucy5yZVNpemVQZXJjZW50KSxcclxuICAgIGlzUm90YXRlOiBvcHRpb25zLmlzUm90YXRlIHx8IGZhbHNlLFxyXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcclxuICAgIGlzRmxvcDogb3B0aW9ucy5pc0Zsb3AgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnLFxyXG4gICAgZm9ybWF0Q29udmVydE9iajogZm9ybWF0Q29udmVydE9iaiB8fCB7fVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlUHJvY2VzcyAoaW1nOiBCdWZmZXIsIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLCByYXdGb3JtYXQ6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcsIHsgYW5pbWF0ZWQ6IHRydWUgfSlcclxuICAgIGxldCBxdWFsaXR5ID0gMTAwXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcclxuICAgICAgcXVhbGl0eSA9IG9wdGlvbnMucXVhbGl0eSFcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XHJcbiAgICAgIGlmICh2YWxpZFBhcmFtKG9wdGlvbnMucmVTaXplUGVyY2VudCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogb3B0aW9ucy5yZVNpemVQZXJjZW50ISAvIDEwMCksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaXNSZVNpemUpIHtcclxuICAgICAgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZVdpZHRoID4gMCkpIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGgsXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZml0OiAnZmlsbCdcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVIZWlnaHQgLyBpbWFnZUhlaWdodFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZUhlaWdodCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUmF0aW8gPSBvcHRpb25zLnJlU2l6ZVdpZHRoIC8gaW1hZ2VXaWR0aFxyXG4gICAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcclxuICAgICAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgICAgIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLnJvdGF0ZShvcHRpb25zLnJvdGF0ZURlZ3JlZSwgeyBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH0gfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmlzRmxpcCkge1xyXG4gICAgICBpbWFnZSA9IGltYWdlLmZsaXAoKVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNGbG9wKSB7XHJcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxvcCgpXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnMsIHJhd0Zvcm1hdCkgYXMgYW55XHJcbiAgICAgIGlmIChuZXdGb3JtYXQgIT09IHJhd0Zvcm1hdCkge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgICBxdWFsaXR5LFxyXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyYXdGb3JtYXQgJiYgdmFsaWRPdXRwdXRGb3JtYXQocmF3Rm9ybWF0KSkge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQocmF3Rm9ybWF0IGFzIGFueSwge1xyXG4gICAgICAgICAgcXVhbGl0eSxcclxuICAgICAgICAgIG1vempwZWc6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQoJ2pwZycsIHtcclxuICAgICAgICAgIHF1YWxpdHksXHJcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIHByb2Nlc3MgZXJyb3I6ICR7ZXJyb3J9YClcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRGb3JtYXQgKG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCByYXdGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgb3B0aW9ucyA9IGZvcm1hdE9wdGlvbnMob3B0aW9ucyB8fCB7fSlcclxuICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgaWYgKHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiAnZ2lmJ1xyXG4gIGxldCBuZXdGb3JtYXQgPSBvcHRpb25zPy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXHJcbiAgaWYgKG9wdGlvbnM/LmZvcm1hdENvbnZlcnRPYmogJiYgT2JqZWN0LmtleXMob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gb3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqXHJcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqS2V5cyA9IE9iamVjdC5rZXlzKGZvcm1hdENvbnZlcnRPYmopXHJcbiAgICBpZiAoZm9ybWF0Q29udmVydE9iaktleXMuaW5jbHVkZXMocmF3Rm9ybWF0KSkge1xyXG4gICAgICBuZXdGb3JtYXQgPSBmb3JtYXRDb252ZXJ0T2JqW3Jhd0Zvcm1hdF1cclxuICAgICAgaWYgKCF2YWxpZE91dHB1dEZvcm1hdChuZXdGb3JtYXQpKSB7XHJcbiAgICAgICAgbmV3Rm9ybWF0ID0gJ2pwZydcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob3B0aW9ucz8ucGljQmVkID09PSAnaW1ndXInICYmIG5ld0Zvcm1hdCA9PT0gJ3dlYnAnKSB7XHJcbiAgICBuZXdGb3JtYXQgPSAnanBnJ1xyXG4gIH1cclxuICByZXR1cm4gbmV3Rm9ybWF0XHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRm9ybWF0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnLCAnZ2lmJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpICYmIChmaWxlRXh0ICE9PSAnc3ZnJylcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5lZWRDb21wcmVzcyA9IChjb21wcmVzc09wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCBmaWxlRXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCBub3JtYWxpemVkRXh0ID0gZmlsZUV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJy4nLCAnJylcclxuXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMobm9ybWFsaXplZEV4dCkgfHwgIWNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBjb25zdCB7XHJcbiAgICBxdWFsaXR5LFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQsXHJcbiAgICByZVNpemVQZXJjZW50LFxyXG4gICAgaXNSZVNpemUsXHJcbiAgICByZVNpemVIZWlnaHQsXHJcbiAgICByZVNpemVXaWR0aCxcclxuICAgIGlzUm90YXRlLFxyXG4gICAgcm90YXRlRGVncmVlLFxyXG4gICAgaXNDb252ZXJ0LFxyXG4gICAgY29udmVydEZvcm1hdCxcclxuICAgIGlzRmxpcCxcclxuICAgIGlzRmxvcFxyXG4gIH0gPSBmb3JtYXRPcHRpb25zKGNvbXByZXNzT3B0aW9ucylcclxuXHJcbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemUgJiYgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzRmxpcCB8fCBpc0Zsb3ApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc0NvbnZlcnQpIHtcclxuICAgIGNvbnN0IG5ld0Zvcm1hdCA9IGNvbnZlcnRGb3JtYXQgfHwgJ2pwZydcclxuICAgIHJldHVybiBmaWxlRXh0ICE9PSBuZXdGb3JtYXRcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCByZW1vdmVFeGlmID0gYXN5bmMgKGltZzogQnVmZmVyLCBmaWxlRXh0OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4gPT4ge1xyXG4gIGZpbGVFeHQgPSBmaWxlRXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxyXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpIHx8IGZpbGVFeHQgPT09ICdzdmcnKSB7XHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcsIHtcclxuICAgIGFuaW1hdGVkOiB0cnVlXHJcbiAgfSkudG9CdWZmZXIoKVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCB1cGxvYWQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGxvYWQnKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbaW5wdXQuLi5dJylcclxuICAgICAgLmFsaWFzKCd1JylcclxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpc1VybChpdGVtKSA/IGl0ZW0gOiBwYXRoLnJlc29sdmUoaXRlbSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3QgPSBmcy5leGlzdHNTeW5jKGl0ZW0pIHx8IGlzVXJsKGl0ZW0pXHJcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGAke2l0ZW19IGRvZXMgbm90IGV4aXN0LmApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgYXdhaXQgY3R4LnVwbG9hZChpbnB1dExpc3QpXHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1cGxvYWRcclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncXVhbGl0eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5xdWFsaXR5IHx8IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQ29udmVydCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0NvbnZlcnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjb252ZXJ0Rm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnYXZpZicsICdkeicsICdmaXRzJywgJ2dpZicsICdoZWlmJywgJ2lucHV0JywgJ2pwZWcnLCAnanBnJywgJ2pwMicsICdqeGwnLCAnbWFnaWNrJywgJ29wZW5zbGlkZScsICdwZGYnLCAncG5nJywgJ3BwbScsICdyYXcnLCAnc3ZnJywgJ3RpZmYnLCAndGlmJywgJ3YnLCAnd2VicCddLFxyXG4gICAgICBkZWZhdWx0OiAnanBnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplV2lkdGggfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplSGVpZ2h0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVIZWlnaHQgfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2tpcFJlU2l6ZU9mU21hbGxJbWcnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVQZXJjZW50IHx8IDUwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNGbGlwJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxpcCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzRmxvcCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Zsb3AgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlbW92ZUV4aWYgfHwgZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPignYnVpbGRJbi53YXRlcm1hcmsnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNBZGRXYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNBZGRXYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUeXBlJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWyd0ZXh0JywgJ2ltYWdlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Z1bGxTY3JlZW5XYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrRGVncmVlIHx8IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUZXh0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVGV4dCB8fCAnJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ZvbnRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ZvbnRQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrU2NhbGVSYXRpbycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtTY2FsZVJhdGlvIHx8IDAuMTVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtDb2xvcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtDb2xvciB8fCAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtJbWFnZVBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrSW1hZ2VQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrUG9zaXRpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGNob2ljZXM6IFsnbm9ydGgnLCAnbm9ydGhlYXN0JywgJ3NvdXRoZWFzdCcsICdzb3V0aCcsICdzb3V0aHdlc3QnLCAnbm9ydGh3ZXN0JywgJ3dlc3QnLCAnZWFzdCcsICdjZW50ZXInLCAnY2VudHJlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2Zvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5hYmxlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5hYmxlIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcclxuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXHJcbmltcG9ydCByZW5hbWUgZnJvbSAnLi4vYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUnXHJcblxyXG4vLyBoYW5kbGUgbW9kdWxlcyBjb25maWcgLT4gc2F2ZSB0byBwaWNnbyBjb25maWcgZmlsZVxyXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXHJcbiAgY29uc3QgY29uZmlnTmFtZSA9IG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xyXG4gICAgPyBgcGljQmVkLiR7bmFtZX1gXHJcbiAgICA6IG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJ1xyXG4gICAgICA/IGB0cmFuc2Zvcm1lci4ke25hbWV9YFxyXG4gICAgICA6IG1vZHVsZSA9PT0gJ2J1aWxkaW4nXHJcbiAgICAgICAgPyBgYnVpbGRJbi4ke25hbWV9YFxyXG4gICAgICAgIDogbmFtZVxyXG4gIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXHJcbiAgfSlcclxuICBpZiAobW9kdWxlID09PSAndXBsb2FkZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQuY3VycmVudCc6IG5hbWUsXHJcbiAgICAgICdwaWNCZWQudXBsb2FkZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH0gZWxzZSBpZiAobW9kdWxlID09PSAndHJhbnNmb3JtZXInKSB7XHJcbiAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc2V0dGluZyA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3NldCcpXHJcbiAgICAgIC5hbGlhcygnY29uZmlnJylcclxuICAgICAgLmFyZ3VtZW50cygnPG1vZHVsZT4gW25hbWVdJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3JlbmFtZScpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdidWlsZGluJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFsnY29tcHJlc3MnLCAnd2F0ZXJtYXJrJywgJ3JlbmFtZSddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGJ1aWxkaW4gbW9kdWxlJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ2NvbXByZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAnd2F0ZXJtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3JlbmFtZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAndXBsb2FkZXInOlxyXG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vICR7bW9kdWxlfSBuYW1lZCAke25hbWV9YCk7IHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHttb2R1bGV9YCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBDaG9vc2UgYShuKSAke21vZHVsZX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQoYW5zd2VyW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlclttb2R1bGVdKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ3BsdWdpbic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJ3BpY2dvLXBsdWdpbi0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKTsgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgcGx1Z2luJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbikhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIGFuc3dlci5wbHVnaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpOyByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUgPT09ICdwbHVnaW4nKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBjb25maWcsIHBsZWFzZSBydW4gXFwncGljZ28gdXNlIHBsdWdpbnNcXCcnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW4sIFVuZGVmaW5hYmxlLCBJQ0xJQ29uZmlncywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgdXNlOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXNlJylcclxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VzZSBtb2R1bGVzIG9mIHBpY2dvJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHByb21wdHM6IGFueVtdID0gW11cclxuICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJQ0xJQ29uZmlncyA9IHtcclxuICAgICAgICAgICAgICB1cGxvYWRlcjoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3VwbG9hZGVyJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYW4gdXBsb2FkZXInLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci51cGxvYWRlci5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RyYW5zZm9ybWVyJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYSB0cmFuc2Zvcm1lcicsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldElkTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnRyYW5zZm9ybWVyJykgfHwgJ3BhdGgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBwbHVnaW5zOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbnMnLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBwbHVnaW5zJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5wbHVnaW5Mb2FkZXIuZ2V0RnVsbExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7aXRlbX1gKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ1ttb2R1bGVdKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9tcHRzLnB1c2goY29uZmlnW21vZHVsZV0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJyk7IHJldHVyblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwcm9tcHRzID0gT2JqZWN0LmtleXMoY29uZmlnKS5tYXAoKGl0ZW06IHN0cmluZykgPT4gY29uZmlnW2l0ZW1dKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGZvciBwbHVnaW5zIG9wdGlvbiBmcm9tIEFycmF5IHRvIG9iamVjdFxyXG4gICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gY3R4LmdldENvbmZpZzxJU3RyaW5nS2V5TWFwPGJvb2xlYW4+PigncGljZ29QbHVnaW5zJylcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwbHVnaW5zKS5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xyXG4gICAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICdwaWNCZWQuY3VycmVudCc6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVxyXG4iLCJpbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcHJveHk6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5vcHRpb24oJy1wLCAtLXByb3h5IDx1cmw+JywgJ3NldCBwcm94eSBmb3IgdXBsb2FkaW5nJywgKHByb3h5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgICdwaWNCZWQucHJveHknOiBwcm94eVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwcm94eVxyXG4iLCJpbXBvcnQgbWF0Y2ggZnJvbSAnbWluaW1hdGNoJ1xyXG5cclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZ2xvYmJ5IGZyb20gJ2dsb2JieSdcclxuaW1wb3J0IGVqcyBmcm9tICdlanMnXHJcblxyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxyXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcclxuICogQHBhcmFtIHtJT3B0aW9uc30gb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXHJcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXHJcbiAgICBsZXQgYW5zd2VycyA9IHt9XHJcbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXHJcbiAgICB9XHJcbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxyXG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGxldCBnbG9iID0gJydcclxuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XHJcbiAgICAgICAgICBnbG9iID0gaXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKGdsb2IpIHsgLy8gZmluZCBhIGZpbHRlciBleHByZXNzaW9uXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChfZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGZpbHRlcnMnIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4IFBpY0dvXHJcbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cclxuICogQHBhcmFtIGRhdGEgb3B0aW9ucyBkYXRhXHJcbiAqL1xyXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzLCBuby1uZXctZnVuYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxyXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBmbihkYXRhKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVBhdGhcclxuICovXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IG9wdGlvbnNQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgJ2luZGV4LmpzJylcclxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBvcHRpb25zID0gcmVxdWlyZShvcHRpb25zUGF0aClcclxuICAgIHJldHVybiBvcHRpb25zXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcclxuICogQHBhcmFtIHthcnJheX0gZmlsZXNcclxuICovXHJcbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IGZpbGVUcmVlOiBJRmlsZVRyZWUgPSB7fVxyXG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXHJcbiAgICBjb25zdCBjb250ZW50ID0gZWpzLnJlbmRlcihmaWxlLCBvcHRpb25zKVxyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSB8fCAvW15cXHNdLy50ZXN0KGNvbnRlbnQpKSB7XHJcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiBmaWxlVHJlZVxyXG59XHJcblxyXG4vKipcclxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCB3cml0ZUZpbGVUcmVlID0gKGRpcjogc3RyaW5nLCBmaWxlczogYW55KTogdm9pZCA9PiB7XHJcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBmaWx0ZXJzLFxyXG4gIGdlbmVyYXRlLFxyXG4gIHJlbmRlcixcclxuICB3cml0ZUZpbGVUcmVlXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgcm0gZnJvbSAncmltcmFmJ1xyXG5cclxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbml0VXRpbHMnXHJcbmltcG9ydCB0eXBlIHsgSU9wdGlvbnMsIElQbHVnaW4sIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgcnVuID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIC8vIGNvbnN0IG5hbWUgPSBvcHRpb25zLmluUGxhY2UgPyBwYXRoLnJlbGF0aXZlKCcuLi8nLCBwcm9jZXNzLmN3ZCgpKSA6IG9wdGlvbnMucHJvamVjdFxyXG4gIGlmIChvcHRpb25zLm9mZmxpbmUpIHsgLy8gb2ZmbGluZSBtb2RlXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRlbXBsYXRlKSkge1xyXG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcclxuICAgIH1cclxuICB9IGVsc2UgeyAvLyBvbmxpbmUgbW9kZVxyXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXHJcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXHJcbiAgICAgIDogb3B0aW9ucy50ZW1wbGF0ZVxyXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZG93bmxvYWQgdGVtcGxhdGUgJiBnZW5lcmF0ZVxyXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxyXG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XHJcbiAgICBybS5zeW5jKG9wdGlvbnMudG1wKVxyXG4gIH1cclxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXHJcbiAgZG93bmxvYWQob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy50bXAsIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfSwgKGVycjogRXJyb3IpID0+IHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2xpc3QvdGVtcGxhdGVzJywgdGVtcGxhdGUucmVwbGFjZSgvWy86XS9nLCAnLScpKSAvLyBmb3IgY2FjaGluZyB0ZW1wbGF0ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgcHJvamVjdCxcclxuICAgICAgICAgICAgICBoYXNTbGFzaCxcclxuICAgICAgICAgICAgICBpblBsYWNlLFxyXG4gICAgICAgICAgICAgIGRlc3QsXHJcbiAgICAgICAgICAgICAgY2xvbmUsXHJcbiAgICAgICAgICAgICAgdG1wLFxyXG4gICAgICAgICAgICAgIG9mZmxpbmVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxyXG4gICAgICAgICAgICBpZiAoaW5QbGFjZSB8fCBmcy5leGlzdHNTeW5jKGRlc3QpKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQoW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGluUGxhY2VcclxuICAgICAgICAgICAgICAgICAgICA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PydcclxuICAgICAgICAgICAgICAgICAgICA6ICdUYXJnZXQgZGlyZWN0b3J5IGV4aXN0cy4gQ29udGludWU/JyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ29rJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0pLnRoZW4oKGFuc3dlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcHJvamVjdCBpcyBnaXZlblxyXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJy0taGVscCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIGFuIG9mZmljaWFsIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHN0cmFpZ2h0IGZyb20gYSBnaXRodWIgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpbml0XHJcbiIsImltcG9ydCB0eXBlIHsgSVBsdWdpbiwgSVBpY0dvLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaTE4bicpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIGxhbmd1YWdlLCB6aC1DTiwgemgtVFcsIGVuJylcclxuICAgICAgLmFjdGlvbihhc3luYyAobGFuZzogc3RyaW5nID0gJycpID0+IHtcclxuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcclxuICAgICAgICBpZiAoIWxhbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgbmFtZTogJ2kxOG4nLFxyXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcclxuICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxzdHJpbmc+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgbGFuZyA9IGFuc3dlci5pMThuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbGlzdC5pbmNsdWRlcyhsYW5nKSkge1xyXG4gICAgICAgICAgY3R4LmxvZy53YXJuKCdObyBzdWNoIGxhbmd1YWdlJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UobGFuZylcclxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGkxOG5cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGx1Z2luLCBJTGlmZWN5Y2xlUGx1Z2lucyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3Q6IE1hcDxzdHJpbmcsIElQbHVnaW4+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmdcclxuXHJcbiAgY29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZVxyXG4gICAgdGhpcy5saXN0ID0gbmV3IE1hcCgpXHJcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXHJcbiAgfVxyXG5cclxuICByZWdpc3RlciAoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxyXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxyXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuZ2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbik/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcclxuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICByZXR1cm4gTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVBsdWdpbnNcclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcclxuaW1wb3J0IGlucXVpcmVyLCB7IHR5cGUgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcclxuXHJcbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBsdWdpbiwgSUNvbW1hbmRlciwgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIGltcGxlbWVudHMgSUNvbW1hbmRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBJUGx1Z2luPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuXHJcbiAgcHJvZ3JhbTogQ29tbWFuZFxyXG4gIGlucXVpcmVyOiBJbnF1aXJlclxyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcclxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvZ3JhbVxyXG4gICAgICAudmVyc2lvbihwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicpXHJcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIGRlYnVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9wdGlvbignLXMsIC0tc2lsZW50JywgJ3NpbGVudCBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJ2NvbW1hbmQ6KicsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoYEludmFsaWQgY29tbWFuZDogJHt0aGlzLnByb2dyYW0uYXJncy5qb2luKCcgJyl9XFxuU2VlIC0taGVscCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy5gKVxyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICB9KVxyXG5cclxuICAgIC8vIGJ1aWx0LWluIGNvbW1hbmRzXHJcbiAgICBjb21tYW5kZXJzKHRoaXMuY3R4KVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIgKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gcGx1Z2luIGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcclxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcclxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxyXG4gICAgaWYgKGN1cnJlbnRQbHVnaW5OYW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhjdXJyZW50UGx1Z2luTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoY3VycmVudFBsdWdpbk5hbWUsIFtpZF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXIgKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxyXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZENvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpdGVtLmhhbmRsZSh0aGlzLmN0eClcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kZXJcclxuIiwiaW1wb3J0IHBsdWdpbkhhbmRsZXIgZnJvbSAnLi9wbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xyXG5pbXBvcnQgdXBsb2FkIGZyb20gJy4vdXBsb2FkJ1xyXG5pbXBvcnQgc2V0dGluZyBmcm9tICcuL3NldHRpbmcnXHJcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXHJcbmltcG9ydCBwcm94eSBmcm9tICcuL3Byb3h5J1xyXG5pbXBvcnQgaW5pdCBmcm9tICcuL2luaXQnXHJcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCAoY3R4OiBJUGljR28pOiB2b2lkID0+IHtcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcclxuICBjdHguY21kLnJlZ2lzdGVyKCdjb25maWcnLCBjb25maWcpXHJcbiAgY3R4LmNtZC5yZWdpc3Rlcignc2V0dGluZycsIHNldHRpbmcpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VzZScsIHVzZSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwcm94eScsIHByb3h5KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2kxOG4nLCBpMThuKVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcclxuICBzdWNjZXNzID0gJ3N1Y2Nlc3MnLFxyXG4gIGluZm8gPSAnaW5mbycsXHJcbiAgd2FybiA9ICd3YXJuJyxcclxuICBlcnJvciA9ICdlcnJvcidcclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgYnkgdXNlcnNcclxuICovXHJcbmV4cG9ydCBlbnVtIElCdWlsZEluRXZlbnQge1xyXG4gIFVQTE9BRF9QUk9HUkVTUyA9ICd1cGxvYWRQcm9ncmVzcycsXHJcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXHJcbiAgQkVGT1JFX1RSQU5TRk9STSA9ICdiZWZvcmVUcmFuc2Zvcm0nLFxyXG4gIEJFRk9SRV9VUExPQUQgPSAnYmVmb3JlVXBsb2FkJyxcclxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxyXG4gIEZJTklTSEVEID0gJ2ZpbmlzaGVkJyxcclxuICBJTlNUQUxMID0gJ2luc3RhbGwnLFxyXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxyXG4gIFVQREFURSA9ICd1cGRhdGUnLFxyXG4gIE5PVElGSUNBVElPTiA9ICdub3RpZmljYXRpb24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cclxuICovXHJcbmV4cG9ydCBlbnVtIElCdXNFdmVudCB7XHJcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXHJcblxyXG5pbXBvcnQgeyBJTG9nVHlwZSB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHtcclxuICBJTG9nQXJndlR5cGUsXHJcbiAgSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yLFxyXG4gIFVuZGVmaW5hYmxlLFxyXG4gIElMb2dDb2xvcixcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHb1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBmb3JjZU51bWJlciwgaXNEZXYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcblxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsZXZlbCA9IHtcclxuICAgIFtJTG9nVHlwZS5zdWNjZXNzXTogJ2dyZWVuJyxcclxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxyXG4gICAgW0lMb2dUeXBlLndhcm5dOiAneWVsbG93JyxcclxuICAgIFtJTG9nVHlwZS5lcnJvcl06ICdyZWQnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgcHJpdmF0ZSBsb2dQYXRoITogc3RyaW5nXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMb2cgKHR5cGU6IElMb2dUeXBlLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICAvLyBjaGVjayBjb25maWcuc2lsZW50XHJcbiAgICB0aGlzLmxvZ0xldmVsID0gdGhpcy5jdHguZ2V0Q29uZmlnKCdzZXR0aW5ncy5sb2dMZXZlbCcpXHJcbiAgICBpZiAoIXRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2lsZW50JykgJiYgdGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGNoYWxrW3RoaXMubGV2ZWxbdHlwZV0gYXMgSUxvZ0NvbG9yXShgW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XTpgKVxyXG4gICAgICBjb25zb2xlLmxvZyhsb2dIZWFkZXIsIC4uLm1zZylcclxuICAgICAgdGhpcy5sb2dQYXRoID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gZml4IGxvZyBmaWxlIGlzIHRvbyBsYXJnZSwgbm93IHRoZSBsb2cgZmlsZSdzIGRlZmF1bHQgc2l6ZSBpcyAxMCBNQlxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdNc2cgPSBgTG9nIGZpbGUgaXMgdG9vIGxhcmdlICg+ICR7KHJlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISkgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxyXG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlTG9nRmlsZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlTG9nKHRoaXMubG9nUGF0aCwgdHlwZSwgLi4ubXNnKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHdoeT8/P1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIGNoZWNraW5nIGxvZyBmaWxlIHNpemUnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tMb2dGaWxlSXNMYXJnZSAobG9nUGF0aDogc3RyaW5nKToge1xyXG4gICAgaXNMYXJnZTogYm9vbGVhblxyXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcclxuICB9IHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxyXG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZUxpbWl0ID0gZm9yY2VOdW1iZXIodGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPG51bWJlcj4+KCdzZXR0aW5ncy5sb2dGaWxlU2l6ZUxpbWl0JykgfHwgMTApICogMTAyNCAqIDEwMjQgLy8gMTAgTUIgZGVmYXVsdFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcclxuICAgICAgICBsb2dGaWxlU2l6ZSxcclxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzTGFyZ2U6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlTG9nRmlsZSAobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2dQYXRoKSkge1xyXG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXHJcbiAgICAgIGZzLmNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdyaXRlTG9nIChsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGxvZyA9IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyl9IFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV0gYFxyXG4gICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFcnJvciAmJiB0eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgICBsb2cgKz0gYFxcbi0tLS0tLUVycm9yIFN0YWNrIEJlZ2luLS0tLS0tXFxuJHt1dGlsLmZvcm1hdChpdGVtPy5zdGFjayl9XFxuLS0tLS0tLUVycm9yIFN0YWNrIEVuZC0tLS0tLS0gYFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtLCBudWxsLCAyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbG9nICs9IGAke2l0ZW0gYXMgc3RyaW5nfSBgXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBsb2cgKz0gJ1xcbidcclxuICAgICAgLy8gQSBzeW5jaHJvbml6ZWQgYXBwcm9hY2ggdG8gYXZvaWQgbG9nIG1zZyBzZXF1ZW5jZSBlcnJvcnNcclxuICAgICAgZnMuYXBwZW5kRmlsZVN5bmMobG9nUGF0aCwgbG9nKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gd3JpdGluZyBsb2cgZmlsZScsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrTG9nTGV2ZWwgKHR5cGU6IHN0cmluZywgbGV2ZWw6IHVuZGVmaW5lZCB8IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobGV2ZWwgPT09IHVuZGVmaW5lZCB8fCBsZXZlbCA9PT0gJ2FsbCcpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGxldmVsKSkge1xyXG4gICAgICByZXR1cm4gbGV2ZWwuc29tZSgoaXRlbTogc3RyaW5nKSA9PiAoaXRlbSA9PT0gdHlwZSB8fCBpdGVtID09PSAnYWxsJykpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHlwZSA9PT0gbGV2ZWxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN1Y2Nlc3MgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGluZm8gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGVycm9yICguLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5lcnJvciwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgd2FybiAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgZGVidWcgKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB0eXBlIHtcclxuICBJUmVzdWx0LFxyXG4gIElQcm9jZXNzRW52LFxyXG4gIElQbHVnaW5Qcm9jZXNzUmVzdWx0LFxyXG4gIElQbHVnaW5IYW5kbGVyLFxyXG4gIElQbHVnaW5IYW5kbGVyT3B0aW9ucyxcclxuICBVbmRlZmluYWJsZSxcclxuICBJUGljR28sXHJcbiAgSVBsdWdpbkhhbmRsZXJSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGdldFByb2Nlc3NQbHVnaW5OYW1lLCBnZXROb3JtYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vaTE4bi96aC1DTidcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xyXG4gIC8vIFRoYW5rcyB0byBmZWZsb3cgLT4gaHR0cHM6Ly9naXRodWIuY29tL2ZlZmxvdy9mZWZsb3cvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL2luc3RhbGwvcGx1Z2luLmpzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGFzeW5jIGluc3RhbGwgKHBsdWdpbnM6IHN0cmluZ1tdLCBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSwgZW52PzogSVByb2Nlc3NFbnYpOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcclxuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAvLyBkZXRlY3QgaWYgaGFzIGFscmVhZHkgaW5zdGFsbGVkXHJcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcclxuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChpdGVtLnBrZ05hbWUpXHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljTGlzdCBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCByZXNvbHZlIGZyb20gJ3Jlc29sdmUnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPigpXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlUGF0aCkpIHtcclxuICAgICAgY29uc3QgcGtnID0ge1xyXG4gICAgICAgIG5hbWU6ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ3BpY2dvLXBsdWdpbnMnLFxyXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vS3VpbmdzbWlsZS9QaWNMaXN0LUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcblxyXG5jb25zdCBldmVudEJ1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5leHBvcnQge1xyXG4gIGV2ZW50QnVzXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jICovXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHR5cGUgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5cclxuaW1wb3J0IHR5cGUgeyBJUGljR28sIFVuZGVmaW5hYmxlLCBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgSUNvbmZpZywgSVJlcXVlc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJUmVzcG9uc2UsIElGdWxsUmVzcG9uc2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcblxyXG5jb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcclxuICBtYXhWZXJzaW9uOiAnVExTdjEuMicsXHJcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxufSlcclxuXHJcbi8vIHRoYW5rcyBmb3IgaHR0cHM6Ly9naXRodWIuZGV2L3JlcXVlc3QvcmVxdWVzdC9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YSAoZm9ybTogRm9ybURhdGEsIGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXHJcbiAgfSBlbHNlIHtcclxuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvciAob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XHJcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbn0ge1xyXG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXHJcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcclxuICAgIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxyXG4gIH0gPSB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgdXJsOiAob3B0aW9ucy51cmwgYXMgc3RyaW5nKSB8fCAnJyxcclxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gIH1cclxuICAvLyB1c2VyIHJlcXVlc3QgY29uZmlnIHByb3h5XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XHJcbiAgICBpZiAodHlwZW9mIHByb3h5T3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxyXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgICAgcHJveHk6IHtcclxuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcclxuICAgICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zPy5wb3J0LCAxMClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0LCAxMCksXHJcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICgnZm9ybURhdGEnIGluIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5mb3JtRGF0YVtrZXldXHJcbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcclxuICAgIH1cclxuICAgIG9wdC5kYXRhID0gZm9ybVxyXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25cclxuICAgIGRlbGV0ZSBvcHQuZm9ybURhdGFcclxuICB9XHJcbiAgaWYgKCdib2R5JyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQuZGF0YSA9IG9wdGlvbnMuYm9keVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvbnNcclxuICAgIGRlbGV0ZSBvcHQuYm9keVxyXG4gIH1cclxuICBpZiAoJ3FzJyBpbiBvcHRpb25zKSB7XHJcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgfVxyXG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXHJcbiAgcmV0dXJuIG9wdFxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yIChyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXNwb25zZSxcclxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlRXJyb3JIYW5kbGVyIChlcnJvcjogYW55KSB7XHJcbiAgY29uc3QgZXJyb3JPYmogPSB7XHJcbiAgICBtZXRob2Q6IGVycm9yPy5jb25maWc/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnJyxcclxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxyXG4gICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICcnLFxyXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcclxuICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcclxuICAgICAgYm9keTogZXJyb3I/LnJlc3BvbnNlPy5kYXRhIHx8ICcnXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvck9iailcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3QgaW1wbGVtZW50cyBJUmVxdWVzdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xyXG4gIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ID0ge31cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gICAgZXZlbnRCdXMub24oSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIChkYXRhOiBJQ29uZmlnQ2hhbmdlUGF5bG9hZDxzdHJpbmcgfCBJQ29uZmlnWydwaWNCZWQnXT4pID0+IHtcclxuICAgICAgc3dpdGNoIChkYXRhLmNvbmZpZ05hbWUpIHtcclxuICAgICAgICBjYXNlICdwaWNCZWQnOlxyXG4gICAgICAgICAgaWYgKChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKT8ucHJveHkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm94eSA9IChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKS5wcm94eVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdwaWNCZWQucHJveHknOlxyXG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxyXG4gICAgaWYgKHByb3h5KSB7XHJcbiAgICAgIHRoaXMucHJveHkgPSBwcm94eVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSAoKTogQXhpb3NSZXF1ZXN0Q29uZmlnWydwcm94eSddIHwgZmFsc2Uge1xyXG4gICAgaWYgKHRoaXMucHJveHkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKHRoaXMucHJveHkpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcclxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0IHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8vICM2NCBkeW5hbWljIGdldCBwcm94eSB2YWx1ZVxyXG4gIHJlcXVlc3Q8VCwgVSBleHRlbmRzIChcclxuICAgIElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgSU9sZFJlcU9wdGlvbnMgPyBJT2xkUmVxT3B0aW9ucyA6IElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgQXhpb3NSZXF1ZXN0Q29uZmlnID8gQXhpb3NSZXF1ZXN0Q29uZmlnIDogbmV2ZXJcclxuICApPiAob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XHJcbiAgICB0aGlzLm9wdGlvbnMucHJveHkgPSB0aGlzLmhhbmRsZVByb3h5KClcclxuICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XHJcbiAgICB0aGlzLm9wdGlvbnMubWF4Q29udGVudExlbmd0aCA9IEluZmluaXR5XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb3h5ICYmIG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gdHVubmVsLmh0dHBzT3Zlckh0dHAoe1xyXG4gICAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgICBob3N0OiB0aGlzLm9wdGlvbnMucHJveHkuaG9zdCxcclxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wcm94eS5wb3J0XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLm9wdGlvbnMucHJveHkgPSBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcHRpb25zLmh0dHBzQWdlbnQgPSBodHRwc0FnZW50XHJcbiAgICB9XHJcbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xyXG4gICAgLy8gdGhpcy5vcHRpb25zIGlzIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGNvbnN0IGluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucylcclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXHJcblxyXG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIG9sZCByZXF1ZXN0IG9wdGlvbnMgdG8gbmV3IG9wdGlvbnNcclxuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxyXG5cclxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcclxuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gJydcclxuICAgICAgaWYgKG9iaj8uaGVhZGVycz8uY29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5jb250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uQ29udGVudFR5cGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVycy5Db250ZW50VHlwZVxyXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uWydjb250ZW50LXR5cGUnXSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xyXG4gICAgICAgIGRlbGV0ZSBvYmouaGVhZGVyc1snY29udGVudC10eXBlJ11cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XHJcbiAgICAgICAgb2JqLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqXHJcbiAgICB9KVxyXG4gICAgaWYgKCdyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZScgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XHJcbiAgICAgICAgaWYgKG9wdC5fX2lzT2xkT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzLmRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFxyXG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5pbXBvcnQgdHlwZSB7IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIElMaWZlY3ljbGVQbHVnaW5zLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUltZ0luZm8gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZ2V0VVJMRmlsZSwgaGFuZGxlVXJsRW5jb2RlLCBpbWFnZVByb2Nlc3MsIGlzVXJsLCBuZWVkQ29tcHJlc3MsIG5lZWRBZGRXYXRlcm1hcmssIGltYWdlQWRkV2F0ZXJNYXJrLCByZW1vdmVFeGlmLCByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcsIGdldENvbnZlcnRlZEZvcm1hdCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5cclxuY29uc3Qgd2F0ZXJtYXJrTXNnID0gJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnXHJcbmNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXHJcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHJlYWRvbmx5IHR0Zkxpbms6IHN0cmluZyA9ICdodHRwczovL3JlbGVhc2UucGljbGlzdC5jbi9zaW1oZWkudHRmJ1xyXG4gIHR0ZlBhdGg6IHN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXHJcbiAgICBjb25zdCBpbWdGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnKVxyXG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhpbWdGaWxlUGF0aClcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhvdXRwdXREaXIpXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSByZXR1cm4gdHJ1ZVxyXG4gICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlLicpXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy50dGZMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMudHRmUGF0aCwgcmVzLmRhdGEpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoZWxwR2V0T3B0aW9uIChjdHg6IElQaWNHbyk6IHtcclxuICAgIGNvbXByZXNzT3B0aW9uczogVW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+XHJcbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+XHJcbiAgfSB7XHJcbiAgICBjb25zdCBjb21wcmVzc09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPElCdWlsZEluQ29tcHJlc3NPcHRpb25zPj4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPj4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF1cGxvYWRlciAmJiBjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9ICdzbW1zJ1xyXG4gICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9IHR5cGVcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbXByZXNzT3B0aW9ucyxcclxuICAgICAgd2F0ZXJtYXJrT3B0aW9uc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnQgKGlucHV0OiBhbnlbXSk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICAvLyBlbnN1cmUgZXZlcnkgdXBsb2FkIHByb2Nlc3MgaGFzIGFuIHVuaXF1ZSBjb250ZXh0XHJcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW1hZ2VzIGlucHV0XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcclxuICAgICAgfVxyXG4gICAgICBjdHguaW5wdXQgPSBpbnB1dFxyXG4gICAgICBjdHgucmF3SW5wdXRQYXRoID0gW10gYXMgc3RyaW5nW11cclxuICAgICAgY3R4LnJhd0lucHV0ID0gY2xvbmVEZWVwKGlucHV0KVxyXG4gICAgICBjdHgub3V0cHV0ID0gW10gYXMgSUltZ0luZm9bXVxyXG4gICAgICBjb25zdCB7IGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucyB9ID0gdGhpcy5oZWxwR2V0T3B0aW9uKGN0eClcclxuXHJcbiAgICAgIGlmIChjb21wcmVzc09wdGlvbnMgfHwgd2F0ZXJtYXJrT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbUlzVXJsID0gaXNVcmwoaXRlbSlcclxuICAgICAgICAgIGNvbnN0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvID0gaXRlbUlzVXJsID8gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpIDogeyBzdWNjZXNzOiBmYWxzZSB9XHJcbiAgICAgICAgICBpZiAoaXRlbUlzVXJsICYmICghaW5mby5zdWNjZXNzIHx8ICFpbmZvLmJ1ZmZlcikpIHJldHVyblxyXG5cclxuICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlcjogVW5kZWZpbmFibGU8QnVmZmVyPlxyXG4gICAgICAgICAgbGV0IGlzU2tpcCA9IGZhbHNlXHJcbiAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXHJcbiAgICAgICAgICBjb25zdCBleHRlbnRpb24gPSBpdGVtSXNVcmwgPyBpbmZvLmV4dG5hbWUgfHwgJycgOiBwYXRoLmV4dG5hbWUoaXRlbSlcclxuICAgICAgICAgIGNvbnN0IGZpbGVCdWZmZXI6IEJ1ZmZlciA9IGl0ZW1Jc1VybCA/IGluZm8uYnVmZmVyISA6IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxyXG4gICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgZXh0ZW50aW9uKSkge1xyXG4gICAgICAgICAgICBpZiAoISh3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtGb250UGF0aCB8fCB3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICBpc1NraXAgPSB0cnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaXNTa2lwKSB7XHJcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZpbGVCdWZmZXIsIHdhdGVybWFya09wdGlvbnMhLCB0aGlzLnR0ZlBhdGgsIGN0eC5sb2cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBleHRlbnRpb24pKSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgaWYgKCFpdGVtSXNVcmwgJiYgKGV4dGVudGlvbiA9PT0gJy5oZWljJyB8fCBleHRlbnRpb24gPT09ICcuaGVpZicpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcjogZmlsZUJ1ZmZlcixcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ0pQRUcnLFxyXG4gICAgICAgICAgICAgICAgcXVhbGl0eTogMVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcEhlaWNDb252ZXJ0RmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0uanBnYClcclxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKGZzLnJlYWRGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlKSwgY29tcHJlc3NPcHRpb25zISwgJy5qcGcnLCBjdHgubG9nKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VQcm9jZXNzKHRyYW5zZm9ybWVkQnVmZmVyID8/IGZpbGVCdWZmZXIsIGNvbXByZXNzT3B0aW9ucyEsIGV4dGVudGlvbiwgY3R4LmxvZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICBjdHgubG9nLmluZm8oJ1JlbW92ZSBleGlmIGluZm8uJylcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGZpbGVCdWZmZXIsIGV4dGVudGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICBsZXQgbmV3RXh0ID0gY29tcHJlc3NPcHRpb25zPy5pc0NvbnZlcnQgPyBnZXRDb252ZXJ0ZWRGb3JtYXQoY29tcHJlc3NPcHRpb25zLCBleHRlbnRpb24pIDogZXh0ZW50aW9uXHJcbiAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcclxuICAgICAgICAgICAgY29uc3QgdGVtcEZpbGUgPSBpdGVtSXNVcmxcclxuICAgICAgICAgICAgICA/IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfWBcclxuICAgICAgICAgICAgICAgIDogbmV3IERhdGUoKS5nZXRUaW1lKCl9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgICA6IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4oXHJcbiAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKGl0ZW0pLFxyXG4gICAgICAgICAgICAgIGl0ZW1Jc1VybFxyXG4gICAgICAgICAgICAgICAgPyBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKVxyXG4gICAgICAgICAgICAgICAgOiBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9JHtuZXdFeHR9YClcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZSwgdHJhbnNmb3JtZWRCdWZmZXIpXHJcbiAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjdHguaW5wdXQpIHtcclxuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGgucHVzaChpdGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxyXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXHJcbiAgICAgIGF3YWl0IHRoaXMuZG9UcmFuc2Zvcm0oY3R4KVxyXG4gICAgICBjb25zdCByZW5hbWVDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cclxuICAgICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSByZW5hbWVDb25maWcuZm9ybWF0IHx8ICd7ZmlsZW5hbWV9J1xyXG4gICAgICAgIGN0eC5vdXRwdXQgPSBjdHgub3V0cHV0Lm1hcCgoaXRlbTogSUltZ0luZm8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcclxuICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLCBmb3JtYXQsIHVuZGVmaW5lZCwgaXRlbS5iYXNlNjRJbWFnZSA/IGl0ZW0uYmFzZTY0SW1hZ2UgOiBpdGVtLmJ1ZmZlcilcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXHJcbiAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcclxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdXBsb2FkZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB1cGxvYWRlciAtIHNtbXNgKVxyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNtbXNDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xyXG4gIGxldCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIGRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke2RvbWFpbn0vYXBpL3YyL3VwbG9hZGAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIHNtZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHNzbDogJ3RydWUnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxyXG4gIGlmICghc21tc0NvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc21tcyBjb25maWchJylcclxuICB9XHJcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBpbWFnZSwgc21tc0NvbmZpZz8udG9rZW4sIHNtbXNDb25maWc/LmJhY2t1cERvbWFpbilcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5oYXNoXHJcbiAgICAgICAgfSBlbHNlIGlmIChib2R5LmNvZGUgPT09ICdpbWFnZV9yZXBlYXRlZCcgJiYgdHlwZW9mIGJvZHkuaW1hZ2VzID09PSAnc3RyaW5nJykgeyAvLyBkbyBleHRyYSBjaGVjayBzaW5jZSB0aGlzIGVycm9yIHJldHVybiBpcyBub3QgZG9jdW1lbnRlZCBhdCBodHRwczovL2RvYy5zbS5tcy8jYXBpLUltYWdlLVVwbG9hZFxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmltYWdlc1xyXG4gICAgICAgICAgY29uc3QgdXBsb2FkSGlzdG9yeSA9IGF3YWl0IGF4aW9zLmdldChcclxuICAgICAgICAgICAgJ2h0dHBzOi8vc20ubXMvYXBpL3YyL3VwbG9hZF9oaXN0b3J5JyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHNtbXNDb25maWcudG9rZW5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAodXBsb2FkSGlzdG9yeS5kYXRhLmNvZGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZXMgPSB1cGxvYWRIaXN0b3J5LmRhdGEuZGF0YVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xyXG4gICAgICAgICAgICAgIGlmIChpbWFnZS51cmwgPT09IGJvZHkuaW1hZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaGFzaCA9IGltYWdlLmhhc2hcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgbWVzc2FnZTogJ2FwaSB0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2JhY2t1cERvbWFpbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJhY2t1cERvbWFpbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc21tcycsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGhIZWxwZXIgKFxyXG4gIHtcclxuICAgIHBhdGgsXHJcbiAgICBzdGFydFNsYXNoID0gZmFsc2UsXHJcbiAgICBlbmRTbGFzaCA9IHRydWUsXHJcbiAgICByb290VG9FbXB0eSA9IHRydWVcclxuICB9OiB7XHJcbiAgICBwYXRoPzogc3RyaW5nXHJcbiAgICBzdGFydFNsYXNoPzogYm9vbGVhblxyXG4gICAgZW5kU2xhc2g/OiBib29sZWFuXHJcbiAgICByb290VG9FbXB0eT86IGJvb2xlYW5cclxuICB9XHJcbik6IHN0cmluZyB7XHJcbiAgY29uc3QgY2xlYW5QYXRoID0gcGF0aD8ucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKVxyXG4gIGlmICghY2xlYW5QYXRoKSB7XHJcbiAgICByZXR1cm4gcm9vdFRvRW1wdHkgPyAnJyA6ICcvJ1xyXG4gIH1cclxuICByZXR1cm4gYCR7c3RhcnRTbGFzaCA/ICcvJyA6ICcnfSR7Y2xlYW5QYXRofSR7ZW5kU2xhc2ggPyAnLycgOiAnJ31gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVQYXRoIChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBwYXRoXHJcbiAgICAucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXHJcbiAgICAuc3BsaXQoJy8nKVxyXG4gICAgLm1hcChwID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcclxuICAgIC5qb2luKCcvJylcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmF0dXJlIHtcclxuICBzaWduYXR1cmU6IHN0cmluZ1xyXG4gIGFwcElkOiBzdHJpbmdcclxuICBidWNrZXQ6IHN0cmluZ1xyXG4gIHNpZ25UaW1lOiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XHJcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gb3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGxldCBzaWduYXR1cmVcclxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMClcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXHJcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcclxuXHJcbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcclxuXHJcbiAgICBjb25zdCBzaWduSGV4S2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShtdWx0aVNpZ25hdHVyZSkuZGlnZXN0KClcclxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxyXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcclxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5ICsgODY0MDBcclxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxyXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICBjb25zdCBodHRwU3RyaW5nID0gYHB1dFxcbi8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1cXG5gXHJcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gYHNoYTFcXG4ke3NpZ25UaW1lfVxcbiR7c2hhMWVkSHR0cFN0cmluZ31cXG5gXHJcbiAgICBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNpZ25LZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24pLmRpZ2VzdCgnaGV4JylcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHNpZ25hdHVyZSxcclxuICAgIGFwcElkLFxyXG4gICAgYnVja2V0LFxyXG4gICAgc2lnblRpbWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBJU2lnbmF0dXJlLCBpbWFnZTogQnVmZmVyLCB2ZXJzaW9uOiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGFyZWEgPSBvcHRpb25zLmFyZWFcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb20vZmlsZXMvdjIvJHtzaWduYXR1cmUuYXBwSWR9LyR7c2lnbmF0dXJlLmJ1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtmaWxlTmFtZX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb21gLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZS5zaWduYXR1cmUsXHJcbiAgICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcclxuICAgICAgfSxcclxuICAgICAgZm9ybURhdGE6IHtcclxuICAgICAgICBvcDogJ3VwbG9hZCcsXHJcbiAgICAgICAgZmlsZWNvbnRlbnQ6IGltYWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9YCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9ICh0Y1l1bk9wdGlvbnMuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XHJcbiAgICAgIHBhdGg6IHRjWXVuT3B0aW9ucy5wYXRoXHJcbiAgICB9KVxyXG4gICAgdGNZdW5PcHRpb25zLnBhdGggPSBwYXRoXHJcbiAgICBjb25zdCB1c2VWNCA9ICF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0J1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGxldCBib2R5XHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGJvZHkgPSByZXNcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICBpZiAoYm9keT8uYm9keT8uZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IGJvZHkuYm9keS5lcnJcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Py5ib2R5Py5tc2cgfHwgYm9keT8uYm9keT8ubWVzc2FnZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gdGNZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBjb25zdCBzbGltID0gdGNZdW5PcHRpb25zLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF0Y1l1bk9wdGlvbnMuc2xpbVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiBib2R5Lm1lc3NhZ2UgPT09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdXNlVjQgJiYgYm9keSAmJiBib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgPyB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7dGNZdW5PcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7dGNZdW5PcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2xpbSkge1xyXG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICcmaW1hZ2VTbGltJ1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSB9LFxyXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXHJcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcclxuICAgICAgZGVmYXVsdDogJ3Y1JyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcHBJZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzbGltJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF1c2VyQ29uZmlnLnNsaW0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IGNvbmZpcm1UZXh0ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNJykgfSxcclxuICAgICAgZ2V0IGNhbmNlbFRleHQgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCcpIH0sXHJcbiAgICAgIGdldCB0aXBzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGN5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5mdW5jdGlvbiBidWlsZEdpdGh1YkFwaVVybCAocmVwbzogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGV4dHJhOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX0ke2V4dHJhfWBcclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbyB9ID0gb3B0aW9uc1xyXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGJ1aWxkR2l0aHViQXBpVXJsKHJlcG8sIG9wdGlvbnMucGF0aCwgZmlsZU5hbWUpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlXHJcbiAgICB9LFxyXG4gICAgYm9keTogZGF0YSxcclxuICAgIGpzb246IHRydWVcclxuICB9IGFzIGNvbnN0XHJcbn1cclxuXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZyk6IElPbGRSZXFPcHRpb25zV2l0aEpTT04gPT4ge1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8sIGJyYW5jaCB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lLCBgP3JlZj0ke2JyYW5jaH1gKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcclxuICAgIH0sXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGdpdGh1Yk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJylcclxuICBpZiAoIWdpdGh1Yk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGdpdGh1YiBjb25maWcnKVxyXG4gIH1cclxuICBjb25zdCB1cGxvYWRQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IGdpdGh1Yk9wdGlvbnMucGF0aCB9KVxyXG4gIGdpdGh1Yk9wdGlvbnMucGF0aCA9IHVwbG9hZFBhdGhcclxuICBnaXRodWJPcHRpb25zLmN1c3RvbVVybCA9IChnaXRodWJPcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNMaXN0JyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IHVwbG9hZFBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xyXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcclxuICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXHJcbiAgICAgICAgICAgICAgOiBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgPT09IDQyMikge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkgYXMgYW55XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBnaXRodWJPcHRpb25zLmN1c3RvbVVybFxyXG4gICAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxyXG4gICAgICAgICAgICAgICAgOiByZXMuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB0eXBlIHsgSVBsdWdpbkNvbmZpZywgSVFpbml1Q29uZmlnLCBJUGljR28sIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmZ1bmN0aW9uIHBvc3RPcHRpb25zIChvcHRpb25zOiBJUWluaXVDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnMge1xyXG4gIGNvbnN0IGFyZWEgPSBzZWxlY3RBcmVhKG9wdGlvbnMuYXJlYSB8fCAnejAnKVxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBiYXNlNjRGaWxlTmFtZSA9IEJ1ZmZlci5mcm9tKHBhdGggKyBmaWxlTmFtZSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiBgaHR0cDovL3VwbG9hZCR7YXJlYX0ucWluaXVwLmNvbS9wdXRiNjQvLTEva2V5LyR7YmFzZTY0RmlsZU5hbWV9YCxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYFVwVG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1nQmFzZTY0XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RBcmVhIChhcmVhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBhcmVhID09PSAnejAnID8gJycgOiAnLScgKyBhcmVhXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFRva2VuIChxaW5pdU9wdGlvbnM6IGFueSk6IHN0cmluZyB7XHJcbiAgY29uc3QgYWNjZXNzS2V5ID0gcWluaXVPcHRpb25zLmFjY2Vzc0tleVxyXG4gIGNvbnN0IHNlY3JldEtleSA9IHFpbml1T3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBtYWMgPSBuZXcgcWluaXUuYXV0aC5kaWdlc3QuTWFjKGFjY2Vzc0tleSwgc2VjcmV0S2V5KVxyXG4gIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICBzY29wZTogcWluaXVPcHRpb25zLmJ1Y2tldFxyXG4gIH1cclxuICBjb25zdCBwdXRQb2xpY3kgPSBuZXcgcWluaXUucnMuUHV0UG9saWN5KG9wdGlvbnMpXHJcbiAgcmV0dXJuIHB1dFBvbGljeS51cGxvYWRUb2tlbihtYWMpXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcWluaXVPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKVxyXG4gIGlmICghcWluaXVPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBxaW5pdSBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHFpbml1T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBnZXRUb2tlbihxaW5pdU9wdGlvbnMpLCBiYXNlNjRJbWFnZSlcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keT8ua2V5KSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IHFpbml1T3B0aW9ucy51cmxcclxuICAgICAgICAgIGNvbnN0IHVybE9wdGlvbnMgPSBxaW5pdU9wdGlvbnMub3B0aW9ucyB8fCAnJ1xyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7Ym9keS5rZXkgYXMgc3RyaW5nfSR7dXJsT3B0aW9uc31gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkubXNnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY3R4LmxvZy5lcnJvcigncWluaXUgZXJyb3InLCBib2R5KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlICE9PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgLy8gZXJyLnJlc3BvbnNlIG1heWJlIHVuZGVmaW5lZFxyXG4gICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2UuYm9keVxyXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyb3IuZXJyb3JcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVFpbml1Q29uZmlnPigncGljQmVkLnFpbml1JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQUNDRVNTS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdxaW5pdScsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJSW1ndXJDb25maWcsIElPbGRSZXFPcHRpb25zLCBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGZvcm1hdEFjY2Vzc1Rva2VuID0gKGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBzdHJpbmcgPT4gYWNjZXNzVG9rZW4gPyBhY2Nlc3NUb2tlbi5zdGFydHNXaXRoKCdCZWFyZXInKSA/IGFjY2Vzc1Rva2VuIDogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgOiAnJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElJbWd1ckNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXHJcbiAgY29uc3QgdXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lIHx8ICcnXHJcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBmb3JtYXRBY2Nlc3NUb2tlbihvcHRpb25zLmFjY2Vzc1Rva2VuIHx8ICcnKVxyXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xyXG4gIGxldCBhdXRob3JpemF0aW9uXHJcbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuKSB7XHJcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cclxuICB9IGVsc2UgaWYgKGNsaWVudElkKSB7XHJcbiAgICBhdXRob3JpemF0aW9uID0gYENsaWVudC1JRCAke2NsaWVudElkfWBcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGllbnRJZCBvciBhY2Nlc3NUb2tlbiBpcyByZXF1aXJlZCcpXHJcbiAgfVxyXG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsOiAnaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvaW1hZ2UnLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uLFxyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgaW1hZ2U6IGltZ0Jhc2U2NCxcclxuICAgICAgdHlwZTogJ2Jhc2U2NCcsXHJcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJ1VwbG9hZGVkIHdpdGggUGljTGlzdCdcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKHVzZXJuYW1lICYmIGFjY2Vzc1Rva2VuICYmIGFsYnVtKSB7XHJcbiAgICBsZXQgaW5pdFBhZ2VzID0gMFxyXG4gICAgbGV0IHJlc1xyXG4gICAgbGV0IGFsYnVtSGFzaCA9ICcnXHJcbiAgICBkbyB7XHJcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuaW1ndXIuY29tLzMvYWNjb3VudC8ke3VzZXJuYW1lfS9hbGJ1bXMvJHtpbml0UGFnZXN9YCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxyXG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwXHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgICAgICBnZXRBbGJ1bUhhc2hPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gICAgICB9XHJcbiAgICAgIHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KGdldEFsYnVtSGFzaE9wdGlvbnMpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxyXG4gICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5LnN1Y2Nlc3MpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFsYnVtTGlzdCA9IHJlcy5ib2R5LmRhdGFcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFsYnVtTGlzdCkge1xyXG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xyXG4gICAgICAgICAgYWxidW1IYXNoID0gaXRlbS5pZFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaW5pdFBhZ2VzKytcclxuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcclxuICAgIGlmIChhbGJ1bUhhc2ggJiYgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEpIHtcclxuICAgICAgcmVxdWVzdE9wdGlvbnMuZm9ybURhdGEuYWxidW0gPSBhbGJ1bUhhc2hcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcclxuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxyXG4gIH1cclxuICByZXR1cm4gcmVxdWVzdE9wdGlvbnNcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXHJcbiAgaWYgKCFpbWd1ck9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGltZ3VyIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcclxuICAgICAgICAgIGltZy5oYXNoID0gYm9keS5kYXRhLmRlbGV0ZWhhc2hcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLmltZ3VyLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3RyaW5nIHwgSUVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW0nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHR5cGUgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBnZXRDdXJyZW50VVRDRGF0ZSA9ICgpOiBzdHJpbmcgPT4gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcblxyXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IGRhdGUgPSBnZXRDdXJyZW50VVRDRGF0ZSgpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICBjb25zdCBzaWduU3RyaW5nID0gYFBVVFxcblxcbiR7bWltZVR5cGV9XFxuJHtkYXRlfVxcbi8ke29wdGlvbnMuYnVja2V0fS8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWBcclxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxyXG4gIHJldHVybiBgT1NTICR7b3B0aW9ucy5hY2Nlc3NLZXlJZH06JHtzaWduYXR1cmV9YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGBodHRwczovLyR7b3B0aW9ucy5idWNrZXR9LiR7b3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVQYXRoKGAke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWApfWAsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tYCxcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBnZXRDdXJyZW50VVRDRGF0ZSgpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoeyBwYXRoOiBhbGlZdW5PcHRpb25zLnBhdGggfSlcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IChhbGlZdW5PcHRpb25zLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxyXG4gICAgY29uc3QgcGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZShhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke2FsaVl1bk9wdGlvbnMuYnVja2V0fS4ke2FsaVl1bk9wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleVNlY3JldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlTZWNyZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2FsaXl1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHtcclxuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpXHJcbiAgICB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgc2FmZVBhcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3Qgb3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yXHJcbiAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkXHJcbiAgY29uc3QgbWQ1UGFzc3dvcmQgPSBNRDUocGFzc3dvcmQpXHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxyXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLmJ1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gXHJcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxyXG4gIGNvbnN0IHNpZ24gPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG1kNVBhc3N3b3JkKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxyXG4gIGxldCBlbmRwb2ludCA9IChvcHRpb25zLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nKS5yZXBsYWNlKC9cXC8rJC9nLCAnJylcclxuICBpZiAoIWVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgZW5kcG9pbnQgPSBgaHR0cHM6Ly8ke2VuZHBvaW50fWBcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUsXHJcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE1ENSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpXHJcbn1cclxuXHJcbmNvbnN0IGdldEFudGlMZWVjaFBhcmFtID0gKGFudGlMZWVjaFRva2VuOiBzdHJpbmcsIGV4cGlyZVRpbWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgb3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5wYXRoIHx8ICcnfSR7ZmlsZU5hbWV9YC5yZXBsYWNlKC8lMkYvZywgJy8nKS5yZXBsYWNlKC9eXFwvKy9nLCAnLycpXHJcbiAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgY29uc3QgZXhwaXJlID0gZXhwaXJlVGltZSA/IG5vdyArIHBhcnNlSW50KGV4cGlyZVRpbWUudG9TdHJpbmcoKSwgMTApIDogbm93ICsgMTgwMFxyXG4gIGNvbnN0IHNpZ24gPSBNRDUoYCR7YW50aUxlZWNoVG9rZW59JiR7ZXhwaXJlfSYke3VyaX1gKVxyXG4gIGNvbnN0IHVwdCA9IGAke3NpZ24uc3Vic3RyaW5nKDEyLCAyMCl9JHtleHBpcmV9YFxyXG4gIHJldHVybiBgX3VwdD0ke3VwdH1gXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgdXB5dW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKVxyXG4gIGlmICghdXB5dW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB1cFl1biBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IHBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogdXB5dW5PcHRpb25zLnBhdGggfSlcclxuICAgIHVweXVuT3B0aW9ucy5wYXRoID0gcGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHVweXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcclxuICAgICAgICAgIGlmICh1cHl1bk9wdGlvbnMuYW50aUxlZWNoVG9rZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0odXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuLCB1cHl1bk9wdGlvbnMuZXhwaXJlVGltZSwgdXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBpbWcuaW1nVXJsLmluY2x1ZGVzKCc/JykgPyBgJHtpbWcuaW1nVXJsfSYke3VwdH1gIDogYCR7aW1nLmltZ1VybH0/JHt1cHR9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkuY29kZSA6IGJvZHlcclxuICAgICAgICB9KSxcclxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3BlcmF0b3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcGVyYXRvciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbnRpTGVlY2hUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZXhwaXJlVGltZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJ2h0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdHlwZSB7IFdlYkRBVkNsaWVudCwgV2ViREFWQ2xpZW50T3B0aW9ucyB9IGZyb20gJ3dlYmRhdidcclxuaW1wb3J0IHsgQXV0aFR5cGUsIGNyZWF0ZUNsaWVudCB9IGZyb20gJ3dlYmRhdidcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJV2ViZGF2UGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcclxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnJylcclxuICB9XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xyXG4gICAgcGF0aDogd2ViZGF2cGxpc3RPcHRpb25zLnBhdGgsXHJcbiAgICByb290VG9FbXB0eTogZmFsc2VcclxuICB9KVxyXG4gIGNvbnN0IGF1dGhUeXBlID0gd2ViZGF2cGxpc3RPcHRpb25zLmF1dGhUeXBlIHx8ICdiYXNpYydcclxuICBjb25zdCB3ZWJwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XHJcbiAgICBwYXRoOiB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCxcclxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxyXG4gIH0pXHJcbiAgY29uc3Qgc3VmZml4ID0gd2ViZGF2cGxpc3RPcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHVwbG9hZFBhdGggPSB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xpZW50T3B0aW9uczogV2ViREFWQ2xpZW50T3B0aW9ucyA9IHtcclxuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXHJcbiAgICAgICAgICBwYXNzd29yZDogd2ViZGF2cGxpc3RPcHRpb25zLnBhc3N3b3JkLFxyXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogNCAqIDEwMjQgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF1dGhUeXBlID09PSAnZGlnZXN0Jykge1xyXG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGllbnQ6IFdlYkRBVkNsaWVudCA9IGNyZWF0ZUNsaWVudCh3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCwgY2xpZW50T3B0aW9ucylcclxuICAgICAgICBjb25zdCBwYXRoVG9DcmVhdGUgPSB1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHVwbG9hZFBhdGhcclxuICAgICAgICBpZiAocGF0aFRvQ3JlYXRlKSB7XHJcbiAgICAgICAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnB1dEZpbGVDb250ZW50cyhgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBpbWFnZSwge1xyXG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnd2ViZGF2cGxpc3QnKVxyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYnBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtzdWZmaXh9YFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3NsRW5hYmxlZCA/PyBmYWxzZSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYnBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXV0aFR5cGUnLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpIH0sXHJcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXV0aFR5cGUgfHwgJ2Jhc2ljJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJTG9jYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGxvY2FsQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKVxyXG4gIGlmICghbG9jYWxDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGxvY2FsIGNvbmZpZyEnKVxyXG4gIH1cclxuICBjb25zdCB1cGxvYWRQYXRoID0gbG9jYWxDb25maWcucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGN1c3RvbVVybCA9IChsb2NhbENvbmZpZy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XHJcbiAgICBwYXRoOiBsb2NhbENvbmZpZy53ZWJQYXRoPy5yZXBsYWNlKC9cXFxcL2csICcvJylcclxuICB9KVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ2xvY2FsJylcclxuICAgICAgICAgIGNvbnN0IGZpbGVJbWdUZW1wUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgY29uc3QgZmlsZVVwbG9hZFBhdGggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVVwbG9hZFBhdGgpKVxyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZUltZ1RlbXBQYXRoKSlcclxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVVwbG9hZFBhdGgsIGltYWdlKVxyXG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKGZpbGVVcGxvYWRQYXRoLCBmaWxlSW1nVGVtcFBhdGgpXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGltZy5oYXNoID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L2xvY2FsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJylcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdsb2NhbCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IE5vZGVTU0ggfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnbm9kZS1zc2gtbm8tY3B1LWZlYXR1cmVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgdHlwZSB7IElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi90eXBlcydcclxuXHJcbmNsYXNzIFNTSENsaWVudCB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBTU0hDbGllbnRcclxuICBwcml2YXRlIHN0YXRpYyBfY2xpZW50OiBOb2RlU1NIXHJcbiAgcHJpdmF0ZSBfaXNDb25uZWN0ZWQgPSBmYWxzZVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSAoKTogU1NIQ2xpZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgdGhpcygpKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgY2xpZW50ICgpOiBOb2RlU1NIIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnQgfHwgKHRoaXMuX2NsaWVudCA9IG5ldyBOb2RlU1NIKCkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCAocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbm5lY3QgKGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQsIHByaXZhdGVLZXksIHBhc3NwaHJhc2UgfSA9IGNvbmZpZ1xyXG4gICAgY29uc3QgbG9naW5JbmZvOiBDb25maWcgPSBwcml2YXRlS2V5XHJcbiAgICAgID8geyB1c2VybmFtZSwgcHJpdmF0ZUtleVBhdGg6IHByaXZhdGVLZXksIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkIH1cclxuICAgICAgOiB7IHVzZXJuYW1lLCBwYXNzd29yZCB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBTU0hDbGllbnQuY2xpZW50LmNvbm5lY3Qoe1xyXG4gICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxyXG4gICAgICAgIHBvcnQ6IE51bWJlcihjb25maWcucG9ydCkgfHwgMjIsXHJcbiAgICAgICAgLi4ubG9naW5JbmZvXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQgKGxvY2FsOiBzdHJpbmcsIHJlbW90ZTogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy5faXNDb25uZWN0ZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgICAgYXdhaXQgdGhpcy5ta2RpcihwYXRoLmRpcm5hbWUocmVtb3RlKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyksIGNvbmZpZylcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5wdXRGaWxlKGxvY2FsLCByZW1vdGUpXHJcbiAgICAgIGNvbnN0IGZpbGVNb2RlID0gY29uZmlnLmZpbGVNb2RlIHx8ICcwNjQ0J1xyXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGBjaG1vZCAke2ZpbGVNb2RlfSBcIiR7cmVtb3RlfVwiYFxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBta2RpciAoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghU1NIQ2xpZW50LmNsaWVudC5pc0Nvbm5lY3RlZCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICBjb25zdCBkaXJlY3RvcnlNb2RlID0gY29uZmlnLmRpck1vZGUgfHwgJzA3NTUnXHJcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XHJcbiAgICAgIGNvbnN0IGRpcnMgPSBkaXJQYXRoLnNwbGl0KCcvJylcclxuICAgICAgbGV0IGN1cnJlbnRQYXRoID0gJydcclxuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xyXG4gICAgICAgIGlmIChkaXIpIHtcclxuICAgICAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtkaXJ9YFxyXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBgY2QgLyAmJiBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcclxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaG93biAocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImBcclxuICAgIHJldHVybiB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjIChzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IFNTSENsaWVudC5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxyXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlICgpOiB2b2lkIHtcclxuICAgIFNTSENsaWVudC5jbGllbnQuZGlzcG9zZSgpXHJcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5cclxuaW1wb3J0IHR5cGUgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcclxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNmdHBwbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKVxyXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzZnRwcGxpc3QgY29uZmlnIScpXHJcbiAgfVxyXG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxyXG4gIGlmIChzZnRwcGxpc3RDb25maWcucG9ydCA8IDAgfHwgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPiA2NTUzNSkge1xyXG4gICAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSAyMlxyXG4gIH1cclxuICBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xyXG4gICAgcGF0aDogc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGgsXHJcbiAgICByb290VG9FbXB0eTogZmFsc2VcclxuICB9KVxyXG4gIGNvbnN0IHdlYlBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcclxuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoLFxyXG4gICAgcm9vdFRvRW1wdHk6IGZhbHNlXHJcbiAgfSlcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVwbG9hZFRlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAndXBsb2FkVGVtcCcpXHJcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcclxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4odXBsb2FkVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBjbGllbnQgPSBTU0hDbGllbnQuaW5zdGFuY2VcclxuICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdChzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcclxuICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkKHRlbXBGaWxlUGF0aCwgcmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnKVxyXG4gICAgICAgIHNmdHBwbGlzdENvbmZpZy5maWxlVXNlciAmJiBhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBzZnRwcGxpc3RDb25maWcuY3VzdG9tVXJsIHx8IHNmdHBwbGlzdENvbmZpZy5ob3N0XHJcbiAgICAgICAgaWYgKHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoKSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggPT09ICcvJyA/ICcnIDogd2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbWdUZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShpbWdUZW1wRmlsZVBhdGgpKVxyXG4gICAgICAgIGZzLnJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIGZzLm1vdmVTeW5jKHRlbXBGaWxlUGF0aCwgcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKVxyXG4gICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3NmdHBwbGlzdC8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICBjbGllbnQuY2xvc2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncG9ydCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcml2YXRlS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJpdmF0ZUtleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlVXNlcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVInKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVVc2VyIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlTW9kZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVNb2RlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRElSX01PREUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc2Z0cHBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHR5cGUgeyBSZWFkU3RyZWFtIH0gZnJvbSAnZnMnXHJcblxyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRlbGVncmFwaENvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAob3B0aW9uczogSVRlbGVncmFwaENvbmZpZywgaW1hZ2U6IFJlYWRTdHJlYW0pOiBQcm9taXNlPElPbGRSZXFPcHRpb25zPiA9PiB7XHJcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6ICdodHRwczovL3RlbGVncmEucGgvdXBsb2FkJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGZpbGU6IGltYWdlXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgbGV0IHRnT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpXHJcbiAgaWYgKCF0Z09wdGlvbnMpIHtcclxuICAgIHRnT3B0aW9ucyA9IHt9XHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFRlbXBQYXRoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnModGdPcHRpb25zLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRlbXBGaWxlUGF0aCkpXHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzKSA6IHJlc1xyXG4gICAgICAgIGZzLnJlbW92ZSh0ZW1wRmlsZVBhdGgpXHJcbiAgICAgICAgaWYgKGJvZHk/LlswXT8uc3JjKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovL3RlbGVncmEucGgke2JvZHlbMF0uc3JjfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcclxuICAgICAgdGV4dDogJydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHN0cmluZyB8IElFcnJvclxyXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVRlbGVncmFwaENvbmZpZz4oJ3BpY0JlZC50ZWxlZ3JhcGhwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndGVsZWdyYXBocGxpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVMRUdSQVBIJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IHR5cGUgeyBJUGljTGlzdENvbmZpZywgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB0eXBlIHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVBpY0xpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGhvc3QgPSBvcHRpb25zLmhvc3QgfHwgJzEyNy4wLjAuMSdcclxuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IDM2Njc3XHJcbiAgY29uc3QgcGljYmVkID0gb3B0aW9ucy5waWNiZWQgfHwgJydcclxuICBjb25zdCBjb25maWdOYW1lID0gb3B0aW9ucy5jb25maWdOYW1lIHx8ICdEZWZhdWx0J1xyXG4gIGNvbnN0IHNlcnZlcktleSA9IG9wdGlvbnMuc2VydmVyS2V5IHx8ICcnXHJcbiAgbGV0IHVybCA9IGBodHRwOi8vJHtob3N0fToke3BvcnR9L3VwbG9hZD9jb25maWdOYW1lPSR7Y29uZmlnTmFtZX1gXHJcbiAgaWYgKHBpY2JlZCkge1xyXG4gICAgdXJsICs9IGAmcGljYmVkPSR7cGljYmVkfWBcclxuICB9XHJcbiAgaWYgKHNlcnZlcktleSkge1xyXG4gICAgdXJsICs9IGAma2V5PSR7c2VydmVyS2V5fWBcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgdXJsLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXHJcbiAgICB9LFxyXG4gICAgZm9ybURhdGE6IHtcclxuICAgICAgZmlsZToge1xyXG4gICAgICAgIHZhbHVlOiBpbWFnZSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICBjb250ZW50VHlwZTogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHBpY2xpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUGljTGlzdENvbmZpZz4oJ3BpY0JlZC5waWNsaXN0JylcclxuICBpZiAoIXBpY2xpc3RPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBQaWNMaXN0IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHBpY2xpc3RPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGltYWdlKVxyXG5cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlcy5ib2R5Py5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IHJlcy5ib2R5LnJlc3VsdFswXVxyXG4gICAgICAgICAgaW1nLmZ1bGxSZXN1bHQgPSByZXMuYm9keS5mdWxsUmVzdWx0WzBdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElQaWNMaXN0Q29uZmlnPigncGljQmVkLnBpY2xpc3QnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BvcnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BPUlQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAzNjY3NyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGljYmVkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5waWNiZWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NvbmZpZ05hbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY29uZmlnTmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VydmVyS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZXJ2ZXJLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3BpY2xpc3QnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxsb2RrMzQvcGljZ28tcGx1Z2luLWxhbmtvbmdcclxuLy8gTElDRU5TRTogTUlUXHJcblxyXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXHJcbmltcG9ydCB0eXBlIHsgSUxza3lDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNR1RZUEUge1xyXG4gIGltZ1VybD86IHN0cmluZ1xyXG4gIHR5cGU/OiBzdHJpbmdcclxuICBrZXk/OiBzdHJpbmdcclxuICBpZD86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElWMkZPUk1EQVRBIHtcclxuICBmaWxlOiB7XHJcbiAgICB2YWx1ZTogQnVmZmVyXHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIGZpbGVuYW1lOiBzdHJpbmdcclxuICAgIH1cclxuICB9XHJcbiAgc3NsOiBzdHJpbmdcclxuICBzdHJhdGVneV9pZD86IHN0cmluZ1xyXG4gIGFsYnVtX2lkPzogc3RyaW5nXHJcbiAgcGVybWlzc2lvbj86IG51bWJlclxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJTHNreUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgaW1hZ2U6IEJ1ZmZlcik6IGFueSA9PiB7XHJcbiAgbGV0IGhvc3QgPSBvcHRpb25zLmhvc3RcclxuICBob3N0ID0gaG9zdC5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgY29uc3QgaXNWMiA9IG9wdGlvbnMudmVyc2lvbiA9PT0gJ1YyJ1xyXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlblxyXG5cclxuICBjb25zdCB2MUhlYWRlcnMgPSB7XHJcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICBDb25uZWN0aW9uOiAna2VlcC1hbGl2ZScsXHJcbiAgICB0b2tlbjogdG9rZW4gfHwgdW5kZWZpbmVkXHJcbiAgfVxyXG4gIGNvbnN0IHYxRm9ybURhdGEgPSB7XHJcbiAgICBpbWFnZToge1xyXG4gICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzc2w6ICd0cnVlJ1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdjJIZWFkZXJzID0ge1xyXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxyXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxyXG4gICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICBBdXRob3JpemF0aW9uOiB0b2tlbiB8fCB1bmRlZmluZWRcclxuICB9XHJcbiAgY29uc3Qgc3RyYXRlZ3lJZCA9IG9wdGlvbnMuc3RyYXRlZ3lJZFxyXG4gIGNvbnN0IGFsYnVtSWQgPSBvcHRpb25zLmFsYnVtSWRcclxuICBsZXQgcGVybWlzc2lvbjogYW55ID0gb3B0aW9ucy5wZXJtaXNzaW9uLnZhbHVlXHJcbiAgaWYgKHBlcm1pc3Npb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgcGVybWlzc2lvbiA9IG9wdGlvbnMucGVybWlzc2lvblxyXG4gIH1cclxuICBjb25zdCB2MkZvcm1EYXRhOiBJVjJGT1JNREFUQSA9IHtcclxuICAgIGZpbGU6IHtcclxuICAgICAgdmFsdWU6IGltYWdlLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lIVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc3NsOiAndHJ1ZScsXHJcbiAgICBzdHJhdGVneV9pZDogc3RyYXRlZ3lJZCxcclxuICAgIGFsYnVtX2lkOiBhbGJ1bUlkLFxyXG4gICAgcGVybWlzc2lvblxyXG4gIH1cclxuICBpZiAoIXN0cmF0ZWd5SWQpIHtcclxuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLnN0cmF0ZWd5X2lkXHJcbiAgfVxyXG4gIGlmICghYWxidW1JZCkge1xyXG4gICAgZGVsZXRlIHYyRm9ybURhdGEuYWxidW1faWRcclxuICB9XHJcbiAgaWYgKCEocGVybWlzc2lvbiA9PT0gMCB8fCBwZXJtaXNzaW9uID09PSAxKSkge1xyXG4gICAgZGVsZXRlIHYyRm9ybURhdGEucGVybWlzc2lvblxyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVxdWVzdEFnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcclxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxuICB9KVxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogaXNWMiA/IGAke2hvc3R9L2FwaS92MS91cGxvYWRgIDogYCR7aG9zdH0vYXBpL3VwbG9hZGAsXHJcbiAgICBhZ2VudDogcmVxdWVzdEFnZW50LFxyXG4gICAgaGVhZGVyczogaXNWMiA/IHYySGVhZGVycyA6IHYxSGVhZGVycyxcclxuICAgIGZvcm1EYXRhOiBpc1YyID8gdjJGb3JtRGF0YSA6IHYxRm9ybURhdGFcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgbHNreU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpXHJcbiAgaWYgKCFsc2t5T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGxza3lPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGltYWdlKVxyXG4gICAgICBsZXQgYm9keSA9IGF3YWl0IGN0eC5SZXF1ZXN0LnJlcXVlc3QocG9zdENvbmZpZykgYXMgYW55XHJcbiAgICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxyXG4gICAgICBjb25zdCBpc1YyID0gbHNreU9wdGlvbnMudmVyc2lvbiA9PT0gJ1YyJ1xyXG4gICAgICBjb25zdCBjb25kaXRpb24gPSBpc1YyID8gKGJvZHkuc3RhdHVzID09PSB0cnVlKSA6IChib2R5LmNvZGUgPT09IDIwMClcclxuICAgICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGltZy5pbWdVcmwgPSBpc1YyID8gYm9keS5kYXRhLmxpbmtzLnVybCA6IGJvZHkuZGF0YS51cmxcclxuICAgICAgICBpZiAoaXNWMikge1xyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5lbWl0KCdub3RpZmljYXRpb24nLCB7XHJcbiAgICAgICAgICB0aXRsZTogJ3VwbG9hZCBmYWlsZWQnLFxyXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnZlcnNpb24gfHwgJ1YxJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9WRVJTSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1ZFUlNJT04nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04nKSB9LFxyXG4gICAgICBjaG9pY2VzOiBbJ1YxJywgJ1YyJ10sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaG9zdCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9IT1NUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3N0cmF0ZWd5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnN0cmF0ZWd5SWQsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW1JZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW1JZCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBlcm1pc3Npb24gfHwgJ3ByaXZhdGUoZGVmYXVsdCknLFxyXG4gICAgICBjaG9pY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3ByaXZhdGUoZGVmYXVsdCknLFxyXG4gICAgICAgICAgdmFsdWU6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxyXG4gICAgICAgICAgdmFsdWU6IDFcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QRVJNSVNTSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1BFUk1JU1NJT04nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignbHNreXBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IEZpbGVUeXBlIGZyb20gJ2ZpbGUtdHlwZSdcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcclxuaW1wb3J0IHsgSHR0cHNQcm94eUFnZW50LCBIdHRwUHJveHlBZ2VudCB9IGZyb20gJ2hwYWdlbnQnXHJcbmltcG9ydCB0eXBlIHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5cclxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xyXG4gIGRhdGU6IERhdGVcclxuICBpbmZvOiBJSW1nSW5mb1xyXG5cclxuICBzdGF0aWMgZmllbGRzID0gW1xyXG4gICAgJ3llYXInLCAvLyDlvZPliY3ml6XmnJ8gLSDlubRcclxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxyXG4gICAgJ2RheScsIC8vIOW9k+WJjeaXpeacnyAtIOaXpVxyXG4gICAgJ2Z1bGxOYW1lJywgLy8g5paH5Lu25ZCNLCDljIXlkKvmianlsZXlkI1cclxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXHJcbiAgICAnZXh0TmFtZScsIC8vIOaJqeWxleWQjVxyXG4gICAgJ21kNScsIC8vIG1kNVxyXG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcclxuICAgICdtZDVCNjRTaG9ydCcsIC8vIG1kNSBiYXNlNjQgc2hvcnRcclxuICAgICdzaGExJywgLy8gc2hhMVxyXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxyXG4gICAgJ3RpbWVzdGFtcCcsIC8vIOW9k+WJjeaXtumXtOaIsywg56eSXHJcbiAgICAndGltZXN0YW1wTVMnIC8vIOW9k+WJjeaXtumXtOaIsywg5q+r56eSXHJcbiAgXVxyXG5cclxuICBjb25zdHJ1Y3RvciAoaW5mbzogSUltZ0luZm8pIHtcclxuICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKClcclxuICAgIHRoaXMuaW5mbyA9IGluZm9cclxuICB9XHJcblxyXG4gIHB1YmxpYyB5ZWFyICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb250aCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXkgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmdWxsTmFtZSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWxlTmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1kNSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWQ1QjY0ICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNyeXB0b1xyXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcclxuICAgICAgLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISlcclxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcclxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXHJcbiAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxyXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWQ1QjY0U2hvcnQgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvXHJcbiAgICAgIC5jcmVhdGVIYXNoKCdtZDUnKVxyXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxyXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxyXG4gICAgICAucmVwbGFjZSgvXFwrL2csICctJylcclxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcbiAgICAgIC5zbGljZSgwLCA3KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNoYTEgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaGEyNTYgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRpbWVzdGFtcCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZXN0YW1wTVMgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltZ0J1ZmZlciAoKTogc3RyaW5nIHwgQnVmZmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGF0aCAoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCFmb3JtYXQpIHtcclxuICAgIHJldHVybiBpbmZvLmZpbGVOYW1lIVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZmlsZU5hbWVHZW5lcmF0b3IgPSBuZXcgRmlsZU5hbWVHZW5lcmF0b3IoaW5mbylcclxuXHJcbiAgbGV0IGZvcm1hdFBhdGg6IHN0cmluZyA9IGZvcm1hdFxyXG5cclxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgeyR7a2V5fX1gLCAnZycpXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRzLW1pZ3JhdGUoMjUzMikgRklYTUU6IE9iamVjdCBpcyBwb3NzaWJseSAndW5kZWZpbmVkJy5cclxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcclxuICB9XHJcblxyXG4gIHJldHVybiBmb3JtYXRQYXRoXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyAoaW5mbzogSUltZ0luZm8pOiBQcm9taXNlPHtcclxuICBib2R5PzogQnVmZmVyXHJcbiAgY29udGVudFR5cGU/OiBzdHJpbmdcclxuICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcclxufT4ge1xyXG4gIGNvbnN0IHJlc3VsdDoge1xyXG4gICAgYm9keT86IEJ1ZmZlclxyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcclxuICAgIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xyXG4gIH0gPSB7fVxyXG5cclxuICBpZiAoaW5mby5iYXNlNjRJbWFnZSkge1xyXG4gICAgY29uc3QgYm9keSA9IGluZm8uYmFzZTY0SW1hZ2UucmVwbGFjZSgvXmRhdGE6Wy9cXHddKztiYXNlNjQsLywgJycpXHJcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKFxyXG4gICAgICAvW146XVxcdytcXC9bXFx3LStcXGQuXSsoPz07fCwpL1xyXG4gICAgKT8uWzBdXHJcbiAgICByZXN1bHQuYm9keSA9IEJ1ZmZlci5mcm9tKGJvZHksICdiYXNlNjQnKVxyXG4gICAgcmVzdWx0LmNvbnRlbnRFbmNvZGluZyA9ICdiYXNlNjQnXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChpbmZvLmV4dG5hbWUpIHtcclxuICAgICAgcmVzdWx0LmNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGluZm8uZXh0bmFtZSkhXHJcbiAgICB9XHJcbiAgICByZXN1bHQuYm9keSA9IGluZm8uYnVmZmVyXHJcbiAgfVxyXG5cclxuICAvLyBmYWxsYmFjayB0byBkZXRlY3QgZnJvbSBidWZmZXJcclxuICBpZiAoIXJlc3VsdC5jb250ZW50VHlwZSkge1xyXG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcclxuICAgIHJlc3VsdC5jb250ZW50VHlwZSA9IGZpbGVUeXBlPy5taW1lXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdEh0dHBQcm94eVVSTCAodXJsID0gJycpOiBzdHJpbmcge1xyXG4gIGlmICghdXJsKSByZXR1cm4gJydcclxuXHJcbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xyXG4gICAgY29uc3QgW2hvc3QsIHBvcnRdID0gdXJsLnNwbGl0KCc6JylcclxuICAgIHJldHVybiBgaHR0cDovLyR7aG9zdC5yZXBsYWNlKCcxMjcuMC4wLjEnLCAnbG9jYWxob3N0Jyl9OiR7cG9ydH1gXHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxyXG4gICAgcmV0dXJuIGAke3Byb3RvY29sfS8vJHtob3N0bmFtZS5yZXBsYWNlKCcxMjcuMC4wLjEnLCAnbG9jYWxob3N0Jyl9OiR7cG9ydH1gXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJveHlBZ2VudCAoXHJcbiAgcHJveHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICBzc2xFbmFibGVkOiBib29sZWFuLFxyXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxyXG4pOiBIdHRwUHJveHlBZ2VudCB8IEh0dHBzUHJveHlBZ2VudCB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgZm9ybWF0ZWRQcm94eSA9IGZvcm1hdEh0dHBQcm94eVVSTChwcm94eSlcclxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIGNvbnN0IEFnZW50ID0gc3NsRW5hYmxlZCA/IEh0dHBzUHJveHlBZ2VudCA6IEh0dHBQcm94eUFnZW50XHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcclxuICAgIGtlZXBBbGl2ZU1zZWNzOiAxMDAwLFxyXG4gICAgc2NoZWR1bGluZzogJ2xpZm8nIGFzICdsaWZvJyB8ICdmaWZvJyB8IHVuZGVmaW5lZCxcclxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcclxuICAgIHByb3h5OiBmb3JtYXRlZFByb3h5XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IEFnZW50KG9wdGlvbnMpXHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBTM0NsaWVudCxcclxuICBQdXRPYmplY3RDb21tYW5kLFxyXG4gIEdldE9iamVjdENvbW1hbmRcclxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnXHJcbmltcG9ydCB0eXBlIHsgUzNDbGllbnRDb25maWcsIFB1dE9iamVjdENvbW1hbmRPdXRwdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnXHJcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xyXG5pbXBvcnQge1xyXG4gIE5vZGVIdHRwSGFuZGxlclxyXG59IGZyb20gJ0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXInXHJcbmltcG9ydCB0eXBlIHsgTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyB9IGZyb20gJ0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXInXHJcblxyXG5pbXBvcnQgdXJsIGZyb20gJ3VybCdcclxuaW1wb3J0IHR5cGUgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcclxuaW1wb3J0IHR5cGUgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElJbWdJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVwbG9hZFJlc3VsdCB7XHJcbiAgaW5kZXg6IG51bWJlclxyXG4gIGtleTogc3RyaW5nXHJcbiAgdXJsOiBzdHJpbmdcclxuICBpbWdVUkw6IHN0cmluZ1xyXG4gIHZlcnNpb25JZD86IHN0cmluZ1xyXG4gIGVUYWc/OiBzdHJpbmdcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlUzNDbGllbnQgKG9wdHM6IElBd3NTM1BMaXN0VXNlckNvbmZpZyk6IGFueSB7XHJcbiAgbGV0IHNzbEVuYWJsZWQgPSB0cnVlXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHUgPSBuZXcgdXJsLlVSTChvcHRzLmVuZHBvaW50ISlcclxuICAgIHNzbEVuYWJsZWQgPSB1LnByb3RvY29sID09PSAnaHR0cHM6J1xyXG4gIH0gY2F0Y2gge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgfVxyXG5cclxuICBjb25zdCBodHRwSGFuZGxlck9wdHM6IE5vZGVIdHRwSGFuZGxlck9wdGlvbnMgPSB7fVxyXG4gIGlmIChzc2xFbmFibGVkKSB7XHJcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxyXG4gIH0gZWxzZSB7XHJcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cEFnZW50ID0gZ2V0UHJveHlBZ2VudChvcHRzLnByb3h5LCBmYWxzZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBQcm94eUFnZW50XHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGllbnRPcHRpb25zOiBTM0NsaWVudENvbmZpZyA9IHtcclxuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxyXG4gICAgZW5kcG9pbnQ6IG9wdHMuZW5kcG9pbnQgfHwgdW5kZWZpbmVkLFxyXG4gICAgY3JlZGVudGlhbHM6IHtcclxuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXHJcbiAgICAgIHNlY3JldEFjY2Vzc0tleTogb3B0cy5zZWNyZXRBY2Nlc3NLZXlcclxuICAgIH0sXHJcbiAgICB0bHM6IHNzbEVuYWJsZWQsXHJcbiAgICBmb3JjZVBhdGhTdHlsZTogb3B0cy5wYXRoU3R5bGVBY2Nlc3MsXHJcbiAgICByZXF1ZXN0SGFuZGxlcjogbmV3IE5vZGVIdHRwSGFuZGxlcihodHRwSGFuZGxlck9wdHMpXHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGllbnQgPSBuZXcgUzNDbGllbnQoY2xpZW50T3B0aW9ucylcclxuICByZXR1cm4gY2xpZW50XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ3JlYXRlVXBsb2FkVGFza09wdHMge1xyXG4gIGNsaWVudDogYW55XHJcbiAgYnVja2V0TmFtZTogc3RyaW5nXHJcbiAgcGF0aDogc3RyaW5nXHJcbiAgaXRlbTogSUltZ0luZm9cclxuICBpbmRleDogbnVtYmVyXHJcbiAgYWNsOiBzdHJpbmdcclxuICB1cmxQcmVmaXg/OiBzdHJpbmdcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXBsb2FkVGFzayAoXHJcbiAgb3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzXHJcbik6IFByb21pc2U8SVVwbG9hZFJlc3VsdD4ge1xyXG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd1bmRlZmluZWQgaW1hZ2UnKSlcclxuICB9XHJcblxyXG4gIGxldCBib2R5OiBCdWZmZXIgfCB1bmRlZmluZWRcclxuICBsZXQgY29udGVudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gIGxldCBjb250ZW50RW5jb2Rpbmc6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG5cclxuICB0cnkge1xyXG4gICAgOyh7IGJvZHksIGNvbnRlbnRUeXBlLCBjb250ZW50RW5jb2RpbmcgfSA9IGF3YWl0IGV4dHJhY3RJbmZvKG9wdHMuaXRlbSkpXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBQdXRPYmplY3RDb21tYW5kKHtcclxuICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxyXG4gICAgS2V5OiBvcHRzLnBhdGgsXHJcbiAgICBBQ0w6IG9wdHMuYWNsLFxyXG4gICAgQm9keTogYm9keSxcclxuICAgIENvbnRlbnRUeXBlOiBjb250ZW50VHlwZSxcclxuICAgIENvbnRlbnRFbmNvZGluZzogY29udGVudEVuY29kaW5nXHJcbiAgfSlcclxuXHJcbiAgbGV0IG91dHB1dDogUHV0T2JqZWN0Q29tbWFuZE91dHB1dFxyXG4gIHRyeSB7XHJcbiAgICBvdXRwdXQgPSBhd2FpdCBvcHRzLmNsaWVudC5zZW5kKGNvbW1hbmQpXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxuXHJcbiAgbGV0IHVybDogc3RyaW5nXHJcbiAgaWYgKCFvcHRzLnVybFByZWZpeCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHVybCA9IGAke29wdHMudXJsUHJlZml4fS8ke29wdHMucGF0aH1gXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaW5kZXg6IG9wdHMuaW5kZXgsXHJcbiAgICBrZXk6IG9wdHMucGF0aCxcclxuICAgIHVybCxcclxuICAgIGltZ1VSTDogdXJsLFxyXG4gICAgdmVyc2lvbklkOiBvdXRwdXQuVmVyc2lvbklkLFxyXG4gICAgZVRhZzogb3V0cHV0LkVUYWdcclxuICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVVUkwgKFxyXG4gIG9wdHM6IElDcmVhdGVVcGxvYWRUYXNrT3B0cyxcclxuICBlVGFnOiBzdHJpbmcsXHJcbiAgdmVyc2lvbklkOiBzdHJpbmdcclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgc2lnbmVkVXJsID0gYXdhaXQgZ2V0U2lnbmVkVXJsKFxyXG4gICAgICBvcHRzLmNsaWVudCxcclxuICAgICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xyXG4gICAgICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxyXG4gICAgICAgIEtleTogb3B0cy5wYXRoLFxyXG4gICAgICAgIElmTWF0Y2g6IGVUYWcsXHJcbiAgICAgICAgVmVyc2lvbklkOiB2ZXJzaW9uSWRcclxuICAgICAgfSksXHJcbiAgICAgIHsgZXhwaXJlc0luOiAzNjAwIH1cclxuICAgIClcclxuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyB1cmwuVVJMKHNpZ25lZFVybClcclxuICAgIHVybE9iamVjdC5zZWFyY2ggPSAnJ1xyXG4gICAgcmV0dXJuIHVybE9iamVjdC5ocmVmXHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNyZWF0ZVMzQ2xpZW50LFxyXG4gIGNyZWF0ZVVwbG9hZFRhc2ssXHJcbiAgZ2V0RmlsZVVSTFxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVVwbG9hZFJlc3VsdCB9IGZyb20gJy4vczMvdXBsb2FkZXInXHJcbmltcG9ydCB1cGxvYWRlciBmcm9tICcuL3MzL3VwbG9hZGVyJ1xyXG5pbXBvcnQgeyBmb3JtYXRQYXRoIH0gZnJvbSAnLi9zMy91dGlscydcclxuaW1wb3J0IHR5cGUgeyBJQXdzUzNQTGlzdFVzZXJDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgdHlwZSB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmZ1bmN0aW9uIGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCAoZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgaWYgKHR5cGVvZiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4gZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xyXG4gIH1cclxuICByZXR1cm4gQm9vbGVhbihkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0gY3R4LmdldENvbmZpZygncGljQmVkLmF3cy1zMy1wbGlzdCcpXHJcbiAgaWYgKCF1c2VyQ29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGFtYXpvbiBzMyB1cGxvYWRlciBjb25maWdcIilcclxuICB9XHJcbiAgY29uc3QgZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID0gZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKVxyXG4gIGxldCB1cmxQcmVmaXggPSB1c2VyQ29uZmlnLnVybFByZWZpeFxyXG4gIGlmICh1cmxQcmVmaXgpIHtcclxuICAgIHVybFByZWZpeCA9IHVybFByZWZpeC5yZXBsYWNlKC9cXC8/JC8sICcnKVxyXG4gICAgaWYgKHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzICYmICFkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpIHtcclxuICAgICAgdXJsUHJlZml4ICs9ICcvJyArIHVzZXJDb25maWcuYnVja2V0TmFtZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2xpZW50ID0gdXBsb2FkZXIuY3JlYXRlUzNDbGllbnQodXNlckNvbmZpZylcclxuICBjb25zdCBvdXRwdXQgPSBjdHgub3V0cHV0XHJcblxyXG4gIGNvbnN0IHRhc2tzID0gb3V0cHV0Lm1hcChhc3luYyAoaXRlbSwgaWR4KSA9PlxyXG4gICAgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XHJcbiAgICAgIGNsaWVudCxcclxuICAgICAgaW5kZXg6IGlkeCxcclxuICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxyXG4gICAgICBwYXRoOiBmb3JtYXRQYXRoKGl0ZW0sIHVzZXJDb25maWcudXBsb2FkUGF0aCksXHJcbiAgICAgIGl0ZW0sXHJcbiAgICAgIGFjbDogdXNlckNvbmZpZy5hY2wgfHwgJ3B1YmxpYy1yZWFkJyxcclxuICAgICAgdXJsUHJlZml4XHJcbiAgICB9KVxyXG4gIClcclxuXHJcbiAgbGV0IHJlc3VsdHM6IElVcGxvYWRSZXN1bHRbXVxyXG5cclxuICB0cnkge1xyXG4gICAgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHRhc2tzKVxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHgubG9nLmVycm9yKCfkuIrkvKDliLAgUzMg5a2Y5YKo5Y+R55Sf6ZSZ6K+v77yM6K+35qOA5p+l572R57uc6L+e5o6l5ZKM6YWN572u5piv5ZCm5q2j56GuJylcclxuICAgIGN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgY3R4LmVtaXQoJ25vdGlmaWNhdGlvbicsIHtcclxuICAgICAgdGl0bGU6ICdTMyDlrZjlgqjkuIrkvKDplJnor68nLFxyXG4gICAgICBib2R5OiAn6K+35qOA5p+l6YWN572u5piv5ZCm5q2j56GuJyxcclxuICAgICAgdGV4dDogJydcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgIGNvbnN0IHsgaW5kZXgsIHVybCwgaW1nVVJMIH0gPSByZXN1bHRcclxuICAgIGRlbGV0ZSBvdXRwdXRbaW5kZXhdLmJ1ZmZlclxyXG4gICAgZGVsZXRlIG91dHB1dFtpbmRleF0uYmFzZTY0SW1hZ2VcclxuICAgIG91dHB1dFtpbmRleF0uaW1nVXJsID0gaW1nVVJMXHJcbiAgICBvdXRwdXRbaW5kZXhdLnVybCA9IHVybFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IGRlZmF1bHRDb25maWc6IElBd3NTM1BMaXN0VXNlckNvbmZpZyA9IHtcclxuICAgIGFjY2Vzc0tleUlEOiAnJyxcclxuICAgIHNlY3JldEFjY2Vzc0tleTogJycsXHJcbiAgICBidWNrZXROYW1lOiAnJyxcclxuICAgIHVwbG9hZFBhdGg6ICd7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX0nLFxyXG4gICAgcGF0aFN0eWxlQWNjZXNzOiBmYWxzZSxcclxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICBhY2w6ICdwdWJsaWMtcmVhZCdcclxuICB9XHJcbiAgbGV0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBd3NTM1BMaXN0VXNlckNvbmZpZz4oJ3BpY0JlZC5hd3MtczMtcGxpc3QnKSB8fCB7fVxyXG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SUQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleUlELFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0QWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRBY2Nlc3NLZXksXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWScpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXROYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXROYW1lLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlZ2lvbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVnaW9uLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJveHksXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFknKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsUHJlZml4JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmxQcmVmaXgsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aFN0eWxlQWNjZXNzJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGhTdHlsZUFjY2VzcyB8fCBmYWxzZSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUycpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZWplY3RVbmF1dGhvcml6ZWQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVqZWN0VW5hdXRob3JpemVkIHx8IGZhbHNlLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjbCcsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2wgfHwgJ3B1YmxpYy1yZWFkJyxcclxuICAgICAgY2hvaWNlczogWydwcml2YXRlJywgJ3B1YmxpYy1yZWFkJywgJ3B1YmxpYy1yZWFkLXdyaXRlJywgJ2F1dGhlbnRpY2F0ZWQtcmVhZCcsICdhd3MtZXhlYy1yZWFkJywgJ2J1Y2tldC1vd25lci1yZWFkJywgJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnXSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGRlZmF1bHQ6IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkgfHwgZmFsc2UsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYXdzLXMzLXBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1QnKVxyXG4gICAgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJUGljR28sIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgc21tc1VwbG9hZGVyIGZyb20gJy4vc21tcydcclxuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcclxuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xyXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xyXG5pbXBvcnQgaW1ndXJVcGxvYWRlciBmcm9tICcuL2ltZ3VyJ1xyXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXHJcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXHJcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xyXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xyXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcclxuaW1wb3J0IHRlbGVncmFwaFVwbG9hZGVyIGZyb20gJy4vdGVsZWdyYXBoJ1xyXG5pbXBvcnQgcGljbGlzdFVwbG9hZGVyIGZyb20gJy4vcGljbGlzdCdcclxuaW1wb3J0IGxza3lVcGxvYWRlciBmcm9tICcuL2xza3knXHJcbmltcG9ydCBhd3NzM3BsaXN0VXBsb2FkZXIgZnJvbSAnLi9hd3NzM3BsaXN0J1xyXG5cclxuY29uc3QgYnVpbGRJblVwbG9hZGVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICByZWdpc3RlciAoY3R4OiBJUGljR28pIHtcclxuICAgICAgYWxpWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxyXG4gICAgICBnaXRodWJVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcclxuICAgICAgbHNreVVwbG9hZGVyKGN0eClcclxuICAgICAgcGljbGlzdFVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIHNmdHBVcGxvYWRlcihjdHgpXHJcbiAgICAgIHNtbXNVcGxvYWRlcihjdHgpXHJcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICB0ZWxlZ3JhcGhVcGxvYWRlcihjdHgpXHJcbiAgICAgIHVwWXVuVXBsb2FkZXIoY3R4KVxyXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5VcGxvYWRlcnNcclxuIiwiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5cclxuaW1wb3J0IHtcclxuICBpc1VybCxcclxuICBnZXRJbWFnZVNpemUsXHJcbiAgZ2V0RlNGaWxlLFxyXG4gIGdldFVSTEZpbGVcclxufSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSUltZ0luZm8sIElJbWdTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdHM6IElJbWdJbmZvW10gPSBjdHgub3V0cHV0XHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwoY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcclxuICAgICAgaW5mbyA9IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGJ1ZmZlcjogaXRlbSxcclxuICAgICAgICBmaWxlTmFtZTogJycsXHJcbiAgICAgICAgZXh0bmFtZTogJydcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXHJcbiAgICB9XHJcbiAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXHJcbiAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xyXG4gICAgICByZXN1bHRzW2luZGV4XSA9IHtcclxuICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxyXG4gICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX1gLFxyXG4gICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcgfCBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjdHgubG9nLndhcm4oYGNhbid0IGdldCAke3BhdGh9J3MgaW1hZ2Ugc2l6ZWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ2NhblxcJ3QgZ2V0IGltYWdlIHNpemUnKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBDTElQQk9BUkRfSU1BR0VfRk9MREVSID0gJ3BpY2xpc3QtY2xpcGJvYXJkLWltYWdlcydcclxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCBvcyBmcm9tICdvcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgaXNXc2wgZnJvbSAnaXMtd3NsJ1xyXG5pbXBvcnQgdHlwZSB7IElQaWNHbywgSUNsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXHJcbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xyXG5pbXBvcnQgd2luZG93c0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzLnBzMSdcclxuaW1wb3J0IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93aW5kb3dzMTAucHMxJ1xyXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXHJcbmltcG9ydCB3c2xDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd3NsLnNoJ1xyXG5pbXBvcnQgeyBDTElQQk9BUkRfSU1BR0VfRk9MREVSIH0gZnJvbSAnLi9zdGF0aWMnXHJcblxyXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcclxuXHJcbmNvbnN0IGdldEN1cnJlbnRQbGF0Zm9ybSA9ICgpOiBQbGF0Zm9ybSA9PiB7XHJcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXHJcbiAgaWYgKGlzV3NsKSB7XHJcbiAgICByZXR1cm4gJ3dzbCdcclxuICB9XHJcbiAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICBjb25zdCBjdXJyZW50T1MgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXVxyXG4gICAgaWYgKGN1cnJlbnRPUyA9PT0gJzEwJykge1xyXG4gICAgICByZXR1cm4gJ3dpbjEwJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd3aW4zMidcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgcmV0dXJuICdkYXJ3aW4nXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAnbGludXgnXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjMyOiB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdpbjEwOiB3aW5kb3dzMTBDbGlwYm9hcmRTY3JpcHQsXHJcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxyXG4gIHdzbDogd3NsQ2xpcGJvYXJkU2NyaXB0XHJcbn1cclxuLyoqXHJcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcclxuICogc28gd2Ugc2hvdWxkIGtlZXAgdGhlIGV4dGVuc2lvbiBuYW1lIGNvbnNpc3RlbnQgd2l0aCBjb3JyZXNwb25kaW5nIHNoZWxsXHJcbiAqL1xyXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xyXG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcclxufSA9IHtcclxuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxyXG4gIHdpbjMyOiAnd2luZG93cy5wczEnLFxyXG4gIHdpbjEwOiAnd2luZG93czEwLnBzMScsXHJcbiAgbGludXg6ICdsaW51eC5zaCcsXHJcbiAgd3NsOiAnd3NsLnNoJ1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbWFnZUZvbGRlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjb25zdCBpbWFnZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIENMSVBCT0FSRF9JTUFHRV9GT0xERVIpXHJcbiAgZnMuZW5zdXJlRGlyU3luYyhpbWFnZVBhdGgpXHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50UGxhdGZvcm0oKVxyXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxyXG4gICAgLy8gSWYgdGhlIHNjcmlwdCBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGhlIHNjcmlwdCBmaWxlXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2NyaXB0UGF0aCkpIHtcclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcclxuICAgICAgICBzY3JpcHRQYXRoLFxyXG4gICAgICAgIHBsYXRmb3JtMlNjcmlwdENvbnRlbnRbcGxhdGZvcm1dLFxyXG4gICAgICAgICd1dGY4J1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBsZXQgZXhlY3V0aW9uXHJcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdvc2FzY3JpcHQnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3Bvd2Vyc2hlbGwnLCBbXHJcbiAgICAgICAgJy1ub3Byb2ZpbGUnLFxyXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxyXG4gICAgICAgICctbm9sb2dvJyxcclxuICAgICAgICAnLXN0YScsXHJcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLCAndW5yZXN0cmljdGVkJyxcclxuICAgICAgICAvLyBmaXggd2luZG93cyAxMCBuYXRpdmUgY21kIGNyYXNoIGJ1ZyB3aGVuIFwicGljZ28gdXBsb2FkXCJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUGljR28vUGljR28tQ29yZS9pc3N1ZXMvMzJcclxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcclxuICAgICAgICAvLyAnLW5vZXhpdCcsXHJcbiAgICAgICAgJy1maWxlJywgc2NyaXB0UGF0aCxcclxuICAgICAgICBpbWFnZVBhdGhcclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xyXG4gICAgICAgIGlmIChkYXRhLnRvU3RyaW5nKCkudHJpbSgpID09PSAnbm8geGNsaXAgb3Igd2wtY2xpcGJvYXJkJykge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6ICd4Y2xpcCBvciB3bC1jbGlwYm9hcmQgbm90IGZvdW5kJyxcclxuICAgICAgICAgICAgYm9keTogJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbydcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGltZ1BhdGggPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXHJcblxyXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cclxuICAgICAgLy8gd2Ugc2hvdWxkIGtlZXAgaXQgaW5zdGVhZCBvZiByZW1vdmluZ1xyXG4gICAgICBsZXQgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gZmFsc2VcclxuXHJcbiAgICAgIC8vIGluIG1hY09TIGlmIHlvdXIgY29weSB0aGUgZmlsZSBpbiBzeXN0ZW0sIGl0J3MgYmFzZW5hbWUgd2lsbCBub3QgZXF1YWwgdG8gb3VyIGRlZmF1bHQgYmFzZW5hbWVcclxuICAgICAgaWYgKHBhdGguYmFzZW5hbWUoaW1nUGF0aCkgIT09IHBhdGguYmFzZW5hbWUoaW1hZ2VQYXRoKSkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xyXG4gICAgICAgIC8vIGJ1dCB0aGUgcGF0aCBleGlzdHMsIHdlIHNob3VsZCBrZWVwIGl0XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxyXG4gICAgICBpZiAoaW1nUGF0aCAhPT0gJ25vIGltYWdlJyAmJiAhZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBDYW4ndCBmaW5kICR7aW1nUGF0aH1gKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgaW1nUGF0aCxcclxuICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmdcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2V0Q2xpcGJvYXJkSW1hZ2VcclxuIiwiaW1wb3J0IHR5cGUgeyBJQ29uZmlnLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSlNPTlN0b3JlIH0gZnJvbSAnQHBpY2dvL3N0b3JlJ1xyXG5pbXBvcnQgdHlwZSB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXHJcblxyXG5jbGFzcyBEQiB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGI6IEpTT05TdG9yZVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXHJcblxyXG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljQmVkJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiLnNldCgncGljQmVkJywge1xyXG4gICAgICAgICAgdXBsb2FkZXI6ICdzbW1zJyxcclxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJyxcclxuICAgICAgICAgIHNtbXM6IHtcclxuICAgICAgICAgICAgdG9rZW46ICcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgdGhpcy5kYi5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIGhhcyAoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuaGFzKGtleSlcclxuICB9XHJcblxyXG4gIHVuc2V0IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZyAoY29uZmlnOiBQYXJ0aWFsPElDb25maWc+KTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnNldChuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uZmlnIChjb25maWc6IElDb25maWcpOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERCXHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLDkuIrkvKAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6K6+5a6a6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrpphY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWummFjY2Vzc0tleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICforr7lrprmjqXlhaXngrknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6K6+5a6a55u45YaM5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5iUFQSeaOpeWFpeeCuScsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6K6+5a6a6L+H5pyf5pe26Ze0KOenkiknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxyXG5cclxuICAvLyB3ZWJkYXZwbGlzdFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICforr7lrprmjqXlj6PnvZHlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHlnYDot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PTEyMzQ1NicsXHJcblxyXG4gIC8vIHNmdHBwbGlzdFxyXG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6K6+5a6a56eB6ZKlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6K6+5a6a5paH5Lu255So5oi3Oue7hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICforr7lrprmlofku7bmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5jorqQyMicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6L6T5YWl56eB6ZKl5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXHJcblxyXG4gIC8vIFBpY0xpc3RcclxuICBQSUNCRURfUElDTElTVDogJ1BpY0xpc3QnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BJQ0JFRDogJ+iuvuWumuWbvuW6iicsXHJcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+iuvuWumumFjee9ruWQjScsXHJcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcclxuXHJcbiAgLy8gTHNreSBQcm9cclxuICBQSUNCRURfTFNLWV9QTElTVDogJ0xza3knLFxyXG4gIFBJQ0JFRF9MU0tZX1ZFUlNJT046ICforr7lrprniYjmnKwnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ+S+i+WmglYxJyxcclxuICBQSUNCRURfTFNLWV9IT1NUOiAn6K6+5a6a5Li75py6JyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICforr7lrprnrZbnlaVJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+Wmgu+8mjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6K6+5a6a55u45YaMSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfpgInloavvvIxWMueJiOacrOmZkOWumicsXHJcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+iuvuWumuadg+mZkCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn5L6L5aaC77yacHVibGljJyxcclxuXHJcbiAgLy8gQXdzUzNQbGlzdFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+iuvuWumkFjY2Vzc0tleUlkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6K6+5a6aU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+iuvuWumlJlZ2lvbicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYnoioLngrknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+WQr+eUqHMzRm9yY2VQYXRoU3R5bGUnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+aLkue7neaXoOaViFRMU+ivgeS5pui/nuaOpScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6K6+5a6a5LiK5Lyg6LWE5rqQ55qE6K6/6Zeu562W55WlJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICflvIDlkK8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pe277yM5piv5ZCm6KaB56aB55So5pyA57uI55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3nvIAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICfkvovlpoLvvJpBS0lBeHh4eHh4eHh4eHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaC77yaeHh4eHh4eHh4eCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ+mcgOimgeaXtuWQr+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHml7blkK/nlKgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pe25ZCv55SoJyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICforr7lrprmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+ivt+mAieaLqeawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6K6+5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+iuvuWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6K+36L6T5YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICforr7lrprmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfor7fovpPlhaXmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iuvuWumuawtOWNsOebuOWvueS6juWbvueJh+eahOavlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iuvuWumuawtOWNsOWtl+S9k+minOiJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfor7fovpPlhaVyZ2LpopzoibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iuvuWumuawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfor7fovpPlhaXmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K6+5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K+36YCJ5oup5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6K6+5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMC0xMDDnmoTmlbTmlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6L+b6KGM5qC85byP6L2s5o2iJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6K+36YCJ5oup6L2s5o2i5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICforr7lrprnvKnmlL7lrr3luqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovazlm77niYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTE9QOiAn5piv5ZCm5rC05bmz57+76L2s5Zu+54mHJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovazml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbkv6Hmga8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo4XlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi9veWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxyXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgdHlwZSBJTG9jYWxlc0tleSwgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IHR5cGUgSVN0cmluZ0tleU1hcCwgdHlwZSBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXHJcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICfoqK3lrpphY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5qW15pm65aOT57iuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+mWi+WVkycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ+WclueJh+alteaZuuWjk+e4ru+8jOips+aDheiri+WPg+iAg1vmlofmqpToqqrmmI5dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+ioreWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICfoqK3lrprliIbmlK/lkI3nqLEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6Kit5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+ioreWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6Kit5a6a55u457C/5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICfoqK3lrprmk43kvZzlk6EnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+ioreWumuaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICfoqK3lrprliqDpgJ/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICfoqK3lrprpgY7mnJ/mmYLplpMo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFOiAn6Kit5a6a6KqN6K2J5pa55byPJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICfoqK3lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+ioreWumuengemRsCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+ioreWumuaWh+S7tueUqOaItjrntYQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6Kit5a6a5paH5Lu25qyK6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6KqNMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i8uOWFpeengemRsOWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxyXG5cclxuICAvLyBQaWNMaXN0XHJcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcclxuICBQSUNCRURfUElDTElTVF9IT1NUOiAn6Kit5a6a5Li75qmfJyxcclxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcclxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICfoqK3lrprlnJbluoonLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICfoqK3lrprphY3nva7lkI0nLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXHJcblxyXG4gIC8vIExza3kgUHJvXHJcbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcclxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICfoq4vpgbjmk4fniYjmnKwnLFxyXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxyXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXHJcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICfoqK3lrprnrZbnlaVJRCcsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ+S+i+WmgjEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6Kit5a6a55u45YaKSUQnLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfkvovlpoIxJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6Kit5a6a5LiK5YKz5qyK6ZmQJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfoq4vpgbjmk4fkuIrlgrPmrIrpmZAnLFxyXG5cclxuICAvLyBBd3NTM1BsaXN0XHJcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6Kit5a6aQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICfoqK3lrppTZWNyZXRBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6Kit5a6aUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+ioreWumuiHquWumue+qeevgOm7nicsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICfoqK3lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+ioreWumuiHquWumue+qee2suWdgCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfplovllZ8gYHJlamVjdFVuYXV0aG9yaXplZGAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDTDogJ+ioreWumkFDTCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgIOaZgu+8jOaYr+WQpuimgeemgeeUqOacgOe1gueUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57a0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfU0VDUkVUX0FDQ0VTU0tFWTogJ+S+i+Wmgu+8mnh4eHh4eHh4eHgnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pmC5ZWf55SoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICfkvovlpoLvvJpwdWJsaWMtcmVhZCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHmmYLllZ/nlKgnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+ioreWumuawtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6Kit5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+ioreWumuawtOWNsOWtl+mrlCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+iri+i8uOWFpeawtOWNsOWtl+mrlOaWh+S7tui3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iri+i8uOWFpTAtMeeahOaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6Kit5a6a5rC05Y2w5a2X6auU6aGP6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6Kit5a6a5rC05Y2w5ZyW54mH6Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iri+i8uOWFpeawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfoq4vpgbjmk4fmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICfoqK3lrprph43lkb3lkI3moLzlvI8nLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfoq4vovLjlhaUwLTEwMOeahOaVtOaVuCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbpgLLooYzmoLzlvI/ovYnmj5snLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+ioreWumui9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfoq4vpgbjmk4fovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+ioreWumue4ruaUvuWvrOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+ioreWumue4ruaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ+aYr+WQpuWeguebtOe/u+i9ieWclueJhycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbpgLLooYzlnJbniYfml4vovYknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9ieaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfoq4vovLjlhaXmlbjlrZfvvIzlj6/ngrrosqDmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuizh+ioiicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijneWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijneWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovInmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246LyJ5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBhY2Nlc3NLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICdTZXQgSW1hZ2VTbGltJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAnSW1hZ2UgZXh0cmVtZWx5IGludGVsbGlnZW50IGNvbXByZXNzaW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFtkb2N1bWVudCBkZXNjcmlwdGlvbl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ0NMT1NFJyxcclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIHRlbGVncmFwaFxyXG4gIFBJQ0JFRF9URUxFR1JBUEg6ICdUZWxlZ3JhcGgnLFxyXG5cclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICdTZXQgQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ1NldCBBY2Nlc3MgVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ1NldCBBbGJ1bSBOYW1lJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCBhcyBhbm9ueW1vdXMnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICdFeC4gdGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAnU2V0IE9wZXJhdG9yJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICdTZXQgT3BlcmF0b3IgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICdTZXQgVVJMJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ1NldCBBbnRpLUxlZWNoIFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICdTZXQgRXhwaXJlIFRpbWUoc2Vjb25kcyknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAnRXguIG1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ1BsZWFzZSB0eXBlIHRoZSBvcGVyYXRvciBwYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICdFeC4gIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICdTZXQgQXV0aCBUeXBlJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TOiAnRXguID9rZXk9dmFsdWUnLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAnU0ZUUCBCdWlsZGluJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAnU2V0IFBvcnQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ1NldCBQcml2YXRlIEtleScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdTZXQgUHJpdmF0ZSBLZXkgUGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ1NldCBXZWJzaXRlIFBhdGgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAnU2V0IEZpbGUgVXNlcjpHcm91cCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICdTZXQgRmlsZSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAnU2V0IERpcmVjdG9yeSBNb2RlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiAxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ0RlZmF1bHQgMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAnRXguIC9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdQbGVhc2UgdHlwZSB0aGUgcHJpdmF0ZSBrZXkgcGFzc3BocmFzZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICdFeC4gd3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICdFeC4gMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAnRXguIDA3NzUnLFxyXG5cclxuICAvLyBQaWNMaXN0XHJcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcclxuICBQSUNCRURfUElDTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICdTZXQgUG9ydCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAnU2V0IFBpY0JlZCcsXHJcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ1NldCBDb25maWcgTmFtZScsXHJcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAnU2V0IEtleScsXHJcblxyXG4gIC8vIExza3kgUHJvXHJcbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcclxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAnU2V0IFZlcnNpb24nLFxyXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ0V4LiB2MScsXHJcbiAgUElDQkVEX0xTS1lfSE9TVDogJ1NldCBIb3N0JyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9sc2t5LmNvJyxcclxuICBQSUNCRURfTFNLWV9UT0tFTjogJ1NldCBUb2tlbicsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ0V4LiB4eHgnLFxyXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAnU2V0IFN0cmF0ZWd5IElEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAnRXguIDEnLFxyXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAnU2V0IEFsYnVtIElEJyxcclxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAnT3B0aW9uYWwsIG9ubHkgZm9yIFYyJyxcclxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAnU2V0IFBlcm1pc3NvbicsXHJcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAnRXguIHB1YmxpYycsXHJcblxyXG4gIC8vIEF3c1MzUGxpc3RcclxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICdTZXQgQWNjZXNzS2V5SWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICdTZXQgU2VjcmV0QWNjZXNzS2V5JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICdTZXQgUmVnaW9uJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ1NldCBFbmRwb2ludCcsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICdTZXQgUHJveHknLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICdTZXQgUGF0aFN0eWxlQWNjZXNzJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdTZXQgUmVqZWN0VW5hdXRob3JpemVkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICdTZXQgQUNMJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICd3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQsIHdoZXRoZXIgdG8gZGlzYWJsZSBhZGRpbmcgYnVja2V0IHByZWZpeCB0byB1cmwnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQ6ICdFeC4geHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICdFeC4geHh4JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVDogJ0V4LiB0ZXN0JyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ0V4LiB1cy1lYXN0LTEnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0L3tmdWxsTmFtZX0nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXHJcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ0V4LiBodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAnRW5hYmxlIHdoZW4gYHBhdGhTdHlsZUFjY2Vzc2AgaXMgcmVxdWlyZWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEOiAnRW5hYmxlIHdoZW4gcmVqZWN0aW5nIGludmFsaWQgVExTIGNlcnRpZmljYXRlIGNvbm5lY3Rpb24gaXMgcmVxdWlyZWQnLFxyXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAnRXguIHB1YmxpYy1yZWFkJyxcclxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIGVuYWJsZWQnLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICdTZXQgcmVuYW1lIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAnRW5hYmxlIHJlbmFtZScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdXaGV0aGVyIHRvIHVzZSBmdWxsLXNjcmVlbiB3YXRlcm1hcmsnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICdTZXQgd2F0ZXJtYXJrIGZvbnQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICdQbGVhc2UgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAwLTEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAnU2V0IHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ1BsZWFzZSBzZWxlY3Qgd2F0ZXJtYXJrIHBvc2l0aW9uJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAnUGxlYXNlIGVudGVyIGFuIGludGVnZXIgYmV0d2VlbiAwLTEwMCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICdXaGV0aGVyIHRvIHBlcmZvcm0gZm9ybWF0IGNvbnZlcnNpb24nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAnU2V0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ1BsZWFzZSBzZWxlY3QgY29udmVyc2lvbiBmb3JtYXQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ0VuYWJsZSB3aGVuIGltYWdlIHJlc2l6aW5nIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAnU2V0IHJlc2l6aW5nIHdpZHRoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAnU2V0IHJlc2l6aW5nIGhlaWdodCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ1BsZWFzZSBlbnRlciBhIG51bWJlcicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICdFbmFibGUgd2hlbiByZXNpemluZyBieSBwZXJjZW50YWdlIGlzIHJlcXVpcmVkJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxJUDogJ1doZXRoZXIgdG8gZmxpcCB0aGUgaW1hZ2UgdmVydGljYWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgZ2V0LCBzZXQsIHVuc2V0IH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBQbHVnaW5IYW5kbGVyIGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xyXG5cclxuaW1wb3J0IExpZmVjeWNsZSBmcm9tICcuL0xpZmVjeWNsZSdcclxuXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5cclxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xyXG5cclxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQsIElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcblxyXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXHJcblxyXG5pbXBvcnQgdHlwZSB7IElIZWxwZXIsIElJbWdJbmZvLCBJQ29uZmlnLCBJUGljR28sIElTdHJpbmdLZXlNYXAsIElQbHVnaW5Mb2FkZXIsIElJMThuTWFuYWdlciwgSVBpY0dvUGx1Z2luLCBJUGljR29QbHVnaW5JbnRlcmZhY2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xyXG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcclxuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxyXG4gIHByaXZhdGUgZGIhOiBEQlxyXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xyXG4gIGJhc2VEaXIhOiBzdHJpbmdcclxuICBoZWxwZXIhOiBJSGVscGVyXHJcbiAgbG9nOiBMb2dnZXJcclxuICBjbWQ6IENvbW1hbmRlclxyXG4gIG91dHB1dDogSUltZ0luZm9bXVxyXG4gIGlucHV0OiBhbnlbXVxyXG4gIHJhd0lucHV0OiBhbnlbXVxyXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xyXG4gICAqXHJcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxyXG4gICAqL1xyXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XHJcbiAgaTE4biE6IElJMThuTWFuYWdlclxyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cclxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xyXG5cclxuICBnZXQgcGx1Z2luTG9hZGVyICgpOiBJUGx1Z2luTG9hZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yIChjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxyXG4gICAgdGhpcy5pbnB1dCA9IFtdXHJcbiAgICB0aGlzLnJhd0lucHV0ID0gW11cclxuICAgIHRoaXMub3V0cHV0ID0gW11cclxuICAgIHRoaXMuaGVscGVyID0ge1xyXG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXHJcbiAgICAgIHVwbG9hZGVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndXBsb2FkZXInKSxcclxuICAgICAgYmVmb3JlVHJhbnNmb3JtUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVRyYW5zZm9ybVBsdWdpbnMnKSxcclxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcclxuICAgICAgYWZ0ZXJVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYWZ0ZXJVcGxvYWRQbHVnaW5zJylcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxyXG4gICAgdGhpcy5sb2cgPSBuZXcgTG9nZ2VyKHRoaXMpXHJcbiAgICB0aGlzLmNtZCA9IG5ldyBDb21tYW5kZXIodGhpcylcclxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXHJcbiAgICB0aGlzLmluaXRDb25maWcoKVxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ1BhdGggKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWdQYXRoID0gdGhpcy5jb25maWdQYXRoIHx8IHBhdGguam9pbihob21lZGlyKCksICcucGljbGlzdC9jb25maWcuanNvbicpXHJcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSAnJ1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXHJcbiAgICB9XHJcbiAgICB0aGlzLmJhc2VEaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpKSB7XHJcbiAgICAgIGZzLmVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGIgPSBuZXcgREIodGhpcylcclxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcclxuICAgICAgdGhpcy5pMThuID0gbmV3IEkxOG5NYW5hZ2VyKHRoaXMpXHJcbiAgICAgIHRoaXMuUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHRoaXMpXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcclxuICAgICAgLy8gbG9hZCBzZWxmIHBsdWdpbnNcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJ3BpY2dvJylcclxuICAgICAgdXBsb2FkZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHRyYW5zZm9ybWVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgnJylcclxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlci5sb2FkKClcclxuICAgICAgdGhpcy5saWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKHRoaXMpXHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoZSlcclxuICAgICAgdGhyb3cgZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZWFzaWx5IG1hbm51YWxseSBsb2FkIGEgcGx1Z2luXHJcbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxyXG4gICAqIG9yIGp1c3QgaW5zdGFudGlhdGUgYSBwbHVnaW5cclxuICAgKi9cclxuICB1c2UgKHBsdWdpbjogSVBpY0dvUGx1Z2luLCBuYW1lPzogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHtcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbilcclxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSFcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gcGx1Z2luKHRoaXMpXHJcbiAgICAgIHJldHVybiBwbHVnaW5JbnN0YW5jZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoICE9PSAnJykge1xyXG4gICAgICB0aGlzLmNtZC5pbml0KClcclxuICAgICAgdGhpcy5jbWQubG9hZENvbW1hbmRzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZzxUPiAobmFtZT86IHN0cmluZyk6IFQge1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXHJcbiAgICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgdW5rbm93biBhcyBUXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0KHRoaXMuX2NvbmZpZywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnKVxyXG4gICAgdGhpcy5kYi5zYXZlQ29uZmlnKGNvbmZpZylcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHJlbW92ZWRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudW5zZXRDb25maWcoa2V5LCBwcm9wTmFtZSlcclxuICAgIHRoaXMuZGIudW5zZXQoa2V5LCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChuYW1lKSkge1xyXG4gICAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtuYW1lfSBjYW4ndCBiZSBtb2RpZmllZGApXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxyXG4gICAgICAgIGRlbGV0ZSBjb25maWdbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICAgIGV2ZW50QnVzLmVtaXQoSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIHtcclxuICAgICAgICBjb25maWdOYW1lOiBuYW1lLFxyXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1bnNldENvbmZpZyAoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICgha2V5IHx8ICFwcm9wTmFtZSkgcmV0dXJuXHJcbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHVuc2V0YClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB1bnNldCh0aGlzLmdldENvbmZpZyhrZXkpLCBwcm9wTmFtZSlcclxuICB9XHJcblxyXG4gIGdldCByZXF1ZXN0ICgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcclxuICAgIHJldHVybiB0aGlzLlJlcXVlc3QucmVxdWVzdC5iaW5kKHRoaXMuUmVxdWVzdClcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZCAoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmxvZy5lcnJvcignTm8gY29uZmlnIGZpbGUgZm91bmQsIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZyBmaWxlIHBhdGgnKVxyXG4gICAgICByZXR1cm4gW11cclxuICAgIH1cclxuICAgIC8vIHVwbG9hZCBmcm9tIGNsaXBib2FyZFxyXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXHJcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1nUGF0aCA9PT0gJ25vIGltYWdlJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBub3QgZm91bmQgaW4gY2xpcGJvYXJkJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRkFJTEVELCBjbGVhbnVwKVxyXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGNsZWFudXApXHJcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxyXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHVwbG9hZCBmcm9tIHBhdGhcclxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcclxuaW1wb3J0IEltZ0Zyb21CYXNlNjQgZnJvbSAnLi9iYXNlNjQnXHJcblxyXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzOiBJUGljR29QbHVnaW4gPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlZ2lzdGVyIChjdHg6IElQaWNHbykge1xyXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ2Jhc2U2NCcsIEltZ0Zyb21CYXNlNjQpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXHJcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb21tYW5kIiwiY21kIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJhY3Rpb24iLCJvcHRpb25zIiwicHJvZ3JhbSIsInByb3h5Iiwib3B0aW9uIiwicmVnaXN0cnkiLCJwbHVnaW5IYW5kbGVyIiwiaGFuZGxlIiwiY3R4IiwicGx1Z2lucyIsImluc3RhbGwiLCJjYXRjaCIsImUiLCJsb2ciLCJlcnJvciIsInVuaW5zdGFsbCIsInVwZGF0ZSIsImNvbmZpZyIsInJhbmRvbVN0cmluZ0dlbmVyYXRvciIsImxlbmd0aCIsImNoYXJzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiam9pbiIsImZvcm1hdEhlbHBlciIsIm51bSIsInRvU3RyaW5nIiwiZ2V0TWQ1IiwiaW5wdXQiLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwiZGlnZXN0IiwicmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIiwib2xkTmFtZSIsImN1c3RvbUZvcm1hdCIsImFmZml4RmlsZU5hbWUiLCJmaWxlQnVmZmVyIiwibm93IiwiRGF0ZSIsInllYXIiLCJnZXRGdWxsWWVhciIsImZpbGViYXNlbmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJjb252ZXJzaW9uTWFwIiwic2xpY2UiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwicGFkU3RhcnQiLCJ1dWlkdjQiLCJyZXBsYWNlIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiaXRlbSIsImluY2x1ZGVzIiwiZXh0IiwibmV3TmFtZSIsInJlZHVjZSIsImFjYyIsImN1ciIsIlJlZ0V4cCIsIl8iLCJncm91cDEiLCJwYXJzZUludCIsIl9yZXN1bHQiLCJrZXkiLCJjb3VudCIsIm1heCIsImRpcm5hbWUiLCJzcGxpdCIsInNlcCIsImEiLCJiIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ0eXBlIiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsImJ1ZmZlciIsImZzIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwiX2EiLCJyZWFzb24iLCJnZXRVUkxGaWxlIiwidGltZW91dElkIiwicmVxdWVzdEZuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXMiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJ1cmxQYXRoIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJnZXRQbHVnaW5OYW1lVHlwZSIsIm5hbWUiLCJpc1NpbXBsZU5hbWUiLCJuYW1lT3JQYXRoIiwiaXNBYnNvbHV0ZSIsInBsdWdpblBhdGgiLCJwcm9jZXNzIiwiY3dkIiwiZXhpc3RzU3luYyIsImhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSIsInNjb3BlIiwiZ2V0UHJvY2Vzc1BsdWdpbk5hbWUiLCJsb2dnZXIiLCJjb25zb2xlIiwiaGFuZGxlVW5peFN0eWxlUGF0aCIsIndhcm4iLCJnZXROb3JtYWxQbHVnaW5OYW1lIiwicmVtb3ZlUGx1Z2luVmVyc2lvbiIsInBhY2thZ2VKU09OUGF0aCIsInBvc2l4IiwicGtnIiwicmVhZEpTT05TeW5jIiwicGF0aFN0ciIsInJlZyIsIm1hdGNoQXJyIiwibWF0Y2giLCJjb25maWdCbGFja0xpc3QiLCJpc0NvbmZpZ0tleUluQmxhY2tMaXN0IiwiYmxhY2tJdGVtIiwiaXNJbnB1dENvbmZpZ1ZhbGlkIiwiaXNBcnJheSIsInNhZmVQYXJzZSIsInN0ciIsIkpTT04iLCJwYXJzZSIsImZvcmNlTnVtYmVyIiwiaXNOYU4iLCJOdW1iZXIiLCJpc0RldiIsImVudiIsIk5PREVfRU5WIiwiZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aCIsIl9fZGlybmFtZSIsIkFkZFdhdGVybWFyayIsImltZyIsIndhdGVybWFya1R5cGUiLCJkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgiLCJpc0Z1bGxTY3JlZW5XYXRlcm1hcmsiLCJ3YXRlcm1hcmtEZWdyZWUiLCJ0ZXh0Iiwid2F0ZXJtYXJrRm9udFBhdGgiLCJ3YXRlcm1hcmtTY2FsZVJhdGlvIiwid2F0ZXJtYXJrQ29sb3IiLCJ3YXRlcm1hcmtJbWFnZVBhdGgiLCJwb3NpdGlvbiIsImltYWdlIiwic2hhcnAiLCJhbmltYXRlZCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiZ3Jhdml0eSIsInRpbGUiLCJ2YWxpZFBhcmFtIiwicGFyYW1zIiwiZXZlcnkiLCJwYXJhbSIsImF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0IiwidmFsaWRPdXRwdXRGb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUV4dExpc3QiLCJpbWFnZUFkZFdhdGVyTWFyayIsIndhdGVybWFya1RleHQiLCJ3YXRlcm1hcmtQb3NpdGlvbiIsImZvcm1hdE9wdGlvbnMiLCJmb3JtYXRDb252ZXJ0T2JqIiwicXVhbGl0eSIsImlzQ29udmVydCIsImNvbnZlcnRGb3JtYXQiLCJpc1JlU2l6ZSIsInJlU2l6ZUhlaWdodCIsInJlU2l6ZVdpZHRoIiwic2tpcFJlU2l6ZU9mU21hbGxJbWciLCJpc1JlU2l6ZUJ5UGVyY2VudCIsInJlU2l6ZVBlcmNlbnQiLCJpc1JvdGF0ZSIsImlzRmxpcCIsImlzRmxvcCIsInJvdGF0ZURlZ3JlZSIsInBpY0JlZCIsImltYWdlUHJvY2VzcyIsInJhd0Zvcm1hdCIsInRvTG93ZXJDYXNlIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0Iiwicm91bmQiLCJzY2FsZVJhdGlvIiwiZmxpcCIsImZsb3AiLCJuZXdGb3JtYXQiLCJnZXRDb252ZXJ0ZWRGb3JtYXQiLCJ0b0Zvcm1hdCIsIm1vempwZWciLCJpbWFnZUZvcm1hdExpc3QiLCJuZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsIm5lZWRDb21wcmVzcyIsImNvbXByZXNzT3B0aW9ucyIsIm5vcm1hbGl6ZWRFeHQiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwiZmlsdGVyIiwiZXhpc3QiLCJjb21wcmVzcyIsInVzZXJDb25maWciLCJnZXRDb25maWciLCJwcmVmaXgiLCJpMThuIiwidHJhbnNsYXRlIiwicmVxdWlyZWQiLCJkZWZhdWx0IiwiY2hvaWNlcyIsImlzUmVtb3ZlRXhpZiIsInJlbmFtZSIsImVuYWJsZSIsImhhbmRsZUNvbmZpZyIsInByb21wdHMiLCJtb2R1bGUiLCJhbnN3ZXIiLCJpbnF1aXJlciIsInByb21wdCIsImNvbmZpZ05hbWUiLCJzYXZlQ29uZmlnIiwic2V0dGluZyIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsIl9iIiwicGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJ1cGxvYWRlciIsInRyYW5zZm9ybWVyIiwicHVzaCIsImZvckVhY2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZmlsZXMiLCJyZW5kZXIiLCJ3cml0ZUZpbGVUcmVlIiwiZGVzdCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXNzYWdlIiwiZXhwIiwiZm4iLCJGdW5jdGlvbiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwicmVhZEZpbGVTeW5jIiwiY29udGVudCIsImVqcyIsImlzQnVmZmVyIiwiZGlyIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJydW4iLCJvZmZsaW5lIiwidGVtcGxhdGUiLCJoYXNTbGFzaCIsImRvd25sb2FkQW5kR2VuZXJhdGUiLCJybSIsInN5bmMiLCJkb3dubG9hZCIsImNsb25lIiwiZXJyIiwiaW5pdCIsInByb2plY3QiLCJpblBsYWNlIiwiaG9tZWRpciIsIm9rIiwib24iLCJjaGFsayIsImdyYXkiLCJsYW5nIiwibGlzdCIsImdldExhbmd1YWdlTGlzdCIsInNldExhbmd1YWdlIiwiTGlmZWN5Y2xlUGx1Z2lucyIsImNvbnN0cnVjdG9yIiwidGhpcyIsIk1hcCIsInBsdWdpbklkTWFwIiwicmVnaXN0ZXIiLCJpZCIsIlR5cGVFcnJvciIsImhhcyIsInNldCIsImN1cnJlbnRQbHVnaW4iLCJ1bnJlZ2lzdGVyIiwicGx1Z2luTmFtZSIsInBsdWdpbkxpc3QiLCJkZWxldGUiLCJnZXROYW1lIiwiZ2V0TGlzdCIsInZhbHVlcyIsInNldEN1cnJlbnRQbHVnaW5OYW1lIiwiQ29tbWFuZGVyIiwiQ29tbWFuZCIsInZlcnNpb24iLCJkZWJ1ZyIsInNpbGVudCIsImFyZ3MiLCJleGl0IiwiY3VycmVudFBsdWdpbk5hbWUiLCJsb2FkQ29tbWFuZHMiLCJJTG9nVHlwZSIsIklCdWlsZEluRXZlbnQiLCJJQnVzRXZlbnQiLCJMb2dnZXIiLCJsZXZlbCIsImhhbmRsZUxvZyIsIm1zZyIsImxvZ0xldmVsIiwiY2hlY2tMb2dMZXZlbCIsImxvZ0hlYWRlciIsInRvVXBwZXJDYXNlIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsImxvZ0ZpbGVTaXplTGltaXQiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJkYXlqcyIsIkVycm9yIiwidXRpbCIsInN0YWNrIiwiYXBwZW5kRmlsZVN5bmMiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJoYXNQbHVnaW4iLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsImV4ZWNDb21tYW5kIiwiY29kZSIsImVtaXQiLCJ0aXRsZSIsImJvZHkiLCJyZWdpc3RlclBsdWdpbiIsInVucmVnaXN0ZXJQbHVnaW4iLCJtb2R1bGVzIiwid2hlcmUiLCJjb25jYXQiLCJucG0iLCJzcGF3biIsImFzc2lnbiIsIm91dHB1dCIsInN0ZG91dCIsInBpcGUiLCJzdGRlcnIiLCJGQUlMRUQiLCJQbHVnaW5Mb2FkZXIiLCJmdWxsTGlzdCIsIlNldCIsInBsdWdpbk1hcCIsInBhY2thZ2VQYXRoIiwicmVwb3NpdG9yeSIsImxpY2Vuc2UiLCJyZXNvbHZlUGx1Z2luIiwiYmFzZWRpciIsImxvYWQiLCJwbHVnaW5EaXIiLCJqc29uIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJOT1RJRklDQVRJT04iLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsImFmdGVyVXBsb2FkUGx1Z2lucyIsInJlbW92ZUNvbmZpZyIsImV2ZW50QnVzIiwiRXZlbnRFbWl0dGVyIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInZhbHVlIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJfYyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiUmVxdWVzdCIsIkNPTkZJR19DSEFOR0UiLCJoYW5kbGVQcm94eSIsInByb3h5T3B0aW9ucyIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwcm90b2NvbCIsImhlYWRlcnMiLCJtYXhCb2R5TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhDb250ZW50TGVuZ3RoIiwidHVubmVsIiwiaHR0cHNPdmVySHR0cCIsImluc3RhbmNlIiwiYXhpb3MiLCJjcmVhdGUiLCJpbnRlcmNlcHRvcnMiLCJvcHQiLCJfX2lzT2xkT3B0aW9ucyIsIkZvcm1EYXRhIiwiZm9ybURhdGEiLCJnZXRIZWFkZXJzIiwicXMiLCJyZXF1ZXN0SW50ZXJjZXB0b3IiLCJvYmoiLCJjb250ZW50VHlwZSIsIkNvbnRlbnRUeXBlIiwiTGlmZWN5Y2xlIiwic3VwZXIiLCJ0dGZMaW5rIiwidGVtcEZpbGVQYXRoIiwiaW1nRmlsZVBhdGgiLCJ0dGZQYXRoIiwiZW1wdHlEaXJTeW5jIiwib3V0cHV0RGlyIiwiaGVscEdldE9wdGlvbiIsImNvbmZpZ1BhdGgiLCJyYXdJbnB1dCIsIlZFUlNJT04iLCJHVUlfVkVSU0lPTiIsImJpbmQiLCJ1bnNldENvbmZpZyIsImFkZExpc3RlbmVyIiwib25jZSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwibGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwibGlzdGVuZXJDb3VudCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJldmVudE5hbWVzIiwiY3JlYXRlQ29udGV4dCIsInJhd0lucHV0UGF0aCIsImNsb25lRGVlcCIsImFsbFNldHRsZWQiLCJpbmRleCIsIml0ZW1Jc1VybCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZXh0ZW50aW9uIiwiZG93bmxvYWRUVEYiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwibmV3RXh0IiwidGVtcEZpbGUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsInJlbmFtZUNvbmZpZyIsImJhc2U2NEltYWdlIiwiYmVmb3JlVXBsb2FkIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsIlVQTE9BRF9QUk9HUkVTUyIsIkJFRk9SRV9UUkFOU0ZPUk0iLCJoYW5kbGVQbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJkb21haW4iLCJBdXRob3JpemF0aW9uIiwic21maWxlIiwiZmlsZW5hbWUiLCJzc2wiLCJzbW1zQ29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJ0b2tlbiIsImhhc2giLCJpbWFnZXMiLCJ1cGxvYWRIaXN0b3J5IiwiZm9ybWF0UGF0aEhlbHBlciIsInN0YXJ0U2xhc2giLCJlbmRTbGFzaCIsInJvb3RUb0VtcHR5IiwiY2xlYW5QYXRoIiwiZW5jb2RlUGF0aCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZW5lcmF0ZVNpZ25hdHVyZSIsInNlY3JldElkIiwic2VjcmV0S2V5IiwiYXBwSWQiLCJidWNrZXQiLCJzaWduYXR1cmUiLCJzaWduVGltZSIsInRvZGF5Iiwic2lnbktleSIsImNyZWF0ZUhtYWMiLCJlbmRwb2ludCIsImFyZWEiLCJodHRwU3RyaW5nIiwic3RyaW5nVG9TaWduIiwiY3VycmVudCIsIm11bHRpU2lnbmF0dXJlIiwic2lnbkhleEtleSIsInRlbXBTdHJpbmciLCJIb3N0IiwibWltZSIsImxvb2t1cCIsIm9wIiwiZmlsZWNvbnRlbnQiLCJ0Y1l1bk9wdGlvbnMiLCJjdXN0b21VcmwiLCJ1c2VWNCIsIm9wdGlvblVybCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsImJ1aWxkR2l0aHViQXBpVXJsIiwicmVwbyIsImV4dHJhIiwiYnJhbmNoIiwiZ2l0aHViT3B0aW9ucyIsInVwbG9hZFBhdGgiLCJkb3dubG9hZF91cmwiLCJzaGEiLCJpbWdCYXNlNjQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJtYWMiLCJxaW5pdSIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInVybE9wdGlvbnMiLCJjbGllbnRJZCIsInVzZXJuYW1lIiwiYWNjZXNzVG9rZW4iLCJmb3JtYXRBY2Nlc3NUb2tlbiIsImFsYnVtIiwiYXV0aG9yaXphdGlvbiIsInJlcXVlc3RPcHRpb25zIiwiaW5pdFBhZ2VzIiwiYWxidW1IYXNoIiwiZ2V0QWxidW1IYXNoT3B0aW9ucyIsInRpbWVvdXQiLCJhbGJ1bUxpc3QiLCJpbWd1ck9wdGlvbnMiLCJsaW5rIiwiZGVsZXRlaGFzaCIsImdldEN1cnJlbnRVVENEYXRlIiwidG9VVENTdHJpbmciLCJkYXRlIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJwYXNzd29yZCIsImdldEFudGlMZWVjaFBhcmFtIiwiYW50aUxlZWNoVG9rZW4iLCJleHBpcmVUaW1lIiwidXJpIiwiZXhwaXJlIiwic3Vic3RyaW5nIiwidXB5dW5PcHRpb25zIiwic3VmZml4IiwidXB0Iiwid2ViZGF2cGxpc3RPcHRpb25zIiwic3NsRW5hYmxlZCIsImF1dGhUeXBlIiwid2VicGF0aCIsImNsaWVudE9wdGlvbnMiLCJBdXRoVHlwZSIsIkRpZ2VzdCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsInBhdGhUb0NyZWF0ZSIsImNyZWF0ZURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsInB1dEZpbGVDb250ZW50cyIsIm92ZXJ3cml0ZSIsImltZ1RlbXBQYXRoIiwiaW1nVGVtcEZpbGVQYXRoIiwiZ2FsbGVyeVBhdGgiLCJsb2NhbENvbmZpZyIsIndlYlBhdGgiLCJmaWxlSW1nVGVtcFBhdGgiLCJmaWxlVXBsb2FkUGF0aCIsImNvcHlGaWxlU3luYyIsIlNTSENsaWVudCIsIl9pc0Nvbm5lY3RlZCIsIl9pbnN0YW5jZSIsIl9jbGllbnQiLCJOb2RlU1NIIiwiY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IiwicHJpdmF0ZUtleSIsInBhc3NwaHJhc2UiLCJsb2dpbkluZm8iLCJwcml2YXRlS2V5UGF0aCIsImNvbm5lY3QiLCJsb2NhbCIsInJlbW90ZSIsIm1rZGlyIiwicHV0RmlsZSIsImZpbGVNb2RlIiwic2NyaXB0IiwiZXhlYyIsImRpclBhdGgiLCJpc0Nvbm5lY3RlZCIsImRpcmVjdG9yeU1vZGUiLCJkaXJNb2RlIiwiZGlycyIsImN1cnJlbnRQYXRoIiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJjbG9zZSIsImRpc3Bvc2UiLCJzZnRwcGxpc3RDb25maWciLCJ1cGxvYWRUZW1wUGF0aCIsInJlbW90ZVBhdGgiLCJmaWxlVXNlciIsImNob3duIiwicmVtb3ZlU3luYyIsIm1vdmVTeW5jIiwidGdPcHRpb25zIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlbW92ZSIsInNyYyIsInBpY2JlZCIsInNlcnZlcktleSIsInBpY2xpc3RPcHRpb25zIiwiZnVsbFJlc3VsdCIsImlzVjIiLCJ2MUhlYWRlcnMiLCJDb25uZWN0aW9uIiwidjFGb3JtRGF0YSIsInYySGVhZGVycyIsIkFjY2VwdCIsInN0cmF0ZWd5SWQiLCJhbGJ1bUlkIiwicGVybWlzc2lvbiIsInYyRm9ybURhdGEiLCJzdHJhdGVneV9pZCIsImFsYnVtX2lkIiwiYWdlbnQiLCJsc2t5T3B0aW9ucyIsImxpbmtzIiwiRmlsZU5hbWVHZW5lcmF0b3IiLCJtb250aCIsImRheSIsImV4dE5hbWUiLCJtZDUiLCJpbWdCdWZmZXIiLCJtZDVCNjQiLCJtZDVCNjRTaG9ydCIsInNoYTEiLCJzaGEyNTYiLCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXBNUyIsImZvcm1hdFBhdGgiLCJmaWxlTmFtZUdlbmVyYXRvciIsImZpZWxkcyIsInJlIiwiZ2V0UHJveHlBZ2VudCIsImZvcm1hdGVkUHJveHkiLCJmb3JtYXRIdHRwUHJveHlVUkwiLCJIdHRwc1Byb3h5QWdlbnQiLCJIdHRwUHJveHlBZ2VudCIsImtlZXBBbGl2ZSIsImtlZXBBbGl2ZU1zZWNzIiwic2NoZWR1bGluZyIsImdldEZpbGVVUkwiLCJlVGFnIiwidmVyc2lvbklkIiwic2lnbmVkVXJsIiwiZ2V0U2lnbmVkVXJsIiwiR2V0T2JqZWN0Q29tbWFuZCIsIkJ1Y2tldCIsImJ1Y2tldE5hbWUiLCJLZXkiLCJJZk1hdGNoIiwiVmVyc2lvbklkIiwiZXhwaXJlc0luIiwidXJsT2JqZWN0Iiwic2VhcmNoIiwiaHJlZiIsImNyZWF0ZVMzQ2xpZW50IiwiaHR0cEhhbmRsZXJPcHRzIiwiaHR0cEFnZW50IiwicmVnaW9uIiwiY3JlZGVudGlhbHMiLCJhY2Nlc3NLZXlJRCIsInNlY3JldEFjY2Vzc0tleSIsInRscyIsImZvcmNlUGF0aFN0eWxlIiwicGF0aFN0eWxlQWNjZXNzIiwicmVxdWVzdEhhbmRsZXIiLCJOb2RlSHR0cEhhbmRsZXIiLCJTM0NsaWVudCIsImNyZWF0ZVVwbG9hZFRhc2siLCJjb250ZW50RW5jb2RpbmciLCJnZXRUeXBlIiwiZmlsZVR5cGUiLCJGaWxlVHlwZSIsImZyb21CdWZmZXIiLCJleHRyYWN0SW5mbyIsIlB1dE9iamVjdENvbW1hbmQiLCJBQ0wiLCJhY2wiLCJCb2R5IiwiQ29udGVudEVuY29kaW5nIiwic2VuZCIsInVybFByZWZpeCIsIkVUYWciLCJpbWdVUkwiLCJmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJCb29sZWFuIiwidGFza3MiLCJpZHgiLCJyZXN1bHRzIiwiYnVpbGRJblVwbG9hZGVycyIsImFsaVl1blVwbG9hZGVyIiwiYXdzczNwbGlzdFVwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwibG9jYWxVcGxvYWRlciIsImxza3lVcGxvYWRlciIsInBpY2xpc3RVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJzZnRwVXBsb2FkZXIiLCJzbW1zVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwidGVsZWdyYXBoVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImdldEltZ1NpemUiLCJJbWdGcm9tUGF0aCIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwidHJpbSIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwic21tcyIsInJlYWQiLCJmbHVzaCIsInVuc2V0IiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfTE9DQUwiLCJQSUNCRURfTE9DQUxfUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfTE9DQUxfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX1dFQlBBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9URUxFR1JBUEgiLCJQSUNCRURfSU1HVVIiLCJQSUNCRURfSU1HVVJfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX0FMQlVNIiwiUElDQkVEX0lNR1VSX1BST1hZIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfVVBZVU4iLCJQSUNCRURfVVBZVU5fQlVDS0VUIiwiUElDQkVEX1VQWVVOX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX1BBVEgiLCJQSUNCRURfVVBZVU5fVVJMIiwiUElDQkVEX1VQWVVOX09QVElPTlMiLCJQSUNCRURfVVBZVU5fRU5EUE9JTlQiLCJQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTiIsIlBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRSIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX1dFQkRBVlBMSVNUIiwiUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUiLCJQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUyIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1NGVFBQTElTVCIsIlBJQ0JFRF9TRlRQUExJU1RfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfRElSX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFIiwiUElDQkVEX1BJQ0xJU1QiLCJQSUNCRURfUElDTElTVF9IT1NUIiwiUElDQkVEX1BJQ0xJU1RfUE9SVCIsIlBJQ0JFRF9QSUNMSVNUX1BJQ0JFRCIsIlBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUiLCJQSUNCRURfUElDTElTVF9LRVkiLCJQSUNCRURfTFNLWV9QTElTVCIsIlBJQ0JFRF9MU0tZX1ZFUlNJT04iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04iLCJQSUNCRURfTFNLWV9IT1NUIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUIiwiUElDQkVEX0xTS1lfVE9LRU4iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOIiwiUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEIiwiUElDQkVEX0xTS1lfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEIiwiUElDQkVEX0xTS1lfUEVSTUlTU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUIiwiUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZIiwiUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUIiwiUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UIiwiUElDQkVEX0FXU1MzUExJU1RfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgiLCJQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MiLCJQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0wiLCJQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVgiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0wiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIkJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMSVAiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRyIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsIl9wbHVnaW5Mb2FkZXIiLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCIsImNsZWFudXAiXSwibWFwcGluZ3MiOiJpNENBSUEsTUFBTUEsR0FBZ0IsQ0FBQ0MsRUFBVUMsRUFBaUJDLEVBQXFCQyxFQUFlQyxFQUFvQkMsS0FDeEcsSUFBSUMsRUFBVU4sRUFB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